@deftai/directive-core 0.98.1 → 0.100.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.
Files changed (144) hide show
  1. package/dist/authz/actions.d.ts +6 -0
  2. package/dist/authz/actions.js +3 -0
  3. package/dist/authz/classify.js +401 -75
  4. package/dist/authz/decompose-apply.d.ts +67 -0
  5. package/dist/authz/decompose-apply.js +302 -0
  6. package/dist/authz/index.d.ts +3 -1
  7. package/dist/authz/index.js +3 -1
  8. package/dist/authz/store.d.ts +53 -0
  9. package/dist/authz/store.js +219 -1
  10. package/dist/authz/types.d.ts +19 -2
  11. package/dist/authz/types.js +5 -1
  12. package/dist/consumer-check-contract/evaluate.d.ts +40 -0
  13. package/dist/consumer-check-contract/evaluate.js +188 -3
  14. package/dist/consumer-check-contract/index.d.ts +1 -1
  15. package/dist/consumer-check-contract/index.js +1 -1
  16. package/dist/content-contracts/skills/greptile-detector.d.ts +42 -0
  17. package/dist/content-contracts/skills/greptile-detector.js +202 -4
  18. package/dist/decision/index.d.ts +17 -0
  19. package/dist/decision/index.js +35 -0
  20. package/dist/decision/list.d.ts +47 -0
  21. package/dist/decision/list.js +250 -0
  22. package/dist/decision/schema.d.ts +88 -0
  23. package/dist/decision/schema.js +293 -0
  24. package/dist/decision/write.d.ts +82 -0
  25. package/dist/decision/write.js +427 -0
  26. package/dist/doctor/checks.d.ts +44 -0
  27. package/dist/doctor/checks.js +428 -2
  28. package/dist/doctor/main.d.ts +6 -7
  29. package/dist/doctor/main.js +72 -79
  30. package/dist/doctor/which.d.ts +20 -1
  31. package/dist/doctor/which.js +67 -1
  32. package/dist/eval/report.d.ts +29 -0
  33. package/dist/eval/report.js +69 -0
  34. package/dist/eval/run.d.ts +9 -0
  35. package/dist/eval/run.js +40 -4
  36. package/dist/eval/version-pin.d.ts +99 -0
  37. package/dist/eval/version-pin.js +181 -0
  38. package/dist/finish-loop/pr-finish-loop.d.ts +13 -2
  39. package/dist/finish-loop/pr-finish-loop.js +116 -5
  40. package/dist/finish-loop/types.d.ts +1 -1
  41. package/dist/hooks/dispatcher.d.ts +9 -5
  42. package/dist/hooks/dispatcher.js +23 -15
  43. package/dist/hooks/readonly.d.ts +6 -3
  44. package/dist/hooks/readonly.js +44 -25
  45. package/dist/index.d.ts +2 -0
  46. package/dist/index.js +2 -0
  47. package/dist/init-deposit/agent-hooks.d.ts +20 -0
  48. package/dist/init-deposit/agent-hooks.js +51 -31
  49. package/dist/intake/issue-ingest.js +29 -0
  50. package/dist/lifecycle/completed-consistency.d.ts +60 -0
  51. package/dist/lifecycle/completed-consistency.js +443 -0
  52. package/dist/lifecycle/completed-tracked-on-delivery.d.ts +47 -0
  53. package/dist/lifecycle/completed-tracked-on-delivery.js +415 -0
  54. package/dist/lifecycle/index.d.ts +2 -0
  55. package/dist/lifecycle/index.js +2 -0
  56. package/dist/literal-acceptance/capture.d.ts +52 -0
  57. package/dist/literal-acceptance/capture.js +658 -0
  58. package/dist/literal-acceptance/evaluate.d.ts +47 -0
  59. package/dist/literal-acceptance/evaluate.js +193 -0
  60. package/dist/literal-acceptance/index.d.ts +12 -0
  61. package/dist/literal-acceptance/index.js +12 -0
  62. package/dist/literal-acceptance/run.d.ts +38 -0
  63. package/dist/literal-acceptance/run.js +216 -0
  64. package/dist/literal-acceptance/safety.d.ts +24 -0
  65. package/dist/literal-acceptance/safety.js +251 -0
  66. package/dist/literal-acceptance/types.d.ts +82 -0
  67. package/dist/literal-acceptance/types.js +26 -0
  68. package/dist/platform/host-content-surface.d.ts +74 -0
  69. package/dist/platform/host-content-surface.js +214 -0
  70. package/dist/platform/index.d.ts +1 -0
  71. package/dist/platform/index.js +1 -0
  72. package/dist/policy/ceremony-dial.d.ts +289 -0
  73. package/dist/policy/ceremony-dial.js +980 -0
  74. package/dist/policy/deft-directive-disable.js +12 -2
  75. package/dist/policy/index.d.ts +2 -0
  76. package/dist/policy/index.js +16 -1
  77. package/dist/policy/merge-approval-head.d.ts +129 -0
  78. package/dist/policy/merge-approval-head.js +461 -0
  79. package/dist/policy/require-human-merge.d.ts +5 -0
  80. package/dist/policy/require-human-merge.js +5 -0
  81. package/dist/pr-merge-readiness/ci-gate.d.ts +20 -3
  82. package/dist/pr-merge-readiness/ci-gate.js +65 -5
  83. package/dist/pr-merge-readiness/compute.d.ts +13 -0
  84. package/dist/pr-merge-readiness/compute.js +99 -14
  85. package/dist/pr-merge-readiness/evaluate.js +10 -0
  86. package/dist/pr-merge-readiness/gh.d.ts +49 -0
  87. package/dist/pr-merge-readiness/gh.js +268 -0
  88. package/dist/pr-merge-readiness/index.d.ts +2 -2
  89. package/dist/pr-merge-readiness/index.js +2 -2
  90. package/dist/pr-merge-readiness/mergeability.js +5 -0
  91. package/dist/pr-merge-readiness/output.js +2 -0
  92. package/dist/pr-merge-readiness/parse.js +4 -0
  93. package/dist/pr-merge-readiness/test-gh-fixtures.helpers.js +4 -0
  94. package/dist/pr-merge-readiness/types.d.ts +6 -0
  95. package/dist/pr-wait-mergeable/cascade.d.ts +11 -0
  96. package/dist/pr-wait-mergeable/cascade.js +115 -1
  97. package/dist/pr-wait-mergeable/main.d.ts +4 -0
  98. package/dist/pr-wait-mergeable/main.js +4 -0
  99. package/dist/pr-wait-mergeable/types.d.ts +3 -1
  100. package/dist/pr-wait-mergeable/wrappers.d.ts +6 -1
  101. package/dist/pr-wait-mergeable/wrappers.js +7 -1
  102. package/dist/preflight/evaluate.d.ts +15 -1
  103. package/dist/preflight/evaluate.js +33 -2
  104. package/dist/render/framework-commands.js +4 -0
  105. package/dist/scope/acceptance-evidence.d.ts +76 -0
  106. package/dist/scope/acceptance-evidence.js +348 -0
  107. package/dist/scope/coverage-map.d.ts +98 -0
  108. package/dist/scope/coverage-map.js +558 -0
  109. package/dist/scope/decompose.js +125 -11
  110. package/dist/scope/effort-activate-gate.d.ts +28 -0
  111. package/dist/scope/effort-activate-gate.js +64 -0
  112. package/dist/scope/index.d.ts +4 -0
  113. package/dist/scope/index.js +4 -0
  114. package/dist/scope/parent-lineage.d.ts +125 -0
  115. package/dist/scope/parent-lineage.js +626 -0
  116. package/dist/scope/transition.d.ts +8 -0
  117. package/dist/scope/transition.js +69 -2
  118. package/dist/session/active-cli.d.ts +79 -0
  119. package/dist/session/active-cli.js +382 -0
  120. package/dist/session/effort-budget.d.ts +130 -0
  121. package/dist/session/effort-budget.js +334 -0
  122. package/dist/session/index.d.ts +2 -0
  123. package/dist/session/index.js +2 -0
  124. package/dist/session/session-start.d.ts +30 -1
  125. package/dist/session/session-start.js +234 -26
  126. package/dist/session/verify-session-ritual.d.ts +14 -0
  127. package/dist/session/verify-session-ritual.js +33 -0
  128. package/dist/story-ready/evaluate.d.ts +11 -0
  129. package/dist/story-ready/evaluate.js +41 -3
  130. package/dist/swarm/index.d.ts +2 -0
  131. package/dist/swarm/index.js +2 -0
  132. package/dist/swarm/pre-dispatch-cli.d.ts +19 -0
  133. package/dist/swarm/pre-dispatch-cli.js +143 -0
  134. package/dist/swarm/pre-dispatch.d.ts +87 -0
  135. package/dist/swarm/pre-dispatch.js +373 -0
  136. package/dist/triage/actions/candidates-log.d.ts +1 -2
  137. package/dist/triage/actions/candidates-log.js +37 -6
  138. package/dist/vbrief-activate/activate.js +6 -0
  139. package/dist/vbrief-validate/constants.d.ts +2 -0
  140. package/dist/vbrief-validate/constants.js +2 -0
  141. package/dist/vbrief-validate/schema.js +4 -1
  142. package/dist/xbrief-migrate/migrate-project.d.ts +4 -0
  143. package/dist/xbrief-migrate/migrate-project.js +92 -3
  144. package/package.json +19 -3
