vstack 0.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. vstack/__init__.py +5 -0
  2. vstack/__main__.py +5 -0
  3. vstack/_templates/agents/_partials/agent-skill-boundary.md +5 -0
  4. vstack/_templates/agents/architect/config.yaml +38 -0
  5. vstack/_templates/agents/architect/template.md +84 -0
  6. vstack/_templates/agents/designer/config.yaml +36 -0
  7. vstack/_templates/agents/designer/template.md +99 -0
  8. vstack/_templates/agents/engineer/config.yaml +36 -0
  9. vstack/_templates/agents/engineer/template.md +88 -0
  10. vstack/_templates/agents/product/config.yaml +37 -0
  11. vstack/_templates/agents/product/template.md +87 -0
  12. vstack/_templates/agents/release/config.yaml +35 -0
  13. vstack/_templates/agents/release/template.md +86 -0
  14. vstack/_templates/agents/tester/config.yaml +41 -0
  15. vstack/_templates/agents/tester/template.md +90 -0
  16. vstack/_templates/instructions/git/config.yaml +4 -0
  17. vstack/_templates/instructions/git/template.md +36 -0
  18. vstack/_templates/instructions/python/config.yaml +4 -0
  19. vstack/_templates/instructions/python/template.md +37 -0
  20. vstack/_templates/prompts/code-review/config.yaml +10 -0
  21. vstack/_templates/prompts/code-review/template.md +39 -0
  22. vstack/_templates/skills/_partials/base-branch.md +8 -0
  23. vstack/_templates/skills/_partials/observability-checklist.md +36 -0
  24. vstack/_templates/skills/_partials/run-tests.md +22 -0
  25. vstack/_templates/skills/_partials/skill-context.md +21 -0
  26. vstack/_templates/skills/adr/config.yaml +17 -0
  27. vstack/_templates/skills/adr/template.md +167 -0
  28. vstack/_templates/skills/analyse/config.yaml +16 -0
  29. vstack/_templates/skills/analyse/template.md +188 -0
  30. vstack/_templates/skills/architecture/config.yaml +18 -0
  31. vstack/_templates/skills/architecture/template.md +213 -0
  32. vstack/_templates/skills/cicd/config.yaml +16 -0
  33. vstack/_templates/skills/cicd/template.md +169 -0
  34. vstack/_templates/skills/code-review/config.yaml +16 -0
  35. vstack/_templates/skills/code-review/template.md +180 -0
  36. vstack/_templates/skills/concise/config.yaml +16 -0
  37. vstack/_templates/skills/concise/template.md +128 -0
  38. vstack/_templates/skills/consult/config.yaml +18 -0
  39. vstack/_templates/skills/consult/template.md +195 -0
  40. vstack/_templates/skills/container/config.yaml +17 -0
  41. vstack/_templates/skills/container/template.md +122 -0
  42. vstack/_templates/skills/debug/config.yaml +16 -0
  43. vstack/_templates/skills/debug/template.md +247 -0
  44. vstack/_templates/skills/dependency/config.yaml +18 -0
  45. vstack/_templates/skills/dependency/template.md +293 -0
  46. vstack/_templates/skills/design/config.yaml +16 -0
  47. vstack/_templates/skills/design/template.md +231 -0
  48. vstack/_templates/skills/docs/config.yaml +17 -0
  49. vstack/_templates/skills/docs/template.md +128 -0
  50. vstack/_templates/skills/explore/config.yaml +17 -0
  51. vstack/_templates/skills/explore/template.md +188 -0
  52. vstack/_templates/skills/guardrails/config.yaml +16 -0
  53. vstack/_templates/skills/guardrails/template.md +45 -0
  54. vstack/_templates/skills/incident/config.yaml +17 -0
  55. vstack/_templates/skills/incident/template.md +293 -0
  56. vstack/_templates/skills/inspect/config.yaml +16 -0
  57. vstack/_templates/skills/inspect/template.md +105 -0
  58. vstack/_templates/skills/migrate/config.yaml +17 -0
  59. vstack/_templates/skills/migrate/template.md +298 -0
  60. vstack/_templates/skills/onboard/config.yaml +18 -0
  61. vstack/_templates/skills/onboard/template.md +289 -0
  62. vstack/_templates/skills/openapi/config.yaml +17 -0
  63. vstack/_templates/skills/openapi/template.md +382 -0
  64. vstack/_templates/skills/performance/config.yaml +15 -0
  65. vstack/_templates/skills/performance/template.md +198 -0
  66. vstack/_templates/skills/pr/config.yaml +15 -0
  67. vstack/_templates/skills/pr/template.md +108 -0
  68. vstack/_templates/skills/refactor/config.yaml +18 -0
  69. vstack/_templates/skills/refactor/template.md +283 -0
  70. vstack/_templates/skills/release-notes/config.yaml +16 -0
  71. vstack/_templates/skills/release-notes/template.md +127 -0
  72. vstack/_templates/skills/requirements/config.yaml +17 -0
  73. vstack/_templates/skills/requirements/template.md +187 -0
  74. vstack/_templates/skills/security/config.yaml +17 -0
  75. vstack/_templates/skills/security/template.md +256 -0
  76. vstack/_templates/skills/verify/config.yaml +17 -0
  77. vstack/_templates/skills/verify/template.md +201 -0
  78. vstack/_templates/skills/vision/config.yaml +19 -0
  79. vstack/_templates/skills/vision/template.md +169 -0
  80. vstack/agents/__init__.py +5 -0
  81. vstack/agents/config.py +67 -0
  82. vstack/agents/constants.py +14 -0
  83. vstack/agents/generator.py +20 -0
  84. vstack/artifacts/__init__.py +17 -0
  85. vstack/artifacts/config.py +111 -0
  86. vstack/artifacts/constants.py +6 -0
  87. vstack/artifacts/generator.py +406 -0
  88. vstack/artifacts/models.py +55 -0
  89. vstack/artifacts/protocol.py +50 -0
  90. vstack/cli/__init__.py +3 -0
  91. vstack/cli/commands.py +596 -0
  92. vstack/cli/constants.py +33 -0
  93. vstack/cli/manifest.py +166 -0
  94. vstack/cli/parser.py +156 -0
  95. vstack/constants.py +84 -0
  96. vstack/frontmatter/__init__.py +8 -0
  97. vstack/frontmatter/parser.py +272 -0
  98. vstack/frontmatter/schema.py +142 -0
  99. vstack/frontmatter/serializer.py +208 -0
  100. vstack/instructions/__init__.py +5 -0
  101. vstack/instructions/config.py +21 -0
  102. vstack/instructions/constants.py +9 -0
  103. vstack/instructions/generator.py +13 -0
  104. vstack/main.py +71 -0
  105. vstack/models.py +35 -0
  106. vstack/prompts/__init__.py +5 -0
  107. vstack/prompts/config.py +21 -0
  108. vstack/prompts/constants.py +9 -0
  109. vstack/prompts/generator.py +13 -0
  110. vstack/skills/__init__.py +5 -0
  111. vstack/skills/config.py +58 -0
  112. vstack/skills/constants.py +17 -0
  113. vstack/skills/generator.py +20 -0
  114. vstack/skills/models.py +15 -0
  115. vstack-0.0.0.dist-info/METADATA +725 -0
  116. vstack-0.0.0.dist-info/RECORD +119 -0
  117. vstack-0.0.0.dist-info/WHEEL +4 -0
  118. vstack-0.0.0.dist-info/entry_points.txt +3 -0
  119. vstack-0.0.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,247 @@
