@tenova/swt3-ai 0.5.1 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +227 -10
  3. package/dist/buffer.d.ts +7 -1
  4. package/dist/buffer.d.ts.map +1 -1
  5. package/dist/buffer.js +38 -3
  6. package/dist/buffer.js.map +1 -1
  7. package/dist/cli.d.ts +13 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +202 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/config.d.ts +18 -5
  12. package/dist/config.d.ts.map +1 -1
  13. package/dist/config.js +346 -42
  14. package/dist/config.js.map +1 -1
  15. package/dist/demo.d.ts +1 -1
  16. package/dist/demo.d.ts.map +1 -1
  17. package/dist/demo.js +88 -4
  18. package/dist/demo.js.map +1 -1
  19. package/dist/doctor.d.ts +20 -0
  20. package/dist/doctor.d.ts.map +1 -0
  21. package/dist/doctor.js +357 -0
  22. package/dist/doctor.js.map +1 -0
  23. package/dist/environment.d.ts +34 -0
  24. package/dist/environment.d.ts.map +1 -0
  25. package/dist/environment.js +99 -0
  26. package/dist/environment.js.map +1 -0
  27. package/dist/exporters/chain-monitor.d.ts +55 -0
  28. package/dist/exporters/chain-monitor.d.ts.map +1 -0
  29. package/dist/exporters/chain-monitor.js +172 -0
  30. package/dist/exporters/chain-monitor.js.map +1 -0
  31. package/dist/hardware.d.ts +96 -0
  32. package/dist/hardware.d.ts.map +1 -0
  33. package/dist/hardware.js +265 -0
  34. package/dist/hardware.js.map +1 -0
  35. package/dist/index.d.ts +19 -3
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +10 -2
  38. package/dist/index.js.map +1 -1
  39. package/dist/merkle.d.ts +107 -0
  40. package/dist/merkle.d.ts.map +1 -0
  41. package/dist/merkle.js +226 -0
  42. package/dist/merkle.js.map +1 -0
  43. package/dist/schema.d.ts +18 -0
  44. package/dist/schema.d.ts.map +1 -0
  45. package/dist/schema.js +255 -0
  46. package/dist/schema.js.map +1 -0
  47. package/dist/trust.d.ts +100 -0
  48. package/dist/trust.d.ts.map +1 -0
  49. package/dist/trust.js +222 -0
  50. package/dist/trust.js.map +1 -0
  51. package/dist/types.d.ts +167 -11
  52. package/dist/types.d.ts.map +1 -1
  53. package/dist/types.js +42 -1
  54. package/dist/types.js.map +1 -1
  55. package/dist/wal.d.ts +69 -0
  56. package/dist/wal.d.ts.map +1 -0
  57. package/dist/wal.js +223 -0
  58. package/dist/wal.js.map +1 -0
  59. package/dist/witness.d.ts +293 -1
  60. package/dist/witness.d.ts.map +1 -1
  61. package/dist/witness.js +1234 -5
  62. package/dist/witness.js.map +1 -1
  63. package/package.json +7 -7
  64. package/templates/cost-conscious.yaml +35 -0
  65. package/templates/eu-ai-act-high-risk.yaml +56 -0
  66. package/templates/granite-sovereign.yaml +55 -0
  67. package/templates/minimal.yaml +38 -0
  68. package/templates/mythos-defense.yaml +65 -0
  69. package/templates/nist-ai-rmf.yaml +47 -0
  70. package/templates/owasp-agentic-top10.yaml +50 -0