@@ -2,6 +2,7 @@ import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, statSync, unli
2
2
  import { basename, dirname, resolve } from "node:path";
3
3
  import { containedWrite } from "../fs/contained-write.js";
4
4
  import { assertProjectionContained, ProjectionContainmentError, } from "../fs/projection-containment.js";
5
+ import { evaluateEffortActivateGate } from "../scope/effort-activate-gate.js";
5
6
  import { utcNowIso } from "../scope/vbrief-json.js";
6
7
  import { pythonJsonPretty } from "../vbrief-build/json.js";
7
8
  import { ACTIVE_FOLDER, ELIGIBLE_STATUSES_FOR_FLIP, formatEligibleStatusList, SOURCE_FOLDERS, TARGET_STATUS, } from "./constants.js";
@@ -121,6 +122,11 @@ export function activate(vbriefPath, options = {}) {
121
122
  `'${TARGET_STATUS}'.`,
122
123
  };
123
124
  }
125
+ // #1581: fail closed when any plan item still has effort=XL (needs breakdown).
126
+ const effortGate = evaluateEffortActivateGate(planObj);
127
+ if (!effortGate.ok) {
128
+ return { exitCode: 1, message: effortGate.message };
129
+ }
124
130
  // Resolve destination early so containment can refuse before any mutation.
