wicked-garden 12.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/archetypes.json +166 -0
- package/.claude-plugin/components.json +75 -0
- package/.claude-plugin/marketplace.json +15 -0
- package/.claude-plugin/plugin.json +174 -0
- package/.claude-plugin/specialist.json +48 -0
- package/.claude-plugin/stack-registry.json +96 -0
- package/AGENTS.md +13 -0
- package/CHANGELOG.md +712 -0
- package/CONTRIBUTING.md +99 -0
- package/ETHOS.md +83 -0
- package/LICENSE +21 -0
- package/README.md +115 -0
- package/WICKED_GARDEN_BUS_EVENTS.md +149 -0
- package/agents/agentic/architect.md +449 -0
- package/agents/agentic/performance-analyst.md +702 -0
- package/agents/agentic/safety-reviewer.md +662 -0
- package/agents/crew/implementer.md +163 -0
- package/agents/crew/researcher.md +94 -0
- package/agents/crew/reviewer.md +184 -0
- package/agents/data/data-engineer.md +227 -0
- package/agents/engineering/api-documentarian.md +440 -0
- package/agents/engineering/migration-engineer.md +301 -0
- package/agents/engineering/solution-architect.md +208 -0
- package/agents/jam/brainstorm-facilitator.md +297 -0
- package/agents/jam/council.md +322 -0
- package/agents/jam/quick-facilitator.md +85 -0
- package/agents/persona/persona-agent.md +121 -0
- package/agents/platform/compliance-officer.md +266 -0
- package/agents/platform/privacy-expert.md +496 -0
- package/agents/platform/security-engineer.md +287 -0
- package/agents/product/a11y-expert.md +323 -0
- package/agents/product/requirements-analyst.md +238 -0
- package/agents/product/ui-reviewer.md +180 -0
- package/agents/product/ux-designer.md +199 -0
- package/agents/product/value-strategist.md +269 -0
- package/agents/qe/semantic-reviewer.md +78 -0
- package/commands/agentic/audit.md +24 -0
- package/commands/agentic/design.md +24 -0
- package/commands/agentic/frameworks.md +25 -0
- package/commands/agentic/review.md +27 -0
- package/commands/archetype/build.md +12 -0
- package/commands/archetype/decide.md +12 -0
- package/commands/archetype/explore.md +12 -0
- package/commands/archetype/incident.md +12 -0
- package/commands/archetype/migrate.md +12 -0
- package/commands/archetype/modernize.md +12 -0
- package/commands/archetype/review.md +14 -0
- package/commands/archetype/ship.md +12 -0
- package/commands/archetype/specify.md +12 -0
- package/commands/archetype/triage.md +12 -0
- package/commands/compile.md +37 -0
- package/commands/data/analyze.md +18 -0
- package/commands/data/data.md +21 -0
- package/commands/data/ml.md +18 -0
- package/commands/data/ontology.md +22 -0
- package/commands/data/pipeline.md +17 -0
- package/commands/deliberate.md +181 -0
- package/commands/engineering/add-field.md +77 -0
- package/commands/engineering/apply.md +58 -0
- package/commands/engineering/arch.md +26 -0
- package/commands/engineering/debug.md +27 -0
- package/commands/engineering/docs.md +27 -0
- package/commands/engineering/new-generator.md +257 -0
- package/commands/engineering/patch-plan.md +59 -0
- package/commands/engineering/plan.md +29 -0
- package/commands/engineering/remove.md +48 -0
- package/commands/engineering/rename.md +44 -0
- package/commands/engineering/review.md +32 -0
- package/commands/help.md +128 -0
- package/commands/install.md +118 -0
- package/commands/intent.md +54 -0
- package/commands/jam/brainstorm.md +37 -0
- package/commands/jam/council.md +49 -0
- package/commands/jam/quick.md +21 -0
- package/commands/jam/revisit.md +79 -0
- package/commands/persona/as.md +136 -0
- package/commands/persona/define.md +24 -0
- package/commands/persona/list.md +118 -0
- package/commands/platform/actions.md +20 -0
- package/commands/platform/assert.md +18 -0
- package/commands/platform/audit.md +23 -0
- package/commands/platform/compliance.md +20 -0
- package/commands/platform/gh.md +22 -0
- package/commands/platform/health.md +22 -0
- package/commands/platform/incident.md +23 -0
- package/commands/platform/infra.md +24 -0
- package/commands/platform/peer-health.md +103 -0
- package/commands/platform/plugin-health.md +58 -0
- package/commands/platform/security.md +38 -0
- package/commands/platform/toolchain.md +96 -0
- package/commands/platform/traces.md +20 -0
- package/commands/product/a11y.md +19 -0
- package/commands/product/acceptance.md +19 -0
- package/commands/product/align.md +20 -0
- package/commands/product/analyze.md +23 -0
- package/commands/product/elicit.md +19 -0
- package/commands/product/listen.md +24 -0
- package/commands/product/mockup.md +20 -0
- package/commands/product/screenshot.md +19 -0
- package/commands/product/strategy.md +40 -0
- package/commands/product/synthesize.md +23 -0
- package/commands/product/ux-review.md +42 -0
- package/commands/product/ux.md +20 -0
- package/commands/product/visual-direction.md +34 -0
- package/commands/prove.md +47 -0
- package/commands/report-issue.md +243 -0
- package/commands/reset.md +144 -0
- package/commands/search/blast-radius.md +58 -0
- package/commands/search/hotspots.md +55 -0
- package/commands/search/index.md +38 -0
- package/commands/search/lineage.md +47 -0
- package/commands/search/service-map.md +79 -0
- package/commands/setup.md +363 -0
- package/commands/smaht/briefing.md +200 -0
- package/commands/smaht/events-import.md +95 -0
- package/commands/smaht/state.md +19 -0
- package/commands/where-am-i.md +58 -0
- package/docs/README.md +32 -0
- package/docs/adr/0001-code-relationship-graph-engine.md +116 -0
- package/docs/adr/0002-major-cleanup-keep-cut.md +91 -0
- package/docs/adr/0003-peers-gate-required-layers-optin.md +41 -0
- package/docs/adr/0004-code-graph-moves-to-wicked-brain.md +47 -0
- package/docs/brain-chunk-format.md +135 -0
- package/docs/compiler.md +95 -0
- package/docs/daemon-api.md +70 -0
- package/docs/domains.md +197 -0
- package/docs/getting-started.md +208 -0
- package/docs/plans/2026-06-08-wicked-loom-conduct.md +1337 -0
- package/docs/plans/2026-06-08-wicked-loom-contract.md +638 -0
- package/docs/plans/2026-06-08-wicked-loom-cutover.md +1300 -0
- package/docs/plans/2026-06-08-wicked-loom-expand-compose.md +843 -0
- package/docs/plans/2026-06-08-wicked-loom-flow-cutover.md +403 -0
- package/docs/plans/2026-06-10-codegraph-to-brain-phase1a-graph-core.md +838 -0
- package/docs/plans/2026-06-10-codegraph-to-brain-phase1b-injected-edges.md +44 -0
- package/docs/required-peers.md +60 -0
- package/docs/specs/2026-06-08-wicked-loom-extraction.md +225 -0
- package/docs/specs/2026-06-10-codegraph-to-brain-migration.md +168 -0
- package/docs/v11/archetypes.md +231 -0
- package/hooks/hooks.json +275 -0
- package/hooks/scripts/bootstrap.py +1797 -0
- package/hooks/scripts/invoke.py +62 -0
- package/hooks/scripts/notification.py +166 -0
- package/hooks/scripts/permission_request.py +223 -0
- package/hooks/scripts/post_tool.py +1374 -0
- package/hooks/scripts/pre_compact.py +272 -0
- package/hooks/scripts/pre_tool.py +1278 -0
- package/hooks/scripts/prompt_submit.py +1109 -0
- package/hooks/scripts/session_end.py +95 -0
- package/hooks/scripts/stop.py +624 -0
- package/hooks/scripts/subagent_lifecycle.py +464 -0
- package/hooks/scripts/subscribers/on_gate_decided.py +84 -0
- package/hooks/scripts/task_completed.py +322 -0
- package/hooks/scripts/worktree_guard.py +148 -0
- package/hooks/subscriptions/on_gate_decided.json +9 -0
- package/install.mjs +128 -0
- package/package.json +41 -0
- package/pyproject.toml +59 -0
- package/schemas/README.md +32 -0
- package/schemas/assert_contracts.json +37 -0
- package/schemas/health_probe.json +46 -0
- package/schemas/plugin_status.json +37 -0
- package/scripts/_adapters/__init__.py +166 -0
- package/scripts/_adapters/jira_adapter.py +18 -0
- package/scripts/_adapters/linear_adapter.py +18 -0
- package/scripts/_adapters/miro_adapter.py +18 -0
- package/scripts/_adapters/notion_adapter.py +18 -0
- package/scripts/_agents.py +357 -0
- package/scripts/_brain_ingest/__init__.py +2 -0
- package/scripts/_brain_ingest/session_fact_extractor.py +341 -0
- package/scripts/_brain_port.py +163 -0
- package/scripts/_bus.py +1081 -0
- package/scripts/_bus_catalog_gen.py +93 -0
- package/scripts/_bus_consumers.json +46 -0
- package/scripts/_bus_emit.py +43 -0
- package/scripts/_capability_registry.py +334 -0
- package/scripts/_capability_resolver.py +322 -0
- package/scripts/_domain_store.py +559 -0
- package/scripts/_event_log_reader.py +154 -0
- package/scripts/_event_schema.py +305 -0
- package/scripts/_event_store.py +397 -0
- package/scripts/_heavy_cadence.py +324 -0
- package/scripts/_integration_resolver.py +321 -0
- package/scripts/_logger.py +151 -0
- package/scripts/_loom.py +482 -0
- package/scripts/_paths.py +133 -0
- package/scripts/_python.sh +22 -0
- package/scripts/_run.py +137 -0
- package/scripts/_session.py +502 -0
- package/scripts/_validate_registry.py +1042 -0
- package/scripts/_wicked_testing_probe.py +277 -0
- package/scripts/agentic/analyze_agents.py +391 -0
- package/scripts/agentic/detect_framework.py +420 -0
- package/scripts/agentic/issue_taxonomy.py +357 -0
- package/scripts/agentic/pattern_scorer.py +434 -0
- package/scripts/classify/persist.py +169 -0
- package/scripts/compiler/compile.py +552 -0
- package/scripts/compiler/phase0/VERDICT.md +60 -0
- package/scripts/compiler/phase0/detect.py +292 -0
- package/scripts/compiler/phase0/emit.py +228 -0
- package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.bindings.json +30 -0
- package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.lint-output.txt +17 -0
- package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/.wg/evidence/failing-tests.txt +4 -0
- package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/.wg/evidence/honest-tests.txt +2 -0
- package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/fab-fail.build.md +8 -0
- package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/fab-missing.build.md +8 -0
- package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/honest.build.md +8 -0
- package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/wg_check_claims.py +174 -0
- package/scripts/compiler/phase0/evidence/command_iq.bindings.json +45 -0
- package/scripts/compiler/phase0/evidence/command_iq.lint-output.txt +17 -0
- package/scripts/compiler/phase0/evidence/command_iq.stage/.projects/evidence-domain/phase-1-clarify/evidence/failing-tests.txt +4 -0
- package/scripts/compiler/phase0/evidence/command_iq.stage/.projects/evidence-domain/phase-1-clarify/evidence/honest-tests.txt +3 -0
- package/scripts/compiler/phase0/evidence/command_iq.stage/fab-fail.build.md +8 -0
- package/scripts/compiler/phase0/evidence/command_iq.stage/fab-missing.build.md +8 -0
- package/scripts/compiler/phase0/evidence/command_iq.stage/honest.build.md +8 -0
- package/scripts/compiler/phase0/evidence/command_iq.stage/wg_check_claims.py +174 -0
- package/scripts/compiler/phase0/evidence/memos.bindings.json +28 -0
- package/scripts/compiler/phase0/evidence/memos.lint-output.txt +17 -0
- package/scripts/compiler/phase0/evidence/memos.stage/.wg/evidence/failing-tests.txt +4 -0
- package/scripts/compiler/phase0/evidence/memos.stage/.wg/evidence/honest-tests.txt +2 -0
- package/scripts/compiler/phase0/evidence/memos.stage/fab-fail.build.md +8 -0
- package/scripts/compiler/phase0/evidence/memos.stage/fab-missing.build.md +8 -0
- package/scripts/compiler/phase0/evidence/memos.stage/honest.build.md +8 -0
- package/scripts/compiler/phase0/evidence/memos.stage/wg_check_claims.py +174 -0
- package/scripts/compiler/phase0/evidence/verdict.json +104 -0
- package/scripts/compiler/phase0/evidence/wicked-bus.bindings.json +29 -0
- package/scripts/compiler/phase0/evidence/wicked-bus.lint-output.txt +17 -0
- package/scripts/compiler/phase0/evidence/wicked-bus.stage/coverage/failing-tests.txt +4 -0
- package/scripts/compiler/phase0/evidence/wicked-bus.stage/coverage/honest-tests.txt +3 -0
- package/scripts/compiler/phase0/evidence/wicked-bus.stage/fab-fail.build.md +8 -0
- package/scripts/compiler/phase0/evidence/wicked-bus.stage/fab-missing.build.md +8 -0
- package/scripts/compiler/phase0/evidence/wicked-bus.stage/honest.build.md +8 -0
- package/scripts/compiler/phase0/evidence/wicked-bus.stage/wg_check_claims.py +174 -0
- package/scripts/compiler/phase0/evidence/wire-vault-transcript.txt +60 -0
- package/scripts/compiler/phase0/run_probe.py +234 -0
- package/scripts/compiler/phase0/wire_vault.py +310 -0
- package/scripts/crew/__init__.py +0 -0
- package/scripts/crew/_task_audit_writer.py +243 -0
- package/scripts/crew/_task_reader.py +389 -0
- package/scripts/crew/archetypes_v11.py +348 -0
- package/scripts/crew/detectors/__init__.py +12 -0
- package/scripts/crew/flow_compiler.py +121 -0
- package/scripts/crew/phase_manager.py +703 -0
- package/scripts/crew/scope_delta.py +264 -0
- package/scripts/crew/specialist_resolver.py +218 -0
- package/scripts/crew/stack_registry.py +189 -0
- package/scripts/data/data_profiler.py +271 -0
- package/scripts/data/ontology_recommender.py +231 -0
- package/scripts/data/schema_validator.py +267 -0
- package/scripts/delivery/drift.py +739 -0
- package/scripts/delivery/telemetry.py +614 -0
- package/scripts/engineering/patch/codegraph_db.py +125 -0
- package/scripts/engineering/patch/generators/__init__.py +56 -0
- package/scripts/engineering/patch/generators/base.py +373 -0
- package/scripts/engineering/patch/generators/csharp_generator.py +494 -0
- package/scripts/engineering/patch/generators/go_generator.py +430 -0
- package/scripts/engineering/patch/generators/java_generator.py +928 -0
- package/scripts/engineering/patch/generators/jsp_generator.py +454 -0
- package/scripts/engineering/patch/generators/kotlin_generator.py +561 -0
- package/scripts/engineering/patch/generators/perl_generator.py +510 -0
- package/scripts/engineering/patch/generators/php_generator.py +644 -0
- package/scripts/engineering/patch/generators/propagation_engine.py +929 -0
- package/scripts/engineering/patch/generators/python_generator.py +487 -0
- package/scripts/engineering/patch/generators/ruby_generator.py +463 -0
- package/scripts/engineering/patch/generators/rust_generator.py +400 -0
- package/scripts/engineering/patch/generators/sql_generator.py +594 -0
- package/scripts/engineering/patch/generators/typescript_generator.py +439 -0
- package/scripts/engineering/patch/patch.py +800 -0
- package/scripts/engineering/patch/safety.py +429 -0
- package/scripts/jam/__init__.py +0 -0
- package/scripts/jam/_bus_consumers.py +271 -0
- package/scripts/jam/agentic_cli_registry.py +703 -0
- package/scripts/jam/consensus.py +737 -0
- package/scripts/jam/detect_clis.py +409 -0
- package/scripts/jam/jam.py +283 -0
- package/scripts/jam/save_transcript.py +171 -0
- package/scripts/loom/__init__.py +22 -0
- package/scripts/loom/cli.py +170 -0
- package/scripts/loom/compose.py +180 -0
- package/scripts/loom/gate.py +120 -0
- package/scripts/loom/manifest.py +140 -0
- package/scripts/loom/resolve.py +59 -0
- package/scripts/persona/__init__.py +0 -0
- package/scripts/persona/registry.py +688 -0
- package/scripts/platform/guard_pipeline.py +1214 -0
- package/scripts/platform/guard_profiles.py +216 -0
- package/scripts/platform/observability/assert_contracts.py +434 -0
- package/scripts/platform/observability/health_probe.py +915 -0
- package/scripts/platform/observability/ops_log_viewer.py +209 -0
- package/scripts/platform/prereq_doctor.py +567 -0
- package/scripts/qe/conditions_manifest.py +260 -0
- package/scripts/qe/content_sanitizer.py +160 -0
- package/scripts/qe/coverage_tracker.py +535 -0
- package/scripts/qe/discover_scenarios.py +243 -0
- package/scripts/qe/evidence_tracker.py +232 -0
- package/scripts/qe/prove.py +196 -0
- package/scripts/qe/registry_lookup.py +80 -0
- package/scripts/qe/registry_store.py +176 -0
- package/scripts/qe/semantic_review.py +1005 -0
- package/scripts/qe/vault_gate.py +382 -0
- package/scripts/qe/verdict_audit.py +175 -0
- package/scripts/qe/verdict_schema.py +335 -0
- package/scripts/reset.py +220 -0
- package/scripts/resolve_path.py +22 -0
- package/scripts/sentinel/invariants.py +402 -0
- package/scripts/sentinel/pre_push.py +73 -0
- package/scripts/setup/__init__.py +1 -0
- package/scripts/setup/detect_state.py +114 -0
- package/scripts/setup/migrate_legacy.py +67 -0
- package/scripts/setup/migrate_v6_projects.py +232 -0
- package/scripts/setup/onboarding.py +114 -0
- package/scripts/smaht/_bus_consumers.py +98 -0
- package/scripts/smaht/adapters/__init__.py +83 -0
- package/scripts/smaht/adapters/brain_adapter.py +254 -0
- package/scripts/smaht/adapters/context7_adapter.py +438 -0
- package/scripts/smaht/adapters/delegation_adapter.py +104 -0
- package/scripts/smaht/adapters/domain_adapter.py +206 -0
- package/scripts/smaht/adapters/events_adapter.py +231 -0
- package/scripts/smaht/adapters/tools_adapter.py +49 -0
- package/scripts/smaht/cheatsheet_store.py +236 -0
- package/scripts/smaht/context_package.py +386 -0
- package/scripts/smaht/knowledge_graph.py +395 -0
- package/scripts/smaht/propose_skills.py +856 -0
- package/scripts/smaht/test_cheatsheet_store.py +428 -0
- package/scripts/statusline.py +151 -0
- package/scripts/where_am_i.py +236 -0
- package/skills/agentic/agentic-patterns/SKILL.md +91 -0
- package/skills/agentic/agentic-patterns/refs/anti-patterns-design.md +283 -0
- package/skills/agentic/agentic-patterns/refs/anti-patterns-operational.md +216 -0
- package/skills/agentic/agentic-patterns/refs/pattern-catalog.md +329 -0
- package/skills/agentic/context-engineering/SKILL.md +142 -0
- package/skills/agentic/context-engineering/refs/caching-and-optimization.md +251 -0
- package/skills/agentic/context-engineering/refs/compression-techniques.md +171 -0
- package/skills/agentic/context-engineering/refs/cost-calculation-budget.md +250 -0
- package/skills/agentic/context-engineering/refs/cost-optimization-reporting.md +300 -0
- package/skills/agentic/context-engineering/refs/selective-loading.md +179 -0
- package/skills/agentic/frameworks/SKILL.md +191 -0
- package/skills/agentic/frameworks/refs/framework-profiles-1.md +209 -0
- package/skills/agentic/frameworks/refs/framework-profiles-2.md +214 -0
- package/skills/agentic/frameworks/refs/migration-patterns-paths.md +267 -0
- package/skills/agentic/frameworks/refs/migration-patterns-testing.md +208 -0
- package/skills/agentic/refs/audit.md +134 -0
- package/skills/agentic/refs/design.md +137 -0
- package/skills/agentic/refs/frameworks.md +102 -0
- package/skills/agentic/refs/review.md +160 -0
- package/skills/agentic/review-methodology/SKILL.md +186 -0
- package/skills/agentic/review-methodology/refs/deliverable-templates.md +246 -0
- package/skills/agentic/review-methodology/refs/issue-taxonomy-quality-testing.md +277 -0
- package/skills/agentic/review-methodology/refs/issue-taxonomy-reliability-safety.md +253 -0
- package/skills/agentic/trust-and-safety/SKILL.md +177 -0
- package/skills/agentic/trust-and-safety/refs/guardrails-actions.md +246 -0
- package/skills/agentic/trust-and-safety/refs/guardrails-input-output.md +238 -0
- package/skills/agentic/trust-and-safety/refs/guardrails-resources.md +209 -0
- package/skills/agentic/trust-and-safety/refs/safety-checklist-advanced.md +209 -0
- package/skills/agentic/trust-and-safety/refs/safety-checklist-core.md +215 -0
- package/skills/archetype/SKILL.md +104 -0
- package/skills/archetype/refs/build.md +142 -0
- package/skills/archetype/refs/decide.md +117 -0
- package/skills/archetype/refs/explore.md +66 -0
- package/skills/archetype/refs/incident.md +149 -0
- package/skills/archetype/refs/migrate.md +170 -0
- package/skills/archetype/refs/modernize.md +187 -0
- package/skills/archetype/refs/review.md +145 -0
- package/skills/archetype/refs/ship.md +117 -0
- package/skills/archetype/refs/specify.md +108 -0
- package/skills/archetype/refs/triage.md +62 -0
- package/skills/classify/SKILL.md +157 -0
- package/skills/data/analysis/SKILL.md +125 -0
- package/skills/data/analysis/refs/templates.md +170 -0
- package/skills/data/data/SKILL.md +118 -0
- package/skills/data/data/refs/examples.md +235 -0
- package/skills/data/ml/SKILL.md +125 -0
- package/skills/data/ml/refs/templates.md +172 -0
- package/skills/data/pipeline/SKILL.md +136 -0
- package/skills/data/pipeline/refs/templates.md +175 -0
- package/skills/data/refs/analyze.md +123 -0
- package/skills/data/refs/data.md +95 -0
- package/skills/data/refs/ml.md +118 -0
- package/skills/data/refs/pipeline.md +92 -0
- package/skills/deliberate/SKILL.md +125 -0
- package/skills/deliberate/refs/architecture-lens.md +37 -0
- package/skills/deliberate/refs/assumptions-lens.md +43 -0
- package/skills/deliberate/refs/code-lens.md +38 -0
- package/skills/deliberate/refs/content-lens.md +37 -0
- package/skills/deliberate/refs/data-lens.md +43 -0
- package/skills/deliberate/refs/design-lens.md +37 -0
- package/skills/deliberate/refs/opportunity-patterns.md +107 -0
- package/skills/deliberate/refs/ops-lens.md +43 -0
- package/skills/deliberate/refs/product-lens.md +46 -0
- package/skills/deliberate/refs/rethink-framework.md +77 -0
- package/skills/deliberate/refs/security-lens.md +47 -0
- package/skills/deliberate/refs/testing-lens.md +45 -0
- package/skills/deliberate/refs/timing-lens.md +42 -0
- package/skills/engineering/architecture/SKILL.md +177 -0
- package/skills/engineering/architecture/refs/adr-template.md +268 -0
- package/skills/engineering/architecture/refs/architecture-template-deployment.md +176 -0
- package/skills/engineering/architecture/refs/architecture-template-design.md +300 -0
- package/skills/engineering/architecture/refs/examples-ecommerce-analytics.md +299 -0
- package/skills/engineering/architecture/refs/examples-saas-trading.md +291 -0
- package/skills/engineering/architecture/refs/patterns-advanced.md +238 -0
- package/skills/engineering/architecture/refs/patterns-structural.md +303 -0
- package/skills/engineering/backend/SKILL.md +102 -0
- package/skills/engineering/backend/refs/checklists.md +146 -0
- package/skills/engineering/backend/refs/patterns.md +181 -0
- package/skills/engineering/debugging/SKILL.md +99 -0
- package/skills/engineering/debugging/refs/patterns.md +248 -0
- package/skills/engineering/debugging/refs/process.md +203 -0
- package/skills/engineering/docs/SKILL.md +97 -0
- package/skills/engineering/engineering/SKILL.md +88 -0
- package/skills/engineering/engineering/refs/checklists.md +91 -0
- package/skills/engineering/engineering/refs/templates.md +71 -0
- package/skills/engineering/frontend/SKILL.md +92 -0
- package/skills/engineering/frontend/refs/checklists.md +96 -0
- package/skills/engineering/frontend/refs/patterns.md +167 -0
- package/skills/engineering/integration/SKILL.md +183 -0
- package/skills/engineering/integration/refs/error-handling-best-practices.md +139 -0
- package/skills/engineering/integration/refs/error-handling-error-classes-typescript.md +212 -0
- package/skills/engineering/integration/refs/error-handling-error-response-format.md +301 -0
- package/skills/engineering/integration/refs/error-handling-retry-strategies.md +190 -0
- package/skills/engineering/integration/refs/event-schemas-best-practices.md +225 -0
- package/skills/engineering/integration/refs/event-schemas-event-naming-conventions.md +303 -0
- package/skills/engineering/integration/refs/event-schemas-event-structure.md +288 -0
- package/skills/engineering/integration/refs/graphql-best-practices.md +138 -0
- package/skills/engineering/integration/refs/graphql-error-handling.md +198 -0
- package/skills/engineering/integration/refs/graphql-graphql-basics.md +197 -0
- package/skills/engineering/integration/refs/graphql-query-examples.md +226 -0
- package/skills/engineering/integration/refs/graphql-schema-design-patterns.md +280 -0
- package/skills/engineering/integration/refs/grpc-grpc-overview.md +246 -0
- package/skills/engineering/integration/refs/grpc-implementation-examples.md +269 -0
- package/skills/engineering/integration/refs/grpc-metadata-headers.md +304 -0
- package/skills/engineering/integration/refs/grpc-testing.md +49 -0
- package/skills/engineering/integration/refs/openapi-template.yaml +682 -0
- package/skills/engineering/integration/refs/resilience-best-practices.md +109 -0
- package/skills/engineering/integration/refs/resilience-circuit-breaker-pattern.md +302 -0
- package/skills/engineering/integration/refs/resilience-rate-limiting.md +245 -0
- package/skills/engineering/integration/refs/resilience-timeout-pattern.md +212 -0
- package/skills/engineering/integration/refs/rest-api-fundamentals.md +299 -0
- package/skills/engineering/integration/refs/rest-api-responses-security.md +302 -0
- package/skills/engineering/integration/refs/versioning-breaking-changes.md +237 -0
- package/skills/engineering/integration/refs/versioning-migration-strategies.md +257 -0
- package/skills/engineering/integration/refs/versioning-versioning-strategies.md +296 -0
- package/skills/engineering/large-scale-migration/SKILL.md +65 -0
- package/skills/engineering/patch/SKILL.md +184 -0
- package/skills/engineering/refs/arch.md +126 -0
- package/skills/engineering/refs/debug.md +142 -0
- package/skills/engineering/refs/docs.md +190 -0
- package/skills/engineering/refs/plan.md +109 -0
- package/skills/engineering/refs/review.md +138 -0
- package/skills/engineering/system-design/SKILL.md +154 -0
- package/skills/engineering/system-design/refs/anti-patterns-big-ball-of-mud.md +254 -0
- package/skills/engineering/system-design/refs/anti-patterns-circular-dependencies.md +241 -0
- package/skills/engineering/system-design/refs/anti-patterns-feature-envy.md +168 -0
- package/skills/engineering/system-design/refs/anti-patterns-god-object.md +247 -0
- package/skills/engineering/system-design/refs/component-template-lifecycle.md +210 -0
- package/skills/engineering/system-design/refs/component-template-maintenance.md +219 -0
- package/skills/engineering/system-design/refs/component-template-structure.md +276 -0
- package/skills/engineering/system-design/refs/dependencies-best-practices.md +260 -0
- package/skills/engineering/system-design/refs/dependencies-dependency-principles.md +295 -0
- package/skills/engineering/system-design/refs/dependencies-dependency-tracking.md +261 -0
- package/skills/engineering/system-design/refs/interface-template-lifecycle.md +211 -0
- package/skills/engineering/system-design/refs/interface-template-maintenance.md +212 -0
- package/skills/engineering/system-design/refs/interface-template-structure.md +269 -0
- package/skills/engineering/system-design/refs/patterns-dependency-injection.md +151 -0
- package/skills/engineering/system-design/refs/patterns-facade-pattern.md +257 -0
- package/skills/engineering/system-design/refs/patterns-layered-pattern.md +204 -0
- package/skills/engineering/system-design/refs/patterns-plugin-architecture.md +229 -0
- package/skills/engineering/unit-test-quality/SKILL.md +194 -0
- package/skills/ground/SKILL.md +130 -0
- package/skills/integration-discovery/SKILL.md +168 -0
- package/skills/integration-discovery/refs/capabilities.md +282 -0
- package/skills/integration-discovery/refs/cli-detection.md +295 -0
- package/skills/integration-discovery/refs/discovery-sources.md +233 -0
- package/skills/integration-discovery/refs/task-patterns.md +206 -0
- package/skills/jam/SKILL.md +45 -0
- package/skills/jam/refs/facilitation-patterns.md +125 -0
- package/skills/jam/refs/quick.md +64 -0
- package/skills/jam/refs/synthesis-patterns.md +114 -0
- package/skills/multi-model/SKILL.md +168 -0
- package/skills/multi-model/refs/aichat.md +119 -0
- package/skills/multi-model/refs/aider.md +100 -0
- package/skills/multi-model/refs/auditability.md +238 -0
- package/skills/multi-model/refs/codex.md +169 -0
- package/skills/multi-model/refs/context.md +306 -0
- package/skills/multi-model/refs/copilot.md +161 -0
- package/skills/multi-model/refs/examples.md +224 -0
- package/skills/multi-model/refs/gemini.md +185 -0
- package/skills/multi-model/refs/goose.md +112 -0
- package/skills/multi-model/refs/llm.md +124 -0
- package/skills/multi-model/refs/opencode.md +196 -0
- package/skills/multi-model/refs/orchestration.md +188 -0
- package/skills/multi-model/refs/pi.md +208 -0
- package/skills/persona/SKILL.md +144 -0
- package/skills/persona/refs/define.md +133 -0
- package/skills/platform/actions/refs/actions.md +114 -0
- package/skills/platform/audit/SKILL.md +174 -0
- package/skills/platform/audit/refs/audit.md +145 -0
- package/skills/platform/audit/refs/checklists-evidence-operations.md +144 -0
- package/skills/platform/audit/refs/checklists-gdpr-pci-evidence.md +213 -0
- package/skills/platform/audit/refs/checklists-soc2-hipaa.md +120 -0
- package/skills/platform/audit/refs/frameworks-gdpr-pci.md +225 -0
- package/skills/platform/audit/refs/frameworks-soc2-hipaa.md +228 -0
- package/skills/platform/compliance/SKILL.md +169 -0
- package/skills/platform/compliance/refs/checklists.md +303 -0
- package/skills/platform/compliance/refs/compliance.md +117 -0
- package/skills/platform/compliance/refs/frameworks.md +282 -0
- package/skills/platform/errors/SKILL.md +183 -0
- package/skills/platform/errors/refs/patterns.md +271 -0
- package/skills/platform/errors/refs/severity.md +264 -0
- package/skills/platform/gate-benchmark-rebaseline/SKILL.md +108 -0
- package/skills/platform/gh/refs/gh.md +105 -0
- package/skills/platform/gh-cli/SKILL.md +120 -0
- package/skills/platform/gh-cli/refs/automation.md +63 -0
- package/skills/platform/gh-cli/refs/gh-ops.md +103 -0
- package/skills/platform/gh-cli/refs/patterns.md +132 -0
- package/skills/platform/gh-cli/scripts/gh_ops.py +454 -0
- package/skills/platform/github-actions/SKILL.md +159 -0
- package/skills/platform/github-actions/refs/security.md +150 -0
- package/skills/platform/github-actions/refs/templates.md +230 -0
- package/skills/platform/github-actions/refs/troubleshooting.md +174 -0
- package/skills/platform/github-actions/scripts/workflow_gen.py +215 -0
- package/skills/platform/gitlab-ci/SKILL.md +140 -0
- package/skills/platform/gitlab-ci/refs/templates.md +223 -0
- package/skills/platform/gitlab-ci/refs/troubleshooting.md +213 -0
- package/skills/platform/glab-cli/SKILL.md +133 -0
- package/skills/platform/glab-cli/refs/ci-debugging.md +95 -0
- package/skills/platform/glab-cli/refs/glab-ops.md +78 -0
- package/skills/platform/glab-cli/refs/patterns.md +131 -0
- package/skills/platform/glab-cli/scripts/glab_ops.py +313 -0
- package/skills/platform/health/SKILL.md +177 -0
- package/skills/platform/health/refs/health.md +72 -0
- package/skills/platform/health/refs/sources.md +302 -0
- package/skills/platform/incident/refs/incident.md +136 -0
- package/skills/platform/infra/refs/infra.md +104 -0
- package/skills/platform/observability/SKILL.md +128 -0
- package/skills/platform/observability/refs/toolchain-discovery.md +243 -0
- package/skills/platform/prereq-doctor/SKILL.md +57 -0
- package/skills/platform/prereq-doctor/refs/tool-registry.md +58 -0
- package/skills/platform/traces/refs/traces.md +101 -0
- package/skills/product/acceptance-criteria/SKILL.md +193 -0
- package/skills/product/acceptance-criteria/refs/ac-anti-patterns.md +291 -0
- package/skills/product/acceptance-criteria/refs/ac-examples.md +277 -0
- package/skills/product/accessibility/SKILL.md +197 -0
- package/skills/product/accessibility/refs/aria-patterns-basics.md +250 -0
- package/skills/product/accessibility/refs/aria-patterns-dynamic.md +187 -0
- package/skills/product/accessibility/refs/aria-patterns-interactive.md +246 -0
- package/skills/product/accessibility/refs/audit-report-findings.md +248 -0
- package/skills/product/accessibility/refs/audit-report-results.md +276 -0
- package/skills/product/accessibility/refs/common-violations-html-css.md +270 -0
- package/skills/product/accessibility/refs/common-violations-interactive.md +303 -0
- package/skills/product/accessibility/refs/keyboard-testing-basics.md +222 -0
- package/skills/product/accessibility/refs/keyboard-testing-patterns.md +173 -0
- package/skills/product/accessibility/refs/screen-reader-testing-advanced.md +294 -0
- package/skills/product/accessibility/refs/screen-reader-testing-commands.md +255 -0
- package/skills/product/accessibility/refs/wcag-checklist.md +262 -0
- package/skills/product/analyze/SKILL.md +164 -0
- package/skills/product/analyze/refs/algorithms.md +238 -0
- package/skills/product/analyze/refs/sentiment-patterns.md +180 -0
- package/skills/product/imagery/SKILL.md +97 -0
- package/skills/product/imagery/alter/SKILL.md +105 -0
- package/skills/product/imagery/alter/refs/editing-reference.md +146 -0
- package/skills/product/imagery/create/SKILL.md +109 -0
- package/skills/product/imagery/create/refs/prompt-engineering.md +112 -0
- package/skills/product/imagery/create/refs/provider-reference.md +219 -0
- package/skills/product/imagery/review/SKILL.md +101 -0
- package/skills/product/imagery/review/refs/analysis-lenses.md +136 -0
- package/skills/product/imagery/review/refs/quality-gates.md +153 -0
- package/skills/product/imagery/scripts/analyze.sh +23 -0
- package/skills/product/imagery/scripts/edit.sh +14 -0
- package/skills/product/imagery/scripts/generate.sh +13 -0
- package/skills/product/imagery/scripts/provider.py +787 -0
- package/skills/product/listen/SKILL.md +175 -0
- package/skills/product/listen/refs/channels.md +220 -0
- package/skills/product/mockup/SKILL.md +106 -0
- package/skills/product/mockup/refs/templates.md +95 -0
- package/skills/product/refs/a11y.md +109 -0
- package/skills/product/refs/acceptance.md +79 -0
- package/skills/product/refs/align.md +67 -0
- package/skills/product/refs/analyze.md +77 -0
- package/skills/product/refs/elicit.md +67 -0
- package/skills/product/refs/listen.md +58 -0
- package/skills/product/refs/mockup.md +77 -0
- package/skills/product/refs/screenshot.md +59 -0
- package/skills/product/refs/strategy.md +77 -0
- package/skills/product/refs/synthesize.md +54 -0
- package/skills/product/refs/ux-review.md +68 -0
- package/skills/product/refs/ux.md +101 -0
- package/skills/product/requirements-analysis/SKILL.md +136 -0
- package/skills/product/requirements-analysis/refs/requirements-example-auth.md +264 -0
- package/skills/product/requirements-analysis/refs/requirements-example-export-integration.md +88 -0
- package/skills/product/requirements-analysis/refs/requirements-output-format-template.md +247 -0
- package/skills/product/requirements-analysis/refs/user-story-guide.md +296 -0
- package/skills/product/requirements-graph/SKILL.md +155 -0
- package/skills/product/requirements-graph/refs/examples.md +223 -0
- package/skills/product/requirements-graph/refs/schema.md +162 -0
- package/skills/product/requirements-migrate/SKILL.md +90 -0
- package/skills/product/requirements-navigate/SKILL.md +141 -0
- package/skills/product/requirements-navigate/refs/meta-templates.md +141 -0
- package/skills/product/screenshot/SKILL.md +147 -0
- package/skills/product/strategy/SKILL.md +198 -0
- package/skills/product/strategy/refs/frameworks.md +295 -0
- package/skills/product/strategy/refs/templates-competitive-market.md +299 -0
- package/skills/product/strategy/refs/templates-roi-value.md +207 -0
- package/skills/product/synthesize/SKILL.md +116 -0
- package/skills/product/synthesize/refs/journey-mapping.md +212 -0
- package/skills/product/synthesize/refs/prioritization.md +193 -0
- package/skills/product/ux-review/SKILL.md +164 -0
- package/skills/product/visual-direction/SKILL.md +137 -0
- package/skills/product/visual-review/SKILL.md +131 -0
- package/skills/runtime-exec/SKILL.md +138 -0
- package/skills/search/codebase-narrator/SKILL.md +131 -0
- package/skills/search/codebase-narrator/refs/output-template.md +100 -0
- package/skills/smaht/SKILL.md +72 -0
- package/skills/smaht/discovery/SKILL.md +65 -0
- package/skills/smaht/intent/SKILL.md +89 -0
- package/skills/smaht/propose-skills/SKILL.md +142 -0
- package/skills/smaht/refs/state.md +76 -0
- package/skills/swarm/SKILL.md +132 -0
- package/skills/swarm/refs/fan-out.md +104 -0
- package/skills/swarm/refs/independent-verification.md +86 -0
- package/skills/swarm/refs/receipts-and-evidence.md +69 -0
- package/skills/swarm/refs/recon-synthesis.md +87 -0
- package/skills/swarm/refs/ship-discipline.md +90 -0
- package/skills/wickedizer/SKILL.md +147 -0
- package/skills/wickedizer/refs/artifact-types.md +238 -0
- package/skills/wickedizer/refs/complexity.md +278 -0
- package/skills/wickedizer/refs/de-ai-pass.md +140 -0
- package/skills/wickedizer/refs/failure-modes.md +249 -0
- package/skills/wickedizer/refs/patterns.md +282 -0
- package/skills/wickedizer/refs/review.md +221 -0
- package/skills/wickedizer/refs/structure.md +282 -0
- package/skills/wickedizer/refs/voice-profile.md +125 -0
- package/skills/workflow/SKILL.md +132 -0
- package/skills/workflow/refs/archetype-adjustments.md +205 -0
- package/skills/workflow/refs/evidence.md +58 -0
- package/skills/workflow/refs/integration.md +130 -0
- package/skills/workflow/refs/risk-dimension-signals.md +260 -0
- package/skills/workflow/refs/scoring-rubric.md +49 -0
- package/skills/workflow/refs/signal-keywords.md +176 -0
- package/skills/workflow/refs/specialist-routing-rules.md +159 -0
- package/skills/worktrees/SKILL.md +87 -0
- package/skills/worktrees/refs/recipes.md +96 -0
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
---
|
|
2
|
+
phase_relevance: ["design", "review"]
|
|
3
|
+
archetype_relevance: ["*"]
|
|
4
|
+
---
|
|
5
|
+
# Caching, Batching & Cost Optimization
|
|
6
|
+
|
|
7
|
+
Advanced strategies for reducing API costs through caching, batching, and intelligent model selection.
|
|
8
|
+
|
|
9
|
+
## Caching Strategies
|
|
10
|
+
|
|
11
|
+
### 10. Prompt Prefix Caching
|
|
12
|
+
|
|
13
|
+
Cache common prompt prefixes.
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
class PrefixCache:
|
|
17
|
+
"""
|
|
18
|
+
Some LLM providers (like Anthropic) cache prompt prefixes automatically.
|
|
19
|
+
Structure prompts to maximize cache hits.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
def build_cacheable_prompt(self, static_instructions, dynamic_task):
|
|
23
|
+
# Put static content first (will be cached)
|
|
24
|
+
prompt = [
|
|
25
|
+
{
|
|
26
|
+
"role": "system",
|
|
27
|
+
"content": static_instructions, # This gets cached
|
|
28
|
+
"cache_control": {"type": "ephemeral"}
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"role": "user",
|
|
32
|
+
"content": dynamic_task # This changes each time
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
return prompt
|
|
36
|
+
|
|
37
|
+
# Usage: Reuse same system prompt across requests
|
|
38
|
+
cache = PrefixCache()
|
|
39
|
+
for task in tasks:
|
|
40
|
+
prompt = cache.build_cacheable_prompt(
|
|
41
|
+
static_instructions="You are a helpful assistant...", # Cached
|
|
42
|
+
dynamic_task=task # Not cached
|
|
43
|
+
)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 11. Semantic Caching
|
|
47
|
+
|
|
48
|
+
Cache responses for semantically similar queries.
|
|
49
|
+
|
|
50
|
+
```python
|
|
51
|
+
class SemanticCache:
|
|
52
|
+
def __init__(self, similarity_threshold=0.95):
|
|
53
|
+
self.cache = [] # [(query_embedding, response)]
|
|
54
|
+
self.threshold = similarity_threshold
|
|
55
|
+
|
|
56
|
+
async def get(self, query):
|
|
57
|
+
query_embedding = await self.embed(query)
|
|
58
|
+
|
|
59
|
+
# Check for similar cached query
|
|
60
|
+
for cached_embedding, cached_response in self.cache:
|
|
61
|
+
similarity = cosine_similarity([query_embedding], [cached_embedding])[0][0]
|
|
62
|
+
if similarity >= self.threshold:
|
|
63
|
+
return cached_response
|
|
64
|
+
|
|
65
|
+
return None
|
|
66
|
+
|
|
67
|
+
async def set(self, query, response):
|
|
68
|
+
query_embedding = await self.embed(query)
|
|
69
|
+
self.cache.append((query_embedding, response))
|
|
70
|
+
|
|
71
|
+
# Usage
|
|
72
|
+
cache = SemanticCache()
|
|
73
|
+
|
|
74
|
+
# Try cache first
|
|
75
|
+
cached = await cache.get(user_query)
|
|
76
|
+
if cached:
|
|
77
|
+
return cached
|
|
78
|
+
|
|
79
|
+
# If not cached, generate and cache
|
|
80
|
+
response = await llm.generate(user_query)
|
|
81
|
+
await cache.set(user_query, response)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Batching and Parallelization
|
|
85
|
+
|
|
86
|
+
### 12. Batch Processing
|
|
87
|
+
|
|
88
|
+
Process multiple items in single LLM call.
|
|
89
|
+
|
|
90
|
+
```python
|
|
91
|
+
class BatchProcessor:
|
|
92
|
+
async def process_batch(self, items, max_batch_size=10):
|
|
93
|
+
results = []
|
|
94
|
+
|
|
95
|
+
for i in range(0, len(items), max_batch_size):
|
|
96
|
+
batch = items[i:i+max_batch_size]
|
|
97
|
+
|
|
98
|
+
# Process entire batch in one call
|
|
99
|
+
batch_prompt = "Process each item:\n\n"
|
|
100
|
+
for idx, item in enumerate(batch):
|
|
101
|
+
batch_prompt += f"Item {idx+1}: {item}\n"
|
|
102
|
+
|
|
103
|
+
batch_results = await self.llm.generate(batch_prompt)
|
|
104
|
+
results.extend(self.parse_batch_results(batch_results))
|
|
105
|
+
|
|
106
|
+
return results
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### 13. Parallel Context Loading
|
|
110
|
+
|
|
111
|
+
Load multiple context sources in parallel.
|
|
112
|
+
|
|
113
|
+
```python
|
|
114
|
+
class ParallelContextLoader:
|
|
115
|
+
async def load_context(self, query):
|
|
116
|
+
# Load multiple sources in parallel
|
|
117
|
+
results = await asyncio.gather(
|
|
118
|
+
self.load_vector_search(query),
|
|
119
|
+
self.load_user_preferences(query.user_id),
|
|
120
|
+
self.load_recent_history(query.session_id),
|
|
121
|
+
self.load_domain_knowledge(query.domain)
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
vector_results, preferences, history, knowledge = results
|
|
125
|
+
|
|
126
|
+
# Combine and trim to budget
|
|
127
|
+
combined = self.combine_context(
|
|
128
|
+
vector_results,
|
|
129
|
+
preferences,
|
|
130
|
+
history,
|
|
131
|
+
knowledge,
|
|
132
|
+
token_budget=8000
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
return combined
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Cost-Aware Optimization
|
|
139
|
+
|
|
140
|
+
### 14. Model Selection by Budget
|
|
141
|
+
|
|
142
|
+
Choose model based on available budget.
|
|
143
|
+
|
|
144
|
+
```python
|
|
145
|
+
class BudgetAwareModelSelector:
|
|
146
|
+
def select_model(self, task_complexity, token_budget, cost_budget):
|
|
147
|
+
# For complex tasks with high budget, use best model
|
|
148
|
+
if task_complexity == 'high' and cost_budget > 1.0:
|
|
149
|
+
return 'claude-opus-4'
|
|
150
|
+
|
|
151
|
+
# For medium complexity, use balanced model
|
|
152
|
+
elif task_complexity == 'medium':
|
|
153
|
+
return 'claude-sonnet-4'
|
|
154
|
+
|
|
155
|
+
# For simple tasks or tight budget, use efficient model
|
|
156
|
+
else:
|
|
157
|
+
return 'claude-haiku-4'
|
|
158
|
+
|
|
159
|
+
# Usage
|
|
160
|
+
selector = BudgetAwareModelSelector()
|
|
161
|
+
model = selector.select_model(
|
|
162
|
+
task_complexity='medium',
|
|
163
|
+
token_budget=10000,
|
|
164
|
+
cost_budget=0.5
|
|
165
|
+
)
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### 15. Progressive Detail Loading
|
|
169
|
+
|
|
170
|
+
Start with minimal context, add detail if needed.
|
|
171
|
+
|
|
172
|
+
```python
|
|
173
|
+
class ProgressiveLoader:
|
|
174
|
+
async def solve(self, task):
|
|
175
|
+
# Start with minimal context
|
|
176
|
+
context = await self.load_minimal_context(task)
|
|
177
|
+
response = await self.llm.generate(task, context=context)
|
|
178
|
+
|
|
179
|
+
# If agent says it needs more info...
|
|
180
|
+
if "need more information" in response.lower():
|
|
181
|
+
# Load medium context
|
|
182
|
+
context = await self.load_medium_context(task)
|
|
183
|
+
response = await self.llm.generate(task, context=context)
|
|
184
|
+
|
|
185
|
+
# If still needs more...
|
|
186
|
+
if "need more information" in response.lower():
|
|
187
|
+
# Load full context
|
|
188
|
+
context = await self.load_full_context(task)
|
|
189
|
+
response = await self.llm.generate(task, context=context)
|
|
190
|
+
|
|
191
|
+
return response
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Monitoring and Analytics
|
|
195
|
+
|
|
196
|
+
### 16. Token Usage Analytics
|
|
197
|
+
|
|
198
|
+
Track where tokens are being spent.
|
|
199
|
+
|
|
200
|
+
```python
|
|
201
|
+
class TokenAnalytics:
|
|
202
|
+
def __init__(self):
|
|
203
|
+
self.usage = defaultdict(lambda: {'input': 0, 'output': 0})
|
|
204
|
+
|
|
205
|
+
def record(self, component, input_tokens, output_tokens):
|
|
206
|
+
self.usage[component]['input'] += input_tokens
|
|
207
|
+
self.usage[component]['output'] += output_tokens
|
|
208
|
+
|
|
209
|
+
def get_report(self):
|
|
210
|
+
total_input = sum(u['input'] for u in self.usage.values())
|
|
211
|
+
total_output = sum(u['output'] for u in self.usage.values())
|
|
212
|
+
|
|
213
|
+
report = {
|
|
214
|
+
'total_tokens': total_input + total_output,
|
|
215
|
+
'total_input': total_input,
|
|
216
|
+
'total_output': total_output,
|
|
217
|
+
'by_component': {}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
for component, usage in self.usage.items():
|
|
221
|
+
total = usage['input'] + usage['output']
|
|
222
|
+
report['by_component'][component] = {
|
|
223
|
+
'tokens': total,
|
|
224
|
+
'percentage': (total / report['total_tokens']) * 100
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
return report
|
|
228
|
+
|
|
229
|
+
# Find optimization opportunities
|
|
230
|
+
analytics = TokenAnalytics()
|
|
231
|
+
report = analytics.get_report()
|
|
232
|
+
top_spenders = sorted(
|
|
233
|
+
report['by_component'].items(),
|
|
234
|
+
key=lambda x: x[1]['tokens'],
|
|
235
|
+
reverse=True
|
|
236
|
+
)[:5]
|
|
237
|
+
print(f"Top 5 token consumers: {top_spenders}")
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
## Best Practices Summary
|
|
241
|
+
|
|
242
|
+
1. **Compress old context**: Summarize conversations > 20 messages
|
|
243
|
+
2. **Load selectively**: Retrieve only relevant context for current task
|
|
244
|
+
3. **Use structured formats**: JSON/YAML more efficient than prose
|
|
245
|
+
4. **Cache intelligently**: Cache common prompts and similar queries
|
|
246
|
+
5. **Batch when possible**: Process multiple items per LLM call
|
|
247
|
+
6. **Monitor usage**: Track token usage by component
|
|
248
|
+
7. **Progressive loading**: Start minimal, add detail if needed
|
|
249
|
+
8. **Deduplicate**: Remove semantically similar context
|
|
250
|
+
9. **Time decay**: Weight recent information more heavily
|
|
251
|
+
10. **Budget enforcement**: Hard limits on tokens per agent/session
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
---
|
|
2
|
+
phase_relevance: ["design", "review"]
|
|
3
|
+
archetype_relevance: ["*"]
|
|
4
|
+
---
|
|
5
|
+
# Context Optimization Techniques
|
|
6
|
+
|
|
7
|
+
Advanced strategies for minimizing token usage while maximizing context quality.
|
|
8
|
+
|
|
9
|
+
## Compression Techniques
|
|
10
|
+
|
|
11
|
+
### 1. Conversation Summarization
|
|
12
|
+
|
|
13
|
+
Progressive summarization of conversation history.
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
class ConversationCompressor:
|
|
17
|
+
def __init__(self, llm, max_full_messages=10, summary_length=500):
|
|
18
|
+
self.llm = llm
|
|
19
|
+
self.max_full_messages = max_full_messages
|
|
20
|
+
self.summary_length = summary_length
|
|
21
|
+
|
|
22
|
+
async def compress(self, messages):
|
|
23
|
+
if len(messages) <= self.max_full_messages:
|
|
24
|
+
return messages
|
|
25
|
+
|
|
26
|
+
# Split into old (to summarize) and recent (keep full)
|
|
27
|
+
old_messages = messages[:-self.max_full_messages]
|
|
28
|
+
recent_messages = messages[-self.max_full_messages:]
|
|
29
|
+
|
|
30
|
+
# Create summary of old messages
|
|
31
|
+
summary_prompt = f"""Summarize this conversation in {self.summary_length} words or less.
|
|
32
|
+
Focus on:
|
|
33
|
+
- Key decisions made
|
|
34
|
+
- Important facts established
|
|
35
|
+
- Current task state
|
|
36
|
+
|
|
37
|
+
Conversation:
|
|
38
|
+
{self.format_messages(old_messages)}
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
summary = await self.llm.generate(summary_prompt, max_tokens=self.summary_length * 2)
|
|
42
|
+
|
|
43
|
+
# Return summary + recent messages
|
|
44
|
+
return [
|
|
45
|
+
{"role": "system", "content": f"Previous conversation summary:\n{summary}"}
|
|
46
|
+
] + recent_messages
|
|
47
|
+
|
|
48
|
+
def format_messages(self, messages):
|
|
49
|
+
return "\n".join(f"{m['role']}: {m['content']}" for m in messages)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 2. Semantic Deduplication
|
|
53
|
+
|
|
54
|
+
Remove redundant information.
|
|
55
|
+
|
|
56
|
+
```python
|
|
57
|
+
from sentence_transformers import SentenceTransformer
|
|
58
|
+
from sklearn.metrics.pairwise import cosine_similarity
|
|
59
|
+
|
|
60
|
+
class SemanticDeduplicator:
|
|
61
|
+
def __init__(self, similarity_threshold=0.9):
|
|
62
|
+
self.encoder = SentenceTransformer('all-MiniLM-L6-v2')
|
|
63
|
+
self.threshold = similarity_threshold
|
|
64
|
+
|
|
65
|
+
def deduplicate(self, texts):
|
|
66
|
+
if not texts:
|
|
67
|
+
return texts
|
|
68
|
+
|
|
69
|
+
# Encode all texts
|
|
70
|
+
embeddings = self.encoder.encode(texts)
|
|
71
|
+
|
|
72
|
+
# Keep track of which to keep
|
|
73
|
+
keep_indices = [0] # Always keep first
|
|
74
|
+
|
|
75
|
+
for i in range(1, len(texts)):
|
|
76
|
+
# Compare to all kept texts
|
|
77
|
+
similarities = cosine_similarity(
|
|
78
|
+
[embeddings[i]],
|
|
79
|
+
embeddings[keep_indices]
|
|
80
|
+
)[0]
|
|
81
|
+
|
|
82
|
+
# Only keep if not too similar to existing
|
|
83
|
+
if max(similarities) < self.threshold:
|
|
84
|
+
keep_indices.append(i)
|
|
85
|
+
|
|
86
|
+
return [texts[i] for i in keep_indices]
|
|
87
|
+
|
|
88
|
+
# Usage
|
|
89
|
+
deduper = SemanticDeduplicator()
|
|
90
|
+
unique_contexts = deduper.deduplicate([
|
|
91
|
+
"The user prefers Python",
|
|
92
|
+
"User likes Python programming", # Very similar - would be removed
|
|
93
|
+
"The user works at Acme Corp" # Different - would be kept
|
|
94
|
+
])
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### 3. Hierarchical Summarization
|
|
98
|
+
|
|
99
|
+
Summarize at multiple levels of detail.
|
|
100
|
+
|
|
101
|
+
```python
|
|
102
|
+
class HierarchicalSummarizer:
|
|
103
|
+
async def summarize(self, text, levels=3):
|
|
104
|
+
summaries = {}
|
|
105
|
+
|
|
106
|
+
# Level 0: Full text
|
|
107
|
+
summaries['full'] = text
|
|
108
|
+
|
|
109
|
+
# Level 1: Detailed summary (50% reduction)
|
|
110
|
+
summaries['detailed'] = await self.llm.generate(
|
|
111
|
+
f"Summarize in half the length:\n{text}"
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
# Level 2: Brief summary (80% reduction)
|
|
115
|
+
summaries['brief'] = await self.llm.generate(
|
|
116
|
+
f"Summarize in 1-2 paragraphs:\n{summaries['detailed']}"
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
# Level 3: Ultra-brief (95% reduction)
|
|
120
|
+
summaries['headline'] = await self.llm.generate(
|
|
121
|
+
f"Summarize in one sentence:\n{summaries['brief']}"
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
return summaries
|
|
125
|
+
|
|
126
|
+
# Usage: Choose appropriate level based on available tokens
|
|
127
|
+
summaries = await summarizer.summarize(long_document)
|
|
128
|
+
if tokens_available > 5000:
|
|
129
|
+
context = summaries['detailed']
|
|
130
|
+
elif tokens_available > 1000:
|
|
131
|
+
context = summaries['brief']
|
|
132
|
+
else:
|
|
133
|
+
context = summaries['headline']
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### 4. Entity-Based Compression
|
|
137
|
+
|
|
138
|
+
Extract and store only key entities and relationships.
|
|
139
|
+
|
|
140
|
+
```python
|
|
141
|
+
class EntityCompressor:
|
|
142
|
+
async def compress(self, text):
|
|
143
|
+
# Extract entities
|
|
144
|
+
entities_prompt = f"""Extract key entities and relationships from this text.
|
|
145
|
+
Format as JSON: {{"entities": [...], "relationships": [...]}}
|
|
146
|
+
|
|
147
|
+
Text: {text}
|
|
148
|
+
"""
|
|
149
|
+
|
|
150
|
+
entities = await self.llm.generate(entities_prompt)
|
|
151
|
+
|
|
152
|
+
# Store compressed representation
|
|
153
|
+
return {
|
|
154
|
+
'entities': entities['entities'],
|
|
155
|
+
'relationships': entities['relationships'],
|
|
156
|
+
'original_length': len(text),
|
|
157
|
+
'compressed_length': len(str(entities))
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
def reconstruct_context(self, compressed):
|
|
161
|
+
# Build minimal context from entities
|
|
162
|
+
context = "Key facts:\n"
|
|
163
|
+
for entity in compressed['entities']:
|
|
164
|
+
context += f"- {entity}\n"
|
|
165
|
+
|
|
166
|
+
context += "\nRelationships:\n"
|
|
167
|
+
for rel in compressed['relationships']:
|
|
168
|
+
context += f"- {rel}\n"
|
|
169
|
+
|
|
170
|
+
return context
|
|
171
|
+
```
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
---
|
|
2
|
+
phase_relevance: ["design", "review"]
|
|
3
|
+
archetype_relevance: ["*"]
|
|
4
|
+
---
|
|
5
|
+
# Token Cost Models and Budgeting
|
|
6
|
+
|
|
7
|
+
Comprehensive guide to calculating, tracking, and optimizing token costs in agentic systems.
|
|
8
|
+
|
|
9
|
+
## Pricing Overview (2026 Estimates)
|
|
10
|
+
|
|
11
|
+
```python
|
|
12
|
+
PRICING = {
|
|
13
|
+
# Anthropic Claude
|
|
14
|
+
'claude-opus-4-6': {
|
|
15
|
+
'input': 0.015, # $ per 1K tokens
|
|
16
|
+
'output': 0.075,
|
|
17
|
+
'context_window': 200000,
|
|
18
|
+
'output_limit': 16000
|
|
19
|
+
},
|
|
20
|
+
'claude-sonnet-4-5': {
|
|
21
|
+
'input': 0.003,
|
|
22
|
+
'output': 0.015,
|
|
23
|
+
'context_window': 200000,
|
|
24
|
+
'output_limit': 16000
|
|
25
|
+
},
|
|
26
|
+
'claude-haiku-4': {
|
|
27
|
+
'input': 0.0008,
|
|
28
|
+
'output': 0.004,
|
|
29
|
+
'context_window': 200000,
|
|
30
|
+
'output_limit': 8000
|
|
31
|
+
},
|
|
32
|
+
|
|
33
|
+
# OpenAI GPT
|
|
34
|
+
'gpt-4-turbo': {
|
|
35
|
+
'input': 0.01,
|
|
36
|
+
'output': 0.03,
|
|
37
|
+
'context_window': 128000,
|
|
38
|
+
'output_limit': 4096
|
|
39
|
+
},
|
|
40
|
+
'gpt-4': {
|
|
41
|
+
'input': 0.03,
|
|
42
|
+
'output': 0.06,
|
|
43
|
+
'context_window': 8192,
|
|
44
|
+
'output_limit': 4096
|
|
45
|
+
},
|
|
46
|
+
'gpt-3.5-turbo': {
|
|
47
|
+
'input': 0.001,
|
|
48
|
+
'output': 0.002,
|
|
49
|
+
'context_window': 16384,
|
|
50
|
+
'output_limit': 4096
|
|
51
|
+
},
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Note: These are approximate rates. Always check current pricing from providers.
|
|
56
|
+
|
|
57
|
+
## Cost Calculation
|
|
58
|
+
|
|
59
|
+
### Basic Cost Calculator
|
|
60
|
+
|
|
61
|
+
```python
|
|
62
|
+
class CostCalculator:
|
|
63
|
+
def __init__(self, pricing=PRICING):
|
|
64
|
+
self.pricing = pricing
|
|
65
|
+
|
|
66
|
+
def calculate(self, model, input_tokens, output_tokens):
|
|
67
|
+
"""Calculate cost for a single LLM call."""
|
|
68
|
+
if model not in self.pricing:
|
|
69
|
+
raise ValueError(f"Unknown model: {model}")
|
|
70
|
+
|
|
71
|
+
rates = self.pricing[model]
|
|
72
|
+
|
|
73
|
+
input_cost = (input_tokens / 1000) * rates['input']
|
|
74
|
+
output_cost = (output_tokens / 1000) * rates['output']
|
|
75
|
+
|
|
76
|
+
return {
|
|
77
|
+
'input_cost': input_cost,
|
|
78
|
+
'output_cost': output_cost,
|
|
79
|
+
'total_cost': input_cost + output_cost,
|
|
80
|
+
'input_tokens': input_tokens,
|
|
81
|
+
'output_tokens': output_tokens
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
# Example
|
|
85
|
+
calc = CostCalculator()
|
|
86
|
+
cost = calc.calculate('claude-opus-4-6', input_tokens=10000, output_tokens=2000)
|
|
87
|
+
print(f"Total cost: ${cost['total_cost']:.4f}") # $0.30
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Multi-Agent Cost Tracking
|
|
91
|
+
|
|
92
|
+
```python
|
|
93
|
+
class MultiAgentCostTracker:
|
|
94
|
+
def __init__(self):
|
|
95
|
+
self.calls = [] # All LLM calls
|
|
96
|
+
self.costs_by_agent = defaultdict(float)
|
|
97
|
+
self.costs_by_model = defaultdict(float)
|
|
98
|
+
|
|
99
|
+
def record_call(self, agent_id, model, input_tokens, output_tokens):
|
|
100
|
+
"""Record a single LLM call."""
|
|
101
|
+
calc = CostCalculator()
|
|
102
|
+
cost_info = calc.calculate(model, input_tokens, output_tokens)
|
|
103
|
+
|
|
104
|
+
# Store call details
|
|
105
|
+
self.calls.append({
|
|
106
|
+
'timestamp': datetime.now(),
|
|
107
|
+
'agent_id': agent_id,
|
|
108
|
+
'model': model,
|
|
109
|
+
**cost_info
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
# Update aggregates
|
|
113
|
+
self.costs_by_agent[agent_id] += cost_info['total_cost']
|
|
114
|
+
self.costs_by_model[model] += cost_info['total_cost']
|
|
115
|
+
|
|
116
|
+
def get_total_cost(self):
|
|
117
|
+
"""Get total cost across all calls."""
|
|
118
|
+
return sum(call['total_cost'] for call in self.calls)
|
|
119
|
+
|
|
120
|
+
def get_agent_costs(self):
|
|
121
|
+
"""Get cost breakdown by agent."""
|
|
122
|
+
return dict(sorted(
|
|
123
|
+
self.costs_by_agent.items(),
|
|
124
|
+
key=lambda x: x[1],
|
|
125
|
+
reverse=True
|
|
126
|
+
))
|
|
127
|
+
|
|
128
|
+
def get_model_costs(self):
|
|
129
|
+
"""Get cost breakdown by model."""
|
|
130
|
+
return dict(sorted(
|
|
131
|
+
self.costs_by_model.items(),
|
|
132
|
+
key=lambda x: x[1],
|
|
133
|
+
reverse=True
|
|
134
|
+
))
|
|
135
|
+
|
|
136
|
+
def get_stats(self):
|
|
137
|
+
"""Get comprehensive statistics."""
|
|
138
|
+
total_tokens = sum(
|
|
139
|
+
call['input_tokens'] + call['output_tokens']
|
|
140
|
+
for call in self.calls
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
return {
|
|
144
|
+
'total_cost': self.get_total_cost(),
|
|
145
|
+
'total_calls': len(self.calls),
|
|
146
|
+
'total_tokens': total_tokens,
|
|
147
|
+
'avg_cost_per_call': self.get_total_cost() / len(self.calls) if self.calls else 0,
|
|
148
|
+
'avg_tokens_per_call': total_tokens / len(self.calls) if self.calls else 0,
|
|
149
|
+
'by_agent': self.get_agent_costs(),
|
|
150
|
+
'by_model': self.get_model_costs()
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Budget Management
|
|
155
|
+
|
|
156
|
+
### Session Budget
|
|
157
|
+
|
|
158
|
+
```python
|
|
159
|
+
class SessionBudget:
|
|
160
|
+
def __init__(self, max_cost=5.0):
|
|
161
|
+
self.max_cost = max_cost
|
|
162
|
+
self.spent = 0.0
|
|
163
|
+
self.calls = []
|
|
164
|
+
|
|
165
|
+
def check_and_reserve(self, estimated_cost):
|
|
166
|
+
"""Check if we can afford this call."""
|
|
167
|
+
if self.spent + estimated_cost > self.max_cost:
|
|
168
|
+
raise BudgetExceededError(
|
|
169
|
+
f"Would exceed budget: ${self.spent + estimated_cost:.4f} > ${self.max_cost:.4f}"
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
def record_actual(self, actual_cost):
|
|
173
|
+
"""Record actual cost after call."""
|
|
174
|
+
self.spent += actual_cost
|
|
175
|
+
self.calls.append({
|
|
176
|
+
'timestamp': datetime.now(),
|
|
177
|
+
'cost': actual_cost
|
|
178
|
+
})
|
|
179
|
+
|
|
180
|
+
def get_remaining(self):
|
|
181
|
+
"""Get remaining budget."""
|
|
182
|
+
return self.max_cost - self.spent
|
|
183
|
+
|
|
184
|
+
def get_utilization(self):
|
|
185
|
+
"""Get budget utilization percentage."""
|
|
186
|
+
return (self.spent / self.max_cost) * 100
|
|
187
|
+
|
|
188
|
+
# Usage
|
|
189
|
+
budget = SessionBudget(max_cost=1.0)
|
|
190
|
+
|
|
191
|
+
# Before each call
|
|
192
|
+
estimated_cost = estimate_cost(model, estimated_input, estimated_output)
|
|
193
|
+
budget.check_and_reserve(estimated_cost)
|
|
194
|
+
|
|
195
|
+
# After call
|
|
196
|
+
actual_cost = calculate_actual_cost(model, actual_input, actual_output)
|
|
197
|
+
budget.record_actual(actual_cost)
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Tiered Budget System
|
|
201
|
+
|
|
202
|
+
```python
|
|
203
|
+
class TieredBudget:
|
|
204
|
+
"""Different budget limits for different user tiers."""
|
|
205
|
+
|
|
206
|
+
TIERS = {
|
|
207
|
+
'free': {'daily': 0.10, 'monthly': 2.0},
|
|
208
|
+
'pro': {'daily': 1.0, 'monthly': 25.0},
|
|
209
|
+
'enterprise': {'daily': 10.0, 'monthly': 500.0}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
def __init__(self, user_tier):
|
|
213
|
+
self.tier = user_tier
|
|
214
|
+
self.limits = self.TIERS[user_tier]
|
|
215
|
+
self.daily_spent = 0.0
|
|
216
|
+
self.monthly_spent = 0.0
|
|
217
|
+
self.last_reset = datetime.now()
|
|
218
|
+
|
|
219
|
+
def check_budget(self, estimated_cost):
|
|
220
|
+
"""Check both daily and monthly budgets."""
|
|
221
|
+
self._reset_if_needed()
|
|
222
|
+
|
|
223
|
+
if self.daily_spent + estimated_cost > self.limits['daily']:
|
|
224
|
+
raise DailyBudgetExceeded(
|
|
225
|
+
f"Daily limit: ${self.limits['daily']}"
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
if self.monthly_spent + estimated_cost > self.limits['monthly']:
|
|
229
|
+
raise MonthlyBudgetExceeded(
|
|
230
|
+
f"Monthly limit: ${self.limits['monthly']}"
|
|
231
|
+
)
|
|
232
|
+
|
|
233
|
+
def record_usage(self, cost):
|
|
234
|
+
self._reset_if_needed()
|
|
235
|
+
self.daily_spent += cost
|
|
236
|
+
self.monthly_spent += cost
|
|
237
|
+
|
|
238
|
+
def _reset_if_needed(self):
|
|
239
|
+
now = datetime.now()
|
|
240
|
+
|
|
241
|
+
# Reset daily budget
|
|
242
|
+
if now.date() > self.last_reset.date():
|
|
243
|
+
self.daily_spent = 0.0
|
|
244
|
+
|
|
245
|
+
# Reset monthly budget
|
|
246
|
+
if now.month != self.last_reset.month:
|
|
247
|
+
self.monthly_spent = 0.0
|
|
248
|
+
|
|
249
|
+
self.last_reset = now
|
|
250
|
+
```
|