package/dist/cli.js ADDED
@@ -0,0 +1,202 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * SWT3 CLI -- governance tooling for AI systems.
4
+ *
5
+ * Commands:
6
+ * swt3 init Interactive governance setup
7
+ * swt3 init --profile X Non-interactive (CI/CD friendly)
8
+ * swt3 demo Run the zero-friction demo
9
+ * swt3 doctor Diagnose config health
10
+ * swt3 help Show usage
11
+ */
12
+ import { existsSync, writeFileSync } from "node:fs";
13
+ import { join } from "node:path";
14
+ import { createInterface } from "node:readline";
15
+ const VERSION = "0.5.1";
16
+ const PROFILES = {
17
+ "eu-ai-act-high-risk": "EU AI Act Article 6, Annex III (strict, signing required)",
18
+ "granite-sovereign": "IBM Granite 4.1 + air-gap sovereign (strict, TPM required)",
19
+ "mythos-defense": "Exploit chain containment (strict, rate limiting, tool blocklist)",
20
+ "nist-ai-rmf": "NIST AI RMF + 800-53 GovCon (permissive, gradual adoption)",
21
+ "owasp-agentic-top10": "OWASP Agentic AI Top 10 (runtime containment, fail closed)",
22
+ "minimal": "Development / evaluation (no enforcement)",
23
+ };
24
+ const PROFILE_NAMES = Object.keys(PROFILES);
25
+ function printHelp() {
26
+ console.log(`
27
+ SWT3 CLI v${VERSION}
28
+
29
+ Usage:
30
+ swt3 init Interactive governance setup
31
+ swt3 init --profile <name> Non-interactive setup
32
+ swt3 init --profile <name> --tenant <id> --agent <id>
33
+ swt3 demo Run the zero-friction demo
34
+ swt3 doctor Diagnose config health
35
+ swt3 audit Forensic chain timeline (html or json)
36
+ swt3 help Show this message
37
+
38
+ Profiles:
39
+ ${PROFILE_NAMES.map((n, i) => ` ${i + 1}. ${n.padEnd(24)} ${PROFILES[n]}`).join("\n")}
40
+
41
+ Docs: https://sovereign.tenova.io/docs/
42
+ `);
43
+ }
44
+ function ask(rl, question) {
45
+ return new Promise((resolve) => rl.question(question, resolve));
46
+ }
47
+ export function generateInitYaml(profile, tenantId, agentId) {
48
+ const lines = [
49
+ `# Generated by: swt3 init --profile ${profile}`,
50
+ `# Docs: https://sovereign.tenova.io/docs/`,
51
+ ``,
52
+ `profile: ${profile}`,
53
+ ``,
54
+ `# Required:`,
55
+ `tenant_id: ${tenantId || "YOUR_TENANT_ID"}`,
56
+ `api_key_env: SWT3_API_KEY`,
57
+ `agent_id: ${agentId || "your-agent-name"}`,
58
+ ``,
59
+ `# Optional overrides (uncomment to customize):`,
60
+ `# endpoint: https://sovereign.tenova.io`,
61
+ `# clearing_level: 2`,
62
+ `# jurisdiction: US`,
63
+ `# signing_key_env: SWT3_SIGNING_KEY`,
64
+ ``,
65
+ ];
66
+ return lines.join("\n");
67
+ }
68
+ async function handleInit(args) {
69
+ const outputPath = join(process.cwd(), "swt3.yaml");
70
+ // Check overwrite protection
71
+ const forceIdx = args.indexOf("--force");
72
+ const force = forceIdx !== -1;
73
+ if (existsSync(outputPath) && !force) {
74
+ console.error("swt3.yaml already exists. Use --force to overwrite.");
75
+ process.exit(1);
76
+ }
77
+ // Parse flags
78
+ const profileIdx = args.indexOf("--profile");
79
+ const tenantIdx = args.indexOf("--tenant");
80
+ const agentIdx = args.indexOf("--agent");
81
+ let profile = profileIdx !== -1 ? args[profileIdx + 1] : "";
82
+ let tenantId = tenantIdx !== -1 ? args[tenantIdx + 1] : "";
83
+ let agentId = agentIdx !== -1 ? args[agentIdx + 1] : "";
84
+ // Validate profile if provided
85
+ if (profile && !PROFILE_NAMES.includes(profile)) {
86
+ console.error(`Unknown profile: '${profile}'`);
87
+ console.error(`Valid profiles: ${PROFILE_NAMES.join(", ")}`);
88
+ process.exit(1);
89
+ }
90
+ // Interactive mode if no profile specified
91
+ if (!profile) {
92
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
93
+ console.log(`\n SWT3 Governance Setup\n`);
94
+ console.log(` Choose a compliance profile:`);
95
+ PROFILE_NAMES.forEach((name, i) => {
96
+ console.log(` ${i + 1}. ${name.padEnd(24)} ${PROFILES[name]}`);
97
+ });
98
+ const choice = await ask(rl, `\n Profile [1-${PROFILE_NAMES.length}]: `);
99
+ const idx = parseInt(choice, 10) - 1;
100
+ if (isNaN(idx) || idx < 0 || idx >= PROFILE_NAMES.length) {
101
+ console.error(" Invalid selection.");
102
+ rl.close();
103
+ process.exit(1);
104
+ }
105
+ profile = PROFILE_NAMES[idx];
106
+ if (!tenantId) {
107
+ tenantId = await ask(rl, " Tenant ID: ");
108
+ }
109
+ if (!agentId) {
110
+ agentId = await ask(rl, " Agent ID [optional]: ");
111
+ }
112
+ rl.close();
113
+ }
114
+ const content = generateInitYaml(profile, tenantId, agentId);
115
+ writeFileSync(outputPath, content, "utf-8");
116
+ console.log(`\n Created: swt3.yaml\n`);
117
+ console.log(` Next: set SWT3_API_KEY in your environment, then:`);
118
+ console.log(` import { Witness } from "@tenova/swt3-ai";`);
119
+ console.log(` const witness = Witness.fromConfig(); // done.\n`);
120
+ }
121
+ async function main() {
122
+ const [, , cmd, ...rest] = process.argv;
123
+ switch (cmd) {
124
+ case "init":
125
+ await handleInit(rest);
126
+ break;
127
+ case "demo": {
128
+ if (rest.includes("--mesh-test")) {
129
+ const { runMeshTest } = await import("./demo.js");
130
+ await runMeshTest();
131
+ }
132
+ else {
133
+ const demo = await import("./demo.js");
134
+ demo.main();
135
+ }
136
+ break;
137
+ }
138
+ case "doctor": {
139
+ if (rest.includes("--friction-test")) {
140
+ const { runFrictionTest, printFrictionResults } = await import("./doctor.js");
141
+ const steps = await runFrictionTest();
142
+ printFrictionResults(steps);
143
+ if (steps.some((s) => s.status === "fail"))
144
+ process.exit(1);
145
+ }
146
+ else {
147
+ const { runDoctorChecks, printDoctorResults } = await import("./doctor.js");
148
+ const checks = runDoctorChecks();
149
+ const jsonFlag = rest.includes("--json");
150
+ printDoctorResults(checks, jsonFlag);
151
+ const hasFail = checks.some((c) => c.status === "fail");
152
+ if (hasFail)
153
+ process.exit(1);
154
+ }
155
+ break;
156
+ }
157
+ case "audit": {
158
+ const { ChainMonitorExporter } = await import("./exporters/chain-monitor.js");
159
+ const fmtIdx = rest.indexOf("--format");
160
+ const format = fmtIdx !== -1 && rest[fmtIdx + 1] ? rest[fmtIdx + 1] : "html";
161
+ const walIdx = rest.indexOf("--wal-path");
162
+ const walDir = walIdx !== -1 && rest[walIdx + 1] ? rest[walIdx + 1] : undefined;
163
+ let tenantId = "UNKNOWN", agentId = "UNKNOWN", clearingLevel = 1;
164
+ try {
165
+ const { loadFullConfig } = await import("./config.js");
166
+ const cfg = loadFullConfig();
167
+ const opts = cfg.witnessOptions;
168
+ tenantId = opts.tenantId ?? tenantId;
169
+ agentId = opts.agentId ?? agentId;
170
+ clearingLevel = opts.clearingLevel ?? clearingLevel;
171
+ }
172
+ catch { /* no config */ }
173
+ const exporter = new ChainMonitorExporter({ walDir, tenantId, agentId, clearingLevel });
174
+ if (format === "json") {
175
+ console.log(exporter.exportJson());
176
+ }
177
+ else {
178
+ const { writeFileSync } = await import("node:fs");
179
+ const html = exporter.exportHtml();
180
+ const outPath = "swt3-audit-report.html";
181
+ writeFileSync(outPath, html, "utf-8");
182
+ console.log(`Audit report saved: ${outPath}`);
183
+ }
184
+ break;
185
+ }
186
+ case "help":
187
+ case "--help":
188
+ case "-h":
189
+ case undefined:
190
+ printHelp();
191
+ break;
192
+ default:
193
+ console.error(`Unknown command: ${cmd}`);
194
+ printHelp();
195
+ process.exit(1);
196
+ }
197
+ }
198
+ main().catch((err) => {
199
+ console.error(err.message);
200
+ process.exit(1);
201
+ });
202
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -15,13 +15,26 @@
15
15
  * Requires: `npm install yaml`
