Commit Graph
1147 Commits
Author SHA1 Message Date
ZacharyZhang-NY 8f1a5f1f4e Enrich the landing page with a bento grid and aurora atmosphere
Close the flat-vs-adaline gap by adding depth and motion to our product shots:
- bento: replace the flat stacked features with a varied 12-column grid (org
  chart, cost, office, messages, connectors, plus a local-first highlight card),
  each with a corner glow and hover
- showcase: a dark aurora "Set the goal" statement band (Newsreader serif over a
  drifting northern-lights glow) for a light -> dark -> light rhythm
- hero + footer: aurora glow staging behind the dashboard and under the CTA
- ui/aurora + globals: mint/teal/lime drift-animated glow tokens
- remove the superseded flat feature components

e2e green (12 passed); build verified.
2026-07-07 22:57:54 -04:00
ZacharyZhang-NY 4f0d03ad72 Add Playwright e2e suite for the landing page
- playwright.config.ts: desktop (1440) + mobile (Pixel 5) projects, static
  webServer over the exported out/; a PW_CHROME env override for the browser
- tests/e2e: render + all core sections, tracked download hrefs with no R2
  exposure, the live counter (mocked function), theme toggle, image loading,
  zero console errors, and responsive nav (desktop links / mobile menu reveal)
- navbar: hide the closed mobile menu with `invisible` so its links stay out of
  the tab order and the accessibility tree, not merely clipped
- add the test:e2e script and ignore test-results/ + playwright-report/
2026-07-07 22:30:33 -04:00
ZacharyZhang-NY 72e3abacf9 Rebuild footer, finalize structure, and refresh social metadata
- footer: dark #050e11 band with an Instrument Serif display CTA, an inverted
  Download button, link columns (tracked download hrefs preserved) and copyright
- structure: move icon-mark to brand/, theme provider+toggle to theme/,
  site-constants to lib/; sections/layout/ui/brand/theme now fully separated
- button: add an inverted variant for dark surfaces
- metadata: point OpenGraph/Twitter at a 1200x630 og.jpg and the JSON-LD
  screenshot at dashboard.webp; drop the old /screenshots references
- remove orphans: framer-motion (replaced by CSS + IntersectionObserver),
  ascii-background, and the seven superseded product screenshots
- add @playwright/test for the e2e suite
2026-07-07 22:24:33 -04:00
ZacharyZhang-NY 39de74320c Rebuild download section in adaline style
- adaline heading + version/count line + three platform cards with Reicon
  download icons (components/sections)
- preserve all business logic verbatim: the /api/download-stats count fetch with
  seeded fallback, and every asset link routed through getTrackedDownloadHref
  (/api/download?asset=...) so downloads stay counted and the real R2 URLs
  remain behind the server redirect
2026-07-07 22:17:48 -04:00
ZacharyZhang-NY 32e521beae Restyle runtimes, how-it-works, and FAQ in adaline style
- runtimes: bordered "supported runtimes" strip, text-based for consistency
  (Reicon brand coverage is partial); all eight runtimes preserved
- how-it-works: centered heading + clean numbered stepper for the seven-step
  first-run flow; drop the framer-motion terminal demo
- faq: adaline accordion (grid-rows expand, Reicon plus icon); all answers
  preserved, including the platform-support-derived ones
- move all three into components/sections and remove the old flat components
2026-07-07 22:14:24 -04:00
ZacharyZhang-NY c0f677ccc9 Rebuild navbar, hero, and feature sections in adaline style
- navbar: sticky, transparent to blur-on-scroll, wordmark + mono nav links +
  theme toggle + Download CTA, Reicon Menu/Xmark icons (components/layout)
- theme-toggle: Reicon Sun/Moon icons
- hero: meadow badge, tight Instrument Sans headline, Download + How-it-works
  CTAs, availability line, framed dashboard shot (components/sections)
