@turingpulse/sdk 1.0.1

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 (160) hide show
  1. package/.github/dependabot.yml +38 -0
  2. package/.github/workflows/ci.yml +246 -0
  3. package/.github/workflows/framework-compat.yml +169 -0
  4. package/.github/workflows/security.yml +336 -0
  5. package/CHANGELOG.md +29 -0
  6. package/LICENSE +13 -0
  7. package/MIGRATION.md +30 -0
  8. package/README.md +221 -0
  9. package/dist/attachments.d.ts +28 -0
  10. package/dist/attachments.d.ts.map +1 -0
  11. package/dist/attachments.js +59 -0
  12. package/dist/attachments.js.map +1 -0
  13. package/dist/config.d.ts +72 -0
  14. package/dist/config.d.ts.map +1 -0
  15. package/dist/config.js +78 -0
  16. package/dist/config.js.map +1 -0
  17. package/dist/context.d.ts +126 -0
  18. package/dist/context.d.ts.map +1 -0
  19. package/dist/context.js +163 -0
  20. package/dist/context.js.map +1 -0
  21. package/dist/decorators.d.ts +6 -0
  22. package/dist/decorators.d.ts.map +1 -0
  23. package/dist/decorators.js +52 -0
  24. package/dist/decorators.js.map +1 -0
  25. package/dist/deploy.d.ts +89 -0
  26. package/dist/deploy.d.ts.map +1 -0
  27. package/dist/deploy.js +203 -0
  28. package/dist/deploy.js.map +1 -0
  29. package/dist/errors.d.ts +18 -0
  30. package/dist/errors.d.ts.map +1 -0
  31. package/dist/errors.js +34 -0
  32. package/dist/errors.js.map +1 -0
  33. package/dist/eventBuilder.d.ts +21 -0
  34. package/dist/eventBuilder.d.ts.map +1 -0
  35. package/dist/eventBuilder.js +127 -0
  36. package/dist/eventBuilder.js.map +1 -0
  37. package/dist/fingerprint.d.ts +158 -0
  38. package/dist/fingerprint.d.ts.map +1 -0
  39. package/dist/fingerprint.js +339 -0
  40. package/dist/fingerprint.js.map +1 -0
  41. package/dist/governance.d.ts +47 -0
  42. package/dist/governance.d.ts.map +1 -0
  43. package/dist/governance.js +104 -0
  44. package/dist/governance.js.map +1 -0
  45. package/dist/http.d.ts +62 -0
  46. package/dist/http.d.ts.map +1 -0
  47. package/dist/http.js +181 -0
  48. package/dist/http.js.map +1 -0
  49. package/dist/index.d.ts +15 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +23 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/instrumentation.d.ts +40 -0
  54. package/dist/instrumentation.d.ts.map +1 -0
  55. package/dist/instrumentation.js +31 -0
  56. package/dist/instrumentation.js.map +1 -0
  57. package/dist/integrations/mastra.d.ts +64 -0
  58. package/dist/integrations/mastra.d.ts.map +1 -0
  59. package/dist/integrations/mastra.js +256 -0
  60. package/dist/integrations/mastra.js.map +1 -0
  61. package/dist/kpi.d.ts +21 -0
  62. package/dist/kpi.d.ts.map +1 -0
  63. package/dist/kpi.js +83 -0
  64. package/dist/kpi.js.map +1 -0
  65. package/dist/llmDetector.d.ts +22 -0
  66. package/dist/llmDetector.d.ts.map +1 -0
  67. package/dist/llmDetector.js +269 -0
  68. package/dist/llmDetector.js.map +1 -0
  69. package/dist/plugin.d.ts +33 -0
  70. package/dist/plugin.d.ts.map +1 -0
  71. package/dist/plugin.js +312 -0
  72. package/dist/plugin.js.map +1 -0
  73. package/dist/registry.d.ts +13 -0
  74. package/dist/registry.d.ts.map +1 -0
  75. package/dist/registry.js +18 -0
  76. package/dist/registry.js.map +1 -0
  77. package/dist/tracing.d.ts +10 -0
  78. package/dist/tracing.d.ts.map +1 -0
  79. package/dist/tracing.js +30 -0
  80. package/dist/tracing.js.map +1 -0
  81. package/dist/triggerState.d.ts +5 -0
  82. package/dist/triggerState.d.ts.map +1 -0
  83. package/dist/triggerState.js +19 -0
  84. package/dist/triggerState.js.map +1 -0
  85. package/dist/utils.d.ts +27 -0
  86. package/dist/utils.d.ts.map +1 -0
  87. package/dist/utils.js +72 -0
  88. package/dist/utils.js.map +1 -0
  89. package/package.json +37 -0
  90. package/packages/anthropic/package.json +16 -0
  91. package/packages/anthropic/src/index.ts +5 -0
  92. package/packages/anthropic/src/wrapper.ts +102 -0
  93. package/packages/anthropic/tsconfig.build.json +20 -0
  94. package/packages/langchain/package.json +16 -0
  95. package/packages/langchain/src/index.ts +7 -0
  96. package/packages/langchain/src/wrapper.ts +51 -0
  97. package/packages/mastra/package.json +17 -0
  98. package/packages/mastra/src/index.ts +8 -0
  99. package/packages/mastra/src/wrapper.ts +301 -0
  100. package/packages/openai/package.json +16 -0
  101. package/packages/openai/src/index.ts +8 -0
  102. package/packages/openai/src/wrapper.ts +103 -0
  103. package/packages/openai/tsconfig.build.json +20 -0
  104. package/packages/openclaw/openclaw.plugin.json +100 -0
  105. package/packages/openclaw/package.json +41 -0
  106. package/packages/openclaw/src/buffer.ts +99 -0
  107. package/packages/openclaw/src/config.ts +139 -0
  108. package/packages/openclaw/src/hooks/governance.ts +267 -0
  109. package/packages/openclaw/src/hooks/lifecycle.ts +75 -0
  110. package/packages/openclaw/src/hooks/telemetry.ts +207 -0
  111. package/packages/openclaw/src/index.ts +91 -0
  112. package/packages/openclaw/src/mapper.ts +233 -0
  113. package/packages/openclaw/src/session-tracker.ts +181 -0
  114. package/packages/openclaw/src/types.ts +220 -0
  115. package/packages/openclaw/tests/buffer.test.ts +148 -0
  116. package/packages/openclaw/tests/config.test.ts +122 -0
  117. package/packages/openclaw/tests/governance.test.ts +232 -0
  118. package/packages/openclaw/tests/mapper.test.ts +242 -0
  119. package/packages/openclaw/tests/session-tracker.test.ts +124 -0
  120. package/packages/openclaw/tsconfig.json +18 -0
  121. package/packages/openclaw/vitest.config.ts +8 -0
  122. package/packages/vercel-ai/package.json +16 -0
  123. package/packages/vercel-ai/src/index.ts +5 -0
  124. package/packages/vercel-ai/src/wrapper.ts +49 -0
  125. package/scripts/bump-version.sh +58 -0
  126. package/scripts/update-readme-compat.mjs +151 -0
  127. package/src/__tests__/fingerprint.test.ts +328 -0
  128. package/src/attachments.ts +88 -0
  129. package/src/config.ts +164 -0
  130. package/src/context.ts +258 -0
  131. package/src/decorators.ts +61 -0
  132. package/src/deploy.ts +260 -0
  133. package/src/errors.ts +44 -0
  134. package/src/eventBuilder.ts +153 -0
  135. package/src/fingerprint.ts +421 -0
  136. package/src/governance.ts +156 -0
  137. package/src/http.ts +241 -0
  138. package/src/index.ts +57 -0
  139. package/src/instrumentation.ts +68 -0
  140. package/src/integrations/mastra.ts +335 -0
  141. package/src/kpi.ts +112 -0
  142. package/src/llmDetector.ts +330 -0
  143. package/src/plugin.ts +384 -0
  144. package/src/registry.ts +27 -0
  145. package/src/tracing.ts +39 -0
  146. package/src/triggerState.ts +27 -0
  147. package/src/utils.ts +78 -0
  148. package/tests/compat/anthropic.test.ts +61 -0
  149. package/tests/compat/cohere.test.ts +57 -0
  150. package/tests/compat/google-genai.test.ts +61 -0
  151. package/tests/compat/langchain-openai.test.ts +41 -0
  152. package/tests/compat/langchain.test.ts +64 -0
  153. package/tests/compat/mistral.test.ts +58 -0
  154. package/tests/compat/openai.test.ts +71 -0
  155. package/tests/compat/vercel-ai.test.ts +56 -0
  156. package/tests/plugins/anthropic-wrapper.test.ts +120 -0
  157. package/tests/plugins/langchain-wrapper.test.ts +128 -0
  158. package/tests/plugins/openai-wrapper.test.ts +165 -0
  159. package/tsconfig.json +21 -0
  160. package/vitest.config.ts +9 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"governance.js","sourceRoot":"","sources":["../src/governance.ts"],"names":[],"mappings":"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"}
