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,232 @@
1
+ #!/usr/bin/env python3
2
+ """migrate_v6_projects.py — Detect + (optionally) migrate v6-v10 crew
3
+ projects to v11 archetype-mode.
4
+
5
+ The v6-v10 universal-pipeline machinery was deleted wholesale in
6
+ v11.0.0. Any existing project state on disk references concepts the
7
+ v11 phase_manager no longer understands — `process-plan.json`, the
8
+ 9-phase universal plan, gate-result.json files, conditions-manifest,
9
+ reeval-log, etc. The v11 phase_manager loads those records but the
10
+ plan / gate / addendum machinery is gone.
11
+
12
+ This script:
13
+ 1. Detects v6-v10 projects in the wicked-crew DomainStore.
14
+ 2. Optionally migrates each one to v11 by mapping the v6 phase
15
+ plan to the closest v11 archetype + stamping
16
+ phase_plan_mode="archetype" on the project state.
17
+
18
+ The mapping is best-effort — many v6 plans don't fit cleanly into
19
+ a single v11 archetype. The default mapping uses the v6 phase
20
+ list to pick the v11 archetype that best matches:
21
+
22
+ v6 plan contains 'cutover' or 'expand' / 'backfill' → migrate
23
+ v6 plan = ['triage', 'investigate', ...] → incident
24
+ v6 plan = ['canary', 'ramp', 'full', ...] → ship
25
+ v6 plan = ['scope', 'assess', 'findings', ...] → review
26
+ v6 plan = ['elicit', 'structure', ...] → specify
27
+ v6 plan = ['frame', 'diverge', 'converge'] → explore
28
+ v6 plan = ['brief', 'options', 'score', 'record'] → decide
29
+ default → build
30
+
31
+ The script defaults to dry-run. Use --apply to actually mutate state.
32
+ """
33
+
34
+ from __future__ import annotations
35
+
36
+ import argparse
37
+ import json
38
+ import sys
39
+ from pathlib import Path
40
+ from typing import Dict, List, Optional, Tuple
41
+
42
+
43
+ _SCRIPTS = Path(__file__).resolve().parents[1]
44
+ sys.path.insert(0, str(_SCRIPTS))
45
+
46
+
47
+ _PHASE_HINTS_TO_ARCHETYPE: Tuple[Tuple[Tuple[str, ...], str], ...] = (
48
+ # First match wins. Most-specific patterns first.
49
+ (("expand", "backfill", "cutover", "contract"), "migrate"),
50
+ (("cutover",), "migrate"),
51
+ (("canary", "ramp", "full", "soak"), "ship"),
52
+ (("triage", "investigate", "mitigate"), "incident"),
53
+ (("scope", "assess", "findings", "remediate-or-accept"), "review"),
54
+ (("scope", "assess", "findings"), "review"),
55
+ (("elicit", "structure", "validate"), "specify"),
56
+ (("frame", "diverge", "converge"), "explore"),
57
+ (("brief", "options", "score", "record"), "decide"),
58
+ # Universal-pipeline plans land here:
59
+ (("clarify", "design", "build", "test", "review"), "build"),
60
+ )
61
+
62
+
63
+ def _classify_phase_plan(phase_plan: List[str]) -> str:
64
+ """Pick the v11 archetype that best matches a v6 phase plan."""
65
+ if not phase_plan:
66
+ return "build"
67
+ plan_set = set(phase_plan)
68
+ for phases_required, archetype in _PHASE_HINTS_TO_ARCHETYPE:
69
+ if all(p in plan_set for p in phases_required):
70
+ return archetype
71
+ return "build" # safe default
72
+
73
+
74
+ def _map_to_v11_phases(archetype: str) -> List[str]:
75
+ """Read .claude-plugin/archetypes.json for the canonical phase list."""
76
+ catalog_path = (
77
+ Path(__file__).resolve().parents[2]
78
+ / ".claude-plugin" / "archetypes.json"
79
+ )
80
+ catalog = json.loads(catalog_path.read_text(encoding="utf-8"))
81
+ return list(
82
+ catalog.get("archetypes", {}).get(archetype, {}).get("phases", [])
83
+ )
84
+
85
+
86
+ # ---------------------------------------------------------------------------
87
+ # Detection
88
+ # ---------------------------------------------------------------------------
89
+
90
+ def detect_v6_projects() -> List[Dict]:
91
+ """Return a list of projects whose state looks like v6-v10 universal-
92
+ pipeline output (i.e. phase_plan_mode != 'archetype' AND non-empty
93
+ phase_plan)."""
94
+ try:
95
+ from _domain_store import DomainStore
96
+ except ImportError:
97
+ return []
98
+
99
+ sm = DomainStore("projects")
100
+ try:
101
+ all_records = sm.list("projects")
102
+ except Exception:
103
+ all_records = []
104
+
105
+ legacy = []
106
+ for rec in (all_records or []):
107
+ if not isinstance(rec, dict):
108
+ continue
109
+ extras = rec.get("extras") or {}
110
+ mode = extras.get("phase_plan_mode")
111
+ plan = rec.get("phase_plan") or []
112
+ if mode == "archetype":
113
+ continue # already v11
114
+ if not plan:
115
+ continue # no phase plan to migrate
116
+ legacy.append(rec)
117
+ return legacy
118
+
119
+
120
+ # ---------------------------------------------------------------------------
121
+ # Migration
122
+ # ---------------------------------------------------------------------------
123
+
124
+ def migrate_one(project_record: Dict, *, dry_run: bool = True) -> Dict:
125
+ """Translate a single v6 project to v11 archetype-mode.
126
+
127
+ Returns a dict describing the migration: {name, from_phases,
128
+ chosen_archetype, to_phases, applied}.
129
+ """
130
+ name = project_record.get("name") or project_record.get("id")
131
+ from_phases = list(project_record.get("phase_plan") or [])
132
+ archetype = _classify_phase_plan(from_phases)
133
+ to_phases = _map_to_v11_phases(archetype)
134
+
135
+ result = {
136
+ "name": name,
137
+ "from_phases": from_phases,
138
+ "chosen_archetype": archetype,
139
+ "to_phases": to_phases,
140
+ "applied": False,
141
+ }
142
+
143
+ if dry_run:
144
+ return result
145
+
146
+ # Apply: mutate state via the v11 phase_manager API
147
+ try:
148
+ from _domain_store import DomainStore
149
+ except ImportError:
150
+ return result
151
+
152
+ sm = DomainStore("projects")
153
+ record = dict(project_record)
154
+ record["phase_plan"] = to_phases
155
+ extras = dict(record.get("extras") or {})
156
+ extras["phase_plan_mode"] = "archetype"
157
+ extras["v11_archetype"] = archetype
158
+ extras["v11_migrated_at"] = _utc_now()
159
+ extras["v11_migration_source"] = {
160
+ "from_phases": from_phases,
161
+ "chosen_archetype": archetype,
162
+ }
163
+ record["extras"] = extras
164
+ sm.update("projects", name, record)
165
+ result["applied"] = True
166
+ return result
167
+
168
+
169
+ def _utc_now() -> str:
170
+ from datetime import datetime, timezone
171
+ return datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
172
+
173
+
174
+ # ---------------------------------------------------------------------------
175
+ # CLI
176
+ # ---------------------------------------------------------------------------
177
+
178
+ def _cli() -> None:
179
+ parser = argparse.ArgumentParser(
180
+ description="Detect + migrate v6-v10 crew projects to v11 archetype-mode."
181
+ )
182
+ parser.add_argument("--apply", action="store_true",
183
+ help="Actually mutate state. Without this flag, prints what would happen.")
184
+ parser.add_argument("--name", default=None,
185
+ help="Migrate only the project with this name.")
186
+ parser.add_argument("--json", action="store_true")
187
+ args = parser.parse_args()
188
+
189
+ legacy = detect_v6_projects()
190
+ if args.name:
191
+ legacy = [p for p in legacy if p.get("name") == args.name]
192
+
193
+ if not legacy:
194
+ if args.json:
195
+ print(json.dumps({"status": "CLEAN", "migratable": []}))
196
+ else:
197
+ print("CLEAN: no v6-v10 projects detected.")
198
+ return
199
+
200
+ results = [
201
+ migrate_one(p, dry_run=not args.apply) for p in legacy
202
+ ]
203
+
204
+ if args.json:
205
+ print(json.dumps({
206
+ "status": "MIGRATABLE_FOUND" if not args.apply else "APPLIED",
207
+ "count": len(results),
208
+ "results": results,
209
+ }, indent=2, default=str))
210
+ else:
211
+ print(
212
+ f"{'APPLIED' if args.apply else 'DRY-RUN'}: "
213
+ f"{len(results)} v6-v10 project(s) "
214
+ f"{'migrated' if args.apply else 'detected'}"
215
+ )
216
+ for r in results:
217
+ arrow = "→"
218
+ print(
219
+ f" {r['name']}: {' → '.join(r['from_phases'][:5])}"
220
+ f"{'...' if len(r['from_phases']) > 5 else ''} "
221
+ f"{arrow} archetype={r['chosen_archetype']} "
222
+ f"({' → '.join(r['to_phases'])})"
223
+ )
224
+ if not args.apply:
225
+ print(
226
+ "\nRe-run with --apply to perform the migration. "
227
+ "The legacy phase_plan is recorded in extras.v11_migration_source."
228
+ )
229
+
230
+
231
+ if __name__ == "__main__":
232
+ _cli()
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/env python3
2
+ """onboarding.py — onboarding-gate state mutations for /wicked-garden:setup.
3
+
4
+ Section 6 of the setup command flips a handful of SessionState fields
5
+ once onboarding finishes (or is skipped). The mutation was inlined in
6
+ markdown; this module wraps it so the command body stays slim and the
7
+ fields stay in one place.
8
+
9
+ Stdlib-only.
10
+ """
11
+
12
+ from __future__ import annotations
13
+
14
+ import argparse
15
+ import json
16
+ import os
17
+ import sys
18
+ from pathlib import Path
19
+
20
+ _SCRIPTS_ROOT = Path(__file__).resolve().parents[1]
21
+ sys.path.insert(0, str(_SCRIPTS_ROOT))
22
+
23
+
24
+ _VALID_MODES = ("full", "quick", "skip")
25
+
26
+
27
+ def clear_gate(mode: str, complete: bool) -> dict:
28
+ """Update SessionState onboarding fields and return the post-update dict.
29
+
30
+ ``mode`` is one of ``full``, ``quick``, ``skip``. ``complete`` is True
31
+ for full / quick paths and False for skip.
32
+ """
33
+ if mode not in _VALID_MODES:
34
+ raise ValueError(f"mode must be one of {_VALID_MODES}, got {mode!r}")
35
+ from _session import SessionState # type: ignore
36
+
37
+ state = SessionState.load()
38
+ state.update(
39
+ needs_onboarding=False,
40
+ setup_in_progress=False,
41
+ setup_confirmed=True,
42
+ onboarding_mode=mode,
43
+ onboarding_complete=bool(complete),
44
+ )
45
+ return {
46
+ "needs_onboarding": False,
47
+ "setup_in_progress": False,
48
+ "setup_confirmed": True,
49
+ "onboarding_mode": mode,
50
+ "onboarding_complete": bool(complete),
51
+ }
52
+
53
+
54
+ def mark_setup_complete() -> dict:
55
+ """Section 4 helper: write setup_complete + setup_confirmed to SessionState."""
56
+ from _session import SessionState # type: ignore
57
+
58
+ state = SessionState.load()
59
+ state.update(setup_complete=True, setup_confirmed=True)
60
+ return {"setup_complete": True, "setup_confirmed": True}
61
+
62
+
63
+ def write_local_config() -> dict:
64
+ """Write the default local-mode config.json. Idempotent — overwrites."""
65
+ config_dir = Path.home() / ".something-wicked" / "wicked-garden"
66
+ config_dir.mkdir(parents=True, exist_ok=True)
67
+ payload = {"mode": "local", "setup_complete": True}
68
+ (config_dir / "config.json").write_text(
69
+ json.dumps(payload, indent=2) + "\n", encoding="utf-8"
70
+ )
71
+ return {"path": str(config_dir / "config.json"), "config": payload}
72
+
73
+
74
+ def save_domain_pref(selection: str) -> dict:
75
+ """Persist the chosen issue tracker to config.json domain_prefs.delivery."""
76
+ config_path = Path.home() / ".something-wicked" / "wicked-garden" / "config.json"
77
+ config: dict = {}
78
+ if config_path.exists():
79
+ try:
80
+ config = json.loads(config_path.read_text(encoding="utf-8"))
81
+ except (OSError, json.JSONDecodeError):
82
+ config = {}
83
+ config.setdefault("domain_prefs", {})["delivery"] = selection
84
+ config_path.parent.mkdir(parents=True, exist_ok=True)
85
+ config_path.write_text(json.dumps(config, indent=2) + "\n", encoding="utf-8")
86
+ return {"path": str(config_path), "selection": selection}
87
+
88
+
89
+ def _cli() -> int:
90
+ parser = argparse.ArgumentParser(description=__doc__)
91
+ sub = parser.add_subparsers(dest="cmd", required=True)
92
+ gate = sub.add_parser("clear-gate", help="Clear onboarding gate after onboarding")
93
+ gate.add_argument("--mode", required=True, choices=_VALID_MODES)
94
+ gate.add_argument("--complete", action="store_true")
95
+ sub.add_parser("mark-setup-complete", help="Set setup_complete + setup_confirmed in SessionState")
96
+ sub.add_parser("write-local-config", help="Write the default local-mode config.json")
97
+ pref = sub.add_parser("save-domain-pref", help="Persist chosen issue tracker")
98
+ pref.add_argument("selection", help="github | linear | jira | ado | rally | local")
99
+ args = parser.parse_args()
100
+ if args.cmd == "clear-gate":
101
+ result = clear_gate(args.mode, args.complete)
102
+ elif args.cmd == "mark-setup-complete":
103
+ result = mark_setup_complete()
104
+ elif args.cmd == "write-local-config":
105
+ result = write_local_config()
106
+ elif args.cmd == "save-domain-pref":
107
+ result = save_domain_pref(args.selection)
108
+ json.dump(result, sys.stdout, indent=2)
109
+ sys.stdout.write("\n")
110
+ return 0
111
+
112
+
113
+ if __name__ == "__main__":
114
+ sys.exit(_cli())
@@ -0,0 +1,98 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ smaht/_bus_consumers.py — Bus event consumers for the smaht domain.
4
+
5
+ Reacts to wicked-brain events to keep smaht caches fresh.
6
+ Poll-on-invoke pattern: called at prompt_submit hook startup.
7
+ """
8
+
9
+ import logging
10
+ import os
11
+ import sys
12
+ from pathlib import Path
13
+ from typing import List
14
+
15
+ sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
16
+
17
+ logger = logging.getLogger("wicked-smaht.bus-consumers")
18
+
19
+
20
+ def process_brain_events() -> List[str]:
21
+ """Poll for brain events and invalidate caches as needed.
22
+
23
+ Returns list of actions taken. Empty if bus unavailable.
24
+ """
25
+ actions = []
26
+ try:
27
+ from _bus import poll_pending, ack_events, is_processed, mark_processed
28
+
29
+ events = poll_pending(event_type_prefix="wicked.brain.")
30
+ if not events:
31
+ return actions
32
+
33
+ max_event_id = 0
34
+ for event in events:
35
+ event_id = event.get("event_id", 0)
36
+ event_type = event.get("event_type", "")
37
+ metadata = event.get("metadata", {})
38
+ chain_id = metadata.get("chain_id", event_type)
39
+
40
+ if event_id > max_event_id:
41
+ max_event_id = event_id
42
+
43
+ if is_processed(event_type, chain_id):
44
+ continue
45
+
46
+ if event_type == "wicked.brain.consolidated":
47
+ _invalidate_brain_adapter_cache()
48
+ mark_processed(event_type, chain_id)
49
+ actions.append("Invalidated smaht brain adapter cache (brain consolidated)")
50
+
51
+ elif event_type == "wicked.config.updated":
52
+ _clear_brain_port_cache()
53
+ mark_processed(event_type, chain_id)
54
+ actions.append("Cleared brain port cache (config updated)")
55
+
56
+ elif event_type == "wicked.brain.initialized":
57
+ _auto_configure_brain_adapter()
58
+ mark_processed(event_type, chain_id)
59
+ actions.append("Auto-configured smaht brain adapter (brain initialized)")
60
+
61
+ if max_event_id > 0:
62
+ ack_events(max_event_id)
63
+
64
+ except Exception as e:
65
+ logger.debug(f"Brain event consumer error (non-blocking): {e}")
66
+
67
+ return actions
68
+
69
+
70
+ def _invalidate_brain_adapter_cache():
71
+ """Clear any cached brain query results so next prompt gets fresh data."""
72
+ try:
73
+ cache_dir = Path(os.path.expanduser("~")) / ".something-wicked" / "wicked-garden" / "local" / "wicked-smaht" / "cache"
74
+ if cache_dir.exists():
75
+ for f in cache_dir.glob("brain_*.json"):
76
+ f.unlink(missing_ok=True)
77
+ except Exception:
78
+ pass # fail open
79
+
80
+
81
+ def _clear_brain_port_cache():
82
+ """Clear the WICKED_BRAIN_PORT resolution cache."""
83
+ try:
84
+ from _brain_port import _port_cache
85
+ _port_cache.clear()
86
+ except Exception:
87
+ pass # fail open — _brain_port may not have a cache dict
88
+
89
+
90
+ def _auto_configure_brain_adapter():
91
+ """Auto-detect brain and configure smaht adapter without manual setup."""
92
+ try:
93
+ from _brain_port import resolve_brain_port
94
+ port = resolve_brain_port()
95
+ if port:
96
+ logger.info(f"Brain auto-detected on port {port}")
97
+ except Exception:
98
+ pass # fail open
@@ -0,0 +1,83 @@
1
+ """
2
+ Source adapters for wicked-smaht.
3
+
4
+ Each adapter queries a wicked-garden plugin and returns ContextItems.
5
+
6
+ IMPORTANT: All adapters must be truly async to enable parallel execution.
7
+ Use run_subprocess() for subprocess calls and run_in_thread() for blocking I/O.
8
+
9
+ All scripts are co-located under plugins/wicked-garden/scripts/{domain}/.
10
+ Use _SCRIPTS_ROOT to build direct paths instead of discover_script().
11
+ """
12
+
13
+ import asyncio
14
+ import subprocess
15
+ import sys
16
+ from dataclasses import dataclass, field
17
+ from pathlib import Path
18
+ from typing import Any, Dict, List, Optional
19
+
20
+ # All domain scripts live under plugins/wicked-garden/scripts/
21
+ # adapters/ is at scripts/smaht/adapters/, so parents[2] = scripts/
22
+ _SCRIPTS_ROOT = Path(__file__).resolve().parents[2]
23
+
24
+
25
+ async def run_subprocess(
26
+ cmd: List[str],
27
+ timeout: float = 5.0,
28
+ cwd: Optional[str] = None
29
+ ) -> tuple[int, str, str]:
30
+ """Run subprocess asynchronously without blocking the event loop.
31
+
32
+ Returns: (returncode, stdout, stderr)
33
+ """
34
+ def _run():
35
+ try:
36
+ result = subprocess.run(
37
+ cmd,
38
+ capture_output=True,
39
+ text=True,
40
+ timeout=timeout,
41
+ cwd=cwd
42
+ )
43
+ return (result.returncode, result.stdout, result.stderr)
44
+ except subprocess.TimeoutExpired:
45
+ return (-1, "", "timeout")
46
+ except Exception as e:
47
+ return (-1, "", str(e))
48
+
49
+ return await asyncio.to_thread(_run)
50
+
51
+
52
+ async def run_in_thread(func, *args, **kwargs):
53
+ """Run a blocking function in a thread pool."""
54
+ import functools
55
+ return await asyncio.to_thread(functools.partial(func, *args, **kwargs))
56
+
57
+
58
+ @dataclass
59
+ class ContextItem:
60
+ """A single item of context from a source."""
61
+ id: str
62
+ source: str # mem, jam, search, crew, context7
63
+ title: str
64
+ summary: str
65
+ excerpt: str = ""
66
+ relevance: float = 0.0
67
+ age_days: float = 0.0
68
+ metadata: Dict[str, Any] = field(default_factory=dict)
69
+
70
+ def token_estimate(self) -> int:
71
+ """Estimate token count for this item."""
72
+ text = f"{self.title} {self.summary} {self.excerpt}"
73
+ return len(text) // 4 # Rough estimate
74
+
75
+
76
+ from . import domain_adapter
77
+ from . import context7_adapter
78
+
79
+ __all__ = [
80
+ 'ContextItem',
81
+ 'domain_adapter',
82
+ 'context7_adapter',
83
+ ]