211 Commits
Author SHA1 Message Date
zandGitHub c6be5678ec Merge pull request #2 from hanzoai/i18n
@hanzo/build 0.2.81: every word the builder authors is the reader's language
2026-10-22 19:18:02 -07:00
zeekay 4d0821926b README: how the builder says its words 2026-10-22 19:13:26 -07:00
zeekay fb5424ad5b i18n: a run's cards, its failure and the workspace's notes in the reader's language
run.tsx, desk.tsx, project.tsx and landing.tsx hand their t to turn.ts
(cards, failure, said, scrub) and to plain and unhonoured, so the notes
built with a value (Started on {branch}) translate. The log level is
still read from the English line.
2026-10-22 19:09:05 -07:00
zeekay 9be9aaecc1 e2e: Customize's Skills in French and the Library right to left in Arabic
translated.tsx mounts the builder's own app inside @hanzo/i18n's
provider with a catalog the spec writes; the spec reads Skills' tabs,
choice, search, shelf and Add in French, with the request Add sends
unchanged, and the Library in Arabic, its heading and kinds at the
right of their column and nothing past the edge at 1440 and 390.
2026-10-22 19:07:58 -07:00
zeekay 6d6e7f5c52 i18n: Library, Scheduled tasks, automations and the environment speak the reader's language
The Library's kinds, days, menus and dialogs, Scheduled tasks and an
automation's editor, schedule and runs, and a codebase's environment and
its setup draw their words through t. An item's, task's or repository's
name, a run's title and summary, a secret's name and what the platform
answers or understood are drawn as given. A schedule is said by
words(schedule, t); a state, a source and a status by their marked
words. Under right to left the back chevrons turn and rows read from
the line's start; the grid of tiles and the sides touched are gui props.
2026-10-22 19:07:58 -07:00
zeekay b9bf12adb6 i18n: Customize speaks the reader's language
Agents, Skills, Connectors and Plugins, their shell and the cards,
dialogs and empty states they share draw their words through t. A
skill's, connector's, plugin's or agent's name and description, a
category the platform names and a SKILL.md are drawn as given; Person
and Preset are ours. A budget is said in one sentence per period, and a
card's Add or Use names the thing in one sentence. A card's words read
from the line's start, a gui prop, and the profile's back arrow turns
under right to left.
2026-10-22 19:07:58 -07:00
zeekay b7dfd69fe2 i18n: Settings speaks the reader's language
Every section draws its words through @hanzo/i18n's t: the list and its
parts, General, Account, Privacy, Billing and its card form, Usage and
the plan, Capabilities, Memory, Code, Environments, Machines, API keys,
Members, Integrations and Notifications. Names, emails, addresses,
commands, keys and what the platform answers are drawn as given, and a
read or write that failed is said through told, so ours translate and
the platform's stand. A credential shown once names its own copy
control. Under right to left the column's edge, the chevrons and the
figures' columns turn with the line; the sides touched are gui props.
2026-10-22 19:07:58 -07:00
zeekay 4c9c4d2913 i18n: what the API modules say is marked for the reader's language
A sentence a module writes is English marked with phrase, so a screen
says it through t: errors thrown as Error carry it as their message, and
one with something of the moment in it (a file's name, an address) is a
Sentence, its source and values kept. told(e, t) says either, and the
platform's own words, which are no key, come back as given; say(e, t)
in customize does the same behind its plain lines.

A module that builds text takes the screen's t as its last argument,
English without one: a schedule's words, a run's status line and its
cards' notes, an environment's refusals, why a mode cannot run where it
is sent. A finished run's line is one sentence for each of what it
pushed, its pull request and its site.
2026-10-22 19:07:58 -07:00
zeekay a33171f6e5 i18n: the sides this change touched are gui props, not inline styles
A start or end alignment is the text's own prop (text="start"), a
container's rides $platform-web, the side panel's corner is rounded=
"inherit", a command is in the mono face token, the template field's
ceiling is maxH, and the mic meter rests at scaleX 0 from the line's
start.
2026-10-22 18:48:39 -07:00
zeekay d1e39100d7 i18n: a plugin's name and the attachment notes in the reader's language
carry.tsx hands its t to the plugin shelf and to prep, and draws a
plugin's marked name through t on its chip and in Manual's question;
New and a project's workspace hand theirs to pick.
2026-10-22 18:42:48 -07:00
zeekay b8495d061f i18n: a run's Files, Artifacts, Git and doors, and the sign-in return
A door says each sentence once per door (desktop, terminal) rather than
splicing the noun in. Paths, branches, commit messages and reviews are
drawn as given; Git's chevron turns right to left.
2026-10-22 18:42:18 -07:00
zeekay 44be643d32 i18n: New, a project's workspace, Publish and Plans speak the reader's language
New's notes, its place and repository choosers' words, a workspace's
bar, chat, preview, files and dialogs, the Add to project dialog and the
plans page draw their words through t. MODES is marked (`phrase`) for
whoever draws it. A plan's name, price and features, a project's and a
run's names and the platform's reasons are drawn as given.
2026-10-22 18:42:18 -07:00
zeekay 527e5a2139 i18n: Projects, Issues and Sync speak the reader's language
Every word on the forge's screens is drawn through t, one sentence a
key, counts as values with a key for one and for many; a repository's
org, name, branch and description, an issue's title, labels and people
are drawn as given. Right to left, the rows and cards mirror, their
chevrons and arrows turn, and an `org/name` address keeps its own order.

language-projects.spec.ts holds Projects in French and in Arabic.
2026-10-22 18:42:18 -07:00
zeekay af73d62431 i18n: the plugins speak the reader's language
A plugin's name and note are marked where they are written and the
Plugins shelf draws them, and its own words, through the caller's t;
prep names a plugin that failed the same way, the reason as said. Both
take t last and fall back to English (say.ts `english`). Sketch,
Template Creator and Work in a project draw their dialogs through t.

What a plugin writes for a model, and the answer it writes into the
conversation, stay as written.
2026-10-22 18:42:18 -07:00
zeekay 53e4f586ae i18n: the builder's rail, runs, side panel and menus speak the reader's language
Every word the builder draws outside settings and Customize goes through
@hanzo/i18n's t: the rail and nav() (which take the caller's t, English
without one), a run's header, transcript, status line, menus and dialogs,
the side panel's tabs, page bar and sandbox bar, the account menu and
meter, Find, Sites and Templates, the reply bar and the Manual dialog.
Copy held as data is marked with phrase where it is written; the plan
and usage sentences are whole sentences with their figures as values.
Read errors are drawn through t, so ours translate and a server's stand.
The page bar's Back and Forward turn under right-to-left.
2026-10-22 18:40:11 -07:00
zeekay 63ded9f0d8 i18n: the composer speaks the reader's language
The empty Chat's composer, its + menu, dictation, voice mode, the row
under the frame (model, effort, mode) and the starters draw their words
through @hanzo/i18n's t; a starter's prompt is sent in the words pressed.
Right to left, the panel stands at the line's start and its grip turns.

