cdalkit 0.1.0 → 0.1.5
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/dist/cli.js +310 -66
- package/dist/cli.js.map +1 -1
- package/package.json +13 -5
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// src/cli.ts
|
|
2
|
-
import {
|
|
2
|
+
import { createRequire } from "module";
|
|
3
|
+
import { runMain as cittyRunMain, defineCommand as defineCommand14 } from "citty";
|
|
3
4
|
|
|
4
5
|
// src/commands/audit.ts
|
|
5
6
|
import { writeFileSync } from "fs";
|
|
@@ -146,6 +147,21 @@ import { syncAdapters } from "@cdal/adapters";
|
|
|
146
147
|
import { loadConfig, runCodegen as runCodegen2 } from "@cdal/core";
|
|
147
148
|
import { defineCommand as defineCommand3 } from "citty";
|
|
148
149
|
import pc3 from "picocolors";
|
|
150
|
+
function inspectClaudeHooks(settings) {
|
|
151
|
+
const groups = settings.hooks?.PreToolUse;
|
|
152
|
+
if (!Array.isArray(groups)) return "missing";
|
|
153
|
+
let legacy = false;
|
|
154
|
+
for (const group of groups) {
|
|
155
|
+
if (typeof group.command === "string" && /cdal(kit)? hook/.test(group.command)) legacy = true;
|
|
156
|
+
const handlers = Array.isArray(group.hooks) ? group.hooks : [];
|
|
157
|
+
for (const handler of handlers) {
|
|
158
|
+
if (handler.type === "command" && typeof handler.command === "string" && /cdal(kit)? hook guard-paths/.test(handler.command)) {
|
|
159
|
+
return "ok";
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return legacy ? "legacy-format" : "missing";
|
|
164
|
+
}
|
|
149
165
|
function runDoctorChecks(cwd, customConfig) {
|
|
150
166
|
const checks = [];
|
|
151
167
|
const nodeVer = process.version;
|
|
@@ -220,8 +236,9 @@ function runDoctorChecks(cwd, customConfig) {
|
|
|
220
236
|
const settingsPath = join(cwd, ".claude/settings.json");
|
|
221
237
|
if (existsSync(settingsPath)) {
|
|
222
238
|
try {
|
|
223
|
-
const
|
|
224
|
-
|
|
239
|
+
const settings = JSON.parse(readFileSync(settingsPath, "utf8"));
|
|
240
|
+
const wiring = inspectClaudeHooks(settings);
|
|
241
|
+
if (wiring === "ok") {
|
|
225
242
|
checks.push({
|
|
226
243
|
name: "Claude Code Hooks",
|
|
227
244
|
status: "ok",
|
|
@@ -231,8 +248,8 @@ function runDoctorChecks(cwd, customConfig) {
|
|
|
231
248
|
checks.push({
|
|
232
249
|
name: "Claude Code Hooks",
|
|
233
250
|
status: "warn",
|
|
234
|
-
message: ".claude/settings.json exists but does not
|
|
235
|
-
recommendation: "Run `
|
|
251
|
+
message: wiring === "legacy-format" ? ".claude/settings.json uses a hook format Claude Code ignores, so the CDAL gates never run" : ".claude/settings.json exists but does not wire the CDAL guard-paths hook",
|
|
252
|
+
recommendation: "Run `npx cdalkit sync` to regenerate the hook wiring."
|
|
236
253
|
});
|
|
237
254
|
}
|
|
238
255
|
} catch {
|
|
@@ -659,11 +676,227 @@ var phaseCommand = defineCommand6({
|
|
|
659
676
|
}
|
|
660
677
|
});
|
|
661
678
|
|
|
662
|
-
// src/commands/
|
|
663
|
-
import {
|
|
679
|
+
// src/commands/pro.ts
|
|
680
|
+
import { execFileSync } from "child_process";
|
|
681
|
+
import { existsSync as existsSync4, mkdtempSync, rmSync } from "fs";
|
|
682
|
+
import { tmpdir } from "os";
|
|
683
|
+
import { join as join4, resolve as resolve3 } from "path";
|
|
664
684
|
import { defineCommand as defineCommand7 } from "citty";
|
|
665
685
|
import pc6 from "picocolors";
|
|
666
|
-
|
|
686
|
+
|
|
687
|
+
// src/pro/install.ts
|
|
688
|
+
import {
|
|
689
|
+
copyFileSync,
|
|
690
|
+
existsSync as existsSync3,
|
|
691
|
+
mkdirSync as mkdirSync2,
|
|
692
|
+
readFileSync as readFileSync3,
|
|
693
|
+
readdirSync,
|
|
694
|
+
statSync,
|
|
695
|
+
writeFileSync as writeFileSync3
|
|
696
|
+
} from "fs";
|
|
697
|
+
import { dirname, isAbsolute, join as join3, relative, resolve as resolve2, sep } from "path";
|
|
698
|
+
var PRO_MANIFEST_FILE = "pro.manifest.json";
|
|
699
|
+
var PRO_RECORD_FILE = ".cdal/pro.json";
|
|
700
|
+
var GENERATED_MARKERS = ["CDAL GENERATED", "GENERATED by cdal sync"];
|
|
701
|
+
function isGeneratedFile(path2) {
|
|
702
|
+
const content = readFileSync3(path2, "utf8");
|
|
703
|
+
return GENERATED_MARKERS.some((marker) => content.includes(marker));
|
|
704
|
+
}
|
|
705
|
+
var ProInstallError = class extends Error {
|
|
706
|
+
constructor(message) {
|
|
707
|
+
super(message);
|
|
708
|
+
this.name = "ProInstallError";
|
|
709
|
+
}
|
|
710
|
+
};
|
|
711
|
+
function toPosix(path2) {
|
|
712
|
+
return path2.split(sep).join("/");
|
|
713
|
+
}
|
|
714
|
+
function resolveInside(root, rel, label) {
|
|
715
|
+
if (typeof rel !== "string" || rel.length === 0 || isAbsolute(rel)) {
|
|
716
|
+
throw new ProInstallError(`Invalid ${label} path in ${PRO_MANIFEST_FILE}: "${rel}"`);
|
|
717
|
+
}
|
|
718
|
+
const full = resolve2(root, rel);
|
|
719
|
+
const fromRoot = relative(root, full);
|
|
720
|
+
if (fromRoot.startsWith("..") || isAbsolute(fromRoot)) {
|
|
721
|
+
throw new ProInstallError(`${label} path "${rel}" escapes its directory`);
|
|
722
|
+
}
|
|
723
|
+
return full;
|
|
724
|
+
}
|
|
725
|
+
function readProManifest(sourceDir) {
|
|
726
|
+
const manifestPath = join3(sourceDir, PRO_MANIFEST_FILE);
|
|
727
|
+
if (!existsSync3(manifestPath)) {
|
|
728
|
+
throw new ProInstallError(`No ${PRO_MANIFEST_FILE} found in ${sourceDir}`);
|
|
729
|
+
}
|
|
730
|
+
let manifest;
|
|
731
|
+
try {
|
|
732
|
+
manifest = JSON.parse(readFileSync3(manifestPath, "utf8"));
|
|
733
|
+
} catch (err) {
|
|
734
|
+
throw new ProInstallError(
|
|
735
|
+
`${PRO_MANIFEST_FILE} is not valid JSON: ${err instanceof Error ? err.message : String(err)}`
|
|
736
|
+
);
|
|
737
|
+
}
|
|
738
|
+
if (!manifest.name || !manifest.version || !Array.isArray(manifest.install)) {
|
|
739
|
+
throw new ProInstallError(`${PRO_MANIFEST_FILE} must define name, version and install[]`);
|
|
740
|
+
}
|
|
741
|
+
return manifest;
|
|
742
|
+
}
|
|
743
|
+
function listFiles(dir) {
|
|
744
|
+
const files = [];
|
|
745
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
746
|
+
const full = join3(dir, entry.name);
|
|
747
|
+
if (entry.isDirectory()) files.push(...listFiles(full));
|
|
748
|
+
else if (entry.isFile()) files.push(full);
|
|
749
|
+
}
|
|
750
|
+
return files;
|
|
751
|
+
}
|
|
752
|
+
function installPro(options) {
|
|
753
|
+
const sourceDir = resolve2(options.sourceDir);
|
|
754
|
+
const targetDir = resolve2(options.targetDir);
|
|
755
|
+
const manifest = readProManifest(sourceDir);
|
|
756
|
+
const plan = [];
|
|
757
|
+
for (const mapping of manifest.install) {
|
|
758
|
+
const from = resolveInside(sourceDir, mapping.from, "from");
|
|
759
|
+
const to = resolveInside(targetDir, mapping.to, "to");
|
|
760
|
+
if (!existsSync3(from)) {
|
|
761
|
+
throw new ProInstallError(`Manifest source "${mapping.from}" does not exist`);
|
|
762
|
+
}
|
|
763
|
+
const sources = statSync(from).isDirectory() ? listFiles(from) : [from];
|
|
764
|
+
for (const src of sources) {
|
|
765
|
+
const dest = statSync(from).isDirectory() ? join3(to, relative(from, src)) : to;
|
|
766
|
+
plan.push({ src, dest, rel: toPosix(relative(targetDir, dest)) });
|
|
767
|
+
}
|
|
768
|
+
}
|
|
769
|
+
const written = [];
|
|
770
|
+
const skipped = [];
|
|
771
|
+
for (const { src, dest, rel } of plan) {
|
|
772
|
+
if (existsSync3(dest) && !options.force && !isGeneratedFile(dest)) {
|
|
773
|
+
skipped.push(rel);
|
|
774
|
+
continue;
|
|
775
|
+
}
|
|
776
|
+
written.push(rel);
|
|
777
|
+
if (!options.dryRun) {
|
|
778
|
+
mkdirSync2(dirname(dest), { recursive: true });
|
|
779
|
+
copyFileSync(src, dest);
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
if (!options.dryRun) {
|
|
783
|
+
const recordPath = join3(targetDir, PRO_RECORD_FILE);
|
|
784
|
+
mkdirSync2(dirname(recordPath), { recursive: true });
|
|
785
|
+
writeFileSync3(
|
|
786
|
+
recordPath,
|
|
787
|
+
`${JSON.stringify(
|
|
788
|
+
{
|
|
789
|
+
name: manifest.name,
|
|
790
|
+
version: manifest.version,
|
|
791
|
+
installedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
792
|
+
files: plan.map((p) => p.rel).sort()
|
|
793
|
+
},
|
|
794
|
+
null,
|
|
795
|
+
2
|
|
796
|
+
)}
|
|
797
|
+
`,
|
|
798
|
+
"utf8"
|
|
799
|
+
);
|
|
800
|
+
}
|
|
801
|
+
return { name: manifest.name, version: manifest.version, written, skipped };
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
// src/commands/pro.ts
|
|
805
|
+
var PRO_REPOSITORY_URL = "https://github.com/cdalkit/cdal-pro.git";
|
|
806
|
+
function resolveSource(from) {
|
|
807
|
+
const local = resolve3(from);
|
|
808
|
+
if (existsSync4(local)) return { dir: local, cleanup: () => {
|
|
809
|
+
} };
|
|
810
|
+
const dir = mkdtempSync(join4(tmpdir(), "cdal-pro-"));
|
|
811
|
+
const cleanup = () => rmSync(dir, { recursive: true, force: true });
|
|
812
|
+
try {
|
|
813
|
+
execFileSync("git", ["clone", "--depth", "1", "--quiet", from, dir], {
|
|
814
|
+
stdio: ["ignore", "ignore", "pipe"]
|
|
815
|
+
});
|
|
816
|
+
} catch {
|
|
817
|
+
cleanup();
|
|
818
|
+
throw new ProInstallError(
|
|
819
|
+
`Could not clone ${from}.
|
|
820
|
+
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.`
|
|
821
|
+
);
|
|
822
|
+
}
|
|
823
|
+
return { dir, cleanup };
|
|
824
|
+
}
|
|
825
|
+
var installCommand = defineCommand7({
|
|
826
|
+
meta: {
|
|
827
|
+
name: "install",
|
|
828
|
+
description: "Install CDAL Pro content (agent roles, templates, presets) into this project"
|
|
829
|
+
},
|
|
830
|
+
args: {
|
|
831
|
+
from: {
|
|
832
|
+
type: "string",
|
|
833
|
+
description: "Local copy or git URL of the cdal-pro repository",
|
|
834
|
+
default: PRO_REPOSITORY_URL
|
|
835
|
+
},
|
|
836
|
+
cwd: {
|
|
837
|
+
type: "string",
|
|
838
|
+
description: "Project directory to install into",
|
|
839
|
+
default: "."
|
|
840
|
+
},
|
|
841
|
+
force: {
|
|
842
|
+
type: "boolean",
|
|
843
|
+
description: "Overwrite files that already exist in the project",
|
|
844
|
+
default: false
|
|
845
|
+
},
|
|
846
|
+
dryRun: {
|
|
847
|
+
type: "boolean",
|
|
848
|
+
description: "Show what would be installed without writing anything",
|
|
849
|
+
default: false
|
|
850
|
+
}
|
|
851
|
+
},
|
|
852
|
+
run({ args }) {
|
|
853
|
+
let source;
|
|
854
|
+
try {
|
|
855
|
+
source = resolveSource(args.from);
|
|
856
|
+
const result = installPro({
|
|
857
|
+
sourceDir: source.dir,
|
|
858
|
+
targetDir: resolve3(args.cwd),
|
|
859
|
+
force: args.force,
|
|
860
|
+
dryRun: args.dryRun
|
|
861
|
+
});
|
|
862
|
+
const verb = args.dryRun ? "Would install" : "Installed";
|
|
863
|
+
console.log(pc6.green(`\u2714 ${verb} ${result.name} ${result.version}`));
|
|
864
|
+
console.log(` ${result.written.length} file(s) ${args.dryRun ? "to write" : "written"}`);
|
|
865
|
+
if (result.skipped.length > 0) {
|
|
866
|
+
console.log(
|
|
867
|
+
pc6.yellow(
|
|
868
|
+
` ${result.skipped.length} existing file(s) kept \u2014 rerun with --force to overwrite:`
|
|
869
|
+
)
|
|
870
|
+
);
|
|
871
|
+
for (const file of result.skipped) console.log(pc6.dim(` ${file}`));
|
|
872
|
+
}
|
|
873
|
+
if (!args.dryRun) {
|
|
874
|
+
console.log(pc6.dim(" Run `npx cdalkit sync` to wire the new roles into your runtimes."));
|
|
875
|
+
}
|
|
876
|
+
} catch (err) {
|
|
877
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
878
|
+
console.error(pc6.red(`\u2716 ${message}`));
|
|
879
|
+
process.exit(1);
|
|
880
|
+
} finally {
|
|
881
|
+
source?.cleanup();
|
|
882
|
+
}
|
|
883
|
+
}
|
|
884
|
+
});
|
|
885
|
+
var proCommand = defineCommand7({
|
|
886
|
+
meta: {
|
|
887
|
+
name: "pro",
|
|
888
|
+
description: "CDAL Pro: install licensed agent roles, templates and presets"
|
|
889
|
+
},
|
|
890
|
+
subCommands: {
|
|
891
|
+
install: installCommand
|
|
892
|
+
}
|
|
893
|
+
});
|
|
894
|
+
|
|
895
|
+
// src/commands/selftest.ts
|
|
896
|
+
import { loadConfig as loadConfig4, runSelftest } from "@cdal/core";
|
|
897
|
+
import { defineCommand as defineCommand8 } from "citty";
|
|
898
|
+
import pc7 from "picocolors";
|
|
899
|
+
var selftestCommand = defineCommand8({
|
|
667
900
|
meta: {
|
|
668
901
|
name: "selftest",
|
|
669
902
|
description: "Run mutation testing on contract invariant rules and content guardrails"
|
|
@@ -683,9 +916,9 @@ var selftestCommand = defineCommand7({
|
|
|
683
916
|
const cwd = process.cwd();
|
|
684
917
|
const { config: resolvedConfig } = await loadConfig4(args.config);
|
|
685
918
|
if (!args.json) {
|
|
686
|
-
console.log(
|
|
919
|
+
console.log(pc7.bold(pc7.cyan("\n cdal selftest \u2014 mutation testing of quality gates")));
|
|
687
920
|
console.log(
|
|
688
|
-
|
|
921
|
+
pc7.dim(" Testing whether validator and guardrails actually fire red when violated\n")
|
|
689
922
|
);
|
|
690
923
|
}
|
|
691
924
|
const report = await runSelftest({
|
|
@@ -698,18 +931,18 @@ var selftestCommand = defineCommand7({
|
|
|
698
931
|
}
|
|
699
932
|
if (report.mutationResults.length > 0) {
|
|
700
933
|
console.log(
|
|
701
|
-
|
|
934
|
+
pc7.bold(
|
|
702
935
|
` Contract Invariant Mutations (${report.mutationsPassed}/${report.mutationsTotal}):`
|
|
703
936
|
)
|
|
704
937
|
);
|
|
705
938
|
for (const m of report.mutationResults) {
|
|
706
939
|
if (m.passed) {
|
|
707
940
|
console.log(
|
|
708
|
-
` ${
|
|
941
|
+
` ${pc7.green("\u2714")} ${pc7.cyan(m.rule.padEnd(26))} detected in ${pc7.dim(m.file)}`
|
|
709
942
|
);
|
|
710
943
|
} else {
|
|
711
944
|
console.log(
|
|
712
|
-
` ${
|
|
945
|
+
` ${pc7.red("\u2717")} ${pc7.red(m.rule.padEnd(26))} ${pc7.bold("MISSED")}: ${m.error ?? "rule dead"}`
|
|
713
946
|
);
|
|
714
947
|
}
|
|
715
948
|
}
|
|
@@ -717,42 +950,42 @@ var selftestCommand = defineCommand7({
|
|
|
717
950
|
}
|
|
718
951
|
if (report.probeResults.length > 0) {
|
|
719
952
|
console.log(
|
|
720
|
-
|
|
953
|
+
pc7.bold(` Forbidden Content Probes (${report.probesPassed}/${report.probesTotal}):`)
|
|
721
954
|
);
|
|
722
955
|
for (const p of report.probeResults) {
|
|
723
956
|
const action = p.fires ? "detected" : "allowed";
|
|
724
957
|
if (p.passed) {
|
|
725
958
|
console.log(
|
|
726
|
-
` ${
|
|
959
|
+
` ${pc7.green("\u2714")} ${pc7.cyan(p.rule.padEnd(30))} ${pc7.green(action)}: ${p.desc}`
|
|
727
960
|
);
|
|
728
961
|
} else {
|
|
729
962
|
console.log(
|
|
730
|
-
` ${
|
|
963
|
+
` ${pc7.red("\u2717")} ${pc7.red(p.rule.padEnd(30))} ${pc7.bold("FAILED")}: ${p.error ?? "unexpected behavior"}`
|
|
731
964
|
);
|
|
732
965
|
}
|
|
733
966
|
}
|
|
734
967
|
console.log("");
|
|
735
968
|
}
|
|
736
969
|
console.log(
|
|
737
|
-
|
|
970
|
+
pc7.bold(
|
|
738
971
|
` Summary: ${report.mutationsPassed}/${report.mutationsTotal} contract rules verified via mutation.`
|
|
739
972
|
)
|
|
740
973
|
);
|
|
741
974
|
console.log(
|
|
742
|
-
|
|
975
|
+
pc7.bold(
|
|
743
976
|
` ${report.probesPassed}/${report.probesTotal} content guardrail probes verified.
|
|
744
977
|
`
|
|
745
978
|
)
|
|
746
979
|
);
|
|
747
980
|
if (report.failures.length > 0) {
|
|
748
|
-
console.log(
|
|
981
|
+
console.log(pc7.bold(pc7.red(" CRITICAL GATE FAILURES:")));
|
|
749
982
|
for (const f of report.failures) {
|
|
750
|
-
console.log(` - ${
|
|
983
|
+
console.log(` - ${pc7.red(f)}`);
|
|
751
984
|
}
|
|
752
985
|
console.log("");
|
|
753
986
|
process.exit(1);
|
|
754
987
|
}
|
|
755
|
-
console.log(
|
|
988
|
+
console.log(pc7.green(pc7.bold(" \u2714 Every quality gate rule is verified active and firing.\n")));
|
|
756
989
|
process.exit(0);
|
|
757
990
|
}
|
|
758
991
|
});
|
|
@@ -760,9 +993,9 @@ var selftestCommand = defineCommand7({
|
|
|
760
993
|
// src/commands/sync.ts
|
|
761
994
|
import { syncAdapters as syncAdapters3 } from "@cdal/adapters";
|
|
762
995
|
import { loadConfig as loadConfig5 } from "@cdal/core";
|
|
763
|
-
import { defineCommand as
|
|
764
|
-
import
|
|
765
|
-
var syncCommand =
|
|
996
|
+
import { defineCommand as defineCommand9 } from "citty";
|
|
997
|
+
import pc8 from "picocolors";
|
|
998
|
+
var syncCommand = defineCommand9({
|
|
766
999
|
meta: {
|
|
767
1000
|
name: "sync",
|
|
768
1001
|
description: "Synchronize agent definitions, commands, hooks and rules across configured runtimes (with --check drift detection)"
|
|
@@ -794,40 +1027,49 @@ var syncCommand = defineCommand8({
|
|
|
794
1027
|
if (args.check) {
|
|
795
1028
|
if (res.inSync) {
|
|
796
1029
|
console.log(
|
|
797
|
-
|
|
1030
|
+
pc8.green(
|
|
798
1031
|
`\u2705 Sync check passed: all ${res.totalFiles} adapter file(s) are in sync across [${config.runtimes.join(", ")}].`
|
|
799
1032
|
)
|
|
800
1033
|
);
|
|
801
1034
|
} else {
|
|
802
1035
|
console.error(
|
|
803
|
-
|
|
1036
|
+
pc8.red(
|
|
804
1037
|
`\u274C Sync check failed: ${res.driftedFiles.length} adapter file(s) drifted from configuration:`
|
|
805
1038
|
)
|
|
806
1039
|
);
|
|
807
1040
|
for (const file of res.driftedFiles) {
|
|
808
|
-
console.error(
|
|
1041
|
+
console.error(pc8.red(` - [DRIFT] ${file}`));
|
|
809
1042
|
}
|
|
810
1043
|
console.error(
|
|
811
|
-
|
|
1044
|
+
pc8.yellow(
|
|
1045
|
+
"\nRun `npx cdalkit sync` to synchronize runtime files with cdal.config.mjs."
|
|
1046
|
+
)
|
|
812
1047
|
);
|
|
813
1048
|
process.exit(1);
|
|
814
1049
|
}
|
|
815
1050
|
} else {
|
|
816
1051
|
console.log(
|
|
817
|
-
|
|
1052
|
+
pc8.green(
|
|
818
1053
|
`\u2705 Synchronized ${res.updatedFiles.length} adapter file(s) across [${config.runtimes.join(", ")}]:`
|
|
819
1054
|
)
|
|
820
1055
|
);
|
|
821
1056
|
for (const file of res.updatedFiles) {
|
|
822
|
-
console.log(
|
|
1057
|
+
console.log(pc8.cyan(` - ${file}`));
|
|
823
1058
|
}
|
|
824
1059
|
if (res.updatedFiles.length === 0) {
|
|
825
|
-
console.log(
|
|
1060
|
+
console.log(pc8.dim(" (All files were already up-to-date)"));
|
|
826
1061
|
}
|
|
827
1062
|
}
|
|
1063
|
+
if (res.preservedFiles.length > 0) {
|
|
1064
|
+
console.log(
|
|
1065
|
+
pc8.dim(
|
|
1066
|
+
` ${res.preservedFiles.length} file(s) marked cdal:preserve were left untouched.`
|
|
1067
|
+
)
|
|
1068
|
+
);
|
|
1069
|
+
}
|
|
828
1070
|
} catch (err) {
|
|
829
1071
|
const msg = err instanceof Error ? err.message : String(err);
|
|
830
|
-
console.error(
|
|
1072
|
+
console.error(pc8.red(`\u274C Fatal error during sync: ${msg}`));
|
|
831
1073
|
process.exit(1);
|
|
832
1074
|
}
|
|
833
1075
|
}
|
|
@@ -842,9 +1084,9 @@ import {
|
|
|
842
1084
|
loadConfig as loadConfig6,
|
|
843
1085
|
scanTrace
|
|
844
1086
|
} from "@cdal/core";
|
|
845
|
-
import { defineCommand as
|
|
846
|
-
import
|
|
847
|
-
var traceCommand =
|
|
1087
|
+
import { defineCommand as defineCommand10 } from "citty";
|
|
1088
|
+
import pc9 from "picocolors";
|
|
1089
|
+
var traceCommand = defineCommand10({
|
|
848
1090
|
meta: {
|
|
849
1091
|
name: "trace",
|
|
850
1092
|
description: "Inspect requirement-to-test traceability matrix (@REQ tags)"
|
|
@@ -885,11 +1127,11 @@ var traceCommand = defineCommand9({
|
|
|
885
1127
|
requirements3 = imported.REQUIREMENTS || imported.default?.REQUIREMENTS || imported.default || [];
|
|
886
1128
|
} catch (err) {
|
|
887
1129
|
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
888
|
-
console.error(
|
|
1130
|
+
console.error(pc9.red(`Failed to load requirements from "${reqContractPath}": ${errorMsg}`));
|
|
889
1131
|
process.exit(1);
|
|
890
1132
|
}
|
|
891
1133
|
if (!Array.isArray(requirements3) || requirements3.length === 0) {
|
|
892
|
-
console.warn(
|
|
1134
|
+
console.warn(pc9.yellow(`No requirements found in "${reqContractPath}".`));
|
|
893
1135
|
if (args.enforce) process.exit(1);
|
|
894
1136
|
return;
|
|
895
1137
|
}
|
|
@@ -913,9 +1155,9 @@ var traceCommand = defineCommand9({
|
|
|
913
1155
|
// src/commands/validate.ts
|
|
914
1156
|
import { formatFindingsText, runValidation } from "@cdal/core";
|
|
915
1157
|
import { policies as policies2, requirements as requirements2, stateMachine as stateMachine2 } from "@cdal/kinds";
|
|
916
|
-
import { defineCommand as
|
|
917
|
-
import
|
|
918
|
-
var validateCommand =
|
|
1158
|
+
import { defineCommand as defineCommand11 } from "citty";
|
|
1159
|
+
import pc10 from "picocolors";
|
|
1160
|
+
var validateCommand = defineCommand11({
|
|
919
1161
|
meta: {
|
|
920
1162
|
name: "validate",
|
|
921
1163
|
description: "Validate contract invariants across all registered contract kinds"
|
|
@@ -949,9 +1191,9 @@ var validateCommand = defineCommand10({
|
|
|
949
1191
|
} else {
|
|
950
1192
|
const text = formatFindingsText(report, Boolean(args.strict));
|
|
951
1193
|
if (report.valid) {
|
|
952
|
-
console.log(
|
|
1194
|
+
console.log(pc10.green(text));
|
|
953
1195
|
} else {
|
|
954
|
-
console.error(
|
|
1196
|
+
console.error(pc10.red(text));
|
|
955
1197
|
}
|
|
956
1198
|
}
|
|
957
1199
|
if (!report.valid) {
|
|
@@ -959,7 +1201,7 @@ var validateCommand = defineCommand10({
|
|
|
959
1201
|
}
|
|
960
1202
|
} catch (err) {
|
|
961
1203
|
const msg = err instanceof Error ? err.message : String(err);
|
|
962
|
-
console.error(
|
|
1204
|
+
console.error(pc10.red(`\u274C Fatal error during contract validation: ${msg}`));
|
|
963
1205
|
process.exit(1);
|
|
964
1206
|
}
|
|
965
1207
|
}
|
|
@@ -968,9 +1210,9 @@ var validateCommand = defineCommand10({
|
|
|
968
1210
|
// src/commands/verify.ts
|
|
969
1211
|
import { spawnSync as spawnSync2 } from "child_process";
|
|
970
1212
|
import { loadConfig as loadConfig7 } from "@cdal/core";
|
|
971
|
-
import { defineCommand as
|
|
972
|
-
import
|
|
973
|
-
var verifyCommand =
|
|
1213
|
+
import { defineCommand as defineCommand12 } from "citty";
|
|
1214
|
+
import pc11 from "picocolors";
|
|
1215
|
+
var verifyCommand = defineCommand12({
|
|
974
1216
|
meta: {
|
|
975
1217
|
name: "verify",
|
|
976
1218
|
description: "Run deterministic CDAL verification pipeline defined in configuration"
|
|
@@ -1013,14 +1255,14 @@ var verifyCommand = defineCommand11({
|
|
|
1013
1255
|
}
|
|
1014
1256
|
}
|
|
1015
1257
|
console.log(
|
|
1016
|
-
|
|
1258
|
+
pc11.bold(pc11.cyan(`
|
|
1017
1259
|
\u26A1 Running CDAL Verification Pipeline (${steps.length} step(s))...
|
|
1018
1260
|
`))
|
|
1019
1261
|
);
|
|
1020
1262
|
for (let i = 0; i < steps.length; i++) {
|
|
1021
1263
|
const step = steps[i];
|
|
1022
1264
|
if (!step) continue;
|
|
1023
|
-
console.log(
|
|
1265
|
+
console.log(pc11.bold(pc11.blue(`[${i + 1}/${steps.length}] \u25B6 ${step}`)));
|
|
1024
1266
|
const start = Date.now();
|
|
1025
1267
|
const res = spawnSync2(step, {
|
|
1026
1268
|
cwd,
|
|
@@ -1030,8 +1272,8 @@ var verifyCommand = defineCommand11({
|
|
|
1030
1272
|
const duration = Date.now() - start;
|
|
1031
1273
|
if (res.status !== 0) {
|
|
1032
1274
|
console.error(
|
|
1033
|
-
|
|
1034
|
-
|
|
1275
|
+
pc11.bold(
|
|
1276
|
+
pc11.red(
|
|
1035
1277
|
`
|
|
1036
1278
|
\u274C Verification failed at step: "${step}" (exit code ${res.status ?? 1}, took ${duration}ms)`
|
|
1037
1279
|
)
|
|
@@ -1039,12 +1281,12 @@ var verifyCommand = defineCommand11({
|
|
|
1039
1281
|
);
|
|
1040
1282
|
process.exit(res.status ?? 1);
|
|
1041
1283
|
}
|
|
1042
|
-
console.log(
|
|
1284
|
+
console.log(pc11.green(` \u2713 Step passed in ${duration}ms
|
|
1043
1285
|
`));
|
|
1044
1286
|
}
|
|
1045
1287
|
console.log(
|
|
1046
|
-
|
|
1047
|
-
|
|
1288
|
+
pc11.bold(
|
|
1289
|
+
pc11.green(`\u2705 Full verification pipeline succeeded (${steps.length} step(s) passed).`)
|
|
1048
1290
|
)
|
|
1049
1291
|
);
|
|
1050
1292
|
}
|
|
@@ -1052,9 +1294,9 @@ var verifyCommand = defineCommand11({
|
|
|
1052
1294
|
|
|
1053
1295
|
// src/commands/window.ts
|
|
1054
1296
|
import { closeContractWindow, getContractWindowStatus, openContractWindow } from "@cdal/core";
|
|
1055
|
-
import { defineCommand as
|
|
1056
|
-
import
|
|
1057
|
-
var windowCommand =
|
|
1297
|
+
import { defineCommand as defineCommand13 } from "citty";
|
|
1298
|
+
import pc12 from "picocolors";
|
|
1299
|
+
var windowCommand = defineCommand13({
|
|
1058
1300
|
meta: {
|
|
1059
1301
|
name: "window",
|
|
1060
1302
|
description: "Manage contract window for protected path modifications"
|
|
@@ -1082,7 +1324,7 @@ var windowCommand = defineCommand12({
|
|
|
1082
1324
|
const ticket = args.ticket;
|
|
1083
1325
|
if (!ticket) {
|
|
1084
1326
|
console.error(
|
|
1085
|
-
|
|
1327
|
+
pc12.red(
|
|
1086
1328
|
'Error: "cdal window open" requires a ticket or work order argument. Example: cdal window open WO-123'
|
|
1087
1329
|
)
|
|
1088
1330
|
);
|
|
@@ -1090,37 +1332,38 @@ var windowCommand = defineCommand12({
|
|
|
1090
1332
|
}
|
|
1091
1333
|
const durationMinutes = Number.parseInt(args.duration, 10) || 60;
|
|
1092
1334
|
const status = openContractWindow(ticket, { durationMinutes });
|
|
1093
|
-
console.log(
|
|
1094
|
-
console.log(
|
|
1335
|
+
console.log(pc12.green(`\u2714 Contract window opened for ticket: ${pc12.bold(status.ticket)}`));
|
|
1336
|
+
console.log(pc12.dim(` Expires at: ${status.expiresAt}`));
|
|
1095
1337
|
return;
|
|
1096
1338
|
}
|
|
1097
1339
|
if (action === "close") {
|
|
1098
1340
|
closeContractWindow();
|
|
1099
|
-
console.log(
|
|
1341
|
+
console.log(pc12.green("\u2714 Contract window closed. Protected paths are locked."));
|
|
1100
1342
|
return;
|
|
1101
1343
|
}
|
|
1102
1344
|
if (action === "status") {
|
|
1103
1345
|
const status = getContractWindowStatus();
|
|
1104
1346
|
if (status.open) {
|
|
1105
|
-
console.log(
|
|
1347
|
+
console.log(pc12.green(`Contract window is ${pc12.bold("OPEN")}`));
|
|
1106
1348
|
console.log(` Ticket: ${status.ticket ?? "none"}`);
|
|
1107
1349
|
console.log(` Opened at: ${status.openedAt ?? "unknown"}`);
|
|
1108
1350
|
console.log(` Expires at: ${status.expiresAt ?? "unknown"}`);
|
|
1109
1351
|
} else {
|
|
1110
|
-
console.log(
|
|
1352
|
+
console.log(pc12.yellow(`Contract window is ${pc12.bold("CLOSED")}`));
|
|
1111
1353
|
}
|
|
1112
1354
|
return;
|
|
1113
1355
|
}
|
|
1114
|
-
console.error(
|
|
1356
|
+
console.error(pc12.red(`Unknown action "${action}". Available actions: open, close, status`));
|
|
1115
1357
|
process.exit(1);
|
|
1116
1358
|
}
|
|
1117
1359
|
});
|
|
1118
1360
|
|
|
1119
1361
|
// src/cli.ts
|
|
1120
|
-
var
|
|
1362
|
+
var { version } = createRequire(import.meta.url)("../package.json");
|
|
1363
|
+
var main = defineCommand14({
|
|
1121
1364
|
meta: {
|
|
1122
1365
|
name: "cdal",
|
|
1123
|
-
version
|
|
1366
|
+
version,
|
|
1124
1367
|
description: "Contract-Driven Agentic Loop (CDAL) Quality Gates & Audit CLI"
|
|
1125
1368
|
},
|
|
1126
1369
|
subCommands: {
|
|
@@ -1135,7 +1378,8 @@ var main = defineCommand13({
|
|
|
1135
1378
|
verify: verifyCommand,
|
|
1136
1379
|
doctor: doctorCommand,
|
|
1137
1380
|
hook: hookCommand,
|
|
1138
|
-
audit: auditCommand
|
|
1381
|
+
audit: auditCommand,
|
|
1382
|
+
pro: proCommand
|
|
1139
1383
|
}
|
|
1140
1384
|
});
|
|
1141
1385
|
function runMain() {
|
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/selftest.ts","../src/commands/sync.ts","../src/commands/trace.ts","../src/commands/validate.ts","../src/commands/verify.ts","../src/commands/window.ts"],"sourcesContent":["import { 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 { 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\nconst main = defineCommand({\n meta: {\n name: 'cdal',\n version: '0.1.0',\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 },\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\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 settingsContent = readFileSync(settingsPath, 'utf8');\n if (settingsContent.includes('cdal hook')) {\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: '.claude/settings.json exists but does not call `cdal hook`',\n recommendation: 'Run `cdal sync` to wire quality gate hooks.',\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 { 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('\\nRun `cdal sync` to synchronize runtime files with cdal.config.mjs.'),\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 } 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":";AAAA,SAAS,WAAW,cAAc,iBAAAA,uBAAqB;;;ACAvD,SAAS,qBAAqB;AAC9B,SAAS,eAAe;AACxB,SAAS,kBAAkB,sBAAsB,gBAAgB;AAEjE,SAAS,qBAAqB;AAC9B,OAAO,QAAQ;AAER,IAAM,eAAe,cAAc;AAAA,EACxC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,MACV,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,IACA,WAAW;AAAA,MACT,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,YAAY,QAAQ,KAAK,QAAQ,GAAG;AAC1C,UAAM,OAAQ,KAAK,SAAS,OAAO,OAAO;AAE1C,QAAI,CAAC,KAAK,MAAM;AACd,cAAQ,IAAI,GAAG,KAAK,GAAG,KAAK,2DAAoD,CAAC,CAAC;AAAA,IACpF;AAEA,UAAM,SAAS,MAAM,SAAS;AAAA,MAC5B,KAAK;AAAA,MACL;AAAA,IACF,CAAC;AAED,QAAI,KAAK,MAAM;AACb,YAAM,cAAc,iBAAiB,QAAQ,IAAI;AACjD,YAAM,UAAU,QAAQ,KAAK,IAAI;AACjC,oBAAc,SAAS,aAAa,MAAM;AAC1C,UAAI,CAAC,KAAK,MAAM;AACd,gBAAQ,IAAI,GAAG,MAAM,sCAAiC,OAAO,EAAE,CAAC;AAAA,MAClE;AAAA,IACF;AAEA,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA,IAC7C,OAAO;AACL,cAAQ,IAAI,qBAAqB,QAAQ,IAAI,CAAC;AAAA,IAChD;AAEA,QAAI,KAAK,WAAW;AAClB,YAAM,YAAY,OAAO,SAAS,KAAK,WAAW,EAAE;AACpD,UAAI,CAAC,OAAO,MAAM,SAAS,KAAK,OAAO,QAAQ,WAAW;AACxD,gBAAQ;AAAA,UACN,GAAG;AAAA,YACD;AAAA,qBAAmB,OAAO,KAAK,uBAAuB,SAAS;AAAA,UACjE;AAAA,QACF;AACA,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AACF,CAAC;;;ACjFD,SAAS,kBAAkB;AAC3B,SAAS,UAAU,cAAc,oBAAoB;AACrD,SAAS,iBAAAC,sBAAqB;AAC9B,OAAOC,SAAQ;AAER,IAAM,iBAAiBD,eAAc;AAAA,EAC1C,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ,OAAO;AAAA,MACL,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,IACA,KAAK;AAAA,MACH,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,QAAI;AACF,YAAM,eAAe,CAAC,aAAa,GAAG,aAAa,GAAG,SAAS,CAAC;AAEhE,YAAM,MAAM,MAAM,WAAW;AAAA,QAC3B,cAAc,KAAK;AAAA,QACnB,OAAO,QAAQ,KAAK,KAAK;AAAA,QACzB,OAAO;AAAA,MACT,CAAC;AAED,UAAI,KAAK,OAAO;AACd,YAAI,CAAC,IAAI,OAAO;AACd,kBAAQ,IAAIC,IAAG,MAAM,sEAAiE,CAAC;AAAA,QACzF,OAAO;AACL,kBAAQ,MAAMA,IAAG,IAAI,iEAA4D,CAAC;AAClF,qBAAW,KAAK,IAAI,OAAO;AACzB,gBAAI,EAAE,WAAW,SAAS;AACxB,sBAAQ,MAAMA,IAAG,IAAI,eAAe,EAAE,IAAI,KAAK,EAAE,QAAQ,GAAG,CAAC;AAAA,YAC/D,WAAW,EAAE,WAAW,WAAW;AACjC,sBAAQ,MAAMA,IAAG,IAAI,iBAAiB,EAAE,IAAI,KAAK,EAAE,QAAQ,GAAG,CAAC;AAAA,YACjE;AAAA,UACF;AACA,kBAAQ;AAAA,YACNA,IAAG,OAAO,qEAAqE;AAAA,UACjF;AACA,kBAAQ,KAAK,CAAC;AAAA,QAChB;AAAA,MACF,OAAO;AACL,gBAAQ,IAAIA,IAAG,MAAM,kBAAa,IAAI,MAAM,MAAM,wBAAwB,CAAC;AAC3E,mBAAW,KAAK,IAAI,OAAO;AACzB,kBAAQ,IAAIA,IAAG,KAAK,OAAO,EAAE,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;AAAA,QACvD;AAAA,MACF;AAAA,IACF,SAAS,KAAc;AACrB,YAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC3D,cAAQ,MAAMA,IAAG,IAAI,sCAAiC,GAAG,EAAE,CAAC;AAC5D,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF,CAAC;;;AC7DD,SAAS,iBAAiB;AAC1B,SAAS,YAAY,oBAAoB;AACzC,SAAS,YAAY;AACrB,SAAS,oBAAoB;AAC7B,SAAqD,YAAY,cAAAC,mBAAkB;AACnF,SAAS,iBAAAC,sBAAqB;AAC9B,OAAOC,SAAQ;AASR,SAAS,gBACd,KACA,cAIA;AACA,QAAM,SAA8B,CAAC;AAGrC,QAAM,UAAU,QAAQ;AACxB,QAAM,QAAQ,mBAAmB,KAAK,OAAO;AAC7C,QAAM,QAAQ,QAAQ,CAAC,IAAI,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE,IAAI;AAC3D,QAAM,QAAQ,QAAQ,CAAC,IAAI,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE,IAAI;AAE3D,MAAI,QAAQ,MAAO,UAAU,MAAM,SAAS,GAAI;AAC9C,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,SAAS,QAAQ,OAAO;AAAA,IAC1B,CAAC;AAAA,EACH,OAAO;AACL,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,SAAS,gBAAgB,OAAO;AAAA,MAChC,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AAGA,QAAM,gBAAgB,UAAU,OAAO,CAAC,WAAW,GAAG,EAAE,UAAU,OAAO,CAAC;AAC1E,MAAI,cAAc,WAAW,GAAG;AAC9B,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH,OAAO;AACL,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,SAAS,qBAAqB,cAAc,OAAO,KAAK,CAAC;AAAA,IAC3D,CAAC;AAED,UAAM,aAAa,UAAU,OAAO,CAAC,aAAa,uBAAuB,GAAG;AAAA,MAC1E;AAAA,MACA,UAAU;AAAA,IACZ,CAAC;AACD,QAAI,WAAW,WAAW,GAAG;AAC3B,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,gBAAgB;AAAA,MAClB,CAAC;AAAA,IACH,OAAO;AACL,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF;AAGA,MAAI,YAAuC;AAC3C,MAAI;AACF,UAAM,SAAS,eAAe,KAAK,YAAY;AAC/C,gBAAY,OAAO;AACnB,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,SAAS,iCAAiC,OAAO,WAAW,OAAO,WAAW,gBAAgB;AAAA,IAChG,CAAC;AAAA,EACH,SAAS,KAAc;AACrB,UAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC3D,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,SAAS,mCAAmC,GAAG;AAAA,MAC/C,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AAGA,QAAM,eAAe,KAAK,KAAK,uBAAuB;AACtD,MAAI,WAAW,YAAY,GAAG;AAC5B,QAAI;AACF,YAAM,kBAAkB,aAAa,cAAc,MAAM;AACzD,UAAI,gBAAgB,SAAS,WAAW,GAAG;AACzC,eAAO,KAAK;AAAA,UACV,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,SAAS;AAAA,QACX,CAAC;AAAA,MACH,OAAO;AACL,eAAO,KAAK;AAAA,UACV,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,gBAAgB;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,IACF,QAAQ;AACN,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAAA,EACF,OAAO;AACL,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AAGA,MAAI,WAAW;AACb,QAAI;AACF,YAAM,UAAU,aAAa,EAAE,KAAK,QAAQ,WAAW,OAAO,KAAK,CAAC;AACpE,UAAI,QAAQ,QAAQ;AAClB,eAAO,KAAK;AAAA,UACV,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,SAAS,OAAO,QAAQ,UAAU;AAAA,QACpC,CAAC;AAAA,MACH,OAAO;AACL,eAAO,KAAK;AAAA,UACV,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,SAAS,GAAG,QAAQ,aAAa,MAAM,gDAAgD,QAAQ,aAAa,KAAK,IAAI,CAAC;AAAA,UACtH,gBAAgB;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,IACF,SAAS,KAAc;AACrB,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,SAAS,iCAAiC,OAAO,GAAG,CAAC;AAAA,MACvD,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,UAAU,OAAO,MAAM,CAAC,MAAM,EAAE,WAAW,OAAO;AACxD,SAAO,EAAE,QAAQ,QAAQ;AAC3B;AAEA,SAAS,eAAe,KAAa,cAAuB;AAC1D,QAAM,aAAa,gBAAgB,KAAK,KAAK,iBAAiB;AAC9D,MAAI,WAAW,UAAU,GAAG;AAC1B,WAAO,EAAE,QAAQ,MAAM,UAAU,WAAW;AAAA,EAC9C;AACA,SAAO,EAAE,QAAQ,MAAM,UAAU,KAAK;AACxC;AAEO,IAAM,gBAAgBD,eAAc;AAAA,EACzC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA,KAAK;AAAA,MACH,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,MAAM,KAAK,OAAO,QAAQ,IAAI;AACpC,YAAQ,IAAIC,IAAG,KAAKA,IAAG,KAAK,iDAA0C,CAAC,CAAC;AAExE,QAAI,iBAA4C;AAChD,QAAI;AACF,YAAM,SAAS,MAAM,WAAW,KAAK,UAAU,GAAG;AAClD,uBAAiB,OAAO;AAAA,IAC1B,SAAS,KAAc;AACrB,cAAQ,MAAMA,IAAG,IAAI,sCAA4B,OAAO,GAAG,CAAC,EAAE,CAAC;AAAA,IACjE;AAEA,UAAM,EAAE,QAAQ,QAAQ,IAAI,gBAAgB,KAAK,KAAK,MAAM;AAG5D,QAAI,gBAAgB;AAClB,UAAI;AACF,cAAM,aAAa,MAAMF,YAAW;AAAA,UAClC,cAAc,eAAe;AAAA,UAC7B,OAAO,eAAe;AAAA,UACtB,OAAO;AAAA,QACT,CAAC;AACD,YAAI,CAAC,WAAW,OAAO;AACrB,iBAAO,KAAK;AAAA,YACV,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,SAAS;AAAA,UACX,CAAC;AAAA,QACH,OAAO;AACL,iBAAO,KAAK;AAAA,YACV,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,gBAAgB;AAAA,UAClB,CAAC;AAAA,QACH;AAAA,MACF,QAAQ;AAAA,MAER;AAAA,IACF;AAEA,eAAW,SAAS,QAAQ;AAC1B,UAAI,MAAM,WAAW,MAAM;AACzB,gBAAQ,IAAIE,IAAG,MAAM,iBAAYA,IAAG,KAAK,MAAM,IAAI,CAAC,KAAK,MAAM,OAAO,EAAE,CAAC;AAAA,MAC3E,WAAW,MAAM,WAAW,QAAQ;AAClC,gBAAQ,IAAIA,IAAG,OAAO,0BAAgBA,IAAG,KAAK,MAAM,IAAI,CAAC,KAAK,MAAM,OAAO,EAAE,CAAC;AAC9E,YAAI,MAAM,gBAAgB;AACxB,kBAAQ,IAAIA,IAAG,IAAI,yBAAyB,MAAM,cAAc,EAAE,CAAC;AAAA,QACrE;AAAA,MACF,OAAO;AACL,gBAAQ,IAAIA,IAAG,IAAI,mBAAcA,IAAG,KAAK,MAAM,IAAI,CAAC,KAAK,MAAM,OAAO,EAAE,CAAC;AACzE,YAAI,MAAM,gBAAgB;AACxB,kBAAQ,IAAIA,IAAG,OAAO,yBAAyB,MAAM,cAAc,EAAE,CAAC;AAAA,QACxE;AAAA,MACF;AAAA,IACF;AAEA,QAAI,SAAS;AACX,cAAQ;AAAA,QACNA,IAAG,KAAKA,IAAG,MAAM,2EAAsE,CAAC;AAAA,MAC1F;AAAA,IACF,OAAO;AACL,cAAQ,IAAIA,IAAG,KAAKA,IAAG,IAAI,mEAA8D,CAAC,CAAC;AAC3F,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF,CAAC;;;ACjQD,OAAO,QAAQ;AACf,SAAwB,mBAAmB;AAC3C,SAAS,cAAAC,mBAAkB;AAC3B,SAAS,iBAAAC,sBAAqB;AAE9B,IAAM,cAAc,oBAAI,IAAI;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,IAAM,cAAcA,eAAc;AAAA,EACvC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aACE;AAAA,MACF,UAAU;AAAA,IACZ;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,IACA,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,WAAW,KAAK;AACtB,QAAI,CAAC,YAAY,IAAI,QAAQ,GAAG;AAC9B,cAAQ,OAAO;AAAA,QACb,sBAAsB,QAAQ,mBAAmB,MAAM,KAAK,WAAW,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA,MACrF;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,QAAI,aAAa;AACjB,QAAI;AACF,mBAAa,GAAG,aAAa,GAAG,MAAM;AAAA,IACxC,QAAQ;AAAA,IAER;AAEA,UAAM,MAAM,QAAQ,IAAI;AACxB,UAAM,EAAE,OAAO,IAAI,MAAMD,YAAW,KAAK,MAAM;AAE/C,UAAM,SAAS,MAAM,YAAY,UAAU,YAAY;AAAA,MACrD;AAAA,MACA;AAAA,MACA,cAAc,KAAK;AAAA,MACnB,SAAS,KAAK;AAAA,IAChB,CAAC;AAED,QAAI,OAAO,QAAQ;AACjB,cAAQ,OAAO,MAAM,GAAG,OAAO,MAAM;AAAA,CAAI;AAAA,IAC3C;AAEA,QAAI,OAAO,QAAQ;AACjB,cAAQ,OAAO,MAAM,OAAO,MAAM;AAAA,IACpC;AAEA,YAAQ,KAAK,OAAO,QAAQ;AAAA,EAC9B;AACF,CAAC;;;AC5ED,SAAS,cAAAE,aAAY,WAAW,gBAAAC,eAAc,iBAAAC,sBAAqB;AACnE,SAAS,QAAAC,aAAY;AACrB,SAAS,gBAAAC,qBAAoB;AAC7B,SAAS,qBAAqB;AAC9B,SAAS,iBAAAC,sBAAqB;AAC9B,OAAOC,SAAQ;AAER,IAAM,cAAcD,eAAc;AAAA,EACvC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,MACH,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,MACP,SAAS;AAAA,IACX;AAAA,IACA,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,IACA,KAAK;AAAA,MACH,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,MAAM,KAAK,OAAO,QAAQ,IAAI;AACpC,YAAQ,IAAIC,IAAG,KAAKA,IAAG,KAAK,mEAA4D,CAAC,CAAC;AAE1F,UAAM,SAAS,KAAK,UAAU;AAC9B,UAAM,eAAe,KAAK,WAAW,yBAClC,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EACnB,OAAO,OAAO;AAGjB,UAAM,eAAeH,MAAK,KAAK,WAAW;AAC1C,QAAI,CAACH,YAAW,YAAY,GAAG;AAC7B,gBAAU,cAAc,EAAE,WAAW,KAAK,CAAC;AAAA,IAC7C;AAEA,UAAM,qBAAqBG,MAAK,cAAc,2BAA2B;AACzE,QAAI,CAACH,YAAW,kBAAkB,GAAG;AACnC,YAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAc9B,MAAAE,eAAc,oBAAoB,uBAAuB,MAAM;AAC/D,cAAQ;AAAA,QACNI,IAAG,MAAM,sCAAiCA,IAAG,KAAK,qCAAqC,CAAC,EAAE;AAAA,MAC5F;AAAA,IACF;AAGA,UAAM,aAAaH,MAAK,KAAK,iBAAiB;AAC9C,QAAI,CAACH,YAAW,UAAU,GAAG;AAC3B,YAAM,oBAAoB,YAAY,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,KAAK,IAAI;AACpE,YAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAUb,MAAM;AAAA,eACN,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAS1B,MAAAE,eAAc,YAAY,eAAe,MAAM;AAC/C,cAAQ,IAAII,IAAG,MAAM,mCAA8BA,IAAG,KAAK,iBAAiB,CAAC,EAAE,CAAC;AAAA,IAClF,OAAO;AACL,cAAQ;AAAA,QACNA,IAAG,IAAI,8EAAyE;AAAA,MAClF;AAAA,IACF;AAGA,UAAM,UAAUH,MAAK,KAAK,cAAc;AACxC,QAAIH,YAAW,OAAO,GAAG;AACvB,UAAI;AACF,cAAM,SAASC,cAAa,SAAS,MAAM;AAC3C,cAAM,MAAM,KAAK,MAAM,MAAM;AAC7B,YAAI,UAAU,IAAI,WAAW,CAAC;AAC9B,YAAI,UAAU;AAEd,YAAI,CAAC,IAAI,QAAQ,QAAQ;AACvB,cAAI,QAAQ,SAAS;AACrB,oBAAU;AAAA,QACZ;AACA,YAAI,CAAC,IAAI,QAAQ,UAAU;AACzB,cAAI,QAAQ,WAAW;AACvB,oBAAU;AAAA,QACZ;AACA,YAAI,CAAC,IAAI,QAAQ,OAAO;AACtB,cAAI,QAAQ,QAAQ;AACpB,oBAAU;AAAA,QACZ;AAEA,YAAI,SAAS;AACX,UAAAC,eAAc,SAAS,GAAG,KAAK,UAAU,KAAK,MAAM,CAAC,CAAC;AAAA,GAAM,MAAM;AAClE,kBAAQ;AAAA,YACNI,IAAG,MAAM,mDAA8CA,IAAG,KAAK,cAAc,CAAC,EAAE;AAAA,UAClF;AAAA,QACF;AAAA,MACF,QAAQ;AACN,gBAAQ,IAAIA,IAAG,OAAO,sEAA4D,CAAC;AAAA,MACrF;AAAA,IACF;AAGA,UAAM,iBAAiB,cAAc;AAAA,MACnC,SAAS,CAAC,MAAM;AAAA,MAChB,UAAU;AAAA,IACZ,CAAC;AAED,UAAM,UAAUF,cAAa;AAAA,MAC3B;AAAA,MACA,QAAQ;AAAA,MACR,OAAO;AAAA,IACT,CAAC;AAED,YAAQ;AAAA,MACNE,IAAG;AAAA,QACD,sBAAiB,QAAQ,aAAa,MAAM,oCAAoC,YAAY,KAAK,IAAI,CAAC;AAAA,MACxG;AAAA,IACF;AAEA,YAAQ,IAAIA,IAAG,KAAKA,IAAG,MAAM,4CAAqC,CAAC,CAAC;AACpE,YAAQ,IAAIA,IAAG,KAAK,aAAa,CAAC;AAClC,YAAQ,IAAIA,IAAG,IAAI,mDAAmD,CAAC;AACvE,YAAQ,IAAIA,IAAG,IAAI,4DAA4D,CAAC;AAChF,YAAQ,IAAIA,IAAG,IAAI,uDAAuD,CAAC;AAAA,EAC7E;AACF,CAAC;;;AClKD,SAAyB,YAAY,cAAAC,mBAAkB;AACvD,SAAS,iBAAAC,sBAAqB;AAC9B,OAAOC,SAAQ;AAER,IAAM,eAAeD,eAAc;AAAA,EACxC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,OAAO;AAAA,MACL,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,IACA,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,YAAY,KAAK,SAAS,IAAI,YAAY;AAChD,QAAI,CAAC,CAAC,YAAY,OAAO,OAAO,EAAE,SAAS,QAAQ,GAAG;AACpD,cAAQ,MAAMC,IAAG,IAAI,kBAAkB,QAAQ,4CAA4C,CAAC;AAC5F,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,UAAM,QAAQ;AAEd,UAAM,MAAM,QAAQ,IAAI;AACxB,UAAM,EAAE,QAAQ,eAAe,IAAI,MAAMF,YAAW,KAAK,MAAM;AAE/D,UAAM,SAAS,WAAW,OAAO;AAAA,MAC/B;AAAA,MACA,MAAM,KAAK;AAAA,MACX,gBAAgB,gBAAgB;AAAA,IAClC,CAAC;AAED,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAC3C,cAAQ,KAAK,OAAO,KAAK,IAAI,CAAC;AAAA,IAChC;AAEA,YAAQ,IAAIE,IAAG,KAAK;AAAA,WAAc,OAAO,KAAK,EAAE,CAAC;AACjD,YAAQ,IAAI,6BAA6B,OAAO,MAAM,MAAM;AAAA,CAAI;AAEhE,QAAI,OAAO,WAAW,WAAW,GAAG;AAClC,UAAI,OAAO,MAAM,WAAW,GAAG;AAC7B,YAAI,UAAU,OAAO;AACnB,kBAAQ;AAAA,YACNA,IAAG;AAAA,cACD;AAAA,YACF;AAAA,UACF;AACA,kBAAQ,KAAK,CAAC;AAAA,QAChB;AACA,gBAAQ,IAAIA,IAAG,IAAI,qCAAqC,CAAC;AACzD,gBAAQ,KAAK,CAAC;AAAA,MAChB;AACA,cAAQ,IAAIA,IAAG,MAAM,sDAAiD,CAAC;AACvE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,YAAQ;AAAA,MACNA,IAAG,IAAI,YAAO,OAAO,WAAW,MAAM;AAAA,CAA8C;AAAA,IACtF;AACA,eAAW,KAAK,OAAO,YAAY;AACjC,cAAQ,IAAI,SAAS,CAAC,EAAE;AAAA,IAC1B;AACA,YAAQ,IAAIA,IAAG,IAAI;AAAA,IAAO,OAAO,GAAG;AAAA,CAAI,CAAC;AACzC,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;;;AChFD,SAAS,cAAAC,aAAY,mBAAmB;AACxC,SAAS,iBAAAC,sBAAqB;AAC9B,OAAOC,SAAQ;AAER,IAAM,kBAAkBD,eAAc;AAAA,EAC3C,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,IACA,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,MAAM,QAAQ,IAAI;AACxB,UAAM,EAAE,QAAQ,eAAe,IAAI,MAAMD,YAAW,KAAK,MAAM;AAE/D,QAAI,CAAC,KAAK,MAAM;AACd,cAAQ,IAAIE,IAAG,KAAKA,IAAG,KAAK,4DAAuD,CAAC,CAAC;AACrF,cAAQ;AAAA,QACNA,IAAG,IAAI,8EAA8E;AAAA,MACvF;AAAA,IACF;AAEA,UAAM,SAAS,MAAM,YAAY;AAAA,MAC/B;AAAA,MACA,QAAQ;AAAA,IACV,CAAC;AAED,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAC3C,cAAQ,KAAK,OAAO,KAAK,IAAI,CAAC;AAAA,IAChC;AAGA,QAAI,OAAO,gBAAgB,SAAS,GAAG;AACrC,cAAQ;AAAA,QACNA,IAAG;AAAA,UACD,mCAAmC,OAAO,eAAe,IAAI,OAAO,cAAc;AAAA,QACpF;AAAA,MACF;AACA,iBAAW,KAAK,OAAO,iBAAiB;AACtC,YAAI,EAAE,QAAQ;AACZ,kBAAQ;AAAA,YACN,KAAKA,IAAG,MAAM,QAAG,CAAC,IAAIA,IAAG,KAAK,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC,gBAAgBA,IAAG,IAAI,EAAE,IAAI,CAAC;AAAA,UAChF;AAAA,QACF,OAAO;AACL,kBAAQ;AAAA,YACN,KAAKA,IAAG,IAAI,QAAG,CAAC,IAAIA,IAAG,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC,IAAIA,IAAG,KAAK,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW;AAAA,UAC/F;AAAA,QACF;AAAA,MACF;AACA,cAAQ,IAAI,EAAE;AAAA,IAChB;AAGA,QAAI,OAAO,aAAa,SAAS,GAAG;AAClC,cAAQ;AAAA,QACNA,IAAG,KAAK,+BAA+B,OAAO,YAAY,IAAI,OAAO,WAAW,IAAI;AAAA,MACtF;AACA,iBAAW,KAAK,OAAO,cAAc;AACnC,cAAM,SAAS,EAAE,QAAQ,aAAa;AACtC,YAAI,EAAE,QAAQ;AACZ,kBAAQ;AAAA,YACN,KAAKA,IAAG,MAAM,QAAG,CAAC,IAAIA,IAAG,KAAK,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC,IAAIA,IAAG,MAAM,MAAM,CAAC,KAAK,EAAE,IAAI;AAAA,UACjF;AAAA,QACF,OAAO;AACL,kBAAQ;AAAA,YACN,KAAKA,IAAG,IAAI,QAAG,CAAC,IAAIA,IAAG,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC,CAAC,IAAIA,IAAG,KAAK,QAAQ,CAAC,KAAK,EAAE,SAAS,qBAAqB;AAAA,UACzG;AAAA,QACF;AAAA,MACF;AACA,cAAQ,IAAI,EAAE;AAAA,IAChB;AAGA,YAAQ;AAAA,MACNA,IAAG;AAAA,QACD,cAAc,OAAO,eAAe,IAAI,OAAO,cAAc;AAAA,MAC/D;AAAA,IACF;AACA,YAAQ;AAAA,MACNA,IAAG;AAAA,QACD,cAAc,OAAO,YAAY,IAAI,OAAO,WAAW;AAAA;AAAA,MACzD;AAAA,IACF;AAEA,QAAI,OAAO,SAAS,SAAS,GAAG;AAC9B,cAAQ,IAAIA,IAAG,KAAKA,IAAG,IAAI,2BAA2B,CAAC,CAAC;AACxD,iBAAW,KAAK,OAAO,UAAU;AAC/B,gBAAQ,IAAI,SAASA,IAAG,IAAI,CAAC,CAAC,EAAE;AAAA,MAClC;AACA,cAAQ,IAAI,EAAE;AACd,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,YAAQ,IAAIA,IAAG,MAAMA,IAAG,KAAK,mEAA8D,CAAC,CAAC;AAC7F,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;;;AC1GD,SAAS,gBAAAC,qBAAoB;AAC7B,SAAS,cAAAC,mBAAkB;AAC3B,SAAS,iBAAAC,sBAAqB;AAC9B,OAAOC,SAAQ;AAER,IAAM,cAAcD,eAAc;AAAA,EACvC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ,OAAO;AAAA,MACL,MAAM;AAAA,MACN,aACE;AAAA,MACF,SAAS;AAAA,IACX;AAAA,IACA,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA,KAAK;AAAA,MACH,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,QAAI;AACF,YAAM,MAAM,KAAK,OAAO,QAAQ,IAAI;AACpC,YAAM,EAAE,OAAO,IAAI,MAAMD,YAAW,KAAK,UAAU,GAAG;AAEtD,YAAM,MAAMD,cAAa;AAAA,QACvB;AAAA,QACA;AAAA,QACA,OAAO,QAAQ,KAAK,KAAK;AAAA,MAC3B,CAAC;AAED,UAAI,KAAK,OAAO;AACd,YAAI,IAAI,QAAQ;AACd,kBAAQ;AAAA,YACNG,IAAG;AAAA,cACD,iCAA4B,IAAI,UAAU,wCAAwC,OAAO,SAAS,KAAK,IAAI,CAAC;AAAA,YAC9G;AAAA,UACF;AAAA,QACF,OAAO;AACL,kBAAQ;AAAA,YACNA,IAAG;AAAA,cACD,6BAAwB,IAAI,aAAa,MAAM;AAAA,YACjD;AAAA,UACF;AACA,qBAAW,QAAQ,IAAI,cAAc;AACnC,oBAAQ,MAAMA,IAAG,IAAI,eAAe,IAAI,EAAE,CAAC;AAAA,UAC7C;AACA,kBAAQ;AAAA,YACNA,IAAG,OAAO,sEAAsE;AAAA,UAClF;AACA,kBAAQ,KAAK,CAAC;AAAA,QAChB;AAAA,MACF,OAAO;AACL,gBAAQ;AAAA,UACNA,IAAG;AAAA,YACD,uBAAkB,IAAI,aAAa,MAAM,4BAA4B,OAAO,SAAS,KAAK,IAAI,CAAC;AAAA,UACjG;AAAA,QACF;AACA,mBAAW,QAAQ,IAAI,cAAc;AACnC,kBAAQ,IAAIA,IAAG,KAAK,OAAO,IAAI,EAAE,CAAC;AAAA,QACpC;AACA,YAAI,IAAI,aAAa,WAAW,GAAG;AACjC,kBAAQ,IAAIA,IAAG,IAAI,uCAAuC,CAAC;AAAA,QAC7D;AAAA,MACF;AAAA,IACF,SAAS,KAAc;AACrB,YAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC3D,cAAQ,MAAMA,IAAG,IAAI,mCAA8B,GAAG,EAAE,CAAC;AACzD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF,CAAC;;;AC9ED,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAC9B;AAAA,EAEE;AAAA,EACA;AAAA,EACA,cAAAC;AAAA,EACA;AAAA,OACK;AACP,SAAS,iBAAAC,sBAAqB;AAC9B,OAAOC,SAAQ;AAER,IAAM,eAAeD,eAAc;AAAA,EACxC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,SAAS;AAAA,MACP,MAAM;AAAA,MACN,aACE;AAAA,MACF,SAAS;AAAA,IACX;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,MAAM,QAAQ,IAAI;AACxB,UAAM,EAAE,QAAQ,eAAe,IAAI,MAAMD,YAAW,KAAK,MAAM;AAE/D,UAAM,eAAe,gBAAgB,gBAAgB;AACrD,UAAM,kBAAkB,KAAK,QAAQ,KAAK,cAAc,2BAA2B;AAEnF,QAAIG,gBAAmC,CAAC;AACxC,QAAI;AACF,YAAM,WAAW,MAAM,OAAO,cAAc,eAAe,EAAE;AAC7D,MAAAA,gBAAgB,SAAS,gBACvB,SAAS,SAAS,gBAClB,SAAS,WACT,CAAC;AAAA,IACL,SAAS,KAAc;AACrB,YAAM,WAAW,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAChE,cAAQ,MAAMD,IAAG,IAAI,qCAAqC,eAAe,MAAM,QAAQ,EAAE,CAAC;AAC1F,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,QAAI,CAAC,MAAM,QAAQC,aAAY,KAAKA,cAAa,WAAW,GAAG;AAC7D,cAAQ,KAAKD,IAAG,OAAO,6BAA6B,eAAe,IAAI,CAAC;AACxE,UAAI,KAAK,QAAS,SAAQ,KAAK,CAAC;AAChC;AAAA,IACF;AAEA,UAAM,SAAS,UAAUC,eAAc;AAAA,MACrC;AAAA,MACA,aAAa,KAAK;AAAA,IACpB,CAAC;AAED,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA,IAC7C,WAAW,KAAK,UAAU;AACxB,cAAQ,IAAI,oBAAoB,MAAM,CAAC;AAAA,IACzC,OAAO;AACL,cAAQ,IAAI,gBAAgB,MAAM,CAAC;AAAA,IACrC;AAEA,QAAI,KAAK,WAAW,CAAC,OAAO,IAAI;AAC9B,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF,CAAC;;;ACtFD,SAAS,oBAAoB,qBAAqB;AAClD,SAAS,YAAAC,WAAU,gBAAAC,eAAc,gBAAAC,qBAAoB;AACrD,SAAS,iBAAAC,uBAAqB;AAC9B,OAAOC,SAAQ;AAER,IAAM,kBAAkBD,gBAAc;AAAA,EAC3C,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,IACA,KAAK;AAAA,MACH,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,QAAI;AAEF,YAAM,eAAe,CAACF,cAAa,GAAGC,cAAa,GAAGF,UAAS,CAAC;AAEhE,YAAM,SAAS,MAAM,cAAc;AAAA,QACjC,cAAc,KAAK;AAAA,QACnB,QAAQ,QAAQ,KAAK,MAAM;AAAA,QAC3B,OAAO;AAAA,MACT,CAAC;AAED,UAAI,KAAK,MAAM;AACb,gBAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA,MAC7C,OAAO;AACL,cAAM,OAAO,mBAAmB,QAAQ,QAAQ,KAAK,MAAM,CAAC;AAC5D,YAAI,OAAO,OAAO;AAChB,kBAAQ,IAAII,IAAG,MAAM,IAAI,CAAC;AAAA,QAC5B,OAAO;AACL,kBAAQ,MAAMA,IAAG,IAAI,IAAI,CAAC;AAAA,QAC5B;AAAA,MACF;AAEA,UAAI,CAAC,OAAO,OAAO;AACjB,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF,SAAS,KAAc;AACrB,YAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC3D,cAAQ,MAAMA,IAAG,IAAI,kDAA6C,GAAG,EAAE,CAAC;AACxE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF,CAAC;;;ACzDD,SAAS,aAAAC,kBAAiB;AAC1B,SAAS,cAAAC,mBAAkB;AAC3B,SAAS,iBAAAC,uBAAqB;AAC9B,OAAOC,UAAQ;AAER,IAAM,gBAAgBD,gBAAc;AAAA,EACzC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,IACA,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,IACA,KAAK;AAAA,MACH,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,MAAM,KAAK,OAAO,QAAQ,IAAI;AACpC,UAAM,EAAE,OAAO,IAAI,MAAMD,YAAW,KAAK,UAAU,GAAG;AAEtD,QAAI,QAAQ,CAAC,GAAG,OAAO,MAAM;AAE7B,QAAI,KAAK,MAAM;AAEb,cAAQ,MAAM;AAAA,QACZ,CAAC,MACC,EAAE,SAAS,UAAU,KACrB,EAAE,SAAS,SAAS,KACpB,EAAE,SAAS,UAAU,KACrB,EAAE,SAAS,WAAW;AAAA,MAC1B;AACA,UAAI,MAAM,WAAW,GAAG;AACtB,gBAAQ,CAAC,OAAO,OAAO,CAAC,KAAK,wBAAwB;AAAA,MACvD;AAAA,IACF;AAEA,YAAQ;AAAA,MACNE,KAAG,KAAKA,KAAG,KAAK;AAAA,6CAA2C,MAAM,MAAM;AAAA,CAAgB,CAAC;AAAA,IAC1F;AAEA,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,YAAM,OAAO,MAAM,CAAC;AACpB,UAAI,CAAC,KAAM;AACX,cAAQ,IAAIA,KAAG,KAAKA,KAAG,KAAK,IAAI,IAAI,CAAC,IAAI,MAAM,MAAM,YAAO,IAAI,EAAE,CAAC,CAAC;AAEpE,YAAM,QAAQ,KAAK,IAAI;AACvB,YAAM,MAAMH,WAAU,MAAM;AAAA,QAC1B;AAAA,QACA,OAAO;AAAA,QACP,OAAO;AAAA,MACT,CAAC;AACD,YAAM,WAAW,KAAK,IAAI,IAAI;AAE9B,UAAI,IAAI,WAAW,GAAG;AACpB,gBAAQ;AAAA,UACNG,KAAG;AAAA,YACDA,KAAG;AAAA,cACD;AAAA,uCAAqC,IAAI,gBAAgB,IAAI,UAAU,CAAC,UAAU,QAAQ;AAAA,YAC5F;AAAA,UACF;AAAA,QACF;AACA,gBAAQ,KAAK,IAAI,UAAU,CAAC;AAAA,MAC9B;AAEA,cAAQ,IAAIA,KAAG,MAAM,2BAAsB,QAAQ;AAAA,CAAM,CAAC;AAAA,IAC5D;AAEA,YAAQ;AAAA,MACNA,KAAG;AAAA,QACDA,KAAG,MAAM,gDAA2C,MAAM,MAAM,mBAAmB;AAAA,MACrF;AAAA,IACF;AAAA,EACF;AACF,CAAC;;;AC5FD,SAAS,qBAAqB,yBAAyB,0BAA0B;AACjF,SAAS,iBAAAC,uBAAqB;AAC9B,OAAOC,UAAQ;AAER,IAAM,gBAAgBD,gBAAc;AAAA,EACzC,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,IACA,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,IAAI,EAAE,KAAK,GAAG;AACZ,UAAM,SAAS,KAAK,OAAO,YAAY;AAEvC,QAAI,WAAW,QAAQ;AACrB,YAAM,SAAS,KAAK;AACpB,UAAI,CAAC,QAAQ;AACX,gBAAQ;AAAA,UACNC,KAAG;AAAA,YACD;AAAA,UACF;AAAA,QACF;AACA,gBAAQ,KAAK,CAAC;AAAA,MAChB;AACA,YAAM,kBAAkB,OAAO,SAAS,KAAK,UAAU,EAAE,KAAK;AAC9D,YAAM,SAAS,mBAAmB,QAAQ,EAAE,gBAAgB,CAAC;AAC7D,cAAQ,IAAIA,KAAG,MAAM,6CAAwCA,KAAG,KAAK,OAAO,MAAM,CAAC,EAAE,CAAC;AACtF,cAAQ,IAAIA,KAAG,IAAI,iBAAiB,OAAO,SAAS,EAAE,CAAC;AACvD;AAAA,IACF;AAEA,QAAI,WAAW,SAAS;AACtB,0BAAoB;AACpB,cAAQ,IAAIA,KAAG,MAAM,4DAAuD,CAAC;AAC7E;AAAA,IACF;AAEA,QAAI,WAAW,UAAU;AACvB,YAAM,SAAS,wBAAwB;AACvC,UAAI,OAAO,MAAM;AACf,gBAAQ,IAAIA,KAAG,MAAM,sBAAsBA,KAAG,KAAK,MAAM,CAAC,EAAE,CAAC;AAC7D,gBAAQ,IAAI,iBAAiB,OAAO,UAAU,MAAM,EAAE;AACtD,gBAAQ,IAAI,iBAAiB,OAAO,YAAY,SAAS,EAAE;AAC3D,gBAAQ,IAAI,iBAAiB,OAAO,aAAa,SAAS,EAAE;AAAA,MAC9D,OAAO;AACL,gBAAQ,IAAIA,KAAG,OAAO,sBAAsBA,KAAG,KAAK,QAAQ,CAAC,EAAE,CAAC;AAAA,MAClE;AACA;AAAA,IACF;AAEA,YAAQ,MAAMA,KAAG,IAAI,mBAAmB,MAAM,2CAA2C,CAAC;AAC1F,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;;;AZtDD,IAAM,OAAOC,gBAAc;AAAA,EACzB,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,UAAU;AAAA,IACV,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AACF,CAAC;AAEM,SAAS,UAAU;AACxB,eAAa,IAAI;AACnB;","names":["defineCommand","defineCommand","pc","runCodegen","defineCommand","pc","loadConfig","defineCommand","existsSync","readFileSync","writeFileSync","join","syncAdapters","defineCommand","pc","loadConfig","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/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"]}
|
package/package.json
CHANGED
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cdalkit",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
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
7
|
"homepage": "https://cdal-henna.vercel.app",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/aiprojectmanagersznurowski-afk/cdal.git",
|
|
11
|
+
"directory": "packages/cli"
|
|
12
|
+
},
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/aiprojectmanagersznurowski-afk/cdal/issues"
|
|
15
|
+
},
|
|
8
16
|
"keywords": [
|
|
9
17
|
"ai",
|
|
10
18
|
"agents",
|
|
@@ -40,10 +48,10 @@
|
|
|
40
48
|
"citty": "^0.1.6",
|
|
41
49
|
"picocolors": "^1.1.1",
|
|
42
50
|
"tinyglobby": "^0.2.10",
|
|
43
|
-
"@cdal/adapters": "0.1.
|
|
44
|
-
"@cdal/
|
|
45
|
-
"@cdal/
|
|
46
|
-
"@cdal/
|
|
51
|
+
"@cdal/adapters": "0.1.3",
|
|
52
|
+
"@cdal/core": "0.1.1",
|
|
53
|
+
"@cdal/kinds": "0.1.1",
|
|
54
|
+
"@cdal/audit": "0.1.1"
|
|
47
55
|
},
|
|
48
56
|
"devDependencies": {
|
|
49
57
|
"tsup": "^8.3.6",
|