Commit Graph
105 Commits
Author SHA1 Message Date
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 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 880c7859bd Work-item image attachments: content-addressed store + attach on every front door
Blobs live in state-dir attachments/ (sha256-named); the log carries only attachment:// refs on a normal comment event.
Attach authority = comment authority; images-only allowlist with magic-byte check, 10MB cap; in-app tool + API + CLI + MCP.
2026-08-16 18:34:04 -07:00
Rohit C Prasad f10bfca9d9 Workers see the claimable pool (drill-caught)
Worker list_items was slice-only, so an unassigned external worker saw an empty board — a pull queue nobody can see.
Open+unassigned items are now visible to workers while claims are open; hidden again under lead-only.
2026-08-16 18:20:44 -07:00
Rohit C Prasad 36aa1da728 ocw CLI + team-board MCP server on stdio
ocw board/journal verbs with server auto-discovery (remote-first; direct SQLite only headless).
ocw board mcp serves the role-scoped toolset to external harnesses; 21 tests incl. both dialects over the real app.
2026-08-16 17:48:30 -07:00
Rohit C Prasad 9f6a3d3833 Board claims: store-stamped self-assignment + claims policy knob (OPE-100)
Claim wins by first write under the store lock; lead supervises by exception via its digest.
Policy claims: open (default) | lead-only; per-item reservation = lead assigns itself.
2026-08-16 17:48:22 -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 3e4fafead0 Team wake plumbing: trait-gated verbs, durable queues, staffing gate, digests (OPE-97)
team: manifest trait gates lead/worker toolsets; propose_team pre-spawns worker sessions on approval (fail closed on solo personas).
Deliveries + lead subscriptions are cursor-consumed projections; turns end with a queue kick, ticks replay; timer wakes carry the code-computed staleness digest; hourly wake cap is the budget gate.
2026-08-16 08:37:07 -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 054f807d4e Journal refs are plain pointers — no checksum ceremony for agents
Tamper-evidence stays internal to the stores; agents just reference files.
2026-08-16 06:55:29 -07:00
Rohit C Prasad 1d12fe96d2 Journal splits from the board: case-keyed store, grants ride assignment
Cases outlive boards/teams, so entries+per-case chains move to journal.db with a grant table (creator-on-attach, assignment-fed, explicit shares).
Adds the raw capture kind: excerpt inline under a body cap, full payload as a sha256-referenced artifact; reads skip raw unless asked.
2026-08-16 06:44:20 -07:00
Rohit C Prasad cbf30b8d65 Workers may file work items; new items always land in the proposed gate
Worker slice now includes items it created, so a filed follow-up stays visible to its author.
2026-08-16 06:19:55 -07:00
Rohit C Prasad 5c00cdfee4 Work items carry artifact refs; they ride transition and comment
Refs (branch, PR, report, session) accumulate deduped on the item via the projection fold, so rebuild reproduces them.
2026-08-15 22:52:44 -07:00
Rohit C Prasad 48f3021843 Agent teams: event store, work items, board verbs, journal (OPE-95)
One hash-chained append-only log; board, journal, and per-agent deliveries are projections (rebuild == replay).
Six board verbs + journal verbs with role authority; worker slice and case access ride assignment.
2026-08-15 22:50:24 -07:00
Rohit C Prasad 44e0e8566f OpenAI-compatible path names an output ceiling instead of trusting server defaults
max_tokens defaults to 32k (compat servers were capping at ~2k, truncating file
writes); a below-limit model 400 drops the param and retries on the server default.
2026-08-15 13:47:34 -07:00
Rohit C Prasad 0a18d72657 Access drawer and inbound gate honor the persona connector grant
effective_connectors intersects the declared allowlist, so the drawer no longer
renders undeclared connectors as live sources and inbound delivery is gated too.
Builder-based builtins (no manifest) stay unrestricted for channel bindings.
2026-08-15 10:51:46 -07:00
Rohit C Prasad 4ed112b8eb Connectors become a per-coworker allowlist (OPE-93)
Sessions expose declared-and-connected only; 'all' is builtin-only; legacy true
migrates to the recommended refs, else nothing. Consent lists real names and
per-connector caps force re-consent when an update widens the grant.
2026-08-15 10:34:43 -07:00
Rohit C Prasad 5f2eeca1c8 Diagnose truncated tool calls instead of executing their mangled args
Unparseable (_raw) args now get a truthful error: cut-off-by-output-limit says
'smaller pieces', bad JSON says 're-send with declared parameters'. Raw junk is
shrunk before entering history so replays can't teach the model the _raw shape.
Anthropic default max_tokens 16k -> 32k so typical report files fit outright.
2026-08-15 06:55:10 -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 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 b866157778 Managed tools land on the persistent shell's PATH
install() links binaries into a stable tools/bin dir; LocalExecutor appends it
at spawn, so a mid-session install works by name without a respawn.
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 c041ed64a5 Pin trivy in the managed registry; retire tfsec from cloud-posture
trivy 0.74.0 pinned with per-platform digests so request_tool can install it.
tfsec is deprecated upstream; the bundle now drives trivy config instead.
2026-08-14 23:25:21 -07:00
Rohit C Prasad cf0edbf9c5 security bundles: offer a self-contained findings report page
Ask with ask_user before building it; page inherits the evidence, coverage and
no-secrets rules.
2026-08-14 20:35:48 -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
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 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 5ea697d384 personas: wire manifest skills + mcp into sessions (OPE-58)
Bundle skills/ dir joins the persona's session menu (additive; user disables/mutes win); manifest skills: narrows the bundle; mcp: scopes raw servers.
Install snapshot now carries the skills folder — the sharing bundle shape.
2026-08-10 22:16:38 -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
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
Rohit Prasad 8861da136c Merge pull request #415 from coderdailyone/security/pin-web-fetch-connections
security: pin fetched connections to the vetted address (close DNS rebinding)
2026-08-07 20:36:25 -07:00
Rohit P f21c53dd29 Merge branch 'main' into feature/memory 2026-08-07 19:33:58 -07:00
Rohit P 53d5fc498f Merge branch 'main' into issue/ope-51-ask_user-upgrades 2026-08-01 09:45:03 -07:00
Rohit P 997b2a9548 Merge branch 'main' into issue/ope-46 2026-08-01 08:58:04 -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
coderdailyoneandClaude Fable 5 18ac388162 security: pin fetched connections to the vetted address (close DNS rebinding)
guard.get_checked previously resolved a name for the address check and then let
the client resolve it again to connect, so a ~0-TTL record could flip to
127.0.0.1 (or the metadata endpoint) between the two — the exact gap the module
docstring called out as "not covered".

