showdar-skills 0.2.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/LICENSE +9 -0
- package/README.md +322 -0
- package/bin/showdar.js +118 -0
- package/bundles/bugfix.yaml +4 -0
- package/bundles/design.yaml +4 -0
- package/bundles/feature.yaml +4 -0
- package/bundles/release.yaml +4 -0
- package/bundles/upgrade.yaml +4 -0
- package/commands/opencode/showdar/build.md +6 -0
- package/commands/opencode/showdar/debug.md +6 -0
- package/commands/opencode/showdar/design.md +6 -0
- package/commands/opencode/showdar/git.md +6 -0
- package/commands/opencode/showdar/ops.md +7 -0
- package/commands/opencode/showdar/plan.md +6 -0
- package/commands/opencode/showdar/quality.md +7 -0
- package/commands/opencode/showdar/recover.md +6 -0
- package/commands/opencode/showdar/requirements.md +7 -0
- package/commands/opencode/showdar/review.md +6 -0
- package/commands/opencode/showdar/security.md +7 -0
- package/commands/opencode/showdar/ship.md +6 -0
- package/commands/opencode/showdar/skill.md +6 -0
- package/commands/opencode/showdar/test.md +6 -0
- package/commands/opencode/showdar/understand.md +6 -0
- package/commands/opencode/showdar/upgrade.md +6 -0
- package/engine/csv.mjs +45 -0
- package/engine/detect-stack.mjs +48 -0
- package/engine/rank.mjs +40 -0
- package/engine/search.mjs +20 -0
- package/package.json +28 -0
- package/profiles/backend.json +1 -0
- package/profiles/developer.json +1 -0
- package/profiles/full.json +1 -0
- package/profiles/minimal.json +1 -0
- package/profiles/product.json +1 -0
- package/profiles/qa.json +1 -0
- package/router/conflicts.yaml +50 -0
- package/router/skill-map.yaml +54 -0
- package/router/triggers.yaml +30 -0
- package/skills/showdar-build/SKILL.md +154 -0
- package/skills/showdar-build/data/change-smells.csv +24 -0
- package/skills/showdar-build/data/index.json +14 -0
- package/skills/showdar-build/examples/change-surface.md +18 -0
- package/skills/showdar-build/references/architecture-boundaries.md +3 -0
- package/skills/showdar-build/references/error-handling.md +3 -0
- package/skills/showdar-build/references/feature-flags.md +3 -0
- package/skills/showdar-build/references/minimal-change.md +3 -0
- package/skills/showdar-build/scripts/change-surface.mjs +5 -0
- package/skills/showdar-build/stacks/dart.md +3 -0
- package/skills/showdar-build/stacks/flutter.md +3 -0
- package/skills/showdar-build/stacks/kotlin.md +3 -0
- package/skills/showdar-build/stacks/nextjs.md +3 -0
- package/skills/showdar-build/stacks/node-fastify.md +3 -0
- package/skills/showdar-build/stacks/node-nestjs.md +3 -0
- package/skills/showdar-build/stacks/react-native.md +3 -0
- package/skills/showdar-build/stacks/react.md +3 -0
- package/skills/showdar-build/stacks/rust-tauri.md +3 -0
- package/skills/showdar-build/stacks/swift.md +3 -0
- package/skills/showdar-build/stacks/typescript.md +3 -0
- package/skills/showdar-debug/SKILL.md +179 -0
- package/skills/showdar-debug/data/failure-patterns.csv +34 -0
- package/skills/showdar-debug/data/index.json +14 -0
- package/skills/showdar-debug/examples/evidence-log.md +19 -0
- package/skills/showdar-debug/references/async-races.md +3 -0
- package/skills/showdar-debug/references/build-failures.md +3 -0
- package/skills/showdar-debug/references/hypothesis-driven-debugging.md +3 -0
- package/skills/showdar-debug/references/memory.md +3 -0
- package/skills/showdar-debug/references/networking.md +3 -0
- package/skills/showdar-debug/references/performance.md +3 -0
- package/skills/showdar-debug/scripts/collect-context.mjs +8 -0
- package/skills/showdar-debug/scripts/lib/detect-stack.mjs +48 -0
- package/skills/showdar-debug/stacks/android.md +21 -0
- package/skills/showdar-debug/stacks/docker.md +21 -0
- package/skills/showdar-debug/stacks/flutter.md +21 -0
- package/skills/showdar-debug/stacks/ios.md +21 -0
- package/skills/showdar-debug/stacks/nextjs.md +21 -0
- package/skills/showdar-debug/stacks/node.md +21 -0
- package/skills/showdar-debug/stacks/react-native.md +21 -0
- package/skills/showdar-debug/stacks/react.md +21 -0
- package/skills/showdar-debug/stacks/tauri.md +21 -0
- package/skills/showdar-design/SKILL.md +179 -0
- package/skills/showdar-design/data/accessibility.csv +16 -0
- package/skills/showdar-design/data/colors.csv +13 -0
- package/skills/showdar-design/data/components.csv +20 -0
- package/skills/showdar-design/data/index.json +25 -0
- package/skills/showdar-design/data/motion.csv +13 -0
- package/skills/showdar-design/data/products.csv +19 -0
- package/skills/showdar-design/data/stacks/compose.csv +9 -0
- package/skills/showdar-design/data/stacks/flutter.csv +9 -0
- package/skills/showdar-design/data/stacks/html-tailwind.csv +9 -0
- package/skills/showdar-design/data/stacks/nextjs.csv +9 -0
- package/skills/showdar-design/data/stacks/nuxt.csv +9 -0
- package/skills/showdar-design/data/stacks/react-native.csv +9 -0
- package/skills/showdar-design/data/stacks/react.csv +9 -0
- package/skills/showdar-design/data/stacks/svelte.csv +9 -0
- package/skills/showdar-design/data/stacks/swiftui.csv +9 -0
- package/skills/showdar-design/data/stacks/tauri.csv +9 -0
- package/skills/showdar-design/data/stacks/vue.csv +9 -0
- package/skills/showdar-design/data/styles.csv +13 -0
- package/skills/showdar-design/data/typography.csv +13 -0
- package/skills/showdar-design/data/ui-patterns.csv +19 -0
- package/skills/showdar-design/examples/design-brief.md +19 -0
- package/skills/showdar-design/references/accessibility.md +5 -0
- package/skills/showdar-design/references/anti-ai-ui.md +5 -0
- package/skills/showdar-design/references/architecture.md +12 -0
- package/skills/showdar-design/references/interaction.md +5 -0
- package/skills/showdar-design/references/layout.md +5 -0
- package/skills/showdar-design/references/release-readiness.md +12 -0
- package/skills/showdar-design/references/responsive.md +5 -0
- package/skills/showdar-design/references/security.md +12 -0
- package/skills/showdar-design/references/visual-hierarchy.md +7 -0
- package/skills/showdar-design/scripts/lib/csv.mjs +40 -0
- package/skills/showdar-design/scripts/lib/rank.mjs +35 -0
- package/skills/showdar-design/scripts/lib/search.mjs +20 -0
- package/skills/showdar-design/scripts/search.mjs +38 -0
- package/skills/showdar-design/stacks/flutter.md +13 -0
- package/skills/showdar-design/stacks/html-tailwind.md +12 -0
- package/skills/showdar-design/stacks/jetpack-compose.md +13 -0
- package/skills/showdar-design/stacks/nextjs.md +12 -0
- package/skills/showdar-design/stacks/nuxt.md +11 -0
- package/skills/showdar-design/stacks/react-native.md +13 -0
- package/skills/showdar-design/stacks/react.md +12 -0
- package/skills/showdar-design/stacks/svelte.md +11 -0
- package/skills/showdar-design/stacks/swiftui.md +12 -0
- package/skills/showdar-design/stacks/tauri.md +12 -0
- package/skills/showdar-design/stacks/vue.md +12 -0
- package/skills/showdar-git/SKILL.md +291 -0
- package/skills/showdar-git/data/git-workflows.csv +7 -0
- package/skills/showdar-git/data/index.json +14 -0
- package/skills/showdar-git/examples/commit-task-only.md +15 -0
- package/skills/showdar-git/examples/conflict-stop.md +7 -0
- package/skills/showdar-git/examples/explicit-push.md +7 -0
- package/skills/showdar-git/examples/feature-merge-no-push.md +13 -0
- package/skills/showdar-git/references/operation-safety.md +34 -0
- package/skills/showdar-git/scripts/inspect-git-state.mjs +53 -0
- package/skills/showdar-ops/SKILL.md +160 -0
- package/skills/showdar-ops/data/index.json +14 -0
- package/skills/showdar-ops/data/ops-patterns.csv +12 -0
- package/skills/showdar-ops/examples/explicit-deployment.md +5 -0
- package/skills/showdar-ops/examples/fix-existing-ci.md +5 -0
- package/skills/showdar-ops/examples/inspect-ci-readonly.md +7 -0
- package/skills/showdar-ops/examples/rollback-plan.md +5 -0
- package/skills/showdar-ops/examples/staging-plan.md +5 -0
- package/skills/showdar-ops/references/ci-cd.md +5 -0
- package/skills/showdar-ops/references/containers.md +5 -0
- package/skills/showdar-ops/references/deployment.md +5 -0
- package/skills/showdar-ops/references/desktop-release.md +3 -0
- package/skills/showdar-ops/references/environments.md +5 -0
- package/skills/showdar-ops/references/mobile-release.md +3 -0
- package/skills/showdar-ops/references/observability.md +5 -0
- package/skills/showdar-ops/references/rollback.md +5 -0
- package/skills/showdar-ops/scripts/inspect-ops-state.mjs +54 -0
- package/skills/showdar-plan/SKILL.md +159 -0
- package/skills/showdar-plan/data/index.json +14 -0
- package/skills/showdar-plan/data/planning-checklists.csv +25 -0
- package/skills/showdar-plan/examples/feature-plan.md +19 -0
- package/skills/showdar-plan/references/architecture.md +5 -0
- package/skills/showdar-plan/references/requirements.md +5 -0
- package/skills/showdar-plan/references/risk-analysis.md +5 -0
- package/skills/showdar-plan/references/scope.md +5 -0
- package/skills/showdar-plan/references/task-decomposition.md +5 -0
- package/skills/showdar-plan/scripts/collect-planning-context.mjs +9 -0
- package/skills/showdar-plan/scripts/lib/detect-stack.mjs +48 -0
- package/skills/showdar-plan/stacks/backend.md +3 -0
- package/skills/showdar-plan/stacks/mobile.md +3 -0
- package/skills/showdar-plan/stacks/web.md +3 -0
- package/skills/showdar-quality/SKILL.md +166 -0
- package/skills/showdar-quality/data/index.json +14 -0
- package/skills/showdar-quality/data/quality-patterns.csv +11 -0
- package/skills/showdar-quality/references/qa-guide.md +20 -0
- package/skills/showdar-recover/SKILL.md +164 -0
- package/skills/showdar-recover/data/index.json +14 -0
- package/skills/showdar-recover/data/recovery-signals.csv +23 -0
- package/skills/showdar-recover/examples/recovery-report.md +18 -0
- package/skills/showdar-recover/references/failed-runs.md +3 -0
- package/skills/showdar-recover/references/interrupted-session.md +3 -0
- package/skills/showdar-recover/references/merge-conflicts.md +3 -0
- package/skills/showdar-recover/references/partial-implementation.md +3 -0
- package/skills/showdar-recover/scripts/inspect-state.mjs +5 -0
- package/skills/showdar-requirements/SKILL.md +172 -0
- package/skills/showdar-requirements/data/index.json +14 -0
- package/skills/showdar-requirements/data/requirements-patterns.csv +11 -0
- package/skills/showdar-requirements/references/analysis-guide.md +30 -0
- package/skills/showdar-review/SKILL.md +155 -0
- package/skills/showdar-review/data/index.json +14 -0
- package/skills/showdar-review/data/review-patterns.csv +27 -0
- package/skills/showdar-review/examples/finding.md +16 -0
- package/skills/showdar-review/references/architecture.md +3 -0
- package/skills/showdar-review/references/correctness.md +3 -0
- package/skills/showdar-review/references/maintainability.md +3 -0
- package/skills/showdar-review/references/performance.md +3 -0
- package/skills/showdar-review/references/security.md +3 -0
- package/skills/showdar-review/references/testing.md +3 -0
- package/skills/showdar-review/scripts/collect-diff.mjs +5 -0
- package/skills/showdar-review/stacks/android.md +3 -0
- package/skills/showdar-review/stacks/flutter.md +3 -0
- package/skills/showdar-review/stacks/ios.md +3 -0
- package/skills/showdar-review/stacks/nextjs.md +3 -0
- package/skills/showdar-review/stacks/node-backend.md +3 -0
- package/skills/showdar-review/stacks/react-native.md +3 -0
- package/skills/showdar-review/stacks/react.md +3 -0
- package/skills/showdar-review/stacks/swift-kotlin.md +3 -0
- package/skills/showdar-review/stacks/typescript.md +3 -0
- package/skills/showdar-security/SKILL.md +169 -0
- package/skills/showdar-security/data/index.json +14 -0
- package/skills/showdar-security/data/security-patterns.csv +13 -0
- package/skills/showdar-security/examples/api-authorization-review.md +9 -0
- package/skills/showdar-security/examples/mobile-deeplink-review.md +7 -0
- package/skills/showdar-security/examples/secret-exposure-review.md +5 -0
- package/skills/showdar-security/examples/threat-model-open-assumptions.md +11 -0
- package/skills/showdar-security/references/authz-secrets.md +7 -0
- package/skills/showdar-security/references/mobile-security.md +7 -0
- package/skills/showdar-security/references/supply-chain.md +5 -0
- package/skills/showdar-security/references/threat-modeling.md +12 -0
- package/skills/showdar-security/scripts/inspect-security-surface.mjs +47 -0
- package/skills/showdar-ship/SKILL.md +234 -0
- package/skills/showdar-ship/data/index.json +14 -0
- package/skills/showdar-ship/data/release-checks.csv +28 -0
- package/skills/showdar-ship/examples/release-report.md +25 -0
- package/skills/showdar-ship/references/migrations.md +12 -0
- package/skills/showdar-ship/references/post-deploy.md +12 -0
- package/skills/showdar-ship/references/release-readiness.md +13 -0
- package/skills/showdar-ship/references/rollback.md +12 -0
- package/skills/showdar-ship/references/secrets.md +3 -0
- package/skills/showdar-ship/scripts/detect-targets.mjs +5 -0
- package/skills/showdar-ship/scripts/lib/detect-stack.mjs +48 -0
- package/skills/showdar-ship/scripts/release-check.mjs +6 -0
- package/skills/showdar-ship/stacks/android.md +33 -0
- package/skills/showdar-ship/stacks/docker.md +30 -0
- package/skills/showdar-ship/stacks/electron.md +7 -0
- package/skills/showdar-ship/stacks/ios.md +34 -0
- package/skills/showdar-ship/stacks/nextjs.md +30 -0
- package/skills/showdar-ship/stacks/node-backend.md +37 -0
- package/skills/showdar-ship/stacks/orchestration.md +12 -0
- package/skills/showdar-ship/stacks/tauri.md +35 -0
- package/skills/showdar-ship/stacks/web.md +35 -0
- package/skills/showdar-test/SKILL.md +164 -0
- package/skills/showdar-test/data/index.json +14 -0
- package/skills/showdar-test/data/test-strategy.csv +22 -0
- package/skills/showdar-test/examples/regression.md +14 -0
- package/skills/showdar-test/references/e2e.md +3 -0
- package/skills/showdar-test/references/integration.md +3 -0
- package/skills/showdar-test/references/regression.md +3 -0
- package/skills/showdar-test/references/test-smells.md +3 -0
- package/skills/showdar-test/references/unit.md +3 -0
- package/skills/showdar-test/scripts/detect-test-tools.mjs +6 -0
- package/skills/showdar-test/stacks/android-testing.md +13 -0
- package/skills/showdar-test/stacks/detox.md +13 -0
- package/skills/showdar-test/stacks/flutter-test.md +13 -0
- package/skills/showdar-test/stacks/integration-test.md +13 -0
- package/skills/showdar-test/stacks/jest.md +13 -0
- package/skills/showdar-test/stacks/playwright.md +13 -0
- package/skills/showdar-test/stacks/react-native-testing.md +17 -0
- package/skills/showdar-test/stacks/react-testing-library.md +13 -0
- package/skills/showdar-test/stacks/vitest.md +13 -0
- package/skills/showdar-test/stacks/xctest.md +13 -0
- package/skills/showdar-understand/SKILL.md +159 -0
- package/skills/showdar-understand/data/architecture-signals.csv +28 -0
- package/skills/showdar-understand/data/index.json +14 -0
- package/skills/showdar-understand/examples/repository-audit.md +17 -0
- package/skills/showdar-understand/references/architecture-signals.md +25 -0
- package/skills/showdar-understand/references/dependency-analysis.md +9 -0
- package/skills/showdar-understand/references/repository-analysis.md +24 -0
- package/skills/showdar-understand/scripts/inspect-repo.mjs +16 -0
- package/skills/showdar-understand/scripts/lib/detect-stack.mjs +48 -0
- package/skills/showdar-understand/stacks/android.md +3 -0
- package/skills/showdar-understand/stacks/backend.md +5 -0
- package/skills/showdar-understand/stacks/electron.md +3 -0
- package/skills/showdar-understand/stacks/fastify.md +3 -0
- package/skills/showdar-understand/stacks/flutter.md +3 -0
- package/skills/showdar-understand/stacks/ios.md +3 -0
- package/skills/showdar-understand/stacks/mobile.md +5 -0
- package/skills/showdar-understand/stacks/nestjs.md +3 -0
- package/skills/showdar-understand/stacks/nextjs.md +3 -0
- package/skills/showdar-understand/stacks/node.md +3 -0
- package/skills/showdar-understand/stacks/react-native.md +3 -0
- package/skills/showdar-understand/stacks/react.md +3 -0
- package/skills/showdar-understand/stacks/tauri.md +3 -0
- package/skills/showdar-upgrade/SKILL.md +162 -0
- package/skills/showdar-upgrade/data/compatibility-checklist.csv +24 -0
- package/skills/showdar-upgrade/data/index.json +14 -0
- package/skills/showdar-upgrade/examples/upgrade-report.md +18 -0
- package/skills/showdar-upgrade/references/breaking-changes.md +3 -0
- package/skills/showdar-upgrade/references/compatibility.md +3 -0
- package/skills/showdar-upgrade/references/dependency-resolution.md +3 -0
- package/skills/showdar-upgrade/references/migration-strategy.md +3 -0
- package/skills/showdar-upgrade/references/rollback.md +3 -0
- package/skills/showdar-upgrade/scripts/inspect-dependencies.mjs +6 -0
- package/skills/showdar-upgrade/scripts/lib/detect-stack.mjs +48 -0
- package/skills/showdar-upgrade/stacks/android.md +15 -0
- package/skills/showdar-upgrade/stacks/cocoapods-spm.md +17 -0
- package/skills/showdar-upgrade/stacks/expo.md +17 -0
- package/skills/showdar-upgrade/stacks/flutter.md +17 -0
- package/skills/showdar-upgrade/stacks/gradle.md +13 -0
- package/skills/showdar-upgrade/stacks/ios.md +15 -0
- package/skills/showdar-upgrade/stacks/nextjs.md +17 -0
- package/skills/showdar-upgrade/stacks/node.md +17 -0
- package/skills/showdar-upgrade/stacks/react-native.md +17 -0
- package/skills/showdar-upgrade/stacks/react.md +17 -0
- package/skills/showdar-upgrade/stacks/tauri-rust.md +15 -0
- package/src/adapters.js +44 -0
- package/src/catalog.js +57 -0
- package/src/project.js +287 -0
- package/src/runtime.js +9 -0
- package/src/validate.js +310 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Showdar Skills contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
6
|
+
|
|
7
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
# Showdar Skills
|
|
2
|
+
|
|
3
|
+
[](https://nodejs.org/)
|
|
4
|
+
[](./LICENSE)
|
|
5
|
+
[](#skill-catalog)
|
|
6
|
+
|
|
7
|
+
Production-grade software engineering skills for coding agents. Showdar covers
|
|
8
|
+
requirements, planning, design, implementation, debugging, QA, security,
|
|
9
|
+
operations, release readiness, and Git workflows with lightweight intent
|
|
10
|
+
routing and progressive knowledge loading.
|
|
11
|
+
|
|
12
|
+
> npm publication: prepared for the first release; `showdar-skills@0.2.0` is
|
|
13
|
+
> not published yet.
|
|
14
|
+
|
|
15
|
+
## Quick start
|
|
16
|
+
|
|
17
|
+
After the first npm publication, install the CLI globally and add project
|
|
18
|
+
skills explicitly:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install -g showdar-skills
|
|
22
|
+
cd my-project
|
|
23
|
+
showdar init --ai codex --profile developer
|
|
24
|
+
showdar doctor
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
The current source-install alternative is:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
git clone https://github.com/caongocquy/showdar-skills.git
|
|
31
|
+
cd showdar-skills
|
|
32
|
+
npm install -g .
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
CLI installation and skill installation are separate. Installing the CLI
|
|
36
|
+
globally does not install skills globally; `showdar init` controls the project
|
|
37
|
+
or user scope where skills are copied.
|
|
38
|
+
|
|
39
|
+
## Why Showdar?
|
|
40
|
+
|
|
41
|
+
- 15 focused skills for the software lifecycle, instead of one oversized prompt.
|
|
42
|
+
- Native discovery for Codex, OpenCode, and Claude Code.
|
|
43
|
+
- Evidence-first workflows with bounded safety and verification contracts.
|
|
44
|
+
- Searchable data, references, scripts, stack guidance, and examples loaded only
|
|
45
|
+
when the selected task needs them.
|
|
46
|
+
|
|
47
|
+
## How it works
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
User request
|
|
51
|
+
|
|
|
52
|
+
v
|
|
53
|
+
Lightweight discovery metadata
|
|
54
|
+
|
|
|
55
|
+
v
|
|
56
|
+
Selected Showdar skill
|
|
57
|
+
|
|
|
58
|
+
v
|
|
59
|
+
SKILL.md
|
|
60
|
+
|
|
|
61
|
+
+--> data/
|
|
62
|
+
+--> references/
|
|
63
|
+
+--> scripts/
|
|
64
|
+
+--> examples/
|
|
65
|
+
only when needed
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
The 15 skills are not eagerly loaded as full prompts. Lightweight descriptions
|
|
69
|
+
help the agent choose a skill, then that skill loads its workflow and deeper
|
|
70
|
+
knowledge progressively.
|
|
71
|
+
|
|
72
|
+
## Supported agents and destinations
|
|
73
|
+
|
|
74
|
+
| Agent target | Project scope | Global scope |
|
|
75
|
+
| --- | --- | --- |
|
|
76
|
+
| Codex | `.agents/skills/` | `~/.agents/skills/` |
|
|
77
|
+
| Universal | `.agents/skills/` | `~/.agents/skills/` |
|
|
78
|
+
| OpenCode | `.opencode/skills/` + `.opencode/commands/showdar/` | `~/.config/opencode/skills/` + `~/.config/opencode/commands/showdar/` |
|
|
79
|
+
| Claude Code | `.claude/skills/` | `~/.claude/skills/` |
|
|
80
|
+
|
|
81
|
+
Codex and Universal intentionally share `.agents/skills/`; `--ai all` avoids
|
|
82
|
+
duplicating that physical destination. OpenCode receives both skills and
|
|
83
|
+
native `/showdar/...` command files.
|
|
84
|
+
|
|
85
|
+
### Project and global installation
|
|
86
|
+
|
|
87
|
+
Project scope is the default and writes to the current project:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
cd my-project
|
|
91
|
+
showdar init --scope project --ai codex --profile developer
|
|
92
|
+
showdar status
|
|
93
|
+
showdar doctor
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Global scope does not require a Git repository:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
showdar init --scope global --ai codex --profile developer
|
|
100
|
+
showdar status --scope global
|
|
101
|
+
showdar doctor --scope global
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Global CLI installation is not global skill installation. Project ownership is
|
|
105
|
+
stored in `.showdar.json`; global ownership is stored in `~/.showdar/global.json`.
|
|
106
|
+
Only Showdar-owned paths are refreshed or removed.
|
|
107
|
+
|
|
108
|
+
## Profiles
|
|
109
|
+
|
|
110
|
+
Choose a role-specific profile for more precise discovery, or use `full` when
|
|
111
|
+
all capabilities are useful. `full` exposes all 15 skills but still does not
|
|
112
|
+
eagerly load all skill bodies.
|
|
113
|
+
|
|
114
|
+
| Profile | Skills |
|
|
115
|
+
| --- | ---: |
|
|
116
|
+
| `minimal` | 8 |
|
|
117
|
+
| `developer` | 12 |
|
|
118
|
+
| `backend` | 14 |
|
|
119
|
+
| `qa` | 9 |
|
|
120
|
+
| `product` | 6 |
|
|
121
|
+
| `full` | 15 |
|
|
122
|
+
|
|
123
|
+
Legacy aliases remain compatible:
|
|
124
|
+
|
|
125
|
+
```text
|
|
126
|
+
mobile -> developer
|
|
127
|
+
web -> developer
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
New manifests store the canonical `developer` profile.
|
|
131
|
+
|
|
132
|
+
## Skill catalog
|
|
133
|
+
|
|
134
|
+
All 15 entries remain first-class Showdar skills.
|
|
135
|
+
|
|
136
|
+
### Analysis and planning
|
|
137
|
+
|
|
138
|
+
| Skill | Use when |
|
|
139
|
+
| --- | --- |
|
|
140
|
+
| `showdar-understand` | Mapping an unfamiliar repository, architecture, dependencies, or impact before deciding what to change. |
|
|
141
|
+
| `showdar-requirements` | Product or business input needs explicit behavior, rules, acceptance criteria, assumptions, or open decisions. |
|
|
142
|
+
| `showdar-plan` | Agreed behavior needs a bounded implementation plan, change surface, task order, risks, or verification steps. |
|
|
143
|
+
|
|
144
|
+
### Engineering
|
|
145
|
+
|
|
146
|
+
| Skill | Use when |
|
|
147
|
+
| --- | --- |
|
|
148
|
+
| `showdar-design` | Product UI needs design direction, UX decisions, responsive layout, accessibility, or visual polish. |
|
|
149
|
+
| `showdar-build` | Implementing or refactoring an agreed application change within existing architecture and contracts. |
|
|
150
|
+
| `showdar-debug` | Observed behavior fails through crashes, regressions, build failures, races, networking, memory, or performance issues. |
|
|
151
|
+
| `showdar-upgrade` | Upgrading dependencies, frameworks, runtimes, or native platforms where compatibility or rollback risk matters. |
|
|
152
|
+
|
|
153
|
+
### Quality
|
|
154
|
+
|
|
155
|
+
| Skill | Use when |
|
|
156
|
+
| --- | --- |
|
|
157
|
+
| `showdar-test` | Choosing or implementing automated tests for behavior, regressions, integration, E2E, or coverage. |
|
|
158
|
+
| `showdar-quality` | Planning QA/QC scenarios, risk coverage, regression scope, compatibility checks, or bug-report evidence. |
|
|
159
|
+
| `showdar-review` | Reviewing code or diffs for general correctness, architecture, performance, maintainability, or tests. |
|
|
160
|
+
|
|
161
|
+
### Security and operations
|
|
162
|
+
|
|
163
|
+
| Skill | Use when |
|
|
164
|
+
| --- | --- |
|
|
165
|
+
| `showdar-security` | Assessing threat models, attack surfaces, trust boundaries, auth/authz, secrets, exposure, or exploitability. |
|
|
166
|
+
| `showdar-ops` | Inspecting or changing CI/CD, containers, environments, deployment, observability, rollback, or runtime operations. |
|
|
167
|
+
|
|
168
|
+
### Delivery and recovery
|
|
169
|
+
|
|
170
|
+
| Skill | Use when |
|
|
171
|
+
| --- | --- |
|
|
172
|
+
| `showdar-ship` | Checking whether a change, artifact, or release is ready for handoff or external release. |
|
|
173
|
+
| `showdar-recover` | Interrupted or partial engineering work must be reconstructed from repository evidence before continuing. |
|
|
174
|
+
| `showdar-git` | Performing local Git inspection, staging, commits, branch integration, conflicts, cleanup, or explicitly requested remote Git actions. |
|
|
175
|
+
|
|
176
|
+
## Typical software workflow
|
|
177
|
+
|
|
178
|
+
```text
|
|
179
|
+
Requirements
|
|
180
|
+
|
|
|
181
|
+
v
|
|
182
|
+
Plan
|
|
183
|
+
|
|
|
184
|
+
+--> Design
|
|
185
|
+
|
|
|
186
|
+
v
|
|
187
|
+
Build
|
|
188
|
+
|
|
|
189
|
+
+--> Debug
|
|
190
|
+
+--> Test
|
|
191
|
+
|
|
|
192
|
+
v
|
|
193
|
+
Quality
|
|
194
|
+
|
|
|
195
|
+
v
|
|
196
|
+
Review / Security
|
|
197
|
+
|
|
|
198
|
+
v
|
|
199
|
+
Ship readiness
|
|
200
|
+
|
|
|
201
|
+
+--> Ops
|
|
202
|
+
|
|
|
203
|
+
v
|
|
204
|
+
Git completion
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
This is a composition guide, not a mandatory sequence. Choose the skill that
|
|
208
|
+
matches the current intent.
|
|
209
|
+
|
|
210
|
+
## Usage examples
|
|
211
|
+
|
|
212
|
+
Codex discovers installed native skills from natural requests or explicit names:
|
|
213
|
+
|
|
214
|
+
```text
|
|
215
|
+
$showdar-requirements review this ticket for missing rules
|
|
216
|
+
$showdar-plan plan the implementation
|
|
217
|
+
$showdar-debug find the root cause of this crash
|
|
218
|
+
$showdar-quality create regression scenarios
|
|
219
|
+
$showdar-security threat model this auth flow
|
|
220
|
+
$showdar-ops inspect the deployment setup
|
|
221
|
+
$showdar-git commit only the current task changes
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
OpenCode uses native commands when initialized with `--ai opencode` or
|
|
225
|
+
`--ai all`:
|
|
226
|
+
|
|
227
|
+
```text
|
|
228
|
+
/showdar/requirements review this ticket for missing rules
|
|
229
|
+
/showdar/debug find the root cause of this crash
|
|
230
|
+
/showdar/security threat model this auth flow
|
|
231
|
+
/showdar/ops inspect the deployment setup
|
|
232
|
+
/showdar/git commit only the current task changes
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## Safety boundaries
|
|
236
|
+
|
|
237
|
+
- `showdar-ship` verifies readiness; it does not automatically deploy or create
|
|
238
|
+
CI/CD.
|
|
239
|
+
- `showdar-ops` performs operational work when requested. Remote or production
|
|
240
|
+
mutation requires explicit intent, target, and authorization.
|
|
241
|
+
- `showdar-git` preserves unrelated work and does not imply push, force-push, or
|
|
242
|
+
destructive cleanup.
|
|
243
|
+
- `showdar-security` performs defensive, evidence-based analysis and never
|
|
244
|
+
exposes secret values.
|
|
245
|
+
- `showdar-requirements` records assumptions and open decisions instead of
|
|
246
|
+
inventing stakeholder or business choices.
|
|
247
|
+
|
|
248
|
+
## CLI reference
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
showdar init [--scope <project|global>] --ai <target> --profile <profile>
|
|
252
|
+
showdar list
|
|
253
|
+
showdar status [--scope <project|global>]
|
|
254
|
+
showdar doctor [--scope <project|global>]
|
|
255
|
+
showdar validate
|
|
256
|
+
showdar remove [--scope <project|global>]
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
`--ai` accepts `codex`, `opencode`, `claude`, `universal`, or `all`.
|
|
260
|
+
`--scope` defaults to `project`; `--profile` accepts the six canonical profiles
|
|
261
|
+
and the `mobile`/`web` aliases. Run `showdar --help` or a command's `--help`
|
|
262
|
+
for the current options.
|
|
263
|
+
|
|
264
|
+
`showdar validate` validates the installed Showdar package, not the target
|
|
265
|
+
application. `showdar doctor` checks managed files against ownership hashes;
|
|
266
|
+
`showdar remove` removes only those managed paths and preserves unrelated files.
|
|
267
|
+
|
|
268
|
+
## Refreshing skills
|
|
269
|
+
|
|
270
|
+
There is no separate `showdar update` command. Reinstall the CLI, then rerun
|
|
271
|
+
`showdar init` with the same scope, target, and profile:
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
# Future npm install
|
|
275
|
+
npm install -g showdar-skills@latest
|
|
276
|
+
|
|
277
|
+
# Source development
|
|
278
|
+
npm install -g .
|
|
279
|
+
|
|
280
|
+
showdar init --scope project --ai codex --profile developer
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
Initialization is idempotent and refreshes Showdar-owned files. Use
|
|
284
|
+
`showdar remove` for project scope or `showdar remove --scope global` for the
|
|
285
|
+
user installation.
|
|
286
|
+
|
|
287
|
+
## Maintainer release notes
|
|
288
|
+
|
|
289
|
+
The first release is manual because the package does not exist on npm yet:
|
|
290
|
+
|
|
291
|
+
```bash
|
|
292
|
+
npm pack
|
|
293
|
+
npm publish ./showdar-skills-0.2.0.tgz
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
After the package exists, configure npm Trusted Publishing for the
|
|
297
|
+
`caongocquy/showdar-skills` GitHub Actions workflow named `publish.yml`. The
|
|
298
|
+
workflow runs only for `v*` tags, verifies the tag/package version, uses OIDC
|
|
299
|
+
with provenance, and contains no npm token. It skips an already-published
|
|
300
|
+
version and fails on registry errors other than a real E404. Trusted
|
|
301
|
+
Publishing is not configured yet. The repository's `RELEASING.md` contains
|
|
302
|
+
the maintainer runbook.
|
|
303
|
+
|
|
304
|
+
## Development
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
npm test
|
|
308
|
+
npm run validate
|
|
309
|
+
npm run check
|
|
310
|
+
npm run smoke
|
|
311
|
+
npm run eval
|
|
312
|
+
npm pack --dry-run
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
Showdar stays dependency-light and uses Node.js built-ins for its CLI,
|
|
316
|
+
validator, search engine, installer, and tests. Supporting knowledge remains
|
|
317
|
+
in each skill's `data/`, `references/`, `scripts/`, `stacks/`, and `examples/`
|
|
318
|
+
directories so the selected workflow can load it progressively.
|
|
319
|
+
|
|
320
|
+
## License
|
|
321
|
+
|
|
322
|
+
MIT
|
package/bin/showdar.js
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { readFile } from 'node:fs/promises';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import { AI_TARGETS, PROFILE_ALIASES, PROFILES, SKILLS, canonicalProfile, isDeprecatedProfile, resolveProfile } from '../src/catalog.js';
|
|
7
|
+
import { globalManifestPath, initGlobal, initProject, inspectGlobal, inspectProject, removeGlobal, removeProject } from '../src/project.js';
|
|
8
|
+
import { validateRepository } from '../src/validate.js';
|
|
9
|
+
|
|
10
|
+
const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
|
|
11
|
+
const COMMANDS = ['understand', 'plan', 'design', 'build', 'debug', 'test', 'review', 'upgrade', 'ship', 'recover', 'git', 'requirements', 'quality', 'security', 'ops', 'skill'];
|
|
12
|
+
const SCOPES = ['project', 'global'];
|
|
13
|
+
|
|
14
|
+
function valueAfter(args, flag, fallback) {
|
|
15
|
+
const i = args.indexOf(flag);
|
|
16
|
+
if (i === -1) return fallback;
|
|
17
|
+
if (!args[i + 1] || args[i + 1].startsWith('--')) throw new Error(`${flag} requires a value`);
|
|
18
|
+
return args[i + 1];
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
async function packageVersion() {
|
|
22
|
+
const pkg = JSON.parse(await readFile(path.join(packageRoot, 'package.json'), 'utf8'));
|
|
23
|
+
return pkg.version;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function scopeAfter(args) {
|
|
27
|
+
const scope = valueAfter(args, '--scope', 'project');
|
|
28
|
+
if (!SCOPES.includes(scope)) throw new Error(`Unknown scope "${scope}". Expected project or global.`);
|
|
29
|
+
return scope;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function printHelp(version, command = null) {
|
|
33
|
+
const scopeUsage = '[--scope <project|global>]';
|
|
34
|
+
if (command === 'init') {
|
|
35
|
+
console.log(`Showdar Skills ${version}\n\nUsage:\n showdar init ${scopeUsage} [--profile <name>] [--ai <codex|opencode|claude|universal|all>]\n\nDefaults: scope project, profile full, AI target universal.\nProject scope writes native skills and project .showdar.json. Global scope writes verified user skill directories and ~/.showdar/global.json without project files. Codex and universal use .agents/skills in project scope and ~/.agents/skills in global scope; --ai all writes each shared destination once.\n\nProfiles: ${Object.keys(PROFILES).join(', ')}\nDeprecated aliases: ${Object.entries(PROFILE_ALIASES).map(([alias, target]) => `${alias} -> ${target}`).join(', ')}\nAI targets: ${AI_TARGETS.join(', ')}`);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (['status', 'doctor', 'remove'].includes(command)) {
|
|
39
|
+
console.log(`Showdar Skills ${version}\n\nUsage:\n showdar ${command} ${scopeUsage}\n\nDefault scope: project. Use --scope global for the user installation.`);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
console.log(`Showdar Skills ${version}\n\nUsage:\n showdar init ${scopeUsage} [--profile <name>] [--ai <codex|opencode|claude|universal|all>]\n showdar status ${scopeUsage}\n showdar doctor ${scopeUsage}\n showdar validate\n showdar list\n showdar remove ${scopeUsage}\n\nDefaults: scope project, profile full, AI target universal.\nProfiles: ${Object.keys(PROFILES).join(', ')}\nDeprecated aliases: ${Object.entries(PROFILE_ALIASES).map(([alias, target]) => `${alias} -> ${target}`).join(', ')}\nAI targets: ${AI_TARGETS.join(', ')}`);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
async function main() {
|
|
46
|
+
const args = process.argv.slice(2);
|
|
47
|
+
const command = args[0] ?? 'help';
|
|
48
|
+
const projectRoot = process.cwd();
|
|
49
|
+
const version = await packageVersion();
|
|
50
|
+
|
|
51
|
+
if (command === 'help' || command === '--help' || command === '-h') return printHelp(version);
|
|
52
|
+
if (args.includes('--help') || args.includes('-h')) return printHelp(version, command);
|
|
53
|
+
|
|
54
|
+
const scope = ['init', 'status', 'doctor', 'remove'].includes(command) ? scopeAfter(args) : null;
|
|
55
|
+
|
|
56
|
+
if (command === 'list') {
|
|
57
|
+
console.log(`Profiles: ${Object.keys(PROFILES).join(', ')}\nDeprecated aliases: ${Object.entries(PROFILE_ALIASES).map(([alias, target]) => `${alias} -> ${target}`).join(', ')}\n\nSkills:`);
|
|
58
|
+
for (const skill of SKILLS) console.log(` ${skill.id} [${skill.domain}] ${skill.description}`);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (command === 'validate') {
|
|
63
|
+
const result = await validateRepository(packageRoot);
|
|
64
|
+
if (result.ok) console.log(`Showdar validation OK (${SKILLS.length} skills).`);
|
|
65
|
+
else {
|
|
66
|
+
console.log(`Showdar validation FAILED (${result.errors.length} errors).`);
|
|
67
|
+
for (const error of result.errors) console.log(`- ${error}`);
|
|
68
|
+
process.exitCode = 1;
|
|
69
|
+
}
|
|
70
|
+
for (const warning of result.warnings) console.log(`warning: ${warning}`);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (command === 'init') {
|
|
75
|
+
if (args.includes('--agent')) throw new Error('--agent is no longer supported in V0.2. Use --ai <codex|opencode|claude|universal|all>.');
|
|
76
|
+
const requestedProfile = valueAfter(args, '--profile', 'full');
|
|
77
|
+
const profile = canonicalProfile(requestedProfile);
|
|
78
|
+
const ai = valueAfter(args, '--ai', 'universal');
|
|
79
|
+
const skillIds = resolveProfile(requestedProfile);
|
|
80
|
+
if (isDeprecatedProfile(requestedProfile)) console.warn(`Warning: profile "${requestedProfile}" is deprecated; use "${profile}".`);
|
|
81
|
+
const commandNames = ai === 'opencode' || ai === 'all' ? COMMANDS : [];
|
|
82
|
+
const result = scope === 'global'
|
|
83
|
+
? await initGlobal({ homeRoot: homedir(), packageRoot, profile, ai, skillIds, commandNames, packageVersion: version })
|
|
84
|
+
: await initProject({ projectRoot, packageRoot, profile, ai, skillIds, commandNames, packageVersion: version });
|
|
85
|
+
console.log(`Showdar Skills installed.\nScope: ${scope}\nProfile: ${profile}\nAI: ${ai}\nTargets: ${result.targets.join(', ')}\nSkills: ${result.skills}\nOpenCode commands: ${result.commands}`);
|
|
86
|
+
if (scope === 'global') console.log(`Manifest: ${globalManifestPath()}`);
|
|
87
|
+
if (result.targets.includes('codex')) console.log('Codex: invoke skills directly with $showdar-<name> or let native skill discovery route by description.');
|
|
88
|
+
if (result.targets.includes('opencode')) console.log('OpenCode: use native skill discovery or /showdar/<command>.');
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (command === 'status' || command === 'doctor') {
|
|
93
|
+
const result = scope === 'global' ? await inspectGlobal() : await inspectProject(projectRoot);
|
|
94
|
+
if (!result.installed) {
|
|
95
|
+
console.log(`Showdar Skills is not installed in the ${scope} scope.`);
|
|
96
|
+
if (command === 'doctor') process.exitCode = 1;
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
console.log(`Showdar Skills\nScope: ${result.scope}\nProfile: ${result.profile}\nAI: ${result.ai}\nTargets: ${result.targets.join(', ')}\nSkills: ${result.skills}\nCommands: ${result.commands}\nHealth: ${result.healthy ? 'OK' : 'BROKEN'}`);
|
|
100
|
+
for (const issue of result.issues) console.log(`- ${issue}`);
|
|
101
|
+
if (command === 'doctor' && !result.healthy) process.exitCode = 1;
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (command === 'remove') {
|
|
106
|
+
if (scope === 'global') await removeGlobal();
|
|
107
|
+
else await removeProject(projectRoot);
|
|
108
|
+
console.log(`Showdar Skills removed from the ${scope} scope.`);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
throw new Error(`Unknown command "${command}". Run "showdar --help".`);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
main().catch((error) => {
|
|
116
|
+
console.error(`showdar: ${error.message}`);
|
|
117
|
+
process.exitCode = 1;
|
|
118
|
+
});
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Design, implement, review, or polish UI using Showdar design intelligence
|
|
3
|
+
---
|
|
4
|
+
Load and follow `showdar-design`. Detect whether the request is new design, implementation guidance, review, or polish, then use the skill's local data/search and stack guidance selectively.
|
|
5
|
+
|
|
6
|
+
Request: $ARGUMENTS
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Complete a local Git workflow safely without inferring push, GitHub, CI/CD, deployment, or release actions
|
|
3
|
+
---
|
|
4
|
+
Load and follow `showdar-git`. Inspect the repository before mutation, separate task-owned and unrelated changes, stage explicit paths, and verify the final Git state. Remote mutations require explicit user intent.
|
|
5
|
+
|
|
6
|
+
Request: $ARGUMENTS
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Handle CI/CD, deployment, containers, observability, and rollback operations
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Load and follow `showdar-ops` for the request below. Inspect operational state read-only by default; modify local operational config or execute remote/production actions only when explicitly requested and authorized.
|
|
6
|
+
|
|
7
|
+
$ARGUMENTS
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Plan QA scenarios, risk coverage, regression scope, and evidence
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Load and follow `showdar-quality` for the request below. Plan what should be verified, distinguish planned from executed evidence, and hand automated test implementation to `showdar-test`. Do not claim acceptance without evidence.
|
|
6
|
+
|
|
7
|
+
$ARGUMENTS
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Recover interrupted work from repository evidence with Showdar
|
|
3
|
+
---
|
|
4
|
+
Load and follow `showdar-recover`. Reconstruct the goal and durable state before editing, preserve unrelated user changes, and identify the safest next action.
|
|
5
|
+
|
|
6
|
+
Request: $ARGUMENTS
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Analyze requirements, ambiguity, business rules, and acceptance criteria
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Load and follow `showdar-requirements` for the request below. Separate supplied facts, repository observations, assumptions, and open decisions. Do not invent stakeholder intent or modify application code by default.
|
|
6
|
+
|
|
7
|
+
$ARGUMENTS
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Review code for general correctness, architecture, performance, maintainability, and tests
|
|
3
|
+
---
|
|
4
|
+
Load and follow `showdar-review`. Focus on general correctness, architecture, performance, maintainability, and tests; use `showdar-security` for security-specific threats, auth, secrets, exposure, or exploitability.
|
|
5
|
+
|
|
6
|
+
Request: $ARGUMENTS
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Analyze security posture, threats, auth, secrets, and data exposure
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Load and follow `showdar-security` for the request below. Use repository evidence, distinguish confirmed issues from suspected risks, redact sensitive values, and do not perform offensive or destructive actions by default.
|
|
6
|
+
|
|
7
|
+
$ARGUMENTS
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Verify delivery readiness with Showdar without creating CI or taking unapproved external actions
|
|
3
|
+
---
|
|
4
|
+
Load and follow `showdar-ship` in delivery verification mode. Inspect the diff, run relevant local checks, and report readiness. Existing CI is read-only; do not create or modify `.github/workflows/**`, deploy, publish, submit to a store, or mutate production unless the user explicitly requests that execution scope.
|
|
5
|
+
|
|
6
|
+
Request: $ARGUMENTS
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Invoke a specific Showdar flagship skill explicitly
|
|
3
|
+
---
|
|
4
|
+
Select exactly one requested Showdar skill and follow it: `showdar-understand`, `showdar-plan`, `showdar-design`, `showdar-build`, `showdar-debug`, `showdar-test`, `showdar-review`, `showdar-upgrade`, `showdar-ship`, `showdar-recover`, `showdar-git`, `showdar-requirements`, `showdar-quality`, `showdar-security`, or `showdar-ops`. If the requested name is ambiguous, choose the smallest matching skill from this list and say which one was selected.
|
|
5
|
+
|
|
6
|
+
Request: $ARGUMENTS
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Understand repository architecture and task-relevant change surface with Showdar
|
|
3
|
+
---
|
|
4
|
+
Load and follow `showdar-understand`. Analyze the repository or subsystem relevant to this request without implementing changes unless the user explicitly asks to switch workflows.
|
|
5
|
+
|
|
6
|
+
Request: $ARGUMENTS
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Upgrade frameworks, dependencies, runtimes, or platforms safely with Showdar
|
|
3
|
+
---
|
|
4
|
+
Load and follow `showdar-upgrade`. Establish compatibility, breaking changes, migration order, rollback, and affected-platform verification before claiming success.
|
|
5
|
+
|
|
6
|
+
Request: $ARGUMENTS
|
package/engine/csv.mjs
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export function parseCsv(text, { strict = true } = {}) {
|
|
2
|
+
const rows = [];
|
|
3
|
+
let row = [];
|
|
4
|
+
let field = '';
|
|
5
|
+
let quoted = false;
|
|
6
|
+
const pushRow = () => {
|
|
7
|
+
row.push(field);
|
|
8
|
+
rows.push(row);
|
|
9
|
+
row = [];
|
|
10
|
+
field = '';
|
|
11
|
+
};
|
|
12
|
+
for (let i = 0; i < text.length; i += 1) {
|
|
13
|
+
const ch = text[i];
|
|
14
|
+
if (quoted) {
|
|
15
|
+
if (ch === '"' && text[i + 1] === '"') { field += '"'; i += 1; }
|
|
16
|
+
else if (ch === '"') quoted = false;
|
|
17
|
+
else field += ch;
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
if (ch === '"') quoted = true;
|
|
21
|
+
else if (ch === ',') { row.push(field); field = ''; }
|
|
22
|
+
else if (ch === '\n') pushRow();
|
|
23
|
+
else if (ch !== '\r') field += ch;
|
|
24
|
+
}
|
|
25
|
+
if (quoted && strict) throw new Error('unterminated quoted field');
|
|
26
|
+
if (field.length || row.length) pushRow();
|
|
27
|
+
const clean = rows.filter((r) => r.some((value) => value.trim() !== ''));
|
|
28
|
+
if (!clean.length) return [];
|
|
29
|
+
const headers = clean[0].map((value) => value.trim());
|
|
30
|
+
if (strict && headers.some((header) => !header)) throw new Error('blank CSV header');
|
|
31
|
+
if (strict && new Set(headers.map((header) => header.toLowerCase())).size !== headers.length) throw new Error('duplicate CSV header');
|
|
32
|
+
return clean.slice(1).map((values) => {
|
|
33
|
+
if (strict && values.length !== headers.length) throw new Error(`CSV column count ${values.length} does not match header count ${headers.length}`);
|
|
34
|
+
return Object.fromEntries(headers.map((header, index) => [header, values[index] ?? '']));
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function stringifyCsv(rows, headers = rows.length ? Object.keys(rows[0]) : []) {
|
|
39
|
+
const escape = (value) => {
|
|
40
|
+
const raw = String(value ?? '');
|
|
41
|
+
if (!/[",\n\r]/.test(raw)) return raw;
|
|
42
|
+
return `"${raw.replaceAll('"', '""')}"`;
|
|
43
|
+
};
|
|
44
|
+
return [headers.map(escape).join(','), ...rows.map((row) => headers.map((header) => escape(row[header])).join(','))].join('\n') + '\n';
|
|
45
|
+
}
|