@thinkhive/sdk 2.0.1 → 3.0.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,76 @@
1
+ "use strict";
2
+ /**
3
+ * ThinkHive SDK v3.0 - Configuration
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DEFAULT_SERVICE_NAME = exports.DEFAULT_ENDPOINT = exports.SDK_VERSION = void 0;
7
+ exports.initConfig = initConfig;
8
+ exports.getConfig = getConfig;
9
+ exports.isInitialized = isInitialized;
10
+ exports.resetConfig = resetConfig;
11
+ exports.debugLog = debugLog;
12
+ // ============================================================================
13
+ // CONSTANTS
14
+ // ============================================================================
15
+ exports.SDK_VERSION = '3.0.0';
16
+ exports.DEFAULT_ENDPOINT = 'https://thinkhivemind-h25z7pvd3q-uc.a.run.app';
17
+ exports.DEFAULT_SERVICE_NAME = 'my-ai-agent';
18
+ let config = null;
19
+ let initialized = false;
20
+ // ============================================================================
21
+ // CONFIG FUNCTIONS
22
+ // ============================================================================
23
+ /**
24
+ * Initialize configuration from options
25
+ */
26
+ function initConfig(options = {}) {
27
+ const apiKey = options.apiKey || process.env.THINKHIVE_API_KEY || '';
28
+ const agentId = options.agentId || process.env.THINKHIVE_AGENT_ID || '';
29
+ if (!apiKey && !agentId) {
30
+ throw new Error('Either apiKey or agentId must be provided (or set THINKHIVE_API_KEY env var)');
31
+ }
32
+ config = {
33
+ apiKey,
34
+ agentId,
35
+ endpoint: options.endpoint || process.env.THINKHIVE_ENDPOINT || exports.DEFAULT_ENDPOINT,
36
+ serviceName: options.serviceName || process.env.THINKHIVE_SERVICE_NAME || exports.DEFAULT_SERVICE_NAME,
37
+ autoInstrument: options.autoInstrument ?? false,
38
+ frameworks: options.frameworks || ['langchain', 'openai'],
39
+ debug: options.debug ?? false,
40
+ apiVersion: options.apiVersion ?? 'v3',
41
+ };
42
+ initialized = true;
43
+ return config;
44
+ }
45
+ /**
46
+ * Get current configuration
47
+ * @throws if not initialized
48
+ */
49
+ function getConfig() {
50
+ if (!config || !initialized) {
51
+ throw new Error('ThinkHive SDK not initialized. Call init() first.');
52
+ }
53
+ return config;
54
+ }
55
+ /**
56
+ * Check if SDK is initialized
57
+ */
58
+ function isInitialized() {
59
+ return initialized;
60
+ }
61
+ /**
62
+ * Reset configuration (for testing)
63
+ */
64
+ function resetConfig() {
65
+ config = null;
66
+ initialized = false;
67
+ }
68
+ /**
69
+ * Debug log helper
70
+ */
71
+ function debugLog(...args) {
72
+ if (config?.debug) {
73
+ console.log('[ThinkHive]', ...args);
74
+ }
75
+ }
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBcUNILGdDQXVCQztBQU1ELDhCQUtDO0FBS0Qsc0NBRUM7QUFLRCxrQ0FHQztBQUtELDRCQUlDO0FBM0ZELCtFQUErRTtBQUMvRSxZQUFZO0FBQ1osK0VBQStFO0FBRWxFLFFBQUEsV0FBVyxHQUFHLE9BQU8sQ0FBQztBQUN0QixRQUFBLGdCQUFnQixHQUFHLCtDQUErQyxDQUFDO0FBQ25FLFFBQUEsb0JBQW9CLEdBQUcsYUFBYSxDQUFDO0FBaUJsRCxJQUFJLE1BQU0sR0FBMEIsSUFBSSxDQUFDO0FBQ3pDLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztBQUV4QiwrRUFBK0U7QUFDL0UsbUJBQW1CO0FBQ25CLCtFQUErRTtBQUUvRTs7R0FFRztBQUNILFNBQWdCLFVBQVUsQ0FBQyxVQUF1QixFQUFFO0lBQ2xELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUM7SUFDckUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBQztJQUV4RSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FDYiw4RUFBOEUsQ0FDL0UsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLEdBQUc7UUFDUCxNQUFNO1FBQ04sT0FBTztRQUNQLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLElBQUksd0JBQWdCO1FBQ2hGLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLElBQUksNEJBQW9CO1FBQzlGLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYyxJQUFJLEtBQUs7UUFDL0MsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDO1FBQ3pELEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxJQUFJLEtBQUs7UUFDN0IsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSTtLQUN2QyxDQUFDO0lBRUYsV0FBVyxHQUFHLElBQUksQ0FBQztJQUNuQixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsU0FBUztJQUN2QixJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixhQUFhO0lBQzNCLE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFdBQVc7SUFDekIsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNkLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDdEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsUUFBUSxDQUFDLEdBQUcsSUFBZTtJQUN6QyxJQUFJLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlua0hpdmUgU0RLIHYzLjAgLSBDb25maWd1cmF0aW9uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBJbml0T3B0aW9ucywgRnJhbWV3b3JrIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENPTlNUQU5UU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY29uc3QgU0RLX1ZFUlNJT04gPSAnMy4wLjAnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRU5EUE9JTlQgPSAnaHR0cHM6Ly90aGlua2hpdmVtaW5kLWgyNXo3cHZkM3EtdWMuYS5ydW4uYXBwJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX1NFUlZJQ0VfTkFNRSA9ICdteS1haS1hZ2VudCc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEdMT0JBTCBDT05GSUcgU1RBVEVcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZENvbmZpZyB7XG4gIGFwaUtleTogc3RyaW5nO1xuICBhZ2VudElkOiBzdHJpbmc7XG4gIGVuZHBvaW50OiBzdHJpbmc7XG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIGF1dG9JbnN0cnVtZW50OiBib29sZWFuO1xuICBmcmFtZXdvcmtzOiBGcmFtZXdvcmtbXTtcbiAgZGVidWc6IGJvb2xlYW47XG4gIGFwaVZlcnNpb246ICd2MScgfCAndjMnO1xufVxuXG5sZXQgY29uZmlnOiBSZXNvbHZlZENvbmZpZyB8IG51bGwgPSBudWxsO1xubGV0IGluaXRpYWxpemVkID0gZmFsc2U7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENPTkZJRyBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBJbml0aWFsaXplIGNvbmZpZ3VyYXRpb24gZnJvbSBvcHRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0Q29uZmlnKG9wdGlvbnM6IEluaXRPcHRpb25zID0ge30pOiBSZXNvbHZlZENvbmZpZyB7XG4gIGNvbnN0IGFwaUtleSA9IG9wdGlvbnMuYXBpS2V5IHx8IHByb2Nlc3MuZW52LlRISU5LSElWRV9BUElfS0VZIHx8ICcnO1xuICBjb25zdCBhZ2VudElkID0gb3B0aW9ucy5hZ2VudElkIHx8IHByb2Nlc3MuZW52LlRISU5LSElWRV9BR0VOVF9JRCB8fCAnJztcblxuICBpZiAoIWFwaUtleSAmJiAhYWdlbnRJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdFaXRoZXIgYXBpS2V5IG9yIGFnZW50SWQgbXVzdCBiZSBwcm92aWRlZCAob3Igc2V0IFRISU5LSElWRV9BUElfS0VZIGVudiB2YXIpJ1xuICAgICk7XG4gIH1cblxuICBjb25maWcgPSB7XG4gICAgYXBpS2V5LFxuICAgIGFnZW50SWQsXG4gICAgZW5kcG9pbnQ6IG9wdGlvbnMuZW5kcG9pbnQgfHwgcHJvY2Vzcy5lbnYuVEhJTktISVZFX0VORFBPSU5UIHx8IERFRkFVTFRfRU5EUE9JTlQsXG4gICAgc2VydmljZU5hbWU6IG9wdGlvbnMuc2VydmljZU5hbWUgfHwgcHJvY2Vzcy5lbnYuVEhJTktISVZFX1NFUlZJQ0VfTkFNRSB8fCBERUZBVUxUX1NFUlZJQ0VfTkFNRSxcbiAgICBhdXRvSW5zdHJ1bWVudDogb3B0aW9ucy5hdXRvSW5zdHJ1bWVudCA/PyBmYWxzZSxcbiAgICBmcmFtZXdvcmtzOiBvcHRpb25zLmZyYW1ld29ya3MgfHwgWydsYW5nY2hhaW4nLCAnb3BlbmFpJ10sXG4gICAgZGVidWc6IG9wdGlvbnMuZGVidWcgPz8gZmFsc2UsXG4gICAgYXBpVmVyc2lvbjogb3B0aW9ucy5hcGlWZXJzaW9uID8/ICd2MycsXG4gIH07XG5cbiAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICByZXR1cm4gY29uZmlnO1xufVxuXG4vKipcbiAqIEdldCBjdXJyZW50IGNvbmZpZ3VyYXRpb25cbiAqIEB0aHJvd3MgaWYgbm90IGluaXRpYWxpemVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWcoKTogUmVzb2x2ZWRDb25maWcge1xuICBpZiAoIWNvbmZpZyB8fCAhaW5pdGlhbGl6ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaW5rSGl2ZSBTREsgbm90IGluaXRpYWxpemVkLiBDYWxsIGluaXQoKSBmaXJzdC4nKTtcbiAgfVxuICByZXR1cm4gY29uZmlnO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIFNESyBpcyBpbml0aWFsaXplZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJbml0aWFsaXplZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGluaXRpYWxpemVkO1xufVxuXG4vKipcbiAqIFJlc2V0IGNvbmZpZ3VyYXRpb24gKGZvciB0ZXN0aW5nKVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRDb25maWcoKTogdm9pZCB7XG4gIGNvbmZpZyA9IG51bGw7XG4gIGluaXRpYWxpemVkID0gZmFsc2U7XG59XG5cbi8qKlxuICogRGVidWcgbG9nIGhlbHBlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVidWdMb2coLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gIGlmIChjb25maWc/LmRlYnVnKSB7XG4gICAgY29uc29sZS5sb2coJ1tUaGlua0hpdmVdJywgLi4uYXJncyk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,354 @@
1
+ /**
2
+ * ThinkHive SDK v3.0 - Core Types
3
+ *
4
+ * Run-centric types with facts vs inferences and customer context snapshots
5
+ */
6
+ export interface InitOptions {
7
+ /** ThinkHive API key (starts with th_) */
8
+ apiKey?: string;
9
+ /** Agent ID */
10
+ agentId?: string;
11
+ /** ThinkHive API endpoint */
12
+ endpoint?: string;
13
+ /** Service name for traces */
14
+ serviceName?: string;
15
+ /** Enable auto-instrumentation */
16
+ autoInstrument?: boolean;
17
+ /** Frameworks to auto-instrument */
18
+ frameworks?: Framework[];
19
+ /** Enable debug logging */
20
+ debug?: boolean;
21
+ /** API version (default: 'v3') */
22
+ apiVersion?: 'v1' | 'v3';
23
+ }
24
+ export type Framework = 'langchain' | 'langgraph' | 'openai' | 'openai-assistants' | 'anthropic' | 'llamaindex' | 'n8n' | 'voiceflow';
25
+ /**
26
+ * Options for creating a run (v3 atomic unit)
27
+ */
28
+ export interface RunOptions {
29
+ /** Agent ID */
30
+ agentId: string;
31
+ /** When the run started */
32
+ startedAt?: string | Date;
33
+ /** When the run ended */
34
+ endedAt?: string | Date;
35
+ /** Run outcome */
36
+ outcome?: RunOutcome;
37
+ /** Reason for the outcome */
38
+ outcomeReason?: string;
39
+ /** Conversation messages */
40
+ conversationMessages: ConversationMessage[];
41
+ /** Model ID used */
42
+ modelId?: string;
43
+ /** Prompt version */
44
+ promptVersion?: string;
45
+ /** Session ID for conversation tracking */
46
+ sessionId?: string;
47
+ /** Customer context snapshot (ARR, health AS OF this run) */
48
+ customerContext?: CustomerContextSnapshot;
49
+ /** Ticket linking options */
50
+ ticketLinking?: TicketLinkingOptions;
51
+ /** Custom metadata */
52
+ metadata?: Record<string, unknown>;
53
+ }
54
+ export type RunOutcome = 'resolved' | 'escalated' | 'abandoned' | 'failed' | 'transferred' | 'pending';
55
+ export interface ConversationMessage {
56
+ role: 'user' | 'assistant' | 'system' | 'tool';
57
+ content: string;
58
+ timestamp?: string;
59
+ metadata?: Record<string, unknown>;
60
+ }
61
+ /**
62
+ * Customer context captured AS OF the run time (not current values)
63
+ */
64
+ export interface CustomerContextSnapshot {
65
+ /** Customer account ID */
66
+ customerId?: string;
67
+ /** ARR at the time of the run (not current ARR) */
68
+ arr?: number;
69
+ /** Health score at the time of the run (0-100) */
70
+ healthScore?: number;
71
+ /** Customer segment (e.g., 'enterprise', 'mid-market', 'smb') */
72
+ segment?: string;
73
+ /** When this snapshot was captured */
74
+ capturedAt?: string;
75
+ /** Custom fields (will be validated against schema) */
76
+ customFields?: Record<string, unknown>;
77
+ }
78
+ /**
79
+ * Options for deterministic ticket linking
80
+ */
81
+ export interface TicketLinkingOptions {
82
+ /** Link method to use */
83
+ method: LinkMethod;
84
+ /** Ticket ID (for sdk_explicit method) */
85
+ ticketId?: string;
86
+ /** External ticket ID (e.g., Zendesk ticket ID) */
87
+ externalTicketId?: string;
88
+ /** Platform for external ticket */
89
+ platform?: 'zendesk' | 'intercom' | 'salesforce' | 'freshdesk';
90
+ /** Custom field name for linking */
91
+ customFieldName?: string;
92
+ /** Custom field value */
93
+ customFieldValue?: string;
94
+ }
95
+ export type LinkMethod = 'sdk_explicit' | 'zendesk_marker' | 'custom_field' | 'middleware_stamp' | 'session_match' | 'email_time_window' | 'manual';
96
+ /**
97
+ * Trace options (v2 format, converted to runs internally)
98
+ * @deprecated Use RunOptions instead
99
+ */
100
+ export interface TraceOptions {
101
+ /** User's message/query */
102
+ userMessage: string;
103
+ /** Agent's response */
104
+ agentResponse: string;
105
+ /** User's detected intent */
106
+ userIntent?: string;
107
+ /** Outcome: success, failure, partial_success */
108
+ outcome?: 'success' | 'failure' | 'partial_success';
109
+ /** Duration in milliseconds */
110
+ duration?: number;
111
+ /** Session ID for conversation tracking */
112
+ sessionId?: string;
113
+ /** Conversation history */
114
+ conversationHistory?: Array<{
115
+ role: string;
116
+ content: string;
117
+ }>;
118
+ /** Span data for detailed analysis */
119
+ spans?: SpanData[];
120
+ /** Business context for ROI calculation */
121
+ businessContext?: BusinessContext;
122
+ /** Custom metadata */
123
+ metadata?: Record<string, unknown>;
124
+ }
125
+ export interface SpanData {
126
+ id?: string;
127
+ name: string;
128
+ type: 'llm' | 'tool' | 'retrieval' | 'embedding' | 'chain' | 'custom';
129
+ startTime?: Date;
130
+ endTime?: Date;
131
+ durationMs?: number;
132
+ status?: 'ok' | 'error' | 'timeout';
133
+ error?: string;
134
+ input?: unknown;
135
+ output?: unknown;
136
+ model?: string;
137
+ provider?: string;
138
+ promptTokens?: number;
139
+ completionTokens?: number;
140
+ toolName?: string;
141
+ toolParameters?: Record<string, unknown>;
142
+ query?: string;
143
+ documentCount?: number;
144
+ topScore?: number;
145
+ sources?: string[];
146
+ children?: SpanData[];
147
+ }
148
+ /**
149
+ * @deprecated Use CustomerContextSnapshot instead
150
+ */
151
+ export interface BusinessContext {
152
+ /** Customer ID */
153
+ customerId?: string;
154
+ /** Transaction value in dollars */
155
+ transactionValue?: number;
156
+ /** Priority level */
157
+ priority?: 'low' | 'medium' | 'high' | 'critical';
158
+ /** Department */
159
+ department?: string;
160
+ /** Industry vertical */
161
+ industry?: string;
162
+ /** Custom fields */
163
+ custom?: Record<string, unknown>;
164
+ }
165
+ /**
166
+ * A claim about a run (fact vs inference)
167
+ */
168
+ export interface Claim {
169
+ id: string;
170
+ analysisId: string;
171
+ /** Type of claim */
172
+ claimType: ClaimType;
173
+ /** Category of the claim */
174
+ claimCategory: ClaimCategory;
175
+ /** The claim text */
176
+ claimText: string;
177
+ /** Confidence in this claim (0-1) */
178
+ confidence: number;
179
+ /** How well calibrated is this confidence */
180
+ confidenceCalibration: ConfidenceCalibration;
181
+ /** Evidence supporting this claim */
182
+ evidence: EvidenceReference[];
183
+ /** Is this claim explainable to end users */
184
+ isExplainable: boolean;
185
+ /** Probability value for probability claims */
186
+ probabilityValue?: number;
187
+ /** Human-assigned verification status */
188
+ humanVerified?: boolean;
189
+ /** Human verification verdict */
190
+ humanVerdict?: 'confirmed' | 'rejected' | 'modified';
191
+ createdAt?: string;
192
+ }
193
+ export type ClaimType = 'observed' | 'inferred' | 'computed';
194
+ export type ClaimCategory = 'outcome' | 'root_cause' | 'customer_impact' | 'churn_risk' | 'revenue_impact' | 'quality' | 'other';
195
+ export type ConfidenceCalibration = 'calibrated' | 'uncalibrated' | 'needs_more_data';
196
+ export interface EvidenceReference {
197
+ /** Type of evidence */
198
+ type: 'span' | 'message' | 'tool_call' | 'external' | 'computed';
199
+ /** ID of the referenced item */
200
+ referenceId: string;
201
+ /** How relevant is this evidence */
202
+ relevance: string;
203
+ /** Confidence in this evidence */
204
+ confidence: number;
205
+ }
206
+ export interface AnalysisResult {
207
+ id: string;
208
+ runId: string;
209
+ analysisVersion: string;
210
+ modelUsed: string;
211
+ /** Overall outcome verdict */
212
+ outcomeVerdict: 'success' | 'partial_success' | 'failure';
213
+ /** Confidence in the verdict (0-1) */
214
+ outcomeConfidence: number;
215
+ /** Root cause category if failure */
216
+ rootCauseCategory?: string;
217
+ /** Confidence in root cause (0-1) */
218
+ rootCauseConfidence?: number;
219
+ /** Is this the current analysis */
220
+ isCurrent: boolean;
221
+ /** ID of analysis that superseded this one */
222
+ supersededBy?: string;
223
+ /** Claims from this analysis */
224
+ claims: Claim[];
225
+ analyzedAt?: string;
226
+ createdAt?: string;
227
+ }
228
+ export interface CalibrationStatus {
229
+ agentId: string;
230
+ predictionType: PredictionType;
231
+ /** Brier score (lower is better, <0.1 is good) */
232
+ brierScore: number;
233
+ /** Expected Calibration Error */
234
+ ece: number;
235
+ /** Sample count */
236
+ sampleCount: number;
237
+ /** Is the model well-calibrated */
238
+ isCalibrated: boolean;
239
+ /** Calibration by confidence bucket */
240
+ buckets: CalibrationBucket[];
241
+ lastUpdated?: string;
242
+ }
243
+ export type PredictionType = 'outcome' | 'churn_risk' | 'escalation_risk' | 'resolution_time' | 'customer_satisfaction';
244
+ export interface CalibrationBucket {
245
+ bucketStart: number;
246
+ bucketEnd: number;
247
+ predictedProbability: number;
248
+ actualFrequency: number;
249
+ sampleCount: number;
250
+ }
251
+ export interface RoiConfig {
252
+ /** Cost per support ticket deflected */
253
+ ticketDeflectionValue: number;
254
+ /** Cost per escalation */
255
+ escalationCost: number;
256
+ /** Cost per hour of agent time */
257
+ agentHourlyCost: number;
258
+ /** Average resolution time (minutes) */
259
+ avgResolutionMinutes: number;
260
+ /** CSAT impact multiplier */
261
+ csatImpactMultiplier: number;
262
+ }
263
+ export interface RoiSummary {
264
+ period: {
265
+ from: string;
266
+ to: string;
267
+ };
268
+ /** Total estimated savings */
269
+ totalSavings: number;
270
+ /** Breakdown by category */
271
+ breakdown: {
272
+ ticketDeflection: number;
273
+ escalationPrevention: number;
274
+ timeToResolution: number;
275
+ churnPrevention: number;
276
+ };
277
+ /** Confidence in these estimates */
278
+ confidence: 'low' | 'medium' | 'high';
279
+ /** Methodology used */
280
+ methodology: string;
281
+ }
282
+ /**
283
+ * @deprecated Use AnalysisResult instead
284
+ */
285
+ export interface ExplainabilityResult {
286
+ traceId: string;
287
+ explainabilityId: string;
288
+ summary: string;
289
+ outcome: {
290
+ verdict: 'success' | 'partial_success' | 'failure';
291
+ confidence: number;
292
+ reasoning: string;
293
+ };
294
+ businessImpact: {
295
+ impactScore: number;
296
+ customerSatisfaction: number;
297
+ revenueRisk: string;
298
+ };
299
+ recommendations: Array<{
300
+ priority: string;
301
+ category: string;
302
+ action: string;
303
+ expectedImpact: string;
304
+ }>;
305
+ ragEvaluation?: {
306
+ groundedness: number;
307
+ faithfulness: number;
308
+ answerRelevance: number;
309
+ };
310
+ hallucinationReport?: {
311
+ detected: boolean;
312
+ types: string[];
313
+ severity: string;
314
+ };
315
+ processingTimeMs: number;
316
+ }
317
+ export interface ApiResponse<T> {
318
+ success: boolean;
319
+ data?: T;
320
+ error?: {
321
+ code: string;
322
+ message: string;
323
+ details?: unknown;
324
+ };
325
+ }
326
+ export interface PaginatedResponse<T> {
327
+ success: boolean;
328
+ data: {
329
+ items: T[];
330
+ limit: number;
331
+ offset: number;
332
+ hasMore: boolean;
333
+ };
334
+ }
335
+ export interface RunResponse {
336
+ id: string;
337
+ companyId: string;
338
+ agentId: string;
339
+ ticketId?: string;
340
+ customerAccountId?: string;
341
+ sessionId?: string;
342
+ startedAt: string;
343
+ endedAt?: string;
344
+ durationMs?: number;
345
+ outcome?: RunOutcome;
346
+ outcomeReason?: string;
347
+ conversationMessages: ConversationMessage[];
348
+ modelId?: string;
349
+ promptVersion?: string;
350
+ customerContextSnapshot?: CustomerContextSnapshot;
351
+ zendeskMarker?: string;
352
+ createdAt: string;
353
+ updatedAt: string;
354
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ /**
3
+ * ThinkHive SDK v3.0 - Core Types
4
+ *
5
+ * Run-centric types with facts vs inferences and customer context snapshots
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29yZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpbmtIaXZlIFNESyB2My4wIC0gQ29yZSBUeXBlc1xuICpcbiAqIFJ1bi1jZW50cmljIHR5cGVzIHdpdGggZmFjdHMgdnMgaW5mZXJlbmNlcyBhbmQgY3VzdG9tZXIgY29udGV4dCBzbmFwc2hvdHNcbiAqL1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBJTklUIE9QVElPTlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBJbml0T3B0aW9ucyB7XG4gIC8qKiBUaGlua0hpdmUgQVBJIGtleSAoc3RhcnRzIHdpdGggdGhfKSAqL1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIC8qKiBBZ2VudCBJRCAqL1xuICBhZ2VudElkPzogc3RyaW5nO1xuICAvKiogVGhpbmtIaXZlIEFQSSBlbmRwb2ludCAqL1xuICBlbmRwb2ludD86IHN0cmluZztcbiAgLyoqIFNlcnZpY2UgbmFtZSBmb3IgdHJhY2VzICovXG4gIHNlcnZpY2VOYW1lPzogc3RyaW5nO1xuICAvKiogRW5hYmxlIGF1dG8taW5zdHJ1bWVudGF0aW9uICovXG4gIGF1dG9JbnN0cnVtZW50PzogYm9vbGVhbjtcbiAgLyoqIEZyYW1ld29ya3MgdG8gYXV0by1pbnN0cnVtZW50ICovXG4gIGZyYW1ld29ya3M/OiBGcmFtZXdvcmtbXTtcbiAgLyoqIEVuYWJsZSBkZWJ1ZyBsb2dnaW5nICovXG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgLyoqIEFQSSB2ZXJzaW9uIChkZWZhdWx0OiAndjMnKSAqL1xuICBhcGlWZXJzaW9uPzogJ3YxJyB8ICd2Myc7XG59XG5cbmV4cG9ydCB0eXBlIEZyYW1ld29yayA9XG4gIHwgJ2xhbmdjaGFpbidcbiAgfCAnbGFuZ2dyYXBoJ1xuICB8ICdvcGVuYWknXG4gIHwgJ29wZW5haS1hc3Npc3RhbnRzJ1xuICB8ICdhbnRocm9waWMnXG4gIHwgJ2xsYW1haW5kZXgnXG4gIHwgJ244bidcbiAgfCAndm9pY2VmbG93JztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUlVOIE9QVElPTlMgKHYzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNyZWF0aW5nIGEgcnVuICh2MyBhdG9taWMgdW5pdClcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5PcHRpb25zIHtcbiAgLyoqIEFnZW50IElEICovXG4gIGFnZW50SWQ6IHN0cmluZztcbiAgLyoqIFdoZW4gdGhlIHJ1biBzdGFydGVkICovXG4gIHN0YXJ0ZWRBdD86IHN0cmluZyB8IERhdGU7XG4gIC8qKiBXaGVuIHRoZSBydW4gZW5kZWQgKi9cbiAgZW5kZWRBdD86IHN0cmluZyB8IERhdGU7XG4gIC8qKiBSdW4gb3V0Y29tZSAqL1xuICBvdXRjb21lPzogUnVuT3V0Y29tZTtcbiAgLyoqIFJlYXNvbiBmb3IgdGhlIG91dGNvbWUgKi9cbiAgb3V0Y29tZVJlYXNvbj86IHN0cmluZztcbiAgLyoqIENvbnZlcnNhdGlvbiBtZXNzYWdlcyAqL1xuICBjb252ZXJzYXRpb25NZXNzYWdlczogQ29udmVyc2F0aW9uTWVzc2FnZVtdO1xuICAvKiogTW9kZWwgSUQgdXNlZCAqL1xuICBtb2RlbElkPzogc3RyaW5nO1xuICAvKiogUHJvbXB0IHZlcnNpb24gKi9cbiAgcHJvbXB0VmVyc2lvbj86IHN0cmluZztcbiAgLyoqIFNlc3Npb24gSUQgZm9yIGNvbnZlcnNhdGlvbiB0cmFja2luZyAqL1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIC8qKiBDdXN0b21lciBjb250ZXh0IHNuYXBzaG90IChBUlIsIGhlYWx0aCBBUyBPRiB0aGlzIHJ1bikgKi9cbiAgY3VzdG9tZXJDb250ZXh0PzogQ3VzdG9tZXJDb250ZXh0U25hcHNob3Q7XG4gIC8qKiBUaWNrZXQgbGlua2luZyBvcHRpb25zICovXG4gIHRpY2tldExpbmtpbmc/OiBUaWNrZXRMaW5raW5nT3B0aW9ucztcbiAgLyoqIEN1c3RvbSBtZXRhZGF0YSAqL1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5leHBvcnQgdHlwZSBSdW5PdXRjb21lID1cbiAgfCAncmVzb2x2ZWQnXG4gIHwgJ2VzY2FsYXRlZCdcbiAgfCAnYWJhbmRvbmVkJ1xuICB8ICdmYWlsZWQnXG4gIHwgJ3RyYW5zZmVycmVkJ1xuICB8ICdwZW5kaW5nJztcblxuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzYXRpb25NZXNzYWdlIHtcbiAgcm9sZTogJ3VzZXInIHwgJ2Fzc2lzdGFudCcgfCAnc3lzdGVtJyB8ICd0b29sJztcbiAgY29udGVudDogc3RyaW5nO1xuICB0aW1lc3RhbXA/OiBzdHJpbmc7XG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENVU1RPTUVSIENPTlRFWFQgU05BUFNIT1QgKHYzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEN1c3RvbWVyIGNvbnRleHQgY2FwdHVyZWQgQVMgT0YgdGhlIHJ1biB0aW1lIChub3QgY3VycmVudCB2YWx1ZXMpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tZXJDb250ZXh0U25hcHNob3Qge1xuICAvKiogQ3VzdG9tZXIgYWNjb3VudCBJRCAqL1xuICBjdXN0b21lcklkPzogc3RyaW5nO1xuICAvKiogQVJSIGF0IHRoZSB0aW1lIG9mIHRoZSBydW4gKG5vdCBjdXJyZW50IEFSUikgKi9cbiAgYXJyPzogbnVtYmVyO1xuICAvKiogSGVhbHRoIHNjb3JlIGF0IHRoZSB0aW1lIG9mIHRoZSBydW4gKDAtMTAwKSAqL1xuICBoZWFsdGhTY29yZT86IG51bWJlcjtcbiAgLyoqIEN1c3RvbWVyIHNlZ21lbnQgKGUuZy4sICdlbnRlcnByaXNlJywgJ21pZC1tYXJrZXQnLCAnc21iJykgKi9cbiAgc2VnbWVudD86IHN0cmluZztcbiAgLyoqIFdoZW4gdGhpcyBzbmFwc2hvdCB3YXMgY2FwdHVyZWQgKi9cbiAgY2FwdHVyZWRBdD86IHN0cmluZztcbiAgLyoqIEN1c3RvbSBmaWVsZHMgKHdpbGwgYmUgdmFsaWRhdGVkIGFnYWluc3Qgc2NoZW1hKSAqL1xuICBjdXN0b21GaWVsZHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVElDS0VUIExJTktJTkcgKHYzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGRldGVybWluaXN0aWMgdGlja2V0IGxpbmtpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaWNrZXRMaW5raW5nT3B0aW9ucyB7XG4gIC8qKiBMaW5rIG1ldGhvZCB0byB1c2UgKi9cbiAgbWV0aG9kOiBMaW5rTWV0aG9kO1xuICAvKiogVGlja2V0IElEIChmb3Igc2RrX2V4cGxpY2l0IG1ldGhvZCkgKi9cbiAgdGlja2V0SWQ/OiBzdHJpbmc7XG4gIC8qKiBFeHRlcm5hbCB0aWNrZXQgSUQgKGUuZy4sIFplbmRlc2sgdGlja2V0IElEKSAqL1xuICBleHRlcm5hbFRpY2tldElkPzogc3RyaW5nO1xuICAvKiogUGxhdGZvcm0gZm9yIGV4dGVybmFsIHRpY2tldCAqL1xuICBwbGF0Zm9ybT86ICd6ZW5kZXNrJyB8ICdpbnRlcmNvbScgfCAnc2FsZXNmb3JjZScgfCAnZnJlc2hkZXNrJztcbiAgLyoqIEN1c3RvbSBmaWVsZCBuYW1lIGZvciBsaW5raW5nICovXG4gIGN1c3RvbUZpZWxkTmFtZT86IHN0cmluZztcbiAgLyoqIEN1c3RvbSBmaWVsZCB2YWx1ZSAqL1xuICBjdXN0b21GaWVsZFZhbHVlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBMaW5rTWV0aG9kID1cbiAgfCAnc2RrX2V4cGxpY2l0JyAgICAgIC8vIERpcmVjdCBTREsgY2FsbCB3aXRoIHRpY2tldCBJRCAoY29uZmlkZW5jZTogMS4wKVxuICB8ICd6ZW5kZXNrX21hcmtlcicgICAgLy8gRW1iZWRkZWQgVEhJRCBtYXJrZXIgaW4gcmVzcG9uc2UgKGNvbmZpZGVuY2U6IDEuMClcbiAgfCAnY3VzdG9tX2ZpZWxkJyAgICAgIC8vIFplbmRlc2sgY3VzdG9tIGZpZWxkIChjb25maWRlbmNlOiAxLjApXG4gIHwgJ21pZGRsZXdhcmVfc3RhbXAnICAvLyBNaWRkbGV3YXJlLWluamVjdGVkIHRyYWNlIElEIChjb25maWRlbmNlOiAwLjk4KVxuICB8ICdzZXNzaW9uX21hdGNoJyAgICAgLy8gU2Vzc2lvbiBJRCBjb3JyZWxhdGlvbiAoY29uZmlkZW5jZTogMC45NSlcbiAgfCAnZW1haWxfdGltZV93aW5kb3cnIC8vIEVtYWlsICsgMTVtaW4gd2luZG93IChjb25maWRlbmNlOiAwLjYpXG4gIHwgJ21hbnVhbCc7ICAgICAgICAgICAvLyBIdW1hbi1hc3NpZ25lZCAoY29uZmlkZW5jZTogMS4wKVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUUkFDRSBPUFRJT05TICh2MiBjb21wYXRpYmlsaXR5KVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFRyYWNlIG9wdGlvbnMgKHYyIGZvcm1hdCwgY29udmVydGVkIHRvIHJ1bnMgaW50ZXJuYWxseSlcbiAqIEBkZXByZWNhdGVkIFVzZSBSdW5PcHRpb25zIGluc3RlYWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFjZU9wdGlvbnMge1xuICAvKiogVXNlcidzIG1lc3NhZ2UvcXVlcnkgKi9cbiAgdXNlck1lc3NhZ2U6IHN0cmluZztcbiAgLyoqIEFnZW50J3MgcmVzcG9uc2UgKi9cbiAgYWdlbnRSZXNwb25zZTogc3RyaW5nO1xuICAvKiogVXNlcidzIGRldGVjdGVkIGludGVudCAqL1xuICB1c2VySW50ZW50Pzogc3RyaW5nO1xuICAvKiogT3V0Y29tZTogc3VjY2VzcywgZmFpbHVyZSwgcGFydGlhbF9zdWNjZXNzICovXG4gIG91dGNvbWU/OiAnc3VjY2VzcycgfCAnZmFpbHVyZScgfCAncGFydGlhbF9zdWNjZXNzJztcbiAgLyoqIER1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyAqL1xuICBkdXJhdGlvbj86IG51bWJlcjtcbiAgLyoqIFNlc3Npb24gSUQgZm9yIGNvbnZlcnNhdGlvbiB0cmFja2luZyAqL1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIC8qKiBDb252ZXJzYXRpb24gaGlzdG9yeSAqL1xuICBjb252ZXJzYXRpb25IaXN0b3J5PzogQXJyYXk8eyByb2xlOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB9PjtcbiAgLyoqIFNwYW4gZGF0YSBmb3IgZGV0YWlsZWQgYW5hbHlzaXMgKi9cbiAgc3BhbnM/OiBTcGFuRGF0YVtdO1xuICAvKiogQnVzaW5lc3MgY29udGV4dCBmb3IgUk9JIGNhbGN1bGF0aW9uICovXG4gIGJ1c2luZXNzQ29udGV4dD86IEJ1c2luZXNzQ29udGV4dDtcbiAgLyoqIEN1c3RvbSBtZXRhZGF0YSAqL1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNwYW5EYXRhIHtcbiAgaWQ/OiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogJ2xsbScgfCAndG9vbCcgfCAncmV0cmlldmFsJyB8ICdlbWJlZGRpbmcnIHwgJ2NoYWluJyB8ICdjdXN0b20nO1xuICBzdGFydFRpbWU/OiBEYXRlO1xuICBlbmRUaW1lPzogRGF0ZTtcbiAgZHVyYXRpb25Ncz86IG51bWJlcjtcbiAgc3RhdHVzPzogJ29rJyB8ICdlcnJvcicgfCAndGltZW91dCc7XG4gIGVycm9yPzogc3RyaW5nO1xuICBpbnB1dD86IHVua25vd247XG4gIG91dHB1dD86IHVua25vd247XG4gIC8vIExMTS1zcGVjaWZpY1xuICBtb2RlbD86IHN0cmluZztcbiAgcHJvdmlkZXI/OiBzdHJpbmc7XG4gIHByb21wdFRva2Vucz86IG51bWJlcjtcbiAgY29tcGxldGlvblRva2Vucz86IG51bWJlcjtcbiAgLy8gVG9vbC1zcGVjaWZpY1xuICB0b29sTmFtZT86IHN0cmluZztcbiAgdG9vbFBhcmFtZXRlcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLy8gUmV0cmlldmFsLXNwZWNpZmljXG4gIHF1ZXJ5Pzogc3RyaW5nO1xuICBkb2N1bWVudENvdW50PzogbnVtYmVyO1xuICB0b3BTY29yZT86IG51bWJlcjtcbiAgc291cmNlcz86IHN0cmluZ1tdO1xuICAvLyBDaGlsZHJlblxuICBjaGlsZHJlbj86IFNwYW5EYXRhW107XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIEN1c3RvbWVyQ29udGV4dFNuYXBzaG90IGluc3RlYWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdXNpbmVzc0NvbnRleHQge1xuICAvKiogQ3VzdG9tZXIgSUQgKi9cbiAgY3VzdG9tZXJJZD86IHN0cmluZztcbiAgLyoqIFRyYW5zYWN0aW9uIHZhbHVlIGluIGRvbGxhcnMgKi9cbiAgdHJhbnNhY3Rpb25WYWx1ZT86IG51bWJlcjtcbiAgLyoqIFByaW9yaXR5IGxldmVsICovXG4gIHByaW9yaXR5PzogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJyB8ICdjcml0aWNhbCc7XG4gIC8qKiBEZXBhcnRtZW50ICovXG4gIGRlcGFydG1lbnQ/OiBzdHJpbmc7XG4gIC8qKiBJbmR1c3RyeSB2ZXJ0aWNhbCAqL1xuICBpbmR1c3RyeT86IHN0cmluZztcbiAgLyoqIEN1c3RvbSBmaWVsZHMgKi9cbiAgY3VzdG9tPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENMQUlNIFRZUEVTICh2Mylcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBBIGNsYWltIGFib3V0IGEgcnVuIChmYWN0IHZzIGluZmVyZW5jZSlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGFpbSB7XG4gIGlkOiBzdHJpbmc7XG4gIGFuYWx5c2lzSWQ6IHN0cmluZztcbiAgLyoqIFR5cGUgb2YgY2xhaW0gKi9cbiAgY2xhaW1UeXBlOiBDbGFpbVR5cGU7XG4gIC8qKiBDYXRlZ29yeSBvZiB0aGUgY2xhaW0gKi9cbiAgY2xhaW1DYXRlZ29yeTogQ2xhaW1DYXRlZ29yeTtcbiAgLyoqIFRoZSBjbGFpbSB0ZXh0ICovXG4gIGNsYWltVGV4dDogc3RyaW5nO1xuICAvKiogQ29uZmlkZW5jZSBpbiB0aGlzIGNsYWltICgwLTEpICovXG4gIGNvbmZpZGVuY2U6IG51bWJlcjtcbiAgLyoqIEhvdyB3ZWxsIGNhbGlicmF0ZWQgaXMgdGhpcyBjb25maWRlbmNlICovXG4gIGNvbmZpZGVuY2VDYWxpYnJhdGlvbjogQ29uZmlkZW5jZUNhbGlicmF0aW9uO1xuICAvKiogRXZpZGVuY2Ugc3VwcG9ydGluZyB0aGlzIGNsYWltICovXG4gIGV2aWRlbmNlOiBFdmlkZW5jZVJlZmVyZW5jZVtdO1xuICAvKiogSXMgdGhpcyBjbGFpbSBleHBsYWluYWJsZSB0byBlbmQgdXNlcnMgKi9cbiAgaXNFeHBsYWluYWJsZTogYm9vbGVhbjtcbiAgLyoqIFByb2JhYmlsaXR5IHZhbHVlIGZvciBwcm9iYWJpbGl0eSBjbGFpbXMgKi9cbiAgcHJvYmFiaWxpdHlWYWx1ZT86IG51bWJlcjtcbiAgLyoqIEh1bWFuLWFzc2lnbmVkIHZlcmlmaWNhdGlvbiBzdGF0dXMgKi9cbiAgaHVtYW5WZXJpZmllZD86IGJvb2xlYW47XG4gIC8qKiBIdW1hbiB2ZXJpZmljYXRpb24gdmVyZGljdCAqL1xuICBodW1hblZlcmRpY3Q/OiAnY29uZmlybWVkJyB8ICdyZWplY3RlZCcgfCAnbW9kaWZpZWQnO1xuICBjcmVhdGVkQXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIENsYWltVHlwZSA9ICdvYnNlcnZlZCcgfCAnaW5mZXJyZWQnIHwgJ2NvbXB1dGVkJztcbmV4cG9ydCB0eXBlIENsYWltQ2F0ZWdvcnkgPVxuICB8ICdvdXRjb21lJ1xuICB8ICdyb290X2NhdXNlJ1xuICB8ICdjdXN0b21lcl9pbXBhY3QnXG4gIHwgJ2NodXJuX3Jpc2snXG4gIHwgJ3JldmVudWVfaW1wYWN0J1xuICB8ICdxdWFsaXR5J1xuICB8ICdvdGhlcic7XG5leHBvcnQgdHlwZSBDb25maWRlbmNlQ2FsaWJyYXRpb24gPSAnY2FsaWJyYXRlZCcgfCAndW5jYWxpYnJhdGVkJyB8ICduZWVkc19tb3JlX2RhdGEnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV2aWRlbmNlUmVmZXJlbmNlIHtcbiAgLyoqIFR5cGUgb2YgZXZpZGVuY2UgKi9cbiAgdHlwZTogJ3NwYW4nIHwgJ21lc3NhZ2UnIHwgJ3Rvb2xfY2FsbCcgfCAnZXh0ZXJuYWwnIHwgJ2NvbXB1dGVkJztcbiAgLyoqIElEIG9mIHRoZSByZWZlcmVuY2VkIGl0ZW0gKi9cbiAgcmVmZXJlbmNlSWQ6IHN0cmluZztcbiAgLyoqIEhvdyByZWxldmFudCBpcyB0aGlzIGV2aWRlbmNlICovXG4gIHJlbGV2YW5jZTogc3RyaW5nO1xuICAvKiogQ29uZmlkZW5jZSBpbiB0aGlzIGV2aWRlbmNlICovXG4gIGNvbmZpZGVuY2U6IG51bWJlcjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQU5BTFlTSVMgUkVTVUxUICh2Mylcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBBbmFseXNpc1Jlc3VsdCB7XG4gIGlkOiBzdHJpbmc7XG4gIHJ1bklkOiBzdHJpbmc7XG4gIGFuYWx5c2lzVmVyc2lvbjogc3RyaW5nO1xuICBtb2RlbFVzZWQ6IHN0cmluZztcbiAgLyoqIE92ZXJhbGwgb3V0Y29tZSB2ZXJkaWN0ICovXG4gIG91dGNvbWVWZXJkaWN0OiAnc3VjY2VzcycgfCAncGFydGlhbF9zdWNjZXNzJyB8ICdmYWlsdXJlJztcbiAgLyoqIENvbmZpZGVuY2UgaW4gdGhlIHZlcmRpY3QgKDAtMSkgKi9cbiAgb3V0Y29tZUNvbmZpZGVuY2U6IG51bWJlcjtcbiAgLyoqIFJvb3QgY2F1c2UgY2F0ZWdvcnkgaWYgZmFpbHVyZSAqL1xuICByb290Q2F1c2VDYXRlZ29yeT86IHN0cmluZztcbiAgLyoqIENvbmZpZGVuY2UgaW4gcm9vdCBjYXVzZSAoMC0xKSAqL1xuICByb290Q2F1c2VDb25maWRlbmNlPzogbnVtYmVyO1xuICAvKiogSXMgdGhpcyB0aGUgY3VycmVudCBhbmFseXNpcyAqL1xuICBpc0N1cnJlbnQ6IGJvb2xlYW47XG4gIC8qKiBJRCBvZiBhbmFseXNpcyB0aGF0IHN1cGVyc2VkZWQgdGhpcyBvbmUgKi9cbiAgc3VwZXJzZWRlZEJ5Pzogc3RyaW5nO1xuICAvKiogQ2xhaW1zIGZyb20gdGhpcyBhbmFseXNpcyAqL1xuICBjbGFpbXM6IENsYWltW107XG4gIGFuYWx5emVkQXQ/OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdD86IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ0FMSUJSQVRJT04gVFlQRVMgKHYzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbGlicmF0aW9uU3RhdHVzIHtcbiAgYWdlbnRJZDogc3RyaW5nO1xuICBwcmVkaWN0aW9uVHlwZTogUHJlZGljdGlvblR5cGU7XG4gIC8qKiBCcmllciBzY29yZSAobG93ZXIgaXMgYmV0dGVyLCA8MC4xIGlzIGdvb2QpICovXG4gIGJyaWVyU2NvcmU6IG51bWJlcjtcbiAgLyoqIEV4cGVjdGVkIENhbGlicmF0aW9uIEVycm9yICovXG4gIGVjZTogbnVtYmVyO1xuICAvKiogU2FtcGxlIGNvdW50ICovXG4gIHNhbXBsZUNvdW50OiBudW1iZXI7XG4gIC8qKiBJcyB0aGUgbW9kZWwgd2VsbC1jYWxpYnJhdGVkICovXG4gIGlzQ2FsaWJyYXRlZDogYm9vbGVhbjtcbiAgLyoqIENhbGlicmF0aW9uIGJ5IGNvbmZpZGVuY2UgYnVja2V0ICovXG4gIGJ1Y2tldHM6IENhbGlicmF0aW9uQnVja2V0W107XG4gIGxhc3RVcGRhdGVkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBQcmVkaWN0aW9uVHlwZSA9XG4gIHwgJ291dGNvbWUnXG4gIHwgJ2NodXJuX3Jpc2snXG4gIHwgJ2VzY2FsYXRpb25fcmlzaydcbiAgfCAncmVzb2x1dGlvbl90aW1lJ1xuICB8ICdjdXN0b21lcl9zYXRpc2ZhY3Rpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGlicmF0aW9uQnVja2V0IHtcbiAgYnVja2V0U3RhcnQ6IG51bWJlcjtcbiAgYnVja2V0RW5kOiBudW1iZXI7XG4gIHByZWRpY3RlZFByb2JhYmlsaXR5OiBudW1iZXI7XG4gIGFjdHVhbEZyZXF1ZW5jeTogbnVtYmVyO1xuICBzYW1wbGVDb3VudDogbnVtYmVyO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBST0kgVFlQRVMgKHYzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIFJvaUNvbmZpZyB7XG4gIC8qKiBDb3N0IHBlciBzdXBwb3J0IHRpY2tldCBkZWZsZWN0ZWQgKi9cbiAgdGlja2V0RGVmbGVjdGlvblZhbHVlOiBudW1iZXI7XG4gIC8qKiBDb3N0IHBlciBlc2NhbGF0aW9uICovXG4gIGVzY2FsYXRpb25Db3N0OiBudW1iZXI7XG4gIC8qKiBDb3N0IHBlciBob3VyIG9mIGFnZW50IHRpbWUgKi9cbiAgYWdlbnRIb3VybHlDb3N0OiBudW1iZXI7XG4gIC8qKiBBdmVyYWdlIHJlc29sdXRpb24gdGltZSAobWludXRlcykgKi9cbiAgYXZnUmVzb2x1dGlvbk1pbnV0ZXM6IG51bWJlcjtcbiAgLyoqIENTQVQgaW1wYWN0IG11bHRpcGxpZXIgKi9cbiAgY3NhdEltcGFjdE11bHRpcGxpZXI6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSb2lTdW1tYXJ5IHtcbiAgcGVyaW9kOiB7IGZyb206IHN0cmluZzsgdG86IHN0cmluZyB9O1xuICAvKiogVG90YWwgZXN0aW1hdGVkIHNhdmluZ3MgKi9cbiAgdG90YWxTYXZpbmdzOiBudW1iZXI7XG4gIC8qKiBCcmVha2Rvd24gYnkgY2F0ZWdvcnkgKi9cbiAgYnJlYWtkb3duOiB7XG4gICAgdGlja2V0RGVmbGVjdGlvbjogbnVtYmVyO1xuICAgIGVzY2FsYXRpb25QcmV2ZW50aW9uOiBudW1iZXI7XG4gICAgdGltZVRvUmVzb2x1dGlvbjogbnVtYmVyO1xuICAgIGNodXJuUHJldmVudGlvbjogbnVtYmVyO1xuICB9O1xuICAvKiogQ29uZmlkZW5jZSBpbiB0aGVzZSBlc3RpbWF0ZXMgKi9cbiAgY29uZmlkZW5jZTogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJztcbiAgLyoqIE1ldGhvZG9sb2d5IHVzZWQgKi9cbiAgbWV0aG9kb2xvZ3k6IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRVhQTEFJTkFCSUxJVFkgUkVTVUxUICh2MiBjb21wYXRpYmlsaXR5KVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBBbmFseXNpc1Jlc3VsdCBpbnN0ZWFkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwbGFpbmFiaWxpdHlSZXN1bHQge1xuICB0cmFjZUlkOiBzdHJpbmc7XG4gIGV4cGxhaW5hYmlsaXR5SWQ6IHN0cmluZztcbiAgc3VtbWFyeTogc3RyaW5nO1xuICBvdXRjb21lOiB7XG4gICAgdmVyZGljdDogJ3N1Y2Nlc3MnIHwgJ3BhcnRpYWxfc3VjY2VzcycgfCAnZmFpbHVyZSc7XG4gICAgY29uZmlkZW5jZTogbnVtYmVyO1xuICAgIHJlYXNvbmluZzogc3RyaW5nO1xuICB9O1xuICBidXNpbmVzc0ltcGFjdDoge1xuICAgIGltcGFjdFNjb3JlOiBudW1iZXI7XG4gICAgY3VzdG9tZXJTYXRpc2ZhY3Rpb246IG51bWJlcjtcbiAgICByZXZlbnVlUmlzazogc3RyaW5nO1xuICB9O1xuICByZWNvbW1lbmRhdGlvbnM6IEFycmF5PHtcbiAgICBwcmlvcml0eTogc3RyaW5nO1xuICAgIGNhdGVnb3J5OiBzdHJpbmc7XG4gICAgYWN0aW9uOiBzdHJpbmc7XG4gICAgZXhwZWN0ZWRJbXBhY3Q6IHN0cmluZztcbiAgfT47XG4gIHJhZ0V2YWx1YXRpb24/OiB7XG4gICAgZ3JvdW5kZWRuZXNzOiBudW1iZXI7XG4gICAgZmFpdGhmdWxuZXNzOiBudW1iZXI7XG4gICAgYW5zd2VyUmVsZXZhbmNlOiBudW1iZXI7XG4gIH07XG4gIGhhbGx1Y2luYXRpb25SZXBvcnQ/OiB7XG4gICAgZGV0ZWN0ZWQ6IGJvb2xlYW47XG4gICAgdHlwZXM6IHN0cmluZ1tdO1xuICAgIHNldmVyaXR5OiBzdHJpbmc7XG4gIH07XG4gIHByb2Nlc3NpbmdUaW1lTXM6IG51bWJlcjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQVBJIFJFU1BPTlNFIFRZUEVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpUmVzcG9uc2U8VD4ge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBkYXRhPzogVDtcbiAgZXJyb3I/OiB7XG4gICAgY29kZTogc3RyaW5nO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBkZXRhaWxzPzogdW5rbm93bjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0ZWRSZXNwb25zZTxUPiB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIGRhdGE6IHtcbiAgICBpdGVtczogVFtdO1xuICAgIGxpbWl0OiBudW1iZXI7XG4gICAgb2Zmc2V0OiBudW1iZXI7XG4gICAgaGFzTW9yZTogYm9vbGVhbjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdW5SZXNwb25zZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGNvbXBhbnlJZDogc3RyaW5nO1xuICBhZ2VudElkOiBzdHJpbmc7XG4gIHRpY2tldElkPzogc3RyaW5nO1xuICBjdXN0b21lckFjY291bnRJZD86IHN0cmluZztcbiAgc2Vzc2lvbklkPzogc3RyaW5nO1xuICBzdGFydGVkQXQ6IHN0cmluZztcbiAgZW5kZWRBdD86IHN0cmluZztcbiAgZHVyYXRpb25Ncz86IG51bWJlcjtcbiAgb3V0Y29tZT86IFJ1bk91dGNvbWU7XG4gIG91dGNvbWVSZWFzb24/OiBzdHJpbmc7XG4gIGNvbnZlcnNhdGlvbk1lc3NhZ2VzOiBDb252ZXJzYXRpb25NZXNzYWdlW107XG4gIG1vZGVsSWQ/OiBzdHJpbmc7XG4gIHByb21wdFZlcnNpb24/OiBzdHJpbmc7XG4gIGN1c3RvbWVyQ29udGV4dFNuYXBzaG90PzogQ3VzdG9tZXJDb250ZXh0U25hcHNob3Q7XG4gIHplbmRlc2tNYXJrZXI/OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbn1cbiJdfQ==