@codexhost/cli-darwin-x64 0.16.0 → 0.17.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 (38) hide show
  1. package/README.md +2 -2
  2. package/THIRD_PARTY_NOTICES.txt +6 -2
  3. package/app/codexhost-distribution.json +1 -1
  4. package/app/console-server.mjs +59 -21
  5. package/app/console-web.js +49 -18
  6. package/app/desktop-controller.mjs +554 -34
  7. package/app/host-runtime.mjs +3436 -1846
  8. package/app/plugins/antigravity/plugin.mjs +39 -3
  9. package/app/plugins/claude-code/plugin.mjs +16 -7
  10. package/app/plugins/codebuddy/plugin.mjs +14 -1
  11. package/app/plugins/codex-usage/plugin.mjs +4 -1
  12. package/app/plugins/copilot/plugin.mjs +4 -1
  13. package/app/plugins/cursor-cli/plugin.mjs +13 -6
  14. package/app/plugins/deepseek-harness/plugin.mjs +463 -47
  15. package/app/plugins/devin/assets/icon.svg +1 -0
  16. package/app/plugins/devin/manifest.json +30 -0
  17. package/app/plugins/devin/plugin.mjs +23363 -0
  18. package/app/plugins/enabled.json +2 -0
  19. package/app/plugins/grok/plugin.mjs +476 -392
  20. package/app/plugins/hermes/plugin.mjs +457 -197
  21. package/app/plugins/kimi-code/plugin.mjs +4 -1
  22. package/app/plugins/kiro-cli/plugin.mjs +4 -1
  23. package/app/plugins/omp/plugin.mjs +4 -1
  24. package/app/plugins/opencode/plugin.mjs +4 -1
  25. package/app/plugins/pi/plugin.mjs +1464 -412
  26. package/app/plugins/qoder/plugin.mjs +9528 -8655
  27. package/app/plugins/qoder-cn/plugin.mjs +9528 -8655
  28. package/app/plugins/qwen-code/assets/icon.svg +1 -0
  29. package/app/plugins/qwen-code/manifest.json +29 -0
  30. package/app/plugins/qwen-code/plugin.mjs +29298 -0
  31. package/app/plugins/workbuddy/plugin.mjs +14 -1
  32. package/app/plugins/zcode/plugin.mjs +4 -1
  33. package/app/renderer-extension.js +510 -114
  34. package/bin/codexhost +0 -0
  35. package/libexec/codexhost-shim +0 -0
  36. package/libexec/codexhost-updater +0 -0
  37. package/licenses/Qwen-Code-SDK-LICENSE.txt +203 -0
  38. package/package.json +2 -2
@@ -15977,7 +15977,10 @@ var harnessPluginRouteSchema = external_exports.object({
15977
15977
  harnessId: harnessPluginIdSchema,
15978
15978
  model: harnessModelRefSchema.optional(),
15979
15979
  thinkingOptionId: harnessThinkingOptionIdSchema.optional(),
15980
- permissionModeId: harnessPermissionModeIdSchema.optional()
15980
+ permissionModeId: harnessPermissionModeIdSchema.optional(),
15981
+ /** A draft prewarm create: stays unsubmitted until the user's first Turn.
15982
+ * Desktop forwards only the Model of a main-process prewarm to thread/start. */
15983
+ prewarm: external_exports.literal(true).optional()
15981
15984
  }).strict();
15982
15985
 
15983
15986
  // ../../shared-contracts/dist/harness-launch-settings.js
@@ -19086,6 +19089,32 @@ function createAntigravityUsageStatistics(environment) {
19086
19089
  }
19087
19090
 
19088
19091
  // dist/antigravity-adapter.js
