agnostic-prompt-aps 1.1.3__tar.gz → 1.1.5__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.
- agnostic_prompt_aps-1.1.5/LICENSE +21 -0
- {agnostic_prompt_aps-1.1.3/src/agnostic_prompt_aps.egg-info → agnostic_prompt_aps-1.1.5}/PKG-INFO +37 -6
- agnostic_prompt_aps-1.1.5/README.md +69 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/pyproject.toml +4 -2
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5/src/agnostic_prompt_aps.egg-info}/PKG-INFO +37 -6
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/agnostic_prompt_aps.egg-info/SOURCES.txt +5 -2
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/agnostic_prompt_aps.egg-info/entry_points.txt +1 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/__init__.py +1 -1
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/cli.py +43 -53
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/core.py +32 -25
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/SKILL.md +2 -3
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/assets/constants/constants-json-block-v1.0.0.example.md +3 -3
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/platforms/README.md +7 -1
- agnostic_prompt_aps-1.1.5/src/aps_cli/payload/agnostic-prompt-standard/platforms/_schemas/platform-manifest.schema.json +157 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/platforms/_template/README.md +0 -2
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/platforms/_template/manifest.json +1 -2
- agnostic_prompt_aps-1.1.5/src/aps_cli/payload/agnostic-prompt-standard/platforms/claude-code/README.md +247 -0
- agnostic_prompt_aps-1.1.5/src/aps_cli/payload/agnostic-prompt-standard/platforms/claude-code/frontmatter/agent-frontmatter.md +98 -0
- agnostic_prompt_aps-1.1.5/src/aps_cli/payload/agnostic-prompt-standard/platforms/claude-code/frontmatter/rules-frontmatter.md +47 -0
- agnostic_prompt_aps-1.1.5/src/aps_cli/payload/agnostic-prompt-standard/platforms/claude-code/manifest.json +71 -0
- agnostic_prompt_aps-1.1.5/src/aps_cli/payload/agnostic-prompt-standard/platforms/claude-code/tools-registry.json +300 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/platforms/vscode-copilot/README.md +3 -11
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/platforms/vscode-copilot/frontmatter/agent-frontmatter.md +1 -1
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/platforms/vscode-copilot/frontmatter/instructions-frontmatter.md +0 -1
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/platforms/vscode-copilot/manifest.json +0 -1
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/references/03-agentic-control.md +55 -14
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/references/04-schemas-and-types.md +0 -3
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/references/05-grammar.md +5 -3
- agnostic_prompt_aps-1.1.3/LICENSE +0 -190
- agnostic_prompt_aps-1.1.3/README.md +0 -38
- agnostic_prompt_aps-1.1.3/src/aps_cli/payload/agnostic-prompt-standard/assets/agents/vscode-agent-v1.0.0.agent.md +0 -187
- agnostic_prompt_aps-1.1.3/src/aps_cli/payload/agnostic-prompt-standard/platforms/_schemas/platform-manifest.schema.json +0 -84
- agnostic_prompt_aps-1.1.3/src/aps_cli/payload/agnostic-prompt-standard/platforms/vscode-copilot/templates/AGENTS.md +0 -7
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/setup.cfg +0 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/agnostic_prompt_aps.egg-info/dependency_links.txt +0 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/agnostic_prompt_aps.egg-info/requires.txt +0 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/agnostic_prompt_aps.egg-info/top_level.txt +0 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/__main__.py +0 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/assets/constants/constants-text-block-v1.0.0.example.md +0 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/assets/formats/format-code-changes-full-v1.0.0.example.md +0 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/assets/formats/format-code-map-v1.0.0.example.md +0 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/assets/formats/format-error-v1.0.0.example.md +0 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/assets/formats/format-hierarchical-outline-v1.0.0.example.md +0 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/assets/formats/format-ideation-list-v1.0.0.example.md +0 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/assets/formats/format-markdown-table-v1.0.0.example.md +0 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/assets/formats/format-table-api-coverage-v1.0.0.example.md +0 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/platforms/_schemas/tools-registry.schema.json +0 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/platforms/_template/tools-registry.json +0 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/platforms/vscode-copilot/frontmatter/prompt-frontmatter.md +0 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/platforms/vscode-copilot/frontmatter/skill-frontmatter.md +0 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/platforms/vscode-copilot/tools-registry.json +0 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/references/00-structure.md +0 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/references/01-vocabulary.md +0 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/references/02-linting-and-formatting.md +0 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/references/06-logging-and-privacy.md +0 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/aps_cli/payload/agnostic-prompt-standard/references/07-error-taxonomy.md +0 -0
- {agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/tests/test_core.py +0 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Christopher Buckley, Juan Burckhardt, Anastasiya Smirnova
|
|
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.
|
{agnostic_prompt_aps-1.1.3/src/agnostic_prompt_aps.egg-info → agnostic_prompt_aps-1.1.5}/PKG-INFO
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agnostic-prompt-aps
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.5
|
|
4
4
|
Summary: CLI to install and manage the Agnostic Prompt Standard (APS) skill and platform templates.
|
|
5
5
|
Author: Agnostic Prompt Standard contributors
|
|
6
|
-
License:
|
|
6
|
+
License: MIT
|
|
7
7
|
Project-URL: Homepage, https://github.com/chris-buckley/agnostic-prompt-standard
|
|
8
8
|
Project-URL: Repository, https://github.com/chris-buckley/agnostic-prompt-standard.git
|
|
9
9
|
Requires-Python: >=3.10
|
|
@@ -42,16 +42,47 @@ pipx run agnostic-prompt-aps init
|
|
|
42
42
|
## Commands
|
|
43
43
|
|
|
44
44
|
```bash
|
|
45
|
-
aps init [--repo|--personal] [--platform <id>] [--
|
|
45
|
+
aps init [--repo|--personal] [--platform <id>] [--yes] [--force]
|
|
46
46
|
aps doctor [--json]
|
|
47
47
|
aps platforms
|
|
48
48
|
aps version
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
-
##
|
|
51
|
+
## Platform-specific paths
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
Use `--platform <id>` to specify a platform adapter:
|
|
54
54
|
|
|
55
55
|
```bash
|
|
56
|
-
|
|
56
|
+
# VS Code / Copilot (default paths: .github/skills, ~/.copilot/skills)
|
|
57
|
+
aps init --platform vscode-copilot
|
|
58
|
+
|
|
59
|
+
# Claude Code (paths: .claude/skills, ~/.claude/skills)
|
|
60
|
+
aps init --platform claude-code
|
|
57
61
|
```
|
|
62
|
+
|
|
63
|
+
## Windows troubleshooting
|
|
64
|
+
|
|
65
|
+
On Windows, `pipx run agnostic-prompt-aps` may fail with `FileNotFoundError` due to a known pipx bug with `.exe` launcher paths.
|
|
66
|
+
|
|
67
|
+
**Workarounds:**
|
|
68
|
+
|
|
69
|
+
1. **Use `pipx install` instead** (recommended):
|
|
70
|
+
```bash
|
|
71
|
+
pipx install agnostic-prompt-aps
|
|
72
|
+
aps init
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
2. **Use Python module syntax**:
|
|
76
|
+
```bash
|
|
77
|
+
python -m aps_cli init
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
3. **Try the full-name entry point**:
|
|
81
|
+
```bash
|
|
82
|
+
pipx run agnostic-prompt-aps agnostic-prompt-aps init
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
4. **Upgrade pipx** to the latest version:
|
|
86
|
+
```bash
|
|
87
|
+
python -m pip install --upgrade pipx
|
|
88
|
+
```
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# APS CLI (Python)
|
|
2
|
+
|
|
3
|
+
This package provides the `aps` CLI for installing the **Agnostic Prompt Standard (APS)** skill into:
|
|
4
|
+
|
|
5
|
+
- a repository workspace: `.github/skills/agnostic-prompt-standard/`
|
|
6
|
+
- or as a personal skill: `~/.copilot/skills/agnostic-prompt-standard/`
|
|
7
|
+
|
|
8
|
+
## Install / run
|
|
9
|
+
|
|
10
|
+
Global install (recommended):
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
pipx install agnostic-prompt-aps
|
|
14
|
+
aps init
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
One-off run:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
pipx run agnostic-prompt-aps init
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Commands
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
aps init [--repo|--personal] [--platform <id>] [--yes] [--force]
|
|
27
|
+
aps doctor [--json]
|
|
28
|
+
aps platforms
|
|
29
|
+
aps version
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Platform-specific paths
|
|
33
|
+
|
|
34
|
+
Use `--platform <id>` to specify a platform adapter:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
# VS Code / Copilot (default paths: .github/skills, ~/.copilot/skills)
|
|
38
|
+
aps init --platform vscode-copilot
|
|
39
|
+
|
|
40
|
+
# Claude Code (paths: .claude/skills, ~/.claude/skills)
|
|
41
|
+
aps init --platform claude-code
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Windows troubleshooting
|
|
45
|
+
|
|
46
|
+
On Windows, `pipx run agnostic-prompt-aps` may fail with `FileNotFoundError` due to a known pipx bug with `.exe` launcher paths.
|
|
47
|
+
|
|
48
|
+
**Workarounds:**
|
|
49
|
+
|
|
50
|
+
1. **Use `pipx install` instead** (recommended):
|
|
51
|
+
```bash
|
|
52
|
+
pipx install agnostic-prompt-aps
|
|
53
|
+
aps init
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
2. **Use Python module syntax**:
|
|
57
|
+
```bash
|
|
58
|
+
python -m aps_cli init
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
3. **Try the full-name entry point**:
|
|
62
|
+
```bash
|
|
63
|
+
pipx run agnostic-prompt-aps agnostic-prompt-aps init
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
4. **Upgrade pipx** to the latest version:
|
|
67
|
+
```bash
|
|
68
|
+
python -m pip install --upgrade pipx
|
|
69
|
+
```
|
|
@@ -4,11 +4,11 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "agnostic-prompt-aps"
|
|
7
|
-
version = "1.1.
|
|
7
|
+
version = "1.1.5"
|
|
8
8
|
description = "CLI to install and manage the Agnostic Prompt Standard (APS) skill and platform templates."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
11
|
-
license = { text = "
|
|
11
|
+
license = { text = "MIT" }
|
|
12
12
|
authors = [
|
|
13
13
|
{ name = "Agnostic Prompt Standard contributors" }
|
|
14
14
|
]
|
|
@@ -26,6 +26,7 @@ dev = [
|
|
|
26
26
|
|
|
27
27
|
[project.scripts]
|
|
28
28
|
aps = "aps_cli.cli:main"
|
|
29
|
+
agnostic-prompt-aps = "aps_cli.cli:main"
|
|
29
30
|
|
|
30
31
|
[project.urls]
|
|
31
32
|
Homepage = "https://github.com/chris-buckley/agnostic-prompt-standard"
|
|
@@ -41,3 +42,4 @@ aps_cli = ["payload/**"]
|
|
|
41
42
|
|
|
42
43
|
[tool.pytest.ini_options]
|
|
43
44
|
testpaths = ["tests"]
|
|
45
|
+
pythonpath = ["src"]
|
{agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5/src/agnostic_prompt_aps.egg-info}/PKG-INFO
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agnostic-prompt-aps
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.5
|
|
4
4
|
Summary: CLI to install and manage the Agnostic Prompt Standard (APS) skill and platform templates.
|
|
5
5
|
Author: Agnostic Prompt Standard contributors
|
|
6
|
-
License:
|
|
6
|
+
License: MIT
|
|
7
7
|
Project-URL: Homepage, https://github.com/chris-buckley/agnostic-prompt-standard
|
|
8
8
|
Project-URL: Repository, https://github.com/chris-buckley/agnostic-prompt-standard.git
|
|
9
9
|
Requires-Python: >=3.10
|
|
@@ -42,16 +42,47 @@ pipx run agnostic-prompt-aps init
|
|
|
42
42
|
## Commands
|
|
43
43
|
|
|
44
44
|
```bash
|
|
45
|
-
aps init [--repo|--personal] [--platform <id>] [--
|
|
45
|
+
aps init [--repo|--personal] [--platform <id>] [--yes] [--force]
|
|
46
46
|
aps doctor [--json]
|
|
47
47
|
aps platforms
|
|
48
48
|
aps version
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
-
##
|
|
51
|
+
## Platform-specific paths
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
Use `--platform <id>` to specify a platform adapter:
|
|
54
54
|
|
|
55
55
|
```bash
|
|
56
|
-
|
|
56
|
+
# VS Code / Copilot (default paths: .github/skills, ~/.copilot/skills)
|
|
57
|
+
aps init --platform vscode-copilot
|
|
58
|
+
|
|
59
|
+
# Claude Code (paths: .claude/skills, ~/.claude/skills)
|
|
60
|
+
aps init --platform claude-code
|
|
57
61
|
```
|
|
62
|
+
|
|
63
|
+
## Windows troubleshooting
|
|
64
|
+
|
|
65
|
+
On Windows, `pipx run agnostic-prompt-aps` may fail with `FileNotFoundError` due to a known pipx bug with `.exe` launcher paths.
|
|
66
|
+
|
|
67
|
+
**Workarounds:**
|
|
68
|
+
|
|
69
|
+
1. **Use `pipx install` instead** (recommended):
|
|
70
|
+
```bash
|
|
71
|
+
pipx install agnostic-prompt-aps
|
|
72
|
+
aps init
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
2. **Use Python module syntax**:
|
|
76
|
+
```bash
|
|
77
|
+
python -m aps_cli init
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
3. **Try the full-name entry point**:
|
|
81
|
+
```bash
|
|
82
|
+
pipx run agnostic-prompt-aps agnostic-prompt-aps init
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
4. **Upgrade pipx** to the latest version:
|
|
86
|
+
```bash
|
|
87
|
+
python -m pip install --upgrade pipx
|
|
88
|
+
```
|
{agnostic_prompt_aps-1.1.3 → agnostic_prompt_aps-1.1.5}/src/agnostic_prompt_aps.egg-info/SOURCES.txt
RENAMED
|
@@ -12,7 +12,6 @@ src/aps_cli/__main__.py
|
|
|
12
12
|
src/aps_cli/cli.py
|
|
13
13
|
src/aps_cli/core.py
|
|
14
14
|
src/aps_cli/payload/agnostic-prompt-standard/SKILL.md
|
|
15
|
-
src/aps_cli/payload/agnostic-prompt-standard/assets/agents/vscode-agent-v1.0.0.agent.md
|
|
16
15
|
src/aps_cli/payload/agnostic-prompt-standard/assets/constants/constants-json-block-v1.0.0.example.md
|
|
17
16
|
src/aps_cli/payload/agnostic-prompt-standard/assets/constants/constants-text-block-v1.0.0.example.md
|
|
18
17
|
src/aps_cli/payload/agnostic-prompt-standard/assets/formats/format-code-changes-full-v1.0.0.example.md
|
|
@@ -28,6 +27,11 @@ src/aps_cli/payload/agnostic-prompt-standard/platforms/_schemas/tools-registry.s
|
|
|
28
27
|
src/aps_cli/payload/agnostic-prompt-standard/platforms/_template/README.md
|
|
29
28
|
src/aps_cli/payload/agnostic-prompt-standard/platforms/_template/manifest.json
|
|
30
29
|
src/aps_cli/payload/agnostic-prompt-standard/platforms/_template/tools-registry.json
|
|
30
|
+
src/aps_cli/payload/agnostic-prompt-standard/platforms/claude-code/README.md
|
|
31
|
+
src/aps_cli/payload/agnostic-prompt-standard/platforms/claude-code/manifest.json
|
|
32
|
+
src/aps_cli/payload/agnostic-prompt-standard/platforms/claude-code/tools-registry.json
|
|
33
|
+
src/aps_cli/payload/agnostic-prompt-standard/platforms/claude-code/frontmatter/agent-frontmatter.md
|
|
34
|
+
src/aps_cli/payload/agnostic-prompt-standard/platforms/claude-code/frontmatter/rules-frontmatter.md
|
|
31
35
|
src/aps_cli/payload/agnostic-prompt-standard/platforms/vscode-copilot/README.md
|
|
32
36
|
src/aps_cli/payload/agnostic-prompt-standard/platforms/vscode-copilot/manifest.json
|
|
33
37
|
src/aps_cli/payload/agnostic-prompt-standard/platforms/vscode-copilot/tools-registry.json
|
|
@@ -35,7 +39,6 @@ src/aps_cli/payload/agnostic-prompt-standard/platforms/vscode-copilot/frontmatte
|
|
|
35
39
|
src/aps_cli/payload/agnostic-prompt-standard/platforms/vscode-copilot/frontmatter/instructions-frontmatter.md
|
|
36
40
|
src/aps_cli/payload/agnostic-prompt-standard/platforms/vscode-copilot/frontmatter/prompt-frontmatter.md
|
|
37
41
|
src/aps_cli/payload/agnostic-prompt-standard/platforms/vscode-copilot/frontmatter/skill-frontmatter.md
|
|
38
|
-
src/aps_cli/payload/agnostic-prompt-standard/platforms/vscode-copilot/templates/AGENTS.md
|
|
39
42
|
src/aps_cli/payload/agnostic-prompt-standard/references/00-structure.md
|
|
40
43
|
src/aps_cli/payload/agnostic-prompt-standard/references/01-vocabulary.md
|
|
41
44
|
src/aps_cli/payload/agnostic-prompt-standard/references/02-linting-and-formatting.md
|
|
@@ -13,7 +13,7 @@ from . import __version__
|
|
|
13
13
|
from .core import (
|
|
14
14
|
SKILL_ID,
|
|
15
15
|
copy_dir,
|
|
16
|
-
|
|
16
|
+
copy_template_tree,
|
|
17
17
|
default_personal_skill_path,
|
|
18
18
|
default_project_skill_path,
|
|
19
19
|
ensure_dir,
|
|
@@ -37,21 +37,22 @@ def _norm_platform(platform: Optional[str]) -> str:
|
|
|
37
37
|
return platform
|
|
38
38
|
|
|
39
39
|
|
|
40
|
+
def _is_claude_platform(platform_id: str) -> bool:
|
|
41
|
+
return platform_id == "claude-code"
|
|
42
|
+
|
|
43
|
+
|
|
40
44
|
@app.command()
|
|
41
45
|
def init(
|
|
42
46
|
root: Optional[str] = typer.Option(
|
|
43
47
|
None,
|
|
44
48
|
"--root",
|
|
45
|
-
help="Workspace root to install
|
|
49
|
+
help="Workspace root to install project skill under (defaults to repo root or cwd)",
|
|
46
50
|
),
|
|
47
51
|
repo: bool = typer.Option(False, "--repo", help="Force install as project skill (workspace/.github/skills or workspace/.claude/skills)"),
|
|
48
52
|
personal: bool = typer.Option(False, "--personal", help="Force install as personal skill (~/.copilot/skills or ~/.claude/skills)"),
|
|
49
53
|
platform: Optional[str] = typer.Option(None, "--platform", help='Platform adapter to apply (default: inferred; use "none" for skill only)'),
|
|
50
|
-
templates: bool = typer.Option(False, "--templates", help="Also install platform templates (agents / AGENTS.md / .github/*), if available"),
|
|
51
|
-
templates_root: Optional[str] = typer.Option(None, "--templates-root", help="Workspace root for templates when installing personal skill"),
|
|
52
|
-
claude: bool = typer.Option(False, "--claude", help="Use Claude platform .claude/skills paths (instead of .github/skills + ~/.copilot/skills)"),
|
|
53
54
|
yes: bool = typer.Option(False, "--yes", help="Non-interactive: accept inferred/default choices"),
|
|
54
|
-
force: bool = typer.Option(False, "--force", help="Overwrite existing skill
|
|
55
|
+
force: bool = typer.Option(False, "--force", help="Overwrite existing skill"),
|
|
55
56
|
dry_run: bool = typer.Option(False, "--dry-run", help="Print the plan only, do not write files"),
|
|
56
57
|
):
|
|
57
58
|
"""Install APS into a repo (.github/skills/...) or as a personal skill (~/.copilot/skills/...)."""
|
|
@@ -69,10 +70,6 @@ def init(
|
|
|
69
70
|
|
|
70
71
|
install_scope = "repo" if repo else "personal" if personal else ("repo" if repo_root else "personal")
|
|
71
72
|
|
|
72
|
-
# Defaults
|
|
73
|
-
install_templates = templates or (platform_id not in ("", "none"))
|
|
74
|
-
chosen_templates_root: Optional[Path] = None
|
|
75
|
-
|
|
76
73
|
if not yes and is_tty():
|
|
77
74
|
# Platform selection (first, so platform choice can inform installation location)
|
|
78
75
|
if not platform:
|
|
@@ -90,6 +87,7 @@ def init(
|
|
|
90
87
|
|
|
91
88
|
# Scope
|
|
92
89
|
if not (repo or personal):
|
|
90
|
+
claude = _is_claude_platform(platform_id)
|
|
93
91
|
install_scope = questionary.select(
|
|
94
92
|
"Where should APS be installed?",
|
|
95
93
|
choices=[
|
|
@@ -106,59 +104,41 @@ def init(
|
|
|
106
104
|
).ask()
|
|
107
105
|
assert isinstance(install_scope, str)
|
|
108
106
|
|
|
109
|
-
# Workspace root (only necessary for repo scope
|
|
107
|
+
# Workspace root (only necessary for repo scope)
|
|
110
108
|
if install_scope == "repo" and (not root and not repo_root):
|
|
111
109
|
root_answer = questionary.text("Workspace root path:", default=str(workspace_root)).ask()
|
|
112
110
|
workspace_root = Path(str(root_answer)).expanduser().resolve()
|
|
113
111
|
|
|
114
|
-
# Extras (templates)
|
|
115
|
-
install_templates = False
|
|
116
|
-
if platform_id != "none":
|
|
117
|
-
install_templates = questionary.confirm("Apply platform templates to the workspace?", default=True).ask()
|
|
118
|
-
|
|
119
112
|
force = questionary.confirm("Overwrite existing files if they exist?", default=force).ask()
|
|
120
113
|
dry_run = questionary.confirm("Dry run (print plan only)?", default=dry_run).ask()
|
|
121
114
|
|
|
122
|
-
# Determine where templates should be applied.
|
|
123
|
-
if install_templates and platform_id not in ("", "none"):
|
|
124
|
-
if install_scope == "repo":
|
|
125
|
-
chosen_templates_root = workspace_root
|
|
126
|
-
else:
|
|
127
|
-
if templates_root:
|
|
128
|
-
chosen_templates_root = Path(templates_root).expanduser().resolve()
|
|
129
|
-
elif repo_root:
|
|
130
|
-
chosen_templates_root = repo_root
|
|
131
|
-
else:
|
|
132
|
-
chosen_templates_root = Path.cwd().resolve()
|
|
133
|
-
|
|
134
115
|
# Compute destinations
|
|
116
|
+
claude = _is_claude_platform(platform_id)
|
|
135
117
|
skill_dest = (
|
|
136
118
|
default_project_skill_path(workspace_root, claude=claude)
|
|
137
119
|
if install_scope == "repo"
|
|
138
120
|
else default_personal_skill_path(claude=claude)
|
|
139
121
|
)
|
|
140
122
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
123
|
+
# Determine template source if platform is set
|
|
124
|
+
templates_dir = None
|
|
125
|
+
template_root = None
|
|
126
|
+
if platform_id and platform_id != "none":
|
|
127
|
+
templates_dir = payload_skill_dir / "platforms" / platform_id / "templates"
|
|
128
|
+
if templates_dir.is_dir():
|
|
129
|
+
template_root = Path.home() if install_scope == "personal" else workspace_root
|
|
130
|
+
else:
|
|
131
|
+
templates_dir = None
|
|
146
132
|
|
|
147
133
|
plan = {
|
|
148
134
|
"install_scope": install_scope,
|
|
149
135
|
"workspace_root": str(workspace_root),
|
|
150
|
-
"templates_root": str(chosen_templates_root) if chosen_templates_root else None,
|
|
151
136
|
"platform_id": platform_id or None,
|
|
152
137
|
"claude": bool(claude),
|
|
153
138
|
"skill_source": str(payload_skill_dir),
|
|
154
139
|
"skill_dest": str(skill_dest),
|
|
155
|
-
"
|
|
156
|
-
|
|
157
|
-
and chosen_templates_root is not None
|
|
158
|
-
and templates_src is not None
|
|
159
|
-
and templates_src.is_dir()
|
|
160
|
-
),
|
|
161
|
-
"templates_source": str(templates_src) if templates_src else None,
|
|
140
|
+
"templates_source": str(templates_dir) if templates_dir else None,
|
|
141
|
+
"templates_dest": str(template_root) if template_root else None,
|
|
162
142
|
"force": bool(force),
|
|
163
143
|
}
|
|
164
144
|
|
|
@@ -175,16 +155,27 @@ def init(
|
|
|
175
155
|
ensure_dir(skill_dest.parent)
|
|
176
156
|
copy_dir(payload_skill_dir, skill_dest)
|
|
177
157
|
|
|
178
|
-
templates_summary = None
|
|
179
|
-
if plan["install_templates"] and chosen_templates_root and templates_src and templates_src.is_dir():
|
|
180
|
-
templates_summary = copy_templates(templates_src, chosen_templates_root, force=force)
|
|
181
|
-
|
|
182
158
|
console.print("[green]APS installed.[/green]")
|
|
183
159
|
console.print(f" Skill: {skill_dest}")
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
160
|
+
|
|
161
|
+
# Copy templates (if platform has templates)
|
|
162
|
+
if templates_dir and template_root:
|
|
163
|
+
def filter_fn(rel_path: str) -> bool:
|
|
164
|
+
# Skip .github/** for personal installs (shouldn't put .github in home dir)
|
|
165
|
+
if install_scope == "personal" and rel_path.startswith(".github"):
|
|
166
|
+
return False
|
|
167
|
+
return True
|
|
168
|
+
|
|
169
|
+
copied = copy_template_tree(
|
|
170
|
+
templates_dir,
|
|
171
|
+
template_root,
|
|
172
|
+
force=force,
|
|
173
|
+
filter_fn=filter_fn,
|
|
174
|
+
)
|
|
175
|
+
if copied:
|
|
176
|
+
console.print(f" Installed {len(copied)} template file(s):")
|
|
177
|
+
for f in copied:
|
|
178
|
+
console.print(f" - {f}")
|
|
188
179
|
|
|
189
180
|
|
|
190
181
|
@app.command()
|
|
@@ -227,16 +218,15 @@ def doctor(json_out: bool = typer.Option(False, "--json", help="Machine-readable
|
|
|
227
218
|
def platforms():
|
|
228
219
|
"""List available platform adapters bundled with this APS release."""
|
|
229
220
|
payload_skill_dir = resolve_payload_skill_dir()
|
|
230
|
-
|
|
221
|
+
plats = load_platforms(payload_skill_dir)
|
|
231
222
|
|
|
232
223
|
table = Table(title="APS Platform Adapters")
|
|
233
224
|
table.add_column("platform_id")
|
|
234
225
|
table.add_column("display_name")
|
|
235
|
-
table.add_column("templates")
|
|
236
226
|
table.add_column("adapter_version")
|
|
237
227
|
|
|
238
|
-
for p in
|
|
239
|
-
table.add_row(p.platform_id, p.display_name,
|
|
228
|
+
for p in plats:
|
|
229
|
+
table.add_row(p.platform_id, p.display_name, p.adapter_version or "")
|
|
240
230
|
|
|
241
231
|
console.print(table)
|
|
242
232
|
|
|
@@ -15,7 +15,6 @@ class Platform:
|
|
|
15
15
|
platform_id: str
|
|
16
16
|
display_name: str
|
|
17
17
|
adapter_version: Optional[str]
|
|
18
|
-
has_templates: bool
|
|
19
18
|
|
|
20
19
|
|
|
21
20
|
def is_tty() -> bool:
|
|
@@ -105,13 +104,11 @@ def load_platforms(skill_dir: Path) -> list[Platform]:
|
|
|
105
104
|
platform_id = manifest.get("platformId", entry.name)
|
|
106
105
|
display_name = manifest.get("displayName", entry.name)
|
|
107
106
|
adapter_version = manifest.get("adapterVersion")
|
|
108
|
-
has_templates = (entry / "templates").is_dir()
|
|
109
107
|
out.append(
|
|
110
108
|
Platform(
|
|
111
109
|
platform_id=platform_id,
|
|
112
110
|
display_name=display_name,
|
|
113
111
|
adapter_version=adapter_version,
|
|
114
|
-
has_templates=has_templates,
|
|
115
112
|
)
|
|
116
113
|
)
|
|
117
114
|
out.sort(key=lambda p: p.display_name.lower())
|
|
@@ -130,28 +127,38 @@ def copy_dir(src: Path, dst: Path) -> None:
|
|
|
130
127
|
shutil.copytree(src, dst)
|
|
131
128
|
|
|
132
129
|
|
|
133
|
-
def
|
|
134
|
-
|
|
130
|
+
def copy_template_tree(
|
|
131
|
+
src_dir: Path,
|
|
132
|
+
dst_root: Path,
|
|
133
|
+
*,
|
|
134
|
+
force: bool = False,
|
|
135
|
+
filter_fn: Optional[callable] = None,
|
|
136
|
+
) -> list[str]:
|
|
137
|
+
"""Copy template files individually with optional filtering.
|
|
135
138
|
|
|
136
|
-
|
|
139
|
+
Args:
|
|
140
|
+
src_dir: Source templates directory
|
|
141
|
+
dst_root: Destination root directory
|
|
142
|
+
force: Overwrite existing files
|
|
143
|
+
filter_fn: Callback (rel_path: str) -> bool; return False to skip
|
|
144
|
+
|
|
145
|
+
Returns:
|
|
146
|
+
List of relative paths that were copied
|
|
137
147
|
"""
|
|
138
148
|
copied: list[str] = []
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
copied.append(str(rel))
|
|
156
|
-
|
|
157
|
-
return {"copied": copied, "skipped": skipped}
|
|
149
|
+
for src_file in src_dir.rglob("*"):
|
|
150
|
+
if not src_file.is_file():
|
|
151
|
+
continue
|
|
152
|
+
rel_path = src_file.relative_to(src_dir)
|
|
153
|
+
rel_str = str(rel_path).replace("\\", "/")
|
|
154
|
+
if filter_fn and not filter_fn(rel_str):
|
|
155
|
+
continue
|
|
156
|
+
dst_file = dst_root / rel_path
|
|
157
|
+
if dst_file.exists() and not force:
|
|
158
|
+
continue
|
|
159
|
+
dst_file.parent.mkdir(parents=True, exist_ok=True)
|
|
160
|
+
shutil.copy2(src_file, dst_file)
|
|
161
|
+
copied.append(rel_str)
|
|
162
|
+
return copied
|
|
163
|
+
|
|
164
|
+
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: agnostic-prompt-standard
|
|
3
3
|
description: The reference framework to generate, compile, and lint greenfield prompts that conform to the Agnostic Prompt Standard (APS) v1.0.
|
|
4
|
-
license:
|
|
4
|
+
license: MIT
|
|
5
5
|
metadata:
|
|
6
6
|
authors: "Christopher Buckley; Juan Burckhardt; Anastasiya Smirnova"
|
|
7
7
|
spec_version: "1.0"
|
|
8
|
-
framework_revision: "1.1.
|
|
8
|
+
framework_revision: "1.1.5"
|
|
9
9
|
last_updated: "2026-01-15"
|
|
10
10
|
---
|
|
11
11
|
|
|
@@ -55,7 +55,6 @@ This `SKILL.md` is the **entrypoint** for the Agnostic Prompt Standard (APS) v1.
|
|
|
55
55
|
- `manifest.json` — file discovery rules.
|
|
56
56
|
- `tools-registry.json` — tool names, sets, and renames.
|
|
57
57
|
- `frontmatter/` — copy/paste YAML frontmatter templates.
|
|
58
|
-
- `templates/` — drop-in workspace artifacts (`AGENTS.md`, `.github/agents/`).
|
|
59
58
|
- `scripts/` — optional build / compile / lint scripts (empty by default).
|
|
60
59
|
|
|
61
60
|
---
|
|
@@ -20,7 +20,6 @@ platforms/
|
|
|
20
20
|
manifest.json # validates against _schemas/platform-manifest.schema.json
|
|
21
21
|
tools-registry.json # validates against _schemas/tools-registry.schema.json
|
|
22
22
|
frontmatter/ # copy/paste blocks for this platform
|
|
23
|
-
templates/ # ready-to-copy workspace artifacts
|
|
24
23
|
```
|
|
25
24
|
|
|
26
25
|
## Add a new platform adapter
|
|
@@ -37,3 +36,10 @@ platforms/
|
|
|
37
36
|
- Anything under `platforms/` is **non-normative** (documentation/templates/mappings only).
|
|
38
37
|
- Adapters should prefer **mapping + configuration** over rewriting APS core rules.
|
|
39
38
|
|
|
39
|
+
## Scope and Philosophy
|
|
40
|
+
|
|
41
|
+
Adapters are intended to **map** the APS standard to a host platform. They are **not** project generators.
|
|
42
|
+
We do not provide generic project scaffolding (like `settings.json` or root `CLAUDE.md` templates).
|
|
43
|
+
|
|
44
|
+
> See [ADR 0001: Adapter Scope](https://github.com/chris-buckley/agnostic-prompt-standard/blob/main/docs/adr/0001-adapter-scope-no-scaffolding.md)
|
|
45
|
+
|