@tai42/api-client 20.0.0 → 22.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. package/README.md +29 -0
  2. package/dist/agents.d.ts.map +1 -1
  3. package/dist/agents.js +6 -4
  4. package/dist/agents.js.map +1 -1
  5. package/dist/client/agents-client.d.ts.map +1 -1
  6. package/dist/client/agents-client.js +3 -2
  7. package/dist/client/agents-client.js.map +1 -1
  8. package/dist/client/auth-client.d.ts +129 -127
  9. package/dist/client/auth-client.d.ts.map +1 -1
  10. package/dist/client/auth-client.js +68 -28
  11. package/dist/client/auth-client.js.map +1 -1
  12. package/dist/client/backend-client.d.ts +14 -13
  13. package/dist/client/backend-client.d.ts.map +1 -1
  14. package/dist/client/backend-client.js +7 -3
  15. package/dist/client/backend-client.js.map +1 -1
  16. package/dist/client/backup-client.d.ts +45 -19
  17. package/dist/client/backup-client.d.ts.map +1 -1
  18. package/dist/client/backup-client.js +8 -3
  19. package/dist/client/backup-client.js.map +1 -1
  20. package/dist/client/capabilities-client.d.ts +20 -16
  21. package/dist/client/capabilities-client.d.ts.map +1 -1
  22. package/dist/client/capabilities-client.js +3 -2
  23. package/dist/client/capabilities-client.js.map +1 -1
  24. package/dist/client/channels-client.d.ts.map +1 -1
  25. package/dist/client/channels-client.js +2 -1
  26. package/dist/client/channels-client.js.map +1 -1
  27. package/dist/client/config-client.d.ts +44 -17
  28. package/dist/client/config-client.d.ts.map +1 -1
  29. package/dist/client/config-client.js +10 -4
  30. package/dist/client/config-client.js.map +1 -1
  31. package/dist/client/connectors-client.d.ts +270 -81
  32. package/dist/client/connectors-client.d.ts.map +1 -1
  33. package/dist/client/connectors-client.js +38 -10
  34. package/dist/client/connectors-client.js.map +1 -1
  35. package/dist/client/conversations-client.d.ts +440 -86
  36. package/dist/client/conversations-client.d.ts.map +1 -1
  37. package/dist/client/conversations-client.js +46 -17
  38. package/dist/client/conversations-client.js.map +1 -1
  39. package/dist/client/hooks-client.d.ts +3 -3
  40. package/dist/client/hooks-client.d.ts.map +1 -1
  41. package/dist/client/hooks-client.js +12 -7
  42. package/dist/client/hooks-client.js.map +1 -1
  43. package/dist/client/index.d.ts +2272 -914
  44. package/dist/client/index.d.ts.map +1 -1
  45. package/dist/client/index.js +10 -2
  46. package/dist/client/index.js.map +1 -1
  47. package/dist/client/interactions-client.d.ts +19 -14
  48. package/dist/client/interactions-client.d.ts.map +1 -1
  49. package/dist/client/interactions-client.js +21 -9
  50. package/dist/client/interactions-client.js.map +1 -1
  51. package/dist/client/login-client.d.ts +18 -17
  52. package/dist/client/login-client.d.ts.map +1 -1
  53. package/dist/client/login-client.js +8 -4
  54. package/dist/client/login-client.js.map +1 -1
  55. package/dist/client/manifest-client.d.ts +276 -105
  56. package/dist/client/manifest-client.d.ts.map +1 -1
  57. package/dist/client/manifest-client.js +22 -16
  58. package/dist/client/manifest-client.js.map +1 -1
  59. package/dist/client/marketplace-client.d.ts +181 -51
  60. package/dist/client/marketplace-client.d.ts.map +1 -1
  61. package/dist/client/marketplace-client.js +23 -12
  62. package/dist/client/marketplace-client.js.map +1 -1
  63. package/dist/client/mcp-config-schema-client.d.ts.map +1 -1
  64. package/dist/client/mcp-config-schema-client.js +2 -1
  65. package/dist/client/mcp-config-schema-client.js.map +1 -1
  66. package/dist/client/notifications-client.d.ts +43 -6
  67. package/dist/client/notifications-client.d.ts.map +1 -1
  68. package/dist/client/notifications-client.js +2 -1
  69. package/dist/client/notifications-client.js.map +1 -1
  70. package/dist/client/observability-client.d.ts +78 -38
  71. package/dist/client/observability-client.d.ts.map +1 -1
  72. package/dist/client/observability-client.js +29 -6
  73. package/dist/client/observability-client.js.map +1 -1
  74. package/dist/client/plugins-client.d.ts +8 -6
  75. package/dist/client/plugins-client.d.ts.map +1 -1
  76. package/dist/client/plugins-client.js +2 -1
  77. package/dist/client/plugins-client.js.map +1 -1
  78. package/dist/client/policy-client.d.ts +4 -4
  79. package/dist/client/policy-client.d.ts.map +1 -1
  80. package/dist/client/policy-client.js +11 -4
  81. package/dist/client/policy-client.js.map +1 -1
  82. package/dist/client/presets-client.d.ts +84 -39
  83. package/dist/client/presets-client.d.ts.map +1 -1
  84. package/dist/client/presets-client.js +25 -13
  85. package/dist/client/presets-client.js.map +1 -1
  86. package/dist/client/profiles-client.d.ts +40 -33
  87. package/dist/client/profiles-client.d.ts.map +1 -1
  88. package/dist/client/profiles-client.js +15 -10
  89. package/dist/client/profiles-client.js.map +1 -1
  90. package/dist/client/schedules-client.d.ts +21 -17
  91. package/dist/client/schedules-client.d.ts.map +1 -1
  92. package/dist/client/schedules-client.js +8 -5
  93. package/dist/client/schedules-client.js.map +1 -1
  94. package/dist/client/settings-schema-client.d.ts +1 -1
  95. package/dist/client/settings-schema-client.d.ts.map +1 -1
  96. package/dist/client/settings-schema-client.js +2 -1
  97. package/dist/client/settings-schema-client.js.map +1 -1
  98. package/dist/client/states-client.d.ts +215 -87
  99. package/dist/client/states-client.d.ts.map +1 -1
  100. package/dist/client/states-client.js +98 -37
  101. package/dist/client/states-client.js.map +1 -1
  102. package/dist/client/storage-client.d.ts +5 -5
  103. package/dist/client/storage-client.d.ts.map +1 -1
  104. package/dist/client/storage-client.js +24 -12
  105. package/dist/client/storage-client.js.map +1 -1
  106. package/dist/client/sub-mcp-client.d.ts +3 -1
  107. package/dist/client/sub-mcp-client.d.ts.map +1 -1
  108. package/dist/client/sub-mcp-client.js +9 -4
  109. package/dist/client/sub-mcp-client.js.map +1 -1
  110. package/dist/client/system-client.d.ts +2 -2
  111. package/dist/client/system-client.d.ts.map +1 -1
  112. package/dist/client/system-client.js +2 -1
  113. package/dist/client/system-client.js.map +1 -1
  114. package/dist/client/templates-client.d.ts +65 -6
  115. package/dist/client/templates-client.d.ts.map +1 -1
  116. package/dist/client/templates-client.js +25 -7
  117. package/dist/client/templates-client.js.map +1 -1
  118. package/dist/client/tool-extensions-client.d.ts +41 -16
  119. package/dist/client/tool-extensions-client.d.ts.map +1 -1
  120. package/dist/client/tool-extensions-client.js +6 -4
  121. package/dist/client/tool-extensions-client.js.map +1 -1
  122. package/dist/client/tool-meta-client.d.ts +8 -8
  123. package/dist/client/tool-meta-client.d.ts.map +1 -1
  124. package/dist/client/tool-meta-client.js +12 -8
  125. package/dist/client/tool-meta-client.js.map +1 -1
  126. package/dist/client/tools-client.d.ts +150 -23
  127. package/dist/client/tools-client.d.ts.map +1 -1
  128. package/dist/client/tools-client.js +8 -8
  129. package/dist/client/tools-client.js.map +1 -1
  130. package/dist/client/trigger-links-client.d.ts +11 -9
  131. package/dist/client/trigger-links-client.d.ts.map +1 -1
  132. package/dist/client/trigger-links-client.js +4 -4
  133. package/dist/client/trigger-links-client.js.map +1 -1
  134. package/dist/fleet-report.d.ts +21 -5
  135. package/dist/fleet-report.d.ts.map +1 -1
  136. package/dist/fleet-report.js +31 -6
  137. package/dist/fleet-report.js.map +1 -1
  138. package/dist/generated/api-routes.d.ts +1014 -0
  139. package/dist/generated/api-routes.d.ts.map +1 -0
  140. package/dist/generated/api-routes.js +322 -0
  141. package/dist/generated/api-routes.js.map +1 -0
  142. package/dist/generated/openapi-schemas.d.ts +12425 -0
  143. package/dist/generated/openapi-schemas.d.ts.map +1 -0
  144. package/dist/generated/openapi-schemas.js +671 -0
  145. package/dist/generated/openapi-schemas.js.map +1 -0
  146. package/dist/generated/served-schemas.d.ts +6698 -349
  147. package/dist/generated/served-schemas.d.ts.map +1 -1
  148. package/dist/generated/served-schemas.js +7062 -21
  149. package/dist/generated/served-schemas.js.map +1 -1
  150. package/dist/headers.d.ts +4 -0
  151. package/dist/headers.d.ts.map +1 -0
  152. package/dist/headers.js +4 -0
  153. package/dist/headers.js.map +1 -0
  154. package/dist/http.d.ts.map +1 -1
  155. package/dist/http.js +4 -3
  156. package/dist/http.js.map +1 -1
  157. package/dist/index.d.ts +7 -3
  158. package/dist/index.d.ts.map +1 -1
  159. package/dist/index.js +3 -0
  160. package/dist/index.js.map +1 -1
  161. package/dist/schemas/api-keys.d.ts +14 -12
  162. package/dist/schemas/api-keys.d.ts.map +1 -1
  163. package/dist/schemas/api-keys.js +9 -23
  164. package/dist/schemas/api-keys.js.map +1 -1
  165. package/dist/schemas/auth-routes.d.ts +34 -29
  166. package/dist/schemas/auth-routes.d.ts.map +1 -1
  167. package/dist/schemas/auth-routes.js +22 -27
  168. package/dist/schemas/auth-routes.js.map +1 -1
  169. package/dist/schemas/backup.d.ts +157 -36
  170. package/dist/schemas/backup.d.ts.map +1 -1
  171. package/dist/schemas/backup.js +27 -26
  172. package/dist/schemas/backup.js.map +1 -1
  173. package/dist/schemas/capabilities.d.ts +32 -22
  174. package/dist/schemas/capabilities.d.ts.map +1 -1
  175. package/dist/schemas/capabilities.js +15 -40
  176. package/dist/schemas/capabilities.js.map +1 -1
  177. package/dist/schemas/channels.d.ts +1 -1
  178. package/dist/schemas/channels.d.ts.map +1 -1
  179. package/dist/schemas/channels.js +2 -5
  180. package/dist/schemas/channels.js.map +1 -1
  181. package/dist/schemas/config.d.ts.map +1 -1
  182. package/dist/schemas/config.js +4 -6
  183. package/dist/schemas/config.js.map +1 -1
  184. package/dist/schemas/connectors.d.ts +381 -185
  185. package/dist/schemas/connectors.d.ts.map +1 -1
  186. package/dist/schemas/connectors.js +54 -101
  187. package/dist/schemas/connectors.js.map +1 -1
  188. package/dist/schemas/conversations.d.ts +977 -248
  189. package/dist/schemas/conversations.d.ts.map +1 -1
  190. package/dist/schemas/conversations.js +40 -134
  191. package/dist/schemas/conversations.js.map +1 -1
  192. package/dist/schemas/extensions.d.ts +9 -6
  193. package/dist/schemas/extensions.d.ts.map +1 -1
  194. package/dist/schemas/extensions.js +6 -4
  195. package/dist/schemas/extensions.js.map +1 -1
  196. package/dist/schemas/fleet.d.ts +153 -99
  197. package/dist/schemas/fleet.d.ts.map +1 -1
  198. package/dist/schemas/fleet.js +41 -51
  199. package/dist/schemas/fleet.js.map +1 -1
  200. package/dist/schemas/hooks.d.ts +34 -34
  201. package/dist/schemas/hooks.d.ts.map +1 -1
  202. package/dist/schemas/hooks.js +15 -34
  203. package/dist/schemas/hooks.js.map +1 -1
  204. package/dist/schemas/index.d.ts +0 -1
  205. package/dist/schemas/index.d.ts.map +1 -1
  206. package/dist/schemas/index.js +0 -1
  207. package/dist/schemas/index.js.map +1 -1
  208. package/dist/schemas/interactions.d.ts +400 -128
  209. package/dist/schemas/interactions.d.ts.map +1 -1
  210. package/dist/schemas/interactions.js +202 -131
  211. package/dist/schemas/interactions.js.map +1 -1
  212. package/dist/schemas/login.d.ts +36 -37
  213. package/dist/schemas/login.d.ts.map +1 -1
  214. package/dist/schemas/login.js +8 -42
  215. package/dist/schemas/login.js.map +1 -1
  216. package/dist/schemas/manifest-mcp.d.ts +61 -35
  217. package/dist/schemas/manifest-mcp.d.ts.map +1 -1
  218. package/dist/schemas/manifest-mcp.js +13 -19
  219. package/dist/schemas/manifest-mcp.js.map +1 -1
  220. package/dist/schemas/marketplace.d.ts +219 -133
  221. package/dist/schemas/marketplace.d.ts.map +1 -1
  222. package/dist/schemas/marketplace.js +35 -120
  223. package/dist/schemas/marketplace.js.map +1 -1
  224. package/dist/schemas/members.d.ts +59 -52
  225. package/dist/schemas/members.d.ts.map +1 -1
  226. package/dist/schemas/members.js +20 -52
  227. package/dist/schemas/members.js.map +1 -1
  228. package/dist/schemas/notifications.d.ts +115 -17
  229. package/dist/schemas/notifications.d.ts.map +1 -1
  230. package/dist/schemas/notifications.js +9 -35
  231. package/dist/schemas/notifications.js.map +1 -1
  232. package/dist/schemas/observability.d.ts +174 -72
  233. package/dist/schemas/observability.d.ts.map +1 -1
  234. package/dist/schemas/observability.js +23 -76
  235. package/dist/schemas/observability.js.map +1 -1
  236. package/dist/schemas/policy.d.ts +11 -11
  237. package/dist/schemas/policy.d.ts.map +1 -1
  238. package/dist/schemas/policy.js +5 -12
  239. package/dist/schemas/policy.js.map +1 -1
  240. package/dist/schemas/presets.d.ts +109 -64
  241. package/dist/schemas/presets.d.ts.map +1 -1
  242. package/dist/schemas/presets.js +12 -48
  243. package/dist/schemas/presets.js.map +1 -1
  244. package/dist/schemas/principals.d.ts +28 -21
  245. package/dist/schemas/principals.d.ts.map +1 -1
  246. package/dist/schemas/principals.js +13 -25
  247. package/dist/schemas/principals.js.map +1 -1
  248. package/dist/schemas/profiles.d.ts +75 -63
  249. package/dist/schemas/profiles.d.ts.map +1 -1
  250. package/dist/schemas/profiles.js +24 -54
  251. package/dist/schemas/profiles.js.map +1 -1
  252. package/dist/schemas/roles.d.ts +22 -22
  253. package/dist/schemas/roles.d.ts.map +1 -1
  254. package/dist/schemas/roles.js +10 -17
  255. package/dist/schemas/roles.js.map +1 -1
  256. package/dist/schemas/schedules.d.ts +21 -15
  257. package/dist/schemas/schedules.d.ts.map +1 -1
  258. package/dist/schemas/schedules.js +4 -13
  259. package/dist/schemas/schedules.js.map +1 -1
  260. package/dist/schemas/served.d.ts +6373 -181
  261. package/dist/schemas/served.d.ts.map +1 -1
  262. package/dist/schemas/served.js +21 -0
  263. package/dist/schemas/served.js.map +1 -1
  264. package/dist/schemas/settings-schema.d.ts +1 -1
  265. package/dist/schemas/settings-schema.d.ts.map +1 -1
  266. package/dist/schemas/settings-schema.js +17 -19
  267. package/dist/schemas/settings-schema.js.map +1 -1
  268. package/dist/schemas/setup.d.ts +6 -6
  269. package/dist/schemas/setup.d.ts.map +1 -1
  270. package/dist/schemas/setup.js +2 -11
  271. package/dist/schemas/setup.js.map +1 -1
  272. package/dist/schemas/states.d.ts +450 -135
  273. package/dist/schemas/states.d.ts.map +1 -1
  274. package/dist/schemas/states.js +76 -140
  275. package/dist/schemas/states.js.map +1 -1
  276. package/dist/schemas/storage.d.ts +7 -8
  277. package/dist/schemas/storage.d.ts.map +1 -1
  278. package/dist/schemas/storage.js +8 -17
  279. package/dist/schemas/storage.js.map +1 -1
  280. package/dist/schemas/studio-plugins.d.ts +24 -18
  281. package/dist/schemas/studio-plugins.d.ts.map +1 -1
  282. package/dist/schemas/studio-plugins.js +5 -19
  283. package/dist/schemas/studio-plugins.js.map +1 -1
  284. package/dist/schemas/sub-mcp.d.ts +11 -8
  285. package/dist/schemas/sub-mcp.d.ts.map +1 -1
  286. package/dist/schemas/sub-mcp.js +10 -19
  287. package/dist/schemas/sub-mcp.js.map +1 -1
  288. package/dist/schemas/system-kinds.d.ts +76 -46
  289. package/dist/schemas/system-kinds.d.ts.map +1 -1
  290. package/dist/schemas/system-kinds.js +11 -28
  291. package/dist/schemas/system-kinds.js.map +1 -1
  292. package/dist/schemas/templates.d.ts +83 -25
  293. package/dist/schemas/templates.d.ts.map +1 -1
  294. package/dist/schemas/templates.js +8 -9
  295. package/dist/schemas/templates.js.map +1 -1
  296. package/dist/schemas/tool-meta.d.ts +15 -15
  297. package/dist/schemas/tool-meta.d.ts.map +1 -1
  298. package/dist/schemas/tool-meta.js +6 -21
  299. package/dist/schemas/tool-meta.js.map +1 -1
  300. package/dist/schemas/tools.d.ts +177 -56
  301. package/dist/schemas/tools.d.ts.map +1 -1
  302. package/dist/schemas/tools.js +20 -41
  303. package/dist/schemas/tools.js.map +1 -1
  304. package/dist/schemas/trigger-links.d.ts +22 -17
  305. package/dist/schemas/trigger-links.d.ts.map +1 -1
  306. package/dist/schemas/trigger-links.js +7 -27
  307. package/dist/schemas/trigger-links.js.map +1 -1
  308. package/dist/tool-runs.d.ts +175 -54
  309. package/dist/tool-runs.d.ts.map +1 -1
  310. package/dist/tool-runs.js +33 -34
  311. package/dist/tool-runs.js.map +1 -1
  312. package/package.json +4 -3
  313. package/src/agents.ts +16 -4
  314. package/src/client/agents-client.ts +3 -2
  315. package/src/client/auth-client.ts +102 -37
  316. package/src/client/backend-client.ts +8 -3
  317. package/src/client/backup-client.ts +8 -3
  318. package/src/client/capabilities-client.ts +4 -2
  319. package/src/client/channels-client.ts +3 -1
  320. package/src/client/config-client.ts +13 -5
  321. package/src/client/connectors-client.ts +91 -16
  322. package/src/client/conversations-client.ts +79 -30
  323. package/src/client/hooks-client.ts +25 -12
  324. package/src/client/index.ts +16 -4
  325. package/src/client/interactions-client.ts +40 -16
  326. package/src/client/login-client.ts +8 -4
  327. package/src/client/manifest-client.ts +48 -24
  328. package/src/client/marketplace-client.ts +23 -12
  329. package/src/client/mcp-config-schema-client.ts +2 -1
  330. package/src/client/notifications-client.ts +2 -1
  331. package/src/client/observability-client.ts +60 -8
  332. package/src/client/plugins-client.ts +2 -1
  333. package/src/client/policy-client.ts +24 -9
  334. package/src/client/presets-client.ts +26 -13
  335. package/src/client/profiles-client.ts +53 -24
  336. package/src/client/schedules-client.ts +14 -20
  337. package/src/client/settings-schema-client.ts +2 -1
  338. package/src/client/states-client.ts +151 -49
  339. package/src/client/storage-client.ts +43 -14
  340. package/src/client/sub-mcp-client.ts +10 -4
  341. package/src/client/system-client.ts +2 -1
  342. package/src/client/templates-client.ts +26 -7
  343. package/src/client/tool-extensions-client.ts +14 -7
  344. package/src/client/tool-meta-client.ts +46 -21
  345. package/src/client/tools-client.ts +13 -8
  346. package/src/client/trigger-links-client.ts +10 -6
  347. package/src/fleet-report.ts +48 -7
  348. package/src/generated/api-routes.ts +327 -0
  349. package/src/generated/openapi-schemas.ts +1508 -0
  350. package/src/generated/served-schemas.ts +7120 -40
  351. package/src/headers.ts +4 -0
  352. package/src/http.ts +4 -3
  353. package/src/index.ts +54 -10
  354. package/src/schemas/api-keys.ts +9 -25
  355. package/src/schemas/auth-routes.ts +27 -28
  356. package/src/schemas/backup.ts +33 -31
  357. package/src/schemas/capabilities.ts +16 -39
  358. package/src/schemas/channels.ts +4 -4
  359. package/src/schemas/config.ts +6 -6
  360. package/src/schemas/connectors.ts +61 -102
  361. package/src/schemas/conversations.ts +43 -133
  362. package/src/schemas/extensions.ts +7 -4
  363. package/src/schemas/fleet.ts +51 -51
  364. package/src/schemas/hooks.ts +18 -37
  365. package/src/schemas/index.ts +0 -1
  366. package/src/schemas/interactions.ts +227 -131
  367. package/src/schemas/login.ts +10 -41
  368. package/src/schemas/manifest-mcp.ts +13 -19
  369. package/src/schemas/marketplace.ts +37 -120
  370. package/src/schemas/members.ts +21 -51
  371. package/src/schemas/notifications.ts +10 -34
  372. package/src/schemas/observability.ts +34 -79
  373. package/src/schemas/policy.ts +5 -12
  374. package/src/schemas/presets.ts +13 -48
  375. package/src/schemas/principals.ts +17 -24
  376. package/src/schemas/profiles.ts +25 -55
  377. package/src/schemas/roles.ts +11 -17
  378. package/src/schemas/schedules.ts +4 -15
  379. package/src/schemas/served.ts +33 -0
  380. package/src/schemas/settings-schema.ts +18 -23
  381. package/src/schemas/setup.ts +4 -10
  382. package/src/schemas/states.ts +88 -139
  383. package/src/schemas/storage.ts +10 -16
  384. package/src/schemas/studio-plugins.ts +8 -19
  385. package/src/schemas/sub-mcp.ts +12 -18
  386. package/src/schemas/system-kinds.ts +12 -29
  387. package/src/schemas/templates.ts +8 -10
  388. package/src/schemas/tool-meta.ts +8 -20
  389. package/src/schemas/tools.ts +22 -45
  390. package/src/schemas/trigger-links.ts +8 -26
  391. package/src/tool-runs.ts +47 -38
  392. package/dist/client/web-entry-gate-client.d.ts +0 -34
  393. package/dist/client/web-entry-gate-client.d.ts.map +0 -1
  394. package/dist/client/web-entry-gate-client.js +0 -25
  395. package/dist/client/web-entry-gate-client.js.map +0 -1
  396. package/dist/schemas/web-entry.d.ts +0 -45
  397. package/dist/schemas/web-entry.d.ts.map +0 -1
  398. package/dist/schemas/web-entry.js +0 -36
  399. package/dist/schemas/web-entry.js.map +0 -1
  400. package/src/client/web-entry-gate-client.ts +0 -45
  401. package/src/schemas/web-entry.ts +0 -46
