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,236 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Cheatsheet store — CLI wrapper for DomainStore cheatsheet operations.
|
|
3
|
+
|
|
4
|
+
Usage:
|
|
5
|
+
python3 cheatsheet_store.py store --library react --data '{"key_apis": [...], ...}'
|
|
6
|
+
python3 cheatsheet_store.py list [--search query]
|
|
7
|
+
python3 cheatsheet_store.py get --library react
|
|
8
|
+
python3 cheatsheet_store.py remove --library react
|
|
9
|
+
python3 cheatsheet_store.py update-all
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import argparse
|
|
13
|
+
import json
|
|
14
|
+
import sys
|
|
15
|
+
import uuid
|
|
16
|
+
from datetime import datetime, timezone
|
|
17
|
+
from pathlib import Path
|
|
18
|
+
|
|
19
|
+
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
|
|
20
|
+
from _domain_store import DomainStore
|
|
21
|
+
|
|
22
|
+
_sm = DomainStore("wicked-smaht")
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _find_existing(library):
|
|
26
|
+
"""Find the most recent cheatsheet for a library. Returns (record, all_matches)."""
|
|
27
|
+
records = _sm.list("cheatsheets") or []
|
|
28
|
+
matches = [
|
|
29
|
+
r for r in records
|
|
30
|
+
if r.get("library", "").lower() == library.lower()
|
|
31
|
+
]
|
|
32
|
+
if matches:
|
|
33
|
+
matches.sort(key=lambda r: r.get("timestamp", ""), reverse=True)
|
|
34
|
+
return matches[0], matches
|
|
35
|
+
return None, []
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _diff_cheatsheets(old, new):
|
|
39
|
+
"""Compute a human-readable diff between two cheatsheet records.
|
|
40
|
+
|
|
41
|
+
Returns a dict with changed sections and a boolean indicating whether
|
|
42
|
+
anything meaningful changed.
|
|
43
|
+
"""
|
|
44
|
+
changes = {}
|
|
45
|
+
|
|
46
|
+
# Compare key_apis by name
|
|
47
|
+
old_apis = {a["name"]: a for a in old.get("key_apis", [])}
|
|
48
|
+
new_apis = {a["name"]: a for a in new.get("key_apis", [])}
|
|
49
|
+
added_apis = sorted(set(new_apis) - set(old_apis))
|
|
50
|
+
removed_apis = sorted(set(old_apis) - set(new_apis))
|
|
51
|
+
if added_apis or removed_apis:
|
|
52
|
+
changes["key_apis"] = {}
|
|
53
|
+
if added_apis:
|
|
54
|
+
changes["key_apis"]["added"] = added_apis
|
|
55
|
+
if removed_apis:
|
|
56
|
+
changes["key_apis"]["removed"] = removed_apis
|
|
57
|
+
|
|
58
|
+
# Compare common_patterns by name
|
|
59
|
+
old_pats = {p["name"]: p for p in old.get("common_patterns", [])}
|
|
60
|
+
new_pats = {p["name"]: p for p in new.get("common_patterns", [])}
|
|
61
|
+
added_pats = sorted(set(new_pats) - set(old_pats))
|
|
62
|
+
removed_pats = sorted(set(old_pats) - set(new_pats))
|
|
63
|
+
if added_pats or removed_pats:
|
|
64
|
+
changes["common_patterns"] = {}
|
|
65
|
+
if added_pats:
|
|
66
|
+
changes["common_patterns"]["added"] = added_pats
|
|
67
|
+
if removed_pats:
|
|
68
|
+
changes["common_patterns"]["removed"] = removed_pats
|
|
69
|
+
|
|
70
|
+
# Compare gotchas
|
|
71
|
+
old_gotchas = set(old.get("gotchas", []))
|
|
72
|
+
new_gotchas = set(new.get("gotchas", []))
|
|
73
|
+
added_g = sorted(new_gotchas - old_gotchas)
|
|
74
|
+
removed_g = sorted(old_gotchas - new_gotchas)
|
|
75
|
+
if added_g or removed_g:
|
|
76
|
+
changes["gotchas"] = {}
|
|
77
|
+
if added_g:
|
|
78
|
+
changes["gotchas"]["added"] = added_g
|
|
79
|
+
if removed_g:
|
|
80
|
+
changes["gotchas"]["removed"] = removed_g
|
|
81
|
+
|
|
82
|
+
has_changes = len(changes) > 0
|
|
83
|
+
return changes, has_changes
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def cmd_store(args):
|
|
87
|
+
"""Store a cheatsheet. Detects updates to existing entries and reports diffs."""
|
|
88
|
+
try:
|
|
89
|
+
data = json.loads(args.data)
|
|
90
|
+
except json.JSONDecodeError as e:
|
|
91
|
+
print(json.dumps({"success": False, "error": f"Invalid JSON: {e}"}))
|
|
92
|
+
sys.exit(1)
|
|
93
|
+
|
|
94
|
+
now = datetime.now(timezone.utc).isoformat()
|
|
95
|
+
existing, all_matches = _find_existing(args.library)
|
|
96
|
+
|
|
97
|
+
data.setdefault("id", str(uuid.uuid4()))
|
|
98
|
+
data.setdefault("library", args.library)
|
|
99
|
+
data.setdefault("timestamp", now)
|
|
100
|
+
data["fetched_at"] = now
|
|
101
|
+
if existing:
|
|
102
|
+
data["last_updated"] = now
|
|
103
|
+
data["previous_fetched_at"] = existing.get("fetched_at", existing.get("timestamp"))
|
|
104
|
+
if args.version_hint:
|
|
105
|
+
data.setdefault("version_hint", args.version_hint)
|
|
106
|
+
|
|
107
|
+
# Compute diff if updating an existing cheatsheet
|
|
108
|
+
diff_result = None
|
|
109
|
+
if existing:
|
|
110
|
+
changes, has_changes = _diff_cheatsheets(existing, data)
|
|
111
|
+
diff_result = {"has_changes": has_changes, "changes": changes}
|
|
112
|
+
# Remove old entries for this library so we don't accumulate duplicates
|
|
113
|
+
for old_rec in all_matches:
|
|
114
|
+
old_id = old_rec.get("id")
|
|
115
|
+
if old_id:
|
|
116
|
+
try:
|
|
117
|
+
_sm.delete("cheatsheets", old_id)
|
|
118
|
+
except Exception:
|
|
119
|
+
pass # best-effort cleanup
|
|
120
|
+
|
|
121
|
+
result = _sm.create("cheatsheets", data)
|
|
122
|
+
output = {"id": data["id"], "success": result is not None}
|
|
123
|
+
if result is None:
|
|
124
|
+
output["error"] = "DomainStore returned None"
|
|
125
|
+
if existing:
|
|
126
|
+
output["updated"] = True
|
|
127
|
+
output["diff"] = diff_result
|
|
128
|
+
else:
|
|
129
|
+
output["updated"] = False
|
|
130
|
+
|
|
131
|
+
print(json.dumps(output))
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def cmd_list(args):
|
|
135
|
+
"""List stored cheatsheets."""
|
|
136
|
+
records = _sm.list("cheatsheets") or []
|
|
137
|
+
if args.search:
|
|
138
|
+
q = args.search.lower()
|
|
139
|
+
records = [
|
|
140
|
+
r for r in records
|
|
141
|
+
if q in r.get("library", "").lower()
|
|
142
|
+
]
|
|
143
|
+
# Deduplicate: keep only the most recent per library
|
|
144
|
+
seen = {}
|
|
145
|
+
for r in sorted(records, key=lambda x: x.get("timestamp", ""), reverse=True):
|
|
146
|
+
lib = r.get("library", "").lower()
|
|
147
|
+
if lib not in seen:
|
|
148
|
+
seen[lib] = r
|
|
149
|
+
deduped = sorted(seen.values(), key=lambda x: x.get("timestamp", ""), reverse=True)
|
|
150
|
+
print(json.dumps(deduped, indent=2))
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def cmd_get(args):
|
|
154
|
+
"""Get cheatsheet by library name (most recent)."""
|
|
155
|
+
existing, _ = _find_existing(args.library)
|
|
156
|
+
if existing:
|
|
157
|
+
print(json.dumps(existing))
|
|
158
|
+
else:
|
|
159
|
+
print(json.dumps({"found": False}))
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def cmd_remove(args):
|
|
163
|
+
"""Remove all cheatsheet entries for a library."""
|
|
164
|
+
existing, all_matches = _find_existing(args.library)
|
|
165
|
+
if not existing:
|
|
166
|
+
print(json.dumps({"success": False, "error": f"No cheatsheet found for '{args.library}'"}))
|
|
167
|
+
sys.exit(1)
|
|
168
|
+
|
|
169
|
+
removed = 0
|
|
170
|
+
for rec in all_matches:
|
|
171
|
+
rec_id = rec.get("id")
|
|
172
|
+
if rec_id:
|
|
173
|
+
try:
|
|
174
|
+
_sm.delete("cheatsheets", rec_id)
|
|
175
|
+
removed += 1
|
|
176
|
+
except Exception:
|
|
177
|
+
pass # fail open
|
|
178
|
+
print(json.dumps({"success": True, "library": args.library, "removed": removed}))
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
def cmd_update_all(args):
|
|
182
|
+
"""List all unique libraries that have cached cheatsheets (for re-fetch orchestration)."""
|
|
183
|
+
records = _sm.list("cheatsheets") or []
|
|
184
|
+
seen = {}
|
|
185
|
+
for r in sorted(records, key=lambda x: x.get("timestamp", ""), reverse=True):
|
|
186
|
+
lib = r.get("library", "").lower()
|
|
187
|
+
if lib not in seen:
|
|
188
|
+
seen[lib] = {
|
|
189
|
+
"library": r.get("library"),
|
|
190
|
+
"version_hint": r.get("version_hint"),
|
|
191
|
+
"fetched_at": r.get("fetched_at", r.get("timestamp")),
|
|
192
|
+
}
|
|
193
|
+
libraries = sorted(seen.values(), key=lambda x: x.get("fetched_at", ""))
|
|
194
|
+
print(json.dumps({"libraries": libraries, "count": len(libraries)}))
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
def main():
|
|
198
|
+
parser = argparse.ArgumentParser(
|
|
199
|
+
description="Cheatsheet store — CRUD operations via DomainStore"
|
|
200
|
+
)
|
|
201
|
+
subparsers = parser.add_subparsers(dest="command", required=True)
|
|
202
|
+
|
|
203
|
+
# store subcommand
|
|
204
|
+
store_p = subparsers.add_parser("store", help="Store a cheatsheet")
|
|
205
|
+
store_p.add_argument("--library", required=True, help="Library name (e.g. react, fastapi)")
|
|
206
|
+
store_p.add_argument("--data", required=True, help="JSON cheatsheet payload")
|
|
207
|
+
store_p.add_argument("--version-hint", dest="version_hint", default=None,
|
|
208
|
+
help="Optional version string (e.g. 18.x)")
|
|
209
|
+
store_p.set_defaults(func=cmd_store)
|
|
210
|
+
|
|
211
|
+
# list subcommand
|
|
212
|
+
list_p = subparsers.add_parser("list", help="List stored cheatsheets")
|
|
213
|
+
list_p.add_argument("--search", default=None, help="Filter by library name substring")
|
|
214
|
+
list_p.set_defaults(func=cmd_list)
|
|
215
|
+
|
|
216
|
+
# get subcommand
|
|
217
|
+
get_p = subparsers.add_parser("get", help="Get most recent cheatsheet for a library")
|
|
218
|
+
get_p.add_argument("--library", required=True, help="Library name")
|
|
219
|
+
get_p.set_defaults(func=cmd_get)
|
|
220
|
+
|
|
221
|
+
# remove subcommand
|
|
222
|
+
remove_p = subparsers.add_parser("remove", help="Remove cheatsheet for a library")
|
|
223
|
+
remove_p.add_argument("--library", required=True, help="Library name to remove")
|
|
224
|
+
remove_p.set_defaults(func=cmd_remove)
|
|
225
|
+
|
|
226
|
+
# update-all subcommand
|
|
227
|
+
update_all_p = subparsers.add_parser("update-all",
|
|
228
|
+
help="List all cached libraries for re-fetch")
|
|
229
|
+
update_all_p.set_defaults(func=cmd_update_all)
|
|
230
|
+
|
|
231
|
+
args = parser.parse_args()
|
|
232
|
+
args.func(args)
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
if __name__ == "__main__":
|
|
236
|
+
main()
|
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Context Package Builder for subagent dispatches.
|
|
4
|
+
|
|
5
|
+
Builds structured context packages for subagents instead of prose dumps.
|
|
6
|
+
Called by other plugins (wicked-crew, etc.) via direct import or subprocess.
|
|
7
|
+
|
|
8
|
+
Usage:
|
|
9
|
+
context_package.py build --task "Review auth implementation" [--project myproject] [--files src/auth/]
|
|
10
|
+
context_package.py build --task "..." --json
|
|
11
|
+
context_package.py build --task "..." --dispatch # includes ecosystem orientation for subagents
|
|
12
|
+
|
|
13
|
+
Output: A structured JSON context package with typed fields:
|
|
14
|
+
{
|
|
15
|
+
"task": "Review auth implementation",
|
|
16
|
+
"constraints": ["Must use JWT", "No session storage"],
|
|
17
|
+
"decisions": ["Chose JWT for stateless auth"],
|
|
18
|
+
"files": ["src/auth/handler.py", "src/auth/middleware.py"],
|
|
19
|
+
"tools": ["Read", "Grep", "Glob"],
|
|
20
|
+
"project_state": {"phase": "build", "complexity": 4},
|
|
21
|
+
"memories": [{"title": "...", "summary": "..."}],
|
|
22
|
+
"ecosystem": {"installed_plugins": [...], "key_skills": [...]}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
The --dispatch flag adds ecosystem orientation: which plugins are installed,
|
|
26
|
+
what skills/tools are available, and conciseness guidance. This supplements
|
|
27
|
+
the SubagentStart hook with richer context for dispatched subagents.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
import argparse
|
|
31
|
+
import asyncio
|
|
32
|
+
import json
|
|
33
|
+
import os
|
|
34
|
+
import sys
|
|
35
|
+
from pathlib import Path
|
|
36
|
+
|
|
37
|
+
# All domain scripts live under plugins/wicked-garden/scripts/
|
|
38
|
+
# context_package.py is at scripts/smaht/, so parents[1] = scripts/
|
|
39
|
+
_SCRIPTS_ROOT = Path(__file__).resolve().parents[1]
|
|
40
|
+
if str(_SCRIPTS_ROOT) not in sys.path:
|
|
41
|
+
sys.path.insert(0, str(_SCRIPTS_ROOT))
|
|
42
|
+
|
|
43
|
+
from _domain_store import DomainStore
|
|
44
|
+
|
|
45
|
+
# Add smaht sub-paths for adapter/v2 imports
|
|
46
|
+
_smaht_dir = Path(__file__).resolve().parent
|
|
47
|
+
if str(_smaht_dir) not in sys.path:
|
|
48
|
+
sys.path.insert(0, str(_smaht_dir))
|
|
49
|
+
if str(_smaht_dir / "v2") not in sys.path:
|
|
50
|
+
sys.path.insert(0, str(_smaht_dir / "v2"))
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
# Maps installed plugins → their most useful skills/tools for subagents.
|
|
54
|
+
# This is the static reference that replaces SubagentStart hook's pointer injection.
|
|
55
|
+
PLUGIN_SKILL_MAP = {
|
|
56
|
+
"mem": [
|
|
57
|
+
"wicked-brain:memory (recall mode) — retrieve past decisions, constraints, patterns",
|
|
58
|
+
"wicked-brain:memory (store mode) — persist a decision or learning for future sessions",
|
|
59
|
+
],
|
|
60
|
+
"search": [
|
|
61
|
+
"wicked-brain:search — find code symbols (functions, classes, methods)",
|
|
62
|
+
"/wicked-garden:search:refs — find where a symbol is referenced",
|
|
63
|
+
"/wicked-garden:search:blast-radius — analyze what changing a symbol affects",
|
|
64
|
+
"wicked-brain:search — search documents (PDF, markdown, Office)",
|
|
65
|
+
],
|
|
66
|
+
"tasks": [
|
|
67
|
+
"TaskCreate/TaskUpdate/TaskList/TaskGet — native Claude Code task tools; metadata validated by PreToolUse",
|
|
68
|
+
],
|
|
69
|
+
"testing": [
|
|
70
|
+
"/wicked-testing:authoring — generate test scenarios with edge cases",
|
|
71
|
+
"/wicked-testing:plan — generate comprehensive test plan",
|
|
72
|
+
],
|
|
73
|
+
"engineering": [
|
|
74
|
+
"/wicked-garden:engineering:review — code review with senior engineering perspective",
|
|
75
|
+
],
|
|
76
|
+
"platform": [
|
|
77
|
+
"/wicked-garden:platform:security — security review and vulnerability assessment",
|
|
78
|
+
],
|
|
79
|
+
"wicked-garden": [
|
|
80
|
+
"context7 MCP tools — query up-to-date library documentation",
|
|
81
|
+
],
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def discover_installed_plugins() -> list:
|
|
86
|
+
"""Discover which wicked-garden domain modules are available.
|
|
87
|
+
|
|
88
|
+
Since all plugins are consolidated into scripts/{domain}/, we check
|
|
89
|
+
which domain directories exist under _SCRIPTS_ROOT.
|
|
90
|
+
"""
|
|
91
|
+
installed = []
|
|
92
|
+
|
|
93
|
+
# Check co-located domain directories
|
|
94
|
+
for entry in _SCRIPTS_ROOT.iterdir():
|
|
95
|
+
if entry.is_dir() and not entry.name.startswith("_") and not entry.name.startswith("."):
|
|
96
|
+
installed.append(entry.name)
|
|
97
|
+
|
|
98
|
+
return sorted(set(installed))
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def build_ecosystem_orientation(installed_plugins: list = None) -> dict:
|
|
102
|
+
"""Build ecosystem orientation metadata for subagent prompts.
|
|
103
|
+
|
|
104
|
+
Returns dict with:
|
|
105
|
+
- installed_plugins: list of installed wicked-garden plugins
|
|
106
|
+
- key_skills: list of skill references relevant to subagents
|
|
107
|
+
- built_in_tools: list of Claude's built-in tools
|
|
108
|
+
"""
|
|
109
|
+
if installed_plugins is None:
|
|
110
|
+
installed_plugins = discover_installed_plugins()
|
|
111
|
+
|
|
112
|
+
# Collect skill references for installed plugins
|
|
113
|
+
key_skills = []
|
|
114
|
+
for plugin in installed_plugins:
|
|
115
|
+
if plugin in PLUGIN_SKILL_MAP:
|
|
116
|
+
key_skills.extend(PLUGIN_SKILL_MAP[plugin])
|
|
117
|
+
|
|
118
|
+
return {
|
|
119
|
+
"installed_plugins": installed_plugins,
|
|
120
|
+
"key_skills": key_skills,
|
|
121
|
+
"built_in_tools": [
|
|
122
|
+
"Read, Grep, Glob — file reading and search",
|
|
123
|
+
"Edit, Write — file modification",
|
|
124
|
+
"Bash — shell commands",
|
|
125
|
+
"TaskCreate/TaskUpdate/TaskList/TaskGet — task management",
|
|
126
|
+
"WebSearch, WebFetch — web research",
|
|
127
|
+
],
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
async def gather_memories(task: str, limit: int = 3) -> list:
|
|
132
|
+
"""Query wicked-brain for task-relevant memories.
|
|
133
|
+
|
|
134
|
+
Uses brain_adapter directly — brain_adapter.query() returns ContextItems
|
|
135
|
+
with source="brain". The previous domain_adapter.query() only returned
|
|
136
|
+
items with source="crew" or source="jam", so the `source == "brain"`
|
|
137
|
+
filter always dropped every item, making this function silently return [].
|
|
138
|
+
Fix: route directly to brain_adapter, which queries the wicked-brain FTS5
|
|
139
|
+
index. Returns [] gracefully when brain is unavailable.
|
|
140
|
+
"""
|
|
141
|
+
try:
|
|
142
|
+
from adapters import brain_adapter
|
|
143
|
+
items = await brain_adapter.query(task)
|
|
144
|
+
results = []
|
|
145
|
+
for item in items:
|
|
146
|
+
results.append({
|
|
147
|
+
"title": getattr(item, "title", ""),
|
|
148
|
+
"summary": getattr(item, "summary", "")[:200],
|
|
149
|
+
"type": getattr(item, "metadata", {}).get("type", "unknown"),
|
|
150
|
+
})
|
|
151
|
+
if len(results) >= limit:
|
|
152
|
+
break
|
|
153
|
+
return results
|
|
154
|
+
except Exception:
|
|
155
|
+
return []
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
async def gather_code_context(task: str, files: list = None, limit: int = 5) -> list:
|
|
159
|
+
"""Query domain adapter for relevant code context.
|
|
160
|
+
|
|
161
|
+
Source-agnostic: returns items from any adapter (brain, domain, etc.).
|
|
162
|
+
The former source=="search" filter was removed because no adapter emits
|
|
163
|
+
source="search" — items come from brain/domain adapters instead.
|
|
164
|
+
"""
|
|
165
|
+
try:
|
|
166
|
+
from adapters import domain_adapter
|
|
167
|
+
items = await domain_adapter.query(task)
|
|
168
|
+
results = []
|
|
169
|
+
for item in items:
|
|
170
|
+
results.append({
|
|
171
|
+
"title": getattr(item, "title", ""),
|
|
172
|
+
"file": getattr(item, "metadata", {}).get("file", ""),
|
|
173
|
+
"summary": getattr(item, "summary", "")[:200],
|
|
174
|
+
})
|
|
175
|
+
if len(results) >= limit:
|
|
176
|
+
break
|
|
177
|
+
return results
|
|
178
|
+
except Exception:
|
|
179
|
+
return []
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
def get_session_state() -> dict:
|
|
183
|
+
"""Get current session state from SessionState (v6).
|
|
184
|
+
|
|
185
|
+
Replaces the v5 HistoryCondenser.get_session_state() read. The v5 condenser
|
|
186
|
+
maintained a "ticket rail" (current_task, topics, decisions, constraints,
|
|
187
|
+
file_scope, open_questions) that is no longer tracked — v6 relies on the
|
|
188
|
+
facilitator's process-plan.md for the durable plan view, and SessionState
|
|
189
|
+
for per-session flags.
|
|
190
|
+
|
|
191
|
+
Returns whatever SessionState exposes as a dict, or {} on failure. Callers
|
|
192
|
+
that expected the v5 ticket-rail keys should treat missing keys as "".
|
|
193
|
+
"""
|
|
194
|
+
try:
|
|
195
|
+
# scripts/smaht/context_package.py — scripts/ is parents[1]
|
|
196
|
+
import sys
|
|
197
|
+
from pathlib import Path
|
|
198
|
+
_SCRIPTS_DIR = Path(__file__).resolve().parents[1]
|
|
199
|
+
if str(_SCRIPTS_DIR) not in sys.path:
|
|
200
|
+
sys.path.insert(0, str(_SCRIPTS_DIR))
|
|
201
|
+
from _session import SessionState
|
|
202
|
+
state = SessionState.load()
|
|
203
|
+
if hasattr(state, "to_dict"):
|
|
204
|
+
return state.to_dict()
|
|
205
|
+
# Fallback: best-effort dataclass/attr snapshot
|
|
206
|
+
return {k: v for k, v in vars(state).items() if not k.startswith("_")}
|
|
207
|
+
except Exception:
|
|
208
|
+
return {}
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
async def build_package(task: str, project: str = None, files: list = None,
|
|
212
|
+
include_ecosystem: bool = False) -> dict:
|
|
213
|
+
"""Build a structured context package for a subagent.
|
|
214
|
+
|
|
215
|
+
This is the core function — assembles task-scoped context from
|
|
216
|
+
wicked-brain (decisions, constraints) and wicked-garden:search (code context),
|
|
217
|
+
plus session state from the history condenser.
|
|
218
|
+
|
|
219
|
+
Args:
|
|
220
|
+
task: Task description for the subagent
|
|
221
|
+
project: Crew project name (optional)
|
|
222
|
+
files: Explicit file scope (optional)
|
|
223
|
+
include_ecosystem: Include ecosystem orientation (tools, skills, plugins)
|
|
224
|
+
"""
|
|
225
|
+
# Gather from multiple sources in parallel
|
|
226
|
+
mem_task = gather_memories(task)
|
|
227
|
+
code_task = gather_code_context(task, files)
|
|
228
|
+
|
|
229
|
+
memories, code_context = await asyncio.gather(mem_task, code_task)
|
|
230
|
+
|
|
231
|
+
# Get session state (sync)
|
|
232
|
+
session = get_session_state()
|
|
233
|
+
|
|
234
|
+
# Extract typed fields from session state
|
|
235
|
+
constraints = session.get("active_constraints", [])
|
|
236
|
+
decisions = session.get("decisions", [])
|
|
237
|
+
file_scope = files or session.get("file_scope", [])
|
|
238
|
+
current_task = session.get("current_task", "")
|
|
239
|
+
|
|
240
|
+
# Get project state if available (via DomainStore)
|
|
241
|
+
project_state = {}
|
|
242
|
+
if project:
|
|
243
|
+
try:
|
|
244
|
+
sm = DomainStore("wicked-crew")
|
|
245
|
+
data = sm.get("projects", project)
|
|
246
|
+
if data:
|
|
247
|
+
project_state = {
|
|
248
|
+
"phase": data.get("current_phase", ""),
|
|
249
|
+
"complexity": data.get("complexity_score", 0),
|
|
250
|
+
"signals": data.get("signals_detected", []),
|
|
251
|
+
}
|
|
252
|
+
except Exception:
|
|
253
|
+
pass # fail open: crew data optional
|
|
254
|
+
|
|
255
|
+
package = {
|
|
256
|
+
"task": task,
|
|
257
|
+
"current_task": current_task,
|
|
258
|
+
"constraints": constraints,
|
|
259
|
+
"decisions": decisions,
|
|
260
|
+
"files": file_scope,
|
|
261
|
+
"code_context": code_context,
|
|
262
|
+
"memories": memories,
|
|
263
|
+
"project_state": project_state,
|
|
264
|
+
"session_topics": session.get("topics", []),
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
# Add ecosystem orientation for dispatch mode
|
|
268
|
+
if include_ecosystem:
|
|
269
|
+
package["ecosystem"] = build_ecosystem_orientation()
|
|
270
|
+
|
|
271
|
+
return package
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
def format_as_prompt(package: dict) -> str:
|
|
275
|
+
"""Format a context package as a prompt section for subagent injection.
|
|
276
|
+
|
|
277
|
+
This converts the structured JSON into a readable prompt block that
|
|
278
|
+
can be included in Task() dispatches.
|
|
279
|
+
"""
|
|
280
|
+
lines = ["## Context Package", ""]
|
|
281
|
+
|
|
282
|
+
if package.get("task"):
|
|
283
|
+
lines.append(f"**Task**: {package['task']}")
|
|
284
|
+
if package.get("current_task"):
|
|
285
|
+
lines.append(f"**Session task**: {package['current_task']}")
|
|
286
|
+
lines.append("")
|
|
287
|
+
|
|
288
|
+
# Ecosystem orientation (dispatch mode) — goes first so subagent
|
|
289
|
+
# knows what tools are available before reading the task context
|
|
290
|
+
eco = package.get("ecosystem")
|
|
291
|
+
if eco:
|
|
292
|
+
lines.append("### Available Tools & Skills")
|
|
293
|
+
if eco.get("built_in_tools"):
|
|
294
|
+
for tool in eco["built_in_tools"]:
|
|
295
|
+
lines.append(f"- {tool}")
|
|
296
|
+
if eco.get("key_skills"):
|
|
297
|
+
lines.append("")
|
|
298
|
+
lines.append("**Ecosystem skills** (from installed plugins):")
|
|
299
|
+
for skill in eco["key_skills"]:
|
|
300
|
+
lines.append(f"- {skill}")
|
|
301
|
+
lines.append("")
|
|
302
|
+
|
|
303
|
+
if package.get("decisions"):
|
|
304
|
+
lines.append("### Decisions Made")
|
|
305
|
+
for d in package["decisions"]:
|
|
306
|
+
lines.append(f"- {d}")
|
|
307
|
+
lines.append("")
|
|
308
|
+
|
|
309
|
+
if package.get("constraints"):
|
|
310
|
+
lines.append("### Active Constraints")
|
|
311
|
+
for c in package["constraints"]:
|
|
312
|
+
lines.append(f"- {c}")
|
|
313
|
+
lines.append("")
|
|
314
|
+
|
|
315
|
+
if package.get("files"):
|
|
316
|
+
lines.append("### File Scope")
|
|
317
|
+
for f in package["files"][:10]:
|
|
318
|
+
lines.append(f"- `{f}`")
|
|
319
|
+
lines.append("")
|
|
320
|
+
|
|
321
|
+
if package.get("code_context"):
|
|
322
|
+
lines.append("### Relevant Code")
|
|
323
|
+
for c in package["code_context"]:
|
|
324
|
+
title = c.get("title", "")
|
|
325
|
+
file = c.get("file", "")
|
|
326
|
+
summary = c.get("summary", "")
|
|
327
|
+
lines.append(f"- **{title}** (`{file}`): {summary}")
|
|
328
|
+
lines.append("")
|
|
329
|
+
|
|
330
|
+
if package.get("memories"):
|
|
331
|
+
lines.append("### Relevant Memories")
|
|
332
|
+
for m in package["memories"]:
|
|
333
|
+
lines.append(f"- [{m.get('type', '')}] **{m.get('title', '')}**: {m.get('summary', '')}")
|
|
334
|
+
lines.append("")
|
|
335
|
+
|
|
336
|
+
if package.get("project_state"):
|
|
337
|
+
ps = package["project_state"]
|
|
338
|
+
if ps.get("phase"):
|
|
339
|
+
lines.append("### Project State")
|
|
340
|
+
lines.append(f"- Phase: {ps['phase']}")
|
|
341
|
+
if ps.get("complexity"):
|
|
342
|
+
lines.append(f"- Complexity: {ps['complexity']}/7")
|
|
343
|
+
if ps.get("signals"):
|
|
344
|
+
lines.append(f"- Signals: {', '.join(ps['signals'])}")
|
|
345
|
+
lines.append("")
|
|
346
|
+
|
|
347
|
+
# Conciseness guidance for subagents (replaces PreToolUse pressure gate)
|
|
348
|
+
if eco:
|
|
349
|
+
lines.append("### Output Guidance")
|
|
350
|
+
lines.append("Keep responses focused and concise. Return structured data (JSON) "
|
|
351
|
+
"when possible. For CLI outputs or evidence artifacts, summarize "
|
|
352
|
+
"rather than including verbatim. The parent orchestrator manages "
|
|
353
|
+
"context pressure — help by keeping your output lean.")
|
|
354
|
+
lines.append("")
|
|
355
|
+
|
|
356
|
+
return "\n".join(lines)
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
def main():
|
|
360
|
+
parser = argparse.ArgumentParser(description="Build structured context packages for subagents")
|
|
361
|
+
parser.add_argument("command", choices=["build", "format"], help="Command to run")
|
|
362
|
+
parser.add_argument("--task", required=True, help="Task description for the subagent")
|
|
363
|
+
parser.add_argument("--project", help="Crew project name (optional)")
|
|
364
|
+
parser.add_argument("--files", nargs="*", help="Explicit file scope (optional)")
|
|
365
|
+
parser.add_argument("--json", action="store_true", help="Output as JSON")
|
|
366
|
+
parser.add_argument("--prompt", action="store_true", help="Output as formatted prompt section")
|
|
367
|
+
parser.add_argument("--dispatch", action="store_true",
|
|
368
|
+
help="Include ecosystem orientation (tools, skills, plugins) for subagent dispatch")
|
|
369
|
+
|
|
370
|
+
args = parser.parse_args()
|
|
371
|
+
|
|
372
|
+
include_ecosystem = args.dispatch
|
|
373
|
+
package = asyncio.run(build_package(args.task, args.project, args.files,
|
|
374
|
+
include_ecosystem=include_ecosystem))
|
|
375
|
+
|
|
376
|
+
if args.command == "format" or args.prompt:
|
|
377
|
+
print(format_as_prompt(package))
|
|
378
|
+
elif args.json:
|
|
379
|
+
print(json.dumps(package, indent=2))
|
|
380
|
+
else:
|
|
381
|
+
# Default: formatted prompt
|
|
382
|
+
print(format_as_prompt(package))
|
|
383
|
+
|
|
384
|
+
|
|
385
|
+
if __name__ == "__main__":
|
|
386
|
+
main()
|