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,125 @@
1
+ #!/usr/bin/env python3
2
+ """codegraph_db.py — adapt codegraph's SQLite into the symbol-graph DB wicked-patch
3
+ expects (the `--db`).
4
+
5
+ This is the payoff of ADR 0001: codegraph builds a column-precise, multi-language
6
+ symbol+edge graph; wicked-patch needs a `--db` with a `symbols` table + reference
7
+ tables for cross-file refactor (rename/add-field/remove). Nothing produced that
8
+ `--db` before, so the patch family was dead-on-arrival. This translates
9
+ codegraph's `nodes`/`edges` into the schema `PropagationEngine` + `_resolve_symbol_id`
10
+ read, reviving the family without changing patch's engine.
11
+
12
+ Mapping (codegraph → patch):
13
+ nodes(id,name,kind,file_path,start_line,end_line,metadata)
14
+ -> symbols(id,name,type,file_path,line_start,line_end,metadata,layer)
15
+ edges(source,target,kind):
16
+ kind='references' -> symbol_refs(source_id,target_id,ref_type) + refs
17
+ kind='calls' -> symbol_calls(symbol_id,target_id) + refs
18
+ kind='imports' -> symbol_imports(symbol_id,target_id) + refs
19
+ (all) -> refs(source_id,target_id,ref_type,confidence)
20
+ + metadata(key,value) with indexed_at (safety.py freshness check)
21
+
22
+ Stdlib-only. Deterministic. Rebuilds the patch DB from scratch each run.
23
+ """
24
+
25
+ from __future__ import annotations
26
+
27
+ import json
28
+ import sqlite3
29
+ import sys
30
+ from datetime import datetime, timezone
31
+ from pathlib import Path
32
+ from typing import Dict
33
+
34
+ # codegraph edge kind -> (patch reference table, columns)
35
+ _EDGE_TABLE = {
36
+ "references": ("symbol_refs", ("source_id", "target_id", "ref_type")),
37
+ "calls": ("symbol_calls", ("symbol_id", "target_id")),
38
+ "imports": ("symbol_imports", ("symbol_id", "target_id")),
39
+ }
40
+
41
+
42
+ def build_patch_db(codegraph_db: Path, out_db: Path) -> Dict[str, int]:
43
+ """Translate a codegraph SQLite into a patch-compatible symbol-graph DB.
44
+ Returns counts. Rebuilds out_db from scratch (idempotent)."""
45
+ if not Path(codegraph_db).exists():
46
+ raise FileNotFoundError(f"codegraph db not found: {codegraph_db}; run `codegraph index` first")
47
+ src = sqlite3.connect(f"file:{codegraph_db}?mode=ro", uri=True)
48
+ src.row_factory = sqlite3.Row
49
+ if Path(out_db).exists():
50
+ Path(out_db).unlink()
51
+ dst = sqlite3.connect(str(out_db))
52
+ try:
53
+ dst.executescript(
54
+ """
55
+ CREATE TABLE symbols (
56
+ id TEXT PRIMARY KEY, name TEXT, type TEXT, file_path TEXT,
57
+ line_start INTEGER, line_end INTEGER, metadata TEXT, layer TEXT
58
+ );
59
+ CREATE TABLE refs (source_id TEXT, target_id TEXT, ref_type TEXT, confidence REAL);
60
+ CREATE TABLE symbol_refs (source_id TEXT, target_id TEXT, ref_type TEXT);
61
+ CREATE TABLE symbol_calls (symbol_id TEXT, target_id TEXT);
62
+ CREATE TABLE symbol_imports (symbol_id TEXT, target_id TEXT);
63
+ CREATE TABLE metadata (key TEXT PRIMARY KEY, value TEXT);
64
+ CREATE INDEX idx_symbols_name ON symbols(name);
65
+ CREATE INDEX idx_symbols_file ON symbols(file_path);
66
+ CREATE INDEX idx_refs_target ON refs(target_id);
67
+ """
68
+ )
69
+ counts = {"symbols": 0, "refs": 0, "symbol_refs": 0, "symbol_calls": 0, "symbol_imports": 0}
70
+ # codegraph nodes carry no `metadata` column. PropagationEngine does
71
+ # json.loads(metadata) so it MUST be a JSON object (or NULL -> "{}").
72
+ # Pack the useful codegraph fields (signature) as JSON. layer has no
73
+ # codegraph equivalent -> NULL.
74
+ for r in src.execute(
75
+ "SELECT id, name, kind, file_path, start_line, end_line, signature FROM nodes"
76
+ ):
77
+ meta = json.dumps({"signature": r["signature"]}) if r["signature"] else None
78
+ dst.execute(
79
+ "INSERT OR IGNORE INTO symbols (id,name,type,file_path,line_start,line_end,metadata,layer)"
80
+ " VALUES (?,?,?,?,?,?,?,?)",
81
+ (r["id"], r["name"], r["kind"], r["file_path"],
82
+ r["start_line"], r["end_line"], meta, None),
83
+ )
84
+ counts["symbols"] += 1
85
+ for e in src.execute("SELECT source, target, kind FROM edges"):
86
+ s, t, k = e["source"], e["target"], e["kind"]
87
+ dst.execute("INSERT INTO refs (source_id,target_id,ref_type,confidence) VALUES (?,?,?,?)",
88
+ (s, t, k, 1.0))
89
+ counts["refs"] += 1
90
+ spec = _EDGE_TABLE.get(k)
91
+ if spec:
92
+ table, cols = spec
93
+ dst.execute(f"INSERT INTO {table} ({','.join(cols)}) VALUES ({','.join('?' * len(cols))})",
94
+ (s, t, k) if len(cols) == 3 else (s, t))
95
+ counts[table] += 1
96
+ dst.execute("INSERT INTO metadata (key,value) VALUES ('indexed_at', ?)",
97
+ (datetime.now(timezone.utc).isoformat(),))
98
+ dst.execute("INSERT INTO metadata (key,value) VALUES ('source', 'codegraph')")
99
+ dst.commit()
100
+ return counts
101
+ finally:
102
+ src.close()
103
+ dst.close()
104
+
105
+
106
+ def main() -> int:
107
+ import argparse
108
+ p = argparse.ArgumentParser(description="Build a wicked-patch --db from codegraph's SQLite.")
109
+ p.add_argument("--codegraph-db", default=".codegraph/codegraph.db")
110
+ p.add_argument("--out", default=".wicked/patch-symbols.db")
111
+ a = p.parse_args()
112
+ out = Path(a.out)
113
+ out.parent.mkdir(parents=True, exist_ok=True)
114
+ try:
115
+ counts = build_patch_db(Path(a.codegraph_db), out)
116
+ except FileNotFoundError as e:
117
+ print(str(e), file=sys.stderr)
118
+ return 1
119
+ import json
120
+ print(json.dumps({"out": str(out), **counts}, indent=2))
121
+ return 0
122
+
123
+
124
+ if __name__ == "__main__":
125
+ sys.exit(main())
@@ -0,0 +1,56 @@
1
+ """
2
+ Code generators for wicked-patch.
3
+
4
+ Generators are the code-production side of the patch pipeline:
5
+ - Input: change spec + affected symbols
6
+ - Output: concrete patches per file
7
+
8
+ Uses the symbol graph (from --db or wicked-brain once available) to
9
+ propagate changes across all affected files automatically.
10
+ """
11
+
12
+ from .base import (
13
+ BaseGenerator,
14
+ GeneratorRegistry,
15
+ register_generator,
16
+ ChangeSpec,
17
+ ChangeType,
18
+ FieldSpec,
19
+ Patch,
20
+ PatchSet,
21
+ )
22
+
23
+ # Import generators to register them
24
+ from . import java_generator
25
+ from . import jsp_generator
26
+ from . import python_generator
27
+ from . import typescript_generator
28
+ from . import sql_generator
29
+ from . import go_generator
30
+ from . import csharp_generator
31
+ from . import ruby_generator
32
+ from . import kotlin_generator
33
+ from . import rust_generator
34
+ from . import php_generator
35
+ from . import perl_generator
36
+
37
+ # Import propagation engine
38
+ from .propagation_engine import PropagationEngine, PropagationPlan, AffectedSymbol
39
+
40
+ __all__ = [
41
+ # Base classes
42
+ "BaseGenerator",
43
+ "GeneratorRegistry",
44
+ "register_generator",
45
+ # Change specifications
46
+ "ChangeSpec",
47
+ "ChangeType",
48
+ "FieldSpec",
49
+ # Patch handling
50
+ "Patch",
51
+ "PatchSet",
52
+ # Propagation
53
+ "PropagationEngine",
54
+ "PropagationPlan",
55
+ "AffectedSymbol",
56
+ ]
@@ -0,0 +1,373 @@
1
+ """
2
+ Base generator interface and registry for language-agnostic code generation.
3
+
4
+ Generators are the symmetric counterpart to adapters. While adapters extract
5
+ symbols from code, generators create patches to modify code based on change
6
+ specifications and the symbol graph.
7
+
8
+ Architecture:
9
+ ChangeSpec -> Generator.generate() -> Patch/PatchSet
10
+
11
+ The propagation engine uses lineage paths to coordinate generators:
12
+ 1. User specifies a change to a symbol (e.g., add field to entity)
13
+ 2. Lineage tracer finds all dependent symbols
14
+ 3. For each affected file, the appropriate generator creates patches
15
+ 4. All patches are returned as a PatchSet for review/application
16
+ """
17
+
18
+ from abc import ABC, abstractmethod
19
+ from dataclasses import dataclass, field
20
+ from enum import Enum
21
+ from pathlib import Path
22
+ from typing import Any, Dict, List, Optional, Set, Type, Union
23
+ import logging
24
+ import threading
25
+
26
+ logger = logging.getLogger(__name__)
27
+
28
+
29
+ class ChangeType(str, Enum):
30
+ """Types of changes that can be propagated."""
31
+ ADD_FIELD = "add_field" # Add a field to an entity/class
32
+ REMOVE_FIELD = "remove_field" # Remove a field
33
+ RENAME_FIELD = "rename_field" # Rename a field
34
+ MODIFY_FIELD = "modify_field" # Change field type or attributes
35
+ ADD_VALIDATION = "add_validation" # Add validation logic
36
+ ADD_COLUMN = "add_column" # Add database column
37
+ RENAME_COLUMN = "rename_column" # Rename database column
38
+ ADD_UI_BINDING = "add_ui_binding" # Add UI binding for field
39
+ UPDATE_UI_BINDING = "update_ui_binding" # Update existing UI binding
40
+
41
+
42
+ @dataclass
43
+ class FieldSpec:
44
+ """Specification for a field/property."""
45
+ name: str
46
+ type: str # Language-agnostic type hint
47
+ nullable: bool = True
48
+ default: Optional[str] = None
49
+ validation: Optional[Dict[str, Any]] = None # e.g., {"min": 0, "max": 100}
50
+ annotations: List[str] = field(default_factory=list)
51
+ column_name: Optional[str] = None # Database column name if different
52
+ label: Optional[str] = None # UI label
53
+ description: Optional[str] = None
54
+
55
+
56
+ @dataclass
57
+ class ChangeSpec:
58
+ """
59
+ Specification for a change to propagate.
60
+
61
+ This is language-agnostic - the generator translates it to
62
+ language-specific code modifications.
63
+ """
64
+ change_type: ChangeType
65
+ target_symbol_id: str # Symbol being modified
66
+ field_spec: Optional[FieldSpec] = None # For add/modify field
67
+ old_name: Optional[str] = None # For rename operations
68
+ new_name: Optional[str] = None # For rename operations
69
+ metadata: Dict[str, Any] = field(default_factory=dict)
70
+
71
+ def __post_init__(self):
72
+ if isinstance(self.change_type, str):
73
+ self.change_type = ChangeType(self.change_type)
74
+
75
+
76
+ @dataclass
77
+ class Patch:
78
+ """
79
+ A single code modification.
80
+
81
+ Patches are expressed as line-based edits to maintain
82
+ readability and allow for conflict detection.
83
+ """
84
+ file_path: str
85
+ line_start: int # 1-based line number
86
+ line_end: int # Inclusive end line
87
+ old_content: str # Original lines (for verification)
88
+ new_content: str # Replacement content
89
+ description: str # Human-readable description
90
+ symbol_id: Optional[str] = None # Related symbol
91
+ confidence: str = "high" # high/medium/low
92
+
93
+ @property
94
+ def is_insert(self) -> bool:
95
+ """True if this is an insertion (no lines replaced)."""
96
+ return self.line_start > self.line_end
97
+
98
+ @property
99
+ def is_delete(self) -> bool:
100
+ """True if this is a deletion (empty new content)."""
101
+ return not self.new_content.strip()
102
+
103
+ def to_dict(self) -> Dict[str, Any]:
104
+ return {
105
+ "file": self.file_path,
106
+ "line_start": self.line_start,
107
+ "line_end": self.line_end,
108
+ "old": self.old_content,
109
+ "new": self.new_content,
110
+ "description": self.description,
111
+ "symbol_id": self.symbol_id,
112
+ "confidence": self.confidence,
113
+ }
114
+
115
+ def to_unified_diff(self) -> str:
116
+ """Generate unified diff format."""
117
+ from difflib import unified_diff
118
+ old_lines = self.old_content.splitlines(keepends=True)
119
+ new_lines = self.new_content.splitlines(keepends=True)
120
+ diff = unified_diff(
121
+ old_lines, new_lines,
122
+ fromfile=f"a/{self.file_path}",
123
+ tofile=f"b/{self.file_path}",
124
+ lineterm=""
125
+ )
126
+ return "".join(diff)
127
+
128
+
129
+ @dataclass
130
+ class PatchSet:
131
+ """
132
+ Collection of patches for a change propagation.
133
+
134
+ Groups patches by file and provides aggregate statistics.
135
+ """
136
+ change_spec: ChangeSpec
137
+ patches: List[Patch] = field(default_factory=list)
138
+ errors: List[str] = field(default_factory=list)
139
+ warnings: List[str] = field(default_factory=list)
140
+
141
+ @property
142
+ def files_affected(self) -> Set[str]:
143
+ """Set of files that will be modified."""
144
+ return {p.file_path for p in self.patches}
145
+
146
+ @property
147
+ def patch_count(self) -> int:
148
+ return len(self.patches)
149
+
150
+ @property
151
+ def has_errors(self) -> bool:
152
+ return len(self.errors) > 0
153
+
154
+ def patches_by_file(self) -> Dict[str, List[Patch]]:
155
+ """Group patches by file path."""
156
+ by_file: Dict[str, List[Patch]] = {}
157
+ for patch in self.patches:
158
+ if patch.file_path not in by_file:
159
+ by_file[patch.file_path] = []
160
+ by_file[patch.file_path].append(patch)
161
+ # Sort patches within each file by line number (descending for safe application).
162
+ # enumerate() provides a stable secondary key so same-position patches
163
+ # preserve their original generation order after reversal.
164
+ for patches in by_file.values():
165
+ indexed = list(enumerate(patches))
166
+ indexed.sort(key=lambda t: (t[1].line_start, t[0]), reverse=True)
167
+ patches[:] = [p for _, p in indexed]
168
+ return by_file
169
+
170
+ def to_dict(self) -> Dict[str, Any]:
171
+ return {
172
+ "change_type": self.change_spec.change_type.value,
173
+ "target": self.change_spec.target_symbol_id,
174
+ "files_affected": list(self.files_affected),
175
+ "patch_count": self.patch_count,
176
+ "patches": [p.to_dict() for p in self.patches],
177
+ "errors": self.errors,
178
+ "warnings": self.warnings,
179
+ }
180
+
181
+ def summary(self) -> str:
182
+ """Human-readable summary."""
183
+ lines = [
184
+ f"Change: {self.change_spec.change_type.value}",
185
+ f"Target: {self.change_spec.target_symbol_id}",
186
+ f"Files affected: {len(self.files_affected)}",
187
+ f"Patches: {self.patch_count}",
188
+ ]
189
+ if self.errors:
190
+ lines.append(f"Errors: {len(self.errors)}")
191
+ if self.warnings:
192
+ lines.append(f"Warnings: {len(self.warnings)}")
193
+ return "\n".join(lines)
194
+
195
+
196
+ class BaseGenerator(ABC):
197
+ """
198
+ Base class for language-specific code generators.
199
+
200
+ Each generator knows how to create patches for its language
201
+ based on change specifications.
202
+ """
203
+
204
+ # Override in subclasses
205
+ name: str = "base"
206
+ extensions: Set[str] = set() # e.g., {'.java'}
207
+ symbol_types: Set[str] = set() # Symbol types this generator handles
208
+
209
+ def __init__(self, db_path: Optional[Path] = None):
210
+ """
211
+ Initialize generator.
212
+
213
+ Args:
214
+ db_path: Path to symbol database for context lookup
215
+ """
216
+ self.db_path = db_path
217
+ self._conn = None
218
+
219
+ @abstractmethod
220
+ def generate(
221
+ self,
222
+ change_spec: ChangeSpec,
223
+ symbol: Dict[str, Any],
224
+ file_content: str,
225
+ ) -> List[Patch]:
226
+ """
227
+ Generate patches for a change.
228
+
229
+ Args:
230
+ change_spec: The change to apply
231
+ symbol: The symbol being modified (from database)
232
+ file_content: Current content of the file
233
+
234
+ Returns:
235
+ List of patches to apply
236
+ """
237
+ raise NotImplementedError("Subclasses must implement generate() to produce language-specific patches")
238
+
239
+ def supports_file(self, file_path: str) -> bool:
240
+ """Check if this generator handles the given file type."""
241
+ ext = Path(file_path).suffix.lower()
242
+ return ext in self.extensions
243
+
244
+ def supports_symbol(self, symbol_type: str) -> bool:
245
+ """Check if this generator handles the given symbol type."""
246
+ return symbol_type.lower() in {t.lower() for t in self.symbol_types}
247
+
248
+ def _get_indentation(self, line: str) -> str:
249
+ """Extract indentation from a line."""
250
+ return line[:len(line) - len(line.lstrip())]
251
+
252
+ def _map_type(self, generic_type: str, language: str = None) -> str:
253
+ """
254
+ Map a generic type to a language-specific type.
255
+
256
+ Override in subclasses for language-specific mappings.
257
+ """
258
+ # Default mappings
259
+ type_map = {
260
+ "string": "String",
261
+ "int": "int",
262
+ "integer": "Integer",
263
+ "long": "Long",
264
+ "float": "float",
265
+ "double": "double",
266
+ "boolean": "boolean",
267
+ "date": "Date",
268
+ "datetime": "LocalDateTime",
269
+ "decimal": "BigDecimal",
270
+ }
271
+ return type_map.get(generic_type.lower(), generic_type)
272
+
273
+
274
+ # Registry for generators
275
+ _GENERATOR_REGISTRY: Dict[str, Type[BaseGenerator]] = {}
276
+ _instances: Dict[str, BaseGenerator] = {}
277
+ _lock = threading.Lock()
278
+
279
+
280
+ def register_generator(cls: Type[BaseGenerator]) -> Type[BaseGenerator]:
281
+ """
282
+ Decorator to register a generator class.
283
+
284
+ Usage:
285
+ @register_generator
286
+ class JavaGenerator(BaseGenerator):
287
+ name = "java"
288
+ extensions = {'.java'}
289
+ ...
290
+ """
291
+ for ext in cls.extensions:
292
+ _GENERATOR_REGISTRY[ext] = cls
293
+ logger.debug(f"Registered generator {cls.name} for {ext}")
294
+ return cls
295
+
296
+
297
+ class GeneratorRegistry:
298
+ """
299
+ Registry for code generators.
300
+
301
+ Maps file extensions and symbol types to generators.
302
+ Thread-safe with instance caching.
303
+ """
304
+
305
+ @classmethod
306
+ def get_generator(
307
+ cls,
308
+ file_path: str,
309
+ db_path: Optional[Path] = None
310
+ ) -> Optional[BaseGenerator]:
311
+ """
312
+ Get generator instance for a file.
313
+
314
+ Args:
315
+ file_path: Path to file
316
+ db_path: Optional database path
317
+
318
+ Returns:
319
+ Generator instance or None
320
+ """
321
+ ext = Path(file_path).suffix.lower()
322
+ generator_class = _GENERATOR_REGISTRY.get(ext)
323
+
324
+ if not generator_class:
325
+ return None
326
+
327
+ # Thread-safe cache lookup
328
+ cache_key = f"{generator_class.name}:{db_path}"
329
+ with _lock:
330
+ if cache_key not in _instances:
331
+ _instances[cache_key] = generator_class(db_path)
332
+ return _instances[cache_key]
333
+
334
+ @classmethod
335
+ def supported_extensions(cls) -> Set[str]:
336
+ """Get all registered file extensions."""
337
+ return set(_GENERATOR_REGISTRY.keys())
338
+
339
+ @classmethod
340
+ def list_generators(cls) -> Dict[str, Type[BaseGenerator]]:
341
+ """List all registered generators."""
342
+ return dict(_GENERATOR_REGISTRY)
343
+
344
+ @classmethod
345
+ def generate(
346
+ cls,
347
+ change_spec: ChangeSpec,
348
+ symbol: Dict[str, Any],
349
+ file_content: str,
350
+ file_path: str,
351
+ db_path: Optional[Path] = None,
352
+ ) -> List[Patch]:
353
+ """
354
+ Generate patches using the appropriate generator.
355
+
356
+ Args:
357
+ change_spec: Change specification
358
+ symbol: Symbol being modified
359
+ file_content: Current file content
360
+ file_path: Path to file
361
+ db_path: Optional database path
362
+
363
+ Returns:
364
+ List of patches, empty if no generator available
365
+ """
366
+ generator = cls.get_generator(file_path, db_path)
367
+ if generator:
368
+ try:
369
+ return generator.generate(change_spec, symbol, file_content)
370
+ except Exception as e:
371
+ logger.warning(f"Generator {generator.name} failed: {e}")
372
+ return []
373
+ return []