@theruansilva/omp-web 2.0.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 (280) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +181 -0
  3. package/dist/cli/doctor.js +118 -0
  4. package/dist/cli/doctor.js.map +1 -0
  5. package/dist/cli/serviceTemplates.js +55 -0
  6. package/dist/cli/serviceTemplates.js.map +1 -0
  7. package/dist/cli/types.js +2 -0
  8. package/dist/cli/types.js.map +1 -0
  9. package/dist/cli.js +872 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/client/assets/CodeViewer-CJNBz-Ox.js +4 -0
  12. package/dist/client/assets/TerminalPanel-B9-LUv7E.js +126 -0
  13. package/dist/client/assets/UnifiedDiffViewer-BUqme4se.js +34 -0
  14. package/dist/client/assets/index-DGBYb2j9.css +1 -0
  15. package/dist/client/assets/index-uWm_YNRB.js +4427 -0
  16. package/dist/client/assets/vendor-editor-core-D9EJm1dE.js +10 -0
  17. package/dist/client/assets/vendor-editor-languages-N6dcxgRO.js +26 -0
  18. package/dist/client/assets/vendor-terminal-DDGTF8rc.css +1 -0
  19. package/dist/client/assets/vendor-terminal-DjQ08hXu.js +16 -0
  20. package/dist/client/favicon-16x16.png +0 -0
  21. package/dist/client/favicon-180x180.png +0 -0
  22. package/dist/client/favicon-192x192.png +0 -0
  23. package/dist/client/favicon-32x32.png +0 -0
  24. package/dist/client/favicon-512x512.png +0 -0
  25. package/dist/client/favicon.ico +0 -0
  26. package/dist/client/favicon.png +0 -0
  27. package/dist/client/favicon.svg +11 -0
  28. package/dist/client/index.html +68 -0
  29. package/dist/client/manifest.webmanifest +36 -0
  30. package/dist/client-react/assets/index-BQ6zLLfz.js +51 -0
  31. package/dist/client-react/assets/index-Befs78HG.css +1 -0
  32. package/dist/client-react/index.html +16 -0
  33. package/dist/config.js +272 -0
  34. package/dist/config.js.map +1 -0
  35. package/dist/docker/ompWebDockerCommandPlan.js +211 -0
  36. package/dist/docker/ompWebDockerCommandPlan.js.map +1 -0
  37. package/dist/docker/piWebDockerCommandPlan.js +211 -0
  38. package/dist/docker/piWebDockerCommandPlan.js.map +1 -0
  39. package/dist/omp-web-plugins/info/omp-web-plugin.js +51 -0
  40. package/dist/omp-web-plugins/info/package.json +9 -0
  41. package/dist/omp-web-plugins/schedule-prompts/omp-web-plugin.js +43 -0
  42. package/dist/omp-web-plugins/schedule-prompts/package.json +9 -0
  43. package/dist/omp-web-plugins/schedule-prompts/schedulePromptsPanelElement.js +242 -0
  44. package/dist/omp-web-plugins/schedule-prompts/types.js +2 -0
  45. package/dist/omp-web-plugins/updates/omp-web-plugin.js +173 -0
  46. package/dist/omp-web-plugins/updates/package.json +9 -0
  47. package/dist/omp-web-plugins/updates/updatesLogic.js +97 -0
  48. package/dist/ompWebVersionReport.js +217 -0
  49. package/dist/ompWebVersionReport.js.map +1 -0
  50. package/dist/pi-web-plugins/info/package.json +9 -0
  51. package/dist/pi-web-plugins/info/pi-web-plugin.js +51 -0
  52. package/dist/pi-web-plugins/schedule-prompts/package.json +9 -0
  53. package/dist/pi-web-plugins/schedule-prompts/pi-web-plugin.js +43 -0
  54. package/dist/pi-web-plugins/schedule-prompts/schedulePromptsPanelElement.js +226 -0
  55. package/dist/pi-web-plugins/schedule-prompts/types.js +2 -0
  56. package/dist/pi-web-plugins/updates/package.json +9 -0
  57. package/dist/pi-web-plugins/updates/pi-web-plugin.js +173 -0
  58. package/dist/pi-web-plugins/updates/updatesLogic.js +97 -0
  59. package/dist/piWebVersionReport.js +225 -0
  60. package/dist/piWebVersionReport.js.map +1 -0
  61. package/dist/plugin-api/unstable.d.ts +22 -0
  62. package/dist/plugin-api.d.ts +197 -0
  63. package/dist/server/activity/workspaceActivityRoutes.js +4 -0
  64. package/dist/server/activity/workspaceActivityRoutes.js.map +1 -0
  65. package/dist/server/activity/workspaceActivityService.js +98 -0
  66. package/dist/server/activity/workspaceActivityService.js.map +1 -0
  67. package/dist/server/app.js +217 -0
  68. package/dist/server/app.js.map +1 -0
  69. package/dist/server/configRoutes.js +278 -0
  70. package/dist/server/configRoutes.js.map +1 -0
  71. package/dist/server/diagnostics/nodePtySpawnHelper.js +130 -0
  72. package/dist/server/diagnostics/nodePtySpawnHelper.js.map +1 -0
  73. package/dist/server/git/gitEnv.js +15 -0
  74. package/dist/server/git/gitEnv.js.map +1 -0
  75. package/dist/server/git/gitService.js +119 -0
  76. package/dist/server/git/gitService.js.map +1 -0
  77. package/dist/server/gitRoutes.js +29 -0
  78. package/dist/server/gitRoutes.js.map +1 -0
  79. package/dist/server/index.js +16 -0
  80. package/dist/server/index.js.map +1 -0
  81. package/dist/server/machines/machineClient.js +162 -0
  82. package/dist/server/machines/machineClient.js.map +1 -0
  83. package/dist/server/machines/machinePluginProxyRoutes.js +151 -0
  84. package/dist/server/machines/machinePluginProxyRoutes.js.map +1 -0
  85. package/dist/server/machines/machineProxyRoutes.js +152 -0
  86. package/dist/server/machines/machineProxyRoutes.js.map +1 -0
  87. package/dist/server/machines/machineRoutes.js +61 -0
  88. package/dist/server/machines/machineRoutes.js.map +1 -0
  89. package/dist/server/machines/machineService.js +230 -0
  90. package/dist/server/machines/machineService.js.map +1 -0
  91. package/dist/server/machines/machineStore.js +123 -0
  92. package/dist/server/machines/machineStore.js.map +1 -0
  93. package/dist/server/machines/proxyUtils.js +39 -0
  94. package/dist/server/machines/proxyUtils.js.map +1 -0
  95. package/dist/server/ompWebPluginService.js +298 -0
  96. package/dist/server/ompWebPluginService.js.map +1 -0
  97. package/dist/server/ompWebStatus.js +604 -0
  98. package/dist/server/ompWebStatus.js.map +1 -0
  99. package/dist/server/ompWebStatusCache.js +31 -0
  100. package/dist/server/ompWebStatusCache.js.map +1 -0
  101. package/dist/server/piPackageRoutes.js +85 -0
  102. package/dist/server/piPackageRoutes.js.map +1 -0
  103. package/dist/server/piPackageService.js +65 -0
  104. package/dist/server/piPackageService.js.map +1 -0
  105. package/dist/server/piWebPluginService.js +283 -0
  106. package/dist/server/piWebPluginService.js.map +1 -0
  107. package/dist/server/piWebStatus.js +602 -0
  108. package/dist/server/piWebStatus.js.map +1 -0
  109. package/dist/server/piWebStatusCache.js +32 -0
  110. package/dist/server/piWebStatusCache.js.map +1 -0
  111. package/dist/server/projects/directorySuggestions.js +37 -0
  112. package/dist/server/projects/directorySuggestions.js.map +1 -0
  113. package/dist/server/projects/projectService.js +31 -0
  114. package/dist/server/projects/projectService.js.map +1 -0
  115. package/dist/server/push/PushNotificationService.js +137 -0
  116. package/dist/server/push/PushNotificationService.js.map +1 -0
  117. package/dist/server/push/pushRoutes.js +50 -0
  118. package/dist/server/push/pushRoutes.js.map +1 -0
  119. package/dist/server/realtime/honoRealtimeSocket.js +32 -0
  120. package/dist/server/realtime/honoRealtimeSocket.js.map +1 -0
  121. package/dist/server/realtime/sessionEventHub.js +39 -0
  122. package/dist/server/realtime/sessionEventHub.js.map +1 -0
  123. package/dist/server/sessiond/sessionProxyRoutes.js +85 -0
  124. package/dist/server/sessiond/sessionProxyRoutes.js.map +1 -0
  125. package/dist/server/sessiond.js +104 -0
  126. package/dist/server/sessiond.js.map +1 -0
  127. package/dist/server/sessions/attachmentService.js +112 -0
  128. package/dist/server/sessions/attachmentService.js.map +1 -0
  129. package/dist/server/sessions/authProviderOptions.js +52 -0
  130. package/dist/server/sessions/authProviderOptions.js.map +1 -0
  131. package/dist/server/sessions/authRoutes.js +75 -0
  132. package/dist/server/sessions/authRoutes.js.map +1 -0
  133. package/dist/server/sessions/authService.js +105 -0
  134. package/dist/server/sessions/authService.js.map +1 -0
  135. package/dist/server/sessions/builtinCommands.js +31 -0
  136. package/dist/server/sessions/builtinCommands.js.map +1 -0
  137. package/dist/server/sessions/editPreview.js +196 -0
  138. package/dist/server/sessions/editPreview.js.map +1 -0
  139. package/dist/server/sessions/editTool.js +46 -0
  140. package/dist/server/sessions/editTool.js.map +1 -0
  141. package/dist/server/sessions/messagePaging.js +41 -0
  142. package/dist/server/sessions/messagePaging.js.map +1 -0
  143. package/dist/server/sessions/oauthLoginFlowService.js +136 -0
  144. package/dist/server/sessions/oauthLoginFlowService.js.map +1 -0
  145. package/dist/server/sessions/piAgentSession.js +472 -0
  146. package/dist/server/sessions/piAgentSession.js.map +1 -0
  147. package/dist/server/sessions/piSessionManagerGateway.js +133 -0
  148. package/dist/server/sessions/piSessionManagerGateway.js.map +1 -0
  149. package/dist/server/sessions/piSessionService.js +1737 -0
  150. package/dist/server/sessions/piSessionService.js.map +1 -0
  151. package/dist/server/sessions/schedulePrompt/schedulePromptService.js +46 -0
  152. package/dist/server/sessions/schedulePrompt/schedulePromptService.js.map +1 -0
  153. package/dist/server/sessions/schedulePrompt/scheduler.js +317 -0
  154. package/dist/server/sessions/schedulePrompt/scheduler.js.map +1 -0
  155. package/dist/server/sessions/schedulePrompt/storage.js +118 -0
  156. package/dist/server/sessions/schedulePrompt/storage.js.map +1 -0
  157. package/dist/server/sessions/schedulePrompt/tool.js +251 -0
  158. package/dist/server/sessions/schedulePrompt/tool.js.map +1 -0
  159. package/dist/server/sessions/schedulePrompt/types.js +2 -0
  160. package/dist/server/sessions/schedulePrompt/types.js.map +1 -0
  161. package/dist/server/sessions/sessionArchiveHelpers.js +186 -0
  162. package/dist/server/sessions/sessionArchiveHelpers.js.map +1 -0
  163. package/dist/server/sessions/sessionArchiveStore.js +254 -0
  164. package/dist/server/sessions/sessionArchiveStore.js.map +1 -0
  165. package/dist/server/sessions/sessionArchiveTree.js +35 -0
  166. package/dist/server/sessions/sessionArchiveTree.js.map +1 -0
  167. package/dist/server/sessions/sessionCleanup.js +157 -0
  168. package/dist/server/sessions/sessionCleanup.js.map +1 -0
  169. package/dist/server/sessions/sessionCommandService.js +349 -0
  170. package/dist/server/sessions/sessionCommandService.js.map +1 -0
  171. package/dist/server/sessions/sessionEventMapper.js +115 -0
  172. package/dist/server/sessions/sessionEventMapper.js.map +1 -0
  173. package/dist/server/sessions/sessionNameGenerator.js +61 -0
  174. package/dist/server/sessions/sessionNameGenerator.js.map +1 -0
  175. package/dist/server/sessions/sessionRoutes.js +419 -0
  176. package/dist/server/sessions/sessionRoutes.js.map +1 -0
  177. package/dist/server/sessions/sessionRuntimeStore.js +2 -0
  178. package/dist/server/sessions/sessionRuntimeStore.js.map +1 -0
  179. package/dist/server/sessions/spawnSessionTool.js +41 -0
  180. package/dist/server/sessions/spawnSessionTool.js.map +1 -0
  181. package/dist/server/sessions/spawnSubsessionTool.js +203 -0
  182. package/dist/server/sessions/spawnSubsessionTool.js.map +1 -0
  183. package/dist/server/sessions/spawnTargetResolver.js +36 -0
  184. package/dist/server/sessions/spawnTargetResolver.js.map +1 -0
  185. package/dist/server/sessions/subsessionLinks.js +171 -0
  186. package/dist/server/sessions/subsessionLinks.js.map +1 -0
  187. package/dist/server/sessions/subsessionTranscript.js +233 -0
  188. package/dist/server/sessions/subsessionTranscript.js.map +1 -0
  189. package/dist/server/storage/projectStore.js +83 -0
  190. package/dist/server/storage/projectStore.js.map +1 -0
  191. package/dist/server/terminalProxyRoutes.js +168 -0
  192. package/dist/server/terminalProxyRoutes.js.map +1 -0
  193. package/dist/server/terminals/terminalRoutes.js +177 -0
  194. package/dist/server/terminals/terminalRoutes.js.map +1 -0
  195. package/dist/server/terminals/terminalService.js +309 -0
  196. package/dist/server/terminals/terminalService.js.map +1 -0
  197. package/dist/server/terminals/terminalSize.js +17 -0
  198. package/dist/server/terminals/terminalSize.js.map +1 -0
  199. package/dist/server/testUtils.js +43 -0
  200. package/dist/server/testUtils.js.map +1 -0
  201. package/dist/server/types.js +2 -0
  202. package/dist/server/types.js.map +1 -0
  203. package/dist/server/utils.js +2 -0
  204. package/dist/server/utils.js.map +1 -0
  205. package/dist/server/webSocketBridge.js +55 -0
  206. package/dist/server/webSocketBridge.js.map +1 -0
  207. package/dist/server/workingDirectory.js +44 -0
  208. package/dist/server/workingDirectory.js.map +1 -0
  209. package/dist/server/workspaceExplorerRoutes.js +148 -0
  210. package/dist/server/workspaceExplorerRoutes.js.map +1 -0
  211. package/dist/server/workspaces/effectivePathAccess.js +27 -0
  212. package/dist/server/workspaces/effectivePathAccess.js.map +1 -0
  213. package/dist/server/workspaces/fileContentService.js +200 -0
  214. package/dist/server/workspaces/fileContentService.js.map +1 -0
  215. package/dist/server/workspaces/fileSuggestions.js +512 -0
  216. package/dist/server/workspaces/fileSuggestions.js.map +1 -0
  217. package/dist/server/workspaces/fileTreeService.js +27 -0
  218. package/dist/server/workspaces/fileTreeService.js.map +1 -0
  219. package/dist/server/workspaces/gitWorktreeDiscovery.js +34 -0
  220. package/dist/server/workspaces/gitWorktreeDiscovery.js.map +1 -0
  221. package/dist/server/workspaces/imagePreviewService.js +40 -0
  222. package/dist/server/workspaces/imagePreviewService.js.map +1 -0
  223. package/dist/server/workspaces/pathAccessPolicy.js +87 -0
  224. package/dist/server/workspaces/pathAccessPolicy.js.map +1 -0
  225. package/dist/server/workspaces/pathSafety.js +54 -0
  226. package/dist/server/workspaces/pathSafety.js.map +1 -0
  227. package/dist/server/workspaces/projectOmpWebConfig.js +56 -0
  228. package/dist/server/workspaces/projectOmpWebConfig.js.map +1 -0
  229. package/dist/server/workspaces/projectPiWebConfig.js +61 -0
  230. package/dist/server/workspaces/projectPiWebConfig.js.map +1 -0
  231. package/dist/server/workspaces/workspaceContext.js +8 -0
  232. package/dist/server/workspaces/workspaceContext.js.map +1 -0
  233. package/dist/server/workspaces/workspaceDeletionRoutes.js +113 -0
  234. package/dist/server/workspaces/workspaceDeletionRoutes.js.map +1 -0
  235. package/dist/server/workspaces/workspaceService.js +39 -0
  236. package/dist/server/workspaces/workspaceService.js.map +1 -0
  237. package/dist/sessiond/config.js +9 -0
  238. package/dist/sessiond/config.js.map +1 -0
  239. package/dist/sessiond/sessionDaemonClient.js +34 -0
  240. package/dist/sessiond/sessionDaemonClient.js.map +1 -0
  241. package/dist/shared/activity.js +26 -0
  242. package/dist/shared/activity.js.map +1 -0
  243. package/dist/shared/apiTypes.d.ts +769 -0
  244. package/dist/shared/apiTypes.js +11 -0
  245. package/dist/shared/apiTypes.js.map +1 -0
  246. package/dist/shared/capabilities.js +52 -0
  247. package/dist/shared/capabilities.js.map +1 -0
  248. package/dist/shared/federatedRoutes.js +81 -0
  249. package/dist/shared/federatedRoutes.js.map +1 -0
  250. package/dist/shared/machinePluginIds.js +41 -0
  251. package/dist/shared/machinePluginIds.js.map +1 -0
  252. package/dist/shared/ompWebStatusParsing.js +100 -0
  253. package/dist/shared/ompWebStatusParsing.js.map +1 -0
  254. package/dist/shared/piWebStatusParsing.js +102 -0
  255. package/dist/shared/piWebStatusParsing.js.map +1 -0
  256. package/dist/shared/pluginIds.js +5 -0
  257. package/dist/shared/pluginIds.js.map +1 -0
  258. package/dist/shared/promptAttachments.js +90 -0
  259. package/dist/shared/promptAttachments.js.map +1 -0
  260. package/dist/shared/thinkingLevels.d.ts +19 -0
  261. package/dist/shared/thinkingLevels.js +24 -0
  262. package/dist/shared/thinkingLevels.js.map +1 -0
  263. package/dist/shared/utils.js +10 -0
  264. package/dist/shared/utils.js.map +1 -0
  265. package/dist/shared/workspaceDeletion.js +12 -0
  266. package/dist/shared/workspaceDeletion.js.map +1 -0
  267. package/dist/shared/workspaceFiles.js +3 -0
  268. package/dist/shared/workspaceFiles.js.map +1 -0
  269. package/docs/assets/favicon.svg +11 -0
  270. package/docs/assets/omp-web-banner.png +0 -0
  271. package/docs/assets/omp-web-desktop.png +0 -0
  272. package/docs/assets/omp-web-mobile.png +0 -0
  273. package/docs/assets/omp-web-tablet.png +0 -0
  274. package/docs/config.md +208 -0
  275. package/docs/plugins.md +916 -0
  276. package/extensions/omp-web.ts +133 -0
  277. package/install.sh +5 -0
  278. package/package.json +134 -0
  279. package/plugin-api/unstable.d.ts +1 -0
  280. package/plugin-api.d.ts +1 -0
