monora-ai 2.1.0 → 2.1.4

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 (193) hide show
  1. package/README.md +339 -158
  2. package/dist/aims_governance.d.ts +238 -0
  3. package/dist/aims_governance.d.ts.map +1 -0
  4. package/dist/aims_governance.js +922 -0
  5. package/dist/alerts.d.ts +16 -0
  6. package/dist/alerts.d.ts.map +1 -1
  7. package/dist/alerts.js +16 -0
  8. package/dist/api.d.ts +6 -0
  9. package/dist/api.d.ts.map +1 -1
  10. package/dist/api.js +6 -0
  11. package/dist/assessment.d.ts +85 -0
  12. package/dist/assessment.d.ts.map +1 -1
  13. package/dist/assessment.js +525 -13
  14. package/dist/attribution.d.ts +44 -3
  15. package/dist/attribution.d.ts.map +1 -1
  16. package/dist/attribution.js +197 -10
  17. package/dist/autodetect.d.ts +68 -0
  18. package/dist/autodetect.d.ts.map +1 -1
  19. package/dist/autodetect.js +639 -0
  20. package/dist/bias.d.ts +130 -0
  21. package/dist/bias.d.ts.map +1 -0
  22. package/dist/bias.js +223 -0
  23. package/dist/cli/diagnostics.d.ts +5 -1
  24. package/dist/cli/diagnostics.d.ts.map +1 -1
  25. package/dist/cli/diagnostics.js +23 -6
  26. package/dist/cli/doctor.d.ts +25 -0
  27. package/dist/cli/doctor.d.ts.map +1 -0
  28. package/dist/cli/doctor.js +381 -0
  29. package/dist/cli/fix.d.ts +16 -0
  30. package/dist/cli/fix.d.ts.map +1 -0
  31. package/dist/cli/fix.js +284 -0
  32. package/dist/cli/init.d.ts +57 -0
  33. package/dist/cli/init.d.ts.map +1 -0
  34. package/dist/cli/init.js +205 -0
  35. package/dist/cli.js +1564 -177
  36. package/dist/complianceConsolidation.d.ts +17 -0
  37. package/dist/complianceConsolidation.d.ts.map +1 -0
  38. package/dist/complianceConsolidation.js +68 -0
  39. package/dist/complianceTargets.d.ts +111 -0
  40. package/dist/complianceTargets.d.ts.map +1 -0
  41. package/dist/complianceTargets.js +521 -0
  42. package/dist/config.d.ts +261 -16
  43. package/dist/config.d.ts.map +1 -1
  44. package/dist/config.js +381 -32
  45. package/dist/config_migrations.d.ts.map +1 -1
  46. package/dist/config_migrations.js +38 -1
  47. package/dist/config_schema.d.ts +2490 -1035
  48. package/dist/config_schema.d.ts.map +1 -1
  49. package/dist/config_schema.js +233 -64
  50. package/dist/context.d.ts +34 -0
  51. package/dist/context.d.ts.map +1 -1
  52. package/dist/context.js +118 -7
  53. package/dist/control_backbone.d.ts +128 -0
  54. package/dist/control_backbone.d.ts.map +1 -0
  55. package/dist/control_backbone.js +826 -0
  56. package/dist/data-governance.d.ts +187 -0
  57. package/dist/data-governance.d.ts.map +1 -0
  58. package/dist/data-governance.js +424 -0
  59. package/dist/dataResidency.d.ts +44 -0
  60. package/dist/dataResidency.d.ts.map +1 -0
  61. package/dist/dataResidency.js +203 -0
  62. package/dist/dispatcher.d.ts.map +1 -1
  63. package/dist/dispatcher.js +17 -5
  64. package/dist/evidence_store.d.ts +103 -0
  65. package/dist/evidence_store.d.ts.map +1 -0
  66. package/dist/evidence_store.js +459 -0
  67. package/dist/executiveSummary.d.ts +15 -0
  68. package/dist/executiveSummary.d.ts.map +1 -1
  69. package/dist/executiveSummary.js +135 -22
  70. package/dist/identity.d.ts +143 -0
  71. package/dist/identity.d.ts.map +1 -0
  72. package/dist/identity.js +231 -0
  73. package/dist/impact-assessment.d.ts +350 -0
  74. package/dist/impact-assessment.d.ts.map +1 -0
  75. package/dist/impact-assessment.js +580 -0
  76. package/dist/index.d.ts +21 -4
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +254 -5
  79. package/dist/instrumentation.d.ts +1 -1
  80. package/dist/instrumentation.d.ts.map +1 -1
  81. package/dist/instrumentation.js +123 -22
  82. package/dist/integrations/anthropic.d.ts +3 -0
  83. package/dist/integrations/anthropic.d.ts.map +1 -1
  84. package/dist/integrations/anthropic.js +282 -80
  85. package/dist/integrations/governance.d.ts +33 -0
  86. package/dist/integrations/governance.d.ts.map +1 -0
  87. package/dist/integrations/governance.js +208 -0
  88. package/dist/integrations/langchain.d.ts +4 -0
  89. package/dist/integrations/langchain.d.ts.map +1 -1
  90. package/dist/integrations/langchain.js +362 -142
  91. package/dist/integrations/openai.d.ts +9 -0
  92. package/dist/integrations/openai.d.ts.map +1 -1
  93. package/dist/integrations/openai.js +673 -73
  94. package/dist/iso42001_consolidation.d.ts +16 -0
  95. package/dist/iso42001_consolidation.d.ts.map +1 -0
  96. package/dist/iso42001_consolidation.js +413 -0
  97. package/dist/iso42001_workflows.d.ts +263 -0
  98. package/dist/iso42001_workflows.d.ts.map +1 -0
  99. package/dist/iso42001_workflows.js +781 -0
  100. package/dist/lifecycle.d.ts +299 -0
  101. package/dist/lifecycle.d.ts.map +1 -0
  102. package/dist/lifecycle.js +624 -0
  103. package/dist/lineage.d.ts +2 -2
  104. package/dist/lineage.d.ts.map +1 -1
  105. package/dist/lineage.js +9 -16
  106. package/dist/middleware/express.d.ts.map +1 -1
  107. package/dist/middleware/express.js +18 -3
  108. package/dist/middleware/nextjs.js +2 -2
  109. package/dist/model.d.ts +143 -0
  110. package/dist/model.d.ts.map +1 -0
  111. package/dist/model.js +371 -0
  112. package/dist/onboarding.d.ts +42 -0
  113. package/dist/onboarding.d.ts.map +1 -0
  114. package/dist/onboarding.js +1075 -0
  115. package/dist/oversight.d.ts +264 -0
  116. package/dist/oversight.d.ts.map +1 -0
  117. package/dist/oversight.js +497 -0
  118. package/dist/presets.js +7 -7
  119. package/dist/quotas.d.ts +171 -0
  120. package/dist/quotas.d.ts.map +1 -0
  121. package/dist/quotas.js +259 -0
  122. package/dist/register.d.ts +13 -0
  123. package/dist/register.d.ts.map +1 -0
  124. package/dist/register.js +99 -0
  125. package/dist/registry.d.ts +1 -0
  126. package/dist/registry.d.ts.map +1 -1
  127. package/dist/registry.js +7 -0
  128. package/dist/registryData.json +43 -6
  129. package/dist/report.d.ts +2 -1
  130. package/dist/report.d.ts.map +1 -1
  131. package/dist/report.js +189 -2
  132. package/dist/reporting.d.ts +125 -0
  133. package/dist/reporting.d.ts.map +1 -1
  134. package/dist/reporting.js +192 -2
  135. package/dist/resources.d.ts +285 -0
  136. package/dist/resources.d.ts.map +1 -0
  137. package/dist/resources.js +643 -0
  138. package/dist/risk.d.ts +120 -0
  139. package/dist/risk.d.ts.map +1 -0
  140. package/dist/risk.js +220 -0
  141. package/dist/runtime.d.ts +74 -0
  142. package/dist/runtime.d.ts.map +1 -1
  143. package/dist/runtime.js +416 -18
  144. package/dist/schemaInference.d.ts +92 -0
  145. package/dist/schemaInference.d.ts.map +1 -0
  146. package/dist/schemaInference.js +466 -0
  147. package/dist/schema_validation.js +2 -2
  148. package/dist/schemas/config.schema.json +118 -4
  149. package/dist/security_report.js +4 -4
  150. package/dist/signing.d.ts +1 -1
  151. package/dist/signing.d.ts.map +1 -1
  152. package/dist/signing.js +4 -0
  153. package/dist/sinks/file.d.ts +19 -1
  154. package/dist/sinks/file.d.ts.map +1 -1
  155. package/dist/sinks/file.js +82 -13
  156. package/dist/sinks/https.d.ts +10 -0
  157. package/dist/sinks/https.d.ts.map +1 -1
  158. package/dist/sinks/https.js +76 -16
  159. package/dist/sinks/stdout.d.ts +1 -0
  160. package/dist/sinks/stdout.d.ts.map +1 -1
  161. package/dist/sinks/stdout.js +12 -1
  162. package/dist/spec.d.ts +159 -0
  163. package/dist/spec.d.ts.map +1 -0
  164. package/dist/spec.js +391 -0
  165. package/dist/stakeholders.d.ts +199 -0
  166. package/dist/stakeholders.d.ts.map +1 -0
  167. package/dist/stakeholders.js +398 -0
  168. package/dist/standards.d.ts.map +1 -1
  169. package/dist/standards.js +160 -2
  170. package/dist/standards_ingest.d.ts.map +1 -1
  171. package/dist/standards_ingest.js +1 -4
  172. package/dist/telemetry.d.ts +16 -2
  173. package/dist/telemetry.d.ts.map +1 -1
  174. package/dist/telemetry.js +77 -14
  175. package/dist/templates/controls/gdpr_control_catalog.json +261 -0
  176. package/dist/templates/controls/iso42001_control_catalog.json +1443 -0
  177. package/dist/templates/controls/soc2_control_catalog.json +163 -0
  178. package/dist/templates/standards/iso42001_claims.json +72 -0
  179. package/dist/traced_emitter.d.ts.map +1 -1
  180. package/dist/traced_emitter.js +19 -9
  181. package/dist/trust_package.d.ts +20 -1
  182. package/dist/trust_package.d.ts.map +1 -1
  183. package/dist/trust_package.js +90 -2
  184. package/dist/verify.d.ts.map +1 -1
  185. package/dist/verify.js +9 -2
  186. package/dist/wal.d.ts.map +1 -1
  187. package/dist/wal.js +2 -1
  188. package/package.json +14 -1
  189. package/scripts/postinstall.js +105 -210
  190. package/templates/controls/gdpr_control_catalog.json +261 -0
  191. package/templates/controls/iso42001_control_catalog.json +1443 -0
  192. package/templates/controls/soc2_control_catalog.json +163 -0
  193. package/templates/standards/iso42001_claims.json +72 -0
