aw-spec-cli 0.1.4 → 0.1.6
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.
- package/assets/.agents/agent.json +28 -0
- package/assets/.agents/skills/appweaver/SKILL.md +56 -0
- package/assets/.agents/skills/appweaver-demo/SKILL.md +59 -0
- package/assets/.claude/agent.json +27 -0
- package/assets/.claude/skills/appweaver/SKILL.md +55 -0
- package/assets/.claude/skills/appweaver-demo/SKILL.md +59 -0
- package/assets/.kilocode/agent.json +28 -0
- package/assets/.kilocode/workflows/appweaver-demo.md +59 -0
- package/assets/.kilocode/workflows/appweaver.md +55 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +7 -54
- package/dist/commands/init.js.map +1 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/assets/.agents/skills/aw-spec-addcomponent/SKILL.md +0 -129
- package/assets/.agents/skills/aw-spec-agent-context-update/SKILL.md +0 -31
- package/assets/.agents/skills/aw-spec-analyze/SKILL.md +0 -296
- package/assets/.agents/skills/aw-spec-checklist/SKILL.md +0 -374
- package/assets/.agents/skills/aw-spec-clarify/SKILL.md +0 -320
- package/assets/.agents/skills/aw-spec-constitution/SKILL.md +0 -194
- package/assets/.agents/skills/aw-spec-fast-implement/SKILL.md +0 -268
- package/assets/.agents/skills/aw-spec-foundation/SKILL.md +0 -358
- package/assets/.agents/skills/aw-spec-implement/SKILL.md +0 -279
- package/assets/.agents/skills/aw-spec-minimal-implementation/SKILL.md +0 -209
- package/assets/.agents/skills/aw-spec-plan/SKILL.md +0 -221
- package/assets/.agents/skills/aw-spec-select-domain/SKILL.md +0 -73
- package/assets/.agents/skills/aw-spec-specify/SKILL.md +0 -382
- package/assets/.agents/skills/aw-spec-tasks/SKILL.md +0 -259
- package/assets/.agents/skills/aw-spec-taskstoissues/SKILL.md +0 -107
- package/assets/.aw-spec/domain.json +0 -3
- package/assets/.aw-spec/extensions/.registry +0 -19
- package/assets/.aw-spec/extensions/agent-context/README.md +0 -57
- package/assets/.aw-spec/extensions/agent-context/agent-context-config.yml +0 -4
- package/assets/.aw-spec/extensions/agent-context/commands/aw-spec.agent-context.update.md +0 -26
- package/assets/.aw-spec/extensions/agent-context/extension.yml +0 -34
- package/assets/.aw-spec/extensions/agent-context/scripts/bash/update-agent-context.sh +0 -201
- package/assets/.aw-spec/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +0 -237
- package/assets/.aw-spec/extensions.yml +0 -23
- package/assets/.aw-spec/feature.json +0 -3
- package/assets/.aw-spec/init-options.json +0 -9
- package/assets/.aw-spec/integration.json +0 -15
- package/assets/.aw-spec/integrations/aw-spec.manifest.json +0 -17
- package/assets/.aw-spec/integrations/claude.manifest.json +0 -17
- package/assets/.aw-spec/memory/constitution.md +0 -50
- package/assets/.aw-spec/scripts/bash/check-prerequisites.sh +0 -189
- package/assets/.aw-spec/scripts/bash/common.sh +0 -582
- package/assets/.aw-spec/scripts/bash/create-new-feature.sh +0 -299
- package/assets/.aw-spec/scripts/bash/setup-plan.sh +0 -84
- package/assets/.aw-spec/scripts/bash/setup-tasks.sh +0 -91
- package/assets/.aw-spec/templates/checklist-template.md +0 -40
- package/assets/.aw-spec/templates/constitution-template.md +0 -57
- package/assets/.aw-spec/templates/plan-template.md +0 -113
- package/assets/.aw-spec/templates/spec-template.md +0 -131
- package/assets/.aw-spec/templates/tasks-template.md +0 -252
- package/assets/.aw-spec/workflows/aw-spec/workflow.yml +0 -77
- package/assets/.aw-spec/workflows/workflow-registry.json +0 -13
- package/assets/.claude/skills/aw-spec-addcomponent/SKILL.md +0 -129
- package/assets/.claude/skills/aw-spec-agent-context-update/SKILL.md +0 -31
- package/assets/.claude/skills/aw-spec-analyze/SKILL.md +0 -296
- package/assets/.claude/skills/aw-spec-checklist/SKILL.md +0 -374
- package/assets/.claude/skills/aw-spec-clarify/SKILL.md +0 -320
- package/assets/.claude/skills/aw-spec-constitution/SKILL.md +0 -194
- package/assets/.claude/skills/aw-spec-fast-implement/SKILL.md +0 -268
- package/assets/.claude/skills/aw-spec-foundation/SKILL.md +0 -358
- package/assets/.claude/skills/aw-spec-implement/SKILL.md +0 -279
- package/assets/.claude/skills/aw-spec-minimal-implementation/SKILL.md +0 -209
- package/assets/.claude/skills/aw-spec-plan/SKILL.md +0 -221
- package/assets/.claude/skills/aw-spec-select-domain/SKILL.md +0 -73
- package/assets/.claude/skills/aw-spec-specify/SKILL.md +0 -382
- package/assets/.claude/skills/aw-spec-tasks/SKILL.md +0 -259
- package/assets/.claude/skills/aw-spec-taskstoissues/SKILL.md +0 -107
- package/assets/.kilocode/rules/specify-rules.md +0 -4
- package/assets/.kilocode/workflows/aw-spec-addcomponent.md +0 -129
- package/assets/.kilocode/workflows/aw-spec-agent-context.update.md +0 -31
- package/assets/.kilocode/workflows/aw-spec-analyze.md +0 -296
- package/assets/.kilocode/workflows/aw-spec-checklist.md +0 -374
- package/assets/.kilocode/workflows/aw-spec-clarify.md +0 -320
- package/assets/.kilocode/workflows/aw-spec-constitution.md +0 -194
- package/assets/.kilocode/workflows/aw-spec-fast-implement.md +0 -263
- package/assets/.kilocode/workflows/aw-spec-foundation.md +0 -358
- package/assets/.kilocode/workflows/aw-spec-implement.md +0 -279
- package/assets/.kilocode/workflows/aw-spec-minimal-implementation.md +0 -204
- package/assets/.kilocode/workflows/aw-spec-plan.md +0 -221
- package/assets/.kilocode/workflows/aw-spec-select-domain.md +0 -73
- package/assets/.kilocode/workflows/aw-spec-specify.md +0 -382
- package/assets/.kilocode/workflows/aw-spec-tasks.md +0 -259
- package/assets/.kilocode/workflows/aw-spec-taskstoissues.md +0 -107
- package/assets/docs/ModularMonolith/ModularMonolith.Reference.pack.txt +0 -25248
- package/assets/docs/ModularMonolith/ModularMonolith.pack.txt +0 -5726
- package/assets/docs/ModularMonolith/pack-foundation.ps1 +0 -145
- package/assets/docs/ModularMonolith/pack-foundation.sh +0 -196
- package/assets/docs/ModularMonolith/pack-reference-foundation.ps1 +0 -157
- package/assets/docs/ModularMonolith/pack-reference-foundation.sh +0 -209
- package/assets/docs/ModularMonolith/unpack-foundation.ps1 +0 -126
- package/assets/docs/ModularMonolith/unpack-foundation.sh +0 -217
- package/assets/docs/ModularMonolith/unpack-reference-foundation.ps1 +0 -129
- package/assets/docs/ModularMonolith/unpack-reference-foundation.sh +0 -218
- package/assets/docs/README.md +0 -106
- package/assets/docs/UI.Visualization/PACKAGING.md +0 -191
- package/assets/docs/UI.Visualization/UI.Visualization.Reference.pack.txt +0 -11768
- package/assets/docs/UI.Visualization/UI.Visualization.pack.txt +0 -11214
- package/assets/docs/UI.Visualization/pack-foundation.ps1 +0 -165
- package/assets/docs/UI.Visualization/pack-foundation.sh +0 -206
- package/assets/docs/UI.Visualization/pack-reference-foundation.ps1 +0 -159
- package/assets/docs/UI.Visualization/pack-reference-foundation.sh +0 -205
- package/assets/docs/UI.Visualization/unpack-foundation.ps1 +0 -126
- package/assets/docs/UI.Visualization/unpack-foundation.sh +0 -217
- package/assets/docs/UI.Visualization/unpack-reference-foundation.ps1 +0 -129
- package/assets/docs/UI.Visualization/unpack-reference-foundation.sh +0 -218
- package/assets/docs/VerticalSlice/PACKAGING.md +0 -185
- package/assets/docs/VerticalSlice/VerticalSlice.Reference.pack.txt +0 -19318
- package/assets/docs/VerticalSlice/VerticalSlice.pack.txt +0 -2833
- package/assets/docs/VerticalSlice/pack-foundation.ps1 +0 -145
- package/assets/docs/VerticalSlice/pack-foundation.sh +0 -196
- package/assets/docs/VerticalSlice/pack-reference-foundation.ps1 +0 -157
- package/assets/docs/VerticalSlice/pack-reference-foundation.sh +0 -209
- package/assets/docs/VerticalSlice/unpack-foundation.ps1 +0 -126
- package/assets/docs/VerticalSlice/unpack-foundation.sh +0 -217
- package/assets/docs/VerticalSlice/unpack-reference-foundation.ps1 +0 -129
- package/assets/docs/VerticalSlice/unpack-reference-foundation.sh +0 -218
- package/assets/docs/architecture/clean-architecture.md +0 -71
- package/assets/docs/architecture/cqrs.md +0 -141
- package/assets/docs/architecture/eventing.md +0 -83
- package/assets/docs/architecture/folder-structure.md +0 -61
- package/assets/docs/architecture/modular-monolith.md +0 -47
- package/assets/docs/architecture/persistence.md +0 -269
- package/assets/docs/architecture/testing.md +0 -55
- package/assets/docs/architecture/vertical-slices.md +0 -201
- package/assets/docs/command.txt +0 -295
- package/assets/docs/components/Email/README.md +0 -119
- package/assets/docs/components/Email/ReferenceEndpoints/SendEmailEndpoint.cs +0 -84
- package/assets/docs/components/Email/integration.md +0 -300
- package/assets/docs/components/Jobs/README.md +0 -113
- package/assets/docs/components/Jobs/integration.md +0 -259
- package/assets/docs/components/QrGenerator/README.md +0 -85
- package/assets/docs/components/QrGenerator/ReferenceEndpoints/GenerateQrEndpoint.cs +0 -57
- package/assets/docs/components/QrGenerator/integration.md +0 -230
- package/assets/docs/components/README.md +0 -74
- package/assets/docs/domain/domain-driven-design.md +0 -212
- package/assets/docs/domainspecs/UIVisualization/chart-bubble.md +0 -70
- package/assets/docs/domainspecs/UIVisualization/chart-dimred.md +0 -58
- package/assets/docs/domainspecs/UIVisualization/chart-heatmap.md +0 -62
- package/assets/docs/domainspecs/UIVisualization/chart-network.md +0 -69
- package/assets/docs/domainspecs/UIVisualization/chart-parallel.md +0 -75
- package/assets/docs/domainspecs/UIVisualization/chart-scurve.md +0 -66
- package/assets/docs/domainspecs/UIVisualization/chart-survival.md +0 -69
- package/assets/docs/domainspecs/UIVisualization/chart-trellis.md +0 -68
- package/assets/docs/domainspecs/UIVisualization/chart-violin.md +0 -61
- package/assets/docs/domainspecs/UIVisualization/chart-volcano.md +0 -63
- package/assets/docs/domainspecs/UIVisualization/charting-standards.domain.md +0 -80
- package/assets/docs/domainspecs/UIVisualization/clean-architecture.domain.md +0 -87
- package/assets/docs/domainspecs/UIVisualization/coding-standards.domain.md +0 -47
- package/assets/docs/domainspecs/UIVisualization/comandrulemap.md +0 -130
- package/assets/docs/domainspecs/UIVisualization/component-contracts.domain.md +0 -67
- package/assets/docs/domainspecs/UIVisualization/data-source.domain.md +0 -68
- package/assets/docs/domainspecs/UIVisualization/domain-requirements.md +0 -110
- package/assets/docs/domainspecs/UIVisualization/folder-structure.domain.md +0 -55
- package/assets/docs/domainspecs/UIVisualization/state-management.domain.md +0 -67
- package/assets/docs/domainspecs/UIVisualization/testing.domain.md +0 -52
- package/assets/docs/domainspecs/UIVisualization/ui-viz-terms.md +0 -39
- package/assets/docs/domainspecs/healthcare/ai-rules.domain.md +0 -34
- package/assets/docs/domainspecs/healthcare/api-versioning.domain.md +0 -17
- package/assets/docs/domainspecs/healthcare/auditing.domain.md +0 -29
- package/assets/docs/domainspecs/healthcare/authorization.domain.md +0 -26
- package/assets/docs/domainspecs/healthcare/clinical-terms.md +0 -20
- package/assets/docs/domainspecs/healthcare/coding-standards.domain.md +0 -26
- package/assets/docs/domainspecs/healthcare/comandrulemap.md +0 -166
- package/assets/docs/domainspecs/healthcare/consent.md +0 -19
- package/assets/docs/domainspecs/healthcare/cqrs.domain.md +0 -12
- package/assets/docs/domainspecs/healthcare/data-classification.domain.md +0 -28
- package/assets/docs/domainspecs/healthcare/dependency-policy.domain.md +0 -11
- package/assets/docs/domainspecs/healthcare/dicom.md +0 -15
- package/assets/docs/domainspecs/healthcare/domain-driven-design.domain.md +0 -28
- package/assets/docs/domainspecs/healthcare/domain-requirements.md +0 -55
- package/assets/docs/domainspecs/healthcare/eventing.domain.md +0 -18
- package/assets/docs/domainspecs/healthcare/fhir.md +0 -36
- package/assets/docs/domainspecs/healthcare/folder-structure.domain.md +0 -23
- package/assets/docs/domainspecs/healthcare/hipaa.md +0 -34
- package/assets/docs/domainspecs/healthcare/hl7.md +0 -15
- package/assets/docs/domainspecs/healthcare/integration-terms.md +0 -21
- package/assets/docs/domainspecs/healthcare/persistence.domain.md +0 -20
- package/assets/docs/domainspecs/healthcare/terminology.md +0 -30
- package/assets/docs/domainspecs/healthcare/testing.domain.md +0 -15
- package/assets/docs/domainspecs/healthcare/vertical-slices.domain.md +0 -18
- package/assets/docs/domainspecs/healthcare/zero-trust.domain.md +0 -12
- package/assets/docs/domainspecs/pharma/ai-rules.domain.md +0 -32
- package/assets/docs/domainspecs/pharma/api-versioning.domain.md +0 -20
- package/assets/docs/domainspecs/pharma/atc.md +0 -22
- package/assets/docs/domainspecs/pharma/auditing.domain.md +0 -26
- package/assets/docs/domainspecs/pharma/authorization.domain.md +0 -25
- package/assets/docs/domainspecs/pharma/coding-standards.domain.md +0 -28
- package/assets/docs/domainspecs/pharma/comandrulemap.md +0 -186
- package/assets/docs/domainspecs/pharma/cqrs.domain.md +0 -16
- package/assets/docs/domainspecs/pharma/data-classification.domain.md +0 -24
- package/assets/docs/domainspecs/pharma/data-provenance.md +0 -21
- package/assets/docs/domainspecs/pharma/dependency-policy.domain.md +0 -11
- package/assets/docs/domainspecs/pharma/domain-driven-design.domain.md +0 -36
- package/assets/docs/domainspecs/pharma/domain-requirements.md +0 -99
- package/assets/docs/domainspecs/pharma/eventing.domain.md +0 -18
- package/assets/docs/domainspecs/pharma/fhir.md +0 -31
- package/assets/docs/domainspecs/pharma/folder-structure.domain.md +0 -24
- package/assets/docs/domainspecs/pharma/hl7.md +0 -17
- package/assets/docs/domainspecs/pharma/idmp.md +0 -26
- package/assets/docs/domainspecs/pharma/integration-terms.md +0 -21
- package/assets/docs/domainspecs/pharma/ndc.md +0 -28
- package/assets/docs/domainspecs/pharma/persistence.domain.md +0 -23
- package/assets/docs/domainspecs/pharma/pharma-terms.md +0 -27
- package/assets/docs/domainspecs/pharma/product-lifecycle.domain.md +0 -30
- package/assets/docs/domainspecs/pharma/regulatory-compliance.md +0 -19
- package/assets/docs/domainspecs/pharma/terminology.md +0 -32
- package/assets/docs/domainspecs/pharma/testing.domain.md +0 -19
- package/assets/docs/domainspecs/pharma/vertical-slices.domain.md +0 -17
- package/assets/docs/domainspecs/pharma/zero-trust.domain.md +0 -12
- package/assets/docs/glossary/ai-rules.md +0 -59
- package/assets/docs/governance/api-versioning.md +0 -99
- package/assets/docs/governance/coding-standards.md +0 -87
- package/assets/docs/governance/dependency-policy.md +0 -40
- package/assets/docs/interop/ihe-conformance.md +0 -31
- package/assets/docs/security/auditing.md +0 -117
- package/assets/docs/security/authorization-matrix.md +0 -14
- package/assets/docs/security/authorization.md +0 -87
- package/assets/docs/security/data-classification.md +0 -38
- package/assets/docs/security/zero-trust.md +0 -76
- package/assets/docs/technology-constitution.md +0 -172
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: "aw-spec-taskstoissues"
|
|
3
|
-
description: "Convert existing tasks into actionable, dependency-ordered GitHub issues for the feature based on available design artifacts."
|
|
4
|
-
argument-hint: "Optional filter or label for GitHub issues"
|
|
5
|
-
compatibility: "Requires aw-spec project structure with .aw-spec/ directory"
|
|
6
|
-
metadata:
|
|
7
|
-
author: "github-aw-spec"
|
|
8
|
-
source: "templates/commands/taskstoissues.md"
|
|
9
|
-
user-invocable: true
|
|
10
|
-
disable-model-invocation: false
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
## User Input
|
|
15
|
-
|
|
16
|
-
```text
|
|
17
|
-
$ARGUMENTS
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
You **MUST** consider the user input before proceeding (if not empty).
|
|
21
|
-
|
|
22
|
-
## Pre-Execution Checks
|
|
23
|
-
|
|
24
|
-
**Check for extension hooks (before tasks-to-issues conversion)**:
|
|
25
|
-
- Check if `.aw-spec/extensions.yml` exists in the project root.
|
|
26
|
-
- If it exists, read it and look for entries under the `hooks.before_taskstoissues` key
|
|
27
|
-
- If the YAML cannot be parsed or is invalid, skip hook checking silently and continue normally
|
|
28
|
-
- Filter out hooks where `enabled` is explicitly `false`. Treat hooks without an `enabled` field as enabled by default.
|
|
29
|
-
- For each remaining hook, do **not** attempt to interpret or evaluate hook `condition` expressions:
|
|
30
|
-
- If the hook has no `condition` field, or it is null/empty, treat the hook as executable
|
|
31
|
-
- If the hook defines a non-empty `condition`, skip the hook and leave condition evaluation to the HookExecutor implementation
|
|
32
|
-
- When constructing slash commands from hook command names, replace dots (`.`) with hyphens (`-`). For example, `aw-spec.git.commit` → `/aw-spec-git-commit`.
|
|
33
|
-
- For each executable hook, output the following based on its `optional` flag:
|
|
34
|
-
- **Optional hook** (`optional: true`):
|
|
35
|
-
```
|
|
36
|
-
## Extension Hooks
|
|
37
|
-
|
|
38
|
-
**Optional Pre-Hook**: {extension}
|
|
39
|
-
Command: `/{command}`
|
|
40
|
-
Description: {description}
|
|
41
|
-
|
|
42
|
-
Prompt: {prompt}
|
|
43
|
-
To execute: `/{command}`
|
|
44
|
-
```
|
|
45
|
-
- **Mandatory hook** (`optional: false`):
|
|
46
|
-
```
|
|
47
|
-
## Extension Hooks
|
|
48
|
-
|
|
49
|
-
**Automatic Pre-Hook**: {extension}
|
|
50
|
-
Executing: `/{command}`
|
|
51
|
-
EXECUTE_COMMAND: {command}
|
|
52
|
-
|
|
53
|
-
Wait for the result of the hook command before proceeding to the Outline.
|
|
54
|
-
```
|
|
55
|
-
- If no hooks are registered or `.aw-spec/extensions.yml` does not exist, skip silently
|
|
56
|
-
|
|
57
|
-
## Outline
|
|
58
|
-
|
|
59
|
-
1. Run `.aw-spec/scripts/bash/check-prerequisites.sh --json --require-tasks --include-tasks` from repo root and parse FEATURE_DIR and AVAILABLE_DOCS list. All paths must be absolute. For single quotes in args like "I'm Groot", use escape syntax: e.g 'I'\''m Groot' (or double-quote if possible: "I'm Groot").
|
|
60
|
-
1. **IF EXISTS**: Load `.aw-spec/memory/constitution.md` for project principles and governance constraints.
|
|
61
|
-
1. From the executed script, extract the path to **tasks**.
|
|
62
|
-
1. Get the Git remote by running:
|
|
63
|
-
|
|
64
|
-
```bash
|
|
65
|
-
git config --get remote.origin.url
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
> [!CAUTION]
|
|
69
|
-
> ONLY PROCEED TO NEXT STEPS IF THE REMOTE IS A GITHUB URL
|
|
70
|
-
|
|
71
|
-
1. For each task in the list, use the GitHub MCP server to create a new issue in the repository that is representative of the Git remote.
|
|
72
|
-
|
|
73
|
-
> [!CAUTION]
|
|
74
|
-
> UNDER NO CIRCUMSTANCES EVER CREATE ISSUES IN REPOSITORIES THAT DO NOT MATCH THE REMOTE URL
|
|
75
|
-
|
|
76
|
-
## Post-Execution Checks
|
|
77
|
-
|
|
78
|
-
**Check for extension hooks (after tasks-to-issues conversion)**:
|
|
79
|
-
Check if `.aw-spec/extensions.yml` exists in the project root.
|
|
80
|
-
- If it exists, read it and look for entries under the `hooks.after_taskstoissues` key
|
|
81
|
-
- If the YAML cannot be parsed or is invalid, skip hook checking silently and continue normally
|
|
82
|
-
- Filter out hooks where `enabled` is explicitly `false`. Treat hooks without an `enabled` field as enabled by default.
|
|
83
|
-
- For each remaining hook, do **not** attempt to interpret or evaluate hook `condition` expressions:
|
|
84
|
-
- If the hook has no `condition` field, or it is null/empty, treat the hook as executable
|
|
85
|
-
- If the hook defines a non-empty `condition`, skip the hook and leave condition evaluation to the HookExecutor implementation
|
|
86
|
-
- When constructing slash commands from hook command names, replace dots (`.`) with hyphens (`-`). For example, `aw-spec.git.commit` → `/aw-spec-git-commit`.
|
|
87
|
-
- For each executable hook, output the following based on its `optional` flag:
|
|
88
|
-
- **Optional hook** (`optional: true`):
|
|
89
|
-
```
|
|
90
|
-
## Extension Hooks
|
|
91
|
-
|
|
92
|
-
**Optional Hook**: {extension}
|
|
93
|
-
Command: `/{command}`
|
|
94
|
-
Description: {description}
|
|
95
|
-
|
|
96
|
-
Prompt: {prompt}
|
|
97
|
-
To execute: `/{command}`
|
|
98
|
-
```
|
|
99
|
-
- **Mandatory hook** (`optional: false`):
|
|
100
|
-
```
|
|
101
|
-
## Extension Hooks
|
|
102
|
-
|
|
103
|
-
**Automatic Hook**: {extension}
|
|
104
|
-
Executing: `/{command}`
|
|
105
|
-
EXECUTE_COMMAND: {command}
|
|
106
|
-
```
|
|
107
|
-
- If no hooks are registered or `.aw-spec/extensions.yml` does not exist, skip silently
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"schema_version": "1.0",
|
|
3
|
-
"extensions": {
|
|
4
|
-
"agent-context": {
|
|
5
|
-
"version": "1.0.0",
|
|
6
|
-
"source": "local",
|
|
7
|
-
"manifest_hash": "sha256:9a1dc02d2d0139bb03860392ecacef79183be2c442feda2f9ccaa4e5907b1e47",
|
|
8
|
-
"enabled": true,
|
|
9
|
-
"priority": 10,
|
|
10
|
-
"registered_commands": {
|
|
11
|
-
"claude": [
|
|
12
|
-
"aw-spec.agent-context.update"
|
|
13
|
-
]
|
|
14
|
-
},
|
|
15
|
-
"registered_skills": [],
|
|
16
|
-
"installed_at": "2026-06-10T07:39:02.078494+00:00"
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
# Coding Agent Context Extension
|
|
2
|
-
|
|
3
|
-
This bundled extension manages the **coding agent context/instruction file** (e.g. `CLAUDE.md`, `.github/copilot-instructions.md`, `AGENTS.md`, `GEMINI.md`, …) for the active integration.
|
|
4
|
-
|
|
5
|
-
It owns the lifecycle of the managed section delimited by the configurable start/end markers (defaults: `<!-- AW-SPEC START -->` / `<!-- AW-SPEC END -->`).
|
|
6
|
-
|
|
7
|
-
## Why an extension?
|
|
8
|
-
|
|
9
|
-
Not every AW-Spec user wants AW-Spec to write into the coding agent's context file. Extracting this behavior into a dedicated extension lets users:
|
|
10
|
-
|
|
11
|
-
- **Opt out** entirely with `specify extension disable agent-context` — AW-Spec will then never create or modify the agent context file.
|
|
12
|
-
- **Customize the markers** by editing `.aw-spec/extensions/agent-context/agent-context-config.yml` — both the Python layer and the bundled scripts honor the same `context_markers` value.
|
|
13
|
-
- **Refresh on demand** with `/aw-spec.agent-context.update`, or automatically through the hooks declared in `extension.yml` (`after_specify`, `after_plan`).
|
|
14
|
-
|
|
15
|
-
## Commands
|
|
16
|
-
|
|
17
|
-
| Command | Description |
|
|
18
|
-
|---------|-------------|
|
|
19
|
-
| `aw-spec.agent-context.update` | Refresh the managed section in the agent context file with the current plan path. |
|
|
20
|
-
|
|
21
|
-
## Configuration
|
|
22
|
-
|
|
23
|
-
All configuration flows through the extension's own config file at
|
|
24
|
-
`.aw-spec/extensions/agent-context/agent-context-config.yml`:
|
|
25
|
-
|
|
26
|
-
```yaml
|
|
27
|
-
# Path to the coding agent context file managed by this extension
|
|
28
|
-
context_file: CLAUDE.md
|
|
29
|
-
|
|
30
|
-
# Delimiters for the managed AW-Spec section
|
|
31
|
-
context_markers:
|
|
32
|
-
start: "<!-- AW-SPEC START -->"
|
|
33
|
-
end: "<!-- AW-SPEC END -->"
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
- `context_file` — the project-relative path to the coding agent context file, written by `specify init` and `specify integration install`.
|
|
37
|
-
- `context_markers.start` / `.end` — the delimiters around the managed section. Edit these to use custom markers.
|
|
38
|
-
|
|
39
|
-
## Requirements
|
|
40
|
-
|
|
41
|
-
The bundled update scripts require **Python 3** with **PyYAML** for YAML/upsert processing (PowerShell can also use `ConvertFrom-Yaml` when available).
|
|
42
|
-
|
|
43
|
-
PyYAML ships with the `specify` CLI and is normally available via the same `python3` interpreter. If a hook reports *"PyYAML is required … not available in the current Python environment"*, it means the system `python3` differs from the one used to install AW-Spec. To resolve, run:
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
pip install pyyaml
|
|
47
|
-
# or target the specific interpreter AW-Spec uses:
|
|
48
|
-
/path/to/aw-spec-python -m pip install pyyaml
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
## Disable
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
specify extension disable agent-context
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
When disabled, AW-Spec skips context file creation, updates, and removal (the gates are inside `upsert_context_section()` and `remove_context_section()`).
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: "Refresh the managed AW-Spec section in the coding agent context file"
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Update Coding Agent Context
|
|
6
|
-
|
|
7
|
-
Refresh the managed AW-Spec section inside the active coding agent's context/instruction file (e.g. `CLAUDE.md`, `.github/copilot-instructions.md`, `AGENTS.md`).
|
|
8
|
-
|
|
9
|
-
## Behavior
|
|
10
|
-
|
|
11
|
-
The script reads the agent-context extension config at
|
|
12
|
-
`.aw-spec/extensions/agent-context/agent-context-config.yml` to discover:
|
|
13
|
-
|
|
14
|
-
- `context_file` — the path of the coding agent context file to manage.
|
|
15
|
-
- `context_markers.start` / `.end` — the delimiters surrounding the managed section. Defaults to `<!-- AW-SPEC START -->` and `<!-- AW-SPEC END -->` when the field is missing.
|
|
16
|
-
|
|
17
|
-
It then creates, replaces, or appends the managed block so that the section points at the most recent plan path when one can be discovered (`specs/<feature>/plan.md`).
|
|
18
|
-
|
|
19
|
-
If `context_file` is empty or the file cannot be located, the command reports nothing to do and exits successfully.
|
|
20
|
-
|
|
21
|
-
## Execution
|
|
22
|
-
|
|
23
|
-
- **Bash**: `.aw-spec/extensions/agent-context/scripts/bash/update-agent-context.sh [plan_path]`
|
|
24
|
-
- **PowerShell**: `.aw-spec/extensions/agent-context/scripts/powershell/update-agent-context.ps1 [plan_path]`
|
|
25
|
-
|
|
26
|
-
When `plan_path` is omitted, the script auto-detects the most recently modified `specs/*/plan.md`.
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
schema_version: "1.0"
|
|
2
|
-
|
|
3
|
-
extension:
|
|
4
|
-
id: agent-context
|
|
5
|
-
name: "Coding Agent Context"
|
|
6
|
-
version: "1.0.0"
|
|
7
|
-
description: "Manages coding agent context/instruction files (e.g., CLAUDE.md, copilot-instructions.md) with project-specific plan references and configurable markers"
|
|
8
|
-
author: aw-spec-core
|
|
9
|
-
repository: https://github.com/github/aw-spec
|
|
10
|
-
license: MIT
|
|
11
|
-
|
|
12
|
-
requires:
|
|
13
|
-
aw-spec_version: ">=0.2.0"
|
|
14
|
-
|
|
15
|
-
provides:
|
|
16
|
-
commands:
|
|
17
|
-
- name: aw-spec.agent-context.update
|
|
18
|
-
file: commands/aw-spec.agent-context.update.md
|
|
19
|
-
description: "Refresh the managed AW-Spec section in the coding agent context file"
|
|
20
|
-
|
|
21
|
-
hooks:
|
|
22
|
-
after_specify:
|
|
23
|
-
command: aw-spec.agent-context.update
|
|
24
|
-
optional: true
|
|
25
|
-
description: "Refresh agent context after specification"
|
|
26
|
-
after_plan:
|
|
27
|
-
command: aw-spec.agent-context.update
|
|
28
|
-
optional: true
|
|
29
|
-
description: "Refresh agent context after planning"
|
|
30
|
-
|
|
31
|
-
tags:
|
|
32
|
-
- "agent"
|
|
33
|
-
- "context"
|
|
34
|
-
- "core"
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# update-agent-context.sh
|
|
3
|
-
#
|
|
4
|
-
# Refresh the managed AW-Spec section in the coding agent's context file
|
|
5
|
-
# (e.g. CLAUDE.md, .github/copilot-instructions.md, AGENTS.md).
|
|
6
|
-
#
|
|
7
|
-
# Reads `context_file` and `context_markers.{start,end}` from the
|
|
8
|
-
# agent-context extension config:
|
|
9
|
-
# .aw-spec/extensions/agent-context/agent-context-config.yml
|
|
10
|
-
#
|
|
11
|
-
# Usage: update-agent-context.sh [plan_path]
|
|
12
|
-
#
|
|
13
|
-
# When `plan_path` is omitted, the script picks the most recently modified
|
|
14
|
-
# `specs/*/plan.md` if any exist, otherwise emits the section without a
|
|
15
|
-
# concrete plan path.
|
|
16
|
-
|
|
17
|
-
set -euo pipefail
|
|
18
|
-
|
|
19
|
-
PROJECT_ROOT="$(pwd)"
|
|
20
|
-
EXT_CONFIG="$PROJECT_ROOT/.aw-spec/extensions/agent-context/agent-context-config.yml"
|
|
21
|
-
DEFAULT_START="<!-- AW-SPEC START -->"
|
|
22
|
-
DEFAULT_END="<!-- AW-SPEC END -->"
|
|
23
|
-
|
|
24
|
-
if [[ ! -f "$EXT_CONFIG" ]]; then
|
|
25
|
-
echo "agent-context: $EXT_CONFIG not found; nothing to do." >&2
|
|
26
|
-
exit 0
|
|
27
|
-
fi
|
|
28
|
-
|
|
29
|
-
# Locate a suitable Python interpreter (python3, then python).
|
|
30
|
-
_python=""
|
|
31
|
-
if command -v python3 >/dev/null 2>&1; then
|
|
32
|
-
_python="python3"
|
|
33
|
-
elif command -v python >/dev/null 2>&1 && python --version 2>&1 | grep -q "^Python 3"; then
|
|
34
|
-
_python="python"
|
|
35
|
-
fi
|
|
36
|
-
|
|
37
|
-
if [[ -z "$_python" ]]; then
|
|
38
|
-
echo "agent-context: Python 3 not found on PATH; skipping update." >&2
|
|
39
|
-
exit 0
|
|
40
|
-
fi
|
|
41
|
-
|
|
42
|
-
# Parse extension config once; emit three newline-separated fields:
|
|
43
|
-
# context_file, context_markers.start, context_markers.end
|
|
44
|
-
if ! _raw_opts="$("$_python" - "$EXT_CONFIG" <<'PY'
|
|
45
|
-
import sys
|
|
46
|
-
try:
|
|
47
|
-
import yaml
|
|
48
|
-
except ImportError:
|
|
49
|
-
print(
|
|
50
|
-
"agent-context: PyYAML is required to parse extension config but is not available "
|
|
51
|
-
"in the current Python environment.\n"
|
|
52
|
-
" To resolve: pip install pyyaml (or install it into the environment used by python3).\n"
|
|
53
|
-
" Context file will not be updated until PyYAML is importable.",
|
|
54
|
-
file=sys.stderr,
|
|
55
|
-
)
|
|
56
|
-
sys.exit(2)
|
|
57
|
-
try:
|
|
58
|
-
with open(sys.argv[1], "r", encoding="utf-8") as fh:
|
|
59
|
-
data = yaml.safe_load(fh)
|
|
60
|
-
except Exception as exc:
|
|
61
|
-
print(
|
|
62
|
-
f"agent-context: unable to parse {sys.argv[1]} ({exc}); cannot update context.",
|
|
63
|
-
file=sys.stderr,
|
|
64
|
-
)
|
|
65
|
-
sys.exit(2)
|
|
66
|
-
if not isinstance(data, dict):
|
|
67
|
-
data = {}
|
|
68
|
-
def get_str(obj, *keys):
|
|
69
|
-
node = obj
|
|
70
|
-
for k in keys:
|
|
71
|
-
if isinstance(node, dict) and k in node:
|
|
72
|
-
node = node[k]
|
|
73
|
-
else:
|
|
74
|
-
return ""
|
|
75
|
-
return node if isinstance(node, str) else ""
|
|
76
|
-
print(get_str(data, "context_file"))
|
|
77
|
-
print(get_str(data, "context_markers", "start"))
|
|
78
|
-
print(get_str(data, "context_markers", "end"))
|
|
79
|
-
PY
|
|
80
|
-
)"; then
|
|
81
|
-
echo "agent-context: skipping update (see above for details)." >&2
|
|
82
|
-
exit 0
|
|
83
|
-
fi
|
|
84
|
-
|
|
85
|
-
_opts_lines=()
|
|
86
|
-
while IFS= read -r _line || [[ -n "$_line" ]]; do
|
|
87
|
-
_opts_lines+=("$_line")
|
|
88
|
-
done < <(printf '%s\n' "$_raw_opts")
|
|
89
|
-
if (( ${#_opts_lines[@]} < 3 )); then
|
|
90
|
-
echo "agent-context: malformed config parser output; expected 3 lines (context_file, marker_start, marker_end), got ${#_opts_lines[@]}; skipping update." >&2
|
|
91
|
-
exit 0
|
|
92
|
-
fi
|
|
93
|
-
CONTEXT_FILE="${_opts_lines[0]}"
|
|
94
|
-
MARKER_START="${_opts_lines[1]}"
|
|
95
|
-
MARKER_END="${_opts_lines[2]}"
|
|
96
|
-
|
|
97
|
-
if [[ -z "$CONTEXT_FILE" ]]; then
|
|
98
|
-
echo "agent-context: context_file not set in extension config; nothing to do." >&2
|
|
99
|
-
exit 0
|
|
100
|
-
fi
|
|
101
|
-
|
|
102
|
-
# Reject absolute paths, backslash separators, and '..' path segments in context_file
|
|
103
|
-
if [[ "$CONTEXT_FILE" == /* ]] || [[ "$CONTEXT_FILE" =~ ^[A-Za-z]: ]]; then
|
|
104
|
-
echo "agent-context: context_file must be a project-relative path; got '$CONTEXT_FILE'." >&2
|
|
105
|
-
exit 1
|
|
106
|
-
fi
|
|
107
|
-
if [[ "$CONTEXT_FILE" == *\\* ]]; then
|
|
108
|
-
echo "agent-context: context_file must not contain backslash separators; got '$CONTEXT_FILE'." >&2
|
|
109
|
-
exit 1
|
|
110
|
-
fi
|
|
111
|
-
IFS='/' read -ra _cf_parts <<< "$CONTEXT_FILE"
|
|
112
|
-
for _seg in "${_cf_parts[@]}"; do
|
|
113
|
-
if [[ "$_seg" == ".." ]]; then
|
|
114
|
-
echo "agent-context: context_file must not contain '..' path segments; got '$CONTEXT_FILE'." >&2
|
|
115
|
-
exit 1
|
|
116
|
-
fi
|
|
117
|
-
done
|
|
118
|
-
unset _cf_parts _seg
|
|
119
|
-
|
|
120
|
-
[[ -z "$MARKER_START" ]] && MARKER_START="$DEFAULT_START"
|
|
121
|
-
[[ -z "$MARKER_END" ]] && MARKER_END="$DEFAULT_END"
|
|
122
|
-
|
|
123
|
-
PLAN_PATH="${1:-}"
|
|
124
|
-
if [[ -z "$PLAN_PATH" ]]; then
|
|
125
|
-
# Pick the most recently modified plan.md two levels deep
|
|
126
|
-
# (specs/<Aggregate>/<Feature>/plan.md).
|
|
127
|
-
# Use find + sort by modification time to avoid ls/head fragility with
|
|
128
|
-
# spaces in paths or SIGPIPE from pipefail.
|
|
129
|
-
_plan_abs="$("$_python" - "$PROJECT_ROOT" <<'PY'
|
|
130
|
-
import sys, os
|
|
131
|
-
from pathlib import Path
|
|
132
|
-
specs = Path(sys.argv[1]) / "specs"
|
|
133
|
-
plans = sorted(
|
|
134
|
-
specs.glob("*/plan.md"),
|
|
135
|
-
key=lambda p: p.stat().st_mtime,
|
|
136
|
-
reverse=True,
|
|
137
|
-
)
|
|
138
|
-
print(plans[0] if plans else "")
|
|
139
|
-
PY
|
|
140
|
-
)"
|
|
141
|
-
if [[ -n "$_plan_abs" ]]; then
|
|
142
|
-
PLAN_PATH="${_plan_abs#"$PROJECT_ROOT/"}"
|
|
143
|
-
fi
|
|
144
|
-
fi
|
|
145
|
-
|
|
146
|
-
CTX_PATH="$PROJECT_ROOT/$CONTEXT_FILE"
|
|
147
|
-
mkdir -p "$(dirname "$CTX_PATH")"
|
|
148
|
-
|
|
149
|
-
# Build the managed section
|
|
150
|
-
TMP_SECTION="$(mktemp)"
|
|
151
|
-
trap 'rm -f "$TMP_SECTION"' EXIT
|
|
152
|
-
{
|
|
153
|
-
echo "$MARKER_START"
|
|
154
|
-
echo "For additional context about technologies to be used, project structure,"
|
|
155
|
-
echo "shell commands, and other important information, read the current plan"
|
|
156
|
-
if [[ -n "$PLAN_PATH" ]]; then
|
|
157
|
-
echo "at $PLAN_PATH"
|
|
158
|
-
fi
|
|
159
|
-
echo "$MARKER_END"
|
|
160
|
-
} > "$TMP_SECTION"
|
|
161
|
-
|
|
162
|
-
"$_python" - "$CTX_PATH" "$MARKER_START" "$MARKER_END" "$TMP_SECTION" <<'PY'
|
|
163
|
-
import sys, os
|
|
164
|
-
ctx_path, start, end, section_path = sys.argv[1:5]
|
|
165
|
-
with open(section_path, "r", encoding="utf-8") as fh:
|
|
166
|
-
section = fh.read().rstrip("\n") + "\n"
|
|
167
|
-
|
|
168
|
-
if os.path.exists(ctx_path):
|
|
169
|
-
with open(ctx_path, "r", encoding="utf-8-sig") as fh:
|
|
170
|
-
content = fh.read()
|
|
171
|
-
s = content.find(start)
|
|
172
|
-
e = content.find(end, s if s != -1 else 0)
|
|
173
|
-
if s != -1 and e != -1 and e > s:
|
|
174
|
-
end_of_marker = e + len(end)
|
|
175
|
-
if end_of_marker < len(content) and content[end_of_marker] == "\r":
|
|
176
|
-
end_of_marker += 1
|
|
177
|
-
if end_of_marker < len(content) and content[end_of_marker] == "\n":
|
|
178
|
-
end_of_marker += 1
|
|
179
|
-
new_content = content[:s] + section + content[end_of_marker:]
|
|
180
|
-
elif s != -1:
|
|
181
|
-
new_content = content[:s] + section
|
|
182
|
-
elif e != -1:
|
|
183
|
-
end_of_marker = e + len(end)
|
|
184
|
-
if end_of_marker < len(content) and content[end_of_marker] == "\r":
|
|
185
|
-
end_of_marker += 1
|
|
186
|
-
if end_of_marker < len(content) and content[end_of_marker] == "\n":
|
|
187
|
-
end_of_marker += 1
|
|
188
|
-
new_content = section + content[end_of_marker:]
|
|
189
|
-
else:
|
|
190
|
-
if content and not content.endswith("\n"):
|
|
191
|
-
content += "\n"
|
|
192
|
-
new_content = (content + "\n" + section) if content else section
|
|
193
|
-
else:
|
|
194
|
-
new_content = section
|
|
195
|
-
|
|
196
|
-
new_content = new_content.replace("\r\n", "\n").replace("\r", "\n")
|
|
197
|
-
with open(ctx_path, "wb") as fh:
|
|
198
|
-
fh.write(new_content.encode("utf-8"))
|
|
199
|
-
PY
|
|
200
|
-
|
|
201
|
-
echo "agent-context: updated $CONTEXT_FILE"
|