@topogram/cli 0.3.64 → 0.3.66

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 (278) hide show
  1. package/package.json +1 -1
  2. package/src/adoption/plan/index.js +716 -0
  3. package/src/adoption/plan.js +12 -703
  4. package/src/adoption/reporting.js +1 -1
  5. package/src/agent-brief.js +7 -21
  6. package/src/agent-ops/query-builders/auth.js +375 -0
  7. package/src/agent-ops/query-builders/change-risk/change-plan.js +123 -0
  8. package/src/agent-ops/query-builders/change-risk/import-plan.js +49 -0
  9. package/src/agent-ops/query-builders/change-risk/maintained.js +286 -0
  10. package/src/agent-ops/query-builders/change-risk/review-packets.js +123 -0
  11. package/src/agent-ops/query-builders/change-risk/risk.js +189 -0
  12. package/src/agent-ops/query-builders/change-risk.js +25 -0
  13. package/src/agent-ops/query-builders/common.js +149 -0
  14. package/src/agent-ops/query-builders/maintained-risk.js +539 -0
  15. package/src/agent-ops/query-builders/maintained-shared.js +120 -0
  16. package/src/agent-ops/query-builders/multi-agent.js +547 -0
  17. package/src/agent-ops/query-builders/projection-impacts.js +514 -0
  18. package/src/agent-ops/query-builders/work-packets.js +417 -0
  19. package/src/agent-ops/query-builders/workflow-context-shared.js +300 -0
  20. package/src/agent-ops/query-builders/workflow-context.js +398 -0
  21. package/src/agent-ops/query-builders/workflow-presets-core.js +677 -0
  22. package/src/agent-ops/query-builders/workflow-presets.js +341 -0
  23. package/src/agent-ops/query-builders.d.ts +26 -26
  24. package/src/agent-ops/query-builders.js +42 -5021
  25. package/src/archive/jsonl.js +2 -2
  26. package/src/archive/resolver-bridge.js +1 -1
  27. package/src/archive/unarchive.js +2 -1
  28. package/src/catalog/constants.js +10 -0
  29. package/src/catalog/copy.js +65 -0
  30. package/src/catalog/diagnostics.js +15 -0
  31. package/src/catalog/entries.js +42 -0
  32. package/src/catalog/files.js +67 -0
  33. package/src/catalog/provenance.js +123 -0
  34. package/src/catalog/source.js +150 -0
  35. package/src/catalog/validation.js +252 -0
  36. package/src/catalog.d.ts +2 -0
  37. package/src/catalog.js +18 -746
  38. package/src/cli/command-parsers/project.js +3 -0
  39. package/src/cli/command-parsers/shared.js +1 -1
  40. package/src/cli/commands/agent.js +2 -2
  41. package/src/cli/commands/catalog/check.js +31 -0
  42. package/src/cli/commands/catalog/copy.js +59 -0
  43. package/src/cli/commands/catalog/doctor.js +248 -0
  44. package/src/cli/commands/catalog/help.js +21 -0
  45. package/src/cli/commands/catalog/list.js +52 -0
  46. package/src/cli/commands/catalog/runner.js +92 -0
  47. package/src/cli/commands/catalog/shared.js +17 -0
  48. package/src/cli/commands/catalog/show.js +134 -0
  49. package/src/cli/commands/catalog.js +30 -615
  50. package/src/cli/commands/check.js +3 -3
  51. package/src/cli/commands/doctor.js +2 -9
  52. package/src/cli/commands/generator-policy/package-info.js +162 -0
  53. package/src/cli/commands/generator-policy/payloads.js +372 -0
  54. package/src/cli/commands/generator-policy/printers.js +159 -0
  55. package/src/cli/commands/generator-policy/runner.js +81 -0
  56. package/src/cli/commands/generator-policy/shared.js +39 -0
  57. package/src/cli/commands/generator-policy.js +15 -783
  58. package/src/cli/commands/import/adopt.js +170 -0
  59. package/src/cli/commands/import/check.js +91 -0
  60. package/src/cli/commands/import/diff.js +84 -0
  61. package/src/cli/commands/import/help.js +47 -0
  62. package/src/cli/commands/import/paths.js +269 -0
  63. package/src/cli/commands/import/plan.js +292 -0
  64. package/src/cli/commands/import/refresh.js +471 -0
  65. package/src/cli/commands/import/status-history.js +196 -0
  66. package/src/cli/commands/import/workspace.js +233 -0
  67. package/src/cli/commands/import.js +33 -1732
  68. package/src/cli/commands/migrate.js +153 -0
  69. package/src/cli/commands/package/constants.js +17 -0
  70. package/src/cli/commands/package/doctor.js +240 -0
  71. package/src/cli/commands/package/help.js +27 -0
  72. package/src/cli/commands/package/lockfile.js +135 -0
  73. package/src/cli/commands/package/npm.js +97 -0
  74. package/src/cli/commands/package/reporting.js +35 -0
  75. package/src/cli/commands/package/runner.js +33 -0
  76. package/src/cli/commands/package/shared.js +9 -0
  77. package/src/cli/commands/package/update-cli.js +252 -0
  78. package/src/cli/commands/package/versions.js +35 -0
  79. package/src/cli/commands/package.js +29 -813
  80. package/src/cli/commands/query/change-plan.js +68 -0
  81. package/src/cli/commands/query/definitions.js +202 -0
  82. package/src/cli/commands/query/import-adopt.js +121 -0
  83. package/src/cli/commands/query/runner/artifacts.js +102 -0
  84. package/src/cli/commands/query/runner/boundaries.js +211 -0
  85. package/src/cli/commands/query/runner/change.js +182 -0
  86. package/src/cli/commands/query/runner/import-adopt.js +111 -0
  87. package/src/cli/commands/query/runner/index.js +31 -0
  88. package/src/cli/commands/query/runner/output.js +12 -0
  89. package/src/cli/commands/query/runner/workflow.js +241 -0
  90. package/src/cli/commands/query/runner.js +3 -0
  91. package/src/cli/commands/query/workflow-context.js +5 -0
  92. package/src/cli/commands/query/workspace.js +270 -0
  93. package/src/cli/commands/query.js +9 -1300
  94. package/src/cli/commands/source.js +3 -12
  95. package/src/cli/commands/template/baseline.js +100 -0
  96. package/src/cli/commands/template/check.js +467 -0
  97. package/src/cli/commands/template/constants.js +8 -0
  98. package/src/cli/commands/template/diagnostics.js +26 -0
  99. package/src/cli/commands/template/help.js +28 -0
  100. package/src/cli/commands/template/lifecycle.js +404 -0
  101. package/src/cli/commands/template/list-show.js +287 -0
  102. package/src/cli/commands/template/policy.js +422 -0
  103. package/src/cli/commands/template/shared.js +127 -0
  104. package/src/cli/commands/template/updates.js +352 -0
  105. package/src/cli/commands/template-runner.js +6 -6
  106. package/src/cli/commands/template.js +41 -2143
  107. package/src/cli/commands/trust.js +1 -1
  108. package/src/cli/commands/workflow.js +6 -1
  109. package/src/cli/dispatcher.js +6 -1
  110. package/src/cli/help.js +15 -14
  111. package/src/cli/migration-guidance.js +1 -1
  112. package/src/cli/output-safety.js +2 -1
  113. package/src/cli/path-normalization.js +3 -13
  114. package/src/generator/api/contracts.js +497 -0
  115. package/src/generator/api/metadata.js +221 -0
  116. package/src/generator/api/openapi.js +559 -0
  117. package/src/generator/api/schema.js +124 -0
  118. package/src/generator/api/types.d.ts +98 -0
  119. package/src/generator/api.js +3 -1195
  120. package/src/generator/context/domain-page.js +1 -1
  121. package/src/generator/context/shared/domain-sdlc.js +282 -0
  122. package/src/generator/context/shared/maintained-boundary.js +665 -0
  123. package/src/generator/context/shared/metrics.js +85 -0
  124. package/src/generator/context/shared/primitives.js +64 -0
  125. package/src/generator/context/shared/relationships.js +453 -0
  126. package/src/generator/context/shared/summaries.js +263 -0
  127. package/src/generator/context/shared/types.d.ts +207 -0
  128. package/src/generator/context/shared.d.ts +42 -0
  129. package/src/generator/context/shared.js +80 -1390
  130. package/src/generator/context/slice/core.js +397 -0
  131. package/src/generator/context/slice/sdlc.js +417 -0
  132. package/src/generator/context/slice/ui-packets.js +183 -0
  133. package/src/generator/context/slice.js +2 -859
  134. package/src/generator/context/task-mode.js +2 -2
  135. package/src/generator/registry/index.js +507 -0
  136. package/src/generator/registry.js +18 -504
  137. package/src/generator/runtime/environment/index.js +666 -0
  138. package/src/generator/runtime/environment.js +4 -666
  139. package/src/generator/runtime/runtime-check/index.js +554 -0
  140. package/src/generator/runtime/runtime-check.js +4 -554
  141. package/src/generator/runtime/shared/index.js +572 -0
  142. package/src/generator/runtime/shared.js +19 -570
  143. package/src/generator/sdlc/doc-page.js +1 -1
  144. package/src/generator/shared.d.ts +2 -0
  145. package/src/generator/surfaces/databases/lifecycle-shared.js +1 -1
  146. package/src/generator/surfaces/native/swiftui-templates/README.generated.md +1 -1
  147. package/src/generator/surfaces/shared.d.ts +3 -0
  148. package/src/generator/widget-conformance/behavior-report.js +258 -0
  149. package/src/generator/widget-conformance/checks.js +371 -0
  150. package/src/generator/widget-conformance/projection-context.js +200 -0
  151. package/src/generator/widget-conformance/report.js +166 -0
  152. package/src/generator/widget-conformance/types.d.ts +121 -0
  153. package/src/generator/widget-conformance.js +3 -824
  154. package/src/import/core/context.d.ts +3 -0
  155. package/src/import/core/context.js +5 -7
  156. package/src/import/core/contracts.d.ts +1 -0
  157. package/src/import/core/registry.d.ts +4 -0
  158. package/src/import/core/runner/candidates.js +337 -0
  159. package/src/import/core/runner/options.js +22 -0
  160. package/src/import/core/runner/reports.js +51 -0
  161. package/src/import/core/runner/run.js +79 -0
  162. package/src/import/core/runner/tracks.js +150 -0
  163. package/src/import/core/runner/ui-drafts.js +393 -0
  164. package/src/import/core/runner.js +3 -698
  165. package/src/import/core/shared/api-routes.js +221 -0
  166. package/src/import/core/shared/candidates.js +97 -0
  167. package/src/import/core/shared/files.js +177 -0
  168. package/src/import/core/shared/next-app.js +389 -0
  169. package/src/import/core/shared/types.d.ts +51 -0
  170. package/src/import/core/shared/ui-routes.js +230 -0
  171. package/src/import/core/shared.js +60 -861
  172. package/src/new-project/constants.js +128 -0
  173. package/src/new-project/create.js +90 -0
  174. package/src/new-project/json.js +28 -0
  175. package/src/new-project/metadata.js +96 -0
  176. package/src/new-project/package-spec.js +161 -0
  177. package/src/new-project/project-files.js +351 -0
  178. package/src/new-project/template-policy.js +269 -0
  179. package/src/new-project/template-resolution.js +370 -0
  180. package/src/new-project/template-snapshots.js +442 -0
  181. package/src/new-project/template-updates.js +512 -0
  182. package/src/new-project/types.d.ts +83 -0
  183. package/src/new-project.js +6 -2277
  184. package/src/parser.d.ts +87 -1
  185. package/src/parser.js +118 -0
  186. package/src/policy/review-boundaries.d.ts +15 -0
  187. package/src/project-config/index.js +591 -0
  188. package/src/project-config.js +19 -561
  189. package/src/resolver/enrich/acceptance-criterion.js +2 -0
  190. package/src/resolver/enrich/bug.js +2 -0
  191. package/src/resolver/enrich/pitch.js +2 -0
  192. package/src/resolver/enrich/requirement.js +2 -0
  193. package/src/resolver/enrich/task.js +2 -0
  194. package/src/resolver/index.js +19 -2089
  195. package/src/resolver/normalize.js +384 -1
  196. package/src/resolver/plans.js +168 -0
  197. package/src/resolver/projections-api.js +494 -0
  198. package/src/resolver/projections-db.js +133 -0
  199. package/src/resolver/projections-ui.js +317 -0
  200. package/src/resolver/shapes.js +251 -0
  201. package/src/resolver/shared.js +278 -0
  202. package/src/resolver/widgets.js +132 -0
  203. package/src/sdlc/adopt.js +6 -5
  204. package/src/sdlc/paths.js +3 -5
  205. package/src/sdlc/scaffold.js +2 -1
  206. package/src/template-trust/constants.js +62 -0
  207. package/src/template-trust/content.js +258 -0
  208. package/src/template-trust/diff.js +92 -0
  209. package/src/template-trust/policy.js +61 -0
  210. package/src/template-trust/record.js +90 -0
  211. package/src/template-trust/status.js +182 -0
  212. package/src/template-trust.js +24 -687
  213. package/src/text-helpers.d.ts +1 -0
  214. package/src/topogram-types.d.ts +69 -0
  215. package/src/validator/common.js +488 -0
  216. package/src/validator/data-model.js +237 -0
  217. package/src/validator/docs.js +167 -0
  218. package/src/validator/expressions.js +146 -1
  219. package/src/validator/index.d.ts +23 -0
  220. package/src/validator/index.js +32 -3585
  221. package/src/validator/kinds.d.ts +41 -0
  222. package/src/validator/kinds.js +2 -0
  223. package/src/validator/model-helpers.js +46 -0
  224. package/src/validator/per-kind/acceptance-criterion.js +5 -0
  225. package/src/validator/per-kind/bug.js +6 -0
  226. package/src/validator/per-kind/domain.js +15 -2
  227. package/src/validator/per-kind/pitch.js +7 -0
  228. package/src/validator/per-kind/requirement.js +5 -0
  229. package/src/validator/per-kind/task.js +7 -0
  230. package/src/validator/per-kind/widget.js +14 -0
  231. package/src/validator/projections/api-http-async.js +410 -0
  232. package/src/validator/projections/api-http-authz.js +88 -0
  233. package/src/validator/projections/api-http-core.js +205 -0
  234. package/src/validator/projections/api-http-policies.js +339 -0
  235. package/src/validator/projections/api-http-responses.js +233 -0
  236. package/src/validator/projections/api-http.js +44 -0
  237. package/src/validator/projections/db.js +353 -0
  238. package/src/validator/projections/generator-defaults.js +45 -0
  239. package/src/validator/projections/helpers.js +87 -0
  240. package/src/validator/projections/ui-helpers.js +214 -0
  241. package/src/validator/projections/ui-navigation.js +344 -0
  242. package/src/validator/projections/ui-structure.js +364 -0
  243. package/src/validator/projections/ui-widgets.js +493 -0
  244. package/src/validator/projections/ui.js +46 -0
  245. package/src/validator/registry.js +48 -1
  246. package/src/validator/utils.d.ts +20 -0
  247. package/src/validator/utils.js +115 -12
  248. package/src/widget-behavior.d.ts +1 -0
  249. package/src/workflows/import-app/api/collect.js +221 -0
  250. package/src/workflows/import-app/api/openapi.js +257 -0
  251. package/src/workflows/import-app/api/routes.js +327 -0
  252. package/src/workflows/import-app/api/sources.js +22 -0
  253. package/src/workflows/import-app/api.js +2 -797
  254. package/src/workflows/reconcile/adoption-plan/build.js +212 -0
  255. package/src/workflows/reconcile/adoption-plan/dependencies.js +75 -0
  256. package/src/workflows/reconcile/adoption-plan/outputs.js +153 -0
  257. package/src/workflows/reconcile/adoption-plan/paths.js +58 -0
  258. package/src/workflows/reconcile/adoption-plan/projection-patches.js +177 -0
  259. package/src/workflows/reconcile/adoption-plan/reasons.js +107 -0
  260. package/src/workflows/reconcile/adoption-plan.js +30 -740
  261. package/src/workflows/reconcile/auth/closures.js +115 -0
  262. package/src/workflows/reconcile/auth/formatters.js +142 -0
  263. package/src/workflows/reconcile/auth/inference.js +330 -0
  264. package/src/workflows/reconcile/auth/roles.js +122 -0
  265. package/src/workflows/reconcile/auth.js +35 -690
  266. package/src/workflows/reconcile/bundle-core/index.js +600 -0
  267. package/src/workflows/reconcile/bundle-core.js +12 -598
  268. package/src/workflows/reconcile/candidate-model.js +18 -2
  269. package/src/workflows/reconcile/canonical-surface.js +1 -1
  270. package/src/workflows/reconcile/impacts/adoption-plan.js +196 -0
  271. package/src/workflows/reconcile/impacts/indexes.js +105 -0
  272. package/src/workflows/reconcile/impacts/patches.js +252 -0
  273. package/src/workflows/reconcile/impacts/reports.js +80 -0
  274. package/src/workflows/reconcile/impacts.js +14 -623
  275. package/src/workflows/reconcile/renderers.js +41 -6
  276. package/src/workflows/shared.js +5 -11
  277. package/src/workspace-docs.d.ts +29 -0
  278. package/src/workspace-paths.js +328 -0
