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.
- package/.grok/generated-media/image-2026-03-26T16-38-08-388Z.jpg +0 -0
- package/.grok/generated-media/video-2026-03-26T16-39-19-329Z.mp4 +0 -0
- package/.grok/settings.json +1 -1
- package/dist/imessage/bridge.d.ts +41 -0
- package/dist/imessage/bridge.js +291 -0
- package/dist/imessage/bridge.js.map +1 -0
- package/dist/imessage/client.d.ts +64 -0
- package/dist/imessage/client.js +98 -0
- package/dist/imessage/client.js.map +1 -0
- package/dist/imessage/headless-bridge-paths.d.ts +9 -0
- package/dist/imessage/headless-bridge-paths.js +8 -0
- package/dist/imessage/headless-bridge-paths.js.map +1 -0
- package/dist/imessage/headless-bridge.d.ts +15 -0
- package/dist/imessage/headless-bridge.js +197 -0
- package/dist/imessage/headless-bridge.js.map +1 -0
- package/dist/imessage/index.d.ts +5 -0
- package/dist/imessage/index.js +6 -0
- package/dist/imessage/index.js.map +1 -0
- package/dist/imessage/limits.d.ts +7 -0
- package/dist/imessage/limits.js +16 -0
- package/dist/imessage/limits.js.map +1 -0
- package/dist/imessage/pairing.d.ts +9 -0
- package/dist/imessage/pairing.js +29 -0
- package/dist/imessage/pairing.js.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/ui/app.d.ts +1 -0
- package/dist/ui/app.js +59 -2
- package/dist/ui/app.js.map +1 -1
- package/dist/ui/schedule-modal.js +2 -2
- package/dist/ui/schedule-modal.js.map +1 -1
- package/dist/utils/update-checker.d.ts +11 -0
- package/dist/utils/update-checker.js +46 -0
- package/dist/utils/update-checker.js.map +1 -0
- package/dist/utils/update-checker.test.d.ts +1 -0
- package/dist/utils/update-checker.test.js.map +1 -0
- 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
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:
|
|
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(() => {
|