grok-dev 1.0.0-rc7 → 1.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.
Files changed (37) hide show
  1. package/.grok/generated-media/image-2026-03-26T16-38-08-388Z.jpg +0 -0
  2. package/.grok/generated-media/video-2026-03-26T16-39-19-329Z.mp4 +0 -0
  3. package/.grok/settings.json +1 -1
  4. package/dist/imessage/bridge.d.ts +41 -0
  5. package/dist/imessage/bridge.js +291 -0
  6. package/dist/imessage/bridge.js.map +1 -0
  7. package/dist/imessage/client.d.ts +64 -0
  8. package/dist/imessage/client.js +98 -0
  9. package/dist/imessage/client.js.map +1 -0
  10. package/dist/imessage/headless-bridge-paths.d.ts +9 -0
  11. package/dist/imessage/headless-bridge-paths.js +8 -0
  12. package/dist/imessage/headless-bridge-paths.js.map +1 -0
  13. package/dist/imessage/headless-bridge.d.ts +15 -0
  14. package/dist/imessage/headless-bridge.js +197 -0
  15. package/dist/imessage/headless-bridge.js.map +1 -0
  16. package/dist/imessage/index.d.ts +5 -0
  17. package/dist/imessage/index.js +6 -0
  18. package/dist/imessage/index.js.map +1 -0
  19. package/dist/imessage/limits.d.ts +7 -0
  20. package/dist/imessage/limits.js +16 -0
  21. package/dist/imessage/limits.js.map +1 -0
  22. package/dist/imessage/pairing.d.ts +9 -0
  23. package/dist/imessage/pairing.js +29 -0
  24. package/dist/imessage/pairing.js.map +1 -0
  25. package/dist/index.js +9 -0
  26. package/dist/index.js.map +1 -1
  27. package/dist/ui/app.d.ts +1 -0
  28. package/dist/ui/app.js +59 -2
  29. package/dist/ui/app.js.map +1 -1
  30. package/dist/ui/schedule-modal.js +2 -2
  31. package/dist/ui/schedule-modal.js.map +1 -1
  32. package/dist/utils/update-checker.d.ts +11 -0
  33. package/dist/utils/update-checker.js +46 -0
  34. package/dist/utils/update-checker.js.map +1 -0
  35. package/dist/utils/update-checker.test.d.ts +1 -0
  36. package/dist/utils/update-checker.test.js.map +1 -0
  37. package/package.json +3 -1
