Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/codex-new-first-message.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"grok-bot-cli": patch
---

`gbot codex new --cwd DIR "message"` and `codex_new` with a first message work on Codex 0.160 daemons: a thread created by `thread/start` has no rollout until its first turn exists, so the follow-up `thread/resume` answered "no rollout found" and the first message was rejected as `unknown-thread`. The first send now treats the just-created thread as idle and starts its turn directly.
2 changes: 1 addition & 1 deletion artifact/agent-bundle.compile-evidence.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion artifact/agent-bundle.manifest.json

Large diffs are not rendered by default.

43 changes: 30 additions & 13 deletions artifact/bin/gbot-flight.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -26976,7 +26976,8 @@ var __webpack_modules__ = {
expectedCwd: resolvedCwd,
model,
effort,
signal
signal,
freshThreadCwd: resolvedCwd
});
}
const CODEX_VERSION_PROBE_TIMEOUT_MS = 3000;
Expand Down Expand Up @@ -27569,7 +27570,7 @@ var __webpack_modules__ = {
}
async function sendToCodexThread(threadId, text, { env = process.env, envelope = buildEnvelope({
env
}), whenBusy = "reject", session, expectedTurnId, expectedCwd, model, effort, signal } = {}) {
}), whenBusy = "reject", session, expectedTurnId, expectedCwd, model, effort, signal, freshThreadCwd } = {}) {
try {
const receipt = await sendToCodexThreadInner(threadId, text, {
env,
Expand All @@ -27580,7 +27581,8 @@ var __webpack_modules__ = {
expectedCwd,
model,
effort,
signal
signal,
freshThreadCwd
});
return (0, _codex_contract_js__rspack_import_7.Dz)(receipt);
} catch (err) {
Expand All @@ -27602,7 +27604,7 @@ var __webpack_modules__ = {
"xhigh"
].includes(effort)) throw new RangeError("--effort must be none, minimal, low, medium, high, or xhigh");
}
async function sendToCodexThreadInner(threadId, text, { env, envelope, whenBusy, session, expectedTurnId, expectedCwd, model, effort, signal }) {
async function sendToCodexThreadInner(threadId, text, { env, envelope, whenBusy, session, expectedTurnId, expectedCwd, model, effort, signal, freshThreadCwd }) {
validateModelEffort(model, effort);
if (![
"reject",
Expand Down Expand Up @@ -27661,15 +27663,30 @@ var __webpack_modules__ = {
});
} catch (err) {
assertNotCancelled();
if (err instanceof CodexSendError || err instanceof _codex_remote_control_js__rspack_import_8.Rg) throw err;
const explained = explainSendError(err, threadId, env);
if (explained instanceof _codex_remote_control_js__rspack_import_8.Rg) throw explained;
throw new CodexSendError(explained.message, {
delivery: err instanceof CodexRpcError ? "rejected" : err && err.delivery || "unknown",
reason: err instanceof CodexRpcError ? /no rollout found|thread not found/i.test(String(err.rpc && err.rpc.message)) ? "unknown-thread" : /active writer/i.test(String(err.rpc && err.rpc.message)) ? "external-owner" : "rejected" : "transport",
threadId,
...envelope
});
if (freshThreadCwd !== undefined && err instanceof CodexRpcError && /no rollout found/i.test(String(err.rpc && err.rpc.message))) {
resumed = {
thread: {
id: threadId,
status: {
type: "idle"
}
},
cwd: freshThreadCwd,
...model ? {
model
} : {}
};
} else {
if (err instanceof CodexSendError || err instanceof _codex_remote_control_js__rspack_import_8.Rg) throw err;
const explained = explainSendError(err, threadId, env);
if (explained instanceof _codex_remote_control_js__rspack_import_8.Rg) throw explained;
throw new CodexSendError(explained.message, {
delivery: err instanceof CodexRpcError ? "rejected" : err && err.delivery || "unknown",
reason: err instanceof CodexRpcError ? /no rollout found|thread not found/i.test(String(err.rpc && err.rpc.message)) ? "unknown-thread" : /active writer/i.test(String(err.rpc && err.rpc.message)) ? "external-owner" : "rejected" : "transport",
threadId,
...envelope
});
}
}
assertNotCancelled();
if (!isObject(resumed) || !isObject(resumed.thread) || typeof resumed.thread.id !== "string") {
Expand Down
43 changes: 30 additions & 13 deletions artifact/bin/gbot.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -45405,7 +45405,8 @@ var __webpack_modules__ = {
expectedCwd: resolvedCwd,
model,
effort,
signal
signal,
freshThreadCwd: resolvedCwd
});
}
const CODEX_VERSION_PROBE_TIMEOUT_MS = 3000;
Expand Down Expand Up @@ -45998,7 +45999,7 @@ var __webpack_modules__ = {
}
async function sendToCodexThread(threadId, text, { env = process.env, envelope = buildEnvelope({
env
}), whenBusy = "reject", session, expectedTurnId, expectedCwd, model, effort, signal } = {}) {
}), whenBusy = "reject", session, expectedTurnId, expectedCwd, model, effort, signal, freshThreadCwd } = {}) {
try {
const receipt = await sendToCodexThreadInner(threadId, text, {
env,
Expand All @@ -46009,7 +46010,8 @@ var __webpack_modules__ = {
expectedCwd,
model,
effort,
signal
signal,
freshThreadCwd
});
return (0, _codex_contract_js__rspack_import_7.Dz)(receipt);
} catch (err) {
Expand All @@ -46031,7 +46033,7 @@ var __webpack_modules__ = {
"xhigh"
].includes(effort)) throw new RangeError("--effort must be none, minimal, low, medium, high, or xhigh");
}
async function sendToCodexThreadInner(threadId, text, { env, envelope, whenBusy, session, expectedTurnId, expectedCwd, model, effort, signal }) {
async function sendToCodexThreadInner(threadId, text, { env, envelope, whenBusy, session, expectedTurnId, expectedCwd, model, effort, signal, freshThreadCwd }) {
validateModelEffort(model, effort);
if (![
"reject",
Expand Down Expand Up @@ -46090,15 +46092,30 @@ var __webpack_modules__ = {
});
} catch (err) {
assertNotCancelled();
if (err instanceof CodexSendError || err instanceof _codex_remote_control_js__rspack_import_8.Rg) throw err;
const explained = explainSendError(err, threadId, env);
if (explained instanceof _codex_remote_control_js__rspack_import_8.Rg) throw explained;
throw new CodexSendError(explained.message, {
delivery: err instanceof CodexRpcError ? "rejected" : err && err.delivery || "unknown",
reason: err instanceof CodexRpcError ? /no rollout found|thread not found/i.test(String(err.rpc && err.rpc.message)) ? "unknown-thread" : /active writer/i.test(String(err.rpc && err.rpc.message)) ? "external-owner" : "rejected" : "transport",
threadId,
...envelope
});
if (freshThreadCwd !== undefined && err instanceof CodexRpcError && /no rollout found/i.test(String(err.rpc && err.rpc.message))) {
resumed = {
thread: {
id: threadId,
status: {
type: "idle"
}
},
cwd: freshThreadCwd,
...model ? {
model
} : {}
};
} else {
if (err instanceof CodexSendError || err instanceof _codex_remote_control_js__rspack_import_8.Rg) throw err;
const explained = explainSendError(err, threadId, env);
if (explained instanceof _codex_remote_control_js__rspack_import_8.Rg) throw explained;
throw new CodexSendError(explained.message, {
delivery: err instanceof CodexRpcError ? "rejected" : err && err.delivery || "unknown",
reason: err instanceof CodexRpcError ? /no rollout found|thread not found/i.test(String(err.rpc && err.rpc.message)) ? "unknown-thread" : /active writer/i.test(String(err.rpc && err.rpc.message)) ? "external-owner" : "rejected" : "transport",
threadId,
...envelope
});
}
}
assertNotCancelled();
if (!isObject(resumed) || !isObject(resumed.thread) || typeof resumed.thread.id !== "string") {
Expand Down
43 changes: 30 additions & 13 deletions artifact/mcp/mcp-grok-bot-b8c2461e-flight.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -25681,7 +25681,8 @@ var __webpack_modules__ = {
expectedCwd: resolvedCwd,
model,
effort,
signal
signal,
freshThreadCwd: resolvedCwd
});
}
const CODEX_VERSION_PROBE_TIMEOUT_MS = 3000;
Expand Down Expand Up @@ -26274,7 +26275,7 @@ var __webpack_modules__ = {
}
async function sendToCodexThread(threadId, text, { env = process.env, envelope = buildEnvelope({
env
}), whenBusy = "reject", session, expectedTurnId, expectedCwd, model, effort, signal } = {}) {
}), whenBusy = "reject", session, expectedTurnId, expectedCwd, model, effort, signal, freshThreadCwd } = {}) {
try {
const receipt = await sendToCodexThreadInner(threadId, text, {
env,
Expand All @@ -26285,7 +26286,8 @@ var __webpack_modules__ = {
expectedCwd,
model,
effort,
signal
signal,
freshThreadCwd
});
return (0, _codex_contract_js__rspack_import_7.Dz)(receipt);
} catch (err) {
Expand All @@ -26307,7 +26309,7 @@ var __webpack_modules__ = {
"xhigh"
].includes(effort)) throw new RangeError("--effort must be none, minimal, low, medium, high, or xhigh");
}
async function sendToCodexThreadInner(threadId, text, { env, envelope, whenBusy, session, expectedTurnId, expectedCwd, model, effort, signal }) {
async function sendToCodexThreadInner(threadId, text, { env, envelope, whenBusy, session, expectedTurnId, expectedCwd, model, effort, signal, freshThreadCwd }) {
validateModelEffort(model, effort);
if (![
"reject",
Expand Down Expand Up @@ -26366,15 +26368,30 @@ var __webpack_modules__ = {
});
} catch (err) {
assertNotCancelled();
if (err instanceof CodexSendError || err instanceof _codex_remote_control_js__rspack_import_8.Rg) throw err;
const explained = explainSendError(err, threadId, env);
if (explained instanceof _codex_remote_control_js__rspack_import_8.Rg) throw explained;
throw new CodexSendError(explained.message, {
delivery: err instanceof CodexRpcError ? "rejected" : err && err.delivery || "unknown",
reason: err instanceof CodexRpcError ? /no rollout found|thread not found/i.test(String(err.rpc && err.rpc.message)) ? "unknown-thread" : /active writer/i.test(String(err.rpc && err.rpc.message)) ? "external-owner" : "rejected" : "transport",
threadId,
...envelope
});
if (freshThreadCwd !== undefined && err instanceof CodexRpcError && /no rollout found/i.test(String(err.rpc && err.rpc.message))) {
resumed = {
thread: {
id: threadId,
status: {
type: "idle"
}
},
cwd: freshThreadCwd,
...model ? {
model
} : {}
};
} else {
if (err instanceof CodexSendError || err instanceof _codex_remote_control_js__rspack_import_8.Rg) throw err;
const explained = explainSendError(err, threadId, env);
if (explained instanceof _codex_remote_control_js__rspack_import_8.Rg) throw explained;
throw new CodexSendError(explained.message, {
delivery: err instanceof CodexRpcError ? "rejected" : err && err.delivery || "unknown",
reason: err instanceof CodexRpcError ? /no rollout found|thread not found/i.test(String(err.rpc && err.rpc.message)) ? "unknown-thread" : /active writer/i.test(String(err.rpc && err.rpc.message)) ? "external-owner" : "rejected" : "transport",
threadId,
...envelope
});
}
}
assertNotCancelled();
if (!isObject(resumed) || !isObject(resumed.thread) || typeof resumed.thread.id !== "string") {
Expand Down
43 changes: 30 additions & 13 deletions artifact/mcp/mcp-grok-bot-b8c2461e.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -62896,7 +62896,8 @@ var __webpack_modules__ = {
expectedCwd: resolvedCwd,
model,
effort,
signal
signal,
freshThreadCwd: resolvedCwd
});
}
const CODEX_VERSION_PROBE_TIMEOUT_MS = 3000;
Expand Down Expand Up @@ -63489,7 +63490,7 @@ var __webpack_modules__ = {
}
async function sendToCodexThread(threadId, text, { env = process.env, envelope = buildEnvelope({
env
}), whenBusy = "reject", session, expectedTurnId, expectedCwd, model, effort, signal } = {}) {
}), whenBusy = "reject", session, expectedTurnId, expectedCwd, model, effort, signal, freshThreadCwd } = {}) {
try {
const receipt = await sendToCodexThreadInner(threadId, text, {
env,
Expand All @@ -63500,7 +63501,8 @@ var __webpack_modules__ = {
expectedCwd,
model,
effort,
signal
signal,
freshThreadCwd
});
return (0, _codex_contract_js__rspack_import_7.Dz)(receipt);
} catch (err) {
Expand All @@ -63522,7 +63524,7 @@ var __webpack_modules__ = {
"xhigh"
].includes(effort)) throw new RangeError("--effort must be none, minimal, low, medium, high, or xhigh");
}
async function sendToCodexThreadInner(threadId, text, { env, envelope, whenBusy, session, expectedTurnId, expectedCwd, model, effort, signal }) {
async function sendToCodexThreadInner(threadId, text, { env, envelope, whenBusy, session, expectedTurnId, expectedCwd, model, effort, signal, freshThreadCwd }) {
validateModelEffort(model, effort);
if (![
"reject",
Expand Down Expand Up @@ -63581,15 +63583,30 @@ var __webpack_modules__ = {
});
} catch (err) {
assertNotCancelled();
if (err instanceof CodexSendError || err instanceof _codex_remote_control_js__rspack_import_8.Rg) throw err;
const explained = explainSendError(err, threadId, env);
if (explained instanceof _codex_remote_control_js__rspack_import_8.Rg) throw explained;
throw new CodexSendError(explained.message, {
delivery: err instanceof CodexRpcError ? "rejected" : err && err.delivery || "unknown",
reason: err instanceof CodexRpcError ? /no rollout found|thread not found/i.test(String(err.rpc && err.rpc.message)) ? "unknown-thread" : /active writer/i.test(String(err.rpc && err.rpc.message)) ? "external-owner" : "rejected" : "transport",
threadId,
...envelope
});
if (freshThreadCwd !== undefined && err instanceof CodexRpcError && /no rollout found/i.test(String(err.rpc && err.rpc.message))) {
resumed = {
thread: {
id: threadId,
status: {
type: "idle"
}
},
cwd: freshThreadCwd,
...model ? {
model
} : {}
};
} else {
if (err instanceof CodexSendError || err instanceof _codex_remote_control_js__rspack_import_8.Rg) throw err;
const explained = explainSendError(err, threadId, env);
if (explained instanceof _codex_remote_control_js__rspack_import_8.Rg) throw explained;
throw new CodexSendError(explained.message, {
delivery: err instanceof CodexRpcError ? "rejected" : err && err.delivery || "unknown",
reason: err instanceof CodexRpcError ? /no rollout found|thread not found/i.test(String(err.rpc && err.rpc.message)) ? "unknown-thread" : /active writer/i.test(String(err.rpc && err.rpc.message)) ? "external-owner" : "rejected" : "transport",
threadId,
...envelope
});
}
}
assertNotCancelled();
if (!isObject(resumed) || !isObject(resumed.thread) || typeof resumed.thread.id !== "string") {
Expand Down
Loading