Commit Graph
80 Commits
Author SHA1 Message Date
Rohit C Prasad 87b4eebc15 Merge main into feature/permission-modes
Union resolutions in the four files both sides touched; approval-card sizes settle on the type-scale tokens.
2026-08-23 01:01:57 -07:00
Devika Verma 0b5294ac41 Merge branch 'main' of https://github.com/andrewyng/openworker into feature/permission-modes
# Conflicts:
#	coworker/agent.py
#	coworker/connectors/tool_defs.py
#	coworker/engine.py
#	coworker/permissions.py
#	coworker/personas/manifest.py
#	coworker/server/manager.py
#	surfaces/gui/src/App.tsx
#	surfaces/gui/src/types.ts
#	tests/test_connectors.py
#	tests/test_send_target_resolution.py
2026-08-22 08:11:32 +05:30
Rohit C Prasad e247997a14 MCP add flow: poll while a probe is in flight; name prefills from the URL
The Testing chip froze forever on guarded servers — the page never refetched
after the probe settled server-side. Opener renamed to Add custom MCP server.
2026-08-21 18:25:57 -07:00
Rohit C Prasad 2733eb84ca Legacy MCP notices collapse too: server name recovered from the persisted text 2026-08-21 17:51:23 -07:00
Devika Verma 805d002031 Subscription provider: settle on the ChatGPT subscription title 2026-08-21 17:36:22 -07:00
Devika Verma 0305a3ee80 Subscription provider: titled Codex subscription, wears the vendor mark 2026-08-21 17:28:43 -07:00
Rohit C Prasad 6bf6018a15 MCP failure notice: one quiet line + Details + Open Connectors; stable dedupe
Per-process noise (0x addresses, pids) no longer defeats the change-detection,
so a relaunch stops re-stamping the same complaint into the session.
2026-08-21 17:18:48 -07:00
Devika Verma 19561abeb6 Subscription catalog: add the 5.6 tiers (Sol/Terra/Luna); Sol becomes the recommended model 2026-08-21 16:10:51 -07:00
Devika Verma 91b4ad0702 Settings ▸ Models: sign-in pane for the subscription provider
OAuth providers render connect/sign-out instead of a key form; card shows account.
Fixture rows + flow mock; e2e covers sign-in, sign-out, gallery state.
2026-08-21 15:23:15 -07:00
Devika Verma bd202ad125 e2e: seedSessionMessages seam + replayed-transcript specs
Seeds rich history per session so the reopen path is testable.
Covers replayed tool groups, filter counts, connector cards, tail-error Retry.
2026-08-21 15:17:14 -07:00
Rohit C Prasad e7bd499f40 Right rail: hidden by default, toggle persists per-device
Deep links (artifact/board chips, Access) force-show transiently without touching the pref.
Topbar Artifacts chip drops its cowork-only gate (artifacts are universal now).
2026-08-21 13:59:38 -07:00
Rohit C Prasad fd1eb65547 Viewer header: breadcrumb back, labeled action menu, close; Access footer one row (UX-038)
Copy contents is the primary copy; path/open/reveal live in the labeled menu.
Access footer: '+ Add a source · Manage →'; mute explainer moves to the toggle tooltip.
2026-08-21 13:35:22 -07:00
Rohit C Prasad 4eefc09a84 Sidebar expand sticks while the artifact viewer is open
Auto-collapse is edge-triggered now: stable callback identity + the rail notifies
only on real open/close transitions, so a manual toggle is never fought.
2026-08-21 12:52:00 -07:00
Rohit C Prasad 76e7276f7a Merge rp/mcp-add-test: custom MCP add/test flow, single Connectors page 2026-08-21 10:28:47 -07:00
Rohit C Prasad d88a196172 Right drawer: retire the More fold — all sections list flat, collapsed by default 2026-08-21 10:14:01 -07:00
Rohit C Prasad 4406068629 Files explorer over session roots (UX-037)
More fold gains a Files section listing workspace/scratch/granted roots.
Roots open in the artifact viewer (Files breadcrumb); folder click-through was already there.
2026-08-20 21:56:09 -07:00
Rohit C Prasad 65c568cd44 Universal scratch: every session gets a scratch root; Artifacts panel everywhere
Gated sessions run workspace+scratch dual-root; artifact listing scans scratch only.
Artifact chips resolve across workspace, scratch, and granted roots; request_directory registers for all sessions.
2026-08-20 21:28:52 -07:00
Rohit C Prasad 1299760400 Personas: requires_folder/subagents/scheduling traits replace family and the workspace enum
Manifest keeps a legacy family shim; telemetry wire fields unchanged.
No behavior change; spec in ocw-context/docs/workspace-scratch-design.md.
2026-08-20 21:19:56 -07:00
Rohit C Prasad 9735d0c6e7 e2e: repair specs broken by the shipping lineup
Folder-gate and picker specs drive Security Coworker (Code ships disabled).
Automations detail opens via the nav row (account-menu entry removed).
2026-08-20 21:19:50 -07:00
Rohit C Prasad f25fbd4036 Rail: solo sessions get Progress back (empty team object misread as lead); drop Gallery entry point 2026-08-20 18:44:35 -07:00
Rohit C Prasad 78b0f488c4 Coworkers pages redesigned: grouped list, one toggle per row, detail overhaul
List groups General/Security with quiet disclosures for unshipped coworkers and the installer (native pickers for folder/zip); gallery is internal-build only.
Detail: markdown About with bundle screenshot carousel, one Connectors table (Status/Enable), tool calls collapsed under Advanced, management controls moved here.
2026-08-20 18:17:10 -07:00
Rohit C Prasad ff78ea9f35 Chrome cleanup: menu dedup, implicit cloud label, Context optimization section
Account menu drops Automations (sidebar nav has it) and the OpenWorker Cloud suffix.
Token savings + compaction move from Models to a new Settings - Context optimization tab.
Coworkers page loses its duplicate intro line.
2026-08-20 16:33:36 -07:00
Rohit C Prasad 2414b4a215 Retire MCP tab: custom servers live on the Connectors page
Custom - MCP group after Connected; Add custom server modal at top; per-server detail subpage with Test.
Status never claims connected for stdio: Live / Ready + persisted tested-at / Not tested / Needs sign-in / Error.
2026-08-20 16:22:41 -07:00
Rohit C Prasad 5ebaa376d7 Add MCP server flow: Remote URL + JSON tabs, Test connection
Explicit connect reports stderr tails; a 401 on an anonymous http probe becomes needs-sign-in with a one-click OAuth switch.
Test button probes any enabled server row without opening a session.
2026-08-20 13:50:13 -07:00
Devika Verma 9ac59aafe3 Merge branch 'main' of https://github.com/andrewyng/openworker into feature/permission-modes
# Conflicts:
#	tests/test_openai_responses.py
2026-08-20 09:01:15 +05:30
Rohit C Prasad ce3353dab3 GUI: right-drawer restructure — Team panel, three primaries + More, board chip
Team members move from sidebar to a drawer panel; RECENT keeps one entry per team.
All sections collapsed by default; Journal/Access fold behind More; leads drop Progress.
Lead mentions the board once via a [.](board:) chip that opens the drawer.
2026-08-17 18:44:39 -07:00
Rohit C Prasad aafb4f4291 Feed model: interest follows the assignment relation; notes are pure appends
Worker delivery is now a read-time feed over its slice (assigned ∪ filed) — send-backs, comment answers, reassignments, cancels, and acceptance all arrive through one relation; per-event recipient addressing retired.
Reassignment delivers before interest ends; a new assignee replays the item's story. Detail pane gains Add a note (never changes state); external pending/consume become space-scoped feed calls.
2026-08-17 16:05:16 -07:00
Rohit C Prasad f26e01c1b6 Address action-demanding transitions to the assignee; neutral verdict label
Send-back/unblock/cancel by someone else now land in the worker's queue (only cancel did — send-backs woke nobody); done stays unaddressed.
The Request changes button drops the send-to-X phrasing — it's a board write, delivery is the queue's job.
2026-08-17 15:37:09 -07:00
Rohit C Prasad b952ed1e1e Board overlay rework: raw-state list + item detail with event timeline
Sections are the store's states (In progress / Awaiting review / Queued), no row buttons or badges; blocked rows carry the blocker fact.
Detail pane merges the item's events into one timeline (filed/assigned/moves/comments/attachments), links the assignee to its worker session, and hosts the verdicts: Mark done / Request changes… (returns to the worker with the comment).
2026-08-17 14:55:40 -07:00
Rohit C Prasad b2418d5a30 Drill-round polish: calm rail, digest diet, gate replies, criteria clamp, composer fix
Rail shows active work only (finished behind a count); wake digests clamp hand-offs and ride a collapsed BoardWakeCard.
Typing while a proposal gate is pending resolves it as decline-with-feedback; essay criteria clamp in the gate card.
Composer autogrow now counts padding in its cap (first line no longer clips); lead/worker prompts push tight criteria and hand-offs.
2026-08-17 08:54:53 -07:00
Rohit C Prasad 2e18d9d5c4 Lead cadence: mandatory check-in timer, harness backstop, sleeping strip
The lead must end active turns with a sleep_for (3-5m, stretch when quiet); a 10-minute backstop wakes a lead that forgot while work is in flight.
Sleeping sessions show a strip with the next wake time and an Ask-for-a-status action — a scheduled agent never reads as a dead one.
2026-08-16 17:00:51 -07:00
Rohit C Prasad cf436d1069 # team chat: own chat store, named workers, mention wakes, cancel interrupt (OPE-99)
ChatStore = groups + append-only messages + per-member cursors; agent posts wake mentions only, user posts wake everyone; post_chat(record_on_item) also lands the answer as an item comment.
Leads name workers (the callname is the handle everywhere); worker digests auto-carry the roster; gate checkbox is the user's call; canceling an assigned item now interrupts an in-flight worker.
2026-08-16 16:22:23 -07:00
Rohit C Prasad 844a6510a2 Dogfood round 1: propose_work_items gate, team-tie survives turn saves, board wakes render as cards
Leads lose propose_plan (trait-derived exclusion — plan mode is meaningless without execution tools) and gain propose_work_items: mode-independent decomposition whose approval creates the items.
Team field moves off the turn-save upsert to a dedicated setter (workers detached from their lead after one turn); board deliveries carry a MessageSource sidecar; test-worker prefers project-local tool installs.
2026-08-16 15:43:06 -07:00
Rohit C Prasad 13f9c0b6c0 SW team: staffing gate UI, expandable team entry, four team personas (OPE-97/98)
swe-lead (minimal tools, coordination verbs) + swe/design/test workers with the shared worker contract; workers never surface in the picker — they're staffed, not started.
Staffing card rides the approval slot; workers nest under the lead's ONE expandable RECENT entry in both sidebar layouts.
2026-08-16 08:53:26 -07:00
Rohit C Prasad fc24b667ed Drop the proposed state: boards hold only accepted work
Plan proposals live in the conversation (plan-approval flow); items are created open/unassigned and work starts at assignment — the granted, revocable authority.
Also closes a verify gap: tail truncation is now caught against the stored head hash.
2026-08-16 08:07:10 -07:00
Rohit C Prasad d8e4fc73c0 Rail collapses proposed items to one awaiting-approval line
The plan gate is the single full rendering of the proposal; no double listing.
2026-08-16 07:50:02 -07:00
Rohit C Prasad 4c1b542370 Board UI: rail section, plan gate, expanded overlay, journal cases (OPE-96)
Board+journal endpoints act as the user; sessions get lead verbs behind OPENWORKER_TEAM_BOARD=1 until the team trait lands.
Rail hides all team chrome until the workspace has items; expand opens a full-width state-column board.
2026-08-16 07:11:52 -07:00
Rohit C Prasad 8e2058d2a9 Artifact chip opens the viewer first-click even when the rail is hidden
The select-listener was gated on rail visibility, so the chip's one event only
unhid an empty rail; now it listens whenever a session is active.
2026-08-15 14:11:16 -07:00
Rohit C Prasad 78fc2bd8f7 Artifact viewer: airtight sandbox for agent HTML + Open in browser (OPE-91)
Drop allow-same-origin (srcDoc ran the page same-origin with the privileged
webview) and inject a no-network CSP so a poisoned report can't exfiltrate at
display time. Inline script/style keep working; system browser is the escape hatch.
2026-08-15 10:38:58 -07:00
Rohit C Prasad 560fc3cb8a Tool-request card speaks plainly; declining re-checks for a user-installed copy
Fact strip: 'OpenWorker installs its own verified copy from <publisher>' replaces
supply-chain jargon. On decline the engine re-resolves — a copy the user installed
themselves is handed to the agent as theirs, not treated as a refusal.
2026-08-15 00:14:15 -07:00
Rohit C Prasad b022e58d07 Label the coworker's justification on the tool-request card
A bare floating quote made readers infer what it was; 'Reason:' says it.
2026-08-14 23:55:00 -07:00
Rohit C Prasad 8e77d61aa1 Tool-request card: separate the product's facts from the coworker's ask
Registry metadata (version, publisher, checksum) moves to a distinct fact strip.
Decline button renamed to say the run continues; reason capped to one sentence.
2026-08-14 23:50:51 -07:00
Rohit C Prasad 25d32891d3 Tool-request prompts fail closed on installability
TOOL_REQUESTED now carries the registry's verdict (installable/version/summary).
GUI offers Install only when the event says a pinned build exists.
2026-08-14 23:25:21 -07:00
Rohit C Prasad 62ad9dbdca tools: give coworkers the user's real toolchain, and stop silent skips
Sidecar inherits the login shell's env; toolchain resolves absolute paths with pinned
installs; request_tool replaces the 'tool missing -> STOP' instruction that hid a check.
2026-08-14 15:28:57 -07:00
fanziqing 68c7914b80 test: cover Ark provider setup end to end 2026-08-14 17:01:25 +08:00
Rohit C Prasad 49c16af076 gui: reload coworkers after health, not only at mount
The mount-time persona fetch loses the race to the sidecar boot, leaving the
composer picker empty all session while Settings looked fine.
2026-08-13 16:47:11 -07:00
Devika Verma c958d6f262 Step 2: Auto-Approve mode - the reviewer, the hook, and the renames
The mode from ocw-context/docs/reviewed-auto-mode.md (rev. 4), v1 scope.