19092
+ function unstreamedReplyTail(streamed, reply) {
19093
+ const shown = streamed.replace(/\s+/gu, "");
19094
+ if (shown === "")
19095
+ return null;
19096
+ const replied = reply.replace(/\s+/gu, "");
19097
+ if (shown.endsWith(replied))
19098
+ return "";
19099
+ let at = 0;
19100
+ let matched = 0;
19101
+ while (matched < shown.length && at < reply.length) {
19102
+ const char = reply[at] ?? "";
19103
+ if (/\s/u.test(char)) {
19104
+ at += 1;
19105
+ continue;
19106
+ }
19107
+ if (char !== shown[matched])
19108
+ return null;
19109
+ at += 1;
19110
+ matched += 1;
19111
+ }
19112
+ if (matched < shown.length)
19113
+ return null;
19114
+ const tail = reply.slice(at);
19115
+ const shownTrailing = /\s*$/u.exec(streamed)?.[0] ?? "";
19116
+ return tail.startsWith(shownTrailing) ? tail.slice(shownTrailing.length) : tail;
19117
+ }
19089
19118
  var antigravityHarnessId = harnessIdSchema.parse("antigravity");
19090
19119
  var DEFAULT_INSPECT_TIMEOUT_MS = 2e4;
19091
19120
  var DEFAULT_PRINT_TIMEOUT = "30m";