- features: five stacked heading-over-panel sections mapping the org chart,
  office, messages, connectors and cost-control screens
- ui/media-frame: shared framed product-shot panel
- reveal: progressive enhancement — content is visible without JS and only
  hidden once the js class is present, then revealed on scroll
- remove the superseded flat navbar/hero/features components

Verified: next build green; desktop + mobile screenshots reviewed.
2026-07-07 22:08:31 -04:00
ZacharyZhang-NY b1e2374c7b Rebuild landing design system on the adaline pebble/meadow palette
Foundation for the adaline-based landing rebuild:
- globals.css: warm-cream light theme + Material-3 dark theme mapped onto the
  existing CSS-var names; CSS-keyframe entrance + IntersectionObserver reveal
  motion (to replace framer-motion incrementally)
- layout.tsx: self-host Instrument Sans/Serif, Newsreader and JetBrains Mono via
  next/font/google; drop the external Google Fonts <link>
- _headers: tighten CSP style/font-src to 'self' now that fonts are local
- components/ui: Container, Reveal, Eyebrow, Badge, Button, SectionHeading
- lib/landing-content.ts: feature-section copy for the six product screens
- public/images: six product screenshots optimized to WebP
- add reicon-react/reicon-brands (bundled, CSP-safe SVG icons)

Business logic (D1 download counter, platform metadata, theme, SEO) unchanged.
2026-07-07 21:41:12 -04:00
ZacharyZhang-NY 8265612206 recover landing 2026-07-07 21:10:31 -04:00
ZacharyZhang-NY 3b2401de60 Update .gitignore 2026-07-07 20:31:48 -04:00
ZacharyZhang-NY 155c08b16d Language picker on the onboarding welcome step; agents work in the app language 2026-07-07 15:59:16 -04:00
ZacharyZhang-NY ea9418a6e0 Replace the app icon with the glass bloom mark 2026-07-07 15:19:42 -04:00
ZacharyZhang-NY 297f266bab New app icon: indigo squircle with the agent org-chart glyph 2026-07-07 14:55:05 -04:00
ZacharyZhang-NY a95859a9f7 Brief agents on their connectors, skills, and the CEO's grant authority; CEO predicate follows role_level 2026-07-07 14:19:08 -04:00
ZacharyZhang-NY 3e4c7c81a2 Localize the renderer UI into Chinese behind the language setting 2026-07-07 13:22:19 -04:00
ZacharyZhang-NY d404e1e72a Pin the UI locale to the language setting and add theme + language selectors with a dark palette 2026-07-07 12:28:06 -04:00
ZacharyZhang-NY b30b9a3bc1 Work list titles clip instead of colliding; timeline becomes segmented status bars per goal and project 2026-07-07 12:16:36 -04:00
ZacharyZhang-NY 38bd3588e7 Connected connectors can be deleted and reconnected; mirror sweeps stale rows and ops serialize per org 2026-07-07 12:09:31 -04:00
ZacharyZhang-NY eb16baff50 Flatten the sidebar: Office under Team, Connectors under Approvals, no divider 2026-07-07 11:44:15 -04:00
ZacharyZhang-NY defe8f12b1 Make the CEO the grant authority: implicit all-access, agent-tool grants, no manual assignment UI 2026-07-07 11:24:28 -04:00
ZacharyZhang-NY 934fa71486 Add a post-launch connectors step to onboarding 2026-07-07 11:15:03 -04:00
ZacharyZhang-NY 3669b5dfc6 Ignore .DS_Store 2026-07-07 11:07:05 -04:00
ZacharyZhang-NY 00e05054ca Mirror the Composio project's auth configs as the connector catalog with logo.dev icons 2026-07-07 11:06:07 -04:00
ZacharyZhang-NY dde449d226 Hardcode the Composio key in app source; drop cred.txt and build-time injection 2026-07-07 10:03:26 -04:00
ZacharyZhang-NY ae27317aad Commit cred.txt so every checkout builds with the Composio key 2026-07-07 10:00:31 -04:00
ZacharyZhang-NY 0ec13e3e3a Remove threads from Messages: every conversation is flat
All messages already render chronologically in the channel pane, so the
thread affordance only duplicated them behind a second view. The reply
chip, the in-place thread pane, and the thread composer are gone;
ChatThreadView is deleted and the thread props are removed from the
conversation, timeline, and message-row chain. Message writes are
untouched.
2026-07-07 01:58:11 -04:00
ZacharyZhang-NY d19573187c Fix connector Connect: use the link flow and surface failures
Root cause found by probing the live API: Composio v3 rejects
POST /connected_accounts for Composio-managed OAuth auth configs with a
400 pointing at POST /connected_accounts/link, and the renderer threw
the failure away inside a .then, so clicking Connect did nothing and no
browser opened.

