@vibesdotdev/integrations-grok 0.0.0-stage → 1.0.0-rc.1

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 (201) hide show
  1. package/LICENSE +126 -0
  2. package/README.md +43 -2
  3. package/dist/ai/index.d.ts +5 -0
  4. package/dist/ai/index.d.ts.map +1 -0
  5. package/dist/ai/index.js +5 -0
  6. package/dist/ai/index.js.map +1 -0
  7. package/dist/ai/metadata/provider-models/grok/grok-grok-3-mini.json +18 -0
  8. package/dist/ai/metadata/provider-models/grok/grok-grok-3.json +18 -0
  9. package/dist/ai/metadata/provider-models/grok/grok-grok-4-5.json +18 -0
  10. package/dist/ai/metadata/provider-models/grok/grok-grok-4-6.json +18 -0
  11. package/dist/ai/metadata/provider-models/grok/grok-grok-4-7.json +18 -0
  12. package/dist/ai/metadata/provider-models/grok/grok-grok-4-fast.json +18 -0
  13. package/dist/ai/metadata/provider-models/grok/grok-grok-4.json +18 -0
  14. package/dist/ai/metadata/provider-models/grok/grok-grok-code-fast.json +18 -0
  15. package/dist/ai/metadata/provider-models/grok/grok-grok-composer-2-5-fast.json +18 -0
  16. package/dist/ai/metadata/providers/grok.json +8 -0
  17. package/dist/ai/provider.consumer.plugin.d.ts +11 -0
  18. package/dist/ai/provider.consumer.plugin.d.ts.map +1 -0
  19. package/dist/ai/provider.consumer.plugin.js +43 -0
  20. package/dist/ai/provider.consumer.plugin.js.map +1 -0
  21. package/dist/ai/provider.plugin.d.ts +3 -0
  22. package/dist/ai/provider.plugin.d.ts.map +1 -0
  23. package/dist/ai/provider.plugin.js +3 -0
  24. package/dist/ai/provider.plugin.js.map +1 -0
  25. package/dist/ai/provider.shared.plugin.d.ts +6 -0
  26. package/dist/ai/provider.shared.plugin.d.ts.map +1 -0
  27. package/dist/ai/provider.shared.plugin.js +118 -0
  28. package/dist/ai/provider.shared.plugin.js.map +1 -0
  29. package/dist/ai/providers/cloud/frontier/grok/config/config.grok.descriptor.d.ts +4194 -0
  30. package/dist/ai/providers/cloud/frontier/grok/config/config.grok.descriptor.d.ts.map +1 -0
  31. package/dist/ai/providers/cloud/frontier/grok/config/config.grok.descriptor.js +15 -0
  32. package/dist/ai/providers/cloud/frontier/grok/config/config.grok.descriptor.js.map +1 -0
  33. package/dist/ai/providers/cloud/frontier/grok/config/schemas/index.d.ts +67 -0
  34. package/dist/ai/providers/cloud/frontier/grok/config/schemas/index.d.ts.map +1 -0
  35. package/dist/ai/providers/cloud/frontier/grok/config/schemas/index.js +70 -0
  36. package/dist/ai/providers/cloud/frontier/grok/config/schemas/index.js.map +1 -0
  37. package/dist/ai/providers/cloud/frontier/grok/index.d.ts +5 -0
  38. package/dist/ai/providers/cloud/frontier/grok/index.d.ts.map +1 -0
  39. package/dist/ai/providers/cloud/frontier/grok/index.js +4 -0
  40. package/dist/ai/providers/cloud/frontier/grok/index.js.map +1 -0
  41. package/dist/ai/providers/cloud/frontier/grok/provider.grok.descriptor.d.ts +183 -0
  42. package/dist/ai/providers/cloud/frontier/grok/provider.grok.descriptor.d.ts.map +1 -0
  43. package/dist/ai/providers/cloud/frontier/grok/provider.grok.descriptor.js +114 -0
  44. package/dist/ai/providers/cloud/frontier/grok/provider.grok.descriptor.js.map +1 -0
  45. package/dist/ai/providers/grok/detection/index.d.ts +2 -0
  46. package/dist/ai/providers/grok/detection/index.d.ts.map +1 -0
  47. package/dist/ai/providers/grok/detection/index.js +2 -0
  48. package/dist/ai/providers/grok/detection/index.js.map +1 -0
  49. package/dist/ai/providers/grok/detection/system.d.ts +11 -0
  50. package/dist/ai/providers/grok/detection/system.d.ts.map +1 -0
  51. package/dist/ai/providers/grok/detection/system.js +78 -0
  52. package/dist/ai/providers/grok/detection/system.js.map +1 -0
  53. package/dist/ai/providers/grok/docs/ai.providers.grok.docs.descriptor.d.ts +4 -0
  54. package/dist/ai/providers/grok/docs/ai.providers.grok.docs.descriptor.d.ts.map +1 -0
  55. package/dist/ai/providers/grok/docs/ai.providers.grok.docs.descriptor.js +21 -0
  56. package/dist/ai/providers/grok/docs/ai.providers.grok.docs.descriptor.js.map +1 -0
  57. package/dist/ai/providers/grok/grok-agent/budget.d.ts +14 -0
  58. package/dist/ai/providers/grok/grok-agent/budget.d.ts.map +1 -0
  59. package/dist/ai/providers/grok/grok-agent/budget.js +23 -0
  60. package/dist/ai/providers/grok/grok-agent/budget.js.map +1 -0
  61. package/dist/ai/providers/grok/grok-agent/connection.d.ts +36 -0
  62. package/dist/ai/providers/grok/grok-agent/connection.d.ts.map +1 -0
  63. package/dist/ai/providers/grok/grok-agent/connection.js +137 -0
  64. package/dist/ai/providers/grok/grok-agent/connection.js.map +1 -0
  65. package/dist/ai/providers/grok/grok-agent/failures.d.ts +12 -0
  66. package/dist/ai/providers/grok/grok-agent/failures.d.ts.map +1 -0
  67. package/dist/ai/providers/grok/grok-agent/failures.js +47 -0
  68. package/dist/ai/providers/grok/grok-agent/failures.js.map +1 -0
  69. package/dist/ai/providers/grok/grok-agent/grok-agent.spec.descriptor.d.ts +29 -0
  70. package/dist/ai/providers/grok/grok-agent/grok-agent.spec.descriptor.d.ts.map +1 -0
  71. package/dist/ai/providers/grok/grok-agent/grok-agent.spec.descriptor.js +18 -0
  72. package/dist/ai/providers/grok/grok-agent/grok-agent.spec.descriptor.js.map +1 -0
  73. package/dist/ai/providers/grok/grok-agent/grok-agent.spec.impl.d.ts +32 -0
  74. package/dist/ai/providers/grok/grok-agent/grok-agent.spec.impl.d.ts.map +1 -0
  75. package/dist/ai/providers/grok/grok-agent/grok-agent.spec.impl.js +113 -0
  76. package/dist/ai/providers/grok/grok-agent/grok-agent.spec.impl.js.map +1 -0
  77. package/dist/ai/providers/grok/grok-agent/grok-agent.transport.descriptor.d.ts +13 -0
  78. package/dist/ai/providers/grok/grok-agent/grok-agent.transport.descriptor.d.ts.map +1 -0
  79. package/dist/ai/providers/grok/grok-agent/grok-agent.transport.descriptor.js +11 -0
  80. package/dist/ai/providers/grok/grok-agent/grok-agent.transport.descriptor.js.map +1 -0
  81. package/dist/ai/providers/grok/grok-agent/grok-agent.transport.impl.consumer.d.ts +39 -0
  82. package/dist/ai/providers/grok/grok-agent/grok-agent.transport.impl.consumer.d.ts.map +1 -0
  83. package/dist/ai/providers/grok/grok-agent/grok-agent.transport.impl.consumer.js +79 -0
  84. package/dist/ai/providers/grok/grok-agent/grok-agent.transport.impl.consumer.js.map +1 -0
  85. package/dist/ai/providers/grok/grok-agent/protocol.d.ts +117 -0
  86. package/dist/ai/providers/grok/grok-agent/protocol.d.ts.map +1 -0
  87. package/dist/ai/providers/grok/grok-agent/protocol.js +84 -0
  88. package/dist/ai/providers/grok/grok-agent/protocol.js.map +1 -0
  89. package/dist/ai/providers/grok/grok-agent/runtime-execution.d.ts +14 -0
  90. package/dist/ai/providers/grok/grok-agent/runtime-execution.d.ts.map +1 -0
  91. package/dist/ai/providers/grok/grok-agent/runtime-execution.js +42 -0
  92. package/dist/ai/providers/grok/grok-agent/runtime-execution.js.map +1 -0
  93. package/dist/ai/providers/grok/grok-agent/session.d.ts +12 -0
  94. package/dist/ai/providers/grok/grok-agent/session.d.ts.map +1 -0
  95. package/dist/ai/providers/grok/grok-agent/session.js +140 -0
  96. package/dist/ai/providers/grok/grok-agent/session.js.map +1 -0
  97. package/dist/ai/providers/grok/grok-build.request.d.ts +7 -0
  98. package/dist/ai/providers/grok/grok-build.request.d.ts.map +1 -0
  99. package/dist/ai/providers/grok/grok-build.request.js +11 -0
  100. package/dist/ai/providers/grok/grok-build.request.js.map +1 -0
  101. package/dist/ai/providers/grok/grok-build.transport.descriptor.d.ts +13 -0
  102. package/dist/ai/providers/grok/grok-build.transport.descriptor.d.ts.map +1 -0
  103. package/dist/ai/providers/grok/grok-build.transport.descriptor.js +11 -0
  104. package/dist/ai/providers/grok/grok-build.transport.descriptor.js.map +1 -0
  105. package/dist/ai/providers/grok/grok-build.transport.impl.consumer.d.ts +23 -0
  106. package/dist/ai/providers/grok/grok-build.transport.impl.consumer.d.ts.map +1 -0
  107. package/dist/ai/providers/grok/grok-build.transport.impl.consumer.js +115 -0
  108. package/dist/ai/providers/grok/grok-build.transport.impl.consumer.js.map +1 -0
  109. package/dist/ai/providers/grok/grok-prompt-file.d.ts +16 -0
  110. package/dist/ai/providers/grok/grok-prompt-file.d.ts.map +1 -0
  111. package/dist/ai/providers/grok/grok-prompt-file.js +43 -0
  112. package/dist/ai/providers/grok/grok-prompt-file.js.map +1 -0
  113. package/dist/ai/providers/grok/grok-refusals.d.ts +149 -0
  114. package/dist/ai/providers/grok/grok-refusals.d.ts.map +1 -0
  115. package/dist/ai/providers/grok/grok-refusals.js +159 -0
  116. package/dist/ai/providers/grok/grok-refusals.js.map +1 -0
  117. package/dist/ai/providers/grok/grok-sandbox-signal.d.ts +30 -0
  118. package/dist/ai/providers/grok/grok-sandbox-signal.d.ts.map +1 -0
  119. package/dist/ai/providers/grok/grok-sandbox-signal.js +46 -0
  120. package/dist/ai/providers/grok/grok-sandbox-signal.js.map +1 -0
  121. package/dist/ai/providers/grok/grok-subscription.d.ts +116 -0
  122. package/dist/ai/providers/grok/grok-subscription.d.ts.map +1 -0
  123. package/dist/ai/providers/grok/grok-subscription.js +473 -0
  124. package/dist/ai/providers/grok/grok-subscription.js.map +1 -0
  125. package/dist/ai/providers/grok/grok.provider.impl.d.ts +47 -0
  126. package/dist/ai/providers/grok/grok.provider.impl.d.ts.map +1 -0
  127. package/dist/ai/providers/grok/grok.provider.impl.js +202 -0
  128. package/dist/ai/providers/grok/grok.provider.impl.js.map +1 -0
  129. package/dist/ai/providers/grok/index.d.ts +3 -0
  130. package/dist/ai/providers/grok/index.d.ts.map +1 -0
  131. package/dist/ai/providers/grok/index.js +3 -0
  132. package/dist/ai/providers/grok/index.js.map +1 -0
  133. package/dist/ai/providers/grok/recommendations.d.ts +23 -0
  134. package/dist/ai/providers/grok/recommendations.d.ts.map +1 -0
  135. package/dist/ai/providers/grok/recommendations.js +21 -0
  136. package/dist/ai/providers/grok/recommendations.js.map +1 -0
  137. package/dist/ai/specs/grok-build-exec/grok-build-exec.spec.descriptor.d.ts +32 -0
  138. package/dist/ai/specs/grok-build-exec/grok-build-exec.spec.descriptor.d.ts.map +1 -0
  139. package/dist/ai/specs/grok-build-exec/grok-build-exec.spec.descriptor.js +21 -0
  140. package/dist/ai/specs/grok-build-exec/grok-build-exec.spec.descriptor.js.map +1 -0
  141. package/dist/ai/specs/grok-build-exec/grok-build-exec.spec.impl.d.ts +36 -0
  142. package/dist/ai/specs/grok-build-exec/grok-build-exec.spec.impl.d.ts.map +1 -0
  143. package/dist/ai/specs/grok-build-exec/grok-build-exec.spec.impl.js +78 -0
  144. package/dist/ai/specs/grok-build-exec/grok-build-exec.spec.impl.js.map +1 -0
  145. package/dist/ai/specs/grok-messages.d.ts +20 -0
  146. package/dist/ai/specs/grok-messages.d.ts.map +1 -0
  147. package/dist/ai/specs/grok-messages.js +79 -0
  148. package/dist/ai/specs/grok-messages.js.map +1 -0
  149. package/dist/external/external.plugin.d.ts +3 -0
  150. package/dist/external/external.plugin.d.ts.map +1 -0
  151. package/dist/external/external.plugin.js +23 -0
  152. package/dist/external/external.plugin.js.map +1 -0
  153. package/dist/external/grok-build/index.d.ts +162 -0
  154. package/dist/external/grok-build/index.d.ts.map +1 -0
  155. package/dist/external/grok-build/index.js +7 -0
  156. package/dist/external/grok-build/index.js.map +1 -0
  157. package/dist/external/grok-build/manifest.d.ts +6 -0
  158. package/dist/external/grok-build/manifest.d.ts.map +1 -0
  159. package/dist/external/grok-build/manifest.js +91 -0
  160. package/dist/external/grok-build/manifest.js.map +1 -0
  161. package/dist/external/grok-build-presets.d.ts +210 -0
  162. package/dist/external/grok-build-presets.d.ts.map +1 -0
  163. package/dist/external/grok-build-presets.js +46 -0
  164. package/dist/external/grok-build-presets.js.map +1 -0
  165. package/dist/external/grok-subscription.operation.descriptors.d.ts +57 -0
  166. package/dist/external/grok-subscription.operation.descriptors.d.ts.map +1 -0
  167. package/dist/external/grok-subscription.operation.descriptors.js +22 -0
  168. package/dist/external/grok-subscription.operation.descriptors.js.map +1 -0
  169. package/dist/external/grok-subscription.operations.d.ts +4 -0
  170. package/dist/external/grok-subscription.operations.d.ts.map +1 -0
  171. package/dist/external/grok-subscription.operations.js +73 -0
  172. package/dist/external/grok-subscription.operations.js.map +1 -0
  173. package/dist/external/index.d.ts +3 -0
  174. package/dist/external/index.d.ts.map +1 -0
  175. package/dist/external/index.js +3 -0
  176. package/dist/external/index.js.map +1 -0
  177. package/dist/index.d.ts +2 -0
  178. package/dist/index.d.ts.map +1 -0
  179. package/dist/index.js +2 -0
  180. package/dist/index.js.map +1 -0
  181. package/dist/outcome.d.ts +9 -0
  182. package/dist/outcome.d.ts.map +1 -0
  183. package/dist/outcome.js +8 -0
  184. package/dist/outcome.js.map +1 -0
  185. package/dist/schemas/health.d.ts +20 -0
  186. package/dist/schemas/health.d.ts.map +1 -0
  187. package/dist/schemas/health.js +17 -0
  188. package/dist/schemas/health.js.map +1 -0
  189. package/dist/schemas/output.d.ts +8 -0
  190. package/dist/schemas/output.d.ts.map +1 -0
  191. package/dist/schemas/output.js +10 -0
  192. package/dist/schemas/output.js.map +1 -0
  193. package/dist/schemas/refusal.d.ts +6 -0
  194. package/dist/schemas/refusal.d.ts.map +1 -0
  195. package/dist/schemas/refusal.js +6 -0
  196. package/dist/schemas/refusal.js.map +1 -0
  197. package/dist/schemas/subscription.d.ts +42 -0
  198. package/dist/schemas/subscription.d.ts.map +1 -0
  199. package/dist/schemas/subscription.js +36 -0
  200. package/dist/schemas/subscription.js.map +1 -0
  201. package/package.json +104 -4
