@quantiya/codevibe-claude-plugin 2.0.20 → 2.0.22

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codevibe-claude",
3
- "version": "2.0.20",
3
+ "version": "2.0.22",
4
4
  "description": "Sync Claude Code sessions with iOS mobile app via AWS backend. Control Claude Code from your phone with real-time bidirectional synchronization.",
5
5
  "author": {
6
6
  "name": "CodeVibe Team"
@@ -130,6 +130,47 @@ if [ "${CODEVIBE_COMPANION_DIAGNOSTIC:-}" = "version" ]; then
130
130
  exit 0
131
131
  fi
132
132
 
133
+ # Primary-handoff isolation contract (the codex launcher established the
134
+ # direct-path `env -u` and the pane-command `unset`; this launcher adds the
135
+ # fresh-server `env -u` and the server scrub).
136
+ # `codevibe --agent claude` reaches this launcher with core's subprocess
137
+ # markers exported — including QUORUM_REVIEWER_SUBPROCESS=1, the reviewer
138
+ # gate that makes every hook in hooks/common.sh exit 0. That gate is right
139
+ # for reviewer/implementor subprocesses and wrong for the user's primary
140
+ # Companion session: if it reaches `claude`, no hook fires, no daemon
141
+ # starts, and the session never syncs to mobile. A tmux server STARTED by
142
+ # this launcher inherits the launcher's environment into its global
143
+ # environment, so the marker would also reach every pane on that server
144
+ # for the server's lifetime (an existing server does not copy it —
145
+ # see `update-environment`). The launcher therefore removes QUORUM at the
146
+ # exact primary handoff on every path below: `env -u` in front of the
147
+ # direct `claude` runs and in front of `tmux new-session` (so a fresh
148
+ # server never sees it), `unset` inside the pane command (so a server
149
+ # that already carries it — e.g. one started by a pre-2.0.19 launcher —
150
+ # still hands `claude` a clean environment), and a bounded scrub of the
151
+ # server's global environment. Reviewers and implementors spawned later
152
+ # add the marker again themselves and stay gated.
153
+ _CV_QUORUM_MARKER="QUORUM_REVIEWER_SUBPROCESS"
154
+
155
+ # Remove the reviewer gate from the global environment of the tmux server
156
+ # the current client talks to, if that server carries it (started by a
157
+ # 2.0.14–2.0.18 launcher, or by any tool that inherited the marker). The
158
+ # pane command / `env -u` already protect the session being launched; this
159
+ # keeps the marker from reaching panes the user opens later on that
160
+ # server. Bounded: exactly one named variable, only when the server
161
+ # reports it set; the prior value is logged before removal and a failed
162
+ # removal is logged rather than hidden. Never aborts the launcher.
163
+ cv_scrub_server_env() {
164
+ local prev
165
+ prev="$(tmux show-environment -g "$_CV_QUORUM_MARKER" 2>/dev/null)" || return 0
166
+ if tmux set-environment -g -u "$_CV_QUORUM_MARKER"; then
167
+ log "Removed $_CV_QUORUM_MARKER from the tmux server global environment (was: $prev)"
168
+ else
169
+ log "WARNING: failed to remove $_CV_QUORUM_MARKER from the tmux server global environment (was: $prev)"
170
+ fi
171
+ return 0
172
+ }
173
+
133
174
  # Metadata commands are intentionally short-lived and do not create a
134
175
  # Companion session. Run them directly in the foreground so a TTY invocation
135
176
  # cannot race a detached tmux session that exits before attach. Arguments and
@@ -141,7 +182,7 @@ case "${1:-}" in
141
182
  echo "Install Claude Code from https://docs.anthropic.com/claude/docs/claude-code" >&2
142
183
  exit 127
143
184
  fi
144
- exec claude "$@"
185
+ exec env -u "$_CV_QUORUM_MARKER" claude "$@"
145
186
  ;;
146
187
  esac
147
188
 
@@ -310,6 +351,7 @@ log "Arguments: $*"
310
351
  # (claude remains the foreground process for the duration).
311
352
  if [ -n "$TMUX" ]; then
312
353
  log "Already inside tmux, running claude directly"
354
+ cv_scrub_server_env
313
355
  _CV_AGENT_INVOKED="true"
314
356
  _CV_AGENT_STARTED_AT="$(date +%s)"
315
357
  # `|| _CV_RC=$?` is load-bearing: with `set -e`, a non-zero exit
@@ -319,7 +361,7 @@ if [ -n "$TMUX" ]; then
319
361
  # 0 leaves _CV_RC at its 0 default. printf's `|| true` keeps a
320
362
  # disk-full failure from clobbering diagnostics.
321
363
  _CV_RC=0
322
- claude --append-system-prompt "$CODEVIBE_SYSTEM_PROMPT" "$@" || _CV_RC=$?
364
+ env -u "$_CV_QUORUM_MARKER" claude --append-system-prompt "$CODEVIBE_SYSTEM_PROMPT" "$@" || _CV_RC=$?
323
365
  printf '%s' "$_CV_RC" > "$_CV_CLAUDE_EXIT_FILE" 2>/dev/null || true
324
366
  exit "$_CV_RC"
325
367
  fi
@@ -330,7 +372,7 @@ if [ ! -t 0 ] || [ ! -t 1 ]; then
330
372
  _CV_AGENT_INVOKED="true"
331
373
  _CV_AGENT_STARTED_AT="$(date +%s)"
332
374
  _CV_RC=0
333
- claude --append-system-prompt "$CODEVIBE_SYSTEM_PROMPT" "$@" || _CV_RC=$?
375
+ env -u "$_CV_QUORUM_MARKER" claude --append-system-prompt "$CODEVIBE_SYSTEM_PROMPT" "$@" || _CV_RC=$?
334
376
  printf '%s' "$_CV_RC" > "$_CV_CLAUDE_EXIT_FILE" 2>/dev/null || true
335
377
  exit "$_CV_RC"
336
378
  fi
@@ -358,9 +400,14 @@ done
358
400
  # 2. Runs claude
359
401
  # 3. Exits the tmux session when claude exits
360
402
 
361
- tmux new-session -d -s "$SESSION_NAME" -x "$(tput cols)" -y "$(tput lines)" \
362
- "export CODEVIBE_TMUX_SESSION='$SESSION_NAME'; export ENVIRONMENT='$ENVIRONMENT'; $CLAUDE_CMD; printf '%s' \"\$?\" > '$_CV_CLAUDE_EXIT_FILE'; exit"
403
+ env -u "$_CV_QUORUM_MARKER" tmux new-session -d -s "$SESSION_NAME" -x "$(tput cols)" -y "$(tput lines)" \
404
+ "unset $_CV_QUORUM_MARKER; export CODEVIBE_TMUX_SESSION='$SESSION_NAME'; export ENVIRONMENT='$ENVIRONMENT'; $CLAUDE_CMD; printf '%s' \"\$?\" > '$_CV_CLAUDE_EXIT_FILE'; exit"
363
405
  _CV_TMUX_STARTED="true"
406
+
407
+ # A server that already carries the gate (pre-existing, contaminated by a
408
+ # 2.0.14–2.0.18 launcher) hands this pane a clean environment via the
409
+ # `unset` above; scrub its global environment for later panes too.
410
+ cv_scrub_server_env
364
411
  _CV_AGENT_INVOKED="true"
365
412
  _CV_AGENT_STARTED_AT="$(date +%s)"
366
413
 
@@ -3741,8 +3741,8 @@ ${d.map(h=>`- ${h}`).join(`
3741
3741
  `)}`),u.push("No code was changed.");let p=kt(u.join(`
3742
3742
 
3743
3743
  `)).trim();if(p.length>tr)throw new Error("local Gemma brainstorm summary exceeded the size limit");return p}var zf={};_t(zf,{FrontmatterMalformed:()=>Pn,PacketAuditEmitError:()=>Do,PacketFidelityError:()=>Oo,PacketHashMismatch:()=>ii,PacketIoError:()=>Li,PacketNotFound:()=>An,PacketPermissionsLoose:()=>si,PacketUnverified:()=>oi,SchemaInvalid:()=>Tn,buildContinuationPacket:()=>Md,collectRepoStates:()=>va,computePacketHash:()=>Bi,createContinuationPacketReader:()=>Sa,createContinuationPacketWriter:()=>Oh,createDirtyStateCollector:()=>Fv,defaultGitExec:()=>Th,getPacketFilePath:()=>_n,getTaskDirectoryPath:()=>Fi,renderPacketMarkdown:()=>Ld,splitFrontmatter:()=>ba,validatePacketSchema:()=>ka});wa();ai();Fd();xh();var rT=E(require("react")),Np=E(require("path")),nw=E(require("os")),Mp=require("node:fs/promises"),nT=require("node:async_hooks"),iw=require("uuid");Ft();Ot();J();function Cr(t){return t+1}function St(t,e){return e<=0?"":t.length<=e?t:e===1?"\u2026":t.slice(0,e-1)+"\u2026"}function P0(t,e,r){let n=t??"";if(e&&(n===e||n.startsWith(e+"/"))&&(n="~"+n.slice(e.length)),n.length>r){if(r<=0)return"";if(r===1)return"\u2026";n="\u2026"+n.slice(n.length-(r-1))}return n}function aE(t,e){return t==="local_gemma_qat"?{text:`${(e??"").trim()||"local model"} \xB7 local`}:t==="local_unavailable"?{text:`\u26A0 ${(e??"").trim()||"local model"} offline \u2014 NL disabled`,color:"yellow"}:null}function cE(t){let{tier:e,homedir:r,columns:n,badge:i}=t,o=" \xB7 ",s=i?St(i.text,Math.max(0,n-o.length-e.length-2)):"",a=s?s.length+1:0,c=Math.max(0,n-a-o.length-e.length),d=P0(t.cwd,r,c),l=d?`${d}${o}${e}`:e;return{leftText:St(l,Math.max(0,n-a)),badgeText:s}}var Rs=null,mu=null;async function T0(t){return await new Function("m","return import(m)")(t)}var x0=T0;async function Zi(t){return x0(t)}async function dE(){return Rs||mu||(mu=(async()=>{let[t,e,r,n,i]=await Promise.all([Zi("ink"),Zi("ink-text-input"),Zi("ink-spinner"),Zi("ink-select-input"),Zi("gradient-string")]);return Rs={ink:t,inkTextInput:e,inkSpinner:r,inkSelectInput:n,gradientString:i},Rs})(),mu)}function se(){if(!Rs)throw new Error("ink-runtime not initialized \u2014 call `await initInkRuntime()` from the entrypoint before mounting any TUI component");return Rs}function lE(t){let e=null,r=null,n=null,i=()=>{if(!e){let s,a;e=new Promise((c,d)=>{s=c,a=d});try{Promise.resolve(t.start()).then(s,a)}catch(c){a(c)}}return e},o=async(s,a)=>{let c;try{if(await Promise.race([i().then(()=>"settled"),new Promise(l=>{c=setTimeout(()=>l("timeout"),a),c.unref?.()})])==="timeout"){t.onTimeout?.(s,a);let l=t.timeoutError?.(s,a);if(l)throw l}}finally{c&&clearTimeout(c)}};return{wait:(s="normal")=>s==="signal"?(n??=o("signal",t.signalTimeoutMs),n):(r??=o("normal",t.normalTimeoutMs),r)}}J();var Jf=2e3;function fu(t){return t instanceof Error?t:new Error(String(t))}function gu(t,e){try{t?.(e)}catch{}}function uE(t){let e=u=>{if(!u)return Promise.resolve();try{return Promise.resolve(u())}catch(p){return Promise.reject(p)}},r=(u,p)=>{if(!p)return Promise.resolve();let h=Date.now(),y=!1,g=setTimeout(()=>{y||m.warn("[workspace-shutdown] teardown phase still pending",{phase:u,waitedMs:Jf})},Jf);return g.unref?.(),e(p).finally(()=>{y=!0,clearTimeout(g);let f=Date.now()-h;f>=Jf&&m.warn("[workspace-shutdown] slow teardown phase settled",{phase:u,elapsedMs:f})})},n=r("flushPlannerCache",t.flushPlannerCache),i=r("disposeQuorumWorkspaces",t.disposeQuorumWorkspaces),o=r("drainLocalWorkspaces",t.drainLocalWorkspaces);try{t.clearPlannerSession?.()}catch{}let s=n.catch(u=>{gu(t.onPlannerFlushFailure,fu(u))}),a=Promise.allSettled([i,o]).then(async u=>{let p=[];for(let h of u){if(h.status==="fulfilled")continue;let y=fu(h.reason);p.push(y),gu(t.onWorkspaceFailure,y)}for(let[h,y]of[["drainShellSubmissions",t.drainShellSubmissions],["disposeAdvisoryAttachmentAuthority",t.disposeAdvisoryAttachmentAuthority],["disposeLocalDurableSessionResources",t.disposeLocalDurableSessionResources]])try{await r(h,y)}catch(g){let f=fu(g);p.push(f),gu(t.onWorkspaceFailure,f)}return p}),c=a.then(u=>{if(u.length>0)throw Object.assign(new Error("session teardown retained one or more workspace resources"),{causes:u})});c.catch(()=>{});let d=a.then(async u=>{let p=[...u];for(let[h,y]of[["finalizeContextItemPublications",t.finalizeContextItemPublications],["retireHostedSession",t.retireHostedSession]])try{await r(h,y)}catch(g){let f=fu(g);p.push(f),gu(t.onWorkspaceFailure,f)}if(p.length>0)throw Object.assign(new Error("session teardown retained one or more workspace resources"),{causes:p})});return{completion:Promise.all([s,d]).then(()=>{}),resourceRetirement:c}}function pE(t){let e=!1,r=()=>{};return{completion:new Promise(i=>{r=i}),start:()=>{e||(e=!0,Promise.resolve().then(t.runTeardown).catch(()=>{}).finally(()=>{try{t.unmount()}catch{}finally{r()}}))}}}var yr=require("ulid");function nt(t){if(!t)return"";let e="",r=0,n=t.length;for(;r<n;){let i=t[r],o=t.charCodeAt(r);if(i==="\x1B"){let s=t[r+1];if(s==="["){for(r+=2;r<n;){let a=t.charCodeAt(r);if(r++,a>=64&&a<=126)break}continue}if(s==="]"){for(r+=2;r<n;){if(t.charCodeAt(r)===7){r++;break}if(t[r]==="\x1B"&&t[r+1]==="\\"){r+=2;break}r++}continue}if(s==="P"||s==="X"||s==="^"||s==="_"){for(r+=2;r<n;){if(t.charCodeAt(r)===7){r++;break}if(t[r]==="\x1B"&&t[r+1]==="\\"){r+=2;break}r++}continue}r+=s===void 0?1:2;continue}if(o===155||o===157||o===144||o===152||o===158||o===159){r++;continue}if(i===`
3744
- `||i===" "||i===" "){e+=i,r++;continue}if(o<=31||o===127||o>=128&&o<=159){r++;continue}e+=i,r++}return e}function pn(t){let e=Math.max(0,Math.floor(t/1e3)),r=Math.floor(e/3600),n=Math.floor(e%3600/60),i=e%60;return r>0?`${r}:${String(n).padStart(2,"0")}:${String(i).padStart(2,"0")}`:`${n}:${String(i).padStart(2,"0")}`}function yu(t){let e=Math.max(0,Math.floor(Number.isFinite(t)?t:0));if(e>=999500)return`${(e/1e6).toFixed(1)}M`;if(e>=1e3){let r=e/1e3;return`${r>=10?r.toFixed(0):r.toFixed(1)}k`}return String(e)}function wc(t){switch(t.phase){case"preparing_workspace":return"Preparing an isolated workspace copy \u2014 this can take a while on a large folder";case"shadow_created":return"Workspace copy ready \u2014 starting implementor";case"implementor_running":{let e=typeof t.filesChanged=="number"?`, ${t.filesChanged} ${t.filesChanged===1?"file":"files"} changed`:"";return`Implementor working in shadow \u2014 round ${t.round}${e}`}case"diff_captured":{let e=[];t.created>0&&e.push(`+${t.created}`),t.modified>0&&e.push(`~${t.modified}`),t.deleted>0&&e.push(`-${t.deleted}`);let r=e.length>0?` (${e.join("/")})`:"";return`Diff captured: ${t.files} ${t.files===1?"file":"files"}${r}`}case"submitting_diff":return`Submitting changes for review \u2014 round ${t.round}`;case"reviewers_dispatched":return`Reviewers dispatched \u2014 ${t.seats} ${t.seats===1?"seat":"seats"}`;case"seat_update":return t.state==="running"?`Reviewer ${t.seatLabel} running`:`Reviewer ${t.seatLabel} submitted its verdict`;case"verdicts_progress":return`Verdicts ${t.received}/${t.expected} received`;case"revise_round":{let e=t.feedbackSummary?` \u2014 ${t.feedbackSummary}`:"";return`Revise round ${t.round} \u2014 re-running implementor${e}`}case"round_failed":return`Implementor round ${t.round} failed \u2014 ${t.reason}`;case"continuation_offered":return`Implementor halted (${t.reason}) \u2014 choose a continuation agent`;case"declared_tests_skipped":return`\u26A0 declared test(s) not run (absent): ${t.paths.join(", ")} \u2014 reviewers will assess`;case"promoting":return`Applying approved changes \u2014 ${t.files} ${t.files===1?"file":"files"}`;case"promoted":return`Applied ${t.files} ${t.files===1?"file":"files"} to your workspace`;case"discarding":return"Discarding workspace copy";case"discarded":return"Workspace copy discarded \u2014 your tree is unchanged";case"not_applied":return"Not applied \u2014 your tree is unchanged";case"waiting_user":return"Waiting for your decision";case"planner_classifying":return"Thinking\u2026";case"familiarizing":return"Reading the codebase to get familiar\u2026";case"agent_advisory":return"Waiting for agent replies\u2026";case"progress_cleared":return"";case"halt_notice":return t.message;default:{let e=t;return""}}}function Yf(t){if(t.phase==="declared_tests_skipped"){let e=t.paths.length;return`\u26A0 ${e} declared test${e===1?"":"s"} not run`}return wc(t)}var hE=500;function Zf(t,e){switch(e.type){case"USER_INPUT":return Qf(t,e.text,e.attachments,e.imagePaths);case"PLANNER_DECISION":return F0(t,e.decision,e.taskId,e.brainstorm);case"EVENT_RECEIVED":return $0(t,e.event,e.role??"implementor");case"REVIEWER_STATE_CHANGED":return H0(t,e.nodeId,e.seatId,e.newState);case"GATE_STATE_CHANGED":return U0(t,e.nodeId,e.gate);case"PLANNER_HEALTH_CHANGED":return{...t,plannerHealth:e.newState};case"SLASH_OUTPUT":return q0(t,e.command,e.output);case"CLARIFICATION_ANSWERED":return K0(t,e.answer);case"TASK_QUEUED":return{...t,queuedTasks:[...t.queuedTasks,e.queuedTask]};case"TASK_DEQUEUED":return{...t,queuedTasks:t.queuedTasks.filter(r=>r.queuedTaskId!==e.queuedTaskId)};case"TASK_LIFECYCLE":return j0(t,e.task);case"CLEAR_PENDING_CLARIFICATION":return{...t,pendingClarification:null};case"PLANNER_OFFER_PRESENTED":return G0(t,e.offer);case"CLEAR_PENDING_PLANNER_OFFER":return{...t,pendingPlannerOffer:null};case"STRUCTURAL_SUMMARY_GENERATED":return{...t,structuralSummary:e.summary,structuralSummaryError:null};case"STRUCTURAL_SUMMARY_FAILED":return{...t,structuralSummary:null,structuralSummaryError:e.error};case"GATE_PROMPT_RECEIVED":return z0(t,e.envelope);case"GATE_PROMPT_NOTES_REQUESTED":return Q0(t,e.promptEntryId,e.decisionDraft);case"GATE_PROMPT_SUBMIT_STARTED":return Z0(t,e.promptEntryId);case"GATE_PROMPT_DECISION_FENCED":return J0(t,e.promptEntryId,e.gateId,e.decisionAttemptId,e.canonicalRequestHash,e.decisionClaimId);case"GATE_PROMPT_RESOLVED":return eL(t,e.promptEntryId,e.gateId,e.postAction);case"GATE_PROMPT_SUBMIT_FAILED":return rL(t,e.promptEntryId,e.gateId);case"GATE_PROMPT_RESOLVED_EXTERNALLY":return tL(t,e.promptEntryId,e.gateId,e.serverDecision);case"GATE_RESOLUTION_RECEIVED":return Y0(t,e.resolution);case"GATE_PROMPT_ACTION_FENCED":return X0(t,e.gateId,e.decisionClaimId);case"GATE_ACTION_RECOVERY_CHANGED":return t.gateActionRecoveryBlocked===e.blocked?t:{...t,gateActionRecoveryBlocked:e.blocked};case"GATE_PROMPT_NOTES_CANCELLED":return nL(t,e.promptEntryId);case"GATE_SUMMARY_LOADED":return iL(t,e.gateId,e.panelModel);case"TEAM_STARTED":return oL(t,e.taskGroupId);case"TEAM_TRACK_ASSIGNED":return sL(t,e.trackIndex,e.state,e.taskId,e.agent);case"TEAM_MERGE_GATE":return aL(t,e.status,e.startedAt,e.endedAt);case"TEAM_HALTED":return cL(t,e.haltReason);case"TEAM_TRACK_TERMINAL":return Xf(t,e.trackIndex,e.state);case"TEAM_TRACK_REVISING":return Xf(t,e.trackIndex,"Revising");case"TEAM_TRACK_AWAITING_DECISION":return Xf(t,e.trackIndex,"AwaitingDecision");case"TEAM_GROUP_RESOLVED":return dL(t,e.outcome);case"TASK_PROGRESS":return B0(L0(O0(t,e.event),e.event),e.event);case"SHELL_ADVISORY":return rr(t,{kind:"advisory",id:(0,yr.ulid)(),timestamp:new Date().toISOString(),final:!0,source:e.source,text:e.text,...e.localOnly?{localOnly:!0}:{},...e.handoffExcluded?{handoffExcluded:!0}:{}});case"AUDIT_FLAG_INDEX_RETAINED":return lL(t,e.index);case"AUDIT_FLAG_RECORDED":return uL(t,e.entryId);case"REVIEWER_WIZARD_OPEN":return{...t,reviewerWizard:e.wizard};case"REVIEWER_WIZARD_CLOSE":return{...t,reviewerWizard:null};case"EXIT":return t;default:{let r=e;return t}}}function rr(t,e){let r=[...t.conversation,e],n=r.length>hE?r.slice(r.length-hE):r;return{...t,conversation:n}}var _0=new Set(["diff_captured","submitting_diff","reviewers_dispatched","seat_update","verdicts_progress","declared_tests_skipped","halt_notice"]),fE=new Set(["waiting_user","continuation_offered","round_failed","promoted","discarded","not_applied","progress_cleared"]),mE=new Set(["preparing_workspace","shadow_created","implementor_running","diff_captured","submitting_diff","reviewers_dispatched","seat_update","verdicts_progress","revise_round","declared_tests_skipped"]),C0=new Set(["shadow_created","diff_captured","submitting_diff","reviewers_dispatched","seat_update","verdicts_progress","revise_round","round_failed","continuation_offered","declared_tests_skipped","promoted","discarded","not_applied","halt_notice"]);function O0(t,e){let r=e.phase==="promoted"?"completed":e.phase==="discarded"||e.phase==="not_applied"?"cancelled":e.phase==="round_failed"?"failed":null;if(r===null)return t;let n="taskId"in e?e.taskId:void 0;if(!n)return t;let i=t.sessionTasks.get(n),o=new Map(t.sessionTasks);if(i){if(i.origin!=="single"||i.status!=="running")return t;o.set(n,{...i,status:r})}else o.set(n,{taskId:n,origin:"single",status:r,startedAt:new Date().toISOString()});return{...t,sessionTasks:o}}var D0=new Set(["reviewers_dispatched","seat_update","verdicts_progress"]),N0=new Set([...fE,"shadow_created","implementor_running","revise_round"]);function vu(t){for(let e of t.sessionTasks.values())if(e.origin==="single"&&(e.status==="running"||e.status==="cancelling"))return!0;return!1}function M0(t){return t.team!==null&&!t.team.groupResolved&&t.team.haltReason===null||vu(t)}function L0(t,e){return D0.has(e.phase)?M0(t)?{...t,lastReviewerProgress:{text:wc(e),at:new Date().toISOString()}}:t:N0.has(e.phase)&&t.lastReviewerProgress!==null?{...t,lastReviewerProgress:null}:t}function B0(t,e){let r=t;if(C0.has(e.phase)){let c={kind:"advisory",id:(0,yr.ulid)(),timestamp:new Date().toISOString(),final:!0,source:"shell",text:wc(e),...e.phase==="halt_notice"?{localOnly:!0}:{}};r=rr(r,c)}if(t.team!==null&&!t.team.groupResolved)return r;let n=t.progress;if(n!==null&&n.epoch!==void 0&&e.epoch!==void 0&&e.epoch<n.epoch)return r;let i=new Date().toISOString();if(fE.has(e.phase))return e.phase==="waiting_user"||n===null||n.epoch===void 0||e.epoch===n.epoch?{...r,progress:null}:r;if(_0.has(e.phase))return n!==null&&mE.has(n.phase)&&mE.has(e.phase)&&e.epoch===n.epoch?{...r,progress:{phase:e.phase,text:Yf(e),updatedAt:i,startedAt:n.startedAt,epoch:n.epoch,tokens:Math.max(n.tokens??0,e.tokens??0)||void 0}}:r;let o=n!==null&&e.epoch!==void 0&&e.epoch===n.epoch,s=o?n.startedAt:i,a=o?Math.max(n.tokens??0,e.tokens??0)||void 0:e.tokens||void 0;return{...r,progress:{phase:e.phase,text:Yf(e),updatedAt:i,startedAt:s,epoch:e.epoch,tokens:a}}}function Qf(t,e,r,n){let i={kind:"user-message",id:(0,yr.ulid)(),timestamp:new Date().toISOString(),final:!0,text:e,...r&&r.length?{attachments:r}:{},...n&&n.length?{imagePaths:n}:{}},o=rr(t,i),s={...o,inputHistory:[...o.inputHistory,e]};if(t.pendingClarification===null)return s;let a=t.pendingClarification.rounds,c=a.length-1;if(c<0||a[c].answer!==void 0)return s;let d=a.map((l,u)=>u===c?{question:l.question,answer:e}:l);return{...s,pendingClarification:{...t.pendingClarification,rounds:d,...r&&r.length?{attachments:r}:{},...n&&n.length?{attachmentPaths:[...t.pendingClarification.attachmentPaths??[],...n]}:{}}}}function F0(t,e,r,n){let i={kind:"planner-decision",id:(0,yr.ulid)(),timestamp:new Date().toISOString(),final:!0,action:e.action,rationale:e.rationale,taskId:r,...n?{brainstorm:n}:{}},o=rr(t,i);if(e.action==="ask_user"&&e.clarifying_question){let c={kind:"advisory",id:(0,yr.ulid)(),timestamp:new Date().toISOString(),final:!0,source:"planner",text:e.clarifying_question},d=rr(o,c),l=t.pendingClarification;if(l===null){let u=[...d.conversation].reverse().find(h=>h.kind==="user-message"),p=u?.text??"";return{...d,pendingClarification:{originalPrompt:p,rounds:[{question:e.clarifying_question}],conversationEntryId:c.id,...u?.attachments&&u.attachments.length?{attachments:u.attachments}:{},...u?.imagePaths&&u.imagePaths.length?{attachmentPaths:u.imagePaths}:{}}}}else return{...d,pendingClarification:{originalPrompt:l.originalPrompt,rounds:[...l.rounds,{question:e.clarifying_question}],conversationEntryId:c.id,...l.attachments&&l.attachments.length?{attachments:l.attachments}:{},...l.attachmentPaths&&l.attachmentPaths.length?{attachmentPaths:l.attachmentPaths}:{}}}}let a=(typeof e.advisory_summary=="string"?e.advisory_summary.trim():"").length>0?e.advisory_summary:e.action==="advisory_response"?(e.rationale??"").trim():"";if(a.length>0){let c={kind:"advisory",id:(0,yr.ulid)(),timestamp:new Date().toISOString(),final:!0,source:"planner",text:nt(a)},d=rr(o,c);return t.pendingClarification!==null?{...d,pendingClarification:null}:d}return t.pendingClarification!==null?{...o,pendingClarification:null}:o}function G0(t,e){let r=e.kind==="team_decomposition"?"This looks like it can run as a parallel agent team. How would you like to proceed?":"It sounds like you want to start building. How would you like to proceed?",n=e.options.map((c,d)=>` ${d+1}. ${c.label} \u2014 ${c.description}`),i=nt((e.rationale??"").trim()),o=[r,...i.length>0?["",i]:[],"",...n,"",`Reply with a number 1-${e.options.length}, or type anything else to continue.`].join(`
3745
- `),s={kind:"advisory",id:(0,yr.ulid)(),timestamp:new Date().toISOString(),final:!0,source:"shell",text:o,localOnly:!0};return{...rr(t,s),pendingPlannerOffer:{...e,conversationEntryId:s.id},pendingClarification:null}}function $0(t,e,r){if(t.conversation.some(o=>o.kind==="subagent-event"&&o.event.eventId===e.eventId))return t;let n=e.parentTaskId??"",i={kind:"subagent-event",id:(0,yr.ulid)(),timestamp:e.timestamp||new Date().toISOString(),final:!0,parentTaskId:n,role:r,event:e};return rr(t,i)}function H0(t,e,r,n){let i=t.conversation.findIndex(p=>p.kind==="reviewer-status-node"&&p.id===e);if(i===-1){let p=new Map(t.activeReviewerSeats);return p.set(r,n),{...t,activeReviewerSeats:p}}let o=t.conversation[i];if(o.kind!=="reviewer-status-node"||o.final)return t;let s=o.seats.map(p=>p.seatId===r?n:p),a=W0(s),d={...o,seats:s,quorumStatus:a,final:a==="PASS"||a==="REVISE"||a==="BLOCK"},l=[...t.conversation.slice(0,i),d,...t.conversation.slice(i+1)],u=new Map(t.activeReviewerSeats);return u.set(r,n),{...t,conversation:l,activeReviewerSeats:u}}function W0(t){return t.length===0?"queued":t.some(e=>e.status==="BLOCK")?"BLOCK":t.some(e=>e.status==="queued")?"queued":t.some(e=>e.status==="running")?"running":t.some(e=>e.status==="REVISE")?"REVISE":"PASS"}function U0(t,e,r){let n=t.conversation.findIndex(c=>c.kind==="gate-status-node"&&c.id===e);if(n===-1)return{...t,currentGate:r};let i=t.conversation[n];if(i.kind!=="gate-status-node"||i.final)return t;let o=r.status==="PASS"||r.status==="REVISE"||r.status==="BLOCK"||r.status==="merge_gate_pending",s={...i,gate:r,final:o},a=[...t.conversation.slice(0,n),s,...t.conversation.slice(n+1)];return{...t,conversation:a,currentGate:r}}function q0(t,e,r){let n={kind:"slash-output",id:(0,yr.ulid)(),timestamp:new Date().toISOString(),final:!0,command:e,output:r};return rr(t,n)}function K0(t,e){if(t.pendingClarification===null)return Qf(t,e);let r=t.pendingClarification.rounds.map((i,o,s)=>o===s.length-1&&i.answer===void 0?{question:i.question,answer:e}:i);return{...Qf(t,e),pendingClarification:{...t.pendingClarification,rounds:r}}}function j0(t,e){let r=new Map(t.runningTasks);e.status==="completed"||e.status==="cancelled"||e.status==="failed"?r.delete(e.taskId):r.set(e.taskId,e);let n=new Map(t.sessionTasks),i=t.sessionTasks.get(e.taskId),o=i?.origin==="single"&&(i.status==="completed"||i.status==="cancelled"||i.status==="failed"),s=e.status==="completed"||e.status==="cancelled"||e.status==="failed";return n.set(e.taskId,{taskId:e.taskId,agentKind:e.agentKind,origin:"single",status:o&&!s?i.status:e.status,startedAt:e.startedAt}),{...t,runningTasks:r,sessionTasks:n}}function V0(t,e){for(let r=0;r<t.conversation.length;r++){let n=t.conversation[r];if(n.kind==="gate-prompt"&&n.envelope.taskId===e&&n.final===!1)return r}return-1}function gE(t){return{kind:"gate-panel",id:(0,yr.ulid)(),timestamp:new Date().toISOString(),final:!0,panel:{variant:"prompt",envelope:t}}}function yE(t){return{kind:"gate-panel",id:(0,yr.ulid)(),timestamp:new Date().toISOString(),final:!0,panel:{variant:"summary",reviewSummary:t}}}function eg(t,e,r){let[n,...i]=r.queue,o={...r.queuedReviewSummaries??{}},s=o[n.gateId];delete o[n.gateId];let a=Object.keys(o).length>0?o:void 0,c=t.gateResolutions.get(n.gateId),d=t.gateActionClaims.has(n.gateId),l={...r,envelope:n,queue:i,uiState:c?{phase:"resolved",resolvedBy:"durable",resolution:c}:d?{phase:"claimed",decisionClaimId:t.gateActionClaims.get(n.gateId)??null}:{phase:"awaiting-number"},final:c!==void 0,reviewSummary:s,queuedReviewSummaries:a},u=[...t.conversation.slice(0,e),l,...t.conversation.slice(e+1)],p=rr({...t,conversation:u},gE(n));return s!==void 0&&s.rounds.length>0&&(p=rr(p,yE(s))),p}function z0(t,e){if(t.conversation.some(c=>c.kind==="gate-prompt"&&(c.envelope.gateId===e.gateId||c.queue.some(d=>d.gateId===e.gateId))))return t;let n=V0(t,e.taskId);if(n!==-1){let c=t.conversation[n];if(c.kind!=="gate-prompt")return t;let d={...c,queue:[...c.queue,e]},l=[...t.conversation.slice(0,n),d,...t.conversation.slice(n+1)];return{...t,conversation:l}}let i=t.gateResolutions.get(e.gateId),o=t.gateActionClaims.has(e.gateId),s={kind:"gate-prompt",id:(0,yr.ulid)(),timestamp:e.receivedAt||new Date().toISOString(),final:!!i,envelope:e,queue:[],uiState:i?{phase:"resolved",resolvedBy:"durable",resolution:i}:o?{phase:"claimed",decisionClaimId:t.gateActionClaims.get(e.gateId)??null}:{phase:"awaiting-number"}},a=rr(t,s);return rr(a,gE(e))}function J0(t,e,r,n,i,o){let s=t.conversation.findIndex(d=>d.kind==="gate-prompt"&&d.id===e);if(s===-1)return t;let a=t.conversation[s];if(a.kind!=="gate-prompt"||a.envelope.gateId!==r||a.uiState.phase==="resolved")return t;let c={...a,final:!1,uiState:{phase:"confirming",decisionAttemptId:n,canonicalRequestHash:i,decisionClaimId:o}};return{...t,conversation:[...t.conversation.slice(0,s),c,...t.conversation.slice(s+1)]}}function Y0(t,e){let r=t.gateResolutions.get(e.promptId);if(r)return r.eventId===e.eventId,t;let n=new Map(t.gateResolutions);n.set(e.promptId,e);let i=t.conversation.findIndex(a=>a.kind==="gate-prompt"&&a.envelope.gateId===e.promptId);if(i===-1)return{...t,gateResolutions:n};let o=t.conversation[i];if(o.kind!=="gate-prompt")return{...t,gateResolutions:n};if(o.queue.length>0)return{...eg(t,i,o),gateResolutions:n};let s={...o,final:!0,uiState:{phase:"resolved",resolvedBy:"durable",resolution:e}};return{...t,gateResolutions:n,conversation:[...t.conversation.slice(0,i),s,...t.conversation.slice(i+1)]}}function X0(t,e,r){let n=t.gateActionClaims.get(e);if(t.gateActionClaims.has(e)&&n!==r)return t;let i=new Map(t.gateActionClaims);i.set(e,r);let o=t.conversation.findIndex(c=>c.kind==="gate-prompt"&&c.envelope.gateId===e);if(o===-1)return{...t,gateActionClaims:i};let s=t.conversation[o];if(s.kind!=="gate-prompt"||s.uiState.phase==="resolved")return{...t,gateActionClaims:i};let a={...s,final:!1,uiState:{phase:"claimed",decisionClaimId:r}};return{...t,gateActionClaims:i,conversation:[...t.conversation.slice(0,o),a,...t.conversation.slice(o+1)]}}function Q0(t,e,r){let n=t.conversation.findIndex(a=>a.kind==="gate-prompt"&&a.id===e);if(n===-1)return t;let i=t.conversation[n];if(i.kind!=="gate-prompt"||i.uiState.phase!=="awaiting-number")return t;let o={...i,uiState:{phase:"awaiting-notes",decisionDraft:r}},s=[...t.conversation.slice(0,n),o,...t.conversation.slice(n+1)];return{...t,conversation:s}}function Z0(t,e){let r=t.conversation.findIndex(s=>s.kind==="gate-prompt"&&s.id===e);if(r===-1)return t;let n=t.conversation[r];if(n.kind!=="gate-prompt"||n.uiState.phase!=="awaiting-number"&&n.uiState.phase!=="awaiting-notes")return t;let i={...n,uiState:{phase:"submitting"}},o=[...t.conversation.slice(0,r),i,...t.conversation.slice(r+1)];return{...t,conversation:o}}function eL(t,e,r,n){let i=t.conversation.findIndex(c=>c.kind==="gate-prompt"&&c.id===e);if(i===-1)return t;let o=t.conversation[i];if(o.kind!=="gate-prompt"||o.envelope.gateId!==r)return t;if(o.queue.length>0)return eg(t,i,o);let s={...o,uiState:{phase:"resolved",postAction:n,resolvedBy:"self"},final:!0},a=[...t.conversation.slice(0,i),s,...t.conversation.slice(i+1)];return{...t,conversation:a}}function tL(t,e,r,n){let i=t.conversation.findIndex(c=>c.kind==="gate-prompt"&&c.id===e);if(i===-1)return t;let o=t.conversation[i];if(o.kind!=="gate-prompt"||o.envelope.gateId!==r||o.uiState.phase==="resolved")return t;if(o.queue.length>0)return eg(t,i,o);let s={...o,uiState:{phase:"resolved",resolvedBy:"server",serverDecision:n},final:!0},a=[...t.conversation.slice(0,i),s,...t.conversation.slice(i+1)];return{...t,conversation:a}}function rL(t,e,r){let n=t.conversation.findIndex(a=>a.kind==="gate-prompt"&&a.id===e);if(n===-1)return t;let i=t.conversation[n];if(i.kind!=="gate-prompt"||i.envelope.gateId!==r||i.uiState.phase!=="submitting"&&i.uiState.phase!=="confirming")return t;let o={...i,uiState:{phase:"awaiting-number"}},s=[...t.conversation.slice(0,n),o,...t.conversation.slice(n+1)];return{...t,conversation:s}}function nL(t,e){let r=t.conversation.findIndex(s=>s.kind==="gate-prompt"&&s.id===e);if(r===-1)return t;let n=t.conversation[r];if(n.kind!=="gate-prompt"||n.uiState.phase!=="awaiting-notes")return t;let i={...n,uiState:{phase:"awaiting-number"}},o=[...t.conversation.slice(0,r),i,...t.conversation.slice(r+1)];return{...t,conversation:o}}function iL(t,e,r){let n=t.conversation.findIndex(d=>d.kind==="gate-prompt"&&d.final===!1&&d.envelope.gateId===e);if(n===-1){let d=t.conversation.findIndex(h=>h.kind==="gate-prompt"&&h.final===!1&&h.queue.some(y=>y.gateId===e));if(d===-1)return t;let l=t.conversation[d];if(l.kind!=="gate-prompt")return t;let u={...l,queuedReviewSummaries:{...l.queuedReviewSummaries??{},[e]:r}},p=[...t.conversation.slice(0,d),u,...t.conversation.slice(d+1)];return{...t,conversation:p}}let i=t.conversation[n];if(i.kind!=="gate-prompt")return t;let o=i.reviewSummary===void 0,s={...i,reviewSummary:r},a=[...t.conversation.slice(0,n),s,...t.conversation.slice(n+1)],c={...t,conversation:a};return o&&r.rounds.length>0?rr(c,yE(r)):c}function oL(t,e){if(t.team){if(t.team.taskGroupId===e)return t;if(t.team.taskGroupId==="")return{...t,team:{...t.team,taskGroupId:e}}}return{...t,team:{taskGroupId:e,tracks:new Map,mergeGate:"none",haltReason:null,groupResolved:!1}}}function sL(t,e,r,n,i){let o=t.team??{taskGroupId:"",tracks:new Map,mergeGate:"none",haltReason:null,groupResolved:!1},s=new Map(o.tracks),a=s.get(e),c={state:r,taskId:n??a?.taskId,agent:i??a?.agent};s.set(e,c);let d=t.sessionTasks;if(c.taskId){let l=t.sessionTasks.get(c.taskId);d=new Map(t.sessionTasks),d.set(c.taskId,{taskId:c.taskId,agentKind:c.agent??l?.agentKind,origin:"team",status:r,startedAt:l?.startedAt??new Date().toISOString()})}return{...t,team:{...o,tracks:s},sessionTasks:d}}function wu(t,e){if(t==null||e==null)return;let r=Date.parse(t),n=Date.parse(e);if(!(isNaN(r)||isNaN(n)))return Math.max(0,n-r)}function aL(t,e,r,n){if(!t.team)return t;let i=t.team;if(e==="pending"){if(n!=null){if(i.mergeGateStartedAt==null||i.mergeGateElapsedMs!=null)return t;let c=wu(i.mergeGateStartedAt,n);return c==null?t:{...t,team:{...i,mergeGateElapsedMs:c}}}if(i.mergeGate==="pass"||i.mergeGate==="fail"||i.groupResolved||i.haltReason!=null)return t;let s=i.mergeGateStartedAt!=null?Date.parse(i.mergeGateStartedAt):NaN,a=r!=null?Date.parse(r):NaN;return i.mergeGateStartedAt==null||isNaN(s)||!isNaN(a)&&a>s?{...t,team:{...i,mergeGate:"pending",mergeGateStartedAt:r,mergeGateElapsedMs:void 0}}:t}let o=i.mergeGateElapsedMs??wu(i.mergeGateStartedAt,n);return{...t,team:{...i,mergeGate:e,mergeGateElapsedMs:o}}}function cL(t,e){if(!t.team)return t;let r=t.team,n=r.mergeGateStartedAt!=null&&r.mergeGateElapsedMs==null?wu(r.mergeGateStartedAt,new Date().toISOString()):r.mergeGateElapsedMs;return{...t,team:{...r,haltReason:e,mergeGateElapsedMs:n},lastReviewerProgress:null}}function Xf(t,e,r){if(!t.team)return t;let n=t.team.tracks.get(e);if(!n||n.state===r)return t;let i=new Map(t.team.tracks);i.set(e,{...n,state:r});let o=t.sessionTasks,s=n.taskId?t.sessionTasks.get(n.taskId):void 0;return n.taskId&&s&&(o=new Map(t.sessionTasks),o.set(n.taskId,{...s,status:r})),{...t,team:{...t.team,tracks:i},sessionTasks:o}}function dL(t,e){if(!t.team||t.team.groupResolved&&t.team.outcome===e)return t;let r=t.team,n=r.mergeGateStartedAt!=null&&r.mergeGateElapsedMs==null?wu(r.mergeGateStartedAt,new Date().toISOString()):r.mergeGateElapsedMs;return{...t,team:{...r,groupResolved:!0,outcome:e,mergeGateElapsedMs:n},lastReviewerProgress:null}}function lL(t,e){let r=t.auditFlagIndex,n=r?new Set([...r.flagged,...e.flagged]):e.flagged;return{...t,auditFlagIndex:{...e,flagged:n}}}function uL(t,e){let r=t.auditFlagIndex;if(!r||r.flagged.has(e))return t;let n=new Set(r.flagged);return n.add(e),{...t,auditFlagIndex:{...r,flagged:n}}}function pL(t){return{...{session:t.session,plannerHealth:"Available",conversation:[],runningTasks:new Map,sessionTasks:new Map,lastReviewerProgress:null,queuedTasks:[],activeReviewerSeats:new Map,currentGate:null,pendingClarification:null,pendingPlannerOffer:null,inputHistory:[],structuralSummary:null,structuralSummaryError:null,team:null,progress:null,reviewerWizard:null,auditFlagIndex:null,gateResolutions:new Map,gateActionClaims:new Map,gateActionRecoveryBlocked:!1},...t.initial??{}}}function tg(t){let e=pL(t),r=new Set;function n(){return e}function i(s){e=Zf(e,s);for(let a of r)a(e)}function o(s){return r.add(s),()=>{r.delete(s)}}return{getState:n,dispatch:i,subscribe:o}}var Se=E(require("react"));var eo=E(require("react"));var hL="#C026D3",wE="multi-agent orchestration";function mL(){return process.env.NO_COLOR==="1"||process.env.TERM==="dumb"||process.env.CODEVIBE_NO_TUI==="1"}function vE(){let{ink:t}=se(),{Box:e,Text:r}=t;return mL()?eo.createElement(e,{flexDirection:"column",marginBottom:1},eo.createElement(r,null,"CodeVibe"),eo.createElement(r,null,wE)):eo.createElement(e,{flexDirection:"column",marginBottom:1},eo.createElement(r,{color:hL,bold:!0},"CodeVibe"),eo.createElement(r,{dimColor:!0},wE))}var Dr=E(require("react"));var bu=E(require("react"));function bE(t){let{ink:e}=se(),{Box:r,Text:n}=e;return bu.createElement(r,{flexDirection:"row"},bu.createElement(n,{color:"cyan"},"> "),bu.createElement(n,null,t.entry.text))}var Is=E(require("react"));function kE(t){let{ink:e}=se(),{Box:r,Text:n}=e;return Is.createElement(r,{flexDirection:"column"},Is.createElement(n,null,Is.createElement(n,{color:"magenta"},"\u25CF "),`Planner classified: ${t.entry.action}`),Is.createElement(r,{marginLeft:2},Is.createElement(n,{dimColor:!0},`rationale: ${JSON.stringify(t.entry.rationale)}`)))}var Un=E(require("react"));function fL(t){if(t.kind==="NOTIFICATION"&&"payload"in t&&t.payload&&typeof t.payload=="object"&&typeof t.payload.message=="string")return t.payload.message;switch(t.kind){case"EXECUTOR_REFUSAL":return`refusal ${t.payload.refusalCategory}: ${t.payload.refusalDetail}`;case"TASK_BYPASS":return`bypass: ${t.payload.bypassReason}`;case"USER_PROMPT":case"ASSISTANT_RESPONSE":case"INTERACTIVE_PROMPT":case"NOTIFICATION":return t.kind.toLowerCase();case"PROCESS_SPAWNED":return"process spawned";case"FILE_CHANGE":return"file change";case"TOOL_USE":return"tool use";case"VERIFICATION_RUN":return"verification run";case"PROCESS_EXITED":return"process exited";default:{let e=t;return"event"}}}function EE(t){return!t||typeof t!="object"||Array.isArray(t)?null:t}function gL(t,e){let r=EE(t);if(!r)return null;let n=r.number,i=r.text,o=r.label,s=typeof n=="string"&&n.length>0?n:String(e+1),a=typeof i=="string"&&i.length>0?i:typeof o=="string"&&o.length>0?o:null;if(!a)return null;let c=r.description;return{number:s,text:a,...typeof c=="string"&&c.length>0?{description:c}:{}}}function SE(t){return Array.isArray(t)?t.map((e,r)=>gL(e,r)).filter(e=>e!==null):[]}function yL(t){let e=t.questions;if(Array.isArray(e)&&e.length>0)return e.map(i=>{let o=EE(i);if(!o||typeof o.question!="string"||o.question.length===0)return null;let s=SE(o.options);return s.length===0?null:{question:o.question,...typeof o.header=="string"&&o.header.length>0?{header:o.header}:{},options:s,...typeof o.instructions=="string"&&o.instructions.length>0?{instructions:o.instructions}:{}}}).filter(i=>i!==null);let r=SE(t.options);return r.length===0?[]:[{question:typeof t.question=="string"&&t.question.length>0?t.question:typeof t.content=="string"&&t.content.length>0?t.content:"Interactive prompt",options:r,...typeof t.instructions=="string"&&t.instructions.length>0?{instructions:t.instructions}:{}}]}function RE(t){let{ink:e}=se(),{Box:r,Text:n}=e,i=t.entry.event;if(i.kind==="INTERACTIVE_PROMPT"&&"payload"in i&&i.payload&&typeof i.payload=="object"){let s=yL(i.payload);if(s.length>0)return Un.createElement(r,{marginLeft:2,flexDirection:"column"},Un.createElement(n,{dimColor:!0},"\u23BF interactive prompt"),...s.flatMap((a,c)=>[Un.createElement(n,{key:`q-${c}`,bold:!0},`${a.header?`${a.header}: `:""}${a.question}`),...a.options.map(d=>Un.createElement(n,{key:`q-${c}-opt-${d.number}`},` ${d.number}. ${d.text}${d.description?` \u2014 ${d.description}`:""}`)),...a.instructions?[Un.createElement(n,{key:`q-${c}-instructions`,dimColor:!0},` ${a.instructions}`)]:[]]))}let o=fL(t.entry.event);return Un.createElement(r,{marginLeft:2},Un.createElement(n,{dimColor:!0},"\u23BF "),Un.createElement(n,null,o))}var qn=E(require("react"));var wL={queued:"\u25CC",running:"\u25D0",PASS:"\u2713",REVISE:"\u270E",BLOCK:"\u2717"},vL={queued:"gray",running:"yellow",PASS:"green",REVISE:"yellow",BLOCK:"red"};function IE(t){let{ink:e}=se(),{Box:r,Text:n}=e,i=t.entry.seats.length,o=t.entry.seats.filter(s=>s.status==="PASS"||s.status==="REVISE"||s.status==="BLOCK").length;return qn.createElement(r,{flexDirection:"column"},qn.createElement(n,null,qn.createElement(n,{color:"magenta"},"\u25CF "),`Reviewer quorum (${o}/${i} done): ${t.entry.quorumStatus}`),...t.entry.seats.map(s=>qn.createElement(r,{key:s.seatId,marginLeft:2},qn.createElement(n,{dimColor:!0},"\u23BF "),qn.createElement(n,null,`${s.seatId} ${s.reviewerKind.padEnd(7)} `),qn.createElement(n,{color:vL[s.status]},wL[s.status]),qn.createElement(n,null,` ${s.status}`))))}var ku=E(require("react"));function AE(t){let{ink:e}=se(),{Text:r}=e,n=t.entry.gate;return ku.createElement(r,null,ku.createElement(r,{color:"magenta"},"\u25CF "),ku.createElement(r,null,`Gate: ${n.gateKind} Status: ${n.status} Auto-revise: ${n.autoReviseRound}/${n.autoReviseCap}`))}var vc=E(require("react"));function PE(t){let{ink:e}=se(),{Box:r,Text:n}=e;return vc.createElement(r,{flexDirection:"column"},vc.createElement(n,{color:"cyan"},t.entry.command),vc.createElement(r,{marginLeft:2},vc.createElement(n,null,t.entry.output)))}var Su=E(require("react"));function TE(t){let{ink:e}=se(),{Text:r}=e,n=t.entry.source==="planner"?"magenta":"yellow";return Su.createElement(r,null,Su.createElement(r,{color:n},"\u25CF "),Su.createElement(r,{italic:!0},t.entry.text))}var Et=E(require("react"));var Or="orchestration_escalated_gate",to="orchestration_final_approval",nr="continuation_offer_handoff";var bL=["CLAUDE","CODEX","ANTIGRAVITY"],kL=["CLAUDE","CODEX","GEMINI","ANTIGRAVITY"];function OE(t,e){return t?.id==="CONTINUE_WITH"&&t.targetAgent===e}function DE(t){return t?.id==="CANCEL"&&!t.targetAgent}function xE(t){return t.length!==4?!1:bL.every((e,r)=>OE(t[r],e))&&DE(t[3])}function SL(t){return t.length!==5?!1:kL.every((e,r)=>OE(t[r],e))&&DE(t[4])}function EL(t){if(xE(t))return[...t];if(!SL(t))return null;let e=t.filter(r=>r.targetAgent!=="GEMINI");return xE(e)?e:null}function NE(t){if(t.type!=="INTERACTIVE_PROMPT")return null;let e=t.metadata,r=null;if(e&&typeof e=="object")r=e;else if(typeof e=="string")try{let ee=JSON.parse(e);ee&&typeof ee=="object"&&!Array.isArray(ee)&&(r=ee)}catch{return null}if(!r)return null;let n=r.prompt_kind;if(n!==Or&&n!==to&&n!==nr)return null;let i=n,o=r.payload;if(!o||typeof o!="object"||Array.isArray(o))return null;let s=o,a=s.taskId,c=s.gateId;if(typeof a!="string"||a.length===0||typeof c!="string"||c.length===0)return null;let d=s.decisionProtocolVersion;if(d!==void 0&&d!==1&&d!==2)return null;let l=d??1,u=s.outcome;if(!u||typeof u!="object"||Array.isArray(u))return null;let p=u,h=p.round;if(typeof h!="number"||!Number.isFinite(h))return null;let y=s.options;if(!Array.isArray(y))return null;if(i===nr){if(y.length!==4&&y.length!==5)return null}else{let ee=i===Or?5:2;if(y.length!==ee)return null}let g=[];for(let ee of y){if(!ee||typeof ee!="object"||Array.isArray(ee))return null;let H=ee,W=H.id,ve=H.label,Q=H.description;if(typeof W!="string"||W.length===0||typeof ve!="string"||typeof Q!="string")return null;let D=H.targetAgent,Z=typeof D=="string"?D:void 0;g.push({id:W,label:ve,description:Q,...Z!==void 0?{targetAgent:Z}:{}})}if(i===nr){let ee=EL(g);if(!ee)return null;g=ee}let f=p.reason,w=typeof f=="string"?f:void 0,v=r.summary,b=typeof v=="string"?v:void 0,S=IL(r.timeline),R=AL(r.roundHistory),x=PL(r.verdictDetailsUnavailable),P=r.offerId,O=typeof P=="string"?P:void 0,C=r.sourceAgent,T=typeof C=="string"?C:void 0,V=r.packetHash,X=typeof V=="string"?V:void 0,L=s.taskGroupId,Re=s.groupGeneration,Ne;if(L!==void 0||Re!==void 0){if(i!==Or||typeof L!="string"||L.length===0||typeof Re!="number"||!Number.isSafeInteger(Re)||Re<1)return null;Ne={taskGroupId:L,groupGeneration:Re,protocolVersion:2}}let $=typeof t.timestamp=="string"?t.timestamp:"";return{promptKind:i,decisionProtocolVersion:l,taskId:a,gateId:c,currentRound:h,options:g,reason:w,summary:b,receivedAt:$,...S?{timeline:S}:{},...R?{roundHistory:R}:{},...x?{verdictDetails:x}:{},...O!==void 0?{offerId:O}:{},...T!==void 0?{sourceAgent:T}:{},...X!==void 0?{packetHash:X}:{},...Ne?{groupEscalation:Ne}:{}}}var RL=[{id:"ACCEPT",label:"Accept",description:"Keep every applied track as-is."},{id:"ACCEPT_WITH_NOTES",label:"Accept with notes",description:"Keep the applied tracks and attach a note."},{id:"REJECT_WITH_NOTES",label:"Reject with notes",description:"Revert every applied track and attach a note."},{id:"REJECT_RESTART",label:"Reject and restart",description:"Revert every applied track and re-run the whole team."},{id:"ABORT_TASK",label:"Abort",description:"Revert every applied track and stop."}];function ME(t){return{promptKind:Or,taskId:`group:${t.taskGroupId}`,gateId:`group-escalation:${t.taskGroupId}`,currentRound:0,options:RL,...t.haltReason?{reason:t.haltReason}:{},receivedAt:t.receivedAt??"",groupEscalation:{taskGroupId:t.taskGroupId,protocolVersion:1}}}function IL(t){if(!Array.isArray(t))return;let e=[];for(let r of t){if(!r||typeof r!="object"||Array.isArray(r))continue;let n=r,i=n.at,o=n.kind;typeof i!="string"||typeof o!="string"||e.push({at:i,kind:o})}return e.length>0?e:void 0}function AL(t){if(!Array.isArray(t))return;let e=[];for(let r of t){if(!r||typeof r!="object"||Array.isArray(r))continue;let n=r,i=n.round,o=n.kind,s=n.reason;typeof i!="number"||!Number.isFinite(i)||typeof o!="string"||typeof s!="string"||e.push({round:i,kind:o,reason:s})}return e.length>0?e:void 0}function PL(t){if(!(typeof t!="string"||t.length===0))return t==="size"?{status:"unavailable",reason:"size"}:t==="encryption_error"?{status:"unavailable",reason:"encryption_error"}:{status:"unavailable",reason:"unavailable_other"}}function LE(t,e){if(typeof e!="number"||!Number.isInteger(e)||e<1||e>t.options.length)return null;let r=t.options[e-1];if(!r||typeof r.id!="string"||r.id.length===0)return null;let n=r.id.toLowerCase(),i=n.endsWith("_with_notes");return n==="continue_with"?{kind:n,needsNotes:!1,targetAgent:r.targetAgent}:{kind:n,needsNotes:i}}var TL={consensus_reject:{label:"Reviewers rejected",explanation:"The review panel agreed to reject this implementation."},consensus_disagreement:{label:"Reviewers disagreed",explanation:"The reviewers couldn't reach consensus and escalated the decision to you."},reviewer_requested_escalation:{label:"Reviewer escalated",explanation:"A reviewer explicitly asked for your decision on this change."},rounds_exhausted:{label:"Revision limit reached",explanation:"The automatic revision limit was reached without consensus."},tier_disallows_auto_revise:{label:"Auto-revise unavailable",explanation:"Your plan doesn't include automatic revision rounds, so this is escalated to you."},reviewer_error:{label:"Reviewer error",explanation:"A reviewer failed to complete, so the gate was escalated for your decision."},blocked_by_review:{label:"Blocked by review",explanation:"Review found blocking issues that need your decision."},auto_revise_cap_exhausted:{label:"Revision limit reached",explanation:"The automatic revision budget was exhausted."},insufficient_quorum:{label:"Not enough reviewers",explanation:"Too few reviewers responded to decide automatically."},policy_resolution_failed:{label:"Policy check failed",explanation:"The orchestration policy couldn't resolve this gate automatically."},policy_no_progress:{label:"No progress detected",explanation:"Successive revision rounds stopped making progress."},policy_repeated_finding:{label:"Repeated issue",explanation:"The same issue recurred across rounds."},policy_reviewer_conflict:{label:"Reviewer conflict",explanation:"Reviewers produced conflicting verdicts policy couldn't reconcile."},policy_risk_stopped:{label:"Stopped for safety",explanation:"A potentially risky action was detected and stopped for your review."},parser_uncertain:{label:"Couldn't parse proposal",explanation:"The agent's output couldn't be confidently parsed as a proposal."},final_approval:{label:"Final approval",explanation:"The work is complete and awaiting your final approval."}},ng={APPROVE:"Approved",REJECT:"Rejected",REVISE:"Requested changes",ESCALATE:"Escalated"};function As(t){if(!t)return null;let e=TL[t];return e?{label:e.label,explanation:e.explanation}:{label:t,explanation:null}}function rg(t){return ng[t]??t}function xL(t){if(!t||typeof t!="object"||Array.isArray(t))return{status:"unavailable",reason:"decrypt_failed"};let e=t,r=e.reviewers;if(!Array.isArray(r))return{status:"unavailable",reason:"decrypt_failed"};let n=[];for(let o of r){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,a=s.seatId;if(typeof a!="number"||!Number.isInteger(a))continue;let c=s.role;if(typeof c!="string"||c.length===0)continue;let d=s.reviewerAgent;if(typeof d!="string")continue;let l=s.decision;if(typeof l!="string")continue;let u=s.findings,p=Array.isArray(u)?u.filter(g=>typeof g=="string"):[],h=s.findingsTruncated===!0,y=typeof s.truncatedFindingCount=="number"&&Number.isFinite(s.truncatedFindingCount)?s.truncatedFindingCount:0;n.push({seatId:a,role:c,reviewerAgent:d,decision:l,findings:p,findingsTruncated:h,truncatedFindingCount:y})}if(n.length===0)return{status:"unavailable",reason:"decrypt_failed"};let i=e.findingsOmittedForSize===!0;return{status:"available",reviewers:n,findingsOmittedForSize:i}}function BE(t,e,r){let n=t.verdictDetails;if(!n||typeof n!="object"||Array.isArray(n))return;let i=n.encrypted;if(typeof i!="string"||i.length===0)return;let o;try{o=r(i,e)}catch{return{status:"unavailable",reason:"decrypt_failed"}}return xL(o)}function FE(t){let e=t.verdictDetails;if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e.encrypted;return typeof r=="string"&&r.length>0}var _E="Full review in the audit browser",_L="Reviewer details unavailable",CE="full review in the audit browser";function CL(t,e){return e>0?`(${e} more \u2014 ${CE})`:t?`(more \u2014 ${CE})`:null}function GE(t){let e=t.summary??null,r=As(t.reason),n=r?.label??null,i=r?.explanation??null,o=`Round ${t.currentRound}`,s=(t.timeline??[]).map(g=>({kind:g.kind,at:g.at})),a=OL(t.timeline),c=t.roundHistory??[],d=c.length>1?c.map(g=>({round:g.round,reasonLabel:As(g.reason)?.label??g.reason})):[],l=c.length>1&&c.some(g=>g.omittedEarlier===!0),u=[],p=null,h=null,y=t.verdictDetails;return y&&(y.status==="available"?(u=y.reviewers.map(g=>{let f=CL(g.findingsTruncated,g.truncatedFindingCount);return{seatId:g.seatId,role:g.role,reviewerAgent:g.reviewerAgent,header:`Reviewer ${g.seatId} (${g.role}, ${g.reviewerAgent}): ${rg(g.decision)}`,findings:g.findings,truncationHint:f}}),y.findingsOmittedForSize&&(p=_E)):(h=_L,y.reason==="size"&&(p=_E))),{headline:e,reasonLabel:n,reasonExplanation:i,roundLabel:o,timeline:s,elapsedSeconds:a,cascade:d,cascadeOmittedEarlier:l,reviewers:u,panelTruncationHint:p,reviewerUnavailableLine:h}}function $E(t){if(!t||typeof t!="object")return null;let e=l=>typeof l=="number"&&Number.isFinite(l)?l:null,r=l=>Array.isArray(l)?l.filter(u=>typeof u=="string"):[],n=null;if(e(t.schemaVersion)===2&&t.requirements&&t.reviewQuorum&&t.mergeGate&&t.durations&&t.tokenUsage){let l=Array.isArray(t.reviewQuorum.seats)?t.reviewQuorum.seats:[],u=Array.isArray(t.implementors)?t.implementors:[],p=Array.isArray(t.tokenUsage.invocations)?t.tokenUsage.invocations:[];n={schemaVersion:2,requirements:{problem:typeof t.requirements.problem=="string"?t.requirements.problem:"",expectedOutputs:r(t.requirements.expectedOutputs)},implementors:u.filter(h=>!!h&&typeof h=="object").map(h=>({agent:typeof h.agent=="string"?h.agent:"unknown",trackIndex:e(h.trackIndex),taskId:typeof h.taskId=="string"?h.taskId:""})),reviewQuorum:{seats:l.filter(h=>!!h&&typeof h=="object").map(h=>({seatId:e(h.seatId)??-1,role:typeof h.role=="string"?h.role:"",agent:typeof h.agent=="string"?h.agent:""})),roundCount:e(t.reviewQuorum.roundCount)??0,revisionCount:e(t.reviewQuorum.revisionCount)??0},mergeGate:{applicable:t.mergeGate.applicable===!0,outcome:typeof t.mergeGate.outcome=="string"?t.mergeGate.outcome:"unavailable",resolution:typeof t.mergeGate.resolution=="string"?t.mergeGate.resolution:null},durations:{taskElapsedMs:e(t.durations.taskElapsedMs),reviewerElapsedMs:e(t.durations.reviewerElapsedMs),availability:typeof t.durations.availability=="string"?t.durations.availability:"unavailable"},tokenUsage:{knownTotal:e(t.tokenUsage.knownTotal),knownInput:e(t.tokenUsage.knownInput),knownOutput:e(t.tokenUsage.knownOutput),knownCachedInput:e(t.tokenUsage.knownCachedInput),availability:typeof t.tokenUsage.availability=="string"?t.tokenUsage.availability:"unavailable",unavailableRoles:r(t.tokenUsage.unavailableRoles),invocations:p.filter(h=>!!h&&typeof h=="object").map(h=>({role:typeof h.role=="string"?h.role:"unknown",agent:typeof h.agent=="string"?h.agent:"unknown",taskId:typeof h.taskId=="string"?h.taskId:null,trackIndex:e(h.trackIndex),round:e(h.round),gateId:typeof h.gateId=="string"?h.gateId:null,seatId:e(h.seatId),reviewerRole:typeof h.reviewerRole=="string"?h.reviewerRole:null,inputTokens:e(h.inputTokens),outputTokens:e(h.outputTokens),cachedInputTokens:e(h.cachedInputTokens),totalTokens:e(h.totalTokens),elapsedMs:e(h.elapsedMs),availability:typeof h.availability=="string"?h.availability:"unavailable",unavailableReason:typeof h.unavailableReason=="string"?h.unavailableReason:null}))},residualRisks:r(t.residualRisks)}}let i=Array.isArray(t.rounds)?t.rounds:[],o=[];for(let l of i){if(!l||typeof l!="object")continue;let u=typeof l.round=="number"&&Number.isFinite(l.round)?l.round:o.length,p=typeof l.proposal=="string"?l.proposal:"",h=typeof l.outcome=="string"?l.outcome:"",y=typeof l.reviseNotes=="string"&&l.reviseNotes.length>0?l.reviseNotes:null,g=[],f=Array.isArray(l.reviewers)?l.reviewers:[];for(let w of f){if(!w||typeof w!="object")continue;let v=typeof w.seatId=="number"&&Number.isInteger(w.seatId)?w.seatId:-1,b=typeof w.role=="string"?w.role:"",S=typeof w.agent=="string"?w.agent:"",R=typeof w.decision=="string"?w.decision:"",x=typeof w.reasoning=="string"?w.reasoning:"",P=Array.isArray(w.suggestedChanges)?w.suggestedChanges.filter(O=>typeof O=="string"):[];g.push({seatId:v,role:b,agent:S,header:`Reviewer ${v} (${b}, ${S}): ${rg(R)}`,decisionLabel:rg(R),reasoning:x,suggestedChanges:P})}o.push({round:u,roundLabel:`Round ${u}`,proposal:p,reviewers:g,outcome:h,reviseNotes:y})}if(o.length===0&&n===null)return null;let s=typeof t.finalOutcome=="string"?t.finalOutcome:"",a=typeof t.omittedRounds=="number"&&Number.isFinite(t.omittedRounds)?t.omittedRounds:0,c=t.truncatedForSize===!0,d=null;if(c||a>0){let l=[];a>0&&l.push(`${a} earlier round${a===1?"":"s"} omitted`),c&&l.push("some content truncated"),d=`Summary shortened to fit (${l.join("; ")} \u2014 full review in the audit browser)`}return{terminal:n,rounds:o,finalOutcome:s,truncationNotice:d}}function OL(t){if(!t||t.length===0)return null;let e=t.find(s=>s.kind==="gate_opened"),r=t.find(s=>s.kind==="gate_resolved");if(!e||!r)return null;let n=Date.parse(e.at),i=Date.parse(r.at);if(Number.isNaN(n)||Number.isNaN(i))return null;let o=i-n;return o<0?null:Math.round(o/1e3)}function DL(t){return As(t)?.label??null}function NL(t){return t===Or?"Escalated review":t===to?"Final approval":t===nr?"Continue with which agent?":t}function ML(t){switch(t.phase){case"awaiting-number":return{text:"awaiting your response",color:"cyan"};case"awaiting-notes":return{text:"Notes mode: type your notes + Enter",color:"cyan"};case"submitting":return{text:"submitting\u2026",color:"yellow"};case"confirming":return{text:"Confirming decision\u2026",color:"yellow"};case"claimed":return{text:"Decision accepted; awaiting result",color:"yellow"};case"resolved":return t.resolvedBy==="server"?{text:t.serverDecision?`Already resolved on server \u2014 ${t.serverDecision}`:"Already resolved on server",color:"yellow"}:t.resolvedBy==="durable"?{text:`Resolved \u2014 ${t.resolution.label}`,color:"green"}:{text:`Resolved \u2014 ${t.postAction.kind}`,color:"green"};default:{let e=t;return{text:"",color:"white"}}}}function HE(t,e){return e<=0?"":t.length<=e?t:e===1?"\u2026":`${t.slice(0,e-1)}\u2026`}var LL=6;function WE(t){let{ink:e}=se(),{Box:r,Text:n}=e,{entry:i,trackLabel:o}=t,{envelope:s,uiState:a,queue:c}=i,d=e.useStdout().stdout,l=d&&typeof d.columns=="number"&&d.columns||80,p=s.promptKind===Or?DL(s.reason):null,h=NL(s.promptKind),y=t.gateActionRecoveryBlocked&&a.phase!=="claimed"&&a.phase!=="resolved"?{text:"Gate actions unavailable while history reconnects",color:"yellow"}:ML(a),g=a.phase==="resolved",f=t.gateActionRecoveryBlocked===!0||a.phase==="claimed"||g,w=[Et.createElement(n,{key:"badge",color:"magenta",bold:!0},"[GATE] "),Et.createElement(n,{key:"kind",bold:!0},h)];if(o&&w.push(Et.createElement(n,{key:"track",dimColor:!0},` \xB7 ${o}`)),p){let b=7+h.length+(o?` \xB7 ${o}`.length:0)+3,S=HE(p,l-4-b);S.length>0&&w.push(Et.createElement(n,{key:"reason",color:"red"},` \u2014 ${S}`))}let v=[];return v.push(Et.createElement(r,{key:"header",flexDirection:"row"},...w)),v.push(Et.createElement(r,{key:"status",marginLeft:2,marginTop:0},Et.createElement(n,{color:y.color},y.text))),f||s.options.forEach((b,S)=>{let R=S+1,x=`${R}. ${b.label} \u2014 `.length,P=HE(b.description,l-LL-x),O=[Et.createElement(n,{key:"num",color:"cyan",bold:!0},`${R}. `),Et.createElement(n,{key:"label",bold:!0},b.label)];P.length>0&&O.push(Et.createElement(n,{key:"desc",dimColor:!0},` \u2014 ${P}`)),v.push(Et.createElement(r,{key:`opt-${S}`,marginLeft:2,flexDirection:"row"},...O))}),c.length>0&&v.push(Et.createElement(r,{key:"queue",marginLeft:2},Et.createElement(n,{dimColor:!0},`(+${c.length} more queued)`))),a.phase==="awaiting-number"&&!t.gateActionRecoveryBlocked&&v.push(Et.createElement(r,{key:"reply-hint",marginLeft:2},Et.createElement(n,{dimColor:!0},"Reply with a number \xB7 \u2191 review details above"))),Et.createElement(r,{flexDirection:"column",borderStyle:"round",borderColor:g?"green":"yellow",paddingX:1},...v)}var wr=E(require("react"));var N=E(require("react"));function UE(t){if(t===null)return"Unavailable";let e=Math.max(0,Math.round(t/1e3));if(e<60)return`${e}s`;let r=Math.floor(e/60),n=e%60;return n===0?`${r}m`:`${r}m ${n}s`}function BL(t){switch(t){case"gate_opened":return"Gate opened";case"verdicts_collected":return"Verdicts collected";case"gate_resolved":return"Gate resolved";default:return t}}function qE(t){let{ink:e}=se(),{Box:r,Text:n}=e,i=GE(t.envelope);if(!(i.headline!==null||i.reasonLabel!==null||i.timeline.length>0||i.cascade.length>0||i.reviewers.length>0||i.reviewerUnavailableLine!==null))return null;let s=[];if(i.headline&&s.push(N.createElement(r,{key:"headline",flexDirection:"row"},N.createElement(n,{color:"cyan",bold:!0},"\u256D "),N.createElement(n,{bold:!0},i.headline))),i.reasonLabel){let a=[N.createElement(n,{key:"reason-label",color:"yellow"},i.reasonLabel)];a.push(N.createElement(n,{key:"round",dimColor:!0},` \xB7 ${i.roundLabel}`)),s.push(N.createElement(r,{key:"reason",marginLeft:2,flexDirection:"row"},...a))}else s.push(N.createElement(r,{key:"round-only",marginLeft:2},N.createElement(n,{dimColor:!0},i.roundLabel)));if(i.reasonExplanation&&s.push(N.createElement(r,{key:"reason-explanation",marginLeft:2},N.createElement(n,{dimColor:!0,italic:!0},i.reasonExplanation))),i.timeline.length>0){let c=i.timeline.map(d=>BL(d.kind)).join(" \u2192 ");i.elapsedSeconds!==null&&(c+=` (${i.elapsedSeconds}s)`),s.push(N.createElement(r,{key:"timeline",marginLeft:2},N.createElement(n,{dimColor:!0},c)))}return i.cascade.length>0&&(s.push(N.createElement(r,{key:"cascade-header",marginLeft:2},N.createElement(n,{dimColor:!0,bold:!0},"Prior rounds:"))),i.cascadeOmittedEarlier&&s.push(N.createElement(r,{key:"cascade-omitted",marginLeft:4},N.createElement(n,{dimColor:!0,italic:!0},"\u2026 earlier rounds omitted"))),i.cascade.forEach((a,c)=>{s.push(N.createElement(r,{key:`cascade-${c}`,marginLeft:4},N.createElement(n,{dimColor:!0},`Round ${a.round}: ${a.reasonLabel}`)))})),i.reviewers.length>0&&(s.push(N.createElement(r,{key:"reviewers-header",marginLeft:2},N.createElement(n,{bold:!0,color:"magenta"},"Reviewers:"))),i.reviewers.forEach((a,c)=>{s.push(N.createElement(r,{key:`reviewer-${c}`,marginLeft:4},N.createElement(n,{bold:!0},a.header))),a.findings.forEach((d,l)=>{s.push(N.createElement(r,{key:`reviewer-${c}-finding-${l}`,marginLeft:6,flexDirection:"row"},N.createElement(n,{dimColor:!0},"\u2022 "),N.createElement(n,{dimColor:!0},d)))}),a.truncationHint&&s.push(N.createElement(r,{key:`reviewer-${c}-trunc`,marginLeft:6},N.createElement(n,{dimColor:!0,italic:!0},a.truncationHint)))})),i.panelTruncationHint&&s.push(N.createElement(r,{key:"panel-trunc",marginLeft:2},N.createElement(n,{dimColor:!0,italic:!0},i.panelTruncationHint))),i.reviewerUnavailableLine&&s.push(N.createElement(r,{key:"reviewer-unavailable",marginLeft:2},N.createElement(n,{dimColor:!0,italic:!0},i.reviewerUnavailableLine))),N.createElement(r,{flexDirection:"column"},...s)}function KE(t){let{ink:e}=se(),{Box:r,Text:n}=e;if(t.rounds.length===0&&t.terminal===null)return null;let i=[];i.push(N.createElement(r,{key:"review-summary-header",marginLeft:2,marginTop:1},N.createElement(n,{bold:!0,color:"cyan"},"Review summary")));{let o=t.terminal;if(o){i.push(N.createElement(r,{key:"rs-requirements",marginLeft:2,marginTop:1},N.createElement(n,{bold:!0},"Requirements"))),o.requirements.problem&&i.push(N.createElement(r,{key:"rs-requirements-problem",marginLeft:4},N.createElement(n,{dimColor:!0},o.requirements.problem))),o.requirements.expectedOutputs.forEach((d,l)=>{i.push(N.createElement(r,{key:`rs-output-${l}`,marginLeft:4},N.createElement(n,{dimColor:!0},`\u2022 ${d}`)))}),i.push(N.createElement(r,{key:"rs-implementors",marginLeft:2,marginTop:1},N.createElement(n,{bold:!0},"Implementors"))),o.implementors.forEach((d,l)=>{let u=d.trackIndex===null?"":` \xB7 Track ${Cr(d.trackIndex)}`;i.push(N.createElement(r,{key:`rs-implementor-${l}`,marginLeft:4},N.createElement(n,{dimColor:!0},`${d.agent}${u}`)))}),o.implementors.length===0&&i.push(N.createElement(r,{key:"rs-implementors-empty",marginLeft:4},N.createElement(n,{dimColor:!0},"Unavailable")));let s=o.reviewQuorum.seats.map(d=>`${d.agent} (${d.role})`).join(", ");i.push(N.createElement(r,{key:"rs-quorum",marginLeft:2,marginTop:1},N.createElement(n,{bold:!0},"Review quorum")),N.createElement(r,{key:"rs-quorum-detail",marginLeft:4},N.createElement(n,{dimColor:!0},`${s||"Unavailable"} \xB7 ${o.reviewQuorum.roundCount} round${o.reviewQuorum.roundCount===1?"":"s"} \xB7 ${o.reviewQuorum.revisionCount} revision${o.reviewQuorum.revisionCount===1?"":"s"}`))),i.push(N.createElement(r,{key:"rs-merge",marginLeft:2,marginTop:1},N.createElement(n,{bold:!0},"Merge gate")),N.createElement(r,{key:"rs-merge-detail",marginLeft:4},N.createElement(n,{dimColor:!0},o.mergeGate.applicable?`${o.mergeGate.outcome}${o.mergeGate.resolution?` \xB7 ${o.mergeGate.resolution}`:""}`:"Not applicable"))),i.push(N.createElement(r,{key:"rs-duration",marginLeft:2,marginTop:1},N.createElement(n,{bold:!0},"Duration")),N.createElement(r,{key:"rs-duration-detail",marginLeft:4},N.createElement(n,{dimColor:!0},`Task ${UE(o.durations.taskElapsedMs)} \xB7 Reviewers ${UE(o.durations.reviewerElapsedMs)} \xB7 ${o.durations.availability}`)));let a=o.tokenUsage.unavailableRoles.length?` \xB7 unavailable: ${o.tokenUsage.unavailableRoles.join(", ")}`:"",c=[o.tokenUsage.knownInput!==null?`${o.tokenUsage.knownInput.toLocaleString()} input`:null,o.tokenUsage.knownOutput!==null?`${o.tokenUsage.knownOutput.toLocaleString()} output`:null,o.tokenUsage.knownCachedInput!==null?`${o.tokenUsage.knownCachedInput.toLocaleString()} cached`:null].filter(d=>d!==null).join(" \xB7 ");i.push(N.createElement(r,{key:"rs-tokens",marginLeft:2,marginTop:1},N.createElement(n,{bold:!0},"Token usage")),N.createElement(r,{key:"rs-tokens-detail",marginLeft:4},N.createElement(n,{dimColor:!0},`${o.tokenUsage.knownTotal?.toLocaleString()??"Unavailable"} known \xB7 ${o.tokenUsage.availability}${c?` \xB7 ${c}`:""}${a}`)));for(let[d,l]of o.tokenUsage.invocations.entries()){let u=l.role==="reviewer"?`r${l.round??"?"} seat ${l.seatId??"?"}`:l.round!==null?`r${l.round}`:l.role,p=[l.inputTokens!==null?`${l.inputTokens.toLocaleString()} input`:null,l.outputTokens!==null?`${l.outputTokens.toLocaleString()} output`:null,l.cachedInputTokens!==null?`cached ${l.cachedInputTokens.toLocaleString()}`:null].filter(y=>y!==null).join(" \xB7 "),h=l.totalTokens!==null?`${l.totalTokens.toLocaleString()} tokens${p?` \xB7 ${p}`:""}`:p?`partial \xB7 ${p}`:"unavailable tokens";i.push(N.createElement(r,{key:`rs-tokens-row-${d}`,marginLeft:4},N.createElement(n,{dimColor:!0},`${u}: ${l.agent} ${l.role} \xB7 ${h} \xB7 ${l.availability}`)))}i.push(N.createElement(r,{key:"rs-risks",marginLeft:2,marginTop:1},N.createElement(n,{bold:!0},"Residual risks"))),o.residualRisks.length===0?i.push(N.createElement(r,{key:"rs-risks-none",marginLeft:4},N.createElement(n,{dimColor:!0},"None reported"))):o.residualRisks.forEach((d,l)=>{i.push(N.createElement(r,{key:`rs-risk-${l}`,marginLeft:4},N.createElement(n,{dimColor:!0},`\u2022 ${d}`)))})}t.truncationNotice&&i.push(N.createElement(r,{key:"review-summary-trunc",marginLeft:2},N.createElement(n,{dimColor:!0,italic:!0},t.truncationNotice))),t.rounds.forEach((s,a)=>{i.push(N.createElement(r,{key:`rs-round-${a}`,marginLeft:2,marginTop:a>0?1:0},N.createElement(n,{bold:!0},`${s.roundLabel}${s.outcome?` \u2014 ${s.outcome}`:""}`))),s.proposal&&i.push(N.createElement(r,{key:`rs-round-${a}-proposal`,marginLeft:4},N.createElement(n,{dimColor:!0},s.proposal))),s.reviewers.forEach((c,d)=>{i.push(N.createElement(r,{key:`rs-round-${a}-seat-${d}`,marginLeft:4},N.createElement(n,{bold:!0},c.header))),c.reasoning&&i.push(N.createElement(r,{key:`rs-round-${a}-seat-${d}-reasoning`,marginLeft:6},N.createElement(n,{dimColor:!0},c.reasoning))),c.suggestedChanges.forEach((l,u)=>{i.push(N.createElement(r,{key:`rs-round-${a}-seat-${d}-change-${u}`,marginLeft:6,flexDirection:"row"},N.createElement(n,{dimColor:!0},"\u2022 "),N.createElement(n,{dimColor:!0},l)))})}),s.reviseNotes&&i.push(N.createElement(r,{key:`rs-round-${a}-revise`,marginLeft:4},N.createElement(n,{color:"yellow"},`Revise notes: ${s.reviseNotes}`)))})}return N.createElement(r,{flexDirection:"column"},...i)}function FL(t){return As(t)?.label??null}function GL(t){return t===Or?"Escalated review":t===to?"Final approval":t===nr?"Continue with which agent?":t}function $L(t){let{ink:e}=se(),{Box:r,Text:n}=e,o=t.promptKind===Or?FL(t.reason):null,s=GL(t.promptKind),a=[],c=qE({envelope:t});c&&a.push(wr.createElement(r,{key:"gate-details-panel",flexDirection:"column",marginBottom:0},c));let d=[wr.createElement(n,{key:"badge",color:"magenta",bold:!0},"[GATE] "),wr.createElement(n,{key:"kind"},s)];if(o&&d.push(wr.createElement(n,{key:"reason",color:"red"},` \u2014 ${o}`)),a.push(wr.createElement(r,{key:"header",flexDirection:"row"},...d)),t.promptKind===nr){let l=t.reason??"halted",u=t.sourceAgent?` \u2014 source: ${t.sourceAgent}`:"";a.push(wr.createElement(r,{key:"continuation-context",marginLeft:2},wr.createElement(n,{dimColor:!0},`Implementor halted (${l})${u}`))),t.packetHash&&a.push(wr.createElement(r,{key:"continuation-packet",marginLeft:2},wr.createElement(n,{dimColor:!0},`Packet ${t.packetHash.slice(0,8)}\u2026`)))}return t.summary&&a.push(wr.createElement(r,{key:"summary",marginLeft:2},wr.createElement(n,{dimColor:!0,italic:!0},t.summary))),wr.createElement(r,{flexDirection:"column"},...a)}function jE(t){let{panel:e}=t.entry;return e.variant==="prompt"?$L(e.envelope):KE(e.reviewSummary)}function ig(t,e,r){switch(t.kind){case"user-message":return Dr.createElement(bE,{entry:t});case"planner-decision":return Dr.createElement(kE,{entry:t});case"subagent-event":return Dr.createElement(RE,{entry:t});case"reviewer-status-node":return Dr.createElement(IE,{entry:t});case"gate-status-node":return Dr.createElement(AE,{entry:t});case"slash-output":return Dr.createElement(PE,{entry:t});case"advisory":return Dr.createElement(TE,{entry:t});case"gate-prompt":return Dr.createElement(WE,{entry:t,trackLabel:e?.get(t.envelope.taskId),gateActionRecoveryBlocked:r});case"gate-panel":return Dr.createElement(jE,{entry:t});default:{let n=t;throw new Error("Unknown conversation entry kind")}}}function VE(t){let{ink:e}=se(),{Box:r}=e;return Dr.createElement(r,{flexDirection:"column"},...t.entries.map(n=>Dr.createElement(r,{key:n.id,flexDirection:"column",marginBottom:0},ig(n,t.trackLabelByTaskId,t.gateActionRecoveryBlocked))))}var zE=E(require("os")),bc=E(require("react"));var HL=zE.homedir();function JE(t){let{ink:e}=se(),{Box:r,Text:n}=e,i=e.useStdout().stdout?.columns,o=t.columns??i??80,s=aE(t.plannerRuntimeKind,t.plannerLabel),{leftText:a,badgeText:c}=cE({cwd:t.cwd,tier:t.tier,homedir:HL,columns:o,badge:s});return bc.createElement(r,{flexDirection:"row",justifyContent:"space-between"},bc.createElement(n,{dimColor:!0},a),s&&c?bc.createElement(n,s.color?{color:s.color}:{dimColor:!0},c):bc.createElement(n,null,""))}var XE=["CLAUDE","CODEX","ANTIGRAVITY"],WL={CLAUDE:{name:"@claude",blurb:"ask Claude"},CODEX:{name:"@codex",blurb:"ask Codex"},ANTIGRAVITY:{name:"@agy",blurb:"ask Antigravity"}};function UL(t){let e=t.trim().toUpperCase();return XE.includes(e)?e:null}function QE(t=[]){let e=new Set(t.map(UL).filter(n=>n!==null)),r=XE.filter(n=>e.has(n)).map(n=>WL[n]);return[{name:"@all",blurb:r.length>0?"ask all available local agents":"ask all local agents"},...r]}function YE(t){return/\s/.test(t)}function ZE(t,e){return Math.max(0,Math.min(t,e.length))}function eR(t,e=t.length){let r=ZE(e,t),n=r;for(;n>0&&!YE(t[n-1]??"");)n-=1;let i=r;for(;i<t.length&&!YE(t[i]??"");)i+=1;let o=t.slice(n,r);return o.startsWith("@")?{start:n,end:i,prefix:o}:null}function og(t,e,r=t.length){let n=eR(t,r);if(!n)return[];let i=n.prefix.toLowerCase();return e.filter(o=>o.name.toLowerCase().startsWith(i))}function tR(t,e,r){let n=eR(t,e),i=`${r} `;if(!n){let c=ZE(e,t);return{value:t.slice(0,c)+i+t.slice(c),cursor:c+i.length}}let o=t.slice(n.end),s=o.startsWith(" ")?o.slice(1):o;return{value:t.slice(0,n.start)+i+s,cursor:n.start+i.length}}var nR=E(require("path")),rR={FREE:0,PRO:1,MAX:2};function qL(t,e){return!e||!t?!0:rR[t]>=rR[e]}function Ge(t,e,r){return{command:t,output:e,sideEffect:r}}var Eu=[{name:"/status",blurb:"Show the current task, who is working on it, and any pending approvals.",handler:()=>Ge("/status","PENDING \u2014 entrypoint pulls from store status")},{name:"/audit",blurb:"Review the full step-by-step history of a task (Max only).",minTier:"MAX",handler:()=>Ge("/audit","PENDING \u2014 entrypoint runs audit browser")},{name:"/flag",blurb:"Flag a bad quorum approval from the last /audit listing (Max only).",minTier:"MAX",handler:t=>t.length===0?Ge("/flag","Usage: /flag <entry-id> [note]. Flags a consensus-approve resolution from the most recent /audit listing as a bad approval. Run /audit <task-id> to list entry ids."):Ge("/flag","PENDING \u2014 entrypoint records bad-approval flag")},{name:"/continue",blurb:"Hand the current task to another agent, or accept a handoff.",handler:t=>{let e=t[0]??"help";return e==="request"||e==="accept"||e==="switch"?Ge("/continue","PENDING \u2014 entrypoint pulls from continuation reader"):Ge("/continue",["Usage: /continue <subcommand> [args]","","Subcommands:"," request [<target>] Hand off the active task to another agent."," accept <target> Resolve an active handoff prompt."].join(`
3744
+ `||i===" "||i===" "){e+=i,r++;continue}if(o<=31||o===127||o>=128&&o<=159){r++;continue}e+=i,r++}return e}function pn(t){let e=Math.max(0,Math.floor(t/1e3)),r=Math.floor(e/3600),n=Math.floor(e%3600/60),i=e%60;return r>0?`${r}:${String(n).padStart(2,"0")}:${String(i).padStart(2,"0")}`:`${n}:${String(i).padStart(2,"0")}`}function yu(t){let e=Math.max(0,Math.floor(Number.isFinite(t)?t:0));if(e>=999500)return`${(e/1e6).toFixed(1)}M`;if(e>=1e3){let r=e/1e3;return`${r>=10?r.toFixed(0):r.toFixed(1)}k`}return String(e)}function wc(t){switch(t.phase){case"preparing_workspace":return"Preparing an isolated workspace copy \u2014 this can take a while on a large folder";case"shadow_created":return"Workspace copy ready \u2014 starting implementor";case"implementor_running":{let e=typeof t.filesChanged=="number"?`, ${t.filesChanged} ${t.filesChanged===1?"file":"files"} changed`:"";return`Implementor working in shadow \u2014 round ${t.round}${e}`}case"diff_captured":{let e=[];t.created>0&&e.push(`+${t.created}`),t.modified>0&&e.push(`~${t.modified}`),t.deleted>0&&e.push(`-${t.deleted}`);let r=e.length>0?` (${e.join("/")})`:"";return`Diff captured: ${t.files} ${t.files===1?"file":"files"}${r}`}case"submitting_diff":return`Submitting changes for review \u2014 round ${t.round}`;case"reviewers_dispatched":return`Reviewers dispatched \u2014 ${t.seats} ${t.seats===1?"seat":"seats"}`;case"seat_update":return t.state==="running"?`Reviewer ${t.seatLabel} running`:`Reviewer ${t.seatLabel} submitted its verdict`;case"verdicts_progress":return`Verdicts ${t.received}/${t.expected} received`;case"revise_round":{let e=t.feedbackSummary?` \u2014 ${t.feedbackSummary}`:"";return`Revise round ${t.round} \u2014 re-running implementor${e}`}case"round_failed":return`Implementor round ${t.round} failed \u2014 ${t.reason}`;case"continuation_offered":return`Implementor halted (${t.reason}) \u2014 choose a continuation agent`;case"declared_tests_skipped":return`\u26A0 declared test(s) not run (absent): ${t.paths.join(", ")} \u2014 reviewers will assess`;case"promoting":return`Applying approved changes \u2014 ${t.files} ${t.files===1?"file":"files"}`;case"promoted":return`Applied ${t.files} ${t.files===1?"file":"files"} to your workspace`;case"discarding":return"Discarding workspace copy";case"discarded":return"Workspace copy discarded \u2014 your tree is unchanged";case"not_applied":return"Not applied \u2014 your tree is unchanged";case"waiting_user":return"Waiting for your decision";case"planner_classifying":return"Thinking\u2026";case"familiarizing":return"Reading the codebase to get familiar\u2026";case"agent_advisory":return"Waiting for agent replies\u2026";case"progress_cleared":return"";case"halt_notice":return t.message;default:{let e=t;return""}}}function Yf(t){if(t.phase==="declared_tests_skipped"){let e=t.paths.length;return`\u26A0 ${e} declared test${e===1?"":"s"} not run`}return wc(t)}var hE=500;function Zf(t,e){switch(e.type){case"USER_INPUT":return Qf(t,e.text,e.attachments,e.imagePaths);case"PLANNER_DECISION":return F0(t,e.decision,e.taskId,e.brainstorm);case"EVENT_RECEIVED":return $0(t,e.event,e.role??"implementor");case"REVIEWER_STATE_CHANGED":return H0(t,e.nodeId,e.seatId,e.newState);case"GATE_STATE_CHANGED":return U0(t,e.nodeId,e.gate);case"PLANNER_HEALTH_CHANGED":return{...t,plannerHealth:e.newState};case"SLASH_OUTPUT":return q0(t,e.command,e.output);case"CLARIFICATION_ANSWERED":return K0(t,e.answer);case"TASK_QUEUED":return{...t,queuedTasks:[...t.queuedTasks,e.queuedTask]};case"TASK_DEQUEUED":return{...t,queuedTasks:t.queuedTasks.filter(r=>r.queuedTaskId!==e.queuedTaskId)};case"TASK_LIFECYCLE":return j0(t,e.task);case"CLEAR_PENDING_CLARIFICATION":return{...t,pendingClarification:null};case"PLANNER_OFFER_PRESENTED":return G0(t,e.offer);case"CLEAR_PENDING_PLANNER_OFFER":return{...t,pendingPlannerOffer:null};case"STRUCTURAL_SUMMARY_GENERATED":return{...t,structuralSummary:e.summary,structuralSummaryError:null};case"STRUCTURAL_SUMMARY_FAILED":return{...t,structuralSummary:null,structuralSummaryError:e.error};case"GATE_PROMPT_RECEIVED":return z0(t,e.envelope);case"GATE_PROMPT_NOTES_REQUESTED":return Q0(t,e.promptEntryId,e.decisionDraft);case"GATE_PROMPT_SUBMIT_STARTED":return Z0(t,e.promptEntryId);case"GATE_PROMPT_DECISION_FENCED":return J0(t,e.promptEntryId,e.gateId,e.decisionAttemptId,e.canonicalRequestHash,e.decisionClaimId);case"GATE_PROMPT_RESOLVED":return eL(t,e.promptEntryId,e.gateId,e.postAction);case"GATE_PROMPT_SUBMIT_FAILED":return rL(t,e.promptEntryId,e.gateId);case"GATE_PROMPT_RESOLVED_EXTERNALLY":return tL(t,e.promptEntryId,e.gateId,e.serverDecision);case"GATE_RESOLUTION_RECEIVED":return Y0(t,e.resolution);case"GATE_PROMPT_ACTION_FENCED":return X0(t,e.gateId,e.decisionClaimId);case"GATE_ACTION_RECOVERY_CHANGED":return t.gateActionRecoveryBlocked===e.blocked?t:{...t,gateActionRecoveryBlocked:e.blocked};case"GATE_PROMPT_NOTES_CANCELLED":return nL(t,e.promptEntryId);case"GATE_SUMMARY_LOADED":return iL(t,e.gateId,e.panelModel);case"TEAM_STARTED":return oL(t,e.taskGroupId);case"TEAM_TRACK_ASSIGNED":return sL(t,e.trackIndex,e.state,e.taskId,e.agent);case"TEAM_MERGE_GATE":return aL(t,e.status,e.startedAt,e.endedAt);case"TEAM_HALTED":return cL(t,e.haltReason);case"TEAM_TRACK_TERMINAL":return Xf(t,e.trackIndex,e.state);case"TEAM_TRACK_REVISING":return Xf(t,e.trackIndex,"Revising");case"TEAM_TRACK_AWAITING_DECISION":return Xf(t,e.trackIndex,"AwaitingDecision");case"TEAM_GROUP_RESOLVED":return dL(t,e.outcome);case"TASK_PROGRESS":return B0(L0(O0(t,e.event),e.event),e.event);case"SHELL_ADVISORY":return rr(t,{kind:"advisory",id:(0,yr.ulid)(),timestamp:new Date().toISOString(),final:!0,source:e.source,text:e.text,...e.localOnly?{localOnly:!0}:{},...e.handoffExcluded?{handoffExcluded:!0}:{}});case"AUDIT_FLAG_INDEX_RETAINED":return lL(t,e.index);case"AUDIT_FLAG_RECORDED":return uL(t,e.entryId);case"REVIEWER_WIZARD_OPEN":return{...t,reviewerWizard:e.wizard};case"REVIEWER_WIZARD_CLOSE":return{...t,reviewerWizard:null};case"EXIT":return t;default:{let r=e;return t}}}function rr(t,e){let r=[...t.conversation,e],n=r.length>hE?r.slice(r.length-hE):r;return{...t,conversation:n}}var _0=new Set(["diff_captured","submitting_diff","reviewers_dispatched","seat_update","verdicts_progress","declared_tests_skipped","halt_notice"]),fE=new Set(["waiting_user","continuation_offered","round_failed","promoted","discarded","not_applied","progress_cleared"]),mE=new Set(["preparing_workspace","shadow_created","implementor_running","diff_captured","submitting_diff","reviewers_dispatched","seat_update","verdicts_progress","revise_round","declared_tests_skipped"]),C0=new Set(["shadow_created","diff_captured","submitting_diff","reviewers_dispatched","seat_update","verdicts_progress","revise_round","round_failed","continuation_offered","declared_tests_skipped","promoted","discarded","not_applied","halt_notice"]);function O0(t,e){let r=e.phase==="promoted"?"completed":e.phase==="discarded"||e.phase==="not_applied"?"cancelled":e.phase==="round_failed"?"failed":null;if(r===null)return t;let n="taskId"in e?e.taskId:void 0;if(!n)return t;let i=new Map(t.runningTasks),o=i.delete(n),s=t.sessionTasks.get(n),a=new Map(t.sessionTasks);if(s){if(s.origin!=="single"||s.status!=="running")return o?{...t,runningTasks:i}:t;a.set(n,{...s,status:r})}else a.set(n,{taskId:n,origin:"single",status:r,startedAt:new Date().toISOString()});return{...t,runningTasks:i,sessionTasks:a}}var D0=new Set(["reviewers_dispatched","seat_update","verdicts_progress"]),N0=new Set([...fE,"shadow_created","implementor_running","revise_round"]);function vu(t){for(let e of t.sessionTasks.values())if(e.origin==="single"&&(e.status==="running"||e.status==="cancelling"))return!0;return!1}function M0(t){return t.team!==null&&!t.team.groupResolved&&t.team.haltReason===null||vu(t)}function L0(t,e){return D0.has(e.phase)?M0(t)?{...t,lastReviewerProgress:{text:wc(e),at:new Date().toISOString()}}:t:N0.has(e.phase)&&t.lastReviewerProgress!==null?{...t,lastReviewerProgress:null}:t}function B0(t,e){let r=t;if(C0.has(e.phase)){let c={kind:"advisory",id:(0,yr.ulid)(),timestamp:new Date().toISOString(),final:!0,source:"shell",text:wc(e),...e.phase==="halt_notice"?{localOnly:!0}:{}};r=rr(r,c)}if(t.team!==null&&!t.team.groupResolved)return r;let n=t.progress;if(n!==null&&n.epoch!==void 0&&e.epoch!==void 0&&e.epoch<n.epoch)return r;let i=new Date().toISOString();if(fE.has(e.phase))return e.phase==="waiting_user"||n===null||n.epoch===void 0||e.epoch===n.epoch?{...r,progress:null}:r;if(_0.has(e.phase))return n!==null&&mE.has(n.phase)&&mE.has(e.phase)&&e.epoch===n.epoch?{...r,progress:{phase:e.phase,text:Yf(e),updatedAt:i,startedAt:n.startedAt,epoch:n.epoch,tokens:Math.max(n.tokens??0,e.tokens??0)||void 0}}:r;let o=n!==null&&e.epoch!==void 0&&e.epoch===n.epoch,s=o?n.startedAt:i,a=o?Math.max(n.tokens??0,e.tokens??0)||void 0:e.tokens||void 0;return{...r,progress:{phase:e.phase,text:Yf(e),updatedAt:i,startedAt:s,epoch:e.epoch,tokens:a}}}function Qf(t,e,r,n){let i={kind:"user-message",id:(0,yr.ulid)(),timestamp:new Date().toISOString(),final:!0,text:e,...r&&r.length?{attachments:r}:{},...n&&n.length?{imagePaths:n}:{}},o=rr(t,i),s={...o,inputHistory:[...o.inputHistory,e]};if(t.pendingClarification===null)return s;let a=t.pendingClarification.rounds,c=a.length-1;if(c<0||a[c].answer!==void 0)return s;let d=a.map((l,u)=>u===c?{question:l.question,answer:e}:l);return{...s,pendingClarification:{...t.pendingClarification,rounds:d,...r&&r.length?{attachments:r}:{},...n&&n.length?{attachmentPaths:[...t.pendingClarification.attachmentPaths??[],...n]}:{}}}}function F0(t,e,r,n){let i={kind:"planner-decision",id:(0,yr.ulid)(),timestamp:new Date().toISOString(),final:!0,action:e.action,rationale:e.rationale,taskId:r,...n?{brainstorm:n}:{}},o=rr(t,i);if(e.action==="ask_user"&&e.clarifying_question){let c={kind:"advisory",id:(0,yr.ulid)(),timestamp:new Date().toISOString(),final:!0,source:"planner",text:e.clarifying_question},d=rr(o,c),l=t.pendingClarification;if(l===null){let u=[...d.conversation].reverse().find(h=>h.kind==="user-message"),p=u?.text??"";return{...d,pendingClarification:{originalPrompt:p,rounds:[{question:e.clarifying_question}],conversationEntryId:c.id,...u?.attachments&&u.attachments.length?{attachments:u.attachments}:{},...u?.imagePaths&&u.imagePaths.length?{attachmentPaths:u.imagePaths}:{}}}}else return{...d,pendingClarification:{originalPrompt:l.originalPrompt,rounds:[...l.rounds,{question:e.clarifying_question}],conversationEntryId:c.id,...l.attachments&&l.attachments.length?{attachments:l.attachments}:{},...l.attachmentPaths&&l.attachmentPaths.length?{attachmentPaths:l.attachmentPaths}:{}}}}let a=(typeof e.advisory_summary=="string"?e.advisory_summary.trim():"").length>0?e.advisory_summary:e.action==="advisory_response"?(e.rationale??"").trim():"";if(a.length>0){let c={kind:"advisory",id:(0,yr.ulid)(),timestamp:new Date().toISOString(),final:!0,source:"planner",text:nt(a)},d=rr(o,c);return t.pendingClarification!==null?{...d,pendingClarification:null}:d}return t.pendingClarification!==null?{...o,pendingClarification:null}:o}function G0(t,e){let r=e.kind==="team_decomposition"?"This looks like it can run as a parallel agent team. How would you like to proceed?":"It sounds like you want to start building. How would you like to proceed?",n=e.options.map((c,d)=>` ${d+1}. ${c.label} \u2014 ${c.description}`),i=nt((e.rationale??"").trim()),o=[r,...i.length>0?["",i]:[],"",...n,"",`Reply with a number 1-${e.options.length}, or type anything else to continue.`].join(`
3745
+ `),s={kind:"advisory",id:(0,yr.ulid)(),timestamp:new Date().toISOString(),final:!0,source:"shell",text:o,localOnly:!0};return{...rr(t,s),pendingPlannerOffer:{...e,conversationEntryId:s.id},pendingClarification:null}}function $0(t,e,r){if(t.conversation.some(o=>o.kind==="subagent-event"&&o.event.eventId===e.eventId))return t;let n=e.parentTaskId??"",i={kind:"subagent-event",id:(0,yr.ulid)(),timestamp:e.timestamp||new Date().toISOString(),final:!0,parentTaskId:n,role:r,event:e};return rr(t,i)}function H0(t,e,r,n){let i=t.conversation.findIndex(p=>p.kind==="reviewer-status-node"&&p.id===e);if(i===-1){let p=new Map(t.activeReviewerSeats);return p.set(r,n),{...t,activeReviewerSeats:p}}let o=t.conversation[i];if(o.kind!=="reviewer-status-node"||o.final)return t;let s=o.seats.map(p=>p.seatId===r?n:p),a=W0(s),d={...o,seats:s,quorumStatus:a,final:a==="PASS"||a==="REVISE"||a==="BLOCK"},l=[...t.conversation.slice(0,i),d,...t.conversation.slice(i+1)],u=new Map(t.activeReviewerSeats);return u.set(r,n),{...t,conversation:l,activeReviewerSeats:u}}function W0(t){return t.length===0?"queued":t.some(e=>e.status==="BLOCK")?"BLOCK":t.some(e=>e.status==="queued")?"queued":t.some(e=>e.status==="running")?"running":t.some(e=>e.status==="REVISE")?"REVISE":"PASS"}function U0(t,e,r){let n=t.conversation.findIndex(c=>c.kind==="gate-status-node"&&c.id===e);if(n===-1)return{...t,currentGate:r};let i=t.conversation[n];if(i.kind!=="gate-status-node"||i.final)return t;let o=r.status==="PASS"||r.status==="REVISE"||r.status==="BLOCK"||r.status==="merge_gate_pending",s={...i,gate:r,final:o},a=[...t.conversation.slice(0,n),s,...t.conversation.slice(n+1)];return{...t,conversation:a,currentGate:r}}function q0(t,e,r){let n={kind:"slash-output",id:(0,yr.ulid)(),timestamp:new Date().toISOString(),final:!0,command:e,output:r};return rr(t,n)}function K0(t,e){if(t.pendingClarification===null)return Qf(t,e);let r=t.pendingClarification.rounds.map((i,o,s)=>o===s.length-1&&i.answer===void 0?{question:i.question,answer:e}:i);return{...Qf(t,e),pendingClarification:{...t.pendingClarification,rounds:r}}}function j0(t,e){let r=t.sessionTasks.get(e.taskId),n=r?.origin==="single"&&(r.status==="completed"||r.status==="cancelled"||r.status==="failed"),i=e.status==="completed"||e.status==="cancelled"||e.status==="failed",o=new Map(t.runningTasks);i||n&&!i?o.delete(e.taskId):o.set(e.taskId,e);let s=new Map(t.sessionTasks);return s.set(e.taskId,{taskId:e.taskId,agentKind:e.agentKind,origin:"single",status:n&&!i?r.status:e.status,startedAt:e.startedAt}),{...t,runningTasks:o,sessionTasks:s}}function V0(t,e){for(let r=0;r<t.conversation.length;r++){let n=t.conversation[r];if(n.kind==="gate-prompt"&&n.envelope.taskId===e&&n.final===!1)return r}return-1}function gE(t){return{kind:"gate-panel",id:(0,yr.ulid)(),timestamp:new Date().toISOString(),final:!0,panel:{variant:"prompt",envelope:t}}}function yE(t){return{kind:"gate-panel",id:(0,yr.ulid)(),timestamp:new Date().toISOString(),final:!0,panel:{variant:"summary",reviewSummary:t}}}function eg(t,e,r){let[n,...i]=r.queue,o={...r.queuedReviewSummaries??{}},s=o[n.gateId];delete o[n.gateId];let a=Object.keys(o).length>0?o:void 0,c=t.gateResolutions.get(n.gateId),d=t.gateActionClaims.has(n.gateId),l={...r,envelope:n,queue:i,uiState:c?{phase:"resolved",resolvedBy:"durable",resolution:c}:d?{phase:"claimed",decisionClaimId:t.gateActionClaims.get(n.gateId)??null}:{phase:"awaiting-number"},final:c!==void 0,reviewSummary:s,queuedReviewSummaries:a},u=[...t.conversation.slice(0,e),l,...t.conversation.slice(e+1)],p=rr({...t,conversation:u},gE(n));return s!==void 0&&s.rounds.length>0&&(p=rr(p,yE(s))),p}function z0(t,e){if(t.conversation.some(c=>c.kind==="gate-prompt"&&(c.envelope.gateId===e.gateId||c.queue.some(d=>d.gateId===e.gateId))))return t;let n=V0(t,e.taskId);if(n!==-1){let c=t.conversation[n];if(c.kind!=="gate-prompt")return t;let d={...c,queue:[...c.queue,e]},l=[...t.conversation.slice(0,n),d,...t.conversation.slice(n+1)];return{...t,conversation:l}}let i=t.gateResolutions.get(e.gateId),o=t.gateActionClaims.has(e.gateId),s={kind:"gate-prompt",id:(0,yr.ulid)(),timestamp:e.receivedAt||new Date().toISOString(),final:!!i,envelope:e,queue:[],uiState:i?{phase:"resolved",resolvedBy:"durable",resolution:i}:o?{phase:"claimed",decisionClaimId:t.gateActionClaims.get(e.gateId)??null}:{phase:"awaiting-number"}},a=rr(t,s);return rr(a,gE(e))}function J0(t,e,r,n,i,o){let s=t.conversation.findIndex(d=>d.kind==="gate-prompt"&&d.id===e);if(s===-1)return t;let a=t.conversation[s];if(a.kind!=="gate-prompt"||a.envelope.gateId!==r||a.uiState.phase==="resolved")return t;let c={...a,final:!1,uiState:{phase:"confirming",decisionAttemptId:n,canonicalRequestHash:i,decisionClaimId:o}};return{...t,conversation:[...t.conversation.slice(0,s),c,...t.conversation.slice(s+1)]}}function Y0(t,e){let r=t.gateResolutions.get(e.promptId);if(r)return r.eventId===e.eventId,t;let n=new Map(t.gateResolutions);n.set(e.promptId,e);let i=t.conversation.findIndex(a=>a.kind==="gate-prompt"&&a.envelope.gateId===e.promptId);if(i===-1)return{...t,gateResolutions:n};let o=t.conversation[i];if(o.kind!=="gate-prompt")return{...t,gateResolutions:n};if(o.queue.length>0)return{...eg(t,i,o),gateResolutions:n};let s={...o,final:!0,uiState:{phase:"resolved",resolvedBy:"durable",resolution:e}};return{...t,gateResolutions:n,conversation:[...t.conversation.slice(0,i),s,...t.conversation.slice(i+1)]}}function X0(t,e,r){let n=t.gateActionClaims.get(e);if(t.gateActionClaims.has(e)&&n!==r)return t;let i=new Map(t.gateActionClaims);i.set(e,r);let o=t.conversation.findIndex(c=>c.kind==="gate-prompt"&&c.envelope.gateId===e);if(o===-1)return{...t,gateActionClaims:i};let s=t.conversation[o];if(s.kind!=="gate-prompt"||s.uiState.phase==="resolved")return{...t,gateActionClaims:i};let a={...s,final:!1,uiState:{phase:"claimed",decisionClaimId:r}};return{...t,gateActionClaims:i,conversation:[...t.conversation.slice(0,o),a,...t.conversation.slice(o+1)]}}function Q0(t,e,r){let n=t.conversation.findIndex(a=>a.kind==="gate-prompt"&&a.id===e);if(n===-1)return t;let i=t.conversation[n];if(i.kind!=="gate-prompt"||i.uiState.phase!=="awaiting-number")return t;let o={...i,uiState:{phase:"awaiting-notes",decisionDraft:r}},s=[...t.conversation.slice(0,n),o,...t.conversation.slice(n+1)];return{...t,conversation:s}}function Z0(t,e){let r=t.conversation.findIndex(s=>s.kind==="gate-prompt"&&s.id===e);if(r===-1)return t;let n=t.conversation[r];if(n.kind!=="gate-prompt"||n.uiState.phase!=="awaiting-number"&&n.uiState.phase!=="awaiting-notes")return t;let i={...n,uiState:{phase:"submitting"}},o=[...t.conversation.slice(0,r),i,...t.conversation.slice(r+1)];return{...t,conversation:o}}function eL(t,e,r,n){let i=t.conversation.findIndex(c=>c.kind==="gate-prompt"&&c.id===e);if(i===-1)return t;let o=t.conversation[i];if(o.kind!=="gate-prompt"||o.envelope.gateId!==r)return t;if(o.queue.length>0)return eg(t,i,o);let s={...o,uiState:{phase:"resolved",postAction:n,resolvedBy:"self"},final:!0},a=[...t.conversation.slice(0,i),s,...t.conversation.slice(i+1)];return{...t,conversation:a}}function tL(t,e,r,n){let i=t.conversation.findIndex(c=>c.kind==="gate-prompt"&&c.id===e);if(i===-1)return t;let o=t.conversation[i];if(o.kind!=="gate-prompt"||o.envelope.gateId!==r||o.uiState.phase==="resolved")return t;if(o.queue.length>0)return eg(t,i,o);let s={...o,uiState:{phase:"resolved",resolvedBy:"server",serverDecision:n},final:!0},a=[...t.conversation.slice(0,i),s,...t.conversation.slice(i+1)];return{...t,conversation:a}}function rL(t,e,r){let n=t.conversation.findIndex(a=>a.kind==="gate-prompt"&&a.id===e);if(n===-1)return t;let i=t.conversation[n];if(i.kind!=="gate-prompt"||i.envelope.gateId!==r||i.uiState.phase!=="submitting"&&i.uiState.phase!=="confirming")return t;let o={...i,uiState:{phase:"awaiting-number"}},s=[...t.conversation.slice(0,n),o,...t.conversation.slice(n+1)];return{...t,conversation:s}}function nL(t,e){let r=t.conversation.findIndex(s=>s.kind==="gate-prompt"&&s.id===e);if(r===-1)return t;let n=t.conversation[r];if(n.kind!=="gate-prompt"||n.uiState.phase!=="awaiting-notes")return t;let i={...n,uiState:{phase:"awaiting-number"}},o=[...t.conversation.slice(0,r),i,...t.conversation.slice(r+1)];return{...t,conversation:o}}function iL(t,e,r){let n=t.conversation.findIndex(d=>d.kind==="gate-prompt"&&d.final===!1&&d.envelope.gateId===e);if(n===-1){let d=t.conversation.findIndex(h=>h.kind==="gate-prompt"&&h.final===!1&&h.queue.some(y=>y.gateId===e));if(d===-1)return t;let l=t.conversation[d];if(l.kind!=="gate-prompt")return t;let u={...l,queuedReviewSummaries:{...l.queuedReviewSummaries??{},[e]:r}},p=[...t.conversation.slice(0,d),u,...t.conversation.slice(d+1)];return{...t,conversation:p}}let i=t.conversation[n];if(i.kind!=="gate-prompt")return t;let o=i.reviewSummary===void 0,s={...i,reviewSummary:r},a=[...t.conversation.slice(0,n),s,...t.conversation.slice(n+1)],c={...t,conversation:a};return o&&r.rounds.length>0?rr(c,yE(r)):c}function oL(t,e){if(t.team){if(t.team.taskGroupId===e)return t;if(t.team.taskGroupId==="")return{...t,team:{...t.team,taskGroupId:e}}}return{...t,team:{taskGroupId:e,tracks:new Map,mergeGate:"none",haltReason:null,groupResolved:!1}}}function sL(t,e,r,n,i){let o=t.team??{taskGroupId:"",tracks:new Map,mergeGate:"none",haltReason:null,groupResolved:!1},s=new Map(o.tracks),a=s.get(e),c={state:r,taskId:n??a?.taskId,agent:i??a?.agent};s.set(e,c);let d=t.sessionTasks;if(c.taskId){let l=t.sessionTasks.get(c.taskId);d=new Map(t.sessionTasks),d.set(c.taskId,{taskId:c.taskId,agentKind:c.agent??l?.agentKind,origin:"team",status:r,startedAt:l?.startedAt??new Date().toISOString()})}return{...t,team:{...o,tracks:s},sessionTasks:d}}function wu(t,e){if(t==null||e==null)return;let r=Date.parse(t),n=Date.parse(e);if(!(isNaN(r)||isNaN(n)))return Math.max(0,n-r)}function aL(t,e,r,n){if(!t.team)return t;let i=t.team;if(e==="pending"){if(n!=null){if(i.mergeGateStartedAt==null||i.mergeGateElapsedMs!=null)return t;let c=wu(i.mergeGateStartedAt,n);return c==null?t:{...t,team:{...i,mergeGateElapsedMs:c}}}if(i.mergeGate==="pass"||i.mergeGate==="fail"||i.groupResolved||i.haltReason!=null)return t;let s=i.mergeGateStartedAt!=null?Date.parse(i.mergeGateStartedAt):NaN,a=r!=null?Date.parse(r):NaN;return i.mergeGateStartedAt==null||isNaN(s)||!isNaN(a)&&a>s?{...t,team:{...i,mergeGate:"pending",mergeGateStartedAt:r,mergeGateElapsedMs:void 0}}:t}let o=i.mergeGateElapsedMs??wu(i.mergeGateStartedAt,n);return{...t,team:{...i,mergeGate:e,mergeGateElapsedMs:o}}}function cL(t,e){if(!t.team)return t;let r=t.team,n=r.mergeGateStartedAt!=null&&r.mergeGateElapsedMs==null?wu(r.mergeGateStartedAt,new Date().toISOString()):r.mergeGateElapsedMs;return{...t,team:{...r,haltReason:e,mergeGateElapsedMs:n},lastReviewerProgress:null}}function Xf(t,e,r){if(!t.team)return t;let n=t.team.tracks.get(e);if(!n||n.state===r)return t;let i=new Map(t.team.tracks);i.set(e,{...n,state:r});let o=t.sessionTasks,s=n.taskId?t.sessionTasks.get(n.taskId):void 0;return n.taskId&&s&&(o=new Map(t.sessionTasks),o.set(n.taskId,{...s,status:r})),{...t,team:{...t.team,tracks:i},sessionTasks:o}}function dL(t,e){if(!t.team||t.team.groupResolved&&t.team.outcome===e)return t;let r=t.team,n=r.mergeGateStartedAt!=null&&r.mergeGateElapsedMs==null?wu(r.mergeGateStartedAt,new Date().toISOString()):r.mergeGateElapsedMs;return{...t,team:{...r,groupResolved:!0,outcome:e,mergeGateElapsedMs:n},lastReviewerProgress:null}}function lL(t,e){let r=t.auditFlagIndex,n=r?new Set([...r.flagged,...e.flagged]):e.flagged;return{...t,auditFlagIndex:{...e,flagged:n}}}function uL(t,e){let r=t.auditFlagIndex;if(!r||r.flagged.has(e))return t;let n=new Set(r.flagged);return n.add(e),{...t,auditFlagIndex:{...r,flagged:n}}}function pL(t){return{...{session:t.session,plannerHealth:"Available",conversation:[],runningTasks:new Map,sessionTasks:new Map,lastReviewerProgress:null,queuedTasks:[],activeReviewerSeats:new Map,currentGate:null,pendingClarification:null,pendingPlannerOffer:null,inputHistory:[],structuralSummary:null,structuralSummaryError:null,team:null,progress:null,reviewerWizard:null,auditFlagIndex:null,gateResolutions:new Map,gateActionClaims:new Map,gateActionRecoveryBlocked:!1},...t.initial??{}}}function tg(t){let e=pL(t),r=new Set;function n(){return e}function i(s){e=Zf(e,s);for(let a of r)a(e)}function o(s){return r.add(s),()=>{r.delete(s)}}return{getState:n,dispatch:i,subscribe:o}}var Se=E(require("react"));var eo=E(require("react"));var hL="#C026D3",wE="multi-agent orchestration";function mL(){return process.env.NO_COLOR==="1"||process.env.TERM==="dumb"||process.env.CODEVIBE_NO_TUI==="1"}function vE(){let{ink:t}=se(),{Box:e,Text:r}=t;return mL()?eo.createElement(e,{flexDirection:"column",marginBottom:1},eo.createElement(r,null,"CodeVibe"),eo.createElement(r,null,wE)):eo.createElement(e,{flexDirection:"column",marginBottom:1},eo.createElement(r,{color:hL,bold:!0},"CodeVibe"),eo.createElement(r,{dimColor:!0},wE))}var Dr=E(require("react"));var bu=E(require("react"));function bE(t){let{ink:e}=se(),{Box:r,Text:n}=e;return bu.createElement(r,{flexDirection:"row"},bu.createElement(n,{color:"cyan"},"> "),bu.createElement(n,null,t.entry.text))}var Is=E(require("react"));function kE(t){let{ink:e}=se(),{Box:r,Text:n}=e;return Is.createElement(r,{flexDirection:"column"},Is.createElement(n,null,Is.createElement(n,{color:"magenta"},"\u25CF "),`Planner classified: ${t.entry.action}`),Is.createElement(r,{marginLeft:2},Is.createElement(n,{dimColor:!0},`rationale: ${JSON.stringify(t.entry.rationale)}`)))}var Un=E(require("react"));function fL(t){if(t.kind==="NOTIFICATION"&&"payload"in t&&t.payload&&typeof t.payload=="object"&&typeof t.payload.message=="string")return t.payload.message;switch(t.kind){case"EXECUTOR_REFUSAL":return`refusal ${t.payload.refusalCategory}: ${t.payload.refusalDetail}`;case"TASK_BYPASS":return`bypass: ${t.payload.bypassReason}`;case"USER_PROMPT":case"ASSISTANT_RESPONSE":case"INTERACTIVE_PROMPT":case"NOTIFICATION":return t.kind.toLowerCase();case"PROCESS_SPAWNED":return"process spawned";case"FILE_CHANGE":return"file change";case"TOOL_USE":return"tool use";case"VERIFICATION_RUN":return"verification run";case"PROCESS_EXITED":return"process exited";default:{let e=t;return"event"}}}function EE(t){return!t||typeof t!="object"||Array.isArray(t)?null:t}function gL(t,e){let r=EE(t);if(!r)return null;let n=r.number,i=r.text,o=r.label,s=typeof n=="string"&&n.length>0?n:String(e+1),a=typeof i=="string"&&i.length>0?i:typeof o=="string"&&o.length>0?o:null;if(!a)return null;let c=r.description;return{number:s,text:a,...typeof c=="string"&&c.length>0?{description:c}:{}}}function SE(t){return Array.isArray(t)?t.map((e,r)=>gL(e,r)).filter(e=>e!==null):[]}function yL(t){let e=t.questions;if(Array.isArray(e)&&e.length>0)return e.map(i=>{let o=EE(i);if(!o||typeof o.question!="string"||o.question.length===0)return null;let s=SE(o.options);return s.length===0?null:{question:o.question,...typeof o.header=="string"&&o.header.length>0?{header:o.header}:{},options:s,...typeof o.instructions=="string"&&o.instructions.length>0?{instructions:o.instructions}:{}}}).filter(i=>i!==null);let r=SE(t.options);return r.length===0?[]:[{question:typeof t.question=="string"&&t.question.length>0?t.question:typeof t.content=="string"&&t.content.length>0?t.content:"Interactive prompt",options:r,...typeof t.instructions=="string"&&t.instructions.length>0?{instructions:t.instructions}:{}}]}function RE(t){let{ink:e}=se(),{Box:r,Text:n}=e,i=t.entry.event;if(i.kind==="INTERACTIVE_PROMPT"&&"payload"in i&&i.payload&&typeof i.payload=="object"){let s=yL(i.payload);if(s.length>0)return Un.createElement(r,{marginLeft:2,flexDirection:"column"},Un.createElement(n,{dimColor:!0},"\u23BF interactive prompt"),...s.flatMap((a,c)=>[Un.createElement(n,{key:`q-${c}`,bold:!0},`${a.header?`${a.header}: `:""}${a.question}`),...a.options.map(d=>Un.createElement(n,{key:`q-${c}-opt-${d.number}`},` ${d.number}. ${d.text}${d.description?` \u2014 ${d.description}`:""}`)),...a.instructions?[Un.createElement(n,{key:`q-${c}-instructions`,dimColor:!0},` ${a.instructions}`)]:[]]))}let o=fL(t.entry.event);return Un.createElement(r,{marginLeft:2},Un.createElement(n,{dimColor:!0},"\u23BF "),Un.createElement(n,null,o))}var qn=E(require("react"));var wL={queued:"\u25CC",running:"\u25D0",PASS:"\u2713",REVISE:"\u270E",BLOCK:"\u2717"},vL={queued:"gray",running:"yellow",PASS:"green",REVISE:"yellow",BLOCK:"red"};function IE(t){let{ink:e}=se(),{Box:r,Text:n}=e,i=t.entry.seats.length,o=t.entry.seats.filter(s=>s.status==="PASS"||s.status==="REVISE"||s.status==="BLOCK").length;return qn.createElement(r,{flexDirection:"column"},qn.createElement(n,null,qn.createElement(n,{color:"magenta"},"\u25CF "),`Reviewer quorum (${o}/${i} done): ${t.entry.quorumStatus}`),...t.entry.seats.map(s=>qn.createElement(r,{key:s.seatId,marginLeft:2},qn.createElement(n,{dimColor:!0},"\u23BF "),qn.createElement(n,null,`${s.seatId} ${s.reviewerKind.padEnd(7)} `),qn.createElement(n,{color:vL[s.status]},wL[s.status]),qn.createElement(n,null,` ${s.status}`))))}var ku=E(require("react"));function AE(t){let{ink:e}=se(),{Text:r}=e,n=t.entry.gate;return ku.createElement(r,null,ku.createElement(r,{color:"magenta"},"\u25CF "),ku.createElement(r,null,`Gate: ${n.gateKind} Status: ${n.status} Auto-revise: ${n.autoReviseRound}/${n.autoReviseCap}`))}var vc=E(require("react"));function PE(t){let{ink:e}=se(),{Box:r,Text:n}=e;return vc.createElement(r,{flexDirection:"column"},vc.createElement(n,{color:"cyan"},t.entry.command),vc.createElement(r,{marginLeft:2},vc.createElement(n,null,t.entry.output)))}var Su=E(require("react"));function TE(t){let{ink:e}=se(),{Text:r}=e,n=t.entry.source==="planner"?"magenta":"yellow";return Su.createElement(r,null,Su.createElement(r,{color:n},"\u25CF "),Su.createElement(r,{italic:!0},t.entry.text))}var Et=E(require("react"));var Or="orchestration_escalated_gate",to="orchestration_final_approval",nr="continuation_offer_handoff";var bL=["CLAUDE","CODEX","ANTIGRAVITY"],kL=["CLAUDE","CODEX","GEMINI","ANTIGRAVITY"];function OE(t,e){return t?.id==="CONTINUE_WITH"&&t.targetAgent===e}function DE(t){return t?.id==="CANCEL"&&!t.targetAgent}function xE(t){return t.length!==4?!1:bL.every((e,r)=>OE(t[r],e))&&DE(t[3])}function SL(t){return t.length!==5?!1:kL.every((e,r)=>OE(t[r],e))&&DE(t[4])}function EL(t){if(xE(t))return[...t];if(!SL(t))return null;let e=t.filter(r=>r.targetAgent!=="GEMINI");return xE(e)?e:null}function NE(t){if(t.type!=="INTERACTIVE_PROMPT")return null;let e=t.metadata,r=null;if(e&&typeof e=="object")r=e;else if(typeof e=="string")try{let ee=JSON.parse(e);ee&&typeof ee=="object"&&!Array.isArray(ee)&&(r=ee)}catch{return null}if(!r)return null;let n=r.prompt_kind;if(n!==Or&&n!==to&&n!==nr)return null;let i=n,o=r.payload;if(!o||typeof o!="object"||Array.isArray(o))return null;let s=o,a=s.taskId,c=s.gateId;if(typeof a!="string"||a.length===0||typeof c!="string"||c.length===0)return null;let d=s.decisionProtocolVersion;if(d!==void 0&&d!==1&&d!==2)return null;let l=d??1,u=s.outcome;if(!u||typeof u!="object"||Array.isArray(u))return null;let p=u,h=p.round;if(typeof h!="number"||!Number.isFinite(h))return null;let y=s.options;if(!Array.isArray(y))return null;if(i===nr){if(y.length!==4&&y.length!==5)return null}else{let ee=i===Or?5:2;if(y.length!==ee)return null}let g=[];for(let ee of y){if(!ee||typeof ee!="object"||Array.isArray(ee))return null;let H=ee,W=H.id,ve=H.label,Q=H.description;if(typeof W!="string"||W.length===0||typeof ve!="string"||typeof Q!="string")return null;let D=H.targetAgent,Z=typeof D=="string"?D:void 0;g.push({id:W,label:ve,description:Q,...Z!==void 0?{targetAgent:Z}:{}})}if(i===nr){let ee=EL(g);if(!ee)return null;g=ee}let f=p.reason,w=typeof f=="string"?f:void 0,v=r.summary,b=typeof v=="string"?v:void 0,S=IL(r.timeline),R=AL(r.roundHistory),x=PL(r.verdictDetailsUnavailable),P=r.offerId,O=typeof P=="string"?P:void 0,C=r.sourceAgent,T=typeof C=="string"?C:void 0,V=r.packetHash,X=typeof V=="string"?V:void 0,L=s.taskGroupId,Re=s.groupGeneration,Ne;if(L!==void 0||Re!==void 0){if(i!==Or||typeof L!="string"||L.length===0||typeof Re!="number"||!Number.isSafeInteger(Re)||Re<1)return null;Ne={taskGroupId:L,groupGeneration:Re,protocolVersion:2}}let $=typeof t.timestamp=="string"?t.timestamp:"";return{promptKind:i,decisionProtocolVersion:l,taskId:a,gateId:c,currentRound:h,options:g,reason:w,summary:b,receivedAt:$,...S?{timeline:S}:{},...R?{roundHistory:R}:{},...x?{verdictDetails:x}:{},...O!==void 0?{offerId:O}:{},...T!==void 0?{sourceAgent:T}:{},...X!==void 0?{packetHash:X}:{},...Ne?{groupEscalation:Ne}:{}}}var RL=[{id:"ACCEPT",label:"Accept",description:"Keep every applied track as-is."},{id:"ACCEPT_WITH_NOTES",label:"Accept with notes",description:"Keep the applied tracks and attach a note."},{id:"REJECT_WITH_NOTES",label:"Reject with notes",description:"Revert every applied track and attach a note."},{id:"REJECT_RESTART",label:"Reject and restart",description:"Revert every applied track and re-run the whole team."},{id:"ABORT_TASK",label:"Abort",description:"Revert every applied track and stop."}];function ME(t){return{promptKind:Or,taskId:`group:${t.taskGroupId}`,gateId:`group-escalation:${t.taskGroupId}`,currentRound:0,options:RL,...t.haltReason?{reason:t.haltReason}:{},receivedAt:t.receivedAt??"",groupEscalation:{taskGroupId:t.taskGroupId,protocolVersion:1}}}function IL(t){if(!Array.isArray(t))return;let e=[];for(let r of t){if(!r||typeof r!="object"||Array.isArray(r))continue;let n=r,i=n.at,o=n.kind;typeof i!="string"||typeof o!="string"||e.push({at:i,kind:o})}return e.length>0?e:void 0}function AL(t){if(!Array.isArray(t))return;let e=[];for(let r of t){if(!r||typeof r!="object"||Array.isArray(r))continue;let n=r,i=n.round,o=n.kind,s=n.reason;typeof i!="number"||!Number.isFinite(i)||typeof o!="string"||typeof s!="string"||e.push({round:i,kind:o,reason:s})}return e.length>0?e:void 0}function PL(t){if(!(typeof t!="string"||t.length===0))return t==="size"?{status:"unavailable",reason:"size"}:t==="encryption_error"?{status:"unavailable",reason:"encryption_error"}:{status:"unavailable",reason:"unavailable_other"}}function LE(t,e){if(typeof e!="number"||!Number.isInteger(e)||e<1||e>t.options.length)return null;let r=t.options[e-1];if(!r||typeof r.id!="string"||r.id.length===0)return null;let n=r.id.toLowerCase(),i=n.endsWith("_with_notes");return n==="continue_with"?{kind:n,needsNotes:!1,targetAgent:r.targetAgent}:{kind:n,needsNotes:i}}var TL={consensus_reject:{label:"Reviewers rejected",explanation:"The review panel agreed to reject this implementation."},consensus_disagreement:{label:"Reviewers disagreed",explanation:"The reviewers couldn't reach consensus and escalated the decision to you."},reviewer_requested_escalation:{label:"Reviewer escalated",explanation:"A reviewer explicitly asked for your decision on this change."},rounds_exhausted:{label:"Revision limit reached",explanation:"The automatic revision limit was reached without consensus."},tier_disallows_auto_revise:{label:"Auto-revise unavailable",explanation:"Your plan doesn't include automatic revision rounds, so this is escalated to you."},reviewer_error:{label:"Reviewer error",explanation:"A reviewer failed to complete, so the gate was escalated for your decision."},blocked_by_review:{label:"Blocked by review",explanation:"Review found blocking issues that need your decision."},auto_revise_cap_exhausted:{label:"Revision limit reached",explanation:"The automatic revision budget was exhausted."},insufficient_quorum:{label:"Not enough reviewers",explanation:"Too few reviewers responded to decide automatically."},policy_resolution_failed:{label:"Policy check failed",explanation:"The orchestration policy couldn't resolve this gate automatically."},policy_no_progress:{label:"No progress detected",explanation:"Successive revision rounds stopped making progress."},policy_repeated_finding:{label:"Repeated issue",explanation:"The same issue recurred across rounds."},policy_reviewer_conflict:{label:"Reviewer conflict",explanation:"Reviewers produced conflicting verdicts policy couldn't reconcile."},policy_risk_stopped:{label:"Stopped for safety",explanation:"A potentially risky action was detected and stopped for your review."},parser_uncertain:{label:"Couldn't parse proposal",explanation:"The agent's output couldn't be confidently parsed as a proposal."},final_approval:{label:"Final approval",explanation:"The work is complete and awaiting your final approval."}},ng={APPROVE:"Approved",REJECT:"Rejected",REVISE:"Requested changes",ESCALATE:"Escalated"};function As(t){if(!t)return null;let e=TL[t];return e?{label:e.label,explanation:e.explanation}:{label:t,explanation:null}}function rg(t){return ng[t]??t}function xL(t){if(!t||typeof t!="object"||Array.isArray(t))return{status:"unavailable",reason:"decrypt_failed"};let e=t,r=e.reviewers;if(!Array.isArray(r))return{status:"unavailable",reason:"decrypt_failed"};let n=[];for(let o of r){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o,a=s.seatId;if(typeof a!="number"||!Number.isInteger(a))continue;let c=s.role;if(typeof c!="string"||c.length===0)continue;let d=s.reviewerAgent;if(typeof d!="string")continue;let l=s.decision;if(typeof l!="string")continue;let u=s.findings,p=Array.isArray(u)?u.filter(g=>typeof g=="string"):[],h=s.findingsTruncated===!0,y=typeof s.truncatedFindingCount=="number"&&Number.isFinite(s.truncatedFindingCount)?s.truncatedFindingCount:0;n.push({seatId:a,role:c,reviewerAgent:d,decision:l,findings:p,findingsTruncated:h,truncatedFindingCount:y})}if(n.length===0)return{status:"unavailable",reason:"decrypt_failed"};let i=e.findingsOmittedForSize===!0;return{status:"available",reviewers:n,findingsOmittedForSize:i}}function BE(t,e,r){let n=t.verdictDetails;if(!n||typeof n!="object"||Array.isArray(n))return;let i=n.encrypted;if(typeof i!="string"||i.length===0)return;let o;try{o=r(i,e)}catch{return{status:"unavailable",reason:"decrypt_failed"}}return xL(o)}function FE(t){let e=t.verdictDetails;if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e.encrypted;return typeof r=="string"&&r.length>0}var _E="Full review in the audit browser",_L="Reviewer details unavailable",CE="full review in the audit browser";function CL(t,e){return e>0?`(${e} more \u2014 ${CE})`:t?`(more \u2014 ${CE})`:null}function GE(t){let e=t.summary??null,r=As(t.reason),n=r?.label??null,i=r?.explanation??null,o=`Round ${t.currentRound}`,s=(t.timeline??[]).map(g=>({kind:g.kind,at:g.at})),a=OL(t.timeline),c=t.roundHistory??[],d=c.length>1?c.map(g=>({round:g.round,reasonLabel:As(g.reason)?.label??g.reason})):[],l=c.length>1&&c.some(g=>g.omittedEarlier===!0),u=[],p=null,h=null,y=t.verdictDetails;return y&&(y.status==="available"?(u=y.reviewers.map(g=>{let f=CL(g.findingsTruncated,g.truncatedFindingCount);return{seatId:g.seatId,role:g.role,reviewerAgent:g.reviewerAgent,header:`Reviewer ${g.seatId} (${g.role}, ${g.reviewerAgent}): ${rg(g.decision)}`,findings:g.findings,truncationHint:f}}),y.findingsOmittedForSize&&(p=_E)):(h=_L,y.reason==="size"&&(p=_E))),{headline:e,reasonLabel:n,reasonExplanation:i,roundLabel:o,timeline:s,elapsedSeconds:a,cascade:d,cascadeOmittedEarlier:l,reviewers:u,panelTruncationHint:p,reviewerUnavailableLine:h}}function $E(t){if(!t||typeof t!="object")return null;let e=l=>typeof l=="number"&&Number.isFinite(l)?l:null,r=l=>Array.isArray(l)?l.filter(u=>typeof u=="string"):[],n=null;if(e(t.schemaVersion)===2&&t.requirements&&t.reviewQuorum&&t.mergeGate&&t.durations&&t.tokenUsage){let l=Array.isArray(t.reviewQuorum.seats)?t.reviewQuorum.seats:[],u=Array.isArray(t.implementors)?t.implementors:[],p=Array.isArray(t.tokenUsage.invocations)?t.tokenUsage.invocations:[];n={schemaVersion:2,requirements:{problem:typeof t.requirements.problem=="string"?t.requirements.problem:"",expectedOutputs:r(t.requirements.expectedOutputs)},implementors:u.filter(h=>!!h&&typeof h=="object").map(h=>({agent:typeof h.agent=="string"?h.agent:"unknown",trackIndex:e(h.trackIndex),taskId:typeof h.taskId=="string"?h.taskId:""})),reviewQuorum:{seats:l.filter(h=>!!h&&typeof h=="object").map(h=>({seatId:e(h.seatId)??-1,role:typeof h.role=="string"?h.role:"",agent:typeof h.agent=="string"?h.agent:""})),roundCount:e(t.reviewQuorum.roundCount)??0,revisionCount:e(t.reviewQuorum.revisionCount)??0},mergeGate:{applicable:t.mergeGate.applicable===!0,outcome:typeof t.mergeGate.outcome=="string"?t.mergeGate.outcome:"unavailable",resolution:typeof t.mergeGate.resolution=="string"?t.mergeGate.resolution:null},durations:{taskElapsedMs:e(t.durations.taskElapsedMs),reviewerElapsedMs:e(t.durations.reviewerElapsedMs),availability:typeof t.durations.availability=="string"?t.durations.availability:"unavailable"},tokenUsage:{knownTotal:e(t.tokenUsage.knownTotal),knownInput:e(t.tokenUsage.knownInput),knownOutput:e(t.tokenUsage.knownOutput),knownCachedInput:e(t.tokenUsage.knownCachedInput),availability:typeof t.tokenUsage.availability=="string"?t.tokenUsage.availability:"unavailable",unavailableRoles:r(t.tokenUsage.unavailableRoles),invocations:p.filter(h=>!!h&&typeof h=="object").map(h=>({role:typeof h.role=="string"?h.role:"unknown",agent:typeof h.agent=="string"?h.agent:"unknown",taskId:typeof h.taskId=="string"?h.taskId:null,trackIndex:e(h.trackIndex),round:e(h.round),gateId:typeof h.gateId=="string"?h.gateId:null,seatId:e(h.seatId),reviewerRole:typeof h.reviewerRole=="string"?h.reviewerRole:null,inputTokens:e(h.inputTokens),outputTokens:e(h.outputTokens),cachedInputTokens:e(h.cachedInputTokens),totalTokens:e(h.totalTokens),elapsedMs:e(h.elapsedMs),availability:typeof h.availability=="string"?h.availability:"unavailable",unavailableReason:typeof h.unavailableReason=="string"?h.unavailableReason:null}))},residualRisks:r(t.residualRisks)}}let i=Array.isArray(t.rounds)?t.rounds:[],o=[];for(let l of i){if(!l||typeof l!="object")continue;let u=typeof l.round=="number"&&Number.isFinite(l.round)?l.round:o.length,p=typeof l.proposal=="string"?l.proposal:"",h=typeof l.outcome=="string"?l.outcome:"",y=typeof l.reviseNotes=="string"&&l.reviseNotes.length>0?l.reviseNotes:null,g=[],f=Array.isArray(l.reviewers)?l.reviewers:[];for(let w of f){if(!w||typeof w!="object")continue;let v=typeof w.seatId=="number"&&Number.isInteger(w.seatId)?w.seatId:-1,b=typeof w.role=="string"?w.role:"",S=typeof w.agent=="string"?w.agent:"",R=typeof w.decision=="string"?w.decision:"",x=typeof w.reasoning=="string"?w.reasoning:"",P=Array.isArray(w.suggestedChanges)?w.suggestedChanges.filter(O=>typeof O=="string"):[];g.push({seatId:v,role:b,agent:S,header:`Reviewer ${v} (${b}, ${S}): ${rg(R)}`,decisionLabel:rg(R),reasoning:x,suggestedChanges:P})}o.push({round:u,roundLabel:`Round ${u}`,proposal:p,reviewers:g,outcome:h,reviseNotes:y})}if(o.length===0&&n===null)return null;let s=typeof t.finalOutcome=="string"?t.finalOutcome:"",a=typeof t.omittedRounds=="number"&&Number.isFinite(t.omittedRounds)?t.omittedRounds:0,c=t.truncatedForSize===!0,d=null;if(c||a>0){let l=[];a>0&&l.push(`${a} earlier round${a===1?"":"s"} omitted`),c&&l.push("some content truncated"),d=`Summary shortened to fit (${l.join("; ")} \u2014 full review in the audit browser)`}return{terminal:n,rounds:o,finalOutcome:s,truncationNotice:d}}function OL(t){if(!t||t.length===0)return null;let e=t.find(s=>s.kind==="gate_opened"),r=t.find(s=>s.kind==="gate_resolved");if(!e||!r)return null;let n=Date.parse(e.at),i=Date.parse(r.at);if(Number.isNaN(n)||Number.isNaN(i))return null;let o=i-n;return o<0?null:Math.round(o/1e3)}function DL(t){return As(t)?.label??null}function NL(t){return t===Or?"Escalated review":t===to?"Final approval":t===nr?"Continue with which agent?":t}function ML(t){switch(t.phase){case"awaiting-number":return{text:"awaiting your response",color:"cyan"};case"awaiting-notes":return{text:"Notes mode: type your notes + Enter",color:"cyan"};case"submitting":return{text:"submitting\u2026",color:"yellow"};case"confirming":return{text:"Confirming decision\u2026",color:"yellow"};case"claimed":return{text:"Decision accepted; awaiting result",color:"yellow"};case"resolved":return t.resolvedBy==="server"?{text:t.serverDecision?`Already resolved on server \u2014 ${t.serverDecision}`:"Already resolved on server",color:"yellow"}:t.resolvedBy==="durable"?{text:`Resolved \u2014 ${t.resolution.label}`,color:"green"}:{text:`Resolved \u2014 ${t.postAction.kind}`,color:"green"};default:{let e=t;return{text:"",color:"white"}}}}function HE(t,e){return e<=0?"":t.length<=e?t:e===1?"\u2026":`${t.slice(0,e-1)}\u2026`}var LL=6;function WE(t){let{ink:e}=se(),{Box:r,Text:n}=e,{entry:i,trackLabel:o}=t,{envelope:s,uiState:a,queue:c}=i,d=e.useStdout().stdout,l=d&&typeof d.columns=="number"&&d.columns||80,p=s.promptKind===Or?DL(s.reason):null,h=NL(s.promptKind),y=t.gateActionRecoveryBlocked&&a.phase!=="claimed"&&a.phase!=="resolved"?{text:"Gate actions unavailable while history reconnects",color:"yellow"}:ML(a),g=a.phase==="resolved",f=t.gateActionRecoveryBlocked===!0||a.phase==="claimed"||g,w=[Et.createElement(n,{key:"badge",color:"magenta",bold:!0},"[GATE] "),Et.createElement(n,{key:"kind",bold:!0},h)];if(o&&w.push(Et.createElement(n,{key:"track",dimColor:!0},` \xB7 ${o}`)),p){let b=7+h.length+(o?` \xB7 ${o}`.length:0)+3,S=HE(p,l-4-b);S.length>0&&w.push(Et.createElement(n,{key:"reason",color:"red"},` \u2014 ${S}`))}let v=[];return v.push(Et.createElement(r,{key:"header",flexDirection:"row"},...w)),v.push(Et.createElement(r,{key:"status",marginLeft:2,marginTop:0},Et.createElement(n,{color:y.color},y.text))),f||s.options.forEach((b,S)=>{let R=S+1,x=`${R}. ${b.label} \u2014 `.length,P=HE(b.description,l-LL-x),O=[Et.createElement(n,{key:"num",color:"cyan",bold:!0},`${R}. `),Et.createElement(n,{key:"label",bold:!0},b.label)];P.length>0&&O.push(Et.createElement(n,{key:"desc",dimColor:!0},` \u2014 ${P}`)),v.push(Et.createElement(r,{key:`opt-${S}`,marginLeft:2,flexDirection:"row"},...O))}),c.length>0&&v.push(Et.createElement(r,{key:"queue",marginLeft:2},Et.createElement(n,{dimColor:!0},`(+${c.length} more queued)`))),a.phase==="awaiting-number"&&!t.gateActionRecoveryBlocked&&v.push(Et.createElement(r,{key:"reply-hint",marginLeft:2},Et.createElement(n,{dimColor:!0},"Reply with a number \xB7 \u2191 review details above"))),Et.createElement(r,{flexDirection:"column",borderStyle:"round",borderColor:g?"green":"yellow",paddingX:1},...v)}var wr=E(require("react"));var N=E(require("react"));function UE(t){if(t===null)return"Unavailable";let e=Math.max(0,Math.round(t/1e3));if(e<60)return`${e}s`;let r=Math.floor(e/60),n=e%60;return n===0?`${r}m`:`${r}m ${n}s`}function BL(t){switch(t){case"gate_opened":return"Gate opened";case"verdicts_collected":return"Verdicts collected";case"gate_resolved":return"Gate resolved";default:return t}}function qE(t){let{ink:e}=se(),{Box:r,Text:n}=e,i=GE(t.envelope);if(!(i.headline!==null||i.reasonLabel!==null||i.timeline.length>0||i.cascade.length>0||i.reviewers.length>0||i.reviewerUnavailableLine!==null))return null;let s=[];if(i.headline&&s.push(N.createElement(r,{key:"headline",flexDirection:"row"},N.createElement(n,{color:"cyan",bold:!0},"\u256D "),N.createElement(n,{bold:!0},i.headline))),i.reasonLabel){let a=[N.createElement(n,{key:"reason-label",color:"yellow"},i.reasonLabel)];a.push(N.createElement(n,{key:"round",dimColor:!0},` \xB7 ${i.roundLabel}`)),s.push(N.createElement(r,{key:"reason",marginLeft:2,flexDirection:"row"},...a))}else s.push(N.createElement(r,{key:"round-only",marginLeft:2},N.createElement(n,{dimColor:!0},i.roundLabel)));if(i.reasonExplanation&&s.push(N.createElement(r,{key:"reason-explanation",marginLeft:2},N.createElement(n,{dimColor:!0,italic:!0},i.reasonExplanation))),i.timeline.length>0){let c=i.timeline.map(d=>BL(d.kind)).join(" \u2192 ");i.elapsedSeconds!==null&&(c+=` (${i.elapsedSeconds}s)`),s.push(N.createElement(r,{key:"timeline",marginLeft:2},N.createElement(n,{dimColor:!0},c)))}return i.cascade.length>0&&(s.push(N.createElement(r,{key:"cascade-header",marginLeft:2},N.createElement(n,{dimColor:!0,bold:!0},"Prior rounds:"))),i.cascadeOmittedEarlier&&s.push(N.createElement(r,{key:"cascade-omitted",marginLeft:4},N.createElement(n,{dimColor:!0,italic:!0},"\u2026 earlier rounds omitted"))),i.cascade.forEach((a,c)=>{s.push(N.createElement(r,{key:`cascade-${c}`,marginLeft:4},N.createElement(n,{dimColor:!0},`Round ${a.round}: ${a.reasonLabel}`)))})),i.reviewers.length>0&&(s.push(N.createElement(r,{key:"reviewers-header",marginLeft:2},N.createElement(n,{bold:!0,color:"magenta"},"Reviewers:"))),i.reviewers.forEach((a,c)=>{s.push(N.createElement(r,{key:`reviewer-${c}`,marginLeft:4},N.createElement(n,{bold:!0},a.header))),a.findings.forEach((d,l)=>{s.push(N.createElement(r,{key:`reviewer-${c}-finding-${l}`,marginLeft:6,flexDirection:"row"},N.createElement(n,{dimColor:!0},"\u2022 "),N.createElement(n,{dimColor:!0},d)))}),a.truncationHint&&s.push(N.createElement(r,{key:`reviewer-${c}-trunc`,marginLeft:6},N.createElement(n,{dimColor:!0,italic:!0},a.truncationHint)))})),i.panelTruncationHint&&s.push(N.createElement(r,{key:"panel-trunc",marginLeft:2},N.createElement(n,{dimColor:!0,italic:!0},i.panelTruncationHint))),i.reviewerUnavailableLine&&s.push(N.createElement(r,{key:"reviewer-unavailable",marginLeft:2},N.createElement(n,{dimColor:!0,italic:!0},i.reviewerUnavailableLine))),N.createElement(r,{flexDirection:"column"},...s)}function KE(t){let{ink:e}=se(),{Box:r,Text:n}=e;if(t.rounds.length===0&&t.terminal===null)return null;let i=[];i.push(N.createElement(r,{key:"review-summary-header",marginLeft:2,marginTop:1},N.createElement(n,{bold:!0,color:"cyan"},"Review summary")));{let o=t.terminal;if(o){i.push(N.createElement(r,{key:"rs-requirements",marginLeft:2,marginTop:1},N.createElement(n,{bold:!0},"Requirements"))),o.requirements.problem&&i.push(N.createElement(r,{key:"rs-requirements-problem",marginLeft:4},N.createElement(n,{dimColor:!0},o.requirements.problem))),o.requirements.expectedOutputs.forEach((d,l)=>{i.push(N.createElement(r,{key:`rs-output-${l}`,marginLeft:4},N.createElement(n,{dimColor:!0},`\u2022 ${d}`)))}),i.push(N.createElement(r,{key:"rs-implementors",marginLeft:2,marginTop:1},N.createElement(n,{bold:!0},"Implementors"))),o.implementors.forEach((d,l)=>{let u=d.trackIndex===null?"":` \xB7 Track ${Cr(d.trackIndex)}`;i.push(N.createElement(r,{key:`rs-implementor-${l}`,marginLeft:4},N.createElement(n,{dimColor:!0},`${d.agent}${u}`)))}),o.implementors.length===0&&i.push(N.createElement(r,{key:"rs-implementors-empty",marginLeft:4},N.createElement(n,{dimColor:!0},"Unavailable")));let s=o.reviewQuorum.seats.map(d=>`${d.agent} (${d.role})`).join(", ");i.push(N.createElement(r,{key:"rs-quorum",marginLeft:2,marginTop:1},N.createElement(n,{bold:!0},"Review quorum")),N.createElement(r,{key:"rs-quorum-detail",marginLeft:4},N.createElement(n,{dimColor:!0},`${s||"Unavailable"} \xB7 ${o.reviewQuorum.roundCount} round${o.reviewQuorum.roundCount===1?"":"s"} \xB7 ${o.reviewQuorum.revisionCount} revision${o.reviewQuorum.revisionCount===1?"":"s"}`))),i.push(N.createElement(r,{key:"rs-merge",marginLeft:2,marginTop:1},N.createElement(n,{bold:!0},"Merge gate")),N.createElement(r,{key:"rs-merge-detail",marginLeft:4},N.createElement(n,{dimColor:!0},o.mergeGate.applicable?`${o.mergeGate.outcome}${o.mergeGate.resolution?` \xB7 ${o.mergeGate.resolution}`:""}`:"Not applicable"))),i.push(N.createElement(r,{key:"rs-duration",marginLeft:2,marginTop:1},N.createElement(n,{bold:!0},"Duration")),N.createElement(r,{key:"rs-duration-detail",marginLeft:4},N.createElement(n,{dimColor:!0},`Task ${UE(o.durations.taskElapsedMs)} \xB7 Reviewers ${UE(o.durations.reviewerElapsedMs)} \xB7 ${o.durations.availability}`)));let a=o.tokenUsage.unavailableRoles.length?` \xB7 unavailable: ${o.tokenUsage.unavailableRoles.join(", ")}`:"",c=[o.tokenUsage.knownInput!==null?`${o.tokenUsage.knownInput.toLocaleString()} input`:null,o.tokenUsage.knownOutput!==null?`${o.tokenUsage.knownOutput.toLocaleString()} output`:null,o.tokenUsage.knownCachedInput!==null?`${o.tokenUsage.knownCachedInput.toLocaleString()} cached`:null].filter(d=>d!==null).join(" \xB7 ");i.push(N.createElement(r,{key:"rs-tokens",marginLeft:2,marginTop:1},N.createElement(n,{bold:!0},"Token usage")),N.createElement(r,{key:"rs-tokens-detail",marginLeft:4},N.createElement(n,{dimColor:!0},`${o.tokenUsage.knownTotal?.toLocaleString()??"Unavailable"} known \xB7 ${o.tokenUsage.availability}${c?` \xB7 ${c}`:""}${a}`)));for(let[d,l]of o.tokenUsage.invocations.entries()){let u=l.role==="reviewer"?`r${l.round??"?"} seat ${l.seatId??"?"}`:l.round!==null?`r${l.round}`:l.role,p=[l.inputTokens!==null?`${l.inputTokens.toLocaleString()} input`:null,l.outputTokens!==null?`${l.outputTokens.toLocaleString()} output`:null,l.cachedInputTokens!==null?`cached ${l.cachedInputTokens.toLocaleString()}`:null].filter(y=>y!==null).join(" \xB7 "),h=l.totalTokens!==null?`${l.totalTokens.toLocaleString()} tokens${p?` \xB7 ${p}`:""}`:p?`partial \xB7 ${p}`:"unavailable tokens";i.push(N.createElement(r,{key:`rs-tokens-row-${d}`,marginLeft:4},N.createElement(n,{dimColor:!0},`${u}: ${l.agent} ${l.role} \xB7 ${h} \xB7 ${l.availability}`)))}i.push(N.createElement(r,{key:"rs-risks",marginLeft:2,marginTop:1},N.createElement(n,{bold:!0},"Residual risks"))),o.residualRisks.length===0?i.push(N.createElement(r,{key:"rs-risks-none",marginLeft:4},N.createElement(n,{dimColor:!0},"None reported"))):o.residualRisks.forEach((d,l)=>{i.push(N.createElement(r,{key:`rs-risk-${l}`,marginLeft:4},N.createElement(n,{dimColor:!0},`\u2022 ${d}`)))})}t.truncationNotice&&i.push(N.createElement(r,{key:"review-summary-trunc",marginLeft:2},N.createElement(n,{dimColor:!0,italic:!0},t.truncationNotice))),t.rounds.forEach((s,a)=>{i.push(N.createElement(r,{key:`rs-round-${a}`,marginLeft:2,marginTop:a>0?1:0},N.createElement(n,{bold:!0},`${s.roundLabel}${s.outcome?` \u2014 ${s.outcome}`:""}`))),s.proposal&&i.push(N.createElement(r,{key:`rs-round-${a}-proposal`,marginLeft:4},N.createElement(n,{dimColor:!0},s.proposal))),s.reviewers.forEach((c,d)=>{i.push(N.createElement(r,{key:`rs-round-${a}-seat-${d}`,marginLeft:4},N.createElement(n,{bold:!0},c.header))),c.reasoning&&i.push(N.createElement(r,{key:`rs-round-${a}-seat-${d}-reasoning`,marginLeft:6},N.createElement(n,{dimColor:!0},c.reasoning))),c.suggestedChanges.forEach((l,u)=>{i.push(N.createElement(r,{key:`rs-round-${a}-seat-${d}-change-${u}`,marginLeft:6,flexDirection:"row"},N.createElement(n,{dimColor:!0},"\u2022 "),N.createElement(n,{dimColor:!0},l)))})}),s.reviseNotes&&i.push(N.createElement(r,{key:`rs-round-${a}-revise`,marginLeft:4},N.createElement(n,{color:"yellow"},`Revise notes: ${s.reviseNotes}`)))})}return N.createElement(r,{flexDirection:"column"},...i)}function FL(t){return As(t)?.label??null}function GL(t){return t===Or?"Escalated review":t===to?"Final approval":t===nr?"Continue with which agent?":t}function $L(t){let{ink:e}=se(),{Box:r,Text:n}=e,o=t.promptKind===Or?FL(t.reason):null,s=GL(t.promptKind),a=[],c=qE({envelope:t});c&&a.push(wr.createElement(r,{key:"gate-details-panel",flexDirection:"column",marginBottom:0},c));let d=[wr.createElement(n,{key:"badge",color:"magenta",bold:!0},"[GATE] "),wr.createElement(n,{key:"kind"},s)];if(o&&d.push(wr.createElement(n,{key:"reason",color:"red"},` \u2014 ${o}`)),a.push(wr.createElement(r,{key:"header",flexDirection:"row"},...d)),t.promptKind===nr){let l=t.reason??"halted",u=t.sourceAgent?` \u2014 source: ${t.sourceAgent}`:"";a.push(wr.createElement(r,{key:"continuation-context",marginLeft:2},wr.createElement(n,{dimColor:!0},`Implementor halted (${l})${u}`))),t.packetHash&&a.push(wr.createElement(r,{key:"continuation-packet",marginLeft:2},wr.createElement(n,{dimColor:!0},`Packet ${t.packetHash.slice(0,8)}\u2026`)))}return t.summary&&a.push(wr.createElement(r,{key:"summary",marginLeft:2},wr.createElement(n,{dimColor:!0,italic:!0},t.summary))),wr.createElement(r,{flexDirection:"column"},...a)}function jE(t){let{panel:e}=t.entry;return e.variant==="prompt"?$L(e.envelope):KE(e.reviewSummary)}function ig(t,e,r){switch(t.kind){case"user-message":return Dr.createElement(bE,{entry:t});case"planner-decision":return Dr.createElement(kE,{entry:t});case"subagent-event":return Dr.createElement(RE,{entry:t});case"reviewer-status-node":return Dr.createElement(IE,{entry:t});case"gate-status-node":return Dr.createElement(AE,{entry:t});case"slash-output":return Dr.createElement(PE,{entry:t});case"advisory":return Dr.createElement(TE,{entry:t});case"gate-prompt":return Dr.createElement(WE,{entry:t,trackLabel:e?.get(t.envelope.taskId),gateActionRecoveryBlocked:r});case"gate-panel":return Dr.createElement(jE,{entry:t});default:{let n=t;throw new Error("Unknown conversation entry kind")}}}function VE(t){let{ink:e}=se(),{Box:r}=e;return Dr.createElement(r,{flexDirection:"column"},...t.entries.map(n=>Dr.createElement(r,{key:n.id,flexDirection:"column",marginBottom:0},ig(n,t.trackLabelByTaskId,t.gateActionRecoveryBlocked))))}var zE=E(require("os")),bc=E(require("react"));var HL=zE.homedir();function JE(t){let{ink:e}=se(),{Box:r,Text:n}=e,i=e.useStdout().stdout?.columns,o=t.columns??i??80,s=aE(t.plannerRuntimeKind,t.plannerLabel),{leftText:a,badgeText:c}=cE({cwd:t.cwd,tier:t.tier,homedir:HL,columns:o,badge:s});return bc.createElement(r,{flexDirection:"row",justifyContent:"space-between"},bc.createElement(n,{dimColor:!0},a),s&&c?bc.createElement(n,s.color?{color:s.color}:{dimColor:!0},c):bc.createElement(n,null,""))}var XE=["CLAUDE","CODEX","ANTIGRAVITY"],WL={CLAUDE:{name:"@claude",blurb:"ask Claude"},CODEX:{name:"@codex",blurb:"ask Codex"},ANTIGRAVITY:{name:"@agy",blurb:"ask Antigravity"}};function UL(t){let e=t.trim().toUpperCase();return XE.includes(e)?e:null}function QE(t=[]){let e=new Set(t.map(UL).filter(n=>n!==null)),r=XE.filter(n=>e.has(n)).map(n=>WL[n]);return[{name:"@all",blurb:r.length>0?"ask all available local agents":"ask all local agents"},...r]}function YE(t){return/\s/.test(t)}function ZE(t,e){return Math.max(0,Math.min(t,e.length))}function eR(t,e=t.length){let r=ZE(e,t),n=r;for(;n>0&&!YE(t[n-1]??"");)n-=1;let i=r;for(;i<t.length&&!YE(t[i]??"");)i+=1;let o=t.slice(n,r);return o.startsWith("@")?{start:n,end:i,prefix:o}:null}function og(t,e,r=t.length){let n=eR(t,r);if(!n)return[];let i=n.prefix.toLowerCase();return e.filter(o=>o.name.toLowerCase().startsWith(i))}function tR(t,e,r){let n=eR(t,e),i=`${r} `;if(!n){let c=ZE(e,t);return{value:t.slice(0,c)+i+t.slice(c),cursor:c+i.length}}let o=t.slice(n.end),s=o.startsWith(" ")?o.slice(1):o;return{value:t.slice(0,n.start)+i+s,cursor:n.start+i.length}}var nR=E(require("path")),rR={FREE:0,PRO:1,MAX:2};function qL(t,e){return!e||!t?!0:rR[t]>=rR[e]}function Ge(t,e,r){return{command:t,output:e,sideEffect:r}}var Eu=[{name:"/status",blurb:"Show the current task, who is working on it, and any pending approvals.",handler:()=>Ge("/status","PENDING \u2014 entrypoint pulls from store status")},{name:"/audit",blurb:"Review the full step-by-step history of a task (Max only).",minTier:"MAX",handler:()=>Ge("/audit","PENDING \u2014 entrypoint runs audit browser")},{name:"/flag",blurb:"Flag a bad quorum approval from the last /audit listing (Max only).",minTier:"MAX",handler:t=>t.length===0?Ge("/flag","Usage: /flag <entry-id> [note]. Flags a consensus-approve resolution from the most recent /audit listing as a bad approval. Run /audit <task-id> to list entry ids."):Ge("/flag","PENDING \u2014 entrypoint records bad-approval flag")},{name:"/continue",blurb:"Hand the current task to another agent, or accept a handoff.",handler:t=>{let e=t[0]??"help";return e==="request"||e==="accept"||e==="switch"?Ge("/continue","PENDING \u2014 entrypoint pulls from continuation reader"):Ge("/continue",["Usage: /continue <subcommand> [args]","","Subcommands:"," request [<target>] Hand off the active task to another agent."," accept <target> Resolve an active handoff prompt."].join(`
3746
3746
  `))}},{name:"/reviewers",blurb:"Show your reviewer panel \u2014 who reviews your code, and how.",minTier:"PRO",handler:()=>Ge("/reviewers","PENDING \u2014 entrypoint renders reviewer panel")},{name:"/reviewer-setup",blurb:"Set up your reviewer panel \u2014 choose who reviews your code.",minTier:"PRO",handler:()=>Ge("/reviewer-setup","PENDING \u2014 entrypoint opens reviewer wizard")},{name:"/help",blurb:"Show this help text.",handler:()=>{let t=["Available commands:"];for(let e of Eu)t.push(` ${e.name.padEnd(22)} ${e.blurb}`);return Ge("/help",t.join(`
3747
3747
  `))}},{name:"/cache-clear",blurb:"Clear CodeVibe\u2019s cached planning results for your account.",handler:()=>Ge("/cache-clear","PENDING \u2014 entrypoint flushes planner cache")},{name:"/continuation",blurb:"Manage task handoffs \u2014 check status, request one, or accept one.",handler:t=>{let e=t[0]??"help";return e==="help"?Ge("/continuation",["Usage: /continuation <subcommand> [args]","","Subcommands:"," status [task-id] List continuation packets (or show one)."," show <task-id> Render the full continuation packet."," verify <task-id> --hash <hex> Read packet + assert hash matches."," request [<target>] Hand off the active task to another agent."," accept <target> Resolve an active handoff prompt."," switch <target> Alias for accept."," help Show this help text."].join(`
3748
3748
  `)):e==="status"||e==="show"||e==="verify"||e==="request"||e==="accept"||e==="switch"?Ge("/continuation","PENDING \u2014 entrypoint pulls from continuation reader"):Ge("/continuation",`Unknown subcommand: ${e}. Type "/continuation help" for available subcommands.`)}},{name:"/structural-summary",blurb:"Show or rebuild the codebase summary CodeVibe uses for context.",handler:t=>{if(t.includes("--regenerate"))return{command:"/structural-summary",output:"Regenerating structural summary...",sideEffect:{kind:"REGENERATE_STRUCTURAL_SUMMARY"}};if(t.includes("--include-bodies")){let e=t.indexOf("--include-bodies")+1,r=t[e];return r?nR.isAbsolute(r)?{command:"/structural-summary",output:`Opting into body inclusion for ${r}...`,sideEffect:{kind:"OPT_IN_BODY_PATH",path:r}}:Ge("/structural-summary",`Path must be absolute (got: ${r}). Example: /structural-summary --include-bodies /Users/me/Workspace/myrepo/src`):Ge("/structural-summary","Usage: /structural-summary --include-bodies <absolute-path>")}return Ge("/structural-summary","PENDING \u2014 entrypoint pulls from store.structuralSummary")}},{name:"/review-reset",blurb:"Start a fresh comprehensive baseline on the next review round (Pro/Max).",minTier:"PRO",handler:()=>Ge("/review-reset","PENDING \u2014 entrypoint arms comprehensive review")},{name:"/task",blurb:"Run an implementation request directly, skipping planning (Pro/Max).",minTier:"PRO",handler:t=>t.length===0?Ge("/task","Usage: /task [--agent codex|claude] <implementation-request>. Pro/Max only; runs without planner classification."):Ge("/task","PENDING \u2014 entrypoint drives startTask")},{name:"/team",blurb:"Run multiple independent tasks in parallel as an agent team (Max only).",minTier:"MAX",handler:t=>t.length===0?Ge("/team","Usage: /team <json-work-items>. Starts an Agent Teams group (\u22652 disjoint tracks). Max-tier orchestration sessions only."):Ge("/team","PENDING \u2014 entrypoint runs createTaskGroup")},{name:"/quit",blurb:"Exit CodeVibe shell.",handler:()=>Ge("/quit","Exiting CodeVibe.",{kind:"EXIT"})},{name:"/exit",blurb:"Exit the CodeVibe shell (same as quit).",handler:()=>Ge("/exit","Exiting CodeVibe.",{kind:"EXIT"})}],KL=new Set(["/quit","/exit"]);function Ru(t){return KL.has(t)}function sg(t){let e=t.trim();if(!e.startsWith("/"))throw new Error(`routeSlashCommand called with non-slash input: ${t}`);let[r,...n]=e.split(/\s+/);if(r==="/"){let o=Eu.find(s=>s.name==="/help");if(o)return o.handler([])}let i=Eu.find(o=>o.name===r);return i?i.handler(n):Ge(r,`Unknown command: ${r}. Type /help for available commands.`)}function iR(t){return Eu.filter(e=>qL(t,e.minTier)).map(e=>({name:e.name,blurb:e.blurb})).sort((e,r)=>e.name.localeCompare(r.name))}function ag(t){return{storeAction:{type:"SLASH_OUTPUT",command:t.command,output:t.output},exit:t.sideEffect?.kind==="EXIT"}}var gt=E(require("react"));function oR(t){return t==="abort_task"||t==="restart_proposal"}var Iu={none:"\u2014",pending:"MergeGatePending",pass:"Pass",fail:"Fail"};var jL=4,VL=450,zL={Pending:"gray",InFlight:"cyan",Passed:"green",Failed:"red",Revising:"yellow",AwaitingDecision:"magenta"},JL={none:"gray",pending:"yellow",pass:"green",fail:"red"};function sR(t){let{ink:e}=se(),{Box:r,Text:n}=e,{team:i}=t,o=e.useStdout()?.stdout,s=t.columns??o?.columns??80,a=i.mergeGate==="pending"&&i.mergeGateStartedAt!=null&&i.mergeGateElapsedMs==null&&!i.groupResolved&&i.haltReason==null,[,c]=gt.useState(0);gt.useEffect(()=>{if(!a)return;let S=setInterval(()=>c(R=>R+1&65535),VL);return()=>clearInterval(S)},[a]);let d=null;if(a){let S=Date.parse(i.mergeGateStartedAt);isNaN(S)||(d=pn(Date.now()-S))}else i.mergeGateElapsedMs!=null&&(d=pn(i.mergeGateElapsedMs));let l=[...i.tracks.keys()].sort((S,R)=>S-R),u=l.map(S=>{let R=i.tracks.get(S),x=[R.agent,R.taskId?St(R.taskId,12):null].filter(O=>O!=null),P=x.length>0?` (${x.join(", ")})`:"";return gt.createElement(r,{key:`track-${S}`,flexDirection:"row"},gt.createElement(n,{bold:!0},` Track ${Cr(S)} `),gt.createElement(n,{color:zL[R.state]},R.state),gt.createElement(n,{dimColor:!0},P))}),p=Math.max(0,s-jL),h=Iu[i.mergeGate],y=" MergeGate: ",g=d?` \xB7 ${d}`:"",f=`Agent Teams (${l.length} track${l.length===1?"":"s"})`,w=p-(y.length+h.length+g.length),v;w>0?v=gt.createElement(n,{key:"__header__"},gt.createElement(n,{bold:!0},St(f,w)),gt.createElement(n,{dimColor:!0},y),gt.createElement(n,{color:JL[i.mergeGate]},h),g?gt.createElement(n,{dimColor:!0},g):null):v=gt.createElement(n,{key:"__header__",dimColor:!0},St(`${y.trimStart()}${h}${g}`,p));let b=[v,...u];if(i.haltReason&&b.push(gt.createElement(n,{key:"__halt__",color:"red"},` Halted: ${i.haltReason}`)),i.groupResolved){let S=i.outcome==="complete";b.push(gt.createElement(n,{key:"__resolved__",color:S?"green":"red"},S?" Team complete":` Team halted \u2014 ${i.outcome??"unknown"}`))}return gt.createElement(r,{flexDirection:"column",borderStyle:"round",paddingX:1},...b)}var wi=E(require("react"));var YL=450,XL=2;function aR(t){let{ink:e}=se(),{Text:r}=e,n=t.progress!==null,[i,o]=wi.useState(!0);wi.useEffect(()=>{if(!n)return;o(!0);let S=setInterval(()=>o(R=>!R),YL);return()=>clearInterval(S)},[n]);let s=e.useStdout()?.stdout,a=t.columns??s?.columns??80;if(!t.progress)return null;let c=t.progress.startedAt,d=c?Date.parse(c):NaN,l=isNaN(d)?null:pn(Date.now()-d),u=t.progress.text,p=" \xB7 ",h=t.progress.tokens,y=h&&h>0?`\u2193 ${yu(h)}`:null,g=[l,y].filter(S=>S!==null),f=g.map(S=>`${p}${S}`).join(""),w=Math.max(0,a-XL),v,b=w-f.length;return b>0?v=`${St(u,b)}${f}`:v=St(g.join(p),w),wi.createElement(r,null,wi.createElement(r,i?{color:"cyan"}:{dimColor:!0},"\u25CF "),wi.createElement(r,{dimColor:!0},v))}var j=E(require("react")),PR=E(require("node:os"));var Rt=E(require("node:fs")),Kn=E(require("node:path")),dR=require("node:url"),kc=require("node:crypto");var ro=10*1024*1024,cg=8,ZL=[{mime:"image/png",ext:"png",test:t=>t.length>=8&&t[0]===137&&t[1]===80&&t[2]===78&&t[3]===71&&t[4]===13&&t[5]===10&&t[6]===26&&t[7]===10},{mime:"image/jpeg",ext:"jpg",test:t=>t.length>=3&&t[0]===255&&t[1]===216&&t[2]===255},{mime:"image/gif",ext:"gif",test:t=>t.length>=6&&t[0]===71&&t[1]===73&&t[2]===70&&t[3]===56&&(t[4]===55||t[4]===57)&&t[5]===97},{mime:"image/webp",ext:"webp",test:t=>t.length>=12&&t[0]===82&&t[1]===73&&t[2]===70&&t[3]===70&&t[8]===87&&t[9]===69&&t[10]===66&&t[11]===80},{mime:"image/bmp",ext:"bmp",test:t=>t.length>=2&&t[0]===66&&t[1]===77}];function lR(t){for(let e of ZL)if(e.test(t))return{mime:e.mime,ext:e.ext};return null}var eB=/\.(png|jpe?g|gif|webp|bmp)$/i;function tB(t,e){let r=t.trim(),n=!1;if((r.startsWith("'")&&r.endsWith("'")||r.startsWith('"')&&r.endsWith('"'))&&(r=r.slice(1,-1),n=!0),r.startsWith("file://"))try{return(0,dR.fileURLToPath)(r)}catch{}return n||(r=r.replace(/\\(.)/g,"$1")),rB(r,e)}function rB(t,e){return t==="~"?e:t.startsWith("~/")?Kn.join(e,t.slice(2)):t}function nB(t){let e=[],r=/'[^']*\.(?:png|jpe?g|gif|webp|bmp)'|"[^"]*\.(?:png|jpe?g|gif|webp|bmp)"/gi,n,i=t.split("");for(;(n=r.exec(t))!==null;){e.push({rawToken:n[0],index:n.index,len:n[0].length});for(let u=n.index;u<n.index+n[0].length;u++)i[u]=" "}let o=i.join(""),s=u=>u===" "||u===" "||u===`
@@ -8410,9 +8410,10 @@ function reduceSessionTaskTerminal(state, event) {
8410
8410
  if (terminal === null) return state;
8411
8411
  let taskId = "taskId" in event ? event.taskId : void 0;
8412
8412
  if (!taskId) return state;
8413
- let existing = state.sessionTasks.get(taskId), sessionTasks = new Map(state.sessionTasks);
8413
+ let runningTasks = new Map(state.runningTasks), evictedRunningTask = runningTasks.delete(taskId), existing = state.sessionTasks.get(taskId), sessionTasks = new Map(state.sessionTasks);
8414
8414
  if (existing) {
8415
- if (existing.origin !== "single" || existing.status !== "running") return state;
8415
+ if (existing.origin !== "single" || existing.status !== "running")
8416
+ return evictedRunningTask ? { ...state, runningTasks } : state;
8416
8417
  sessionTasks.set(taskId, { ...existing, status: terminal });
8417
8418
  } else
8418
8419
  sessionTasks.set(taskId, {
@@ -8421,7 +8422,7 @@ function reduceSessionTaskTerminal(state, event) {
8421
8422
  status: terminal,
8422
8423
  startedAt: (/* @__PURE__ */ new Date()).toISOString()
8423
8424
  });
8424
- return { ...state, sessionTasks };
8425
+ return { ...state, runningTasks, sessionTasks };
8425
8426
  }
8426
8427
  var REVIEWER_STATUS_PHASES = /* @__PURE__ */ new Set([
8427
8428
  "reviewers_dispatched",
@@ -8724,9 +8725,9 @@ function reduceClarificationAnswered(state, answer) {
8724
8725
  };
8725
8726
  }
8726
8727
  function reduceTaskLifecycle(state, task) {
8727
- let next = new Map(state.runningTasks);
8728
- task.status === "completed" || task.status === "cancelled" || task.status === "failed" ? next.delete(task.taskId) : next.set(task.taskId, task);
8729
- let history = new Map(state.sessionTasks), existing = state.sessionTasks.get(task.taskId), existingIsTerminal = existing?.origin === "single" && (existing.status === "completed" || existing.status === "cancelled" || existing.status === "failed"), incomingIsTerminal = task.status === "completed" || task.status === "cancelled" || task.status === "failed";
8728
+ let existing = state.sessionTasks.get(task.taskId), existingIsTerminal = existing?.origin === "single" && (existing.status === "completed" || existing.status === "cancelled" || existing.status === "failed"), incomingIsTerminal = task.status === "completed" || task.status === "cancelled" || task.status === "failed", next = new Map(state.runningTasks);
8729
+ incomingIsTerminal || existingIsTerminal && !incomingIsTerminal ? next.delete(task.taskId) : next.set(task.taskId, task);
8730
+ let history = new Map(state.sessionTasks);
8730
8731
  return history.set(task.taskId, {
8731
8732
  taskId: task.taskId,
8732
8733
  agentKind: task.agentKind,
@@ -53393,12 +53394,17 @@ var QuorumLoop = class _QuorumLoop {
53393
53394
  err: err.message
53394
53395
  });
53395
53396
  let reason = classifyImplementorRoundFailure(err);
53396
- this.surfaceHalt(`The task could not proceed \u2014 ${reason}.`), this.emitProgress(
53397
- { phase: "round_failed", round: args.roundNumber, reason, taskId: args.taskId },
53398
- originEpoch
53399
- );
53397
+ this.surfaceHalt(`The task could not proceed \u2014 ${reason}.`);
53400
53398
  let reviseFeedbackId = args.reviseFeedbackId, preserveResetForRetry = submissionStarted && args.reviewScopeReset === !0 && reviseFeedbackId !== void 0 && this.reviewScopeResetTasks.has(args.taskId);
53401
- preserveResetForRetry && this.seenReviseFeedbackIds.delete(reviseFeedbackId), await this.discardShadow(args.taskId, void 0, {
53399
+ this.emitProgress(
53400
+ {
53401
+ phase: "round_failed",
53402
+ round: args.roundNumber,
53403
+ reason,
53404
+ ...preserveResetForRetry ? {} : { taskId: args.taskId }
53405
+ },
53406
+ originEpoch
53407
+ ), preserveResetForRetry && this.seenReviseFeedbackIds.delete(reviseFeedbackId), await this.discardShadow(args.taskId, void 0, {
53402
53408
  preserveReviseContext: preserveResetForRetry
53403
53409
  });
53404
53410
  } finally {
@@ -8,10 +8,9 @@ export declare const CONVERSATION_BUFFER_MAX = 500;
8
8
  export declare function reducer(state: OrchestrationState, action: OrchestrationAction): OrchestrationState;
9
9
  /**
10
10
  * P10 E3 r6/r8 — "is a single-implementor task actually running?" from the
11
- * TRUTHFUL `sessionTasks` lifecycle (the task-end closers terminalize it;
12
- * `runningTasks` never terminalizes in production and is kept ONLY for the
13
- * decision-spawned-a-task size heuristic). Shared by the `/status` running
14
- * line, `deriveCurrentTaskState` (the planner packet), and the reviewer-line
15
- * SET guard below.
11
+ * TRUTHFUL `sessionTasks` lifecycle. Shared by the `/status` running line,
12
+ * `deriveCurrentTaskState` (the planner packet), and the reviewer-line SET
13
+ * guard below. `runningTasks` is terminalized in parallel for its independent
14
+ * task-start size heuristic.
16
15
  */
17
16
  export declare function hasRunningSingleTask(state: OrchestrationState): boolean;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quantiya/codevibe-core",
3
- "version": "2.0.17",
3
+ "version": "2.0.18",
4
4
  "description": "Core library for CodeVibe plugins - shared keychain, crypto, AppSync, and auth functionality",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -332,7 +332,7 @@ endif
332
332
 
333
333
  quiet_cmd_regen_makefile = ACTION Regenerating $@
334
334
  cmd_regen_makefile = cd $(srcdir); /opt/homebrew/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py -fmake --ignore-environment "-Dlibrary=shared_library" "-Dvisibility=default" "-Dnode_root_dir=/Users/hendryyeh/Library/Caches/node-gyp/24.4.0" "-Dnode_gyp_dir=/opt/homebrew/lib/node_modules/npm/node_modules/node-gyp" "-Dnode_lib_file=/Users/hendryyeh/Library/Caches/node-gyp/24.4.0/<(target_arch)/node.lib" "-Dmodule_root_dir=/Users/hendryyeh/Workspace/CodeVibe/codevibe-claude-plugin/node_modules/fs-ext" "-Dnode_engine=v8" "--depth=." "-Goutput_dir=." "--generator-output=build" -I/Users/hendryyeh/Workspace/CodeVibe/codevibe-claude-plugin/node_modules/fs-ext/build/config.gypi -I/opt/homebrew/lib/node_modules/npm/node_modules/node-gyp/addon.gypi -I/Users/hendryyeh/Library/Caches/node-gyp/24.4.0/include/node/common.gypi "--toplevel-dir=." binding.gyp
335
- Makefile: $(srcdir)/build/config.gypi $(srcdir)/binding.gyp $(srcdir)/../../../../../../../opt/homebrew/lib/node_modules/npm/node_modules/node-gyp/addon.gypi $(srcdir)/../../../../../Library/Caches/node-gyp/24.4.0/include/node/common.gypi
335
+ Makefile: $(srcdir)/../../../../../Library/Caches/node-gyp/24.4.0/include/node/common.gypi $(srcdir)/../../../../../../../opt/homebrew/lib/node_modules/npm/node_modules/node-gyp/addon.gypi $(srcdir)/build/config.gypi $(srcdir)/binding.gyp
336
336
  $(call do_cmd,regen_makefile)
337
337
 
338
338
  # "all" is a concatenation of the "all" targets from all the included
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quantiya/codevibe-claude-plugin",
3
- "version": "2.0.20",
3
+ "version": "2.0.22",
4
4
  "description": "Control Claude Code from your iPhone and Android — real-time sync, approve file edits, send prompts by voice. Part of CodeVibe.",
5
5
  "main": "dist/server.js",
6
6
  "codevibe": {
@@ -22,7 +22,8 @@
22
22
  "postpack": "node scripts/restore-dev.js",
23
23
  "dev": "ts-node src/server.ts",
24
24
  "start": "node dist/server.js",
25
- "test": "jest --config jest.config.js --forceExit"
25
+ "test": "jest --config jest.config.js --forceExit",
26
+ "test:launcher": "jest test/companion-launcher-contract.test.ts test/companion-launcher-quorum-gate.test.ts"
26
27
  },
27
28
  "keywords": [
28
29
  "claude",
@@ -47,7 +48,7 @@
47
48
  "node": ">=22.0.0"
48
49
  },
49
50
  "dependencies": {
50
- "@quantiya/codevibe-core": "2.0.17",
51
+ "@quantiya/codevibe-core": "2.0.18",
51
52
  "@quantiya/quorum-core": "^1.0.1",
52
53
  "dotenv": "^16.6.1",
53
54
  "express": "^5.1.0",