文件历史

27 次代码提交

作者 SHA1 备注 提交日期
Rohit C Prasad 6c2fb38d77 connectors: MCP-backed one-click with pinned tool allowlists — monday.com + jira
A descriptor can carry a vendor-hosted MCP server URL (mcp_url); its curated
tools are ConnectorToolDefs named mcp__<connector>__<vendor tool>, so Access
bullets, per-tool toggles, session gating, and read/write approval all ride
the existing machinery. Connect seeds the server config (include_tools = the
pin, re-derived at session build so stale config can only shrink the surface)
and runs the local DCR OAuth flow — no cloud sign-in, no vendor app, no broker.
Connector-backed servers are hidden from the Settings MCP tab; disconnect
forgets tokens + registration + config. jira keeps its manual token path (the
profile mode picks which tool set is live); monday.com is new and one-click
only, with a custom brand glyph. asana's pins ship dormant — their V2 server
rejects dynamic client registration, so its one-click waits on a broker-routed
callback. Also: catalog typeahead aliases for jira/monday/asana.
2026-07-20 12:36:33 -07:00
Rohit C Prasad cb0e216140 onboarding: benefit-row tools page with a band that never moves (UX-DECISIONS §41)
Step 2's card gallery becomes six benefit rows (one-line details) + one
combined grayed Google row; the pinned band flips from sign-in ask to green
congrats in place, rows grow Connect pills — zero layout shift at sign-in.
One footer button morphs quiet 'Continue without sign-in' → black Next;
static footnote. Modal 700→560px; the shared form's custom-endpoint
disclosure moves below the key-help line.
2026-07-19 18:48:25 -07:00
Rohit C Prasad d4e16da1aa settings: 3-tab IA + Models provider gallery (UX-DECISIONS §40)
Appearance renames to General and absorbs Files; Token savings moves under
Models. The onboarding provider gallery/key form is extracted to a shared
providers/ProviderSetup module rendered by both surfaces, with Settings-only
extras: last-used on cards, Remove key (new DELETE /v1/providers/{name}),
and a cross-provider composer-picker card.
2026-07-19 15:48:55 -07:00
Rohit C Prasad e9b8d6ec0c onboarding: provider gallery + two-state tools page (UX §39) 2026-07-18 20:52:12 -07:00
Rohit C Prasad 42c1710fa2 connectors: pre-connect detail page — about/access copy, tools disclosure (UX §38) 2026-07-18 19:34:30 -07:00
Rohit C Prasad 8704339d5b Fix five owner-reported UX issues: boot splash, sign-in latency, onboarding, drag-drop
- Boot: sidecar ships as a onedir bundle via the resources slot (onefile
  self-extraction cost ~7s of splash every launch; now ~0.5s warm); build
  scripts stage+sign the folder; splash wordmark aligned to the traffic
  lights; minimumSystemVersion 12.0 (whisper.cpp build floor).
- Cloud sign-in: connection restore runs in the background after the
  callback responds; GUI polls fast (500ms) while a sign-in is in flight.
- Onboarding: provider page keeps unsaved drafts across switches and shows
  the connected state on the form; tools page rebuilt to the owner design
  (value headline, Secure-by-design card, single primary action).
- Composer: OS file drags reach the existing drop handlers in the desktop
  shell (native drag-drop interception disabled + window drop guards).
