@deftai/directive 0.99.0 → 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.
@@ -10,7 +10,7 @@ export interface DispatchIo {
10
10
  writeErr: (text: string) => void;
11
11
  }
12
12
  /** CLI modules in packages/cli/src (excluding parity harnesses and bin/index). */
13
- export declare const CLI_MODULE_VERBS: readonly ["agents-refresh", "cache", "check", "capacity-backfill", "capacity-show", "codebase-default-extractor", "codebase-map", "codebase-map-fresh", "codebase-projection-registry", "codebase-provider", "doctor", "install-upgrade", "install-uninstall", "migrate-preflight", "migrate-xbrief", "migrate-category-b", "framework-check-updates", "hook-dispatch", "umbrella-current-shape", "changelog-check", "change-init", "commit-lint", "coverage-hotspots", "policy", "authz", "escalation-cli", "pr-closing-keywords", "pr-merge-readiness", "pr-monitor", "pr-protected-issues", "pr-wait-mergeable", "pr-watch", "pr-finish-loop", "directive-finish-loop", "preflight-cache", "preflight-gh", "probe-session", "release", "release-e2e", "release-publish", "release-rollback", "scope-lifecycle", "scope-record-approved-scope", "lifecycle-event", "lifecycle-stats", "session-start", "session-ready", "plan-sequence", "slice", "subagent-monitor", "toolchain-check", "triage-actions", "triage-bootstrap", "triage-bulk", "triage-classify", "triage-help", "triage-queue", "triage-reconcile", "triage-refresh", "triage-scope", "triage-scope-drift", "triage-smoketest", "triage-subscribe", "triage-summary", "triage-welcome", "ts-check-lane", "vbrief-activate", "vbrief-build", "vbrief-preflight", "vbrief-reconcile", "vbrief-validate", "vbrief-validation", "xbrief-create", "xbrief-verify", "verify-branch", "verify-encoding", "verify-forward-coverage", "verify-test-boundary", "verify-scope-provenance", "verify-consumer-check-contract", "verify-hooks-installed", "verify-investigation", "verify-judgment-gates", "verify-no-task-runtime", "validate-links", "validate-strategy-output", "verify-biome-config", "verify-bridge-drift", "verify-capacity", "verify-contained-writes", "verify-content-manifest", "verify-skill-external-fetch-gate", "verify-contract-drift", "verify-cursor-tier1", "verify-openclaw-tier1", "verify-go-freeze", "verify-scm-boundary", "verify-session-ritual", "verify-plan-sequence", "verify-stubs", "verify-xbrief-drift", "rule-ownership-lint", "verify-story-ready", "verify-review-monitor", "verify-l4-owner", "verify-subagent-alive", "review-monitor-register", "review-monitor-release", "verify-tools", "verify-wip-cap", "verify-orphan-active", "verify-agents-md-budget", "verify-agents-md-advisory", "verify-eval-health-relocation", "verify-eval-triggers-relocation", "eval-health", "eval-run", "eval-report", "eval-triggers"];
13
+ export declare const CLI_MODULE_VERBS: readonly ["agents-refresh", "cache", "check", "capacity-backfill", "capacity-show", "codebase-default-extractor", "codebase-map", "codebase-map-fresh", "codebase-projection-registry", "codebase-provider", "doctor", "install-upgrade", "install-uninstall", "migrate-preflight", "migrate-xbrief", "migrate-category-b", "framework-check-updates", "hook-dispatch", "umbrella-current-shape", "changelog-check", "change-init", "commit-lint", "coverage-hotspots", "policy", "authz", "escalation-cli", "pr-closing-keywords", "pr-merge-readiness", "pr-monitor", "pr-protected-issues", "pr-wait-mergeable", "pr-watch", "pr-finish-loop", "directive-finish-loop", "preflight-cache", "preflight-gh", "probe-session", "release", "release-e2e", "release-publish", "release-rollback", "scope-lifecycle", "scope-record-approved-scope", "lifecycle-event", "lifecycle-stats", "session-start", "session-ready", "plan-sequence", "slice", "subagent-monitor", "toolchain-check", "triage-actions", "triage-bootstrap", "triage-bulk", "triage-classify", "triage-help", "triage-queue", "triage-reconcile", "triage-refresh", "triage-scope", "triage-scope-drift", "triage-smoketest", "triage-subscribe", "triage-summary", "triage-welcome", "ts-check-lane", "vbrief-activate", "vbrief-build", "vbrief-preflight", "vbrief-reconcile", "vbrief-validate", "vbrief-validation", "xbrief-create", "xbrief-verify", "verify-branch", "verify-encoding", "verify-forward-coverage", "verify-test-boundary", "verify-scope-provenance", "verify-consumer-check-contract", "verify-hooks-installed", "verify-investigation", "verify-judgment-gates", "verify-no-task-runtime", "validate-links", "validate-strategy-output", "verify-biome-config", "verify-bridge-drift", "verify-capacity", "verify-contained-writes", "verify-content-manifest", "verify-skill-external-fetch-gate", "verify-contract-drift", "verify-cursor-tier1", "verify-openclaw-tier1", "verify-go-freeze", "verify-scm-boundary", "verify-session-ritual", "verify-plan-sequence", "verify-stubs", "verify-xbrief-drift", "rule-ownership-lint", "verify-story-ready", "verify-review-monitor", "verify-l4-owner", "verify-subagent-alive", "review-monitor-register", "review-monitor-release", "verify-tools", "verify-wip-cap", "verify-orphan-active", "verify-completed-tracked", "verify-literal-ac", "verify-agents-md-budget", "verify-agents-md-advisory", "verify-eval-health-relocation", "verify-eval-triggers-relocation", "eval-health", "eval-run", "eval-report", "eval-triggers"];
14
14
  /** Core-only CLI entrypoints without a packages/cli wrapper. */
