@deftai/directive 0.55.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.
- package/dist/bin.d.ts +3 -0
- package/dist/bin.js +5 -0
- package/dist/branch-parity.d.ts +47 -0
- package/dist/branch-parity.js +263 -0
- package/dist/cache-parity.d.ts +36 -0
- package/dist/cache-parity.js +165 -0
- package/dist/cache.d.ts +4 -0
- package/dist/cache.js +10 -0
- package/dist/capacity-backfill.d.ts +3 -0
- package/dist/capacity-backfill.js +9 -0
- package/dist/capacity-show.d.ts +3 -0
- package/dist/capacity-show.js +9 -0
- package/dist/check.d.ts +10 -0
- package/dist/check.js +60 -0
- package/dist/cli-router/index.d.ts +8 -0
- package/dist/cli-router/index.js +37 -0
- package/dist/cli-router/route-argv.d.ts +32 -0
- package/dist/cli-router/route-argv.js +226 -0
- package/dist/codebase-default-extractor.d.ts +3 -0
- package/dist/codebase-default-extractor.js +9 -0
- package/dist/codebase-map-fresh.d.ts +3 -0
- package/dist/codebase-map-fresh.js +9 -0
- package/dist/codebase-map.d.ts +3 -0
- package/dist/codebase-map.js +9 -0
- package/dist/codebase-parity.d.ts +30 -0
- package/dist/codebase-parity.js +294 -0
- package/dist/codebase-projection-registry.d.ts +3 -0
- package/dist/codebase-projection-registry.js +9 -0
- package/dist/codebase-provider.d.ts +3 -0
- package/dist/codebase-provider.js +9 -0
- package/dist/content-validate-cli/validate-links.d.ts +11 -0
- package/dist/content-validate-cli/validate-links.js +37 -0
- package/dist/content-validate-cli/validate-strategy-output.d.ts +13 -0
- package/dist/content-validate-cli/validate-strategy-output.js +56 -0
- package/dist/content-validate-cli/verify-capacity.d.ts +12 -0
- package/dist/content-validate-cli/verify-capacity.js +54 -0
- package/dist/dispatch.d.ts +26 -0
- package/dist/dispatch.js +569 -0
- package/dist/doctor-parity.d.ts +38 -0
- package/dist/doctor-parity.js +151 -0
- package/dist/doctor.d.ts +3 -0
- package/dist/doctor.js +10 -0
- package/dist/gates-cli/_helpers.d.ts +18 -0
- package/dist/gates-cli/_helpers.js +71 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +15 -0
- package/dist/init-cli/constants.d.ts +5 -0
- package/dist/init-cli/constants.js +5 -0
- package/dist/init-cli/init.d.ts +3 -0
- package/dist/init-cli/init.js +11 -0
- package/dist/init-cli/resolve-binary.d.ts +34 -0
- package/dist/init-cli/resolve-binary.js +78 -0
- package/dist/init-cli/run-deft-install.d.ts +23 -0
- package/dist/init-cli/run-deft-install.js +71 -0
- package/dist/init-cli/update.d.ts +3 -0
- package/dist/init-cli/update.js +11 -0
- package/dist/install-cli/coverage-map.d.ts +14 -0
- package/dist/install-cli/coverage-map.js +111 -0
- package/dist/intake-parity.d.ts +30 -0
- package/dist/intake-parity.js +203 -0
- package/dist/lifecycle-cli/coverage-map.d.ts +16 -0
- package/dist/lifecycle-cli/coverage-map.js +254 -0
- package/dist/lifecycle-cli/helpers.d.ts +8 -0
- package/dist/lifecycle-cli/helpers.js +20 -0
- package/dist/lifecycle-packs-parity.d.ts +30 -0
- package/dist/lifecycle-packs-parity.js +377 -0
- package/dist/orchestration-cli/coverage-map.d.ts +21 -0
- package/dist/orchestration-cli/coverage-map.js +225 -0
- package/dist/orchestration-cli/helpers.d.ts +11 -0
- package/dist/orchestration-cli/helpers.js +35 -0
- package/dist/orchestration-parity.d.ts +38 -0
- package/dist/orchestration-parity.js +364 -0
- package/dist/parity.d.ts +36 -0
- package/dist/parity.js +176 -0
- package/dist/platform-parity.d.ts +26 -0
- package/dist/platform-parity.js +309 -0
- package/dist/policy-parity.d.ts +35 -0
- package/dist/policy-parity.js +214 -0
- package/dist/policy.d.ts +27 -0
- package/dist/policy.js +316 -0
- package/dist/pr-closing-keywords-parity.d.ts +45 -0
- package/dist/pr-closing-keywords-parity.js +259 -0
- package/dist/pr-closing-keywords.d.ts +3 -0
- package/dist/pr-closing-keywords.js +10 -0
- package/dist/pr-merge-readiness-parity.d.ts +44 -0
- package/dist/pr-merge-readiness-parity.js +296 -0
- package/dist/pr-merge-readiness.d.ts +3 -0
- package/dist/pr-merge-readiness.js +10 -0
- package/dist/pr-monitor-parity.d.ts +44 -0
- package/dist/pr-monitor-parity.js +283 -0
- package/dist/pr-monitor.d.ts +3 -0
- package/dist/pr-monitor.js +10 -0
- package/dist/pr-protected-issues-parity.d.ts +41 -0
- package/dist/pr-protected-issues-parity.js +220 -0
- package/dist/pr-protected-issues.d.ts +3 -0
- package/dist/pr-protected-issues.js +10 -0
- package/dist/pr-wait-mergeable-parity.d.ts +45 -0
- package/dist/pr-wait-mergeable-parity.js +340 -0
- package/dist/pr-wait-mergeable.d.ts +3 -0
- package/dist/pr-wait-mergeable.js +10 -0
- package/dist/preflight-cache.d.ts +16 -0
- package/dist/preflight-cache.js +106 -0
- package/dist/preflight-gh.d.ts +12 -0
- package/dist/preflight-gh.js +188 -0
- package/dist/probe-session.d.ts +3 -0
- package/dist/probe-session.js +10 -0
- package/dist/release-e2e-parity.d.ts +31 -0
- package/dist/release-e2e-parity.js +114 -0
- package/dist/release-e2e.d.ts +3 -0
- package/dist/release-e2e.js +10 -0
- package/dist/release-parity.d.ts +40 -0
- package/dist/release-parity.js +223 -0
- package/dist/release-publish-parity.d.ts +36 -0
- package/dist/release-publish-parity.js +138 -0
- package/dist/release-publish.d.ts +3 -0
- package/dist/release-publish.js +10 -0
- package/dist/release-rollback-parity.d.ts +37 -0
- package/dist/release-rollback-parity.js +161 -0
- package/dist/release-rollback.d.ts +3 -0
- package/dist/release-rollback.js +10 -0
- package/dist/release.d.ts +3 -0
- package/dist/release.js +10 -0
- package/dist/render-cli/deft-ts-runner.d.ts +20 -0
- package/dist/render-cli/deft-ts-runner.js +35 -0
- package/dist/render-cli/prd-render-cli.d.ts +2 -0
- package/dist/render-cli/prd-render-cli.js +7 -0
- package/dist/render-cli/project-render-cli.d.ts +2 -0
- package/dist/render-cli/project-render-cli.js +6 -0
- package/dist/render-cli/spec-render-cli.d.ts +2 -0
- package/dist/render-cli/spec-render-cli.js +6 -0
- package/dist/render-cli/spec-validate-cli.d.ts +2 -0
- package/dist/render-cli/spec-validate-cli.js +6 -0
- package/dist/render-parity.d.ts +35 -0
- package/dist/render-parity.js +383 -0
- package/dist/scm-parity.d.ts +39 -0
- package/dist/scm-parity.js +181 -0
- package/dist/scope-lifecycle-parity.d.ts +35 -0
- package/dist/scope-lifecycle-parity.js +177 -0
- package/dist/scope-lifecycle.d.ts +4 -0
- package/dist/scope-lifecycle.js +29 -0
- package/dist/session-parity.d.ts +39 -0
- package/dist/session-parity.js +260 -0
- package/dist/slice-parity.d.ts +36 -0
- package/dist/slice-parity.js +304 -0
- package/dist/slice.d.ts +4 -0
- package/dist/slice.js +29 -0
- package/dist/story-ready-parity.d.ts +49 -0
- package/dist/story-ready-parity.js +254 -0
- package/dist/subagent-monitor.d.ts +3 -0
- package/dist/subagent-monitor.js +10 -0
- package/dist/swarm-parity.d.ts +28 -0
- package/dist/swarm-parity.js +326 -0
- package/dist/toolchain-check.d.ts +3 -0
- package/dist/toolchain-check.js +14 -0
- package/dist/triage-actions-parity.d.ts +33 -0
- package/dist/triage-actions-parity.js +201 -0
- package/dist/triage-actions.d.ts +17 -0
- package/dist/triage-actions.js +144 -0
- package/dist/triage-aux-a-parity.d.ts +35 -0
- package/dist/triage-aux-a-parity.js +172 -0
- package/dist/triage-aux-b-parity.d.ts +32 -0
- package/dist/triage-aux-b-parity.js +308 -0
- package/dist/triage-bootstrap-parity.d.ts +44 -0
- package/dist/triage-bootstrap-parity.js +226 -0
- package/dist/triage-bootstrap.d.ts +24 -0
- package/dist/triage-bootstrap.js +172 -0
- package/dist/triage-bulk.d.ts +17 -0
- package/dist/triage-bulk.js +154 -0
- package/dist/triage-classify-parity.d.ts +40 -0
- package/dist/triage-classify-parity.js +227 -0
- package/dist/triage-classify.d.ts +13 -0
- package/dist/triage-classify.js +76 -0
- package/dist/triage-help.d.ts +3 -0
- package/dist/triage-help.js +10 -0
- package/dist/triage-queue-parity.d.ts +59 -0
- package/dist/triage-queue-parity.js +363 -0
- package/dist/triage-queue.d.ts +17 -0
- package/dist/triage-queue.js +174 -0
- package/dist/triage-reconcile.d.ts +11 -0
- package/dist/triage-reconcile.js +76 -0
- package/dist/triage-refresh.d.ts +7 -0
- package/dist/triage-refresh.js +37 -0
- package/dist/triage-scope-drift.d.ts +12 -0
- package/dist/triage-scope-drift.js +117 -0
- package/dist/triage-scope-parity.d.ts +34 -0
- package/dist/triage-scope-parity.js +218 -0
- package/dist/triage-scope.d.ts +4 -0
- package/dist/triage-scope.js +29 -0
- package/dist/triage-smoketest.d.ts +3 -0
- package/dist/triage-smoketest.js +43 -0
- package/dist/triage-subscribe.d.ts +15 -0
- package/dist/triage-subscribe.js +157 -0
- package/dist/triage-summary-parity.d.ts +50 -0
- package/dist/triage-summary-parity.js +306 -0
- package/dist/triage-summary.d.ts +14 -0
- package/dist/triage-summary.js +77 -0
- package/dist/triage-welcome.d.ts +12 -0
- package/dist/triage-welcome.js +78 -0
- package/dist/ts-check-lane.d.ts +9 -0
- package/dist/ts-check-lane.js +49 -0
- package/dist/validate-content-parity.d.ts +33 -0
- package/dist/validate-content-parity.js +356 -0
- package/dist/vbrief-activate-parity.d.ts +39 -0
- package/dist/vbrief-activate-parity.js +216 -0
- package/dist/vbrief-activate.d.ts +3 -0
- package/dist/vbrief-activate.js +7 -0
- package/dist/vbrief-build-parity.d.ts +28 -0
- package/dist/vbrief-build-parity.js +399 -0
- package/dist/vbrief-build.d.ts +3 -0
- package/dist/vbrief-build.js +8 -0
- package/dist/vbrief-preflight-parity.d.ts +34 -0
- package/dist/vbrief-preflight-parity.js +163 -0
- package/dist/vbrief-preflight.d.ts +12 -0
- package/dist/vbrief-preflight.js +58 -0
- package/dist/vbrief-reconcile-parity.d.ts +22 -0
- package/dist/vbrief-reconcile-parity.js +600 -0
- package/dist/vbrief-reconcile.d.ts +3 -0
- package/dist/vbrief-reconcile.js +7 -0
- package/dist/vbrief-validate-parity.d.ts +27 -0
- package/dist/vbrief-validate-parity.js +122 -0
- package/dist/vbrief-validate.d.ts +3 -0
- package/dist/vbrief-validate.js +8 -0
- package/dist/vbrief-validation-parity.d.ts +28 -0
- package/dist/vbrief-validation-parity.js +645 -0
- package/dist/vbrief-validation.d.ts +3 -0
- package/dist/vbrief-validation.js +8 -0
- package/dist/verify-branch.d.ts +14 -0
- package/dist/verify-branch.js +81 -0
- package/dist/verify-encoding.d.ts +15 -0
- package/dist/verify-encoding.js +86 -0
- package/dist/verify-env-parity.d.ts +28 -0
- package/dist/verify-env-parity.js +272 -0
- package/dist/verify-hooks-installed.d.ts +10 -0
- package/dist/verify-hooks-installed.js +48 -0
- package/dist/verify-investigation.d.ts +3 -0
- package/dist/verify-investigation.js +10 -0
- package/dist/verify-judgment-gates.d.ts +3 -0
- package/dist/verify-judgment-gates.js +10 -0
- package/dist/verify-no-task-runtime.d.ts +3 -0
- package/dist/verify-no-task-runtime.js +16 -0
- package/dist/verify-session-ritual.d.ts +13 -0
- package/dist/verify-session-ritual.js +78 -0
- package/dist/verify-source-cli/rule-ownership-lint.d.ts +12 -0
- package/dist/verify-source-cli/rule-ownership-lint.js +61 -0
- package/dist/verify-source-cli/verify-content-manifest.d.ts +12 -0
- package/dist/verify-source-cli/verify-content-manifest.js +61 -0
- package/dist/verify-source-cli/verify-scm-boundary.d.ts +13 -0
- package/dist/verify-source-cli/verify-scm-boundary.js +66 -0
- package/dist/verify-source-cli/verify-stubs.d.ts +11 -0
- package/dist/verify-source-cli/verify-stubs.js +27 -0
- package/dist/verify-source-parity.d.ts +26 -0
- package/dist/verify-source-parity.js +178 -0
- package/dist/verify-story-ready.d.ts +16 -0
- package/dist/verify-story-ready.js +138 -0
- package/dist/verify-tools.d.ts +13 -0
- package/dist/verify-tools.js +67 -0
- package/dist/verify-wip-cap.d.ts +13 -0
- package/dist/verify-wip-cap.js +62 -0
- package/dist/wip-cap-parity.d.ts +39 -0
- package/dist/wip-cap-parity.js +209 -0
- package/package.json +50 -0
package/dist/dispatch.js
ADDED
|
@@ -0,0 +1,569 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified `directive <verb> [args]` dispatcher (#1828 s0).
|
|
3
|
+
* Routes to ported command modules in packages/cli and packages/core.
|
|
4
|
+
*/
|
|
5
|
+
import { execFileSync } from "node:child_process";
|
|
6
|
+
import { join, resolve } from "node:path";
|
|
7
|
+
import { engineInfo } from "@deftai/directive-core";
|
|
8
|
+
const HANDLER_KEYS = [
|
|
9
|
+
"run",
|
|
10
|
+
"main",
|
|
11
|
+
"mainEntry",
|
|
12
|
+
"launchMain",
|
|
13
|
+
"completeCohortMain",
|
|
14
|
+
"readinessMain",
|
|
15
|
+
"verifyReviewCleanMain",
|
|
16
|
+
"worktreesMain",
|
|
17
|
+
];
|
|
18
|
+
/** CLI modules in packages/cli/src (excluding parity harnesses and bin/index). */
|
|
19
|
+
export const CLI_MODULE_VERBS = [
|
|
20
|
+
"cache",
|
|
21
|
+
"check",
|
|
22
|
+
"capacity-backfill",
|
|
23
|
+
"capacity-show",
|
|
24
|
+
"codebase-default-extractor",
|
|
25
|
+
"codebase-map",
|
|
26
|
+
"codebase-map-fresh",
|
|
27
|
+
"codebase-projection-registry",
|
|
28
|
+
"codebase-provider",
|
|
29
|
+
"doctor",
|
|
30
|
+
"parity",
|
|
31
|
+
"policy",
|
|
32
|
+
"pr-closing-keywords",
|
|
33
|
+
"pr-merge-readiness",
|
|
34
|
+
"pr-monitor",
|
|
35
|
+
"pr-protected-issues",
|
|
36
|
+
"pr-wait-mergeable",
|
|
37
|
+
"preflight-cache",
|
|
38
|
+
"preflight-gh",
|
|
39
|
+
"probe-session",
|
|
40
|
+
"release",
|
|
41
|
+
"release-e2e",
|
|
42
|
+
"release-publish",
|
|
43
|
+
"release-rollback",
|
|
44
|
+
"scope-lifecycle",
|
|
45
|
+
"slice",
|
|
46
|
+
"subagent-monitor",
|
|
47
|
+
"toolchain-check",
|
|
48
|
+
"triage-actions",
|
|
49
|
+
"triage-bootstrap",
|
|
50
|
+
"triage-bulk",
|
|
51
|
+
"triage-classify",
|
|
52
|
+
"triage-help",
|
|
53
|
+
"triage-queue",
|
|
54
|
+
"triage-reconcile",
|
|
55
|
+
"triage-refresh",
|
|
56
|
+
"triage-scope",
|
|
57
|
+
"triage-scope-drift",
|
|
58
|
+
"triage-smoketest",
|
|
59
|
+
"triage-subscribe",
|
|
60
|
+
"triage-summary",
|
|
61
|
+
"triage-welcome",
|
|
62
|
+
"ts-check-lane",
|
|
63
|
+
"vbrief-activate",
|
|
64
|
+
"vbrief-build",
|
|
65
|
+
"vbrief-preflight",
|
|
66
|
+
"vbrief-reconcile",
|
|
67
|
+
"vbrief-validate",
|
|
68
|
+
"vbrief-validation",
|
|
69
|
+
"verify-branch",
|
|
70
|
+
"verify-encoding",
|
|
71
|
+
"verify-hooks-installed",
|
|
72
|
+
"verify-investigation",
|
|
73
|
+
"verify-judgment-gates",
|
|
74
|
+
"verify-no-task-runtime",
|
|
75
|
+
"validate-links",
|
|
76
|
+
"validate-strategy-output",
|
|
77
|
+
"verify-capacity",
|
|
78
|
+
"verify-content-manifest",
|
|
79
|
+
"verify-scm-boundary",
|
|
80
|
+
"verify-session-ritual",
|
|
81
|
+
"verify-stubs",
|
|
82
|
+
"rule-ownership-lint",
|
|
83
|
+
"verify-story-ready",
|
|
84
|
+
"verify-tools",
|
|
85
|
+
"verify-wip-cap",
|
|
86
|
+
];
|
|
87
|
+
/** Core-only CLI entrypoints without a packages/cli wrapper. */
|
|
88
|
+
export const CORE_MODULE_VERBS = [
|
|
89
|
+
"scm",
|
|
90
|
+
"github-auth-modes",
|
|
91
|
+
"github-body",
|
|
92
|
+
"issue-emit",
|
|
93
|
+
"issue-ingest",
|
|
94
|
+
"reconcile-issues",
|
|
95
|
+
"swarm-launch",
|
|
96
|
+
"swarm-complete-cohort",
|
|
97
|
+
"swarm-readiness",
|
|
98
|
+
"swarm-routing-verify",
|
|
99
|
+
"swarm-routing-set",
|
|
100
|
+
"swarm-verify-review-clean",
|
|
101
|
+
"swarm-worktrees",
|
|
102
|
+
"framework-commands",
|
|
103
|
+
"pack-render",
|
|
104
|
+
"packs-slice",
|
|
105
|
+
"prd-render",
|
|
106
|
+
"project-render",
|
|
107
|
+
"roadmap-render",
|
|
108
|
+
"spec-render",
|
|
109
|
+
"spec-validate",
|
|
110
|
+
"code-structure-validate",
|
|
111
|
+
"pack-migrate-skills",
|
|
112
|
+
"pack-migrate-rules",
|
|
113
|
+
"pack-migrate-strategies",
|
|
114
|
+
"pack-migrate-patterns",
|
|
115
|
+
"pack-migrate-swarm-spec",
|
|
116
|
+
"policy-set",
|
|
117
|
+
"scope-undo",
|
|
118
|
+
"scope-demote",
|
|
119
|
+
"scope-decompose",
|
|
120
|
+
"changelog-resolve-unreleased",
|
|
121
|
+
"architecture-preflight-sor",
|
|
122
|
+
];
|
|
123
|
+
/** Task-style aliases (framework_commands / Taskfile names). */
|
|
124
|
+
export const VERB_ALIASES = {
|
|
125
|
+
"verify:encoding": "verify-encoding",
|
|
126
|
+
"verify:branch": "verify-branch",
|
|
127
|
+
"verify:wip-cap": "verify-wip-cap",
|
|
128
|
+
"verify:hooks-installed": "verify-hooks-installed",
|
|
129
|
+
"verify:no-task-runtime": "verify-no-task-runtime",
|
|
130
|
+
"vbrief:validate": "vbrief-validate",
|
|
131
|
+
"vbrief:preflight": "vbrief-preflight",
|
|
132
|
+
"vbrief:activate": "vbrief-activate",
|
|
133
|
+
"verify:story-ready": "verify-story-ready",
|
|
134
|
+
"verify:tools": "verify-tools",
|
|
135
|
+
"verify:investigation": "verify-investigation",
|
|
136
|
+
"verify:judgment-gates": "verify-judgment-gates",
|
|
137
|
+
"verify:stubs": "verify-stubs",
|
|
138
|
+
"verify:links": "validate-links",
|
|
139
|
+
"validate:links": "validate-links",
|
|
140
|
+
"verify:rule-ownership": "rule-ownership-lint",
|
|
141
|
+
"rule:ownership-lint": "rule-ownership-lint",
|
|
142
|
+
"verify:content-manifest": "verify-content-manifest",
|
|
143
|
+
"verify:scm-boundary": "verify-scm-boundary",
|
|
144
|
+
"verify:capacity": "verify-capacity",
|
|
145
|
+
"verify:session-ritual": "verify-session-ritual",
|
|
146
|
+
"verify-strategy-output": "validate-strategy-output",
|
|
147
|
+
"validate:strategy-output": "validate-strategy-output",
|
|
148
|
+
"verify:codebase-map-fresh": "codebase-map-fresh",
|
|
149
|
+
"codebase:map": "codebase-map",
|
|
150
|
+
"triage:welcome": "triage-welcome",
|
|
151
|
+
"triage:bootstrap": "triage-bootstrap",
|
|
152
|
+
"triage:summary": "triage-summary",
|
|
153
|
+
"triage:queue": "triage-queue",
|
|
154
|
+
"triage:scope": "triage-scope",
|
|
155
|
+
"triage:accept": "triage-actions",
|
|
156
|
+
"triage:status": "triage-actions",
|
|
157
|
+
"session:start": "framework-commands",
|
|
158
|
+
"toolchain:check": "toolchain-check",
|
|
159
|
+
"ts:check-lane": "ts-check-lane",
|
|
160
|
+
"spec:validate": "spec-validate",
|
|
161
|
+
"spec:render": "spec-render",
|
|
162
|
+
"prd:render": "prd-render",
|
|
163
|
+
"project:render": "project-render",
|
|
164
|
+
doctor: "doctor",
|
|
165
|
+
build: "framework-commands",
|
|
166
|
+
};
|
|
167
|
+
/** CLI modules living under verify-source-cli/ or content-validate-cli/ subdirs. */
|
|
168
|
+
const SUBDIR_CLI_STEMS = {
|
|
169
|
+
"verify-stubs": "verify-source-cli/verify-stubs",
|
|
170
|
+
"rule-ownership-lint": "verify-source-cli/rule-ownership-lint",
|
|
171
|
+
"verify-content-manifest": "verify-source-cli/verify-content-manifest",
|
|
172
|
+
"verify-scm-boundary": "verify-source-cli/verify-scm-boundary",
|
|
173
|
+
"validate-links": "content-validate-cli/validate-links",
|
|
174
|
+
"verify-capacity": "content-validate-cli/verify-capacity",
|
|
175
|
+
"validate-strategy-output": "content-validate-cli/validate-strategy-output",
|
|
176
|
+
};
|
|
177
|
+
const WRAPPER_CLI_STEMS = new Set([
|
|
178
|
+
"capacity-backfill",
|
|
179
|
+
"capacity-show",
|
|
180
|
+
"codebase-default-extractor",
|
|
181
|
+
"codebase-map",
|
|
182
|
+
"codebase-map-fresh",
|
|
183
|
+
"codebase-projection-registry",
|
|
184
|
+
"codebase-provider",
|
|
185
|
+
"vbrief-activate",
|
|
186
|
+
"vbrief-build",
|
|
187
|
+
"vbrief-reconcile",
|
|
188
|
+
"vbrief-validate",
|
|
189
|
+
"vbrief-validation",
|
|
190
|
+
]);
|
|
191
|
+
function emitCliResult(result, io) {
|
|
192
|
+
if (result.stdout)
|
|
193
|
+
io.writeOut(result.stdout);
|
|
194
|
+
if (result.stderr)
|
|
195
|
+
io.writeErr(result.stderr);
|
|
196
|
+
return result.exitCode;
|
|
197
|
+
}
|
|
198
|
+
function resolveHandler(mod) {
|
|
199
|
+
for (const key of HANDLER_KEYS) {
|
|
200
|
+
const fn = mod[key];
|
|
201
|
+
if (typeof fn === "function") {
|
|
202
|
+
return fn;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
async function loadWrapperCliHandler(stem, io) {
|
|
208
|
+
switch (stem) {
|
|
209
|
+
case "capacity-backfill": {
|
|
210
|
+
const { runCapacityBackfillCli } = await import("@deftai/directive-core/capacity");
|
|
211
|
+
return async (argv) => emitCliResult(await runCapacityBackfillCli(argv), io);
|
|
212
|
+
}
|
|
213
|
+
case "capacity-show": {
|
|
214
|
+
const { runCapacityShowCli } = await import("@deftai/directive-core/capacity");
|
|
215
|
+
return (argv) => emitCliResult(runCapacityShowCli(argv), io);
|
|
216
|
+
}
|
|
217
|
+
case "codebase-default-extractor": {
|
|
218
|
+
const { runDefaultExtractorCli } = await import("@deftai/directive-core/codebase");
|
|
219
|
+
return (argv) => emitCliResult(runDefaultExtractorCli(argv), io);
|
|
220
|
+
}
|
|
221
|
+
case "codebase-map": {
|
|
222
|
+
const { runCodebaseMapCli } = await import("@deftai/directive-core/codebase");
|
|
223
|
+
return (argv) => emitCliResult(runCodebaseMapCli(argv), io);
|
|
224
|
+
}
|
|
225
|
+
case "codebase-map-fresh": {
|
|
226
|
+
const { runCodebaseMapFreshCli } = await import("@deftai/directive-core/codebase");
|
|
227
|
+
return (argv) => emitCliResult(runCodebaseMapFreshCli(argv), io);
|
|
228
|
+
}
|
|
229
|
+
case "codebase-projection-registry": {
|
|
230
|
+
const { runProjectionRegistryCli } = await import("@deftai/directive-core/codebase");
|
|
231
|
+
return (argv) => emitCliResult(runProjectionRegistryCli(argv), io);
|
|
232
|
+
}
|
|
233
|
+
case "codebase-provider": {
|
|
234
|
+
const { runProviderCli } = await import("@deftai/directive-core/codebase");
|
|
235
|
+
return (argv) => emitCliResult(runProviderCli(argv), io);
|
|
236
|
+
}
|
|
237
|
+
case "vbrief-activate": {
|
|
238
|
+
const { run } = await import("@deftai/directive-core/vbrief-activate");
|
|
239
|
+
return run;
|
|
240
|
+
}
|
|
241
|
+
case "vbrief-build": {
|
|
242
|
+
const { cmdVbriefBuild } = await import("@deftai/directive-core/vbrief-build");
|
|
243
|
+
return cmdVbriefBuild;
|
|
244
|
+
}
|
|
245
|
+
case "vbrief-reconcile": {
|
|
246
|
+
const { cmdVbriefReconcile } = await import("@deftai/directive-core/vbrief-reconcile");
|
|
247
|
+
return cmdVbriefReconcile;
|
|
248
|
+
}
|
|
249
|
+
case "vbrief-validate": {
|
|
250
|
+
const { cmdVbriefValidate } = await import("@deftai/directive-core/vbrief-validate");
|
|
251
|
+
return cmdVbriefValidate;
|
|
252
|
+
}
|
|
253
|
+
case "vbrief-validation": {
|
|
254
|
+
const { cmdVbriefValidation } = await import("@deftai/directive-core/vbrief-validation");
|
|
255
|
+
return cmdVbriefValidation;
|
|
256
|
+
}
|
|
257
|
+
default:
|
|
258
|
+
throw new Error(`no wrapper handler for ${stem}`);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
async function loadCliModuleHandler(stem, io) {
|
|
262
|
+
if (WRAPPER_CLI_STEMS.has(stem)) {
|
|
263
|
+
return loadWrapperCliHandler(stem, io);
|
|
264
|
+
}
|
|
265
|
+
const subdir = SUBDIR_CLI_STEMS[stem];
|
|
266
|
+
const modulePath = subdir !== undefined ? `./${subdir}.js` : `./${stem}.js`;
|
|
267
|
+
const mod = (await import(modulePath));
|
|
268
|
+
const handler = resolveHandler(mod);
|
|
269
|
+
if (handler === null) {
|
|
270
|
+
throw new Error(`module ${stem} has no command handler export`);
|
|
271
|
+
}
|
|
272
|
+
return handler;
|
|
273
|
+
}
|
|
274
|
+
function resolveDeftRoot() {
|
|
275
|
+
if (process.env.DEFT_ROOT !== undefined && process.env.DEFT_ROOT.length > 0) {
|
|
276
|
+
return resolve(process.env.DEFT_ROOT);
|
|
277
|
+
}
|
|
278
|
+
return resolve(import.meta.dirname, "..", "..", "..");
|
|
279
|
+
}
|
|
280
|
+
function parseCodeStructureArgs(argv) {
|
|
281
|
+
let projectRoot = ".";
|
|
282
|
+
const paths = [];
|
|
283
|
+
let json = false;
|
|
284
|
+
let strict = false;
|
|
285
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
286
|
+
const arg = argv[i];
|
|
287
|
+
if (arg === "--project-root") {
|
|
288
|
+
const v = argv[i + 1];
|
|
289
|
+
if (v === undefined)
|
|
290
|
+
return { projectRoot, paths, json, strict, error: "missing --project-root value" };
|
|
291
|
+
projectRoot = v;
|
|
292
|
+
i += 1;
|
|
293
|
+
}
|
|
294
|
+
else if (arg?.startsWith("--project-root=")) {
|
|
295
|
+
projectRoot = arg.slice("--project-root=".length);
|
|
296
|
+
}
|
|
297
|
+
else if (arg === "--path") {
|
|
298
|
+
const v = argv[i + 1];
|
|
299
|
+
if (v === undefined)
|
|
300
|
+
return { projectRoot, paths, json, strict, error: "missing --path value" };
|
|
301
|
+
paths.push(v);
|
|
302
|
+
i += 1;
|
|
303
|
+
}
|
|
304
|
+
else if (arg?.startsWith("--path=")) {
|
|
305
|
+
paths.push(arg.slice("--path=".length));
|
|
306
|
+
}
|
|
307
|
+
else if (arg === "--json") {
|
|
308
|
+
json = true;
|
|
309
|
+
}
|
|
310
|
+
else if (arg === "--strict") {
|
|
311
|
+
strict = true;
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
return { projectRoot, paths, json, strict, error: `unrecognized argument: ${arg}` };
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return { projectRoot, paths, json, strict };
|
|
318
|
+
}
|
|
319
|
+
function loadPythonScriptHandler(scriptName) {
|
|
320
|
+
return (argv) => {
|
|
321
|
+
const deftRoot = resolveDeftRoot();
|
|
322
|
+
try {
|
|
323
|
+
execFileSync("uv", ["--project", deftRoot, "run", "python", join(deftRoot, "scripts", scriptName), ...argv], {
|
|
324
|
+
cwd: deftRoot,
|
|
325
|
+
encoding: "utf8",
|
|
326
|
+
env: { ...process.env, PYTHONUTF8: "1", DEFT_CACHE_DISABLE: "1" },
|
|
327
|
+
stdio: "inherit",
|
|
328
|
+
});
|
|
329
|
+
return 0;
|
|
330
|
+
}
|
|
331
|
+
catch (err) {
|
|
332
|
+
const e = err;
|
|
333
|
+
return typeof e.status === "number" ? e.status : 1;
|
|
334
|
+
}
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
async function loadCoreModuleHandler(verb, io) {
|
|
338
|
+
switch (verb) {
|
|
339
|
+
case "scm": {
|
|
340
|
+
const { main } = await import("../../core/dist/scm/main.js");
|
|
341
|
+
return (argv) => main(argv);
|
|
342
|
+
}
|
|
343
|
+
case "github-auth-modes": {
|
|
344
|
+
const { mainEntry } = await import("../../core/dist/intake/github-auth-modes-cli.js");
|
|
345
|
+
return mainEntry;
|
|
346
|
+
}
|
|
347
|
+
case "github-body": {
|
|
348
|
+
const { mainEntry } = await import("../../core/dist/intake/github-body-cli.js");
|
|
349
|
+
return mainEntry;
|
|
350
|
+
}
|
|
351
|
+
case "issue-emit": {
|
|
352
|
+
const { mainEntry } = await import("../../core/dist/intake/issue-emit-cli.js");
|
|
353
|
+
return mainEntry;
|
|
354
|
+
}
|
|
355
|
+
case "issue-ingest": {
|
|
356
|
+
const { mainEntry } = await import("../../core/dist/intake/issue-ingest-cli.js");
|
|
357
|
+
return mainEntry;
|
|
358
|
+
}
|
|
359
|
+
case "reconcile-issues": {
|
|
360
|
+
const { mainEntry } = await import("../../core/dist/intake/reconcile-issues-cli.js");
|
|
361
|
+
return mainEntry;
|
|
362
|
+
}
|
|
363
|
+
case "swarm-launch": {
|
|
364
|
+
const { launchMain } = await import("../../core/dist/swarm/launch-cli.js");
|
|
365
|
+
return launchMain;
|
|
366
|
+
}
|
|
367
|
+
case "swarm-complete-cohort": {
|
|
368
|
+
const { completeCohortMain } = await import("../../core/dist/swarm/complete-cohort-cli.js");
|
|
369
|
+
return completeCohortMain;
|
|
370
|
+
}
|
|
371
|
+
case "swarm-readiness": {
|
|
372
|
+
const { readinessMain } = await import("../../core/dist/swarm/readiness-cli.js");
|
|
373
|
+
return readinessMain;
|
|
374
|
+
}
|
|
375
|
+
case "swarm-routing-verify": {
|
|
376
|
+
const { routingVerifyMain } = await import("../../core/dist/swarm/routing-verify-cli.js");
|
|
377
|
+
return routingVerifyMain;
|
|
378
|
+
}
|
|
379
|
+
case "swarm-routing-set": {
|
|
380
|
+
const { routingSetMain } = await import("../../core/dist/swarm/routing-set-cli.js");
|
|
381
|
+
return routingSetMain;
|
|
382
|
+
}
|
|
383
|
+
case "swarm-verify-review-clean": {
|
|
384
|
+
const { verifyReviewCleanMain } = await import("../../core/dist/swarm/verify-review-clean-cli.js");
|
|
385
|
+
return verifyReviewCleanMain;
|
|
386
|
+
}
|
|
387
|
+
case "swarm-worktrees": {
|
|
388
|
+
const { worktreesMain } = await import("../../core/dist/swarm/worktrees-cli.js");
|
|
389
|
+
return worktreesMain;
|
|
390
|
+
}
|
|
391
|
+
case "framework-commands": {
|
|
392
|
+
const { frameworkCommandsMain } = await import("@deftai/directive-core/render");
|
|
393
|
+
return (argv) => frameworkCommandsMain(argv);
|
|
394
|
+
}
|
|
395
|
+
case "pack-render": {
|
|
396
|
+
const { main } = await import("../../core/dist/packs/pack-render.js");
|
|
397
|
+
return (argv) => main([...argv]);
|
|
398
|
+
}
|
|
399
|
+
case "packs-slice": {
|
|
400
|
+
const { main } = await import("../../core/dist/packs/packs-slice.js");
|
|
401
|
+
return (argv) => main([...argv]);
|
|
402
|
+
}
|
|
403
|
+
case "roadmap-render": {
|
|
404
|
+
const { main } = await import("../../core/dist/render/roadmap-render.js");
|
|
405
|
+
return (argv) => main(argv);
|
|
406
|
+
}
|
|
407
|
+
case "spec-validate": {
|
|
408
|
+
const { runSpecValidateCli } = await import("./render-cli/spec-validate-cli.js");
|
|
409
|
+
return (argv) => runSpecValidateCli(argv);
|
|
410
|
+
}
|
|
411
|
+
case "spec-render": {
|
|
412
|
+
const { runSpecRenderCli } = await import("./render-cli/spec-render-cli.js");
|
|
413
|
+
return (argv) => runSpecRenderCli(argv);
|
|
414
|
+
}
|
|
415
|
+
case "prd-render": {
|
|
416
|
+
const { runPrdRenderCli } = await import("./render-cli/prd-render-cli.js");
|
|
417
|
+
return (argv) => runPrdRenderCli(argv);
|
|
418
|
+
}
|
|
419
|
+
case "project-render": {
|
|
420
|
+
const { runProjectRenderCli } = await import("./render-cli/project-render-cli.js");
|
|
421
|
+
return (argv) => runProjectRenderCli(argv);
|
|
422
|
+
}
|
|
423
|
+
case "code-structure-validate": {
|
|
424
|
+
const { evaluateCodeStructure } = await import("@deftai/directive-core/verify-source");
|
|
425
|
+
return (argv) => {
|
|
426
|
+
const parsed = parseCodeStructureArgs(argv);
|
|
427
|
+
if (parsed.error !== undefined) {
|
|
428
|
+
io.writeErr(`code_structure_validate: ${parsed.error}\n`);
|
|
429
|
+
return 2;
|
|
430
|
+
}
|
|
431
|
+
const result = evaluateCodeStructure(parsed.projectRoot, {
|
|
432
|
+
paths: parsed.paths.length > 0 ? parsed.paths : undefined,
|
|
433
|
+
json: parsed.json,
|
|
434
|
+
strict: parsed.strict,
|
|
435
|
+
});
|
|
436
|
+
if (result.stdout)
|
|
437
|
+
io.writeOut(result.stdout);
|
|
438
|
+
if (result.stderr)
|
|
439
|
+
io.writeErr(result.stderr);
|
|
440
|
+
return result.code;
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
case "pack-migrate-skills":
|
|
444
|
+
return loadPythonScriptHandler("pack_migrate_skills.py");
|
|
445
|
+
case "pack-migrate-rules":
|
|
446
|
+
return loadPythonScriptHandler("pack_migrate_rules.py");
|
|
447
|
+
case "pack-migrate-strategies":
|
|
448
|
+
return loadPythonScriptHandler("pack_migrate_strategies.py");
|
|
449
|
+
case "pack-migrate-patterns":
|
|
450
|
+
return loadPythonScriptHandler("pack_migrate_patterns.py");
|
|
451
|
+
case "pack-migrate-swarm-spec":
|
|
452
|
+
return loadPythonScriptHandler("pack_migrate_swarm_spec.py");
|
|
453
|
+
case "policy-set":
|
|
454
|
+
return loadPythonScriptHandler("policy_set.py");
|
|
455
|
+
case "scope-undo": {
|
|
456
|
+
const { undoMain } = await import("../../core/dist/scope/main.js");
|
|
457
|
+
return undoMain;
|
|
458
|
+
}
|
|
459
|
+
case "scope-demote": {
|
|
460
|
+
const { demoteMain } = await import("../../core/dist/scope/main.js");
|
|
461
|
+
return demoteMain;
|
|
462
|
+
}
|
|
463
|
+
case "scope-decompose": {
|
|
464
|
+
const { decomposeMain } = await import("../../core/dist/scope/decompose.js");
|
|
465
|
+
return decomposeMain;
|
|
466
|
+
}
|
|
467
|
+
case "changelog-resolve-unreleased": {
|
|
468
|
+
const { changelogResolveUnreleasedMain } = await import("../../core/dist/platform/changelog-cli.js");
|
|
469
|
+
return changelogResolveUnreleasedMain;
|
|
470
|
+
}
|
|
471
|
+
case "architecture-preflight-sor": {
|
|
472
|
+
const { architecturePreflightSorMain } = await import("../../core/dist/architecture/sor-preflight.js");
|
|
473
|
+
return architecturePreflightSorMain;
|
|
474
|
+
}
|
|
475
|
+
default:
|
|
476
|
+
throw new Error(`unknown core verb: ${verb}`);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
const handlerCache = new Map();
|
|
480
|
+
function loadHandler(canonical, io) {
|
|
481
|
+
let pending = handlerCache.get(canonical);
|
|
482
|
+
if (pending === undefined) {
|
|
483
|
+
pending = CLI_MODULE_VERBS.includes(canonical)
|
|
484
|
+
? loadCliModuleHandler(canonical, io)
|
|
485
|
+
: loadCoreModuleHandler(canonical, io);
|
|
486
|
+
handlerCache.set(canonical, pending);
|
|
487
|
+
}
|
|
488
|
+
return pending;
|
|
489
|
+
}
|
|
490
|
+
function defaultIo() {
|
|
491
|
+
return {
|
|
492
|
+
writeOut: (text) => {
|
|
493
|
+
process.stdout.write(text);
|
|
494
|
+
},
|
|
495
|
+
writeErr: (text) => {
|
|
496
|
+
process.stderr.write(text);
|
|
497
|
+
},
|
|
498
|
+
};
|
|
499
|
+
}
|
|
500
|
+
/** Resolve a user-facing verb to its canonical handler key. */
|
|
501
|
+
export function resolveCanonicalVerb(verb) {
|
|
502
|
+
if (CLI_MODULE_VERBS.includes(verb))
|
|
503
|
+
return verb;
|
|
504
|
+
if (CORE_MODULE_VERBS.includes(verb))
|
|
505
|
+
return verb;
|
|
506
|
+
const alias = VERB_ALIASES[verb];
|
|
507
|
+
if (alias !== undefined)
|
|
508
|
+
return alias;
|
|
509
|
+
return null;
|
|
510
|
+
}
|
|
511
|
+
/** Sorted list of all registered verb names (canonical + aliases). */
|
|
512
|
+
export function registeredVerbs() {
|
|
513
|
+
const names = new Set([
|
|
514
|
+
...CLI_MODULE_VERBS,
|
|
515
|
+
...CORE_MODULE_VERBS,
|
|
516
|
+
...Object.keys(VERB_ALIASES),
|
|
517
|
+
]);
|
|
518
|
+
return [...names].sort();
|
|
519
|
+
}
|
|
520
|
+
/** Print dispatcher help listing every registered verb. */
|
|
521
|
+
export function printHelp(io = defaultIo()) {
|
|
522
|
+
io.writeOut("Usage: directive <verb> [args...]\n\nRegistered verbs:\n");
|
|
523
|
+
for (const name of registeredVerbs()) {
|
|
524
|
+
io.writeOut(` ${name}\n`);
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
async function invokeHandler(handler, argv) {
|
|
528
|
+
const code = await handler(argv);
|
|
529
|
+
return typeof code === "number" ? code : 0;
|
|
530
|
+
}
|
|
531
|
+
const CLI_PACKAGE = "@deftai/directive";
|
|
532
|
+
function versionBanner() {
|
|
533
|
+
const info = engineInfo();
|
|
534
|
+
return `${CLI_PACKAGE} (engine: ${info.name}@${info.version})\n`;
|
|
535
|
+
}
|
|
536
|
+
/** Dispatch argv to a registered verb; returns the handler exit code. */
|
|
537
|
+
export async function dispatch(argv, io = defaultIo()) {
|
|
538
|
+
if (argv[0] === "--version" || argv[0] === "-V") {
|
|
539
|
+
io.writeOut(versionBanner());
|
|
540
|
+
return 0;
|
|
541
|
+
}
|
|
542
|
+
if (argv.length === 0 || argv[0] === "--help" || argv[0] === "-h" || argv[0] === "help") {
|
|
543
|
+
printHelp(io);
|
|
544
|
+
return 0;
|
|
545
|
+
}
|
|
546
|
+
const [verb, ...rest] = argv;
|
|
547
|
+
const canonical = resolveCanonicalVerb(verb ?? "");
|
|
548
|
+
if (canonical === null) {
|
|
549
|
+
io.writeErr(`directive: unknown verb '${verb}'\n`);
|
|
550
|
+
return 1;
|
|
551
|
+
}
|
|
552
|
+
try {
|
|
553
|
+
const handler = await loadHandler(canonical, io);
|
|
554
|
+
const handlerArgv = canonical === "framework-commands" && verb !== undefined && verb !== canonical
|
|
555
|
+
? [verb, ...rest]
|
|
556
|
+
: rest;
|
|
557
|
+
return await invokeHandler(handler, handlerArgv);
|
|
558
|
+
}
|
|
559
|
+
catch (err) {
|
|
560
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
561
|
+
io.writeErr(`directive: ${message}\n`);
|
|
562
|
+
return 2;
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
/** Test seam: reset lazy handler cache between cases. */
|
|
566
|
+
export function resetHandlerCacheForTests() {
|
|
567
|
+
handlerCache.clear();
|
|
568
|
+
}
|
|
569
|
+
//# sourceMappingURL=dispatch.js.map
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
export interface ScenarioResult {
|
|
3
|
+
readonly name: string;
|
|
4
|
+
readonly exitCode: number;
|
|
5
|
+
readonly stdout: string;
|
|
6
|
+
readonly stderr: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ParityScenario {
|
|
9
|
+
readonly name: string;
|
|
10
|
+
readonly argv: readonly string[];
|
|
11
|
+
readonly cwd?: string;
|
|
12
|
+
readonly env?: Record<string, string | undefined>;
|
|
13
|
+
readonly setup?: (root: string) => void;
|
|
14
|
+
}
|
|
15
|
+
export interface ParityResult {
|
|
16
|
+
readonly ok: boolean;
|
|
17
|
+
readonly scenarios: Array<{
|
|
18
|
+
readonly name: string;
|
|
19
|
+
readonly exitMismatch: boolean;
|
|
20
|
+
readonly pythonExit: number;
|
|
21
|
+
readonly tsExit: number;
|
|
22
|
+
readonly stdoutMismatch: boolean;
|
|
23
|
+
readonly pythonStdout: string;
|
|
24
|
+
readonly tsStdout: string;
|
|
25
|
+
}>;
|
|
26
|
+
}
|
|
27
|
+
export declare const PARITY_SCENARIOS: readonly ParityScenario[];
|
|
28
|
+
/** Normalise volatile lines while preserving doctor semantics. */
|
|
29
|
+
export declare function normaliseStdout(text: string): string;
|
|
30
|
+
export declare function diffParity(python: ScenarioResult, ts: ScenarioResult): {
|
|
31
|
+
exitMismatch: boolean;
|
|
32
|
+
stdoutMismatch: boolean;
|
|
33
|
+
pythonStdout: string;
|
|
34
|
+
tsStdout: string;
|
|
35
|
+
};
|
|
36
|
+
export declare function runParity(): ParityResult;
|
|
37
|
+
export declare function renderReport(result: ParityResult): string;
|
|
38
|
+
//# sourceMappingURL=doctor-parity.d.ts.map
|