Home

mweinbach / agent-coworker

publicmweinbach/agent-coworker
Overview Code History Branches Pull requestsIssuesInsights
main
HomeOverview Code PRsIssues

Add skills catalog and desktop manager workflow (#52)

7 months ago

5885bb4
Authored
Max Weinbach3/20/2026, 5:34:07 PM
* feat: add core skill catalog modules

Co-authored-by: Max Weinbach <mweinbach@users.noreply.github.com>

* feat: add websocket skill catalog flows

Co-authored-by: Max Weinbach <mweinbach@users.noreply.github.com>

* feat: add desktop skills manager workflow

Co-authored-by: Max Weinbach <mweinbach@users.noreply.github.com>

* feat(desktop): restyle skills manager into catalog UI

Made-with: Cursor

* fix(desktop): allow open/reveal for skill paths outside workspace

Extend openPath/revealPath allowlist with ~/.cowork, ~/.agent, and
COWORK_BUILTIN_DIR. Use openPath for skill detail 'Open folder' and add IPC tests.

Made-with: Cursor

* fix: hide blank root sessions from workspace lists

Keep default placeholder root sessions out of workspace session listings so the desktop app does not surface empty startup threads.
Add a regression test that preserves meaningful empty sessions while filtering placeholder ones.

Made-with: Cursor

* fix: harden skill state handling

Co-authored-by: mweinbach <mweinbach@users.noreply.github.com>

* Delete opencode-review.yml

* fix: reject skill updates without matching names

Prevent managed updates from silently copying an unrelated valid skill when the recorded installation name disappears from the source. Surface the same rejection in update checks so invalid updates fail before mutating the install.

Made-with: Cursor

* fix: preserve skill mutation state and harden openPath

Co-authored-by: mweinbach <mweinbach@users.noreply.github.com>

* fix: clear failed desktop skill mutation state

Co-authored-by: mweinbach <mweinbach@users.noreply.github.com>

* fix: address session listing and desktop security regressions

Co-authored-by: mweinbach <mweinbach@users.noreply.github.com>

* fix: resolve desktop skills catalog regressions

Co-authored-by: mweinbach <mweinbach@users.noreply.github.com>

* chore: verify session filter bug report

Co-authored-by: mweinbach <mweinbach@users.noreply.github.com>

* Update github.ts

* fix(desktop): align openPath IPC allowlist with revealPath

Made-with: Cursor

* Update InstallationCardGrid.tsx

* fix: block same-scope skill copy; allowlist packaged builtin paths in desktop IPC

Made-with: Cursor

* fix(desktop): await skill install before closing dialog

Made-with: Cursor

* fix: restore busy guard for skill mutations

Co-authored-by: mweinbach <mweinbach@users.noreply.github.com>

* fix: keep active idle sessions in workspace list

Co-authored-by: mweinbach <mweinbach@users.noreply.github.com>

* fix: stabilize Bun test suite

Handle optional CLI session-state writes and tighten desktop and webFetch test isolation so the full test suite passes reliably in sandboxed runs.

Made-with: Cursor

* fix(desktop): refresh builtin skill roots per open/reveal IPC

Made-with: Cursor

* fix: skill preview IPC tagging, local path precedence, install dedupe

Made-with: Cursor

* fix: hide blank placeholder sessions from session lists

Prevent workspace session listings from surfacing empty default root sessions while still keeping the current root session visible when the filtered list would otherwise be empty.

Made-with: Cursor

* fix: restrict desktop openPath allowlist

Co-authored-by: mweinbach <mweinbach@users.noreply.github.com>

* Harden skill installs and icon loading paths

* fix: register skill install waiter before send

Co-authored-by: mweinbach <mweinbach@users.noreply.github.com>

* fix: preserve skill mutation pending keys

Co-authored-by: mweinbach <mweinbach@users.noreply.github.com>

* fix: handle skill source and session listing edge cases

Resolve GitHub skill URLs with slash-containing refs, keep the active root session visible in filtered listings, and restore the desktop skills catalog loading state on reconnect.

Made-with: Cursor

* fix: harden skill installation edge cases

Stage overlapping skill copy sources before mutation, keep uninstall selection stable until the server responds, and deduplicate live session summary mapping.

Made-with: Cursor

* fix: harden skill source validation

Block symlink icon escapes and ambiguous skill updates while keeping session listing and GitHub skill source resolution stable.

Made-with: Cursor

* fix: keep placeholder root sessions hidden

Honor the top-level session filter when emitting workspace session lists so blank active root sessions do not get re-added after filtering.

Made-with: Cursor

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Max Weinbach <mweinbach@users.noreply.github.com>

Parent900bfb0

59 files changed
  • .github/workflows/opencode-review.yml+0−49
  • .gitignore+1−0
  • apps/desktop/electron/ipc/files.ts+12−2
  • apps/desktop/electron/services/desktopBuiltinPaths.ts+39−0
  • apps/desktop/electron/services/ipcSecurity.ts+37−0
  • apps/desktop/electron/services/serverManager.ts+4−3
  • apps/desktop/src/app/store.actions/skills.ts+352−1
  • apps/desktop/src/app/store.helpers.ts
+10
−0
  • apps/desktop/src/app/store.helpers/controlSocket.ts+185−6
  • apps/desktop/src/app/store.helpers/runtimeState.ts+20−0
  • apps/desktop/src/app/types.ts+15−0
  • apps/desktop/src/lib/wsProtocol.ts+5−0
  • apps/desktop/src/ui/SkillsView.tsx+2−105
  • apps/desktop/src/ui/skills/HeaderAndFilters.tsx+51−0
  • apps/desktop/src/ui/skills/InstallSkillDialog.tsx+103−0
  • apps/desktop/src/ui/skills/InstallationCardGrid.tsx+72−0
  • apps/desktop/src/ui/skills/SkillDetailDialog.tsx+257−0
  • apps/desktop/src/ui/skills/SkillsCatalogPage.tsx+96−0
  • apps/desktop/src/ui/skills/index.ts+1−0
  • apps/desktop/src/ui/skills/utils.tsx+72−0
  • apps/desktop/test/control-socket.test.ts+425−1
  • apps/desktop/test/ipc-security.test.ts+82−0
  • apps/desktop/test/skill-detail-dialog.test.ts+229−0
  • apps/desktop/test/skills-actions.test.ts+131−0
  • apps/desktop/test/skills-catalog-page.test.ts+169−0
  • docs/websocket-protocol.md+383−4
  • src/cli/repl.ts+1−3
  • src/cli/repl/serverEventHandler.ts+13−2
  • src/server/protocol.ts+56−1
  • src/server/protocolEventParser.ts+29−0
  • src/server/protocolParser.ts+36−0
  • src/server/session/AgentSession.ts+55−5
  • src/server/session/SessionAdminManager.ts+88−2
  • src/server/session/SessionContext.ts+4−0
  • src/server/session/SkillManager.ts+397−96
  • src/server/startServer.ts+23−0
  • src/server/startServer/dispatchClientMessage.ts+20−0
  • src/skills/catalog.ts+546−0
  • src/skills/defaultGlobalSkills.ts+13−109
  • src/skills/github.ts+256−0
  • src/skills/index.ts+24−307
  • src/skills/manifest.ts+98−0
  • src/skills/operations.ts+500−0
  • src/skills/sourceResolver.ts+532−0
  • src/tools/webFetch.ts+1−1
  • src/types.ts+122−0
  • src/utils/workspacePath.ts+12−0
  • tasks/lessons.md+1−0
  • tasks/todo.md+32−0
  • test/protocol.test.ts+126−0
  • test/repl.server-event-handler.test.ts+75−0
  • test/server.test.ts+77−0
  • test/session.managers.test.ts+235−0
  • test/session.test.ts+67−0
  • test/skills.catalog.test.ts+137−0
  • test/skills.operations.test.ts+325−0
  • test/skills.sourceResolver.test.ts+167−0
  • test/tools.test.ts+7−1
  • test/workspace-path.test.ts+31−1