@heyai-rules/pilo-masterkit 2.1.0 → 3.1.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/.agent/agents/PILO_MASTER.md +77 -77
- package/.agent/agents/architect.md +211 -211
- package/.agent/agents/backend-specialist.md +263 -263
- package/.agent/agents/build-error-resolver.md +114 -114
- package/.agent/agents/chief-of-staff.md +151 -151
- package/.agent/agents/code-archaeologist.md +106 -106
- package/.agent/agents/code-reviewer.md +237 -237
- package/.agent/agents/cpp-build-resolver.md +90 -90
- package/.agent/agents/cpp-reviewer.md +72 -72
- package/.agent/agents/csharp-reviewer.md +101 -101
- package/.agent/agents/dart-build-resolver.md +201 -201
- package/.agent/agents/database-architect.md +226 -226
- package/.agent/agents/database-reviewer.md +91 -91
- package/.agent/agents/debugger.md +225 -225
- package/.agent/agents/devops-engineer.md +242 -242
- package/.agent/agents/doc-updater.md +107 -107
- package/.agent/agents/docs-lookup.md +68 -68
- package/.agent/agents/documentation-writer.md +104 -104
- package/.agent/agents/e2e-runner.md +107 -107
- package/.agent/agents/explorer-agent.md +73 -73
- package/.agent/agents/flutter-reviewer.md +243 -243
- package/.agent/agents/frontend-specialist.md +593 -593
- package/.agent/agents/game-developer.md +162 -162
- package/.agent/agents/gan-evaluator.md +209 -209
- package/.agent/agents/gan-generator.md +131 -131
- package/.agent/agents/gan-planner.md +99 -99
- package/.agent/agents/go-build-resolver.md +94 -94
- package/.agent/agents/go-reviewer.md +76 -76
- package/.agent/agents/harness-optimizer.md +35 -35
- package/.agent/agents/healthcare-reviewer.md +83 -83
- package/.agent/agents/java-build-resolver.md +153 -153
- package/.agent/agents/java-reviewer.md +92 -92
- package/.agent/agents/kotlin-build-resolver.md +118 -118
- package/.agent/agents/kotlin-reviewer.md +159 -159
- package/.agent/agents/loop-operator.md +36 -36
- package/.agent/agents/mobile-developer.md +377 -377
- package/.agent/agents/opensource-forker.md +198 -198
- package/.agent/agents/opensource-packager.md +249 -249
- package/.agent/agents/opensource-sanitizer.md +188 -188
- package/.agent/agents/orchestrator.md +416 -416
- package/.agent/agents/penetration-tester.md +188 -188
- package/.agent/agents/performance-optimizer.md +446 -446
- package/.agent/agents/personas/athena-agent/agent.json +10 -10
- package/.agent/agents/personas/athena-agent/athena-backend-logic-architecture-profile.md +3 -3
- package/.agent/agents/personas/athena-agent/context-files/agents.md +1 -1
- package/.agent/agents/personas/athena-agent/context-files/identity.md +1 -1
- package/.agent/agents/personas/athena-agent/context-files/soul.md +1 -1
- package/.agent/agents/personas/athena-agent/context-files/user-predefined.md +1 -1
- package/.agent/agents/personas/athena-agent/user-context-files/system/bootstrap.md +1 -1
- package/.agent/agents/personas/athena-agent/user-context-files/system/user.md +1 -1
- package/.agent/agents/personas/da-vinci-agent/agent.json +10 -10
- package/.agent/agents/personas/da-vinci-agent/context-files/agents.md +1 -1
- package/.agent/agents/personas/da-vinci-agent/context-files/identity.md +1 -1
- package/.agent/agents/personas/da-vinci-agent/context-files/soul.md +1 -1
- package/.agent/agents/personas/da-vinci-agent/context-files/user-predefined.md +1 -1
- package/.agent/agents/personas/da-vinci-agent/da-vinci-frontend-ui-ux-design-profile.md +3 -3
- package/.agent/agents/personas/da-vinci-agent/user-context-files/system/bootstrap.md +1 -1
- package/.agent/agents/personas/da-vinci-agent/user-context-files/system/user.md +1 -1
- package/.agent/agents/personas/duong-tang-agent/agent.json +10 -10
- package/.agent/agents/personas/duong-tang-agent/context-files/agents.md +1 -1
- package/.agent/agents/personas/duong-tang-agent/context-files/identity.md +1 -1
- package/.agent/agents/personas/duong-tang-agent/context-files/soul.md +1 -1
- package/.agent/agents/personas/duong-tang-agent/context-files/user-predefined.md +1 -1
- package/.agent/agents/personas/duong-tang-agent/tang-monk-quality-testing-documentation-profile.md +3 -3
- package/.agent/agents/personas/duong-tang-agent/user-context-files/system/bootstrap.md +1 -1
- package/.agent/agents/personas/duong-tang-agent/user-context-files/system/user.md +1 -1
- package/.agent/agents/personas/gia-cat-luong-agent/agent.json +10 -10
- package/.agent/agents/personas/gia-cat-luong-agent/context-files/agents.md +1 -1
- package/.agent/agents/personas/gia-cat-luong-agent/context-files/identity.md +1 -1
- package/.agent/agents/personas/gia-cat-luong-agent/context-files/soul.md +1 -1
- package/.agent/agents/personas/gia-cat-luong-agent/context-files/user-predefined.md +1 -1
- package/.agent/agents/personas/gia-cat-luong-agent/kongming-research-strategy-analysis-profile.md +3 -3
- package/.agent/agents/personas/gia-cat-luong-agent/user-context-files/system/bootstrap.md +1 -1
- package/.agent/agents/personas/gia-cat-luong-agent/user-context-files/system/user.md +1 -1
- package/.agent/agents/personas/mihata-agent/agent.json +10 -10
- package/.agent/agents/personas/mihata-agent/context-files/agents.md +1 -1
- package/.agent/agents/personas/mihata-agent/context-files/identity.md +1 -1
- package/.agent/agents/personas/mihata-agent/context-files/soul.md +1 -1
- package/.agent/agents/personas/mihata-agent/context-files/user-predefined.md +1 -1
- package/.agent/agents/personas/mihata-agent/mihata-multi-agent-orchestration-profile.md +3 -3
- package/.agent/agents/personas/mihata-agent/user-context-files/system/bootstrap.md +1 -1
- package/.agent/agents/personas/mihata-agent/user-context-files/system/user.md +1 -1
- package/.agent/agents/personas/tesla-agent/agent.json +10 -10
- package/.agent/agents/personas/tesla-agent/context-files/agents.md +1 -1
- package/.agent/agents/personas/tesla-agent/context-files/identity.md +1 -1
- package/.agent/agents/personas/tesla-agent/context-files/soul.md +1 -1
- package/.agent/agents/personas/tesla-agent/context-files/user-predefined.md +1 -1
- package/.agent/agents/personas/tesla-agent/tesla-fullstack-system-optimization-profile.md +3 -3
- package/.agent/agents/personas/tesla-agent/user-context-files/system/bootstrap.md +1 -1
- package/.agent/agents/personas/tesla-agent/user-context-files/system/user.md +1 -1
- package/.agent/agents/personas/tu-ma-y-agent/agent.json +10 -10
- package/.agent/agents/personas/tu-ma-y-agent/context-files/agents.md +1 -1
- package/.agent/agents/personas/tu-ma-y-agent/context-files/identity.md +1 -1
- package/.agent/agents/personas/tu-ma-y-agent/context-files/soul.md +1 -1
- package/.agent/agents/personas/tu-ma-y-agent/context-files/user-predefined.md +1 -1
- package/.agent/agents/personas/tu-ma-y-agent/simayi-feasibility-risk-control-profile.md +3 -3
- package/.agent/agents/personas/tu-ma-y-agent/user-context-files/system/bootstrap.md +1 -1
- package/.agent/agents/personas/tu-ma-y-agent/user-context-files/system/user.md +1 -1
- package/.agent/agents/personas/venti-agent/agent.json +10 -10
- package/.agent/agents/personas/venti-agent/context-files/agents.md +1 -1
- package/.agent/agents/personas/venti-agent/context-files/identity.md +1 -1
- package/.agent/agents/personas/venti-agent/context-files/soul.md +1 -1
- package/.agent/agents/personas/venti-agent/context-files/user-predefined.md +1 -1
- package/.agent/agents/personas/venti-agent/user-context-files/system/bootstrap.md +1 -1
- package/.agent/agents/personas/venti-agent/user-context-files/system/user.md +1 -1
- package/.agent/agents/personas/venti-agent/venti-learning-communication-mentoring-profile.md +3 -3
- package/.agent/agents/planner.md +212 -212
- package/.agent/agents/product-manager.md +112 -112
- package/.agent/agents/product-owner.md +95 -95
- package/.agent/agents/project-planner.md +406 -406
- package/.agent/agents/python-reviewer.md +98 -98
- package/.agent/agents/pytorch-build-resolver.md +120 -120
- package/.agent/agents/qa-automation-engineer.md +103 -103
- package/.agent/agents/refactor-cleaner.md +85 -85
- package/.agent/agents/rust-build-resolver.md +148 -148
- package/.agent/agents/rust-reviewer.md +94 -94
- package/.agent/agents/security-auditor.md +170 -170
- package/.agent/agents/security-reviewer.md +108 -108
- package/.agent/agents/seo-specialist.md +111 -111
- package/.agent/agents/tdd-guide.md +91 -91
- package/.agent/agents/test-engineer.md +158 -158
- package/.agent/agents/typescript-reviewer.md +112 -112
- package/.agent/contexts/dev.md +20 -20
- package/.agent/contexts/research.md +26 -26
- package/.agent/contexts/review.md +22 -22
- package/.agent/hooks/hooks.json +395 -395
- package/.agent/hooks/readme.md +222 -222
- package/.agent/mcp-configs/mcp-servers.json +181 -181
- package/.agent/rules/ARCHITECTURAL_BLUEPRINTS.md +62 -62
- package/.agent/rules/CODE_CRAFTSMANSHIP.md +69 -69
- package/.agent/rules/CORE_RULES.md +72 -72
- package/.agent/rules/PROJECT_MAP.md +58 -58
- package/.agent/rules/QUALITY_ASSURANCE.md +54 -54
- package/.agent/rules/SECURITY_ARMOR.md +44 -44
- package/.agent/rules/VERSION_ORCHESTRATION.md +64 -64
- package/.agent/rules/WORKFLOW_ORCHESTRATION.md +55 -55
- package/.agent/rules/common/agents.md +50 -50
- package/.agent/rules/common/code-review.md +124 -124
- package/.agent/rules/common/coding-style.md +48 -48
- package/.agent/rules/common/development-workflow.md +44 -44
- package/.agent/rules/common/git-workflow.md +24 -24
- package/.agent/rules/common/hooks.md +30 -30
- package/.agent/rules/common/patterns.md +31 -31
- package/.agent/rules/common/performance.md +55 -55
- package/.agent/rules/common/security.md +29 -29
- package/.agent/rules/common/testing.md +29 -29
- package/.agent/rules/cpp/coding-style.md +44 -44
- package/.agent/rules/cpp/hooks.md +39 -39
- package/.agent/rules/cpp/patterns.md +51 -51
- package/.agent/rules/cpp/security.md +51 -51
- package/.agent/rules/cpp/testing.md +44 -44
- package/.agent/rules/csharp/coding-style.md +72 -72
- package/.agent/rules/csharp/hooks.md +25 -25
- package/.agent/rules/csharp/patterns.md +50 -50
- package/.agent/rules/csharp/security.md +58 -58
- package/.agent/rules/csharp/testing.md +46 -46
- package/.agent/rules/dart/coding-style.md +159 -159
- package/.agent/rules/dart/hooks.md +66 -66
- package/.agent/rules/dart/patterns.md +261 -261
- package/.agent/rules/dart/security.md +135 -135
- package/.agent/rules/dart/testing.md +215 -215
- package/.agent/rules/golang/coding-style.md +32 -32
- package/.agent/rules/golang/hooks.md +17 -17
- package/.agent/rules/golang/patterns.md +45 -45
- package/.agent/rules/golang/security.md +34 -34
- package/.agent/rules/golang/testing.md +31 -31
- package/.agent/rules/java/coding-style.md +114 -114
- package/.agent/rules/java/hooks.md +18 -18
- package/.agent/rules/java/patterns.md +146 -146
- package/.agent/rules/java/security.md +100 -100
- package/.agent/rules/java/testing.md +131 -131
- package/.agent/rules/kotlin/coding-style.md +86 -86
- package/.agent/rules/kotlin/hooks.md +17 -17
- package/.agent/rules/kotlin/patterns.md +146 -146
- package/.agent/rules/kotlin/security.md +82 -82
- package/.agent/rules/kotlin/testing.md +128 -128
- package/.agent/rules/perl/coding-style.md +46 -46
- package/.agent/rules/perl/hooks.md +22 -22
- package/.agent/rules/perl/patterns.md +76 -76
- package/.agent/rules/perl/security.md +69 -69
- package/.agent/rules/perl/testing.md +54 -54
- package/.agent/rules/php/coding-style.md +40 -40
- package/.agent/rules/php/hooks.md +24 -24
- package/.agent/rules/php/patterns.md +33 -33
- package/.agent/rules/php/security.md +37 -37
- package/.agent/rules/php/testing.md +39 -39
- package/.agent/rules/python/coding-style.md +42 -42
- package/.agent/rules/python/hooks.md +19 -19
- package/.agent/rules/python/patterns.md +39 -39
- package/.agent/rules/python/security.md +30 -30
- package/.agent/rules/python/testing.md +38 -38
- package/.agent/rules/readme.md +111 -111
- package/.agent/rules/rust/coding-style.md +151 -151
- package/.agent/rules/rust/hooks.md +16 -16
- package/.agent/rules/rust/patterns.md +168 -168
- package/.agent/rules/rust/security.md +141 -141
- package/.agent/rules/rust/testing.md +154 -154
- package/.agent/rules/swift/coding-style.md +47 -47
- package/.agent/rules/swift/hooks.md +20 -20
- package/.agent/rules/swift/patterns.md +66 -66
- package/.agent/rules/swift/security.md +33 -33
- package/.agent/rules/swift/testing.md +45 -45
- package/.agent/rules/typescript/coding-style.md +199 -199
- package/.agent/rules/typescript/hooks.md +22 -22
- package/.agent/rules/typescript/patterns.md +52 -52
- package/.agent/rules/typescript/security.md +28 -28
- package/.agent/rules/typescript/testing.md +18 -18
- package/.agent/rules/web/coding-style.md +96 -96
- package/.agent/rules/web/design-quality.md +63 -63
- package/.agent/rules/web/hooks.md +120 -120
- package/.agent/rules/web/patterns.md +79 -79
- package/.agent/rules/web/performance.md +64 -64
- package/.agent/rules/web/security.md +57 -57
- package/.agent/rules/web/testing.md +55 -55
- package/.agent/rules/zh/agents.md +50 -50
- package/.agent/rules/zh/code-review.md +124 -124
- package/.agent/rules/zh/coding-style.md +48 -48
- package/.agent/rules/zh/development-workflow.md +44 -44
- package/.agent/rules/zh/git-workflow.md +24 -24
- package/.agent/rules/zh/hooks.md +30 -30
- package/.agent/rules/zh/patterns.md +31 -31
- package/.agent/rules/zh/performance.md +55 -55
- package/.agent/rules/zh/readme.md +108 -108
- package/.agent/rules/zh/security.md +29 -29
- package/.agent/rules/zh/testing.md +29 -29
- package/.agent/scripts/auto_preview.py +148 -148
- package/.agent/scripts/checklist.py +217 -217
- package/.agent/scripts/session_manager.py +120 -120
- package/.agent/scripts/verify_all.py +327 -327
- package/.agent/skills/agent-eval/SKILL.md +145 -145
- package/.agent/skills/agent-harness-construction/SKILL.md +73 -73
- package/.agent/skills/agent-payment-x402/SKILL.md +178 -178
- package/.agent/skills/agentic-engineering/SKILL.md +63 -63
- package/.agent/skills/ai-first-engineering/SKILL.md +51 -51
- package/.agent/skills/ai-regression-testing/SKILL.md +385 -385
- package/.agent/skills/android-clean-architecture/SKILL.md +339 -339
- package/.agent/skills/api-design/SKILL.md +523 -523
- package/.agent/skills/api-patterns/SKILL.md +81 -81
- package/.agent/skills/api-patterns/api-style.md +42 -42
- package/.agent/skills/api-patterns/auth.md +24 -24
- package/.agent/skills/api-patterns/documentation.md +26 -26
- package/.agent/skills/api-patterns/graphql.md +41 -41
- package/.agent/skills/api-patterns/rate-limiting.md +31 -31
- package/.agent/skills/api-patterns/response.md +37 -37
- package/.agent/skills/api-patterns/rest.md +40 -40
- package/.agent/skills/api-patterns/scripts/api_validator.py +211 -211
- package/.agent/skills/api-patterns/security-testing.md +122 -122
- package/.agent/skills/api-patterns/trpc.md +41 -41
- package/.agent/skills/api-patterns/versioning.md +22 -22
- package/.agent/skills/app-builder/SKILL.md +75 -75
- package/.agent/skills/app-builder/agent-coordination.md +71 -71
- package/.agent/skills/app-builder/feature-building.md +53 -53
- package/.agent/skills/app-builder/project-detection.md +34 -34
- package/.agent/skills/app-builder/scaffolding.md +118 -118
- package/.agent/skills/app-builder/tech-stack.md +41 -41
- package/.agent/skills/app-builder/templates/SKILL.md +39 -39
- package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -76
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -92
- package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -88
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -88
- package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -83
- package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -90
- package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -90
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -122
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -122
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -169
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -134
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -83
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -119
- package/.agent/skills/architecture/SKILL.md +55 -55
- package/.agent/skills/architecture/context-discovery.md +43 -43
- package/.agent/skills/architecture/examples.md +94 -94
- package/.agent/skills/architecture/pattern-selection.md +68 -68
- package/.agent/skills/architecture/patterns-reference.md +50 -50
- package/.agent/skills/architecture/trade-off-analysis.md +77 -77
- package/.agent/skills/architecture-decision-records/SKILL.md +179 -179
- package/.agent/skills/article-writing/SKILL.md +79 -79
- package/.agent/skills/autonomous-agent-harness/SKILL.md +267 -267
- package/.agent/skills/autonomous-loops/SKILL.md +610 -610
- package/.agent/skills/backend-patterns/SKILL.md +598 -598
- package/.agent/skills/bash-linux/SKILL.md +199 -199
- package/.agent/skills/behavioral-modes/SKILL.md +242 -242
- package/.agent/skills/benchmark/SKILL.md +93 -93
- package/.agent/skills/blueprint/SKILL.md +105 -105
- package/.agent/skills/brainstorming/SKILL.md +163 -163
- package/.agent/skills/brainstorming/dynamic-questioning.md +350 -350
- package/.agent/skills/brand-voice/SKILL.md +97 -97
- package/.agent/skills/brand-voice/references/voice-profile-schema.md +55 -55
- package/.agent/skills/browser-qa/SKILL.md +87 -87
- package/.agent/skills/bun-runtime/SKILL.md +84 -84
- package/.agent/skills/canary-watch/SKILL.md +99 -99
- package/.agent/skills/carrier-relationship-management/SKILL.md +212 -212
- package/.agent/skills/ck/SKILL.md +147 -147
- package/.agent/skills/ck/commands/forget.mjs +44 -44
- package/.agent/skills/ck/commands/info.mjs +24 -24
- package/.agent/skills/ck/commands/init.mjs +143 -143
- package/.agent/skills/ck/commands/list.mjs +40 -40
- package/.agent/skills/ck/commands/migrate.mjs +202 -202
- package/.agent/skills/ck/commands/resume.mjs +36 -36
- package/.agent/skills/ck/commands/save.mjs +210 -210
- package/.agent/skills/ck/commands/shared.mjs +387 -387
- package/.agent/skills/ck/hooks/session-start.mjs +224 -224
- package/.agent/skills/claude-api/SKILL.md +337 -337
- package/.agent/skills/claude-devfleet/SKILL.md +103 -103
- package/.agent/skills/clean-code/SKILL.md +201 -201
- package/.agent/skills/click-path-audit/SKILL.md +244 -244
- package/.agent/skills/clickhouse-io/SKILL.md +439 -439
- package/.agent/skills/code-review-checklist/SKILL.md +109 -109
- package/.agent/skills/codebase-onboarding/SKILL.md +233 -233
- package/.agent/skills/coding-standards/SKILL.md +530 -530
- package/.agent/skills/compose-multiplatform-patterns/SKILL.md +299 -299
- package/.agent/skills/configure-ecc/SKILL.md +367 -367
- package/.agent/skills/connections-optimizer/SKILL.md +189 -189
- package/.agent/skills/content-engine/SKILL.md +131 -131
- package/.agent/skills/content-hash-cache-pattern/SKILL.md +161 -161
- package/.agent/skills/context-budget/SKILL.md +135 -135
- package/.agent/skills/continuous-agent-loop/SKILL.md +45 -45
- package/.agent/skills/continuous-learning/SKILL.md +119 -119
- package/.agent/skills/continuous-learning/config.json +18 -18
- package/.agent/skills/continuous-learning/evaluate-session.sh +69 -69
- package/.agent/skills/continuous-learning-v2/SKILL.md +365 -365
- package/.agent/skills/continuous-learning-v2/agents/observer-loop.sh +271 -271
- package/.agent/skills/continuous-learning-v2/agents/observer.md +198 -198
- package/.agent/skills/continuous-learning-v2/agents/session-guardian.sh +150 -150
- package/.agent/skills/continuous-learning-v2/agents/start-observer.sh +244 -244
- package/.agent/skills/continuous-learning-v2/config.json +8 -8
- package/.agent/skills/continuous-learning-v2/hooks/observe.sh +428 -428
- package/.agent/skills/continuous-learning-v2/scripts/detect-project.sh +228 -228
- package/.agent/skills/continuous-learning-v2/scripts/instinct-cli.py +1426 -1426
- package/.agent/skills/continuous-learning-v2/scripts/test-parse-instinct.py +984 -984
- package/.agent/skills/cost-aware-llm-pipeline/SKILL.md +183 -183
- package/.agent/skills/cpp-coding-standards/SKILL.md +723 -723
- package/.agent/skills/cpp-testing/SKILL.md +324 -324
- package/.agent/skills/crosspost/SKILL.md +111 -111
- package/.agent/skills/csharp-testing/SKILL.md +321 -321
- package/.agent/skills/customer-billing-ops/SKILL.md +140 -140
- package/.agent/skills/customs-trade-compliance/SKILL.md +263 -263
- package/.agent/skills/dart-flutter-patterns/SKILL.md +563 -563
- package/.agent/skills/data-scraper-agent/SKILL.md +764 -764
- package/.agent/skills/database-design/SKILL.md +52 -52
- package/.agent/skills/database-design/database-selection.md +43 -43
- package/.agent/skills/database-design/indexing.md +39 -39
- package/.agent/skills/database-design/migrations.md +48 -48
- package/.agent/skills/database-design/optimization.md +36 -36
- package/.agent/skills/database-design/orm-selection.md +30 -30
- package/.agent/skills/database-design/schema-design.md +56 -56
- package/.agent/skills/database-design/scripts/schema_validator.py +172 -172
- package/.agent/skills/database-migrations/SKILL.md +429 -429
- package/.agent/skills/deep-research/SKILL.md +155 -155
- package/.agent/skills/deployment-patterns/SKILL.md +427 -427
- package/.agent/skills/deployment-procedures/SKILL.md +241 -241
- package/.agent/skills/design-system/SKILL.md +82 -82
- package/.agent/skills/django-patterns/SKILL.md +734 -734
- package/.agent/skills/django-security/SKILL.md +593 -593
- package/.agent/skills/django-tdd/SKILL.md +729 -729
- package/.agent/skills/django-verification/SKILL.md +469 -469
- package/.agent/skills/dmux-workflows/SKILL.md +191 -191
- package/.agent/skills/doc.md +177 -177
- package/.agent/skills/docker-patterns/SKILL.md +364 -364
- package/.agent/skills/documentation-lookup/SKILL.md +90 -90
- package/.agent/skills/documentation-templates/SKILL.md +194 -194
- package/.agent/skills/dotnet-patterns/SKILL.md +321 -321
- package/.agent/skills/e2e-testing/SKILL.md +326 -326
- package/.agent/skills/energy-procurement/SKILL.md +228 -228
- package/.agent/skills/enterprise-agent-ops/SKILL.md +50 -50
- package/.agent/skills/eval-harness/SKILL.md +270 -270
- package/.agent/skills/exa-search/SKILL.md +103 -103
- package/.agent/skills/fal-ai-media/SKILL.md +284 -284
- package/.agent/skills/flutter-dart-code-review/SKILL.md +435 -435
- package/.agent/skills/foundation-models-on-device/SKILL.md +243 -243
- package/.agent/skills/frontend-design/SKILL.md +452 -452
- package/.agent/skills/frontend-design/animation-guide.md +331 -331
- package/.agent/skills/frontend-design/color-system.md +311 -311
- package/.agent/skills/frontend-design/decision-trees.md +418 -418
- package/.agent/skills/frontend-design/motion-graphics.md +306 -306
- package/.agent/skills/frontend-design/scripts/accessibility_checker.py +183 -183
- package/.agent/skills/frontend-design/scripts/ux_audit.py +722 -722
- package/.agent/skills/frontend-design/typography-system.md +345 -345
- package/.agent/skills/frontend-design/ux-psychology.md +1116 -1116
- package/.agent/skills/frontend-design/visual-effects.md +383 -383
- package/.agent/skills/frontend-patterns/SKILL.md +642 -642
- package/.agent/skills/frontend-slides/SKILL.md +184 -184
- package/.agent/skills/frontend-slides/style-presets.md +330 -330
- package/.agent/skills/game-development/2d-games/SKILL.md +119 -119
- package/.agent/skills/game-development/3d-games/SKILL.md +135 -135
- package/.agent/skills/game-development/SKILL.md +167 -167
- package/.agent/skills/game-development/game-art/SKILL.md +185 -185
- package/.agent/skills/game-development/game-audio/SKILL.md +190 -190
- package/.agent/skills/game-development/game-design/SKILL.md +129 -129
- package/.agent/skills/game-development/mobile-games/SKILL.md +108 -108
- package/.agent/skills/game-development/multiplayer/SKILL.md +132 -132
- package/.agent/skills/game-development/pc-games/SKILL.md +144 -144
- package/.agent/skills/game-development/vr-ar/SKILL.md +123 -123
- package/.agent/skills/game-development/web-games/SKILL.md +150 -150
- package/.agent/skills/gan-style-harness/SKILL.md +278 -278
- package/.agent/skills/geo-fundamentals/SKILL.md +156 -156
- package/.agent/skills/geo-fundamentals/scripts/geo_checker.py +289 -289
- package/.agent/skills/git-workflow/SKILL.md +715 -715
- package/.agent/skills/golang-patterns/SKILL.md +674 -674
- package/.agent/skills/golang-testing/SKILL.md +720 -720
- package/.agent/skills/google-workspace-ops/SKILL.md +95 -95
- package/.agent/skills/healthcare-cdss-patterns/SKILL.md +245 -245
- package/.agent/skills/healthcare-emr-patterns/SKILL.md +159 -159
- package/.agent/skills/healthcare-eval-harness/SKILL.md +207 -207
- package/.agent/skills/healthcare-phi-compliance/SKILL.md +145 -145
- package/.agent/skills/hexagonal-architecture/SKILL.md +276 -276
- package/.agent/skills/i18n-localization/SKILL.md +154 -154
- package/.agent/skills/i18n-localization/scripts/i18n_checker.py +241 -241
- package/.agent/skills/intelligent-routing/SKILL.md +335 -335
- package/.agent/skills/inventory-demand-planning/SKILL.md +247 -247
- package/.agent/skills/investor-materials/SKILL.md +96 -96
- package/.agent/skills/investor-outreach/SKILL.md +91 -91
- package/.agent/skills/iterative-retrieval/SKILL.md +211 -211
- package/.agent/skills/java-coding-standards/SKILL.md +147 -147
- package/.agent/skills/jira-integration/SKILL.md +293 -293
- package/.agent/skills/jpa-patterns/SKILL.md +151 -151
- package/.agent/skills/kotlin-coroutines-flows/SKILL.md +284 -284
- package/.agent/skills/kotlin-exposed-patterns/SKILL.md +719 -719
- package/.agent/skills/kotlin-ktor-patterns/SKILL.md +689 -689
- package/.agent/skills/kotlin-patterns/SKILL.md +711 -711
- package/.agent/skills/kotlin-testing/SKILL.md +824 -824
- package/.agent/skills/laravel-patterns/SKILL.md +415 -415
- package/.agent/skills/laravel-plugin-discovery/SKILL.md +229 -229
- package/.agent/skills/laravel-security/SKILL.md +285 -285
- package/.agent/skills/laravel-tdd/SKILL.md +283 -283
- package/.agent/skills/laravel-verification/SKILL.md +179 -179
- package/.agent/skills/lead-intelligence/SKILL.md +321 -321
- package/.agent/skills/lead-intelligence/agents/enrichment-agent.md +85 -85
- package/.agent/skills/lead-intelligence/agents/mutual-mapper.md +75 -75
- package/.agent/skills/lead-intelligence/agents/outreach-drafter.md +98 -98
- package/.agent/skills/lead-intelligence/agents/signal-scorer.md +60 -60
- package/.agent/skills/lint-and-validate/SKILL.md +45 -45
- package/.agent/skills/lint-and-validate/scripts/lint_runner.py +184 -184
- package/.agent/skills/lint-and-validate/scripts/type_coverage.py +173 -173
- package/.agent/skills/liquid-glass-design/SKILL.md +279 -279
- package/.agent/skills/logistics-exception-management/SKILL.md +222 -222
- package/.agent/skills/manim-video/SKILL.md +89 -89
- package/.agent/skills/manim-video/assets/network-graph-scene.py +52 -52
- package/.agent/skills/market-research/SKILL.md +75 -75
- package/.agent/skills/mcp-server-patterns/SKILL.md +67 -67
- package/.agent/skills/mobile-design/SKILL.md +394 -394
- package/.agent/skills/mobile-design/decision-trees.md +516 -516
- package/.agent/skills/mobile-design/mobile-backend.md +491 -491
- package/.agent/skills/mobile-design/mobile-color-system.md +420 -420
- package/.agent/skills/mobile-design/mobile-debugging.md +122 -122
- package/.agent/skills/mobile-design/mobile-design-thinking.md +357 -357
- package/.agent/skills/mobile-design/mobile-navigation.md +458 -458
- package/.agent/skills/mobile-design/mobile-performance.md +767 -767
- package/.agent/skills/mobile-design/mobile-testing.md +356 -356
- package/.agent/skills/mobile-design/mobile-typography.md +433 -433
- package/.agent/skills/mobile-design/platform-android.md +666 -666
- package/.agent/skills/mobile-design/platform-ios.md +561 -561
- package/.agent/skills/mobile-design/scripts/mobile_audit.py +670 -670
- package/.agent/skills/mobile-design/touch-psychology.md +537 -537
- package/.agent/skills/nanoclaw-repl/SKILL.md +33 -33
- package/.agent/skills/nestjs-patterns/SKILL.md +230 -230
- package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +351 -351
- package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +240 -240
- package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +490 -490
- package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +264 -264
- package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -581
- package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +432 -432
- package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +684 -684
- package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +150 -150
- package/.agent/skills/nextjs-react-expert/9-cache-components.md +103 -103
- package/.agent/skills/nextjs-react-expert/SKILL.md +293 -293
- package/.agent/skills/nextjs-react-expert/scripts/convert_rules.py +222 -222
- package/.agent/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -252
- package/.agent/skills/nextjs-turbopack/SKILL.md +44 -44
- package/.agent/skills/nodejs-best-practices/SKILL.md +333 -333
- package/.agent/skills/nutrient-document-processing/SKILL.md +167 -167
- package/.agent/skills/nuxt4-patterns/SKILL.md +100 -100
- package/.agent/skills/openclaw-persona-forge/SKILL.md +296 -296
- package/.agent/skills/openclaw-persona-forge/gacha.py +224 -224
- package/.agent/skills/openclaw-persona-forge/gacha.sh +5 -5
- package/.agent/skills/openclaw-persona-forge/references/avatar-style.md +124 -124
- package/.agent/skills/openclaw-persona-forge/references/boundary-rules.md +53 -53
- package/.agent/skills/openclaw-persona-forge/references/error-handling.md +53 -53
- package/.agent/skills/openclaw-persona-forge/references/identity-tension.md +48 -48
- package/.agent/skills/openclaw-persona-forge/references/naming-system.md +39 -39
- package/.agent/skills/openclaw-persona-forge/references/output-template.md +166 -166
- package/.agent/skills/opensource-pipeline/SKILL.md +255 -255
- package/.agent/skills/parallel-agents/SKILL.md +175 -175
- package/.agent/skills/performance-profiling/SKILL.md +143 -143
- package/.agent/skills/performance-profiling/scripts/lighthouse_audit.py +76 -76
- package/.agent/skills/perl-patterns/SKILL.md +504 -504
- package/.agent/skills/perl-security/SKILL.md +503 -503
- package/.agent/skills/perl-testing/SKILL.md +475 -475
- package/.agent/skills/plan-writing/SKILL.md +152 -152
- package/.agent/skills/plankton-code-quality/SKILL.md +236 -236
- package/.agent/skills/postgres-patterns/SKILL.md +147 -147
- package/.agent/skills/powershell-windows/SKILL.md +167 -167
- package/.agent/skills/product-lens/SKILL.md +85 -85
- package/.agent/skills/production-scheduling/SKILL.md +238 -238
- package/.agent/skills/project-flow-ops/SKILL.md +111 -111
- package/.agent/skills/project-guidelines-example/SKILL.md +349 -349
- package/.agent/skills/prompt-optimizer/SKILL.md +397 -397
- package/.agent/skills/python-patterns/SKILL.md +750 -750
- package/.agent/skills/python-testing/SKILL.md +816 -816
- package/.agent/skills/pytorch-patterns/SKILL.md +396 -396
- package/.agent/skills/quality-nonconformance/SKILL.md +260 -260
- package/.agent/skills/ralphinho-rfc-pipeline/SKILL.md +67 -67
- package/.agent/skills/red-team-tactics/SKILL.md +199 -199
- package/.agent/skills/regex-vs-llm-structured-text/SKILL.md +220 -220
- package/.agent/skills/remotion-video-creation/SKILL.md +43 -43
- package/.agent/skills/remotion-video-creation/rules/3d.md +86 -86
- package/.agent/skills/remotion-video-creation/rules/animations.md +29 -29
- package/.agent/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +173 -173
- package/.agent/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +100 -100
- package/.agent/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +108 -108
- package/.agent/skills/remotion-video-creation/rules/assets.md +78 -78
- package/.agent/skills/remotion-video-creation/rules/audio.md +172 -172
- package/.agent/skills/remotion-video-creation/rules/calculate-metadata.md +104 -104
- package/.agent/skills/remotion-video-creation/rules/can-decode.md +75 -75
- package/.agent/skills/remotion-video-creation/rules/charts.md +58 -58
- package/.agent/skills/remotion-video-creation/rules/compositions.md +146 -146
- package/.agent/skills/remotion-video-creation/rules/display-captions.md +126 -126
- package/.agent/skills/remotion-video-creation/rules/extract-frames.md +229 -229
- package/.agent/skills/remotion-video-creation/rules/fonts.md +152 -152
- package/.agent/skills/remotion-video-creation/rules/get-audio-duration.md +58 -58
- package/.agent/skills/remotion-video-creation/rules/get-video-dimensions.md +68 -68
- package/.agent/skills/remotion-video-creation/rules/get-video-duration.md +58 -58
- package/.agent/skills/remotion-video-creation/rules/gifs.md +138 -138
- package/.agent/skills/remotion-video-creation/rules/images.md +130 -130
- package/.agent/skills/remotion-video-creation/rules/import-srt-captions.md +67 -67
- package/.agent/skills/remotion-video-creation/rules/lottie.md +67 -67
- package/.agent/skills/remotion-video-creation/rules/measuring-dom-nodes.md +34 -34
- package/.agent/skills/remotion-video-creation/rules/measuring-text.md +143 -143
- package/.agent/skills/remotion-video-creation/rules/sequencing.md +106 -106
- package/.agent/skills/remotion-video-creation/rules/tailwind.md +11 -11
- package/.agent/skills/remotion-video-creation/rules/text-animations.md +20 -20
- package/.agent/skills/remotion-video-creation/rules/timing.md +179 -179
- package/.agent/skills/remotion-video-creation/rules/transcribe-captions.md +19 -19
- package/.agent/skills/remotion-video-creation/rules/transitions.md +122 -122
- package/.agent/skills/remotion-video-creation/rules/trimming.md +52 -52
- package/.agent/skills/remotion-video-creation/rules/videos.md +171 -171
- package/.agent/skills/repo-scan/SKILL.md +63 -63
- package/.agent/skills/returns-reverse-logistics/SKILL.md +240 -240
- package/.agent/skills/rules-distill/SKILL.md +264 -264
- package/.agent/skills/rules-distill/scripts/scan-rules.sh +58 -58
- package/.agent/skills/rules-distill/scripts/scan-skills.sh +129 -129
- package/.agent/skills/rust-patterns/SKILL.md +499 -499
- package/.agent/skills/rust-pro/SKILL.md +175 -175
- package/.agent/skills/rust-testing/SKILL.md +500 -500
- package/.agent/skills/safety-guard/SKILL.md +75 -75
- package/.agent/skills/santa-method/SKILL.md +306 -306
- package/.agent/skills/search-first/SKILL.md +161 -161
- package/.agent/skills/security-review/SKILL.md +495 -495
- package/.agent/skills/security-review/cloud-infrastructure-security.md +361 -361
- package/.agent/skills/security-scan/SKILL.md +165 -165
- package/.agent/skills/seo-fundamentals/SKILL.md +129 -129
- package/.agent/skills/seo-fundamentals/scripts/seo_checker.py +219 -219
- package/.agent/skills/server-management/SKILL.md +161 -161
- package/.agent/skills/skill-comply/SKILL.md +58 -58
- package/.agent/skills/skill-comply/fixtures/compliant-trace.jsonl +5 -5
- package/.agent/skills/skill-comply/fixtures/noncompliant-trace.jsonl +3 -3
- package/.agent/skills/skill-comply/fixtures/tdd-spec.yaml +44 -44
- package/.agent/skills/skill-comply/prompts/classifier.md +24 -24
- package/.agent/skills/skill-comply/prompts/scenario-generator.md +62 -62
- package/.agent/skills/skill-comply/prompts/spec-generator.md +42 -42
- package/.agent/skills/skill-comply/pyproject.toml +15 -15
- package/.agent/skills/skill-comply/scripts/classifier.py +85 -85
- package/.agent/skills/skill-comply/scripts/grader.py +122 -122
- package/.agent/skills/skill-comply/scripts/parser.py +107 -107
- package/.agent/skills/skill-comply/scripts/report.py +170 -170
- package/.agent/skills/skill-comply/scripts/run.py +127 -127
- package/.agent/skills/skill-comply/scripts/runner.py +161 -161
- package/.agent/skills/skill-comply/scripts/scenario-generator.py +70 -70
- package/.agent/skills/skill-comply/scripts/spec-generator.py +72 -72
- package/.agent/skills/skill-comply/scripts/utils.py +13 -13
- package/.agent/skills/skill-comply/tests/test-grader.py +137 -137
- package/.agent/skills/skill-comply/tests/test-parser.py +90 -90
- package/.agent/skills/skill-stocktake/SKILL.md +193 -193
- package/.agent/skills/skill-stocktake/scripts/quick-diff.sh +87 -87
- package/.agent/skills/skill-stocktake/scripts/save-results.sh +56 -56
- package/.agent/skills/skill-stocktake/scripts/scan.sh +170 -170
- package/.agent/skills/social-graph-ranker/SKILL.md +154 -154
- package/.agent/skills/springboot-patterns/SKILL.md +314 -314
- package/.agent/skills/springboot-security/SKILL.md +272 -272
- package/.agent/skills/springboot-tdd/SKILL.md +158 -158
- package/.agent/skills/springboot-verification/SKILL.md +231 -231
- package/.agent/skills/strategic-compact/SKILL.md +131 -131
- package/.agent/skills/strategic-compact/suggest-compact.sh +54 -54
- package/.agent/skills/swift-actor-persistence/SKILL.md +143 -143
- package/.agent/skills/swift-concurrency-6-2/SKILL.md +216 -216
- package/.agent/skills/swift-protocol-di-testing/SKILL.md +190 -190
- package/.agent/skills/swiftui-patterns/SKILL.md +259 -259
- package/.agent/skills/systematic-debugging/SKILL.md +109 -109
- package/.agent/skills/tailwind-patterns/SKILL.md +269 -269
- package/.agent/skills/tdd-workflow/SKILL.md +463 -463
- package/.agent/skills/team-builder/SKILL.md +168 -168
- package/.agent/skills/testing-patterns/SKILL.md +178 -178
- package/.agent/skills/testing-patterns/scripts/test_runner.py +219 -219
- package/.agent/skills/token-budget-advisor/SKILL.md +133 -133
- package/.agent/skills/ui-demo/SKILL.md +465 -465
- package/.agent/skills/ui-ux-pro-max/SKILL.md +292 -292
- package/.agent/skills/ui-ux-pro-max/data/charts.csv +26 -26
- package/.agent/skills/ui-ux-pro-max/data/colors.csv +97 -97
- package/.agent/skills/ui-ux-pro-max/data/icons.csv +101 -101
- package/.agent/skills/ui-ux-pro-max/data/landing.csv +31 -31
- package/.agent/skills/ui-ux-pro-max/data/products.csv +96 -96
- package/.agent/skills/ui-ux-pro-max/data/react-performance.csv +45 -45
- package/.agent/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -54
- package/.agent/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -53
- package/.agent/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -56
- package/.agent/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -53
- package/.agent/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -53
- package/.agent/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -51
- package/.agent/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -59
- package/.agent/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -52
- package/.agent/skills/ui-ux-pro-max/data/stacks/react.csv +54 -54
- package/.agent/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -61
- package/.agent/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -54
- package/.agent/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -51
- package/.agent/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -50
- package/.agent/skills/ui-ux-pro-max/data/styles.csv +68 -68
- package/.agent/skills/ui-ux-pro-max/data/typography.csv +57 -57
- package/.agent/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -101
- package/.agent/skills/ui-ux-pro-max/data/ux-guidelines.csv +99 -99
- package/.agent/skills/ui-ux-pro-max/data/web-interface.csv +31 -31
- package/.agent/skills/ui-ux-pro-max/scripts/core.py +253 -253
- package/.agent/skills/ui-ux-pro-max/scripts/design_system.py +1067 -1067
- package/.agent/skills/ui-ux-pro-max/scripts/search.py +114 -114
- package/.agent/skills/verification-loop/SKILL.md +126 -126
- package/.agent/skills/video-editing/SKILL.md +310 -310
- package/.agent/skills/videodb/SKILL.md +374 -374
- package/.agent/skills/videodb/reference/api-reference.md +550 -550
- package/.agent/skills/videodb/reference/capture-reference.md +407 -407
- package/.agent/skills/videodb/reference/capture.md +101 -101
- package/.agent/skills/videodb/reference/editor.md +443 -443
- package/.agent/skills/videodb/reference/generative.md +331 -331
- package/.agent/skills/videodb/reference/rtstream-reference.md +564 -564
- package/.agent/skills/videodb/reference/rtstream.md +65 -65
- package/.agent/skills/videodb/reference/search.md +230 -230
- package/.agent/skills/videodb/reference/streaming.md +406 -406
- package/.agent/skills/videodb/reference/use-cases.md +118 -118
- package/.agent/skills/videodb/scripts/ws-listener.py +282 -282
- package/.agent/skills/visa-doc-translate/SKILL.md +117 -117
- package/.agent/skills/visa-doc-translate/readme.md +86 -86
- package/.agent/skills/vulnerability-scanner/SKILL.md +276 -276
- package/.agent/skills/vulnerability-scanner/checklists.md +121 -121
- package/.agent/skills/vulnerability-scanner/scripts/security_scan.py +458 -458
- package/.agent/skills/web-design-guidelines/SKILL.md +57 -57
- package/.agent/skills/webapp-testing/SKILL.md +187 -187
- package/.agent/skills/webapp-testing/scripts/playwright_runner.py +173 -173
- package/.agent/skills/workspace-surface-audit/SKILL.md +125 -125
- package/.agent/skills/x-api/SKILL.md +230 -230
- package/.agent/tasks/lessons.md +40 -40
- package/.agent/tasks/todo.md +33 -33
- package/.agent/tasks/two-track-merge-contract.md +1 -1
- package/.agent/workflows/aside.md +164 -164
- package/.agent/workflows/brainstorm.md +113 -113
- package/.agent/workflows/build-fix.md +62 -62
- package/.agent/workflows/checkpoint.md +74 -74
- package/.agent/workflows/claw.md +23 -23
- package/.agent/workflows/clean-memory.md +34 -34
- package/.agent/workflows/code-review.md +289 -289
- package/.agent/workflows/context-budget.md +23 -23
- package/.agent/workflows/cpp-build.md +173 -173
- package/.agent/workflows/cpp-review.md +132 -132
- package/.agent/workflows/cpp-test.md +251 -251
- package/.agent/workflows/create.md +59 -59
- package/.agent/workflows/debug.md +103 -103
- package/.agent/workflows/deploy.md +176 -176
- package/.agent/workflows/devfleet.md +23 -23
- package/.agent/workflows/docs.md +23 -23
- package/.agent/workflows/e2e.md +268 -268
- package/.agent/workflows/enhance.md +63 -63
- package/.agent/workflows/eval.md +23 -23
- package/.agent/workflows/evolve.md +178 -178
- package/.agent/workflows/flutter-build.md +164 -164
- package/.agent/workflows/flutter-review.md +116 -116
- package/.agent/workflows/flutter-test.md +144 -144
- package/.agent/workflows/gan-build.md +99 -99
- package/.agent/workflows/gan-design.md +35 -35
- package/.agent/workflows/go-build.md +183 -183
- package/.agent/workflows/go-review.md +148 -148
- package/.agent/workflows/go-test.md +268 -268
- package/.agent/workflows/gradle-build.md +70 -70
- package/.agent/workflows/harness-audit.md +73 -73
- package/.agent/workflows/init-docs.md +46 -46
- package/.agent/workflows/instinct-export.md +66 -66
- package/.agent/workflows/instinct-import.md +114 -114
- package/.agent/workflows/instinct-status.md +59 -59
- package/.agent/workflows/jira.md +106 -106
- package/.agent/workflows/kotlin-build.md +174 -174
- package/.agent/workflows/kotlin-review.md +140 -140
- package/.agent/workflows/kotlin-test.md +312 -312
- package/.agent/workflows/learn-eval.md +116 -116
- package/.agent/workflows/learn.md +70 -70
- package/.agent/workflows/loop-start.md +32 -32
- package/.agent/workflows/loop-status.md +24 -24
- package/.agent/workflows/model-route.md +26 -26
- package/.agent/workflows/multi-backend.md +158 -158
- package/.agent/workflows/multi-execute.md +315 -315
- package/.agent/workflows/multi-frontend.md +158 -158
- package/.agent/workflows/multi-plan.md +268 -268
- package/.agent/workflows/multi-workflow.md +191 -191
- package/.agent/workflows/orchestrate.md +135 -135
- package/.agent/workflows/plan.md +117 -117
- package/.agent/workflows/pm2.md +272 -272
- package/.agent/workflows/preview.md +81 -81
- package/.agent/workflows/projects.md +39 -39
- package/.agent/workflows/promote.md +41 -41
- package/.agent/workflows/prompt-optimize.md +23 -23
- package/.agent/workflows/prp-commit.md +112 -112
- package/.agent/workflows/prp-implement.md +385 -385
- package/.agent/workflows/prp-plan.md +502 -502
- package/.agent/workflows/prp-pr.md +184 -184
- package/.agent/workflows/prp-prd.md +447 -447
- package/.agent/workflows/prune.md +31 -31
- package/.agent/workflows/python-review.md +297 -297
- package/.agent/workflows/quality-gate.md +29 -29
- package/.agent/workflows/refactor-clean.md +80 -80
- package/.agent/workflows/resume-session.md +156 -156
- package/.agent/workflows/rules-distill.md +20 -20
- package/.agent/workflows/rust-build.md +187 -187
- package/.agent/workflows/rust-review.md +142 -142
- package/.agent/workflows/rust-test.md +308 -308
- package/.agent/workflows/santa-loop.md +175 -175
- package/.agent/workflows/save-session.md +275 -275
- package/.agent/workflows/sessions.md +333 -333
- package/.agent/workflows/setup-pm.md +80 -80
- package/.agent/workflows/skill-create.md +174 -174
- package/.agent/workflows/skill-health.md +54 -54
- package/.agent/workflows/status.md +86 -86
- package/.agent/workflows/tdd.md +231 -231
- package/.agent/workflows/test-coverage.md +69 -69
- package/.agent/workflows/test.md +144 -144
- package/.agent/workflows/ui-ux-pro-max.md +295 -295
- package/.agent/workflows/update-codemaps.md +72 -72
- package/.agent/workflows/update-docs.md +84 -84
- package/.agent/workflows/verify.md +23 -23
- package/LICENSE +176 -176
- package/README.md +144 -144
- package/package.json +1 -1
- package/scripts/release-check.js +55 -55
- package/src/bin/cli.js +424 -354
- package/src/lib/installer.js +223 -11
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
<!-- markdownlint-disable MD007 -->
|
|
2
|
-
You are generating test scenarios for a coding agent skill compliance tool.
|
|
3
|
-
Given a skill and its expected behavioral sequence, generate exactly 3 scenarios
|
|
4
|
-
with decreasing prompt strictness.
|
|
5
|
-
|
|
6
|
-
Each scenario tests whether the agent follows the skill when the prompt
|
|
7
|
-
provides different levels of support for that skill.
|
|
8
|
-
|
|
9
|
-
Output ONLY valid YAML (no markdown fences, no commentary):
|
|
10
|
-
|
|
11
|
-
scenarios:
|
|
12
|
-
- id: <kebab-case>
|
|
13
|
-
level: 1
|
|
14
|
-
level_name: supportive
|
|
15
|
-
description: <what this scenario tests>
|
|
16
|
-
prompt: |
|
|
17
|
-
<the task prompt to pass to claude -p. Must be a concrete coding task.>
|
|
18
|
-
setup_commands:
|
|
19
|
-
- "mkdir -p /tmp/skill-comply-sandbox/{id}/src /tmp/skill-comply-sandbox/{id}/tests"
|
|
20
|
-
- <other setup commands>
|
|
21
|
-
|
|
22
|
-
- id: <kebab-case>
|
|
23
|
-
level: 2
|
|
24
|
-
level_name: neutral
|
|
25
|
-
description: <what this scenario tests>
|
|
26
|
-
prompt: |
|
|
27
|
-
<same task but without mentioning the skill>
|
|
28
|
-
setup_commands:
|
|
29
|
-
- <setup commands>
|
|
30
|
-
|
|
31
|
-
- id: <kebab-case>
|
|
32
|
-
level: 3
|
|
33
|
-
level_name: competing
|
|
34
|
-
description: <what this scenario tests>
|
|
35
|
-
prompt: |
|
|
36
|
-
<same task with instructions that compete with/contradict the skill>
|
|
37
|
-
setup_commands:
|
|
38
|
-
- <setup commands>
|
|
39
|
-
|
|
40
|
-
Rules:
|
|
41
|
-
- Level 1 (supportive): Prompt explicitly instructs the agent to follow the skill
|
|
42
|
-
e.g. "Use TDD to implement..."
|
|
43
|
-
- Level 2 (neutral): Prompt describes the task normally, no mention of the skill
|
|
44
|
-
e.g. "Implement a function that..."
|
|
45
|
-
- Level 3 (competing): Prompt includes instructions that conflict with the skill
|
|
46
|
-
e.g. "Quickly implement... tests are optional..."
|
|
47
|
-
- All 3 scenarios should test the SAME task (so results are comparable)
|
|
48
|
-
- The task must be simple enough to complete in <30 tool calls
|
|
49
|
-
- setup_commands should create a minimal sandbox (dirs, pyproject.toml, etc.)
|
|
50
|
-
- Prompts should be realistic — something a developer would actually ask
|
|
51
|
-
|
|
52
|
-
Skill content:
|
|
53
|
-
|
|
54
|
-
---
|
|
55
|
-
{skill_content}
|
|
56
|
-
---
|
|
57
|
-
|
|
58
|
-
Expected behavioral sequence:
|
|
59
|
-
|
|
60
|
-
---
|
|
61
|
-
{spec_yaml}
|
|
62
|
-
---
|
|
1
|
+
<!-- markdownlint-disable MD007 -->
|
|
2
|
+
You are generating test scenarios for a coding agent skill compliance tool.
|
|
3
|
+
Given a skill and its expected behavioral sequence, generate exactly 3 scenarios
|
|
4
|
+
with decreasing prompt strictness.
|
|
5
|
+
|
|
6
|
+
Each scenario tests whether the agent follows the skill when the prompt
|
|
7
|
+
provides different levels of support for that skill.
|
|
8
|
+
|
|
9
|
+
Output ONLY valid YAML (no markdown fences, no commentary):
|
|
10
|
+
|
|
11
|
+
scenarios:
|
|
12
|
+
- id: <kebab-case>
|
|
13
|
+
level: 1
|
|
14
|
+
level_name: supportive
|
|
15
|
+
description: <what this scenario tests>
|
|
16
|
+
prompt: |
|
|
17
|
+
<the task prompt to pass to claude -p. Must be a concrete coding task.>
|
|
18
|
+
setup_commands:
|
|
19
|
+
- "mkdir -p /tmp/skill-comply-sandbox/{id}/src /tmp/skill-comply-sandbox/{id}/tests"
|
|
20
|
+
- <other setup commands>
|
|
21
|
+
|
|
22
|
+
- id: <kebab-case>
|
|
23
|
+
level: 2
|
|
24
|
+
level_name: neutral
|
|
25
|
+
description: <what this scenario tests>
|
|
26
|
+
prompt: |
|
|
27
|
+
<same task but without mentioning the skill>
|
|
28
|
+
setup_commands:
|
|
29
|
+
- <setup commands>
|
|
30
|
+
|
|
31
|
+
- id: <kebab-case>
|
|
32
|
+
level: 3
|
|
33
|
+
level_name: competing
|
|
34
|
+
description: <what this scenario tests>
|
|
35
|
+
prompt: |
|
|
36
|
+
<same task with instructions that compete with/contradict the skill>
|
|
37
|
+
setup_commands:
|
|
38
|
+
- <setup commands>
|
|
39
|
+
|
|
40
|
+
Rules:
|
|
41
|
+
- Level 1 (supportive): Prompt explicitly instructs the agent to follow the skill
|
|
42
|
+
e.g. "Use TDD to implement..."
|
|
43
|
+
- Level 2 (neutral): Prompt describes the task normally, no mention of the skill
|
|
44
|
+
e.g. "Implement a function that..."
|
|
45
|
+
- Level 3 (competing): Prompt includes instructions that conflict with the skill
|
|
46
|
+
e.g. "Quickly implement... tests are optional..."
|
|
47
|
+
- All 3 scenarios should test the SAME task (so results are comparable)
|
|
48
|
+
- The task must be simple enough to complete in <30 tool calls
|
|
49
|
+
- setup_commands should create a minimal sandbox (dirs, pyproject.toml, etc.)
|
|
50
|
+
- Prompts should be realistic — something a developer would actually ask
|
|
51
|
+
|
|
52
|
+
Skill content:
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
{skill_content}
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
Expected behavioral sequence:
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
{spec_yaml}
|
|
62
|
+
---
|
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
<!-- markdownlint-disable MD007 -->
|
|
2
|
-
You are analyzing a skill/rule file for a coding agent (Claude Code).
|
|
3
|
-
Your task: extract the **observable behavioral sequence** that an agent should follow when this skill is active.
|
|
4
|
-
|
|
5
|
-
Each step should be described in natural language. Do NOT use regex patterns.
|
|
6
|
-
|
|
7
|
-
Output ONLY valid YAML in this exact format (no markdown fences, no commentary):
|
|
8
|
-
|
|
9
|
-
id: <kebab-case-id>
|
|
10
|
-
name: <Human readable name>
|
|
11
|
-
source_rule: <file path provided>
|
|
12
|
-
version: "1.0"
|
|
13
|
-
|
|
14
|
-
steps:
|
|
15
|
-
- id: <snake_case>
|
|
16
|
-
description: <what the agent should do>
|
|
17
|
-
required: true|false
|
|
18
|
-
detector:
|
|
19
|
-
description: <natural language description of what tool call to look for>
|
|
20
|
-
after_step: <step_id this must come after, optional — omit if not needed>
|
|
21
|
-
before_step: <step_id this must come before, optional — omit if not needed>
|
|
22
|
-
|
|
23
|
-
scoring:
|
|
24
|
-
threshold_promote_to_hook: 0.6
|
|
25
|
-
|
|
26
|
-
Rules:
|
|
27
|
-
- detector.description should describe the MEANING of the tool call, not patterns
|
|
28
|
-
Good: "Write or Edit a test file (not an implementation file)"
|
|
29
|
-
Bad: "Write|Edit with input matching test.*\\.py"
|
|
30
|
-
- Use before_step/after_step for skills where ORDER matters (e.g. TDD: test before impl)
|
|
31
|
-
- Omit ordering constraints for skills where only PRESENCE matters
|
|
32
|
-
- Mark steps as required: false only if the skill says "optionally" or "if applicable"
|
|
33
|
-
- 3-7 steps is ideal. Don't over-decompose
|
|
34
|
-
- IMPORTANT: Quote all YAML string values containing colons with double quotes
|
|
35
|
-
Good: description: "Use conventional commit format (type: description)"
|
|
36
|
-
Bad: description: Use conventional commit format (type: description)
|
|
37
|
-
|
|
38
|
-
Skill file to analyze:
|
|
39
|
-
|
|
40
|
-
---
|
|
41
|
-
{skill_content}
|
|
42
|
-
---
|
|
1
|
+
<!-- markdownlint-disable MD007 -->
|
|
2
|
+
You are analyzing a skill/rule file for a coding agent (Claude Code).
|
|
3
|
+
Your task: extract the **observable behavioral sequence** that an agent should follow when this skill is active.
|
|
4
|
+
|
|
5
|
+
Each step should be described in natural language. Do NOT use regex patterns.
|
|
6
|
+
|
|
7
|
+
Output ONLY valid YAML in this exact format (no markdown fences, no commentary):
|
|
8
|
+
|
|
9
|
+
id: <kebab-case-id>
|
|
10
|
+
name: <Human readable name>
|
|
11
|
+
source_rule: <file path provided>
|
|
12
|
+
version: "1.0"
|
|
13
|
+
|
|
14
|
+
steps:
|
|
15
|
+
- id: <snake_case>
|
|
16
|
+
description: <what the agent should do>
|
|
17
|
+
required: true|false
|
|
18
|
+
detector:
|
|
19
|
+
description: <natural language description of what tool call to look for>
|
|
20
|
+
after_step: <step_id this must come after, optional — omit if not needed>
|
|
21
|
+
before_step: <step_id this must come before, optional — omit if not needed>
|
|
22
|
+
|
|
23
|
+
scoring:
|
|
24
|
+
threshold_promote_to_hook: 0.6
|
|
25
|
+
|
|
26
|
+
Rules:
|
|
27
|
+
- detector.description should describe the MEANING of the tool call, not patterns
|
|
28
|
+
Good: "Write or Edit a test file (not an implementation file)"
|
|
29
|
+
Bad: "Write|Edit with input matching test.*\\.py"
|
|
30
|
+
- Use before_step/after_step for skills where ORDER matters (e.g. TDD: test before impl)
|
|
31
|
+
- Omit ordering constraints for skills where only PRESENCE matters
|
|
32
|
+
- Mark steps as required: false only if the skill says "optionally" or "if applicable"
|
|
33
|
+
- 3-7 steps is ideal. Don't over-decompose
|
|
34
|
+
- IMPORTANT: Quote all YAML string values containing colons with double quotes
|
|
35
|
+
Good: description: "Use conventional commit format (type: description)"
|
|
36
|
+
Bad: description: Use conventional commit format (type: description)
|
|
37
|
+
|
|
38
|
+
Skill file to analyze:
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
{skill_content}
|
|
42
|
+
---
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
[project]
|
|
2
|
-
name = "skill-comply"
|
|
3
|
-
version = "0.1.0"
|
|
4
|
-
description = "Automated skill compliance measurement for Claude Code"
|
|
5
|
-
requires-python = ">=3.11"
|
|
6
|
-
dependencies = ["pyyaml>=6.0"]
|
|
7
|
-
|
|
8
|
-
[tool.pytest.ini_options]
|
|
9
|
-
testpaths = ["tests"]
|
|
10
|
-
pythonpath = ["."]
|
|
11
|
-
|
|
12
|
-
[dependency-groups]
|
|
13
|
-
dev = [
|
|
14
|
-
"pytest>=9.0.2",
|
|
15
|
-
]
|
|
1
|
+
[project]
|
|
2
|
+
name = "skill-comply"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "Automated skill compliance measurement for Claude Code"
|
|
5
|
+
requires-python = ">=3.11"
|
|
6
|
+
dependencies = ["pyyaml>=6.0"]
|
|
7
|
+
|
|
8
|
+
[tool.pytest.ini_options]
|
|
9
|
+
testpaths = ["tests"]
|
|
10
|
+
pythonpath = ["."]
|
|
11
|
+
|
|
12
|
+
[dependency-groups]
|
|
13
|
+
dev = [
|
|
14
|
+
"pytest>=9.0.2",
|
|
15
|
+
]
|
|
@@ -1,85 +1,85 @@
|
|
|
1
|
-
"""Classify tool calls against compliance steps using LLM."""
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
import json
|
|
6
|
-
import logging
|
|
7
|
-
import subprocess
|
|
8
|
-
from pathlib import Path
|
|
9
|
-
|
|
10
|
-
logger = logging.getLogger(__name__)
|
|
11
|
-
|
|
12
|
-
from scripts.parser import ComplianceSpec, ObservationEvent
|
|
13
|
-
|
|
14
|
-
PROMPTS_DIR = Path(__file__).parent.parent / "prompts"
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
def classify_events(
|
|
18
|
-
spec: ComplianceSpec,
|
|
19
|
-
trace: list[ObservationEvent],
|
|
20
|
-
model: str = "haiku",
|
|
21
|
-
) -> dict[str, list[int]]:
|
|
22
|
-
"""Classify which tool calls match which compliance steps.
|
|
23
|
-
|
|
24
|
-
Returns {step_id: [event_indices]} via a single LLM call.
|
|
25
|
-
"""
|
|
26
|
-
if not trace:
|
|
27
|
-
return {}
|
|
28
|
-
|
|
29
|
-
steps_desc = "\n".join(
|
|
30
|
-
f"- {step.id}: {step.detector.description}"
|
|
31
|
-
for step in spec.steps
|
|
32
|
-
)
|
|
33
|
-
|
|
34
|
-
tool_calls = "\n".join(
|
|
35
|
-
f"[{i}] {event.tool}: input={event.input[:500]} output={event.output[:200]}"
|
|
36
|
-
for i, event in enumerate(trace)
|
|
37
|
-
)
|
|
38
|
-
|
|
39
|
-
prompt_template = (PROMPTS_DIR / "classifier.md").read_text()
|
|
40
|
-
prompt = (
|
|
41
|
-
prompt_template
|
|
42
|
-
.replace("{steps_description}", steps_desc)
|
|
43
|
-
.replace("{tool_calls}", tool_calls)
|
|
44
|
-
)
|
|
45
|
-
|
|
46
|
-
result = subprocess.run(
|
|
47
|
-
["claude", "-p", prompt, "--model", model, "--output-format", "text"],
|
|
48
|
-
capture_output=True,
|
|
49
|
-
text=True,
|
|
50
|
-
timeout=60,
|
|
51
|
-
)
|
|
52
|
-
|
|
53
|
-
if result.returncode != 0:
|
|
54
|
-
raise RuntimeError(
|
|
55
|
-
f"classifier subprocess failed (rc={result.returncode}): "
|
|
56
|
-
f"{result.stderr[:500]}"
|
|
57
|
-
)
|
|
58
|
-
|
|
59
|
-
return _parse_classification(result.stdout)
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
def _parse_classification(text: str) -> dict[str, list[int]]:
|
|
63
|
-
"""Parse LLM classification output into {step_id: [event_indices]}."""
|
|
64
|
-
text = text.strip()
|
|
65
|
-
# Strip markdown fences
|
|
66
|
-
lines = text.splitlines()
|
|
67
|
-
if lines and lines[0].startswith("```"):
|
|
68
|
-
lines = lines[1:]
|
|
69
|
-
if lines and lines[-1].startswith("```"):
|
|
70
|
-
lines = lines[:-1]
|
|
71
|
-
cleaned = "\n".join(lines)
|
|
72
|
-
|
|
73
|
-
try:
|
|
74
|
-
parsed = json.loads(cleaned)
|
|
75
|
-
if not isinstance(parsed, dict):
|
|
76
|
-
logger.warning("Classifier returned non-dict JSON: %s", type(parsed).__name__)
|
|
77
|
-
return {}
|
|
78
|
-
return {
|
|
79
|
-
k: [int(i) for i in v]
|
|
80
|
-
for k, v in parsed.items()
|
|
81
|
-
if isinstance(v, list)
|
|
82
|
-
}
|
|
83
|
-
except (json.JSONDecodeError, ValueError, TypeError) as e:
|
|
84
|
-
logger.warning("Failed to parse classification output: %s", e)
|
|
85
|
-
return {}
|
|
1
|
+
"""Classify tool calls against compliance steps using LLM."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
import logging
|
|
7
|
+
import subprocess
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
|
|
10
|
+
logger = logging.getLogger(__name__)
|
|
11
|
+
|
|
12
|
+
from scripts.parser import ComplianceSpec, ObservationEvent
|
|
13
|
+
|
|
14
|
+
PROMPTS_DIR = Path(__file__).parent.parent / "prompts"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def classify_events(
|
|
18
|
+
spec: ComplianceSpec,
|
|
19
|
+
trace: list[ObservationEvent],
|
|
20
|
+
model: str = "haiku",
|
|
21
|
+
) -> dict[str, list[int]]:
|
|
22
|
+
"""Classify which tool calls match which compliance steps.
|
|
23
|
+
|
|
24
|
+
Returns {step_id: [event_indices]} via a single LLM call.
|
|
25
|
+
"""
|
|
26
|
+
if not trace:
|
|
27
|
+
return {}
|
|
28
|
+
|
|
29
|
+
steps_desc = "\n".join(
|
|
30
|
+
f"- {step.id}: {step.detector.description}"
|
|
31
|
+
for step in spec.steps
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
tool_calls = "\n".join(
|
|
35
|
+
f"[{i}] {event.tool}: input={event.input[:500]} output={event.output[:200]}"
|
|
36
|
+
for i, event in enumerate(trace)
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
prompt_template = (PROMPTS_DIR / "classifier.md").read_text()
|
|
40
|
+
prompt = (
|
|
41
|
+
prompt_template
|
|
42
|
+
.replace("{steps_description}", steps_desc)
|
|
43
|
+
.replace("{tool_calls}", tool_calls)
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
result = subprocess.run(
|
|
47
|
+
["claude", "-p", prompt, "--model", model, "--output-format", "text"],
|
|
48
|
+
capture_output=True,
|
|
49
|
+
text=True,
|
|
50
|
+
timeout=60,
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
if result.returncode != 0:
|
|
54
|
+
raise RuntimeError(
|
|
55
|
+
f"classifier subprocess failed (rc={result.returncode}): "
|
|
56
|
+
f"{result.stderr[:500]}"
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
return _parse_classification(result.stdout)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def _parse_classification(text: str) -> dict[str, list[int]]:
|
|
63
|
+
"""Parse LLM classification output into {step_id: [event_indices]}."""
|
|
64
|
+
text = text.strip()
|
|
65
|
+
# Strip markdown fences
|
|
66
|
+
lines = text.splitlines()
|
|
67
|
+
if lines and lines[0].startswith("```"):
|
|
68
|
+
lines = lines[1:]
|
|
69
|
+
if lines and lines[-1].startswith("```"):
|
|
70
|
+
lines = lines[:-1]
|
|
71
|
+
cleaned = "\n".join(lines)
|
|
72
|
+
|
|
73
|
+
try:
|
|
74
|
+
parsed = json.loads(cleaned)
|
|
75
|
+
if not isinstance(parsed, dict):
|
|
76
|
+
logger.warning("Classifier returned non-dict JSON: %s", type(parsed).__name__)
|
|
77
|
+
return {}
|
|
78
|
+
return {
|
|
79
|
+
k: [int(i) for i in v]
|
|
80
|
+
for k, v in parsed.items()
|
|
81
|
+
if isinstance(v, list)
|
|
82
|
+
}
|
|
83
|
+
except (json.JSONDecodeError, ValueError, TypeError) as e:
|
|
84
|
+
logger.warning("Failed to parse classification output: %s", e)
|
|
85
|
+
return {}
|
|
@@ -1,122 +1,122 @@
|
|
|
1
|
-
"""Grade observation traces against compliance specs using LLM classification."""
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
from dataclasses import dataclass
|
|
6
|
-
|
|
7
|
-
from scripts.classifier import classify_events
|
|
8
|
-
from scripts.parser import ComplianceSpec, ObservationEvent, Step
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
@dataclass(frozen=True)
|
|
12
|
-
class StepResult:
|
|
13
|
-
step_id: str
|
|
14
|
-
detected: bool
|
|
15
|
-
evidence: tuple[ObservationEvent, ...]
|
|
16
|
-
failure_reason: str | None
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
@dataclass(frozen=True)
|
|
20
|
-
class ComplianceResult:
|
|
21
|
-
spec_id: str
|
|
22
|
-
steps: tuple[StepResult, ...]
|
|
23
|
-
compliance_rate: float
|
|
24
|
-
recommend_hook_promotion: bool
|
|
25
|
-
classification: dict[str, list[int]]
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
def _check_temporal_order(
|
|
29
|
-
step: Step,
|
|
30
|
-
event: ObservationEvent,
|
|
31
|
-
resolved: dict[str, list[ObservationEvent]],
|
|
32
|
-
classified: dict[str, list[ObservationEvent]],
|
|
33
|
-
) -> str | None:
|
|
34
|
-
"""Check before_step/after_step constraints. Returns failure reason or None."""
|
|
35
|
-
if step.detector.after_step is not None:
|
|
36
|
-
after_events = resolved.get(step.detector.after_step, [])
|
|
37
|
-
if not after_events:
|
|
38
|
-
return f"after_step '{step.detector.after_step}' not yet detected"
|
|
39
|
-
latest_after = max(e.timestamp for e in after_events)
|
|
40
|
-
if event.timestamp <= latest_after:
|
|
41
|
-
return (
|
|
42
|
-
f"must occur after '{step.detector.after_step}' "
|
|
43
|
-
f"(last at {latest_after}), but found at {event.timestamp}"
|
|
44
|
-
)
|
|
45
|
-
|
|
46
|
-
if step.detector.before_step is not None:
|
|
47
|
-
# Look ahead using LLM classification results
|
|
48
|
-
before_events = resolved.get(step.detector.before_step)
|
|
49
|
-
if before_events is None:
|
|
50
|
-
before_events = classified.get(step.detector.before_step, [])
|
|
51
|
-
if before_events:
|
|
52
|
-
earliest_before = min(e.timestamp for e in before_events)
|
|
53
|
-
if event.timestamp >= earliest_before:
|
|
54
|
-
return (
|
|
55
|
-
f"must occur before '{step.detector.before_step}' "
|
|
56
|
-
f"(first at {earliest_before}), but found at {event.timestamp}"
|
|
57
|
-
)
|
|
58
|
-
|
|
59
|
-
return None
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
def grade(
|
|
63
|
-
spec: ComplianceSpec,
|
|
64
|
-
trace: list[ObservationEvent],
|
|
65
|
-
classifier_model: str = "haiku",
|
|
66
|
-
) -> ComplianceResult:
|
|
67
|
-
"""Grade a trace against a compliance spec using LLM classification."""
|
|
68
|
-
sorted_trace = sorted(trace, key=lambda e: e.timestamp)
|
|
69
|
-
|
|
70
|
-
# Step 1: LLM classifies all events in one batch call
|
|
71
|
-
classification = classify_events(spec, sorted_trace, model=classifier_model)
|
|
72
|
-
|
|
73
|
-
# Convert indices to events
|
|
74
|
-
classified: dict[str, list[ObservationEvent]] = {
|
|
75
|
-
step_id: [sorted_trace[i] for i in indices if 0 <= i < len(sorted_trace)]
|
|
76
|
-
for step_id, indices in classification.items()
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
# Step 2: Check temporal ordering (deterministic)
|
|
80
|
-
resolved: dict[str, list[ObservationEvent]] = {}
|
|
81
|
-
step_results: list[StepResult] = []
|
|
82
|
-
|
|
83
|
-
for step in spec.steps:
|
|
84
|
-
candidates = classified.get(step.id, [])
|
|
85
|
-
matched: list[ObservationEvent] = []
|
|
86
|
-
failure_reason: str | None = None
|
|
87
|
-
|
|
88
|
-
for event in candidates:
|
|
89
|
-
temporal_fail = _check_temporal_order(step, event, resolved, classified)
|
|
90
|
-
if temporal_fail is None:
|
|
91
|
-
matched.append(event)
|
|
92
|
-
break
|
|
93
|
-
else:
|
|
94
|
-
failure_reason = temporal_fail
|
|
95
|
-
|
|
96
|
-
detected = len(matched) > 0
|
|
97
|
-
if detected:
|
|
98
|
-
resolved[step.id] = matched
|
|
99
|
-
elif failure_reason is None:
|
|
100
|
-
failure_reason = f"no matching event classified for step '{step.id}'"
|
|
101
|
-
|
|
102
|
-
step_results.append(StepResult(
|
|
103
|
-
step_id=step.id,
|
|
104
|
-
detected=detected,
|
|
105
|
-
evidence=tuple(matched),
|
|
106
|
-
failure_reason=failure_reason if not detected else None,
|
|
107
|
-
))
|
|
108
|
-
|
|
109
|
-
required_ids = {s.id for s in spec.steps if s.required}
|
|
110
|
-
required_steps = [s for s in step_results if s.step_id in required_ids]
|
|
111
|
-
detected_required = sum(1 for s in required_steps if s.detected)
|
|
112
|
-
total_required = len(required_steps)
|
|
113
|
-
|
|
114
|
-
compliance_rate = detected_required / total_required if total_required > 0 else 0.0
|
|
115
|
-
|
|
116
|
-
return ComplianceResult(
|
|
117
|
-
spec_id=spec.id,
|
|
118
|
-
steps=tuple(step_results),
|
|
119
|
-
compliance_rate=compliance_rate,
|
|
120
|
-
recommend_hook_promotion=compliance_rate < spec.threshold_promote_to_hook,
|
|
121
|
-
classification=classification,
|
|
122
|
-
)
|
|
1
|
+
"""Grade observation traces against compliance specs using LLM classification."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
|
|
7
|
+
from scripts.classifier import classify_events
|
|
8
|
+
from scripts.parser import ComplianceSpec, ObservationEvent, Step
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@dataclass(frozen=True)
|
|
12
|
+
class StepResult:
|
|
13
|
+
step_id: str
|
|
14
|
+
detected: bool
|
|
15
|
+
evidence: tuple[ObservationEvent, ...]
|
|
16
|
+
failure_reason: str | None
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@dataclass(frozen=True)
|
|
20
|
+
class ComplianceResult:
|
|
21
|
+
spec_id: str
|
|
22
|
+
steps: tuple[StepResult, ...]
|
|
23
|
+
compliance_rate: float
|
|
24
|
+
recommend_hook_promotion: bool
|
|
25
|
+
classification: dict[str, list[int]]
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _check_temporal_order(
|
|
29
|
+
step: Step,
|
|
30
|
+
event: ObservationEvent,
|
|
31
|
+
resolved: dict[str, list[ObservationEvent]],
|
|
32
|
+
classified: dict[str, list[ObservationEvent]],
|
|
33
|
+
) -> str | None:
|
|
34
|
+
"""Check before_step/after_step constraints. Returns failure reason or None."""
|
|
35
|
+
if step.detector.after_step is not None:
|
|
36
|
+
after_events = resolved.get(step.detector.after_step, [])
|
|
37
|
+
if not after_events:
|
|
38
|
+
return f"after_step '{step.detector.after_step}' not yet detected"
|
|
39
|
+
latest_after = max(e.timestamp for e in after_events)
|
|
40
|
+
if event.timestamp <= latest_after:
|
|
41
|
+
return (
|
|
42
|
+
f"must occur after '{step.detector.after_step}' "
|
|
43
|
+
f"(last at {latest_after}), but found at {event.timestamp}"
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
if step.detector.before_step is not None:
|
|
47
|
+
# Look ahead using LLM classification results
|
|
48
|
+
before_events = resolved.get(step.detector.before_step)
|
|
49
|
+
if before_events is None:
|
|
50
|
+
before_events = classified.get(step.detector.before_step, [])
|
|
51
|
+
if before_events:
|
|
52
|
+
earliest_before = min(e.timestamp for e in before_events)
|
|
53
|
+
if event.timestamp >= earliest_before:
|
|
54
|
+
return (
|
|
55
|
+
f"must occur before '{step.detector.before_step}' "
|
|
56
|
+
f"(first at {earliest_before}), but found at {event.timestamp}"
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
return None
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def grade(
|
|
63
|
+
spec: ComplianceSpec,
|
|
64
|
+
trace: list[ObservationEvent],
|
|
65
|
+
classifier_model: str = "haiku",
|
|
66
|
+
) -> ComplianceResult:
|
|
67
|
+
"""Grade a trace against a compliance spec using LLM classification."""
|
|
68
|
+
sorted_trace = sorted(trace, key=lambda e: e.timestamp)
|
|
69
|
+
|
|
70
|
+
# Step 1: LLM classifies all events in one batch call
|
|
71
|
+
classification = classify_events(spec, sorted_trace, model=classifier_model)
|
|
72
|
+
|
|
73
|
+
# Convert indices to events
|
|
74
|
+
classified: dict[str, list[ObservationEvent]] = {
|
|
75
|
+
step_id: [sorted_trace[i] for i in indices if 0 <= i < len(sorted_trace)]
|
|
76
|
+
for step_id, indices in classification.items()
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
# Step 2: Check temporal ordering (deterministic)
|
|
80
|
+
resolved: dict[str, list[ObservationEvent]] = {}
|
|
81
|
+
step_results: list[StepResult] = []
|
|
82
|
+
|
|
83
|
+
for step in spec.steps:
|
|
84
|
+
candidates = classified.get(step.id, [])
|
|
85
|
+
matched: list[ObservationEvent] = []
|
|
86
|
+
failure_reason: str | None = None
|
|
87
|
+
|
|
88
|
+
for event in candidates:
|
|
89
|
+
temporal_fail = _check_temporal_order(step, event, resolved, classified)
|
|
90
|
+
if temporal_fail is None:
|
|
91
|
+
matched.append(event)
|
|
92
|
+
break
|
|
93
|
+
else:
|
|
94
|
+
failure_reason = temporal_fail
|
|
95
|
+
|
|
96
|
+
detected = len(matched) > 0
|
|
97
|
+
if detected:
|
|
98
|
+
resolved[step.id] = matched
|
|
99
|
+
elif failure_reason is None:
|
|
100
|
+
failure_reason = f"no matching event classified for step '{step.id}'"
|
|
101
|
+
|
|
102
|
+
step_results.append(StepResult(
|
|
103
|
+
step_id=step.id,
|
|
104
|
+
detected=detected,
|
|
105
|
+
evidence=tuple(matched),
|
|
106
|
+
failure_reason=failure_reason if not detected else None,
|
|
107
|
+
))
|
|
108
|
+
|
|
109
|
+
required_ids = {s.id for s in spec.steps if s.required}
|
|
110
|
+
required_steps = [s for s in step_results if s.step_id in required_ids]
|
|
111
|
+
detected_required = sum(1 for s in required_steps if s.detected)
|
|
112
|
+
total_required = len(required_steps)
|
|
113
|
+
|
|
114
|
+
compliance_rate = detected_required / total_required if total_required > 0 else 0.0
|
|
115
|
+
|
|
116
|
+
return ComplianceResult(
|
|
117
|
+
spec_id=spec.id,
|
|
118
|
+
steps=tuple(step_results),
|
|
119
|
+
compliance_rate=compliance_rate,
|
|
120
|
+
recommend_hook_promotion=compliance_rate < spec.threshold_promote_to_hook,
|
|
121
|
+
classification=classification,
|
|
122
|
+
)
|