aw-ecc 1.4.21
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/.agents/skills/api-design/SKILL.md +523 -0
- package/.agents/skills/api-design/agents/openai.yaml +7 -0
- package/.agents/skills/article-writing/SKILL.md +85 -0
- package/.agents/skills/article-writing/agents/openai.yaml +7 -0
- package/.agents/skills/backend-patterns/SKILL.md +598 -0
- package/.agents/skills/backend-patterns/agents/openai.yaml +7 -0
- package/.agents/skills/bun-runtime/SKILL.md +84 -0
- package/.agents/skills/bun-runtime/agents/openai.yaml +7 -0
- package/.agents/skills/claude-api/SKILL.md +337 -0
- package/.agents/skills/claude-api/agents/openai.yaml +7 -0
- package/.agents/skills/coding-standards/SKILL.md +530 -0
- package/.agents/skills/coding-standards/agents/openai.yaml +7 -0
- package/.agents/skills/content-engine/SKILL.md +88 -0
- package/.agents/skills/content-engine/agents/openai.yaml +7 -0
- package/.agents/skills/crosspost/SKILL.md +188 -0
- package/.agents/skills/crosspost/agents/openai.yaml +7 -0
- package/.agents/skills/deep-research/SKILL.md +155 -0
- package/.agents/skills/deep-research/agents/openai.yaml +7 -0
- package/.agents/skills/dmux-workflows/SKILL.md +144 -0
- package/.agents/skills/dmux-workflows/agents/openai.yaml +7 -0
- package/.agents/skills/documentation-lookup/SKILL.md +90 -0
- package/.agents/skills/documentation-lookup/agents/openai.yaml +7 -0
- package/.agents/skills/e2e-testing/SKILL.md +326 -0
- package/.agents/skills/e2e-testing/agents/openai.yaml +7 -0
- package/.agents/skills/eval-harness/SKILL.md +236 -0
- package/.agents/skills/eval-harness/agents/openai.yaml +7 -0
- package/.agents/skills/everything-claude-code/SKILL.md +442 -0
- package/.agents/skills/everything-claude-code/agents/openai.yaml +6 -0
- package/.agents/skills/exa-search/SKILL.md +170 -0
- package/.agents/skills/exa-search/agents/openai.yaml +7 -0
- package/.agents/skills/fal-ai-media/SKILL.md +277 -0
- package/.agents/skills/fal-ai-media/agents/openai.yaml +7 -0
- package/.agents/skills/frontend-patterns/SKILL.md +642 -0
- package/.agents/skills/frontend-patterns/agents/openai.yaml +7 -0
- package/.agents/skills/frontend-slides/SKILL.md +184 -0
- package/.agents/skills/frontend-slides/STYLE_PRESETS.md +330 -0
- package/.agents/skills/frontend-slides/agents/openai.yaml +7 -0
- package/.agents/skills/investor-materials/SKILL.md +96 -0
- package/.agents/skills/investor-materials/agents/openai.yaml +7 -0
- package/.agents/skills/investor-outreach/SKILL.md +76 -0
- package/.agents/skills/investor-outreach/agents/openai.yaml +7 -0
- package/.agents/skills/market-research/SKILL.md +75 -0
- package/.agents/skills/market-research/agents/openai.yaml +7 -0
- package/.agents/skills/mcp-server-patterns/SKILL.md +67 -0
- package/.agents/skills/nextjs-turbopack/SKILL.md +44 -0
- package/.agents/skills/nextjs-turbopack/agents/openai.yaml +7 -0
- package/.agents/skills/security-review/SKILL.md +495 -0
- package/.agents/skills/security-review/agents/openai.yaml +7 -0
- package/.agents/skills/strategic-compact/SKILL.md +103 -0
- package/.agents/skills/strategic-compact/agents/openai.yaml +7 -0
- package/.agents/skills/tdd-workflow/SKILL.md +410 -0
- package/.agents/skills/tdd-workflow/agents/openai.yaml +7 -0
- package/.agents/skills/verification-loop/SKILL.md +126 -0
- package/.agents/skills/verification-loop/agents/openai.yaml +7 -0
- package/.agents/skills/video-editing/SKILL.md +308 -0
- package/.agents/skills/video-editing/agents/openai.yaml +7 -0
- package/.agents/skills/x-api/SKILL.md +214 -0
- package/.agents/skills/x-api/agents/openai.yaml +7 -0
- package/.claude-plugin/README.md +17 -0
- package/.claude-plugin/plugin.json +24 -0
- package/.codex/AGENTS.md +93 -0
- package/.codex/INSTALL.md +64 -0
- package/.codex/agents/docs-researcher.toml +9 -0
- package/.codex/agents/explorer.toml +9 -0
- package/.codex/agents/reviewer.toml +9 -0
- package/.codex/config.toml +108 -0
- package/.codex/hooks/aw-post-tool-use.sh +5 -0
- package/.codex/hooks/aw-pre-tool-use.sh +5 -0
- package/.codex/hooks/aw-session-start.sh +21 -0
- package/.codex/hooks/aw-stop.sh +5 -0
- package/.codex/hooks/aw-user-prompt-submit.sh +9 -0
- package/.codex/hooks.json +62 -0
- package/.cursor/INSTALL.md +40 -0
- package/.cursor/hooks/adapter.js +120 -0
- package/.cursor/hooks/after-file-edit.js +11 -0
- package/.cursor/hooks/after-mcp-execution.js +11 -0
- package/.cursor/hooks/after-shell-execution.js +11 -0
- package/.cursor/hooks/after-tab-file-edit.js +12 -0
- package/.cursor/hooks/aw-phase-adapter.js +43 -0
- package/.cursor/hooks/before-mcp-execution.js +11 -0
- package/.cursor/hooks/before-read-file.js +13 -0
- package/.cursor/hooks/before-shell-execution.js +11 -0
- package/.cursor/hooks/before-submit-prompt.js +41 -0
- package/.cursor/hooks/before-tab-file-read.js +13 -0
- package/.cursor/hooks/pre-compact.js +11 -0
- package/.cursor/hooks/session-end.js +11 -0
- package/.cursor/hooks/session-start.js +11 -0
- package/.cursor/hooks/shared/aw-phase-definitions.js +190 -0
- package/.cursor/hooks/shared/aw-phase-runner.js +61 -0
- package/.cursor/hooks/shared/session-start.sh +20 -0
- package/.cursor/hooks/shared/user-prompt-submit.sh +155 -0
- package/.cursor/hooks/stop.js +11 -0
- package/.cursor/hooks/subagent-start.js +10 -0
- package/.cursor/hooks/subagent-stop.js +10 -0
- package/.cursor/hooks.json +115 -0
- package/.cursor/rules/common-agents.md +53 -0
- package/.cursor/rules/common-coding-style.md +52 -0
- package/.cursor/rules/common-development-workflow.md +33 -0
- package/.cursor/rules/common-git-workflow.md +28 -0
- package/.cursor/rules/common-hooks.md +34 -0
- package/.cursor/rules/common-patterns.md +35 -0
- package/.cursor/rules/common-performance.md +59 -0
- package/.cursor/rules/common-security.md +33 -0
- package/.cursor/rules/common-testing.md +33 -0
- package/.cursor/rules/golang-coding-style.md +31 -0
- package/.cursor/rules/golang-hooks.md +16 -0
- package/.cursor/rules/golang-patterns.md +44 -0
- package/.cursor/rules/golang-security.md +33 -0
- package/.cursor/rules/golang-testing.md +30 -0
- package/.cursor/rules/kotlin-coding-style.md +39 -0
- package/.cursor/rules/kotlin-hooks.md +16 -0
- package/.cursor/rules/kotlin-patterns.md +50 -0
- package/.cursor/rules/kotlin-security.md +58 -0
- package/.cursor/rules/kotlin-testing.md +38 -0
- package/.cursor/rules/php-coding-style.md +25 -0
- package/.cursor/rules/php-hooks.md +21 -0
- package/.cursor/rules/php-patterns.md +23 -0
- package/.cursor/rules/php-security.md +24 -0
- package/.cursor/rules/php-testing.md +26 -0
- package/.cursor/rules/python-coding-style.md +42 -0
- package/.cursor/rules/python-hooks.md +19 -0
- package/.cursor/rules/python-patterns.md +39 -0
- package/.cursor/rules/python-security.md +30 -0
- package/.cursor/rules/python-testing.md +38 -0
- package/.cursor/rules/swift-coding-style.md +47 -0
- package/.cursor/rules/swift-hooks.md +20 -0
- package/.cursor/rules/swift-patterns.md +66 -0
- package/.cursor/rules/swift-security.md +33 -0
- package/.cursor/rules/swift-testing.md +45 -0
- package/.cursor/rules/typescript-coding-style.md +63 -0
- package/.cursor/rules/typescript-hooks.md +20 -0
- package/.cursor/rules/typescript-patterns.md +50 -0
- package/.cursor/rules/typescript-security.md +26 -0
- package/.cursor/rules/typescript-testing.md +16 -0
- package/.cursor/skills/article-writing/SKILL.md +85 -0
- package/.cursor/skills/bun-runtime/SKILL.md +84 -0
- package/.cursor/skills/content-engine/SKILL.md +88 -0
- package/.cursor/skills/documentation-lookup/SKILL.md +90 -0
- package/.cursor/skills/frontend-slides/SKILL.md +184 -0
- package/.cursor/skills/frontend-slides/STYLE_PRESETS.md +330 -0
- package/.cursor/skills/investor-materials/SKILL.md +96 -0
- package/.cursor/skills/investor-outreach/SKILL.md +76 -0
- package/.cursor/skills/market-research/SKILL.md +75 -0
- package/.cursor/skills/mcp-server-patterns/SKILL.md +67 -0
- package/.cursor/skills/nextjs-turbopack/SKILL.md +44 -0
- package/.opencode/MIGRATION.md +368 -0
- package/.opencode/README.md +204 -0
- package/.opencode/commands/build-fix.md +56 -0
- package/.opencode/commands/checkpoint.md +67 -0
- package/.opencode/commands/code-review.md +68 -0
- package/.opencode/commands/e2e.md +105 -0
- package/.opencode/commands/eval.md +88 -0
- package/.opencode/commands/evolve.md +36 -0
- package/.opencode/commands/go-build.md +87 -0
- package/.opencode/commands/go-review.md +71 -0
- package/.opencode/commands/go-test.md +131 -0
- package/.opencode/commands/harness-audit.md +71 -0
- package/.opencode/commands/instinct-export.md +93 -0
- package/.opencode/commands/instinct-import.md +88 -0
- package/.opencode/commands/instinct-status.md +29 -0
- package/.opencode/commands/learn.md +61 -0
- package/.opencode/commands/loop-start.md +32 -0
- package/.opencode/commands/loop-status.md +24 -0
- package/.opencode/commands/model-route.md +26 -0
- package/.opencode/commands/orchestrate.md +88 -0
- package/.opencode/commands/plan.md +49 -0
- package/.opencode/commands/projects.md +23 -0
- package/.opencode/commands/promote.md +23 -0
- package/.opencode/commands/quality-gate.md +29 -0
- package/.opencode/commands/refactor-clean.md +102 -0
- package/.opencode/commands/rust-build.md +78 -0
- package/.opencode/commands/rust-review.md +65 -0
- package/.opencode/commands/rust-test.md +104 -0
- package/.opencode/commands/security.md +89 -0
- package/.opencode/commands/setup-pm.md +67 -0
- package/.opencode/commands/skill-create.md +117 -0
- package/.opencode/commands/tdd.md +66 -0
- package/.opencode/commands/test-coverage.md +80 -0
- package/.opencode/commands/update-codemaps.md +81 -0
- package/.opencode/commands/update-docs.md +67 -0
- package/.opencode/commands/verify.md +67 -0
- package/.opencode/index.ts +79 -0
- package/.opencode/instructions/INSTRUCTIONS.md +337 -0
- package/.opencode/opencode.json +319 -0
- package/.opencode/package.json +70 -0
- package/.opencode/plugins/ecc-hooks.ts +455 -0
- package/.opencode/plugins/index.ts +12 -0
- package/.opencode/prompts/agents/architect.txt +175 -0
- package/.opencode/prompts/agents/build-error-resolver.txt +233 -0
- package/.opencode/prompts/agents/code-reviewer.txt +103 -0
- package/.opencode/prompts/agents/database-reviewer.txt +247 -0
- package/.opencode/prompts/agents/doc-updater.txt +192 -0
- package/.opencode/prompts/agents/e2e-runner.txt +305 -0
- package/.opencode/prompts/agents/go-build-resolver.txt +325 -0
- package/.opencode/prompts/agents/go-reviewer.txt +241 -0
- package/.opencode/prompts/agents/planner.txt +112 -0
- package/.opencode/prompts/agents/refactor-cleaner.txt +241 -0
- package/.opencode/prompts/agents/rust-build-resolver.txt +93 -0
- package/.opencode/prompts/agents/rust-reviewer.txt +61 -0
- package/.opencode/prompts/agents/security-reviewer.txt +207 -0
- package/.opencode/prompts/agents/tdd-guide.txt +211 -0
- package/.opencode/tools/check-coverage.ts +170 -0
- package/.opencode/tools/format-code.ts +68 -0
- package/.opencode/tools/git-summary.ts +54 -0
- package/.opencode/tools/index.ts +13 -0
- package/.opencode/tools/lint-check.ts +85 -0
- package/.opencode/tools/run-tests.ts +139 -0
- package/.opencode/tools/security-audit.ts +277 -0
- package/.opencode/tsconfig.json +29 -0
- package/AGENTS.md +124 -0
- package/LICENSE +21 -0
- package/README.md +146 -0
- package/README.zh-CN.md +552 -0
- package/agents/architect.md +211 -0
- package/agents/build-error-resolver.md +114 -0
- package/agents/chief-of-staff.md +151 -0
- package/agents/code-reviewer.md +237 -0
- package/agents/cpp-build-resolver.md +90 -0
- package/agents/cpp-reviewer.md +72 -0
- package/agents/database-reviewer.md +91 -0
- package/agents/doc-updater.md +107 -0
- package/agents/docs-lookup.md +68 -0
- package/agents/e2e-runner.md +107 -0
- package/agents/evals/code-reviewer-scenarios.json +23 -0
- package/agents/flutter-reviewer.md +243 -0
- package/agents/go-build-resolver.md +94 -0
- package/agents/go-reviewer.md +76 -0
- package/agents/harness-optimizer.md +35 -0
- package/agents/java-build-resolver.md +153 -0
- package/agents/java-reviewer.md +92 -0
- package/agents/kotlin-build-resolver.md +118 -0
- package/agents/kotlin-reviewer.md +159 -0
- package/agents/loop-operator.md +36 -0
- package/agents/planner.md +212 -0
- package/agents/python-reviewer.md +98 -0
- package/agents/pytorch-build-resolver.md +120 -0
- package/agents/refactor-cleaner.md +85 -0
- package/agents/rust-build-resolver.md +148 -0
- package/agents/rust-reviewer.md +94 -0
- package/agents/security-reviewer.md +108 -0
- package/agents/tdd-guide.md +91 -0
- package/agents/typescript-reviewer.md +112 -0
- package/commands/aside.md +164 -0
- package/commands/brainstorm.md +16 -0
- package/commands/build-fix.md +70 -0
- package/commands/build.md +91 -0
- package/commands/checkpoint.md +74 -0
- package/commands/claw.md +51 -0
- package/commands/code-review.md +24 -0
- package/commands/context-budget.md +29 -0
- package/commands/cpp-build.md +174 -0
- package/commands/cpp-review.md +132 -0
- package/commands/cpp-test.md +252 -0
- package/commands/deploy.md +75 -0
- package/commands/devfleet.md +92 -0
- package/commands/docs.md +31 -0
- package/commands/e2e.md +373 -0
- package/commands/eval.md +120 -0
- package/commands/evolve.md +178 -0
- package/commands/execute.md +51 -0
- package/commands/finish.md +22 -0
- package/commands/go-build.md +184 -0
- package/commands/go-review.md +148 -0
- package/commands/go-test.md +269 -0
- package/commands/gradle-build.md +70 -0
- package/commands/harness-audit.md +71 -0
- package/commands/instinct-export.md +66 -0
- package/commands/instinct-import.md +114 -0
- package/commands/instinct-status.md +59 -0
- package/commands/investigate.md +63 -0
- package/commands/kotlin-build.md +175 -0
- package/commands/kotlin-review.md +140 -0
- package/commands/kotlin-test.md +313 -0
- package/commands/learn-eval.md +116 -0
- package/commands/learn.md +70 -0
- package/commands/loop-start.md +32 -0
- package/commands/loop-status.md +24 -0
- package/commands/model-route.md +26 -0
- package/commands/multi-backend.md +166 -0
- package/commands/multi-execute.md +324 -0
- package/commands/multi-frontend.md +165 -0
- package/commands/multi-plan.md +277 -0
- package/commands/multi-workflow.md +200 -0
- package/commands/orchestrate.md +240 -0
- package/commands/plan.md +130 -0
- package/commands/pm2.md +272 -0
- package/commands/projects.md +39 -0
- package/commands/promote.md +41 -0
- package/commands/prompt-optimize.md +38 -0
- package/commands/prune.md +31 -0
- package/commands/python-review.md +297 -0
- package/commands/quality-gate.md +29 -0
- package/commands/refactor-clean.md +89 -0
- package/commands/resume-session.md +155 -0
- package/commands/review.md +64 -0
- package/commands/rules-distill.md +11 -0
- package/commands/rust-build.md +188 -0
- package/commands/rust-review.md +142 -0
- package/commands/rust-test.md +309 -0
- package/commands/save-session.md +275 -0
- package/commands/sessions.md +333 -0
- package/commands/setup-pm.md +80 -0
- package/commands/ship.md +77 -0
- package/commands/skill-create.md +174 -0
- package/commands/skill-health.md +54 -0
- package/commands/tdd.md +20 -0
- package/commands/test-coverage.md +77 -0
- package/commands/test.md +64 -0
- package/commands/update-codemaps.md +72 -0
- package/commands/update-docs.md +84 -0
- package/commands/verify.md +55 -0
- package/contexts/dev.md +20 -0
- package/contexts/research.md +26 -0
- package/contexts/review.md +22 -0
- package/examples/CLAUDE.md +100 -0
- package/examples/statusline.json +19 -0
- package/examples/user-CLAUDE.md +109 -0
- package/hooks/README.md +219 -0
- package/hooks/hooks.json +320 -0
- package/hooks/run-hook.cmd +31 -0
- package/hooks/session-start +6 -0
- package/install.ps1 +38 -0
- package/install.sh +17 -0
- package/manifests/install-components.json +415 -0
- package/manifests/install-modules.json +500 -0
- package/manifests/install-profiles.json +80 -0
- package/mcp-configs/mcp-servers.json +153 -0
- package/package.json +131 -0
- package/plugins/README.md +85 -0
- package/rules/README.md +106 -0
- package/rules/common/agents.md +50 -0
- package/rules/common/coding-style.md +48 -0
- package/rules/common/development-workflow.md +38 -0
- package/rules/common/git-workflow.md +24 -0
- package/rules/common/hooks.md +30 -0
- package/rules/common/patterns.md +31 -0
- package/rules/common/performance.md +55 -0
- package/rules/common/security.md +29 -0
- package/rules/common/testing.md +29 -0
- package/rules/cpp/coding-style.md +44 -0
- package/rules/cpp/hooks.md +39 -0
- package/rules/cpp/patterns.md +51 -0
- package/rules/cpp/security.md +51 -0
- package/rules/cpp/testing.md +44 -0
- package/rules/csharp/coding-style.md +72 -0
- package/rules/csharp/hooks.md +25 -0
- package/rules/csharp/patterns.md +50 -0
- package/rules/csharp/security.md +58 -0
- package/rules/csharp/testing.md +46 -0
- package/rules/golang/coding-style.md +32 -0
- package/rules/golang/hooks.md +17 -0
- package/rules/golang/patterns.md +45 -0
- package/rules/golang/security.md +34 -0
- package/rules/golang/testing.md +31 -0
- package/rules/java/coding-style.md +114 -0
- package/rules/java/hooks.md +18 -0
- package/rules/java/patterns.md +146 -0
- package/rules/java/security.md +100 -0
- package/rules/java/testing.md +131 -0
- package/rules/kotlin/coding-style.md +86 -0
- package/rules/kotlin/hooks.md +17 -0
- package/rules/kotlin/patterns.md +146 -0
- package/rules/kotlin/security.md +82 -0
- package/rules/kotlin/testing.md +128 -0
- package/rules/perl/coding-style.md +46 -0
- package/rules/perl/hooks.md +22 -0
- package/rules/perl/patterns.md +76 -0
- package/rules/perl/security.md +69 -0
- package/rules/perl/testing.md +54 -0
- package/rules/php/coding-style.md +40 -0
- package/rules/php/hooks.md +24 -0
- package/rules/php/patterns.md +33 -0
- package/rules/php/security.md +37 -0
- package/rules/php/testing.md +39 -0
- package/rules/python/coding-style.md +42 -0
- package/rules/python/hooks.md +19 -0
- package/rules/python/patterns.md +39 -0
- package/rules/python/security.md +30 -0
- package/rules/python/testing.md +38 -0
- package/rules/rust/coding-style.md +151 -0
- package/rules/rust/hooks.md +16 -0
- package/rules/rust/patterns.md +168 -0
- package/rules/rust/security.md +141 -0
- package/rules/rust/testing.md +154 -0
- package/rules/swift/coding-style.md +47 -0
- package/rules/swift/hooks.md +20 -0
- package/rules/swift/patterns.md +66 -0
- package/rules/swift/security.md +33 -0
- package/rules/swift/testing.md +45 -0
- package/rules/typescript/coding-style.md +199 -0
- package/rules/typescript/hooks.md +22 -0
- package/rules/typescript/patterns.md +52 -0
- package/rules/typescript/security.md +28 -0
- package/rules/typescript/testing.md +18 -0
- package/schemas/ecc-install-config.schema.json +58 -0
- package/schemas/hooks.schema.json +197 -0
- package/schemas/install-components.schema.json +58 -0
- package/schemas/install-modules.schema.json +105 -0
- package/schemas/install-profiles.schema.json +45 -0
- package/schemas/install-state.schema.json +210 -0
- package/schemas/package-manager.schema.json +23 -0
- package/schemas/plugin.schema.json +58 -0
- package/schemas/provenance.schema.json +31 -0
- package/schemas/state-store.schema.json +316 -0
- package/scripts/ci/catalog.js +245 -0
- package/scripts/ci/validate-agents.js +81 -0
- package/scripts/ci/validate-commands.js +136 -0
- package/scripts/ci/validate-hooks.js +239 -0
- package/scripts/ci/validate-install-manifests.js +214 -0
- package/scripts/ci/validate-no-personal-paths.js +63 -0
- package/scripts/ci/validate-rules.js +81 -0
- package/scripts/ci/validate-skills.js +56 -0
- package/scripts/claw.js +473 -0
- package/scripts/codex/merge-mcp-config.js +304 -0
- package/scripts/cursor-aw-home/hooks.json +115 -0
- package/scripts/cursor-aw-hooks/adapter.js +120 -0
- package/scripts/cursor-aw-hooks/after-file-edit.js +11 -0
- package/scripts/cursor-aw-hooks/after-mcp-execution.js +11 -0
- package/scripts/cursor-aw-hooks/after-shell-execution.js +11 -0
- package/scripts/cursor-aw-hooks/aw-phase-adapter.js +43 -0
- package/scripts/cursor-aw-hooks/before-mcp-execution.js +11 -0
- package/scripts/cursor-aw-hooks/before-shell-execution.js +11 -0
- package/scripts/cursor-aw-hooks/before-submit-prompt.js +41 -0
- package/scripts/cursor-aw-hooks/pre-compact.js +11 -0
- package/scripts/cursor-aw-hooks/session-end.js +11 -0
- package/scripts/cursor-aw-hooks/session-start.js +11 -0
- package/scripts/cursor-aw-hooks/stop.js +11 -0
- package/scripts/doctor.js +110 -0
- package/scripts/ecc.js +208 -0
- package/scripts/generate-aw-hooks.js +110 -0
- package/scripts/harness-audit.js +512 -0
- package/scripts/hooks/auto-tmux-dev.js +88 -0
- package/scripts/hooks/check-console-log.js +71 -0
- package/scripts/hooks/check-hook-enabled.js +12 -0
- package/scripts/hooks/config-protection.js +125 -0
- package/scripts/hooks/cost-tracker.js +78 -0
- package/scripts/hooks/doc-file-warning.js +63 -0
- package/scripts/hooks/evaluate-session.js +100 -0
- package/scripts/hooks/governance-capture.js +280 -0
- package/scripts/hooks/insaits-security-monitor.py +269 -0
- package/scripts/hooks/insaits-security-wrapper.js +88 -0
- package/scripts/hooks/mcp-health-check.js +588 -0
- package/scripts/hooks/post-bash-build-complete.js +27 -0
- package/scripts/hooks/post-bash-pr-created.js +37 -0
- package/scripts/hooks/post-edit-console-warn.js +54 -0
- package/scripts/hooks/post-edit-format.js +109 -0
- package/scripts/hooks/post-edit-typecheck.js +96 -0
- package/scripts/hooks/post-mcp-log.js +27 -0
- package/scripts/hooks/pre-bash-dev-server-block.js +187 -0
- package/scripts/hooks/pre-bash-git-push-reminder.js +28 -0
- package/scripts/hooks/pre-bash-tmux-reminder.js +33 -0
- package/scripts/hooks/pre-compact.js +48 -0
- package/scripts/hooks/pre-mcp-log.js +26 -0
- package/scripts/hooks/pre-write-doc-warn.js +9 -0
- package/scripts/hooks/quality-gate.js +168 -0
- package/scripts/hooks/run-with-flags-shell.sh +32 -0
- package/scripts/hooks/run-with-flags.js +120 -0
- package/scripts/hooks/session-end-marker.js +29 -0
- package/scripts/hooks/session-end.js +301 -0
- package/scripts/hooks/session-start-rules-context.sh +5 -0
- package/scripts/hooks/session-start.js +98 -0
- package/scripts/hooks/shared/aw-phase-definitions.js +190 -0
- package/scripts/hooks/shared/aw-phase-runner.js +61 -0
- package/scripts/hooks/shared/session-start.sh +20 -0
- package/scripts/hooks/shared/user-prompt-submit.sh +155 -0
- package/scripts/hooks/suggest-compact.js +80 -0
- package/scripts/install-apply.js +140 -0
- package/scripts/install-plan.js +254 -0
- package/scripts/lib/agent-compress.js +244 -0
- package/scripts/lib/aw-harness-registry.js +122 -0
- package/scripts/lib/aw-hook-contract.js +86 -0
- package/scripts/lib/claude-aw-hook-files.js +28 -0
- package/scripts/lib/claude-hook-config.js +76 -0
- package/scripts/lib/codex-aw-hook-files.js +38 -0
- package/scripts/lib/codex-hook-config.js +88 -0
- package/scripts/lib/cursor-aw-hook-files.js +62 -0
- package/scripts/lib/cursor-hook-config.js +148 -0
- package/scripts/lib/hook-flags.js +74 -0
- package/scripts/lib/inspection.js +212 -0
- package/scripts/lib/install/apply.js +23 -0
- package/scripts/lib/install/config.js +82 -0
- package/scripts/lib/install/request.js +120 -0
- package/scripts/lib/install/runtime.js +54 -0
- package/scripts/lib/install-executor.js +778 -0
- package/scripts/lib/install-lifecycle.js +1311 -0
- package/scripts/lib/install-manifests.js +448 -0
- package/scripts/lib/install-state.js +313 -0
- package/scripts/lib/install-targets/antigravity-project.js +69 -0
- package/scripts/lib/install-targets/claude-home.js +54 -0
- package/scripts/lib/install-targets/codex-home.js +62 -0
- package/scripts/lib/install-targets/cursor-project.js +80 -0
- package/scripts/lib/install-targets/helpers.js +307 -0
- package/scripts/lib/install-targets/opencode-home.js +10 -0
- package/scripts/lib/install-targets/registry.js +66 -0
- package/scripts/lib/orchestration-session.js +299 -0
- package/scripts/lib/package-manager.d.ts +119 -0
- package/scripts/lib/package-manager.js +431 -0
- package/scripts/lib/project-detect.js +428 -0
- package/scripts/lib/resolve-ecc-root.js +89 -0
- package/scripts/lib/resolve-formatter.js +185 -0
- package/scripts/lib/session-adapters/canonical-session.js +531 -0
- package/scripts/lib/session-adapters/claude-history.js +160 -0
- package/scripts/lib/session-adapters/dmux-tmux.js +90 -0
- package/scripts/lib/session-adapters/registry.js +127 -0
- package/scripts/lib/session-aliases.d.ts +136 -0
- package/scripts/lib/session-aliases.js +481 -0
- package/scripts/lib/session-manager.d.ts +131 -0
- package/scripts/lib/session-manager.js +464 -0
- package/scripts/lib/shell-split.js +86 -0
- package/scripts/lib/skill-evolution/dashboard.js +401 -0
- package/scripts/lib/skill-evolution/health.js +263 -0
- package/scripts/lib/skill-evolution/index.js +20 -0
- package/scripts/lib/skill-evolution/provenance.js +187 -0
- package/scripts/lib/skill-evolution/tracker.js +146 -0
- package/scripts/lib/skill-evolution/versioning.js +237 -0
- package/scripts/lib/skill-improvement/amendify.js +89 -0
- package/scripts/lib/skill-improvement/evaluate.js +59 -0
- package/scripts/lib/skill-improvement/health.js +118 -0
- package/scripts/lib/skill-improvement/observations.js +108 -0
- package/scripts/lib/state-store/index.js +191 -0
- package/scripts/lib/state-store/migrations.js +178 -0
- package/scripts/lib/state-store/queries.js +697 -0
- package/scripts/lib/state-store/schema.js +92 -0
- package/scripts/lib/tmux-worktree-orchestrator.js +475 -0
- package/scripts/lib/utils.d.ts +183 -0
- package/scripts/lib/utils.js +564 -0
- package/scripts/list-installed.js +90 -0
- package/scripts/orchestrate-codex-worker.sh +107 -0
- package/scripts/orchestrate-worktrees.js +40 -0
- package/scripts/orchestration-status.js +82 -0
- package/scripts/repair.js +97 -0
- package/scripts/session-inspect.js +150 -0
- package/scripts/sessions-cli.js +177 -0
- package/scripts/setup-package-manager.js +204 -0
- package/scripts/skill-create-output.js +244 -0
- package/scripts/status.js +176 -0
- package/scripts/uninstall.js +96 -0
- package/skills/agent-eval/SKILL.md +145 -0
- package/skills/agent-harness-construction/SKILL.md +73 -0
- package/skills/agentic-engineering/SKILL.md +63 -0
- package/skills/ai-first-engineering/SKILL.md +51 -0
- package/skills/ai-regression-testing/SKILL.md +385 -0
- package/skills/android-clean-architecture/SKILL.md +339 -0
- package/skills/api-and-interface-design/SKILL.md +75 -0
- package/skills/api-design/SKILL.md +523 -0
- package/skills/architecture-decision-records/SKILL.md +179 -0
- package/skills/article-writing/SKILL.md +85 -0
- package/skills/autonomous-loops/SKILL.md +610 -0
- package/skills/aw-brainstorm/SKILL.md +115 -0
- package/skills/aw-build/SKILL.md +189 -0
- package/skills/aw-build/evals/build-stage-cases.json +28 -0
- package/skills/aw-debug/SKILL.md +49 -0
- package/skills/aw-deploy/SKILL.md +101 -0
- package/skills/aw-deploy/evals/deploy-stage-cases.json +32 -0
- package/skills/aw-execute/SKILL.md +47 -0
- package/skills/aw-execute/references/mode-code.md +47 -0
- package/skills/aw-execute/references/mode-docs.md +28 -0
- package/skills/aw-execute/references/mode-infra.md +44 -0
- package/skills/aw-execute/references/mode-migration.md +58 -0
- package/skills/aw-execute/references/worker-implementer.md +26 -0
- package/skills/aw-execute/references/worker-parallel-worker.md +23 -0
- package/skills/aw-execute/references/worker-quality-reviewer.md +23 -0
- package/skills/aw-execute/references/worker-spec-reviewer.md +23 -0
- package/skills/aw-execute/scripts/build-worker-bundle.js +229 -0
- package/skills/aw-finish/SKILL.md +111 -0
- package/skills/aw-investigate/SKILL.md +109 -0
- package/skills/aw-plan/SKILL.md +399 -0
- package/skills/aw-prepare/SKILL.md +118 -0
- package/skills/aw-review/SKILL.md +123 -0
- package/skills/aw-rules/SKILL.md +129 -0
- package/skills/aw-rules/references/known-hallucinations.md +43 -0
- package/skills/aw-rules/references/verification-sources.md +50 -0
- package/skills/aw-ship/SKILL.md +115 -0
- package/skills/aw-spec/SKILL.md +128 -0
- package/skills/aw-tasks/SKILL.md +155 -0
- package/skills/aw-test/SKILL.md +118 -0
- package/skills/aw-verify/SKILL.md +51 -0
- package/skills/aw-yolo/SKILL.md +111 -0
- package/skills/backend-patterns/SKILL.md +598 -0
- package/skills/benchmark/SKILL.md +87 -0
- package/skills/blueprint/SKILL.md +105 -0
- package/skills/browser-qa/SKILL.md +81 -0
- package/skills/browser-testing-with-devtools/SKILL.md +81 -0
- package/skills/bun-runtime/SKILL.md +84 -0
- package/skills/canary-watch/SKILL.md +93 -0
- package/skills/carrier-relationship-management/SKILL.md +212 -0
- package/skills/ci-cd-and-automation/SKILL.md +71 -0
- package/skills/claude-api/SKILL.md +337 -0
- package/skills/claude-devfleet/SKILL.md +103 -0
- package/skills/click-path-audit/SKILL.md +244 -0
- package/skills/clickhouse-io/SKILL.md +439 -0
- package/skills/code-simplification/SKILL.md +74 -0
- package/skills/codebase-onboarding/SKILL.md +233 -0
- package/skills/coding-standards/SKILL.md +530 -0
- package/skills/compose-multiplatform-patterns/SKILL.md +299 -0
- package/skills/configure-ecc/SKILL.md +367 -0
- package/skills/content-engine/SKILL.md +88 -0
- package/skills/content-hash-cache-pattern/SKILL.md +161 -0
- package/skills/context-budget/SKILL.md +135 -0
- package/skills/context-engineering/SKILL.md +74 -0
- package/skills/continuous-agent-loop/SKILL.md +45 -0
- package/skills/continuous-learning/SKILL.md +119 -0
- package/skills/continuous-learning/config.json +18 -0
- package/skills/continuous-learning/evaluate-session.sh +69 -0
- package/skills/continuous-learning-v2/SKILL.md +365 -0
- package/skills/continuous-learning-v2/agents/observer-loop.sh +191 -0
- package/skills/continuous-learning-v2/agents/observer.md +198 -0
- package/skills/continuous-learning-v2/agents/session-guardian.sh +150 -0
- package/skills/continuous-learning-v2/agents/start-observer.sh +240 -0
- package/skills/continuous-learning-v2/config.json +8 -0
- package/skills/continuous-learning-v2/hooks/observe.sh +412 -0
- package/skills/continuous-learning-v2/scripts/detect-project.sh +228 -0
- package/skills/continuous-learning-v2/scripts/instinct-cli.py +1426 -0
- package/skills/continuous-learning-v2/scripts/test_parse_instinct.py +984 -0
- package/skills/cost-aware-llm-pipeline/SKILL.md +183 -0
- package/skills/cpp-coding-standards/SKILL.md +723 -0
- package/skills/cpp-testing/SKILL.md +324 -0
- package/skills/crosspost/SKILL.md +190 -0
- package/skills/customs-trade-compliance/SKILL.md +263 -0
- package/skills/data-scraper-agent/SKILL.md +764 -0
- package/skills/database-migrations/SKILL.md +429 -0
- package/skills/deep-research/SKILL.md +155 -0
- package/skills/deployment-patterns/SKILL.md +427 -0
- package/skills/deprecation-and-migration/SKILL.md +75 -0
- package/skills/design-system/SKILL.md +76 -0
- package/skills/django-patterns/SKILL.md +734 -0
- package/skills/django-security/SKILL.md +593 -0
- package/skills/django-tdd/SKILL.md +729 -0
- package/skills/django-verification/SKILL.md +469 -0
- package/skills/dmux-workflows/SKILL.md +191 -0
- package/skills/docker-patterns/SKILL.md +364 -0
- package/skills/documentation-and-adrs/SKILL.md +75 -0
- package/skills/documentation-lookup/SKILL.md +90 -0
- package/skills/e2e-testing/SKILL.md +326 -0
- package/skills/energy-procurement/SKILL.md +228 -0
- package/skills/enterprise-agent-ops/SKILL.md +50 -0
- package/skills/eval-harness/SKILL.md +270 -0
- package/skills/exa-search/SKILL.md +103 -0
- package/skills/fal-ai-media/SKILL.md +284 -0
- package/skills/flutter-dart-code-review/SKILL.md +435 -0
- package/skills/foundation-models-on-device/SKILL.md +243 -0
- package/skills/frontend-patterns/SKILL.md +642 -0
- package/skills/frontend-slides/SKILL.md +184 -0
- package/skills/frontend-slides/STYLE_PRESETS.md +330 -0
- package/skills/frontend-ui-engineering/SKILL.md +68 -0
- package/skills/git-workflow-and-versioning/SKILL.md +75 -0
- package/skills/golang-patterns/SKILL.md +674 -0
- package/skills/golang-testing/SKILL.md +720 -0
- package/skills/idea-refine/SKILL.md +84 -0
- package/skills/incremental-implementation/SKILL.md +86 -0
- package/skills/inventory-demand-planning/SKILL.md +247 -0
- package/skills/investor-materials/SKILL.md +96 -0
- package/skills/investor-outreach/SKILL.md +76 -0
- package/skills/iterative-retrieval/SKILL.md +211 -0
- package/skills/java-coding-standards/SKILL.md +147 -0
- package/skills/jpa-patterns/SKILL.md +151 -0
- package/skills/kotlin-coroutines-flows/SKILL.md +284 -0
- package/skills/kotlin-exposed-patterns/SKILL.md +719 -0
- package/skills/kotlin-ktor-patterns/SKILL.md +689 -0
- package/skills/kotlin-patterns/SKILL.md +711 -0
- package/skills/kotlin-testing/SKILL.md +824 -0
- package/skills/laravel-patterns/SKILL.md +415 -0
- package/skills/laravel-security/SKILL.md +285 -0
- package/skills/laravel-tdd/SKILL.md +283 -0
- package/skills/laravel-verification/SKILL.md +179 -0
- package/skills/liquid-glass-design/SKILL.md +279 -0
- package/skills/logistics-exception-management/SKILL.md +222 -0
- package/skills/market-research/SKILL.md +75 -0
- package/skills/mcp-server-patterns/SKILL.md +67 -0
- package/skills/nanoclaw-repl/SKILL.md +33 -0
- package/skills/nextjs-turbopack/SKILL.md +44 -0
- package/skills/nutrient-document-processing/SKILL.md +167 -0
- package/skills/nuxt4-patterns/SKILL.md +100 -0
- package/skills/performance-optimization/SKILL.md +77 -0
- package/skills/perl-patterns/SKILL.md +504 -0
- package/skills/perl-security/SKILL.md +503 -0
- package/skills/perl-testing/SKILL.md +475 -0
- package/skills/plankton-code-quality/SKILL.md +236 -0
- package/skills/postgres-patterns/SKILL.md +147 -0
- package/skills/product-lens/SKILL.md +79 -0
- package/skills/production-scheduling/SKILL.md +238 -0
- package/skills/project-guidelines-example/SKILL.md +349 -0
- package/skills/prompt-optimizer/SKILL.md +397 -0
- package/skills/python-patterns/SKILL.md +750 -0
- package/skills/python-testing/SKILL.md +816 -0
- package/skills/pytorch-patterns/SKILL.md +396 -0
- package/skills/quality-nonconformance/SKILL.md +260 -0
- package/skills/ralphinho-rfc-pipeline/SKILL.md +67 -0
- package/skills/regex-vs-llm-structured-text/SKILL.md +220 -0
- package/skills/returns-reverse-logistics/SKILL.md +240 -0
- package/skills/rules-distill/SKILL.md +264 -0
- package/skills/rules-distill/scripts/scan-rules.sh +58 -0
- package/skills/rules-distill/scripts/scan-skills.sh +129 -0
- package/skills/rust-patterns/SKILL.md +499 -0
- package/skills/rust-testing/SKILL.md +500 -0
- package/skills/safety-guard/SKILL.md +69 -0
- package/skills/santa-method/SKILL.md +306 -0
- package/skills/search-first/SKILL.md +161 -0
- package/skills/security-and-hardening/SKILL.md +70 -0
- package/skills/security-review/SKILL.md +495 -0
- package/skills/security-review/cloud-infrastructure-security.md +361 -0
- package/skills/security-scan/SKILL.md +165 -0
- package/skills/skill-comply/SKILL.md +58 -0
- package/skills/skill-comply/fixtures/compliant_trace.jsonl +5 -0
- package/skills/skill-comply/fixtures/noncompliant_trace.jsonl +3 -0
- package/skills/skill-comply/fixtures/tdd_spec.yaml +44 -0
- package/skills/skill-comply/prompts/classifier.md +24 -0
- package/skills/skill-comply/prompts/scenario_generator.md +62 -0
- package/skills/skill-comply/prompts/spec_generator.md +42 -0
- package/skills/skill-comply/pyproject.toml +15 -0
- package/skills/skill-comply/scripts/__init__.py +0 -0
- package/skills/skill-comply/scripts/classifier.py +85 -0
- package/skills/skill-comply/scripts/grader.py +122 -0
- package/skills/skill-comply/scripts/parser.py +107 -0
- package/skills/skill-comply/scripts/report.py +170 -0
- package/skills/skill-comply/scripts/run.py +127 -0
- package/skills/skill-comply/scripts/runner.py +161 -0
- package/skills/skill-comply/scripts/scenario_generator.py +70 -0
- package/skills/skill-comply/scripts/spec_generator.py +72 -0
- package/skills/skill-comply/scripts/utils.py +13 -0
- package/skills/skill-comply/tests/test_grader.py +137 -0
- package/skills/skill-comply/tests/test_parser.py +90 -0
- package/skills/skill-quality-review/SKILL.md +102 -0
- package/skills/skill-quality-review/references/review-rubric.md +112 -0
- package/skills/skill-stocktake/SKILL.md +197 -0
- package/skills/skill-stocktake/scripts/quick-diff.sh +87 -0
- package/skills/skill-stocktake/scripts/save-results.sh +56 -0
- package/skills/skill-stocktake/scripts/scan.sh +170 -0
- package/skills/springboot-patterns/SKILL.md +314 -0
- package/skills/springboot-security/SKILL.md +272 -0
- package/skills/springboot-tdd/SKILL.md +158 -0
- package/skills/springboot-verification/SKILL.md +231 -0
- package/skills/strategic-compact/SKILL.md +131 -0
- package/skills/strategic-compact/suggest-compact.sh +54 -0
- package/skills/swift-actor-persistence/SKILL.md +143 -0
- package/skills/swift-concurrency-6-2/SKILL.md +216 -0
- package/skills/swift-protocol-di-testing/SKILL.md +190 -0
- package/skills/swiftui-patterns/SKILL.md +259 -0
- package/skills/tdd-workflow/SKILL.md +145 -0
- package/skills/team-builder/SKILL.md +161 -0
- package/skills/using-aw-skills/SKILL.md +290 -0
- package/skills/using-aw-skills/evals/skill-trigger-cases.tsv +25 -0
- package/skills/using-aw-skills/evals/test-skill-triggers.sh +171 -0
- package/skills/using-aw-skills/hooks/hooks.json +9 -0
- package/skills/using-aw-skills/hooks/session-start.sh +188 -0
- package/skills/using-platform-skills/SKILL.md +163 -0
- package/skills/using-platform-skills/evals/platform-selection-cases.json +52 -0
- package/skills/verification-loop/SKILL.md +126 -0
- package/skills/video-editing/SKILL.md +310 -0
- package/skills/videodb/SKILL.md +374 -0
- package/skills/videodb/reference/api-reference.md +550 -0
- package/skills/videodb/reference/capture-reference.md +407 -0
- package/skills/videodb/reference/capture.md +101 -0
- package/skills/videodb/reference/editor.md +443 -0
- package/skills/videodb/reference/generative.md +331 -0
- package/skills/videodb/reference/rtstream-reference.md +564 -0
- package/skills/videodb/reference/rtstream.md +65 -0
- package/skills/videodb/reference/search.md +230 -0
- package/skills/videodb/reference/streaming.md +406 -0
- package/skills/videodb/reference/use-cases.md +118 -0
- package/skills/videodb/scripts/ws_listener.py +282 -0
- package/skills/visa-doc-translate/README.md +86 -0
- package/skills/visa-doc-translate/SKILL.md +117 -0
- package/skills/x-api/SKILL.md +208 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run Tests Tool
|
|
3
|
+
*
|
|
4
|
+
* Custom OpenCode tool to run test suites with various options.
|
|
5
|
+
* Automatically detects the package manager and test framework.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { tool } from "@opencode-ai/plugin/tool"
|
|
9
|
+
import * as path from "path"
|
|
10
|
+
import * as fs from "fs"
|
|
11
|
+
|
|
12
|
+
export default tool({
|
|
13
|
+
description:
|
|
14
|
+
"Run the test suite with optional coverage, watch mode, or specific test patterns. Automatically detects package manager (npm, pnpm, yarn, bun) and test framework.",
|
|
15
|
+
args: {
|
|
16
|
+
pattern: tool.schema
|
|
17
|
+
.string()
|
|
18
|
+
.optional()
|
|
19
|
+
.describe("Test file pattern or specific test name to run"),
|
|
20
|
+
coverage: tool.schema
|
|
21
|
+
.boolean()
|
|
22
|
+
.optional()
|
|
23
|
+
.describe("Run with coverage reporting (default: false)"),
|
|
24
|
+
watch: tool.schema
|
|
25
|
+
.boolean()
|
|
26
|
+
.optional()
|
|
27
|
+
.describe("Run in watch mode for continuous testing (default: false)"),
|
|
28
|
+
updateSnapshots: tool.schema
|
|
29
|
+
.boolean()
|
|
30
|
+
.optional()
|
|
31
|
+
.describe("Update Jest/Vitest snapshots (default: false)"),
|
|
32
|
+
},
|
|
33
|
+
async execute(args, context) {
|
|
34
|
+
const { pattern, coverage, watch, updateSnapshots } = args
|
|
35
|
+
const cwd = context.worktree || context.directory
|
|
36
|
+
|
|
37
|
+
// Detect package manager
|
|
38
|
+
const packageManager = await detectPackageManager(cwd)
|
|
39
|
+
|
|
40
|
+
// Detect test framework
|
|
41
|
+
const testFramework = await detectTestFramework(cwd)
|
|
42
|
+
|
|
43
|
+
// Build command
|
|
44
|
+
let cmd: string[] = [packageManager]
|
|
45
|
+
|
|
46
|
+
if (packageManager === "npm") {
|
|
47
|
+
cmd.push("run", "test")
|
|
48
|
+
} else {
|
|
49
|
+
cmd.push("test")
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Add options based on framework
|
|
53
|
+
const testArgs: string[] = []
|
|
54
|
+
|
|
55
|
+
if (coverage) {
|
|
56
|
+
testArgs.push("--coverage")
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (watch) {
|
|
60
|
+
testArgs.push("--watch")
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (updateSnapshots) {
|
|
64
|
+
testArgs.push("-u")
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (pattern) {
|
|
68
|
+
if (testFramework === "jest" || testFramework === "vitest") {
|
|
69
|
+
testArgs.push("--testPathPattern", pattern)
|
|
70
|
+
} else {
|
|
71
|
+
testArgs.push(pattern)
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Add -- separator for npm
|
|
76
|
+
if (testArgs.length > 0) {
|
|
77
|
+
if (packageManager === "npm") {
|
|
78
|
+
cmd.push("--")
|
|
79
|
+
}
|
|
80
|
+
cmd.push(...testArgs)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const command = cmd.join(" ")
|
|
84
|
+
|
|
85
|
+
return JSON.stringify({
|
|
86
|
+
command,
|
|
87
|
+
packageManager,
|
|
88
|
+
testFramework,
|
|
89
|
+
options: {
|
|
90
|
+
pattern: pattern || "all tests",
|
|
91
|
+
coverage: coverage || false,
|
|
92
|
+
watch: watch || false,
|
|
93
|
+
updateSnapshots: updateSnapshots || false,
|
|
94
|
+
},
|
|
95
|
+
instructions: `Run this command to execute tests:\n\n${command}`,
|
|
96
|
+
})
|
|
97
|
+
},
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
async function detectPackageManager(cwd: string): Promise<string> {
|
|
101
|
+
const lockFiles: Record<string, string> = {
|
|
102
|
+
"bun.lockb": "bun",
|
|
103
|
+
"pnpm-lock.yaml": "pnpm",
|
|
104
|
+
"yarn.lock": "yarn",
|
|
105
|
+
"package-lock.json": "npm",
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
for (const [lockFile, pm] of Object.entries(lockFiles)) {
|
|
109
|
+
if (fs.existsSync(path.join(cwd, lockFile))) {
|
|
110
|
+
return pm
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return "npm"
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
async function detectTestFramework(cwd: string): Promise<string> {
|
|
118
|
+
const packageJsonPath = path.join(cwd, "package.json")
|
|
119
|
+
|
|
120
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
121
|
+
try {
|
|
122
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"))
|
|
123
|
+
const deps = {
|
|
124
|
+
...packageJson.dependencies,
|
|
125
|
+
...packageJson.devDependencies,
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (deps.vitest) return "vitest"
|
|
129
|
+
if (deps.jest) return "jest"
|
|
130
|
+
if (deps.mocha) return "mocha"
|
|
131
|
+
if (deps.ava) return "ava"
|
|
132
|
+
if (deps.tap) return "tap"
|
|
133
|
+
} catch {
|
|
134
|
+
// Ignore parse errors
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return "unknown"
|
|
139
|
+
}
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security Audit Tool
|
|
3
|
+
*
|
|
4
|
+
* Custom OpenCode tool to run security audits on dependencies and code.
|
|
5
|
+
* Combines npm audit, secret scanning, and OWASP checks.
|
|
6
|
+
*
|
|
7
|
+
* NOTE: This tool SCANS for security anti-patterns - it does not introduce them.
|
|
8
|
+
* The regex patterns below are used to DETECT potential issues in user code.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { tool } from "@opencode-ai/plugin/tool"
|
|
12
|
+
import * as path from "path"
|
|
13
|
+
import * as fs from "fs"
|
|
14
|
+
|
|
15
|
+
export default tool({
|
|
16
|
+
description:
|
|
17
|
+
"Run a comprehensive security audit including dependency vulnerabilities, secret scanning, and common security issues.",
|
|
18
|
+
args: {
|
|
19
|
+
type: tool.schema
|
|
20
|
+
.enum(["all", "dependencies", "secrets", "code"])
|
|
21
|
+
.optional()
|
|
22
|
+
.describe("Type of audit to run (default: all)"),
|
|
23
|
+
fix: tool.schema
|
|
24
|
+
.boolean()
|
|
25
|
+
.optional()
|
|
26
|
+
.describe("Attempt to auto-fix dependency vulnerabilities (default: false)"),
|
|
27
|
+
severity: tool.schema
|
|
28
|
+
.enum(["low", "moderate", "high", "critical"])
|
|
29
|
+
.optional()
|
|
30
|
+
.describe("Minimum severity level to report (default: moderate)"),
|
|
31
|
+
},
|
|
32
|
+
async execute(args, context) {
|
|
33
|
+
const auditType = args.type ?? "all"
|
|
34
|
+
const fix = args.fix ?? false
|
|
35
|
+
const severity = args.severity ?? "moderate"
|
|
36
|
+
const cwd = context.worktree || context.directory
|
|
37
|
+
|
|
38
|
+
const results: AuditResults = {
|
|
39
|
+
timestamp: new Date().toISOString(),
|
|
40
|
+
directory: cwd,
|
|
41
|
+
checks: [],
|
|
42
|
+
summary: {
|
|
43
|
+
passed: 0,
|
|
44
|
+
failed: 0,
|
|
45
|
+
warnings: 0,
|
|
46
|
+
},
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Check for dependencies audit
|
|
50
|
+
if (auditType === "all" || auditType === "dependencies") {
|
|
51
|
+
results.checks.push({
|
|
52
|
+
name: "Dependency Vulnerabilities",
|
|
53
|
+
description: "Check for known vulnerabilities in dependencies",
|
|
54
|
+
command: fix ? "npm audit fix" : "npm audit",
|
|
55
|
+
severityFilter: severity,
|
|
56
|
+
status: "pending",
|
|
57
|
+
})
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Check for secrets
|
|
61
|
+
if (auditType === "all" || auditType === "secrets") {
|
|
62
|
+
const secretPatterns = await scanForSecrets(cwd)
|
|
63
|
+
if (secretPatterns.length > 0) {
|
|
64
|
+
results.checks.push({
|
|
65
|
+
name: "Secret Detection",
|
|
66
|
+
description: "Scan for hardcoded secrets and API keys",
|
|
67
|
+
status: "failed",
|
|
68
|
+
findings: secretPatterns,
|
|
69
|
+
})
|
|
70
|
+
results.summary.failed++
|
|
71
|
+
} else {
|
|
72
|
+
results.checks.push({
|
|
73
|
+
name: "Secret Detection",
|
|
74
|
+
description: "Scan for hardcoded secrets and API keys",
|
|
75
|
+
status: "passed",
|
|
76
|
+
})
|
|
77
|
+
results.summary.passed++
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Check for common code security issues
|
|
82
|
+
if (auditType === "all" || auditType === "code") {
|
|
83
|
+
const codeIssues = await scanCodeSecurity(cwd)
|
|
84
|
+
if (codeIssues.length > 0) {
|
|
85
|
+
results.checks.push({
|
|
86
|
+
name: "Code Security",
|
|
87
|
+
description: "Check for common security anti-patterns",
|
|
88
|
+
status: "warning",
|
|
89
|
+
findings: codeIssues,
|
|
90
|
+
})
|
|
91
|
+
results.summary.warnings++
|
|
92
|
+
} else {
|
|
93
|
+
results.checks.push({
|
|
94
|
+
name: "Code Security",
|
|
95
|
+
description: "Check for common security anti-patterns",
|
|
96
|
+
status: "passed",
|
|
97
|
+
})
|
|
98
|
+
results.summary.passed++
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Generate recommendations
|
|
103
|
+
results.recommendations = generateRecommendations(results)
|
|
104
|
+
|
|
105
|
+
return JSON.stringify(results)
|
|
106
|
+
},
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
interface AuditCheck {
|
|
110
|
+
name: string
|
|
111
|
+
description: string
|
|
112
|
+
command?: string
|
|
113
|
+
severityFilter?: string
|
|
114
|
+
status: "pending" | "passed" | "failed" | "warning"
|
|
115
|
+
findings?: Array<{ file: string; issue: string; line?: number }>
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
interface AuditResults {
|
|
119
|
+
timestamp: string
|
|
120
|
+
directory: string
|
|
121
|
+
checks: AuditCheck[]
|
|
122
|
+
summary: {
|
|
123
|
+
passed: number
|
|
124
|
+
failed: number
|
|
125
|
+
warnings: number
|
|
126
|
+
}
|
|
127
|
+
recommendations?: string[]
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
async function scanForSecrets(
|
|
131
|
+
cwd: string
|
|
132
|
+
): Promise<Array<{ file: string; issue: string; line?: number }>> {
|
|
133
|
+
const findings: Array<{ file: string; issue: string; line?: number }> = []
|
|
134
|
+
|
|
135
|
+
// Patterns to DETECT potential secrets (security scanning)
|
|
136
|
+
const secretPatterns = [
|
|
137
|
+
{ pattern: /api[_-]?key\s*[:=]\s*['"][^'"]{20,}['"]/gi, name: "API Key" },
|
|
138
|
+
{ pattern: /password\s*[:=]\s*['"][^'"]+['"]/gi, name: "Password" },
|
|
139
|
+
{ pattern: /secret\s*[:=]\s*['"][^'"]{10,}['"]/gi, name: "Secret" },
|
|
140
|
+
{ pattern: /Bearer\s+[A-Za-z0-9\-_]+\.[A-Za-z0-9\-_]+/g, name: "JWT Token" },
|
|
141
|
+
{ pattern: /sk-[a-zA-Z0-9]{32,}/g, name: "OpenAI API Key" },
|
|
142
|
+
{ pattern: /ghp_[a-zA-Z0-9]{36}/g, name: "GitHub Token" },
|
|
143
|
+
{ pattern: /aws[_-]?secret[_-]?access[_-]?key/gi, name: "AWS Secret" },
|
|
144
|
+
]
|
|
145
|
+
|
|
146
|
+
const ignorePatterns = [
|
|
147
|
+
"node_modules",
|
|
148
|
+
".git",
|
|
149
|
+
"dist",
|
|
150
|
+
"build",
|
|
151
|
+
".env.example",
|
|
152
|
+
".env.template",
|
|
153
|
+
]
|
|
154
|
+
|
|
155
|
+
const srcDir = path.join(cwd, "src")
|
|
156
|
+
if (fs.existsSync(srcDir)) {
|
|
157
|
+
await scanDirectory(srcDir, secretPatterns, ignorePatterns, findings)
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Also check root config files
|
|
161
|
+
const configFiles = ["config.js", "config.ts", "settings.js", "settings.ts"]
|
|
162
|
+
for (const configFile of configFiles) {
|
|
163
|
+
const filePath = path.join(cwd, configFile)
|
|
164
|
+
if (fs.existsSync(filePath)) {
|
|
165
|
+
await scanFile(filePath, secretPatterns, findings)
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
return findings
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
async function scanDirectory(
|
|
173
|
+
dir: string,
|
|
174
|
+
patterns: Array<{ pattern: RegExp; name: string }>,
|
|
175
|
+
ignorePatterns: string[],
|
|
176
|
+
findings: Array<{ file: string; issue: string; line?: number }>
|
|
177
|
+
): Promise<void> {
|
|
178
|
+
if (!fs.existsSync(dir)) return
|
|
179
|
+
|
|
180
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true })
|
|
181
|
+
|
|
182
|
+
for (const entry of entries) {
|
|
183
|
+
const fullPath = path.join(dir, entry.name)
|
|
184
|
+
|
|
185
|
+
if (ignorePatterns.some((p) => fullPath.includes(p))) continue
|
|
186
|
+
|
|
187
|
+
if (entry.isDirectory()) {
|
|
188
|
+
await scanDirectory(fullPath, patterns, ignorePatterns, findings)
|
|
189
|
+
} else if (entry.isFile() && entry.name.match(/\.(ts|tsx|js|jsx|json)$/)) {
|
|
190
|
+
await scanFile(fullPath, patterns, findings)
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
async function scanFile(
|
|
196
|
+
filePath: string,
|
|
197
|
+
patterns: Array<{ pattern: RegExp; name: string }>,
|
|
198
|
+
findings: Array<{ file: string; issue: string; line?: number }>
|
|
199
|
+
): Promise<void> {
|
|
200
|
+
try {
|
|
201
|
+
const content = fs.readFileSync(filePath, "utf-8")
|
|
202
|
+
const lines = content.split("\n")
|
|
203
|
+
|
|
204
|
+
for (let i = 0; i < lines.length; i++) {
|
|
205
|
+
const line = lines[i]
|
|
206
|
+
for (const { pattern, name } of patterns) {
|
|
207
|
+
// Reset regex state
|
|
208
|
+
pattern.lastIndex = 0
|
|
209
|
+
if (pattern.test(line)) {
|
|
210
|
+
findings.push({
|
|
211
|
+
file: filePath,
|
|
212
|
+
issue: `Potential ${name} found`,
|
|
213
|
+
line: i + 1,
|
|
214
|
+
})
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
} catch {
|
|
219
|
+
// Ignore read errors
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
async function scanCodeSecurity(
|
|
224
|
+
cwd: string
|
|
225
|
+
): Promise<Array<{ file: string; issue: string; line?: number }>> {
|
|
226
|
+
const findings: Array<{ file: string; issue: string; line?: number }> = []
|
|
227
|
+
|
|
228
|
+
// Patterns to DETECT security anti-patterns (this tool scans for issues)
|
|
229
|
+
// These are detection patterns, not code that uses these anti-patterns
|
|
230
|
+
const securityPatterns = [
|
|
231
|
+
{ pattern: /\beval\s*\(/g, name: "eval() usage - potential code injection" },
|
|
232
|
+
{ pattern: /innerHTML\s*=/g, name: "innerHTML assignment - potential XSS" },
|
|
233
|
+
{ pattern: /dangerouslySetInnerHTML/g, name: "dangerouslySetInnerHTML - potential XSS" },
|
|
234
|
+
{ pattern: /document\.write/g, name: "document.write - potential XSS" },
|
|
235
|
+
{ pattern: /\$\{.*\}.*sql/gi, name: "Potential SQL injection" },
|
|
236
|
+
]
|
|
237
|
+
|
|
238
|
+
const srcDir = path.join(cwd, "src")
|
|
239
|
+
if (fs.existsSync(srcDir)) {
|
|
240
|
+
await scanDirectory(srcDir, securityPatterns, ["node_modules", ".git", "dist"], findings)
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
return findings
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
function generateRecommendations(results: AuditResults): string[] {
|
|
247
|
+
const recommendations: string[] = []
|
|
248
|
+
|
|
249
|
+
for (const check of results.checks) {
|
|
250
|
+
if (check.status === "failed" && check.name === "Secret Detection") {
|
|
251
|
+
recommendations.push(
|
|
252
|
+
"CRITICAL: Remove hardcoded secrets and use environment variables instead"
|
|
253
|
+
)
|
|
254
|
+
recommendations.push("Add a .env file (gitignored) for local development")
|
|
255
|
+
recommendations.push("Use a secrets manager for production deployments")
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
if (check.status === "warning" && check.name === "Code Security") {
|
|
259
|
+
recommendations.push(
|
|
260
|
+
"Review flagged code patterns for potential security vulnerabilities"
|
|
261
|
+
)
|
|
262
|
+
recommendations.push("Consider using DOMPurify for HTML sanitization")
|
|
263
|
+
recommendations.push("Use parameterized queries for database operations")
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
if (check.status === "pending" && check.name === "Dependency Vulnerabilities") {
|
|
267
|
+
recommendations.push("Run 'npm audit' to check for dependency vulnerabilities")
|
|
268
|
+
recommendations.push("Consider using 'npm audit fix' to auto-fix issues")
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
if (recommendations.length === 0) {
|
|
273
|
+
recommendations.push("No critical security issues found. Continue following security best practices.")
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
return recommendations
|
|
277
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "NodeNext",
|
|
5
|
+
"moduleResolution": "NodeNext",
|
|
6
|
+
"lib": ["ES2022"],
|
|
7
|
+
"outDir": "./dist",
|
|
8
|
+
"rootDir": ".",
|
|
9
|
+
"strict": true,
|
|
10
|
+
"esModuleInterop": true,
|
|
11
|
+
"skipLibCheck": true,
|
|
12
|
+
"forceConsistentCasingInFileNames": true,
|
|
13
|
+
"declaration": true,
|
|
14
|
+
"declarationMap": true,
|
|
15
|
+
"sourceMap": true,
|
|
16
|
+
"resolveJsonModule": true,
|
|
17
|
+
"isolatedModules": true,
|
|
18
|
+
"verbatimModuleSyntax": true
|
|
19
|
+
},
|
|
20
|
+
"include": [
|
|
21
|
+
"plugins/**/*.ts",
|
|
22
|
+
"tools/**/*.ts",
|
|
23
|
+
"index.ts"
|
|
24
|
+
],
|
|
25
|
+
"exclude": [
|
|
26
|
+
"node_modules",
|
|
27
|
+
"dist"
|
|
28
|
+
]
|
|
29
|
+
}
|
package/AGENTS.md
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# AW SDLC Repo Instructions
|
|
2
|
+
|
|
3
|
+
Use the repo-local AW SDLC files as the source of truth for routing and stage behavior.
|
|
4
|
+
|
|
5
|
+
## Catalog Snapshot
|
|
6
|
+
|
|
7
|
+
Catalog snapshot: providing 28 specialized agents, 158 skills, 69 commands for repo-local AW SDLC routing.
|
|
8
|
+
|
|
9
|
+
agents/ - 28 specialized subagents
|
|
10
|
+
skills/ - 157 workflow skills and domain knowledge
|
|
11
|
+
commands/ - 69 slash commands
|
|
12
|
+
|
|
13
|
+
## Public Surface
|
|
14
|
+
|
|
15
|
+
Keep the public interface intentionally small, but make each stage legible:
|
|
16
|
+
|
|
17
|
+
- `/aw:plan`
|
|
18
|
+
- `/aw:build`
|
|
19
|
+
- `/aw:investigate`
|
|
20
|
+
- `/aw:test`
|
|
21
|
+
- `/aw:review`
|
|
22
|
+
- `/aw:deploy`
|
|
23
|
+
- `/aw:ship`
|
|
24
|
+
|
|
25
|
+
The default delivery flow is:
|
|
26
|
+
|
|
27
|
+
- `/aw:plan` -> `/aw:build` -> `/aw:test` -> `/aw:review` -> `/aw:deploy` -> `/aw:ship`
|
|
28
|
+
|
|
29
|
+
`/aw:investigate` is a conditional bug, alert, and unclear-root-cause route.
|
|
30
|
+
It is available as a first-class command, but it is not part of the default happy-path sequence.
|
|
31
|
+
|
|
32
|
+
Compatibility entrypoints may remain during migration:
|
|
33
|
+
|
|
34
|
+
- `/aw:execute` -> compatibility alias to `/aw:build`
|
|
35
|
+
- `/aw:verify` -> compatibility entry that routes to `/aw:test`, `/aw:review`, or the smallest correct combined verification flow
|
|
36
|
+
|
|
37
|
+
Do not introduce public commands for preparation, hidden review-loop helpers, debugging internals, or finish compatibility behavior.
|
|
38
|
+
Those stay internal behind the AW stage boundary.
|
|
39
|
+
|
|
40
|
+
`aw-yolo` is an explicit internal orchestration skill for end-to-end automation.
|
|
41
|
+
It starts from the first unsatisfied stage and runs only the smallest correct remaining sequence.
|
|
42
|
+
It is opt-in, not the default public mental model.
|
|
43
|
+
|
|
44
|
+
## Migration Note
|
|
45
|
+
|
|
46
|
+
This repo intentionally replaced the older monolithic ECC-style `AGENTS.md` checklist with a repo-local AW SDLC routing contract.
|
|
47
|
+
If you were relying on the removed baseline guidance, use these files instead:
|
|
48
|
+
|
|
49
|
+
- `defaults/aw-sdlc/baseline-profiles.yml` for GHL review, QA, governance, and deploy policy defaults
|
|
50
|
+
- `docs/aw-sdlc-command-skill-architecture.md` for command/skill ownership and compatibility rules
|
|
51
|
+
- `commands/*.md` for public command contracts and final output shapes
|
|
52
|
+
- `skills/aw-*/SKILL.md` for stage behavior, review loops, launch discipline, and internal helpers
|
|
53
|
+
- `references/*.md` for reusable checklists, examples, and org-standard guardrails loaded on demand
|
|
54
|
+
|
|
55
|
+
Treat this as a repo-local behavior change.
|
|
56
|
+
Prefer the AW SDLC files above over inherited global ECC workflow guidance when they conflict.
|
|
57
|
+
|
|
58
|
+
## Routing
|
|
59
|
+
|
|
60
|
+
- Prefer `skills/using-aw-skills/SKILL.md` for repo-local routing.
|
|
61
|
+
- Route by intent when the request is clear.
|
|
62
|
+
- Use `/aw:ship` for launch, rollout, rollback readiness, and release closeout work.
|
|
63
|
+
- Use `aw-yolo` only when the user explicitly asks for one-run end-to-end automation.
|
|
64
|
+
- When selected, do not restart from planning by habit; begin at the first unsatisfied stage.
|
|
65
|
+
- Keep the public route at `/aw:plan` even when planning internally uses `aw-brainstorm`, `aw-spec`, and `aw-tasks`.
|
|
66
|
+
|
|
67
|
+
## Activation Rule
|
|
68
|
+
|
|
69
|
+
Before any substantive response:
|
|
70
|
+
|
|
71
|
+
1. select the smallest correct AW skill stack first
|
|
72
|
+
2. prefer the explicit public command and its mapped stage skill when the user names it
|
|
73
|
+
3. otherwise choose the needed process skill, primary stage skill, and matching public route by intent
|
|
74
|
+
4. only after the skill stack is selected, load deeper domain behavior or ask clarifying questions
|
|
75
|
+
|
|
76
|
+
Do not begin with generic workflow commentary, implementation advice, or release guidance before the AW skill stack is selected.
|
|
77
|
+
Do not bypass repo-local AW routing just because a global or parent workspace instruction layer also exists.
|
|
78
|
+
|
|
79
|
+
## Fast Path
|
|
80
|
+
|
|
81
|
+
When `.aw_docs/features/<feature_slug>/spec.md` and concrete approved execution inputs already exist:
|
|
82
|
+
|
|
83
|
+
- do not reopen planning only because richer artifacts are absent
|
|
84
|
+
- prefer the smallest correct execution sequence
|
|
85
|
+
- for approved implementation work, use `prepare -> build`
|
|
86
|
+
- for bugs or alerts with unclear cause, insert `investigate` before `build`
|
|
87
|
+
- for proving quality, use `test -> review`
|
|
88
|
+
- for verified release work, use `deploy -> ship` only when rollout or closeout is actually requested
|
|
89
|
+
- use `aw-yolo` only when the user explicitly wants the whole flow automated in one pass
|
|
90
|
+
- use it to orchestrate stages, not to collapse stage evidence or boundaries
|
|
91
|
+
|
|
92
|
+
## Artifact Contract
|
|
93
|
+
|
|
94
|
+
Write deterministic outputs under:
|
|
95
|
+
|
|
96
|
+
- `.aw_docs/features/<feature_slug>/`
|
|
97
|
+
|
|
98
|
+
Stage artifact expectations:
|
|
99
|
+
|
|
100
|
+
- build -> `execution.md`, `state.json`
|
|
101
|
+
- investigate -> `investigation.md`, `state.json`
|
|
102
|
+
- test -> `verification.md`, `state.json`
|
|
103
|
+
- review -> `verification.md`, `state.json`
|
|
104
|
+
- deploy -> `release.md`, `state.json`
|
|
105
|
+
- ship -> `release.md`, `state.json`
|
|
106
|
+
|
|
107
|
+
Do not treat an internal stage as complete until its required artifacts are written to disk.
|
|
108
|
+
A code diff, console summary, or verbal handoff is not a valid substitute for the required stage artifact files.
|
|
109
|
+
|
|
110
|
+
## Org Standards
|
|
111
|
+
|
|
112
|
+
Relevant GHL baseline profiles, platform playbooks, and `.aw_rules` remain active across every stage.
|
|
113
|
+
That means:
|
|
114
|
+
|
|
115
|
+
- frontend work should inherit HighRise, design review, accessibility review, and responsive verification expectations
|
|
116
|
+
- review should inherit platform review playbooks and PR governance
|
|
117
|
+
- test should inherit repo-local validation, E2E, sandbox, and quality-gate expectations from the resolved baseline
|
|
118
|
+
- deploy and ship should inherit staging evidence, rollback, and release-safety expectations from the resolved baseline
|
|
119
|
+
|
|
120
|
+
## Guardrails
|
|
121
|
+
|
|
122
|
+
- never skip test and review before deploy when the selected baseline requires them
|
|
123
|
+
- fail closed for unknown deploy configuration
|
|
124
|
+
- prefer repo-local commands, skills, defaults, references, and docs over global fallback behavior
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Affaan Mustafa
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|