@decantr/cli 2.9.0 → 2.9.1

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/README.md CHANGED
@@ -21,6 +21,7 @@ Use `decantr setup` when you are unsure which path applies. It detects whether t
21
21
  Use `decantr new` for a greenfield workspace in a fresh directory. With a blueprint/archetype it uses the runnable adapter and Decantr CSS; without registry content it creates a contract-only workspace unless you explicitly pass `--adoption=decantr-css`.
22
22
  Use `decantr adopt` when you already have an app and want Decantr governance without adopting a blueprint. Brownfield attach is proposal-driven: Decantr inventories the app, writes an observed essence proposal, and only applies it when you explicitly accept or merge it.
23
23
  Use `decantr doctor` when the next step is unclear, `decantr task` before asking an LLM to modify a route, `decantr verify` after the edit, and `decantr ci` in required automation. Use `decantr codify --from-audit` when you want project-owned UI patterns and local rules such as button/card/shell/theme standards to appear in future task context and verification.
24
+ In monorepos, app-scoped commands accept `--project <app-path>`. Hosted pack hydration also follows the essence path: `decantr registry compile-packs apps/web/decantr.essence.json --write-context` writes into `apps/web/.decantr/context`.
24
25
  Use `decantr init`, `decantr analyze`, `decantr check`, and `decantr health` as advanced primitives when you need direct control over one step.
25
26
 
26
27
  Current starter adapter availability:
package/dist/bin.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import "./chunk-N7A3WUZ2.js";
3
- import "./chunk-V3XAQWKD.js";
4
- import "./chunk-T5INVSOP.js";
2
+ import "./chunk-6UDJDQPT.js";
3
+ import "./chunk-RXF7ZYGK.js";
4
+ import "./chunk-FKM4OQDF.js";
5
5
  import "./chunk-TMOCTDYY.js";
6
6
  import "./chunk-34TZXWIF.js";
