Take a short model name, render reasoning as Markdown, hold the clock **`ollama:qwen3.8` reaches `qwen3.8:27b-mtp-q8_0`.** An Ollama name carries its size and quantisation after a colon, and a reader names the model they pulled. Sent unresolved that gets `model not found` from a server which has the model, which reads as the model being missing. Exact names are taken exactly and never reinterpreted; otherwise the family prefix decides. Only the family prefix. A test written to check that `qwen3.8` cannot mean `qwen3.85` failed: a looser fallback was matching it. Running a different model because it shares a few characters with the one that was asked for is worse than saying nothing matched, so nothing matching now lists what is installed. **Reasoning renders its Markdown.** It was plain text on the theory that emphasis nested in italic reads worse than the source. The source is what a reader actually got: models write `**#160**` and numbered lists in their reasoning, and unrendered markup is harder to read than rendered markup in any style. `renderMarkdown` takes a base style and restores it after every reset the markup emits, because otherwise the first bold span ends the dim italic for the rest of the row. **The elapsed clock no longer restarts mid-turn.** It was reset on every submission, so `/export` during a turn put it back to zero — which reads as the turn having restarted when nothing happened to it. It resets when a turn begins and not when something is typed into one that is already running. 403 tests pass.
Take a short model name, render reasoning as Markdown, hold the clock
Deploy story
What this commit did to the running system — joined from the forge receipt chain, the part a commit page elsewhere cannot show.
Not deployed through the forge lane
No push, promotion, build, or deploy receipt references this commit (receipts are scanned over a bounded recent window). Changes shipped by full node replacement carry their proof in the release gate receipt instead.
Changed files
-
modified
packages/openagents-cli/src/cli.ts -
modified
packages/openagents-cli/src/coder-markdown.ts -
modified
packages/openagents-cli/src/coder-ollama.ts -
modified
packages/openagents-cli/src/coder-ui.ts -
modified
packages/openagents-cli/test/coder-ollama.test.ts -
modified
packages/openagents-cli/test/coder-ui.test.ts
Diff
6 files changed, +185 -18
packages/openagents-cli/src/cli.ts modified +29 -2
@@ -33,6 +33,7 @@ import {
| 33 | 33 |
|
| 34 | 34 |
|
| 35 | 35 |
|
| 36 |
|
|
| 36 | 37 |
|
| 37 | 38 |
|
| 38 | 39 |
|
@@ -1686,8 +1687,34 @@ const coderCommand = Command.make(
| 1686 | 1687 |
|
| 1687 | 1688 |
|
| 1688 | 1689 |
|
| 1689 |
|
|
| 1690 |
|
|
| 1690 |
|
|
| 1691 |
|
|
| 1692 |
|
|
| 1693 |
|
|
| 1694 |
|
|
| 1695 |
|
|
| 1696 |
|
|
| 1697 |
|
|
| 1698 |
|
|
| 1699 |
|
|
| 1700 |
|
|
| 1701 |
|
|
| 1702 |
|
|
| 1703 |
|
|
| 1704 |
|
|
| 1705 |
|
|
| 1706 |
|
|
| 1707 |
|
|
| 1708 |
|
|
| 1709 |
|
|
| 1710 |
|
|
| 1711 |
|
|
| 1712 |
|
|
| 1713 |
|
|
| 1714 |
|
|
| 1715 |
|
|
| 1716 |
|
|
| 1717 |
|
|
| 1691 | 1718 |
|
| 1692 | 1719 |
|
| 1693 | 1720 |
|
packages/openagents-cli/src/coder-markdown.ts modified +16 -2
@@ -54,7 +54,18 @@ export function wrapStyled(text: string, width: number, style: string): Readonly
| 54 | 54 |
|
| 55 | 55 |
|
| 56 | 56 |
|
| 57 |
|
|
| 57 |
|
|
| 58 |
|
|
| 59 |
|
|
| 60 |
|
|
| 61 |
|
|
| 62 |
|
|
| 63 |
|
|
| 64 |
|
|
| 65 |
|
|
| 66 |
|
|
| 67 |
|
|
| 68 |
|
|
| 58 | 69 |
|
| 59 | 70 |
|
| 60 | 71 |
|
@@ -81,7 +92,10 @@ export function renderMarkdown(text: string, width: number): ReadonlyArray<strin
| 81 | 92 |
|
| 82 | 93 |
|
| 83 | 94 |
|
| 84 |
|
|
| 95 |
|
|
| 96 |
|
|
| 97 |
|
|
| 98 |
|
|
| 85 | 99 |
|
| 86 | 100 |
|
| 87 | 101 |
|
packages/openagents-cli/src/coder-ollama.ts modified +51 -9
@@ -55,27 +55,69 @@ export const discoverOllamaModel = async (
| 55 | 55 |
|
| 56 | 56 |
|
| 57 | 57 |
|
| 58 |
|
|
| 58 |
|
|
| 59 |
|
|
| 60 |
|
|
| 61 |
|
|
| 62 |
|
|
| 63 |
|
|
| 64 |
|
|
| 65 |
|
|
| 66 |
|
|
| 67 |
|
|
| 68 |
|
|
| 69 |
|
|
| 70 |
|
|
| 59 | 71 |
|
| 60 |
|
|
| 61 |
|
|
| 72 |
|
|
| 73 |
|
|
| 74 |
|
|
| 75 |
|
|
| 62 | 76 |
|
| 63 | 77 |
|
| 64 | 78 |
|
| 65 | 79 |
|
| 66 | 80 |
|
| 67 | 81 |
|
| 68 |
|
|
| 69 |
|
|
| 70 | 82 |
|
| 71 |
|
|
| 72 |
|
|
| 73 |
|
|
| 83 |
|
|
| 84 |
|
|
| 85 |
|
|
| 86 |
|
|
| 87 |
|
|
| 74 | 88 |
|
| 75 |
|
|
| 89 |
|
|
| 76 | 90 |
|
| 77 | 91 |
|
| 78 | 92 |
|
| 93 |
|
|
| 94 |
|
|
| 95 |
|
|
| 96 |
|
|
| 97 |
|
|
| 98 |
|
|
| 99 |
|
|
| 100 |
|
|
| 101 |
|
|
| 102 |
|
|
| 103 |
|
|
| 104 |
|
|
| 105 |
|
|
| 106 |
|
|
| 107 |
|
|
| 108 |
|
|
| 109 |
|
|
| 110 |
|
|
| 111 |
|
|
| 112 |
|
|
| 113 |
|
|
| 114 |
|
|
| 115 |
|
|
| 116 |
|
|
| 117 |
|
|
| 118 |
|
|
| 119 |
|
|
| 120 |
|
|
| 79 | 121 |
|
| 80 | 122 |
|
| 81 | 123 |
|
packages/openagents-cli/src/coder-ui.ts modified +12 -5
@@ -353,10 +353,14 @@ export function runCoderUi(session: CoderSession, options: CoderUiOptions): Prom
| 353 | 353 |
|
| 354 | 354 |
|
| 355 | 355 |
|
| 356 |
|
|
| 357 |
|
|
| 358 |
|
|
| 359 |
|
|
| 356 |
|
|
| 357 |
|
|
| 358 |
|
|
| 359 |
|
|
| 360 |
|
|
| 361 |
|
|
| 362 |
|
|
| 363 |
|
|
| 360 | 364 |
|
| 361 | 365 |
|
| 362 | 366 |
|
@@ -681,7 +685,10 @@ export function runCoderUi(session: CoderSession, options: CoderUiOptions): Prom
| 681 | 685 |
|
| 682 | 686 |
|
| 683 | 687 |
|
| 684 |
|
|
| 688 |
|
|
| 689 |
|
|
| 690 |
|
|
| 691 |
|
|
| 685 | 692 |
|
| 686 | 693 |
|
| 687 | 694 |
|
packages/openagents-cli/test/coder-ollama.test.ts modified +50
@@ -4,6 +4,7 @@ import type { ReplyChunk } from "../src/coder-session.js";
| 4 | 4 |
|
| 5 | 5 |
|
| 6 | 6 |
|
| 7 |
|
|
| 7 | 8 |
|
| 8 | 9 |
|
| 9 | 10 |
|
@@ -339,3 +340,52 @@ describe("finding a local model to default to", () => {
| 339 | 340 |
|
| 340 | 341 |
|
| 341 | 342 |
|
| 343 |
|
|
| 344 |
|
|
| 345 |
|
|
| 346 |
|
|
| 347 |
|
|
| 348 |
|
|
| 349 |
|
|
| 350 |
|
|
| 351 |
|
|
| 352 |
|
|
| 353 |
|
|
| 354 |
|
|
| 355 |
|
|
| 356 |
|
|
| 357 |
|
|
| 358 |
|
|
| 359 |
|
|
| 360 |
|
|
| 361 |
|
|
| 362 |
|
|
| 363 |
|
|
| 364 |
|
|
| 365 |
|
|
| 366 |
|
|
| 367 |
|
|
| 368 |
|
|
| 369 |
|
|
| 370 |
|
|
| 371 |
|
|
| 372 |
|
|
| 373 |
|
|
| 374 |
|
|
| 375 |
|
|
| 376 |
|
|
| 377 |
|
|
| 378 |
|
|
| 379 |
|
|
| 380 |
|
|
| 381 |
|
|
| 382 |
|
|
| 383 |
|
|
| 384 |
|
|
| 385 |
|
|
| 386 |
|
|
| 387 |
|
|
| 388 |
|
|
| 389 |
|
|
| 390 |
|
|
| 391 |
|
packages/openagents-cli/test/coder-ui.test.ts modified +27
@@ -748,3 +748,30 @@ describe("typing while a turn is running", () => {
| 748 | 748 |
|
| 749 | 749 |
|
| 750 | 750 |
|
| 751 |
|
|
| 752 |
|
|
| 753 |
|
|
| 754 |
|
|
| 755 |
|
|
| 756 |
|
|
| 757 |
|
|
| 758 |
|
|
| 759 |
|
|
| 760 |
|
|
| 761 |
|
|
| 762 |
|
|
| 763 |
|
|
| 764 |
|
|
| 765 |
|
|
| 766 |
|
|
| 767 |
|
|
| 768 |
|
|
| 769 |
|
|
| 770 |
|
|
| 771 |
|
|
| 772 |
|
|
| 773 |
|
|
| 774 |
|
|
| 775 |
|
|
| 776 |
|
|
| 777 |
|