 darmanandClaude Opus 4.8
|
e2706a1560
|
harness-providers: OpenAI chat + responses codecs, provider, registry wiring (M3)
- codec/openai_chat.rs: /chat/completions request builder (flat messages,
tool_calls, system → leading system message, reasoning_effort) + SSE decoder
(content/tool_calls-by-index/reasoning_content accumulation, [DONE] sentinel,
include_usage). Also the fallback codec for OpenAI-compatible endpoints.
- codec/openai_responses.rs: /responses request builder (input items, tool calls
and results as top-level function_call/function_call_output, instructions,
reasoning {effort, summary}) + SSE decoder (output_item add/done, output_text
and reasoning_summary deltas, function_call_arguments, response.completed usage
with separate reasoning_tokens).
- openai.rs: OpenAiProvider routing gpt-*/o-* → responses, else chat; Bearer auth;
error classification incl. 400 context_length_exceeded → ContextOverflow.
- Registered in harness-app from config.providers["openai"] (api_key + optional
base_url), sourced from OPENAI_API_KEY by the existing config loader.
- 21 codec/provider unit tests (decode fixtures + request-builder assertions).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-07-08 23:35:49 +02:00 |
|
darman
|
0812f6d94c
|
M2 TUI: EngineHandle, ratatui app, markdown renderer, permission modal, session picker, snapshot tests
harness-app:
- EngineHandle: non-blocking multi-turn API (prompt/abort/permission_reply/
list_sessions/session_messages/message_parts), persistent SQLite store,
no auto-approve — TUI handles permission asks via real oneshot path
- App refactored to wrap EngineHandle; headless run -p keeps auto-approve
harness-tui:
- Terminal guard (raw mode, alternate screen, panic hook, Drop restore)
- Event loop: tokio::select! over crossterm events, bus events, 33ms render tick
- AppState with MessageView/PartView (cached Vec<Line> field), ModalState
- pulldown-cmark → ratatui markdown renderer (headings, bold, italic, code
blocks, lists, blockquotes, links, manual word-wrap)
- Layout: header, chat viewport, input (tui-textarea), status bar
- Permission modal (y/a/n) wired to EngineHandle::permission_reply
- Session picker (Ctrl+S) with resume
- Abort (Esc), Ctrl+C×2 quit, slash commands (/new /model /agent /sessions)
- 7 TestBackend snapshot tests (empty, messages, tool cards, modals)
|
2026-07-08 23:35:40 +02:00 |
|