Skip to content

feat(ru-fork): advanced chat mode — live qwen transcript view#12

Merged
ru-code-dev merged 1 commit into
ru-codefrom
feat/new-flow
Jun 15, 2026
Merged

feat(ru-fork): advanced chat mode — live qwen transcript view#12
ru-code-dev merged 1 commit into
ru-codefrom
feat/new-flow

Conversation

@ru-code-dev

Copy link
Copy Markdown
Owner

Add a toggle that renders the chat from qwen CLI's on-disk JSONL conversation transcript (tailed live) instead of the orchestration projection. Read-only: the transcript is parsed straight from disk, nothing is persisted on our side, and approvals/turn control stay on the live ACP path.

Server (apps/server/src/ru-fork/qwen-transcript):

  • paths/cliSettings: resolve the CLI runtime dir via branding (cliConfigDir, QWEN_RUNTIME_DIR, settings.advanced.runtimeOutputDir) — never a literal dir — to /projects/<sanitizeCwd(cwd)>/chats/.jsonl.
  • parse: qwen ChatRecord -> normalized TranscriptRecord union.
  • QwenTranscriptService/Live: tail the JSONL (fs.watch + 1s poll fallback) and stream snapshot + append deltas over the orchestration.subscribeTranscript WS RPC. 75 tests, 100% coverage on the module files.

Web (apps/web/src/ru-fork/advanced-chat):

  • merged tool-step flow: one card per tool use, correlating the assistant functionCall + tool_result + ui_telemetry, surfacing duration, diffStat, errors and cancellations; api_response telemetry folds into assistant latency. Telemetry is matched by event-name SUFFIX so a CLI rebrand keeps working.
  • @pierre/diffs renderer for file diffs (raw Shiki fallback under ADVANCED_CHAT_RICH_DIFF); user bubble reuse + copy + image chip; theme-safe semantic tokens; heavy content collapses, nothing clamps.
  • pending-op preview (ADVANCED_CHAT_PENDING_PREVIEW): un-applied edit -> jsdiff old->new diff; pending write_file -> collapsed content code block by file type.

Contracts: ru-fork/transcript.ts schema + WS RPC wiring.

Add a toggle that renders the chat from qwen CLI's on-disk JSONL conversation
transcript (tailed live) instead of the orchestration projection. Read-only:
the transcript is parsed straight from disk, nothing is persisted on our side,
and approvals/turn control stay on the live ACP path.

Server (apps/server/src/ru-fork/qwen-transcript):
- paths/cliSettings: resolve the CLI runtime dir via branding (cliConfigDir,
  QWEN_RUNTIME_DIR, settings.advanced.runtimeOutputDir) — never a literal dir —
  to <base>/projects/<sanitizeCwd(cwd)>/chats/<sessionId>.jsonl.
- parse: qwen ChatRecord -> normalized TranscriptRecord union.
- QwenTranscriptService/Live: tail the JSONL (fs.watch + 1s poll fallback) and
  stream snapshot + append deltas over the orchestration.subscribeTranscript WS
  RPC. 75 tests, 100% coverage on the module files.

Web (apps/web/src/ru-fork/advanced-chat):
- merged tool-step flow: one card per tool use, correlating the assistant
  functionCall + tool_result + ui_telemetry, surfacing duration, diffStat,
  errors and cancellations; api_response telemetry folds into assistant latency.
  Telemetry is matched by event-name SUFFIX so a CLI rebrand keeps working.
- @pierre/diffs renderer for file diffs (raw Shiki fallback under
  ADVANCED_CHAT_RICH_DIFF); user bubble reuse + copy + image chip; theme-safe
  semantic tokens; heavy content collapses, nothing clamps.
- pending-op preview (ADVANCED_CHAT_PENDING_PREVIEW): un-applied edit -> jsdiff
  old->new diff; pending write_file -> collapsed content code block by file type.

Contracts: ru-fork/transcript.ts schema + WS RPC wiring.
@ru-code-dev
ru-code-dev merged commit db5b929 into ru-code Jun 15, 2026
1 check passed
@ru-code-dev

Copy link
Copy Markdown
Owner Author

NODE_OPTIONS='--experimental-sqlite'
pnpm --filter @pixso-move/server start --
--port 7787
--db ./.data/pixso.sqlite
--cli-js /absolute/path/to/qwen/cli.js

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant