@lwelliott/cortex-cli 1.0.3

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 (335) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +159 -0
  3. package/dist/cli/audit.d.ts +3 -0
  4. package/dist/cli/audit.d.ts.map +1 -0
  5. package/dist/cli/audit.js +78 -0
  6. package/dist/cli/audit.js.map +1 -0
  7. package/dist/cli/doc.d.ts +3 -0
  8. package/dist/cli/doc.d.ts.map +1 -0
  9. package/dist/cli/doc.js +291 -0
  10. package/dist/cli/doc.js.map +1 -0
  11. package/dist/cli/entity.d.ts +3 -0
  12. package/dist/cli/entity.d.ts.map +1 -0
  13. package/dist/cli/entity.js +135 -0
  14. package/dist/cli/entity.js.map +1 -0
  15. package/dist/cli/format-selector.d.ts +30 -0
  16. package/dist/cli/format-selector.d.ts.map +1 -0
  17. package/dist/cli/format-selector.js +101 -0
  18. package/dist/cli/format-selector.js.map +1 -0
  19. package/dist/cli/formatters/audit-formatter.d.ts +33 -0
  20. package/dist/cli/formatters/audit-formatter.d.ts.map +1 -0
  21. package/dist/cli/formatters/audit-formatter.js +204 -0
  22. package/dist/cli/formatters/audit-formatter.js.map +1 -0
  23. package/dist/cli/formatters/json.d.ts +10 -0
  24. package/dist/cli/formatters/json.d.ts.map +1 -0
  25. package/dist/cli/formatters/json.js +31 -0
  26. package/dist/cli/formatters/json.js.map +1 -0
  27. package/dist/cli/formatters/markdown.d.ts +12 -0
  28. package/dist/cli/formatters/markdown.d.ts.map +1 -0
  29. package/dist/cli/formatters/markdown.js +341 -0
  30. package/dist/cli/formatters/markdown.js.map +1 -0
  31. package/dist/cli/formatters/quiet.d.ts +15 -0
  32. package/dist/cli/formatters/quiet.d.ts.map +1 -0
  33. package/dist/cli/formatters/quiet.js +75 -0
  34. package/dist/cli/formatters/quiet.js.map +1 -0
  35. package/dist/cli/formatters/table.d.ts +11 -0
  36. package/dist/cli/formatters/table.d.ts.map +1 -0
  37. package/dist/cli/formatters/table.js +726 -0
  38. package/dist/cli/formatters/table.js.map +1 -0
  39. package/dist/cli/graph.d.ts +3 -0
  40. package/dist/cli/graph.d.ts.map +1 -0
  41. package/dist/cli/graph.js +209 -0
  42. package/dist/cli/graph.js.map +1 -0
  43. package/dist/cli/index.d.ts +3 -0
  44. package/dist/cli/index.d.ts.map +1 -0
  45. package/dist/cli/index.js +144 -0
  46. package/dist/cli/index.js.map +1 -0
  47. package/dist/cli/lesson.d.ts +3 -0
  48. package/dist/cli/lesson.d.ts.map +1 -0
  49. package/dist/cli/lesson.js +85 -0
  50. package/dist/cli/lesson.js.map +1 -0
  51. package/dist/cli/project-resolver.d.ts +17 -0
  52. package/dist/cli/project-resolver.d.ts.map +1 -0
  53. package/dist/cli/project-resolver.js +25 -0
  54. package/dist/cli/project-resolver.js.map +1 -0
  55. package/dist/cli/project.d.ts +12 -0
  56. package/dist/cli/project.d.ts.map +1 -0
  57. package/dist/cli/project.js +169 -0
  58. package/dist/cli/project.js.map +1 -0
  59. package/dist/cli/relation.d.ts +3 -0
  60. package/dist/cli/relation.d.ts.map +1 -0
  61. package/dist/cli/relation.js +128 -0
  62. package/dist/cli/relation.js.map +1 -0
  63. package/dist/cli/review.d.ts +3 -0
  64. package/dist/cli/review.d.ts.map +1 -0
  65. package/dist/cli/review.js +131 -0
  66. package/dist/cli/review.js.map +1 -0
  67. package/dist/cli/router.d.ts +38 -0
  68. package/dist/cli/router.d.ts.map +1 -0
  69. package/dist/cli/router.js +49 -0
  70. package/dist/cli/router.js.map +1 -0
  71. package/dist/cli/schema.d.ts +3 -0
  72. package/dist/cli/schema.d.ts.map +1 -0
  73. package/dist/cli/schema.js +94 -0
  74. package/dist/cli/schema.js.map +1 -0
  75. package/dist/cli/sprint.d.ts +12 -0
  76. package/dist/cli/sprint.d.ts.map +1 -0
  77. package/dist/cli/sprint.js +200 -0
  78. package/dist/cli/sprint.js.map +1 -0
  79. package/dist/cli/task.d.ts +12 -0
  80. package/dist/cli/task.d.ts.map +1 -0
  81. package/dist/cli/task.js +252 -0
  82. package/dist/cli/task.js.map +1 -0
  83. package/dist/cli/test-report.d.ts +3 -0
  84. package/dist/cli/test-report.d.ts.map +1 -0
  85. package/dist/cli/test-report.js +134 -0
  86. package/dist/cli/test-report.js.map +1 -0
  87. package/dist/cli/validate.d.ts +8 -0
  88. package/dist/cli/validate.d.ts.map +1 -0
  89. package/dist/cli/validate.js +86 -0
  90. package/dist/cli/validate.js.map +1 -0
  91. package/dist/config/config.d.ts +18 -0
  92. package/dist/config/config.d.ts.map +1 -0
  93. package/dist/config/config.js +70 -0
  94. package/dist/config/config.js.map +1 -0
  95. package/dist/config/registry.d.ts +52 -0
  96. package/dist/config/registry.d.ts.map +1 -0
  97. package/dist/config/registry.js +193 -0
  98. package/dist/config/registry.js.map +1 -0
  99. package/dist/config/resolver.d.ts +26 -0
  100. package/dist/config/resolver.d.ts.map +1 -0
  101. package/dist/config/resolver.js +87 -0
  102. package/dist/config/resolver.js.map +1 -0
  103. package/dist/db/builtin-schema-constants.d.ts +109 -0
  104. package/dist/db/builtin-schema-constants.d.ts.map +1 -0
  105. package/dist/db/builtin-schema-constants.js +32 -0
  106. package/dist/db/builtin-schema-constants.js.map +1 -0
  107. package/dist/db/connection.d.ts +34 -0
  108. package/dist/db/connection.d.ts.map +1 -0
  109. package/dist/db/connection.js +140 -0
  110. package/dist/db/connection.js.map +1 -0
  111. package/dist/db/generated/schema-types.d.ts +134 -0
  112. package/dist/db/generated/schema-types.d.ts.map +1 -0
  113. package/dist/db/generated/schema-types.js +31 -0
  114. package/dist/db/generated/schema-types.js.map +1 -0
  115. package/dist/db/locks.d.ts +106 -0
  116. package/dist/db/locks.d.ts.map +1 -0
  117. package/dist/db/locks.js +211 -0
  118. package/dist/db/locks.js.map +1 -0
  119. package/dist/db/migration.d.ts +65 -0
  120. package/dist/db/migration.d.ts.map +1 -0
  121. package/dist/db/migration.js +233 -0
  122. package/dist/db/migration.js.map +1 -0
  123. package/dist/db/retry.d.ts +26 -0
  124. package/dist/db/retry.d.ts.map +1 -0
  125. package/dist/db/retry.js +71 -0
  126. package/dist/db/retry.js.map +1 -0
  127. package/dist/db/schema.d.ts +21 -0
  128. package/dist/db/schema.d.ts.map +1 -0
  129. package/dist/db/schema.js +830 -0
  130. package/dist/db/schema.js.map +1 -0
  131. package/dist/models/common.d.ts +27 -0
  132. package/dist/models/common.d.ts.map +1 -0
  133. package/dist/models/common.js +4 -0
  134. package/dist/models/common.js.map +1 -0
  135. package/dist/models/document.d.ts +89 -0
  136. package/dist/models/document.d.ts.map +1 -0
  137. package/dist/models/document.js +5 -0
  138. package/dist/models/document.js.map +1 -0
  139. package/dist/models/entity-model.d.ts +30 -0
  140. package/dist/models/entity-model.d.ts.map +1 -0
  141. package/dist/models/entity-model.js +99 -0
  142. package/dist/models/entity-model.js.map +1 -0
  143. package/dist/models/entity.d.ts +88 -0
  144. package/dist/models/entity.d.ts.map +1 -0
  145. package/dist/models/entity.js +5 -0
  146. package/dist/models/entity.js.map +1 -0
  147. package/dist/models/graph-schema.d.ts +43 -0
  148. package/dist/models/graph-schema.d.ts.map +1 -0
  149. package/dist/models/graph-schema.js +76 -0
  150. package/dist/models/graph-schema.js.map +1 -0
  151. package/dist/models/project.d.ts +49 -0
  152. package/dist/models/project.d.ts.map +1 -0
  153. package/dist/models/project.js +18 -0
  154. package/dist/models/project.js.map +1 -0
  155. package/dist/models/relation.d.ts +35 -0
  156. package/dist/models/relation.d.ts.map +1 -0
  157. package/dist/models/relation.js +212 -0
  158. package/dist/models/relation.js.map +1 -0
  159. package/dist/models/review.d.ts +86 -0
  160. package/dist/models/review.d.ts.map +1 -0
  161. package/dist/models/review.js +5 -0
  162. package/dist/models/review.js.map +1 -0
  163. package/dist/models/sprint.d.ts +38 -0
  164. package/dist/models/sprint.d.ts.map +1 -0
  165. package/dist/models/sprint.js +4 -0
  166. package/dist/models/sprint.js.map +1 -0
  167. package/dist/models/task.d.ts +75 -0
  168. package/dist/models/task.d.ts.map +1 -0
  169. package/dist/models/task.js +4 -0
  170. package/dist/models/task.js.map +1 -0
  171. package/dist/models/validation.d.ts +25 -0
  172. package/dist/models/validation.d.ts.map +1 -0
  173. package/dist/models/validation.js +4 -0
  174. package/dist/models/validation.js.map +1 -0
  175. package/dist/services/audit-check-service.d.ts +16 -0
  176. package/dist/services/audit-check-service.d.ts.map +1 -0
  177. package/dist/services/audit-check-service.js +137 -0
  178. package/dist/services/audit-check-service.js.map +1 -0
  179. package/dist/services/audit-checks/dangling-relations-check.d.ts +7 -0
  180. package/dist/services/audit-checks/dangling-relations-check.d.ts.map +1 -0
  181. package/dist/services/audit-checks/dangling-relations-check.js +52 -0
  182. package/dist/services/audit-checks/dangling-relations-check.js.map +1 -0
  183. package/dist/services/audit-checks/duplicate-ids-check.d.ts +4 -0
  184. package/dist/services/audit-checks/duplicate-ids-check.d.ts.map +1 -0
  185. package/dist/services/audit-checks/duplicate-ids-check.js +49 -0
  186. package/dist/services/audit-checks/duplicate-ids-check.js.map +1 -0
  187. package/dist/services/audit-checks/fix-engine.d.ts +24 -0
  188. package/dist/services/audit-checks/fix-engine.d.ts.map +1 -0
  189. package/dist/services/audit-checks/fix-engine.js +114 -0
  190. package/dist/services/audit-checks/fix-engine.js.map +1 -0
  191. package/dist/services/audit-checks/fr-nfr-to-fs-nfs-check.d.ts +9 -0
  192. package/dist/services/audit-checks/fr-nfr-to-fs-nfs-check.d.ts.map +1 -0
  193. package/dist/services/audit-checks/fr-nfr-to-fs-nfs-check.js +56 -0
  194. package/dist/services/audit-checks/fr-nfr-to-fs-nfs-check.js.map +1 -0
  195. package/dist/services/audit-checks/fs-nfs-to-sad-ad-qa-check.d.ts +10 -0
  196. package/dist/services/audit-checks/fs-nfs-to-sad-ad-qa-check.d.ts.map +1 -0
  197. package/dist/services/audit-checks/fs-nfs-to-sad-ad-qa-check.js +57 -0
  198. package/dist/services/audit-checks/fs-nfs-to-sad-ad-qa-check.js.map +1 -0
  199. package/dist/services/audit-checks/fs-nfs-to-ts-check.d.ts +9 -0
  200. package/dist/services/audit-checks/fs-nfs-to-ts-check.d.ts.map +1 -0
  201. package/dist/services/audit-checks/fs-nfs-to-ts-check.js +56 -0
  202. package/dist/services/audit-checks/fs-nfs-to-ts-check.js.map +1 -0
  203. package/dist/services/audit-checks/inverse-consistency-check.d.ts +7 -0
  204. package/dist/services/audit-checks/inverse-consistency-check.d.ts.map +1 -0
  205. package/dist/services/audit-checks/inverse-consistency-check.js +54 -0
  206. package/dist/services/audit-checks/inverse-consistency-check.js.map +1 -0
  207. package/dist/services/audit-checks/mapping-check.d.ts +4 -0
  208. package/dist/services/audit-checks/mapping-check.d.ts.map +1 -0
  209. package/dist/services/audit-checks/mapping-check.js +74 -0
  210. package/dist/services/audit-checks/mapping-check.js.map +1 -0
  211. package/dist/services/audit-checks/orphan-documents-check.d.ts +9 -0
  212. package/dist/services/audit-checks/orphan-documents-check.d.ts.map +1 -0
  213. package/dist/services/audit-checks/orphan-documents-check.js +54 -0
  214. package/dist/services/audit-checks/orphan-documents-check.js.map +1 -0
  215. package/dist/services/audit-checks/orphan-entities-check.d.ts +4 -0
  216. package/dist/services/audit-checks/orphan-entities-check.d.ts.map +1 -0
  217. package/dist/services/audit-checks/orphan-entities-check.js +39 -0
  218. package/dist/services/audit-checks/orphan-entities-check.js.map +1 -0
  219. package/dist/services/audit-checks/sad-ad-qa-tc-to-src-check.d.ts +9 -0
  220. package/dist/services/audit-checks/sad-ad-qa-tc-to-src-check.d.ts.map +1 -0
  221. package/dist/services/audit-checks/sad-ad-qa-tc-to-src-check.js +56 -0
  222. package/dist/services/audit-checks/sad-ad-qa-tc-to-src-check.js.map +1 -0
  223. package/dist/services/audit-checks/sprint-consistency-check.d.ts +4 -0
  224. package/dist/services/audit-checks/sprint-consistency-check.d.ts.map +1 -0
  225. package/dist/services/audit-checks/sprint-consistency-check.js +80 -0
  226. package/dist/services/audit-checks/sprint-consistency-check.js.map +1 -0
  227. package/dist/services/audit-checks/src-filesystem-only-check.d.ts +10 -0
  228. package/dist/services/audit-checks/src-filesystem-only-check.d.ts.map +1 -0
  229. package/dist/services/audit-checks/src-filesystem-only-check.js +106 -0
  230. package/dist/services/audit-checks/src-filesystem-only-check.js.map +1 -0
  231. package/dist/services/audit-checks/ts-to-tc-check.d.ts +10 -0
  232. package/dist/services/audit-checks/ts-to-tc-check.d.ts.map +1 -0
  233. package/dist/services/audit-checks/ts-to-tc-check.js +58 -0
  234. package/dist/services/audit-checks/ts-to-tc-check.js.map +1 -0
  235. package/dist/services/audit-checks/type-mismatch-check.d.ts +4 -0
  236. package/dist/services/audit-checks/type-mismatch-check.d.ts.map +1 -0
  237. package/dist/services/audit-checks/type-mismatch-check.js +55 -0
  238. package/dist/services/audit-checks/type-mismatch-check.js.map +1 -0
  239. package/dist/services/audit-checks/types.d.ts +66 -0
  240. package/dist/services/audit-checks/types.d.ts.map +1 -0
  241. package/dist/services/audit-checks/types.js +30 -0
  242. package/dist/services/audit-checks/types.js.map +1 -0
  243. package/dist/services/audit-checks/us-to-fr-nfr-check.d.ts +9 -0
  244. package/dist/services/audit-checks/us-to-fr-nfr-check.d.ts.map +1 -0
  245. package/dist/services/audit-checks/us-to-fr-nfr-check.js +56 -0
  246. package/dist/services/audit-checks/us-to-fr-nfr-check.js.map +1 -0
  247. package/dist/services/doc-entity-mapping.d.ts +19 -0
  248. package/dist/services/doc-entity-mapping.d.ts.map +1 -0
  249. package/dist/services/doc-entity-mapping.js +35 -0
  250. package/dist/services/doc-entity-mapping.js.map +1 -0
  251. package/dist/services/document-service.d.ts +58 -0
  252. package/dist/services/document-service.d.ts.map +1 -0
  253. package/dist/services/document-service.js +409 -0
  254. package/dist/services/document-service.js.map +1 -0
  255. package/dist/services/graph-export-service.d.ts +12 -0
  256. package/dist/services/graph-export-service.d.ts.map +1 -0
  257. package/dist/services/graph-export-service.js +112 -0
  258. package/dist/services/graph-export-service.js.map +1 -0
  259. package/dist/services/graph-service.d.ts +21 -0
  260. package/dist/services/graph-service.d.ts.map +1 -0
  261. package/dist/services/graph-service.js +49 -0
  262. package/dist/services/graph-service.js.map +1 -0
  263. package/dist/services/graph-validation-service.d.ts +13 -0
  264. package/dist/services/graph-validation-service.d.ts.map +1 -0
  265. package/dist/services/graph-validation-service.js +171 -0
  266. package/dist/services/graph-validation-service.js.map +1 -0
  267. package/dist/services/project.d.ts +80 -0
  268. package/dist/services/project.d.ts.map +1 -0
  269. package/dist/services/project.js +256 -0
  270. package/dist/services/project.js.map +1 -0
  271. package/dist/services/review-service.d.ts +81 -0
  272. package/dist/services/review-service.d.ts.map +1 -0
  273. package/dist/services/review-service.js +242 -0
  274. package/dist/services/review-service.js.map +1 -0
  275. package/dist/services/schema-migration-service.d.ts +44 -0
  276. package/dist/services/schema-migration-service.d.ts.map +1 -0
  277. package/dist/services/schema-migration-service.js +894 -0
  278. package/dist/services/schema-migration-service.js.map +1 -0
  279. package/dist/services/sprint.d.ts +71 -0
  280. package/dist/services/sprint.d.ts.map +1 -0
  281. package/dist/services/sprint.js +238 -0
  282. package/dist/services/sprint.js.map +1 -0
  283. package/dist/services/stage-validator.d.ts +36 -0
  284. package/dist/services/stage-validator.d.ts.map +1 -0
  285. package/dist/services/stage-validator.js +78 -0
  286. package/dist/services/stage-validator.js.map +1 -0
  287. package/dist/services/task.d.ts +75 -0
  288. package/dist/services/task.d.ts.map +1 -0
  289. package/dist/services/task.js +487 -0
  290. package/dist/services/task.js.map +1 -0
  291. package/dist/services/validation.d.ts +24 -0
  292. package/dist/services/validation.d.ts.map +1 -0
  293. package/dist/services/validation.js +53 -0
  294. package/dist/services/validation.js.map +1 -0
  295. package/dist/state-machines/sprint-state.d.ts +25 -0
  296. package/dist/state-machines/sprint-state.d.ts.map +1 -0
  297. package/dist/state-machines/sprint-state.js +64 -0
  298. package/dist/state-machines/sprint-state.js.map +1 -0
  299. package/dist/state-machines/task-state.d.ts +31 -0
  300. package/dist/state-machines/task-state.d.ts.map +1 -0
  301. package/dist/state-machines/task-state.js +83 -0
  302. package/dist/state-machines/task-state.js.map +1 -0
  303. package/dist/utils/errors.d.ts +673 -0
  304. package/dist/utils/errors.d.ts.map +1 -0
  305. package/dist/utils/errors.js +1447 -0
  306. package/dist/utils/errors.js.map +1 -0
  307. package/dist/utils/format.d.ts +52 -0
  308. package/dist/utils/format.d.ts.map +1 -0
  309. package/dist/utils/format.js +65 -0
  310. package/dist/utils/format.js.map +1 -0
  311. package/dist/validators/board-integrity.d.ts +25 -0
  312. package/dist/validators/board-integrity.d.ts.map +1 -0
  313. package/dist/validators/board-integrity.js +102 -0
  314. package/dist/validators/board-integrity.js.map +1 -0
  315. package/dist/validators/board-shape.d.ts +13 -0
  316. package/dist/validators/board-shape.d.ts.map +1 -0
  317. package/dist/validators/board-shape.js +74 -0
  318. package/dist/validators/board-shape.js.map +1 -0
  319. package/dist/validators/owner-validator.d.ts +30 -0
  320. package/dist/validators/owner-validator.d.ts.map +1 -0
  321. package/dist/validators/owner-validator.js +70 -0
  322. package/dist/validators/owner-validator.js.map +1 -0
  323. package/dist/validators/spawn-legality.d.ts +19 -0
  324. package/dist/validators/spawn-legality.d.ts.map +1 -0
  325. package/dist/validators/spawn-legality.js +77 -0
  326. package/dist/validators/spawn-legality.js.map +1 -0
  327. package/dist/validators/state-field-checker.d.ts +8 -0
  328. package/dist/validators/state-field-checker.d.ts.map +1 -0
  329. package/dist/validators/state-field-checker.js +47 -0
  330. package/dist/validators/state-field-checker.js.map +1 -0
  331. package/dist/validators/state-field-recorder.d.ts +39 -0
  332. package/dist/validators/state-field-recorder.d.ts.map +1 -0
  333. package/dist/validators/state-field-recorder.js +62 -0
  334. package/dist/validators/state-field-recorder.js.map +1 -0
  335. package/package.json +53 -0
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ // CLI commands for project group
3
+ // Implements plan §5.1: Project Commands
4
+ // Updated per SAD-0039: selectFormat() + formatOutput() pipeline integration
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createProjectCommand = createProjectCommand;
7
+ exports.registerProjectCommand = registerProjectCommand;
8
+ exports.removeProjectCommand = removeProjectCommand;
9
+ exports.listProjectCommand = listProjectCommand;
10
+ exports.defaultProjectCommand = defaultProjectCommand;
11
+ exports.infoProjectCommand = infoProjectCommand;
12
+ exports.createProjectGroup = createProjectGroup;
13
+ const commander_1 = require("commander");
14
+ const project_1 = require("../services/project");
15
+ const format_1 = require("../utils/format");
16
+ const format_selector_1 = require("./format-selector");
17
+ const errors_1 = require("../utils/errors");
18
+ /**
19
+ * Resolve format for error output, falling back to 'table' if resolution fails.
20
+ */
21
+ function resolveErrorFormat(cmd, isShowCommand) {
22
+ try {
23
+ return (0, format_selector_1.selectFormat)(cmd.optsWithGlobals(), isShowCommand);
24
+ }
25
+ catch {
26
+ return 'table';
27
+ }
28
+ }
29
+ function createProjectCommand() {
30
+ return new commander_1.Command('create')
31
+ .description('Create a new project')
32
+ .argument('<name>', 'Project name')
33
+ .argument('<folder>', 'Project folder path')
34
+ .option('--json', 'Output as JSON')
35
+ .option('-q, --quiet', 'Quiet output')
36
+ .action((name, folder, _options, cmd) => {
37
+ try {
38
+ const opts = cmd.optsWithGlobals();
39
+ const format = (0, format_selector_1.selectFormat)(opts, false);
40
+ const result = (0, project_1.createProject)(name, folder);
41
+ console.log((0, format_selector_1.formatOutput)((0, format_1.formatProjectResult)(result), format, 'project'));
42
+ }
43
+ catch (err) {
44
+ console.error((0, format_selector_1.formatErrorOutput)(err instanceof Error ? err : new Error(String(err)), resolveErrorFormat(cmd, false)));
45
+ process.exit(1);
46
+ }
47
+ });
48
+ }
49
+ function registerProjectCommand() {
50
+ return new commander_1.Command('register')
51
+ .description('Register an existing project folder')
52
+ .argument('<name>', 'Project name')
53
+ .argument('<folder>', 'Project folder path')
54
+ .option('--json', 'Output as JSON')
55
+ .option('-q, --quiet', 'Quiet output')
56
+ .action((name, folder, _options, cmd) => {
57
+ try {
58
+ const opts = cmd.optsWithGlobals();
59
+ const format = (0, format_selector_1.selectFormat)(opts, false);
60
+ const result = (0, project_1.registerProject)(name, folder);
61
+ console.log((0, format_selector_1.formatOutput)((0, format_1.formatProjectResult)(result), format, 'project'));
62
+ }
63
+ catch (err) {
64
+ console.error((0, format_selector_1.formatErrorOutput)(err instanceof Error ? err : new Error(String(err)), resolveErrorFormat(cmd, false)));
65
+ process.exit(1);
66
+ }
67
+ });
68
+ }
69
+ function removeProjectCommand() {
70
+ return new commander_1.Command('remove')
71
+ .description('Remove a project from the registry (preserves database)')
72
+ .argument('<name>', 'Project name')
73
+ .option('--json', 'Output as JSON')
74
+ .option('-q, --quiet', 'Quiet output')
75
+ .action((name, _options, cmd) => {
76
+ try {
77
+ const opts = cmd.optsWithGlobals();
78
+ const format = (0, format_selector_1.selectFormat)(opts, false);
79
+ const result = (0, project_1.removeProject)(name);
80
+ console.log((0, format_selector_1.formatOutput)((0, format_1.formatProjectRemoval)(result.name, result.dbPath), format, 'project'));
81
+ }
82
+ catch (err) {
83
+ console.error((0, format_selector_1.formatErrorOutput)(err instanceof Error ? err : new Error(String(err)), resolveErrorFormat(cmd, false)));
84
+ process.exit(1);
85
+ }
86
+ });
87
+ }
88
+ function listProjectCommand() {
89
+ return new commander_1.Command('list')
90
+ .description('List all registered projects')
91
+ .option('--json', 'Output as JSON')
92
+ .option('-q, --quiet', 'Quiet output')
93
+ .action((_options, cmd) => {
94
+ try {
95
+ const opts = cmd.optsWithGlobals();
96
+ const format = (0, format_selector_1.selectFormat)(opts, false);
97
+ const registry = (0, project_1.listAllProjects)();
98
+ console.log((0, format_selector_1.formatOutput)((0, format_1.formatProjectList)(registry), format, 'project'));
99
+ }
100
+ catch (err) {
101
+ console.error((0, format_selector_1.formatErrorOutput)(err instanceof Error ? err : new Error(String(err)), resolveErrorFormat(cmd, false)));
102
+ process.exit(1);
103
+ }
104
+ });
105
+ }
106
+ function defaultProjectCommand() {
107
+ return new commander_1.Command('default')
108
+ .description('Set or show the default project')
109
+ .argument('[name]', 'Project name (omit to show current default)')
110
+ .option('--json', 'Output as JSON')
111
+ .option('-q, --quiet', 'Quiet output')
112
+ .action((name, _options, cmd) => {
113
+ try {
114
+ const opts = cmd.optsWithGlobals();
115
+ const format = (0, format_selector_1.selectFormat)(opts, false);
116
+ if (name) {
117
+ (0, project_1.setProjectDefault)(name);
118
+ console.log((0, format_selector_1.formatOutput)((0, format_1.formatDefaultProject)(name), format, 'project'));
119
+ }
120
+ else {
121
+ const currentDefault = (0, project_1.getDefaultProjectName)();
122
+ console.log((0, format_selector_1.formatOutput)((0, format_1.formatDefaultProject)(currentDefault), format, 'project'));
123
+ }
124
+ }
125
+ catch (err) {
126
+ console.error((0, format_selector_1.formatErrorOutput)(err instanceof Error ? err : new Error(String(err)), resolveErrorFormat(cmd, false)));
127
+ process.exit(1);
128
+ }
129
+ });
130
+ }
131
+ function infoProjectCommand() {
132
+ return new commander_1.Command('info')
133
+ .description('Show project details')
134
+ .argument('[name]', 'Project name (uses default if omitted)')
135
+ .option('--json', 'Output as JSON')
136
+ .option('-q, --quiet', 'Quiet output')
137
+ .action((name, _options, cmd) => {
138
+ try {
139
+ const opts = cmd.optsWithGlobals();
140
+ const format = (0, format_selector_1.selectFormat)(opts, true);
141
+ // If name is not provided, try to resolve the default project
142
+ const projectName = name ?? (0, project_1.getDefaultProjectName)();
143
+ if (!projectName) {
144
+ throw new errors_1.ProjectNotFoundError('(no default set)');
145
+ }
146
+ const info = (0, project_1.getProjectInfo)(projectName);
147
+ console.log((0, format_selector_1.formatOutput)((0, format_1.formatProjectInfo)(info), format, 'project'));
148
+ }
149
+ catch (err) {
150
+ console.error((0, format_selector_1.formatErrorOutput)(err instanceof Error ? err : new Error(String(err)), resolveErrorFormat(cmd, true)));
151
+ process.exit(1);
152
+ }
153
+ });
154
+ }
155
+ /**
156
+ * Create the project command group with all subcommands.
157
+ */
158
+ function createProjectGroup() {
159
+ const cmd = new commander_1.Command('project')
160
+ .description('Manage projects');
161
+ cmd.addCommand(createProjectCommand());
162
+ cmd.addCommand(registerProjectCommand());
163
+ cmd.addCommand(removeProjectCommand());
164
+ cmd.addCommand(listProjectCommand());
165
+ cmd.addCommand(defaultProjectCommand());
166
+ cmd.addCommand(infoProjectCommand());
167
+ return cmd;
168
+ }
169
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/cli/project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createRelationGroup(): Command;
3
+ //# sourceMappingURL=relation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation.d.ts","sourceRoot":"","sources":["../../src/cli/relation.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,wBAAgB,mBAAmB,IAAI,OAAO,CAqC7C"}
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ // CLI subcommands for relation group
3
+ // SAD-0003: MOD-010 Graph Relations
4
+ // SAD-0035: Updated to reference documents instead of entities
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createRelationGroup = createRelationGroup;
7
+ const commander_1 = require("commander");
8
+ const graph_service_1 = require("../services/graph-service");
9
+ const graph_service_2 = require("../services/graph-service");
10
+ const connection_1 = require("../db/connection");
11
+ const migration_1 = require("../db/migration");
12
+ const project_resolver_1 = require("./project-resolver");
13
+ const format_selector_1 = require("./format-selector");
14
+ function run(fn, optsOrCmd) {
15
+ try {
16
+ const opts = optsOrCmd instanceof commander_1.Command ? optsOrCmd.optsWithGlobals() : optsOrCmd;
17
+ console.log(fn(opts));
18
+ }
19
+ catch (err) {
20
+ const opts = optsOrCmd instanceof commander_1.Command ? optsOrCmd.optsWithGlobals() : optsOrCmd;
21
+ const format = (0, format_selector_1.selectFormat)(opts);
22
+ console.error((0, format_selector_1.formatErrorOutput)(err instanceof Error ? err : new Error(String(err)), format));
23
+ process.exit(1);
24
+ }
25
+ }
26
+ function createRelationGroup() {
27
+ const group = new commander_1.Command('relation').description('Graph relation management');
28
+ // relation create
29
+ group.command('create')
30
+ .description('Create a relation between two documents')
31
+ .requiredOption('--from <id>', 'Source document ID')
32
+ .requiredOption('--type <relType>', 'Relation type name')
33
+ .requiredOption('--to <id>', 'Target document ID')
34
+ .option('--props <json>', 'Properties as JSON')
35
+ .action((_opts, cmd) => run(handleCreate, cmd));
36
+ // relation remove
37
+ group.command('remove')
38
+ .description('Remove a relation by ID')
39
+ .argument('<id>', 'Relation ID (numeric)')
40
+ .action((id, _opts, cmd) => run((o) => handleRemove(parseInt(id, 10), o), cmd));
41
+ // relation query
42
+ group.command('query')
43
+ .description('Query relations for a document')
44
+ .requiredOption('--entity <id>', 'Document ID')
45
+ .option('--type <relType>', 'Filter by relation type')
46
+ .option('--direction <dir>', 'Direction: outgoing, incoming, both', 'both')
47
+ .option('--limit <n>', 'Max results', '100')
48
+ .option('--offset <n>', 'Offset', '0')
49
+ .action((_opts, cmd) => run(handleQuery, cmd));
50
+ // relation related (convenience: shows related documents)
51
+ group.command('related')
52
+ .description('Get documents related to a given document')
53
+ .argument('<id>', 'Document ID')
54
+ .option('--type <relType>', 'Filter by relation type')
55
+ .option('--direction <dir>', 'Direction: outgoing, incoming, both', 'outgoing')
56
+ .action((id, _opts, cmd) => run((o) => handleRelated(id, o), cmd));
57
+ return group;
58
+ }
59
+ function handleCreate(opts) {
60
+ const fromId = opts.from;
61
+ const relType = opts.type;
62
+ const toId = opts.to;
63
+ const props = opts.props ? JSON.parse(opts.props) : undefined;
64
+ const format = (0, format_selector_1.selectFormat)(opts);
65
+ const resolved = (0, project_resolver_1.resolveFromCLI)(opts);
66
+ const db = (0, connection_1.openConnection)(resolved.dbPath);
67
+ try {
68
+ (0, migration_1.initializeSchema)(db);
69
+ (0, graph_service_2.ensureBuiltinSchemaInitialized)(db);
70
+ const relation = (0, graph_service_1.createRelation)(db, fromId, relType, toId, props);
71
+ return (0, format_selector_1.formatOutput)(relation, format);
72
+ }
73
+ finally {
74
+ db.close();
75
+ }
76
+ }
77
+ function handleRemove(id, opts) {
78
+ const resolved = (0, project_resolver_1.resolveFromCLI)(opts);
79
+ const db = (0, connection_1.openConnection)(resolved.dbPath);
80
+ try {
81
+ (0, migration_1.initializeSchema)(db);
82
+ (0, graph_service_2.ensureBuiltinSchemaInitialized)(db);
83
+ (0, graph_service_1.removeRelation)(db, id);
84
+ return `Relation ${id} removed (inverse also removed if applicable)`;
85
+ }
86
+ finally {
87
+ db.close();
88
+ }
89
+ }
90
+ function handleQuery(opts) {
91
+ const entityId = opts.entity;
92
+ const format = (0, format_selector_1.selectFormat)(opts);
93
+ const resolved = (0, project_resolver_1.resolveFromCLI)(opts);
94
+ const db = (0, connection_1.openConnection)(resolved.dbPath);
95
+ try {
96
+ (0, migration_1.initializeSchema)(db);
97
+ (0, graph_service_2.ensureBuiltinSchemaInitialized)(db);
98
+ const relations = (0, graph_service_1.queryRelations)(db, {
99
+ entityId,
100
+ relType: opts.type,
101
+ direction: opts.direction ?? 'both',
102
+ limit: parseInt(opts.limit, 10),
103
+ offset: parseInt(opts.offset, 10),
104
+ });
105
+ return (0, format_selector_1.formatOutput)(relations, format, 'relation');
106
+ }
107
+ finally {
108
+ db.close();
109
+ }
110
+ }
111
+ function handleRelated(entityId, opts) {
112
+ const format = (0, format_selector_1.selectFormat)(opts);
113
+ const resolved = (0, project_resolver_1.resolveFromCLI)(opts);
114
+ const db = (0, connection_1.openConnection)(resolved.dbPath);
115
+ try {
116
+ (0, migration_1.initializeSchema)(db);
117
+ (0, graph_service_2.ensureBuiltinSchemaInitialized)(db);
118
+ const related = (0, graph_service_1.getRelatedDocuments)(db, entityId, {
119
+ relType: opts.type,
120
+ direction: opts.direction ?? 'outgoing',
121
+ });
122
+ return (0, format_selector_1.formatOutput)(related, format, 'relation-related', { parentEntityId: entityId });
123
+ }
124
+ finally {
125
+ db.close();
126
+ }
127
+ }
128
+ //# sourceMappingURL=relation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation.js","sourceRoot":"","sources":["../../src/cli/relation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createReviewGroup(): Command;
3
+ //# sourceMappingURL=review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/cli/review.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,wBAAgB,iBAAiB,IAAI,OAAO,CAyG3C"}
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ // CLI subcommands for review group
3
+ // SAD-0031: Explicit Command IDs — --id required for review add
4
+ // SAD-0010: Review show requires --sprint, --content-file replaces --content
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createReviewGroup = createReviewGroup;
7
+ const commander_1 = require("commander");
8
+ const fs_1 = require("fs");
9
+ const review_service_1 = require("../services/review-service");
10
+ const sprint_1 = require("../services/sprint");
11
+ const connection_1 = require("../db/connection");
12
+ const migration_1 = require("../db/migration");
13
+ const project_resolver_1 = require("./project-resolver");
14
+ const format_selector_1 = require("./format-selector");
15
+ const errors_1 = require("../utils/errors");
16
+ function run(fn, optsOrCmd) {
17
+ try {
18
+ const opts = optsOrCmd instanceof commander_1.Command ? optsOrCmd.optsWithGlobals() : optsOrCmd;
19
+ console.log(fn(opts));
20
+ }
21
+ catch (err) {
22
+ const opts = optsOrCmd instanceof commander_1.Command ? optsOrCmd.optsWithGlobals() : optsOrCmd;
23
+ const format = (0, format_selector_1.selectFormat)({ quiet: opts.quiet, json: opts.json, format: opts.format });
24
+ console.error((0, format_selector_1.formatErrorOutput)(err instanceof Error ? err : new Error(String(err)), format));
25
+ process.exit(1);
26
+ }
27
+ }
28
+ function createReviewGroup() {
29
+ const group = new commander_1.Command('review').description('Review management');
30
+ // review add — uses --content-file (atomic import) and positional <id> (SAD-0031/FS-SS-028-0001)
31
+ group.command('add')
32
+ .description('Add a review')
33
+ .argument('<id>', 'Review ID (4-digit zero-padded, e.g., 0001)')
34
+ .option('--sprint <id>', 'Sprint ID')
35
+ .requiredOption('--type <type>', 'Review type (requirements, architecture, code, test, document)')
36
+ .requiredOption('--verdict <v>', 'Verdict (APPROVED, NEEDS_REWORK, OPEN_QUESTION)')
37
+ .requiredOption('--content-file <path>', 'File to read review content from')
38
+ .option('--asset-name <name>', 'Asset name')
39
+ .option('--asset-ref <ref>', 'Asset reference path')
40
+ .option('--critical <n>', 'Critical findings count', '0')
41
+ .option('--major <n>', 'Major findings count', '0')
42
+ .option('--minor <n>', 'Minor findings count', '0')
43
+ .option('--suggestion <n>', 'Suggestion count', '0')
44
+ .action((reviewId, _opts, _cmd) => {
45
+ run((opts) => {
46
+ const format = (0, format_selector_1.selectFormat)(opts);
47
+ const resolved = (0, project_resolver_1.resolveFromCLI)(opts);
48
+ const db = (0, connection_1.openConnection)(resolved.dbPath);
49
+ const contentFilePath = opts.contentFile;
50
+ try {
51
+ (0, migration_1.initializeSchema)(db);
52
+ // Step 1: Read content file (before transaction — fail fast)
53
+ let content;
54
+ try {
55
+ content = (0, fs_1.readFileSync)(contentFilePath, 'utf-8');
56
+ }
57
+ catch {
58
+ throw new errors_1.ReviewContentFileNotFoundError(contentFilePath);
59
+ }
60
+ const sprintId = (0, sprint_1.resolveSprint)(db, opts.sprint).id;
61
+ // Steps 3-5: DB write + commit
62
+ const result = (0, review_service_1.addReview)(db, sprintId, reviewId, opts.type, opts.verdict, content, {
63
+ assetName: opts.assetName,
64
+ assetRef: opts.assetRef,
65
+ critical: Number(opts.critical),
66
+ major: Number(opts.major),
67
+ minor: Number(opts.minor),
68
+ suggestion: Number(opts.suggestion),
69
+ });
70
+ // Step 6: Delete file after successful commit
71
+ try {
72
+ (0, fs_1.unlinkSync)(contentFilePath);
73
+ }
74
+ catch { /* best effort */ }
75
+ return (0, format_selector_1.formatOutput)(result, format, 'review');
76
+ }
77
+ finally {
78
+ // File preserved on failure by not reaching Step 6 delete
79
+ db.close();
80
+ }
81
+ }, _cmd);
82
+ });
83
+ // review list
84
+ group.command('list')
85
+ .description('List reviews')
86
+ .option('--sprint <id>', 'Sprint ID')
87
+ .option('--type <type>', 'Filter by review type')
88
+ .option('--verdict <v>', 'Filter by verdict')
89
+ .action((_opts, _cmd) => {
90
+ run((opts) => {
91
+ const format = (0, format_selector_1.selectFormat)(opts);
92
+ const resolved = (0, project_resolver_1.resolveFromCLI)(opts);
93
+ const db = (0, connection_1.openConnection)(resolved.dbPath);
94
+ try {
95
+ (0, migration_1.initializeSchema)(db);
96
+ const sprintId = (0, sprint_1.resolveSprint)(db, opts.sprint).id;
97
+ const results = (0, review_service_1.listReviews)(db, sprintId, {
98
+ type: opts.type,
99
+ verdict: opts.verdict,
100
+ });
101
+ return (0, format_selector_1.formatOutput)(results, format, 'review');
102
+ }
103
+ finally {
104
+ db.close();
105
+ }
106
+ }, _cmd);
107
+ });
108
+ // review show — --sprint required (SAD-0010 Part C)
109
+ group.command('show')
110
+ .description('Show review detail')
111
+ .argument('<id>', 'Review number')
112
+ .option('--sprint <id>', 'Sprint ID')
113
+ .action((id, _opts, _cmd) => {
114
+ run((opts) => {
115
+ const format = (0, format_selector_1.selectFormat)(opts, true); // isShowCommand = true → default markdown
116
+ const resolved = (0, project_resolver_1.resolveFromCLI)(opts);
117
+ const db = (0, connection_1.openConnection)(resolved.dbPath);
118
+ try {
119
+ (0, migration_1.initializeSchema)(db);
120
+ const sprintId = (0, sprint_1.resolveSprint)(db, opts.sprint).id;
121
+ const result = (0, review_service_1.getReview)(db, Number(id), sprintId);
122
+ return (0, format_selector_1.formatOutput)(result, format, 'review');
123
+ }
124
+ finally {
125
+ db.close();
126
+ }
127
+ }, _cmd);
128
+ });
129
+ return group;
130
+ }
131
+ //# sourceMappingURL=review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/cli/review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { OutputFormat } from '../models/common';
2
+ /** Handler function signature */
3
+ export type CommandHandler = (db: import('better-sqlite3').Database, format: OutputFormat, args: Record<string, unknown>) => string | void;
4
+ /** Route definition */
5
+ export interface Route {
6
+ subcommand: string;
7
+ action: string;
8
+ handler: CommandHandler;
9
+ }
10
+ /** Router registry */
11
+ export declare class CommandRouter {
12
+ private routes;
13
+ /**
14
+ * Register a route.
15
+ */
16
+ register(subcommand: string, action: string, handler: CommandHandler): void;
17
+ /**
18
+ * Register multiple routes for a subcommand.
19
+ */
20
+ registerAll(subcommand: string, routes: Array<{
21
+ action: string;
22
+ handler: CommandHandler;
23
+ }>): void;
24
+ /**
25
+ * Find all actions for a subcommand.
26
+ */
27
+ getActions(subcommand: string): string[];
28
+ /**
29
+ * Find the handler for a subcommand and action.
30
+ * Returns null if not found.
31
+ */
32
+ resolve(subcommand: string, action: string): CommandHandler | null;
33
+ /**
34
+ * Get all registered subcommands.
35
+ */
36
+ getSubcommands(): string[];
37
+ }
38
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/cli/router.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,iCAAiC;AACjC,MAAM,MAAM,cAAc,GAAG,CAC3B,EAAE,EAAE,OAAO,gBAAgB,EAAE,QAAQ,EACrC,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC1B,MAAM,GAAG,IAAI,CAAC;AAEnB,uBAAuB;AACvB,MAAM,WAAW,KAAK;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,cAAc,CAAC;CACzB;AAED,sBAAsB;AACtB,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAe;IAE7B;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAI3E;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,cAAc,CAAA;KAAE,CAAC,GAAG,IAAI;IAMjG;;OAEG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE;IAMxC;;;OAGG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAKlE;;OAEG;IACH,cAAc,IAAI,MAAM,EAAE;CAG3B"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ // Command router
3
+ // Maps subcommand + action to the appropriate handler function
4
+ // Implements AD-0012: Single Entry Point with Declarative Routing
5
+ // + FS-SS-007-0001 (CLI entry point)
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.CommandRouter = void 0;
8
+ /** Router registry */
9
+ class CommandRouter {
10
+ routes = [];
11
+ /**
12
+ * Register a route.
13
+ */
14
+ register(subcommand, action, handler) {
15
+ this.routes.push({ subcommand, action, handler });
16
+ }
17
+ /**
18
+ * Register multiple routes for a subcommand.
19
+ */
20
+ registerAll(subcommand, routes) {
21
+ for (const route of routes) {
22
+ this.routes.push({ subcommand, action: route.action, handler: route.handler });
23
+ }
24
+ }
25
+ /**
26
+ * Find all actions for a subcommand.
27
+ */
28
+ getActions(subcommand) {
29
+ return this.routes
30
+ .filter(r => r.subcommand === subcommand)
31
+ .map(r => r.action);
32
+ }
33
+ /**
34
+ * Find the handler for a subcommand and action.
35
+ * Returns null if not found.
36
+ */
37
+ resolve(subcommand, action) {
38
+ const route = this.routes.find(r => r.subcommand === subcommand && r.action === action);
39
+ return route?.handler ?? null;
40
+ }
41
+ /**
42
+ * Get all registered subcommands.
43
+ */
44
+ getSubcommands() {
45
+ return [...new Set(this.routes.map(r => r.subcommand))];
46
+ }
47
+ }
48
+ exports.CommandRouter = CommandRouter;
49
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/cli/router.ts"],"names":[],"mappings":";AAAA,iBAAiB;AACjB,+DAA+D;AAC/D,kEAAkE;AAClE,qCAAqC;;;AAkBrC,sBAAsB;AACtB,MAAa,aAAa;IAChB,MAAM,GAAY,EAAE,CAAC;IAE7B;;OAEG;IACH,QAAQ,CAAC,UAAkB,EAAE,MAAc,EAAE,OAAuB;QAClE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,UAAkB,EAAE,MAA0D;QACxF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,UAAkB;QAC3B,OAAO,IAAI,CAAC,MAAM;aACf,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC;aACxC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,UAAkB,EAAE,MAAc;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QACxF,OAAO,KAAK,EAAE,OAAO,IAAI,IAAI,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;CACF;AA3CD,sCA2CC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createSchemaGroup(): Command;
3
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/cli/schema.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,wBAAgB,iBAAiB,IAAI,OAAO,CAsE3C"}