Commit Graph
31 Commits
Author SHA1 Message Date
Mumit Khan e9777cbb1b Add custom OpenAI-compatible providers 2026-10-26 11:01:42 -07:00
Ali Abuhassan 98717dd72f fix(server): surface crashed WS turns as error events
run_turn was scheduled with asyncio.create_task and a try/finally with no
except: an unexpected exception escaping engine.run() or retry() died as an
unretrieved task exception and the GUI saw only a bare turn_done — a silently
dead turn with zero feedback. Broadcast an error event first, mirroring the
background-turn path in deliver_to_session. Fixes #367.
2026-10-17 15:47:13 +05:30
Rohit Prasad 9a901d206a Merge pull request #250 from Dhevenddra/fix/workspace-trust-windows-acl
security: apply the Windows ACL protection to the workspace trust store
2026-10-17 15:46:40 +05:30
Rohit C Prasad 924358016c Intel Mac builds: link OpenSSL statically into cryptography
The Intel sidecar and program died on their first import; two libssl copies were bundled under one name.
The DMG build now starts the sidecar once (openworker-server --check).
2026-10-05 18:30:54 -07:00
Florian van TrielandClaude Opus 5.5 43f723e3e2 tests: auto-titling no longer steals the scripted turn in server tests
Session auto-titling calls the provider from a background thread at the
start of turn 1, racing the turn for ScriptedProvider's next reply. Under
full-suite load it sometimes took the write_file tool call, so
test_ws_set_mode_auto_skips_approval never wrote a.py. The scripted
provider now answers title requests itself, and the one test that budgeted
an extra "Session title" turn for the race drops it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 16:12:42 +02:00
Rohit C Prasad 9a8764d407 Hold the SWE Lead back from the release picker
ships: false, like its workers; internal builds still offer it and a running team keeps working.
2026-09-29 21:23:31 -07:00
Rohit C Prasad eef0122b24 Clarify team approvals and surface every pending request
Surface every pending request and review delegated actions using the original worker permission context.
2026-09-20 15:03:01 -07:00
Rohit C Prasad 7db596dd80 Engine and server: worker grants, lead decisions, parked gates, reviewer, usage
The human's ticks on the staffing card are the worker's grant; approvals follow the lead's mode.
A lead answers a worker's parked call; team and work-item gates keep their payload in the Inbox.
2026-09-17 16:18:03 -07:00
Rohit C Prasad eae1ed315f Auto-title at turn start, not turn completion
The title rides the user message the moment it lands — a long agentic turn no longer holds the session name hostage; an opener signature keeps the completion hook (background turns) from burning duplicate attempts.
2026-08-24 15:12:56 -07:00
Rohit C Prasad 40990da5e2 Persist approval provenance and server-authored mode notices
Approval origins (reviewer/user/bypass, notes, grants) ride the tool message display sidecar so chips and deny blocks survive reload.
The Auto-Approve explainer is persisted once per session server-side with new shorter copy; later switches persist one-line markers.
2026-08-24 14:14:51 -07:00
Rohit C Prasad 50c2b04678 Restore live-turn state on session reconnect
ws ready now carries running (server truth); the GUI restores Stop + the waiting row and never shows the intro hero mid-turn.
2026-08-24 12:23:29 -07:00
Rohit C Prasad 4ac1e59370 MCP Test: flag authorizing before the background connect; notice copy says Connectors
The GUI's fast poll keyed off a status the task hadn't set yet, so a failing Test
looked dead until the 5s tick.
2026-08-21 10:43:16 -07:00
Rohit C Prasad 19e10f0e76 Shipping lineup: remove Chat, ship Code disabled, gate unshipped personas
Manifests carry ships/group; release builds hide ships:false coworkers (OPENWORKER_UNSHIPPED=1 restores them).
Persona detail serves bundle media; staffing gate reads the registry, not the filtered list.
2026-08-20 17:59:48 -07:00
Rohit C Prasad 375d7b240e personas: DevOps team — standing lead + on-demand diagnosis workers
Watchman lead (observer-credential shell, case-ledger dedup, staff-on-incident);
logs/infra/change worker lanes; doctrine locked in test_devops_team.
2026-08-18 22:39:53 -07:00
Rohit C Prasad 097a2802ad Personas: DevSecOps team — lead + appsec/secrets/posture worker variants
Worker variants carry the solo security personas' tool bundles + skills (bundle shape).
Lead: falsifiable criteria, case-first journaling, evidence-gated review, report rollup.
2026-08-17 19:54:11 -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 b5b000eb76 personas: ship security coworker bundles (OPE-61 phase C)
Security, Cloud Posture, and Dependency Audit coworkers as self-contained bundle dirs (manifest + skills) driving OSS scanners; registry loads bundle subdirs; packaging includes them.
2026-08-11 06:20:19 -07:00
Rohit C Prasad 3d13c7d699 coworker picker: setup chips above composer, folder pick at send (UX-029)
Per-session coworker+folder chips replace the sidebar split-button picker; code family gets a send-time folder dialog with git-ready temp dirs and Save as project.
Builtins ship enabled; user-facing noun is Coworker; personas flag now defaults on.
2026-08-10 21:43:02 -07:00
Devika Verma 70e4610a3e Add support for Skills (#391)
Global & per-workspace skill.
Per-persona skills will be improved later as we re-design that abstraction, as per roadmap.
2026-08-01 08:50:53 -07:00
Dhevenddra 444deaa21d security: apply the Windows ACL protection to the workspace trust store
WorkspaceTrustStore.set_trusted protected its state file with a bare
os.chmod(tmp, 0o600). On Windows that is a silent no-op, because os.chmod
only toggles the read-only bit there, so workspace_trust.json kept the broad
ACEs it inherited from its parent directory:

    NT AUTHORITY\SYSTEM:(I)(F)
    BUILTIN\Administrators:(I)(F)
    <user>:(I)(F)

coworker/secrets.py already documents this hazard and solves it in
_restrict_to_user() via icacls /inheritance:r /grant:r, exposed as the
write_private_text() helper. server/run.py uses that helper for the sidecar
auth token, but the trust store did not. Since this file is the allowlist
deciding which workspaces get auto-approved command execution, route it
through the same helper. Afterwards the file carries a single ACE:

    <user>:(F)

The two tests meant to catch this asserted st_mode & 0o777 == 0o600, which is
unsatisfiable on Windows. os.stat cannot see ACLs there, so every writable
file reports 0o666, including the correctly protected sidecar token. Replace
both with a shared assert_user_only() that checks mode bits on POSIX and the
DACL on Windows.
2026-07-27 20:35:49 +05:30
Rohit P ac83bc0490 security: complete local access protections 2026-07-24 18:44:39 -07:00
Rohit P 3f5ac872ca security: refine workspace trust controls 2026-07-24 18:44:39 -07:00
Rohit P 8ee0a0d082 security: strengthen session handling 2026-07-24 18:44:39 -07:00
Fahad Siddiqui 657cf03460 fix: harden local trust boundaries (shell allowlist, MCP OAuth loopback, WS ingestion)
Boundary-hardening pass addressing three audit findings on the local sidecar.

Shell command allowlist (andrewyng/openworker#28):
- Replace prefix-string matching in PermissionEngine._command_allowed with
  argv-aware matching: reject any command containing shell operators
  (; & | > < ` $( ( and newlines) before consulting the allowlist, then require
  the allowlisted entry's tokens to be an exact argv prefix. This closes the
  auto-run bypass where an allowlisted "git status" also auto-ran
  "git status && rm -rf ~", pipes, redirection, and command substitution.
- Drop language interpreters / package managers (python, python3, node, npm,
  npx) from DEFAULT_ALLOWED_COMMANDS — allowlisting an interpreter allowlists
  arbitrary code (python3 -c "..."), defeating approval gating. Read-only
  inspection commands and pytest remain.

MCP OAuth loopback (andrewyng/openworker#29):
- Verify the OAuth state at the loopback boundary. The MCP SDK already validates
  state (compare_digest), so this is not a CSRF fix but defense-in-depth: capture
  the state from the authorize URL and have deliver_callback ignore a callback
  whose state does not match WITHOUT consuming the pending future, so a stray or
  forged local hit can no longer abort a user's in-progress sign-in. Falls back to
  prior accept-any behavior when no state was captured.

WebSocket ingestion caps (andrewyng/openworker#38):
- Bound a single user_message frame in the session WS loop: max text length,
  max attachment count, and max total attachment bytes. Oversized frames get a
  visible error frame and are dropped instead of being buffered into a turn; the
  socket stays alive. Guards the unauthenticated loopback socket against cheap
  memory spikes.

Tests:
- Allowlist: reject operator chaining (8 variants), argv-boundary matching, and
  interpreters-not-auto-allowed-by-default.
- OAuth: state extraction, and mismatched/missing state ignored without consuming
  the flow while the matching state still resolves it.
- WS: oversized text and too-many-attachments rejected with an error frame, and a
  normal message still works afterwards.

Full suite: 865 passed (1 pre-existing unrelated failure in
test_provider_router::test_manager_curated_models, present on origin/main).
2026-07-24 01:41:05 +05:00
Rohit C Prasad ba99978e03 Enable Claude extended thinking by default, drop the settings field
Fixed 8192 budget; the provider profile key stays a hidden override (0 = off).
Per-turn composer control is future work.
2026-07-23 07:57:04 -07:00
Rohit C Prasad a9458524e8 Blur-save non-secret provider fields on configured providers
The Test button was the form's only save path — extras like the thinking budget
silently never persisted. Blur saves with a Saved flash; empty clears.
2026-07-23 07:43:24 -07:00
Rohit C Prasad 2a2fffd280 Pause Google one-click connect pending CASA verification
Gmail/Calendar/Drive show a disabled Coming-soon button; the server refuses the flow too.
Manual token connect and already-connected accounts are untouched.
2026-07-23 07:43:24 -07:00
Rohit C Prasad 1032e3a664 Persist Always-allow grants with the session
Grants were in-memory only — every restart re-asked for approved tools/commands.
Saved on the session record, re-applied on engine rebuild.
2026-07-23 07:43:24 -07:00
Rohit C Prasad f1eb652d61 Allow mid-session model switching with a persisted transcript marker
Picker stays live for the session; switches persist a model_switch notice (§17 revised).
Rebinds refused mid-turn; images become placeholders for non-vision targets at send time.
2026-07-22 15:43:54 -07:00
Rohit C Prasad 878b858ece Persist error/interrupt markers in history; add Retry on failed turns
Engine appends a display-only notice message on error/interrupted; providers never see it.
New retry frame re-runs a failed turn with no new user message, guarded on the error tail.
GUI renders persisted notices on reload and a Retry button on the trailing error.
2026-07-22 13:45:43 -07:00
Rohit C PrasadandDevika 2b45018ffa OpenWorker: initial import
Imported from andrewyng/aisuite@1b4bbf303e
(contents of its platform/ directory, hoisted to the repo root).
Development history prior to this commit lives in that repository.

Co-authored-by: Devika <devikaverma11@gmail.com>
2026-07-21 11:09:41 -07:00