@cicctencent/agent-server 0.2.67 → 0.2.69

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 (59) hide show
  1. package/dist/cjs/agent/agent-server.d.ts.map +1 -1
  2. package/dist/cjs/agent/agent-server.js +101 -15
  3. package/dist/cjs/agent/agent-server.js.map +1 -1
  4. package/dist/cjs/index.d.ts +5 -0
  5. package/dist/cjs/index.d.ts.map +1 -1
  6. package/dist/cjs/index.js +11 -3
  7. package/dist/cjs/index.js.map +1 -1
  8. package/dist/cjs/service/observability-exporter.d.ts +65 -0
  9. package/dist/cjs/service/observability-exporter.d.ts.map +1 -0
  10. package/dist/cjs/service/observability-exporter.js +438 -0
  11. package/dist/cjs/service/observability-exporter.js.map +1 -0
  12. package/dist/cjs/service/observability.service.d.ts +2 -0
  13. package/dist/cjs/service/observability.service.d.ts.map +1 -1
  14. package/dist/cjs/service/observability.service.js +4 -2
  15. package/dist/cjs/service/observability.service.js.map +1 -1
  16. package/dist/cjs/spi/index.d.ts +3 -0
  17. package/dist/cjs/spi/index.d.ts.map +1 -1
  18. package/dist/cjs/spi/index.js +6 -1
  19. package/dist/cjs/spi/index.js.map +1 -1
  20. package/dist/cjs/spi/observability-store.d.ts +67 -0
  21. package/dist/cjs/spi/observability-store.d.ts.map +1 -0
  22. package/dist/cjs/spi/observability-store.js +329 -0
  23. package/dist/cjs/spi/observability-store.js.map +1 -0
  24. package/dist/cjs/spi/store-sink-factory.d.ts +10 -0
  25. package/dist/cjs/spi/store-sink-factory.d.ts.map +1 -0
  26. package/dist/cjs/spi/store-sink-factory.js +134 -0
  27. package/dist/cjs/spi/store-sink-factory.js.map +1 -0
  28. package/dist/cjs/types.d.ts +8 -1
  29. package/dist/cjs/types.d.ts.map +1 -1
  30. package/dist/esm/agent/agent-server.d.ts.map +1 -1
  31. package/dist/esm/agent/agent-server.js +102 -16
  32. package/dist/esm/agent/agent-server.js.map +1 -1
  33. package/dist/esm/index.d.ts +5 -0
  34. package/dist/esm/index.d.ts.map +1 -1
  35. package/dist/esm/index.js +3 -0
  36. package/dist/esm/index.js.map +1 -1
  37. package/dist/esm/service/observability-exporter.d.ts +65 -0
  38. package/dist/esm/service/observability-exporter.d.ts.map +1 -0
  39. package/dist/esm/service/observability-exporter.js +399 -0
  40. package/dist/esm/service/observability-exporter.js.map +1 -0
  41. package/dist/esm/service/observability.service.d.ts +2 -0
  42. package/dist/esm/service/observability.service.d.ts.map +1 -1
  43. package/dist/esm/service/observability.service.js +2 -1
  44. package/dist/esm/service/observability.service.js.map +1 -1
  45. package/dist/esm/spi/index.d.ts +3 -0
  46. package/dist/esm/spi/index.d.ts.map +1 -1
  47. package/dist/esm/spi/index.js +3 -0
  48. package/dist/esm/spi/index.js.map +1 -1
  49. package/dist/esm/spi/observability-store.d.ts +67 -0
  50. package/dist/esm/spi/observability-store.d.ts.map +1 -0
  51. package/dist/esm/spi/observability-store.js +325 -0
  52. package/dist/esm/spi/observability-store.js.map +1 -0
  53. package/dist/esm/spi/store-sink-factory.d.ts +10 -0
  54. package/dist/esm/spi/store-sink-factory.d.ts.map +1 -0
  55. package/dist/esm/spi/store-sink-factory.js +131 -0
  56. package/dist/esm/spi/store-sink-factory.js.map +1 -0
  57. package/dist/esm/types.d.ts +8 -1
  58. package/dist/esm/types.d.ts.map +1 -1
  59. package/package.json +2 -2