@@ -14,7 +14,7 @@ import {
14
14
  scaffoldProject,
15
15
  syncRegistry,
16
16
  writeExecutionPackBundleArtifacts
17
- } from "./chunk-V3XAQWKD.js";
17
+ } from "./chunk-RXF7ZYGK.js";
18
18
  import {
19
19
  createWorkspaceHealthReport,
20
20
  formatWorkspaceHealthMarkdown,
@@ -23,7 +23,7 @@ import {
23
23
  listWorkspaceProjects,
24
24
  resolveWorkspaceInfo,
25
25
  shouldFailWorkspaceHealth
26
- } from "./chunk-T5INVSOP.js";
26
+ } from "./chunk-FKM4OQDF.js";
27
27
  import {
28
28
  createProjectHealthReport,
29
29
  formatProjectHealthMarkdown,
@@ -4194,6 +4194,7 @@ import { existsSync as existsSync16, readdirSync as readdirSync6, readFileSync a
4194
4194
  import { dirname as dirname3, join as join18, relative as relative4 } from "path";
4195
4195
  import { fileURLToPath } from "url";
4196
4196
  import { isV4 as isV44 } from "@decantr/essence-spec";
4197
+ import { collectMissingPackManifestFiles } from "@decantr/verifier";
4197
4198
  var BOLD3 = "\x1B[1m";
4198
4199
  var DIM4 = "\x1B[2m";
4199
4200
  var GREEN4 = "\x1B[32m";
@@ -4339,6 +4340,19 @@ function buildDoctorReport(root, args) {
4339
4340
  const ciFiles = findCiFiles(workspaceRoot);
4340
4341
  const workflowMode = projectJson?.initialized?.workflowMode ?? null;
4341
4342
  const adoptionMode = projectJson?.initialized?.adoptionMode ?? null;
4343
+ const missingPackReferences = workspaceMode ? projects.flatMap(
4344
+ (project) => collectMissingPackManifestFiles(join18(workspaceRoot, project.path)).map(
4345
+ (missing) => `${project.path}/${missing.relativePath}`
4346
+ )
4347
+ ) : collectMissingPackManifestFiles(appRoot).map((missing) => missing.relativePath);
4348
+ const workspaceProjectsMissingManifest = workspaceMode ? projects.map((project) => project.path).filter((projectPath2) => {
4349
+ const projectContextDir = join18(workspaceRoot, projectPath2, ".decantr", "context");
4350
+ return !existsSync16(join18(projectContextDir, "pack-manifest.json"));
4351
+ }) : [];
4352
+ const workspaceProjectsMissingReviewPack = workspaceMode ? projects.map((project) => project.path).filter((projectPath2) => {
4353
+ const projectContextDir = join18(workspaceRoot, projectPath2, ".decantr", "context");
4354
+ return !existsSync16(join18(projectContextDir, "review-pack.json"));
4355
+ }) : [];
4342
4356
  const issues = [];
4343
4357
  if (!essenceVersion && !workspaceMode && !workspaceInfo.requiresProjectSelection) {
4344
4358
  issues.push({
@@ -4384,7 +4398,23 @@ function buildDoctorReport(root, args) {
4384
4398
  category: "generated-artifact",
4385
4399
  severity: "warn",
4386
4400
  message: "Generated context packs are missing or incomplete.",
4387
- nextCommand: projectPath ? `decantr refresh --project ${projectPath}` : "decantr refresh"
4401
+ nextCommand: projectPath ? `decantr registry compile-packs ${projectPath}/decantr.essence.json --write-context` : "decantr registry compile-packs decantr.essence.json --write-context"
4402
+ });
4403
+ }
4404
+ if (essenceVersion === "4.0.0" && missingPackReferences.length > 0) {
4405
+ issues.push({
4406
+ category: "generated-artifact",
4407
+ severity: "warn",
4408
+ message: `Generated pack manifest references ${missingPackReferences.length} missing file(s).`,
4409
+ nextCommand: projectPath ? `decantr registry compile-packs ${projectPath}/decantr.essence.json --write-context` : "decantr registry compile-packs decantr.essence.json --write-context"
4410
+ });
4411
+ }
4412
+ if (workspaceMode && (workspaceProjectsMissingManifest.length > 0 || workspaceProjectsMissingReviewPack.length > 0 || missingPackReferences.length > 0)) {
4413
+ issues.push({
4414
+ category: "generated-artifact",
4415
+ severity: "warn",
4416
+ message: "One or more attached workspace projects have missing or incomplete generated context packs.",
4417
+ nextCommand: "decantr registry compile-packs <app-path>/decantr.essence.json --write-context"
4388
4418
  });
4389
4419
  }
4390
4420
  if (workflowMode === "brownfield-attach" && !existsSync16(localPatternsPath(appRoot))) {
@@ -4439,9 +4469,12 @@ function buildDoctorReport(root, args) {
4439
4469
  appCandidates: candidates
4440
4470
  },
4441
4471
  generatedArtifacts: {
4442
- contextDirPresent: existsSync16(contextDir),
4443
- packManifestPresent,
4444
- reviewPackPresent
4472
+ contextDirPresent: workspaceMode ? projects.some(
4473
+ (project) => existsSync16(join18(workspaceRoot, project.path, ".decantr", "context"))
4474
+ ) : existsSync16(contextDir),
4475
+ packManifestPresent: workspaceMode ? projects.length > 0 && workspaceProjectsMissingManifest.length === 0 : packManifestPresent,
4476
+ reviewPackPresent: workspaceMode ? projects.length > 0 && workspaceProjectsMissingReviewPack.length === 0 : reviewPackPresent,
4477
+ missingReferencedFiles: missingPackReferences.slice(0, 25)
4445
4478
  },
4446
4479
  localLaw: {
4447
4480
  patternsPresent: existsSync16(localPatternsPath(appRoot)),
@@ -4481,6 +4514,7 @@ function formatDoctorText(report) {
4481
4514
  ` Context directory: ${report.generatedArtifacts.contextDirPresent ? "present" : "missing"}`,
4482
4515
  ` Pack manifest: ${report.generatedArtifacts.packManifestPresent ? "present" : "missing"}`,
4483
4516
  ` Review pack: ${report.generatedArtifacts.reviewPackPresent ? "present" : "missing"}`,
4517
+ ` Manifest references: ${report.generatedArtifacts.missingReferencedFiles.length === 0 ? "complete" : `${report.generatedArtifacts.missingReferencedFiles.length} missing`}`,
4484
4518
  ` Artifact guide: ${report.project.artifactReadmePresent ? "present" : "missing"}`,
4485
4519
  "",
4486
4520
  `${BOLD3}Local Law:${RESET4}`,
@@ -5829,6 +5863,7 @@ async function cmdPublish(type, name, projectRoot = process.cwd()) {
5829
5863
  import { createHash } from "crypto";
5830
5864
  import { existsSync as existsSync23, readdirSync as readdirSync7, readFileSync as readFileSync17, statSync as statSync6 } from "fs";
5831
5865
  import { join as join25 } from "path";
5866
+ import { collectMissingPackManifestFiles as collectMissingPackManifestFiles2 } from "@decantr/verifier";
5832
5867
  import { isV4 as isV46 } from "@decantr/essence-spec";
5833
5868
  var GREEN9 = "\x1B[32m";
5834
5869
  var RED8 = "\x1B[31m";
@@ -5891,6 +5926,16 @@ function checkRefreshFreshness(projectRoot) {
5891
5926
  if (!existsSync23(join25(contextDir, "scaffold.md"))) {
5892
5927
  reasons.push(".decantr/context/scaffold.md is missing.");
5893
5928
  }
5929
+ if (!existsSync23(join25(contextDir, "pack-manifest.json"))) {
5930
+ reasons.push(".decantr/context/pack-manifest.json is missing.");
5931
+ } else {
5932
+ const missingPackFiles = collectMissingPackManifestFiles2(projectRoot);
5933
+ if (missingPackFiles.length > 0) {
5934
+ reasons.push(
5935
+ `pack-manifest.json references missing files: ${missingPackFiles.slice(0, 5).map((missing) => missing.relativePath).join(", ")}${missingPackFiles.length > 5 ? "..." : ""}`
5936
+ );
5937
+ }
5938
+ }
5894
5939
  const newestInput = newestInputMtime(projectRoot);
5895
5940
  const staleFiles = generated.filter((path) => fileMtimeMs(path) > 0 && fileMtimeMs(path) < newestInput).map((path) => path.replace(`${projectRoot}/`, ""));
5896
5941
  if (staleFiles.length > 0) {
@@ -7906,9 +7951,9 @@ async function printHostedExecutionPackBundle(essencePath, namespace, jsonOutput
7906
7951
  }
7907
7952
  const essence = JSON.parse(readFileSync22(resolvedPath, "utf-8"));
7908
7953
  const bundle = await client.compileExecutionPacks(essence, namespace ? { namespace } : void 0);
7954
+ const contextDir = join31(dirname5(resolvedPath), ".decantr", "context");
7909
7955
  let writtenContextPaths = [];
7910
7956
  if (writeContext) {
7911
- const contextDir = join31(process.cwd(), ".decantr", "context");
7912
7957
  mkdirSync16(contextDir, { recursive: true });
7913
7958
  const written = writeExecutionPackBundleArtifacts(
7914
7959
  contextDir,
@@ -7934,7 +7979,7 @@ async function printHostedExecutionPackBundle(essencePath, namespace, jsonOutput
7934
7979
  console.log(` Sections: ${typedBundle.sections.length}`);
7935
7980
  console.log(` Mutations: ${typedBundle.mutations.length}`);
7936
7981
  if (writeContext) {
7937
- console.log(` Context bundle: ${join31(process.cwd(), ".decantr", "context")}`);
7982
+ console.log(` Context bundle: ${contextDir}`);
7938
7983
  console.log(` Files written: ${writtenContextPaths.length}`);
7939
7984
  }
7940
7985
  console.log("");
@@ -7982,7 +8027,7 @@ async function printHostedSelectedExecutionPack(packType, id, essencePath, names
7982
8027
  );
7983
8028
  let writtenContextDir = null;
7984
8029
  if (writeContext) {
7985
- const contextDir = join31(process.cwd(), ".decantr", "context");
8030
+ const contextDir = join31(dirname5(resolvedPath), ".decantr", "context");
7986
8031
  mkdirSync16(contextDir, { recursive: true });
7987
8032
  writeFileSync19(
7988
8033
  join31(contextDir, "pack-manifest.json"),
@@ -8028,7 +8073,7 @@ async function printHostedExecutionPackManifest(essencePath, namespace, jsonOutp
8028
8073
  );
8029
8074
  let writtenContextDir = null;
8030
8075
  if (writeContext) {
8031
- const contextDir = join31(process.cwd(), ".decantr", "context");
8076
+ const contextDir = join31(dirname5(resolvedPath), ".decantr", "context");
8032
8077
  mkdirSync16(contextDir, { recursive: true });
8033
8078
  writeFileSync19(join31(contextDir, "pack-manifest.json"), JSON.stringify(manifest, null, 2) + "\n");
8034
8079
  writtenContextDir = contextDir;
@@ -9936,7 +9981,7 @@ async function cmdVerifyWorkflow(args) {
9936
9981
  return;
9937
9982
  }
9938
9983
  if (workspaceMode) {
9939
- const { cmdWorkspace } = await import("./workspace-H5QQJCCI.js");
9984
+ const { cmdWorkspace } = await import("./workspace-JA2RZI6V.js");
9940
9985
  await cmdWorkspace(process.cwd(), ["workspace", "health", ...withoutWorkflowOnlyFlags(args)]);
9941
9986
  return;
9942
9987
  }
@@ -10921,7 +10966,7 @@ async function main() {
10921
10966
  break;
10922
10967
  }
10923
10968
  case "upgrade": {
10924
- const { cmdUpgrade } = await import("./upgrade-U2BTWJJJ.js");
10969
+ const { cmdUpgrade } = await import("./upgrade-VON7Y3LG.js");
10925
10970
  const applyFlag = args.includes("--apply");
10926
10971
  await cmdUpgrade(process.cwd(), { apply: applyFlag });
10927
10972
  break;
@@ -10934,9 +10979,12 @@ async function main() {
10934
10979
  );
10935
10980
  }
10936
10981
  const { cmdHeal } = await import("./heal-2BDT7TR5.js");
10982
+ const { flags } = parseLooseArgs(args);
10983
+ const workspaceInfo = resolveWorkflowProject(flags, "check");
10984
+ if (!workspaceInfo) break;
10937
10985
  const telemetryFlag = args.includes("--telemetry");
10938
10986
  const brownfieldFlag = args.includes("--brownfield");
10939
- await cmdHeal(process.cwd(), { telemetry: telemetryFlag, brownfield: brownfieldFlag });
10987
+ await cmdHeal(workspaceInfo.appRoot, { telemetry: telemetryFlag, brownfield: brownfieldFlag });
10940
10988
  break;
10941
10989
  }
10942
10990
  case "health": {
@@ -10973,7 +11021,7 @@ async function main() {
10973
11021
  cmdStudioHelp();
10974
11022
  break;
10975
11023
  }
10976
- const { cmdStudio, parseStudioArgs } = await import("./studio-B2Y4TKZ5.js");
11024
+ const { cmdStudio, parseStudioArgs } = await import("./studio-EDQMI6JE.js");
10977
11025
  await cmdStudio(process.cwd(), parseStudioArgs(args));
10978
11026
  } catch (e) {
10979
11027
  console.error(error3(e.message));
@@ -10987,7 +11035,7 @@ async function main() {
10987
11035
  cmdWorkspaceHelp();
10988
11036
  break;
10989
11037
  }
10990
- const { cmdWorkspace } = await import("./workspace-H5QQJCCI.js");
11038
+ const { cmdWorkspace } = await import("./workspace-JA2RZI6V.js");
10991
11039
  await cmdWorkspace(process.cwd(), args);
10992
11040
  } catch (e) {
10993
11041
  console.error(error3(e.message));
@@ -37,14 +37,25 @@ function findWorkspaceRoot(startDir) {
37
37
  }
38
38
  function looksLikeApp(dir, options = {}) {
39
39
  const allowSourceDirs = options.allowSourceDirs ?? true;
40
- if (existsSync(join(dir, "next.config.js")) || existsSync(join(dir, "next.config.ts")) || existsSync(join(dir, "next.config.mjs")) || existsSync(join(dir, "vite.config.ts")) || existsSync(join(dir, "vite.config.js")) || existsSync(join(dir, "angular.json")) || existsSync(join(dir, "svelte.config.js")) || existsSync(join(dir, "svelte.config.ts")) || existsSync(join(dir, "astro.config.mjs")) || allowSourceDirs && (existsSync(join(dir, "src")) || existsSync(join(dir, "app")) || existsSync(join(dir, "pages")))) {
41
- return true;
42
- }
40
+ const allowPackageDeps = options.allowPackageDeps ?? true;
43
41
  const pkg = readPackageJson(dir);
44
42
  const deps = { ...pkg?.dependencies, ...pkg?.devDependencies };
45
- return Boolean(
46
- deps.react || deps.next || deps.vue || deps.svelte || deps["@angular/core"] || deps.astro || deps.nuxt
43
+ const hasFrontendDependency = Boolean(
44
+ deps.react || deps["react-dom"] || deps.next || deps.vue || deps.svelte || deps["@angular/core"] || deps.astro || deps.nuxt
47
45
  );
46
+ const hasServerOnlyDependency = Boolean(
47
+ deps.hono || deps.express || deps.fastify || deps.koa || deps["@hapi/hapi"]
48
+ );
49
+ if (existsSync(join(dir, "next.config.js")) || existsSync(join(dir, "next.config.ts")) || existsSync(join(dir, "next.config.mjs")) || existsSync(join(dir, "vite.config.ts")) || existsSync(join(dir, "vite.config.js")) || existsSync(join(dir, "angular.json")) || existsSync(join(dir, "svelte.config.js")) || existsSync(join(dir, "svelte.config.ts")) || existsSync(join(dir, "astro.config.mjs"))) {
50
+ return true;
51
+ }
52
+ if (allowSourceDirs && (existsSync(join(dir, "src")) || existsSync(join(dir, "app")) || existsSync(join(dir, "pages")))) {
53
+ if (hasFrontendDependency) return true;
54
+ if (hasServerOnlyDependency) return false;
55
+ return true;
56
+ }
57
+ if (!allowPackageDeps) return false;
58
+ return hasFrontendDependency;
48
59
  }
49
60
  function listWorkspaceApps(workspaceRoot) {
50
61
  const candidates = [];
@@ -54,7 +65,10 @@ function listWorkspaceApps(workspaceRoot) {
54
65
  for (const entry of readdirSync(baseDir, { withFileTypes: true })) {
55
66
  if (!entry.isDirectory() || entry.name.startsWith(".")) continue;
56
67
  const candidate = join(baseDir, entry.name);
57
- if (looksLikeApp(candidate, { allowSourceDirs: base === "apps" })) {
68
+ if (looksLikeApp(candidate, {
69
+ allowSourceDirs: base === "apps",
70
+ allowPackageDeps: base === "apps"
71
+ })) {
58
72
  candidates.push(`${base}/${entry.name}`);
59
73
  }
60
74
  }
@@ -4989,7 +4989,8 @@ async function refreshDerivedFiles(projectRoot, essence, registry, prefetchedThe
4989
4989
  themeData,
4990
4990
  themeMode: mode,
4991
4991
  voiceTone: storedVoice?.tone ? storedVoice.tone.split(".")[0] + "." : void 0,
4992
- spatialHints: sectionSpatialHints
4992
+ spatialHints: sectionSpatialHints,
4993
+ adoptionMode: effectiveAdoptionMode
4993
4994
  });
4994
4995
  const sectionContextPath = join2(contextDir, `section-${section.id}.md`);
4995
4996
  writeFileSync2(sectionContextPath, contextContent);
@@ -5345,7 +5346,8 @@ function generateSectionContext(input) {
5345
5346
  themeHints,
5346
5347
  constraints,
5347
5348
  shellInfo,
5348
- spatialHints
5349
+ spatialHints,
5350
+ adoptionMode
5349
5351
  } = input;
5350
5352
  const lines = [];
5351
5353
  lines.push(`# Section: ${section.id}`);
@@ -5429,9 +5431,15 @@ function generateSectionContext(input) {
5429
5431
  const decoratorDefs = input.themeData?.decorator_definitions;
5430
5432
  const totalDecoratorCount = decoratorDefs && Object.keys(decoratorDefs).length || decorators.length;
5431
5433
  if (totalDecoratorCount > 0) {
5432
- lines.push(
5433
- `**Theme decorators:** ${totalDecoratorCount} \`${themeName}-*\` classes \u2014 full Class/Intent/Apply-to table in \`section-${section.id}-pack.md\` (preferred) and DECANTR.md "Decorator Quick Reference". MUST apply.`
5434
- );
5434
+ if (adoptionMode === "contract-only") {
5435
+ lines.push(
5436
+ `**Theme intent:** ${totalDecoratorCount} \`${themeName}-*\` decorator reference(s) exist, but this project is contract-only. Translate the intent into the app's current styling system instead of applying Decantr decorator classes directly.`
5437
+ );
5438
+ } else {
5439
+ lines.push(
5440
+ `**Theme decorators:** ${totalDecoratorCount} \`${themeName}-*\` classes \u2014 full Class/Intent/Apply-to table in \`section-${section.id}-pack.md\` (preferred) and DECANTR.md "Decorator Quick Reference". MUST apply.`
5441
+ );
5442
+ }
5435
5443
  lines.push("");
5436
5444
  }
5437
5445
  if (themeHints) {
@@ -5454,9 +5462,15 @@ function generateSectionContext(input) {
5454
5462
  }
5455
5463
  const themePrefix = themeName.split("-")[0] || themeName;
5456
5464
  lines.push("");
5457
- lines.push(
5458
- `Usage: \`className={css('_flex _col _gap4') + ' d-surface ${themePrefix}-glass'}\` \u2014 atoms via css(), treatments and theme decorators as plain class strings.`
5459
- );
5465
+ if (adoptionMode === "contract-only") {
5466
+ lines.push(
5467
+ "Usage: implement this section through the app's existing styling authority (design-system components, Tailwind/Sass/theme tokens, CVA variants, or accepted local rules). Do not add `@decantr/css`, `css(...)`, `d-*` treatments, or Decantr token CSS unless adoption mode changes."
5468
+ );
5469
+ } else {
5470
+ lines.push(
5471
+ `Usage: \`className={css('_flex _col _gap4') + ' d-surface ${themePrefix}-glass'}\` \u2014 atoms via css(), treatments and theme decorators as plain class strings.`
5472
+ );
5473
+ }
5460
5474
  lines.push("");
5461
5475
  lines.push("---");
5462
5476
  lines.push("");
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import "./chunk-N7A3WUZ2.js";
2
- import "./chunk-V3XAQWKD.js";
3
- import "./chunk-T5INVSOP.js";
1
+ import "./chunk-6UDJDQPT.js";
2
+ import "./chunk-RXF7ZYGK.js";
3
+ import "./chunk-FKM4OQDF.js";
4
4
  import "./chunk-TMOCTDYY.js";
5
5
  import "./chunk-34TZXWIF.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createWorkspaceHealthReport
3
- } from "./chunk-T5INVSOP.js";
3
+ } from "./chunk-FKM4OQDF.js";
4
4
  import {
5
5
  createProjectHealthReport
6
6
  } from "./chunk-TMOCTDYY.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  RegistryClient,
3
3
  refreshDerivedFiles
4
- } from "./chunk-V3XAQWKD.js";
4
+ } from "./chunk-RXF7ZYGK.js";
5
5
 
6
6
  // src/commands/upgrade.ts
7
7
  import { existsSync, readFileSync, writeFileSync } from "fs";
@@ -7,7 +7,7 @@ import {
7
7
  listWorkspaceProjects,
8
8
  parseWorkspaceArgs,
9
9
  shouldFailWorkspaceHealth
10
- } from "./chunk-T5INVSOP.js";
10
+ } from "./chunk-FKM4OQDF.js";
11
11
  import "./chunk-TMOCTDYY.js";
12
12
  import "./chunk-34TZXWIF.js";
13
13
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decantr/cli",
3
- "version": "2.9.0",
3
+ "version": "2.9.1",
4
4
  "description": "Decantr CLI - scaffold, audit, inspect Project Health, and maintain Decantr projects from the terminal",
5
5
  "keywords": [
6
6
  "decantr",
@@ -48,11 +48,11 @@
48
48
  },
49
49
  "dependencies": {
50
50
  "ajv": "^8.20.0",
51
- "@decantr/core": "2.1.0",
52
- "@decantr/registry": "2.2.0",
53
51
  "@decantr/essence-spec": "2.0.1",
54
52
  "@decantr/telemetry": "2.2.1",
55
- "@decantr/verifier": "2.3.0"
53
+ "@decantr/registry": "2.2.0",
54
+ "@decantr/core": "2.1.0",
55
+ "@decantr/verifier": "2.3.1"
56
56
  },
57
57
  "scripts": {
58
58
  "build": "tsup",