Repository navigation
refactor(server): move the live-screen tail checks into server/dialogs/live.ts - #1761
Conversation
…s/live.ts Move the OmO task-row regexes, omoFooterIsActive, promptTailIsActive, the pi and Command Code footer helpers, hintAtEnd, parsePrompt and liveScreen verbatim. live.ts exports parsePrompt, promptTailIsActive and liveScreen; prompt.ts imports them. prompt.ts keeps every map and route; no re-exports were needed. Plan: .omo/plans/agent-modules-split.md P1b.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
📝 Summary
Merge Risk: ⚪ Minimal · up to
|
|
Merge pass: move-only PR (per-agent split, wave P1b), merged on its checks without waiting for a CodeRabbit review, as AGENTS.md allows.
All required checks are green and no review thread is open. |
…ersation-shared.ts (#1763) Wave C2 of the per-agent module split. The plan is `.omo/plans/agent-modules-split.md` in the maintainer's workspace, and plan-reviewer approved it. It follows C1 (#1760) and P1b (#1761). This wave moves the conversation types and constants that agent modules share out of `server/conversation.ts` into a new leaf module, `server/conversation-shared.ts`. Later waves (Devin's session lookup, then the Claude and omp sessions) can then throw `ConversationUnavailable` without importing `conversation.ts`. ## What changes - **Moved verbatim, with their doc comments:** - `TRANSCRIPT_WINDOW_BYTES`; - the error classes `ConversationUnavailable`, `ConversationNotStarted` and `HistoryChanged`; - the types `RecognizedConversation`, `StreamSource` and `ConversationPage`; - `PROCESS_VERSION` and `answerVersion`. - **State:** `PROCESS_VERSION` holds one `randomUUID()`, set once and never changed. It moves with its only user, `answerVersion`, so it still has a single owner. - **New `export`:** only `StreamSource` gains one, because `conversation.ts` imports it back. - **Re-exports:** `conversation.ts` re-exports every name that was exported before, so no other importer changes. - **One import path changes on purpose:** `server/hermes.ts` now imports the same names from `./conversation-shared.ts` instead of `./conversation.ts`. That removes the runtime import cycle between `hermes.ts` and `conversation.ts`. ## Checks - **`--color-moved`:** `git diff --color-moved=plain --color-moved-ws=allow-indentation-change origin/main...HEAD` shows 138 lines as moved. The other 8 lines are: - the new file's two import lines; - `StreamSource` with its added `export`, shown as removed and added; - `conversation.ts`'s import and re-export lines; - `hermes.ts`'s changed module path. - **No cycles:** checked with `bun <plan>/no-path.ts`. - With `server/conversation-shared.ts server/conversation.ts server/prompt.ts`, it prints "no path to server/conversation.ts, server/prompt.ts". - With `server/hermes.ts server/conversation.ts`, it prints "no path to server/conversation.ts". The cycle is gone. - **Typecheck:** `bun run typecheck` passes. - **Unit tests:** `HERDR_TEST_MODE=unit bun test server/hermes.test.ts server/conversation.test.ts server/chat-history.test.ts`: 177 pass, 0 fail. - `bun run check fast`: passes (unit 6253 pass, 0 fail, 13 skip in 443 files, 8 at a time, 66.5s) - **Integration lane:** CI runs the gjc, api, opencode and hermes contracts. ## Outside PRs that touch the same files No other maintainer PR touches these files. Three outside contributors' PRs touch `server/conversation.ts`. Each adds a member to `RecognizedConversation`'s `source` union, which now lives in `server/conversation-shared.ts`, so a rebase carries that one line into the new file. I checked each with `git merge-tree`: - **#1706** merges cleanly with main, and conflicts with this branch in `server/conversation.ts`. - **#1652** already conflicts with main in `server/conversation.ts`, and needs a rebase either way. - **#1442** already conflicts with main in `server/conversation.ts`, and needs a rebase either way. Move-only: moved declarations plus imports, one re-export line, one added `export`, and the `hermes.ts` module path. No changelog fragment: users see no change.
Wave P1b of the per-agent module split. The plan is
.omo/plans/agent-modules-split.mdin the maintainer's workspace, and plan-reviewer approved it. It follows P1a (#1755) and C1 (#1760).This wave moves the live-screen tail checks out of
server/prompt.tsinto a new leaf module,server/dialogs/live.ts. These are the per-agent checks that say whether a dialog parsed from the screen is still drawn at its bottom.prompt.tskeeps every per-pane map, the queue drivers and every route.What changes
OMO_TASK_ROW_REthroughOMO_EMPTY_BOX_RE);CLAUDE_SUBMIT_TAIL_RE,omoFooterIsActiveandpromptTailIsActive;PI_MENU_HINT_AT_END_RE,PI_INPUT_HINT_AT_END_RE,CMD_HINT_RE,CMD_FOOTER_WORDS,cmdFooterEnds,PI_MODEL_HINT_AT_END_RE,PI_FOOTER_LINES);hintAtEnd,parsePromptandliveScreen.exportkeywords:parsePrompt,promptTailIsActiveandliveScreen.prompt.tsimports these three back.prompt.ts.prompt.ts's imports from./dialogs/*narrow to what it still uses.live.tsimports the same names from the same dialogs modules, pluspaneReadfrom../herdr/client.ts.herdrRpccall moves (liveScreenuses the typedpaneReadwrapper).server/prompt.tsgoes from 1,530 to 1,334 lines.Checks
--color-moved:git diff --color-moved=plain --color-moved-ws=allow-indentation-change origin/main...HEADshows 382 lines as moved. The other 30 lines are:live.ts's eleven import lines;prompt.ts's narrowed and new import lines;export, each shown as removed and added.No import cycle:
bun <plan>/no-path.ts server/dialogs/live.ts server/prompt.ts server/conversation.tsprints "no path to server/prompt.ts, server/conversation.ts". The new module never reaches either file through value imports.Typecheck:
bun run typecheckpasses.Unit tests: 589 pass, 0 fail across 20 files, from:
HERDR_TEST_MODE=unit bun test server/prompt.test.ts server/dialogs/ server/hermes-prompt.test.ts server/cmd.test.ts server/core/Every
parseInteractivePromptpath runs throughparsePrompt.bun run check fast: passes (unit 6253 pass, 0 fail, 13 skip in 443 files, 8 at a time, 73.5s)Integration lane: CI runs pending-input, prompt, opencode-prompt and claude-session contracts.
Outside PRs that touch the same files
No other maintainer PR touches these files. Three outside contributors' PRs touch
server/prompt.ts. Each has a small change inside a function that now lives inserver/dialogs/live.ts, so its rebase carries that change into the new file. I checked each withgit merge-tree:server/prompt.ts.server/prompt.ts, and needs a rebase either way.server/prompt.ts, and needs a rebase either way.Move-only: moved declarations plus imports and three
exportkeywords. No changelog fragment: users see no change.