novahiz 0.1.0 → 0.2.2

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 (664) hide show
  1. package/NOTICE.md +10 -17
  2. package/README.md +355 -123
  3. package/adapters/README.md +3 -3
  4. package/adapters/opencode/agent/{novahiz-agent.md → novahiz.md} +6 -4
  5. package/adapters/opencode/commands/novahiz-doctor.md +1 -1
  6. package/adapters/opencode/instructions.md +5 -16
  7. package/adapters/opencode/novahiz.ts +157 -23
  8. package/bundled-skills/{skill-creator/LICENSE.txt → android-reverse-engineering/LICENSE} +5 -17
  9. package/bundled-skills/android-reverse-engineering/references/api-extraction-patterns.md +197 -0
  10. package/bundled-skills/android-reverse-engineering/references/call-flow-analysis.md +210 -0
  11. package/bundled-skills/android-reverse-engineering/references/fernflower-usage.md +115 -0
  12. package/bundled-skills/android-reverse-engineering/references/jadx-usage.md +116 -0
  13. package/bundled-skills/android-reverse-engineering/references/kotlin-name-recovery.md +108 -0
  14. package/bundled-skills/android-reverse-engineering/references/setup-guide.md +221 -0
  15. package/bundled-skills/android-reverse-engineering/references/third_party_hosts.txt +122 -0
  16. package/bundled-skills/android-reverse-engineering/scripts/check-deps.ps1 +165 -0
  17. package/bundled-skills/android-reverse-engineering/scripts/check-deps.sh +129 -0
  18. package/bundled-skills/android-reverse-engineering/scripts/decompile.ps1 +400 -0
  19. package/bundled-skills/android-reverse-engineering/scripts/decompile.sh +578 -0
  20. package/bundled-skills/android-reverse-engineering/scripts/find-api-calls.ps1 +121 -0
  21. package/bundled-skills/android-reverse-engineering/scripts/find-api-calls.sh +339 -0
  22. package/bundled-skills/android-reverse-engineering/scripts/fingerprint.sh +241 -0
  23. package/bundled-skills/android-reverse-engineering/scripts/install-dep.ps1 +345 -0
  24. package/bundled-skills/android-reverse-engineering/scripts/install-dep.sh +448 -0
  25. package/bundled-skills/android-reverse-engineering/scripts/lookup-name.sh +85 -0
  26. package/bundled-skills/android-reverse-engineering/scripts/recover-kotlin-names.sh +140 -0
  27. package/bundled-skills/memory-save/SKILL.md +2 -2
  28. package/catalog/categories.json +1093 -1030
  29. package/catalog/overrides.json +33 -201
  30. package/catalog/providers.json +29 -102
  31. package/catalog/rules.json +84 -80
  32. package/docs/ARCHITECTURE.md +69 -19
  33. package/docs/CATALOG.md +129 -0
  34. package/docs/CLASSIFICATION.md +129 -0
  35. package/docs/CLI.md +202 -0
  36. package/docs/CONFIGURATION.md +97 -0
  37. package/docs/CONSTITUTION.md +3 -3
  38. package/docs/EXECUTION.md +100 -53
  39. package/docs/GATE.md +177 -0
  40. package/docs/HARNESSES.md +2 -2
  41. package/docs/INSTALL.md +3 -3
  42. package/docs/PLUGIN.md +150 -0
  43. package/docs/PROVIDERS.md +10 -12
  44. package/docs/ROADMAPS.md +8 -8
  45. package/docs/RULES.md +21 -16
  46. package/docs/TOKENS.md +2 -2
  47. package/install/bootstrap.mjs +9 -12
  48. package/install/install.mjs +66 -53
  49. package/install/lib.mjs +15 -1
  50. package/install/uninstall.mjs +11 -11
  51. package/mcp/novahiz-tools/index.mjs +244 -40
  52. package/novahiz.config.example.json +0 -1
  53. package/package.json +12 -10
  54. package/skills/ai-security/SKILL.md +91 -323
  55. package/skills/ai-security/references/atlas-coverage.md +38 -128
  56. package/skills/ai-security/scripts/ai_threat_scanner.py +341 -532
  57. package/skills/anti-AI-design/SKILL.md +48 -165
  58. package/skills/apple-hig-audit/SKILL.md +64 -0
  59. package/skills/apple-hig-audit/references/accessibility.md +78 -0
  60. package/skills/apple-hig-audit/references/platform-specifics.md +57 -0
  61. package/skills/apple-hig-audit/references/visual-design.md +68 -0
  62. package/skills/apple-hig-audit/scripts/hig_checker.py +115 -0
  63. package/skills/apple-hig-audit/templates/hig-audit-template.md +114 -0
  64. package/skills/dependency-auditor/README.md +58 -484
  65. package/skills/dependency-auditor/SKILL.md +82 -53
  66. package/skills/dependency-auditor/references/dependency_management_best_practices.md +32 -629
  67. package/skills/dependency-auditor/references/license_compatibility_matrix.md +57 -238
  68. package/skills/dependency-auditor/references/vulnerability_assessment_guide.md +42 -441
  69. package/skills/dependency-auditor/scripts/dep_scanner.py +569 -768
  70. package/skills/dependency-auditor/scripts/license_checker.py +425 -979
  71. package/skills/dependency-auditor/scripts/upgrade_planner.py +463 -1002
  72. package/skills/design-system-tokens/SKILL.md +90 -0
  73. package/skills/design-system-tokens/assets/design_system_doc_template.md +129 -0
  74. package/skills/design-system-tokens/references/component-architecture.md +88 -0
  75. package/skills/design-system-tokens/references/developer-handoff.md +61 -0
  76. package/skills/design-system-tokens/references/responsive-calculations.md +72 -0
  77. package/skills/design-system-tokens/references/token-generation.md +62 -0
  78. package/skills/design-system-tokens/scripts/design_token_generator.py +315 -0
  79. package/skills/engineering-code-standards/SKILL.md +174 -0
  80. package/skills/env-secrets-manager/SKILL.md +67 -225
  81. package/skills/env-secrets-manager/references/secret-patterns.md +43 -28
  82. package/skills/env-secrets-manager/references/validation-detection-rotation.md +50 -332
  83. package/skills/env-secrets-manager/scripts/env_auditor.py +305 -110
  84. package/skills/frontend-design-taste/SKILL.md +62 -0
  85. package/skills/gate/SKILL.md +12 -2
  86. package/skills/mcp-server-builder/README.md +6 -14
  87. package/skills/mcp-server-builder/SKILL.md +93 -49
  88. package/skills/mcp-server-builder/references/production-hardening-guide.md +5 -3
  89. package/skills/mcp-server-builder/references/python-server-template.md +1 -1
  90. package/skills/mcp-server-builder/references/spec-compatibility.md +129 -0
  91. package/skills/mcp-server-builder/references/typescript-server-template.md +1 -1
  92. package/skills/mcp-server-builder/scripts/mcp_validator.py +3 -9
  93. package/skills/mcp-server-builder/scripts/openapi_to_mcp.py +3 -8
  94. package/skills/memory/SKILL.md +11 -3
  95. package/skills/novahiz-analyse/SKILL.md +19 -15
  96. package/skills/novahiz-assess-decide/SKILL.md +81 -0
  97. package/skills/novahiz-assess-define/SKILL.md +78 -0
  98. package/skills/novahiz-assess-intake/SKILL.md +90 -0
  99. package/skills/novahiz-assess-research/SKILL.md +79 -0
  100. package/skills/novahiz-assess-shape/SKILL.md +79 -0
  101. package/skills/novahiz-audit/SKILL.md +52 -54
  102. package/skills/novahiz-browser/SKILL.md +56 -0
  103. package/skills/novahiz-clarify/SKILL.md +38 -35
  104. package/skills/novahiz-code-review/SKILL.md +86 -0
  105. package/skills/novahiz-converge/SKILL.md +30 -26
  106. package/skills/novahiz-delta-review/SKILL.md +87 -0
  107. package/skills/novahiz-docs/SKILL.md +79 -0
  108. package/skills/novahiz-docs/templates/ARCHITECTURE.md +49 -0
  109. package/skills/novahiz-docs/templates/CONVENTIONS.md +50 -0
  110. package/skills/novahiz-docs/templates/DECISIONS.md +28 -0
  111. package/skills/novahiz-docs/templates/STANDARDS.md +48 -0
  112. package/skills/novahiz-gate/SKILL.md +27 -31
  113. package/skills/novahiz-humanizer/SKILL.md +617 -0
  114. package/skills/novahiz-implement/SKILL.md +27 -23
  115. package/skills/novahiz-memory/SKILL.md +29 -27
  116. package/skills/novahiz-plan/SKILL.md +42 -38
  117. package/skills/novahiz-planner/SKILL.md +21 -16
  118. package/skills/novahiz-postgres/SKILL.md +100 -0
  119. package/skills/novahiz-security/SKILL.md +228 -0
  120. package/skills/novahiz-supabase/SKILL.md +177 -0
  121. package/skills/novahiz-task/SKILL.md +34 -30
  122. package/skills/novahiz-wcag-audit/SKILL.md +79 -0
  123. package/skills/novahiz-wcag-audit/references/findings.example.json +36 -0
  124. package/skills/novahiz-wcag-audit/references/report-template.md +55 -0
  125. package/skills/novahiz-wcag-audit/references/wcag22-aa.md +153 -0
  126. package/skills/novahiz-wcag-audit/scripts/contrast.mjs +140 -0
  127. package/skills/novahiz-wcag-audit/scripts/report.mjs +141 -0
  128. package/skills/novahiz-web-extract/SKILL.md +175 -0
  129. package/skills/playwright-agent/SKILL.md +39 -34
  130. package/skills/prompt-rewriter/SKILL.md +85 -0
  131. package/skills/skill-creator/LICENSE.txt +11 -199
  132. package/skills/skill-creator/SKILL.md +166 -180
  133. package/skills/skill-creator/agents/analyzer.md +1 -1
  134. package/skills/skill-creator/agents/grader.md +8 -8
  135. package/skills/skill-creator/assets/eval_review.html +20 -23
  136. package/skills/skill-creator/eval-viewer/generate_review.py +2 -2
  137. package/skills/skill-creator/eval-viewer/viewer.html +34 -38
  138. package/skills/skill-creator/references/schemas.md +2 -2
  139. package/skills/skill-creator/scripts/aggregate_benchmark.py +6 -6
  140. package/skills/skill-creator/scripts/generate_report.py +27 -31
  141. package/skills/skill-creator/scripts/improve_description.py +10 -10
  142. package/skills/skill-creator/scripts/package_skill.py +8 -8
  143. package/skills/skill-creator/scripts/run_eval.py +6 -6
  144. package/skills/write-a-skill/SKILL.md +48 -78
  145. package/skills/write-a-skill/references/companion_tooling.md +18 -24
  146. package/skills/write-a-skill/references/description_design_patterns.md +36 -39
  147. package/skills/write-a-skill/references/progressive_disclosure_principles.md +31 -33
  148. package/skills/write-a-skill/references/quality_gates_for_skills.md +27 -27
  149. package/skills/write-a-skill/scripts/skill_description_validator.py +12 -26
  150. package/skills/write-a-skill/scripts/skill_review_checklist_runner.py +10 -21
  151. package/skills/write-a-skill/scripts/skill_structure_validator.py +13 -25
  152. package/src/catalog.ts +18 -4
  153. package/src/classify.ts +42 -5
  154. package/src/cli.ts +129 -44
  155. package/src/commands/clean.ts +26 -20
  156. package/src/commands/context.ts +11 -5
  157. package/src/commands/doctor.ts +217 -191
  158. package/src/commands/gate.ts +98 -60
  159. package/src/commands/graft.ts +160 -0
  160. package/src/commands/inspect.ts +35 -9
  161. package/src/commands/report.ts +20 -12
  162. package/src/commands/task.ts +17 -9
  163. package/src/commands/tokens.ts +5 -5
  164. package/src/complexity.ts +305 -0
  165. package/src/content.ts +28 -3
  166. package/src/db.ts +44 -7
  167. package/src/gate.ts +401 -261
  168. package/src/graft.ts +221 -0
  169. package/src/ledger.ts +117 -48
  170. package/src/memory.ts +502 -0
  171. package/src/prompt-rewriter.ts +170 -0
  172. package/src/providers.ts +7 -0
  173. package/src/render.ts +1 -1
  174. package/src/spec.ts +18 -7
  175. package/src/targets.ts +22 -1
  176. package/bundled-skills/AGENTS.md +0 -50
  177. package/bundled-skills/LICENSE +0 -21
  178. package/bundled-skills/README.md +0 -202
  179. package/bundled-skills/a11y-audit/SKILL.md +0 -211
  180. package/bundled-skills/a11y-audit/assets/sample-component.tsx +0 -51
  181. package/bundled-skills/a11y-audit/expected_outputs/sample-contrast-output.txt +0 -39
  182. package/bundled-skills/a11y-audit/expected_outputs/sample-scan-output.json +0 -34
  183. package/bundled-skills/a11y-audit/expected_outputs/sample-scan-report.md +0 -63
  184. package/bundled-skills/a11y-audit/references/aria-patterns.md +0 -223
  185. package/bundled-skills/a11y-audit/references/audit-report-template.md +0 -46
  186. package/bundled-skills/a11y-audit/references/ci-cd-integration.md +0 -127
  187. package/bundled-skills/a11y-audit/references/color-contrast-guide.md +0 -83
  188. package/bundled-skills/a11y-audit/references/examples-by-framework.md +0 -312
  189. package/bundled-skills/a11y-audit/references/framework-a11y-patterns.md +0 -661
  190. package/bundled-skills/a11y-audit/references/testing-checklist.md +0 -41
  191. package/bundled-skills/a11y-audit/references/wcag-22-new-criteria.md +0 -79
  192. package/bundled-skills/a11y-audit/references/wcag-quick-ref.md +0 -113
  193. package/bundled-skills/a11y-audit/scripts/a11y_scanner.py +0 -684
  194. package/bundled-skills/a11y-audit/scripts/contrast_checker.py +0 -504
  195. package/bundled-skills/adversarial-reviewer/SKILL.md +0 -247
  196. package/bundled-skills/anti-AI-design/SKILL.md +0 -189
  197. package/bundled-skills/anti-pattern-detector/SKILL.md +0 -185
  198. package/bundled-skills/anti-pattern-detector/references/async-network-patterns.md +0 -581
  199. package/bundled-skills/anti-pattern-detector/references/build-deploy-patterns.md +0 -554
  200. package/bundled-skills/anti-pattern-detector/references/cache-patterns.md +0 -446
  201. package/bundled-skills/anti-pattern-detector/references/cloud-infra-patterns.md +0 -538
  202. package/bundled-skills/anti-pattern-detector/references/concurrency-patterns.md +0 -558
  203. package/bundled-skills/anti-pattern-detector/references/language-specific-patterns.md +0 -740
  204. package/bundled-skills/anti-pattern-detector/references/monitoring-patterns.md +0 -456
  205. package/bundled-skills/api-design-reviewer/SKILL.md +0 -433
  206. package/bundled-skills/api-design-reviewer/references/api_antipatterns.md +0 -680
  207. package/bundled-skills/api-design-reviewer/references/rest_design_rules.md +0 -487
  208. package/bundled-skills/api-design-reviewer/scripts/api_linter.py +0 -956
  209. package/bundled-skills/api-design-reviewer/scripts/api_scorecard.py +0 -1661
  210. package/bundled-skills/api-design-reviewer/scripts/breaking_change_detector.py +0 -1102
  211. package/bundled-skills/apple-hig-expert/SKILL.md +0 -108
  212. package/bundled-skills/apple-hig-expert/references/accessibility.md +0 -55
  213. package/bundled-skills/apple-hig-expert/references/platform-specifics.md +0 -48
  214. package/bundled-skills/apple-hig-expert/references/visual-design.md +0 -69
  215. package/bundled-skills/apple-hig-expert/scripts/hig_checker.py +0 -97
  216. package/bundled-skills/apple-hig-expert/templates/hig-audit-template.md +0 -83
  217. package/bundled-skills/clean-code/SKILL.md +0 -99
  218. package/bundled-skills/code-reviewer/README.md +0 -92
  219. package/bundled-skills/code-reviewer/SKILL.md +0 -183
  220. package/bundled-skills/code-reviewer/assets/sample_c_clean.c +0 -71
  221. package/bundled-skills/code-reviewer/assets/sample_c_smells.c +0 -66
  222. package/bundled-skills/code-reviewer/assets/sample_csharp_clean.cs +0 -100
  223. package/bundled-skills/code-reviewer/assets/sample_csharp_smells.cs +0 -78
  224. package/bundled-skills/code-reviewer/assets/sample_java_clean.java +0 -55
  225. package/bundled-skills/code-reviewer/assets/sample_java_smells.java +0 -56
  226. package/bundled-skills/code-reviewer/expected_outputs/sample_c_clean_quality.json +0 -65
  227. package/bundled-skills/code-reviewer/expected_outputs/sample_c_smells_quality.json +0 -155
  228. package/bundled-skills/code-reviewer/expected_outputs/sample_csharp_clean_quality.json +0 -135
  229. package/bundled-skills/code-reviewer/expected_outputs/sample_csharp_smells_quality.json +0 -143
  230. package/bundled-skills/code-reviewer/expected_outputs/sample_java_clean_quality.json +0 -53
  231. package/bundled-skills/code-reviewer/expected_outputs/sample_java_smells_quality.json +0 -83
  232. package/bundled-skills/code-reviewer/languages/c.md +0 -103
  233. package/bundled-skills/code-reviewer/languages/cpp.md +0 -103
  234. package/bundled-skills/code-reviewer/languages/csharp.md +0 -97
  235. package/bundled-skills/code-reviewer/languages/dart.md +0 -108
  236. package/bundled-skills/code-reviewer/languages/go.md +0 -92
  237. package/bundled-skills/code-reviewer/languages/java.md +0 -103
  238. package/bundled-skills/code-reviewer/languages/kotlin.md +0 -88
  239. package/bundled-skills/code-reviewer/languages/php.md +0 -109
  240. package/bundled-skills/code-reviewer/languages/python.md +0 -94
  241. package/bundled-skills/code-reviewer/languages/ruby.md +0 -105
  242. package/bundled-skills/code-reviewer/languages/rust.md +0 -99
  243. package/bundled-skills/code-reviewer/languages/swift.md +0 -88
  244. package/bundled-skills/code-reviewer/languages/typescript.md +0 -97
  245. package/bundled-skills/code-reviewer/rules/universal.md +0 -49
  246. package/bundled-skills/code-reviewer/scripts/code_quality_checker.py +0 -1020
  247. package/bundled-skills/code-reviewer/scripts/pr_analyzer.py +0 -535
  248. package/bundled-skills/code-reviewer/scripts/review_report_generator.py +0 -505
  249. package/bundled-skills/code-understand/SKILL.md +0 -90
  250. package/bundled-skills/database-designer/README.md +0 -388
  251. package/bundled-skills/database-designer/SKILL.md +0 -314
  252. package/bundled-skills/database-designer/assets/sample_query_patterns.json +0 -375
  253. package/bundled-skills/database-designer/assets/sample_schema.json +0 -372
  254. package/bundled-skills/database-designer/assets/sample_schema.sql +0 -207
  255. package/bundled-skills/database-designer/expected_outputs/index_optimization_sample.txt +0 -60
  256. package/bundled-skills/database-designer/expected_outputs/migration_sample.txt +0 -124
  257. package/bundled-skills/database-designer/expected_outputs/schema_analysis_sample.txt +0 -222
  258. package/bundled-skills/database-designer/index_optimizer.py +0 -926
  259. package/bundled-skills/database-designer/migration_generator.py +0 -1199
  260. package/bundled-skills/database-designer/references/database-design-reference.md +0 -476
  261. package/bundled-skills/database-designer/references/database_selection_decision_tree.md +0 -373
  262. package/bundled-skills/database-designer/references/index_strategy_patterns.md +0 -424
  263. package/bundled-skills/database-designer/references/normalization_guide.md +0 -354
  264. package/bundled-skills/database-designer/schema_analyzer.py +0 -982
  265. package/bundled-skills/defuddle/SKILL.md +0 -41
  266. package/bundled-skills/dependency-auditor/README.md +0 -524
  267. package/bundled-skills/dependency-auditor/SKILL.md +0 -85
  268. package/bundled-skills/dependency-auditor/assets/sample_go.mod +0 -53
  269. package/bundled-skills/dependency-auditor/assets/sample_package.json +0 -72
  270. package/bundled-skills/dependency-auditor/assets/sample_requirements.txt +0 -71
  271. package/bundled-skills/dependency-auditor/expected_outputs/sample_license_report.txt +0 -37
  272. package/bundled-skills/dependency-auditor/expected_outputs/sample_upgrade_plan.txt +0 -59
  273. package/bundled-skills/dependency-auditor/expected_outputs/sample_vulnerability_report.json +0 -71
  274. package/bundled-skills/dependency-auditor/references/dependency_management_best_practices.md +0 -643
  275. package/bundled-skills/dependency-auditor/references/license_compatibility_matrix.md +0 -238
  276. package/bundled-skills/dependency-auditor/references/vulnerability_assessment_guide.md +0 -461
  277. package/bundled-skills/dependency-auditor/scripts/dep_scanner.py +0 -794
  278. package/bundled-skills/dependency-auditor/scripts/license_checker.py +0 -996
  279. package/bundled-skills/dependency-auditor/scripts/upgrade_planner.py +0 -1029
  280. package/bundled-skills/dependency-auditor/test-inventory.json +0 -421
  281. package/bundled-skills/dependency-auditor/test-project/package.json +0 -72
  282. package/bundled-skills/design-taste-frontend/SKILL.md +0 -247
  283. package/bundled-skills/engineering-standards/SKILL.md +0 -736
  284. package/bundled-skills/env-secrets-manager/SKILL.md +0 -260
  285. package/bundled-skills/env-secrets-manager/references/secret-patterns.md +0 -41
  286. package/bundled-skills/env-secrets-manager/references/validation-detection-rotation.md +0 -358
  287. package/bundled-skills/env-secrets-manager/scripts/env_auditor.py +0 -145
  288. package/bundled-skills/fix/SKILL.md +0 -113
  289. package/bundled-skills/fix/flaky-taxonomy.md +0 -134
  290. package/bundled-skills/gate/SKILL.md +0 -13
  291. package/bundled-skills/humanizer/SKILL.md +0 -374
  292. package/bundled-skills/impeccable/SKILL.md +0 -89
  293. package/bundled-skills/impeccable/reference/adapt.md +0 -312
  294. package/bundled-skills/impeccable/reference/adapt.native.md +0 -58
  295. package/bundled-skills/impeccable/reference/android.md +0 -46
  296. package/bundled-skills/impeccable/reference/animate.md +0 -89
  297. package/bundled-skills/impeccable/reference/audit.md +0 -136
  298. package/bundled-skills/impeccable/reference/audit.native.md +0 -139
  299. package/bundled-skills/impeccable/reference/bolder.md +0 -33
  300. package/bundled-skills/impeccable/reference/clarify.md +0 -94
  301. package/bundled-skills/impeccable/reference/colorize.md +0 -86
  302. package/bundled-skills/impeccable/reference/craft-floor.md +0 -44
  303. package/bundled-skills/impeccable/reference/craft.md +0 -5
  304. package/bundled-skills/impeccable/reference/critique.md +0 -806
  305. package/bundled-skills/impeccable/reference/degraded/asset-producer.md +0 -37
  306. package/bundled-skills/impeccable/reference/degraded/documenter.md +0 -24
  307. package/bundled-skills/impeccable/reference/degraded/finish-reviewer.md +0 -38
  308. package/bundled-skills/impeccable/reference/degraded/manual-edit-applier.md +0 -92
  309. package/bundled-skills/impeccable/reference/delight.md +0 -70
  310. package/bundled-skills/impeccable/reference/distill.md +0 -111
  311. package/bundled-skills/impeccable/reference/doctor.md +0 -54
  312. package/bundled-skills/impeccable/reference/document.md +0 -416
  313. package/bundled-skills/impeccable/reference/extract.md +0 -69
  314. package/bundled-skills/impeccable/reference/harden.md +0 -336
  315. package/bundled-skills/impeccable/reference/hooks.md +0 -111
  316. package/bundled-skills/impeccable/reference/init.md +0 -131
  317. package/bundled-skills/impeccable/reference/ios.md +0 -51
  318. package/bundled-skills/impeccable/reference/layout.md +0 -84
  319. package/bundled-skills/impeccable/reference/live-setup.md +0 -104
  320. package/bundled-skills/impeccable/reference/live.md +0 -325
  321. package/bundled-skills/impeccable/reference/new-work.md +0 -145
  322. package/bundled-skills/impeccable/reference/onboard.md +0 -234
  323. package/bundled-skills/impeccable/reference/operate.md +0 -61
  324. package/bundled-skills/impeccable/reference/optimize.md +0 -258
  325. package/bundled-skills/impeccable/reference/overdrive.md +0 -127
  326. package/bundled-skills/impeccable/reference/polish.md +0 -105
  327. package/bundled-skills/impeccable/reference/quieter.md +0 -99
  328. package/bundled-skills/impeccable/reference/routing.md +0 -24
  329. package/bundled-skills/impeccable/reference/shape.md +0 -59
  330. package/bundled-skills/impeccable/reference/typeset.md +0 -80
  331. package/bundled-skills/impeccable/reference/visualize.md +0 -46
  332. package/bundled-skills/impeccable/scripts/VERSION +0 -1
  333. package/bundled-skills/impeccable/scripts/bin/windows-x64/impeccable.exe +0 -0
  334. package/bundled-skills/impeccable/scripts/command-metadata.json +0 -94
  335. package/bundled-skills/impeccable/scripts/data/font-index-failures.json +0 -121
  336. package/bundled-skills/impeccable/scripts/data/font-index.json +0 -1
  337. package/bundled-skills/impeccable/scripts/impeccable +0 -206
  338. package/bundled-skills/impeccable/scripts/impeccable.cmd +0 -214
  339. package/bundled-skills/impeccable/scripts/live-browser-dom.js +0 -167
  340. package/bundled-skills/impeccable/scripts/live-browser-ignores.js +0 -242
  341. package/bundled-skills/impeccable/scripts/live-browser-session.js +0 -144
  342. package/bundled-skills/impeccable/scripts/live-browser.js +0 -12990
  343. package/bundled-skills/impeccable/scripts/modern-screenshot.umd.js +0 -14
  344. package/bundled-skills/mcp-server-builder/README.md +0 -50
  345. package/bundled-skills/mcp-server-builder/SKILL.md +0 -100
  346. package/bundled-skills/mcp-server-builder/references/openapi-extraction-guide.md +0 -34
  347. package/bundled-skills/mcp-server-builder/references/production-hardening-guide.md +0 -78
  348. package/bundled-skills/mcp-server-builder/references/python-server-template.md +0 -22
  349. package/bundled-skills/mcp-server-builder/references/typescript-server-template.md +0 -19
  350. package/bundled-skills/mcp-server-builder/references/validation-checklist.md +0 -30
  351. package/bundled-skills/mcp-server-builder/scripts/mcp_validator.py +0 -186
  352. package/bundled-skills/mcp-server-builder/scripts/openapi_to_mcp.py +0 -284
  353. package/bundled-skills/memory/SKILL.md +0 -10
  354. package/bundled-skills/migrate/SKILL.md +0 -135
  355. package/bundled-skills/migrate/cypress-mapping.md +0 -79
  356. package/bundled-skills/migrate/selenium-mapping.md +0 -94
  357. package/bundled-skills/novahiz-analyse/SKILL.md +0 -74
  358. package/bundled-skills/novahiz-audit/SKILL.md +0 -75
  359. package/bundled-skills/novahiz-clarify/SKILL.md +0 -94
  360. package/bundled-skills/novahiz-converge/SKILL.md +0 -76
  361. package/bundled-skills/novahiz-gate/SKILL.md +0 -82
  362. package/bundled-skills/novahiz-implement/SKILL.md +0 -80
  363. package/bundled-skills/novahiz-memory/SKILL.md +0 -58
  364. package/bundled-skills/novahiz-plan/SKILL.md +0 -100
  365. package/bundled-skills/novahiz-planner/SKILL.md +0 -104
  366. package/bundled-skills/novahiz-task/SKILL.md +0 -105
  367. package/bundled-skills/playwright-agent/SKILL.md +0 -142
  368. package/bundled-skills/postgresql-optimization/SKILL.md +0 -179
  369. package/bundled-skills/review-changes/SKILL.md +0 -30
  370. package/bundled-skills/security-guidance/SKILL.md +0 -161
  371. package/bundled-skills/security-guidance/references/pretooluse_hook_canon.md +0 -141
  372. package/bundled-skills/senior-architect/SKILL.md +0 -343
  373. package/bundled-skills/senior-architect/references/architecture_patterns.md +0 -470
  374. package/bundled-skills/senior-architect/references/system_design_workflows.md +0 -536
  375. package/bundled-skills/senior-architect/references/tech_decision_guide.md +0 -412
  376. package/bundled-skills/senior-architect/scripts/architecture_diagram_generator.py +0 -660
  377. package/bundled-skills/senior-architect/scripts/dependency_analyzer.py +0 -615
  378. package/bundled-skills/senior-architect/scripts/project_architect.py +0 -749
  379. package/bundled-skills/senior-backend/SKILL.md +0 -467
  380. package/bundled-skills/senior-backend/profiles/django-monolith.json +0 -57
  381. package/bundled-skills/senior-backend/profiles/fastapi-python.json +0 -58
  382. package/bundled-skills/senior-backend/profiles/go-or-rust-microservice.json +0 -62
  383. package/bundled-skills/senior-backend/profiles/node-express.json +0 -57
  384. package/bundled-skills/senior-backend/references/api_design_patterns.md +0 -530
  385. package/bundled-skills/senior-backend/references/backend_security_practices.md +0 -1075
  386. package/bundled-skills/senior-backend/references/composition_map.md +0 -58
  387. package/bundled-skills/senior-backend/references/database_optimization_guide.md +0 -593
  388. package/bundled-skills/senior-backend/references/forcing_questions.md +0 -100
  389. package/bundled-skills/senior-backend/scripts/api_load_tester.py +0 -607
  390. package/bundled-skills/senior-backend/scripts/api_scaffolder.py +0 -645
  391. package/bundled-skills/senior-backend/scripts/backend_decision_engine.py +0 -397
  392. package/bundled-skills/senior-backend/scripts/database_migration_tool.py +0 -858
  393. package/bundled-skills/skill-creator/SKILL.md +0 -485
  394. package/bundled-skills/skill-creator/agents/analyzer.md +0 -274
  395. package/bundled-skills/skill-creator/agents/comparator.md +0 -202
  396. package/bundled-skills/skill-creator/agents/grader.md +0 -223
  397. package/bundled-skills/skill-creator/assets/eval_review.html +0 -146
  398. package/bundled-skills/skill-creator/eval-viewer/generate_review.py +0 -471
  399. package/bundled-skills/skill-creator/eval-viewer/viewer.html +0 -1325
  400. package/bundled-skills/skill-creator/references/schemas.md +0 -430
  401. package/bundled-skills/skill-creator/scripts/__init__.py +0 -0
  402. package/bundled-skills/skill-creator/scripts/aggregate_benchmark.py +0 -401
  403. package/bundled-skills/skill-creator/scripts/generate_report.py +0 -326
  404. package/bundled-skills/skill-creator/scripts/improve_description.py +0 -247
  405. package/bundled-skills/skill-creator/scripts/package_skill.py +0 -136
  406. package/bundled-skills/skill-creator/scripts/quick_validate.py +0 -103
  407. package/bundled-skills/skill-creator/scripts/run_eval.py +0 -310
  408. package/bundled-skills/skill-creator/scripts/run_loop.py +0 -328
  409. package/bundled-skills/skill-creator/scripts/utils.py +0 -47
  410. package/bundled-skills/spec-driven-workflow/SKILL.md +0 -333
  411. package/bundled-skills/spec-driven-workflow/references/acceptance_criteria_patterns.md +0 -497
  412. package/bundled-skills/spec-driven-workflow/references/bounded_autonomy_rules.md +0 -273
  413. package/bundled-skills/spec-driven-workflow/references/spec_format_guide.md +0 -531
  414. package/bundled-skills/spec-driven-workflow/scripts/spec_generator.py +0 -338
  415. package/bundled-skills/spec-driven-workflow/scripts/spec_validator.py +0 -461
  416. package/bundled-skills/spec-driven-workflow/scripts/test_extractor.py +0 -431
  417. package/bundled-skills/supabase/CHANGELOG.md +0 -78
  418. package/bundled-skills/supabase/SKILL.md +0 -149
  419. package/bundled-skills/supabase/assets/feedback-issue-template.md +0 -17
  420. package/bundled-skills/supabase/references/skill-feedback.md +0 -17
  421. package/bundled-skills/supabase-postgres-best-practices/CHANGELOG.md +0 -73
  422. package/bundled-skills/supabase-postgres-best-practices/SKILL.md +0 -64
  423. package/bundled-skills/supabase-postgres-best-practices/references/_contributing.md +0 -170
  424. package/bundled-skills/supabase-postgres-best-practices/references/_sections.md +0 -39
  425. package/bundled-skills/supabase-postgres-best-practices/references/_template.md +0 -34
  426. package/bundled-skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +0 -55
  427. package/bundled-skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +0 -49
  428. package/bundled-skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +0 -46
  429. package/bundled-skills/supabase-postgres-best-practices/references/conn-limits.md +0 -44
  430. package/bundled-skills/supabase-postgres-best-practices/references/conn-pooling.md +0 -41
  431. package/bundled-skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +0 -46
  432. package/bundled-skills/supabase-postgres-best-practices/references/data-batch-inserts.md +0 -54
  433. package/bundled-skills/supabase-postgres-best-practices/references/data-n-plus-one.md +0 -53
  434. package/bundled-skills/supabase-postgres-best-practices/references/data-pagination.md +0 -50
  435. package/bundled-skills/supabase-postgres-best-practices/references/data-upsert.md +0 -50
  436. package/bundled-skills/supabase-postgres-best-practices/references/lock-advisory.md +0 -56
  437. package/bundled-skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +0 -68
  438. package/bundled-skills/supabase-postgres-best-practices/references/lock-short-transactions.md +0 -50
  439. package/bundled-skills/supabase-postgres-best-practices/references/lock-skip-locked.md +0 -54
  440. package/bundled-skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +0 -45
  441. package/bundled-skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +0 -55
  442. package/bundled-skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +0 -55
  443. package/bundled-skills/supabase-postgres-best-practices/references/query-composite-indexes.md +0 -44
  444. package/bundled-skills/supabase-postgres-best-practices/references/query-covering-indexes.md +0 -40
  445. package/bundled-skills/supabase-postgres-best-practices/references/query-index-types.md +0 -48
  446. package/bundled-skills/supabase-postgres-best-practices/references/query-missing-indexes.md +0 -43
  447. package/bundled-skills/supabase-postgres-best-practices/references/query-partial-indexes.md +0 -45
  448. package/bundled-skills/supabase-postgres-best-practices/references/schema-constraints.md +0 -80
  449. package/bundled-skills/supabase-postgres-best-practices/references/schema-data-types.md +0 -46
  450. package/bundled-skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +0 -59
  451. package/bundled-skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +0 -55
  452. package/bundled-skills/supabase-postgres-best-practices/references/schema-partitioning.md +0 -55
  453. package/bundled-skills/supabase-postgres-best-practices/references/schema-primary-keys.md +0 -61
  454. package/bundled-skills/supabase-postgres-best-practices/references/security-privileges.md +0 -54
  455. package/bundled-skills/supabase-postgres-best-practices/references/security-rls-basics.md +0 -50
  456. package/bundled-skills/supabase-postgres-best-practices/references/security-rls-performance.md +0 -63
  457. package/bundled-skills/typescript-expert/SKILL.md +0 -431
  458. package/bundled-skills/typescript-expert/references/tsconfig-strict.json +0 -45
  459. package/bundled-skills/typescript-expert/references/typescript-cheatsheet.md +0 -383
  460. package/bundled-skills/typescript-expert/references/utility-types.ts +0 -335
  461. package/bundled-skills/typescript-expert/scripts/ts_diagnostic.py +0 -203
  462. package/bundled-skills/ui-design-system/SKILL.md +0 -379
  463. package/bundled-skills/ui-design-system/assets/design_system_doc_template.md +0 -180
  464. package/bundled-skills/ui-design-system/references/component-architecture.md +0 -396
  465. package/bundled-skills/ui-design-system/references/developer-handoff.md +0 -509
  466. package/bundled-skills/ui-design-system/references/responsive-calculations.md +0 -390
  467. package/bundled-skills/ui-design-system/references/token-generation.md +0 -324
  468. package/bundled-skills/ui-design-system/scripts/design_token_generator.py +0 -590
  469. package/bundled-skills/write-a-skill/SKILL.md +0 -141
  470. package/bundled-skills/write-a-skill/references/companion_tooling.md +0 -67
  471. package/bundled-skills/write-a-skill/references/description_design_patterns.md +0 -139
  472. package/bundled-skills/write-a-skill/references/progressive_disclosure_principles.md +0 -89
  473. package/bundled-skills/write-a-skill/references/quality_gates_for_skills.md +0 -158
  474. package/bundled-skills/write-a-skill/scripts/skill_description_validator.py +0 -255
  475. package/bundled-skills/write-a-skill/scripts/skill_review_checklist_runner.py +0 -268
  476. package/bundled-skills/write-a-skill/scripts/skill_structure_validator.py +0 -277
  477. package/bundled-skills/zero-hallucination-coder/SKILL.md +0 -271
  478. package/skills/a11y-audit/SKILL.md +0 -211
  479. package/skills/a11y-audit/assets/sample-component.tsx +0 -51
  480. package/skills/a11y-audit/expected_outputs/sample-contrast-output.txt +0 -39
  481. package/skills/a11y-audit/expected_outputs/sample-scan-output.json +0 -34
  482. package/skills/a11y-audit/expected_outputs/sample-scan-report.md +0 -63
  483. package/skills/a11y-audit/references/aria-patterns.md +0 -223
  484. package/skills/a11y-audit/references/audit-report-template.md +0 -46
  485. package/skills/a11y-audit/references/ci-cd-integration.md +0 -127
  486. package/skills/a11y-audit/references/color-contrast-guide.md +0 -83
  487. package/skills/a11y-audit/references/examples-by-framework.md +0 -312
  488. package/skills/a11y-audit/references/framework-a11y-patterns.md +0 -661
  489. package/skills/a11y-audit/references/testing-checklist.md +0 -41
  490. package/skills/a11y-audit/references/wcag-22-new-criteria.md +0 -79
  491. package/skills/a11y-audit/references/wcag-quick-ref.md +0 -113
  492. package/skills/a11y-audit/scripts/a11y_scanner.py +0 -684
  493. package/skills/a11y-audit/scripts/contrast_checker.py +0 -504
  494. package/skills/adversarial-reviewer/SKILL.md +0 -247
  495. package/skills/anti-pattern-detector/SKILL.md +0 -185
  496. package/skills/anti-pattern-detector/references/async-network-patterns.md +0 -581
  497. package/skills/anti-pattern-detector/references/build-deploy-patterns.md +0 -554
  498. package/skills/anti-pattern-detector/references/cache-patterns.md +0 -446
  499. package/skills/anti-pattern-detector/references/cloud-infra-patterns.md +0 -538
  500. package/skills/anti-pattern-detector/references/concurrency-patterns.md +0 -558
  501. package/skills/anti-pattern-detector/references/language-specific-patterns.md +0 -740
  502. package/skills/anti-pattern-detector/references/monitoring-patterns.md +0 -456
  503. package/skills/api-design-reviewer/SKILL.md +0 -433
  504. package/skills/api-design-reviewer/references/api_antipatterns.md +0 -680
  505. package/skills/api-design-reviewer/references/rest_design_rules.md +0 -487
  506. package/skills/api-design-reviewer/scripts/api_linter.py +0 -956
  507. package/skills/api-design-reviewer/scripts/api_scorecard.py +0 -1661
  508. package/skills/api-design-reviewer/scripts/breaking_change_detector.py +0 -1102
  509. package/skills/apple-hig-expert/SKILL.md +0 -108
  510. package/skills/apple-hig-expert/references/accessibility.md +0 -55
  511. package/skills/apple-hig-expert/references/platform-specifics.md +0 -48
  512. package/skills/apple-hig-expert/references/visual-design.md +0 -69
  513. package/skills/apple-hig-expert/scripts/hig_checker.py +0 -97
  514. package/skills/apple-hig-expert/templates/hig-audit-template.md +0 -83
  515. package/skills/clean-code/SKILL.md +0 -99
  516. package/skills/code-reviewer/README.md +0 -92
  517. package/skills/code-reviewer/SKILL.md +0 -183
  518. package/skills/code-reviewer/assets/sample_c_clean.c +0 -71
  519. package/skills/code-reviewer/assets/sample_c_smells.c +0 -66
  520. package/skills/code-reviewer/assets/sample_csharp_clean.cs +0 -100
  521. package/skills/code-reviewer/assets/sample_csharp_smells.cs +0 -78
  522. package/skills/code-reviewer/assets/sample_java_clean.java +0 -55
  523. package/skills/code-reviewer/assets/sample_java_smells.java +0 -56
  524. package/skills/code-reviewer/expected_outputs/sample_c_clean_quality.json +0 -65
  525. package/skills/code-reviewer/expected_outputs/sample_c_smells_quality.json +0 -155
  526. package/skills/code-reviewer/expected_outputs/sample_csharp_clean_quality.json +0 -135
  527. package/skills/code-reviewer/expected_outputs/sample_csharp_smells_quality.json +0 -143
  528. package/skills/code-reviewer/expected_outputs/sample_java_clean_quality.json +0 -53
  529. package/skills/code-reviewer/expected_outputs/sample_java_smells_quality.json +0 -83
  530. package/skills/code-reviewer/languages/c.md +0 -103
  531. package/skills/code-reviewer/languages/cpp.md +0 -103
  532. package/skills/code-reviewer/languages/csharp.md +0 -97
  533. package/skills/code-reviewer/languages/dart.md +0 -108
  534. package/skills/code-reviewer/languages/go.md +0 -92
  535. package/skills/code-reviewer/languages/java.md +0 -103
  536. package/skills/code-reviewer/languages/kotlin.md +0 -88
  537. package/skills/code-reviewer/languages/php.md +0 -109
  538. package/skills/code-reviewer/languages/python.md +0 -94
  539. package/skills/code-reviewer/languages/ruby.md +0 -105
  540. package/skills/code-reviewer/languages/rust.md +0 -99
  541. package/skills/code-reviewer/languages/swift.md +0 -88
  542. package/skills/code-reviewer/languages/typescript.md +0 -97
  543. package/skills/code-reviewer/rules/universal.md +0 -49
  544. package/skills/code-reviewer/scripts/code_quality_checker.py +0 -1020
  545. package/skills/code-reviewer/scripts/pr_analyzer.py +0 -535
  546. package/skills/code-reviewer/scripts/review_report_generator.py +0 -505
  547. package/skills/code-understand/SKILL.md +0 -90
  548. package/skills/database-designer/README.md +0 -388
  549. package/skills/database-designer/SKILL.md +0 -314
  550. package/skills/database-designer/assets/sample_query_patterns.json +0 -375
  551. package/skills/database-designer/assets/sample_schema.json +0 -372
  552. package/skills/database-designer/assets/sample_schema.sql +0 -207
  553. package/skills/database-designer/expected_outputs/index_optimization_sample.txt +0 -60
  554. package/skills/database-designer/expected_outputs/migration_sample.txt +0 -124
  555. package/skills/database-designer/expected_outputs/schema_analysis_sample.txt +0 -222
  556. package/skills/database-designer/index_optimizer.py +0 -926
  557. package/skills/database-designer/migration_generator.py +0 -1199
  558. package/skills/database-designer/references/database-design-reference.md +0 -476
  559. package/skills/database-designer/references/database_selection_decision_tree.md +0 -373
  560. package/skills/database-designer/references/index_strategy_patterns.md +0 -424
  561. package/skills/database-designer/references/normalization_guide.md +0 -354
  562. package/skills/database-designer/schema_analyzer.py +0 -982
  563. package/skills/defuddle/SKILL.md +0 -41
  564. package/skills/design-taste-frontend/SKILL.md +0 -247
  565. package/skills/engineering-standards/SKILL.md +0 -736
  566. package/skills/fix/SKILL.md +0 -113
  567. package/skills/fix/flaky-taxonomy.md +0 -134
  568. package/skills/humanizer/SKILL.md +0 -374
  569. package/skills/migrate/SKILL.md +0 -135
  570. package/skills/migrate/cypress-mapping.md +0 -79
  571. package/skills/migrate/selenium-mapping.md +0 -94
  572. package/skills/postgresql-optimization/SKILL.md +0 -179
  573. package/skills/review-changes/SKILL.md +0 -30
  574. package/skills/security-guidance/SKILL.md +0 -160
  575. package/skills/security-guidance/references/pretooluse_hook_canon.md +0 -141
  576. package/skills/senior-architect/SKILL.md +0 -343
  577. package/skills/senior-architect/references/architecture_patterns.md +0 -470
  578. package/skills/senior-architect/references/system_design_workflows.md +0 -536
  579. package/skills/senior-architect/references/tech_decision_guide.md +0 -412
  580. package/skills/senior-architect/scripts/architecture_diagram_generator.py +0 -660
  581. package/skills/senior-architect/scripts/dependency_analyzer.py +0 -615
  582. package/skills/senior-architect/scripts/project_architect.py +0 -749
  583. package/skills/senior-backend/SKILL.md +0 -467
  584. package/skills/senior-backend/profiles/django-monolith.json +0 -57
  585. package/skills/senior-backend/profiles/fastapi-python.json +0 -58
  586. package/skills/senior-backend/profiles/go-or-rust-microservice.json +0 -62
  587. package/skills/senior-backend/profiles/node-express.json +0 -57
  588. package/skills/senior-backend/references/api_design_patterns.md +0 -530
  589. package/skills/senior-backend/references/backend_security_practices.md +0 -1075
  590. package/skills/senior-backend/references/composition_map.md +0 -58
  591. package/skills/senior-backend/references/database_optimization_guide.md +0 -593
  592. package/skills/senior-backend/references/forcing_questions.md +0 -100
  593. package/skills/senior-backend/scripts/api_load_tester.py +0 -607
  594. package/skills/senior-backend/scripts/api_scaffolder.py +0 -645
  595. package/skills/senior-backend/scripts/backend_decision_engine.py +0 -397
  596. package/skills/senior-backend/scripts/database_migration_tool.py +0 -858
  597. package/skills/senior-secops/SKILL.md +0 -505
  598. package/skills/senior-secops/references/compliance_requirements.md +0 -792
  599. package/skills/senior-secops/references/security_standards.md +0 -718
  600. package/skills/senior-secops/references/vulnerability_management_guide.md +0 -487
  601. package/skills/senior-secops/scripts/compliance_checker.py +0 -1107
  602. package/skills/senior-secops/scripts/security_scanner.py +0 -471
  603. package/skills/senior-secops/scripts/vulnerability_assessor.py +0 -563
  604. package/skills/spec-driven-workflow/SKILL.md +0 -333
  605. package/skills/spec-driven-workflow/references/acceptance_criteria_patterns.md +0 -497
  606. package/skills/spec-driven-workflow/references/bounded_autonomy_rules.md +0 -273
  607. package/skills/spec-driven-workflow/references/spec_format_guide.md +0 -531
  608. package/skills/spec-driven-workflow/scripts/spec_generator.py +0 -338
  609. package/skills/spec-driven-workflow/scripts/spec_validator.py +0 -461
  610. package/skills/spec-driven-workflow/scripts/test_extractor.py +0 -431
  611. package/skills/supabase/CHANGELOG.md +0 -78
  612. package/skills/supabase/SKILL.md +0 -149
  613. package/skills/supabase/assets/feedback-issue-template.md +0 -17
  614. package/skills/supabase/references/skill-feedback.md +0 -17
  615. package/skills/supabase-postgres-best-practices/CHANGELOG.md +0 -73
  616. package/skills/supabase-postgres-best-practices/SKILL.md +0 -64
  617. package/skills/supabase-postgres-best-practices/references/_contributing.md +0 -170
  618. package/skills/supabase-postgres-best-practices/references/_sections.md +0 -39
  619. package/skills/supabase-postgres-best-practices/references/_template.md +0 -34
  620. package/skills/supabase-postgres-best-practices/references/advanced-full-text-search.md +0 -55
  621. package/skills/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +0 -49
  622. package/skills/supabase-postgres-best-practices/references/conn-idle-timeout.md +0 -46
  623. package/skills/supabase-postgres-best-practices/references/conn-limits.md +0 -44
  624. package/skills/supabase-postgres-best-practices/references/conn-pooling.md +0 -41
  625. package/skills/supabase-postgres-best-practices/references/conn-prepared-statements.md +0 -46
  626. package/skills/supabase-postgres-best-practices/references/data-batch-inserts.md +0 -54
  627. package/skills/supabase-postgres-best-practices/references/data-n-plus-one.md +0 -53
  628. package/skills/supabase-postgres-best-practices/references/data-pagination.md +0 -50
  629. package/skills/supabase-postgres-best-practices/references/data-upsert.md +0 -50
  630. package/skills/supabase-postgres-best-practices/references/lock-advisory.md +0 -56
  631. package/skills/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +0 -68
  632. package/skills/supabase-postgres-best-practices/references/lock-short-transactions.md +0 -50
  633. package/skills/supabase-postgres-best-practices/references/lock-skip-locked.md +0 -54
  634. package/skills/supabase-postgres-best-practices/references/monitor-explain-analyze.md +0 -45
  635. package/skills/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +0 -55
  636. package/skills/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +0 -55
  637. package/skills/supabase-postgres-best-practices/references/query-composite-indexes.md +0 -44
  638. package/skills/supabase-postgres-best-practices/references/query-covering-indexes.md +0 -40
  639. package/skills/supabase-postgres-best-practices/references/query-index-types.md +0 -48
  640. package/skills/supabase-postgres-best-practices/references/query-missing-indexes.md +0 -43
  641. package/skills/supabase-postgres-best-practices/references/query-partial-indexes.md +0 -45
  642. package/skills/supabase-postgres-best-practices/references/schema-constraints.md +0 -80
  643. package/skills/supabase-postgres-best-practices/references/schema-data-types.md +0 -46
  644. package/skills/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +0 -59
  645. package/skills/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +0 -55
  646. package/skills/supabase-postgres-best-practices/references/schema-partitioning.md +0 -55
  647. package/skills/supabase-postgres-best-practices/references/schema-primary-keys.md +0 -61
  648. package/skills/supabase-postgres-best-practices/references/security-privileges.md +0 -54
  649. package/skills/supabase-postgres-best-practices/references/security-rls-basics.md +0 -50
  650. package/skills/supabase-postgres-best-practices/references/security-rls-performance.md +0 -63
  651. package/skills/typescript-expert/SKILL.md +0 -431
  652. package/skills/typescript-expert/references/tsconfig-strict.json +0 -45
  653. package/skills/typescript-expert/references/typescript-cheatsheet.md +0 -383
  654. package/skills/typescript-expert/references/utility-types.ts +0 -335
  655. package/skills/typescript-expert/scripts/ts_diagnostic.py +0 -203
  656. package/skills/ui-design-system/SKILL.md +0 -379
  657. package/skills/ui-design-system/assets/design_system_doc_template.md +0 -180
  658. package/skills/ui-design-system/references/component-architecture.md +0 -396
  659. package/skills/ui-design-system/references/developer-handoff.md +0 -509
  660. package/skills/ui-design-system/references/responsive-calculations.md +0 -390
  661. package/skills/ui-design-system/references/token-generation.md +0 -324
  662. package/skills/ui-design-system/scripts/design_token_generator.py +0 -590
  663. package/skills/zero-hallucination-coder/SKILL.md +0 -271
  664. /package/bundled-skills/{SKILL.md → android-reverse-engineering/SKILL.md} +0 -0
