@lightcurve/sdk 0.1.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.
- package/dist/buffer.d.ts +14 -0
- package/dist/buffer.js +56 -0
- package/dist/client.d.ts +22 -0
- package/dist/client.js +68 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +21 -0
- package/dist/tracer.d.ts +21 -0
- package/dist/tracer.js +156 -0
- package/dist/transport.d.ts +11 -0
- package/dist/transport.js +54 -0
- package/dist/types.d.ts +25 -0
- package/dist/types.js +2 -0
- package/package.json +35 -0
package/dist/buffer.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { CognitionEvent } from './types';
|
|
2
|
+
export declare class EventBuffer {
|
|
3
|
+
private queue;
|
|
4
|
+
private apiUrl;
|
|
5
|
+
private apiKey?;
|
|
6
|
+
private batchSize;
|
|
7
|
+
private flushInterval;
|
|
8
|
+
private intervalId?;
|
|
9
|
+
constructor(apiUrl: string, apiKey?: string, batchSize?: number, flushInterval?: number);
|
|
10
|
+
add(event: CognitionEvent): void;
|
|
11
|
+
private start;
|
|
12
|
+
flush(): Promise<void>;
|
|
13
|
+
stop(): void;
|
|
14
|
+
}
|
package/dist/buffer.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EventBuffer = void 0;
|
|
4
|
+
class EventBuffer {
|
|
5
|
+
constructor(apiUrl, apiKey, batchSize = 10, flushInterval = 2000) {
|
|
6
|
+
this.queue = [];
|
|
7
|
+
this.apiUrl = apiUrl;
|
|
8
|
+
this.apiKey = apiKey;
|
|
9
|
+
this.batchSize = batchSize;
|
|
10
|
+
this.flushInterval = flushInterval;
|
|
11
|
+
this.start();
|
|
12
|
+
}
|
|
13
|
+
add(event) {
|
|
14
|
+
this.queue.push(event);
|
|
15
|
+
if (this.queue.length >= this.batchSize) {
|
|
16
|
+
this.flush();
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
start() {
|
|
20
|
+
this.intervalId = setInterval(() => {
|
|
21
|
+
if (this.queue.length > 0) {
|
|
22
|
+
this.flush();
|
|
23
|
+
}
|
|
24
|
+
}, this.flushInterval);
|
|
25
|
+
}
|
|
26
|
+
async flush() {
|
|
27
|
+
if (this.queue.length === 0)
|
|
28
|
+
return;
|
|
29
|
+
const batch = [...this.queue];
|
|
30
|
+
this.queue = []; // Clear queue immediately
|
|
31
|
+
try {
|
|
32
|
+
const response = await fetch(`${this.apiUrl}/v1/ingest`, {
|
|
33
|
+
method: 'POST',
|
|
34
|
+
headers: {
|
|
35
|
+
'Content-Type': 'application/json',
|
|
36
|
+
...(this.apiKey ? { 'Authorization': `Bearer ${this.apiKey}` } : {}),
|
|
37
|
+
},
|
|
38
|
+
body: JSON.stringify({ events: batch }),
|
|
39
|
+
});
|
|
40
|
+
if (!response.ok) {
|
|
41
|
+
console.error(`[Lightcurve] Failed to flush events: ${response.statusText}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
console.error('[Lightcurve] Error flushing events:', error);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
stop() {
|
|
49
|
+
if (this.intervalId) {
|
|
50
|
+
clearInterval(this.intervalId);
|
|
51
|
+
}
|
|
52
|
+
// Flush remaining
|
|
53
|
+
this.flush();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.EventBuffer = EventBuffer;
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { EventBuffer } from './buffer';
|
|
2
|
+
export declare class Lightcurve {
|
|
3
|
+
private buffer;
|
|
4
|
+
constructor(apiUrl?: string, apiKey?: string);
|
|
5
|
+
startRun(agentId: string, runId?: string, orgId?: string): Run;
|
|
6
|
+
close(): void;
|
|
7
|
+
}
|
|
8
|
+
export declare class Run {
|
|
9
|
+
private buffer;
|
|
10
|
+
runId: string;
|
|
11
|
+
agentId: string;
|
|
12
|
+
orgId?: string | undefined;
|
|
13
|
+
constructor(buffer: EventBuffer, runId: string, agentId: string, orgId?: string | undefined);
|
|
14
|
+
private log;
|
|
15
|
+
logInput(userInput: string, interpretedGoal?: string, constraints?: string[]): void;
|
|
16
|
+
logKnowledge(summary: string, evidencePresent?: boolean, sources?: string[]): void;
|
|
17
|
+
logPlan(steps: string[], rationale?: string, alternatives?: string[]): void;
|
|
18
|
+
logTool(toolName: string, input: Record<string, any>, output?: Record<string, any>, success?: boolean, retries?: number, latencyMs?: number): void;
|
|
19
|
+
logValidation(result: boolean, method?: string, confidenceScore?: number): void;
|
|
20
|
+
logOutput(content: string, structuredData?: Record<string, any>, confidence?: number): void;
|
|
21
|
+
end(): void;
|
|
22
|
+
}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Run = exports.Lightcurve = void 0;
|
|
4
|
+
const uuid_1 = require("uuid");
|
|
5
|
+
const buffer_1 = require("./buffer");
|
|
6
|
+
class Lightcurve {
|
|
7
|
+
constructor(apiUrl = 'http://localhost:8000', apiKey) {
|
|
8
|
+
this.buffer = new buffer_1.EventBuffer(apiUrl, apiKey);
|
|
9
|
+
}
|
|
10
|
+
startRun(agentId, runId, orgId) {
|
|
11
|
+
const id = runId || (0, uuid_1.v4)();
|
|
12
|
+
return new Run(this.buffer, id, agentId, orgId);
|
|
13
|
+
}
|
|
14
|
+
close() {
|
|
15
|
+
this.buffer.stop();
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.Lightcurve = Lightcurve;
|
|
19
|
+
class Run {
|
|
20
|
+
constructor(buffer, runId, agentId, orgId) {
|
|
21
|
+
this.buffer = buffer;
|
|
22
|
+
this.runId = runId;
|
|
23
|
+
this.agentId = agentId;
|
|
24
|
+
this.orgId = orgId;
|
|
25
|
+
}
|
|
26
|
+
log(type, data, incidentFlags) {
|
|
27
|
+
const event = {
|
|
28
|
+
run_id: this.runId,
|
|
29
|
+
agent_id: this.agentId,
|
|
30
|
+
org_id: this.orgId,
|
|
31
|
+
timestamp: new Date().toISOString(),
|
|
32
|
+
type,
|
|
33
|
+
data,
|
|
34
|
+
incident_flags: incidentFlags,
|
|
35
|
+
};
|
|
36
|
+
this.buffer.add(event);
|
|
37
|
+
}
|
|
38
|
+
logInput(userInput, interpretedGoal, constraints = []) {
|
|
39
|
+
const data = { user_input: userInput, interpreted_goal: interpretedGoal, constraints };
|
|
40
|
+
this.log('input', data);
|
|
41
|
+
}
|
|
42
|
+
logKnowledge(summary, evidencePresent = false, sources = []) {
|
|
43
|
+
const data = { summary, evidence_present: evidencePresent, sources };
|
|
44
|
+
this.log('knowledge', data);
|
|
45
|
+
}
|
|
46
|
+
logPlan(steps, rationale, alternatives = []) {
|
|
47
|
+
const data = { steps, rationale, alternatives };
|
|
48
|
+
this.log('plan', data);
|
|
49
|
+
}
|
|
50
|
+
logTool(toolName, input, output, success = true, retries = 0, latencyMs) {
|
|
51
|
+
const data = {
|
|
52
|
+
tool_name: toolName, input, output, success, retries, latency_ms: latencyMs
|
|
53
|
+
};
|
|
54
|
+
this.log('tool', data);
|
|
55
|
+
}
|
|
56
|
+
logValidation(result, method = 'auto', confidenceScore) {
|
|
57
|
+
const data = { result, method, confidence_score: confidenceScore };
|
|
58
|
+
this.log('validation', data);
|
|
59
|
+
}
|
|
60
|
+
logOutput(content, structuredData, confidence) {
|
|
61
|
+
const data = { content, structured_data: structuredData, confidence };
|
|
62
|
+
this.log('output', data);
|
|
63
|
+
}
|
|
64
|
+
end() {
|
|
65
|
+
this.buffer.flush();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.Run = Run;
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.Tracer = exports.tracer = void 0;
|
|
18
|
+
__exportStar(require("./types"), exports);
|
|
19
|
+
var tracer_1 = require("./tracer");
|
|
20
|
+
Object.defineProperty(exports, "tracer", { enumerable: true, get: function () { return tracer_1.tracer; } });
|
|
21
|
+
Object.defineProperty(exports, "Tracer", { enumerable: true, get: function () { return tracer_1.Tracer; } });
|
package/dist/tracer.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare const COGNITIVE_PHASES: Set<string>;
|
|
2
|
+
export interface TraceOptions {
|
|
3
|
+
name?: string;
|
|
4
|
+
project?: string;
|
|
5
|
+
tags?: Record<string, any>;
|
|
6
|
+
}
|
|
7
|
+
export declare class Tracer {
|
|
8
|
+
private transport?;
|
|
9
|
+
private storage;
|
|
10
|
+
private apiKey?;
|
|
11
|
+
private project?;
|
|
12
|
+
init(options?: {
|
|
13
|
+
apiKey?: string;
|
|
14
|
+
apiUrl?: string;
|
|
15
|
+
project?: string;
|
|
16
|
+
}): void;
|
|
17
|
+
trace(options?: TraceOptions): <T extends (...args: any[]) => any>(fn: T) => T;
|
|
18
|
+
step(name: string, metadata?: Record<string, any>): ((fn: Function) => any) | (<T>(fn: () => Promise<T> | T) => Promise<T>);
|
|
19
|
+
cognitive(phase: string, name?: string): ((fn: Function) => any) | (<T>(fn: () => Promise<T> | T) => Promise<T>);
|
|
20
|
+
}
|
|
21
|
+
export declare const tracer: Tracer;
|
package/dist/tracer.js
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tracer = exports.Tracer = exports.COGNITIVE_PHASES = void 0;
|
|
4
|
+
const async_hooks_1 = require("async_hooks");
|
|
5
|
+
const uuid_1 = require("uuid");
|
|
6
|
+
const transport_1 = require("./transport");
|
|
7
|
+
exports.COGNITIVE_PHASES = new Set([
|
|
8
|
+
"planning",
|
|
9
|
+
"goal_decomposition",
|
|
10
|
+
"reflection",
|
|
11
|
+
"self_critique",
|
|
12
|
+
"tool_selection",
|
|
13
|
+
"validation",
|
|
14
|
+
"synthesis"
|
|
15
|
+
]);
|
|
16
|
+
class Tracer {
|
|
17
|
+
constructor() {
|
|
18
|
+
this.storage = new async_hooks_1.AsyncLocalStorage();
|
|
19
|
+
}
|
|
20
|
+
init(options = {}) {
|
|
21
|
+
this.apiKey = options.apiKey || process.env.LIGHTCURVE_API_KEY;
|
|
22
|
+
this.project = options.project;
|
|
23
|
+
this.transport = new transport_1.BackgroundTransport(this.apiKey, options.apiUrl);
|
|
24
|
+
}
|
|
25
|
+
trace(options = {}) {
|
|
26
|
+
return (fn) => {
|
|
27
|
+
return ((...args) => {
|
|
28
|
+
const transport = this.transport;
|
|
29
|
+
if (!transport) {
|
|
30
|
+
return fn(...args);
|
|
31
|
+
}
|
|
32
|
+
const runId = (0, uuid_1.v4)();
|
|
33
|
+
const start = Date.now();
|
|
34
|
+
const steps = [];
|
|
35
|
+
const runName = options.name || fn.name || "anonymous";
|
|
36
|
+
return this.storage.run(steps, async () => {
|
|
37
|
+
let status = "success";
|
|
38
|
+
let output = null;
|
|
39
|
+
let errorMsg;
|
|
40
|
+
try {
|
|
41
|
+
const result = await fn(...args);
|
|
42
|
+
output = { return_value: JSON.stringify(result) }; // Simplify
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
status = "failure";
|
|
47
|
+
errorMsg = e.message || String(e);
|
|
48
|
+
output = { error: errorMsg };
|
|
49
|
+
throw e;
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
const duration = Date.now() - start;
|
|
53
|
+
const payload = {
|
|
54
|
+
run_id: runId,
|
|
55
|
+
name: runName,
|
|
56
|
+
project: options.project || this.project,
|
|
57
|
+
started_at: new Date(start).toISOString(),
|
|
58
|
+
duration_ms: duration,
|
|
59
|
+
status,
|
|
60
|
+
input: { args: args.map(a => String(a)) },
|
|
61
|
+
output,
|
|
62
|
+
steps: [...steps],
|
|
63
|
+
metadata: options.tags,
|
|
64
|
+
exception: errorMsg
|
|
65
|
+
};
|
|
66
|
+
transport.send(payload);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
step(name, metadata) {
|
|
73
|
+
const store = this.storage.getStore();
|
|
74
|
+
if (!store) {
|
|
75
|
+
// Not in a trace, return dummy
|
|
76
|
+
return (fn) => fn();
|
|
77
|
+
}
|
|
78
|
+
const start = Date.now();
|
|
79
|
+
// Return a wrapper that expects a function or promise?
|
|
80
|
+
// Python `with tracer.step()` is synchronous block or context manager.
|
|
81
|
+
// Node.js:
|
|
82
|
+
// await tracer.step("name", async () => { ... })
|
|
83
|
+
return async (fn) => {
|
|
84
|
+
let status = "success";
|
|
85
|
+
let output = {};
|
|
86
|
+
try {
|
|
87
|
+
return await fn();
|
|
88
|
+
}
|
|
89
|
+
catch (e) {
|
|
90
|
+
status = "failure";
|
|
91
|
+
output = { error: e.message };
|
|
92
|
+
throw e;
|
|
93
|
+
}
|
|
94
|
+
finally {
|
|
95
|
+
const duration = Date.now() - start;
|
|
96
|
+
store.push({
|
|
97
|
+
name,
|
|
98
|
+
type: "custom",
|
|
99
|
+
status,
|
|
100
|
+
started_at: new Date(start).toISOString(),
|
|
101
|
+
duration_ms: duration,
|
|
102
|
+
metadata,
|
|
103
|
+
output
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
cognitive(phase, name) {
|
|
109
|
+
if (!exports.COGNITIVE_PHASES.has(phase)) {
|
|
110
|
+
console.warn(`Warning: Unknown cognitive phase '${phase}'. Expected one of: ${Array.from(exports.COGNITIVE_PHASES).join(', ')}`);
|
|
111
|
+
}
|
|
112
|
+
const store = this.storage.getStore();
|
|
113
|
+
if (!store) {
|
|
114
|
+
return (fn) => fn();
|
|
115
|
+
}
|
|
116
|
+
const start = Date.now();
|
|
117
|
+
return async (fn) => {
|
|
118
|
+
let status = "success";
|
|
119
|
+
let output = {};
|
|
120
|
+
try {
|
|
121
|
+
return await fn();
|
|
122
|
+
}
|
|
123
|
+
catch (e) {
|
|
124
|
+
status = "failure";
|
|
125
|
+
output = { error: e.message };
|
|
126
|
+
throw e;
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
const duration = Date.now() - start;
|
|
130
|
+
// Map to backend stage
|
|
131
|
+
const stageMapCognitive = {
|
|
132
|
+
"planning": "task_specification",
|
|
133
|
+
"goal_decomposition": "task_specification",
|
|
134
|
+
"reflection": "validation",
|
|
135
|
+
"self_critique": "validation",
|
|
136
|
+
"validation": "validation",
|
|
137
|
+
"tool_selection": "tool_call",
|
|
138
|
+
"synthesis": "output"
|
|
139
|
+
};
|
|
140
|
+
const stage = stageMapCognitive[phase] || "execution_strategy";
|
|
141
|
+
store.push({
|
|
142
|
+
name: name || phase,
|
|
143
|
+
type: "cognitive",
|
|
144
|
+
stage: stage,
|
|
145
|
+
cognitive_type: phase,
|
|
146
|
+
status,
|
|
147
|
+
started_at: new Date(start).toISOString(),
|
|
148
|
+
duration_ms: duration,
|
|
149
|
+
output
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
exports.Tracer = Tracer;
|
|
156
|
+
exports.tracer = new Tracer();
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { RunPayload } from './types';
|
|
2
|
+
export declare class BackgroundTransport {
|
|
3
|
+
private queue;
|
|
4
|
+
private processing;
|
|
5
|
+
private apiKey?;
|
|
6
|
+
private apiUrl;
|
|
7
|
+
constructor(apiKey?: string, apiUrl?: string);
|
|
8
|
+
send(payload: RunPayload): void;
|
|
9
|
+
private processQueue;
|
|
10
|
+
private postPayload;
|
|
11
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BackgroundTransport = void 0;
|
|
4
|
+
class BackgroundTransport {
|
|
5
|
+
constructor(apiKey, apiUrl = "http://localhost:8000") {
|
|
6
|
+
this.queue = [];
|
|
7
|
+
this.processing = false;
|
|
8
|
+
this.apiKey = apiKey;
|
|
9
|
+
this.apiUrl = apiUrl.replace(/\/$/, "");
|
|
10
|
+
}
|
|
11
|
+
send(payload) {
|
|
12
|
+
this.queue.push(payload);
|
|
13
|
+
this.processQueue();
|
|
14
|
+
}
|
|
15
|
+
async processQueue() {
|
|
16
|
+
if (this.processing || this.queue.length === 0)
|
|
17
|
+
return;
|
|
18
|
+
this.processing = true;
|
|
19
|
+
try {
|
|
20
|
+
while (this.queue.length > 0) {
|
|
21
|
+
const payload = this.queue.shift();
|
|
22
|
+
if (payload) {
|
|
23
|
+
await this.postPayload(payload);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
finally {
|
|
28
|
+
this.processing = false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async postPayload(payload) {
|
|
32
|
+
const url = `${this.apiUrl}/v1/traces`;
|
|
33
|
+
const headers = {
|
|
34
|
+
"Content-Type": "application/json",
|
|
35
|
+
"X-Lightcurve-Key": this.apiKey || ""
|
|
36
|
+
};
|
|
37
|
+
if (this.apiKey) {
|
|
38
|
+
headers["Authorization"] = `Bearer ${this.apiKey}`;
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
// Using global fetch (Node 18+)
|
|
42
|
+
await fetch(url, {
|
|
43
|
+
method: "POST",
|
|
44
|
+
headers,
|
|
45
|
+
body: JSON.stringify(payload)
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
// Silent retry/fail
|
|
50
|
+
// console.error("Failed to send trace", e);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.BackgroundTransport = BackgroundTransport;
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface StepPayload {
|
|
2
|
+
name: string;
|
|
3
|
+
type: string;
|
|
4
|
+
stage?: string;
|
|
5
|
+
cognitive_type?: string;
|
|
6
|
+
status: string;
|
|
7
|
+
input?: Record<string, any>;
|
|
8
|
+
output?: Record<string, any>;
|
|
9
|
+
duration_ms?: number;
|
|
10
|
+
started_at?: string;
|
|
11
|
+
metadata?: Record<string, any>;
|
|
12
|
+
}
|
|
13
|
+
export interface RunPayload {
|
|
14
|
+
run_id: string;
|
|
15
|
+
name: string;
|
|
16
|
+
project?: string;
|
|
17
|
+
input?: Record<string, any>;
|
|
18
|
+
output?: Record<string, any>;
|
|
19
|
+
status: string;
|
|
20
|
+
duration_ms?: number;
|
|
21
|
+
started_at: string;
|
|
22
|
+
steps: StepPayload[];
|
|
23
|
+
metadata?: Record<string, any>;
|
|
24
|
+
exception?: string;
|
|
25
|
+
}
|
package/dist/types.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@lightcurve/sdk",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Observability and evaluation SDK for AI Agents",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"prepublishOnly": "npm run build"
|
|
13
|
+
},
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "git+https://github.com/uselightcurve/lightcurve-sdk.git"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"llm",
|
|
20
|
+
"agent",
|
|
21
|
+
"observability",
|
|
22
|
+
"ai"
|
|
23
|
+
],
|
|
24
|
+
"author": "Lightcurve Team",
|
|
25
|
+
"license": "MIT",
|
|
26
|
+
"dependencies": {
|
|
27
|
+
"axios": "^1.6.0",
|
|
28
|
+
"uuid": "^9.0.0"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"typescript": "^5.0.0",
|
|
32
|
+
"@types/node": "^20.0.0",
|
|
33
|
+
"@types/uuid": "^9.0.0"
|
|
34
|
+
}
|
|
35
|
+
}
|