coworker/reviewer.py (new)
- The 8.3 prompt verbatim, cache-shaped: instructions + known world (folders
  and remotes only) + user-message history in the stable prefix; this turn's
  request and ONE action in the suffix.
- parse_verdict: any defect (empty, non-JSON, unknown verdict) -> unsure.
  There is no parse path that results in execution (8.5).
- Reviewer.review never raises: provider errors and timeouts -> unsure.
  Metering counters (checks / verdicts / tokens) for 1.7.
- AGENT_DENY_MESSAGE: the terse, non-diagnostic refusal the agent gets on a
  deny; the full reason goes to the user only (8.4 asymmetry).

coworker/engine.py
- Reviewer consulted ONLY when: attached, mode is AUTO_APPROVE, session
  explicitly attended (unset is_attended counts as NOT attended, so
  automations can never be reviewed), fewer than two denials this turn.
- Consulted ONLY on decisions the gate marked needs_user - hard denies
  never reach it, so it can only turn "ask" into "allow" (1.2).
- One action per request, fired concurrently for all of a turn's escalating
  calls before the sequential authorize loop (8.6): a verdict cannot land
  on the wrong action, and approval cards still reach the human one at a
  time in call order.
- allow -> runs, audited with the reason. deny -> blocked; user event
  carries the full reviewer reason + allow_anyway; agent message carries
  only AGENT_DENY_MESSAGE. unsure -> today's card.
