toyon 0.23.0 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -21
- package/dist/CHANGELOG.md +68 -0
- package/dist/cli.js +1 -1
- package/dist/daemon.js +2389 -1563
- package/dist/shell/assets/{Editor-C2e_GpDQ.js → Editor-v7DPr3mY.js} +168 -168
- package/dist/shell/assets/Editor-v7DPr3mY.js.br +0 -0
- package/dist/shell/assets/Editor-v7DPr3mY.js.gz +0 -0
- package/dist/shell/assets/{XTerm-B84G0H5I.js → XTerm-CxU9R8q7.js} +2 -2
- package/dist/shell/assets/XTerm-CxU9R8q7.js.br +0 -0
- package/dist/shell/assets/XTerm-CxU9R8q7.js.gz +0 -0
- package/dist/shell/assets/{cssMode-DhDLwjyN.js → cssMode-DD5SBqGU.js} +1 -1
- package/dist/shell/assets/cssMode-DD5SBqGU.js.br +0 -0
- package/dist/shell/assets/cssMode-DD5SBqGU.js.gz +0 -0
- package/dist/shell/assets/{freemarker2-rc8sP22g.js → freemarker2-CZ3XZhjv.js} +1 -1
- package/dist/shell/assets/freemarker2-CZ3XZhjv.js.br +0 -0
- package/dist/shell/assets/freemarker2-CZ3XZhjv.js.gz +0 -0
- package/dist/shell/assets/{grammar-Cty-NAQC.js → grammar-DqAbMw7d.js} +1 -1
- package/dist/shell/assets/grammar-DqAbMw7d.js.br +0 -0
- package/dist/shell/assets/grammar-DqAbMw7d.js.gz +0 -0
- package/dist/shell/assets/{handlebars-BOQxV3p5.js → handlebars-CzZa_iMI.js} +1 -1
- package/dist/shell/assets/handlebars-CzZa_iMI.js.br +0 -0
- package/dist/shell/assets/handlebars-CzZa_iMI.js.gz +0 -0
- package/dist/shell/assets/{html-CxndUpse.js → html-uU_fKUCO.js} +1 -1
- package/dist/shell/assets/html-uU_fKUCO.js.br +0 -0
- package/dist/shell/assets/html-uU_fKUCO.js.gz +0 -0
- package/dist/shell/assets/{htmlMode-CG7eVDLo.js → htmlMode-DmuqvqLQ.js} +1 -1
- package/dist/shell/assets/htmlMode-DmuqvqLQ.js.br +0 -0
- package/dist/shell/assets/htmlMode-DmuqvqLQ.js.gz +0 -0
- package/dist/shell/assets/index-DMZqXgxq.js +295 -0
- package/dist/shell/assets/index-DMZqXgxq.js.br +0 -0
- package/dist/shell/assets/index-DMZqXgxq.js.gz +0 -0
- package/dist/shell/assets/index-LFCDUSQF.css +1 -0
- package/dist/shell/assets/index-LFCDUSQF.css.br +0 -0
- package/dist/shell/assets/index-LFCDUSQF.css.gz +0 -0
- package/dist/shell/assets/{javascript-CafoevnZ.js → javascript-CvDukmsa.js} +1 -1
- package/dist/shell/assets/{jsonMode-Cg_4sMB_.js → jsonMode-C8ZGvKb7.js} +1 -1
- package/dist/shell/assets/jsonMode-C8ZGvKb7.js.br +0 -0
- package/dist/shell/assets/jsonMode-C8ZGvKb7.js.gz +0 -0
- package/dist/shell/assets/{liquid-DxW_HNid.js → liquid-CSFER4cS.js} +1 -1
- package/dist/shell/assets/liquid-CSFER4cS.js.br +0 -0
- package/dist/shell/assets/liquid-CSFER4cS.js.gz +0 -0
- package/dist/shell/assets/{lspLanguageFeatures-Dhat9l4L.js → lspLanguageFeatures-Bnq8PCF_.js} +2 -2
- package/dist/shell/assets/lspLanguageFeatures-Bnq8PCF_.js.br +0 -0
- package/dist/shell/assets/lspLanguageFeatures-Bnq8PCF_.js.gz +0 -0
- package/dist/shell/assets/{mdx-ZdMhgPNL.js → mdx-DN7UGs67.js} +1 -1
- package/dist/shell/assets/mdx-DN7UGs67.js.br +0 -0
- package/dist/shell/assets/mdx-DN7UGs67.js.gz +0 -0
- package/dist/shell/assets/{python-Bae_7wMM.js → python-Cdtmy77f.js} +1 -1
- package/dist/shell/assets/python-Cdtmy77f.js.br +0 -0
- package/dist/shell/assets/python-Cdtmy77f.js.gz +0 -0
- package/dist/shell/assets/{razor-CtwiCIJH.js → razor-BzMJ8H5n.js} +1 -1
- package/dist/shell/assets/razor-BzMJ8H5n.js.br +0 -0
- package/dist/shell/assets/razor-BzMJ8H5n.js.gz +0 -0
- package/dist/shell/assets/toyon-mono-bold-1tbrivW1.woff2 +0 -0
- package/dist/shell/assets/toyon-mono-regular-BUtE4EFW.woff2 +0 -0
- package/dist/shell/assets/{tsMode-DH9rMbRS.js → tsMode-B_VeTgWt.js} +1 -1
- package/dist/shell/assets/tsMode-B_VeTgWt.js.br +0 -0
- package/dist/shell/assets/tsMode-B_VeTgWt.js.gz +0 -0
- package/dist/shell/assets/{xml-rA-vNTCn.js → xml-Cdv7rs1C.js} +1 -1
- package/dist/shell/assets/xml-Cdv7rs1C.js.br +0 -0
- package/dist/shell/assets/xml-Cdv7rs1C.js.gz +0 -0
- package/dist/shell/assets/{yaml-pOtRRozm.js → yaml-Co_E2Q5j.js} +1 -1
- package/dist/shell/assets/yaml-Co_E2Q5j.js.br +0 -0
- package/dist/shell/assets/yaml-Co_E2Q5j.js.gz +0 -0
- package/dist/shell/index.html +2 -2
- package/package.json +1 -1
- package/dist/shell/assets/Editor-C2e_GpDQ.js.br +0 -0
- package/dist/shell/assets/Editor-C2e_GpDQ.js.gz +0 -0
- package/dist/shell/assets/XTerm-B84G0H5I.js.br +0 -0
- package/dist/shell/assets/XTerm-B84G0H5I.js.gz +0 -0
- package/dist/shell/assets/cssMode-DhDLwjyN.js.br +0 -0
- package/dist/shell/assets/cssMode-DhDLwjyN.js.gz +0 -0
- package/dist/shell/assets/freemarker2-rc8sP22g.js.br +0 -0
- package/dist/shell/assets/freemarker2-rc8sP22g.js.gz +0 -0
- package/dist/shell/assets/grammar-Cty-NAQC.js.br +0 -0
- package/dist/shell/assets/grammar-Cty-NAQC.js.gz +0 -0
- package/dist/shell/assets/handlebars-BOQxV3p5.js.br +0 -0
- package/dist/shell/assets/handlebars-BOQxV3p5.js.gz +0 -0
- package/dist/shell/assets/html-CxndUpse.js.br +0 -0
- package/dist/shell/assets/html-CxndUpse.js.gz +0 -0
- package/dist/shell/assets/htmlMode-CG7eVDLo.js.br +0 -0
- package/dist/shell/assets/htmlMode-CG7eVDLo.js.gz +0 -0
- package/dist/shell/assets/index-DpSfPmkM.css +0 -1
- package/dist/shell/assets/index-DpSfPmkM.css.br +0 -0
- package/dist/shell/assets/index-DpSfPmkM.css.gz +0 -0
- package/dist/shell/assets/index-DzfHDra7.js +0 -294
- package/dist/shell/assets/index-DzfHDra7.js.br +0 -0
- package/dist/shell/assets/index-DzfHDra7.js.gz +0 -0
- package/dist/shell/assets/jsonMode-Cg_4sMB_.js.br +0 -0
- package/dist/shell/assets/jsonMode-Cg_4sMB_.js.gz +0 -0
- package/dist/shell/assets/liquid-DxW_HNid.js.br +0 -0
- package/dist/shell/assets/liquid-DxW_HNid.js.gz +0 -0
- package/dist/shell/assets/lspLanguageFeatures-Dhat9l4L.js.br +0 -0
- package/dist/shell/assets/lspLanguageFeatures-Dhat9l4L.js.gz +0 -0
- package/dist/shell/assets/mdx-ZdMhgPNL.js.br +0 -0
- package/dist/shell/assets/mdx-ZdMhgPNL.js.gz +0 -0
- package/dist/shell/assets/python-Bae_7wMM.js.br +0 -0
- package/dist/shell/assets/python-Bae_7wMM.js.gz +0 -0
- package/dist/shell/assets/razor-CtwiCIJH.js.br +0 -0
- package/dist/shell/assets/razor-CtwiCIJH.js.gz +0 -0
- package/dist/shell/assets/toyon-mono-bold-9c1iJO0D.woff2 +0 -0
- package/dist/shell/assets/toyon-mono-regular-BXyxgSUK.woff2 +0 -0
- package/dist/shell/assets/tsMode-DH9rMbRS.js.br +0 -0
- package/dist/shell/assets/tsMode-DH9rMbRS.js.gz +0 -0
- package/dist/shell/assets/xml-rA-vNTCn.js.br +0 -0
- package/dist/shell/assets/xml-rA-vNTCn.js.gz +0 -0
- package/dist/shell/assets/yaml-pOtRRozm.js.br +0 -0
- package/dist/shell/assets/yaml-pOtRRozm.js.gz +0 -0
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ Toyon is where you ask for changes to your web app and try them as they happen.
|
|
|
4
4
|
|
|
5
5
|
Each copy runs on your own machine, and the next one is pre-warmed. Works with Claude Code, Codex and OpenCode over the Agent Client Protocol (ACP).
|
|
6
6
|
|
|
7
|
-
[toyon.dev](https://toyon.dev) · [How it works](#how-it-works) · [Install](#install) · [Under the hood](#under-the-hood) · [Trust](#trust) · [Uninstall](#uninstall)
|
|
7
|
+
[toyon.dev](https://toyon.dev) · [Docs](https://toyon.dev/docs/) · [How it works](#how-it-works) · [Install](#install) · [Under the hood](#under-the-hood) · [Trust](#trust) · [Uninstall](#uninstall) · [Changelog](https://github.com/toyon-dev/toyon/blob/main/CHANGELOG.md)
|
|
8
8
|
|
|
9
9
|

|
|
10
10
|
|
|
@@ -34,6 +34,8 @@ When your check passes, land merges into main on your machine by default, or pus
|
|
|
34
34
|
|
|
35
35
|
Built for web apps. A project without a page still works; the chat takes the middle instead of the preview.
|
|
36
36
|
|
|
37
|
+
How to use it is in [docs/using.md](https://github.com/toyon-dev/toyon/blob/main/docs/using.md). Every feature and shortcut is in [docs/features.md](https://github.com/toyon-dev/toyon/blob/main/docs/features.md).
|
|
38
|
+
|
|
37
39
|
## Install
|
|
38
40
|
|
|
39
41
|
Try it in a project:
|
|
@@ -59,7 +61,7 @@ You need:
|
|
|
59
61
|
- An account for the agent you pick: a Claude plan or an Anthropic API key for Claude Code, a ChatGPT plan or an OpenAI API key for Codex, or any provider OpenCode signs into.
|
|
60
62
|
- On Linux, bubblewrap and socat for the agents' sandbox (`sudo apt install bubblewrap socat`). `toyon doctor` checks both and prints the AppArmor profile Ubuntu 24.04 and later ask for.
|
|
61
63
|
|
|
62
|
-
Each agent signs in from the chat. Claude Code and Codex install on first start; OpenCode is a larger download with no subagents, effort levels or steering mid-turn. What each one reads and can do is in [docs/agents.md](https://github.com/toyon-dev/toyon/blob/main/docs/agents.md).
|
|
64
|
+
Each agent signs in from the chat. Claude Code and Codex install on first start; OpenCode is a larger download with no subagents, effort levels or steering mid-turn. What each one reads and can do is in [docs/agents.md](https://github.com/toyon-dev/toyon/blob/main/docs/agents.md). Requirements, updating and uninstalling are in [docs/install.md](https://github.com/toyon-dev/toyon/blob/main/docs/install.md), and every command is in [docs/commands.md](https://github.com/toyon-dev/toyon/blob/main/docs/commands.md).
|
|
63
65
|
|
|
64
66
|
## How is this different from what you use now?
|
|
65
67
|
|
|
@@ -72,7 +74,7 @@ Each agent signs in from the chat. Claude Code and Codex install on first start;
|
|
|
72
74
|
|
|
73
75
|
## Under the hood
|
|
74
76
|
|
|
75
|
-
|
|
77
|
+
A `.toyon/settings.json` in the project lists the setup commands, the commands to `run`, an optional `check` and how work lands. Toyon guesses it the first time you open a project. Each `run` command must stay in the foreground and listen on `$PORT`.
|
|
76
78
|
|
|
77
79
|
A project with a page and an API behind it:
|
|
78
80
|
|
|
@@ -88,39 +90,42 @@ A project with a page and an API behind it:
|
|
|
88
90
|
}
|
|
89
91
|
```
|
|
90
92
|
|
|
91
|
-
|
|
93
|
+
- Backend commands run once, in the main checkout, and every chat shares them until a chat changes backend files.
|
|
94
|
+
- A chat's servers stop when it has not been opened for two hours. The chat and the agent keep running.
|
|
95
|
+
- `toyon doctor` reports what is running and why a page cannot connect.
|
|
92
96
|
|
|
93
|
-
|
|
97
|
+
Every setting is in [docs/settings.md](https://github.com/toyon-dev/toyon/blob/main/docs/settings.md). Sharing a backend and a database per chat are in [docs/backends.md](https://github.com/toyon-dev/toyon/blob/main/docs/backends.md).
|
|
94
98
|
|
|
95
99
|
## What it does not do
|
|
96
100
|
|
|
97
|
-
- It
|
|
98
|
-
-
|
|
99
|
-
- It
|
|
100
|
-
- It does not keep copies apart from services they share. Each copy runs your setup and your commands on its own, so a database or a compose stack they all point at is shared, migrations included. `TOYON_WORKTREE` in every command's environment lets a project give each copy its own (`app_$TOYON_WORKTREE` as the database name); [docs/settings.md](https://github.com/toyon-dev/toyon/blob/main/docs/settings.md#keeping-copies-apart) has the recipes.
|
|
101
|
-
- It does not carry a login between copies. Each preview has its own cookies, so a new chat's app starts signed out, and an OAuth provider cannot redirect into a preview at all.
|
|
101
|
+
- It does not push unless you land with a route that pushes. Agents are told not to push or delete branches.
|
|
102
|
+
- It does not give each chat its own database. A database or a compose stack that every chat connects to is shared, migrations included. [docs/backends.md](https://github.com/toyon-dev/toyon/blob/main/docs/backends.md#a-database-per-copy) has recipes for Postgres, Neon, Docker Compose and SQLite.
|
|
103
|
+
- It does not carry a login between chats. Each preview has its own cookies, so a new chat's app starts signed out, and an OAuth provider cannot redirect into a preview.
|
|
102
104
|
|
|
103
105
|
## Your own server
|
|
104
106
|
|
|
105
|
-
Toyon can also run on a box you open from your phone, or on your own Fly account with the laptop closed. This moves Toyon and its copies off your laptop; it does not publish your app.
|
|
107
|
+
Toyon can also run on a box you open from your phone, or on your own Fly account with the laptop closed. This moves Toyon and its copies off your laptop; it does not publish your app. There is no hosted Toyon service, and your code and keys are never sent to Toyon. `toyon remote` puts a box on your own domain behind Caddy or on your Tailscale tailnet, `toyon deploy fly up` builds a machine on your Fly account and prints the link, and the Dockerfile in the package runs on any host with a disk and a port range. A Fly machine measured about $4-6 a month in ordinary use, plus whatever your agents spend, and its first chat can sign in with your Claude plan. A phone or a second machine pairs by opening the address and being let in from Toyon's window.
|
|
106
108
|
|
|
107
|
-
These routes are new. How to set each one up, and what it has been checked with, is in [docs/remote.md](https://github.com/toyon-dev/toyon/blob/main/docs/remote.md).
|
|
109
|
+
These routes are new. How to set each one up, and what it has been checked with, is in [docs/remote.md](https://github.com/toyon-dev/toyon/blob/main/docs/remote.md). Pairing a phone is in [docs/phone.md](https://github.com/toyon-dev/toyon/blob/main/docs/phone.md).
|
|
108
110
|
|
|
109
111
|
## Disk
|
|
110
112
|
|
|
111
|
-
Each copy is a
|
|
113
|
+
Each chat's copy is a git worktree under `~/.toyon/worktrees.noindex`. On APFS, btrfs and XFS it is cloned copy-on-write, so it takes seconds and almost no space. On ext4 each one is a full copy, `node_modules` included. See [docs/using.md](https://github.com/toyon-dev/toyon/blob/main/docs/using.md#disk).
|
|
112
114
|
|
|
113
115
|
## Trust
|
|
114
116
|
|
|
115
|
-
|
|
117
|
+
Agents run in an OS sandbox, Seatbelt on macOS and bubblewrap on Linux, and can write only inside their copy of the project. Toyon listens on loopback only, and every request carries a per-machine token.
|
|
116
118
|
|
|
117
|
-
|
|
119
|
+
Known gaps:
|
|
118
120
|
|
|
119
|
-
|
|
121
|
+
- `git push` is blocked by a command filter for Claude Code and OpenCode, and is not blocked for Codex. If your git credentials are on the machine, an agent could still find a way to push.
|
|
122
|
+
- Codex's shell commands can read Toyon's token.
|
|
123
|
+
- MCP servers run outside the sandbox.
|
|
124
|
+
- Opening a repository runs its setup commands, its dev server and its agent configuration. Open only repositories you trust.
|
|
120
125
|
|
|
121
|
-
|
|
126
|
+
Each chat has a permission mode: auto, ask or plan. On a company machine, IT can turn features off with a policy file.
|
|
122
127
|
|
|
123
|
-
|
|
128
|
+
The details are in [docs/trust.md](https://github.com/toyon-dev/toyon/blob/main/docs/trust.md) and [docs/policy.md](https://github.com/toyon-dev/toyon/blob/main/docs/policy.md).
|
|
124
129
|
|
|
125
130
|
## Uninstall
|
|
126
131
|
|
|
@@ -129,15 +134,15 @@ toyon uninstall
|
|
|
129
134
|
npm uninstall -g toyon
|
|
130
135
|
```
|
|
131
136
|
|
|
132
|
-
|
|
137
|
+
`toyon uninstall` asks before it removes anything, and keeps your projects and your `toyon/` branches. Delete a Fly machine first, with `toyon deploy fly destroy <name>`. See [docs/commands.md](https://github.com/toyon-dev/toyon/blob/main/docs/commands.md#toyon-uninstall).
|
|
133
138
|
|
|
134
139
|
## Telemetry
|
|
135
140
|
|
|
136
|
-
|
|
141
|
+
Toyon sends no telemetry. It checks for updates every six hours. To disable it, use `TOYON_UPDATES=off`. Every request Toyon makes is listed in [docs/trust.md](https://github.com/toyon-dev/toyon/blob/main/docs/trust.md#telemetry).
|
|
137
142
|
|
|
138
143
|
## Help build it
|
|
139
144
|
|
|
140
|
-
Toyon is early, and there is more worth doing than there are hands. The most useful thing right now is an issue: what you ran, what broke, and what your project is built with, especially anything that is not a Node app. Pull requests are welcome too; [CONTRIBUTING.md](https://github.com/toyon-dev/toyon/blob/main/CONTRIBUTING.md) has the setup
|
|
145
|
+
Toyon is early, and there is more worth doing than there are hands. The most useful thing right now is an issue: what you ran, what broke, and what your project is built with, especially anything that is not a Node app. Pull requests are welcome too; [CONTRIBUTING.md](https://github.com/toyon-dev/toyon/blob/main/CONTRIBUTING.md) has the setup. Run `bun run check` before you open one.
|
|
141
146
|
|
|
142
147
|
## License
|
|
143
148
|
|
package/dist/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,74 @@
|
|
|
2
2
|
|
|
3
3
|
What changed in each release of Toyon, newest first.
|
|
4
4
|
|
|
5
|
+
## 0.25.0 (2026-11-13)
|
|
6
|
+
|
|
7
|
+
The Claude adapter moves to the current release, and a handoff now closes its loop: the row that sent a piece hears when it lands, and an agent can stop or message a sibling chat.
|
|
8
|
+
|
|
9
|
+
### New
|
|
10
|
+
- When a piece lands, the row that started the handoff and every row that sent a piece into it get a note saying what landed and where the piece's chat is, with the commit subjects under it. Their agents start once idle to bring in line anything that depended on the landing, unless a declared wait is still open or their own work is done.
|
|
11
|
+
- An agent can stop another worktree's running turn. The reason shows on the stopped row beside the calling chat's chip, and the tool refuses the chat that sent it the message, idle rows and itself.
|
|
12
|
+
- A message an agent sends to a sibling or a subagent shows as its own row in the chat, reading "sent to" with the name and the message.
|
|
13
|
+
- Right-clicking selected text leads the menu with copy selection, which copies the selection as plain text with table cells separated by tabs. The message a menu is about takes the accent edge while the menu is open. The file link menu gains copy file, which puts the file itself on the clipboard on a Mac.
|
|
14
|
+
- A question that allows several answers draws a tick box on each row. Digits and space tick and untick, and enter sends once something is ticked.
|
|
15
|
+
- Two fingers on the trackpad throw the full-size picture away, up or down, as a finger does on the phone. The picture follows the fingers while they are down, and a stop short of halfway brings it back.
|
|
16
|
+
- When the pinned Claude Code adapter version is held back by the machine's package age rule, the composer says so in one line and the agent's page names the version that answers in the meantime. Sending still works.
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- The Claude adapter is pinned to the fork of the 0.106.0 release. New sessions open in the agent's auto mode at this version, and Toyon's own switch to its default mode is what keeps the write policy in place.
|
|
20
|
+
- A piece reaches a landed worktree that is at work again, meaning it has uncommitted files or its agent is mid-turn. A landed row at rest is refused by name, and the tool's list of targets shows only the rows a send reaches.
|
|
21
|
+
- When a handoff card is answered and nothing starts a turn, the agent reads one sentence about it on its next message: where each piece went, a not now with no words, or a go that broke off. The plan read-off also asks for work a plan defers to a later branch, and reads plans up to 40,000 characters.
|
|
22
|
+
- Memory pressure is read from the compressor's limits instead of swap usage, which sits near 90% on a healthy Mac. A commit or check about to start while memory is short waits as short of memory and starts once memory eases.
|
|
23
|
+
- A background command row waits two hours for its finish notice instead of three minutes, and ends at once when the stop succeeds.
|
|
24
|
+
- An archived row opens its page from the press, without waiting for the worktree to be taken down. Worktree chips and handoff rows find their row across every project, and pressing one from another project switches to it.
|
|
25
|
+
- A chord that lands on a row outside the rail's view scrolls the rail just far enough to show it.
|
|
26
|
+
- In zen, the strip keeps the address, back, forward and reload cluster, and an open file's head draws in the strip beside them instead of on its own row.
|
|
27
|
+
- The expand control in a pane head draws as parting chevrons instead of a square, wrap leads the head's controls so nothing jumps when it hides, and the pickers no longer show a row of key hints.
|
|
28
|
+
- The design pane's button is gone from the top bar; it still opens with cmd+D, the palette and the app menu.
|
|
29
|
+
- Chat rows for plans, messages, restore, take over and the PR put their press in one slot at the far right, drawn as a box, and the rows that open a document share the label "details". A message sent in from another chat reads "message from".
|
|
30
|
+
- Toyon Mono's multiplication sign widened to match the fallback faces.
|
|
31
|
+
|
|
32
|
+
### Fixed
|
|
33
|
+
- A request the adapter failed on showed "Internal error" in the chat row and the log. The real text shows now, such as a Bedrock 403, so a lapsed AWS session raises the login card.
|
|
34
|
+
- Monaco's built-in formatters re-indented blocks in some files on save. They are off, and typing and pasting no longer reshape text.
|
|
35
|
+
- A handoff outside plan mode that kept no piece here told the agent to finish its turn, so it sat idle until you typed. It continues now.
|
|
36
|
+
- After a PR merged outside Toyon, the row could read as taken but not landed for a moment and offer a new PR.
|
|
37
|
+
- Removing a worktree now drops its file watch, so the watch server stops holding that tree in memory; a boot sweep clears watches left by worktrees already removed.
|
|
38
|
+
- The outline list on a long document ran over the bar; it has its own height and opens scrolled to the section being read.
|
|
39
|
+
- The dimmed verb on a quiet handoff row was hard to read against the dark band, links in a tool's output showed purple while it streamed, and the ! hint in the composer rode along behind every space typed.
|
|
40
|
+
|
|
41
|
+
## 0.24.0 (2026-11-12)
|
|
42
|
+
|
|
43
|
+
Changed markdown files open as a rendered diff, landing no longer drops work, and the daemon and the shell close several holes around tokens and links.
|
|
44
|
+
|
|
45
|
+
### New
|
|
46
|
+
- A changed markdown file opens as a rendered diff that marks which words, table cells and list items came and went. It follows the code diff's inline or split choice, and the editor head has one file, inline and split control in place of the separate markdown knobs.
|
|
47
|
+
- Once you open a changes row rendered, the next file you arrow or click to opens rendered too; a file that cannot render opens on its diff, and picking diff or file by hand ends the hold. Rows whose file can render show an eye on hover, and a second click on a previewed row takes it back to the diff.
|
|
48
|
+
- Back and forward step onto archived pages, switching project first when the archive belongs to another.
|
|
49
|
+
- Code blocks in chat keep their copy button visible on a touch screen, where there is no hover to reveal it.
|
|
50
|
+
|
|
51
|
+
### Changed
|
|
52
|
+
- Landing writes the commit message at press time. When the box is empty the quick model writes it under a "writing the message" step, and the land goes on without running the check again; with no answer the land is refused and nothing is committed.
|
|
53
|
+
- A land, commit, sync or PR press moves the row to the top of the rail as the work starts, whatever the outcome, instead of when it finishes. Automatic runs still move nothing.
|
|
54
|
+
- The handoff card opens its list page on arrival on the active worktree, except on a phone. Typing a letter or pressing n opens the note under "not now", a slide opens it on touch, and words sent with "not now" reach the worktree's agent once its turn ends.
|
|
55
|
+
- Panel chords such as cmd+L, cmd+J and cmd+B leave zen when a file fills the page and land in the panel asked for. Quick open keeps zen, and Esc on a file closes the file and leaves zen on the page.
|
|
56
|
+
- Toyon Mono was rebuilt three times: a slashed zero inside the ring, a wider asterisk, a thinner underscore, a new question mark hook, resized colon dots and new braces and j. Wrap and full-size are icon switches in the editor head, so a file name fits in a narrow pane.
|
|
57
|
+
- Links that are not routed go through one guard in the card band, PR comments and paste chips. Rendered documents drop styles, form controls and foreign classes, and every link that opens outside Toyon opens with noopener and noreferrer.
|
|
58
|
+
- The daemon refuses a let-me-in knock that arrives from its own preview, process or forwarder ports, another .localhost name or a preview under the public name; file routes carry a sandbox content security policy, and a short token file is regenerated.
|
|
59
|
+
- A read row that repeats keeps its shine through the gap between reads, as an edit row does. A kbd tag in a markdown preview draws as a boxed key, and a heading made only of a code span reads as a heading.
|
|
60
|
+
- The docs gained features, shortcuts, commands, using, backends and phone pages, and the remote, settings, agents, trust and policy pages were rewritten in shorter sentences.
|
|
61
|
+
|
|
62
|
+
### Fixed
|
|
63
|
+
- Landing or archiving a worktree could silently discard committed or unpushed work, or leave main half-merged. The leftover check now compares commits by content, so a rebased copy after a sync does not count as new work, and the push asks origin where the branch stands first: a plain push, a leased forced push over your own earlier tip, or a refusal that says why.
|
|
64
|
+
- A file with an accented or quoted name, such as café.txt, made the changes panel throw. Paths are read from git without quoting now, and git messages stay in English whatever the system language.
|
|
65
|
+
- Once Toyon Mono loaded, every mono line reflowed, because the stand-in faces had a different letter height. The fallbacks are now faces with the same cell, so nothing moves when the font arrives.
|
|
66
|
+
- A restart no longer kills an agent that is still starting, and a crashed adapter keeps its own exit text.
|
|
67
|
+
- Slow sideways trackpad scrolls in the editor were dropped once the gesture had settled as vertical; the turn is judged on travel summed over the gesture.
|
|
68
|
+
- Monaco's right-click menu, sticky scroll and inlay hint menus overlapped the files dock without a background. They are drawn as the shell's own menu in the top layer.
|
|
69
|
+
- @ offers the project's other worktrees on an archived or found chat, where before the mention went to the agent as plain text.
|
|
70
|
+
- A pull request merged while the row was open was recorded once, not again when the poll heard of it, and the comments row no longer runs "1 comment" into "on PR".
|
|
71
|
+
- Committing on a large repository no longer rebuilds the file tree, the folder list and the mention index when no paths changed, which blocked the page for about a fifth of a second on a 150k file repository.
|
|
72
|
+
|
|
5
73
|
## 0.23.0 (2026-11-10)
|
|
6
74
|
|
|
7
75
|
The shell reads in Toyon Mono, a face of its own, and a worktree reaches main's servers by default instead of starting every command again.
|
package/dist/cli.js
CHANGED
|
@@ -5290,7 +5290,7 @@ function parseVersion(v) {
|
|
|
5290
5290
|
// package.json
|
|
5291
5291
|
var package_default = {
|
|
5292
5292
|
name: "toyon",
|
|
5293
|
-
version: "0.
|
|
5293
|
+
version: "0.25.0",
|
|
5294
5294
|
description: "Toyon is where coding agents work on your web app while you check each change by using it. Every chat gets its own running copy with a live preview.",
|
|
5295
5295
|
license: "MIT",
|
|
5296
5296
|
type: "module",
|