@@ -0,0 +1,47 @@
1
+ import type { ProviderOperationOptions, AIProviderTypeContext, AIProviderTypeInterface, ConnectionValidationResult, DetectedProviderInstance, ModelRecommendation, ProviderGenerateOptions, ProviderGenerateResult, ProviderHealthCheckResult } from '@vibesdotdev/ai/interfaces/provider-type';
2
+ import type { GenerationRequest } from '@vibesdotdev/ai/interfaces/adapter';
3
+ import type { AIModelDescriptor, Modality } from '@vibesdotdev/ai/models/schemas';
4
+ import type { AIProviderDescriptor } from '@vibesdotdev/ai/providers-runtime/schemas/provider-descriptor';
5
+ import type { AIProviderTypeDescriptor } from '@vibesdotdev/ai/providers-runtime/schemas/type-descriptor';
6
+ /** The connection configuration the provider-type interface hands to health, authentication and validation. */
7
+ type ProviderConnectionConfig = Parameters<AIProviderTypeInterface['checkHealth']>[0];
8
+ export interface GrokAuthenticateOptions extends ProviderOperationOptions {
9
+ /**
10
+ * Receives the device-code sign-in prompt (URL + code) for headless callers.
11
+ * Without it Grok Build opens the system browser itself.
12
+ */
13
+ onMessage?: (message: string) => void;
14
+ }
15
+ export declare class GrokProviderType implements AIProviderTypeInterface {
16
+ readonly descriptor: AIProviderTypeDescriptor;
17
+ private readonly context;
18
+ constructor(descriptor: AIProviderTypeDescriptor, context: AIProviderTypeContext);
19
+ generate<T extends Modality>(provider: AIProviderDescriptor, model: AIModelDescriptor, request: GenerationRequest<T>, options?: ProviderGenerateOptions): Promise<ProviderGenerateResult<T>>;
20
+ detectInstalled(): Promise<DetectedProviderInstance[]>;
21
+ /** The recommendation owner's scoring, shaped for the provider type: one source for the flagship model. */
22
+ recommendModels(useCase?: string): Promise<ModelRecommendation[]>;
23
+ /** The connection as health and authentication read it, or the typed refusal for one that cannot be read. */
24
+ private readHealthConfig;
25
+ private resolveCredential;
26
+ checkHealth(config: ProviderConnectionConfig, options?: ProviderOperationOptions): Promise<ProviderHealthCheckResult>;
27
+ /**
28
+ * The one shared probe: no redirect following, the body cancelled, the caller's
29
+ * signal and the connection's `timeout` honoured, and only a status and a fixed
30
+ * sentence in the result (never the reason phrase, a body or a fetch error's
31
+ * text, which quotes the URL). The connections host's own typed refusal is the
32
+ * owner speaking and reaches the caller from the probe.
33
+ */
34
+ private probeApi;
35
+ private checkSubscription;
36
+ authenticate(config: ProviderConnectionConfig, options?: GrokAuthenticateOptions): Promise<ProviderHealthCheckResult>;
37
+ private signIn;
38
+ /** Validation is the connection schema's: the same rules the connection form enforces, with its fixed sentences. */
39
+ validateConnection(config: ProviderConnectionConfig): Promise<ConnectionValidationResult>;
40
+ /** The owner's report of a failed subscription operation: its own refusal, else the fixed unavailability sentence. */
41
+ private subscriptionFailure;
42
+ private subscriptionHealthy;
43
+ private unhealthy;
44
+ dispose(): Promise<void>;
45
+ }
46
+ export {};
47
+ //# sourceMappingURL=grok.provider.impl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grok.provider.impl.d.ts","sourceRoot":"","sources":["../../../../src/ai/providers/grok/grok.provider.impl.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACX,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,EAC1B,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAClF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+DAA+D,CAAC;AAC1G,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2DAA2D,CAAC;AAmB1G,+GAA+G;AAC/G,KAAK,wBAAwB,GAAG,UAAU,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAMtF,MAAM,WAAW,uBAAwB,SAAQ,wBAAwB;IACxE;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC;AAED,qBAAa,gBAAiB,YAAW,uBAAuB;IAE9D,QAAQ,CAAC,UAAU,EAAE,wBAAwB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADf,UAAU,EAAE,wBAAwB,EAC5B,OAAO,EAAE,qBAAqB;IAEhD,QAAQ,CAAC,CAAC,SAAS,QAAQ,EAC1B,QAAQ,EAAE,oBAAoB,EAC9B,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC7B,OAAO,CAAC,EAAE,uBAAuB,GAC/B,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAG/B,eAAe,IAAI,OAAO,CAAC,wBAAwB,EAAE,CAAC;IAqB5D,2GAA2G;IACrG,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAoBvE,6GAA6G;IAC7G,OAAO,CAAC,gBAAgB;YASV,iBAAiB;IAUzB,WAAW,CAChB,MAAM,EAAE,wBAAwB,EAChC,OAAO,CAAC,EAAE,wBAAwB,GAChC,OAAO,CAAC,yBAAyB,CAAC;IAoBrC;;;;;;OAMG;YACW,QAAQ;YAiCR,iBAAiB;IAazB,YAAY,CACjB,MAAM,EAAE,wBAAwB,EAChC,OAAO,CAAC,EAAE,uBAAuB,GAC/B,OAAO,CAAC,yBAAyB,CAAC;YAQvB,MAAM;IAqBpB,oHAAoH;IAC9G,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAM/F,sHAAsH;IACtH,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,SAAS;IAGX,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAC9B"}
@@ -0,0 +1,202 @@
1
+ import { ProbeTimeoutSchema, BaseUrlSchema, HealthConfigSchema } from "../../../schemas/health.js";
2
+ import { findGrokCredentialKey } from "./detection/system.js";
3
+ import { assertNoPlaintextCredentials, CredentialReferenceSchema, resolveSecretReference } from '@vibesdotdev/ai/providers-runtime';
4
+ import { probeProviderHealth } from '@vibesdotdev/ai/providers-runtime/client';
5
+ import { executeGeneration } from '@vibesdotdev/ai/providers-runtime/utils/provider-type-helpers';
6
+ import { GROK_DEFAULT_BASE_URL, readGrokConnection } from "../cloud/frontier/grok/config/schemas/index.js";
7
+ import { checkGrokSubscription, describeGrokSubscriptionFailure, GROK_SUBSCRIPTION_LOGIN_COMMAND, GROK_SUBSCRIPTION_LOGIN_TIMEOUT_MS, loginGrokSubscription, prepareGrokSubscription } from "./grok-subscription.js";
8
+ import { grokRefusal } from "./grok-refusals.js";
9
+ import { attempt, settle } from "../../../outcome.js";
10
+ /** The deadline of an API health probe that neither the caller nor the connection declares. */
11
+ const DEFAULT_HEALTH_TIMEOUT_MS = 5_000;
12
+ const USE_CASES = ['chat', 'development', 'research', 'images', 'video', 'audio', 'organization'];
13
+ export class GrokProviderType {
14
+ descriptor;
15
+ context;
16
+ constructor(descriptor, context) {
17
+ this.descriptor = descriptor;
18
+ this.context = context;
19
+ }
20
+ generate(provider, model, request, options) {
21
+ return executeGeneration(this.context, provider, model, request, options);
22
+ }
23
+ async detectInstalled() {
24
+ const instances = [];
25
+ const credentialKey = await findGrokCredentialKey(this.context.runtime);
26
+ if (credentialKey)
27
+ instances.push({
28
+ name: `Grok (${credentialKey})`,
29
+ source: 'system',
30
+ config: {
31
+ authMethod: 'api-key',
32
+ apiKey: { source: 'secret', key: credentialKey },
33
+ baseUrl: GROK_DEFAULT_BASE_URL
34
+ }
35
+ });
36
+ if ((await this.checkHealth({ authMethod: 'grok-cli' })).healthy)
37
+ instances.push({
38
+ name: 'Grok subscription (Grok Build)',
39
+ source: 'system',
40
+ config: { authMethod: 'grok-cli', tokenSource: 'oauth-browser' }
41
+ });
42
+ return instances;
43
+ }
44
+ /** The recommendation owner's scoring, shaped for the provider type: one source for the flagship model. */
45
+ async recommendModels(useCase) {
46
+ const known = USE_CASES.find((candidate) => candidate === useCase) ?? 'chat';
47
+ const recommendation = await this.context.runtime
48
+ .query('ai/provider-recommendation')
49
+ .withId('grok')
50
+ .resolve();
51
+ const recommended = await recommendation.recommendModels(null, { useCase: known });
52
+ return recommended.map((model) => {
53
+ const recommendation = {
54
+ modelId: `grok:${model.modelId}`,
55
+ modelName: model.modelName,
56
+ score: model.score,
57
+ reason: model.reason,
58
+ useCaseFit: model.useCaseFit ?? model.score
59
+ };
60
+ if (model.capabilities)
61
+ recommendation.capabilities = model.capabilities;
62
+ if (model.contextWindow !== undefined)
63
+ recommendation.contextWindow = model.contextWindow;
64
+ return recommendation;
65
+ });
66
+ }
67
+ /** The connection as health and authentication read it, or the typed refusal for one that cannot be read. */
68
+ readHealthConfig(config) {
69
+ const read = attempt(() => HealthConfigSchema.safeParse(config));
70
+ if (!read.ok)
71
+ throw grokRefusal('invalid-connection', { details: { stage: 'read' }, cause: read.cause });
72
+ if (!read.value.success) {
73
+ const method = read.value.error.issues.some((issue) => issue.path[0] === 'authMethod');
74
+ throw grokRefusal(method ? 'invalid-auth-method' : 'invalid-connection', { details: { stage: 'schema' } });
75
+ }
76
+ return read.value.data;
77
+ }
78
+ async resolveCredential(connection, options) {
79
+ assertNoPlaintextCredentials({ apiKey: connection.apiKey });
80
+ const reference = CredentialReferenceSchema.safeParse(connection.apiKey);
81
+ if (!reference.success || reference.data.source === 'inline')
82
+ return undefined;
83
+ if (options?.resolveCredential)
84
+ return options.resolveCredential(reference.data);
85
+ return resolveSecretReference(reference.data, this.context.runtime);
86
+ }
87
+ async checkHealth(config, options) {
88
+ const start = Date.now();
89
+ const connection = this.readHealthConfig(config);
90
+ if (connection.authMethod === 'grok-cli') {
91
+ const outcome = await settle(() => this.checkSubscription(options, start));
92
+ return !outcome.ok ? this.subscriptionFailure(outcome, start) : outcome.value;
93
+ }
94
+ const apiKey = await this.resolveCredential(connection, options);
95
+ if (!apiKey)
96
+ return {
97
+ healthy: false,
98
+ message: 'xAI credential is unavailable',
99
+ error: {
100
+ code: 'MISSING_API_KEY',
101
+ message: 'Resolve apiKey through the runtime credential boundary'
102
+ },
103
+ checkedAt: new Date()
104
+ };
105
+ return this.probeApi(connection, apiKey, options, start);
106
+ }
107
+ /**
108
+ * The one shared probe: no redirect following, the body cancelled, the caller's
109
+ * signal and the connection's `timeout` honoured, and only a status and a fixed
110
+ * sentence in the result (never the reason phrase, a body or a fetch error's
111
+ * text, which quotes the URL). The connections host's own typed refusal is the
112
+ * owner speaking and reaches the caller from the probe.
113
+ */
114
+ async probeApi(connection, apiKey, options, start) {
115
+ const configured = BaseUrlSchema.safeParse(connection.baseUrl);
116
+ const baseUrl = connection.baseUrl === undefined ? GROK_DEFAULT_BASE_URL : configured.success ? configured.data : '';
117
+ const timeoutMs = ProbeTimeoutSchema.safeParse(options?.timeout ?? connection.timeout);
118
+ const result = await probeProviderHealth({
119
+ runtime: this.context.runtime,
120
+ url: `${baseUrl.replace(/\/$/, '')}/models`,
121
+ headers: { authorization: `Bearer ${apiKey}` },
122
+ signal: options?.signal,
123
+ timeoutMs: timeoutMs.success ? timeoutMs.data : DEFAULT_HEALTH_TIMEOUT_MS
124
+ });
125
+ if (result.ok) {
126
+ return {
127
+ healthy: true,
128
+ latencyMs: Date.now() - start,
129
+ message: 'xAI API connection successful',
130
+ checkedAt: new Date(),
131
+ availableModalities: ['text', 'image']
132
+ };
133
+ }
134
+ return {
135
+ healthy: false,
136
+ latencyMs: Date.now() - start,
137
+ message: result.status !== undefined ? `xAI API returned ${result.status}` : result.message,
138
+ error: { code: result.code, message: result.message },
139
+ checkedAt: new Date()
140
+ };
141
+ }
142
+ async checkSubscription(options, start) {
143
+ const session = await prepareGrokSubscription(this.context.runtime);
144
+ return (await checkGrokSubscription(session, options?.timeout ?? 5_000))
145
+ ? this.subscriptionHealthy(Date.now() - start)
146
+ : this.unhealthy('SUBSCRIPTION_REQUIRED', `Grok subscription profile is not signed in on this device. Run: ${GROK_SUBSCRIPTION_LOGIN_COMMAND}`, Date.now() - start);
147
+ }
148
+ async authenticate(config, options) {
149
+ if (this.readHealthConfig(config).authMethod !== 'grok-cli')
150
+ return this.checkHealth(config, options);
151
+ if (options?.signal?.aborted)
152
+ return this.unhealthy('AUTH_CANCELLED', 'Authentication cancelled');
153
+ const start = Date.now();
154
+ const outcome = await settle(() => this.signIn(options, start));
155
+ return !outcome.ok ? this.subscriptionFailure(outcome, start) : outcome.value;
156
+ }
157
+ async signIn(options, start) {
158
+ const session = await prepareGrokSubscription(this.context.runtime);
159
+ if (await checkGrokSubscription(session, 5_000))
160
+ return this.subscriptionHealthy(Date.now() - start);
161
+ const login = await loginGrokSubscription(session, {
162
+ timeout: options?.timeout ?? GROK_SUBSCRIPTION_LOGIN_TIMEOUT_MS,
163
+ signal: options?.signal,
164
+ onMessage: options?.onMessage
165
+ });
166
+ if (login.timedOut)
167
+ return this.unhealthy('AUTH_TIMEOUT', 'Grok subscription login timed out');
168
+ if (login.exitCode !== 0)
169
+ return this.unhealthy('AUTH_FAILED', 'Grok subscription login failed');
170
+ return (await checkGrokSubscription(session, 5_000))
171
+ ? this.subscriptionHealthy(Date.now() - start)
172
+ : this.unhealthy('SUBSCRIPTION_REQUIRED', `Grok subscription sign-in has not completed. Run: ${GROK_SUBSCRIPTION_LOGIN_COMMAND}`);
173
+ }
174
+ /** Validation is the connection schema's: the same rules the connection form enforces, with its fixed sentences. */
175
+ async validateConnection(config) {
176
+ const read = attempt(() => readGrokConnection(config));
177
+ if (!read.ok)
178
+ return { valid: false, errors: ['The connection configuration cannot be read'] };
179
+ if (read.value.valid)
180
+ return { valid: true, errors: undefined };
181
+ return { valid: false, errors: [...new Set(read.value.issues.map((issue) => issue.message))] };
182
+ }
183
+ /** The owner's report of a failed subscription operation: its own refusal, else the fixed unavailability sentence. */
184
+ subscriptionFailure(failure, start) {
185
+ const described = describeGrokSubscriptionFailure(failure);
186
+ return this.unhealthy(described.code, described.error.message, Date.now() - start);
187
+ }
188
+ subscriptionHealthy(latencyMs) {
189
+ return {
190
+ healthy: true,
191
+ message: 'Grok subscription is authenticated',
192
+ checkedAt: new Date(),
193
+ latencyMs,
194
+ availableModalities: ['text']
195
+ };
196
+ }
197
+ unhealthy(code, message, latencyMs) {
198
+ return { healthy: false, message, error: { code, message }, checkedAt: new Date(), latencyMs };
199
+ }
200
+ async dispose() { }
201
+ }
202
+ //# sourceMappingURL=grok.provider.impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grok.provider.impl.js","sourceRoot":"","sources":["../../../../src/ai/providers/grok/grok.provider.impl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { detectGrokSystem } from './detection/system.ts';
2
+ export { default as grokDocsDescriptor } from './docs/ai.providers.grok.docs.descriptor.ts';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ai/providers/grok/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,6CAA6C,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { detectGrokSystem } from "./detection/system.js";
2
+ export { default as grokDocsDescriptor } from "./docs/ai.providers.grok.docs.descriptor.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ai/providers/grok/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,6CAA6C,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { ProviderRecommendation, type ModelAdapter } from '@vibesdotdev/ai/recommendations/base';
2
+ import type { ModelRecommendation, RecommendationContext, SetupMethod, SetupStep, UseCase } from '@vibesdotdev/ai/recommendations/schemas';
3
+ export declare class GrokRecommendation extends ProviderRecommendation {
4
+ readonly providerType = "grok";
5
+ readonly displayName = "Grok (xAI)";
6
+ getUseCaseScore(useCase: UseCase): number;
7
+ getStageScore(stage: RecommendationContext['stage']): number;
8
+ getRequiredEnvironmentVariables(): string[];
9
+ getReason(useCase: UseCase): string;
10
+ getStrengths(): string[];
11
+ getWeaknesses(context: RecommendationContext): string[];
12
+ getSupportedSetupMethods(): SetupMethod[];
13
+ getSetupSteps(method: SetupMethod): Promise<SetupStep[]>;
14
+ recommendModels(_adapter: ModelAdapter | null, context: RecommendationContext): Promise<ModelRecommendation[]>;
15
+ getExecutionContext(): {
16
+ recommendModels: "server";
17
+ getSetupSteps: "both";
18
+ };
19
+ supportsOAuth(): boolean;
20
+ supportsLocal(): boolean;
21
+ requiresGPU(): boolean;
22
+ }
23
+ //# sourceMappingURL=recommendations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommendations.d.ts","sourceRoot":"","sources":["../../../../src/ai/providers/grok/recommendations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,KAAK,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACjG,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAC;AAE3I,qBAAa,kBAAmB,SAAQ,sBAAsB;IAC7D,QAAQ,CAAC,YAAY,UAAU;IAAC,QAAQ,CAAC,WAAW,gBAAgB;IACpE,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;IACzC,aAAa,CAAC,KAAK,EAAE,qBAAqB,CAAC,OAAO,CAAC,GAAG,MAAM;IAC5D,+BAA+B,IAAI,MAAM,EAAE;IAC3C,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;IACnC,YAAY,IAAI,MAAM,EAAE;IACxB,aAAa,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,EAAE;IACvD,wBAAwB,IAAI,WAAW,EAAE;IACnC,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IACxD,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IACpH,mBAAmB;;;;IACnB,aAAa,IAAI,OAAO;IAAkB,aAAa,IAAI,OAAO;IAAmB,WAAW,IAAI,OAAO;CAC3G"}
@@ -0,0 +1,21 @@
1
+ import { ProviderRecommendation } from '@vibesdotdev/ai/recommendations/base';
2
+ export class GrokRecommendation extends ProviderRecommendation {
3
+ providerType = 'grok';
4
+ displayName = 'Grok (xAI)';
5
+ getUseCaseScore(useCase) { return ({ chat: 47, development: 49, research: 46, images: 10, video: 0, audio: 0, organization: 42 })[useCase]; }
6
+ getStageScore(stage) { return stage === 'production' ? 20 : 0; }
7
+ getRequiredEnvironmentVariables() { return ['XAI_API_KEY']; }
8
+ getReason(useCase) { return useCase === 'development' ? 'Grok 4.7 targets coding and agentic engineering' : 'Current frontier text, vision, reasoning, and tool use'; }
9
+ getStrengths() { return ['Agentic coding', '500k context', 'Function calling and structured outputs']; }
10
+ getWeaknesses(context) { return context.requiresLocal ? ['No local inference deployment'] : []; }
11
+ getSupportedSetupMethods() { return ['oauth', 'api_key', 'env_var']; }
12
+ async getSetupSteps(method) { if (method === 'oauth')
13
+ return [{ step: 'Authenticate Grok Build', description: 'Run `vibes dev external grok login` and confirm the device code Grok prints. The Grok CLI keeps the session.' }]; if (method === 'api_key')
14
+ return [{ step: 'Store xAI API key', description: 'Create and store an xAI key through the Vibes credential boundary.', action: 'https://console.x.ai/' }]; return [{ step: 'Bind environment credential', description: 'Store the xAI key in the secret store as XAI_API_KEY and reference it as { source: "secret", key: "XAI_API_KEY" }.' }]; }
15
+ async recommendModels(_adapter, context) { return [{ modelId: 'grok-4.7', modelName: 'Grok 4.7', score: context.useCase === 'development' ? 98 : 95, reason: 'Current xAI flagship for coding and agentic work', contextWindow: 500_000, capabilities: ['chat', 'vision', 'tools'], isAvailable: true, requiresUpgrade: false, useCaseFit: context.useCase === 'development' ? 98 : 95 }]; }
16
+ getExecutionContext() { return { recommendModels: 'server', getSetupSteps: 'both' }; }
17
+ supportsOAuth() { return true; }
18
+ supportsLocal() { return false; }
19
+ requiresGPU() { return false; }
20
+ }
21
+ //# sourceMappingURL=recommendations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommendations.js","sourceRoot":"","sources":["../../../../src/ai/providers/grok/recommendations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAqB,MAAM,sCAAsC,CAAC;AAGjG,MAAM,OAAO,kBAAmB,SAAQ,sBAAsB;IACpD,YAAY,GAAG,MAAM,CAAC;IAAU,WAAW,GAAG,YAAY,CAAC;IACpE,eAAe,CAAC,OAAgB,IAAY,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9J,aAAa,CAAC,KAAqC,IAAY,OAAO,KAAK,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxG,+BAA+B,KAAe,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACvE,SAAS,CAAC,OAAgB,IAAY,OAAO,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,iDAAiD,CAAC,CAAC,CAAC,wDAAwD,CAAC,CAAC,CAAC;IACxL,YAAY,KAAe,OAAO,CAAC,gBAAgB,EAAE,cAAc,EAAE,yCAAyC,CAAC,CAAC,CAAC,CAAC;IAClH,aAAa,CAAC,OAA8B,IAAc,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClI,wBAAwB,KAAoB,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACrF,KAAK,CAAC,aAAa,CAAC,MAAmB,IAA0B,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,CAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE,WAAW,EAAE,8GAA8G,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,oEAAoE,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,WAAW,EAAE,oHAAoH,EAAE,CAAC,CAAC,CAAC,CAAC;IAChnB,KAAK,CAAC,eAAe,CAAC,QAA6B,EAAE,OAA8B,IAAoC,OAAO,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,kDAAkD,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACxc,mBAAmB,KAAK,OAAO,EAAE,eAAe,EAAE,QAAiB,EAAE,aAAa,EAAE,MAAe,EAAE,CAAC,CAAC,CAAC;IACxG,aAAa,KAAc,OAAO,IAAI,CAAC,CAAC,CAAC;IAAC,aAAa,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;IAAC,WAAW,KAAc,OAAO,KAAK,CAAC,CAAC,CAAC;CAC7H"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * `spec-grok-build-exec` — xAI Grok Build CLI subscription-backed text generation.
3
+ *
4
+ * Consumer scope only. The paired provider variant uses the Grok-owned transport
5
+ * and the local `grok` binary. Authentication is owned by the Grok Build CLI
6
+ * (`grok login` / browser auth), so this spec does not accept or persist tokens.
7
+ */
8
+ declare const _default: {
9
+ id: string;
10
+ kind: "ai/spec";
11
+ name: string;
12
+ description: string;
13
+ modalities: ("image" | "text" | "audio" | "video" | "embedding" | "transcription" | "evaluation" | "speech" | "ocr")[];
14
+ streamFraming: "none" | "sse" | "sse-named" | "ndjson" | "binary-chunked" | "ws-frame";
15
+ toolCallEnvelope: string;
16
+ transports: string[];
17
+ external: boolean;
18
+ priority: number;
19
+ enabled: boolean;
20
+ capabilities?: ("streaming" | "json_mode" | "text_generation" | "chat_completion" | "function_calling" | "embedding_generation" | "image_generation_text_to_image" | "image_generation_image_to_image" | "image_generation_inpainting" | "image_generation_outpainting" | "image_upscaling" | "image_editing_via_instructions" | "audio_generation_text_to_speech" | "audio_generation_voice_cloning" | "audio_generation_music" | "audio_generation_sound_effects" | "audio_transcription" | "audio_transcription_realtime" | "video_generation_text_to_video" | "workflow_execution" | "code_generation" | "image_understanding" | "structured_evaluation")[] | undefined;
21
+ imageControls?: {
22
+ steps: boolean;
23
+ cfg: boolean;
24
+ sampler: boolean;
25
+ scheduler: boolean;
26
+ negativePrompt: boolean;
27
+ seed: boolean;
28
+ } | undefined;
29
+ tags?: string[] | undefined;
30
+ };
31
+ export default _default;
32
+ //# sourceMappingURL=grok-build-exec.spec.descriptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grok-build-exec.spec.descriptor.d.ts","sourceRoot":"","sources":["../../../../src/ai/specs/grok-build-exec/grok-build-exec.spec.descriptor.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;AACH,wBAYG"}
@@ -0,0 +1,21 @@
1
+ import { createAISpecDescriptor } from '@vibesdotdev/ai/specs/schemas/descriptor';
2
+ /**
3
+ * `spec-grok-build-exec` — xAI Grok Build CLI subscription-backed text generation.
4
+ *
5
+ * Consumer scope only. The paired provider variant uses the Grok-owned transport
6
+ * and the local `grok` binary. Authentication is owned by the Grok Build CLI
7
+ * (`grok login` / browser auth), so this spec does not accept or persist tokens.
8
+ */
9
+ export default createAISpecDescriptor({
10
+ id: 'grok-build-exec',
11
+ name: 'Grok Build CLI',
12
+ description: 'Runs `grok` headlessly through the official Grok Build CLI using local browser-authenticated subscription state.',
13
+ modalities: ['text'],
14
+ streamFraming: 'none',
15
+ toolCallEnvelope: 'none',
16
+ transports: ['grok-build'],
17
+ capabilities: ['text_generation'],
18
+ priority: 100,
19
+ tags: ['grok', 'xai', 'grok-build', 'browser-auth', 'subscription', 'consumer-only']
20
+ });
21
+ //# sourceMappingURL=grok-build-exec.spec.descriptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grok-build-exec.spec.descriptor.js","sourceRoot":"","sources":["../../../../src/ai/specs/grok-build-exec/grok-build-exec.spec.descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAElF;;;;;;GAMG;AACH,eAAe,sBAAsB,CAAC;IACrC,EAAE,EAAE,iBAAiB;IACrB,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACV,kHAAkH;IACnH,UAAU,EAAE,CAAC,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM;IACrB,gBAAgB,EAAE,MAAM;IACxB,UAAU,EAAE,CAAC,YAAY,CAAC;IAC1B,YAAY,EAAE,CAAC,iBAAiB,CAAC;IACjC,QAAQ,EAAE,GAAG;IACb,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,CAAC;CACpF,CAAC,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { AISpecInterface, DecodedEvent, SpecCallContext, WireRequest, WireResponseChunk } from '@vibesdotdev/ai/specs/interfaces';
2
+ import type { GenerationRequest } from '@vibesdotdev/ai/interfaces';
3
+ import type { Modality } from '@vibesdotdev/ai/models/schemas';
4
+ /**
5
+ * Grok's documented --output-format json emits one final object. Diagnostic
6
+ * lines and error.message are never assistant content.
7
+ */
8
+ export declare class GrokBuildExecSpec implements AISpecInterface {
9
+ readonly descriptor: {
10
+ id: string;
11
+ kind: "ai/spec";
12
+ name: string;
13
+ description: string;
14
+ modalities: ("image" | "text" | "audio" | "video" | "embedding" | "transcription" | "evaluation" | "speech" | "ocr")[];
15
+ streamFraming: "none" | "sse" | "sse-named" | "ndjson" | "binary-chunked" | "ws-frame";
16
+ toolCallEnvelope: string;
17
+ transports: string[];
18
+ external: boolean;
19
+ priority: number;
20
+ enabled: boolean;
21
+ capabilities?: ("streaming" | "json_mode" | "text_generation" | "chat_completion" | "function_calling" | "embedding_generation" | "image_generation_text_to_image" | "image_generation_image_to_image" | "image_generation_inpainting" | "image_generation_outpainting" | "image_upscaling" | "image_editing_via_instructions" | "audio_generation_text_to_speech" | "audio_generation_voice_cloning" | "audio_generation_music" | "audio_generation_sound_effects" | "audio_transcription" | "audio_transcription_realtime" | "video_generation_text_to_video" | "workflow_execution" | "code_generation" | "image_understanding" | "structured_evaluation")[] | undefined;
22
+ imageControls?: {
23
+ steps: boolean;
24
+ cfg: boolean;
25
+ sampler: boolean;
26
+ scheduler: boolean;
27
+ negativePrompt: boolean;
28
+ seed: boolean;
29
+ } | undefined;
30
+ tags?: string[] | undefined;
31
+ };
32
+ encodeRequest<M extends Modality>(request: GenerationRequest<M>, context: SpecCallContext): WireRequest;
33
+ decodeResponse<M extends Modality>(chunks: AsyncIterable<WireResponseChunk>, request: GenerationRequest<M>, context: SpecCallContext): AsyncIterable<DecodedEvent<M>>;
34
+ }
35
+ export default GrokBuildExecSpec;
36
+ //# sourceMappingURL=grok-build-exec.spec.impl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grok-build-exec.spec.impl.d.ts","sourceRoot":"","sources":["../../../../src/ai/specs/grok-build-exec/grok-build-exec.spec.impl.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,eAAe,EACf,YAAY,EACZ,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,EAAE,iBAAiB,EAA0B,MAAM,4BAA4B,CAAC;AAC5F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAQ/D;;;GAGG;AAGH,qBAAa,iBAAkB,YAAW,eAAe;IACxD,QAAQ,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;MAAc;IAEjC,aAAa,CAAC,CAAC,SAAS,QAAQ,EAC/B,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC7B,OAAO,EAAE,eAAe,GACtB,WAAW;IAeP,cAAc,CAAC,CAAC,SAAS,QAAQ,EACvC,MAAM,EAAE,aAAa,CAAC,iBAAiB,CAAC,EACxC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC7B,OAAO,EAAE,eAAe,GACtB,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CAwCjC;AAUD,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,78 @@
1
+ import { GrokBuildOutputSchema } from "../../../schemas/output.js";
2
+ import { concatAll, textResultEvent } from '@vibesdotdev/ai/specs/interfaces';
3
+ import { grokRefusal } from "../../providers/grok/grok-refusals.js";
4
+ import { GROK_PROCESS_OUTPUT_LIMITS } from "../../providers/grok/grok-subscription.js";
5
+ import { attempt } from "../../../outcome.js";
6
+ import { encodeGrokMessage, readGrokTextMessages } from "../grok-messages.js";
7
+ import descriptor from "./grok-build-exec.spec.descriptor.js";
8
+ /**
9
+ * Grok's documented --output-format json emits one final object. Diagnostic
10
+ * lines and error.message are never assistant content.
11
+ */
12
+ export class GrokBuildExecSpec {
13
+ descriptor = descriptor;
14
+ encodeRequest(request, context) {
15
+ // Refuses images, tool calls and tool results typed: the CLI takes one text prompt, and nothing is dropped.
16
+ const messages = readGrokTextMessages(request);
17
+ const body = { prompt: messages.map(encodeGrokMessage).join('\n\n') };
18
+ if (context.wireModelId && context.wireModelId !== 'grok')
19
+ body.model = context.wireModelId;
20
+ return {
21
+ method: 'POST',
22
+ path: '',
23
+ headers: {},
24
+ body,
25
+ streaming: false
26
+ };
27
+ }
28
+ async *decodeResponse(chunks, request, context) {
29
+ const stdoutChunks = [];
30
+ let stdoutBytes = 0;
31
+ for await (const chunk of chunks) {
32
+ if (chunk.kind === 'bytes') {
33
+ stdoutBytes += chunk.data.length;
34
+ if (stdoutBytes > GROK_PROCESS_OUTPUT_LIMITS.maxStdoutBytes) {
35
+ yield { kind: 'error', error: grokRefusal('agent-output-too-large', { details: { stage: 'decode', what: 'stdout' } }) };
36
+ return;
37
+ }
38
+ stdoutChunks.push(chunk.data);
39
+ }
40
+ else if (chunk.kind === 'error') {
41
+ yield { kind: 'error', error: chunk.error };
42
+ return;
43
+ }
44
+ }
45
+ // The stream's end is the end of the output, whether or not the transport sent its `end` chunk:
46
+ // output that never completes into a result is an error, never an empty success.
47
+ const decoded = new TextDecoder().decode(concatAll(stdoutChunks)).trim();
48
+ const response = extractResponse(decoded);
49
+ if (!response) {
50
+ yield { kind: 'error', error: grokRefusal('empty-assistant-content') };
51
+ return;
52
+ }
53
+ const result = {
54
+ id: `${context.providerId}.${context.variantId}.${Date.now()}`,
55
+ timestamp: new Date(),
56
+ content: response.text,
57
+ metadata: {
58
+ modelVersion: context.wireModelId,
59
+ finishReason: response.stopReason === 'end_turn'
60
+ ? 'stop'
61
+ : ['max_tokens', 'max_turn_requests'].includes(response.stopReason)
62
+ ? 'length'
63
+ : response.stopReason
64
+ }
65
+ };
66
+ yield textResultEvent(request, result);
67
+ }
68
+ }
69
+ function extractResponse(stdout) {
70
+ const decoded = attempt(() => JSON.parse(stdout));
71
+ // Output that is not one JSON object is no assistant content; the text is the child's and is never echoed.
72
+ if (!decoded.ok)
73
+ return undefined;
74
+ const output = GrokBuildOutputSchema.safeParse(decoded.value);
75
+ return output.success ? { text: output.data.text, stopReason: output.data.stopReason } : undefined;
76
+ }
77
+ export default GrokBuildExecSpec;
78
+ //# sourceMappingURL=grok-build-exec.spec.impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grok-build-exec.spec.impl.js","sourceRoot":"","sources":["../../../../src/ai/specs/grok-build-exec/grok-build-exec.spec.impl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { GenerationRequest } from '@vibesdotdev/ai/interfaces';
2
+ import type { Modality } from '@vibesdotdev/ai/models/schemas';
3
+ /** Characters of prompt one request may carry (the sum of every message's content). */
4
+ export declare const GROK_MAX_PROMPT_CHARS = 4194304;
5
+ export interface GrokTextMessage {
6
+ readonly role: 'system' | 'user' | 'assistant';
7
+ readonly content: string;
8
+ }
9
+ /**
10
+ * The conversation of a text request, or a typed refusal. A request that is not
11
+ * a text request (or cannot be read at all: a throwing getter, a trapping
12
+ * Proxy) is `unsupported-modality`; a malformed message list is
13
+ * `invalid-request`; content the text session cannot carry is
14
+ * `unsupported-content` (never dropped); an oversize prompt is
15
+ * `request-too-large`. Nothing the request said is echoed into a message.
16
+ */
17
+ export declare function readGrokTextMessages<M extends Modality>(request: GenerationRequest<M>): GrokTextMessage[];
18
+ /** The `<role>` framing both Grok text specs flatten a conversation to. */
19
+ export declare function encodeGrokMessage(message: GrokTextMessage): string;
20
+ //# sourceMappingURL=grok-messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grok-messages.d.ts","sourceRoot":"","sources":["../../../src/ai/specs/grok-messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAM/D,uFAAuF;AACvF,eAAO,MAAM,qBAAqB,UAAY,CAAC;AAoB/C,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,QAAQ,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,eAAe,EAAE,CAsBzG;AAgBD,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAElE"}