1
+ {{SKILL_CONTEXT}}
2
+
3
+ # debug — Systematic Root-Cause Investigation
4
+
5
+ Investigate and fix bugs using the scientific method. No patches without understanding
6
+ the root cause first.
7
+
8
+ ## Out of scope
9
+
10
+ - Full code review (use `code-review`)
11
+ - Performance benchmarking (use `performance`)
12
+ - Architecture design (use `architecture`)
13
+ - Security audit (use `security`)
14
+
15
+ **Golden rule: No fixes without root cause. A patch without understanding creates two bugs.**
16
+
17
+ Follow the scientific method:
18
+
19
+ 1. **Observe** — Gather all available evidence
20
+ 1. **Hypothesize** — Form ranked hypotheses
21
+ 1. **Test** — Write a reproducer, then eliminate hypotheses
22
+ 1. **Conclude** — Identify root cause with evidence
23
+ 1. **Fix** — Minimal change that addresses root cause
24
+ 1. **Prevent** — Add a test that would have caught this
25
+
26
+ ______________________________________________________________________
27
+
28
+ ## Step 0: Understand the Problem
29
+
30
+ Before touching any code, gather complete context:
31
+
32
+ **What exactly is failing?**
33
+
34
+ > **Question:** Describe the problem completely.
35
+ >
36
+ > - What is the expected behavior?
37
+ > - What is the actual behavior?
38
+ > - When did it start failing? (sudden vs gradual)
39
+ > - What was the last change before it started failing?
40
+ > - Is it reproducible? Always, or intermittent?
41
+ > **Options:** A) Answer inline | B) I'll share logs/errors in the next message
42
+
43
+ **Gather evidence:**
44
+
45
+ ```bash
46
+ # Recent git history
47
+ git log --oneline -20
48
+
49
+ # Recent changes to the relevant area
50
+ git log --oneline --follow -- path/to/suspect/file 2>/dev/null | head -10
51
+
52
+ # Check for stashed work
53
+ git stash list
54
+
55
+ # Check for recent dependency changes
56
+ git diff HEAD~10 -- package.json package-lock.json go.mod go.sum pyproject.toml 2>/dev/null | head -40
57
+ ```
58
+
59
+ ______________________________________________________________________
60
+
61
+ ## Step 1: Reproduce
62
+
63
+ **First, reproduce the bug reliably before attempting any fix.**
64
+
65
+ ```bash
66
+ # Attempt to reproduce with minimal case
67
+ # Run the specific failing test or command
68
+ ```
69
+
70
+ If intermittent:
71
+
72
+ - Run N times: `for i in $(seq 1 10); do [command]; done`
73
+ - Check for: time-dependent behavior, race conditions, external dependency flakiness
74
+
75
+ Document the reproducer:
76
+
77
+ ```text
78
+ Reproducer:
79
+ Command: [exact command to run]
80
+ Expected: [what should happen]
81
+ Actual: [what actually happens]
82
+ Frequency: [always / N% of the time]
83
+ Environment: [local / CI / staging / prod]
84
+ ```
85
+
86
+ ______________________________________________________________________
87
+
88
+ ## Step 2: Gather Evidence
89
+
90
+ **Read all available logs and error output:**
91
+
92
+ ```bash
93
+ # Application logs (recent)
94
+ # Adjust for your platform:
95
+ journalctl -u service-name --since "1 hour ago" 2>/dev/null | tail -100 || true
96
+ docker logs container-name 2>/dev/null | tail -100 || true
97
+ kubectl logs deployment/service-name --tail=100 2>/dev/null || true
98
+ cat /var/log/app.log 2>/dev/null | tail -100 || true
99
+
100
+ # Check for correlated errors at the same timestamp
101
+ # Check for system-level issues (disk full, OOM, network)
102
+ ```
103
+
104
+ **Read the failing code:**
105
+
106
+ ```bash
107
+ # Read the relevant source files
108
+ # Read the test that's failing (if applicable)
109
+ # Read recent changes: git show HEAD
110
+ git diff HEAD~3 -- relevant-files
111
+ ```
112
+
113
+ ______________________________________________________________________
114
+
115
+ ## Step 3: Form Hypotheses
116
+
117
+ Based on evidence, list hypotheses in order of likelihood:
118
+
119
+ ```text
120
+ Hypotheses (most likely first):
121
+ 1. [Hypothesis] — Evidence for: [X] — Evidence against: [Y]
122
+ 2. [Hypothesis] — Evidence for: [X] — Evidence against: [Y]
123
+ 3. [Hypothesis] — Evidence for: [X] — Evidence against: [Y]
124
+ ```
125
+
126
+ **Common backend bug categories to consider:**
127
+
128
+ - **Race condition / concurrency:** Multiple goroutines/threads/processes modifying shared state
129
+ - **Nil/null dereference:** Unhandled nil case in a code path
130
+ - **Off-by-one:** Boundary condition in loop, pagination, or slice
131
+ - **Type coercion:** Implicit type conversion causing unexpected behavior
132
+ - **State mutation:** Object modified unexpectedly (shared reference, closure)
133
+ - **Async/await:** Missing await, unhandled promise rejection
134
+ - **Database:** N+1 query, missing index, transaction isolation, stale connection
135
+ - **Network:** Timeout, connection pool exhaustion, DNS resolution failure
136
+ - **Configuration:** Wrong env var, missing config key, schema mismatch after migration
137
+ - **Dependency version:** Introduced by a dependency upgrade (check lockfile changes)
138
+ - **Memory:** Leak, fragmentation, GC pressure
139
+ - **Timing:** TTL expiry, clock skew, eventual consistency window
140
+
141
+ ______________________________________________________________________
142
+
143
+ ## Step 4: Test Each Hypothesis
144
+
145
+ For each hypothesis in rank order:
146
+
147
+ 1. Design a test that would prove or disprove it
148
+ 1. Run the test
149
+ 1. Update the hypothesis ranking based on results
150
+
151
+ ```bash
152
+ # Example: test for race condition
153
+ go test -race ./... 2>/dev/null || true
154
+
155
+ # Example: test for nil path
156
+ # Add temporary logging at the suspected nil path
157
+
158
+ # Example: test for database issue
159
+ # Examine query plans, check for missing indexes
160
+ ```
161
+
162
+ Eliminate hypotheses one by one until only one remains.
163
+
164
+ ______________________________________________________________________
165
+
166
+ ## Step 5: Root Cause Identification
167
+
168
+ State the root cause with precision:
169
+
170
+ ```text
171
+ Root Cause:
172
+ Location: path/to/file.ts:line
173
+ Mechanism: [exact description of what is happening]
174
+ Trigger: [exact conditions that trigger the bug]
175
+ Timeline: [when was this introduced? git log shows...]
176
+ Scope: [Which environments? Which users? How often?]
177
+ ```
178
+
179
+ ______________________________________________________________________
180
+
181
+ ## Step 6: Fix
182
+
183
+ Design the minimal fix:
184
+
185
+ 1. Identify the smallest change that correctly fixes the root cause
186
+ 1. Consider side effects
187
+ 1. Consider whether the fix introduces new edge cases
188
+ 1. Implement
189
+
190
+ ```bash
191
+ # Apply the fix
192
+ # Run the reproducer to confirm it's fixed
193
+ ```
194
+
195
+ ______________________________________________________________________
196
+
197
+ ## Step 7: Regression Test
198
+
199
+ Add a test that would have caught this bug:
200
+
201
+ ```bash
202
+ # Write the test
203
+ # Run it on the broken state to confirm it catches the bug
204
+ git stash # temporarily revert fix
205
+ [run test] # should fail
206
+ git stash pop # restore fix
207
+ [run test] # should pass
208
+ ```
209
+
210
+ Commit test + fix atomically:
211
+
212
+ ```bash
213
+ git add -A
214
+ git commit -m "fix: [description of what was wrong]
215
+
216
+ Root cause: [one sentence]
217
+ Reproducer: [if non-obvious]
218
+ Test: [test file added/updated]"
219
+ ```
220
+
221
+ ______________________________________________________________________
222
+
223
+ ## Step 8: Prevent Recurrence
224
+
225
+ Consider:
226
+
227
+ 1. Is this a systemic pattern that could occur elsewhere?
228
+ 1. Should there be a linting rule or code review checklist item?
229
+ 1. Should a runbook be updated?
230
+ 1. Should an alert be added to catch this class of failure in production?
231
+ 1. Should TODOS.md be updated with related improvements?
232
+
233
+ ______________________________________________________________________
234
+
235
+ ## Debug Summary
236
+
237
+ ```text
238
+ ## Debug Report — [bug description] — [date]
239
+
240
+ Reproducer: [command or steps]
241
+ Root cause: [one paragraph explanation]
242
+ Fix: [change made in commit SHA]
243
+ Regression test: [test file:function]
244
+ Prevention: [any follow-up items]
245
+ ```
246
+
247
+ ______________________________________________________________________
@@ -0,0 +1,18 @@
1
+ name: dependency
2
+ version: 1.0.1
3
+ description: |
4
+ Dependency health audit. Covers vulnerability scanning, outdated packages,
5
+ licence compliance, transitive risk, pinning policy, and supply chain hygiene.
6
+ Goes beyond the vulnerability gate in `security` — covers upgrade strategy,
7
+ licence obligations, and long-term dependency health. Use when asked to
8
+ "audit dependencies", "check for outdated packages", "licence compliance",
9
+ "pin versions", or "dependency health check".
10
+ argument-hint: '[project or package manifest to audit]'
11
+
12
+ license: MIT
13
+ compatibility: Requires a skills-compatible agent with repository file access and terminal command execution when needed.
14
+ metadata:
15
+ owner: vstack
16
+ maturity: stable
17
+ user-invocable: true
18
+ disable-model-invocation: false
@@ -0,0 +1,293 @@
1
+ {{SKILL_CONTEXT}}
2
+
3
+ # dependency — Dependency Health Audit
4
+
5
+ Audit the health, security, and compliance of project dependencies. Covers
6
+ vulnerability scanning, outdated packages, licence obligations, transitive
7
+ risk, pinning policy, and supply chain hygiene.
8
+
9
+ ## Scope vs related skills
10
+
11
+ - **This skill** — full dependency health: vulnerabilities, freshness, licences,
12
+ pinning policy, supply chain
13
+ - **`security`** — includes a lightweight vulnerability gate as part of OWASP A06;
14
+ for a full dependency audit use this skill instead
15
+ - **`verify`** — includes a quick vuln check in the quality gate loop; escalates
16
+ to this skill for deeper investigation
17
+
18
+ **Golden rule: A dependency is owned code you didn't write. Treat it with the
19
+ same scrutiny as your own code.**
20
+
21
+ ______________________________________________________________________
22
+
23
+ ## Step 0: Detect the Stack
24
+
25
+ ```bash
26
+ # Identify package manifests
27
+ ls pyproject.toml poetry.lock requirements*.txt \
28
+ package.json package-lock.json yarn.lock pnpm-lock.yaml \
29
+ go.mod go.sum Cargo.toml Cargo.lock \
30
+ pom.xml build.gradle Gemfile Gemfile.lock 2>/dev/null
31
+
32
+ # Detect Python version and package manager
33
+ cat pyproject.toml 2>/dev/null | grep -E 'requires-python|tool\.poetry' | head -5
34
+ cat .python-version 2>/dev/null
35
+ which poetry && poetry --version 2>/dev/null || true
36
+ which pip-audit && pip-audit --version 2>/dev/null || true
37
+ ```
38
+
39
+ Document:
40
+
41
+ ```text
42
+ Stack: [Python | Node | Go | Rust | Java | other]
43
+ Manager: [Poetry | pip | npm | yarn | pnpm | cargo | go modules | other]
44
+ Manifests: [list of files found]
45
+ Lock file: [present | absent — flag if absent]
46
+ ```
47
+
48
+ ______________________________________________________________________
49
+
50
+ ## Part 1: Vulnerability Scan
51
+
52
+ Run the appropriate scanner for each detected stack:
53
+
54
+ ```bash
55
+ # Python — pip-audit (preferred) or safety
56
+ if [ -f pyproject.toml ] || [ -f requirements.txt ]; then
57
+ pip-audit 2>/dev/null \
58
+ || safety check --full-report 2>/dev/null \
59
+ || echo "No Python vuln scanner found — install pip-audit: pip install pip-audit"
60
+ fi
61
+
62
+ # Node
63
+ [ -f package.json ] && npm audit --json 2>/dev/null | head -100
64
+
65
+ # Go
66
+ if [ -f go.mod ]; then
67
+ govulncheck ./... 2>/dev/null \
68
+ || echo "govulncheck not found — install: go install golang.org/x/vuln/cmd/govulncheck@latest"
69
+ fi
70
+
71
+ # Rust
72
+ if [ -f Cargo.toml ]; then
73
+ cargo audit 2>/dev/null \
74
+ || echo "cargo-audit not found — install: cargo install cargo-audit"
75
+ fi
76
+
77
+ # Java (Maven)
78
+ [ -f pom.xml ] && mvn dependency-check:check -q 2>/dev/null || true
79
+ ```
80
+
81
+ Triage findings by severity:
82
+
83
+ ```text
84
+ Vulnerabilities found:
85
+ 🔴 CRITICAL / HIGH: [package] [version] — [CVE] — [description]
86
+ 🟡 MEDIUM: [package] [version] — [CVE] — [description]
87
+ 🟢 LOW / INFO: [count] low-severity findings
88
+ ```
89
+
90
+ **Remediation rule:** CRITICAL and HIGH must be resolved before release. MEDIUM
91
+ should be tracked and resolved within the sprint. LOW may be deferred with
92
+ documented rationale.
93
+
94
+ ______________________________________________________________________
95
+
96
+ ## Part 2: Outdated Packages
97
+
98
+ ```bash
99
+ # Python (Poetry)
100
+ poetry show --outdated 2>/dev/null | head -40
101
+
102
+ # Python (pip)
103
+ pip list --outdated 2>/dev/null | head -40
104
+
105
+ # Node
106
+ npm outdated 2>/dev/null | head -40
107
+
108
+ # Go — check go.sum and go.mod for pinned versions
109
+ go list -m -u all 2>/dev/null | grep '\[' | head -30
110
+
111
+ # Rust
112
+ cargo outdated 2>/dev/null | head -30
113
+ ```
114
+
115
+ Classify each outdated package:
116
+
117
+ | Package | Current | Latest | Type | Action |
118
+ | ------- | ------- | ------ | ----- | ------------------------- |
119
+ | `foo` | 1.2.0 | 1.2.5 | patch | update now |
120
+ | `bar` | 2.1.0 | 3.0.0 | major | evaluate breaking changes |
121
+ | `baz` | 0.9.0 | 0.9.8 | patch | update now |
122
+
123
+ **Update priority:**
124
+
125
+ - Patch updates: update immediately (no breaking changes expected)
126
+ - Minor updates: update soon (check changelog for deprecations)
127
+ - Major updates: plan upgrade (read migration guide, test thoroughly)
128
+
129
+ ______________________________________________________________________
130
+
131
+ ## Part 3: Licence Compliance
132
+
133
+ Check licence obligations for all direct and transitive dependencies:
134
+
135
+ ```bash
136
+ # Python
137
+ if pip-licenses --version >/dev/null 2>&1; then
138
+ pip-licenses --format=markdown --with-urls 2>/dev/null | head -60
139
+ elif python3 -m pip_licenses --help >/dev/null 2>&1; then
140
+ python3 -m pip_licenses 2>/dev/null | head -60
141
+ else
142
+ echo "Install pip-licenses: pip install pip-licenses"
143
+ fi
144
+
145
+ # Node
146
+ npx license-checker --summary 2>/dev/null | head -40
147
+
148
+ # Go
149
+ if go-licenses --help >/dev/null 2>&1; then
150
+ go-licenses report ./... 2>/dev/null | head -40
151
+ else
152
+ echo "Install go-licenses: go install github.com/google/go-licenses@latest"
153
+ fi
154
+ ```
155
+
156
+ Classify licences by risk:
157
+
158
+ | Risk | Licences | Requirement |
159
+ | ------ | ---------------------------------- | -------------------------------------------------- |
160
+ | Low | MIT, BSD-2, BSD-3, Apache-2.0, ISC | Can use freely, attribution in docs |
161
+ | Medium | LGPL-2.1, LGPL-3.0 | Dynamic linking OK; static linking requires review |
162
+ | High | GPL-2.0, GPL-3.0, AGPL-3.0 | May require open-sourcing your code |
163
+ | Review | Commercial, proprietary, unknown | Requires legal review before use |
164
+
165
+ Flag any High or Review licences:
166
+
167
+ ```text
168
+ Licence issues:
169
+ 🔴 [package] — [licence] — [risk] — [recommendation]
170
+ ```
171
+
172
+ ______________________________________________________________________
173
+
174
+ ## Part 4: Pinning Policy
175
+
176
+ A healthy dependency policy requires reproducible builds:
177
+
178
+ **Check for lock files:**
179
+
180
+ - [ ] `poetry.lock` / `package-lock.json` / `yarn.lock` / `Cargo.lock` / `go.sum` exists
181
+ - [ ] Lock file is committed to version control
182
+ - [ ] Lock file is up to date with the manifest
183
+
184
+ **Check for version constraints:**
185
+
186
+ ```bash
187
+ # Python — look for unpinned deps
188
+ cat pyproject.toml 2>/dev/null | grep -E '^\s+[a-z]' | grep -v '^#' | head -30
189
+
190
+ # Flag overly loose constraints (e.g. "*", ">=1.0" with no upper bound in prod deps)
191
+ ```
192
+
193
+ | Pattern | Risk | Recommendation |
194
+ | --------------------------- | ------ | -------------------------------------------- |
195
+ | `package = "*"` | High | Pin to a compatible range |
196
+ | `package = ">=1.0"` | Medium | Add upper bound: `>=1.0,<3.0` |
197
+ | `package = "^1.0"` (Poetry) | Low | Acceptable for non-critical deps |
198
+ | `package = "1.2.3"` (exact) | Low | Fine for direct deps; brittle for transitive |
199
+ | No lock file | High | Add lock file and commit it |
200
+
201
+ ______________________________________________________________________
202
+
203
+ ## Part 5: Transitive Risk
204
+
205
+ Identify high-risk transitive (indirect) dependencies:
206
+
207
+ ```bash
208
+ # Python — show full dependency tree
209
+ if poetry --version >/dev/null 2>&1; then
210
+ poetry show --tree 2>/dev/null | head -60
211
+ else
212
+ pip install pipdeptree 2>/dev/null && pipdeptree 2>/dev/null | head -60
213
+ fi
214
+
215
+ # Node
216
+ npm list --depth=2 2>/dev/null | head -60
217
+
218
+ # Go
219
+ go mod graph 2>/dev/null | head -40
220
+ ```
221
+
222
+ Flags to look for:
223
+
224
+ - [ ] No single dependency with > 20 transitive deps (blast radius risk)
225
+ - [ ] No abandoned packages (last release > 2 years, no recent commits)
226
+ - [ ] No packages with a single maintainer for critical functionality
227
+ - [ ] Core dependencies have active security policies (CVE response time < 30 days)
228
+
229
+ ```bash
230
+ # Check for abandoned packages — look at last release dates
231
+ # (manual step: check PyPI / npm registry for each critical dep)
232
+ ```
233
+
234
+ ______________________________________________________________________
235
+
236
+ ## Part 6: Supply Chain Hygiene
237
+
238
+ ```bash
239
+ # Python — check if packages are installed from PyPI or custom source
240
+ cat pyproject.toml 2>/dev/null | grep -E '\[\[tool\.poetry\.source\]\]' -A 5
241
+
242
+ # Node — check for private registry config
243
+ cat .npmrc 2>/dev/null
244
+ cat package.json 2>/dev/null | grep -E '"registry"'
245
+
246
+ # Check for dependency confusion risk (private package names published on public registry)
247
+ # (manual step: search PyPI/npm for any internal package names)
248
+ ```
249
+
250
+ Check:
251
+
252
+ - [ ] All packages sourced from trusted, official registries
253
+ - [ ] No `--extra-index-url` pointing to untrusted sources (Python)
254
+ - [ ] Private package names are not also available on public registries (confusion attack)
255
+ - [ ] `pip install` / `npm install` output reviewed for unexpected packages
256
+ - [ ] CI pipeline pins the package manager version itself
257
+
258
+ ______________________________________________________________________
259
+
260
+ ## Output
261
+
262
+ ```text
263
+ Dependency Audit Report
264
+ ═══════════════════════
265
+
266
+ Stack: [stack + manager]
267
+ Scanned: [N direct, N transitive dependencies]
268
+
269
+ Vulnerabilities:
270
+ 🔴 Critical/High: [N] — [list or "none"]
271
+ 🟡 Medium: [N] — [list or "none"]
272
+ 🟢 Low: [N]
273
+
274
+ Outdated:
275
+ Patch updates available: [N packages]
276
+ Minor updates available: [N packages]
277
+ Major updates available: [N packages]
278
+
279
+ Licence issues:
280
+ 🔴 High-risk licences: [list or "none"]
281
+ 🟡 Review required: [list or "none"]
282
+
283
+ Pinning:
284
+ Lock file: [present | absent]
285
+ Loose pins: [list or "none"]
286
+
287
+ Supply chain:
288
+ [clean | issues found — details]
289
+
290
+ Action items (priority order):
291
+ 1. [action] — [package] — [severity]
292
+ 2. ...
293
+ ```
@@ -0,0 +1,16 @@
1
+ name: design
2
+ version: 1.0.2
3
+ description: |
4
+ Build a complete API design or service design from scratch. Produces OpenAPI
5
+ specs, error conventions, naming standards, pagination patterns, and versioning
6
+ policies. Use when asked to "design the API", "create a design system for this
7
+ service", "define the API standards", or "design this service interface".
8
+ argument-hint: '[API or service to design]'
9
+
10
+ license: MIT
11
+ compatibility: Requires a skills-compatible agent with repository file access and terminal command execution when needed.
12
+ metadata:
13
+ owner: vstack
14
+ maturity: stable
15
+ user-invocable: true
16
+ disable-model-invocation: false