commandmate 0.32.1 → 0.33.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 (182) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +166 -166
  3. package/.next/app-path-routes-manifest.json +36 -36
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +9 -9
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
  9. package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
  10. package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
  11. package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
  12. package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
  13. package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
  15. package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
  17. package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
  18. package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
  19. package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  22. package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
  24. package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
  27. package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
  29. package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
  31. package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
  33. package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
  35. package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
  36. package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
  37. package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
  38. package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
  39. package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
  40. package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
  41. package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
  42. package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  43. package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
  44. package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
  46. package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
  47. package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
  49. package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
  50. package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
  51. package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
  52. package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
  53. package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
  54. package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
  55. package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
  56. package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
  57. package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
  58. package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
  59. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  60. package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
  61. package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  62. package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  63. package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
  64. package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
  65. package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
  66. package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
  67. package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
  68. package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
  69. package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
  70. package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
  71. package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
  72. package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
  73. package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
  74. package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
  75. package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
  76. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
  77. package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
  78. package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
  79. package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
  80. package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
  81. package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
  82. package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
  83. package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
  84. package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
  85. package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
  86. package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
  87. package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
  88. package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
  89. package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
  90. package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
  91. package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
  92. package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
  93. package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
  94. package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
  95. package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
  96. package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
  97. package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
  98. package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
  99. package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
  100. package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
  101. package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
  102. package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
  103. package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
  104. package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
  105. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
  106. package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
  107. package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
  108. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
  109. package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
  110. package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
  111. package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
  112. package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
  113. package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
  114. package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
  115. package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
  116. package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
  117. package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
  118. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
  119. package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
  120. package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
  121. package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
  122. package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
  123. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
  124. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
  125. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
  126. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
  127. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
  128. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
  129. package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
  130. package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
  131. package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
  132. package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
  133. package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
  134. package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
  135. package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
  136. package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
  137. package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
  138. package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
  139. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
  140. package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
  141. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
  142. package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
  143. package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
  144. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
  145. package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
  146. package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
  147. package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
  148. package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
  149. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
  150. package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  151. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  152. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  153. package/.next/server/app/more/page_client-reference-manifest.js +1 -1
  154. package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  155. package/.next/server/app/page_client-reference-manifest.js +1 -1
  156. package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
  157. package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
  158. package/.next/server/app/review/page_client-reference-manifest.js +1 -1
  159. package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  160. package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
  161. package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
  162. package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  163. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  164. package/.next/server/app/worktrees/[id]/page.js +11 -11
  165. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  166. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  167. package/.next/server/app-paths-manifest.json +36 -36
  168. package/.next/server/chunks/6838.js +1 -1
  169. package/.next/server/chunks/8918.js +4 -4
  170. package/.next/server/middleware-manifest.json +5 -5
  171. package/.next/server/pages/500.html +1 -1
  172. package/.next/server/server-reference-manifest.json +1 -1
  173. package/.next/static/chunks/{4718-9d63107c612a065d.js → 4718-d97f52cd932dc1ee.js} +1 -1
  174. package/.next/static/chunks/app/worktrees/[id]/page-18a7d9374bd8c218.js +1 -0
  175. package/.next/static/css/{96d94a4ba771efc3.css → fb455b4e308adbaa.css} +1 -1
  176. package/.next/trace +13 -13
  177. package/dist/server/src/lib/hooks/sources/codex/transcript.js +88 -6
  178. package/dist/server/src/lib/hooks/sources/turn-body.js +3 -1
  179. package/package.json +1 -1
  180. package/.next/static/chunks/app/worktrees/[id]/page-3d82a9355d5612d9.js +0 -1
  181. /package/.next/static/{Lno4w_zWXdGdlfXg06Vp8 → eVkZd6vpcQwyJIlbymCUg}/_buildManifest.js +0 -0
  182. /package/.next/static/{Lno4w_zWXdGdlfXg06Vp8 → eVkZd6vpcQwyJIlbymCUg}/_ssgManifest.js +0 -0
@@ -91,7 +91,7 @@
91
91
  * @module lib/hooks/sources/codex/transcript
92
92
  */
93
93
  Object.defineProperty(exports, "__esModule", { value: true });
