fix(#2705): fetch full skill directories from URL bases via forge API - #2706
fix(#2705): fetch full skill directories from URL bases via forge API#2706fullsend-ai-coder[bot] wants to merge 1 commit into
Conversation
URL-base skill resolution (introduced in PR #2690) only fetched SKILL.md via plain HTTP, silently dropping companion files (sub-agents/, scripts/, meta-prompts/). This broke the review agent for all per-org .fullsend installations because pr-review depends on sub-agents/*.md to dispatch parallel specialized reviewers. The fix adds a ForgeClient field to ComposeOpts and uses the forge API (ListDirectoryContents + GetFileContentAtRef) to fetch the complete skill directory tree when resolving skills from URL-referenced bases. The raw raw.githubusercontent.com URL is parsed to extract owner/repo/ref/path for forge API calls. When ForgeClient is not available (e.g., no GitHub token), the existing SKILL.md-only fallback is preserved with the warning from PR #2697. When the base URL is not a raw.githubusercontent.com URL, it also falls back gracefully. Changes: - compose.go: Add ForgeClient to ComposeOpts, add fetchBaseSkillViaForge for full directory fetch, add parseRawGitHubContentURL helper, extract fetchBaseSkillFallback for non-GitHub URL bases - run.go: Create ForgeClient before LoadWithBase (best-effort from GH_TOKEN/GITHUB_TOKEN/gh auth) - lock.go: Same ForgeClient creation for lock command - compose_test.go: Add tests for forge-based fetch (with companion files, cache hit, non-raw URL fallback, nil ForgeClient), and unit tests for parseRawGitHubContentURL Closes #2705
E2E tests did not runE2E tests run automatically for org/repo members and collaborators on pull requests. For other contributors, a maintainer must add the See E2E testing guide for details. |
Site previewPreview: https://c1184e7f-site.fullsend-ai.workers.dev Commit: |
Codecov Report❌ Patch coverage is 📢 Thoughts on this report? Let us know! |
|
This pull request has been automatically marked as stale because it has not had any activity in the last month. It will be closed in 2 weeks if no further activity occurs. Remove the |
|
Duplicate of #2707 |
|
🤖 Finished Retro · ✅ Success · Started 7:04 PM UTC · Completed 7:19 PM UTC |
Retro: PR #2706 — agent fix for #2705 closed as duplicateWhat happenedIssue #2705 reported a critical production outage: v0.22.0 URL-base skill resolution dropped companion files ( The code agent produced PR #2706 in ~18 minutes — a structurally sound fix adding Meanwhile, the issue reporter ( Quality deltaThe agent and human PRs took the same architectural approach but differed in thoroughness:
The human reviewer ( Corroborating evidence for existing issuesAll improvement opportunities from this retro are already tracked by existing open issues:
AssessmentThe code agent performed well on speed (18-minute turnaround) and took a structurally correct approach. The primary failure was systemic, not agent-quality: the review dispatch gap meant no feedback loop existed to iterate the agent's PR toward the quality level that human review drove on PR #2707. With review enabled, the agent fix could have been iterable. The dispatch gap has now been addressed by #5706, and the remaining cleanup and quality improvements are tracked by the issues above. No new proposals are warranted. |
URL-base skill resolution (introduced in PR #2690) only fetched SKILL.md via plain HTTP, silently dropping companion files (sub-agents/, scripts/, meta-prompts/). This broke the review agent for all per-org .fullsend installations because pr-review depends on sub-agents/*.md to dispatch parallel specialized reviewers.
The fix adds a ForgeClient field to ComposeOpts and uses the forge API (ListDirectoryContents + GetFileContentAtRef) to fetch the complete skill directory tree when resolving skills from URL-referenced bases. The raw raw.githubusercontent.com URL is parsed to extract owner/repo/ref/path for forge API calls.
When ForgeClient is not available (e.g., no GitHub token), the existing SKILL.md-only fallback is preserved with the warning from PR #2697. When the base URL is not a raw.githubusercontent.com URL, it also falls back gracefully.
Changes:
for full directory fetch, add parseRawGitHubContentURL helper, extract
fetchBaseSkillFallback for non-GitHub URL bases
GH_TOKEN/GITHUB_TOKEN/gh auth)
cache hit, non-raw URL fallback, nil ForgeClient), and unit tests for
parseRawGitHubContentURL
Closes #2705
Post-script verification
agent/2705-url-base-skill-companion-files)a06f8626676fdf389f65cc18ea89798f846f689e..HEAD)