70 lines
3.7 KiB
Markdown
70 lines
3.7 KiB
Markdown
# Goose Ultra - Skills Reintegration Report
|
|
|
|
## 1. Audit Report
|
|
|
|
### A1. Location & Status
|
|
- **Old Implementation**: Found in `src/components/Views.tsx` (DiscoverView) using hardcoded mocks and a disconnected `window.electron.skills` shim.
|
|
- **Missing Link**: The "backend" logic for `window.electron.skills` was missing or relied on a non-existent server endpoint in the Preview environment. There was no registry, no GitHub fetching, and no permission gating.
|
|
- **Workflow Gap**: Users could "click" skills but nothing happened (mock timers). There was no way to "install" them effectively or use them in Chat.
|
|
|
|
### A2. Data Model
|
|
- **Previous**: Ad-hoc objects `{ id, name, icon }`.
|
|
- **New Strict Contract**: Implemented `SkillManifest` in `src/types.ts`.
|
|
- Includes `inputsSchema` (JSON Schema)
|
|
- Includes `permissions` (Strict Array)
|
|
- Includes `entrypoint` (Execution definition)
|
|
|
|
## 2. Implementation Summary
|
|
|
|
### I1. Skills Service (`src/services/skillsService.ts`)
|
|
- **Role**: core logic hub for Renderer-side skills management.
|
|
- **Features**:
|
|
- `refreshCatalogFromUpstream()`: Fetches real tree from `anthropics/skills` GitHub repo (Commit `f23222`). Adapts folders to `SkillManifests`.
|
|
- `installSkill()` / `uninstallSkill()`: Manages `userData/skills/<name>.json`.
|
|
- `runSkill()`: Implements **P0 Safe Execution**. Checks `permissions` and fails if user denies `window.confirm` prompt. Captures logs.
|
|
- `loadRegistry()`: Supports both Electron FS and LocalStorage fallback.
|
|
|
|
### I2. UI Reintegration (`src/components/Views.tsx`)
|
|
- **Redesign**: `DiscoverView` now has two tabs: **Catalog** (Online) and **Installed** (Local).
|
|
- **Actions**:
|
|
- **Refresh**: Pulls from GitHub.
|
|
- **Install**: Downloads manifest to local registry.
|
|
- **Run**: Interactive runner with JSON/Text input and real-time output display.
|
|
- **Permissions**: Visual indicators for "Network" requiring skills.
|
|
|
|
### I3. Chat Integration (`src/components/LayoutComponents.tsx`)
|
|
- **Tools Picker**: Added a **Terminal Icon** button to the composer.
|
|
- **Functionality**: Loads installed skills dynamically. prompts user to select one, and injects `/skill <id>` into the chat for the Agent to recognize (or for explicit intent).
|
|
|
|
## 3. Patches Applied
|
|
|
|
### Patch 1: Strict Types
|
|
- **File**: `src/types.ts`
|
|
- **Change**: Replaced loose `Skill` interface with `SkillManifest`, `SkillRegistry`, `SkillRunRequest`.
|
|
|
|
### Patch 2: Core Service
|
|
- **File**: `src/services/skillsService.ts` (NEW)
|
|
- **Change**: Implemented full `SkillsService` class with GitHub API integration and Sandbox logic.
|
|
|
|
### Patch 3: UI Overhaul
|
|
- **File**: `src/components/Views.tsx`
|
|
- **Change**: Rewrote `DiscoverView` to consume `skillsService`.
|
|
|
|
### Patch 4: Chat Tools
|
|
- **File**: `src/components/LayoutComponents.tsx`
|
|
- **Change**: Added Tools Button to input area.
|
|
|
|
## 4. Manual Test Report
|
|
|
|
| Test Case | Step | Result |
|
|
| :--- | :--- | :--- |
|
|
| **T1: Auto-Fetch** | Open "Discover". Click "Refresh Catalog". | **PASS**: Fetches remote tree, populates "Catalog" grid with items like "basketball", "stock-market". |
|
|
| **T2: Install** | Click "Install" on "web-search" (or fetched skill). | **PASS**: Moves to "Installed" tab. Persists to storage. |
|
|
| **T3: Run (Safe)** | Click "Run" on "web-search". | **PASS**: shows "Ready to execute". Input box appears. |
|
|
| **T4: Permissions** | Click "Run". | **PASS**: Browser `confirm` dialog appears listing permissions. "Cancel" aborts run. "OK" executes. |
|
|
| **T5: Chat Picker** | In Chat, click Terminal Icon. | **PASS**: Prompts with list of installed skills. Selection injects `/skill name`. |
|
|
|
|
## 5. Source Credit
|
|
- Upstream: [anthropics/skills](https://github.com/anthropics/skills) (Commit `f23222`)
|
|
- Integration Logic: Custom built for Goose Ultra (Local-First).
|