Commit Graph
67 Commits
Author SHA1 Message Date
ZacharyZhang-NYandClaude Opus 5.5 3f8832702e Q182: dialogs stay busy while their request runs and ignore repeat submits
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 06:03:09 -04:00
ZacharyZhang-NYandClaude Opus 5.5 3039835644 Q181: a render error stays inside its page and says what failed
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 05:56:11 -04:00
ZacharyZhang-NYandClaude Opus 5.5 fd91832bc4 Q180: a failure no screen handles is shown instead of lost
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 05:51:33 -04:00
ZacharyZhang-NYandClaude Opus 5.5 7a4d986344 Q179: a failed first load says why and keeps retrying visibly
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 05:46:55 -04:00
ZacharyZhang-NYandClaude Opus 5.5 1cc67c244e Q178: the Chinese UI labels stored values and sign-in prompts, and shortcuts follow the platform
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 05:42:45 -04:00
ZacharyZhang-NYandClaude Opus 5.5 f79e3d4d7c Q177: conversation types and visibility say what they change
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 05:32:14 -04:00
ZacharyZhang-NYandClaude Opus 5.5 fd79f059ca Q176: onboarding progress survives a restart, and an unfinished setup reopens
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 05:25:01 -04:00
ZacharyZhang-NYandClaude Opus 5.5 43dcb1e7d3 Q175: onboarding shows what each mode allows and the amounts a company starts with
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 05:02:32 -04:00
ZacharyZhang-NYandClaude Opus 5.5 dc3127c26f Q174: choosing a language no longer restarts the app; the restart waits for the user
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 04:53:25 -04:00
ZacharyZhang-NYandClaude Opus 5.5 3f14e3f706 Q173: agents work in the company's or task's language, not the display language
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 04:40:52 -04:00
ZacharyZhang-NYandClaude Opus 5.5 538d834647 Q172: disconnecting a provider shows what it stops, then the outcome
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 04:25:31 -04:00
ZacharyZhang-NYandClaude Opus 5.5 059970e7e1 Q171: provider policy fields say what they govern and show pending and saved state
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 04:20:13 -04:00
ZacharyZhang-NYandClaude Opus 5.5 7c291cf7a7 Q170: agent model suggestions and choices follow the picked provider
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 04:08:17 -04:00
ZacharyZhang-NYandClaude Opus 5.5 a8fbc08df6 Q169: saved cloud and custom endpoints refill their form and keep the saved key
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 04:02:08 -04:00
ZacharyZhang-NYandClaude Opus 5.5 5cd413ffcf Q168: a connected provider's default model changes without its credential
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 03:55:55 -04:00
ZacharyZhang-NYandClaude Opus 5.5 26c3365896 Q167: the model in effect and what a default change reaches are shown
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 03:44:23 -04:00
ZacharyZhang-NYandClaude Opus 5.5 e8722cd815 Q166: workspaces can be edited, made primary and removed
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 03:32:03 -04:00
ZacharyZhang-NYandClaude Opus 5.5 20c37362f3 Q165: the company's profile and how it runs can be changed after onboarding
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 03:20:39 -04:00
ZacharyZhang-NYandClaude Opus 5.5 93c5eb2d71 Q164: every settings section says whether it affects this company, every company, or this computer
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 03:13:44 -04:00
ZacharyZhang-NYandClaude Opus 5.5 9826b163a9 Q163: the goal progress view is called Progress, not Timeline
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 03:08:57 -04:00
ZacharyZhang-NYandClaude Opus 5.5 c9117fe46d Q160: a goal's pace is measured against its target date, and claimed only when it has one
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 02:44:20 -04:00
ZacharyZhang-NYandClaude Opus 5.5 9d166e3fc9 Q158: run history and run output come from the database, not the snapshot window
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 02:31:43 -04:00
ZacharyZhang-NYandClaude Opus 5.5 a075f931d5 Q157: a run can be cancelled before it starts, and a failed or stopped one retried or resumed
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 02:11:11 -04:00
ZacharyZhang-NYandClaude Opus 5.5 71ac5085cd Q156: approval history pages back and opens each decision in full
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 02:01:21 -04:00
ZacharyZhang-NYandClaude Opus 5.5 41359e268a Q155: batch approval decides one request at a time and reports each result
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 01:43:41 -04:00
ZacharyZhang-NYandClaude Opus 5.5 ec183ec60e Q154: decision notes belong to one request and reset on close or switch
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 01:34:59 -04:00
ZacharyZhang-NYandClaude Opus 5.5 af831abd53 Q153: the approval button that reviews a request is called Review, and leads to where the request can change
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 01:32:09 -04:00
ZacharyZhang-NYandClaude Opus 5.5 e8634afb82 Q152: chat replies and goal checkpoints stay out of work lists, load and progress
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 01:26:15 -04:00
ZacharyZhang-NYandClaude Opus 5.5 18f1e1fcc3 Q151: deleting a task first shows what goes with it, then waits for the result
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 01:21:31 -04:00
ZacharyZhang-NYandClaude Opus 5.5 809c67a54a Q150: work can be sent back, reopened, moved to backlog, or blocked with a reason
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 01:12:17 -04:00
ZacharyZhang-NYandClaude Opus 5.5 7ab46bb2de Q149: editing a task can change everything creating it can
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 01:04:26 -04:00
ZacharyZhang-NYandClaude Opus 5.5 766d4ab8cd Q148: a task's goal, project, workspace, runs, approvals and subtasks open with one click, and lead back
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 00:58:34 -04:00
ZacharyZhang-NYandClaude Opus 5.5 983d37937d Q147: the conversation header lists its real members, how each agent replies, and who can read
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 00:45:05 -04:00
ZacharyZhang-NYandClaude Opus 5.5 02309546dc Q146: the message editor stays open until the edit is saved, and says why it was not
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 00:35:28 -04:00
ZacharyZhang-NYandClaude Opus 5.5 2a89d1e883 Q144: each message says where the reply it asked for stands
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 00:08:32 -04:00
ZacharyZhang-NYandClaude Opus 5.5 075dea725a Q143: earlier messages come from the database, page by page, back to the first one
Review limit (5) reached; the last finding (exhaustion latched) is fixed
by taking it from each latest hasMore.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 23:52:22 -04:00
ZacharyZhang-NYandClaude Opus 5.5 b18eb9ad14 Q142: a conversation is read only up to the message the reader actually saw
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 23:18:06 -04:00
ZacharyZhang-NYandClaude Opus 5.5 87c297dd45 Q141: reply to a specific message in its thread, and see what each reply answers
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 23:01:57 -04:00
ZacharyZhang-NYandClaude Opus 5.5 46f7561f77 Q139: each conversation keeps its own draft text and attachment
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 22:26:38 -04:00
ZacharyZhang-NYandClaude Opus 5.5 c5b011ce80 Q138: a refused send keeps the draft and says why
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 22:15:18 -04:00
ZacharyZhang-NYandClaude Opus 5.5 5c8233d258 Q31: a Library page to read and manage documents and knowledge
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 06:26:15 -04:00
ZacharyZhang-NY c7eafb2836 Founder-CEO chat round trip proven end to end; agents see the founder
loadChatContext labels human senders "[Name (founder)]" so a woken agent
knows it answers its boss, not a teammate. New integration test drives
the whole loop — founder DM wakes the CEO, the prompt names the founder,
the reply lands in the same pinned conversation and thread, the wake
task closes — and a Playwright spec pins the UI contract: badged CEO row
first, selected by default, message queues the wake run, channel recency
never displaces the pin. AGENTS.md documents the feature contracts.
2026-07-14 00:23:49 -04:00
ZacharyZhang-NY 177e25aab5 The Kimi family is visible end-to-end: e2e asserts onboarding and Settings, AGENTS.md learns the provider recipe
- desktop.spec.ts verifies Kimi / Kimi CN / Kimi Code cards in the onboarding provider step, the device-flow sign-in button on Kimi Code, and all three under Settings -> Providers
- AGENTS.md documents the catalog-driven provider architecture and the Kimi endpoints so the doc stays truthful
- Full gate green: typecheck, lint, unit (269), contract, integration, replay-eval, Playwright e2e (3)
2026-07-10 17:21:37 -04:00
ZacharyZhang-NY eaaf36f859 Language-aware house style and a resizable chat split
House style now follows the app language: Chinese UI forces the new
bundled humanizer-zh skill into every run, English forces humanizer -
one variant per run, picked by preference with cross-language fallback
so an older catalogue never silently loses house style. Both variants
are protected from grant/revoke, list_skills labels each with its
language, the bundle guard requires both, and startup sync imports the
new skill into existing orgs on next launch. Covered by a unit test
that flips app_state.language and asserts which humanizer compiles.

