| Files | Last commit | Last update |
|---|---|---|
feat(den): grouped Library, My bot in Work, flagged MCP presets (#6623) * Polish Library and connector flows and move My bot to Work navigation * fix(dashboard): break My bot import cycle by extracting myAgentAvailable The org dashboard shell and command palette imported myAgentAvailable from my-agent-screen.tsx, which pulled the whole MyAgentScreen React/UI module graph (hooks, library data, panels, navigation) into the shell. Under cold boot and HMR this surfaced as a runtime ReferenceError at `myBot: myAgentAvailable(orgContext)`. Extract the pure availability predicate into my-agent-availability.ts, a module with no React or UI imports, and import it from the shell, command palette, and the screen. The predicate keeps the same conditions: the deployment advertises Workbot to the member and both workbotProactive and workbotAgentLibrary rollouts are on. Add unit tests for the predicate covering workbot capability, both rollouts, older servers missing features, and null context. * feat(connect): add reviewed MCP presets behind expandedMcpPresets flag Add 16 reviewed official MCP server presets (Airtable, Amplitude, Cal.com, Canva, Figma, Fireflies, Hugging Face, Honeycomb, Klaviyo, Lucid, monday.com, Mural, PostHog, Semgrep, Tavily, Vercel) behind a new default-off `expandedMcpPresets` feature flag, so admins can try a few before rollout. The 11 existing presets stay as the always-on core (`EXTERNAL_MCP_PRESETS`); the new ones live in `EXTERNAL_MCP_PRESETS_EXPANDED` and only enter the catalog and preset list when the flag is on (`externalMcpPresetsForCatalog({ expanded })`). The flag is checked per organization in the /v1/mcp-connections/presets and resolve routes and in the `search_capabilities` connectors catalog. Killing the flag hides the new suggestions only: it never revokes or breaks existing connections. The auth policy matches against `ALL_EXTERNAL_MCP_PRESETS` (core + expanded) so a connection made to an expanded-preset server while the flag was on keeps its preset auth behavior after a revert. Each OAuth preset reuses the existing CIMD/DCR auth pipeline; no new auth path. Tavily is the only API-key preset. URLs and OAuth protected-resource metadata were verified by probing public endpoints; advertisement is not proof of a successful connection, and real sign-in still requires the member to take over OAuth. * fix(library): return to the shared item after sharing; use radar icon for My bot * fix(automations): remove Open in OpenWork Web from the My Automations header Each automation keeps its own Manage in OpenWork Web link in detail. * test(connect): prove expandedMcpPresets off, on and killed; show real brand marks Add a proof that an admin's Add a connector list shows only the original presets with the flag off, adds the 16 reviewed servers with image brand marks when on, filters by name, and hides them again when killed. Map the new brands with a square Simple Icons mark; the others use their favicon. Unit test the catalog setup state (Tavily api_key, the rest oauth) and add flag-on/off screenshots to the feature doc. * test(workbot): follow My bot to the Work sidebar in the agent proof The Library row moved to Work › My bot; the proof now checks the sidebar entry appears only with the agent on, opens /dashboard/my-bot from it, and matches chat's 'My bot:' link. * fix(den): use readable semantic ink for library counts and list markers | 11 days ago | |
perf(ci): parallelize proof screenshot reviews safely (#6135) * perf(ci): parallelize proof screenshot reviews safely Bound independent screenshot and record judging while preserving dependent model calls, ordered results, and atomic partial evidence. Publish vision caches atomically so concurrent writers cannot leave pending assertions through malformed cache entries. Avoid rebuilding evidence worlds for explicit CI-only guardrail inputs. Include the 48-hour PR CI breakdown, controlled scheduling benchmark, and rejected live checkpoint experiment; no end-to-end 50 percent claim. * test(ci): use local polling for judge concurrency assertions The browser-boundary checker interprets waitFor callbacks as browser code, including vi.waitFor. Use Vitest expect.poll for these local asynchronous assertions instead of weakening the checker. Reproduced the CI failure with pnpm evals:check; browser, layer and spec lint now pass, alongside 42 focused tests and eval typechecking. | 20 days ago | |
perf(ci): parallelize proof screenshot reviews safely (#6135) * perf(ci): parallelize proof screenshot reviews safely Bound independent screenshot and record judging while preserving dependent model calls, ordered results, and atomic partial evidence. Publish vision caches atomically so concurrent writers cannot leave pending assertions through malformed cache entries. Avoid rebuilding evidence worlds for explicit CI-only guardrail inputs. Include the 48-hour PR CI breakdown, controlled scheduling benchmark, and rejected live checkpoint experiment; no end-to-end 50 percent claim. * test(ci): use local polling for judge concurrency assertions The browser-boundary checker interprets waitFor callbacks as browser code, including vi.waitFor. Use Vitest expect.poll for these local asynchronous assertions instead of weakening the checker. Reproduced the CI failure with pnpm evals:check; browser, layer and spec lint now pass, alongside 42 focused tests and eval typechecking. | 20 days ago | |
feat: graduate chat, Artifacts and schedule improvements (#6798) * feat: graduate chat, artifacts and automation schedules * test(evals): give text-activity proof v2 write/edit paths and leave Settings via Back to app * fix(app): show a v2 reply's model on the Working line while it streams OpenCode v2 names the reply model only on session.step.started; the adapter dropped it, so hovering Working showed nothing until the turn reloaded. * docs: drop retired rollout key names from Agents list notes * fix(den-api): drop the always-on calendar trigger enable hook; mount chat timing tests under auth Calendar triggers are generally available, so the per-owner enabled seam and its disabled-path test are removed; Cloud-only placement and the Google Calendar connection requirement stay. The Working-line timing tests now render under the app's auth provider, as the GA artifacts catalog sync needs. * fix(den-api): report Workbot default readiness as unverified when the Gateway cannot be read Since included models graduated (#6796), a Gateway read failure with no routable managed model returned an empty catalog, so readiness read 'unavailable' instead of 'unverified' (workbot-luna-default API test, red on dev f72b0a48c1). * docs: record GA review results as a factual status report * test(den-web): use a live feature key in the feature usage sort test composerSubagentTracker is retired, so the typed test no longer compiled and the den-web build failed. * chore(den-web): restore generated next-env.d.ts | 8 days ago | |
refactor(automations): retire automationIntervalSchedules and automationCalendarTriggers flags (GA) (#6774) Every-few-hours and before/after-meetings schedules are generally available. The flags are removed coherently across the API, scheduler, desktop UI, runtime knowledge, contracts, tests and docs; older desktop clients and stored overrides that still send the keys are accepted and ignored (response-only compatibility value stays true). Cloud placement, the headless runner, Google Calendar calendar scope and the Desktop/Cloud (automationTargetAllowed) toggle remain enforced without a flag. The schedule-kind negotiation for released desktops stays. - Remove the two registry entries; add to RETIRED_FEATURE_KEYS. - Helm values: drop the operator lock keys (regenerated); schema keeps them as retired-and-ignored so old values files still validate. - feature-response shim: the two keys stay true for published clients. - service: drop requireScheduleAllowed per-kind gating (keep cloud-only check), drop intervalSchedulesEnabled/markFeaturesUsed schedule-feature seams; the calendar-trigger enabled hook defaults to always-true (GA). - routes: drop intervalSchedules/calendarTriggers from scope() and the two disabled error mappings. - desktop UI: always offer Every few hours and Around my meetings; drop the useOrgFeature gating and the not-on-for-your-org blockers. - outcomes: drop the two automation outcome readers; only workbotProactive remains an outcome feature. - tests/evals: rewrite to the GA behavior (no flag to turn on); the admin-feature-outcomes proof asserts only the remaining outcome feature. - docs: replace the two feature READMEs with retired notices; update the GA retirement report and the admin feature-outcomes README. Does not enable Workbot/My agent/proactive behavior; does not remove the automationCalendar (desktop Calendar UI), workbotProactive or other flags. Keep actual org Desktop/Cloud settings, operator shutdown switches, entitlements and connection checks intact. | 8 days ago | |
feat(agent): expose native app affordances to Code Mode (#6544) | 12 days ago | |
fix(app): bound archive verification before the window timeout (#5014) * fix(app): bound session archive verification before bridge timeout Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> * test(app): record pinned archive RCA and assertion evidence Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> * fix(app): retain explicit null signals across Request clones Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> --------- Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> | 1 month ago | |
fix(app): isolate archive HTTP from renderer stream pressure (#5063) * test(app): reproduce archive renderer connection pressure Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> * test(app): isolate mailbox registration expiry from renderer liveness Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> * docs: record archive pressure and mailbox liveness RCA Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> * fix(app): isolate archive HTTP from renderer stream pressure Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> * test(desktop): type finite HTTP transport witnesses Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> * fix(desktop): preserve Stop request cancellation through IPC Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> * test(app): align unmount proof with cancelled archive transport Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> --------- Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> | 1 month ago | |
fix(mcp): remove sandbox bootstrap request dependencies (#5047) * fix(mcp): remove sandbox bootstrap request dependencies Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> * docs: record sandbox startup timeout reproduction and limits Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> * test(mcp): verify shared demo sandbox boots before and after Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> * fix(mcp): let dashboard own failed tile retries Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> * test(mcp): capture isolated Electron sandbox startup proof Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> * fix(mcp): use shared Button for view retry Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> --------- Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> | 1 month ago | |
fix(sessions): discover model names and resolve aliases safely (#4955) * fix(sessions): resolve model aliases and expose catalog names Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> * docs: record retired model binding RCA and proof boundaries Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> * fix(types): disambiguate engine provider catalog export Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> --------- Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> | 1 month ago | |
fix(app): isolate permission replies from renderer stream pressure (#5070) * test(app): reproduce permission replies starved by event streams Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> * fix(app): isolate permission replies from renderer stream pressure Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> * test(app): retain scoped Stop cleanup after permission recovery Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> --------- Signed-off-by: Guillaume Loret <guillaume@openworklabs.com> | 1 month ago |
| Files | Last commit | Last update |
|---|---|---|
| 11 days ago | ||
| 20 days ago | ||
| 20 days ago | ||
| 8 days ago | ||
| 8 days ago | ||
| 12 days ago | ||
| 1 month ago | ||
| 1 month ago | ||
| 1 month ago | ||
| 1 month ago | ||
| 1 month ago |