dynamic-skills 0.1.0__tar.gz

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.
Files changed (38) hide show
  1. dynamic_skills-0.1.0/.github/workflows/ci.yml +51 -0
  2. dynamic_skills-0.1.0/.github/workflows/release.yml +92 -0
  3. dynamic_skills-0.1.0/.gitignore +12 -0
  4. dynamic_skills-0.1.0/CHANGELOG.md +35 -0
  5. dynamic_skills-0.1.0/LICENSE +21 -0
  6. dynamic_skills-0.1.0/PKG-INFO +545 -0
  7. dynamic_skills-0.1.0/README.md +523 -0
  8. dynamic_skills-0.1.0/RELEASING.md +78 -0
  9. dynamic_skills-0.1.0/assets/logo.svg +11 -0
  10. dynamic_skills-0.1.0/assets/memory-analogy.svg +57 -0
  11. dynamic_skills-0.1.0/assets/skill-lifecycle.svg +73 -0
  12. dynamic_skills-0.1.0/assets/wordmark.svg +16 -0
  13. dynamic_skills-0.1.0/pyproject.toml +39 -0
  14. dynamic_skills-0.1.0/scripts/check_dist.py +50 -0
  15. dynamic_skills-0.1.0/scripts/check_pypi.py +33 -0
  16. dynamic_skills-0.1.0/scripts/smoke_install.py +73 -0
  17. dynamic_skills-0.1.0/src/dynamic_skills/__init__.py +3 -0
  18. dynamic_skills-0.1.0/src/dynamic_skills/__main__.py +3 -0
  19. dynamic_skills-0.1.0/src/dynamic_skills/adapters.py +81 -0
  20. dynamic_skills-0.1.0/src/dynamic_skills/bundled/dynamic-skills/SKILL.md +35 -0
  21. dynamic_skills-0.1.0/src/dynamic_skills/cli.py +601 -0
  22. dynamic_skills-0.1.0/src/dynamic_skills/errors.py +6 -0
  23. dynamic_skills-0.1.0/src/dynamic_skills/files.py +178 -0
  24. dynamic_skills-0.1.0/src/dynamic_skills/migration.py +268 -0
  25. dynamic_skills-0.1.0/src/dynamic_skills/pool.py +397 -0
  26. dynamic_skills-0.1.0/src/dynamic_skills/project.py +484 -0
  27. dynamic_skills-0.1.0/src/dynamic_skills/sources.py +132 -0
  28. dynamic_skills-0.1.0/src/dynamic_skills/transaction.py +140 -0
  29. dynamic_skills-0.1.0/tests/__init__.py +0 -0
  30. dynamic_skills-0.1.0/tests/conftest.py +29 -0
  31. dynamic_skills-0.1.0/tests/test_cli.py +81 -0
  32. dynamic_skills-0.1.0/tests/test_migration.py +120 -0
  33. dynamic_skills-0.1.0/tests/test_packages.py +398 -0
  34. dynamic_skills-0.1.0/tests/test_pool.py +112 -0
  35. dynamic_skills-0.1.0/tests/test_project.py +390 -0
  36. dynamic_skills-0.1.0/tests/test_regressions.py +125 -0
  37. dynamic_skills-0.1.0/tests/test_sources.py +81 -0
  38. dynamic_skills-0.1.0/uv.lock +452 -0
