mirror of
https://github.com/stablyai/orca.git
synced 2026-09-22 16:02:32 +00:00
* fix(agents): detect a live OpenCode pane from its native OC | session title OpenCode publishes `OC | <session>` as its OSC title, which carries no agent-name token. detectAgentStatusFromTitle gates status on a whole-token name match, so it returned null and every status consumer read a live OpenCode pane as a plain shell: no "Send notes to" entry, no title-derived sidebar row, and a title that the runtime's agent-presence check scored as neutral. Identity already resolved (getAgentLabel returns OpenCode); only activity was missing. Treat the native marker as a live idle agent, placed after the spinner and glyph checks so the decorated frames pinned by #8940 keep their status, and accept it in the send-readiness gate the way Claude's U+2733 prefix is accepted -- only a running OpenCode TUI ever publishes it. * fix(agents): require spaced `OC | ` marker for native OpenCode detection Unspaced pipes like `OC|Build` match other tools and would mistakenly route non-OpenCode panes as send targets. Enforce literal ` | ` as OpenCode emits it. Also clarify that only spinner decorations carry working status, not keywords in the session summary. * fix(agents): require OpenCode foreground process to validate native mark OpenCode's native `OC | ` title marker now requires an active OpenCode process to authorize agent sends, preventing false detection when the marker is left on shell prompts. Extends wrapper prefix matching (ssh, tmux, etc.) and spinner glyph support. Adds permission-prompt blocking signals for guarded writes.
13 lines
560 B
TypeScript
13 lines
560 B
TypeScript
// Why: wrappers may prepend an SSH/tmux label, and OpenCode may prepend one
|
|
// status glyph. A spinner-led task from another agent must not become a wrapper.
|
|
const OPENCODE_NATIVE_TITLE_RE =
|
|
/^\s*(?:(?![▣\u2800-\u28ff])[^|]+? \| )?(?:[▣\u2800-\u28ff] )?OC \|[ \t]+\S/u
|
|
|
|
export function isOpenCodeNativeTitle(title: string | null | undefined): boolean {
|
|
return title ? OPENCODE_NATIVE_TITLE_RE.test(title) : false
|
|
}
|
|
|
|
export function isMeaningfulOpenCodeTerminalTitle(title: string | null | undefined): boolean {
|
|
return isOpenCodeNativeTitle(title)
|
|
}
|