94
- exports.CODEX_THINKING_LABEL = exports.MAX_CODEX_TOOL_DETAIL_LENGTH = exports.MAX_CODEX_TURN_ITEMS = exports.CODEX_TURN_HEAD_TRUNCATION_MARKER = exports.CODEX_TURN_TRUNCATION_MARKER = exports.MAX_CODEX_TURN_BODY_LENGTH = exports.CODEX_ROLLOUT_EXTENSION = exports.CODEX_SESSIONS_DIR_SEGMENTS = void 0;
94
+ exports.CODEX_COMMENTARY_PHASE = exports.CODEX_FINAL_ANSWER_PHASE = exports.CODEX_THINKING_LABEL = exports.MAX_CODEX_TOOL_DETAIL_LENGTH = exports.MAX_CODEX_TURN_ITEMS = exports.CODEX_TURN_HEAD_TRUNCATION_MARKER = exports.CODEX_TURN_TRUNCATION_MARKER = exports.MAX_CODEX_TURN_BODY_LENGTH = exports.CODEX_ROLLOUT_EXTENSION = exports.CODEX_SESSIONS_DIR_SEGMENTS = void 0;
95
95
  exports.readCodexRolloutItem = readCodexRolloutItem;
96
96
  exports.readCodexRolloutRecord = readCodexRolloutRecord;
97
97
  exports.parseCodexRollout = parseCodexRollout;
@@ -130,6 +130,21 @@ exports.MAX_CODEX_TURN_ITEMS = 2048;
130
130
  exports.MAX_CODEX_TOOL_DETAIL_LENGTH = 200;
131
131
  /** The label a reasoning summary is folded behind. Same word claude uses. */
132
132
  exports.CODEX_THINKING_LABEL = 'Thinking';