@@ -0,0 +1,51 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main, 'feat/**']
6
+ pull_request:
7
+ workflow_dispatch:
8
+ workflow_call:
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ concurrency:
14
+ group: ci-${{ github.ref }}
15
+ cancel-in-progress: true
16
+
17
+ jobs:
18
+ test:
19
+ name: ${{ matrix.os }} / Python ${{ matrix.python }}
20
+ runs-on: ${{ matrix.os }}
21
+ strategy:
22
+ fail-fast: false
23
+ matrix:
24
+ os: [ubuntu-latest, macos-latest, windows-latest]
25
+ python: ['3.11', '3.13']
26
+ steps:
27
+ - uses: actions/checkout@v7.0.1
28
+ - uses: astral-sh/setup-uv@v10.0.1
29
+ with:
30
+ python-version: ${{ matrix.python }}
31
+ enable-cache: true
32
+ - run: uv sync --locked --group dev
33
+ - run: uv run ruff check src tests scripts
34
+ - run: uv run ruff format --check src tests scripts
35
+ - run: uv run pytest --cov=dynamic_skills --cov-report=term-missing
36
+ - run: uv build
37
+ - run: uv run python scripts/check_dist.py
38
+ - run: uvx --from twine twine check --strict dist/*
39
+ - name: Smoke test installed wheel and sdist
40
+ shell: bash
41
+ run: |
42
+ for artifact in dist/*.whl dist/*.tar.gz; do
43
+ uv run --isolated --no-project --with "$artifact" python scripts/smoke_install.py
44
+ done
45
+ - name: Preserve verified release distributions
46
+ if: matrix.os == 'ubuntu-latest' && matrix.python == '3.11'
47
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
48
+ with:
49
+ name: distributions
50
+ path: dist/
51
+ if-no-files-found: error
@@ -0,0 +1,92 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags: ['v*']
6
+ workflow_dispatch:
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ concurrency:
12
+ group: release-${{ github.ref }}
13
+ cancel-in-progress: false
14
+
15
+ jobs:
16
+ validate:
17
+ runs-on: ubuntu-latest
18
+ steps:
19
+ - uses: actions/checkout@v7.0.1
20
+ with:
21
+ fetch-depth: 0
22
+ - name: Require a release tag on main
23
+ env:
24
+ RELEASE_REF: ${{ github.ref }}
25
+ run: |
26
+ [[ "$RELEASE_REF" =~ ^refs/tags/v[0-9]+\.[0-9]+\.[0-9]+$ ]]
27
+ git merge-base --is-ancestor HEAD origin/main
28
+
29
+ checks:
30
+ needs: validate
31
+ uses: ./.github/workflows/ci.yml
32
+
33
+ publish:
34
+ needs: checks
35
+ runs-on: ubuntu-latest
36
+ environment:
37
+ name: pypi
38
+ url: https://pypi.org/project/dynamic-skills/
39
+ permissions:
40
+ contents: read
41
+ id-token: write
42
+ steps:
43
+ - uses: actions/checkout@v7.0.1
44
+ - uses: astral-sh/setup-uv@v10.0.1
45
+ with:
46
+ python-version: '3.11'
47
+ - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
48
+ with:
49
+ name: distributions
50
+ path: dist/
51
+ - name: Verify tag and distribution versions
52
+ env:
53
+ RELEASE_TAG: ${{ github.ref_name }}
54
+ run: uv run --no-project python scripts/check_dist.py "$RELEASE_TAG"
55
+ - name: Reject conflicting files on retries
56
+ run: uv run --no-project python scripts/check_pypi.py
57
+ - name: Publish to PyPI using Trusted Publishing
58
+ uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
59
+ with:
60
+ skip-existing: true
61
+
62
+ github-release:
63
+ needs: publish
64
+ runs-on: ubuntu-latest
65
+ permissions:
66
+ contents: write
67
+ steps:
68
+ - uses: actions/checkout@v7.0.1
69
+ - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
70
+ with:
71
+ name: distributions
72
+ path: dist/
73
+ - name: Publish GitHub release and checksums
74
+ env:
75
+ GH_TOKEN: ${{ github.token }}
76
+ RELEASE_TAG: ${{ github.ref_name }}
77
+ run: |
78
+ sha256sum dist/* > SHA256SUMS
79
+ python - <<'PY'
80
+ import os
81
+ from pathlib import Path
82
+ version = os.environ['RELEASE_TAG'][1:]
83
+ text = Path('CHANGELOG.md').read_text()
84
+ notes = text.split(f'## [{version}]', 1)[1].split('\n## [', 1)[0]
85
+ Path('release-notes.md').write_text(notes.strip() + '\n')
86
+ PY
87
+ if ! gh release view "$RELEASE_TAG" >/dev/null 2>&1; then
88
+ gh release create "$RELEASE_TAG" --verify-tag --draft \
89
+ --title "$RELEASE_TAG (Alpha)" --notes-file release-notes.md
90
+ fi
91
+ gh release upload "$RELEASE_TAG" dist/* SHA256SUMS --clobber
92
+ gh release edit "$RELEASE_TAG" --draft=false --latest
@@ -0,0 +1,12 @@
1
+ .venv/
2
+ __pycache__/
3
+ *.py[cod]
4
+ .pytest_cache/
5
+ .ruff_cache/
6
+ .coverage
7
+ htmlcov/
8
+ dist/
9
+ *.egg-info/
10
+ .code-review-graph/
11
+ .codegraph/
12
+ .vscode/
@@ -0,0 +1,35 @@
1
+ # Changelog
2
+
3
+ ## [0.1.0]
4
+
5
+ First public release of Dynamic Skills (`dskills`), an Alpha CLI for a versioned
6
+ local skill pool and explicit project skill selection.
7
+
8
+ ### Included
9
+
10
+ - Import local and Git skills with complete resources, content hashes and provenance.
11
+ - Activate pinned skills for Codex, Claude Code, Kimi Code and Pi; preview changes,
12
+ synchronize project outputs, unplug skills and undo project changes.
13
+ - Preserve unmanaged files and local edits, with process locks, transactional
14
+ writes and explicit interrupted-operation recovery.
15
+ - Inventory and migrate global skills with reversible backups and restore support.
16
+ - Organize skills with tags/categories, additive reusable packages and pinned presets.
17
+ - Search and read skills through a versioned JSON CLI interface and an optional
18
+ bundled bridge skill; inspect local operation statistics and health diagnostics.
19
+ - Keep project metadata local by default, with opt-in Git tracking of configuration
20
+ and exact lockfile pins.
21
+
22
+ ### Compatibility and limitations
23
+
24
+ - Python 3.11+; automated CI covers Linux, macOS and Windows on Python 3.11 and 3.13.
25
+ - Both `dskills` and `dynamic-skills` are supported CLI entry points.
26
+ - JSON responses use `schema_version: 1`. Alpha releases may change interfaces or
27
+ metadata formats; consult release notes before upgrading and retain backups.
28
+ - Native agent discovery depends on agent versions and configuration. Removing a
29
+ skill does not erase instructions already loaded into a conversation.
30
+ - Local source paths are not inherently portable. Cross-filesystem migration with
31
+ deactivation is unsupported; symlink mode depends on filesystem permissions.
32
+ - No skill scripts run on import, activation or reading. Imported skills retain
33
+ their own licenses; execution and trust remain the user's responsibility.
34
+
35
+ [0.1.0]: https://github.com/M1racleShih/dynamic-skills/releases/tag/v0.1.0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 M1racleShih
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.