文件历史

259 次代码提交

作者 SHA1 备注 提交日期
Rohit C Prasad 65338a29e2 automations: sidebar nav row + Scheduled band with unseen-run badges; flat Recent default 2026-07-20 18:44:50 -07:00
Rohit C Prasad d6c993165d providers: retry max_tokens as max_completion_tokens when the server rejects it; log swallowed autotitle failures 2026-07-20 18:44:42 -07:00
Rohit C Prasad 378a500137 mcp: never start an oauth flow at turn start; failed one-click removes its seeded config 2026-07-20 18:44:33 -07:00
Rohit C Prasad 32d20503de gui: sidebar row kebab menu; connector picker full list on focus; fix false cloud sign-in ask in rail 2026-07-20 16:43:25 -07:00
Rohit C Prasad 2cce4ae1bb gui: pin viewport when scrolled up mid-stream; hover copy + timestamps; session auto-titles 2026-07-20 16:43:25 -07:00
Rohit C Prasad 78d05713ca desktop: update card bottom-left, 30-min re-check, background pre-download 2026-07-20 16:43:25 -07:00
Rohit C Prasad e9bc1c2fc7 packaging: fix CI release builds — import signing cert into a keychain, map notary env, pass updater overlay as a file
Lint / lint (push) Has been cancelled
Release / build (macos-latest, macos-arm64) (push) Has been cancelled
Release / build (windows-latest, windows) (push) Has been cancelled
Lint / build_and_test (3.10) (push) Has been cancelled
Lint / build_and_test (3.11) (push) Has been cancelled
Lint / build_and_test (3.12) (push) Has been cancelled
Release / release (push) Has been cancelled
2026-07-20 13:00:38 -07:00
Rohit C Prasad 5ce8108a44 Prepare app release 0.1.3: version bump 2026-07-20 12:54:40 -07:00
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 Prasad 7c824c2cc9 Merge pull request #376 from andrewyng/rpOutlookCalendarJul19
OpenWorker: Support Outlook calendar
2026-07-19 22:02:25 -07:00
Rohit C Prasad 90e63daa6f lint: black formatting on the new outlook test 2026-07-19 20:54:25 -07:00
Rohit C Prasad 382d4b4716 outlook: full calendar surface — windowed event list, richer create, update/delete/respond tools
- outlook_list_events now uses Graph calendarView (recurrences expanded,
  ordered by start) with a default now→+7d window and optional start/end
- outlook_create_event gains attendees, location, and a teams_meeting flag
- new tools: outlook_update_event (PATCH, only provided fields),
  outlook_delete_event, outlook_respond_event (accept/decline/tentative)
- connector copy now covers calendar (blurb, About, Access bullets, onboarding row)
- descriptors gain an aliases field surfaced in /v1/connectors; the Access
  catalog typeahead matches on it (searching "calendar" finds Outlook)