@@ -0,0 +1,197 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import process from "node:process";
4
+ import { Agent } from "../agent/agent.js";
5
+ import { getApiKey, getBaseURL, getCurrentModel, getCurrentSandboxMode, getCurrentSandboxSettings, getIMessagePassword, getIMessageServerUrl, loadUserSettings, saveApprovedIMessageSender, saveUserSettings, } from "../utils/settings.js";
6
+ import { createTurnCoordinator } from "../telegram/turn-coordinator.js";
7
+ import { createIMessageBridge } from "./bridge.js";
8
+ import { resolveIMessageHeadlessBridgePaths, } from "./headless-bridge-paths.js";
9
+ import { approveIMessagePairingCode } from "./pairing.js";
10
+ import { BlueBubblesClient } from "./client.js";
11
+ function ensureParentDir(filePath) {
12
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
13
+ }
14
+ function appendLog(logFile, message) {
15
+ ensureParentDir(logFile);
16
+ fs.appendFileSync(logFile, `[${new Date().toISOString()}] ${message}\n`);
17
+ }
18
+ function truncate(text, limit = 160) {
19
+ return text.length <= limit ? text : `${text.slice(0, limit - 3)}...`;
20
+ }
21
+ function ensurePairCodeFile(pairCodeFile) {
22
+ ensureParentDir(pairCodeFile);
23
+ if (!fs.existsSync(pairCodeFile)) {
24
+ fs.writeFileSync(pairCodeFile, "", "utf8");
25
+ }
26
+ }
27
+ function buildIMessageAgentFactory(startupConfig) {
28
+ const agents = new Map();
29
+ return (sender) => {
30
+ const key = sender.trim().toLowerCase();
31
+ const existing = agents.get(key);
32
+ if (existing) {
33
+ return existing;
34
+ }
35
+ const settings = loadUserSettings();
36
+ const sessionId = settings.imessage?.sessionsBySender?.[key];
37
+ const agent = new Agent(startupConfig.apiKey, startupConfig.baseURL, startupConfig.model, startupConfig.maxToolRounds, { session: sessionId, sandboxMode: startupConfig.sandboxMode, sandboxSettings: startupConfig.sandboxSettings });
38
+ const nextSessionId = agent.getSessionId();
39
+ if (!sessionId && nextSessionId) {
40
+ saveUserSettings({
41
+ imessage: {
42
+ ...settings.imessage,
43
+ sessionsBySender: {
44
+ ...settings.imessage?.sessionsBySender,
45
+ [key]: nextSessionId,
46
+ },
47
+ },
48
+ });
49
+ }
50
+ agents.set(key, agent);
51
+ return agent;
52
+ };
53
+ }
54
+ export async function runIMessageHeadlessBridge(options = {}) {
55
+ const serverUrl = options.serverUrl ?? getIMessageServerUrl();
56
+ if (!serverUrl) {
57
+ throw new Error("Missing BlueBubbles server URL. Set BLUEBUBBLES_SERVER_URL, use --server-url, or save to ~/.grok/user-settings.json.");
58
+ }
59
+ const password = options.password ?? getIMessagePassword();
60
+ if (!password) {
61
+ throw new Error("Missing BlueBubbles API password. Set BLUEBUBBLES_PASSWORD, use --password, or save to ~/.grok/user-settings.json.");
62
+ }
63
+ const apiKey = options.apiKey ?? getApiKey();
64
+ if (!apiKey) {
65
+ throw new Error("Missing Grok API key.");
66
+ }
67
+ const startupConfig = {
68
+ apiKey,
69
+ baseURL: options.baseURL ?? getBaseURL(),
70
+ model: options.model ?? getCurrentModel(),
71
+ sandboxMode: options.sandboxMode ?? getCurrentSandboxMode(),
72
+ sandboxSettings: options.sandboxSettings ?? getCurrentSandboxSettings(),
73
+ maxToolRounds: options.maxToolRounds ?? 400,
74
+ };
75
+ const pathOptions = {
76
+ logFile: options.logFile,
77
+ pairCodeFile: options.pairCodeFile,
78
+ };
79
+ const paths = resolveIMessageHeadlessBridgePaths(process.cwd(), pathOptions);
80
+ ensurePairCodeFile(paths.pairCodeFile);
81
+ const coordinator = createTurnCoordinator();
82
+ const getIMessageAgent = buildIMessageAgentFactory(startupConfig);
83
+ const bridge = createIMessageBridge({
84
+ serverUrl,
85
+ password,
86
+ pollingIntervalMs: options.pollingIntervalMs,
87
+ getApprovedSenders: () => loadUserSettings().imessage?.allowedSenders ?? [],
88
+ coordinator,
89
+ getIMessageAgent,
90
+ onUserMessage: (event) => {
91
+ appendLog(paths.logFile, `user ${event.sender}: ${truncate(event.content)}`);
92
+ },
93
+ onAssistantMessage: (event) => {
94
+ if (event.done) {
95
+ appendLog(paths.logFile, `assistant ${event.sender}: ${truncate(event.content)}`);
96
+ }
97
+ },
98
+ onToolCalls: (event) => {
99
+ const names = event.toolCalls.map((toolCall) => toolCall.function.name).join(", ");
100
+ appendLog(paths.logFile, `tools ${event.sender}: ${names}`);
101
+ },
102
+ onToolResult: (event) => {
103
+ appendLog(paths.logFile, `tool_result ${event.sender}: ${event.toolCall.function.name}`);
104
+ },
105
+ onError: (message) => {
106
+ appendLog(paths.logFile, `bridge_error: ${message}`);
107
+ },
108
+ });
109
+ let lastPairInput = "";
110
+ let pairWatcher;
111
+ let bridgeStarted = false;
112
+ let stopping = false;
113
+ let resolveShutdown;
114
+ const shutdownComplete = new Promise((resolve) => {
115
+ resolveShutdown = resolve;
116
+ });
117
+ const startupAbortController = new AbortController();
118
+ const stopPairWatcher = () => {
119
+ if (pairWatcher) {
120
+ clearInterval(pairWatcher);
121
+ pairWatcher = undefined;
122
+ }
123
+ };
124
+ const stop = async (signal) => {
125
+ if (stopping)
126
+ return;
127
+ stopping = true;
128
+ startupAbortController.abort();
129
+ stopPairWatcher();
130
+ process.off("SIGINT", onSigInt);
131
+ process.off("SIGTERM", onSigTerm);
132
+ appendLog(paths.logFile, `shutdown: ${signal}`);
133
+ if (bridgeStarted) {
134
+ await bridge.stop().catch((error) => {
135
+ appendLog(paths.logFile, `shutdown_error: ${error instanceof Error ? error.message : String(error)}`);
136
+ });
137
+ }
138
+ resolveShutdown?.();
139
+ };
140
+ const onSigInt = () => {
141
+ void stop("SIGINT");
142
+ };
143
+ const onSigTerm = () => {
144
+ void stop("SIGTERM");
145
+ };
146
+ process.on("SIGINT", onSigInt);
147
+ process.on("SIGTERM", onSigTerm);
148
+ try {
149
+ const bbClient = new BlueBubblesClient({ serverUrl, password });
150
+ await bbClient.ping(startupAbortController.signal);
151
+ if (stopping) {
152
+ await shutdownComplete;
153
+ return;
154
+ }
155
+ appendLog(paths.logFile, `bluebubbles_ready server=${serverUrl}`);
156
+ appendLog(paths.logFile, `approved_senders=${(loadUserSettings().imessage?.allowedSenders ?? []).length}`);
157
+ appendLog(paths.logFile, "imessage_bridge_starting");
158
+ bridge.start();
159
+ bridgeStarted = true;
160
+ appendLog(paths.logFile, "imessage_bridge_started");
161
+ pairWatcher = setInterval(() => {
162
+ try {
163
+ const code = fs.readFileSync(paths.pairCodeFile, "utf8").trim().toUpperCase();
164
+ if (!code || code === lastPairInput)
165
+ return;
166
+ lastPairInput = code;
167
+ const result = approveIMessagePairingCode(code);
168
+ if (result.ok) {
169
+ saveApprovedIMessageSender(result.sender);
170
+ fs.writeFileSync(paths.pairCodeFile, "", "utf8");
171
+ appendLog(paths.logFile, `pair_approved sender=${result.sender} code=${code.slice(0, 2)}****`);
172
+ return;
173
+ }
174
+ appendLog(paths.logFile, `pair_rejected: ${result.error}`);
175
+ }
176
+ catch (error) {
177
+ appendLog(paths.logFile, `pair_watcher_error: ${error instanceof Error ? error.message : String(error)}`);
178
+ }
179
+ }, 1000);
180
+ await shutdownComplete;
181
+ }
182
+ catch (error) {
183
+ if (!stopping) {
184
+ stopPairWatcher();
185
+ process.off("SIGINT", onSigInt);
186
+ process.off("SIGTERM", onSigTerm);
187
+ if (bridgeStarted) {
188
+ await bridge.stop().catch((stopError) => {
189
+ appendLog(paths.logFile, `shutdown_error: ${stopError instanceof Error ? stopError.message : String(stopError)}`);
190
+ });
191
+ }
192
+ throw error;
193
+ }
194
+ await shutdownComplete;
195
+ }
196
+ }
197
+ //# sourceMappingURL=headless-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headless-bridge.js","sourceRoot":"","sources":["../../src/imessage/headless-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { createIMessageBridge, splitIMessage } from "./bridge.js";
2
+ export { runIMessageHeadlessBridge } from "./headless-bridge.js";
3
+ export { resolveIMessageHeadlessBridgePaths } from "./headless-bridge-paths.js";
4
+ export { approveIMessagePairingCode, clearIMessagePairingStore, registerIMessagePairingCode } from "./pairing.js";
5
+ export { BlueBubblesClient } from "./client.js";
@@ -0,0 +1,6 @@
1
+ export { createIMessageBridge, splitIMessage } from "./bridge.js";
2
+ export { runIMessageHeadlessBridge } from "./headless-bridge.js";
3
+ export { resolveIMessageHeadlessBridgePaths } from "./headless-bridge-paths.js";
4
+ export { approveIMessagePairingCode, clearIMessagePairingStore, registerIMessagePairingCode } from "./pairing.js";
5
+ export { BlueBubblesClient } from "./client.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/imessage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,kCAAkC,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAClH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Soft split limit for iMessage responses.
3
+ * iMessage has no strict character limit like Telegram (4096), but very long
4
+ * messages degrade readability on mobile. Split at ~4000 chars for comfort.
5
+ */
6
+ export declare const IMESSAGE_MAX_MESSAGE = 4000;
7
+ export declare function splitIMessage(text: string): string[];
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Soft split limit for iMessage responses.
3
+ * iMessage has no strict character limit like Telegram (4096), but very long
4
+ * messages degrade readability on mobile. Split at ~4000 chars for comfort.
5
+ */
6
+ export const IMESSAGE_MAX_MESSAGE = 4000;
7
+ export function splitIMessage(text) {
8
+ if (!text)
9
+ return [];
10
+ const parts = [];
11
+ for (let i = 0; i < text.length; i += IMESSAGE_MAX_MESSAGE) {
12
+ parts.push(text.slice(i, i + IMESSAGE_MAX_MESSAGE));
13
+ }
14
+ return parts;
15
+ }
16
+ //# sourceMappingURL=limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limits.js","sourceRoot":"","sources":["../../src/imessage/limits.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAEzC,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,oBAAoB,EAAE,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare function registerIMessagePairingCode(sender: string): string;
2
+ export declare function approveIMessagePairingCode(code: string): {
3
+ ok: true;
4
+ sender: string;
5
+ } | {
6
+ ok: false;
7
+ error: string;
8
+ };
9
+ export declare function clearIMessagePairingStore(): void;
@@ -0,0 +1,29 @@
1
+ import { randomBytes } from "node:crypto";
2
+ const PAIRING_TTL_MS = 60 * 60 * 1000;
3
+ /** code (uppercase) -> { sender, expiresAt } */
4
+ const pendingByCode = new Map();
5
+ function generateCode() {
6
+ return randomBytes(4).toString("hex").slice(0, 6).toUpperCase();
7
+ }
8
+ export function registerIMessagePairingCode(sender) {
9
+ const code = generateCode();
10
+ pendingByCode.set(code, { sender, expiresAt: Date.now() + PAIRING_TTL_MS });
11
+ return code;
12
+ }
13
+ export function approveIMessagePairingCode(code) {
14
+ const normalized = code.trim().toUpperCase();
15
+ const entry = pendingByCode.get(normalized);
16
+ if (!entry) {
17
+ return { ok: false, error: "Unknown or expired code." };
18
+ }
19
+ if (Date.now() > entry.expiresAt) {
20
+ pendingByCode.delete(normalized);
21
+ return { ok: false, error: "Code expired. Text 'pair' again from iMessage." };
22
+ }
23
+ pendingByCode.delete(normalized);
24
+ return { ok: true, sender: entry.sender };
25
+ }
26
+ export function clearIMessagePairingStore() {
27
+ pendingByCode.clear();
28
+ }
29
+ //# sourceMappingURL=pairing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pairing.js","sourceRoot":"","sources":["../../src/imessage/pairing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEtC,gDAAgD;AAChD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAiD,CAAC;AAE/E,SAAS,YAAY;IACnB,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAAc;IACxD,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,EAAE,CAAC,CAAC;IAC5E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,IAAY;IAEZ,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7C,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC;IAC1D,CAAC;IACD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QACjC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACjC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gDAAgD,EAAE,CAAC;IAChF,CAAC;IACD,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACjC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,aAAa,CAAC,KAAK,EAAE,CAAC;AACxB,CAAC"}
package/dist/index.js CHANGED
@@ -9,6 +9,7 @@ import { createHeadlessJsonlEmitter, isHeadlessOutputFormat, renderHeadlessChunk
9
9
  import { runTelegramHeadlessBridge } from "./telegram/headless-bridge";
10
10
  import { startScheduleDaemon } from "./tools/schedule";
11
11
  import { getApiKey, getBaseURL, getCurrentModel, getCurrentSandboxMode, getCurrentSandboxSettings, mergeSandboxSettings, saveUserSettings, } from "./utils/settings";
12
+ import { runUpdate } from "./utils/update-checker";
12
13
  dotenv.config();
13
14
  const exitCleanlyOnSigterm = () => {
14
15
  process.exit(0);
@@ -49,6 +50,7 @@ async function startInteractive(apiKey, baseURL, model, maxToolRounds, sandboxMo
49
50
  maxToolRounds,
50
51
  sandboxMode,
51
52
  sandboxSettings,
53
+ version: packageJson.version,
52
54
  },
53
55
  initialMessage,
54
56
  onExit,
@@ -210,7 +212,14 @@ program
210
212
  .option("-s, --session <id>", "Continue a saved session by id, or use 'latest'")
211
213
  .option("--background-task-file <path>", "Run a persisted background delegation")
212
214
  .option("--max-tool-rounds <n>", "Max tool execution rounds", "400")
215
+ .option("--update", "Update grok to the latest version and exit")
213
216
  .action(async (message, options) => {
217
+ if (options.update) {
218
+ console.log("Checking for updates...");
219
+ const result = await runUpdate();
220
+ console.log(result.output);
221
+ process.exit(result.success ? 0 : 1);
222
+ }
214
223
  changeDirectoryOrExit(options.directory);
215
224
  if (options.backgroundTaskFile) {
216
225
  await runBackgroundDelegation(options.backgroundTaskFile, options);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/ui/app.d.ts CHANGED
@@ -7,6 +7,7 @@ export interface AppStartupConfig {
7
7
  sandboxMode: SandboxMode;
8
8
  sandboxSettings: SandboxSettings;
9
9
  maxToolRounds: number;
10
+ version: string;
10
11
  }
11
12
  interface AppProps {
12
13
  agent: Agent;
package/dist/ui/app.js CHANGED
@@ -15,6 +15,7 @@ import { MODES } from "../types/index";
15
15
  import { copyTextToHostClipboard } from "../utils/host-clipboard";
16
16
  import { getApiKey, getTelegramBotToken, isReservedSubagentName, loadMcpServers, loadUserSettings, loadValidSubAgents, saveApprovedTelegramUserId, saveMcpServers, saveProjectSettings, saveUserSettings, } from "../utils/settings";
17
17
  import { discoverSkills, formatSkillsForChat } from "../utils/skills";
18
+ import { checkForUpdate, runUpdate } from "../utils/update-checker";
18
19
  import { buildSubagentBrowseRows, SUBAGENT_EDITOR_FIELDS, SubagentEditorModal, SubagentsBrowserModal, } from "./agents-modal";
19
20
  import { Markdown } from "./markdown";
20
21
  import { buildMcpBrowseRows, McpBrowserModal, McpEditorModal } from "./mcp-modal";
@@ -190,6 +191,7 @@ const SLASH_MENU_ITEMS = [
190
191
  { id: "commit-pr", label: "commit & pr", description: "Commit and open PR" },
191
192
  { id: "review", label: "review", description: "Review recent changes" },
192
193
  { id: "skills", label: "skills", description: "Manage skills" },
194
+ { id: "update", label: "update", description: "Update grok to the latest version" },
193
195
  ];
194
196
  const REVIEW_PROMPT = `Review all current changes in this repository. Follow these steps:
195
197
 
@@ -483,6 +485,11 @@ export function App({ agent, startupConfig, initialMessage, onExit }) {
483
485
  const [scheduleSearchQuery, setScheduleSearchQuery] = useState("");
484
486
  const [scheduleModalIndex, setScheduleModalIndex] = useState(0);
485
487
  const showScheduleModalRef = useRef(false);
488
+ const [updateInfo, setUpdateInfo] = useState(null);
489
+ const [showUpdateModal, setShowUpdateModal] = useState(false);
490
+ const [isUpdating, setIsUpdating] = useState(false);
491
+ const [updateOutput, setUpdateOutput] = useState(null);
492
+ const showUpdateModalRef = useRef(false);
486
493
  const setMode = useCallback((m) => {
487
494
  if (m === "agent" && mode === "plan" && activePlan) {
488
495
  const planText = [
@@ -1308,6 +1315,21 @@ export function App({ agent, startupConfig, initialMessage, onExit }) {
1308
1315
  useEffect(() => {
1309
1316
  showScheduleModalRef.current = showScheduleModal;
1310
1317
  }, [showScheduleModal]);
1318
+ useEffect(() => {
1319
+ showUpdateModalRef.current = showUpdateModal;
1320
+ }, [showUpdateModal]);
1321
+ useEffect(() => {
1322
+ let cancelled = false;
1323
+ checkForUpdate(startupConfig.version).then((result) => {
1324
+ if (cancelled || !result?.hasUpdate)
1325
+ return;
1326
+ setUpdateInfo(result);
1327
+ setShowUpdateModal(true);
1328
+ });
1329
+ return () => {
1330
+ cancelled = true;
1331
+ };
1332
+ }, [startupConfig.version]);
1311
1333
  useEffect(() => {
1312
1334
  return () => {
1313
1335
  void bridgeRef.current?.stop();
@@ -1724,6 +1746,16 @@ export function App({ agent, startupConfig, initialMessage, onExit }) {
1724
1746
  case "commit-pr":
1725
1747
  processMessage(COMMIT_PR_PROMPT);
1726
1748
  break;
1749
+ case "update":
1750
+ setIsUpdating(true);
1751
+ setUpdateOutput(null);
1752
+ runUpdate().then((result) => {
1753
+ setIsUpdating(false);
1754
+ setUpdateOutput(result.success
1755
+ ? "Update complete! Restart the CLI to use the new version."
1756
+ : `Update failed: ${result.output}`);
1757
+ });
1758
+ break;
1727
1759
  }
1728
1760
  }, [
1729
1761
  agent,
@@ -1742,7 +1774,8 @@ export function App({ agent, startupConfig, initialMessage, onExit }) {
1742
1774
  showSandboxPicker ||
1743
1775
  showScheduleModal ||
1744
1776
  showAgentsModal ||
1745
- showAgentsEditor;
1777
+ showAgentsEditor ||
1778
+ showUpdateModal;
1746
1779
  const showPlanPanel = !!activePlan?.questions?.length;
1747
1780
  const planQuestions = activePlan?.questions ?? [];
1748
1781
  const isSinglePlan = planQuestions.length === 1 && planQuestions[0]?.type !== "multiselect";
@@ -1921,6 +1954,22 @@ export function App({ agent, startupConfig, initialMessage, onExit }) {
1921
1954
  }
1922
1955
  return;
1923
1956
  }
1957
+ if (showUpdateModalRef.current) {
1958
+ if (isEscapeKey(key)) {
1959
+ setShowUpdateModal(false);
1960
+ return;
1961
+ }
1962
+ if (key.name === "return") {
1963
+ setIsUpdating(true);
1964
+ setShowUpdateModal(false);
1965
+ runUpdate().then((result) => {
1966
+ setIsUpdating(false);
1967
+ setUpdateOutput(result.success ? "Update complete! Restart the CLI to use the new version." : result.output);
1968
+ });
1969
+ return;
1970
+ }
1971
+ return;
1972
+ }
1924
1973
  if (showMcpEditorRef.current) {
1925
1974
  if (isEscapeKey(key)) {
1926
1975
  setShowMcpEditor(false);
@@ -2513,7 +2562,7 @@ export function App({ agent, startupConfig, initialMessage, onExit }) {
2513
2562
  // biome-ignore lint/suspicious/noArrayIndexKey: append-only message list without stable IDs
2514
2563
  _jsx(MessageView, { entry: msg, index: i, t: t, modeColor: modeInfo.color }, i))), liveTurnSourceLabel && (activeToolCalls.length > 0 || streamContent || isProcessing) && (_jsx("box", { paddingLeft: 3, marginTop: 1, flexShrink: 0, children: _jsx("text", { fg: t.textMuted, children: liveTurnSourceLabel }) })), activeToolCalls.map((tc) => tc.function.name === "task" ? (_jsx(SubagentTaskLine, { t: t, agent: tryParseArg(tc, "agent") || "sub-agent", label: toolArgs(tc) || "Working", pending: true }, tc.id)) : tc.function.name === "delegate" ? (_jsx(DelegationTaskLine, { t: t, label: toolArgs(tc) || "Background research", pending: true, id: undefined }, tc.id)) : (_jsx(InlineTool, { t: t, pending: true, children: toolLabel(tc) }, tc.id))), activeSubagent && _jsx(SubagentActivity, { t: t, status: activeSubagent }), streamContent && (_jsx("box", { paddingLeft: 3, marginTop: 1, flexShrink: 0, children: _jsx(Markdown, { content: streamContent, t: t }) })), isProcessing && !streamContent && activeToolCalls.length === 0 && (_jsx(ShimmerText, { t: t, text: "Planning next moves" })), showPlanPanel && _jsx(PlanQuestionsPanel, { t: t, questions: planQuestions, state: pqs })] }), _jsx("box", { flexShrink: 0, children: _jsx(PromptBox, { t: t, inputRef: inputRef, isProcessing: isProcessing, showModelPicker: showModelPicker, showSandboxPicker: showSandboxPicker, showSlashMenu: showSlashMenu, showPlanQuestions: showPlanPanel, showApiKeyModal: showApiKeyModal, blockPrompt: blockPrompt, onSubmit: handleSubmit, onPaste: handlePaste, pasteBlocks: pasteBlocks, modeInfo: modeInfo, model: model, modelInfo: modelInfo, contextStats: contextStats, queuedCount: queuedMessages.length, queuedMessages: queuedMessages }) })] }), _jsxs("box", { paddingLeft: 2, paddingRight: 2, paddingBottom: 1, flexDirection: "row", flexShrink: 0, children: [_jsx("text", { fg: t.textDim, children: agent.getCwd().replace(os.homedir(), "~") }), sandboxMode === "shuru" ? _jsx("text", { fg: "#f97316", children: " · sandbox" }) : null, _jsx("box", { flexGrow: 1 })] })] })) : (
2515
2564
  /* ── Home ───────────────────────────────────────── */
2516
- _jsxs(_Fragment, { children: [_jsxs("box", { flexGrow: 1, alignItems: "center", paddingLeft: 2, paddingRight: 2, children: [_jsx("box", { flexGrow: 1, minHeight: 0 }), _jsx("box", { flexShrink: 0, alignItems: "center", children: _jsx(HeroLogo, { t: t }) }), _jsx("box", { height: 1, minHeight: 0, flexShrink: 1 }), _jsx("box", { width: "100%", maxWidth: 75, flexShrink: 0, children: _jsx(PromptBox, { t: t, inputRef: inputRef, isProcessing: isProcessing, showModelPicker: showModelPicker, showSandboxPicker: showSandboxPicker, showSlashMenu: showSlashMenu, showPlanQuestions: showPlanPanel, showApiKeyModal: showApiKeyModal, blockPrompt: blockPrompt, onSubmit: handleSubmit, onPaste: handlePaste, pasteBlocks: pasteBlocks, modeInfo: modeInfo, model: model, modelInfo: modelInfo, contextStats: contextStats, placeholder: "What are we building?" }) }), _jsx("box", { height: 2, minHeight: 0, flexShrink: 1 }), _jsx("box", { flexGrow: 1, minHeight: 0 })] }), _jsxs("box", { paddingLeft: 2, paddingRight: 2, paddingBottom: 1, flexDirection: "row", flexShrink: 0, children: [_jsx("text", { fg: t.textDim, children: agent.getCwd().replace(os.homedir(), "~") }), sandboxMode === "shuru" ? _jsx("text", { fg: "#f97316", children: " · sandbox" }) : null, _jsx("box", { flexGrow: 1 }), _jsx("text", { fg: t.textDim, children: "v1.0.0" })] })] })), showApiKeyModal && (_jsx(ApiKeyModal, { t: t, width: width, height: height, inputRef: apiKeyInputRef, error: apiKeyError, onSubmit: submitApiKey })), showSlashMenu && (_jsx(SlashMenuModal, { t: t, selectedIndex: slashMenuIndex, width: width, height: height, searchQuery: slashSearchQuery, filteredItems: filteredSlashItems })), showMcpModal && !showMcpEditor && (_jsx(McpBrowserModal, { t: t, width: width, height: height, selectedIndex: mcpModalIndex, searchQuery: mcpSearchQuery, rows: mcpRows })), showMcpEditor && (_jsx(McpEditorModal, { t: t, width: width, height: height, draft: mcpEditorDraft, focusedField: mcpEditorField, syncKey: mcpEditorSyncKey, error: mcpEditorError, title: editingMcpId ? "Edit MCP Server" : "Add MCP Server", labelRef: mcpLabelRef, urlRef: mcpUrlRef, headersRef: mcpHeadersRef, commandRef: mcpCommandRef, argsRef: mcpArgsRef, cwdRef: mcpCwdRef, envRef: mcpEnvRef, onSubmit: submitMcpEditor })), showScheduleModal && (_jsx(ScheduleBrowserModal, { t: t, width: width, height: height, selectedIndex: scheduleModalIndex, searchQuery: scheduleSearchQuery, rows: scheduleRows })), showAgentsModal && !showAgentsEditor && (_jsx(SubagentsBrowserModal, { t: t, width: width, height: height, selectedIndex: agentsModalIndex, searchQuery: agentsSearchQuery, rows: agentRows })), showAgentsEditor && (_jsx(SubagentEditorModal, { t: t, width: width, height: height, draft: agentsEditorDraft, focusedField: agentsEditorField, modelIndex: agentsEditorModelIndex, error: agentsEditorError, title: editingSubagent ? `Edit sub-agent: ${editingSubagent.name}` : "Add sub-agent", nameRef: subagentNameRef, instructionRef: subagentInstructionRef, onSubmit: submitSubagentEditor, showRemoveHint: !!editingSubagent }, `subagent-editor-${agentsEditorSyncKey}`)), showModelPicker && (_jsx(ModelPickerModal, { t: t, currentModel: model, selectedIndex: modelPickerIndex, width: width, height: height, searchQuery: modelSearchQuery, filteredModels: filteredModels, reasoningEffortByModel: reasoningEffortByModel })), showSandboxPicker && (_jsx(SandboxPickerModal, { t: t, currentMode: sandboxMode, settings: sandboxSettings, focusIndex: sandboxSettingsFocusIndex, editing: sandboxSettingsEditing, editBuffer: sandboxSettingsEditBuffer, width: width, height: height })), showConnectModal && (_jsx(ConnectModal, { t: t, width: width, height: height, selectedIndex: connectModalIndex, channels: CONNECT_CHANNELS })), showTelegramTokenModal && (_jsx(TelegramTokenModal, { t: t, width: width, height: height, inputRef: telegramTokenInputRef, error: telegramTokenError, onSubmit: submitTelegramToken })), showTelegramPairModal && (_jsx(TelegramPairModal, { t: t, width: width, height: height, inputRef: telegramPairInputRef, error: telegramPairError, onSubmit: () => void submitTelegramPair() }))] }));
2565
+ _jsxs(_Fragment, { children: [_jsxs("box", { flexGrow: 1, alignItems: "center", paddingLeft: 2, paddingRight: 2, children: [_jsx("box", { flexGrow: 1, minHeight: 0 }), _jsx("box", { flexShrink: 0, alignItems: "center", children: _jsx(HeroLogo, { t: t }) }), _jsx("box", { height: 1, minHeight: 0, flexShrink: 1 }), _jsx("box", { width: "100%", maxWidth: 75, flexShrink: 0, children: _jsx(PromptBox, { t: t, inputRef: inputRef, isProcessing: isProcessing, showModelPicker: showModelPicker, showSandboxPicker: showSandboxPicker, showSlashMenu: showSlashMenu, showPlanQuestions: showPlanPanel, showApiKeyModal: showApiKeyModal, blockPrompt: blockPrompt, onSubmit: handleSubmit, onPaste: handlePaste, pasteBlocks: pasteBlocks, modeInfo: modeInfo, model: model, modelInfo: modelInfo, contextStats: contextStats, placeholder: "What are we building?" }) }), _jsx("box", { height: 2, minHeight: 0, flexShrink: 1 }), _jsx("box", { flexGrow: 1, minHeight: 0 })] }), updateInfo?.hasUpdate && (_jsx("box", { paddingLeft: 2, paddingRight: 2, flexDirection: "row", flexShrink: 0, children: _jsxs("text", { fg: "#f59e0b", children: ["┃ Update available: v", startupConfig.version, " → v", updateInfo.latestVersion, " — run /update to install"] }) })), isUpdating && (_jsx("box", { paddingLeft: 2, paddingRight: 2, flexDirection: "row", flexShrink: 0, children: _jsx("text", { fg: "#f59e0b", children: "┃ Updating..." }) })), updateOutput && !isUpdating && (_jsx("box", { paddingLeft: 2, paddingRight: 2, flexDirection: "row", flexShrink: 0, children: _jsxs("text", { fg: updateOutput.startsWith("Update complete") ? "#22c55e" : "#ef4444", children: ["┃ ", updateOutput] }) })), _jsxs("box", { paddingLeft: 2, paddingRight: 2, paddingBottom: 1, flexDirection: "row", flexShrink: 0, children: [_jsx("text", { fg: t.textDim, children: agent.getCwd().replace(os.homedir(), "~") }), sandboxMode === "shuru" ? _jsx("text", { fg: "#f97316", children: " · sandbox" }) : null, _jsx("box", { flexGrow: 1 }), _jsx("text", { fg: t.textDim, children: `v${startupConfig.version}` })] })] })), showApiKeyModal && (_jsx(ApiKeyModal, { t: t, width: width, height: height, inputRef: apiKeyInputRef, error: apiKeyError, onSubmit: submitApiKey })), showUpdateModal && updateInfo && (_jsx(UpdateModal, { t: t, width: width, height: height, currentVersion: startupConfig.version, latestVersion: updateInfo.latestVersion })), showSlashMenu && (_jsx(SlashMenuModal, { t: t, selectedIndex: slashMenuIndex, width: width, height: height, searchQuery: slashSearchQuery, filteredItems: filteredSlashItems })), showMcpModal && !showMcpEditor && (_jsx(McpBrowserModal, { t: t, width: width, height: height, selectedIndex: mcpModalIndex, searchQuery: mcpSearchQuery, rows: mcpRows })), showMcpEditor && (_jsx(McpEditorModal, { t: t, width: width, height: height, draft: mcpEditorDraft, focusedField: mcpEditorField, syncKey: mcpEditorSyncKey, error: mcpEditorError, title: editingMcpId ? "Edit MCP Server" : "Add MCP Server", labelRef: mcpLabelRef, urlRef: mcpUrlRef, headersRef: mcpHeadersRef, commandRef: mcpCommandRef, argsRef: mcpArgsRef, cwdRef: mcpCwdRef, envRef: mcpEnvRef, onSubmit: submitMcpEditor })), showScheduleModal && (_jsx(ScheduleBrowserModal, { t: t, width: width, height: height, selectedIndex: scheduleModalIndex, searchQuery: scheduleSearchQuery, rows: scheduleRows })), showAgentsModal && !showAgentsEditor && (_jsx(SubagentsBrowserModal, { t: t, width: width, height: height, selectedIndex: agentsModalIndex, searchQuery: agentsSearchQuery, rows: agentRows })), showAgentsEditor && (_jsx(SubagentEditorModal, { t: t, width: width, height: height, draft: agentsEditorDraft, focusedField: agentsEditorField, modelIndex: agentsEditorModelIndex, error: agentsEditorError, title: editingSubagent ? `Edit sub-agent: ${editingSubagent.name}` : "Add sub-agent", nameRef: subagentNameRef, instructionRef: subagentInstructionRef, onSubmit: submitSubagentEditor, showRemoveHint: !!editingSubagent }, `subagent-editor-${agentsEditorSyncKey}`)), showModelPicker && (_jsx(ModelPickerModal, { t: t, currentModel: model, selectedIndex: modelPickerIndex, width: width, height: height, searchQuery: modelSearchQuery, filteredModels: filteredModels, reasoningEffortByModel: reasoningEffortByModel })), showSandboxPicker && (_jsx(SandboxPickerModal, { t: t, currentMode: sandboxMode, settings: sandboxSettings, focusIndex: sandboxSettingsFocusIndex, editing: sandboxSettingsEditing, editBuffer: sandboxSettingsEditBuffer, width: width, height: height })), showConnectModal && (_jsx(ConnectModal, { t: t, width: width, height: height, selectedIndex: connectModalIndex, channels: CONNECT_CHANNELS })), showTelegramTokenModal && (_jsx(TelegramTokenModal, { t: t, width: width, height: height, inputRef: telegramTokenInputRef, error: telegramTokenError, onSubmit: submitTelegramToken })), showTelegramPairModal && (_jsx(TelegramPairModal, { t: t, width: width, height: height, inputRef: telegramPairInputRef, error: telegramPairError, onSubmit: () => void submitTelegramPair() }))] }));
2517
2566
  }
2518
2567
  /* ── Session Header ──────────────────────────────────────────── */
2519
2568
  function SessionHeader({ t, modeInfo, sessionTitle, sessionId, }) {
@@ -2838,6 +2887,14 @@ function MediaToolResultView({ t, label, toolResult }) {
2838
2887
  function bottomAlignedModalTop(height, panelHeight) {
2839
2888
  return Math.max(2, Math.floor((height - panelHeight) / 2));
2840
2889
  }
2890
+ /* ── Update Modal ────────────────────────────────────────────── */
2891
+ function UpdateModal({ t, width, height, currentVersion, latestVersion, }) {
2892
+ const overlayBg = "#000000cc";
2893
+ const panelWidth = Math.min(60, width - 6);
2894
+ const panelHeight = 9;
2895
+ const top = bottomAlignedModalTop(height, panelHeight);
2896
+ return (_jsx("box", { position: "absolute", left: 0, top: 0, width: width, height: height, alignItems: "center", paddingTop: top, backgroundColor: overlayBg, children: _jsxs("box", { width: panelWidth, height: panelHeight, backgroundColor: t.backgroundPanel, paddingTop: 1, paddingBottom: 1, flexDirection: "column", children: [_jsxs("box", { flexShrink: 0, flexDirection: "row", justifyContent: "space-between", paddingLeft: 2, paddingRight: 2, children: [_jsx("text", { fg: "#f59e0b", children: _jsx("b", { children: "Update Available" }) }), _jsx("text", { fg: t.textMuted, children: "esc to dismiss" })] }), _jsx("box", { flexShrink: 0, paddingLeft: 2, paddingRight: 2, paddingTop: 1, children: _jsxs("text", { fg: t.text, children: ["A new version of grok is available: ", _jsxs("span", { style: { fg: t.textMuted }, children: ["v", currentVersion] }), " → ", _jsxs("span", { style: { fg: "#22c55e" }, children: ["v", latestVersion] })] }) }), _jsx("box", { flexShrink: 0, paddingLeft: 2, paddingRight: 2, paddingTop: 1, children: _jsx("text", { fg: t.textMuted, children: "Press enter to update now, or esc to dismiss" }) })] }) }));
2897
+ }
2841
2898
  function SlashMenuModal({ t, selectedIndex, width, height, searchQuery, filteredItems, }) {
2842
2899
  const listRef = useRef(null);
2843
2900
  useEffect(() => {