grok-it-mcp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +106 -0
- package/dist/auth/credentials.d.ts +28 -0
- package/dist/auth/credentials.js +67 -0
- package/dist/auth/credentials.js.map +1 -0
- package/dist/auth/oauth.d.ts +101 -0
- package/dist/auth/oauth.js +284 -0
- package/dist/auth/oauth.js.map +1 -0
- package/dist/cache/artifacts.d.ts +16 -0
- package/dist/cache/artifacts.js +62 -0
- package/dist/cache/artifacts.js.map +1 -0
- package/dist/cli.d.ts +19 -0
- package/dist/cli.js +278 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/constants.d.ts +18 -0
- package/dist/config/constants.js +19 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/config/env.d.ts +11 -0
- package/dist/config/env.js +17 -0
- package/dist/config/env.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/server.d.ts +2 -0
- package/dist/mcp/server.js +67 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/tools/image-generate.d.ts +41 -0
- package/dist/tools/image-generate.js +45 -0
- package/dist/tools/image-generate.js.map +1 -0
- package/dist/tools/video-generate.d.ts +66 -0
- package/dist/tools/video-generate.js +89 -0
- package/dist/tools/video-generate.js.map +1 -0
- package/dist/tools/x-search.d.ts +27 -0
- package/dist/tools/x-search.js +48 -0
- package/dist/tools/x-search.js.map +1 -0
- package/dist/xai/client.d.ts +25 -0
- package/dist/xai/client.js +77 -0
- package/dist/xai/client.js.map +1 -0
- package/package.json +36 -0
- package/plugins/grok-it/.claude-plugin/plugin.json +12 -0
- package/plugins/grok-it/.codex-plugin/plugin.json +37 -0
- package/plugins/grok-it/.mcp.json +15 -0
- package/plugins/grok-it/skills/grok-tools/SKILL.md +16 -0
- package/plugins/grok-it/skills/grok-tools/agents/openai.yaml +13 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
import { mkdir, writeFile } from 'node:fs/promises';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { getConfig } from '../config/env.js';
|
|
5
|
+
const EXT_BY_TYPE = {
|
|
6
|
+
'image/png': '.png',
|
|
7
|
+
'image/jpeg': '.jpg',
|
|
8
|
+
'image/webp': '.webp',
|
|
9
|
+
'video/mp4': '.mp4',
|
|
10
|
+
'video/webm': '.webm',
|
|
11
|
+
'video/quicktime': '.mov',
|
|
12
|
+
};
|
|
13
|
+
function safeName(prefix, content, ext) {
|
|
14
|
+
const hash = crypto.createHash('sha256').update(content).digest('hex').slice(0, 24);
|
|
15
|
+
return `${prefix}-${hash}${ext}`;
|
|
16
|
+
}
|
|
17
|
+
async function ensureCacheDir(cacheDir = getConfig().cacheDir) {
|
|
18
|
+
await mkdir(cacheDir, { recursive: true });
|
|
19
|
+
return cacheDir;
|
|
20
|
+
}
|
|
21
|
+
export async function cacheBase64Artifact(data, options = { mediaType: 'image' }) {
|
|
22
|
+
const contentType = options.contentType || (options.mediaType === 'image' ? 'image/png' : 'video/mp4');
|
|
23
|
+
const ext = EXT_BY_TYPE[contentType] || (options.mediaType === 'image' ? '.png' : '.bin');
|
|
24
|
+
const bytes = Buffer.from(data, 'base64');
|
|
25
|
+
const dir = await ensureCacheDir(options.cacheDir);
|
|
26
|
+
const filePath = path.join(dir, safeName(options.mediaType, data, ext));
|
|
27
|
+
await writeFile(filePath, bytes, { mode: 0o600 });
|
|
28
|
+
return { path: filePath, bytes: bytes.length, contentType };
|
|
29
|
+
}
|
|
30
|
+
export async function cacheUrlArtifact(url, options = { mediaType: 'image' }) {
|
|
31
|
+
const parsed = new URL(url);
|
|
32
|
+
if (parsed.protocol !== 'https:')
|
|
33
|
+
throw new Error('Only https artifact URLs can be cached');
|
|
34
|
+
const response = await (options.fetchImpl || fetch)(url);
|
|
35
|
+
if (!response.ok)
|
|
36
|
+
throw new Error(`Artifact download failed with HTTP ${response.status}`);
|
|
37
|
+
const contentType = (response.headers.get('content-type') || '').split(';')[0].toLowerCase();
|
|
38
|
+
if (!contentType.startsWith(`${options.mediaType}/`))
|
|
39
|
+
throw new Error(`Unexpected artifact content type: ${contentType || 'unknown'}`);
|
|
40
|
+
const limit = options.maxBytes || getConfig().maxDownloadBytes;
|
|
41
|
+
const reader = response.body?.getReader();
|
|
42
|
+
if (!reader)
|
|
43
|
+
throw new Error('Artifact response has no body');
|
|
44
|
+
const chunks = [];
|
|
45
|
+
let total = 0;
|
|
46
|
+
for (;;) {
|
|
47
|
+
const { done, value } = await reader.read();
|
|
48
|
+
if (done)
|
|
49
|
+
break;
|
|
50
|
+
total += value.byteLength;
|
|
51
|
+
if (total > limit)
|
|
52
|
+
throw new Error(`Artifact exceeds max download size (${limit} bytes)`);
|
|
53
|
+
chunks.push(value);
|
|
54
|
+
}
|
|
55
|
+
const bytes = Buffer.concat(chunks.map((chunk) => Buffer.from(chunk)));
|
|
56
|
+
const ext = EXT_BY_TYPE[contentType] || (options.mediaType === 'image' ? '.img' : '.video');
|
|
57
|
+
const dir = await ensureCacheDir(options.cacheDir);
|
|
58
|
+
const filePath = path.join(dir, safeName(options.mediaType, url, ext));
|
|
59
|
+
await writeFile(filePath, bytes, { mode: 0o600 });
|
|
60
|
+
return { path: filePath, bytes: total, contentType };
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=artifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/cache/artifacts.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
type CliStreams = {
|
|
2
|
+
stdout?: Pick<NodeJS.WriteStream, 'write'>;
|
|
3
|
+
stderr?: Pick<NodeJS.WriteStream, 'write'>;
|
|
4
|
+
};
|
|
5
|
+
export type CliOptions = CliStreams & {
|
|
6
|
+
argv?: string[];
|
|
7
|
+
env?: NodeJS.ProcessEnv;
|
|
8
|
+
fetchImpl?: typeof fetch;
|
|
9
|
+
openUrl?: (url: string) => Promise<void> | void;
|
|
10
|
+
};
|
|
11
|
+
type ParsedArgs = {
|
|
12
|
+
command?: string;
|
|
13
|
+
flags: Map<string, string | boolean>;
|
|
14
|
+
positionals: string[];
|
|
15
|
+
};
|
|
16
|
+
export declare function parseArgs(argv: string[]): ParsedArgs;
|
|
17
|
+
export declare function runCli(options?: CliOptions): Promise<number>;
|
|
18
|
+
export declare function runCliAndExit(options?: CliOptions): Promise<boolean>;
|
|
19
|
+
export {};
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
import { authStatus } from './auth/credentials.js';
|
|
2
|
+
import { createLoginSession, discoverOAuth, exchangeCodeForTokens, parseCallback, persistTokenResponse, waitForLoopbackCode } from './auth/oauth.js';
|
|
3
|
+
import { PACKAGE_NAME, PACKAGE_VERSION } from './config/constants.js';
|
|
4
|
+
import { getConfig } from './config/env.js';
|
|
5
|
+
import { handleXSearch } from './tools/x-search.js';
|
|
6
|
+
import { XaiClient } from './xai/client.js';
|
|
7
|
+
class CliError extends Error {
|
|
8
|
+
exitCode;
|
|
9
|
+
constructor(message, exitCode = 1) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.exitCode = exitCode;
|
|
12
|
+
this.name = 'CliError';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function write(stream, text) {
|
|
16
|
+
stream?.write(text);
|
|
17
|
+
}
|
|
18
|
+
export function parseArgs(argv) {
|
|
19
|
+
const [command, ...rest] = argv;
|
|
20
|
+
const flags = new Map();
|
|
21
|
+
const positionals = [];
|
|
22
|
+
for (let i = 0; i < rest.length; i += 1) {
|
|
23
|
+
const arg = rest[i];
|
|
24
|
+
if (arg === '--') {
|
|
25
|
+
positionals.push(...rest.slice(i + 1));
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
if (!arg.startsWith('--')) {
|
|
29
|
+
positionals.push(arg);
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
const eq = arg.indexOf('=');
|
|
33
|
+
if (eq !== -1) {
|
|
34
|
+
flags.set(arg.slice(2, eq), arg.slice(eq + 1));
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
const key = arg.slice(2);
|
|
38
|
+
const next = rest[i + 1];
|
|
39
|
+
if (next && !next.startsWith('--')) {
|
|
40
|
+
flags.set(key, next);
|
|
41
|
+
i += 1;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
flags.set(key, true);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return { command, flags, positionals };
|
|
48
|
+
}
|
|
49
|
+
function stringFlag(flags, name) {
|
|
50
|
+
const value = flags.get(name);
|
|
51
|
+
if (value === undefined || value === false)
|
|
52
|
+
return undefined;
|
|
53
|
+
if (value === true)
|
|
54
|
+
throw new CliError(`--${name} requires a value`, 2);
|
|
55
|
+
return value;
|
|
56
|
+
}
|
|
57
|
+
function numberFlag(flags, name) {
|
|
58
|
+
const value = stringFlag(flags, name);
|
|
59
|
+
if (value === undefined)
|
|
60
|
+
return undefined;
|
|
61
|
+
const parsed = Number.parseInt(value, 10);
|
|
62
|
+
if (!Number.isFinite(parsed))
|
|
63
|
+
throw new CliError(`--${name} must be a number`, 2);
|
|
64
|
+
return parsed;
|
|
65
|
+
}
|
|
66
|
+
function booleanFlag(flags, name) {
|
|
67
|
+
return flags.get(name) === true;
|
|
68
|
+
}
|
|
69
|
+
function listFlag(flags, name) {
|
|
70
|
+
const value = stringFlag(flags, name);
|
|
71
|
+
if (!value)
|
|
72
|
+
return undefined;
|
|
73
|
+
const items = value.split(',').map((item) => item.trim()).filter(Boolean);
|
|
74
|
+
return items.length ? items : undefined;
|
|
75
|
+
}
|
|
76
|
+
function queryFromArgs(flags, positionals) {
|
|
77
|
+
const explicit = stringFlag(flags, 'query');
|
|
78
|
+
const query = explicit || positionals.join(' ').trim();
|
|
79
|
+
if (!query)
|
|
80
|
+
throw new CliError('search requires a query, e.g. grok-it-mcp search "xAI news"', 2);
|
|
81
|
+
return query;
|
|
82
|
+
}
|
|
83
|
+
function printHelp(stdout) {
|
|
84
|
+
write(stdout, `${PACKAGE_NAME} ${PACKAGE_VERSION}\n\n`);
|
|
85
|
+
write(stdout, 'Usage:\n');
|
|
86
|
+
write(stdout, ' grok-it-mcp Start the stdio MCP server\n');
|
|
87
|
+
write(stdout, ' grok-it-mcp status|auth-status Show Grok auth status\n');
|
|
88
|
+
write(stdout, ' grok-it-mcp login [options] Run Grok OAuth login\n');
|
|
89
|
+
write(stdout, ' grok-it-mcp search <query> Run X search through Grok/xAI\n');
|
|
90
|
+
write(stdout, ' grok-it-mcp x-search <query> Alias for search\n\n');
|
|
91
|
+
write(stdout, 'Login options:\n');
|
|
92
|
+
write(stdout, ' --loopback Wait for the local OAuth callback and save tokens\n');
|
|
93
|
+
write(stdout, ' --open Open the authorize URL in your browser; implies --loopback\n');
|
|
94
|
+
write(stdout, ' --callback <url-or-code> Complete login from callback URL or authorization code\n');
|
|
95
|
+
write(stdout, ' --verifier <pkce-verifier> PKCE verifier from the first login call\n');
|
|
96
|
+
write(stdout, ' --state <state> OAuth state from the first login call\n');
|
|
97
|
+
write(stdout, ' --redirect-uri <uri> OAuth redirect URI\n');
|
|
98
|
+
write(stdout, ' --timeout-ms <ms> Loopback timeout, default 120000\n');
|
|
99
|
+
write(stdout, ' --json Print machine-readable JSON\n\n');
|
|
100
|
+
write(stdout, 'Search options:\n');
|
|
101
|
+
write(stdout, ' --query <text> Search query alternative to positional args\n');
|
|
102
|
+
write(stdout, ' --model <model> Override xAI Responses model\n');
|
|
103
|
+
write(stdout, ' --from-date <YYYY-MM-DD> Inclusive lower date bound\n');
|
|
104
|
+
write(stdout, ' --to-date <YYYY-MM-DD> Inclusive upper date bound\n');
|
|
105
|
+
write(stdout, ' --include-handles <a,b> Comma-separated X handles to include\n');
|
|
106
|
+
write(stdout, ' --exclude-handles <a,b> Comma-separated X handles to exclude\n');
|
|
107
|
+
write(stdout, ' --include-images Include image results in X search parameters\n');
|
|
108
|
+
write(stdout, ' --include-videos Include video results in X search parameters\n');
|
|
109
|
+
write(stdout, ' --max-results <n> Maximum X search results, 1-50\n');
|
|
110
|
+
write(stdout, ' --json Print machine-readable JSON\n\n');
|
|
111
|
+
write(stdout, 'Examples:\n');
|
|
112
|
+
write(stdout, ' grok-it-mcp status\n');
|
|
113
|
+
write(stdout, ' grok-it-mcp login --open\n');
|
|
114
|
+
write(stdout, ' grok-it-mcp search "xAI news"\n');
|
|
115
|
+
write(stdout, ' grok-it-mcp x-search "grok updates" --include-handles xai --max-results 5 --json\n');
|
|
116
|
+
write(stdout, ' grok-it-mcp login --callback "$CALLBACK" --verifier "$VERIFIER" --state "$STATE" --redirect-uri http://127.0.0.1:8765/callback\n');
|
|
117
|
+
}
|
|
118
|
+
async function defaultOpenUrl(url) {
|
|
119
|
+
const { spawn } = await import('node:child_process');
|
|
120
|
+
const platform = process.platform;
|
|
121
|
+
const command = platform === 'darwin' ? 'open' : platform === 'win32' ? 'cmd' : 'xdg-open';
|
|
122
|
+
const args = platform === 'win32' ? ['/c', 'start', '', url] : [url];
|
|
123
|
+
const child = spawn(command, args, { stdio: 'ignore', detached: true });
|
|
124
|
+
child.unref();
|
|
125
|
+
await new Promise((resolve, reject) => {
|
|
126
|
+
const timer = setTimeout(resolve, 50);
|
|
127
|
+
child.once('error', (error) => {
|
|
128
|
+
clearTimeout(timer);
|
|
129
|
+
reject(error);
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
async function runStatus(flags, options) {
|
|
134
|
+
const status = await authStatus(options.env || process.env);
|
|
135
|
+
if (booleanFlag(flags, 'json')) {
|
|
136
|
+
write(options.stdout || process.stdout, `${JSON.stringify(status, null, 2)}\n`);
|
|
137
|
+
return 0;
|
|
138
|
+
}
|
|
139
|
+
write(options.stdout || process.stdout, `Logged in: ${status.logged_in ? 'yes' : 'no'}\n`);
|
|
140
|
+
write(options.stdout || process.stdout, `Provider: ${status.provider || 'none'}\n`);
|
|
141
|
+
write(options.stdout || process.stdout, `Base URL: ${status.base_url || 'none'}\n`);
|
|
142
|
+
write(options.stdout || process.stdout, `OAuth expires at: ${status.oauth_expires_at || 'none'}\n`);
|
|
143
|
+
write(options.stdout || process.stdout, `API key present: ${status.api_key_present ? 'yes' : 'no'}\n`);
|
|
144
|
+
write(options.stdout || process.stdout, `Token store: ${status.token_store}\n`);
|
|
145
|
+
write(options.stdout || process.stdout, `Cache dir: ${status.cache_dir}\n`);
|
|
146
|
+
return 0;
|
|
147
|
+
}
|
|
148
|
+
async function runLogin(flags, options) {
|
|
149
|
+
const stdout = options.stdout || process.stdout;
|
|
150
|
+
const config = getConfig(options.env || process.env);
|
|
151
|
+
const json = booleanFlag(flags, 'json');
|
|
152
|
+
const callback = stringFlag(flags, 'callback');
|
|
153
|
+
const verifier = stringFlag(flags, 'verifier');
|
|
154
|
+
const state = stringFlag(flags, 'state');
|
|
155
|
+
const redirectUri = stringFlag(flags, 'redirect-uri');
|
|
156
|
+
const timeoutMs = numberFlag(flags, 'timeout-ms') || 120_000;
|
|
157
|
+
const loopback = booleanFlag(flags, 'loopback') || booleanFlag(flags, 'open');
|
|
158
|
+
if (callback) {
|
|
159
|
+
if (!verifier)
|
|
160
|
+
throw new CliError('login completion requires --verifier', 2);
|
|
161
|
+
if (!redirectUri)
|
|
162
|
+
throw new CliError('login completion requires --redirect-uri', 2);
|
|
163
|
+
if (!state)
|
|
164
|
+
throw new CliError('login completion requires --state', 2);
|
|
165
|
+
const discovery = await discoverOAuth(options.fetchImpl || fetch);
|
|
166
|
+
const { code } = parseCallback(callback, state);
|
|
167
|
+
const tokens = await exchangeCodeForTokens({ code, verifier, redirectUri, discovery, fetchImpl: options.fetchImpl });
|
|
168
|
+
const persisted = await persistTokenResponse({ tokens, discovery, redirectUri, baseUrl: config.oauthBaseUrl, tokenStorePath: config.tokenStorePath });
|
|
169
|
+
const result = { logged_in: true, provider: 'xai-oauth', base_url: persisted.base_url, expires_at: tokens.expires_at ? new Date(tokens.expires_at).toISOString() : null };
|
|
170
|
+
write(stdout, json ? `${JSON.stringify(result, null, 2)}\n` : `Grok login complete. Provider: xai-oauth\nBase URL: ${result.base_url}\nOAuth expires at: ${result.expires_at || 'unknown'}\n`);
|
|
171
|
+
return 0;
|
|
172
|
+
}
|
|
173
|
+
const session = await createLoginSession({ redirectUri, fetchImpl: options.fetchImpl || fetch });
|
|
174
|
+
if (booleanFlag(flags, 'open')) {
|
|
175
|
+
try {
|
|
176
|
+
await (options.openUrl || defaultOpenUrl)(session.authorizeUrl);
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
write(options.stderr || process.stderr, `Could not open browser automatically: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
if (loopback) {
|
|
183
|
+
if (!json) {
|
|
184
|
+
write(stdout, `Open this URL to authorize Grok:\n${session.authorizeUrl}\n\nWaiting for OAuth callback on ${session.redirectUri} ...\n`);
|
|
185
|
+
}
|
|
186
|
+
const code = await waitForLoopbackCode(session, timeoutMs);
|
|
187
|
+
const tokens = await exchangeCodeForTokens({ code, verifier: session.verifier, challenge: session.challenge, redirectUri: session.redirectUri, discovery: session.discovery, fetchImpl: options.fetchImpl });
|
|
188
|
+
const persisted = await persistTokenResponse({ tokens, discovery: session.discovery, redirectUri: session.redirectUri, baseUrl: config.oauthBaseUrl, tokenStorePath: config.tokenStorePath });
|
|
189
|
+
const result = { logged_in: true, provider: 'xai-oauth', base_url: persisted.base_url, expires_at: tokens.expires_at ? new Date(tokens.expires_at).toISOString() : null };
|
|
190
|
+
write(stdout, json ? `${JSON.stringify(result, null, 2)}\n` : `Grok login complete. Provider: xai-oauth\nBase URL: ${result.base_url}\nOAuth expires at: ${result.expires_at || 'unknown'}\n`);
|
|
191
|
+
return 0;
|
|
192
|
+
}
|
|
193
|
+
const result = {
|
|
194
|
+
logged_in: false,
|
|
195
|
+
authorize_url: session.authorizeUrl,
|
|
196
|
+
verifier: session.verifier,
|
|
197
|
+
state: session.state,
|
|
198
|
+
redirect_uri: session.redirectUri,
|
|
199
|
+
instructions: 'Open authorize_url, then run grok-it-mcp login --callback <callback-url-or-code> --verifier <verifier> --state <state> --redirect-uri <redirect_uri>. Do not paste tokens.',
|
|
200
|
+
};
|
|
201
|
+
if (json) {
|
|
202
|
+
write(stdout, `${JSON.stringify(result, null, 2)}\n`);
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
write(stdout, `Open this URL to authorize Grok:\n${result.authorize_url}\n\n`);
|
|
206
|
+
write(stdout, `Then complete login with:\n`);
|
|
207
|
+
write(stdout, `grok-it-mcp login --callback '<callback-url-or-code>' --verifier '${result.verifier}' --state '${result.state}' --redirect-uri '${result.redirect_uri}'\n`);
|
|
208
|
+
}
|
|
209
|
+
return 0;
|
|
210
|
+
}
|
|
211
|
+
async function runSearch(flags, positionals, options) {
|
|
212
|
+
const stdout = options.stdout || process.stdout;
|
|
213
|
+
const maxResults = numberFlag(flags, 'max-results');
|
|
214
|
+
if (maxResults !== undefined && (maxResults < 1 || maxResults > 50))
|
|
215
|
+
throw new CliError('--max-results must be between 1 and 50', 2);
|
|
216
|
+
const args = {
|
|
217
|
+
query: queryFromArgs(flags, positionals),
|
|
218
|
+
model: stringFlag(flags, 'model'),
|
|
219
|
+
from_date: stringFlag(flags, 'from-date'),
|
|
220
|
+
to_date: stringFlag(flags, 'to-date'),
|
|
221
|
+
include_handles: listFlag(flags, 'include-handles'),
|
|
222
|
+
exclude_handles: listFlag(flags, 'exclude-handles'),
|
|
223
|
+
include_images: booleanFlag(flags, 'include-images') ? true : undefined,
|
|
224
|
+
include_videos: booleanFlag(flags, 'include-videos') ? true : undefined,
|
|
225
|
+
max_results: maxResults,
|
|
226
|
+
};
|
|
227
|
+
const result = await handleXSearch(args, new XaiClient({ env: options.env || process.env, fetchImpl: options.fetchImpl }));
|
|
228
|
+
if (booleanFlag(flags, 'json')) {
|
|
229
|
+
write(stdout, `${JSON.stringify(result, null, 2)}\n`);
|
|
230
|
+
return 0;
|
|
231
|
+
}
|
|
232
|
+
write(stdout, `${result.answer || '(no answer returned)'}\n`);
|
|
233
|
+
if (result.citations.length)
|
|
234
|
+
write(stdout, `\nCitations:\n${result.citations.map((citation) => `- ${citation}`).join('\n')}\n`);
|
|
235
|
+
write(stdout, `\nModel: ${String(result.model)}\n`);
|
|
236
|
+
write(stdout, `Credential source: ${result.credential_source}\n`);
|
|
237
|
+
if (result.degraded)
|
|
238
|
+
write(stdout, 'Warning: response did not include output text. Use --json to inspect metadata.\n');
|
|
239
|
+
return 0;
|
|
240
|
+
}
|
|
241
|
+
export async function runCli(options = {}) {
|
|
242
|
+
const argv = options.argv || process.argv.slice(2);
|
|
243
|
+
const parsed = parseArgs(argv);
|
|
244
|
+
const command = parsed.command;
|
|
245
|
+
if (!command)
|
|
246
|
+
return -1;
|
|
247
|
+
if (command === '--help' || command === '-h' || command === 'help') {
|
|
248
|
+
printHelp(options.stdout || process.stdout);
|
|
249
|
+
return 0;
|
|
250
|
+
}
|
|
251
|
+
if (command === '--version' || command === '-v' || command === 'version') {
|
|
252
|
+
write(options.stdout || process.stdout, `${PACKAGE_VERSION}\n`);
|
|
253
|
+
return 0;
|
|
254
|
+
}
|
|
255
|
+
if (command === 'status' || command === 'auth-status' || command === 'auth_status')
|
|
256
|
+
return runStatus(parsed.flags, options);
|
|
257
|
+
if (command === 'login')
|
|
258
|
+
return runLogin(parsed.flags, options);
|
|
259
|
+
if (command === 'search' || command === 'x-search' || command === 'x_search')
|
|
260
|
+
return runSearch(parsed.flags, parsed.positionals, options);
|
|
261
|
+
throw new CliError(`Unknown command: ${command}`, 2);
|
|
262
|
+
}
|
|
263
|
+
export async function runCliAndExit(options = {}) {
|
|
264
|
+
try {
|
|
265
|
+
const code = await runCli(options);
|
|
266
|
+
if (code === -1)
|
|
267
|
+
return false;
|
|
268
|
+
process.exitCode = code;
|
|
269
|
+
return true;
|
|
270
|
+
}
|
|
271
|
+
catch (error) {
|
|
272
|
+
const exitCode = error instanceof CliError ? error.exitCode : 1;
|
|
273
|
+
write(options.stderr || process.stderr, `${error instanceof Error ? error.message : String(error)}\n`);
|
|
274
|
+
process.exitCode = exitCode;
|
|
275
|
+
return true;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const PACKAGE_NAME = "grok-it-mcp";
|
|
2
|
+
export declare const PACKAGE_VERSION = "0.1.0";
|
|
3
|
+
export declare const DEFAULT_XAI_BASE_URL = "https://api.x.ai/v1";
|
|
4
|
+
export declare const DEFAULT_XAI_AUTH_ISSUER = "https://auth.x.ai";
|
|
5
|
+
export declare const DEFAULT_XAI_DISCOVERY_URL = "https://auth.x.ai/.well-known/openid-configuration";
|
|
6
|
+
export declare const DEFAULT_XAI_OAUTH_CLIENT_ID = "b1a00492-073a-47ea-816f-4c329264a828";
|
|
7
|
+
export declare const DEFAULT_XAI_OAUTH_SCOPE = "openid profile email offline_access grok-cli:access api:access";
|
|
8
|
+
export declare const DEFAULT_REDIRECT_HOST = "127.0.0.1";
|
|
9
|
+
export declare const DEFAULT_REDIRECT_PATH = "/callback";
|
|
10
|
+
export declare const DEFAULT_REDIRECT_PORT = 8765;
|
|
11
|
+
export declare const DEFAULT_X_SEARCH_MODEL = "grok-4.20-reasoning";
|
|
12
|
+
export declare const DEFAULT_IMAGE_MODEL = "grok-imagine-image";
|
|
13
|
+
export declare const DEFAULT_VIDEO_MODEL = "grok-imagine-video";
|
|
14
|
+
export declare const DEFAULT_VIDEO_IMAGE_MODEL = "grok-imagine-video-1.5-preview";
|
|
15
|
+
export declare const DEFAULT_POLL_INTERVAL_MS = 2000;
|
|
16
|
+
export declare const DEFAULT_VIDEO_TIMEOUT_MS: number;
|
|
17
|
+
export declare const DEFAULT_MAX_DOWNLOAD_BYTES: number;
|
|
18
|
+
export declare const OAUTH_REFRESH_SKEW_MS: number;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const PACKAGE_NAME = 'grok-it-mcp';
|
|
2
|
+
export const PACKAGE_VERSION = '0.1.0';
|
|
3
|
+
export const DEFAULT_XAI_BASE_URL = 'https://api.x.ai/v1';
|
|
4
|
+
export const DEFAULT_XAI_AUTH_ISSUER = 'https://auth.x.ai';
|
|
5
|
+
export const DEFAULT_XAI_DISCOVERY_URL = `${DEFAULT_XAI_AUTH_ISSUER}/.well-known/openid-configuration`;
|
|
6
|
+
export const DEFAULT_XAI_OAUTH_CLIENT_ID = 'b1a00492-073a-47ea-816f-4c329264a828';
|
|
7
|
+
export const DEFAULT_XAI_OAUTH_SCOPE = 'openid profile email offline_access grok-cli:access api:access';
|
|
8
|
+
export const DEFAULT_REDIRECT_HOST = '127.0.0.1';
|
|
9
|
+
export const DEFAULT_REDIRECT_PATH = '/callback';
|
|
10
|
+
export const DEFAULT_REDIRECT_PORT = 8765;
|
|
11
|
+
export const DEFAULT_X_SEARCH_MODEL = 'grok-4.20-reasoning';
|
|
12
|
+
export const DEFAULT_IMAGE_MODEL = 'grok-imagine-image';
|
|
13
|
+
export const DEFAULT_VIDEO_MODEL = 'grok-imagine-video';
|
|
14
|
+
export const DEFAULT_VIDEO_IMAGE_MODEL = 'grok-imagine-video-1.5-preview';
|
|
15
|
+
export const DEFAULT_POLL_INTERVAL_MS = 2_000;
|
|
16
|
+
export const DEFAULT_VIDEO_TIMEOUT_MS = 10 * 60_000;
|
|
17
|
+
export const DEFAULT_MAX_DOWNLOAD_BYTES = 50 * 1024 * 1024;
|
|
18
|
+
export const OAUTH_REFRESH_SKEW_MS = 5 * 60_000;
|
|
19
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC;AAC1C,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC;AACvC,MAAM,CAAC,MAAM,oBAAoB,GAAG,qBAAqB,CAAC;AAC1D,MAAM,CAAC,MAAM,uBAAuB,GAAG,mBAAmB,CAAC;AAC3D,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,uBAAuB,mCAAmC,CAAC;AACvG,MAAM,CAAC,MAAM,2BAA2B,GAAG,sCAAsC,CAAC;AAClF,MAAM,CAAC,MAAM,uBAAuB,GAAG,gEAAgE,CAAC;AACxG,MAAM,CAAC,MAAM,qBAAqB,GAAG,WAAW,CAAC;AACjD,MAAM,CAAC,MAAM,qBAAqB,GAAG,WAAW,CAAC;AACjD,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAC1C,MAAM,CAAC,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;AAC5D,MAAM,CAAC,MAAM,mBAAmB,GAAG,oBAAoB,CAAC;AACxD,MAAM,CAAC,MAAM,mBAAmB,GAAG,oBAAoB,CAAC;AACxD,MAAM,CAAC,MAAM,yBAAyB,GAAG,gCAAgC,CAAC;AAC1E,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAC9C,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,GAAG,MAAM,CAAC;AACpD,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAC3D,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,GAAG,MAAM,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type GrokItConfig = {
|
|
2
|
+
baseUrl: string;
|
|
3
|
+
oauthBaseUrl: string;
|
|
4
|
+
apiKey?: string;
|
|
5
|
+
tokenStorePath: string;
|
|
6
|
+
cacheDir: string;
|
|
7
|
+
cacheVideoByDefault: boolean;
|
|
8
|
+
maxDownloadBytes: number;
|
|
9
|
+
oauthClientId?: string;
|
|
10
|
+
};
|
|
11
|
+
export declare function getConfig(env?: NodeJS.ProcessEnv): GrokItConfig;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { DEFAULT_MAX_DOWNLOAD_BYTES, DEFAULT_XAI_BASE_URL } from './constants.js';
|
|
4
|
+
export function getConfig(env = process.env) {
|
|
5
|
+
const home = os.homedir();
|
|
6
|
+
return {
|
|
7
|
+
baseUrl: env.XAI_BASE_URL || DEFAULT_XAI_BASE_URL,
|
|
8
|
+
oauthBaseUrl: env.GROK_OAUTH_BASE_URL || DEFAULT_XAI_BASE_URL,
|
|
9
|
+
apiKey: env.XAI_API_KEY,
|
|
10
|
+
tokenStorePath: env.GROK_IT_TOKEN_STORE || path.join(home, '.grok-it', 'auth.json'),
|
|
11
|
+
cacheDir: env.GROK_IT_CACHE_DIR || path.join(home, '.grok-it', 'artifacts'),
|
|
12
|
+
cacheVideoByDefault: env.GROK_IT_CACHE_VIDEO === '1' || env.GROK_IT_CACHE_VIDEO === 'true',
|
|
13
|
+
maxDownloadBytes: Number.parseInt(env.GROK_IT_MAX_DOWNLOAD_BYTES || '', 10) || DEFAULT_MAX_DOWNLOAD_BYTES,
|
|
14
|
+
oauthClientId: env.GROK_IT_OAUTH_CLIENT_ID,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAalF,MAAM,UAAU,SAAS,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC5D,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,YAAY,IAAI,oBAAoB;QACjD,YAAY,EAAE,GAAG,CAAC,mBAAmB,IAAI,oBAAoB;QAC7D,MAAM,EAAE,GAAG,CAAC,WAAW;QACvB,cAAc,EAAE,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC;QACnF,QAAQ,EAAE,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC;QAC3E,mBAAmB,EAAE,GAAG,CAAC,mBAAmB,KAAK,GAAG,IAAI,GAAG,CAAC,mBAAmB,KAAK,MAAM;QAC1F,gBAAgB,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,0BAA0B,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,0BAA0B;QACzG,aAAa,EAAE,GAAG,CAAC,uBAAuB;KAC3C,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
|
+
import { runCliAndExit } from './cli.js';
|
|
4
|
+
import { createGrokMcpServer } from './mcp/server.js';
|
|
5
|
+
async function main() {
|
|
6
|
+
if (await runCliAndExit())
|
|
7
|
+
return;
|
|
8
|
+
const server = createGrokMcpServer();
|
|
9
|
+
await server.connect(new StdioServerTransport());
|
|
10
|
+
}
|
|
11
|
+
main().catch((error) => {
|
|
12
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
13
|
+
process.exit(1);
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,KAAK,UAAU,IAAI;IACjB,IAAI,MAAM,aAAa,EAAE;QAAE,OAAO;IAClC,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;IACrC,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { PACKAGE_NAME, PACKAGE_VERSION } from '../config/constants.js';
|
|
4
|
+
import { authStatus } from '../auth/credentials.js';
|
|
5
|
+
import { createLoginSession, discoverOAuth, exchangeCodeForTokens, parseCallback, persistTokenResponse, waitForLoopbackCode } from '../auth/oauth.js';
|
|
6
|
+
import { handleXSearch, xSearchSchema } from '../tools/x-search.js';
|
|
7
|
+
import { handleImageGenerate, imageGenerateSchema } from '../tools/image-generate.js';
|
|
8
|
+
import { handleVideoGenerate, videoGenerateSchema } from '../tools/video-generate.js';
|
|
9
|
+
function jsonContent(value) {
|
|
10
|
+
return { content: [{ type: 'text', text: JSON.stringify(value, null, 2) }] };
|
|
11
|
+
}
|
|
12
|
+
const loginSchema = {
|
|
13
|
+
callback: z.string().optional().describe('Callback URL or bare authorization code from the xAI OAuth page.'),
|
|
14
|
+
verifier: z.string().optional().describe('PKCE verifier returned by a previous grok_login call.'),
|
|
15
|
+
redirect_uri: z.string().optional(),
|
|
16
|
+
state: z.string().optional(),
|
|
17
|
+
loopback: z.boolean().default(false).optional(),
|
|
18
|
+
timeout_ms: z.number().int().min(1000).max(10 * 60_000).default(120_000).optional(),
|
|
19
|
+
};
|
|
20
|
+
export function createGrokMcpServer() {
|
|
21
|
+
const server = new McpServer({ name: PACKAGE_NAME, version: PACKAGE_VERSION });
|
|
22
|
+
server.registerTool('grok_auth_status', {
|
|
23
|
+
title: 'Grok auth status',
|
|
24
|
+
description: 'Report Grok OAuth/API-key auth status without returning token material.',
|
|
25
|
+
inputSchema: {},
|
|
26
|
+
}, async () => jsonContent(await authStatus()));
|
|
27
|
+
server.registerTool('grok_login', {
|
|
28
|
+
title: 'Grok OAuth login',
|
|
29
|
+
description: 'Start or complete xAI/Grok OAuth PKCE login. First call without callback to get authorize_url and verifier; second call with callback+verifier to persist tokens. loopback:true can wait locally.',
|
|
30
|
+
inputSchema: loginSchema,
|
|
31
|
+
}, async (args) => {
|
|
32
|
+
if (args.callback && args.verifier && args.redirect_uri) {
|
|
33
|
+
if (!args.state)
|
|
34
|
+
throw new Error('grok_login completion requires the state returned by the initial login call');
|
|
35
|
+
const discovery = await discoverOAuth();
|
|
36
|
+
const { code } = parseCallback(args.callback, args.state);
|
|
37
|
+
const tokens = await exchangeCodeForTokens({ code, verifier: args.verifier, challenge: undefined, redirectUri: args.redirect_uri, discovery });
|
|
38
|
+
const persisted = await persistTokenResponse({ tokens, discovery, redirectUri: args.redirect_uri });
|
|
39
|
+
return jsonContent({ logged_in: true, provider: 'xai-oauth', base_url: persisted.base_url, expires_at: tokens.expires_at ? new Date(tokens.expires_at).toISOString() : null });
|
|
40
|
+
}
|
|
41
|
+
const session = await createLoginSession({ redirectUri: args.redirect_uri });
|
|
42
|
+
if (args.loopback) {
|
|
43
|
+
const code = await waitForLoopbackCode(session, args.timeout_ms || 120_000);
|
|
44
|
+
const tokens = await exchangeCodeForTokens({ code, verifier: session.verifier, challenge: session.challenge, redirectUri: session.redirectUri, discovery: session.discovery });
|
|
45
|
+
const persisted = await persistTokenResponse({ tokens, discovery: session.discovery, redirectUri: session.redirectUri });
|
|
46
|
+
return jsonContent({ logged_in: true, provider: 'xai-oauth', base_url: persisted.base_url, expires_at: tokens.expires_at ? new Date(tokens.expires_at).toISOString() : null });
|
|
47
|
+
}
|
|
48
|
+
return jsonContent({ logged_in: false, authorize_url: session.authorizeUrl, verifier: session.verifier, state: session.state, redirect_uri: session.redirectUri, instructions: 'Open authorize_url, then call grok_login again with callback, verifier, redirect_uri, and state. Do not paste tokens.' });
|
|
49
|
+
});
|
|
50
|
+
server.registerTool('grok_x_search', {
|
|
51
|
+
title: 'Search X with Grok',
|
|
52
|
+
description: 'Use xAI Responses API with the x_search built-in tool to search X/Twitter and summarize results.',
|
|
53
|
+
inputSchema: xSearchSchema,
|
|
54
|
+
}, async (args) => jsonContent(await handleXSearch(args)));
|
|
55
|
+
server.registerTool('grok_image_generate', {
|
|
56
|
+
title: 'Generate image with Grok',
|
|
57
|
+
description: 'Generate images through xAI /images/generations and cache returned image artifacts by default.',
|
|
58
|
+
inputSchema: imageGenerateSchema,
|
|
59
|
+
}, async (args) => jsonContent(await handleImageGenerate(args)));
|
|
60
|
+
server.registerTool('grok_video_generate', {
|
|
61
|
+
title: 'Generate video with Grok',
|
|
62
|
+
description: 'Generate videos through xAI /videos/generations, poll status, return remote URL by default, optionally cache with cache_video:true.',
|
|
63
|
+
inputSchema: videoGenerateSchema,
|
|
64
|
+
}, async (args) => jsonContent(await handleVideoGenerate(args)));
|
|
65
|
+
return server;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,qBAAqB,EAAE,aAAa,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACtJ,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtF,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACxF,CAAC;AAED,MAAM,WAAW,GAAG;IAClB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kEAAkE,CAAC;IAC5G,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;IACjG,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;IAC/C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE;CACpF,CAAC;AAEF,MAAM,UAAU,mBAAmB;IACjC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;IAE/E,MAAM,CAAC,YAAY,CAAC,kBAAkB,EAAE;QACtC,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,yEAAyE;QACtF,WAAW,EAAE,EAAE;KAChB,EAAE,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,MAAM,UAAU,EAAE,CAAC,CAAC,CAAC;IAEhD,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE;QAChC,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,mMAAmM;QAChN,WAAW,EAAE,WAAW;KACzB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAChB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACxD,IAAI,CAAC,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;YAChH,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;YACxC,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;YAC/I,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;YACpG,OAAO,WAAW,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACjL,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAC7E,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,CAAC;YAC5E,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;YAC/K,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YACzH,OAAO,WAAW,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACjL,CAAC;QACD,OAAO,WAAW,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC,WAAW,EAAE,YAAY,EAAE,uHAAuH,EAAE,CAAC,CAAC;IAC5S,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE;QACnC,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,kGAAkG;QAC/G,WAAW,EAAE,aAAa;KAC3B,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE3D,MAAM,CAAC,YAAY,CAAC,qBAAqB,EAAE;QACzC,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE,gGAAgG;QAC7G,WAAW,EAAE,mBAAmB;KACjC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEjE,MAAM,CAAC,YAAY,CAAC,qBAAqB,EAAE;QACzC,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE,qIAAqI;QAClJ,WAAW,EAAE,mBAAmB;KACjC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEjE,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { XaiClient } from '../xai/client.js';
|
|
3
|
+
export declare const imageGenerateSchema: {
|
|
4
|
+
prompt: z.ZodString;
|
|
5
|
+
model: z.ZodOptional<z.ZodDefault<z.ZodString>>;
|
|
6
|
+
aspect_ratio: z.ZodOptional<z.ZodString>;
|
|
7
|
+
resolution: z.ZodOptional<z.ZodString>;
|
|
8
|
+
n: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
|
|
9
|
+
cache: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
10
|
+
};
|
|
11
|
+
export type ImageGenerateArgs = z.objectOutputType<typeof imageGenerateSchema, z.ZodTypeAny>;
|
|
12
|
+
export declare function buildImagePayload(args: ImageGenerateArgs): {
|
|
13
|
+
resolution?: string | undefined;
|
|
14
|
+
aspect_ratio?: string | undefined;
|
|
15
|
+
model: string;
|
|
16
|
+
prompt: string;
|
|
17
|
+
n: number;
|
|
18
|
+
};
|
|
19
|
+
export declare function handleImageGenerate(args: ImageGenerateArgs, client?: XaiClient, fetchImpl?: typeof fetch): Promise<{
|
|
20
|
+
images: ({
|
|
21
|
+
image: string;
|
|
22
|
+
bytes: number;
|
|
23
|
+
content_type: string | undefined;
|
|
24
|
+
revised_prompt: {} | null;
|
|
25
|
+
remote_url?: undefined;
|
|
26
|
+
} | {
|
|
27
|
+
image: string;
|
|
28
|
+
remote_url: string;
|
|
29
|
+
bytes: number;
|
|
30
|
+
content_type: string | undefined;
|
|
31
|
+
revised_prompt: {} | null;
|
|
32
|
+
} | {
|
|
33
|
+
image: string | null;
|
|
34
|
+
remote_url: {} | null;
|
|
35
|
+
revised_prompt: {} | null;
|
|
36
|
+
bytes?: undefined;
|
|
37
|
+
content_type?: undefined;
|
|
38
|
+
})[];
|
|
39
|
+
model: {};
|
|
40
|
+
credential_source: import("../auth/credentials.js").CredentialSource;
|
|
41
|
+
}>;
|