2026-07-16 12:50:28 -07:00
Rohit C Prasad c1009b68ce voice input: survive the SIGNED build, keep the UI live, pin the composer contract
Review fixes: hardened-runtime signing needs com.apple.security.device.audio-input
for microphone capture — without it voice input works in dev and is denied by
macOS in the shipped app (Info.plist's usage string is only prompt text).
start_dictation becomes async + spawn_blocking: opening the input device blocks
on the one-time macOS permission dialog, which froze the UI from a sync command.
The model download gets 30s connect/read timeouts so a stalled connection errors
instead of hanging (cancel is only observed between reads). §37 wording now
matches the code (SHA-256; restart, not resume). New unit tests drive the
composer through a mocked desktop bridge: no mic in the browser build, muted
mic deep-links to Settings, record→stop inserts an editable draft with Send
protected, and a start failure surfaces without wedging the control.
2026-07-15 17:51:00 -07:00
Rohit P f27ead5fbb Add configurable local voice input 2026-07-15 16:42:48 -07:00
Rohit C Prasad e0f8bac9f1 Squash commit with multiple features and fixes.
Short list of changes -
- Automations quickstart
- Slack mentions router
- Live turns keep narration inside. Add commentary for tasks.
- Approvals card UI enhancements
- Newer models - Fable, Sol, Terra, etc added to list
2026-07-14 16:51:52 -07:00
Rohit C Prasad 4b5e07fb36 Fixes: permission-prompt hygiene, one-ask approvals, legible gates
Six fixes from the 2026-07-12 external bug-report doc:

- Agents get a folder-scope guardrail in the environment block (stay in
  the workspace + granted roots, request_directory otherwise, shell
  commands included) and the bundle gains Info.plist usage strings, so
  macOS folder/photo permission prompts stop appearing unexplained at
  moments the user can't map to any action.
- Answering a live approval no longer flashes the same request again:
  the resolve handlers optimistically drop the parked per-session Inbox
  mirror (it stayed 'pending' in the polled copy for up to a cycle and
  the dock slot fell through to it). Regression e2e fails pre-fix.
- Onboarding model step: Continue verifies automatically (enabled once
  the key fields are filled; 'Checking…'; failure stays with the error).
  Test remains an optional explicit check.
- Recipe step: the gated Create-automation button names its missing
  piece ('Pick a channel to post to first') instead of graying silently.
- Artifact 'Copy path' copies the absolute path (server now returns
  abs_path alongside the workspace-relative identifier).
- The session drawer's persona why-connect pane is hidden for now
  (SHOW_PERSONA_PANE flag; no persona mentions until relaunch).

tsc + 28 unit + 107 e2e + 708 pytest green.
2026-07-13 12:53:15 -07:00
Rohit C Prasad 01e831c1d5 Onboarding simplification pass (§24 revision)
- Provider key fields lose the storage-note help line (registry-level,
  so Settings/Models loses it too — manual territory, not UI).
- Any base_url on a keyed provider collapses behind 'Configure custom
  endpoint' — OpenAI's default-less endpoint was still visible on the
  first pass.
- Verify success moves onto the Test button ('Connected'); the status
  line keeps errors only.
- Done step: the specialist-gallery card and the per-session-scope line
  are hidden for now (gallery plumbing kept for its return).
- Modal height fixed at 700px across all three steps, sized to the
  tallest (recipe ~593px content, measured); steps are flex columns
  with bottom-pinned action rows; overflow scrolls inside the step.

141 provider pytest + tsc + 28 unit + 106 e2e green.
2026-07-13 12:52:55 -07:00
Rohit C Prasad 3049430984 One page shell; Inbox absorbs Messaging routing (§28)
Automations, Activity, and Inbox each had their own indentation and head
style, and inbox-delivery config hid under Connectors with the mirror
channel editable in two places.

- Every top-level page now uses the Connectors/Activity shell: centered
  column, PanelHead, cards. Automations drops the icon-title and the
  boxed banner; its list/detail/templates restyle onto the shell.
- Inbox gains page-level tabs: Pending (the queue, unchanged) and
  Configure — the former Messaging-routing page moved whole into
  InboxConfigure.tsx (mirror, DM route, subscriptions, Unrouted with
  the warning badge). Pending's routing line is read-only and links to
  Configure; the duplicate inline mirror editor is deleted. The mirror
  target and routing line show channel names when known.
- Connectors sub-nav shrinks to Connectors and MCP servers.
- Legacy page-shell CSS removed (page-col, sa-view-*, sched-banner,
  tmpl-card family, sa-back, new-action).
- e2e: inbox routing test rewritten against the Configure tab;
  sidebar-account's Unrouted-location test follows the move.

tsc + 28 unit + 106 e2e green.
2026-07-13 12:52:53 -07:00
Rohit C Prasad 6c238b1ca0 Recipe step: channel shows its name; cadence is day x time (§24 revision)
ChannelPicker separates display from value: at rest the box shows
#channel-name when known (from a pick, the recent list, or a roster
hit); focusing flips to the raw address for editing, the tooltip always
carries it, and a pick commits by blurring. The stored target and the
automation instructions keep the raw address. Applies to both surfaces
(onboarding recipe + session channel subscriptions); the consent line
names the channel too.

The fixed day+time cadence pairs were limiting: 'When' is now a day
picker (Mon-Sun, Weekdays, Every day) beside a free time field, with
the cron assembled from the two. Digest titles and instructions are
cadence-neutral ('since the last digest' instead of 'the past week').

106 e2e / 28 unit / tsc green.
2026-07-13 12:51:20 -07:00
Rohit C Prasad 62b9402b67 Onboarding step 1: welcome, real picker, fewer decisions (§24 revision)
Owner walkthrough feedback on the packaged app. The step now opens
'Welcome to OpenCoworker' with connect-a-model as the sub-line. The
native <select>s are gone: the provider picker is the same SelectMenu
the Settings Models page uses (sectioned Ready to use / Needs setup,
key-set dots), so onboarding and Settings are one control.

