Repository navigation
Share one host table, ship one payload, split optional deps - #208
Merged
Merged
Conversation
- tools/hosts.json is the single host path table, read by bin/distilly.mjs and tools/hosts.py (install_distilly, install_generated_skill, install_claude_generated_skill, skill_writer). - package.json "files" is the single publish list; the npm CLI and the Python installer both derive the install payload from it, so the Python installer no longer copies docs/, tests/ or .github/ into skill dirs and now supports all eight hosts. - requirements.txt keeps only requests; collector extras move to requirements-optional.txt. - Ruff is pinned with an explicit rule set and blocks CI; fix its findings. - tests/_paths.py replaces the sys.path boilerplate in 11 test files. - Rename the cover image to docs/social-preview.png so redesigns stop adding versioned files. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014AQdagxHQtDiYDXHNMsRSK
An installed copy has no package.json, so install_distilly.py copies it whole (minus caches) instead of failing to read the publish list. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014AQdagxHQtDiYDXHNMsRSK
titanwings
force-pushed
the
chore/shared-hosts-and-deps
branch
from
October 13, 2026 05:35
8724b42 to
734fcf8
Compare
titanwings
changed the base branch from
cleanup/unused-files-and-installers
to
dot-skill
October 13, 2026 05:35
titanwings
marked this pull request as ready for review
October 13, 2026 05:35
A stacked PR retargeted after its base merges gets no CI run until the next push; workflow_dispatch lets a maintainer start one. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014AQdagxHQtDiYDXHNMsRSK
8 tasks done
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Tianyi · project thread
Summary
Before: host install paths were written in three places, and the publish list in two.
install_distilly.pycopied the whole repo (docs, tests, .github) into skill directories and only knew about 3 hosts.requirements.txtmixedrequestswith Playwright, Slack and other optional packages. Ruff ran as|| true, and 11 test files repeated the samesys.pathboilerplate.After:
tools/hosts.jsonis the only host table, andpackage.jsonfilesis the only publish list. The npm CLI and the Python installer both read them, so they install the same files into the same 8 hosts. Optional deps live inrequirements-optional.txt, Ruff can now fail CI, and the tests sharetests/_paths.py.Rebased onto
dot-skillafter #206 and #209.Changes
tools/hosts.jsonand thetools/hosts.pyloader.bin/distilly.mjs,install_distilly.py,install_generated_skill.py,install_claude_generated_skill.pyandskill_writer.pyall read it. The aliases (claude,deepseek,grok) and theDSH_HOMEoverride are in the table too. No install path changes.bin/distilly.mjsderivespayloadEntriesfrompackage.jsonfiles(minusbin/).install_distilly.pycopies the same entries and accepts all 8 hosts. It checks that every entry exists before it touches the destination. Run from an already-installed copy, which has nopackage.json, it copies that copy whole, minus caches.requirements.txtkeeps onlyrequests. Collector extras move torequirements-optional.txt, which is added to the npmfileslist. INSTALL.md, INSTALL_EN.md, CONTRIBUTING.md and the PR template mention the new file, and CI installs both.ruff.tomlsets an explicit rule set (E4,E7,E9,F). CI runsruff check tools/ tests/without|| true. Its findings are fixed: placeholder-less f-strings, unused imports, a shadowed import, an unused variable intranscribe_audio.py, and two style issues in the e2e mock.workflow_dispatch, so a maintainer can start a run by hand. Retargeting a stacked PR after its base merges does not start one.tests/_paths.py, which replaces thesys.pathblock in 11 test files.test_install_distilly.py:test_skill_entrypoint_docs.py: only the one assertion this change breaks is adjusted, because the codex path now lives inhosts.json.docs/social-preview-distilly-v10.pngtodocs/social-preview.pngand update the 8 READMEs, so the next redesign replaces the file instead of adding a new one.Motivation
Repo structure cleanup. Adding a host used to mean editing 3 to 4 files, and the two installers shipped different things.
Testing
python -m unittest discover -s tests -p 'test_*.py'passed (117 tests) on Python 3.13 and 3.9, after the rebasepython -m compileall tools/passedruff check tools/ tests/passesnpm packtarball,distilly install <host>for all 8 hosts, the 3 aliases andDSH_HOME. Paths are unchanged, and the installedprompts/has Split SKILL.md into a short router with on-demand flows, tidy prompts/ #209's layout.install_distilly.py --host <host>for all 8 hosts produces the same file tree as npm.skill_writer.py --install-{claude,codex,openclaw}-skillwith the Claude command shim, plusinstall_generated_skill.py --hostfor hermes, deepseek-harness, pi, grok-build and opencode. All land in the same paths as before.Checklist
requirements.txtorrequirements-optional.txt(if any)🤖 Generated with Claude Code
https://claude.ai/code/session_014AQdagxHQtDiYDXHNMsRSK