package/dist/http.d.ts ADDED
@@ -0,0 +1,62 @@
1
+ /**
2
+ * HTTP client for TuringPulse SDK.
3
+ *
4
+ * All outbound HTTP flows through this class. Authentication is done
5
+ * exclusively via the `X-API-Key` header — the backend resolves
6
+ * tenant_id and project_id from the key.
7
+ */
8
+ import type { AgentEvent } from '@turingpulse/interfaces';
9
+ import { TuringPulseConfig } from './config';
10
+ export declare const SDK_VERSION = "0.1.0";
11
+ interface JsonValue {
12
+ [key: string]: unknown;
13
+ }
14
+ /** Parameters for SDK policy_check() */
15
+ export interface PolicyCheckParams {
16
+ agentId?: string;
17
+ workflowId?: string;
18
+ workflowName?: string;
19
+ runId?: string;
20
+ nodeName?: string;
21
+ modelName?: string;
22
+ confidenceScore?: number;
23
+ costUsd?: number;
24
+ latencyMs?: number;
25
+ outputText?: string;
26
+ inputText?: string;
27
+ outputLength?: number;
28
+ errorOccurred?: boolean;
29
+ category?: string;
30
+ metadata?: Record<string, unknown>;
31
+ spanId?: string;
32
+ nodeType?: string;
33
+ }
34
+ /** Result of a policy check */
35
+ export interface PolicyCheckResult {
36
+ /** "allow", "block", or "flag" */
37
+ action: string;
38
+ /** Whether any policy was triggered */
39
+ triggered: boolean;
40
+ /** Human-readable reason */
41
+ reason?: string;
42
+ /** IDs of triggered policies */
43
+ policyIds: string[];
44
+ }
45
+ export declare class TuringPulseHttpClient {
46
+ private readonly config;
47
+ private readonly baseUrl;
48
+ constructor(config: TuringPulseConfig);
49
+ get maxSerializedFieldLength(): number;
50
+ private get fetchImpl();
51
+ emitEvents(events: AgentEvent[]): Promise<void>;
52
+ createTask(payload: JsonValue): Promise<string | undefined>;
53
+ addHitlAction(taskId: string, payload: JsonValue): Promise<void>;
54
+ postFingerprint(payload: JsonValue): Promise<unknown>;
55
+ postDeploy(payload: JsonValue): Promise<unknown>;
56
+ postCustomChange(payload: JsonValue): Promise<unknown>;
57
+ private post;
58
+ policyCheck(params: PolicyCheckParams): Promise<PolicyCheckResult>;
59
+ private buildHeaders;
60
+ }
61
+ export {};
62
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAG1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAM7C,eAAO,MAAM,WAAW,UAAU,CAAC;AAMnC,UAAU,SAAS;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,wCAAwC;AACxC,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,+BAA+B;AAC/B,MAAM,WAAW,iBAAiB;IAChC,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,SAAS,EAAE,OAAO,CAAC;IACnB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,qBAAa,qBAAqB;IAGpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAEJ,MAAM,EAAE,iBAAiB;IAItD,IAAI,wBAAwB,IAAI,MAAM,CAErC;IAED,OAAO,KAAK,SAAS,GAEpB;IAMK,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAW/C,UAAU,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAY3D,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAchE,eAAe,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAKrD,UAAU,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAKhD,gBAAgB,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;YAS9C,IAAI;IAkEZ,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA2BxE,OAAO,CAAC,YAAY;CAQrB"}
package/dist/http.js ADDED
@@ -0,0 +1,181 @@
1
+ /**
2
+ * HTTP client for TuringPulse SDK.
3
+ *
4
+ * All outbound HTTP flows through this class. Authentication is done
5
+ * exclusively via the `X-API-Key` header — the backend resolves
6
+ * tenant_id and project_id from the key.
7
+ */
8
+ import { safeErrorMessage } from './utils';
9
+ import { toSnakeCaseDeep } from './utils';
10
+ const _fetch = globalThis.fetch;
11
+ const _Headers = globalThis.Headers;
12
+ export const SDK_VERSION = '0.1.0';
13
+ const SDK_LANGUAGE = 'typescript';
14
+ const MAX_PAYLOAD_BYTES = 5 * 1024 * 1024; // 5 MB
15
+ const SAFE_PATH_SEGMENT = /^[a-zA-Z0-9_-]+$/;
16
+ const TERMINAL_STATUS_CODES = new Set([401, 402, 403, 404]);
17
+ export class TuringPulseHttpClient {
18
+ constructor(config) {
19
+ this.config = config;
20
+ this.baseUrl = config.endpoint;
21
+ }
22
+ get maxSerializedFieldLength() {
23
+ return this.config.maxSerializedFieldLength;
24
+ }
25
+ get fetchImpl() {
26
+ return this.config.fetchImpl ?? _fetch;
27
+ }
28
+ // ------------------------------------------------------------------
29
+ // Event emission
30
+ // ------------------------------------------------------------------
31
+ async emitEvents(events) {
32
+ if (!events.length)
33
+ return;
34
+ const snakeEvents = toSnakeCaseDeep(events);
35
+ const url = `${this.baseUrl}/api/v1/sdk/events`;
36
+ await this.post(url, { events: snakeEvents });
37
+ }
38
+ // ------------------------------------------------------------------
39
+ // Task / HITL helpers
40
+ // ------------------------------------------------------------------
41
+ async createTask(payload) {
42
+ const url = `${this.baseUrl}/api/v1/tasks`;
43
+ const response = await this.post(url, payload);
44
+ if (response && typeof response === 'object' && 'taskId' in response && typeof response.taskId === 'string') {
45
+ return response.taskId;
46
+ }
47
+ if (typeof payload.taskId === 'string') {
48
+ return payload.taskId;
49
+ }
50
+ return undefined;
51
+ }
52
+ async addHitlAction(taskId, payload) {
53
+ if (!SAFE_PATH_SEGMENT.test(taskId)) {
54
+ // eslint-disable-next-line no-console
55
+ console.warn('TuringPulse: invalid taskId rejected (possible path traversal)');
56
+ return;
57
+ }
58
+ const url = `${this.baseUrl}/api/v1/tasks/${taskId}/hitl`;
59
+ await this.post(url, payload);
60
+ }
61
+ // ------------------------------------------------------------------
62
+ // Fingerprint / deploy / custom-change helpers
63
+ // ------------------------------------------------------------------
64
+ async postFingerprint(payload) {
65
+ const url = `${this.baseUrl}/api/v1/fingerprints`;
66
+ return this.post(url, payload);
67
+ }
68
+ async postDeploy(payload) {
69
+ const url = `${this.baseUrl}/api/v1/deploys`;
70
+ return this.post(url, payload);
71
+ }
72
+ async postCustomChange(payload) {
73
+ const url = `${this.baseUrl}/api/v1/changes`;
74
+ return this.post(url, payload);
75
+ }
76
+ // ------------------------------------------------------------------
77
+ // Core POST with retries + timeout + payload limit
78
+ // ------------------------------------------------------------------
79
+ async post(url, body) {
80
+ let serialized = JSON.stringify(body);
81
+ if (serialized.length > MAX_PAYLOAD_BYTES) {
82
+ // eslint-disable-next-line no-console
83
+ console.warn(`TuringPulse payload exceeds ${MAX_PAYLOAD_BYTES} bytes, truncating`);
84
+ const events = body.events;
85
+ if (Array.isArray(events) && events.length > 1) {
86
+ const overhead = serialized.length - JSON.stringify(events).length;
87
+ const avgPerEvent = Math.ceil((serialized.length - overhead) / events.length);
88
+ const targetCount = Math.max(1, Math.floor((MAX_PAYLOAD_BYTES - overhead) / avgPerEvent));
89
+ if (targetCount < events.length) {
90
+ body = { ...body, events: events.slice(0, targetCount) };
91
+ }
92
+ }
93
+ serialized = JSON.stringify(body);
94
+ }
95
+ const headers = this.buildHeaders();
96
+ let lastError;
97
+ for (let attempt = 0; attempt <= this.config.maxRetries; attempt += 1) {
98
+ const controller = new AbortController();
99
+ const timeout = setTimeout(() => controller.abort(), this.config.timeoutMs);
100
+ try {
101
+ const response = await this.fetchImpl(url, {
102
+ method: 'POST',
103
+ headers,
104
+ body: serialized,
105
+ signal: controller.signal,
106
+ });
107
+ clearTimeout(timeout);
108
+ if (!response.ok) {
109
+ const err = new Error(`TuringPulse request failed with ${response.status}`);
110
+ const retryAfterHeader = response.headers.get('retry-after');
111
+ if (retryAfterHeader) {
112
+ err.retryAfter = parseFloat(retryAfterHeader) || undefined;
113
+ }
114
+ throw err;
115
+ }
116
+ if (response.headers.get('content-type')?.includes('application/json')) {
117
+ return await response.json();
118
+ }
119
+ return undefined;
120
+ }
121
+ catch (error) {
122
+ clearTimeout(timeout);
123
+ lastError = error;
124
+ const statusMatch = error instanceof Error && error.message.match(/failed with (\d+)/);
125
+ if (statusMatch && TERMINAL_STATUS_CODES.has(Number(statusMatch[1]))) {
126
+ break;
127
+ }
128
+ if (attempt === this.config.maxRetries)
129
+ break;
130
+ const retryAfter = error?.retryAfter;
131
+ const delay = retryAfter && retryAfter > 0
132
+ ? Math.min(retryAfter * 1000, 2000)
133
+ : Math.min(500 * (attempt + 1), 2000);
134
+ await sleep(delay);
135
+ }
136
+ }
137
+ // eslint-disable-next-line no-console
138
+ console.warn(`TuringPulse request to ${url} failed: ${safeErrorMessage(lastError)}`);
139
+ return undefined;
140
+ }
141
+ // ------------------------------------------------------------------
142
+ // Policy check — uses the same centralized post() with retries
143
+ // ------------------------------------------------------------------
144
+ async policyCheck(params) {
145
+ const url = `${this.baseUrl}/api/v1/hitl/policy/check`;
146
+ const body = toSnakeCaseDeep(params);
147
+ try {
148
+ const data = (await this.post(url, body));
149
+ if (!data) {
150
+ return { action: 'flag', triggered: true, reason: 'check_error: no response', policyIds: [] };
151
+ }
152
+ return {
153
+ action: data.action || 'allow',
154
+ triggered: Boolean(data.triggered),
155
+ reason: data.reason || undefined,
156
+ policyIds: data.policy_ids || [],
157
+ };
158
+ }
159
+ catch (err) {
160
+ const safeMessage = err instanceof Error ? err.message : 'unknown error';
161
+ // eslint-disable-next-line no-console
162
+ console.warn('TuringPulse policy check failed (fail-open):', safeMessage);
163
+ return { action: 'flag', triggered: true, reason: `check_error: ${safeMessage}`, policyIds: [] };
164
+ }
165
+ }
166
+ // ------------------------------------------------------------------
167
+ // Headers — only X-API-Key, never tenant/project/roles
168
+ // ------------------------------------------------------------------
169
+ buildHeaders() {
170
+ return new _Headers({
171
+ 'Content-Type': 'application/json',
172
+ 'X-API-Key': this.config.apiKey,
173
+ 'X-SDK-Version': SDK_VERSION,
174
+ 'X-SDK-Language': SDK_LANGUAGE,
175
+ });
176
+ }
177
+ }
178
+ async function sleep(ms) {
179
+ await new Promise((resolve) => setTimeout(resolve, ms));
180
+ }
181
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export { TuringPulseConfig, type TuringPulseConfigOptions, type GovernanceDefaults, DEFAULT_ENDPOINT } from './config';
2
+ export { TuringPulsePlugin, init, getInstance } from './plugin';
3
+ export { instrument, withInstrumentation } from './decorators';
4
+ export { GovernanceDirective, type GovernanceDirectiveOptions, type GovernanceTaskResult } from './governance';
5
+ export { type InstrumentationOptions } from './instrumentation';
6
+ export { type KPIConfig, type KPIResult, type KPIComparator } from './kpi';
7
+ export { currentContext, ExecutionContext, type ToolCallRecord, generateUUID } from './context';
8
+ export { TriggerNotFoundError, PluginNotInitializedError, GovernanceBlockedError, ConfigurationError, } from './errors';
9
+ export { type FingerprintConfig, type FingerprintData, } from './fingerprint';
10
+ export { registerDeploy, type DeployInfo, type RegisterDeployOptions, } from './deploy';
11
+ export { type PolicyCheckParams, type PolicyCheckResult, TuringPulseHttpClient, SDK_VERSION } from './http';
12
+ export { AttachmentManager, type AttachmentResult } from './attachments';
13
+ export { safeEnv, safeErrorMessage, toSnakeCaseDeep } from './utils';
14
+ export { instrumentMastra, type MastraInstrumentOptions, type MastraToolCallRecord, } from './integrations/mastra';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,KAAK,wBAAwB,EAAE,KAAK,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGvH,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGhE,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAG/D,OAAO,EAAE,mBAAmB,EAAE,KAAK,0BAA0B,EAAE,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAG/G,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAGhE,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAG3E,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,KAAK,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGhG,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,cAAc,EACd,KAAK,UAAU,EACf,KAAK,qBAAqB,GAC3B,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG5G,OAAO,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGzE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAGrE,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,GAC1B,MAAM,uBAAuB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,23 @@
1
+ // Config
2
+ export { TuringPulseConfig, DEFAULT_ENDPOINT } from './config';
3
+ // Plugin
4
+ export { TuringPulsePlugin, init, getInstance } from './plugin';
5
+ // Decorators
6
+ export { instrument, withInstrumentation } from './decorators';
7
+ // Governance
8
+ export { GovernanceDirective } from './governance';
9
+ // Context
10
+ export { currentContext, ExecutionContext, generateUUID } from './context';
11
+ // Errors
12
+ export { TriggerNotFoundError, PluginNotInitializedError, GovernanceBlockedError, ConfigurationError, } from './errors';
13
+ // Deploy Tracking
14
+ export { registerDeploy, } from './deploy';
15
+ // Policy Check & HTTP Client
16
+ export { TuringPulseHttpClient, SDK_VERSION } from './http';
17
+ // Attachments
18
+ export { AttachmentManager } from './attachments';
19
+ // Utils
20
+ export { safeEnv, safeErrorMessage, toSnakeCaseDeep } from './utils';
21
+ // Framework Integrations
22
+ export { instrumentMastra, } from './integrations/mastra';
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,iBAAiB,EAA0D,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEvH,SAAS;AACT,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEhE,aAAa;AACb,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAE/D,aAAa;AACb,OAAO,EAAE,mBAAmB,EAA8D,MAAM,cAAc,CAAC;AAQ/G,UAAU;AACV,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAuB,YAAY,EAAE,MAAM,WAAW,CAAC;AAEhG,SAAS;AACT,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAQlB,kBAAkB;AAClB,OAAO,EACL,cAAc,GAGf,MAAM,UAAU,CAAC;AAElB,6BAA6B;AAC7B,OAAO,EAAkD,qBAAqB,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE5G,cAAc;AACd,OAAO,EAAE,iBAAiB,EAAyB,MAAM,eAAe,CAAC;AAEzE,QAAQ;AACR,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAErE,yBAAyB;AACzB,OAAO,EACL,gBAAgB,GAGjB,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Instrumentation options for @instrument decorator.
3
+ *
4
+ * REFACTORED:
5
+ * - Added `name` parameter for workflow display name
6
+ * - `agentId` is DEPRECATED - use `name` instead
7
+ * - Backend auto-registers workflows based on `name` and assigns UUID
8
+ */
9
+ import { GovernanceDirective } from './governance';
10
+ import { KPIConfig } from './kpi';
11
+ export interface InstrumentationOptions {
12
+ /**
13
+ * Display name for the workflow (e.g., "Order Processing Agent").
14
+ * This is the preferred parameter. The backend will auto-register
15
+ * workflows based on this name and assign a UUID.
16
+ */
17
+ name?: string;
18
+ /**
19
+ * @deprecated Use `name` instead.
20
+ * Kept for backward compatibility.
21
+ */
22
+ agentId?: string;
23
+ operation?: string;
24
+ labels?: Record<string, string>;
25
+ trace?: boolean;
26
+ governance?: GovernanceDirective;
27
+ kpis?: KPIConfig[];
28
+ triggerKey?: string;
29
+ triggerDescription?: string;
30
+ hiddenEntrypoint?: boolean;
31
+ metadata?: Record<string, string>;
32
+ }
33
+ export declare function resolveOperation(options: InstrumentationOptions, fallback: string): string;
34
+ export declare function tracingEnabled(options: InstrumentationOptions, defaultEnabled: boolean): boolean;
35
+ /**
36
+ * Validate instrumentation options.
37
+ * @throws Error if neither name nor agentId is provided.
38
+ */
39
+ export declare function validateOptions(options: InstrumentationOptions): void;
40
+ //# sourceMappingURL=instrumentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../src/instrumentation.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1F;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,OAAO,GAAG,OAAO,CAEhG;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAgBrE"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Instrumentation options for @instrument decorator.
3
+ *
4
+ * REFACTORED:
5
+ * - Added `name` parameter for workflow display name
6
+ * - `agentId` is DEPRECATED - use `name` instead
7
+ * - Backend auto-registers workflows based on `name` and assigns UUID
8
+ */
9
+ export function resolveOperation(options, fallback) {
10
+ return options.operation ?? fallback;
11
+ }
12
+ export function tracingEnabled(options, defaultEnabled) {
13
+ return options.trace ?? defaultEnabled;
14
+ }
15
+ /**
16
+ * Validate instrumentation options.
17
+ * @throws Error if neither name nor agentId is provided.
18
+ */
19
+ export function validateOptions(options) {
20
+ if (!options.name && !options.agentId) {
21
+ throw new Error("Either 'name' or 'agentId' must be provided to @instrument. " +
22
+ "Example: @instrument({ name: 'My Workflow' })");
23
+ }
24
+ // Emit console warning for deprecated agentId usage
25
+ if (options.agentId && !options.name) {
26
+ // eslint-disable-next-line no-console
27
+ console.warn("The 'agentId' parameter is deprecated. Use 'name' instead. " +
28
+ "Example: @instrument({ name: 'Order Processing Agent' })");
29
+ }
30
+ }
31
+ //# sourceMappingURL=instrumentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../src/instrumentation.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA8BH,MAAM,UAAU,gBAAgB,CAAC,OAA+B,EAAE,QAAgB;IAChF,OAAO,OAAO,CAAC,SAAS,IAAI,QAAQ,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAA+B,EAAE,cAAuB;IACrF,OAAO,OAAO,CAAC,KAAK,IAAI,cAAc,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,OAA+B;IAC7D,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CACb,8DAA8D;YAC9D,+CAA+C,CAChD,CAAC;IACJ,CAAC;IAED,oDAAoD;IACpD,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACrC,sCAAsC;QACtC,OAAO,CAAC,IAAI,CACV,6DAA6D;YAC7D,0DAA0D,CAC3D,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Mastra 1.2.x instrumentation for TuringPulse SDK (TypeScript).
3
+ *
4
+ * Wraps `agent.generate()` to capture:
5
+ * - Token counts from `response.usage` (ai-sdk format: promptTokens / completionTokens).
6
+ * - Per-tool-call child spans.
7
+ * - Agent instructions as system prompt.
8
+ *
9
+ * This integration uses the centralized TuringPulseHttpClient when a plugin
10
+ * instance is available (preferred), or falls back to standalone HTTP when
11
+ * used without the full SDK.
12
+ */
13
+ import type { ToolCallRecord } from '../context';
14
+ import type { TuringPulseHttpClient } from '../http';
15
+ /** Mastra tool call with required result/id fields. */
16
+ interface MastraToolCallRecord extends ToolCallRecord {
17
+ toolResult: string;
18
+ toolId: string;
19
+ }
20
+ interface MastraInstrumentOptions {
21
+ /** Workflow display name for TuringPulse. */
22
+ name: string;
23
+ /** LLM model name (default: gpt-4o-mini). */
24
+ model?: string;
25
+ /** LLM provider (default: openai). */
26
+ provider?: string;
27
+ /**
28
+ * Preferred: pass the plugin's HTTP client for centralized retries, timeouts, headers.
29
+ * If not provided, falls back to standalone fetch using apiKey + endpoint.
30
+ */
31
+ httpClient?: TuringPulseHttpClient;
32
+ /** TuringPulse API endpoint — only needed if httpClient is not provided. */
33
+ endpoint?: string;
34
+ /** TuringPulse API key — only needed if httpClient is not provided. */
35
+ apiKey?: string;
36
+ /** Tool names available to the agent. */
37
+ toolNames?: string[];
38
+ /**
39
+ * A reference to the mutable tool-call log array. Tool execute()
40
+ * callbacks push records here during agent.generate(). The integration
41
+ * reads from this array after execution completes.
42
+ */
43
+ toolCallLog?: MastraToolCallRecord[];
44
+ kpis?: Array<{
45
+ kpiId: string;
46
+ value: number | (() => number);
47
+ alertThreshold?: number;
48
+ comparator?: string;
49
+ description?: string;
50
+ }>;
51
+ metadata?: Record<string, string>;
52
+ }
53
+ /**
54
+ * Instrument a Mastra Agent for TuringPulse observability.
55
+ *
56
+ * Returns an async function that runs `agent.generate()` and emits
57
+ * a root workflow span plus per-tool/LLM child spans.
58
+ */
59
+ export declare function instrumentMastra(agent: {
60
+ generate: (prompt: string) => Promise<unknown>;
61
+ [key: string]: unknown;
62
+ }, options: MastraInstrumentOptions): (prompt: string) => Promise<unknown>;
63
+ export type { MastraInstrumentOptions, MastraToolCallRecord };
64
+ //# sourceMappingURL=mastra.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mastra.d.ts","sourceRoot":"","sources":["../../src/integrations/mastra.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAOrD,uDAAuD;AACvD,UAAU,oBAAqB,SAAQ,cAAc;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,uBAAuB;IAC/B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB;;;;OAIG;IACH,WAAW,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACrC,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpI,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE;IAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,EACjF,OAAO,EAAE,uBAAuB,GAC/B,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAuLtC;AAkDD,YAAY,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,CAAC"}