@planu/cli 1.3.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/dist/config/license-plans.json +18 -1
  2. package/dist/engine/audit-trail/formatter.d.ts +13 -0
  3. package/dist/engine/audit-trail/formatter.d.ts.map +1 -0
  4. package/dist/engine/audit-trail/formatter.js +43 -0
  5. package/dist/engine/audit-trail/formatter.js.map +1 -0
  6. package/dist/engine/audit-trail/hasher.d.ts +18 -0
  7. package/dist/engine/audit-trail/hasher.d.ts.map +1 -0
  8. package/dist/engine/audit-trail/hasher.js +46 -0
  9. package/dist/engine/audit-trail/hasher.js.map +1 -0
  10. package/dist/engine/audit-trail/index.d.ts +2 -0
  11. package/dist/engine/audit-trail/index.d.ts.map +1 -1
  12. package/dist/engine/audit-trail/index.js +4 -1
  13. package/dist/engine/audit-trail/index.js.map +1 -1
  14. package/dist/engine/auto-promoter.d.ts +14 -0
  15. package/dist/engine/auto-promoter.d.ts.map +1 -0
  16. package/dist/engine/auto-promoter.js +40 -0
  17. package/dist/engine/auto-promoter.js.map +1 -0
  18. package/dist/engine/compliance-test-generator/control-mapper.d.ts +4 -0
  19. package/dist/engine/compliance-test-generator/control-mapper.d.ts.map +1 -0
  20. package/dist/engine/compliance-test-generator/control-mapper.js +41 -0
  21. package/dist/engine/compliance-test-generator/control-mapper.js.map +1 -0
  22. package/dist/engine/compliance-test-generator/frameworks/iso42001.d.ts +3 -0
  23. package/dist/engine/compliance-test-generator/frameworks/iso42001.d.ts.map +1 -0
  24. package/dist/engine/compliance-test-generator/frameworks/iso42001.js +55 -0
  25. package/dist/engine/compliance-test-generator/frameworks/iso42001.js.map +1 -0
  26. package/dist/engine/compliance-test-generator/frameworks/pci-dss.d.ts +3 -0
  27. package/dist/engine/compliance-test-generator/frameworks/pci-dss.d.ts.map +1 -0
  28. package/dist/engine/compliance-test-generator/frameworks/pci-dss.js +55 -0
  29. package/dist/engine/compliance-test-generator/frameworks/pci-dss.js.map +1 -0
  30. package/dist/engine/compliance-test-generator/frameworks/soc2.d.ts +3 -0
  31. package/dist/engine/compliance-test-generator/frameworks/soc2.d.ts.map +1 -0
  32. package/dist/engine/compliance-test-generator/frameworks/soc2.js +47 -0
  33. package/dist/engine/compliance-test-generator/frameworks/soc2.js.map +1 -0
  34. package/dist/engine/compliance-test-generator/index.d.ts +3 -0
  35. package/dist/engine/compliance-test-generator/index.d.ts.map +1 -0
  36. package/dist/engine/compliance-test-generator/index.js +64 -0
  37. package/dist/engine/compliance-test-generator/index.js.map +1 -0
  38. package/dist/engine/compliance-test-generator/test-formatter.d.ts +6 -0
  39. package/dist/engine/compliance-test-generator/test-formatter.d.ts.map +1 -0
  40. package/dist/engine/compliance-test-generator/test-formatter.js +33 -0
  41. package/dist/engine/compliance-test-generator/test-formatter.js.map +1 -0
  42. package/dist/engine/cost-guardrails.d.ts +11 -0
  43. package/dist/engine/cost-guardrails.d.ts.map +1 -0
  44. package/dist/engine/cost-guardrails.js +39 -0
  45. package/dist/engine/cost-guardrails.js.map +1 -0
  46. package/dist/engine/doc-compliance-checker.d.ts +23 -0
  47. package/dist/engine/doc-compliance-checker.d.ts.map +1 -0
  48. package/dist/engine/doc-compliance-checker.js +168 -0
  49. package/dist/engine/doc-compliance-checker.js.map +1 -0
  50. package/dist/engine/dogfood-analyzer.d.ts +6 -0
  51. package/dist/engine/dogfood-analyzer.d.ts.map +1 -0
  52. package/dist/engine/dogfood-analyzer.js +59 -0
  53. package/dist/engine/dogfood-analyzer.js.map +1 -0
  54. package/dist/engine/drift-watcher/criteria-checker.d.ts +16 -0
  55. package/dist/engine/drift-watcher/criteria-checker.d.ts.map +1 -0
  56. package/dist/engine/drift-watcher/criteria-checker.js +81 -0
  57. package/dist/engine/drift-watcher/criteria-checker.js.map +1 -0
  58. package/dist/engine/drift-watcher/file-watcher.d.ts +8 -0
  59. package/dist/engine/drift-watcher/file-watcher.d.ts.map +1 -0
  60. package/dist/engine/drift-watcher/file-watcher.js +24 -0
  61. package/dist/engine/drift-watcher/file-watcher.js.map +1 -0
  62. package/dist/engine/drift-watcher/index.d.ts +19 -0
  63. package/dist/engine/drift-watcher/index.d.ts.map +1 -0
  64. package/dist/engine/drift-watcher/index.js +70 -0
  65. package/dist/engine/drift-watcher/index.js.map +1 -0
  66. package/dist/engine/mcp-gateway/gateway-registry.d.ts +19 -0
  67. package/dist/engine/mcp-gateway/gateway-registry.d.ts.map +1 -0
  68. package/dist/engine/mcp-gateway/gateway-registry.js +33 -0
  69. package/dist/engine/mcp-gateway/gateway-registry.js.map +1 -0
  70. package/dist/engine/mcp-gateway/gateway-scanner.d.ts +17 -0
  71. package/dist/engine/mcp-gateway/gateway-scanner.d.ts.map +1 -0
  72. package/dist/engine/mcp-gateway/gateway-scanner.js +62 -0
  73. package/dist/engine/mcp-gateway/gateway-scanner.js.map +1 -0
  74. package/dist/engine/mcp-gateway/index.d.ts +3 -0
  75. package/dist/engine/mcp-gateway/index.d.ts.map +1 -0
  76. package/dist/engine/mcp-gateway/index.js +4 -0
  77. package/dist/engine/mcp-gateway/index.js.map +1 -0
  78. package/dist/engine/multi-repo/companion-spec-builder.d.ts +9 -0
  79. package/dist/engine/multi-repo/companion-spec-builder.d.ts.map +1 -0
  80. package/dist/engine/multi-repo/companion-spec-builder.js +22 -0
  81. package/dist/engine/multi-repo/companion-spec-builder.js.map +1 -0
  82. package/dist/engine/multi-repo/consumer-scanner.d.ts +12 -0
  83. package/dist/engine/multi-repo/consumer-scanner.d.ts.map +1 -0
  84. package/dist/engine/multi-repo/consumer-scanner.js +48 -0
  85. package/dist/engine/multi-repo/consumer-scanner.js.map +1 -0
  86. package/dist/engine/multi-repo/index.d.ts +4 -0
  87. package/dist/engine/multi-repo/index.d.ts.map +1 -0
  88. package/dist/engine/multi-repo/index.js +5 -0
  89. package/dist/engine/multi-repo/index.js.map +1 -0
  90. package/dist/engine/multi-repo/refactor-tracker.d.ts +7 -0
  91. package/dist/engine/multi-repo/refactor-tracker.d.ts.map +1 -0
  92. package/dist/engine/multi-repo/refactor-tracker.js +22 -0
  93. package/dist/engine/multi-repo/refactor-tracker.js.map +1 -0
  94. package/dist/engine/skill-generator/sections-docs.d.ts +13 -0
  95. package/dist/engine/skill-generator/sections-docs.d.ts.map +1 -0
  96. package/dist/engine/skill-generator/sections-docs.js +59 -0
  97. package/dist/engine/skill-generator/sections-docs.js.map +1 -0
  98. package/dist/engine/skill-generator/skills-content.d.ts +1 -1
  99. package/dist/engine/skill-generator/skills-content.d.ts.map +1 -1
  100. package/dist/engine/skill-generator/skills-content.js +3 -2
  101. package/dist/engine/skill-generator/skills-content.js.map +1 -1
  102. package/dist/engine/skill-generator/skills.d.ts +1 -0
  103. package/dist/engine/skill-generator/skills.d.ts.map +1 -1
  104. package/dist/engine/skill-generator/skills.js +1 -0
  105. package/dist/engine/skill-generator/skills.js.map +1 -1
  106. package/dist/engine/skill-generator.d.ts.map +1 -1
  107. package/dist/engine/skill-generator.js +21 -2
  108. package/dist/engine/skill-generator.js.map +1 -1
  109. package/dist/engine/web-fetcher/docs-intelligence.d.ts +8 -0
  110. package/dist/engine/web-fetcher/docs-intelligence.d.ts.map +1 -0
  111. package/dist/engine/web-fetcher/docs-intelligence.js +154 -0
  112. package/dist/engine/web-fetcher/docs-intelligence.js.map +1 -0
  113. package/dist/engine/web-fetcher/registry-auto-discovery.d.ts +20 -0
  114. package/dist/engine/web-fetcher/registry-auto-discovery.d.ts.map +1 -0
  115. package/dist/engine/web-fetcher/registry-auto-discovery.js +184 -0
  116. package/dist/engine/web-fetcher/registry-auto-discovery.js.map +1 -0
  117. package/dist/engine/web-fetcher/stack-detector.d.ts +4 -0
  118. package/dist/engine/web-fetcher/stack-detector.d.ts.map +1 -0
  119. package/dist/engine/web-fetcher/stack-detector.js +155 -0
  120. package/dist/engine/web-fetcher/stack-detector.js.map +1 -0
  121. package/dist/index.js +19 -0
  122. package/dist/index.js.map +1 -1
  123. package/dist/storage/audit-trail-store.d.ts +20 -0
  124. package/dist/storage/audit-trail-store.d.ts.map +1 -0
  125. package/dist/storage/audit-trail-store.js +98 -0
  126. package/dist/storage/audit-trail-store.js.map +1 -0
  127. package/dist/storage/auto-promoter-config-store.d.ts +11 -0
  128. package/dist/storage/auto-promoter-config-store.d.ts.map +1 -0
  129. package/dist/storage/auto-promoter-config-store.js +23 -0
  130. package/dist/storage/auto-promoter-config-store.js.map +1 -0
  131. package/dist/storage/budget-store.d.ts +19 -0
  132. package/dist/storage/budget-store.d.ts.map +1 -0
  133. package/dist/storage/budget-store.js +64 -0
  134. package/dist/storage/budget-store.js.map +1 -0
  135. package/dist/storage/gateway-store.d.ts +23 -0
  136. package/dist/storage/gateway-store.d.ts.map +1 -0
  137. package/dist/storage/gateway-store.js +52 -0
  138. package/dist/storage/gateway-store.js.map +1 -0
  139. package/dist/storage/refactor-registry-store.d.ts +21 -0
  140. package/dist/storage/refactor-registry-store.d.ts.map +1 -0
  141. package/dist/storage/refactor-registry-store.js +77 -0
  142. package/dist/storage/refactor-registry-store.js.map +1 -0
  143. package/dist/tools/auto-promoter-handler.d.ts +13 -0
  144. package/dist/tools/auto-promoter-handler.d.ts.map +1 -0
  145. package/dist/tools/auto-promoter-handler.js +50 -0
  146. package/dist/tools/auto-promoter-handler.js.map +1 -0
  147. package/dist/tools/compliance-test-handler.d.ts +5 -0
  148. package/dist/tools/compliance-test-handler.d.ts.map +1 -0
  149. package/dist/tools/compliance-test-handler.js +66 -0
  150. package/dist/tools/compliance-test-handler.js.map +1 -0
  151. package/dist/tools/cost-guardrails-handler.d.ts +15 -0
  152. package/dist/tools/cost-guardrails-handler.d.ts.map +1 -0
  153. package/dist/tools/cost-guardrails-handler.js +72 -0
  154. package/dist/tools/cost-guardrails-handler.js.map +1 -0
  155. package/dist/tools/create-spec/spec-builder.d.ts.map +1 -1
  156. package/dist/tools/create-spec/spec-builder.js +20 -0
  157. package/dist/tools/create-spec/spec-builder.js.map +1 -1
  158. package/dist/tools/create-spec-hu/docs-criteria-adapter.d.ts +14 -0
  159. package/dist/tools/create-spec-hu/docs-criteria-adapter.d.ts.map +1 -0
  160. package/dist/tools/create-spec-hu/docs-criteria-adapter.js +50 -0
  161. package/dist/tools/create-spec-hu/docs-criteria-adapter.js.map +1 -0
  162. package/dist/tools/create-spec-hu.d.ts +1 -1
  163. package/dist/tools/create-spec-hu.d.ts.map +1 -1
  164. package/dist/tools/create-spec-hu.js +5 -1
  165. package/dist/tools/create-spec-hu.js.map +1 -1
  166. package/dist/tools/create-spec.d.ts.map +1 -1
  167. package/dist/tools/create-spec.js +2 -2
  168. package/dist/tools/create-spec.js.map +1 -1
  169. package/dist/tools/doc-compliance-handler.d.ts +3 -0
  170. package/dist/tools/doc-compliance-handler.d.ts.map +1 -0
  171. package/dist/tools/doc-compliance-handler.js +48 -0
  172. package/dist/tools/doc-compliance-handler.js.map +1 -0
  173. package/dist/tools/docs-registry-handler.d.ts +6 -0
  174. package/dist/tools/docs-registry-handler.d.ts.map +1 -0
  175. package/dist/tools/docs-registry-handler.js +73 -0
  176. package/dist/tools/docs-registry-handler.js.map +1 -0
  177. package/dist/tools/dogfood-status-handler.d.ts +3 -0
  178. package/dist/tools/dogfood-status-handler.d.ts.map +1 -0
  179. package/dist/tools/dogfood-status-handler.js +28 -0
  180. package/dist/tools/dogfood-status-handler.js.map +1 -0
  181. package/dist/tools/drift-watcher-handler.d.ts +7 -0
  182. package/dist/tools/drift-watcher-handler.d.ts.map +1 -0
  183. package/dist/tools/drift-watcher-handler.js +65 -0
  184. package/dist/tools/drift-watcher-handler.js.map +1 -0
  185. package/dist/tools/export-audit-trail-handler.d.ts +9 -0
  186. package/dist/tools/export-audit-trail-handler.d.ts.map +1 -0
  187. package/dist/tools/export-audit-trail-handler.js +103 -0
  188. package/dist/tools/export-audit-trail-handler.js.map +1 -0
  189. package/dist/tools/mcp-gateway-handler.d.ts +13 -0
  190. package/dist/tools/mcp-gateway-handler.d.ts.map +1 -0
  191. package/dist/tools/mcp-gateway-handler.js +60 -0
  192. package/dist/tools/mcp-gateway-handler.js.map +1 -0
  193. package/dist/tools/multi-repo-handler.d.ts +15 -0
  194. package/dist/tools/multi-repo-handler.d.ts.map +1 -0
  195. package/dist/tools/multi-repo-handler.js +86 -0
  196. package/dist/tools/multi-repo-handler.js.map +1 -0
  197. package/dist/tools/register-audit-trail-tools.d.ts.map +1 -1
  198. package/dist/tools/register-audit-trail-tools.js +38 -0
  199. package/dist/tools/register-audit-trail-tools.js.map +1 -1
  200. package/dist/tools/register-auto-promoter-tools.d.ts +3 -0
  201. package/dist/tools/register-auto-promoter-tools.d.ts.map +1 -0
  202. package/dist/tools/register-auto-promoter-tools.js +43 -0
  203. package/dist/tools/register-auto-promoter-tools.js.map +1 -0
  204. package/dist/tools/register-compliance-test-tools.d.ts +3 -0
  205. package/dist/tools/register-compliance-test-tools.d.ts.map +1 -0
  206. package/dist/tools/register-compliance-test-tools.js +55 -0
  207. package/dist/tools/register-compliance-test-tools.js.map +1 -0
  208. package/dist/tools/register-cost-guardrails-tools.d.ts +3 -0
  209. package/dist/tools/register-cost-guardrails-tools.d.ts.map +1 -0
  210. package/dist/tools/register-cost-guardrails-tools.js +61 -0
  211. package/dist/tools/register-cost-guardrails-tools.js.map +1 -0
  212. package/dist/tools/register-doc-compliance-tools.d.ts +3 -0
  213. package/dist/tools/register-doc-compliance-tools.d.ts.map +1 -0
  214. package/dist/tools/register-doc-compliance-tools.js +18 -0
  215. package/dist/tools/register-doc-compliance-tools.js.map +1 -0
  216. package/dist/tools/register-docs-registry-tools.d.ts +3 -0
  217. package/dist/tools/register-docs-registry-tools.d.ts.map +1 -0
  218. package/dist/tools/register-docs-registry-tools.js +35 -0
  219. package/dist/tools/register-docs-registry-tools.js.map +1 -0
  220. package/dist/tools/register-dogfood-tools.d.ts +3 -0
  221. package/dist/tools/register-dogfood-tools.d.ts.map +1 -0
  222. package/dist/tools/register-dogfood-tools.js +21 -0
  223. package/dist/tools/register-dogfood-tools.js.map +1 -0
  224. package/dist/tools/register-drift-watcher-tools.d.ts +3 -0
  225. package/dist/tools/register-drift-watcher-tools.d.ts.map +1 -0
  226. package/dist/tools/register-drift-watcher-tools.js +28 -0
  227. package/dist/tools/register-drift-watcher-tools.js.map +1 -0
  228. package/dist/tools/register-mcp-gateway-tools.d.ts +3 -0
  229. package/dist/tools/register-mcp-gateway-tools.d.ts.map +1 -0
  230. package/dist/tools/register-mcp-gateway-tools.js +35 -0
  231. package/dist/tools/register-mcp-gateway-tools.js.map +1 -0
  232. package/dist/tools/register-multi-repo-tools.d.ts +8 -0
  233. package/dist/tools/register-multi-repo-tools.d.ts.map +1 -0
  234. package/dist/tools/register-multi-repo-tools.js +52 -0
  235. package/dist/tools/register-multi-repo-tools.js.map +1 -0
  236. package/dist/tools/safe-handler.d.ts.map +1 -1
  237. package/dist/tools/safe-handler.js +50 -1
  238. package/dist/tools/safe-handler.js.map +1 -1
  239. package/dist/types/audit.d.ts +64 -0
  240. package/dist/types/audit.d.ts.map +1 -0
  241. package/dist/types/audit.js +3 -0
  242. package/dist/types/audit.js.map +1 -0
  243. package/dist/types/auto-promoter.d.ts +26 -0
  244. package/dist/types/auto-promoter.d.ts.map +1 -0
  245. package/dist/types/auto-promoter.js +3 -0
  246. package/dist/types/auto-promoter.js.map +1 -0
  247. package/dist/types/compliance-tests.d.ts +41 -0
  248. package/dist/types/compliance-tests.d.ts.map +1 -0
  249. package/dist/types/compliance-tests.js +3 -0
  250. package/dist/types/compliance-tests.js.map +1 -0
  251. package/dist/types/cost-guardrails.d.ts +41 -0
  252. package/dist/types/cost-guardrails.d.ts.map +1 -0
  253. package/dist/types/cost-guardrails.js +3 -0
  254. package/dist/types/cost-guardrails.js.map +1 -0
  255. package/dist/types/docs.d.ts +70 -0
  256. package/dist/types/docs.d.ts.map +1 -1
  257. package/dist/types/dogfood.d.ts +22 -0
  258. package/dist/types/dogfood.d.ts.map +1 -0
  259. package/dist/types/dogfood.js +3 -0
  260. package/dist/types/dogfood.js.map +1 -0
  261. package/dist/types/drift-watcher.d.ts +35 -0
  262. package/dist/types/drift-watcher.d.ts.map +1 -0
  263. package/dist/types/drift-watcher.js +3 -0
  264. package/dist/types/drift-watcher.js.map +1 -0
  265. package/dist/types/index.d.ts +8 -0
  266. package/dist/types/index.d.ts.map +1 -1
  267. package/dist/types/index.js +8 -0
  268. package/dist/types/index.js.map +1 -1
  269. package/dist/types/mcp-gateway.d.ts +34 -0
  270. package/dist/types/mcp-gateway.d.ts.map +1 -0
  271. package/dist/types/mcp-gateway.js +3 -0
  272. package/dist/types/mcp-gateway.js.map +1 -0
  273. package/dist/types/mcp.d.ts +17 -0
  274. package/dist/types/mcp.d.ts.map +1 -1
  275. package/dist/types/multi-repo.d.ts +39 -0
  276. package/dist/types/multi-repo.d.ts.map +1 -0
  277. package/dist/types/multi-repo.js +5 -0
  278. package/dist/types/multi-repo.js.map +1 -0
  279. package/dist/types/spec/core.d.ts +2 -0
  280. package/dist/types/spec/core.d.ts.map +1 -1
  281. package/package.json +1 -1
  282. package/src/config/license-plans.json +18 -1
