@qduc/term2 0.15.0 → 0.16.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 (587) hide show
  1. package/README.md +324 -316
  2. package/dist/agent.d.ts +3 -0
  3. package/dist/agent.d.ts.map +1 -1
  4. package/dist/agent.js +15 -63
  5. package/dist/agent.js.map +1 -1
  6. package/dist/app.d.ts +1 -1
  7. package/dist/app.d.ts.map +1 -1
  8. package/dist/app.js +129 -19
  9. package/dist/app.js.map +1 -1
  10. package/dist/cli.js +25 -16
  11. package/dist/cli.js.map +1 -1
  12. package/dist/commands/compact-command.d.ts.map +1 -1
  13. package/dist/commands/compact-command.js +4 -0
  14. package/dist/commands/compact-command.js.map +1 -1
  15. package/dist/commands/effort-command.js +1 -1
  16. package/dist/commands/effort-command.js.map +1 -1
  17. package/dist/commands/guarded-settings-command.d.ts.map +1 -1
  18. package/dist/commands/guarded-settings-command.js +4 -8
  19. package/dist/commands/guarded-settings-command.js.map +1 -1
  20. package/dist/commands/model-command.js +1 -1
  21. package/dist/commands/model-command.js.map +1 -1
  22. package/dist/commands/resume-command.d.ts +10 -0
  23. package/dist/commands/resume-command.d.ts.map +1 -0
  24. package/dist/commands/resume-command.js +40 -0
  25. package/dist/commands/resume-command.js.map +1 -0
  26. package/dist/components/ErrorBoundary.d.ts.map +1 -1
  27. package/dist/components/ErrorBoundary.js +5 -4
  28. package/dist/components/ErrorBoundary.js.map +1 -1
  29. package/dist/components/InputBox.d.ts +2 -0
  30. package/dist/components/InputBox.d.ts.map +1 -1
  31. package/dist/components/InputBox.js +56 -18
  32. package/dist/components/InputBox.js.map +1 -1
  33. package/dist/components/MarkdownRenderer.d.ts.map +1 -1
  34. package/dist/components/MarkdownRenderer.js +16 -15
  35. package/dist/components/MarkdownRenderer.js.map +1 -1
  36. package/dist/components/common/MenuContainer.d.ts +25 -2
  37. package/dist/components/common/MenuContainer.d.ts.map +1 -1
  38. package/dist/components/common/MenuContainer.js +35 -11
  39. package/dist/components/common/MenuContainer.js.map +1 -1
  40. package/dist/components/common/ScrollableTabBar.d.ts.map +1 -1
  41. package/dist/components/common/ScrollableTabBar.js +5 -4
  42. package/dist/components/common/ScrollableTabBar.js.map +1 -1
  43. package/dist/components/input/ApplicationInputSurface.d.ts +4 -5
  44. package/dist/components/input/ApplicationInputSurface.d.ts.map +1 -1
  45. package/dist/components/input/ApplicationInputSurface.js.map +1 -1
  46. package/dist/components/input/FirstRunSetupPrompt.d.ts.map +1 -1
  47. package/dist/components/input/FirstRunSetupPrompt.js +5 -4
  48. package/dist/components/input/FirstRunSetupPrompt.js.map +1 -1
  49. package/dist/components/input/MenuSurface.d.ts.map +1 -1
  50. package/dist/components/input/MenuSurface.js +10 -3
  51. package/dist/components/input/MenuSurface.js.map +1 -1
  52. package/dist/components/input/ModelMenuSession.d.ts.map +1 -1
  53. package/dist/components/input/ModelMenuSession.js +2 -1
  54. package/dist/components/input/ModelMenuSession.js.map +1 -1
  55. package/dist/components/input/PendingQueueList.d.ts +2 -0
  56. package/dist/components/input/PendingQueueList.d.ts.map +1 -1
  57. package/dist/components/input/PendingQueueList.js +17 -14
  58. package/dist/components/input/PendingQueueList.js.map +1 -1
  59. package/dist/components/input/SettingsValueMenuSession.d.ts.map +1 -1
  60. package/dist/components/input/SettingsValueMenuSession.js +2 -1
  61. package/dist/components/input/SettingsValueMenuSession.js.map +1 -1
  62. package/dist/components/layout/BackgroundTaskManager.d.ts.map +1 -1
  63. package/dist/components/layout/BackgroundTaskManager.js +12 -11
  64. package/dist/components/layout/BackgroundTaskManager.js.map +1 -1
  65. package/dist/components/layout/BackgroundTasksPanel.d.ts +2 -2
  66. package/dist/components/layout/BackgroundTasksPanel.d.ts.map +1 -1
  67. package/dist/components/layout/BackgroundTasksPanel.js +10 -9
  68. package/dist/components/layout/BackgroundTasksPanel.js.map +1 -1
  69. package/dist/components/layout/Banner.d.ts +0 -1
  70. package/dist/components/layout/Banner.d.ts.map +1 -1
  71. package/dist/components/layout/Banner.js +43 -73
  72. package/dist/components/layout/Banner.js.map +1 -1
  73. package/dist/components/layout/BottomArea.d.ts +6 -5
  74. package/dist/components/layout/BottomArea.d.ts.map +1 -1
  75. package/dist/components/layout/BottomArea.js +17 -9
  76. package/dist/components/layout/BottomArea.js.map +1 -1
  77. package/dist/components/layout/DiffView.js +5 -5
  78. package/dist/components/layout/DiffView.js.map +1 -1
  79. package/dist/components/layout/StatusBar.d.ts +4 -1
  80. package/dist/components/layout/StatusBar.d.ts.map +1 -1
  81. package/dist/components/layout/StatusBar.js +305 -95
  82. package/dist/components/layout/StatusBar.js.map +1 -1
  83. package/dist/components/layout/background-task-clock.d.ts +43 -0
  84. package/dist/components/layout/background-task-clock.d.ts.map +1 -0
  85. package/dist/components/layout/background-task-clock.js +46 -0
  86. package/dist/components/layout/background-task-clock.js.map +1 -0
  87. package/dist/components/menu/CopyMenu.d.ts.map +1 -1
  88. package/dist/components/menu/CopyMenu.js +4 -3
  89. package/dist/components/menu/CopyMenu.js.map +1 -1
  90. package/dist/components/menu/MentorPoolSelectionMenu.d.ts.map +1 -1
  91. package/dist/components/menu/MentorPoolSelectionMenu.js +28 -21
  92. package/dist/components/menu/MentorPoolSelectionMenu.js.map +1 -1
  93. package/dist/components/menu/ModelSelectionMenu.d.ts.map +1 -1
  94. package/dist/components/menu/ModelSelectionMenu.js +26 -13
  95. package/dist/components/menu/ModelSelectionMenu.js.map +1 -1
  96. package/dist/components/menu/PathSelectionMenu.d.ts.map +1 -1
  97. package/dist/components/menu/PathSelectionMenu.js +4 -3
  98. package/dist/components/menu/PathSelectionMenu.js.map +1 -1
  99. package/dist/components/menu/ProviderSelectionMenu.d.ts.map +1 -1
  100. package/dist/components/menu/ProviderSelectionMenu.js +46 -26
  101. package/dist/components/menu/ProviderSelectionMenu.js.map +1 -1
  102. package/dist/components/menu/RewindMenu.d.ts.map +1 -1
  103. package/dist/components/menu/RewindMenu.js +4 -3
  104. package/dist/components/menu/RewindMenu.js.map +1 -1
  105. package/dist/components/menu/SettingsSelectionMenu.d.ts.map +1 -1
  106. package/dist/components/menu/SettingsSelectionMenu.js +26 -26
  107. package/dist/components/menu/SettingsSelectionMenu.js.map +1 -1
  108. package/dist/components/menu/SettingsValueSelectionMenu.d.ts.map +1 -1
  109. package/dist/components/menu/SettingsValueSelectionMenu.js +22 -20
  110. package/dist/components/menu/SettingsValueSelectionMenu.js.map +1 -1
  111. package/dist/components/menu/SkillSelectionMenu.d.ts.map +1 -1
  112. package/dist/components/menu/SkillSelectionMenu.js +33 -23
  113. package/dist/components/menu/SkillSelectionMenu.js.map +1 -1
  114. package/dist/components/menu/SlashCommandMenu.d.ts.map +1 -1
  115. package/dist/components/menu/SlashCommandMenu.js +11 -6
  116. package/dist/components/menu/SlashCommandMenu.js.map +1 -1
  117. package/dist/components/message/ChatMessage.js +2 -2
  118. package/dist/components/message/ChatMessage.js.map +1 -1
  119. package/dist/components/message/CodeContextSearchRenderer.d.ts.map +1 -1
  120. package/dist/components/message/CodeContextSearchRenderer.js +8 -11
  121. package/dist/components/message/CodeContextSearchRenderer.js.map +1 -1
  122. package/dist/components/message/CommandGroupSummary.d.ts.map +1 -1
  123. package/dist/components/message/CommandGroupSummary.js +15 -7
  124. package/dist/components/message/CommandGroupSummary.js.map +1 -1
  125. package/dist/components/message/CommandMessage.d.ts.map +1 -1
  126. package/dist/components/message/CommandMessage.js +111 -91
  127. package/dist/components/message/CommandMessage.js.map +1 -1
  128. package/dist/components/message/GrepRenderer.d.ts.map +1 -1
  129. package/dist/components/message/GrepRenderer.js +5 -8
  130. package/dist/components/message/GrepRenderer.js.map +1 -1
  131. package/dist/components/message/MemoryRenderer.d.ts +1 -0
  132. package/dist/components/message/MemoryRenderer.d.ts.map +1 -1
  133. package/dist/components/message/MemoryRenderer.js +19 -17
  134. package/dist/components/message/MemoryRenderer.js.map +1 -1
  135. package/dist/components/message/MessageList.d.ts +1 -2
  136. package/dist/components/message/MessageList.d.ts.map +1 -1
  137. package/dist/components/message/MessageList.js +12 -11
  138. package/dist/components/message/MessageList.js.map +1 -1
  139. package/dist/components/message/ReadFileRenderer.d.ts.map +1 -1
  140. package/dist/components/message/ReadFileRenderer.js +5 -6
  141. package/dist/components/message/ReadFileRenderer.js.map +1 -1
  142. package/dist/components/message/SubagentActivityMessage.d.ts.map +1 -1
  143. package/dist/components/message/SubagentActivityMessage.js +17 -13
  144. package/dist/components/message/SubagentActivityMessage.js.map +1 -1
  145. package/dist/components/message/WebFetchRenderer.d.ts.map +1 -1
  146. package/dist/components/message/WebFetchRenderer.js +7 -11
  147. package/dist/components/message/WebFetchRenderer.js.map +1 -1
  148. package/dist/components/message/WebSearchRenderer.d.ts.map +1 -1
  149. package/dist/components/message/WebSearchRenderer.js +5 -10
  150. package/dist/components/message/WebSearchRenderer.js.map +1 -1
  151. package/dist/components/message/command-grouping.d.ts +29 -6
  152. package/dist/components/message/command-grouping.d.ts.map +1 -1
  153. package/dist/components/message/command-grouping.js +62 -20
  154. package/dist/components/message/command-grouping.js.map +1 -1
  155. package/dist/components/message/command-message-helpers.d.ts +5 -32
  156. package/dist/components/message/command-message-helpers.d.ts.map +1 -1
  157. package/dist/components/message/command-message-helpers.js +26 -8
  158. package/dist/components/message/command-message-helpers.js.map +1 -1
  159. package/dist/components/message/useCommandVisibility.d.ts.map +1 -1
  160. package/dist/components/message/useCommandVisibility.js +5 -4
  161. package/dist/components/message/useCommandVisibility.js.map +1 -1
  162. package/dist/components/prompt/ApprovalPrompt.d.ts.map +1 -1
  163. package/dist/components/prompt/ApprovalPrompt.js +190 -106
  164. package/dist/components/prompt/ApprovalPrompt.js.map +1 -1
  165. package/dist/components/prompt/HandoffConfirmationPrompt.d.ts.map +1 -1
  166. package/dist/components/prompt/HandoffConfirmationPrompt.js +3 -2
  167. package/dist/components/prompt/HandoffConfirmationPrompt.js.map +1 -1
  168. package/dist/components/prompt/InputSurgeConfirmationPrompt.d.ts.map +1 -1
  169. package/dist/components/prompt/InputSurgeConfirmationPrompt.js +5 -4
  170. package/dist/components/prompt/InputSurgeConfirmationPrompt.js.map +1 -1
  171. package/dist/components/prompt/LargeUncachedConfirmationPrompt.d.ts.map +1 -1
  172. package/dist/components/prompt/LargeUncachedConfirmationPrompt.js +4 -3
  173. package/dist/components/prompt/LargeUncachedConfirmationPrompt.js.map +1 -1
  174. package/dist/components/prompt/ModeSwitchConfirmationPrompt.d.ts.map +1 -1
  175. package/dist/components/prompt/ModeSwitchConfirmationPrompt.js +4 -3
  176. package/dist/components/prompt/ModeSwitchConfirmationPrompt.js.map +1 -1
  177. package/dist/components/prompt/QueuePausedPrompt.d.ts.map +1 -1
  178. package/dist/components/prompt/QueuePausedPrompt.js +6 -5
  179. package/dist/components/prompt/QueuePausedPrompt.js.map +1 -1
  180. package/dist/components/prompt/StandardModeConfirmationPrompt.d.ts.map +1 -1
  181. package/dist/components/prompt/StandardModeConfirmationPrompt.js +3 -2
  182. package/dist/components/prompt/StandardModeConfirmationPrompt.js.map +1 -1
  183. package/dist/components/theme.d.ts +58 -3
  184. package/dist/components/theme.d.ts.map +1 -1
  185. package/dist/components/theme.js +84 -17
  186. package/dist/components/theme.js.map +1 -1
  187. package/dist/contracts/application-stream.d.ts +14 -0
  188. package/dist/contracts/application-stream.d.ts.map +1 -1
  189. package/dist/gateway/assertion.d.ts +4 -1
  190. package/dist/gateway/assertion.d.ts.map +1 -1
  191. package/dist/gateway/assertion.js +24 -2
  192. package/dist/gateway/assertion.js.map +1 -1
  193. package/dist/gateway/contracts.d.ts +21 -4
  194. package/dist/gateway/contracts.d.ts.map +1 -1
  195. package/dist/gateway/contracts.js +11 -0
  196. package/dist/gateway/contracts.js.map +1 -1
  197. package/dist/gateway/dynamic-workspace-registry.d.ts +76 -0
  198. package/dist/gateway/dynamic-workspace-registry.d.ts.map +1 -0
  199. package/dist/gateway/dynamic-workspace-registry.js +403 -0
  200. package/dist/gateway/dynamic-workspace-registry.js.map +1 -0
  201. package/dist/gateway/gateway.d.ts +24 -1
  202. package/dist/gateway/gateway.d.ts.map +1 -1
  203. package/dist/gateway/gateway.js +704 -21
  204. package/dist/gateway/gateway.js.map +1 -1
  205. package/dist/gateway/launcher-seam.d.ts +18 -0
  206. package/dist/gateway/launcher-seam.d.ts.map +1 -0
  207. package/dist/gateway/launcher-seam.js +43 -0
  208. package/dist/gateway/launcher-seam.js.map +1 -0
  209. package/dist/gateway/pairing.d.ts +25 -0
  210. package/dist/gateway/pairing.d.ts.map +1 -0
  211. package/dist/gateway/pairing.js +107 -0
  212. package/dist/gateway/pairing.js.map +1 -0
  213. package/dist/gateway/persistence/coordinator.d.ts +2 -0
  214. package/dist/gateway/persistence/coordinator.d.ts.map +1 -1
  215. package/dist/gateway/persistence/coordinator.js +13 -0
  216. package/dist/gateway/persistence/coordinator.js.map +1 -1
  217. package/dist/gateway/runtime-factory.d.ts +15 -6
  218. package/dist/gateway/runtime-factory.d.ts.map +1 -1
  219. package/dist/gateway/runtime-factory.js +38 -9
  220. package/dist/gateway/runtime-factory.js.map +1 -1
  221. package/dist/gateway/safe-log.d.ts.map +1 -1
  222. package/dist/gateway/safe-log.js +19 -0
  223. package/dist/gateway/safe-log.js.map +1 -1
  224. package/dist/gateway/server-session.d.ts.map +1 -1
  225. package/dist/gateway/server-session.js +36 -4
  226. package/dist/gateway/server-session.js.map +1 -1
  227. package/dist/gateway/server.d.ts +26 -3
  228. package/dist/gateway/server.d.ts.map +1 -1
  229. package/dist/gateway/server.js +105 -17
  230. package/dist/gateway/server.js.map +1 -1
  231. package/dist/gateway/settings-rpc.d.ts +95 -0
  232. package/dist/gateway/settings-rpc.d.ts.map +1 -0
  233. package/dist/gateway/settings-rpc.js +227 -0
  234. package/dist/gateway/settings-rpc.js.map +1 -0
  235. package/dist/gateway/trusted-clients.d.ts +27 -0
  236. package/dist/gateway/trusted-clients.d.ts.map +1 -0
  237. package/dist/gateway/trusted-clients.js +157 -0
  238. package/dist/gateway/trusted-clients.js.map +1 -0
  239. package/dist/gateway/worker-boundary.d.ts +6 -5
  240. package/dist/gateway/worker-boundary.d.ts.map +1 -1
  241. package/dist/gateway/worker-boundary.js +20 -10
  242. package/dist/gateway/worker-boundary.js.map +1 -1
  243. package/dist/gateway/workspace-admission.d.ts +11 -0
  244. package/dist/gateway/workspace-admission.d.ts.map +1 -1
  245. package/dist/gateway/workspace-admission.js +89 -16
  246. package/dist/gateway/workspace-admission.js.map +1 -1
  247. package/dist/gateway/workspace-boundary-probe.d.ts +18 -0
  248. package/dist/gateway/workspace-boundary-probe.d.ts.map +1 -0
  249. package/dist/gateway/workspace-boundary-probe.js +37 -0
  250. package/dist/gateway/workspace-boundary-probe.js.map +1 -0
  251. package/dist/hooks/conversation-ui-reducer.d.ts +6 -0
  252. package/dist/hooks/conversation-ui-reducer.d.ts.map +1 -1
  253. package/dist/hooks/conversation-ui-reducer.js +9 -1
  254. package/dist/hooks/conversation-ui-reducer.js.map +1 -1
  255. package/dist/hooks/settings-completion-config.d.ts.map +1 -1
  256. package/dist/hooks/settings-completion-config.js +11 -3
  257. package/dist/hooks/settings-completion-config.js.map +1 -1
  258. package/dist/hooks/use-app-commands.d.ts +6 -1
  259. package/dist/hooks/use-app-commands.d.ts.map +1 -1
  260. package/dist/hooks/use-app-commands.js +22 -13
  261. package/dist/hooks/use-app-commands.js.map +1 -1
  262. package/dist/hooks/use-app-keyboard-shortcuts.d.ts +1 -3
  263. package/dist/hooks/use-app-keyboard-shortcuts.d.ts.map +1 -1
  264. package/dist/hooks/use-app-keyboard-shortcuts.js +11 -9
  265. package/dist/hooks/use-app-keyboard-shortcuts.js.map +1 -1
  266. package/dist/hooks/use-conversation.d.ts +8 -0
  267. package/dist/hooks/use-conversation.d.ts.map +1 -1
  268. package/dist/hooks/use-conversation.js +27 -18
  269. package/dist/hooks/use-conversation.js.map +1 -1
  270. package/dist/hooks/use-opencode-go-usage.d.ts +8 -0
  271. package/dist/hooks/use-opencode-go-usage.d.ts.map +1 -0
  272. package/dist/hooks/use-opencode-go-usage.js +45 -0
  273. package/dist/hooks/use-opencode-go-usage.js.map +1 -0
  274. package/dist/hooks/use-shell-mode.d.ts +3 -4
  275. package/dist/hooks/use-shell-mode.d.ts.map +1 -1
  276. package/dist/hooks/use-shell-mode.js +14 -12
  277. package/dist/hooks/use-shell-mode.js.map +1 -1
  278. package/dist/hooks/use-terminal-columns.d.ts +15 -0
  279. package/dist/hooks/use-terminal-columns.d.ts.map +1 -0
  280. package/dist/hooks/use-terminal-columns.js +45 -0
  281. package/dist/hooks/use-terminal-columns.js.map +1 -0
  282. package/dist/lib/agent-client.d.ts +2 -0
  283. package/dist/lib/agent-client.d.ts.map +1 -1
  284. package/dist/lib/agent-client.js +1 -0
  285. package/dist/lib/agent-client.js.map +1 -1
  286. package/dist/lib/agent-configuration.d.ts +3 -0
  287. package/dist/lib/agent-configuration.d.ts.map +1 -1
  288. package/dist/lib/agent-configuration.js +4 -0
  289. package/dist/lib/agent-configuration.js.map +1 -1
  290. package/dist/lib/agent-factory.d.ts +3 -0
  291. package/dist/lib/agent-factory.d.ts.map +1 -1
  292. package/dist/lib/agent-factory.js +9 -2
  293. package/dist/lib/agent-factory.js.map +1 -1
  294. package/dist/lib/harness-input-idle.d.ts.map +1 -1
  295. package/dist/lib/harness-input-idle.js +1 -1
  296. package/dist/lib/harness-input-idle.js.map +1 -1
  297. package/dist/non-interactive.d.ts.map +1 -1
  298. package/dist/non-interactive.js +9 -2
  299. package/dist/non-interactive.js.map +1 -1
  300. package/dist/prompts/approval-model.md +22 -0
  301. package/dist/prompts/gpt-5.6.md +3 -2
  302. package/dist/prompts/mentor-mode-stub.md +3 -0
  303. package/dist/prompts/orchestrator-mode-stub.md +3 -0
  304. package/dist/prompts/prefix-quality.test.ts +10 -0
  305. package/dist/prompts/prompt-constructor.d.ts +2 -0
  306. package/dist/prompts/prompt-constructor.d.ts.map +1 -1
  307. package/dist/prompts/prompt-constructor.js +23 -13
  308. package/dist/prompts/prompt-constructor.js.map +1 -1
  309. package/dist/prompts/prompt-constructor.test.ts +39 -5
  310. package/dist/prompts/prompt-constructor.ts +27 -15
  311. package/dist/prompts/prompt-profiles.d.ts +1 -3
  312. package/dist/prompts/prompt-profiles.d.ts.map +1 -1
  313. package/dist/prompts/prompt-profiles.js +2 -7
  314. package/dist/prompts/prompt-profiles.js.map +1 -1
  315. package/dist/prompts/prompt-profiles.ts +3 -16
  316. package/dist/prompts/session-browser.md +3 -0
  317. package/dist/prompts/subagent-delegation.d.ts +3 -2
  318. package/dist/prompts/subagent-delegation.d.ts.map +1 -1
  319. package/dist/prompts/subagent-delegation.js +9 -13
  320. package/dist/prompts/subagent-delegation.js.map +1 -1
  321. package/dist/prompts/subagent-delegation.ts +9 -13
  322. package/dist/providers/chained-wire-state.d.ts +7 -2
  323. package/dist/providers/chained-wire-state.d.ts.map +1 -1
  324. package/dist/providers/chained-wire-state.js +16 -7
  325. package/dist/providers/chained-wire-state.js.map +1 -1
  326. package/dist/providers/codex-auth.d.ts +2 -5
  327. package/dist/providers/codex-auth.d.ts.map +1 -1
  328. package/dist/providers/codex-auth.js +2 -0
  329. package/dist/providers/codex-auth.js.map +1 -1
  330. package/dist/providers/codex-responses-model.d.ts.map +1 -1
  331. package/dist/providers/codex-responses-model.js +22 -3
  332. package/dist/providers/codex-responses-model.js.map +1 -1
  333. package/dist/providers/grok-auth.d.ts +2 -5
  334. package/dist/providers/grok-auth.d.ts.map +1 -1
  335. package/dist/providers/grok-auth.js +2 -0
  336. package/dist/providers/grok-auth.js.map +1 -1
  337. package/dist/providers/oauth-account-store.d.ts +5 -0
  338. package/dist/providers/oauth-account-store.d.ts.map +1 -1
  339. package/dist/providers/oauth-account-store.js +56 -5
  340. package/dist/providers/oauth-account-store.js.map +1 -1
  341. package/dist/providers/oauth-pkce.d.ts +8 -0
  342. package/dist/providers/oauth-pkce.d.ts.map +1 -1
  343. package/dist/providers/oauth-pkce.js +91 -19
  344. package/dist/providers/oauth-pkce.js.map +1 -1
  345. package/dist/providers/openai-compatible.provider.d.ts.map +1 -1
  346. package/dist/providers/openai-compatible.provider.js +8 -1
  347. package/dist/providers/openai-compatible.provider.js.map +1 -1
  348. package/dist/providers/opencode-go-usage.d.ts +24 -0
  349. package/dist/providers/opencode-go-usage.d.ts.map +1 -0
  350. package/dist/providers/opencode-go-usage.js +37 -0
  351. package/dist/providers/opencode-go-usage.js.map +1 -0
  352. package/dist/providers/openrouter.provider.d.ts.map +1 -1
  353. package/dist/providers/openrouter.provider.js +8 -1
  354. package/dist/providers/openrouter.provider.js.map +1 -1
  355. package/dist/providers/responses-websocket-sessions.d.ts +1 -0
  356. package/dist/providers/responses-websocket-sessions.d.ts.map +1 -1
  357. package/dist/providers/responses-websocket-sessions.js +16 -2
  358. package/dist/providers/responses-websocket-sessions.js.map +1 -1
  359. package/dist/providers/retrying-model.d.ts.map +1 -1
  360. package/dist/providers/retrying-model.js +31 -3
  361. package/dist/providers/retrying-model.js.map +1 -1
  362. package/dist/services/agent-runtime/application-run-loop.d.ts +5 -1
  363. package/dist/services/agent-runtime/application-run-loop.d.ts.map +1 -1
  364. package/dist/services/agent-runtime/application-run-loop.js +229 -149
  365. package/dist/services/agent-runtime/application-run-loop.js.map +1 -1
  366. package/dist/services/agent-runtime/generation-guard.d.ts +39 -25
  367. package/dist/services/agent-runtime/generation-guard.d.ts.map +1 -1
  368. package/dist/services/agent-runtime/generation-guard.js +98 -100
  369. package/dist/services/agent-runtime/generation-guard.js.map +1 -1
  370. package/dist/services/agent-runtime/run-budget.d.ts +1 -1
  371. package/dist/services/agent-runtime/run-budget.d.ts.map +1 -1
  372. package/dist/services/agent-runtime/run-budget.js +4 -0
  373. package/dist/services/agent-runtime/run-budget.js.map +1 -1
  374. package/dist/services/agent-stream.d.ts.map +1 -1
  375. package/dist/services/agent-stream.js +1 -0
  376. package/dist/services/agent-stream.js.map +1 -1
  377. package/dist/services/conversation/conversation-adapter.d.ts +13 -2
  378. package/dist/services/conversation/conversation-adapter.d.ts.map +1 -1
  379. package/dist/services/conversation/conversation-adapter.js +35 -7
  380. package/dist/services/conversation/conversation-adapter.js.map +1 -1
  381. package/dist/services/conversation/conversation-admission-workflow.d.ts +3 -2
  382. package/dist/services/conversation/conversation-admission-workflow.d.ts.map +1 -1
  383. package/dist/services/conversation/conversation-admission-workflow.js +6 -1
  384. package/dist/services/conversation/conversation-admission-workflow.js.map +1 -1
  385. package/dist/services/conversation/conversation-events.d.ts +43 -2
  386. package/dist/services/conversation/conversation-events.d.ts.map +1 -1
  387. package/dist/services/conversation/conversation-orchestrator.d.ts +14 -1
  388. package/dist/services/conversation/conversation-orchestrator.d.ts.map +1 -1
  389. package/dist/services/conversation/conversation-orchestrator.js +142 -11
  390. package/dist/services/conversation/conversation-orchestrator.js.map +1 -1
  391. package/dist/services/conversation/conversation-orchestrator.types.d.ts +3 -1
  392. package/dist/services/conversation/conversation-orchestrator.types.d.ts.map +1 -1
  393. package/dist/services/conversation/conversation-persistence.d.ts +22 -1
  394. package/dist/services/conversation/conversation-persistence.d.ts.map +1 -1
  395. package/dist/services/conversation/conversation-persistence.js +61 -0
  396. package/dist/services/conversation/conversation-persistence.js.map +1 -1
  397. package/dist/services/conversation/conversation-service.d.ts.map +1 -1
  398. package/dist/services/conversation/conversation-service.js +45 -29
  399. package/dist/services/conversation/conversation-service.js.map +1 -1
  400. package/dist/services/conversation/session-audit.d.ts +70 -0
  401. package/dist/services/conversation/session-audit.d.ts.map +1 -0
  402. package/dist/services/conversation/session-audit.js +164 -0
  403. package/dist/services/conversation/session-audit.js.map +1 -0
  404. package/dist/services/conversation/session-browser.d.ts +46 -0
  405. package/dist/services/conversation/session-browser.d.ts.map +1 -0
  406. package/dist/services/conversation/session-browser.js +380 -0
  407. package/dist/services/conversation/session-browser.js.map +1 -0
  408. package/dist/services/input-surge-approval.d.ts +21 -0
  409. package/dist/services/input-surge-approval.d.ts.map +1 -0
  410. package/dist/services/input-surge-approval.js +42 -0
  411. package/dist/services/input-surge-approval.js.map +1 -0
  412. package/dist/services/large-uncached-input-guard.js +4 -4
  413. package/dist/services/large-uncached-input-guard.js.map +1 -1
  414. package/dist/services/logging/assistant-turn-journal.d.ts +15 -0
  415. package/dist/services/logging/assistant-turn-journal.d.ts.map +1 -1
  416. package/dist/services/logging/assistant-turn-journal.js +27 -0
  417. package/dist/services/logging/assistant-turn-journal.js.map +1 -1
  418. package/dist/services/memory/memory-capabilities.js +2 -2
  419. package/dist/services/memory/memory-search.d.ts +16 -0
  420. package/dist/services/memory/memory-search.d.ts.map +1 -0
  421. package/dist/services/memory/memory-search.js +55 -0
  422. package/dist/services/memory/memory-search.js.map +1 -0
  423. package/dist/services/memory/memory-store.d.ts +12 -0
  424. package/dist/services/memory/memory-store.d.ts.map +1 -1
  425. package/dist/services/memory/memory-store.js +14 -35
  426. package/dist/services/memory/memory-store.js.map +1 -1
  427. package/dist/services/mode-notices.d.ts +11 -0
  428. package/dist/services/mode-notices.d.ts.map +1 -1
  429. package/dist/services/mode-notices.js +37 -3
  430. package/dist/services/mode-notices.js.map +1 -1
  431. package/dist/services/queue/queue-controller.d.ts +13 -0
  432. package/dist/services/queue/queue-controller.d.ts.map +1 -1
  433. package/dist/services/queue/queue-controller.js +32 -1
  434. package/dist/services/queue/queue-controller.js.map +1 -1
  435. package/dist/services/retry/in-loop-model-retry.d.ts +12 -0
  436. package/dist/services/retry/in-loop-model-retry.d.ts.map +1 -0
  437. package/dist/services/retry/in-loop-model-retry.js +115 -0
  438. package/dist/services/retry/in-loop-model-retry.js.map +1 -0
  439. package/dist/services/retry/retry-classifier.d.ts.map +1 -1
  440. package/dist/services/retry/retry-classifier.js +18 -12
  441. package/dist/services/retry/retry-classifier.js.map +1 -1
  442. package/dist/services/retry/retry-error-classification.d.ts.map +1 -1
  443. package/dist/services/retry/retry-error-classification.js +10 -6
  444. package/dist/services/retry/retry-error-classification.js.map +1 -1
  445. package/dist/services/retry/upstream-retry-policy.d.ts.map +1 -1
  446. package/dist/services/retry/upstream-retry-policy.js +40 -7
  447. package/dist/services/retry/upstream-retry-policy.js.map +1 -1
  448. package/dist/services/runtime-setting-router.d.ts.map +1 -1
  449. package/dist/services/runtime-setting-router.js +7 -2
  450. package/dist/services/runtime-setting-router.js.map +1 -1
  451. package/dist/services/session/background-check-in-scheduler.d.ts +44 -0
  452. package/dist/services/session/background-check-in-scheduler.d.ts.map +1 -0
  453. package/dist/services/session/background-check-in-scheduler.js +88 -0
  454. package/dist/services/session/background-check-in-scheduler.js.map +1 -0
  455. package/dist/services/session/background-task-control.js +4 -1
  456. package/dist/services/session/background-task-control.js.map +1 -1
  457. package/dist/services/session/initial-input-preparer.d.ts +2 -1
  458. package/dist/services/session/initial-input-preparer.d.ts.map +1 -1
  459. package/dist/services/session/initial-input-preparer.js +3 -1
  460. package/dist/services/session/initial-input-preparer.js.map +1 -1
  461. package/dist/services/session/repetition-detector.d.ts +0 -4
  462. package/dist/services/session/repetition-detector.d.ts.map +1 -1
  463. package/dist/services/session/repetition-detector.js +0 -7
  464. package/dist/services/session/repetition-detector.js.map +1 -1
  465. package/dist/services/session/session-composition.d.ts +6 -2
  466. package/dist/services/session/session-composition.d.ts.map +1 -1
  467. package/dist/services/session/session-composition.js +99 -29
  468. package/dist/services/session/session-composition.js.map +1 -1
  469. package/dist/services/session/session-lifecycle.d.ts +8 -0
  470. package/dist/services/session/session-lifecycle.d.ts.map +1 -1
  471. package/dist/services/session/session-lifecycle.js +4 -0
  472. package/dist/services/session/session-lifecycle.js.map +1 -1
  473. package/dist/services/session/session-stream-processor.d.ts.map +1 -1
  474. package/dist/services/session/session-stream-processor.js +5 -15
  475. package/dist/services/session/session-stream-processor.js.map +1 -1
  476. package/dist/services/session/turn-attempt-factory.d.ts +2 -1
  477. package/dist/services/session/turn-attempt-factory.d.ts.map +1 -1
  478. package/dist/services/session/turn-attempt-factory.js +1 -0
  479. package/dist/services/session/turn-attempt-factory.js.map +1 -1
  480. package/dist/services/session/turn-attempt.d.ts +3 -0
  481. package/dist/services/session/turn-attempt.d.ts.map +1 -1
  482. package/dist/services/session/turn-attempt.js +5 -0
  483. package/dist/services/session/turn-attempt.js.map +1 -1
  484. package/dist/services/session/turn-coordinator.d.ts +1 -1
  485. package/dist/services/session/turn-coordinator.d.ts.map +1 -1
  486. package/dist/services/session/turn-workflow.d.ts.map +1 -1
  487. package/dist/services/session/turn-workflow.js +4 -1
  488. package/dist/services/session/turn-workflow.js.map +1 -1
  489. package/dist/services/settings/settings-schema.d.ts +27 -3
  490. package/dist/services/settings/settings-schema.d.ts.map +1 -1
  491. package/dist/services/settings/settings-schema.js +35 -11
  492. package/dist/services/settings/settings-schema.js.map +1 -1
  493. package/dist/services/settings/settings-service.d.ts +9 -0
  494. package/dist/services/settings/settings-service.d.ts.map +1 -1
  495. package/dist/services/settings/settings-service.js +40 -0
  496. package/dist/services/settings/settings-service.js.map +1 -1
  497. package/dist/services/settings/settings-sources.d.ts.map +1 -1
  498. package/dist/services/settings/settings-sources.js +5 -0
  499. package/dist/services/settings/settings-sources.js.map +1 -1
  500. package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts +2 -1
  501. package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts.map +1 -1
  502. package/dist/services/settings/test-helpers/settings-consumer-inventory.js +6 -0
  503. package/dist/services/settings/test-helpers/settings-consumer-inventory.js.map +1 -1
  504. package/dist/services/shell/shell-interaction-session.d.ts +4 -5
  505. package/dist/services/shell/shell-interaction-session.d.ts.map +1 -1
  506. package/dist/services/shell/shell-interaction-session.js +8 -20
  507. package/dist/services/shell/shell-interaction-session.js.map +1 -1
  508. package/dist/services/stream-event-processor.d.ts.map +1 -1
  509. package/dist/services/stream-event-processor.js +15 -0
  510. package/dist/services/stream-event-processor.js.map +1 -1
  511. package/dist/services/subagents/mentor-runner.d.ts.map +1 -1
  512. package/dist/services/subagents/mentor-runner.js +2 -0
  513. package/dist/services/subagents/mentor-runner.js.map +1 -1
  514. package/dist/services/subagents/nested-runner.d.ts.map +1 -1
  515. package/dist/services/subagents/nested-runner.js +34 -1
  516. package/dist/services/subagents/nested-runner.js.map +1 -1
  517. package/dist/services/subagents/subagent-async-registry.js +1 -1
  518. package/dist/services/subagents/subagent-async-registry.js.map +1 -1
  519. package/dist/services/subagents/subagent-notification-store.d.ts +28 -1
  520. package/dist/services/subagents/subagent-notification-store.d.ts.map +1 -1
  521. package/dist/services/subagents/subagent-notification-store.js +11 -0
  522. package/dist/services/subagents/subagent-notification-store.js.map +1 -1
  523. package/dist/services/subagents/tool-policy.d.ts.map +1 -1
  524. package/dist/services/subagents/tool-policy.js +10 -5
  525. package/dist/services/subagents/tool-policy.js.map +1 -1
  526. package/dist/services/subagents/utils.d.ts +2 -0
  527. package/dist/services/subagents/utils.d.ts.map +1 -1
  528. package/dist/services/subagents/utils.js +29 -0
  529. package/dist/services/subagents/utils.js.map +1 -1
  530. package/dist/services/tool-execution-ledger.d.ts.map +1 -1
  531. package/dist/services/tool-execution-ledger.js +5 -1
  532. package/dist/services/tool-execution-ledger.js.map +1 -1
  533. package/dist/tools/agent/ask-user.d.ts.map +1 -1
  534. package/dist/tools/agent/ask-user.js +2 -0
  535. package/dist/tools/agent/ask-user.js.map +1 -1
  536. package/dist/tools/agent/run-subagent.d.ts.map +1 -1
  537. package/dist/tools/agent/run-subagent.js +40 -24
  538. package/dist/tools/agent/run-subagent.js.map +1 -1
  539. package/dist/tools/memory/memory-tools.d.ts.map +1 -1
  540. package/dist/tools/memory/memory-tools.js +322 -59
  541. package/dist/tools/memory/memory-tools.js.map +1 -1
  542. package/dist/tools/session-browser/session-browser-tools.d.ts +4 -0
  543. package/dist/tools/session-browser/session-browser-tools.d.ts.map +1 -0
  544. package/dist/tools/session-browser/session-browser-tools.js +47 -0
  545. package/dist/tools/session-browser/session-browser-tools.js.map +1 -0
  546. package/dist/tools/system/shell.d.ts.map +1 -1
  547. package/dist/tools/system/shell.js +7 -0
  548. package/dist/tools/system/shell.js.map +1 -1
  549. package/dist/tools/types.d.ts +4 -0
  550. package/dist/tools/types.d.ts.map +1 -1
  551. package/dist/tools/types.js.map +1 -1
  552. package/dist/utils/busy-turn-guard.d.ts +17 -0
  553. package/dist/utils/busy-turn-guard.d.ts.map +1 -0
  554. package/dist/utils/busy-turn-guard.js +24 -0
  555. package/dist/utils/busy-turn-guard.js.map +1 -0
  556. package/dist/utils/conversation/conversation-event-handler.d.ts.map +1 -1
  557. package/dist/utils/conversation/conversation-event-handler.js +28 -7
  558. package/dist/utils/conversation/conversation-event-handler.js.map +1 -1
  559. package/dist/utils/output/bounded-json.d.ts +33 -0
  560. package/dist/utils/output/bounded-json.d.ts.map +1 -0
  561. package/dist/utils/output/bounded-json.js +59 -0
  562. package/dist/utils/output/bounded-json.js.map +1 -0
  563. package/dist/utils/output/output-trim.d.ts.map +1 -1
  564. package/dist/utils/output/output-trim.js +7 -7
  565. package/dist/utils/output/output-trim.js.map +1 -1
  566. package/dist/utils/output/text-snippet.d.ts +6 -0
  567. package/dist/utils/output/text-snippet.d.ts.map +1 -0
  568. package/dist/utils/output/text-snippet.js +106 -0
  569. package/dist/utils/output/text-snippet.js.map +1 -0
  570. package/dist/utils/resume-list.d.ts +3 -1
  571. package/dist/utils/resume-list.d.ts.map +1 -1
  572. package/dist/utils/resume-list.js +3 -2
  573. package/dist/utils/resume-list.js.map +1 -1
  574. package/dist/utils/settings-command.d.ts.map +1 -1
  575. package/dist/utils/settings-command.js +15 -0
  576. package/dist/utils/settings-command.js.map +1 -1
  577. package/dist/utils/shell/sandbox/sandbox-policy.d.ts +2 -0
  578. package/dist/utils/shell/sandbox/sandbox-policy.d.ts.map +1 -1
  579. package/dist/utils/shell/sandbox/sandbox-policy.js.map +1 -1
  580. package/dist/utils/shell/sandbox/shell-sandbox-runner.d.ts +1 -0
  581. package/dist/utils/shell/sandbox/shell-sandbox-runner.d.ts.map +1 -1
  582. package/dist/utils/shell/sandbox/shell-sandbox-runner.js +20 -1
  583. package/dist/utils/shell/sandbox/shell-sandbox-runner.js.map +1 -1
  584. package/dist/utils/value-suggestions.d.ts.map +1 -1
  585. package/dist/utils/value-suggestions.js +1 -0
  586. package/dist/utils/value-suggestions.js.map +1 -1
  587. package/package.json +4 -2
