opencode-agent-skills-md 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.beads/.local_version +1 -0
- package/.beads/README.md +81 -0
- package/.beads/config.yaml +61 -0
- package/.beads/deletions.jsonl +1 -0
- package/.beads/issues.jsonl +64 -0
- package/.beads/metadata.json +4 -0
- package/.gitattributes +3 -0
- package/.github/CODEOWNERS +1 -0
- package/.github/copilot-instructions.md +78 -0
- package/.github/dependabot.yml +13 -0
- package/.github/workflows/release.yml +51 -0
- package/.opencode/command/test-compaction.md +9 -0
- package/.opencode/command/test-find-skills.md +7 -0
- package/.opencode/command/test-read-skill-file.md +14 -0
- package/.opencode/command/test-run-skill-script.md +13 -0
- package/.opencode/command/test-skills.md +14 -0
- package/.opencode/command/test-use-skill.md +10 -0
- package/.opencode/skills/git-helper/SKILL.md +65 -0
- package/.opencode/skills/test-skill/SKILL.md +43 -0
- package/.opencode/skills/test-skill/example-config.json +16 -0
- package/.opencode/skills/test-skill/helper-docs.md +29 -0
- package/.opencode/skills/test-skill/scripts/echo-args +14 -0
- package/.opencode/skills/test-skill/scripts/greet +6 -0
- package/AGENTS.md +43 -0
- package/CHANGELOG.md +178 -0
- package/Justfile +39 -0
- package/LICENSE +9 -0
- package/README.md +189 -0
- package/openspec/changes/archive/2026-06-14-skills-core-decouple/specs/core-decoupling/spec.md +74 -0
- package/openspec/changes/archive/2026-06-14-skills-core-decouple/tasks.md +64 -0
- package/openspec/changes/archive/2026-06-14-skills-core-decouple/verify-report.md +75 -0
- package/openspec/changes/archive/2026-06-17-fix-skill-loading-regression/apply-progress.md +136 -0
- package/openspec/changes/archive/2026-06-17-fix-skill-loading-regression/archive-report.md +77 -0
- package/openspec/changes/archive/2026-06-17-fix-skill-loading-regression/design.md +89 -0
- package/openspec/changes/archive/2026-06-17-fix-skill-loading-regression/proposal.md +65 -0
- package/openspec/changes/archive/2026-06-17-fix-skill-loading-regression/specs/core-decoupling/spec.md +77 -0
- package/openspec/changes/archive/2026-06-17-fix-skill-loading-regression/tasks.md +65 -0
- package/openspec/changes/archive/2026-06-17-fix-skill-loading-regression/verify-report.md +165 -0
- package/openspec/specs/core-decoupling/spec.md +110 -0
- package/package.json +35 -0
- package/packages/core/package.json +30 -0
- package/packages/core/src/content.d.ts +16 -0
- package/packages/core/src/content.ts +30 -0
- package/packages/core/src/debug.ts +16 -0
- package/packages/core/src/discovery.d.ts +86 -0
- package/packages/core/src/discovery.ts +257 -0
- package/packages/core/src/index.d.ts +20 -0
- package/packages/core/src/index.ts +55 -0
- package/packages/core/src/match.d.ts +19 -0
- package/packages/core/src/match.ts +75 -0
- package/packages/core/src/parse.d.ts +26 -0
- package/packages/core/src/parse.ts +141 -0
- package/packages/core/src/scripts.d.ts +17 -0
- package/packages/core/src/scripts.ts +79 -0
- package/packages/core/src/search.d.ts +83 -0
- package/packages/core/src/search.ts +188 -0
- package/packages/core/src/types.d.ts +82 -0
- package/packages/core/src/types.ts +131 -0
- package/packages/core/src/walk.ts +109 -0
- package/packages/core/tests/agnostic.test.ts +346 -0
- package/packages/core/tests/content.test.ts +65 -0
- package/packages/core/tests/discovery.test.ts +370 -0
- package/packages/core/tests/package-boundary.test.ts +310 -0
- package/packages/core/tests/parse-trigger.test.ts +282 -0
- package/packages/core/tests/search.test.ts +374 -0
- package/packages/core/tests/subpath.test.ts +87 -0
- package/packages/core/tsconfig.json +10 -0
- package/packages/opencode-agent-skills-md/package.json +42 -0
- package/packages/opencode-agent-skills-md/rolldown.config.js +48 -0
- package/packages/opencode-agent-skills-md/src/cli/config.ts +522 -0
- package/packages/opencode-agent-skills-md/src/cli/install.ts +111 -0
- package/packages/opencode-agent-skills-md/src/cli/main.ts +201 -0
- package/packages/opencode-agent-skills-md/src/cli/real-fs.ts +51 -0
- package/packages/opencode-agent-skills-md/src/cli/status.ts +183 -0
- package/packages/opencode-agent-skills-md/src/cli/uninstall.ts +157 -0
- package/packages/opencode-agent-skills-md/src/host.ts +119 -0
- package/packages/opencode-agent-skills-md/src/index.ts +25 -0
- package/packages/opencode-agent-skills-md/src/plugin.ts +343 -0
- package/packages/opencode-agent-skills-md/src/sdk.ts +71 -0
- package/packages/opencode-agent-skills-md/src/tools.ts +373 -0
- package/packages/opencode-agent-skills-md/tests/cli-commands.test.ts +1423 -0
- package/packages/opencode-agent-skills-md/tests/e2e/startup-smoke.test.ts +66 -0
- package/packages/opencode-agent-skills-md/tests/fixtures/skills/home/.claude/skills/claude-user-only-skill/SKILL.md +8 -0
- package/packages/opencode-agent-skills-md/tests/fixtures/skills/home/.config/opencode/skills/shared-skill/SKILL.md +8 -0
- package/packages/opencode-agent-skills-md/tests/fixtures/skills/home/.config/opencode/skills/user-only-skill/SKILL.md +8 -0
- package/packages/opencode-agent-skills-md/tests/fixtures/skills/project/.claude/skills/claude-project-only-skill/SKILL.md +8 -0
- package/packages/opencode-agent-skills-md/tests/fixtures/skills/project/.opencode/skills/go-tester/SKILL.md +12 -0
- package/packages/opencode-agent-skills-md/tests/fixtures/skills/project/.opencode/skills/nested/team/nested-skill/SKILL.md +8 -0
- package/packages/opencode-agent-skills-md/tests/fixtures/skills/project/.opencode/skills/rust-tester/SKILL.md +11 -0
- package/packages/opencode-agent-skills-md/tests/fixtures/skills/project/.opencode/skills/scripted-skill/SKILL.md +8 -0
- package/packages/opencode-agent-skills-md/tests/fixtures/skills/project/.opencode/skills/scripted-skill/bin/echo.sh +2 -0
- package/packages/opencode-agent-skills-md/tests/fixtures/skills/project/.opencode/skills/scripted-skill/docs/reference.md +1 -0
- package/packages/opencode-agent-skills-md/tests/fixtures/skills/project/.opencode/skills/shared-skill/SKILL.md +8 -0
- package/packages/opencode-agent-skills-md/tests/fixtures/skills/project/.opencode/skills/using-superpowers/SKILL.md +8 -0
- package/packages/opencode-agent-skills-md/tests/integration/helpers/mock-opencode.ts +114 -0
- package/packages/opencode-agent-skills-md/tests/integration/plugin.test.ts +316 -0
- package/packages/opencode-agent-skills-md/tests/integration/skill-discovery.test.ts +315 -0
- package/packages/opencode-agent-skills-md/tests/opencode/host.test.ts +179 -0
- package/packages/opencode-agent-skills-md/tests/opencode/plugin.test.ts +551 -0
- package/packages/opencode-agent-skills-md/tests/opencode/subpath.test.ts +66 -0
- package/packages/opencode-agent-skills-md/tests/opencode/tools.test.ts +213 -0
- package/packages/opencode-agent-skills-md/tests/package-boundary.test.ts +346 -0
- package/packages/opencode-agent-skills-md/tests/tools-security.test.ts +72 -0
- package/packages/opencode-agent-skills-md/tsconfig.build.json +11 -0
- package/packages/opencode-agent-skills-md/tsconfig.json +10 -0
- package/plans/001-ci-gate.md +177 -0
- package/plans/002-is-path-safe.md +243 -0
- package/plans/003-escape-prompts.md +310 -0
- package/plans/004-test-security-paths.md +228 -0
- package/plans/005-stop-swallowing-errors.md +246 -0
- package/plans/006-preserve-jsonc-commas.md +144 -0
- package/plans/007-write-before-purge.md +144 -0
- package/plans/008-reuse-walkdir-for-list-skill-files.md +164 -0
- package/plans/README.md +43 -0
- package/pnpm-workspace.yaml +6 -0
- package/tests/workspace.test.ts +367 -0
- package/tsconfig.json +15 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.44.0
|
package/.beads/README.md
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Beads - AI-Native Issue Tracking
|
|
2
|
+
|
|
3
|
+
Welcome to Beads! This repository uses **Beads** for issue tracking - a modern, AI-native tool designed to live directly in your codebase alongside your code.
|
|
4
|
+
|
|
5
|
+
## What is Beads?
|
|
6
|
+
|
|
7
|
+
Beads is issue tracking that lives in your repo, making it perfect for AI coding agents and developers who want their issues close to their code. No web UI required - everything works through the CLI and integrates seamlessly with git.
|
|
8
|
+
|
|
9
|
+
**Learn more:** [github.com/steveyegge/beads](https://github.com/steveyegge/beads)
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
### Essential Commands
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# Create new issues
|
|
17
|
+
bd create "Add user authentication"
|
|
18
|
+
|
|
19
|
+
# View all issues
|
|
20
|
+
bd list
|
|
21
|
+
|
|
22
|
+
# View issue details
|
|
23
|
+
bd show <issue-id>
|
|
24
|
+
|
|
25
|
+
# Update issue status
|
|
26
|
+
bd update <issue-id> --status in_progress
|
|
27
|
+
bd update <issue-id> --status done
|
|
28
|
+
|
|
29
|
+
# Sync with git remote
|
|
30
|
+
bd sync
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Working with Issues
|
|
34
|
+
|
|
35
|
+
Issues in Beads are:
|
|
36
|
+
- **Git-native**: Stored in `.beads/issues.jsonl` and synced like code
|
|
37
|
+
- **AI-friendly**: CLI-first design works perfectly with AI coding agents
|
|
38
|
+
- **Branch-aware**: Issues can follow your branch workflow
|
|
39
|
+
- **Always in sync**: Auto-syncs with your commits
|
|
40
|
+
|
|
41
|
+
## Why Beads?
|
|
42
|
+
|
|
43
|
+
✨ **AI-Native Design**
|
|
44
|
+
- Built specifically for AI-assisted development workflows
|
|
45
|
+
- CLI-first interface works seamlessly with AI coding agents
|
|
46
|
+
- No context switching to web UIs
|
|
47
|
+
|
|
48
|
+
🚀 **Developer Focused**
|
|
49
|
+
- Issues live in your repo, right next to your code
|
|
50
|
+
- Works offline, syncs when you push
|
|
51
|
+
- Fast, lightweight, and stays out of your way
|
|
52
|
+
|
|
53
|
+
🔧 **Git Integration**
|
|
54
|
+
- Automatic sync with git commits
|
|
55
|
+
- Branch-aware issue tracking
|
|
56
|
+
- Intelligent JSONL merge resolution
|
|
57
|
+
|
|
58
|
+
## Get Started with Beads
|
|
59
|
+
|
|
60
|
+
Try Beads in your own projects:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# Install Beads
|
|
64
|
+
curl -sSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash
|
|
65
|
+
|
|
66
|
+
# Initialize in your repo
|
|
67
|
+
bd init
|
|
68
|
+
|
|
69
|
+
# Create your first issue
|
|
70
|
+
bd create "Try out Beads"
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Learn More
|
|
74
|
+
|
|
75
|
+
- **Documentation**: [github.com/steveyegge/beads/docs](https://github.com/steveyegge/beads/tree/main/docs)
|
|
76
|
+
- **Quick Start Guide**: Run `bd quickstart`
|
|
77
|
+
- **Examples**: [github.com/steveyegge/beads/examples](https://github.com/steveyegge/beads/tree/main/examples)
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
*Beads: Issue tracking that moves at the speed of thought* ⚡
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Beads Configuration File
|
|
2
|
+
# This file configures default behavior for all bd commands in this repository
|
|
3
|
+
# All settings can also be set via environment variables (BD_* prefix)
|
|
4
|
+
# or overridden with command-line flags
|
|
5
|
+
|
|
6
|
+
# Issue prefix for this repository (used by bd init)
|
|
7
|
+
# If not set, bd init will auto-detect from directory name
|
|
8
|
+
# Example: issue-prefix: "myproject" creates issues like "myproject-1", "myproject-2", etc.
|
|
9
|
+
# issue-prefix: ""
|
|
10
|
+
|
|
11
|
+
# Use no-db mode: load from JSONL, no SQLite, write back after each command
|
|
12
|
+
# When true, bd will use .beads/issues.jsonl as the source of truth
|
|
13
|
+
# instead of SQLite database
|
|
14
|
+
# no-db: false
|
|
15
|
+
|
|
16
|
+
# Disable daemon for RPC communication (forces direct database access)
|
|
17
|
+
# no-daemon: false
|
|
18
|
+
|
|
19
|
+
# Disable auto-flush of database to JSONL after mutations
|
|
20
|
+
# no-auto-flush: false
|
|
21
|
+
|
|
22
|
+
# Disable auto-import from JSONL when it's newer than database
|
|
23
|
+
# no-auto-import: false
|
|
24
|
+
|
|
25
|
+
# Enable JSON output by default
|
|
26
|
+
# json: false
|
|
27
|
+
|
|
28
|
+
# Default actor for audit trails (overridden by BD_ACTOR or --actor)
|
|
29
|
+
# actor: ""
|
|
30
|
+
|
|
31
|
+
# Path to database (overridden by BEADS_DB or --db)
|
|
32
|
+
# db: ""
|
|
33
|
+
|
|
34
|
+
# Auto-start daemon if not running (can also use BEADS_AUTO_START_DAEMON)
|
|
35
|
+
# auto-start-daemon: true
|
|
36
|
+
|
|
37
|
+
# Debounce interval for auto-flush (can also use BEADS_FLUSH_DEBOUNCE)
|
|
38
|
+
# flush-debounce: "5s"
|
|
39
|
+
|
|
40
|
+
# Git branch for beads commits (bd sync will commit to this branch)
|
|
41
|
+
# IMPORTANT: Set this for team projects so all clones use the same sync branch.
|
|
42
|
+
# This setting persists across clones (unlike database config which is gitignored).
|
|
43
|
+
# Can also use BEADS_SYNC_BRANCH env var for local override.
|
|
44
|
+
# If not set, bd sync will require you to run 'bd config set sync.branch <branch>'.
|
|
45
|
+
sync-branch: "beads-sync"
|
|
46
|
+
# Multi-repo configuration (experimental - bd-307)
|
|
47
|
+
# Allows hydrating from multiple repositories and routing writes to the correct JSONL
|
|
48
|
+
# repos:
|
|
49
|
+
# primary: "." # Primary repo (where this database lives)
|
|
50
|
+
# additional: # Additional repos to hydrate from (read-only)
|
|
51
|
+
# - ~/beads-planning # Personal planning repo
|
|
52
|
+
# - ~/work-planning # Work planning repo
|
|
53
|
+
|
|
54
|
+
# Integration settings (access with 'bd config get/set')
|
|
55
|
+
# These are stored in the database, not in this file:
|
|
56
|
+
# - jira.url
|
|
57
|
+
# - jira.project
|
|
58
|
+
# - linear.url
|
|
59
|
+
# - linear.api-key
|
|
60
|
+
# - github.org
|
|
61
|
+
# - github.repo
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"opencode-agent-skills-md-19j","ts":"2025-12-12T15:00:09.459708778Z","by":"git-history-backfill","reason":"recovered from git history (pruned from manifest)"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{"id":"opencode-agent-skills-md-0te","title":"Filter already-loaded skills from dynamic suggestions","description":"In chat.message handler, after matchSkills(), filter out skills that are in the session's loadedSkills Set before injecting suggestions.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-13T09:35:29.423075303-06:00","updated_at":"2025-12-13T09:43:09.546456251-06:00","closed_at":"2025-12-13T09:43:09.546456251-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-0te","depends_on_id":"opencode-agent-skills-md-rfb","type":"blocks","created_at":"2025-12-13T09:35:36.369390257-06:00","created_by":"daemon"}]}
|
|
2
|
+
{"id":"opencode-agent-skills-md-12p","title":"Delete .opencode/plugin/test-framework.ts","description":"Remove .opencode/plugin/test-framework.ts - no longer needed after preflight logic is integrated into main plugin.","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-11T23:25:01.573207904-06:00","updated_at":"2025-12-11T23:32:45.200856775-06:00","closed_at":"2025-12-11T23:32:45.200856775-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-12p","depends_on_id":"opencode-agent-skills-md-w39","type":"blocks","created_at":"2025-12-11T23:25:24.90381016-06:00","created_by":"daemon"}]}
|
|
3
|
+
{"id":"opencode-agent-skills-md-2fl","title":"Add getSkillSummaries() to src/skills.ts","description":"Add getSkillSummaries(directory) function that returns Array\u003c{name: string, description: string}\u003e for all discovered skills. Used by preflight to build the evaluation prompt.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-11T23:24:59.806069936-06:00","updated_at":"2025-12-11T23:29:28.77719484-06:00","closed_at":"2025-12-11T23:29:28.77719484-06:00"}
|
|
4
|
+
{"id":"opencode-agent-skills-md-2kj","title":"Reorganize modules to break circular dependencies","description":"Create generic findFile() in utils.ts, remove SkillDiscoveryResult in favor of generic type, move injectSkillsList to skills.ts, reorder types closer to usage. Breaks skills.ts \u003c-\u003e claude.ts and skills.ts \u003c-\u003e utils.ts cycles.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-11T15:49:55.631292958-06:00","updated_at":"2025-12-11T15:53:56.102314236-06:00","closed_at":"2025-12-11T15:53:56.102314236-06:00"}
|
|
5
|
+
{"id":"opencode-agent-skills-md-2wy","title":"Implement Scott-style forced activation with simplified preflight","description":"Change preflight to simple JSON-only prompt (scalable) and inject Scott-style MANDATORY activation sequence instead of passive suggestions","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-12T01:45:42.327007206-06:00","updated_at":"2025-12-12T01:46:57.17318973-06:00","closed_at":"2025-12-12T01:46:57.17318973-06:00"}
|
|
6
|
+
{"id":"opencode-agent-skills-md-48v","title":"Delete analysis and testing scripts","description":"Remove check-scores.ts, check-threshold.ts, compare-models.ts, test-edge-cases.ts, validate-semantic.ts, model-analysis.json, EMBEDDING-ANALYSIS.md. Already archived to gist: https://gist.github.com/joshuadavidthomas/4558be551b30ae85580ed274377e92b8","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-12T12:48:05.245927007-06:00","updated_at":"2025-12-12T15:07:09.439063879-06:00","closed_at":"2025-12-12T15:07:09.439063879-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-48v","depends_on_id":"opencode-agent-skills-md-p7c","type":"blocks","created_at":"2025-12-12T12:48:09.283336316-06:00","created_by":"daemon"}]}
|
|
7
|
+
{"id":"opencode-agent-skills-md-4bx","title":"Improve meta-conversation detection in preflight prompt","description":"Add better detection for: numbered list responses, questions to assistant, short responses (yes/no/ok), and meta-discussion about implementation","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-12T01:54:45.542239383-06:00","updated_at":"2025-12-12T01:55:24.241097652-06:00","closed_at":"2025-12-12T01:55:24.241097652-06:00"}
|
|
8
|
+
{"id":"opencode-agent-skills-md-4it","title":"Epic: Replace LLM preflight with client-side skill matching","description":"Remove network-bound LLM preflight calls. Replace with instant local text search (MiniSearch) + heuristic meta-conversation gate. Keeps Scott-style commitment mechanism but eliminates Enter-key latency.","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-12T09:15:11.430889528-06:00","updated_at":"2025-12-12T09:45:19.308812089-06:00","closed_at":"2025-12-12T09:45:19.308812089-06:00"}
|
|
9
|
+
{"id":"opencode-agent-skills-md-4it.1","title":"Add minisearch dependency","description":"Install minisearch package for local BM25-style text search. ~10KB, works in Bun.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-12T09:15:17.238151507-06:00","updated_at":"2025-12-12T09:45:19.300761411-06:00","closed_at":"2025-12-12T09:45:19.300761411-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-4it.1","depends_on_id":"opencode-agent-skills-md-4it","type":"parent-child","created_at":"2025-12-12T09:15:17.238968454-06:00","created_by":"daemon"}]}
|
|
10
|
+
{"id":"opencode-agent-skills-md-4it.2","title":"Implement heuristic meta-conversation gate","description":"Add isMetaConversation() function with pattern matching for: short approvals (yes/no/ok), numbered answers, questions to assistant, meta-discussion phrases. Returns true to skip matching entirely.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-12T09:15:26.136915596-06:00","updated_at":"2025-12-12T09:45:19.301937006-06:00","closed_at":"2025-12-12T09:45:19.301937006-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-4it.2","depends_on_id":"opencode-agent-skills-md-4it","type":"parent-child","created_at":"2025-12-12T09:15:26.137904588-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-4it.2","depends_on_id":"opencode-agent-skills-md-4it.1","type":"blocks","created_at":"2025-12-12T09:16:15.767824344-06:00","created_by":"daemon"}]}
|
|
11
|
+
{"id":"opencode-agent-skills-md-4it.3","title":"Implement MiniSearch index building and querying","description":"Build search index over skill names+descriptions. Cache by skills hash. Query with user message, return top K above score threshold. Include debug logging of scores.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-12T09:15:32.627956135-06:00","updated_at":"2025-12-12T09:45:19.302988327-06:00","closed_at":"2025-12-12T09:45:19.302988327-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-4it.3","depends_on_id":"opencode-agent-skills-md-4it","type":"parent-child","created_at":"2025-12-12T09:15:32.628671088-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-4it.3","depends_on_id":"opencode-agent-skills-md-4it.1","type":"blocks","created_at":"2025-12-12T09:16:15.78034014-06:00","created_by":"daemon"}]}
|
|
12
|
+
{"id":"opencode-agent-skills-md-4it.4","title":"Create matchSkills() function combining gate + search","description":"Main entry point: (1) check heuristic gate, (2) run local search, (3) filter by threshold, (4) return MatchResult with skills and reason. Replace makePreflightCallWithTimeout().","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-12T09:15:38.215452325-06:00","updated_at":"2025-12-12T09:45:19.30420526-06:00","closed_at":"2025-12-12T09:45:19.30420526-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-4it.4","depends_on_id":"opencode-agent-skills-md-4it","type":"parent-child","created_at":"2025-12-12T09:15:38.216232181-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-4it.4","depends_on_id":"opencode-agent-skills-md-4it.2","type":"blocks","created_at":"2025-12-12T09:16:15.793587629-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-4it.4","depends_on_id":"opencode-agent-skills-md-4it.3","type":"blocks","created_at":"2025-12-12T09:16:15.806931651-06:00","created_by":"daemon"}]}
|
|
13
|
+
{"id":"opencode-agent-skills-md-4it.5","title":"Remove LLM preflight code from preflight.ts","description":"Delete: callAnthropicOAuth, callOpenAICompatibleOAuth, callAnthropicWithKey, callOpenAIWithKey, makePreflightCall, makePreflightCallWithTimeout, buildPreflightPrompt, parseSkillResponse. Also remove CHEAP_MODELS, auth types, related imports.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-12T09:15:46.806116093-06:00","updated_at":"2025-12-12T09:45:19.305027649-06:00","closed_at":"2025-12-12T09:45:19.305027649-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-4it.5","depends_on_id":"opencode-agent-skills-md-4it","type":"parent-child","created_at":"2025-12-12T09:15:46.806947967-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-4it.5","depends_on_id":"opencode-agent-skills-md-4it.4","type":"blocks","created_at":"2025-12-12T09:16:15.819133903-06:00","created_by":"daemon"}]}
|
|
14
|
+
{"id":"opencode-agent-skills-md-4it.6","title":"Simplify plugin.ts chat.message hook","description":"Update chat.message to use matchSkills() instead of LLM call. Remove chat.params hook (no longer needed). Remove sessionAuthCache, apiKeyAuth, ensureApiKeyAuth(). Much simpler hook logic.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-12T09:15:52.249796983-06:00","updated_at":"2025-12-12T09:45:19.306012194-06:00","closed_at":"2025-12-12T09:45:19.306012194-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-4it.6","depends_on_id":"opencode-agent-skills-md-4it","type":"parent-child","created_at":"2025-12-12T09:15:52.25056155-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-4it.6","depends_on_id":"opencode-agent-skills-md-4it.4","type":"blocks","created_at":"2025-12-12T09:16:15.832502342-06:00","created_by":"daemon"}]}
|
|
15
|
+
{"id":"opencode-agent-skills-md-4it.7","title":"Update injection block to 'evaluate then activate' pattern","description":"Change from MANDATORY ACTIVATION to SKILL EVALUATION. Add EVALUATE/DECIDE/ACTIVATE steps. Change from 'have been identified' to 'may be relevant'. Add 'No skills needed' escape path.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-12T09:15:58.113603696-06:00","updated_at":"2025-12-12T09:45:19.306949189-06:00","closed_at":"2025-12-12T09:45:19.306949189-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-4it.7","depends_on_id":"opencode-agent-skills-md-4it","type":"parent-child","created_at":"2025-12-12T09:15:58.114671536-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-4it.7","depends_on_id":"opencode-agent-skills-md-4it.6","type":"blocks","created_at":"2025-12-12T09:16:15.84510431-06:00","created_by":"daemon"}]}
|
|
16
|
+
{"id":"opencode-agent-skills-md-4it.8","title":"Test and validate client-side matching","description":"Verify: (1) Enter latency eliminated, (2) meta-conversation returns [], (3) real requests match correct skills, (4) scores logged for tuning. Run 8+ test messages from earlier session.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-12T09:16:03.904788308-06:00","updated_at":"2025-12-12T09:45:19.307839998-06:00","closed_at":"2025-12-12T09:45:19.307839998-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-4it.8","depends_on_id":"opencode-agent-skills-md-4it","type":"parent-child","created_at":"2025-12-12T09:16:03.905691797-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-4it.8","depends_on_id":"opencode-agent-skills-md-4it.5","type":"blocks","created_at":"2025-12-12T09:16:15.857964267-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-4it.8","depends_on_id":"opencode-agent-skills-md-4it.6","type":"blocks","created_at":"2025-12-12T09:16:15.870965821-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-4it.8","depends_on_id":"opencode-agent-skills-md-4it.7","type":"blocks","created_at":"2025-12-12T09:16:15.883835045-06:00","created_by":"daemon"}]}
|
|
17
|
+
{"id":"opencode-agent-skills-md-5rt","title":"Create src/preflight.ts - LLM preflight call logic","description":"Create preflight.ts with:\n- findCheapestModel(): Select Haiku \u003e gpt-4o-mini \u003e gemini-flash\n- makePreflightCall(): Support both OAuth fetch and API key auth\n- parseSkillResponse(): Extract JSON array from LLM response\n- PREFLIGHT_TIMEOUT_MS = 2000\n- Prompt template for skill evaluation","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-11T23:24:59.247808519-06:00","updated_at":"2025-12-11T23:30:37.370989544-06:00","closed_at":"2025-12-11T23:30:37.370989544-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-5rt","depends_on_id":"opencode-agent-skills-md-2fl","type":"blocks","created_at":"2025-12-11T23:25:23.765941577-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-5rt","depends_on_id":"opencode-agent-skills-md-bar","type":"blocks","created_at":"2025-12-11T23:25:23.78402797-06:00","created_by":"daemon"}]}
|
|
18
|
+
{"id":"opencode-agent-skills-md-5zo","title":"Refactor plugin.ts into modules","description":"","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-11T14:23:35.561297637-06:00","updated_at":"2025-12-11T14:30:33.091125737-06:00","closed_at":"2025-12-11T14:30:33.091125737-06:00"}
|
|
19
|
+
{"id":"opencode-agent-skills-md-5zo.1","title":"Create src/utils.ts with parsing and helper functions","description":"","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-11T14:23:39.074526959-06:00","updated_at":"2025-12-11T14:26:30.688903474-06:00","closed_at":"2025-12-11T14:26:30.688903474-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-5zo.1","depends_on_id":"opencode-agent-skills-md-5zo","type":"parent-child","created_at":"2025-12-11T14:23:39.075357181-06:00","created_by":"daemon"}]}
|
|
20
|
+
{"id":"opencode-agent-skills-md-5zo.2","title":"Create src/claude.ts with Claude Code compatibility","description":"","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-11T14:23:39.779815928-06:00","updated_at":"2025-12-11T14:25:38.866179258-06:00","closed_at":"2025-12-11T14:25:38.866179258-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-5zo.2","depends_on_id":"opencode-agent-skills-md-5zo","type":"parent-child","created_at":"2025-12-11T14:23:39.780578709-06:00","created_by":"daemon"}]}
|
|
21
|
+
{"id":"opencode-agent-skills-md-5zo.3","title":"Create src/skills.ts with core skill logic","description":"","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-11T14:23:40.433600824-06:00","updated_at":"2025-12-11T14:26:23.419210127-06:00","closed_at":"2025-12-11T14:26:23.419210127-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-5zo.3","depends_on_id":"opencode-agent-skills-md-5zo","type":"parent-child","created_at":"2025-12-11T14:23:40.434338347-06:00","created_by":"daemon"}]}
|
|
22
|
+
{"id":"opencode-agent-skills-md-5zo.4","title":"Create src/superpowers.ts with bootstrap logic","description":"","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-11T14:23:41.072413684-06:00","updated_at":"2025-12-11T14:26:41.291846921-06:00","closed_at":"2025-12-11T14:26:41.291846921-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-5zo.4","depends_on_id":"opencode-agent-skills-md-5zo","type":"parent-child","created_at":"2025-12-11T14:23:41.073221713-06:00","created_by":"daemon"}]}
|
|
23
|
+
{"id":"opencode-agent-skills-md-5zo.5","title":"Refactor src/plugin.ts to import from new modules","description":"","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-11T14:23:41.821033937-06:00","updated_at":"2025-12-11T14:29:45.359550825-06:00","closed_at":"2025-12-11T14:29:45.359550825-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-5zo.5","depends_on_id":"opencode-agent-skills-md-5zo","type":"parent-child","created_at":"2025-12-11T14:23:41.821804985-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-5zo.5","depends_on_id":"opencode-agent-skills-md-5zo.1","type":"blocks","created_at":"2025-12-11T14:23:51.808047095-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-5zo.5","depends_on_id":"opencode-agent-skills-md-5zo.2","type":"blocks","created_at":"2025-12-11T14:23:51.823527751-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-5zo.5","depends_on_id":"opencode-agent-skills-md-5zo.3","type":"blocks","created_at":"2025-12-11T14:23:51.843872058-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-5zo.5","depends_on_id":"opencode-agent-skills-md-5zo.4","type":"blocks","created_at":"2025-12-11T14:23:51.858312338-06:00","created_by":"daemon"}]}
|
|
24
|
+
{"id":"opencode-agent-skills-md-5zo.6","title":"Rename plugin.test.ts to utils.test.ts","description":"","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-11T14:23:42.414958849-06:00","updated_at":"2025-12-11T14:27:30.866711465-06:00","closed_at":"2025-12-11T14:27:30.866711465-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-5zo.6","depends_on_id":"opencode-agent-skills-md-5zo","type":"parent-child","created_at":"2025-12-11T14:23:42.415728975-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-5zo.6","depends_on_id":"opencode-agent-skills-md-5zo.1","type":"blocks","created_at":"2025-12-11T14:23:52.433028397-06:00","created_by":"daemon"}]}
|
|
25
|
+
{"id":"opencode-agent-skills-md-5zo.7","title":"Verify tests and typecheck pass","description":"","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-11T14:23:43.017035274-06:00","updated_at":"2025-12-11T14:30:23.601415553-06:00","closed_at":"2025-12-11T14:30:23.601415553-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-5zo.7","depends_on_id":"opencode-agent-skills-md-5zo","type":"parent-child","created_at":"2025-12-11T14:23:43.017979435-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-5zo.7","depends_on_id":"opencode-agent-skills-md-5zo.5","type":"blocks","created_at":"2025-12-11T14:23:53.299560946-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-5zo.7","depends_on_id":"opencode-agent-skills-md-5zo.6","type":"blocks","created_at":"2025-12-11T14:23:53.313004802-06:00","created_by":"daemon"}]}
|
|
26
|
+
{"id":"opencode-agent-skills-md-84f","title":"Modify UseSkill factory to accept onSkillLoaded callback","description":"Add optional callback parameter to UseSkill factory: onSkillLoaded?: (sessionID: string, skillName: string) =\u003e void. Call it after successful skill load in execute().","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-13T09:35:26.624000197-06:00","updated_at":"2025-12-13T09:41:29.005625873-06:00","closed_at":"2025-12-13T09:41:29.005625873-06:00"}
|
|
27
|
+
{"id":"opencode-agent-skills-md-924","title":"Investigate LLM eval for skill activation reliability","description":"Improve skill activation reliability using techniques from blog post: https://scottspence.com/posts/how-to-make-claude-code-skills-activate-reliably\n\nCurrently skills are injected as a passive list (~20% activation). Two approaches to improve:\n1. Forced eval: Assertive prompting requiring YES/NO evaluation (~84% success)\n2. LLM eval: Pre-evaluate with cheap model like Haiku (~80% success)\n\nKey findings:\n- chat.message hook fires on EVERY user message (not just first)\n- SDK's client.provider.list() may expose API keys\n- Plugins have full network access (fetch)\n\nNext steps:\n1. Test if client.provider.list() returns API keys\n2. Test making LLM call from within plugin\n3. Choose approach (forced eval vs LLM eval vs hybrid)\n\nHandoff gist: https://gist.github.com/joshuadavidthomas/c1aa97afa3cbf03313fd91c9b4e2f25a","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-11T19:03:57.752076888-06:00","updated_at":"2025-12-11T23:25:30.636361047-06:00","closed_at":"2025-12-11T23:25:30.636361047-06:00"}
|
|
28
|
+
{"id":"opencode-agent-skills-md-bar","title":"Add extractTextFromParts() to src/utils.ts","description":"Add extractTextFromParts(parts: Part[]) function that extracts user text content from message parts array. Returns concatenated text from all text-type parts.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-11T23:25:00.33258978-06:00","updated_at":"2025-12-11T23:29:28.778896977-06:00","closed_at":"2025-12-11T23:29:28.778896977-06:00"}
|
|
29
|
+
{"id":"opencode-agent-skills-md-boc","title":"Remove debugLog infrastructure","description":"Remove debug logging infrastructure that was used during development.\n\nDelete:\n- debugLog() function from src/utils.ts\n- initDebugLog() function from src/utils.ts \n- DEBUG_LOG_PATH variable from src/utils.ts\n- All debugLog calls from src/preflight.ts (8 calls)\n- debugLog import from src/preflight.ts\n- initDebugLog import and call from src/plugin.ts","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-12T13:56:02.395655356-06:00","updated_at":"2025-12-12T13:57:35.8985952-06:00","closed_at":"2025-12-12T13:57:35.8985952-06:00"}
|
|
30
|
+
{"id":"opencode-agent-skills-md-bry","title":"Extract common skill discovery pattern and fix redundant fs.stat() calls","description":"Extract tryDiscoverSkill() helper to eliminate 3 instances of duplicated SKILL.md validation. Add SkillDiscoveryResult type alias for cleaner function signatures. Fix 2 redundant fs.stat() calls in discoverPluginCacheSkills by using Dirent .isDirectory(). Affects: src/skills.ts and src/claude.ts","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-11T15:21:20.336139121-06:00","updated_at":"2025-12-11T15:23:58.531133265-06:00","closed_at":"2025-12-11T15:23:58.531133265-06:00"}
|
|
31
|
+
{"id":"opencode-agent-skills-md-dcn","title":"Epic: Improve skill matching accuracy with BM25 tuning + semantic search","description":"","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-12T10:25:51.502557921-06:00","updated_at":"2025-12-12T11:09:50.353841092-06:00","closed_at":"2025-12-12T11:09:50.353841092-06:00"}
|
|
32
|
+
{"id":"opencode-agent-skills-md-dcn.1","title":"Add stopword filtering to MiniSearch processTerm","description":"Add STOPWORDS set with common English words (it, is, this, that, in, on, at, to, a, the, etc). Implement processTerm function that returns null for stopwords. Should eliminate garbage matches from common words.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-12T10:25:58.613772536-06:00","updated_at":"2025-12-12T10:30:20.114858973-06:00","closed_at":"2025-12-12T10:30:20.114858973-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-dcn.1","depends_on_id":"opencode-agent-skills-md-dcn","type":"parent-child","created_at":"2025-12-12T10:25:58.614520149-06:00","created_by":"daemon"}]}
|
|
33
|
+
{"id":"opencode-agent-skills-md-dcn.10","title":"Integrate semantic scoring with existing matchSkills flow","description":"Options: (A) Replace BM25 entirely, (B) Hybrid: BM25 first-pass + semantic rerank, (C) Parallel: run both, combine scores. Likely A or B. Update matchSkills() to use semantic approach.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-12T10:26:21.649479137-06:00","updated_at":"2025-12-12T11:07:15.206786342-06:00","closed_at":"2025-12-12T11:07:15.206786342-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-dcn.10","depends_on_id":"opencode-agent-skills-md-dcn","type":"parent-child","created_at":"2025-12-12T10:26:21.650497571-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-dcn.10","depends_on_id":"opencode-agent-skills-md-dcn.9","type":"blocks","created_at":"2025-12-12T10:26:37.036363186-06:00","created_by":"daemon"}]}
|
|
34
|
+
{"id":"opencode-agent-skills-md-dcn.11","title":"Validate semantic search improvements","description":"Test semantic matching handles: (1) Conceptual synonyms ('make a chart' -\u003e xlsx), (2) Paraphrased requests, (3) Still filters meta-conversations correctly, (4) Latency acceptable (\u003c500ms). Compare to BM25 baseline.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-12T10:26:23.67912922-06:00","updated_at":"2025-12-12T11:09:48.265680418-06:00","closed_at":"2025-12-12T11:09:48.265680418-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-dcn.11","depends_on_id":"opencode-agent-skills-md-dcn","type":"parent-child","created_at":"2025-12-12T10:26:23.679920826-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-dcn.11","depends_on_id":"opencode-agent-skills-md-dcn.10","type":"blocks","created_at":"2025-12-12T10:26:37.050706931-06:00","created_by":"daemon"}]}
|
|
35
|
+
{"id":"opencode-agent-skills-md-dcn.2","title":"Add minimum term length filter (3 chars)","description":"Extend processTerm to return null for terms shorter than 3 characters. Prevents single-letter tokens like 's' from matching everything.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-12T10:26:00.011555125-06:00","updated_at":"2025-12-12T10:31:32.987313783-06:00","closed_at":"2025-12-12T10:31:32.987313783-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-dcn.2","depends_on_id":"opencode-agent-skills-md-dcn","type":"parent-child","created_at":"2025-12-12T10:26:00.012578599-06:00","created_by":"daemon"}]}
|
|
36
|
+
{"id":"opencode-agent-skills-md-dcn.3","title":"Add conditional fuzzy matching (only terms \u003e= 5 chars)","description":"Change fuzzy from constant 0.2 to function: (term) =\u003e term.length \u003e= 5 ? 0.2 : false. Prevents short terms from fuzzy-matching everything while keeping typo tolerance for longer terms.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-12T10:26:02.828033881-06:00","updated_at":"2025-12-12T10:32:36.464117675-06:00","closed_at":"2025-12-12T10:32:36.464117675-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-dcn.3","depends_on_id":"opencode-agent-skills-md-dcn","type":"parent-child","created_at":"2025-12-12T10:26:02.82892241-06:00","created_by":"daemon"}]}
|
|
37
|
+
{"id":"opencode-agent-skills-md-dcn.4","title":"Raise matching threshold from 10 to 15-20","description":"Increase score threshold to require stronger matches. Test with 15 first, may need 20. Goal: filter weak matches while keeping strong skill-relevant ones.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-12T10:26:03.975287131-06:00","updated_at":"2025-12-12T10:30:36.901572106-06:00","closed_at":"2025-12-12T10:30:36.901572106-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-dcn.4","depends_on_id":"opencode-agent-skills-md-dcn","type":"parent-child","created_at":"2025-12-12T10:26:03.976050413-06:00","created_by":"daemon"}]}
|
|
38
|
+
{"id":"opencode-agent-skills-md-dcn.5","title":"Test and validate BM25 improvements","description":"Test cases: (1) Meta-conversations return no skills, (2) Casual statements like 'let me check' return no skills, (3) Clear task requests match correct skills, (4) Verify threshold feels right. Check debug logs for scoring.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-12T10:26:06.162413251-06:00","updated_at":"2025-12-12T10:34:14.261632187-06:00","closed_at":"2025-12-12T10:34:14.261632187-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-dcn.5","depends_on_id":"opencode-agent-skills-md-dcn","type":"parent-child","created_at":"2025-12-12T10:26:06.163235434-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-dcn.5","depends_on_id":"opencode-agent-skills-md-dcn.1","type":"blocks","created_at":"2025-12-12T10:26:34.468026386-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-dcn.5","depends_on_id":"opencode-agent-skills-md-dcn.2","type":"blocks","created_at":"2025-12-12T10:26:34.482038735-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-dcn.5","depends_on_id":"opencode-agent-skills-md-dcn.3","type":"blocks","created_at":"2025-12-12T10:26:34.495828854-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-dcn.5","depends_on_id":"opencode-agent-skills-md-dcn.4","type":"blocks","created_at":"2025-12-12T10:26:34.508849038-06:00","created_by":"daemon"}]}
|
|
39
|
+
{"id":"opencode-agent-skills-md-dcn.6","title":"Research smallest viable embedding model for skill matching","description":"Investigate options: all-MiniLM-L6-v2 (~90MB), all-minilm-L6-v2-quantized (~23MB), or smaller alternatives. Consider transformers.js, onnxruntime-node, or @xenova/transformers. Goal: \u003c50MB model, \u003c200ms latency per query.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-12T10:26:13.03224829-06:00","updated_at":"2025-12-12T11:00:39.291009748-06:00","closed_at":"2025-12-12T11:00:39.291009748-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-dcn.6","depends_on_id":"opencode-agent-skills-md-dcn","type":"parent-child","created_at":"2025-12-12T10:26:13.033009769-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-dcn.6","depends_on_id":"opencode-agent-skills-md-dcn.5","type":"blocks","created_at":"2025-12-12T10:26:38.745089094-06:00","created_by":"daemon"}]}
|
|
40
|
+
{"id":"opencode-agent-skills-md-dcn.7","title":"Add embedding model dependency","description":"Add chosen embedding library (likely @xenova/transformers or similar). Ensure works with Bun runtime. May need to handle first-use model download gracefully.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-12T10:26:15.007031396-06:00","updated_at":"2025-12-12T11:00:55.798419021-06:00","closed_at":"2025-12-12T11:00:55.798419021-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-dcn.7","depends_on_id":"opencode-agent-skills-md-dcn","type":"parent-child","created_at":"2025-12-12T10:26:15.007841767-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-dcn.7","depends_on_id":"opencode-agent-skills-md-dcn.6","type":"blocks","created_at":"2025-12-12T10:26:36.99354849-06:00","created_by":"daemon"}]}
|
|
41
|
+
{"id":"opencode-agent-skills-md-dcn.8","title":"Implement skill embedding at plugin startup","description":"Pre-compute embeddings for all skill names+descriptions at startup. Cache embeddings keyed by skills hash (similar to MiniSearch cache). Store as Float32Array for efficient cosine similarity.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-12T10:26:16.994992361-06:00","updated_at":"2025-12-12T11:03:07.672235974-06:00","closed_at":"2025-12-12T11:03:07.672235974-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-dcn.8","depends_on_id":"opencode-agent-skills-md-dcn","type":"parent-child","created_at":"2025-12-12T10:26:16.995919203-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-dcn.8","depends_on_id":"opencode-agent-skills-md-dcn.7","type":"blocks","created_at":"2025-12-12T10:26:37.007913826-06:00","created_by":"daemon"}]}
|
|
42
|
+
{"id":"opencode-agent-skills-md-dcn.9","title":"Implement semantic query function","description":"Create semanticMatchSkills(query, embeddings) that: (1) embeds query, (2) computes cosine similarity with each skill, (3) returns skills above threshold sorted by score. Include debug logging of semantic scores.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-12T10:26:19.126863877-06:00","updated_at":"2025-12-12T11:10:17.678978383-06:00","closed_at":"2025-12-12T11:10:17.678978383-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-dcn.9","depends_on_id":"opencode-agent-skills-md-dcn","type":"parent-child","created_at":"2025-12-12T10:26:19.127629604-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-dcn.9","depends_on_id":"opencode-agent-skills-md-dcn.8","type":"blocks","created_at":"2025-12-12T10:26:37.021853888-06:00","created_by":"daemon"}]}
|
|
43
|
+
{"id":"opencode-agent-skills-md-jwn","title":"Improve error messages with 'Did you mean...' fuzzy matching suggestions","description":"","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-11T13:45:59.966290839-06:00","updated_at":"2025-12-11T13:58:20.685001906-06:00","closed_at":"2025-12-11T13:58:20.685001906-06:00"}
|
|
44
|
+
{"id":"opencode-agent-skills-md-jwn.1","title":"Add levenshtein() utility function","description":"Implement Levenshtein edit distance algorithm (~15 lines). Used as fallback when prefix/substring matching doesn't apply.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-11T13:46:05.638538153-06:00","updated_at":"2025-12-11T13:53:40.957288768-06:00","closed_at":"2025-12-11T13:53:40.957288768-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-jwn.1","depends_on_id":"opencode-agent-skills-md-jwn","type":"parent-child","created_at":"2025-12-11T13:46:05.639979417-06:00","created_by":"daemon"}]}
|
|
45
|
+
{"id":"opencode-agent-skills-md-jwn.2","title":"Add findClosestMatch() utility function","description":"Combined scoring function: prefix match (0.9+), substring match (0.7), then Levenshtein similarity. Returns best match above 0.4 threshold. Case-insensitive.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-11T13:46:07.156957664-06:00","updated_at":"2025-12-11T13:54:05.909120919-06:00","closed_at":"2025-12-11T13:54:05.909120919-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-jwn.2","depends_on_id":"opencode-agent-skills-md-jwn","type":"parent-child","created_at":"2025-12-11T13:46:07.158254775-06:00","created_by":"daemon"}]}
|
|
46
|
+
{"id":"opencode-agent-skills-md-jwn.3","title":"Update use_skill error handling with fuzzy suggestion","description":"Replace 'Available skills: ...' with 'Did you mean X?' when close match found. Fall back to 'Use find_skills to list available skills.' when no close match.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-11T13:46:08.778750232-06:00","updated_at":"2025-12-11T13:54:27.954767995-06:00","closed_at":"2025-12-11T13:54:27.954767995-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-jwn.3","depends_on_id":"opencode-agent-skills-md-jwn","type":"parent-child","created_at":"2025-12-11T13:46:08.779801606-06:00","created_by":"daemon"}]}
|
|
47
|
+
{"id":"opencode-agent-skills-md-jwn.4","title":"Update read_skill_file error handling with fuzzy suggestion","description":"Add 'Did you mean X?' suggestion when skill name not found.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-11T13:46:09.735123758-06:00","updated_at":"2025-12-11T13:54:45.777229713-06:00","closed_at":"2025-12-11T13:54:45.777229713-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-jwn.4","depends_on_id":"opencode-agent-skills-md-jwn","type":"parent-child","created_at":"2025-12-11T13:46:09.735972859-06:00","created_by":"daemon"}]}
|
|
48
|
+
{"id":"opencode-agent-skills-md-jwn.5","title":"Update run_skill_script error handling with fuzzy suggestion","description":"Add 'Did you mean X?' suggestion for both skill name AND script name when not found.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-11T13:46:10.656976953-06:00","updated_at":"2025-12-11T13:55:07.387865399-06:00","closed_at":"2025-12-11T13:55:07.387865399-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-jwn.5","depends_on_id":"opencode-agent-skills-md-jwn","type":"parent-child","created_at":"2025-12-11T13:46:10.657734991-06:00","created_by":"daemon"}]}
|
|
49
|
+
{"id":"opencode-agent-skills-md-jwn.6","title":"Update find_skills error handling with fuzzy suggestion","description":"When query returns no matches, suggest closest skill names if any are above threshold.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-11T13:46:11.763574596-06:00","updated_at":"2025-12-11T13:55:29.184292267-06:00","closed_at":"2025-12-11T13:55:29.184292267-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-jwn.6","depends_on_id":"opencode-agent-skills-md-jwn","type":"parent-child","created_at":"2025-12-11T13:46:11.7648945-06:00","created_by":"daemon"}]}
|
|
50
|
+
{"id":"opencode-agent-skills-md-jwn.7","title":"Add tests for fuzzy matching","description":"Test cases: exact match (no suggestion), typo correction, prefix matching, substring matching, no close matches (threshold), case insensitivity.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-11T13:46:13.041546168-06:00","updated_at":"2025-12-11T13:57:51.802893881-06:00","closed_at":"2025-12-11T13:57:51.802893881-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-jwn.7","depends_on_id":"opencode-agent-skills-md-jwn","type":"parent-child","created_at":"2025-12-11T13:46:13.042363669-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-jwn.7","depends_on_id":"opencode-agent-skills-md-jwn.9","type":"blocks","created_at":"2025-12-11T13:49:20.33710095-06:00","created_by":"daemon"}]}
|
|
51
|
+
{"id":"opencode-agent-skills-md-jwn.8","title":"Update CHANGELOG with fuzzy matching feature","description":"Add entry for 'Did you mean...' suggestions in error messages. Document which tools are affected and the matching behavior (prefix, substring, Levenshtein).","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-11T13:48:17.35661447-06:00","updated_at":"2025-12-11T13:58:06.715608912-06:00","closed_at":"2025-12-11T13:58:06.715608912-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-jwn.8","depends_on_id":"opencode-agent-skills-md-jwn","type":"parent-child","created_at":"2025-12-11T13:48:17.357437599-06:00","created_by":"daemon"}]}
|
|
52
|
+
{"id":"opencode-agent-skills-md-jwn.9","title":"Set up test infrastructure","description":"Create initial test setup with Bun's built-in test runner. Add first test file structure and verify bun test works.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-11T13:49:15.113973313-06:00","updated_at":"2025-12-11T13:56:00.020805462-06:00","closed_at":"2025-12-11T13:56:00.020805462-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-jwn.9","depends_on_id":"opencode-agent-skills-md-jwn","type":"parent-child","created_at":"2025-12-11T13:49:15.11574767-06:00","created_by":"daemon"}]}
|
|
53
|
+
{"id":"opencode-agent-skills-md-lls","title":"Clear loaded skills on session compaction and deletion","description":"In event handler: delete session from loadedSkillsPerSession Map on session.compacted and session.deleted events.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-13T09:35:30.716512177-06:00","updated_at":"2025-12-13T09:42:50.021871373-06:00","closed_at":"2025-12-13T09:42:50.021871373-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-lls","depends_on_id":"opencode-agent-skills-md-rfb","type":"blocks","created_at":"2025-12-13T09:35:36.383152451-06:00","created_by":"daemon"}]}
|
|
54
|
+
{"id":"opencode-agent-skills-md-oz2","title":"Implement XML structure for preflight skill list","description":"Improve preflight LLM evaluation with chain-of-thought reasoning, generic examples showing description matching, and fuzzy name matching","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-12T01:16:15.414554173-06:00","updated_at":"2025-12-12T01:31:29.436407384-06:00","closed_at":"2025-12-12T01:31:29.436407384-06:00"}
|
|
55
|
+
{"id":"opencode-agent-skills-md-p7c","title":"Simplify embedding module - remove multi-model architecture","description":"Remove ModelConfig registry, EmbeddingStrategy, and model selection code. Hardcode all-MiniLM-L6-v2 with q8 quantization. Delete models.ts, simplify service.ts constructor to take no arguments. Keep only summary strategy (name+description). Analysis archived: https://gist.github.com/joshuadavidthomas/4558be551b30ae85580ed274377e92b8","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-12T12:47:54.325567393-06:00","updated_at":"2025-12-12T13:20:28.859010712-06:00","closed_at":"2025-12-12T13:20:28.859015551-06:00"}
|
|
56
|
+
{"id":"opencode-agent-skills-md-qu3","title":"Fix UI freeze caused by blocking client.provider.list() call","description":"","status":"closed","priority":0,"issue_type":"bug","created_at":"2025-12-12T00:07:21.205982359-06:00","updated_at":"2025-12-12T00:28:47.270436291-06:00","closed_at":"2025-12-12T00:28:47.270436291-06:00"}
|
|
57
|
+
{"id":"opencode-agent-skills-md-rfb","title":"Add loadedSkillsPerSession Map and helper function in plugin.ts","description":"Create Map\u003cstring, Set\u003cstring\u003e\u003e to track loaded skills per session. Add getLoadedSkills() helper that gets or creates the Set for a session ID.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-13T09:35:24.78553656-06:00","updated_at":"2025-12-13T09:41:06.044630093-06:00","closed_at":"2025-12-13T09:41:06.044630093-06:00"}
|
|
58
|
+
{"id":"opencode-agent-skills-md-rfo","title":"Track loaded skills per session to prevent duplicate suggestions","description":"","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-13T09:35:19.363758592-06:00","updated_at":"2025-12-13T09:44:39.413145134-06:00","closed_at":"2025-12-13T09:44:39.413145134-06:00"}
|
|
59
|
+
{"id":"opencode-agent-skills-md-tfm","title":"Simplify discoverAllSkills and remove redundant label parameters","description":"Refactor discoverAllSkills to collect all SkillDiscoveryResult[] into one array then process once. Remove unnecessary label parameter from discoverPluginCacheSkills and discoverMarketplaceSkills since they always return claude-plugins.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-11T15:38:05.508946799-06:00","updated_at":"2025-12-11T15:39:16.212259904-06:00","closed_at":"2025-12-11T15:39:16.212259904-06:00"}
|
|
60
|
+
{"id":"opencode-agent-skills-md-u02","title":"Extract tools to src/tools.ts with factory pattern","description":"","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-11T14:37:13.744183768-06:00","updated_at":"2025-12-11T14:43:32.866267257-06:00","closed_at":"2025-12-11T14:43:32.866267257-06:00"}
|
|
61
|
+
{"id":"opencode-agent-skills-md-vqf","title":"Test and verify preflight skill activation","description":"Manual testing:\n1. New session, first message: verify nothing additional injected\n2. Second message about git: verify git-helper suggested\n3. Message about brainstorming: verify brainstorming suggested \n4. Unrelated message: verify nothing injected\n5. Verify 2s timeout behavior","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-11T23:25:02.568442005-06:00","updated_at":"2025-12-12T00:42:07.216446838-06:00","closed_at":"2025-12-12T00:42:07.216446838-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-vqf","depends_on_id":"opencode-agent-skills-md-w39","type":"blocks","created_at":"2025-12-11T23:25:25.415332153-06:00","created_by":"daemon"}]}
|
|
62
|
+
{"id":"opencode-agent-skills-md-w39","title":"Update src/plugin.ts with preflight integration","description":"Update plugin.ts with:\n- Module-level sessionAuthCache Map\u003csessionID, {oauthFetch, providerId, baseURL}\u003e\n- Module-level apiKeyAuth captured at plugin init\n- chat.params hook to cache OAuth fetch\n- Modified chat.message hook for preflight flow\n- event hook to cleanup sessionAuthCache on session.deleted\n- Inject matched skill summaries (not full content)","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-11T23:25:00.964213171-06:00","updated_at":"2025-12-11T23:32:22.893089296-06:00","closed_at":"2025-12-11T23:32:22.893089296-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-w39","depends_on_id":"opencode-agent-skills-md-5rt","type":"blocks","created_at":"2025-12-11T23:25:24.388171337-06:00","created_by":"daemon"}]}
|
|
63
|
+
{"id":"opencode-agent-skills-md-yam","title":"Wire up UseSkill callback to register loaded skills","description":"In plugin.ts tool registration, pass callback to UseSkill that adds skill name to session's loaded skills Set.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-13T09:35:28.051043987-06:00","updated_at":"2025-12-13T09:42:38.599555025-06:00","closed_at":"2025-12-13T09:42:38.599555025-06:00","dependencies":[{"issue_id":"opencode-agent-skills-md-yam","depends_on_id":"opencode-agent-skills-md-rfb","type":"blocks","created_at":"2025-12-13T09:35:36.341709891-06:00","created_by":"daemon"},{"issue_id":"opencode-agent-skills-md-yam","depends_on_id":"opencode-agent-skills-md-84f","type":"blocks","created_at":"2025-12-13T09:35:36.354898717-06:00","created_by":"daemon"}]}
|
|
64
|
+
{"id":"opencode-agent-skills-md-zg5","title":"Strengthen preflight prompt to prevent skill name hallucination","description":"Reframe as selection task, add explicit process steps, strengthen 'only select existing names' rule, add WRONG vs RIGHT examples to prevent LLM from generating plausible-sounding names that don't exist","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-12T01:59:25.754868036-06:00","updated_at":"2025-12-12T02:00:18.373225671-06:00","closed_at":"2025-12-12T02:00:18.373225671-06:00"}
|
package/.gitattributes
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
* @joshuadavidthomas
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# GitHub Copilot Instructions
|
|
2
|
+
|
|
3
|
+
## Issue Tracking with bd
|
|
4
|
+
|
|
5
|
+
This project uses **bd (beads)** for issue tracking - a Git-backed tracker designed for AI-supervised coding workflows.
|
|
6
|
+
|
|
7
|
+
**Key Features:**
|
|
8
|
+
- Dependency-aware issue tracking
|
|
9
|
+
- Auto-sync with Git via JSONL
|
|
10
|
+
- AI-optimized CLI with JSON output
|
|
11
|
+
- Built-in daemon for background operations
|
|
12
|
+
- MCP server integration for Claude and other AI assistants
|
|
13
|
+
|
|
14
|
+
**CRITICAL**: Use bd for ALL task tracking. Do NOT create markdown TODO lists.
|
|
15
|
+
|
|
16
|
+
### Essential Commands
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Find work
|
|
20
|
+
bd ready --json # Unblocked issues
|
|
21
|
+
bd stale --days 30 --json # Forgotten issues
|
|
22
|
+
|
|
23
|
+
# Create and manage
|
|
24
|
+
bd create "Title" -t bug|feature|task -p 0-4 --json
|
|
25
|
+
bd create "Subtask" --parent <epic-id> --json # Hierarchical subtask
|
|
26
|
+
bd update <id> --status in_progress --json
|
|
27
|
+
bd close <id> --reason "Done" --json
|
|
28
|
+
|
|
29
|
+
# Search
|
|
30
|
+
bd list --status open --priority 1 --json
|
|
31
|
+
bd show <id> --json
|
|
32
|
+
|
|
33
|
+
# Sync (CRITICAL at end of session!)
|
|
34
|
+
bd sync # Force immediate export/commit/push
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Workflow
|
|
38
|
+
|
|
39
|
+
1. **Check ready work**: `bd ready --json`
|
|
40
|
+
2. **Claim task**: `bd update <id> --status in_progress`
|
|
41
|
+
3. **Work on it**: Implement, test, document
|
|
42
|
+
4. **Discover new work?** `bd create \"Found bug\" -p 1 --deps discovered-from:<parent-id> --json`
|
|
43
|
+
5. **Complete**: `bd close <id> --reason \"Done\" --json`
|
|
44
|
+
6. **Sync**: `bd sync` (flushes changes to git immediately)
|
|
45
|
+
|
|
46
|
+
### Priorities
|
|
47
|
+
|
|
48
|
+
- `0` - Critical (security, data loss, broken builds)
|
|
49
|
+
- `1` - High (major features, important bugs)
|
|
50
|
+
- `2` - Medium (default, nice-to-have)
|
|
51
|
+
- `3` - Low (polish, optimization)
|
|
52
|
+
- `4` - Backlog (future ideas)
|
|
53
|
+
|
|
54
|
+
### Git Workflow
|
|
55
|
+
|
|
56
|
+
- Always commit `.beads/issues.jsonl` with code changes
|
|
57
|
+
- Run `bd sync` at end of work sessions
|
|
58
|
+
- Install git hooks: `bd hooks install` (ensures DB ↔ JSONL consistency)
|
|
59
|
+
|
|
60
|
+
### MCP Server (Recommended)
|
|
61
|
+
|
|
62
|
+
For MCP-compatible clients (Claude Desktop, etc.), install the beads MCP server:
|
|
63
|
+
- Install: `pip install beads-mcp`
|
|
64
|
+
- Functions: `mcp__beads__ready()`, `mcp__beads__create()`, etc.
|
|
65
|
+
|
|
66
|
+
## CLI Help
|
|
67
|
+
|
|
68
|
+
Run `bd <command> --help` to see all available flags for any command.
|
|
69
|
+
For example: `bd create --help` shows `--parent`, `--deps`, `--assignee`, etc.
|
|
70
|
+
|
|
71
|
+
## Important Rules
|
|
72
|
+
|
|
73
|
+
- ✅ Use bd for ALL task tracking
|
|
74
|
+
- ✅ Always use `--json` flag for programmatic use
|
|
75
|
+
- ✅ Run `bd sync` at end of sessions
|
|
76
|
+
- ✅ Run `bd <cmd> --help` to discover available flags
|
|
77
|
+
- ❌ Do NOT create markdown TODO lists
|
|
78
|
+
- ❌ Do NOT commit `.beads/beads.db` (JSONL only)
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
name: release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
publish:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
environment: release
|
|
11
|
+
permissions:
|
|
12
|
+
contents: write
|
|
13
|
+
id-token: write
|
|
14
|
+
attestations: write
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v6
|
|
17
|
+
|
|
18
|
+
- name: Setup pnpm
|
|
19
|
+
uses: pnpm/action-setup@v4
|
|
20
|
+
with:
|
|
21
|
+
version: 10
|
|
22
|
+
|
|
23
|
+
- name: Setup Node.js
|
|
24
|
+
uses: actions/setup-node@v6
|
|
25
|
+
with:
|
|
26
|
+
node-version: "22"
|
|
27
|
+
registry-url: "https://registry.npmjs.org"
|
|
28
|
+
cache: pnpm
|
|
29
|
+
|
|
30
|
+
- name: Install dependencies
|
|
31
|
+
run: pnpm install --frozen-lockfile
|
|
32
|
+
|
|
33
|
+
- name: Typecheck
|
|
34
|
+
run: pnpm run typecheck
|
|
35
|
+
|
|
36
|
+
- name: Build package
|
|
37
|
+
run: pnpm pack
|
|
38
|
+
|
|
39
|
+
- name: Generate artifact attestation
|
|
40
|
+
uses: actions/attest-build-provenance@v4
|
|
41
|
+
with:
|
|
42
|
+
subject-path: "./*.tgz"
|
|
43
|
+
|
|
44
|
+
- name: Upload release assets to GitHub
|
|
45
|
+
env:
|
|
46
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
47
|
+
run: |
|
|
48
|
+
gh release upload ${{ github.event.release.tag_name }} ./*.tgz
|
|
49
|
+
|
|
50
|
+
- name: Publish to npm
|
|
51
|
+
run: npm publish
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Verify skills list was re-injected after compaction
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Run this after manually triggering compaction to verify the skills plugin re-injected the available skills list.
|
|
6
|
+
|
|
7
|
+
1. Use `find_skills` to confirm skills are still discoverable
|
|
8
|
+
2. Use `use_skill` to load `test-skill` to confirm the tool still works
|
|
9
|
+
3. Report whether the `<available-skills>` block is visible in context
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Test the find_skills tool
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Use `find_skills` to list all available skills. Then try filtering with a query like `find_skills` with query "test".
|
|
6
|
+
|
|
7
|
+
Report what skills were found and verify the output format shows name, source label, and description.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Test the read_skill_file tool
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Test `read_skill_file` with different file types from `test-skill`:
|
|
6
|
+
|
|
7
|
+
1. Load `helper-docs.md` - a markdown documentation file
|
|
8
|
+
2. Load `example-config.json` - a JSON configuration file
|
|
9
|
+
|
|
10
|
+
Verify that:
|
|
11
|
+
1. Both files are injected with XML structure (`<skill-file>`, `<metadata>`, `<content>` tags)
|
|
12
|
+
2. The metadata includes the skill directory path
|
|
13
|
+
3. The tool returns a confirmation message for each file
|
|
14
|
+
4. Try loading a non-existent file and verify it lists available files in the error
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Test the run_skill_script tool
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Test `run_skill_script` with scripts from `test-skill`:
|
|
6
|
+
|
|
7
|
+
1. Run the `greet` script with no arguments
|
|
8
|
+
2. Run the `echo-args` script with arguments: `foo`, `bar`, `--baz`
|
|
9
|
+
|
|
10
|
+
Verify that:
|
|
11
|
+
1. The `greet` script outputs "Hello from test-skill!" and shows the CWD is the skill directory
|
|
12
|
+
2. The `echo-args` script correctly echoes back all arguments passed
|
|
13
|
+
3. Try running a non-existent script and verify it lists available scripts in the error
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Run a full test of all skills plugin tools
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Test all 4 skills plugin tools in sequence:
|
|
6
|
+
|
|
7
|
+
1. First, use `find_skills` to list all available skills
|
|
8
|
+
2. Then use `use_skill` to load the `test-skill` skill
|
|
9
|
+
3. Use `read_skill_file` to load `helper-docs.md` from `test-skill`
|
|
10
|
+
4. Use `read_skill_file` to load `example-config.json` from `test-skill`
|
|
11
|
+
5. Use `run_skill_script` to run the `greet` script from `test-skill`
|
|
12
|
+
6. Use `run_skill_script` to run the `echo-args` script from `test-skill` with arguments: `hello world --test`
|
|
13
|
+
|
|
14
|
+
Report the results of each step, noting any errors or unexpected behavior.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Test the use_skill tool
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Use `use_skill` to load the `test-skill` skill.
|
|
6
|
+
|
|
7
|
+
Verify that:
|
|
8
|
+
1. The skill content is injected with XML structure (`<skill>`, `<metadata>`, `<content>` tags)
|
|
9
|
+
2. The metadata includes source, directory, and scripts (if any)
|
|
10
|
+
3. The tool returns a confirmation message with available scripts listed
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: git-helper
|
|
3
|
+
description: Provides git workflow assistance, branch management, and commit message optimization
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Git Helper
|
|
7
|
+
|
|
8
|
+
A comprehensive skill for git workflow management and best practices.
|
|
9
|
+
|
|
10
|
+
## Quick Start
|
|
11
|
+
|
|
12
|
+
Use this skill when you need help with:
|
|
13
|
+
- Branch creation and management
|
|
14
|
+
- Commit message formatting
|
|
15
|
+
- Git workflow optimization
|
|
16
|
+
- Repository maintenance
|
|
17
|
+
|
|
18
|
+
## Common Workflows
|
|
19
|
+
|
|
20
|
+
### Creating a New Feature Branch
|
|
21
|
+
```bash
|
|
22
|
+
git checkout -b feature/your-feature-name
|
|
23
|
+
git push -u origin feature/your-feature-name
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Writing Good Commit Messages
|
|
27
|
+
|
|
28
|
+
Follow the conventional commit format:
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
type(scope): description
|
|
32
|
+
|
|
33
|
+
[optional body]
|
|
34
|
+
|
|
35
|
+
[optional footer]
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Types: feat, fix, docs, style, refactor, test, chore
|
|
39
|
+
|
|
40
|
+
### Git Cleanup Commands
|
|
41
|
+
|
|
42
|
+
# Remove stale branches
|
|
43
|
+
```bash
|
|
44
|
+
git remote prune origin
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
# Clean up local branches
|
|
48
|
+
```bash
|
|
49
|
+
git branch -d branch-name
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Scripts
|
|
53
|
+
|
|
54
|
+
This skill includes helper scripts:
|
|
55
|
+
|
|
56
|
+
• `create-branch.sh` - Creates new feature branches with proper naming
|
|
57
|
+
• `commit-check.sh` - Validates commit message format
|
|
58
|
+
• `cleanup.sh` - Removes stale branches
|
|
59
|
+
|
|
60
|
+
## Best Practices
|
|
61
|
+
|
|
62
|
+
1. Always pull latest changes before creating branches
|
|
63
|
+
2. Use descriptive branch names with prefixes (feature/, bugfix/, hotfix/)
|
|
64
|
+
3. Write atomic commits (one logical change per commit)
|
|
65
|
+
4. Keep commit messages under 72 characters for the subject line
|