- Reviewer sees the user's words only, extracted mechanically from
  role=user messages - never agent output, never tool results (4.4).

coworker/permissions.py
- Mode.AUTO renamed Mode.BYPASS_APPROVALS ("bypass-approvals"); legacy
  "auto" still parses via _missing_ so configs, saved sessions, and the
  golden decision table are untouched.
- Mode.AUTO_APPROVE ("auto-approve"): gate-identical to INTERACTIVE except
  session grants ("always allow this ...") no longer auto-allow - they
  route to the reviewer instead (1.5: out-of-band standing policy may skip
  the judge; an in-flow click may not). Config allowlists still skip.
- _domain_allowed(include_session=False) checks the user-settings list only.

coworker/config.py: auto_approve flag, off by default, _GLOBAL_ONLY (a
cloned repo cannot hand itself a looser reviewer). agent.py attaches the
Reviewer only when the flag is on; without it AUTO_APPROVE behaves exactly
like INTERACTIVE.

server/manager.py: autonomy audit ranks auto-approve above interactive
(turning the reviewer on IS raising autonomy) and below bypass.

GUI: mode picker label "Full access" -> "Bypass approvals" (wire value
"auto" kept). Verified live against the real sidecar; e2e spec updated;
tsc and all 111 GUI unit tests pass.

