gennady 0.6.0 → 0.7.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 (319) hide show
  1. package/README.md +2 -15
  2. package/ai/agents/agent-resolve-conflicts.xml +6 -0
  3. package/ai/agents/agent-review-verifier.xml +6 -0
  4. package/ai/directives/architecture/README.md +21 -0
  5. package/ai/directives/coding/README.md +23 -0
  6. package/ai/directives/coding/result-conventions.xml +55 -0
  7. package/ai/directives/coding/svelte5-runes.xml +248 -0
  8. package/ai/directives/coding/sveltekit-rules.xml +247 -0
  9. package/ai/directives/coding/typescript-rules.xml +589 -0
  10. package/ai/directives/coding/uikit-component-storybook.xml +347 -0
  11. package/ai/directives/coding/uikit-component-svelte.xml +344 -0
  12. package/ai/directives/coding/uikit-spec-drafting.xml +243 -0
  13. package/ai/directives/dbc-audit.directive.xml +131 -0
  14. package/ai/directives/dev-review.directive.xml +148 -0
  15. package/ai/directives/infra/README.md +11 -0
  16. package/ai/directives/infra/eslint-setup.xml +467 -0
  17. package/ai/directives/infra/git-setup.xml +261 -0
  18. package/ai/directives/infra/nodejs-npm-setup.xml +354 -0
  19. package/ai/directives/infra/storybook-setup.xml +153 -0
  20. package/ai/directives/knowledge.xml +206 -0
  21. package/ai/directives/perf-auditor/perf-auditor.directive.xml +75 -0
  22. package/ai/directives/perf-auditor/rules/async-latency.xml +101 -0
  23. package/ai/directives/perf-auditor/rules/data-structures.xml +103 -0
  24. package/ai/directives/perf-auditor/rules/iteration-fusion.xml +96 -0
  25. package/ai/directives/perf-auditor/rules/memory-gc.xml +102 -0
  26. package/ai/directives/sdd/README.md +49 -0
  27. package/ai/directives/sdd/audit.directive.xml +543 -0
  28. package/ai/directives/sdd/discovery.directive.xml +824 -0
  29. package/ai/directives/sdd/fix.directive.xml +249 -0
  30. package/ai/directives/sdd/module-decomposition.directive.xml +666 -0
  31. package/ai/directives/sdd/phase-execution-protocol.xml +339 -0
  32. package/ai/directives/sdd/scaffold.directive.xml +717 -0
  33. package/ai/directives/sdd/setup.directive.xml +213 -0
  34. package/ai/directives/sdd/svelte-ui-discovery.directive.xml +263 -0
  35. package/ai/directives/semantic-change-extractor.directive.xml +99 -0
  36. package/ai/directives/testing/README.md +25 -0
  37. package/ai/directives/testing/common.xml +234 -0
  38. package/ai/directives/testing/node-test.xml +288 -0
  39. package/ai/directives/testing/playwright-cli.xml +199 -0
  40. package/ai/directives/testing/playwright-e2e.xml +292 -0
  41. package/ai/directives/testing/storybook-usage.xml +173 -0
  42. package/ai/directives/testing/svelte-testing.xml +237 -0
  43. package/ai/directives/testing/vitest-rules.xml +326 -0
  44. package/ai/docs/README.md +17 -0
  45. package/ai/docs/ai-icl.md +538 -0
  46. package/ai/docs/ai-priming.md +548 -0
  47. package/ai/docs/ai-prompt-formats.md +406 -0
  48. package/ai/docs/ai-promting.md +572 -0
  49. package/ai/drafts/DRAFT.md +120 -0
  50. package/ai/drafts/agent-devgen-class-from-description.rules.xml +123 -0
  51. package/ai/drafts/agent-typescript-devgen.v1.xml +303 -0
  52. package/ai/drafts/d.md +65 -0
  53. package/ai/drafts/music-posts.md +105 -0
  54. package/ai/fw/v1/architecture/blueprint-factory.xml +77 -0
  55. package/ai/fw/v1/core/mental-model.xml +50 -0
  56. package/ai/fw/v1/discovery/intent-reactor.xml +92 -0
  57. package/ai/fw/v1/production/swarm-protocol.xml +122 -0
  58. package/ai/fw/v1/review/quality-pipeline.xml +102 -0
  59. package/ai/fw/v2/arch-universal.xml +73 -0
  60. package/ai/fw-draft/README.md +79 -0
  61. package/ai/fw-draft/bin/discovery.sh +116 -0
  62. package/ai/fw-draft/gennady.xml +58 -0
  63. package/ai/fw-draft/provider/claude.xml +16 -0
  64. package/ai/fw-draft/provider/cursor.xml +23 -0
  65. package/ai/fw-draft/provider/default.xml +12 -0
  66. package/ai/fw-draft/roles/developer.xml +18 -0
  67. package/ai/fw-draft/router.xml +39 -0
  68. package/ai/fw-draft/routes/development.xml +32 -0
  69. package/ai/fw-draft/routes/universal.xml +58 -0
  70. package/ai/fw-draft/rules/dev/base/file-structure-rules.xml +89 -0
  71. package/ai/fw-draft/rules/dev/typescript/contacts.xml +194 -0
  72. package/dist/ai/agents/agent-resolve-conflicts.xml +6 -0
  73. package/dist/ai/agents/agent-review-verifier.xml +6 -0
  74. package/dist/ai/directives/architecture/README.md +21 -0
  75. package/dist/ai/directives/coding/README.md +23 -0
  76. package/dist/ai/directives/coding/result-conventions.xml +55 -0
  77. package/dist/ai/directives/coding/svelte5-runes.xml +248 -0
  78. package/dist/ai/directives/coding/sveltekit-rules.xml +247 -0
  79. package/dist/ai/directives/coding/typescript-rules.xml +589 -0
  80. package/dist/ai/directives/coding/uikit-component-storybook.xml +347 -0
  81. package/dist/ai/directives/coding/uikit-component-svelte.xml +344 -0
  82. package/dist/ai/directives/coding/uikit-spec-drafting.xml +243 -0
  83. package/dist/ai/directives/dbc-audit.directive.xml +131 -0
  84. package/dist/ai/directives/dev-review.directive.xml +148 -0
  85. package/dist/ai/directives/infra/README.md +11 -0
  86. package/dist/ai/directives/infra/eslint-setup.xml +467 -0
  87. package/dist/ai/directives/infra/git-setup.xml +261 -0
  88. package/dist/ai/directives/infra/nodejs-npm-setup.xml +354 -0
  89. package/dist/ai/directives/infra/storybook-setup.xml +153 -0
  90. package/dist/ai/directives/knowledge.xml +206 -0
  91. package/dist/ai/directives/perf-auditor/perf-auditor.directive.xml +75 -0
  92. package/dist/ai/directives/perf-auditor/rules/async-latency.xml +101 -0
  93. package/dist/ai/directives/perf-auditor/rules/data-structures.xml +103 -0
  94. package/dist/ai/directives/perf-auditor/rules/iteration-fusion.xml +96 -0
  95. package/dist/ai/directives/perf-auditor/rules/memory-gc.xml +102 -0
  96. package/dist/ai/directives/sdd/README.md +49 -0
  97. package/dist/ai/directives/sdd/audit.directive.xml +543 -0
  98. package/dist/ai/directives/sdd/discovery.directive.xml +824 -0
  99. package/dist/ai/directives/sdd/fix.directive.xml +249 -0
  100. package/dist/ai/directives/sdd/module-decomposition.directive.xml +666 -0
  101. package/dist/ai/directives/sdd/phase-execution-protocol.xml +339 -0
  102. package/dist/ai/directives/sdd/scaffold.directive.xml +717 -0
  103. package/dist/ai/directives/sdd/setup.directive.xml +213 -0
  104. package/dist/ai/directives/sdd/svelte-ui-discovery.directive.xml +263 -0
  105. package/dist/ai/directives/semantic-change-extractor.directive.xml +99 -0
  106. package/dist/ai/directives/testing/README.md +25 -0
  107. package/dist/ai/directives/testing/common.xml +234 -0
  108. package/dist/ai/directives/testing/node-test.xml +288 -0
  109. package/dist/ai/directives/testing/playwright-cli.xml +199 -0
  110. package/dist/ai/directives/testing/playwright-e2e.xml +292 -0
  111. package/dist/ai/directives/testing/storybook-usage.xml +173 -0
  112. package/dist/ai/directives/testing/svelte-testing.xml +237 -0
  113. package/dist/ai/directives/testing/vitest-rules.xml +326 -0
  114. package/dist/ai/docs/README.md +17 -0
  115. package/dist/ai/docs/ai-icl.md +538 -0
  116. package/dist/ai/docs/ai-priming.md +548 -0
  117. package/dist/ai/docs/ai-prompt-formats.md +406 -0
  118. package/dist/ai/docs/ai-promting.md +572 -0
  119. package/dist/ai/drafts/DRAFT.md +120 -0
  120. package/dist/ai/drafts/agent-devgen-class-from-description.rules.xml +123 -0
  121. package/dist/ai/drafts/agent-typescript-devgen.v1.xml +303 -0
  122. package/dist/ai/drafts/d.md +65 -0
  123. package/dist/ai/drafts/music-posts.md +105 -0
  124. package/dist/ai/fw/v1/architecture/blueprint-factory.xml +77 -0
  125. package/dist/ai/fw/v1/core/mental-model.xml +50 -0
  126. package/dist/ai/fw/v1/discovery/intent-reactor.xml +92 -0
  127. package/dist/ai/fw/v1/production/swarm-protocol.xml +122 -0
  128. package/dist/ai/fw/v1/review/quality-pipeline.xml +102 -0
  129. package/dist/ai/fw/v2/arch-universal.xml +73 -0
  130. package/dist/ai/fw-draft/README.md +79 -0
  131. package/dist/ai/fw-draft/bin/discovery.sh +116 -0
  132. package/dist/ai/fw-draft/gennady.xml +58 -0
  133. package/dist/ai/fw-draft/provider/claude.xml +16 -0
  134. package/dist/ai/fw-draft/provider/cursor.xml +23 -0
  135. package/dist/ai/fw-draft/provider/default.xml +12 -0
  136. package/dist/ai/fw-draft/roles/developer.xml +18 -0
  137. package/dist/ai/fw-draft/router.xml +39 -0
  138. package/dist/ai/fw-draft/routes/development.xml +32 -0
  139. package/dist/ai/fw-draft/routes/universal.xml +58 -0
  140. package/dist/ai/fw-draft/rules/dev/base/file-structure-rules.xml +89 -0
  141. package/dist/ai/fw-draft/rules/dev/typescript/contacts.xml +194 -0
  142. package/dist/chunks/devtools-B-7ugZhF.js +79 -0
  143. package/dist/chunks/{help.cmd-CWasx25o.js → help.cmd-B_G7EWzF.js} +9 -2
  144. package/dist/chunks/{index-B63fYXL2.js → index-BeL1Zcbg.js} +1 -1
  145. package/dist/chunks/index-CVR66voe.js +26963 -0
  146. package/dist/chunks/index-CXuhZzS3.js +16979 -0
  147. package/dist/chunks/{index-B5bA2T7A.js → index-CaahtXiM.js} +33 -9
  148. package/dist/chunks/{index-iqg0w_pE.js → index-CiEM-8nJ.js} +35 -19
  149. package/dist/chunks/{index-B4m0-PAT.js → index-D1qsi0Uc.js} +57 -33
  150. package/dist/chunks/index-D9ceRUyB.js +443 -0
  151. package/dist/chunks/index-DJpVmyp2.js +176 -0
  152. package/dist/chunks/{index-C0andxna.js → index-DU6jD7SS.js} +1 -1
  153. package/dist/chunks/index-KxSZKmZn.js +540 -0
  154. package/dist/chunks/{index-Dqe1TdW4.js → index-UbHoePfr.js} +12 -12
  155. package/dist/chunks/{index-5xIgwwKx.js → index-g1LXlp77.js} +2 -2
  156. package/dist/chunks/index-zBnnuvLA.js +3788 -0
  157. package/dist/chunks/{run-review-command.logic-a_M3CkeZ.js → run-review-command.logic-DpkRoEi8.js} +2 -2
  158. package/dist/chunks/services-CaLOhuLV.js +2889 -0
  159. package/dist/chunks/shared-Bjy30TeM.js +665 -0
  160. package/dist/cli/cmd/_shared/prompt/io/load-agent-template.io.d.ts +3 -3
  161. package/dist/cli/cmd/_shared/prompt/logic/build-ai-first-knowledge-block.logic.d.ts +3 -3
  162. package/dist/cli/cmd/_shared/prompt/logic/build-ai-verify-placeholders.logic.d.ts +7 -4
  163. package/dist/cli/cmd/_shared/prompt/logic/verify-commands/resolve-verify-commands.logic.d.ts +5 -0
  164. package/dist/cli/cmd/_shared/update-check-worker.d.ts +1 -0
  165. package/dist/cli/cmd/_shared/update-check.d.ts +38 -0
  166. package/dist/cli/cmd/agent-mon/cmd/create-providers.d.ts +15 -0
  167. package/dist/cli/cmd/agent-mon/cmd/index.d.ts +1 -0
  168. package/dist/cli/cmd/agent-mon/cmd/run.d.ts +12 -0
  169. package/dist/cli/cmd/agent-mon/state/create-state-manager.d.ts +32 -0
  170. package/dist/cli/cmd/agent-mon/state/group-by-provider.d.ts +14 -0
  171. package/dist/cli/cmd/agent-mon/state/index.d.ts +5 -0
  172. package/dist/cli/cmd/agent-mon/state/is-waiting.d.ts +9 -0
  173. package/dist/cli/cmd/agent-mon/state/view-model.type.d.ts +74 -0
  174. package/dist/cli/cmd/agent-mon/ui/app.d.ts +16 -0
  175. package/dist/cli/cmd/agent-mon/ui/column-view.d.ts +14 -0
  176. package/dist/cli/cmd/agent-mon/ui/index.d.ts +10 -0
  177. package/dist/cli/cmd/agent-mon/ui/provider-column.d.ts +14 -0
  178. package/dist/cli/cmd/agent-mon/ui/session-card.d.ts +12 -0
  179. package/dist/cli/cmd/agent-mon/ui/status-badge.d.ts +10 -0
  180. package/dist/cli/cmd/alt-opinion/alt-opinion-parser.d.ts +18 -0
  181. package/dist/cli/cmd/alt-opinion/alt-opinion-runner.d.ts +32 -0
  182. package/dist/cli/cmd/alt-opinion/alt-opinion.cmd.d.ts +34 -0
  183. package/dist/cli/cmd/alt-opinion/alt-opinion.types.d.ts +88 -0
  184. package/dist/cli/cmd/alt-opinion/index.d.ts +1 -0
  185. package/dist/cli/cmd/cat/cat-url.fn.d.ts +19 -0
  186. package/dist/cli/cmd/lint/checks/anchor.check.d.ts +11 -0
  187. package/dist/cli/cmd/lint/checks/dbc-contract.check.d.ts +16 -0
  188. package/dist/cli/cmd/lint/checks/disables.check.d.ts +12 -0
  189. package/dist/cli/cmd/lint/checks/file-header.check.d.ts +10 -0
  190. package/dist/cli/cmd/lint/checks/language.check.d.ts +11 -0
  191. package/dist/cli/cmd/lint/index.d.ts +1 -0
  192. package/dist/cli/cmd/lint/lint.cmd.d.ts +18 -0
  193. package/dist/cli/cmd/lint/lint.types.d.ts +72 -0
  194. package/dist/cli/cmd/lint/utils/resolve-references.fn.d.ts +32 -0
  195. package/dist/cli/cmd/remote-console/index.d.ts +2 -0
  196. package/dist/cli/cmd/remote-console/remote-console.cmd.d.ts +55 -0
  197. package/dist/cli/cmd/resolve-conflicts/_core/io/resolve-conflicts-template-load.io.d.ts +2 -2
  198. package/dist/cli/cmd/resolve-conflicts/_core/logic/resolve-conflicts-command-args-parse.logic.d.ts +3 -3
  199. package/dist/cli/cmd/resolve-conflicts/_core/logic/resolve-conflicts-command-run.logic.d.ts +3 -3
  200. package/dist/cli/cmd/resolve-conflicts/_core/logic/resolve-conflicts-context-git-build.logic.d.ts +4 -4
  201. package/dist/cli/cmd/resolve-conflicts/_core/types/resolve-conflicts-artifact.type.d.ts +3 -1
  202. package/dist/cli/cmd/resolve-conflicts/_core/types/resolve-conflicts-command-args.type.d.ts +3 -1
  203. package/dist/cli/cmd/resolve-conflicts/_core/types/resolve-conflicts-command-result.type.d.ts +5 -1
  204. package/dist/cli/cmd/resolve-conflicts/_core/types/resolve-conflicts-context-git.type.d.ts +18 -2
  205. package/dist/cli/cmd/resolve-conflicts/_core/xml/resolve-conflicts-artifact-build.xml.d.ts +6 -6
  206. package/dist/cli/cmd/resolve-conflicts/_core/xml/resolve-conflicts-render.xml.d.ts +4 -4
  207. package/dist/cli/cmd/review/_core/io/load-review-verify-template.io.d.ts +2 -2
  208. package/dist/cli/cmd/review/_core/logic/build-review-context-git.logic.d.ts +3 -3
  209. package/dist/cli/cmd/review/_core/logic/build-review-context-vcs.logic.d.ts +2 -2
  210. package/dist/cli/cmd/review/_core/logic/load-review-context-mr.logic.d.ts +5 -5
  211. package/dist/cli/cmd/review/_core/logic/parse-review-command-args.logic.d.ts +3 -3
  212. package/dist/cli/cmd/review/_core/logic/resolve-review-intent.logic.d.ts +3 -3
  213. package/dist/cli/cmd/review/_core/logic/run-review-command.logic.d.ts +3 -3
  214. package/dist/cli/cmd/review/_core/types/review-artifact.type.d.ts +4 -1
  215. package/dist/cli/cmd/review/_core/types/review-command-args.type.d.ts +7 -1
  216. package/dist/cli/cmd/review/_core/types/review-command-mode.type.d.ts +1 -1
  217. package/dist/cli/cmd/review/_core/types/review-command-options.type.d.ts +3 -1
  218. package/dist/cli/cmd/review/_core/types/review-command-result.type.d.ts +5 -1
  219. package/dist/cli/cmd/review/_core/types/review-context-git.type.d.ts +3 -1
  220. package/dist/cli/cmd/review/_core/types/review-context-mr.type.d.ts +22 -3
  221. package/dist/cli/cmd/review/_core/types/review-context-vcs.type.d.ts +4 -1
  222. package/dist/cli/cmd/review/_core/types/review-intent.type.d.ts +1 -1
  223. package/dist/cli/cmd/review/_core/xml/build-review-artifact.xml.d.ts +10 -10
  224. package/dist/cli/cmd/review/_core/xml/render-review-issues.xml.d.ts +3 -3
  225. package/dist/cli/cmd/review/_core/xml/render-review-verify.xml.d.ts +4 -4
  226. package/dist/cli/cmd/sync/index.d.ts +1 -0
  227. package/dist/cli/cmd/sync/sync-core.d.ts +65 -0
  228. package/dist/cli/cmd/sync/sync-formatter.d.ts +12 -0
  229. package/dist/cli/cmd/sync/sync.cmd.d.ts +33 -0
  230. package/dist/cli/cmd/sync/sync.types.d.ts +50 -0
  231. package/dist/cli/cmd/vcs-reply/vcs-reply.cmd.d.ts +4 -4
  232. package/dist/cli/utils/ai-legacy/ai-legacy-agent.d.ts +12 -11
  233. package/dist/cli/utils/ai-legacy/ai-legacy-core.d.ts +33 -17
  234. package/dist/cli/utils/ai-legacy/ai-legacy-model.d.ts +42 -23
  235. package/dist/cli/utils/cat-gen/cat-gen.d.ts +19 -8
  236. package/dist/cli/utils/commit-gen/commit-gen.d.ts +39 -15
  237. package/dist/cli/utils/prompts/index.d.ts +6 -6
  238. package/dist/cli/utils/review-gen/review-gen.d.ts +33 -9
  239. package/dist/gennady.js +30 -10
  240. package/dist/index.d.ts +1 -0
  241. package/dist/index.js +44 -23
  242. package/dist/services/agent-mon/diff/diff.d.ts +9 -0
  243. package/dist/services/agent-mon/diff/index.d.ts +1 -0
  244. package/dist/services/agent-mon/index.d.ts +10 -0
  245. package/dist/services/agent-mon/model/agent-provider.type.d.ts +20 -0
  246. package/dist/services/agent-mon/model/agent-session.type.d.ts +49 -0
  247. package/dist/services/agent-mon/model/errors.d.ts +20 -0
  248. package/dist/services/agent-mon/model/index.d.ts +7 -0
  249. package/dist/services/agent-mon/model/observe-opts.type.d.ts +7 -0
  250. package/dist/services/agent-mon/model/scan-opts.type.d.ts +7 -0
  251. package/dist/services/agent-mon/model/session-changes.type.d.ts +10 -0
  252. package/dist/services/agent-mon/monitor/agent-monitor.d.ts +44 -0
  253. package/dist/services/agent-mon/monitor/create-monitor.d.ts +6 -0
  254. package/dist/services/agent-mon/monitor/index.d.ts +2 -0
  255. package/dist/services/agent-mon/observe/index.d.ts +1 -0
  256. package/dist/services/agent-mon/observe/observe.d.ts +12 -0
  257. package/dist/services/agent-mon/providers/claude/claude-provider.d.ts +50 -0
  258. package/dist/services/agent-mon/providers/claude/index.d.ts +5 -0
  259. package/dist/services/agent-mon/providers/claude/ps.d.ts +36 -0
  260. package/dist/services/agent-mon/providers/claude/session-json.d.ts +37 -0
  261. package/dist/services/agent-mon/providers/opencode/db.d.ts +41 -0
  262. package/dist/services/agent-mon/providers/opencode/index.d.ts +3 -0
  263. package/dist/services/agent-mon/providers/opencode/model-parser.d.ts +6 -0
  264. package/dist/services/agent-mon/providers/opencode/opencode-provider.d.ts +45 -0
  265. package/dist/services/ai-client/providers/ai-model.type.d.ts +14 -0
  266. package/dist/services/ai-client/providers/open-router/open-router-model.type.d.ts +1 -4
  267. package/dist/services/ai-client/providers/open-router/open-router-provider.d.ts +17 -0
  268. package/dist/services/ai-client/providers/openai-like-provider.d.ts +1 -0
  269. package/dist/services/data-ore/telegram/telegram-data-ore.d.ts +17 -0
  270. package/dist/services/data-ore/telegram/telegram-data-ore.types.d.ts +4 -0
  271. package/dist/services/data-ore/telegram/telegram-demo-music-helper.d.ts +1 -0
  272. package/dist/services/data-ore/telegram/telegram-demo.d.ts +1 -0
  273. package/dist/services/dbc/linter/dbc-ast-adapter.types.d.ts +82 -0
  274. package/dist/services/dbc/linter/dbc-linter.types.d.ts +95 -0
  275. package/dist/services/dbc/linter/implementations/ts/dbc-ts-ast-adapter.d.ts +183 -0
  276. package/dist/services/dbc/linter/implementations/ts/dbc-ts-linter.d.ts +152 -0
  277. package/dist/services/dbc/parser/dbc-parser.types.d.ts +16 -16
  278. package/dist/services/dbc/parser/implementations/jsdoc/dbc-jsdoc-parser.d.ts +14 -4
  279. package/dist/services/logger/logger.d.ts +26 -6
  280. package/dist/services/remote-console/client/remote-console-client-serializer.d.ts +7 -0
  281. package/dist/services/remote-console/client/remote-console-client.d.ts +20 -0
  282. package/dist/services/remote-console/client/remote-console-client.types.d.ts +88 -0
  283. package/dist/services/remote-console/remote-console.d.ts +6 -0
  284. package/dist/services/remote-console/server/remote-console-server.d.ts +10 -0
  285. package/dist/services/remote-console/server/remote-console-server.types.d.ts +44 -0
  286. package/dist/services/remote-console/server/remote-console-stdout-writer.d.ts +26 -0
  287. package/dist/services/vcs-client/abstract/vcs-client-merge-discussions.d.ts +22 -14
  288. package/dist/services/vcs-client/abstract/vcs-client-merge-requests.d.ts +31 -14
  289. package/dist/services/vcs-client/abstract/vcs-client-repository-files.d.ts +16 -0
  290. package/dist/services/vcs-client/abstract/vcs-client.d.ts +9 -5
  291. package/dist/services/vcs-client/entities/vcs-file-content.type.d.ts +24 -0
  292. package/dist/services/vcs-client/entities/vcs-merge-request-changes.type.d.ts +32 -0
  293. package/dist/services/vcs-client/entities/vcs-url.type.d.ts +14 -0
  294. package/dist/services/vcs-client/entities/vcs-user.type.d.ts +3 -0
  295. package/dist/services/vcs-client/github/vcs-github-client.d.ts +31 -0
  296. package/dist/services/vcs-client/github/vcs-github-merge-requests.d.ts +40 -0
  297. package/dist/services/vcs-client/github/vcs-github-repository-files.d.ts +27 -0
  298. package/dist/services/vcs-client/gitlab/vcs-gitlab-client.d.ts +13 -4
  299. package/dist/services/vcs-client/gitlab/vcs-gitlab-merge-discussions.d.ts +16 -5
  300. package/dist/services/vcs-client/gitlab/vcs-gitlab-merge-requests.d.ts +24 -5
  301. package/dist/services/vcs-client/gitlab/vcs-gitlab-repository-files.d.ts +27 -0
  302. package/dist/services/vcs-client/parse-vcs-url.d.ts +3 -0
  303. package/dist/shared/backend/git/git-core.d.ts +24 -22
  304. package/dist/shared/backend/git/git-diff.d.ts +16 -5
  305. package/dist/shared/backend/rc/rc-config.d.ts +27 -15
  306. package/dist/shared/common/exec.d.ts +4 -6
  307. package/dist/shared/common/files.d.ts +1 -3
  308. package/dist/shared/common/language.d.ts +3 -6
  309. package/dist/shared/common/parse-args.d.ts +1 -4
  310. package/dist/shared/common/style.d.ts +3 -3
  311. package/dist/shared/common/think.d.ts +1 -5
  312. package/dist/shared/common/tokens.d.ts +1 -5
  313. package/dist/shared/common/unguard.d.ts +4 -8
  314. package/dist/shared/common/xml.d.ts +16 -12
  315. package/package.json +20 -4
  316. package/dist/.ai/agents/agent-review-verifier.xml +0 -181
  317. package/dist/chunks/index-CNbmXK8M.js +0 -3548
  318. package/dist/chunks/services-Sb7TwLxt.js +0 -122
  319. package/dist/chunks/shared-BgLzFWMH.js +0 -577
