@heytherevibin/skillforge 0.2.1
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/CHANGELOG.md +16 -0
- package/CODE_OF_CONDUCT.md +34 -0
- package/CONTRIBUTING.md +38 -0
- package/LICENSE +21 -0
- package/README.md +337 -0
- package/RELEASING.md +93 -0
- package/SECURITY.md +31 -0
- package/STRATEGY.md +26 -0
- package/bin/cli.js +547 -0
- package/lib/packs.js +184 -0
- package/package.json +38 -0
- package/python/app/__init__.py +0 -0
- package/python/app/__pycache__/__init__.cpython-312.pyc +0 -0
- package/python/app/__pycache__/auth.cpython-312.pyc +0 -0
- package/python/app/__pycache__/main.cpython-312.pyc +0 -0
- package/python/app/auth.py +63 -0
- package/python/app/cli.py +78 -0
- package/python/app/db_paths.py +26 -0
- package/python/app/events_cli.py +175 -0
- package/python/app/main.py +647 -0
- package/python/app/materialize.py +138 -0
- package/python/app/mcp_server.py +610 -0
- package/python/app/route_cli.py +117 -0
- package/python/requirements-dev.txt +1 -0
- package/python/requirements.txt +7 -0
- package/python/tests/test_db_paths.py +41 -0
- package/skills/accessibility/SKILL.md +145 -0
- package/skills/agent-architecture-audit/SKILL.md +256 -0
- package/skills/agent-eval/SKILL.md +144 -0
- package/skills/agent-harness-construction/SKILL.md +72 -0
- package/skills/agent-introspection-debugging/SKILL.md +152 -0
- package/skills/agent-payment-x402/SKILL.md +224 -0
- package/skills/agent-sort/SKILL.md +214 -0
- package/skills/agentic-engineering/SKILL.md +62 -0
- package/skills/agentic-os/SKILL.md +386 -0
- package/skills/ai-first-engineering/SKILL.md +50 -0
- package/skills/ai-regression-testing/SKILL.md +384 -0
- package/skills/android-clean-architecture/SKILL.md +338 -0
- package/skills/angular-developer/SKILL.md +153 -0
- package/skills/angular-developer/references/angular-animations.md +160 -0
- package/skills/angular-developer/references/angular-aria.md +410 -0
- package/skills/angular-developer/references/cli.md +86 -0
- package/skills/angular-developer/references/component-harnesses.md +59 -0
- package/skills/angular-developer/references/component-styling.md +91 -0
- package/skills/angular-developer/references/components.md +117 -0
- package/skills/angular-developer/references/creating-services.md +97 -0
- package/skills/angular-developer/references/data-resolvers.md +69 -0
- package/skills/angular-developer/references/define-routes.md +67 -0
- package/skills/angular-developer/references/defining-providers.md +72 -0
- package/skills/angular-developer/references/di-fundamentals.md +120 -0
- package/skills/angular-developer/references/e2e-testing.md +56 -0
- package/skills/angular-developer/references/effects.md +83 -0
- package/skills/angular-developer/references/hierarchical-injectors.md +43 -0
- package/skills/angular-developer/references/host-elements.md +80 -0
- package/skills/angular-developer/references/injection-context.md +63 -0
- package/skills/angular-developer/references/inputs.md +101 -0
- package/skills/angular-developer/references/linked-signal.md +59 -0
- package/skills/angular-developer/references/loading-strategies.md +61 -0
- package/skills/angular-developer/references/mcp.md +108 -0
- package/skills/angular-developer/references/navigate-to-routes.md +69 -0
- package/skills/angular-developer/references/outputs.md +86 -0
- package/skills/angular-developer/references/reactive-forms.md +122 -0
- package/skills/angular-developer/references/rendering-strategies.md +44 -0
- package/skills/angular-developer/references/resource.md +77 -0
- package/skills/angular-developer/references/route-animations.md +56 -0
- package/skills/angular-developer/references/route-guards.md +52 -0
- package/skills/angular-developer/references/router-lifecycle.md +45 -0
- package/skills/angular-developer/references/router-testing.md +87 -0
- package/skills/angular-developer/references/show-routes-with-outlets.md +68 -0
- package/skills/angular-developer/references/signal-forms.md +795 -0
- package/skills/angular-developer/references/signals-overview.md +94 -0
- package/skills/angular-developer/references/tailwind-css.md +69 -0
- package/skills/angular-developer/references/template-driven-forms.md +114 -0
- package/skills/angular-developer/references/testing-fundamentals.md +65 -0
- package/skills/api-connector-builder/SKILL.md +120 -0
- package/skills/api-design/SKILL.md +522 -0
- package/skills/architecture-decision-records/SKILL.md +178 -0
- package/skills/article-writing/SKILL.md +78 -0
- package/skills/automation-audit-ops/SKILL.md +141 -0
- package/skills/autonomous-agent-harness/SKILL.md +272 -0
- package/skills/autonomous-loops/SKILL.md +609 -0
- package/skills/backend-patterns/SKILL.md +560 -0
- package/skills/benchmark/SKILL.md +92 -0
- package/skills/blueprint/SKILL.md +104 -0
- package/skills/browser-qa/SKILL.md +86 -0
- package/skills/bun-runtime/SKILL.md +83 -0
- package/skills/canary-watch/SKILL.md +98 -0
- package/skills/carrier-relationship-management/SKILL.md +211 -0
- package/skills/cisco-ios-patterns/SKILL.md +163 -0
- package/skills/ck/SKILL.md +147 -0
- package/skills/ck/commands/forget.mjs +44 -0
- package/skills/ck/commands/info.mjs +24 -0
- package/skills/ck/commands/init.mjs +143 -0
- package/skills/ck/commands/list.mjs +40 -0
- package/skills/ck/commands/migrate.mjs +202 -0
- package/skills/ck/commands/resume.mjs +36 -0
- package/skills/ck/commands/save.mjs +210 -0
- package/skills/ck/commands/shared.mjs +387 -0
- package/skills/ck/hooks/session-start.mjs +224 -0
- package/skills/claude-devfleet/SKILL.md +103 -0
- package/skills/click-path-audit/SKILL.md +244 -0
- package/skills/clickhouse-io/SKILL.md +438 -0
- package/skills/code-tour/SKILL.md +235 -0
- package/skills/codebase-onboarding/SKILL.md +232 -0
- package/skills/coding-standards/SKILL.md +548 -0
- package/skills/compose-multiplatform-patterns/SKILL.md +298 -0
- package/skills/connections-optimizer/SKILL.md +188 -0
- package/skills/content-engine/SKILL.md +126 -0
- package/skills/content-hash-cache-pattern/SKILL.md +160 -0
- package/skills/context-budget/SKILL.md +134 -0
- package/skills/continuous-agent-loop/SKILL.md +44 -0
- package/skills/continuous-learning/SKILL.md +129 -0
- package/skills/continuous-learning/config.json +18 -0
- package/skills/continuous-learning/evaluate-session.sh +69 -0
- package/skills/continuous-learning-v2/SKILL.md +358 -0
- package/skills/continuous-learning-v2/agents/observer-loop.sh +322 -0
- package/skills/continuous-learning-v2/agents/observer.md +198 -0
- package/skills/continuous-learning-v2/agents/session-guardian.sh +150 -0
- package/skills/continuous-learning-v2/agents/start-observer.sh +248 -0
- package/skills/continuous-learning-v2/config.json +8 -0
- package/skills/continuous-learning-v2/hooks/observe.sh +476 -0
- package/skills/continuous-learning-v2/scripts/detect-project.sh +288 -0
- package/skills/continuous-learning-v2/scripts/instinct-cli.py +1519 -0
- package/skills/continuous-learning-v2/scripts/lib/homunculus-dir.sh +31 -0
- package/skills/continuous-learning-v2/scripts/migrate-homunculus.sh +62 -0
- package/skills/continuous-learning-v2/scripts/test_parse_instinct.py +1018 -0
- package/skills/cost-aware-llm-pipeline/SKILL.md +182 -0
- package/skills/cost-tracking/SKILL.md +147 -0
- package/skills/council/SKILL.md +202 -0
- package/skills/cpp-coding-standards/SKILL.md +722 -0
- package/skills/cpp-testing/SKILL.md +323 -0
- package/skills/crosspost/SKILL.md +110 -0
- package/skills/csharp-testing/SKILL.md +320 -0
- package/skills/customer-billing-ops/SKILL.md +139 -0
- package/skills/customs-trade-compliance/SKILL.md +262 -0
- package/skills/dart-flutter-patterns/SKILL.md +562 -0
- package/skills/dashboard-builder/SKILL.md +108 -0
- package/skills/data-scraper-agent/SKILL.md +764 -0
- package/skills/database-migrations/SKILL.md +428 -0
- package/skills/deep-research/SKILL.md +158 -0
- package/skills/defi-amm-security/SKILL.md +166 -0
- package/skills/deployment-patterns/SKILL.md +426 -0
- package/skills/design-system/SKILL.md +81 -0
- package/skills/django-celery/SKILL.md +456 -0
- package/skills/django-patterns/SKILL.md +733 -0
- package/skills/django-security/SKILL.md +592 -0
- package/skills/django-tdd/SKILL.md +728 -0
- package/skills/django-verification/SKILL.md +468 -0
- package/skills/dmux-workflows/SKILL.md +190 -0
- package/skills/docker-patterns/SKILL.md +363 -0
- package/skills/documentation-lookup/SKILL.md +89 -0
- package/skills/dotnet-patterns/SKILL.md +320 -0
- package/skills/e2e-testing/SKILL.md +325 -0
- package/skills/email-ops/SKILL.md +120 -0
- package/skills/energy-procurement/SKILL.md +227 -0
- package/skills/enterprise-agent-ops/SKILL.md +49 -0
- package/skills/error-handling/SKILL.md +375 -0
- package/skills/eval-harness/SKILL.md +269 -0
- package/skills/evm-token-decimals/SKILL.md +130 -0
- package/skills/exa-search/SKILL.md +106 -0
- package/skills/fal-ai-media/SKILL.md +287 -0
- package/skills/fastapi-patterns/SKILL.md +327 -0
- package/skills/finance-billing-ops/SKILL.md +126 -0
- package/skills/flox-environments/SKILL.md +496 -0
- package/skills/flutter-dart-code-review/SKILL.md +434 -0
- package/skills/foundation-models-on-device/SKILL.md +243 -0
- package/skills/frontend-design-direction/SKILL.md +92 -0
- package/skills/frontend-patterns/SKILL.md +641 -0
- package/skills/frontend-slides/SKILL.md +183 -0
- package/skills/frontend-slides/STYLE_PRESETS.md +330 -0
- package/skills/frontend-slides/animation-patterns.md +122 -0
- package/skills/frontend-slides/html-template.md +419 -0
- package/skills/frontend-slides/scripts/export-pdf.sh +418 -0
- package/skills/frontend-slides/scripts/extract-pptx.py +96 -0
- package/skills/frontend-slides/viewport-base.css +153 -0
- package/skills/fsharp-testing/SKILL.md +279 -0
- package/skills/gan-style-harness/SKILL.md +278 -0
- package/skills/gateguard/SKILL.md +125 -0
- package/skills/git-workflow/SKILL.md +714 -0
- package/skills/github-ops/SKILL.md +143 -0
- package/skills/golang-patterns/SKILL.md +673 -0
- package/skills/golang-testing/SKILL.md +719 -0
- package/skills/google-workspace-ops/SKILL.md +94 -0
- package/skills/healthcare-cdss-patterns/SKILL.md +245 -0
- package/skills/healthcare-emr-patterns/SKILL.md +159 -0
- package/skills/healthcare-eval-harness/SKILL.md +207 -0
- package/skills/healthcare-phi-compliance/SKILL.md +145 -0
- package/skills/hermes-imports/SKILL.md +87 -0
- package/skills/hexagonal-architecture/SKILL.md +275 -0
- package/skills/hipaa-compliance/SKILL.md +78 -0
- package/skills/homelab-network-readiness/SKILL.md +169 -0
- package/skills/homelab-network-setup/SKILL.md +129 -0
- package/skills/homelab-pihole-dns/SKILL.md +274 -0
- package/skills/homelab-vlan-segmentation/SKILL.md +311 -0
- package/skills/homelab-wireguard-vpn/SKILL.md +305 -0
- package/skills/hookify-rules/SKILL.md +128 -0
- package/skills/inventory-demand-planning/SKILL.md +246 -0
- package/skills/investor-materials/SKILL.md +95 -0
- package/skills/investor-outreach/SKILL.md +90 -0
- package/skills/ios-icon-gen/SKILL.md +157 -0
- package/skills/ios-icon-gen/scripts/generate_icons.swift +258 -0
- package/skills/ios-icon-gen/scripts/iconify_gen.sh +235 -0
- package/skills/iterative-retrieval/SKILL.md +209 -0
- package/skills/java-coding-standards/SKILL.md +382 -0
- package/skills/jira-integration/SKILL.md +292 -0
- package/skills/jpa-patterns/SKILL.md +150 -0
- package/skills/knowledge-ops/SKILL.md +153 -0
- package/skills/kotlin-coroutines-flows/SKILL.md +283 -0
- package/skills/kotlin-exposed-patterns/SKILL.md +718 -0
- package/skills/kotlin-ktor-patterns/SKILL.md +688 -0
- package/skills/kotlin-patterns/SKILL.md +710 -0
- package/skills/kotlin-testing/SKILL.md +823 -0
- package/skills/laravel-patterns/SKILL.md +414 -0
- package/skills/laravel-plugin-discovery/SKILL.md +228 -0
- package/skills/laravel-security/SKILL.md +284 -0
- package/skills/laravel-tdd/SKILL.md +282 -0
- package/skills/laravel-verification/SKILL.md +178 -0
- package/skills/lead-intelligence/SKILL.md +320 -0
- package/skills/lead-intelligence/agents/enrichment-agent.md +85 -0
- package/skills/lead-intelligence/agents/mutual-mapper.md +75 -0
- package/skills/lead-intelligence/agents/outreach-drafter.md +98 -0
- package/skills/lead-intelligence/agents/signal-scorer.md +60 -0
- package/skills/liquid-glass-design/SKILL.md +279 -0
- package/skills/llm-trading-agent-security/SKILL.md +146 -0
- package/skills/logistics-exception-management/SKILL.md +221 -0
- package/skills/make-interfaces-feel-better/SKILL.md +151 -0
- package/skills/manim-video/SKILL.md +88 -0
- package/skills/manim-video/assets/network_graph_scene.py +52 -0
- package/skills/market-research/SKILL.md +74 -0
- package/skills/mcp-server-patterns/SKILL.md +68 -0
- package/skills/messages-ops/SKILL.md +103 -0
- package/skills/mle-workflow/SKILL.md +345 -0
- package/skills/motion-advanced/SKILL.md +596 -0
- package/skills/motion-foundations/SKILL.md +299 -0
- package/skills/motion-patterns/SKILL.md +435 -0
- package/skills/motion-ui/SKILL.md +574 -0
- package/skills/mysql-patterns/SKILL.md +411 -0
- package/skills/nanoclaw-repl/SKILL.md +32 -0
- package/skills/nestjs-patterns/SKILL.md +229 -0
- package/skills/netmiko-ssh-automation/SKILL.md +173 -0
- package/skills/network-bgp-diagnostics/SKILL.md +167 -0
- package/skills/network-config-validation/SKILL.md +210 -0
- package/skills/network-interface-health/SKILL.md +152 -0
- package/skills/nextjs-turbopack/SKILL.md +43 -0
- package/skills/nodejs-keccak256/SKILL.md +102 -0
- package/skills/nutrient-document-processing/SKILL.md +166 -0
- package/skills/nuxt4-patterns/SKILL.md +99 -0
- package/skills/openclaw-persona-forge/SKILL.md +288 -0
- package/skills/openclaw-persona-forge/gacha.py +224 -0
- package/skills/openclaw-persona-forge/gacha.sh +5 -0
- package/skills/openclaw-persona-forge/references/avatar-style.md +124 -0
- package/skills/openclaw-persona-forge/references/boundary-rules.md +53 -0
- package/skills/openclaw-persona-forge/references/error-handling.md +53 -0
- package/skills/openclaw-persona-forge/references/identity-tension.md +48 -0
- package/skills/openclaw-persona-forge/references/naming-system.md +39 -0
- package/skills/openclaw-persona-forge/references/output-template.md +166 -0
- package/skills/opensource-pipeline/SKILL.md +254 -0
- package/skills/perl-patterns/SKILL.md +503 -0
- package/skills/perl-security/SKILL.md +502 -0
- package/skills/perl-testing/SKILL.md +474 -0
- package/skills/plan-orchestrate/SKILL.md +253 -0
- package/skills/plankton-code-quality/SKILL.md +236 -0
- package/skills/postgres-patterns/SKILL.md +146 -0
- package/skills/product-capability/SKILL.md +140 -0
- package/skills/product-lens/SKILL.md +91 -0
- package/skills/production-audit/SKILL.md +206 -0
- package/skills/production-scheduling/SKILL.md +237 -0
- package/skills/project-flow-ops/SKILL.md +110 -0
- package/skills/prompt-optimizer/SKILL.md +398 -0
- package/skills/python-patterns/SKILL.md +749 -0
- package/skills/python-testing/SKILL.md +815 -0
- package/skills/pytorch-patterns/SKILL.md +395 -0
- package/skills/quality-nonconformance/SKILL.md +259 -0
- package/skills/quarkus-patterns/SKILL.md +721 -0
- package/skills/quarkus-security/SKILL.md +466 -0
- package/skills/quarkus-tdd/SKILL.md +810 -0
- package/skills/quarkus-verification/SKILL.md +478 -0
- package/skills/ralphinho-rfc-pipeline/SKILL.md +66 -0
- package/skills/redis-patterns/SKILL.md +402 -0
- package/skills/regex-vs-llm-structured-text/SKILL.md +219 -0
- package/skills/remotion-video-creation/SKILL.md +43 -0
- package/skills/remotion-video-creation/rules/3d.md +86 -0
- package/skills/remotion-video-creation/rules/animations.md +29 -0
- package/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +173 -0
- package/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +100 -0
- package/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/skills/remotion-video-creation/rules/assets.md +78 -0
- package/skills/remotion-video-creation/rules/audio.md +172 -0
- package/skills/remotion-video-creation/rules/calculate-metadata.md +104 -0
- package/skills/remotion-video-creation/rules/can-decode.md +75 -0
- package/skills/remotion-video-creation/rules/charts.md +58 -0
- package/skills/remotion-video-creation/rules/compositions.md +146 -0
- package/skills/remotion-video-creation/rules/display-captions.md +126 -0
- package/skills/remotion-video-creation/rules/extract-frames.md +229 -0
- package/skills/remotion-video-creation/rules/fonts.md +152 -0
- package/skills/remotion-video-creation/rules/get-audio-duration.md +58 -0
- package/skills/remotion-video-creation/rules/get-video-dimensions.md +68 -0
- package/skills/remotion-video-creation/rules/get-video-duration.md +58 -0
- package/skills/remotion-video-creation/rules/gifs.md +138 -0
- package/skills/remotion-video-creation/rules/images.md +130 -0
- package/skills/remotion-video-creation/rules/import-srt-captions.md +67 -0
- package/skills/remotion-video-creation/rules/lottie.md +67 -0
- package/skills/remotion-video-creation/rules/measuring-dom-nodes.md +34 -0
- package/skills/remotion-video-creation/rules/measuring-text.md +143 -0
- package/skills/remotion-video-creation/rules/sequencing.md +106 -0
- package/skills/remotion-video-creation/rules/tailwind.md +11 -0
- package/skills/remotion-video-creation/rules/text-animations.md +20 -0
- package/skills/remotion-video-creation/rules/timing.md +179 -0
- package/skills/remotion-video-creation/rules/transcribe-captions.md +19 -0
- package/skills/remotion-video-creation/rules/transitions.md +122 -0
- package/skills/remotion-video-creation/rules/trimming.md +52 -0
- package/skills/remotion-video-creation/rules/videos.md +171 -0
- package/skills/repo-scan/SKILL.md +78 -0
- package/skills/research-ops/SKILL.md +111 -0
- package/skills/returns-reverse-logistics/SKILL.md +239 -0
- package/skills/rules-distill/SKILL.md +263 -0
- package/skills/rules-distill/scripts/scan-rules.sh +58 -0
- package/skills/rules-distill/scripts/scan-skills.sh +129 -0
- package/skills/rust-patterns/SKILL.md +498 -0
- package/skills/rust-testing/SKILL.md +499 -0
- package/skills/safety-guard/SKILL.md +74 -0
- package/skills/santa-method/SKILL.md +306 -0
- package/skills/scientific-db-pubmed-database/SKILL.md +175 -0
- package/skills/scientific-db-uspto-database/SKILL.md +177 -0
- package/skills/scientific-pkg-gget/SKILL.md +166 -0
- package/skills/scientific-thinking-literature-review/SKILL.md +192 -0
- package/skills/scientific-thinking-scholar-evaluation/SKILL.md +160 -0
- package/skills/search-first/SKILL.md +181 -0
- package/skills/security-bounty-hunter/SKILL.md +99 -0
- package/skills/security-review/SKILL.md +502 -0
- package/skills/security-review/cloud-infrastructure-security.md +361 -0
- package/skills/seo/SKILL.md +153 -0
- package/skills/skill-comply/SKILL.md +57 -0
- package/skills/skill-comply/fixtures/compliant_trace.jsonl +5 -0
- package/skills/skill-comply/fixtures/noncompliant_trace.jsonl +3 -0
- package/skills/skill-comply/fixtures/tdd_spec.yaml +44 -0
- package/skills/skill-comply/prompts/classifier.md +24 -0
- package/skills/skill-comply/prompts/scenario_generator.md +62 -0
- package/skills/skill-comply/prompts/spec_generator.md +42 -0
- package/skills/skill-comply/pyproject.toml +15 -0
- package/skills/skill-comply/scripts/__init__.py +0 -0
- package/skills/skill-comply/scripts/classifier.py +85 -0
- package/skills/skill-comply/scripts/grader.py +124 -0
- package/skills/skill-comply/scripts/parser.py +107 -0
- package/skills/skill-comply/scripts/report.py +170 -0
- package/skills/skill-comply/scripts/run.py +127 -0
- package/skills/skill-comply/scripts/runner.py +186 -0
- package/skills/skill-comply/scripts/scenario_generator.py +70 -0
- package/skills/skill-comply/scripts/spec_generator.py +72 -0
- package/skills/skill-comply/scripts/utils.py +13 -0
- package/skills/skill-comply/tests/test_grader.py +197 -0
- package/skills/skill-comply/tests/test_parser.py +90 -0
- package/skills/skill-comply/tests/test_runner.py +172 -0
- package/skills/skill-scout/SKILL.md +139 -0
- package/skills/skill-stocktake/SKILL.md +193 -0
- package/skills/skill-stocktake/scripts/quick-diff.sh +87 -0
- package/skills/skill-stocktake/scripts/save-results.sh +56 -0
- package/skills/skill-stocktake/scripts/scan.sh +170 -0
- package/skills/social-graph-ranker/SKILL.md +153 -0
- package/skills/springboot-patterns/SKILL.md +313 -0
- package/skills/springboot-security/SKILL.md +271 -0
- package/skills/springboot-tdd/SKILL.md +157 -0
- package/skills/springboot-verification/SKILL.md +230 -0
- package/skills/strategic-compact/SKILL.md +129 -0
- package/skills/strategic-compact/suggest-compact.sh +54 -0
- package/skills/swift-actor-persistence/SKILL.md +142 -0
- package/skills/swift-concurrency-6-2/SKILL.md +216 -0
- package/skills/swift-protocol-di-testing/SKILL.md +189 -0
- package/skills/swiftui-patterns/SKILL.md +259 -0
- package/skills/tdd-workflow/SKILL.md +462 -0
- package/skills/team-builder/SKILL.md +166 -0
- package/skills/terminal-ops/SKILL.md +108 -0
- package/skills/tinystruct-patterns/SKILL.md +130 -0
- package/skills/tinystruct-patterns/references/architecture.md +77 -0
- package/skills/tinystruct-patterns/references/data-handling.md +35 -0
- package/skills/tinystruct-patterns/references/routing.md +57 -0
- package/skills/tinystruct-patterns/references/system-usage.md +74 -0
- package/skills/tinystruct-patterns/references/testing.md +59 -0
- package/skills/token-budget-advisor/SKILL.md +133 -0
- package/skills/ui-demo/SKILL.md +464 -0
- package/skills/ui-to-vue/SKILL.md +134 -0
- package/skills/unified-notifications-ops/SKILL.md +186 -0
- package/skills/verification-loop/SKILL.md +125 -0
- package/skills/video-editing/SKILL.md +309 -0
- package/skills/videodb/SKILL.md +373 -0
- package/skills/videodb/reference/api-reference.md +550 -0
- package/skills/videodb/reference/capture-reference.md +407 -0
- package/skills/videodb/reference/capture.md +101 -0
- package/skills/videodb/reference/editor.md +443 -0
- package/skills/videodb/reference/generative.md +331 -0
- package/skills/videodb/reference/rtstream-reference.md +564 -0
- package/skills/videodb/reference/rtstream.md +65 -0
- package/skills/videodb/reference/search.md +230 -0
- package/skills/videodb/reference/streaming.md +406 -0
- package/skills/videodb/reference/use-cases.md +118 -0
- package/skills/videodb/scripts/ws_listener.py +282 -0
- package/skills/visa-doc-translate/README.md +86 -0
- package/skills/visa-doc-translate/SKILL.md +117 -0
- package/skills/vite-patterns/SKILL.md +448 -0
- package/skills/windows-desktop-e2e/SKILL.md +787 -0
- package/skills/workspace-surface-audit/SKILL.md +124 -0
- package/skills/x-api/SKILL.md +233 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: terminal-ops
|
|
3
|
+
description: Evidence-first repo execution workflow for the toolset. Use when the user wants a command run, a repo checked, a CI failure debugged, or a narrow fix pushed with exact proof of what was executed and verified.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Terminal Ops
|
|
7
|
+
|
|
8
|
+
Use this when the user wants real repo execution: run commands, inspect git state, debug CI or builds, make a narrow fix, and report exactly what changed and what was verified.
|
|
9
|
+
|
|
10
|
+
This skill is intentionally narrower than general coding guidance. It is an operator workflow for evidence-first terminal execution.
|
|
11
|
+
|
|
12
|
+
## Skill Stack
|
|
13
|
+
|
|
14
|
+
Pull these the toolset-native skills into the workflow when relevant:
|
|
15
|
+
|
|
16
|
+
- `verification-loop` for exact proving steps after changes
|
|
17
|
+
- `tdd-workflow` when the right fix needs regression coverage
|
|
18
|
+
- `security-review` when secrets, auth, or external inputs are involved
|
|
19
|
+
- `github-ops` when the task depends on CI runs, PR state, or release status
|
|
20
|
+
- `knowledge-ops` when the verified outcome needs to be captured into durable project context
|
|
21
|
+
|
|
22
|
+
## When to Use
|
|
23
|
+
|
|
24
|
+
- user says "fix", "debug", "run this", "check the repo", or "push it"
|
|
25
|
+
- the task depends on command output, git state, test results, or a verified local fix
|
|
26
|
+
- the answer must distinguish changed locally, verified locally, committed, and pushed
|
|
27
|
+
|
|
28
|
+
## Guardrails
|
|
29
|
+
|
|
30
|
+
- inspect before editing
|
|
31
|
+
- stay read-only if the user asked for audit/review only
|
|
32
|
+
- prefer repo-local scripts and helpers over improvised ad hoc wrappers
|
|
33
|
+
- do not claim fixed until the proving command was rerun
|
|
34
|
+
- do not claim pushed unless the branch actually moved upstream
|
|
35
|
+
|
|
36
|
+
## Workflow
|
|
37
|
+
|
|
38
|
+
### 1. Resolve the working surface
|
|
39
|
+
|
|
40
|
+
Settle:
|
|
41
|
+
|
|
42
|
+
- exact repo path
|
|
43
|
+
- branch
|
|
44
|
+
- local diff state
|
|
45
|
+
- requested mode:
|
|
46
|
+
- inspect
|
|
47
|
+
- fix
|
|
48
|
+
- verify
|
|
49
|
+
- push
|
|
50
|
+
|
|
51
|
+
### 2. Read the failing surface first
|
|
52
|
+
|
|
53
|
+
Before changing anything:
|
|
54
|
+
|
|
55
|
+
- inspect the error
|
|
56
|
+
- inspect the file or test
|
|
57
|
+
- inspect git state
|
|
58
|
+
- use any already-supplied logs or context before re-reading blindly
|
|
59
|
+
|
|
60
|
+
### 3. Keep the fix narrow
|
|
61
|
+
|
|
62
|
+
Solve one dominant failure at a time:
|
|
63
|
+
|
|
64
|
+
- use the smallest useful proving command first
|
|
65
|
+
- only escalate to a bigger build/test pass after the local failure is addressed
|
|
66
|
+
- if a command keeps failing with the same signature, stop broad retries and narrow scope
|
|
67
|
+
|
|
68
|
+
### 4. Report exact execution state
|
|
69
|
+
|
|
70
|
+
Use exact status words:
|
|
71
|
+
|
|
72
|
+
- inspected
|
|
73
|
+
- changed locally
|
|
74
|
+
- verified locally
|
|
75
|
+
- committed
|
|
76
|
+
- pushed
|
|
77
|
+
- blocked
|
|
78
|
+
|
|
79
|
+
## Output Format
|
|
80
|
+
|
|
81
|
+
```text
|
|
82
|
+
SURFACE
|
|
83
|
+
- repo
|
|
84
|
+
- branch
|
|
85
|
+
- requested mode
|
|
86
|
+
|
|
87
|
+
EVIDENCE
|
|
88
|
+
- failing command / diff / test
|
|
89
|
+
|
|
90
|
+
ACTION
|
|
91
|
+
- what changed
|
|
92
|
+
|
|
93
|
+
STATUS
|
|
94
|
+
- inspected / changed locally / verified locally / committed / pushed / blocked
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Pitfalls
|
|
98
|
+
|
|
99
|
+
- do not work from stale memory when the live repo state can be read
|
|
100
|
+
- do not widen a narrow fix into repo-wide churn
|
|
101
|
+
- do not use destructive git commands
|
|
102
|
+
- do not ignore unrelated local work
|
|
103
|
+
|
|
104
|
+
## Verification
|
|
105
|
+
|
|
106
|
+
- the response names the proving command or test
|
|
107
|
+
- git-related work names the repo path and branch
|
|
108
|
+
- any push claim includes the target branch and exact result
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tinystruct-patterns
|
|
3
|
+
description: Use when developing application modules or microservices with the tinystruct Java framework. Covers routing, context management, JSON handling with Builder, and CLI/HTTP dual-mode patterns.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# tinystruct Development Patterns
|
|
7
|
+
|
|
8
|
+
Architecture and implementation patterns for building modules with the **tinystruct** Java framework – a lightweight system where CLI and HTTP are equal citizens.
|
|
9
|
+
|
|
10
|
+
## When to Use
|
|
11
|
+
|
|
12
|
+
- Creating new `Application` modules by extending `AbstractApplication`.
|
|
13
|
+
- Defining routes and command-line actions using `@Action`.
|
|
14
|
+
- Handling per-request state via `Context`.
|
|
15
|
+
- Performing JSON serialization using the native `Builder` component.
|
|
16
|
+
- Configuring database connections or system settings in `application.properties`.
|
|
17
|
+
- Generating or re-generating the standard `bin/dispatcher` entry point via `ApplicationManager.init()`.
|
|
18
|
+
- Debugging routing conflicts (Actions) or CLI argument parsing.
|
|
19
|
+
|
|
20
|
+
## How It Works
|
|
21
|
+
|
|
22
|
+
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`.
|
|
23
|
+
|
|
24
|
+
Routing is handled by the `ActionRegistry`, which automatically maps path segments to method arguments and injects dependencies. For data-only services, the native `Builder` component should be used for JSON serialization to maintain a zero-dependency footprint. The framework also includes a utility in `ApplicationManager` to bootstrap the project's execution environment by generating the `bin/dispatcher` script.
|
|
25
|
+
|
|
26
|
+
## Examples
|
|
27
|
+
|
|
28
|
+
### Basic Application (MyService)
|
|
29
|
+
```java
|
|
30
|
+
public class MyService extends AbstractApplication {
|
|
31
|
+
@Override
|
|
32
|
+
public void init() {
|
|
33
|
+
this.setTemplateRequired(false); // Disable .view lookup for data/API apps
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@Override public String version() { return "1.0.0"; }
|
|
37
|
+
|
|
38
|
+
@Action("greet")
|
|
39
|
+
public String greet() {
|
|
40
|
+
return "Hello from tinystruct!";
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Parameterized Routing (getUser)
|
|
46
|
+
```java
|
|
47
|
+
// Handles /api/user/123 (Web) or "bin/dispatcher api/user/123" (CLI)
|
|
48
|
+
@Action("api/user/(\\d+)")
|
|
49
|
+
public String getUser(int userId) {
|
|
50
|
+
return "User ID: " + userId;
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### HTTP Mode Disambiguation (login)
|
|
55
|
+
```java
|
|
56
|
+
@Action(value = "login", mode = Mode.HTTP_POST)
|
|
57
|
+
public boolean doLogin() {
|
|
58
|
+
// Process login logic
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Native JSON Data Handling (getData)
|
|
64
|
+
```java
|
|
65
|
+
@Action("api/data")
|
|
66
|
+
public Builder getData() throws ApplicationException {
|
|
67
|
+
Builder builder = new Builder();
|
|
68
|
+
builder.put("status", "success");
|
|
69
|
+
Builder nested = new Builder();
|
|
70
|
+
nested.put("id", 1);
|
|
71
|
+
nested.put("name", "James");
|
|
72
|
+
builder.put("data", nested);
|
|
73
|
+
return builder;
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Configuration
|
|
78
|
+
|
|
79
|
+
Settings are managed in `src/main/resources/application.properties`.
|
|
80
|
+
|
|
81
|
+
```properties
|
|
82
|
+
# Database
|
|
83
|
+
driver=org.h2.Driver
|
|
84
|
+
database.url=jdbc:h2:~/mydb
|
|
85
|
+
|
|
86
|
+
# App specific
|
|
87
|
+
my.service.endpoint=https://api.example.com
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Testing Patterns
|
|
91
|
+
|
|
92
|
+
Use JUnit 5 to test actions by verifying they are registered in the `ActionRegistry`.
|
|
93
|
+
|
|
94
|
+
```java
|
|
95
|
+
@Test
|
|
96
|
+
void testActionRegistration() {
|
|
97
|
+
Application app = new MyService();
|
|
98
|
+
app.init();
|
|
99
|
+
|
|
100
|
+
ActionRegistry registry = ActionRegistry.getInstance();
|
|
101
|
+
assertNotNull(registry.get("greet"));
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Red Flags & Anti-patterns
|
|
106
|
+
|
|
107
|
+
| Symptom | Correct Pattern |
|
|
108
|
+
|---|---|
|
|
109
|
+
| Importing `com.google.gson` or `com.fasterxml.jackson` | Use `org.tinystruct.data.component.Builder`. |
|
|
110
|
+
| `FileNotFoundException` for `.view` files | Call `setTemplateRequired(false)` in `init()` for API-only apps. |
|
|
111
|
+
| Annotating `private` methods with `@Action` | Actions must be `public` to be registered by the framework. |
|
|
112
|
+
| Hardcoding `main(String[] args)` in apps | Use `bin/dispatcher` as the entry point for all modules. |
|
|
113
|
+
| Manual `ActionRegistry` registration | Prefer the `@Action` annotation for automatic discovery. |
|
|
114
|
+
|
|
115
|
+
## Technical Reference
|
|
116
|
+
|
|
117
|
+
Detailed guides are available in the `references/` directory:
|
|
118
|
+
|
|
119
|
+
- [Architecture & Config](references/architecture.md) — Abstractions, Package Map, Properties
|
|
120
|
+
- [Routing & @Action](references/routing.md) — Annotation details, Modes, Parameters
|
|
121
|
+
- [Data Handling](references/data-handling.md) — Using the native `Builder` for JSON
|
|
122
|
+
- [System & Usage](references/system-usage.md) — Context, Sessions, Events, CLI usage
|
|
123
|
+
- [Testing Patterns](references/testing.md) — JUnit 5 integration and ActionRegistry testing
|
|
124
|
+
|
|
125
|
+
## Reference Source Files (Internal)
|
|
126
|
+
|
|
127
|
+
- `src/main/java/org/tinystruct/AbstractApplication.java` — Core base class
|
|
128
|
+
- `src/main/java/org/tinystruct/system/annotation/Action.java` — Annotation & Modes
|
|
129
|
+
- `src/main/java/org/tinystruct/application/ActionRegistry.java` — Routing Engine
|
|
130
|
+
- `src/main/java/org/tinystruct/data/component/Builder.java` — JSON/Data Serializer
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# tinystruct Architecture and Configuration
|
|
2
|
+
|
|
3
|
+
## When to Use
|
|
4
|
+
|
|
5
|
+
Choose **tinystruct** when you need a lightweight, high-performance Java framework that treats CLI and HTTP as equal citizens. It is ideal for building microservices, command-line utilities, and data-driven applications where a small footprint and zero-dependency JSON handling are required. Use it when you want to write logic once and expose it via both a terminal and a web server without modification.
|
|
6
|
+
|
|
7
|
+
## How It Works
|
|
8
|
+
|
|
9
|
+
### Core Architecture
|
|
10
|
+
|
|
11
|
+
The framework operates on a singleton `ActionRegistry` that maps URL patterns (or command strings) to `Action` objects. When a request arrives, the system resolves the path and invokes the corresponding method handle.
|
|
12
|
+
|
|
13
|
+
#### Key Abstractions
|
|
14
|
+
|
|
15
|
+
| Class/Interface | Role |
|
|
16
|
+
|---|---|
|
|
17
|
+
| `AbstractApplication` | Base class for all tinystruct applications. Extend this. |
|
|
18
|
+
| `@Action` annotation | Maps a method to a URI path (web) or command name (CLI). The single routing primitive. |
|
|
19
|
+
| `ActionRegistry` | Singleton that maps URL patterns to `Action` objects via regex. Never instantiate directly. |
|
|
20
|
+
| `Action` | Wraps a `MethodHandle` + regex pattern + priority + `Mode` for dispatch. |
|
|
21
|
+
| `Context` | Per-request state store. Access via `getContext()`. Holds CLI args and HTTP request/response. |
|
|
22
|
+
| `Dispatcher` | CLI entry point (`bin/dispatcher`). Reads `--import` to load applications. |
|
|
23
|
+
| `HttpServer` | Built-in Netty-based HTTP server. Start with `bin/dispatcher start --import org.tinystruct.system.HttpServer`. |
|
|
24
|
+
|
|
25
|
+
### Package Map
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
org.tinystruct/
|
|
29
|
+
├── AbstractApplication.java ← extend this
|
|
30
|
+
├── Application.java ← interface
|
|
31
|
+
├── ApplicationException.java ← checked exception
|
|
32
|
+
├── ApplicationRuntimeException.java ← unchecked exception
|
|
33
|
+
├── application/
|
|
34
|
+
│ ├── Action.java ← runtime action wrapper
|
|
35
|
+
│ ├── ActionRegistry.java ← singleton route registry
|
|
36
|
+
│ └── Context.java ← request context
|
|
37
|
+
├── system/
|
|
38
|
+
│ ├── annotation/Action.java ← @Action annotation + Mode enum
|
|
39
|
+
│ ├── Dispatcher.java ← CLI dispatcher
|
|
40
|
+
│ ├── HttpServer.java ← built-in HTTP server
|
|
41
|
+
│ ├── EventDispatcher.java ← event bus
|
|
42
|
+
│ └── Settings.java ← reads application.properties
|
|
43
|
+
├── data/component/Builder.java ← JSON serialization (use instead of Gson/Jackson)
|
|
44
|
+
└── http/ ← Request, Response, Constants
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Template Behavior and Dispatch Flow
|
|
48
|
+
|
|
49
|
+
By default, the framework assumes a view template is required. If `templateRequired` is `true`, `toString()` looks for a `.view` file in `src/main/resources/themes/<ClassName>.view`. Use `getContext()` to manage state and `setVariable("name", value)` to pass data to templates, which use `[%name%]` for interpolation.
|
|
50
|
+
|
|
51
|
+
## Examples
|
|
52
|
+
|
|
53
|
+
### Minimal Application Initialization
|
|
54
|
+
```java
|
|
55
|
+
@Override
|
|
56
|
+
public void init() {
|
|
57
|
+
this.setTemplateRequired(false); // Skip .view template lookup for data-only apps
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Action Definition and CLI Invocation
|
|
62
|
+
```java
|
|
63
|
+
@Action("hello")
|
|
64
|
+
public String hello() {
|
|
65
|
+
return "Hello, tinystruct!";
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
**Execution via Dispatcher:**
|
|
69
|
+
```bash
|
|
70
|
+
bin/dispatcher hello
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Configuration Access
|
|
74
|
+
Located at `src/main/resources/application.properties`:
|
|
75
|
+
```java
|
|
76
|
+
String port = this.getConfiguration("server.port");
|
|
77
|
+
```
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# tinystruct Data Handling (JSON)
|
|
2
|
+
|
|
3
|
+
## When to Use
|
|
4
|
+
|
|
5
|
+
Prefer `org.tinystruct.data.component.Builder` in scenarios where you need a lightweight, high-performance JSON solution with **zero external dependencies**. It is specifically designed to keep your tinystruct applications lean and fast, making it the ideal choice for microservices and CLI tools where including heavy libraries like Jackson or Gson would be overkill.
|
|
6
|
+
|
|
7
|
+
## How It Works
|
|
8
|
+
|
|
9
|
+
The `Builder` class provides a simple key-value interface for both creating and reading JSON structures. It integrates directly with `AbstractApplication` result handling; when an action method returns a `Builder` object, the framework automatically serializes it to the response stream. This prevents the need for manual string conversion and ensures consistent data formatting across your application modules.
|
|
10
|
+
|
|
11
|
+
## Examples
|
|
12
|
+
|
|
13
|
+
### Serialization
|
|
14
|
+
```java
|
|
15
|
+
import org.tinystruct.data.component.Builder;
|
|
16
|
+
|
|
17
|
+
// Create and populate
|
|
18
|
+
Builder response = new Builder();
|
|
19
|
+
response.put("status", "success");
|
|
20
|
+
response.put("count", 42);
|
|
21
|
+
response.put("data", someList);
|
|
22
|
+
|
|
23
|
+
return response; // {"status":"success","count":42,...}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Parsing
|
|
27
|
+
```java
|
|
28
|
+
import org.tinystruct.data.component.Builder;
|
|
29
|
+
|
|
30
|
+
// Parse a JSON string
|
|
31
|
+
Builder parsed = new Builder();
|
|
32
|
+
parsed.parse(jsonString);
|
|
33
|
+
|
|
34
|
+
String status = parsed.get("status").toString();
|
|
35
|
+
```
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# tinystruct @Action Routing Reference
|
|
2
|
+
|
|
3
|
+
## When to Use
|
|
4
|
+
|
|
5
|
+
Use the `@Action` annotation in your applications to define routes for both CLI commands and HTTP endpoints. It is appropriate whenever you need to map logic to a specific path, handle parameterized requests (e.g., retrieving a resource by ID), or restrict execution to specific HTTP methods (GET, POST, etc.) while maintaining a consistent command structure across environments.
|
|
6
|
+
|
|
7
|
+
## How It Works
|
|
8
|
+
|
|
9
|
+
The `ActionRegistry` parses `@Action` annotations to build a routing table. For parameterized methods, the framework automatically maps Java parameter types (int, String, etc.) to corresponding regex segments to generate an internal matching pattern. For instance, `getUser(int id)` generates a regex targeting digits, while `search(String query)` targets generic path segments.
|
|
10
|
+
|
|
11
|
+
When a request is dispatched, the `ActionRegistry` automatically injects dependencies like `Request` and `Response` into the action method if they are specified as parameters, drawing them directly from the current request's `Context`. Execution is further filtered by the `Mode` value, allowing a single path to invoke different logic depending on whether the trigger was a terminal command or a specific type of HTTP request.
|
|
12
|
+
|
|
13
|
+
### Mode Values
|
|
14
|
+
|
|
15
|
+
| Mode | When it triggers |
|
|
16
|
+
|---|---|
|
|
17
|
+
| `DEFAULT` | Both CLI and HTTP (GET, POST, etc.) |
|
|
18
|
+
| `CLI` | CLI dispatcher only |
|
|
19
|
+
| `HTTP_GET` | HTTP GET only |
|
|
20
|
+
| `HTTP_POST` | HTTP POST only |
|
|
21
|
+
| `HTTP_PUT` | HTTP PUT only |
|
|
22
|
+
| `HTTP_DELETE` | HTTP DELETE only |
|
|
23
|
+
| `HTTP_PATCH` | HTTP PATCH only |
|
|
24
|
+
|
|
25
|
+
## Examples
|
|
26
|
+
|
|
27
|
+
### Basic Action Declaration
|
|
28
|
+
```java
|
|
29
|
+
@Action(
|
|
30
|
+
value = "path/subpath", // required: URI segment or CLI command
|
|
31
|
+
description = "What it does", // shown in --help output
|
|
32
|
+
mode = Mode.HTTP_POST, // default: Mode.DEFAULT (both CLI + HTTP)
|
|
33
|
+
options = {}, // CLI option flags
|
|
34
|
+
example = "curl -X POST http://localhost:8080/path/subpath/42"
|
|
35
|
+
)
|
|
36
|
+
public String myAction(int id) { ... }
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Parameterized Paths (Regex Generation)
|
|
40
|
+
```java
|
|
41
|
+
@Action("user/{id}")
|
|
42
|
+
public String getUser(int id) { ... }
|
|
43
|
+
// → pattern: ^/?user/(-?\d+)$
|
|
44
|
+
|
|
45
|
+
@Action("search")
|
|
46
|
+
public String search(String query) { ... }
|
|
47
|
+
// → pattern: ^/?search/([^/]+)$
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Request and Response Injection
|
|
51
|
+
```java
|
|
52
|
+
@Action(value = "upload", mode = Mode.HTTP_POST)
|
|
53
|
+
public String upload(Request<?, ?> req, Response<?, ?> res) throws ApplicationException {
|
|
54
|
+
// req.getParameter("file"), res.setHeader(...), etc.
|
|
55
|
+
return "ok";
|
|
56
|
+
}
|
|
57
|
+
```
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# tinystruct System and Usage Reference
|
|
2
|
+
|
|
3
|
+
## When to Use
|
|
4
|
+
|
|
5
|
+
Use the system and usage patterns described here when you need to handle stateful interactions across CLI and HTTP modes, manage user sessions in web applications, or implement loosely coupled communication between application modules using an event-driven architecture.
|
|
6
|
+
|
|
7
|
+
## How It Works
|
|
8
|
+
|
|
9
|
+
The framework's `Context` serves as the primary data store for request-specific state. In CLI mode, flags passed as `--key value` are automatically parsed and stored in the `Context` with the `--` prefix, allowing action methods to retrieve command parameters easily. For web applications, the system provides standard session management via the `Request` object, enabling the storage of user data across multiple HTTP requests.
|
|
10
|
+
|
|
11
|
+
The internal `EventDispatcher` facilitates an asynchronous event bus. By defining custom `Event` classes and registering handlers (typically within an application's `init()` method), you can trigger background tasks—such as sending emails or logging audit trails—without blocking the main execution path.
|
|
12
|
+
|
|
13
|
+
## Examples
|
|
14
|
+
|
|
15
|
+
### Context and CLI Arguments
|
|
16
|
+
```java
|
|
17
|
+
@Action("echo")
|
|
18
|
+
public String echo() {
|
|
19
|
+
// CLI: bin/dispatcher echo --words "Hello World"
|
|
20
|
+
Object words = getContext().getAttribute("--words");
|
|
21
|
+
if (words != null) return words.toString();
|
|
22
|
+
return "No words provided";
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Session Management (Web Mode)
|
|
27
|
+
```java
|
|
28
|
+
@Action(value = "login", mode = Mode.HTTP_POST)
|
|
29
|
+
public String login(Request request) {
|
|
30
|
+
request.getSession().setAttribute("userId", "42");
|
|
31
|
+
return "Logged in";
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
@Action("profile")
|
|
35
|
+
public String profile(Request request) {
|
|
36
|
+
Object userId = request.getSession().getAttribute("userId");
|
|
37
|
+
if (userId == null) return "Not logged in";
|
|
38
|
+
return "User: " + userId;
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Event System
|
|
43
|
+
```java
|
|
44
|
+
// 1. Define an event
|
|
45
|
+
public class OrderCreatedEvent implements org.tinystruct.system.Event<Order> {
|
|
46
|
+
private final Order order;
|
|
47
|
+
public OrderCreatedEvent(Order order) { this.order = order; }
|
|
48
|
+
|
|
49
|
+
@Override public String getName() { return "order_created"; }
|
|
50
|
+
@Override public Order getPayload() { return order; }
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// 2. Register a handler
|
|
54
|
+
EventDispatcher.getInstance().registerHandler(OrderCreatedEvent.class, event -> {
|
|
55
|
+
CompletableFuture.runAsync(() -> sendConfirmationEmail(event.getPayload()));
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
// 3. Dispatch
|
|
59
|
+
EventDispatcher.getInstance().dispatch(new OrderCreatedEvent(newOrder));
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Running the Application
|
|
63
|
+
```bash
|
|
64
|
+
# CLI mode
|
|
65
|
+
bin/dispatcher hello
|
|
66
|
+
bin/dispatcher echo --words "Hello" --import com.example.HelloApp
|
|
67
|
+
|
|
68
|
+
# HTTP server (listens on :8080 by default)
|
|
69
|
+
bin/dispatcher start --import org.tinystruct.system.HttpServer
|
|
70
|
+
|
|
71
|
+
# Database utilities
|
|
72
|
+
bin/dispatcher generate --table users
|
|
73
|
+
bin/dispatcher sql-query "SELECT * FROM users"
|
|
74
|
+
```
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# tinystruct Testing Patterns
|
|
2
|
+
|
|
3
|
+
## When to Use
|
|
4
|
+
|
|
5
|
+
Use the testing patterns described here when writing units tests for your tinystruct applications with **JUnit 5**. These patterns are essential for verifying that your `@Action` methods return the correct results and that your routing logic is properly registered within the singleton `ActionRegistry`.
|
|
6
|
+
|
|
7
|
+
## How It Works
|
|
8
|
+
|
|
9
|
+
Testing tinystruct applications requires a specific setup to ensure framework-level features like annotation processing and configuration management are active. By creating a new instance of your application and passing it a `Settings` object in the `setUp()` method, you trigger the `init()` lifecycle. This ensures all `@Action` methods are discovered and registered.
|
|
10
|
+
|
|
11
|
+
Because the `ActionRegistry` is a singleton, it is critical to maintain isolation between tests by properly initializing your application state before each test execution, preventing side effects from leaking across the test suite.
|
|
12
|
+
|
|
13
|
+
## Examples
|
|
14
|
+
|
|
15
|
+
### Unit Testing an Application
|
|
16
|
+
```java
|
|
17
|
+
import org.junit.jupiter.api.*;
|
|
18
|
+
import org.tinystruct.application.ActionRegistry;
|
|
19
|
+
import org.tinystruct.system.Settings;
|
|
20
|
+
|
|
21
|
+
class MyAppTest {
|
|
22
|
+
|
|
23
|
+
private MyApp app;
|
|
24
|
+
|
|
25
|
+
@BeforeEach
|
|
26
|
+
void setUp() {
|
|
27
|
+
app = new MyApp();
|
|
28
|
+
Settings config = new Settings();
|
|
29
|
+
app.setConfiguration(config);
|
|
30
|
+
app.init(); // triggers @Action annotation processing
|
|
31
|
+
}
|
|
32
|
+
void testHello() throws Exception {
|
|
33
|
+
// Direct invocation via the application object
|
|
34
|
+
Object result = app.invoke("hello");
|
|
35
|
+
Assertions.assertEquals("Hello, tinystruct!", result);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@Test
|
|
39
|
+
void testGreet() throws Exception {
|
|
40
|
+
// Invocation with arguments
|
|
41
|
+
Object result = app.invoke("greet", new Object[]{"James"});
|
|
42
|
+
Assertions.assertEquals("Hello, James!", result);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Testing via ActionRegistry
|
|
48
|
+
If you need to test the routing logic itself, use the `ActionRegistry` singleton to verify path matching:
|
|
49
|
+
|
|
50
|
+
```java
|
|
51
|
+
@Test
|
|
52
|
+
void testRouting() {
|
|
53
|
+
ActionRegistry registry = ActionRegistry.getInstance();
|
|
54
|
+
// Verify a path matches an action
|
|
55
|
+
Action action = registry.getAction("greet/James");
|
|
56
|
+
Assertions.assertNotNull(action);
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
Reference: `src/test/java/org/tinystruct/application/ActionRegistryTest.java`
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: token-budget-advisor
|
|
3
|
+
description: >-
|
|
4
|
+
Offers the user an informed choice about how much response depth to
|
|
5
|
+
consume before answering. Use this skill when the user explicitly
|
|
6
|
+
wants to control response length, depth, or token budget.
|
|
7
|
+
TRIGGER when: "token budget", "token count", "token usage", "token limit",
|
|
8
|
+
"response length", "answer depth", "short version", "brief answer",
|
|
9
|
+
"detailed answer", "exhaustive answer", "respuesta corta vs larga",
|
|
10
|
+
"cuántos tokens", "ahorrar tokens", "responde al 50%", "dame la versión
|
|
11
|
+
corta", "quiero controlar cuánto usas", or clear variants where the
|
|
12
|
+
user is explicitly asking to control answer size or depth.
|
|
13
|
+
DO NOT TRIGGER when: user has already specified a level in the current
|
|
14
|
+
session (maintain it), the request is clearly a one-word answer, or
|
|
15
|
+
"token" refers to auth/session/payment tokens rather than response size.
|
|
16
|
+
origin: community
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# Token Budget Advisor (TBA)
|
|
20
|
+
|
|
21
|
+
Intercept the response flow to offer the user a choice about response depth **before** Claude answers.
|
|
22
|
+
|
|
23
|
+
## When to Use
|
|
24
|
+
|
|
25
|
+
- User wants to control how long or detailed a response is
|
|
26
|
+
- User mentions tokens, budget, depth, or response length
|
|
27
|
+
- User says "short version", "tldr", "brief", "al 25%", "exhaustive", etc.
|
|
28
|
+
- Any time the user wants to choose depth/detail level upfront
|
|
29
|
+
|
|
30
|
+
**Do not trigger** when: user already set a level this session (maintain it silently), or the answer is trivially one line.
|
|
31
|
+
|
|
32
|
+
## How It Works
|
|
33
|
+
|
|
34
|
+
### Step 1 — Estimate input tokens
|
|
35
|
+
|
|
36
|
+
Use the repository's canonical context-budget heuristics to estimate the prompt's token count mentally.
|
|
37
|
+
|
|
38
|
+
Use the same calibration guidance as [context-budget](../context-budget/SKILL.md):
|
|
39
|
+
|
|
40
|
+
- prose: `words × 1.3`
|
|
41
|
+
- code-heavy or mixed/code blocks: `chars / 4`
|
|
42
|
+
|
|
43
|
+
For mixed content, use the dominant content type and keep the estimate heuristic.
|
|
44
|
+
|
|
45
|
+
### Step 2 — Estimate response size by complexity
|
|
46
|
+
|
|
47
|
+
Classify the prompt, then apply the multiplier range to get the full response window:
|
|
48
|
+
|
|
49
|
+
| Complexity | Multiplier range | Example prompts |
|
|
50
|
+
|--------------|------------------|------------------------------------------------------|
|
|
51
|
+
| Simple | 3× – 8× | "What is X?", yes/no, single fact |
|
|
52
|
+
| Medium | 8× – 20× | "How does X work?" |
|
|
53
|
+
| Medium-High | 10× – 25× | Code request with context |
|
|
54
|
+
| Complex | 15× – 40× | Multi-part analysis, comparisons, architecture |
|
|
55
|
+
| Creative | 10× – 30× | Stories, essays, narrative writing |
|
|
56
|
+
|
|
57
|
+
Response window = `input_tokens × mult_min` to `input_tokens × mult_max` (but don’t exceed your model’s configured output-token limit).
|
|
58
|
+
|
|
59
|
+
### Step 3 — Present depth options
|
|
60
|
+
|
|
61
|
+
Present this block **before** answering, using the actual estimated numbers:
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
Analyzing your prompt...
|
|
65
|
+
|
|
66
|
+
Input: ~[N] tokens | Type: [type] | Complexity: [level] | Language: [lang]
|
|
67
|
+
|
|
68
|
+
Choose your depth level:
|
|
69
|
+
|
|
70
|
+
[1] Essential (25%) -> ~[tokens] Direct answer only, no preamble
|
|
71
|
+
[2] Moderate (50%) -> ~[tokens] Answer + context + 1 example
|
|
72
|
+
[3] Detailed (75%) -> ~[tokens] Full answer with alternatives
|
|
73
|
+
[4] Exhaustive (100%) -> ~[tokens] Everything, no limits
|
|
74
|
+
|
|
75
|
+
Which level? (1-4 or say "25% depth", "50% depth", "75% depth", "100% depth")
|
|
76
|
+
|
|
77
|
+
Precision: heuristic estimate ~85-90% accuracy (±15%).
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Level token estimates (within the response window):
|
|
81
|
+
- 25% → `min + (max - min) × 0.25`
|
|
82
|
+
- 50% → `min + (max - min) × 0.50`
|
|
83
|
+
- 75% → `min + (max - min) × 0.75`
|
|
84
|
+
- 100% → `max`
|
|
85
|
+
|
|
86
|
+
### Step 4 — Respond at the chosen level
|
|
87
|
+
|
|
88
|
+
| Level | Target length | Include | Omit |
|
|
89
|
+
|------------------|---------------------|-----------------------------------------------------|---------------------------------------------------|
|
|
90
|
+
| 25% Essential | 2-4 sentences max | Direct answer, key conclusion | Context, examples, nuance, alternatives |
|
|
91
|
+
| 50% Moderate | 1-3 paragraphs | Answer + necessary context + 1 example | Deep analysis, edge cases, references |
|
|
92
|
+
| 75% Detailed | Structured response | Multiple examples, pros/cons, alternatives | Extreme edge cases, exhaustive references |
|
|
93
|
+
| 100% Exhaustive | No restriction | Everything — full analysis, all code, all perspectives | Nothing |
|
|
94
|
+
|
|
95
|
+
## Shortcuts — skip the question
|
|
96
|
+
|
|
97
|
+
If the user already signals a level, respond at that level immediately without asking:
|
|
98
|
+
|
|
99
|
+
| What they say | Level |
|
|
100
|
+
|----------------------------------------------------|-------|
|
|
101
|
+
| "1" / "25% depth" / "short version" / "brief answer" / "tldr" | 25% |
|
|
102
|
+
| "2" / "50% depth" / "moderate depth" / "balanced answer" | 50% |
|
|
103
|
+
| "3" / "75% depth" / "detailed answer" / "thorough answer" | 75% |
|
|
104
|
+
| "4" / "100% depth" / "exhaustive answer" / "full deep dive" | 100% |
|
|
105
|
+
|
|
106
|
+
If the user set a level earlier in the session, **maintain it silently** for subsequent responses unless they change it.
|
|
107
|
+
|
|
108
|
+
## Precision note
|
|
109
|
+
|
|
110
|
+
This skill uses heuristic estimation — no real tokenizer. Accuracy ~85-90%, variance ±15%. Always show the disclaimer.
|
|
111
|
+
|
|
112
|
+
## Examples
|
|
113
|
+
|
|
114
|
+
### Triggers
|
|
115
|
+
|
|
116
|
+
- "Give me the short version first."
|
|
117
|
+
- "How many tokens will your answer use?"
|
|
118
|
+
- "Respond at 50% depth."
|
|
119
|
+
- "I want the exhaustive answer, not the summary."
|
|
120
|
+
- "Dame la version corta y luego la detallada."
|
|
121
|
+
|
|
122
|
+
### Does Not Trigger
|
|
123
|
+
|
|
124
|
+
- "What is a JWT token?"
|
|
125
|
+
- "The checkout flow uses a payment token."
|
|
126
|
+
- "Is this normal?"
|
|
127
|
+
- "Complete the refactor."
|
|
128
|
+
- Follow-up questions after the user already chose a depth for the session
|
|
129
|
+
|
|
130
|
+
## Source
|
|
131
|
+
|
|
132
|
+
Standalone skill from [TBA — Token Budget Advisor for Claude Code](https://github.com/Xabilimon1/Token-Budget-Advisor-Claude-Code-).
|
|
133
|
+
Original project also ships a Python estimator script, but this repository keeps the skill self-contained and heuristic-only.
|