16
16
  */
17
17
  import type { WitnessOptions } from "./witness.js";
18
+ import type { LoadedConfig } from "./types.js";
19
+ interface Policy {
20
+ require_signing?: boolean;
21
+ min_clearing_level?: number;
22
+ required_procedures?: string[];
23
+ require_agent_id?: boolean;
24
+ max_flush_interval?: number;
25
+ require_jurisdiction?: boolean;
26
+ }
27
+ export declare function validatePolicy(config: Record<string, unknown>, policy: Policy): void;
28
+ export declare function computeConfigHash(content: string): string;
18
29
  /**
19
30
  * Load a .swt3.yaml config file and return a WitnessOptions object.
20
- *
21
- * @param path - Explicit path to YAML file. If omitted, searches for
22
- * swt3.yaml or .swt3.yaml in the current directory.
23
- * @returns WitnessOptions compatible with `new Witness(options)`.
24
- * @throws If file not found, env var missing, yaml package not installed, or policy violation.
31
+ * Backward-compatible: returns WitnessOptions only (no trust_mesh, hardware, etc.).
25
32
  */
26
33
  export declare function loadConfig(path?: string): WitnessOptions;
34
+ /**
35
+ * Load a .swt3.yaml config file and return the full parsed config
36
+ * including trust_mesh, hardware, density_policy, and config hash.
37
+ */
38
+ export declare function loadFullConfig(path?: string): LoadedConfig;
39
+ export {};
27
40
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAgJnD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,cAAc,CAsDxD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EACyF,YAAY,EAChH,MAAM,YAAY,CAAC;AAuMpB,UAAU,MAAM;IACd,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AA6MD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAiDpF;AAID,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD;AAID;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,cAAc,CAExD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY,CAiG1D"}