packwright 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.
- packwright-0.1.0/.github/ISSUE_TEMPLATE/adapter_request.yml +45 -0
- packwright-0.1.0/.github/ISSUE_TEMPLATE/bug_report.yml +31 -0
- packwright-0.1.0/.github/ISSUE_TEMPLATE/config.yml +5 -0
- packwright-0.1.0/.github/ISSUE_TEMPLATE/feature_request.yml +17 -0
- packwright-0.1.0/.github/pull_request_template.md +10 -0
- packwright-0.1.0/.github/workflows/ci.yml +53 -0
- packwright-0.1.0/.github/workflows/pages.yml +51 -0
- packwright-0.1.0/.github/workflows/release.yml +50 -0
- packwright-0.1.0/CHANGELOG.md +37 -0
- packwright-0.1.0/CONTRIBUTING.md +48 -0
- packwright-0.1.0/LICENSE +21 -0
- packwright-0.1.0/MANIFEST.in +16 -0
- packwright-0.1.0/PKG-INFO +213 -0
- packwright-0.1.0/README.md +179 -0
- packwright-0.1.0/README.zh-CN.md +179 -0
- packwright-0.1.0/SECURITY.md +11 -0
- packwright-0.1.0/assets/fonts/OFL-Fraunces.txt +93 -0
- packwright-0.1.0/assets/fonts/OFL-IBM-Plex-Mono.txt +93 -0
- packwright-0.1.0/assets/fonts/OFL-Inter.txt +93 -0
- packwright-0.1.0/assets/fonts/OFL-Packwright-Han-Serif.txt +96 -0
- packwright-0.1.0/assets/fonts/fraunces-latin-600.woff2 +0 -0
- packwright-0.1.0/assets/fonts/ibm-plex-mono-latin-400.woff2 +0 -0
- packwright-0.1.0/assets/fonts/ibm-plex-mono-latin-500.woff2 +0 -0
- packwright-0.1.0/assets/fonts/inter-latin-400-600.woff2 +0 -0
- packwright-0.1.0/assets/fonts/packwright-han-serif-600.otf +0 -0
- packwright-0.1.0/assets/mark-dark.svg +1 -0
- packwright-0.1.0/assets/mark-light.svg +1 -0
- packwright-0.1.0/assets/social-preview.png +0 -0
- packwright-0.1.0/assets/social-preview.svg +34 -0
- packwright-0.1.0/assets/tokens.css +41 -0
- packwright-0.1.0/docs/AGENT_ARCHETYPES.md +115 -0
- packwright-0.1.0/docs/CHARACTER_DRAFTING.md +99 -0
- packwright-0.1.0/docs/CLI.md +108 -0
- packwright-0.1.0/docs/CODEX_CHARACTER_WORKFLOW.md +102 -0
- packwright-0.1.0/docs/EMOTION_ENGINE.md +51 -0
- packwright-0.1.0/docs/USE_WITH_YOUR_AGENT.md +44 -0
- packwright-0.1.0/docs/releases/0.1.0.md +50 -0
- packwright-0.1.0/docs/releases/0.1.0rc1.md +48 -0
- packwright-0.1.0/examples/atlas-work/emotion/memory-events.yaml +17 -0
- packwright-0.1.0/examples/atlas-work/emotion/model.yaml +31 -0
- packwright-0.1.0/examples/atlas-work/emotion/state-schema.yaml +22 -0
- packwright-0.1.0/examples/atlas-work/emotion/update-policy.yaml +53 -0
- packwright-0.1.0/examples/atlas-work/emotion/voice-modulation.yaml +15 -0
- packwright-0.1.0/examples/atlas-work/identity/persona.md +39 -0
- packwright-0.1.0/examples/atlas-work/identity/relationship.md +15 -0
- packwright-0.1.0/examples/atlas-work/identity/voice.md +32 -0
- packwright-0.1.0/examples/atlas-work/mechanism/context-loading.yaml +39 -0
- packwright-0.1.0/examples/atlas-work/mechanism/memory-policy.yaml +84 -0
- packwright-0.1.0/examples/atlas-work/mechanism/session-guards.yaml +18 -0
- packwright-0.1.0/examples/atlas-work/mechanism.yaml +542 -0
- packwright-0.1.0/examples/atlas-work/memory/collaboration.md +16 -0
- packwright-0.1.0/examples/atlas-work/memory/emotion-state.json.example +25 -0
- packwright-0.1.0/examples/atlas-work/memory/index.md +33 -0
- packwright-0.1.0/examples/atlas-work/memory/knowledge_map.md +10 -0
- packwright-0.1.0/examples/atlas-work/memory/pinned.md +11 -0
- packwright-0.1.0/examples/atlas-work/memory/profile.md +24 -0
- packwright-0.1.0/examples/atlas-work/memory/projects/_template.md +25 -0
- packwright-0.1.0/examples/atlas-work/memory/recent-activity.md +9 -0
- packwright-0.1.0/examples/atlas-work/memory/relationship-state.md +17 -0
- packwright-0.1.0/examples/atlas-work/memory/session-index.md +11 -0
- packwright-0.1.0/examples/atlas-work/memory/source-map.md +18 -0
- packwright-0.1.0/examples/atlas-work/memory/todos.md +9 -0
- packwright-0.1.0/examples/atlas-work/memory/workstreams/_template.md +35 -0
- packwright-0.1.0/examples/atlas-work/memory/workstreams.md +43 -0
- packwright-0.1.0/examples/atlas-work/operating/boundaries.md +23 -0
- packwright-0.1.0/examples/atlas-work/operating/principles.md +21 -0
- packwright-0.1.0/examples/atlas-work/projection/ownership-contract.yaml +69 -0
- packwright-0.1.0/examples/atlas-work/projection/platform-capabilities.yaml +42 -0
- packwright-0.1.0/examples/atlas-work/skills/save-context/SKILL.md +22 -0
- packwright-0.1.0/examples/atlas-work/workspace/README.md +19 -0
- packwright-0.1.0/examples/atlas-work/workspace/_template/archive/.gitkeep +1 -0
- packwright-0.1.0/examples/atlas-work/workspace/_template/artifacts/.gitkeep +1 -0
- packwright-0.1.0/examples/atlas-work/workspace/_template/drafts/.gitkeep +1 -0
- packwright-0.1.0/examples/atlas-work/workspace/shared/.gitkeep +1 -0
- packwright-0.1.0/examples/character_intake.relationship.yaml +35 -0
- packwright-0.1.0/examples/character_intake.yaml +15 -0
- packwright-0.1.0/pyproject.toml +49 -0
- packwright-0.1.0/scripts/audit_public_tree.py +113 -0
- packwright-0.1.0/scripts/audit_zero_network.py +294 -0
- packwright-0.1.0/scripts/release-gate.sh +96 -0
- packwright-0.1.0/setup.cfg +4 -0
- packwright-0.1.0/site/demo.js +199 -0
- packwright-0.1.0/site/index.html +344 -0
- packwright-0.1.0/site/zh-CN.html +347 -0
- packwright-0.1.0/specs/reserved/emotion-engine.yaml +21 -0
- packwright-0.1.0/specs/reserved/runtime-surface.yaml +16 -0
- packwright-0.1.0/src/packwright/__init__.py +3 -0
- packwright-0.1.0/src/packwright/__main__.py +5 -0
- packwright-0.1.0/src/packwright/adapters/__init__.py +10 -0
- packwright-0.1.0/src/packwright/adapters/claude_code.py +377 -0
- packwright-0.1.0/src/packwright/adapters/codex.py +311 -0
- packwright-0.1.0/src/packwright/adapters/cursor.py +375 -0
- packwright-0.1.0/src/packwright/checker/__init__.py +3 -0
- packwright-0.1.0/src/packwright/checker/scoring.py +924 -0
- packwright-0.1.0/src/packwright/cli.py +971 -0
- packwright-0.1.0/src/packwright/core/__init__.py +57 -0
- packwright-0.1.0/src/packwright/core/adapter_layout.py +35 -0
- packwright-0.1.0/src/packwright/core/adopt.py +199 -0
- packwright-0.1.0/src/packwright/core/character_intake.py +1649 -0
- packwright-0.1.0/src/packwright/core/emotion_engine_contract.py +147 -0
- packwright-0.1.0/src/packwright/core/errors.py +13 -0
- packwright-0.1.0/src/packwright/core/handoff.py +531 -0
- packwright-0.1.0/src/packwright/core/install.py +2114 -0
- packwright-0.1.0/src/packwright/core/intake_contract.py +105 -0
- packwright-0.1.0/src/packwright/core/knowledge_contract.py +212 -0
- packwright-0.1.0/src/packwright/core/loader.py +35 -0
- packwright-0.1.0/src/packwright/core/memory_projection.py +126 -0
- packwright-0.1.0/src/packwright/core/naming.py +98 -0
- packwright-0.1.0/src/packwright/core/pack_metadata.py +100 -0
- packwright-0.1.0/src/packwright/core/path_safety.py +70 -0
- packwright-0.1.0/src/packwright/core/resolver.py +66 -0
- packwright-0.1.0/src/packwright/core/validation.py +645 -0
- packwright-0.1.0/src/packwright/core/workspace_contract.py +102 -0
- packwright-0.1.0/src/packwright.egg-info/PKG-INFO +213 -0
- packwright-0.1.0/src/packwright.egg-info/SOURCES.txt +119 -0
- packwright-0.1.0/src/packwright.egg-info/dependency_links.txt +1 -0
- packwright-0.1.0/src/packwright.egg-info/entry_points.txt +2 -0
- packwright-0.1.0/src/packwright.egg-info/requires.txt +9 -0
- packwright-0.1.0/src/packwright.egg-info/top_level.txt +1 -0
- packwright-0.1.0/tests/test_mvp_chain.py +2445 -0
- packwright-0.1.0/tests/test_release_audits.py +396 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
name: Adapter request
|
|
2
|
+
description: Propose a runtime after checking its official file and extension contracts.
|
|
3
|
+
title: "[adapter] "
|
|
4
|
+
labels: [adapter]
|
|
5
|
+
body:
|
|
6
|
+
- type: input
|
|
7
|
+
id: runtime
|
|
8
|
+
attributes:
|
|
9
|
+
label: Runtime
|
|
10
|
+
placeholder: Runtime and current version
|
|
11
|
+
validations:
|
|
12
|
+
required: true
|
|
13
|
+
- type: textarea
|
|
14
|
+
id: documentation
|
|
15
|
+
attributes:
|
|
16
|
+
label: Official documentation
|
|
17
|
+
description: Link the runtime's official instructions, rules, skills, or extension documentation.
|
|
18
|
+
placeholder: One URL per line
|
|
19
|
+
validations:
|
|
20
|
+
required: true
|
|
21
|
+
- type: textarea
|
|
22
|
+
id: layout
|
|
23
|
+
attributes:
|
|
24
|
+
label: Native file layout
|
|
25
|
+
description: Where does this runtime expect instructions, reusable skills, memory routing, and project rules?
|
|
26
|
+
validations:
|
|
27
|
+
required: true
|
|
28
|
+
- type: textarea
|
|
29
|
+
id: boundaries
|
|
30
|
+
attributes:
|
|
31
|
+
label: Known projection boundaries
|
|
32
|
+
description: What Packwright state or behavior cannot be represented in this runtime?
|
|
33
|
+
validations:
|
|
34
|
+
required: true
|
|
35
|
+
- type: dropdown
|
|
36
|
+
id: testing
|
|
37
|
+
attributes:
|
|
38
|
+
label: Real-runtime testing
|
|
39
|
+
description: Can you test generated packs in an actual installation?
|
|
40
|
+
options:
|
|
41
|
+
- Yes, I can test locally
|
|
42
|
+
- I can help review but not run it
|
|
43
|
+
- No
|
|
44
|
+
validations:
|
|
45
|
+
required: true
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
name: Bug report
|
|
2
|
+
description: Report a reproducible Packwright defect using synthetic data.
|
|
3
|
+
title: "[bug] "
|
|
4
|
+
body:
|
|
5
|
+
- type: input
|
|
6
|
+
id: version
|
|
7
|
+
attributes:
|
|
8
|
+
label: Packwright version
|
|
9
|
+
placeholder: Output of packwright --version
|
|
10
|
+
validations:
|
|
11
|
+
required: true
|
|
12
|
+
- type: dropdown
|
|
13
|
+
id: adapter
|
|
14
|
+
attributes:
|
|
15
|
+
label: Adapter
|
|
16
|
+
options: [codex, claude-code, cursor, not adapter-specific]
|
|
17
|
+
validations:
|
|
18
|
+
required: true
|
|
19
|
+
- type: textarea
|
|
20
|
+
id: reproduce
|
|
21
|
+
attributes:
|
|
22
|
+
label: Reproduction
|
|
23
|
+
description: Include commands and sanitized output. Never attach real memory or credentials.
|
|
24
|
+
validations:
|
|
25
|
+
required: true
|
|
26
|
+
- type: textarea
|
|
27
|
+
id: expected
|
|
28
|
+
attributes:
|
|
29
|
+
label: Expected behavior
|
|
30
|
+
validations:
|
|
31
|
+
required: true
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
name: Feature request
|
|
2
|
+
description: Propose a focused improvement to the public v0.1 workflow.
|
|
3
|
+
title: "[feature] "
|
|
4
|
+
body:
|
|
5
|
+
- type: textarea
|
|
6
|
+
id: problem
|
|
7
|
+
attributes:
|
|
8
|
+
label: Problem
|
|
9
|
+
description: What user problem should Packwright solve?
|
|
10
|
+
validations:
|
|
11
|
+
required: true
|
|
12
|
+
- type: textarea
|
|
13
|
+
id: outcome
|
|
14
|
+
attributes:
|
|
15
|
+
label: Desired outcome
|
|
16
|
+
validations:
|
|
17
|
+
required: true
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
## Summary
|
|
2
|
+
|
|
3
|
+
Describe the user-visible change and its v0.1 scope.
|
|
4
|
+
|
|
5
|
+
## Verification
|
|
6
|
+
|
|
7
|
+
- [ ] `scripts/release-gate.sh --quick`
|
|
8
|
+
- [ ] Tests cover the changed behavior
|
|
9
|
+
- [ ] No real memory, credentials, private paths, or build artifacts are included
|
|
10
|
+
- [ ] Migration changes preserve dry-run, confirmation, and receipt semantics
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
env:
|
|
11
|
+
PACKWRIGHT_PUBLIC_AUDIT_REVISION: ${{ github.event.pull_request.head.sha }}
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
test:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
strategy:
|
|
17
|
+
fail-fast: false
|
|
18
|
+
matrix:
|
|
19
|
+
python: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v6
|
|
22
|
+
with:
|
|
23
|
+
fetch-depth: 0
|
|
24
|
+
- name: Fetch pull request head for public audit
|
|
25
|
+
if: github.event_name == 'pull_request'
|
|
26
|
+
run: git fetch --no-tags origin "pull/${{ github.event.number }}/head"
|
|
27
|
+
- uses: actions/setup-python@v6
|
|
28
|
+
with:
|
|
29
|
+
python-version: ${{ matrix.python }}
|
|
30
|
+
- run: python -m pip install -e '.[test]'
|
|
31
|
+
- run: scripts/release-gate.sh --quick
|
|
32
|
+
|
|
33
|
+
package:
|
|
34
|
+
runs-on: ubuntu-latest
|
|
35
|
+
steps:
|
|
36
|
+
- uses: actions/checkout@v6
|
|
37
|
+
with:
|
|
38
|
+
fetch-depth: 0
|
|
39
|
+
- name: Fetch pull request head for public audit
|
|
40
|
+
if: github.event_name == 'pull_request'
|
|
41
|
+
run: git fetch --no-tags origin "pull/${{ github.event.number }}/head"
|
|
42
|
+
- uses: actions/setup-python@v6
|
|
43
|
+
with:
|
|
44
|
+
python-version: "3.14"
|
|
45
|
+
- run: python -m pip install -e '.[test]'
|
|
46
|
+
- run: scripts/release-gate.sh --output-dir "$RUNNER_TEMP/packwright-dist"
|
|
47
|
+
- uses: actions/upload-artifact@v4
|
|
48
|
+
with:
|
|
49
|
+
name: packwright-0.1.0
|
|
50
|
+
path: |
|
|
51
|
+
${{ runner.temp }}/packwright-dist/*.whl
|
|
52
|
+
${{ runner.temp }}/packwright-dist/*.tar.gz
|
|
53
|
+
${{ runner.temp }}/packwright-dist/release-artifacts.json
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
name: Deploy Pages
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
paths:
|
|
7
|
+
- ".github/workflows/pages.yml"
|
|
8
|
+
- "site/**"
|
|
9
|
+
- "assets/fonts/**"
|
|
10
|
+
- "assets/social-preview.png"
|
|
11
|
+
workflow_dispatch:
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
pages: write
|
|
16
|
+
id-token: write
|
|
17
|
+
|
|
18
|
+
concurrency:
|
|
19
|
+
group: pages
|
|
20
|
+
cancel-in-progress: false
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
build:
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
steps:
|
|
26
|
+
- name: Checkout
|
|
27
|
+
uses: actions/checkout@v6
|
|
28
|
+
- name: Configure Pages
|
|
29
|
+
uses: actions/configure-pages@v6
|
|
30
|
+
- name: Stage static site
|
|
31
|
+
run: |
|
|
32
|
+
mkdir -p _site/assets/fonts
|
|
33
|
+
cp -R site/. _site/
|
|
34
|
+
cp -R assets/fonts/. _site/assets/fonts/
|
|
35
|
+
cp assets/social-preview.png _site/assets/social-preview.png
|
|
36
|
+
sed -i 's#../assets/fonts/#assets/fonts/#g' _site/*.html
|
|
37
|
+
- name: Upload Pages artifact
|
|
38
|
+
uses: actions/upload-pages-artifact@v5
|
|
39
|
+
with:
|
|
40
|
+
path: _site
|
|
41
|
+
|
|
42
|
+
deploy:
|
|
43
|
+
needs: build
|
|
44
|
+
runs-on: ubuntu-latest
|
|
45
|
+
environment:
|
|
46
|
+
name: github-pages
|
|
47
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
48
|
+
steps:
|
|
49
|
+
- name: Deploy to GitHub Pages
|
|
50
|
+
id: deployment
|
|
51
|
+
uses: actions/deploy-pages@v5
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
name: Publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
build:
|
|
12
|
+
name: Build and verify distributions
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v6
|
|
16
|
+
with:
|
|
17
|
+
fetch-depth: 0
|
|
18
|
+
- uses: actions/setup-python@v6
|
|
19
|
+
with:
|
|
20
|
+
python-version: "3.14"
|
|
21
|
+
- name: Verify release tag matches package version
|
|
22
|
+
run: |
|
|
23
|
+
PACKAGE_VERSION="$(python -c 'import tomllib; print(tomllib.load(open("pyproject.toml", "rb"))["project"]["version"])')"
|
|
24
|
+
test "$GITHUB_REF_NAME" = "v$PACKAGE_VERSION"
|
|
25
|
+
- run: python -m pip install -e '.[test]'
|
|
26
|
+
- run: scripts/release-gate.sh --output-dir "$RUNNER_TEMP/packwright-dist"
|
|
27
|
+
- uses: actions/upload-artifact@v4
|
|
28
|
+
with:
|
|
29
|
+
name: python-package-distributions
|
|
30
|
+
path: |
|
|
31
|
+
${{ runner.temp }}/packwright-dist/*.whl
|
|
32
|
+
${{ runner.temp }}/packwright-dist/*.tar.gz
|
|
33
|
+
if-no-files-found: error
|
|
34
|
+
|
|
35
|
+
publish:
|
|
36
|
+
name: Publish distributions to PyPI
|
|
37
|
+
needs: build
|
|
38
|
+
runs-on: ubuntu-latest
|
|
39
|
+
environment:
|
|
40
|
+
name: pypi
|
|
41
|
+
url: https://pypi.org/p/packwright
|
|
42
|
+
permissions:
|
|
43
|
+
id-token: write
|
|
44
|
+
steps:
|
|
45
|
+
- uses: actions/download-artifact@v5
|
|
46
|
+
with:
|
|
47
|
+
name: python-package-distributions
|
|
48
|
+
path: dist
|
|
49
|
+
- name: Publish distributions to PyPI
|
|
50
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes are documented here. Packwright follows Semantic Versioning.
|
|
4
|
+
|
|
5
|
+
## [0.1.0] - 2026-07-14
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Stable public release for Codex, Claude Code, and Cursor pack generation, installation, migration, diagnosis, and scoring.
|
|
10
|
+
- Artifact-lock verification and deterministic repair for Packwright-managed projections.
|
|
11
|
+
- First-class `draft-character` and `adopt` creation paths for custom and existing agents.
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- `build` now refuses to overwrite existing pack artifacts unless `--force` is explicit.
|
|
16
|
+
- `install --force` preserves portable user state under `memory/`, `workspace/`, `knowledge/`, and `sources/`.
|
|
17
|
+
- Emotion Engine sidecar installation is explicit instead of being implied by the default light mode.
|
|
18
|
+
- Distributable metadata no longer records build-machine absolute source paths.
|
|
19
|
+
- Public starter presets are now nameless `code`, `work`, and `companion` starting roles; users supply the character name with `--name` and can customize responsibilities, capabilities, voice, boundaries, and emotional feedback.
|
|
20
|
+
|
|
21
|
+
### Security
|
|
22
|
+
|
|
23
|
+
- Reject path traversal, absolute paths, source-root escapes, and destination symlink escapes across build, install, migration, doctor, and scoring paths.
|
|
24
|
+
- Keep `doctor --fix` limited to reproducible managed artifacts while excluding portable and live state.
|
|
25
|
+
|
|
26
|
+
## [0.1.0rc1] - 2026-07-11
|
|
27
|
+
|
|
28
|
+
### Added
|
|
29
|
+
|
|
30
|
+
- Six-command public CLI: `init`, `build`, `install`, `migrate`, `doctor`, and `score`.
|
|
31
|
+
- Native projections for Codex, Claude Code, and Cursor.
|
|
32
|
+
- Read-only migration plans with path-level generated, carried, rewritten, and excluded receipts.
|
|
33
|
+
- Self-contained installed-target metadata and pre/post-install scoring.
|
|
34
|
+
- Static zero-network audit, local release gate, packaging checks, and CI.
|
|
35
|
+
|
|
36
|
+
[0.1.0]: https://github.com/pioneerjeff-labs/packwright/releases/tag/v0.1.0
|
|
37
|
+
[0.1.0rc1]: https://github.com/pioneerjeff-labs/packwright/releases/tag/v0.1.0rc1
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
Packwright welcomes focused bug fixes, tests, documentation corrections, and adapter improvements. The project values receipts over broad claims: show the behavior, the command, and the verification.
|
|
4
|
+
|
|
5
|
+
## Development setup
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
git clone https://github.com/pioneerjeff-labs/packwright.git
|
|
9
|
+
cd packwright
|
|
10
|
+
python3 -m venv .venv
|
|
11
|
+
source .venv/bin/activate
|
|
12
|
+
python -m pip install -e '.[dev]'
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Verification
|
|
16
|
+
|
|
17
|
+
Run the quick gate while iterating:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
scripts/release-gate.sh --quick
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Before opening a pull request, run the complete gate:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
scripts/release-gate.sh
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Every user-visible behavior change needs a test or a concise explanation of why automated coverage is not practical.
|
|
30
|
+
|
|
31
|
+
## Adapter work
|
|
32
|
+
|
|
33
|
+
New adapters land when they pass the checker. Open an [adapter request](https://github.com/pioneerjeff-labs/packwright/issues/new?template=adapter_request.yml) first and include:
|
|
34
|
+
|
|
35
|
+
- the runtime's official instructions, rules, or skills documentation;
|
|
36
|
+
- the native file locations and formats;
|
|
37
|
+
- whether you can test a real local installation;
|
|
38
|
+
- known features that cannot be projected.
|
|
39
|
+
|
|
40
|
+
An adapter is not complete when it renders files. It must build, install, migrate in both directions where applicable, expose exclusions honestly, and pass the checker.
|
|
41
|
+
|
|
42
|
+
## Public-data rule
|
|
43
|
+
|
|
44
|
+
Use synthetic fixtures. Never include real agent memory, credentials, private paths, private launch material, or generated build artifacts. Migration changes must preserve the dry-run-before-write contract and report every generated, carried, rewritten, and excluded path.
|
|
45
|
+
|
|
46
|
+
## Documentation voice
|
|
47
|
+
|
|
48
|
+
State what Packwright does and what was tested. Avoid claims such as “seamless,” “magical,” or support for runtimes that do not have a passing adapter. A `100.0` structure score is not a runtime guarantee.
|
packwright-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 pioneerjeff-labs
|
|
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.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
include LICENSE
|
|
2
|
+
include CHANGELOG.md
|
|
3
|
+
include CONTRIBUTING.md
|
|
4
|
+
include README.md
|
|
5
|
+
include README.zh-CN.md
|
|
6
|
+
include SECURITY.md
|
|
7
|
+
recursive-include docs *.md
|
|
8
|
+
recursive-include examples *
|
|
9
|
+
recursive-include assets *.css *.svg *.png *.woff2 *.otf *.txt
|
|
10
|
+
recursive-include site *.html *.css *.svg *.js
|
|
11
|
+
recursive-include specs *.yaml
|
|
12
|
+
recursive-include tests *.py
|
|
13
|
+
recursive-include scripts *.py *.sh
|
|
14
|
+
recursive-include .github *.yml *.yaml *.md
|
|
15
|
+
global-exclude *.py[cod]
|
|
16
|
+
global-exclude .DS_Store
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: packwright
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Build, install, and migrate portable agent packs across Codex, Claude Code, and Cursor.
|
|
5
|
+
Author: pioneerjeff-labs
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://pioneerjeff-labs.github.io/packwright/
|
|
8
|
+
Project-URL: Documentation, https://github.com/pioneerjeff-labs/packwright#readme
|
|
9
|
+
Project-URL: Issues, https://github.com/pioneerjeff-labs/packwright/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/pioneerjeff-labs/packwright/blob/main/CHANGELOG.md
|
|
11
|
+
Keywords: agents,codex,claude-code,cursor,migration
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
22
|
+
Classifier: Topic :: Software Development :: Build Tools
|
|
23
|
+
Requires-Python: >=3.9
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
License-File: LICENSE
|
|
26
|
+
Requires-Dist: PyYAML>=6.0
|
|
27
|
+
Provides-Extra: test
|
|
28
|
+
Requires-Dist: build>=1.2; extra == "test"
|
|
29
|
+
Requires-Dist: twine>=5.1; extra == "test"
|
|
30
|
+
Provides-Extra: dev
|
|
31
|
+
Requires-Dist: build>=1.2; extra == "dev"
|
|
32
|
+
Requires-Dist: twine>=5.1; extra == "dev"
|
|
33
|
+
Dynamic: license-file
|
|
34
|
+
|
|
35
|
+
<p align="center">
|
|
36
|
+
<picture>
|
|
37
|
+
<source media="(prefers-color-scheme: dark)" srcset="assets/mark-dark.svg">
|
|
38
|
+
<source media="(prefers-color-scheme: light)" srcset="assets/mark-light.svg">
|
|
39
|
+
<img alt="Packwright dovetail mark" src="assets/mark-light.svg" width="88" height="88">
|
|
40
|
+
</picture>
|
|
41
|
+
</p>
|
|
42
|
+
|
|
43
|
+
<h1 align="center">Packwright</h1>
|
|
44
|
+
|
|
45
|
+
<p align="center"><strong>Build your agent once. Carry it everywhere.</strong></p>
|
|
46
|
+
|
|
47
|
+
<p align="center">
|
|
48
|
+
Compile one agent definition—rules, memory, skills, and workspace—into native packs<br>
|
|
49
|
+
for Codex, Claude Code, and Cursor. Build, install, migrate, and verify with plain files.
|
|
50
|
+
</p>
|
|
51
|
+
|
|
52
|
+
<p align="center">
|
|
53
|
+
<strong><a href="https://pioneerjeff-labs.github.io/packwright/">Explore the live product website →</a></strong><br>
|
|
54
|
+
Watch the animated CLI, follow a Claude Code → Codex migration, and switch the Quickstart between Claude Code, Codex, and Cursor.<br>
|
|
55
|
+
<a href="https://pioneerjeff-labs.github.io/packwright/">English</a> · <a href="https://pioneerjeff-labs.github.io/packwright/zh-CN.html">简体中文</a>
|
|
56
|
+
</p>
|
|
57
|
+
|
|
58
|
+
<p align="center">
|
|
59
|
+
<a href="https://pioneerjeff-labs.github.io/packwright/">
|
|
60
|
+
<img alt="Open the Packwright live product website" src="assets/social-preview.png" width="800">
|
|
61
|
+
</a>
|
|
62
|
+
</p>
|
|
63
|
+
|
|
64
|
+
<p align="center">
|
|
65
|
+
<a href="https://pioneerjeff-labs.github.io/packwright/"><img alt="Packwright website" src="https://img.shields.io/badge/website-live-9C4F16?style=flat-square"></a>
|
|
66
|
+
<a href="https://github.com/pioneerjeff-labs/packwright/actions/workflows/ci.yml"><img alt="CI status" src="https://github.com/pioneerjeff-labs/packwright/actions/workflows/ci.yml/badge.svg"></a>
|
|
67
|
+
<a href="LICENSE"><img alt="MIT license" src="https://img.shields.io/badge/license-MIT-5C5245?style=flat-square"></a>
|
|
68
|
+
<a href="README.zh-CN.md"><img alt="中文 README" src="https://img.shields.io/badge/README-中文-B87333?style=flat-square"></a>
|
|
69
|
+
</p>
|
|
70
|
+
|
|
71
|
+
<p align="center"><strong>Native packs. Portable state. Preview every migration before any files are written.</strong></p>
|
|
72
|
+
|
|
73
|
+
> [!NOTE]
|
|
74
|
+
> Packwright itself makes no network requests and sends no telemetry. Your coding runtime may still send files it reads to its own model provider; its data policy continues to apply.
|
|
75
|
+
|
|
76
|
+
## Start with your coding agent
|
|
77
|
+
|
|
78
|
+
The shortest interface is a conversation. Install Packwright, then paste the operating prompt into Codex, Claude Code, or Cursor:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
python -m pip install packwright==0.1.0
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**[Open the paste-ready agent prompt →](docs/USE_WITH_YOUR_AGENT.md)**
|
|
85
|
+
|
|
86
|
+
For a new agent, describe what it should do and choose its name. The prompt makes your coding agent draft a canonical intake, confirm it with you, build the pack, and verify the installed target. For migration, it previews the receipt and waits for approval before writing.
|
|
87
|
+
|
|
88
|
+
## Create your own
|
|
89
|
+
|
|
90
|
+
Generate Packwright's interviewer contract, then let your coding agent turn the conversation into a confirmed `character_intake.yaml`:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
packwright draft-character \
|
|
94
|
+
--user-name Morgan \
|
|
95
|
+
--prompt-out work/character-interviewer.md
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
After the agent saves the confirmed intake, create editable source and build it:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
packwright init work/nova-intake.yaml -o work/nova
|
|
102
|
+
packwright build work/nova --adapter claude-code -o pack/nova-claude
|
|
103
|
+
packwright install pack/nova-claude --adapter claude-code --target project/nova-claude
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Already have an agent or workspace? Inventory it before importing anything:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
packwright adopt --from existing-agent --dry-run
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Or use a nameless starter
|
|
113
|
+
|
|
114
|
+
Three presets cover common starting points. Customize responsibilities, capabilities, voice, boundaries, and emotional feedback; the preset shapes how the agent works, while you always choose its name.
|
|
115
|
+
|
|
116
|
+
| Preset | Starting role |
|
|
117
|
+
|---|---|
|
|
118
|
+
| `code` | Expert engineer — builds, reviews, debugs, tests, and ships technical work |
|
|
119
|
+
| `work` | Versatile assistant — plans projects, drafts deliverables, clarifies decisions, and keeps execution moving |
|
|
120
|
+
| `companion` | Personal secretary — supports daily routines, life decisions, travel planning, and emotional support |
|
|
121
|
+
|
|
122
|
+
Choose a preset, answer a few simple questions, and supply the character name yourself.
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
packwright init --template code --name Nova --user-name Morgan -o work/nova
|
|
126
|
+
packwright build work/nova --adapter claude-code -o pack/nova-claude
|
|
127
|
+
packwright install pack/nova-claude --adapter claude-code --target project/nova-claude
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
`Nova` is only an example of a user-chosen name. Edit the generated name, relationship, voice, and boundaries whenever you need.
|
|
131
|
+
|
|
132
|
+
Preview a move from Claude Code to Codex. The destination is not created during this step:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
packwright migrate project/nova-claude \
|
|
136
|
+
--to codex \
|
|
137
|
+
--target project/nova-codex --dry-run
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
The plan names four kinds of paths:
|
|
141
|
+
|
|
142
|
+
| Receipt section | Meaning |
|
|
143
|
+
|---|---|
|
|
144
|
+
| `generated` | Files compiled for the destination runtime |
|
|
145
|
+
| `carried` | Portable user files copied and SHA-256 verified |
|
|
146
|
+
| `rewritten` | Packwright-managed routing lines changed for the destination |
|
|
147
|
+
| `excluded` | Runtime-specific files deliberately left behind |
|
|
148
|
+
|
|
149
|
+
After reviewing the receipt, apply that exact move and verify the result:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
packwright migrate project/nova-claude \
|
|
153
|
+
--to codex \
|
|
154
|
+
--target project/nova-codex --yes
|
|
155
|
+
packwright doctor project/nova-codex
|
|
156
|
+
packwright score project/nova-codex
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Add `--json` to the dry run and confirmed run for a machine-readable `packwright-migration/v1` receipt. Packwright refuses to overwrite an existing target unless you separately opt into `--force`.
|
|
160
|
+
|
|
161
|
+
## Why not just prompts?
|
|
162
|
+
|
|
163
|
+
A working coding agent is more than its top-level instructions, and each runtime expects a different native layout:
|
|
164
|
+
|
|
165
|
+
| Runtime | Native entry | Reusable procedures |
|
|
166
|
+
|---|---|---|
|
|
167
|
+
| Codex | `AGENTS.md` | `.agents/skills/<name>/SKILL.md` |
|
|
168
|
+
| Claude Code | `CLAUDE.md` | `.claude/skills/<name>/SKILL.md` |
|
|
169
|
+
| Cursor | `.cursor/rules/<name>.mdc` | `.cursor/rules/<name>-save-context.mdc` |
|
|
170
|
+
|
|
171
|
+
Packwright treats those files as compiled projections. Your editable source owns the behavior; adapters own the runtime layout; migration carries portable state and reports the seams instead of hiding them.
|
|
172
|
+
|
|
173
|
+
## Build once, carry everywhere
|
|
174
|
+
|
|
175
|
+
```text
|
|
176
|
+
editable source
|
|
177
|
+
identity · memory contract · skills · workspace rules
|
|
178
|
+
│
|
|
179
|
+
├── packwright build --adapter codex → AGENTS.md + .agents/skills/
|
|
180
|
+
├── packwright build --adapter claude-code → CLAUDE.md + .claude/skills/
|
|
181
|
+
└── packwright build --adapter cursor → .cursor/rules/*.mdc
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Every pack and installed target includes self-contained `.packwright/` metadata: the canonical source snapshot, artifact lock, and checker receipt. You can relocate a target and still run `migrate`, `doctor`, and `score` without its original build directory.
|
|
185
|
+
|
|
186
|
+
## Move a working agent
|
|
187
|
+
|
|
188
|
+
`migrate` recompiles runtime-native files and carries portable state into the destination. It reports what cannot carry before it writes, then waits for an explicit `--yes`. The receipt is the proof behind “carry it everywhere,” not a promise that unlike runtimes have no seams.
|
|
189
|
+
|
|
190
|
+
## What the checks prove
|
|
191
|
+
|
|
192
|
+
- `score` evaluates the public pack structure and artifact contract. `100.0` is a structural pass, not a promise that a runtime will behave perfectly.
|
|
193
|
+
- `doctor` verifies Packwright-managed projection hashes and can repair reproducible drift without treating portable user state as generated output.
|
|
194
|
+
- Migration verifies carried and rewritten files by hash and records planned and installed scores.
|
|
195
|
+
- Packwright ships six directed migration paths across the three current adapters. New adapters land when they pass the checker.
|
|
196
|
+
|
|
197
|
+
## Current release boundary
|
|
198
|
+
|
|
199
|
+
`0.1.0` is Packwright's first stable release. The supported destination adapters are Codex, Claude Code, and Cursor. Packwright is local tooling, not cloud sync, and its plain-file structure score is separate from real runtime compatibility.
|
|
200
|
+
|
|
201
|
+
## Documentation
|
|
202
|
+
|
|
203
|
+
- [Live product website](https://pioneerjeff-labs.github.io/packwright/) · [简体中文](https://pioneerjeff-labs.github.io/packwright/zh-CN.html)
|
|
204
|
+
- [CLI contract](docs/CLI.md)
|
|
205
|
+
- [Use Packwright with your coding agent](docs/USE_WITH_YOUR_AGENT.md)
|
|
206
|
+
- [Character drafting](docs/CHARACTER_DRAFTING.md)
|
|
207
|
+
- [Agent archetypes](docs/AGENT_ARCHETYPES.md)
|
|
208
|
+
- [Optional Emotion Engine sidecar](docs/EMOTION_ENGINE.md)
|
|
209
|
+
- [0.1.0 release notes](docs/releases/0.1.0.md)
|
|
210
|
+
- [Contributing](CONTRIBUTING.md)
|
|
211
|
+
- [Security](SECURITY.md)
|
|
212
|
+
|
|
213
|
+
Packwright is open source under the [MIT License](LICENSE).
|