@hanzo/i18n is a peer, so the host's provider is the one asked.
2026-10-22 15:15:03 -07:00
zeekay acce522fe9 @hanzo/build 0.2.80: Browse is every agent to start from, and Use makes your own
The host's default agents, its personas and the platform's presets are one
gallery with search and categories. Use makes one agent of the org's own from
one template under the first free name (Einstein, then Einstein-2), with its
face, and opens its profile; nothing is added in bulk, so a new org has none.
Start from scratch, Clone yourself and Create from a person make one too.
2026-10-22 01:14:16 -07:00
zeekay e672672bc0 @hanzo/build 0.2.79: a suggestion does what it says
Each row carries a typed act and pressing it does it at once: open opens
the item it names (a conversation, a run, an issue, a creation), send
starts a chat with its prompt, task starts a Dev run, schedule makes the
scheduled task and shows it. The model names one of the four; a row it
cannot bind (an open of an item the activity does not hold, an act with
no prompt, a time `every` cannot read) is dropped, never repaired. The
whole row is the one target, its title one short action, its × kept.

hand and taken carry a send or a task to the product that does it,
through same-tab session storage, so an address never carries one.
book makes a schedule row's task.

The composer rests at two rows, a line of text and the tools, and grows
with the text; the dictation chevron shows only while the mic is reached
for.
2026-10-20 22:26:12 -07:00
zeekay cd4414c987 composer: a model row names its model and says Paused when the plan's usage has paused it, still picked; @hanzo/build 0.2.78 2026-10-20 21:45:40 -07:00
zeekay 83a167e331 design systems are CSS custom properties, the form Studio's renderer takes, so a deck made with one renders; @hanzo/build 0.2.77 2026-10-20 21:20:54 -07:00
zeekay afe2e81fb5 Library and Scheduled tasks for a host's sidebar: Upload and the kinds (the kind in the address, -/artifacts/<kind>), New task and the person's tasks; @hanzo/build 0.2.76 2026-10-20 21:13:36 -07:00
zeekay 4665c86fbf reply: a fenced block named both ways (html otter.html) is named by its file; @hanzo/build 0.2.75 2026-10-20 20:48:19 -07:00
zeekay 15c2be89d0 plugins: the design system a plugin made reaches the host, so it is attached and the maker turns off; @hanzo/build 0.2.74 2026-10-20 19:36:56 -07:00
zeekay 30cff69669 Dev's own places, Settings' sections and Customize's tabs for a host's sidebar; Customize opens on Agents, each agent a profile page, and Add default agents makes the host's cast; @hanzo/build 0.2.73 2026-10-20 16:56:59 -07:00
zeekay b998eedd36 summary: the test's icon mock names the lead's mark; @hanzo/build 0.2.72 2026-10-20 16:29:09 -07:00
zeekay b640a93b07 summary: the Outputs and Sources panel on the kit menu's rows, Create file or site a row like the rest, 8px clear of its mark; @hanzo/build 0.2.71 2026-10-20 16:28:49 -07:00
zeekay 8b9cf652ee composer: Manual asks before a plugin or a run, Chat offers Auto and Manual and Dev adds Plan; three suggestions always; one Gutter for every pane edge; Dev opens on Build what's next; @hanzo/build 0.2.70 2026-10-20 16:25:49 -07:00
zeekay 626ff36639 design systems: made by chat, kept as Studio brands, attached from + › Design system; an attached one is said to the model and drives decks; @hanzo/build 0.2.69 2026-10-20 16:00:18 -07:00
zeekay b68a9f5156 gear: a skill or plugin stays with the conversation it was picked in; only Research, Memory and the mode carry to the next; @hanzo/build 0.2.68 2026-10-20 15:15:33 -07:00
zeekay dc54872467 @ and /: the list reads from the left; @hanzo/build 0.2.67 2026-10-20 14:52:21 -07:00
zeekay 5cb0a82608 menus: a press on a shelf opens it, never shuts it; a plugin's own answer is the answer; @hanzo/build 0.2.66 2026-10-20 14:26:47 -07:00
zeekay aeafe70de3 menus: a shelf is drawn only while open and takes the pointer — a closed one lay under the menu and caught its clicks; @hanzo/build 0.2.65 2026-10-20 13:58:25 -07:00
zeekay c7b8205eae composer: the plugins — + › Plugins and @ — ride every message in Chat and Dev; @hanzo/build 0.2.64 2026-10-20 13:21:51 -07:00
zeekay b615b2a245 index: the plugin types once 2026-10-20 13:17:39 -07:00
zeekay a9bc2a409b Merge branch 'plugins' into plus 2026-10-20 13:17:20 -07:00
zeekay 5d25219eb3 plugins: the composer's own — work in a project, deep research, sketch, templates as skills, presentations, PDF 2026-10-20 13:17:20 -07:00
zeekay 58c2e7dc39 composer: the model list scrolls and opens on its first forty; a phone's controls are a finger wide; dictation opens the microphone chosen (voice 0.1.19); @hanzo/build 0.2.63 2026-10-20 13:05:13 -07:00
zeekay 67d45364b9 composer: the row under the frame keeps the frame's width; the round's ink is the accent's; Chat's dictation names its language; @hanzo/build 0.2.62 2026-10-20 12:43:38 -07:00
zeekay 143dc558d0 @hanzo/build 0.2.61 2026-10-20 11:55:21 -07:00
zeekay 0f0ccf1fbd dictation: the microphones as the browser lists them, the system's own marked, with its live level 2026-10-20 11:55:04 -07:00
zeekay 1e4c9a204b dev: suggestions under New's composer; the project's fixed chips go 2026-10-20 11:54:06 -07:00
zeekay 4055bf5827 composer: what the gear says is read when it changes; the mic and voice are plain marks on a laptop; a phone gives where its own line 2026-10-20 11:53:13 -07:00
zeekay f10d47bac7 Merge branch 'suggest' into plus
# Conflicts:
#	src/api/pref.ts
2026-10-20 11:48:19 -07:00
zeekay 514e9cee07 Merge branch 'side' into plus 2026-10-20 11:48:12 -07:00
zeekay ca751b7aa2 composer: one frame for Chat and Dev — + menu, dictation, voice or send, and the model, effort and mode under it; Free picks from the free lane 2026-10-20 11:46:43 -07:00
zeekay aa610b9f3c side: the panel's column, once for Chat and Dev
Its edge is the kit's Grip. Dragged wider, the panel takes the middle
column's room once that column would fall under half its 360px floor,
and Show run (or Show chat) or a pull back out returns it. Its strip
puts it full screen; Escape or the button returns. The width is the
person's, kept in their preferences as side.width (PATCH /v1/pref), and
a drag writes two elements a frame without a React commit. On a phone
the panel is the whole window.

PrefsProvider nests: a host mounts it above the builder, which then
reads through it, and the look moves into the builder.
2026-10-20 11:40:58 -07:00
zeekay 093795157c composer: up to three suggestions from the person's own activity
The rows under the composer (above it on a phone) are made by zen5-flash
from the person's conversations, their own Dev runs, the org's issues and
pull requests, automations and files, or from what signup learned when
there is no activity yet. The answer is decoded under a strict schema and
validated: a row whose address is not one of the inputs' is dropped.

The rows, the fingerprint of their inputs, the time and the dismissals
are kept in the account as `suggest` in /v1/pref; they are made again a
day later, or once the activity moves and they are an hour old.
2026-10-20 11:29:54 -07:00
zeekay ea62c9f0c7 composer: the + menu, the plugin contract and what a conversation carries (gear) 2026-10-20 11:13:35 -07:00
zeekay de01ef9d2f @hanzo/ui 8.29.0: the kit's menus, popovers and command menu 2026-10-20 08:33:13 -07:00
zeekay f30d8abbd8 @hanzo/build 0.2.60 2026-10-17 08:49:18 -07:00