Tests: tests/test_auto_approve.py (33) - gate behaviour per mode, fail-
closed parsing, prompt shape, deny asymmetry, retry guard, attended
gating, hard-deny isolation, per-action verdict landing, and that the
reviewer never sees agent prose. Permission suites + golden table: 146
passing unchanged.
2026-08-12 12:42:17 -07:00
Rohit C Prasad 06a4365132 approvals: session read-only command grant; enable on consent card
'Allow read-only commands' on shell cards — fail-closed classifier (local reads + pipelines only; no network/interpreters/writes), session-scoped, persisted with grants.
Consent cards get an in-place Enable button.
2026-08-11 15:07:46 -07:00
Rohit C Prasad 110a8ae8ce personas: sharing v1 — export/import bundles, version + consent (OPE-7)
Bundle zip export + import (zip-slip guarded) through the picker's Import door; version+provenance with a replaces-note, re-consent only when capabilities grow.
Consent screen: trust warning first, capability summary with collapsed tool list, recommended connectors.
2026-08-11 12:12:24 -07:00
Rohit C Prasad 4908c8402e coworker picker: 'Use temporary folder' copy; retire Chat persona
Chat ships disabled+unsurfaced (Coworker covers quick Q&A); recoverable from Settings.
2026-08-10 22:08:03 -07:00