@dexto/core 1.7.1 → 1.8.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 (533) hide show
  1. package/dist/agent/DextoAgent.cjs +157 -62
  2. package/dist/agent/DextoAgent.d.ts +71 -17
  3. package/dist/agent/DextoAgent.d.ts.map +1 -1
  4. package/dist/agent/DextoAgent.js +161 -63
  5. package/dist/agent/agent-options.d.ts +6 -10
  6. package/dist/agent/agent-options.d.ts.map +1 -1
  7. package/dist/agent/agentCard.js +1 -1
  8. package/dist/agent/error-codes.js +1 -1
  9. package/dist/agent/errors.js +1 -1
  10. package/dist/agent/index.d.ts +1 -0
  11. package/dist/agent/index.d.ts.map +1 -1
  12. package/dist/agent/index.js +1 -1
  13. package/dist/agent/schemas.d.ts +2 -2
  14. package/dist/agent/schemas.js +1 -1
  15. package/dist/agent/state-manager.js +1 -1
  16. package/dist/approval/error-codes.cjs +1 -1
  17. package/dist/approval/error-codes.d.ts +1 -1
  18. package/dist/approval/error-codes.d.ts.map +1 -1
  19. package/dist/approval/error-codes.js +2 -2
  20. package/dist/approval/errors.cjs +2 -5
  21. package/dist/approval/errors.d.ts.map +1 -1
  22. package/dist/approval/errors.js +3 -6
  23. package/dist/approval/factory.cjs +19 -4
  24. package/dist/approval/factory.d.ts +4 -1
  25. package/dist/approval/factory.d.ts.map +1 -1
  26. package/dist/approval/factory.js +19 -5
  27. package/dist/approval/index.d.ts +1 -1
  28. package/dist/approval/index.d.ts.map +1 -1
  29. package/dist/approval/index.js +1 -1
  30. package/dist/approval/manager.cjs +168 -26
  31. package/dist/approval/manager.d.ts +46 -12
  32. package/dist/approval/manager.d.ts.map +1 -1
  33. package/dist/approval/manager.js +177 -29
  34. package/dist/approval/schemas.cjs +26 -26
  35. package/dist/approval/schemas.d.ts +29 -29
  36. package/dist/approval/schemas.d.ts.map +1 -1
  37. package/dist/approval/schemas.js +23 -23
  38. package/dist/approval/types.cjs +5 -5
  39. package/dist/approval/types.d.ts +18 -18
  40. package/dist/approval/types.d.ts.map +1 -1
  41. package/dist/approval/types.js +6 -6
  42. package/dist/{chunk-PTJYTZNU.js → chunk-C6A6W6XS.js} +1 -44
  43. package/dist/config/index.cjs +75 -0
  44. package/dist/config/index.d.ts +15 -0
  45. package/dist/config/index.d.ts.map +1 -0
  46. package/dist/config/index.js +50 -0
  47. package/dist/context/compaction/overflow.js +1 -1
  48. package/dist/context/compaction/strategies/noop.js +1 -1
  49. package/dist/context/compaction/strategies/reactive-overflow-compaction.js +1 -1
  50. package/dist/context/content-clone.cjs +131 -0
  51. package/dist/context/content-clone.d.ts +7 -0
  52. package/dist/context/content-clone.d.ts.map +1 -0
  53. package/dist/context/content-clone.js +104 -0
  54. package/dist/context/error-codes.js +1 -1
  55. package/dist/context/errors.js +1 -1
  56. package/dist/context/index.cjs +2 -0
  57. package/dist/context/index.d.ts +1 -0
  58. package/dist/context/index.d.ts.map +1 -1
  59. package/dist/context/index.js +2 -1
  60. package/dist/context/manager.cjs +47 -35
  61. package/dist/context/manager.d.ts +7 -7
  62. package/dist/context/manager.d.ts.map +1 -1
  63. package/dist/context/manager.js +48 -36
  64. package/dist/context/media-helpers.js +1 -1
  65. package/dist/context/schemas.cjs +77 -0
  66. package/dist/context/schemas.d.ts +5 -0
  67. package/dist/context/schemas.d.ts.map +1 -0
  68. package/dist/context/schemas.js +53 -0
  69. package/dist/context/types.js +1 -1
  70. package/dist/context/utils.cjs +70 -69
  71. package/dist/context/utils.d.ts +3 -3
  72. package/dist/context/utils.d.ts.map +1 -1
  73. package/dist/context/utils.js +71 -70
  74. package/dist/errors/DextoBaseError.js +1 -1
  75. package/dist/errors/DextoRuntimeError.js +1 -1
  76. package/dist/errors/DextoValidationError.js +1 -1
  77. package/dist/errors/index.js +1 -1
  78. package/dist/errors/result-bridge.js +1 -1
  79. package/dist/errors/types.js +1 -1
  80. package/dist/events/index.cjs +9 -1
  81. package/dist/events/index.d.ts +20 -8
  82. package/dist/events/index.d.ts.map +1 -1
  83. package/dist/events/index.js +10 -2
  84. package/dist/hooks/builtins/content-policy.js +1 -1
  85. package/dist/hooks/builtins/response-sanitizer.js +1 -1
  86. package/dist/hooks/error-codes.js +1 -1
  87. package/dist/hooks/index.js +1 -1
  88. package/dist/hooks/manager.cjs +1 -1
  89. package/dist/hooks/manager.d.ts +2 -2
  90. package/dist/hooks/manager.d.ts.map +1 -1
  91. package/dist/hooks/manager.js +2 -2
  92. package/dist/hooks/types.d.ts +2 -2
  93. package/dist/hooks/types.d.ts.map +1 -1
  94. package/dist/index.browser.js +1 -1
  95. package/dist/index.cjs +2 -0
  96. package/dist/index.d.ts +1 -0
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +2 -1
  99. package/dist/llm/curation-config.js +1 -1
  100. package/dist/llm/curation.js +1 -1
  101. package/dist/llm/error-codes.js +1 -1
  102. package/dist/llm/errors.js +1 -1
  103. package/dist/llm/executor/index.cjs +32 -0
  104. package/dist/llm/executor/index.d.ts +2 -0
  105. package/dist/llm/executor/index.d.ts.map +1 -0
  106. package/dist/llm/executor/index.js +11 -0
  107. package/dist/llm/executor/provider-options.js +1 -1
  108. package/dist/llm/executor/stream-processor.cjs +28 -139
  109. package/dist/llm/executor/stream-processor.d.ts +2 -13
  110. package/dist/llm/executor/stream-processor.d.ts.map +1 -1
  111. package/dist/llm/executor/stream-processor.js +29 -140
  112. package/dist/{session/history/memory.cjs → llm/executor/tool-definitions.cjs} +21 -33
  113. package/dist/llm/executor/tool-definitions.d.ts +4 -0
  114. package/dist/llm/executor/tool-definitions.d.ts.map +1 -0
  115. package/dist/llm/executor/tool-definitions.js +22 -0
  116. package/dist/llm/executor/tool-output-truncator.js +1 -1
  117. package/dist/llm/executor/turn-executor.cjs +1093 -458
  118. package/dist/llm/executor/turn-executor.d.ts +269 -43
  119. package/dist/llm/executor/turn-executor.d.ts.map +1 -1
  120. package/dist/llm/executor/turn-executor.js +1079 -405
  121. package/dist/llm/executor/types.d.ts +6 -0
  122. package/dist/llm/executor/types.d.ts.map +1 -1
  123. package/dist/llm/formatters/vercel.js +1 -1
  124. package/dist/llm/index.cjs +2 -0
  125. package/dist/llm/index.d.ts +1 -0
  126. package/dist/llm/index.d.ts.map +1 -1
  127. package/dist/llm/index.js +2 -1
  128. package/dist/llm/providers/codex-app-server.cjs +22 -2
  129. package/dist/llm/providers/codex-app-server.d.ts.map +1 -1
  130. package/dist/llm/providers/codex-app-server.js +23 -3
  131. package/dist/llm/providers/codex-base-url.js +1 -1
  132. package/dist/llm/providers/local/ai-sdk-adapter.js +1 -1
  133. package/dist/llm/providers/local/downloader.js +1 -1
  134. package/dist/llm/providers/local/error-codes.js +1 -1
  135. package/dist/llm/providers/local/errors.js +1 -1
  136. package/dist/llm/providers/local/gpu-detector.js +1 -1
  137. package/dist/llm/providers/local/index.js +1 -1
  138. package/dist/llm/providers/local/node-llama-provider.js +1 -1
  139. package/dist/llm/providers/local/ollama-provider.js +1 -1
  140. package/dist/llm/providers/local/registry.js +1 -1
  141. package/dist/llm/providers/local/schemas.js +1 -1
  142. package/dist/llm/providers/openrouter-model-registry.js +1 -1
  143. package/dist/llm/reasoning/anthropic-betas.js +1 -1
  144. package/dist/llm/reasoning/anthropic-thinking.js +1 -1
  145. package/dist/llm/reasoning/openai-reasoning-effort.js +1 -1
  146. package/dist/llm/reasoning/profile.js +1 -1
  147. package/dist/llm/reasoning/profiles/anthropic.js +1 -1
  148. package/dist/llm/reasoning/profiles/bedrock.js +1 -1
  149. package/dist/llm/reasoning/profiles/google.js +1 -1
  150. package/dist/llm/reasoning/profiles/openai-compatible.js +1 -1
  151. package/dist/llm/reasoning/profiles/openai.js +1 -1
  152. package/dist/llm/reasoning/profiles/openrouter.js +1 -1
  153. package/dist/llm/reasoning/profiles/shared.js +1 -1
  154. package/dist/llm/reasoning/profiles/vertex.js +1 -1
  155. package/dist/llm/registry/auto-update.js +1 -1
  156. package/dist/llm/registry/index.js +1 -1
  157. package/dist/llm/registry/models.generated.js +1 -1
  158. package/dist/llm/registry/models.manual.js +1 -1
  159. package/dist/llm/registry/sync.js +1 -1
  160. package/dist/llm/resolver.js +1 -1
  161. package/dist/llm/schemas.js +1 -1
  162. package/dist/llm/services/factory.cjs +5 -4
  163. package/dist/llm/services/factory.d.ts +3 -3
  164. package/dist/llm/services/factory.d.ts.map +1 -1
  165. package/dist/llm/services/factory.js +6 -5
  166. package/dist/llm/services/types.d.ts +10 -1
  167. package/dist/llm/services/types.d.ts.map +1 -1
  168. package/dist/llm/services/vercel.cjs +23 -8
  169. package/dist/llm/services/vercel.d.ts +11 -7
  170. package/dist/llm/services/vercel.d.ts.map +1 -1
  171. package/dist/llm/services/vercel.js +24 -9
  172. package/dist/llm/types.js +1 -1
  173. package/dist/llm/usage-metadata.cjs +20 -3
  174. package/dist/llm/usage-metadata.d.ts +1 -0
  175. package/dist/llm/usage-metadata.d.ts.map +1 -1
  176. package/dist/llm/usage-metadata.js +19 -3
  177. package/dist/llm/usage-scope.js +1 -1
  178. package/dist/llm/usage-summary.js +1 -1
  179. package/dist/llm/validation.js +1 -1
  180. package/dist/logger/browser.js +1 -1
  181. package/dist/logger/default-logger-factory.js +1 -1
  182. package/dist/logger/factory.js +1 -1
  183. package/dist/logger/index.js +1 -1
  184. package/dist/logger/logger.js +1 -1
  185. package/dist/logger/v2/dexto-logger.js +1 -1
  186. package/dist/logger/v2/error-codes.js +1 -1
  187. package/dist/logger/v2/errors.js +1 -1
  188. package/dist/logger/v2/schemas.js +1 -1
  189. package/dist/logger/v2/test-utils.js +1 -1
  190. package/dist/logger/v2/transport-factory.js +1 -1
  191. package/dist/logger/v2/transports/console-transport.js +1 -1
  192. package/dist/logger/v2/transports/file-transport.js +1 -1
  193. package/dist/logger/v2/transports/silent-transport.js +1 -1
  194. package/dist/logger/v2/types.js +1 -1
  195. package/dist/mcp/bundled-config.js +1 -1
  196. package/dist/mcp/error-codes.js +1 -1
  197. package/dist/mcp/errors.js +1 -1
  198. package/dist/mcp/index.js +1 -1
  199. package/dist/mcp/manager.js +1 -1
  200. package/dist/mcp/mcp-client.js +1 -1
  201. package/dist/mcp/resolver.js +1 -1
  202. package/dist/mcp/schemas.js +1 -1
  203. package/dist/memory/error-codes.js +1 -1
  204. package/dist/memory/errors.js +1 -1
  205. package/dist/memory/index.js +1 -1
  206. package/dist/memory/manager.cjs +7 -27
  207. package/dist/memory/manager.d.ts +4 -12
  208. package/dist/memory/manager.d.ts.map +1 -1
  209. package/dist/memory/manager.js +8 -28
  210. package/dist/memory/schemas.js +1 -1
  211. package/dist/prompts/error-codes.js +1 -1
  212. package/dist/prompts/errors.js +1 -1
  213. package/dist/prompts/index.js +1 -1
  214. package/dist/prompts/name-validation.js +1 -1
  215. package/dist/prompts/prompt-manager.cjs +9 -38
  216. package/dist/prompts/prompt-manager.d.ts +2 -10
  217. package/dist/prompts/prompt-manager.d.ts.map +1 -1
  218. package/dist/prompts/prompt-manager.js +10 -39
  219. package/dist/prompts/providers/config-prompt-provider.cjs +8 -87
  220. package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -1
  221. package/dist/prompts/providers/config-prompt-provider.js +9 -88
  222. package/dist/prompts/providers/custom-prompt-provider.cjs +21 -22
  223. package/dist/prompts/providers/custom-prompt-provider.d.ts +19 -4
  224. package/dist/prompts/providers/custom-prompt-provider.d.ts.map +1 -1
  225. package/dist/prompts/providers/custom-prompt-provider.js +22 -23
  226. package/dist/prompts/providers/mcp-prompt-provider.js +1 -1
  227. package/dist/prompts/schemas.cjs +2 -24
  228. package/dist/prompts/schemas.d.ts +0 -52
  229. package/dist/prompts/schemas.d.ts.map +1 -1
  230. package/dist/prompts/schemas.js +3 -25
  231. package/dist/prompts/types.d.ts +5 -32
  232. package/dist/prompts/types.d.ts.map +1 -1
  233. package/dist/prompts/utils.js +1 -1
  234. package/dist/resources/agent-resources-provider.js +1 -1
  235. package/dist/resources/error-codes.js +1 -1
  236. package/dist/resources/errors.js +1 -1
  237. package/dist/resources/handlers/blob-handler.cjs +14 -11
  238. package/dist/resources/handlers/blob-handler.d.ts +4 -4
  239. package/dist/resources/handlers/blob-handler.d.ts.map +1 -1
  240. package/dist/resources/handlers/blob-handler.js +15 -12
  241. package/dist/resources/handlers/factory.cjs +3 -3
  242. package/dist/resources/handlers/factory.js +4 -4
  243. package/dist/resources/handlers/filesystem-handler.js +1 -1
  244. package/dist/resources/handlers/types.d.ts +2 -2
  245. package/dist/resources/handlers/types.d.ts.map +1 -1
  246. package/dist/resources/index.js +1 -1
  247. package/dist/resources/manager.cjs +10 -7
  248. package/dist/resources/manager.d.ts +4 -4
  249. package/dist/resources/manager.d.ts.map +1 -1
  250. package/dist/resources/manager.js +11 -8
  251. package/dist/resources/reference-parser.js +1 -1
  252. package/dist/resources/schemas.cjs +1 -1
  253. package/dist/resources/schemas.d.ts +2 -2
  254. package/dist/resources/schemas.js +2 -2
  255. package/dist/runtime/host-runtime.js +1 -1
  256. package/dist/runtime/index.cjs +3 -0
  257. package/dist/runtime/index.d.ts +2 -0
  258. package/dist/runtime/index.d.ts.map +1 -1
  259. package/dist/runtime/index.js +3 -1
  260. package/dist/runtime/run-context.js +1 -1
  261. package/dist/search/index.js +1 -1
  262. package/dist/search/search-service.cjs +6 -13
  263. package/dist/search/search-service.d.ts +5 -3
  264. package/dist/search/search-service.d.ts.map +1 -1
  265. package/dist/search/search-service.js +7 -14
  266. package/dist/session/chat-session.cjs +264 -108
  267. package/dist/session/chat-session.d.ts +75 -21
  268. package/dist/session/chat-session.d.ts.map +1 -1
  269. package/dist/session/chat-session.js +268 -108
  270. package/dist/session/error-codes.js +1 -1
  271. package/dist/session/errors.js +1 -1
  272. package/dist/session/index.cjs +19 -2
  273. package/dist/session/index.d.ts +4 -3
  274. package/dist/session/index.d.ts.map +1 -1
  275. package/dist/session/index.js +19 -3
  276. package/dist/session/message-queue.cjs +82 -51
  277. package/dist/session/message-queue.d.ts +13 -8
  278. package/dist/session/message-queue.d.ts.map +1 -1
  279. package/dist/session/message-queue.js +83 -52
  280. package/dist/session/queue-clone.cjs +50 -0
  281. package/dist/session/queue-clone.d.ts +5 -0
  282. package/dist/session/queue-clone.d.ts.map +1 -0
  283. package/dist/session/queue-clone.js +25 -0
  284. package/dist/session/schemas.cjs +74 -2
  285. package/dist/session/schemas.d.ts +94 -0
  286. package/dist/session/schemas.d.ts.map +1 -1
  287. package/dist/session/schemas.js +69 -2
  288. package/dist/session/session-manager.cjs +107 -123
  289. package/dist/session/session-manager.d.ts +7 -6
  290. package/dist/session/session-manager.d.ts.map +1 -1
  291. package/dist/session/session-manager.js +108 -124
  292. package/dist/session/title-generator.cjs +14 -26
  293. package/dist/session/title-generator.d.ts +4 -6
  294. package/dist/session/title-generator.d.ts.map +1 -1
  295. package/dist/session/title-generator.js +16 -28
  296. package/dist/session/types.cjs +28 -0
  297. package/dist/session/types.d.ts +5 -1
  298. package/dist/session/types.d.ts.map +1 -1
  299. package/dist/session/types.js +19 -0
  300. package/dist/{session/history/factory.cjs → skills/index.cjs} +9 -9
  301. package/dist/skills/index.d.ts +4 -0
  302. package/dist/skills/index.d.ts.map +1 -0
  303. package/dist/skills/index.js +7 -0
  304. package/dist/skills/skill-manager.cjs +76 -0
  305. package/dist/skills/skill-manager.d.ts +13 -0
  306. package/dist/skills/skill-manager.d.ts.map +1 -0
  307. package/dist/skills/skill-manager.js +53 -0
  308. package/dist/skills/types.d.ts +24 -0
  309. package/dist/skills/types.d.ts.map +1 -0
  310. package/dist/skills/workspace-skill-source.cjs +120 -0
  311. package/dist/skills/workspace-skill-source.d.ts +16 -0
  312. package/dist/skills/workspace-skill-source.d.ts.map +1 -0
  313. package/dist/skills/workspace-skill-source.js +97 -0
  314. package/dist/storage/approvals/types.cjs +38 -0
  315. package/dist/storage/approvals/types.d.ts +54 -0
  316. package/dist/storage/approvals/types.d.ts.map +1 -0
  317. package/dist/storage/approvals/types.js +14 -0
  318. package/dist/storage/artifacts/types.d.ts +73 -0
  319. package/dist/storage/artifacts/types.d.ts.map +1 -0
  320. package/dist/storage/conversation/database.cjs +233 -0
  321. package/dist/storage/conversation/database.d.ts +38 -0
  322. package/dist/storage/conversation/database.d.ts.map +1 -0
  323. package/dist/storage/conversation/database.js +210 -0
  324. package/dist/storage/conversation/types.cjs +16 -0
  325. package/dist/storage/conversation/types.d.ts +21 -0
  326. package/dist/storage/conversation/types.d.ts.map +1 -0
  327. package/dist/storage/conversation/types.js +0 -0
  328. package/dist/storage/database/types.d.ts +4 -0
  329. package/dist/storage/database/types.d.ts.map +1 -1
  330. package/dist/storage/error-codes.js +1 -1
  331. package/dist/storage/errors.cjs +6 -6
  332. package/dist/storage/errors.d.ts +2 -2
  333. package/dist/storage/errors.js +7 -7
  334. package/dist/storage/index.cjs +42 -5
  335. package/dist/storage/index.d.ts +19 -8
  336. package/dist/storage/index.d.ts.map +1 -1
  337. package/dist/storage/index.js +39 -4
  338. package/dist/storage/memories/types.cjs +16 -0
  339. package/dist/storage/memories/types.d.ts +17 -0
  340. package/dist/storage/memories/types.d.ts.map +1 -0
  341. package/dist/storage/memories/types.js +0 -0
  342. package/dist/storage/message-queue/types.cjs +16 -0
  343. package/dist/storage/message-queue/types.d.ts +15 -0
  344. package/dist/storage/message-queue/types.d.ts.map +1 -0
  345. package/dist/storage/message-queue/types.js +0 -0
  346. package/dist/storage/prompts/types.cjs +16 -0
  347. package/dist/storage/prompts/types.d.ts +14 -0
  348. package/dist/storage/prompts/types.d.ts.map +1 -0
  349. package/dist/storage/prompts/types.js +0 -0
  350. package/dist/storage/runtime-events/types.cjs +16 -0
  351. package/dist/storage/runtime-events/types.d.ts +19 -0
  352. package/dist/storage/runtime-events/types.d.ts.map +1 -0
  353. package/dist/storage/runtime-events/types.js +0 -0
  354. package/dist/storage/sessions/types.cjs +16 -0
  355. package/dist/storage/sessions/types.d.ts +19 -0
  356. package/dist/storage/sessions/types.d.ts.map +1 -0
  357. package/dist/storage/sessions/types.js +0 -0
  358. package/dist/storage/stores/backend.cjs +702 -0
  359. package/dist/storage/stores/backend.d.ts +303 -0
  360. package/dist/storage/stores/backend.d.ts.map +1 -0
  361. package/dist/storage/stores/backend.js +677 -0
  362. package/dist/storage/stores/in-memory.cjs +510 -0
  363. package/dist/storage/stores/in-memory.d.ts +11 -0
  364. package/dist/storage/stores/in-memory.d.ts.map +1 -0
  365. package/dist/storage/stores/in-memory.js +487 -0
  366. package/dist/storage/stores/types.cjs +16 -0
  367. package/dist/storage/stores/types.d.ts +36 -0
  368. package/dist/storage/stores/types.d.ts.map +1 -0
  369. package/dist/storage/stores/types.js +0 -0
  370. package/dist/storage/tool-executions/types.cjs +127 -0
  371. package/dist/storage/tool-executions/types.d.ts +193 -0
  372. package/dist/storage/tool-executions/types.d.ts.map +1 -0
  373. package/dist/storage/tool-executions/types.js +96 -0
  374. package/dist/storage/tool-preferences/types.cjs +16 -0
  375. package/dist/storage/tool-preferences/types.d.ts +29 -0
  376. package/dist/storage/tool-preferences/types.d.ts.map +1 -0
  377. package/dist/storage/tool-preferences/types.js +0 -0
  378. package/dist/storage/tool-state/types.cjs +16 -0
  379. package/dist/storage/tool-state/types.d.ts +20 -0
  380. package/dist/storage/tool-state/types.d.ts.map +1 -0
  381. package/dist/storage/tool-state/types.js +0 -0
  382. package/dist/storage/workspaces/types.cjs +16 -0
  383. package/dist/storage/workspaces/types.d.ts +19 -0
  384. package/dist/storage/workspaces/types.d.ts.map +1 -0
  385. package/dist/storage/workspaces/types.js +0 -0
  386. package/dist/systemPrompt/contributors.cjs +10 -14
  387. package/dist/systemPrompt/contributors.d.ts +3 -3
  388. package/dist/systemPrompt/contributors.d.ts.map +1 -1
  389. package/dist/systemPrompt/contributors.js +11 -15
  390. package/dist/systemPrompt/error-codes.js +1 -1
  391. package/dist/systemPrompt/errors.js +1 -1
  392. package/dist/systemPrompt/in-built-prompts.js +1 -1
  393. package/dist/systemPrompt/index.js +1 -1
  394. package/dist/systemPrompt/manager.js +1 -1
  395. package/dist/systemPrompt/registry.js +1 -1
  396. package/dist/systemPrompt/schemas.js +1 -1
  397. package/dist/telemetry/decorators.js +1 -1
  398. package/dist/telemetry/error-codes.js +1 -1
  399. package/dist/telemetry/errors.js +1 -1
  400. package/dist/telemetry/exporters.js +1 -1
  401. package/dist/telemetry/index.js +1 -1
  402. package/dist/telemetry/schemas.js +1 -1
  403. package/dist/telemetry/telemetry.js +1 -1
  404. package/dist/telemetry/utils.js +1 -1
  405. package/dist/test-utils/in-memory-storage.cjs +9 -17
  406. package/dist/test-utils/in-memory-storage.js +9 -16
  407. package/dist/test-utils/session-state-stores.cjs +21 -24
  408. package/dist/test-utils/session-state-stores.js +22 -24
  409. package/dist/tools/{confirmation → approval}/allowed-tools-provider/factory.cjs +1 -1
  410. package/dist/tools/{confirmation → approval}/allowed-tools-provider/factory.d.ts +2 -2
  411. package/dist/tools/approval/allowed-tools-provider/factory.d.ts.map +1 -0
  412. package/dist/tools/{confirmation → approval}/allowed-tools-provider/factory.js +2 -2
  413. package/dist/tools/approval/allowed-tools-provider/in-memory.d.ts.map +1 -0
  414. package/dist/tools/{confirmation → approval}/allowed-tools-provider/in-memory.js +1 -1
  415. package/dist/tools/approval/allowed-tools-provider/storage.cjs +66 -0
  416. package/dist/tools/{confirmation → approval}/allowed-tools-provider/storage.d.ts +4 -10
  417. package/dist/tools/approval/allowed-tools-provider/storage.d.ts.map +1 -0
  418. package/dist/tools/approval/allowed-tools-provider/storage.js +43 -0
  419. package/dist/tools/approval/allowed-tools-provider/types.cjs +16 -0
  420. package/dist/tools/approval/allowed-tools-provider/types.d.ts.map +1 -0
  421. package/dist/tools/approval/allowed-tools-provider/types.js +0 -0
  422. package/dist/tools/approval/session-tool-policy.cjs +269 -0
  423. package/dist/tools/approval/session-tool-policy.d.ts +43 -0
  424. package/dist/tools/approval/session-tool-policy.d.ts.map +1 -0
  425. package/dist/tools/approval/session-tool-policy.js +245 -0
  426. package/dist/tools/define-tool.js +1 -1
  427. package/dist/tools/display-types.js +1 -1
  428. package/dist/tools/error-codes.cjs +3 -3
  429. package/dist/tools/error-codes.d.ts +4 -4
  430. package/dist/tools/error-codes.d.ts.map +1 -1
  431. package/dist/tools/error-codes.js +4 -4
  432. package/dist/tools/errors.cjs +12 -12
  433. package/dist/tools/errors.d.ts +6 -6
  434. package/dist/tools/errors.d.ts.map +1 -1
  435. package/dist/tools/errors.js +13 -13
  436. package/dist/tools/index.cjs +3 -0
  437. package/dist/tools/index.d.ts +3 -0
  438. package/dist/tools/index.d.ts.map +1 -1
  439. package/dist/tools/index.js +3 -1
  440. package/dist/tools/pattern-utils.js +1 -1
  441. package/dist/tools/presentation/tool-presentation.cjs +182 -0
  442. package/dist/tools/presentation/tool-presentation.d.ts +51 -0
  443. package/dist/tools/presentation/tool-presentation.d.ts.map +1 -0
  444. package/dist/tools/presentation/tool-presentation.js +159 -0
  445. package/dist/tools/presentation.js +1 -1
  446. package/dist/tools/schemas.cjs +5 -10
  447. package/dist/tools/schemas.d.ts +1 -4
  448. package/dist/tools/schemas.d.ts.map +1 -1
  449. package/dist/tools/schemas.js +6 -11
  450. package/dist/tools/session-tool-preferences-store.cjs +12 -28
  451. package/dist/tools/session-tool-preferences-store.d.ts +4 -7
  452. package/dist/tools/session-tool-preferences-store.d.ts.map +1 -1
  453. package/dist/tools/session-tool-preferences-store.js +12 -29
  454. package/dist/tools/tool-call-metadata.js +1 -1
  455. package/dist/tools/tool-manager.cjs +871 -834
  456. package/dist/tools/tool-manager.d.ts +94 -96
  457. package/dist/tools/tool-manager.d.ts.map +1 -1
  458. package/dist/tools/tool-manager.js +876 -833
  459. package/dist/tools/types.d.ts +10 -14
  460. package/dist/tools/types.d.ts.map +1 -1
  461. package/dist/utils/api-key-resolver.js +1 -1
  462. package/dist/utils/async-context.js +1 -1
  463. package/dist/utils/debug.js +1 -1
  464. package/dist/utils/defer.js +1 -1
  465. package/dist/utils/env.js +1 -1
  466. package/dist/utils/error-conversion.js +1 -1
  467. package/dist/utils/execution-context.js +1 -1
  468. package/dist/utils/fs-walk.js +1 -1
  469. package/dist/utils/path.js +1 -1
  470. package/dist/utils/redactor.js +1 -1
  471. package/dist/utils/result.js +1 -1
  472. package/dist/utils/safe-stringify.js +1 -1
  473. package/dist/utils/schema.js +1 -1
  474. package/dist/utils/service-initializer.cjs +37 -33
  475. package/dist/utils/service-initializer.d.ts +9 -5
  476. package/dist/utils/service-initializer.d.ts.map +1 -1
  477. package/dist/utils/service-initializer.js +38 -34
  478. package/dist/utils/zod-schema-converter.js +1 -1
  479. package/dist/workspace/error-codes.cjs +5 -1
  480. package/dist/workspace/error-codes.d.ts +4 -0
  481. package/dist/workspace/error-codes.d.ts.map +1 -1
  482. package/dist/workspace/error-codes.js +6 -2
  483. package/dist/workspace/errors.cjs +43 -0
  484. package/dist/workspace/errors.d.ts +9 -0
  485. package/dist/workspace/errors.d.ts.map +1 -1
  486. package/dist/workspace/errors.js +44 -1
  487. package/dist/workspace/index.d.ts +1 -1
  488. package/dist/workspace/index.d.ts.map +1 -1
  489. package/dist/workspace/index.js +1 -1
  490. package/dist/workspace/manager.cjs +21 -29
  491. package/dist/workspace/manager.d.ts +6 -6
  492. package/dist/workspace/manager.d.ts.map +1 -1
  493. package/dist/workspace/manager.js +22 -30
  494. package/dist/workspace/types.d.ts +47 -0
  495. package/dist/workspace/types.d.ts.map +1 -1
  496. package/package.json +114 -2
  497. package/dist/approval/session-approval-store.cjs +0 -91
  498. package/dist/approval/session-approval-store.d.ts +0 -37
  499. package/dist/approval/session-approval-store.d.ts.map +0 -1
  500. package/dist/approval/session-approval-store.js +0 -68
  501. package/dist/session/history/database.cjs +0 -232
  502. package/dist/session/history/database.d.ts +0 -41
  503. package/dist/session/history/database.d.ts.map +0 -1
  504. package/dist/session/history/database.js +0 -209
  505. package/dist/session/history/factory.d.ts +0 -11
  506. package/dist/session/history/factory.d.ts.map +0 -1
  507. package/dist/session/history/factory.js +0 -8
  508. package/dist/session/history/memory.d.ts +0 -22
  509. package/dist/session/history/memory.d.ts.map +0 -1
  510. package/dist/session/history/memory.js +0 -34
  511. package/dist/session/history/types.d.ts +0 -26
  512. package/dist/session/history/types.d.ts.map +0 -1
  513. package/dist/session/message-queue-store.cjs +0 -75
  514. package/dist/session/message-queue-store.d.ts +0 -16
  515. package/dist/session/message-queue-store.d.ts.map +0 -1
  516. package/dist/session/message-queue-store.js +0 -52
  517. package/dist/storage/storage-manager.cjs +0 -209
  518. package/dist/storage/storage-manager.d.ts +0 -77
  519. package/dist/storage/storage-manager.d.ts.map +0 -1
  520. package/dist/storage/storage-manager.js +0 -186
  521. package/dist/tools/confirmation/allowed-tools-provider/factory.d.ts.map +0 -1
  522. package/dist/tools/confirmation/allowed-tools-provider/in-memory.d.ts.map +0 -1
  523. package/dist/tools/confirmation/allowed-tools-provider/storage.cjs +0 -69
  524. package/dist/tools/confirmation/allowed-tools-provider/storage.d.ts.map +0 -1
  525. package/dist/tools/confirmation/allowed-tools-provider/storage.js +0 -46
  526. package/dist/tools/confirmation/allowed-tools-provider/types.d.ts.map +0 -1
  527. /package/dist/{session/history → skills}/types.cjs +0 -0
  528. /package/dist/{session/history → skills}/types.js +0 -0
  529. /package/dist/{tools/confirmation/allowed-tools-provider → storage/artifacts}/types.cjs +0 -0
  530. /package/dist/{tools/confirmation/allowed-tools-provider → storage/artifacts}/types.js +0 -0
  531. /package/dist/tools/{confirmation → approval}/allowed-tools-provider/in-memory.cjs +0 -0
  532. /package/dist/tools/{confirmation → approval}/allowed-tools-provider/in-memory.d.ts +0 -0
  533. /package/dist/tools/{confirmation → approval}/allowed-tools-provider/types.d.ts +0 -0