@@ -0,0 +1,403 @@
1
+ import { constants, accessSync, readdirSync, realpathSync, statSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import { randomUUID } from 'node:crypto';
4
+ import { ExecutionContext } from '../services/execution-context.js';
5
+ import { WorkspaceAdmissionError } from './workspace-admission.js';
6
+ export class DynamicWorkspaceRegistryError extends Error {
7
+ code;
8
+ constructor(code) {
9
+ super('dynamic workspace registry rejected the request');
10
+ this.name = 'DynamicWorkspaceRegistryError';
11
+ this.code = code;
12
+ }
13
+ }
14
+ const OPAQUE_ID = /^[A-Za-z0-9_-]{1,256}$/;
15
+ const DEFAULT_TTL_MS = 5 * 60_000;
16
+ const DEFAULT_MAX_CANDIDATES = 128;
17
+ const DEFAULT_MAX_CANDIDATES_PER_OWNER = 16;
18
+ const DEFAULT_MAX_BROWSE_ENTRIES = 256;
19
+ export class DynamicWorkspaceRegistry {
20
+ #admission;
21
+ #allowedRoots;
22
+ #candidateTtlMs;
23
+ #maxCandidates;
24
+ #maxCandidatesPerOwner;
25
+ #maxRegistryEntries;
26
+ #browseTokenTtlMs;
27
+ #maxBrowseEntries;
28
+ #now;
29
+ #fs;
30
+ #candidates = new Map();
31
+ #browseTokens = new Map();
32
+ constructor(options) {
33
+ this.#admission = options.admission;
34
+ this.#allowedRoots = Object.freeze(options.allowedRoots.map((root) => canonicalRoot(root)));
35
+ this.#candidateTtlMs = positiveBound(options.candidateTtlMs ?? DEFAULT_TTL_MS, 'candidateTtlMs');
36
+ this.#maxCandidates = positiveBound(options.maxCandidates ?? DEFAULT_MAX_CANDIDATES, 'maxCandidates');
37
+ this.#maxCandidatesPerOwner = positiveBound(options.maxCandidatesPerOwner ?? Math.min(DEFAULT_MAX_CANDIDATES_PER_OWNER, this.#maxCandidates), 'maxCandidatesPerOwner');
38
+ this.#maxRegistryEntries = positiveBound(options.maxRegistryEntries ?? Math.max(this.#maxCandidates, this.#maxCandidates * 8), 'maxRegistryEntries');
39
+ this.#browseTokenTtlMs = positiveBound(options.browseTokenTtlMs ?? this.#candidateTtlMs, 'browseTokenTtlMs');
40
+ this.#maxBrowseEntries = positiveBound(options.maxBrowseEntries ?? DEFAULT_MAX_BROWSE_ENTRIES, 'maxBrowseEntries');
41
+ this.#now = options.now ?? Date.now;
42
+ this.#fs = options.fs ?? { realpathSync, statSync, accessSync, readdirSync };
43
+ }
44
+ get admission() {
45
+ return this.#admission;
46
+ }
47
+ get candidateCount() {
48
+ this.#pruneExpired();
49
+ return this.#candidates.size;
50
+ }
51
+ get browseTokenCount() {
52
+ this.#pruneExpired();
53
+ return this.#browseTokens.size;
54
+ }
55
+ validateCandidate(candidatePath, ownerUserId = 'local-owner') {
56
+ const checks = [];
57
+ if (!ownerUserId || typeof candidatePath !== 'string' || !candidatePath || candidatePath.includes('\u0000')) {
58
+ return invalid(checks, 'workspace_root_unavailable', 'The workspace path is invalid.');
59
+ }
60
+ if (!path.isAbsolute(candidatePath)) {
61
+ checks.push({ name: 'absolute', status: 'error' });
62
+ return invalid(checks, 'workspace_root_unavailable', 'The workspace path must be absolute.');
63
+ }
64
+ checks.push({ name: 'absolute', status: 'ok' });
65
+ let canonical;
66
+ try {
67
+ const initialStat = this.#fs.statSync(candidatePath);
68
+ checks.push({ name: 'exists', status: 'ok' });
69
+ if (!initialStat.isDirectory()) {
70
+ checks.push({ name: 'directory', status: 'error' });
71
+ return invalid(checks, 'workspace_root_unavailable', 'The selected path is not a directory.');
72
+ }
73
+ checks.push({ name: 'directory', status: 'ok' });
74
+ }
75
+ catch {
76
+ checks.push({ name: 'exists', status: 'error' });
77
+ return invalid(checks, 'workspace_root_unavailable', 'The workspace folder is unavailable.');
78
+ }
79
+ try {
80
+ canonical = this.#fs.realpathSync(candidatePath);
81
+ checks.push({ name: 'canonical', status: 'ok' });
82
+ }
83
+ catch {
84
+ checks.push({ name: 'canonical', status: 'error' });
85
+ return invalid(checks, 'workspace_root_not_canonical', 'The workspace path could not be canonicalized.');
86
+ }
87
+ try {
88
+ this.#fs.accessSync(canonical, constants.R_OK | constants.X_OK);
89
+ checks.push({ name: 'readable', status: 'ok' });
90
+ }
91
+ catch {
92
+ checks.push({ name: 'readable', status: 'error' });
93
+ return invalid(checks, 'workspace_not_readable', 'The local user cannot read this folder.');
94
+ }
95
+ if (!this.#isContainedByAllowedRoot(canonical)) {
96
+ checks.push({ name: 'contained', status: 'error' });
97
+ return invalid(checks, 'workspace_path_escape', 'The selected folder is outside the allowed workspace roots.');
98
+ }
99
+ checks.push({ name: 'contained', status: 'ok' });
100
+ this.#pruneExpired();
101
+ const ownerCandidates = [...this.#candidates.values()].filter((candidate) => candidate.ownerUserId === ownerUserId);
102
+ if (this.#candidates.size >= this.#maxCandidates ||
103
+ ownerCandidates.length >= this.#maxCandidatesPerOwner ||
104
+ this.#registryEntryCount() >= this.#maxRegistryEntries) {
105
+ return invalid(checks, 'candidate_registry_full', 'Too many workspace selections are pending.');
106
+ }
107
+ const candidateId = opaqueId();
108
+ const record = {
109
+ candidateId,
110
+ ownerUserId,
111
+ canonicalRoot: canonical,
112
+ displayName: path.basename(canonical) || canonical,
113
+ expiresAt: this.#now() + this.#candidateTtlMs,
114
+ };
115
+ this.#candidates.set(candidateId, record);
116
+ return {
117
+ valid: true,
118
+ candidateId,
119
+ displayName: record.displayName,
120
+ expiresAt: record.expiresAt,
121
+ checks,
122
+ };
123
+ }
124
+ browse(candidateId, childToken, ownerUserId = 'local-owner') {
125
+ const candidate = this.#candidateFor(candidateId, ownerUserId);
126
+ const parent = childToken ? this.#browsePath(childToken, candidate) : this.#revalidate(candidate);
127
+ this.#assertReadableDirectory(parent);
128
+ let entries;
129
+ try {
130
+ entries = this.#fs
131
+ .readdirSync(parent, { withFileTypes: true })
132
+ .sort((a, b) => a.name.localeCompare(b.name))
133
+ .map((entry) => this.#browseEntry(candidate, parent, entry));
134
+ }
135
+ catch {
136
+ throw new DynamicWorkspaceRegistryError('workspace_not_readable');
137
+ }
138
+ return {
139
+ candidateId,
140
+ entries: entries.slice(0, this.#maxBrowseEntries),
141
+ truncated: entries.length > this.#maxBrowseEntries,
142
+ };
143
+ }
144
+ select(candidateId, access, ownerUserId = 'local-owner') {
145
+ if (access !== 'read' && access !== 'read_write')
146
+ throw new DynamicWorkspaceRegistryError('workspace_root_unavailable');
147
+ const candidate = this.#candidateFor(candidateId, ownerUserId);
148
+ let canonical;
149
+ try {
150
+ canonical = this.#revalidate(candidate);
151
+ }
152
+ catch (error) {
153
+ this.expire(candidateId);
154
+ throw error;
155
+ }
156
+ const workspaceId = `ws_${opaqueId()}`;
157
+ const grant = {
158
+ workspaceId,
159
+ ownerUserId,
160
+ label: candidate.displayName,
161
+ kind: 'local',
162
+ localRoot: canonical,
163
+ access,
164
+ enabled: true,
165
+ };
166
+ this.#admission.registerDynamicLocalGrant(grant);
167
+ try {
168
+ const binding = this.#admission.prepare({
169
+ iss: 'term2-local-owner',
170
+ aud: 'term2-local-owner',
171
+ sub: ownerUserId,
172
+ purpose: 'session_create',
173
+ iat: 0,
174
+ nbf: 0,
175
+ exp: Number.MAX_SAFE_INTEGER,
176
+ jti: opaqueId(),
177
+ ver: 1,
178
+ workspaceId,
179
+ });
180
+ this.#candidates.delete(candidateId);
181
+ for (const [token, value] of this.#browseTokens) {
182
+ if (value.candidateId === candidateId)
183
+ this.#browseTokens.delete(token);
184
+ }
185
+ return { workspaceId, displayName: candidate.displayName, binding };
186
+ }
187
+ catch (error) {
188
+ this.#admission.removeDynamicLocalGrant(workspaceId);
189
+ if (error instanceof WorkspaceAdmissionError)
190
+ throw error;
191
+ throw new DynamicWorkspaceRegistryError('workspace_root_unavailable');
192
+ }
193
+ }
194
+ expire(candidateId) {
195
+ this.#candidates.delete(candidateId);
196
+ for (const [token, value] of this.#browseTokens) {
197
+ if (value.candidateId === candidateId)
198
+ this.#browseTokens.delete(token);
199
+ }
200
+ }
201
+ pin(binding) {
202
+ return ExecutionContext.pin(binding.canonicalRoot);
203
+ }
204
+ #candidateFor(candidateId, ownerUserId) {
205
+ if (!OPAQUE_ID.test(candidateId))
206
+ throw new DynamicWorkspaceRegistryError('candidate_not_found');
207
+ const candidate = this.#candidates.get(candidateId);
208
+ if (!candidate)
209
+ throw new DynamicWorkspaceRegistryError('candidate_not_found');
210
+ if (candidate.ownerUserId !== ownerUserId)
211
+ throw new DynamicWorkspaceRegistryError('workspace_owner_mismatch');
212
+ if (candidate.expiresAt <= this.#now()) {
213
+ this.expire(candidateId);
214
+ throw new DynamicWorkspaceRegistryError('candidate_expired');
215
+ }
216
+ this.#pruneExpired();
217
+ return candidate;
218
+ }
219
+ #browsePath(token, candidate) {
220
+ if (!OPAQUE_ID.test(token))
221
+ throw new DynamicWorkspaceRegistryError('candidate_not_found');
222
+ const value = this.#browseTokens.get(token);
223
+ if (!value || value.candidateId !== candidate.candidateId || value.ownerUserId !== candidate.ownerUserId)
224
+ throw new DynamicWorkspaceRegistryError('candidate_not_found');
225
+ if (value.expiresAt <= this.#now()) {
226
+ this.#browseTokens.delete(token);
227
+ throw new DynamicWorkspaceRegistryError('candidate_expired');
228
+ }
229
+ let canonical;
230
+ try {
231
+ canonical = this.#revalidate(candidate);
232
+ }
233
+ catch (error) {
234
+ this.#browseTokens.delete(token);
235
+ throw error;
236
+ }
237
+ let currentPath;
238
+ try {
239
+ currentPath = this.#fs.realpathSync(value.canonicalPath);
240
+ }
241
+ catch {
242
+ this.#browseTokens.delete(token);
243
+ throw new DynamicWorkspaceRegistryError('workspace_path_escape');
244
+ }
245
+ if (currentPath !== value.canonicalPath || !isContained(canonical, currentPath)) {
246
+ this.#browseTokens.delete(token);
247
+ throw new DynamicWorkspaceRegistryError('workspace_path_escape');
248
+ }
249
+ this.#assertReadableDirectory(currentPath);
250
+ return currentPath;
251
+ }
252
+ #browseEntry(candidate, parent, entry) {
253
+ const fullPath = path.join(parent, entry.name);
254
+ if (entry.isSymbolicLink()) {
255
+ try {
256
+ const target = this.#fs.realpathSync(fullPath);
257
+ const inside = isContained(candidate.canonicalRoot, target);
258
+ if (!inside) {
259
+ return {
260
+ name: entry.name,
261
+ type: 'symlink',
262
+ selectable: false,
263
+ rejectionReason: 'workspace_path_escape',
264
+ targetDisplay: 'outside-candidate-root',
265
+ };
266
+ }
267
+ if (!this.#fs.statSync(target).isDirectory()) {
268
+ return { name: entry.name, type: 'symlink', selectable: false, rejectionReason: 'workspace_not_directory' };
269
+ }
270
+ return {
271
+ name: entry.name,
272
+ type: 'symlink',
273
+ selectable: true,
274
+ targetDisplay: path.relative(candidate.canonicalRoot, target) || '.',
275
+ childToken: this.#tokenFor(candidate, target),
276
+ };
277
+ }
278
+ catch {
279
+ return { name: entry.name, type: 'symlink', selectable: false, rejectionReason: 'workspace_root_unavailable' };
280
+ }
281
+ }
282
+ if (entry.isDirectory()) {
283
+ try {
284
+ const target = this.#fs.realpathSync(fullPath);
285
+ if (!isContained(candidate.canonicalRoot, target))
286
+ return { name: entry.name, type: 'directory', selectable: false, rejectionReason: 'workspace_path_escape' };
287
+ if (!this.#fs.statSync(target).isDirectory())
288
+ return { name: entry.name, type: 'directory', selectable: false, rejectionReason: 'workspace_not_directory' };
289
+ return { name: entry.name, type: 'directory', selectable: true, childToken: this.#tokenFor(candidate, target) };
290
+ }
291
+ catch {
292
+ return {
293
+ name: entry.name,
294
+ type: 'directory',
295
+ selectable: false,
296
+ rejectionReason: 'workspace_root_unavailable',
297
+ };
298
+ }
299
+ }
300
+ if (entry.isFile())
301
+ return { name: entry.name, type: 'file', selectable: false, rejectionReason: 'workspace_not_directory' };
302
+ return { name: entry.name, type: 'other', selectable: false, rejectionReason: 'workspace_not_directory' };
303
+ }
304
+ #tokenFor(candidate, directory) {
305
+ this.#pruneExpired();
306
+ if (this.#registryEntryCount() >= this.#maxRegistryEntries) {
307
+ this.#evictBrowseToken();
308
+ if (this.#registryEntryCount() >= this.#maxRegistryEntries)
309
+ return undefined;
310
+ }
311
+ const token = opaqueId();
312
+ const now = this.#now();
313
+ this.#browseTokens.set(token, {
314
+ candidateId: candidate.candidateId,
315
+ ownerUserId: candidate.ownerUserId,
316
+ canonicalPath: directory,
317
+ expiresAt: Math.min(candidate.expiresAt, now + this.#browseTokenTtlMs),
318
+ createdAt: now,
319
+ });
320
+ return token;
321
+ }
322
+ #revalidate(candidate) {
323
+ let canonical;
324
+ try {
325
+ canonical = this.#fs.realpathSync(candidate.canonicalRoot);
326
+ if (!this.#fs.statSync(canonical).isDirectory())
327
+ throw new Error();
328
+ this.#fs.accessSync(canonical, constants.R_OK | constants.X_OK);
329
+ }
330
+ catch {
331
+ throw new DynamicWorkspaceRegistryError('workspace_root_unavailable');
332
+ }
333
+ if (canonical !== candidate.canonicalRoot || !this.#isContainedByAllowedRoot(canonical)) {
334
+ throw new DynamicWorkspaceRegistryError('workspace_path_escape');
335
+ }
336
+ return canonical;
337
+ }
338
+ #assertReadableDirectory(directory) {
339
+ try {
340
+ if (!this.#fs.statSync(directory).isDirectory())
341
+ throw new Error();
342
+ this.#fs.accessSync(directory, constants.R_OK | constants.X_OK);
343
+ }
344
+ catch {
345
+ throw new DynamicWorkspaceRegistryError('workspace_not_readable');
346
+ }
347
+ }
348
+ #isContainedByAllowedRoot(candidate) {
349
+ return this.#allowedRoots.some((root) => isContained(root, candidate));
350
+ }
351
+ #pruneExpired() {
352
+ const now = this.#now();
353
+ for (const [id, candidate] of this.#candidates) {
354
+ if (candidate.expiresAt <= now)
355
+ this.expire(id);
356
+ }
357
+ for (const [token, browse] of this.#browseTokens) {
358
+ if (browse.expiresAt <= now || !this.#candidates.has(browse.candidateId))
359
+ this.#browseTokens.delete(token);
360
+ }
361
+ }
362
+ #registryEntryCount() {
363
+ return this.#candidates.size + this.#browseTokens.size;
364
+ }
365
+ #evictBrowseToken() {
366
+ let oldest;
367
+ for (const item of this.#browseTokens.entries()) {
368
+ if (!oldest || item[1].createdAt < oldest[1].createdAt)
369
+ oldest = item;
370
+ }
371
+ if (oldest)
372
+ this.#browseTokens.delete(oldest[0]);
373
+ }
374
+ }
375
+ function canonicalRoot(root) {
376
+ if (!path.isAbsolute(root))
377
+ throw new Error('dynamic workspace allowed roots must be absolute');
378
+ try {
379
+ const resolved = realpathSync(root);
380
+ if (!statSync(resolved).isDirectory())
381
+ throw new Error();
382
+ return resolved;
383
+ }
384
+ catch {
385
+ throw new Error('dynamic workspace allowed root is unavailable');
386
+ }
387
+ }
388
+ function positiveBound(value, name) {
389
+ if (!Number.isSafeInteger(value) || value <= 0)
390
+ throw new Error(`${name} must be a positive integer`);
391
+ return value;
392
+ }
393
+ function opaqueId() {
394
+ return randomUUID().replaceAll('-', '');
395
+ }
396
+ function isContained(root, candidate) {
397
+ const relative = path.relative(root, candidate);
398
+ return relative === '' || (relative !== '..' && !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative));
399
+ }
400
+ function invalid(checks, reasonCode, reason) {
401
+ return { valid: false, checks, reasonCode, reason };
402
+ }
403
+ //# sourceMappingURL=dynamic-workspace-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-workspace-registry.js","sourceRoot":"","sources":["../../source/gateway/dynamic-workspace-registry.ts"],"names":[],"mappings":"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"}
@@ -6,13 +6,20 @@ import type { GatewayAssertionClaims, GatewayManifest, GatewaySafeLogMetadata, P
6
6
  import { GatewayServer } from './server.js';
7
7
  import type { RuntimeFactory } from './runtime-factory.js';
8
8
  import { type PendingInteractionDto, type SessionProjectionSource } from './persistence/projection.js';
9
+ import { type GatewayTlsOptions } from './server.js';
9
10
  import { ServerSession } from './server-session.js';
10
11
  import type { GatewayPersistenceCoordinator } from './persistence/coordinator.js';
12
+ import { DynamicWorkspaceRegistry } from './dynamic-workspace-registry.js';
13
+ import { type OAuthAccountProviderId } from '../providers/oauth-accounts.js';
11
14
  declare const INTERACTION_METRICS: readonly ['interaction_presented', 'interaction_updated', 'interaction_resolved', 'interaction_stale', 'interaction_duplicate', 'interaction_sanitization_rejected', 'interaction_continuation_failed'];
12
15
  type InteractionMetric = (typeof INTERACTION_METRICS)[number];
13
16
  export type GatewayLaunchConfig = {
14
17
  enabled: boolean;
15
- socketPath: string;
18
+ socketPath?: string;
19
+ /** Defaults to loopback; public-interface binds are outside deployment policy. */
20
+ host?: string;
21
+ port?: number;
22
+ tls?: GatewayTlsOptions;
16
23
  manifestPath: string;
17
24
  manifestSha256?: string;
18
25
  replayDbPath: string;
@@ -33,6 +40,21 @@ export type GatewayLaunchConfig = {
33
40
  runtimeFactory?: RuntimeFactory;
34
41
  /** Optional plan-03 durable index/log/journal owner. */
35
42
  persistence?: GatewayPersistenceCoordinator;
43
+ /** Optional pre-wired registry; otherwise one is derived from local grants. */
44
+ workspaceRegistry?: DynamicWorkspaceRegistry;
45
+ /** Explicit local roots allowed to the browser-owned candidate registry. */
46
+ workspaceAllowedRoots?: readonly string[];
47
+ /** Test/launcher seam for the server-owned OAuth loopback flow. */
48
+ oauthLogin?: (provider: OAuthAccountProviderId) => Promise<void>;
49
+ /** Principal permitted to operate the process-wide settings/account stores. */
50
+ localOwnerUserId?: string;
51
+ pairing?: {
52
+ enabled: boolean;
53
+ otpTtlMs?: number;
54
+ maxAttempts?: number;
55
+ /** Remove this file and restart to revoke all peers and re-bootstrap pairing. */
56
+ trustFilePath: string;
57
+ };
36
58
  };
37
59
  export declare class GatewayStartupError extends Error {
38
60
  constructor();
@@ -53,6 +75,7 @@ export declare class Term2Gateway {
53
75
  shutdown(graceMs?: number): Promise<void>;
54
76
  }
55
77
  export declare function classifyInteractionResolution(interaction: SessionProjectionSource['interaction'], hasLiveSnapshot: boolean): 'interaction_not_resolvable' | 'interaction_already_resolved' | null;
78
+ export declare function sessionConfigProjection(session: ServerSession): Record<string, unknown>;
56
79
  export type InteractionResolveRequest = {
57
80
  revision: number;
58
81
  answer: string;
@@ -1 +1 @@
1
- {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../source/gateway/gateway.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAEL,kBAAkB,EAElB,KAAK,sBAAsB,EAC5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAEL,qBAAqB,EACrB,KAAK,gCAAgC,EACrC,KAAK,mBAAmB,EACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,sBAAsB,EACtB,eAAe,EACf,sBAAsB,EACtB,wBAAwB,EACxB,cAAc,EACf,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAS3D,OAAO,EAEL,KAAK,qBAAqB,EAE1B,KAAK,uBAAuB,EAC7B,MAAM,6BAA6B,CAAC;AAerC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,6BAA6B,EAA2B,MAAM,8BAA8B,CAAC;AAQ3G,QAAA,MAAM,mBAAmB,YACvB,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,mCAAmC,EACnC,iCAAiC,CACzB,CAAC;AACX,KAAK,iBAAiB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAwD9D,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IACnF,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAC1C,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,8FAA8F;IAC9F,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,wDAAwD;IACxD,WAAW,CAAC,EAAE,6BAA6B,CAAC;CAC7C,CAAC;AAEF,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,cAGC;CACF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,eAAe,CAmB7G;AAED,qFAAqF;AACrF,qBAAa,YAAY;;IAiBvB,OAAO,eAsBN;IAgqBD,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,GAAG,YAAY,CASvD;IAED,IAAI,MAAM,IAAI,aAAa,CAE1B;IACD,IAAI,SAAS,IAAI,kBAAkB,CAElC;IACD,IAAI,SAAS,IAAI,gBAAgB,CAEhC;IACD,IAAI,eAAe,IAAI,MAAM,CAE5B;IACD,IAAI,kBAAkB,IAAI,QAAQ,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAMpE;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAQ3B;IAEK,aAAa,CACjB,MAAM,EAAE,sBAAsB,EAC9B,OAAO,CAAC,EAAE,IAAI,CAAC,gCAAgC,EAAE,SAAS,GAAG,gBAAgB,GAAG,eAAe,CAAC,EAChG,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,UAAU,CAAC,OAAO,qBAAqB,CAAC,GAAG,aAAa,CAAC,CAmGnE;IAEK,QAAQ,CAAC,OAAO,SAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAS7C;CACF;AAwCD,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,uBAAuB,CAAC,aAAa,CAAC,EACnD,eAAe,EAAE,OAAO,GACvB,4BAA4B,GAAG,8BAA8B,GAAG,IAAI,CAItE;AAiDD,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,yBAAyB,CAa5F;AA8BD,iBAAS,qBAAqB,CAAC,KAAK,EAAE,OAAO,4BAA4B,EAAE,kBAAkB,GAAG,OAAO,CAmDtG;AAcD,iBAAS,0BAA0B,CACjC,QAAQ,EAAE;IACR,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,SAAS,OAAO,EAAE,CAAC;IACnC,2BAA2B,EAAE,MAAM,CAAC;CACrC,EACD,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,qBAAqB,CAQvB;AAsOD,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,CAAC;AACrF,YAAY,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../source/gateway/gateway.ts"],"names":[],"mappings":"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"}