@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.
- package/.github/dependabot.yml +38 -0
- package/.github/workflows/ci.yml +246 -0
- package/.github/workflows/framework-compat.yml +169 -0
- package/.github/workflows/security.yml +336 -0
- package/CHANGELOG.md +29 -0
- package/LICENSE +13 -0
- package/MIGRATION.md +30 -0
- package/README.md +221 -0
- package/dist/attachments.d.ts +28 -0
- package/dist/attachments.d.ts.map +1 -0
- package/dist/attachments.js +59 -0
- package/dist/attachments.js.map +1 -0
- package/dist/config.d.ts +72 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +78 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +126 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +163 -0
- package/dist/context.js.map +1 -0
- package/dist/decorators.d.ts +6 -0
- package/dist/decorators.d.ts.map +1 -0
- package/dist/decorators.js +52 -0
- package/dist/decorators.js.map +1 -0
- package/dist/deploy.d.ts +89 -0
- package/dist/deploy.d.ts.map +1 -0
- package/dist/deploy.js +203 -0
- package/dist/deploy.js.map +1 -0
- package/dist/errors.d.ts +18 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +34 -0
- package/dist/errors.js.map +1 -0
- package/dist/eventBuilder.d.ts +21 -0
- package/dist/eventBuilder.d.ts.map +1 -0
- package/dist/eventBuilder.js +127 -0
- package/dist/eventBuilder.js.map +1 -0
- package/dist/fingerprint.d.ts +158 -0
- package/dist/fingerprint.d.ts.map +1 -0
- package/dist/fingerprint.js +339 -0
- package/dist/fingerprint.js.map +1 -0
- package/dist/governance.d.ts +47 -0
- package/dist/governance.d.ts.map +1 -0
- package/dist/governance.js +104 -0
- package/dist/governance.js.map +1 -0
- package/dist/http.d.ts +62 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +181 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/instrumentation.d.ts +40 -0
- package/dist/instrumentation.d.ts.map +1 -0
- package/dist/instrumentation.js +31 -0
- package/dist/instrumentation.js.map +1 -0
- package/dist/integrations/mastra.d.ts +64 -0
- package/dist/integrations/mastra.d.ts.map +1 -0
- package/dist/integrations/mastra.js +256 -0
- package/dist/integrations/mastra.js.map +1 -0
- package/dist/kpi.d.ts +21 -0
- package/dist/kpi.d.ts.map +1 -0
- package/dist/kpi.js +83 -0
- package/dist/kpi.js.map +1 -0
- package/dist/llmDetector.d.ts +22 -0
- package/dist/llmDetector.d.ts.map +1 -0
- package/dist/llmDetector.js +269 -0
- package/dist/llmDetector.js.map +1 -0
- package/dist/plugin.d.ts +33 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +312 -0
- package/dist/plugin.js.map +1 -0
- package/dist/registry.d.ts +13 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +18 -0
- package/dist/registry.js.map +1 -0
- package/dist/tracing.d.ts +10 -0
- package/dist/tracing.d.ts.map +1 -0
- package/dist/tracing.js +30 -0
- package/dist/tracing.js.map +1 -0
- package/dist/triggerState.d.ts +5 -0
- package/dist/triggerState.d.ts.map +1 -0
- package/dist/triggerState.js +19 -0
- package/dist/triggerState.js.map +1 -0
- package/dist/utils.d.ts +27 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +72 -0
- package/dist/utils.js.map +1 -0
- package/package.json +37 -0
- package/packages/anthropic/package.json +16 -0
- package/packages/anthropic/src/index.ts +5 -0
- package/packages/anthropic/src/wrapper.ts +102 -0
- package/packages/anthropic/tsconfig.build.json +20 -0
- package/packages/langchain/package.json +16 -0
- package/packages/langchain/src/index.ts +7 -0
- package/packages/langchain/src/wrapper.ts +51 -0
- package/packages/mastra/package.json +17 -0
- package/packages/mastra/src/index.ts +8 -0
- package/packages/mastra/src/wrapper.ts +301 -0
- package/packages/openai/package.json +16 -0
- package/packages/openai/src/index.ts +8 -0
- package/packages/openai/src/wrapper.ts +103 -0
- package/packages/openai/tsconfig.build.json +20 -0
- package/packages/openclaw/openclaw.plugin.json +100 -0
- package/packages/openclaw/package.json +41 -0
- package/packages/openclaw/src/buffer.ts +99 -0
- package/packages/openclaw/src/config.ts +139 -0
- package/packages/openclaw/src/hooks/governance.ts +267 -0
- package/packages/openclaw/src/hooks/lifecycle.ts +75 -0
- package/packages/openclaw/src/hooks/telemetry.ts +207 -0
- package/packages/openclaw/src/index.ts +91 -0
- package/packages/openclaw/src/mapper.ts +233 -0
- package/packages/openclaw/src/session-tracker.ts +181 -0
- package/packages/openclaw/src/types.ts +220 -0
- package/packages/openclaw/tests/buffer.test.ts +148 -0
- package/packages/openclaw/tests/config.test.ts +122 -0
- package/packages/openclaw/tests/governance.test.ts +232 -0
- package/packages/openclaw/tests/mapper.test.ts +242 -0
- package/packages/openclaw/tests/session-tracker.test.ts +124 -0
- package/packages/openclaw/tsconfig.json +18 -0
- package/packages/openclaw/vitest.config.ts +8 -0
- package/packages/vercel-ai/package.json +16 -0
- package/packages/vercel-ai/src/index.ts +5 -0
- package/packages/vercel-ai/src/wrapper.ts +49 -0
- package/scripts/bump-version.sh +58 -0
- package/scripts/update-readme-compat.mjs +151 -0
- package/src/__tests__/fingerprint.test.ts +328 -0
- package/src/attachments.ts +88 -0
- package/src/config.ts +164 -0
- package/src/context.ts +258 -0
- package/src/decorators.ts +61 -0
- package/src/deploy.ts +260 -0
- package/src/errors.ts +44 -0
- package/src/eventBuilder.ts +153 -0
- package/src/fingerprint.ts +421 -0
- package/src/governance.ts +156 -0
- package/src/http.ts +241 -0
- package/src/index.ts +57 -0
- package/src/instrumentation.ts +68 -0
- package/src/integrations/mastra.ts +335 -0
- package/src/kpi.ts +112 -0
- package/src/llmDetector.ts +330 -0
- package/src/plugin.ts +384 -0
- package/src/registry.ts +27 -0
- package/src/tracing.ts +39 -0
- package/src/triggerState.ts +27 -0
- package/src/utils.ts +78 -0
- package/tests/compat/anthropic.test.ts +61 -0
- package/tests/compat/cohere.test.ts +57 -0
- package/tests/compat/google-genai.test.ts +61 -0
- package/tests/compat/langchain-openai.test.ts +41 -0
- package/tests/compat/langchain.test.ts +64 -0
- package/tests/compat/mistral.test.ts +58 -0
- package/tests/compat/openai.test.ts +71 -0
- package/tests/compat/vercel-ai.test.ts +56 -0
- package/tests/plugins/anthropic-wrapper.test.ts +120 -0
- package/tests/plugins/langchain-wrapper.test.ts +128 -0
- package/tests/plugins/openai-wrapper.test.ts +165 -0
- package/tsconfig.json +21 -0
- 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
|
package/dist/http.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|