@vibesdotdev/client 0.1.1 → 1.0.0-rc.3

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 (238) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +24 -15
  3. package/dist/api-client-plugin.d.ts +4 -0
  4. package/dist/api-client-plugin.d.ts.map +1 -0
  5. package/dist/api-client-plugin.js +20 -0
  6. package/dist/api-client-plugin.js.map +1 -0
  7. package/dist/api-client.impl.d.ts +23 -0
  8. package/dist/api-client.impl.d.ts.map +1 -0
  9. package/dist/api-client.impl.js +47 -0
  10. package/dist/api-client.impl.js.map +1 -0
  11. package/dist/client.consumer.plugin.d.ts +3 -0
  12. package/dist/client.consumer.plugin.d.ts.map +1 -0
  13. package/dist/client.consumer.plugin.js +10 -0
  14. package/dist/client.consumer.plugin.js.map +1 -0
  15. package/dist/cloud.plugin.d.ts +3 -0
  16. package/dist/cloud.plugin.d.ts.map +1 -0
  17. package/dist/cloud.plugin.js +10 -0
  18. package/dist/cloud.plugin.js.map +1 -0
  19. package/dist/config/client.config.descriptor.d.ts +4 -0
  20. package/dist/config/client.config.descriptor.d.ts.map +1 -0
  21. package/dist/config/client.config.descriptor.js +32 -0
  22. package/dist/config/client.config.descriptor.js.map +1 -0
  23. package/dist/config/index.d.ts +3 -0
  24. package/dist/config/index.d.ts.map +1 -0
  25. package/dist/config/index.js +3 -0
  26. package/dist/config/index.js.map +1 -0
  27. package/dist/config/settings.d.ts +9 -0
  28. package/dist/config/settings.d.ts.map +1 -0
  29. package/dist/config/settings.js +25 -0
  30. package/dist/config/settings.js.map +1 -0
  31. package/dist/docs/client.api-request.docs.descriptor.d.ts +4 -0
  32. package/dist/docs/client.api-request.docs.descriptor.d.ts.map +1 -0
  33. package/dist/docs/client.api-request.docs.descriptor.js +71 -0
  34. package/dist/docs/client.api-request.docs.descriptor.js.map +1 -0
  35. package/dist/events/auth-rejected.event.d.ts +35 -0
  36. package/dist/events/auth-rejected.event.d.ts.map +1 -0
  37. package/dist/events/auth-rejected.event.js +36 -0
  38. package/dist/events/auth-rejected.event.js.map +1 -0
  39. package/dist/factory.d.ts +5 -1
  40. package/dist/factory.d.ts.map +1 -1
  41. package/dist/factory.js +16 -17
  42. package/dist/factory.js.map +1 -1
  43. package/dist/index.d.ts +3 -0
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +2 -0
  46. package/dist/index.js.map +1 -1
  47. package/dist/kind-augment.d.ts +11 -0
  48. package/dist/kind-augment.d.ts.map +1 -0
  49. package/dist/kind-augment.js +2 -0
  50. package/dist/kind-augment.js.map +1 -0
  51. package/dist/lib/client/api-diagnostics.d.ts +79 -0
  52. package/dist/lib/client/api-diagnostics.d.ts.map +1 -0
  53. package/dist/lib/client/api-diagnostics.js +111 -0
  54. package/dist/lib/client/api-diagnostics.js.map +1 -0
  55. package/dist/lib/client/configured.d.ts +78 -0
  56. package/dist/lib/client/configured.d.ts.map +1 -0
  57. package/dist/lib/client/configured.js +261 -0
  58. package/dist/lib/client/configured.js.map +1 -0
  59. package/dist/lib/client/internal/auth-headers.d.ts +11 -0
  60. package/dist/lib/client/internal/auth-headers.d.ts.map +1 -0
  61. package/dist/lib/client/internal/auth-headers.js +35 -0
  62. package/dist/lib/client/internal/auth-headers.js.map +1 -0
  63. package/dist/lib/client/internal/base-client.d.ts +5 -2
  64. package/dist/lib/client/internal/base-client.d.ts.map +1 -1
  65. package/dist/lib/client/internal/base-client.js +42 -22
  66. package/dist/lib/client/internal/base-client.js.map +1 -1
  67. package/dist/lib/client/internal/base-helpers.d.ts.map +1 -1
  68. package/dist/lib/client/internal/base-helpers.js +20 -20
  69. package/dist/lib/client/internal/base-helpers.js.map +1 -1
  70. package/dist/lib/client/internal/base-types.d.ts +10 -5
  71. package/dist/lib/client/internal/base-types.d.ts.map +1 -1
  72. package/dist/lib/client/internal/base-types.js +5 -3
  73. package/dist/lib/client/internal/base-types.js.map +1 -1
  74. package/dist/lib/client/internal/client-values.d.ts +43 -0
  75. package/dist/lib/client/internal/client-values.d.ts.map +1 -0
  76. package/dist/lib/client/internal/client-values.js +76 -0
  77. package/dist/lib/client/internal/client-values.js.map +1 -0
  78. package/dist/lib/client/internal/endpoint.d.ts +6 -5
  79. package/dist/lib/client/internal/endpoint.d.ts.map +1 -1
  80. package/dist/lib/client/internal/endpoint.js +3 -0
  81. package/dist/lib/client/internal/endpoint.js.map +1 -1
  82. package/dist/lib/client/internal/generator.d.ts +98 -9
  83. package/dist/lib/client/internal/generator.d.ts.map +1 -1
  84. package/dist/lib/client/internal/generator.js +92 -140
  85. package/dist/lib/client/internal/generator.js.map +1 -1
  86. package/dist/lib/client/internal/request-builder.d.ts +5 -2
  87. package/dist/lib/client/internal/request-builder.d.ts.map +1 -1
  88. package/dist/lib/client/internal/request-builder.js +105 -65
  89. package/dist/lib/client/internal/request-builder.js.map +1 -1
  90. package/dist/lib/client/internal/sse-stream.d.ts +9 -5
  91. package/dist/lib/client/internal/sse-stream.d.ts.map +1 -1
  92. package/dist/lib/client/internal/sse-stream.js +96 -94
  93. package/dist/lib/client/internal/sse-stream.js.map +1 -1
  94. package/dist/lib/client/internal/timeout-signal.d.ts +8 -0
  95. package/dist/lib/client/internal/timeout-signal.d.ts.map +1 -0
  96. package/dist/lib/client/internal/timeout-signal.js +17 -0
  97. package/dist/lib/client/internal/timeout-signal.js.map +1 -0
  98. package/dist/lib/client/internal/transport/http2-fetch.d.ts +8 -0
  99. package/dist/lib/client/internal/transport/http2-fetch.d.ts.map +1 -0
  100. package/dist/lib/client/internal/transport/http2-fetch.js +17 -0
  101. package/dist/lib/client/internal/transport/http2-fetch.js.map +1 -0
  102. package/dist/lib/client/internal/vibes-client.d.ts +17 -8
  103. package/dist/lib/client/internal/vibes-client.d.ts.map +1 -1
  104. package/dist/lib/client/internal/vibes-client.js +127 -67
  105. package/dist/lib/client/internal/vibes-client.js.map +1 -1
  106. package/dist/lib/client/internal/wrap-fetch.d.ts +3 -2
  107. package/dist/lib/client/internal/wrap-fetch.d.ts.map +1 -1
  108. package/dist/lib/client/internal/wrap-fetch.js +14 -33
  109. package/dist/lib/client/internal/wrap-fetch.js.map +1 -1
  110. package/dist/lib/client/runtime-fetch.d.ts +14 -0
  111. package/dist/lib/client/runtime-fetch.d.ts.map +1 -0
  112. package/dist/lib/client/runtime-fetch.js +25 -0
  113. package/dist/lib/client/runtime-fetch.js.map +1 -0
  114. package/dist/lib/client/types.d.ts +18 -9
  115. package/dist/lib/client/types.d.ts.map +1 -1
  116. package/dist/lib/client/types.js +22 -3
  117. package/dist/lib/client/types.js.map +1 -1
  118. package/dist/plugin.d.ts +2 -18
  119. package/dist/plugin.d.ts.map +1 -1
  120. package/dist/plugin.js +7 -74
  121. package/dist/plugin.js.map +1 -1
  122. package/dist/runtime-client.d.ts +10 -0
  123. package/dist/runtime-client.d.ts.map +1 -0
  124. package/dist/runtime-client.js +14 -0
  125. package/dist/runtime-client.js.map +1 -0
  126. package/dist/schemas/auth-rejected.d.ts +12 -0
  127. package/dist/schemas/auth-rejected.d.ts.map +1 -0
  128. package/dist/schemas/auth-rejected.js +11 -0
  129. package/dist/schemas/auth-rejected.js.map +1 -0
  130. package/dist/schemas/sdk-languages.d.ts +47 -0
  131. package/dist/schemas/sdk-languages.d.ts.map +1 -0
  132. package/dist/schemas/sdk-languages.js +75 -0
  133. package/dist/schemas/sdk-languages.js.map +1 -0
  134. package/dist/schemas/settings.d.ts +14 -0
  135. package/dist/schemas/settings.d.ts.map +1 -0
  136. package/dist/schemas/settings.js +10 -0
  137. package/dist/schemas/settings.js.map +1 -0
  138. package/dist/schemas/validated-request.d.ts +19 -0
  139. package/dist/schemas/validated-request.d.ts.map +1 -0
  140. package/dist/schemas/validated-request.js +2 -0
  141. package/dist/schemas/validated-request.js.map +1 -0
  142. package/dist/schemas.d.ts +23 -8
  143. package/dist/schemas.d.ts.map +1 -1
  144. package/dist/schemas.js +8 -2
  145. package/dist/schemas.js.map +1 -1
  146. package/dist/sse-client.d.ts +17 -15
  147. package/dist/sse-client.d.ts.map +1 -1
  148. package/dist/sse-client.js +111 -91
  149. package/dist/sse-client.js.map +1 -1
  150. package/dist/svelte/client-svelte.plugin.d.ts +5 -0
  151. package/dist/svelte/client-svelte.plugin.d.ts.map +1 -0
  152. package/dist/svelte/client-svelte.plugin.js +46 -0
  153. package/dist/svelte/index.d.ts +3 -0
  154. package/dist/svelte/index.d.ts.map +1 -0
  155. package/dist/svelte/index.js +2 -0
  156. package/dist/svelte/styles.css +8 -0
  157. package/dist/svelte/tool-widgets/ApiRequestToolCard.svelte +53 -0
  158. package/dist/svelte/tool-widgets/ApiRequestToolCard.svelte.d.ts +5 -0
  159. package/dist/svelte/tool-widgets/ApiRequestToolCard.svelte.d.ts.map +1 -0
  160. package/dist/svelte/tool-widgets/index.d.ts +2 -0
  161. package/dist/svelte/tool-widgets/index.d.ts.map +1 -0
  162. package/dist/svelte/tool-widgets/index.js +1 -0
  163. package/dist/tools/api-request/api-request.contract.d.ts +19 -0
  164. package/dist/tools/api-request/api-request.contract.d.ts.map +1 -0
  165. package/dist/tools/api-request/api-request.contract.js +110 -0
  166. package/dist/tools/api-request/api-request.contract.js.map +1 -0
  167. package/dist/tools/api-request/api-request.descriptor.d.ts +11 -4
  168. package/dist/tools/api-request/api-request.descriptor.d.ts.map +1 -1
  169. package/dist/tools/api-request/api-request.descriptor.js +8 -5
  170. package/dist/tools/api-request/api-request.descriptor.js.map +1 -1
  171. package/dist/tools/api-request/api-request.impl.cloud.d.ts +15 -0
  172. package/dist/tools/api-request/api-request.impl.cloud.d.ts.map +1 -0
  173. package/dist/tools/api-request/api-request.impl.cloud.js +75 -0
  174. package/dist/tools/api-request/api-request.impl.cloud.js.map +1 -0
  175. package/dist/tools/api-request/api-request.impl.consumer.d.ts +5 -3
  176. package/dist/tools/api-request/api-request.impl.consumer.d.ts.map +1 -1
  177. package/dist/tools/api-request/api-request.impl.consumer.js +27 -33
  178. package/dist/tools/api-request/api-request.impl.consumer.js.map +1 -1
  179. package/dist/tools/api-request/api-request.view.d.ts +29 -0
  180. package/dist/tools/api-request/api-request.view.d.ts.map +1 -0
  181. package/dist/tools/api-request/api-request.view.js +62 -0
  182. package/dist/tools/api-request/api-request.view.js.map +1 -0
  183. package/dist/tools/api-request/schemas/index.d.ts +12 -5
  184. package/dist/tools/api-request/schemas/index.d.ts.map +1 -1
  185. package/dist/tools/api-request/schemas/index.js +24 -6
  186. package/dist/tools/api-request/schemas/index.js.map +1 -1
  187. package/dist/tui/client-tui.plugin.d.ts +3 -0
  188. package/dist/tui/client-tui.plugin.d.ts.map +1 -0
  189. package/dist/tui/client-tui.plugin.js +32 -0
  190. package/dist/tui/client-tui.plugin.js.map +1 -0
  191. package/dist/tui/index.d.ts +2 -0
  192. package/dist/tui/index.d.ts.map +1 -0
  193. package/dist/tui/index.js +2 -0
  194. package/dist/tui/index.js.map +1 -0
  195. package/dist/tui/tool-widgets/ApiRequestToolWidget.impl.tui.d.ts +17 -0
  196. package/dist/tui/tool-widgets/ApiRequestToolWidget.impl.tui.d.ts.map +1 -0
  197. package/dist/tui/tool-widgets/ApiRequestToolWidget.impl.tui.js +28 -0
  198. package/dist/tui/tool-widgets/ApiRequestToolWidget.impl.tui.js.map +1 -0
  199. package/dist/validated-request.d.ts +27 -0
  200. package/dist/validated-request.d.ts.map +1 -0
  201. package/dist/validated-request.js +119 -0
  202. package/dist/validated-request.js.map +1 -0
  203. package/package.json +188 -41
  204. package/dist/lib/client/internal/node/http2-fetch.node.d.ts +0 -2
  205. package/dist/lib/client/internal/node/http2-fetch.node.d.ts.map +0 -1
  206. package/dist/lib/client/internal/node/http2-fetch.node.js +0 -131
  207. package/dist/lib/client/internal/node/http2-fetch.node.js.map +0 -1
  208. package/dist/lib/client/node.d.ts +0 -5
  209. package/dist/lib/client/node.d.ts.map +0 -1
  210. package/dist/lib/client/node.js +0 -33
  211. package/dist/lib/client/node.js.map +0 -1
  212. package/dist/tools/api-request/index.d.ts +0 -5
  213. package/dist/tools/api-request/index.d.ts.map +0 -1
  214. package/dist/tools/api-request/index.js +0 -4
  215. package/dist/tools/api-request/index.js.map +0 -1
  216. package/src/factory.ts +0 -114
  217. package/src/index.ts +0 -15
  218. package/src/lib/client/core.ts +0 -13
  219. package/src/lib/client/internal/base-client.ts +0 -107
  220. package/src/lib/client/internal/base-helpers.ts +0 -74
  221. package/src/lib/client/internal/base-types.ts +0 -42
  222. package/src/lib/client/internal/endpoint.ts +0 -51
  223. package/src/lib/client/internal/generator.ts +0 -181
  224. package/src/lib/client/internal/index.ts +0 -4
  225. package/src/lib/client/internal/node/http2-fetch.node.ts +0 -138
  226. package/src/lib/client/internal/request-builder.ts +0 -147
  227. package/src/lib/client/internal/sse-stream.ts +0 -130
  228. package/src/lib/client/internal/vibes-client.ts +0 -167
  229. package/src/lib/client/internal/wrap-fetch.ts +0 -59
  230. package/src/lib/client/node.ts +0 -36
  231. package/src/lib/client/types.ts +0 -156
  232. package/src/plugin.ts +0 -104
  233. package/src/schemas.ts +0 -91
  234. package/src/sse-client.ts +0 -155
  235. package/src/tools/api-request/api-request.descriptor.ts +0 -28
  236. package/src/tools/api-request/api-request.impl.consumer.ts +0 -66
  237. package/src/tools/api-request/index.ts +0 -4
  238. package/src/tools/api-request/schemas/index.ts +0 -29
