Skip to content

root/ directory files not installed when package is installed from GitHub URL #43

@toppimb-abv

Description

@toppimb-abv

Description

Files under the root/ directory in a package are correctly installed when the package is installed from a local path, but are silently skipped when the same package is installed from a GitHub URL.

Reproduction

Package structure

The package at plugins/qmd in this repo has a standard openpackage structure with a root/ directory:

plugins/qmd/
├── openpackage.yml
├── skills/
│   └── qmd/
│       └── SKILL.md
└── root/
    └── .opencode/
        └── plugins/
            └── qmd-hooks.ts

The openpackage.yml is a standard manifest:

name: qmd
version: 0.1.0
description: Local markdown search engine
keywords: [search, markdown, qmd]
author: PDCOE
license: proprietary

Steps to reproduce

1. Install from local path (works correctly):

mkdir -p /tmp/test-local/.opencode
cd /tmp/test-local
opkg install /path/to/plugins/qmd --platforms opencode

Output:

✓ Installed qmd@0.1.0
✓ Installed files: 1
  └── .opencode/skills/qmd/SKILL.md
✓ Root files: 1 file(s)
  └── .opencode/plugins/qmd-hooks.ts (created)

Both the skill and the root file are installed. The generated openpackage.index.yml includes:

packages:
  qmd:
    files:
      root/.opencode/plugins/qmd-hooks.ts:
        - .opencode/plugins/qmd-hooks.ts
      skills/qmd/SKILL.md:
        - .opencode/skills/qmd/SKILL.md

2. Install from GitHub URL (root file missing):

mkdir -p /tmp/test-github/.opencode
cd /tmp/test-github
opkg install https://github.com/AA-PDCOE/claude-plugins/tree/main/plugins/qmd --platforms opencode

Output:

✓ Installed gh@aa-pdcoe/claude-plugins/plugins/qmd@0.1.0
✓ Installed files: 1
  └── .opencode/skills/qmd/SKILL.md

Only the skill is installed. No "Root files" line appears. The generated openpackage.index.yml does not include the root file:

packages:
  gh@aa-pdcoe/claude-plugins/plugins/qmd:
    files:
      skills/qmd/SKILL.md:
        - .opencode/skills/qmd/SKILL.md
    path: ~/.openpackage/cache/git/a5ca109a936c/bcf58c8/plugins/qmd
    version: 0.1.0

3. Verified the file exists in opkg's git cache:

ls ~/.openpackage/cache/git/a5ca109a936c/bcf58c8/plugins/qmd/root/.opencode/plugins/
# qmd-hooks.ts  <-- file IS present in the cache

The file is correctly cloned — it's just not being processed during installation.

Additional data point

This is not specific to the qmd package. In the same repo, the obsidian-markdown plugin has an identical root/ structure. When installed locally it tracks the root file; when installed from GitHub it does not:

# Local install — root file tracked:
obsidian-markdown:
  files:
    root/.opencode/plugins/obsidian-markdown-hooks.ts:
      - .opencode/plugins/obsidian-markdown-hooks.ts

# GitHub install — root file NOT tracked:
gh@aa-pdcoe/claude-plugins/plugins/obsidian-markdown:
  files:
    skills/obsidian-markdown/SKILL.md:
      - .opencode/skills/obsidian-markdown/SKILL.md

Expected behavior

Files under root/ in a package should be installed to the workspace root (with the root/ prefix stripped) regardless of whether the package is installed from a local path or a GitHub URL.

Actual behavior

Files under root/ are silently skipped when installing from a GitHub URL. No error or warning is shown.

Environment

  • opkg version: 0.10.0 (also reproduced on 0.9.0)
  • Node.js: v25.7.0
  • OS: macOS (Darwin)

Notes

  • opkg view <github-url> does list the root file as an "other" resource, so the file is recognized during package analysis — it's just not installed.
  • The repo contains a .claude-plugin/marketplace.json at the root. It's possible that the GitHub URL install path is detecting the repo as a Claude Code plugin marketplace and using the claude-plugin export flows (which have a **/* -> **/* passthrough catch-all) instead of the standard openpackage flows (which have root/**/* -> **/*). But this is speculative.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions