beth-copilot 1.1.0 → 2.0.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/CHANGELOG.md +39 -1
- package/README.md +51 -62
- package/assets/beth-questioning.png +0 -0
- package/assets/yellowstone-beth.png +0 -0
- package/bin/cli.js +19 -410
- package/dist/__tests__/inject-skills.test.d.ts +9 -0
- package/dist/__tests__/inject-skills.test.d.ts.map +1 -0
- package/dist/__tests__/inject-skills.test.js +143 -0
- package/dist/__tests__/inject-skills.test.js.map +1 -0
- package/dist/__tests__/skills/disambiguation.test.d.ts +10 -0
- package/dist/__tests__/skills/disambiguation.test.d.ts.map +1 -0
- package/dist/__tests__/skills/disambiguation.test.js +192 -0
- package/dist/__tests__/skills/disambiguation.test.js.map +1 -0
- package/dist/__tests__/skills/hook-injection.test.d.ts +11 -0
- package/dist/__tests__/skills/hook-injection.test.d.ts.map +1 -0
- package/dist/__tests__/skills/hook-injection.test.js +173 -0
- package/dist/__tests__/skills/hook-injection.test.js.map +1 -0
- package/dist/__tests__/skills/mapping-completeness.test.d.ts +17 -0
- package/dist/__tests__/skills/mapping-completeness.test.d.ts.map +1 -0
- package/dist/__tests__/skills/mapping-completeness.test.js +281 -0
- package/dist/__tests__/skills/mapping-completeness.test.js.map +1 -0
- package/dist/__tests__/skills/pipeline-integration.test.d.ts +18 -0
- package/dist/__tests__/skills/pipeline-integration.test.d.ts.map +1 -0
- package/dist/__tests__/skills/pipeline-integration.test.js +234 -0
- package/dist/__tests__/skills/pipeline-integration.test.js.map +1 -0
- package/dist/__tests__/skills/skill-routing.test.d.ts +15 -0
- package/dist/__tests__/skills/skill-routing.test.d.ts.map +1 -0
- package/dist/__tests__/skills/skill-routing.test.js +723 -0
- package/dist/__tests__/skills/skill-routing.test.js.map +1 -0
- package/dist/__tests__/skills/trigger-coverage.test.d.ts +24 -0
- package/dist/__tests__/skills/trigger-coverage.test.d.ts.map +1 -0
- package/dist/__tests__/skills/trigger-coverage.test.js +746 -0
- package/dist/__tests__/skills/trigger-coverage.test.js.map +1 -0
- package/dist/__tests__/smoke.test.js +13 -0
- package/dist/__tests__/smoke.test.js.map +1 -1
- package/dist/__tests__/verify-skills.test.d.ts +9 -0
- package/dist/__tests__/verify-skills.test.d.ts.map +1 -0
- package/dist/__tests__/verify-skills.test.js +78 -0
- package/dist/__tests__/verify-skills.test.js.map +1 -0
- package/dist/cli/commands/beads.e2e.test.d.ts +4 -2
- package/dist/cli/commands/beads.e2e.test.d.ts.map +1 -1
- package/dist/cli/commands/beads.e2e.test.js +97 -38
- package/dist/cli/commands/beads.e2e.test.js.map +1 -1
- package/dist/cli/commands/cli-edge-cases.e2e.test.js +1 -1
- package/dist/cli/commands/cli-edge-cases.e2e.test.js.map +1 -1
- package/dist/cli/commands/close.d.ts +11 -46
- package/dist/cli/commands/close.d.ts.map +1 -1
- package/dist/cli/commands/close.e2e.test.d.ts +4 -20
- package/dist/cli/commands/close.e2e.test.d.ts.map +1 -1
- package/dist/cli/commands/close.e2e.test.js +23 -204
- package/dist/cli/commands/close.e2e.test.js.map +1 -1
- package/dist/cli/commands/close.js +26 -240
- package/dist/cli/commands/close.js.map +1 -1
- package/dist/cli/commands/close.test.d.ts +7 -9
- package/dist/cli/commands/close.test.d.ts.map +1 -1
- package/dist/cli/commands/close.test.js +44 -424
- package/dist/cli/commands/close.test.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +5 -22
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.e2e.test.js +3 -59
- package/dist/cli/commands/doctor.e2e.test.js.map +1 -1
- package/dist/cli/commands/doctor.js +38 -111
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/doctor.test.js +32 -234
- package/dist/cli/commands/doctor.test.js.map +1 -1
- package/dist/cli/commands/framework-isolation.test.d.ts +1 -1
- package/dist/cli/commands/framework-isolation.test.js +2 -3
- package/dist/cli/commands/framework-isolation.test.js.map +1 -1
- package/dist/cli/commands/help.e2e.test.js +1 -5
- package/dist/cli/commands/help.e2e.test.js.map +1 -1
- package/dist/cli/commands/init-logic.e2e.test.js +12 -2
- package/dist/cli/commands/init-logic.e2e.test.js.map +1 -1
- package/dist/cli/commands/init.test.js +4 -21
- package/dist/cli/commands/init.test.js.map +1 -1
- package/dist/cli/commands/land.d.ts +3 -15
- package/dist/cli/commands/land.d.ts.map +1 -1
- package/dist/cli/commands/land.js +13 -68
- package/dist/cli/commands/land.js.map +1 -1
- package/dist/cli/commands/land.test.d.ts +0 -1
- package/dist/cli/commands/land.test.d.ts.map +1 -1
- package/dist/cli/commands/land.test.js +2 -57
- package/dist/cli/commands/land.test.js.map +1 -1
- package/dist/cli/commands/mcp.e2e.test.js +3 -3
- package/dist/cli/commands/mcp.e2e.test.js.map +1 -1
- package/dist/cli/commands/pipeline.e2e.test.js +23 -26
- package/dist/cli/commands/pipeline.e2e.test.js.map +1 -1
- package/dist/cli/commands/pre-push-guard.d.ts +2 -12
- package/dist/cli/commands/pre-push-guard.d.ts.map +1 -1
- package/dist/cli/commands/pre-push-guard.e2e.test.js +1 -1
- package/dist/cli/commands/pre-push-guard.e2e.test.js.map +1 -1
- package/dist/cli/commands/pre-push-guard.js +2 -47
- package/dist/cli/commands/pre-push-guard.js.map +1 -1
- package/dist/cli/commands/pre-push-guard.test.d.ts +0 -1
- package/dist/cli/commands/pre-push-guard.test.d.ts.map +1 -1
- package/dist/cli/commands/pre-push-guard.test.js +15 -98
- package/dist/cli/commands/pre-push-guard.test.js.map +1 -1
- package/dist/cli/commands/quickstart-expanded.e2e.test.d.ts +1 -1
- package/dist/cli/commands/quickstart-expanded.e2e.test.js +3 -30
- package/dist/cli/commands/quickstart-expanded.e2e.test.js.map +1 -1
- package/dist/cli/commands/quickstart.d.ts +0 -1
- package/dist/cli/commands/quickstart.d.ts.map +1 -1
- package/dist/cli/commands/quickstart.js +2 -60
- package/dist/cli/commands/quickstart.js.map +1 -1
- package/dist/cli/commands/quickstart.test.js +10 -104
- package/dist/cli/commands/quickstart.test.js.map +1 -1
- package/dist/cli/commands/update.d.ts +35 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.e2e.test.d.ts +24 -0
- package/dist/cli/commands/update.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/update.e2e.test.js +240 -0
- package/dist/cli/commands/update.e2e.test.js.map +1 -0
- package/dist/cli/commands/update.js +255 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/core/agents/frontmatter.test.js +1 -1
- package/dist/core/agents/frontmatter.test.js.map +1 -1
- package/dist/core/agents/handoffs.test.js +1 -1
- package/dist/core/agents/handoffs.test.js.map +1 -1
- package/dist/core/agents/loader.d.ts +4 -2
- package/dist/core/agents/loader.d.ts.map +1 -1
- package/dist/core/agents/loader.js +5 -3
- package/dist/core/agents/loader.js.map +1 -1
- package/dist/core/agents/loader.test.js +42 -4
- package/dist/core/agents/loader.test.js.map +1 -1
- package/dist/core/agents/suite.test.js +8 -7
- package/dist/core/agents/suite.test.js.map +1 -1
- package/dist/core/agents/tools.test.js +10 -8
- package/dist/core/agents/tools.test.js.map +1 -1
- package/dist/core/agents/types.test.js +1 -1
- package/dist/core/agents/types.test.js.map +1 -1
- package/dist/core/skills/loader.test.js +1 -1
- package/dist/core/skills/loader.test.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/pathValidation.d.ts +0 -5
- package/dist/lib/pathValidation.d.ts.map +1 -1
- package/dist/lib/pathValidation.js +0 -11
- package/dist/lib/pathValidation.js.map +1 -1
- package/dist/lib/pathValidation.test.js +2 -14
- package/dist/lib/pathValidation.test.js.map +1 -1
- package/package.json +3 -6
- package/sbom.json +259 -371
- package/templates/.github/agents/beth.agent.md +194 -122
- package/templates/.github/agents/developer.agent.md +30 -22
- package/templates/.github/agents/product-manager.agent.md +15 -6
- package/templates/.github/agents/researcher.agent.md +10 -7
- package/templates/.github/agents/security-reviewer.agent.md +16 -7
- package/templates/.github/agents/tester.agent.md +16 -8
- package/templates/.github/agents/ux-designer.agent.md +12 -9
- package/templates/.github/copilot-instructions.md +33 -4
- package/templates/.github/copilot-mcp-config.json +12 -0
- package/templates/.github/dependabot.yml +68 -0
- package/templates/.github/hooks/scripts/inject-skills.mjs +139 -0
- package/templates/.github/hooks/scripts/verify-skills.mjs +47 -0
- package/templates/.github/hooks/skill-enforcement.json +18 -0
- package/templates/.github/pull_request_template.md +48 -0
- package/templates/.github/skills/framer-components/SKILL.md +0 -0
- package/templates/.github/skills/prd/SKILL.md +0 -0
- package/templates/.github/skills/security-analysis/SKILL.md +798 -798
- package/templates/.github/skills/shadcn-ui/SKILL.md +561 -561
- package/templates/.github/skills/vercel-react-best-practices/AGENTS.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/SKILL.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/advanced-use-latest.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/async-api-routes.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/async-defer-await.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/async-dependencies.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/async-parallel.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/bundle-conditional.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/bundle-preload.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/client-event-listeners.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/client-swr-dedup.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-function-results.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-property-access.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-storage.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-combine-iterations.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-early-exit.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-index-maps.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-length-check-first.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-min-max-loop.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-activity.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-dependencies.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-derived-state.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-memo.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-transitions.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-auth-actions.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-cache-lru.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-cache-react.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-dedup-props.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-serialization.md +0 -0
- package/templates/.github/skills/web-design-guidelines/SKILL.md +0 -0
- package/templates/.vscode/settings.json +16 -16
- package/templates/AGENTS.md +59 -98
- package/templates/Backlog.md +80 -80
- package/assets/beth-portrait-small.txt +0 -13
- package/assets/beth-portrait.txt +0 -60
- package/bin/beth-animation.sh +0 -155
- package/bin/lib/animation.js +0 -189
- package/bin/lib/pathValidation.js +0 -233
- package/bin/lib/pathValidation.test.js +0 -280
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
name: product-manager
|
|
3
3
|
description: Expert product manager for IDEO-style digital products. Specializes in product vision, user stories, roadmaps, and stakeholder alignment for React/TypeScript/Next.js applications. Use when defining features, prioritizing work, writing requirements, or making product decisions.
|
|
4
4
|
model: Claude Opus 4.6
|
|
5
|
-
infer: true
|
|
6
5
|
tools:
|
|
7
6
|
- codebase
|
|
8
7
|
- readFile
|
|
@@ -25,13 +24,23 @@ You are an expert product manager on an IDEO-style team, specializing in human-c
|
|
|
25
24
|
|
|
26
25
|
## Work Tracking & Coordination
|
|
27
26
|
|
|
28
|
-
**Follow the workflow in `AGENTS.md`** —
|
|
27
|
+
**Follow the workflow in `AGENTS.md`** — task tracking (Backlog.md), session startup, and team coordination protocols all live there. If Beth spawned you with a task ID, that's your contract: deliver and mark it done with `backlog task edit <id> -s "Done" --plain`.
|
|
29
28
|
|
|
30
|
-
## Skills
|
|
29
|
+
## MANDATORY Skills (Non-Negotiable)
|
|
31
30
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
**BEFORE doing ANY work**, you MUST load your required skills. This is not optional.
|
|
32
|
+
Skills are also injected by the `SubagentStart` hook when you are spawned as a subagent.
|
|
33
|
+
|
|
34
|
+
**Required skills — load ALL of these before responding to any request:**
|
|
35
|
+
|
|
36
|
+
1. **Read** `.github/skills/prd/SKILL.md` — PRD template, requirements framework, user story format
|
|
37
|
+
|
|
38
|
+
After reading, confirm which key patterns you will apply before proceeding with work.
|
|
39
|
+
|
|
40
|
+
### Conditional Skills (load when relevant)
|
|
41
|
+
|
|
42
|
+
- **Azure Cost Optimization**: For Azure cost analysis, read `.github/skills/azure-cost-optimization/SKILL.md`
|
|
43
|
+
- **Azure Cloud Migration**: For cross-cloud migration planning, read `.github/skills/azure-cloud-migrate/SKILL.md`
|
|
35
44
|
|
|
36
45
|
## Core Philosophy
|
|
37
46
|
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
name: researcher
|
|
3
3
|
description: Expert UX and market researcher for IDEO-style human-centered design. Specializes in user interviews, competitive analysis, analytics interpretation, and insight synthesis. Use when validating assumptions, understanding users, analyzing competition, or interpreting usage data.
|
|
4
4
|
model: Claude Opus 4.6
|
|
5
|
-
infer: true
|
|
6
5
|
tools:
|
|
7
6
|
- codebase
|
|
8
7
|
- readFile
|
|
@@ -24,14 +23,18 @@ You are an expert UX and market researcher on an IDEO-style team, specializing i
|
|
|
24
23
|
|
|
25
24
|
## Work Tracking & Coordination
|
|
26
25
|
|
|
27
|
-
**Follow the workflow in `AGENTS.md`** —
|
|
26
|
+
**Follow the workflow in `AGENTS.md`** — task tracking (Backlog.md), session startup, and team coordination protocols all live there. If Beth spawned you with a task ID, that's your contract: deliver and mark it done with `backlog task edit <id> -s "Done" --plain`.
|
|
28
27
|
|
|
29
|
-
## Skills
|
|
28
|
+
## MANDATORY Skills (Non-Negotiable)
|
|
30
29
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
**BEFORE doing ANY work**, you MUST load your required skills. This is not optional.
|
|
31
|
+
Skills are also injected by the `SubagentStart` hook when you are spawned as a subagent.
|
|
32
|
+
|
|
33
|
+
**Required skills — load ALL of these before responding to any request:**
|
|
34
|
+
|
|
35
|
+
1. **Read** `.github/skills/web-search/SKILL.md` — Web research methodology, Brave Search MCP usage, fallback patterns
|
|
36
|
+
|
|
37
|
+
After reading, verify MCP availability (Brave Search) and confirm your research approach.
|
|
35
38
|
|
|
36
39
|
## Core Philosophy
|
|
37
40
|
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
name: security-reviewer
|
|
3
3
|
description: Enterprise security specialist applying Azure Well-Architected Framework and OWASP standards. Performs threat modeling, vulnerability assessment, compliance verification, and security architecture review. Use for security audits, penetration testing guidance, secure code review, or compliance validation.
|
|
4
4
|
model: GPT 5.3-codex
|
|
5
|
-
infer: true
|
|
6
5
|
tools:
|
|
7
6
|
- codebase
|
|
8
7
|
- readFile
|
|
@@ -29,14 +28,24 @@ You are an enterprise security specialist operating at the intersection of appli
|
|
|
29
28
|
|
|
30
29
|
## Work Tracking & Coordination
|
|
31
30
|
|
|
32
|
-
**Follow the workflow in `AGENTS.md`** —
|
|
31
|
+
**Follow the workflow in `AGENTS.md`** — task tracking (Backlog.md), session startup, and team coordination protocols all live there. If Beth spawned you with a task ID, that's your contract: deliver and mark it done with `backlog task edit <id> -s "Done" --plain`.
|
|
33
32
|
|
|
34
|
-
## Skills
|
|
33
|
+
## MANDATORY Skills (Non-Negotiable)
|
|
35
34
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
**BEFORE doing ANY work**, you MUST load your required skills. This is not optional.
|
|
36
|
+
Skills are also injected by the `SubagentStart` hook when you are spawned as a subagent.
|
|
37
|
+
|
|
38
|
+
**Required skills — load ALL of these before responding to any request:**
|
|
39
|
+
|
|
40
|
+
1. **Read** `.github/skills/security-analysis/SKILL.md` — OWASP Top 10:2025, Azure WAF Security (SE:01-SE:12), threat modeling framework
|
|
41
|
+
|
|
42
|
+
After reading, confirm which key patterns you will apply before proceeding with work.
|
|
43
|
+
|
|
44
|
+
### Conditional Skills (load when relevant)
|
|
45
|
+
|
|
46
|
+
- **Azure RBAC**: For role assignments and least-privilege, read `.github/skills/azure-rbac/SKILL.md`
|
|
47
|
+
- **Azure Compliance**: For compliance auditing and best practices, read `.github/skills/azure-compliance/SKILL.md`
|
|
48
|
+
- **Entra ID**: For app registration, OAuth, and MSAL, read `.github/skills/entra-app-registration/SKILL.md`
|
|
40
49
|
|
|
41
50
|
## Core Philosophy: Zero Trust
|
|
42
51
|
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
name: tester
|
|
3
3
|
description: Expert QA engineer for IDEO-style React/TypeScript/Next.js applications. Specializes in testing strategies, accessibility auditing, performance testing, and quality assurance. Use for testing features, writing test suites, validating accessibility, or performance auditing.
|
|
4
4
|
model: Claude Opus 4.6
|
|
5
|
-
infer: true
|
|
6
5
|
tools:
|
|
7
6
|
- codebase
|
|
8
7
|
- readFile
|
|
@@ -30,14 +29,23 @@ You are an expert QA engineer on an IDEO-style team, ensuring cutting-edge React
|
|
|
30
29
|
|
|
31
30
|
## Work Tracking & Coordination
|
|
32
31
|
|
|
33
|
-
**Follow the workflow in `AGENTS.md`** —
|
|
32
|
+
**Follow the workflow in `AGENTS.md`** — task tracking (Backlog.md), session startup, and team coordination protocols all live there. If Beth spawned you with a task ID, that's your contract: deliver and mark it done with `backlog task edit <id> -s "Done" --plain`.
|
|
34
33
|
|
|
35
|
-
## Skills
|
|
34
|
+
## MANDATORY Skills (Non-Negotiable)
|
|
36
35
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
**BEFORE doing ANY work**, you MUST load your required skills. This is not optional.
|
|
37
|
+
Skills are also injected by the `SubagentStart` hook when you are spawned as a subagent.
|
|
38
|
+
|
|
39
|
+
**Required skills — load ALL of these before responding to any request:**
|
|
40
|
+
|
|
41
|
+
1. **Read** `.github/skills/web-design-guidelines/SKILL.md` — Web interface compliance, accessibility audit format, design guideline rules
|
|
42
|
+
|
|
43
|
+
After reading, fetch the latest guidelines from the source URL and confirm which key rules you will apply.
|
|
44
|
+
|
|
45
|
+
### Conditional Skills (load when relevant)
|
|
46
|
+
|
|
47
|
+
- **Azure Diagnostics**: For production debugging and log analysis, read `.github/skills/azure-diagnostics/SKILL.md`
|
|
48
|
+
- **App Insights**: For telemetry and APM verification, read `.github/skills/appinsights-instrumentation/SKILL.md`
|
|
41
49
|
|
|
42
50
|
## Core Philosophy
|
|
43
51
|
|
|
@@ -462,7 +470,7 @@ When creating tests for any issue — whether spawned by Beth or self-initiated:
|
|
|
462
470
|
- `npm test` passes with 0 failures
|
|
463
471
|
- New test files are committed alongside the code
|
|
464
472
|
- Test report documents: total, passed, failed, skipped
|
|
465
|
-
- Any failures create follow-up
|
|
473
|
+
- Any failures create follow-up tasks via `backlog task create`
|
|
466
474
|
|
|
467
475
|
## Testing Best Practices
|
|
468
476
|
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
name: ux-designer
|
|
3
3
|
description: Expert UX/UI designer for IDEO-style digital experiences. Specializes in interaction design, design systems, component patterns, and accessibility for React/TypeScript/Next.js applications. Use when designing interfaces, defining patterns, creating prototypes, or establishing design systems.
|
|
4
4
|
model: Claude Opus 4.6
|
|
5
|
-
infer: true
|
|
6
5
|
tools:
|
|
7
6
|
- codebase
|
|
8
7
|
- readFile
|
|
@@ -24,17 +23,20 @@ You are an expert UX/UI designer on an IDEO-style team, creating cutting-edge us
|
|
|
24
23
|
|
|
25
24
|
## Work Tracking & Coordination
|
|
26
25
|
|
|
27
|
-
**Follow the workflow in `AGENTS.md`** —
|
|
26
|
+
**Follow the workflow in `AGENTS.md`** — task tracking (Backlog.md), session startup, and team coordination protocols all live there. If Beth spawned you with a task ID, that's your contract: deliver and mark it done with `backlog task edit <id> -s "Done" --plain`.
|
|
28
27
|
|
|
29
|
-
## Skills
|
|
28
|
+
## MANDATORY Skills (Non-Negotiable)
|
|
30
29
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
2. Reference the ControlType options when specifying component properties
|
|
30
|
+
**BEFORE doing ANY work**, you MUST load your required skills. This is not optional.
|
|
31
|
+
Skills are also injected by the `SubagentStart` hook when you are spawned as a subagent.
|
|
34
32
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
**Required skills — load ALL of these before responding to any request:**
|
|
34
|
+
|
|
35
|
+
1. **Read** `.github/skills/framer-components/SKILL.md` — Framer component patterns, ControlType options, property controls
|
|
36
|
+
2. **Read** `.github/skills/web-design-guidelines/SKILL.md` — Web interface compliance rules, accessibility, design audit format
|
|
37
|
+
3. **Read** `.github/prompts/ui-ux-pro-max/PROMPT.md` — UI UX Pro Max design intelligence: 67 styles, 161 color palettes, 57 font pairings, industry-specific design system generation
|
|
38
|
+
|
|
39
|
+
After reading, confirm which key patterns you will apply before proceeding with work.
|
|
38
40
|
|
|
39
41
|
## Core Philosophy
|
|
40
42
|
|
|
@@ -64,6 +66,7 @@ Deep knowledge loaded via skills on-demand:
|
|
|
64
66
|
|--------|--------|
|
|
65
67
|
| Framer Components & Property Controls | `.github/skills/framer-components/SKILL.md` |
|
|
66
68
|
| Web Design & Accessibility Guidelines | `.github/skills/web-design-guidelines/SKILL.md` |
|
|
69
|
+
| UI UX Pro Max Design Intelligence | `.github/prompts/ui-ux-pro-max/PROMPT.md` |
|
|
67
70
|
|
|
68
71
|
Core competencies (always available): interaction design, user flows, micro-interactions, typography systems, color theory, layout/spacing, design tokens, component library architecture, theming, WCAG 2.1 AA compliance, screen reader optimization, keyboard navigation, focus management.
|
|
69
72
|
|
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
A ruthless, hyper-competent AI orchestrator for GitHub Copilot multi-agent workflows.
|
|
4
4
|
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx beth-copilot init
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
That's it. See [docs/INSTALLATION.md](../docs/INSTALLATION.md) for detailed setup.
|
|
12
|
+
|
|
5
13
|
## Architecture Overview
|
|
6
14
|
|
|
7
15
|
```
|
|
@@ -71,7 +79,28 @@ Skills are domain-knowledge modules in `.github/skills/<name>/SKILL.md`. Agents
|
|
|
71
79
|
| Vercel React Best Practices | `skills/vercel-react-best-practices/` | React/Next.js performance work |
|
|
72
80
|
| Web Design Guidelines | `skills/web-design-guidelines/` | "review my UI", "check accessibility" |
|
|
73
81
|
| shadcn/ui Components | `skills/shadcn-ui/` | "shadcn", "ui component", component installation |
|
|
82
|
+
| UI UX Pro Max | `prompts/ui-ux-pro-max/` | "design system", "color palette", "style guide", UI/UX design work |
|
|
74
83
|
| Security Analysis | `skills/security-analysis/` | "security review", "OWASP", "threat model", "compliance" |
|
|
84
|
+
| Azure App Prep | `skills/azure-prepare/` | "create app", "deploy to Azure", "generate Bicep/Terraform" |
|
|
85
|
+
| Azure Validation | `skills/azure-validate/` | "validate my app", "check deployment readiness" |
|
|
86
|
+
| Azure Deploy | `skills/azure-deploy/` | "run azd up", "push to production", "ship it" |
|
|
87
|
+
| Azure Compute | `skills/azure-compute/` | "recommend VM size", "VM pricing", "scale set" |
|
|
88
|
+
| Azure Storage | `skills/azure-storage/` | "blob storage", "file shares", "queue storage" |
|
|
89
|
+
| Azure AI | `skills/azure-ai/` | "AI Search", "speech-to-text", "vector search" |
|
|
90
|
+
| Azure AI Gateway | `skills/azure-aigateway/` | "semantic caching", "AI model governance", "token limit" |
|
|
91
|
+
| Azure Kusto | `skills/azure-kusto/` | "KQL queries", "Data Explorer", "log analytics" |
|
|
92
|
+
| Azure Messaging | `skills/azure-messaging/` | "Event Hub", "Service Bus", "AMQP error" |
|
|
93
|
+
| Azure Copilot SDK | `skills/azure-hosted-copilot-sdk/` | "copilot SDK", "build copilot app" |
|
|
94
|
+
| App Insights | `skills/appinsights-instrumentation/` | "App Insights", "telemetry", "APM" |
|
|
95
|
+
| Microsoft Foundry | `skills/microsoft-foundry/` | "deploy agent to Foundry", "evaluate agent" |
|
|
96
|
+
| Azure RBAC | `skills/azure-rbac/` | "least privilege role", "role assignment" |
|
|
97
|
+
| Azure Compliance | `skills/azure-compliance/` | "compliance scan", "security audit", "azqr" |
|
|
98
|
+
| Entra ID | `skills/entra-app-registration/` | "app registration", "OAuth", "MSAL" |
|
|
99
|
+
| Azure Cost Optimization | `skills/azure-cost-optimization/` | "optimize Azure costs", "reduce spending" |
|
|
100
|
+
| Azure Cloud Migration | `skills/azure-cloud-migrate/` | "migrate Lambda to Azure", "cross-cloud" |
|
|
101
|
+
| Azure Diagnostics | `skills/azure-diagnostics/` | "troubleshoot container apps", "debug production" |
|
|
102
|
+
| Azure Resource Lookup | `skills/azure-resource-lookup/` | "list my VMs", "find resources" |
|
|
103
|
+
| Azure Resource Visualizer | `skills/azure-resource-visualizer/` | "architecture diagram", "visualize resources" |
|
|
75
104
|
|
|
76
105
|
## Development Conventions
|
|
77
106
|
|
|
@@ -120,8 +149,8 @@ Apply human-centered design methodology across agent workflows:
|
|
|
120
149
|
| Phase | Agent | Activities |
|
|
121
150
|
|-------|-------|------------|
|
|
122
151
|
| **Empathize** | `@researcher` | User interviews, observation, pain point discovery |
|
|
123
|
-
| **Define** | `@product-manager` | Problem framing, requirements, success
|
|
124
|
-
| **Ideate** | `@ux-designer` |
|
|
152
|
+
| **Define** | `@product-manager` | Problem framing, requirements, priorities, success metrics |
|
|
153
|
+
| **Ideate** | `@ux-designer` | Component specs, design tokens, interaction patterns |
|
|
125
154
|
| **Prototype** | `@developer` | Build to learn, rapid iteration, feature spikes |
|
|
126
155
|
| **Test** | `@tester` | Validate assumptions, accessibility audits, performance |
|
|
127
156
|
|
|
@@ -180,9 +209,9 @@ export async function deleteUser(userId: string) {
|
|
|
180
209
|
|
|
181
210
|
### New Feature Flow
|
|
182
211
|
1. `@Beth` → analyzes request, proposes workflow
|
|
183
|
-
2. `@product-manager` → defines
|
|
212
|
+
2. `@product-manager` → defines WHAT (requirements, priorities, success metrics)
|
|
184
213
|
3. `@researcher` → validates user needs (optional)
|
|
185
|
-
4. `@ux-designer` →
|
|
214
|
+
4. `@ux-designer` → specifies HOW (component specs, tokens, accessibility)
|
|
186
215
|
5. `@developer` → implements in React/TypeScript
|
|
187
216
|
6. `@security-reviewer` → audits for vulnerabilities
|
|
188
217
|
7. `@tester` → verifies quality
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Dependabot configuration for automated dependency updates
|
|
2
|
+
# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates
|
|
3
|
+
|
|
4
|
+
version: 2
|
|
5
|
+
updates:
|
|
6
|
+
# npm ecosystem - production and dev dependencies
|
|
7
|
+
- package-ecosystem: "npm"
|
|
8
|
+
directory: "/"
|
|
9
|
+
schedule:
|
|
10
|
+
interval: "weekly"
|
|
11
|
+
day: "monday"
|
|
12
|
+
time: "09:00"
|
|
13
|
+
timezone: "America/New_York"
|
|
14
|
+
# Group minor/patch updates to reduce PR noise
|
|
15
|
+
groups:
|
|
16
|
+
production-dependencies:
|
|
17
|
+
patterns:
|
|
18
|
+
- "*"
|
|
19
|
+
exclude-patterns:
|
|
20
|
+
- "@types/*"
|
|
21
|
+
- "eslint*"
|
|
22
|
+
- "prettier*"
|
|
23
|
+
- "typescript"
|
|
24
|
+
- "vitest"
|
|
25
|
+
- "@vitest/*"
|
|
26
|
+
update-types:
|
|
27
|
+
- "minor"
|
|
28
|
+
- "patch"
|
|
29
|
+
dev-dependencies:
|
|
30
|
+
patterns:
|
|
31
|
+
- "@types/*"
|
|
32
|
+
- "eslint*"
|
|
33
|
+
- "prettier*"
|
|
34
|
+
- "typescript"
|
|
35
|
+
- "vitest"
|
|
36
|
+
- "@vitest/*"
|
|
37
|
+
update-types:
|
|
38
|
+
- "minor"
|
|
39
|
+
- "patch"
|
|
40
|
+
# Limit open PRs to avoid overwhelming maintainers
|
|
41
|
+
open-pull-requests-limit: 10
|
|
42
|
+
# Labels for easy filtering
|
|
43
|
+
labels:
|
|
44
|
+
- "dependencies"
|
|
45
|
+
- "automated"
|
|
46
|
+
# Commit message format
|
|
47
|
+
commit-message:
|
|
48
|
+
prefix: "deps"
|
|
49
|
+
include: "scope"
|
|
50
|
+
# Reviewers for dependency PRs
|
|
51
|
+
# reviewers:
|
|
52
|
+
# - "username"
|
|
53
|
+
|
|
54
|
+
# GitHub Actions
|
|
55
|
+
- package-ecosystem: "github-actions"
|
|
56
|
+
directory: "/"
|
|
57
|
+
schedule:
|
|
58
|
+
interval: "weekly"
|
|
59
|
+
day: "monday"
|
|
60
|
+
time: "09:00"
|
|
61
|
+
timezone: "America/New_York"
|
|
62
|
+
labels:
|
|
63
|
+
- "dependencies"
|
|
64
|
+
- "github-actions"
|
|
65
|
+
- "automated"
|
|
66
|
+
commit-message:
|
|
67
|
+
prefix: "ci"
|
|
68
|
+
open-pull-requests-limit: 5
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Skill Enforcement Hook — SubagentStart
|
|
5
|
+
*
|
|
6
|
+
* Deterministic skill injection for subagents. When Beth (or any orchestrator)
|
|
7
|
+
* spawns a subagent, this hook maps agent_type → required skills and injects
|
|
8
|
+
* them as additionalContext. The LLM doesn't decide whether to load skills —
|
|
9
|
+
* this script does.
|
|
10
|
+
*
|
|
11
|
+
* Hook event: SubagentStart
|
|
12
|
+
* Input: JSON via stdin with agent_type field
|
|
13
|
+
* Output: JSON to stdout with hookSpecificOutput.additionalContext
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { readFileSync } from 'node:fs';
|
|
17
|
+
import { join } from 'node:path';
|
|
18
|
+
|
|
19
|
+
// ─── Agent → Required Skills mapping ───────────────────────────────────────
|
|
20
|
+
// This is the single source of truth for which skills each agent MUST use.
|
|
21
|
+
// Update this map when adding new agents or skills.
|
|
22
|
+
const AGENT_SKILLS = {
|
|
23
|
+
'ux-designer': {
|
|
24
|
+
inject: ['.github/skills/web-design-guidelines/SKILL.md'],
|
|
25
|
+
readFile: [
|
|
26
|
+
'.github/skills/framer-components/SKILL.md',
|
|
27
|
+
'.github/prompts/ui-ux-pro-max/PROMPT.md',
|
|
28
|
+
],
|
|
29
|
+
},
|
|
30
|
+
'developer': {
|
|
31
|
+
inject: ['.github/skills/vercel-react-best-practices/SKILL.md'],
|
|
32
|
+
readFile: [
|
|
33
|
+
'.github/skills/shadcn-ui/SKILL.md',
|
|
34
|
+
'.github/skills/vercel-react-best-practices/AGENTS.md',
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
'product-manager': {
|
|
38
|
+
inject: [],
|
|
39
|
+
readFile: ['.github/skills/prd/SKILL.md'],
|
|
40
|
+
},
|
|
41
|
+
'security-reviewer': {
|
|
42
|
+
inject: [],
|
|
43
|
+
readFile: ['.github/skills/security-analysis/SKILL.md'],
|
|
44
|
+
},
|
|
45
|
+
'tester': {
|
|
46
|
+
inject: ['.github/skills/web-design-guidelines/SKILL.md'],
|
|
47
|
+
readFile: [],
|
|
48
|
+
},
|
|
49
|
+
'researcher': {
|
|
50
|
+
inject: ['.github/skills/web-search/SKILL.md'],
|
|
51
|
+
readFile: [],
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
// ─── Read stdin ────────────────────────────────────────────────────────────
|
|
56
|
+
let input = '';
|
|
57
|
+
for await (const chunk of process.stdin) {
|
|
58
|
+
input += chunk;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
let data;
|
|
62
|
+
try {
|
|
63
|
+
data = JSON.parse(input);
|
|
64
|
+
} catch {
|
|
65
|
+
// If we can't parse input, exit cleanly — don't block the subagent
|
|
66
|
+
process.stdout.write(JSON.stringify({ continue: true }));
|
|
67
|
+
process.exit(0);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const agentType = data.agent_type;
|
|
71
|
+
const cwd = data.cwd || process.cwd();
|
|
72
|
+
|
|
73
|
+
// ─── Look up skills for this agent ─────────────────────────────────────────
|
|
74
|
+
const config = AGENT_SKILLS[agentType];
|
|
75
|
+
|
|
76
|
+
if (!config) {
|
|
77
|
+
// Unknown agent type — no skill enforcement needed
|
|
78
|
+
process.stdout.write(JSON.stringify({ continue: true }));
|
|
79
|
+
process.exit(0);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// ─── Build the injection context ───────────────────────────────────────────
|
|
83
|
+
const sections = [];
|
|
84
|
+
|
|
85
|
+
sections.push('## ⚡ SKILL ENFORCEMENT — INJECTED BY HOOK (NON-NEGOTIABLE)');
|
|
86
|
+
sections.push('');
|
|
87
|
+
sections.push(`You are \`${agentType}\`. The following skills are MANDATORY for your work.`);
|
|
88
|
+
sections.push('This context was injected by the skill-enforcement hook — not by your own instructions.');
|
|
89
|
+
sections.push('You MUST apply these rules. Ignoring them is a compliance violation.');
|
|
90
|
+
sections.push('');
|
|
91
|
+
|
|
92
|
+
// Inject small skill files directly into context
|
|
93
|
+
if (config.inject.length > 0) {
|
|
94
|
+
sections.push('### Skills loaded into context (apply immediately):');
|
|
95
|
+
sections.push('');
|
|
96
|
+
|
|
97
|
+
for (const skillPath of config.inject) {
|
|
98
|
+
try {
|
|
99
|
+
const fullPath = join(cwd, skillPath);
|
|
100
|
+
const content = readFileSync(fullPath, 'utf8');
|
|
101
|
+
sections.push(`#### ${skillPath}`);
|
|
102
|
+
sections.push('');
|
|
103
|
+
sections.push(content);
|
|
104
|
+
sections.push('');
|
|
105
|
+
} catch (err) {
|
|
106
|
+
sections.push(`> ⚠️ WARNING: Could not load ${skillPath}: ${err.message}`);
|
|
107
|
+
sections.push(`> You MUST use readFile to load this skill manually.`);
|
|
108
|
+
sections.push('');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// For larger skill files, mandate readFile as first action
|
|
114
|
+
if (config.readFile.length > 0) {
|
|
115
|
+
sections.push('### Skills to load via readFile (MANDATORY FIRST STEP):');
|
|
116
|
+
sections.push('');
|
|
117
|
+
sections.push('Before doing ANY work, you MUST read these files using the readFile tool:');
|
|
118
|
+
sections.push('');
|
|
119
|
+
for (const skillPath of config.readFile) {
|
|
120
|
+
sections.push(`- \`${skillPath}\``);
|
|
121
|
+
}
|
|
122
|
+
sections.push('');
|
|
123
|
+
sections.push('Do NOT proceed with any task until you have read ALL of the above files.');
|
|
124
|
+
sections.push('After reading, briefly confirm which key patterns you will apply.');
|
|
125
|
+
sections.push('');
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const additionalContext = sections.join('\n');
|
|
129
|
+
|
|
130
|
+
// ─── Output ────────────────────────────────────────────────────────────────
|
|
131
|
+
const output = {
|
|
132
|
+
continue: true,
|
|
133
|
+
hookSpecificOutput: {
|
|
134
|
+
hookEventName: 'SubagentStart',
|
|
135
|
+
additionalContext,
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
process.stdout.write(JSON.stringify(output));
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Skill Verification Hook — SubagentStop / Agent Stop
|
|
5
|
+
*
|
|
6
|
+
* Fires when a subagent completes (or an agent stops). On the FIRST stop
|
|
7
|
+
* attempt, blocks and asks the agent to confirm it applied its required skills.
|
|
8
|
+
* On the second attempt (stop_hook_active=true), lets it through.
|
|
9
|
+
*
|
|
10
|
+
* This is a lightweight enforcement gate — not a deep analysis of output.
|
|
11
|
+
* The real skill content was already injected by inject-skills.mjs at
|
|
12
|
+
* SubagentStart. This hook just forces a final compliance check.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
let input = '';
|
|
16
|
+
for await (const chunk of process.stdin) {
|
|
17
|
+
input += chunk;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
let data;
|
|
21
|
+
try {
|
|
22
|
+
data = JSON.parse(input);
|
|
23
|
+
} catch {
|
|
24
|
+
process.stdout.write(JSON.stringify({ continue: true }));
|
|
25
|
+
process.exit(0);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// If this is a retry (stop_hook_active), let the agent complete
|
|
29
|
+
if (data.stop_hook_active) {
|
|
30
|
+
process.stdout.write(JSON.stringify({ continue: true }));
|
|
31
|
+
process.exit(0);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// First stop attempt — block and request skill verification
|
|
35
|
+
const output = {
|
|
36
|
+
hookSpecificOutput: {
|
|
37
|
+
hookEventName: 'Stop',
|
|
38
|
+
decision: 'block',
|
|
39
|
+
reason:
|
|
40
|
+
'Before finishing: Confirm you loaded and applied your MANDATORY skills. ' +
|
|
41
|
+
'If you were injected skill context by the enforcement hook, state which ' +
|
|
42
|
+
'key rules you applied. If you did NOT read your required skill files, ' +
|
|
43
|
+
'read them now and verify your work complies.',
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
process.stdout.write(JSON.stringify(output));
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"hooks": {
|
|
3
|
+
"SubagentStart": [
|
|
4
|
+
{
|
|
5
|
+
"type": "command",
|
|
6
|
+
"command": "node .github/hooks/scripts/inject-skills.mjs",
|
|
7
|
+
"timeout": 15
|
|
8
|
+
}
|
|
9
|
+
],
|
|
10
|
+
"SubagentStop": [
|
|
11
|
+
{
|
|
12
|
+
"type": "command",
|
|
13
|
+
"command": "node .github/hooks/scripts/verify-skills.mjs",
|
|
14
|
+
"timeout": 10
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
## Summary
|
|
2
|
+
|
|
3
|
+
<!-- Brief description of what this PR does -->
|
|
4
|
+
|
|
5
|
+
## Changes
|
|
6
|
+
|
|
7
|
+
<!-- List the specific changes made -->
|
|
8
|
+
-
|
|
9
|
+
-
|
|
10
|
+
-
|
|
11
|
+
|
|
12
|
+
## Testing
|
|
13
|
+
|
|
14
|
+
<!-- How you tested these changes -->
|
|
15
|
+
|
|
16
|
+
- [ ] All existing tests pass (`npm test`)
|
|
17
|
+
- [ ] Added new tests for new functionality
|
|
18
|
+
- [ ] Manually verified changes work as expected
|
|
19
|
+
|
|
20
|
+
## Security Considerations
|
|
21
|
+
|
|
22
|
+
<!-- Any security implications or mitigations -->
|
|
23
|
+
|
|
24
|
+
- [ ] No new security risks introduced
|
|
25
|
+
- [ ] Security scans pass (`npm audit`, gitleaks)
|
|
26
|
+
- [ ] Follows security guidelines in [SECURITY.md](../SECURITY.md)
|
|
27
|
+
|
|
28
|
+
## Documentation
|
|
29
|
+
|
|
30
|
+
- [ ] Updated relevant docs
|
|
31
|
+
- [ ] Added/updated code comments
|
|
32
|
+
- [ ] Updated [CHANGELOG.md](../CHANGELOG.md)
|
|
33
|
+
|
|
34
|
+
## Checklist
|
|
35
|
+
|
|
36
|
+
- [ ] Branch follows naming convention (see [CONTRIBUTING.md](../CONTRIBUTING.md))
|
|
37
|
+
- [ ] Tests pass
|
|
38
|
+
- [ ] Security scans pass
|
|
39
|
+
- [ ] Documentation updated
|
|
40
|
+
- [ ] Commit messages are descriptive
|
|
41
|
+
- [ ] Changes are minimal and focused
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
<!--
|
|
46
|
+
For more details, see CONTRIBUTING.md
|
|
47
|
+
Questions? Open a discussion or ask in the PR comments.
|
|
48
|
+
-->
|
|
File without changes
|
|
File without changes
|