@qodo/sdk 0.13.4 → 2.0.0-next.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 (764) hide show
  1. package/LICENSE +31 -118
  2. package/README.md +133 -121
  3. package/bin/qodo-skills.mjs +13 -0
  4. package/bundled-skills/code-review/SKILL.md +41 -0
  5. package/bundled-skills/pr-summary/SKILL.md +59 -0
  6. package/bundled-skills/test-gen/SKILL.md +47 -0
  7. package/dist/auth/index.browser.d.ts +38 -0
  8. package/dist/auth/index.browser.d.ts.map +1 -0
  9. package/dist/auth/index.browser.js +62 -0
  10. package/dist/auth/index.browser.js.map +1 -0
  11. package/dist/auth/index.d.ts +44 -30
  12. package/dist/auth/index.d.ts.map +1 -1
  13. package/dist/auth/index.js +57 -110
  14. package/dist/auth/index.js.map +1 -1
  15. package/dist/client/AgentsClient.d.ts +33 -0
  16. package/dist/client/AgentsClient.d.ts.map +1 -0
  17. package/dist/client/AgentsClient.js +40 -0
  18. package/dist/client/AgentsClient.js.map +1 -0
  19. package/dist/client/ArtifactsClient.d.ts +43 -0
  20. package/dist/client/ArtifactsClient.d.ts.map +1 -0
  21. package/dist/client/ArtifactsClient.js +54 -0
  22. package/dist/client/ArtifactsClient.js.map +1 -0
  23. package/dist/client/BulletinClient.d.ts +45 -0
  24. package/dist/client/BulletinClient.d.ts.map +1 -0
  25. package/dist/client/BulletinClient.js +51 -0
  26. package/dist/client/BulletinClient.js.map +1 -0
  27. package/dist/client/InfoClient.d.ts +58 -0
  28. package/dist/client/InfoClient.d.ts.map +1 -0
  29. package/dist/client/InfoClient.js +135 -0
  30. package/dist/client/InfoClient.js.map +1 -0
  31. package/dist/client/PipelineClient.d.ts +162 -0
  32. package/dist/client/PipelineClient.d.ts.map +1 -0
  33. package/dist/client/PipelineClient.js +340 -0
  34. package/dist/client/PipelineClient.js.map +1 -0
  35. package/dist/client/QarRegistryClient.d.ts +396 -0
  36. package/dist/client/QarRegistryClient.d.ts.map +1 -0
  37. package/dist/client/QarRegistryClient.js +536 -0
  38. package/dist/client/QarRegistryClient.js.map +1 -0
  39. package/dist/client/QodoClient.d.ts +296 -0
  40. package/dist/client/QodoClient.d.ts.map +1 -0
  41. package/dist/client/QodoClient.js +803 -0
  42. package/dist/client/QodoClient.js.map +1 -0
  43. package/dist/client/SpecsClient.d.ts +121 -0
  44. package/dist/client/SpecsClient.d.ts.map +1 -0
  45. package/dist/client/SpecsClient.js +252 -0
  46. package/dist/client/SpecsClient.js.map +1 -0
  47. package/dist/client/StateClient.d.ts +35 -0
  48. package/dist/client/StateClient.d.ts.map +1 -0
  49. package/dist/client/StateClient.js +36 -0
  50. package/dist/client/StateClient.js.map +1 -0
  51. package/dist/client/TaskClient.d.ts +706 -0
  52. package/dist/client/TaskClient.d.ts.map +1 -0
  53. package/dist/client/TaskClient.js +2522 -0
  54. package/dist/client/TaskClient.js.map +1 -0
  55. package/dist/client/ToolClient.d.ts +278 -0
  56. package/dist/client/ToolClient.d.ts.map +1 -0
  57. package/dist/client/ToolClient.js +1115 -0
  58. package/dist/client/ToolClient.js.map +1 -0
  59. package/dist/client/a2a/index.d.ts +10 -0
  60. package/dist/client/a2a/index.d.ts.map +1 -0
  61. package/dist/client/a2a/index.js +9 -0
  62. package/dist/client/a2a/index.js.map +1 -0
  63. package/dist/client/a2a/registerA2A.d.ts +170 -0
  64. package/dist/client/a2a/registerA2A.d.ts.map +1 -0
  65. package/dist/client/a2a/registerA2A.js +85 -0
  66. package/dist/client/a2a/registerA2A.js.map +1 -0
  67. package/dist/client/connection.d.ts +800 -0
  68. package/dist/client/connection.d.ts.map +1 -0
  69. package/dist/client/connection.js +2020 -0
  70. package/dist/client/connection.js.map +1 -0
  71. package/dist/client/errors.d.ts +735 -0
  72. package/dist/client/errors.d.ts.map +1 -0
  73. package/dist/client/errors.js +921 -0
  74. package/dist/client/errors.js.map +1 -0
  75. package/dist/client/index.d.ts +26 -0
  76. package/dist/client/index.d.ts.map +1 -0
  77. package/dist/client/index.js +20 -0
  78. package/dist/client/index.js.map +1 -0
  79. package/dist/client/inlineGraph.d.ts +66 -0
  80. package/dist/client/inlineGraph.d.ts.map +1 -0
  81. package/dist/client/inlineGraph.js +500 -0
  82. package/dist/client/inlineGraph.js.map +1 -0
  83. package/dist/client/internal/thenable.d.ts +27 -0
  84. package/dist/client/internal/thenable.d.ts.map +1 -0
  85. package/dist/client/internal/thenable.js +31 -0
  86. package/dist/client/internal/thenable.js.map +1 -0
  87. package/dist/client/iterator.d.ts +32 -0
  88. package/dist/client/iterator.d.ts.map +1 -0
  89. package/dist/client/iterator.js +73 -0
  90. package/dist/client/iterator.js.map +1 -0
  91. package/dist/client/mcp/McpClientPool.browser.d.ts +76 -0
  92. package/dist/client/mcp/McpClientPool.browser.d.ts.map +1 -0
  93. package/dist/client/mcp/McpClientPool.browser.js +78 -0
  94. package/dist/client/mcp/McpClientPool.browser.js.map +1 -0
  95. package/dist/client/mcp/McpClientPool.d.ts +236 -0
  96. package/dist/client/mcp/McpClientPool.d.ts.map +1 -0
  97. package/dist/client/mcp/McpClientPool.js +585 -0
  98. package/dist/client/mcp/McpClientPool.js.map +1 -0
  99. package/dist/client/mcp/projection.d.ts +109 -0
  100. package/dist/client/mcp/projection.d.ts.map +1 -0
  101. package/dist/client/mcp/projection.js +446 -0
  102. package/dist/client/mcp/projection.js.map +1 -0
  103. package/dist/client/mcp/substituteEnv.browser.d.ts +18 -0
  104. package/dist/client/mcp/substituteEnv.browser.d.ts.map +1 -0
  105. package/dist/client/mcp/substituteEnv.browser.js +20 -0
  106. package/dist/client/mcp/substituteEnv.browser.js.map +1 -0
  107. package/dist/client/mcp/substituteEnv.d.ts +45 -0
  108. package/dist/client/mcp/substituteEnv.d.ts.map +1 -0
  109. package/dist/client/mcp/substituteEnv.js +63 -0
  110. package/dist/client/mcp/substituteEnv.js.map +1 -0
  111. package/dist/client/observers.d.ts +57 -0
  112. package/dist/client/observers.d.ts.map +1 -0
  113. package/dist/client/observers.js +203 -0
  114. package/dist/client/observers.js.map +1 -0
  115. package/dist/client/options.d.ts +269 -0
  116. package/dist/client/options.d.ts.map +1 -0
  117. package/dist/client/options.js +9 -0
  118. package/dist/client/options.js.map +1 -0
  119. package/dist/client/tools/_readlineApprovalPrompt.browser.d.ts +17 -0
  120. package/dist/client/tools/_readlineApprovalPrompt.browser.d.ts.map +1 -0
  121. package/dist/client/tools/_readlineApprovalPrompt.browser.js +24 -0
  122. package/dist/client/tools/_readlineApprovalPrompt.browser.js.map +1 -0
  123. package/dist/client/tools/_readlineApprovalPrompt.d.ts +33 -0
  124. package/dist/client/tools/_readlineApprovalPrompt.d.ts.map +1 -0
  125. package/dist/client/tools/_readlineApprovalPrompt.js +90 -0
  126. package/dist/client/tools/_readlineApprovalPrompt.js.map +1 -0
  127. package/dist/client/tools/approval.d.ts +280 -0
  128. package/dist/client/tools/approval.d.ts.map +1 -0
  129. package/dist/client/tools/approval.js +229 -0
  130. package/dist/client/tools/approval.js.map +1 -0
  131. package/dist/client/tools/bindFunctionToolDefs.d.ts +156 -0
  132. package/dist/client/tools/bindFunctionToolDefs.d.ts.map +1 -0
  133. package/dist/client/tools/bindFunctionToolDefs.js +360 -0
  134. package/dist/client/tools/bindFunctionToolDefs.js.map +1 -0
  135. package/dist/client/tools/defineFunctionTool.d.ts +277 -0
  136. package/dist/client/tools/defineFunctionTool.d.ts.map +1 -0
  137. package/dist/client/tools/defineFunctionTool.js +190 -0
  138. package/dist/client/tools/defineFunctionTool.js.map +1 -0
  139. package/dist/client/transport.browser.d.ts +20 -0
  140. package/dist/client/transport.browser.d.ts.map +1 -0
  141. package/dist/client/transport.browser.js +29 -0
  142. package/dist/client/transport.browser.js.map +1 -0
  143. package/dist/client/transport.d.ts +47 -0
  144. package/dist/client/transport.d.ts.map +1 -0
  145. package/dist/client/transport.js +102 -0
  146. package/dist/client/transport.js.map +1 -0
  147. package/dist/client/transport.shared.d.ts +30 -0
  148. package/dist/client/transport.shared.d.ts.map +1 -0
  149. package/dist/client/transport.shared.js +40 -0
  150. package/dist/client/transport.shared.js.map +1 -0
  151. package/dist/client/uuid.d.ts +32 -0
  152. package/dist/client/uuid.d.ts.map +1 -0
  153. package/dist/client/uuid.js +65 -0
  154. package/dist/client/uuid.js.map +1 -0
  155. package/dist/index.d.ts +88 -39
  156. package/dist/index.d.ts.map +1 -1
  157. package/dist/index.js +166 -43
  158. package/dist/index.js.map +1 -1
  159. package/dist/observability/attributes.d.ts +136 -0
  160. package/dist/observability/attributes.d.ts.map +1 -0
  161. package/dist/observability/attributes.js +184 -0
  162. package/dist/observability/attributes.js.map +1 -0
  163. package/dist/observability/index.d.ts +14 -0
  164. package/dist/observability/index.d.ts.map +1 -0
  165. package/dist/observability/index.js +11 -0
  166. package/dist/observability/index.js.map +1 -0
  167. package/dist/observability/resolveOTel.browser.d.ts +13 -0
  168. package/dist/observability/resolveOTel.browser.d.ts.map +1 -0
  169. package/dist/observability/resolveOTel.browser.js +14 -0
  170. package/dist/observability/resolveOTel.browser.js.map +1 -0
  171. package/dist/observability/resolveOTel.d.ts +28 -0
  172. package/dist/observability/resolveOTel.d.ts.map +1 -0
  173. package/dist/observability/resolveOTel.js +74 -0
  174. package/dist/observability/resolveOTel.js.map +1 -0
  175. package/dist/observability/spans.d.ts +198 -0
  176. package/dist/observability/spans.d.ts.map +1 -0
  177. package/dist/observability/spans.js +300 -0
  178. package/dist/observability/spans.js.map +1 -0
  179. package/dist/observability/traceContext.d.ts +51 -0
  180. package/dist/observability/traceContext.d.ts.map +1 -0
  181. package/dist/observability/traceContext.js +151 -0
  182. package/dist/observability/traceContext.js.map +1 -0
  183. package/dist/observability/transportMetrics.d.ts +58 -0
  184. package/dist/observability/transportMetrics.d.ts.map +1 -0
  185. package/dist/observability/transportMetrics.js +55 -0
  186. package/dist/observability/transportMetrics.js.map +1 -0
  187. package/dist/qar/agentSpec.d.ts +93 -0
  188. package/dist/qar/agentSpec.d.ts.map +1 -0
  189. package/dist/qar/agentSpec.js +184 -0
  190. package/dist/qar/agentSpec.js.map +1 -0
  191. package/dist/qar/clientEvents.d.ts +86 -0
  192. package/dist/qar/clientEvents.d.ts.map +1 -0
  193. package/dist/qar/clientEvents.js +36 -0
  194. package/dist/qar/clientEvents.js.map +1 -0
  195. package/dist/qar/envelopes.d.ts +227 -0
  196. package/dist/qar/envelopes.d.ts.map +1 -0
  197. package/dist/qar/envelopes.js +67 -0
  198. package/dist/qar/envelopes.js.map +1 -0
  199. package/dist/qar/generated/envelope.d.ts +332 -0
  200. package/dist/qar/generated/envelope.d.ts.map +1 -0
  201. package/dist/qar/generated/envelope.js +15 -0
  202. package/dist/qar/generated/envelope.js.map +1 -0
  203. package/dist/qar/generated/qar-info.d.ts +76 -0
  204. package/dist/qar/generated/qar-info.d.ts.map +1 -0
  205. package/dist/qar/generated/qar-info.js +15 -0
  206. package/dist/qar/generated/qar-info.js.map +1 -0
  207. package/dist/qar/generated/qodo-task-start-payload.d.ts +54 -0
  208. package/dist/qar/generated/qodo-task-start-payload.d.ts.map +1 -0
  209. package/dist/qar/generated/qodo-task-start-payload.js +15 -0
  210. package/dist/qar/generated/qodo-task-start-payload.js.map +1 -0
  211. package/dist/qar/ids.d.ts +19 -0
  212. package/dist/qar/ids.d.ts.map +1 -0
  213. package/dist/qar/ids.js +11 -0
  214. package/dist/qar/ids.js.map +1 -0
  215. package/dist/qar/index.d.ts +24 -0
  216. package/dist/qar/index.d.ts.map +1 -0
  217. package/dist/qar/index.js +16 -0
  218. package/dist/qar/index.js.map +1 -0
  219. package/dist/qar/info.d.ts +37 -0
  220. package/dist/qar/info.d.ts.map +1 -0
  221. package/dist/qar/info.js +17 -0
  222. package/dist/qar/info.js.map +1 -0
  223. package/dist/qar/json.d.ts +14 -0
  224. package/dist/qar/json.d.ts.map +1 -0
  225. package/dist/qar/json.js +9 -0
  226. package/dist/qar/json.js.map +1 -0
  227. package/dist/qar/payloads.d.ts +480 -0
  228. package/dist/qar/payloads.d.ts.map +1 -0
  229. package/dist/qar/payloads.js +37 -0
  230. package/dist/qar/payloads.js.map +1 -0
  231. package/dist/qar/specs.d.ts +604 -0
  232. package/dist/qar/specs.d.ts.map +1 -0
  233. package/dist/qar/specs.js +29 -0
  234. package/dist/qar/specs.js.map +1 -0
  235. package/dist/qar/taskEvents.d.ts +25 -0
  236. package/dist/qar/taskEvents.d.ts.map +1 -0
  237. package/dist/qar/taskEvents.js +22 -0
  238. package/dist/qar/taskEvents.js.map +1 -0
  239. package/dist/qar/trace.d.ts +12 -0
  240. package/dist/qar/trace.d.ts.map +1 -0
  241. package/dist/qar/trace.js +12 -0
  242. package/dist/qar/trace.js.map +1 -0
  243. package/dist/skills/activation.d.ts +177 -0
  244. package/dist/skills/activation.d.ts.map +1 -0
  245. package/dist/skills/activation.js +428 -0
  246. package/dist/skills/activation.js.map +1 -0
  247. package/dist/skills/cli/index.browser.d.ts +18 -0
  248. package/dist/skills/cli/index.browser.d.ts.map +1 -0
  249. package/dist/skills/cli/index.browser.js +27 -0
  250. package/dist/skills/cli/index.browser.js.map +1 -0
  251. package/dist/skills/cli/index.d.ts +37 -0
  252. package/dist/skills/cli/index.d.ts.map +1 -0
  253. package/dist/skills/cli/index.js +494 -0
  254. package/dist/skills/cli/index.js.map +1 -0
  255. package/dist/skills/events.d.ts +255 -0
  256. package/dist/skills/events.d.ts.map +1 -0
  257. package/dist/skills/events.js +224 -0
  258. package/dist/skills/events.js.map +1 -0
  259. package/dist/skills/index.d.ts +45 -0
  260. package/dist/skills/index.d.ts.map +1 -0
  261. package/dist/skills/index.js +34 -0
  262. package/dist/skills/index.js.map +1 -0
  263. package/dist/skills/inject.d.ts +57 -0
  264. package/dist/skills/inject.d.ts.map +1 -0
  265. package/dist/skills/inject.js +162 -0
  266. package/dist/skills/inject.js.map +1 -0
  267. package/dist/skills/lockfile.browser.d.ts +56 -0
  268. package/dist/skills/lockfile.browser.d.ts.map +1 -0
  269. package/dist/skills/lockfile.browser.js +55 -0
  270. package/dist/skills/lockfile.browser.js.map +1 -0
  271. package/dist/skills/lockfile.d.ts +137 -0
  272. package/dist/skills/lockfile.d.ts.map +1 -0
  273. package/dist/skills/lockfile.js +423 -0
  274. package/dist/skills/lockfile.js.map +1 -0
  275. package/dist/skills/manager.browser.d.ts +94 -0
  276. package/dist/skills/manager.browser.d.ts.map +1 -0
  277. package/dist/skills/manager.browser.js +159 -0
  278. package/dist/skills/manager.browser.js.map +1 -0
  279. package/dist/skills/manager.d.ts +362 -0
  280. package/dist/skills/manager.d.ts.map +1 -0
  281. package/dist/skills/manager.js +1386 -0
  282. package/dist/skills/manager.js.map +1 -0
  283. package/dist/skills/mcp/index.d.ts +15 -0
  284. package/dist/skills/mcp/index.d.ts.map +1 -0
  285. package/dist/skills/mcp/index.js +12 -0
  286. package/dist/skills/mcp/index.js.map +1 -0
  287. package/dist/skills/mcp/path.browser.d.ts +27 -0
  288. package/dist/skills/mcp/path.browser.d.ts.map +1 -0
  289. package/dist/skills/mcp/path.browser.js +33 -0
  290. package/dist/skills/mcp/path.browser.js.map +1 -0
  291. package/dist/skills/mcp/path.d.ts +57 -0
  292. package/dist/skills/mcp/path.d.ts.map +1 -0
  293. package/dist/skills/mcp/path.js +150 -0
  294. package/dist/skills/mcp/path.js.map +1 -0
  295. package/dist/skills/mcp/server.browser.d.ts +32 -0
  296. package/dist/skills/mcp/server.browser.d.ts.map +1 -0
  297. package/dist/skills/mcp/server.browser.js +53 -0
  298. package/dist/skills/mcp/server.browser.js.map +1 -0
  299. package/dist/skills/mcp/server.d.ts +144 -0
  300. package/dist/skills/mcp/server.d.ts.map +1 -0
  301. package/dist/skills/mcp/server.js +841 -0
  302. package/dist/skills/mcp/server.js.map +1 -0
  303. package/dist/skills/mcp/types.d.ts +72 -0
  304. package/dist/skills/mcp/types.d.ts.map +1 -0
  305. package/dist/skills/mcp/types.js +20 -0
  306. package/dist/skills/mcp/types.js.map +1 -0
  307. package/dist/skills/mcp/wireDefs.d.ts +58 -0
  308. package/dist/skills/mcp/wireDefs.d.ts.map +1 -0
  309. package/dist/skills/mcp/wireDefs.js +141 -0
  310. package/dist/skills/mcp/wireDefs.js.map +1 -0
  311. package/dist/skills/parser.d.ts +63 -0
  312. package/dist/skills/parser.d.ts.map +1 -0
  313. package/dist/skills/parser.js +755 -0
  314. package/dist/skills/parser.js.map +1 -0
  315. package/dist/skills/prefilter.d.ts +104 -0
  316. package/dist/skills/prefilter.d.ts.map +1 -0
  317. package/dist/skills/prefilter.js +398 -0
  318. package/dist/skills/prefilter.js.map +1 -0
  319. package/dist/skills/preprocess.d.ts +169 -0
  320. package/dist/skills/preprocess.d.ts.map +1 -0
  321. package/dist/skills/preprocess.js +535 -0
  322. package/dist/skills/preprocess.js.map +1 -0
  323. package/dist/skills/render.d.ts +83 -0
  324. package/dist/skills/render.d.ts.map +1 -0
  325. package/dist/skills/render.js +397 -0
  326. package/dist/skills/render.js.map +1 -0
  327. package/dist/skills/sources/index.browser.d.ts +29 -0
  328. package/dist/skills/sources/index.browser.d.ts.map +1 -0
  329. package/dist/skills/sources/index.browser.js +16 -0
  330. package/dist/skills/sources/index.browser.js.map +1 -0
  331. package/dist/skills/sources/index.d.ts +59 -0
  332. package/dist/skills/sources/index.d.ts.map +1 -0
  333. package/dist/skills/sources/index.js +471 -0
  334. package/dist/skills/sources/index.js.map +1 -0
  335. package/dist/skills/sources/walk.browser.d.ts +17 -0
  336. package/dist/skills/sources/walk.browser.d.ts.map +1 -0
  337. package/dist/skills/sources/walk.browser.js +19 -0
  338. package/dist/skills/sources/walk.browser.js.map +1 -0
  339. package/dist/skills/sources/walk.d.ts +68 -0
  340. package/dist/skills/sources/walk.d.ts.map +1 -0
  341. package/dist/skills/sources/walk.js +264 -0
  342. package/dist/skills/sources/walk.js.map +1 -0
  343. package/dist/skills/substitute.d.ts +87 -0
  344. package/dist/skills/substitute.d.ts.map +1 -0
  345. package/dist/skills/substitute.js +322 -0
  346. package/dist/skills/substitute.js.map +1 -0
  347. package/dist/skills/testing/SkillKit.browser.d.ts +62 -0
  348. package/dist/skills/testing/SkillKit.browser.d.ts.map +1 -0
  349. package/dist/skills/testing/SkillKit.browser.js +41 -0
  350. package/dist/skills/testing/SkillKit.browser.js.map +1 -0
  351. package/dist/skills/testing/SkillKit.d.ts +130 -0
  352. package/dist/skills/testing/SkillKit.d.ts.map +1 -0
  353. package/dist/skills/testing/SkillKit.js +316 -0
  354. package/dist/skills/testing/SkillKit.js.map +1 -0
  355. package/dist/skills/testing/index.d.ts +9 -0
  356. package/dist/skills/testing/index.d.ts.map +1 -0
  357. package/dist/skills/testing/index.js +8 -0
  358. package/dist/skills/testing/index.js.map +1 -0
  359. package/dist/skills/trust.d.ts +72 -0
  360. package/dist/skills/trust.d.ts.map +1 -0
  361. package/dist/skills/trust.js +183 -0
  362. package/dist/skills/trust.js.map +1 -0
  363. package/dist/skills/types.d.ts +627 -0
  364. package/dist/skills/types.d.ts.map +1 -0
  365. package/dist/skills/types.js +85 -0
  366. package/dist/skills/types.js.map +1 -0
  367. package/dist/skills/validator.d.ts +95 -0
  368. package/dist/skills/validator.d.ts.map +1 -0
  369. package/dist/skills/validator.js +486 -0
  370. package/dist/skills/validator.js.map +1 -0
  371. package/dist/tracing/PipelineTracer.d.ts +35 -22
  372. package/dist/tracing/PipelineTracer.d.ts.map +1 -1
  373. package/dist/tracing/PipelineTracer.js +106 -61
  374. package/dist/tracing/PipelineTracer.js.map +1 -1
  375. package/dist/tracing/SdkTracer.d.ts +63 -61
  376. package/dist/tracing/SdkTracer.d.ts.map +1 -1
  377. package/dist/tracing/SdkTracer.js +185 -177
  378. package/dist/tracing/SdkTracer.js.map +1 -1
  379. package/dist/tracing/index.d.ts +10 -1
  380. package/dist/tracing/index.d.ts.map +1 -1
  381. package/dist/tracing/index.js +9 -0
  382. package/dist/tracing/index.js.map +1 -1
  383. package/dist/tracing/types.d.ts +89 -16
  384. package/dist/tracing/types.d.ts.map +1 -1
  385. package/dist/tracing/types.js +17 -4
  386. package/dist/tracing/types.js.map +1 -1
  387. package/dist/types.d.ts +6 -1
  388. package/dist/types.d.ts.map +1 -1
  389. package/dist/types.js +4 -0
  390. package/dist/types.js.map +1 -1
  391. package/dist/version.d.ts.map +1 -1
  392. package/dist/version.js +10 -20
  393. package/dist/version.js.map +1 -1
  394. package/package.json +53 -39
  395. package/.claude/skills/qodo-agent/SKILL.md +0 -974
  396. package/.claude/skills/qodo-agent/assets/programmatic-agent.ts +0 -407
  397. package/.claude/skills/qodo-agent/references/builtin-tools.md +0 -342
  398. package/.claude/skills/qodo-agent/references/common-issues.md +0 -537
  399. package/bin/rg +0 -0
  400. package/dist/api/agent.d.ts +0 -105
  401. package/dist/api/agent.d.ts.map +0 -1
  402. package/dist/api/agent.js +0 -963
  403. package/dist/api/agent.js.map +0 -1
  404. package/dist/api/analytics.d.ts +0 -43
  405. package/dist/api/analytics.d.ts.map +0 -1
  406. package/dist/api/analytics.js +0 -163
  407. package/dist/api/analytics.js.map +0 -1
  408. package/dist/api/http.d.ts +0 -5
  409. package/dist/api/http.d.ts.map +0 -1
  410. package/dist/api/http.js +0 -62
  411. package/dist/api/http.js.map +0 -1
  412. package/dist/api/index.d.ts +0 -12
  413. package/dist/api/index.d.ts.map +0 -1
  414. package/dist/api/index.js +0 -17
  415. package/dist/api/index.js.map +0 -1
  416. package/dist/api/taskTracking.d.ts +0 -54
  417. package/dist/api/taskTracking.d.ts.map +0 -1
  418. package/dist/api/taskTracking.js +0 -208
  419. package/dist/api/taskTracking.js.map +0 -1
  420. package/dist/api/types.d.ts +0 -93
  421. package/dist/api/types.d.ts.map +0 -1
  422. package/dist/api/types.js +0 -2
  423. package/dist/api/types.js.map +0 -1
  424. package/dist/api/utils.d.ts +0 -8
  425. package/dist/api/utils.d.ts.map +0 -1
  426. package/dist/api/utils.js +0 -63
  427. package/dist/api/utils.js.map +0 -1
  428. package/dist/api/websocket.d.ts +0 -203
  429. package/dist/api/websocket.d.ts.map +0 -1
  430. package/dist/api/websocket.js +0 -1166
  431. package/dist/api/websocket.js.map +0 -1
  432. package/dist/bin/install-skill.d.ts +0 -14
  433. package/dist/bin/install-skill.d.ts.map +0 -1
  434. package/dist/bin/install-skill.js +0 -125
  435. package/dist/bin/install-skill.js.map +0 -1
  436. package/dist/bin/run-helpers.d.ts +0 -34
  437. package/dist/bin/run-helpers.d.ts.map +0 -1
  438. package/dist/bin/run-helpers.js +0 -186
  439. package/dist/bin/run-helpers.js.map +0 -1
  440. package/dist/bin/run.d.ts +0 -13
  441. package/dist/bin/run.d.ts.map +0 -1
  442. package/dist/bin/run.js +0 -57
  443. package/dist/bin/run.js.map +0 -1
  444. package/dist/clients/index.d.ts +0 -10
  445. package/dist/clients/index.d.ts.map +0 -1
  446. package/dist/clients/index.js +0 -8
  447. package/dist/clients/index.js.map +0 -1
  448. package/dist/clients/info/InfoClient.d.ts +0 -37
  449. package/dist/clients/info/InfoClient.d.ts.map +0 -1
  450. package/dist/clients/info/InfoClient.js +0 -69
  451. package/dist/clients/info/InfoClient.js.map +0 -1
  452. package/dist/clients/info/index.d.ts +0 -4
  453. package/dist/clients/info/index.d.ts.map +0 -1
  454. package/dist/clients/info/index.js +0 -2
  455. package/dist/clients/info/index.js.map +0 -1
  456. package/dist/clients/info/types.d.ts +0 -21
  457. package/dist/clients/info/types.d.ts.map +0 -1
  458. package/dist/clients/info/types.js +0 -2
  459. package/dist/clients/info/types.js.map +0 -1
  460. package/dist/clients/sessions/SessionsClient.d.ts +0 -34
  461. package/dist/clients/sessions/SessionsClient.d.ts.map +0 -1
  462. package/dist/clients/sessions/SessionsClient.js +0 -71
  463. package/dist/clients/sessions/SessionsClient.js.map +0 -1
  464. package/dist/clients/sessions/index.d.ts +0 -4
  465. package/dist/clients/sessions/index.d.ts.map +0 -1
  466. package/dist/clients/sessions/index.js +0 -2
  467. package/dist/clients/sessions/index.js.map +0 -1
  468. package/dist/clients/sessions/types.d.ts +0 -20
  469. package/dist/clients/sessions/types.d.ts.map +0 -1
  470. package/dist/clients/sessions/types.js +0 -2
  471. package/dist/clients/sessions/types.js.map +0 -1
  472. package/dist/clients/tools/ToolsClient.d.ts +0 -39
  473. package/dist/clients/tools/ToolsClient.d.ts.map +0 -1
  474. package/dist/clients/tools/ToolsClient.js +0 -95
  475. package/dist/clients/tools/ToolsClient.js.map +0 -1
  476. package/dist/clients/tools/index.d.ts +0 -4
  477. package/dist/clients/tools/index.d.ts.map +0 -1
  478. package/dist/clients/tools/index.js +0 -2
  479. package/dist/clients/tools/index.js.map +0 -1
  480. package/dist/clients/tools/types.d.ts +0 -14
  481. package/dist/clients/tools/types.d.ts.map +0 -1
  482. package/dist/clients/tools/types.js +0 -2
  483. package/dist/clients/tools/types.js.map +0 -1
  484. package/dist/config/ConfigManager.d.ts +0 -43
  485. package/dist/config/ConfigManager.d.ts.map +0 -1
  486. package/dist/config/ConfigManager.js +0 -472
  487. package/dist/config/ConfigManager.js.map +0 -1
  488. package/dist/config/index.d.ts +0 -6
  489. package/dist/config/index.d.ts.map +0 -1
  490. package/dist/config/index.js +0 -7
  491. package/dist/config/index.js.map +0 -1
  492. package/dist/config/urlConfig.d.ts +0 -15
  493. package/dist/config/urlConfig.d.ts.map +0 -1
  494. package/dist/config/urlConfig.js +0 -75
  495. package/dist/config/urlConfig.js.map +0 -1
  496. package/dist/constants/errors.d.ts +0 -2
  497. package/dist/constants/errors.d.ts.map +0 -1
  498. package/dist/constants/errors.js +0 -2
  499. package/dist/constants/errors.js.map +0 -1
  500. package/dist/constants/index.d.ts +0 -7
  501. package/dist/constants/index.d.ts.map +0 -1
  502. package/dist/constants/index.js +0 -11
  503. package/dist/constants/index.js.map +0 -1
  504. package/dist/constants/tools.d.ts +0 -4
  505. package/dist/constants/tools.d.ts.map +0 -1
  506. package/dist/constants/tools.js +0 -4
  507. package/dist/constants/tools.js.map +0 -1
  508. package/dist/constants/versions.d.ts +0 -2
  509. package/dist/constants/versions.d.ts.map +0 -1
  510. package/dist/constants/versions.js +0 -2
  511. package/dist/constants/versions.js.map +0 -1
  512. package/dist/context/buildUserContext.d.ts +0 -18
  513. package/dist/context/buildUserContext.d.ts.map +0 -1
  514. package/dist/context/buildUserContext.js +0 -34
  515. package/dist/context/buildUserContext.js.map +0 -1
  516. package/dist/context/index.d.ts +0 -9
  517. package/dist/context/index.d.ts.map +0 -1
  518. package/dist/context/index.js +0 -9
  519. package/dist/context/index.js.map +0 -1
  520. package/dist/context/messageManager.d.ts +0 -42
  521. package/dist/context/messageManager.d.ts.map +0 -1
  522. package/dist/context/messageManager.js +0 -322
  523. package/dist/context/messageManager.js.map +0 -1
  524. package/dist/context/taskFocus.d.ts +0 -2
  525. package/dist/context/taskFocus.d.ts.map +0 -1
  526. package/dist/context/taskFocus.js +0 -26
  527. package/dist/context/taskFocus.js.map +0 -1
  528. package/dist/context/userInput.d.ts +0 -3
  529. package/dist/context/userInput.d.ts.map +0 -1
  530. package/dist/context/userInput.js +0 -20
  531. package/dist/context/userInput.js.map +0 -1
  532. package/dist/mcp/MCPManager.d.ts +0 -109
  533. package/dist/mcp/MCPManager.d.ts.map +0 -1
  534. package/dist/mcp/MCPManager.js +0 -592
  535. package/dist/mcp/MCPManager.js.map +0 -1
  536. package/dist/mcp/approvedTools.d.ts +0 -4
  537. package/dist/mcp/approvedTools.d.ts.map +0 -1
  538. package/dist/mcp/approvedTools.js +0 -19
  539. package/dist/mcp/approvedTools.js.map +0 -1
  540. package/dist/mcp/baseServer.d.ts +0 -75
  541. package/dist/mcp/baseServer.d.ts.map +0 -1
  542. package/dist/mcp/baseServer.js +0 -107
  543. package/dist/mcp/baseServer.js.map +0 -1
  544. package/dist/mcp/builtinServers.d.ts +0 -15
  545. package/dist/mcp/builtinServers.d.ts.map +0 -1
  546. package/dist/mcp/builtinServers.js +0 -141
  547. package/dist/mcp/builtinServers.js.map +0 -1
  548. package/dist/mcp/dynamicBEServer.d.ts +0 -20
  549. package/dist/mcp/dynamicBEServer.d.ts.map +0 -1
  550. package/dist/mcp/dynamicBEServer.js +0 -52
  551. package/dist/mcp/dynamicBEServer.js.map +0 -1
  552. package/dist/mcp/index.d.ts +0 -18
  553. package/dist/mcp/index.d.ts.map +0 -1
  554. package/dist/mcp/index.js +0 -23
  555. package/dist/mcp/index.js.map +0 -1
  556. package/dist/mcp/mcpInitialization.d.ts +0 -2
  557. package/dist/mcp/mcpInitialization.d.ts.map +0 -1
  558. package/dist/mcp/mcpInitialization.js +0 -56
  559. package/dist/mcp/mcpInitialization.js.map +0 -1
  560. package/dist/mcp/servers/filesystem.d.ts +0 -44
  561. package/dist/mcp/servers/filesystem.d.ts.map +0 -1
  562. package/dist/mcp/servers/filesystem.js +0 -776
  563. package/dist/mcp/servers/filesystem.js.map +0 -1
  564. package/dist/mcp/servers/git.d.ts +0 -18
  565. package/dist/mcp/servers/git.d.ts.map +0 -1
  566. package/dist/mcp/servers/git.js +0 -441
  567. package/dist/mcp/servers/git.js.map +0 -1
  568. package/dist/mcp/servers/ripgrep.d.ts +0 -39
  569. package/dist/mcp/servers/ripgrep.d.ts.map +0 -1
  570. package/dist/mcp/servers/ripgrep.js +0 -550
  571. package/dist/mcp/servers/ripgrep.js.map +0 -1
  572. package/dist/mcp/servers/shell.d.ts +0 -20
  573. package/dist/mcp/servers/shell.d.ts.map +0 -1
  574. package/dist/mcp/servers/shell.js +0 -519
  575. package/dist/mcp/servers/shell.js.map +0 -1
  576. package/dist/mcp/serversRegistry.d.ts +0 -55
  577. package/dist/mcp/serversRegistry.d.ts.map +0 -1
  578. package/dist/mcp/serversRegistry.js +0 -416
  579. package/dist/mcp/serversRegistry.js.map +0 -1
  580. package/dist/mcp/toolProcessor.d.ts +0 -82
  581. package/dist/mcp/toolProcessor.d.ts.map +0 -1
  582. package/dist/mcp/toolProcessor.js +0 -392
  583. package/dist/mcp/toolProcessor.js.map +0 -1
  584. package/dist/mcp/types.d.ts +0 -29
  585. package/dist/mcp/types.d.ts.map +0 -1
  586. package/dist/mcp/types.js +0 -2
  587. package/dist/mcp/types.js.map +0 -1
  588. package/dist/messages/index.d.ts +0 -8
  589. package/dist/messages/index.d.ts.map +0 -1
  590. package/dist/messages/index.js +0 -7
  591. package/dist/messages/index.js.map +0 -1
  592. package/dist/messages/openai.d.ts +0 -26
  593. package/dist/messages/openai.d.ts.map +0 -1
  594. package/dist/messages/openai.js +0 -55
  595. package/dist/messages/openai.js.map +0 -1
  596. package/dist/messages/types.d.ts +0 -73
  597. package/dist/messages/types.d.ts.map +0 -1
  598. package/dist/messages/types.js +0 -78
  599. package/dist/messages/types.js.map +0 -1
  600. package/dist/parser/index.d.ts +0 -72
  601. package/dist/parser/index.d.ts.map +0 -1
  602. package/dist/parser/index.js +0 -967
  603. package/dist/parser/index.js.map +0 -1
  604. package/dist/parser/types.d.ts +0 -153
  605. package/dist/parser/types.d.ts.map +0 -1
  606. package/dist/parser/types.js +0 -6
  607. package/dist/parser/types.js.map +0 -1
  608. package/dist/parser/utils.d.ts +0 -18
  609. package/dist/parser/utils.d.ts.map +0 -1
  610. package/dist/parser/utils.js +0 -64
  611. package/dist/parser/utils.js.map +0 -1
  612. package/dist/sdk/QodoSDK.d.ts +0 -218
  613. package/dist/sdk/QodoSDK.d.ts.map +0 -1
  614. package/dist/sdk/QodoSDK.js +0 -1115
  615. package/dist/sdk/QodoSDK.js.map +0 -1
  616. package/dist/sdk/artifacts.d.ts +0 -156
  617. package/dist/sdk/artifacts.d.ts.map +0 -1
  618. package/dist/sdk/artifacts.js +0 -166
  619. package/dist/sdk/artifacts.js.map +0 -1
  620. package/dist/sdk/bootstrap.d.ts +0 -16
  621. package/dist/sdk/bootstrap.d.ts.map +0 -1
  622. package/dist/sdk/bootstrap.js +0 -28
  623. package/dist/sdk/bootstrap.js.map +0 -1
  624. package/dist/sdk/builders.d.ts +0 -54
  625. package/dist/sdk/builders.d.ts.map +0 -1
  626. package/dist/sdk/builders.js +0 -117
  627. package/dist/sdk/builders.js.map +0 -1
  628. package/dist/sdk/defaults.d.ts +0 -11
  629. package/dist/sdk/defaults.d.ts.map +0 -1
  630. package/dist/sdk/defaults.js +0 -39
  631. package/dist/sdk/defaults.js.map +0 -1
  632. package/dist/sdk/discovery.d.ts +0 -2
  633. package/dist/sdk/discovery.d.ts.map +0 -1
  634. package/dist/sdk/discovery.js +0 -25
  635. package/dist/sdk/discovery.js.map +0 -1
  636. package/dist/sdk/events.d.ts +0 -269
  637. package/dist/sdk/events.d.ts.map +0 -1
  638. package/dist/sdk/events.js +0 -69
  639. package/dist/sdk/events.js.map +0 -1
  640. package/dist/sdk/exit-expression.d.ts +0 -13
  641. package/dist/sdk/exit-expression.d.ts.map +0 -1
  642. package/dist/sdk/exit-expression.js +0 -35
  643. package/dist/sdk/exit-expression.js.map +0 -1
  644. package/dist/sdk/index.d.ts +0 -17
  645. package/dist/sdk/index.d.ts.map +0 -1
  646. package/dist/sdk/index.js +0 -17
  647. package/dist/sdk/index.js.map +0 -1
  648. package/dist/sdk/middleware.d.ts +0 -59
  649. package/dist/sdk/middleware.d.ts.map +0 -1
  650. package/dist/sdk/middleware.js +0 -69
  651. package/dist/sdk/middleware.js.map +0 -1
  652. package/dist/sdk/pipeline/PipelineBuilder.d.ts +0 -79
  653. package/dist/sdk/pipeline/PipelineBuilder.d.ts.map +0 -1
  654. package/dist/sdk/pipeline/PipelineBuilder.js +0 -129
  655. package/dist/sdk/pipeline/PipelineBuilder.js.map +0 -1
  656. package/dist/sdk/pipeline/PipelineRunner.d.ts +0 -28
  657. package/dist/sdk/pipeline/PipelineRunner.d.ts.map +0 -1
  658. package/dist/sdk/pipeline/PipelineRunner.js +0 -326
  659. package/dist/sdk/pipeline/PipelineRunner.js.map +0 -1
  660. package/dist/sdk/pipeline/compiler.d.ts +0 -24
  661. package/dist/sdk/pipeline/compiler.d.ts.map +0 -1
  662. package/dist/sdk/pipeline/compiler.js +0 -199
  663. package/dist/sdk/pipeline/compiler.js.map +0 -1
  664. package/dist/sdk/pipeline/declarative.d.ts +0 -34
  665. package/dist/sdk/pipeline/declarative.d.ts.map +0 -1
  666. package/dist/sdk/pipeline/declarative.js +0 -9
  667. package/dist/sdk/pipeline/declarative.js.map +0 -1
  668. package/dist/sdk/pipeline/index.d.ts +0 -20
  669. package/dist/sdk/pipeline/index.d.ts.map +0 -1
  670. package/dist/sdk/pipeline/index.js +0 -19
  671. package/dist/sdk/pipeline/index.js.map +0 -1
  672. package/dist/sdk/pipeline/types.d.ts +0 -93
  673. package/dist/sdk/pipeline/types.d.ts.map +0 -1
  674. package/dist/sdk/pipeline/types.js +0 -10
  675. package/dist/sdk/pipeline/types.js.map +0 -1
  676. package/dist/sdk/policies.d.ts +0 -163
  677. package/dist/sdk/policies.d.ts.map +0 -1
  678. package/dist/sdk/policies.js +0 -243
  679. package/dist/sdk/policies.js.map +0 -1
  680. package/dist/sdk/runner/AgentRunner.d.ts +0 -22
  681. package/dist/sdk/runner/AgentRunner.d.ts.map +0 -1
  682. package/dist/sdk/runner/AgentRunner.js +0 -222
  683. package/dist/sdk/runner/AgentRunner.js.map +0 -1
  684. package/dist/sdk/runner/finalize.d.ts +0 -56
  685. package/dist/sdk/runner/finalize.d.ts.map +0 -1
  686. package/dist/sdk/runner/finalize.js +0 -155
  687. package/dist/sdk/runner/finalize.js.map +0 -1
  688. package/dist/sdk/runner/formats.d.ts +0 -7
  689. package/dist/sdk/runner/formats.d.ts.map +0 -1
  690. package/dist/sdk/runner/formats.js +0 -76
  691. package/dist/sdk/runner/formats.js.map +0 -1
  692. package/dist/sdk/runner/index.d.ts +0 -9
  693. package/dist/sdk/runner/index.d.ts.map +0 -1
  694. package/dist/sdk/runner/index.js +0 -9
  695. package/dist/sdk/runner/index.js.map +0 -1
  696. package/dist/sdk/runner/progress.d.ts +0 -3
  697. package/dist/sdk/runner/progress.d.ts.map +0 -1
  698. package/dist/sdk/runner/progress.js +0 -16
  699. package/dist/sdk/runner/progress.js.map +0 -1
  700. package/dist/sdk/schemas.d.ts +0 -72
  701. package/dist/sdk/schemas.d.ts.map +0 -1
  702. package/dist/sdk/schemas.js +0 -282
  703. package/dist/sdk/schemas.js.map +0 -1
  704. package/dist/sdk/trigger-context.d.ts +0 -24
  705. package/dist/sdk/trigger-context.d.ts.map +0 -1
  706. package/dist/sdk/trigger-context.js +0 -136
  707. package/dist/sdk/trigger-context.js.map +0 -1
  708. package/dist/session/SessionContext.d.ts +0 -89
  709. package/dist/session/SessionContext.d.ts.map +0 -1
  710. package/dist/session/SessionContext.js +0 -410
  711. package/dist/session/SessionContext.js.map +0 -1
  712. package/dist/session/environment.d.ts +0 -52
  713. package/dist/session/environment.d.ts.map +0 -1
  714. package/dist/session/environment.js +0 -27
  715. package/dist/session/environment.js.map +0 -1
  716. package/dist/session/history.d.ts +0 -18
  717. package/dist/session/history.d.ts.map +0 -1
  718. package/dist/session/history.js +0 -68
  719. package/dist/session/history.js.map +0 -1
  720. package/dist/session/index.d.ts +0 -10
  721. package/dist/session/index.d.ts.map +0 -1
  722. package/dist/session/index.js +0 -9
  723. package/dist/session/index.js.map +0 -1
  724. package/dist/session/serverData.d.ts +0 -38
  725. package/dist/session/serverData.d.ts.map +0 -1
  726. package/dist/session/serverData.js +0 -261
  727. package/dist/session/serverData.js.map +0 -1
  728. package/dist/tracing/pipelineHelpers.d.ts +0 -29
  729. package/dist/tracing/pipelineHelpers.d.ts.map +0 -1
  730. package/dist/tracing/pipelineHelpers.js +0 -224
  731. package/dist/tracing/pipelineHelpers.js.map +0 -1
  732. package/dist/tracking/Tracker.d.ts +0 -55
  733. package/dist/tracking/Tracker.d.ts.map +0 -1
  734. package/dist/tracking/Tracker.js +0 -217
  735. package/dist/tracking/Tracker.js.map +0 -1
  736. package/dist/tracking/index.d.ts +0 -8
  737. package/dist/tracking/index.d.ts.map +0 -1
  738. package/dist/tracking/index.js +0 -8
  739. package/dist/tracking/index.js.map +0 -1
  740. package/dist/tracking/schemas.d.ts +0 -292
  741. package/dist/tracking/schemas.d.ts.map +0 -1
  742. package/dist/tracking/schemas.js +0 -91
  743. package/dist/tracking/schemas.js.map +0 -1
  744. package/dist/utils/extractSetFlags.d.ts +0 -6
  745. package/dist/utils/extractSetFlags.d.ts.map +0 -1
  746. package/dist/utils/extractSetFlags.js +0 -16
  747. package/dist/utils/extractSetFlags.js.map +0 -1
  748. package/dist/utils/formatTimeAgo.d.ts +0 -2
  749. package/dist/utils/formatTimeAgo.d.ts.map +0 -1
  750. package/dist/utils/formatTimeAgo.js +0 -20
  751. package/dist/utils/formatTimeAgo.js.map +0 -1
  752. package/dist/utils/index.d.ts +0 -12
  753. package/dist/utils/index.d.ts.map +0 -1
  754. package/dist/utils/index.js +0 -12
  755. package/dist/utils/index.js.map +0 -1
  756. package/dist/utils/machineId.d.ts +0 -14
  757. package/dist/utils/machineId.d.ts.map +0 -1
  758. package/dist/utils/machineId.js +0 -66
  759. package/dist/utils/machineId.js.map +0 -1
  760. package/dist/utils/pathUtils.d.ts +0 -22
  761. package/dist/utils/pathUtils.d.ts.map +0 -1
  762. package/dist/utils/pathUtils.js +0 -54
  763. package/dist/utils/pathUtils.js.map +0 -1
  764. package/scripts/download-ripgrep.js +0 -269