Every hop now connects to the address that passed its check: the request URL
carries the vetted IP, Host keeps the original name (and explicit port) for
virtual hosting, and the sni_hostname extension keeps the TLS handshake — and
certificate verification — against the name. Literal-IP URLs are unchanged.
Redirect Locations are resolved against the logical URL, and the final logical
URL rides resp.extensions["logical_url"] so web_fetch reports the name, not the
pinned address.

Verified against a local TLS server whose cert carries only DNS:pinned.test:
the pinned request (URL=127.0.0.1, sni_hostname=pinned.test) verifies and the
server sees Host: pinned.test; the same request without the extension fails
with "IP address mismatch" — httpcore does verify certificates against
sni_hostname, not the URL host.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-31 10:16:09 +01:00
Rohit C Prasad 25dc283d9b fix: stop artifact walk entering OS app-data dirs; context bar off by default
The artifacts scan used rglob and filtered after descending, so a home directory
workspace walked into ~/Library and triggered the macOS App Data consent prompt on
every turn. Walk with pruning instead, and skip Library / AppData in search too.

The composer chip now shows the session total by default, with the context window
bar behind a Settings toggle.
2026-07-30 13:10:30 -07:00
Rohit C Prasad e5c56998ab security: block CGNAT range and guard browser_open_url
Follow up to #290. Add RFC 6598 shared space (100.64.0.0/10, used by
Tailscale) to the address guard, and run the same guard on the Playwright
browser_open_url before navigating.
2026-07-30 11:57:31 -07:00
Rohit Prasad 7e69398b15 Merge pull request #290 from Mr-Neutr0n/security/block-ssrf-in-url-tools
security: block loopback/private/metadata addresses in model-supplied URL fetches
2026-07-30 11:55:49 -07:00
Rohit Prasad 38e1f03021 Merge pull request #161 from psssnikhil/fix/inbox-reply-word-boundaries
fix(inbox): match approval keywords as whole words, not substrings
2026-07-30 11:40:43 -07:00
Rohit C Prasad 6217dbcb37 mcp: global config wins on name clash with a trusted workspace
Follow-up to #215: a trusted repo can no longer redefine a global server
by reusing its name.
2026-07-30 11:24:06 -07:00
Rohit Prasad 5071451d9c Merge pull request #351 from andrewyng/rpCompactionPolish
Compaction - progress signal, capped user-message list, long-paste clamp; Kimi K3 via Together
2026-07-30 11:22:01 -07:00