The default-model dropdown is dropped — the model is chosen per session
anyway, and the old select never persisted its choice; a single line
now points at Settings > Models. Optional endpoints (a base_url with a
default on a keyed provider) collapse behind 'Configure custom
endpoint'; keyless providers keep the field visible since the endpoint
is the connection. Test moves into the action row beside Continue, with
a fixed-height status line above so verify results never reflow the
form.

105 e2e / 28 unit / tsc green.
2026-07-13 12:51:20 -07:00
Rohit C Prasad 53f2933f93 Session-settings row docks into the topbar (§22/§23 amendment)
One bar instead of two strips: the row's icon + glance move into the
glass bar's left region, which sat empty with the nav expanded, and the
standalone strip under the bar is deleted (~36px returned to the
conversation). The §23 contract is untouched — rest = quiet icon,
hover/focus = glance with the same anti-flicker delay (the bar is
fixed-height, so zero-reflow now holds by construction), click = the
Session settings drawer; every glance element still deep-links into its
drawer section.

Expanded nav: the settings icon is the first element after the panel
edge. Collapsed: it follows the [sidebar][+][search] cluster. Clicks in
the docked row stop propagation so they never start a window drag.

No test changes required: 105 e2e / 28 unit / tsc green as-is.
2026-07-13 12:49:59 -07:00
Rohit C Prasad 88476bcf58 Session topbar: drop the conversation menu, go edgeless; mode chip names its choice (§22 amendments)
The topbar's ⋮ menu (pin/rename/archive) was a strict subset of the nav
row's hover cluster, so it goes; the title stays — with the sidebar
collapsed it is the only session identifier, and the facts subtitle
orphans without it. The bar itself loses its bottom border and switches
to a paper-tinted blur: invisible over the flat background at rest, a
frost only when the transcript actually scrolls under it.

In the composer, the Mode trigger drops its pill border and shows the
chosen mode ('Ask for approval ⌄') instead of the generic 'Mode ⌄';
its accessible name stays 'Mode' so assistive tech and tests see a
stable control.

Suites: 105 e2e / 28 unit / tsc clean.
2026-07-13 12:49:06 -07:00
Rohit C Prasad c938ffa017 Start screen: template tasks carry their own setup (UX-DECISIONS §27)
The fresh-session empty state becomes exactly three concrete template
tasks and nothing else: analyze a directory (inline folder share, then
prefill), a HubSpot leads report, and a weekly GitHub-to-Slack progress
report. No leading icon tiles — connector dots move to the sub-line
(brand color = live for this session, grayscale = not), and sub-line
copy always describes the task's outcome, never connection state.

Ready rows reveal 'Start →' on hover and prefill the composer with the
template stem; gated rows keep 'Configure ›' visible at rest and open
the Session settings drawer (§23) with no second setup surface. The
'Set me up (optional)' list is removed — setup rides the task that
needs it. Rows get a ~300ms staggered entrance (reduced-motion safe).

Also swaps the ✳ brand mark for ✦ app-wide (boot screen, folder gate,
both greetings) — the old glyph read as another product's logo.

Three new e2e specs cover the gated/ready/folder contracts; suites at
105 e2e / 28 unit / tsc clean.
2026-07-13 12:45:12 -07:00
Rohit C Prasad f7d83304b3 UX-DECISIONS §26: sidebar bottom becomes one account row
Account anchor with cloud sign-in status and a state-driven inbox chip
(sticky unlock, accent count when pending, auth-independent); menu holds
Inbox, Connectors (renamed from Integrations), Settings, Automations,
Activity, sign out. Dead-letter page dissolves into Messaging routing as
Unrouted; audit log keeps the Activity name. Supersedes the §12 bottom
cluster.
2026-07-13 12:41:57 -07:00
Rohit C Prasad fff5be1a4a UX-DECISIONS §22: topbar drawer opener dropped at visual review
The sub-header row owns the Session settings drawer; the topbar keeps
only the panel toggle, re-glyphed to mirror the left nav's sidebar
icon.
2026-07-13 12:41:02 -07:00
Rohit C Prasad 572442d373 UX-DECISIONS §25: standing scoped approvals for automations
Tool+target+task rules stored on the ScheduledTask record, minted only
on two human surfaces (creation consent card, run card Allow-every-
time); reads are disclosure, writes are grants; never for exec/
destructive tools; additive over the run's permission mode; task-page
revocation. Unblocks the §24 onboarding build.
2026-07-13 12:41:02 -07:00
Rohit C Prasad f36808919b UX-DECISIONS §24: first-run onboarding (model, recipe tabs, tips)
Three steps, only the model step gates: per-provider connect fields +
curated default-model pick; role tabs (Engineering/Sales/Everyday) each
assembling a digest recipe after one lazy cloud sign-in; recap +
specialist tip + a start-working CTA that opens the first session with
its session-settings panel. Build blocked on the standing-scoped-
approvals design (ledger UX-005).
2026-07-13 12:41:02 -07:00
Rohit C Prasad 84fa414270 UX-DECISIONS §22/§23: session screen cleanup + session settings row
§22 — session screen sheds chrome: contextual top-left cluster
(sidebar/new/search, collapsed-sidebar only), centered title with a
facts subtitle replacing the locked-model pill and persona button,
composer reduced to attach/Mode/send with the Unattended toggle folded
into the Mode menu, model chip on fresh sessions only.