@@ -1,5 +1,5 @@
1
1
  /** State declaration, record, template and consumer sub-client. */
2
- import { encodeSegment } from '../http';
2
+ import { apiRoutes, buildPath } from '../generated/api-routes';
3
3
  import * as s from '../schemas';
4
4
  import type { Transport } from './transport';
5
5
 
@@ -60,17 +60,35 @@ export interface StatePageQuery {
60
60
  readonly cursor?: string;
61
61
  }
62
62
 
63
+ /** The subject-addressed record routes, by what each does to the record. */
64
+ const RECORD_ROUTES = {
65
+ read: apiRoutes.get_api_states_name_records_target_kind_target_name_kind_key.path,
66
+ put: apiRoutes.put_api_states_name_records_target_kind_target_name_kind_key.path,
67
+ patch: apiRoutes.patch_api_states_name_records_target_kind_target_name_kind_key.path,
68
+ erase: apiRoutes.delete_api_states_name_records_target_kind_target_name_kind_key.path,
69
+ deltas: apiRoutes.post_api_states_name_records_target_kind_target_name_kind_key_deltas.path,
70
+ evalJq:
71
+ apiRoutes.get_api_states_name_records_target_kind_target_name_kind_key_template_jq_program.path,
72
+ applyJq:
73
+ apiRoutes.post_api_states_name_records_target_kind_target_name_kind_key_template_jq_program
74
+ .path,
75
+ fold: apiRoutes.post_api_states_name_records_target_kind_target_name_kind_key_fold.path,
76
+ writes: apiRoutes.get_api_states_name_records_target_kind_target_name_kind_key_writes.path,
77
+ } as const;
78
+
63
79
  /**
64
- * The subject-addressed record path: `/api/states/{name}/records/{target_kind}/
65
- * {target_name}/{kind}/{key}` — four path segments, each percent-encoded, so a key
66
- * carrying a slash or a colon never escapes its segment.
80
+ * The path parameters of a subject-addressed record route (`/api/states/{name}/records/
81
+ * {target_kind}/{target_name}/{kind}/{key}`): four path segments, each percent-encoded by
82
+ * `buildPath`, so a key carrying a slash or a colon never escapes its segment.
67
83
  */