- createConnectedAccount now calls POST /connected_accounts/link with
  auth_config_id and user_id and reads connected_account_id and
  redirect_url; the local mirror records INITIALIZING until the poll
  adopts Composio's real status.
- Connect failures (and a blocked external-URL open) now show as a
  single line on the page instead of vanishing.
2026-07-07 01:53:22 -04:00
ZacharyZhang-NY a2de132083 Embed the Composio key in the app bundle instead of shipping cred.txt
Root cause of the recurring 401: a revoked key was hardcoded in
startup-recovery.ts and onboarding-service.ts and reseeded into
composio_settings on every launch, and the interim fix shipped cred.txt
as a visible file under resources/.

- electron.vite.config.ts reads the gitignored cred.txt at build time
  and injects the key into the main-process bundle as
  __COMPOSIO_API_KEY__; no credential file is packaged and the key is
  not user-visible or configurable. The renderer bundle never sees it.
- Delete both hardcoded-key seeders; migration 046 purges stored
  api_key and never-read toolkits rows while keeping entity_id and
  auth_config state.
- Stop shipping composio_settings in the renderer snapshot.
2026-07-07 01:40:19 -04:00
ZacharyZhang-NY 2d43950123 Read skills from the global and workspace .agents/skills directories
- Discover skill directories under ~/.agents/skills and each
  workspace''s .agents/skills; a directory qualifies with a full
  skill.manifest.json or just a SKILL.md, whose manifest is derived
  (frontmatter name or the directory name). Paths resolve per platform
  on Windows, macOS, and Linux.
- Sync at startup for every organization and again when the Skills
  page opens; skills the org already carries are skipped, and one
  broken directory cannot block the rest.
- AGENTCOMPANY_NEW_SKILLS_ROOT points tests at a temporary library
  (overriding USERPROFILE crashes Electron on Windows).
2026-07-07 01:21:33 -04:00
ZacharyZhang-NY 256e0680c6 Ship Composio as a built-in integration and trim Settings
- Resolve the API key from cred.txt at the project root in development
  and the packaged resources directory in production; the file is the
  source of truth, so a rotated key replaces the stored one. Fixes the
  401 packaged builds hit when a stale database key won.
- Remove the user-facing Composio key editor; the key ships with the
  product and is not configurable.
- Remove the Migration console from Settings.
- Remove the Connectors and Home refresh buttons; connector statuses
  sync when the page opens.
