plate-core 0.7.2__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.
- plate_core-0.7.2/LICENSE +38 -0
- plate_core-0.7.2/PKG-INFO +270 -0
- plate_core-0.7.2/README.md +211 -0
- plate_core-0.7.2/pyproject.toml +38 -0
- plate_core-0.7.2/setup.cfg +4 -0
- plate_core-0.7.2/src/plate_core/__init__.py +21 -0
- plate_core-0.7.2/src/plate_core/agent_guidance.py +303 -0
- plate_core-0.7.2/src/plate_core/autonomy.py +539 -0
- plate_core-0.7.2/src/plate_core/baseline_catalog.py +457 -0
- plate_core-0.7.2/src/plate_core/bootstrap.py +368 -0
- plate_core-0.7.2/src/plate_core/cli.py +1245 -0
- plate_core-0.7.2/src/plate_core/contemplation.py +391 -0
- plate_core-0.7.2/src/plate_core/context_map.py +134 -0
- plate_core-0.7.2/src/plate_core/costs.py +204 -0
- plate_core-0.7.2/src/plate_core/curiosity/__init__.py +1 -0
- plate_core-0.7.2/src/plate_core/curiosity/answers.py +354 -0
- plate_core-0.7.2/src/plate_core/data/baseline_catalog.yml +688 -0
- plate_core-0.7.2/src/plate_core/data/plate_extensions.yml +20 -0
- plate_core-0.7.2/src/plate_core/data/template_payload_inventory.json +475 -0
- plate_core-0.7.2/src/plate_core/data/template_payload_manifest.yml +29 -0
- plate_core-0.7.2/src/plate_core/discussions.py +186 -0
- plate_core-0.7.2/src/plate_core/epics.py +223 -0
- plate_core-0.7.2/src/plate_core/features.py +154 -0
- plate_core-0.7.2/src/plate_core/github_client.py +171 -0
- plate_core-0.7.2/src/plate_core/health.py +256 -0
- plate_core-0.7.2/src/plate_core/inventory.py +47 -0
- plate_core-0.7.2/src/plate_core/markers.py +346 -0
- plate_core-0.7.2/src/plate_core/mcp/__init__.py +1 -0
- plate_core-0.7.2/src/plate_core/mcp/audit_tools.py +332 -0
- plate_core-0.7.2/src/plate_core/mcp/curiosity_tools.py +674 -0
- plate_core-0.7.2/src/plate_core/mcp/tools.py +369 -0
- plate_core-0.7.2/src/plate_core/mcp_server.py +1478 -0
- plate_core-0.7.2/src/plate_core/migration.py +169 -0
- plate_core-0.7.2/src/plate_core/plate_config.py +570 -0
- plate_core-0.7.2/src/plate_core/pr_babysit.py +604 -0
- plate_core-0.7.2/src/plate_core/release.py +1382 -0
- plate_core-0.7.2/src/plate_core/skills_surface.py +218 -0
- plate_core-0.7.2/src/plate_core/template_payload/AGENTS.md +651 -0
- plate_core-0.7.2/src/plate_core/template_payload/CHANGELOG.md +28 -0
- plate_core-0.7.2/src/plate_core/template_payload/CONTRIBUTING.md +69 -0
- plate_core-0.7.2/src/plate_core/template_payload/README.md +126 -0
- plate_core-0.7.2/src/plate_core/template_payload/SPEC.md +69 -0
- plate_core-0.7.2/src/plate_core/template_payload/VISION.md +29 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/README.md +173 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/adr/0000-template.md +32 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/audits/audit-report-template.md +33 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/bootstrap/new-repository-checklist.md +62 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/current/README.md +3 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/design/README.md +67 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/design/conversation-to-issue-graph.md +503 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/design/default-questions.md +41 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/design/epic-planning-dialogue-flow.md +491 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/design/extension-repository.md +326 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/design/goals-wiki-page-convention.md +103 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/design/onboarding-questions.md +161 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/design/playwright-ci-design.md +868 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/marketing/experiments.md +5 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/marketing/launch-checklist.md +9 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/marketing/marketing-site-brief.md +22 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/migration/baseline.md +3 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/migration/charter.md +3 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/migration/completion-report.md +3 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/migration/enforcement-plan.md +5 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/migration/exceptions.md +5 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/migration/inventory.md +5 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/playwright-e2e-guide.md +537 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/research/README.md +54 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/research/automatic-epic-creation.md +243 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/research/custom-agent-packaging.md +110 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/research/epic-intent-detection.md +266 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/research/gif-generation-spike.md +375 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/research/information-goals.md +155 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/research/interactive-planning-ux.md +335 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/research/openspec-evaluation.md +128 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/research/playwright-asset-strategy.md +81 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/research/playwright-gif-generation.md +64 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/vision/README.md +5 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/wiki/Automatic-Epic-Creation.md +41 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/wiki/Goals.md +43 -0
- plate_core-0.7.2/src/plate_core/template_payload/docs/wiki/Home.md +15 -0
- plate_core-0.7.2/src/plate_core/template_payload/package.json +16 -0
- plate_core-0.7.2/src/plate_core/template_payload/playwright.config.ts +82 -0
- plate_core-0.7.2/src/plate_core/template_payload/scripts/BootstrapGitHub.ps1 +283 -0
- plate_core-0.7.2/src/plate_core/template_payload/scripts/CheckToolchain.ps1 +58 -0
- plate_core-0.7.2/src/plate_core/template_payload/scripts/QuestionBatch.ps1 +10 -0
- plate_core-0.7.2/src/plate_core/template_payload/scripts/README.md +428 -0
- plate_core-0.7.2/src/plate_core/template_payload/scripts/ValidatePlateRepo.ps1 +67 -0
- plate_core-0.7.2/src/plate_core/template_payload/scripts/bootstrap_github.sh +264 -0
- plate_core-0.7.2/src/plate_core/template_payload/scripts/check_toolchain.sh +54 -0
- plate_core-0.7.2/src/plate_core/template_payload/scripts/dev-server.js +59 -0
- plate_core-0.7.2/src/plate_core/template_payload/scripts/e2e-record.ps1 +256 -0
- plate_core-0.7.2/src/plate_core/template_payload/scripts/e2e-record.sh +230 -0
- plate_core-0.7.2/src/plate_core/template_payload/scripts/gif-from-video.ps1 +270 -0
- plate_core-0.7.2/src/plate_core/template_payload/scripts/gif-from-video.sh +212 -0
- plate_core-0.7.2/src/plate_core/template_payload/scripts/question_batch.sh +11 -0
- plate_core-0.7.2/src/plate_core/template_payload/scripts/validate_plate_repo.sh +180 -0
- plate_core-0.7.2/src/plate_core/template_payload/tests/README.md +37 -0
- plate_core-0.7.2/src/plate_core/template_payload/tests/e2e/README.md +63 -0
- plate_core-0.7.2/src/plate_core/template_payload/tests/e2e/fixtures/README.md +14 -0
- plate_core-0.7.2/src/plate_core/template_payload/tests/e2e/fixtures/gifs/README.md +168 -0
- plate_core-0.7.2/src/plate_core/template_payload/tests/e2e/fixtures/gifs/homepage-demo.gif +0 -0
- plate_core-0.7.2/src/plate_core/template_payload/tests/e2e/pages/base-page.ts +51 -0
- plate_core-0.7.2/src/plate_core/template_payload/tests/e2e/pages/login-page.ts +38 -0
- plate_core-0.7.2/src/plate_core/template_payload/tests/e2e/specs/example.spec.ts +37 -0
- plate_core-0.7.2/src/plate_core/template_payload/tests/e2e/specs/failing-example.spec.ts +20 -0
- plate_core-0.7.2/src/plate_core/template_payload/tests/spike-videos/TEST_RESULTS.md +258 -0
- plate_core-0.7.2/src/plate_core/template_payload/tests/spike-videos/test-10s.webm +0 -0
- plate_core-0.7.2/src/plate_core/template_payload/tests/spike-videos/test-high.gif +0 -0
- plate_core-0.7.2/src/plate_core/template_payload/tests/spike-videos/test-low.gif +0 -0
- plate_core-0.7.2/src/plate_core/template_payload/tests/spike-videos/test-medium.gif +0 -0
- plate_core-0.7.2/src/plate_core/template_payload/tests/spike-videos/test-trimmed-5s-low.gif +0 -0
- plate_core-0.7.2/src/plate_core/template_payload/tests/spike-videos/test-trimmed-5s.gif +0 -0
- plate_core-0.7.2/src/plate_core/template_payload.py +155 -0
- plate_core-0.7.2/src/plate_core/version_sync.py +145 -0
- plate_core-0.7.2/src/plate_core.egg-info/PKG-INFO +270 -0
- plate_core-0.7.2/src/plate_core.egg-info/SOURCES.txt +152 -0
- plate_core-0.7.2/src/plate_core.egg-info/dependency_links.txt +1 -0
- plate_core-0.7.2/src/plate_core.egg-info/entry_points.txt +2 -0
- plate_core-0.7.2/src/plate_core.egg-info/top_level.txt +1 -0
- plate_core-0.7.2/tests/test_221_core_audit_engine.py +154 -0
- plate_core-0.7.2/tests/test_autonomy.py +237 -0
- plate_core-0.7.2/tests/test_baseline_catalog.py +43 -0
- plate_core-0.7.2/tests/test_bootstrap.py +295 -0
- plate_core-0.7.2/tests/test_cli.py +326 -0
- plate_core-0.7.2/tests/test_contemplation.py +180 -0
- plate_core-0.7.2/tests/test_context_map.py +29 -0
- plate_core-0.7.2/tests/test_copilot_cli_marketplace_packaging.py +129 -0
- plate_core-0.7.2/tests/test_cost_control_thin_surfaces.py +49 -0
- plate_core-0.7.2/tests/test_costs.py +84 -0
- plate_core-0.7.2/tests/test_curiosity_answers.py +224 -0
- plate_core-0.7.2/tests/test_current_md_reference_docs.py +41 -0
- plate_core-0.7.2/tests/test_current_md_stale_reference_audit.py +39 -0
- plate_core-0.7.2/tests/test_cut_release.py +484 -0
- plate_core-0.7.2/tests/test_delegation.py +401 -0
- plate_core-0.7.2/tests/test_epic89_artifacts.py +32 -0
- plate_core-0.7.2/tests/test_epic89_cutover.py +453 -0
- plate_core-0.7.2/tests/test_epic89_extensions.py +373 -0
- plate_core-0.7.2/tests/test_epic89_inventory.py +231 -0
- plate_core-0.7.2/tests/test_epic89_markers.py +244 -0
- plate_core-0.7.2/tests/test_epic89_plate_config.py +535 -0
- plate_core-0.7.2/tests/test_epics.py +56 -0
- plate_core-0.7.2/tests/test_features.py +87 -0
- plate_core-0.7.2/tests/test_github_client.py +136 -0
- plate_core-0.7.2/tests/test_health.py +167 -0
- plate_core-0.7.2/tests/test_mcp.py +825 -0
- plate_core-0.7.2/tests/test_native_github_pr_integration.py +93 -0
- plate_core-0.7.2/tests/test_pr_babysit.py +754 -0
- plate_core-0.7.2/tests/test_pr_documentation_gate_release_notes.py +18 -0
- plate_core-0.7.2/tests/test_release.py +1316 -0
- plate_core-0.7.2/tests/test_release_notes_current_translation.py +34 -0
- plate_core-0.7.2/tests/test_skills_surface.py +97 -0
- plate_core-0.7.2/tests/test_template_payload.py +97 -0
- plate_core-0.7.2/tests/test_template_payload_current_md_cutover.py +67 -0
- plate_core-0.7.2/tests/test_vision_current_structure.py +80 -0
plate_core-0.7.2/LICENSE
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Andrew Kasper
|
|
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.
|
|
22
|
+
|
|
23
|
+
Commons Clause License Condition v1.0
|
|
24
|
+
|
|
25
|
+
The Software is provided to you by the Licensor under the License, as defined
|
|
26
|
+
below, subject to the following condition.
|
|
27
|
+
|
|
28
|
+
Without limiting other conditions in the License, the grant of rights under the
|
|
29
|
+
License will not include, and the License does not grant to you, the right to
|
|
30
|
+
Sell the Software.
|
|
31
|
+
|
|
32
|
+
For purposes of the foregoing, “Sell” means practicing any or all of the rights
|
|
33
|
+
granted to you under the License to provide to third parties, for a fee or other
|
|
34
|
+
consideration (including without limitation fees for hosting or consulting/
|
|
35
|
+
support services related to the Software), a product or service whose value
|
|
36
|
+
derives, entirely or substantially, from the functionality of the Software. Any
|
|
37
|
+
license notice or attribution required by the License must also include this
|
|
38
|
+
Commons Clause License Condition notice.
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: plate-core
|
|
3
|
+
Version: 0.7.2
|
|
4
|
+
Summary: PLATE core library, gh extension entrypoint, and MCP server for GitHub project methodology automation
|
|
5
|
+
Author: Andrew Kasper
|
|
6
|
+
License: MIT License
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2026 Andrew Kasper
|
|
9
|
+
|
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
+
in the Software without restriction, including without limitation the rights
|
|
13
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
+
furnished to do so, subject to the following conditions:
|
|
16
|
+
|
|
17
|
+
The above copyright notice and this permission notice shall be included in all
|
|
18
|
+
copies or substantial portions of the Software.
|
|
19
|
+
|
|
20
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
|
+
SOFTWARE.
|
|
27
|
+
|
|
28
|
+
Commons Clause License Condition v1.0
|
|
29
|
+
|
|
30
|
+
The Software is provided to you by the Licensor under the License, as defined
|
|
31
|
+
below, subject to the following condition.
|
|
32
|
+
|
|
33
|
+
Without limiting other conditions in the License, the grant of rights under the
|
|
34
|
+
License will not include, and the License does not grant to you, the right to
|
|
35
|
+
Sell the Software.
|
|
36
|
+
|
|
37
|
+
For purposes of the foregoing, “Sell” means practicing any or all of the rights
|
|
38
|
+
granted to you under the License to provide to third parties, for a fee or other
|
|
39
|
+
consideration (including without limitation fees for hosting or consulting/
|
|
40
|
+
support services related to the Software), a product or service whose value
|
|
41
|
+
derives, entirely or substantially, from the functionality of the Software. Any
|
|
42
|
+
license notice or attribution required by the License must also include this
|
|
43
|
+
Commons Clause License Condition notice.
|
|
44
|
+
|
|
45
|
+
Project-URL: Homepage, https://github.com/akasper/plate
|
|
46
|
+
Project-URL: Repository, https://github.com/akasper/plate
|
|
47
|
+
Project-URL: Documentation, https://github.com/akasper/plate/blob/main/README.md
|
|
48
|
+
Classifier: Development Status :: 4 - Beta
|
|
49
|
+
Classifier: Intended Audience :: Developers
|
|
50
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
51
|
+
Classifier: Programming Language :: Python :: 3
|
|
52
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
53
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
54
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
55
|
+
Requires-Python: >=3.10
|
|
56
|
+
Description-Content-Type: text/markdown
|
|
57
|
+
License-File: LICENSE
|
|
58
|
+
Dynamic: license-file
|
|
59
|
+
|
|
60
|
+
# plate_core
|
|
61
|
+
|
|
62
|
+
**plate_core** is the shared library powering the [PLATE](https://github.com/akasper/plate_template) platform tooling. It is designed to be deployed in three forms:
|
|
63
|
+
|
|
64
|
+
| Surface | Target User | How to Install |
|
|
65
|
+
|---|---|---|
|
|
66
|
+
| `gh plate` extension | Humans and scripts — terminal PLATE health checks | `gh extension install akasper/gh-plate` |
|
|
67
|
+
| `plate-mcp` MCP server | AI agents — first-class tool calls via `/mcp` in supported CLIs | `pip install plate-core` then `plate-mcp` (or `python -m plate_core.mcp_server`) |
|
|
68
|
+
| CLI agent plugin (e.g. Copilot CLI, Grok Build, other standards-compliant CLIs) | Interactive sessions — `/agent plate` + MCP wiring (see grok-build epic for CLI-agnostic details) | `pip install plate-core` then `copilot plugin marketplace add akasper/plate` and `copilot plugin install plate-core@plate-marketplace` |
|
|
69
|
+
|
|
70
|
+
All surfaces are backed by the same `plate_core` library, ensuring consistent behavior regardless of how you access PLATE platform features.
|
|
71
|
+
|
|
72
|
+
**Licensing**
|
|
73
|
+
|
|
74
|
+
This project is licensed under a source-available model (MIT base + Commons Clause License Condition v1.0). Free for non-commercial/personal/internal use and modification. Commercial use, resale, or SaaS offerings require a separate license. See the [LICENSE](LICENSE) file for the full text.
|
|
75
|
+
|
|
76
|
+
## What It Does
|
|
77
|
+
|
|
78
|
+
`plate_core` surfaces the live state of a PLATE project by querying the GitHub API and applying PLATE methodology rules:
|
|
79
|
+
|
|
80
|
+
- **Health check** — label coverage, branch protection status, open Epic count
|
|
81
|
+
- **Epic status** — per-epic child issue summary via `gh plate epic status`
|
|
82
|
+
- **Feature detection** — optional PLATE capability detection (Playwright E2E, plugin setup, etc.) via `gh plate features`
|
|
83
|
+
- **Bootstrap planning** — new-project setup planning/apply baseline via `gh plate bootstrap`
|
|
84
|
+
- **Baseline agents and skills** — discoverable catalog via `gh plate agents` and `gh plate skills`
|
|
85
|
+
- **PR feedback babysitting** — local monitoring/trigger flow via `gh plate pr babysit <number>`
|
|
86
|
+
- **E2E Playwright tooling** — scaffolding, recording, and validation tools via MCP
|
|
87
|
+
- **MCP tools** — `plate_health`, `plate_epic_status`, `plate_features`, `plate_bootstrap`, `plate_plan_epic`, `plate_pr_babysit`, `plate_resolve_review_thread`, `plate_agents`, `plate_agent`, `plate_skills`, `plate_skill`, `init_playwright`, `record_e2e_gif`, `validate_e2e_tests` return structured payloads
|
|
88
|
+
- **CLI agent plugin** — installable agent surface (`/agent plate` or equivalent) with bundled MCP server configuration (CLI-agnostic per grok-build epic)
|
|
89
|
+
|
|
90
|
+
## Quick Start
|
|
91
|
+
|
|
92
|
+
### As a Python package (for `plate-mcp` + library use)
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
pip install plate-core
|
|
96
|
+
plate-mcp # stdio MCP server for agents
|
|
97
|
+
python -c "import plate_core; print(plate_core.__version__)"
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### As a `gh` extension (v1 baseline)
|
|
101
|
+
|
|
102
|
+
```sh
|
|
103
|
+
gh extension install akasper/gh-plate
|
|
104
|
+
gh plate health # PLATE health check for the current repo
|
|
105
|
+
gh plate health --repo akasper/plate --json
|
|
106
|
+
gh plate epic status --repo akasper/plate --json
|
|
107
|
+
gh plate features --repo akasper/plate --json
|
|
108
|
+
gh plate agents list --json
|
|
109
|
+
gh plate agents show research-agent --json
|
|
110
|
+
gh plate skills list --json
|
|
111
|
+
gh plate skills show crud-projects --json
|
|
112
|
+
gh plate bootstrap --repo akasper/plate --json # dry-run plan
|
|
113
|
+
gh plate bootstrap --repo akasper/plate --apply # apply supported steps
|
|
114
|
+
gh plate pr babysit 112 --repo akasper/plate --json
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
The `gh plate` extension is published from a dedicated thin repository (`akasper/gh-plate`) to satisfy GitHub CLI's requirement that extension repository names start with `gh-`. The complete implementation, the `plate-core` Python package on PyPI, the MCP server entrypoint, the plugin assets, and all source live in this repository (`akasper/plate`). Users and scripts install the extension with `gh extension install akasper/gh-plate`.
|
|
118
|
+
|
|
119
|
+
### As an MCP server (v1 baseline; works in Copilot CLI, Grok Build, and other compatible agents)
|
|
120
|
+
|
|
121
|
+
```sh
|
|
122
|
+
# In a supported CLI agent session (e.g. Copilot CLI):
|
|
123
|
+
/mcp connect /absolute/path/to/plate/plate-mcp
|
|
124
|
+
# Then call tools: plate_health, plate_epic_status, plate_features, plate_bootstrap, plate_plan_epic, plate_pr_babysit, plate_resolve_review_thread, plate_agents, plate_agent, plate_skills, plate_skill
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### As a CLI agent plugin (Copilot CLI, Grok Build, and other standards-compliant CLIs)
|
|
128
|
+
|
|
129
|
+
```sh
|
|
130
|
+
# Install the runtime prerequisite first so the plugin's MCP command is available.
|
|
131
|
+
pip install plate-core
|
|
132
|
+
|
|
133
|
+
# Register this repository as a marketplace, then install the plugin from it.
|
|
134
|
+
copilot plugin marketplace add akasper/plate
|
|
135
|
+
copilot plugin install plate-core@plate-marketplace
|
|
136
|
+
|
|
137
|
+
# Grok Build (TUI / CLI):
|
|
138
|
+
grok plugin marketplace add akasper/plate
|
|
139
|
+
grok plugin install plate-core@plate-marketplace --trust
|
|
140
|
+
# Then enable the plugin, reload the TUI (`r` in Plugins), and verify:
|
|
141
|
+
# grok inspect # expect plate-core skills, plate agent, and plate-core (stdio) MCP
|
|
142
|
+
# Or reinstall from a local checkout during development:
|
|
143
|
+
# grok plugin install /absolute/path/to/plate/.plugin --trust
|
|
144
|
+
|
|
145
|
+
# In a new session with your CLI agent, invoke the plate agent (see your agent's docs for the exact command, e.g. /agent plate)
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
For local development or direct-source installation, these equivalent commands also work (adjust for your CLI):
|
|
149
|
+
|
|
150
|
+
```sh
|
|
151
|
+
copilot plugin install /absolute/path/to/plate
|
|
152
|
+
# or
|
|
153
|
+
copilot plugin install akasper/plate:plugin
|
|
154
|
+
# Grok equivalent: grok plugin install /absolute/path/to/plate --trust
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
The marketplace flow is the supported public install path. The plugin still expects the `plate-mcp` command to be available on `PATH`, which is why `pip install plate-core` remains a prerequisite until publication/runtime provisioning is further automated. There is no separate GitHub-run submission process for Copilot CLI or Grok Build marketplaces: this repository itself becomes the marketplace once the manifest is merged to the default branch and you treat that path as the supported public install channel.
|
|
158
|
+
|
|
159
|
+
#### Marketplace release checklist
|
|
160
|
+
|
|
161
|
+
Before cutting the release that includes this marketplace path:
|
|
162
|
+
|
|
163
|
+
1. Confirm `.github/plugin/marketplace.json` (Copilot) and `.grok-plugin/marketplace.json` (Grok) still point at the intended plugin source (`.plugin/` for the committed payload used by generator + e2e).
|
|
164
|
+
2. If baseline catalog skills changed, run `python3 scripts/generate-plugin-skills.py` (and commit) so `plugin/SKILLS.md`, `plugin/skills/*/SKILL.md`, and the mirrored `.plugin/` copies stay in sync; then `python3 scripts/generate-plugin-skills.py --check`.
|
|
165
|
+
3. Re-run `python3 scripts/generate-grok-plugin-index.py` (and commit) if `plugin/agents/`, `plugin/skills/`, `.mcp.json`, or manifest keys changed; then `python3 scripts/generate-grok-plugin-index.py --check`.
|
|
166
|
+
4. Verify the runtime prerequisite is available with `pip install plate-core`.
|
|
167
|
+
5. Smoke-test the pre-launch install flows (Copilot + generator for Grok):
|
|
168
|
+
```sh
|
|
169
|
+
copilot plugin marketplace add akasper/plate
|
|
170
|
+
copilot plugin install plate-core@plate-marketplace
|
|
171
|
+
python3 scripts/generate-plugin-skills.py --check
|
|
172
|
+
python3 scripts/generate-grok-plugin-index.py --check
|
|
173
|
+
```
|
|
174
|
+
6. Verify first-class media + adoption proof in packaging: release notes include ## Media Evidence with videos/GIFs (labeled "explanatory for new Feature, generated from automated test run via record_e2e_gif"), and `gh plate release status` surfaces github_release_* state (exists/is_latest/url) for cut/finalize/packaging verification under #654.
|
|
175
|
+
7. Complete the human-owned publication tasks tracked in #380 and #381.
|
|
176
|
+
8. Fold the finished Epic into the active release issue (#376) and cut the release through the normal PLATE release ceremony.
|
|
177
|
+
|
|
178
|
+
See the grok-build epic for full CLI-agnostic details and verification that no vendor-specific language remains in the plugin files. (This release also closes the Grok marketplace discovery gap reported in #570.)
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
## Playwright E2E Testing
|
|
182
|
+
|
|
183
|
+
`plate_core` includes tools for scaffolding, validating, and managing Playwright E2E tests:
|
|
184
|
+
|
|
185
|
+
### MCP Tools
|
|
186
|
+
|
|
187
|
+
- **`init_playwright`** — Initialize Playwright E2E setup in a repository
|
|
188
|
+
```sh
|
|
189
|
+
# Copy config, test specs, and recording scripts from plate's template payload
|
|
190
|
+
@copilot init-playwright repo_path="/path/to/repo"
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
- **`validate_e2e_tests`** — Verify Playwright setup and detect missing configuration
|
|
194
|
+
```sh
|
|
195
|
+
@copilot validate-e2e-tests repo_path="/path/to/repo"
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
- **`record_e2e_gif`** — Record and generate demo GIF from a Playwright E2E test
|
|
199
|
+
```sh
|
|
200
|
+
@copilot record-e2e-gif repo_path="/path/to/repo" test_name="feature-name" quality="medium"
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### CLI Feature Detection
|
|
204
|
+
|
|
205
|
+
Check if a repo has Playwright E2E setup:
|
|
206
|
+
|
|
207
|
+
```sh
|
|
208
|
+
gh plate features --repo owner/repo
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
Output example:
|
|
212
|
+
```
|
|
213
|
+
Repo: akasper/plate_template
|
|
214
|
+
|
|
215
|
+
Autonomous Mode.................... ✅ ENABLED
|
|
216
|
+
Platform Monitor Workflow.......... ⏹️ NOT CONFIGURED
|
|
217
|
+
Copilot Plugin (.plugin)........... ✅ ENABLED
|
|
218
|
+
Copilot Plugin (plugin)............ ✅ ENABLED
|
|
219
|
+
MCP Manifest (.plugin)............. ✅ ENABLED
|
|
220
|
+
MCP Manifest (plugin).............. ✅ ENABLED
|
|
221
|
+
Per-feature change files........... ✅ ENABLED
|
|
222
|
+
Release notes..................... ✅ ENABLED
|
|
223
|
+
Baseline Agents Catalog........... ✅ ENABLED
|
|
224
|
+
Playwright E2E Testing............. ✅ ENABLED
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
## Runtime layout (v1 baseline)
|
|
228
|
+
|
|
229
|
+
```text
|
|
230
|
+
plate/
|
|
231
|
+
├── .plugin/ # root plugin discovery manifest + agent + MCP config
|
|
232
|
+
├── .github/plugin/ # Copilot CLI marketplace manifest
|
|
233
|
+
├── plugin/ # plugin source surface (mirrors .plugin metadata)
|
|
234
|
+
├── src/plate_core/
|
|
235
|
+
│ ├── github_client.py # gh api wrapper
|
|
236
|
+
│ ├── health.py # shared health logic
|
|
237
|
+
│ ├── cli.py # shared CLI command handlers
|
|
238
|
+
│ ├── features.py # feature detection (local and remote)
|
|
239
|
+
│ ├── agent_guidance.py # agent prompting strategies
|
|
240
|
+
│ ├── baseline_catalog.py # baseline agent/skill catalog loader
|
|
241
|
+
│ ├── mcp/tools.py # Playwright E2E MCP tools
|
|
242
|
+
│ ├── mcp_server.py # MCP stdio server (health, epic, catalog, e2e tools)
|
|
243
|
+
│ └── data/
|
|
244
|
+
│ └── baseline_catalog.yml
|
|
245
|
+
├── gh-plate # gh extension entrypoint
|
|
246
|
+
└── plate-mcp # MCP server entrypoint
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
## Contributing
|
|
250
|
+
|
|
251
|
+
This repository follows the [PLATE methodology](https://github.com/akasper/plate_template). See `AGENTS.md` for agent operating rules and the full PLATE workflow.
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## Keeping Your Fork Current
|
|
256
|
+
|
|
257
|
+
If your repository started from an older `plate_template` release and has local process customizations, avoid full-file replacement during upgrades.
|
|
258
|
+
|
|
259
|
+
<!-- PLATES-CORE:BEGIN keeping-your-fork-current -->
|
|
260
|
+
Use this sync flow:
|
|
261
|
+
|
|
262
|
+
1. Fetch upstream template updates (`git fetch upstream`) and review diffs for `AGENTS.md`, `.agentic/skills.yml`, `.agentic/releases/`, and workflows in `.github/workflows/` that contain `PLATES-CORE` markers.
|
|
263
|
+
2. Import only upstream-owned `PLATES-CORE` sections into your customized files.
|
|
264
|
+
3. Preserve local sections outside those markers.
|
|
265
|
+
4. Open an atomic PR with the correct PR type label and issue linkage (`Closes #N` when applicable).
|
|
266
|
+
5. Update per-feature change files in `.agentic/releases/` with imported behavior and evidence.
|
|
267
|
+
6. Run required checks before merge.
|
|
268
|
+
|
|
269
|
+
This keeps downstream repos aligned with new core PLATE behavior without erasing project-specific policy.
|
|
270
|
+
<!-- PLATES-CORE:END keeping-your-fork-current -->
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
# plate_core
|
|
2
|
+
|
|
3
|
+
**plate_core** is the shared library powering the [PLATE](https://github.com/akasper/plate_template) platform tooling. It is designed to be deployed in three forms:
|
|
4
|
+
|
|
5
|
+
| Surface | Target User | How to Install |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| `gh plate` extension | Humans and scripts — terminal PLATE health checks | `gh extension install akasper/gh-plate` |
|
|
8
|
+
| `plate-mcp` MCP server | AI agents — first-class tool calls via `/mcp` in supported CLIs | `pip install plate-core` then `plate-mcp` (or `python -m plate_core.mcp_server`) |
|
|
9
|
+
| CLI agent plugin (e.g. Copilot CLI, Grok Build, other standards-compliant CLIs) | Interactive sessions — `/agent plate` + MCP wiring (see grok-build epic for CLI-agnostic details) | `pip install plate-core` then `copilot plugin marketplace add akasper/plate` and `copilot plugin install plate-core@plate-marketplace` |
|
|
10
|
+
|
|
11
|
+
All surfaces are backed by the same `plate_core` library, ensuring consistent behavior regardless of how you access PLATE platform features.
|
|
12
|
+
|
|
13
|
+
**Licensing**
|
|
14
|
+
|
|
15
|
+
This project is licensed under a source-available model (MIT base + Commons Clause License Condition v1.0). Free for non-commercial/personal/internal use and modification. Commercial use, resale, or SaaS offerings require a separate license. See the [LICENSE](LICENSE) file for the full text.
|
|
16
|
+
|
|
17
|
+
## What It Does
|
|
18
|
+
|
|
19
|
+
`plate_core` surfaces the live state of a PLATE project by querying the GitHub API and applying PLATE methodology rules:
|
|
20
|
+
|
|
21
|
+
- **Health check** — label coverage, branch protection status, open Epic count
|
|
22
|
+
- **Epic status** — per-epic child issue summary via `gh plate epic status`
|
|
23
|
+
- **Feature detection** — optional PLATE capability detection (Playwright E2E, plugin setup, etc.) via `gh plate features`
|
|
24
|
+
- **Bootstrap planning** — new-project setup planning/apply baseline via `gh plate bootstrap`
|
|
25
|
+
- **Baseline agents and skills** — discoverable catalog via `gh plate agents` and `gh plate skills`
|
|
26
|
+
- **PR feedback babysitting** — local monitoring/trigger flow via `gh plate pr babysit <number>`
|
|
27
|
+
- **E2E Playwright tooling** — scaffolding, recording, and validation tools via MCP
|
|
28
|
+
- **MCP tools** — `plate_health`, `plate_epic_status`, `plate_features`, `plate_bootstrap`, `plate_plan_epic`, `plate_pr_babysit`, `plate_resolve_review_thread`, `plate_agents`, `plate_agent`, `plate_skills`, `plate_skill`, `init_playwright`, `record_e2e_gif`, `validate_e2e_tests` return structured payloads
|
|
29
|
+
- **CLI agent plugin** — installable agent surface (`/agent plate` or equivalent) with bundled MCP server configuration (CLI-agnostic per grok-build epic)
|
|
30
|
+
|
|
31
|
+
## Quick Start
|
|
32
|
+
|
|
33
|
+
### As a Python package (for `plate-mcp` + library use)
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
pip install plate-core
|
|
37
|
+
plate-mcp # stdio MCP server for agents
|
|
38
|
+
python -c "import plate_core; print(plate_core.__version__)"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### As a `gh` extension (v1 baseline)
|
|
42
|
+
|
|
43
|
+
```sh
|
|
44
|
+
gh extension install akasper/gh-plate
|
|
45
|
+
gh plate health # PLATE health check for the current repo
|
|
46
|
+
gh plate health --repo akasper/plate --json
|
|
47
|
+
gh plate epic status --repo akasper/plate --json
|
|
48
|
+
gh plate features --repo akasper/plate --json
|
|
49
|
+
gh plate agents list --json
|
|
50
|
+
gh plate agents show research-agent --json
|
|
51
|
+
gh plate skills list --json
|
|
52
|
+
gh plate skills show crud-projects --json
|
|
53
|
+
gh plate bootstrap --repo akasper/plate --json # dry-run plan
|
|
54
|
+
gh plate bootstrap --repo akasper/plate --apply # apply supported steps
|
|
55
|
+
gh plate pr babysit 112 --repo akasper/plate --json
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The `gh plate` extension is published from a dedicated thin repository (`akasper/gh-plate`) to satisfy GitHub CLI's requirement that extension repository names start with `gh-`. The complete implementation, the `plate-core` Python package on PyPI, the MCP server entrypoint, the plugin assets, and all source live in this repository (`akasper/plate`). Users and scripts install the extension with `gh extension install akasper/gh-plate`.
|
|
59
|
+
|
|
60
|
+
### As an MCP server (v1 baseline; works in Copilot CLI, Grok Build, and other compatible agents)
|
|
61
|
+
|
|
62
|
+
```sh
|
|
63
|
+
# In a supported CLI agent session (e.g. Copilot CLI):
|
|
64
|
+
/mcp connect /absolute/path/to/plate/plate-mcp
|
|
65
|
+
# Then call tools: plate_health, plate_epic_status, plate_features, plate_bootstrap, plate_plan_epic, plate_pr_babysit, plate_resolve_review_thread, plate_agents, plate_agent, plate_skills, plate_skill
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### As a CLI agent plugin (Copilot CLI, Grok Build, and other standards-compliant CLIs)
|
|
69
|
+
|
|
70
|
+
```sh
|
|
71
|
+
# Install the runtime prerequisite first so the plugin's MCP command is available.
|
|
72
|
+
pip install plate-core
|
|
73
|
+
|
|
74
|
+
# Register this repository as a marketplace, then install the plugin from it.
|
|
75
|
+
copilot plugin marketplace add akasper/plate
|
|
76
|
+
copilot plugin install plate-core@plate-marketplace
|
|
77
|
+
|
|
78
|
+
# Grok Build (TUI / CLI):
|
|
79
|
+
grok plugin marketplace add akasper/plate
|
|
80
|
+
grok plugin install plate-core@plate-marketplace --trust
|
|
81
|
+
# Then enable the plugin, reload the TUI (`r` in Plugins), and verify:
|
|
82
|
+
# grok inspect # expect plate-core skills, plate agent, and plate-core (stdio) MCP
|
|
83
|
+
# Or reinstall from a local checkout during development:
|
|
84
|
+
# grok plugin install /absolute/path/to/plate/.plugin --trust
|
|
85
|
+
|
|
86
|
+
# In a new session with your CLI agent, invoke the plate agent (see your agent's docs for the exact command, e.g. /agent plate)
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
For local development or direct-source installation, these equivalent commands also work (adjust for your CLI):
|
|
90
|
+
|
|
91
|
+
```sh
|
|
92
|
+
copilot plugin install /absolute/path/to/plate
|
|
93
|
+
# or
|
|
94
|
+
copilot plugin install akasper/plate:plugin
|
|
95
|
+
# Grok equivalent: grok plugin install /absolute/path/to/plate --trust
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
The marketplace flow is the supported public install path. The plugin still expects the `plate-mcp` command to be available on `PATH`, which is why `pip install plate-core` remains a prerequisite until publication/runtime provisioning is further automated. There is no separate GitHub-run submission process for Copilot CLI or Grok Build marketplaces: this repository itself becomes the marketplace once the manifest is merged to the default branch and you treat that path as the supported public install channel.
|
|
99
|
+
|
|
100
|
+
#### Marketplace release checklist
|
|
101
|
+
|
|
102
|
+
Before cutting the release that includes this marketplace path:
|
|
103
|
+
|
|
104
|
+
1. Confirm `.github/plugin/marketplace.json` (Copilot) and `.grok-plugin/marketplace.json` (Grok) still point at the intended plugin source (`.plugin/` for the committed payload used by generator + e2e).
|
|
105
|
+
2. If baseline catalog skills changed, run `python3 scripts/generate-plugin-skills.py` (and commit) so `plugin/SKILLS.md`, `plugin/skills/*/SKILL.md`, and the mirrored `.plugin/` copies stay in sync; then `python3 scripts/generate-plugin-skills.py --check`.
|
|
106
|
+
3. Re-run `python3 scripts/generate-grok-plugin-index.py` (and commit) if `plugin/agents/`, `plugin/skills/`, `.mcp.json`, or manifest keys changed; then `python3 scripts/generate-grok-plugin-index.py --check`.
|
|
107
|
+
4. Verify the runtime prerequisite is available with `pip install plate-core`.
|
|
108
|
+
5. Smoke-test the pre-launch install flows (Copilot + generator for Grok):
|
|
109
|
+
```sh
|
|
110
|
+
copilot plugin marketplace add akasper/plate
|
|
111
|
+
copilot plugin install plate-core@plate-marketplace
|
|
112
|
+
python3 scripts/generate-plugin-skills.py --check
|
|
113
|
+
python3 scripts/generate-grok-plugin-index.py --check
|
|
114
|
+
```
|
|
115
|
+
6. Verify first-class media + adoption proof in packaging: release notes include ## Media Evidence with videos/GIFs (labeled "explanatory for new Feature, generated from automated test run via record_e2e_gif"), and `gh plate release status` surfaces github_release_* state (exists/is_latest/url) for cut/finalize/packaging verification under #654.
|
|
116
|
+
7. Complete the human-owned publication tasks tracked in #380 and #381.
|
|
117
|
+
8. Fold the finished Epic into the active release issue (#376) and cut the release through the normal PLATE release ceremony.
|
|
118
|
+
|
|
119
|
+
See the grok-build epic for full CLI-agnostic details and verification that no vendor-specific language remains in the plugin files. (This release also closes the Grok marketplace discovery gap reported in #570.)
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
## Playwright E2E Testing
|
|
123
|
+
|
|
124
|
+
`plate_core` includes tools for scaffolding, validating, and managing Playwright E2E tests:
|
|
125
|
+
|
|
126
|
+
### MCP Tools
|
|
127
|
+
|
|
128
|
+
- **`init_playwright`** — Initialize Playwright E2E setup in a repository
|
|
129
|
+
```sh
|
|
130
|
+
# Copy config, test specs, and recording scripts from plate's template payload
|
|
131
|
+
@copilot init-playwright repo_path="/path/to/repo"
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
- **`validate_e2e_tests`** — Verify Playwright setup and detect missing configuration
|
|
135
|
+
```sh
|
|
136
|
+
@copilot validate-e2e-tests repo_path="/path/to/repo"
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
- **`record_e2e_gif`** — Record and generate demo GIF from a Playwright E2E test
|
|
140
|
+
```sh
|
|
141
|
+
@copilot record-e2e-gif repo_path="/path/to/repo" test_name="feature-name" quality="medium"
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### CLI Feature Detection
|
|
145
|
+
|
|
146
|
+
Check if a repo has Playwright E2E setup:
|
|
147
|
+
|
|
148
|
+
```sh
|
|
149
|
+
gh plate features --repo owner/repo
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Output example:
|
|
153
|
+
```
|
|
154
|
+
Repo: akasper/plate_template
|
|
155
|
+
|
|
156
|
+
Autonomous Mode.................... ✅ ENABLED
|
|
157
|
+
Platform Monitor Workflow.......... ⏹️ NOT CONFIGURED
|
|
158
|
+
Copilot Plugin (.plugin)........... ✅ ENABLED
|
|
159
|
+
Copilot Plugin (plugin)............ ✅ ENABLED
|
|
160
|
+
MCP Manifest (.plugin)............. ✅ ENABLED
|
|
161
|
+
MCP Manifest (plugin).............. ✅ ENABLED
|
|
162
|
+
Per-feature change files........... ✅ ENABLED
|
|
163
|
+
Release notes..................... ✅ ENABLED
|
|
164
|
+
Baseline Agents Catalog........... ✅ ENABLED
|
|
165
|
+
Playwright E2E Testing............. ✅ ENABLED
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## Runtime layout (v1 baseline)
|
|
169
|
+
|
|
170
|
+
```text
|
|
171
|
+
plate/
|
|
172
|
+
├── .plugin/ # root plugin discovery manifest + agent + MCP config
|
|
173
|
+
├── .github/plugin/ # Copilot CLI marketplace manifest
|
|
174
|
+
├── plugin/ # plugin source surface (mirrors .plugin metadata)
|
|
175
|
+
├── src/plate_core/
|
|
176
|
+
│ ├── github_client.py # gh api wrapper
|
|
177
|
+
│ ├── health.py # shared health logic
|
|
178
|
+
│ ├── cli.py # shared CLI command handlers
|
|
179
|
+
│ ├── features.py # feature detection (local and remote)
|
|
180
|
+
│ ├── agent_guidance.py # agent prompting strategies
|
|
181
|
+
│ ├── baseline_catalog.py # baseline agent/skill catalog loader
|
|
182
|
+
│ ├── mcp/tools.py # Playwright E2E MCP tools
|
|
183
|
+
│ ├── mcp_server.py # MCP stdio server (health, epic, catalog, e2e tools)
|
|
184
|
+
│ └── data/
|
|
185
|
+
│ └── baseline_catalog.yml
|
|
186
|
+
├── gh-plate # gh extension entrypoint
|
|
187
|
+
└── plate-mcp # MCP server entrypoint
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## Contributing
|
|
191
|
+
|
|
192
|
+
This repository follows the [PLATE methodology](https://github.com/akasper/plate_template). See `AGENTS.md` for agent operating rules and the full PLATE workflow.
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Keeping Your Fork Current
|
|
197
|
+
|
|
198
|
+
If your repository started from an older `plate_template` release and has local process customizations, avoid full-file replacement during upgrades.
|
|
199
|
+
|
|
200
|
+
<!-- PLATES-CORE:BEGIN keeping-your-fork-current -->
|
|
201
|
+
Use this sync flow:
|
|
202
|
+
|
|
203
|
+
1. Fetch upstream template updates (`git fetch upstream`) and review diffs for `AGENTS.md`, `.agentic/skills.yml`, `.agentic/releases/`, and workflows in `.github/workflows/` that contain `PLATES-CORE` markers.
|
|
204
|
+
2. Import only upstream-owned `PLATES-CORE` sections into your customized files.
|
|
205
|
+
3. Preserve local sections outside those markers.
|
|
206
|
+
4. Open an atomic PR with the correct PR type label and issue linkage (`Closes #N` when applicable).
|
|
207
|
+
5. Update per-feature change files in `.agentic/releases/` with imported behavior and evidence.
|
|
208
|
+
6. Run required checks before merge.
|
|
209
|
+
|
|
210
|
+
This keeps downstream repos aligned with new core PLATE behavior without erasing project-specific policy.
|
|
211
|
+
<!-- PLATES-CORE:END keeping-your-fork-current -->
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "plate-core"
|
|
7
|
+
version = "0.7.2"
|
|
8
|
+
description = "PLATE core library, gh extension entrypoint, and MCP server for GitHub project methodology automation"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.10"
|
|
11
|
+
authors = [
|
|
12
|
+
{name = "Andrew Kasper"}
|
|
13
|
+
]
|
|
14
|
+
license = {file = "LICENSE"}
|
|
15
|
+
dependencies = []
|
|
16
|
+
classifiers = [
|
|
17
|
+
"Development Status :: 4 - Beta",
|
|
18
|
+
"Intended Audience :: Developers",
|
|
19
|
+
"License :: OSI Approved :: MIT License",
|
|
20
|
+
"Programming Language :: Python :: 3",
|
|
21
|
+
"Programming Language :: Python :: 3.10",
|
|
22
|
+
"Programming Language :: Python :: 3.11",
|
|
23
|
+
"Programming Language :: Python :: 3.12",
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
[project.scripts]
|
|
27
|
+
plate-mcp = "plate_core.mcp_server:run"
|
|
28
|
+
|
|
29
|
+
[project.urls]
|
|
30
|
+
Homepage = "https://github.com/akasper/plate"
|
|
31
|
+
Repository = "https://github.com/akasper/plate"
|
|
32
|
+
Documentation = "https://github.com/akasper/plate/blob/main/README.md"
|
|
33
|
+
|
|
34
|
+
[tool.setuptools.packages.find]
|
|
35
|
+
where = ["src"]
|
|
36
|
+
|
|
37
|
+
[tool.setuptools.package-data]
|
|
38
|
+
"plate_core" = ["data/*.yml", "data/*.json", "template_payload/**/*"]
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"""plate_core runtime package."""
|
|
2
|
+
|
|
3
|
+
__version__ = "0.7.2"
|
|
4
|
+
|
|
5
|
+
# Core subsystems
|
|
6
|
+
from . import markers # PLATES-CORE marker parsing, validation, and safe upstream sync (Issue #130)
|
|
7
|
+
from . import inventory # Canonical methodology asset inventory (support for migration #131, health, etc.)
|
|
8
|
+
|
|
9
|
+
# Public marker API (for CLI, MCP, template sync, and extensions)
|
|
10
|
+
from .markers import (
|
|
11
|
+
MarkerParser,
|
|
12
|
+
MarkerParseError,
|
|
13
|
+
MarkerSection,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
__all__ = [
|
|
17
|
+
"markers",
|
|
18
|
+
"MarkerParser",
|
|
19
|
+
"MarkerParseError",
|
|
20
|
+
"MarkerSection",
|
|
21
|
+
]
|