@@ -0,0 +1,190 @@
1
+ /**
2
+ * `defineFunctionTool(opts)` — Zod-schema → OpenAI function-tool helper.
3
+ *
4
+ * Closes the parity gap identified by the 2026-05-21 ADK comparison
5
+ * (see `docs/sdk2/research/2026-05-21-google-adk-vs-qodo-ts-sdk.md`,
6
+ * Opportunity 4 — auto-derive JSON Schema from a Zod schema instead of
7
+ * hand-authoring it on every `FunctionToolDef`). Google ADK's
8
+ * `FunctionTool(func)` derives the schema from Python type hints
9
+ * (`tools/function_tool.py:42-150`); qodo-ts-sdk's pre-S3 surface
10
+ * required the consumer to ship the full `parameters: { type: 'object',
11
+ * properties: {…} }` blob inline.
12
+ *
13
+ * The helper does three things in one call:
14
+ *
15
+ * 1. Converts the supplied Zod schema to JSON Schema via Zod 4's
16
+ * built-in `z.toJSONSchema()`. (`zod-to-json-schema` was the
17
+ * pre-2025 path but the package was deprecated in November 2025;
18
+ * Zod 4 ships the same capability natively, so we use the built-in
19
+ * and avoid a redundant dependency.) Targets `draft-07` — the
20
+ * OpenAI-compatible JSON Schema dialect; the produced body drops
21
+ * directly into the function-tool wire shape with no further
22
+ * shimming.
23
+ * 2. Returns a fully-formed `FunctionToolDef` that drops into
24
+ * `InlineAgentSpec.tools[]` with zero further wiring.
25
+ * 3. Attaches the runtime `handler` on a symbol-keyed property so
26
+ * `JSON.stringify` / structural cloning / spread ignore it (wire
27
+ * serialization stays clean — the handler is SDK-local) and the
28
+ * SDK can route inbound `tool.request` envelopes for this tool's
29
+ * `name` to the right callback automatically at
30
+ * `tasks.startWithAgent` / `tasks.startWithGraph` time.
31
+ *
32
+ * The handler's `args` parameter is statically typed against
33
+ * `z.infer<typeof parameters>`, so the consumer gets compile-time
34
+ * checking against the schema shape — mismatched destructures fail at
35
+ * the call site rather than at runtime when QAR sends the call. The
36
+ * router also Zod-parses inbound args before invoking the handler, so
37
+ * `.default()` values are applied and `.transform()` / `.refine()`
38
+ * chains run as written; argument-validation failures map to per-call
39
+ * `outcome: 'error'` without the handler running.
40
+ *
41
+ * Backward compatibility: pre-S3 hand-authored `FunctionToolDef`
42
+ * literals continue to work unchanged. The helper is purely additive —
43
+ * `InlineAgentSpec.tools[]` accepts both shapes, and the SDK's
44
+ * auto-bind step (see `ToolClient.bindFunctionToolDefs`) is a no-op for
45
+ * tools that don't carry the handler symbol.
46
+ */
47
+ import { z } from 'zod';
48
+ import { mergeApprovalAnnotations, normalizeApprovalConfig, } from './approval.js';
49
+ /**
50
+ * Symbol used to attach the SDK-local handler bag to a
51
+ * `FunctionToolDef` produced by {@link defineFunctionTool}. Symbol-keyed
52
+ * so:
53
+ *
54
+ * - `JSON.stringify` ignores the property (the wire-serialized spec
55
+ * stays clean without an explicit strip step at every wire
56
+ * boundary).
57
+ * - Object spread / `structuredClone` don't carry the handler across
58
+ * unless the runtime is opted into symbols (clones drop the handler
59
+ * — defensive; consumers building wire payloads via `{ ...tool }`
60
+ * don't accidentally try to ship a function).
61
+ * - Property-name lookups via dot/bracket access don't collide with a
62
+ * consumer-authored field.
63
+ *
64
+ * Exported (named) so the SDK's own bind step and unit tests can read
65
+ * it; consumer code rarely needs to touch it directly —
66
+ * {@link getFunctionToolHandler} is the safer accessor.
67
+ */
68
+ export const FUNCTION_TOOL_HANDLER_KEY = Symbol.for('@qodo/sdk:functionToolHandler');
69
+ /**
70
+ * Read the SDK-local handler bag off a `FunctionToolDef`. Returns
71
+ * `undefined` for hand-authored literals that don't carry the symbol —
72
+ * the SDK's bind step uses this to skip tools that don't auto-route.
73
+ */
74
+ export function getFunctionToolHandler(def) {
75
+ return def[FUNCTION_TOOL_HANDLER_KEY];
76
+ }
77
+ /**
78
+ * Derive a `FunctionToolDef` from a Zod schema + handler.
79
+ *
80
+ * @example
81
+ * import { defineFunctionTool } from '@qodo/sdk';
82
+ * import { z } from 'zod';
83
+ *
84
+ * const getCurrentTime = defineFunctionTool({
85
+ * name: 'get_current_time',
86
+ * description: 'Returns the current time in ISO 8601 format.',
87
+ * parameters: z.object({
88
+ * timezone: z
89
+ * .string()
90
+ * .describe('IANA timezone, defaults to UTC.')
91
+ * .default('UTC'),
92
+ * }),
93
+ * handler: async ({ timezone }) => ({
94
+ * time: new Date().toLocaleString('en-US', { timeZone: timezone }),
95
+ * }),
96
+ * });
97
+ *
98
+ * const stream = client.tasks.startWithAgent({
99
+ * agent: {
100
+ * apiVersion: 'qar/v1',
101
+ * instructions: 'Answer with the current time on request.',
102
+ * model: 'gpt-4o',
103
+ * tools: [getCurrentTime],
104
+ * },
105
+ * });
106
+ */
107
+ export function defineFunctionTool(opts) {
108
+ if (typeof opts.name !== 'string' || opts.name.length === 0) {
109
+ throw new TypeError('defineFunctionTool: `name` is required and must be a non-empty string.');
110
+ }
111
+ if (typeof opts.handler !== 'function') {
112
+ throw new TypeError('defineFunctionTool: `handler` must be a function.');
113
+ }
114
+ if (opts.parameters === null || typeof opts.parameters !== 'object') {
115
+ throw new TypeError('defineFunctionTool: `parameters` must be a Zod schema.');
116
+ }
117
+ const parameters = deriveParametersJsonSchema(opts.parameters, opts.name);
118
+ const approval = normalizeApprovalConfig(opts.requireApproval);
119
+ // When the consumer opted into `requireApproval`, fold the
120
+ // sensitivity-driven advisory annotation overlay onto whatever
121
+ // `annotations` they already passed. Consumer-supplied fields win
122
+ // on collision — see {@link mergeApprovalAnnotations}.
123
+ const annotations = approval !== undefined
124
+ ? mergeApprovalAnnotations(opts.annotations, approval)
125
+ : opts.annotations;
126
+ const functionDef = {
127
+ name: opts.name,
128
+ ...(opts.description !== undefined && opts.description.length > 0
129
+ ? { description: opts.description }
130
+ : {}),
131
+ parameters,
132
+ ...(opts.strict !== undefined ? { strict: opts.strict } : {}),
133
+ ...(annotations !== undefined ? { annotations } : {}),
134
+ };
135
+ const def = {
136
+ type: 'function',
137
+ function: functionDef,
138
+ };
139
+ const bag = {
140
+ name: opts.name,
141
+ handler: opts.handler,
142
+ parameters: opts.parameters,
143
+ ...(approval !== undefined ? { approval } : {}),
144
+ };
145
+ // Non-enumerable, non-writable, non-configurable. `JSON.stringify`
146
+ // skips symbol-keyed props regardless of enumerability, but keeping
147
+ // it locked-down also stops a consumer accidentally re-binding the
148
+ // handler after construction (which the dispatcher cache would miss).
149
+ Object.defineProperty(def, FUNCTION_TOOL_HANDLER_KEY, {
150
+ value: bag,
151
+ enumerable: false,
152
+ writable: false,
153
+ configurable: false,
154
+ });
155
+ return def;
156
+ }
157
+ /**
158
+ * Convert a Zod schema to the JSON Schema body OpenAI's function-tool
159
+ * shape expects. Uses Zod 4's native `z.toJSONSchema()`.
160
+ *
161
+ * `target: 'draft-07'` is the OpenAI-compatible JSON Schema dialect.
162
+ * `unrepresentable: 'any'` falls back to `{}` for Zod types that have
163
+ * no JSON Schema mapping (`z.bigint()`, `z.symbol()`, `z.function()`,
164
+ * etc.) instead of throwing — the function-tool's argument bag rarely
165
+ * needs those, and a hard throw would prevent the consumer from even
166
+ * reaching their first task dispatch. Conversion errors carry the tool
167
+ * name so consumers debugging a malformed schema can find the offending
168
+ * tool quickly.
169
+ */
170
+ function deriveParametersJsonSchema(schema, toolName) {
171
+ let raw;
172
+ try {
173
+ raw = z.toJSONSchema(schema, { target: 'draft-07', unrepresentable: 'any' });
174
+ }
175
+ catch (err) {
176
+ throw new TypeError(`defineFunctionTool(${toolName}): could not derive JSON Schema from the supplied Zod schema. ` +
177
+ `${err instanceof Error ? err.message : String(err)}`);
178
+ }
179
+ if (raw === null || typeof raw !== 'object' || Array.isArray(raw)) {
180
+ throw new TypeError(`defineFunctionTool(${toolName}): Zod produced a non-object JSON Schema; ` +
181
+ 'wrap the parameters in `z.object({...})` so the function-tool body has a `properties` map.');
182
+ }
183
+ // Strip Zod's `$schema` declaration — OpenAI function-tool bodies
184
+ // don't carry it, and the wire validator is happier without
185
+ // unexpected top-level keys.
186
+ const { $schema: _drop, ...rest } = raw;
187
+ void _drop;
188
+ return rest;
189
+ }
190
+ //# sourceMappingURL=defineFunctionTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defineFunctionTool.js","sourceRoot":"","sources":["../../../src/client/tools/defineFunctionTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Browser stub for `transport.ts`. The Node `defaultTransportFactory` uses
3
+ * the `ws` package and Node `Buffer`, neither of which exist in browser.
4
+ *
5
+ * Browser consumers must supply their own transport via `ClientOptions.transport`
6
+ * — typically a small adapter around `globalThis.WebSocket`. The QAR
7
+ * connection sends the bearer in the `Authorization` upgrade header; browser
8
+ * `WebSocket` doesn't support custom upgrade headers, so the recommended
9
+ * adapter passes the bearer via the `Sec-WebSocket-Protocol` field or a
10
+ * pre-signed URL — that decision belongs to the consumer.
11
+ *
12
+ * Calling `defaultTransportFactory` directly in browser throws so consumers
13
+ * who forgot to wire `transport:` get an actionable error rather than a
14
+ * cryptic "Buffer is not defined" runtime crash deep inside the factory.
15
+ */
16
+ export type { WSTransport, WSTransportFactory, WSTransportFactoryArgs, WSEventHandlers, } from './transport.js';
17
+ export { validateCloseReason, CLOSE_FRAME_REASON_MAX_BYTES, } from './transport.shared.js';
18
+ import type { WSTransportFactory } from './transport.js';
19
+ export declare const defaultTransportFactory: WSTransportFactory;
20
+ //# sourceMappingURL=transport.browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.browser.d.ts","sourceRoot":"","sources":["../../src/client/transport.browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,YAAY,EACV,WAAW,EACX,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAQxB,OAAO,EACL,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAe,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEtE,eAAO,MAAM,uBAAuB,EAAE,kBAMrC,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Browser stub for `transport.ts`. The Node `defaultTransportFactory` uses
3
+ * the `ws` package and Node `Buffer`, neither of which exist in browser.
4
+ *
5
+ * Browser consumers must supply their own transport via `ClientOptions.transport`
6
+ * — typically a small adapter around `globalThis.WebSocket`. The QAR
7
+ * connection sends the bearer in the `Authorization` upgrade header; browser
8
+ * `WebSocket` doesn't support custom upgrade headers, so the recommended
9
+ * adapter passes the bearer via the `Sec-WebSocket-Protocol` field or a
10
+ * pre-signed URL — that decision belongs to the consumer.
11
+ *
12
+ * Calling `defaultTransportFactory` directly in browser throws so consumers
13
+ * who forgot to wire `transport:` get an actionable error rather than a
14
+ * cryptic "Buffer is not defined" runtime crash deep inside the factory.
15
+ */
16
+ import { QodoClientOptionsError } from './errors.js';
17
+ // Re-export the platform-neutral close-reason validator from the shared
18
+ // module so browser bundles see the same `import { validateCloseReason
19
+ // } from '@qodo/sdk'` surface as Node. Importing from
20
+ // `./transport.shared.js` (not `./transport.js`) sidesteps the
21
+ // `package.json.browser` remap, which would otherwise self-cycle on
22
+ // `transport.browser.js → transport.js → transport.browser.js`.
23
+ export { validateCloseReason, CLOSE_FRAME_REASON_MAX_BYTES, } from './transport.shared.js';
24
+ export const defaultTransportFactory = async () => {
25
+ throw new QodoClientOptionsError('@qodo/sdk: defaultTransportFactory is Node-only. In browser bundles, pass ' +
26
+ '`transport: <your factory>` to QodoClient — typically a small adapter ' +
27
+ 'around globalThis.WebSocket. See docs/sdk2 for an example.');
28
+ };
29
+ //# sourceMappingURL=transport.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.browser.js","sourceRoot":"","sources":["../../src/client/transport.browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AASrD,wEAAwE;AACxE,uEAAuE;AACvE,sDAAsD;AACtD,+DAA+D;AAC/D,oEAAoE;AACpE,gEAAgE;AAChE,OAAO,EACL,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAI/B,MAAM,CAAC,MAAM,uBAAuB,GAAuB,KAAK,IAA0B,EAAE;IAC1F,MAAM,IAAI,sBAAsB,CAC9B,4EAA4E;QAC1E,wEAAwE;QACxE,4DAA4D,CAC/D,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * WebSocket transport abstraction.
3
+ *
4
+ * The default transport opens a real WS connection via the `ws` package; tests
5
+ * inject a mock factory so unit tests don't reach the network. Two contracts
6
+ * here: the `WSTransport` (write/close + isOpen) and the `WSTransportFactory`
7
+ * (returns a `Promise<WSTransport>` that resolves once the WS upgrade succeeds,
8
+ * or rejects with `QodoAuthError` on 401/403 and `Error` on other upgrade
9
+ * failures).
10
+ */
11
+ export { validateCloseReason, CLOSE_FRAME_REASON_MAX_BYTES, } from './transport.shared.js';
12
+ /**
13
+ * Live WebSocket the client owns after `connect()` returns. Outbound envelopes
14
+ * are JSON-encoded strings written via `send`; `close` triggers a normal
15
+ * close handshake. Read-side flows through the handlers passed to the factory.
16
+ */
17
+ export interface WSTransport {
18
+ /** Write a frame. Backpressure semantics live one layer up in `Connection`. */
19
+ send(data: string): void;
20
+ /** Close the underlying socket. Idempotent. */
21
+ close(code?: number, reason?: string): void;
22
+ /** Whether the socket is currently in the `OPEN` state. */
23
+ readonly isOpen: boolean;
24
+ }
25
+ /** Read-side callbacks plumbed into the transport at construction time. */
26
+ export interface WSEventHandlers {
27
+ /** A complete text frame arrived. The transport decodes binary→utf8 itself. */
28
+ onMessage(data: string): void;
29
+ /** Underlying socket error. Distinct from a clean close. */
30
+ onError(err: Error): void;
31
+ /** Socket closed. After this, the transport is dead — make a new one to reconnect. */
32
+ onClose(code: number, reason: string): void;
33
+ }
34
+ /** Construction args for a transport factory. */
35
+ export interface WSTransportFactoryArgs {
36
+ readonly url: string;
37
+ readonly headers: Readonly<Record<string, string>>;
38
+ readonly handlers: WSEventHandlers;
39
+ }
40
+ /** Asynchronously open a WS connection. Resolves once the upgrade has succeeded. */
41
+ export type WSTransportFactory = (args: WSTransportFactoryArgs) => Promise<WSTransport>;
42
+ /**
43
+ * Default transport — uses the `ws` package via dynamic import so consumers
44
+ * who BYO a transport never need `ws` resolved.
45
+ */
46
+ export declare const defaultTransportFactory: WSTransportFactory;
47
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/client/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,OAAO,EACL,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAG/B;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,+EAA+E;IAC/E,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,+CAA+C;IAC/C,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,2EAA2E;AAC3E,MAAM,WAAW,eAAe;IAC9B,+EAA+E;IAC/E,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,4DAA4D;IAC5D,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,CAAC;IAC1B,sFAAsF;IACtF,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AAED,iDAAiD;AACjD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;CACpC;AAED,oFAAoF;AACpF,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,sBAAsB,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;AAExF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,kBA+ErC,CAAC"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * WebSocket transport abstraction.
3
+ *
4
+ * The default transport opens a real WS connection via the `ws` package; tests
5
+ * inject a mock factory so unit tests don't reach the network. Two contracts
6
+ * here: the `WSTransport` (write/close + isOpen) and the `WSTransportFactory`
7
+ * (returns a `Promise<WSTransport>` that resolves once the WS upgrade succeeds,
8
+ * or rejects with `QodoAuthError` on 401/403 and `Error` on other upgrade
9
+ * failures).
10
+ */
11
+ import { QodoAuthError } from '../auth/index.js';
12
+ // Re-export the platform-neutral close-reason validator from the shared
13
+ // module so consumers reaching for `import { validateCloseReason } from
14
+ // '@qodo/sdk'` get the same symbol on Node and browser. The shared
15
+ // module lives outside the `package.json.browser` remap zone, which
16
+ // avoids the esbuild "Detected cycle while resolving import" error that
17
+ // would surface if `transport.browser.ts` re-exported from `transport.ts`.
18
+ export { validateCloseReason, CLOSE_FRAME_REASON_MAX_BYTES, } from './transport.shared.js';
19
+ import { validateCloseReason } from './transport.shared.js';
20
+ /**
21
+ * Default transport — uses the `ws` package via dynamic import so consumers
22
+ * who BYO a transport never need `ws` resolved.
23
+ */
24
+ export const defaultTransportFactory = async ({ url, headers, handlers }) => {
25
+ const wsModule = (await import('ws'));
26
+ const WS = wsModule.WebSocket;
27
+ return new Promise((resolve, reject) => {
28
+ const socket = new WS(url, { headers });
29
+ let resolved = false;
30
+ socket.on('open', () => {
31
+ resolved = true;
32
+ const transport = {
33
+ send: (data) => socket.send(data),
34
+ close: (code, reason) => {
35
+ // `ws` accepts a string reason but the close-frame payload is bytes.
36
+ if (code === undefined) {
37
+ // `socket.close()` with no args drops `reason` entirely, so
38
+ // there's nothing to validate — bailing here avoids throwing
39
+ // for an overlong reason that would never reach the wire.
40
+ socket.close();
41
+ return;
42
+ }
43
+ // Validate UTF-8 byte length against the RFC 6455 cap so a
44
+ // consumer passing a long reason gets a typed SDK error rather than
45
+ // an opaque library crash.
46
+ validateCloseReason(reason);
47
+ socket.close(code, reason);
48
+ },
49
+ get isOpen() {
50
+ return socket.readyState === WS.OPEN;
51
+ },
52
+ };
53
+ resolve(transport);
54
+ });
55
+ socket.on('message', (data) => {
56
+ // `ws` emits Buffer | ArrayBuffer | Buffer[]; we use the text protocol.
57
+ let text;
58
+ if (typeof data === 'string') {
59
+ text = data;
60
+ }
61
+ else if (data instanceof ArrayBuffer) {
62
+ text = Buffer.from(data).toString('utf-8');
63
+ }
64
+ else if (Array.isArray(data)) {
65
+ text = Buffer.concat(data).toString('utf-8');
66
+ }
67
+ else {
68
+ text = data.toString('utf-8');
69
+ }
70
+ handlers.onMessage(text);
71
+ });
72
+ socket.on('error', (err) => {
73
+ if (!resolved) {
74
+ // Connection-establishment failure — surface to the awaiter.
75
+ reject(err);
76
+ return;
77
+ }
78
+ handlers.onError(err);
79
+ });
80
+ socket.on('unexpected-response', (_req, res) => {
81
+ if (resolved)
82
+ return;
83
+ const code = res.statusCode ?? 0;
84
+ if (code === 401 || code === 403) {
85
+ reject(new QodoAuthError(`WebSocket upgrade rejected with HTTP ${code}`));
86
+ }
87
+ else {
88
+ reject(new Error(`WebSocket upgrade failed: HTTP ${code}`));
89
+ }
90
+ });
91
+ socket.on('close', (code, reasonBuf) => {
92
+ const reason = reasonBuf.toString('utf-8');
93
+ if (!resolved) {
94
+ // Closed before the upgrade completed.
95
+ reject(new Error(`WebSocket closed before open (code=${code}, reason=${reason})`));
96
+ return;
97
+ }
98
+ handlers.onClose(code, reason);
99
+ });
100
+ });
101
+ };
102
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/client/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,wEAAwE;AACxE,wEAAwE;AACxE,mEAAmE;AACnE,oEAAoE;AACpE,wEAAwE;AACxE,2EAA2E;AAC3E,OAAO,EACL,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAoC5D;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAuB,KAAK,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC9F,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAwB,CAAC;IAC7D,MAAM,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC;IAE9B,OAAO,IAAI,OAAO,CAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAClD,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAExC,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM,SAAS,GAAgB;gBAC7B,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;gBACjC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;oBACtB,qEAAqE;oBACrE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;wBACvB,4DAA4D;wBAC5D,6DAA6D;wBAC7D,0DAA0D;wBAC1D,MAAM,CAAC,KAAK,EAAE,CAAC;wBACf,OAAO;oBACT,CAAC;oBACD,2DAA2D;oBAC3D,oEAAoE;oBACpE,2BAA2B;oBAC3B,mBAAmB,CAAC,MAAM,CAAC,CAAC;oBAC5B,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC7B,CAAC;gBACD,IAAI,MAAM;oBACR,OAAO,MAAM,CAAC,UAAU,KAAK,EAAE,CAAC,IAAI,CAAC;gBACvC,CAAC;aACF,CAAC;YACF,OAAO,CAAC,SAAS,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;YAC5B,wEAAwE;YACxE,IAAI,IAAY,CAAC;YACjB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,IAAI,GAAG,IAAI,CAAC;YACd,CAAC;iBAAM,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;gBACvC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC7C,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAgB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC3D,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAI,IAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC5C,CAAC;YACD,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;YAChC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,6DAA6D;gBAC7D,MAAM,CAAC,GAAG,CAAC,CAAC;gBACZ,OAAO;YACT,CAAC;YACD,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YAC7C,IAAI,QAAQ;gBAAE,OAAO;YACrB,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC;YACjC,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjC,MAAM,CAAC,IAAI,aAAa,CAAC,wCAAwC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC5E,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,kCAAkC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAY,EAAE,SAAiB,EAAE,EAAE;YACrD,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,uCAAuC;gBACvC,MAAM,CAAC,IAAI,KAAK,CAAC,sCAAsC,IAAI,YAAY,MAAM,GAAG,CAAC,CAAC,CAAC;gBACnF,OAAO;YACT,CAAC;YACD,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Platform-neutral pieces of the transport seam.
3
+ *
4
+ * Lives in its own module so both the Node `transport.ts` factory and the
5
+ * browser `transport.browser.ts` stub can re-export the same symbols
6
+ * without a re-export cycle through `package.json.browser`'s
7
+ * `transport.js → transport.browser.js` remap.
8
+ *
9
+ * Today this file holds `validateCloseReason` + the RFC 6455 byte cap.
10
+ * Any future platform-neutral transport helper (header-shape validation,
11
+ * scheme normalization, etc.) belongs here for the same reason.
12
+ */
13
+ /**
14
+ * RFC 6455 §5.5.1: the close-frame application body — the `reason` string
15
+ * after the 2-byte status code — must be ≤ 123 bytes when UTF-8 encoded.
16
+ * `ws` (and any spec-compliant peer) crashes when handed a longer value.
17
+ */
18
+ export declare const CLOSE_FRAME_REASON_MAX_BYTES = 123;
19
+ /**
20
+ * Validate that a WS close-frame reason fits in the RFC 6455 cap.
21
+ *
22
+ * Used internally by the default Node factory's `close()` wrapper, and
23
+ * exported so custom-transport authors can reach for the same typed-error
24
+ * behavior before forwarding a reason into their own underlying socket.
25
+ * `undefined` is a no-op (the factory closes without a reason).
26
+ *
27
+ * Throws `QodoTransportError` on overflow.
28
+ */
29
+ export declare function validateCloseReason(reason: string | undefined): void;
30
+ //# sourceMappingURL=transport.shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.shared.d.ts","sourceRoot":"","sources":["../../src/client/transport.shared.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAEhD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAUpE"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Platform-neutral pieces of the transport seam.
3
+ *
4
+ * Lives in its own module so both the Node `transport.ts` factory and the
5
+ * browser `transport.browser.ts` stub can re-export the same symbols
6
+ * without a re-export cycle through `package.json.browser`'s
7
+ * `transport.js → transport.browser.js` remap.
8
+ *
9
+ * Today this file holds `validateCloseReason` + the RFC 6455 byte cap.
10
+ * Any future platform-neutral transport helper (header-shape validation,
11
+ * scheme normalization, etc.) belongs here for the same reason.
12
+ */
13
+ import { QodoTransportError } from './errors.js';
14
+ /**
15
+ * RFC 6455 §5.5.1: the close-frame application body — the `reason` string
16
+ * after the 2-byte status code — must be ≤ 123 bytes when UTF-8 encoded.
17
+ * `ws` (and any spec-compliant peer) crashes when handed a longer value.
18
+ */
19
+ export const CLOSE_FRAME_REASON_MAX_BYTES = 123;
20
+ /**
21
+ * Validate that a WS close-frame reason fits in the RFC 6455 cap.
22
+ *
23
+ * Used internally by the default Node factory's `close()` wrapper, and
24
+ * exported so custom-transport authors can reach for the same typed-error
25
+ * behavior before forwarding a reason into their own underlying socket.
26
+ * `undefined` is a no-op (the factory closes without a reason).
27
+ *
28
+ * Throws `QodoTransportError` on overflow.
29
+ */
30
+ export function validateCloseReason(reason) {
31
+ if (reason === undefined)
32
+ return;
33
+ // Browsers ship `TextEncoder` globally; Node.js has had it global since v11.
34
+ const byteLength = new TextEncoder().encode(reason).byteLength;
35
+ if (byteLength > CLOSE_FRAME_REASON_MAX_BYTES) {
36
+ throw new QodoTransportError(`transport.close reason exceeds RFC 6455 limit (${byteLength}/${CLOSE_FRAME_REASON_MAX_BYTES} bytes UTF-8). ` +
37
+ `Shorten the reason or omit it.`);
38
+ }
39
+ }
40
+ //# sourceMappingURL=transport.shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.shared.js","sourceRoot":"","sources":["../../src/client/transport.shared.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAEhD;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAA0B;IAC5D,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO;IACjC,6EAA6E;IAC7E,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC;IAC/D,IAAI,UAAU,GAAG,4BAA4B,EAAE,CAAC;QAC9C,MAAM,IAAI,kBAAkB,CAC1B,kDAAkD,UAAU,IAAI,4BAA4B,iBAAiB;YAC3G,gCAAgC,CACnC,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * UUIDv7 generator — RFC 9562 §5.7.
3
+ *
4
+ * QAR uses UUIDv7 for `message_id` so envelopes sort lexicographically by emit
5
+ * time. The wire format is the standard 8-4-4-4-12 hex grouping; bits laid out
6
+ * as: 48-bit Unix timestamp (ms) · 4-bit version · 12-bit rand_a · 2-bit
7
+ * variant · 62-bit rand_b. The random portions are pulled from
8
+ * `globalThis.crypto.getRandomValues` (Node 19+ and every modern browser) so
9
+ * the output is suitable for protocol use, not just `Math.random`. The
10
+ * isomorphic source matters: `@qodo/sdk` ships a browser WS adapter, and a
11
+ * module-scope `node:crypto` import would break browser bundling.
12
+ *
13
+ * Returned as `string`; cast at the boundary with `asMessageId` / `asSessionId`
14
+ * when you need a branded id.
15
+ */
16
+ import type { MessageId, SessionId, TaskId } from '../qar/ids.js';
17
+ /** Generate a fresh UUIDv7. */
18
+ export declare function uuidv7(): string;
19
+ /** Brand-cast a string id as `MessageId`. */
20
+ export declare function asMessageId(id: string): MessageId;
21
+ /** Brand-cast a string id as `SessionId`. */
22
+ export declare function asSessionId(id: string): SessionId;
23
+ /**
24
+ * Brand-cast a string id as `TaskId`.
25
+ *
26
+ * Used by `TaskClient.tasks.start` to derive the `task_id` synchronously from
27
+ * the outbound `task.start.message_id`. The wire contract codifies
28
+ * `task_id == task.start.message_id`, so the SDK doesn't need to wait
29
+ * for the first inbound envelope to know the id.
30
+ */
31
+ export declare function asTaskId(id: string): TaskId;
32
+ //# sourceMappingURL=uuid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../../src/client/uuid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AASlE,+BAA+B;AAC/B,wBAAgB,MAAM,IAAI,MAAM,CAyB/B;AAED,6CAA6C;AAC7C,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAEjD;AAED,6CAA6C;AAC7C,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAEjD;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE3C"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * UUIDv7 generator — RFC 9562 §5.7.
3
+ *
4
+ * QAR uses UUIDv7 for `message_id` so envelopes sort lexicographically by emit
5
+ * time. The wire format is the standard 8-4-4-4-12 hex grouping; bits laid out
6
+ * as: 48-bit Unix timestamp (ms) · 4-bit version · 12-bit rand_a · 2-bit
7
+ * variant · 62-bit rand_b. The random portions are pulled from
8
+ * `globalThis.crypto.getRandomValues` (Node 19+ and every modern browser) so
9
+ * the output is suitable for protocol use, not just `Math.random`. The
10
+ * isomorphic source matters: `@qodo/sdk` ships a browser WS adapter, and a
11
+ * module-scope `node:crypto` import would break browser bundling.
12
+ *
13
+ * Returned as `string`; cast at the boundary with `asMessageId` / `asSessionId`
14
+ * when you need a branded id.
15
+ */
16
+ /** Cryptographic random bytes from the Web Crypto API. */
17
+ function randomBytes(n) {
18
+ const out = new Uint8Array(n);
19
+ globalThis.crypto.getRandomValues(out);
20
+ return out;
21
+ }
22
+ /** Generate a fresh UUIDv7. */
23
+ export function uuidv7() {
24
+ const ms = Date.now();
25
+ // 48-bit ms timestamp, big-endian. JS numbers are 53-bit safe so this is fine
26
+ // until year 10889.
27
+ const tsHex = ms.toString(16).padStart(12, '0');
28
+ // 12 bits of random for `rand_a`, prefixed with version nibble (0x7).
29
+ const randAByte = randomBytes(2);
30
+ const randA = ((randAByte[0] << 8) | randAByte[1]) & 0x0fff;
31
+ const verRandAHex = ((0x7 << 12) | randA).toString(16).padStart(4, '0');
32
+ // 64 bits for variant (2 bits = 0b10) + `rand_b` (62 bits).
33
+ const tail = randomBytes(8);
34
+ tail[0] = (tail[0] & 0x3f) | 0x80;
35
+ let tailHex = '';
36
+ for (const b of tail)
37
+ tailHex += b.toString(16).padStart(2, '0');
38
+ return [
39
+ tsHex.slice(0, 8),
40
+ tsHex.slice(8, 12),
41
+ verRandAHex,
42
+ tailHex.slice(0, 4),
43
+ tailHex.slice(4, 16),
44
+ ].join('-');
45
+ }
46
+ /** Brand-cast a string id as `MessageId`. */
47
+ export function asMessageId(id) {
48
+ return id;
49
+ }
50
+ /** Brand-cast a string id as `SessionId`. */
51
+ export function asSessionId(id) {
52
+ return id;
53
+ }
54
+ /**
55
+ * Brand-cast a string id as `TaskId`.
56
+ *
57
+ * Used by `TaskClient.tasks.start` to derive the `task_id` synchronously from
58
+ * the outbound `task.start.message_id`. The wire contract codifies
59
+ * `task_id == task.start.message_id`, so the SDK doesn't need to wait
60
+ * for the first inbound envelope to know the id.
61
+ */
62
+ export function asTaskId(id) {
63
+ return id;
64
+ }
65
+ //# sourceMappingURL=uuid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uuid.js","sourceRoot":"","sources":["../../src/client/uuid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,0DAA0D;AAC1D,SAAS,WAAW,CAAC,CAAS;IAC5B,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACvC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,MAAM;IACpB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEtB,8EAA8E;IAC9E,oBAAoB;IACpB,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAEhD,sEAAsE;IACtE,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC,GAAG,MAAM,CAAC;IAC9D,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAExE,4DAA4D;IAC5D,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACnC,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,KAAK,MAAM,CAAC,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAEjE,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACjB,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QAClB,WAAW;QACX,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;KACrB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,WAAW,CAAC,EAAU;IACpC,OAAO,EAAe,CAAC;AACzB,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,WAAW,CAAC,EAAU;IACpC,OAAO,EAAe,CAAC;AACzB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAU;IACjC,OAAO,EAAY,CAAC;AACtB,CAAC"}