@@ -19570,6 +19599,7 @@ var AntigravitySession = class {
19570
19599
  logPath,
19571
19600
  agentItem: null,
19572
19601
  agentText: "",
19602
+ turnAgentText: "",
19573
19603
  tools: /* @__PURE__ */ new Map(),
19574
19604
  completedItems: [],
19575
19605
  stderr: "",
@@ -19767,8 +19797,13 @@ ${line}`).slice(-8e3);
19767
19797
  const repliedThisTurn = Boolean(active.agentItem) || turnReply.trim() !== "";
19768
19798
  if (response)
19769
19799
  this.#lastResultResponse = response;
19770
- if (turnReply.trim() !== "")
19771
- this.#appendOrSyncAgentText(active, turnReply, false);
19800
+ if (turnReply.trim() !== "") {
19801
+ const unshown = unstreamedReplyTail(active.turnAgentText, turnReply);
19802
+ if (unshown === null)
19803
+ this.#appendOrSyncAgentText(active, turnReply, false);
19804
+ else if (unshown.trim() !== "")
19805
+ this.#appendAgentText(active, unshown);
19806
+ }
19772
19807
  const safeTurnId = event.result.num_turns !== void 0 && event.result.num_turns !== null ? `turn:${event.result.num_turns}` : `turn:${this.#history.snapshot().length + 1}`;
19773
19808
  const safeSessionId = convId || this.#nativeRef?.nativeSessionId || "unknown-session";
19774
19809
  const nativeTurnRef = nativeTurnRefSchema.parse({
@@ -19952,6 +19987,7 @@ ${line}`).slice(-8e3);
19952
19987
  this.#appendAgentText(active, text);
19953
19988
  }
19954
19989
  #appendAgentText(active, text) {
19990
+ active.turnAgentText += text;
19955
19991
  if (!active.agentItem) {
19956
19992
  active.agentItem = { type: "agentMessage", itemId: this.#newItemId(), text };
19957
19993
  active.agentText = text;
@@ -15571,7 +15571,10 @@ var harnessPluginRouteSchema = external_exports.object({
15571
15571
  harnessId: harnessPluginIdSchema,
15572
15572
  model: harnessModelRefSchema.optional(),
15573
15573
  thinkingOptionId: harnessThinkingOptionIdSchema.optional(),
15574
- permissionModeId: harnessPermissionModeIdSchema.optional()
15574
+ permissionModeId: harnessPermissionModeIdSchema.optional(),
15575
+ /** A draft prewarm create: stays unsubmitted until the user's first Turn.
15576
+ * Desktop forwards only the Model of a main-process prewarm to thread/start. */
15577
+ prewarm: external_exports.literal(true).optional()
15575
15578
  }).strict();
15576
15579
 
15577
15580
  // ../../shared-contracts/dist/harness-launch-settings.js
@@ -55581,6 +55584,8 @@ function conversationMessages(values, sessionId) {
55581
55584
  type: value.type,
55582
55585
  uuid: value.uuid,
55583
55586
  message: value.message,
55587
+ // Failure metadata belongs to the outer SDK/transcript record, not its Message.
55588
+ failed: value.type === "assistant" && (typeof value.error === "string" || value.isApiErrorMessage === true),
55584
55589
  nested: typeof value.parent_tool_use_id === "string" && value.parent_tool_use_id.length > 0,
55585
55590
  interrupted,
55586
55591
  startsTurn: false,
@@ -55646,7 +55651,7 @@ function turnOutcome(messages) {
55646
55651
  if (messages.some(({ interrupted }) => interrupted))
55647
55652
  return { status: "cancelled", reason: "Cancelled by user" };
55648
55653
  const assistants = messages.filter(({ type }) => type === "assistant");
55649
- const failed = assistants.some(({ message }) => typeof message.error === "string");
55654
+ const failed = assistants.some(({ failed: failed2, nested }) => failed2 && !nested);
55650
55655
  if (failed) {
55651
55656
  return {
55652
55657
  status: "failed",
@@ -55732,6 +55737,7 @@ function mapClaudeSnapshot(values, sessionId) {
55732
55737
  }
55733
55738
  if (message.type !== "assistant")
55734
55739
  return [];
55740
+ const assistantOutcome = outcome.status === "failed" && (!message.failed || message.nested) ? { status: "succeeded" } : itemOutcome(outcome);
55735
55741
  const content = message.message.content;
55736
55742
  const text2 = textParts(content).join("");
55737
55743
  const reasoning = thinkingParts(content).join("");
@@ -55743,7 +55749,7 @@ function mapClaudeSnapshot(values, sessionId) {
55743
55749
  itemId: claudeTranscriptItemId(user.uuid, "agentMessage", agentMessageOrdinal += 1),
55744
55750
  text: text2
55745
55751
  },
55746
- outcome: itemOutcome(outcome)
55752
+ outcome: assistantOutcome
55747
55753
  }
55748
55754
  ] : [];
55749
55755
  }
@@ -55760,7 +55766,7 @@ function mapClaudeSnapshot(values, sessionId) {
55760
55766
  itemId: claudeTranscriptItemId(user.uuid, "reasoning", reasoningOrdinal += 1),
55761
55767
  text: reasoning
55762
55768
  },
55763
- outcome: itemOutcome(outcome)
55769
+ outcome: assistantOutcome
55764
55770
  });
55765
55771
  projectedReasoning = true;
55766
55772
  continue;
@@ -55772,7 +55778,7 @@ function mapClaudeSnapshot(values, sessionId) {
55772
55778
  itemId: claudeTranscriptItemId(user.uuid, "agentMessage", agentMessageOrdinal += 1),
55773
55779
  text: text2
55774
55780
  },
55775
- outcome: itemOutcome(outcome)
55781
+ outcome: assistantOutcome
55776
55782
  });
55777
55783
  projectedText = true;
55778
55784
  continue;
@@ -57548,7 +57554,8 @@ var ClaudeSdkTransport = class {
57548
57554
  const activeQuery = this.#query;
57549
57555
  if (!activeQuery)
57550
57556
  throw new Error("Claude SDK transport is not running");
57551
- this.#idleAccumulator?.requestCancel();
57557
+ const idle = this.#idleAccumulator ??= new ClaudeNativeTurnAccumulator(this.#provider ? { provider: this.#provider } : {});
57558
+ idle.requestCancel();
57552
57559
  try {
57553
57560
  await this.#stopRequest(activeQuery.interrupt(), INTERRUPT_TIMEOUT_MESSAGE);
57554
57561
  } catch (error52) {
@@ -59975,7 +59982,9 @@ var ClaudeHarnessSession = class {
59975
59982
  active.cancellationRequested = true;
59976
59983
  const transport = this.#transport;
59977
59984
  const taskIds = this.#backgroundTaskIds(active);
59978
- if (transport && (taskIds.length > 0 || active.held && (active.rootSegmentActive || this.#occupancy.awaitingContinuation || active.steersAwaitingNative.size > 0))) {
59985
+ if (transport && (taskIds.length > 0 || // A written steer survives the interrupt and runs as Claude's next native turn, so the
59986
+ // Turn stays open to interrupt that turn too instead of leaking it into the next one.
59987
+ active.steersAwaitingNative.size > 0 || active.held && (active.rootSegmentActive || this.#occupancy.awaitingContinuation))) {
59979
59988
  await this.#cancelBackgroundWork(active, transport, taskIds);
59980
59989
  return { ok: true, value: { cancellationRequested: true } };
59981
59990
  }
@@ -16047,7 +16047,10 @@ var harnessPluginRouteSchema = external_exports.object({
16047
16047
  harnessId: harnessPluginIdSchema,
16048
16048
  model: harnessModelRefSchema.optional(),
16049
16049
  thinkingOptionId: harnessThinkingOptionIdSchema.optional(),
16050
- permissionModeId: harnessPermissionModeIdSchema.optional()
16050
+ permissionModeId: harnessPermissionModeIdSchema.optional(),
16051
+ /** A draft prewarm create: stays unsubmitted until the user's first Turn.
16052
+ * Desktop forwards only the Model of a main-process prewarm to thread/start. */
16053
+ prewarm: external_exports.literal(true).optional()
16051
16054
  }).strict();
16052
16055
 
16053
16056
  // ../../shared-contracts/dist/harness-launch-settings.js
@@ -18347,6 +18350,16 @@ function snapshotFromHistory(contents, ref, cwd, profile = CODEBUDDY_RUNTIME_PRO
18347
18350
  continue;
18348
18351
  if (supportsNativeCommands && row.type === "message" && row.role === "user" && data.agent === "compact" && !manualCompactions.has(text(row.id)))
18349
18352
  continue;
18353
+ if (row.type === "message" && row.role === "user" && data.startsNewUserRequest === false && !localCommand && data.agent !== "compact" && !isNativeCompactionSummary(row)) {
18354
+ const contextOnly = body.trim().length > 0 && body.replace(/<system-reminder\b[^>]*\sdata-role=(["'])user-context\1[^>]*>[\s\S]*?<\/system-reminder>/gu, "").trim().length === 0;
18355
+ if (data.isMeta === true || contextOnly)
18356
+ continue;
18357
+ if (current) {
18358
+ if (body)
18359
+ current.input.push({ type: "text", text: body });
18360
+ continue;
18361
+ }
18362
+ }
18350
18363
  if (includeCompactionHistory && isNativeCompactionSummary(row)) {
18351
18364
  if (supportsNativeCommands && current) {
18352
18365
  const outcome = data.isCompacted === true ? { status: "succeeded" } : {
@@ -15565,7 +15565,10 @@ var harnessPluginRouteSchema = external_exports.object({
15565
15565
  harnessId: harnessPluginIdSchema,
15566
15566
  model: harnessModelRefSchema.optional(),
15567
15567
  thinkingOptionId: harnessThinkingOptionIdSchema.optional(),
15568
- permissionModeId: harnessPermissionModeIdSchema.optional()
15568
+ permissionModeId: harnessPermissionModeIdSchema.optional(),
15569
+ /** A draft prewarm create: stays unsubmitted until the user's first Turn.
15570
+ * Desktop forwards only the Model of a main-process prewarm to thread/start. */
15571
+ prewarm: external_exports.literal(true).optional()
15569
15572
  }).strict();
15570
15573
 
15571
15574
  // ../../shared-contracts/dist/harness-launch-settings.js
@@ -19622,7 +19622,10 @@ var harnessPluginRouteSchema = external_exports.object({
19622
19622
  harnessId: harnessPluginIdSchema,
19623
19623
  model: harnessModelRefSchema.optional(),
19624
19624
  thinkingOptionId: harnessThinkingOptionIdSchema.optional(),
19625
- permissionModeId: harnessPermissionModeIdSchema.optional()
19625
+ permissionModeId: harnessPermissionModeIdSchema.optional(),
19626
+ /** A draft prewarm create: stays unsubmitted until the user's first Turn.
19627
+ * Desktop forwards only the Model of a main-process prewarm to thread/start. */
19628
+ prewarm: external_exports.literal(true).optional()
19626
19629
  }).strict();
19627
19630
 
19628
19631
  // ../../shared-contracts/dist/harness-launch-settings.js
@@ -15932,7 +15932,10 @@ var harnessPluginRouteSchema = external_exports.object({
15932
15932
  harnessId: harnessPluginIdSchema,
15933
15933
  model: harnessModelRefSchema.optional(),
15934
15934
  thinkingOptionId: harnessThinkingOptionIdSchema.optional(),
15935
- permissionModeId: harnessPermissionModeIdSchema.optional()
15935
+ permissionModeId: harnessPermissionModeIdSchema.optional(),
15936
+ /** A draft prewarm create: stays unsubmitted until the user's first Turn.
15937
+ * Desktop forwards only the Model of a main-process prewarm to thread/start. */
15938
+ prewarm: external_exports.literal(true).optional()
15936
15939
  }).strict();
15937
15940
 
15938
15941
  // ../../shared-contracts/dist/harness-launch-settings.js
@@ -17135,7 +17138,8 @@ function readCursorNativeHistory(sessionId, cwd, environment, allowMissing = fal
17135
17138
  result.push({
17136
17139
  id,
17137
17140
  text: one(user, 1).toString("utf8"),
17138
- ...rewindRoot ? { rewindRoot } : {}
17141
+ ...rewindRoot ? { rewindRoot } : {},
17142
+ ...user.get(15)?.length ? { notification: true } : {}
17139
17143
  });
17140
17144
  }
17141
17145
  }
@@ -23800,19 +23804,22 @@ var CursorSession = class {
23800
23804
  const administrative = command.input.map((part) => part.text).join("\n").trim().toLowerCase() === "/copy-request-id";
23801
23805
  if (administrative && JSON.stringify(before) === JSON.stringify(after)) {
23802
23806
  } else {
23803
- if (added.length !== 1 || after.length !== before.length + 1 || before.some((turn, index) => after[index]?.id !== turn.id) || added[0]?.text !== command.input.map((part) => part.text).join("\n"))
23807
+ const prompted = added.filter((turn) => !turn.notification);
23808
+ const own = prompted[0];
23809
+ if (!own || prompted.length !== 1 || after.length !== before.length + added.length || before.some((turn, index) => after[index]?.id !== turn.id) || own.text !== command.input.map((part) => part.text).join("\n"))
23804
23810
  throw new Error("Cursor terminal has no unique, verified native turn identity");
23805
23811
  nativeTurnRef = nativeTurnRefSchema.parse({
23806
23812
  harnessId: "cursor-cli",
23807
23813
  nativeSessionId: this.transport.sessionId,
23808
- nativeTurnKey: added[0].id,
23814
+ nativeTurnKey: own.id,
23809
23815
  formatVersion: 1
23810
23816
  });
23811
23817
  this.#fresh = false;
23812
- if (outcome.status === "succeeded" && cursorForkAvailable())
23818
+ const ownIndex = after.findIndex((turn) => turn.id === own.id);
23819
+ if (outcome.status === "succeeded" && cursorForkAvailable() && (ownIndex === after.length - 1 || after[ownIndex + 1]?.rewindRoot))
23813
23820
  outcome = {
23814
23821
  ...outcome,
23815
- checkpoint: cursorCheckpoint(this.transport.sessionId, added[0].id)
23822
+ checkpoint: cursorCheckpoint(this.transport.sessionId, own.id)
23816
23823
  };
23817
23824
  }
23818
23825
  } catch (error51) {