@@ -0,0 +1,67 @@
1
+ import type { ObservationRecord, ObservabilityStats, ScoreRecord, SessionRecord, StatsQueryOptions, TraceQueryOptions, TraceRecord, ObservationQueryOptions } from '@cicctencent/agent-core';
2
+ export interface ObservabilityStoreProvider {
3
+ saveTrace(trace: TraceRecord): Promise<TraceRecord>;
4
+ updateTrace(traceId: string, data: Partial<TraceRecord>): Promise<void>;
5
+ getTraces(query: TraceQueryOptions): Promise<{
6
+ items: TraceRecord[];
7
+ total: number;
8
+ }>;
9
+ getTraceById(traceId: string): Promise<TraceRecord | null>;
10
+ saveObservation(observation: ObservationRecord): Promise<ObservationRecord>;
11
+ updateObservation(observationId: string, data: Partial<ObservationRecord>): Promise<void>;
12
+ getObservations(query: ObservationQueryOptions): Promise<{
13
+ items: ObservationRecord[];
14
+ total: number;
15
+ }>;
16
+ getObservationsByTrace(traceId: string): Promise<ObservationRecord[]>;
17
+ upsertSession(session: Partial<SessionRecord> & {
18
+ sessionId: string;
19
+ }): Promise<SessionRecord>;
20
+ getSessions(query: Partial<SessionRecord>): Promise<SessionRecord[]>;
21
+ saveScore(score: ScoreRecord): Promise<ScoreRecord>;
22
+ getScores(traceId: string): Promise<ScoreRecord[]>;
23
+ getStats(query: StatsQueryOptions): Promise<ObservabilityStats>;
24
+ cleanup(olderThanDays: number): Promise<number>;
25
+ setEnabled(enabled: boolean): void;
26
+ isEnabled(): boolean;
27
+ }
28
+ export declare class InMemoryObservabilityStore implements ObservabilityStoreProvider {
29
+ private traces;
30
+ private observations;
31
+ private scores;
32
+ private sessions;
33
+ private traceIndex;
34
+ private observationIndex;
35
+ private enabled;
36
+ private readonly maxTraces;
37
+ private readonly maxObservations;
38
+ constructor(maxTraces?: number, maxObservations?: number);
39
+ saveTrace(trace: TraceRecord): Promise<TraceRecord>;
40
+ updateTrace(traceId: string, data: Partial<TraceRecord>): Promise<void>;
41
+ getTraces(query: TraceQueryOptions): Promise<{
42
+ items: TraceRecord[];
43
+ total: number;
44
+ }>;
45
+ getTraceById(traceId: string): Promise<TraceRecord | null>;
46
+ saveObservation(observation: ObservationRecord): Promise<ObservationRecord>;
47
+ updateObservation(observationId: string, data: Partial<ObservationRecord>): Promise<void>;
48
+ getObservations(query: ObservationQueryOptions): Promise<{
49
+ items: ObservationRecord[];
50
+ total: number;
51
+ }>;
52
+ getObservationsByTrace(traceId: string): Promise<ObservationRecord[]>;
53
+ upsertSession(session: Partial<SessionRecord> & {
54
+ sessionId: string;
55
+ }): Promise<SessionRecord>;
56
+ getSessions(query: Partial<SessionRecord>): Promise<SessionRecord[]>;
57
+ saveScore(score: ScoreRecord): Promise<ScoreRecord>;
58
+ getScores(traceId: string): Promise<ScoreRecord[]>;
59
+ getStats(query: StatsQueryOptions): Promise<ObservabilityStats>;
60
+ cleanup(olderThanDays: number): Promise<number>;
61
+ setEnabled(enabled: boolean): void;
62
+ isEnabled(): boolean;
63
+ private filterTraces;
64
+ private computeGroups;
65
+ }
66
+ export type { ObservationRecord, ObservabilityStats, ScoreRecord, SessionRecord, StatsQueryOptions, TraceQueryOptions, TraceRecord, ObservationQueryOptions, ObservabilityUsage, ObservationType, ObservabilityStatus, } from '@cicctencent/agent-core';
67
+ //# sourceMappingURL=observability-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability-store.d.ts","sourceRoot":"","sources":["../../../src/spi/observability-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,325 @@
1
+ // ============================================================
2
+ // Observability SPI - ObservabilityStoreProvider interface
3
+ // ============================================================
4
+ // ============================================================
5
+ // InMemoryObservabilityStore - 默认内存环形缓冲实现
6
+ // ============================================================
7
+ export class InMemoryObservabilityStore {
8
+ traces = [];
9
+ observations = [];
10
+ scores = [];
11
+ sessions = new Map();
12
+ // Map 索引:将 updateTrace/updateObservation 从 O(n) 降为 O(1)
13
+ traceIndex = new Map(); // traceId -> traces 数组下标
14
+ observationIndex = new Map(); // observationId -> observations 数组下标
15
+ enabled = true;
16
+ maxTraces;
17
+ maxObservations;
18
+ constructor(maxTraces = 10000, maxObservations = 50000) {
19
+ this.maxTraces = maxTraces;
20
+ this.maxObservations = maxObservations;
21
+ }
22
+ async saveTrace(trace) {
23
+ if (!this.enabled)
24
+ return trace;
25
+ this.traces.push(trace);
26
+ this.traceIndex.set(trace.traceId, this.traces.length - 1);
27
+ if (this.traces.length > this.maxTraces) {
28
+ // 重建索引(仅在超限时触发,不频繁)
29
+ const removed = this.traces.splice(0, this.traces.length - this.maxTraces);
30
+ for (const r of removed)
31
+ this.traceIndex.delete(r.traceId);
32
+ // 重建剩余索引
33
+ this.traceIndex.clear();
34
+ for (let i = 0; i < this.traces.length; i++) {
35
+ this.traceIndex.set(this.traces[i].traceId, i);
36
+ }
37
+ }
38
+ return trace;
39
+ }
40
+ async updateTrace(traceId, data) {
41
+ if (!this.enabled)
42
+ return;
43
+ const idx = this.traceIndex.get(traceId);
44
+ if (idx != null && idx < this.traces.length && this.traces[idx]?.traceId === traceId) {
45
+ this.traces[idx] = { ...this.traces[idx], ...data };
46
+ }
47
+ }
48
+ async getTraces(query) {
49
+ const filtered = this.filterTraces(query);
50
+ const total = filtered.length;
51
+ const page = query.page ?? 1;
52
+ const pageSize = query.pageSize ?? 50;
53
+ const offset = query.offset ?? (page - 1) * pageSize;
54
+ const limit = query.limit ?? pageSize;
55
+ const items = filtered
56
+ .sort((a, b) => b.startTime - a.startTime)
57
+ .slice(offset, offset + limit);
58
+ return { items, total };
59
+ }
60
+ async getTraceById(traceId) {
61
+ const idx = this.traceIndex.get(traceId);
62
+ if (idx != null && idx < this.traces.length && this.traces[idx]?.traceId === traceId) {
63
+ return this.traces[idx];
64
+ }
65
+ return null;
66
+ }
67
+ async saveObservation(observation) {
68
+ if (!this.enabled)
69
+ return observation;
70
+ this.observations.push(observation);
71
+ this.observationIndex.set(observation.id, this.observations.length - 1);
72
+ if (this.observations.length > this.maxObservations) {
73
+ const removed = this.observations.splice(0, this.observations.length - this.maxObservations);
74
+ for (const r of removed)
75
+ this.observationIndex.delete(r.id);
76
+ this.observationIndex.clear();
77
+ for (let i = 0; i < this.observations.length; i++) {
78
+ this.observationIndex.set(this.observations[i].id, i);
79
+ }
80
+ }
81
+ return observation;
82
+ }
83
+ async updateObservation(observationId, data) {
84
+ if (!this.enabled)
85
+ return;
86
+ const idx = this.observationIndex.get(observationId);
87
+ if (idx != null && idx < this.observations.length && this.observations[idx]?.id === observationId) {
88
+ this.observations[idx] = { ...this.observations[idx], ...data };
89
+ }
90
+ }
91
+ async getObservations(query) {
92
+ let filtered = this.observations;
93
+ if (query.traceId)
94
+ filtered = filtered.filter(o => o.traceId === query.traceId);
95
+ if (query.type)
96
+ filtered = filtered.filter(o => o.type === query.type);
97
+ if (query.name)
98
+ filtered = filtered.filter(o => o.name === query.name);
99
+ if (query.status)
100
+ filtered = filtered.filter(o => o.status === query.status);
101
+ if (query.startTime)
102
+ filtered = filtered.filter(o => o.startTime >= query.startTime);
103
+ if (query.endTime)
104
+ filtered = filtered.filter(o => (o.endTime ?? o.startTime) <= query.endTime);
105
+ const total = filtered.length;
106
+ const page = query.page ?? 1;
107
+ const pageSize = query.pageSize ?? 50;
108
+ const offset = query.offset ?? (page - 1) * pageSize;
109
+ const limit = query.limit ?? pageSize;
110
+ const items = filtered
111
+ .sort((a, b) => a.startTime - b.startTime)
112
+ .slice(offset, offset + limit);
113
+ return { items, total };
114
+ }
115
+ async getObservationsByTrace(traceId) {
116
+ return this.observations
117
+ .filter(o => o.traceId === traceId)
118
+ .sort((a, b) => a.startTime - b.startTime);
119
+ }
120
+ async upsertSession(session) {
121
+ const existing = this.sessions.get(session.sessionId);
122
+ const updated = {
123
+ sessionId: session.sessionId,
124
+ userId: session.userId ?? existing?.userId,
125
+ threadId: session.threadId ?? existing?.threadId,
126
+ applicationId: session.applicationId ?? existing?.applicationId,
127
+ agentProfileId: session.agentProfileId ?? existing?.agentProfileId,
128
+ traceCount: (existing?.traceCount ?? 0) + 1,
129
+ firstSeenAt: existing?.firstSeenAt ?? Date.now(),
130
+ lastSeenAt: Date.now(),
131
+ metadata: { ...existing?.metadata, ...session.metadata },
132
+ };
133
+ this.sessions.set(session.sessionId, updated);
134
+ return updated;
135
+ }
136
+ async getSessions(query) {
137
+ let result = Array.from(this.sessions.values());
138
+ if (query.userId)
139
+ result = result.filter(s => s.userId === query.userId);
140
+ if (query.threadId)
141
+ result = result.filter(s => s.threadId === query.threadId);
142
+ if (query.applicationId)
143
+ result = result.filter(s => s.applicationId === query.applicationId);
144
+ return result.sort((a, b) => (b.lastSeenAt ?? 0) - (a.lastSeenAt ?? 0));
145
+ }
146
+ async saveScore(score) {
147
+ if (!this.enabled)
148
+ return score;
149
+ this.scores.push(score);
150
+ return score;
151
+ }
152
+ async getScores(traceId) {
153
+ return this.scores.filter(s => s.traceId === traceId);
154
+ }
155
+ async getStats(query) {
156
+ let traces = this.traces;
157
+ if (query.applicationId)
158
+ traces = traces.filter(t => t.applicationId == query.applicationId);
159
+ if (query.agentProfileId)
160
+ traces = traces.filter(t => t.agentProfileId == query.agentProfileId);
161
+ if (query.sessionId)
162
+ traces = traces.filter(t => t.sessionId === query.sessionId);
163
+ if (query.threadId)
164
+ traces = traces.filter(t => t.threadId == query.threadId);
165
+ if (query.userId)
166
+ traces = traces.filter(t => t.userId === query.userId);
167
+ if (query.startTime)
168
+ traces = traces.filter(t => t.startTime >= query.startTime);
169
+ if (query.endTime)
170
+ traces = traces.filter(t => (t.endTime ?? t.startTime) <= query.endTime);
171
+ const totalTraces = traces.length;
172
+ const successCount = traces.filter(t => t.status === 'ok').length;
173
+ const errorCount = traces.filter(t => t.status === 'error').length;
174
+ const timeoutCount = traces.filter(t => t.status === 'timeout').length;
175
+ const durations = traces.filter(t => t.durationMs != null).map(t => t.durationMs);
176
+ const avgDurationMs = durations.length > 0 ? durations.reduce((a, b) => a + b, 0) / durations.length : 0;
177
+ const traceIds = new Set(traces.map(t => t.traceId));
178
+ const traceObservations = this.observations.filter(o => traceIds.has(o.traceId));
179
+ const generationCount = traceObservations.filter(o => o.type === 'generation').length;
180
+ const toolCallCount = traceObservations.filter(o => o.name !== 'agent.iteration' && o.type === 'span').length;
181
+ const totalTokens = traces.reduce((sum, t) => {
182
+ const u = t.usage;
183
+ return sum + (u?.totalTokens ?? 0);
184
+ }, 0);
185
+ const totalCost = traces.reduce((sum, t) => sum + (t.cost ?? t.usage?.cost ?? 0), 0);
186
+ const stats = {
187
+ totalTraces,
188
+ totalObservations: traceObservations.length,
189
+ successCount,
190
+ errorCount,
191
+ timeoutCount,
192
+ successRate: totalTraces > 0 ? successCount / totalTraces : 0,
193
+ avgDurationMs,
194
+ totalTokens,
195
+ totalCost,
196
+ generationCount,
197
+ toolCallCount,
198
+ };
199
+ if (query.groupBy) {
200
+ stats.groups = this.computeGroups(traces, traceObservations, query.groupBy);
201
+ }
202
+ return stats;
203
+ }
204
+ async cleanup(olderThanDays) {
205
+ const cutoff = Date.now() - olderThanDays * 24 * 60 * 60 * 1000;
206
+ const beforeTraces = this.traces.length;
207
+ const beforeObs = this.observations.length;
208
+ const removedTraceIds = new Set();
209
+ this.traces = this.traces.filter(t => {
210
+ if (t.startTime < cutoff) {
211
+ removedTraceIds.add(t.traceId);
212
+ return false;
213
+ }
214
+ return true;
215
+ });
216
+ this.observations = this.observations.filter(o => !removedTraceIds.has(o.traceId));
217
+ this.scores = this.scores.filter(s => !removedTraceIds.has(s.traceId) || s.timestamp >= cutoff);
218
+ // 重建索引
219
+ this.traceIndex.clear();
220
+ for (let i = 0; i < this.traces.length; i++)
221
+ this.traceIndex.set(this.traces[i].traceId, i);
222
+ this.observationIndex.clear();
223
+ for (let i = 0; i < this.observations.length; i++)
224
+ this.observationIndex.set(this.observations[i].id, i);
225
+ return (beforeTraces - this.traces.length) + (beforeObs - this.observations.length);
226
+ }
227
+ setEnabled(enabled) {
228
+ this.enabled = enabled;
229
+ }
230
+ isEnabled() {
231
+ return this.enabled;
232
+ }
233
+ // ---- helpers ----
234
+ filterTraces(query) {
235
+ let result = this.traces;
236
+ if (query.traceId)
237
+ result = result.filter(t => t.traceId === query.traceId);
238
+ if (query.sessionId)
239
+ result = result.filter(t => t.sessionId === query.sessionId);
240
+ if (query.threadId)
241
+ result = result.filter(t => t.threadId == query.threadId);
242
+ if (query.applicationId)
243
+ result = result.filter(t => t.applicationId == query.applicationId);
244
+ if (query.agentProfileId)
245
+ result = result.filter(t => t.agentProfileId == query.agentProfileId);
246
+ if (query.userId)
247
+ result = result.filter(t => t.userId === query.userId);
248
+ if (query.status)
249
+ result = result.filter(t => t.status === query.status);
250
+ if (query.startTime)
251
+ result = result.filter(t => t.startTime >= query.startTime);
252
+ if (query.endTime)
253
+ result = result.filter(t => (t.endTime ?? t.startTime) <= query.endTime);
254
+ return result;
255
+ }
256
+ computeGroups(traces, observations, groupBy) {
257
+ const groups = new Map();
258
+ for (const trace of traces) {
259
+ let key;
260
+ switch (groupBy) {
261
+ case 'application':
262
+ key = String(trace.applicationId ?? 'unknown');
263
+ break;
264
+ case 'agent':
265
+ key = String(trace.agentProfileId ?? 'unknown');
266
+ break;
267
+ case 'model': {
268
+ const genObs = observations.find(o => o.traceId === trace.traceId && o.type === 'generation' && o.model);
269
+ key = genObs?.model || 'unknown';
270
+ break;
271
+ }
272
+ case 'tool': {
273
+ // tool grouping is per-observation, handled below
274
+ continue;
275
+ }
276
+ case 'status':
277
+ key = trace.status;
278
+ break;
279
+ case 'day': {
280
+ const d = new Date(trace.startTime);
281
+ key = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`;
282
+ break;
283
+ }
284
+ default:
285
+ key = 'unknown';
286
+ }
287
+ const g = groups.get(key) || { count: 0, successCount: 0, errorCount: 0, totalDuration: 0, totalTokens: 0, totalCost: 0 };
288
+ g.count++;
289
+ if (trace.status === 'ok')
290
+ g.successCount++;
291
+ if (trace.status === 'error')
292
+ g.errorCount++;
293
+ g.totalDuration += trace.durationMs ?? 0;
294
+ g.totalTokens += trace.usage?.totalTokens ?? 0;
295
+ g.totalCost += trace.cost ?? trace.usage?.cost ?? 0;
296
+ groups.set(key, g);
297
+ }
298
+ // tool grouping: iterate observations instead
299
+ if (groupBy === 'tool') {
300
+ for (const obs of observations) {
301
+ if (obs.type !== 'span' || obs.name === 'agent.iteration')
302
+ continue;
303
+ const key = obs.name;
304
+ const g = groups.get(key) || { count: 0, successCount: 0, errorCount: 0, totalDuration: 0, totalTokens: 0, totalCost: 0 };
305
+ g.count++;
306
+ if (obs.status === 'ok')
307
+ g.successCount++;
308
+ if (obs.status === 'error')
309
+ g.errorCount++;
310
+ g.totalDuration += obs.durationMs ?? 0;
311
+ groups.set(key, g);
312
+ }
313
+ }
314
+ return Array.from(groups.entries()).map(([key, g]) => ({
315
+ key,
316
+ count: g.count,
317
+ successCount: g.successCount,
318
+ errorCount: g.errorCount,
319
+ avgDurationMs: g.count > 0 ? g.totalDuration / g.count : 0,
320
+ totalTokens: g.totalTokens,
321
+ totalCost: g.totalCost,
322
+ }));
323
+ }
324
+ }
325
+ //# sourceMappingURL=observability-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability-store.js","sourceRoot":"","sources":["../../../src/spi/observability-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { ObservabilitySink } from '@cicctencent/agent-core';
2
+ import type { ObservabilityStoreProvider } from './observability-store.js';
3
+ /**
4
+ * 创建一个将数据转发到 ObservabilityStoreProvider 的 Sink 实现。
5
+ * 所有方法吞掉错误,不影响主业务流程。
6
+ *
7
+ * 共享实现,供 agent-server 和 work-client 复用,避免代码重复。
8
+ */
9
+ export declare function createStoreSink(provider: ObservabilityStoreProvider): ObservabilitySink;
10
+ //# sourceMappingURL=store-sink-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-sink-factory.d.ts","sourceRoot":"","sources":["../../../src/spi/store-sink-factory.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAE3E;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,0BAA0B,GAAG,iBAAiB,CAuHvF"}
@@ -0,0 +1,131 @@
1
+ // ============================================================
2
+ // storeSink factory - 创建转发到 ObservabilityStoreProvider 的 Sink
3
+ // ============================================================
4
+ /**
5
+ * 创建一个将数据转发到 ObservabilityStoreProvider 的 Sink 实现。
6
+ * 所有方法吞掉错误,不影响主业务流程。
7
+ *
8
+ * 共享实现,供 agent-server 和 work-client 复用,避免代码重复。
9
+ */
10
+ export function createStoreSink(provider) {
11
+ return {
12
+ async startTrace(ctx) {
13
+ const traceId = ctx.traceId || `trace_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
14
+ const startTime = Date.now();
15
+ try {
16
+ await provider.saveTrace({
17
+ traceId,
18
+ sessionId: ctx.sessionId,
19
+ threadId: ctx.threadId,
20
+ applicationId: ctx.applicationId,
21
+ agentProfileId: ctx.agentProfileId,
22
+ userId: ctx.userId,
23
+ name: ctx.name,
24
+ input: ctx.input,
25
+ status: 'active',
26
+ startTime,
27
+ metadata: ctx.metadata,
28
+ });
29
+ if (ctx.sessionId) {
30
+ await provider.upsertSession({
31
+ sessionId: ctx.sessionId,
32
+ userId: ctx.userId,
33
+ threadId: ctx.threadId,
34
+ applicationId: ctx.applicationId,
35
+ agentProfileId: ctx.agentProfileId,
36
+ }).catch(() => { });
37
+ }
38
+ }
39
+ catch (e) {
40
+ console.warn('[Observability] startTrace failed:', e instanceof Error ? e.message : e);
41
+ }
42
+ return { traceId, startTime, sampled: true };
43
+ },
44
+ async endTrace(traceId, data) {
45
+ try {
46
+ const endTime = Date.now();
47
+ await provider.updateTrace(traceId, {
48
+ output: data?.output,
49
+ status: data?.status ?? 'ok',
50
+ endTime,
51
+ durationMs: data?.startTime != null ? endTime - data.startTime : undefined,
52
+ usage: data?.usage,
53
+ cost: data?.cost,
54
+ error: data?.error,
55
+ });
56
+ }
57
+ catch (e) {
58
+ console.warn('[Observability] endTrace failed:', e instanceof Error ? e.message : e);
59
+ }
60
+ },
61
+ async startObservation(ctx) {
62
+ const observationId = `obs_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
63
+ const startTime = Date.now();
64
+ try {
65
+ await provider.saveObservation({
66
+ id: observationId,
67
+ traceId: ctx.traceId || '',
68
+ parentObservationId: ctx.parentObservationId,
69
+ type: ctx.type,
70
+ name: ctx.name,
71
+ model: ctx.model,
72
+ provider: ctx.provider,
73
+ input: ctx.input,
74
+ status: 'active',
75
+ startTime,
76
+ metadata: ctx.metadata,
77
+ });
78
+ }
79
+ catch (e) {
80
+ console.warn('[Observability] startObservation failed:', e instanceof Error ? e.message : e);
81
+ }
82
+ return { observationId, traceId: ctx.traceId || '', startTime, sampled: true };
83
+ },
84
+ async endObservation(observationId, data) {
85
+ try {
86
+ await provider.updateObservation(observationId, {
87
+ output: data?.output,
88
+ status: data?.status ?? 'ok',
89
+ endTime: Date.now(),
90
+ durationMs: data?.durationMs,
91
+ usage: data?.usage,
92
+ model: data?.model,
93
+ provider: data?.provider,
94
+ error: data?.error,
95
+ metadata: data?.metadata,
96
+ });
97
+ }
98
+ catch (e) {
99
+ console.warn('[Observability] endObservation failed:', e instanceof Error ? e.message : e);
100
+ }
101
+ },
102
+ async recordEvent(ctx) {
103
+ try {
104
+ const observationId = `evt_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
105
+ await provider.saveObservation({
106
+ id: observationId,
107
+ traceId: ctx.traceId || '',
108
+ type: 'event',
109
+ name: ctx.name,
110
+ input: ctx.input,
111
+ output: ctx.output,
112
+ status: 'ok',
113
+ startTime: Date.now(),
114
+ metadata: ctx.metadata,
115
+ });
116
+ }
117
+ catch (e) {
118
+ console.warn('[Observability] recordEvent failed:', e instanceof Error ? e.message : e);
119
+ }
120
+ },
121
+ async recordScore(score) {
122
+ try {
123
+ await provider.saveScore(score);
124
+ }
125
+ catch (e) {
126
+ console.warn('[Observability] recordScore failed:', e instanceof Error ? e.message : e);
127
+ }
128
+ },
129
+ };
130
+ }
131
+ //# sourceMappingURL=store-sink-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-sink-factory.js","sourceRoot":"","sources":["../../../src/spi/store-sink-factory.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import type { AgentEngine, LLMProvider, Middleware, RegisteredTool, ToolRegistry, SkillManager, ContextManager, ContentPart, Message, ProxySettings, AgentEventPreset, A2AClient } from '@cicctencent/agent-core';
1
+ import type { AgentEngine, LLMProvider, Middleware, RegisteredTool, ToolRegistry, SkillManager, ContextManager, ContentPart, Message, ProxySettings, AgentEventPreset, A2AClient, ObservabilityConfig, ObservabilityManager } from '@cicctencent/agent-core';
2
+ import type { ObservabilityStoreProvider } from './spi/observability-store.js';
2
3
  export interface ThreadEntity {
3
4
  id: number;
4
5
  workspaceId?: number;
@@ -613,6 +614,10 @@ export interface AgentServerOptions {
613
614
  /** 自定义数据源适配器 */
614
615
  connectors?: DataSourceAdapter[];
615
616
  middleware?: Middleware[];
617
+ /** 可观测性存储 SPI(未提供时使用 InMemoryObservabilityStore) */
618
+ observabilityProvider?: ObservabilityStoreProvider;
619
+ /** 可观测性配置(采样率、输入/输出捕获开关等) */
620
+ observabilityConfig?: ObservabilityConfig;
616
621
  dataDir?: string;
617
622
  skillsDir?: string;
618
623
  connectorsDir?: string;
@@ -842,6 +847,8 @@ export interface AgentServer {
842
847
  automation?: AutomationProvider;
843
848
  email?: EmailProvider;
844
849
  calendar?: CalendarProvider;
850
+ observability?: ObservabilityStoreProvider;
851
+ observabilityManager?: ObservabilityManager;
845
852
  };
846
853
  }
847
854
  export interface AgentSystem {