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.
Files changed (154) hide show
  1. plate_core-0.7.2/LICENSE +38 -0
  2. plate_core-0.7.2/PKG-INFO +270 -0
  3. plate_core-0.7.2/README.md +211 -0
  4. plate_core-0.7.2/pyproject.toml +38 -0
  5. plate_core-0.7.2/setup.cfg +4 -0
  6. plate_core-0.7.2/src/plate_core/__init__.py +21 -0
  7. plate_core-0.7.2/src/plate_core/agent_guidance.py +303 -0
  8. plate_core-0.7.2/src/plate_core/autonomy.py +539 -0
  9. plate_core-0.7.2/src/plate_core/baseline_catalog.py +457 -0
  10. plate_core-0.7.2/src/plate_core/bootstrap.py +368 -0
  11. plate_core-0.7.2/src/plate_core/cli.py +1245 -0
  12. plate_core-0.7.2/src/plate_core/contemplation.py +391 -0
  13. plate_core-0.7.2/src/plate_core/context_map.py +134 -0
  14. plate_core-0.7.2/src/plate_core/costs.py +204 -0
  15. plate_core-0.7.2/src/plate_core/curiosity/__init__.py +1 -0
  16. plate_core-0.7.2/src/plate_core/curiosity/answers.py +354 -0
  17. plate_core-0.7.2/src/plate_core/data/baseline_catalog.yml +688 -0
  18. plate_core-0.7.2/src/plate_core/data/plate_extensions.yml +20 -0
  19. plate_core-0.7.2/src/plate_core/data/template_payload_inventory.json +475 -0
  20. plate_core-0.7.2/src/plate_core/data/template_payload_manifest.yml +29 -0
  21. plate_core-0.7.2/src/plate_core/discussions.py +186 -0
  22. plate_core-0.7.2/src/plate_core/epics.py +223 -0
  23. plate_core-0.7.2/src/plate_core/features.py +154 -0
  24. plate_core-0.7.2/src/plate_core/github_client.py +171 -0
  25. plate_core-0.7.2/src/plate_core/health.py +256 -0
  26. plate_core-0.7.2/src/plate_core/inventory.py +47 -0
  27. plate_core-0.7.2/src/plate_core/markers.py +346 -0
  28. plate_core-0.7.2/src/plate_core/mcp/__init__.py +1 -0
  29. plate_core-0.7.2/src/plate_core/mcp/audit_tools.py +332 -0
  30. plate_core-0.7.2/src/plate_core/mcp/curiosity_tools.py +674 -0
  31. plate_core-0.7.2/src/plate_core/mcp/tools.py +369 -0
  32. plate_core-0.7.2/src/plate_core/mcp_server.py +1478 -0
  33. plate_core-0.7.2/src/plate_core/migration.py +169 -0
  34. plate_core-0.7.2/src/plate_core/plate_config.py +570 -0
  35. plate_core-0.7.2/src/plate_core/pr_babysit.py +604 -0
  36. plate_core-0.7.2/src/plate_core/release.py +1382 -0
  37. plate_core-0.7.2/src/plate_core/skills_surface.py +218 -0
  38. plate_core-0.7.2/src/plate_core/template_payload/AGENTS.md +651 -0
  39. plate_core-0.7.2/src/plate_core/template_payload/CHANGELOG.md +28 -0
  40. plate_core-0.7.2/src/plate_core/template_payload/CONTRIBUTING.md +69 -0
  41. plate_core-0.7.2/src/plate_core/template_payload/README.md +126 -0
  42. plate_core-0.7.2/src/plate_core/template_payload/SPEC.md +69 -0
  43. plate_core-0.7.2/src/plate_core/template_payload/VISION.md +29 -0
  44. plate_core-0.7.2/src/plate_core/template_payload/docs/README.md +173 -0
  45. plate_core-0.7.2/src/plate_core/template_payload/docs/adr/0000-template.md +32 -0
  46. plate_core-0.7.2/src/plate_core/template_payload/docs/audits/audit-report-template.md +33 -0
  47. plate_core-0.7.2/src/plate_core/template_payload/docs/bootstrap/new-repository-checklist.md +62 -0
  48. plate_core-0.7.2/src/plate_core/template_payload/docs/current/README.md +3 -0
  49. plate_core-0.7.2/src/plate_core/template_payload/docs/design/README.md +67 -0
  50. plate_core-0.7.2/src/plate_core/template_payload/docs/design/conversation-to-issue-graph.md +503 -0
  51. plate_core-0.7.2/src/plate_core/template_payload/docs/design/default-questions.md +41 -0
  52. plate_core-0.7.2/src/plate_core/template_payload/docs/design/epic-planning-dialogue-flow.md +491 -0
  53. plate_core-0.7.2/src/plate_core/template_payload/docs/design/extension-repository.md +326 -0
  54. plate_core-0.7.2/src/plate_core/template_payload/docs/design/goals-wiki-page-convention.md +103 -0
  55. plate_core-0.7.2/src/plate_core/template_payload/docs/design/onboarding-questions.md +161 -0
  56. plate_core-0.7.2/src/plate_core/template_payload/docs/design/playwright-ci-design.md +868 -0
  57. plate_core-0.7.2/src/plate_core/template_payload/docs/marketing/experiments.md +5 -0
  58. plate_core-0.7.2/src/plate_core/template_payload/docs/marketing/launch-checklist.md +9 -0
  59. plate_core-0.7.2/src/plate_core/template_payload/docs/marketing/marketing-site-brief.md +22 -0
  60. plate_core-0.7.2/src/plate_core/template_payload/docs/migration/baseline.md +3 -0
  61. plate_core-0.7.2/src/plate_core/template_payload/docs/migration/charter.md +3 -0
  62. plate_core-0.7.2/src/plate_core/template_payload/docs/migration/completion-report.md +3 -0
  63. plate_core-0.7.2/src/plate_core/template_payload/docs/migration/enforcement-plan.md +5 -0
  64. plate_core-0.7.2/src/plate_core/template_payload/docs/migration/exceptions.md +5 -0
  65. plate_core-0.7.2/src/plate_core/template_payload/docs/migration/inventory.md +5 -0
  66. plate_core-0.7.2/src/plate_core/template_payload/docs/playwright-e2e-guide.md +537 -0
  67. plate_core-0.7.2/src/plate_core/template_payload/docs/research/README.md +54 -0
  68. plate_core-0.7.2/src/plate_core/template_payload/docs/research/automatic-epic-creation.md +243 -0
  69. plate_core-0.7.2/src/plate_core/template_payload/docs/research/custom-agent-packaging.md +110 -0
  70. plate_core-0.7.2/src/plate_core/template_payload/docs/research/epic-intent-detection.md +266 -0
  71. plate_core-0.7.2/src/plate_core/template_payload/docs/research/gif-generation-spike.md +375 -0
  72. plate_core-0.7.2/src/plate_core/template_payload/docs/research/information-goals.md +155 -0
  73. plate_core-0.7.2/src/plate_core/template_payload/docs/research/interactive-planning-ux.md +335 -0
  74. plate_core-0.7.2/src/plate_core/template_payload/docs/research/openspec-evaluation.md +128 -0
  75. plate_core-0.7.2/src/plate_core/template_payload/docs/research/playwright-asset-strategy.md +81 -0
  76. plate_core-0.7.2/src/plate_core/template_payload/docs/research/playwright-gif-generation.md +64 -0
  77. plate_core-0.7.2/src/plate_core/template_payload/docs/vision/README.md +5 -0
  78. plate_core-0.7.2/src/plate_core/template_payload/docs/wiki/Automatic-Epic-Creation.md +41 -0
  79. plate_core-0.7.2/src/plate_core/template_payload/docs/wiki/Goals.md +43 -0
  80. plate_core-0.7.2/src/plate_core/template_payload/docs/wiki/Home.md +15 -0
  81. plate_core-0.7.2/src/plate_core/template_payload/package.json +16 -0
  82. plate_core-0.7.2/src/plate_core/template_payload/playwright.config.ts +82 -0
  83. plate_core-0.7.2/src/plate_core/template_payload/scripts/BootstrapGitHub.ps1 +283 -0
  84. plate_core-0.7.2/src/plate_core/template_payload/scripts/CheckToolchain.ps1 +58 -0
  85. plate_core-0.7.2/src/plate_core/template_payload/scripts/QuestionBatch.ps1 +10 -0
  86. plate_core-0.7.2/src/plate_core/template_payload/scripts/README.md +428 -0
  87. plate_core-0.7.2/src/plate_core/template_payload/scripts/ValidatePlateRepo.ps1 +67 -0
  88. plate_core-0.7.2/src/plate_core/template_payload/scripts/bootstrap_github.sh +264 -0
  89. plate_core-0.7.2/src/plate_core/template_payload/scripts/check_toolchain.sh +54 -0
  90. plate_core-0.7.2/src/plate_core/template_payload/scripts/dev-server.js +59 -0
  91. plate_core-0.7.2/src/plate_core/template_payload/scripts/e2e-record.ps1 +256 -0
  92. plate_core-0.7.2/src/plate_core/template_payload/scripts/e2e-record.sh +230 -0
  93. plate_core-0.7.2/src/plate_core/template_payload/scripts/gif-from-video.ps1 +270 -0
  94. plate_core-0.7.2/src/plate_core/template_payload/scripts/gif-from-video.sh +212 -0
  95. plate_core-0.7.2/src/plate_core/template_payload/scripts/question_batch.sh +11 -0
  96. plate_core-0.7.2/src/plate_core/template_payload/scripts/validate_plate_repo.sh +180 -0
  97. plate_core-0.7.2/src/plate_core/template_payload/tests/README.md +37 -0
  98. plate_core-0.7.2/src/plate_core/template_payload/tests/e2e/README.md +63 -0
  99. plate_core-0.7.2/src/plate_core/template_payload/tests/e2e/fixtures/README.md +14 -0
  100. plate_core-0.7.2/src/plate_core/template_payload/tests/e2e/fixtures/gifs/README.md +168 -0
  101. plate_core-0.7.2/src/plate_core/template_payload/tests/e2e/fixtures/gifs/homepage-demo.gif +0 -0
  102. plate_core-0.7.2/src/plate_core/template_payload/tests/e2e/pages/base-page.ts +51 -0
  103. plate_core-0.7.2/src/plate_core/template_payload/tests/e2e/pages/login-page.ts +38 -0
  104. plate_core-0.7.2/src/plate_core/template_payload/tests/e2e/specs/example.spec.ts +37 -0
  105. plate_core-0.7.2/src/plate_core/template_payload/tests/e2e/specs/failing-example.spec.ts +20 -0
  106. plate_core-0.7.2/src/plate_core/template_payload/tests/spike-videos/TEST_RESULTS.md +258 -0
  107. plate_core-0.7.2/src/plate_core/template_payload/tests/spike-videos/test-10s.webm +0 -0
  108. plate_core-0.7.2/src/plate_core/template_payload/tests/spike-videos/test-high.gif +0 -0
  109. plate_core-0.7.2/src/plate_core/template_payload/tests/spike-videos/test-low.gif +0 -0
  110. plate_core-0.7.2/src/plate_core/template_payload/tests/spike-videos/test-medium.gif +0 -0
  111. plate_core-0.7.2/src/plate_core/template_payload/tests/spike-videos/test-trimmed-5s-low.gif +0 -0
  112. plate_core-0.7.2/src/plate_core/template_payload/tests/spike-videos/test-trimmed-5s.gif +0 -0
  113. plate_core-0.7.2/src/plate_core/template_payload.py +155 -0
  114. plate_core-0.7.2/src/plate_core/version_sync.py +145 -0
  115. plate_core-0.7.2/src/plate_core.egg-info/PKG-INFO +270 -0
  116. plate_core-0.7.2/src/plate_core.egg-info/SOURCES.txt +152 -0
  117. plate_core-0.7.2/src/plate_core.egg-info/dependency_links.txt +1 -0
  118. plate_core-0.7.2/src/plate_core.egg-info/entry_points.txt +2 -0
  119. plate_core-0.7.2/src/plate_core.egg-info/top_level.txt +1 -0
  120. plate_core-0.7.2/tests/test_221_core_audit_engine.py +154 -0
  121. plate_core-0.7.2/tests/test_autonomy.py +237 -0
  122. plate_core-0.7.2/tests/test_baseline_catalog.py +43 -0
  123. plate_core-0.7.2/tests/test_bootstrap.py +295 -0
  124. plate_core-0.7.2/tests/test_cli.py +326 -0
  125. plate_core-0.7.2/tests/test_contemplation.py +180 -0
  126. plate_core-0.7.2/tests/test_context_map.py +29 -0
  127. plate_core-0.7.2/tests/test_copilot_cli_marketplace_packaging.py +129 -0
  128. plate_core-0.7.2/tests/test_cost_control_thin_surfaces.py +49 -0
  129. plate_core-0.7.2/tests/test_costs.py +84 -0
  130. plate_core-0.7.2/tests/test_curiosity_answers.py +224 -0
  131. plate_core-0.7.2/tests/test_current_md_reference_docs.py +41 -0
  132. plate_core-0.7.2/tests/test_current_md_stale_reference_audit.py +39 -0
  133. plate_core-0.7.2/tests/test_cut_release.py +484 -0
  134. plate_core-0.7.2/tests/test_delegation.py +401 -0
  135. plate_core-0.7.2/tests/test_epic89_artifacts.py +32 -0
  136. plate_core-0.7.2/tests/test_epic89_cutover.py +453 -0
  137. plate_core-0.7.2/tests/test_epic89_extensions.py +373 -0
  138. plate_core-0.7.2/tests/test_epic89_inventory.py +231 -0
  139. plate_core-0.7.2/tests/test_epic89_markers.py +244 -0
  140. plate_core-0.7.2/tests/test_epic89_plate_config.py +535 -0
  141. plate_core-0.7.2/tests/test_epics.py +56 -0
  142. plate_core-0.7.2/tests/test_features.py +87 -0
  143. plate_core-0.7.2/tests/test_github_client.py +136 -0
  144. plate_core-0.7.2/tests/test_health.py +167 -0
  145. plate_core-0.7.2/tests/test_mcp.py +825 -0
  146. plate_core-0.7.2/tests/test_native_github_pr_integration.py +93 -0
  147. plate_core-0.7.2/tests/test_pr_babysit.py +754 -0
  148. plate_core-0.7.2/tests/test_pr_documentation_gate_release_notes.py +18 -0
  149. plate_core-0.7.2/tests/test_release.py +1316 -0
  150. plate_core-0.7.2/tests/test_release_notes_current_translation.py +34 -0
  151. plate_core-0.7.2/tests/test_skills_surface.py +97 -0
  152. plate_core-0.7.2/tests/test_template_payload.py +97 -0
  153. plate_core-0.7.2/tests/test_template_payload_current_md_cutover.py +67 -0
  154. plate_core-0.7.2/tests/test_vision_current_structure.py +80 -0
@@ -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,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -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
+ ]