@@ -409,7 +409,24 @@
409
409
  "review_pr_against_spec",
410
410
  "pr_agent_status",
411
411
  "generate_e2e_tests",
412
- "e2e_test_status"
412
+ "e2e_test_status",
413
+ "validate_docs_registry",
414
+ "discover_docs_url",
415
+ "doc_compliance_report",
416
+ "export_audit_trail",
417
+ "watch_spec_drift",
418
+ "coordinate_refactor",
419
+ "sync_refactor_status",
420
+ "generate_compliance_tests",
421
+ "compliance_coverage_report",
422
+ "configure_auto_promotion",
423
+ "check_auto_promotion",
424
+ "set_spec_budget",
425
+ "budget_status",
426
+ "record_spend",
427
+ "discover_mcp_gateways",
428
+ "federation_discovery_status",
429
+ "dogfood_status"
413
430
  ],
414
431
  "alwaysAllowed": [
415
432
  "activate_license",
@@ -0,0 +1,13 @@
1
+ import type { AuditTrailEntry } from '../../types/audit.js';
2
+ /**
3
+ * Build a partial AuditTrailEntry (without the `hash` field) from a tool invocation.
4
+ * The caller must compute and attach `hash` via `hashEntry()` before storing.
5
+ */
6
+ export declare function buildAuditEntry(params: {
7
+ toolName: string;
8
+ args: unknown;
9
+ outputType: 'success' | 'error';
10
+ durationMs: number;
11
+ prevHash: string;
12
+ }): Omit<AuditTrailEntry, 'hash'>;
13
+ //# sourceMappingURL=formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../../src/engine/audit-trail/formatter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAW5D;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,SAAS,GAAG,OAAO,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAehC"}
@@ -0,0 +1,43 @@
1
+ // engine/audit-trail/formatter.ts — Builds AuditTrailEntry records for SPEC-387
2
+ import { randomUUID } from 'node:crypto';
3
+ /** Maximum length of the sanitized inputSummary field. */
4
+ const INPUT_SUMMARY_MAX = 200;
5
+ /**
6
+ * Patterns that look like secret tokens/keys in serialized args.
7
+ * Replaces the value with [REDACTED] to prevent credential leakage.
8
+ */
9
+ const SECRET_PATTERN = /(token|key|secret|password|auth)["']?\s*[:=]\s*["'][^"']{4,}/gi;
10
+ /**
11
+ * Build a partial AuditTrailEntry (without the `hash` field) from a tool invocation.
12
+ * The caller must compute and attach `hash` via `hashEntry()` before storing.
13
+ */
14
+ export function buildAuditEntry(params) {
15
+ const raw = JSON.stringify(params.args ?? {}).slice(0, INPUT_SUMMARY_MAX);
16
+ const sanitized = raw.replace(SECRET_PATTERN, '[REDACTED]');
17
+ return {
18
+ id: randomUUID(),
19
+ timestamp: new Date().toISOString(),
20
+ toolName: params.toolName,
21
+ inputSummary: sanitized,
22
+ outputType: params.outputType,
23
+ durationMs: params.durationMs,
24
+ specId: extractSpecId(params.args),
25
+ projectPath: extractProjectPath(params.args),
26
+ prevHash: params.prevHash,
27
+ };
28
+ }
29
+ function extractSpecId(args) {
30
+ if (typeof args === 'object' && args !== null && 'specId' in args) {
31
+ const val = args.specId;
32
+ return typeof val === 'string' ? val : undefined;
33
+ }
34
+ return undefined;
35
+ }
36
+ function extractProjectPath(args) {
37
+ if (typeof args === 'object' && args !== null && 'projectPath' in args) {
38
+ const val = args.projectPath;
39
+ return typeof val === 'string' ? val : undefined;
40
+ }
41
+ return undefined;
42
+ }
43
+ //# sourceMappingURL=formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../../src/engine/audit-trail/formatter.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAEhF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,0DAA0D;AAC1D,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAE9B;;;GAGG;AACH,MAAM,cAAc,GAAG,gEAAgE,CAAC;AAExF;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAM/B;IACC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAC1E,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IAE5D,OAAO;QACL,EAAE,EAAE,UAAU,EAAE;QAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,YAAY,EAAE,SAAS;QACvB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC;QAClC,WAAW,EAAE,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5C,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,IAAa;IAClC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QAClE,MAAM,GAAG,GAAI,IAAgC,CAAC,MAAM,CAAC;QACrD,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACnD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAa;IACvC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;QACvE,MAAM,GAAG,GAAI,IAAgC,CAAC,WAAW,CAAC;QAC1D,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACnD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { AuditTrailEntry } from '../../types/audit.js';
2
+ /**
3
+ * Compute the SHA-256 hex digest for an audit entry.
4
+ * Fields are joined with '|' in a deterministic order so the hash is stable
5
+ * across serialization formats.
6
+ */
7
+ export declare function hashEntry(entry: Omit<AuditTrailEntry, 'hash'>): string;
8
+ /**
9
+ * Verify the integrity of a chain of audit entries.
10
+ *
11
+ * For each entry:
12
+ * 1. `prevHash` must match the previous entry's `hash` (empty string for index 0).
13
+ * 2. The recomputed hash of the entry's fields must match the stored `hash`.
14
+ *
15
+ * Returns true only when every entry passes both checks.
16
+ */
17
+ export declare function verifyChain(entries: AuditTrailEntry[]): boolean;
18
+ //# sourceMappingURL=hasher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hasher.d.ts","sourceRoot":"","sources":["../../../src/engine/audit-trail/hasher.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,MAAM,CAWtE;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,OAAO,CAkB/D"}
@@ -0,0 +1,46 @@
1
+ // engine/audit-trail/hasher.ts — SHA-256 hash chain for SPEC-387 audit entries
2
+ import { createHash } from 'node:crypto';
3
+ /**
4
+ * Compute the SHA-256 hex digest for an audit entry.
5
+ * Fields are joined with '|' in a deterministic order so the hash is stable
6
+ * across serialization formats.
7
+ */
8
+ export function hashEntry(entry) {
9
+ const content = [
10
+ entry.id,
11
+ entry.timestamp,
12
+ entry.toolName,
13
+ entry.inputSummary,
14
+ entry.outputType,
15
+ String(entry.durationMs),
16
+ entry.prevHash,
17
+ ].join('|');
18
+ return createHash('sha256').update(content, 'utf8').digest('hex');
19
+ }
20
+ /**
21
+ * Verify the integrity of a chain of audit entries.
22
+ *
23
+ * For each entry:
24
+ * 1. `prevHash` must match the previous entry's `hash` (empty string for index 0).
25
+ * 2. The recomputed hash of the entry's fields must match the stored `hash`.
26
+ *
27
+ * Returns true only when every entry passes both checks.
28
+ */
29
+ export function verifyChain(entries) {
30
+ for (let i = 0; i < entries.length; i++) {
31
+ const entry = entries[i];
32
+ if (entry === undefined) {
33
+ return false;
34
+ }
35
+ const expectedPrevHash = i === 0 ? '' : (entries[i - 1]?.hash ?? '');
36
+ if (entry.prevHash !== expectedPrevHash) {
37
+ return false;
38
+ }
39
+ const { hash, ...rest } = entry;
40
+ if (hashEntry(rest) !== hash) {
41
+ return false;
42
+ }
43
+ }
44
+ return true;
45
+ }
46
+ //# sourceMappingURL=hasher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hasher.js","sourceRoot":"","sources":["../../../src/engine/audit-trail/hasher.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAE/E,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,KAAoC;IAC5D,MAAM,OAAO,GAAG;QACd,KAAK,CAAC,EAAE;QACR,KAAK,CAAC,SAAS;QACf,KAAK,CAAC,QAAQ;QACd,KAAK,CAAC,YAAY;QAClB,KAAK,CAAC,UAAU;QAChB,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;QACxB,KAAK,CAAC,QAAQ;KACf,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,OAA0B;IACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,gBAAgB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QACrE,IAAI,KAAK,CAAC,QAAQ,KAAK,gBAAgB,EAAE,CAAC;YACxC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;QAChC,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -3,4 +3,6 @@ export type { AppendEventInput } from './logger.js';
3
3
  export { queryAuditLog } from './query.js';
4
4
  export { verifyChainIntegrity } from './verifier.js';
5
5
  export { generateAttestation } from './attestation.js';
6
+ export { hashEntry, verifyChain } from './hasher.js';
7
+ export { buildAuditEntry } from './formatter.js';
6
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/engine/audit-trail/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/engine/audit-trail/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,6 +1,9 @@
1
- // engine/audit-trail/index.ts — Barrel export for audit-trail engine module (SPEC-167)
1
+ // engine/audit-trail/index.ts — Barrel export for audit-trail engine module (SPEC-167 + SPEC-387)
2
2
  export { appendEvent } from './logger.js';
3
3
  export { queryAuditLog } from './query.js';
4
4
  export { verifyChainIntegrity } from './verifier.js';
5
5
  export { generateAttestation } from './attestation.js';
6
+ // SPEC-387: EU AI Act Article 12 — tool-invocation audit chain
7
+ export { hashEntry, verifyChain } from './hasher.js';
8
+ export { buildAuditEntry } from './formatter.js';
6
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engine/audit-trail/index.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAEvF,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engine/audit-trail/index.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAElG,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,+DAA+D;AAC/D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { Spec } from '../types/spec/core.js';
2
+ import type { AutoPromoterConfig, ConfidenceScore } from '../types/auto-promoter.js';
3
+ /**
4
+ * Calculate a confidence score for auto-promoting a spec.
5
+ * High-risk specs always get riskPenalty=100 (never eligible).
6
+ * Medium-risk specs get penalty=20. Low-risk gets 0.
7
+ * A dependency bonus of +10 is added when all dependencies are satisfied.
8
+ */
9
+ export declare function calculateConfidence(spec: Spec, readinessScore: number, config: AutoPromoterConfig): ConfidenceScore;
10
+ /**
11
+ * Return the default AutoPromoterConfig for a project.
12
+ */
13
+ export declare function getDefaultConfig(projectPath: string): AutoPromoterConfig;
14
+ //# sourceMappingURL=auto-promoter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-promoter.d.ts","sourceRoot":"","sources":["../../src/engine/auto-promoter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAErF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,EACV,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,kBAAkB,GACzB,eAAe,CA0BjB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,CAQxE"}
@@ -0,0 +1,40 @@
1
+ // engine/auto-promoter.ts — Auto-Promotion Confidence Scoring logic (SPEC-391)
2
+ /**
3
+ * Calculate a confidence score for auto-promoting a spec.
4
+ * High-risk specs always get riskPenalty=100 (never eligible).
5
+ * Medium-risk specs get penalty=20. Low-risk gets 0.
6
+ * A dependency bonus of +10 is added when all dependencies are satisfied.
7
+ */
8
+ export function calculateConfidence(spec, readinessScore, config) {
9
+ const riskPenalty = spec.risk === 'high' ? 100 : spec.risk === 'medium' ? 20 : 0;
10
+ // Dependency bonus: +10 when spec has no pending dependencies
11
+ const noDeps = spec.dependencies.length === 0;
12
+ const dependencyBonus = noDeps ? 10 : 0;
13
+ const overall = Math.max(0, Math.min(100, readinessScore - riskPenalty + dependencyBonus));
14
+ const riskAllowed = spec.risk !== 'high' && (config.maxRisk === 'medium' ? true : spec.risk === 'low');
15
+ const eligible = overall >= config.readinessThreshold && riskAllowed;
16
+ const reason = eligible
17
+ ? `Score ${overall} >= threshold ${config.readinessThreshold}. Ready to auto-promote.`
18
+ : `Score ${overall} < threshold ${config.readinessThreshold} or risk too high.`;
19
+ return {
20
+ overall,
21
+ readiness: readinessScore,
22
+ riskPenalty,
23
+ dependencyBonus,
24
+ eligible,
25
+ reason,
26
+ };
27
+ }
28
+ /**
29
+ * Return the default AutoPromoterConfig for a project.
30
+ */
31
+ export function getDefaultConfig(projectPath) {
32
+ return {
33
+ projectPath,
34
+ enabled: false,
35
+ readinessThreshold: 85,
36
+ maxRisk: 'medium',
37
+ requireDependenciesDone: true,
38
+ };
39
+ }
40
+ //# sourceMappingURL=auto-promoter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-promoter.js","sourceRoot":"","sources":["../../src/engine/auto-promoter.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAK/E;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAU,EACV,cAAsB,EACtB,MAA0B;IAE1B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjF,8DAA8D;IAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC;IAC9C,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAExC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,GAAG,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC;IAE3F,MAAM,WAAW,GACf,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;IAErF,MAAM,QAAQ,GAAG,OAAO,IAAI,MAAM,CAAC,kBAAkB,IAAI,WAAW,CAAC;IAErE,MAAM,MAAM,GAAG,QAAQ;QACrB,CAAC,CAAC,SAAS,OAAO,iBAAiB,MAAM,CAAC,kBAAkB,0BAA0B;QACtF,CAAC,CAAC,SAAS,OAAO,gBAAgB,MAAM,CAAC,kBAAkB,oBAAoB,CAAC;IAElF,OAAO;QACL,OAAO;QACP,SAAS,EAAE,cAAc;QACzB,WAAW;QACX,eAAe;QACf,QAAQ;QACR,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,OAAO;QACL,WAAW;QACX,OAAO,EAAE,KAAK;QACd,kBAAkB,EAAE,EAAE;QACtB,OAAO,EAAE,QAAQ;QACjB,uBAAuB,EAAE,IAAI;KAC9B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ComplianceTestFramework, ComplianceTestControl, MappedTest } from '../../types/compliance-tests.js';
2
+ export declare function getControlsForFrameworks(frameworks: ComplianceTestFramework[]): ComplianceTestControl[];
3
+ export declare function mapCriteriaToControls(criteria: string[], frameworks: ComplianceTestFramework[]): MappedTest[];
4
+ //# sourceMappingURL=control-mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-mapper.d.ts","sourceRoot":"","sources":["../../../src/engine/compliance-test-generator/control-mapper.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACrB,UAAU,EACX,MAAM,iCAAiC,CAAC;AAKzC,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,uBAAuB,EAAE,GACpC,qBAAqB,EAAE,CAazB;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAAE,EAClB,UAAU,EAAE,uBAAuB,EAAE,GACpC,UAAU,EAAE,CAqBd"}
@@ -0,0 +1,41 @@
1
+ // engine/compliance-test-generator/control-mapper.ts — SPEC-390: Maps criteria to compliance controls
2
+ import { SOC2_CONTROLS } from './frameworks/soc2.js';
3
+ import { PCI_DSS_CONTROLS } from './frameworks/pci-dss.js';
4
+ import { ISO_42001_CONTROLS } from './frameworks/iso42001.js';
5
+ export function getControlsForFrameworks(frameworks) {
6
+ const controls = [];
7
+ for (const fw of frameworks) {
8
+ if (fw === 'soc2') {
9
+ controls.push(...SOC2_CONTROLS);
10
+ }
11
+ else if (fw === 'pci-dss') {
12
+ controls.push(...PCI_DSS_CONTROLS);
13
+ }
14
+ else if (fw === 'iso-42001') {
15
+ controls.push(...ISO_42001_CONTROLS);
16
+ }
17
+ // hipaa and gdpr: no built-in controls yet — extensible via future framework files
18
+ }
19
+ return controls;
20
+ }
21
+ export function mapCriteriaToControls(criteria, frameworks) {
22
+ const allControls = getControlsForFrameworks(frameworks);
23
+ const mapped = [];
24
+ for (const criterion of criteria) {
25
+ const lowerCriterion = criterion.toLowerCase();
26
+ for (const control of allControls) {
27
+ const matchedKeywords = control.keywords.filter((kw) => lowerCriterion.includes(kw));
28
+ if (matchedKeywords.length >= 1) {
29
+ mapped.push({
30
+ control,
31
+ criterion,
32
+ testCode: '', // filled by formatter
33
+ rationale: `Criterion mentions: ${matchedKeywords.join(', ')}`,
34
+ });
35
+ break; // one control per criterion
36
+ }
37
+ }
38
+ }
39
+ return mapped;
40
+ }
41
+ //# sourceMappingURL=control-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-mapper.js","sourceRoot":"","sources":["../../../src/engine/compliance-test-generator/control-mapper.ts"],"names":[],"mappings":"AAAA,sGAAsG;AAOtG,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,MAAM,UAAU,wBAAwB,CACtC,UAAqC;IAErC,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;YAClB,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;QAClC,CAAC;aAAM,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC;QACrC,CAAC;aAAM,IAAI,EAAE,KAAK,WAAW,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,CAAC;QACvC,CAAC;QACD,mFAAmF;IACrF,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,QAAkB,EAClB,UAAqC;IAErC,MAAM,WAAW,GAAG,wBAAwB,CAAC,UAAU,CAAC,CAAC;IACzD,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE,CAAC;QACjC,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QAC/C,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;YAClC,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;YACrF,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC;oBACV,OAAO;oBACP,SAAS;oBACT,QAAQ,EAAE,EAAE,EAAE,sBAAsB;oBACpC,SAAS,EAAE,uBAAuB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBAC/D,CAAC,CAAC;gBACH,MAAM,CAAC,4BAA4B;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ComplianceTestControl } from '../../../types/compliance-tests.js';
2
+ export declare const ISO_42001_CONTROLS: ComplianceTestControl[];
3
+ //# sourceMappingURL=iso42001.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iso42001.d.ts","sourceRoot":"","sources":["../../../../src/engine/compliance-test-generator/frameworks/iso42001.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAEhF,eAAO,MAAM,kBAAkB,EAAE,qBAAqB,EAoDrD,CAAC"}
@@ -0,0 +1,55 @@
1
+ // engine/compliance-test-generator/frameworks/iso42001.ts — SPEC-390: ISO-42001 control definitions
2
+ export const ISO_42001_CONTROLS = [
3
+ {
4
+ id: 'ISO-42001-4.1',
5
+ framework: 'iso-42001',
6
+ title: 'AI System Scope',
7
+ description: 'Organization defines the scope and context of the AI management system',
8
+ keywords: [
9
+ 'ai system',
10
+ 'scope',
11
+ 'context',
12
+ 'boundary',
13
+ 'ai model',
14
+ 'machine learning',
15
+ 'model',
16
+ ],
17
+ },
18
+ {
19
+ id: 'ISO-42001-6.1',
20
+ framework: 'iso-42001',
21
+ title: 'Risk Assessment',
22
+ description: 'AI risks identified, analyzed, and evaluated',
23
+ keywords: ['risk', 'threat', 'hazard', 'bias', 'fairness', 'harm', 'impact assessment'],
24
+ },
25
+ {
26
+ id: 'ISO-42001-8.4',
27
+ framework: 'iso-42001',
28
+ title: 'Data Governance',
29
+ description: 'Data used for AI is managed with appropriate controls',
30
+ keywords: [
31
+ 'data quality',
32
+ 'dataset',
33
+ 'training data',
34
+ 'data governance',
35
+ 'data management',
36
+ 'pii',
37
+ 'personal data',
38
+ ],
39
+ },
40
+ {
41
+ id: 'ISO-42001-9.1',
42
+ framework: 'iso-42001',
43
+ title: 'AI Performance Monitoring',
44
+ description: 'AI system performance is monitored, measured, and evaluated',
45
+ keywords: ['monitor', 'performance', 'metric', 'accuracy', 'drift', 'evaluation', 'benchmark'],
46
+ },
47
+ {
48
+ id: 'ISO-42001-10.1',
49
+ framework: 'iso-42001',
50
+ title: 'Continual Improvement',
51
+ description: 'Organization continually improves the AI management system',
52
+ keywords: ['improve', 'improvement', 'feedback', 'corrective action', 'review', 'update model'],
53
+ },
54
+ ];
55
+ //# sourceMappingURL=iso42001.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iso42001.js","sourceRoot":"","sources":["../../../../src/engine/compliance-test-generator/frameworks/iso42001.ts"],"names":[],"mappings":"AAAA,oGAAoG;AAIpG,MAAM,CAAC,MAAM,kBAAkB,GAA4B;IACzD;QACE,EAAE,EAAE,eAAe;QACnB,SAAS,EAAE,WAAW;QACtB,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,wEAAwE;QACrF,QAAQ,EAAE;YACR,WAAW;YACX,OAAO;YACP,SAAS;YACT,UAAU;YACV,UAAU;YACV,kBAAkB;YAClB,OAAO;SACR;KACF;IACD;QACE,EAAE,EAAE,eAAe;QACnB,SAAS,EAAE,WAAW;QACtB,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,8CAA8C;QAC3D,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,mBAAmB,CAAC;KACxF;IACD;QACE,EAAE,EAAE,eAAe;QACnB,SAAS,EAAE,WAAW;QACtB,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,uDAAuD;QACpE,QAAQ,EAAE;YACR,cAAc;YACd,SAAS;YACT,eAAe;YACf,iBAAiB;YACjB,iBAAiB;YACjB,KAAK;YACL,eAAe;SAChB;KACF;IACD;QACE,EAAE,EAAE,eAAe;QACnB,SAAS,EAAE,WAAW;QACtB,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,6DAA6D;QAC1E,QAAQ,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,CAAC;KAC/F;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,SAAS,EAAE,WAAW;QACtB,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,4DAA4D;QACzE,QAAQ,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,CAAC;KAChG;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ComplianceTestControl } from '../../../types/compliance-tests.js';
2
+ export declare const PCI_DSS_CONTROLS: ComplianceTestControl[];
3
+ //# sourceMappingURL=pci-dss.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pci-dss.d.ts","sourceRoot":"","sources":["../../../../src/engine/compliance-test-generator/frameworks/pci-dss.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAEhF,eAAO,MAAM,gBAAgB,EAAE,qBAAqB,EAoDnD,CAAC"}
@@ -0,0 +1,55 @@
1
+ // engine/compliance-test-generator/frameworks/pci-dss.ts — SPEC-390: PCI-DSS control definitions
2
+ export const PCI_DSS_CONTROLS = [
3
+ {
4
+ id: 'PCI-3.4',
5
+ framework: 'pci-dss',
6
+ title: 'Cardholder Data Encryption',
7
+ description: 'Primary account numbers must be rendered unreadable',
8
+ keywords: ['encrypt', 'card', 'pan', 'cardholder', 'payment', 'token', 'mask'],
9
+ },
10
+ {
11
+ id: 'PCI-6.3',
12
+ framework: 'pci-dss',
13
+ title: 'Secure Coding Practices',
14
+ description: 'Software developed according to secure coding guidelines',
15
+ keywords: [
16
+ 'injection',
17
+ 'xss',
18
+ 'csrf',
19
+ 'input validation',
20
+ 'sanitize',
21
+ 'secure coding',
22
+ 'vulnerability',
23
+ ],
24
+ },
25
+ {
26
+ id: 'PCI-8.2',
27
+ framework: 'pci-dss',
28
+ title: 'User Authentication Management',
29
+ description: 'Proper identification and authentication for users',
30
+ keywords: [
31
+ 'password',
32
+ 'mfa',
33
+ 'multi-factor',
34
+ 'credential',
35
+ 'user account',
36
+ 'identity',
37
+ 'session',
38
+ ],
39
+ },
40
+ {
41
+ id: 'PCI-10.1',
42
+ framework: 'pci-dss',
43
+ title: 'Audit Logging',
44
+ description: 'Link all access to system components to individual users',
45
+ keywords: ['audit', 'log', 'trail', 'trace', 'event', 'record', 'history'],
46
+ },
47
+ {
48
+ id: 'PCI-12.1',
49
+ framework: 'pci-dss',
50
+ title: 'Security Policy',
51
+ description: 'Establish, publish, maintain, and disseminate a security policy',
52
+ keywords: ['policy', 'security policy', 'compliance', 'procedure', 'standard', 'guideline'],
53
+ },
54
+ ];
55
+ //# sourceMappingURL=pci-dss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pci-dss.js","sourceRoot":"","sources":["../../../../src/engine/compliance-test-generator/frameworks/pci-dss.ts"],"names":[],"mappings":"AAAA,iGAAiG;AAIjG,MAAM,CAAC,MAAM,gBAAgB,GAA4B;IACvD;QACE,EAAE,EAAE,SAAS;QACb,SAAS,EAAE,SAAS;QACpB,KAAK,EAAE,4BAA4B;QACnC,WAAW,EAAE,qDAAqD;QAClE,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC;KAC/E;IACD;QACE,EAAE,EAAE,SAAS;QACb,SAAS,EAAE,SAAS;QACpB,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE,0DAA0D;QACvE,QAAQ,EAAE;YACR,WAAW;YACX,KAAK;YACL,MAAM;YACN,kBAAkB;YAClB,UAAU;YACV,eAAe;YACf,eAAe;SAChB;KACF;IACD;QACE,EAAE,EAAE,SAAS;QACb,SAAS,EAAE,SAAS;QACpB,KAAK,EAAE,gCAAgC;QACvC,WAAW,EAAE,oDAAoD;QACjE,QAAQ,EAAE;YACR,UAAU;YACV,KAAK;YACL,cAAc;YACd,YAAY;YACZ,cAAc;YACd,UAAU;YACV,SAAS;SACV;KACF;IACD;QACE,EAAE,EAAE,UAAU;QACd,SAAS,EAAE,SAAS;QACpB,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,0DAA0D;QACvE,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC;KAC3E;IACD;QACE,EAAE,EAAE,UAAU;QACd,SAAS,EAAE,SAAS;QACpB,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,iEAAiE;QAC9E,QAAQ,EAAE,CAAC,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,CAAC;KAC5F;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ComplianceTestControl } from '../../../types/compliance-tests.js';
2
+ export declare const SOC2_CONTROLS: ComplianceTestControl[];
3
+ //# sourceMappingURL=soc2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"soc2.d.ts","sourceRoot":"","sources":["../../../../src/engine/compliance-test-generator/frameworks/soc2.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAEhF,eAAO,MAAM,aAAa,EAAE,qBAAqB,EA4ChD,CAAC"}
@@ -0,0 +1,47 @@
1
+ // engine/compliance-test-generator/frameworks/soc2.ts — SPEC-390: SOC2 control definitions
2
+ export const SOC2_CONTROLS = [
3
+ {
4
+ id: 'SOC2-CC6.1',
5
+ framework: 'soc2',
6
+ title: 'Logical Access Controls',
7
+ description: 'Controls to prevent unauthorized access',
8
+ keywords: [
9
+ 'auth',
10
+ 'login',
11
+ 'permission',
12
+ 'access control',
13
+ 'authentication',
14
+ 'authorization',
15
+ 'role',
16
+ ],
17
+ },
18
+ {
19
+ id: 'SOC2-CC6.3',
20
+ framework: 'soc2',
21
+ title: 'Access Removal',
22
+ description: 'Procedures to remove access when no longer needed',
23
+ keywords: ['revoke', 'delete user', 'deactivate', 'offboard', 'remove access'],
24
+ },
25
+ {
26
+ id: 'SOC2-CC7.2',
27
+ framework: 'soc2',
28
+ title: 'Anomaly Detection',
29
+ description: 'System monitors for anomalies and security events',
30
+ keywords: ['monitor', 'alert', 'anomaly', 'detect', 'log', 'audit trail', 'notification'],
31
+ },
32
+ {
33
+ id: 'SOC2-CC8.1',
34
+ framework: 'soc2',
35
+ title: 'Change Management',
36
+ description: 'Authorized, tested, and documented changes',
37
+ keywords: ['deploy', 'release', 'migration', 'rollback', 'change', 'version'],
38
+ },
39
+ {
40
+ id: 'SOC2-A1.1',
41
+ framework: 'soc2',
42
+ title: 'Availability',
43
+ description: 'System available for operation as committed',
44
+ keywords: ['uptime', 'availability', 'health check', 'failover', 'sla', 'backup'],
45
+ },
46
+ ];
47
+ //# sourceMappingURL=soc2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"soc2.js","sourceRoot":"","sources":["../../../../src/engine/compliance-test-generator/frameworks/soc2.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAI3F,MAAM,CAAC,MAAM,aAAa,GAA4B;IACpD;QACE,EAAE,EAAE,YAAY;QAChB,SAAS,EAAE,MAAM;QACjB,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE,yCAAyC;QACtD,QAAQ,EAAE;YACR,MAAM;YACN,OAAO;YACP,YAAY;YACZ,gBAAgB;YAChB,gBAAgB;YAChB,eAAe;YACf,MAAM;SACP;KACF;IACD;QACE,EAAE,EAAE,YAAY;QAChB,SAAS,EAAE,MAAM;QACjB,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,mDAAmD;QAChE,QAAQ,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,CAAC;KAC/E;IACD;QACE,EAAE,EAAE,YAAY;QAChB,SAAS,EAAE,MAAM;QACjB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,mDAAmD;QAChE,QAAQ,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,cAAc,CAAC;KAC1F;IACD;QACE,EAAE,EAAE,YAAY;QAChB,SAAS,EAAE,MAAM;QACjB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,4CAA4C;QACzD,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC;KAC9E;IACD;QACE,EAAE,EAAE,WAAW;QACf,SAAS,EAAE,MAAM;QACjB,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,6CAA6C;QAC1D,QAAQ,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC;KAClF;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ComplianceTestFramework, TestOutputFormat, ComplianceTestsResult } from '../../types/compliance-tests.js';
2
+ export declare function generateComplianceTests(specPath: string, specId: string, frameworks: ComplianceTestFramework[], outputFormat?: TestOutputFormat): Promise<ComplianceTestsResult>;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/engine/compliance-test-generator/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EAEtB,MAAM,iCAAiC,CAAC;AA6CzC,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,uBAAuB,EAAE,EACrC,YAAY,GAAE,gBAAyB,GACtC,OAAO,CAAC,qBAAqB,CAAC,CAuChC"}
@@ -0,0 +1,64 @@
1
+ // engine/compliance-test-generator/index.ts — SPEC-390: Orchestrator for compliance test generation
2
+ import { readFile } from 'node:fs/promises';
3
+ import { existsSync } from 'node:fs';
4
+ import { mapCriteriaToControls, getControlsForFrameworks } from './control-mapper.js';
5
+ import { formatTest } from './test-formatter.js';
6
+ function extractCriteria(specContent) {
7
+ const lines = specContent.split('\n');
8
+ return lines
9
+ .filter((line) => /^\s*-\s*\[[ x]\]/.test(line))
10
+ .map((line) => line.replace(/^\s*-\s*\[[ x]\]\s*/, '').trim())
11
+ .filter((line) => line.length > 0);
12
+ }
13
+ function buildOutputFiles(specId, frameworks, mappedTests, outputFormat) {
14
+ const files = [];
15
+ for (const framework of frameworks) {
16
+ const testsForFramework = mappedTests.filter((t) => t.control.framework === framework);
17
+ if (testsForFramework.length === 0) {
18
+ continue;
19
+ }
20
+ const ext = outputFormat === 'jest' ? '.test.ts' : outputFormat === 'gherkin' ? '.feature' : '.md';
21
+ const filePath = `compliance/${specId}/${framework}${ext}`;
22
+ const content = testsForFramework.map((t) => t.testCode).join('\n');
23
+ files.push({ path: filePath, content });
24
+ }
25
+ return files;
26
+ }
27
+ function buildCoverageReport(frameworks, mappedTests) {
28
+ const allControls = getControlsForFrameworks(frameworks);
29
+ const coveredIds = new Set(mappedTests.map((t) => t.control.id));
30
+ return allControls.map((c) => ({ controlId: c.id, covered: coveredIds.has(c.id) }));
31
+ }
32
+ export async function generateComplianceTests(specPath, specId, frameworks, outputFormat = 'jest') {
33
+ // Read spec content
34
+ let specContent = '';
35
+ if (existsSync(specPath)) {
36
+ specContent = await readFile(specPath, 'utf-8');
37
+ }
38
+ // Extract acceptance criteria lines
39
+ const criteria = extractCriteria(specContent);
40
+ // Map criteria to controls
41
+ const mappedTests = mapCriteriaToControls(criteria, frameworks);
42
+ // Format each mapped test
43
+ for (const test of mappedTests) {
44
+ test.testCode = formatTest(test, outputFormat);
45
+ }
46
+ // Build output files (one per framework)
47
+ const generatedFiles = buildOutputFiles(specId, frameworks, mappedTests, outputFormat);
48
+ // Build coverage report
49
+ const coverageReport = buildCoverageReport(frameworks, mappedTests);
50
+ const coveredCount = coverageReport.filter((r) => r.covered).length;
51
+ const totalCount = coverageReport.length;
52
+ return {
53
+ specId,
54
+ frameworks,
55
+ mappedTests,
56
+ outputFormat,
57
+ generatedFiles,
58
+ coverageReport,
59
+ message: `Generated ${mappedTests.length} compliance tests for ${specId}. ` +
60
+ `Control coverage: ${coveredCount}/${totalCount}. ` +
61
+ `Output format: ${outputFormat}.`,
62
+ };
63
+ }
64
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engine/compliance-test-generator/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { MappedTest, TestOutputFormat } from '../../types/compliance-tests.js';
2
+ export declare function formatAsJest(test: MappedTest): string;
3
+ export declare function formatAsGherkin(test: MappedTest): string;
4
+ export declare function formatAsMarkdown(test: MappedTest): string;
5
+ export declare function formatTest(test: MappedTest, format: TestOutputFormat): string;
6
+ //# sourceMappingURL=test-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-formatter.d.ts","sourceRoot":"","sources":["../../../src/engine/compliance-test-generator/test-formatter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEpF,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAWrD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAQxD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAMzD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAQ7E"}