2026-07-07 01:20:21 -04:00
ZacharyZhang-NY 947cd8605b Center the CEO screen and meeting whiteboard between their windows
Both hung overlapping the right-hand window; each now sits centered in the
gap between the two window frames.
2026-07-07 00:46:20 -04:00
ZacharyZhang-NY 370582df90 Drop the Documents surface - Files already owns that ground
Documents duplicated what Files surfaces; the nav item, route, and page go.
Agent-authored documents keep flowing through the document service,
deliverable review, and search.
2026-07-07 00:46:20 -04:00
ZacharyZhang-NY 8fef89a22e Let a rotated cred.txt key win over the stale stored one
The credential file only seeded the database when it was empty, so once a
key was stored, rotating it in cred.txt changed nothing and Composio kept
rejecting the dead stored key with 401 - while the file held a freshly
generated, verified-working key. The file is now the source of truth
whenever it exists: a differing key replaces the stored one on resolution,
and packaged installs without the file keep managing the key in Settings.
Four resolution contract tests pin seed, rotation, settings-only, and
absent cases; the Connectors error line truncates instead of wrapping the
raw API response across the page.
2026-07-07 00:46:19 -04:00
ZacharyZhang-NY 62e663ed90 Open threads in place - the duplicate side panel is gone
The right-hand thread panel repeated exactly what the flat timeline already
showed. Opening a thread now focuses the center pane itself: back control,
board state, the root message with its replies, board intervention
controls, and a thread reply composer - one conversation surface, never
two. The release contract also catches up with the icon shipping inside
the package, a pin the icon commit should have updated.
2026-07-07 00:35:42 -04:00
ZacharyZhang-NY 3246ea5f98 Give AgentCompany its own face: the pixel office tower icon
A new icon generated for the brand: an isometric pixel-art office building
with warm lit windows and the app's violet-blue accent wall on deep indigo -
the office floor is the product's signature, now it is the identity too.
The generated artwork is rebuilt into a clean 1024 square master
(resources/icon.png, Linux and the packaged base), a Big Sur rounded
variant with transparent corners for macOS (icon-mac.png), and a
multi-size Windows icon.ico (16-256). electron-builder wires each platform
to its variant, the icon ships inside the package, and Windows/Linux
windows carry it at runtime including dev. Verified by extracting the icon
back out of a packaged AgentCompany.exe.
2026-07-07 00:15:12 -04:00
ZacharyZhang-NY 07d0b4587d Promote AgentCompany-New to the repository root and retire the old app
The legacy application - its src, tests, landing site, promo assets, docs,
release tooling, CI workflows, and root configs - leaves the tree; it stays
reachable in history. Everything under AgentCompany-New moves up unchanged:
same package name, so the production userData/database path is untouched,
and e2e/build scripts already resolved paths relative to the project. The
developer cred.txt stays gitignored at its new location. Full verify:ci
passes from the new root.
2026-07-07 00:04:13 -04:00
ZacharyZhang-NY 2350f744e3 Audit cleanup: shared tool-arg validation, no dead exports, 500-line ceiling
Deliverable and document tools move to agent-deliverable-tools, the three
argument validators deduplicate into agent-tool-args (they had grown three
copies across tool modules), and chat-helpers drops isRootMessage and
countMessagesIn, which lost their last callers in the conversation-list
rework. agent-tools lands at 404 lines; every source file is back under
the ceiling.
2026-07-06 23:52:26 -04:00
ZacharyZhang-NY d64cf22feb Cut Settings from six tabs to four and stop drowning it in chrome
General (identity, mode, workspaces), Providers, Skills, and Advanced
(Composio key, the operator request console, billing, migration) replace
the six-tab sprawl. Card-in-card nesting and every decorative subtitle are
gone; row actions - provider Check/Manage/Revoke, workspace Add, skill
Import, migration Report - reveal on hover or focus instead of shouting all
the time. The Composio panel loses its hardcoded org-wide toolkit grid,
which the Connectors grants model had already made dead weight, and keeps
only the API key. Fixing the flow also surfaced a real bug: provider policy
rows remounted on a snapshot-derived key, so any refresh mid-edit wiped the
operator's unsaved choices - rows now keep stable identity and edits
survive. E2e follows the new layout.
2026-07-06 23:48:31 -04:00
ZacharyZhang-NY 2f95fc2f2d Make AI Co-Founder mode actually review what the company ships
review_deliverables was written at onboarding and shown in Settings but
nothing ever consumed it - Co-Founder mode silently behaved like AI CEO
mode for output. Now every write_deliverable and create_document in a
review_deliverables org files a pending deliverable_review approval tied to
the file or document, and the tool tells the agent their work is queued for
board review; AI CEO mode keeps shipping without review, which is that
mode's contract. Kickoff and worker briefings also catch up with the
conversation model: managers brief each report in a direct message with one
company-wide post in #general, and workers raise blockers with their
manager over DM instead of flooding department channels. Three
execution-mode contract tests pin deliverable review, no-review autonomy,
and the hire-approval split.
2026-07-06 23:36:48 -04:00
ZacharyZhang-NY 6bf5b8afeb Split agent-tools below the 500-line ceiling
Connector grant tools move to agent-connector-tools and the send-message
presence narration to agent-message-presence; agent-tools keeps the tool
registry and dispatch. Pure movement, no behavior change - the messaging
and connector contract tests pin it.
2026-07-06 23:27:49 -04:00
ZacharyZhang-NY e9cd22e7f4 Replace Social with a Connectors control room
The Social surface gives way to Connectors: the searchable Composio catalog
(letter-glyph tiles - the CSP stays closed to remote images), one-click
connect that opens the authorization link in the browser and polls the
account until it turns active, and a Connected section where each toolkit
shows its status and a chip per agent that grants or revokes their access
on the spot. Route, nav label, glyph, and search targets follow the rename;
the social backend services remain for the domain while their page and e2e
steps retire in favor of connector coverage.
2026-07-06 23:24:01 -04:00
ZacharyZhang-NY fb72f1f29b Expose company connector plumbing to the renderer
A ComposioConnectionService owns the toolkit catalog (cursor-paged,
cached), managed auth-config reuse, connect-link initiation, and the local
connected-account mirror that agent runs read. Five IPC surfaces carry it
to the UI - list toolkits, connect a toolkit, refresh account statuses, and
employee-side grant/revoke - and the snapshot now includes
connectorAccounts and connectorGrants. The org API key resolves through one
choke point that seeds itself once from the developer cred.txt next to the
app when the database has none, so both the UI and agent runtime pick up
the key without manual setup.
2026-07-06 23:17:45 -04:00
ZacharyZhang-NY 66aae376c0 Let the CEO hand out connector toolkits agent by agent
Connections belong to the company - one Composio connected account per
toolkit, mirrored locally in connector_accounts - and access belongs to
individuals: a new agent_connector_grants table records which agent may use
which toolkit. Agent runs now load composio tools from the intersection of
active connections and that agent's grants, and tool execution re-checks the
grant server-side so an ungranted agent cannot call a connector tool it
heard about. Any agent can list_connectors to see what the company has
connected and who holds access; grant_connector/revoke_connector are
CEO-only. The Composio client speaks the v3 contract (user_id,
connected_account_id, toolkit catalog with cursor paging, managed auth
config creation, connect-link initiation). Covered by four grants contract
tests.
2026-07-06 23:13:03 -04:00
ZacharyZhang-NY 4775b23d94 Draw the sidebar with Reicon glyphs
Navigation icons now come from reicon-react (tree-shaken SVG components,
currentColor by default): Home, Briefcase, Users, ChatRoundDots, Send,
Folder, ShieldCheck, DocumentText2, Plug2, Buildings2, and Gear map to their
routes through one NavIcon component, so the glyph set lives in a single
place and NavSpec no longer carries per-item icon names.
2026-07-06 23:02:33 -04:00
ZacharyZhang-NY a11d2dfa07 Trim the sidebar to the surfaces that earn their place
Inbox, Knowledge, Meetings, and Sprints leave the navigation and their page
components go with them; the backend services and data they surfaced stay
intact for agents and automation. The secondary rail is now Documents,
Social, and Office.
2026-07-06 22:57:52 -04:00
ZacharyZhang-NY d528cd6f75 Turn the Messages rail into a real conversation list
Every channel and direct conversation is now its own row the way messengers
work: avatar or channel glyph, name, last-message preview, relative time,
and a true unread count from per-employee read state (the old badge showed
total message count). Rows sort by latest activity and the newest
conversation opens by default. Direct rows title themselves after the
counterpart resolved from memberships; agent-to-agent conversations the
board observes keep their two-name title, and opening one clears its unread
because read state is per-employee bookkeeping, not access control.
Conversation rows get their own .convo-item style instead of fighting the
sidebar's single-line nav-item rules.
2026-07-06 22:56:02 -04:00
ZacharyZhang-NY cab7b01831 Give every 1:1 its own direct conversation instead of piling into #general
Agents could only post to named public channels - the messaging tool even
excluded direct spaces - so assignments, reports, and questions all crowded
into general. Now ChatService.ensureDirectSpace finds or creates the private
two-member conversation for any agent/employee pair; send_message takes
to="Name" for 1:1 traffic (exactly one of to/channel), read_messages reads a
conversation by teammate name, and task assignments land in the manager's DM
with the assignee. In a direct conversation the counterpart agent wakes on
every message without needing an @mention - same social contract as any
messenger - still bounded by the autonomous-turn budget, and wake task
briefings tell agents to reply with to= in kind. Covered by six new
direct-message contract tests; the assignment-thread test now encodes the
DM routing contract.
2026-07-06 22:49:31 -04:00
ZacharyZhang-NY f13ef48a3e Stop the UI freeze: coalesce snapshot storms and bound chat rendering
Busy agents emitted a snapshot-changed broadcast per tool turn; every event
made the renderer reload the full snapshot while the main process re-read
whole audit tables synchronously, and ChatTimeline re-rendered every message
with per-row linear scans - quadratic work per keystroke of agent activity
until clicks stopped responding. Root fixes at each layer: all broadcasts
funnel through one 200ms-coalesced notifier (unit-tested), the renderer
reloads at most every 800ms with a trailing load, audit/access snapshot
reads use SQL limits instead of full-table scans, and the timeline renders
the latest 150 messages via O(n) lookup maps with a real show-earlier
control. cred.txt is now gitignored so the Composio key cannot leak.
2026-07-06 22:40:32 -04:00
ZacharyZhang-NY 538bf20057 Prove the populated floor end-to-end
The office e2e now also hires two agents through the real Team flow,
returns to the floor, clicks the first open desk through the same pure
floor-plan and camera math the app renders with, and asserts the right
agent's card opens - then captures a populated-floor screenshot for visual
review. Nav locators use exact accessible names so 'Chief Executive
Officer' cards cannot shadow the Office nav button.
2026-07-06 22:05:48 -04:00
ZacharyZhang-NY 574c7e0ec6 Bring the floor to life: coffee runs, snack breaks, restroom trips
Idle agents now live a little: after settling in they occasionally walk the
lane graph to the coffee machine, snack counter, or a restroom stall, dwell
there, and stroll back - carrying their coffee or snack to the desk for a
while. Working agents never leave, and an agent woken to work mid-break
abandons the trip and heads straight home. Randomness is injected so the
whole loop - trip, dwell, carry-back, interruption - is deterministic under
unit test, and a settle period keeps the floor calm right after it loads.
2026-07-06 22:02:35 -04:00
ZacharyZhang-NY e8c8414613 Open an agent profile card by clicking them on the floor
Canvas clicks hit-test against the exact positions the renderer draws -
frontmost person wins - and select the agent: a floating card in the app's
design language shows their name, title, department, level, live status, and
current task, with a selection ring under their feet. Escape, the close
button, or clicking empty floor dismisses it; hovering a person shows a
pointer cursor. The floor now seats only lifecycle-active agents, matching
how the backend wakes and assigns work. Covered by a hit-test unit test and
a dedicated office e2e that clicks the CEO through the real floor-plan math.
2026-07-06 21:58:35 -04:00