cdalkit 0.1.5 → 0.1.7

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
@@ -29,8 +29,8 @@ npx cdalkit verify # the full deterministic gate: validate, codegen --check,
29
29
 
30
30
  ## Links
31
31
 
32
- - Website and docs: https://cdal-henna.vercel.app
33
- - Getting started: https://cdal-henna.vercel.app/docs/getting-started
34
- - CLI reference: https://cdal-henna.vercel.app/docs/cli-reference
32
+ - Website and docs: https://cdalkit.tech
33
+ - Getting started: https://cdalkit.tech/docs/getting-started
34
+ - CLI reference: https://cdalkit.tech/docs/cli-reference
35
35
 
36
36
  Apache-2.0 © Michał Sznurowski
package/dist/cli.js CHANGED
@@ -81,9 +81,22 @@ var auditCommand = defineCommand({
81
81
 
82
82
  // src/commands/codegen.ts
83
83
  import { runCodegen } from "@cdal/core";
84
- import { policies, requirements, stateMachine } from "@cdal/kinds";
85
84
  import { defineCommand as defineCommand2 } from "citty";
86
85
  import pc2 from "picocolors";
86
+
87
+ // src/kinds.ts
88
+ import { loadConfig } from "@cdal/core";
89
+ import { policies, requirements, stateMachine } from "@cdal/kinds";
90
+ async function resolveCommandKinds(cwd = process.cwd()) {
91
+ const { config } = await loadConfig(cwd);
92
+ const configured = (config.kinds ?? []).filter(
93
+ (kind) => typeof kind.load === "function"
94
+ );
95
+ if (configured.length > 0) return configured;
96
+ return [requirements(), stateMachine(), policies()];
97
+ }
98
+
99
+ // src/commands/codegen.ts
87
100
  var codegenCommand = defineCommand2({
88
101
  meta: {
89
102
  name: "codegen",
@@ -102,11 +115,11 @@ var codegenCommand = defineCommand2({
102
115
  },
103
116
  async run({ args }) {
104
117
  try {
105
- const defaultKinds = [requirements(), stateMachine(), policies()];
118
+ const kinds = await resolveCommandKinds();
106
119
  const res = await runCodegen({
107
120
  contractsDir: args.dir,
108
121
  check: Boolean(args.check),
109
- kinds: defaultKinds
122
+ kinds
110
123
  });
111
124
  if (args.check) {
112
125
  if (!res.drift) {
@@ -144,7 +157,7 @@ import { spawnSync } from "child_process";
144
157
  import { existsSync, readFileSync } from "fs";
145
158
  import { join } from "path";
146
159
  import { syncAdapters } from "@cdal/adapters";
147
- import { loadConfig, runCodegen as runCodegen2 } from "@cdal/core";
160
+ import { loadConfig as loadConfig2, runCodegen as runCodegen2 } from "@cdal/core";
148
161
  import { defineCommand as defineCommand3 } from "citty";
149
162
  import pc3 from "picocolors";
150
163
  function inspectClaudeHooks(settings) {
@@ -322,7 +335,7 @@ var doctorCommand = defineCommand3({
322
335
  console.log(pc3.bold(pc3.cyan("\n\u{1FA7A} Running CDAL Diagnostic Doctor...\n")));
323
336
  let resolvedConfig = null;
324
337
  try {
325
- const loaded = await loadConfig(args.config || cwd);
338
+ const loaded = await loadConfig2(args.config || cwd);
326
339
  resolvedConfig = loaded.config;
327
340
  } catch (err) {
328
341
  console.error(pc3.red(`\u26A0\uFE0F Configuration error: ${String(err)}`));
@@ -381,7 +394,7 @@ var doctorCommand = defineCommand3({
381
394
  // src/commands/hook.ts
382
395
  import fs from "fs";
383
396
  import { executeHook } from "@cdal/adapters";
384
- import { loadConfig as loadConfig2 } from "@cdal/core";
397
+ import { loadConfig as loadConfig3 } from "@cdal/core";
385
398
  import { defineCommand as defineCommand4 } from "citty";
386
399
  var VALID_HOOKS = /* @__PURE__ */ new Set([
387
400
  "guard-paths",
@@ -431,7 +444,7 @@ var hookCommand = defineCommand4({
431
444
  } catch {
432
445
  }
433
446
  const cwd = process.cwd();
434
- const { config } = await loadConfig2(args.config);
447
+ const { config } = await loadConfig3(args.config);
435
448
  const result = await executeHook(hookName, rawPayload, {
436
449
  cwd,
437
450
  config,
@@ -503,8 +516,17 @@ export const REQUIREMENTS = [
503
516
  'cdal validate succeeds without errors',
504
517
  'Test cases are marked with @REQ tags',
505
518
  ],
506
- status: 'ACTIVE',
519
+ status: 'TODO',
507
520
  priority: 'CRITICAL',
521
+ source: 'cdal.config.mjs',
522
+ },
523
+ {
524
+ id: 'REQ-CORE-INIT-2',
525
+ statement: 'Every implemented requirement is proven by a test tagged with its ID.',
526
+ acceptance: ['cdal trace --enforce passes'],
527
+ status: 'TODO',
528
+ priority: 'HIGH',
529
+ source: 'cdal.config.mjs',
508
530
  },
509
531
  ];
510
532
  `;
@@ -596,7 +618,7 @@ export default defineConfig({
596
618
  });
597
619
 
598
620
  // src/commands/phase.ts
599
- import { checkPhase, loadConfig as loadConfig3 } from "@cdal/core";
621
+ import { checkPhase, loadConfig as loadConfig4 } from "@cdal/core";
600
622
  import { defineCommand as defineCommand6 } from "citty";
601
623
  import pc5 from "picocolors";
602
624
  var phaseCommand = defineCommand6({
@@ -632,7 +654,7 @@ var phaseCommand = defineCommand6({
632
654
  }
633
655
  const phase = rawPhase;
634
656
  const cwd = process.cwd();
635
- const { config: resolvedConfig } = await loadConfig3(args.config);
657
+ const { config: resolvedConfig } = await loadConfig4(args.config);
636
658
  const result = checkPhase(phase, {
637
659
  cwd,
638
660
  base: args.base,
@@ -697,6 +719,9 @@ import {
697
719
  import { dirname, isAbsolute, join as join3, relative, resolve as resolve2, sep } from "path";
698
720
  var PRO_MANIFEST_FILE = "pro.manifest.json";
699
721
  var PRO_RECORD_FILE = ".cdal/pro.json";
722
+ function proRecordFile(name) {
723
+ return name === "cdal-pro" ? PRO_RECORD_FILE : `.cdal/${name.replace(/^cdal-/, "")}.json`;
724
+ }
700
725
  var GENERATED_MARKERS = ["CDAL GENERATED", "GENERATED by cdal sync"];
701
726
  function isGeneratedFile(path2) {
702
727
  const content = readFileSync3(path2, "utf8");
@@ -780,7 +805,7 @@ function installPro(options) {
780
805
  }
781
806
  }
782
807
  if (!options.dryRun) {
783
- const recordPath = join3(targetDir, PRO_RECORD_FILE);
808
+ const recordPath = join3(targetDir, proRecordFile(manifest.name));
784
809
  mkdirSync2(dirname(recordPath), { recursive: true });
785
810
  writeFileSync3(
786
811
  recordPath,
@@ -803,6 +828,10 @@ function installPro(options) {
803
828
 
804
829
  // src/commands/pro.ts
805
830
  var PRO_REPOSITORY_URL = "https://github.com/cdalkit/cdal-pro.git";
831
+ var PRO_TEAM_REPOSITORY_URL = "https://github.com/cdalkit/cdal-pro-team.git";
832
+ function proRepositoryUrl(team) {
833
+ return team ? PRO_TEAM_REPOSITORY_URL : PRO_REPOSITORY_URL;
834
+ }
806
835
  function resolveSource(from) {
807
836
  const local = resolve3(from);
808
837
  if (existsSync4(local)) return { dir: local, cleanup: () => {
@@ -830,8 +859,12 @@ var installCommand = defineCommand7({
830
859
  args: {
831
860
  from: {
832
861
  type: "string",
833
- description: "Local copy or git URL of the cdal-pro repository",
834
- default: PRO_REPOSITORY_URL
862
+ description: "Local copy or git URL of the Pro repository (default: cdal-pro, or cdal-pro-team with --team)"
863
+ },
864
+ team: {
865
+ type: "boolean",
866
+ description: "Install CDAL Pro Team (editor guards, presets, playbook) from cdal-pro-team",
867
+ default: false
835
868
  },
836
869
  cwd: {
837
870
  type: "string",
@@ -852,7 +885,7 @@ var installCommand = defineCommand7({
852
885
  run({ args }) {
853
886
  let source;
854
887
  try {
855
- source = resolveSource(args.from);
888
+ source = resolveSource(args.from || proRepositoryUrl(args.team));
856
889
  const result = installPro({
857
890
  sourceDir: source.dir,
858
891
  targetDir: resolve3(args.cwd),
@@ -893,7 +926,7 @@ var proCommand = defineCommand7({
893
926
  });
894
927
 
895
928
  // src/commands/selftest.ts
896
- import { loadConfig as loadConfig4, runSelftest } from "@cdal/core";
929
+ import { loadConfig as loadConfig5, runSelftest } from "@cdal/core";
897
930
  import { defineCommand as defineCommand8 } from "citty";
898
931
  import pc7 from "picocolors";
899
932
  var selftestCommand = defineCommand8({
@@ -914,7 +947,7 @@ var selftestCommand = defineCommand8({
914
947
  },
915
948
  async run({ args }) {
916
949
  const cwd = process.cwd();
917
- const { config: resolvedConfig } = await loadConfig4(args.config);
950
+ const { config: resolvedConfig } = await loadConfig5(args.config);
918
951
  if (!args.json) {
919
952
  console.log(pc7.bold(pc7.cyan("\n cdal selftest \u2014 mutation testing of quality gates")));
920
953
  console.log(
@@ -977,6 +1010,10 @@ var selftestCommand = defineCommand8({
977
1010
  `
978
1011
  )
979
1012
  );
1013
+ if (report.skippedKinds.length > 0) {
1014
+ console.log(pc7.dim(` Skipped (no contract file yet): ${report.skippedKinds.join(", ")}
1015
+ `));
1016
+ }
980
1017
  if (report.failures.length > 0) {
981
1018
  console.log(pc7.bold(pc7.red(" CRITICAL GATE FAILURES:")));
982
1019
  for (const f of report.failures) {
@@ -992,7 +1029,7 @@ var selftestCommand = defineCommand8({
992
1029
 
993
1030
  // src/commands/sync.ts
994
1031
  import { syncAdapters as syncAdapters3 } from "@cdal/adapters";
995
- import { loadConfig as loadConfig5 } from "@cdal/core";
1032
+ import { loadConfig as loadConfig6 } from "@cdal/core";
996
1033
  import { defineCommand as defineCommand9 } from "citty";
997
1034
  import pc8 from "picocolors";
998
1035
  var syncCommand = defineCommand9({
@@ -1018,7 +1055,7 @@ var syncCommand = defineCommand9({
1018
1055
  async run({ args }) {
1019
1056
  try {
1020
1057
  const cwd = args.cwd || process.cwd();
1021
- const { config } = await loadConfig5(args.config || cwd);
1058
+ const { config } = await loadConfig6(args.config || cwd);
1022
1059
  const res = syncAdapters3({
1023
1060
  cwd,
1024
1061
  config,
@@ -1081,7 +1118,7 @@ import { pathToFileURL } from "url";
1081
1118
  import {
1082
1119
  formatTraceMarkdown,
1083
1120
  formatTraceText,
1084
- loadConfig as loadConfig6,
1121
+ loadConfig as loadConfig7,
1085
1122
  scanTrace
1086
1123
  } from "@cdal/core";
1087
1124
  import { defineCommand as defineCommand10 } from "citty";
@@ -1118,24 +1155,24 @@ var traceCommand = defineCommand10({
1118
1155
  },
1119
1156
  async run({ args }) {
1120
1157
  const cwd = process.cwd();
1121
- const { config: resolvedConfig } = await loadConfig6(args.config);
1158
+ const { config: resolvedConfig } = await loadConfig7(args.config);
1122
1159
  const contractsDir = resolvedConfig?.contractsDir ?? "contracts";
1123
1160
  const reqContractPath = path.resolve(cwd, contractsDir, "requirements.contract.mjs");
1124
- let requirements3 = [];
1161
+ let requirements2 = [];
1125
1162
  try {
1126
1163
  const imported = await import(pathToFileURL(reqContractPath).href);
1127
- requirements3 = imported.REQUIREMENTS || imported.default?.REQUIREMENTS || imported.default || [];
1164
+ requirements2 = imported.REQUIREMENTS || imported.default?.REQUIREMENTS || imported.default || [];
1128
1165
  } catch (err) {
1129
1166
  const errorMsg = err instanceof Error ? err.message : String(err);
1130
1167
  console.error(pc9.red(`Failed to load requirements from "${reqContractPath}": ${errorMsg}`));
1131
1168
  process.exit(1);
1132
1169
  }
1133
- if (!Array.isArray(requirements3) || requirements3.length === 0) {
1170
+ if (!Array.isArray(requirements2) || requirements2.length === 0) {
1134
1171
  console.warn(pc9.yellow(`No requirements found in "${reqContractPath}".`));
1135
1172
  if (args.enforce) process.exit(1);
1136
1173
  return;
1137
1174
  }
1138
- const report = scanTrace(requirements3, {
1175
+ const report = scanTrace(requirements2, {
1139
1176
  cwd,
1140
1177
  resultsFile: args.results
1141
1178
  });
@@ -1154,7 +1191,6 @@ var traceCommand = defineCommand10({
1154
1191
 
1155
1192
  // src/commands/validate.ts
1156
1193
  import { formatFindingsText, runValidation } from "@cdal/core";
1157
- import { policies as policies2, requirements as requirements2, stateMachine as stateMachine2 } from "@cdal/kinds";
1158
1194
  import { defineCommand as defineCommand11 } from "citty";
1159
1195
  import pc10 from "picocolors";
1160
1196
  var validateCommand = defineCommand11({
@@ -1180,11 +1216,11 @@ var validateCommand = defineCommand11({
1180
1216
  },
1181
1217
  async run({ args }) {
1182
1218
  try {
1183
- const defaultKinds = [requirements2(), stateMachine2(), policies2()];
1219
+ const kinds = await resolveCommandKinds();
1184
1220
  const report = await runValidation({
1185
1221
  contractsDir: args.dir,
1186
1222
  strict: Boolean(args.strict),
1187
- kinds: defaultKinds
1223
+ kinds
1188
1224
  });
1189
1225
  if (args.json) {
1190
1226
  console.log(JSON.stringify(report, null, 2));
@@ -1209,7 +1245,7 @@ var validateCommand = defineCommand11({
1209
1245
 
1210
1246
  // src/commands/verify.ts
1211
1247
  import { spawnSync as spawnSync2 } from "child_process";
1212
- import { loadConfig as loadConfig7 } from "@cdal/core";
1248
+ import { loadConfig as loadConfig8 } from "@cdal/core";
1213
1249
  import { defineCommand as defineCommand12 } from "citty";
1214
1250
  import pc11 from "picocolors";
1215
1251
  var verifyCommand = defineCommand12({
@@ -1244,7 +1280,7 @@ var verifyCommand = defineCommand12({
1244
1280
  },
1245
1281
  async run({ args }) {
1246
1282
  const cwd = args.cwd || process.cwd();
1247
- const { config } = await loadConfig7(args.config || cwd);
1283
+ const { config } = await loadConfig8(args.config || cwd);
1248
1284
  let steps = [...config.verify];
1249
1285
  if (args.fast) {
1250
1286
  steps = steps.filter(
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.ts","../src/commands/audit.ts","../src/commands/codegen.ts","../src/commands/doctor.ts","../src/commands/hook.ts","../src/commands/init.ts","../src/commands/phase.ts","../src/commands/pro.ts","../src/pro/install.ts","../src/commands/selftest.ts","../src/commands/sync.ts","../src/commands/trace.ts","../src/commands/validate.ts","../src/commands/verify.ts","../src/commands/window.ts"],"sourcesContent":["import { createRequire } from 'node:module';\nimport { runMain as cittyRunMain, defineCommand } from 'citty';\nimport { auditCommand } from './commands/audit.js';\nimport { codegenCommand } from './commands/codegen.js';\nimport { doctorCommand } from './commands/doctor.js';\nimport { hookCommand } from './commands/hook.js';\nimport { initCommand } from './commands/init.js';\nimport { phaseCommand } from './commands/phase.js';\nimport { proCommand } from './commands/pro.js';\nimport { selftestCommand } from './commands/selftest.js';\nimport { syncCommand } from './commands/sync.js';\nimport { traceCommand } from './commands/trace.js';\nimport { validateCommand } from './commands/validate.js';\nimport { verifyCommand } from './commands/verify.js';\nimport { windowCommand } from './commands/window.js';\n\n// Read the version from package.json so `--version` always matches the published package.\nconst { version } = createRequire(import.meta.url)('../package.json') as { version: string };\n\nconst main = defineCommand({\n meta: {\n name: 'cdal',\n version,\n description: 'Contract-Driven Agentic Loop (CDAL) Quality Gates & Audit CLI',\n },\n subCommands: {\n init: initCommand,\n validate: validateCommand,\n codegen: codegenCommand,\n window: windowCommand,\n trace: traceCommand,\n phase: phaseCommand,\n selftest: selftestCommand,\n sync: syncCommand,\n verify: verifyCommand,\n doctor: doctorCommand,\n hook: hookCommand,\n audit: auditCommand,\n pro: proCommand,\n },\n});\n\nexport function runMain() {\n cittyRunMain(main);\n}\n","import { writeFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { renderHtmlReport, renderTerminalReport, runAudit } from '@cdal/audit';\nimport type { AuditLanguage } from '@cdal/audit';\nimport { defineCommand } from 'citty';\nimport pc from 'picocolors';\n\nexport const auditCommand = defineCommand({\n meta: {\n name: 'audit',\n description:\n 'Audit repository for AI agent hygiene, type silencing, test isolation and gates (100% offline)',\n },\n args: {\n path: {\n type: 'positional',\n description: 'Path to repository root to audit',\n required: false,\n default: '.',\n },\n html: {\n type: 'string',\n description: 'Path to save standalone single-file HTML report (e.g. audit-report.html)',\n required: false,\n },\n json: {\n type: 'boolean',\n description: 'Output machine-readable JSON report (schema: audit.v1)',\n default: false,\n },\n lang: {\n type: 'string',\n description: 'Report language (en or pl)',\n default: 'en',\n },\n failUnder: {\n type: 'string',\n description: 'Exit with code 1 if audit score is below this threshold (0-100)',\n required: false,\n },\n },\n async run({ args }) {\n const targetDir = resolve(args.path || '.');\n const lang = (args.lang === 'pl' ? 'pl' : 'en') as AuditLanguage;\n\n if (!args.json) {\n console.log(pc.bold(pc.cyan('\\n🔍 Running CDAL Repository AI Hygiene Audit...\\n')));\n }\n\n const report = await runAudit({\n cwd: targetDir,\n lang,\n });\n\n if (args.html) {\n const htmlContent = renderHtmlReport(report, lang);\n const outPath = resolve(args.html);\n writeFileSync(outPath, htmlContent, 'utf8');\n if (!args.json) {\n console.log(pc.green(` ✔ Wygenerowano raport HTML: ${outPath}`));\n }\n }\n\n if (args.json) {\n console.log(JSON.stringify(report, null, 2));\n } else {\n console.log(renderTerminalReport(report, lang));\n }\n\n if (args.failUnder) {\n const threshold = Number.parseInt(args.failUnder, 10);\n if (!Number.isNaN(threshold) && report.score < threshold) {\n console.error(\n pc.red(\n `\\n❌ Audit score ${report.score} is below threshold ${threshold}. Failing quality gate.`,\n ),\n );\n process.exit(1);\n }\n }\n },\n});\n","import { runCodegen } from '@cdal/core';\nimport { policies, requirements, stateMachine } from '@cdal/kinds';\nimport { defineCommand } from 'citty';\nimport pc from 'picocolors';\n\nexport const codegenCommand = defineCommand({\n meta: {\n name: 'codegen',\n description:\n 'Emit TypeScript types and documentation from contracts (with --check drift detection)',\n },\n args: {\n check: {\n type: 'boolean',\n description: 'Check for drift between contracts and generated files without modifying disk',\n default: false,\n },\n dir: {\n type: 'string',\n description: 'Custom path to contracts directory',\n },\n },\n async run({ args }) {\n try {\n const defaultKinds = [requirements(), stateMachine(), policies()];\n\n const res = await runCodegen({\n contractsDir: args.dir,\n check: Boolean(args.check),\n kinds: defaultKinds,\n });\n\n if (args.check) {\n if (!res.drift) {\n console.log(pc.green('✅ Codegen check: all generated files are in sync byte-for-byte.'));\n } else {\n console.error(pc.red('❌ Codegen check failed: drift detected in generated files:'));\n for (const f of res.files) {\n if (f.status === 'drift') {\n console.error(pc.red(` - [DRIFT] ${f.path} (${f.fullPath})`));\n } else if (f.status === 'missing') {\n console.error(pc.red(` - [MISSING] ${f.path} (${f.fullPath})`));\n }\n }\n console.error(\n pc.yellow('\\nRun `cdal codegen` to synchronize generated files with contracts.'),\n );\n process.exit(1);\n }\n } else {\n console.log(pc.green(`✅ Emitted ${res.files.length} contract artifact(s):`));\n for (const f of res.files) {\n console.log(pc.cyan(` - ${f.path} -> ${f.fullPath}`));\n }\n }\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n console.error(pc.red(`❌ Fatal error during codegen: ${msg}`));\n process.exit(1);\n }\n },\n});\n","import { spawnSync } from 'node:child_process';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { syncAdapters } from '@cdal/adapters';\nimport { type ContractKind, type ResolvedCdalConfig, loadConfig, runCodegen } from '@cdal/core';\nimport { defineCommand } from 'citty';\nimport pc from 'picocolors';\n\nexport interface DoctorCheckResult {\n name: string;\n status: 'ok' | 'warn' | 'error';\n message: string;\n recommendation?: string;\n}\n\n/**\n * Claude Code only runs hooks declared as matcher groups with typed handlers:\n * { matcher, hooks: [{ type: 'command', command }] }. A `command` placed\n * directly on the group is silently ignored.\n */\nfunction inspectClaudeHooks(settings: {\n hooks?: Record<string, unknown>;\n}): 'ok' | 'legacy-format' | 'missing' {\n const groups = settings.hooks?.PreToolUse;\n if (!Array.isArray(groups)) return 'missing';\n let legacy = false;\n for (const group of groups as Array<Record<string, unknown>>) {\n if (typeof group.command === 'string' && /cdal(kit)? hook/.test(group.command)) legacy = true;\n const handlers = Array.isArray(group.hooks)\n ? (group.hooks as Array<Record<string, unknown>>)\n : [];\n for (const handler of handlers) {\n if (\n handler.type === 'command' &&\n typeof handler.command === 'string' &&\n /cdal(kit)? hook guard-paths/.test(handler.command)\n ) {\n return 'ok';\n }\n }\n }\n return legacy ? 'legacy-format' : 'missing';\n}\n\nexport function runDoctorChecks(\n cwd: string,\n customConfig?: string,\n): {\n checks: DoctorCheckResult[];\n healthy: boolean;\n} {\n const checks: DoctorCheckResult[] = [];\n\n // 1. Node version check (requires >= 20.9.0)\n const nodeVer = process.version;\n const match = /^v(\\d+)\\.(\\d+)\\./.exec(nodeVer);\n const major = match?.[1] ? Number.parseInt(match[1], 10) : 0;\n const minor = match?.[2] ? Number.parseInt(match[2], 10) : 0;\n\n if (major > 20 || (major === 20 && minor >= 9)) {\n checks.push({\n name: 'Node.js Runtime',\n status: 'ok',\n message: `Node ${nodeVer} satisfies engines.node >= 20.9.0 LTS`,\n });\n } else {\n checks.push({\n name: 'Node.js Runtime',\n status: 'error',\n message: `Current Node ${nodeVer} is below required >= 20.9.0`,\n recommendation: 'Upgrade Node.js to Node 22 LTS or Node 20.9+.',\n });\n }\n\n // 2. Git installation and repository check\n const gitVersionRes = spawnSync('git', ['--version'], { encoding: 'utf8' });\n if (gitVersionRes.status !== 0) {\n checks.push({\n name: 'Git Binary',\n status: 'error',\n message: 'git binary is not available in PATH',\n recommendation: 'Install Git or add it to PATH.',\n });\n } else {\n checks.push({\n name: 'Git Binary',\n status: 'ok',\n message: `Git is available (${gitVersionRes.stdout.trim()})`,\n });\n\n const gitRepoRes = spawnSync('git', ['rev-parse', '--is-inside-work-tree'], {\n cwd,\n encoding: 'utf8',\n });\n if (gitRepoRes.status !== 0) {\n checks.push({\n name: 'Git Repository',\n status: 'error',\n message: 'Current directory is not inside a git working tree',\n recommendation: 'Initialize git with `git init`.',\n });\n } else {\n checks.push({\n name: 'Git Repository',\n status: 'ok',\n message: 'Inside active git working tree',\n });\n }\n }\n\n // 3. Configuration check\n let configObj: ResolvedCdalConfig | null = null;\n try {\n const loaded = loadConfigSync(cwd, customConfig);\n configObj = loaded.config;\n checks.push({\n name: 'Configuration',\n status: 'ok',\n message: `Configuration loaded cleanly (${loaded.filepath ? loaded.filepath : 'default config'})`,\n });\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n checks.push({\n name: 'Configuration',\n status: 'error',\n message: `Failed to load cdal.config.mjs: ${msg}`,\n recommendation: 'Run `cdal init` or fix configuration errors.',\n });\n }\n\n // 4. Hook wiring check in .claude/settings.json\n const settingsPath = join(cwd, '.claude/settings.json');\n if (existsSync(settingsPath)) {\n try {\n const settings = JSON.parse(readFileSync(settingsPath, 'utf8')) as {\n hooks?: Record<string, unknown>;\n };\n const wiring = inspectClaudeHooks(settings);\n if (wiring === 'ok') {\n checks.push({\n name: 'Claude Code Hooks',\n status: 'ok',\n message: '.claude/settings.json correctly wires CDAL pre-tool hooks',\n });\n } else {\n checks.push({\n name: 'Claude Code Hooks',\n status: 'warn',\n message:\n wiring === 'legacy-format'\n ? '.claude/settings.json uses a hook format Claude Code ignores, so the CDAL gates never run'\n : '.claude/settings.json exists but does not wire the CDAL guard-paths hook',\n recommendation: 'Run `npx cdalkit sync` to regenerate the hook wiring.',\n });\n }\n } catch {\n checks.push({\n name: 'Claude Code Hooks',\n status: 'warn',\n message: 'Could not read .claude/settings.json',\n });\n }\n } else {\n checks.push({\n name: 'Claude Code Hooks',\n status: 'warn',\n message: 'No .claude/settings.json found in workspace',\n recommendation: 'Run `cdal init` or `cdal sync` to generate hook wiring.',\n });\n }\n\n // 5. Adapter drift check\n if (configObj) {\n try {\n const syncRes = syncAdapters({ cwd, config: configObj, check: true });\n if (syncRes.inSync) {\n checks.push({\n name: 'Runtime Adapters Sync',\n status: 'ok',\n message: `All ${syncRes.totalFiles} adapter file(s) are in sync without drift`,\n });\n } else {\n checks.push({\n name: 'Runtime Adapters Sync',\n status: 'error',\n message: `${syncRes.driftedFiles.length} adapter file(s) drifted from configuration: ${syncRes.driftedFiles.join(', ')}`,\n recommendation: 'Run `cdal sync` to synchronize runtime files.',\n });\n }\n } catch (err: unknown) {\n checks.push({\n name: 'Runtime Adapters Sync',\n status: 'warn',\n message: `Could not check adapter sync: ${String(err)}`,\n });\n }\n }\n\n const healthy = checks.every((c) => c.status !== 'error');\n return { checks, healthy };\n}\n\nfunction loadConfigSync(cwd: string, customConfig?: string) {\n const configPath = customConfig || join(cwd, 'cdal.config.mjs');\n if (existsSync(configPath)) {\n return { config: null, filepath: configPath };\n }\n return { config: null, filepath: null };\n}\n\nexport const doctorCommand = defineCommand({\n meta: {\n name: 'doctor',\n description:\n 'Diagnose CDAL installation, environment health, hook wiring, and configuration drift',\n },\n args: {\n config: {\n type: 'string',\n description: 'Path to cdal.config.mjs',\n },\n cwd: {\n type: 'string',\n description: 'Working directory path',\n },\n },\n async run({ args }) {\n const cwd = args.cwd || process.cwd();\n console.log(pc.bold(pc.cyan('\\n🩺 Running CDAL Diagnostic Doctor...\\n')));\n\n let resolvedConfig: ResolvedCdalConfig | null = null;\n try {\n const loaded = await loadConfig(args.config || cwd);\n resolvedConfig = loaded.config;\n } catch (err: unknown) {\n console.error(pc.red(`⚠️ Configuration error: ${String(err)}`));\n }\n\n const { checks, healthy } = runDoctorChecks(cwd, args.config);\n\n // If we loaded config, also test runCodegen drift\n if (resolvedConfig) {\n try {\n const codegenRes = await runCodegen({\n contractsDir: resolvedConfig.contractsDir,\n kinds: resolvedConfig.kinds as unknown as ContractKind<unknown>[],\n check: true,\n });\n if (!codegenRes.drift) {\n checks.push({\n name: 'Contract Codegen Sync',\n status: 'ok',\n message: 'Generated contract artifacts match contracts byte-for-byte',\n });\n } else {\n checks.push({\n name: 'Contract Codegen Sync',\n status: 'error',\n message: 'Generated contract code drifted from contract sources',\n recommendation: 'Run `cdal codegen` to regenerate artifacts.',\n });\n }\n } catch {\n // ignore codegen errors in doctor if contractsDir empty\n }\n }\n\n for (const check of checks) {\n if (check.status === 'ok') {\n console.log(pc.green(` ✓ [OK] ${pc.bold(check.name)}: ${check.message}`));\n } else if (check.status === 'warn') {\n console.log(pc.yellow(` ⚠️ [WARN] ${pc.bold(check.name)}: ${check.message}`));\n if (check.recommendation) {\n console.log(pc.dim(` Recommendation: ${check.recommendation}`));\n }\n } else {\n console.log(pc.red(` ❌ [FAIL] ${pc.bold(check.name)}: ${check.message}`));\n if (check.recommendation) {\n console.log(pc.yellow(` Recommendation: ${check.recommendation}`));\n }\n }\n }\n\n if (healthy) {\n console.log(\n pc.bold(pc.green('\\n✅ Doctor report: Environment and CDAL quality gates are healthy!\\n')),\n );\n } else {\n console.log(pc.bold(pc.red('\\n❌ Doctor report: Some critical diagnostic checks failed.\\n')));\n process.exit(1);\n }\n },\n});\n","import fs from 'node:fs';\nimport { type HookName, executeHook } from '@cdal/adapters';\nimport { loadConfig } from '@cdal/core';\nimport { defineCommand } from 'citty';\n\nconst VALID_HOOKS = new Set([\n 'guard-paths',\n 'guard-forbidden',\n 'guard-bash',\n 'session-context',\n 'log-subagent',\n]);\n\nexport const hookCommand = defineCommand({\n meta: {\n name: 'hook',\n description: 'Entrypoint for agent runtime hooks (Claude Code, Antigravity, etc.)',\n },\n args: {\n name: {\n type: 'positional',\n description:\n 'Hook name to execute: guard-paths, guard-forbidden, guard-bash, session-context, log-subagent',\n required: true,\n },\n role: {\n type: 'positional',\n description: 'Fallback agent role name if not specified in hook payload',\n required: false,\n },\n runtime: {\n type: 'string',\n description: 'Target runtime adapter (claude-code, antigravity)',\n default: 'claude-code',\n },\n config: {\n type: 'string',\n description: 'Path to cdal.config.mjs',\n },\n },\n async run({ args }) {\n const hookName = args.name as HookName;\n if (!VALID_HOOKS.has(hookName)) {\n process.stderr.write(\n `Unknown hook name \"${hookName}\". Valid hooks: ${Array.from(VALID_HOOKS).join(', ')}\\n`,\n );\n process.exit(1);\n }\n\n let rawPayload = '';\n try {\n rawPayload = fs.readFileSync(0, 'utf8');\n } catch {\n // stdin was not piped or not accessible\n }\n\n const cwd = process.cwd();\n const { config } = await loadConfig(args.config);\n\n const result = await executeHook(hookName, rawPayload, {\n cwd,\n config,\n fallbackRole: args.role,\n runtime: args.runtime as 'claude-code' | 'antigravity' | 'generic',\n });\n\n if (result.stdout) {\n process.stdout.write(`${result.stdout}\\n`);\n }\n\n if (result.stderr) {\n process.stderr.write(result.stderr);\n }\n\n process.exit(result.exitCode);\n },\n});\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { syncAdapters } from '@cdal/adapters';\nimport { resolveConfig } from '@cdal/core';\nimport { defineCommand } from 'citty';\nimport pc from 'picocolors';\n\nexport const initCommand = defineCommand({\n meta: {\n name: 'init',\n description:\n 'Initialize CDAL quality gates, starter contracts, and runtime adapters in the repository',\n },\n args: {\n yes: {\n type: 'boolean',\n description: 'Accept default recommendations non-interactively',\n alias: 'y',\n default: false,\n },\n preset: {\n type: 'string',\n description: 'Preset configuration to apply (e.g. typescript-strict, nextjs, node-service)',\n default: 'typescript-strict',\n },\n runtime: {\n type: 'string',\n description: 'Comma-separated runtimes to enable (claude-code, agents-md, antigravity)',\n default: 'claude-code,agents-md',\n },\n cwd: {\n type: 'string',\n description: 'Target directory to initialize',\n },\n },\n async run({ args }) {\n const cwd = args.cwd || process.cwd();\n console.log(pc.bold(pc.cyan('\\n🚀 Initializing Contract-Driven Agentic Loop (CDAL)...\\n')));\n\n const preset = args.preset || 'typescript-strict';\n const rawRuntimes = (args.runtime || 'claude-code,agents-md')\n .split(',')\n .map((r) => r.trim())\n .filter(Boolean);\n\n // 1. Create contracts directory and sample contract if missing\n const contractsDir = join(cwd, 'contracts');\n if (!existsSync(contractsDir)) {\n mkdirSync(contractsDir, { recursive: true });\n }\n\n const sampleContractPath = join(contractsDir, 'requirements.contract.mjs');\n if (!existsSync(sampleContractPath)) {\n const sampleContractContent = `// @origin: cdal init\nexport const REQUIREMENTS = [\n {\n id: 'REQ-CORE-INIT-1',\n statement: 'System must initialize workspace with contract-driven quality gates.',\n acceptance: [\n 'cdal validate succeeds without errors',\n 'Test cases are marked with @REQ tags',\n ],\n status: 'ACTIVE',\n priority: 'CRITICAL',\n },\n];\n`;\n writeFileSync(sampleContractPath, sampleContractContent, 'utf8');\n console.log(\n pc.green(` ✓ Created starter contract: ${pc.bold('contracts/requirements.contract.mjs')}`),\n );\n }\n\n // 2. Create cdal.config.mjs if missing\n const configPath = join(cwd, 'cdal.config.mjs');\n if (!existsSync(configPath)) {\n const runtimesFormatted = rawRuntimes.map((r) => `'${r}'`).join(', ');\n const configContent = `import { defineConfig } from '@cdal/core';\nimport { policies, requirements, stateMachine } from '@cdal/kinds';\n\nexport default defineConfig({\n contractsDir: 'contracts',\n generated: {\n ts: 'src/generated/contracts',\n docs: 'docs/generated',\n },\n kinds: [requirements(), stateMachine(), policies()],\n presets: ['${preset}'],\n runtimes: [${runtimesFormatted}],\n verify: [\n 'cdal validate --strict',\n 'cdal codegen --check',\n 'cdal trace --enforce',\n 'cdal selftest',\n ],\n});\n`;\n writeFileSync(configPath, configContent, 'utf8');\n console.log(pc.green(` ✓ Created configuration: ${pc.bold('cdal.config.mjs')}`));\n } else {\n console.log(\n pc.dim(' ℹ cdal.config.mjs already exists (preserving existing configuration).'),\n );\n }\n\n // 3. Update package.json scripts if package.json exists\n const pkgPath = join(cwd, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkgRaw = readFileSync(pkgPath, 'utf8');\n const pkg = JSON.parse(pkgRaw);\n pkg.scripts = pkg.scripts || {};\n let updated = false;\n\n if (!pkg.scripts.verify) {\n pkg.scripts.verify = 'cdal verify';\n updated = true;\n }\n if (!pkg.scripts.selftest) {\n pkg.scripts.selftest = 'cdal selftest';\n updated = true;\n }\n if (!pkg.scripts.trace) {\n pkg.scripts.trace = 'cdal trace';\n updated = true;\n }\n\n if (updated) {\n writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\\n`, 'utf8');\n console.log(\n pc.green(` ✓ Added verify/selftest/trace scripts to ${pc.bold('package.json')}`),\n );\n }\n } catch {\n console.log(pc.yellow(' ⚠️ Could not update package.json scripts automatically.'));\n }\n }\n\n // 4. Synchronize adapter files across selected runtimes\n const resolvedConfig = resolveConfig({\n presets: [preset],\n runtimes: rawRuntimes,\n });\n\n const syncRes = syncAdapters({\n cwd,\n config: resolvedConfig,\n check: false,\n });\n\n console.log(\n pc.green(\n ` ✓ Generated ${syncRes.updatedFiles.length} runtime adapter file(s) across [${rawRuntimes.join(', ')}].`,\n ),\n );\n\n console.log(pc.bold(pc.green('\\n🎉 CDAL initialized successfully!')));\n console.log(pc.cyan('Next steps:'));\n console.log(pc.dim(' 1. Review contracts in contracts/*.contract.mjs'));\n console.log(pc.dim(' 2. Run `npx cdalkit doctor` to verify environment health'));\n console.log(pc.dim(' 3. Run `npx cdalkit verify` to test the loop gate\\n'));\n },\n});\n","import { type PhaseType, checkPhase, loadConfig } from '@cdal/core';\nimport { defineCommand } from 'citty';\nimport pc from 'picocolors';\n\nexport const phaseCommand = defineCommand({\n meta: {\n name: 'phase',\n description: 'Verify git diff against active loop phase (contract, red, green)',\n },\n args: {\n phase: {\n type: 'positional',\n description: 'Phase to verify: contract, red, green',\n required: true,\n },\n base: {\n type: 'string',\n description: 'Base git reference to compare against (e.g. main or origin/main)',\n },\n json: {\n type: 'boolean',\n description: 'Output as JSON payload',\n default: false,\n },\n config: {\n type: 'string',\n description: 'Path to cdal.config.mjs',\n },\n },\n async run({ args }) {\n const rawPhase = (args.phase || '').toLowerCase();\n if (!['contract', 'red', 'green'].includes(rawPhase)) {\n console.error(pc.red(`Invalid phase \"${rawPhase}\". Valid phases are: contract, red, green.`));\n process.exit(2);\n }\n const phase = rawPhase as PhaseType;\n\n const cwd = process.cwd();\n const { config: resolvedConfig } = await loadConfig(args.config);\n\n const result = checkPhase(phase, {\n cwd,\n base: args.base,\n protectedPaths: resolvedConfig?.protectedPaths,\n });\n\n if (args.json) {\n console.log(JSON.stringify(result, null, 2));\n process.exit(result.ok ? 0 : 1);\n }\n\n console.log(pc.bold(`\\n Phase: ${result.label}`));\n console.log(` Modified files in diff: ${result.files.length}\\n`);\n\n if (result.violations.length === 0) {\n if (result.files.length === 0) {\n if (phase === 'red') {\n console.log(\n pc.yellow(\n ' ⚠ No changes found in working tree. Phase RED requires at least one test.',\n ),\n );\n process.exit(1);\n }\n console.log(pc.dim(' No changes found in working tree.'));\n process.exit(0);\n }\n console.log(pc.green(' ✔ All changes are within active phase scopes.'));\n process.exit(0);\n }\n\n console.log(\n pc.red(` ✗ ${result.violations.length} file(s) outside of permitted phase scope:\\n`),\n );\n for (const v of result.violations) {\n console.log(` - ${v}`);\n }\n console.log(pc.dim(`\\n ${result.why}\\n`));\n process.exit(1);\n },\n});\n","import { execFileSync } from 'node:child_process';\nimport { existsSync, mkdtempSync, rmSync } from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport { join, resolve } from 'node:path';\nimport { defineCommand } from 'citty';\nimport pc from 'picocolors';\nimport { ProInstallError, installPro } from '../pro/install.js';\n\nexport const PRO_REPOSITORY_URL = 'https://github.com/cdalkit/cdal-pro.git';\n\n/** Clones a git source into a temp directory; local directories are used as-is. */\nfunction resolveSource(from: string): { dir: string; cleanup: () => void } {\n const local = resolve(from);\n if (existsSync(local)) return { dir: local, cleanup: () => {} };\n\n const dir = mkdtempSync(join(tmpdir(), 'cdal-pro-'));\n const cleanup = () => rmSync(dir, { recursive: true, force: true });\n try {\n execFileSync('git', ['clone', '--depth', '1', '--quiet', from, dir], {\n stdio: ['ignore', 'ignore', 'pipe'],\n });\n } catch {\n cleanup();\n throw new ProInstallError(\n `Could not clone ${from}.\\n CDAL Pro is delivered as a private GitHub repository: accept the invitation sent after your purchase, make sure git can access GitHub as that account, then run this command again.`,\n );\n }\n return { dir, cleanup };\n}\n\nconst installCommand = defineCommand({\n meta: {\n name: 'install',\n description: 'Install CDAL Pro content (agent roles, templates, presets) into this project',\n },\n args: {\n from: {\n type: 'string',\n description: 'Local copy or git URL of the cdal-pro repository',\n default: PRO_REPOSITORY_URL,\n },\n cwd: {\n type: 'string',\n description: 'Project directory to install into',\n default: '.',\n },\n force: {\n type: 'boolean',\n description: 'Overwrite files that already exist in the project',\n default: false,\n },\n dryRun: {\n type: 'boolean',\n description: 'Show what would be installed without writing anything',\n default: false,\n },\n },\n run({ args }) {\n let source: { dir: string; cleanup: () => void } | undefined;\n try {\n source = resolveSource(args.from);\n const result = installPro({\n sourceDir: source.dir,\n targetDir: resolve(args.cwd),\n force: args.force,\n dryRun: args.dryRun,\n });\n\n const verb = args.dryRun ? 'Would install' : 'Installed';\n console.log(pc.green(`✔ ${verb} ${result.name} ${result.version}`));\n console.log(` ${result.written.length} file(s) ${args.dryRun ? 'to write' : 'written'}`);\n if (result.skipped.length > 0) {\n console.log(\n pc.yellow(\n ` ${result.skipped.length} existing file(s) kept — rerun with --force to overwrite:`,\n ),\n );\n for (const file of result.skipped) console.log(pc.dim(` ${file}`));\n }\n if (!args.dryRun) {\n console.log(pc.dim(' Run `npx cdalkit sync` to wire the new roles into your runtimes.'));\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n console.error(pc.red(`✖ ${message}`));\n process.exit(1);\n } finally {\n source?.cleanup();\n }\n },\n});\n\nexport const proCommand = defineCommand({\n meta: {\n name: 'pro',\n description: 'CDAL Pro: install licensed agent roles, templates and presets',\n },\n subCommands: {\n install: installCommand,\n },\n});\n","import {\n copyFileSync,\n existsSync,\n mkdirSync,\n readFileSync,\n readdirSync,\n statSync,\n writeFileSync,\n} from 'node:fs';\nimport { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';\n\nexport const PRO_MANIFEST_FILE = 'pro.manifest.json';\nexport const PRO_RECORD_FILE = '.cdal/pro.json';\n\n// Files carrying these markers were generated by `cdalkit sync`/`init` and can be regenerated,\n// so Pro content may replace them; anything else in the project is user-owned.\nconst GENERATED_MARKERS = ['CDAL GENERATED', 'GENERATED by cdal sync'];\n\nfunction isGeneratedFile(path: string): boolean {\n const content = readFileSync(path, 'utf8');\n return GENERATED_MARKERS.some((marker) => content.includes(marker));\n}\n\nexport class ProInstallError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ProInstallError';\n }\n}\n\nexport interface ProManifest {\n name: string;\n version: string;\n install: Array<{ from: string; to: string }>;\n}\n\nexport interface ProInstallOptions {\n /** Directory containing pro.manifest.json (a clone of cdal-pro or a local copy). */\n sourceDir: string;\n /** Project root to install into. */\n targetDir: string;\n /** Overwrite files that already exist in the project. */\n force?: boolean;\n /** Report what would be written without touching the project. */\n dryRun?: boolean;\n}\n\nexport interface ProInstallResult {\n name: string;\n version: string;\n /** Project-relative paths written (or, in dry-run mode, that would be written). */\n written: string[];\n /** Project-relative paths left untouched because they already exist. */\n skipped: string[];\n}\n\nfunction toPosix(path: string): string {\n return path.split(sep).join('/');\n}\n\n/** Resolves `rel` under `root`, refusing absolute paths and anything that escapes `root`. */\nfunction resolveInside(root: string, rel: string, label: string): string {\n if (typeof rel !== 'string' || rel.length === 0 || isAbsolute(rel)) {\n throw new ProInstallError(`Invalid ${label} path in ${PRO_MANIFEST_FILE}: \"${rel}\"`);\n }\n const full = resolve(root, rel);\n const fromRoot = relative(root, full);\n if (fromRoot.startsWith('..') || isAbsolute(fromRoot)) {\n throw new ProInstallError(`${label} path \"${rel}\" escapes its directory`);\n }\n return full;\n}\n\nexport function readProManifest(sourceDir: string): ProManifest {\n const manifestPath = join(sourceDir, PRO_MANIFEST_FILE);\n if (!existsSync(manifestPath)) {\n throw new ProInstallError(`No ${PRO_MANIFEST_FILE} found in ${sourceDir}`);\n }\n let manifest: ProManifest;\n try {\n manifest = JSON.parse(readFileSync(manifestPath, 'utf8')) as ProManifest;\n } catch (err) {\n throw new ProInstallError(\n `${PRO_MANIFEST_FILE} is not valid JSON: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n if (!manifest.name || !manifest.version || !Array.isArray(manifest.install)) {\n throw new ProInstallError(`${PRO_MANIFEST_FILE} must define name, version and install[]`);\n }\n return manifest;\n}\n\nfunction listFiles(dir: string): string[] {\n const files: string[] = [];\n for (const entry of readdirSync(dir, { withFileTypes: true })) {\n const full = join(dir, entry.name);\n if (entry.isDirectory()) files.push(...listFiles(full));\n else if (entry.isFile()) files.push(full);\n }\n return files;\n}\n\nexport function installPro(options: ProInstallOptions): ProInstallResult {\n const sourceDir = resolve(options.sourceDir);\n const targetDir = resolve(options.targetDir);\n const manifest = readProManifest(sourceDir);\n\n // Resolve every mapping before writing anything, so a bad entry aborts cleanly.\n const plan: Array<{ src: string; dest: string; rel: string }> = [];\n for (const mapping of manifest.install) {\n const from = resolveInside(sourceDir, mapping.from, 'from');\n const to = resolveInside(targetDir, mapping.to, 'to');\n if (!existsSync(from)) {\n throw new ProInstallError(`Manifest source \"${mapping.from}\" does not exist`);\n }\n const sources = statSync(from).isDirectory() ? listFiles(from) : [from];\n for (const src of sources) {\n const dest = statSync(from).isDirectory() ? join(to, relative(from, src)) : to;\n plan.push({ src, dest, rel: toPosix(relative(targetDir, dest)) });\n }\n }\n\n const written: string[] = [];\n const skipped: string[] = [];\n for (const { src, dest, rel } of plan) {\n if (existsSync(dest) && !options.force && !isGeneratedFile(dest)) {\n skipped.push(rel);\n continue;\n }\n written.push(rel);\n if (!options.dryRun) {\n mkdirSync(dirname(dest), { recursive: true });\n copyFileSync(src, dest);\n }\n }\n\n if (!options.dryRun) {\n const recordPath = join(targetDir, PRO_RECORD_FILE);\n mkdirSync(dirname(recordPath), { recursive: true });\n writeFileSync(\n recordPath,\n `${JSON.stringify(\n {\n name: manifest.name,\n version: manifest.version,\n installedAt: new Date().toISOString(),\n files: plan.map((p) => p.rel).sort(),\n },\n null,\n 2,\n )}\\n`,\n 'utf8',\n );\n }\n\n return { name: manifest.name, version: manifest.version, written, skipped };\n}\n","import { loadConfig, runSelftest } from '@cdal/core';\nimport { defineCommand } from 'citty';\nimport pc from 'picocolors';\n\nexport const selftestCommand = defineCommand({\n meta: {\n name: 'selftest',\n description: 'Run mutation testing on contract invariant rules and content guardrails',\n },\n args: {\n json: {\n type: 'boolean',\n description: 'Output as JSON payload (selftest.v1)',\n default: false,\n },\n config: {\n type: 'string',\n description: 'Path to cdal.config.mjs',\n },\n },\n async run({ args }) {\n const cwd = process.cwd();\n const { config: resolvedConfig } = await loadConfig(args.config);\n\n if (!args.json) {\n console.log(pc.bold(pc.cyan('\\n cdal selftest — mutation testing of quality gates')));\n console.log(\n pc.dim(' Testing whether validator and guardrails actually fire red when violated\\n'),\n );\n }\n\n const report = await runSelftest({\n cwd,\n config: resolvedConfig,\n });\n\n if (args.json) {\n console.log(JSON.stringify(report, null, 2));\n process.exit(report.ok ? 0 : 1);\n }\n\n // Display mutation results\n if (report.mutationResults.length > 0) {\n console.log(\n pc.bold(\n ` Contract Invariant Mutations (${report.mutationsPassed}/${report.mutationsTotal}):`,\n ),\n );\n for (const m of report.mutationResults) {\n if (m.passed) {\n console.log(\n ` ${pc.green('✔')} ${pc.cyan(m.rule.padEnd(26))} detected in ${pc.dim(m.file)}`,\n );\n } else {\n console.log(\n ` ${pc.red('✗')} ${pc.red(m.rule.padEnd(26))} ${pc.bold('MISSED')}: ${m.error ?? 'rule dead'}`,\n );\n }\n }\n console.log('');\n }\n\n // Display content probe results\n if (report.probeResults.length > 0) {\n console.log(\n pc.bold(` Forbidden Content Probes (${report.probesPassed}/${report.probesTotal}):`),\n );\n for (const p of report.probeResults) {\n const action = p.fires ? 'detected' : 'allowed';\n if (p.passed) {\n console.log(\n ` ${pc.green('✔')} ${pc.cyan(p.rule.padEnd(30))} ${pc.green(action)}: ${p.desc}`,\n );\n } else {\n console.log(\n ` ${pc.red('✗')} ${pc.red(p.rule.padEnd(30))} ${pc.bold('FAILED')}: ${p.error ?? 'unexpected behavior'}`,\n );\n }\n }\n console.log('');\n }\n\n // Summary\n console.log(\n pc.bold(\n ` Summary: ${report.mutationsPassed}/${report.mutationsTotal} contract rules verified via mutation.`,\n ),\n );\n console.log(\n pc.bold(\n ` ${report.probesPassed}/${report.probesTotal} content guardrail probes verified.\\n`,\n ),\n );\n\n if (report.failures.length > 0) {\n console.log(pc.bold(pc.red(' CRITICAL GATE FAILURES:')));\n for (const f of report.failures) {\n console.log(` - ${pc.red(f)}`);\n }\n console.log('');\n process.exit(1);\n }\n\n console.log(pc.green(pc.bold(' ✔ Every quality gate rule is verified active and firing.\\n')));\n process.exit(0);\n },\n});\n","import { syncAdapters } from '@cdal/adapters';\nimport { loadConfig } from '@cdal/core';\nimport { defineCommand } from 'citty';\nimport pc from 'picocolors';\n\nexport const syncCommand = defineCommand({\n meta: {\n name: 'sync',\n description:\n 'Synchronize agent definitions, commands, hooks and rules across configured runtimes (with --check drift detection)',\n },\n args: {\n check: {\n type: 'boolean',\n description:\n 'Check for drift between cdal.config.mjs and runtime files without modifying disk',\n default: false,\n },\n config: {\n type: 'string',\n description: 'Custom path to cdal.config.mjs',\n },\n cwd: {\n type: 'string',\n description: 'Working directory path',\n },\n },\n async run({ args }) {\n try {\n const cwd = args.cwd || process.cwd();\n const { config } = await loadConfig(args.config || cwd);\n\n const res = syncAdapters({\n cwd,\n config,\n check: Boolean(args.check),\n });\n\n if (args.check) {\n if (res.inSync) {\n console.log(\n pc.green(\n `✅ Sync check passed: all ${res.totalFiles} adapter file(s) are in sync across [${config.runtimes.join(', ')}].`,\n ),\n );\n } else {\n console.error(\n pc.red(\n `❌ Sync check failed: ${res.driftedFiles.length} adapter file(s) drifted from configuration:`,\n ),\n );\n for (const file of res.driftedFiles) {\n console.error(pc.red(` - [DRIFT] ${file}`));\n }\n console.error(\n pc.yellow(\n '\\nRun `npx cdalkit sync` to synchronize runtime files with cdal.config.mjs.',\n ),\n );\n process.exit(1);\n }\n } else {\n console.log(\n pc.green(\n `✅ Synchronized ${res.updatedFiles.length} adapter file(s) across [${config.runtimes.join(', ')}]:`,\n ),\n );\n for (const file of res.updatedFiles) {\n console.log(pc.cyan(` - ${file}`));\n }\n if (res.updatedFiles.length === 0) {\n console.log(pc.dim(' (All files were already up-to-date)'));\n }\n }\n if (res.preservedFiles.length > 0) {\n console.log(\n pc.dim(\n ` ${res.preservedFiles.length} file(s) marked cdal:preserve were left untouched.`,\n ),\n );\n }\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n console.error(pc.red(`❌ Fatal error during sync: ${msg}`));\n process.exit(1);\n }\n },\n});\n","import path from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport {\n type TraceRequirement,\n formatTraceMarkdown,\n formatTraceText,\n loadConfig,\n scanTrace,\n} from '@cdal/core';\nimport { defineCommand } from 'citty';\nimport pc from 'picocolors';\n\nexport const traceCommand = defineCommand({\n meta: {\n name: 'trace',\n description: 'Inspect requirement-to-test traceability matrix (@REQ tags)',\n },\n args: {\n enforce: {\n type: 'boolean',\n description:\n 'Exit with code 1 if any implementing/done requirement lacks tests, tests fail, or unknown @REQ tags exist',\n default: false,\n },\n markdown: {\n type: 'boolean',\n description: 'Output as Markdown table ready for pull request description',\n default: false,\n },\n json: {\n type: 'boolean',\n description: 'Output as structured JSON (trace.v1)',\n default: false,\n },\n results: {\n type: 'string',\n description: 'Path to test execution JSON results file (vitest or playwright json reporter)',\n },\n config: {\n type: 'string',\n description: 'Path to cdal.config.mjs',\n },\n },\n async run({ args }) {\n const cwd = process.cwd();\n const { config: resolvedConfig } = await loadConfig(args.config);\n\n const contractsDir = resolvedConfig?.contractsDir ?? 'contracts';\n const reqContractPath = path.resolve(cwd, contractsDir, 'requirements.contract.mjs');\n\n let requirements: TraceRequirement[] = [];\n try {\n const imported = await import(pathToFileURL(reqContractPath).href);\n requirements = (imported.REQUIREMENTS ||\n imported.default?.REQUIREMENTS ||\n imported.default ||\n []) as TraceRequirement[];\n } catch (err: unknown) {\n const errorMsg = err instanceof Error ? err.message : String(err);\n console.error(pc.red(`Failed to load requirements from \"${reqContractPath}\": ${errorMsg}`));\n process.exit(1);\n }\n\n if (!Array.isArray(requirements) || requirements.length === 0) {\n console.warn(pc.yellow(`No requirements found in \"${reqContractPath}\".`));\n if (args.enforce) process.exit(1);\n return;\n }\n\n const report = scanTrace(requirements, {\n cwd,\n resultsFile: args.results,\n });\n\n if (args.json) {\n console.log(JSON.stringify(report, null, 2));\n } else if (args.markdown) {\n console.log(formatTraceMarkdown(report));\n } else {\n console.log(formatTraceText(report));\n }\n\n if (args.enforce && !report.ok) {\n process.exit(1);\n }\n },\n});\n","import { formatFindingsText, runValidation } from '@cdal/core';\nimport { policies, requirements, stateMachine } from '@cdal/kinds';\nimport { defineCommand } from 'citty';\nimport pc from 'picocolors';\n\nexport const validateCommand = defineCommand({\n meta: {\n name: 'validate',\n description: 'Validate contract invariants across all registered contract kinds',\n },\n args: {\n strict: {\n type: 'boolean',\n description: 'Treat warnings as failures (exit 1)',\n default: false,\n },\n json: {\n type: 'boolean',\n description: 'Output findings using machine-readable findings.v1 JSON schema',\n default: false,\n },\n dir: {\n type: 'string',\n description: 'Custom path to contracts directory',\n },\n },\n async run({ args }) {\n try {\n // Register standard OSS kinds by default\n const defaultKinds = [requirements(), stateMachine(), policies()];\n\n const report = await runValidation({\n contractsDir: args.dir,\n strict: Boolean(args.strict),\n kinds: defaultKinds,\n });\n\n if (args.json) {\n console.log(JSON.stringify(report, null, 2));\n } else {\n const text = formatFindingsText(report, Boolean(args.strict));\n if (report.valid) {\n console.log(pc.green(text));\n } else {\n console.error(pc.red(text));\n }\n }\n\n if (!report.valid) {\n process.exit(1);\n }\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n console.error(pc.red(`❌ Fatal error during contract validation: ${msg}`));\n process.exit(1);\n }\n },\n});\n","import { spawnSync } from 'node:child_process';\nimport { loadConfig } from '@cdal/core';\nimport { defineCommand } from 'citty';\nimport pc from 'picocolors';\n\nexport const verifyCommand = defineCommand({\n meta: {\n name: 'verify',\n description: 'Run deterministic CDAL verification pipeline defined in configuration',\n },\n args: {\n fast: {\n type: 'boolean',\n description: 'Run fast subset of verification steps (contract checks & selftest)',\n default: false,\n },\n full: {\n type: 'boolean',\n description: 'Force execution of all verification steps',\n default: false,\n },\n clean: {\n type: 'boolean',\n description: 'Clear temporary caches before running verification',\n default: false,\n },\n config: {\n type: 'string',\n description: 'Path to cdal.config.mjs',\n },\n cwd: {\n type: 'string',\n description: 'Working directory path',\n },\n },\n async run({ args }) {\n const cwd = args.cwd || process.cwd();\n const { config } = await loadConfig(args.config || cwd);\n\n let steps = [...config.verify];\n\n if (args.fast) {\n // In fast mode, run contract validation, codegen drift check, and selftest\n steps = steps.filter(\n (s) =>\n s.includes('validate') ||\n s.includes('codegen') ||\n s.includes('selftest') ||\n s.includes('typecheck'),\n );\n if (steps.length === 0) {\n steps = [config.verify[0] ?? 'cdal validate --strict'];\n }\n }\n\n console.log(\n pc.bold(pc.cyan(`\\n⚡ Running CDAL Verification Pipeline (${steps.length} step(s))...\\n`)),\n );\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i];\n if (!step) continue;\n console.log(pc.bold(pc.blue(`[${i + 1}/${steps.length}] ▶ ${step}`)));\n\n const start = Date.now();\n const res = spawnSync(step, {\n cwd,\n shell: true,\n stdio: 'inherit',\n });\n const duration = Date.now() - start;\n\n if (res.status !== 0) {\n console.error(\n pc.bold(\n pc.red(\n `\\n❌ Verification failed at step: \"${step}\" (exit code ${res.status ?? 1}, took ${duration}ms)`,\n ),\n ),\n );\n process.exit(res.status ?? 1);\n }\n\n console.log(pc.green(` ✓ Step passed in ${duration}ms\\n`));\n }\n\n console.log(\n pc.bold(\n pc.green(`✅ Full verification pipeline succeeded (${steps.length} step(s) passed).`),\n ),\n );\n },\n});\n","import { closeContractWindow, getContractWindowStatus, openContractWindow } from '@cdal/core';\nimport { defineCommand } from 'citty';\nimport pc from 'picocolors';\n\nexport const windowCommand = defineCommand({\n meta: {\n name: 'window',\n description: 'Manage contract window for protected path modifications',\n },\n args: {\n action: {\n type: 'positional',\n description: 'Action to perform: open, close, status',\n required: true,\n },\n ticket: {\n type: 'positional',\n description: 'Ticket or reason ID (required for open)',\n required: false,\n },\n duration: {\n type: 'string',\n description: 'Window duration in minutes (default: 60)',\n default: '60',\n },\n },\n run({ args }) {\n const action = args.action.toLowerCase();\n\n if (action === 'open') {\n const ticket = args.ticket;\n if (!ticket) {\n console.error(\n pc.red(\n 'Error: \"cdal window open\" requires a ticket or work order argument. Example: cdal window open WO-123',\n ),\n );\n process.exit(1);\n }\n const durationMinutes = Number.parseInt(args.duration, 10) || 60;\n const status = openContractWindow(ticket, { durationMinutes });\n console.log(pc.green(`✔ Contract window opened for ticket: ${pc.bold(status.ticket)}`));\n console.log(pc.dim(` Expires at: ${status.expiresAt}`));\n return;\n }\n\n if (action === 'close') {\n closeContractWindow();\n console.log(pc.green('✔ Contract window closed. Protected paths are locked.'));\n return;\n }\n\n if (action === 'status') {\n const status = getContractWindowStatus();\n if (status.open) {\n console.log(pc.green(`Contract window is ${pc.bold('OPEN')}`));\n console.log(` Ticket: ${status.ticket ?? 'none'}`);\n console.log(` Opened at: ${status.openedAt ?? 'unknown'}`);\n console.log(` Expires at: ${status.expiresAt ?? 'unknown'}`);\n } else {\n console.log(pc.yellow(`Contract window is ${pc.bold('CLOSED')}`));\n }\n return;\n }\n\n console.error(pc.red(`Unknown action \"${action}\". Available actions: open, close, status`));\n process.exit(1);\n },\n});\n"],"mappings":"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","names":["defineCommand","defineCommand","pc","runCodegen","defineCommand","pc","loadConfig","defineCommand","existsSync","readFileSync","writeFileSync","join","syncAdapters","defineCommand","pc","loadConfig","defineCommand","pc","existsSync","join","resolve","defineCommand","pc","existsSync","mkdirSync","readFileSync","writeFileSync","join","resolve","path","resolve","existsSync","join","defineCommand","pc","loadConfig","defineCommand","pc","syncAdapters","loadConfig","defineCommand","pc","loadConfig","defineCommand","pc","requirements","policies","requirements","stateMachine","defineCommand","pc","spawnSync","loadConfig","defineCommand","pc","defineCommand","pc","defineCommand"]}
1
+ {"version":3,"sources":["../src/cli.ts","../src/commands/audit.ts","../src/commands/codegen.ts","../src/kinds.ts","../src/commands/doctor.ts","../src/commands/hook.ts","../src/commands/init.ts","../src/commands/phase.ts","../src/commands/pro.ts","../src/pro/install.ts","../src/commands/selftest.ts","../src/commands/sync.ts","../src/commands/trace.ts","../src/commands/validate.ts","../src/commands/verify.ts","../src/commands/window.ts"],"sourcesContent":["import { createRequire } from 'node:module';\nimport { runMain as cittyRunMain, defineCommand } from 'citty';\nimport { auditCommand } from './commands/audit.js';\nimport { codegenCommand } from './commands/codegen.js';\nimport { doctorCommand } from './commands/doctor.js';\nimport { hookCommand } from './commands/hook.js';\nimport { initCommand } from './commands/init.js';\nimport { phaseCommand } from './commands/phase.js';\nimport { proCommand } from './commands/pro.js';\nimport { selftestCommand } from './commands/selftest.js';\nimport { syncCommand } from './commands/sync.js';\nimport { traceCommand } from './commands/trace.js';\nimport { validateCommand } from './commands/validate.js';\nimport { verifyCommand } from './commands/verify.js';\nimport { windowCommand } from './commands/window.js';\n\n// Read the version from package.json so `--version` always matches the published package.\nconst { version } = createRequire(import.meta.url)('../package.json') as { version: string };\n\nconst main = defineCommand({\n meta: {\n name: 'cdal',\n version,\n description: 'Contract-Driven Agentic Loop (CDAL) Quality Gates & Audit CLI',\n },\n subCommands: {\n init: initCommand,\n validate: validateCommand,\n codegen: codegenCommand,\n window: windowCommand,\n trace: traceCommand,\n phase: phaseCommand,\n selftest: selftestCommand,\n sync: syncCommand,\n verify: verifyCommand,\n doctor: doctorCommand,\n hook: hookCommand,\n audit: auditCommand,\n pro: proCommand,\n },\n});\n\nexport function runMain() {\n cittyRunMain(main);\n}\n","import { writeFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { renderHtmlReport, renderTerminalReport, runAudit } from '@cdal/audit';\nimport type { AuditLanguage } from '@cdal/audit';\nimport { defineCommand } from 'citty';\nimport pc from 'picocolors';\n\nexport const auditCommand = defineCommand({\n meta: {\n name: 'audit',\n description:\n 'Audit repository for AI agent hygiene, type silencing, test isolation and gates (100% offline)',\n },\n args: {\n path: {\n type: 'positional',\n description: 'Path to repository root to audit',\n required: false,\n default: '.',\n },\n html: {\n type: 'string',\n description: 'Path to save standalone single-file HTML report (e.g. audit-report.html)',\n required: false,\n },\n json: {\n type: 'boolean',\n description: 'Output machine-readable JSON report (schema: audit.v1)',\n default: false,\n },\n lang: {\n type: 'string',\n description: 'Report language (en or pl)',\n default: 'en',\n },\n failUnder: {\n type: 'string',\n description: 'Exit with code 1 if audit score is below this threshold (0-100)',\n required: false,\n },\n },\n async run({ args }) {\n const targetDir = resolve(args.path || '.');\n const lang = (args.lang === 'pl' ? 'pl' : 'en') as AuditLanguage;\n\n if (!args.json) {\n console.log(pc.bold(pc.cyan('\\n🔍 Running CDAL Repository AI Hygiene Audit...\\n')));\n }\n\n const report = await runAudit({\n cwd: targetDir,\n lang,\n });\n\n if (args.html) {\n const htmlContent = renderHtmlReport(report, lang);\n const outPath = resolve(args.html);\n writeFileSync(outPath, htmlContent, 'utf8');\n if (!args.json) {\n console.log(pc.green(` ✔ Wygenerowano raport HTML: ${outPath}`));\n }\n }\n\n if (args.json) {\n console.log(JSON.stringify(report, null, 2));\n } else {\n console.log(renderTerminalReport(report, lang));\n }\n\n if (args.failUnder) {\n const threshold = Number.parseInt(args.failUnder, 10);\n if (!Number.isNaN(threshold) && report.score < threshold) {\n console.error(\n pc.red(\n `\\n❌ Audit score ${report.score} is below threshold ${threshold}. Failing quality gate.`,\n ),\n );\n process.exit(1);\n }\n }\n },\n});\n","import { runCodegen } from '@cdal/core';\nimport { defineCommand } from 'citty';\nimport pc from 'picocolors';\nimport { resolveCommandKinds } from '../kinds.js';\n\nexport const codegenCommand = defineCommand({\n meta: {\n name: 'codegen',\n description:\n 'Emit TypeScript types and documentation from contracts (with --check drift detection)',\n },\n args: {\n check: {\n type: 'boolean',\n description: 'Check for drift between contracts and generated files without modifying disk',\n default: false,\n },\n dir: {\n type: 'string',\n description: 'Custom path to contracts directory',\n },\n },\n async run({ args }) {\n try {\n const kinds = await resolveCommandKinds();\n\n const res = await runCodegen({\n contractsDir: args.dir,\n check: Boolean(args.check),\n kinds,\n });\n\n if (args.check) {\n if (!res.drift) {\n console.log(pc.green('✅ Codegen check: all generated files are in sync byte-for-byte.'));\n } else {\n console.error(pc.red('❌ Codegen check failed: drift detected in generated files:'));\n for (const f of res.files) {\n if (f.status === 'drift') {\n console.error(pc.red(` - [DRIFT] ${f.path} (${f.fullPath})`));\n } else if (f.status === 'missing') {\n console.error(pc.red(` - [MISSING] ${f.path} (${f.fullPath})`));\n }\n }\n console.error(\n pc.yellow('\\nRun `cdal codegen` to synchronize generated files with contracts.'),\n );\n process.exit(1);\n }\n } else {\n console.log(pc.green(`✅ Emitted ${res.files.length} contract artifact(s):`));\n for (const f of res.files) {\n console.log(pc.cyan(` - ${f.path} -> ${f.fullPath}`));\n }\n }\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n console.error(pc.red(`❌ Fatal error during codegen: ${msg}`));\n process.exit(1);\n }\n },\n});\n","import { type ContractKind, loadConfig } from '@cdal/core';\nimport { policies, requirements, stateMachine } from '@cdal/kinds';\n\n/**\n * Contract kinds for validate/codegen: the ones registered in cdal.config.mjs\n * (built-in, CDAL Pro or custom), or the built-in kinds when the config registers none.\n */\nexport async function resolveCommandKinds(cwd: string = process.cwd()): Promise<ContractKind[]> {\n const { config } = await loadConfig(cwd);\n const configured = (config.kinds ?? []).filter(\n (kind): kind is ContractKind => typeof (kind as Partial<ContractKind>).load === 'function',\n );\n if (configured.length > 0) return configured;\n return [requirements(), stateMachine(), policies()] as ContractKind[];\n}\n","import { spawnSync } from 'node:child_process';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { syncAdapters } from '@cdal/adapters';\nimport { type ContractKind, type ResolvedCdalConfig, loadConfig, runCodegen } from '@cdal/core';\nimport { defineCommand } from 'citty';\nimport pc from 'picocolors';\n\nexport interface DoctorCheckResult {\n name: string;\n status: 'ok' | 'warn' | 'error';\n message: string;\n recommendation?: string;\n}\n\n/**\n * Claude Code only runs hooks declared as matcher groups with typed handlers:\n * { matcher, hooks: [{ type: 'command', command }] }. A `command` placed\n * directly on the group is silently ignored.\n */\nfunction inspectClaudeHooks(settings: {\n hooks?: Record<string, unknown>;\n}): 'ok' | 'legacy-format' | 'missing' {\n const groups = settings.hooks?.PreToolUse;\n if (!Array.isArray(groups)) return 'missing';\n let legacy = false;\n for (const group of groups as Array<Record<string, unknown>>) {\n if (typeof group.command === 'string' && /cdal(kit)? hook/.test(group.command)) legacy = true;\n const handlers = Array.isArray(group.hooks)\n ? (group.hooks as Array<Record<string, unknown>>)\n : [];\n for (const handler of handlers) {\n if (\n handler.type === 'command' &&\n typeof handler.command === 'string' &&\n /cdal(kit)? hook guard-paths/.test(handler.command)\n ) {\n return 'ok';\n }\n }\n }\n return legacy ? 'legacy-format' : 'missing';\n}\n\nexport function runDoctorChecks(\n cwd: string,\n customConfig?: string,\n): {\n checks: DoctorCheckResult[];\n healthy: boolean;\n} {\n const checks: DoctorCheckResult[] = [];\n\n // 1. Node version check (requires >= 20.9.0)\n const nodeVer = process.version;\n const match = /^v(\\d+)\\.(\\d+)\\./.exec(nodeVer);\n const major = match?.[1] ? Number.parseInt(match[1], 10) : 0;\n const minor = match?.[2] ? Number.parseInt(match[2], 10) : 0;\n\n if (major > 20 || (major === 20 && minor >= 9)) {\n checks.push({\n name: 'Node.js Runtime',\n status: 'ok',\n message: `Node ${nodeVer} satisfies engines.node >= 20.9.0 LTS`,\n });\n } else {\n checks.push({\n name: 'Node.js Runtime',\n status: 'error',\n message: `Current Node ${nodeVer} is below required >= 20.9.0`,\n recommendation: 'Upgrade Node.js to Node 22 LTS or Node 20.9+.',\n });\n }\n\n // 2. Git installation and repository check\n const gitVersionRes = spawnSync('git', ['--version'], { encoding: 'utf8' });\n if (gitVersionRes.status !== 0) {\n checks.push({\n name: 'Git Binary',\n status: 'error',\n message: 'git binary is not available in PATH',\n recommendation: 'Install Git or add it to PATH.',\n });\n } else {\n checks.push({\n name: 'Git Binary',\n status: 'ok',\n message: `Git is available (${gitVersionRes.stdout.trim()})`,\n });\n\n const gitRepoRes = spawnSync('git', ['rev-parse', '--is-inside-work-tree'], {\n cwd,\n encoding: 'utf8',\n });\n if (gitRepoRes.status !== 0) {\n checks.push({\n name: 'Git Repository',\n status: 'error',\n message: 'Current directory is not inside a git working tree',\n recommendation: 'Initialize git with `git init`.',\n });\n } else {\n checks.push({\n name: 'Git Repository',\n status: 'ok',\n message: 'Inside active git working tree',\n });\n }\n }\n\n // 3. Configuration check\n let configObj: ResolvedCdalConfig | null = null;\n try {\n const loaded = loadConfigSync(cwd, customConfig);\n configObj = loaded.config;\n checks.push({\n name: 'Configuration',\n status: 'ok',\n message: `Configuration loaded cleanly (${loaded.filepath ? loaded.filepath : 'default config'})`,\n });\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n checks.push({\n name: 'Configuration',\n status: 'error',\n message: `Failed to load cdal.config.mjs: ${msg}`,\n recommendation: 'Run `cdal init` or fix configuration errors.',\n });\n }\n\n // 4. Hook wiring check in .claude/settings.json\n const settingsPath = join(cwd, '.claude/settings.json');\n if (existsSync(settingsPath)) {\n try {\n const settings = JSON.parse(readFileSync(settingsPath, 'utf8')) as {\n hooks?: Record<string, unknown>;\n };\n const wiring = inspectClaudeHooks(settings);\n if (wiring === 'ok') {\n checks.push({\n name: 'Claude Code Hooks',\n status: 'ok',\n message: '.claude/settings.json correctly wires CDAL pre-tool hooks',\n });\n } else {\n checks.push({\n name: 'Claude Code Hooks',\n status: 'warn',\n message:\n wiring === 'legacy-format'\n ? '.claude/settings.json uses a hook format Claude Code ignores, so the CDAL gates never run'\n : '.claude/settings.json exists but does not wire the CDAL guard-paths hook',\n recommendation: 'Run `npx cdalkit sync` to regenerate the hook wiring.',\n });\n }\n } catch {\n checks.push({\n name: 'Claude Code Hooks',\n status: 'warn',\n message: 'Could not read .claude/settings.json',\n });\n }\n } else {\n checks.push({\n name: 'Claude Code Hooks',\n status: 'warn',\n message: 'No .claude/settings.json found in workspace',\n recommendation: 'Run `cdal init` or `cdal sync` to generate hook wiring.',\n });\n }\n\n // 5. Adapter drift check\n if (configObj) {\n try {\n const syncRes = syncAdapters({ cwd, config: configObj, check: true });\n if (syncRes.inSync) {\n checks.push({\n name: 'Runtime Adapters Sync',\n status: 'ok',\n message: `All ${syncRes.totalFiles} adapter file(s) are in sync without drift`,\n });\n } else {\n checks.push({\n name: 'Runtime Adapters Sync',\n status: 'error',\n message: `${syncRes.driftedFiles.length} adapter file(s) drifted from configuration: ${syncRes.driftedFiles.join(', ')}`,\n recommendation: 'Run `cdal sync` to synchronize runtime files.',\n });\n }\n } catch (err: unknown) {\n checks.push({\n name: 'Runtime Adapters Sync',\n status: 'warn',\n message: `Could not check adapter sync: ${String(err)}`,\n });\n }\n }\n\n const healthy = checks.every((c) => c.status !== 'error');\n return { checks, healthy };\n}\n\nfunction loadConfigSync(cwd: string, customConfig?: string) {\n const configPath = customConfig || join(cwd, 'cdal.config.mjs');\n if (existsSync(configPath)) {\n return { config: null, filepath: configPath };\n }\n return { config: null, filepath: null };\n}\n\nexport const doctorCommand = defineCommand({\n meta: {\n name: 'doctor',\n description:\n 'Diagnose CDAL installation, environment health, hook wiring, and configuration drift',\n },\n args: {\n config: {\n type: 'string',\n description: 'Path to cdal.config.mjs',\n },\n cwd: {\n type: 'string',\n description: 'Working directory path',\n },\n },\n async run({ args }) {\n const cwd = args.cwd || process.cwd();\n console.log(pc.bold(pc.cyan('\\n🩺 Running CDAL Diagnostic Doctor...\\n')));\n\n let resolvedConfig: ResolvedCdalConfig | null = null;\n try {\n const loaded = await loadConfig(args.config || cwd);\n resolvedConfig = loaded.config;\n } catch (err: unknown) {\n console.error(pc.red(`⚠️ Configuration error: ${String(err)}`));\n }\n\n const { checks, healthy } = runDoctorChecks(cwd, args.config);\n\n // If we loaded config, also test runCodegen drift\n if (resolvedConfig) {\n try {\n const codegenRes = await runCodegen({\n contractsDir: resolvedConfig.contractsDir,\n kinds: resolvedConfig.kinds as unknown as ContractKind<unknown>[],\n check: true,\n });\n if (!codegenRes.drift) {\n checks.push({\n name: 'Contract Codegen Sync',\n status: 'ok',\n message: 'Generated contract artifacts match contracts byte-for-byte',\n });\n } else {\n checks.push({\n name: 'Contract Codegen Sync',\n status: 'error',\n message: 'Generated contract code drifted from contract sources',\n recommendation: 'Run `cdal codegen` to regenerate artifacts.',\n });\n }\n } catch {\n // ignore codegen errors in doctor if contractsDir empty\n }\n }\n\n for (const check of checks) {\n if (check.status === 'ok') {\n console.log(pc.green(` ✓ [OK] ${pc.bold(check.name)}: ${check.message}`));\n } else if (check.status === 'warn') {\n console.log(pc.yellow(` ⚠️ [WARN] ${pc.bold(check.name)}: ${check.message}`));\n if (check.recommendation) {\n console.log(pc.dim(` Recommendation: ${check.recommendation}`));\n }\n } else {\n console.log(pc.red(` ❌ [FAIL] ${pc.bold(check.name)}: ${check.message}`));\n if (check.recommendation) {\n console.log(pc.yellow(` Recommendation: ${check.recommendation}`));\n }\n }\n }\n\n if (healthy) {\n console.log(\n pc.bold(pc.green('\\n✅ Doctor report: Environment and CDAL quality gates are healthy!\\n')),\n );\n } else {\n console.log(pc.bold(pc.red('\\n❌ Doctor report: Some critical diagnostic checks failed.\\n')));\n process.exit(1);\n }\n },\n});\n","import fs from 'node:fs';\nimport { type HookName, executeHook } from '@cdal/adapters';\nimport { loadConfig } from '@cdal/core';\nimport { defineCommand } from 'citty';\n\nconst VALID_HOOKS = new Set([\n 'guard-paths',\n 'guard-forbidden',\n 'guard-bash',\n 'session-context',\n 'log-subagent',\n]);\n\nexport const hookCommand = defineCommand({\n meta: {\n name: 'hook',\n description: 'Entrypoint for agent runtime hooks (Claude Code, Antigravity, etc.)',\n },\n args: {\n name: {\n type: 'positional',\n description:\n 'Hook name to execute: guard-paths, guard-forbidden, guard-bash, session-context, log-subagent',\n required: true,\n },\n role: {\n type: 'positional',\n description: 'Fallback agent role name if not specified in hook payload',\n required: false,\n },\n runtime: {\n type: 'string',\n description: 'Target runtime adapter (claude-code, antigravity)',\n default: 'claude-code',\n },\n config: {\n type: 'string',\n description: 'Path to cdal.config.mjs',\n },\n },\n async run({ args }) {\n const hookName = args.name as HookName;\n if (!VALID_HOOKS.has(hookName)) {\n process.stderr.write(\n `Unknown hook name \"${hookName}\". Valid hooks: ${Array.from(VALID_HOOKS).join(', ')}\\n`,\n );\n process.exit(1);\n }\n\n let rawPayload = '';\n try {\n rawPayload = fs.readFileSync(0, 'utf8');\n } catch {\n // stdin was not piped or not accessible\n }\n\n const cwd = process.cwd();\n const { config } = await loadConfig(args.config);\n\n const result = await executeHook(hookName, rawPayload, {\n cwd,\n config,\n fallbackRole: args.role,\n runtime: args.runtime as 'claude-code' | 'antigravity' | 'generic',\n });\n\n if (result.stdout) {\n process.stdout.write(`${result.stdout}\\n`);\n }\n\n if (result.stderr) {\n process.stderr.write(result.stderr);\n }\n\n process.exit(result.exitCode);\n },\n});\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { syncAdapters } from '@cdal/adapters';\nimport { resolveConfig } from '@cdal/core';\nimport { defineCommand } from 'citty';\nimport pc from 'picocolors';\n\nexport const initCommand = defineCommand({\n meta: {\n name: 'init',\n description:\n 'Initialize CDAL quality gates, starter contracts, and runtime adapters in the repository',\n },\n args: {\n yes: {\n type: 'boolean',\n description: 'Accept default recommendations non-interactively',\n alias: 'y',\n default: false,\n },\n preset: {\n type: 'string',\n description: 'Preset configuration to apply (e.g. typescript-strict, nextjs, node-service)',\n default: 'typescript-strict',\n },\n runtime: {\n type: 'string',\n description: 'Comma-separated runtimes to enable (claude-code, agents-md, antigravity)',\n default: 'claude-code,agents-md',\n },\n cwd: {\n type: 'string',\n description: 'Target directory to initialize',\n },\n },\n async run({ args }) {\n const cwd = args.cwd || process.cwd();\n console.log(pc.bold(pc.cyan('\\n🚀 Initializing Contract-Driven Agentic Loop (CDAL)...\\n')));\n\n const preset = args.preset || 'typescript-strict';\n const rawRuntimes = (args.runtime || 'claude-code,agents-md')\n .split(',')\n .map((r) => r.trim())\n .filter(Boolean);\n\n // 1. Create contracts directory and sample contract if missing\n const contractsDir = join(cwd, 'contracts');\n if (!existsSync(contractsDir)) {\n mkdirSync(contractsDir, { recursive: true });\n }\n\n const sampleContractPath = join(contractsDir, 'requirements.contract.mjs');\n if (!existsSync(sampleContractPath)) {\n const sampleContractContent = `// @origin: cdal init\nexport const REQUIREMENTS = [\n {\n id: 'REQ-CORE-INIT-1',\n statement: 'System must initialize workspace with contract-driven quality gates.',\n acceptance: [\n 'cdal validate succeeds without errors',\n 'Test cases are marked with @REQ tags',\n ],\n status: 'TODO',\n priority: 'CRITICAL',\n source: 'cdal.config.mjs',\n },\n {\n id: 'REQ-CORE-INIT-2',\n statement: 'Every implemented requirement is proven by a test tagged with its ID.',\n acceptance: ['cdal trace --enforce passes'],\n status: 'TODO',\n priority: 'HIGH',\n source: 'cdal.config.mjs',\n },\n];\n`;\n writeFileSync(sampleContractPath, sampleContractContent, 'utf8');\n console.log(\n pc.green(` ✓ Created starter contract: ${pc.bold('contracts/requirements.contract.mjs')}`),\n );\n }\n\n // 2. Create cdal.config.mjs if missing\n const configPath = join(cwd, 'cdal.config.mjs');\n if (!existsSync(configPath)) {\n const runtimesFormatted = rawRuntimes.map((r) => `'${r}'`).join(', ');\n const configContent = `import { defineConfig } from '@cdal/core';\nimport { policies, requirements, stateMachine } from '@cdal/kinds';\n\nexport default defineConfig({\n contractsDir: 'contracts',\n generated: {\n ts: 'src/generated/contracts',\n docs: 'docs/generated',\n },\n kinds: [requirements(), stateMachine(), policies()],\n presets: ['${preset}'],\n runtimes: [${runtimesFormatted}],\n verify: [\n 'cdal validate --strict',\n 'cdal codegen --check',\n 'cdal trace --enforce',\n 'cdal selftest',\n ],\n});\n`;\n writeFileSync(configPath, configContent, 'utf8');\n console.log(pc.green(` ✓ Created configuration: ${pc.bold('cdal.config.mjs')}`));\n } else {\n console.log(\n pc.dim(' ℹ cdal.config.mjs already exists (preserving existing configuration).'),\n );\n }\n\n // 3. Update package.json scripts if package.json exists\n const pkgPath = join(cwd, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkgRaw = readFileSync(pkgPath, 'utf8');\n const pkg = JSON.parse(pkgRaw);\n pkg.scripts = pkg.scripts || {};\n let updated = false;\n\n if (!pkg.scripts.verify) {\n pkg.scripts.verify = 'cdal verify';\n updated = true;\n }\n if (!pkg.scripts.selftest) {\n pkg.scripts.selftest = 'cdal selftest';\n updated = true;\n }\n if (!pkg.scripts.trace) {\n pkg.scripts.trace = 'cdal trace';\n updated = true;\n }\n\n if (updated) {\n writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\\n`, 'utf8');\n console.log(\n pc.green(` ✓ Added verify/selftest/trace scripts to ${pc.bold('package.json')}`),\n );\n }\n } catch {\n console.log(pc.yellow(' ⚠️ Could not update package.json scripts automatically.'));\n }\n }\n\n // 4. Synchronize adapter files across selected runtimes\n const resolvedConfig = resolveConfig({\n presets: [preset],\n runtimes: rawRuntimes,\n });\n\n const syncRes = syncAdapters({\n cwd,\n config: resolvedConfig,\n check: false,\n });\n\n console.log(\n pc.green(\n ` ✓ Generated ${syncRes.updatedFiles.length} runtime adapter file(s) across [${rawRuntimes.join(', ')}].`,\n ),\n );\n\n console.log(pc.bold(pc.green('\\n🎉 CDAL initialized successfully!')));\n console.log(pc.cyan('Next steps:'));\n console.log(pc.dim(' 1. Review contracts in contracts/*.contract.mjs'));\n console.log(pc.dim(' 2. Run `npx cdalkit doctor` to verify environment health'));\n console.log(pc.dim(' 3. Run `npx cdalkit verify` to test the loop gate\\n'));\n },\n});\n","import { type PhaseType, checkPhase, loadConfig } from '@cdal/core';\nimport { defineCommand } from 'citty';\nimport pc from 'picocolors';\n\nexport const phaseCommand = defineCommand({\n meta: {\n name: 'phase',\n description: 'Verify git diff against active loop phase (contract, red, green)',\n },\n args: {\n phase: {\n type: 'positional',\n description: 'Phase to verify: contract, red, green',\n required: true,\n },\n base: {\n type: 'string',\n description: 'Base git reference to compare against (e.g. main or origin/main)',\n },\n json: {\n type: 'boolean',\n description: 'Output as JSON payload',\n default: false,\n },\n config: {\n type: 'string',\n description: 'Path to cdal.config.mjs',\n },\n },\n async run({ args }) {\n const rawPhase = (args.phase || '').toLowerCase();\n if (!['contract', 'red', 'green'].includes(rawPhase)) {\n console.error(pc.red(`Invalid phase \"${rawPhase}\". Valid phases are: contract, red, green.`));\n process.exit(2);\n }\n const phase = rawPhase as PhaseType;\n\n const cwd = process.cwd();\n const { config: resolvedConfig } = await loadConfig(args.config);\n\n const result = checkPhase(phase, {\n cwd,\n base: args.base,\n protectedPaths: resolvedConfig?.protectedPaths,\n });\n\n if (args.json) {\n console.log(JSON.stringify(result, null, 2));\n process.exit(result.ok ? 0 : 1);\n }\n\n console.log(pc.bold(`\\n Phase: ${result.label}`));\n console.log(` Modified files in diff: ${result.files.length}\\n`);\n\n if (result.violations.length === 0) {\n if (result.files.length === 0) {\n if (phase === 'red') {\n console.log(\n pc.yellow(\n ' ⚠ No changes found in working tree. Phase RED requires at least one test.',\n ),\n );\n process.exit(1);\n }\n console.log(pc.dim(' No changes found in working tree.'));\n process.exit(0);\n }\n console.log(pc.green(' ✔ All changes are within active phase scopes.'));\n process.exit(0);\n }\n\n console.log(\n pc.red(` ✗ ${result.violations.length} file(s) outside of permitted phase scope:\\n`),\n );\n for (const v of result.violations) {\n console.log(` - ${v}`);\n }\n console.log(pc.dim(`\\n ${result.why}\\n`));\n process.exit(1);\n },\n});\n","import { execFileSync } from 'node:child_process';\nimport { existsSync, mkdtempSync, rmSync } from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport { join, resolve } from 'node:path';\nimport { defineCommand } from 'citty';\nimport pc from 'picocolors';\nimport { ProInstallError, installPro } from '../pro/install.js';\n\nexport const PRO_REPOSITORY_URL = 'https://github.com/cdalkit/cdal-pro.git';\nexport const PRO_TEAM_REPOSITORY_URL = 'https://github.com/cdalkit/cdal-pro-team.git';\n\n/** The private repository to install from: cdal-pro, or cdal-pro-team with --team. */\nexport function proRepositoryUrl(team: boolean): string {\n return team ? PRO_TEAM_REPOSITORY_URL : PRO_REPOSITORY_URL;\n}\n\n/** Clones a git source into a temp directory; local directories are used as-is. */\nfunction resolveSource(from: string): { dir: string; cleanup: () => void } {\n const local = resolve(from);\n if (existsSync(local)) return { dir: local, cleanup: () => {} };\n\n const dir = mkdtempSync(join(tmpdir(), 'cdal-pro-'));\n const cleanup = () => rmSync(dir, { recursive: true, force: true });\n try {\n execFileSync('git', ['clone', '--depth', '1', '--quiet', from, dir], {\n stdio: ['ignore', 'ignore', 'pipe'],\n });\n } catch {\n cleanup();\n throw new ProInstallError(\n `Could not clone ${from}.\\n CDAL Pro is delivered as a private GitHub repository: accept the invitation sent after your purchase, make sure git can access GitHub as that account, then run this command again.`,\n );\n }\n return { dir, cleanup };\n}\n\nconst installCommand = defineCommand({\n meta: {\n name: 'install',\n description: 'Install CDAL Pro content (agent roles, templates, presets) into this project',\n },\n args: {\n from: {\n type: 'string',\n description:\n 'Local copy or git URL of the Pro repository (default: cdal-pro, or cdal-pro-team with --team)',\n },\n team: {\n type: 'boolean',\n description: 'Install CDAL Pro Team (editor guards, presets, playbook) from cdal-pro-team',\n default: false,\n },\n cwd: {\n type: 'string',\n description: 'Project directory to install into',\n default: '.',\n },\n force: {\n type: 'boolean',\n description: 'Overwrite files that already exist in the project',\n default: false,\n },\n dryRun: {\n type: 'boolean',\n description: 'Show what would be installed without writing anything',\n default: false,\n },\n },\n run({ args }) {\n let source: { dir: string; cleanup: () => void } | undefined;\n try {\n source = resolveSource(args.from || proRepositoryUrl(args.team));\n const result = installPro({\n sourceDir: source.dir,\n targetDir: resolve(args.cwd),\n force: args.force,\n dryRun: args.dryRun,\n });\n\n const verb = args.dryRun ? 'Would install' : 'Installed';\n console.log(pc.green(`✔ ${verb} ${result.name} ${result.version}`));\n console.log(` ${result.written.length} file(s) ${args.dryRun ? 'to write' : 'written'}`);\n if (result.skipped.length > 0) {\n console.log(\n pc.yellow(\n ` ${result.skipped.length} existing file(s) kept — rerun with --force to overwrite:`,\n ),\n );\n for (const file of result.skipped) console.log(pc.dim(` ${file}`));\n }\n if (!args.dryRun) {\n console.log(pc.dim(' Run `npx cdalkit sync` to wire the new roles into your runtimes.'));\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n console.error(pc.red(`✖ ${message}`));\n process.exit(1);\n } finally {\n source?.cleanup();\n }\n },\n});\n\nexport const proCommand = defineCommand({\n meta: {\n name: 'pro',\n description: 'CDAL Pro: install licensed agent roles, templates and presets',\n },\n subCommands: {\n install: installCommand,\n },\n});\n","import {\n copyFileSync,\n existsSync,\n mkdirSync,\n readFileSync,\n readdirSync,\n statSync,\n writeFileSync,\n} from 'node:fs';\nimport { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';\n\nexport const PRO_MANIFEST_FILE = 'pro.manifest.json';\nexport const PRO_RECORD_FILE = '.cdal/pro.json';\n\n/** Where an installed Pro package records its version: .cdal/pro.json for cdal-pro, .cdal/<name>.json otherwise. */\nexport function proRecordFile(name: string): string {\n return name === 'cdal-pro' ? PRO_RECORD_FILE : `.cdal/${name.replace(/^cdal-/, '')}.json`;\n}\n\n// Files carrying these markers were generated by `cdalkit sync`/`init` and can be regenerated,\n// so Pro content may replace them; anything else in the project is user-owned.\nconst GENERATED_MARKERS = ['CDAL GENERATED', 'GENERATED by cdal sync'];\n\nfunction isGeneratedFile(path: string): boolean {\n const content = readFileSync(path, 'utf8');\n return GENERATED_MARKERS.some((marker) => content.includes(marker));\n}\n\nexport class ProInstallError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ProInstallError';\n }\n}\n\nexport interface ProManifest {\n name: string;\n version: string;\n install: Array<{ from: string; to: string }>;\n}\n\nexport interface ProInstallOptions {\n /** Directory containing pro.manifest.json (a clone of cdal-pro or a local copy). */\n sourceDir: string;\n /** Project root to install into. */\n targetDir: string;\n /** Overwrite files that already exist in the project. */\n force?: boolean;\n /** Report what would be written without touching the project. */\n dryRun?: boolean;\n}\n\nexport interface ProInstallResult {\n name: string;\n version: string;\n /** Project-relative paths written (or, in dry-run mode, that would be written). */\n written: string[];\n /** Project-relative paths left untouched because they already exist. */\n skipped: string[];\n}\n\nfunction toPosix(path: string): string {\n return path.split(sep).join('/');\n}\n\n/** Resolves `rel` under `root`, refusing absolute paths and anything that escapes `root`. */\nfunction resolveInside(root: string, rel: string, label: string): string {\n if (typeof rel !== 'string' || rel.length === 0 || isAbsolute(rel)) {\n throw new ProInstallError(`Invalid ${label} path in ${PRO_MANIFEST_FILE}: \"${rel}\"`);\n }\n const full = resolve(root, rel);\n const fromRoot = relative(root, full);\n if (fromRoot.startsWith('..') || isAbsolute(fromRoot)) {\n throw new ProInstallError(`${label} path \"${rel}\" escapes its directory`);\n }\n return full;\n}\n\nexport function readProManifest(sourceDir: string): ProManifest {\n const manifestPath = join(sourceDir, PRO_MANIFEST_FILE);\n if (!existsSync(manifestPath)) {\n throw new ProInstallError(`No ${PRO_MANIFEST_FILE} found in ${sourceDir}`);\n }\n let manifest: ProManifest;\n try {\n manifest = JSON.parse(readFileSync(manifestPath, 'utf8')) as ProManifest;\n } catch (err) {\n throw new ProInstallError(\n `${PRO_MANIFEST_FILE} is not valid JSON: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n if (!manifest.name || !manifest.version || !Array.isArray(manifest.install)) {\n throw new ProInstallError(`${PRO_MANIFEST_FILE} must define name, version and install[]`);\n }\n return manifest;\n}\n\nfunction listFiles(dir: string): string[] {\n const files: string[] = [];\n for (const entry of readdirSync(dir, { withFileTypes: true })) {\n const full = join(dir, entry.name);\n if (entry.isDirectory()) files.push(...listFiles(full));\n else if (entry.isFile()) files.push(full);\n }\n return files;\n}\n\nexport function installPro(options: ProInstallOptions): ProInstallResult {\n const sourceDir = resolve(options.sourceDir);\n const targetDir = resolve(options.targetDir);\n const manifest = readProManifest(sourceDir);\n\n // Resolve every mapping before writing anything, so a bad entry aborts cleanly.\n const plan: Array<{ src: string; dest: string; rel: string }> = [];\n for (const mapping of manifest.install) {\n const from = resolveInside(sourceDir, mapping.from, 'from');\n const to = resolveInside(targetDir, mapping.to, 'to');\n if (!existsSync(from)) {\n throw new ProInstallError(`Manifest source \"${mapping.from}\" does not exist`);\n }\n const sources = statSync(from).isDirectory() ? listFiles(from) : [from];\n for (const src of sources) {\n const dest = statSync(from).isDirectory() ? join(to, relative(from, src)) : to;\n plan.push({ src, dest, rel: toPosix(relative(targetDir, dest)) });\n }\n }\n\n const written: string[] = [];\n const skipped: string[] = [];\n for (const { src, dest, rel } of plan) {\n if (existsSync(dest) && !options.force && !isGeneratedFile(dest)) {\n skipped.push(rel);\n continue;\n }\n written.push(rel);\n if (!options.dryRun) {\n mkdirSync(dirname(dest), { recursive: true });\n copyFileSync(src, dest);\n }\n }\n\n if (!options.dryRun) {\n const recordPath = join(targetDir, proRecordFile(manifest.name));\n mkdirSync(dirname(recordPath), { recursive: true });\n writeFileSync(\n recordPath,\n `${JSON.stringify(\n {\n name: manifest.name,\n version: manifest.version,\n installedAt: new Date().toISOString(),\n files: plan.map((p) => p.rel).sort(),\n },\n null,\n 2,\n )}\\n`,\n 'utf8',\n );\n }\n\n return { name: manifest.name, version: manifest.version, written, skipped };\n}\n","import { loadConfig, runSelftest } from '@cdal/core';\nimport { defineCommand } from 'citty';\nimport pc from 'picocolors';\n\nexport const selftestCommand = defineCommand({\n meta: {\n name: 'selftest',\n description: 'Run mutation testing on contract invariant rules and content guardrails',\n },\n args: {\n json: {\n type: 'boolean',\n description: 'Output as JSON payload (selftest.v1)',\n default: false,\n },\n config: {\n type: 'string',\n description: 'Path to cdal.config.mjs',\n },\n },\n async run({ args }) {\n const cwd = process.cwd();\n const { config: resolvedConfig } = await loadConfig(args.config);\n\n if (!args.json) {\n console.log(pc.bold(pc.cyan('\\n cdal selftest — mutation testing of quality gates')));\n console.log(\n pc.dim(' Testing whether validator and guardrails actually fire red when violated\\n'),\n );\n }\n\n const report = await runSelftest({\n cwd,\n config: resolvedConfig,\n });\n\n if (args.json) {\n console.log(JSON.stringify(report, null, 2));\n process.exit(report.ok ? 0 : 1);\n }\n\n // Display mutation results\n if (report.mutationResults.length > 0) {\n console.log(\n pc.bold(\n ` Contract Invariant Mutations (${report.mutationsPassed}/${report.mutationsTotal}):`,\n ),\n );\n for (const m of report.mutationResults) {\n if (m.passed) {\n console.log(\n ` ${pc.green('✔')} ${pc.cyan(m.rule.padEnd(26))} detected in ${pc.dim(m.file)}`,\n );\n } else {\n console.log(\n ` ${pc.red('✗')} ${pc.red(m.rule.padEnd(26))} ${pc.bold('MISSED')}: ${m.error ?? 'rule dead'}`,\n );\n }\n }\n console.log('');\n }\n\n // Display content probe results\n if (report.probeResults.length > 0) {\n console.log(\n pc.bold(` Forbidden Content Probes (${report.probesPassed}/${report.probesTotal}):`),\n );\n for (const p of report.probeResults) {\n const action = p.fires ? 'detected' : 'allowed';\n if (p.passed) {\n console.log(\n ` ${pc.green('✔')} ${pc.cyan(p.rule.padEnd(30))} ${pc.green(action)}: ${p.desc}`,\n );\n } else {\n console.log(\n ` ${pc.red('✗')} ${pc.red(p.rule.padEnd(30))} ${pc.bold('FAILED')}: ${p.error ?? 'unexpected behavior'}`,\n );\n }\n }\n console.log('');\n }\n\n // Summary\n console.log(\n pc.bold(\n ` Summary: ${report.mutationsPassed}/${report.mutationsTotal} contract rules verified via mutation.`,\n ),\n );\n console.log(\n pc.bold(\n ` ${report.probesPassed}/${report.probesTotal} content guardrail probes verified.\\n`,\n ),\n );\n if (report.skippedKinds.length > 0) {\n console.log(pc.dim(` Skipped (no contract file yet): ${report.skippedKinds.join(', ')}\\n`));\n }\n\n if (report.failures.length > 0) {\n console.log(pc.bold(pc.red(' CRITICAL GATE FAILURES:')));\n for (const f of report.failures) {\n console.log(` - ${pc.red(f)}`);\n }\n console.log('');\n process.exit(1);\n }\n\n console.log(pc.green(pc.bold(' ✔ Every quality gate rule is verified active and firing.\\n')));\n process.exit(0);\n },\n});\n","import { syncAdapters } from '@cdal/adapters';\nimport { loadConfig } from '@cdal/core';\nimport { defineCommand } from 'citty';\nimport pc from 'picocolors';\n\nexport const syncCommand = defineCommand({\n meta: {\n name: 'sync',\n description:\n 'Synchronize agent definitions, commands, hooks and rules across configured runtimes (with --check drift detection)',\n },\n args: {\n check: {\n type: 'boolean',\n description:\n 'Check for drift between cdal.config.mjs and runtime files without modifying disk',\n default: false,\n },\n config: {\n type: 'string',\n description: 'Custom path to cdal.config.mjs',\n },\n cwd: {\n type: 'string',\n description: 'Working directory path',\n },\n },\n async run({ args }) {\n try {\n const cwd = args.cwd || process.cwd();\n const { config } = await loadConfig(args.config || cwd);\n\n const res = syncAdapters({\n cwd,\n config,\n check: Boolean(args.check),\n });\n\n if (args.check) {\n if (res.inSync) {\n console.log(\n pc.green(\n `✅ Sync check passed: all ${res.totalFiles} adapter file(s) are in sync across [${config.runtimes.join(', ')}].`,\n ),\n );\n } else {\n console.error(\n pc.red(\n `❌ Sync check failed: ${res.driftedFiles.length} adapter file(s) drifted from configuration:`,\n ),\n );\n for (const file of res.driftedFiles) {\n console.error(pc.red(` - [DRIFT] ${file}`));\n }\n console.error(\n pc.yellow(\n '\\nRun `npx cdalkit sync` to synchronize runtime files with cdal.config.mjs.',\n ),\n );\n process.exit(1);\n }\n } else {\n console.log(\n pc.green(\n `✅ Synchronized ${res.updatedFiles.length} adapter file(s) across [${config.runtimes.join(', ')}]:`,\n ),\n );\n for (const file of res.updatedFiles) {\n console.log(pc.cyan(` - ${file}`));\n }\n if (res.updatedFiles.length === 0) {\n console.log(pc.dim(' (All files were already up-to-date)'));\n }\n }\n if (res.preservedFiles.length > 0) {\n console.log(\n pc.dim(\n ` ${res.preservedFiles.length} file(s) marked cdal:preserve were left untouched.`,\n ),\n );\n }\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n console.error(pc.red(`❌ Fatal error during sync: ${msg}`));\n process.exit(1);\n }\n },\n});\n","import path from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport {\n type TraceRequirement,\n formatTraceMarkdown,\n formatTraceText,\n loadConfig,\n scanTrace,\n} from '@cdal/core';\nimport { defineCommand } from 'citty';\nimport pc from 'picocolors';\n\nexport const traceCommand = defineCommand({\n meta: {\n name: 'trace',\n description: 'Inspect requirement-to-test traceability matrix (@REQ tags)',\n },\n args: {\n enforce: {\n type: 'boolean',\n description:\n 'Exit with code 1 if any implementing/done requirement lacks tests, tests fail, or unknown @REQ tags exist',\n default: false,\n },\n markdown: {\n type: 'boolean',\n description: 'Output as Markdown table ready for pull request description',\n default: false,\n },\n json: {\n type: 'boolean',\n description: 'Output as structured JSON (trace.v1)',\n default: false,\n },\n results: {\n type: 'string',\n description: 'Path to test execution JSON results file (vitest or playwright json reporter)',\n },\n config: {\n type: 'string',\n description: 'Path to cdal.config.mjs',\n },\n },\n async run({ args }) {\n const cwd = process.cwd();\n const { config: resolvedConfig } = await loadConfig(args.config);\n\n const contractsDir = resolvedConfig?.contractsDir ?? 'contracts';\n const reqContractPath = path.resolve(cwd, contractsDir, 'requirements.contract.mjs');\n\n let requirements: TraceRequirement[] = [];\n try {\n const imported = await import(pathToFileURL(reqContractPath).href);\n requirements = (imported.REQUIREMENTS ||\n imported.default?.REQUIREMENTS ||\n imported.default ||\n []) as TraceRequirement[];\n } catch (err: unknown) {\n const errorMsg = err instanceof Error ? err.message : String(err);\n console.error(pc.red(`Failed to load requirements from \"${reqContractPath}\": ${errorMsg}`));\n process.exit(1);\n }\n\n if (!Array.isArray(requirements) || requirements.length === 0) {\n console.warn(pc.yellow(`No requirements found in \"${reqContractPath}\".`));\n if (args.enforce) process.exit(1);\n return;\n }\n\n const report = scanTrace(requirements, {\n cwd,\n resultsFile: args.results,\n });\n\n if (args.json) {\n console.log(JSON.stringify(report, null, 2));\n } else if (args.markdown) {\n console.log(formatTraceMarkdown(report));\n } else {\n console.log(formatTraceText(report));\n }\n\n if (args.enforce && !report.ok) {\n process.exit(1);\n }\n },\n});\n","import { formatFindingsText, runValidation } from '@cdal/core';\nimport { defineCommand } from 'citty';\nimport pc from 'picocolors';\nimport { resolveCommandKinds } from '../kinds.js';\n\nexport const validateCommand = defineCommand({\n meta: {\n name: 'validate',\n description: 'Validate contract invariants across all registered contract kinds',\n },\n args: {\n strict: {\n type: 'boolean',\n description: 'Treat warnings as failures (exit 1)',\n default: false,\n },\n json: {\n type: 'boolean',\n description: 'Output findings using machine-readable findings.v1 JSON schema',\n default: false,\n },\n dir: {\n type: 'string',\n description: 'Custom path to contracts directory',\n },\n },\n async run({ args }) {\n try {\n const kinds = await resolveCommandKinds();\n\n const report = await runValidation({\n contractsDir: args.dir,\n strict: Boolean(args.strict),\n kinds,\n });\n\n if (args.json) {\n console.log(JSON.stringify(report, null, 2));\n } else {\n const text = formatFindingsText(report, Boolean(args.strict));\n if (report.valid) {\n console.log(pc.green(text));\n } else {\n console.error(pc.red(text));\n }\n }\n\n if (!report.valid) {\n process.exit(1);\n }\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n console.error(pc.red(`❌ Fatal error during contract validation: ${msg}`));\n process.exit(1);\n }\n },\n});\n","import { spawnSync } from 'node:child_process';\nimport { loadConfig } from '@cdal/core';\nimport { defineCommand } from 'citty';\nimport pc from 'picocolors';\n\nexport const verifyCommand = defineCommand({\n meta: {\n name: 'verify',\n description: 'Run deterministic CDAL verification pipeline defined in configuration',\n },\n args: {\n fast: {\n type: 'boolean',\n description: 'Run fast subset of verification steps (contract checks & selftest)',\n default: false,\n },\n full: {\n type: 'boolean',\n description: 'Force execution of all verification steps',\n default: false,\n },\n clean: {\n type: 'boolean',\n description: 'Clear temporary caches before running verification',\n default: false,\n },\n config: {\n type: 'string',\n description: 'Path to cdal.config.mjs',\n },\n cwd: {\n type: 'string',\n description: 'Working directory path',\n },\n },\n async run({ args }) {\n const cwd = args.cwd || process.cwd();\n const { config } = await loadConfig(args.config || cwd);\n\n let steps = [...config.verify];\n\n if (args.fast) {\n // In fast mode, run contract validation, codegen drift check, and selftest\n steps = steps.filter(\n (s) =>\n s.includes('validate') ||\n s.includes('codegen') ||\n s.includes('selftest') ||\n s.includes('typecheck'),\n );\n if (steps.length === 0) {\n steps = [config.verify[0] ?? 'cdal validate --strict'];\n }\n }\n\n console.log(\n pc.bold(pc.cyan(`\\n⚡ Running CDAL Verification Pipeline (${steps.length} step(s))...\\n`)),\n );\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i];\n if (!step) continue;\n console.log(pc.bold(pc.blue(`[${i + 1}/${steps.length}] ▶ ${step}`)));\n\n const start = Date.now();\n const res = spawnSync(step, {\n cwd,\n shell: true,\n stdio: 'inherit',\n });\n const duration = Date.now() - start;\n\n if (res.status !== 0) {\n console.error(\n pc.bold(\n pc.red(\n `\\n❌ Verification failed at step: \"${step}\" (exit code ${res.status ?? 1}, took ${duration}ms)`,\n ),\n ),\n );\n process.exit(res.status ?? 1);\n }\n\n console.log(pc.green(` ✓ Step passed in ${duration}ms\\n`));\n }\n\n console.log(\n pc.bold(\n pc.green(`✅ Full verification pipeline succeeded (${steps.length} step(s) passed).`),\n ),\n );\n },\n});\n","import { closeContractWindow, getContractWindowStatus, openContractWindow } from '@cdal/core';\nimport { defineCommand } from 'citty';\nimport pc from 'picocolors';\n\nexport const windowCommand = defineCommand({\n meta: {\n name: 'window',\n description: 'Manage contract window for protected path modifications',\n },\n args: {\n action: {\n type: 'positional',\n description: 'Action to perform: open, close, status',\n required: true,\n },\n ticket: {\n type: 'positional',\n description: 'Ticket or reason ID (required for open)',\n required: false,\n },\n duration: {\n type: 'string',\n description: 'Window duration in minutes (default: 60)',\n default: '60',\n },\n },\n run({ args }) {\n const action = args.action.toLowerCase();\n\n if (action === 'open') {\n const ticket = args.ticket;\n if (!ticket) {\n console.error(\n pc.red(\n 'Error: \"cdal window open\" requires a ticket or work order argument. Example: cdal window open WO-123',\n ),\n );\n process.exit(1);\n }\n const durationMinutes = Number.parseInt(args.duration, 10) || 60;\n const status = openContractWindow(ticket, { durationMinutes });\n console.log(pc.green(`✔ Contract window opened for ticket: ${pc.bold(status.ticket)}`));\n console.log(pc.dim(` Expires at: ${status.expiresAt}`));\n return;\n }\n\n if (action === 'close') {\n closeContractWindow();\n console.log(pc.green('✔ Contract window closed. Protected paths are locked.'));\n return;\n }\n\n if (action === 'status') {\n const status = getContractWindowStatus();\n if (status.open) {\n console.log(pc.green(`Contract window is ${pc.bold('OPEN')}`));\n console.log(` Ticket: ${status.ticket ?? 'none'}`);\n console.log(` Opened at: ${status.openedAt ?? 'unknown'}`);\n console.log(` Expires at: ${status.expiresAt ?? 'unknown'}`);\n } else {\n console.log(pc.yellow(`Contract window is ${pc.bold('CLOSED')}`));\n }\n return;\n }\n\n console.error(pc.red(`Unknown action \"${action}\". Available actions: open, close, status`));\n process.exit(1);\n },\n});\n"],"mappings":"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","names":["defineCommand","defineCommand","pc","defineCommand","pc","loadConfig","runCodegen","defineCommand","pc","loadConfig","defineCommand","existsSync","readFileSync","writeFileSync","join","syncAdapters","defineCommand","pc","loadConfig","defineCommand","pc","existsSync","join","resolve","defineCommand","pc","existsSync","mkdirSync","readFileSync","writeFileSync","join","resolve","path","resolve","existsSync","join","defineCommand","pc","loadConfig","defineCommand","pc","syncAdapters","loadConfig","defineCommand","pc","loadConfig","defineCommand","pc","requirements","defineCommand","pc","defineCommand","pc","spawnSync","loadConfig","defineCommand","pc","defineCommand","pc","defineCommand"]}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "cdalkit",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "Command-line interface and hook router for CDAL (Contract-Driven Agentic Loop)",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Michał Sznurowski",
7
- "homepage": "https://cdal-henna.vercel.app",
7
+ "homepage": "https://cdalkit.tech",
8
8
  "repository": {
9
9
  "type": "git",
10
10
  "url": "git+https://github.com/aiprojectmanagersznurowski-afk/cdal.git",
@@ -48,10 +48,10 @@
48
48
  "citty": "^0.1.6",
49
49
  "picocolors": "^1.1.1",
50
50
  "tinyglobby": "^0.2.10",
51
- "@cdal/adapters": "0.1.3",
52
- "@cdal/core": "0.1.1",
53
- "@cdal/kinds": "0.1.1",
54
- "@cdal/audit": "0.1.1"
51
+ "@cdal/adapters": "0.1.4",
52
+ "@cdal/audit": "0.1.2",
53
+ "@cdal/core": "0.1.2",
54
+ "@cdal/kinds": "0.1.2"
55
55
  },
56
56
  "devDependencies": {
57
57
  "tsup": "^8.3.6",