@@ -1,7 +1,30 @@
1
- import type { ApprovalHandler, ApprovalRequest, ApprovalResponse, ApprovalRequestDetails, ToolApprovalMetadata, CommandConfirmationMetadata, ElicitationMetadata, DirectoryAccessMetadata } from './types.js';
1
+ import type { ApprovalHandler, ApprovalRequest, ApprovalResponse, ApprovalRequestDetails, ToolApprovalMetadata, CommandApprovalMetadata, ElicitationMetadata, DirectoryAccessMetadata } from './types.js';
2
+ import { ApprovalStatus } from './types.js';
2
3
  import type { Logger } from '../logger/v2/types.js';
3
4
  import type { PermissionsMode } from '../tools/schemas.js';
4
- import { SessionApprovalStore } from './session-approval-store.js';
5
+ import type { ApprovalStore } from '../storage/approvals/types.js';
6
+ export type ApprovalRecordIdentity = {
7
+ runId: string;
8
+ turnId: string;
9
+ modelStepId: string;
10
+ toolCallId: string;
11
+ };
12
+ export type ApprovalDecisionInput = {
13
+ approvalId: ApprovalRequest['approvalId'];
14
+ status: typeof ApprovalStatus.APPROVED;
15
+ data?: ApprovalResponse['data'];
16
+ } | {
17
+ approvalId: ApprovalRequest['approvalId'];
18
+ status: typeof ApprovalStatus.DENIED | typeof ApprovalStatus.CANCELLED;
19
+ reason?: ApprovalResponse['reason'];
20
+ message?: string;
21
+ timeoutMs?: number;
22
+ data?: ApprovalResponse['data'];
23
+ };
24
+ export type ApprovalResponseRecord = {
25
+ response: ApprovalResponse;
26
+ status: 'created' | 'replayed';
27
+ };
5
28
  /**
6
29
  * Configuration for the approval manager
7
30
  */