§23 — SourcesBar becomes the session-settings row: rest = one icon,
hover/focus = glance (color icons connected, grayscale recommended,
folder count, Configure), click = drawer renamed Session settings with
a working-directories section. §3 marked superseded in place.

Owner-approved via the UX ledger (ocw-context/docs/ux-improvements,
UX-002/UX-003); mocks referenced from each section.
2026-07-13 12:41:02 -07:00
Rohit C Prasad 5f799bbece Spec: Google Docs & Sheets connector (by-URL, tiered Sheets writes) 2026-07-13 12:31:22 -07:00
Rohit C Prasad 479db317b8 Generic multi-account layer for connectors (batch-2 spec + step 0)
Slack/Gmail/Calendar/HubSpot each grew a bespoke accounts module; this
is the same proven shape parameterized by connector: profiles at
<name>:account:<id>, pointer-only :default, lazy legacy migration. A
descriptor opts in via account_field (creds field or @identity). Connect
adds accounts instead of overwriting, connector_list grows a generic
accounts branch, and /v1/connectors/{name}/accounts/{id}/disconnect|default
routes cover every account-patterned connector. Spec for the batch in
docs/CONNECTORS-BATCH2-SPEC.md.
2026-07-13 12:31:22 -07:00
Rohit C Prasad d31b40f4b6 Connectors redesign mock + UX decision §21
Static mock (ui-mocks/connectors-redesign.html) for the connectors rework:
connected-first list with health chips, per-connector detail subpages under
Connectors (breadcrumb, no sub-nav items), System-Settings visual grammar,
multi-account pages for Slack/Gmail/HubSpot/Teams with Default badges,
collapsed Tools disclosure everywhere, add-connection via a header-button
modal (One click | Manual pills; modal only for multi-mode connectors),
desktop-enforced privacy filters (Gmail never-show senders/labels, HubSpot
hidden fields + read-only consent), and the corrected Teams consent model
(self-serve install / team-owner RSC / org-block handled by Teams itself).

UX-DECISIONS §21 records the decisions and the invariant 'cloud knows
routing; the desktop knows content and policy'; §19's config surface is
noted as superseded by the detail subpage.
2026-07-13 12:21:10 -07:00
Rohit C Prasad abb5bfb0f4 Add Email (IMAP/SMTP) connector with app-password auth
A new 'email' connector covering Gmail, iCloud, Fastmail, and custom IMAP
servers: the user enters an address + app password and servers are inferred
from the address domain, with advanced host/port fields for other providers.
Setup is ~2 minutes for Gmail (app password) versus the Google Cloud OAuth
dance the existing gmail connector requires.

Implementation is stdlib-only (imaplib/smtplib/email), one fresh connection
per tool call, factories injectable for tests. Five tools: list folders,
search, read, download attachment, send. All mailbox reads use read-only
SELECT + PEEK fetches so unread flags never flip; send and attachment
download are approval-gated; no delete/move/flag tools in v1. Send is
single-shot SMTP (no APPEND-to-Sent) so a post-delivery failure can never
bait a retry into double-sending. Replies fetch the original's Message-ID
to set In-Reply-To/References and reuse the subject.

make_integration_tools gains a roots parameter: attachment downloads land
in the session's primary scratch dir and outgoing attachment paths must
resolve inside a granted root. Spec in platform/docs/email-connector-spec.md.
2026-06-12 02:33:06 -07:00
Rohit C Prasad 3a9a1de0eb Agentic Helper for daily tasks
An agent harness built on aisuite's agent framework. Adds a coworker engine
with pluggable connectors (browser automation, integration tools), session
management, audit logging, and a permissions model, alongside a desktop GUI
surface (Tauri + React) and a multi-provider model layer with Ollama support.

Co-authored-by: Devika <dr.drp8226@gmail.com>
2026-06-08 20:25:00 -07:00