125
131
  // Parity with scope:activate / #2447: projectRoot is parent of the xbrief/ root.
126
132
  const vbriefDir = dirname(dirname(vbriefPath));
@@ -9,6 +9,8 @@ export declare const VALID_VBRIEF_VERSIONS: Set<string>;
9
9
  export declare const VALID_INFO_ROOT_KEYS: Set<string>;
10
10
  /** v0.8 PlanItem.type enum values (optional field). */
11
11
  export declare const VALID_PLAN_ITEM_TYPES: Set<string>;
12
+ /** Optional PlanItem.effort enum (#1581). Time anchors: S <2h, M 2-4h, L 1-2d, XL needs breakdown. */
13
+ export declare const VALID_PLAN_ITEM_EFFORTS: Set<string>;
12
14
  /** D13: status-to-folder mapping (#533 adds ``failed`` in completed/). */
13
15
  export declare const FOLDER_ALLOWED_STATUSES: Readonly<Record<string, ReadonlySet<string>>>;
14
16
  export declare const LIFECYCLE_FOLDERS: string[];
@@ -19,6 +19,8 @@ export const VALID_VBRIEF_VERSIONS = new Set(["0.6", "0.8"]);
19
19
  export const VALID_INFO_ROOT_KEYS = new Set(["vBRIEFInfo", "xBRIEFInfo"]);
20
20
  /** v0.8 PlanItem.type enum values (optional field). */
21
21
  export const VALID_PLAN_ITEM_TYPES = new Set(["task", "group", "milestone", "epic"]);
22
+ /** Optional PlanItem.effort enum (#1581). Time anchors: S <2h, M 2-4h, L 1-2d, XL needs breakdown. */
23
+ export const VALID_PLAN_ITEM_EFFORTS = new Set(["S", "M", "L", "XL"]);
22
24
  /** D13: status-to-folder mapping (#533 adds ``failed`` in completed/). */