15
15
  export declare const CORE_MODULE_VERBS: readonly ["scm", "scm-readiness", "github-auth-modes", "github-body", "issue-emit", "issue-ingest", "issue-sync-from-xbrief", "reconcile-issues", "swarm-launch", "swarm-complete-cohort", "swarm-finalize-cohort", "swarm-pre-dispatch", "swarm-readiness", "swarm-routing-verify", "swarm-routing-set", "swarm-verify-review-clean", "swarm-worktrees", "framework-commands", "pack-render", "packs-slice", "prd-render", "export-spec", "project-render", "roadmap-render", "rule-map", "spec-render", "spec-validate", "code-structure-validate", "pack-migrate-skills", "pack-migrate-rules", "pack-migrate-strategies", "pack-migrate-patterns", "pack-migrate-swarm-spec", "policy-set", "setup-ghx", "scope-undo", "scope-demote", "scope-decompose", "changelog-resolve-unreleased", "architecture-preflight-sor", "feedback-file", "value-readback", "product-signal", "freshness-report", "decision-write", "decision-list"];
16
16
  /** Colon aliases for triage-actions (mirrors cli-router SUBCOMMAND_ROUTES). */
package/dist/dispatch.js CHANGED
@@ -137,6 +137,8 @@ export const CLI_MODULE_VERBS = [
137
137
  "verify-tools",
138
138
  "verify-wip-cap",
139
139
  "verify-orphan-active",
140
+ "verify-completed-tracked",
141
+ "verify-literal-ac",
140
142
  "verify-agents-md-budget",
141
143
  "verify-agents-md-advisory",
142
144
  "verify-eval-health-relocation",
@@ -279,6 +281,9 @@ export const VERB_ALIASES = {
279
281
  "verify:vbrief-conformance": "vbrief-validate",
280
282
  "verify:wip-cap": "verify-wip-cap",
281
283
  "verify:orphan-active": "verify-orphan-active",
284
+ "verify:completed-tracked": "verify-completed-tracked",
285
+ "verify:literal-ac": "verify-literal-ac",
286
+ "verify:literal-acceptance": "verify-literal-ac",
282
287
  "verify:agents-md-budget": "verify-agents-md-budget",
283
288
  "verify:agents-md-advisory": "verify-agents-md-advisory",
284
289
  "verify:eval-health-relocation": "verify-eval-health-relocation",
@@ -18,6 +18,15 @@ export interface ParsedSessionStartArgs {
18
18
  * Applied as resolve inputs via a one-shot config override in run().
19
19
  */
20
20
  ceremonyDepthOverride: CeremonyDepth | null;
21
+ /**
22
+ * #3266: host/CLI effort-budget cap fields for bank-the-pass guidance.
23
+ * Merged with DEFT_HOST_EFFORT_BUDGET JSON when present.
24
+ */
25
+ effortBudgetHost: {
26
+ maxTurns?: number;
27
+ maxBudget?: number;
28
+ hardBudget?: boolean;
29
+ };
21
30
  error?: string;
22
31
  }
23
32
  /** Parse session:start CLI args, mirroring scripts/session_start.py. */
@@ -2,7 +2,7 @@
2
2
  import { resolve } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import { CEREMONY_DEPTHS, normalizeCeremonyModelTier, normalizeCeremonyProjectShape, normalizeCeremonyTaskSize, selectCeremonyDepth, } from "@deftai/directive-core/policy";
5
- import { COLD_CEREMONY_TIER, parseDeferrals, READ_ONLY_POSTURE, REARM_CEREMONY_TIER, ritualStatePath, runSessionStart, SESSION_CEREMONY_TIERS, } from "@deftai/directive-core/session";
5
+ import { COLD_CEREMONY_TIER, parseDeferrals, READ_ONLY_POSTURE, REARM_CEREMONY_TIER, resolveProductionHostEffortDescriptor, ritualStatePath, runSessionStart, SESSION_CEREMONY_TIERS, } from "@deftai/directive-core/session";
6
6
  function parseCeremonyDepth(raw) {
7
7
  const value = raw.trim().toLowerCase();
8
8
  if (CEREMONY_DEPTHS.includes(value)) {
@@ -29,6 +29,7 @@ export function parseArgs(argv) {
29
29
  ceremonyTier: COLD_CEREMONY_TIER,
30
30
  ceremonyDialInputs: {},
31
31
  ceremonyDepthOverride: null,
32
+ effortBudgetHost: {},
32
33
  };
33
34
  const dialInputs = {};
34
35
  for (let i = 0; i < argv.length; i += 1) {
@@ -211,6 +212,62 @@ export function parseArgs(argv) {
211
212
  }
212
213
  parsed.ceremonyDepthOverride = depth;
213
214
  }
215
+ else if (arg === "--max-turns") {
216
+ // #3266: harness hard turn budget for bank-the-pass guidance
217
+ const value = argv[i + 1];
218
+ if (value === undefined) {
219
+ return { ...parsed, error: "argument --max-turns: expected one argument" };
220
+ }
221
+ const n = Number(value);
222
+ if (!Number.isFinite(n) || n < 0) {
223
+ return {
224
+ ...parsed,
225
+ error: `argument --max-turns: expected non-negative number, got ${JSON.stringify(value)}`,
226
+ };
227
+ }
228
+ parsed.effortBudgetHost.maxTurns = n;
229
+ i += 1;
230
+ }
231
+ else if (arg?.startsWith("--max-turns=")) {
232
+ const value = arg.slice("--max-turns=".length);
233
+ const n = Number(value);
234
+ if (!Number.isFinite(n) || n < 0) {
235
+ return {
236
+ ...parsed,
237
+ error: `argument --max-turns: expected non-negative number, got ${JSON.stringify(value)}`,
238
+ };
239
+ }
240
+ parsed.effortBudgetHost.maxTurns = n;
241
+ }
242
+ else if (arg === "--max-budget") {
243
+ const value = argv[i + 1];
244
+ if (value === undefined) {
245
+ return { ...parsed, error: "argument --max-budget: expected one argument" };
246
+ }
247
+ const n = Number(value);
248
+ if (!Number.isFinite(n) || n < 0) {
249
+ return {
250
+ ...parsed,
251
+ error: `argument --max-budget: expected non-negative number, got ${JSON.stringify(value)}`,
252
+ };
253
+ }
254
+ parsed.effortBudgetHost.maxBudget = n;
255
+ i += 1;
256
+ }
257
+ else if (arg?.startsWith("--max-budget=")) {
258
+ const value = arg.slice("--max-budget=".length);
259
+ const n = Number(value);
260
+ if (!Number.isFinite(n) || n < 0) {
261
+ return {
262
+ ...parsed,
263
+ error: `argument --max-budget: expected non-negative number, got ${JSON.stringify(value)}`,
264
+ };
265
+ }
266
+ parsed.effortBudgetHost.maxBudget = n;
267
+ }
268
+ else if (arg === "--hard-budget") {
269
+ parsed.effortBudgetHost.hardBudget = true;
270
+ }
214
271
  else {
215
272
  return { ...parsed, error: `unrecognized argument: ${arg}` };
216
273
  }
@@ -247,6 +304,19 @@ export function run(argv) {
247
304
  }
248
305
  return true;
249
306
  });
307
+ // #3266: production host adapter — native harness env + DEFT_HOST_EFFORT_BUDGET + CLI flags.
308
+ const hostDescriptor = {
309
+ ...resolveProductionHostEffortDescriptor(process.env),
310
+ };
311
+ if (args.effortBudgetHost.maxTurns !== undefined) {
312
+ hostDescriptor.maxTurns = args.effortBudgetHost.maxTurns;
313
+ }
314
+ if (args.effortBudgetHost.maxBudget !== undefined) {
315
+ hostDescriptor.maxBudget = args.effortBudgetHost.maxBudget;
316
+ }
317
+ if (args.effortBudgetHost.hardBudget === true) {
318
+ hostDescriptor.hardBudget = true;
319
+ }
250
320
  let result;
251
321
  try {
252
322
  // #3214: --ceremony-depth forces this session only (not persisted to policy).
@@ -257,6 +327,7 @@ export function run(argv) {
257
327
  allowOptionalNetwork: args.withNetwork ? true : undefined,
258
328
  ceremonyTier: args.ceremonyTier,
259
329
  ceremonyDialInputs: args.ceremonyDialInputs,
330
+ effortBudgetSeams: { hostDescriptor, environ: process.env },
260
331
  ...(args.ceremonyDepthOverride !== null
261
332
  ? {
262
333
  ceremonyDial: selectCeremonyDepth({
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env node
2
+ interface ParsedArgs {
3
+ projectRoot: string;
4
+ repo: string | null;
5
+ tip: string | null;
6
+ quiet: boolean;
7
+ skipGh: boolean;
8
+ error?: string;
9
+ }
10
+ /** Parse verify-completed-tracked CLI args (#3264). */
11
+ export declare function parseArgs(argv: string[]): ParsedArgs;
12
+ /** Run the gate and return the process exit code. */
13
+ export declare function run(argv: string[]): number;
14
+ export {};
15
+ //# sourceMappingURL=verify-completed-tracked.d.ts.map
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env node
2
+ import { resolve } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { evaluateCompletedTracked } from "@deftai/directive-core/lifecycle";
5
+ /** Parse verify-completed-tracked CLI args (#3264). */
6
+ export function parseArgs(argv) {
7
+ const parsed = {
8
+ projectRoot: ".",
9
+ repo: null,
10
+ tip: null,
11
+ quiet: false,
12
+ skipGh: false,
13
+ };
14
+ for (let i = 0; i < argv.length; i += 1) {
15
+ const arg = argv[i];
16
+ if (arg === "--quiet") {
17
+ parsed.quiet = true;
18
+ }
19
+ else if (arg === "--skip-gh") {
20
+ parsed.skipGh = true;
21
+ }
22
+ else if (arg === "--project-root") {
23
+ const value = argv[i + 1];
24
+ if (value === undefined) {
25
+ return { ...parsed, error: "argument --project-root: expected one argument" };
26
+ }
27
+ parsed.projectRoot = value;
28
+ i += 1;
29
+ }
30
+ else if (arg?.startsWith("--project-root=")) {
31
+ parsed.projectRoot = arg.slice("--project-root=".length);
32
+ }
33
+ else if (arg === "--repo") {
34
+ const value = argv[i + 1];
35
+ if (value === undefined) {
36
+ return { ...parsed, error: "argument --repo: expected one argument" };
37
+ }
38
+ parsed.repo = value;
39
+ i += 1;
40
+ }
41
+ else if (arg?.startsWith("--repo=")) {
42
+ parsed.repo = arg.slice("--repo=".length);
43
+ }
44
+ else if (arg === "--tip") {
45
+ const value = argv[i + 1];
46
+ if (value === undefined) {
47
+ return { ...parsed, error: "argument --tip: expected one argument" };
48
+ }
49
+ parsed.tip = value;
50
+ i += 1;
51
+ }
52
+ else if (arg?.startsWith("--tip=")) {
53
+ parsed.tip = arg.slice("--tip=".length);
54
+ }
55
+ else {
56
+ return { ...parsed, error: `unrecognized argument: ${arg}` };
57
+ }
58
+ }
59
+ return parsed;
60
+ }
61
+ /** Run the gate and return the process exit code. */
62
+ export function run(argv) {
63
+ const args = parseArgs(argv);
64
+ if (args.error !== undefined) {
65
+ process.stderr.write(`verify_completed_tracked: ${args.error}\n`);
66
+ return 2;
67
+ }
68
+ const projectRoot = resolve(args.projectRoot);
69
+ const result = evaluateCompletedTracked(projectRoot, {
70
+ quiet: args.quiet,
71
+ repo: args.repo,
72
+ tip: args.tip,
73
+ skipGh: args.skipGh,
74
+ });
75
+ if (result.message.length > 0) {
76
+ if (result.stream === "stdout") {
77
+ process.stdout.write(`${result.message}\n`);
78
+ }
79
+ else if (result.stream === "stderr") {
80
+ process.stderr.write(`${result.message}\n`);
81
+ }
82
+ }
83
+ return result.code;
84
+ }
85
+ if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1]) {
86
+ process.exit(run(process.argv.slice(2)));
87
+ }
88
+ //# sourceMappingURL=verify-completed-tracked.js.map
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ interface ParsedArgs {
3
+ projectRoot: string;
4
+ xbriefPath: string | null;
5
+ quiet: boolean;
6
+ captureOnly: boolean;
7
+ error?: string;
8
+ }
9
+ /** Parse verify-literal-ac CLI args. */
10
+ export declare function parseArgs(argv: string[]): ParsedArgs;
11
+ /** Run the gate and return the process exit code. */
12
+ export declare function run(argv: string[]): number;
13
+ export {};
14
+ //# sourceMappingURL=verify-literal-ac.d.ts.map
@@ -0,0 +1,161 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CLI: task verify:literal-ac — run stored literal acceptance commands verbatim (#3267).
4
+ */
5
+ import { existsSync, readdirSync, readFileSync } from "node:fs";
6
+ import { join, resolve } from "node:path";
7
+ import { fileURLToPath } from "node:url";
8
+ import { evaluateLiteralAcceptanceFromPath, formatRejectedLedger, resolveLiteralAcceptanceDetailed, } from "@deftai/directive-core/literal-acceptance";
9
+ /** Parse verify-literal-ac CLI args. */
10
+ export function parseArgs(argv) {
11
+ const parsed = {
12
+ projectRoot: ".",
13
+ xbriefPath: null,
14
+ quiet: false,
15
+ captureOnly: false,
16
+ };
17
+ const positionals = [];
18
+ for (let i = 0; i < argv.length; i += 1) {
19
+ const arg = argv[i];
20
+ if (arg === "--quiet") {
21
+ parsed.quiet = true;
22
+ }
23
+ else if (arg === "--capture-only") {
24
+ parsed.captureOnly = true;
25
+ }
26
+ else if (arg === "--project-root") {
27
+ const value = argv[i + 1];
28
+ if (value === undefined) {
29
+ return { ...parsed, error: "argument --project-root: expected one argument" };
30
+ }
31
+ parsed.projectRoot = value;
32
+ i += 1;
33
+ }
34
+ else if (arg?.startsWith("--project-root=")) {
35
+ parsed.projectRoot = arg.slice("--project-root=".length);
36
+ }
37
+ else if (arg === "--xbrief" || arg === "--vbrief") {
38
+ const value = argv[i + 1];
39
+ if (value === undefined) {
40
+ return { ...parsed, error: `argument ${arg}: expected one argument` };
41
+ }
42
+ parsed.xbriefPath = value;
43
+ i += 1;
44
+ }
45
+ else if (arg?.startsWith("--xbrief=") || arg?.startsWith("--vbrief=")) {
46
+ parsed.xbriefPath = arg.slice(arg.indexOf("=") + 1);
47
+ }
48
+ else if (arg?.startsWith("-")) {
49
+ return { ...parsed, error: `unrecognized argument: ${arg}` };
50
+ }
51
+ else if (arg !== undefined) {
52
+ positionals.push(arg);
53
+ }
54
+ }
55
+ if (parsed.xbriefPath === null && positionals.length > 0) {
56
+ parsed.xbriefPath = positionals[0] ?? null;
57
+ }
58
+ return parsed;
59
+ }
60
+ function findActiveXbrief(projectRoot) {
61
+ for (const dirName of ["xbrief", "vbrief"]) {
62
+ const active = join(projectRoot, dirName, "active");
63
+ if (!existsSync(active))
64
+ continue;
65
+ let names = [];
66
+ try {
67
+ names = readdirSync(active).filter((n) => n.endsWith(".xbrief.json") || n.endsWith(".vbrief.json"));
68
+ }
69
+ catch {
70
+ continue;
71
+ }
72
+ if (names.length === 1) {
73
+ return join(active, names[0]);
74
+ }
75
+ }
76
+ return null;
77
+ }
78
+ function asRecord(value) {
79
+ if (typeof value === "object" && value !== null && !Array.isArray(value)) {
80
+ return value;
81
+ }
82
+ return null;
83
+ }
84
+ /** Run the gate and return the process exit code. */
85
+ export function run(argv) {
86
+ const args = parseArgs(argv);
87
+ if (args.error !== undefined) {
88
+ process.stderr.write(`verify_literal_ac: ${args.error}\n`);
89
+ return 2;
90
+ }
91
+ const projectRoot = resolve(args.projectRoot);
92
+ let xbriefPath = args.xbriefPath !== null ? resolve(projectRoot, args.xbriefPath) : null;
93
+ if (xbriefPath === null) {
94
+ xbriefPath = findActiveXbrief(projectRoot);
95
+ }
96
+ if (xbriefPath === null) {
97
+ process.stderr.write("verify_literal_ac: pass an xBRIEF path or ensure exactly one artifact in xbrief/active/\n" +
98
+ " Usage: task verify:literal-ac -- <path-to-active.xbrief.json>\n" +
99
+ " Refs #3267 literal acceptance-command verification\n");
100
+ return 2;
101
+ }
102
+ if (args.captureOnly) {
103
+ try {
104
+ const data = asRecord(JSON.parse(readFileSync(xbriefPath, "utf8")));
105
+ if (data === null) {
106
+ process.stderr.write("verify_literal_ac: xBRIEF top-level is not an object\n");
107
+ return 2;
108
+ }
109
+ const plan = asRecord(data.plan);
110
+ if (plan === null) {
111
+ process.stderr.write("verify_literal_ac: xBRIEF missing plan object\n");
112
+ return 2;
113
+ }
114
+ const resolved = resolveLiteralAcceptanceDetailed(plan, { captureFromNarratives: true });
115
+ const payload = {
116
+ xbrief: xbriefPath,
117
+ count: resolved.commands.length,
118
+ rejected_count: resolved.rejected.length,
119
+ commands: resolved.commands.map((c) => ({
120
+ command: c.command,
121
+ source: c.source,
122
+ sourceSpan: c.sourceSpan ?? null,
123
+ cwd: c.cwd ?? null,
124
+ expectedExitCode: c.expectedExitCode ?? 0,
125
+ })),
126
+ rejected: resolved.rejected.map((r) => ({
127
+ command: r.command,
128
+ reason: r.reason,
129
+ sourceSpan: r.sourceSpan ?? null,
130
+ })),
131
+ };
132
+ process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`);
133
+ if (resolved.rejected.length > 0) {
134
+ process.stderr.write(`${formatRejectedLedger(resolved.rejected)}\n`);
135
+ }
136
+ return 0;
137
+ }
138
+ catch (err) {
139
+ const msg = err instanceof Error ? err.message : String(err);
140
+ process.stderr.write(`verify_literal_ac: ${msg}\n`);
141
+ return 2;
142
+ }
143
+ }
144
+ const result = evaluateLiteralAcceptanceFromPath(xbriefPath, {
145
+ projectRoot,
146
+ quiet: args.quiet,
147
+ });
148
+ if (result.message.length > 0) {
149
+ if (result.ok) {
150
+ process.stdout.write(`${result.message}\n`);
151
+ }
152
+ else {
153
+ process.stderr.write(`${result.message}\n`);
154
+ }
155
+ }
156
+ return result.code;
157
+ }
158
+ if (process.argv[1] !== undefined && fileURLToPath(import.meta.url) === process.argv[1]) {
159
+ process.exit(run(process.argv.slice(2)));
160
+ }
161
+ //# sourceMappingURL=verify-literal-ac.js.map
@@ -148,6 +148,7 @@ export function run(argv) {
148
148
  allocationContext: allocationContextText,
149
149
  allowDirty: args.allowDirty,
150
150
  parsed,
151
+ projectRoot,
151
152
  });
152
153
  if (result.exitCode === 0 && !args.skipRouting) {
153
154
  const provider = resolveDispatchProvider(process.env);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deftai/directive",
3
- "version": "0.99.0",
3
+ "version": "0.100.0",
4
4
  "description": "Directive CLI — npm install path for the Deft Directive framework.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://deftai.github.io/directive/",
@@ -34,8 +34,8 @@
34
34
  "provenance": true
35
35
  },
36
36
  "dependencies": {
37
- "@deftai/directive-core": "^0.99.0",
38
- "@deftai/directive-content": "^0.99.0"
37
+ "@deftai/directive-core": "^0.100.0",
38
+ "@deftai/directive-content": "^0.100.0"
39
39
  },
40
40
  "scripts": {
41
41
  "build": "tsc -b"