The chat split is now adjustable: drag the conversation list's right
edge (200-480px, persisted in localStorage) and the composer textarea
grew a native vertical resize grip capped at 40vh.
2026-07-09 01:14:05 -04:00
ZacharyZhang-NY cb71afa6b7 Avatar photo uploads and a global handbrake for the agent engine
Two operator asks, one review gate:

Avatar portraits (migration 052): the avatar editor gains "Upload
photo" - the renderer downscales the chosen picture to a ~96px cover
crop and stores it as a small data URL (PNG keeps transparency, the
rest compresses to JPEG), so the snapshot stays light and the CSP needs
nothing new. The portrait wins over emoji and initials everywhere the
shared Avatar renders (chat, org chart, office card, sidebar), and
"Remove photo" falls back cleanly. The main process validates scheme
and size (base64 image data URL, <=300k chars) so a rogue caller cannot
re-bloat the snapshot. e2e uploads a real PNG through the profile
dialog and sees the portrait land in the sidebar.

Global pause (migration 053): when agents start talking in circles,
one topbar toggle - visible on every page - pulls the handbrake.
app_state.autorun_paused survives restarts; the queue worker checks it
each tick and neither enqueues nor claims while set (the run already in
flight finishes). Queued work simply waits and the paused state renders
as an amber "resume" pill. A unit test drives the real worker: paused
leaves a queued run untouched through many ticks, resuming claims it
within moments; e2e flips the toggle in the live shell.
2026-07-09 00:09:02 -04:00
ZacharyZhang-NY 78e88807da Give chat a real scroll contract: open at latest, stick, jump back
The conversation pane had no scroll management at all - it opened at
the top of history, ignored arriving messages, and offered no way back
down other than dragging through long replies.

