yepanywhere 0.5.2 → 0.6.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 (858) hide show
  1. package/README.md +21 -5
  2. package/bundled/@yep-anywhere/shared/dist/agent-context.d.ts +9 -0
  3. package/bundled/@yep-anywhere/shared/dist/agent-context.d.ts.map +1 -0
  4. package/bundled/@yep-anywhere/shared/dist/agent-context.js +18 -0
  5. package/bundled/@yep-anywhere/shared/dist/agent-context.js.map +1 -0
  6. package/bundled/@yep-anywhere/shared/dist/app-types.d.ts +104 -1
  7. package/bundled/@yep-anywhere/shared/dist/app-types.d.ts.map +1 -1
  8. package/bundled/@yep-anywhere/shared/dist/app-types.js +4 -0
  9. package/bundled/@yep-anywhere/shared/dist/app-types.js.map +1 -1
  10. package/bundled/@yep-anywhere/shared/dist/binary-framing.d.ts +4 -1
  11. package/bundled/@yep-anywhere/shared/dist/binary-framing.d.ts.map +1 -1
  12. package/bundled/@yep-anywhere/shared/dist/binary-framing.js +8 -3
  13. package/bundled/@yep-anywhere/shared/dist/binary-framing.js.map +1 -1
  14. package/bundled/@yep-anywhere/shared/dist/claude-sdk-schema/entry/AssistantEntrySchema.d.ts +4 -0
  15. package/bundled/@yep-anywhere/shared/dist/claude-sdk-schema/entry/AssistantEntrySchema.d.ts.map +1 -1
  16. package/bundled/@yep-anywhere/shared/dist/claude-sdk-schema/entry/BaseEntrySchema.d.ts +4 -0
  17. package/bundled/@yep-anywhere/shared/dist/claude-sdk-schema/entry/BaseEntrySchema.d.ts.map +1 -1
  18. package/bundled/@yep-anywhere/shared/dist/claude-sdk-schema/entry/BaseEntrySchema.js +7 -0
  19. package/bundled/@yep-anywhere/shared/dist/claude-sdk-schema/entry/BaseEntrySchema.js.map +1 -1
  20. package/bundled/@yep-anywhere/shared/dist/claude-sdk-schema/entry/ProgressEntrySchema.d.ts +4 -0
  21. package/bundled/@yep-anywhere/shared/dist/claude-sdk-schema/entry/ProgressEntrySchema.d.ts.map +1 -1
  22. package/bundled/@yep-anywhere/shared/dist/claude-sdk-schema/entry/SystemEntrySchema.d.ts +64 -1
  23. package/bundled/@yep-anywhere/shared/dist/claude-sdk-schema/entry/SystemEntrySchema.d.ts.map +1 -1
  24. package/bundled/@yep-anywhere/shared/dist/claude-sdk-schema/entry/SystemEntrySchema.js +9 -0
  25. package/bundled/@yep-anywhere/shared/dist/claude-sdk-schema/entry/SystemEntrySchema.js.map +1 -1
  26. package/bundled/@yep-anywhere/shared/dist/claude-sdk-schema/entry/UserEntrySchema.d.ts +4 -0
  27. package/bundled/@yep-anywhere/shared/dist/claude-sdk-schema/entry/UserEntrySchema.d.ts.map +1 -1
  28. package/bundled/@yep-anywhere/shared/dist/claude-sdk-schema/guards.d.ts.map +1 -1
  29. package/bundled/@yep-anywhere/shared/dist/claude-sdk-schema/guards.js +45 -1
  30. package/bundled/@yep-anywhere/shared/dist/claude-sdk-schema/guards.js.map +1 -1
  31. package/bundled/@yep-anywhere/shared/dist/claude-sdk-schema/index.d.ts +144 -2
  32. package/bundled/@yep-anywhere/shared/dist/claude-sdk-schema/index.d.ts.map +1 -1
  33. package/bundled/@yep-anywhere/shared/dist/claude-sdk-schema/tool/ToolResultSchemas.d.ts +6 -4
  34. package/bundled/@yep-anywhere/shared/dist/claude-sdk-schema/tool/ToolResultSchemas.d.ts.map +1 -1
  35. package/bundled/@yep-anywhere/shared/dist/claude-sdk-schema/tool/ToolResultSchemas.js +8 -1
  36. package/bundled/@yep-anywhere/shared/dist/claude-sdk-schema/tool/ToolResultSchemas.js.map +1 -1
  37. package/bundled/@yep-anywhere/shared/dist/codex-schema/index.d.ts +3 -2
  38. package/bundled/@yep-anywhere/shared/dist/codex-schema/index.d.ts.map +1 -1
  39. package/bundled/@yep-anywhere/shared/dist/codex-schema/index.js +3 -2
  40. package/bundled/@yep-anywhere/shared/dist/codex-schema/index.js.map +1 -1
  41. package/bundled/@yep-anywhere/shared/dist/codex-schema/session.d.ts +87 -3
  42. package/bundled/@yep-anywhere/shared/dist/codex-schema/session.d.ts.map +1 -1
  43. package/bundled/@yep-anywhere/shared/dist/codex-schema/session.js +39 -1
  44. package/bundled/@yep-anywhere/shared/dist/codex-schema/session.js.map +1 -1
  45. package/bundled/@yep-anywhere/shared/dist/dag.d.ts +31 -11
  46. package/bundled/@yep-anywhere/shared/dist/dag.d.ts.map +1 -1
  47. package/bundled/@yep-anywhere/shared/dist/dag.js +77 -33
  48. package/bundled/@yep-anywhere/shared/dist/dag.js.map +1 -1
  49. package/bundled/@yep-anywhere/shared/dist/git-status.d.ts +70 -1
  50. package/bundled/@yep-anywhere/shared/dist/git-status.d.ts.map +1 -1
  51. package/bundled/@yep-anywhere/shared/dist/git-status.js +6 -1
  52. package/bundled/@yep-anywhere/shared/dist/git-status.js.map +1 -1
  53. package/bundled/@yep-anywhere/shared/dist/ideMetadata.js +1 -1
  54. package/bundled/@yep-anywhere/shared/dist/ideMetadata.js.map +1 -1
  55. package/bundled/@yep-anywhere/shared/dist/index.d.ts +20 -11
  56. package/bundled/@yep-anywhere/shared/dist/index.d.ts.map +1 -1
  57. package/bundled/@yep-anywhere/shared/dist/index.js +8 -3
  58. package/bundled/@yep-anywhere/shared/dist/index.js.map +1 -1
  59. package/bundled/@yep-anywhere/shared/dist/local-resource.d.ts +1 -0
  60. package/bundled/@yep-anywhere/shared/dist/local-resource.d.ts.map +1 -1
  61. package/bundled/@yep-anywhere/shared/dist/local-resource.js +4 -0
  62. package/bundled/@yep-anywhere/shared/dist/local-resource.js.map +1 -1
  63. package/bundled/@yep-anywhere/shared/dist/opencode-schema/events.d.ts +136 -0
  64. package/bundled/@yep-anywhere/shared/dist/opencode-schema/events.d.ts.map +1 -1
  65. package/bundled/@yep-anywhere/shared/dist/opencode-schema/events.js +65 -3
  66. package/bundled/@yep-anywhere/shared/dist/opencode-schema/events.js.map +1 -1
  67. package/bundled/@yep-anywhere/shared/dist/opencode-schema/types.d.ts +1 -1
  68. package/bundled/@yep-anywhere/shared/dist/opencode-schema/types.d.ts.map +1 -1
  69. package/bundled/@yep-anywhere/shared/dist/project-queue.d.ts +153 -0
  70. package/bundled/@yep-anywhere/shared/dist/project-queue.d.ts.map +1 -0
  71. package/bundled/@yep-anywhere/shared/dist/project-queue.js +8 -0
  72. package/bundled/@yep-anywhere/shared/dist/project-queue.js.map +1 -0
  73. package/bundled/@yep-anywhere/shared/dist/relay-protocol.d.ts +26 -2
  74. package/bundled/@yep-anywhere/shared/dist/relay-protocol.d.ts.map +1 -1
  75. package/bundled/@yep-anywhere/shared/dist/relay-protocol.js +33 -0
  76. package/bundled/@yep-anywhere/shared/dist/relay-protocol.js.map +1 -1
  77. package/bundled/@yep-anywhere/shared/dist/relay.d.ts +45 -5
  78. package/bundled/@yep-anywhere/shared/dist/relay.d.ts.map +1 -1
  79. package/bundled/@yep-anywhere/shared/dist/relay.js.map +1 -1
  80. package/bundled/@yep-anywhere/shared/dist/safe-restart.d.ts +25 -0
  81. package/bundled/@yep-anywhere/shared/dist/safe-restart.d.ts.map +1 -0
  82. package/bundled/@yep-anywhere/shared/dist/safe-restart.js +2 -0
  83. package/bundled/@yep-anywhere/shared/dist/safe-restart.js.map +1 -0
  84. package/bundled/@yep-anywhere/shared/dist/session/SessionView.d.ts +2 -2
  85. package/bundled/@yep-anywhere/shared/dist/session/SessionView.js +3 -3
  86. package/bundled/@yep-anywhere/shared/dist/session/SessionView.js.map +1 -1
  87. package/bundled/@yep-anywhere/shared/dist/session/UnifiedSession.d.ts +10 -0
  88. package/bundled/@yep-anywhere/shared/dist/session/UnifiedSession.d.ts.map +1 -1
  89. package/bundled/@yep-anywhere/shared/dist/session-liveness.d.ts +18 -0
  90. package/bundled/@yep-anywhere/shared/dist/session-liveness.d.ts.map +1 -1
  91. package/bundled/@yep-anywhere/shared/dist/types.d.ts +253 -8
  92. package/bundled/@yep-anywhere/shared/dist/types.d.ts.map +1 -1
  93. package/bundled/@yep-anywhere/shared/dist/types.js +48 -5
  94. package/bundled/@yep-anywhere/shared/dist/types.js.map +1 -1
  95. package/bundled/@yep-anywhere/shared/dist/upload.d.ts +34 -2
  96. package/bundled/@yep-anywhere/shared/dist/upload.d.ts.map +1 -1
  97. package/bundled/@yep-anywhere/shared/dist/user-message-metadata.d.ts +47 -0
  98. package/bundled/@yep-anywhere/shared/dist/user-message-metadata.d.ts.map +1 -1
  99. package/bundled/@yep-anywhere/shared/dist/user-message-metadata.js +59 -1
  100. package/bundled/@yep-anywhere/shared/dist/user-message-metadata.js.map +1 -1
  101. package/bundled/@yep-anywhere/shared/dist/workstreams.d.ts +54 -0
  102. package/bundled/@yep-anywhere/shared/dist/workstreams.d.ts.map +1 -0
  103. package/bundled/@yep-anywhere/shared/dist/workstreams.js +8 -0
  104. package/bundled/@yep-anywhere/shared/dist/workstreams.js.map +1 -0
  105. package/bundled/@yep-anywhere/shared/package.json +1 -1
  106. package/client-dist/assets/alegreya-sans-latin-400-italic-BQIUBrX-.woff2 +0 -0
  107. package/client-dist/assets/alegreya-sans-latin-400-normal-BxeZdXas.woff2 +0 -0
  108. package/client-dist/assets/alegreya-sans-latin-500-normal-uodOEoAl.woff2 +0 -0
  109. package/client-dist/assets/alegreya-sans-latin-700-normal-DFYOGfC8.woff2 +0 -0
  110. package/client-dist/assets/de-CHMDbVD5.js +6 -0
  111. package/client-dist/assets/es-CK8MPF_C.js +6 -0
  112. package/client-dist/assets/fira-mono-latin-400-normal-DVTTRLHv.woff2 +0 -0
  113. package/client-dist/assets/fira-mono-latin-ext-400-normal-B2gPvaNr.woff2 +0 -0
  114. package/client-dist/assets/fira-mono-symbols2-400-normal-C6JptOil.woff2 +0 -0
  115. package/client-dist/assets/fr-49PXQiUL.js +6 -0
  116. package/client-dist/assets/index-B-09fVut.js +557 -0
  117. package/client-dist/assets/index-uJnfvD1f.css +1 -0
  118. package/client-dist/assets/inter-latin-400-italic-D1l0FflY.woff2 +0 -0
  119. package/client-dist/assets/inter-latin-400-normal-C38fXH4l.woff2 +0 -0
  120. package/client-dist/assets/inter-latin-500-normal-Cerq10X2.woff2 +0 -0
  121. package/client-dist/assets/inter-latin-700-normal-Yt3aPRUw.woff2 +0 -0
  122. package/client-dist/assets/ja-CrCGPmoH.js +6 -0
  123. package/client-dist/assets/zh-CN-AFJxv5ke.js +6 -0
  124. package/client-dist/index.html +3 -3
  125. package/client-dist/sw.js +96 -9
  126. package/dist/app.d.ts +25 -0
  127. package/dist/app.d.ts.map +1 -1
  128. package/dist/app.js +350 -35
  129. package/dist/app.js.map +1 -1
  130. package/dist/augments/augment-generator.d.ts +1 -1
  131. package/dist/augments/augment-generator.d.ts.map +1 -1
  132. package/dist/augments/augment-generator.js +2 -2
  133. package/dist/augments/augment-generator.js.map +1 -1
  134. package/dist/augments/markdown-augments.d.ts +1 -1
  135. package/dist/augments/markdown-augments.d.ts.map +1 -1
  136. package/dist/augments/markdown-augments.js +5 -5
  137. package/dist/augments/markdown-augments.js.map +1 -1
  138. package/dist/augments/safe-markdown.d.ts +10 -0
  139. package/dist/augments/safe-markdown.d.ts.map +1 -1
  140. package/dist/augments/safe-markdown.js +146 -3
  141. package/dist/augments/safe-markdown.js.map +1 -1
  142. package/dist/augments/stream-augmenter.d.ts +3 -0
  143. package/dist/augments/stream-augmenter.d.ts.map +1 -1
  144. package/dist/augments/stream-augmenter.js +6 -3
  145. package/dist/augments/stream-augmenter.js.map +1 -1
  146. package/dist/augments/stream-coordinator.d.ts +5 -1
  147. package/dist/augments/stream-coordinator.d.ts.map +1 -1
  148. package/dist/augments/stream-coordinator.js +6 -4
  149. package/dist/augments/stream-coordinator.js.map +1 -1
  150. package/dist/augments/task-list-augments.d.ts +27 -0
  151. package/dist/augments/task-list-augments.d.ts.map +1 -0
  152. package/dist/augments/task-list-augments.js +360 -0
  153. package/dist/augments/task-list-augments.js.map +1 -0
  154. package/dist/cli.d.ts +1 -17
  155. package/dist/cli.d.ts.map +1 -1
  156. package/dist/cli.js +22 -8
  157. package/dist/cli.js.map +1 -1
  158. package/dist/codex/correlationDebugLogger.d.ts.map +1 -1
  159. package/dist/codex/correlationDebugLogger.js +36 -8
  160. package/dist/codex/correlationDebugLogger.js.map +1 -1
  161. package/dist/codex/normalization.d.ts +1 -0
  162. package/dist/codex/normalization.d.ts.map +1 -1
  163. package/dist/codex/normalization.js +262 -7
  164. package/dist/codex/normalization.js.map +1 -1
  165. package/dist/config.d.ts +49 -6
  166. package/dist/config.d.ts.map +1 -1
  167. package/dist/config.js +55 -14
  168. package/dist/config.js.map +1 -1
  169. package/dist/defaults.d.ts +3 -0
  170. package/dist/defaults.d.ts.map +1 -0
  171. package/dist/defaults.js +3 -0
  172. package/dist/defaults.js.map +1 -0
  173. package/dist/device/DeviceBridgeService.js +1 -1
  174. package/dist/device/DeviceBridgeService.js.map +1 -1
  175. package/dist/envSettings.d.ts +64 -0
  176. package/dist/envSettings.d.ts.map +1 -0
  177. package/dist/envSettings.js +553 -0
  178. package/dist/envSettings.js.map +1 -0
  179. package/dist/frontend/static.d.ts.map +1 -1
  180. package/dist/frontend/static.js +3 -1
  181. package/dist/frontend/static.js.map +1 -1
  182. package/dist/index.d.ts +1 -1
  183. package/dist/index.d.ts.map +1 -1
  184. package/dist/index.js +190 -14
  185. package/dist/index.js.map +1 -1
  186. package/dist/indexes/SessionDiscoveryIndex.d.ts +78 -0
  187. package/dist/indexes/SessionDiscoveryIndex.d.ts.map +1 -0
  188. package/dist/indexes/SessionDiscoveryIndex.js +223 -0
  189. package/dist/indexes/SessionDiscoveryIndex.js.map +1 -0
  190. package/dist/indexes/SessionIndexService.d.ts +114 -1
  191. package/dist/indexes/SessionIndexService.d.ts.map +1 -1
  192. package/dist/indexes/SessionIndexService.js +875 -105
  193. package/dist/indexes/SessionIndexService.js.map +1 -1
  194. package/dist/indexes/index.d.ts +2 -1
  195. package/dist/indexes/index.d.ts.map +1 -1
  196. package/dist/indexes/index.js +1 -0
  197. package/dist/indexes/index.js.map +1 -1
  198. package/dist/indexes/types.d.ts +26 -0
  199. package/dist/indexes/types.d.ts.map +1 -1
  200. package/dist/logging/logger.d.ts.map +1 -1
  201. package/dist/logging/logger.js +2 -3
  202. package/dist/logging/logger.js.map +1 -1
  203. package/dist/maintenance/server.d.ts.map +1 -1
  204. package/dist/maintenance/server.js +8 -11
  205. package/dist/maintenance/server.js.map +1 -1
  206. package/dist/metadata/ProjectMetadataService.d.ts +7 -0
  207. package/dist/metadata/ProjectMetadataService.d.ts.map +1 -1
  208. package/dist/metadata/ProjectMetadataService.js +63 -19
  209. package/dist/metadata/ProjectMetadataService.js.map +1 -1
  210. package/dist/metadata/SessionMetadataService.d.ts +82 -3
  211. package/dist/metadata/SessionMetadataService.d.ts.map +1 -1
  212. package/dist/metadata/SessionMetadataService.js +233 -17
  213. package/dist/metadata/SessionMetadataService.js.map +1 -1
  214. package/dist/middleware/file-access.d.ts +66 -0
  215. package/dist/middleware/file-access.d.ts.map +1 -0
  216. package/dist/middleware/file-access.js +112 -0
  217. package/dist/middleware/file-access.js.map +1 -0
  218. package/dist/projects/codex-scanner.d.ts +28 -1
  219. package/dist/projects/codex-scanner.d.ts.map +1 -1
  220. package/dist/projects/codex-scanner.js +149 -39
  221. package/dist/projects/codex-scanner.js.map +1 -1
  222. package/dist/projects/gemini-scanner.d.ts.map +1 -1
  223. package/dist/projects/gemini-scanner.js +59 -6
  224. package/dist/projects/gemini-scanner.js.map +1 -1
  225. package/dist/projects/paths.d.ts +15 -1
  226. package/dist/projects/paths.d.ts.map +1 -1
  227. package/dist/projects/paths.js +69 -23
  228. package/dist/projects/paths.js.map +1 -1
  229. package/dist/projects/scanner.d.ts +5 -0
  230. package/dist/projects/scanner.d.ts.map +1 -1
  231. package/dist/projects/scanner.js +136 -28
  232. package/dist/projects/scanner.js.map +1 -1
  233. package/dist/push/InactivityPushNotifier.d.ts +61 -0
  234. package/dist/push/InactivityPushNotifier.d.ts.map +1 -0
  235. package/dist/push/InactivityPushNotifier.js +305 -0
  236. package/dist/push/InactivityPushNotifier.js.map +1 -0
  237. package/dist/push/PushNotifier.d.ts.map +1 -1
  238. package/dist/push/PushNotifier.js.map +1 -1
  239. package/dist/push/PushService.d.ts +7 -4
  240. package/dist/push/PushService.d.ts.map +1 -1
  241. package/dist/push/PushService.js +27 -7
  242. package/dist/push/PushService.js.map +1 -1
  243. package/dist/push/index.d.ts +2 -1
  244. package/dist/push/index.d.ts.map +1 -1
  245. package/dist/push/index.js +1 -0
  246. package/dist/push/index.js.map +1 -1
  247. package/dist/push/routes.d.ts.map +1 -1
  248. package/dist/push/routes.js +28 -1
  249. package/dist/push/routes.js.map +1 -1
  250. package/dist/push/types.d.ts +21 -3
  251. package/dist/push/types.d.ts.map +1 -1
  252. package/dist/push/types.js +2 -0
  253. package/dist/push/types.js.map +1 -1
  254. package/dist/routes/dev.d.ts +2 -0
  255. package/dist/routes/dev.d.ts.map +1 -1
  256. package/dist/routes/dev.js +25 -0
  257. package/dist/routes/dev.js.map +1 -1
  258. package/dist/routes/env-settings.d.ts +20 -0
  259. package/dist/routes/env-settings.d.ts.map +1 -0
  260. package/dist/routes/env-settings.js +25 -0
  261. package/dist/routes/env-settings.js.map +1 -0
  262. package/dist/routes/files.d.ts +9 -0
  263. package/dist/routes/files.d.ts.map +1 -1
  264. package/dist/routes/files.js +98 -10
  265. package/dist/routes/files.js.map +1 -1
  266. package/dist/routes/git-status.d.ts.map +1 -1
  267. package/dist/routes/git-status.js +621 -23
  268. package/dist/routes/git-status.js.map +1 -1
  269. package/dist/routes/global-sessions.d.ts +11 -1
  270. package/dist/routes/global-sessions.d.ts.map +1 -1
  271. package/dist/routes/global-sessions.js +53 -33
  272. package/dist/routes/global-sessions.js.map +1 -1
  273. package/dist/routes/inbox.d.ts +10 -1
  274. package/dist/routes/inbox.d.ts.map +1 -1
  275. package/dist/routes/inbox.js +30 -3
  276. package/dist/routes/inbox.js.map +1 -1
  277. package/dist/routes/local-file.d.ts +6 -2
  278. package/dist/routes/local-file.d.ts.map +1 -1
  279. package/dist/routes/local-file.js +13 -4
  280. package/dist/routes/local-file.js.map +1 -1
  281. package/dist/routes/local-image.d.ts +2 -1
  282. package/dist/routes/local-image.d.ts.map +1 -1
  283. package/dist/routes/local-image.js.map +1 -1
  284. package/dist/routes/local-resource-policy.d.ts +7 -1
  285. package/dist/routes/local-resource-policy.d.ts.map +1 -1
  286. package/dist/routes/local-resource-policy.js +0 -0
  287. package/dist/routes/local-resource-policy.js.map +1 -1
  288. package/dist/routes/processes.d.ts.map +1 -1
  289. package/dist/routes/processes.js +49 -11
  290. package/dist/routes/processes.js.map +1 -1
  291. package/dist/routes/project-queue-response.d.ts +26 -0
  292. package/dist/routes/project-queue-response.d.ts.map +1 -0
  293. package/dist/routes/project-queue-response.js +188 -0
  294. package/dist/routes/project-queue-response.js.map +1 -0
  295. package/dist/routes/project-queue.d.ts +5 -0
  296. package/dist/routes/project-queue.d.ts.map +1 -0
  297. package/dist/routes/project-queue.js +219 -0
  298. package/dist/routes/project-queue.js.map +1 -0
  299. package/dist/routes/projects.d.ts +6 -0
  300. package/dist/routes/projects.d.ts.map +1 -1
  301. package/dist/routes/projects.js +116 -28
  302. package/dist/routes/projects.js.map +1 -1
  303. package/dist/routes/providers.d.ts +5 -0
  304. package/dist/routes/providers.d.ts.map +1 -1
  305. package/dist/routes/providers.js +52 -33
  306. package/dist/routes/providers.js.map +1 -1
  307. package/dist/routes/public-shares.d.ts.map +1 -1
  308. package/dist/routes/public-shares.js +46 -17
  309. package/dist/routes/public-shares.js.map +1 -1
  310. package/dist/routes/recents.d.ts +3 -0
  311. package/dist/routes/recents.d.ts.map +1 -1
  312. package/dist/routes/recents.js +3 -1
  313. package/dist/routes/recents.js.map +1 -1
  314. package/dist/routes/server-admin.d.ts +9 -0
  315. package/dist/routes/server-admin.d.ts.map +1 -1
  316. package/dist/routes/server-admin.js +45 -7
  317. package/dist/routes/server-admin.js.map +1 -1
  318. package/dist/routes/session-claude-resume-guard.d.ts +16 -0
  319. package/dist/routes/session-claude-resume-guard.d.ts.map +1 -0
  320. package/dist/routes/session-claude-resume-guard.js +50 -0
  321. package/dist/routes/session-claude-resume-guard.js.map +1 -0
  322. package/dist/routes/session-compact-thresholds.d.ts +22 -0
  323. package/dist/routes/session-compact-thresholds.d.ts.map +1 -0
  324. package/dist/routes/session-compact-thresholds.js +35 -0
  325. package/dist/routes/session-compact-thresholds.js.map +1 -0
  326. package/dist/routes/session-index.d.ts +7 -0
  327. package/dist/routes/session-index.d.ts.map +1 -0
  328. package/dist/routes/session-index.js +9 -0
  329. package/dist/routes/session-index.js.map +1 -0
  330. package/dist/routes/session-list-options.d.ts +1 -1
  331. package/dist/routes/session-list-options.d.ts.map +1 -1
  332. package/dist/routes/session-list-options.js +1 -1
  333. package/dist/routes/session-list-options.js.map +1 -1
  334. package/dist/routes/session-request-helpers.d.ts +31 -0
  335. package/dist/routes/session-request-helpers.d.ts.map +1 -0
  336. package/dist/routes/session-request-helpers.js +212 -0
  337. package/dist/routes/session-request-helpers.js.map +1 -0
  338. package/dist/routes/sessions.d.ts +14 -1
  339. package/dist/routes/sessions.d.ts.map +1 -1
  340. package/dist/routes/sessions.js +2141 -551
  341. package/dist/routes/sessions.js.map +1 -1
  342. package/dist/routes/settings.d.ts +7 -1
  343. package/dist/routes/settings.d.ts.map +1 -1
  344. package/dist/routes/settings.js +771 -25
  345. package/dist/routes/settings.js.map +1 -1
  346. package/dist/routes/speech.d.ts +24 -2
  347. package/dist/routes/speech.d.ts.map +1 -1
  348. package/dist/routes/speech.js +539 -10
  349. package/dist/routes/speech.js.map +1 -1
  350. package/dist/routes/supervisor-queue.d.ts +6 -0
  351. package/dist/routes/supervisor-queue.d.ts.map +1 -0
  352. package/dist/routes/supervisor-queue.js +35 -0
  353. package/dist/routes/supervisor-queue.js.map +1 -0
  354. package/dist/routes/upload.d.ts +2 -0
  355. package/dist/routes/upload.d.ts.map +1 -1
  356. package/dist/routes/upload.js +190 -38
  357. package/dist/routes/upload.js.map +1 -1
  358. package/dist/routes/version.d.ts +18 -1
  359. package/dist/routes/version.d.ts.map +1 -1
  360. package/dist/routes/version.js +22 -1
  361. package/dist/routes/version.js.map +1 -1
  362. package/dist/routes/workstreams.d.ts +11 -0
  363. package/dist/routes/workstreams.d.ts.map +1 -0
  364. package/dist/routes/workstreams.js +144 -0
  365. package/dist/routes/workstreams.js.map +1 -0
  366. package/dist/routes/ws-message-router.d.ts +10 -1
  367. package/dist/routes/ws-message-router.d.ts.map +1 -1
  368. package/dist/routes/ws-message-router.js +43 -4
  369. package/dist/routes/ws-message-router.js.map +1 -1
  370. package/dist/routes/ws-relay-handlers.d.ts +27 -5
  371. package/dist/routes/ws-relay-handlers.d.ts.map +1 -1
  372. package/dist/routes/ws-relay-handlers.js +177 -19
  373. package/dist/routes/ws-relay-handlers.js.map +1 -1
  374. package/dist/routes/ws-relay.d.ts +19 -0
  375. package/dist/routes/ws-relay.d.ts.map +1 -1
  376. package/dist/routes/ws-relay.js +21 -7
  377. package/dist/routes/ws-relay.js.map +1 -1
  378. package/dist/sdk/cli-detection.d.ts +1 -1
  379. package/dist/sdk/cli-detection.d.ts.map +1 -1
  380. package/dist/sdk/cli-detection.js +47 -7
  381. package/dist/sdk/cli-detection.js.map +1 -1
  382. package/dist/sdk/messageLogger.d.ts.map +1 -1
  383. package/dist/sdk/messageLogger.js +38 -10
  384. package/dist/sdk/messageLogger.js.map +1 -1
  385. package/dist/sdk/messageQueue.d.ts.map +1 -1
  386. package/dist/sdk/messageQueue.js +26 -0
  387. package/dist/sdk/messageQueue.js.map +1 -1
  388. package/dist/sdk/providers/__mocks__/grok.d.ts +1 -1
  389. package/dist/sdk/providers/__mocks__/grok.d.ts.map +1 -1
  390. package/dist/sdk/providers/__mocks__/grok.js +1 -1
  391. package/dist/sdk/providers/__mocks__/grok.js.map +1 -1
  392. package/dist/sdk/providers/agentctl-session-env.d.ts +8 -0
  393. package/dist/sdk/providers/agentctl-session-env.d.ts.map +1 -0
  394. package/dist/sdk/providers/agentctl-session-env.js +52 -0
  395. package/dist/sdk/providers/agentctl-session-env.js.map +1 -0
  396. package/dist/sdk/providers/claude-ollama.d.ts +2 -1
  397. package/dist/sdk/providers/claude-ollama.d.ts.map +1 -1
  398. package/dist/sdk/providers/claude-ollama.js +1 -0
  399. package/dist/sdk/providers/claude-ollama.js.map +1 -1
  400. package/dist/sdk/providers/claude-retention.d.ts +19 -0
  401. package/dist/sdk/providers/claude-retention.d.ts.map +1 -0
  402. package/dist/sdk/providers/claude-retention.js +169 -0
  403. package/dist/sdk/providers/claude-retention.js.map +1 -0
  404. package/dist/sdk/providers/claude.d.ts +52 -5
  405. package/dist/sdk/providers/claude.d.ts.map +1 -1
  406. package/dist/sdk/providers/claude.js +593 -71
  407. package/dist/sdk/providers/claude.js.map +1 -1
  408. package/dist/sdk/providers/codex-protocol/generated/AgentMessageInputContent.d.ts +8 -0
  409. package/dist/sdk/providers/codex-protocol/generated/AgentMessageInputContent.d.ts.map +1 -0
  410. package/dist/sdk/providers/codex-protocol/generated/AgentMessageInputContent.js +3 -0
  411. package/dist/sdk/providers/codex-protocol/generated/AgentMessageInputContent.js.map +1 -0
  412. package/dist/sdk/providers/codex-protocol/generated/InternalChatMessageMetadataPassthrough.d.ts +10 -0
  413. package/dist/sdk/providers/codex-protocol/generated/InternalChatMessageMetadataPassthrough.d.ts.map +1 -0
  414. package/dist/sdk/providers/codex-protocol/generated/InternalChatMessageMetadataPassthrough.js +3 -0
  415. package/dist/sdk/providers/codex-protocol/generated/InternalChatMessageMetadataPassthrough.js.map +1 -0
  416. package/dist/sdk/providers/codex-protocol/generated/LegacyAppPathString.d.ts +23 -0
  417. package/dist/sdk/providers/codex-protocol/generated/LegacyAppPathString.d.ts.map +1 -0
  418. package/dist/sdk/providers/codex-protocol/generated/LegacyAppPathString.js +3 -0
  419. package/dist/sdk/providers/codex-protocol/generated/LegacyAppPathString.js.map +1 -0
  420. package/dist/sdk/providers/codex-protocol/generated/MultiAgentMode.d.ts +8 -0
  421. package/dist/sdk/providers/codex-protocol/generated/MultiAgentMode.d.ts.map +1 -0
  422. package/dist/sdk/providers/codex-protocol/generated/MultiAgentMode.js +3 -0
  423. package/dist/sdk/providers/codex-protocol/generated/MultiAgentMode.js.map +1 -0
  424. package/dist/sdk/providers/codex-protocol/generated/ReasoningEffort.d.ts +1 -1
  425. package/dist/sdk/providers/codex-protocol/generated/ReasoningEffort.d.ts.map +1 -1
  426. package/dist/sdk/providers/codex-protocol/generated/ResponseItem.d.ts +38 -1
  427. package/dist/sdk/providers/codex-protocol/generated/ResponseItem.d.ts.map +1 -1
  428. package/dist/sdk/providers/codex-protocol/generated/v2/AdditionalFileSystemPermissions.d.ts +3 -3
  429. package/dist/sdk/providers/codex-protocol/generated/v2/AdditionalFileSystemPermissions.d.ts.map +1 -1
  430. package/dist/sdk/providers/codex-protocol/generated/v2/CapabilityRootLocation.d.ts +9 -0
  431. package/dist/sdk/providers/codex-protocol/generated/v2/CapabilityRootLocation.d.ts.map +1 -0
  432. package/dist/sdk/providers/codex-protocol/generated/v2/CapabilityRootLocation.js +3 -0
  433. package/dist/sdk/providers/codex-protocol/generated/v2/CapabilityRootLocation.js.map +1 -0
  434. package/dist/sdk/providers/codex-protocol/generated/v2/CommandExecutionRequestApprovalParams.d.ts +6 -2
  435. package/dist/sdk/providers/codex-protocol/generated/v2/CommandExecutionRequestApprovalParams.d.ts.map +1 -1
  436. package/dist/sdk/providers/codex-protocol/generated/v2/DynamicToolFunctionSpec.d.ts +8 -0
  437. package/dist/sdk/providers/codex-protocol/generated/v2/DynamicToolFunctionSpec.d.ts.map +1 -0
  438. package/dist/sdk/providers/codex-protocol/generated/v2/DynamicToolFunctionSpec.js +3 -0
  439. package/dist/sdk/providers/codex-protocol/generated/v2/DynamicToolFunctionSpec.js.map +1 -0
  440. package/dist/sdk/providers/codex-protocol/generated/v2/DynamicToolNamespaceSpec.d.ts +7 -0
  441. package/dist/sdk/providers/codex-protocol/generated/v2/DynamicToolNamespaceSpec.d.ts.map +1 -0
  442. package/dist/sdk/providers/codex-protocol/generated/v2/DynamicToolNamespaceSpec.js +3 -0
  443. package/dist/sdk/providers/codex-protocol/generated/v2/DynamicToolNamespaceSpec.js.map +1 -0
  444. package/dist/sdk/providers/codex-protocol/generated/v2/DynamicToolNamespaceTool.d.ts +5 -0
  445. package/dist/sdk/providers/codex-protocol/generated/v2/DynamicToolNamespaceTool.d.ts.map +1 -0
  446. package/dist/sdk/providers/codex-protocol/generated/v2/DynamicToolNamespaceTool.js +3 -0
  447. package/dist/sdk/providers/codex-protocol/generated/v2/DynamicToolNamespaceTool.js.map +1 -0
  448. package/dist/sdk/providers/codex-protocol/generated/v2/DynamicToolSpec.d.ts +6 -7
  449. package/dist/sdk/providers/codex-protocol/generated/v2/DynamicToolSpec.d.ts.map +1 -1
  450. package/dist/sdk/providers/codex-protocol/generated/v2/FileSystemPath.d.ts +2 -2
  451. package/dist/sdk/providers/codex-protocol/generated/v2/FileSystemPath.d.ts.map +1 -1
  452. package/dist/sdk/providers/codex-protocol/generated/v2/McpToolCallAppContext.d.ts +6 -0
  453. package/dist/sdk/providers/codex-protocol/generated/v2/McpToolCallAppContext.d.ts.map +1 -0
  454. package/dist/sdk/providers/codex-protocol/generated/v2/McpToolCallAppContext.js +3 -0
  455. package/dist/sdk/providers/codex-protocol/generated/v2/McpToolCallAppContext.js.map +1 -0
  456. package/dist/sdk/providers/codex-protocol/generated/v2/PermissionsRequestApprovalParams.d.ts +1 -0
  457. package/dist/sdk/providers/codex-protocol/generated/v2/PermissionsRequestApprovalParams.d.ts.map +1 -1
  458. package/dist/sdk/providers/codex-protocol/generated/v2/SelectedCapabilityRoot.d.ts +15 -0
  459. package/dist/sdk/providers/codex-protocol/generated/v2/SelectedCapabilityRoot.d.ts.map +1 -0
  460. package/dist/sdk/providers/codex-protocol/generated/v2/SelectedCapabilityRoot.js +3 -0
  461. package/dist/sdk/providers/codex-protocol/generated/v2/SelectedCapabilityRoot.js.map +1 -0
  462. package/dist/sdk/providers/codex-protocol/generated/v2/SortDirection.d.ts +2 -0
  463. package/dist/sdk/providers/codex-protocol/generated/v2/SortDirection.d.ts.map +1 -0
  464. package/dist/sdk/providers/codex-protocol/generated/v2/SortDirection.js +3 -0
  465. package/dist/sdk/providers/codex-protocol/generated/v2/SortDirection.js.map +1 -0
  466. package/dist/sdk/providers/codex-protocol/generated/v2/SubAgentActivityKind.d.ts +2 -0
  467. package/dist/sdk/providers/codex-protocol/generated/v2/SubAgentActivityKind.d.ts.map +1 -0
  468. package/dist/sdk/providers/codex-protocol/generated/v2/SubAgentActivityKind.js +3 -0
  469. package/dist/sdk/providers/codex-protocol/generated/v2/SubAgentActivityKind.js.map +1 -0
  470. package/dist/sdk/providers/codex-protocol/generated/v2/Thread.d.ts +8 -0
  471. package/dist/sdk/providers/codex-protocol/generated/v2/Thread.d.ts.map +1 -1
  472. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadCompactStartParams.d.ts +4 -0
  473. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadCompactStartParams.d.ts.map +1 -0
  474. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadCompactStartParams.js +3 -0
  475. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadCompactStartParams.js.map +1 -0
  476. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadCompactStartResponse.d.ts +2 -0
  477. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadCompactStartResponse.d.ts.map +1 -0
  478. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadCompactStartResponse.js +3 -0
  479. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadCompactStartResponse.js.map +1 -0
  480. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadForkParams.d.ts +64 -0
  481. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadForkParams.d.ts.map +1 -0
  482. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadForkParams.js +3 -0
  483. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadForkParams.js.map +1 -0
  484. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadForkResponse.d.ts +46 -0
  485. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadForkResponse.d.ts.map +1 -0
  486. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadForkResponse.js +3 -0
  487. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadForkResponse.js.map +1 -0
  488. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadItem.d.ts +19 -1
  489. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadItem.d.ts.map +1 -1
  490. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadReadResponse.d.ts +5 -0
  491. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadReadResponse.d.ts.map +1 -0
  492. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadReadResponse.js +3 -0
  493. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadReadResponse.js.map +1 -0
  494. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadResumeInitialTurnsPageParams.d.ts +17 -0
  495. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadResumeInitialTurnsPageParams.d.ts.map +1 -0
  496. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadResumeInitialTurnsPageParams.js +3 -0
  497. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadResumeInitialTurnsPageParams.js.map +1 -0
  498. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadResumeParams.d.ts +7 -7
  499. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadResumeParams.d.ts.map +1 -1
  500. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadResumeResponse.d.ts +13 -2
  501. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadResumeResponse.d.ts.map +1 -1
  502. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadRollbackParams.d.ts +11 -0
  503. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadRollbackParams.d.ts.map +1 -0
  504. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadRollbackParams.js +3 -0
  505. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadRollbackParams.js.map +1 -0
  506. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadRollbackResponse.d.ts +12 -0
  507. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadRollbackResponse.d.ts.map +1 -0
  508. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadRollbackResponse.js +3 -0
  509. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadRollbackResponse.js.map +1 -0
  510. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadSource.d.ts +1 -1
  511. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadSource.d.ts.map +1 -1
  512. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadStartParams.d.ts +13 -9
  513. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadStartParams.d.ts.map +1 -1
  514. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadStartResponse.d.ts +8 -2
  515. package/dist/sdk/providers/codex-protocol/generated/v2/ThreadStartResponse.d.ts.map +1 -1
  516. package/dist/sdk/providers/codex-protocol/generated/v2/ToolRequestUserInputParams.d.ts +1 -0
  517. package/dist/sdk/providers/codex-protocol/generated/v2/ToolRequestUserInputParams.d.ts.map +1 -1
  518. package/dist/sdk/providers/codex-protocol/generated/v2/TurnEnvironmentParams.d.ts +2 -2
  519. package/dist/sdk/providers/codex-protocol/generated/v2/TurnEnvironmentParams.d.ts.map +1 -1
  520. package/dist/sdk/providers/codex-protocol/generated/v2/TurnStartParams.d.ts +17 -5
  521. package/dist/sdk/providers/codex-protocol/generated/v2/TurnStartParams.d.ts.map +1 -1
  522. package/dist/sdk/providers/codex-protocol/generated/v2/TurnSteerParams.d.ts +8 -1
  523. package/dist/sdk/providers/codex-protocol/generated/v2/TurnSteerParams.d.ts.map +1 -1
  524. package/dist/sdk/providers/codex-protocol/generated/v2/TurnsPage.d.ts +7 -0
  525. package/dist/sdk/providers/codex-protocol/generated/v2/TurnsPage.d.ts.map +1 -0
  526. package/dist/sdk/providers/codex-protocol/generated/v2/TurnsPage.js +3 -0
  527. package/dist/sdk/providers/codex-protocol/generated/v2/TurnsPage.js.map +1 -0
  528. package/dist/sdk/providers/codex-protocol/index.d.ts +7 -0
  529. package/dist/sdk/providers/codex-protocol/index.d.ts.map +1 -1
  530. package/dist/sdk/providers/codex.d.ts +26 -4
  531. package/dist/sdk/providers/codex.d.ts.map +1 -1
  532. package/dist/sdk/providers/codex.js +457 -37
  533. package/dist/sdk/providers/codex.js.map +1 -1
  534. package/dist/sdk/providers/env-filter.d.ts.map +1 -1
  535. package/dist/sdk/providers/env-filter.js +19 -1
  536. package/dist/sdk/providers/env-filter.js.map +1 -1
  537. package/dist/sdk/providers/gemini-tools.d.ts +28 -0
  538. package/dist/sdk/providers/gemini-tools.d.ts.map +1 -0
  539. package/dist/sdk/providers/gemini-tools.js +57 -0
  540. package/dist/sdk/providers/gemini-tools.js.map +1 -0
  541. package/dist/sdk/providers/gemini.d.ts.map +1 -1
  542. package/dist/sdk/providers/gemini.js +4 -2
  543. package/dist/sdk/providers/gemini.js.map +1 -1
  544. package/dist/sdk/providers/grok-acp.d.ts +1 -1
  545. package/dist/sdk/providers/grok-acp.d.ts.map +1 -1
  546. package/dist/sdk/providers/grok-acp.js +1 -1
  547. package/dist/sdk/providers/grok-acp.js.map +1 -1
  548. package/dist/sdk/providers/index.d.ts +1 -0
  549. package/dist/sdk/providers/index.d.ts.map +1 -1
  550. package/dist/sdk/providers/index.js +6 -0
  551. package/dist/sdk/providers/index.js.map +1 -1
  552. package/dist/sdk/providers/opencode-tools.d.ts +36 -0
  553. package/dist/sdk/providers/opencode-tools.d.ts.map +1 -0
  554. package/dist/sdk/providers/opencode-tools.js +78 -0
  555. package/dist/sdk/providers/opencode-tools.js.map +1 -0
  556. package/dist/sdk/providers/opencode.d.ts +53 -5
  557. package/dist/sdk/providers/opencode.d.ts.map +1 -1
  558. package/dist/sdk/providers/opencode.js +379 -71
  559. package/dist/sdk/providers/opencode.js.map +1 -1
  560. package/dist/sdk/providers/pi-rpc-client.d.ts +90 -0
  561. package/dist/sdk/providers/pi-rpc-client.d.ts.map +1 -0
  562. package/dist/sdk/providers/pi-rpc-client.js +168 -0
  563. package/dist/sdk/providers/pi-rpc-client.js.map +1 -0
  564. package/dist/sdk/providers/pi-tools.d.ts +38 -0
  565. package/dist/sdk/providers/pi-tools.d.ts.map +1 -0
  566. package/dist/sdk/providers/pi-tools.js +214 -0
  567. package/dist/sdk/providers/pi-tools.js.map +1 -0
  568. package/dist/sdk/providers/pi.d.ts +84 -0
  569. package/dist/sdk/providers/pi.d.ts.map +1 -0
  570. package/dist/sdk/providers/pi.js +686 -0
  571. package/dist/sdk/providers/pi.js.map +1 -0
  572. package/dist/sdk/providers/staticSlashCommands.d.ts +4 -0
  573. package/dist/sdk/providers/staticSlashCommands.d.ts.map +1 -0
  574. package/dist/sdk/providers/staticSlashCommands.js +14 -0
  575. package/dist/sdk/providers/staticSlashCommands.js.map +1 -0
  576. package/dist/sdk/providers/types.d.ts +144 -17
  577. package/dist/sdk/providers/types.d.ts.map +1 -1
  578. package/dist/sdk/remote-spawn.d.ts.map +1 -1
  579. package/dist/sdk/remote-spawn.js.map +1 -1
  580. package/dist/sdk/slashCommandEmulation.d.ts +9 -0
  581. package/dist/sdk/slashCommandEmulation.d.ts.map +1 -1
  582. package/dist/sdk/slashCommandEmulation.js +15 -0
  583. package/dist/sdk/slashCommandEmulation.js.map +1 -1
  584. package/dist/sdk/types.d.ts +40 -0
  585. package/dist/sdk/types.d.ts.map +1 -1
  586. package/dist/security/approvalAuditLog.d.ts +3 -2
  587. package/dist/security/approvalAuditLog.d.ts.map +1 -1
  588. package/dist/security/approvalAuditLog.js +62 -2
  589. package/dist/security/approvalAuditLog.js.map +1 -1
  590. package/dist/services/BrowserProfileService.d.ts +21 -0
  591. package/dist/services/BrowserProfileService.d.ts.map +1 -1
  592. package/dist/services/BrowserProfileService.js +74 -1
  593. package/dist/services/BrowserProfileService.js.map +1 -1
  594. package/dist/services/CacheMissBillingMonitor.d.ts +25 -0
  595. package/dist/services/CacheMissBillingMonitor.d.ts.map +1 -0
  596. package/dist/services/CacheMissBillingMonitor.js +179 -0
  597. package/dist/services/CacheMissBillingMonitor.js.map +1 -0
  598. package/dist/services/CodexUpdateChecker.d.ts.map +1 -1
  599. package/dist/services/CodexUpdateChecker.js +3 -2
  600. package/dist/services/CodexUpdateChecker.js.map +1 -1
  601. package/dist/services/ModelInfoService.d.ts +58 -9
  602. package/dist/services/ModelInfoService.d.ts.map +1 -1
  603. package/dist/services/ModelInfoService.js +127 -14
  604. package/dist/services/ModelInfoService.js.map +1 -1
  605. package/dist/services/ProjectQueueScheduler.d.ts +91 -0
  606. package/dist/services/ProjectQueueScheduler.d.ts.map +1 -0
  607. package/dist/services/ProjectQueueScheduler.js +404 -0
  608. package/dist/services/ProjectQueueScheduler.js.map +1 -0
  609. package/dist/services/ProjectQueueService.d.ts +60 -0
  610. package/dist/services/ProjectQueueService.d.ts.map +1 -0
  611. package/dist/services/ProjectQueueService.js +804 -0
  612. package/dist/services/ProjectQueueService.js.map +1 -0
  613. package/dist/services/RelayClientService.d.ts +5 -0
  614. package/dist/services/RelayClientService.d.ts.map +1 -1
  615. package/dist/services/RelayClientService.js +26 -12
  616. package/dist/services/RelayClientService.js.map +1 -1
  617. package/dist/services/SafeRestartService.d.ts +48 -0
  618. package/dist/services/SafeRestartService.d.ts.map +1 -0
  619. package/dist/services/SafeRestartService.js +173 -0
  620. package/dist/services/SafeRestartService.js.map +1 -0
  621. package/dist/services/ServerSettingsService.d.ts +41 -1
  622. package/dist/services/ServerSettingsService.d.ts.map +1 -1
  623. package/dist/services/ServerSettingsService.js +110 -1
  624. package/dist/services/ServerSettingsService.js.map +1 -1
  625. package/dist/services/SessionQueuePersistenceService.d.ts +55 -0
  626. package/dist/services/SessionQueuePersistenceService.d.ts.map +1 -0
  627. package/dist/services/SessionQueuePersistenceService.js +264 -0
  628. package/dist/services/SessionQueuePersistenceService.js.map +1 -0
  629. package/dist/services/WorkstreamService.d.ts +92 -0
  630. package/dist/services/WorkstreamService.d.ts.map +1 -0
  631. package/dist/services/WorkstreamService.js +627 -0
  632. package/dist/services/WorkstreamService.js.map +1 -0
  633. package/dist/services/index.d.ts +4 -0
  634. package/dist/services/index.d.ts.map +1 -1
  635. package/dist/services/index.js +4 -0
  636. package/dist/services/index.js.map +1 -1
  637. package/dist/services/projectWorkIdle.d.ts +42 -0
  638. package/dist/services/projectWorkIdle.d.ts.map +1 -0
  639. package/dist/services/projectWorkIdle.js +50 -0
  640. package/dist/services/projectWorkIdle.js.map +1 -0
  641. package/dist/services/voice/SpeechBackend.d.ts +18 -1
  642. package/dist/services/voice/SpeechBackend.d.ts.map +1 -1
  643. package/dist/services/voice/SpeechBackend.js +3 -0
  644. package/dist/services/voice/SpeechBackend.js.map +1 -1
  645. package/dist/services/voice/audioRetention.d.ts +20 -0
  646. package/dist/services/voice/audioRetention.d.ts.map +1 -1
  647. package/dist/services/voice/audioRetention.js +2 -0
  648. package/dist/services/voice/audioRetention.js.map +1 -1
  649. package/dist/services/voice/deepgramBackend.d.ts.map +1 -1
  650. package/dist/services/voice/deepgramBackend.js +4 -1
  651. package/dist/services/voice/deepgramBackend.js.map +1 -1
  652. package/dist/services/voice/localNemoBackend.d.ts +31 -0
  653. package/dist/services/voice/localNemoBackend.d.ts.map +1 -0
  654. package/dist/services/voice/localNemoBackend.js +181 -0
  655. package/dist/services/voice/localNemoBackend.js.map +1 -0
  656. package/dist/services/voice/localParakeetBackend.d.ts +31 -0
  657. package/dist/services/voice/localParakeetBackend.d.ts.map +1 -0
  658. package/dist/services/voice/localParakeetBackend.js +180 -0
  659. package/dist/services/voice/localParakeetBackend.js.map +1 -0
  660. package/dist/services/voice/localSttRuntime.d.ts +21 -0
  661. package/dist/services/voice/localSttRuntime.d.ts.map +1 -0
  662. package/dist/services/voice/localSttRuntime.js +87 -0
  663. package/dist/services/voice/localSttRuntime.js.map +1 -0
  664. package/dist/services/voice/localWhisperBackend.d.ts +2 -1
  665. package/dist/services/voice/localWhisperBackend.d.ts.map +1 -1
  666. package/dist/services/voice/localWhisperBackend.js +47 -34
  667. package/dist/services/voice/localWhisperBackend.js.map +1 -1
  668. package/dist/services/voice/nemo_worker.py +232 -0
  669. package/dist/services/voice/parakeet_worker.py +151 -0
  670. package/dist/services/voice/registry.d.ts +19 -4
  671. package/dist/services/voice/registry.d.ts.map +1 -1
  672. package/dist/services/voice/registry.js +72 -22
  673. package/dist/services/voice/registry.js.map +1 -1
  674. package/dist/services/voice/serialQueue.d.ts +17 -0
  675. package/dist/services/voice/serialQueue.d.ts.map +1 -0
  676. package/dist/services/voice/serialQueue.js +24 -0
  677. package/dist/services/voice/serialQueue.js.map +1 -0
  678. package/dist/services/voice/whisper_worker.py +94 -0
  679. package/dist/services/voice/xaiSttBackend.d.ts +1 -1
  680. package/dist/services/voice/xaiSttBackend.d.ts.map +1 -1
  681. package/dist/services/voice/xaiSttBackend.js +15 -3
  682. package/dist/services/voice/xaiSttBackend.js.map +1 -1
  683. package/dist/sessions/agent-excerpt.d.ts +29 -0
  684. package/dist/sessions/agent-excerpt.d.ts.map +1 -0
  685. package/dist/sessions/agent-excerpt.js +128 -0
  686. package/dist/sessions/agent-excerpt.js.map +1 -0
  687. package/dist/sessions/claude-messages.d.ts.map +1 -1
  688. package/dist/sessions/claude-messages.js +75 -4
  689. package/dist/sessions/claude-messages.js.map +1 -1
  690. package/dist/sessions/claude-summary.d.ts +33 -0
  691. package/dist/sessions/claude-summary.d.ts.map +1 -0
  692. package/dist/sessions/claude-summary.js +461 -0
  693. package/dist/sessions/claude-summary.js.map +1 -0
  694. package/dist/sessions/codex-discovery.d.ts +46 -0
  695. package/dist/sessions/codex-discovery.d.ts.map +1 -0
  696. package/dist/sessions/codex-discovery.js +269 -0
  697. package/dist/sessions/codex-discovery.js.map +1 -0
  698. package/dist/sessions/codex-reader.d.ts +96 -13
  699. package/dist/sessions/codex-reader.d.ts.map +1 -1
  700. package/dist/sessions/codex-reader.js +1069 -141
  701. package/dist/sessions/codex-reader.js.map +1 -1
  702. package/dist/sessions/dag.d.ts +25 -4
  703. package/dist/sessions/dag.d.ts.map +1 -1
  704. package/dist/sessions/dag.js +37 -4
  705. package/dist/sessions/dag.js.map +1 -1
  706. package/dist/sessions/gemini-reader.d.ts +3 -1
  707. package/dist/sessions/gemini-reader.d.ts.map +1 -1
  708. package/dist/sessions/gemini-reader.js +17 -8
  709. package/dist/sessions/gemini-reader.js.map +1 -1
  710. package/dist/sessions/grok-reader.d.ts +1 -0
  711. package/dist/sessions/grok-reader.d.ts.map +1 -1
  712. package/dist/sessions/grok-reader.js +11 -5
  713. package/dist/sessions/grok-reader.js.map +1 -1
  714. package/dist/sessions/normalization.d.ts +3 -1
  715. package/dist/sessions/normalization.d.ts.map +1 -1
  716. package/dist/sessions/normalization.js +72 -16
  717. package/dist/sessions/normalization.js.map +1 -1
  718. package/dist/sessions/null-reader.d.ts +31 -0
  719. package/dist/sessions/null-reader.d.ts.map +1 -0
  720. package/dist/sessions/null-reader.js +30 -0
  721. package/dist/sessions/null-reader.js.map +1 -0
  722. package/dist/sessions/opencode-db-reader.d.ts +66 -0
  723. package/dist/sessions/opencode-db-reader.d.ts.map +1 -0
  724. package/dist/sessions/opencode-db-reader.js +333 -0
  725. package/dist/sessions/opencode-db-reader.js.map +1 -0
  726. package/dist/sessions/opencode-reader.d.ts +50 -0
  727. package/dist/sessions/opencode-reader.d.ts.map +1 -1
  728. package/dist/sessions/opencode-reader.js +375 -71
  729. package/dist/sessions/opencode-reader.js.map +1 -1
  730. package/dist/sessions/pagination.d.ts.map +1 -1
  731. package/dist/sessions/pagination.js +119 -3
  732. package/dist/sessions/pagination.js.map +1 -1
  733. package/dist/sessions/persisted-augments.d.ts +2 -1
  734. package/dist/sessions/persisted-augments.d.ts.map +1 -1
  735. package/dist/sessions/persisted-augments.js +2 -2
  736. package/dist/sessions/persisted-augments.js.map +1 -1
  737. package/dist/sessions/pi-fork.d.ts +12 -0
  738. package/dist/sessions/pi-fork.d.ts.map +1 -0
  739. package/dist/sessions/pi-fork.js +125 -0
  740. package/dist/sessions/pi-fork.js.map +1 -0
  741. package/dist/sessions/pi-reader.d.ts +81 -0
  742. package/dist/sessions/pi-reader.d.ts.map +1 -0
  743. package/dist/sessions/pi-reader.js +413 -0
  744. package/dist/sessions/pi-reader.js.map +1 -0
  745. package/dist/sessions/provider-resolution.d.ts +10 -3
  746. package/dist/sessions/provider-resolution.d.ts.map +1 -1
  747. package/dist/sessions/provider-resolution.js +62 -6
  748. package/dist/sessions/provider-resolution.js.map +1 -1
  749. package/dist/sessions/reader.d.ts +17 -24
  750. package/dist/sessions/reader.d.ts.map +1 -1
  751. package/dist/sessions/reader.js +86 -157
  752. package/dist/sessions/reader.js.map +1 -1
  753. package/dist/sessions/recap-overlays.d.ts +38 -0
  754. package/dist/sessions/recap-overlays.d.ts.map +1 -0
  755. package/dist/sessions/recap-overlays.js +176 -0
  756. package/dist/sessions/recap-overlays.js.map +1 -0
  757. package/dist/sessions/summary-parser-worker-client.d.ts +80 -0
  758. package/dist/sessions/summary-parser-worker-client.d.ts.map +1 -0
  759. package/dist/sessions/summary-parser-worker-client.js +539 -0
  760. package/dist/sessions/summary-parser-worker-client.js.map +1 -0
  761. package/dist/sessions/summary-parser-worker-entry.d.ts +2 -0
  762. package/dist/sessions/summary-parser-worker-entry.d.ts.map +1 -0
  763. package/dist/sessions/summary-parser-worker-entry.js +29 -0
  764. package/dist/sessions/summary-parser-worker-entry.js.map +1 -0
  765. package/dist/sessions/summary-parser-worker-protocol.d.ts +105 -0
  766. package/dist/sessions/summary-parser-worker-protocol.d.ts.map +1 -0
  767. package/dist/sessions/summary-parser-worker-protocol.js +35 -0
  768. package/dist/sessions/summary-parser-worker-protocol.js.map +1 -0
  769. package/dist/sessions/summary-parser-worker-runner.d.ts +3 -0
  770. package/dist/sessions/summary-parser-worker-runner.d.ts.map +1 -0
  771. package/dist/sessions/summary-parser-worker-runner.js +158 -0
  772. package/dist/sessions/summary-parser-worker-runner.js.map +1 -0
  773. package/dist/sessions/types.d.ts +30 -1
  774. package/dist/sessions/types.d.ts.map +1 -1
  775. package/dist/startupEnv.d.ts +2 -0
  776. package/dist/startupEnv.d.ts.map +1 -0
  777. package/dist/startupEnv.js +97 -0
  778. package/dist/startupEnv.js.map +1 -0
  779. package/dist/subscriptions.d.ts.map +1 -1
  780. package/dist/subscriptions.js +28 -18
  781. package/dist/subscriptions.js.map +1 -1
  782. package/dist/supervisor/ExternalSessionTracker.d.ts +5 -1
  783. package/dist/supervisor/ExternalSessionTracker.d.ts.map +1 -1
  784. package/dist/supervisor/ExternalSessionTracker.js +98 -6
  785. package/dist/supervisor/ExternalSessionTracker.js.map +1 -1
  786. package/dist/supervisor/Process.d.ts +252 -32
  787. package/dist/supervisor/Process.d.ts.map +1 -1
  788. package/dist/supervisor/Process.js +1233 -219
  789. package/dist/supervisor/Process.js.map +1 -1
  790. package/dist/supervisor/Supervisor.d.ts +201 -5
  791. package/dist/supervisor/Supervisor.d.ts.map +1 -1
  792. package/dist/supervisor/Supervisor.js +1074 -55
  793. package/dist/supervisor/Supervisor.js.map +1 -1
  794. package/dist/supervisor/WorkerQueue.d.ts +3 -1
  795. package/dist/supervisor/WorkerQueue.d.ts.map +1 -1
  796. package/dist/supervisor/WorkerQueue.js +1 -0
  797. package/dist/supervisor/WorkerQueue.js.map +1 -1
  798. package/dist/supervisor/composeTimeAnchor.d.ts +36 -0
  799. package/dist/supervisor/composeTimeAnchor.d.ts.map +1 -0
  800. package/dist/supervisor/composeTimeAnchor.js +51 -0
  801. package/dist/supervisor/composeTimeAnchor.js.map +1 -0
  802. package/dist/supervisor/deferredDeliverySettings.d.ts +23 -0
  803. package/dist/supervisor/deferredDeliverySettings.d.ts.map +1 -0
  804. package/dist/supervisor/deferredDeliverySettings.js +40 -0
  805. package/dist/supervisor/deferredDeliverySettings.js.map +1 -0
  806. package/dist/supervisor/liveness.d.ts +5 -2
  807. package/dist/supervisor/liveness.d.ts.map +1 -1
  808. package/dist/supervisor/liveness.js +40 -2
  809. package/dist/supervisor/liveness.js.map +1 -1
  810. package/dist/supervisor/types.d.ts +56 -5
  811. package/dist/supervisor/types.d.ts.map +1 -1
  812. package/dist/supervisor/types.js +0 -2
  813. package/dist/supervisor/types.js.map +1 -1
  814. package/dist/uploads/AttachmentStagingService.d.ts +94 -0
  815. package/dist/uploads/AttachmentStagingService.d.ts.map +1 -0
  816. package/dist/uploads/AttachmentStagingService.js +673 -0
  817. package/dist/uploads/AttachmentStagingService.js.map +1 -0
  818. package/dist/uploads/index.d.ts +2 -0
  819. package/dist/uploads/index.d.ts.map +1 -1
  820. package/dist/uploads/index.js +1 -0
  821. package/dist/uploads/index.js.map +1 -1
  822. package/dist/uploads/manager.d.ts +1 -0
  823. package/dist/uploads/manager.d.ts.map +1 -1
  824. package/dist/uploads/manager.js +72 -12
  825. package/dist/uploads/manager.js.map +1 -1
  826. package/dist/utils/codexRolloutFiles.d.ts +16 -0
  827. package/dist/utils/codexRolloutFiles.d.ts.map +1 -0
  828. package/dist/utils/codexRolloutFiles.js +45 -0
  829. package/dist/utils/codexRolloutFiles.js.map +1 -0
  830. package/dist/utils/jsonl.d.ts +8 -0
  831. package/dist/utils/jsonl.d.ts.map +1 -1
  832. package/dist/utils/jsonl.js +158 -5
  833. package/dist/utils/jsonl.js.map +1 -1
  834. package/dist/utils/publicShareViewerUrl.d.ts.map +1 -1
  835. package/dist/utils/publicShareViewerUrl.js +2 -15
  836. package/dist/utils/publicShareViewerUrl.js.map +1 -1
  837. package/dist/watcher/EventBus.d.ts +42 -4
  838. package/dist/watcher/EventBus.d.ts.map +1 -1
  839. package/dist/watcher/EventBus.js.map +1 -1
  840. package/dist/watcher/FileWatcher.d.ts +47 -0
  841. package/dist/watcher/FileWatcher.d.ts.map +1 -1
  842. package/dist/watcher/FileWatcher.js +185 -14
  843. package/dist/watcher/FileWatcher.js.map +1 -1
  844. package/dist/watcher/index.d.ts +2 -2
  845. package/dist/watcher/index.d.ts.map +1 -1
  846. package/dist/watcher/index.js.map +1 -1
  847. package/dist/yaModuleEnv.d.ts +6 -6
  848. package/dist/yaModuleEnv.d.ts.map +1 -1
  849. package/dist/yaModuleEnv.js +12 -12
  850. package/dist/yaModuleEnv.js.map +1 -1
  851. package/package.json +5 -6
  852. package/client-dist/assets/de-BuEb60Yc.js +0 -6
  853. package/client-dist/assets/es-CRlmPKnE.js +0 -6
  854. package/client-dist/assets/fr-Cglgjc2X.js +0 -6
  855. package/client-dist/assets/index-BNj7ibmq.js +0 -524
  856. package/client-dist/assets/index-CAmsUazi.css +0 -1
  857. package/client-dist/assets/ja-DMb9mFPv.js +0 -6
  858. package/client-dist/assets/zh-CN-D1tbfamz.js +0 -6