@@ -0,0 +1,163 @@
1
+ {
2
+ "catalog_id": "soc2_gap_catalog_monora",
3
+ "standard": "SOC2",
4
+ "version": "0.1.0",
5
+ "generated_at": "2026-02-16T00:00:00+00:00",
6
+ "notes": "Default SOC 2 Trust Services Criteria control catalog for workflow coverage and gap prioritization.",
7
+ "controls": [
8
+ {
9
+ "control_id": "CC1",
10
+ "clause": "CC",
11
+ "title": "Control Environment",
12
+ "requirement": "Establish integrity and ethical values.",
13
+ "guidance": "Document governance and accountability structure.",
14
+ "evidence_types": ["governance_charter", "policy_document"],
15
+ "frequency": "annual",
16
+ "owner": "Compliance Lead",
17
+ "system": "governance",
18
+ "collection_method": "manual",
19
+ "status": "gap",
20
+ "priority": "high"
21
+ },
22
+ {
23
+ "control_id": "CC2",
24
+ "clause": "CC",
25
+ "title": "Communication and Information",
26
+ "requirement": "Maintain internal/external communication for controls.",
27
+ "guidance": "Document control communication channels.",
28
+ "evidence_types": ["communication_plan", "review_minutes"],
29
+ "frequency": "quarterly",
30
+ "owner": "Compliance Lead",
31
+ "system": "governance",
32
+ "collection_method": "manual",
33
+ "status": "gap",
34
+ "priority": "medium"
35
+ },
36
+ {
37
+ "control_id": "CC3",
38
+ "clause": "CC",
39
+ "title": "Risk Assessment",
40
+ "requirement": "Identify and analyze risks.",
41
+ "guidance": "Maintain risk register and periodic reviews.",
42
+ "evidence_types": ["risk_register", "risk_review_minutes"],
43
+ "frequency": "quarterly",
44
+ "owner": "Risk Lead",
45
+ "system": "risk_management",
46
+ "collection_method": "hybrid",
47
+ "status": "gap",
48
+ "priority": "high"
49
+ },
50
+ {
51
+ "control_id": "CC4",
52
+ "clause": "CC",
53
+ "title": "Monitoring Activities",
54
+ "requirement": "Monitor controls and remediate deficiencies.",
55
+ "guidance": "Track monitoring outcomes and corrective actions.",
56
+ "evidence_types": ["monitoring_report", "corrective_action_log"],
57
+ "frequency": "monthly",
58
+ "owner": "Internal Audit Lead",
59
+ "system": "monitoring",
60
+ "collection_method": "hybrid",
61
+ "status": "gap",
62
+ "priority": "high"
63
+ },
64
+ {
65
+ "control_id": "CC5",
66
+ "clause": "CC",
67
+ "title": "Control Activities",
68
+ "requirement": "Implement and enforce control procedures.",
69
+ "guidance": "Enforce policies and document exceptions.",
70
+ "evidence_types": ["policy_configuration", "exception_log"],
71
+ "frequency": "monthly",
72
+ "owner": "Security Lead",
73
+ "system": "policy_enforcement",
74
+ "collection_method": "hybrid",
75
+ "status": "gap",
76
+ "priority": "high"
77
+ },
78
+ {
79
+ "control_id": "CC6",
80
+ "clause": "CC",
81
+ "title": "Logical and Physical Access Controls",
82
+ "requirement": "Restrict system access to authorized users.",
83
+ "guidance": "Track identity controls and least-privilege access.",
84
+ "evidence_types": ["identity_and_mfa_report", "access_review"],
85
+ "frequency": "monthly",
86
+ "owner": "Security Lead",
87
+ "system": "access_control",
88
+ "collection_method": "hybrid",
89
+ "status": "gap",
90
+ "priority": "critical"
91
+ },
92
+ {
93
+ "control_id": "CC7",
94
+ "clause": "CC",
95
+ "title": "System Operations",
96
+ "requirement": "Detect and respond to operational anomalies.",
97
+ "guidance": "Track runtime integrity and incident response.",
98
+ "evidence_types": ["runtime_observability_report", "incident_response_record"],
99
+ "frequency": "monthly",
100
+ "owner": "Operations Lead",
101
+ "system": "operations",
102
+ "collection_method": "hybrid",
103
+ "status": "gap",
104
+ "priority": "high"
105
+ },
106
+ {
107
+ "control_id": "CC8",
108
+ "clause": "CC",
109
+ "title": "Change Management",
110
+ "requirement": "Manage changes through controlled workflow.",
111
+ "guidance": "Document approvals and deployment controls.",
112
+ "evidence_types": ["change_approval_record", "deployment_approval_records"],
113
+ "frequency": "monthly",
114
+ "owner": "Engineering Lead",
115
+ "system": "change_management",
116
+ "collection_method": "manual",
117
+ "status": "gap",
118
+ "priority": "medium"
119
+ },
120
+ {
121
+ "control_id": "CC9",
122
+ "clause": "CC",
123
+ "title": "Risk Mitigation",
124
+ "requirement": "Mitigate identified risks with documented actions.",
125
+ "guidance": "Track mitigation plans and completion.",
126
+ "evidence_types": ["risk_register", "mitigation_plan"],
127
+ "frequency": "quarterly",
128
+ "owner": "Risk Lead",
129
+ "system": "risk_management",
130
+ "collection_method": "hybrid",
131
+ "status": "gap",
132
+ "priority": "high"
133
+ },
134
+ {
135
+ "control_id": "P_SERIES",
136
+ "clause": "P",
137
+ "title": "Privacy",
138
+ "requirement": "Operate in accordance with privacy commitments.",
139
+ "guidance": "Document notices, consent, and subject rights handling.",
140
+ "evidence_types": ["privacy_notice", "data_subject_request_log"],
141
+ "frequency": "quarterly",
142
+ "owner": "Privacy Officer",
143
+ "system": "privacy_program",
144
+ "collection_method": "manual",
145
+ "status": "gap",
146
+ "priority": "high"
147
+ },
148
+ {
149
+ "control_id": "PI_SERIES",
150
+ "clause": "PI",
151
+ "title": "Processing Integrity",
152
+ "requirement": "Ensure complete, valid, and accurate processing.",
153
+ "guidance": "Track processing controls and integrity validation.",
154
+ "evidence_types": ["processing_integrity_report", "integrity_validation_log"],
155
+ "frequency": "monthly",
156
+ "owner": "Operations Lead",
157
+ "system": "processing_integrity",
158
+ "collection_method": "hybrid",
159
+ "status": "gap",
160
+ "priority": "high"
161
+ }
162
+ ]
163
+ }
@@ -0,0 +1,72 @@
1
+ {
2
+ "report": {
3
+ "standard": "ISO42001",
4
+ "title": "ISO/IEC 42001 AIMS Claims Report",
5
+ "version": "2026-01",
6
+ "source": "Customer-provided report"
7
+ },
8
+ "excerpts": [],
9
+ "claims": [
10
+ {
11
+ "id": "ISO42001-A5",
12
+ "standard": "ISO42001",
13
+ "section": "A.5",
14
+ "statement": "AI risk and impact assessment workflows are enabled.",
15
+ "requires_excerpts": true,
16
+ "evidence_excerpts": [],
17
+ "checks": [
18
+ { "type": "config_required", "path": "risk_register.enabled", "equals": true },
19
+ { "type": "config_required", "path": "bias.enabled", "equals": true }
20
+ ]
21
+ },
22
+ {
23
+ "id": "ISO42001-A6",
24
+ "standard": "ISO42001",
25
+ "section": "A.6",
26
+ "statement": "Lifecycle and operational controls are tracked with immutable evidence.",
27
+ "requires_excerpts": true,
28
+ "evidence_excerpts": [],
29
+ "checks": [
30
+ { "type": "config_required", "path": "lifecycle.enabled", "equals": true },
31
+ { "type": "hash_chain_status", "status": "verified" },
32
+ { "type": "sequence_gaps_max", "max": 0 }
33
+ ]
34
+ },
35
+ {
36
+ "id": "ISO42001-A7",
37
+ "standard": "ISO42001",
38
+ "section": "A.7",
39
+ "statement": "Data governance controls are enabled for AI system data.",
40
+ "requires_excerpts": true,
41
+ "evidence_excerpts": [],
42
+ "checks": [
43
+ { "type": "config_required", "path": "data_governance.enabled", "equals": true },
44
+ { "type": "config_required", "path": "data_handling.enabled", "equals": true }
45
+ ]
46
+ },
47
+ {
48
+ "id": "ISO42001-A8",
49
+ "standard": "ISO42001",
50
+ "section": "A.8",
51
+ "statement": "Human oversight and policy governance are documented.",
52
+ "requires_excerpts": true,
53
+ "evidence_excerpts": [],
54
+ "checks": [
55
+ { "type": "config_required", "path": "human_oversight.enabled", "equals": true },
56
+ { "type": "config_required", "path": "policies.enforce", "equals": true }
57
+ ]
58
+ },
59
+ {
60
+ "id": "ISO42001-AIMS-INTEGRITY",
61
+ "standard": "ISO42001",
62
+ "section": "Clause 9/10",
63
+ "statement": "Governance evidence supports verifiable integrity for audit reporting.",
64
+ "requires_excerpts": true,
65
+ "evidence_excerpts": [],
66
+ "checks": [
67
+ { "type": "signatures_status", "status": "verified" },
68
+ { "type": "errors_max", "max": 0 }
69
+ ]
70
+ }
71
+ ]
72
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"traced_emitter.d.ts","sourceRoot":"","sources":["../src/traced_emitter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAQtC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,OAAO,CAAC,gBAAgB,CAAuE;IAC/F,OAAO,CAAC,gBAAgB,CAAuD;IAE/E,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,eAAe;IAiBvB;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAWpE;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAI7E;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAatE;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAWrE;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAIhF;;OAEG;IACH,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAWjD;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAWjF;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;CAWtF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,YAAY,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CA8I5E"}
1
+ {"version":3,"file":"traced_emitter.d.ts","sourceRoot":"","sources":["../src/traced_emitter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAQtC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,OAAO,CAAC,gBAAgB,CAAuE;IAC/F,OAAO,CAAC,gBAAgB,CAAuD;IAE/E,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,eAAe;IAiBvB;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAWpE;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAI7E;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAatE;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAWrE;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAIhF;;OAEG;IACH,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAWjD;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAWjF;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;CAWtF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,YAAY,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAuJ5E"}
@@ -187,10 +187,8 @@ exports.TracedEventEmitter = TracedEventEmitter;
187
187
  */
188
188
  function wrapEmitterWithContext(emitter) {
189
189
  const originalOn = emitter.on.bind(emitter);
190
- const originalOnce = emitter.once.bind(emitter);
191
190
  const originalAddListener = emitter.addListener.bind(emitter);
192
191
  const originalPrependListener = emitter.prependListener.bind(emitter);
193
- const originalPrependOnceListener = emitter.prependOnceListener.bind(emitter);
194
192
  const originalRemoveListener = emitter.removeListener.bind(emitter);
195
193
  const originalOff = emitter.off ? emitter.off.bind(emitter) : undefined;
196
194
  const originalRemoveAllListeners = emitter.removeAllListeners.bind(emitter);
@@ -223,6 +221,12 @@ function wrapEmitterWithContext(emitter) {
223
221
  return bound(...args);
224
222
  }
225
223
  finally {
224
+ if (originalOff) {
225
+ originalOff(event, wrapped);
226
+ }
227
+ else {
228
+ originalRemoveListener(event, wrapped);
229
+ }
226
230
  untrackListener(event, listener);
227
231
  }
228
232
  };
@@ -239,13 +243,13 @@ function wrapEmitterWithContext(emitter) {
239
243
  return originalAddListener(event, bindListener(event, listener, false));
240
244
  };
241
245
  emitter.once = function (event, listener) {
242
- return originalOnce(event, bindListener(event, listener, true));
246
+ return originalOn(event, bindListener(event, listener, true));
243
247
  };
244
248
  emitter.prependListener = function (event, listener) {
245
249
  return originalPrependListener(event, bindListener(event, listener, false));
246
250
  };
247
251
  emitter.prependOnceListener = function (event, listener) {
248
- return originalPrependOnceListener(event, bindListener(event, listener, true));
252
+ return originalPrependListener(event, bindListener(event, listener, true));
249
253
  };
250
254
  emitter.removeListener = function (event, listener) {
251
255
  const bound = boundListeners.get(listener);
@@ -258,12 +262,18 @@ function wrapEmitterWithContext(emitter) {
258
262
  };
259
263
  emitter.off = function (event, listener) {
260
264
  const bound = boundListeners.get(listener);
261
- const target = bound || listener;
262
- if (originalOff) {
263
- originalOff(event, target);
265
+ const targets = new Set();
266
+ targets.add(listener);
267
+ if (bound) {
268
+ targets.add(bound);
264
269
  }
265
- else {
266
- originalRemoveListener(event, target);
270
+ for (const target of targets) {
271
+ if (originalOff) {
272
+ originalOff(event, target);
273
+ }
274
+ else {
275
+ originalRemoveListener(event, target);
276
+ }
267
277
  }
268
278
  if (bound) {
269
279
  untrackListener(event, listener);
@@ -10,12 +10,31 @@ export interface TrustPackage {
10
10
  hash_chain_proof: Record<string, any>;
11
11
  config_snapshot: Record<string, any>;
12
12
  export_manifest: Record<string, any>;
13
+ evidence_manifest?: Record<string, any>;
14
+ control_coverage?: Record<string, any>;
13
15
  audit_metadata?: Record<string, any>;
14
16
  project_registration?: Record<string, any>;
15
17
  gpg_signature: string | null;
16
18
  gpg_signature_metadata?: Record<string, any>;
17
19
  }
18
- export declare function buildTrustPackage(traceId: string, events: Array<Record<string, any>>, config: MonoraConfig): TrustPackage;
20
+ export interface TrustPackageBuildOptions {
21
+ evidenceManifest?: Record<string, any>;
22
+ evidenceManifestPath?: string;
23
+ evidenceManifestAuto?: boolean;
24
+ evidenceManifestStandard?: string;
25
+ evidenceManifestIncludeLineage?: boolean;
26
+ evidenceManifestIncludeHashChain?: boolean;
27
+ evidenceManifestIncludeWorkflowState?: boolean;
28
+ evidenceManifestIncludeAimsState?: boolean;
29
+ controlCatalog?: Record<string, any>;
30
+ controlCatalogPath?: string;
31
+ controlCatalogStandard?: string;
32
+ controlWorkflowState?: Record<string, any>;
33
+ controlWorkflowStatePath?: string;
34
+ controlCoverageTarget?: number;
35
+ controlCoveragePath?: string;
36
+ }
37
+ export declare function buildTrustPackage(traceId: string, events: Array<Record<string, any>>, config: MonoraConfig, options?: TrustPackageBuildOptions): TrustPackage;
19
38
  export declare function applyGpgSignature(trustPackage: TrustPackage, options?: {
20
39
  gpgKey?: string;
21
40
  gpgHome?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"trust_package.d.ts","sourceRoot":"","sources":["../src/trust_package.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAMxC,MAAM,WAAW,YAAY;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACvC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9C;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAClC,MAAM,EAAE,YAAY,GACnB,YAAY,CA4Bd;AAED,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,YAAY,EAC1B,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9C,YAAY,CAQd;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,IAAI,CAOtF;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAClC,OAAO,EAAE,MAAM,GACd,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAS5B"}
1
+ {"version":3,"file":"trust_package.d.ts","sourceRoot":"","sources":["../src/trust_package.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAQxC,MAAM,WAAW,YAAY;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACvC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,wBAAwB;IACvC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACvC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,8BAA8B,CAAC,EAAE,OAAO,CAAC;IACzC,gCAAgC,CAAC,EAAE,OAAO,CAAC;IAC3C,oCAAoC,CAAC,EAAE,OAAO,CAAC;IAC/C,gCAAgC,CAAC,EAAE,OAAO,CAAC;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3C,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAClC,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,wBAAwB,GACjC,YAAY,CA4Fd;AAED,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,YAAY,EAC1B,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9C,YAAY,CAQd;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,IAAI,CAOtF;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAClC,OAAO,EAAE,MAAM,GACd,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAS5B"}
@@ -44,13 +44,15 @@ const fs = __importStar(require("fs"));
44
44
  const path = __importStar(require("path"));
45
45
  const attestation_1 = require("./attestation");
46
46
  const attribution_1 = require("./attribution");
47
+ const control_backbone_1 = require("./control_backbone");
48
+ const evidence_store_1 = require("./evidence_store");
47
49
  const report_1 = require("./report");
48
50
  const security_report_1 = require("./security_report");
49
51
  const verify_1 = require("./verify");
50
52
  const reporting_1 = require("./reporting");
51
- function buildTrustPackage(traceId, events, config) {
53
+ function buildTrustPackage(traceId, events, config, options) {
52
54
  const traceEvents = filterTraceEvents(events, traceId);
53
- const complianceReport = (0, report_1.buildReport)(traceEvents, config.policies || {});
55
+ const complianceReport = (0, report_1.buildReport)(traceEvents, config.policies || {}, config.registry);
54
56
  const configSnapshot = (0, security_report_1.buildConfigSnapshot)(config || {});
55
57
  const hashChainProof = buildHashChainProof(traceEvents, config || {}, traceId);
56
58
  const exportManifest = buildExportManifest(traceEvents, config || {}, traceId);
@@ -72,6 +74,62 @@ function buildTrustPackage(traceId, events, config) {
72
74
  if (registration) {
73
75
  trustPackage.project_registration = { ...registration };
74
76
  }
77
+ let evidenceManifest = loadEvidenceManifest(options);
78
+ if (!evidenceManifest && options?.evidenceManifestAuto) {
79
+ evidenceManifest = (0, evidence_store_1.buildRuntimeEvidenceManifest)({
80
+ standard: options.evidenceManifestStandard || 'ISO42001',
81
+ includeLineage: options.evidenceManifestIncludeLineage !== false,
82
+ includeHashChain: options.evidenceManifestIncludeHashChain !== false,
83
+ includeControlWorkflowState: options.evidenceManifestIncludeWorkflowState !== false,
84
+ includeAimsGovernanceState: options.evidenceManifestIncludeAimsState !== false,
85
+ controlCatalog: options.controlCatalog || null,
86
+ });
87
+ }
88
+ const workflowState = loadWorkflowState(options);
89
+ const shouldGenerateCoverage = Boolean(options?.controlCatalog) ||
90
+ Boolean(options?.controlCatalogPath) ||
91
+ Boolean(workflowState) ||
92
+ Boolean(evidenceManifest) ||
93
+ Boolean(options?.controlCoveragePath);
94
+ if (shouldGenerateCoverage) {
95
+ let catalog = options?.controlCatalog || null;
96
+ if (!catalog && options?.controlCatalogPath) {
97
+ try {
98
+ catalog = JSON.parse(fs.readFileSync(options.controlCatalogPath, 'utf-8'));
99
+ }
100
+ catch {
101
+ catalog = null;
102
+ }
103
+ }
104
+ if (!catalog) {
105
+ try {
106
+ catalog = (0, control_backbone_1.loadDefaultControlCatalog)(options?.controlCatalogStandard || 'ISO42001');
107
+ }
108
+ catch (_err) {
109
+ catalog = null;
110
+ }
111
+ }
112
+ if (catalog) {
113
+ const coverage = (0, control_backbone_1.generateControlCoverageReport)({
114
+ catalog,
115
+ evidenceItems: evidenceManifest?.evidence_items
116
+ || workflowState?.evidence_items,
117
+ workflows: workflowState?.workflows,
118
+ targetCoverage: typeof options?.controlCoverageTarget === 'number'
119
+ ? options.controlCoverageTarget
120
+ : 0.9,
121
+ standard: options?.controlCatalogStandard,
122
+ });
123
+ trustPackage.control_coverage = coverage;
124
+ if (options?.controlCoveragePath) {
125
+ fs.mkdirSync(path.dirname(options.controlCoveragePath), { recursive: true });
126
+ fs.writeFileSync(options.controlCoveragePath, JSON.stringify(coverage, null, 2), 'utf-8');
127
+ }
128
+ }
129
+ }
130
+ if (evidenceManifest) {
131
+ trustPackage.evidence_manifest = evidenceManifest;
132
+ }
75
133
  return trustPackage;
76
134
  }
77
135
  function applyGpgSignature(trustPackage, options) {
@@ -166,3 +224,33 @@ function attachSignature(trustPackage, signature) {
166
224
  },
167
225
  };
168
226
  }
227
+ function loadEvidenceManifest(options) {
228
+ if (options?.evidenceManifest && typeof options.evidenceManifest === 'object') {
229
+ return options.evidenceManifest;
230
+ }
231
+ if (options?.evidenceManifestPath) {
232
+ try {
233
+ return JSON.parse(fs.readFileSync(options.evidenceManifestPath, 'utf-8'));
234
+ }
235
+ catch (error) {
236
+ const message = error instanceof Error ? error.message : String(error);
237
+ throw new Error(`loadEvidenceManifest failed to parse ${options.evidenceManifestPath}: ${message}`);
238
+ }
239
+ }
240
+ return null;
241
+ }
242
+ function loadWorkflowState(options) {
243
+ if (options?.controlWorkflowState && typeof options.controlWorkflowState === 'object') {
244
+ return options.controlWorkflowState;
245
+ }
246
+ if (options?.controlWorkflowStatePath) {
247
+ try {
248
+ return JSON.parse(fs.readFileSync(options.controlWorkflowStatePath, 'utf-8'));
249
+ }
250
+ catch (error) {
251
+ const message = error instanceof Error ? error.message : String(error);
252
+ throw new Error(`loadWorkflowState failed to parse ${options.controlWorkflowStatePath}: ${message}`);
253
+ }
254
+ }
255
+ return null;
256
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAID,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CA2DnE;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GACjC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC,CA4C1B;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAClC,OAAO,EAAE,MAAM,GACd,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC,CAgB1B;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GACjC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CA+C5B;AA0BD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GACjC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAkD5B;AAgBD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,mBAAmB,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC3C,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GACjC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,UAAU,CAAC,CAoBtC;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAO9E;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAEhE;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAkC1D"}
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAID,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CA2DnE;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GACjC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC,CA4C1B;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAClC,OAAO,EAAE,MAAM,GACd,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC,CAgB1B;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GACjC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CA+C5B;AA0BD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GACjC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAkD5B;AAgBD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,mBAAmB,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC3C,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GACjC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,UAAU,CAAC,CA6BtC;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAO9E;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAEhE;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAkC1D"}
package/dist/verify.js CHANGED
@@ -288,8 +288,15 @@ function verifyChainWithProof(events) {
288
288
  };
289
289
  // Always compute Merkle root for chains with > 1 event
290
290
  if (events.length > 1) {
291
- const hashes = events.map((e) => e.event_hash || '');
292
- proofData.merkle_root = computeMerkleRoot(hashes);
291
+ const hashes = events
292
+ .map((event) => event.event_hash)
293
+ .filter((hash) => typeof hash === 'string' && hash.length > 0);
294
+ if (hashes.length !== events.length) {
295
+ throw new ChainVerificationError('Missing event_hash values; cannot compute Merkle root.');
296
+ }
297
+ if (hashes.length > 1) {
298
+ proofData.merkle_root = computeMerkleRoot(hashes);
299
+ }
293
300
  }
294
301
  return [isValid, error, proofData];
295
302
  }
package/dist/wal.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"wal.d.ts","sourceRoot":"","sources":["../src/wal.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,SAAS,GAAG,WAAW,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IACvC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,EAAE,CAAuB;IACjC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,eAAe,CAAK;gBAEhB,MAAM,GAAE,SAAc;IAgBlC,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,iBAAiB;IAyBzB;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM;IAgBzC;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAazB,OAAO,CAAC,WAAW;IAcnB;;;;OAIG;IACH,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IA4BrC,OAAO,CAAE,cAAc;IAgCvB;;;;OAIG;IACH,eAAe,IAAI,MAAM;IA4CzB;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb,OAAO,CAAC,qBAAqB;CAkC9B;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAAE,GAAG,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,aAAa,CAE9E"}
1
+ {"version":3,"file":"wal.d.ts","sourceRoot":"","sources":["../src/wal.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,SAAS,GAAG,WAAW,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IACvC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,EAAE,CAAuB;IACjC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,eAAe,CAAK;gBAEhB,MAAM,GAAE,SAAc;IAgBlC,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,iBAAiB;IAyBzB;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM;IAgBzC;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAazB,OAAO,CAAC,WAAW;IAcnB;;;;OAIG;IACH,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IA4BrC,OAAO,CAAE,cAAc;IAgCvB;;;;OAIG;IACH,eAAe,IAAI,MAAM;IA4CzB;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb,OAAO,CAAC,qBAAqB;CAkC9B;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAAE,GAAG,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,aAAa,CAE9E"}
package/dist/wal.js CHANGED
@@ -96,7 +96,8 @@ class WriteAheadLog {
96
96
  if (this.currentFilePath === null) {
97
97
  const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
98
98
  const serviceName = process.env.MONORA_SERVICE_NAME || 'monora';
99
- this.currentFilePath = path.join(this.config.path, `${serviceName}_${timestamp}.wal`);
99
+ const uniqueSuffix = `${process.pid}_${process.hrtime.bigint().toString()}`;
100
+ this.currentFilePath = path.join(this.config.path, `${serviceName}_${timestamp}_${uniqueSuffix}.wal`);
100
101
  }
101
102
  return this.currentFilePath;
102
103
  }
package/package.json CHANGED
@@ -1,9 +1,21 @@
1
1
  {
2
2
  "name": "monora-ai",
3
- "version": "2.1.0",
3
+ "version": "2.1.4",
4
4
  "description": "Lightweight governance and trace SDK for AI systems",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "require": "./dist/index.js",
11
+ "import": "./dist/index.js"
12
+ },
13
+ "./register": {
14
+ "types": "./dist/register.d.ts",
15
+ "require": "./dist/register.js",
16
+ "import": "./dist/register.js"
17
+ }
18
+ },
7
19
  "bin": {
8
20
  "monora": "dist/cli.js"
9
21
  },
@@ -54,6 +66,7 @@
54
66
  "ajv": "^8.12.0",
55
67
  "axios": "^1.7.9",
56
68
  "js-yaml": "^4.1.1",
69
+ "minimatch": "^9.0.0",
57
70
  "zod": "^3.23.0"
58
71
  }
59
72
  }