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.
Files changed (640) hide show
  1. package/.claude-plugin/archetypes.json +166 -0
  2. package/.claude-plugin/components.json +75 -0
  3. package/.claude-plugin/marketplace.json +15 -0
  4. package/.claude-plugin/plugin.json +174 -0
  5. package/.claude-plugin/specialist.json +48 -0
  6. package/.claude-plugin/stack-registry.json +96 -0
  7. package/AGENTS.md +13 -0
  8. package/CHANGELOG.md +712 -0
  9. package/CONTRIBUTING.md +99 -0
  10. package/ETHOS.md +83 -0
  11. package/LICENSE +21 -0
  12. package/README.md +115 -0
  13. package/WICKED_GARDEN_BUS_EVENTS.md +149 -0
  14. package/agents/agentic/architect.md +449 -0
  15. package/agents/agentic/performance-analyst.md +702 -0
  16. package/agents/agentic/safety-reviewer.md +662 -0
  17. package/agents/crew/implementer.md +163 -0
  18. package/agents/crew/researcher.md +94 -0
  19. package/agents/crew/reviewer.md +184 -0
  20. package/agents/data/data-engineer.md +227 -0
  21. package/agents/engineering/api-documentarian.md +440 -0
  22. package/agents/engineering/migration-engineer.md +301 -0
  23. package/agents/engineering/solution-architect.md +208 -0
  24. package/agents/jam/brainstorm-facilitator.md +297 -0
  25. package/agents/jam/council.md +322 -0
  26. package/agents/jam/quick-facilitator.md +85 -0
  27. package/agents/persona/persona-agent.md +121 -0
  28. package/agents/platform/compliance-officer.md +266 -0
  29. package/agents/platform/privacy-expert.md +496 -0
  30. package/agents/platform/security-engineer.md +287 -0
  31. package/agents/product/a11y-expert.md +323 -0
  32. package/agents/product/requirements-analyst.md +238 -0
  33. package/agents/product/ui-reviewer.md +180 -0
  34. package/agents/product/ux-designer.md +199 -0
  35. package/agents/product/value-strategist.md +269 -0
  36. package/agents/qe/semantic-reviewer.md +78 -0
  37. package/commands/agentic/audit.md +24 -0
  38. package/commands/agentic/design.md +24 -0
  39. package/commands/agentic/frameworks.md +25 -0
  40. package/commands/agentic/review.md +27 -0
  41. package/commands/archetype/build.md +12 -0
  42. package/commands/archetype/decide.md +12 -0
  43. package/commands/archetype/explore.md +12 -0
  44. package/commands/archetype/incident.md +12 -0
  45. package/commands/archetype/migrate.md +12 -0
  46. package/commands/archetype/modernize.md +12 -0
  47. package/commands/archetype/review.md +14 -0
  48. package/commands/archetype/ship.md +12 -0
  49. package/commands/archetype/specify.md +12 -0
  50. package/commands/archetype/triage.md +12 -0
  51. package/commands/compile.md +37 -0
  52. package/commands/data/analyze.md +18 -0
  53. package/commands/data/data.md +21 -0
  54. package/commands/data/ml.md +18 -0
  55. package/commands/data/ontology.md +22 -0
  56. package/commands/data/pipeline.md +17 -0
  57. package/commands/deliberate.md +181 -0
  58. package/commands/engineering/add-field.md +77 -0
  59. package/commands/engineering/apply.md +58 -0
  60. package/commands/engineering/arch.md +26 -0
  61. package/commands/engineering/debug.md +27 -0
  62. package/commands/engineering/docs.md +27 -0
  63. package/commands/engineering/new-generator.md +257 -0
  64. package/commands/engineering/patch-plan.md +59 -0
  65. package/commands/engineering/plan.md +29 -0
  66. package/commands/engineering/remove.md +48 -0
  67. package/commands/engineering/rename.md +44 -0
  68. package/commands/engineering/review.md +32 -0
  69. package/commands/help.md +128 -0
  70. package/commands/install.md +118 -0
  71. package/commands/intent.md +54 -0
  72. package/commands/jam/brainstorm.md +37 -0
  73. package/commands/jam/council.md +49 -0
  74. package/commands/jam/quick.md +21 -0
  75. package/commands/jam/revisit.md +79 -0
  76. package/commands/persona/as.md +136 -0
  77. package/commands/persona/define.md +24 -0
  78. package/commands/persona/list.md +118 -0
  79. package/commands/platform/actions.md +20 -0
  80. package/commands/platform/assert.md +18 -0
  81. package/commands/platform/audit.md +23 -0
  82. package/commands/platform/compliance.md +20 -0
  83. package/commands/platform/gh.md +22 -0
  84. package/commands/platform/health.md +22 -0
  85. package/commands/platform/incident.md +23 -0
  86. package/commands/platform/infra.md +24 -0
  87. package/commands/platform/peer-health.md +103 -0
  88. package/commands/platform/plugin-health.md +58 -0
  89. package/commands/platform/security.md +38 -0
  90. package/commands/platform/toolchain.md +96 -0
  91. package/commands/platform/traces.md +20 -0
  92. package/commands/product/a11y.md +19 -0
  93. package/commands/product/acceptance.md +19 -0
  94. package/commands/product/align.md +20 -0
  95. package/commands/product/analyze.md +23 -0
  96. package/commands/product/elicit.md +19 -0
  97. package/commands/product/listen.md +24 -0
  98. package/commands/product/mockup.md +20 -0
  99. package/commands/product/screenshot.md +19 -0
  100. package/commands/product/strategy.md +40 -0
  101. package/commands/product/synthesize.md +23 -0
  102. package/commands/product/ux-review.md +42 -0
  103. package/commands/product/ux.md +20 -0
  104. package/commands/product/visual-direction.md +34 -0
  105. package/commands/prove.md +47 -0
  106. package/commands/report-issue.md +243 -0
  107. package/commands/reset.md +144 -0
  108. package/commands/search/blast-radius.md +58 -0
  109. package/commands/search/hotspots.md +55 -0
  110. package/commands/search/index.md +38 -0
  111. package/commands/search/lineage.md +47 -0
  112. package/commands/search/service-map.md +79 -0
  113. package/commands/setup.md +363 -0
  114. package/commands/smaht/briefing.md +200 -0
  115. package/commands/smaht/events-import.md +95 -0
  116. package/commands/smaht/state.md +19 -0
  117. package/commands/where-am-i.md +58 -0
  118. package/docs/README.md +32 -0
  119. package/docs/adr/0001-code-relationship-graph-engine.md +116 -0
  120. package/docs/adr/0002-major-cleanup-keep-cut.md +91 -0
  121. package/docs/adr/0003-peers-gate-required-layers-optin.md +41 -0
  122. package/docs/adr/0004-code-graph-moves-to-wicked-brain.md +47 -0
  123. package/docs/brain-chunk-format.md +135 -0
  124. package/docs/compiler.md +95 -0
  125. package/docs/daemon-api.md +70 -0
  126. package/docs/domains.md +197 -0
  127. package/docs/getting-started.md +208 -0
  128. package/docs/plans/2026-06-08-wicked-loom-conduct.md +1337 -0
  129. package/docs/plans/2026-06-08-wicked-loom-contract.md +638 -0
  130. package/docs/plans/2026-06-08-wicked-loom-cutover.md +1300 -0
  131. package/docs/plans/2026-06-08-wicked-loom-expand-compose.md +843 -0
  132. package/docs/plans/2026-06-08-wicked-loom-flow-cutover.md +403 -0
  133. package/docs/plans/2026-06-10-codegraph-to-brain-phase1a-graph-core.md +838 -0
  134. package/docs/plans/2026-06-10-codegraph-to-brain-phase1b-injected-edges.md +44 -0
  135. package/docs/required-peers.md +60 -0
  136. package/docs/specs/2026-06-08-wicked-loom-extraction.md +225 -0
  137. package/docs/specs/2026-06-10-codegraph-to-brain-migration.md +168 -0
  138. package/docs/v11/archetypes.md +231 -0
  139. package/hooks/hooks.json +275 -0
  140. package/hooks/scripts/bootstrap.py +1797 -0
  141. package/hooks/scripts/invoke.py +62 -0
  142. package/hooks/scripts/notification.py +166 -0
  143. package/hooks/scripts/permission_request.py +223 -0
  144. package/hooks/scripts/post_tool.py +1374 -0
  145. package/hooks/scripts/pre_compact.py +272 -0
  146. package/hooks/scripts/pre_tool.py +1278 -0
  147. package/hooks/scripts/prompt_submit.py +1109 -0
  148. package/hooks/scripts/session_end.py +95 -0
  149. package/hooks/scripts/stop.py +624 -0
  150. package/hooks/scripts/subagent_lifecycle.py +464 -0
  151. package/hooks/scripts/subscribers/on_gate_decided.py +84 -0
  152. package/hooks/scripts/task_completed.py +322 -0
  153. package/hooks/scripts/worktree_guard.py +148 -0
  154. package/hooks/subscriptions/on_gate_decided.json +9 -0
  155. package/install.mjs +128 -0
  156. package/package.json +41 -0
  157. package/pyproject.toml +59 -0
  158. package/schemas/README.md +32 -0
  159. package/schemas/assert_contracts.json +37 -0
  160. package/schemas/health_probe.json +46 -0
  161. package/schemas/plugin_status.json +37 -0
  162. package/scripts/_adapters/__init__.py +166 -0
  163. package/scripts/_adapters/jira_adapter.py +18 -0
  164. package/scripts/_adapters/linear_adapter.py +18 -0
  165. package/scripts/_adapters/miro_adapter.py +18 -0
  166. package/scripts/_adapters/notion_adapter.py +18 -0
  167. package/scripts/_agents.py +357 -0
  168. package/scripts/_brain_ingest/__init__.py +2 -0
  169. package/scripts/_brain_ingest/session_fact_extractor.py +341 -0
  170. package/scripts/_brain_port.py +163 -0
  171. package/scripts/_bus.py +1081 -0
  172. package/scripts/_bus_catalog_gen.py +93 -0
  173. package/scripts/_bus_consumers.json +46 -0
  174. package/scripts/_bus_emit.py +43 -0
  175. package/scripts/_capability_registry.py +334 -0
  176. package/scripts/_capability_resolver.py +322 -0
  177. package/scripts/_domain_store.py +559 -0
  178. package/scripts/_event_log_reader.py +154 -0
  179. package/scripts/_event_schema.py +305 -0
  180. package/scripts/_event_store.py +397 -0
  181. package/scripts/_heavy_cadence.py +324 -0
  182. package/scripts/_integration_resolver.py +321 -0
  183. package/scripts/_logger.py +151 -0
  184. package/scripts/_loom.py +482 -0
  185. package/scripts/_paths.py +133 -0
  186. package/scripts/_python.sh +22 -0
  187. package/scripts/_run.py +137 -0
  188. package/scripts/_session.py +502 -0
  189. package/scripts/_validate_registry.py +1042 -0
  190. package/scripts/_wicked_testing_probe.py +277 -0
  191. package/scripts/agentic/analyze_agents.py +391 -0
  192. package/scripts/agentic/detect_framework.py +420 -0
  193. package/scripts/agentic/issue_taxonomy.py +357 -0
  194. package/scripts/agentic/pattern_scorer.py +434 -0
  195. package/scripts/classify/persist.py +169 -0
  196. package/scripts/compiler/compile.py +552 -0
  197. package/scripts/compiler/phase0/VERDICT.md +60 -0
  198. package/scripts/compiler/phase0/detect.py +292 -0
  199. package/scripts/compiler/phase0/emit.py +228 -0
  200. package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.bindings.json +30 -0
  201. package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.lint-output.txt +17 -0
  202. package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/.wg/evidence/failing-tests.txt +4 -0
  203. package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/.wg/evidence/honest-tests.txt +2 -0
  204. package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/fab-fail.build.md +8 -0
  205. package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/fab-missing.build.md +8 -0
  206. package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/honest.build.md +8 -0
  207. package/scripts/compiler/phase0/evidence/Enterprise-AISDLC.stage/wg_check_claims.py +174 -0
  208. package/scripts/compiler/phase0/evidence/command_iq.bindings.json +45 -0
  209. package/scripts/compiler/phase0/evidence/command_iq.lint-output.txt +17 -0
  210. package/scripts/compiler/phase0/evidence/command_iq.stage/.projects/evidence-domain/phase-1-clarify/evidence/failing-tests.txt +4 -0
  211. package/scripts/compiler/phase0/evidence/command_iq.stage/.projects/evidence-domain/phase-1-clarify/evidence/honest-tests.txt +3 -0
  212. package/scripts/compiler/phase0/evidence/command_iq.stage/fab-fail.build.md +8 -0
  213. package/scripts/compiler/phase0/evidence/command_iq.stage/fab-missing.build.md +8 -0
  214. package/scripts/compiler/phase0/evidence/command_iq.stage/honest.build.md +8 -0
  215. package/scripts/compiler/phase0/evidence/command_iq.stage/wg_check_claims.py +174 -0
  216. package/scripts/compiler/phase0/evidence/memos.bindings.json +28 -0
  217. package/scripts/compiler/phase0/evidence/memos.lint-output.txt +17 -0
  218. package/scripts/compiler/phase0/evidence/memos.stage/.wg/evidence/failing-tests.txt +4 -0
  219. package/scripts/compiler/phase0/evidence/memos.stage/.wg/evidence/honest-tests.txt +2 -0
  220. package/scripts/compiler/phase0/evidence/memos.stage/fab-fail.build.md +8 -0
  221. package/scripts/compiler/phase0/evidence/memos.stage/fab-missing.build.md +8 -0
  222. package/scripts/compiler/phase0/evidence/memos.stage/honest.build.md +8 -0
  223. package/scripts/compiler/phase0/evidence/memos.stage/wg_check_claims.py +174 -0
  224. package/scripts/compiler/phase0/evidence/verdict.json +104 -0
  225. package/scripts/compiler/phase0/evidence/wicked-bus.bindings.json +29 -0
  226. package/scripts/compiler/phase0/evidence/wicked-bus.lint-output.txt +17 -0
  227. package/scripts/compiler/phase0/evidence/wicked-bus.stage/coverage/failing-tests.txt +4 -0
  228. package/scripts/compiler/phase0/evidence/wicked-bus.stage/coverage/honest-tests.txt +3 -0
  229. package/scripts/compiler/phase0/evidence/wicked-bus.stage/fab-fail.build.md +8 -0
  230. package/scripts/compiler/phase0/evidence/wicked-bus.stage/fab-missing.build.md +8 -0
  231. package/scripts/compiler/phase0/evidence/wicked-bus.stage/honest.build.md +8 -0
  232. package/scripts/compiler/phase0/evidence/wicked-bus.stage/wg_check_claims.py +174 -0
  233. package/scripts/compiler/phase0/evidence/wire-vault-transcript.txt +60 -0
  234. package/scripts/compiler/phase0/run_probe.py +234 -0
  235. package/scripts/compiler/phase0/wire_vault.py +310 -0
  236. package/scripts/crew/__init__.py +0 -0
  237. package/scripts/crew/_task_audit_writer.py +243 -0
  238. package/scripts/crew/_task_reader.py +389 -0
  239. package/scripts/crew/archetypes_v11.py +348 -0
  240. package/scripts/crew/detectors/__init__.py +12 -0
  241. package/scripts/crew/flow_compiler.py +121 -0
  242. package/scripts/crew/phase_manager.py +703 -0
  243. package/scripts/crew/scope_delta.py +264 -0
  244. package/scripts/crew/specialist_resolver.py +218 -0
  245. package/scripts/crew/stack_registry.py +189 -0
  246. package/scripts/data/data_profiler.py +271 -0
  247. package/scripts/data/ontology_recommender.py +231 -0
  248. package/scripts/data/schema_validator.py +267 -0
  249. package/scripts/delivery/drift.py +739 -0
  250. package/scripts/delivery/telemetry.py +614 -0
  251. package/scripts/engineering/patch/codegraph_db.py +125 -0
  252. package/scripts/engineering/patch/generators/__init__.py +56 -0
  253. package/scripts/engineering/patch/generators/base.py +373 -0
  254. package/scripts/engineering/patch/generators/csharp_generator.py +494 -0
  255. package/scripts/engineering/patch/generators/go_generator.py +430 -0
  256. package/scripts/engineering/patch/generators/java_generator.py +928 -0
  257. package/scripts/engineering/patch/generators/jsp_generator.py +454 -0
  258. package/scripts/engineering/patch/generators/kotlin_generator.py +561 -0
  259. package/scripts/engineering/patch/generators/perl_generator.py +510 -0
  260. package/scripts/engineering/patch/generators/php_generator.py +644 -0
  261. package/scripts/engineering/patch/generators/propagation_engine.py +929 -0
  262. package/scripts/engineering/patch/generators/python_generator.py +487 -0
  263. package/scripts/engineering/patch/generators/ruby_generator.py +463 -0
  264. package/scripts/engineering/patch/generators/rust_generator.py +400 -0
  265. package/scripts/engineering/patch/generators/sql_generator.py +594 -0
  266. package/scripts/engineering/patch/generators/typescript_generator.py +439 -0
  267. package/scripts/engineering/patch/patch.py +800 -0
  268. package/scripts/engineering/patch/safety.py +429 -0
  269. package/scripts/jam/__init__.py +0 -0
  270. package/scripts/jam/_bus_consumers.py +271 -0
  271. package/scripts/jam/agentic_cli_registry.py +703 -0
  272. package/scripts/jam/consensus.py +737 -0
  273. package/scripts/jam/detect_clis.py +409 -0
  274. package/scripts/jam/jam.py +283 -0
  275. package/scripts/jam/save_transcript.py +171 -0
  276. package/scripts/loom/__init__.py +22 -0
  277. package/scripts/loom/cli.py +170 -0
  278. package/scripts/loom/compose.py +180 -0
  279. package/scripts/loom/gate.py +120 -0
  280. package/scripts/loom/manifest.py +140 -0
  281. package/scripts/loom/resolve.py +59 -0
  282. package/scripts/persona/__init__.py +0 -0
  283. package/scripts/persona/registry.py +688 -0
  284. package/scripts/platform/guard_pipeline.py +1214 -0
  285. package/scripts/platform/guard_profiles.py +216 -0
  286. package/scripts/platform/observability/assert_contracts.py +434 -0
  287. package/scripts/platform/observability/health_probe.py +915 -0
  288. package/scripts/platform/observability/ops_log_viewer.py +209 -0
  289. package/scripts/platform/prereq_doctor.py +567 -0
  290. package/scripts/qe/conditions_manifest.py +260 -0
  291. package/scripts/qe/content_sanitizer.py +160 -0
  292. package/scripts/qe/coverage_tracker.py +535 -0
  293. package/scripts/qe/discover_scenarios.py +243 -0
  294. package/scripts/qe/evidence_tracker.py +232 -0
  295. package/scripts/qe/prove.py +196 -0
  296. package/scripts/qe/registry_lookup.py +80 -0
  297. package/scripts/qe/registry_store.py +176 -0
  298. package/scripts/qe/semantic_review.py +1005 -0
  299. package/scripts/qe/vault_gate.py +382 -0
  300. package/scripts/qe/verdict_audit.py +175 -0
  301. package/scripts/qe/verdict_schema.py +335 -0
  302. package/scripts/reset.py +220 -0
  303. package/scripts/resolve_path.py +22 -0
  304. package/scripts/sentinel/invariants.py +402 -0
  305. package/scripts/sentinel/pre_push.py +73 -0
  306. package/scripts/setup/__init__.py +1 -0
  307. package/scripts/setup/detect_state.py +114 -0
  308. package/scripts/setup/migrate_legacy.py +67 -0
  309. package/scripts/setup/migrate_v6_projects.py +232 -0
  310. package/scripts/setup/onboarding.py +114 -0
  311. package/scripts/smaht/_bus_consumers.py +98 -0
  312. package/scripts/smaht/adapters/__init__.py +83 -0
  313. package/scripts/smaht/adapters/brain_adapter.py +254 -0
  314. package/scripts/smaht/adapters/context7_adapter.py +438 -0
  315. package/scripts/smaht/adapters/delegation_adapter.py +104 -0
  316. package/scripts/smaht/adapters/domain_adapter.py +206 -0
  317. package/scripts/smaht/adapters/events_adapter.py +231 -0
  318. package/scripts/smaht/adapters/tools_adapter.py +49 -0
  319. package/scripts/smaht/cheatsheet_store.py +236 -0
  320. package/scripts/smaht/context_package.py +386 -0
  321. package/scripts/smaht/knowledge_graph.py +395 -0
  322. package/scripts/smaht/propose_skills.py +856 -0
  323. package/scripts/smaht/test_cheatsheet_store.py +428 -0
  324. package/scripts/statusline.py +151 -0
  325. package/scripts/where_am_i.py +236 -0
  326. package/skills/agentic/agentic-patterns/SKILL.md +91 -0
  327. package/skills/agentic/agentic-patterns/refs/anti-patterns-design.md +283 -0
  328. package/skills/agentic/agentic-patterns/refs/anti-patterns-operational.md +216 -0
  329. package/skills/agentic/agentic-patterns/refs/pattern-catalog.md +329 -0
  330. package/skills/agentic/context-engineering/SKILL.md +142 -0
  331. package/skills/agentic/context-engineering/refs/caching-and-optimization.md +251 -0
  332. package/skills/agentic/context-engineering/refs/compression-techniques.md +171 -0
  333. package/skills/agentic/context-engineering/refs/cost-calculation-budget.md +250 -0
  334. package/skills/agentic/context-engineering/refs/cost-optimization-reporting.md +300 -0
  335. package/skills/agentic/context-engineering/refs/selective-loading.md +179 -0
  336. package/skills/agentic/frameworks/SKILL.md +191 -0
  337. package/skills/agentic/frameworks/refs/framework-profiles-1.md +209 -0
  338. package/skills/agentic/frameworks/refs/framework-profiles-2.md +214 -0
  339. package/skills/agentic/frameworks/refs/migration-patterns-paths.md +267 -0
  340. package/skills/agentic/frameworks/refs/migration-patterns-testing.md +208 -0
  341. package/skills/agentic/refs/audit.md +134 -0
  342. package/skills/agentic/refs/design.md +137 -0
  343. package/skills/agentic/refs/frameworks.md +102 -0
  344. package/skills/agentic/refs/review.md +160 -0
  345. package/skills/agentic/review-methodology/SKILL.md +186 -0
  346. package/skills/agentic/review-methodology/refs/deliverable-templates.md +246 -0
  347. package/skills/agentic/review-methodology/refs/issue-taxonomy-quality-testing.md +277 -0
  348. package/skills/agentic/review-methodology/refs/issue-taxonomy-reliability-safety.md +253 -0
  349. package/skills/agentic/trust-and-safety/SKILL.md +177 -0
  350. package/skills/agentic/trust-and-safety/refs/guardrails-actions.md +246 -0
  351. package/skills/agentic/trust-and-safety/refs/guardrails-input-output.md +238 -0
  352. package/skills/agentic/trust-and-safety/refs/guardrails-resources.md +209 -0
  353. package/skills/agentic/trust-and-safety/refs/safety-checklist-advanced.md +209 -0
  354. package/skills/agentic/trust-and-safety/refs/safety-checklist-core.md +215 -0
  355. package/skills/archetype/SKILL.md +104 -0
  356. package/skills/archetype/refs/build.md +142 -0
  357. package/skills/archetype/refs/decide.md +117 -0
  358. package/skills/archetype/refs/explore.md +66 -0
  359. package/skills/archetype/refs/incident.md +149 -0
  360. package/skills/archetype/refs/migrate.md +170 -0
  361. package/skills/archetype/refs/modernize.md +187 -0
  362. package/skills/archetype/refs/review.md +145 -0
  363. package/skills/archetype/refs/ship.md +117 -0
  364. package/skills/archetype/refs/specify.md +108 -0
  365. package/skills/archetype/refs/triage.md +62 -0
  366. package/skills/classify/SKILL.md +157 -0
  367. package/skills/data/analysis/SKILL.md +125 -0
  368. package/skills/data/analysis/refs/templates.md +170 -0
  369. package/skills/data/data/SKILL.md +118 -0
  370. package/skills/data/data/refs/examples.md +235 -0
  371. package/skills/data/ml/SKILL.md +125 -0
  372. package/skills/data/ml/refs/templates.md +172 -0
  373. package/skills/data/pipeline/SKILL.md +136 -0
  374. package/skills/data/pipeline/refs/templates.md +175 -0
  375. package/skills/data/refs/analyze.md +123 -0
  376. package/skills/data/refs/data.md +95 -0
  377. package/skills/data/refs/ml.md +118 -0
  378. package/skills/data/refs/pipeline.md +92 -0
  379. package/skills/deliberate/SKILL.md +125 -0
  380. package/skills/deliberate/refs/architecture-lens.md +37 -0
  381. package/skills/deliberate/refs/assumptions-lens.md +43 -0
  382. package/skills/deliberate/refs/code-lens.md +38 -0
  383. package/skills/deliberate/refs/content-lens.md +37 -0
  384. package/skills/deliberate/refs/data-lens.md +43 -0
  385. package/skills/deliberate/refs/design-lens.md +37 -0
  386. package/skills/deliberate/refs/opportunity-patterns.md +107 -0
  387. package/skills/deliberate/refs/ops-lens.md +43 -0
  388. package/skills/deliberate/refs/product-lens.md +46 -0
  389. package/skills/deliberate/refs/rethink-framework.md +77 -0
  390. package/skills/deliberate/refs/security-lens.md +47 -0
  391. package/skills/deliberate/refs/testing-lens.md +45 -0
  392. package/skills/deliberate/refs/timing-lens.md +42 -0
  393. package/skills/engineering/architecture/SKILL.md +177 -0
  394. package/skills/engineering/architecture/refs/adr-template.md +268 -0
  395. package/skills/engineering/architecture/refs/architecture-template-deployment.md +176 -0
  396. package/skills/engineering/architecture/refs/architecture-template-design.md +300 -0
  397. package/skills/engineering/architecture/refs/examples-ecommerce-analytics.md +299 -0
  398. package/skills/engineering/architecture/refs/examples-saas-trading.md +291 -0
  399. package/skills/engineering/architecture/refs/patterns-advanced.md +238 -0
  400. package/skills/engineering/architecture/refs/patterns-structural.md +303 -0
  401. package/skills/engineering/backend/SKILL.md +102 -0
  402. package/skills/engineering/backend/refs/checklists.md +146 -0
  403. package/skills/engineering/backend/refs/patterns.md +181 -0
  404. package/skills/engineering/debugging/SKILL.md +99 -0
  405. package/skills/engineering/debugging/refs/patterns.md +248 -0
  406. package/skills/engineering/debugging/refs/process.md +203 -0
  407. package/skills/engineering/docs/SKILL.md +97 -0
  408. package/skills/engineering/engineering/SKILL.md +88 -0
  409. package/skills/engineering/engineering/refs/checklists.md +91 -0
  410. package/skills/engineering/engineering/refs/templates.md +71 -0
  411. package/skills/engineering/frontend/SKILL.md +92 -0
  412. package/skills/engineering/frontend/refs/checklists.md +96 -0
  413. package/skills/engineering/frontend/refs/patterns.md +167 -0
  414. package/skills/engineering/integration/SKILL.md +183 -0
  415. package/skills/engineering/integration/refs/error-handling-best-practices.md +139 -0
  416. package/skills/engineering/integration/refs/error-handling-error-classes-typescript.md +212 -0
  417. package/skills/engineering/integration/refs/error-handling-error-response-format.md +301 -0
  418. package/skills/engineering/integration/refs/error-handling-retry-strategies.md +190 -0
  419. package/skills/engineering/integration/refs/event-schemas-best-practices.md +225 -0
  420. package/skills/engineering/integration/refs/event-schemas-event-naming-conventions.md +303 -0
  421. package/skills/engineering/integration/refs/event-schemas-event-structure.md +288 -0
  422. package/skills/engineering/integration/refs/graphql-best-practices.md +138 -0
  423. package/skills/engineering/integration/refs/graphql-error-handling.md +198 -0
  424. package/skills/engineering/integration/refs/graphql-graphql-basics.md +197 -0
  425. package/skills/engineering/integration/refs/graphql-query-examples.md +226 -0
  426. package/skills/engineering/integration/refs/graphql-schema-design-patterns.md +280 -0
  427. package/skills/engineering/integration/refs/grpc-grpc-overview.md +246 -0
  428. package/skills/engineering/integration/refs/grpc-implementation-examples.md +269 -0
  429. package/skills/engineering/integration/refs/grpc-metadata-headers.md +304 -0
  430. package/skills/engineering/integration/refs/grpc-testing.md +49 -0
  431. package/skills/engineering/integration/refs/openapi-template.yaml +682 -0
  432. package/skills/engineering/integration/refs/resilience-best-practices.md +109 -0
  433. package/skills/engineering/integration/refs/resilience-circuit-breaker-pattern.md +302 -0
  434. package/skills/engineering/integration/refs/resilience-rate-limiting.md +245 -0
  435. package/skills/engineering/integration/refs/resilience-timeout-pattern.md +212 -0
  436. package/skills/engineering/integration/refs/rest-api-fundamentals.md +299 -0
  437. package/skills/engineering/integration/refs/rest-api-responses-security.md +302 -0
  438. package/skills/engineering/integration/refs/versioning-breaking-changes.md +237 -0
  439. package/skills/engineering/integration/refs/versioning-migration-strategies.md +257 -0
  440. package/skills/engineering/integration/refs/versioning-versioning-strategies.md +296 -0
  441. package/skills/engineering/large-scale-migration/SKILL.md +65 -0
  442. package/skills/engineering/patch/SKILL.md +184 -0
  443. package/skills/engineering/refs/arch.md +126 -0
  444. package/skills/engineering/refs/debug.md +142 -0
  445. package/skills/engineering/refs/docs.md +190 -0
  446. package/skills/engineering/refs/plan.md +109 -0
  447. package/skills/engineering/refs/review.md +138 -0
  448. package/skills/engineering/system-design/SKILL.md +154 -0
  449. package/skills/engineering/system-design/refs/anti-patterns-big-ball-of-mud.md +254 -0
  450. package/skills/engineering/system-design/refs/anti-patterns-circular-dependencies.md +241 -0
  451. package/skills/engineering/system-design/refs/anti-patterns-feature-envy.md +168 -0
  452. package/skills/engineering/system-design/refs/anti-patterns-god-object.md +247 -0
  453. package/skills/engineering/system-design/refs/component-template-lifecycle.md +210 -0
  454. package/skills/engineering/system-design/refs/component-template-maintenance.md +219 -0
  455. package/skills/engineering/system-design/refs/component-template-structure.md +276 -0
  456. package/skills/engineering/system-design/refs/dependencies-best-practices.md +260 -0
  457. package/skills/engineering/system-design/refs/dependencies-dependency-principles.md +295 -0
  458. package/skills/engineering/system-design/refs/dependencies-dependency-tracking.md +261 -0
  459. package/skills/engineering/system-design/refs/interface-template-lifecycle.md +211 -0
  460. package/skills/engineering/system-design/refs/interface-template-maintenance.md +212 -0
  461. package/skills/engineering/system-design/refs/interface-template-structure.md +269 -0
  462. package/skills/engineering/system-design/refs/patterns-dependency-injection.md +151 -0
  463. package/skills/engineering/system-design/refs/patterns-facade-pattern.md +257 -0
  464. package/skills/engineering/system-design/refs/patterns-layered-pattern.md +204 -0
  465. package/skills/engineering/system-design/refs/patterns-plugin-architecture.md +229 -0
  466. package/skills/engineering/unit-test-quality/SKILL.md +194 -0
  467. package/skills/ground/SKILL.md +130 -0
  468. package/skills/integration-discovery/SKILL.md +168 -0
  469. package/skills/integration-discovery/refs/capabilities.md +282 -0
  470. package/skills/integration-discovery/refs/cli-detection.md +295 -0
  471. package/skills/integration-discovery/refs/discovery-sources.md +233 -0
  472. package/skills/integration-discovery/refs/task-patterns.md +206 -0
  473. package/skills/jam/SKILL.md +45 -0
  474. package/skills/jam/refs/facilitation-patterns.md +125 -0
  475. package/skills/jam/refs/quick.md +64 -0
  476. package/skills/jam/refs/synthesis-patterns.md +114 -0
  477. package/skills/multi-model/SKILL.md +168 -0
  478. package/skills/multi-model/refs/aichat.md +119 -0
  479. package/skills/multi-model/refs/aider.md +100 -0
  480. package/skills/multi-model/refs/auditability.md +238 -0
  481. package/skills/multi-model/refs/codex.md +169 -0
  482. package/skills/multi-model/refs/context.md +306 -0
  483. package/skills/multi-model/refs/copilot.md +161 -0
  484. package/skills/multi-model/refs/examples.md +224 -0
  485. package/skills/multi-model/refs/gemini.md +185 -0
  486. package/skills/multi-model/refs/goose.md +112 -0
  487. package/skills/multi-model/refs/llm.md +124 -0
  488. package/skills/multi-model/refs/opencode.md +196 -0
  489. package/skills/multi-model/refs/orchestration.md +188 -0
  490. package/skills/multi-model/refs/pi.md +208 -0
  491. package/skills/persona/SKILL.md +144 -0
  492. package/skills/persona/refs/define.md +133 -0
  493. package/skills/platform/actions/refs/actions.md +114 -0
  494. package/skills/platform/audit/SKILL.md +174 -0
  495. package/skills/platform/audit/refs/audit.md +145 -0
  496. package/skills/platform/audit/refs/checklists-evidence-operations.md +144 -0
  497. package/skills/platform/audit/refs/checklists-gdpr-pci-evidence.md +213 -0
  498. package/skills/platform/audit/refs/checklists-soc2-hipaa.md +120 -0
  499. package/skills/platform/audit/refs/frameworks-gdpr-pci.md +225 -0
  500. package/skills/platform/audit/refs/frameworks-soc2-hipaa.md +228 -0
  501. package/skills/platform/compliance/SKILL.md +169 -0
  502. package/skills/platform/compliance/refs/checklists.md +303 -0
  503. package/skills/platform/compliance/refs/compliance.md +117 -0
  504. package/skills/platform/compliance/refs/frameworks.md +282 -0
  505. package/skills/platform/errors/SKILL.md +183 -0
  506. package/skills/platform/errors/refs/patterns.md +271 -0
  507. package/skills/platform/errors/refs/severity.md +264 -0
  508. package/skills/platform/gate-benchmark-rebaseline/SKILL.md +108 -0
  509. package/skills/platform/gh/refs/gh.md +105 -0
  510. package/skills/platform/gh-cli/SKILL.md +120 -0
  511. package/skills/platform/gh-cli/refs/automation.md +63 -0
  512. package/skills/platform/gh-cli/refs/gh-ops.md +103 -0
  513. package/skills/platform/gh-cli/refs/patterns.md +132 -0
  514. package/skills/platform/gh-cli/scripts/gh_ops.py +454 -0
  515. package/skills/platform/github-actions/SKILL.md +159 -0
  516. package/skills/platform/github-actions/refs/security.md +150 -0
  517. package/skills/platform/github-actions/refs/templates.md +230 -0
  518. package/skills/platform/github-actions/refs/troubleshooting.md +174 -0
  519. package/skills/platform/github-actions/scripts/workflow_gen.py +215 -0
  520. package/skills/platform/gitlab-ci/SKILL.md +140 -0
  521. package/skills/platform/gitlab-ci/refs/templates.md +223 -0
  522. package/skills/platform/gitlab-ci/refs/troubleshooting.md +213 -0
  523. package/skills/platform/glab-cli/SKILL.md +133 -0
  524. package/skills/platform/glab-cli/refs/ci-debugging.md +95 -0
  525. package/skills/platform/glab-cli/refs/glab-ops.md +78 -0
  526. package/skills/platform/glab-cli/refs/patterns.md +131 -0
  527. package/skills/platform/glab-cli/scripts/glab_ops.py +313 -0
  528. package/skills/platform/health/SKILL.md +177 -0
  529. package/skills/platform/health/refs/health.md +72 -0
  530. package/skills/platform/health/refs/sources.md +302 -0
  531. package/skills/platform/incident/refs/incident.md +136 -0
  532. package/skills/platform/infra/refs/infra.md +104 -0
  533. package/skills/platform/observability/SKILL.md +128 -0
  534. package/skills/platform/observability/refs/toolchain-discovery.md +243 -0
  535. package/skills/platform/prereq-doctor/SKILL.md +57 -0
  536. package/skills/platform/prereq-doctor/refs/tool-registry.md +58 -0
  537. package/skills/platform/traces/refs/traces.md +101 -0
  538. package/skills/product/acceptance-criteria/SKILL.md +193 -0
  539. package/skills/product/acceptance-criteria/refs/ac-anti-patterns.md +291 -0
  540. package/skills/product/acceptance-criteria/refs/ac-examples.md +277 -0
  541. package/skills/product/accessibility/SKILL.md +197 -0
  542. package/skills/product/accessibility/refs/aria-patterns-basics.md +250 -0
  543. package/skills/product/accessibility/refs/aria-patterns-dynamic.md +187 -0
  544. package/skills/product/accessibility/refs/aria-patterns-interactive.md +246 -0
  545. package/skills/product/accessibility/refs/audit-report-findings.md +248 -0
  546. package/skills/product/accessibility/refs/audit-report-results.md +276 -0
  547. package/skills/product/accessibility/refs/common-violations-html-css.md +270 -0
  548. package/skills/product/accessibility/refs/common-violations-interactive.md +303 -0
  549. package/skills/product/accessibility/refs/keyboard-testing-basics.md +222 -0
  550. package/skills/product/accessibility/refs/keyboard-testing-patterns.md +173 -0
  551. package/skills/product/accessibility/refs/screen-reader-testing-advanced.md +294 -0
  552. package/skills/product/accessibility/refs/screen-reader-testing-commands.md +255 -0
  553. package/skills/product/accessibility/refs/wcag-checklist.md +262 -0
  554. package/skills/product/analyze/SKILL.md +164 -0
  555. package/skills/product/analyze/refs/algorithms.md +238 -0
  556. package/skills/product/analyze/refs/sentiment-patterns.md +180 -0
  557. package/skills/product/imagery/SKILL.md +97 -0
  558. package/skills/product/imagery/alter/SKILL.md +105 -0
  559. package/skills/product/imagery/alter/refs/editing-reference.md +146 -0
  560. package/skills/product/imagery/create/SKILL.md +109 -0
  561. package/skills/product/imagery/create/refs/prompt-engineering.md +112 -0
  562. package/skills/product/imagery/create/refs/provider-reference.md +219 -0
  563. package/skills/product/imagery/review/SKILL.md +101 -0
  564. package/skills/product/imagery/review/refs/analysis-lenses.md +136 -0
  565. package/skills/product/imagery/review/refs/quality-gates.md +153 -0
  566. package/skills/product/imagery/scripts/analyze.sh +23 -0
  567. package/skills/product/imagery/scripts/edit.sh +14 -0
  568. package/skills/product/imagery/scripts/generate.sh +13 -0
  569. package/skills/product/imagery/scripts/provider.py +787 -0
  570. package/skills/product/listen/SKILL.md +175 -0
  571. package/skills/product/listen/refs/channels.md +220 -0
  572. package/skills/product/mockup/SKILL.md +106 -0
  573. package/skills/product/mockup/refs/templates.md +95 -0
  574. package/skills/product/refs/a11y.md +109 -0
  575. package/skills/product/refs/acceptance.md +79 -0
  576. package/skills/product/refs/align.md +67 -0
  577. package/skills/product/refs/analyze.md +77 -0
  578. package/skills/product/refs/elicit.md +67 -0
  579. package/skills/product/refs/listen.md +58 -0
  580. package/skills/product/refs/mockup.md +77 -0
  581. package/skills/product/refs/screenshot.md +59 -0
  582. package/skills/product/refs/strategy.md +77 -0
  583. package/skills/product/refs/synthesize.md +54 -0
  584. package/skills/product/refs/ux-review.md +68 -0
  585. package/skills/product/refs/ux.md +101 -0
  586. package/skills/product/requirements-analysis/SKILL.md +136 -0
  587. package/skills/product/requirements-analysis/refs/requirements-example-auth.md +264 -0
  588. package/skills/product/requirements-analysis/refs/requirements-example-export-integration.md +88 -0
  589. package/skills/product/requirements-analysis/refs/requirements-output-format-template.md +247 -0
  590. package/skills/product/requirements-analysis/refs/user-story-guide.md +296 -0
  591. package/skills/product/requirements-graph/SKILL.md +155 -0
  592. package/skills/product/requirements-graph/refs/examples.md +223 -0
  593. package/skills/product/requirements-graph/refs/schema.md +162 -0
  594. package/skills/product/requirements-migrate/SKILL.md +90 -0
  595. package/skills/product/requirements-navigate/SKILL.md +141 -0
  596. package/skills/product/requirements-navigate/refs/meta-templates.md +141 -0
  597. package/skills/product/screenshot/SKILL.md +147 -0
  598. package/skills/product/strategy/SKILL.md +198 -0
  599. package/skills/product/strategy/refs/frameworks.md +295 -0
  600. package/skills/product/strategy/refs/templates-competitive-market.md +299 -0
  601. package/skills/product/strategy/refs/templates-roi-value.md +207 -0
  602. package/skills/product/synthesize/SKILL.md +116 -0
  603. package/skills/product/synthesize/refs/journey-mapping.md +212 -0
  604. package/skills/product/synthesize/refs/prioritization.md +193 -0
  605. package/skills/product/ux-review/SKILL.md +164 -0
  606. package/skills/product/visual-direction/SKILL.md +137 -0
  607. package/skills/product/visual-review/SKILL.md +131 -0
  608. package/skills/runtime-exec/SKILL.md +138 -0
  609. package/skills/search/codebase-narrator/SKILL.md +131 -0
  610. package/skills/search/codebase-narrator/refs/output-template.md +100 -0
  611. package/skills/smaht/SKILL.md +72 -0
  612. package/skills/smaht/discovery/SKILL.md +65 -0
  613. package/skills/smaht/intent/SKILL.md +89 -0
  614. package/skills/smaht/propose-skills/SKILL.md +142 -0
  615. package/skills/smaht/refs/state.md +76 -0
  616. package/skills/swarm/SKILL.md +132 -0
  617. package/skills/swarm/refs/fan-out.md +104 -0
  618. package/skills/swarm/refs/independent-verification.md +86 -0
  619. package/skills/swarm/refs/receipts-and-evidence.md +69 -0
  620. package/skills/swarm/refs/recon-synthesis.md +87 -0
  621. package/skills/swarm/refs/ship-discipline.md +90 -0
  622. package/skills/wickedizer/SKILL.md +147 -0
  623. package/skills/wickedizer/refs/artifact-types.md +238 -0
  624. package/skills/wickedizer/refs/complexity.md +278 -0
  625. package/skills/wickedizer/refs/de-ai-pass.md +140 -0
  626. package/skills/wickedizer/refs/failure-modes.md +249 -0
  627. package/skills/wickedizer/refs/patterns.md +282 -0
  628. package/skills/wickedizer/refs/review.md +221 -0
  629. package/skills/wickedizer/refs/structure.md +282 -0
  630. package/skills/wickedizer/refs/voice-profile.md +125 -0
  631. package/skills/workflow/SKILL.md +132 -0
  632. package/skills/workflow/refs/archetype-adjustments.md +205 -0
  633. package/skills/workflow/refs/evidence.md +58 -0
  634. package/skills/workflow/refs/integration.md +130 -0
  635. package/skills/workflow/refs/risk-dimension-signals.md +260 -0
  636. package/skills/workflow/refs/scoring-rubric.md +49 -0
  637. package/skills/workflow/refs/signal-keywords.md +176 -0
  638. package/skills/workflow/refs/specialist-routing-rules.md +159 -0
  639. package/skills/worktrees/SKILL.md +87 -0
  640. package/skills/worktrees/refs/recipes.md +96 -0