@@ -1,14 +1,76 @@
1
1
  /**
2
2
  * Server settings API routes
3
3
  */
4
- import { ALL_PERMISSION_MODES, ALL_PROVIDERS, HELPER_SIDE_MODEL_CHEAPEST, HELPER_SIDE_MODEL_SAME_AS_MAIN, PROMPT_SUGGESTION_MODES, RECAP_MODES, normalizeYaClientBaseUrl, normalizeYaClientBaseUrlFromShareViewerUrl, } from "../../bundled/@yep-anywhere/shared/dist/index.js";
4
+ import { ALL_PERMISSION_MODES, ALL_PROVIDERS, HELPER_SIDE_MODEL_CHEAPEST, HELPER_SIDE_MODEL_SAME_AS_MAIN, normalizeYaClientBaseUrl, normalizeYaClientBaseUrlFromShareViewerUrl, DEFAULT_CACHE_MISS_BILLING_SETTINGS, DEFAULT_PROJECT_QUEUE_QUIET_SECONDS, DEFAULT_PROMPT_CACHE_KEEPALIVE_INACTIVITY_MINUTES, MAX_PROJECT_QUEUE_QUIET_SECONDS, PROMPT_CACHE_KEEPALIVE_MODES, PROMPT_SUGGESTION_MODES, RECAP_MODES, clampRecapAfterSeconds, clampProjectQueueQuietSeconds, } from "../../bundled/@yep-anywhere/shared/dist/index.js";
5
5
  import { Hono } from "hono";
