@funnycode/myclaude 0.1.76 → 0.1.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/dist/SKILL-r7zmg5v7.md +3 -0
- package/dist/cli-mvr5k580.md +3 -0
- package/dist/myclaude.js +1370 -1191
- package/dist/myclaude.mjs +1370 -1191
- package/dist/server-zyhc2a9z.md +3 -0
- package/package.json +129 -129
- package/seed/marketplaces/ecc/.opencode/package-lock.json +169 -169
- package/seed/marketplaces/ecc/commands/aside.md +164 -164
- package/seed/marketplaces/ecc/commands/auto-update.md +28 -28
- package/seed/marketplaces/ecc/commands/build-fix.md +66 -66
- package/seed/marketplaces/ecc/commands/checkpoint.md +78 -78
- package/seed/marketplaces/ecc/commands/code-review.md +289 -289
- package/seed/marketplaces/ecc/commands/cost-report.md +107 -107
- package/seed/marketplaces/ecc/commands/cpp-build.md +173 -173
- package/seed/marketplaces/ecc/commands/cpp-review.md +132 -132
- package/seed/marketplaces/ecc/commands/cpp-test.md +251 -251
- package/seed/marketplaces/ecc/commands/ecc-guide.md +93 -93
- package/seed/marketplaces/ecc/commands/evolve.md +178 -178
- package/seed/marketplaces/ecc/commands/fastapi-review.md +39 -39
- package/seed/marketplaces/ecc/commands/feature-dev.md +49 -49
- package/seed/marketplaces/ecc/commands/flutter-build.md +164 -164
- package/seed/marketplaces/ecc/commands/flutter-review.md +116 -116
- package/seed/marketplaces/ecc/commands/flutter-test.md +144 -144
- package/seed/marketplaces/ecc/commands/gan-build.md +103 -103
- package/seed/marketplaces/ecc/commands/gan-design.md +39 -39
- package/seed/marketplaces/ecc/commands/go-build.md +183 -183
- package/seed/marketplaces/ecc/commands/go-review.md +148 -148
- package/seed/marketplaces/ecc/commands/go-test.md +268 -268
- package/seed/marketplaces/ecc/commands/gradle-build.md +70 -70
- package/seed/marketplaces/ecc/commands/harness-audit.md +84 -84
- package/seed/marketplaces/ecc/commands/hookify-configure.md +14 -14
- package/seed/marketplaces/ecc/commands/hookify-help.md +46 -46
- package/seed/marketplaces/ecc/commands/hookify-list.md +21 -21
- package/seed/marketplaces/ecc/commands/hookify.md +50 -50
- package/seed/marketplaces/ecc/commands/instinct-export.md +66 -66
- package/seed/marketplaces/ecc/commands/instinct-import.md +114 -114
- package/seed/marketplaces/ecc/commands/instinct-status.md +59 -59
- package/seed/marketplaces/ecc/commands/jira.md +106 -106
- package/seed/marketplaces/ecc/commands/kotlin-build.md +174 -174
- package/seed/marketplaces/ecc/commands/kotlin-review.md +140 -140
- package/seed/marketplaces/ecc/commands/kotlin-test.md +312 -312
- package/seed/marketplaces/ecc/commands/learn-eval.md +116 -116
- package/seed/marketplaces/ecc/commands/learn.md +74 -74
- package/seed/marketplaces/ecc/commands/loop-start.md +36 -36
- package/seed/marketplaces/ecc/commands/loop-status.md +77 -77
- package/seed/marketplaces/ecc/commands/marketing-campaign.md +129 -129
- package/seed/marketplaces/ecc/commands/model-route.md +30 -30
- package/seed/marketplaces/ecc/commands/multi-backend.md +162 -162
- package/seed/marketplaces/ecc/commands/multi-execute.md +319 -319
- package/seed/marketplaces/ecc/commands/multi-frontend.md +162 -162
- package/seed/marketplaces/ecc/commands/multi-plan.md +272 -272
- package/seed/marketplaces/ecc/commands/multi-workflow.md +195 -195
- package/seed/marketplaces/ecc/commands/plan-prd.md +160 -160
- package/seed/marketplaces/ecc/commands/plan.md +200 -200
- package/seed/marketplaces/ecc/commands/pm2.md +276 -276
- package/seed/marketplaces/ecc/commands/pr.md +184 -184
- package/seed/marketplaces/ecc/commands/project-init.md +86 -86
- package/seed/marketplaces/ecc/commands/projects.md +39 -39
- package/seed/marketplaces/ecc/commands/promote.md +41 -41
- package/seed/marketplaces/ecc/commands/prp-commit.md +112 -112
- package/seed/marketplaces/ecc/commands/prp-implement.md +385 -385
- package/seed/marketplaces/ecc/commands/prp-plan.md +502 -502
- package/seed/marketplaces/ecc/commands/prp-pr.md +184 -184
- package/seed/marketplaces/ecc/commands/prp-prd.md +447 -447
- package/seed/marketplaces/ecc/commands/prune.md +31 -31
- package/seed/marketplaces/ecc/commands/python-review.md +297 -297
- package/seed/marketplaces/ecc/commands/quality-gate.md +33 -33
- package/seed/marketplaces/ecc/commands/refactor-clean.md +84 -84
- package/seed/marketplaces/ecc/commands/resume-session.md +156 -156
- package/seed/marketplaces/ecc/commands/review-pr.md +37 -37
- package/seed/marketplaces/ecc/commands/rust-build.md +187 -187
- package/seed/marketplaces/ecc/commands/rust-review.md +142 -142
- package/seed/marketplaces/ecc/commands/rust-test.md +308 -308
- package/seed/marketplaces/ecc/commands/santa-loop.md +175 -175
- package/seed/marketplaces/ecc/commands/save-session.md +275 -275
- package/seed/marketplaces/ecc/commands/security-scan.md +92 -92
- package/seed/marketplaces/ecc/commands/sessions.md +339 -339
- package/seed/marketplaces/ecc/commands/setup-pm.md +80 -80
- package/seed/marketplaces/ecc/commands/skill-create.md +174 -174
- package/seed/marketplaces/ecc/commands/skill-health.md +54 -54
- package/seed/marketplaces/ecc/commands/test-coverage.md +73 -73
- package/seed/marketplaces/ecc/commands/update-codemaps.md +76 -76
- package/seed/marketplaces/ecc/commands/update-docs.md +88 -88
- package/seed/marketplaces/ecc/skills/accessibility/SKILL.md +146 -146
- package/seed/marketplaces/ecc/skills/agent-architecture-audit/SKILL.md +256 -256
- package/seed/marketplaces/ecc/skills/agent-eval/SKILL.md +145 -145
- package/seed/marketplaces/ecc/skills/agent-harness-construction/SKILL.md +73 -73
- package/seed/marketplaces/ecc/skills/agent-introspection-debugging/SKILL.md +153 -153
- package/seed/marketplaces/ecc/skills/agent-payment-x402/SKILL.md +224 -224
- package/seed/marketplaces/ecc/skills/agent-sort/SKILL.md +215 -215
- package/seed/marketplaces/ecc/skills/agentic-engineering/SKILL.md +63 -63
- package/seed/marketplaces/ecc/skills/agentic-os/SKILL.md +387 -387
- package/seed/marketplaces/ecc/skills/ai-first-engineering/SKILL.md +51 -51
- package/seed/marketplaces/ecc/skills/ai-regression-testing/SKILL.md +385 -385
- package/seed/marketplaces/ecc/skills/android-clean-architecture/SKILL.md +339 -339
- package/seed/marketplaces/ecc/skills/angular-developer/SKILL.md +154 -154
- package/seed/marketplaces/ecc/skills/angular-developer/references/angular-animations.md +160 -160
- package/seed/marketplaces/ecc/skills/angular-developer/references/angular-aria.md +410 -410
- package/seed/marketplaces/ecc/skills/angular-developer/references/cli.md +86 -86
- package/seed/marketplaces/ecc/skills/angular-developer/references/component-harnesses.md +59 -59
- package/seed/marketplaces/ecc/skills/angular-developer/references/component-styling.md +91 -91
- package/seed/marketplaces/ecc/skills/angular-developer/references/components.md +117 -117
- package/seed/marketplaces/ecc/skills/angular-developer/references/creating-services.md +97 -97
- package/seed/marketplaces/ecc/skills/angular-developer/references/data-resolvers.md +69 -69
- package/seed/marketplaces/ecc/skills/angular-developer/references/define-routes.md +67 -67
- package/seed/marketplaces/ecc/skills/angular-developer/references/defining-providers.md +72 -72
- package/seed/marketplaces/ecc/skills/angular-developer/references/di-fundamentals.md +120 -120
- package/seed/marketplaces/ecc/skills/angular-developer/references/e2e-testing.md +56 -56
- package/seed/marketplaces/ecc/skills/angular-developer/references/effects.md +83 -83
- package/seed/marketplaces/ecc/skills/angular-developer/references/hierarchical-injectors.md +43 -43
- package/seed/marketplaces/ecc/skills/angular-developer/references/host-elements.md +80 -80
- package/seed/marketplaces/ecc/skills/angular-developer/references/injection-context.md +63 -63
- package/seed/marketplaces/ecc/skills/angular-developer/references/inputs.md +101 -101
- package/seed/marketplaces/ecc/skills/angular-developer/references/linked-signal.md +59 -59
- package/seed/marketplaces/ecc/skills/angular-developer/references/loading-strategies.md +61 -61
- package/seed/marketplaces/ecc/skills/angular-developer/references/mcp.md +108 -108
- package/seed/marketplaces/ecc/skills/angular-developer/references/navigate-to-routes.md +69 -69
- package/seed/marketplaces/ecc/skills/angular-developer/references/outputs.md +86 -86
- package/seed/marketplaces/ecc/skills/angular-developer/references/reactive-forms.md +122 -122
- package/seed/marketplaces/ecc/skills/angular-developer/references/rendering-strategies.md +44 -44
- package/seed/marketplaces/ecc/skills/angular-developer/references/resource.md +77 -77
- package/seed/marketplaces/ecc/skills/angular-developer/references/route-animations.md +56 -56
- package/seed/marketplaces/ecc/skills/angular-developer/references/route-guards.md +52 -52
- package/seed/marketplaces/ecc/skills/angular-developer/references/router-lifecycle.md +45 -45
- package/seed/marketplaces/ecc/skills/angular-developer/references/router-testing.md +87 -87
- package/seed/marketplaces/ecc/skills/angular-developer/references/show-routes-with-outlets.md +68 -68
- package/seed/marketplaces/ecc/skills/angular-developer/references/signal-forms.md +795 -795
- package/seed/marketplaces/ecc/skills/angular-developer/references/signals-overview.md +94 -94
- package/seed/marketplaces/ecc/skills/angular-developer/references/tailwind-css.md +69 -69
- package/seed/marketplaces/ecc/skills/angular-developer/references/template-driven-forms.md +114 -114
- package/seed/marketplaces/ecc/skills/angular-developer/references/testing-fundamentals.md +65 -65
- package/seed/marketplaces/ecc/skills/api-connector-builder/SKILL.md +120 -120
- package/seed/marketplaces/ecc/skills/api-design/SKILL.md +523 -523
- package/seed/marketplaces/ecc/skills/architecture-decision-records/SKILL.md +179 -179
- package/seed/marketplaces/ecc/skills/article-writing/SKILL.md +79 -79
- package/seed/marketplaces/ecc/skills/automation-audit-ops/SKILL.md +142 -142
- package/seed/marketplaces/ecc/skills/autonomous-agent-harness/SKILL.md +273 -273
- package/seed/marketplaces/ecc/skills/autonomous-loops/SKILL.md +610 -610
- package/seed/marketplaces/ecc/skills/backend-patterns/SKILL.md +561 -561
- package/seed/marketplaces/ecc/skills/benchmark/SKILL.md +93 -93
- package/seed/marketplaces/ecc/skills/benchmark-optimization-loop/SKILL.md +69 -69
- package/seed/marketplaces/ecc/skills/blender-motion-state-inspection/SKILL.md +164 -164
- package/seed/marketplaces/ecc/skills/blueprint/SKILL.md +105 -105
- package/seed/marketplaces/ecc/skills/brand-voice/SKILL.md +97 -97
- package/seed/marketplaces/ecc/skills/brand-voice/references/voice-profile-schema.md +55 -55
- package/seed/marketplaces/ecc/skills/browser-qa/SKILL.md +87 -87
- package/seed/marketplaces/ecc/skills/bun-runtime/SKILL.md +84 -84
- package/seed/marketplaces/ecc/skills/canary-watch/SKILL.md +107 -107
- package/seed/marketplaces/ecc/skills/carrier-relationship-management/SKILL.md +212 -212
- package/seed/marketplaces/ecc/skills/cisco-ios-patterns/SKILL.md +163 -163
- package/seed/marketplaces/ecc/skills/ck/SKILL.md +147 -147
- package/seed/marketplaces/ecc/skills/ck/commands/forget.mjs +44 -44
- package/seed/marketplaces/ecc/skills/ck/commands/info.mjs +24 -24
- package/seed/marketplaces/ecc/skills/ck/commands/init.mjs +143 -143
- package/seed/marketplaces/ecc/skills/ck/commands/list.mjs +40 -40
- package/seed/marketplaces/ecc/skills/ck/commands/migrate.mjs +202 -202
- package/seed/marketplaces/ecc/skills/ck/commands/resume.mjs +36 -36
- package/seed/marketplaces/ecc/skills/ck/commands/save.mjs +210 -210
- package/seed/marketplaces/ecc/skills/ck/commands/shared.mjs +387 -387
- package/seed/marketplaces/ecc/skills/ck/hooks/session-start.mjs +224 -224
- package/seed/marketplaces/ecc/skills/claude-devfleet/SKILL.md +103 -103
- package/seed/marketplaces/ecc/skills/click-path-audit/SKILL.md +244 -244
- package/seed/marketplaces/ecc/skills/clickhouse-io/SKILL.md +439 -439
- package/seed/marketplaces/ecc/skills/code-tour/SKILL.md +236 -236
- package/seed/marketplaces/ecc/skills/codebase-onboarding/SKILL.md +233 -233
- package/seed/marketplaces/ecc/skills/coding-standards/SKILL.md +549 -549
- package/seed/marketplaces/ecc/skills/compose-multiplatform-patterns/SKILL.md +299 -299
- package/seed/marketplaces/ecc/skills/configure-ecc/SKILL.md +384 -384
- package/seed/marketplaces/ecc/skills/connections-optimizer/SKILL.md +189 -189
- package/seed/marketplaces/ecc/skills/content-engine/SKILL.md +131 -131
- package/seed/marketplaces/ecc/skills/content-hash-cache-pattern/SKILL.md +161 -161
- package/seed/marketplaces/ecc/skills/context-budget/SKILL.md +135 -135
- package/seed/marketplaces/ecc/skills/continuous-agent-loop/SKILL.md +45 -45
- package/seed/marketplaces/ecc/skills/continuous-learning/SKILL.md +131 -131
- package/seed/marketplaces/ecc/skills/continuous-learning/config.json +18 -18
- package/seed/marketplaces/ecc/skills/continuous-learning/evaluate-session.sh +69 -69
- package/seed/marketplaces/ecc/skills/continuous-learning-v2/SKILL.md +360 -360
- package/seed/marketplaces/ecc/skills/continuous-learning-v2/agents/observer-loop.sh +322 -322
- package/seed/marketplaces/ecc/skills/continuous-learning-v2/agents/observer.md +198 -198
- package/seed/marketplaces/ecc/skills/continuous-learning-v2/agents/session-guardian.sh +150 -150
- package/seed/marketplaces/ecc/skills/continuous-learning-v2/agents/start-observer.sh +248 -248
- package/seed/marketplaces/ecc/skills/continuous-learning-v2/config.json +8 -8
- package/seed/marketplaces/ecc/skills/continuous-learning-v2/hooks/observe.sh +498 -498
- package/seed/marketplaces/ecc/skills/continuous-learning-v2/scripts/detect-project.sh +322 -322
- package/seed/marketplaces/ecc/skills/continuous-learning-v2/scripts/instinct-cli.py +1826 -1826
- package/seed/marketplaces/ecc/skills/continuous-learning-v2/scripts/lib/homunculus-dir.sh +31 -31
- package/seed/marketplaces/ecc/skills/continuous-learning-v2/scripts/migrate-homunculus.sh +62 -62
- package/seed/marketplaces/ecc/skills/continuous-learning-v2/scripts/test_parse_instinct.py +1018 -1018
- package/seed/marketplaces/ecc/skills/cost-aware-llm-pipeline/SKILL.md +183 -183
- package/seed/marketplaces/ecc/skills/cost-tracking/SKILL.md +147 -147
- package/seed/marketplaces/ecc/skills/council/SKILL.md +203 -203
- package/seed/marketplaces/ecc/skills/cpp-coding-standards/SKILL.md +723 -723
- package/seed/marketplaces/ecc/skills/cpp-testing/SKILL.md +324 -324
- package/seed/marketplaces/ecc/skills/crosspost/SKILL.md +111 -111
- package/seed/marketplaces/ecc/skills/csharp-testing/SKILL.md +321 -321
- package/seed/marketplaces/ecc/skills/customer-billing-ops/SKILL.md +140 -140
- package/seed/marketplaces/ecc/skills/customs-trade-compliance/SKILL.md +263 -263
- package/seed/marketplaces/ecc/skills/dart-flutter-patterns/SKILL.md +563 -563
- package/seed/marketplaces/ecc/skills/dashboard-builder/SKILL.md +108 -108
- package/seed/marketplaces/ecc/skills/data-scraper-agent/SKILL.md +764 -764
- package/seed/marketplaces/ecc/skills/data-throughput-accelerator/SKILL.md +72 -72
- package/seed/marketplaces/ecc/skills/database-migrations/SKILL.md +429 -429
- package/seed/marketplaces/ecc/skills/deep-research/SKILL.md +159 -159
- package/seed/marketplaces/ecc/skills/defi-amm-security/SKILL.md +166 -166
- package/seed/marketplaces/ecc/skills/deployment-patterns/SKILL.md +427 -427
- package/seed/marketplaces/ecc/skills/design-system/SKILL.md +82 -82
- package/seed/marketplaces/ecc/skills/django-celery/SKILL.md +457 -457
- package/seed/marketplaces/ecc/skills/django-patterns/SKILL.md +734 -734
- package/seed/marketplaces/ecc/skills/django-security/SKILL.md +593 -593
- package/seed/marketplaces/ecc/skills/django-tdd/SKILL.md +729 -729
- package/seed/marketplaces/ecc/skills/django-verification/SKILL.md +469 -469
- package/seed/marketplaces/ecc/skills/dmux-workflows/SKILL.md +191 -191
- package/seed/marketplaces/ecc/skills/docker-patterns/SKILL.md +364 -364
- package/seed/marketplaces/ecc/skills/documentation-lookup/SKILL.md +90 -90
- package/seed/marketplaces/ecc/skills/dotnet-patterns/SKILL.md +321 -321
- package/seed/marketplaces/ecc/skills/e2e-testing/SKILL.md +326 -326
- package/seed/marketplaces/ecc/skills/ecc-guide/SKILL.md +189 -189
- package/seed/marketplaces/ecc/skills/ecc-tools-cost-audit/SKILL.md +160 -160
- package/seed/marketplaces/ecc/skills/email-ops/SKILL.md +121 -121
- package/seed/marketplaces/ecc/skills/energy-procurement/SKILL.md +228 -228
- package/seed/marketplaces/ecc/skills/enterprise-agent-ops/SKILL.md +50 -50
- package/seed/marketplaces/ecc/skills/error-handling/SKILL.md +376 -376
- package/seed/marketplaces/ecc/skills/eval-harness/SKILL.md +270 -270
- package/seed/marketplaces/ecc/skills/evm-token-decimals/SKILL.md +130 -130
- package/seed/marketplaces/ecc/skills/exa-search/SKILL.md +107 -107
- package/seed/marketplaces/ecc/skills/fal-ai-media/SKILL.md +288 -288
- package/seed/marketplaces/ecc/skills/fastapi-patterns/SKILL.md +327 -327
- package/seed/marketplaces/ecc/skills/finance-billing-ops/SKILL.md +127 -127
- package/seed/marketplaces/ecc/skills/flox-environments/SKILL.md +496 -496
- package/seed/marketplaces/ecc/skills/flutter-dart-code-review/SKILL.md +435 -435
- package/seed/marketplaces/ecc/skills/foundation-models-on-device/SKILL.md +243 -243
- package/seed/marketplaces/ecc/skills/frontend-a11y/SKILL.md +446 -446
- package/seed/marketplaces/ecc/skills/frontend-design-direction/SKILL.md +92 -92
- package/seed/marketplaces/ecc/skills/frontend-patterns/SKILL.md +642 -642
- package/seed/marketplaces/ecc/skills/frontend-slides/SKILL.md +184 -184
- package/seed/marketplaces/ecc/skills/frontend-slides/STYLE_PRESETS.md +330 -330
- package/seed/marketplaces/ecc/skills/frontend-slides/animation-patterns.md +122 -122
- package/seed/marketplaces/ecc/skills/frontend-slides/html-template.md +419 -419
- package/seed/marketplaces/ecc/skills/frontend-slides/scripts/export-pdf.sh +418 -418
- package/seed/marketplaces/ecc/skills/frontend-slides/scripts/extract-pptx.py +96 -96
- package/seed/marketplaces/ecc/skills/frontend-slides/viewport-base.css +153 -153
- package/seed/marketplaces/ecc/skills/fsharp-testing/SKILL.md +280 -280
- package/seed/marketplaces/ecc/skills/gan-style-harness/SKILL.md +278 -278
- package/seed/marketplaces/ecc/skills/gateguard/SKILL.md +125 -125
- package/seed/marketplaces/ecc/skills/git-workflow/SKILL.md +715 -715
- package/seed/marketplaces/ecc/skills/github-ops/SKILL.md +144 -144
- package/seed/marketplaces/ecc/skills/golang-patterns/SKILL.md +674 -674
- package/seed/marketplaces/ecc/skills/golang-testing/SKILL.md +720 -720
- package/seed/marketplaces/ecc/skills/google-workspace-ops/SKILL.md +95 -95
- package/seed/marketplaces/ecc/skills/healthcare-cdss-patterns/SKILL.md +245 -245
- package/seed/marketplaces/ecc/skills/healthcare-emr-patterns/SKILL.md +159 -159
- package/seed/marketplaces/ecc/skills/healthcare-eval-harness/SKILL.md +207 -207
- package/seed/marketplaces/ecc/skills/healthcare-phi-compliance/SKILL.md +145 -145
- package/seed/marketplaces/ecc/skills/hermes-imports/SKILL.md +88 -88
- package/seed/marketplaces/ecc/skills/hexagonal-architecture/SKILL.md +276 -276
- package/seed/marketplaces/ecc/skills/hipaa-compliance/SKILL.md +78 -78
- package/seed/marketplaces/ecc/skills/homelab-network-readiness/SKILL.md +169 -169
- package/seed/marketplaces/ecc/skills/homelab-network-setup/SKILL.md +129 -129
- package/seed/marketplaces/ecc/skills/homelab-pihole-dns/SKILL.md +274 -274
- package/seed/marketplaces/ecc/skills/homelab-vlan-segmentation/SKILL.md +311 -311
- package/seed/marketplaces/ecc/skills/homelab-wireguard-vpn/SKILL.md +305 -305
- package/seed/marketplaces/ecc/skills/hookify-rules/SKILL.md +128 -128
- package/seed/marketplaces/ecc/skills/inventory-demand-planning/SKILL.md +247 -247
- package/seed/marketplaces/ecc/skills/investor-materials/SKILL.md +96 -96
- package/seed/marketplaces/ecc/skills/investor-outreach/SKILL.md +91 -91
- package/seed/marketplaces/ecc/skills/ios-icon-gen/SKILL.md +157 -157
- package/seed/marketplaces/ecc/skills/ios-icon-gen/scripts/generate_icons.swift +258 -258
- package/seed/marketplaces/ecc/skills/ios-icon-gen/scripts/iconify_gen.sh +235 -235
- package/seed/marketplaces/ecc/skills/iterative-retrieval/SKILL.md +211 -211
- package/seed/marketplaces/ecc/skills/ito-basket-compare/SKILL.md +63 -63
- package/seed/marketplaces/ecc/skills/ito-data-atlas-agent/SKILL.md +63 -63
- package/seed/marketplaces/ecc/skills/ito-market-intelligence/SKILL.md +60 -60
- package/seed/marketplaces/ecc/skills/ito-trade-planner/SKILL.md +67 -67
- package/seed/marketplaces/ecc/skills/java-coding-standards/SKILL.md +383 -383
- package/seed/marketplaces/ecc/skills/jira-integration/SKILL.md +293 -293
- package/seed/marketplaces/ecc/skills/jpa-patterns/SKILL.md +151 -151
- package/seed/marketplaces/ecc/skills/knowledge-ops/SKILL.md +154 -154
- package/seed/marketplaces/ecc/skills/kotlin-coroutines-flows/SKILL.md +284 -284
- package/seed/marketplaces/ecc/skills/kotlin-exposed-patterns/SKILL.md +719 -719
- package/seed/marketplaces/ecc/skills/kotlin-ktor-patterns/SKILL.md +689 -689
- package/seed/marketplaces/ecc/skills/kotlin-patterns/SKILL.md +711 -711
- package/seed/marketplaces/ecc/skills/kotlin-testing/SKILL.md +824 -824
- package/seed/marketplaces/ecc/skills/laravel-patterns/SKILL.md +415 -415
- package/seed/marketplaces/ecc/skills/laravel-plugin-discovery/SKILL.md +229 -229
- package/seed/marketplaces/ecc/skills/laravel-security/SKILL.md +285 -285
- package/seed/marketplaces/ecc/skills/laravel-tdd/SKILL.md +283 -283
- package/seed/marketplaces/ecc/skills/laravel-verification/SKILL.md +179 -179
- package/seed/marketplaces/ecc/skills/latency-critical-systems/SKILL.md +73 -73
- package/seed/marketplaces/ecc/skills/lead-intelligence/SKILL.md +321 -321
- package/seed/marketplaces/ecc/skills/lead-intelligence/agents/enrichment-agent.md +85 -85
- package/seed/marketplaces/ecc/skills/lead-intelligence/agents/mutual-mapper.md +75 -75
- package/seed/marketplaces/ecc/skills/lead-intelligence/agents/outreach-drafter.md +98 -98
- package/seed/marketplaces/ecc/skills/lead-intelligence/agents/signal-scorer.md +60 -60
- package/seed/marketplaces/ecc/skills/liquid-glass-design/SKILL.md +279 -279
- package/seed/marketplaces/ecc/skills/llm-trading-agent-security/SKILL.md +146 -146
- package/seed/marketplaces/ecc/skills/logistics-exception-management/SKILL.md +222 -222
- package/seed/marketplaces/ecc/skills/make-interfaces-feel-better/SKILL.md +151 -151
- package/seed/marketplaces/ecc/skills/manim-video/SKILL.md +89 -89
- package/seed/marketplaces/ecc/skills/manim-video/assets/network_graph_scene.py +52 -52
- package/seed/marketplaces/ecc/skills/market-research/SKILL.md +75 -75
- package/seed/marketplaces/ecc/skills/marketing-campaign/SKILL.md +113 -113
- package/seed/marketplaces/ecc/skills/mcp-server-patterns/SKILL.md +69 -69
- package/seed/marketplaces/ecc/skills/messages-ops/SKILL.md +104 -104
- package/seed/marketplaces/ecc/skills/mle-workflow/SKILL.md +346 -346
- package/seed/marketplaces/ecc/skills/motion-advanced/SKILL.md +596 -596
- package/seed/marketplaces/ecc/skills/motion-foundations/SKILL.md +299 -299
- package/seed/marketplaces/ecc/skills/motion-patterns/SKILL.md +435 -435
- package/seed/marketplaces/ecc/skills/motion-ui/SKILL.md +575 -575
- package/seed/marketplaces/ecc/skills/mysql-patterns/SKILL.md +412 -412
- package/seed/marketplaces/ecc/skills/nanoclaw-repl/SKILL.md +33 -33
- package/seed/marketplaces/ecc/skills/nestjs-patterns/SKILL.md +230 -230
- package/seed/marketplaces/ecc/skills/netmiko-ssh-automation/SKILL.md +173 -173
- package/seed/marketplaces/ecc/skills/network-bgp-diagnostics/SKILL.md +167 -167
- package/seed/marketplaces/ecc/skills/network-config-validation/SKILL.md +210 -210
- package/seed/marketplaces/ecc/skills/network-interface-health/SKILL.md +152 -152
- package/seed/marketplaces/ecc/skills/nextjs-turbopack/SKILL.md +57 -57
- package/seed/marketplaces/ecc/skills/nodejs-keccak256/SKILL.md +102 -102
- package/seed/marketplaces/ecc/skills/nutrient-document-processing/SKILL.md +167 -167
- package/seed/marketplaces/ecc/skills/nuxt4-patterns/SKILL.md +100 -100
- package/seed/marketplaces/ecc/skills/openclaw-persona-forge/SKILL.md +288 -288
- package/seed/marketplaces/ecc/skills/openclaw-persona-forge/gacha.py +224 -224
- package/seed/marketplaces/ecc/skills/openclaw-persona-forge/gacha.sh +5 -5
- package/seed/marketplaces/ecc/skills/openclaw-persona-forge/references/avatar-style.md +124 -124
- package/seed/marketplaces/ecc/skills/openclaw-persona-forge/references/boundary-rules.md +53 -53
- package/seed/marketplaces/ecc/skills/openclaw-persona-forge/references/error-handling.md +53 -53
- package/seed/marketplaces/ecc/skills/openclaw-persona-forge/references/identity-tension.md +48 -48
- package/seed/marketplaces/ecc/skills/openclaw-persona-forge/references/naming-system.md +39 -39
- package/seed/marketplaces/ecc/skills/openclaw-persona-forge/references/output-template.md +166 -166
- package/seed/marketplaces/ecc/skills/opensource-pipeline/SKILL.md +255 -255
- package/seed/marketplaces/ecc/skills/parallel-execution-optimizer/SKILL.md +72 -72
- package/seed/marketplaces/ecc/skills/perl-patterns/SKILL.md +504 -504
- package/seed/marketplaces/ecc/skills/perl-security/SKILL.md +503 -503
- package/seed/marketplaces/ecc/skills/perl-testing/SKILL.md +475 -475
- package/seed/marketplaces/ecc/skills/plan-orchestrate/SKILL.md +262 -262
- package/seed/marketplaces/ecc/skills/plankton-code-quality/SKILL.md +236 -236
- package/seed/marketplaces/ecc/skills/postgres-patterns/SKILL.md +147 -147
- package/seed/marketplaces/ecc/skills/prediction-market-oracle-research/SKILL.md +63 -63
- package/seed/marketplaces/ecc/skills/prediction-market-risk-review/SKILL.md +60 -60
- package/seed/marketplaces/ecc/skills/prisma-patterns/SKILL.md +371 -371
- package/seed/marketplaces/ecc/skills/product-capability/SKILL.md +141 -141
- package/seed/marketplaces/ecc/skills/product-lens/SKILL.md +92 -92
- package/seed/marketplaces/ecc/skills/production-audit/SKILL.md +206 -206
- package/seed/marketplaces/ecc/skills/production-scheduling/SKILL.md +238 -238
- package/seed/marketplaces/ecc/skills/project-flow-ops/SKILL.md +111 -111
- package/seed/marketplaces/ecc/skills/prompt-optimizer/SKILL.md +398 -398
- package/seed/marketplaces/ecc/skills/python-patterns/SKILL.md +750 -750
- package/seed/marketplaces/ecc/skills/python-testing/SKILL.md +816 -816
- package/seed/marketplaces/ecc/skills/pytorch-patterns/SKILL.md +396 -396
- package/seed/marketplaces/ecc/skills/quality-nonconformance/SKILL.md +260 -260
- package/seed/marketplaces/ecc/skills/quarkus-patterns/SKILL.md +722 -722
- package/seed/marketplaces/ecc/skills/quarkus-security/SKILL.md +467 -467
- package/seed/marketplaces/ecc/skills/quarkus-tdd/SKILL.md +811 -811
- package/seed/marketplaces/ecc/skills/quarkus-verification/SKILL.md +479 -479
- package/seed/marketplaces/ecc/skills/ralphinho-rfc-pipeline/SKILL.md +67 -67
- package/seed/marketplaces/ecc/skills/recsys-pipeline-architect/SKILL.md +114 -114
- package/seed/marketplaces/ecc/skills/recursive-decision-ledger/SKILL.md +79 -79
- package/seed/marketplaces/ecc/skills/redis-patterns/SKILL.md +403 -403
- package/seed/marketplaces/ecc/skills/regex-vs-llm-structured-text/SKILL.md +220 -220
- package/seed/marketplaces/ecc/skills/remotion-video-creation/SKILL.md +43 -43
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/3d.md +86 -86
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/animations.md +29 -29
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +173 -173
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +100 -100
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +108 -108
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/assets.md +78 -78
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/audio.md +172 -172
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/calculate-metadata.md +104 -104
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/can-decode.md +75 -75
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/charts.md +58 -58
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/compositions.md +146 -146
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/display-captions.md +126 -126
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/extract-frames.md +229 -229
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/fonts.md +152 -152
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/get-audio-duration.md +58 -58
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/get-video-dimensions.md +68 -68
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/get-video-duration.md +58 -58
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/gifs.md +138 -138
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/images.md +130 -130
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/import-srt-captions.md +67 -67
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/lottie.md +67 -67
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/measuring-dom-nodes.md +34 -34
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/measuring-text.md +143 -143
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/sequencing.md +106 -106
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/tailwind.md +11 -11
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/text-animations.md +20 -20
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/timing.md +179 -179
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/transcribe-captions.md +19 -19
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/transitions.md +122 -122
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/trimming.md +52 -52
- package/seed/marketplaces/ecc/skills/remotion-video-creation/rules/videos.md +171 -171
- package/seed/marketplaces/ecc/skills/repo-scan/SKILL.md +78 -78
- package/seed/marketplaces/ecc/skills/research-ops/SKILL.md +112 -112
- package/seed/marketplaces/ecc/skills/returns-reverse-logistics/SKILL.md +240 -240
- package/seed/marketplaces/ecc/skills/rules-distill/SKILL.md +264 -264
- package/seed/marketplaces/ecc/skills/rules-distill/scripts/scan-rules.sh +58 -58
- package/seed/marketplaces/ecc/skills/rules-distill/scripts/scan-skills.sh +129 -129
- package/seed/marketplaces/ecc/skills/rust-patterns/SKILL.md +499 -499
- package/seed/marketplaces/ecc/skills/rust-testing/SKILL.md +500 -500
- package/seed/marketplaces/ecc/skills/safety-guard/SKILL.md +75 -75
- package/seed/marketplaces/ecc/skills/santa-method/SKILL.md +306 -306
- package/seed/marketplaces/ecc/skills/scientific-db-pubmed-database/SKILL.md +175 -175
- package/seed/marketplaces/ecc/skills/scientific-db-uspto-database/SKILL.md +177 -177
- package/seed/marketplaces/ecc/skills/scientific-pkg-gget/SKILL.md +166 -166
- package/seed/marketplaces/ecc/skills/scientific-thinking-literature-review/SKILL.md +192 -192
- package/seed/marketplaces/ecc/skills/scientific-thinking-scholar-evaluation/SKILL.md +160 -160
- package/seed/marketplaces/ecc/skills/search-first/SKILL.md +182 -182
- package/seed/marketplaces/ecc/skills/security-bounty-hunter/SKILL.md +99 -99
- package/seed/marketplaces/ecc/skills/security-review/SKILL.md +503 -503
- package/seed/marketplaces/ecc/skills/security-review/cloud-infrastructure-security.md +361 -361
- package/seed/marketplaces/ecc/skills/security-scan/SKILL.md +165 -165
- package/seed/marketplaces/ecc/skills/seo/SKILL.md +154 -154
- package/seed/marketplaces/ecc/skills/skill-comply/SKILL.md +58 -58
- package/seed/marketplaces/ecc/skills/skill-comply/fixtures/compliant_trace.jsonl +5 -5
- package/seed/marketplaces/ecc/skills/skill-comply/fixtures/noncompliant_trace.jsonl +3 -3
- package/seed/marketplaces/ecc/skills/skill-comply/fixtures/tdd_spec.yaml +44 -44
- package/seed/marketplaces/ecc/skills/skill-comply/prompts/classifier.md +24 -24
- package/seed/marketplaces/ecc/skills/skill-comply/prompts/scenario_generator.md +62 -62
- package/seed/marketplaces/ecc/skills/skill-comply/prompts/spec_generator.md +42 -42
- package/seed/marketplaces/ecc/skills/skill-comply/pyproject.toml +15 -15
- package/seed/marketplaces/ecc/skills/skill-comply/scripts/classifier.py +85 -85
- package/seed/marketplaces/ecc/skills/skill-comply/scripts/grader.py +124 -124
- package/seed/marketplaces/ecc/skills/skill-comply/scripts/parser.py +107 -107
- package/seed/marketplaces/ecc/skills/skill-comply/scripts/report.py +170 -170
- package/seed/marketplaces/ecc/skills/skill-comply/scripts/run.py +127 -127
- package/seed/marketplaces/ecc/skills/skill-comply/scripts/runner.py +186 -186
- package/seed/marketplaces/ecc/skills/skill-comply/scripts/scenario_generator.py +70 -70
- package/seed/marketplaces/ecc/skills/skill-comply/scripts/spec_generator.py +72 -72
- package/seed/marketplaces/ecc/skills/skill-comply/scripts/utils.py +13 -13
- package/seed/marketplaces/ecc/skills/skill-comply/tests/test_grader.py +197 -197
- package/seed/marketplaces/ecc/skills/skill-comply/tests/test_parser.py +90 -90
- package/seed/marketplaces/ecc/skills/skill-comply/tests/test_runner.py +172 -172
- package/seed/marketplaces/ecc/skills/skill-scout/SKILL.md +140 -140
- package/seed/marketplaces/ecc/skills/skill-stocktake/SKILL.md +194 -194
- package/seed/marketplaces/ecc/skills/skill-stocktake/scripts/quick-diff.sh +87 -87
- package/seed/marketplaces/ecc/skills/skill-stocktake/scripts/save-results.sh +56 -56
- package/seed/marketplaces/ecc/skills/skill-stocktake/scripts/scan.sh +170 -170
- package/seed/marketplaces/ecc/skills/social-graph-ranker/SKILL.md +154 -154
- package/seed/marketplaces/ecc/skills/social-publisher/SKILL.md +115 -115
- package/seed/marketplaces/ecc/skills/springboot-patterns/SKILL.md +314 -314
- package/seed/marketplaces/ecc/skills/springboot-security/SKILL.md +272 -272
- package/seed/marketplaces/ecc/skills/springboot-tdd/SKILL.md +158 -158
- package/seed/marketplaces/ecc/skills/springboot-verification/SKILL.md +231 -231
- package/seed/marketplaces/ecc/skills/strategic-compact/SKILL.md +131 -131
- package/seed/marketplaces/ecc/skills/swift-actor-persistence/SKILL.md +143 -143
- package/seed/marketplaces/ecc/skills/swift-concurrency-6-2/SKILL.md +216 -216
- package/seed/marketplaces/ecc/skills/swift-protocol-di-testing/SKILL.md +190 -190
- package/seed/marketplaces/ecc/skills/swiftui-patterns/SKILL.md +259 -259
- package/seed/marketplaces/ecc/skills/tdd-workflow/SKILL.md +463 -463
- package/seed/marketplaces/ecc/skills/team-builder/SKILL.md +168 -168
- package/seed/marketplaces/ecc/skills/terminal-ops/SKILL.md +109 -109
- package/seed/marketplaces/ecc/skills/tinystruct-patterns/SKILL.md +203 -203
- package/seed/marketplaces/ecc/skills/tinystruct-patterns/references/architecture.md +90 -90
- package/seed/marketplaces/ecc/skills/tinystruct-patterns/references/data-handling.md +60 -60
- package/seed/marketplaces/ecc/skills/tinystruct-patterns/references/database.md +99 -99
- package/seed/marketplaces/ecc/skills/tinystruct-patterns/references/routing.md +64 -64
- package/seed/marketplaces/ecc/skills/tinystruct-patterns/references/system-usage.md +97 -97
- package/seed/marketplaces/ecc/skills/tinystruct-patterns/references/testing.md +72 -72
- package/seed/marketplaces/ecc/skills/token-budget-advisor/SKILL.md +133 -133
- package/seed/marketplaces/ecc/skills/ui-demo/SKILL.md +465 -465
- package/seed/marketplaces/ecc/skills/ui-to-vue/SKILL.md +134 -134
- package/seed/marketplaces/ecc/skills/uncloud/SKILL.md +343 -343
- package/seed/marketplaces/ecc/skills/unified-notifications-ops/SKILL.md +187 -187
- package/seed/marketplaces/ecc/skills/verification-loop/SKILL.md +126 -126
- package/seed/marketplaces/ecc/skills/video-editing/SKILL.md +310 -310
- package/seed/marketplaces/ecc/skills/videodb/SKILL.md +374 -374
- package/seed/marketplaces/ecc/skills/videodb/reference/api-reference.md +550 -550
- package/seed/marketplaces/ecc/skills/videodb/reference/capture-reference.md +407 -407
- package/seed/marketplaces/ecc/skills/videodb/reference/capture.md +101 -101
- package/seed/marketplaces/ecc/skills/videodb/reference/editor.md +443 -443
- package/seed/marketplaces/ecc/skills/videodb/reference/generative.md +331 -331
- package/seed/marketplaces/ecc/skills/videodb/reference/rtstream-reference.md +564 -564
- package/seed/marketplaces/ecc/skills/videodb/reference/rtstream.md +65 -65
- package/seed/marketplaces/ecc/skills/videodb/reference/search.md +230 -230
- package/seed/marketplaces/ecc/skills/videodb/reference/streaming.md +406 -406
- package/seed/marketplaces/ecc/skills/videodb/reference/use-cases.md +118 -118
- package/seed/marketplaces/ecc/skills/videodb/scripts/ws_listener.py +282 -282
- package/seed/marketplaces/ecc/skills/visa-doc-translate/README.md +86 -86
- package/seed/marketplaces/ecc/skills/visa-doc-translate/SKILL.md +117 -117
- package/seed/marketplaces/ecc/skills/vite-patterns/SKILL.md +449 -449
- package/seed/marketplaces/ecc/skills/windows-desktop-e2e/SKILL.md +887 -887
- package/seed/marketplaces/ecc/skills/workspace-surface-audit/SKILL.md +125 -125
- package/seed/marketplaces/ecc/skills/x-api/SKILL.md +234 -234
- package/seed/marketplaces/ecc/.claude/commands/add-language-rules.md +0 -39
- package/seed/marketplaces/ecc/.claude/commands/database-migration.md +0 -36
- package/seed/marketplaces/ecc/.claude/commands/feature-development.md +0 -38
- package/seed/marketplaces/ecc/.claude/ecc-tools.json +0 -334
- package/seed/marketplaces/ecc/.claude/enterprise/controls.md +0 -15
- package/seed/marketplaces/ecc/.claude/homunculus/instincts/inherited/everything-claude-code-instincts.yaml +0 -162
- package/seed/marketplaces/ecc/.claude/identity.json +0 -14
- package/seed/marketplaces/ecc/.claude/package-manager.json +0 -4
- package/seed/marketplaces/ecc/.claude/research/everything-claude-code-research-playbook.md +0 -21
- package/seed/marketplaces/ecc/.claude/rules/everything-claude-code-guardrails.md +0 -43
- package/seed/marketplaces/ecc/.claude/rules/node.md +0 -56
- package/seed/marketplaces/ecc/.claude/skills/everything-claude-code/SKILL.md +0 -442
- package/seed/marketplaces/ecc/.claude/team/everything-claude-code-team-config.json +0 -15
- package/seed/marketplaces/ecc/.vscode/settings.json +0 -17
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
# tinystruct Data Handling (JSON)
|
|
2
|
-
|
|
3
|
-
## When to Use
|
|
4
|
-
|
|
5
|
-
Prefer `org.tinystruct.data.component.Builder` and `Builders` for lightweight, zero-dependency JSON. Use `Builder` for JSON objects (`{}`), `Builders` for JSON arrays (`[]`). **Always use `Builders` instead of `List<Builder>`** to avoid generic type erasure issues.
|
|
6
|
-
|
|
7
|
-
## How It Works
|
|
8
|
-
|
|
9
|
-
`Builder` provides a key-value interface for creating and reading JSON objects. `Builders` provides an indexed list for JSON arrays. Both integrate directly with `AbstractApplication` result handling.
|
|
10
|
-
|
|
11
|
-
### Why Builder/Builders?
|
|
12
|
-
- **Zero External Dependencies** — lean and fast
|
|
13
|
-
- **Native Integration** — works with framework result handling
|
|
14
|
-
- **Type Safety** — `Builders` serializes properly to `[]`; `List<Builder>` can cause casting issues
|
|
15
|
-
|
|
16
|
-
## Examples
|
|
17
|
-
|
|
18
|
-
### Serialize a Single Object
|
|
19
|
-
```java
|
|
20
|
-
import org.tinystruct.data.component.Builder;
|
|
21
|
-
|
|
22
|
-
Builder response = new Builder();
|
|
23
|
-
response.put("status", "success");
|
|
24
|
-
response.put("count", 42);
|
|
25
|
-
return response.toString(); // {"status":"success","count":42}
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
### Serialize a List using Builders
|
|
29
|
-
```java
|
|
30
|
-
import org.tinystruct.data.component.Builder;
|
|
31
|
-
import org.tinystruct.data.component.Builders;
|
|
32
|
-
|
|
33
|
-
Builders dataList = new Builders();
|
|
34
|
-
for (MyModel item : myCollection) {
|
|
35
|
-
Builder b = new Builder();
|
|
36
|
-
b.put("id", item.getId());
|
|
37
|
-
b.put("name", item.getName());
|
|
38
|
-
dataList.add(b);
|
|
39
|
-
}
|
|
40
|
-
Builder response = new Builder();
|
|
41
|
-
response.put("data", dataList);
|
|
42
|
-
return response.toString(); // {"data":[{"id":1,"name":"X"}]}
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
### Parse a JSON Object
|
|
46
|
-
```java
|
|
47
|
-
Builder parsed = new Builder();
|
|
48
|
-
parsed.parse(jsonString);
|
|
49
|
-
String status = parsed.get("status").toString();
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### Parse a JSON Array
|
|
53
|
-
```java
|
|
54
|
-
Builders parsedArray = new Builders();
|
|
55
|
-
parsedArray.parse(jsonArrayString);
|
|
56
|
-
for (int i = 0; i < parsedArray.size(); i++) {
|
|
57
|
-
Builder item = parsedArray.get(i);
|
|
58
|
-
System.out.println(item.get("name"));
|
|
59
|
-
}
|
|
60
|
-
```
|
|
1
|
+
# tinystruct Data Handling (JSON)
|
|
2
|
+
|
|
3
|
+
## When to Use
|
|
4
|
+
|
|
5
|
+
Prefer `org.tinystruct.data.component.Builder` and `Builders` for lightweight, zero-dependency JSON. Use `Builder` for JSON objects (`{}`), `Builders` for JSON arrays (`[]`). **Always use `Builders` instead of `List<Builder>`** to avoid generic type erasure issues.
|
|
6
|
+
|
|
7
|
+
## How It Works
|
|
8
|
+
|
|
9
|
+
`Builder` provides a key-value interface for creating and reading JSON objects. `Builders` provides an indexed list for JSON arrays. Both integrate directly with `AbstractApplication` result handling.
|
|
10
|
+
|
|
11
|
+
### Why Builder/Builders?
|
|
12
|
+
- **Zero External Dependencies** — lean and fast
|
|
13
|
+
- **Native Integration** — works with framework result handling
|
|
14
|
+
- **Type Safety** — `Builders` serializes properly to `[]`; `List<Builder>` can cause casting issues
|
|
15
|
+
|
|
16
|
+
## Examples
|
|
17
|
+
|
|
18
|
+
### Serialize a Single Object
|
|
19
|
+
```java
|
|
20
|
+
import org.tinystruct.data.component.Builder;
|
|
21
|
+
|
|
22
|
+
Builder response = new Builder();
|
|
23
|
+
response.put("status", "success");
|
|
24
|
+
response.put("count", 42);
|
|
25
|
+
return response.toString(); // {"status":"success","count":42}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Serialize a List using Builders
|
|
29
|
+
```java
|
|
30
|
+
import org.tinystruct.data.component.Builder;
|
|
31
|
+
import org.tinystruct.data.component.Builders;
|
|
32
|
+
|
|
33
|
+
Builders dataList = new Builders();
|
|
34
|
+
for (MyModel item : myCollection) {
|
|
35
|
+
Builder b = new Builder();
|
|
36
|
+
b.put("id", item.getId());
|
|
37
|
+
b.put("name", item.getName());
|
|
38
|
+
dataList.add(b);
|
|
39
|
+
}
|
|
40
|
+
Builder response = new Builder();
|
|
41
|
+
response.put("data", dataList);
|
|
42
|
+
return response.toString(); // {"data":[{"id":1,"name":"X"}]}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Parse a JSON Object
|
|
46
|
+
```java
|
|
47
|
+
Builder parsed = new Builder();
|
|
48
|
+
parsed.parse(jsonString);
|
|
49
|
+
String status = parsed.get("status").toString();
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Parse a JSON Array
|
|
53
|
+
```java
|
|
54
|
+
Builders parsedArray = new Builders();
|
|
55
|
+
parsedArray.parse(jsonArrayString);
|
|
56
|
+
for (int i = 0; i < parsedArray.size(); i++) {
|
|
57
|
+
Builder item = parsedArray.get(i);
|
|
58
|
+
System.out.println(item.get("name"));
|
|
59
|
+
}
|
|
60
|
+
```
|
|
@@ -1,99 +1,99 @@
|
|
|
1
|
-
# tinystruct Database Persistence
|
|
2
|
-
|
|
3
|
-
## When to Use
|
|
4
|
-
|
|
5
|
-
Use the built-in ORM-like data layer for database operations. It provides a lightweight alternative to JPA/Hibernate using POJOs extending `AbstractData` and XML mapping files.
|
|
6
|
-
|
|
7
|
-
## How It Works
|
|
8
|
-
|
|
9
|
-
### Architecture
|
|
10
|
-
|
|
11
|
-
Each table is represented by:
|
|
12
|
-
1. **Java POJO**: Extends `AbstractData`, provides getters/setters and `setData(Row)`.
|
|
13
|
-
2. **Mapping XML**: `ClassName.map.xml` in resources, binding Java fields to DB columns.
|
|
14
|
-
|
|
15
|
-
#### Key Base Class: `AbstractData`
|
|
16
|
-
Provides CRUD methods:
|
|
17
|
-
- `append()` / `appendAndGetId()`
|
|
18
|
-
- `update()`
|
|
19
|
-
- `delete()`
|
|
20
|
-
- `findAll()` / `findOneById()` / `findOneByKey(key, value)`
|
|
21
|
-
- `findWith(where, params)`
|
|
22
|
-
- `find(SQL, params)`
|
|
23
|
-
|
|
24
|
-
### POJO Generation (CLI)
|
|
25
|
-
|
|
26
|
-
Introspect a live database table to produce the POJO and mapping file.
|
|
27
|
-
|
|
28
|
-
#### Configuration
|
|
29
|
-
`application.properties`:
|
|
30
|
-
```properties
|
|
31
|
-
driver=com.mysql.cj.jdbc.Driver
|
|
32
|
-
database.url=jdbc:mysql://localhost:3306/mydb
|
|
33
|
-
database.user=root
|
|
34
|
-
database.password=secret
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
#### Command
|
|
38
|
-
```bash
|
|
39
|
-
# Interactive mode
|
|
40
|
-
bin/dispatcher generate
|
|
41
|
-
|
|
42
|
-
# Specify table
|
|
43
|
-
bin/dispatcher generate --tables users
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
## Examples
|
|
47
|
-
|
|
48
|
-
### CRUD Operations
|
|
49
|
-
```java
|
|
50
|
-
// CREATE
|
|
51
|
-
User user = new User();
|
|
52
|
-
user.setUsername("james");
|
|
53
|
-
user.append();
|
|
54
|
-
|
|
55
|
-
// READ
|
|
56
|
-
User user = new User();
|
|
57
|
-
user.setId(42);
|
|
58
|
-
user.findOneById();
|
|
59
|
-
|
|
60
|
-
// UPDATE
|
|
61
|
-
user.setEmail("new@example.com");
|
|
62
|
-
user.update();
|
|
63
|
-
|
|
64
|
-
// DELETE
|
|
65
|
-
user.delete();
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### Querying with Conditions
|
|
69
|
-
```java
|
|
70
|
-
User user = new User();
|
|
71
|
-
Table results = user.findWith("username LIKE ?", new Object[]{"%jam%"});
|
|
72
|
-
|
|
73
|
-
// Fluent Condition Builder
|
|
74
|
-
Condition condition = new Condition();
|
|
75
|
-
condition.setRequestFields("id,username");
|
|
76
|
-
Table filtered = user.find(
|
|
77
|
-
condition.select("`users`").and("email LIKE ?").orderBy("id DESC"),
|
|
78
|
-
new Object[]{"%@example.com"}
|
|
79
|
-
);
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### Mapping XML Structure
|
|
83
|
-
`User.map.xml`:
|
|
84
|
-
```xml
|
|
85
|
-
<mapping>
|
|
86
|
-
<class name="User" table="users">
|
|
87
|
-
<id name="Id" column="id" increment="true" generate="false" length="11" type="int"/>
|
|
88
|
-
<property name="username" column="username" length="50" type="varchar"/>
|
|
89
|
-
<property name="email" column="email" length="100" type="varchar"/>
|
|
90
|
-
</class>
|
|
91
|
-
</mapping>
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
## Important Rules
|
|
95
|
-
|
|
96
|
-
1. **File Placement**: The mapping XML **must** mirror the POJO's package path under `src/main/resources/`.
|
|
97
|
-
2. **Naming**: Table names are singularized for class names (`users` → `User`). Underscored columns become camelCase fields (`created_at` → `createdAt`).
|
|
98
|
-
3. **Setters**: Use `setFieldAsXxx` methods (e.g., `setFieldAsString`) in setters to sync state with the internal field map.
|
|
99
|
-
4. **Id Field**: The primary key field in Java is always named `Id` (inherited from `AbstractData`).
|
|
1
|
+
# tinystruct Database Persistence
|
|
2
|
+
|
|
3
|
+
## When to Use
|
|
4
|
+
|
|
5
|
+
Use the built-in ORM-like data layer for database operations. It provides a lightweight alternative to JPA/Hibernate using POJOs extending `AbstractData` and XML mapping files.
|
|
6
|
+
|
|
7
|
+
## How It Works
|
|
8
|
+
|
|
9
|
+
### Architecture
|
|
10
|
+
|
|
11
|
+
Each table is represented by:
|
|
12
|
+
1. **Java POJO**: Extends `AbstractData`, provides getters/setters and `setData(Row)`.
|
|
13
|
+
2. **Mapping XML**: `ClassName.map.xml` in resources, binding Java fields to DB columns.
|
|
14
|
+
|
|
15
|
+
#### Key Base Class: `AbstractData`
|
|
16
|
+
Provides CRUD methods:
|
|
17
|
+
- `append()` / `appendAndGetId()`
|
|
18
|
+
- `update()`
|
|
19
|
+
- `delete()`
|
|
20
|
+
- `findAll()` / `findOneById()` / `findOneByKey(key, value)`
|
|
21
|
+
- `findWith(where, params)`
|
|
22
|
+
- `find(SQL, params)`
|
|
23
|
+
|
|
24
|
+
### POJO Generation (CLI)
|
|
25
|
+
|
|
26
|
+
Introspect a live database table to produce the POJO and mapping file.
|
|
27
|
+
|
|
28
|
+
#### Configuration
|
|
29
|
+
`application.properties`:
|
|
30
|
+
```properties
|
|
31
|
+
driver=com.mysql.cj.jdbc.Driver
|
|
32
|
+
database.url=jdbc:mysql://localhost:3306/mydb
|
|
33
|
+
database.user=root
|
|
34
|
+
database.password=secret
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
#### Command
|
|
38
|
+
```bash
|
|
39
|
+
# Interactive mode
|
|
40
|
+
bin/dispatcher generate
|
|
41
|
+
|
|
42
|
+
# Specify table
|
|
43
|
+
bin/dispatcher generate --tables users
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Examples
|
|
47
|
+
|
|
48
|
+
### CRUD Operations
|
|
49
|
+
```java
|
|
50
|
+
// CREATE
|
|
51
|
+
User user = new User();
|
|
52
|
+
user.setUsername("james");
|
|
53
|
+
user.append();
|
|
54
|
+
|
|
55
|
+
// READ
|
|
56
|
+
User user = new User();
|
|
57
|
+
user.setId(42);
|
|
58
|
+
user.findOneById();
|
|
59
|
+
|
|
60
|
+
// UPDATE
|
|
61
|
+
user.setEmail("new@example.com");
|
|
62
|
+
user.update();
|
|
63
|
+
|
|
64
|
+
// DELETE
|
|
65
|
+
user.delete();
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Querying with Conditions
|
|
69
|
+
```java
|
|
70
|
+
User user = new User();
|
|
71
|
+
Table results = user.findWith("username LIKE ?", new Object[]{"%jam%"});
|
|
72
|
+
|
|
73
|
+
// Fluent Condition Builder
|
|
74
|
+
Condition condition = new Condition();
|
|
75
|
+
condition.setRequestFields("id,username");
|
|
76
|
+
Table filtered = user.find(
|
|
77
|
+
condition.select("`users`").and("email LIKE ?").orderBy("id DESC"),
|
|
78
|
+
new Object[]{"%@example.com"}
|
|
79
|
+
);
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Mapping XML Structure
|
|
83
|
+
`User.map.xml`:
|
|
84
|
+
```xml
|
|
85
|
+
<mapping>
|
|
86
|
+
<class name="User" table="users">
|
|
87
|
+
<id name="Id" column="id" increment="true" generate="false" length="11" type="int"/>
|
|
88
|
+
<property name="username" column="username" length="50" type="varchar"/>
|
|
89
|
+
<property name="email" column="email" length="100" type="varchar"/>
|
|
90
|
+
</class>
|
|
91
|
+
</mapping>
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Important Rules
|
|
95
|
+
|
|
96
|
+
1. **File Placement**: The mapping XML **must** mirror the POJO's package path under `src/main/resources/`.
|
|
97
|
+
2. **Naming**: Table names are singularized for class names (`users` → `User`). Underscored columns become camelCase fields (`created_at` → `createdAt`).
|
|
98
|
+
3. **Setters**: Use `setFieldAsXxx` methods (e.g., `setFieldAsString`) in setters to sync state with the internal field map.
|
|
99
|
+
4. **Id Field**: The primary key field in Java is always named `Id` (inherited from `AbstractData`).
|
|
@@ -1,64 +1,64 @@
|
|
|
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, or restrict execution to specific HTTP methods 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 to corresponding regex segments.
|
|
10
|
-
|
|
11
|
-
### Regex Generation Rules
|
|
12
|
-
- `getUser(int id)` → pattern: `^/?user/(-?\d+)$`
|
|
13
|
-
- `search(String query)` → pattern: `^/?search/([^/]+)$`
|
|
14
|
-
|
|
15
|
-
Supported parameter types: `String`, `int/Integer`, `long/Long`, `float/Float`, `double/Double`, `boolean/Boolean`, `char/Character`, `short/Short`, `byte/Byte`, `Date` (parsed as `yyyy-MM-dd HH:mm:ss`).
|
|
16
|
-
|
|
17
|
-
### Mode Values
|
|
18
|
-
|
|
19
|
-
| Mode | When it triggers |
|
|
20
|
-
|---|---|
|
|
21
|
-
| `DEFAULT` | Both CLI and HTTP (GET, POST, etc.) |
|
|
22
|
-
| `CLI` | CLI dispatcher only |
|
|
23
|
-
| `HTTP_GET` | HTTP GET only |
|
|
24
|
-
| `HTTP_POST` | HTTP POST only |
|
|
25
|
-
| `HTTP_PUT` | HTTP PUT only |
|
|
26
|
-
| `HTTP_DELETE` | HTTP DELETE only |
|
|
27
|
-
| `HTTP_PATCH` | HTTP PATCH only |
|
|
28
|
-
|
|
29
|
-
> **Note:** You can map HTTP method names to `Mode` using `Action.Mode.fromName(String methodName)`. Unknown or null values return `Mode.DEFAULT`.
|
|
30
|
-
|
|
31
|
-
## Examples
|
|
32
|
-
|
|
33
|
-
### Basic Action Declaration
|
|
34
|
-
```java
|
|
35
|
-
@Action(
|
|
36
|
-
value = "path/subpath", // required: URI segment or CLI command
|
|
37
|
-
description = "What it does", // shown in --help output
|
|
38
|
-
mode = Mode.DEFAULT, // default: Mode.DEFAULT
|
|
39
|
-
example = "bin/dispatcher path/subpath/42"
|
|
40
|
-
)
|
|
41
|
-
public String myAction(int id) { ... }
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
### Parameterized Paths
|
|
45
|
-
```java
|
|
46
|
-
@Action("user/{id}")
|
|
47
|
-
public String getUser(int id) { ... }
|
|
48
|
-
// → CLI: bin/dispatcher user/42
|
|
49
|
-
// → HTTP: /?q=user/42
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### Dependency Injection
|
|
53
|
-
`ActionRegistry` automatically injects `Request` and/or `Response` from `Context` if they are parameters:
|
|
54
|
-
|
|
55
|
-
```java
|
|
56
|
-
@Action(value = "upload", mode = Mode.HTTP_POST)
|
|
57
|
-
public String upload(Request<?, ?> req, Response<?, ?> res) throws ApplicationException {
|
|
58
|
-
// Access raw request/response if needed
|
|
59
|
-
return "ok";
|
|
60
|
-
}
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
### Path Matching Priority
|
|
64
|
-
If two methods share the same path, the framework uses the first match in the `ActionRegistry`. Use explicit `Mode` values to disambiguate (e.g., separating a GET for a form and a POST for submission).
|
|
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, or restrict execution to specific HTTP methods 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 to corresponding regex segments.
|
|
10
|
+
|
|
11
|
+
### Regex Generation Rules
|
|
12
|
+
- `getUser(int id)` → pattern: `^/?user/(-?\d+)$`
|
|
13
|
+
- `search(String query)` → pattern: `^/?search/([^/]+)$`
|
|
14
|
+
|
|
15
|
+
Supported parameter types: `String`, `int/Integer`, `long/Long`, `float/Float`, `double/Double`, `boolean/Boolean`, `char/Character`, `short/Short`, `byte/Byte`, `Date` (parsed as `yyyy-MM-dd HH:mm:ss`).
|
|
16
|
+
|
|
17
|
+
### Mode Values
|
|
18
|
+
|
|
19
|
+
| Mode | When it triggers |
|
|
20
|
+
|---|---|
|
|
21
|
+
| `DEFAULT` | Both CLI and HTTP (GET, POST, etc.) |
|
|
22
|
+
| `CLI` | CLI dispatcher only |
|
|
23
|
+
| `HTTP_GET` | HTTP GET only |
|
|
24
|
+
| `HTTP_POST` | HTTP POST only |
|
|
25
|
+
| `HTTP_PUT` | HTTP PUT only |
|
|
26
|
+
| `HTTP_DELETE` | HTTP DELETE only |
|
|
27
|
+
| `HTTP_PATCH` | HTTP PATCH only |
|
|
28
|
+
|
|
29
|
+
> **Note:** You can map HTTP method names to `Mode` using `Action.Mode.fromName(String methodName)`. Unknown or null values return `Mode.DEFAULT`.
|
|
30
|
+
|
|
31
|
+
## Examples
|
|
32
|
+
|
|
33
|
+
### Basic Action Declaration
|
|
34
|
+
```java
|
|
35
|
+
@Action(
|
|
36
|
+
value = "path/subpath", // required: URI segment or CLI command
|
|
37
|
+
description = "What it does", // shown in --help output
|
|
38
|
+
mode = Mode.DEFAULT, // default: Mode.DEFAULT
|
|
39
|
+
example = "bin/dispatcher path/subpath/42"
|
|
40
|
+
)
|
|
41
|
+
public String myAction(int id) { ... }
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Parameterized Paths
|
|
45
|
+
```java
|
|
46
|
+
@Action("user/{id}")
|
|
47
|
+
public String getUser(int id) { ... }
|
|
48
|
+
// → CLI: bin/dispatcher user/42
|
|
49
|
+
// → HTTP: /?q=user/42
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Dependency Injection
|
|
53
|
+
`ActionRegistry` automatically injects `Request` and/or `Response` from `Context` if they are parameters:
|
|
54
|
+
|
|
55
|
+
```java
|
|
56
|
+
@Action(value = "upload", mode = Mode.HTTP_POST)
|
|
57
|
+
public String upload(Request<?, ?> req, Response<?, ?> res) throws ApplicationException {
|
|
58
|
+
// Access raw request/response if needed
|
|
59
|
+
return "ok";
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Path Matching Priority
|
|
64
|
+
If two methods share the same path, the framework uses the first match in the `ActionRegistry`. Use explicit `Mode` values to disambiguate (e.g., separating a GET for a form and a POST for submission).
|
|
@@ -1,97 +1,97 @@
|
|
|
1
|
-
# tinystruct System and Usage Reference
|
|
2
|
-
|
|
3
|
-
## When to Use
|
|
4
|
-
|
|
5
|
-
Use these patterns to handle request state, manage web sessions, implement Server-Sent Events (SSE), handle file uploads, or perform outbound HTTP networking.
|
|
6
|
-
|
|
7
|
-
## How It Works
|
|
8
|
-
|
|
9
|
-
### Context and CLI Arguments
|
|
10
|
-
`Context` is the primary data store for request-specific state. CLI flags passed as `--key value` are stored in `Context` as `"--key"`.
|
|
11
|
-
|
|
12
|
-
### Session Management
|
|
13
|
-
Pluggable architecture. Default is `MemorySessionRepository`. Configure Redis in `application.properties`:
|
|
14
|
-
```properties
|
|
15
|
-
default.session.repository=org.tinystruct.http.RedisSessionRepository
|
|
16
|
-
redis.host=127.0.0.1
|
|
17
|
-
redis.port=6379
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
### Server-Sent Events (SSE)
|
|
21
|
-
Built-in support for real-time push. The `HttpServer` automatically handles the SSE lifecycle when it detects the `Accept: text/event-stream` header. Connections are tracked by session ID in `SSEPushManager`.
|
|
22
|
-
|
|
23
|
-
### Outbound Networking
|
|
24
|
-
Use `URLRequest` and `HTTPHandler` for making HTTP requests to external services.
|
|
25
|
-
|
|
26
|
-
## Examples
|
|
27
|
-
|
|
28
|
-
### Context and CLI Arguments
|
|
29
|
-
```java
|
|
30
|
-
@Action("echo")
|
|
31
|
-
public String echo() {
|
|
32
|
-
// CLI: bin/dispatcher echo --words "Hello World"
|
|
33
|
-
Object words = getContext().getAttribute("--words");
|
|
34
|
-
if (words != null) return words.toString();
|
|
35
|
-
return "No words provided";
|
|
36
|
-
}
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
### Session Management
|
|
40
|
-
```java
|
|
41
|
-
@Action(value = "login", mode = Mode.HTTP_POST)
|
|
42
|
-
public String login(Request<?, ?> request) {
|
|
43
|
-
request.getSession().setAttribute("userId", "42");
|
|
44
|
-
return "Logged in";
|
|
45
|
-
}
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### Server-Sent Events (SSE)
|
|
49
|
-
```java
|
|
50
|
-
@Action("sse/connect")
|
|
51
|
-
public String connect() {
|
|
52
|
-
return "{\"type\":\"connect\",\"message\":\"Connected\"}";
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// In another method or event handler:
|
|
56
|
-
String sessionId = getContext().getId();
|
|
57
|
-
SSEPushManager.getInstance().push(sessionId, new Builder().put("msg", "hello"));
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
### File Uploads
|
|
61
|
-
```java
|
|
62
|
-
import org.tinystruct.data.FileEntity;
|
|
63
|
-
|
|
64
|
-
@Action(value = "upload", mode = Mode.HTTP_POST)
|
|
65
|
-
public String upload(Request<?, ?> request) throws ApplicationException {
|
|
66
|
-
List<FileEntity> files = request.getAttachments();
|
|
67
|
-
if (files != null) {
|
|
68
|
-
for (FileEntity file : files) {
|
|
69
|
-
// file.getFilename(), file.getContent()
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
return "Uploaded";
|
|
73
|
-
}
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
### Outbound HTTP
|
|
77
|
-
```java
|
|
78
|
-
import org.tinystruct.net.URLRequest;
|
|
79
|
-
import org.tinystruct.net.handlers.HTTPHandler;
|
|
80
|
-
|
|
81
|
-
URLRequest request = new URLRequest(new URL("https://api.example.com"));
|
|
82
|
-
request.setMethod("POST").setBody("{\"data\":\"val\"}");
|
|
83
|
-
|
|
84
|
-
HTTPHandler handler = new HTTPHandler();
|
|
85
|
-
var response = handler.handleRequest(request);
|
|
86
|
-
if (response.getStatusCode() == 200) {
|
|
87
|
-
String body = response.getBody();
|
|
88
|
-
}
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
### Event System
|
|
92
|
-
Register handlers in `init()` for asynchronous task execution.
|
|
93
|
-
```java
|
|
94
|
-
EventDispatcher.getInstance().registerHandler(MyEvent.class, event -> {
|
|
95
|
-
CompletableFuture.runAsync(() -> doHeavyWork(event.getPayload()));
|
|
96
|
-
});
|
|
97
|
-
```
|
|
1
|
+
# tinystruct System and Usage Reference
|
|
2
|
+
|
|
3
|
+
## When to Use
|
|
4
|
+
|
|
5
|
+
Use these patterns to handle request state, manage web sessions, implement Server-Sent Events (SSE), handle file uploads, or perform outbound HTTP networking.
|
|
6
|
+
|
|
7
|
+
## How It Works
|
|
8
|
+
|
|
9
|
+
### Context and CLI Arguments
|
|
10
|
+
`Context` is the primary data store for request-specific state. CLI flags passed as `--key value` are stored in `Context` as `"--key"`.
|
|
11
|
+
|
|
12
|
+
### Session Management
|
|
13
|
+
Pluggable architecture. Default is `MemorySessionRepository`. Configure Redis in `application.properties`:
|
|
14
|
+
```properties
|
|
15
|
+
default.session.repository=org.tinystruct.http.RedisSessionRepository
|
|
16
|
+
redis.host=127.0.0.1
|
|
17
|
+
redis.port=6379
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### Server-Sent Events (SSE)
|
|
21
|
+
Built-in support for real-time push. The `HttpServer` automatically handles the SSE lifecycle when it detects the `Accept: text/event-stream` header. Connections are tracked by session ID in `SSEPushManager`.
|
|
22
|
+
|
|
23
|
+
### Outbound Networking
|
|
24
|
+
Use `URLRequest` and `HTTPHandler` for making HTTP requests to external services.
|
|
25
|
+
|
|
26
|
+
## Examples
|
|
27
|
+
|
|
28
|
+
### Context and CLI Arguments
|
|
29
|
+
```java
|
|
30
|
+
@Action("echo")
|
|
31
|
+
public String echo() {
|
|
32
|
+
// CLI: bin/dispatcher echo --words "Hello World"
|
|
33
|
+
Object words = getContext().getAttribute("--words");
|
|
34
|
+
if (words != null) return words.toString();
|
|
35
|
+
return "No words provided";
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Session Management
|
|
40
|
+
```java
|
|
41
|
+
@Action(value = "login", mode = Mode.HTTP_POST)
|
|
42
|
+
public String login(Request<?, ?> request) {
|
|
43
|
+
request.getSession().setAttribute("userId", "42");
|
|
44
|
+
return "Logged in";
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Server-Sent Events (SSE)
|
|
49
|
+
```java
|
|
50
|
+
@Action("sse/connect")
|
|
51
|
+
public String connect() {
|
|
52
|
+
return "{\"type\":\"connect\",\"message\":\"Connected\"}";
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// In another method or event handler:
|
|
56
|
+
String sessionId = getContext().getId();
|
|
57
|
+
SSEPushManager.getInstance().push(sessionId, new Builder().put("msg", "hello"));
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### File Uploads
|
|
61
|
+
```java
|
|
62
|
+
import org.tinystruct.data.FileEntity;
|
|
63
|
+
|
|
64
|
+
@Action(value = "upload", mode = Mode.HTTP_POST)
|
|
65
|
+
public String upload(Request<?, ?> request) throws ApplicationException {
|
|
66
|
+
List<FileEntity> files = request.getAttachments();
|
|
67
|
+
if (files != null) {
|
|
68
|
+
for (FileEntity file : files) {
|
|
69
|
+
// file.getFilename(), file.getContent()
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return "Uploaded";
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Outbound HTTP
|
|
77
|
+
```java
|
|
78
|
+
import org.tinystruct.net.URLRequest;
|
|
79
|
+
import org.tinystruct.net.handlers.HTTPHandler;
|
|
80
|
+
|
|
81
|
+
URLRequest request = new URLRequest(new URL("https://api.example.com"));
|
|
82
|
+
request.setMethod("POST").setBody("{\"data\":\"val\"}");
|
|
83
|
+
|
|
84
|
+
HTTPHandler handler = new HTTPHandler();
|
|
85
|
+
var response = handler.handleRequest(request);
|
|
86
|
+
if (response.getStatusCode() == 200) {
|
|
87
|
+
String body = response.getBody();
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Event System
|
|
92
|
+
Register handlers in `init()` for asynchronous task execution.
|
|
93
|
+
```java
|
|
94
|
+
EventDispatcher.getInstance().registerHandler(MyEvent.class, event -> {
|
|
95
|
+
CompletableFuture.runAsync(() -> doHeavyWork(event.getPayload()));
|
|
96
|
+
});
|
|
97
|
+
```
|