133
+ /**
134
+ * `AgentMessage.phase` for the reply codex means the operator to read.
135
+ *
136
+ * Measured 268 of 2,211 archived `AgentMessage` items
137
+ * (`docs/design/codex-transcript-reader.md` §2.3).
138
+ */
139
+ exports.CODEX_FINAL_ANSWER_PHASE = 'final_answer';
140
+ /**
141
+ * `AgentMessage.phase` for the progress narration codex writes while it works.
142
+ *
143
+ * Measured 1,943 of 2,211 — the majority of what codex says in a turn is this.
144
+ * The one phase {@link renderCodexTurn} folds; see its docblock for why the
145
+ * classification is an allow-list of exactly this value and nothing else.
146
+ */
147
+ exports.CODEX_COMMENTARY_PHASE = 'commentary';
133
148
  /**
134
149
  * Read one `item_completed` item.
135
150
  *
@@ -437,14 +452,79 @@ function renderReasoningItem(text) {
437
452
  .join('\n');
438
453
  return `> **${exports.CODEX_THINKING_LABEL}**\n>\n${quoted}`;
439
454
  }
455
+ /**
456
+ * The prose one `AgentMessage` contributes, or `''` when it contributes none.
457
+ *
458
+ * The single definition of "non-empty body" for this reader, shared by
459
+ * {@link hasFinalAnswerProse} and by {@link renderCodexTurn}'s loop on purpose:
460
+ * the fallback asks whether the turn renders an answer, and if the two spelled
461
+ * that test out separately they could disagree about a message that is nothing
462
+ * but whitespace — the exact turn the fallback exists for.
463
+ */
464
+ function agentMessageText(item) {
465
+ return item.text?.trim() ?? '';
466
+ }
467
+ /**
468
+ * Whether this turn renders at least one non-empty `final_answer`.
469
+ *
470
+ * The test is on the **rendered body**, not on the presence of an item: item
471
+ * count and drawn paragraphs are different quantities, because a message whose
472
+ * text is empty or whitespace is dropped before it reaches the body. A turn
473
+ * whose only `final_answer` is blank would, on an item-count test, fold its
474
+ * commentary away and leave an empty bubble.
475
+ */
476
+ function hasFinalAnswerProse(turn) {
477
+ return turn.items.some((item) => item.type === 'AgentMessage' &&
478
+ item.phase === exports.CODEX_FINAL_ANSWER_PHASE &&
479
+ agentMessageText(item).length > 0);
480
+ }
440
481
  /**
441
482
  * Render one turn to Markdown.
442
483
  *
443
484
  * Transcript order within each kind — the same decision #2041 and #2121 took,
444
485
  * and for the same reason: the order is the only record of what happened when,
445
- * and this row is the record. Both `commentary` and `final_answer` messages are
446
- * kept; codex's TUI shows both, and dropping the commentary would remove the
447
- * sentence that explains what the tool line underneath it is for.
486
+ * and this row is the record.
487
+ *
488
+ * ## Why `commentary` is folded now (Issue #2420)
489
+ *
490
+ * #2197 kept `commentary` in the body on the argument that "the sentence that
491
+ * explains what the tool line underneath it is for" would otherwise be lost.
492
+ * **#2234 retired that argument by moving every tool line to a folded section
493
+ * at the end of the body** — there is no line underneath the commentary any
494
+ * more, so what leads the bubble is narration with nothing left to narrate.
495
+ * Measured on one live session (`codex-turn:01a07e37-0658`): 4 commentary
496
+ * blocks / 754 characters in front of a single 495-character answer, so the
497
+ * operator read four paragraphs of progress notes before reaching the reply.
498
+ *
499
+ * ## The classification is an allow-list
500
+ *
501
+ * Exactly `phase === 'commentary'` folds. `final_answer`, a missing `phase` and
502
+ * any value codex has not shipped yet all stay in the body. The deny-list
503
+ * spelling — "fold everything that is not `final_answer`" — is rejected on
504
+ * #2196's discipline: it hands codex the power to hide the body of a bubble by
505
+ * adding a phase name, and the failure would be silent. Every `final_answer` is
506
+ * kept, not just the last: the measured corpus has turns carrying more than one.
507
+ *
508
+ * ## The fallback
509
+ *
510
+ * A turn with no non-empty `final_answer` keeps its commentary in the body —
511
+ * see {@link hasFinalAnswerProse}. Folding is only ever an improvement when
512
+ * there is something better to lead with.
513
+ *
514
+ * ## Why the `Thinking` chip and not a new label
515
+ *
516
+ * The folded commentary rides `../turn-body`'s existing `reasoning` kind, so it
517
+ * lands under the `Thinking (N)` heading the other readers already write, and
518
+ * `splitChatThinking` in `components/worktree/ChatMessageBubble` draws it in
519
+ * the chip that is already there. A second label (`Progress`) would read more
520
+ * precisely, and it was rejected on cost: these labels are baked into
521
+ * `chat_messages.content` **at read time**, so a new one is a string every
522
+ * future reader of the table has to keep folding forever, for rows nothing can
523
+ * re-label. Against that, the chip already means the right thing — "subordinate
524
+ * narration the reader may want and does not want first" — and the operator who
525
+ * reported #2420 called this content "thinking" in their own words. Same
526
+ * reasoning as {@link CODEX_THINKING_LABEL}, which is `Thinking` for the same
527
+ * reason.
448
528
  *
449
529
  * The layout — prose first, the calls folded into one labelled section — is
450
530
  * `../turn-body`'s and is shared with the other three readers (#2234).
@@ -454,12 +534,14 @@ function renderCodexTurn(turn) {
454
534
  const unknown = new Set();
455
535
  let textBlocks = 0;
456
536
  let toolBlocks = 0;
537
+ const foldsCommentary = hasFinalAnswerProse(turn);
457
538
  for (const item of turn.items) {
458
539
  if (item.type === 'AgentMessage') {
459
- const text = item.text?.trim() ?? '';
540
+ const text = agentMessageText(item);
460
541
  if (text.length === 0)
461
542
  continue;
462
- rendered.push({ kind: 'prose', text });
543
+ const folds = foldsCommentary && item.phase === exports.CODEX_COMMENTARY_PHASE;
544
+ rendered.push({ kind: folds ? 'reasoning' : 'prose', text });
463
545
  textBlocks += 1;
464
546
  continue;
465
547
  }
@@ -38,7 +38,9 @@
38
38
  * The four readers that push `aside` (claude, codex, antigravity, command-code)
39
39
  * are untouched by this Issue because none of them has been measured the way
40
40
  * opencode has; they can move a block at a time by switching kind, with no
41
- * change here.
41
+ * change here. Issue #2420 is the first time that happened: `./codex/transcript`
42
+ * now tags its `commentary` messages `reasoning` and nothing in this module
43
+ * moved.
42
44
  *
43
45
  * ## Why the order claim from #2041 / #2121 is narrowed rather than dropped
44
46
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "commandmate",
3
- "version": "0.32.1",
3
+ "version": "0.33.0",
4
4
  "description": "A local control plane for agent CLIs — orchestration and visibility for Claude Code, Codex, Gemini CLI, and more across Git worktrees",
5
5
  "keywords": [
6
6
  "claude-code",