toyon 0.19.0 → 0.21.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 +3 -1
- package/cloud/Dockerfile +1 -1
- package/dist/CHANGELOG.md +79 -0
- package/dist/cli.js +295 -140
- package/dist/daemon.js +4445 -2278
- package/dist/shell/assets/{Editor-B-1lrUVF.js → Editor-D_bxx8PL.js} +4 -4
- package/dist/shell/assets/Editor-D_bxx8PL.js.br +0 -0
- package/dist/shell/assets/Editor-D_bxx8PL.js.gz +0 -0
- package/dist/shell/assets/{XTerm-CZl-vWEO.js → XTerm-DNFNsoHC.js} +1 -1
- package/dist/shell/assets/XTerm-DNFNsoHC.js.br +0 -0
- package/dist/shell/assets/XTerm-DNFNsoHC.js.gz +0 -0
- package/dist/shell/assets/{cssMode-BpigOakf.js → cssMode-BxHmuU8y.js} +1 -1
- package/dist/shell/assets/cssMode-BxHmuU8y.js.br +0 -0
- package/dist/shell/assets/cssMode-BxHmuU8y.js.gz +0 -0
- package/dist/shell/assets/{freemarker2-vvh2KLdJ.js → freemarker2-Cx9ZoWdp.js} +1 -1
- package/dist/shell/assets/freemarker2-Cx9ZoWdp.js.br +0 -0
- package/dist/shell/assets/freemarker2-Cx9ZoWdp.js.gz +0 -0
- package/dist/shell/assets/{grammar-DBMSnNcB.js → grammar-DlhzivAk.js} +1 -1
- package/dist/shell/assets/grammar-DlhzivAk.js.br +0 -0
- package/dist/shell/assets/grammar-DlhzivAk.js.gz +0 -0
- package/dist/shell/assets/{handlebars-ExFAR1bz.js → handlebars-D0MhpM71.js} +1 -1
- package/dist/shell/assets/handlebars-D0MhpM71.js.br +0 -0
- package/dist/shell/assets/handlebars-D0MhpM71.js.gz +0 -0
- package/dist/shell/assets/{html-DpIWoe_L.js → html-Da9gyCH4.js} +1 -1
- package/dist/shell/assets/html-Da9gyCH4.js.br +0 -0
- package/dist/shell/assets/html-Da9gyCH4.js.gz +0 -0
- package/dist/shell/assets/{htmlMode-vCEOKCM-.js → htmlMode-CGo3ddCJ.js} +1 -1
- package/dist/shell/assets/htmlMode-CGo3ddCJ.js.br +0 -0
- package/dist/shell/assets/htmlMode-CGo3ddCJ.js.gz +0 -0
- package/dist/shell/assets/index-DJ0qL1Ze.css +1 -0
- package/dist/shell/assets/index-DJ0qL1Ze.css.br +0 -0
- package/dist/shell/assets/index-DJ0qL1Ze.css.gz +0 -0
- package/dist/shell/assets/index-DMDdU-hM.js +288 -0
- package/dist/shell/assets/index-DMDdU-hM.js.br +0 -0
- package/dist/shell/assets/index-DMDdU-hM.js.gz +0 -0
- package/dist/shell/assets/{javascript-CF6f9y1O.js → javascript-BXQxakKJ.js} +1 -1
- package/dist/shell/assets/{jsonMode-CZzpDv9U.js → jsonMode-DT4ON4ij.js} +1 -1
- package/dist/shell/assets/jsonMode-DT4ON4ij.js.br +0 -0
- package/dist/shell/assets/jsonMode-DT4ON4ij.js.gz +0 -0
- package/dist/shell/assets/{liquid-5T0ZgJhW.js → liquid-Bm6Hq-FF.js} +1 -1
- package/dist/shell/assets/liquid-Bm6Hq-FF.js.br +0 -0
- package/dist/shell/assets/liquid-Bm6Hq-FF.js.gz +0 -0
- package/dist/shell/assets/{lspLanguageFeatures-DrkNrp6u.js → lspLanguageFeatures-DWvAzXxS.js} +1 -1
- package/dist/shell/assets/lspLanguageFeatures-DWvAzXxS.js.br +0 -0
- package/dist/shell/assets/lspLanguageFeatures-DWvAzXxS.js.gz +0 -0
- package/dist/shell/assets/{mdx-DnLcCYKb.js → mdx-DNcDUEs7.js} +1 -1
- package/dist/shell/assets/mdx-DNcDUEs7.js.br +0 -0
- package/dist/shell/assets/mdx-DNcDUEs7.js.gz +0 -0
- package/dist/shell/assets/{python-Di4WuyJe.js → python-BgETNCIe.js} +1 -1
- package/dist/shell/assets/python-BgETNCIe.js.br +0 -0
- package/dist/shell/assets/python-BgETNCIe.js.gz +0 -0
- package/dist/shell/assets/{razor-NpEB1IHs.js → razor-Cf_D69YI.js} +1 -1
- package/dist/shell/assets/razor-Cf_D69YI.js.br +0 -0
- package/dist/shell/assets/razor-Cf_D69YI.js.gz +0 -0
- package/dist/shell/assets/{tsMode-BylSuxTF.js → tsMode-BQA_zU_Q.js} +1 -1
- package/dist/shell/assets/tsMode-BQA_zU_Q.js.br +0 -0
- package/dist/shell/assets/tsMode-BQA_zU_Q.js.gz +0 -0
- package/dist/shell/assets/{xml-BYRl5HAh.js → xml-DrZtVQVT.js} +1 -1
- package/dist/shell/assets/xml-DrZtVQVT.js.br +0 -0
- package/dist/shell/assets/xml-DrZtVQVT.js.gz +0 -0
- package/dist/shell/assets/{yaml-DeSD0TUR.js → yaml-CzR4Kx36.js} +1 -1
- package/dist/shell/assets/yaml-CzR4Kx36.js.br +0 -0
- package/dist/shell/assets/yaml-CzR4Kx36.js.gz +0 -0
- package/dist/shell/index.html +2 -2
- package/package.json +1 -1
- package/dist/shell/assets/Editor-B-1lrUVF.js.br +0 -0
- package/dist/shell/assets/Editor-B-1lrUVF.js.gz +0 -0
- package/dist/shell/assets/XTerm-CZl-vWEO.js.br +0 -0
- package/dist/shell/assets/XTerm-CZl-vWEO.js.gz +0 -0
- package/dist/shell/assets/cssMode-BpigOakf.js.br +0 -0
- package/dist/shell/assets/cssMode-BpigOakf.js.gz +0 -0
- package/dist/shell/assets/freemarker2-vvh2KLdJ.js.br +0 -0
- package/dist/shell/assets/freemarker2-vvh2KLdJ.js.gz +0 -0
- package/dist/shell/assets/grammar-DBMSnNcB.js.br +0 -0
- package/dist/shell/assets/grammar-DBMSnNcB.js.gz +0 -0
- package/dist/shell/assets/handlebars-ExFAR1bz.js.br +0 -0
- package/dist/shell/assets/handlebars-ExFAR1bz.js.gz +0 -0
- package/dist/shell/assets/html-DpIWoe_L.js.br +0 -0
- package/dist/shell/assets/html-DpIWoe_L.js.gz +0 -0
- package/dist/shell/assets/htmlMode-vCEOKCM-.js.br +0 -0
- package/dist/shell/assets/htmlMode-vCEOKCM-.js.gz +0 -0
- package/dist/shell/assets/index-CHbNBHbD.css +0 -1
- package/dist/shell/assets/index-CHbNBHbD.css.br +0 -0
- package/dist/shell/assets/index-CHbNBHbD.css.gz +0 -0
- package/dist/shell/assets/index-D5GN5OOv.js +0 -276
- package/dist/shell/assets/index-D5GN5OOv.js.br +0 -0
- package/dist/shell/assets/index-D5GN5OOv.js.gz +0 -0
- package/dist/shell/assets/jsonMode-CZzpDv9U.js.br +0 -0
- package/dist/shell/assets/jsonMode-CZzpDv9U.js.gz +0 -0
- package/dist/shell/assets/liquid-5T0ZgJhW.js.br +0 -0
- package/dist/shell/assets/liquid-5T0ZgJhW.js.gz +0 -0
- package/dist/shell/assets/lspLanguageFeatures-DrkNrp6u.js.br +0 -0
- package/dist/shell/assets/lspLanguageFeatures-DrkNrp6u.js.gz +0 -0
- package/dist/shell/assets/mdx-DnLcCYKb.js.br +0 -0
- package/dist/shell/assets/mdx-DnLcCYKb.js.gz +0 -0
- package/dist/shell/assets/python-Di4WuyJe.js.br +0 -0
- package/dist/shell/assets/python-Di4WuyJe.js.gz +0 -0
- package/dist/shell/assets/razor-NpEB1IHs.js.br +0 -0
- package/dist/shell/assets/razor-NpEB1IHs.js.gz +0 -0
- package/dist/shell/assets/tsMode-BylSuxTF.js.br +0 -0
- package/dist/shell/assets/tsMode-BylSuxTF.js.gz +0 -0
- package/dist/shell/assets/xml-BYRl5HAh.js.br +0 -0
- package/dist/shell/assets/xml-BYRl5HAh.js.gz +0 -0
- package/dist/shell/assets/yaml-DeSD0TUR.js.br +0 -0
- package/dist/shell/assets/yaml-DeSD0TUR.js.gz +0 -0
package/README.md
CHANGED
|
@@ -24,6 +24,8 @@ In Toyon you point at a button in the page and ask for it to be bigger, watch it
|
|
|
24
24
|
|
|
25
25
|
Each copy is a branch and a git worktree with your dependencies and `.env` files; one spare per project is kept warm.
|
|
26
26
|
|
|
27
|
+
One rule sits under all of it: no work happens on main. Main has no chat; your first message in a project starts a copy, and the files you have uncommitted in your checkout can move into that copy with it. Your checkout stays where your editor and terminal already are, runs the servers the copies share, and changes only when you press land. Most of what Toyon does without asking follows from that rule: the spare it keeps warm, the copy it starts for a message, the files it carries over, the servers it stops when nobody is looking, and the push it refuses to let an agent make.
|
|
28
|
+
|
|
27
29
|
Point at anything on the page to talk about it or open the line that draws it, and the design pane maps it to your tokens and components. What the agent is told about the page, and the keys, are in [docs/preview.md](https://github.com/toyon-dev/toyon/blob/main/docs/preview.md).
|
|
28
30
|
|
|
29
31
|
One Toyon holds every project you open, and the list of chats shows which one needs you.
|
|
@@ -48,7 +50,7 @@ npm i -g toyon
|
|
|
48
50
|
toyon ~/projects/app
|
|
49
51
|
```
|
|
50
52
|
|
|
51
|
-
`toyon .` opens the folder you are in and `toyon --help` lists the rest. The install button in the top bar makes Toyon an app of its own in Chrome, Arc, Brave or Edge, with a Dock icon and no browser bar; from then on `toyon .` opens that. A global install keeps itself updated; `TOYON_UPDATES=off` stops it. Run outside a project, Toyon opens with none: describe a new one in a sentence, or give the project picker a git URL to clone.
|
|
53
|
+
`toyon .` opens the folder you are in and `toyon --help` lists the rest. The install button in the top bar makes Toyon an app of its own in Chrome, Arc, Brave or Edge, with a Dock icon and no browser bar; from then on `toyon .` opens that. A global install keeps itself updated; `TOYON_UPDATES=off` stops it. Started with npx, Toyon offers the global install above the chat box once it has answered you. Run outside a project, Toyon opens with none: describe a new one in a sentence, or give the project picker a git URL to clone. `toyon https://github.com/you/app` opens it with that repository ready to clone into the folder you are in; a link to a branch, a file or a pull request on GitHub, GitLab or Codeberg is read back to its repository.
|
|
52
54
|
|
|
53
55
|
You need:
|
|
54
56
|
|
package/cloud/Dockerfile
CHANGED
package/dist/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,85 @@
|
|
|
2
2
|
|
|
3
3
|
What changed in each release of Toyon, newest first.
|
|
4
4
|
|
|
5
|
+
## 0.21.0 (2026-11-02)
|
|
6
|
+
|
|
7
|
+
Splitting work is called handoff again and the pieces it starts wake each other as they land, pull request review lands in a page of its own, and the project switcher clones from a URL.
|
|
8
|
+
|
|
9
|
+
### New
|
|
10
|
+
- Pull request review comments show on a page of their own, grouped by file with replies under their parent and a link to GitHub. An add to chat button puts a thread in the composer as a chip without sending it, and the rail ring still lights when new comments arrive.
|
|
11
|
+
- On the PR route, where main merges through a merge queue, landing adds the pull request to the queue and the copy reads as landed once the queue merges it. While GitHub holds a PR, in the queue or on auto-merge with checks running, Toyon asks about it every half minute as long as a window is open.
|
|
12
|
+
- Pasting a git URL into the project switcher, or giving one to the CLI, clones the repository into a folder and opens it as a project. The switcher has a clone from a URL row.
|
|
13
|
+
- The chat says when the agent runs a different model than the one asked for, whether it fell back on its own or the pick was not in its list, and the model chip reads as the agent's choice.
|
|
14
|
+
- A picture named by path in a reply shows as a still on the reply, several in a strip, and a press opens it full size. Before, it drew as a broken image.
|
|
15
|
+
- A working-tree HTML file has an open in preview button in the editor, since the reading frame runs no scripts and a page drawn by script looks empty there. Video clips open in the file viewer with the browser's own controls.
|
|
16
|
+
- Folder links and file:// links in a reply are file links; an outside folder reveals in Finder when the page is on the daemon's machine.
|
|
17
|
+
- When Toyon was started with npx, an offer above the composer runs the global install and says how it went.
|
|
18
|
+
- `toyon doctor` reports whether the GitHub CLI is installed and signed in, and what that means for the PR route.
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
- The split tool and the `/split` verb are called handoff and `/handoff` again, in the menu, the palette, the picker and the agent's instructions, and handoff has an icon of its own. Older chats are rewritten on the daemon's first start, so lists from 0.18 to 0.20 keep their shape.
|
|
22
|
+
- An agent whose piece waits on another branch is woken by a message once that branch lands, instead of sitting idle until you type. A handoff sibling inherits the origin's agent, model and effort as well as its mode.
|
|
23
|
+
- Answering a handoff card moves the row to the end of the chat and shows your answer as a bubble with your note. The n key adds a note on any row that takes one. When a plan goes back with no, keep planning, each re-proposed piece keeps the fate you pressed last.
|
|
24
|
+
- The handoff card keeps the count in its question and one press that opens the list, like the plan card. A handoff page opens with its title, a list of one gets no track, and a track that overflows scrolls on one line.
|
|
25
|
+
- A message sent while the agent works goes in between its steps instead of cutting off the command it is on. The Claude Code adapter comes from Toyon's fork for this until the change lands upstream; the daemon is on ACP SDK 2, and the Codex and OpenCode adapters are pinned to current releases.
|
|
26
|
+
- Mode and profile picks are kept per project in the daemon rather than in the browser, so new worktrees and handoffs start with the settings you chose. Model and effort picks follow a renamed model and drop a missing one instead of being stamped forever.
|
|
27
|
+
- Landing or creating a PR moves the row to the top of the rail, as a send does, so a landed row is in view to archive. A landed worktree with new uncommitted changes shows its live colour again until it lands again, and once a worktree has landed, archiving no longer asks about a shown plan or an unread reply.
|
|
28
|
+
- The worktree panel toggle sits in the top bar beside the other panel toggles, and the rail list runs to the bottom.
|
|
29
|
+
- The project picker lists open folder or file right after your projects, shows only the name on a project row, and the row menu holds switch, project settings and forget. Forgetting a project with live worktrees archives them, and they come back as restorable when the project is opened again.
|
|
30
|
+
- Enter on a multi-select question ticks the cursor row when nothing is ticked, and moves on once something is. Pickers no longer restate enter and esc, and the search palette accents the matched letters.
|
|
31
|
+
- A plan document is built the same way everywhere it is read, opens at the same height with or without a track, and a plan with its own heading uses it as the title.
|
|
32
|
+
- Links in Toyon Dark and Toyon Light take a calmer colour of the same hue. Links under a command's output take the text colour with a faint underline. Imported VS Code themes bring their own link colour.
|
|
33
|
+
- The composer shows a born from line naming the row that spawned this one, and the argument hint after a command comes from what is typed.
|
|
34
|
+
- Agents are asked to link folders with a trailing slash and to put routes and commands in backticks, and a long command is steered to the background flag instead of nohup.
|
|
35
|
+
|
|
36
|
+
### Fixed
|
|
37
|
+
- A hung quick-model session could pin naming until restart, leaving rows unnamed and faint. The ask now times out, and naming is retried after a turn ends.
|
|
38
|
+
- A saved model the agent no longer lists was sent as is, so the picker showed a stale name; it now follows the listed model or clears. A chat's model was reset to the default whenever an older build's list left it out, and a restarted daemon refused a model another process spelled differently.
|
|
39
|
+
- A confirmed landing was hidden by one stray file. The landed mark now shows while leftovers are still reported.
|
|
40
|
+
- A booked wakeup's row ended when you sent a message; it ends only when the wakeup fires, is rebooked or is stopped.
|
|
41
|
+
- A handoff piece with a long title was refused; it is now cut and the worktree named once it opens. A worktree that received a handoff stayed where it was in the rail, and a sibling started on the adapter's default model when none was set.
|
|
42
|
+
- A piece that waited on a skipped or landed sibling was stuck; it starts.
|
|
43
|
+
- Chat pictures shrank while you typed because the cap followed the composer's height.
|
|
44
|
+
- On touch screens a swipe starting on a question card scrolled the card instead of the transcript and pushed the question under the box's edge.
|
|
45
|
+
- Top bar tooltips were cut off below the bar; they sit beside their control and swap sides when the room runs out. The dot in a tooltip sits on a whole pixel.
|
|
46
|
+
- Switching back to a worktree showed another's plan title when two shared a plan path.
|
|
47
|
+
- On a phone, the swipe back to a worktree you just left answers within 800 ms instead of a second and a half.
|
|
48
|
+
- On some mobile browsers the end of a shining path went blank; the ellipsis keeps its colour.
|
|
49
|
+
- Rendered HTML previews load from a separate origin with a ticket per page, so inline images and styles load without weakening the main origin, and saving a page no longer evicts other pages.
|
|
50
|
+
|
|
51
|
+
## 0.20.0 (2026-10-28)
|
|
52
|
+
|
|
53
|
+
The rail shows work that goes on while the chat is quiet, agents find their sibling worktrees on their own, and the phone moves between the list and a worktree in one swipe.
|
|
54
|
+
|
|
55
|
+
### New
|
|
56
|
+
- A rail row shows a purple dot while its agent runs a command in the background or has a wakeup booked, and while Toyon commits or lands the worktree, so the row reads as busy with its chat closed.
|
|
57
|
+
- An agent can look up the project's other open worktrees and recently archived ones, by title, branch or the words you wrote in them.
|
|
58
|
+
- Web addresses in code blocks and in a tool's output are links that open in a new tab.
|
|
59
|
+
- A landed card links the PR it merged when the land went through one.
|
|
60
|
+
- The right-click menu on a worktree or archived row offers reveal transcript in Finder, once the chat has its first message.
|
|
61
|
+
- An answered question card shows the description of each option you picked beneath the pick.
|
|
62
|
+
- On a phone, one edge swipe from the chat, the preview or the code returns to the list, and a swipe the other way within a second and a half goes back to the worktree you left. The bar's marker now moves with the screen instead of trailing it.
|
|
63
|
+
|
|
64
|
+
### Changed
|
|
65
|
+
- Archiving a row with an unsent draft or a busy agent asks first and names the reason. The menu item ends in an ellipsis exactly when it will ask.
|
|
66
|
+
- An archived row shows in the archive list the moment you archive it.
|
|
67
|
+
- A single piece proposed from a worktree that holds no work yet is offered to run here, in that worktree, rather than in a new one. The agent is told why.
|
|
68
|
+
- Agents are asked to split work into worktrees before starting on their own part, so the card shows at once and the sibling agents start alongside.
|
|
69
|
+
- `/split` reads its first word as a project only when it names an open project exactly, or is `here`. Anything else is the whole message for this project.
|
|
70
|
+
- A pieces list with one piece shows as a plain line with its text open beneath it.
|
|
71
|
+
- The pieces card for another project shows that worktree's current mode, not the mode it had when the card was made.
|
|
72
|
+
- When you answer a plan card, the agent hears that its pieces list came back with the plan, instead of taking it as lost.
|
|
73
|
+
- A worktree mention puts its dot after the title, outside the underline.
|
|
74
|
+
|
|
75
|
+
### Fixed
|
|
76
|
+
- A split piece always gets a worktree of its own. Before, it could take over the new row you were typing in and leave your draft stranded there.
|
|
77
|
+
- Agents can list worktrees with git; only the commands that change worktrees are refused.
|
|
78
|
+
- Claude's quick model is picked from the models Claude offers, so Bedrock and dated model names work without a setting.
|
|
79
|
+
- A Mac with its screen dark no longer goes to sleep in the moment Toyon restarts.
|
|
80
|
+
- On a phone, closing the plan no longer opens it again.
|
|
81
|
+
- A piece queued after the branch you are in says it starts when this branch lands, instead of linking to your own worktree.
|
|
82
|
+
- A settings row keeps its name on one line when the value beside it is long.
|
|
83
|
+
|
|
5
84
|
## 0.19.0 (2026-10-26)
|
|
6
85
|
|
|
7
86
|
A plan can be split into pieces that each get their own worktree, worktrees go by their titles everywhere, and the phone shell becomes a place you can work from: screens you swipe between, chats you can read offline, a share sheet that lands in a chat, and a true black background.
|