2026-07-19 20:50:33 -07:00
Rohit C Prasad c9bde9563c MCP OAuth: browser sign-in for remote servers, Granola preset
OAuth 2.1 + PKCE + Dynamic Client Registration via the SDK's client
provider; tokens in the SecretStore, loopback callback on the sidecar.
MCP tab gets sign-in/out states and a curated Granola quick-add.
2026-07-19 19:56:10 -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 ebfab2bf9b onboarding: fix key state-restore; static Coming soon labels; attio evens the grid
The post-Test auto-return stashed the just-saved key via a stale closure, so
revisiting a connected provider restored the plaintext key instead of the
masked placeholder + saved pill. Coming-soon cards get a static status line
(hover-only read as broken); attio joins the one-click gallery so the grayed
Google pair sits together on an even last row.
2026-07-19 17:41:56 -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 97bbdc7b75 gui: clear the collapsed-nav reveal strip; launch-flag Personas
Settings/Connectors sub-nav headers sat under the floating reveal button
(and traffic lights in the overlay build) when the sidebar was collapsed —
collapsed state now pads the sub-nav below that strip. Personas management
(Settings tab + Manage personas… menu entry) hides behind a launch flag,
default off; e2e keeps the flows covered via the localStorage override.
2026-07-19 15:10:00 -07:00
Rohit C Prasad efb0701edf connectors: wire outlook to the managed microsoft OAuth path
One-click connect failed with "outlook has no managed OAuth path" — the
connector→provider map never got an outlook entry, though the descriptor,
broker provider, and scopes were all ready. Guard test now asserts every
managed connector has a mapping.
2026-07-19 14:56:15 -07:00
Rohit C Prasad e690500063 lint: black formatting 2026-07-18 22:13:11 -07:00
Rohit C Prasad 83d9c7488d dark mode: connector badges on light plates; near-black bare marks lightened 2026-07-18 20:59:26 -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 867ddd9e23 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	platform/coworker/connectors/descriptors.py
2026-07-18 15:38:57 -07:00
Rohit C Prasad 5ccc06f9b6 outlook: managed multi-account wiring (pre-merge snapshot with batch-3 dupes) 2026-07-18 15:37:43 -07:00
Rohit C Prasad 0f514d34fb Rebrand user-facing surfaces to OpenWorker
App name, bundle identifier (com.openworker.desktop), publisher, updater
endpoint + release artifact names, DMG background art, GUI/server copy,
scratch dir default, README + quickstart. Auth0 tenant domain and API
audience keep their registered legacy identifiers on purpose; internal
ids (ocw event names, env vars, relay stage) are unchanged.
2026-07-17 13:56:06 -07:00
Rohit Prasad aae02e7c91 Merge pull request #370 from andrewyng/rpPdfAttach
OCW - PDF attachments: native support + local fallback
2026-07-17 13:54:52 -07:00
Rohit C Prasad 1bee0fd68a Restore upstream formatting on four untouched files
A stale local formatter downgraded them; content unchanged.
2026-07-17 13:49:54 -07:00
Rohit C Prasad a8b8732a7f Support PDF attachments end-to-end
PDFs attach as OpenAI file parts; Anthropic/Gemini convert to their
native blocks. Models without native PDF support get a local fallback
at send time — pypdf text extraction or pypdfium2 page images, chosen
in Settings -> Token savings. Attach-time page/size thresholds
(default 20 pages / 10 MB) reject oversized PDFs with a notice.
2026-07-17 13:38:38 -07:00
Rohit Prasad 2fec133318 Merge pull request #365 from andrewyng/rpConnectorBatch
OCW Connectors: real brand logos + six new connectors
2026-07-17 10:31:06 -07:00
Rohit C Prasad 804d183d7f Add desktop auto-update
Updater plugin with signed artifacts (minisign), latest.json composed by
release CI, update prompt in-app. Endpoints: download.opencoworker.app
with GitHub Releases fallback. Version 0.1.2.
2026-07-16 22:40:50 -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 f1f614ddf6 connectors: real brand logos and add DocuSign, ClickUp, Google Drive, Canva, Figma, Close (+ Descript/Clay placeholders)
Replace the hand-drawn connector glyphs with official monochrome brand marks
(via simple-icons; Slack/Salesforce/Outlook/Canva vendored as path data), and
backfill logo + brand_color on every descriptor. Add six new connectors with
tools (reads never gate, writes require approval) plus two catalog placeholders.
2026-07-16 12:14:49 -07:00
Rohit C Prasad 9f77bbf208 macOS bundle: declare minimumSystemVersion 12.0
Without it Tauri defaults the release deployment target to 10.13, and
whisper.cpp (voice input) uses std::filesystem, available only from
10.15 — so release DMG builds fail while cargo check/test and tauri dev
(no target pinning) all pass. 12.0 was already the honest floor: the
app ships Apple-Silicon-only and §37's compatibility gate requires
macOS 12+ for voice. NB when changing this value: cmake caches the old
target — purge target/release/build/whisper-rs-sys-* or the build keeps
failing after the fix.
2026-07-15 18:15:50 -07:00
Rohit C Prasad 2fd27b7469 build_dmg: OCW_SKIP_NOTARIZE=1 for fast signed local builds
Notarization adds a minutes-long round-trip that local iteration doesn't
need — locally built DMGs carry no quarantine flag, so Gatekeeper never
prompts on the building machine. The flag signs (seconds) and skips
submit/staple with a do-not-distribute banner; unset identity remains the
fully-unsigned path.
2026-07-15 17:56:00 -07:00
Rohit C Prasad c8d72f86ad build_dmg: finish releases Gatekeeper-clean (sign container, notarize, staple)
Signing alone still leaves downloads facing macOS's 'Move to Trash' malware
dialog — notarization is what removes it (learned live 2026-07-15; spctl
rejected a signed-but-unstapled DMG). When APPLE_SIGNING_IDENTITY is set,
step 5 now signs the .dmg container, submits via notarytool with App Store
Connect API-key vars (exported, $OCW_NOTARY_ENV, or .ocw-notary.env one
directory above the repo — shared across clones/worktrees, never committed),
staples, and runs the same spctl assessment Gatekeeper runs on download,
failing the build rather than shipping the dialog. Missing vars degrade to
a signed DMG with a loud warning; unsigned dev builds are untouched.
2026-07-15 17:56:00 -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 P ec2d3d31cc Merge branch 'main' of https://github.com/andrewyng/aisuite into feature/local-stt-composer 2026-07-15 14:50:00 -07:00
Rohit C Prasad 35556687cc approval card: clamp long single-paragraph message previews
send_message text rendered as an unclamped quote and PreviewBlock clamped
by LINES only, so a one-paragraph Slack digest (no newlines) ballooned the
card to full-transcript height (owner repro 2026-07-15). Previews now clamp
by characters too (5 lines / 420 chars, expandable in place); short
one-liners keep the inline quote. send_file comments get the same treatment.
2026-07-15 14:14:47 -07:00
Rohit C Prasad bcd0deda98 docs: one-command dev bootstrap for fresh checkouts
A clean clone had no runnable backend and no instructions to create one —
the GUI README assumed platform/.venv existed and still described the
desktop shell as future work. Add setup_dev_env.sh (venv + editable
coworker install + the aisuite .pth this checkout's import wiring needs,
verified by booting the server to a 200 health check) and rewrite the
README's from-source flows: browser two-terminal dev and tauri dev, which
already falls back to the venv server when no packaged sidecar exists.
2026-07-15 14:10:16 -07:00
Rohit P f6e3dca7e3 Add local composer dictation 2026-07-15 12:12:06 -07:00
Rohit C Prasad 9553e0c0c1 Apply black formatting repo-wide 2026-07-14 22:11:09 -07:00
Rohit C Prasad c362ed928a slack: attribute outbound posts to the workspace's installer (P1)
Several people can run the app into one channel and every post arrives as
the same bot. The managed install already records WHO connected (Slack's
authed_user): store that member id on the slack:team profile, resolve the
display name once via users.info (users:read, granted since wave 1),
cache it, and prefix send_message text and send_file comments with
"[<name>] ". Truthfulness rules: manual Socket-Mode installs have no
authed_user so their posts stay bare; DMs skip the prefix; resolution
failure degrades to no prefix and never blocks a send. P2 (native
username override via chat:write.customize) replaces the text prefix.
2026-07-14 21:05:51 -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 c77c8f9a90 GitHub connect: offer linking an existing installation (flow=authorize)
The App install page dead-ends when the App is already installed on the
user's account: GitHub shows 'Configure' and never fires our callback,
so the desktop waits forever (owner hit this on a fresh state dir —
reinstalls and second machines will hit it routinely). The broker and
sidecar already support the authorize flow for exactly this (plain
OAuth; the broker lists the user's installations and posts the same
loopback payload as a fresh install) — it just wasn't reachable from
the GUI.

connectManaged() now passes flow through; the Add-installation modal
and the onboarding GitHub row gain an 'Already installed? Link it'
secondary action. New e2e pins the modal link to flow=authorize.

106 e2e / 28 unit / tsc green.
2026-07-13 12:51:20 -07:00
Rohit C Prasad 68b58222ed Sign-in: token exchange must present the same redirect_uri as authorize
The broker-bounce change (eda23c9, 07-09) pointed the authorize leg's
redirect_uri at the broker's stable callback but left the token
exchange sending the old loopback URI. RFC 6749 requires the exchange
redirect_uri to byte-match the authorize one, so the auth server
rejected every exchange — all cloud sign-ins since 07-09 failed with
'token exchange failed' after a successful browser leg (caught by the
owner's fresh-install walkthrough; also explains the earlier onboarding
Slack-connect failure, which begins with sign-in).

The unit test now derives the redirect_uri from begin_login's authorize
URL and pins the exchange to it — the old test mocked the POST without
asserting redirect_uri, which is exactly how this slipped.

708 pytest green.
2026-07-13 12:51:20 -07:00