@sensu-ai/sdk 0.1.0 → 0.1.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/README.md +129 -0
- package/dist/client.d.ts +76 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/integrations/langchain.d.ts +46 -0
- package/dist/integrations/langchain.d.ts.map +1 -0
- package/dist/integrations/openai.d.ts +26 -0
- package/dist/integrations/openai.d.ts.map +1 -0
- package/dist/types.d.ts +60 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +12 -8
package/README.md
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# @sensu-ai/sdk
|
|
2
|
+
|
|
3
|
+
The official Node.js SDK for [Sensu](https://sensu-ai.com) — observability for AI agents.
|
|
4
|
+
|
|
5
|
+
Instrument your agents to track LLM calls, tool use, token spend, latency, and cost. Events are buffered and sent in batches so there's no impact on your agent's performance.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @sensu-ai/sdk
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Quick start
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import { SensuClient } from '@sensu-ai/sdk';
|
|
17
|
+
|
|
18
|
+
const sensu = new SensuClient({
|
|
19
|
+
apiKey: process.env.SENSU_API_KEY,
|
|
20
|
+
agentId: 'my-agent',
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const run = sensu.startRun();
|
|
24
|
+
const step = run.startStep({ name: 'plan' });
|
|
25
|
+
|
|
26
|
+
// Wrap an LLM call — latency and token usage are captured automatically
|
|
27
|
+
const response = await step.trackLlm({
|
|
28
|
+
provider: 'anthropic',
|
|
29
|
+
model: 'claude-sonnet-4-6',
|
|
30
|
+
fn: () => anthropic.messages.create({ ... }),
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
// Wrap a tool call
|
|
34
|
+
const result = await step.trackTool({
|
|
35
|
+
toolName: 'search_web',
|
|
36
|
+
fn: () => searchWeb(query),
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
await step.end();
|
|
40
|
+
await run.end();
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Configuration
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
const sensu = new SensuClient({
|
|
47
|
+
apiKey: 'sns_live_...', // Required. Your Sensu API key
|
|
48
|
+
agentId: 'my-agent', // Required. Identifies this agent in the dashboard
|
|
49
|
+
baseUrl: 'https://...', // Default: http://localhost:3001
|
|
50
|
+
orgId: '', // Optional. Populated automatically from your API key
|
|
51
|
+
batchSize: 10, // Flush after N events (default: 10)
|
|
52
|
+
flushIntervalMs: 2000, // Flush every N ms (default: 2000)
|
|
53
|
+
disabled: false, // Set true to disable all telemetry (e.g. in tests)
|
|
54
|
+
});
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
You can also load config from environment variables:
|
|
58
|
+
|
|
59
|
+
```ts
|
|
60
|
+
const sensu = new SensuClient({ fromEnv: true });
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
| Variable | Description |
|
|
64
|
+
|---|---|
|
|
65
|
+
| `SENSU_API_KEY` | Your Sensu API key |
|
|
66
|
+
| `SENSU_AGENT_ID` | Agent identifier |
|
|
67
|
+
| `SENSU_BASE_URL` | API base URL |
|
|
68
|
+
| `SENSU_ORG_ID` | Organisation ID (optional) |
|
|
69
|
+
|
|
70
|
+
## API
|
|
71
|
+
|
|
72
|
+
### `SensuClient`
|
|
73
|
+
|
|
74
|
+
| Method | Description |
|
|
75
|
+
|---|---|
|
|
76
|
+
| `startRun(opts?)` | Start a new agent run. Returns a `RunHandle`. |
|
|
77
|
+
| `flush()` | Manually flush buffered events to the API. |
|
|
78
|
+
| `destroy()` | Stop the background flush timer. |
|
|
79
|
+
|
|
80
|
+
### `RunHandle`
|
|
81
|
+
|
|
82
|
+
| Method | Description |
|
|
83
|
+
|---|---|
|
|
84
|
+
| `startStep(opts?)` | Start a step within the run. Returns a `StepHandle`. |
|
|
85
|
+
| `end(status?)` | End the run. `status` is `'completed'` (default) or `'failed'`. |
|
|
86
|
+
|
|
87
|
+
### `StepHandle`
|
|
88
|
+
|
|
89
|
+
| Method | Description |
|
|
90
|
+
|---|---|
|
|
91
|
+
| `trackLlm(opts)` | Wrap an LLM call — measures latency and extracts token usage from the response. |
|
|
92
|
+
| `recordLlm(opts)` | Emit a raw LLM event when you already have the stats. |
|
|
93
|
+
| `trackTool(opts)` | Wrap a tool call — measures latency and output size. |
|
|
94
|
+
| `end()` | End the step. |
|
|
95
|
+
|
|
96
|
+
## Integrations
|
|
97
|
+
|
|
98
|
+
### OpenAI
|
|
99
|
+
|
|
100
|
+
Wrap the OpenAI client to track all completions automatically:
|
|
101
|
+
|
|
102
|
+
```ts
|
|
103
|
+
import { wrapOpenAI } from '@sensu-ai/sdk/integrations/openai';
|
|
104
|
+
import OpenAI from 'openai';
|
|
105
|
+
|
|
106
|
+
const openai = wrapOpenAI(new OpenAI({ apiKey }), {
|
|
107
|
+
client: sensu,
|
|
108
|
+
runHandle: run,
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
// All calls to openai.chat.completions.create() are now tracked
|
|
112
|
+
const response = await openai.chat.completions.create({ model: 'gpt-4o', ... });
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### LangChain
|
|
116
|
+
|
|
117
|
+
```ts
|
|
118
|
+
import { SensuCallbackHandler } from '@sensu-ai/sdk/integrations/langchain';
|
|
119
|
+
|
|
120
|
+
const handler = new SensuCallbackHandler({ client: sensu, runHandle: run });
|
|
121
|
+
const chain = new LLMChain({ llm, prompt, callbacks: [handler] });
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Supported models (cost estimation)
|
|
125
|
+
|
|
126
|
+
The SDK automatically estimates cost for the following models:
|
|
127
|
+
|
|
128
|
+
- Anthropic: `claude-opus-4-6`, `claude-sonnet-4-6`, `claude-haiku-4-5`, `claude-3-5-sonnet`, `claude-3-5-haiku`, `claude-3-opus`
|
|
129
|
+
- OpenAI: `gpt-4o`, `gpt-4o-mini`, `gpt-4-turbo`
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { TelemetryEvent } from '@sensu-ai/shared';
|
|
2
|
+
import type { SensuClientOptions, StartRunOptions, StartStepOptions, TrackLlmOptions, TrackToolOptions, RawLlmCallOptions } from './types.js';
|
|
3
|
+
export declare class StepHandle {
|
|
4
|
+
private readonly client;
|
|
5
|
+
readonly stepId: string;
|
|
6
|
+
readonly runId: string;
|
|
7
|
+
readonly sessionId: string;
|
|
8
|
+
readonly agentId: string;
|
|
9
|
+
readonly orgId: string;
|
|
10
|
+
readonly traceId: string;
|
|
11
|
+
readonly spanId: string;
|
|
12
|
+
private sequence;
|
|
13
|
+
private stepName?;
|
|
14
|
+
private ended;
|
|
15
|
+
constructor(client: SensuClient, opts: {
|
|
16
|
+
stepId: string;
|
|
17
|
+
runId: string;
|
|
18
|
+
sessionId: string;
|
|
19
|
+
agentId: string;
|
|
20
|
+
orgId: string;
|
|
21
|
+
traceId: string;
|
|
22
|
+
spanId: string;
|
|
23
|
+
sequence: number;
|
|
24
|
+
name?: string;
|
|
25
|
+
});
|
|
26
|
+
private base;
|
|
27
|
+
/** Track an LLM call — wraps fn(), measures latency, emits event */
|
|
28
|
+
trackLlm(opts: TrackLlmOptions): Promise<unknown>;
|
|
29
|
+
/** Emit a raw LLM call event (when you have the stats already) */
|
|
30
|
+
recordLlm(opts: RawLlmCallOptions): void;
|
|
31
|
+
/** Track a tool call — wraps fn(), measures latency */
|
|
32
|
+
trackTool(opts: TrackToolOptions): Promise<unknown>;
|
|
33
|
+
end(): Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
export declare class RunHandle {
|
|
36
|
+
private readonly client;
|
|
37
|
+
readonly runId: string;
|
|
38
|
+
readonly sessionId: string;
|
|
39
|
+
readonly agentId: string;
|
|
40
|
+
readonly orgId: string;
|
|
41
|
+
readonly traceId: string;
|
|
42
|
+
readonly spanId: string;
|
|
43
|
+
private stepCount;
|
|
44
|
+
private ended;
|
|
45
|
+
constructor(client: SensuClient, opts: {
|
|
46
|
+
runId: string;
|
|
47
|
+
sessionId: string;
|
|
48
|
+
agentId: string;
|
|
49
|
+
orgId: string;
|
|
50
|
+
traceId: string;
|
|
51
|
+
spanId: string;
|
|
52
|
+
});
|
|
53
|
+
private base;
|
|
54
|
+
startStep(opts?: StartStepOptions): StepHandle;
|
|
55
|
+
end(status?: 'completed' | 'failed'): Promise<void>;
|
|
56
|
+
}
|
|
57
|
+
export declare class SensuClient {
|
|
58
|
+
private readonly apiKey;
|
|
59
|
+
private readonly baseUrl;
|
|
60
|
+
private readonly agentId;
|
|
61
|
+
private readonly orgId;
|
|
62
|
+
private readonly batchSize;
|
|
63
|
+
private readonly flushIntervalMs;
|
|
64
|
+
readonly disabled: boolean;
|
|
65
|
+
private buffer;
|
|
66
|
+
private flushTimer;
|
|
67
|
+
constructor(opts?: SensuClientOptions);
|
|
68
|
+
/** Enqueue an event for batched sending */
|
|
69
|
+
enqueue(event: TelemetryEvent): void;
|
|
70
|
+
/** Flush all buffered events to the Sensu API */
|
|
71
|
+
flush(): Promise<void>;
|
|
72
|
+
/** Start a new agent run */
|
|
73
|
+
startRun(opts?: StartRunOptions): RunHandle;
|
|
74
|
+
destroy(): void;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACjE,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LangChain callback handler for Sensu telemetry.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* import { SensuCallbackHandler } from '@sensu-ai/sdk/integrations/langchain';
|
|
6
|
+
* const handler = new SensuCallbackHandler({ client: sensu });
|
|
7
|
+
* const chain = new LLMChain({ ..., callbacks: [handler] });
|
|
8
|
+
*/
|
|
9
|
+
import type { SensuClient } from '../client.ts';
|
|
10
|
+
interface LangChainCallbackHandlerOptions {
|
|
11
|
+
client: SensuClient;
|
|
12
|
+
sessionId?: string;
|
|
13
|
+
runId?: string;
|
|
14
|
+
}
|
|
15
|
+
interface LangChainLlmStartInput {
|
|
16
|
+
name?: string;
|
|
17
|
+
[key: string]: unknown;
|
|
18
|
+
}
|
|
19
|
+
interface LangChainLlmEndOutput {
|
|
20
|
+
generations?: Array<Array<{
|
|
21
|
+
text?: string;
|
|
22
|
+
generationInfo?: Record<string, unknown>;
|
|
23
|
+
}>>;
|
|
24
|
+
llmOutput?: Record<string, unknown>;
|
|
25
|
+
}
|
|
26
|
+
export declare class SensuCallbackHandler {
|
|
27
|
+
private readonly client;
|
|
28
|
+
private readonly sessionId;
|
|
29
|
+
private runId;
|
|
30
|
+
private traceId;
|
|
31
|
+
private startTimes;
|
|
32
|
+
private toolStartTimes;
|
|
33
|
+
private stepIds;
|
|
34
|
+
constructor(opts: LangChainCallbackHandlerOptions);
|
|
35
|
+
private base;
|
|
36
|
+
handleChainStart(_chain: unknown, _inputs: unknown, runId: string): Promise<void>;
|
|
37
|
+
handleChainEnd(_outputs: unknown, runId: string): Promise<void>;
|
|
38
|
+
handleLLMStart(llm: LangChainLlmStartInput, _prompts: string[], runId: string): Promise<void>;
|
|
39
|
+
handleLLMEnd(output: LangChainLlmEndOutput, runId: string): Promise<void>;
|
|
40
|
+
handleLLMError(err: Error, runId: string): Promise<void>;
|
|
41
|
+
handleToolStart(_tool: unknown, _input: string, runId: string): Promise<void>;
|
|
42
|
+
handleToolEnd(output: string, runId: string): Promise<void>;
|
|
43
|
+
handleToolError(err: Error, runId: string): Promise<void>;
|
|
44
|
+
}
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=langchain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langchain.d.ts","sourceRoot":"","sources":["../../src/integrations/langchain.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,UAAU,+BAA+B;IACvC,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,sBAAsB;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,UAAU,qBAAqB;IAC7B,WAAW,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC,CAAC;IACxF,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,OAAO,CAAkC;gBAErC,IAAI,EAAE,+BAA+B;IAOjD,OAAO,CAAC,IAAI;IAcN,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM;IAajE,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM;IAW/C,cAAc,CAClB,GAAG,EAAE,sBAAsB,EAC3B,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM;IAYT,YAAY,CAAC,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM;IAsBzD,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;IAgBxC,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAU7D,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAgB3C,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;CAahD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI SDK wrapper for Sensu telemetry.
|
|
3
|
+
* Wraps the OpenAI client to automatically track all completions.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* import { wrapOpenAI } from '@sensu-ai/sdk/integrations/openai';
|
|
7
|
+
* const openai = wrapOpenAI(new OpenAI({ apiKey }), { client: sensu, runHandle });
|
|
8
|
+
* const resp = await openai.chat.completions.create({ ... }); // auto-tracked
|
|
9
|
+
*/
|
|
10
|
+
import type { SensuClient, RunHandle } from '../client.ts';
|
|
11
|
+
interface OpenAILike {
|
|
12
|
+
chat: {
|
|
13
|
+
completions: {
|
|
14
|
+
create: (params: unknown) => Promise<unknown>;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
interface WrapOpenAIOptions {
|
|
19
|
+
client: SensuClient;
|
|
20
|
+
runHandle?: RunHandle;
|
|
21
|
+
defaultModel?: string;
|
|
22
|
+
defaultProvider?: string;
|
|
23
|
+
}
|
|
24
|
+
export declare function wrapOpenAI<T extends OpenAILike>(openai: T, opts: WrapOpenAIOptions): T;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/integrations/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,UAAU,UAAU;IAClB,IAAI,EAAE;QACJ,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;SAC/C,CAAC;KACH,CAAC;CACH;AAED,UAAU,iBAAiB;IACzB,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAaD,wBAAgB,UAAU,CAAC,CAAC,SAAS,UAAU,EAC7C,MAAM,EAAE,CAAC,EACT,IAAI,EAAE,iBAAiB,GACtB,CAAC,CAmEH"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export interface SensuClientOptions {
|
|
2
|
+
apiKey?: string;
|
|
3
|
+
baseUrl?: string;
|
|
4
|
+
agentId?: string;
|
|
5
|
+
orgId?: string;
|
|
6
|
+
/** Read config from environment variables */
|
|
7
|
+
fromEnv?: boolean;
|
|
8
|
+
/** Flush buffer when this many events accumulate */
|
|
9
|
+
batchSize?: number;
|
|
10
|
+
/** Flush buffer every N milliseconds */
|
|
11
|
+
flushIntervalMs?: number;
|
|
12
|
+
/** Disable all telemetry (useful for tests) */
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface StartRunOptions {
|
|
16
|
+
sessionId?: string;
|
|
17
|
+
runType?: string;
|
|
18
|
+
endUserId?: string;
|
|
19
|
+
runId?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface StartStepOptions {
|
|
22
|
+
name?: string;
|
|
23
|
+
stepType?: string;
|
|
24
|
+
sequence?: number;
|
|
25
|
+
stepId?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface TrackLlmOptions {
|
|
28
|
+
provider: string;
|
|
29
|
+
model: string;
|
|
30
|
+
/** Wraps the LLM call and measures latency automatically */
|
|
31
|
+
fn: () => Promise<unknown>;
|
|
32
|
+
maxContextTokens?: number;
|
|
33
|
+
}
|
|
34
|
+
export interface LlmResult {
|
|
35
|
+
inputTokens?: number;
|
|
36
|
+
outputTokens?: number;
|
|
37
|
+
cachedInputTokens?: number;
|
|
38
|
+
totalTokens?: number;
|
|
39
|
+
costUsdEstimate?: number;
|
|
40
|
+
result: unknown;
|
|
41
|
+
}
|
|
42
|
+
export interface TrackToolOptions {
|
|
43
|
+
toolName: string;
|
|
44
|
+
fn: () => Promise<unknown>;
|
|
45
|
+
}
|
|
46
|
+
export interface RawLlmCallOptions {
|
|
47
|
+
provider: string;
|
|
48
|
+
model: string;
|
|
49
|
+
inputTokens?: number;
|
|
50
|
+
outputTokens?: number;
|
|
51
|
+
cachedInputTokens?: number;
|
|
52
|
+
totalTokens?: number;
|
|
53
|
+
maxContextTokens?: number;
|
|
54
|
+
contextUsedTokens?: number;
|
|
55
|
+
latencyMs?: number;
|
|
56
|
+
ttftMs?: number;
|
|
57
|
+
costUsdEstimate?: number;
|
|
58
|
+
status?: 'success' | 'error' | 'timeout';
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,EAAE,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;CAC1C"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sensu-ai/sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./src/index.ts",
|
|
6
6
|
"exports": {
|
|
@@ -8,10 +8,6 @@
|
|
|
8
8
|
"./integrations/langchain": "./src/integrations/langchain.ts",
|
|
9
9
|
"./integrations/openai": "./src/integrations/openai.ts"
|
|
10
10
|
},
|
|
11
|
-
"scripts": {
|
|
12
|
-
"build": "tsc",
|
|
13
|
-
"dev": "tsc --watch"
|
|
14
|
-
},
|
|
15
11
|
"dependencies": {
|
|
16
12
|
"@sensu-ai/shared": "*",
|
|
17
13
|
"zod": "^3.23.8"
|
|
@@ -25,7 +21,15 @@
|
|
|
25
21
|
"openai": ">=4.0.0"
|
|
26
22
|
},
|
|
27
23
|
"peerDependenciesMeta": {
|
|
28
|
-
"langchain": {
|
|
29
|
-
|
|
24
|
+
"langchain": {
|
|
25
|
+
"optional": true
|
|
26
|
+
},
|
|
27
|
+
"openai": {
|
|
28
|
+
"optional": true
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "tsc",
|
|
33
|
+
"dev": "tsc --watch"
|
|
30
34
|
}
|
|
31
|
-
}
|
|
35
|
+
}
|