codex-relay 1.4.13 → 1.5.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 (2) hide show
  1. package/dist/src.js +38 -16
  2. package/package.json +3 -3
package/dist/src.js CHANGED
@@ -3636,8 +3636,9 @@ async function streamRunningAppServerThread(input) {
3636
3636
  observedTurnActivity = true;
3637
3637
  const item = params?.item;
3638
3638
  if (!item || typeof item !== "object") return;
3639
- const message = upsertAppServerItemMessage(input.messagesByThreadId, input.threadId, firstString(params, ["turnId"]) ?? activeTurnId, item);
3639
+ let message = upsertAppServerItemMessage(input.messagesByThreadId, input.threadId, firstString(params, ["turnId"]) ?? activeTurnId, item);
3640
3640
  if (!message) return;
3641
+ if (notification.method === "item/started") message = updateMessage(input.messagesByThreadId, input.threadId, message.id, { state: "streaming" });
3641
3642
  const isAsyncAgentMessage = isAsyncAppServerAgentMessage(item);
3642
3643
  if (isAsyncAgentMessage) asyncAgentMessageIds.add(message.id);
3643
3644
  if (message.role !== "user" && !isAsyncAgentMessage) producedTurnOutput = true;
@@ -3656,14 +3657,22 @@ async function streamRunningAppServerThread(input) {
3656
3657
  case "item/agentMessage/delta": {
3657
3658
  observedTurnActivity = true;
3658
3659
  const itemId = firstString(params, ["itemId"]);
3659
- const delta = firstString(params, ["delta"]);
3660
+ const delta = streamDelta(params);
3660
3661
  if (!itemId || !delta) return;
3661
- if (!input.messagesByThreadId.get(input.threadId)?.some((item) => item.id === itemId)) appendMessageWithId(input.messagesByThreadId, input.threadId, itemId, {
3662
- role: "assistant",
3663
- content: "",
3664
- state: "streaming",
3665
- turnId: firstString(params, ["turnId"]) ?? activeTurnId
3666
- });
3662
+ if (!input.messagesByThreadId.get(input.threadId)?.some((item) => item.id === itemId)) {
3663
+ const createdMessage = appendMessageWithId(input.messagesByThreadId, input.threadId, itemId, {
3664
+ role: "assistant",
3665
+ content: "",
3666
+ state: "streaming",
3667
+ turnId: firstString(params, ["turnId"]) ?? activeTurnId
3668
+ });
3669
+ threadSummary = updateThread(input.threads, input.messagesByThreadId, input.threadId, { state: "running" });
3670
+ sendSse(input.controller, input.encoder, input.secureSession, {
3671
+ type: "thread.message.created",
3672
+ thread: threadSummary,
3673
+ message: createdMessage
3674
+ });
3675
+ }
3667
3676
  const isAsyncAgentMessage = asyncAgentMessageIds.has(itemId);
3668
3677
  if (!isAsyncAgentMessage) {
3669
3678
  assistantMessageId = itemId;
@@ -4157,8 +4166,9 @@ async function runAppServerPromptStreamed(input) {
4157
4166
  return;
4158
4167
  }
4159
4168
  const turnId = firstString(params, ["turnId"]) ?? activeTurnId;
4160
- const message = upsertAppServerItemMessage(input.messagesByThreadId, activeThreadId, turnId, item);
4169
+ let message = upsertAppServerItemMessage(input.messagesByThreadId, activeThreadId, turnId, item);
4161
4170
  if (!message) return;
4171
+ if (notification.method === "item/started") message = updateMessage(input.messagesByThreadId, activeThreadId, message.id, { state: "streaming" });
4162
4172
  const isAsyncAgentMessage = isAsyncAppServerAgentMessage(item);
4163
4173
  if (isAsyncAgentMessage) asyncAgentMessageIds.add(message.id);
4164
4174
  if (message.role !== "user" && !isAsyncAgentMessage) producedTurnOutput = true;
@@ -4176,14 +4186,22 @@ async function runAppServerPromptStreamed(input) {
4176
4186
  }
4177
4187
  case "item/agentMessage/delta": {
4178
4188
  const itemId = firstString(params, ["itemId"]);
4179
- const delta = firstString(params, ["delta"]);
4189
+ const delta = streamDelta(params);
4180
4190
  if (!itemId || !delta) return;
4181
- if (!input.messagesByThreadId.get(activeThreadId)?.some((item) => item.id === itemId)) appendMessageWithId(input.messagesByThreadId, activeThreadId, itemId, {
4182
- role: "assistant",
4183
- content: "",
4184
- state: "streaming",
4185
- turnId: firstString(params, ["turnId"]) ?? activeTurnId
4186
- });
4191
+ if (!input.messagesByThreadId.get(activeThreadId)?.some((item) => item.id === itemId)) {
4192
+ const createdMessage = appendMessageWithId(input.messagesByThreadId, activeThreadId, itemId, {
4193
+ role: "assistant",
4194
+ content: "",
4195
+ state: "streaming",
4196
+ turnId: firstString(params, ["turnId"]) ?? activeTurnId
4197
+ });
4198
+ threadSummary = updateThread(input.threads, input.messagesByThreadId, activeThreadId, { state: "running" });
4199
+ sendSse(input.controller, input.encoder, input.secureSession, {
4200
+ type: "thread.message.created",
4201
+ thread: threadSummary,
4202
+ message: createdMessage
4203
+ });
4204
+ }
4187
4205
  const isAsyncAgentMessage = asyncAgentMessageIds.has(itemId);
4188
4206
  if (!isAsyncAgentMessage) assistantMessageId = itemId;
4189
4207
  const patch = appendMessageDelta(input.messagesByThreadId, activeThreadId, itemId, delta);
@@ -6806,6 +6824,10 @@ function firstString(record, keys) {
6806
6824
  if (typeof value === "string" && value.trim()) return value;
6807
6825
  }
6808
6826
  }
6827
+ function streamDelta(record) {
6828
+ const value = record?.delta;
6829
+ return typeof value === "string" && value.length > 0 ? value : void 0;
6830
+ }
6809
6831
  function firstNumber(record, keys) {
6810
6832
  for (const key of keys) {
6811
6833
  const value = record?.[key];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codex-relay",
3
- "version": "1.4.13",
3
+ "version": "1.5.0",
4
4
  "description": "Local Codex Relay CLI bridge for the Codex Relay mobile app.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -41,8 +41,8 @@
41
41
  "@noble/ciphers": "2.2.0",
42
42
  "@noble/curves": "2.2.0",
43
43
  "@noble/hashes": "2.2.0",
44
- "@openai/codex": "0.149.1",
45
- "@openai/codex-sdk": "0.149.1",
44
+ "@openai/codex": "0.153.4",
45
+ "@openai/codex-sdk": "0.153.4",
46
46
  "base64-js": "1.5.1",
47
47
  "commander": "^14.0.3",
48
48
  "es-git": "^0.6.0",