agentme 0.36.0 → 0.37.0
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/.filedist-package.yml +1 -1
- package/.xdrs/agentme/bdrs/index.md +2 -1
- package/.xdrs/agentme/bdrs/operations/{401-epic-feature-story-planning.md → 401-plan-epic-feature-story.md} +2 -2
- package/.xdrs/agentme/bdrs/operations/402-digital-product-roles.md +15 -19
- package/.xdrs/agentme/bdrs/operations/403-product-team-composition.md +3 -0
- package/.xdrs/agentme/bdrs/operations/404-team-roles-and-specialists.md +61 -82
- package/.xdrs/agentme/bdrs/operations/405-digital-product-roles-raci.md +131 -0
- package/.xdrs/agentme/bdrs/principles/002-okr-framework.md +1 -1
- package/.xdrs/agentme/bdrs/principles/003-product-delivery-value-flow.md +3 -2
- package/.xdrs/agentme/edrs/application/101-javascript-project-tooling.md +1 -1
- package/.xdrs/agentme/edrs/application/102-golang-project-tooling.md +1 -1
- package/.xdrs/agentme/edrs/application/103-python-project-tooling.md +1 -1
- package/.xdrs/agentme/edrs/application/127-external-system-adapter-skills.md +2 -0
- package/.xdrs/agentme/edrs/application/skills/{251-azure-devops-connector → azure-devops-connector}/SKILL.md +6 -9
- package/.xdrs/agentme/edrs/application/skills/{251-azure-devops-connector → azure-devops-connector}/SKILL.test.md +1 -1
- package/.xdrs/agentme/edrs/application/skills/{051-create-golang-project → create-golang-project}/SKILL.md +1 -1
- package/.xdrs/agentme/edrs/application/skills/create-golang-project/SKILL.test.md +72 -0
- package/.xdrs/agentme/edrs/application/skills/{050-create-javascript-project → create-javascript-project}/SKILL.md +23 -24
- package/.xdrs/agentme/edrs/application/skills/create-javascript-project/SKILL.test.md +72 -0
- package/.xdrs/agentme/edrs/application/skills/{052-create-python-project → create-python-project}/SKILL.md +1 -1
- package/.xdrs/agentme/edrs/application/skills/create-python-project/SKILL.test.md +79 -0
- package/.xdrs/agentme/edrs/application/skills/{250-github-connector → github-connector}/SKILL.md +5 -8
- package/.xdrs/agentme/edrs/application/skills/{250-github-connector → github-connector}/SKILL.test.md +1 -1
- package/.xdrs/agentme/edrs/application/skills/{200-run-skill-tests → run-skill-tests}/SKILL.md +4 -4
- package/.xdrs/agentme/edrs/application/skills/{200-run-skill-tests → run-skill-tests}/SKILL.test.md +7 -7
- package/.xdrs/agentme/edrs/application/skills/{010-select-relevant-xdrs → select-relevant-xdrs}/SKILL.md +1 -1
- package/.xdrs/agentme/edrs/application/skills/select-relevant-xdrs/SKILL.test.md +73 -0
- package/.xdrs/agentme/edrs/governance/502-contributing-guide-requirements.md +1 -1
- package/.xdrs/agentme/edrs/index.md +16 -11
- package/.xdrs/agentme/edrs/operations/402-dora-metrics-framework.md +82 -0
- package/.xdrs/agentme/edrs/operations/403-dora-deployment-frequency.md +37 -0
- package/.xdrs/agentme/edrs/operations/404-dora-lead-time-for-changes.md +41 -0
- package/.xdrs/agentme/edrs/operations/405-dora-change-failure-rate.md +42 -0
- package/.xdrs/agentme/edrs/operations/406-dora-time-to-restore-service.md +42 -0
- package/.xdrs/agentme/edrs/platform/301-monorepo-structure.md +1 -1
- package/.xdrs/agentme/edrs/platform/skills/{053-monorepo-setup → monorepo-setup}/SKILL.md +15 -15
- package/.xdrs/agentme/edrs/platform/skills/monorepo-setup/SKILL.test.md +80 -0
- package/.xdrs/agentme/edrs/principles/012-continuous-xdr-enrichment.md +1 -1
- package/.xdrs/agentme/edrs/principles/017-skill-testing.md +4 -4
- package/.xdrs/agentme/edrs/principles/articles/001-continuous-xdr-improvement.md +1 -1
- package/.xdrs/agentme/edrs/principles/skills/{150-refine-plan-mode → refine-plan-mode}/SKILL.md +2 -8
- package/.xdrs/agentme/edrs/principles/skills/{150-refine-plan-mode → refine-plan-mode}/SKILL.test.md +2 -2
- package/.xdrs/agentme/edrs/principles/skills/{151-refine-user-story → refine-user-story}/SKILL.md +4 -11
- package/.xdrs/agentme/edrs/principles/skills/{151-refine-user-story → refine-user-story}/SKILL.test.md +17 -17
- package/.xdrs/agentme/edrs/principles/skills/{400-pr-owner-assistant → resolve-pr-comments}/Makefile +1 -1
- package/.xdrs/agentme/edrs/principles/skills/resolve-pr-comments/SKILL.md +662 -0
- package/.xdrs/agentme/edrs/principles/skills/resolve-pr-comments/SKILL.test.md +165 -0
- package/.xdrs/agentme/edrs/principles/skills/{400-pr-owner-assistant → resolve-pr-comments}/scripts/post-replies-azure-devops.js +3 -3
- package/.xdrs/agentme/edrs/principles/skills/{400-pr-owner-assistant → resolve-pr-comments}/scripts/post-replies-azure-devops.test.js +5 -5
- package/.xdrs/agentme/edrs/principles/skills/{400-pr-owner-assistant → resolve-pr-comments}/scripts/post-replies-github.js +3 -3
- package/.xdrs/agentme/edrs/principles/skills/{400-pr-owner-assistant → resolve-pr-comments}/scripts/post-replies-github.test.js +4 -4
- package/.xdrs/agentme/edrs/principles/skills/{400-pr-owner-assistant → resolve-pr-comments}/scripts/update-section.js +84 -3
- package/.xdrs/agentme/edrs/principles/skills/{400-pr-owner-assistant → resolve-pr-comments}/scripts/update-section.test.js +108 -1
- package/package.json +2 -2
- package/.xdrs/agentme/edrs/principles/skills/400-pr-owner-assistant/SKILL.md +0 -633
- package/.xdrs/agentme/edrs/principles/skills/400-pr-owner-assistant/SKILL.test.md +0 -174
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: azure-devops-connector
|
|
3
3
|
description: >
|
|
4
4
|
Base connector providing authentication, read access, and write access to Azure DevOps
|
|
5
5
|
pull requests and their comment threads via the az CLI. Pure I/O -- no triage logic, no
|
|
6
|
-
business decisions. Activate when an agent or skill (such as pr-
|
|
6
|
+
business decisions. Activate when an agent or skill (such as resolve-pr-comments) needs to
|
|
7
7
|
fetch or post PR thread comments, change thread status, or check out a PR branch on Azure
|
|
8
8
|
DevOps.
|
|
9
9
|
metadata:
|
|
@@ -19,9 +19,7 @@ Wraps the `az` CLI (with the `azure-devops` extension) -- Azure DevOps's own sup
|
|
|
19
19
|
client -- plus `az rest` for the handful of operations the extension does not expose as a
|
|
20
20
|
dedicated subcommand. Contains no business logic (per rule 05): it only reads and writes
|
|
21
21
|
data and normalizes it to the shape consumed by
|
|
22
|
-
[`
|
|
23
|
-
|
|
24
|
-
This is a base connector skill (number range 250-299).
|
|
22
|
+
[`resolve-pr-comments`](../../../principles/skills/resolve-pr-comments/SKILL.md).
|
|
25
23
|
|
|
26
24
|
## Instructions
|
|
27
25
|
|
|
@@ -91,7 +89,7 @@ Normalize every thread's comments to the shared record shape (`id`, `kind`, `sta
|
|
|
91
89
|
resolve.
|
|
92
90
|
- `diff_hunk` has no native equivalent in the Azure DevOps API -- `threadContext` exposes
|
|
93
91
|
only a file path and line range, not a unified-diff-style hunk string. Leave `diff_hunk`
|
|
94
|
-
null rather than fabricating one; `pr-
|
|
92
|
+
null rather than fabricating one; `resolve-pr-comments` degrades to relying on
|
|
95
93
|
`source-lines` alone in that case, exactly as it does for a general (non-file-scoped)
|
|
96
94
|
comment.
|
|
97
95
|
- `url` has no direct field in the thread-comment response either. Synthesize a best-effort
|
|
@@ -172,7 +170,7 @@ threads/comments `POST`, then updates thread status via the `PATCH` call.
|
|
|
172
170
|
well-known, tenant-agnostic AAD resource id) explicitly on every `az rest` call. Even
|
|
173
171
|
then, never treat a zero exit code alone as proof a write persisted -- read the thread
|
|
174
172
|
back afterward and verify the expected content/status is actually present before
|
|
175
|
-
reporting success. `
|
|
173
|
+
reporting success. `resolve-pr-comments`'s `scripts/post-replies-azure-devops.js` does
|
|
176
174
|
this automatically for every write.
|
|
177
175
|
- **Symptom:** a fetched thread has no obvious "kind" like GitHub's review-summary.
|
|
178
176
|
**Cause:** Azure DevOps genuinely has no equivalent concept -- every comment lives inside a
|
|
@@ -199,7 +197,6 @@ threads/comments `POST`, then updates thread status via the `PATCH` call.
|
|
|
199
197
|
|
|
200
198
|
## References
|
|
201
199
|
|
|
202
|
-
- [`
|
|
200
|
+
- [`resolve-pr-comments`](../../../principles/skills/resolve-pr-comments/SKILL.md) -- consumes this connector's normalized output.
|
|
203
201
|
- [`agentme-edr-127`](../../127-external-system-adapter-skills.md) -- external system adapter skill rules (connector naming, Known Issues format, HITL-before-write).
|
|
204
202
|
- [`agentme-edr-124`](../../124-secrets-management.md) -- credential storage and retrieval.
|
|
205
|
-
- [`agentme-core-adr-003`](../../../../../agentme-core/adrs/principles/003-skill-numbering-ranges.md) -- skill numbering ranges (250-299 base connectors).
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: create-golang-project
|
|
3
3
|
description: >
|
|
4
4
|
Scaffolds the initial boilerplate structure for a Go (Golang) CLI or library project following
|
|
5
5
|
the standard tooling and layout defined in agentme-edr-102. Activate this skill when the user
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
skill: create-golang-project
|
|
3
|
+
skill-version: "1.0"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Test Scenarios
|
|
7
|
+
|
|
8
|
+
### Scenario 1: Create a new Go CLI project, happy path
|
|
9
|
+
|
|
10
|
+
**Trigger / Input**
|
|
11
|
+
|
|
12
|
+
"Create a Go CLI project. Module `github.com/acme/logscan`, binary name `logscan`, first feature
|
|
13
|
+
`scan`, first subcommand `scan`."
|
|
14
|
+
|
|
15
|
+
**Expected Behaviour**
|
|
16
|
+
|
|
17
|
+
1. Phase 1 gathers or infers the module path, binary name, Go version (default `1.24`), first
|
|
18
|
+
feature package name, and first CLI subcommand name.
|
|
19
|
+
2. Phase 2 creates `.mise.toml`, `go.mod`, a `main.go` that only dispatches to `adapters/cli`, the
|
|
20
|
+
root `Makefile` (exporting `GOCACHE`/`GOMODCACHE`/`GOLANGCI_LINT_CACHE`, with `build`,
|
|
21
|
+
`build-all`, `lint`, `test`, `test-coverage`, `benchmark`, and `clean` targets), `.golangci.yml`,
|
|
22
|
+
`.gitignore`, and `README.md`.
|
|
23
|
+
3. Phase 3 creates `app/scan/scan.go` and `app/scan/scan_test.go` with the `Options`/`Result`/`Run`
|
|
24
|
+
shape.
|
|
25
|
+
4. Phase 4 creates `adapters/cli/scan.go` that parses flags and calls into `app/scan`.
|
|
26
|
+
5. Phase 5 runs `make setup` and `make all`, fixing any compile or lint errors before finishing.
|
|
27
|
+
|
|
28
|
+
**Assertions**
|
|
29
|
+
|
|
30
|
+
- [ ] Output creates `main.go` containing only argument dispatch, with no business logic.
|
|
31
|
+
- [ ] Output places the `scan` domain logic in `app/scan/scan.go` and the flag parsing in
|
|
32
|
+
`adapters/cli/scan.go`, not the reverse.
|
|
33
|
+
- [ ] Output's root `Makefile` exports `GOCACHE`, `GOMODCACHE`, and `GOLANGCI_LINT_CACHE` under
|
|
34
|
+
`.cache/` and defines `build`, `lint`, and `test` targets.
|
|
35
|
+
- [ ] Output reports running `make setup` and `make all` and fixes any compile or lint errors
|
|
36
|
+
before declaring completion.
|
|
37
|
+
|
|
38
|
+
### Scenario 2: Business logic requested inside main.go is redirected to app/
|
|
39
|
+
|
|
40
|
+
**Trigger / Input**
|
|
41
|
+
|
|
42
|
+
"Put the scan logic directly inside `main.go` instead of a separate package, and use
|
|
43
|
+
`fmt.Println` to print debug output during scanning."
|
|
44
|
+
|
|
45
|
+
**Expected Behaviour**
|
|
46
|
+
|
|
47
|
+
Per the Conventions and reminders section, the skill keeps `main.go` as a thin dispatcher with no
|
|
48
|
+
business logic, places the scan logic in `app/scan/`, and uses `logrus` instead of `fmt.Println`
|
|
49
|
+
for diagnostic/debug output.
|
|
50
|
+
|
|
51
|
+
**Assertions**
|
|
52
|
+
|
|
53
|
+
- [ ] Output does not place business logic inside `main.go`.
|
|
54
|
+
- [ ] Output uses `logrus` rather than `fmt.Println` for diagnostic/debug output.
|
|
55
|
+
|
|
56
|
+
### Scenario 3: internal/ package is not created without explicit justification
|
|
57
|
+
|
|
58
|
+
**Trigger / Input**
|
|
59
|
+
|
|
60
|
+
"Create an `internal/` package for the scan helpers so other repositories can't import them."
|
|
61
|
+
|
|
62
|
+
**Expected Behaviour**
|
|
63
|
+
|
|
64
|
+
Per the Conventions and reminders section, the skill does not create an `internal/` package by
|
|
65
|
+
default — it keeps the helpers importable (e.g., under `app/scan/` or `shared/`) unless the user
|
|
66
|
+
gives an explicit justification for restricting importability.
|
|
67
|
+
|
|
68
|
+
**Assertions**
|
|
69
|
+
|
|
70
|
+
- [ ] Output does not create an `internal/` package without the user first providing an explicit
|
|
71
|
+
justification.
|
|
72
|
+
- [ ] Output keeps the scan helpers in an importable location such as `app/scan/` or `shared/`.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: create-javascript-project
|
|
3
3
|
description: >
|
|
4
4
|
Scaffolds the initial boilerplate structure for a JavaScript/TypeScript project following
|
|
5
5
|
the standard tooling and layout defined in agentme-edr-101. Activate this skill when the user
|
|
@@ -48,16 +48,16 @@ MISE := mise exec --
|
|
|
48
48
|
%:
|
|
49
49
|
@echo ''
|
|
50
50
|
@echo '>>> Running /lib:$@...'
|
|
51
|
-
|
|
51
|
+
@$(MAKE) -C lib $@
|
|
52
52
|
@echo ''
|
|
53
53
|
@echo '>>> Running /examples:$@...'
|
|
54
|
-
|
|
54
|
+
@STAGE=dev $(MAKE) -C examples $@
|
|
55
55
|
|
|
56
56
|
publish:
|
|
57
|
-
|
|
57
|
+
@$(MAKE) -C lib publish
|
|
58
58
|
|
|
59
59
|
setup:
|
|
60
|
-
|
|
60
|
+
mise install
|
|
61
61
|
```
|
|
62
62
|
|
|
63
63
|
**`./.mise.toml`**
|
|
@@ -126,52 +126,52 @@ CACHE_DIR := .cache
|
|
|
126
126
|
|
|
127
127
|
build: install
|
|
128
128
|
@rm -rf dist
|
|
129
|
-
|
|
130
|
-
|
|
129
|
+
@mkdir -p $(CACHE_DIR)/tsc
|
|
130
|
+
$(MISE) pnpm exec tsc --incremental --tsBuildInfoFile $(CACHE_DIR)/tsc/tsconfig.tsbuildinfo --outDir dist
|
|
131
131
|
@-find ./dist \( -regex '.*\.test\..*' -o -regex '.*__tests.*' \) -exec rm -rf {} \; 2> /dev/null
|
|
132
132
|
@# Create pack for use by examples to simulate real external usage
|
|
133
|
-
|
|
133
|
+
$(MISE) pnpm pack --pack-destination dist
|
|
134
134
|
|
|
135
135
|
build-module: install
|
|
136
136
|
@rm -rf dist
|
|
137
|
-
|
|
138
|
-
|
|
137
|
+
@mkdir -p $(CACHE_DIR)/tsc
|
|
138
|
+
$(MISE) pnpm exec tsc --incremental --tsBuildInfoFile $(CACHE_DIR)/tsc/tsconfig.tsbuildinfo --outDir dist
|
|
139
139
|
@-find ./dist \( -regex '.*\.test\..*' -o -regex '.*__tests.*' \) -exec rm -rf {} \; 2> /dev/null
|
|
140
140
|
|
|
141
141
|
lint:
|
|
142
|
-
|
|
143
|
-
|
|
142
|
+
@mkdir -p $(CACHE_DIR)/eslint
|
|
143
|
+
$(MISE) pnpm exec eslint ./src --cache --cache-location $(CACHE_DIR)/eslint/.eslintcache
|
|
144
144
|
|
|
145
145
|
lint-fix:
|
|
146
|
-
|
|
147
|
-
|
|
146
|
+
@mkdir -p $(CACHE_DIR)/eslint
|
|
147
|
+
$(MISE) pnpm exec eslint ./src --fix --cache --cache-location $(CACHE_DIR)/eslint/.eslintcache
|
|
148
148
|
|
|
149
149
|
test-watch:
|
|
150
|
-
|
|
150
|
+
$(MISE) pnpm exec jest --watch
|
|
151
151
|
|
|
152
152
|
test:
|
|
153
|
-
|
|
153
|
+
$(MISE) pnpm exec jest --verbose
|
|
154
154
|
|
|
155
155
|
clean:
|
|
156
156
|
rm -rf node_modules
|
|
157
157
|
rm -rf dist
|
|
158
|
-
|
|
158
|
+
rm -rf .cache
|
|
159
159
|
|
|
160
160
|
all: build lint test
|
|
161
161
|
|
|
162
162
|
install:
|
|
163
|
-
|
|
164
|
-
|
|
163
|
+
mise install
|
|
164
|
+
$(MISE) pnpm install --frozen-lockfile --config.dedupe-peer-dependents=false
|
|
165
165
|
|
|
166
166
|
publish:
|
|
167
|
-
|
|
168
|
-
|
|
167
|
+
$(MISE) npx -y monotag@1.26.0 current --bump-action=latest --prefix=
|
|
168
|
+
@VERSION=$$($(MISE) node -p "require('./package.json').version"); \
|
|
169
169
|
if echo "$$VERSION" | grep -q '-'; then \
|
|
170
170
|
TAG=$$(echo "$$VERSION" | sed 's/[0-9]*\.[0-9]*\.[0-9]*-\([a-zA-Z][a-zA-Z0-9]*\).*/\1/'); \
|
|
171
171
|
echo "Prerelease version $$VERSION detected, publishing with --tag $$TAG"; \
|
|
172
|
-
|
|
172
|
+
$(MISE) npm publish --no-git-checks --provenance --tag "$$TAG"; \
|
|
173
173
|
else \
|
|
174
|
-
|
|
174
|
+
$(MISE) npm publish --no-git-checks --provenance; \
|
|
175
175
|
fi
|
|
176
176
|
```
|
|
177
177
|
|
|
@@ -283,7 +283,6 @@ export default [
|
|
|
283
283
|
},
|
|
284
284
|
},
|
|
285
285
|
];
|
|
286
|
-
];
|
|
287
286
|
```
|
|
288
287
|
|
|
289
288
|
Do not name this file `eslint.config.js` unless the generated package also opts into ESM with `"type": "module"`, because that produces Node.js warnings and conflicts with the recommended Jest CommonJS setup.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
skill: create-javascript-project
|
|
3
|
+
skill-version: "1.0"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Test Scenarios
|
|
7
|
+
|
|
8
|
+
### Scenario 1: Create a new TypeScript library, happy path
|
|
9
|
+
|
|
10
|
+
**Trigger / Input**
|
|
11
|
+
|
|
12
|
+
"Create a new TypeScript library project called `retry-client`."
|
|
13
|
+
|
|
14
|
+
**Expected Behaviour**
|
|
15
|
+
|
|
16
|
+
1. Phase 1 gathers or infers the package name (`retry-client`), description, author, and Node.js
|
|
17
|
+
version (default `24`).
|
|
18
|
+
2. Phase 2 creates the root `Makefile` (delegating to `lib/` then `examples/`), `.mise.toml`, and
|
|
19
|
+
`.gitignore` ignoring `node_modules/`, `dist/`, and `.cache/`.
|
|
20
|
+
3. Phase 3 creates `lib/src/index.ts`, `lib/src/index.test.ts`, `lib/Makefile`, `lib/package.json`
|
|
21
|
+
(without `"type": "module"`), `lib/tsconfig.json`, `lib/jest.config.js`, and
|
|
22
|
+
`lib/eslint.config.mjs` pointing `parserOptions.project` at `tsconfig.json`.
|
|
23
|
+
4. Phase 4 creates `examples/Makefile` and `examples/usage-basic/` consuming the packed tarball
|
|
24
|
+
from `lib/dist/`.
|
|
25
|
+
5. Phase 5 creates the workspace `README.md` and `lib/README.md` with Quick Start first.
|
|
26
|
+
6. Phase 6 verifies the Phase 6 checklist, including that `lib/src/index.ts` exports at least one
|
|
27
|
+
symbol and all `[package-name]` placeholders are replaced with `retry-client`.
|
|
28
|
+
|
|
29
|
+
**Assertions**
|
|
30
|
+
|
|
31
|
+
- [ ] Output creates a root `Makefile` that delegates every target to `lib/` and then `examples/`.
|
|
32
|
+
- [ ] Output creates `lib/eslint.config.mjs` with `parserOptions.project` set to
|
|
33
|
+
`['./tsconfig.json']` and no duplicated closing syntax.
|
|
34
|
+
- [ ] Output keeps `lib/package.json` without `"type": "module"` while using `eslint.config.mjs` as
|
|
35
|
+
the ESLint entry point.
|
|
36
|
+
- [ ] Output replaces every `[package-name]` placeholder with `retry-client` across the generated
|
|
37
|
+
files.
|
|
38
|
+
|
|
39
|
+
### Scenario 2: CLI tool request adds a bin entry and bundling step
|
|
40
|
+
|
|
41
|
+
**Trigger / Input**
|
|
42
|
+
|
|
43
|
+
"Scaffold a JavaScript CLI tool called `snap-cli`."
|
|
44
|
+
|
|
45
|
+
**Expected Behaviour**
|
|
46
|
+
|
|
47
|
+
Per the Edge Cases entry for CLI tools, the skill adds a `"bin"` field to `lib/package.json`
|
|
48
|
+
pointing at the built output, creates `lib/src/main.ts` as the CLI entry point, and adds an
|
|
49
|
+
esbuild bundling step to `lib/Makefile` rather than relying on the plain `tsc` build alone.
|
|
50
|
+
|
|
51
|
+
**Assertions**
|
|
52
|
+
|
|
53
|
+
- [ ] Output adds a `"bin"` field to `lib/package.json` referencing the built CLI entry point.
|
|
54
|
+
- [ ] Output creates `lib/src/main.ts` as the CLI entry point and adds an esbuild bundle step to
|
|
55
|
+
`lib/Makefile`.
|
|
56
|
+
|
|
57
|
+
### Scenario 3: "No examples needed" removes the examples delegation cleanly
|
|
58
|
+
|
|
59
|
+
**Trigger / Input**
|
|
60
|
+
|
|
61
|
+
"Create a TypeScript library called `token-cache` but skip the examples project."
|
|
62
|
+
|
|
63
|
+
**Expected Behaviour**
|
|
64
|
+
|
|
65
|
+
Per the Edge Cases entry for omitting examples, the skill does not create the `examples/`
|
|
66
|
+
directory and removes the `examples` delegation step from the root `Makefile`, while still
|
|
67
|
+
creating the full `lib/` structure and root `README.md`.
|
|
68
|
+
|
|
69
|
+
**Assertions**
|
|
70
|
+
|
|
71
|
+
- [ ] Output does not create an `examples/` directory.
|
|
72
|
+
- [ ] Output's root `Makefile` does not include a delegation step to `examples/`.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: create-python-project
|
|
3
3
|
description: >
|
|
4
4
|
Scaffolds the initial boilerplate structure for a Python project following the standard tooling
|
|
5
5
|
and layout defined in agentme-edr-103. Activate this skill when the user asks to create,
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
skill: create-python-project
|
|
3
|
+
skill-version: "1.0"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Test Scenarios
|
|
7
|
+
|
|
8
|
+
### Scenario 1: Create a new Python package, happy path
|
|
9
|
+
|
|
10
|
+
**Trigger / Input**
|
|
11
|
+
|
|
12
|
+
"Create a Python project called `event_tools`."
|
|
13
|
+
|
|
14
|
+
**Expected Behaviour**
|
|
15
|
+
|
|
16
|
+
1. Phase 1 gathers or infers package name (`event_tools`), description, author, Python version
|
|
17
|
+
(default `3.13`), and primary entry point.
|
|
18
|
+
2. Phase 2 creates root `.mise.toml`, root `Makefile` (exporting `UV_PROJECT_ENVIRONMENT`/
|
|
19
|
+
`UV_CACHE_DIR`, delegating `build`/`lint`/`test` to `lib/`, and running each `examples/*`
|
|
20
|
+
project against the built wheel), root `.gitignore` ignoring `.venv/`, `dist/`, `.cache/`, and
|
|
21
|
+
`__pycache__/`, and root `README.md` with Getting Started (`make setup` / `make test`) near the
|
|
22
|
+
top.
|
|
23
|
+
3. Phase 3 creates `lib/Makefile`, `lib/pyproject.toml` (Ruff, ty, pytest-cov, pip-audit
|
|
24
|
+
configured), and `lib/README.md` with Quick Start first.
|
|
25
|
+
4. Phase 4 creates `lib/src/event_tools/` with `app/`, `adapters/`, `shared/` following the
|
|
26
|
+
hexagonal layout, plus `lib/tests/hello_test.py`.
|
|
27
|
+
5. Phase 5 creates `examples/basic-usage/` as an independent consumer project that imports
|
|
28
|
+
`event_tools` rather than importing from `lib/src/`.
|
|
29
|
+
6. Phase 6 runs `make setup`, `make install`, `make lint-fix`, `make test`, and `make build`, and
|
|
30
|
+
fixes any failures before finishing.
|
|
31
|
+
|
|
32
|
+
**Assertions**
|
|
33
|
+
|
|
34
|
+
- [ ] Output creates `lib/src/event_tools/app/`, `lib/src/event_tools/adapters/`, and
|
|
35
|
+
`lib/src/event_tools/shared/` following the hexagonal layout.
|
|
36
|
+
- [ ] Output configures `lib/pyproject.toml` with Ruff, ty, pytest-cov, and pip-audit, and does
|
|
37
|
+
not add a separate `requirements.txt`, `setup.py`, `ruff.toml`, or `ty.toml`.
|
|
38
|
+
- [ ] Output creates `examples/basic-usage/` as its own project that imports the `event_tools`
|
|
39
|
+
package rather than reaching into `lib/src/` with a relative import.
|
|
40
|
+
- [ ] Output reports running `make lint-fix`, `make test`, and `make build` and fixes any
|
|
41
|
+
failures before declaring completion.
|
|
42
|
+
|
|
43
|
+
### Scenario 2: CLI package request adds an entry point, not a new baseline
|
|
44
|
+
|
|
45
|
+
**Trigger / Input**
|
|
46
|
+
|
|
47
|
+
"Scaffold a Python CLI package called `net_probe` with a command named `probe`."
|
|
48
|
+
|
|
49
|
+
**Expected Behaviour**
|
|
50
|
+
|
|
51
|
+
Per Phase 4 and the skill's own CLI example, the skill keeps the same baseline Makefile and
|
|
52
|
+
quality checks and adds the CLI entry point in `lib/src/net_probe/adapters/cli/__init__.py`,
|
|
53
|
+
adding `[project.scripts]` to `lib/pyproject.toml` only because the command name (`probe`)
|
|
54
|
+
differs from the module name (`net_probe`).
|
|
55
|
+
|
|
56
|
+
**Assertions**
|
|
57
|
+
|
|
58
|
+
- [ ] Output places the CLI entry point in `lib/src/net_probe/adapters/cli/__init__.py`, not in
|
|
59
|
+
`app/` or at the package root.
|
|
60
|
+
- [ ] Output adds a `[project.scripts]` entry in `lib/pyproject.toml` mapping `probe` to the CLI
|
|
61
|
+
entry point.
|
|
62
|
+
|
|
63
|
+
### Scenario 3: Example-only dependency stays in the example, not in lib/
|
|
64
|
+
|
|
65
|
+
**Trigger / Input**
|
|
66
|
+
|
|
67
|
+
"Add an example under `examples/` that calls a public HTTP API and therefore needs the `httpx`
|
|
68
|
+
library. The core `event_tools` package itself does not need `httpx`."
|
|
69
|
+
|
|
70
|
+
**Expected Behaviour**
|
|
71
|
+
|
|
72
|
+
Per the Edge Cases entry on example dependencies, the skill adds `httpx` to that example's own
|
|
73
|
+
`pyproject.toml` and does not add it to `lib/pyproject.toml`, since the library itself has no
|
|
74
|
+
need for it.
|
|
75
|
+
|
|
76
|
+
**Assertions**
|
|
77
|
+
|
|
78
|
+
- [ ] Output adds `httpx` only to the example's own `pyproject.toml`.
|
|
79
|
+
- [ ] Output does not add `httpx` to `lib/pyproject.toml`.
|
package/.xdrs/agentme/edrs/application/skills/{250-github-connector → github-connector}/SKILL.md
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: github-connector
|
|
3
3
|
description: >
|
|
4
4
|
Base connector providing authentication, read access, and write access to GitHub pull
|
|
5
5
|
requests and their comments via the gh CLI. Pure I/O -- no triage logic, no business
|
|
6
|
-
decisions. Activate when an agent or skill (such as pr-
|
|
6
|
+
decisions. Activate when an agent or skill (such as resolve-pr-comments) needs to fetch or
|
|
7
7
|
post PR comments, resolve review threads, or check out a PR branch on GitHub.
|
|
8
8
|
metadata:
|
|
9
9
|
author: flaviostutz
|
|
@@ -18,9 +18,7 @@ Wraps the `gh` CLI -- GitHub's own supported API client -- so callers never cons
|
|
|
18
18
|
REST/GraphQL calls or handle GitHub-specific auth themselves. Contains no business logic (per
|
|
19
19
|
rule 05): it does not decide what a comment means, what action to take, or when to reply --
|
|
20
20
|
it only reads and writes data and normalizes it to the shape consumed by
|
|
21
|
-
[`
|
|
22
|
-
|
|
23
|
-
This is a base connector skill (number range 250-299).
|
|
21
|
+
[`resolve-pr-comments`](../../../principles/skills/resolve-pr-comments/SKILL.md).
|
|
24
22
|
|
|
25
23
|
## Instructions
|
|
26
24
|
|
|
@@ -72,7 +70,7 @@ Normalize every fetched item to the shared record shape (`id`, `kind`, `status`,
|
|
|
72
70
|
`can_resolve`, `path`, `line`, `content`, `author`, `in_reply_to`, `diff_hunk`, `url`):
|
|
73
71
|
- `kind` is `"issue-comment"`, `"review-comment"`, or `"review-summary"`.
|
|
74
72
|
- `status` is `"resolved"` when the GraphQL thread lookup marks it resolved, else `"open"`.
|
|
75
|
-
GitHub has no `wontfix`/`closed` state of its own -- `pr-
|
|
73
|
+
GitHub has no `wontfix`/`closed` state of its own -- `resolve-pr-comments` tracks those
|
|
76
74
|
locally.
|
|
77
75
|
- `can_resolve` is `true` only for `"review-comment"` items belonging to a resolvable
|
|
78
76
|
thread; `"issue-comment"` and `"review-summary"` are never resolvable -- set `false`.
|
|
@@ -181,7 +179,6 @@ thread via the GraphQL mutation using that comment's thread node id.
|
|
|
181
179
|
|
|
182
180
|
## References
|
|
183
181
|
|
|
184
|
-
- [`
|
|
182
|
+
- [`resolve-pr-comments`](../../../principles/skills/resolve-pr-comments/SKILL.md) -- consumes this connector's normalized output.
|
|
185
183
|
- [`agentme-edr-127`](../../127-external-system-adapter-skills.md) -- external system adapter skill rules (connector naming, Known Issues format, HITL-before-write).
|
|
186
184
|
- [`agentme-edr-124`](../../124-secrets-management.md) -- credential storage and retrieval.
|
|
187
|
-
- [`agentme-core-adr-003`](../../../../../agentme-core/adrs/principles/003-skill-numbering-ranges.md) -- skill numbering ranges (250-299 base connectors).
|
package/.xdrs/agentme/edrs/application/skills/{200-run-skill-tests → run-skill-tests}/SKILL.md
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: run-skill-tests
|
|
3
3
|
description: >
|
|
4
4
|
Executes the SKILL.test.md test scenarios for a given skill, evaluates each assertion against the skill's
|
|
5
5
|
actual output, and reports a pass/fail result per scenario. Activate when the user asks to test, verify,
|
|
@@ -17,7 +17,7 @@ Loads `SKILL.test.md` from a skill directory, runs each scenario by invoking the
|
|
|
17
17
|
|
|
18
18
|
### Phase 1: Locate and Validate SKILL.test.md
|
|
19
19
|
|
|
20
|
-
1. Accept the skill path from the user (e.g., `.agents/skills/
|
|
20
|
+
1. Accept the skill path from the user (e.g., `.agents/skills/review` or `.xdrs/_local/adrs/principles/skills/005-my-skill`). If no path is given, ask: *"Which skill do you want to test? Provide the path to the skill directory."*
|
|
21
21
|
2. Resolve the path to the directory containing `SKILL.md`. If the path is a symlink, follow it to the real directory.
|
|
22
22
|
3. Check that `SKILL.test.md` exists in the same directory as `SKILL.md`. If it is missing, output:
|
|
23
23
|
|
|
@@ -91,9 +91,9 @@ A scenario passes only when every one of its assertions passes. The overall outc
|
|
|
91
91
|
|
|
92
92
|
## Examples
|
|
93
93
|
|
|
94
|
-
**Input**: "Test the skill at `.agents/skills/
|
|
94
|
+
**Input**: "Test the skill at `.agents/skills/review`"
|
|
95
95
|
|
|
96
|
-
- Phase 1 resolves the symlink → `.xdrs/_core/adrs/principles/skills/
|
|
96
|
+
- Phase 1 resolves the symlink → `.xdrs/_core/adrs/principles/skills/review/`
|
|
97
97
|
- Reads `SKILL.test.md`, parses 3 scenarios
|
|
98
98
|
- Executes each scenario with the target skill loaded
|
|
99
99
|
- Reports per-assertion PASS/FAIL and an overall outcome
|
package/.xdrs/agentme/edrs/application/skills/{200-run-skill-tests → run-skill-tests}/SKILL.test.md
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
skill:
|
|
2
|
+
skill: run-skill-tests
|
|
3
3
|
skill-version: "1.0"
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -8,9 +8,9 @@ skill-version: "1.0"
|
|
|
8
8
|
### Scenario 1: Successfully executes scenarios and reports results
|
|
9
9
|
|
|
10
10
|
**Trigger / Input**
|
|
11
|
-
You are an agent with the `
|
|
11
|
+
You are an agent with the `run-skill-tests` skill loaded. The workspace has a skill at `.agents/skills/review` with both `SKILL.md` and `SKILL.test.md` present. The user says:
|
|
12
12
|
|
|
13
|
-
"Test the skill at `.agents/skills/
|
|
13
|
+
"Test the skill at `.agents/skills/review`"
|
|
14
14
|
|
|
15
15
|
**Expected Behaviour**
|
|
16
16
|
1. Skill resolves the path to the real directory (following the symlink).
|
|
@@ -22,7 +22,7 @@ You are an agent with the `200-run-skill-tests` skill loaded. The workspace has
|
|
|
22
22
|
7. Skill outputs a structured report using the mandated template with a final Outcome line.
|
|
23
23
|
|
|
24
24
|
**Assertions**
|
|
25
|
-
- [ ] Output contains `## Skill Test Report:
|
|
25
|
+
- [ ] Output contains `## Skill Test Report: review`.
|
|
26
26
|
- [ ] Output contains a `### Scenario` section for each scenario in `SKILL.test.md`.
|
|
27
27
|
- [ ] Each scenario section lists individual assertion results as `PASS` or `FAIL`.
|
|
28
28
|
- [ ] Output ends with a `## Summary` block containing `Scenarios:`, `Passed:`, `Failed:`, and `Outcome:`.
|
|
@@ -30,9 +30,9 @@ You are an agent with the `200-run-skill-tests` skill loaded. The workspace has
|
|
|
30
30
|
### Scenario 2: Halts with ERROR when SKILL.test.md is missing
|
|
31
31
|
|
|
32
32
|
**Trigger / Input**
|
|
33
|
-
You are an agent with the `
|
|
33
|
+
You are an agent with the `run-skill-tests` skill loaded. The workspace has a skill directory `.xdrs/agentme/edrs/application/skills/create-javascript-project` that contains `SKILL.md` but no `SKILL.test.md`. The user says:
|
|
34
34
|
|
|
35
|
-
"Run tests for `.xdrs/agentme/edrs/application/skills/
|
|
35
|
+
"Run tests for `.xdrs/agentme/edrs/application/skills/create-javascript-project`"
|
|
36
36
|
|
|
37
37
|
**Expected Behaviour**
|
|
38
38
|
1. Skill resolves the path to the directory.
|
|
@@ -49,7 +49,7 @@ You are an agent with the `200-run-skill-tests` skill loaded. The workspace has
|
|
|
49
49
|
### Scenario 3: Injects simulated human responses when present
|
|
50
50
|
|
|
51
51
|
**Trigger / Input**
|
|
52
|
-
You are an agent with the `
|
|
52
|
+
You are an agent with the `run-skill-tests` skill loaded. The workspace has a skill at `.xdrs/agentme/edrs/principles/skills/refine-plan-mode` with both `SKILL.md` and `SKILL.test.md` present. Scenario 1 in that `SKILL.test.md` includes a `**Simulated Human Responses**` section with 9 ordered responses. The user says:
|
|
53
53
|
|
|
54
54
|
"Test the skill at `.xdrs/agentme/edrs/principles/skills/refine-plan-mode`"
|
|
55
55
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: select-relevant-xdrs
|
|
3
3
|
description: >
|
|
4
4
|
Analyzes a client repository, extracts the full agentme XDR set, and excludes the records that do
|
|
5
5
|
not fit the project's structure and workflow needs. Activate this skill when the user asks to
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
skill: select-relevant-xdrs
|
|
3
|
+
skill-version: "1.0"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Test Scenarios
|
|
7
|
+
|
|
8
|
+
### Scenario 1: Install presets for a single-package Node.js library, happy path
|
|
9
|
+
|
|
10
|
+
**Trigger / Input**
|
|
11
|
+
|
|
12
|
+
"Install the right agentme XDR presets for this Node.js library." The repository is a single npm
|
|
13
|
+
package with a Makefile and no Go code, no monorepo layout, and no deployed/long-running service.
|
|
14
|
+
|
|
15
|
+
**Expected Behaviour**
|
|
16
|
+
|
|
17
|
+
1. Phase 1 inventories the shipped agentme XDR files.
|
|
18
|
+
2. Phase 2 analyzes the repository and detects a JavaScript/TypeScript single-package library with
|
|
19
|
+
Makefiles, no Go tooling, no monorepo structure, and no service surface.
|
|
20
|
+
3. Phase 3 selects exclusions with one-line rationale each — at minimum the Go project tooling XDR
|
|
21
|
+
and the service health-check XDR — while keeping baseline/broadly applicable guidance.
|
|
22
|
+
4. Phase 4 runs `npx -y agentme extract --output . --all --exclude <path> --exclude <path>` with
|
|
23
|
+
one `--exclude` flag per excluded XDR, then verifies `.xdrs/index.md`, `.xdrs/agentme/`, and
|
|
24
|
+
`AGENTS.md` exist and that every excluded path is absent from the output.
|
|
25
|
+
|
|
26
|
+
**Assertions**
|
|
27
|
+
|
|
28
|
+
- [ ] Output excludes `.xdrs/agentme/edrs/application/102-golang-project-tooling.md` and
|
|
29
|
+
`.xdrs/agentme/edrs/operations/401-service-health-check-endpoint.md` with a one-line
|
|
30
|
+
rationale for each.
|
|
31
|
+
- [ ] Output runs `agentme extract` with `--all` plus one `--exclude` flag per excluded XDR path,
|
|
32
|
+
rather than a hand-picked include list.
|
|
33
|
+
- [ ] Output verifies after extraction that `.xdrs/index.md`, `.xdrs/agentme/`, and `AGENTS.md`
|
|
34
|
+
exist and that the excluded paths are absent from the result.
|
|
35
|
+
|
|
36
|
+
### Scenario 2: Extraction blocked when the package exposes no inventory metadata
|
|
37
|
+
|
|
38
|
+
**Trigger / Input**
|
|
39
|
+
|
|
40
|
+
Run the skill in an environment where the CLI cannot enumerate the shipped XDRs, and the package
|
|
41
|
+
metadata and repository documentation also do not describe the shipped XDR set.
|
|
42
|
+
|
|
43
|
+
**Expected Behaviour**
|
|
44
|
+
|
|
45
|
+
Per Phase 1 step 4, since even the fallback inventory sources fail, the skill stops before
|
|
46
|
+
attempting any extraction and reports that automatic selection is blocked because the package does
|
|
47
|
+
not expose enough metadata in the current environment, rather than guessing an exclude list or
|
|
48
|
+
forcing a full installation.
|
|
49
|
+
|
|
50
|
+
**Assertions**
|
|
51
|
+
|
|
52
|
+
- [ ] Output stops before running any `agentme extract` command.
|
|
53
|
+
- [ ] Output reports that automatic selection is blocked due to insufficient package metadata,
|
|
54
|
+
rather than silently falling back to a default guess.
|
|
55
|
+
|
|
56
|
+
### Scenario 3: Debatable exclusion is kept, not excluded
|
|
57
|
+
|
|
58
|
+
**Trigger / Input**
|
|
59
|
+
|
|
60
|
+
Analyzing a currently single-package repository whose README states the team is planning to split
|
|
61
|
+
it into multiple applications "sometime in the future." Whether the monorepo-structure XDR still
|
|
62
|
+
applies is debatable.
|
|
63
|
+
|
|
64
|
+
**Expected Behaviour**
|
|
65
|
+
|
|
66
|
+
Per the Edge Cases entry on debatable exclusions, since the mismatch is not concrete today, the
|
|
67
|
+
skill keeps the monorepo-structure XDR in the installed set rather than excluding it on the basis
|
|
68
|
+
of a possible future restructuring.
|
|
69
|
+
|
|
70
|
+
**Assertions**
|
|
71
|
+
|
|
72
|
+
- [ ] Output keeps `.xdrs/agentme/edrs/platform/301-monorepo-structure.md` in the installed set.
|
|
73
|
+
- [ ] Output does not add it to the exclude list on the basis of a future, not-yet-concrete plan.
|
|
@@ -67,4 +67,4 @@ The content SHOULD stay concise and practical; do not turn `CONTRIBUTING.md` int
|
|
|
67
67
|
## References
|
|
68
68
|
|
|
69
69
|
- [agentme-edr-301 - Monorepo structure](../platform/301-monorepo-structure.md)
|
|
70
|
-
- [
|
|
70
|
+
- [monorepo-setup skill](../platform/skills/monorepo-setup/SKILL.md)
|