@aduek/ne-sy 0.1.0-alpha.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.
@@ -0,0 +1,175 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { isRecord } from "./utils.js";
3
+ const SUPPORTED_OUTCOME_TYPES = new Set([
4
+ "resolved_conversation",
5
+ "qualified_lead_recommended",
6
+ "workflow_completed",
7
+ ]);
8
+ const REQUIRED_EVENT_FIELDS = [
9
+ "id",
10
+ "portalId",
11
+ "appId",
12
+ "agentId",
13
+ "outcomeType",
14
+ "idempotencyKey",
15
+ "occurredAt",
16
+ ];
17
+ export function loadHubSpotOutcomeEvents(path) {
18
+ const payload = JSON.parse(readFileSync(path, "utf8"));
19
+ if (!Array.isArray(payload)) {
20
+ throw new Error("HubSpot outcome fixture must be a JSON array");
21
+ }
22
+ return payload;
23
+ }
24
+ export function classifyHubSpotOutcomes(events) {
25
+ const seen = new Map();
26
+ const records = [];
27
+ for (const event of events) {
28
+ const record = classifyEvent(event, seen);
29
+ records.push(record);
30
+ if (record.idempotencyKey !== null && record.rejectionReason !== "duplicate_idempotency_key") {
31
+ seen.set(record.idempotencyKey, record);
32
+ }
33
+ }
34
+ return { records, summary: summarizeHubSpotOutcomes(records) };
35
+ }
36
+ export function summarizeHubSpotOutcomes(records) {
37
+ const recordList = Array.from(records);
38
+ return {
39
+ totalRecords: recordList.length,
40
+ billableRecords: recordList.filter((record) => record.billable).length,
41
+ exportEligibleRecords: recordList.filter((record) => record.exportEligible).length,
42
+ byLifecycleState: count(recordList, (record) => record.lifecycleState),
43
+ byOutcomeType: count(recordList, (record) => record.outcomeType),
44
+ byRejectionReason: count(recordList, (record) => record.rejectionReason),
45
+ };
46
+ }
47
+ export function exportHubSpotCreditsRows(records) {
48
+ return Array.from(records)
49
+ .filter((record) => record.exportEligible)
50
+ .map((record) => ({
51
+ portalId: record.portalId,
52
+ appId: record.appId,
53
+ outcomeType: record.outcomeType,
54
+ idempotencyKey: record.idempotencyKey,
55
+ lifecycleState: record.lifecycleState,
56
+ quantity: record.adjustmentQuantity,
57
+ sourceEventId: record.eventId,
58
+ reversalOf: record.reversalOf,
59
+ occurredAt: record.occurredAt,
60
+ }));
61
+ }
62
+ export function exportHubSpotInvoiceLineRows(records) {
63
+ return Array.from(records)
64
+ .filter((record) => record.exportEligible)
65
+ .map((record) => {
66
+ const direction = record.adjustmentQuantity < 0 ? "adjustment" : "outcome";
67
+ return {
68
+ portalId: record.portalId,
69
+ appId: record.appId,
70
+ agentId: record.agentId,
71
+ outcomeType: record.outcomeType,
72
+ idempotencyKey: record.idempotencyKey,
73
+ quantity: record.adjustmentQuantity,
74
+ description: `HubSpot-shaped ${direction}: ${record.outcomeType}`,
75
+ sourceEventId: record.eventId,
76
+ reversalOf: record.reversalOf,
77
+ occurredAt: record.occurredAt,
78
+ };
79
+ });
80
+ }
81
+ function classifyEvent(event, seen) {
82
+ const base = baseFields(event);
83
+ if (!isRecord(event) || REQUIRED_EVENT_FIELDS.some((field) => stringOrNull(event[field]) === null)) {
84
+ return makeRecord(base, "rejected", false, false, 0, "malformed_event");
85
+ }
86
+ if (!SUPPORTED_OUTCOME_TYPES.has(base.outcomeType ?? "")) {
87
+ return makeRecord(base, "rejected", false, false, 0, "unsupported_outcome_type");
88
+ }
89
+ if (base.idempotencyKey !== null && seen.has(base.idempotencyKey)) {
90
+ return makeRecord(base, "rejected", false, false, 0, "duplicate_idempotency_key");
91
+ }
92
+ const reversalOf = stringOrNull(event.reversalOf);
93
+ if (reversalOf !== null) {
94
+ const target = seen.get(reversalOf);
95
+ if (target === undefined || !["verified", "exported"].includes(target.lifecycleState)) {
96
+ return makeRecord(base, "rejected", false, false, 0, "unknown_reversal_target");
97
+ }
98
+ return makeRecord(base, "reversed", false, true, -1, null);
99
+ }
100
+ if (event.lifecycleState === "candidate") {
101
+ return makeRecord(base, "candidate", false, false, 0, null);
102
+ }
103
+ const issue = evidenceIssue(event);
104
+ if (issue !== null) {
105
+ return makeRecord(base, "rejected", false, false, 0, issue);
106
+ }
107
+ const lifecycleState = event.lifecycleState === "exported" || stringOrNull(event.exportedAt) !== null
108
+ ? "exported"
109
+ : "verified";
110
+ return makeRecord(base, lifecycleState, true, true, 1, null);
111
+ }
112
+ function baseFields(event) {
113
+ return {
114
+ eventId: stringOrNull(isRecord(event) ? event.id : undefined),
115
+ portalId: stringOrNull(isRecord(event) ? event.portalId : undefined),
116
+ appId: stringOrNull(isRecord(event) ? event.appId : undefined),
117
+ agentId: stringOrNull(isRecord(event) ? event.agentId : undefined),
118
+ outcomeType: stringOrNull(isRecord(event) ? event.outcomeType : undefined),
119
+ idempotencyKey: stringOrNull(isRecord(event) ? event.idempotencyKey : undefined),
120
+ reversalOf: stringOrNull(isRecord(event) ? event.reversalOf : undefined),
121
+ occurredAt: stringOrNull(isRecord(event) ? event.occurredAt : undefined),
122
+ };
123
+ }
124
+ function makeRecord(base, lifecycleState, billable, exportEligible, adjustmentQuantity, rejectionReason) {
125
+ return {
126
+ ...base,
127
+ lifecycleState,
128
+ billable,
129
+ exportEligible,
130
+ adjustmentQuantity,
131
+ rejectionReason,
132
+ };
133
+ }
134
+ function evidenceIssue(event) {
135
+ if (!isRecord(event.evidence))
136
+ return "missing_required_evidence";
137
+ if (event.outcomeType === "resolved_conversation") {
138
+ if (event.evidence.humanEscalated === true)
139
+ return "human_escalation";
140
+ if (event.evidence.reopened === true)
141
+ return "reopened_conversation";
142
+ if (event.evidence.resolutionStatus !== "resolved" || stringOrNull(event.evidence.conversationId) === null) {
143
+ return "missing_required_evidence";
144
+ }
145
+ return null;
146
+ }
147
+ if (event.outcomeType === "qualified_lead_recommended") {
148
+ if (event.evidence.qualified !== true)
149
+ return "missing_required_evidence";
150
+ if (stringOrNull(event.evidence.contactId) === null || stringOrNull(event.evidence.companyId) === null) {
151
+ return "missing_required_evidence";
152
+ }
153
+ return null;
154
+ }
155
+ if (event.outcomeType === "workflow_completed") {
156
+ if (event.evidence.completed !== true)
157
+ return "missing_required_evidence";
158
+ if (stringOrNull(event.evidence.workflowId) === null || stringOrNull(event.evidence.actionId) === null) {
159
+ return "missing_required_evidence";
160
+ }
161
+ return null;
162
+ }
163
+ return "unsupported_outcome_type";
164
+ }
165
+ function count(records, keyFn) {
166
+ const counts = {};
167
+ for (const record of records) {
168
+ const key = keyFn(record) ?? "<none>";
169
+ counts[key] = (counts[key] ?? 0) + 1;
170
+ }
171
+ return Object.fromEntries(Object.entries(counts).sort(([left], [right]) => left.localeCompare(right)));
172
+ }
173
+ function stringOrNull(value) {
174
+ return typeof value === "string" && value.length > 0 ? value : null;
175
+ }
@@ -0,0 +1,17 @@
1
+ export { createToolAction, type ToolActionInput, } from "./adapters.js";
2
+ export { assertValidAuditEvent, createAuditEvent, validateAuditEvent, writeAuditEvent, } from "./audit.js";
3
+ export { EVIDENCE_HASH_ALGORITHM, VERIFIER_VERSION, canonicalEvidenceJson, hashAction, hashAuditEvidence, hashEnvelope, hashEvidenceValue, } from "./evidence.js";
4
+ export { POLICY_IR_HASH_ALGORITHM, analyzePolicyIr, canonicalPolicyIrJson, checkPolicyProperty, conditionSignature, hashPolicyIr, normalizePolicyPack, simulatePolicyIr, } from "./ir.js";
5
+ export { classifyHubSpotOutcomes, exportHubSpotCreditsRows, exportHubSpotInvoiceLineRows, loadHubSpotOutcomeEvents, summarizeHubSpotOutcomes, } from "./hubspot.js";
6
+ export type { HubSpotCreditsRow, HubSpotInvoiceLineRow, HubSpotLifecycleState, HubSpotOutcomeLedger, HubSpotOutcomeRecord, HubSpotOutcomeSummary, HubSpotOutcomeType, HubSpotRejectionReason, } from "./hubspot.js";
7
+ export type { ConditionIr, PolicySimulationCounterexample, PolicySimulationDecision, PolicySimulationResult, PolicySimulationSpec, PolicyIr, PolicyIrValueType, PolicyPackIr, PolicyPropertyResult, } from "./ir.js";
8
+ export { POLICY_HASH_ALGORITHM, analyzePolicies, assertValidPolicyPack, canonicalPolicyJson, hashPolicyPack, validatePolicyPack, } from "./policy.js";
9
+ export { loadOutcomeConfig, meterAuditEvents, meterAuditEventsJsonl, meterAuditJsonl, summarizeUsageRecords, } from "./metering.js";
10
+ export type { BillableCategory, ExclusionReason, HashValidationMode, MeteringResult, MeteringSummary, OutcomeMeteringConfig, UsageRecord, } from "./metering.js";
11
+ export { createOpenAiToolAction, runOpenAiToolInputGuardrail, } from "./openaiAgents.js";
12
+ export type { OpenAiGuardrailBehavior, OpenAiToolActionInput, OpenAiToolInputGuardrailInput, OpenAiToolInputGuardrailResult, } from "./openaiAgents.js";
13
+ export { AduekError, DECISION_RANK, ERROR_CATEGORIES, PolicyEvaluationError, errorCategoryForCode, isDecisionValue, } from "./types.js";
14
+ export { ACTION_SCHEMA, AUDIT_EVENT_SCHEMA, DECISION_SCHEMA, POLICY_SCHEMA, SDK_SCHEMAS, validateAuditEventSchema, validatePolicyPackSchema, } from "./validation.js";
15
+ export { verifyAction, verifyActionWithEvent, withAduek, } from "./verifier.js";
16
+ export type { AuditEvent, Condition, ConditionTree, Decision, DecisionValue, ErrorCategory, ExecutionOutcome, FindingSeverity, Policy, PolicyAnalysis, PolicyFinding, PolicyInput, PolicyOperator, PolicyPack, VerificationResult, VerifyActionInput, } from "./types.js";
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,EAC5B,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,WAAW,EACX,8BAA8B,EAC9B,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,EACpB,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACZ,oBAAoB,GACrB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,qBAAqB,GACtB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,WAAW,GACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,uBAAuB,EACvB,qBAAqB,EACrB,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,WAAW,EACX,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,SAAS,GACV,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,UAAU,EACV,SAAS,EACT,aAAa,EACb,QAAQ,EACR,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,MAAM,EACN,cAAc,EACd,aAAa,EACb,WAAW,EACX,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ export { createToolAction, } from "./adapters.js";
2
+ export { assertValidAuditEvent, createAuditEvent, validateAuditEvent, writeAuditEvent, } from "./audit.js";
3
+ export { EVIDENCE_HASH_ALGORITHM, VERIFIER_VERSION, canonicalEvidenceJson, hashAction, hashAuditEvidence, hashEnvelope, hashEvidenceValue, } from "./evidence.js";
4
+ export { POLICY_IR_HASH_ALGORITHM, analyzePolicyIr, canonicalPolicyIrJson, checkPolicyProperty, conditionSignature, hashPolicyIr, normalizePolicyPack, simulatePolicyIr, } from "./ir.js";
5
+ export { classifyHubSpotOutcomes, exportHubSpotCreditsRows, exportHubSpotInvoiceLineRows, loadHubSpotOutcomeEvents, summarizeHubSpotOutcomes, } from "./hubspot.js";
6
+ export { POLICY_HASH_ALGORITHM, analyzePolicies, assertValidPolicyPack, canonicalPolicyJson, hashPolicyPack, validatePolicyPack, } from "./policy.js";
7
+ export { loadOutcomeConfig, meterAuditEvents, meterAuditEventsJsonl, meterAuditJsonl, summarizeUsageRecords, } from "./metering.js";
8
+ export { createOpenAiToolAction, runOpenAiToolInputGuardrail, } from "./openaiAgents.js";
9
+ export { AduekError, DECISION_RANK, ERROR_CATEGORIES, PolicyEvaluationError, errorCategoryForCode, isDecisionValue, } from "./types.js";
10
+ export { ACTION_SCHEMA, AUDIT_EVENT_SCHEMA, DECISION_SCHEMA, POLICY_SCHEMA, SDK_SCHEMAS, validateAuditEventSchema, validatePolicyPackSchema, } from "./validation.js";
11
+ export { verifyAction, verifyActionWithEvent, withAduek, } from "./verifier.js";
package/dist/ir.d.ts ADDED
@@ -0,0 +1,104 @@
1
+ import { type PolicyFinding, type PolicyInput } from "./types.js";
2
+ export declare const POLICY_IR_HASH_ALGORITHM = "sha256";
3
+ export declare const ANALYSIS_SEMANTIC_TRACE_VERSION = "analysis-semantics.v0";
4
+ export type PolicyIrValueType = "unknown" | "string" | "number" | "boolean" | "enum" | "object";
5
+ export interface PolicyPackIr {
6
+ kind: "PolicyPack";
7
+ id?: string | null;
8
+ version?: string | null;
9
+ defaultDecision: string;
10
+ defaultReason: string;
11
+ policies: PolicyIr[];
12
+ }
13
+ export interface PolicyIr {
14
+ kind: "Policy";
15
+ index: number;
16
+ id: string;
17
+ name?: string;
18
+ description?: string;
19
+ effect: string;
20
+ reason: string;
21
+ condition: ConditionIr;
22
+ metadata: Record<string, unknown>;
23
+ }
24
+ export type ConditionIr = {
25
+ kind: "all";
26
+ children: ConditionIr[];
27
+ } | {
28
+ kind: "any";
29
+ children: ConditionIr[];
30
+ } | {
31
+ kind: "condition";
32
+ field: string;
33
+ operator: string;
34
+ value: unknown;
35
+ valueType: PolicyIrValueType;
36
+ } | {
37
+ kind: "invalid";
38
+ error: string;
39
+ group?: string;
40
+ };
41
+ export interface PolicyPropertyResult {
42
+ result: "pass" | "fail" | "unknown";
43
+ reason: string;
44
+ policyIds: string[];
45
+ errorCategory?: "simulation_unknown";
46
+ errorCode?: string;
47
+ }
48
+ export interface PolicySimulationSpec {
49
+ property: Record<string, unknown>;
50
+ domains: Record<string, unknown[]>;
51
+ capabilities?: unknown;
52
+ fieldRegistry?: Record<string, unknown>;
53
+ baseAgent?: unknown;
54
+ baseAction?: unknown;
55
+ baseContext?: unknown;
56
+ maxSamples?: number;
57
+ counterexampleLimit?: number;
58
+ }
59
+ export interface PolicySimulationDecision {
60
+ decision: string;
61
+ reason: string;
62
+ matchedPolicyIds: string[];
63
+ metadata: Record<string, unknown>;
64
+ }
65
+ export interface PolicySemanticTrace {
66
+ semanticTraceVersion: typeof ANALYSIS_SEMANTIC_TRACE_VERSION;
67
+ result: "evaluated" | "unknown";
68
+ decision: string;
69
+ reason: string;
70
+ matchedPolicyIds: string[];
71
+ selectedPolicyId: string | null;
72
+ selectedMetadata: Record<string, unknown>;
73
+ enforcementSource: string;
74
+ unknownCategory?: "simulation_unknown";
75
+ unknownCode?: string;
76
+ metadata: Record<string, unknown>;
77
+ }
78
+ export interface PolicySimulationCounterexample {
79
+ sampleIndex: number;
80
+ action: unknown;
81
+ context: unknown;
82
+ decision: PolicySimulationDecision;
83
+ reason?: string;
84
+ }
85
+ export interface PolicySimulationResult {
86
+ result: "pass" | "fail" | "unknown";
87
+ reason: string;
88
+ errorCategory?: "simulation_unknown";
89
+ errorCode?: string;
90
+ policyIds: string[];
91
+ checkedSamples: number;
92
+ matchingSamples: number;
93
+ decisionCounts: Record<"allow" | "log" | "review" | "deny" | "unknown", number>;
94
+ counterexamples: PolicySimulationCounterexample[];
95
+ }
96
+ export declare function normalizePolicyPack(policyInput: PolicyInput | unknown): PolicyPackIr;
97
+ export declare function analyzePolicyIr(policyIr: PolicyPackIr): PolicyFinding[];
98
+ export declare function canonicalPolicyIrJson(policyIr: PolicyPackIr): string;
99
+ export declare function hashPolicyIr(policyIr: PolicyPackIr): string;
100
+ export declare function conditionSignature(conditionIr: unknown): string;
101
+ export declare function checkPolicyProperty(policyIr: PolicyPackIr, propertySpec: Record<string, unknown>): PolicyPropertyResult;
102
+ export declare function simulatePolicyIr(policyIr: PolicyPackIr, simulationSpec: PolicySimulationSpec): PolicySimulationResult;
103
+ export declare function tracePolicyIrSemantics(policyIr: PolicyPackIr, scope: Record<string, unknown>): PolicySemanticTrace;
104
+ //# sourceMappingURL=ir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ir.d.ts","sourceRoot":"","sources":["../src/ir.ts"],"names":[],"mappings":"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"}