@@ -2,11 +2,11 @@
2
2
 
3
3
  ## Obsidian Memory
4
4
 
5
- Obsidian (`C:\Users\hiz\Documents\novahiz`) is the user's second memory.
5
+ Obsidian (`C:\Users\hiz\Documents\Novahiz`) is the user's second memory.
6
6
 
7
7
  ### Rules
8
8
  1. When the user asks to **save / memorize / update obsidian memory**, load the `memory-save` skill and follow its procedure without exception.
9
- 2. Determine the target folder **only** from the `novahiz\_meta\routing.md` table (source of truth). Never guess. When ambiguous, ask the user.
9
+ 2. Determine the target folder **only** from the `Novahiz\_meta\routing.md` table (source of truth). Never guess. When ambiguous, ask the user.
10
10
  3. Display the chosen path before writing.
11
11
  4. Never write to `index.md`, `log.md`, `hot.md`, `.manifest.json`, `_meta/`, or `.obsidian/` **except through a dedicated maintenance skill** (wiki-ingest/wiki-lint/wiki-status for index/log/hot/manifest; graph-colorize for `.obsidian/graph.json`, with mandatory backup). The `memory-save` skill writes only to the targeted content page.
12
12
  5. Never create a root folder on your own. Every new category requires user agreement and an update to `routing.md`.