68
- function stateRecordPath(name: string, subject: StateSubjectRef): string {
69
- return (
70
- `/api/states/${encodeSegment(name)}/records/` +
71
- `${encodeSegment(subject.target_kind)}/${encodeSegment(subject.target_name)}/` +
72
- `${encodeSegment(subject.kind)}/${encodeSegment(subject.key)}`
73
- );
84
+ function stateRecordParams(name: string, subject: StateSubjectRef) {
85
+ return {
86
+ name,
87
+ target_kind: subject.target_kind,
88
+ target_name: subject.target_name,
89
+ kind: subject.kind,
90
+ key: subject.key,
91
+ };
74
92
  }
75
93
 
76
94
  /**
@@ -97,21 +115,25 @@ function stateDeclarationMethods(t: Transport) {
97
115
  // management population; a single state read composes the declaration with its
98
116
  // effective schema, regimes and attachments. Every record route addresses its subject
99
117
  // as four percent-encoded path segments (see `stateRecordPath`).
100
- listStates: (signal?: AbortSignal) => req('/api/states', s.stateList, { signal }),
118
+ listStates: (signal?: AbortSignal) =>
119
+ req(apiRoutes.get_api_states.path, s.stateList, { signal }),
101
120
  getState: (name: string, signal?: AbortSignal) =>
102
- req(`/api/states/${encodeSegment(name)}`, s.stateDetail, { signal }),
121
+ req(buildPath(apiRoutes.get_api_states_name.path, { name }), s.stateDetail, { signal }),
103
122
  // A plain declaration upsert — no `replace` flag. With records present the server
104
123
  // accepts additive schema changes and refuses with a 409 any change that removes or
105
- // alters an existing field, or a subject-kind removal that would strand records.
124
+ // alters an existing field, or a subject-kind removal that would strand records. The
125
+ // answer is the stored declaration plus the held pending saves it was accepted beside.
106
126
  putState: (name: string, body: StateDeclarationBody) =>
107
- req(`/api/states/${encodeSegment(name)}`, s.stateDetail, {
127
+ req(buildPath(apiRoutes.put_api_states_name.path, { name }), s.stateDeclarationSaved, {
108
128
  method: 'PUT',
109
129
  body,
110
130
  }),
111
131
  deleteState: (name: string) =>
112
- req(`/api/states/${encodeSegment(name)}`, s.stateDeleted, { method: 'DELETE' }),
132
+ req(buildPath(apiRoutes.delete_api_states_name.path, { name }), s.stateDeleted, {
133
+ method: 'DELETE',
134
+ }),
113
135
  getStateStats: (name: string, signal?: AbortSignal) =>
114
- req(`/api/states/${encodeSegment(name)}/stats`, s.stateStats, { signal }),
136
+ req(buildPath(apiRoutes.get_api_states_name_stats.path, { name }), s.stateStats, { signal }),
115
137
  };
116
138
  }
117
139
 
@@ -120,28 +142,32 @@ function stateAttachmentMethods(t: Transport) {
120
142
  const { req } = t;
121
143
  return {
122
144
  listStateAttachments: (name: string, signal?: AbortSignal) =>
123
- req(`/api/states/${encodeSegment(name)}/attachments`, s.stateAttachmentList, { signal }),
145
+ req(
146
+ buildPath(apiRoutes.get_api_states_name_attachments.path, { name }),
147
+ s.stateAttachmentList,
148
+ { signal },
149
+ ),
124
150
  getStateAttachment: (name: string, template: string, signal?: AbortSignal) =>
125
151
  req(
126
- `/api/states/${encodeSegment(name)}/attachments/${encodeSegment(template)}`,
152
+ buildPath(apiRoutes.get_api_states_name_attachments_template.path, { name, template }),
127
153
  s.stateAttachment,
128
154
  { signal },
129
155
  ),
130
156
  attachStateTemplate: (name: string, template: string, body: StateAttachmentBody) =>
131
157
  req(
132
- `/api/states/${encodeSegment(name)}/attachments/${encodeSegment(template)}`,
158
+ buildPath(apiRoutes.put_api_states_name_attachments_template.path, { name, template }),
133
159
  s.stateAttached,
134
160
  { method: 'PUT', body },
135
161
  ),
136
162
  patchStateAttachment: (name: string, template: string, body: StateAttachmentBody) =>
137
163
  req(
138
- `/api/states/${encodeSegment(name)}/attachments/${encodeSegment(template)}`,
164
+ buildPath(apiRoutes.patch_api_states_name_attachments_template.path, { name, template }),
139
165
  s.stateAttachmentUpdated,
140
166
  { method: 'PATCH', body },
141
167
  ),
142
168
  detachStateTemplate: (name: string, template: string) =>
143
169
  req(
144
- `/api/states/${encodeSegment(name)}/attachments/${encodeSegment(template)}`,
170
+ buildPath(apiRoutes.delete_api_states_name_attachments_template.path, { name, template }),
145
171
  s.stateDetached,
146
172
  { method: 'DELETE' },
147
173
  ),
@@ -157,7 +183,7 @@ function stateRecordMethods(t: Transport) {
157
183
  params: { kind?: string } & StatePageQuery,
158
184
  signal?: AbortSignal,
159
185
  ) =>
160
- req(`/api/states/${encodeSegment(name)}/subjects`, s.subjectPage, {
186
+ req(buildPath(apiRoutes.get_api_states_name_subjects.path, { name }), s.subjectPage, {
161
187
  signal,
162
188
  query: { kind: params.kind, limit: params.limit, cursor: params.cursor },
163
189
  }),
@@ -168,25 +194,39 @@ function stateRecordMethods(t: Transport) {
168
194
  body: { filters: Record<string, unknown> } & StatePageQuery,
169
195
  signal?: AbortSignal,
170
196
  ) =>
171
- req(`/api/states/${encodeSegment(name)}/records/search`, s.recordSearchPage, {
172
- method: 'POST',
173
- body,
174
- signal,
175
- }),
197
+ req(
198
+ buildPath(apiRoutes.post_api_states_name_records_search.path, { name }),
199
+ s.recordSearchPage,
200
+ {
201
+ method: 'POST',
202
+ body,
203
+ signal,
204
+ },
205
+ ),
176
206
  // A subject with no document yet reads as `null` (a 200 `{data: null}`, the record
177
207
  // page's Create path) — never an error, so the schema is nullable.
178
208
  getStateRecord: (name: string, subject: StateSubjectRef, signal?: AbortSignal) =>
179
- req(stateRecordPath(name, subject), s.stateRecord.nullable(), { signal }),
209
+ req(
210
+ buildPath(RECORD_ROUTES.read, stateRecordParams(name, subject)),
211
+ s.stateRecord.nullable(),
212
+ { signal },
213
+ ),
180
214
  putStateRecord: (name: string, subject: StateSubjectRef, data: Record<string, unknown>) =>
181
- req(stateRecordPath(name, subject), s.stateRecord, { method: 'PUT', body: data }),
215
+ req(buildPath(RECORD_ROUTES.put, stateRecordParams(name, subject)), s.stateRecord, {
216
+ method: 'PUT',
217
+ body: data,
218
+ }),
182
219
  patchStateRecord: (name: string, subject: StateSubjectRef, data: Record<string, unknown>) =>
183
- req(stateRecordPath(name, subject), s.stateRecord, { method: 'PATCH', body: data }),
220
+ req(buildPath(RECORD_ROUTES.patch, stateRecordParams(name, subject)), s.stateRecord, {
221
+ method: 'PATCH',
222
+ body: data,
223
+ }),
184
224
  applyStateRecord: (
185
225
  name: string,
186
226
  subject: StateSubjectRef,
187
227
  ops: readonly Record<string, unknown>[],
188
228
  ) =>
189
- req(`${stateRecordPath(name, subject)}/deltas`, s.applyResult, {
229
+ req(buildPath(RECORD_ROUTES.deltas, stateRecordParams(name, subject)), s.applyResult, {
190
230
  method: 'POST',
191
231
  body: { ops },
192
232
  }),
@@ -208,7 +248,10 @@ function stateRecordOpMethods(t: Transport) {
208
248
  signal?: AbortSignal,
209
249
  ) =>
210
250
  req(
211
- `${stateRecordPath(name, subject)}/template-jq/${encodeSegment(jqName)}`,
251
+ buildPath(RECORD_ROUTES.evalJq, {
252
+ ...stateRecordParams(name, subject),
253
+ program: jqName,
254
+ }),
212
255
  s.templateJqResult,
213
256
  { signal, query: encodeJqParams(params) },
214
257
  ),
@@ -222,12 +265,17 @@ function stateRecordOpMethods(t: Transport) {
222
265
  body?: { input?: unknown; op_id?: string },
223
266
  ) =>
224
267
  req(
225
- `${stateRecordPath(name, subject)}/template-jq/${encodeSegment(jqName)}`,
268
+ buildPath(RECORD_ROUTES.applyJq, {
269
+ ...stateRecordParams(name, subject),
270
+ program: jqName,
271
+ }),
226
272
  s.templateJqApplyResult,
227
273
  { method: 'POST', body: body ?? {} },
228
274
  ),
229
275
  deleteStateRecord: (name: string, subject: StateSubjectRef) =>
230
- req(stateRecordPath(name, subject), s.recordErased, { method: 'DELETE' }),
276
+ req(buildPath(RECORD_ROUTES.erase, stateRecordParams(name, subject)), s.recordErased, {
277
+ method: 'DELETE',
278
+ }),
231
279
  // `mode` is required server-side (`switch` drops, `merge` combines); the fold returns
232
280
  // a report, not the surviving record.
233
281
  foldStateRecord: (
@@ -236,7 +284,7 @@ function stateRecordOpMethods(t: Transport) {
236
284
  into: StateSubjectRef,
237
285
  mode: 'switch' | 'merge',
238
286
  ) =>
239
- req(`${stateRecordPath(name, subject)}/fold`, s.stateFoldReport, {
287
+ req(buildPath(RECORD_ROUTES.fold, stateRecordParams(name, subject)), s.stateFoldReport, {
240
288
  method: 'POST',
241
289
  body: { into, mode },
242
290
  }),
@@ -246,12 +294,14 @@ function stateRecordOpMethods(t: Transport) {
246
294
  params?: StatePageQuery,
247
295
  signal?: AbortSignal,
248
296
  ) =>
249
- req(`${stateRecordPath(name, subject)}/writes`, s.writesPage, {
297
+ req(buildPath(RECORD_ROUTES.writes, stateRecordParams(name, subject)), s.writesPage, {
250
298
  signal,
251
299
  query: { limit: params?.limit, cursor: params?.cursor },
252
300
  }),
253
301
  stateConsumers: (name: string, signal?: AbortSignal) =>
254
- req(`/api/states/${encodeSegment(name)}/consumers`, s.stateConsumers, { signal }),
302
+ req(buildPath(apiRoutes.get_api_states_name_consumers.path, { name }), s.stateConsumers, {
303
+ signal,
304
+ }),
255
305
  };
256
306
  }
257
307
 
@@ -260,29 +310,81 @@ function stateTemplateMethods(t: Transport) {
260
310
  const { req } = t;
261
311
  return {
262
312
  listStateTemplates: (signal?: AbortSignal) =>
263
- req('/api/state-templates', s.stateTemplateList, { signal }),
313
+ req(apiRoutes.get_api_state_templates.path, s.stateTemplateList, { signal }),
264
314
  getStateTemplate: (name: string, signal?: AbortSignal) =>
265
- req(`/api/state-templates/${encodeSegment(name)}`, s.stateTemplateDocument, { signal }),
315
+ req(
316
+ buildPath(apiRoutes.get_api_state_templates_name.path, { name }),
317
+ s.stateTemplateDocument,
318
+ { signal },
319
+ ),
266
320
  putStateTemplate: (name: string, body: StateTemplateBody, replace?: boolean) =>
267
- req(`/api/state-templates/${encodeSegment(name)}`, s.stateTemplateDocument, {
268
- method: 'PUT',
269
- body,
270
- query: replace === true ? { replace: 'true' } : undefined,
271
- }),
321
+ req(
322
+ buildPath(apiRoutes.put_api_state_templates_name.path, { name }),
323
+ s.stateTemplateDocument,
324
+ {
325
+ method: 'PUT',
326
+ body,
327
+ query: replace === true ? { replace: 'true' } : undefined,
328
+ },
329
+ ),
272
330
  deleteStateTemplate: (name: string) =>
273
- req(`/api/state-templates/${encodeSegment(name)}`, s.stateTemplateDeleted, {
274
- method: 'DELETE',
275
- }),
331
+ req(
332
+ buildPath(apiRoutes.delete_api_state_templates_name.path, { name }),
333
+ s.stateTemplateDeleted,
334
+ {
335
+ method: 'DELETE',
336
+ },
337
+ ),
276
338
  pruneStateRetention: () =>
277
- req('/api/state-retention/prune', s.stateRetentionPruned, { method: 'POST', body: {} }),
339
+ req(apiRoutes.post_api_state_retention_prune.path, s.stateRetentionPruned, {
340
+ method: 'POST',
341
+ body: {},
342
+ }),
343
+ };
344
+ }
345
+
346
+ /**
347
+ * Pending saves: the writes and deferred calls a run saved before its reply and that apply after
348
+ * it. A failed one holds its subjects until it is retried (after its cause is repaired) or
349
+ * discarded. `status` `failed` lists the failed ones only; `outstanding` (or none) every one.
350
+ */
351
+ function statePendingSaveMethods(t: Transport) {
352
+ const { req } = t;
353
+ return {
354
+ listPendingSaves: (
355
+ params: { status?: 'outstanding' | 'failed' } & StatePageQuery,
356
+ signal?: AbortSignal,
357
+ ) =>
358
+ req(apiRoutes.get_api_state_pending_saves.path, s.pendingSavesPage, {
359
+ signal,
360
+ query: { status: params.status, limit: params.limit, cursor: params.cursor },
361
+ }),
362
+ retryPendingSave: (id: string) =>
363
+ req(
364
+ buildPath(apiRoutes.post_api_state_pending_saves_id_retry.path, { id }),
365
+ s.pendingSaveRetried,
366
+ {
367
+ method: 'POST',
368
+ body: {},
369
+ },
370
+ ),
371
+ discardPendingSave: (id: string) =>
372
+ req(
373
+ buildPath(apiRoutes.delete_api_state_pending_saves_id.path, { id }),
374
+ s.pendingSaveDiscarded,
375
+ {
376
+ method: 'DELETE',
377
+ },
378
+ ),
278
379
  };
279
380
  }
280
381
 
281
382
  export function statesClient(t: Transport) {
282
383
  // Declaration emit prepends each spread group's members, so the groups are
283
384
  // spread in reverse of their public order to keep the surface declaration →
284
- // attachments → records → record-ops → templates.
385
+ // attachments → records → record-ops → templates → pending saves.
285
386
  return {
387
+ ...statePendingSaveMethods(t),
286
388
  ...stateTemplateMethods(t),
287
389
  ...stateRecordOpMethods(t),
288
390
  ...stateRecordMethods(t),
@@ -1,4 +1,5 @@
1
1
  /** Storage resource CRUD sub-client. */
2
+ import { apiRoutes, buildPath } from '../generated/api-routes';
2
3
  import { apiDownload, isUnsafePathSegment } from '../http';
3
4
  import * as s from '../schemas';
4
5
  import type { Transport } from './transport';
@@ -29,12 +30,11 @@ export interface StorageUploadBody {
29
30
  * route. The server enforces the same relative-path rule; failing fast here keeps a
30
31
  * malformed id from ever leaving the client.
31
32
  */
32
- function encodePath(id: string): string {
33
- const segments = id.split('/');
34
- if (segments.some(isUnsafePathSegment)) {
33
+ function storagePath(id: string): string {
34
+ if (id.split('/').some(isUnsafePathSegment)) {
35
35
  throw new Error("storage path must be a relative path with no empty, '.', or '..' segment");
36
36
  }
37
- return segments.map(encodeURIComponent).join('/');
37
+ return id;
38
38
  }
39
39
 
40
40
  export function storageClient(t: Transport) {
@@ -43,21 +43,50 @@ export function storageClient(t: Transport) {
43
43
  // The content store a storage-provider plugin exposes. Dead by default:
44
44
  // `getStorageInfo` reports `present: false` (a 200 empty state) and every other
45
45
  // door answers a loud 501 when no provider is installed. Ids may be nested
46
- // paths, so each is `encodePath`-encoded (per-segment, `/` preserved).
47
- getStorageInfo: (signal?: AbortSignal) => req('/api/storage', s.storageInfo, { signal }),
46
+ // paths: `storagePath` refuses a dot or empty segment, and `buildPath` encodes each
47
+ // segment of the route's `{…:path}` parameter with the `/` separators preserved.
48
+ getStorageInfo: (signal?: AbortSignal) =>
49
+ req(apiRoutes.get_api_storage.path, s.storageInfo, { signal }),
48
50
  listStorageResources: (signal?: AbortSignal) =>
49
- req('/api/storage/resources', s.storageResourceList, { signal }),
51
+ req(apiRoutes.get_api_storage_resources.path, s.storageResourceList, { signal }),
50
52
  statStorageResource: (id: string, signal?: AbortSignal) =>
51
- req(`/api/storage/resources/${encodePath(id)}/stat`, s.storageResourceStat, { signal }),
53
+ req(
54
+ buildPath(apiRoutes.get_api_storage_resources_resource_id_stat.path, {
55
+ resource_id: storagePath(id),
56
+ }),
57
+ s.storageResourceStat,
58
+ { signal },
59
+ ),
52
60
  downloadStorageResource: (id: string, signal?: AbortSignal): Promise<Blob> =>
53
- apiDownload(config, `/api/storage/resources/${encodePath(id)}/content`, { signal }),
61
+ apiDownload(
62
+ config,
63
+ buildPath(apiRoutes.get_api_storage_resources_resource_id_content.path, {
64
+ resource_id: storagePath(id),
65
+ }),
66
+ { signal },
67
+ ),
54
68
  uploadStorageResource: (body: StorageUploadBody) =>
55
- req('/api/storage/resources', s.storageResourceStored, { method: 'POST', body }),
56
- deleteStorageResource: (id: string) =>
57
- req(`/api/storage/resources/${encodePath(id)}`, s.storageResourceDeleted, {
58
- method: 'DELETE',
69
+ req(apiRoutes.post_api_storage_resources.path, s.storageResourceStored, {
70
+ method: 'POST',
71
+ body,
59
72
  }),
73
+ deleteStorageResource: (id: string) =>
74
+ req(
75
+ buildPath(apiRoutes.delete_api_storage_resources_resource_id.path, {
76
+ resource_id: storagePath(id),
77
+ }),
78
+ s.storageResourceDeleted,
79
+ {
80
+ method: 'DELETE',
81
+ },
82
+ ),
60
83
  deleteStorageDir: (path: string) =>
61
- req(`/api/storage/dirs/${encodePath(path)}`, s.storageDirDeleted, { method: 'DELETE' }),
84
+ req(
85
+ buildPath(apiRoutes.delete_api_storage_dirs_dir_path.path, { dir_path: storagePath(path) }),
86
+ s.storageDirDeleted,
87
+ {
88
+ method: 'DELETE',
89
+ },
90
+ ),
62
91
  };
63
92
  }
@@ -1,17 +1,23 @@
1
1
  /** Sub-MCP mount registry sub-client. */
2
- import { encodeSegment } from '../http';
2
+ import { apiRoutes, buildPath } from '../generated/api-routes';
3
3
  import * as s from '../schemas';
4
4
  import type { Transport } from './transport';
5
5
 
6
6
  export function subMcpClient(t: Transport) {
7
7
  const { req } = t;
8
8
  return {
9
- listSubMcp: (signal?: AbortSignal) => req('/api/sub-mcp', s.subMcpList, { signal }),
9
+ listSubMcp: (signal?: AbortSignal) =>
10
+ req(apiRoutes.get_api_sub_mcp.path, s.subMcpList, { signal }),
10
11
  // `transport` is optional at the client boundary (the server defaults it to
11
12
  // `http`); when omitted, JSON.stringify drops the undefined key from the body.
12
13
  createSubMcp: (slug: string, tools: string[], transport?: string) =>
13
- req('/api/sub-mcp', s.subMcpCreated, { method: 'POST', body: { slug, tools, transport } }),
14
+ req(apiRoutes.post_api_sub_mcp.path, s.subMcpCreated, {
15
+ method: 'POST',
16
+ body: { slug, tools, transport },
17
+ }),
14
18
  deleteSubMcp: (slug: string) =>
15
- req(`/api/sub-mcp/${encodeSegment(slug)}`, s.subMcpRemoved, { method: 'DELETE' }),
19
+ req(buildPath(apiRoutes.delete_api_sub_mcp_slug.path, { slug }), s.subMcpRemoved, {
20
+ method: 'DELETE',
21
+ }),
16
22
  };
17
23
  }
@@ -1,4 +1,5 @@
1
1
  /** System health and pluggable-kind status sub-client. */
2
+ import { apiRoutes } from '../generated/api-routes';
2
3
  import { apiText } from '../http';
3
4
  import * as s from '../schemas';
4
5
  import type { Transport } from './transport';
@@ -11,6 +12,6 @@ export function systemClient(t: Transport) {
11
12
  // The pluggable-kind status table (`GET /api/system/kinds`) — a JSON `{data}`
12
13
  // envelope, one row per kind with its active/default/off state.
13
14
  getSystemKinds: (signal?: AbortSignal) =>
14
- req('/api/system/kinds', s.kindStatusList, { signal }),
15
+ req(apiRoutes.get_api_system_kinds.path, s.kindStatusList, { signal }),
15
16
  };
16
17
  }
@@ -1,28 +1,47 @@
1
1
  /** Prompt-template listing, render and mutation sub-client. */
2
+ import { apiRoutes } from '../generated/api-routes';
2
3
  import * as s from '../schemas';
3
4
  import type { Transport } from './transport';
4
5
 
5
6
  export function templatesClient(t: Transport) {
6
7
  const { req } = t;
7
8
  return {
8
- listTemplates: (signal?: AbortSignal) => req('/api/templates', s.templateNames, { signal }),
9
+ listTemplates: (signal?: AbortSignal) =>
10
+ req(apiRoutes.get_api_templates.path, s.templateNames, { signal }),
9
11
  getTemplate: (templateId: string) =>
10
- req('/api/template', s.templateDetail, { method: 'POST', body: { template_id: templateId } }),
12
+ req(apiRoutes.post_api_template.path, s.templateDetail, {
13
+ method: 'POST',
14
+ body: { template_id: templateId },
15
+ }),
11
16
  uploadTemplate: (path: string, content: string) =>
12
- req('/api/upload-template', s.templateUploaded, { method: 'POST', body: { path, content } }),
17
+ req(apiRoutes.post_api_upload_template.path, s.templateUploaded, {
18
+ method: 'POST',
19
+ body: { path, content },
20
+ }),
13
21
  deleteTemplate: (path: string) =>
14
- req('/api/delete-template', s.templateDeleted, { method: 'POST', body: { path } }),
22
+ req(apiRoutes.post_api_delete_template.path, s.templateDeleted, {
23
+ method: 'POST',
24
+ body: { path },
25
+ }),
15
26
  // Delete every stored template under a directory prefix. Unlike the idempotent
16
27
  // single delete, the server 404s a prefix matching nothing and 400s the template
17
28
  // root; those surface as loud errors, never a faked success.
18
29
  deleteTemplateDir: (path: string) =>
19
- req('/api/delete-template-dir', s.templateDirDeleted, { method: 'POST', body: { path } }),
30
+ req(apiRoutes.post_api_delete_template_dir.path, s.templateDirDeleted, {
31
+ method: 'POST',
32
+ body: { path },
33
+ }),
20
34
  // Render one authored text — inline `content` OR a stored template `id`, plus its
21
35
  // render `kwargs` — and parse the rendered output. The value is the shared
22
36
  // `TemplatedText` (exactly one source); the route wraps it under `text`.
23
37
  renderTemplate: (text: s.TemplatedText) =>
24
- req('/api/render-template', s.templateRendered, { method: 'POST', body: { text } }),
38
+ req(apiRoutes.post_api_render_template.path, s.templateRendered, {
39
+ method: 'POST',
40
+ body: { text },
41
+ }),
25
42
  clearTemplatesCache: () =>
26
- req('/api/clear-templates-cache', s.templateCacheCleared, { method: 'POST' }),
43
+ req(apiRoutes.post_api_clear_templates_cache.path, s.templateCacheCleared, {
44
+ method: 'POST',
45
+ }),
27
46
  };
28
47
  }
@@ -1,24 +1,31 @@
1
1
  /** Tool extension listing and authoring sub-client. */
2
- import { encodeSegment } from '../http';
2
+ import { apiRoutes, buildPath } from '../generated/api-routes';
3
3
  import * as s from '../schemas';
4
4
  import type { Transport } from './transport';
5
5
 
6
6
  export function toolExtensionsClient(t: Transport) {
7
7
  const { req } = t;
8
8
  return {
9
- listExtensions: (signal?: AbortSignal) => req('/api/extensions', s.extensions, { signal }),
9
+ listExtensions: (signal?: AbortSignal) =>
10
+ req(apiRoutes.get_api_extensions.path, s.extensions, { signal }),
10
11
  // A MANIFEST-provided tool's current combos + the extension catalog. (A preset
11
12
  // tool's extensions live on the preset spec, read via `getPreset`.)
12
13
  getToolExtensions: (name: string, signal?: AbortSignal) =>
13
- req(`/api/tools/${encodeSegment(name)}/extensions`, s.toolExtensions, { signal }),
14
+ req(buildPath(apiRoutes.get_api_tools_name_extensions.path, { name }), s.toolExtensions, {
15
+ signal,
16
+ }),
14
17
  // Author ALL of a MANIFEST tool's combos at once (the full lossless list; `[]`
15
18
  // clears). Returns the apply result: the local reload (`status` + `env_keys`) plus
16
19
  // the mode-wrapped fleet `fanout` of the reload it broadcast, from which the shared
17
20
  // fleet-report handler surfaces any failed propagation.
18
21
  setToolExtensions: (name: string, combos: readonly s.PresetExtensionElement[][]) =>
19
- req(`/api/tools/${encodeSegment(name)}/extensions`, s.toolExtensionsApplyResult, {
20
- method: 'POST',
21
- body: { combos },
22
- }),
22
+ req(
23
+ buildPath(apiRoutes.post_api_tools_name_extensions.path, { name }),
24
+ s.toolExtensionsApplyResult,
25
+ {
26
+ method: 'POST',
27
+ body: { combos },
28
+ },
29
+ ),
23
30
  };
24
31
  }
@@ -1,5 +1,5 @@
1
1
  /** Tool-organization overlay (folders and meta) sub-client. */
2
- import { encodeSegment } from '../http';
2
+ import { apiRoutes, buildPath } from '../generated/api-routes';
3
3
  import * as s from '../schemas';
4
4
  import type { Transport } from './transport';
5
5
 
@@ -28,38 +28,63 @@ export function toolMetaClient(t: Transport) {
28
28
  return {
29
29
  // The folder tree + per-tool overlay rows in one read; the features merge the
30
30
  // rows against the live tool list and native tags client-side.
31
- listToolMeta: (signal?: AbortSignal) => req('/api/tool-meta', s.toolMetaOverlay, { signal }),
31
+ listToolMeta: (signal?: AbortSignal) =>
32
+ req(apiRoutes.get_api_tool_meta.path, s.toolMetaOverlay, { signal }),
32
33
  // Merge-patch a tool's overlay row (create it if absent). `patch` carries ONLY
33
34
  // the fields to change — a present-null clears, an absent field is untouched,
34
35
  // and a present `tags` array replaces the set.
35
36
  upsertToolMeta: (toolName: string, patch: ToolMetaPatch) =>
36
- req(`/api/tool-meta/tools/${encodeSegment(toolName)}`, s.toolMetaRecord, {
37
- method: 'PATCH',
38
- body: patch,
39
- }),
37
+ req(
38
+ buildPath(apiRoutes.patch_api_tool_meta_tools_tool_name.path, { tool_name: toolName }),
39
+ s.toolMetaRecord,
40
+ {
41
+ method: 'PATCH',
42
+ body: patch,
43
+ },
44
+ ),
40
45
  deleteToolMeta: (toolName: string) =>
41
- req(`/api/tool-meta/tools/${encodeSegment(toolName)}`, s.toolMetaDeleted, {
42
- method: 'DELETE',
43
- }),
46
+ req(
47
+ buildPath(apiRoutes.delete_api_tool_meta_tools_tool_name.path, { tool_name: toolName }),
48
+ s.toolMetaDeleted,
49
+ {
50
+ method: 'DELETE',
51
+ },
52
+ ),
44
53
  createFolder: (name: string, parentId: string | null = null) =>
45
- req('/api/tool-meta/folders', s.folderRecord, {
54
+ req(apiRoutes.post_api_tool_meta_folders.path, s.folderRecord, {
46
55
  method: 'POST',
47
56
  body: { name, parent_id: parentId },
48
57
  }),
49
58
  renameFolder: (folderId: string, name: string) =>
50
- req(`/api/tool-meta/folders/${encodeSegment(folderId)}/rename`, s.folderRecord, {
51
- method: 'POST',
52
- body: { name },
53
- }),
59
+ req(
60
+ buildPath(apiRoutes.post_api_tool_meta_folders_folder_id_rename.path, {
61
+ folder_id: folderId,
62
+ }),
63
+ s.folderRecord,
64
+ {
65
+ method: 'POST',
66
+ body: { name },
67
+ },
68
+ ),
54
69
  // `null` re-parents to the root.
55
70
  moveFolder: (folderId: string, parentId: string | null) =>
56
- req(`/api/tool-meta/folders/${encodeSegment(folderId)}/move`, s.folderRecord, {
57
- method: 'POST',
58
- body: { parent_id: parentId },
59
- }),
71
+ req(
72
+ buildPath(apiRoutes.post_api_tool_meta_folders_folder_id_move.path, {
73
+ folder_id: folderId,
74
+ }),
75
+ s.folderRecord,
76
+ {
77
+ method: 'POST',
78
+ body: { parent_id: parentId },
79
+ },
80
+ ),
60
81
  deleteFolder: (folderId: string) =>
61
- req(`/api/tool-meta/folders/${encodeSegment(folderId)}`, s.folderDeleted, {
62
- method: 'DELETE',
63
- }),
82
+ req(
83
+ buildPath(apiRoutes.delete_api_tool_meta_folders_folder_id.path, { folder_id: folderId }),
84
+ s.folderDeleted,
85
+ {
86
+ method: 'DELETE',
87
+ },
88
+ ),
64
89
  };
65
90
  }