@@ -0,0 +1,419 @@
1
+ import { normalizeRequestCwd } from "../workingDirectory.js";
2
+ import { createHonoRealtimeSocket } from "../realtime/honoRealtimeSocket.js";
3
+ import { normalizeSessionCleanupRequest } from "./sessionCleanup.js";
4
+ import { errorMessage, isRecord } from "../utils.js";
5
+ export function registerSessionRoutes(app, sessions, eventHub, prefix = "", upgradeWebSocket) {
6
+ app.get(`${prefix}/sessions`, async (c) => {
7
+ const cwd = c.req.query("cwd");
8
+ if (cwd === undefined || cwd === "")
9
+ return c.json({ error: "cwd query parameter is required" }, 400);
10
+ try {
11
+ return c.json(await sessions.list(normalizeRequestCwd(cwd)));
12
+ }
13
+ catch (error) {
14
+ return c.json({ error: errorMessage(error) }, 400);
15
+ }
16
+ });
17
+ app.post(`${prefix}/sessions`, async (c) => {
18
+ try {
19
+ const body = requireRecord(await c.req.json().catch(() => undefined));
20
+ return c.json(await sessions.start(normalizeRequestCwd(requireString(body, "cwd"))));
21
+ }
22
+ catch (error) {
23
+ return c.json({ error: errorMessage(error) }, 400);
24
+ }
25
+ });
26
+ app.post(`${prefix}/sessions/cleanup/preview`, async (c) => {
27
+ try {
28
+ const body = await c.req.json().catch(() => undefined);
29
+ return c.json(await sessions.cleanupPreview(normalizeSessionCleanupRequest(optionalRecord(body))));
30
+ }
31
+ catch (error) {
32
+ return c.json({ error: errorMessage(error) }, 400);
33
+ }
34
+ });
35
+ app.post(`${prefix}/sessions/cleanup`, async (c) => {
36
+ try {
37
+ const body = await c.req.json().catch(() => undefined);
38
+ return c.json(await sessions.cleanup(normalizeSessionCleanupRequest(optionalRecord(body))));
39
+ }
40
+ catch (error) {
41
+ return c.json({ error: errorMessage(error) }, 400);
42
+ }
43
+ });
44
+ app.post(`${prefix}/sessions/bulk/archive`, async (c) => {
45
+ try {
46
+ const body = await c.req.json().catch(() => undefined);
47
+ return c.json(await sessions.archiveMany(bulkMutationRefsFromBody(body)));
48
+ }
49
+ catch (error) {
50
+ return c.json({ error: errorMessage(error) }, mutationErrorStatus(error));
51
+ }
52
+ });
53
+ app.post(`${prefix}/sessions/bulk/delete-archived`, async (c) => {
54
+ try {
55
+ const body = await c.req.json().catch(() => undefined);
56
+ return c.json(await sessions.deleteArchivedMany(bulkMutationRefsFromBody(body)));
57
+ }
58
+ catch (error) {
59
+ return c.json({ error: errorMessage(error) }, mutationErrorStatus(error));
60
+ }
61
+ });
62
+ app.get(`${prefix}/sessions/:sessionId/messages`, async (c) => {
63
+ try {
64
+ const sessionId = c.req.param("sessionId") ?? "";
65
+ const before = c.req.query("before");
66
+ const limit = c.req.query("limit");
67
+ const page = { ...optionalField("before", optionalNumber(before)), ...optionalField("limit", optionalNumber(limit)) };
68
+ return c.json(await sessions.messages(sessionLookupFromQuery(sessionId, c.req.query("cwd")), page));
69
+ }
70
+ catch (error) {
71
+ return c.json({ error: errorMessage(error) }, 404);
72
+ }
73
+ });
74
+ app.get(`${prefix}/sessions/:sessionId/status`, async (c) => {
75
+ try {
76
+ const sessionId = c.req.param("sessionId");
77
+ return c.json(await sessions.status(sessionLookupFromQuery(sessionId, c.req.query("cwd"))));
78
+ }
79
+ catch (error) {
80
+ return c.json({ error: errorMessage(error) }, 404);
81
+ }
82
+ });
83
+ app.get(`${prefix}/sessions/:sessionId/models`, async (c) => {
84
+ try {
85
+ const sessionId = c.req.param("sessionId");
86
+ return c.json({ models: await sessions.availableModels(sessionLookupFromQuery(sessionId, c.req.query("cwd"))) });
87
+ }
88
+ catch (error) {
89
+ return c.json({ error: errorMessage(error) }, 404);
90
+ }
91
+ });
92
+ app.post(`${prefix}/sessions/:sessionId/model`, async (c) => {
93
+ try {
94
+ const sessionId = c.req.param("sessionId");
95
+ const body = optionalRecord(await c.req.json().catch(() => undefined));
96
+ const persist = typeof body["persist"] === "boolean" ? body["persist"] : undefined;
97
+ const role = typeof body["role"] === "string" ? body["role"] : undefined;
98
+ const modelOptions = {};
99
+ if (persist !== undefined)
100
+ modelOptions.persist = persist;
101
+ if (role !== undefined)
102
+ modelOptions.role = role;
103
+ return c.json(await sessions.setModel(sessionLookupFromBody(sessionId, body), requireString(body, "provider"), requireString(body, "modelId"), modelOptions));
104
+ }
105
+ catch (error) {
106
+ return c.json({ error: errorMessage(error) }, mutationErrorStatus(error));
107
+ }
108
+ });
109
+ app.post(`${prefix}/sessions/:sessionId/model/cycle`, async (c) => {
110
+ try {
111
+ const sessionId = c.req.param("sessionId");
112
+ const body = optionalRecord(await c.req.json().catch(() => undefined));
113
+ const direction = body["direction"];
114
+ if (direction !== undefined && direction !== "forward" && direction !== "backward")
115
+ throw new Error("direction must be forward or backward");
116
+ return c.json(await sessions.cycleModel(sessionLookupFromBody(sessionId, body), direction ?? "forward"));
117
+ }
118
+ catch (error) {
119
+ return c.json({ error: errorMessage(error) }, mutationErrorStatus(error));
120
+ }
121
+ });
122
+ app.get(`${prefix}/sessions/:sessionId/thinking-levels`, async (c) => {
123
+ try {
124
+ const sessionId = c.req.param("sessionId");
125
+ return c.json({ levels: await sessions.availableThinkingLevels(sessionLookupFromQuery(sessionId, c.req.query("cwd"))) });
126
+ }
127
+ catch (error) {
128
+ return c.json({ error: errorMessage(error) }, 404);
129
+ }
130
+ });
131
+ app.post(`${prefix}/sessions/:sessionId/thinking-level`, async (c) => {
132
+ try {
133
+ const sessionId = c.req.param("sessionId");
134
+ const body = optionalRecord(await c.req.json().catch(() => undefined));
135
+ return c.json(await sessions.setThinkingLevel(sessionLookupFromBody(sessionId, body), requireThinkingLevel(body["level"])));
136
+ }
137
+ catch (error) {
138
+ return c.json({ error: errorMessage(error) }, mutationErrorStatus(error));
139
+ }
140
+ });
141
+ app.post(`${prefix}/sessions/:sessionId/thinking-level/cycle`, async (c) => {
142
+ try {
143
+ const sessionId = c.req.param("sessionId");
144
+ const body = optionalRecord(await c.req.json().catch(() => undefined));
145
+ return c.json(await sessions.cycleThinkingLevel(sessionLookupFromBody(sessionId, body)));
146
+ }
147
+ catch (error) {
148
+ return c.json({ error: errorMessage(error) }, mutationErrorStatus(error));
149
+ }
150
+ });
151
+ app.get(`${prefix}/sessions/:sessionId/commands`, async (c) => {
152
+ try {
153
+ const sessionId = c.req.param("sessionId");
154
+ return c.json(await sessions.commands(sessionLookupFromQuery(sessionId, c.req.query("cwd"))));
155
+ }
156
+ catch (error) {
157
+ return c.json({ error: errorMessage(error) }, 404);
158
+ }
159
+ });
160
+ app.post(`${prefix}/sessions/:sessionId/prompt`, async (c) => {
161
+ try {
162
+ const sessionId = c.req.param("sessionId");
163
+ const body = optionalRecord(await c.req.json().catch(() => undefined));
164
+ await sessions.prompt(sessionLookupFromBody(sessionId, body), body["text"], body["streamingBehavior"], body["attachments"]);
165
+ return c.json({ accepted: true });
166
+ }
167
+ catch (error) {
168
+ return c.json({ error: errorMessage(error) }, mutationErrorStatus(error));
169
+ }
170
+ });
171
+ app.post(`${prefix}/sessions/:sessionId/attachments`, async (c) => {
172
+ try {
173
+ const sessionId = c.req.param("sessionId");
174
+ const body = optionalRecord(await c.req.json().catch(() => undefined));
175
+ const folder = body["folder"];
176
+ if (folder !== undefined && typeof folder !== "string")
177
+ throw new Error("folder field must be a string");
178
+ const attachments = await sessions.saveAttachments(sessionLookupFromBody(sessionId, body), body["attachments"], folder);
179
+ return c.json({ attachments });
180
+ }
181
+ catch (error) {
182
+ return c.json({ error: errorMessage(error) }, mutationErrorStatus(error));
183
+ }
184
+ });
185
+ app.post(`${prefix}/sessions/:sessionId/shell`, async (c) => {
186
+ try {
187
+ const sessionId = c.req.param("sessionId");
188
+ const body = optionalRecord(await c.req.json().catch(() => undefined));
189
+ await sessions.shell(sessionLookupFromBody(sessionId, body), requireString(body, "text"));
190
+ return c.json({ accepted: true });
191
+ }
192
+ catch (error) {
193
+ return c.json({ error: errorMessage(error) }, mutationErrorStatus(error));
194
+ }
195
+ });
196
+ app.post(`${prefix}/sessions/:sessionId/commands/run`, async (c) => {
197
+ try {
198
+ const sessionId = c.req.param("sessionId");
199
+ const body = optionalRecord(await c.req.json().catch(() => undefined));
200
+ return c.json(await sessions.runCommand(sessionLookupFromBody(sessionId, body), requireString(body, "text")));
201
+ }
202
+ catch (error) {
203
+ return c.json({ error: errorMessage(error) }, mutationErrorStatus(error));
204
+ }
205
+ });
206
+ app.post(`${prefix}/sessions/:sessionId/commands/respond`, async (c) => {
207
+ try {
208
+ const sessionId = c.req.param("sessionId");
209
+ const body = optionalRecord(await c.req.json().catch(() => undefined));
210
+ return c.json(await sessions.respondToCommand(sessionLookupFromBody(sessionId, body), requireString(body, "requestId"), requireString(body, "value")));
211
+ }
212
+ catch (error) {
213
+ return c.json({ error: errorMessage(error) }, mutationErrorStatus(error));
214
+ }
215
+ });
216
+ app.post(`${prefix}/sessions/:sessionId/ask/respond`, async (c) => {
217
+ try {
218
+ const sessionId = c.req.param("sessionId");
219
+ const body = optionalRecord(await c.req.json().catch(() => undefined));
220
+ const requestId = requireString(body, "requestId");
221
+ /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions */
222
+ const result = body?.["result"];
223
+ return c.json(await sessions.respondToAsk(sessionLookupFromBody(sessionId, body), requestId, result));
224
+ }
225
+ catch (error) {
226
+ return c.json({ error: errorMessage(error) }, mutationErrorStatus(error));
227
+ }
228
+ });
229
+ app.post(`${prefix}/sessions/:sessionId/abort`, async (c) => {
230
+ try {
231
+ const sessionId = c.req.param("sessionId");
232
+ const body = optionalRecord(await c.req.json().catch(() => undefined));
233
+ await sessions.abort(sessionLookupFromBody(sessionId, body));
234
+ return c.json({ aborted: true });
235
+ }
236
+ catch (error) {
237
+ return c.json({ error: errorMessage(error) }, mutationErrorStatus(error));
238
+ }
239
+ });
240
+ app.post(`${prefix}/sessions/:sessionId/stop`, async (c) => {
241
+ try {
242
+ const sessionId = c.req.param("sessionId");
243
+ const body = optionalRecord(await c.req.json().catch(() => undefined));
244
+ sessions.stop(sessionLookupFromBody(sessionId, body));
245
+ return c.json({ stopped: true });
246
+ }
247
+ catch (error) {
248
+ return c.json({ error: errorMessage(error) }, mutationErrorStatus(error));
249
+ }
250
+ });
251
+ app.post(`${prefix}/sessions/:sessionId/archive`, async (c) => {
252
+ try {
253
+ const sessionId = c.req.param("sessionId");
254
+ const body = optionalRecord(await c.req.json().catch(() => undefined));
255
+ await sessions.archive(sessionLookupFromBody(sessionId, body));
256
+ return c.json({ archived: true });
257
+ }
258
+ catch (error) {
259
+ return c.json({ error: errorMessage(error) }, mutationErrorStatus(error));
260
+ }
261
+ });
262
+ app.post(`${prefix}/sessions/:sessionId/archive-tree`, async (c) => {
263
+ try {
264
+ const sessionId = c.req.param("sessionId");
265
+ const body = optionalRecord(await c.req.json().catch(() => undefined));
266
+ return c.json(await sessions.archiveTree(sessionLookupFromBody(sessionId, body)));
267
+ }
268
+ catch (error) {
269
+ return c.json({ error: errorMessage(error) }, mutationErrorStatus(error));
270
+ }
271
+ });
272
+ app.post(`${prefix}/sessions/:sessionId/restore`, async (c) => {
273
+ try {
274
+ const sessionId = c.req.param("sessionId");
275
+ const body = optionalRecord(await c.req.json().catch(() => undefined));
276
+ await sessions.restore(sessionLookupFromBody(sessionId, body));
277
+ return c.json({ restored: true });
278
+ }
279
+ catch (error) {
280
+ return c.json({ error: errorMessage(error) }, mutationErrorStatus(error));
281
+ }
282
+ });
283
+ app.delete(`${prefix}/sessions/:sessionId`, async (c) => {
284
+ try {
285
+ const sessionId = c.req.param("sessionId");
286
+ await sessions.deleteArchived(sessionLookupFromQuery(sessionId, c.req.query("cwd")));
287
+ return c.json({ deleted: true });
288
+ }
289
+ catch (error) {
290
+ return c.json({ error: errorMessage(error) }, mutationErrorStatus(error));
291
+ }
292
+ });
293
+ app.post(`${prefix}/sessions/:sessionId/reload`, async (c) => {
294
+ try {
295
+ const sessionId = c.req.param("sessionId");
296
+ const body = optionalRecord(await c.req.json().catch(() => undefined));
297
+ await sessions.reload(sessionLookupFromBody(sessionId, body));
298
+ return c.json({ reloaded: true });
299
+ }
300
+ catch (error) {
301
+ return c.json({ error: errorMessage(error) }, mutationErrorStatus(error));
302
+ }
303
+ });
304
+ app.post(`${prefix}/sessions/:sessionId/detach-parent`, async (c) => {
305
+ try {
306
+ const sessionId = c.req.param("sessionId");
307
+ const body = optionalRecord(await c.req.json().catch(() => undefined));
308
+ await sessions.detachParent(sessionLookupFromBody(sessionId, body));
309
+ return c.json({ detached: true });
310
+ }
311
+ catch (error) {
312
+ return c.json({ error: errorMessage(error) }, mutationErrorStatus(error));
313
+ }
314
+ });
315
+ if (upgradeWebSocket !== undefined) {
316
+ app.get(`${prefix}/sessions/:sessionId/events`, upgradeWebSocket((c) => {
317
+ const sessionId = c.req.param("sessionId") ?? "";
318
+ let adapter;
319
+ return {
320
+ onOpen(_evt, ws) {
321
+ adapter = createHonoRealtimeSocket(ws);
322
+ eventHub.add(sessionId, adapter);
323
+ },
324
+ onClose() {
325
+ adapter?._triggerClose();
326
+ },
327
+ };
328
+ }));
329
+ app.get(`${prefix}/sessions/events`, upgradeWebSocket(() => {
330
+ let adapter;
331
+ return {
332
+ onOpen(_evt, ws) {
333
+ adapter = createHonoRealtimeSocket(ws);
334
+ eventHub.addGlobal(adapter);
335
+ },
336
+ onClose() {
337
+ adapter?._triggerClose();
338
+ },
339
+ };
340
+ }));
341
+ app.get(`${prefix}/events`, upgradeWebSocket(() => {
342
+ let adapter;
343
+ return {
344
+ onOpen(_evt, ws) {
345
+ adapter = createHonoRealtimeSocket(ws);
346
+ eventHub.addGlobal(adapter);
347
+ },
348
+ onClose() {
349
+ adapter?._triggerClose();
350
+ },
351
+ };
352
+ }));
353
+ }
354
+ }
355
+ function bulkMutationRefsFromBody(body) {
356
+ const record = requireRecord(body);
357
+ const sessions = record["sessions"];
358
+ if (!Array.isArray(sessions))
359
+ throw new Error("sessions field must be an array");
360
+ return sessions.map(parseBulkMutationRef);
361
+ }
362
+ function parseBulkMutationRef(value) {
363
+ const record = requireRecord(value);
364
+ const id = requireString(record, "id").trim();
365
+ if (id === "")
366
+ throw new Error("id field must not be empty");
367
+ const cwd = record["cwd"];
368
+ if (cwd === undefined || cwd === "")
369
+ return { id };
370
+ if (typeof cwd !== "string")
371
+ throw new Error("cwd field must be a string");
372
+ return { id, cwd: normalizeRequestCwd(cwd) };
373
+ }
374
+ function sessionLookupFromQuery(id, cwd) {
375
+ return cwd === undefined || cwd === "" ? id : { id, cwd: normalizeRequestCwd(cwd) };
376
+ }
377
+ function sessionLookupFromBody(id, body) {
378
+ const cwd = body["cwd"];
379
+ if (cwd === undefined || cwd === "")
380
+ return id;
381
+ if (typeof cwd !== "string")
382
+ throw new Error("cwd field must be a string");
383
+ return { id, cwd: normalizeRequestCwd(cwd) };
384
+ }
385
+ function optionalRecord(value) {
386
+ if (value === undefined || value === null)
387
+ return {};
388
+ return requireRecord(value);
389
+ }
390
+ function requireRecord(value) {
391
+ if (!isRecord(value))
392
+ throw new Error("request body must be an object");
393
+ return value;
394
+ }
395
+ function requireString(record, field) {
396
+ const value = record[field];
397
+ if (typeof value !== "string")
398
+ throw new Error(`${field} field must be a string`);
399
+ return value;
400
+ }
401
+ function requireThinkingLevel(value) {
402
+ if (typeof value !== "string" || value === "")
403
+ throw new Error("level field is invalid");
404
+ return value;
405
+ }
406
+ function optionalField(key, value) {
407
+ return value === undefined ? {} : { [key]: value };
408
+ }
409
+ function optionalNumber(value) {
410
+ if (value === undefined || value === "")
411
+ return undefined;
412
+ const parsed = Number(value);
413
+ return Number.isFinite(parsed) ? parsed : undefined;
414
+ }
415
+ function mutationErrorStatus(error) {
416
+ const message = errorMessage(error);
417
+ return message === "Session not found" || message === "Archived session not found" ? 404 : 400;
418
+ }
419
+ //# sourceMappingURL=sessionRoutes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionRoutes.js","sourceRoot":"","sources":["../../../src/server/sessions/sessionRoutes.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EAAE,wBAAwB,EAA2B,MAAM,mCAAmC,CAAC;AAEtG,OAAO,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAiBrD,MAAM,UAAU,qBAAqB,CACnC,GAAS,EACT,QAA0B,EAC1B,QAAyB,EACzB,MAAM,GAAG,EAAE,EACX,gBAAmC;IAEnC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACxC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iCAAiC,EAAE,EAAE,GAAG,CAAC,CAAC;QACtG,IAAI,CAAC;YACH,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACzC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YACtE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACvF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,2BAA2B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACzD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACvD,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,cAAc,CAAC,8BAA8B,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACrG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACjD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACvD,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,8BAA8B,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,wBAAwB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACtD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAA8B,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACnF,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,gCAAgC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC9D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAA8B,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACnF,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC5D,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACjD,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACrC,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM,IAAI,GAAG,EAAE,GAAG,aAAa,CAAC,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YACtH,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QACtG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1D,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3C,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,sBAAsB,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1D,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3C,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC,eAAe,CAAC,sBAAsB,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACnH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,4BAA4B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1D,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YACvE,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACnF,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACzE,MAAM,YAAY,GAAyC,EAAE,CAAC;YAC9D,IAAI,OAAO,KAAK,SAAS;gBAAE,YAAY,CAAC,OAAO,GAAG,OAAO,CAAC;YAC1D,IAAI,IAAI,KAAK,SAAS;gBAAE,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC;YACjD,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,QAAQ,CACnC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,EACtC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,EAC/B,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,EAC9B,YAAY,CACb,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,kCAAkC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAChE,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YACvE,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;YACpC,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,UAAU;gBAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC7I,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,UAAU,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC;QAC3G,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,sCAAsC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACnE,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3C,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3H,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,qCAAqC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACnE,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YACvE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9H,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,2CAA2C,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACzE,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YACvE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC5D,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3C,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAChG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC3D,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAqB,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAC1F,MAAM,QAAQ,CAAC,MAAM,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;YAC5H,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,kCAAkC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAChE,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAA0B,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAC/F,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9B,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACzG,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC;YACxH,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,4BAA4B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1D,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YACvE,MAAM,QAAQ,CAAC,KAAK,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;YAC1F,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,mCAAmC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACjE,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YACvE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,UAAU,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAChH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,uCAAuC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACrE,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YACvE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QACzJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,kCAAkC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAChE,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YACvE,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YACnD,4EAA4E;YAC5E,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC,QAAQ,CAAgC,CAAC;YAC/D,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,YAAY,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QACxG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,4BAA4B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1D,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YACvE,MAAM,QAAQ,CAAC,KAAK,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;YAC7D,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,2BAA2B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACzD,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YACvE,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,8BAA8B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC5D,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YACvE,MAAM,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,mCAAmC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACjE,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YACvE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACpF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,8BAA8B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC5D,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YACvE,MAAM,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,sBAAsB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACtD,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3C,MAAM,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACrF,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC3D,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YACvE,MAAM,QAAQ,CAAC,MAAM,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,oCAAoC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAClE,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YACvE,MAAM,QAAQ,CAAC,YAAY,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACnC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,6BAA6B,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE;YACrE,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACjD,IAAI,OAAuC,CAAC;YAC5C,OAAO;gBACL,MAAM,CAAC,IAAI,EAAE,EAAE;oBACb,OAAO,GAAG,wBAAwB,CAAC,EAAE,CAAC,CAAC;oBACvC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBACnC,CAAC;gBACD,OAAO;oBACL,OAAO,EAAE,aAAa,EAAE,CAAC;gBAC3B,CAAC;aACF,CAAC;QACJ,CAAC,CAAC,CAAC,CAAC;QAEJ,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,kBAAkB,EAAE,gBAAgB,CAAC,GAAG,EAAE;YACzD,IAAI,OAAuC,CAAC;YAC5C,OAAO;gBACL,MAAM,CAAC,IAAI,EAAE,EAAE;oBACb,OAAO,GAAG,wBAAwB,CAAC,EAAE,CAAC,CAAC;oBACvC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAC9B,CAAC;gBACD,OAAO;oBACL,OAAO,EAAE,aAAa,EAAE,CAAC;gBAC3B,CAAC;aACF,CAAC;QACJ,CAAC,CAAC,CAAC,CAAC;QAEJ,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,SAAS,EAAE,gBAAgB,CAAC,GAAG,EAAE;YAChD,IAAI,OAAuC,CAAC;YAC5C,OAAO;gBACL,MAAM,CAAC,IAAI,EAAE,EAAE;oBACb,OAAO,GAAG,wBAAwB,CAAC,EAAE,CAAC,CAAC;oBACvC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAC9B,CAAC;gBACD,OAAO;oBACL,OAAO,EAAE,aAAa,EAAE,CAAC;gBAC3B,CAAC;aACF,CAAC;QACJ,CAAC,CAAC,CAAC,CAAC;IACN,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB,CAAC,IAA4C;IAC5E,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACjF,OAAO,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,IAAI,EAAE,KAAK,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACnD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC3E,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,sBAAsB,CAAC,EAAU,EAAE,GAAuB;IACjE,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;AACtF,CAAC;AAED,SAAS,qBAAqB,CAAC,EAAU,EAAE,IAA6B;IACtE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IAC/C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC3E,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACrD,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACxE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,MAA+B,EAAE,KAAa;IACnE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,yBAAyB,CAAC,CAAC;IAClF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACzF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAI,GAAW,EAAE,KAAoB;IACzD,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,cAAc,CAAC,KAAyB;IAC/C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACpC,OAAO,OAAO,KAAK,mBAAmB,IAAI,OAAO,KAAK,4BAA4B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AACjG,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sessionRuntimeStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionRuntimeStore.js","sourceRoot":"","sources":["../../../src/server/sessions/sessionRuntimeStore.ts"],"names":[],"mappings":""}
@@ -0,0 +1,41 @@
1
+ import { isRecord } from "../utils.js";
2
+ import { Type } from "@sinclair/typebox";
3
+ const SpawnSessionParams = Type.Object({
4
+ prompt: Type.String({
5
+ description: "The first instruction to send to the newly created session. The new session runs independently; you do not receive its output.",
6
+ }),
7
+ cwd: Type.Optional(Type.String({
8
+ description: "Working directory for the new session. Must be a workspace (worktree, or root) of the same project as this session. Defaults to this session's working directory.",
9
+ })),
10
+ });
11
+ /**
12
+ * Custom tool that lets the LLM start a new, independent omp-web session and
13
+ * deliver an initial prompt to it. The spawned session is a normal omp-web session
14
+ * a human can open and interact with. The tool is constructed per-session, so it
15
+ * carries the spawning session's cwd for project-scope validation.
16
+ */
17
+ export function createSpawnSessionToolDefinition(spawningCwd, deps) {
18
+ const def = {
19
+ name: "spawn_session",
20
+ label: "Spawn session",
21
+ description: "Start a new, independent omp-web session and send it an initial prompt. Use this to dispatch a fresh agent to continue work or follow a plan. The new session runs on its own and a human can interact with it; you do not receive its output.",
22
+ parameters: SpawnSessionParams,
23
+ async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
24
+ const p = isRecord(params) ? params : {};
25
+ const prompt = typeof p["prompt"] === "string" ? p["prompt"] : "";
26
+ const cwd = typeof p["cwd"] === "string" ? p["cwd"] : undefined;
27
+ const result = await deps.spawn({
28
+ spawningCwd,
29
+ prompt,
30
+ cwd,
31
+ ...(ctx.model === undefined ? {} : { model: ctx.model }),
32
+ });
33
+ return {
34
+ content: [{ type: "text", text: `Started session ${result.sessionId} in ${result.cwd}.` }],
35
+ details: result,
36
+ };
37
+ },
38
+ };
39
+ return def;
40
+ }
41
+ //# sourceMappingURL=spawnSessionTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawnSessionTool.js","sourceRoot":"","sources":["../../../src/server/sessions/spawnSessionTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAyBzC,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC;IACtC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,gIAAgI;KAC7I,CAAC;IACF,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9B,WAAW,EAAE,mKAAmK;KAChL,CAAC,CAAC;CACH,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,UAAU,gCAAgC,CAAC,WAAmB,EAAE,IAA0B;IAC/F,MAAM,GAAG,GAAmB;QAC3B,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,gPAAgP;QAC7P,UAAU,EAAE,kBAAkB;QAC9B,KAAK,CAAC,OAAO,CAAC,WAAmB,EAAE,MAAe,EAAE,OAAgC,EAAE,SAAuE,EAAE,GAAqB;YACnL,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAChE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC;gBAC/B,WAAW;gBACX,MAAM;gBACN,GAAG;gBACH,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;aACxD,CAAC,CAAC;YACH,OAAO;gBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,MAAM,CAAC,SAAS,OAAO,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC;gBAC1F,OAAO,EAAE,MAAM;aACf,CAAC;QACH,CAAC;KACD,CAAC;IACF,OAAO,GAAG,CAAC;AACZ,CAAC"}