23
25
  export const FOLDER_ALLOWED_STATUSES = {
24
26
  proposed: new Set(["draft", "proposed"]),
@@ -1,5 +1,5 @@
1
1
  import { pyStrRepr, pythonTypeName } from "../triage/scope/python-repr.js";
2
- import { PROJECT_DEF_EXPECTED_NARRATIVES, VALID_INFO_ROOT_KEYS, VALID_ITEM_STATUSES, VALID_PLAN_ITEM_TYPES, VALID_PLAN_STATUSES, VALID_VBRIEF_VERSIONS, } from "./constants.js";
2
+ import { PROJECT_DEF_EXPECTED_NARRATIVES, VALID_INFO_ROOT_KEYS, VALID_ITEM_STATUSES, VALID_PLAN_ITEM_EFFORTS, VALID_PLAN_ITEM_TYPES, VALID_PLAN_STATUSES, VALID_VBRIEF_VERSIONS, } from "./constants.js";
3
3
  function validateNarratives(narratives, path, errors) {
4
4
  if (typeof narratives !== "object" || narratives === null || Array.isArray(narratives)) {
5
5
  errors.push(`${path} must be an object`);
@@ -50,6 +50,9 @@ function validatePlanItem(item, path, errors) {
50
50
  if ("type" in item && !VALID_PLAN_ITEM_TYPES.has(String(item.type))) {
51
51
  errors.push(`${itemPath} invalid type: ${pyStrRepr(String(item.type))}`);
52
52
  }
53
+ if ("effort" in item && !VALID_PLAN_ITEM_EFFORTS.has(String(item.effort))) {
54
+ errors.push(`${itemPath} invalid effort: ${pyStrRepr(String(item.effort))}`);
55
+ }
53
56
  if ("summary" in item && typeof item.summary !== "string") {
54
57
  errors.push(`${itemPath}.summary must be a string, got ${pythonTypeName(item.summary)}`);
55
58
  }
@@ -24,6 +24,10 @@ export type XbriefMigrationOutcome = {
24
24
  readonly kind: "migrated";
25
25
  readonly backupDir: string;
26
26
  readonly files: number;
27
+ } | {
28
+ readonly kind: "rewritten";
29
+ readonly files: number;
30
+ readonly message: string;
27
31
  } | {
28
32
  readonly kind: "converged";
29
33
  readonly action: VbriefConvergeAction;
@@ -5,12 +5,12 @@ import { assertWriteTargetSafe, ProjectionContainmentError } from "../fs/project
5
5
  import { checkGitClean } from "../migrate-preflight/index.js";
6
6
  import { applyAgentsRefresh } from "../platform/agents-md.js";
7
7
  import { patchAgentsMdHeader, renderHeaderPatchSummary } from "./agents-header.js";
8
- import { LEGACY_ARTIFACT_DIR, LEGACY_ARTIFACT_SUFFIX, MIGRATED_ARTIFACT_DIR, MIGRATED_ARTIFACT_SUFFIX, OBSOLETE_FRAMEWORK_NARRATIVE_FILENAME, VBRIEF_DEPRECATION_MARKER_BODY, VBRIEF_DEPRECATION_MARKER_FILENAME, } from "./constants.js";
8
+ import { LEGACY_ARTIFACT_DIR, LEGACY_ARTIFACT_SUFFIX, LEGACY_VBRIEF_VERSION, MIGRATED_ARTIFACT_DIR, MIGRATED_ARTIFACT_SUFFIX, OBSOLETE_FRAMEWORK_NARRATIVE_FILENAME, VBRIEF_DEPRECATION_MARKER_BODY, VBRIEF_DEPRECATION_MARKER_FILENAME, } from "./constants.js";
9
9
  import { detectLegacyVbriefLayout, detectXbriefConvergence } from "./detect.js";
10
10
  import { hasVbriefDeprecationMarker, isDirectory, isEffectivelyEmptyDir } from "./fs-helpers.js";
11
11
  import { assertMigrationSourceSafe } from "./migration-containment.js";
12
12
  import { renderXbriefMigrationLine, xbriefMigrationGuidance } from "./signpost.js";
13
- import { rewriteEmbeddedTokens, transformArtifactV06ToV08Transactional } from "./transforms.js";
13
+ import { readDeclaredArtifactVersion, rewriteEmbeddedTokens, transformArtifactV06ToV08Transactional, } from "./transforms.js";
14
14
  function collectFiles(root, acc = []) {
15
15
  if (!isDirectory(root)) {
16
16
  return acc;
@@ -74,6 +74,65 @@ function writeMigratedFile(projectRoot, srcPath, destPath) {
74
74
  mode: "replace",
75
75
  });
76
76
  }
77
+ /**
78
+ * Plan in-place hybrid envelope rewrites for xbrief lifecycle `.xbrief.json`
79
+ * artifacts that still declare `xBRIEFInfo@0.6` after the layout rename
80
+ * (#3236 / #2974). Pure probe — no writes. Already-0.8 artifacts, schema
81
+ * deposits, and non-0.6 JSON are skipped so residual #2368 schema-only markers
82
+ * still route to `directive update`.
83
+ */
84
+ function planHybridEnvelopeRewrites(projectRoot) {
85
+ const migratedDir = join(projectRoot, MIGRATED_ARTIFACT_DIR);
86
+ const artifactPaths = collectFiles(migratedDir).filter((path) => path.endsWith(MIGRATED_ARTIFACT_SUFFIX));
87
+ const pending = [];
88
+ for (const filePath of artifactPaths) {
89
+ let parsed;
90
+ try {
91
+ parsed = JSON.parse(readFileSync(filePath, "utf8"));
92
+ }
93
+ catch (err) {
94
+ const detail = err instanceof Error ? err.message : String(err);
95
+ return {
96
+ ok: false,
97
+ error: `failed to parse hybrid envelope candidate ${relative(projectRoot, filePath)}: ${detail}`,
98
+ };
99
+ }
100
+ // Only residual v0.6 envelopes are rewrite candidates; skip 0.8 and unknown.
101
+ if (readDeclaredArtifactVersion(parsed) !== LEGACY_VBRIEF_VERSION) {
102
+ continue;
103
+ }
104
+ const result = transformArtifactV06ToV08Transactional(parsed);
105
+ if (!result.ok) {
106
+ return {
107
+ ok: false,
108
+ error: `failed to transform hybrid envelope ${relative(projectRoot, filePath)}: ${result.error}`,
109
+ };
110
+ }
111
+ if (!result.changed) {
112
+ continue;
113
+ }
114
+ pending.push({
115
+ path: filePath,
116
+ body: `${JSON.stringify(result.artifact, null, 2)}\n`,
117
+ });
118
+ }
119
+ return { ok: true, pending };
120
+ }
121
+ /**
122
+ * Apply a previously planned hybrid-envelope rewrite set via containedWrite (#3236).
123
+ */
124
+ function applyHybridEnvelopeRewrites(projectRoot, pending) {
125
+ const root = resolve(projectRoot);
126
+ for (const entry of pending) {
127
+ containedWrite({
128
+ root,
129
+ target: entry.path,
130
+ data: entry.body,
131
+ mode: "replace",
132
+ });
133
+ }
134
+ return pending.length;
135
+ }
77
136
  function backupMigrationInputs(projectRoot, legacyDir, migratedDir) {
78
137
  const stamp = new Date().toISOString().replace(/[:.]/g, "-");
79
138
  const backupRoot = join(projectRoot, ".deft", `xbrief-migrate-backup-${stamp}`);
@@ -256,6 +315,33 @@ export function runXbriefMigration(args, _io) {
256
315
  default:
257
316
  break;
258
317
  }
318
+ // #3236: on already-xbrief trees with no vbrief/, rewrite residual hybrid
319
+ // xBRIEFInfo@0.6 envelopes in place (transform accepts hybrid — #2974).
320
+ // Run before the layout-detection short-circuit so compact `"version":"0.6"`
321
+ // JSON that the string-scan may miss still gets rewritten.
322
+ if (convergence.xbriefHasContent && !convergence.vbriefPresent) {
323
+ const plan = planHybridEnvelopeRewrites(projectRoot);
324
+ if (!plan.ok) {
325
+ return { kind: "config", message: plan.error };
326
+ }
327
+ if (plan.pending.length > 0) {
328
+ if (!args.force) {
329
+ const git = checkGitClean(projectRoot);
330
+ if (git.status === "WARN") {
331
+ return {
332
+ kind: "refused",
333
+ message: `${git.message} ${xbriefMigrationGuidance()} Pass --force to override.`,
334
+ };
335
+ }
336
+ }
337
+ const files = applyHybridEnvelopeRewrites(projectRoot, plan.pending);
338
+ return {
339
+ kind: "rewritten",
340
+ files,
341
+ message: `Rewrote ${files} hybrid xBRIEFInfo@0.6 envelope(s) in place to xBRIEFInfo@0.8 under '${MIGRATED_ARTIFACT_DIR}/'.`,
342
+ };
343
+ }
344
+ }
259
345
  const detection = detectLegacyVbriefLayout(projectRoot);
260
346
  if (!detection.legacyLayout) {
261
347
  return {
@@ -266,7 +352,7 @@ export function runXbriefMigration(args, _io) {
266
352
  if (!isDirectory(legacyDir)) {
267
353
  // Already on canonical xbrief/ with no vbrief/ tree — residual markers (e.g. a
268
354
  // stale deposited v0.6 schema under xbrief/schemas/) are refreshed by update,
269
- // not migrate:xbrief (#2368).
355
+ // not migrate:xbrief (#2368). Hybrid 0.6 envelopes were handled above (#3236).
270
356
  if (convergence.xbriefHasContent && !convergence.vbriefPresent) {
271
357
  return {
272
358
  kind: "noop",
@@ -319,6 +405,9 @@ export function emitXbriefMigration(outcome, io, options = {}) {
319
405
  io.writeOut(`Migrated ${outcome.files} file(s) from ${LEGACY_ARTIFACT_DIR}/ to ${MIGRATED_ARTIFACT_DIR}/.\n` +
320
406
  `Backup written to ${outcome.backupDir}.\n`);
321
407
  return 0;
408
+ case "rewritten":
409
+ io.writeOut(`${outcome.message}\n`);
410
+ return 0;
322
411
  case "converged":
323
412
  io.writeOut(`${outcome.message}\n`);
324
413
  return 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deftai/directive-core",
3
- "version": "0.98.1",
3
+ "version": "0.100.0",
4
4
  "description": "TypeScript engine core for the Directive framework.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -131,6 +131,14 @@
131
131
  "types": "./dist/value/readback.d.ts",
132
132
  "default": "./dist/value/readback.js"
133
133
  },
134
+ "./decision": {
135
+ "types": "./dist/decision/index.d.ts",
136
+ "default": "./dist/decision/index.js"
137
+ },
138
+ "./decision/index": {
139
+ "types": "./dist/decision/index.d.ts",
140
+ "default": "./dist/decision/index.js"
141
+ },
134
142
  "./events": {
135
143
  "types": "./dist/events/attribution-ledger.d.ts",
136
144
  "default": "./dist/events/attribution-ledger.js"
@@ -147,6 +155,10 @@
147
155
  "types": "./dist/eval/report.d.ts",
148
156
  "default": "./dist/eval/report.js"
149
157
  },
158
+ "./eval/version-pin": {
159
+ "types": "./dist/eval/version-pin.d.ts",
160
+ "default": "./dist/eval/version-pin.js"
161
+ },
150
162
  "./triage": {
151
163
  "types": "./dist/triage/index.d.ts",
152
164
  "default": "./dist/triage/index.js"
@@ -271,6 +283,10 @@
271
283
  "types": "./dist/lifecycle/index.d.ts",
272
284
  "default": "./dist/lifecycle/index.js"
273
285
  },
286
+ "./literal-acceptance": {
287
+ "types": "./dist/literal-acceptance/index.d.ts",
288
+ "default": "./dist/literal-acceptance/index.js"
289
+ },
274
290
  "./packs": {
275
291
  "types": "./dist/packs/index.d.ts",
276
292
  "default": "./dist/packs/index.js"
@@ -354,8 +370,8 @@
354
370
  "provenance": true
355
371
  },
356
372
  "dependencies": {
357
- "@deftai/directive-content": "^0.98.1",
358
- "@deftai/directive-types": "^0.98.1",
373
+ "@deftai/directive-content": "^0.100.0",
374
+ "@deftai/directive-types": "^0.100.0",
359
375
  "archiver": "^8.0.0"
360
376
  },
361
377
  "scripts": {