@@ -0,0 +1,89 @@
1
+ <!-- ai/framework/architecture/file_structure_rules.xml -->
2
+ <File_Structure_Protocol id="CleanArchitecture_v1.1">
3
+ <Preamble>
4
+ Этот протокол определяет стандарт для организации файловой структуры любого проекта. Он основан на принципах Чистой Архитектуры (Ports & Adapters), что обеспечивает низкую связанность, высокую тестируемость и понятность кодовой базы.
5
+ </Preamble>
6
+ <Core_Philosophy>
7
+ <Rationale>
8
+ Код должен быть организован по бизнес-назначению, а не по техническому типу. Это позволяет любому разработчику (или другому AI-агенту) быстро понять, за что отвечает каждый компонент системы, и вносить изменения в одном месте, не затрагивая другие. Мы разделяем "что" делает система (домен, сервисы) от "как" она это делает (базы данных, фреймворки).
9
+ </Rationale>
10
+ <Directive>
11
+ Твоя задача — проектировать файловую структуру как набор независимых слоев с явными границами. Каждый файл и директория должны иметь единственную, четко определенную ответственность.
12
+ </Directive>
13
+ </Core_Philosophy>
14
+ <Layer_Definitions>
15
+ <Layer id="entities" directory_name="entities">
16
+ <Objective>Изолировать чистые, независимые сущности домена, типы данных и бизнес-ошибки.</Objective>
17
+ <Directive>
18
+ Каждый файл должен содержать одну логическую сущность или тесно связанную группу (например, `user_entity.py`, `order_errors.py`). Этот слой не должен иметь никаких зависимостей от других слоев.
19
+ </Directive>
20
+ </Layer>
21
+ <Layer id="ports" directory_name="ports">
22
+ <Objective>Определить контракты (интерфейсы) для взаимодействия с внешним миром без указания реализации.</Objective>
23
+ <Directive>
24
+ Здесь находятся только абстракции: интерфейсы репозиториев (`i_user_repository.py`), клиентов внешних API, систем уведомлений. Этот слой содержит только объявления, без кода реализации.
25
+ </Directive>
26
+ <Note>(Role in Ports & Adapters: Ports)</Note>
27
+ </Layer>
28
+ <Layer id="services" directory_name="services">
29
+ <Objective>Реализовать сценарии использования (use cases) и оркестрировать бизнес-логику.</Objective>
30
+ <Directive>
31
+ Сервисы зависят от абстракций (`ports`), а не от конкретных реализаций. Они оперируют доменными сущностями (`entities`). Имена файлов должны отражать бизнес-сценарий (`create_order_service.py`).
32
+ </Directive>
33
+ </Layer>
34
+
35
+ <Layer id="infrastructure" directory_name="infrastructure">
36
+ <Objective>Предоставить конкретные реализации для исходящих портов и инкапсулировать все взаимодействия с внешним миром (сеть, файловая система, БД).</Objective>
37
+ <Directive>
38
+ Здесь находятся HTTP-клиенты, коннекторы к базам данных, реализации репозиториев (`gitlab_api_client.py`, `postgres_user_repository.py`). Этот код реализует интерфейсы из слоя `ports`.
39
+ </Directive>
40
+ <Note>(Role in Ports & Adapters: Driven Adapters)</Note>
41
+ </Layer>
42
+
43
+ <Layer id="interfaces" directory_name="interfaces">
44
+ <Objective>Определить точки входа в приложение (API-хендлеры, CLI-команды, обработчики событий).</Objective>
45
+ <Directive>
46
+ Этот слой является "переводчиком" внешних запросов в вызовы внутренних сервисов. Он отвечает за парсинг входящих данных, вызов соответствующего сервиса и форматирование ответа. Бизнес-логика здесь запрещена.
47
+ </Directive>
48
+ <Note>(Role in Ports & Adapters: Driving Adapters)</Note>
49
+ </Layer>
50
+ <Layer id="config" directory_name="config">
51
+ <Objective>Управлять конфигурацией приложения: сборка, валидация и предоставление доступа к настройкам.</Objective>
52
+ <Directive>
53
+ Этот слой использует `infrastructure` для чтения настроек из окружения или файлов и предоставляет типизированный, валидированный объект конфигурации для остальных частей приложения.
54
+ </Directive>
55
+ </Layer>
56
+ </Layer_Definitions>
57
+ <Scalability_And_Adoption>
58
+ <Rule id="MINIMAL_SET">
59
+ Для простых проектов обязательными являются только три слоя: `entities`, `services`, `infrastructure`. В этом случае сервисы могут напрямую зависеть от инфраструктуры.
60
+ </Rule>
61
+ <Rule id="WHEN_TO_ADD_PORTS">
62
+ Слой `ports` вводится тогда, когда появляется необходимость иметь несколько реализаций для одного контракта (например, для тестов (`in_memory_repository`) и для прода (`postgres_repository`)) или когда нужно строго отделить бизнес-логику от деталей реализации.
63
+ </Rule>
64
+ </Scalability_And_Adoption>
65
+ <Anti_Patterns_To_Avoid>
66
+ <Pattern id="MONOLITHIC_TYPES">
67
+ <Description>Создание общих файлов `types.py`, `models.py` или `schemas.py`, содержащих все типы данных проекта.</Description>
68
+ <Rationale>Это приводит к высокой связанности. Изменение одного типа требует модификации общего файла, затрагивая всю систему. Типы должны находиться в слое `entities` или рядом с модулем, который их использует.</Rationale>
69
+ <Directive>Распределяй определения данных по доменной принадлежности.</Directive>
70
+ </Pattern>
71
+ <Pattern id="DUMP_DIRECTORY">
72
+ <Description>Создание директории `utils` или `helpers` как "свалки" для всего, что не подошло в другие места.</Description>
73
+ <Rationale>Со временем такие директории становятся непредсказуемыми и сложными для навигации. Функция без побочных эффектов может остаться в `utils`, но если она работает с сетью или ФС, ее место — в `infrastructure`.</Rationale>
74
+ <Directive>Всегда классифицируй функцию по ее назначению и помещай в соответствующий слой.</Directive>
75
+ </Pattern>
76
+ </Anti_Patterns_To_Avoid>
77
+ <Testing_Strategy>
78
+ <Objective>Обеспечить четкое разделение исходного кода и тестов, сохраняя при этом понятную навигацию.</Objective>
79
+ <Directive>
80
+ Создай директорию для тестов (например, `tests/` или `__tests__/`) на том же уровне, что и директория с исходным кодом. Внутри этой директории **полностью воспроизведи (отзеркаль)** структуру исходников.
81
+ </Directive>
82
+ <Example>
83
+ Если есть файл `services/user/create_user.py`, то его тест должен находиться в `tests/services/user/test_create_user.py`.
84
+ </Example>
85
+ <Rationale>
86
+ Такой подход позволяет мгновенно находить тесты для любого модуля и сразу понимать, какой слой и компонент системы проверяется.
87
+ </Rationale>
88
+ </Testing_Strategy>
89
+ </File_Structure_Protocol>
@@ -0,0 +1,194 @@
1
+ <JSDOC_AS_CONTACTS hint="Правила оформления контактов в коде через JSDoc">
2
+ <Tag_Order>Строгий порядок в JSDoc: @purpose → @consumer → @invariant → @pre → @param → @throws → @returns → @post → @sideEffect</Tag_Order>
3
+ <TypeScript_Rules>
4
+ <Rule id="type_vs_interface">Для структур данных (объекты, DTO, ответы API, нормализованные модели) использовать type. interface — только для сущностей, которые наследуют или расширяют (несколько классов реализуют один контракт). Классы ошибок (extends Error) остаются class.</Rule>
5
+ <Rule id="naming_domain">Типы, относящиеся к внешней системе или домену (API, сервис), должны иметь префикс в имени (напр. ApiResource, ExternalServiceDto, VendorOrder). Внутренние утилитные типы без внешнего домена — без префикса.</Rule>
6
+ </TypeScript_Rules>
7
+ <TypeScript_Conventions hint="Node 22+, совместимость с декораторами">
8
+ <Convention id="no_enum">Не использовать enum. Вместо: const + as const или union type.</Convention>
9
+ <Convention id="no_constructor_modifiers">Не использовать модификаторы в конструкторе (public, private). Явное объявление полей в теле класса.</Convention>
10
+ <Convention id="no_private">Не использовать private / #private field. Вместо: protected _field с префиксом _.</Convention>
11
+ <Convention id="no_readonly_param">readonly — в объявлении поля, не в параметре конструктора.</Convention>
12
+ </TypeScript_Conventions>
13
+ <Tag_Dictionary hint="Полный реестр допустимых JSDoc-тегов для контрактов">
14
+ <Tag name="@purpose" type="mandatory">
15
+ <Definition>Телеологическое назначение. Зачем эта сущность существует в бизнес-логике?</Definition>
16
+ <Condition_Use>ВСЕГДА для любых экспортируемых (export) сущностей (классы, методы, типы, интерфейсы, константы).</Condition_Use>
17
+ <Format>@purpose {Глагол} {Объект} {Контекст}.</Format>
18
+ </Tag>
19
+ <Tag name="@consumer" type="contextual">
20
+ <Definition>Кто является клиентом этого API? (Другие модули, UI, внешние системы).</Definition>
21
+ <Condition_Use>Для корневых сущностей (классы, модули) и публичных методов API.</Condition_Use>
22
+ <Condition_Skip>Для внутренних утилитных типов или методов.</Condition_Skip>
23
+ <Format>@consumer {ModuleName}, {SystemName}</Format>
24
+ </Tag>
25
+ <Tag name="@param" type="functional">
26
+ <Definition>Описание входящего аргумента: одно связное описание бизнес-роли и границ валидности. Для параметров-объектов описывается их общая роль, без дублирования описания внутренних полей.</Definition>
27
+ <Condition_Use>ВСЕГДА, если у функции есть аргументы.</Condition_Use>
28
+ <Condition_Skip>Если функция не принимает аргументов.</Condition_Skip>
29
+ <Format mode="required">@param {name} {Одно связное описание: что это и допустимые границы}.</Format>
30
+ <Format mode="optional">@param [{name}] {Одно связное описание}.</Format>
31
+ </Tag>
32
+ <Tag name="@returns" type="functional">
33
+ <Definition>Бизнес-цель результата: зачем вызывающему нужен результат. Для асинхронных функций описывает значение, которым успешно разрешается Promise.</Definition>
34
+ <Condition_Use>ВСЕГДА, если функция возвращает значение (не void/never).</Condition_Use>
35
+ <Condition_Skip>Если функция возвращает void.</Condition_Skip>
36
+ <Format>@returns {Цель результата для вызывающего}.</Format>
37
+ </Tag>
38
+ <Tag name="@pre" type="logic">
39
+ <Definition>Предпословие. Состояние системы или окружения (не связанное с простой валидацией аргументов), которое ДОЛЖНО быть истинным ДО вызова.</Definition>
40
+ <Condition_Use>Если есть скрытые требования к окружению или состоянию системы, не дублирующие @param.</Condition_Use>
41
+ <Condition_Skip>Если дублирует @param или требования только из типов TypeScript.</Condition_Skip>
42
+ <Format>@pre {Состояние системы/окружения}.</Format>
43
+ </Tag>
44
+ <Tag name="@post" type="logic">
45
+ <Definition>Постусловие. Гарантированное состояние системы ПОСЛЕ успешного выполнения.</Definition>
46
+ <Condition_Use>Если метод меняет стейт или даёт гарантию, не выраженную в @returns (напр. неизменность аргумента, порядок элементов).</Condition_Use>
47
+ <Condition_Skip>Если дублирует @returns или @param; для чистых функций без дополнительных гарантий.</Condition_Skip>
48
+ <Format>@post {Факт об изменении состояния или гарантия}.</Format>
49
+ </Tag>
50
+ <Tag name="@invariant" type="logic">
51
+ <Definition>Условие, которое всегда остается истинным для жизни сущности. Для внешних сервисов описывает SLA, политику обработки ошибок (Error Policy) и стратегию повторных запросов (Retry Policy).</Definition>
52
+ <Condition_Use>Для Классов/Интерфейсов с состоянием или клиентов внешних систем.</Condition_Use>
53
+ <Condition_Skip>Для функций-утилит (stateless).</Condition_Skip>
54
+ <Format>@invariant {Условие целостности или Политика}.</Format>
55
+ </Tag>
56
+ <Tag name="@sideEffect" type="critical">
57
+ <Definition>Любое взаимодействие с внешним миром (IO, Network, Logs, Events , etc).</Definition>
58
+ <Condition_Use>ВСЕГДА, если метод не является чистой функцией.</Condition_Use>
59
+ <Condition_Skip>Если метод только вычисляет и возвращает данные.</Condition_Skip>
60
+ <Format>@sideEffect {Тип действия}: {Описание}.</Format>
61
+ </Tag>
62
+ <Tag name="@throws" type="critical">
63
+ <Definition>Описание исключительной ситуации. Для асинхронных функций описывает причину отклонения (reject) Promise.</Definition>
64
+ <Condition_Use>Если метод может выбросить ошибку (throw) или вернуть Rejected Promise.</Condition_Use>
65
+ <Condition_Skip>Если метод гарантированно безопасен (never throws).</Condition_Skip>
66
+ <Format>@throws {ErrorType | RejectedPromiseReason} {Условие возникновения}.</Format>
67
+ </Tag>
68
+ <Tag name="@see" type="linking">
69
+ <Definition>Ссылка на определение контракта (Interface/Spec/Type), который реализует этот код.</Definition>
70
+ <Condition_Use>При реализации интерфейса или наследовании, чтобы не дублировать описание.</Condition_Use>
71
+ <Condition_Skip>Если это первичное определение контракта.</Condition_Skip>
72
+ <Format>@see {TypeName#method} in path/from/project/root</Format>
73
+ </Tag>
74
+ <Tag name="@example" type="optional">
75
+ <Definition>Пример использования кода.</Definition>
76
+ <Condition_Use>Если логика вызова неочевидна или требует сложной подготовки данных.</Condition_Use>
77
+ <Condition_Skip>Для тривиальных методов (get/set).</Condition_Skip>
78
+ <Format>@example {Code block}</Format>
79
+ </Tag>
80
+ <Tag name="@deprecated" type="lifecycle">
81
+ <Definition>Маркер устаревшего кода.</Definition>
82
+ <Condition_Use>Если метод планируется к удалению. Обязательно указать альтернативу.</Condition_Use>
83
+ <Condition_Skip>Для актуального кода.</Condition_Skip>
84
+ <Format>@deprecated Используй {NewMethod} вместо этого.</Format>
85
+ </Tag>
86
+ </Tag_Dictionary>
87
+ <Usage_Patterns hint="Как применять теги к разным сущностям">
88
+ <Pattern id="PATTERN_SPECIFICATION_TYPE" appliesTo="type, interface (data)">
89
+ <Context>Определение типа данных (type) или контракта данных (interface).</Context>
90
+ <Rule>Данные: type с @purpose; при принадлежности к домену/API — префикс в имени. Логика: pre/post только если не дублируют param/returns.</Rule>
91
+ <Example>
92
+ /**
93
+ * @purpose Описывает элемент каталога внешнего сервиса — идентификатор и дочерние элементы.
94
+ * @consumer catalog-service, export-module.
95
+ */
96
+ export type ApiCatalogItem = { id: string; children: ApiCatalogItem[]; };
97
+ </Example>
98
+ </Pattern>
99
+ <Pattern id="PATTERN_SYSTEM_INTERFACE" appliesTo="interface (service), class (client)">
100
+ <Context>Интерфейс или Клиент к внешней системе (API, DB, IO). Ненадежная среда.</Context>
101
+ <Rule>Обязательно: 1. Иерархия ошибок (Base → Network/Auth/Domain). 2. @invariant с описанием Resilience Policy (Retry, Rate Limits, Timeout).</Rule>
102
+ <Example>
103
+ /**
104
+ * @purpose Клиент для работы с платежным шлюзом.
105
+ * @consumer billing-service
106
+ * @invariant Error Policy: Все сетевые ошибки оборачиваются в PaymentNetworkError.
107
+ * @invariant Retry Policy: Идемпотентные методы (GET) повторяются 3 раза с экспоненциальной задержкой.
108
+ * @invariant Rate Limit: Не более 100 rps (контролируется клиентом).
109
+ */
110
+ export interface PaymentGateway { ... }
111
+ </Example>
112
+ </Pattern>
113
+ <Pattern id="PATTERN_IMPLEMENTATION_LINK" appliesTo="const, class, method">
114
+ <Context>Реализация сущности, которая уже описана во внешнем контракте (implements Interface).</Context>
115
+ <Rule>Не дублируй логику. Используй @purpose (кратко), @consumer и @see.</Rule>
116
+ <Example>
117
+ /**
118
+ * @purpose Реализация трансформации для мобильных устройств.
119
+ * @consumer MobileApp
120
+ * @see {UserTransformer} in features/users/contracts.ts
121
+ */
122
+ export const mobileUserTransformer: UserTransformer = (u) => { ... };
123
+ </Example>
124
+ </Pattern>
125
+ <Pattern id="PATTERN_CLASS_METHOD" appliesTo="method">
126
+ <Context>Метод класса. Если реализует интерфейс — @see. Иначе — полный контракт.</Context>
127
+ <Example>
128
+ /**
129
+ * @purpose Списание средств.
130
+ * @pre Система должна быть в режиме read-write (не maintenance).
131
+ * @param amount Сумма к списанию (положительное число).
132
+ * @throws {NoFundsError} Если баланс недостаточен.
133
+ */
134
+ public pay(amount: number): void { ... }
135
+ </Example>
136
+ </Pattern>
137
+ <Pattern id="PATTERN_FUNCTION_PARAM_RETURNS" appliesTo="function">
138
+ <Context>Стандартная функция. @param не дублирует поля типа.</Context>
139
+ <Example good="@param id Идентификатор сущности (непустая строка или положительное число). @returns Данные для отображения в UI или передачи в следующий слой."/>
140
+ <Example bad="@param id Смысл: идентификатор. Валидность: непустая строка. @returns UserDto с заполненными полями."/>
141
+ </Pattern>
142
+ <Pattern id="PATTERN_EXPORTED_CONSTANT" appliesTo="const">
143
+ <Context>Публичные константы, особенно объекты конфигурации.</Context>
144
+ <Rule>Опиши @purpose (зачем этот конфиг) и @invariant (ограничения значений).</Rule>
145
+ <Example>
146
+ /**
147
+ * @purpose Глобальные настройки ретраев для HTTP.
148
+ * @invariant maxRetries должно быть меньше 5.
149
+ */
150
+ export const RETRY_CONFIG = { ... };
151
+ </Example>
152
+ </Pattern>
153
+ <Pattern id="PATTERN_ASYNC_FUNCTION" appliesTo="function, method">
154
+ <Context>Асинхронная функция, возвращающая Promise.</Context>
155
+ <Rule>@returns описывает значение при успешном resolve. @throws описывает причину (Error) при reject.</Rule>
156
+ <Example>
157
+ /**
158
+ * @purpose Загружает данные пользователя с сервера.
159
+ * @param userId ID пользователя для загрузки (UUIDv4).
160
+ * @throws {UserNotFoundError} Если пользователь с таким ID не найден.
161
+ * @returns {Promise<ApiUser>} Данные пользователя для внутреннего использования в системе.
162
+ * @sideEffect Network: GET-запрос к /api/users/{userId}
163
+ */
164
+ export async function fetchUser(userId: string): Promise<ApiUser> { ... }
165
+ </Example>
166
+ </Pattern>
167
+ <Pattern id="PATTERN_GENERIC_FUNCTION" appliesTo="function, method">
168
+ <Context>Обобщенная (generic) функция с параметризованными типами.</Context>
169
+ <Rule>В @param и @returns следует описать роль обобщенного типа T.</Rule>
170
+ <Example>
171
+ /**
172
+ * @purpose Оборачивает любые входные данные в стандартизированный объект ответа.
173
+ * @param data Данные любого типа {T}, которые будут помещены в поле `payload`.
174
+ * @returns {ApiResponse<T>} Стандартизированный объект ответа, содержащий исходные данные.
175
+ */
176
+ export function wrapInApiResponse<T>(data: T): ApiResponse<T> { ... }
177
+ </Example>
178
+ </Pattern>
179
+ </Usage_Patterns>
180
+ <Validation_Checklist hint="Критерии качества контракта">
181
+ <Check>Экспортируемая сущность: есть @purpose; для корневых типов и публичного API — @consumer при необходимости.</Check>
182
+ <Check>Класс/модуль с состоянием: есть @invariant.</Check>
183
+ <Check>Внешний сервис (Client/Interface): определен @invariant с иерархией ошибок и Retry Policy.</Check>
184
+ <Check>@param — одно связное описание. Для объектов описание полей не дублируется из типа.</Check>
185
+ <Check>@returns — бизнес-цель результата для вызывающего, а не перечисление типа.</Check>
186
+ <Check>Порядок тегов соблюдён: purpose → consumer → invariant → pre → param → throws → returns → post → sideEffect.</Check>
187
+ <Check>@pre и @post не дублируют @param/@returns; только если добавляют новую информацию.</Check>
188
+ <Check>Метод с побочными эффектами: есть @post или @sideEffect.</Check>
189
+ <Check>Реализация внешнего типа: есть @see с путем от корня.</Check>
190
+ <Check>Структуры данных объявлены через type; interface только при наследовании/реализации.</Check>
191
+ <Check>Типы внешнего домена/API имеют префикс в имени.</Check>
192
+ <Check>Асинхронность: @returns описывает успех, @throws — ошибку (reject).</Check>
193
+ </Validation_Checklist>
194
+ </JSDOC_AS_CONTACTS>
@@ -0,0 +1,6 @@
1
+ <!-- @file: Agent directive for conflict resolution -->
2
+ <!-- @consumers: resolve-conflicts command -->
3
+ <!-- @tasks: TSK-33 -->
4
+ <Agent name="agent-resolve-conflicts" type="directive" ver="0.1">
5
+ <Mission>Resolve merge conflicts with confidence scoring.</Mission>
6
+ </Agent>
@@ -0,0 +1,6 @@
1
+ <!-- @file: Agent directive for review verification -->
2
+ <!-- @consumers: review-verify command -->
3
+ <!-- @tasks: TSK-33 -->
4
+ <Agent name="agent-review-verifier" type="directive" ver="0.1">
5
+ <Mission>Verify review results against code changes.</Mission>
6
+ </Agent>
@@ -0,0 +1,21 @@
1
+ # Architecture rules
2
+
3
+ Architectural patterns constraining HOW components compose and depend on each other.
4
+
5
+ Distinct from `coding/` (language-level rules) and `quality/` (cross-cutting code quality).
6
+
7
+ ## Currently available
8
+
9
+ _(none yet)_
10
+
11
+ ## Planned
12
+
13
+ - `ports-adapters.xml` — hexagonal architecture: ports as abstractions, adapters as implementations, dependency direction (business logic depends on ports, not adapters).
14
+ - `ddd.xml` — Domain-Driven Design tactical patterns: aggregates, entities vs value objects, domain events, bounded contexts.
15
+ - `event-sourcing.xml` — event-sourced state: append-only event log, projections, eventual consistency.
16
+ - `cqrs.xml` — command/query separation: write models vs read models.
17
+ - `layered.xml` — classic n-tier (presentation / application / domain / infrastructure).
18
+
19
+ ## How they're activated
20
+
21
+ Architecture rules are referenced from `discovery` §4.5 Project-Wide Rules (when chosen at project level) or from domain spec §9 Domain Rules Additions (when scoped to one domain). They typically activate `now` per `AX_RULE_ACTIVATION_DEFAULTS` — strong opinions deserve operator buy-in.
@@ -0,0 +1,23 @@
1
+ # Coding rules
2
+
3
+ Language-specific rules for HOW to write code: syntax preferences, naming, error handling, comment style, language idioms.
4
+
5
+ Distinct from:
6
+
7
+ - `runtimes/` — runtime SETUP (Node version, package manager).
8
+ - `quality/` — cross-language quality (binary lint severity, formatting delegation).
9
+ - `architecture/` — composition patterns.
10
+
11
+ ## Currently available
12
+
13
+ - [`typescript-rules.xml`](typescript-rules.xml) — TypeScript writing conventions.
14
+ - [`svelte5-runes.xml`](svelte5-runes.xml) — Svelte 5 runes: $state, $derived, $effect, $props, template syntax. **Inherits typescript-rules.**
15
+ - [`sveltekit-rules.xml`](sveltekit-rules.xml) — SvelteKit fullstack: routing, load, form actions, hooks, $app modules. **Inherits svelte5-runes + typescript-rules.**
16
+
17
+ ## Planned
18
+
19
+ - `react-rules.xml` — React component patterns, hooks discipline, JSX conventions.
20
+ - `go-rules.xml` — Go idioms, error handling, package layout.
21
+ - `python-rules.xml` — Python style (PEP 8 + project-specific tightening), type hints, dataclasses vs Pydantic.
22
+ - `rust-rules.xml` — Rust idioms, error handling (`Result`, `?` operator), lifetimes & borrowing patterns.
23
+ - `css-rules.xml` — CSS naming (BEM / utility-first), specificity discipline.
@@ -0,0 +1,55 @@
1
+ <ResultConventions keywords="result, error-handling, isErr, TessellError, unwrap, success, fail" type="coding-rule" ver="1.0">
2
+ <Mission>
3
+ Invariants for the Result pattern from @tessell/core/result. Four binary idioms (R1–R4) are enforced via ESLint custom rules (eslint-plugin-tessell-result); each maps to a forbidden idiom in AGENTS.md that survived code review and was caught retroactively. One architectural convention (AX_RESULT_PUBLIC_BOUNDARY) is code-review-only — not mechanically detectable.
4
+ </Mission>
5
+
6
+ <Belief_State>
7
+ <Axiom id="AX_NO_RESULT_SECOND_GENERIC">
8
+ `Result<T, ConcreteError>` is forbidden. No method can guarantee it only throws one error class — library and runtime code can throw anything. Use `Result<T>` only.
9
+ Exception: when the second arg is a type parameter of the enclosing generic declaration (function / type alias / class) — that is a constraint, not a pinned class. Detection: AST walk up to nearest TSTypeParameterDeclaration; skip if name appears there.
10
+ Autofix: remove second type argument.
11
+ </Axiom>
12
+
13
+ <Axiom id="AX_NO_RESULT_OBJECT_LITERAL">
14
+ Manual `{ ok: true, data: x, error: null }` and `{ ok: false, data: null, error: e }` are forbidden. Always use `success(x)` / `fail(e)`.
15
+ Rationale: bypasses the contract, breaks silently if Result shape evolves.
16
+ Autofix: ok===true → success(data_value); ok===false → fail(error_value).
17
+ </Axiom>
18
+
19
+ <Axiom id="AX_NO_RESULT_ISERR_SHORT_CIRCUIT">
20
+ `if (isErr(r)) return r` and `if (!isOk(r)) return r` are forbidden. Use `unwrap + try/catch` — that is the whole point of the convention.
21
+ No autofix: requires restructuring the surrounding function, not a one-line substitution.
22
+ </Axiom>
23
+
24
+ <Axiom id="AX_NO_BARE_THROW_UNKNOWN">
25
+ `throw catchBinding` without wrapping in `TessellError.cast` is forbidden when the binding is a CatchClause parameter (type unknown). Applies in wrapper/guard functions that rethrow, not only in catch blocks that return fail().
26
+ Detection: scope analysis — ThrowStatement whose argument resolves to a CatchClause parameter, regardless of variable name (cause, err, e, error).
27
+ No autofix: the fallback message is context-dependent.
28
+ </Axiom>
29
+
30
+ <Axiom id="AX_RESULT_PUBLIC_BOUNDARY" enforcement="convention">
31
+ Result is the transport form of error across the public / port boundary — not an internal control-flow primitive. Public surface (port interface methods, exported factory return types, closures returned from factories) MUST return `Result<T>`. Inside the same class:
32
+ - protected/private async helpers with I/O → throw; the public caller wraps in try/catch and returns `fail(error)` (per AX_CATCH_LOG_RECOVER in typescript-rules).
33
+ - pure helpers (predicates, classifiers) → honest return type (`Error | null`, scalar, enum literal); not Result.
34
+ - Result in protected is permitted only when the helper carries a typed `kind` the public call-site immediately unwraps — and even then, throw is usually cleaner because it avoids the `Result → unwrapSync → throw → catch → re-emit` double-packaging pattern.
35
+
36
+ Rationale: mixing Result and null-pattern in helpers of one class produces structural noise (two error-channel styles in one surface) and double-packaging. The convention keeps Result as a boundary artifact, not an internal one.
37
+
38
+ Not ESLint-enforced. The public/private boundary is not mechanically detectable: closures returned from factories (e.g. `defineDataStorageQuery → (storage, params) => Promise<Result<R>>`) are public-by-intent but private-by-syntax, and methods on factory-returned object literals (e.g. `defineDataOperation`) are not visible as class members. Enforced via code review and this directive.
39
+ </Axiom>
40
+
41
+ <Axiom id="AX_CONFIGURABLE_NAMES">
42
+ Every rule that matches function or type names accepts an options object with configurable identifiers: resultTypeName, isErrFn, isOkFn, successFn, failFn, castFn.
43
+ Defaults match @tessell/core/result exports. On package rename — update config, not the rule.
44
+ </Axiom>
45
+ </Belief_State>
46
+
47
+ <Reward_Criteria>
48
+ - R1 flags `Result<T, DataStorageError>`, autofixes to `Result<T>`. Does NOT flag `Result<T, E>` where E is a type parameter of the enclosing generic.
49
+ - R2 flags `{ ok: true, data: x, error: null }`, autofixes to `success(x)`.
50
+ - R3 flags `if (isErr(r)) return r` with no autofix; error message cites `unwrap + try/catch`.
51
+ - R4 flags `throw e` inside any catch where e is the catch binding, regardless of variable name.
52
+ - R3 and R4 carry explanatory comment in eslint.config.ts (non-autofix path per eslint-setup AX_CUSTOM_PLUGINS_OBEY_META_POLICY).
53
+ - Each rule has Vitest tests: positive case, negative case, edge case (R1: type param exception; R4: non-catch-binding throw not flagged).
54
+ </Reward_Criteria>
55
+ </ResultConventions>