claudecode-omc 5.6.4 → 5.6.6
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/.local/commands/code-review.md +416 -0
- package/.local/commands/pr.md +250 -0
- package/.local/commands/prp-pr.md +244 -0
- package/.local/guidelines/CLAUDE.md +47 -0
- package/.local/skills/prompt-optimizer/SKILL.md +23 -4
- package/bundled/manifest.json +4 -4
- package/bundled/upstream/anthropic-skills/skills/algorithmic-art/LICENSE.txt +1 -1
- package/bundled/upstream/anthropic-skills/skills/brand-guidelines/LICENSE.txt +1 -1
- package/bundled/upstream/anthropic-skills/skills/canvas-design/LICENSE.txt +1 -1
- package/bundled/upstream/anthropic-skills/skills/claude-api/LICENSE.txt +1 -1
- package/bundled/upstream/anthropic-skills/skills/claude-api/SKILL.md +120 -58
- package/bundled/upstream/anthropic-skills/skills/claude-api/curl/examples.md +9 -9
- package/bundled/upstream/anthropic-skills/skills/claude-api/curl/managed-agents.md +336 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/go/managed-agents/README.md +561 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/java/claude-api.md +2 -2
- package/bundled/upstream/anthropic-skills/skills/claude-api/java/managed-agents/README.md +442 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/php/claude-api.md +10 -10
- package/bundled/upstream/anthropic-skills/skills/claude-api/php/managed-agents/README.md +435 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/README.md +16 -16
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/batches.md +3 -3
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/files-api.md +3 -3
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/streaming.md +7 -7
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/tool-use.md +19 -19
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/managed-agents/README.md +332 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/ruby/claude-api.md +4 -4
- package/bundled/upstream/anthropic-skills/skills/claude-api/ruby/managed-agents/README.md +389 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/agent-design.md +101 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/error-codes.md +11 -4
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/live-sources.md +60 -48
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-api-reference.md +372 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-client-patterns.md +209 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-core.md +220 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-environments.md +211 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-events.md +195 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-memory.md +197 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-multiagent.md +99 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-onboarding.md +114 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-outcomes.md +106 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-overview.md +67 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-tools.md +315 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-webhooks.md +110 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/model-migration.md +779 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/models.md +16 -14
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/prompt-caching.md +45 -2
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/tool-use-concepts.md +28 -6
- package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/README.md +15 -15
- package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/batches.md +2 -2
- package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/files-api.md +1 -1
- package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/streaming.md +5 -5
- package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/tool-use.md +15 -15
- package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/managed-agents/README.md +359 -0
- package/bundled/upstream/anthropic-skills/skills/internal-comms/LICENSE.txt +1 -1
- package/bundled/upstream/anthropic-skills/skills/mcp-builder/LICENSE.txt +1 -1
- package/bundled/upstream/anthropic-skills/skills/skill-creator/LICENSE.txt +1 -1
- package/bundled/upstream/anthropic-skills/skills/slack-gif-creator/LICENSE.txt +1 -1
- package/bundled/upstream/anthropic-skills/skills/theme-factory/LICENSE.txt +1 -1
- package/bundled/upstream/anthropic-skills/skills/web-artifacts-builder/LICENSE.txt +1 -1
- package/bundled/upstream/anthropic-skills/skills/webapp-testing/LICENSE.txt +1 -1
- package/bundled/upstream/ecc/.omc-source/bundle.json +2 -3
- package/bundled/upstream/ecc/.omc-source/manifests/.claude-plugin/marketplace.json +4 -4
- package/bundled/upstream/ecc/agents/a11y-architect.md +10 -2
- package/bundled/upstream/ecc/agents/architect.md +9 -0
- package/bundled/upstream/ecc/agents/build-error-resolver.md +9 -0
- package/bundled/upstream/ecc/agents/chief-of-staff.md +9 -0
- package/bundled/upstream/ecc/agents/code-architect.md +9 -0
- package/bundled/upstream/ecc/agents/code-explorer.md +10 -1
- package/bundled/upstream/ecc/agents/code-reviewer.md +87 -1
- package/bundled/upstream/ecc/agents/code-simplifier.md +9 -0
- package/bundled/upstream/ecc/agents/comment-analyzer.md +10 -1
- package/bundled/upstream/ecc/agents/conversation-analyzer.md +9 -0
- package/bundled/upstream/ecc/agents/cpp-build-resolver.md +9 -0
- package/bundled/upstream/ecc/agents/cpp-reviewer.md +9 -0
- package/bundled/upstream/ecc/agents/csharp-reviewer.md +9 -0
- package/bundled/upstream/ecc/agents/dart-build-resolver.md +9 -0
- package/bundled/upstream/ecc/agents/database-reviewer.md +9 -0
- package/bundled/upstream/ecc/agents/django-build-resolver.md +252 -0
- package/bundled/upstream/ecc/agents/django-reviewer.md +169 -0
- package/bundled/upstream/ecc/agents/doc-updater.md +9 -0
- package/bundled/upstream/ecc/agents/docs-lookup.md +9 -0
- package/bundled/upstream/ecc/agents/e2e-runner.md +9 -0
- package/bundled/upstream/ecc/agents/fastapi-reviewer.md +79 -0
- package/bundled/upstream/ecc/agents/flutter-reviewer.md +9 -0
- package/bundled/upstream/ecc/agents/fsharp-reviewer.md +109 -0
- package/bundled/upstream/ecc/agents/gan-evaluator.md +9 -0
- package/bundled/upstream/ecc/agents/gan-generator.md +9 -0
- package/bundled/upstream/ecc/agents/gan-planner.md +9 -0
- package/bundled/upstream/ecc/agents/go-build-resolver.md +9 -0
- package/bundled/upstream/ecc/agents/go-reviewer.md +9 -0
- package/bundled/upstream/ecc/agents/harmonyos-app-resolver.md +182 -0
- package/bundled/upstream/ecc/agents/harness-optimizer.md +9 -0
- package/bundled/upstream/ecc/agents/healthcare-reviewer.md +9 -0
- package/bundled/upstream/ecc/agents/homelab-architect.md +107 -0
- package/bundled/upstream/ecc/agents/java-build-resolver.md +133 -11
- package/bundled/upstream/ecc/agents/java-reviewer.md +130 -32
- package/bundled/upstream/ecc/agents/kotlin-build-resolver.md +9 -0
- package/bundled/upstream/ecc/agents/kotlin-reviewer.md +9 -0
- package/bundled/upstream/ecc/agents/loop-operator.md +9 -0
- package/bundled/upstream/ecc/agents/mle-reviewer.md +162 -0
- package/bundled/upstream/ecc/agents/network-architect.md +106 -0
- package/bundled/upstream/ecc/agents/network-config-reviewer.md +106 -0
- package/bundled/upstream/ecc/agents/network-troubleshooter.md +128 -0
- package/bundled/upstream/ecc/agents/opensource-forker.md +9 -0
- package/bundled/upstream/ecc/agents/opensource-packager.md +9 -0
- package/bundled/upstream/ecc/agents/opensource-sanitizer.md +9 -0
- package/bundled/upstream/ecc/agents/performance-optimizer.md +9 -0
- package/bundled/upstream/ecc/agents/planner.md +9 -0
- package/bundled/upstream/ecc/agents/pr-test-analyzer.md +9 -0
- package/bundled/upstream/ecc/agents/python-reviewer.md +9 -0
- package/bundled/upstream/ecc/agents/pytorch-build-resolver.md +12 -3
- package/bundled/upstream/ecc/agents/refactor-cleaner.md +9 -0
- package/bundled/upstream/ecc/agents/rust-build-resolver.md +9 -0
- package/bundled/upstream/ecc/agents/rust-reviewer.md +9 -0
- package/bundled/upstream/ecc/agents/security-reviewer.md +9 -0
- package/bundled/upstream/ecc/agents/seo-specialist.md +10 -1
- package/bundled/upstream/ecc/agents/silent-failure-hunter.md +9 -0
- package/bundled/upstream/ecc/agents/swift-build-resolver.md +170 -0
- package/bundled/upstream/ecc/agents/swift-reviewer.md +116 -0
- package/bundled/upstream/ecc/agents/tdd-guide.md +9 -0
- package/bundled/upstream/ecc/agents/type-design-analyzer.md +10 -1
- package/bundled/upstream/ecc/agents/typescript-reviewer.md +9 -0
- package/bundled/upstream/ecc/commands/auto-update.md +28 -0
- package/bundled/upstream/ecc/commands/build-fix.md +4 -0
- package/bundled/upstream/ecc/commands/checkpoint.md +4 -0
- package/bundled/upstream/ecc/commands/code-review.md +3 -3
- package/bundled/upstream/ecc/commands/cost-report.md +107 -0
- package/bundled/upstream/ecc/commands/cpp-build.md +1 -1
- package/bundled/upstream/ecc/commands/cpp-test.md +1 -1
- package/bundled/upstream/ecc/commands/ecc-guide.md +93 -0
- package/bundled/upstream/ecc/commands/fastapi-review.md +39 -0
- package/bundled/upstream/ecc/commands/flutter-build.md +1 -1
- package/bundled/upstream/ecc/commands/flutter-test.md +1 -1
- package/bundled/upstream/ecc/commands/gan-build.md +4 -0
- package/bundled/upstream/ecc/commands/gan-design.md +4 -0
- package/bundled/upstream/ecc/commands/go-build.md +1 -1
- package/bundled/upstream/ecc/commands/go-test.md +1 -1
- package/bundled/upstream/ecc/commands/harness-audit.md +4 -0
- package/bundled/upstream/ecc/commands/jira.md +2 -2
- package/bundled/upstream/ecc/commands/kotlin-build.md +1 -1
- package/bundled/upstream/ecc/commands/kotlin-test.md +1 -1
- package/bundled/upstream/ecc/commands/learn.md +4 -0
- package/bundled/upstream/ecc/commands/loop-start.md +4 -0
- package/bundled/upstream/ecc/commands/loop-status.md +54 -1
- package/bundled/upstream/ecc/commands/model-route.md +4 -0
- package/bundled/upstream/ecc/commands/multi-backend.md +4 -0
- package/bundled/upstream/ecc/commands/multi-execute.md +4 -0
- package/bundled/upstream/ecc/commands/multi-frontend.md +4 -0
- package/bundled/upstream/ecc/commands/multi-plan.md +4 -0
- package/bundled/upstream/ecc/commands/multi-workflow.md +4 -0
- package/bundled/upstream/ecc/commands/plan-prd.md +160 -0
- package/bundled/upstream/ecc/commands/plan.md +96 -13
- package/bundled/upstream/ecc/commands/pm2.md +4 -0
- package/bundled/upstream/ecc/commands/pr.md +184 -0
- package/bundled/upstream/ecc/commands/project-init.md +86 -0
- package/bundled/upstream/ecc/commands/python-review.md +1 -1
- package/bundled/upstream/ecc/commands/quality-gate.md +4 -0
- package/bundled/upstream/ecc/commands/refactor-clean.md +4 -0
- package/bundled/upstream/ecc/commands/rust-build.md +1 -1
- package/bundled/upstream/ecc/commands/rust-test.md +1 -1
- package/bundled/upstream/ecc/commands/security-scan.md +92 -0
- package/bundled/upstream/ecc/commands/sessions.md +6 -6
- package/bundled/upstream/ecc/commands/skill-health.md +3 -3
- package/bundled/upstream/ecc/commands/test-coverage.md +4 -0
- package/bundled/upstream/ecc/commands/update-codemaps.md +4 -0
- package/bundled/upstream/ecc/commands/update-docs.md +4 -0
- package/bundled/upstream/ecc/skills/accessibility/SKILL.md +1 -1
- package/bundled/upstream/ecc/skills/agent-architecture-audit/SKILL.md +256 -0
- package/bundled/upstream/ecc/skills/agent-payment-x402/SKILL.md +49 -3
- package/bundled/upstream/ecc/skills/agentic-os/SKILL.md +387 -0
- package/bundled/upstream/ecc/skills/angular-developer/SKILL.md +154 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/angular-animations.md +160 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/angular-aria.md +410 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/cli.md +86 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/component-harnesses.md +59 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/component-styling.md +91 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/components.md +117 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/creating-services.md +97 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/data-resolvers.md +69 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/define-routes.md +67 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/defining-providers.md +72 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/di-fundamentals.md +120 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/e2e-testing.md +56 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/effects.md +83 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/hierarchical-injectors.md +43 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/host-elements.md +80 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/injection-context.md +63 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/inputs.md +101 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/linked-signal.md +59 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/loading-strategies.md +61 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/mcp.md +108 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/navigate-to-routes.md +69 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/outputs.md +86 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/reactive-forms.md +122 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/rendering-strategies.md +44 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/resource.md +77 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/route-animations.md +56 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/route-guards.md +52 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/router-lifecycle.md +45 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/router-testing.md +87 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/show-routes-with-outlets.md +68 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/signal-forms.md +795 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/signals-overview.md +94 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/tailwind-css.md +69 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/template-driven-forms.md +114 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/testing-fundamentals.md +65 -0
- package/bundled/upstream/ecc/skills/autonomous-agent-harness/SKILL.md +6 -0
- package/bundled/upstream/ecc/skills/backend-patterns/SKILL.md +8 -45
- package/bundled/upstream/ecc/skills/cisco-ios-patterns/SKILL.md +163 -0
- package/bundled/upstream/ecc/skills/configure-ecc/SKILL.md +31 -14
- package/bundled/upstream/ecc/skills/continuous-learning/SKILL.md +10 -2
- package/bundled/upstream/ecc/skills/continuous-learning-v2/SKILL.md +19 -5
- package/bundled/upstream/ecc/skills/continuous-learning-v2/agents/observer-loop.sh +44 -4
- package/bundled/upstream/ecc/skills/continuous-learning-v2/agents/observer.md +4 -4
- package/bundled/upstream/ecc/skills/continuous-learning-v2/agents/start-observer.sh +5 -1
- package/bundled/upstream/ecc/skills/continuous-learning-v2/hooks/observe.sh +21 -5
- package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/detect-project.sh +58 -13
- package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/instinct-cli.py +97 -4
- package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/lib/homunculus-dir.sh +31 -0
- package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/migrate-homunculus.sh +62 -0
- package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/test_parse_instinct.py +34 -0
- package/bundled/upstream/ecc/skills/cost-tracking/SKILL.md +147 -0
- package/bundled/upstream/ecc/skills/deep-research/SKILL.md +4 -0
- package/bundled/upstream/ecc/skills/defi-amm-security/SKILL.md +6 -0
- package/bundled/upstream/ecc/skills/django-celery/SKILL.md +457 -0
- package/bundled/upstream/ecc/skills/ecc-guide/SKILL.md +189 -0
- package/bundled/upstream/ecc/skills/error-handling/SKILL.md +376 -0
- package/bundled/upstream/ecc/skills/exa-search/SKILL.md +4 -0
- package/bundled/upstream/ecc/skills/fal-ai-media/SKILL.md +4 -0
- package/bundled/upstream/ecc/skills/fastapi-patterns/SKILL.md +327 -0
- package/bundled/upstream/ecc/skills/flox-environments/SKILL.md +496 -0
- package/bundled/upstream/ecc/skills/frontend-design-direction/SKILL.md +92 -0
- package/bundled/upstream/ecc/skills/frontend-slides/animation-patterns.md +122 -0
- package/bundled/upstream/ecc/skills/frontend-slides/html-template.md +419 -0
- package/bundled/upstream/ecc/skills/frontend-slides/scripts/export-pdf.sh +418 -0
- package/bundled/upstream/ecc/skills/frontend-slides/scripts/extract-pptx.py +96 -0
- package/bundled/upstream/ecc/skills/frontend-slides/viewport-base.css +153 -0
- package/bundled/upstream/ecc/skills/fsharp-testing/SKILL.md +280 -0
- package/bundled/upstream/ecc/skills/gateguard/SKILL.md +4 -0
- package/bundled/upstream/ecc/skills/hermes-imports/SKILL.md +88 -0
- package/bundled/upstream/ecc/skills/homelab-network-readiness/SKILL.md +169 -0
- package/bundled/upstream/ecc/skills/homelab-network-setup/SKILL.md +129 -0
- package/bundled/upstream/ecc/skills/homelab-pihole-dns/SKILL.md +274 -0
- package/bundled/upstream/ecc/skills/homelab-vlan-segmentation/SKILL.md +311 -0
- package/bundled/upstream/ecc/skills/homelab-wireguard-vpn/SKILL.md +305 -0
- package/bundled/upstream/ecc/skills/ios-icon-gen/SKILL.md +157 -0
- package/bundled/upstream/ecc/skills/ios-icon-gen/scripts/generate_icons.swift +258 -0
- package/bundled/upstream/ecc/skills/ios-icon-gen/scripts/iconify_gen.sh +235 -0
- package/bundled/upstream/ecc/skills/java-coding-standards/SKILL.md +241 -5
- package/bundled/upstream/ecc/skills/make-interfaces-feel-better/SKILL.md +151 -0
- package/bundled/upstream/ecc/skills/mle-workflow/SKILL.md +346 -0
- package/bundled/upstream/ecc/skills/motion-advanced/SKILL.md +596 -0
- package/bundled/upstream/ecc/skills/motion-foundations/SKILL.md +299 -0
- package/bundled/upstream/ecc/skills/motion-patterns/SKILL.md +435 -0
- package/bundled/upstream/ecc/skills/motion-ui/SKILL.md +575 -0
- package/bundled/upstream/ecc/skills/mysql-patterns/SKILL.md +412 -0
- package/bundled/upstream/ecc/skills/netmiko-ssh-automation/SKILL.md +173 -0
- package/bundled/upstream/ecc/skills/network-bgp-diagnostics/SKILL.md +167 -0
- package/bundled/upstream/ecc/skills/network-config-validation/SKILL.md +210 -0
- package/bundled/upstream/ecc/skills/network-interface-health/SKILL.md +152 -0
- package/bundled/upstream/ecc/skills/openclaw-persona-forge/SKILL.md +1 -9
- package/bundled/upstream/ecc/skills/plan-orchestrate/SKILL.md +262 -0
- package/bundled/upstream/ecc/skills/prisma-patterns/SKILL.md +371 -0
- package/bundled/upstream/ecc/skills/production-audit/SKILL.md +206 -0
- package/bundled/upstream/ecc/skills/prompt-optimizer/SKILL.md +24 -400
- package/bundled/upstream/ecc/skills/quarkus-patterns/SKILL.md +722 -0
- package/bundled/upstream/ecc/skills/quarkus-security/SKILL.md +467 -0
- package/bundled/upstream/ecc/skills/quarkus-tdd/SKILL.md +811 -0
- package/bundled/upstream/ecc/skills/quarkus-verification/SKILL.md +479 -0
- package/bundled/upstream/ecc/skills/redis-patterns/SKILL.md +403 -0
- package/bundled/upstream/ecc/skills/scientific-db-pubmed-database/SKILL.md +175 -0
- package/bundled/upstream/ecc/skills/scientific-db-uspto-database/SKILL.md +177 -0
- package/bundled/upstream/ecc/skills/scientific-pkg-gget/SKILL.md +166 -0
- package/bundled/upstream/ecc/skills/scientific-thinking-literature-review/SKILL.md +192 -0
- package/bundled/upstream/ecc/skills/scientific-thinking-scholar-evaluation/SKILL.md +160 -0
- package/bundled/upstream/ecc/skills/search-first/SKILL.md +23 -2
- package/bundled/upstream/ecc/skills/security-review/SKILL.md +10 -2
- package/bundled/upstream/ecc/skills/skill-comply/scripts/runner.py +28 -3
- package/bundled/upstream/ecc/skills/skill-comply/tests/test_runner.py +172 -0
- package/bundled/upstream/ecc/skills/skill-scout/SKILL.md +140 -0
- package/bundled/upstream/ecc/skills/skill-stocktake/SKILL.md +1 -0
- package/bundled/upstream/ecc/skills/strategic-compact/SKILL.md +2 -2
- package/bundled/upstream/ecc/skills/tinystruct-patterns/SKILL.md +203 -0
- package/bundled/upstream/ecc/skills/tinystruct-patterns/references/architecture.md +90 -0
- package/bundled/upstream/ecc/skills/tinystruct-patterns/references/data-handling.md +60 -0
- package/bundled/upstream/ecc/skills/tinystruct-patterns/references/database.md +99 -0
- package/bundled/upstream/ecc/skills/tinystruct-patterns/references/routing.md +64 -0
- package/bundled/upstream/ecc/skills/tinystruct-patterns/references/system-usage.md +97 -0
- package/bundled/upstream/ecc/skills/tinystruct-patterns/references/testing.md +72 -0
- package/bundled/upstream/ecc/skills/ui-to-vue/SKILL.md +134 -0
- package/bundled/upstream/ecc/skills/vite-patterns/SKILL.md +449 -0
- package/bundled/upstream/ecc/skills/windows-desktop-e2e/SKILL.md +788 -0
- package/bundled/upstream/ecc/skills/x-api/SKILL.md +4 -0
- package/bundled/upstream/oh-my-claudecode/.omc-source/bundle.json +20 -0
- package/bundled/upstream/oh-my-claudecode/agents/analyst.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/architect.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/code-reviewer.md +26 -7
- package/bundled/upstream/oh-my-claudecode/agents/critic.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/debugger.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/designer.md +14 -1
- package/bundled/upstream/oh-my-claudecode/agents/document-specialist.md +1 -1
- package/bundled/upstream/oh-my-claudecode/agents/executor.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/explore.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/git-master.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/planner.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/qa-tester.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/scientist.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/security-reviewer.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/test-engineer.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/tracer.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/verifier.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/writer.md +2 -1
- package/bundled/upstream/oh-my-claudecode/skills/AGENTS.md +4 -3
- package/bundled/upstream/oh-my-claudecode/skills/ai-slop-cleaner/SKILL.md +12 -0
- package/bundled/upstream/oh-my-claudecode/skills/deep-dive/SKILL.md +69 -13
- package/bundled/upstream/oh-my-claudecode/skills/deep-interview/SKILL.md +176 -63
- package/bundled/upstream/oh-my-claudecode/skills/learner/SKILL.md +3 -1
- package/bundled/upstream/oh-my-claudecode/skills/omc-doctor/SKILL.md +22 -3
- package/bundled/upstream/oh-my-claudecode/skills/omc-reference/SKILL.md +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/01-install-claude-md.md +2 -2
- package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/02-configure.md +45 -2
- package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/03-integrations.md +46 -5
- package/bundled/upstream/oh-my-claudecode/skills/plan/SKILL.md +19 -17
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/config.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/parse.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/azure-devops.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/bitbucket.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/gitea.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/github.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/gitlab.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/interface.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/jira.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/session.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/tmux.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/worktree.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/psm.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/tests/test-psm-prompt-injection.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/ralph/SKILL.md +8 -8
- package/bundled/upstream/oh-my-claudecode/skills/ralplan/SKILL.md +9 -5
- package/bundled/upstream/oh-my-claudecode/skills/skill/SKILL.md +6 -6
- package/bundled/upstream/oh-my-claudecode/skills/skillify/SKILL.md +19 -3
- package/bundled/upstream/oh-my-claudecode/skills/trace/SKILL.md +3 -1
- package/bundled/upstream/oh-my-claudecode/skills/ultrawork/SKILL.md +20 -7
- package/bundled/upstream/superpowers/.omc-source/bundle.json +21 -0
- package/bundled/upstream/superpowers/hooks/hooks-cursor.json +1 -1
- package/bundled/upstream/superpowers/skills/executing-plans/SKILL.md +1 -1
- package/bundled/upstream/superpowers/skills/finishing-a-development-branch/SKILL.md +93 -42
- package/bundled/upstream/superpowers/skills/requesting-code-review/SKILL.md +7 -9
- package/bundled/upstream/superpowers/skills/requesting-code-review/code-reviewer.md +107 -85
- package/bundled/upstream/superpowers/skills/subagent-driven-development/SKILL.md +3 -1
- package/bundled/upstream/superpowers/skills/subagent-driven-development/code-quality-reviewer-prompt.md +2 -3
- package/bundled/upstream/superpowers/skills/systematic-debugging/CREATION-LOG.md +1 -1
- package/bundled/upstream/superpowers/skills/systematic-debugging/root-cause-tracing.md +1 -1
- package/bundled/upstream/superpowers/skills/using-git-worktrees/SKILL.md +95 -98
- package/bundled/upstream/superpowers/skills/using-superpowers/references/codex-tools.md +7 -48
- package/bundled/upstream/superpowers/skills/using-superpowers/references/copilot-tools.md +1 -11
- package/bundled/upstream/superpowers/skills/using-superpowers/references/gemini-tools.md +21 -3
- package/bundled/upstream/superpowers/skills/writing-plans/SKILL.md +1 -1
- package/package.json +1 -1
- package/src/cli/index.js +1 -0
- package/src/cli/setup.js +9 -0
- package/src/cli/skill-index.js +209 -0
- package/src/cli/skill.js +4 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/agent-sdk/README.md +0 -355
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/agent-sdk/patterns.md +0 -359
- package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/agent-sdk/README.md +0 -297
- package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/agent-sdk/patterns.md +0 -209
- package/bundled/upstream/ecc/commands/agent-sort.md +0 -23
- package/bundled/upstream/ecc/commands/claw.md +0 -23
- package/bundled/upstream/ecc/commands/context-budget.md +0 -23
- package/bundled/upstream/ecc/commands/devfleet.md +0 -23
- package/bundled/upstream/ecc/commands/docs.md +0 -23
- package/bundled/upstream/ecc/commands/e2e.md +0 -268
- package/bundled/upstream/ecc/commands/eval.md +0 -23
- package/bundled/upstream/ecc/commands/orchestrate.md +0 -135
- package/bundled/upstream/ecc/commands/prompt-optimize.md +0 -23
- package/bundled/upstream/ecc/commands/rules-distill.md +0 -20
- package/bundled/upstream/ecc/commands/tdd.md +0 -231
- package/bundled/upstream/ecc/commands/verify.md +0 -23
- package/bundled/upstream/ecc/skills/claude-api/SKILL.md +0 -337
- package/bundled/upstream/ecc/skills/frontend-design/SKILL.md +0 -145
- package/bundled/upstream/superpowers/agents/code-reviewer.md +0 -48
- package/bundled/upstream/superpowers/commands/brainstorm.md +0 -5
- package/bundled/upstream/superpowers/commands/execute-plan.md +0 -5
- package/bundled/upstream/superpowers/commands/write-plan.md +0 -5
|
@@ -20,6 +20,10 @@ Use this skill when:
|
|
|
20
20
|
|
|
21
21
|
```
|
|
22
22
|
┌─────────────────────────────────────────────┐
|
|
23
|
+
│ 0. TOOL AVAILABILITY PREFLIGHT │
|
|
24
|
+
│ Check search channels before relying on │
|
|
25
|
+
│ them; report skipped channels honestly │
|
|
26
|
+
├─────────────────────────────────────────────┤
|
|
23
27
|
│ 1. NEED ANALYSIS │
|
|
24
28
|
│ Define what functionality is needed │
|
|
25
29
|
│ Identify language/framework constraints │
|
|
@@ -57,6 +61,19 @@ Use this skill when:
|
|
|
57
61
|
|
|
58
62
|
## How to Use
|
|
59
63
|
|
|
64
|
+
### Step 0: Tool Availability Preflight
|
|
65
|
+
|
|
66
|
+
This is agent guidance, not an executable setup script. Check only the channels
|
|
67
|
+
that are relevant to the task and project in front of you.
|
|
68
|
+
|
|
69
|
+
| Channel | Check | If missing |
|
|
70
|
+
|---------|-------|------------|
|
|
71
|
+
| Repository search | `rg --files` and targeted `rg` queries | State that only visible files were inspected |
|
|
72
|
+
| Package registry | `npm --version`, `python -m pip --version`, or project package manager | Use web/docs search and avoid claiming registry coverage |
|
|
73
|
+
| GitHub CLI | `gh auth status` | Use public web or local git history only |
|
|
74
|
+
| MCP/docs tools | Available tool list or local MCP config | Fall back to official docs/web search |
|
|
75
|
+
| Skills directory | `ls ~/.claude/skills ~/.codex/skills` where applicable | Say no local skill catalog was available |
|
|
76
|
+
|
|
60
77
|
### Quick Mode (inline)
|
|
61
78
|
|
|
62
79
|
Before writing a utility or adding functionality, mentally run through:
|
|
@@ -72,7 +89,7 @@ Before writing a utility or adding functionality, mentally run through:
|
|
|
72
89
|
For non-trivial functionality, launch the researcher agent:
|
|
73
90
|
|
|
74
91
|
```
|
|
75
|
-
|
|
92
|
+
Agent(subagent_type="general-purpose", prompt="
|
|
76
93
|
Research existing tools for: [DESCRIPTION]
|
|
77
94
|
Language/framework: [LANG]
|
|
78
95
|
Constraints: [ANY]
|
|
@@ -82,6 +99,9 @@ Task(subagent_type="general-purpose", prompt="
|
|
|
82
99
|
")
|
|
83
100
|
```
|
|
84
101
|
|
|
102
|
+
Older Claude Code docs may call this `Task(...)`; use the current agent/subagent
|
|
103
|
+
tool name exposed by the active harness.
|
|
104
|
+
|
|
85
105
|
## Search Shortcuts by Category
|
|
86
106
|
|
|
87
107
|
### Development Tooling
|
|
@@ -96,7 +116,7 @@ Task(subagent_type="general-purpose", prompt="
|
|
|
96
116
|
- Document processing → `unstructured`, `pdfplumber`, `mammoth`
|
|
97
117
|
|
|
98
118
|
### Data & APIs
|
|
99
|
-
- HTTP clients → `httpx` (Python), `ky`/`
|
|
119
|
+
- HTTP clients → `httpx` (Python), `ky`/`undici` (Node)
|
|
100
120
|
- Validation → `zod` (TS), `pydantic` (Python)
|
|
101
121
|
- Database → Check for MCP servers first
|
|
102
122
|
|
|
@@ -157,5 +177,6 @@ Result: 1 package + 1 schema file, no custom validation logic
|
|
|
157
177
|
|
|
158
178
|
- **Jumping to code**: Writing a utility without checking if one exists
|
|
159
179
|
- **Ignoring MCP**: Not checking if an MCP server already provides the capability
|
|
180
|
+
- **Silent skipping**: Reporting "nothing found" when a search channel was unavailable
|
|
160
181
|
- **Over-customizing**: Wrapping a library so heavily it loses its benefits
|
|
161
182
|
- **Dependency bloat**: Installing a massive package for one small feature
|
|
@@ -208,6 +208,11 @@ function renderUserContent(html: string) {
|
|
|
208
208
|
```
|
|
209
209
|
|
|
210
210
|
#### Content Security Policy
|
|
211
|
+
|
|
212
|
+
Start strict and loosen only with a documented removal plan. Do not default to
|
|
213
|
+
`'unsafe-inline'` or `'unsafe-eval'`; they neutralize much of CSP's protection
|
|
214
|
+
and should be treated as temporary compatibility debt.
|
|
215
|
+
|
|
211
216
|
```typescript
|
|
212
217
|
// next.config.js
|
|
213
218
|
const securityHeaders = [
|
|
@@ -215,8 +220,11 @@ const securityHeaders = [
|
|
|
215
220
|
key: 'Content-Security-Policy',
|
|
216
221
|
value: `
|
|
217
222
|
default-src 'self';
|
|
218
|
-
|
|
219
|
-
|
|
223
|
+
base-uri 'self';
|
|
224
|
+
object-src 'none';
|
|
225
|
+
frame-ancestors 'none';
|
|
226
|
+
script-src 'self';
|
|
227
|
+
style-src 'self';
|
|
220
228
|
img-src 'self' data: https:;
|
|
221
229
|
font-src 'self';
|
|
222
230
|
connect-src 'self' https://api.example.com;
|
|
@@ -15,6 +15,10 @@ from scripts.scenario_generator import Scenario
|
|
|
15
15
|
|
|
16
16
|
SANDBOX_BASE = Path("/tmp/skill-comply-sandbox")
|
|
17
17
|
ALLOWED_MODELS = frozenset({"haiku", "sonnet", "opus"})
|
|
18
|
+
# Shell builtins cannot be invoked via subprocess.run; cwd is already
|
|
19
|
+
# controlled by the cwd= keyword. Scenarios that include these in
|
|
20
|
+
# setup_commands (a common shell-style convention) must be tolerated.
|
|
21
|
+
SHELL_BUILTINS = frozenset({"cd", "pushd", "popd"})
|
|
18
22
|
|
|
19
23
|
|
|
20
24
|
@dataclass(frozen=True)
|
|
@@ -53,9 +57,22 @@ def run_scenario(
|
|
|
53
57
|
cwd=sandbox_dir,
|
|
54
58
|
)
|
|
55
59
|
|
|
56
|
-
|
|
60
|
+
# claude -p returns rc=1 when --max-turns is reached, but the stream-json
|
|
61
|
+
# output is still complete and parseable. Treat this graceful termination
|
|
62
|
+
# as non-fatal so scenarios that hit the turn cap still produce usable
|
|
63
|
+
# observations.
|
|
64
|
+
nonfatal_max_turns = (
|
|
65
|
+
result.returncode == 1
|
|
66
|
+
and '"terminal_reason":"max_turns"' in result.stdout
|
|
67
|
+
)
|
|
68
|
+
if result.returncode != 0 and not nonfatal_max_turns:
|
|
69
|
+
# Include both stderr and stdout tails. claude -p often surfaces the
|
|
70
|
+
# actual failure context (model error JSON, partial stream-json) on
|
|
71
|
+
# stdout, while stderr carries generic transport / auth messages.
|
|
72
|
+
# Showing both dramatically reduces "rc=N: <empty>" debugging dead-ends.
|
|
57
73
|
raise RuntimeError(
|
|
58
|
-
f"claude -p failed (rc={result.returncode}):
|
|
74
|
+
f"claude -p failed (rc={result.returncode}): "
|
|
75
|
+
f"stderr={result.stderr[:500]!r} stdout_tail={result.stdout[-500:]!r}"
|
|
59
76
|
)
|
|
60
77
|
|
|
61
78
|
observations = _parse_stream_json(result.stdout)
|
|
@@ -86,7 +103,15 @@ def _setup_sandbox(sandbox_dir: Path, scenario: Scenario) -> None:
|
|
|
86
103
|
|
|
87
104
|
for cmd in scenario.setup_commands:
|
|
88
105
|
parts = shlex.split(cmd)
|
|
89
|
-
|
|
106
|
+
if not parts or parts[0] in SHELL_BUILTINS:
|
|
107
|
+
# Shell builtins (cd/pushd/popd) cannot run as subprocess; skip.
|
|
108
|
+
continue
|
|
109
|
+
try:
|
|
110
|
+
subprocess.run(parts, cwd=sandbox_dir, capture_output=True)
|
|
111
|
+
except FileNotFoundError:
|
|
112
|
+
# Setup tool not installed in this environment; skip rather than
|
|
113
|
+
# crash the whole scenario. The compliance run continues.
|
|
114
|
+
continue
|
|
90
115
|
|
|
91
116
|
|
|
92
117
|
def _parse_stream_json(stdout: str) -> list[ObservationEvent]:
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"""Tests for runner module — scenario execution + subprocess error handling."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import subprocess
|
|
6
|
+
from dataclasses import dataclass
|
|
7
|
+
from unittest.mock import MagicMock, patch
|
|
8
|
+
|
|
9
|
+
import pytest
|
|
10
|
+
|
|
11
|
+
from scripts.runner import _setup_sandbox, run_scenario
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@dataclass(frozen=True)
|
|
15
|
+
class _FakeScenario:
|
|
16
|
+
"""Minimal Scenario-like object for runner tests (avoids generator deps)."""
|
|
17
|
+
|
|
18
|
+
id: str
|
|
19
|
+
prompt: str = "do nothing"
|
|
20
|
+
setup_commands: tuple[str, ...] = ()
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class TestSetupSandboxSkipsShellBuiltins:
|
|
24
|
+
"""Setup commands containing shell builtins (cd/pushd/popd) must be skipped.
|
|
25
|
+
|
|
26
|
+
Regression: subprocess.run(["cd", ...]) raises FileNotFoundError because
|
|
27
|
+
cd is a shell builtin, not an external binary. Real-world scenarios often
|
|
28
|
+
include "cd subdir" in setup_commands assuming shell semantics, so the
|
|
29
|
+
runner must tolerate this rather than crashing the whole scenario.
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
def test_skips_cd(self, tmp_path):
|
|
33
|
+
scenario = _FakeScenario(
|
|
34
|
+
id="t1",
|
|
35
|
+
setup_commands=("cd subdir",),
|
|
36
|
+
)
|
|
37
|
+
called_args: list[list[str]] = []
|
|
38
|
+
|
|
39
|
+
def fake_run(args, **kwargs):
|
|
40
|
+
called_args.append(args)
|
|
41
|
+
return subprocess.CompletedProcess(args=args, returncode=0)
|
|
42
|
+
|
|
43
|
+
with patch("scripts.runner.subprocess.run", side_effect=fake_run):
|
|
44
|
+
_setup_sandbox(tmp_path, scenario)
|
|
45
|
+
|
|
46
|
+
# git init runs once; "cd subdir" must NOT be passed to subprocess
|
|
47
|
+
assert ["git", "init"] in called_args
|
|
48
|
+
assert ["cd", "subdir"] not in called_args
|
|
49
|
+
|
|
50
|
+
def test_skips_pushd_popd(self, tmp_path):
|
|
51
|
+
scenario = _FakeScenario(
|
|
52
|
+
id="t2",
|
|
53
|
+
setup_commands=("pushd dir", "popd"),
|
|
54
|
+
)
|
|
55
|
+
called_args: list[list[str]] = []
|
|
56
|
+
|
|
57
|
+
def fake_run(args, **kwargs):
|
|
58
|
+
called_args.append(args)
|
|
59
|
+
return subprocess.CompletedProcess(args=args, returncode=0)
|
|
60
|
+
|
|
61
|
+
with patch("scripts.runner.subprocess.run", side_effect=fake_run):
|
|
62
|
+
_setup_sandbox(tmp_path, scenario)
|
|
63
|
+
|
|
64
|
+
assert ["pushd", "dir"] not in called_args
|
|
65
|
+
assert ["popd"] not in called_args
|
|
66
|
+
|
|
67
|
+
def test_tolerates_missing_executable(self, tmp_path):
|
|
68
|
+
"""A scenario referencing an unavailable tool must not crash setup."""
|
|
69
|
+
scenario = _FakeScenario(
|
|
70
|
+
id="t3",
|
|
71
|
+
setup_commands=("nonexistent-tool-xyz arg",),
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
def fake_run(args, **kwargs):
|
|
75
|
+
if args[0] == "nonexistent-tool-xyz":
|
|
76
|
+
raise FileNotFoundError(2, "No such file or directory")
|
|
77
|
+
return subprocess.CompletedProcess(args=args, returncode=0)
|
|
78
|
+
|
|
79
|
+
with patch("scripts.runner.subprocess.run", side_effect=fake_run):
|
|
80
|
+
# Must NOT raise — missing tools are skipped, not fatal
|
|
81
|
+
_setup_sandbox(tmp_path, scenario)
|
|
82
|
+
|
|
83
|
+
def test_real_commands_still_run(self, tmp_path):
|
|
84
|
+
"""Skip logic must not break legitimate setup commands."""
|
|
85
|
+
scenario = _FakeScenario(
|
|
86
|
+
id="t4",
|
|
87
|
+
setup_commands=("touch file.txt", "cd ignored", "echo hi"),
|
|
88
|
+
)
|
|
89
|
+
called_args: list[list[str]] = []
|
|
90
|
+
|
|
91
|
+
def fake_run(args, **kwargs):
|
|
92
|
+
called_args.append(args)
|
|
93
|
+
return subprocess.CompletedProcess(args=args, returncode=0)
|
|
94
|
+
|
|
95
|
+
with patch("scripts.runner.subprocess.run", side_effect=fake_run):
|
|
96
|
+
_setup_sandbox(tmp_path, scenario)
|
|
97
|
+
|
|
98
|
+
# Real commands present, cd absent
|
|
99
|
+
assert ["touch", "file.txt"] in called_args
|
|
100
|
+
assert ["echo", "hi"] in called_args
|
|
101
|
+
assert ["cd", "ignored"] not in called_args
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
class TestRunScenarioMaxTurnsTermination:
|
|
105
|
+
"""rc=1 with terminal_reason=max_turns is graceful termination, not failure.
|
|
106
|
+
|
|
107
|
+
claude -p returns rc=1 when --max-turns is reached, but the stream-json
|
|
108
|
+
output is still valid. Treating this as RuntimeError aborts scenarios
|
|
109
|
+
that would have produced useful observations. Detect the marker in stdout
|
|
110
|
+
and downgrade rc=1 + max_turns to non-fatal.
|
|
111
|
+
"""
|
|
112
|
+
|
|
113
|
+
def test_rc1_with_max_turns_marker_returns_normally(self, tmp_path, monkeypatch):
|
|
114
|
+
scenario = _FakeScenario(id="mt1", prompt="long task", setup_commands=())
|
|
115
|
+
|
|
116
|
+
# Skip sandbox setup side effects
|
|
117
|
+
monkeypatch.setattr("scripts.runner._setup_sandbox", lambda *a, **kw: None)
|
|
118
|
+
|
|
119
|
+
max_turns_stdout = (
|
|
120
|
+
'{"type":"system","subtype":"init","session_id":"s1"}\n'
|
|
121
|
+
'{"type":"result","terminal_reason":"max_turns"}\n'
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
fake_result = subprocess.CompletedProcess(
|
|
125
|
+
args=["claude"], returncode=1, stdout=max_turns_stdout, stderr=""
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
with patch("scripts.runner.subprocess.run", return_value=fake_result):
|
|
129
|
+
# Must NOT raise — max_turns is graceful termination
|
|
130
|
+
run_scenario(scenario, model="haiku")
|
|
131
|
+
|
|
132
|
+
def test_rc1_without_max_turns_marker_still_raises(self, tmp_path, monkeypatch):
|
|
133
|
+
"""Real failures (rc≠0 with no max_turns marker) must still raise."""
|
|
134
|
+
scenario = _FakeScenario(id="mt2", prompt="oops", setup_commands=())
|
|
135
|
+
monkeypatch.setattr("scripts.runner._setup_sandbox", lambda *a, **kw: None)
|
|
136
|
+
|
|
137
|
+
fake_result = subprocess.CompletedProcess(
|
|
138
|
+
args=["claude"], returncode=1, stdout="", stderr="auth error"
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
with patch("scripts.runner.subprocess.run", return_value=fake_result):
|
|
142
|
+
with pytest.raises(RuntimeError, match="claude -p failed"):
|
|
143
|
+
run_scenario(scenario, model="haiku")
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
class TestRunScenarioErrorIncludesStdoutTail:
|
|
147
|
+
"""Error messages must include stdout tail, not only stderr.
|
|
148
|
+
|
|
149
|
+
When claude -p fails inside an LLM call, useful diagnostic context often
|
|
150
|
+
appears in stdout (partial stream-json events, model error JSON), not
|
|
151
|
+
stderr. Including stdout tail in the RuntimeError message dramatically
|
|
152
|
+
improves debug-ability without adding any new dependency.
|
|
153
|
+
"""
|
|
154
|
+
|
|
155
|
+
def test_error_message_contains_stdout_tail(self, tmp_path, monkeypatch):
|
|
156
|
+
scenario = _FakeScenario(id="e1", prompt="x", setup_commands=())
|
|
157
|
+
monkeypatch.setattr("scripts.runner._setup_sandbox", lambda *a, **kw: None)
|
|
158
|
+
|
|
159
|
+
diagnostic_marker = "DIAG_STDOUT_MARKER_xyz123"
|
|
160
|
+
fake_result = subprocess.CompletedProcess(
|
|
161
|
+
args=["claude"],
|
|
162
|
+
returncode=2,
|
|
163
|
+
stdout=f"some context {diagnostic_marker} more text",
|
|
164
|
+
stderr="generic error",
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
with patch("scripts.runner.subprocess.run", return_value=fake_result):
|
|
168
|
+
with pytest.raises(RuntimeError) as excinfo:
|
|
169
|
+
run_scenario(scenario, model="haiku")
|
|
170
|
+
|
|
171
|
+
# Stdout marker MUST appear in the error message
|
|
172
|
+
assert diagnostic_marker in str(excinfo.value)
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: skill-scout
|
|
3
|
+
description: Search existing local, marketplace, GitHub, and web skill sources before creating a new skill. Use when the user wants to create, build, fork, or find a skill for a workflow.
|
|
4
|
+
origin: community
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Skill Scout
|
|
8
|
+
|
|
9
|
+
Use this skill before creating a new skill. The goal is to avoid duplicating
|
|
10
|
+
existing community or marketplace work, while still vetting anything external
|
|
11
|
+
before adoption.
|
|
12
|
+
|
|
13
|
+
Source: salvaged from stale community PR #1232 by `redminwang`.
|
|
14
|
+
|
|
15
|
+
## When to Use
|
|
16
|
+
|
|
17
|
+
- The user says "create a skill", "build a skill", "make a skill", or "new
|
|
18
|
+
skill".
|
|
19
|
+
- The user asks "is there a skill for X?" or "does a skill exist that does Y?"
|
|
20
|
+
- The user describes a workflow and you are about to suggest creating a new
|
|
21
|
+
skill.
|
|
22
|
+
- The user wants to fork or extend an existing skill.
|
|
23
|
+
|
|
24
|
+
If the user explicitly says to skip search or create from scratch, acknowledge
|
|
25
|
+
that and proceed with the requested creation workflow.
|
|
26
|
+
|
|
27
|
+
## How It Works
|
|
28
|
+
|
|
29
|
+
### Step 1 - Capture Intent
|
|
30
|
+
|
|
31
|
+
Extract:
|
|
32
|
+
|
|
33
|
+
- The task the skill should perform.
|
|
34
|
+
- The trigger conditions for using it.
|
|
35
|
+
- The domain, tools, frameworks, or data sources involved.
|
|
36
|
+
- Three to five search keywords plus useful synonyms.
|
|
37
|
+
|
|
38
|
+
### Step 2 - Search Local Sources
|
|
39
|
+
|
|
40
|
+
Search installed and marketplace skill names first. Local sources are preferred
|
|
41
|
+
because they are already part of the user's environment.
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
find ~/.claude/skills -maxdepth 2 -name SKILL.md 2>/dev/null | grep -iE "keyword|synonym"
|
|
45
|
+
find ~/.claude/plugins/marketplaces -path '*/skills/*/SKILL.md' 2>/dev/null | grep -iE "keyword|synonym"
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Then search frontmatter descriptions:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
grep -RilE "keyword|synonym" ~/.claude/skills ~/.claude/plugins/marketplaces 2>/dev/null
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Step 3 - Search Remote Sources
|
|
55
|
+
|
|
56
|
+
Use available GitHub and web search tools. Prefer concise queries:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
gh search repos "claude code skill keyword" --limit 10 --sort stars
|
|
60
|
+
gh search code "name: keyword" --filename SKILL.md --limit 10
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
For web search, use at most three targeted queries such as:
|
|
64
|
+
|
|
65
|
+
```text
|
|
66
|
+
"claude code skill" keyword
|
|
67
|
+
"SKILL.md" keyword
|
|
68
|
+
"everything-claude-code" keyword
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Step 4 - Vet External Matches
|
|
72
|
+
|
|
73
|
+
Before recommending any external skill for adoption or forking:
|
|
74
|
+
|
|
75
|
+
- Read the `SKILL.md` frontmatter and instructions.
|
|
76
|
+
- Look for unexpected shell commands, file writes, network calls, credential
|
|
77
|
+
handling, or package installs.
|
|
78
|
+
- Check whether the repository appears maintained.
|
|
79
|
+
- Prefer copying into a fresh local branch and reviewing the diff over editing
|
|
80
|
+
marketplace originals.
|
|
81
|
+
|
|
82
|
+
### Step 5 - Rank Results
|
|
83
|
+
|
|
84
|
+
Rank candidates by:
|
|
85
|
+
|
|
86
|
+
1. Exact keyword match in the skill name.
|
|
87
|
+
2. Keyword or synonym match in description.
|
|
88
|
+
3. Local installed or marketplace source.
|
|
89
|
+
4. Maintained GitHub source with recent activity.
|
|
90
|
+
5. Web-only mention.
|
|
91
|
+
|
|
92
|
+
Cap the final list at 10 results.
|
|
93
|
+
|
|
94
|
+
### Step 6 - Present Decision Options
|
|
95
|
+
|
|
96
|
+
Give the user a short table:
|
|
97
|
+
|
|
98
|
+
| Option | Meaning |
|
|
99
|
+
| --- | --- |
|
|
100
|
+
| Use existing | Invoke or install a matching skill as-is. |
|
|
101
|
+
| Fork or extend | Copy the closest skill and modify it. |
|
|
102
|
+
| Create fresh | Build a new skill after confirming no close match exists. |
|
|
103
|
+
|
|
104
|
+
Only create a new skill after the user chooses that path or after the search
|
|
105
|
+
finds no close match.
|
|
106
|
+
|
|
107
|
+
## Examples
|
|
108
|
+
|
|
109
|
+
### Result Table
|
|
110
|
+
|
|
111
|
+
```markdown
|
|
112
|
+
| # | Skill | Source | Why it matches | Gap |
|
|
113
|
+
| --- | --- | --- | --- | --- |
|
|
114
|
+
| 1 | article-writing | Local ECC | Drafts articles and guides | Not focused on release notes |
|
|
115
|
+
| 2 | content-engine | Local ECC | Multi-format content workflow | Heavier than needed |
|
|
116
|
+
| 3 | blog-writer | GitHub | Blog writing skill with recent commits | Needs security review |
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### User-Facing Summary
|
|
120
|
+
|
|
121
|
+
```markdown
|
|
122
|
+
I found two close local matches and one external candidate. The closest fit is
|
|
123
|
+
`article-writing`; it covers drafting and revision, but it does not include the
|
|
124
|
+
release-note checklist you asked for. I can either use it as-is, fork it into a
|
|
125
|
+
release-note variant, or create a fresh skill.
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Anti-Patterns
|
|
129
|
+
|
|
130
|
+
- Do not jump directly to new skill creation when a search is reasonable.
|
|
131
|
+
- Do not install external skills without reading them first.
|
|
132
|
+
- Do not present a long unranked list of weak matches.
|
|
133
|
+
- Do not treat web-only mentions as trusted sources.
|
|
134
|
+
- Do not edit installed marketplace originals in place.
|
|
135
|
+
|
|
136
|
+
## Related
|
|
137
|
+
|
|
138
|
+
- `search-first` - General search-before-building workflow.
|
|
139
|
+
- `skill-stocktake` - Audit installed skills for health, duplicates, and gaps.
|
|
140
|
+
- `agent-sort` - Categorize and organize existing agents and skills.
|
|
@@ -46,11 +46,11 @@ Add to your `~/.claude/settings.json`:
|
|
|
46
46
|
"PreToolUse": [
|
|
47
47
|
{
|
|
48
48
|
"matcher": "Edit",
|
|
49
|
-
"hooks": [{ "type": "command", "command": "node ~/.claude/
|
|
49
|
+
"hooks": [{ "type": "command", "command": "node ~/.claude/scripts/hooks/suggest-compact.js" }]
|
|
50
50
|
},
|
|
51
51
|
{
|
|
52
52
|
"matcher": "Write",
|
|
53
|
-
"hooks": [{ "type": "command", "command": "node ~/.claude/
|
|
53
|
+
"hooks": [{ "type": "command", "command": "node ~/.claude/scripts/hooks/suggest-compact.js" }]
|
|
54
54
|
}
|
|
55
55
|
]
|
|
56
56
|
}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tinystruct-patterns
|
|
3
|
+
description: Expert guidance for developing with the tinystruct Java framework. Use when working on the tinystruct codebase or any project built on tinystruct — including creating Application classes, @Action-mapped routes, unit tests, ActionRegistry, HTTP/CLI dual-mode handling, the built-in HTTP server, the event system, JSON with Builder/Builders, database persistence with AbstractData, POJO generation, Server-Sent Events (SSE), file uploads, and outbound HTTP networking.
|
|
4
|
+
origin: ECC
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# tinystruct Development Patterns
|
|
8
|
+
|
|
9
|
+
Architecture and implementation patterns for building modules with the **tinystruct** Java framework – a lightweight, high-performance framework that treats CLI and HTTP as equal citizens, requiring no `main()` method and minimal configuration.
|
|
10
|
+
|
|
11
|
+
## Core Principle
|
|
12
|
+
|
|
13
|
+
**CLI and HTTP are equal citizens.** Every method annotated with `@Action` should ideally be runnable from both a terminal and a web browser without modification. This "dual-mode" capability is the core design philosophy of tinystruct.
|
|
14
|
+
|
|
15
|
+
## When to Activate
|
|
16
|
+
|
|
17
|
+
### When to Use
|
|
18
|
+
|
|
19
|
+
- Creating new `Application` modules by extending `AbstractApplication`.
|
|
20
|
+
- Defining routes and command-line actions using `@Action`.
|
|
21
|
+
- Handling per-request state via `Context`.
|
|
22
|
+
- Performing JSON serialization using the native `Builder` and `Builders` components.
|
|
23
|
+
- Working with database persistence via `AbstractData` POJOs.
|
|
24
|
+
- Generating POJOs from database tables using the `generate` command.
|
|
25
|
+
- Implementing Server-Sent Events (SSE) for real-time push.
|
|
26
|
+
- Handling file uploads via multipart data.
|
|
27
|
+
- Making outbound HTTP requests with `URLRequest` and `HTTPHandler`.
|
|
28
|
+
- Configuring database connections or system settings in `application.properties`.
|
|
29
|
+
- Debugging routing conflicts (Actions) or CLI argument parsing.
|
|
30
|
+
|
|
31
|
+
## How It Works
|
|
32
|
+
|
|
33
|
+
The tinystruct framework treats any method annotated with `@Action` as a routable endpoint for both terminal and web environments. Applications are created by extending `AbstractApplication`, which provides core lifecycle hooks like `init()` and access to the request `Context`.
|
|
34
|
+
|
|
35
|
+
Routing is handled by the `ActionRegistry`, which automatically maps path segments to method arguments and injects dependencies. For data-only services, the native `Builder` and `Builders` components should be used for JSON serialization to maintain a zero-dependency footprint. The database layer uses `AbstractData` POJOs paired with XML mapping files for CRUD operations without external ORM libraries.
|
|
36
|
+
|
|
37
|
+
## Examples
|
|
38
|
+
|
|
39
|
+
### Basic Application (MyService)
|
|
40
|
+
```java
|
|
41
|
+
public class MyService extends AbstractApplication {
|
|
42
|
+
@Override
|
|
43
|
+
public void init() {
|
|
44
|
+
this.setTemplateRequired(false); // Disable .view lookup for data/API apps
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
@Override public String version() { return "1.0.0"; }
|
|
48
|
+
|
|
49
|
+
@Action("greet")
|
|
50
|
+
public String greet() {
|
|
51
|
+
return "Hello from tinystruct!";
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Path parameter: GET /?q=greet/James OR bin/dispatcher greet/James
|
|
55
|
+
@Action("greet")
|
|
56
|
+
public String greet(String name) {
|
|
57
|
+
return "Hello, " + name + "!";
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### HTTP Mode Disambiguation (login)
|
|
63
|
+
```java
|
|
64
|
+
@Action(value = "login", mode = Mode.HTTP_POST)
|
|
65
|
+
public String doLogin(Request<?, ?> request) throws ApplicationException {
|
|
66
|
+
request.getSession().setAttribute("userId", "42");
|
|
67
|
+
return "Logged in";
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Native JSON Data Handling (Builder + Builders)
|
|
72
|
+
```java
|
|
73
|
+
import org.tinystruct.data.component.Builder;
|
|
74
|
+
import org.tinystruct.data.component.Builders;
|
|
75
|
+
|
|
76
|
+
@Action("api/data")
|
|
77
|
+
public String getData() throws ApplicationException {
|
|
78
|
+
Builders dataList = new Builders();
|
|
79
|
+
Builder item = new Builder();
|
|
80
|
+
item.put("id", 1);
|
|
81
|
+
item.put("name", "James");
|
|
82
|
+
dataList.add(item);
|
|
83
|
+
|
|
84
|
+
Builder response = new Builder();
|
|
85
|
+
response.put("status", "success");
|
|
86
|
+
response.put("data", dataList);
|
|
87
|
+
return response.toString(); // {"status":"success","data":[{"id":1,"name":"James"}]}
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### SSE (Server-Sent Events)
|
|
92
|
+
```java
|
|
93
|
+
import org.tinystruct.http.SSEPushManager;
|
|
94
|
+
|
|
95
|
+
@Action("sse/connect")
|
|
96
|
+
public String connect() {
|
|
97
|
+
return "{\"type\":\"connect\",\"message\":\"Connected to SSE\"}";
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Push to a specific client
|
|
101
|
+
String sessionId = getContext().getId();
|
|
102
|
+
Builder msg = new Builder();
|
|
103
|
+
msg.put("text", "Hello, user!");
|
|
104
|
+
SSEPushManager.getInstance().push(sessionId, msg);
|
|
105
|
+
|
|
106
|
+
// Broadcast to all
|
|
107
|
+
// Broadcast to all
|
|
108
|
+
SSEPushManager.getInstance().broadcast(msg);
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### File Upload
|
|
112
|
+
```java
|
|
113
|
+
import org.tinystruct.data.FileEntity;
|
|
114
|
+
|
|
115
|
+
@Action(value = "upload", mode = Mode.HTTP_POST)
|
|
116
|
+
public String upload(Request<?, ?> request) throws ApplicationException {
|
|
117
|
+
List<FileEntity> files = request.getAttachments();
|
|
118
|
+
if (files != null) {
|
|
119
|
+
for (FileEntity file : files) {
|
|
120
|
+
System.out.println("Uploaded: " + file.getFilename());
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return "Upload OK";
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Configuration
|
|
128
|
+
|
|
129
|
+
Settings are managed in `src/main/resources/application.properties`.
|
|
130
|
+
|
|
131
|
+
```properties
|
|
132
|
+
# Database
|
|
133
|
+
driver=org.h2.Driver
|
|
134
|
+
database.url=jdbc:h2:~/mydb
|
|
135
|
+
database.user=sa
|
|
136
|
+
database.password=
|
|
137
|
+
|
|
138
|
+
# Server
|
|
139
|
+
default.home.page=hello
|
|
140
|
+
server.port=8080
|
|
141
|
+
|
|
142
|
+
# Locale
|
|
143
|
+
default.language=en_US
|
|
144
|
+
|
|
145
|
+
# Session (Redis for clustered environments)
|
|
146
|
+
# default.session.repository=org.tinystruct.http.RedisSessionRepository
|
|
147
|
+
# redis.host=127.0.0.1
|
|
148
|
+
# redis.port=6379
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Access config values in your application:
|
|
152
|
+
```java
|
|
153
|
+
String port = this.getConfiguration("server.port");
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Red Flags & Anti-patterns
|
|
157
|
+
|
|
158
|
+
| Symptom | Correct Pattern |
|
|
159
|
+
|---|---|
|
|
160
|
+
| Importing `com.google.gson` or `com.fasterxml.jackson` | Use `org.tinystruct.data.component.Builder` / `Builders`. |
|
|
161
|
+
| Using `List<Builder>` for JSON arrays | Use `Builders` to avoid generic type erasure issues. |
|
|
162
|
+
| `ApplicationRuntimeException: template not found` | Call `setTemplateRequired(false)` in `init()` for API-only apps. |
|
|
163
|
+
| Annotating `private` methods with `@Action` | Actions must be `public` to be registered by the framework. |
|
|
164
|
+
| Hardcoding `main(String[] args)` in apps | Use `bin/dispatcher` as the entry point for all modules. |
|
|
165
|
+
| Manual `ActionRegistry` registration | Prefer the `@Action` annotation for automatic discovery. |
|
|
166
|
+
| Action not found at runtime | Ensure class is imported via `--import` or listed in `application.properties`. |
|
|
167
|
+
| CLI arg not visible | Pass with `--key value`; access via `getContext().getAttribute("--key")`. |
|
|
168
|
+
| Two methods same path, wrong one fires | Set explicit `mode` (e.g., `HTTP_GET` vs `HTTP_POST`) to disambiguate. |
|
|
169
|
+
|
|
170
|
+
## Best Practices
|
|
171
|
+
|
|
172
|
+
1. **Granular Applications**: Break logic into smaller, focused applications rather than one monolithic class.
|
|
173
|
+
2. **Setup in `init()`**: Leverage `init()` for setup (config, DB) rather than the constructor. Do NOT call `setAction()` — use `@Action` annotation.
|
|
174
|
+
3. **Mode Awareness**: Use the `Mode` parameter in `@Action` to restrict sensitive operations to `CLI` only or specific HTTP methods.
|
|
175
|
+
4. **Context over Params**: For optional CLI flags, use `getContext().getAttribute("--flag")` rather than adding parameters to the method signature.
|
|
176
|
+
5. **Asynchronous Events**: For heavy tasks triggered by events, use `CompletableFuture.runAsync()` inside the event handler.
|
|
177
|
+
|
|
178
|
+
## Technical Reference
|
|
179
|
+
|
|
180
|
+
Detailed guides are available in the `references/` directory:
|
|
181
|
+
|
|
182
|
+
- [Architecture & Config](references/architecture.md) — Abstractions, Package Map, Properties
|
|
183
|
+
- [Routing & @Action](references/routing.md) — Annotation details, Modes, Parameters
|
|
184
|
+
- [Data Handling](references/data-handling.md) — Builder, Builders, JSON serialization & parsing
|
|
185
|
+
- [Database Persistence](references/database.md) — AbstractData POJOs, CRUD, mapping XML, POJO generation
|
|
186
|
+
- [System & Usage](references/system-usage.md) — Context, Sessions, SSE, File Uploads, Events, Networking
|
|
187
|
+
- [Testing Patterns](references/testing.md) — JUnit 5 unit and HTTP integration testing
|
|
188
|
+
|
|
189
|
+
## Reference Source Files (Internal)
|
|
190
|
+
|
|
191
|
+
- `src/main/java/org/tinystruct/AbstractApplication.java` — Core base class with lifecycle hooks
|
|
192
|
+
- `src/main/java/org/tinystruct/system/annotation/Action.java` — Annotation & Modes
|
|
193
|
+
- `src/main/java/org/tinystruct/application/ActionRegistry.java` — Routing Engine
|
|
194
|
+
- `src/main/java/org/tinystruct/data/component/Builder.java` — JSON object serializer
|
|
195
|
+
- `src/main/java/org/tinystruct/data/component/Builders.java` — JSON array serializer
|
|
196
|
+
- `src/main/java/org/tinystruct/data/component/AbstractData.java` — Base POJO class with CRUD
|
|
197
|
+
- `src/main/java/org/tinystruct/data/Mapping.java` — Mapping XML parser
|
|
198
|
+
- `src/main/java/org/tinystruct/data/tools/MySQLGenerator.java` — POJO generator reference
|
|
199
|
+
- `src/main/java/org/tinystruct/data/component/FieldType.java` — SQL-to-Java type mappings
|
|
200
|
+
- `src/main/java/org/tinystruct/data/component/Condition.java` — Fluent SQL query builder
|
|
201
|
+
- `src/main/java/org/tinystruct/http/SSEPushManager.java` — SSE connection management
|
|
202
|
+
- `src/test/java/org/tinystruct/application/ActionRegistryTest.java` — Registry test examples
|
|
203
|
+
- `src/test/java/org/tinystruct/system/HttpServerHttpModeTest.java` — HTTP integration test patterns
|