@@ -27,7 +50,7 @@ export interface ApprovalManagerConfig {
27
50
  * - Route approvals to appropriate providers
28
51
  * - Provide convenience methods for specific approval types
29
52
  * - Handle approval responses and errors
30
- * - Support multiple approval modes (manual, auto-approve, auto-deny)
53
+ * - Support multiple approval modes (manual, auto-approve)
31
54
  *
32
55
  * @example
33
56
  * ```typescript
@@ -49,22 +72,25 @@ export interface ApprovalManagerConfig {
49
72
  * ```
50
73
  */
51
74
  export declare class ApprovalManager {
52
- private readonly sessionApprovalStore;
75
+ private readonly approvalStore;
53
76
  private handler;
54
77
  private config;
55
78
  private logger;
56
79
  private readonly loadedScopes;
57
80
  private readonly scopeLocks;
81
+ private readonly approvalRecordLocks;
58
82
  private readonly scopes;
59
- constructor(config: ApprovalManagerConfig, logger: Logger, sessionApprovalStore: SessionApprovalStore);
83
+ constructor(config: ApprovalManagerConfig, logger: Logger, approvalStore: ApprovalStore);
60
84
  private getScopeKey;
61
85
  private getScopeLabel;
86
+ private sessionScope;
62
87
  private getApprovalTimeout;
63
88
  private getDefaultTimeout;
64
89
  private createEmptyScopeState;
65
90
  private getOrCreateScope;
66
91
  private getScope;
67
92
  private runWithScopeLock;
93
+ private runWithApprovalRecordLock;
68
94
  private snapshotToolPatterns;
69
95
  private snapshotApprovedDirectories;
70
96
  private persistScope;
@@ -168,7 +194,11 @@ export declare class ApprovalManager {
168
194
  */
169
195
  clearSessionApprovals(sessionId?: string): Promise<void>;
170
196
  private createApprovalDetails;
197
+ private withDefaultTimeout;
198
+ private approvalIdentityKey;
199
+ private assertMatchingRecordedRequest;
171
200
  private createResponse;
201
+ private parseResponseForRequest;
172
202
  private getElicitationFormData;
173
203
  /**
174
204
  * Request directory access approval.
@@ -194,8 +224,12 @@ export declare class ApprovalManager {
194
224
  * Request a generic approval
195
225
  */
196
226
  requestApproval(details: ApprovalRequestDetails): Promise<ApprovalResponse>;
227
+ recordApprovalRequest(details: ApprovalRequestDetails, identity: ApprovalRecordIdentity): Promise<ApprovalRequest>;
228
+ recordApprovalResponse(decision: ApprovalDecisionInput): Promise<ApprovalResponse>;
229
+ recordApprovalResponseRecord(decision: ApprovalDecisionInput, expectedRequest?: ApprovalRequest): Promise<ApprovalResponseRecord>;
230
+ requestApprovalDecision(request: ApprovalRequest): Promise<ApprovalResponse>;
197
231
  /**
198
- * Handle approval requests (tool approval, elicitation, command confirmation, directory access, custom)
232
+ * Handle approval requests (tool approval, elicitation, command approval, directory access, custom)
199
233
  * @private
200
234
  */
201
235
  private handleApproval;
@@ -204,7 +238,7 @@ export declare class ApprovalManager {
204
238
  * Convenience method for tool execution approval
205
239
  *
206
240
  * TODO: Make sessionId required once all callers are updated to pass it
207
- * Tool confirmations always happen in session context during LLM execution
241
+ * Tool approvals always happen in session context during LLM execution
208
242
  */
209
243
  requestToolApproval(metadata: ToolApprovalMetadata & {
210
244
  sessionId?: string;
@@ -212,19 +246,19 @@ export declare class ApprovalManager {
212
246
  timeout?: number;
213
247
  }): Promise<ApprovalResponse>;
214
248
  /**
215
- * Request command confirmation approval
249
+ * Request command approval
216
250
  * Convenience method for dangerous command execution within an already-approved tool
217
251
  *
218
252
  * This is different from tool approval - it's for per-command approval
219
253
  * of dangerous operations (like rm, git push) within tools that are already approved.
220
254
  *
221
255
  * TODO: Make sessionId required once all callers are updated to pass it
222
- * Command confirmations always happen during tool execution which has session context
256
+ * Command approvals always happen during tool execution which has session context
223
257
  *
224
258
  * @example
225
259
  * ```typescript
226
260
  * // bash_exec tool is approved, but dangerous commands still require approval
227
- * const response = await manager.requestCommandConfirmation({
261
+ * const response = await manager.requestCommandApproval({
228
262
  * toolName: 'bash_exec',
229
263
  * command: 'rm -rf /important',
230
264
  * originalCommand: 'rm -rf /important',
@@ -232,7 +266,7 @@ export declare class ApprovalManager {
232
266
  * });
233
267
  * ```
234
268
  */
235
- requestCommandConfirmation(metadata: CommandConfirmationMetadata & {
269
+ requestCommandApproval(metadata: CommandApprovalMetadata & {
236
270
  sessionId?: string;
237
271
  hostRuntime?: ApprovalRequestDetails['hostRuntime'];
238
272
  timeout?: number;
@@ -301,7 +335,7 @@ export declare class ApprovalManager {
301
335
  * Set the approval handler for manual approval mode.
302
336
  *
303
337
  * The handler will be called for:
304
- * - Tool confirmation requests when permissions.mode is 'manual'
338
+ * - Tool approval requests when permissions.mode is 'manual'
305
339
  * - All elicitation requests (when elicitation is enabled, regardless of permissions.mode)
306
340
  *
307
341
  * A handler must be set before processing requests if:
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/approval/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/approval/manager.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,16 @@
1
- import "../chunk-PTJYTZNU.js";
1
+ import "../chunk-C6A6W6XS.js";
2
2
  import path from "node:path";
3
3
  import { realpathSync } from "node:fs";
4
- import { ApprovalType, ApprovalStatus, DenialReason } from "./types.js";
5
- import { createApprovalRequest } from "./factory.js";
4
+ import { isDeepStrictEqual } from "node:util";
5
+ import { ApprovalType, ApprovalStatus } from "./types.js";
6
+ import {
7
+ CommandApprovalResponseSchema,
8
+ CustomApprovalResponseSchema,
9
+ DirectoryAccessResponseSchema,
10
+ ElicitationResponseSchema,
11
+ ToolApprovalResponseSchema
12
+ } from "./schemas.js";
13
+ import { createApprovalRequest, createDeterministicApprovalId } from "./factory.js";
6
14
  import { DextoLogComponent } from "../logger/v2/types.js";
7
15
  import { ApprovalError } from "./errors.js";
8
16
  import { patternCovers } from "../tools/pattern-utils.js";
@@ -32,8 +40,8 @@ function tryRealpathSyncWithExistingParent(resolvedPath) {
32
40
  }
33
41
  }
34
42
  class ApprovalManager {
35
- constructor(config, logger, sessionApprovalStore) {
36
- this.sessionApprovalStore = sessionApprovalStore;
43
+ constructor(config, logger, approvalStore) {
44
+ this.approvalStore = approvalStore;
37
45
  this.config = config;
38
46
  this.logger = logger.createChild(DextoLogComponent.APPROVAL);
39
47
  this.logger.debug(
@@ -45,6 +53,7 @@ class ApprovalManager {
45
53
  logger;
46
54
  loadedScopes = /* @__PURE__ */ new Set();
47
55
  scopeLocks = /* @__PURE__ */ new Map();
56
+ approvalRecordLocks = /* @__PURE__ */ new Map();
48
57
  scopes = /* @__PURE__ */ new Map();
49
58
  getScopeKey(sessionId) {
50
59
  return sessionId ?? GLOBAL_APPROVAL_SCOPE;
@@ -52,6 +61,9 @@ class ApprovalManager {
52
61
  getScopeLabel(sessionId) {
53
62
  return sessionId ?? "global";
54
63
  }
64
+ sessionScope(sessionId) {
65
+ return sessionId === void 0 ? {} : { sessionId };
66
+ }
55
67
  getApprovalTimeout(type, timeout) {
56
68
  return timeout ?? this.getDefaultTimeout(type);
57
69
  }
@@ -91,6 +103,23 @@ class ApprovalManager {
91
103
  }
92
104
  }
93
105
  }
106
+ async runWithApprovalRecordLock(approvalId, fn) {
107
+ const previousLock = this.approvalRecordLocks.get(approvalId) ?? Promise.resolve();
108
+ const currentResult = previousLock.catch(() => {
109
+ }).then(() => fn());
110
+ const currentLock = currentResult.then(
111
+ () => void 0,
112
+ () => void 0
113
+ );
114
+ this.approvalRecordLocks.set(approvalId, currentLock);
115
+ try {
116
+ return await currentResult;
117
+ } finally {
118
+ if (this.approvalRecordLocks.get(approvalId) === currentLock) {
119
+ this.approvalRecordLocks.delete(approvalId);
120
+ }
121
+ }
122
+ }
94
123
  snapshotToolPatterns(scopeKey) {
95
124
  const snapshot = {};
96
125
  for (const [toolName, patterns] of this.getScope(scopeKey).toolPatterns) {
@@ -112,7 +141,10 @@ class ApprovalManager {
112
141
  toolPatterns: this.snapshotToolPatterns(scopeKey),
113
142
  approvedDirectories: this.snapshotApprovedDirectories(scopeKey)
114
143
  };
115
- await this.sessionApprovalStore.save(sessionId, state);
144
+ await this.approvalStore.saveSessionState({
145
+ ...this.sessionScope(sessionId),
146
+ state
147
+ });
116
148
  }
117
149
  hydrateScope(sessionId, state) {
118
150
  const scopeKey = this.getScopeKey(sessionId);
@@ -138,7 +170,7 @@ class ApprovalManager {
138
170
  if (this.loadedScopes.has(scopeKey)) {
139
171
  return;
140
172
  }
141
- const state = await this.sessionApprovalStore.load(sessionId);
173
+ const state = await this.approvalStore.loadSessionState(this.sessionScope(sessionId));
142
174
  this.hydrateScope(sessionId, state);
143
175
  this.loadedScopes.add(scopeKey);
144
176
  this.logger.debug("Restored persisted approval state", {
@@ -157,7 +189,7 @@ class ApprovalManager {
157
189
  const scopeKey = this.getScopeKey(sessionId);
158
190
  await this.runWithScopeLock(scopeKey, async () => {
159
191
  this.evictSessionState(sessionId);
160
- await this.sessionApprovalStore.delete(sessionId);
192
+ await this.approvalStore.deleteSessionState(this.sessionScope(sessionId));
161
193
  });
162
194
  }
163
195
  // ==================== Pattern Methods ====================
@@ -436,14 +468,71 @@ class ApprovalManager {
436
468
  }
437
469
  return details;
438
470
  }
471
+ withDefaultTimeout(details) {
472
+ return {
473
+ ...details,
474
+ timeout: this.getApprovalTimeout(details.type, details.timeout)
475
+ };
476
+ }
477
+ approvalIdentityKey(identity) {
478
+ return JSON.stringify([
479
+ identity.runId,
480
+ identity.turnId,
481
+ identity.modelStepId,
482
+ identity.toolCallId
483
+ ]);
484
+ }
485
+ assertMatchingRecordedRequest(existing, candidate) {
486
+ const existingComparable = {
487
+ type: existing.type,
488
+ sessionId: existing.sessionId,
489
+ hostRuntime: existing.hostRuntime,
490
+ timeout: existing.timeout,
491
+ metadata: existing.metadata
492
+ };
493
+ const candidateComparable = {
494
+ type: candidate.type,
495
+ sessionId: candidate.sessionId,
496
+ hostRuntime: candidate.hostRuntime,
497
+ timeout: candidate.timeout,
498
+ metadata: candidate.metadata
499
+ };
500
+ if (!isDeepStrictEqual(existingComparable, candidateComparable)) {
501
+ throw ApprovalError.invalidRequest(
502
+ "Approval request conflicts with existing approval request",
503
+ {
504
+ approvalId: existing.approvalId,
505
+ type: existing.type
506
+ }
507
+ );
508
+ }
509
+ }
439
510
  createResponse(request, response) {
440
511
  return {
512
+ status: response.status,
441
513
  approvalId: request.approvalId,
442
514
  ...request.sessionId !== void 0 ? { sessionId: request.sessionId } : {},
443
515
  ...request.hostRuntime !== void 0 ? { hostRuntime: request.hostRuntime } : {},
444
- ...response
516
+ ...response.reason !== void 0 ? { reason: response.reason } : {},
517
+ ...response.message !== void 0 ? { message: response.message } : {},
518
+ ...response.timeoutMs !== void 0 ? { timeoutMs: response.timeoutMs } : {},
519
+ ...response.data !== void 0 ? { data: response.data } : {}
445
520
  };
446
521
  }
522
+ parseResponseForRequest(request, response) {
523
+ switch (request.type) {
524
+ case ApprovalType.TOOL_APPROVAL:
525
+ return ToolApprovalResponseSchema.parse(response);
526
+ case ApprovalType.COMMAND_APPROVAL:
527
+ return CommandApprovalResponseSchema.parse(response);
528
+ case ApprovalType.ELICITATION:
529
+ return ElicitationResponseSchema.parse(response);
530
+ case ApprovalType.CUSTOM:
531
+ return CustomApprovalResponseSchema.parse(response);
532
+ case ApprovalType.DIRECTORY_ACCESS:
533
+ return DirectoryAccessResponseSchema.parse(response);
534
+ }
535
+ }
447
536
  getElicitationFormData(response) {
448
537
  if (response.data && typeof response.data === "object" && "formData" in response.data && typeof response.data.formData === "object" && response.data.formData !== null) {
449
538
  return response.data.formData;
@@ -488,7 +577,7 @@ class ApprovalManager {
488
577
  * Request a generic approval
489
578
  */
490
579
  async requestApproval(details) {
491
- const request = createApprovalRequest(details);
580
+ const request = createApprovalRequest(this.withDefaultTimeout(details));
492
581
  if (request.type === ApprovalType.ELICITATION && !this.config.elicitation.enabled) {
493
582
  throw ApprovalError.invalidConfig(
494
583
  "Elicitation is disabled. Enable elicitation in your agent configuration to use the ask_user tool or MCP server elicitations."
@@ -496,8 +585,77 @@ class ApprovalManager {
496
585
  }
497
586
  return this.handleApproval(request);
498
587
  }
588
+ async recordApprovalRequest(details, identity) {
589
+ if (details.type === ApprovalType.ELICITATION && !this.config.elicitation.enabled) {
590
+ throw ApprovalError.invalidConfig(
591
+ "Elicitation is disabled. Enable elicitation in your agent configuration to use the ask_user tool or MCP server elicitations."
592
+ );
593
+ }
594
+ const approvalId = createDeterministicApprovalId(this.approvalIdentityKey(identity));
595
+ const request = createApprovalRequest(this.withDefaultTimeout(details), approvalId);
596
+ return this.runWithApprovalRecordLock(approvalId, async () => {
597
+ const existing = await this.approvalStore.getRequest({ approvalId });
598
+ if (existing) {
599
+ this.assertMatchingRecordedRequest(existing, request);
600
+ return existing;
601
+ }
602
+ const recorded = await this.approvalStore.createRequest({ request });
603
+ this.assertMatchingRecordedRequest(recorded, request);
604
+ return recorded;
605
+ });
606
+ }
607
+ async recordApprovalResponse(decision) {
608
+ const record = await this.recordApprovalResponseRecord(decision);
609
+ return record.response;
610
+ }
611
+ async recordApprovalResponseRecord(decision, expectedRequest) {
612
+ return this.runWithApprovalRecordLock(decision.approvalId, async () => {
613
+ const request = await this.approvalStore.getRequest({
614
+ approvalId: decision.approvalId
615
+ });
616
+ if (!request) {
617
+ throw ApprovalError.invalidResponse("Approval response has no recorded request", {
618
+ approvalId: decision.approvalId
619
+ });
620
+ }
621
+ if (expectedRequest !== void 0) {
622
+ this.assertMatchingRecordedRequest(request, expectedRequest);
623
+ }
624
+ const response = this.parseResponseForRequest(
625
+ request,
626
+ this.createResponse(request, decision)
627
+ );
628
+ const existing = await this.approvalStore.getResponse({
629
+ approvalId: decision.approvalId
630
+ });
631
+ if (existing) {
632
+ if (!isDeepStrictEqual(existing, response)) {
633
+ throw ApprovalError.invalidResponse(
634
+ "Approval response conflicts with existing approval response",
635
+ {
636
+ approvalId: decision.approvalId
637
+ }
638
+ );
639
+ }
640
+ return { response: existing, status: "replayed" };
641
+ }
642
+ const record = await this.approvalStore.saveResponse({ response });
643
+ if (!isDeepStrictEqual(record.response, response)) {
644
+ throw ApprovalError.invalidResponse(
645
+ "Approval response conflicts with existing approval response",
646
+ {
647
+ approvalId: decision.approvalId
648
+ }
649
+ );
650
+ }
651
+ return record;
652
+ });
653
+ }
654
+ async requestApprovalDecision(request) {
655
+ return this.handleApproval(request);
656
+ }
499
657
  /**
500
- * Handle approval requests (tool approval, elicitation, command confirmation, directory access, custom)
658
+ * Handle approval requests (tool approval, elicitation, command approval, directory access, custom)
501
659
  * @private
502
660
  */
503
661
  async handleApproval(request) {
@@ -517,16 +675,6 @@ class ApprovalManager {
517
675
  status: ApprovalStatus.APPROVED
518
676
  });
519
677
  }
520
- if (mode === "auto-deny") {
521
- this.logger.info(
522
- `Auto-deny approval '${request.type}', approvalId: ${request.approvalId}`
523
- );
524
- return this.createResponse(request, {
525
- status: ApprovalStatus.DENIED,
526
- reason: DenialReason.SYSTEM_DENIED,
527
- message: `Approval automatically denied by system policy (auto-deny mode)`
528
- });
529
- }
530
678
  const handler = this.ensureHandler();
531
679
  this.logger.info(
532
680
  `Manual approval '${request.type}' requested, approvalId: ${request.approvalId}, sessionId: ${request.sessionId ?? "global"}`
@@ -538,7 +686,7 @@ class ApprovalManager {
538
686
  * Convenience method for tool execution approval
539
687
  *
540
688
  * TODO: Make sessionId required once all callers are updated to pass it
541
- * Tool confirmations always happen in session context during LLM execution
689
+ * Tool approvals always happen in session context during LLM execution
542
690
  */
543
691
  async requestToolApproval(metadata) {
544
692
  const { sessionId, hostRuntime, timeout, ...toolMetadata } = metadata;
@@ -553,19 +701,19 @@ class ApprovalManager {
553
701
  );
554
702
  }
555
703
  /**
556
- * Request command confirmation approval
704
+ * Request command approval
557
705
  * Convenience method for dangerous command execution within an already-approved tool
558
706
  *
559
707
  * This is different from tool approval - it's for per-command approval
560
708
  * of dangerous operations (like rm, git push) within tools that are already approved.
561
709
  *
562
710
  * TODO: Make sessionId required once all callers are updated to pass it
563
- * Command confirmations always happen during tool execution which has session context
711
+ * Command approvals always happen during tool execution which has session context
564
712
  *
565
713
  * @example
566
714
  * ```typescript
567
715
  * // bash_exec tool is approved, but dangerous commands still require approval
568
- * const response = await manager.requestCommandConfirmation({
716
+ * const response = await manager.requestCommandApproval({
569
717
  * toolName: 'bash_exec',
570
718
  * command: 'rm -rf /important',
571
719
  * originalCommand: 'rm -rf /important',
@@ -573,11 +721,11 @@ class ApprovalManager {
573
721
  * });
574
722
  * ```
575
723
  */
576
- async requestCommandConfirmation(metadata) {
724
+ async requestCommandApproval(metadata) {
577
725
  const { sessionId, hostRuntime, timeout, ...commandMetadata } = metadata;
578
726
  return this.requestApproval(
579
727
  this.createApprovalDetails(
580
- ApprovalType.COMMAND_CONFIRMATION,
728
+ ApprovalType.COMMAND_APPROVAL,
581
729
  commandMetadata,
582
730
  sessionId,
583
731
  hostRuntime,
@@ -700,7 +848,7 @@ class ApprovalManager {
700
848
  * Set the approval handler for manual approval mode.
701
849
  *
702
850
  * The handler will be called for:
703
- * - Tool confirmation requests when permissions.mode is 'manual'
851
+ * - Tool approval requests when permissions.mode is 'manual'
704
852
  * - All elicitation requests (when elicitation is enabled, regardless of permissions.mode)
705
853
  *
706
854
  * A handler must be set before processing requests if:
@@ -737,7 +885,7 @@ class ApprovalManager {
737
885
  ensureHandler() {
738
886
  if (!this.handler) {
739
887
  throw ApprovalError.invalidConfig(
740
- 'An approval handler is required but not configured.\nHandlers are required for:\n \u2022 manual tool approval mode\n \u2022 all elicitation requests (when elicitation is enabled)\nEither:\n \u2022 set permissions.mode to "auto-approve" or "auto-deny", or\n \u2022 disable elicitation (set elicitation.enabled: false), or\n \u2022 call agent.setApprovalHandler(...) before processing requests.'
888
+ 'An approval handler is required but not configured.\nHandlers are required for:\n \u2022 manual tool approval mode\n \u2022 all elicitation requests (when elicitation is enabled)\nEither:\n \u2022 set permissions.mode to "auto-approve", or\n \u2022 disable elicitation (set elicitation.enabled: false), or\n \u2022 call agent.setApprovalHandler(...) before processing requests.'
741
889
  );
742
890
  }
743
891
  return this.handler;
@@ -25,10 +25,10 @@ __export(schemas_exports, {
25
25
  ApprovalTypeSchema: () => ApprovalTypeSchema,
26
26
  BaseApprovalRequestSchema: () => BaseApprovalRequestSchema,
27
27
  BaseApprovalResponseSchema: () => BaseApprovalResponseSchema,
28
- CommandConfirmationMetadataSchema: () => CommandConfirmationMetadataSchema,
29
- CommandConfirmationRequestSchema: () => CommandConfirmationRequestSchema,
30
- CommandConfirmationResponseDataSchema: () => CommandConfirmationResponseDataSchema,
31
- CommandConfirmationResponseSchema: () => CommandConfirmationResponseSchema,
28
+ CommandApprovalMetadataSchema: () => CommandApprovalMetadataSchema,
29
+ CommandApprovalRequestSchema: () => CommandApprovalRequestSchema,
30
+ CommandApprovalResponseDataSchema: () => CommandApprovalResponseDataSchema,
31
+ CommandApprovalResponseSchema: () => CommandApprovalResponseSchema,
32
32
  CustomApprovalMetadataSchema: () => CustomApprovalMetadataSchema,
33
33
  CustomApprovalRequestSchema: () => CustomApprovalRequestSchema,
34
34
  CustomApprovalResponseDataSchema: () => CustomApprovalResponseDataSchema,
@@ -72,7 +72,7 @@ const DirectoryAccessMetadataSchema = import_zod.z.object({
72
72
  toolName: import_zod.z.string().describe("Name of the tool requesting access")
73
73
  }).strict().describe("Directory access metadata");
74
74
  const ToolApprovalMetadataSchema = import_zod.z.object({
75
- toolName: import_zod.z.string().describe("Name of the tool to confirm"),
75
+ toolName: import_zod.z.string().describe("Name of the tool to approve"),
76
76
  presentationSnapshot: ToolPresentationSnapshotV1Schema.optional().describe(
77
77
  "Optional UI-agnostic presentation snapshot for the tool call. Clients MUST ignore unknown fields."
78
78
  ),
@@ -89,11 +89,11 @@ const ToolApprovalMetadataSchema = import_zod.z.object({
89
89
  'Suggested patterns for session approval. Tools may provide patterns to allow approving a broader subset of future calls (e.g., ["git push *", "git *"]).'
90
90
  )
91
91
  }).strict().describe("Tool approval metadata");
92
- const CommandConfirmationMetadataSchema = import_zod.z.object({
92
+ const CommandApprovalMetadataSchema = import_zod.z.object({
93
93
  toolName: import_zod.z.string().describe("Name of the tool executing the command"),
94
94
  command: import_zod.z.string().describe("The normalized command to execute"),
95
95
  originalCommand: import_zod.z.string().optional().describe("The original command before normalization")
96
- }).strict().describe("Command confirmation metadata");
96
+ }).strict().describe("Command approval metadata");
97
97
  const ElicitationMetadataSchema = import_zod.z.object({
98
98
  schema: JsonSchema7Schema.describe("JSON Schema for the form"),
99
99
  prompt: import_zod.z.string().describe("High-level prompt/context for the form (clients may show it)"),
@@ -109,15 +109,15 @@ const BaseApprovalRequestSchema = import_zod.z.object({
109
109
  "Optional host-owned runtime IDs for correlating the approval flow to a single execution."
110
110
  ),
111
111
  timeout: import_zod.z.number().int().positive().optional().describe("Timeout in milliseconds (optional - no timeout if not specified)"),
112
- timestamp: import_zod.z.date().describe("When the request was created")
112
+ timestamp: import_zod.z.coerce.date().describe("When the request was created")
113
113
  }).describe("Base approval request");
114
114
  const ToolApprovalRequestSchema = BaseApprovalRequestSchema.extend({
115
115
  type: import_zod.z.literal(import_types.ApprovalType.TOOL_APPROVAL),
116
116
  metadata: ToolApprovalMetadataSchema
117
117
  }).strict();
118
- const CommandConfirmationRequestSchema = BaseApprovalRequestSchema.extend({
119
- type: import_zod.z.literal(import_types.ApprovalType.COMMAND_CONFIRMATION),
120
- metadata: CommandConfirmationMetadataSchema
118
+ const CommandApprovalRequestSchema = BaseApprovalRequestSchema.extend({
119
+ type: import_zod.z.literal(import_types.ApprovalType.COMMAND_APPROVAL),
120
+ metadata: CommandApprovalMetadataSchema
121
121
  }).strict();
122
122
  const ElicitationRequestSchema = BaseApprovalRequestSchema.extend({
123
123
  type: import_zod.z.literal(import_types.ApprovalType.ELICITATION),
@@ -133,7 +133,7 @@ const DirectoryAccessRequestSchema = BaseApprovalRequestSchema.extend({
133
133
  }).strict();
134
134
  const ApprovalRequestSchema = import_zod.z.discriminatedUnion("type", [
135
135
  ToolApprovalRequestSchema,
136
- CommandConfirmationRequestSchema,
136
+ CommandApprovalRequestSchema,
137
137
  ElicitationRequestSchema,
138
138
  CustomApprovalRequestSchema,
139
139
  DirectoryAccessRequestSchema
@@ -147,10 +147,10 @@ const ToolApprovalResponseDataSchema = import_zod.z.object({
147
147
  "Remember this directory for the session (allows future access without prompting again)"
148
148
  )
149
149
  }).strict().describe("Tool approval response data");
150
- const CommandConfirmationResponseDataSchema = import_zod.z.object({
151
- // Command confirmations don't have remember choice - they're per-command
150
+ const CommandApprovalResponseDataSchema = import_zod.z.object({
151
+ // Command approvals don't have remember choice - they're per-command
152
152
  // Could add command pattern remembering in future (e.g., "remember git push *")
153
- }).strict().describe("Command confirmation response data");
153
+ }).strict().describe("Command approval response data");
154
154
  const ElicitationResponseDataSchema = import_zod.z.object({
155
155
  formData: import_zod.z.record(import_zod.z.string(), import_zod.z.unknown()).describe("Form data matching schema")
156
156
  }).strict().describe("Elicitation response data");
@@ -174,8 +174,8 @@ const BaseApprovalResponseSchema = import_zod.z.object({
174
174
  const ToolApprovalResponseSchema = BaseApprovalResponseSchema.extend({
175
175
  data: ToolApprovalResponseDataSchema.optional()
176
176
  }).strict();
177
- const CommandConfirmationResponseSchema = BaseApprovalResponseSchema.extend({
178
- data: CommandConfirmationResponseDataSchema.optional()
177
+ const CommandApprovalResponseSchema = BaseApprovalResponseSchema.extend({
178
+ data: CommandApprovalResponseDataSchema.optional()
179
179
  }).strict();
180
180
  const ElicitationResponseSchema = BaseApprovalResponseSchema.extend({
181
181
  data: ElicitationResponseDataSchema.optional()
@@ -188,7 +188,7 @@ const DirectoryAccessResponseSchema = BaseApprovalResponseSchema.extend({
188
188
  }).strict();
189
189
  const ApprovalResponseSchema = import_zod.z.union([
190
190
  ToolApprovalResponseSchema,
191
- CommandConfirmationResponseSchema,
191
+ CommandApprovalResponseSchema,
192
192
  ElicitationResponseSchema,
193
193
  CustomApprovalResponseSchema,
194
194
  DirectoryAccessResponseSchema
@@ -202,7 +202,7 @@ const ApprovalRequestDetailsSchema = import_zod.z.object({
202
202
  timeout: import_zod.z.number().int().positive().optional().describe("Timeout in milliseconds (optional - no timeout if not specified)"),
203
203
  metadata: import_zod.z.union([
204
204
  ToolApprovalMetadataSchema,
205
- CommandConfirmationMetadataSchema,
205
+ CommandApprovalMetadataSchema,
206
206
  ElicitationMetadataSchema,
207
207
  CustomApprovalMetadataSchema,
208
208
  DirectoryAccessMetadataSchema
@@ -217,12 +217,12 @@ const ApprovalRequestDetailsSchema = import_zod.z.object({
217
217
  path: ["metadata"]
218
218
  });
219
219
  }
220
- } else if (data.type === import_types.ApprovalType.COMMAND_CONFIRMATION) {
221
- const result = CommandConfirmationMetadataSchema.safeParse(data.metadata);
220
+ } else if (data.type === import_types.ApprovalType.COMMAND_APPROVAL) {
221
+ const result = CommandApprovalMetadataSchema.safeParse(data.metadata);
222
222
  if (!result.success) {
223
223
  ctx.addIssue({
224
224
  code: import_zod.z.ZodIssueCode.custom,
225
- message: "Metadata must match CommandConfirmationMetadataSchema for COMMAND_CONFIRMATION type",
225
+ message: "Metadata must match CommandApprovalMetadataSchema for COMMAND_APPROVAL type",
226
226
  path: ["metadata"]
227
227
  });
228
228
  }
@@ -264,10 +264,10 @@ const ApprovalRequestDetailsSchema = import_zod.z.object({
264
264
  ApprovalTypeSchema,
265
265
  BaseApprovalRequestSchema,
266
266
  BaseApprovalResponseSchema,
267
- CommandConfirmationMetadataSchema,
268
- CommandConfirmationRequestSchema,
269
- CommandConfirmationResponseDataSchema,
270
- CommandConfirmationResponseSchema,
267
+ CommandApprovalMetadataSchema,
268
+ CommandApprovalRequestSchema,
269
+ CommandApprovalResponseDataSchema,
270
+ CommandApprovalResponseSchema,
271
271
  CustomApprovalMetadataSchema,
272
272
  CustomApprovalRequestSchema,
273
273
  CustomApprovalResponseDataSchema,