@@ -0,0 +1,104 @@
1
+ """
2
+ Delegation advisor adapter for wicked-smaht.
3
+
4
+ Analyzes prompts to suggest specialist delegation when domain-specific work is detected.
5
+ """
6
+
7
+ import sys
8
+ from typing import List
9
+
10
+ from . import ContextItem
11
+
12
+
13
+ # Domain-to-specialist mapping for delegation hints
14
+ DOMAIN_HINTS = {
15
+ "security": ("wicked-garden:platform", "security-engineer", "Security review"),
16
+ "architecture": ("wicked-garden:engineering", "solution-architect", "Architecture analysis"),
17
+ "test": ("wicked-garden:qe", "test-strategist", "Test strategy"),
18
+ "data": ("wicked-garden:data", "data-engineer", "Data analysis"),
19
+ "brainstorm": ("wicked-garden:jam", "facilitator", "Brainstorming session"),
20
+ "requirements": ("wicked-garden:product", "requirements-analyst", "Requirements elicitation"),
21
+ "agent": ("wicked-garden:agentic", "architect", "Agentic system review"),
22
+
23
+ "review": ("wicked-garden:crew", "reviewer", "Code review"),
24
+ "debug": ("wicked-garden:engineering", "solution-architect", "Debugging / root-cause analysis"),
25
+ "performance": ("wicked-garden:platform", "performance-engineer", "Performance analysis"),
26
+ "ux": ("wicked-garden:product", "ux-researcher", "UX research"),
27
+ "compliance": ("wicked-garden:platform", "compliance-auditor", "Compliance review"),
28
+ }
29
+
30
+ # Keywords that suggest delegatable work
31
+ DOMAIN_KEYWORDS = {
32
+ "security": ["security", "auth", "encrypt", "vulnerability", "owasp", "csrf", "xss", "secure", "authentication", "authorization"],
33
+ "architecture": ["architecture", "design", "system design", "component", "api contract", "scalability", "microservice"],
34
+ "test": ["test", "testing", "coverage", "scenario", "qa", "quality", "e2e", "integration test", "unit test"],
35
+ "data": ["data", "analytics", "pipeline", "etl", "database", "query", "csv", "sql", "warehouse"],
36
+ "brainstorm": ["brainstorm", "ideas", "explore", "alternatives", "perspectives", "ideation"],
37
+ "requirements": ["requirements", "user story", "acceptance criteria", "stakeholder", "feature request"],
38
+ "agent": ["agent", "agentic", "llm", "prompt", "guardrail", "tool use", "subagent"],
39
+ "review": ["review", "code review", "pull request", "pr review", "peer review"],
40
+ "debug": ["debug", "error", "bug", "stacktrace", "root cause", "investigate", "troubleshoot"],
41
+ "performance": ["performance", "latency", "throughput", "bottleneck", "optimize", "profiling"],
42
+ "ux": ["ux", "user experience", "usability", "user research", "user flow", "interaction"],
43
+ "compliance": ["compliance", "audit", "regulatory", "gdpr", "hipaa", "sox", "policy"],
44
+ }
45
+
46
+
47
+ async def query(prompt: str, **kwargs) -> List[ContextItem]:
48
+ """Return delegation hints for the given prompt."""
49
+ prompt_lower = prompt.lower()
50
+ items = []
51
+ detected_domains = []
52
+
53
+ # Detect all matching domains
54
+ for domain, keywords in DOMAIN_KEYWORDS.items():
55
+ if any(kw in prompt_lower for kw in keywords):
56
+ detected_domains.append(domain)
57
+
58
+ # Create delegation hints for each detected domain
59
+ for domain in detected_domains:
60
+ plugin, agent, desc = DOMAIN_HINTS[domain]
61
+ hint_text = (
62
+ f"{desc} detected — consider delegating to specialist:\n"
63
+ f"Task(subagent_type=\"{plugin}:{agent}\", prompt=\"...\")"
64
+ )
65
+
66
+ items.append(ContextItem(
67
+ id=f"delegation-{domain}",
68
+ source="delegation",
69
+ title=f"Delegation: {desc}",
70
+ summary=f"Consider: {plugin}:{agent}",
71
+ excerpt=hint_text,
72
+ relevance=0.7, # High relevance for actionable delegation advice
73
+ age_days=0,
74
+ metadata={
75
+ "domain": domain,
76
+ "plugin": plugin,
77
+ "agent": agent,
78
+ "type": "delegation_hint",
79
+ }
80
+ ))
81
+
82
+ # Suggest parallel dispatch if multiple specialists applicable
83
+ if len(detected_domains) > 1:
84
+ parallel_hint = (
85
+ f"{len(detected_domains)} specialist domains detected "
86
+ f"({', '.join(detected_domains)}) — "
87
+ f"use parallel Task dispatches for efficiency"
88
+ )
89
+
90
+ items.append(ContextItem(
91
+ id="delegation-parallel",
92
+ source="delegation",
93
+ title="Parallel Delegation Opportunity",
94
+ summary=f"{len(detected_domains)} specialists applicable",
95
+ excerpt=parallel_hint,
96
+ relevance=0.8, # Higher relevance for efficiency pattern
97
+ age_days=0,
98
+ metadata={
99
+ "domains": detected_domains,
100
+ "type": "parallel_hint",
101
+ }
102
+ ))
103
+
104
+ return items
@@ -0,0 +1,206 @@
1
+ """
2
+ DomainStore adapter for wicked-smaht.
3
+
4
+ Queries crew projects and jam sessions via DomainStore directly (local
5
+ JSON with optional MCP routing). Replaces cp_adapter.py which queried
6
+ the same data via HTTP.
7
+
8
+ Strategy:
9
+ 1. Query each domain using DomainStore (local JSON primary store)
10
+ 2. Apply generic relevance scoring (keyword matching + status/type boosts)
11
+ 3. Return ContextItems sorted by relevance
12
+ """
13
+
14
+ import asyncio
15
+ import sys
16
+ import time
17
+ from datetime import datetime, timezone
18
+ from pathlib import Path
19
+ from typing import List
20
+
21
+ from . import ContextItem, _SCRIPTS_ROOT, run_in_thread
22
+
23
+ if str(_SCRIPTS_ROOT) not in sys.path:
24
+ sys.path.insert(0, str(_SCRIPTS_ROOT))
25
+
26
+
27
+ # ---------------------------------------------------------------------------
28
+ # Stop words for keyword extraction
29
+ # ---------------------------------------------------------------------------
30
+
31
+ _STOP_WORDS = frozenset({
32
+ "the", "a", "an", "is", "are", "was", "were", "be", "been", "have", "has",
33
+ "had", "do", "does", "did", "will", "would", "could", "should", "can",
34
+ "may", "might", "must", "i", "you", "we", "they", "me", "my", "your",
35
+ "this", "that", "these", "those", "what", "which", "who", "how", "why",
36
+ "when", "where", "and", "or", "but", "if", "for", "of", "to", "from",
37
+ "in", "on", "at", "by", "with", "about", "not", "so", "just", "also",
38
+ "need", "want", "let", "get", "make", "test", "check", "fix", "work",
39
+ })
40
+
41
+
42
+ # ---------------------------------------------------------------------------
43
+ # Domain query configuration (mirrors cp_adapter._DOMAIN_QUERIES structure)
44
+ # Each entry defines how to fetch data from a DomainStore domain.
45
+ #
46
+ # domain_name: DomainStore("wicked-{name}") argument
47
+ # source: DomainStore collection name (first arg to .list()/.search())
48
+ # label: ContextItem source label
49
+ # project_key: record field used for project scoping (None = no scoping)
50
+ # title_fn: callable(record) → title string
51
+ # summary_fn: callable(record) → summary string
52
+ # boost_fn: callable(record) → float bonus (0.0-0.5)
53
+ # ---------------------------------------------------------------------------
54
+
55
+ _DOMAIN_QUERIES = [
56
+ {
57
+ "domain_name": "wicked-crew",
58
+ "source": "projects",
59
+ "label": "crew",
60
+ "project_key": None, # crew projects are not sub-scoped
61
+ "title_fn": lambda r: f"Project: {r.get('name', '?')} ({r.get('current_phase', '?')} phase)",
62
+ "summary_fn": lambda r: f"Phase: {r.get('current_phase', '?')}, Complexity: {r.get('complexity_score', 0)}/7",
63
+ "boost_fn": lambda r: (
64
+ 0.4 if not r.get("archived", False) and r.get("current_phase") not in ("done", "review") else 0.0
65
+ ),
66
+ },
67
+ {
68
+ "domain_name": "jam",
69
+ "source": "sessions",
70
+ "label": "jam",
71
+ "project_key": "project",
72
+ "title_fn": lambda r: f"Brainstorm: {r.get('topic', '')}",
73
+ "summary_fn": lambda r: (r.get("summary") or r.get("synthesis", {}).get("summary", ""))[:200],
74
+ "boost_fn": lambda r: 0.0,
75
+ },
76
+ ]
77
+
78
+
79
+ # ---------------------------------------------------------------------------
80
+ # Helpers
81
+ # ---------------------------------------------------------------------------
82
+
83
+ def _extract_keywords(prompt: str) -> str:
84
+ words = prompt.lower().split()
85
+ keywords = [w for w in words if w not in _STOP_WORDS and len(w) > 2]
86
+ return " ".join(keywords[:5]) if keywords else ""
87
+
88
+
89
+ def _keyword_score(prompt_lower: str, text: str, weight: float = 0.2) -> float:
90
+ """Score text by keyword overlap with prompt."""
91
+ if not text:
92
+ return 0.0
93
+ text_lower = text.lower()
94
+ score = 0.0
95
+ for word in prompt_lower.split():
96
+ if len(word) > 3 and word in text_lower:
97
+ score += weight
98
+ return min(score, 0.5)
99
+
100
+
101
+ # ---------------------------------------------------------------------------
102
+ # Per-domain query (runs in thread pool)
103
+ # ---------------------------------------------------------------------------
104
+
105
+ def _query_domain(config: dict, keywords: str, project: str = "") -> list:
106
+ """Query a single DomainStore domain. Runs in thread pool.
107
+
108
+ Uses _skip_discovery=True to bypass integration-discovery (MCP routing).
109
+ This is a read-only context query — smaht never needs to delegate reads
110
+ to external tools, and discovery can block for up to 3 s when brain is
111
+ slow, which exceeds the fast-path 0.5 s timeout (issue #374).
112
+
113
+ Returns a list of raw record dicts, or [] on any error.
114
+ """
115
+ try:
116
+ from _domain_store import DomainStore
117
+
118
+ ds = DomainStore(config["domain_name"], _skip_discovery=True)
119
+
120
+ params: dict = {}
121
+ if keywords:
122
+ params["q"] = keywords
123
+ if project and config.get("project_key"):
124
+ params[config["project_key"]] = project
125
+
126
+ records = ds.list(config["source"], **params)
127
+ return records if isinstance(records, list) else []
128
+ except Exception:
129
+ return []
130
+
131
+
132
+ # ---------------------------------------------------------------------------
133
+ # Public async query function
134
+ # ---------------------------------------------------------------------------
135
+
136
+ async def query(prompt: str, project: str = None) -> List[ContextItem]:
137
+ """Query crew projects and jam sessions via DomainStore for relevant context.
138
+
139
+ Args:
140
+ prompt: The user's query/prompt text.
141
+ project: Optional project filter (applied to project-scoped domains).
142
+
143
+ Returns:
144
+ List of ContextItems sorted by relevance descending.
145
+ """
146
+ keywords = _extract_keywords(prompt)
147
+ if not keywords:
148
+ return []
149
+
150
+ prompt_lower = prompt.lower()
151
+ items: list[ContextItem] = []
152
+ now = datetime.now(timezone.utc)
153
+
154
+ # Query all domains in parallel to avoid serial blocking (issue #374).
155
+ domain_results = await asyncio.gather(
156
+ *[run_in_thread(_query_domain, config, keywords, project or "")
157
+ for config in _DOMAIN_QUERIES],
158
+ return_exceptions=True,
159
+ )
160
+
161
+ for config, records in zip(_DOMAIN_QUERIES, domain_results):
162
+ # Skip domains that raised (run_in_thread wraps; gather returns exception objects)
163
+ if isinstance(records, Exception) or not isinstance(records, list):
164
+ continue
165
+
166
+ for record in records[:10]: # Cap per domain
167
+ # Skip archived or deleted records
168
+ if record.get("archived") or record.get("deleted"):
169
+ continue
170
+
171
+ title = config["title_fn"](record)
172
+ summary = config["summary_fn"](record)
173
+
174
+ # Score: base + keyword match + domain-specific boost
175
+ base = 0.3
176
+ kw_score = _keyword_score(prompt_lower, f"{title} {summary}")
177
+ boost = config["boost_fn"](record)
178
+ relevance = min(base + kw_score + boost, 1.0)
179
+
180
+ # Calculate age in days
181
+ age_days = 0.0
182
+ created = record.get("created_at") or record.get("created") or ""
183
+ if created:
184
+ try:
185
+ dt = datetime.fromisoformat(created.replace("Z", "+00:00"))
186
+ age_days = (now - dt).days
187
+ except Exception:
188
+ pass # fail open: age_days defaults to 0
189
+
190
+ items.append(ContextItem(
191
+ id=record.get("id", record.get("name", "")),
192
+ source=config["label"],
193
+ title=title,
194
+ summary=summary,
195
+ excerpt=summary,
196
+ relevance=relevance,
197
+ age_days=age_days,
198
+ metadata={
199
+ "domain": config["domain_name"],
200
+ "semantic_score": relevance,
201
+ },
202
+ ))
203
+
204
+ # Sort by relevance descending
205
+ items.sort(key=lambda x: x.relevance, reverse=True)
206
+ return items
@@ -0,0 +1,231 @@
1
+ """
2
+ Event log adapter for wicked-smaht context assembly.
3
+
4
+ Queries the unified event log (events.db) for recent cross-domain activity
5
+ relevant to the current prompt. Surfaces crew phase transitions, jam decisions,
6
+ native task changes, and other domain events alongside traditional context sources.
7
+
8
+ This adapter complements brain_adapter (which queries memories) by providing
9
+ the broader activity timeline that memories alone don't capture.
10
+ """
11
+
12
+ import json
13
+ import sys
14
+ from datetime import datetime, timezone
15
+ from pathlib import Path
16
+ from typing import List
17
+
18
+ from . import ContextItem, _SCRIPTS_ROOT, run_in_thread
19
+
20
+ if str(_SCRIPTS_ROOT) not in sys.path:
21
+ sys.path.insert(0, str(_SCRIPTS_ROOT))
22
+
23
+
24
+ _STOP_WORDS = frozenset({
25
+ "the", "a", "an", "is", "are", "was", "were", "be", "been", "have", "has",
26
+ "had", "do", "does", "did", "will", "would", "could", "should", "can",
27
+ "may", "might", "must", "i", "you", "we", "they", "me", "my", "your",
28
+ "this", "that", "these", "those", "what", "which", "who", "how", "why",
29
+ "when", "where", "and", "or", "but", "if", "for", "of", "to", "from",
30
+ "in", "on", "at", "by", "with", "about", "not", "so", "just", "also",
31
+ })
32
+
33
+ # Action patterns that indicate high-value events for context
34
+ _HIGH_VALUE_ACTIONS = {
35
+ "phases.": 0.3, # Crew phase transitions
36
+ "projects.created": 0.25,
37
+ "sessions.created": 0.2, # Jam sessions
38
+ "memories.created": 0.15,
39
+ "tasks.": 0.1, # Native task changes (base; event_type may boost further)
40
+ }
41
+
42
+ # Event type boosts (for native task events carrying event_type in metadata)
43
+ _EVENT_TYPE_BOOSTS = {
44
+ "gate-finding": 0.4,
45
+ "phase-transition": 0.35,
46
+ "procedure-trigger": 0.3,
47
+ "coding-task": 0.2,
48
+ "subtask": 0.15,
49
+ "task": 0.0, # regular tasks get no extra boost
50
+ }
51
+
52
+
53
+ def _extract_keywords(prompt: str) -> str:
54
+ words = prompt.lower().split()
55
+ keywords = [w for w in words if w not in _STOP_WORDS and len(w) > 2]
56
+ return " ".join(keywords[:6]) if keywords else ""
57
+
58
+
59
+ def _query_events(prompt: str) -> list:
60
+ """Query EventStore for relevant events. Runs in thread pool."""
61
+ try:
62
+ from _event_store import EventStore
63
+ EventStore.ensure_schema()
64
+
65
+ results = []
66
+
67
+ # Strategy 1: FTS search with prompt keywords
68
+ keywords = _extract_keywords(prompt)
69
+ if keywords:
70
+ fts_results = EventStore.query(fts=keywords, since="30d", limit=10)
71
+ results.extend(fts_results)
72
+
73
+ # Strategy 2: Recent high-value events (last 7 days)
74
+ recent = EventStore.query(since="7d", limit=20)
75
+ seen_ids = {r.get("event_id") for r in results}
76
+ for event in recent:
77
+ if event.get("event_id") not in seen_ids:
78
+ results.append(event)
79
+
80
+ return results[:15] # Cap total
81
+
82
+ except Exception:
83
+ return []
84
+
85
+
86
+ def _action_boost(action: str) -> float:
87
+ """Score boost based on action type."""
88
+ for prefix, boost in _HIGH_VALUE_ACTIONS.items():
89
+ if action.startswith(prefix):
90
+ return boost
91
+ return 0.0
92
+
93
+
94
+ def _chain_boost(payload_dict: dict, active_chain_id: "str | None") -> float:
95
+ """Score boost when event belongs to the active chain.
96
+
97
+ Chain-matched events score 0.65 base boost (combined with 0.15 base → 0.8 total).
98
+ Partial chain prefix match (parent chain) scores 0.45.
99
+ No chain match: 0.0.
100
+ """
101
+ if not active_chain_id:
102
+ return 0.0
103
+ event_chain = payload_dict.get("chain_id", "")
104
+ if not event_chain:
105
+ return 0.0
106
+ if event_chain == active_chain_id:
107
+ return 0.65
108
+ # Parent chain match: active is a.b.c, event is a.b → partial match
109
+ if active_chain_id.startswith(event_chain + "."):
110
+ return 0.45
111
+ # Child chain match: active is a.b, event is a.b.c → also relevant
112
+ if event_chain.startswith(active_chain_id + "."):
113
+ return 0.50
114
+ return 0.0
115
+
116
+
117
+ def _get_active_chain_id() -> "str | None":
118
+ """Read active chain_id from session state."""
119
+ try:
120
+ from _session import SessionState
121
+ state = SessionState.load()
122
+ return getattr(state, "active_chain_id", None)
123
+ except Exception:
124
+ return None
125
+
126
+
127
+ def _age_days(ts_str: str) -> float:
128
+ """Calculate age in days from ISO timestamp."""
129
+ try:
130
+ event_time = datetime.fromisoformat(ts_str.replace("Z", "+00:00"))
131
+ delta = datetime.now(timezone.utc) - event_time
132
+ return max(delta.total_seconds() / 86400, 0.0)
133
+ except Exception:
134
+ return 30.0 # Default to old if unparseable
135
+
136
+
137
+ async def query(prompt: str) -> List[ContextItem]:
138
+ """Query unified event log for cross-domain activity relevant to prompt.
139
+
140
+ Returns ContextItems tagged with source="events" so the context assembler
141
+ can distinguish event-sourced context from memory or domain-sourced context.
142
+ """
143
+ events = await run_in_thread(_query_events, prompt)
144
+ if not events:
145
+ return []
146
+
147
+ active_chain_id = await run_in_thread(_get_active_chain_id)
148
+
149
+ items: list[ContextItem] = []
150
+ prompt_lower = prompt.lower()
151
+
152
+ for event in events:
153
+ domain = event.get("domain", "unknown")
154
+ action = event.get("action", "unknown")
155
+ record_id = event.get("record_id", "")
156
+ ts = event.get("ts", "")
157
+ payload = event.get("payload", "")
158
+ project_id = event.get("project_id", "")
159
+
160
+ # Parse payload if it's a JSON string
161
+ payload_dict: dict = {}
162
+ if payload and isinstance(payload, str):
163
+ try:
164
+ payload_dict = json.loads(payload)
165
+ except Exception:
166
+ pass # fail open
167
+
168
+ # Build title and summary
169
+ title = f"{domain}.{action}"
170
+ summary_parts = []
171
+
172
+ if action == "tasks.created":
173
+ task_name = payload_dict.get("name", "").strip()
174
+ if not task_name:
175
+ continue # skip bare UUID entries — no meaningful name
176
+ title = f"{domain}.{action}: {task_name}"
177
+ summary_parts.append(task_name)
178
+ else:
179
+ if record_id:
180
+ summary_parts.append(record_id)
181
+ if project_id:
182
+ summary_parts.append(f"project: {project_id}")
183
+ if payload and isinstance(payload, str) and len(payload) < 200:
184
+ summary_parts.append(payload)
185
+
186
+ summary = " | ".join(summary_parts) if summary_parts else action
187
+
188
+ # Score: base + action boost + event_type boost + keyword match + recency + chain
189
+ base = 0.15
190
+ action_score = _action_boost(action)
191
+ event_type_val = payload_dict.get("event_type", "task")
192
+ event_type_score = _EVENT_TYPE_BOOSTS.get(event_type_val, 0.0)
193
+ keyword_score = 0.0
194
+ search_text = f"{title} {summary} {record_id} {project_id}".lower()
195
+ for word in prompt_lower.split():
196
+ if len(word) > 2 and word in search_text:
197
+ keyword_score += 0.1
198
+
199
+ age = _age_days(ts)
200
+ recency_boost = max(0.0, 0.15 - (age / 30) * 0.15) # 0.15 for today, 0 for 30d ago
201
+
202
+ chain_score = _chain_boost(payload_dict, active_chain_id)
203
+ relevance = min(
204
+ base + action_score + event_type_score + keyword_score + recency_boost + chain_score,
205
+ 1.0,
206
+ )
207
+
208
+ items.append(ContextItem(
209
+ id=event.get("event_id", ""),
210
+ source="events",
211
+ title=title,
212
+ summary=summary,
213
+ excerpt=(
214
+ f"[{ts[:10]}] {title}"
215
+ if action == "tasks.created"
216
+ else (f"[{ts[:10]}] {title}: {record_id}" if record_id else f"[{ts[:10]}] {title}")
217
+ ),
218
+ relevance=relevance,
219
+ age_days=age,
220
+ metadata={
221
+ "domain": domain,
222
+ "action": action,
223
+ "project_id": project_id,
224
+ "event_ts": ts,
225
+ "chain_id": payload_dict.get("chain_id", ""),
226
+ },
227
+ ))
228
+
229
+ # Sort by relevance descending
230
+ items.sort(key=lambda x: x.relevance, reverse=True)
231
+ return items[:10]
@@ -0,0 +1,49 @@
1
+ """Tools adapter — surfaces available third-party CLIs for context assembly."""
2
+ import subprocess
3
+
4
+
5
+ def _check_cli(name):
6
+ """Check if a CLI tool is available."""
7
+ try:
8
+ result = subprocess.run(
9
+ ["which", name], capture_output=True, text=True, timeout=2
10
+ )
11
+ return result.returncode == 0
12
+ except Exception:
13
+ return False
14
+
15
+
16
+ # Known third-party CLIs that wicked-garden skills orchestrate
17
+ KNOWN_CLIS = {
18
+ "codex": {"skill": "wicked-garden:jam:council", "desc": "OpenAI Codex for code review and generation"},
19
+ "gemini": {"skill": "wicked-garden:jam:council", "desc": "Google Gemini for multi-modal AI tasks"},
20
+ "copilot": {"skill": "wicked-garden:jam:council", "desc": "GitHub Copilot CLI for AI-assisted coding"},
21
+ "opencode": {"skill": "wicked-garden:jam:council", "desc": "OpenCode for AI-assisted coding"},
22
+ "agent-browser": {"skill": "wicked-garden:agent-browser", "desc": "Browser automation and scraping"},
23
+ }
24
+
25
+
26
+ async def query(prompt: str, **kwargs) -> list:
27
+ """Return available CLI tools that could help with the current task."""
28
+ from dataclasses import dataclass
29
+
30
+ @dataclass
31
+ class ContextItem:
32
+ source: str
33
+ title: str
34
+ summary: str
35
+
36
+ results = []
37
+ available = []
38
+
39
+ for cli_name, info in KNOWN_CLIS.items():
40
+ if _check_cli(cli_name):
41
+ available.append(
42
+ ContextItem(
43
+ source="tools",
44
+ title=f"{cli_name} available",
45
+ summary=f"{info['desc']} — Use /{info['skill']}"
46
+ )
47
+ )
48
+
49
+ return available