Commit Graph
70 Commits
Author SHA1 Message Date
ZacharyZhang-NYandClaude Opus 5.5 f5526b075c Q185: switching company carries no focus, search or form from the previous company
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 07:51:39 -04:00
ZacharyZhang-NYandClaude Opus 5.5 72cf57ce3a Q184: the page, its sections, filters and selections survive page switches and restarts
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 07:46:21 -04:00
ZacharyZhang-NYandClaude Opus 5.5 2790d88186 Q183: unsaved input is kept across pages, and leaving or closing asks before losing it
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 07:30:13 -04:00
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