@@ -205,7 +205,7 @@ export function runTrustDiffCommand(inputPath, options = {}) {
205
205
  * @returns {number}
206
206
  */
207
207
  export function runTrustCommand(context) {
208
- const inputPath = context.inputPath || "./topogram";
208
+ const inputPath = context.inputPath || "./topo";
209
209
  if (context.commandArgs.trustCommand === "template") {
210
210
  return runTrustTemplateCommand(inputPath, { force: Boolean(context.commandArgs.force) });
211
211
  }
@@ -6,6 +6,7 @@ import path from "node:path";
6
6
  import { stableStringify } from "../../format.js";
7
7
  import { parsePath } from "../../parser.js";
8
8
  import { formatValidationErrors, validateWorkspace } from "../../validator.js";
9
+ import { resolveTopoRoot } from "../../workspace-paths.js";
9
10
  import { runWorkflow } from "../../workflows.js";
10
11
 
11
12
  /**
@@ -13,7 +14,11 @@ import { runWorkflow } from "../../workflows.js";
13
14
  * @returns {number}
14
15
  */
15
16
  export function runValidateCommand(inputPath) {
16
- const ast = parsePath(inputPath || ".");
17
+ const requestedPath = inputPath || ".";
18
+ const targetPath = fs.existsSync(requestedPath) && fs.statSync(requestedPath).isFile()
19
+ ? requestedPath
20
+ : resolveTopoRoot(requestedPath);
21
+ const ast = parsePath(targetPath);
17
22
  const result = validateWorkspace(ast);
18
23
  if (!result.ok) {
19
24
  console.error(formatValidationErrors(result));
@@ -10,6 +10,7 @@ import { runGenerateAppCommand } from "./commands/generate.js";
10
10
  import { runGeneratorCommand } from "./commands/generator.js";
11
11
  import { runGeneratorPolicyCommand } from "./commands/generator-policy.js";
12
12
  import { runImportCommand } from "./commands/import-runner.js";
13
+ import { runMigrateCommand } from "./commands/migrate.js";
13
14
  import { runNewProjectCommand } from "./commands/new.js";
14
15
  import { runPackageCommand } from "./commands/package.js";
15
16
  import { runParseCommand, runResolveCommand } from "./commands/inspect.js";
@@ -145,7 +146,7 @@ export async function runCliDispatch(context) {
145
146
  return 1;
146
147
  }
147
148
 
148
- if ((shouldCheck || shouldWidgetCheck || shouldWidgetBehavior || shouldAgentBrief || shouldValidate || commandArgs?.generatorPolicyCommand || commandArgs?.trustCommand || generateTarget === "app-bundle") && inputPath) {
149
+ if ((shouldCheck || shouldWidgetCheck || shouldWidgetBehavior || shouldAgentBrief || shouldValidate || commandArgs?.generatorPolicyCommand || commandArgs?.trustCommand || commandArgs?.queryName || commandArgs?.workflowPresetCommand || generateTarget) && inputPath) {
149
150
  inputPath = normalizeTopogramPath(inputPath);
150
151
  }
151
152
  const effectiveInputPath = commandInputPath(inputPath);
@@ -241,6 +242,10 @@ export async function runCliDispatch(context) {
241
242
  return runPackageCommand({ commandArgs, inputPath, json: emitJson });
242
243
  }
243
244
 
245
+ if (commandArgs?.migrateCommand) {
246
+ return runMigrateCommand(inputPath, { write: shouldWrite, json: emitJson });
247
+ }
248
+
244
249
  if (commandArgs?.importCommand) {
245
250
  return runImportCommand({
246
251
  commandArgs,
package/src/cli/help.js CHANGED
@@ -28,6 +28,7 @@ export function printUsage(options = {}) {
28
28
  console.log(" or: topogram catalog doctor [--json] [--catalog <path-or-source>]");
29
29
  console.log(" or: topogram catalog check <path-or-url> [--json]");
30
30
  console.log(" or: topogram catalog copy <id> <target> [--version <version>] [--json] [--catalog <path-or-source>]");
31
+ console.log(" or: topogram migrate workspace-folder [path] [--dry-run|--write] [--json]");
31
32
  console.log(" or: topogram package update-cli <version|--latest> [--json]");
32
33
  console.log(" or: topogram import <app-path> --out <target> [--from <track[,track]>] [--json]");
33
34
  console.log(" or: topogram import refresh [path] [--from <app-path>] [--dry-run] [--json]");
@@ -79,9 +80,9 @@ export function printUsage(options = {}) {
79
80
  console.log(" topogram agent brief --json");
80
81
  console.log(" topogram query list");
81
82
  console.log(" topogram query show widget-behavior");
82
- console.log(" topogram query widget-behavior ./topogram --projection proj_web_surface --json");
83
+ console.log(" topogram query widget-behavior ./topo --projection proj_web_surface --json");
83
84
  console.log(" topogram emit ui-widget-contract --widget widget_data_grid --json");
84
- console.log(" topogram emit widget-conformance-report ./topogram --projection proj_web_surface --json");
85
+ console.log(" topogram emit widget-conformance-report ./topo --projection proj_web_surface --json");
85
86
  console.log(" topogram generator list");
86
87
  console.log(" topogram generator show @topogram/generator-react-web");
87
88
  console.log(" topogram generator check ./generator-package");
@@ -136,7 +137,7 @@ export function printUsage(options = {}) {
136
137
  console.log(" topogram template update --check");
137
138
  console.log(" topogram template update --apply");
138
139
  console.log("");
139
- console.log("Defaults: check/generate use ./topogram, and generate writes ./app.");
140
+ console.log("Defaults: check/generate use ./topo, and generate writes ./app.");
140
141
  console.log("Default starter: hello-web from the catalog. Run `topogram template list` for catalog aliases.");
141
142
  console.log("Generated app commands are emitted into the output package.json.");
142
143
  console.log("Run `topogram help <command>` for command-specific help.");
@@ -231,13 +232,13 @@ export function printGenerateHelp() {
231
232
  console.log("Usage: topogram generate [path] [--out <path>]");
232
233
  console.log(" or: topogram generate app [path] [--out <path>]");
233
234
  console.log("");
234
- console.log("Defaults: path is ./topogram and app generation writes ./app.");
235
+ console.log("Defaults: path is ./topo and app generation writes ./app.");
235
236
  console.log("Use `topogram emit <target>` for contracts, reports, snapshots, migration plans, and other artifacts.");
236
237
  console.log("");
237
238
  console.log("Examples:");
238
239
  console.log(" topogram generate");
239
- console.log(" topogram generate ./topogram --out ./app");
240
- console.log(" topogram generate app ./topogram --out ./app");
240
+ console.log(" topogram generate ./topo --out ./app");
241
+ console.log(" topogram generate app ./topo --out ./app");
241
242
  }
242
243
 
243
244
  /**
@@ -249,7 +250,7 @@ export function printEmitHelp() {
249
250
  console.log("");
250
251
  console.log("Emits named contracts, reports, snapshots, migration plans, and other artifacts.");
251
252
  console.log("");
252
- console.log("Defaults: path is ./topogram. Emit prints to stdout unless --write is passed. --write writes ./artifacts unless --out-dir is supplied.");
253
+ console.log("Defaults: path is ./topo. Emit prints to stdout unless --write is passed. --write writes ./artifacts unless --out-dir is supplied.");
253
254
  console.log("");
254
255
  console.log("Common artifact targets:");
255
256
  console.log(" ui-widget-contract");
@@ -268,10 +269,10 @@ export function printEmitHelp() {
268
269
  console.log("");
269
270
  console.log("Examples:");
270
271
  console.log(" topogram emit ui-widget-contract --widget widget_data_grid --json");
271
- console.log(" topogram emit widget-conformance-report ./topogram --projection proj_web_surface --json");
272
- console.log(" topogram emit widget-behavior-report ./topogram --projection proj_web_surface --json");
273
- console.log(" topogram emit db-schema-snapshot ./topogram --projection proj_db_postgres --json");
274
- console.log(" topogram emit sql-migration ./topogram --projection proj_db_postgres --from-snapshot ./state/current.json");
272
+ console.log(" topogram emit widget-conformance-report ./topo --projection proj_web_surface --json");
273
+ console.log(" topogram emit widget-behavior-report ./topo --projection proj_web_surface --json");
274
+ console.log(" topogram emit db-schema-snapshot ./topo --projection proj_db_postgres --json");
275
+ console.log(" topogram emit sql-migration ./topo --projection proj_db_postgres --from-snapshot ./state/current.json");
275
276
  console.log(" topogram emit ui-widget-contract --write --out-dir ./contracts");
276
277
  }
277
278
 
@@ -284,13 +285,13 @@ export function printWidgetHelp() {
284
285
  console.log("");
285
286
  console.log("Checks projection widget_bindings usage against reusable widget contracts and behavior realizations.");
286
287
  console.log("");
287
- console.log("Defaults: path is ./topogram.");
288
+ console.log("Defaults: path is ./topo.");
288
289
  console.log("");
289
290
  console.log("Examples:");
290
291
  console.log(" topogram widget check");
291
292
  console.log(" topogram widget check --projection proj_web_surface");
292
- console.log(" topogram widget check ./topogram --widget widget_data_grid --json");
293
+ console.log(" topogram widget check ./topo --widget widget_data_grid --json");
293
294
  console.log(" topogram widget behavior");
294
295
  console.log(" topogram widget behavior --projection proj_web_surface");
295
- console.log(" topogram widget behavior ./topogram --widget widget_data_grid --json");
296
+ console.log(" topogram widget behavior ./topo --widget widget_data_grid --json");
296
297
  }
@@ -17,7 +17,7 @@ const RENAMED_GENERATE_TARGETS = new Map([
17
17
  * @param {string} [fallback]
18
18
  * @returns {string}
19
19
  */
20
- function commandPath(args, index, fallback = "./topogram") {
20
+ function commandPath(args, index, fallback = "./topo") {
21
21
  const value = args[index];
22
22
  return value && !value.startsWith("-") ? value : fallback;
23
23
  }
@@ -5,6 +5,7 @@ import os from "node:os";
5
5
  import path from "node:path";
6
6
 
7
7
  import { outputOwnershipForPath } from "../project-config.js";
8
+ import { DEFAULT_TOPO_FOLDER_NAME } from "../workspace-paths.js";
8
9
 
9
10
  export const GENERATED_OUTPUT_SENTINEL = ".topogram-generated.json";
10
11
 
@@ -103,5 +104,5 @@ export function topogramInputPathForGeneration(inputPath) {
103
104
  if (isSameOrInside(REPO_ROOT, absolute)) {
104
105
  return `./${path.relative(REPO_ROOT, absolute).replace(/\\/g, "/")}`;
105
106
  }
106
- return path.basename(absolute) === "topogram" ? "./topogram" : ".";
107
+ return path.basename(absolute) === DEFAULT_TOPO_FOLDER_NAME ? `./${DEFAULT_TOPO_FOLDER_NAME}` : ".";
107
108
  }
@@ -1,19 +1,13 @@
1
1
  // @ts-check
2
2
 
3
- import fs from "node:fs";
4
- import path from "node:path";
3
+ import { resolveTopoRoot, resolveWorkspaceContext } from "../workspace-paths.js";
5
4
 
6
5
  /**
7
6
  * @param {string} inputPath
8
7
  * @returns {string}
9
8
  */
10
9
  export function normalizeTopogramPath(inputPath) {
11
- const absolute = path.resolve(inputPath);
12
- if (path.basename(absolute) === "topogram") {
13
- return absolute;
14
- }
15
- const candidate = path.join(absolute, "topogram");
16
- return fs.existsSync(candidate) ? candidate : absolute;
10
+ return resolveTopoRoot(inputPath);
17
11
  }
18
12
 
19
13
  /**
@@ -21,9 +15,5 @@ export function normalizeTopogramPath(inputPath) {
21
15
  * @returns {string}
22
16
  */
23
17
  export function normalizeProjectRoot(inputPath) {
24
- const absolute = path.resolve(inputPath);
25
- if (path.basename(absolute) === "topogram") {
26
- return path.dirname(absolute);
27
- }
28
- return absolute;
18
+ return resolveWorkspaceContext(inputPath).projectRoot;
29
19
  }