@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.
- package/LICENSE +21 -0
- package/README.md +159 -0
- package/dist/cli/audit.d.ts +3 -0
- package/dist/cli/audit.d.ts.map +1 -0
- package/dist/cli/audit.js +78 -0
- package/dist/cli/audit.js.map +1 -0
- package/dist/cli/doc.d.ts +3 -0
- package/dist/cli/doc.d.ts.map +1 -0
- package/dist/cli/doc.js +291 -0
- package/dist/cli/doc.js.map +1 -0
- package/dist/cli/entity.d.ts +3 -0
- package/dist/cli/entity.d.ts.map +1 -0
- package/dist/cli/entity.js +135 -0
- package/dist/cli/entity.js.map +1 -0
- package/dist/cli/format-selector.d.ts +30 -0
- package/dist/cli/format-selector.d.ts.map +1 -0
- package/dist/cli/format-selector.js +101 -0
- package/dist/cli/format-selector.js.map +1 -0
- package/dist/cli/formatters/audit-formatter.d.ts +33 -0
- package/dist/cli/formatters/audit-formatter.d.ts.map +1 -0
- package/dist/cli/formatters/audit-formatter.js +204 -0
- package/dist/cli/formatters/audit-formatter.js.map +1 -0
- package/dist/cli/formatters/json.d.ts +10 -0
- package/dist/cli/formatters/json.d.ts.map +1 -0
- package/dist/cli/formatters/json.js +31 -0
- package/dist/cli/formatters/json.js.map +1 -0
- package/dist/cli/formatters/markdown.d.ts +12 -0
- package/dist/cli/formatters/markdown.d.ts.map +1 -0
- package/dist/cli/formatters/markdown.js +341 -0
- package/dist/cli/formatters/markdown.js.map +1 -0
- package/dist/cli/formatters/quiet.d.ts +15 -0
- package/dist/cli/formatters/quiet.d.ts.map +1 -0
- package/dist/cli/formatters/quiet.js +75 -0
- package/dist/cli/formatters/quiet.js.map +1 -0
- package/dist/cli/formatters/table.d.ts +11 -0
- package/dist/cli/formatters/table.d.ts.map +1 -0
- package/dist/cli/formatters/table.js +726 -0
- package/dist/cli/formatters/table.js.map +1 -0
- package/dist/cli/graph.d.ts +3 -0
- package/dist/cli/graph.d.ts.map +1 -0
- package/dist/cli/graph.js +209 -0
- package/dist/cli/graph.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +144 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/lesson.d.ts +3 -0
- package/dist/cli/lesson.d.ts.map +1 -0
- package/dist/cli/lesson.js +85 -0
- package/dist/cli/lesson.js.map +1 -0
- package/dist/cli/project-resolver.d.ts +17 -0
- package/dist/cli/project-resolver.d.ts.map +1 -0
- package/dist/cli/project-resolver.js +25 -0
- package/dist/cli/project-resolver.js.map +1 -0
- package/dist/cli/project.d.ts +12 -0
- package/dist/cli/project.d.ts.map +1 -0
- package/dist/cli/project.js +169 -0
- package/dist/cli/project.js.map +1 -0
- package/dist/cli/relation.d.ts +3 -0
- package/dist/cli/relation.d.ts.map +1 -0
- package/dist/cli/relation.js +128 -0
- package/dist/cli/relation.js.map +1 -0
- package/dist/cli/review.d.ts +3 -0
- package/dist/cli/review.d.ts.map +1 -0
- package/dist/cli/review.js +131 -0
- package/dist/cli/review.js.map +1 -0
- package/dist/cli/router.d.ts +38 -0
- package/dist/cli/router.d.ts.map +1 -0
- package/dist/cli/router.js +49 -0
- package/dist/cli/router.js.map +1 -0
- package/dist/cli/schema.d.ts +3 -0
- package/dist/cli/schema.d.ts.map +1 -0
- package/dist/cli/schema.js +94 -0
- package/dist/cli/schema.js.map +1 -0
- package/dist/cli/sprint.d.ts +12 -0
- package/dist/cli/sprint.d.ts.map +1 -0
- package/dist/cli/sprint.js +200 -0
- package/dist/cli/sprint.js.map +1 -0
- package/dist/cli/task.d.ts +12 -0
- package/dist/cli/task.d.ts.map +1 -0
- package/dist/cli/task.js +252 -0
- package/dist/cli/task.js.map +1 -0
- package/dist/cli/test-report.d.ts +3 -0
- package/dist/cli/test-report.d.ts.map +1 -0
- package/dist/cli/test-report.js +134 -0
- package/dist/cli/test-report.js.map +1 -0
- package/dist/cli/validate.d.ts +8 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/cli/validate.js +86 -0
- package/dist/cli/validate.js.map +1 -0
- package/dist/config/config.d.ts +18 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +70 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/registry.d.ts +52 -0
- package/dist/config/registry.d.ts.map +1 -0
- package/dist/config/registry.js +193 -0
- package/dist/config/registry.js.map +1 -0
- package/dist/config/resolver.d.ts +26 -0
- package/dist/config/resolver.d.ts.map +1 -0
- package/dist/config/resolver.js +87 -0
- package/dist/config/resolver.js.map +1 -0
- package/dist/db/builtin-schema-constants.d.ts +109 -0
- package/dist/db/builtin-schema-constants.d.ts.map +1 -0
- package/dist/db/builtin-schema-constants.js +32 -0
- package/dist/db/builtin-schema-constants.js.map +1 -0
- package/dist/db/connection.d.ts +34 -0
- package/dist/db/connection.d.ts.map +1 -0
- package/dist/db/connection.js +140 -0
- package/dist/db/connection.js.map +1 -0
- package/dist/db/generated/schema-types.d.ts +134 -0
- package/dist/db/generated/schema-types.d.ts.map +1 -0
- package/dist/db/generated/schema-types.js +31 -0
- package/dist/db/generated/schema-types.js.map +1 -0
- package/dist/db/locks.d.ts +106 -0
- package/dist/db/locks.d.ts.map +1 -0
- package/dist/db/locks.js +211 -0
- package/dist/db/locks.js.map +1 -0
- package/dist/db/migration.d.ts +65 -0
- package/dist/db/migration.d.ts.map +1 -0
- package/dist/db/migration.js +233 -0
- package/dist/db/migration.js.map +1 -0
- package/dist/db/retry.d.ts +26 -0
- package/dist/db/retry.d.ts.map +1 -0
- package/dist/db/retry.js +71 -0
- package/dist/db/retry.js.map +1 -0
- package/dist/db/schema.d.ts +21 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +830 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/models/common.d.ts +27 -0
- package/dist/models/common.d.ts.map +1 -0
- package/dist/models/common.js +4 -0
- package/dist/models/common.js.map +1 -0
- package/dist/models/document.d.ts +89 -0
- package/dist/models/document.d.ts.map +1 -0
- package/dist/models/document.js +5 -0
- package/dist/models/document.js.map +1 -0
- package/dist/models/entity-model.d.ts +30 -0
- package/dist/models/entity-model.d.ts.map +1 -0
- package/dist/models/entity-model.js +99 -0
- package/dist/models/entity-model.js.map +1 -0
- package/dist/models/entity.d.ts +88 -0
- package/dist/models/entity.d.ts.map +1 -0
- package/dist/models/entity.js +5 -0
- package/dist/models/entity.js.map +1 -0
- package/dist/models/graph-schema.d.ts +43 -0
- package/dist/models/graph-schema.d.ts.map +1 -0
- package/dist/models/graph-schema.js +76 -0
- package/dist/models/graph-schema.js.map +1 -0
- package/dist/models/project.d.ts +49 -0
- package/dist/models/project.d.ts.map +1 -0
- package/dist/models/project.js +18 -0
- package/dist/models/project.js.map +1 -0
- package/dist/models/relation.d.ts +35 -0
- package/dist/models/relation.d.ts.map +1 -0
- package/dist/models/relation.js +212 -0
- package/dist/models/relation.js.map +1 -0
- package/dist/models/review.d.ts +86 -0
- package/dist/models/review.d.ts.map +1 -0
- package/dist/models/review.js +5 -0
- package/dist/models/review.js.map +1 -0
- package/dist/models/sprint.d.ts +38 -0
- package/dist/models/sprint.d.ts.map +1 -0
- package/dist/models/sprint.js +4 -0
- package/dist/models/sprint.js.map +1 -0
- package/dist/models/task.d.ts +75 -0
- package/dist/models/task.d.ts.map +1 -0
- package/dist/models/task.js +4 -0
- package/dist/models/task.js.map +1 -0
- package/dist/models/validation.d.ts +25 -0
- package/dist/models/validation.d.ts.map +1 -0
- package/dist/models/validation.js +4 -0
- package/dist/models/validation.js.map +1 -0
- package/dist/services/audit-check-service.d.ts +16 -0
- package/dist/services/audit-check-service.d.ts.map +1 -0
- package/dist/services/audit-check-service.js +137 -0
- package/dist/services/audit-check-service.js.map +1 -0
- package/dist/services/audit-checks/dangling-relations-check.d.ts +7 -0
- package/dist/services/audit-checks/dangling-relations-check.d.ts.map +1 -0
- package/dist/services/audit-checks/dangling-relations-check.js +52 -0
- package/dist/services/audit-checks/dangling-relations-check.js.map +1 -0
- package/dist/services/audit-checks/duplicate-ids-check.d.ts +4 -0
- package/dist/services/audit-checks/duplicate-ids-check.d.ts.map +1 -0
- package/dist/services/audit-checks/duplicate-ids-check.js +49 -0
- package/dist/services/audit-checks/duplicate-ids-check.js.map +1 -0
- package/dist/services/audit-checks/fix-engine.d.ts +24 -0
- package/dist/services/audit-checks/fix-engine.d.ts.map +1 -0
- package/dist/services/audit-checks/fix-engine.js +114 -0
- package/dist/services/audit-checks/fix-engine.js.map +1 -0
- package/dist/services/audit-checks/fr-nfr-to-fs-nfs-check.d.ts +9 -0
- package/dist/services/audit-checks/fr-nfr-to-fs-nfs-check.d.ts.map +1 -0
- package/dist/services/audit-checks/fr-nfr-to-fs-nfs-check.js +56 -0
- package/dist/services/audit-checks/fr-nfr-to-fs-nfs-check.js.map +1 -0
- package/dist/services/audit-checks/fs-nfs-to-sad-ad-qa-check.d.ts +10 -0
- package/dist/services/audit-checks/fs-nfs-to-sad-ad-qa-check.d.ts.map +1 -0
- package/dist/services/audit-checks/fs-nfs-to-sad-ad-qa-check.js +57 -0
- package/dist/services/audit-checks/fs-nfs-to-sad-ad-qa-check.js.map +1 -0
- package/dist/services/audit-checks/fs-nfs-to-ts-check.d.ts +9 -0
- package/dist/services/audit-checks/fs-nfs-to-ts-check.d.ts.map +1 -0
- package/dist/services/audit-checks/fs-nfs-to-ts-check.js +56 -0
- package/dist/services/audit-checks/fs-nfs-to-ts-check.js.map +1 -0
- package/dist/services/audit-checks/inverse-consistency-check.d.ts +7 -0
- package/dist/services/audit-checks/inverse-consistency-check.d.ts.map +1 -0
- package/dist/services/audit-checks/inverse-consistency-check.js +54 -0
- package/dist/services/audit-checks/inverse-consistency-check.js.map +1 -0
- package/dist/services/audit-checks/mapping-check.d.ts +4 -0
- package/dist/services/audit-checks/mapping-check.d.ts.map +1 -0
- package/dist/services/audit-checks/mapping-check.js +74 -0
- package/dist/services/audit-checks/mapping-check.js.map +1 -0
- package/dist/services/audit-checks/orphan-documents-check.d.ts +9 -0
- package/dist/services/audit-checks/orphan-documents-check.d.ts.map +1 -0
- package/dist/services/audit-checks/orphan-documents-check.js +54 -0
- package/dist/services/audit-checks/orphan-documents-check.js.map +1 -0
- package/dist/services/audit-checks/orphan-entities-check.d.ts +4 -0
- package/dist/services/audit-checks/orphan-entities-check.d.ts.map +1 -0
- package/dist/services/audit-checks/orphan-entities-check.js +39 -0
- package/dist/services/audit-checks/orphan-entities-check.js.map +1 -0
- package/dist/services/audit-checks/sad-ad-qa-tc-to-src-check.d.ts +9 -0
- package/dist/services/audit-checks/sad-ad-qa-tc-to-src-check.d.ts.map +1 -0
- package/dist/services/audit-checks/sad-ad-qa-tc-to-src-check.js +56 -0
- package/dist/services/audit-checks/sad-ad-qa-tc-to-src-check.js.map +1 -0
- package/dist/services/audit-checks/sprint-consistency-check.d.ts +4 -0
- package/dist/services/audit-checks/sprint-consistency-check.d.ts.map +1 -0
- package/dist/services/audit-checks/sprint-consistency-check.js +80 -0
- package/dist/services/audit-checks/sprint-consistency-check.js.map +1 -0
- package/dist/services/audit-checks/src-filesystem-only-check.d.ts +10 -0
- package/dist/services/audit-checks/src-filesystem-only-check.d.ts.map +1 -0
- package/dist/services/audit-checks/src-filesystem-only-check.js +106 -0
- package/dist/services/audit-checks/src-filesystem-only-check.js.map +1 -0
- package/dist/services/audit-checks/ts-to-tc-check.d.ts +10 -0
- package/dist/services/audit-checks/ts-to-tc-check.d.ts.map +1 -0
- package/dist/services/audit-checks/ts-to-tc-check.js +58 -0
- package/dist/services/audit-checks/ts-to-tc-check.js.map +1 -0
- package/dist/services/audit-checks/type-mismatch-check.d.ts +4 -0
- package/dist/services/audit-checks/type-mismatch-check.d.ts.map +1 -0
- package/dist/services/audit-checks/type-mismatch-check.js +55 -0
- package/dist/services/audit-checks/type-mismatch-check.js.map +1 -0
- package/dist/services/audit-checks/types.d.ts +66 -0
- package/dist/services/audit-checks/types.d.ts.map +1 -0
- package/dist/services/audit-checks/types.js +30 -0
- package/dist/services/audit-checks/types.js.map +1 -0
- package/dist/services/audit-checks/us-to-fr-nfr-check.d.ts +9 -0
- package/dist/services/audit-checks/us-to-fr-nfr-check.d.ts.map +1 -0
- package/dist/services/audit-checks/us-to-fr-nfr-check.js +56 -0
- package/dist/services/audit-checks/us-to-fr-nfr-check.js.map +1 -0
- package/dist/services/doc-entity-mapping.d.ts +19 -0
- package/dist/services/doc-entity-mapping.d.ts.map +1 -0
- package/dist/services/doc-entity-mapping.js +35 -0
- package/dist/services/doc-entity-mapping.js.map +1 -0
- package/dist/services/document-service.d.ts +58 -0
- package/dist/services/document-service.d.ts.map +1 -0
- package/dist/services/document-service.js +409 -0
- package/dist/services/document-service.js.map +1 -0
- package/dist/services/graph-export-service.d.ts +12 -0
- package/dist/services/graph-export-service.d.ts.map +1 -0
- package/dist/services/graph-export-service.js +112 -0
- package/dist/services/graph-export-service.js.map +1 -0
- package/dist/services/graph-service.d.ts +21 -0
- package/dist/services/graph-service.d.ts.map +1 -0
- package/dist/services/graph-service.js +49 -0
- package/dist/services/graph-service.js.map +1 -0
- package/dist/services/graph-validation-service.d.ts +13 -0
- package/dist/services/graph-validation-service.d.ts.map +1 -0
- package/dist/services/graph-validation-service.js +171 -0
- package/dist/services/graph-validation-service.js.map +1 -0
- package/dist/services/project.d.ts +80 -0
- package/dist/services/project.d.ts.map +1 -0
- package/dist/services/project.js +256 -0
- package/dist/services/project.js.map +1 -0
- package/dist/services/review-service.d.ts +81 -0
- package/dist/services/review-service.d.ts.map +1 -0
- package/dist/services/review-service.js +242 -0
- package/dist/services/review-service.js.map +1 -0
- package/dist/services/schema-migration-service.d.ts +44 -0
- package/dist/services/schema-migration-service.d.ts.map +1 -0
- package/dist/services/schema-migration-service.js +894 -0
- package/dist/services/schema-migration-service.js.map +1 -0
- package/dist/services/sprint.d.ts +71 -0
- package/dist/services/sprint.d.ts.map +1 -0
- package/dist/services/sprint.js +238 -0
- package/dist/services/sprint.js.map +1 -0
- package/dist/services/stage-validator.d.ts +36 -0
- package/dist/services/stage-validator.d.ts.map +1 -0
- package/dist/services/stage-validator.js +78 -0
- package/dist/services/stage-validator.js.map +1 -0
- package/dist/services/task.d.ts +75 -0
- package/dist/services/task.d.ts.map +1 -0
- package/dist/services/task.js +487 -0
- package/dist/services/task.js.map +1 -0
- package/dist/services/validation.d.ts +24 -0
- package/dist/services/validation.d.ts.map +1 -0
- package/dist/services/validation.js +53 -0
- package/dist/services/validation.js.map +1 -0
- package/dist/state-machines/sprint-state.d.ts +25 -0
- package/dist/state-machines/sprint-state.d.ts.map +1 -0
- package/dist/state-machines/sprint-state.js +64 -0
- package/dist/state-machines/sprint-state.js.map +1 -0
- package/dist/state-machines/task-state.d.ts +31 -0
- package/dist/state-machines/task-state.d.ts.map +1 -0
- package/dist/state-machines/task-state.js +83 -0
- package/dist/state-machines/task-state.js.map +1 -0
- package/dist/utils/errors.d.ts +673 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +1447 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/format.d.ts +52 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +65 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/validators/board-integrity.d.ts +25 -0
- package/dist/validators/board-integrity.d.ts.map +1 -0
- package/dist/validators/board-integrity.js +102 -0
- package/dist/validators/board-integrity.js.map +1 -0
- package/dist/validators/board-shape.d.ts +13 -0
- package/dist/validators/board-shape.d.ts.map +1 -0
- package/dist/validators/board-shape.js +74 -0
- package/dist/validators/board-shape.js.map +1 -0
- package/dist/validators/owner-validator.d.ts +30 -0
- package/dist/validators/owner-validator.d.ts.map +1 -0
- package/dist/validators/owner-validator.js +70 -0
- package/dist/validators/owner-validator.js.map +1 -0
- package/dist/validators/spawn-legality.d.ts +19 -0
- package/dist/validators/spawn-legality.d.ts.map +1 -0
- package/dist/validators/spawn-legality.js +77 -0
- package/dist/validators/spawn-legality.js.map +1 -0
- package/dist/validators/state-field-checker.d.ts +8 -0
- package/dist/validators/state-field-checker.d.ts.map +1 -0
- package/dist/validators/state-field-checker.js +47 -0
- package/dist/validators/state-field-checker.js.map +1 -0
- package/dist/validators/state-field-recorder.d.ts +39 -0
- package/dist/validators/state-field-recorder.d.ts.map +1 -0
- package/dist/validators/state-field-recorder.js +62 -0
- package/dist/validators/state-field-recorder.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|