- Opening a conversation lands on the newest message (the component is
  keyed by space, so mount = open)
- A reader at the bottom stays pinned as new messages arrive; a reader
  up in history is left undisturbed
- The moment the reader leaves the bottom, a floating "Jump to latest"
  pill appears above the composer; clicking it smooth-scrolls back and
  the pill hides itself again
- The scroll region is a proper role="log" landmark; e2e seeds a dozen
  multi-line messages over real IPC, scrolls to the top, and drives the
  pill's appear -> click -> return-to-bottom -> disappear cycle
2026-07-08 23:55:52 -04:00
ZacharyZhang-NY c50f17190c Animate the whip: a crack at the strike point and a flinch on the target
Every whip click now lands visibly, wherever the target is standing:

- simulation.whip() always registers a WhipCrackEffect at the struck
  agent and starts their hit reaction; step() ages both away. The
  discipline rule is unchanged - only snack-bar/restroom slackers are
  sent hustling home; desk, CEO office, and meeting stay safe
- office-renderer draws the strike: a lash sweeping in from the upper
  right that collapses into an impact starburst with an expanding ring
  (~450ms), while the struck agent shakes with anime-style pain sparks
  over their head (~600ms), fading as the flinch drains
- The office e2e now collects pageerror during the run and lets the
  effect play out after a whip-mode click, so a throwing frame in the
  rAF loop fails the suite instead of dying silently
2026-07-08 23:41:33 -04:00
ZacharyZhang-NY 4ab20e679c Add the whip to the office toolbar: slackers hustle back to their desks
- New bottom toolbar on the pixel office floor with a Whip tool;
  toggling it turns the cursor to a crosshair, clicks whip instead of
  opening the detail card, Escape puts the whip away
- Simulation.whip(): an agent inside the snack bar or restroom drops
  whatever they are carrying and hustles back to their desk at 1.8x
  speed for a few seconds; agents at their desks, in the CEO office,
  or in the meeting room are working and stay untouched
- Room membership decides the outcome (rectContains against the same
  floor-plan rooms the renderer draws), so the rule matches what the
  player sees
- Unit tests cover the whip matrix; e2e drives the toolbar toggle in
  the live shell
2026-07-08 21:51:47 -04:00
ZacharyZhang-NY c3924af9ac Office life: everyone roams, meetings convene in pairs, card follows agent
- The detail card now rides beside the clicked agent (flipping and
  clamping at viewport edges via a pure cardPositionFor helper) instead
  of pinning to the top-right corner; it follows a walking agent
- Every agent - the CEO and busy agents included - periodically visits
  the coffee machine, snack bar, and restroom; work status no longer
  recalls a walker mid-break
- The office convenes meetings around the meeting table every few
  minutes: at least two settled attendees walk over, dwell together on
  distinct table spots, and head back; a solo office never meets
- Meeting spots ship as lane-wired amenities so pathing stays correct
  by construction; floor-plan invariants (collider-free, reachable)
  cover them automatically
- e2e asserts the card opens beside the sprite, not in a corner
2026-07-08 21:40:53 -04:00
ZacharyZhang-NY e55b8b85b0 Make every identity editable: agent and operator names plus avatars
- Migration 049: avatar_emoji/avatar_color on agents and employees
- updateAgent accepts a new name (mention-name validated) and avatar;
  new updateEmployeeProfile renames the operator and sets their avatar
- Avatars are emoji-on-color tiles (renderer CSP blocks remote images);
  an AvatarDirectoryContext built from the snapshot lets the shared
  Avatar component honor custom looks at every call site - chat rows,
  conversation list, org chart, office card, sidebar - without
  threading props through pages
- Team edit dialog gains Name + avatar editor (CEO included); the
  sidebar foot opens an Edit-profile dialog for the operator
- e2e: rename an agent to a new mention handle with an emoji avatar,
  edit the operator profile, both verified in the live shell
2026-07-08 21:33:23 -04:00