@@ -3,16 +3,19 @@
3
3
  *
4
4
  * Metadata for the api-request tool. Safe to import anywhere.
5
5
  */
6
- import { createRuntimeAsset } from '@vibesdotdev/runtime/factory';
6
+ import { createRuntimeAsset } from '@vibesdotdev/kernel/factory';
7
7
  import { apiRequestInputSchema, apiRequestOutputSchema } from "./schemas/index.js";
8
8
  export default createRuntimeAsset({
9
9
  kind: 'tools/tool',
10
10
  id: 'api-request',
11
11
  name: 'API Request',
12
- description: 'Make an authenticated API request to any Vibes endpoint.',
13
- mcpDescription: 'Make authenticated API request to Vibes endpoints. Ex: {method:"GET",path:"/api/health"}.',
14
- hardware: ['consumer'],
15
- purpose: ['direct', 'worker', 'mcp', 'agent'],
12
+ description: 'Make an authenticated API request to an explicitly named Vibes app.',
13
+ mcpDescription: 'Vibes API request. app is required via the infra/service catalog; auth/cookie headers are rejected. Ex: {app:"account",method:"GET",path:"/api/profile"}.',
14
+ hardware: ['consumer', 'cloud'],
15
+ // MCP adapters do not yet thread verified caller auth into ToolCallContext.
16
+ // Keep the tool out of MCP discovery until that surface owns the contract;
17
+ // direct/worker/agent surfaces fail closed on explicit auth context.
18
+ purpose: ['direct', 'worker', 'agent'],
16
19
  category: 'execution',
17
20
  subcategory: 'api-request',
18
21
  tags: ['api', 'network'],
@@ -1 +1 @@
1
- {"version":3,"file":"api-request.descriptor.js","sourceRoot":"","sources":["../../../src/tools/api-request/api-request.descriptor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEnF,eAAe,kBAAkB,CAAC;IACjC,IAAI,EAAE,YAAY;IAClB,EAAE,EAAE,aAAa;IACjB,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,0DAA0D;IACvE,cAAc,EAAE,2FAA2F;IAC3G,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC;IAC7C,QAAQ,EAAE,WAAW;IACrB,WAAW,EAAE,aAAa;IAC1B,IAAI,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC;IACxB,MAAM,EAAE,OAAO;IACf,gBAAgB,EAAE,IAAI;IACtB,WAAW,EAAE,CAAC,kBAAkB,CAAC;IACjC,OAAO,EAAE;QACR,KAAK,EAAE,qBAAqB;QAC5B,MAAM,EAAE,sBAAsB;KAC9B;CACD,CAAC,CAAC"}
1
+ {"version":3,"file":"api-request.descriptor.js","sourceRoot":"","sources":["../../../src/tools/api-request/api-request.descriptor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEnF,eAAe,kBAAkB,CAAC;IACjC,IAAI,EAAE,YAAY;IAClB,EAAE,EAAE,aAAa;IACjB,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,qEAAqE;IAClF,cAAc,EACb,2JAA2J;IAC5J,QAAQ,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC;IAC/B,4EAA4E;IAC5E,2EAA2E;IAC3E,qEAAqE;IACrE,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC;IACtC,QAAQ,EAAE,WAAW;IACrB,WAAW,EAAE,aAAa;IAC1B,IAAI,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC;IACxB,MAAM,EAAE,OAAO;IACf,gBAAgB,EAAE,IAAI;IACtB,WAAW,EAAE,CAAC,kBAAkB,CAAC;IACjC,OAAO,EAAE;QACR,KAAK,EAAE,qBAAqB;QAC5B,MAAM,EAAE,sBAAsB;KAC9B;CACD,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * api-request Tool Implementation (Cloud)
3
+ *
4
+ * Resolves the requested app through the declared infra/service catalog and
5
+ * forwards only caller-scoped authentication supplied by the tool execution
6
+ * context. Cloud execution fails closed when the surface did not provide a
7
+ * JWT or cookie.
8
+ */
9
+ import type { VibesRuntime, ToolCallContext } from '@vibesdotdev/kernel';
10
+ import type { ApiRequestInput, ApiRequestOutput } from './schemas/index.ts';
11
+ declare const _default: {
12
+ execute(input: ApiRequestInput, runtime: VibesRuntime, ctx: ToolCallContext): Promise<ApiRequestOutput>;
13
+ };
14
+ export default _default;
15
+ //# sourceMappingURL=api-request.impl.cloud.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-request.impl.cloud.d.ts","sourceRoot":"","sources":["../../../src/tools/api-request/api-request.impl.cloud.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAUzE,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;;mBAqDnE,eAAe,WACb,YAAY,OAChB,eAAe,GAClB,OAAO,CAAC,gBAAgB,CAAC;;AAL7B,wBA4BE"}
@@ -0,0 +1,75 @@
1
+ import { valueFreeFailure, CaughtFailureSchema } from '@vibesdotdev/kernel';
2
+ import { JsonValueSchema, readClientValue } from "../../lib/client/internal/client-values.js";
3
+ import { apiRequestInputSchema } from "./schemas/index.js";
4
+ import * as z from 'zod/v4';
5
+ import { vibesApiClient } from "../../factory.js";
6
+ import { ApiRequestContractError, apiRequestErrorOutput, apiRequestSuccessOutput, resolveApiRequestTarget } from "./api-request.contract.js";
7
+ function nonEmptyMetadataString(ctx, key) {
8
+ const value = readClientValue(z.object({ metadata: z.record(z.string(), JsonValueSchema).optional() }), ctx, 'api-request-context-unreadable').metadata?.[key];
9
+ const parsed = z.string().safeParse(value);
10
+ if (!parsed.success)
11
+ return null;
12
+ const trimmed = parsed.data.trim();
13
+ return trimmed.length > 0 ? trimmed : null;
14
+ }
15
+ const FORWARDABLE_AUTH_COOKIES = new Set([
16
+ '__Secure-better-auth.session_token',
17
+ 'better-auth.session_token'
18
+ ]);
19
+ /**
20
+ * Extract only the canonical Better Auth session cookie. Tool metadata may
21
+ * carry the caller's complete host Cookie header; forwarding that verbatim to
22
+ * a sibling app would leak unrelated host-only cookies across trust domains.
23
+ */
24
+ function resolveForwardableAuthCookie(rawCookie) {
25
+ for (const part of rawCookie.split(';')) {
26
+ const separator = part.indexOf('=');
27
+ if (separator <= 0)
28
+ continue;
29
+ const name = part.slice(0, separator).trim();
30
+ const value = part.slice(separator + 1).trim();
31
+ if (FORWARDABLE_AUTH_COOKIES.has(name) && value.length > 0 && !/[\r\n]/.test(value)) {
32
+ return `${name}=${value}`;
33
+ }
34
+ }
35
+ return null;
36
+ }
37
+ function resolveCallerAuth(ctx) {
38
+ const jwt = nonEmptyMetadataString(ctx, 'jwt');
39
+ if (jwt) {
40
+ return { auth: { type: 'bearer', credentials: jwt } };
41
+ }
42
+ const cookie = nonEmptyMetadataString(ctx, 'cookie');
43
+ if (cookie) {
44
+ const authCookie = resolveForwardableAuthCookie(cookie);
45
+ if (authCookie)
46
+ return { headers: { Cookie: authCookie } };
47
+ }
48
+ throw new ApiRequestContractError('NO_AUTH_CONTEXT', 'Cloud api-request requires caller-scoped JWT or a canonical Better Auth session cookie from the execution surface.');
49
+ }
50
+ export default {
51
+ async execute(input, runtime, ctx) {
52
+ try {
53
+ input = readClientValue(apiRequestInputSchema, input, 'api-request-input-invalid');
54
+ const target = await resolveApiRequestTarget(input, runtime);
55
+ const apiClient = vibesApiClient({
56
+ id: `api-request:${target.app}`,
57
+ baseUrl: target.origin,
58
+ runtime,
59
+ ...resolveCallerAuth(ctx)
60
+ });
61
+ const response = await apiClient.request(target.url, {
62
+ method: input.method,
63
+ query: input.query ?? {},
64
+ body: input.body ?? undefined,
65
+ headers: input.headers ?? {}
66
+ });
67
+ return apiRequestSuccessOutput(response);
68
+ }
69
+ catch (error) {
70
+ const projected = apiRequestErrorOutput(error);
71
+ return { status: 'error', error: { ...projected.error, failure: valueFreeFailure(CaughtFailureSchema.parse(error)) } };
72
+ }
73
+ }
74
+ };
75
+ //# sourceMappingURL=api-request.impl.cloud.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-request.impl.cloud.js","sourceRoot":"","sources":["../../../src/tools/api-request/api-request.impl.cloud.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,12 @@
1
1
  /**
2
2
  * api-request Tool Implementation (Consumer)
3
3
  *
4
- * Consumer-scoped implementation for making authenticated API requests.
5
- * Resolves the `api/client` runtime kind and delegates to its `.request()`.
4
+ * Resolves the requested app through the declared infra/service catalog, then
5
+ * sends the absolute target URL through the explicitly registered auth API
6
+ * client. The auth client owns the consumer credential provider; api-request
7
+ * never reads or accepts credentials itself.
6
8
  */
7
- import type { VibesRuntime, ToolCallContext } from '@vibesdotdev/runtime';
9
+ import { type VibesRuntime, type ToolCallContext } from '@vibesdotdev/kernel';
8
10
  import type { ApiRequestInput, ApiRequestOutput } from './schemas/index.ts';
9
11
  declare const _default: {
10
12
  execute(input: ApiRequestInput, runtime: VibesRuntime, _ctx: ToolCallContext): Promise<ApiRequestOutput>;
@@ -1 +1 @@
1
- {"version":3,"file":"api-request.impl.consumer.d.ts","sourceRoot":"","sources":["../../../src/tools/api-request/api-request.impl.consumer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE1E,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;;mBAqBnE,eAAe,WACb,YAAY,QACf,eAAe,GACnB,OAAO,CAAC,gBAAgB,CAAC;;AAL7B,wBAqCE"}
1
+ {"version":3,"file":"api-request.impl.consumer.d.ts","sourceRoot":"","sources":["../../../src/tools/api-request/api-request.impl.consumer.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AAEH,OAAO,EAAmB,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAS/F,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;;mBAoBnE,eAAe,WACb,YAAY,QACf,eAAe,GACnB,OAAO,CAAC,gBAAgB,CAAC;;AAL7B,wBAuBE"}
@@ -1,50 +1,44 @@
1
+ import { valueFreeFailure, CaughtFailureSchema } from '@vibesdotdev/kernel';
2
+ import { readClientValue } from "../../lib/client/internal/client-values.js";
3
+ import { apiRequestInputSchema } from "./schemas/index.js";
1
4
  /**
2
5
  * api-request Tool Implementation (Consumer)
3
6
  *
4
- * Consumer-scoped implementation for making authenticated API requests.
5
- * Resolves the `api/client` runtime kind and delegates to its `.request()`.
7
+ * Resolves the requested app through the declared infra/service catalog, then
8
+ * sends the absolute target URL through the explicitly registered auth API
9
+ * client. The auth client owns the consumer credential provider; api-request
10
+ * never reads or accepts credentials itself.
6
11
  */
7
- async function resolveApiClient(runtime) {
12
+ import { CapabilityError } from '@vibesdotdev/kernel';
13
+ import { getVibesClient } from '@vibesdotdev/kernel/client';
14
+ import { apiRequestErrorOutput, apiRequestSuccessOutput, resolveApiRequestTarget } from "./api-request.contract.js";
15
+ async function resolveAuthenticatedApiClient(runtime) {
8
16
  try {
9
- const apiClient = (await runtime.query('api/client').resolve());
10
- if (apiClient) {
11
- return apiClient;
12
- }
17
+ const client = await getVibesClient('client', runtime);
18
+ const apiClient = await client.resolve('auth');
19
+ return apiClient;
13
20
  }
14
- catch {
15
- // Query failed, fall through
21
+ catch (cause) {
22
+ throw new CapabilityError('The authenticated auth API client is not available in this runtime.', 'AUTH_REQUIRED', { reason: 'no-auth-client', cause });
16
23
  }
17
- throw new Error('API client not available in runtime context. Ensure api/client kind is registered.');
18
24
  }
19
25
  export default {
20
26
  async execute(input, runtime, _ctx) {
21
- const method = input.method;
22
- const path = input.path;
23
- const query = input.query ?? {};
24
- const body = input.body ?? undefined;
25
- const headers = input.headers ?? {};
26
27
  try {
27
- const apiClient = await resolveApiClient(runtime);
28
- const response = await apiClient.request(path, {
29
- method,
30
- query,
31
- body,
32
- headers
28
+ input = readClientValue(apiRequestInputSchema, input, 'api-request-input-invalid');
29
+ const target = await resolveApiRequestTarget(input, runtime);
30
+ const apiClient = await resolveAuthenticatedApiClient(runtime);
31
+ const response = await apiClient.request(target.url, {
32
+ method: input.method,
33
+ query: input.query ?? {},
34
+ body: input.body ?? undefined,
35
+ headers: input.headers ?? {}
33
36
  });
34
- return {
35
- status: 'success',
36
- response
37
- };
37
+ return apiRequestSuccessOutput(response);
38
38
  }
39
39
  catch (error) {
40
- const message = error instanceof Error ? error.message : String(error);
41
- return {
42
- status: 'error',
43
- error: {
44
- message,
45
- code: 'API_REQUEST_FAILED'
46
- }
47
- };
40
+ const projected = apiRequestErrorOutput(error);
41
+ return { status: 'error', error: { ...projected.error, failure: valueFreeFailure(CaughtFailureSchema.parse(error)) } };
48
42
  }
49
43
  }
50
44
  };
@@ -1 +1 @@
1
- {"version":3,"file":"api-request.impl.consumer.js","sourceRoot":"","sources":["../../../src/tools/api-request/api-request.impl.consumer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,KAAK,UAAU,gBAAgB,CAAC,OAAqB;IACpD,IAAI,CAAC;QACJ,MAAM,SAAS,GAAG,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,CAElD,CAAC;QACb,IAAI,SAAS,EAAE,CAAC;YACf,OAAO,SAAS,CAAC;QAClB,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,6BAA6B;IAC9B,CAAC;IAED,MAAM,IAAI,KAAK,CACd,oFAAoF,CACpF,CAAC;AACH,CAAC;AAED,eAAe;IACd,KAAK,CAAC,OAAO,CACZ,KAAsB,EACtB,OAAqB,EACrB,IAAqB;QAErB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC;QACrC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;QAEpC,IAAI,CAAC;YACJ,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAElD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE;gBAC9C,MAAM;gBACN,KAAK;gBACL,IAAI;gBACJ,OAAO;aACP,CAAC,CAAC;YAEH,OAAO;gBACN,MAAM,EAAE,SAAS;gBACjB,QAAQ;aACR,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO;gBACN,MAAM,EAAE,OAAO;gBACf,KAAK,EAAE;oBACN,OAAO;oBACP,IAAI,EAAE,oBAAoB;iBAC1B;aACD,CAAC;QACH,CAAC;IACF,CAAC;CACD,CAAC"}
1
+ {"version":3,"file":"api-request.impl.consumer.js","sourceRoot":"","sources":["../../../src/tools/api-request/api-request.impl.consumer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAkB,MAAM,4CAA4C,CAAC;AAC7F,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAA2C,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAG5D,OAAO,EACN,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,MAAM,2BAA2B,CAAC;AAGnC,KAAK,UAAU,6BAA6B,CAC3C,OAAqB;IAErB,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,MAAM,cAAc,CAAmB,QAAQ,EAAE,OAAO,CAAC,CAAC;QACzE,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/C,OAAO,SAAS,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,eAAe,CACxB,qEAAqE,EAAE,eAAe,EACtF,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,CACnC,CAAC;IACH,CAAC;AAEF,CAAC;AAED,eAAe;IACd,KAAK,CAAC,OAAO,CACZ,KAAsB,EACtB,OAAqB,EACrB,IAAqB;QAErB,IAAI,CAAC;YACJ,KAAK,GAAG,eAAe,CAAC,qBAAqB,EAAE,KAAK,EAAE,2BAA2B,CAAC,CAAC;YACnF,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC7D,MAAM,SAAS,GAAG,MAAM,6BAA6B,CAAC,OAAO,CAAC,CAAC;YAC/D,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAAY,MAAM,CAAC,GAAG,EAAE;gBAC/D,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;gBACxB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS;gBAC7B,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;aAC5B,CAAC,CAAC;YAEH,OAAO,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,gBAAgB,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QACxH,CAAC;IACF,CAAC;CACD,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { type ValueFreeFailure } from '@vibesdotdev/kernel';
2
+ /** Shared method, app-scoped URL, status and redacted body projection. */
3
+ import * as z from 'zod/v4';
4
+ export declare const API_REQUEST_BODY_EXCERPT_MAX = 240;
5
+ export interface ApiRequestCardModel {
6
+ method: string;
7
+ url: string;
8
+ statusLabel: string;
9
+ httpStatus: number | null;
10
+ bodyExcerpt: string;
11
+ title: string;
12
+ failed: boolean;
13
+ failure?: ValueFreeFailure;
14
+ }
15
+ declare const CardBoundarySchema: z.ZodUnknown;
16
+ type CardValue = z.input<typeof CardBoundarySchema>;
17
+ declare const RecordSchema: z.ZodRecord<z.ZodString, z.ZodType<import("@vibesdotdev/kernel/bootstrap").JsonValue, import("@vibesdotdev/kernel/bootstrap").JsonValue, z.core.$ZodTypeInternals<import("@vibesdotdev/kernel/bootstrap").JsonValue, import("@vibesdotdev/kernel/bootstrap").JsonValue>>>;
18
+ export declare function rec(value: CardValue): z.infer<typeof RecordSchema> | {
19
+ failure: ValueFreeFailure;
20
+ } | null;
21
+ export declare function excerptBody(value: CardValue, maxLength?: number): string;
22
+ export declare function apiRequestCardModel(options: {
23
+ input?: CardValue;
24
+ args?: CardValue;
25
+ output?: CardValue;
26
+ error?: string | null;
27
+ }): ApiRequestCardModel;
28
+ export {};
29
+ //# sourceMappingURL=api-request.view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-request.view.d.ts","sourceRoot":"","sources":["../../../src/tools/api-request/api-request.view.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0D,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACpH,0EAA0E;AAC1E,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAG5B,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAChD,MAAM,WAAW,mBAAmB;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAAE;AACtM,QAAA,MAAM,kBAAkB,cAAc,CAAC;AACvC,KAAK,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AACpD,QAAA,MAAM,YAAY,2QAAwC,CAAC;AAG3D,wBAAgB,GAAG,CAAC,KAAK,EAAE,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,GAAG;IAAE,OAAO,EAAE,gBAAgB,CAAA;CAAE,GAAG,IAAI,CAGzG;AACD,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,SAA+B,GAAG,MAAM,CAQ9F;AAWD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,mBAAmB,CAapJ"}
@@ -0,0 +1,62 @@
1
+ import { CapabilityError, CaughtFailureSchema, valueFreeFailure } from '@vibesdotdev/kernel';
2
+ /** Shared method, app-scoped URL, status and redacted body projection. */
3
+ import * as z from 'zod/v4';
4
+ import { redactedExcerpt, redactCredentials } from '@vibesdotdev/shared/utils';
5
+ import { JsonValueSchema, QuerySchema, readClientValue } from "../../lib/client/internal/client-values.js";
6
+ export const API_REQUEST_BODY_EXCERPT_MAX = 240;
7
+ const CardBoundarySchema = z.unknown();
8
+ const RecordSchema = z.record(z.string(), JsonValueSchema);
9
+ const InputSchema = z.object({ method: z.string().optional().catch(undefined), path: z.string().optional().catch(undefined), app: z.string().optional().catch(undefined), query: QuerySchema.optional().catch(undefined) });
10
+ const OutputSchema = z.object({ status: z.enum(['success', 'error']).optional().catch(undefined), response: JsonValueSchema.optional().catch(undefined), error: z.object({ message: z.string().optional(), status: z.number().int().optional() }).optional().catch(undefined) });
11
+ export function rec(value) {
12
+ try {
13
+ return RecordSchema.safeParse(value).data ?? null;
14
+ }
15
+ catch (error) {
16
+ return { failure: valueFreeFailure(CaughtFailureSchema.parse(error)) };
17
+ }
18
+ }
19
+ export function excerptBody(value, maxLength = API_REQUEST_BODY_EXCERPT_MAX) {
20
+ if (value === undefined || value === null)
21
+ return '';
22
+ try {
23
+ const parsed = readClientValue(JsonValueSchema, value, 'api-card-value-invalid');
24
+ const text = z.string().safeParse(parsed);
25
+ const normalized = redactedExcerpt(text.success ? text.data : JSON.stringify(parsed), { maxChars: Math.max(maxLength, 1) + 1 }).replace(/\s+/g, ' ').trim();
26
+ return normalized.length <= maxLength ? normalized : maxLength <= 1 ? '…' : `${normalized.slice(0, maxLength - 1).trimEnd()}…`;
27
+ }
28
+ catch (error) {
29
+ throw new CapabilityError('The API card body could not be read.', 'INVALID_INPUT', { reason: 'api-card-value-unreadable', cause: valueFreeFailure(CaughtFailureSchema.parse(error)) });
30
+ }
31
+ }
32
+ function formatQuery(query) {
33
+ const params = new URLSearchParams();
34
+ for (const [key, value] of Object.entries(query ?? {})) {
35
+ if (value === undefined)
36
+ continue;
37
+ if (Array.isArray(value))
38
+ value.forEach(item => params.append(key, item));
39
+ else
40
+ params.set(key, String(value));
41
+ }
42
+ const encoded = params.toString();
43
+ return encoded ? `?${encoded}` : '';
44
+ }
45
+ export function apiRequestCardModel(options) {
46
+ try {
47
+ const input = InputSchema.safeParse(options.input ?? options.args).data;
48
+ const output = OutputSchema.safeParse(options.output).data;
49
+ const method = input?.method?.toUpperCase() ?? '', path = input?.path ?? '', app = input?.app ?? '';
50
+ const url = redactCredentials(`${app && path ? `${app}:` : ''}${path}${formatQuery(input?.query)}`);
51
+ const httpStatus = output?.error?.status ?? null, outcome = output?.status;
52
+ const failed = Boolean(options.error) || outcome === 'error' || (httpStatus !== null && httpStatus >= 400);
53
+ const statusLabel = httpStatus !== null ? String(httpStatus) : outcome ?? '';
54
+ const bodyExcerpt = excerptBody(failed ? output?.error?.message ?? options.error ?? output?.response : output?.response);
55
+ const title = redactCredentials([method, path].filter(Boolean).join(' ') || 'API request');
56
+ return { method, url, statusLabel, httpStatus, bodyExcerpt, title, failed };
57
+ }
58
+ catch (error) {
59
+ return { method: '', url: '', statusLabel: 'error', httpStatus: null, bodyExcerpt: '[unreadable]', title: 'API request', failed: true, failure: valueFreeFailure(CaughtFailureSchema.parse(error)) };
60
+ }
61
+ }
62
+ //# sourceMappingURL=api-request.view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-request.view.js","sourceRoot":"","sources":["../../../src/tools/api-request/api-request.view.ts"],"names":[],"mappings":"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"}
@@ -7,25 +7,32 @@ import * as z from 'zod/v4';
7
7
  export declare const apiRequestInputSchema: z.ZodObject<{
8
8
  method: z.ZodEnum<{
9
9
  GET: "GET";
10
- DELETE: "DELETE";
11
10
  POST: "POST";
12
11
  PUT: "PUT";
13
12
  PATCH: "PATCH";
13
+ DELETE: "DELETE";
14
14
  }>;
15
15
  path: z.ZodString;
16
- query: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
17
- body: z.ZodOptional<z.ZodAny>;
16
+ query: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString>]>>>>;
17
+ body: z.ZodOptional<z.ZodType<import("@vibesdotdev/kernel/bootstrap").JsonValue, import("@vibesdotdev/kernel/bootstrap").JsonValue, z.core.$ZodTypeInternals<import("@vibesdotdev/kernel/bootstrap").JsonValue, import("@vibesdotdev/kernel/bootstrap").JsonValue>>>;
18
18
  headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
19
+ app: z.ZodOptional<z.ZodString>;
19
20
  }, z.core.$strip>;
20
21
  export declare const apiRequestOutputSchema: z.ZodObject<{
21
22
  status: z.ZodEnum<{
22
- success: "success";
23
23
  error: "error";
24
+ success: "success";
24
25
  }>;
25
- response: z.ZodOptional<z.ZodUnknown>;
26
+ response: z.ZodOptional<z.ZodType<import("@vibesdotdev/kernel/bootstrap").JsonValue, import("@vibesdotdev/kernel/bootstrap").JsonValue, z.core.$ZodTypeInternals<import("@vibesdotdev/kernel/bootstrap").JsonValue, import("@vibesdotdev/kernel/bootstrap").JsonValue>>>;
26
27
  error: z.ZodOptional<z.ZodObject<{
27
28
  message: z.ZodString;
29
+ failure: z.ZodOptional<z.ZodObject<{
30
+ name: z.ZodString;
31
+ code: z.ZodOptional<z.ZodString>;
32
+ reason: z.ZodOptional<z.ZodString>;
33
+ }, z.core.$strip>>;
28
34
  code: z.ZodOptional<z.ZodString>;
35
+ status: z.ZodOptional<z.ZodNumber>;
29
36
  }, z.core.$strip>>;
30
37
  }, z.core.$strip>;
31
38
  export type ApiRequestInput = z.infer<typeof apiRequestInputSchema>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tools/api-request/schemas/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,eAAO,MAAM,qBAAqB;;;;;;;;;;;;iBAMhC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;iBASjC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tools/api-request/schemas/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAG5B,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;iBAwBhC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;iBAWjC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -4,20 +4,38 @@
4
4
  * Input/output schemas for the api-request tool.
5
5
  */
6
6
  import * as z from 'zod/v4';
7
+ import { JsonValueSchema } from "../../../lib/client/internal/client-values.js";
7
8
  export const apiRequestInputSchema = z.object({
8
9
  method: z.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE']),
9
- path: z.string().min(1),
10
- query: z.record(z.string(), z.any()).optional(),
11
- body: z.any().optional(),
12
- headers: z.record(z.string(), z.string()).optional()
10
+ path: z
11
+ .string()
12
+ .min(1)
13
+ .refine((path) => path.startsWith('/') && !path.startsWith('//'), {
14
+ message: 'Path must begin with one slash and cannot override the app origin.'
15
+ }),
16
+ query: z
17
+ .record(z.string(), z.union([z.string(), z.number(), z.boolean(), z.array(z.string())]).optional())
18
+ .optional(),
19
+ body: JsonValueSchema.optional(),
20
+ headers: z.record(z.string(), z.string()).optional(),
21
+ /**
22
+ * Target vibes app id (e.g. `account`, `platform`, `knowledge`, `ai`). The
23
+ * implementation requires this value and resolves it from the declared
24
+ * infra/service catalog for the configured service environment. It remains
25
+ * schema-optional so omission returns the stable APP_REQUIRED tool error
26
+ * instead of a generic validation failure.
27
+ */
28
+ app: z.string().min(1).optional()
13
29
  });
14
30
  export const apiRequestOutputSchema = z.object({
15
31
  status: z.enum(['success', 'error']),
16
- response: z.unknown().optional(),
32
+ response: JsonValueSchema.optional(),
17
33
  error: z
18
34
  .object({
19
35
  message: z.string(),
20
- code: z.string().optional()
36
+ failure: z.object({ name: z.string(), code: z.string().optional(), reason: z.string().optional() }).optional(),
37
+ code: z.string().optional(),
38
+ status: z.number().int().optional()
21
39
  })
22
40
  .optional()
23
41
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tools/api-request/schemas/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACzD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC/C,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACxB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACpD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACpC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,KAAK,EAAE,CAAC;SACN,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC3B,CAAC;SACD,QAAQ,EAAE;CACZ,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tools/api-request/schemas/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,+CAA+C,CAAC;AAEhF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACzD,IAAI,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACjE,OAAO,EAAE,oEAAoE;KAC7E,CAAC;IACH,KAAK,EAAE,CAAC;SACN,MAAM,CACN,CAAC,CAAC,MAAM,EAAE,EACV,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAC9E;SACA,QAAQ,EAAE;IACZ,IAAI,EAAE,eAAe,CAAC,QAAQ,EAAE;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpD;;;;;;OAMG;IACH,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACpC,QAAQ,EAAE,eAAe,CAAC,QAAQ,EAAE;IACpC,KAAK,EAAE,CAAC;SACN,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;QAC9G,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;KACnC,CAAC;SACD,QAAQ,EAAE;CACZ,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const clientTuiPlugin: import("@vibesdotdev/kernel").RuntimePlugin;
2
+ export default clientTuiPlugin;
3
+ //# sourceMappingURL=client-tui.plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-tui.plugin.d.ts","sourceRoot":"","sources":["../../src/tui/client-tui.plugin.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,eAAe,6CAgB1B,CAAC;AAEH,eAAe,eAAe,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { createRuntimeImplementation, createRuntimePlugin, loader } from '@vibesdotdev/kernel';
2
+ const apiRequestTuiWidget = {
3
+ id: 'api-request.tui-widget',
4
+ kind: 'tools/ui',
5
+ name: 'API Request TUI Widget',
6
+ description: 'Renders api-request method, URL, status, and a body excerpt in the TUI.',
7
+ surfaces: ['tui'],
8
+ role: 'widget',
9
+ targetToolId: 'api-request',
10
+ targetId: 'api-request',
11
+ tags: ['api', 'tui'],
12
+ enabled: true
13
+ };
14
+ export const clientTuiPlugin = createRuntimePlugin({
15
+ id: 'client.tui',
16
+ name: 'Client TUI Surface',
17
+ description: 'Terminal tool-result card for the api-request agent tool.',
18
+ dependencies: ['tui'],
19
+ descriptors: [apiRequestTuiWidget],
20
+ loaders: [
21
+ loader(apiRequestTuiWidget.id, { kind: 'tools/ui', scope: 'tui' }, async () => {
22
+ const module = await import("./tool-widgets/ApiRequestToolWidget.impl.tui.js");
23
+ return createRuntimeImplementation({
24
+ kind: 'tools/ui',
25
+ id: apiRequestTuiWidget.id,
26
+ implementation: { tui: { component: module.default } }
27
+ });
28
+ })
29
+ ]
30
+ });
31
+ export default clientTuiPlugin;
32
+ //# sourceMappingURL=client-tui.plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-tui.plugin.js","sourceRoot":"","sources":["../../src/tui/client-tui.plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE/F,MAAM,mBAAmB,GAAG;IAC3B,EAAE,EAAE,wBAAwB;IAC5B,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EAAE,yEAAyE;IACtF,QAAQ,EAAE,CAAC,KAAK,CAAC;IACjB,IAAI,EAAE,QAAQ;IACd,YAAY,EAAE,aAAa;IAC3B,QAAQ,EAAE,aAAa;IACvB,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;IACpB,OAAO,EAAE,IAAI;CACJ,CAAC;AAEX,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAC;IAClD,EAAE,EAAE,YAAY;IAChB,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,2DAA2D;IACxE,YAAY,EAAE,CAAC,KAAK,CAAC;IACrB,WAAW,EAAE,CAAC,mBAAmB,CAAC;IAClC,OAAO,EAAE;QACR,MAAM,CAAC,mBAAmB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,IAAI,EAAE;YAC7E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,iDAAkD,CAAC,CAAC;YAChF,OAAO,2BAA2B,CAAC;gBAClC,IAAI,EAAE,UAAU;gBAChB,EAAE,EAAE,mBAAmB,CAAC,EAAE;gBAC1B,cAAc,EAAE,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE;aACtD,CAAC,CAAC;QACJ,CAAC,CAAC;KACF;CACD,CAAC,CAAC;AAEH,eAAe,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { clientTuiPlugin as default, clientTuiPlugin } from './client-tui.plugin.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,IAAI,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { clientTuiPlugin as default, clientTuiPlugin } from "./client-tui.plugin.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,IAAI,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface ApiRequestToolWidgetProps {
3
+ toolCall?: {
4
+ id?: string;
5
+ tool?: string;
6
+ messageId?: string;
7
+ events?: unknown[];
8
+ startedAt?: number;
9
+ updatedAt?: number;
10
+ };
11
+ status?: string;
12
+ args?: unknown;
13
+ output?: unknown;
14
+ error?: string | null;
15
+ }
16
+ export default function ApiRequestToolWidget(tool: ApiRequestToolWidgetProps): ReactNode;
17
+ //# sourceMappingURL=ApiRequestToolWidget.impl.tui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiRequestToolWidget.impl.tui.d.ts","sourceRoot":"","sources":["../../../src/tui/tool-widgets/ApiRequestToolWidget.impl.tui.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAWjD,MAAM,WAAW,yBAAyB;IACzC,QAAQ,CAAC,EAAE;QACV,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAUD,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,IAAI,EAAE,yBAAyB,GAAG,SAAS,CA2CvF"}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { VStack } from '@vibesdotdev/tui/components/layout';
4
+ import { WidgetContainer, WidgetContent, WidgetHeader } from '@vibesdotdev/tui';
5
+ import { dsBase, dsColors, dsSpace } from '@vibesdotdev/tui/theme';
6
+ import { apiRequestCardModel } from "../../tools/api-request/api-request.view.js";
7
+ function widgetStatus(status, failed) {
8
+ if (status === 'failed' || failed)
9
+ return 'error';
10
+ if (status === 'done')
11
+ return 'success';
12
+ if (status === 'awaiting_approval')
13
+ return 'warning';
14
+ if (status === 'pending')
15
+ return 'pending';
16
+ return 'running';
17
+ }
18
+ export default function ApiRequestToolWidget(tool) {
19
+ const model = apiRequestCardModel({
20
+ args: tool.args,
21
+ output: tool.output,
22
+ error: tool.error
23
+ });
24
+ const status = widgetStatus(tool.status, model.failed);
25
+ const [collapsed, setCollapsed] = useState(false);
26
+ return (_jsxs(WidgetContainer, { status: status, marginTop: 1, children: [_jsx(WidgetHeader, { title: model.title, status: status, statusText: model.statusLabel || undefined, isCollapsed: collapsed, onToggle: () => setCollapsed((v) => !v), showClose: false, bottomBorder: false, compact: true }), !collapsed && (_jsx(WidgetContent, { children: _jsxs(VStack, { gap: dsSpace.xs, children: [model.method ? (_jsx("text", { style: { fg: dsBase.mutedForeground }, children: model.method })) : null, model.url ? _jsx("text", { style: { fg: dsBase.foreground }, children: model.url }) : null, model.statusLabel ? (_jsx("text", { style: { fg: model.failed ? dsColors.danger.solid : dsBase.mutedForeground }, children: model.statusLabel })) : null, model.bodyExcerpt ? (_jsx("text", { style: { fg: dsBase.mutedForeground }, children: model.bodyExcerpt })) : model.statusLabel === 'success' ? (_jsx("text", { style: { fg: dsBase.mutedForeground }, children: "No body returned." })) : null] }) }))] }));
27
+ }
28
+ //# sourceMappingURL=ApiRequestToolWidget.impl.tui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiRequestToolWidget.impl.tui.js","sourceRoot":"","sources":["../../../src/tui/tool-widgets/ApiRequestToolWidget.impl.tui.tsx"],"names":[],"mappings":"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"}