6
+ import { getFileAccessInfo, normalizeFileAccess, } from "../middleware/file-access.js";
6
7
  import { testSSHConnection } from "../sdk/remote-spawn.js";
7
8
  import { CODEX_UPDATE_POLICIES, DEFAULT_SERVER_SETTINGS, DEFAULT_SPEECH_AUDIO_RETENTION_MAX_AGE_DAYS, DEFAULT_SPEECH_AUDIO_RETENTION_MAX_BYTES, } from "../services/ServerSettingsService.js";
8
9
  import { isValidSshHostAlias, normalizeSshHostAlias, } from "../utils/sshHostAlias.js";
9
10
  const HELPER_TARGET_ID_PATTERN = /^[A-Za-z0-9._-]{1,64}$/;
10
11
  const MAX_HELPER_TARGETS = 20;
11
12
  const HELPER_TARGET_MODEL_DISCOVERY_TIMEOUT_MS = 5000;
13
+ const SESSION_TOOLBAR_PRESENCE_CLIENT_DEFAULT_KEYS = [
14
+ "modeSelector",
15
+ "steerNow",
16
+ "attachments",
17
+ "slashMenu",
18
+ "thinkingToggle",
19
+ "renderMode",
20
+ "microphone",
21
+ "waveform",
22
+ "shortcutsHelp",
23
+ "contextUsage",
24
+ "btw",
25
+ "nudge",
26
+ "sessionStatus",
27
+ "projectQueue",
28
+ ];
29
+ const TOOLBAR_CONTROL_PRESENCES = [
30
+ "hidden",
31
+ "pin",
32
+ "last",
33
+ "mid",
34
+ "first",
35
+ ];
36
+ const CLIENT_DEFAULT_KEYS = [
37
+ "speech",
38
+ "busyComposerDefaultAction",
39
+ "collapsedComposerButton",
40
+ "sessionToolbarPresence",
41
+ "steerNowDefault",
42
+ "patientQueueDefault",
43
+ "projectQueueCtrlEnterEnabled",
44
+ "compactAtContextPercent",
45
+ ];
46
+ const BUSY_COMPOSER_DEFAULT_ACTIONS = [
47
+ "steer",
48
+ "queue",
49
+ ];
50
+ const COLLAPSED_COMPOSER_BUTTON_PREFERENCES = [
51
+ "primary",
52
+ "alternate",
53
+ "microphone",
54
+ ];
55
+ const SPEECH_CLIENT_DEFAULT_KEYS = [
56
+ "voiceInputEnabled",
57
+ "speechMethod",
58
+ "speechSmartTurnSettings",
59
+ "grokSpeechAudioSettings",
60
+ ];
61
+ const THINKING_MODES = [
62
+ "off",
63
+ "auto",
64
+ "on",
65
+ ];
66
+ const EFFORT_LEVELS = [
67
+ "low",
68
+ "medium",
69
+ "high",
70
+ "xhigh",
71
+ "max",
72
+ ];
73
+ const MAX_SPEECH_SMART_TURN_TIMEOUT_MS = 10000;
12
74
  function parseHostAliasList(rawHosts) {
13
75
  const hosts = [];
14
76
  for (const rawHost of rawHosts) {
@@ -93,6 +155,120 @@ function parseHelperTargets(raw) {
93
155
  function isRecord(value) {
94
156
  return typeof value === "object" && value !== null;
95
157
  }
158
+ function parseOptionalString(value, maxLength) {
159
+ if (value === undefined || value === null || value === "")
160
+ return undefined;
161
+ if (typeof value !== "string")
162
+ return null;
163
+ return value.length > 0 ? value.slice(0, maxLength) : undefined;
164
+ }
165
+ function parseProviderSessionDefaults(raw) {
166
+ if (raw === undefined || raw === null || raw === "")
167
+ return undefined;
168
+ if (!isRecord(raw))
169
+ return null;
170
+ const parsed = {};
171
+ if ("model" in raw) {
172
+ const model = parseOptionalString(raw.model, 200);
173
+ if (model === null)
174
+ return null;
175
+ if (model)
176
+ parsed.model = model;
177
+ }
178
+ if ("serviceTier" in raw) {
179
+ const serviceTier = parseOptionalString(raw.serviceTier, 64);
180
+ if (serviceTier === null)
181
+ return null;
182
+ if (serviceTier)
183
+ parsed.serviceTier = serviceTier;
184
+ }
185
+ if ("thinkingMode" in raw) {
186
+ if (raw.thinkingMode !== undefined &&
187
+ raw.thinkingMode !== null &&
188
+ raw.thinkingMode !== "" &&
189
+ !THINKING_MODES.includes(raw.thinkingMode)) {
190
+ return null;
191
+ }
192
+ if (typeof raw.thinkingMode === "string" && raw.thinkingMode.length > 0) {
193
+ parsed.thinkingMode = raw.thinkingMode;
194
+ }
195
+ }
196
+ if ("effortLevel" in raw) {
197
+ if (raw.effortLevel !== undefined &&
198
+ raw.effortLevel !== null &&
199
+ raw.effortLevel !== "" &&
200
+ !EFFORT_LEVELS.includes(raw.effortLevel)) {
201
+ return null;
202
+ }
203
+ if (typeof raw.effortLevel === "string" && raw.effortLevel.length > 0) {
204
+ parsed.effortLevel = raw.effortLevel;
205
+ }
206
+ }
207
+ if ("helperSideModel" in raw) {
208
+ const helperSideModel = parseOptionalString(raw.helperSideModel, 200);
209
+ if (helperSideModel === null)
210
+ return null;
211
+ if (helperSideModel) {
212
+ parsed.helperSideModel =
213
+ helperSideModel === HELPER_SIDE_MODEL_SAME_AS_MAIN
214
+ ? HELPER_SIDE_MODEL_SAME_AS_MAIN
215
+ : helperSideModel === HELPER_SIDE_MODEL_CHEAPEST
216
+ ? HELPER_SIDE_MODEL_CHEAPEST
217
+ : helperSideModel;
218
+ }
219
+ }
220
+ return Object.keys(parsed).length > 0 ? parsed : undefined;
221
+ }
222
+ const MAX_FILE_ACCESS_CUSTOM_ENTRIES = 100;
223
+ const MAX_FILE_ACCESS_CUSTOM_LENGTH = 1024;
224
+ /**
225
+ * Returns:
226
+ * - `null` when the payload is invalid
227
+ * - `undefined` when the setting should be cleared (reset to secure defaults)
228
+ * - a normalized object when valid
229
+ */
230
+ function parseFileAccess(raw) {
231
+ if (raw === undefined)
232
+ return null;
233
+ if (raw === null || raw === "")
234
+ return undefined;
235
+ if (!isRecord(raw))
236
+ return null;
237
+ const allowedKeys = new Set([
238
+ "projects",
239
+ "uploads",
240
+ "temp",
241
+ "home",
242
+ "custom",
243
+ ]);
244
+ for (const key of Object.keys(raw)) {
245
+ if (!allowedKeys.has(key))
246
+ return null;
247
+ }
248
+ for (const key of ["projects", "uploads", "temp", "home"]) {
249
+ if (key in raw && typeof raw[key] !== "boolean")
250
+ return null;
251
+ }
252
+ if ("custom" in raw) {
253
+ if (!Array.isArray(raw.custom) ||
254
+ raw.custom.length > MAX_FILE_ACCESS_CUSTOM_ENTRIES) {
255
+ return null;
256
+ }
257
+ for (const entry of raw.custom) {
258
+ if (typeof entry !== "string" ||
259
+ entry.length > MAX_FILE_ACCESS_CUSTOM_LENGTH) {
260
+ return null;
261
+ }
262
+ }
263
+ }
264
+ return normalizeFileAccess({
265
+ projects: raw.projects,
266
+ uploads: raw.uploads,
267
+ temp: raw.temp,
268
+ home: raw.home,
269
+ custom: raw.custom ?? [],
270
+ });
271
+ }
96
272
  function parseOpenAiModelsResponse(raw) {
97
273
  if (!isRecord(raw) || !Array.isArray(raw.data))
98
274
  return null;
@@ -120,6 +296,19 @@ function parseOpenAiModelsResponse(raw) {
120
296
  }
121
297
  return models;
122
298
  }
299
+ function parseAgentContextHints(raw, current) {
300
+ if (raw === undefined || raw === null)
301
+ return {};
302
+ if (!isRecord(raw))
303
+ return null;
304
+ const parsed = { ...current };
305
+ if ("latexMathRendering" in raw) {
306
+ if (typeof raw.latexMathRendering !== "boolean")
307
+ return null;
308
+ parsed.latexMathRendering = raw.latexMathRendering;
309
+ }
310
+ return parsed;
311
+ }
123
312
  async function discoverOpenAiCompatibleModels(baseUrl) {
124
313
  const controller = new AbortController();
125
314
  const timeout = setTimeout(() => controller.abort(), HELPER_TARGET_MODEL_DISCOVERY_TIMEOUT_MS);
@@ -165,15 +354,18 @@ function parseNewSessionDefaults(raw) {
165
354
  }
166
355
  }
167
356
  if ("model" in input) {
168
- if (input.model !== undefined &&
169
- input.model !== null &&
170
- input.model !== "" &&
171
- typeof input.model !== "string") {
357
+ const model = parseOptionalString(input.model, 200);
358
+ if (model === null)
172
359
  return null;
173
- }
174
- if (typeof input.model === "string" && input.model.length > 0) {
175
- parsed.model = input.model;
176
- }
360
+ if (model)
361
+ parsed.model = model;
362
+ }
363
+ if ("serviceTier" in input) {
364
+ const serviceTier = parseOptionalString(input.serviceTier, 64);
365
+ if (serviceTier === null)
366
+ return null;
367
+ if (serviceTier)
368
+ parsed.serviceTier = serviceTier;
177
369
  }
178
370
  if ("permissionMode" in input) {
179
371
  if (input.permissionMode !== undefined &&
@@ -198,6 +390,19 @@ function parseNewSessionDefaults(raw) {
198
390
  parsed.recapMode = input.recapMode;
199
391
  }
200
392
  }
393
+ if ("recapAfterSeconds" in input) {
394
+ if (input.recapAfterSeconds !== undefined &&
395
+ input.recapAfterSeconds !== null &&
396
+ input.recapAfterSeconds !== "" &&
397
+ (typeof input.recapAfterSeconds !== "number" ||
398
+ !Number.isFinite(input.recapAfterSeconds))) {
399
+ return null;
400
+ }
401
+ if (typeof input.recapAfterSeconds === "number" &&
402
+ Number.isFinite(input.recapAfterSeconds)) {
403
+ parsed.recapAfterSeconds = clampRecapAfterSeconds(input.recapAfterSeconds);
404
+ }
405
+ }
201
406
  if ("promptSuggestionMode" in input) {
202
407
  if (input.promptSuggestionMode !== undefined &&
203
408
  input.promptSuggestionMode !== null &&
@@ -211,25 +416,316 @@ function parseNewSessionDefaults(raw) {
211
416
  input.promptSuggestionMode;
212
417
  }
213
418
  }
214
- if ("helperSideModel" in input) {
215
- if (input.helperSideModel !== undefined &&
216
- input.helperSideModel !== null &&
217
- input.helperSideModel !== "" &&
218
- typeof input.helperSideModel !== "string") {
419
+ if ("providers" in input) {
420
+ if (input.providers !== undefined &&
421
+ input.providers !== null &&
422
+ input.providers !== "" &&
423
+ !isRecord(input.providers)) {
219
424
  return null;
220
425
  }
221
- if (typeof input.helperSideModel === "string" &&
222
- input.helperSideModel.length > 0) {
223
- parsed.helperSideModel =
224
- input.helperSideModel === HELPER_SIDE_MODEL_SAME_AS_MAIN
225
- ? HELPER_SIDE_MODEL_SAME_AS_MAIN
226
- : input.helperSideModel === HELPER_SIDE_MODEL_CHEAPEST
227
- ? HELPER_SIDE_MODEL_CHEAPEST
228
- : input.helperSideModel.slice(0, 200);
426
+ if (isRecord(input.providers)) {
427
+ const providers = {};
428
+ for (const [providerName, rawDefaults] of Object.entries(input.providers)) {
429
+ if (!ALL_PROVIDERS.includes(providerName)) {
430
+ return null;
431
+ }
432
+ const parsedProviderDefaults = parseProviderSessionDefaults(rawDefaults);
433
+ if (parsedProviderDefaults === null)
434
+ return null;
435
+ if (parsedProviderDefaults) {
436
+ providers[providerName] = parsedProviderDefaults;
437
+ }
438
+ }
439
+ if (Object.keys(providers).length > 0) {
440
+ parsed.providers = providers;
441
+ }
442
+ }
443
+ }
444
+ return Object.keys(parsed).length > 0 ? parsed : undefined;
445
+ }
446
+ function parseSpeechSmartTurnClientDefault(raw) {
447
+ if (!isRecord(raw))
448
+ return null;
449
+ if (typeof raw.enabled !== "boolean" ||
450
+ typeof raw.threshold !== "number" ||
451
+ typeof raw.timeoutMs !== "number" ||
452
+ !Number.isFinite(raw.threshold) ||
453
+ !Number.isFinite(raw.timeoutMs) ||
454
+ raw.threshold < 0 ||
455
+ raw.threshold > 1 ||
456
+ raw.timeoutMs < 0 ||
457
+ raw.timeoutMs > MAX_SPEECH_SMART_TURN_TIMEOUT_MS) {
458
+ return null;
459
+ }
460
+ return {
461
+ enabled: raw.enabled,
462
+ threshold: raw.threshold,
463
+ timeoutMs: Math.round(raw.timeoutMs),
464
+ };
465
+ }
466
+ function parseGrokSpeechAudioClientDefault(raw) {
467
+ if (!isRecord(raw))
468
+ return null;
469
+ if (raw.uplinkMode !== "pcm16" && raw.uplinkMode !== "browser-compressed") {
470
+ return null;
471
+ }
472
+ return { uplinkMode: raw.uplinkMode };
473
+ }
474
+ function parseSessionToolbarPresenceClientDefaults(raw) {
475
+ if (raw === undefined || raw === null || raw === "")
476
+ return undefined;
477
+ if (!isRecord(raw))
478
+ return null;
479
+ const allowedKeys = new Set(SESSION_TOOLBAR_PRESENCE_CLIENT_DEFAULT_KEYS);
480
+ for (const key of Object.keys(raw)) {
481
+ if (!allowedKeys.has(key))
482
+ return null;
483
+ }
484
+ const allowedPresences = new Set(TOOLBAR_CONTROL_PRESENCES);
485
+ const parsed = {};
486
+ for (const key of SESSION_TOOLBAR_PRESENCE_CLIENT_DEFAULT_KEYS) {
487
+ if (!(key in raw))
488
+ continue;
489
+ const value = raw[key];
490
+ if (typeof value !== "string" || !allowedPresences.has(value))
491
+ return null;
492
+ parsed[key] = value;
493
+ }
494
+ return Object.keys(parsed).length > 0 ? parsed : null;
495
+ }
496
+ // Per-model compaction thresholds: each value is "compact at X% of that
497
+ // model's context window". Reject non-numbers (the slider only ever sends
498
+ // numbers), but treat out-of-range like the load path does — keep 1–99 and
499
+ // drop anything else (including >= 100 = "off"). An empty result clears the
500
+ // setting. The returned map is authoritative: the client always sends the
501
+ // full map, so mergeClientDefaults replaces rather than per-model merges,
502
+ // which is what makes turning a model "off" (dropping its key) take effect.
503
+ function parseCompactAtContextPercent(raw) {
504
+ if (raw === undefined || raw === null || raw === "")
505
+ return undefined;
506
+ if (!isRecord(raw))
507
+ return null;
508
+ const cleaned = {};
509
+ for (const [modelId, value] of Object.entries(raw)) {
510
+ if (typeof value !== "number" || !Number.isFinite(value))
511
+ return null;
512
+ const pct = Math.round(value);
513
+ if (pct > 0 && pct < 100)
514
+ cleaned[modelId] = pct;
515
+ }
516
+ return Object.keys(cleaned).length > 0 ? cleaned : undefined;
517
+ }
518
+ function parseClientDefaults(raw) {
519
+ if (raw === undefined)
520
+ return null;
521
+ if (raw === null || raw === "")
522
+ return undefined;
523
+ if (!isRecord(raw))
524
+ return null;
525
+ const allowedKeys = new Set(CLIENT_DEFAULT_KEYS);
526
+ for (const key of Object.keys(raw)) {
527
+ if (!allowedKeys.has(key))
528
+ return null;
529
+ }
530
+ if (Object.keys(raw).length === 0)
531
+ return null;
532
+ const parsed = {};
533
+ if ("speech" in raw) {
534
+ if (raw.speech === undefined || raw.speech === null || raw.speech === "") {
535
+ parsed.speech = undefined;
536
+ }
537
+ else if (!isRecord(raw.speech)) {
538
+ return null;
539
+ }
540
+ else {
541
+ const allowedSpeechKeys = new Set(SPEECH_CLIENT_DEFAULT_KEYS);
542
+ for (const key of Object.keys(raw.speech)) {
543
+ if (!allowedSpeechKeys.has(key))
544
+ return null;
545
+ }
546
+ const speech = {};
547
+ if ("voiceInputEnabled" in raw.speech) {
548
+ if (typeof raw.speech.voiceInputEnabled !== "boolean")
549
+ return null;
550
+ speech.voiceInputEnabled = raw.speech.voiceInputEnabled;
551
+ }
552
+ if ("speechMethod" in raw.speech) {
553
+ if (typeof raw.speech.speechMethod !== "string" ||
554
+ raw.speech.speechMethod.trim().length === 0) {
555
+ return null;
556
+ }
557
+ speech.speechMethod = raw.speech.speechMethod.trim().slice(0, 120);
558
+ }
559
+ if ("speechSmartTurnSettings" in raw.speech) {
560
+ const parsedSmartTurn = parseSpeechSmartTurnClientDefault(raw.speech.speechSmartTurnSettings);
561
+ if (!parsedSmartTurn)
562
+ return null;
563
+ speech.speechSmartTurnSettings = parsedSmartTurn;
564
+ }
565
+ if ("grokSpeechAudioSettings" in raw.speech) {
566
+ const parsedGrokAudio = parseGrokSpeechAudioClientDefault(raw.speech.grokSpeechAudioSettings);
567
+ if (!parsedGrokAudio)
568
+ return null;
569
+ speech.grokSpeechAudioSettings = parsedGrokAudio;
570
+ }
571
+ if (Object.keys(speech).length === 0)
572
+ return null;
573
+ parsed.speech = speech;
574
+ }
575
+ }
576
+ if ("busyComposerDefaultAction" in raw) {
577
+ if (raw.busyComposerDefaultAction === undefined ||
578
+ raw.busyComposerDefaultAction === null) {
579
+ parsed.busyComposerDefaultAction = undefined;
580
+ }
581
+ else if (!BUSY_COMPOSER_DEFAULT_ACTIONS.includes(raw.busyComposerDefaultAction)) {
582
+ return null;
583
+ }
584
+ else {
585
+ parsed.busyComposerDefaultAction =
586
+ raw.busyComposerDefaultAction;
587
+ }
588
+ }
589
+ if ("collapsedComposerButton" in raw) {
590
+ if (raw.collapsedComposerButton === undefined ||
591
+ raw.collapsedComposerButton === null) {
592
+ parsed.collapsedComposerButton = undefined;
593
+ }
594
+ else if (!COLLAPSED_COMPOSER_BUTTON_PREFERENCES.includes(raw.collapsedComposerButton)) {
595
+ return null;
596
+ }
597
+ else {
598
+ parsed.collapsedComposerButton =
599
+ raw.collapsedComposerButton;
600
+ }
601
+ }
602
+ if ("steerNowDefault" in raw) {
603
+ if (raw.steerNowDefault === undefined || raw.steerNowDefault === null) {
604
+ parsed.steerNowDefault = undefined;
605
+ }
606
+ else if (typeof raw.steerNowDefault !== "boolean") {
607
+ return null;
608
+ }
609
+ else {
610
+ parsed.steerNowDefault = raw.steerNowDefault;
229
611
  }
230
612
  }
613
+ if ("patientQueueDefault" in raw) {
614
+ if (raw.patientQueueDefault === undefined ||
615
+ raw.patientQueueDefault === null) {
616
+ parsed.patientQueueDefault = undefined;
617
+ }
618
+ else if (typeof raw.patientQueueDefault !== "boolean") {
619
+ return null;
620
+ }
621
+ else {
622
+ parsed.patientQueueDefault = raw.patientQueueDefault;
623
+ }
624
+ }
625
+ if ("projectQueueCtrlEnterEnabled" in raw) {
626
+ if (raw.projectQueueCtrlEnterEnabled === undefined ||
627
+ raw.projectQueueCtrlEnterEnabled === null) {
628
+ parsed.projectQueueCtrlEnterEnabled = undefined;
629
+ }
630
+ else if (typeof raw.projectQueueCtrlEnterEnabled !== "boolean") {
631
+ return null;
632
+ }
633
+ else {
634
+ parsed.projectQueueCtrlEnterEnabled = raw.projectQueueCtrlEnterEnabled;
635
+ }
636
+ }
637
+ if ("sessionToolbarPresence" in raw) {
638
+ const parsedPresence = parseSessionToolbarPresenceClientDefaults(raw.sessionToolbarPresence);
639
+ if (parsedPresence === null)
640
+ return null;
641
+ parsed.sessionToolbarPresence = parsedPresence;
642
+ }
643
+ if ("compactAtContextPercent" in raw) {
644
+ const parsedCompact = parseCompactAtContextPercent(raw.compactAtContextPercent);
645
+ if (parsedCompact === null)
646
+ return null;
647
+ parsed.compactAtContextPercent = parsedCompact;
648
+ }
231
649
  return Object.keys(parsed).length > 0 ? parsed : undefined;
232
650
  }
651
+ function mergeClientDefaults(current, update) {
652
+ if (!update)
653
+ return undefined;
654
+ const merged = { ...current };
655
+ if ("speech" in update) {
656
+ if (update.speech === undefined) {
657
+ delete merged.speech;
658
+ }
659
+ else {
660
+ merged.speech = {
661
+ ...current?.speech,
662
+ ...update.speech,
663
+ };
664
+ }
665
+ }
666
+ if ("busyComposerDefaultAction" in update) {
667
+ if (update.busyComposerDefaultAction === undefined) {
668
+ delete merged.busyComposerDefaultAction;
669
+ }
670
+ else {
671
+ merged.busyComposerDefaultAction = update.busyComposerDefaultAction;
672
+ }
673
+ }
674
+ if ("collapsedComposerButton" in update) {
675
+ if (update.collapsedComposerButton === undefined) {
676
+ delete merged.collapsedComposerButton;
677
+ }
678
+ else {
679
+ merged.collapsedComposerButton = update.collapsedComposerButton;
680
+ }
681
+ }
682
+ if ("steerNowDefault" in update) {
683
+ if (update.steerNowDefault === undefined) {
684
+ delete merged.steerNowDefault;
685
+ }
686
+ else {
687
+ merged.steerNowDefault = update.steerNowDefault;
688
+ }
689
+ }
690
+ if ("patientQueueDefault" in update) {
691
+ if (update.patientQueueDefault === undefined) {
692
+ delete merged.patientQueueDefault;
693
+ }
694
+ else {
695
+ merged.patientQueueDefault = update.patientQueueDefault;
696
+ }
697
+ }
698
+ if ("projectQueueCtrlEnterEnabled" in update) {
699
+ if (update.projectQueueCtrlEnterEnabled === undefined) {
700
+ delete merged.projectQueueCtrlEnterEnabled;
701
+ }
702
+ else {
703
+ merged.projectQueueCtrlEnterEnabled = update.projectQueueCtrlEnterEnabled;
704
+ }
705
+ }
706
+ if ("sessionToolbarPresence" in update) {
707
+ if (update.sessionToolbarPresence === undefined) {
708
+ delete merged.sessionToolbarPresence;
709
+ }
710
+ else {
711
+ merged.sessionToolbarPresence = {
712
+ ...current?.sessionToolbarPresence,
713
+ ...update.sessionToolbarPresence,
714
+ };
715
+ }
716
+ }
717
+ if ("compactAtContextPercent" in update) {
718
+ // Replace the whole map (not a per-model merge): the client always sends
719
+ // the complete map, so a model dropped from it means "off" for that model.
720
+ if (update.compactAtContextPercent === undefined) {
721
+ delete merged.compactAtContextPercent;
722
+ }
723
+ else {
724
+ merged.compactAtContextPercent = update.compactAtContextPercent;
725
+ }
726
+ }
727
+ return Object.keys(merged).length > 0 ? merged : undefined;
728
+ }
233
729
  function parseSpeechAudioRetention(raw) {
234
730
  if (raw === undefined || raw === null) {
235
731
  return DEFAULT_SERVER_SETTINGS.speechAudioRetention;
@@ -259,9 +755,152 @@ function parseSpeechAudioRetention(raw) {
259
755
  }
260
756
  return { enabled, maxAgeDays, maxBytes };
261
757
  }
758
+ function parsePromptCacheKeepalive(raw) {
759
+ if (raw === undefined)
760
+ return null;
761
+ if (raw === null || raw === "")
762
+ return undefined;
763
+ if (!isRecord(raw))
764
+ return null;
765
+ const rawProviders = raw.providers;
766
+ if (rawProviders === undefined || rawProviders === null)
767
+ return {};
768
+ if (!isRecord(rawProviders))
769
+ return null;
770
+ const providers = {};
771
+ for (const [providerName, rawProviderSetting] of Object.entries(rawProviders)) {
772
+ if (!ALL_PROVIDERS.includes(providerName))
773
+ return null;
774
+ if (rawProviderSetting === undefined || rawProviderSetting === null) {
775
+ continue;
776
+ }
777
+ if (!isRecord(rawProviderSetting))
778
+ return null;
779
+ const setting = {};
780
+ if ("mode" in rawProviderSetting) {
781
+ if (typeof rawProviderSetting.mode !== "string" ||
782
+ !PROMPT_CACHE_KEEPALIVE_MODES.includes(rawProviderSetting.mode)) {
783
+ return null;
784
+ }
785
+ setting.mode = rawProviderSetting.mode;
786
+ }
787
+ if ("inactivityMinutes" in rawProviderSetting) {
788
+ const value = rawProviderSetting.inactivityMinutes;
789
+ if (typeof value !== "number" ||
790
+ !Number.isInteger(value) ||
791
+ value < 1 ||
792
+ value > 1440) {
793
+ return null;
794
+ }
795
+ setting.inactivityMinutes = value;
796
+ }
797
+ if (Object.keys(setting).length > 0) {
798
+ providers[providerName] = setting;
799
+ }
800
+ }
801
+ return { providers };
802
+ }
803
+ function parseCacheMissBilling(raw) {
804
+ if (raw === undefined)
805
+ return null;
806
+ if (raw === null || raw === "")
807
+ return DEFAULT_CACHE_MISS_BILLING_SETTINGS;
808
+ if (!isRecord(raw))
809
+ return null;
810
+ const parsed = {};
811
+ if ("enabled" in raw) {
812
+ if (raw.enabled === undefined || raw.enabled === null) {
813
+ parsed.enabled = DEFAULT_CACHE_MISS_BILLING_SETTINGS.enabled;
814
+ }
815
+ else if (typeof raw.enabled !== "boolean") {
816
+ return null;
817
+ }
818
+ else {
819
+ parsed.enabled = raw.enabled;
820
+ }
821
+ }
822
+ if ("showToasts" in raw) {
823
+ if (raw.showToasts === undefined || raw.showToasts === null) {
824
+ parsed.showToasts = DEFAULT_CACHE_MISS_BILLING_SETTINGS.showToasts;
825
+ }
826
+ else if (typeof raw.showToasts !== "boolean") {
827
+ return null;
828
+ }
829
+ else {
830
+ parsed.showToasts = raw.showToasts;
831
+ }
832
+ }
833
+ if ("freshWindowMinutes" in raw) {
834
+ if (raw.freshWindowMinutes === undefined ||
835
+ raw.freshWindowMinutes === null) {
836
+ parsed.freshWindowMinutes =
837
+ DEFAULT_CACHE_MISS_BILLING_SETTINGS.freshWindowMinutes;
838
+ }
839
+ else if (typeof raw.freshWindowMinutes !== "number" ||
840
+ !Number.isInteger(raw.freshWindowMinutes) ||
841
+ raw.freshWindowMinutes < 1 ||
842
+ raw.freshWindowMinutes > 1440) {
843
+ return null;
844
+ }
845
+ else {
846
+ parsed.freshWindowMinutes = raw.freshWindowMinutes;
847
+ }
848
+ }
849
+ if ("providerFreshWindowMinutes" in raw) {
850
+ if (raw.providerFreshWindowMinutes === undefined ||
851
+ raw.providerFreshWindowMinutes === null) {
852
+ parsed.providerFreshWindowMinutes =
853
+ DEFAULT_CACHE_MISS_BILLING_SETTINGS.providerFreshWindowMinutes;
854
+ }
855
+ else if (!isRecord(raw.providerFreshWindowMinutes)) {
856
+ return null;
857
+ }
858
+ else {
859
+ const providerFreshWindowMinutes = {};
860
+ for (const [providerName, value] of Object.entries(raw.providerFreshWindowMinutes)) {
861
+ if (!ALL_PROVIDERS.includes(providerName)) {
862
+ return null;
863
+ }
864
+ if (typeof value !== "number" ||
865
+ !Number.isInteger(value) ||
866
+ value < 1 ||
867
+ value > 1440) {
868
+ return null;
869
+ }
870
+ providerFreshWindowMinutes[providerName] = value;
871
+ }
872
+ parsed.providerFreshWindowMinutes = providerFreshWindowMinutes;
873
+ }
874
+ }
875
+ if ("minimumInputTokens" in raw) {
876
+ if (raw.minimumInputTokens === undefined ||
877
+ raw.minimumInputTokens === null) {
878
+ parsed.minimumInputTokens =
879
+ DEFAULT_CACHE_MISS_BILLING_SETTINGS.minimumInputTokens;
880
+ }
881
+ else if (typeof raw.minimumInputTokens !== "number" ||
882
+ !Number.isInteger(raw.minimumInputTokens) ||
883
+ raw.minimumInputTokens < 1 ||
884
+ raw.minimumInputTokens > 5_000_000) {
885
+ return null;
886
+ }
887
+ else {
888
+ parsed.minimumInputTokens = raw.minimumInputTokens;
889
+ }
890
+ }
891
+ const result = {
892
+ ...DEFAULT_CACHE_MISS_BILLING_SETTINGS,
893
+ ...parsed,
894
+ providerFreshWindowMinutes: {
895
+ ...DEFAULT_CACHE_MISS_BILLING_SETTINGS.providerFreshWindowMinutes,
896
+ ...parsed.providerFreshWindowMinutes,
897
+ },
898
+ };
899
+ return result;
900
+ }
262
901
  export function createSettingsRoutes(deps) {
263
902
  const app = new Hono();
264
- const { serverSettingsService, onAllowedHostsChanged, onRemoteSessionPersistenceChanged, onOllamaUrlChanged, onOllamaSystemPromptChanged, onOllamaUseFullSystemPromptChanged, onGrokBuildUseXaiApiKeyChanged, publicShareService, } = deps;
903
+ const { serverSettingsService, sessionMetadataService, onAllowedHostsChanged, onFileAccessChanged, onRemoteSessionPersistenceChanged, onOllamaUrlChanged, onOllamaSystemPromptChanged, onOllamaUseFullSystemPromptChanged, onGrokBuildUseXaiApiKeyChanged, publicShareService, } = deps;
265
904
  /**
266
905
  * GET /api/settings
267
906
  * Get all server settings
@@ -270,6 +909,27 @@ export function createSettingsRoutes(deps) {
270
909
  const settings = serverSettingsService.getSettings();
271
910
  return c.json({ settings });
272
911
  });
912
+ /**
913
+ * GET /api/settings/cache-miss-billing/events
914
+ * Read the server-stored prompt-cache billing evidence log.
915
+ */
916
+ app.get("/cache-miss-billing/events", (c) => {
917
+ const rawLimit = Number(c.req.query("limit") ?? 200);
918
+ const limit = Number.isFinite(rawLimit) && rawLimit > 0
919
+ ? Math.min(Math.floor(rawLimit), 500)
920
+ : 200;
921
+ return c.json({
922
+ events: sessionMetadataService?.getCacheMissBillingEvents(limit) ?? [],
923
+ });
924
+ });
925
+ /**
926
+ * GET /api/settings/file-access
927
+ * Read-only info for the File access settings UI: whether an env var pins
928
+ * the allow-set, plus the resolved temp/uploads/home prefixes for hints.
929
+ */
930
+ app.get("/file-access", (c) => {
931
+ return c.json(getFileAccessInfo());
932
+ });
273
933
  /**
274
934
  * PUT /api/settings
275
935
  * Update server settings
@@ -287,9 +947,53 @@ export function createSettingsRoutes(deps) {
287
947
  if (typeof body.clientLogCollectionRequested === "boolean") {
288
948
  updates.clientLogCollectionRequested = body.clientLogCollectionRequested;
289
949
  }
950
+ if (typeof body.approvalAuditLogEnabled === "boolean") {
951
+ updates.approvalAuditLogEnabled = body.approvalAuditLogEnabled;
952
+ }
290
953
  if (typeof body.publicSharesEnabled === "boolean") {
291
954
  updates.publicSharesEnabled = body.publicSharesEnabled;
292
955
  }
956
+ if (typeof body.workstreamsEnabled === "boolean") {
957
+ updates.workstreamsEnabled = body.workstreamsEnabled;
958
+ }
959
+ if (typeof body.composeAnchorsEnabled === "boolean") {
960
+ updates.composeAnchorsEnabled = body.composeAnchorsEnabled;
961
+ }
962
+ if ("deferredJoinWindowSeconds" in body) {
963
+ if (body.deferredJoinWindowSeconds === undefined ||
964
+ body.deferredJoinWindowSeconds === null) {
965
+ updates.deferredJoinWindowSeconds = undefined;
966
+ }
967
+ else if (typeof body.deferredJoinWindowSeconds === "number" &&
968
+ Number.isFinite(body.deferredJoinWindowSeconds) &&
969
+ body.deferredJoinWindowSeconds >= 0) {
970
+ updates.deferredJoinWindowSeconds = body.deferredJoinWindowSeconds;
971
+ }
972
+ else {
973
+ return c.json({
974
+ error: "deferredJoinWindowSeconds must be a non-negative number of seconds (0 = never join)",
975
+ }, 400);
976
+ }
977
+ }
978
+ if ("projectQueueQuietSeconds" in body) {
979
+ if (body.projectQueueQuietSeconds === undefined ||
980
+ body.projectQueueQuietSeconds === null) {
981
+ updates.projectQueueQuietSeconds = DEFAULT_PROJECT_QUEUE_QUIET_SECONDS;
982
+ }
983
+ else if (typeof body.projectQueueQuietSeconds === "number" &&
984
+ Number.isFinite(body.projectQueueQuietSeconds) &&
985
+ body.projectQueueQuietSeconds >= 0 &&
986
+ body.projectQueueQuietSeconds <= MAX_PROJECT_QUEUE_QUIET_SECONDS) {
987
+ updates.projectQueueQuietSeconds =
988
+ clampProjectQueueQuietSeconds(body.projectQueueQuietSeconds) ??
989
+ DEFAULT_PROJECT_QUEUE_QUIET_SECONDS;
990
+ }
991
+ else {
992
+ return c.json({
993
+ error: `projectQueueQuietSeconds must be a number of seconds from 0 to ${MAX_PROJECT_QUEUE_QUIET_SECONDS}`,
994
+ }, 400);
995
+ }
996
+ }
293
997
  if ("yaClientBaseUrl" in body) {
294
998
  if (body.yaClientBaseUrl === undefined ||
295
999
  body.yaClientBaseUrl === null ||
@@ -363,6 +1067,14 @@ export function createSettingsRoutes(deps) {
363
1067
  updates.allowedHosts = body.allowedHosts;
364
1068
  }
365
1069
  }
1070
+ // Handle fileAccess object (checkbox model; undefined/null/"" = secure defaults)
1071
+ if ("fileAccess" in body) {
1072
+ const parsed = parseFileAccess(body.fileAccess);
1073
+ if (parsed === null) {
1074
+ return c.json({ error: "Invalid fileAccess setting" }, 400);
1075
+ }
1076
+ updates.fileAccess = parsed;
1077
+ }
366
1078
  // Handle globalInstructions string (free-form text, or undefined/null/"" to clear)
367
1079
  if ("globalInstructions" in body) {
368
1080
  if (body.globalInstructions === undefined ||
@@ -374,6 +1086,13 @@ export function createSettingsRoutes(deps) {
374
1086
  updates.globalInstructions = body.globalInstructions.slice(0, 10000);
375
1087
  }
376
1088
  }
1089
+ if ("agentContextHints" in body) {
1090
+ const parsedHints = parseAgentContextHints(body.agentContextHints, serverSettingsService.getSetting("agentContextHints"));
1091
+ if (parsedHints === null) {
1092
+ return c.json({ error: "Invalid agentContextHints setting" }, 400);
1093
+ }
1094
+ updates.agentContextHints = parsedHints;
1095
+ }
377
1096
  if ("heartbeatTurnsAfterMinutes" in body) {
378
1097
  if (body.heartbeatTurnsAfterMinutes === undefined ||
379
1098
  body.heartbeatTurnsAfterMinutes === null) {
@@ -442,6 +1161,13 @@ export function createSettingsRoutes(deps) {
442
1161
  }
443
1162
  updates.newSessionDefaults = parsedDefaults;
444
1163
  }
1164
+ if ("clientDefaults" in body) {
1165
+ const parsedDefaults = parseClientDefaults(body.clientDefaults);
1166
+ if (parsedDefaults === null) {
1167
+ return c.json({ error: "Invalid clientDefaults setting" }, 400);
1168
+ }
1169
+ updates.clientDefaults = mergeClientDefaults(serverSettingsService.getSetting("clientDefaults"), parsedDefaults);
1170
+ }
445
1171
  if ("speechAudioRetention" in body) {
446
1172
  const parsedRetention = parseSpeechAudioRetention(body.speechAudioRetention);
447
1173
  if (parsedRetention === null) {
@@ -456,6 +1182,24 @@ export function createSettingsRoutes(deps) {
456
1182
  }
457
1183
  updates.helperTargets = parsedTargets;
458
1184
  }
1185
+ if ("promptCacheKeepalive" in body) {
1186
+ const parsedKeepalive = parsePromptCacheKeepalive(body.promptCacheKeepalive);
1187
+ if (parsedKeepalive === null) {
1188
+ return c.json({
1189
+ error: `promptCacheKeepalive must configure provider modes (${PROMPT_CACHE_KEEPALIVE_MODES.join(", ")}) and integer inactivityMinutes between 1 and 1440 (default ${DEFAULT_PROMPT_CACHE_KEEPALIVE_INACTIVITY_MINUTES})`,
1190
+ }, 400);
1191
+ }
1192
+ updates.promptCacheKeepalive = parsedKeepalive;
1193
+ }
1194
+ if ("cacheMissBilling" in body) {
1195
+ const parsedCacheMissBilling = parseCacheMissBilling(body.cacheMissBilling);
1196
+ if (parsedCacheMissBilling === null) {
1197
+ return c.json({
1198
+ error: "cacheMissBilling must use booleans for enabled/showToasts, freshness windows 1-1440, and minimumInputTokens 1-5000000",
1199
+ }, 400);
1200
+ }
1201
+ updates.cacheMissBilling = parsedCacheMissBilling;
1202
+ }
459
1203
  if (typeof body.lifecycleWebhooksEnabled === "boolean") {
460
1204
  updates.lifecycleWebhooksEnabled = body.lifecycleWebhooksEnabled;
461
1205
  }
@@ -503,6 +1247,9 @@ export function createSettingsRoutes(deps) {
503
1247
  if ("allowedHosts" in updates && onAllowedHostsChanged) {
504
1248
  onAllowedHostsChanged(settings.allowedHosts);
505
1249
  }
1250
+ if ("fileAccess" in updates && onFileAccessChanged) {
1251
+ onFileAccessChanged(settings.fileAccess);
1252
+ }
506
1253
  if ("persistRemoteSessionsToDisk" in updates &&
507
1254
  onRemoteSessionPersistenceChanged) {
508
1255
  await onRemoteSessionPersistenceChanged(settings.persistRemoteSessionsToDisk);
@@ -517,8 +1264,7 @@ export function createSettingsRoutes(deps) {
517
1264
  onOllamaUseFullSystemPromptChanged) {
518
1265
  onOllamaUseFullSystemPromptChanged(settings.ollamaUseFullSystemPrompt ?? false);
519
1266
  }
520
- if ("grokBuildUseXaiApiKey" in updates &&
521
- onGrokBuildUseXaiApiKeyChanged) {
1267
+ if ("grokBuildUseXaiApiKey" in updates && onGrokBuildUseXaiApiKeyChanged) {
522
1268
  onGrokBuildUseXaiApiKeyChanged(settings.grokBuildUseXaiApiKey ?? false);
523
1269
  }
524
1270
  if (updates.publicSharesEnabled === false && publicShareService) {