@@ -28,26 +28,15 @@ Playwright uses a **persistent profile** that preserves data across sessions (co
28
28
 
29
29
  ## Behavioral & Quality Rules
30
30
 
31
- 1. **Mandatory humanizer on text and code** — On every code or text modification, load the `humanizer` skill and apply its rules (remove AI writing tics: not-X-but-Y contrasts, forced triads, excessive dashes, empty phrases, marketing jargon). **Exception:** `humanizer` applies only to frontend text (titles, paragraphs, interface copy) or AI pattern audits — never to browser navigation/research tasks. Browser tasks (navigation, search, extraction) proceed as direct actions without a roadmap.
32
- 2. **Mandatory impeccable on design** — On every design modification (UI, page, component, style, layout, motion, interface copy), load the `impeccable` skill and follow its workflow (setup then the appropriate command: `polish`, `audit`, `critique`, `animate`, etc.).
33
- 3. **Impeccable / /impeccable live — NEVER use sub-agents** — The `impeccable` skill, the `/impeccable live` command, and any use of impeccable skills must **never** start in sub-agent mode, **ever**, even if the task seems suitable (distributed analysis, multiple variants, multi-surface audit). **Single exception:** only when the user explicitly requests launching a sub-agent ("launch a sub-agent", "use a sub-agent", etc.). The main agent always retains the interactive session and browser context.
34
- 4. **Supabase** — On any Supabase task (database, auth, RLS, Edge Functions, migrations, Storage, Realtime, CLI/MCP), load the `supabase` and `supabase-postgres-best-practices` skills before acting.
31
+ 1. **Mandatory humanizer on text and code** — On every code or text modification meant for a reader, load the `novahiz-humanizer` skill and apply its rules (remove AI writing tics: not-X-but-Y contrasts, forced triads, excessive dashes, empty phrases, marketing jargon). Browser tasks (navigation, search, extraction) proceed as direct actions without a roadmap.
32
+ 2. **Supabase** — On any Supabase task (database, auth, RLS, Edge Functions, migrations, Storage, Realtime, CLI/MCP), load the `novahiz-supabase` and `novahiz-postgres` skills before acting.
35
33
  5. **Honesty and critical thinking** — Always be honest. Avoid false good ideas. Maintain critical thinking. **Zero simulation objective:** never claim to have executed, tested, or verified what was not. Explicitly report uncertainties and assumptions.
36
34
  6. **Propose next steps** — After completing a task, always honestly propose the relevant next step. Do not invent unnecessary work or mask failures.
37
35
  7. **Challenge the request** — Take the initiative to question the user's request when it is inconsistent, ambiguous, risky, or suboptimal. Explain why and propose an alternative.
38
36
  8. **Architecture quality** — Always adopt a modular, scalable, and maintainable approach. Never sacrifice quality for speed.
39
37
  9. **Todo list in real time** — Keep the todo list updated throughout the task: move a step to `in_progress` before starting it, mark it `completed` once verified, and add steps discovered along the way. No frozen lists or batch completion at the end.
40
38
 
41
- ## Design Rules — Impeccable
42
-
43
- ### Workflow per operation type
44
-
45
- | Operation | Mandatory command | When |
46
- |-----------|------------------|------|
47
- | **Create** a design | `/impeccable shape` | At the start, to establish the initial shape |
48
- | **Fix / Repair** a design | `impeccable audit` + `/impeccable critique` | Before and after the fix |
49
- | **Improve** a design | `/impeccable polish` | To refine and elevate |
50
- | **Verify** after a major task | `/impeccable critique` (+ `impeccable audit` if needed) | At the end of any significant design task |
39
+ ## Design Rules
51
40
 
52
41
  ### Absolute rule — AI patterns
53
42
 
@@ -1,9 +1,73 @@
1
1
  import type { Plugin } from "@opencode-ai/plugin";
2
2
  import { spawnSync } from "node:child_process";
3
- import { readFileSync } from "node:fs";
3
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
4
4
  import { homedir } from "node:os";
5
5
  import { join } from "node:path";
6
6
 
7
+ // Inlined from src/prompt-rewriter.ts to avoid broken relative path in installed plugin
8
+ type RewriteResult = { original: string; rewritten: string; sourceLanguage: string; wasRewritten: boolean };
9
+
10
+ function detectLanguage(prompt: string): string {
11
+ if (/[\u0600-\u06FF]/.test(prompt)) return "ar";
12
+ return "en";
13
+ }
14
+
15
+ const AR_EN: Array<[RegExp, string]> = [
16
+ [/اصلاح|اصلح/g, "fix"], [/انشاء|اصنع/g, "create"], [/اضافة|اضف/g, "add"],
17
+ [/حذف|احذف/g, "remove"], [/تعديل|عدّل/g, "modify"], [/هاكود|اكتشف/g, "debug"],
18
+ [/اختبار|اختبر/g, "test"], [/ترحيل|هجر/g, "migrate"], [/اضبط|ضبط/g, "configure"],
19
+ [/تحسين|حسّن/g, "optimize"], [/تبسيط|بسّط/g, "simplify"], [/تنظيف|نظّف/g, "clean up"],
20
+ [/تنفيذ|طبّق/g, "implement"], [/استخدام|استخدم/g, "use"], [/استبدال|بدّل/g, "replace"],
21
+ [/كتابة|اكتب/g, "write"], [/قراءة|اقرأ/g, "read"], [/حفظ|احفظ/g, "save"],
22
+ [/عرض|اعرض/g, "display"], [/اخفاء|اخفي/g, "hide"], [/تفعيل|فعّل/g, "enable"],
23
+ [/تعطيل|عطّل/g, "disable"], [/دالة/g, "function"], [/فئة/g, "class"],
24
+ [/طريقة/g, "method"], [/متغير/g, "variable"], [/ملف/g, "file"], [/شفرة/g, "code"],
25
+ [/مشكلة/g, "issue"], [/حل/g, "solution"], [/كيف/g, "how to"], [/لماذا/g, "why"],
26
+ [/أي/g, "which"], [/افعل/g, "do"], [/في/g, "in"], [/من/g, "from"], [/على/g, "on"],
27
+ [/صفحة/g, "page"], [/هبوط/g, "landing"], [/متجاوبة/g, "responsive"],
28
+ [/تصميم/g, "design"], [/واجهة/g, "interface"], [/زر/g, "button"], [/قائمة/g, "menu"],
29
+ [/شريط/g, "bar"], [/نافذة/g, "window"], [/شكل/g, "form"],
30
+ [/الخادم|السيرفر/g, "server"], [/قاعدة البيانات/g, "database"],
31
+ [/صفحة الهبوط/g, "landing page"], [/المصادقة/g, "auth"],
32
+ [/تسجيل الدخول/g, "login"], [/خطأ/g, "bug"], [/اداء/g, "performance"], [/امان/g, "security"],
33
+ ];
34
+
35
+ function rewritePrompt(prompt: string): RewriteResult {
36
+ const sourceLanguage = detectLanguage(prompt);
37
+ if (sourceLanguage === "en") {
38
+ let r = prompt.trim().replace(/^I\s+want\s+to\s+/i, "").replace(/^I\s+need\s+to\s+/i, "")
39
+ .replace(/^Can\s+you\s+/i, "").replace(/^Could\s+you\s+/i, "").replace(/^Please\s+/i, "")
40
+ .replace(/^I\s+would\s+like\s+to\s+/i, "").replace(/^It\s+would\s+be\s+great\s+if\s+you\s+could\s+/i, "")
41
+ .replace(/[.!?]+$/, "").trim();
42
+ return { original: prompt, rewritten: r, sourceLanguage, wasRewritten: r !== prompt };
43
+ }
44
+ let result = prompt;
45
+ for (const [pattern, replacement] of AR_EN) result = result.replace(pattern, replacement);
46
+ let r = result.trim().replace(/^I\s+want\s+to\s+/i, "").replace(/^I\s+need\s+to\s+/i, "")
47
+ .replace(/^Can\s+you\s+/i, "").replace(/^Could\s+you\s+/i, "").replace(/^Please\s+/i, "")
48
+ .replace(/^I\s+would\s+like\s+to\s+/i, "").replace(/^It\s+would\s+be\s+great\s+if\s+you\s+could\s+/i, "")
49
+ .replace(/[.!?]+$/, "").trim();
50
+ return { original: prompt, rewritten: r, sourceLanguage, wasRewritten: true };
51
+ }
52
+
53
+ function ensureProjectMemory(cwd: string): boolean {
54
+ try {
55
+ const root = join(cwd, "project-memory");
56
+ const slots = join(root, "slots");
57
+ const index = join(root, "index.json");
58
+ if (!existsSync(root)) mkdirSync(root, { recursive: true });
59
+ if (!existsSync(slots)) mkdirSync(slots, { recursive: true });
60
+ if (!existsSync(index)) {
61
+ const empty = { version: 1, updated: new Date().toISOString(), slots: [] };
62
+ writeFileSync(index, `${JSON.stringify(empty, null, 2)}\n`, "utf8");
63
+ return true;
64
+ }
65
+ return false;
66
+ } catch {
67
+ return false;
68
+ }
69
+ }
70
+
7
71
  const HOME =
8
72
  process.env.NOVAHIZ_HOME && process.env.NOVAHIZ_HOME.length > 0
9
73
  ? process.env.NOVAHIZ_HOME
@@ -28,8 +92,10 @@ function readConfig(): NovahizConfig {
28
92
 
29
93
  const CONFIG = readConfig();
30
94
  const GATE = CONFIG.gate ?? {};
31
- const ENV_ESCAPE = typeof GATE.envEscape === "string" && GATE.envEscape.length > 0 ? GATE.envEscape : "NOVAHIZ_GATE";
32
- const ESCAPE = (process.env[ENV_ESCAPE] || "").toLowerCase();
95
+ // H1: envEscape is NOT configurable — a writable config must not be able to
96
+ // redirect the kill-switch to an unrelated variable (e.g. CI=false).
97
+ // Single escape hatch name after brand rename.
98
+ const ESCAPE = (process.env.NOVAHIZ_GATE ?? "").toLowerCase();
33
99
  // gate.enabled=false disables the plugin the same way the CLI gate does (see src/commands/gate.ts).
34
100
  // gate.mode (block/warn/audit) stays owned by the CLI: the plugin only forwards the gate exit code.
35
101
  const DISABLED =
@@ -40,9 +106,30 @@ const GATE_TOOLS = new Set(
40
106
 
41
107
  type RunResult = { status: number; stdout: string; stderr: string; spawnError?: string };
42
108
 
109
+ // C1: timeout prevents a hung CLI from freezing the whole OpenCode process.
110
+ // C2: maxBuffer caps output; oversized output is treated as a gate failure,
111
+ // never as truncated-then-allowed.
112
+ const RUN_TIMEOUT_MS = 10_000;
113
+ const RUN_MAX_BUFFER = 1_048_576;
114
+
43
115
  function run(args: string[], input?: string): RunResult {
44
- const result = spawnSync(NODE, [CLI, ...args], { encoding: "utf8", input });
116
+ // C1: On Windows, SIGTERM is emulated via process.kill() which sends
117
+ //TerminateProcess + exit code 1, causing the CLI to report status 1 instead
118
+ //of being properly terminated. Use SIGKILL on Windows (unavoidable but at
119
+ //least doesn't pretend graceful shutdown is possible).
120
+ const isWin = process.platform === "win32";
121
+ const result = spawnSync(NODE, [CLI, ...args], {
122
+ encoding: "utf8",
123
+ input,
124
+ timeout: RUN_TIMEOUT_MS,
125
+ maxBuffer: RUN_MAX_BUFFER,
126
+ killSignal: isWin ? "SIGKILL" : "SIGTERM"
127
+ });
45
128
  if (result.error) return { status: 1, stdout: "", stderr: "", spawnError: result.error.message };
129
+ // On Windows, timeout-killed processes always exit with status 1 (TerminateProcess).
130
+ // The `signal` property is set when the process was killed by a signal.
131
+ const timedOut = result.status === 1 && !result.stdout?.trim() && Boolean(result.signal);
132
+ if (timedOut) return { status: 1, stdout: "", stderr: "Novahiz timed out" };
46
133
  return { status: result.status ?? 1, stdout: result.stdout ?? "", stderr: result.stderr ?? "" };
47
134
  }
48
135
 
@@ -56,6 +143,12 @@ function textFromParts(parts: unknown): string {
56
143
  return chunks.join("\n").trim();
57
144
  }
58
145
 
146
+ // H2: Session IDs must be non-empty strings. This guards against undefined/null
147
+ // being passed to spawnSync env, which would throw on Windows.
148
+ function isValidSessionId(id: unknown): id is string {
149
+ return typeof id === "string" && id.trim().length > 0;
150
+ }
151
+
59
152
  export const NovahizPlugin: Plugin = async ({ client }) => {
60
153
  const loadedBySession = new Map<string, Set<string>>();
61
154
  const categoriesBySession = new Map<string, string[]>();
@@ -65,7 +158,7 @@ export const NovahizPlugin: Plugin = async ({ client }) => {
65
158
 
66
159
  const log = async (level: "info" | "warn", message: string): Promise<void> => {
67
160
  try {
68
- await client.app.log({ body: { service: "novahiz", level, message } });
161
+ await client.app.log({ body: { service: "Novahiz", level, message } });
69
162
  } catch {
70
163
  return;
71
164
  }
@@ -79,10 +172,9 @@ export const NovahizPlugin: Plugin = async ({ client }) => {
79
172
  };
80
173
 
81
174
  // Sessions only vanish from memory on session.deleted, which may never arrive.
82
- // Prune entries idle for longer than SESSION_TTL_MS once the map grows.
175
+ // Prune entries idle for longer than SESSION_TTL_MS on every access.
83
176
  const touch = (sessionID: string): void => {
84
177
  lastSeenBySession.set(sessionID, Date.now());
85
- if (lastSeenBySession.size < 50) return;
86
178
  const cutoff = Date.now() - SESSION_TTL_MS;
87
179
  for (const [id, seen] of lastSeenBySession) {
88
180
  if (seen < cutoff) forget(id);
@@ -94,6 +186,8 @@ export const NovahizPlugin: Plugin = async ({ client }) => {
94
186
 
95
187
  return {
96
188
  config: async (input) => {
189
+ ensureProjectMemory(process.cwd());
190
+ if (DISABLED) return;
97
191
  try {
98
192
  const config = input as { mcp?: Record<string, unknown> };
99
193
  if (!config.mcp) config.mcp = {};
@@ -132,11 +226,23 @@ export const NovahizPlugin: Plugin = async ({ client }) => {
132
226
  },
133
227
 
134
228
  "chat.message": async (input, output) => {
229
+ ensureProjectMemory(process.cwd());
230
+ if (DISABLED) return;
135
231
  try {
232
+ if (!isValidSessionId(input.sessionID)) return;
136
233
  touch(input.sessionID);
137
234
  const text = textFromParts(output.parts);
138
235
  if (text.length === 0) return;
139
- const result = run(["classify", text]);
236
+
237
+ // Prompt rewriter: translate non-English prompts to optimized English
238
+ // before classification. Responses always match the user's language.
239
+ const rewrite = rewritePrompt(text);
240
+ const classifyText = rewrite.rewritten;
241
+ if (rewrite.wasRewritten) {
242
+ await log("info", `Prompt rewritten: ${rewrite.sourceLanguage} → English ("${classifyText.slice(0, 80)}")`);
243
+ }
244
+
245
+ const result = run(["classify", classifyText]);
140
246
  if (result.status !== 0) {
141
247
  await log("warn", `Classify failed (exit ${result.status}), no enforcement injected: ${result.stderr.trim().slice(0, 200)}`);
142
248
  return;
@@ -155,6 +261,12 @@ export const NovahizPlugin: Plugin = async ({ client }) => {
155
261
  await log("warn", "Classify returned invalid JSON, no enforcement injected");
156
262
  return;
157
263
  }
264
+ // M5: the `as` cast is compile-time only — validate the shape at runtime
265
+ // so a malformed classify response cannot silently disable enforcement.
266
+ if (!parsed || typeof parsed !== "object" || !Array.isArray(parsed.categories)) {
267
+ await log("warn", "Classify returned unexpected structure, no enforcement injected");
268
+ return;
269
+ }
158
270
  const categories = (parsed.categories ?? []).map((entry) => entry.id);
159
271
  categoriesBySession.set(input.sessionID, categories);
160
272
  const primary = parsed.primary ?? categories[0] ?? null;
@@ -165,8 +277,11 @@ export const NovahizPlugin: Plugin = async ({ client }) => {
165
277
  const providers = parsed.providers ?? [];
166
278
  const lines = [
167
279
  "[Novahiz enforcement]",
168
- `Categories detectees: ${categories.join(", ") || "aucune"}${primary ? ` (primaire: ${primary})` : ""}`
280
+ `Categories detected: ${categories.join(", ") || "none"}${primary ? ` (primary: ${primary})` : ""}`
169
281
  ];
282
+ if (rewrite.wasRewritten) {
283
+ lines.push(`User language: ${rewrite.sourceLanguage} — respond in this language, not English.`);
284
+ }
170
285
  if (roadmap) {
171
286
  lines.push(`Roadmap ${roadmap.id}:`);
172
287
  roadmap.steps.forEach((step, index) => {
@@ -174,9 +289,9 @@ export const NovahizPlugin: Plugin = async ({ client }) => {
174
289
  lines.push(` ${index + 1}. [${step.kind}] ${step.label}${skills}`);
175
290
  });
176
291
  }
177
- if (enforced.length > 0) lines.push(`Skills requis (roadmap): ${enforced.join(", ")}`);
178
- if (suggested.length > 0) lines.push(`Skills suggeres: ${suggested.join(", ")}`);
179
- if (providers.length > 0) lines.push(`Outils pour cette tache: ${providers.join(", ")}`);
292
+ if (enforced.length > 0) lines.push(`Required skills (roadmap): ${enforced.join(", ")}`);
293
+ if (suggested.length > 0) lines.push(`Suggested skills: ${suggested.join(", ")}`);
294
+ if (providers.length > 0) lines.push(`Tools for this task: ${providers.join(", ")}`);
180
295
  const ledger = run(["task", "current", "--session", input.sessionID]);
181
296
  if (ledger.status === 0 && ledger.stdout.trim().length > 0) {
182
297
  try {
@@ -186,9 +301,10 @@ export const NovahizPlugin: Plugin = async ({ client }) => {
186
301
  await log("warn", "Ledger state is invalid JSON, enforcement injected without the task summary");
187
302
  }
188
303
  }
189
- lines.push("Le gate bloque edit/write/patch/apply_patch/bash/shell tant que les skills requis ne sont pas charges via skill({name:\"...\"}).");
190
- lines.push("Le gate est sensible au contenu: humanizer pour la prose, impeccable pour le style.");
191
- lines.push("Config editee = redemarrage d'opencode requis (config lue a l'import).");
304
+ lines.push("The gate blocks edit/write/patch/apply_patch/bash/shell until the required skills are loaded via skill({name:\"...\"}).");
305
+ lines.push("The gate is content-aware: novahiz-humanizer for prose; design files take no style gate rule.");
306
+ lines.push("Config edited = opencode restart required (config read at import).");
307
+ lines.push("Memory lives in project-memory/ under the project root (cwd): index.json + fixed-size slots (8000 chars / 200 lines) with compact → archive → new-slot rotation. Use the MCP memory_* tools to read and append.");
192
308
  enforcementBySession.set(input.sessionID, lines.join("\n"));
193
309
  } catch (error) {
194
310
  await log("warn", `chat.message hook failed, no enforcement injected: ${String(error).slice(0, 200)}`);
@@ -198,14 +314,21 @@ export const NovahizPlugin: Plugin = async ({ client }) => {
198
314
 
199
315
  "experimental.chat.system.transform": async (input, output) => {
200
316
  if (DISABLED) return;
201
- const sessionID = input.sessionID;
202
- if (!sessionID) return;
203
- const block = enforcementBySession.get(sessionID);
204
- if (block) output.system.push(block);
317
+ try {
318
+ const sessionID = input.sessionID;
319
+ if (!sessionID) return;
320
+ const block = enforcementBySession.get(sessionID);
321
+ if (block) output.system.push(block);
322
+ } catch (error) {
323
+ await log("warn", `system.transform hook failed: ${String(error).slice(0, 200)}`);
324
+ }
205
325
  },
206
326
 
207
327
  "tool.execute.before": async (input, output) => {
208
328
  try {
329
+ // H-Plugin: validate session ID before using it — prevents undefined/null
330
+ // from being passed to spawnSync env (throws on Windows).
331
+ if (!isValidSessionId(input.sessionID)) return;
209
332
  touch(input.sessionID);
210
333
  if (!loadedBySession.has(input.sessionID)) loadedBySession.set(input.sessionID, new Set());
211
334
  const loaded = loadedBySession.get(input.sessionID)!;
@@ -215,7 +338,12 @@ export const NovahizPlugin: Plugin = async ({ client }) => {
215
338
  const name = args?.name ?? args?.skill;
216
339
  if (name) {
217
340
  loaded.add(String(name));
218
- run(["session-load", "--session", input.sessionID, "--skill", String(name)]);
341
+ // H3: surface session-load failures — otherwise the gate blocks later
342
+ // with no trace of why the skill was never recorded.
343
+ const loadResult = run(["session-load", "--session", input.sessionID, "--skill", String(name)]);
344
+ if (loadResult.status !== 0) {
345
+ await log("warn", `session-load failed for skill ${name}: ${(loadResult.stderr || "").trim().slice(0, 200)}`);
346
+ }
219
347
  }
220
348
  return;
221
349
  }
@@ -245,9 +373,13 @@ export const NovahizPlugin: Plugin = async ({ client }) => {
245
373
  })()
246
374
  );
247
375
 
376
+ // H2: fail-closed — an unavailable gate denies the tool call instead of
377
+ // silently bypassing enforcement. NOVAHIZ_GATE=off remains the escape hatch.
248
378
  if (result.spawnError) {
249
- await log("warn", `Gate unavailable, allowing the tool call: ${result.spawnError}`);
250
- return;
379
+ await log("warn", `Gate unavailable, denying the tool call: ${result.spawnError}`);
380
+ throw new Error(
381
+ `Novahiz gate blocked ${input.tool}: gate unavailable (${result.spawnError}). Fix the install (run sync, check catalog/) or set NOVAHIZ_GATE=off to disable.`
382
+ );
251
383
  }
252
384
  if (result.status === 2) {
253
385
  throw new Error(`Novahiz gate blocked ${input.tool}.\n${result.stdout}`);
@@ -259,7 +391,9 @@ export const NovahizPlugin: Plugin = async ({ client }) => {
259
391
  }
260
392
  } catch (error) {
261
393
  if (error instanceof Error && error.message.startsWith("Novahiz gate")) throw error;
262
- await log("warn", `Gate error, allowing the tool call: ${String(error)}`);
394
+ // H2: fail-closed — unknown gate errors deny, they never bypass.
395
+ await log("warn", `Gate error, denying the tool call as precaution: ${String(error)}`);
396
+ throw new Error(`Novahiz gate blocked ${input.tool}: internal gate error. Set NOVAHIZ_GATE=off to disable.`);
263
397
  }
264
398
  }
265
399
  };
@@ -1,4 +1,3 @@
1
-
2
1
  Apache License
3
2
  Version 2.0, January 2004
4
3
  http://www.apache.org/licenses/
@@ -49,7 +48,7 @@
49
48
  "Contribution" shall mean any work of authorship, including
50
49
  the original version of the Work and any modifications or additions
51
50
  to that Work or Derivative Works thereof, that is intentionally
52
- submitted to Licensor for inclusion in the Work by the copyright owner
51
+ submitted to the Licensor for inclusion in the Work by the copyright owner
53
52
  or by an individual or Legal Entity authorized to submit on behalf of
54
53
  the copyright owner. For the purposes of this definition, "submitted"
55
54
  means any form of electronic, verbal, or written communication sent
@@ -61,7 +60,7 @@
61
60
  designated in writing by the copyright owner as "Not a Contribution."
62
61
 
63
62
  "Contributor" shall mean Licensor and any individual or Legal Entity
64
- on behalf of whom a Contribution has been received by Licensor and
63
+ on behalf of whom a Contribution has been received by the Licensor and
65
64
  subsequently incorporated within the Work.
66
65
 
67
66
  2. Grant of Copyright License. Subject to the terms and conditions of
@@ -107,7 +106,7 @@
107
106
  (d) If the Work includes a "NOTICE" text file as part of its
108
107
  distribution, then any Derivative Works that You distribute must
109
108
  include a readable copy of the attribution notices contained
110
- within such NOTICE file, excluding those notices that do not
109
+ within such NOTICE file, excluding any notices that do not
111
110
  pertain to any part of the Derivative Works, in at least one
112
111
  of the following places: within a NOTICE text file distributed
113
112
  as part of the Derivative Works; within the Source form or
@@ -176,18 +175,7 @@
176
175
 
177
176
  END OF TERMS AND CONDITIONS
178
177
 
179
- APPENDIX: How to apply the Apache License to your work.
180
-
181
- To apply the Apache License to your work, attach the following
182
- boilerplate notice, with the fields enclosed by brackets "[]"
183
- replaced with your own identifying information. (Don't include
184
- the brackets!) The text should be enclosed in the appropriate
185
- comment syntax for the file format. We also recommend that a
186
- file or class name and description of purpose be included on the
187
- same "printed page" as the copyright notice for easier
188
- identification within third-party archives.
189
-
190
- Copyright [yyyy] [name of copyright owner]
178
+ Copyright 2025 Simone Avogadro
191
179
 
192
180
  Licensed under the Apache License, Version 2.0 (the "License");
193
181
  you may not use this file except in compliance with the License.
@@ -199,4 +187,4 @@
199
187
  distributed under the License is distributed on an "AS IS" BASIS,
200
188
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201
189
  See the License for the specific language governing permissions and
202
- limitations under the License.
190
+ limitations under the License.
@@ -0,0 +1,197 @@
1
+ # API Extraction Patterns
2
+
3
+ Patterns and grep commands for finding HTTP API calls in decompiled Android source code.
4
+
5
+ ## Retrofit
6
+
7
+ Retrofit is the most common HTTP client in Android apps. API endpoints are declared as annotated interface methods.
8
+
9
+ ### Annotations to search for
10
+
11
+ ```bash
12
+ # HTTP method annotations
13
+ grep -rn '@GET\|@POST\|@PUT\|@DELETE\|@PATCH\|@HEAD' sources/
14
+
15
+ # Parameter annotations
16
+ grep -rn '@Query\|@QueryMap\|@Path\|@Body\|@Field\|@FieldMap\|@Part\|@Header\|@HeaderMap' sources/
17
+
18
+ # Headers annotation (static headers)
19
+ grep -rn '@Headers' sources/
20
+
21
+ # Base URL configuration
22
+ grep -rn 'baseUrl\|\.baseUrl(' sources/
23
+ ```
24
+
25
+ ### Typical Retrofit interface
26
+
27
+ ```java
28
+ public interface ApiService {
29
+ @GET("users/{id}")
30
+ Call<User> getUser(@Path("id") String userId);
31
+
32
+ @POST("auth/login")
33
+ @Headers({"Content-Type: application/json"})
34
+ Call<LoginResponse> login(@Body LoginRequest request);
35
+ }
36
+ ```
37
+
38
+ When documenting, capture: HTTP method, path, path parameters, query parameters, request body type, response type, and any static headers.
39
+
40
+ ## OkHttp
41
+
42
+ OkHttp is often used directly or as the transport layer for Retrofit.
43
+
44
+ ```bash
45
+ # Request building
46
+ grep -rn 'Request\.Builder\|Request.Builder\|\.url(\|\.post(\|\.put(\|\.delete(\|\.patch(' sources/
47
+
48
+ # URL construction
49
+ grep -rn 'HttpUrl\|\.addQueryParameter\|\.addPathSegment' sources/
50
+
51
+ # Interceptors (often add auth headers)
52
+ grep -rn 'Interceptor\|addInterceptor\|addNetworkInterceptor\|intercept(' sources/
53
+
54
+ # Response handling
55
+ grep -rn '\.execute()\|\.enqueue(' sources/
56
+ ```
57
+
58
+ ## Ktor (Kotlin)
59
+
60
+ Ktor is the dominant HTTP client in Kotlin Multiplatform and modern
61
+ Kotlin-only Android apps. Unlike Retrofit, Ktor does **not** use annotations
62
+ to declare endpoints — paths appear as plain string arguments to
63
+ `client.get(...)` / `client.post(...)`, often inside an extension function.
64
+
65
+ ```bash
66
+ # Calls
67
+ grep -rn '\b\(client\|httpClient\|HttpClient\)\.\(get\|post\|put\|delete\|patch\|head\|request\)\s*[<(]' sources/
68
+
69
+ # Default request / base URL configuration
70
+ grep -rn 'HttpRequestBuilder\|defaultRequest\s*{\|\burl\s*(\s*"\|URLBuilder' sources/
71
+
72
+ # Auth plugin (bearer / refresh)
73
+ grep -rn '\bbearer\s*{\|BearerTokens\s*(\|loadTokens\s*{\|refreshTokens\s*{' sources/
74
+ ```
75
+
76
+ Typical Ktor call (after decompile):
77
+
78
+ ```java
79
+ client.get("api/v1/users/profile") {
80
+ parameter("locale", "en-US");
81
+ }
82
+ ```
83
+
84
+ The base URL is usually applied via `defaultRequest { url { host = "..." } }`
85
+ in the client builder. Search for `host =` and `URLProtocol.HTTPS` references
86
+ to pin it down.
87
+
88
+ **Note on obfuscation:** in heavily R8-shrunk apps the call site
89
+ `client.get("path")` is inlined to something like `aVar.a(dVar, "path")`
90
+ and the `client.<verb>(` regex misses it. The path string itself is **not**
91
+ obfuscated, however — fall back to the generic path-literal search
92
+ (`--paths`) for the endpoint inventory in those cases. Ktor library
93
+ internals (`BearerTokens`, `loadTokens`, `refreshTokens`, `URLProtocol`)
94
+ remain searchable because Ktor keeps these on its public API.
95
+
96
+ Ktor's authentication plugin uses the
97
+ [`Auth { bearer { loadTokens { ... }; refreshTokens { ... } } }`](https://ktor.io/docs/auth.html)
98
+ DSL — bearer access tokens with automatic refresh. After R8, the DSL
99
+ lambdas appear as `Function2`/`Function3` impls referencing
100
+ `BearerTokens(...)` calls.
101
+
102
+ ## Apollo Kotlin (GraphQL)
103
+
104
+ ```bash
105
+ # Client setup
106
+ grep -rn 'ApolloClient\|\.serverUrl(\|HttpNetworkTransport' sources/
107
+
108
+ # Operations (queries / mutations / subscriptions)
109
+ grep -rn '\.query(\s*[A-Z]\|\.mutation(\s*[A-Z]\|\.subscription(\s*[A-Z]' sources/
110
+ ```
111
+
112
+ Apollo generates one class per operation under a generated package; once you
113
+ find the GraphQL endpoint URL via `ApolloClient.serverUrl("...")`, use the
114
+ operation classes themselves as the API documentation — each carries its
115
+ GraphQL document text in `OPERATION_DOCUMENT`.
116
+
117
+ ## Volley
118
+
119
+ ```bash
120
+ grep -rn 'StringRequest\|JsonObjectRequest\|JsonArrayRequest\|Volley\.newRequestQueue\|RequestQueue' sources/
121
+ ```
122
+
123
+ Volley requests typically pass the URL as a constructor argument and override `getHeaders()` or `getParams()` for custom headers/parameters.
124
+
125
+ ## HttpURLConnection (legacy)
126
+
127
+ ```bash
128
+ grep -rn 'HttpURLConnection\|HttpsURLConnection\|openConnection\|setRequestMethod\|setRequestProperty' sources/
129
+ ```
130
+
131
+ ## WebView
132
+
133
+ ```bash
134
+ grep -rn 'loadUrl\|evaluateJavascript\|addJavascriptInterface\|WebViewClient\|shouldOverrideUrlLoading' sources/
135
+ ```
136
+
137
+ WebView-based apps may load API endpoints via JavaScript bridges. Look for `@JavascriptInterface` annotated methods.
138
+
139
+ ## Endpoint-Shaped Path Literals (obfuscation-resistant)
140
+
141
+ When the HTTP client cannot be identified (custom abstraction, heavy
142
+ inlining, KMP shared module), or the call sites are obfuscated to
143
+ `a.b(c, "path")`, fall back to extracting the path string literals
144
+ themselves. R8 does not obfuscate string contents, so paths leak through.
145
+
146
+ ```bash
147
+ # All quoted strings shaped like an API path, deduplicated
148
+ grep -rhoE '"(/[A-Za-z0-9_{}.\-]+(/[A-Za-z0-9_{}.\-]+)+/?|(api|v[0-9]+|graphql|users?|account|auth|sso|oauth|profile|cart|basket|order|product|inventory|search|category|address|location|delivery|payment|invoice|favo[u]?rites?)(/[A-Za-z0-9_{}.\-]+)+/?)"' sources/ \
149
+ | grep -Ev '^"(image|video|audio|text|application|content)/|^"/(proc|sys|dev|tmp|etc)/' \
150
+ | sort -u
151
+ ```
152
+
153
+ The skill ships this as `find-api-calls.sh --paths`, which prints both a
154
+ deduplicated inventory and the full list of call sites. On real-world
155
+ Kotlin apps this single command typically produces 100–300 distinct
156
+ endpoint paths, which is the most useful first artifact for documentation.
157
+
158
+ ## Hardcoded URLs and Secrets
159
+
160
+ ```bash
161
+ # HTTP/HTTPS URLs
162
+ grep -rn '"https\?://[^"]*"' sources/
163
+
164
+ # API keys and tokens
165
+ grep -rni 'api[_-]\?key\|api[_-]\?secret\|auth[_-]\?token\|bearer\|access[_-]\?token\|client[_-]\?secret' sources/
166
+
167
+ # Base URL constants
168
+ grep -rni 'BASE_URL\|API_URL\|SERVER_URL\|ENDPOINT\|API_BASE' sources/
169
+ ```
170
+
171
+ ## Documentation Template
172
+
173
+ For each discovered API endpoint, document it using this template:
174
+
175
+ ```markdown
176
+ ### `METHOD /path/to/endpoint`
177
+
178
+ - **Source**: `com.example.app.api.ApiService` (file:line)
179
+ - **Base URL**: `https://api.example.com/v1`
180
+ - **Full URL**: `https://api.example.com/v1/path/to/endpoint`
181
+ - **Path parameters**: `id` (String)
182
+ - **Query parameters**: `page` (int), `limit` (int)
183
+ - **Headers**:
184
+ - `Authorization: Bearer <token>`
185
+ - `Content-Type: application/json`
186
+ - **Request body**: `LoginRequest { email: String, password: String }`
187
+ - **Response type**: `ApiResponse<User>`
188
+ - **Notes**: Called from `LoginActivity.onLoginClicked()`
189
+ ```
190
+
191
+ ## Search Strategy
192
+
193
+ 1. Start with **base URL constants** — find where the API root is configured
194
+ 2. Search for **Retrofit interfaces** — they give the clearest picture of all endpoints
195
+ 3. Check **interceptors** — they reveal auth schemes and common headers
196
+ 4. Search for **hardcoded URLs** — catch any one-off API calls outside the main client
197
+ 5. Look for **WebView URLs** — some apps use hybrid web/native approaches