grok-dev 1.0.0-rc1
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/.cursor/rules/development-workflow.mdc +66 -0
- package/.cursor/rules/project-overview.mdc +66 -0
- package/.cursor/rules/react-ink-components.mdc +45 -0
- package/.cursor/rules/tools-and-agent.mdc +62 -0
- package/.cursor/rules/typescript-conventions.mdc +54 -0
- package/.grok/settings.json +3 -0
- package/.husky/pre-commit +1 -0
- package/LICENSE +21 -0
- package/README.md +526 -0
- package/biome.json +51 -0
- package/dist/agent/agent.d.ts +62 -0
- package/dist/agent/agent.js +701 -0
- package/dist/agent/agent.js.map +1 -0
- package/dist/agent/delegations.d.ts +42 -0
- package/dist/agent/delegations.js +273 -0
- package/dist/agent/delegations.js.map +1 -0
- package/dist/grok/client.d.ts +12 -0
- package/dist/grok/client.js +37 -0
- package/dist/grok/client.js.map +1 -0
- package/dist/grok/models.d.ts +5 -0
- package/dist/grok/models.js +73 -0
- package/dist/grok/models.js.map +1 -0
- package/dist/grok/tools.d.ts +12 -0
- package/dist/grok/tools.js +230 -0
- package/dist/grok/tools.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +192 -0
- package/dist/index.js.map +1 -0
- package/dist/storage/db.d.ts +18 -0
- package/dist/storage/db.js +71 -0
- package/dist/storage/db.js.map +1 -0
- package/dist/storage/index.d.ts +4 -0
- package/dist/storage/index.js +5 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/migrations.d.ts +2 -0
- package/dist/storage/migrations.js +92 -0
- package/dist/storage/migrations.js.map +1 -0
- package/dist/storage/sessions.d.ts +15 -0
- package/dist/storage/sessions.js +135 -0
- package/dist/storage/sessions.js.map +1 -0
- package/dist/storage/transcript.d.ts +6 -0
- package/dist/storage/transcript.js +261 -0
- package/dist/storage/transcript.js.map +1 -0
- package/dist/storage/usage.d.ts +9 -0
- package/dist/storage/usage.js +58 -0
- package/dist/storage/usage.js.map +1 -0
- package/dist/storage/workspaces.d.ts +9 -0
- package/dist/storage/workspaces.js +60 -0
- package/dist/storage/workspaces.js.map +1 -0
- package/dist/telegram/bridge.d.ts +39 -0
- package/dist/telegram/bridge.js +164 -0
- package/dist/telegram/bridge.js.map +1 -0
- package/dist/telegram/index.d.ts +3 -0
- package/dist/telegram/index.js +4 -0
- package/dist/telegram/index.js.map +1 -0
- package/dist/telegram/limits.d.ts +3 -0
- package/dist/telegram/limits.js +12 -0
- package/dist/telegram/limits.js.map +1 -0
- package/dist/telegram/pairing.d.ts +9 -0
- package/dist/telegram/pairing.js +30 -0
- package/dist/telegram/pairing.js.map +1 -0
- package/dist/telegram/preview-stream.d.ts +22 -0
- package/dist/telegram/preview-stream.js +181 -0
- package/dist/telegram/preview-stream.js.map +1 -0
- package/dist/telegram/turn-coordinator.d.ts +7 -0
- package/dist/telegram/turn-coordinator.js +14 -0
- package/dist/telegram/turn-coordinator.js.map +1 -0
- package/dist/telegram/typing-refresh.d.ts +3 -0
- package/dist/telegram/typing-refresh.js +12 -0
- package/dist/telegram/typing-refresh.js.map +1 -0
- package/dist/tools/bash.d.ts +27 -0
- package/dist/tools/bash.js +261 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/file.d.ts +15 -0
- package/dist/tools/file.js +94 -0
- package/dist/tools/file.js.map +1 -0
- package/dist/types/index.d.ts +151 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/ui/app.d.ts +15 -0
- package/dist/ui/app.js +1720 -0
- package/dist/ui/app.js.map +1 -0
- package/dist/ui/markdown.d.ts +5 -0
- package/dist/ui/markdown.js +38 -0
- package/dist/ui/markdown.js.map +1 -0
- package/dist/ui/plan.d.ts +24 -0
- package/dist/ui/plan.js +122 -0
- package/dist/ui/plan.js.map +1 -0
- package/dist/ui/terminal-selection-text.d.ts +23 -0
- package/dist/ui/terminal-selection-text.js +59 -0
- package/dist/ui/terminal-selection-text.js.map +1 -0
- package/dist/ui/theme.d.ts +53 -0
- package/dist/ui/theme.js +53 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/utils/git-root.d.ts +1 -0
- package/dist/utils/git-root.js +16 -0
- package/dist/utils/git-root.js.map +1 -0
- package/dist/utils/host-clipboard.d.ts +4 -0
- package/dist/utils/host-clipboard.js +32 -0
- package/dist/utils/host-clipboard.js.map +1 -0
- package/dist/utils/instructions.d.ts +1 -0
- package/dist/utils/instructions.js +73 -0
- package/dist/utils/instructions.js.map +1 -0
- package/dist/utils/settings.d.ts +33 -0
- package/dist/utils/settings.js +88 -0
- package/dist/utils/settings.js.map +1 -0
- package/dist/utils/skills.d.ts +17 -0
- package/dist/utils/skills.js +161 -0
- package/dist/utils/skills.js.map +1 -0
- package/package.json +67 -0
- package/skills-lock.json +10 -0
- package/tmp/large_class.py +633 -0
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { generateText, tool } from "ai";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { editFile, readFile, writeFile } from "../tools/file";
|
|
4
|
+
const RESPONSES_SEARCH_MODEL = "grok-4-fast-non-reasoning";
|
|
5
|
+
export function createTools(bash, provider, mode = "agent", options = {}) {
|
|
6
|
+
const cwd = () => bash.getCwd();
|
|
7
|
+
const runResponsesSearch = async (query, toolName) => {
|
|
8
|
+
try {
|
|
9
|
+
const { text } = await generateText({
|
|
10
|
+
model: provider.responses(RESPONSES_SEARCH_MODEL),
|
|
11
|
+
maxOutputTokens: 4096,
|
|
12
|
+
prompt: query,
|
|
13
|
+
tools: {
|
|
14
|
+
...(toolName === "web_search" ? { web_search: provider.tools.webSearch() } : {}),
|
|
15
|
+
...(toolName === "x_search" ? { x_search: provider.tools.xSearch() } : {}),
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
return {
|
|
19
|
+
success: true,
|
|
20
|
+
output: text || "No search results found.",
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
25
|
+
const label = toolName === "web_search" ? "Web search" : "X search";
|
|
26
|
+
return { success: false, output: `${label} failed: ${msg}` };
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
const base = {
|
|
30
|
+
bash: tool({
|
|
31
|
+
description: "Execute a bash command. Use for searching (grep, rg, find), git, build tools, package managers, running tests, and any other shell command. Set background=true for long-running processes like dev servers, watchers, or anything that should keep running while you continue working. For file read/write/edit, prefer the dedicated file tools instead.",
|
|
32
|
+
inputSchema: z.object({
|
|
33
|
+
command: z.string().describe("The bash command to execute"),
|
|
34
|
+
timeout: z
|
|
35
|
+
.number()
|
|
36
|
+
.optional()
|
|
37
|
+
.describe("Timeout in milliseconds (default: 30000). Use higher values for long-running commands. Ignored when background=true."),
|
|
38
|
+
background: z
|
|
39
|
+
.boolean()
|
|
40
|
+
.optional()
|
|
41
|
+
.describe("Run the command as a background process. Returns immediately with a process ID. Use process_logs/process_stop/process_list to manage it."),
|
|
42
|
+
}),
|
|
43
|
+
execute: async ({ command, timeout, background }) => {
|
|
44
|
+
if (background) {
|
|
45
|
+
return bash.startBackground(command);
|
|
46
|
+
}
|
|
47
|
+
const result = await bash.execute(command, timeout);
|
|
48
|
+
return {
|
|
49
|
+
success: result.success,
|
|
50
|
+
output: result.success
|
|
51
|
+
? result.output || "Command executed successfully (no output)"
|
|
52
|
+
: result.error || "Command failed",
|
|
53
|
+
};
|
|
54
|
+
},
|
|
55
|
+
}),
|
|
56
|
+
process_logs: tool({
|
|
57
|
+
description: "View recent output (stdout + stderr) from a background process by its ID. Returns the last N lines of the log.",
|
|
58
|
+
inputSchema: z.object({
|
|
59
|
+
id: z.number().describe("The background process ID"),
|
|
60
|
+
tail: z.number().optional().describe("Number of lines to return from the end (default: 50)"),
|
|
61
|
+
}),
|
|
62
|
+
execute: async ({ id, tail }) => {
|
|
63
|
+
return bash.getProcessLogs(id, tail);
|
|
64
|
+
},
|
|
65
|
+
}),
|
|
66
|
+
process_stop: tool({
|
|
67
|
+
description: "Stop a running background process by its ID. Sends SIGTERM, then SIGKILL after 3 seconds if still alive.",
|
|
68
|
+
inputSchema: z.object({
|
|
69
|
+
id: z.number().describe("The background process ID to stop"),
|
|
70
|
+
}),
|
|
71
|
+
execute: async ({ id }) => {
|
|
72
|
+
return bash.stopProcess(id);
|
|
73
|
+
},
|
|
74
|
+
}),
|
|
75
|
+
process_list: tool({
|
|
76
|
+
description: "List all background processes with their ID, status, PID, age, and command.",
|
|
77
|
+
inputSchema: z.object({}),
|
|
78
|
+
execute: async () => {
|
|
79
|
+
return bash.listProcesses();
|
|
80
|
+
},
|
|
81
|
+
}),
|
|
82
|
+
read_file: tool({
|
|
83
|
+
description: "Read the contents of a file. Returns numbered lines with a header showing the range and total line count. Use start_line/end_line to read specific sections of large files iteratively.",
|
|
84
|
+
inputSchema: z.object({
|
|
85
|
+
path: z.string().describe("File path (relative to cwd or absolute)"),
|
|
86
|
+
start_line: z.number().optional().describe("First line to read (1-indexed, default: 1)"),
|
|
87
|
+
end_line: z.number().optional().describe("Last line to read (inclusive, default: end of file)"),
|
|
88
|
+
}),
|
|
89
|
+
execute: async ({ path, start_line, end_line }) => {
|
|
90
|
+
return readFile(path, cwd(), start_line, end_line);
|
|
91
|
+
},
|
|
92
|
+
}),
|
|
93
|
+
search_web: tool({
|
|
94
|
+
description: "Search the web for current information, documentation, APIs, tutorials, news, or any real-time data. Returns summarized results with sources.",
|
|
95
|
+
inputSchema: z.object({
|
|
96
|
+
query: z.string().describe("The search query"),
|
|
97
|
+
}),
|
|
98
|
+
execute: async ({ query }) => {
|
|
99
|
+
return runResponsesSearch(query, "web_search");
|
|
100
|
+
},
|
|
101
|
+
}),
|
|
102
|
+
search_x: tool({
|
|
103
|
+
description: "Search X (Twitter) for real-time posts, discussions, opinions, and trends. Returns relevant posts with authors and engagement data.",
|
|
104
|
+
inputSchema: z.object({
|
|
105
|
+
query: z.string().describe("The search query"),
|
|
106
|
+
}),
|
|
107
|
+
execute: async ({ query }) => {
|
|
108
|
+
return runResponsesSearch(query, "x_search");
|
|
109
|
+
},
|
|
110
|
+
}),
|
|
111
|
+
};
|
|
112
|
+
const tools = { ...base };
|
|
113
|
+
if (mode === "agent") {
|
|
114
|
+
tools.write_file = tool({
|
|
115
|
+
description: "Create or overwrite a file with the given content. Use for creating new files or completely rewriting existing ones. Returns a diff of the changes.",
|
|
116
|
+
inputSchema: z.object({
|
|
117
|
+
path: z.string().describe("File path (relative to cwd or absolute)"),
|
|
118
|
+
content: z.string().describe("The full file content to write"),
|
|
119
|
+
}),
|
|
120
|
+
execute: async ({ path, content }) => {
|
|
121
|
+
return writeFile(path, content, cwd());
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
tools.edit_file = tool({
|
|
125
|
+
description: "Edit a file by replacing a unique string with new content. The old_string must appear exactly once in the file. Include enough surrounding context lines in old_string to make it unique. Returns a diff of the changes.",
|
|
126
|
+
inputSchema: z.object({
|
|
127
|
+
path: z.string().describe("File path (relative to cwd or absolute)"),
|
|
128
|
+
old_string: z.string().describe("The exact text to find (must be unique in the file)"),
|
|
129
|
+
new_string: z.string().describe("The replacement text"),
|
|
130
|
+
}),
|
|
131
|
+
execute: async ({ path, old_string, new_string }) => {
|
|
132
|
+
return editFile(path, old_string, new_string, cwd());
|
|
133
|
+
},
|
|
134
|
+
});
|
|
135
|
+
if (options.runTask) {
|
|
136
|
+
tools.task = tool({
|
|
137
|
+
description: "Delegate a focused foreground task to a sub-agent. Prefer this proactively for review, research, investigation, and code quality work instead of waiting for the user to request a sub-agent. Use `general` for multi-step execution and `explore` for fast read-only investigation. Provide a short description plus a detailed prompt for the child agent.",
|
|
138
|
+
inputSchema: z.object({
|
|
139
|
+
agent: z.enum(["general", "explore"]).default("general").describe("Which sub-agent to use"),
|
|
140
|
+
description: z
|
|
141
|
+
.string()
|
|
142
|
+
.describe("A short label for the delegated task, such as 'Deep code quality analysis'"),
|
|
143
|
+
prompt: z.string().describe("Detailed instructions for the sub-agent to complete"),
|
|
144
|
+
}),
|
|
145
|
+
execute: async ({ agent, description, prompt }, { abortSignal }) => {
|
|
146
|
+
return options.runTask({ agent, description, prompt }, abortSignal);
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
if (options.runDelegation) {
|
|
151
|
+
tools.delegate = tool({
|
|
152
|
+
description: "Launch a read-only background agent that can keep researching while you continue working. Use this only for `explore` tasks that do not edit files or make shell changes. You will be notified when it completes.",
|
|
153
|
+
inputSchema: z.object({
|
|
154
|
+
agent: z
|
|
155
|
+
.enum(["explore"])
|
|
156
|
+
.default("explore")
|
|
157
|
+
.describe("Background delegations currently support only the read-only explore agent"),
|
|
158
|
+
description: z.string().describe("A short label for the delegation, such as 'OAuth callback research'"),
|
|
159
|
+
prompt: z.string().describe("Detailed instructions for the background agent to complete"),
|
|
160
|
+
}),
|
|
161
|
+
execute: async ({ agent, description, prompt }, { abortSignal }) => {
|
|
162
|
+
return options.runDelegation({ agent, description, prompt }, abortSignal);
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
if (options.readDelegation) {
|
|
167
|
+
tools.delegation_read = tool({
|
|
168
|
+
description: "Read the saved output of a background delegation by ID. Use this after a completion notice or when revisiting prior research.",
|
|
169
|
+
inputSchema: z.object({
|
|
170
|
+
id: z.string().describe("The delegation ID, such as 'calm-blue-fox'"),
|
|
171
|
+
}),
|
|
172
|
+
execute: async ({ id }) => {
|
|
173
|
+
return options.readDelegation(id);
|
|
174
|
+
},
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
if (options.listDelegations) {
|
|
178
|
+
tools.delegation_list = tool({
|
|
179
|
+
description: "List recent background delegations for the current project. Use sparingly to discover IDs or review prior results, not for repeated polling.",
|
|
180
|
+
inputSchema: z.object({}),
|
|
181
|
+
execute: async () => {
|
|
182
|
+
return options.listDelegations();
|
|
183
|
+
},
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
if (mode !== "plan")
|
|
188
|
+
return tools;
|
|
189
|
+
tools.generate_plan = tool({
|
|
190
|
+
description: "Generate an interactive implementation plan with steps and optional questions for the user. The plan is displayed in a structured UI where the user can review steps and answer questions. Always use this tool when creating plans.",
|
|
191
|
+
inputSchema: z.object({
|
|
192
|
+
title: z.string().describe("Plan title"),
|
|
193
|
+
summary: z.string().describe("Brief summary of what the plan accomplishes"),
|
|
194
|
+
steps: z
|
|
195
|
+
.array(z.object({
|
|
196
|
+
title: z.string().describe("Step title"),
|
|
197
|
+
description: z.string().describe("Detailed description of what this step involves"),
|
|
198
|
+
filePaths: z.array(z.string()).optional().describe("Files affected by this step"),
|
|
199
|
+
}))
|
|
200
|
+
.describe("Ordered list of implementation steps"),
|
|
201
|
+
questions: z
|
|
202
|
+
.array(z.object({
|
|
203
|
+
id: z.string().describe("Unique question identifier"),
|
|
204
|
+
question: z.string().describe("The question to ask the user"),
|
|
205
|
+
header: z.string().optional().describe("Single-word tab label (e.g. 'Format', 'Storage', 'Testing')"),
|
|
206
|
+
type: z
|
|
207
|
+
.enum(["select", "multiselect", "text"])
|
|
208
|
+
.describe("Question type: select (pick one), multiselect (pick many), or text (free-form)"),
|
|
209
|
+
options: z
|
|
210
|
+
.array(z.object({
|
|
211
|
+
id: z.string().describe("Option identifier"),
|
|
212
|
+
label: z.string().describe("Option display text"),
|
|
213
|
+
}))
|
|
214
|
+
.optional()
|
|
215
|
+
.describe("Options for select/multiselect questions"),
|
|
216
|
+
}))
|
|
217
|
+
.optional()
|
|
218
|
+
.describe("Questions for the user to answer before proceeding"),
|
|
219
|
+
}),
|
|
220
|
+
execute: async ({ title, summary, steps, questions }) => {
|
|
221
|
+
return {
|
|
222
|
+
success: true,
|
|
223
|
+
output: `Plan "${title}" generated with ${steps.length} steps`,
|
|
224
|
+
plan: { title, summary, steps, questions },
|
|
225
|
+
};
|
|
226
|
+
},
|
|
227
|
+
});
|
|
228
|
+
return tools;
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/grok/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAgB,IAAI,EAAE,MAAM,IAAI,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAI9D,MAAM,sBAAsB,GAAG,2BAA2B,CAAC;AAS3D,MAAM,UAAU,WAAW,CACzB,IAAc,EACd,QAAqB,EACrB,OAAkB,OAAO,EACzB,UAA8B,EAAE;IAEhC,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAEhC,MAAM,kBAAkB,GAAG,KAAK,EAC9B,KAAa,EACb,QAAmC,EACY,EAAE;QACjD,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC;gBAClC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,sBAAsB,CAAC;gBACjD,eAAe,EAAE,IAAI;gBACrB,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE;oBACL,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChF,GAAG,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC3E;aACF,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,IAAI,IAAI,0BAA0B;aAC3C,CAAC;QACJ,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,MAAM,KAAK,GAAG,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC;YACpE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,YAAY,GAAG,EAAE,EAAE,CAAC;QAC/D,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG;QACX,IAAI,EAAE,IAAI,CAAC;YACT,WAAW,EACT,4VAA4V;YAC9V,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;gBAC3D,OAAO,EAAE,CAAC;qBACP,MAAM,EAAE;qBACR,QAAQ,EAAE;qBACV,QAAQ,CACP,sHAAsH,CACvH;gBACH,UAAU,EAAE,CAAC;qBACV,OAAO,EAAE;qBACT,QAAQ,EAAE;qBACV,QAAQ,CACP,0IAA0I,CAC3I;aACJ,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE;gBAClD,IAAI,UAAU,EAAE,CAAC;oBACf,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;gBACvC,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACpD,OAAO;oBACL,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,MAAM,EAAE,MAAM,CAAC,OAAO;wBACpB,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,2CAA2C;wBAC9D,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,gBAAgB;iBACrC,CAAC;YACJ,CAAC;SACF,CAAC;QAEF,YAAY,EAAE,IAAI,CAAC;YACjB,WAAW,EACT,gHAAgH;YAClH,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;gBACpD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;aAC7F,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;gBAC9B,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACvC,CAAC;SACF,CAAC;QAEF,YAAY,EAAE,IAAI,CAAC;YACjB,WAAW,EACT,0GAA0G;YAC5G,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;aAC7D,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;gBACxB,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC9B,CAAC;SACF,CAAC;QAEF,YAAY,EAAE,IAAI,CAAC;YACjB,WAAW,EAAE,6EAA6E;YAC1F,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,KAAK,IAAI,EAAE;gBAClB,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;YAC9B,CAAC;SACF,CAAC;QAEF,SAAS,EAAE,IAAI,CAAC;YACd,WAAW,EACT,yLAAyL;YAC3L,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;gBACpE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;gBACxF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;aAChG,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;gBAChD,OAAO,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;YACrD,CAAC;SACF,CAAC;QAEF,UAAU,EAAE,IAAI,CAAC;YACf,WAAW,EACT,+IAA+I;YACjJ,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;aAC/C,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC3B,OAAO,kBAAkB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YACjD,CAAC;SACF,CAAC;QAEF,QAAQ,EAAE,IAAI,CAAC;YACb,WAAW,EACT,qIAAqI;YACvI,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;aAC/C,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC3B,OAAO,kBAAkB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YAC/C,CAAC;SACF,CAAC;KACH,CAAC;IAEF,MAAM,KAAK,GAAY,EAAE,GAAG,IAAI,EAAE,CAAC;IAEnC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;YACtB,WAAW,EACT,qJAAqJ;YACvJ,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;gBACpE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;aAC/D,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;gBACnC,OAAO,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;YACzC,CAAC;SACF,CAAC,CAAC;QAEH,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;YACrB,WAAW,EACT,0NAA0N;YAC5N,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;gBACpE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;gBACtF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;aACxD,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE;gBAClD,OAAO,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;YACvD,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;gBAChB,WAAW,EACT,8VAA8V;gBAChW,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;oBACpB,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;oBAC3F,WAAW,EAAE,CAAC;yBACX,MAAM,EAAE;yBACR,QAAQ,CAAC,4EAA4E,CAAC;oBACzF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;iBACnF,CAAC;gBACF,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;oBACjE,OAAO,OAAO,CAAC,OAAQ,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC;gBACvE,CAAC;aACF,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1B,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACpB,WAAW,EACT,mNAAmN;gBACrN,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;oBACpB,KAAK,EAAE,CAAC;yBACL,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;yBACjB,OAAO,CAAC,SAAS,CAAC;yBAClB,QAAQ,CAAC,2EAA2E,CAAC;oBACxF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qEAAqE,CAAC;oBACvG,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;iBAC1F,CAAC;gBACF,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;oBACjE,OAAO,OAAO,CAAC,aAAc,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC;gBAC7E,CAAC;aACF,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC3B,WAAW,EACT,+HAA+H;gBACjI,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;oBACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;iBACtE,CAAC;gBACF,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;oBACxB,OAAO,OAAO,CAAC,cAAe,CAAC,EAAE,CAAC,CAAC;gBACrC,CAAC;aACF,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5B,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC3B,WAAW,EACT,8IAA8I;gBAChJ,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzB,OAAO,EAAE,KAAK,IAAI,EAAE;oBAClB,OAAO,OAAO,CAAC,eAAgB,EAAE,CAAC;gBACpC,CAAC;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAElC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;QACzB,WAAW,EACT,sOAAsO;QACxO,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YACxC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;YAC3E,KAAK,EAAE,CAAC;iBACL,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;gBACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;gBACxC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;gBACnF,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;aAClF,CAAC,CACH;iBACA,QAAQ,CAAC,sCAAsC,CAAC;YACnD,SAAS,EAAE,CAAC;iBACT,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;gBACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;gBACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;gBAC7D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;gBACrG,IAAI,EAAE,CAAC;qBACJ,IAAI,CAAC,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;qBACvC,QAAQ,CAAC,gFAAgF,CAAC;gBAC7F,OAAO,EAAE,CAAC;qBACP,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;oBACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;oBAC5C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;iBAClD,CAAC,CACH;qBACA,QAAQ,EAAE;qBACV,QAAQ,CAAC,0CAA0C,CAAC;aACxD,CAAC,CACH;iBACA,QAAQ,EAAE;iBACV,QAAQ,CAAC,oDAAoD,CAAC;SAClE,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;YACtD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,SAAS,KAAK,oBAAoB,KAAK,CAAC,MAAM,QAAQ;gBAC9D,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;aAC3C,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
import { program } from "commander";
|
|
3
|
+
import * as dotenv from "dotenv";
|
|
4
|
+
import { Agent } from "./agent/agent";
|
|
5
|
+
import { completeDelegation, failDelegation, loadDelegation } from "./agent/delegations";
|
|
6
|
+
import { MODELS } from "./grok/models";
|
|
7
|
+
import { getApiKey, getBaseURL, getCurrentModel, saveUserSettings } from "./utils/settings";
|
|
8
|
+
dotenv.config();
|
|
9
|
+
process.on("SIGTERM", () => {
|
|
10
|
+
process.exit(0);
|
|
11
|
+
});
|
|
12
|
+
process.on("uncaughtException", (err) => {
|
|
13
|
+
console.error("Fatal:", err.message);
|
|
14
|
+
process.exit(1);
|
|
15
|
+
});
|
|
16
|
+
process.on("unhandledRejection", (reason) => {
|
|
17
|
+
console.error("Unhandled rejection:", reason);
|
|
18
|
+
process.exit(1);
|
|
19
|
+
});
|
|
20
|
+
async function startInteractive(apiKey, baseURL, model, maxToolRounds, session, initialMessage) {
|
|
21
|
+
const agent = new Agent(apiKey, baseURL, model, maxToolRounds, { session });
|
|
22
|
+
const { createCliRenderer } = await import("@opentui/core");
|
|
23
|
+
const { createRoot } = await import("@opentui/react");
|
|
24
|
+
const { createElement } = await import("react");
|
|
25
|
+
const { App } = await import("./ui/app");
|
|
26
|
+
const renderer = await createCliRenderer({
|
|
27
|
+
exitOnCtrlC: false,
|
|
28
|
+
// Lets terminals (Kitty, iTerm2, WezTerm, …) report Command as `super` on KeyEvent — needed for ⌘C in the TUI.
|
|
29
|
+
useKittyKeyboard: {
|
|
30
|
+
disambiguate: true,
|
|
31
|
+
alternateKeys: true,
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
const onExit = () => {
|
|
35
|
+
renderer.destroy();
|
|
36
|
+
process.exit(0);
|
|
37
|
+
};
|
|
38
|
+
createRoot(renderer).render(createElement(App, {
|
|
39
|
+
agent,
|
|
40
|
+
startupConfig: {
|
|
41
|
+
apiKey,
|
|
42
|
+
baseURL,
|
|
43
|
+
model,
|
|
44
|
+
maxToolRounds,
|
|
45
|
+
},
|
|
46
|
+
initialMessage,
|
|
47
|
+
onExit,
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
50
|
+
async function runHeadless(prompt, apiKey, baseURL, model, maxToolRounds, session) {
|
|
51
|
+
const agent = new Agent(apiKey, baseURL, model, maxToolRounds, { session });
|
|
52
|
+
process.stdout.write(`\x1b[36m⏳ Processing...\x1b[0m\n`);
|
|
53
|
+
if (agent.getSessionId()) {
|
|
54
|
+
process.stderr.write(`\x1b[2mSession: ${agent.getSessionId()}\x1b[0m\n`);
|
|
55
|
+
}
|
|
56
|
+
for await (const chunk of agent.processMessage(prompt)) {
|
|
57
|
+
switch (chunk.type) {
|
|
58
|
+
case "content":
|
|
59
|
+
if (chunk.content)
|
|
60
|
+
process.stdout.write(chunk.content);
|
|
61
|
+
break;
|
|
62
|
+
case "tool_calls":
|
|
63
|
+
if (chunk.toolCalls) {
|
|
64
|
+
for (const tc of chunk.toolCalls) {
|
|
65
|
+
process.stderr.write(`\x1b[33m⚙ ${tc.function.name}\x1b[0m\n`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
break;
|
|
69
|
+
case "tool_result":
|
|
70
|
+
if (chunk.toolResult) {
|
|
71
|
+
const icon = chunk.toolResult.success ? "✓" : "✗";
|
|
72
|
+
const color = chunk.toolResult.success ? "\x1b[32m" : "\x1b[31m";
|
|
73
|
+
process.stderr.write(`${color}${icon} ${chunk.toolCall?.function.name || "tool"}\x1b[0m\n`);
|
|
74
|
+
}
|
|
75
|
+
break;
|
|
76
|
+
case "error":
|
|
77
|
+
process.stderr.write(`\x1b[31m${chunk.content}\x1b[0m\n`);
|
|
78
|
+
break;
|
|
79
|
+
case "done":
|
|
80
|
+
process.stdout.write("\n");
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
async function runBackgroundDelegation(jobPath, options) {
|
|
86
|
+
let output = "";
|
|
87
|
+
try {
|
|
88
|
+
const delegation = await loadDelegation(jobPath);
|
|
89
|
+
const apiKey = options.apiKey || getApiKey();
|
|
90
|
+
if (!apiKey) {
|
|
91
|
+
throw new Error("API key required. Set GROK_API_KEY, use --api-key, or save it to ~/.grok/user-settings.json.");
|
|
92
|
+
}
|
|
93
|
+
const baseURL = options.baseUrl || getBaseURL();
|
|
94
|
+
const model = options.model || delegation.model || getCurrentModel();
|
|
95
|
+
const maxToolRounds = parseInt(options.maxToolRounds || String(delegation.maxToolRounds), 10) || delegation.maxToolRounds;
|
|
96
|
+
const agent = new Agent(apiKey, baseURL, model, maxToolRounds, { persistSession: false });
|
|
97
|
+
const result = await agent.runTaskRequest({
|
|
98
|
+
agent: delegation.agent,
|
|
99
|
+
description: delegation.description,
|
|
100
|
+
prompt: delegation.prompt,
|
|
101
|
+
});
|
|
102
|
+
output = (result.output || "").trim();
|
|
103
|
+
if (!result.success) {
|
|
104
|
+
await failDelegation(jobPath, result.output || result.error || "Background delegation failed.", output);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
await completeDelegation(jobPath, output, result.task?.summary);
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
111
|
+
try {
|
|
112
|
+
await failDelegation(jobPath, msg, output);
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// Best effort — background tasks should fail silently if persistence is unavailable.
|
|
116
|
+
}
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function resolveConfig(options) {
|
|
121
|
+
const apiKey = options.apiKey || getApiKey();
|
|
122
|
+
const baseURL = options.baseUrl || getBaseURL();
|
|
123
|
+
const model = options.model || getCurrentModel();
|
|
124
|
+
const maxToolRounds = parseInt(options.maxToolRounds || "400", 10) || 400;
|
|
125
|
+
if (options.apiKey)
|
|
126
|
+
saveUserSettings({ apiKey: options.apiKey });
|
|
127
|
+
if (options.model)
|
|
128
|
+
saveUserSettings({ defaultModel: options.model });
|
|
129
|
+
return { apiKey, baseURL, model, maxToolRounds };
|
|
130
|
+
}
|
|
131
|
+
function requireApiKey(apiKey) {
|
|
132
|
+
if (!apiKey) {
|
|
133
|
+
console.error("Error: API key required. Set GROK_API_KEY env var, use --api-key, or save to ~/.grok/user-settings.json");
|
|
134
|
+
process.exit(1);
|
|
135
|
+
}
|
|
136
|
+
return apiKey;
|
|
137
|
+
}
|
|
138
|
+
program
|
|
139
|
+
.name("grok")
|
|
140
|
+
.description("AI coding agent powered by Grok — built with Bun and OpenTUI")
|
|
141
|
+
.version("1.0.0")
|
|
142
|
+
.argument("[message...]", "Initial message to send")
|
|
143
|
+
.option("-k, --api-key <key>", "Grok API key")
|
|
144
|
+
.option("-u, --base-url <url>", "API base URL")
|
|
145
|
+
.option("-m, --model <model>", "Model to use")
|
|
146
|
+
.option("-d, --directory <dir>", "Working directory", process.cwd())
|
|
147
|
+
.option("-p, --prompt <prompt>", "Run a single prompt headlessly")
|
|
148
|
+
.option("-s, --session <id>", "Continue a saved session by id, or use 'latest'")
|
|
149
|
+
.option("--background-task-file <path>", "Run a persisted background delegation")
|
|
150
|
+
.option("--max-tool-rounds <n>", "Max tool execution rounds", "400")
|
|
151
|
+
.action(async (message, options) => {
|
|
152
|
+
if (options.directory) {
|
|
153
|
+
try {
|
|
154
|
+
process.chdir(options.directory);
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
157
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
158
|
+
console.error(`Cannot change to directory ${options.directory}: ${msg}`);
|
|
159
|
+
process.exit(1);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
if (options.backgroundTaskFile) {
|
|
163
|
+
await runBackgroundDelegation(options.backgroundTaskFile, options);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const config = resolveConfig(options);
|
|
167
|
+
if (options.prompt) {
|
|
168
|
+
await runHeadless(options.prompt, requireApiKey(config.apiKey), config.baseURL, config.model, config.maxToolRounds, options.session);
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
const initialMessage = message.length > 0 ? message.join(" ") : undefined;
|
|
172
|
+
await startInteractive(config.apiKey, config.baseURL, config.model, config.maxToolRounds, options.session, initialMessage);
|
|
173
|
+
});
|
|
174
|
+
program
|
|
175
|
+
.command("models")
|
|
176
|
+
.description("List available Grok models")
|
|
177
|
+
.action(() => {
|
|
178
|
+
console.log("\nAvailable Grok Models:\n");
|
|
179
|
+
for (const m of MODELS) {
|
|
180
|
+
const reasoning = m.reasoning ? " (reasoning)" : "";
|
|
181
|
+
console.log(` \x1b[36m${m.id}\x1b[0m — ${m.name}${reasoning}`);
|
|
182
|
+
console.log(` ${m.description} | ${formatContext(m.contextWindow)} context | $${m.inputPrice}/$${m.outputPrice} per 1M tokens`);
|
|
183
|
+
}
|
|
184
|
+
console.log();
|
|
185
|
+
});
|
|
186
|
+
program.parse();
|
|
187
|
+
function formatContext(tokens) {
|
|
188
|
+
if (tokens >= 1_000_000)
|
|
189
|
+
return `${tokens / 1_000_000}M`;
|
|
190
|
+
return `${tokens / 1_000}K`;
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface SQLiteStatement {
|
|
2
|
+
run(...params: unknown[]): unknown;
|
|
3
|
+
get(...params: unknown[]): unknown;
|
|
4
|
+
all(...params: unknown[]): unknown[];
|
|
5
|
+
}
|
|
6
|
+
export interface SQLiteDatabase {
|
|
7
|
+
exec(sql: string): void;
|
|
8
|
+
prepare(sql: string): SQLiteStatement;
|
|
9
|
+
pragma(query: string, options?: {
|
|
10
|
+
simple?: boolean;
|
|
11
|
+
}): unknown;
|
|
12
|
+
transaction<T>(fn: () => T): () => T;
|
|
13
|
+
close(): void;
|
|
14
|
+
}
|
|
15
|
+
export declare function getDatabasePath(): string;
|
|
16
|
+
export declare function getDatabase(): SQLiteDatabase;
|
|
17
|
+
export declare function withTransaction<T>(fn: (database: SQLiteDatabase) => T): T;
|
|
18
|
+
export declare function closeDatabase(): void;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Database } from "bun:sqlite";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import os from "os";
|
|
4
|
+
import path from "path";
|
|
5
|
+
import { applyMigrations } from "./migrations";
|
|
6
|
+
let db = null;
|
|
7
|
+
export function getDatabasePath() {
|
|
8
|
+
const dir = path.join(os.homedir(), ".grok");
|
|
9
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
10
|
+
return path.join(dir, "grok.db");
|
|
11
|
+
}
|
|
12
|
+
export function getDatabase() {
|
|
13
|
+
if (db)
|
|
14
|
+
return db;
|
|
15
|
+
const database = new BunSqliteDatabase(getDatabasePath());
|
|
16
|
+
database.pragma("journal_mode = WAL");
|
|
17
|
+
database.pragma("foreign_keys = ON");
|
|
18
|
+
database.pragma("busy_timeout = 5000");
|
|
19
|
+
database.pragma("synchronous = NORMAL");
|
|
20
|
+
applyMigrations(database);
|
|
21
|
+
db = database;
|
|
22
|
+
return database;
|
|
23
|
+
}
|
|
24
|
+
export function withTransaction(fn) {
|
|
25
|
+
const database = getDatabase();
|
|
26
|
+
return database.transaction(() => fn(database))();
|
|
27
|
+
}
|
|
28
|
+
export function closeDatabase() {
|
|
29
|
+
db?.close();
|
|
30
|
+
db = null;
|
|
31
|
+
}
|
|
32
|
+
class BunSqliteDatabase {
|
|
33
|
+
db;
|
|
34
|
+
constructor(filename) {
|
|
35
|
+
this.db = new Database(filename, { create: true, strict: true });
|
|
36
|
+
}
|
|
37
|
+
exec(sql) {
|
|
38
|
+
this.db.exec(sql);
|
|
39
|
+
}
|
|
40
|
+
prepare(sql) {
|
|
41
|
+
return {
|
|
42
|
+
run: (...params) => this.db.run(sql, normalizeBinding(params)),
|
|
43
|
+
get: (...params) => this.db.query(sql).get(normalizeBinding(params)),
|
|
44
|
+
all: (...params) => this.db.query(sql).all(normalizeBinding(params)),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
pragma(query, options) {
|
|
48
|
+
if (query.includes("=")) {
|
|
49
|
+
this.db.exec(`PRAGMA ${query}`);
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
const row = this.db.query(`PRAGMA ${query}`).get();
|
|
53
|
+
if (!options?.simple)
|
|
54
|
+
return row;
|
|
55
|
+
if (!row)
|
|
56
|
+
return undefined;
|
|
57
|
+
return Object.values(row)[0];
|
|
58
|
+
}
|
|
59
|
+
transaction(fn) {
|
|
60
|
+
return this.db.transaction(fn);
|
|
61
|
+
}
|
|
62
|
+
close() {
|
|
63
|
+
this.db.close();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function normalizeBinding(params) {
|
|
67
|
+
if (params.length === 0)
|
|
68
|
+
return undefined;
|
|
69
|
+
return params.length === 1 ? params[0] : params;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/storage/db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { getDatabasePath } from "./db";
|
|
2
|
+
export { SessionStore } from "./sessions";
|
|
3
|
+
export { appendMessages, appendSystemMessage, buildChatEntries, loadTranscript } from "./transcript";
|
|
4
|
+
export { getSessionTotalTokens, listSessionUsage, recordUsageEvent, type TokenUsageLike } from "./usage";
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { getDatabasePath } from "./db";
|
|
2
|
+
export { SessionStore } from "./sessions";
|
|
3
|
+
export { appendMessages, appendSystemMessage, buildChatEntries, loadTranscript } from "./transcript";
|
|
4
|
+
export { getSessionTotalTokens, listSessionUsage, recordUsageEvent } from "./usage";
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACrG,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,gBAAgB,EAAuB,MAAM,SAAS,CAAC"}
|