pathly-adapters 2.3.0__tar.gz → 2.4.1__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.
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/PKG-INFO +1 -1
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/README.md +1 -1
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/pyproject.toml +1 -1
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/install_cli/codex_plugin_config.py +170 -170
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/install_cli/detect.py +21 -21
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_adapters.egg-info/PKG-INFO +1 -1
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_adapters.egg-info/SOURCES.txt +1 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/.claude-plugin/plugin.json +1 -1
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/architect.yaml +5 -5
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/director.yaml +4 -4
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/pathly_skill.yaml +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/po.yaml +5 -5
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/quick.yaml +4 -4
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/reviewer.yaml +5 -5
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/scout-path_skill.yaml +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/scout.yaml +4 -4
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/team-build_skill.yaml +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/team-discover_skill.yaml +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/team-plan_skill.yaml +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/team-retro_skill.yaml +5 -5
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/team-review_skill.yaml +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/team-test_skill.yaml +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/web-researcher.yaml +4 -4
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/.codex-plugin/plugin.json +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/README.md +21 -21
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/architect.yaml +4 -4
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/director.yaml +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/pathly_skill.yaml +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/po.yaml +4 -4
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/quick.yaml +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/reviewer.yaml +4 -4
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/scout-path_skill.yaml +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/scout.yaml +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/team-build_skill.yaml +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/team-discover_skill.yaml +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/team-plan_skill.yaml +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/team-retro_skill.yaml +5 -5
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/team-review_skill.yaml +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/team-test_skill.yaml +3 -3
- {pathly_adapters-2.3.0/src/pathly_data/adapters/copilot → pathly_adapters-2.4.1/src/pathly_data/adapters/codex}/_meta/team_skill.yaml +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/web-researcher.yaml +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/architect.yaml +4 -4
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/builder.yaml +5 -5
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/director.yaml +4 -4
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/explorer.yaml +4 -4
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/orchestrator.yaml +4 -4
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/pathly_skill.yaml +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/planner.yaml +4 -4
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/po.yaml +4 -4
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/quick.yaml +4 -4
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/reviewer.yaml +4 -4
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/scout-path_skill.yaml +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/scout.yaml +4 -4
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/team-build_skill.yaml +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/team-discover_skill.yaml +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/team-plan_skill.yaml +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/team-retro_skill.yaml +5 -5
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/team-review_skill.yaml +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/team-test_skill.yaml +3 -3
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/tester.yaml +4 -4
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/web-researcher.yaml +4 -4
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/SKILLS_OVERVIEW.md +883 -883
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/agents/architect.md +7 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/agents/builder.md +7 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/agents/explorer.md +7 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/agents/orchestrator.md +159 -159
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/agents/planner.md +7 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/agents/po.md +30 -30
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/agents/reviewer.md +7 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/agents/tester.md +7 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/flows/debug.flow.yaml +37 -37
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/flows/explore.flow.yaml +30 -30
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/flows/team.flow.yaml +73 -73
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/archive.md +83 -83
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/debug.md +76 -76
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/explore.md +114 -75
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/meet.md +303 -303
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/pathly.md +358 -358
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/pause.md +43 -43
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/po.md +146 -146
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/prd-import.md +196 -196
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/templates/plan/FEATURE_INDEX.template.md +61 -61
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/schemas/pathly-meta.schema.json +139 -116
- pathly_adapters-2.4.1/src/pathly_data/schemas/state.schema.json +38 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_hooks/__init__.py +5 -5
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_hooks/classify_feedback.py +73 -73
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_hooks/inject_feedback_ttl.py +81 -81
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_orchestrator/__init__.py +8 -8
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_orchestrator/events.py +83 -83
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_telemetry/__init__.py +1 -1
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_telemetry/__main__.py +14 -14
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_telemetry/report.py +80 -80
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_telemetry/storage.py +28 -28
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/tests/test_codex_plugin_config.py +122 -122
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/tests/test_feedback_protocol.py +15 -15
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/tests/test_hooks.py +40 -40
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/tests/test_setup.py +23 -23
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/setup.cfg +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/install_cli/__init__.py +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/install_cli/__main__.py +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/install_cli/materialize.py +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/install_cli/mcp_config.py +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/install_cli/resources.py +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/install_cli/setup_command.py +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/install_cli/stitch.py +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_adapters.egg-info/dependency_links.txt +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_adapters.egg-info/entry_points.txt +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_adapters.egg-info/requires.txt +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_adapters.egg-info/top_level.txt +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/__init__.py +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/.claude-plugin/marketplace.json +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/README.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/archive_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/build_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/builder.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/debug_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/end_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/explore_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/explorer.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/go_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/help_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/install.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/lessons_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/meet_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/orchestrator.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/pause_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/plan_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/planner.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/po_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/prd-import_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/retro_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/review_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/start_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/storm_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/team_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/test_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/tester.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/verify-state_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/archive_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/build_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/builder.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/debug_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/end_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/explore_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/explorer.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/go_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/help_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/install.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/lessons_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/meet_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/orchestrator.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/pause_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/plan_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/planner.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/po_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/prd-import_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/retro_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/review_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/start_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/storm_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/test_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/tester.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/codex/_meta/verify-state_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/README.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/archive_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/build_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/debug_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/end_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/explore_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/go_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/help_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/install.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/lessons_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/meet_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/pause_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/plan_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/po_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/prd-import_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/retro_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/review_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/start_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/storm_skill.yaml +0 -0
- {pathly_adapters-2.3.0/src/pathly_data/adapters/codex → pathly_adapters-2.4.1/src/pathly_data/adapters/copilot}/_meta/team_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/test_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/copilot/_meta/verify-state_skill.yaml +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/README.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/agents/README_routing.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/agents/director.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/agents/quick.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/agents/scout.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/agents/web-researcher.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/build.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/end.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/go.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/help.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/lessons.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/plan.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/retro.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/review.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/scout-path.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/start.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/storm.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/team/build.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/team/discover.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/team/plan.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/team/retro.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/team/review.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/team/test.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/team.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/test.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/skills/verify-state.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/templates/README.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/templates/pipeline-walkthrough/01-PIPELINE-FLOW.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/templates/pipeline-walkthrough/02-TOKEN-USAGE.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/templates/pipeline-walkthrough/03-ARTIFACT-MAP.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/templates/pipeline-walkthrough/README.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/templates/plan/ARCHITECTURE_PROPOSAL.template.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/templates/plan/CONVERSATION_PROMPTS.template.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/templates/plan/EDGE_CASES.template.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/templates/plan/FLOW_DIAGRAM.template.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/templates/plan/HAPPY_FLOW.template.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/templates/plan/IMPLEMENTATION_PLAN.template.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/templates/plan/MERMAID_DIAGRAM.template.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/templates/plan/PROGRESS.template.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/core/templates/plan/USER_STORIES.template.md +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_orchestrator/eventlog.py +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_orchestrator/state.py +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_telemetry/server.py +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/tests/test_materialize_hooks.py +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/tests/test_mcp_config.py +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/tests/test_orchestrator.py +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/tests/test_stitch.py +0 -0
- {pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/tests/test_stitch_skill.py +0 -0
|
@@ -111,7 +111,7 @@ see [github.com/hamilton-sky/pathly](https://github.com/hamilton-sky/pathly) —
|
|
|
111
111
|
|
|
112
112
|
## Release Status
|
|
113
113
|
|
|
114
|
-
Stable (
|
|
114
|
+
Stable (2.3.0). Core install path (`--dry-run`, `--apply`, `--uninstall`) is verified with full rollback on failure. Copilot destination paths follow the VS Code Copilot agent spec and may require `--repair` after a VS Code update.
|
|
115
115
|
|
|
116
116
|
## Known Limitations
|
|
117
117
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pathly-adapters"
|
|
7
|
-
version = "2.
|
|
7
|
+
version = "2.4.1"
|
|
8
8
|
description = "Pathly adapter installer — stitches and deploys agent files to AI host tools."
|
|
9
9
|
requires-python = ">=3.11"
|
|
10
10
|
dependencies = ["pyyaml>=6.0"]
|
|
@@ -1,170 +1,170 @@
|
|
|
1
|
-
"""Install/remove Pathly's Codex local marketplace registration."""
|
|
2
|
-
from __future__ import annotations
|
|
3
|
-
|
|
4
|
-
import json
|
|
5
|
-
import re
|
|
6
|
-
import shutil
|
|
7
|
-
import subprocess
|
|
8
|
-
import sys
|
|
9
|
-
from pathlib import Path
|
|
10
|
-
|
|
11
|
-
MARKETPLACE_NAME = "pathly-local"
|
|
12
|
-
PLUGIN_NAME = "pathly"
|
|
13
|
-
|
|
14
|
-
_CODEX_CONFIG = Path.home() / ".codex" / "config.toml"
|
|
15
|
-
_MARKETPLACE_ROOT = Path.home() / ".codex" / "pathly-marketplace"
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
def install_codex_plugin(
|
|
19
|
-
plugin_files: dict[str, str],
|
|
20
|
-
*,
|
|
21
|
-
dry_run: bool = False,
|
|
22
|
-
config_path: Path | None = None,
|
|
23
|
-
marketplace_root: Path | None = None,
|
|
24
|
-
codex_command: str | None = None,
|
|
25
|
-
) -> None:
|
|
26
|
-
"""Create a real local marketplace and enable the Pathly plugin."""
|
|
27
|
-
config_path = config_path or _CODEX_CONFIG
|
|
28
|
-
marketplace_root = marketplace_root or _MARKETPLACE_ROOT
|
|
29
|
-
|
|
30
|
-
if dry_run:
|
|
31
|
-
print(f" [dry-run] Would write Codex marketplace to {marketplace_root}")
|
|
32
|
-
print(f" [dry-run] Would enable plugin '{PLUGIN_NAME}@{MARKETPLACE_NAME}' in {config_path}")
|
|
33
|
-
print(" [dry-run] Would refresh Codex local marketplace registration if the codex CLI is available")
|
|
34
|
-
return
|
|
35
|
-
|
|
36
|
-
using_default_paths = config_path == _CODEX_CONFIG and marketplace_root == _MARKETPLACE_ROOT
|
|
37
|
-
plugin_root = marketplace_root / "plugins" / PLUGIN_NAME
|
|
38
|
-
if plugin_root.exists():
|
|
39
|
-
shutil.rmtree(plugin_root)
|
|
40
|
-
plugin_root.mkdir(parents=True, exist_ok=True)
|
|
41
|
-
|
|
42
|
-
for name, content in sorted(plugin_files.items()):
|
|
43
|
-
target = plugin_root / name
|
|
44
|
-
if not target.resolve().is_relative_to(plugin_root.resolve()):
|
|
45
|
-
raise ValueError(f"Path traversal detected in plugin file: {name!r}")
|
|
46
|
-
target.parent.mkdir(parents=True, exist_ok=True)
|
|
47
|
-
target.write_text(content, encoding="utf-8")
|
|
48
|
-
|
|
49
|
-
_write_marketplace_json(marketplace_root)
|
|
50
|
-
refreshed = _refresh_codex_marketplace(
|
|
51
|
-
marketplace_root,
|
|
52
|
-
codex_command=codex_command,
|
|
53
|
-
discover_cli=using_default_paths,
|
|
54
|
-
)
|
|
55
|
-
if not refreshed:
|
|
56
|
-
_enable_in_codex_config(config_path, marketplace_root)
|
|
57
|
-
print(f"[codex] Registered local plugin marketplace at {marketplace_root}")
|
|
58
|
-
print('[codex] Restart Codex and start a new thread. Try: "Use Pathly help"')
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
def uninstall_codex_plugin(
|
|
62
|
-
*,
|
|
63
|
-
dry_run: bool = False,
|
|
64
|
-
config_path: Path | None = None,
|
|
65
|
-
marketplace_root: Path | None = None,
|
|
66
|
-
) -> None:
|
|
67
|
-
config_path = config_path or _CODEX_CONFIG
|
|
68
|
-
marketplace_root = marketplace_root or _MARKETPLACE_ROOT
|
|
69
|
-
|
|
70
|
-
if dry_run:
|
|
71
|
-
print(f" [dry-run] Would remove plugin '{PLUGIN_NAME}@{MARKETPLACE_NAME}' from {config_path}")
|
|
72
|
-
print(f" [dry-run] Would remove Codex marketplace at {marketplace_root}")
|
|
73
|
-
return
|
|
74
|
-
|
|
75
|
-
_disable_in_codex_config(config_path)
|
|
76
|
-
if marketplace_root.exists():
|
|
77
|
-
shutil.rmtree(marketplace_root)
|
|
78
|
-
print(f"[codex] Removed local plugin marketplace at {marketplace_root}")
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
def _write_marketplace_json(root: Path) -> None:
|
|
82
|
-
path = root / ".agents" / "plugins" / "marketplace.json"
|
|
83
|
-
path.parent.mkdir(parents=True, exist_ok=True)
|
|
84
|
-
data = {
|
|
85
|
-
"name": MARKETPLACE_NAME,
|
|
86
|
-
"interface": {"displayName": "Pathly Local"},
|
|
87
|
-
"plugins": [
|
|
88
|
-
{
|
|
89
|
-
"name": PLUGIN_NAME,
|
|
90
|
-
"source": {"source": "local", "path": f"./plugins/{PLUGIN_NAME}"},
|
|
91
|
-
"policy": {"installation": "AVAILABLE", "authentication": "ON_INSTALL"},
|
|
92
|
-
"category": "Developer Tools",
|
|
93
|
-
}
|
|
94
|
-
],
|
|
95
|
-
}
|
|
96
|
-
path.write_text(json.dumps(data, indent=2), encoding="utf-8")
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
def _refresh_codex_marketplace(
|
|
100
|
-
marketplace_root: Path,
|
|
101
|
-
*,
|
|
102
|
-
codex_command: str | None = None,
|
|
103
|
-
discover_cli: bool = True,
|
|
104
|
-
) -> bool:
|
|
105
|
-
command = codex_command
|
|
106
|
-
if command is None and discover_cli:
|
|
107
|
-
command = shutil.which("codex")
|
|
108
|
-
if command is None:
|
|
109
|
-
print("[codex] Codex CLI not found; config.toml was updated directly.")
|
|
110
|
-
return False
|
|
111
|
-
|
|
112
|
-
remove = subprocess.run(
|
|
113
|
-
[command, "plugin", "marketplace", "remove", MARKETPLACE_NAME],
|
|
114
|
-
capture_output=True,
|
|
115
|
-
text=True,
|
|
116
|
-
timeout=60,
|
|
117
|
-
)
|
|
118
|
-
if remove.returncode != 0:
|
|
119
|
-
print(f"[codex] Marketplace remove skipped: {remove.stderr.strip() or remove.stdout.strip()}")
|
|
120
|
-
|
|
121
|
-
add = subprocess.run(
|
|
122
|
-
[command, "plugin", "marketplace", "add", str(marketplace_root)],
|
|
123
|
-
capture_output=True,
|
|
124
|
-
text=True,
|
|
125
|
-
timeout=60,
|
|
126
|
-
)
|
|
127
|
-
if add.returncode != 0:
|
|
128
|
-
print(f"[codex] Codex CLI marketplace refresh failed: {add.stderr.strip() or add.stdout.strip()}", file=sys.stderr)
|
|
129
|
-
print("[codex] Falling back to direct config.toml registration.", file=sys.stderr)
|
|
130
|
-
return False
|
|
131
|
-
|
|
132
|
-
print("[codex] Refreshed Codex local marketplace registration via codex CLI.")
|
|
133
|
-
return True
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
def _enable_in_codex_config(path: Path, marketplace_root: Path) -> None:
|
|
137
|
-
content = _read_config(path)
|
|
138
|
-
content = _remove_pathly_blocks(content)
|
|
139
|
-
block = (
|
|
140
|
-
f"\n[marketplaces.{MARKETPLACE_NAME}]\n"
|
|
141
|
-
'last_updated = "1970-01-01T00:00:00Z"\n'
|
|
142
|
-
'source_type = "local"\n'
|
|
143
|
-
f"source = '{marketplace_root}'\n"
|
|
144
|
-
f'[plugins."{PLUGIN_NAME}@{MARKETPLACE_NAME}"]\n'
|
|
145
|
-
"enabled = true\n"
|
|
146
|
-
)
|
|
147
|
-
path.parent.mkdir(parents=True, exist_ok=True)
|
|
148
|
-
path.write_text(content.rstrip() + "\n" + block, encoding="utf-8")
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
def _disable_in_codex_config(path: Path) -> None:
|
|
152
|
-
content = _read_config(path)
|
|
153
|
-
cleaned = _remove_pathly_blocks(content)
|
|
154
|
-
if cleaned != content:
|
|
155
|
-
path.write_text(cleaned.rstrip() + "\n", encoding="utf-8")
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
def _read_config(path: Path) -> str:
|
|
159
|
-
if not path.exists():
|
|
160
|
-
print(f" [warn] Codex config not found at {path}; creating it.", file=sys.stderr)
|
|
161
|
-
return ""
|
|
162
|
-
return path.read_text(encoding="utf-8")
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
def _remove_pathly_blocks(content: str) -> str:
|
|
166
|
-
marketplace = rf"\n?\[marketplaces\.{re.escape(MARKETPLACE_NAME)}\].*?(?=\n\[|\Z)"
|
|
167
|
-
plugin = rf"\n?\[plugins\.\"{re.escape(PLUGIN_NAME)}@{re.escape(MARKETPLACE_NAME)}\"\].*?(?=\n\[|\Z)"
|
|
168
|
-
content = re.sub(marketplace, "", content, flags=re.DOTALL)
|
|
169
|
-
content = re.sub(plugin, "", content, flags=re.DOTALL)
|
|
170
|
-
return content
|
|
1
|
+
"""Install/remove Pathly's Codex local marketplace registration."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import json
|
|
5
|
+
import re
|
|
6
|
+
import shutil
|
|
7
|
+
import subprocess
|
|
8
|
+
import sys
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
11
|
+
MARKETPLACE_NAME = "pathly-local"
|
|
12
|
+
PLUGIN_NAME = "pathly"
|
|
13
|
+
|
|
14
|
+
_CODEX_CONFIG = Path.home() / ".codex" / "config.toml"
|
|
15
|
+
_MARKETPLACE_ROOT = Path.home() / ".codex" / "pathly-marketplace"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def install_codex_plugin(
|
|
19
|
+
plugin_files: dict[str, str],
|
|
20
|
+
*,
|
|
21
|
+
dry_run: bool = False,
|
|
22
|
+
config_path: Path | None = None,
|
|
23
|
+
marketplace_root: Path | None = None,
|
|
24
|
+
codex_command: str | None = None,
|
|
25
|
+
) -> None:
|
|
26
|
+
"""Create a real local marketplace and enable the Pathly plugin."""
|
|
27
|
+
config_path = config_path or _CODEX_CONFIG
|
|
28
|
+
marketplace_root = marketplace_root or _MARKETPLACE_ROOT
|
|
29
|
+
|
|
30
|
+
if dry_run:
|
|
31
|
+
print(f" [dry-run] Would write Codex marketplace to {marketplace_root}")
|
|
32
|
+
print(f" [dry-run] Would enable plugin '{PLUGIN_NAME}@{MARKETPLACE_NAME}' in {config_path}")
|
|
33
|
+
print(" [dry-run] Would refresh Codex local marketplace registration if the codex CLI is available")
|
|
34
|
+
return
|
|
35
|
+
|
|
36
|
+
using_default_paths = config_path == _CODEX_CONFIG and marketplace_root == _MARKETPLACE_ROOT
|
|
37
|
+
plugin_root = marketplace_root / "plugins" / PLUGIN_NAME
|
|
38
|
+
if plugin_root.exists():
|
|
39
|
+
shutil.rmtree(plugin_root)
|
|
40
|
+
plugin_root.mkdir(parents=True, exist_ok=True)
|
|
41
|
+
|
|
42
|
+
for name, content in sorted(plugin_files.items()):
|
|
43
|
+
target = plugin_root / name
|
|
44
|
+
if not target.resolve().is_relative_to(plugin_root.resolve()):
|
|
45
|
+
raise ValueError(f"Path traversal detected in plugin file: {name!r}")
|
|
46
|
+
target.parent.mkdir(parents=True, exist_ok=True)
|
|
47
|
+
target.write_text(content, encoding="utf-8")
|
|
48
|
+
|
|
49
|
+
_write_marketplace_json(marketplace_root)
|
|
50
|
+
refreshed = _refresh_codex_marketplace(
|
|
51
|
+
marketplace_root,
|
|
52
|
+
codex_command=codex_command,
|
|
53
|
+
discover_cli=using_default_paths,
|
|
54
|
+
)
|
|
55
|
+
if not refreshed:
|
|
56
|
+
_enable_in_codex_config(config_path, marketplace_root)
|
|
57
|
+
print(f"[codex] Registered local plugin marketplace at {marketplace_root}")
|
|
58
|
+
print('[codex] Restart Codex and start a new thread. Try: "Use Pathly help"')
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def uninstall_codex_plugin(
|
|
62
|
+
*,
|
|
63
|
+
dry_run: bool = False,
|
|
64
|
+
config_path: Path | None = None,
|
|
65
|
+
marketplace_root: Path | None = None,
|
|
66
|
+
) -> None:
|
|
67
|
+
config_path = config_path or _CODEX_CONFIG
|
|
68
|
+
marketplace_root = marketplace_root or _MARKETPLACE_ROOT
|
|
69
|
+
|
|
70
|
+
if dry_run:
|
|
71
|
+
print(f" [dry-run] Would remove plugin '{PLUGIN_NAME}@{MARKETPLACE_NAME}' from {config_path}")
|
|
72
|
+
print(f" [dry-run] Would remove Codex marketplace at {marketplace_root}")
|
|
73
|
+
return
|
|
74
|
+
|
|
75
|
+
_disable_in_codex_config(config_path)
|
|
76
|
+
if marketplace_root.exists():
|
|
77
|
+
shutil.rmtree(marketplace_root)
|
|
78
|
+
print(f"[codex] Removed local plugin marketplace at {marketplace_root}")
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def _write_marketplace_json(root: Path) -> None:
|
|
82
|
+
path = root / ".agents" / "plugins" / "marketplace.json"
|
|
83
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
84
|
+
data = {
|
|
85
|
+
"name": MARKETPLACE_NAME,
|
|
86
|
+
"interface": {"displayName": "Pathly Local"},
|
|
87
|
+
"plugins": [
|
|
88
|
+
{
|
|
89
|
+
"name": PLUGIN_NAME,
|
|
90
|
+
"source": {"source": "local", "path": f"./plugins/{PLUGIN_NAME}"},
|
|
91
|
+
"policy": {"installation": "AVAILABLE", "authentication": "ON_INSTALL"},
|
|
92
|
+
"category": "Developer Tools",
|
|
93
|
+
}
|
|
94
|
+
],
|
|
95
|
+
}
|
|
96
|
+
path.write_text(json.dumps(data, indent=2), encoding="utf-8")
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def _refresh_codex_marketplace(
|
|
100
|
+
marketplace_root: Path,
|
|
101
|
+
*,
|
|
102
|
+
codex_command: str | None = None,
|
|
103
|
+
discover_cli: bool = True,
|
|
104
|
+
) -> bool:
|
|
105
|
+
command = codex_command
|
|
106
|
+
if command is None and discover_cli:
|
|
107
|
+
command = shutil.which("codex")
|
|
108
|
+
if command is None:
|
|
109
|
+
print("[codex] Codex CLI not found; config.toml was updated directly.")
|
|
110
|
+
return False
|
|
111
|
+
|
|
112
|
+
remove = subprocess.run(
|
|
113
|
+
[command, "plugin", "marketplace", "remove", MARKETPLACE_NAME],
|
|
114
|
+
capture_output=True,
|
|
115
|
+
text=True,
|
|
116
|
+
timeout=60,
|
|
117
|
+
)
|
|
118
|
+
if remove.returncode != 0:
|
|
119
|
+
print(f"[codex] Marketplace remove skipped: {remove.stderr.strip() or remove.stdout.strip()}")
|
|
120
|
+
|
|
121
|
+
add = subprocess.run(
|
|
122
|
+
[command, "plugin", "marketplace", "add", str(marketplace_root)],
|
|
123
|
+
capture_output=True,
|
|
124
|
+
text=True,
|
|
125
|
+
timeout=60,
|
|
126
|
+
)
|
|
127
|
+
if add.returncode != 0:
|
|
128
|
+
print(f"[codex] Codex CLI marketplace refresh failed: {add.stderr.strip() or add.stdout.strip()}", file=sys.stderr)
|
|
129
|
+
print("[codex] Falling back to direct config.toml registration.", file=sys.stderr)
|
|
130
|
+
return False
|
|
131
|
+
|
|
132
|
+
print("[codex] Refreshed Codex local marketplace registration via codex CLI.")
|
|
133
|
+
return True
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def _enable_in_codex_config(path: Path, marketplace_root: Path) -> None:
|
|
137
|
+
content = _read_config(path)
|
|
138
|
+
content = _remove_pathly_blocks(content)
|
|
139
|
+
block = (
|
|
140
|
+
f"\n[marketplaces.{MARKETPLACE_NAME}]\n"
|
|
141
|
+
'last_updated = "1970-01-01T00:00:00Z"\n'
|
|
142
|
+
'source_type = "local"\n'
|
|
143
|
+
f"source = '{marketplace_root}'\n"
|
|
144
|
+
f'[plugins."{PLUGIN_NAME}@{MARKETPLACE_NAME}"]\n'
|
|
145
|
+
"enabled = true\n"
|
|
146
|
+
)
|
|
147
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
148
|
+
path.write_text(content.rstrip() + "\n" + block, encoding="utf-8")
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def _disable_in_codex_config(path: Path) -> None:
|
|
152
|
+
content = _read_config(path)
|
|
153
|
+
cleaned = _remove_pathly_blocks(content)
|
|
154
|
+
if cleaned != content:
|
|
155
|
+
path.write_text(cleaned.rstrip() + "\n", encoding="utf-8")
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def _read_config(path: Path) -> str:
|
|
159
|
+
if not path.exists():
|
|
160
|
+
print(f" [warn] Codex config not found at {path}; creating it.", file=sys.stderr)
|
|
161
|
+
return ""
|
|
162
|
+
return path.read_text(encoding="utf-8")
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
def _remove_pathly_blocks(content: str) -> str:
|
|
166
|
+
marketplace = rf"\n?\[marketplaces\.{re.escape(MARKETPLACE_NAME)}\].*?(?=\n\[|\Z)"
|
|
167
|
+
plugin = rf"\n?\[plugins\.\"{re.escape(PLUGIN_NAME)}@{re.escape(MARKETPLACE_NAME)}\"\].*?(?=\n\[|\Z)"
|
|
168
|
+
content = re.sub(marketplace, "", content, flags=re.DOTALL)
|
|
169
|
+
content = re.sub(plugin, "", content, flags=re.DOTALL)
|
|
170
|
+
return content
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
from pathlib import Path
|
|
2
|
-
|
|
3
|
-
_HOST_MARKERS: dict[str, list[Path]] = {
|
|
4
|
-
"claude": [
|
|
5
|
-
Path.home() / ".claude",
|
|
6
|
-
],
|
|
7
|
-
"codex": [
|
|
8
|
-
Path.home() / ".codex",
|
|
9
|
-
Path.home() / ".openai-codex",
|
|
10
|
-
],
|
|
11
|
-
"copilot": [
|
|
12
|
-
Path.home() / "AppData" / "Roaming" / "Code", # Windows
|
|
13
|
-
Path.home() / ".config" / "Code", # Linux
|
|
14
|
-
Path.home() / "Library" / "Application Support" / "Code", # macOS
|
|
15
|
-
Path.home() / ".vscode",
|
|
16
|
-
],
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
def detect_hosts() -> list[str]:
|
|
21
|
-
return [host for host, paths in _HOST_MARKERS.items() if any(p.exists() for p in paths)]
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
|
|
3
|
+
_HOST_MARKERS: dict[str, list[Path]] = {
|
|
4
|
+
"claude": [
|
|
5
|
+
Path.home() / ".claude",
|
|
6
|
+
],
|
|
7
|
+
"codex": [
|
|
8
|
+
Path.home() / ".codex",
|
|
9
|
+
Path.home() / ".openai-codex",
|
|
10
|
+
],
|
|
11
|
+
"copilot": [
|
|
12
|
+
Path.home() / "AppData" / "Roaming" / "Code", # Windows
|
|
13
|
+
Path.home() / ".config" / "Code", # Linux
|
|
14
|
+
Path.home() / "Library" / "Application Support" / "Code", # macOS
|
|
15
|
+
Path.home() / ".vscode",
|
|
16
|
+
],
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def detect_hosts() -> list[str]:
|
|
21
|
+
return [host for host, paths in _HOST_MARKERS.items() if any(p.exists() for p in paths)]
|
|
@@ -207,6 +207,7 @@ src/pathly_data/core/templates/plan/MERMAID_DIAGRAM.template.md
|
|
|
207
207
|
src/pathly_data/core/templates/plan/PROGRESS.template.md
|
|
208
208
|
src/pathly_data/core/templates/plan/USER_STORIES.template.md
|
|
209
209
|
src/pathly_data/schemas/pathly-meta.schema.json
|
|
210
|
+
src/pathly_data/schemas/state.schema.json
|
|
210
211
|
src/pathly_hooks/__init__.py
|
|
211
212
|
src/pathly_hooks/classify_feedback.py
|
|
212
213
|
src/pathly_hooks/inject_feedback_ttl.py
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pathly",
|
|
3
|
-
"version": "2.0.3",
|
|
3
|
+
"version": "2.0.3",
|
|
4
4
|
"description": "Guided agent workflows for real software development. Tell Pathly what you want; it chooses the path through planning, building, review, debug, test, and retro.",
|
|
5
5
|
"author": "hamilton",
|
|
6
6
|
"skills": "core/skills/",
|
{pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/architect.yaml
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
name: architect
|
|
2
|
-
description: Technical architecture design, layer decisions, system design, trade-off analysis, and deep design sessions. Use when the HOW needs to be figured out — layer structure, dependency direction, technology choices, design patterns.
|
|
3
|
-
model: opus
|
|
4
|
-
tools: [Read, Glob, Grep, Write, Edit]
|
|
5
|
-
can_spawn: [quick, scout, web-researcher]
|
|
1
|
+
name: architect
|
|
2
|
+
description: Technical architecture design, layer decisions, system design, trade-off analysis, and deep design sessions. Use when the HOW needs to be figured out — layer structure, dependency direction, technology choices, design patterns.
|
|
3
|
+
model: opus
|
|
4
|
+
tools: [Read, Glob, Grep, Write, Edit]
|
|
5
|
+
can_spawn: [quick, scout, web-researcher]
|
{pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/director.yaml
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
name: director
|
|
2
|
-
description: Natural-language front door for the framework. Classifies user intent, chooses the lightest safe workflow, and invokes the pipeline behind the scenes.
|
|
3
|
-
model: sonnet
|
|
4
|
-
tools: [Read, Glob, Grep]
|
|
1
|
+
name: director
|
|
2
|
+
description: Natural-language front door for the framework. Classifies user intent, chooses the lightest safe workflow, and invokes the pipeline behind the scenes.
|
|
3
|
+
model: sonnet
|
|
4
|
+
tools: [Read, Glob, Grep]
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
skill: pathly
|
|
2
|
-
invocation: /pathly
|
|
3
|
-
natural_language: "pathly, /pathly, start pathly, pathly help, pathly go"
|
|
1
|
+
skill: pathly
|
|
2
|
+
invocation: /pathly
|
|
3
|
+
natural_language: "pathly, /pathly, start pathly, pathly help, pathly go"
|
{pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/po.yaml
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
name: po
|
|
2
|
-
description: Product Owner advisor — interactive requirements discussion. Probes what to build, who needs it, MVP scope, and edge cases through back-and-forth conversation. Challenges assumptions and surfaces gaps before architecture begins.
|
|
3
|
-
model: opus
|
|
4
|
-
tools: [Read, Write]
|
|
5
|
-
can_spawn: [web-researcher]
|
|
1
|
+
name: po
|
|
2
|
+
description: Product Owner advisor — interactive requirements discussion. Probes what to build, who needs it, MVP scope, and edge cases through back-and-forth conversation. Challenges assumptions and surfaces gaps before architecture begins.
|
|
3
|
+
model: opus
|
|
4
|
+
tools: [Read, Write]
|
|
5
|
+
can_spawn: [web-researcher]
|
{pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/quick.yaml
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
name: quick
|
|
2
|
-
description: Simple lookups, quick questions, single-file reads, short summaries, and small focused tasks that need one or two tool calls. Use when the task is narrow and well-defined.
|
|
3
|
-
model: haiku
|
|
4
|
-
tools: [Read, Glob, Grep]
|
|
1
|
+
name: quick
|
|
2
|
+
description: Simple lookups, quick questions, single-file reads, short summaries, and small focused tasks that need one or two tool calls. Use when the task is narrow and well-defined.
|
|
3
|
+
model: haiku
|
|
4
|
+
tools: [Read, Glob, Grep]
|
{pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/reviewer.yaml
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
name: reviewer
|
|
2
|
-
description: Adversarial reviewer — finds contract violations and reports them without fixing. Checks dependency direction, structural rules, and security concerns. Can write feedback files, but cannot edit source or run Bash.
|
|
3
|
-
model: sonnet
|
|
4
|
-
tools: [Read, Glob, Grep, Write]
|
|
5
|
-
can_spawn: [quick, scout]
|
|
1
|
+
name: reviewer
|
|
2
|
+
description: Adversarial reviewer — finds contract violations and reports them without fixing. Checks dependency direction, structural rules, and security concerns. Can write feedback files, but cannot edit source or run Bash.
|
|
3
|
+
model: sonnet
|
|
4
|
+
tools: [Read, Glob, Grep, Write]
|
|
5
|
+
can_spawn: [quick, scout]
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
skill: scout-path
|
|
2
|
-
filename: pathly-scout-path/SKILL.md
|
|
3
|
-
natural_language: "scout-path"
|
|
1
|
+
skill: scout-path
|
|
2
|
+
filename: pathly-scout-path/SKILL.md
|
|
3
|
+
natural_language: "scout-path"
|
{pathly_adapters-2.3.0 → pathly_adapters-2.4.1}/src/pathly_data/adapters/claude/_meta/scout.yaml
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
name: scout
|
|
2
|
-
description: Codebase pattern investigator — reads across multiple files and directories to answer a structural question. Use when builder needs 3+ file reads before making implementation decisions. Returns Structured Findings, never writes.
|
|
3
|
-
model: haiku
|
|
4
|
-
tools: [Read, Glob, Grep]
|
|
1
|
+
name: scout
|
|
2
|
+
description: Codebase pattern investigator — reads across multiple files and directories to answer a structural question. Use when builder needs 3+ file reads before making implementation decisions. Returns Structured Findings, never writes.
|
|
3
|
+
model: haiku
|
|
4
|
+
tools: [Read, Glob, Grep]
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
skill: team/build
|
|
2
|
-
filename: pathly-team/build/SKILL.md
|
|
3
|
-
natural_language: "/pathly team build, team build phase"
|
|
1
|
+
skill: team/build
|
|
2
|
+
filename: pathly-team/build/SKILL.md
|
|
3
|
+
natural_language: "/pathly team build, team build phase"
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
skill: team/discover
|
|
2
|
-
filename: pathly-team/discover/SKILL.md
|
|
3
|
-
natural_language: "/pathly team discover"
|
|
1
|
+
skill: team/discover
|
|
2
|
+
filename: pathly-team/discover/SKILL.md
|
|
3
|
+
natural_language: "/pathly team discover"
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
skill: team/plan
|
|
2
|
-
filename: pathly-team/plan/SKILL.md
|
|
3
|
-
natural_language: "/pathly team plan"
|
|
1
|
+
skill: team/plan
|
|
2
|
+
filename: pathly-team/plan/SKILL.md
|
|
3
|
+
natural_language: "/pathly team plan"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
skill: team/retro
|
|
2
|
-
filename: pathly-team/retro/SKILL.md
|
|
3
|
-
natural_language: "/pathly team retro"
|
|
4
|
-
variables:
|
|
5
|
-
TEMPLATES_DIR: ~/.claude/plugins/pathly/templates
|
|
1
|
+
skill: team/retro
|
|
2
|
+
filename: pathly-team/retro/SKILL.md
|
|
3
|
+
natural_language: "/pathly team retro"
|
|
4
|
+
variables:
|
|
5
|
+
TEMPLATES_DIR: ~/.claude/plugins/pathly/templates
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
skill: team/review
|
|
2
|
-
filename: pathly-team/review/SKILL.md
|
|
3
|
-
natural_language: "/pathly team review"
|
|
1
|
+
skill: team/review
|
|
2
|
+
filename: pathly-team/review/SKILL.md
|
|
3
|
+
natural_language: "/pathly team review"
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
skill: team/test
|
|
2
|
-
filename: pathly-team/test/SKILL.md
|
|
3
|
-
natural_language: "/pathly team test"
|
|
1
|
+
skill: team/test
|
|
2
|
+
filename: pathly-team/test/SKILL.md
|
|
3
|
+
natural_language: "/pathly team test"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
name: web-researcher
|
|
2
|
-
description: External knowledge gatherer — searches the web for design patterns, library docs, best practices, and domain knowledge. Use when architect or planner needs external context before making design decisions. Returns cited findings, never writes.
|
|
3
|
-
model: sonnet
|
|
4
|
-
tools: [WebSearch, WebFetch]
|
|
1
|
+
name: web-researcher
|
|
2
|
+
description: External knowledge gatherer — searches the web for design patterns, library docs, best practices, and domain knowledge. Use when architect or planner needs external context before making design decisions. Returns cited findings, never writes.
|
|
3
|
+
model: sonnet
|
|
4
|
+
tools: [WebSearch, WebFetch]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pathly",
|
|
3
|
-
"version": "2.0.3",
|
|
3
|
+
"version": "2.0.3",
|
|
4
4
|
"description": "Guided agent workflows for planning, building, reviewing, debugging, testing, and learning from software changes.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "hamilton",
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
"software-development",
|
|
17
17
|
"planning"
|
|
18
18
|
],
|
|
19
|
-
"skills": "./skills/",
|
|
20
|
-
"agents": "./agents/",
|
|
19
|
+
"skills": "./skills/",
|
|
20
|
+
"agents": "./agents/",
|
|
21
21
|
"interface": {
|
|
22
22
|
"displayName": "Pathly",
|
|
23
23
|
"shortDescription": "Tell it what you want. Pathly chooses the path.",
|