@wingmanjs/core 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/LICENSE +21 -0
- package/dist/client.d.ts +55 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +227 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +14 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +55 -0
- package/dist/config.js.map +1 -0
- package/dist/events.d.ts +77 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +231 -0
- package/dist/events.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/instrumentation.d.ts +31 -0
- package/dist/instrumentation.d.ts.map +1 -0
- package/dist/instrumentation.js +107 -0
- package/dist/instrumentation.js.map +1 -0
- package/dist/mcp.d.ts +28 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +241 -0
- package/dist/mcp.js.map +1 -0
- package/dist/server.d.ts +31 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +317 -0
- package/dist/server.js.map +1 -0
- package/dist/telemetry.d.ts +52 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +313 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/types.d.ts +132 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +62 -0
- package/dist/types.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WingmanTracer — OpenTelemetry instrumentation for the Copilot SDK.
|
|
3
|
+
*
|
|
4
|
+
* Maps SDK SessionEvents → OTel spans following:
|
|
5
|
+
* - GenAI semantic conventions (gen_ai.* attributes)
|
|
6
|
+
* - MCP semantic conventions (mcp.* attributes)
|
|
7
|
+
*
|
|
8
|
+
* Designed to be fully no-op when telemetry is disabled.
|
|
9
|
+
*
|
|
10
|
+
* Span hierarchy:
|
|
11
|
+
* HTTP request span (auto from Express instrumentation)
|
|
12
|
+
* └─ chat {model} (parent — one per sendMessage call)
|
|
13
|
+
* ├─ tools/call {toolName} (child — one per tool execution)
|
|
14
|
+
* ├─ invoke_agent {agentName} (child — one per subagent)
|
|
15
|
+
* └─ skill {skillName} (child — one per skill invocation)
|
|
16
|
+
*
|
|
17
|
+
* @see https://opentelemetry.io/docs/specs/semconv/gen-ai/
|
|
18
|
+
* @see https://github.com/open-telemetry/semantic-conventions/blob/main/docs/gen-ai/mcp.md
|
|
19
|
+
*/
|
|
20
|
+
import type { WingmanTelemetryConfig } from './types.js';
|
|
21
|
+
import type { EventCallbacks } from './events.js';
|
|
22
|
+
export declare class WingmanTracer {
|
|
23
|
+
private tracer;
|
|
24
|
+
private config;
|
|
25
|
+
constructor(config?: WingmanTelemetryConfig);
|
|
26
|
+
/**
|
|
27
|
+
* Create EventCallbacks that produce OTel spans.
|
|
28
|
+
* State is scoped per-call so concurrent sendMessage turns are isolated.
|
|
29
|
+
*/
|
|
30
|
+
createCallbacks(sessionId: string, model: string): EventCallbacks;
|
|
31
|
+
/**
|
|
32
|
+
* Track MCP server connection lifecycle with OTel spans.
|
|
33
|
+
* Call `onConnect`, `onDisconnect`, or `onAuthError` to record lifecycle events.
|
|
34
|
+
* Each returned function also ends the span — call exactly one of them.
|
|
35
|
+
*/
|
|
36
|
+
traceMCPConnection(serverName: string): {
|
|
37
|
+
onConnect: () => void;
|
|
38
|
+
onDisconnect: (reason?: string) => void;
|
|
39
|
+
onAuthError: (error: Error) => void;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/** Returns empty callbacks that do nothing — zero overhead. */
|
|
43
|
+
export declare function createNoopCallbacks(): EventCallbacks;
|
|
44
|
+
/**
|
|
45
|
+
* Create a tracer (or no-op) based on config.
|
|
46
|
+
* Call this at startup; returns the tracer + its callbacks.
|
|
47
|
+
*/
|
|
48
|
+
export declare function createTracer(config?: WingmanTelemetryConfig): {
|
|
49
|
+
tracer: WingmanTracer | null;
|
|
50
|
+
createCallbacks: (sessionId: string, model: string) => EventCallbacks;
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAyClD,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAA2D;gBAE7D,MAAM,GAAE,sBAA2B;IAO/C;;;OAGG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc;IA2NjE;;;;OAIG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG;QACtC,SAAS,EAAE,MAAM,IAAI,CAAC;QACtB,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;QACxC,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;KACrC;CAiCF;AAMD,+DAA+D;AAC/D,wBAAgB,mBAAmB,IAAI,cAAc,CAEpD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,MAAM,GAAE,sBAA2B,GAClC;IAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAAC,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,cAAc,CAAA;CAAE,CAczG"}
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WingmanTracer — OpenTelemetry instrumentation for the Copilot SDK.
|
|
3
|
+
*
|
|
4
|
+
* Maps SDK SessionEvents → OTel spans following:
|
|
5
|
+
* - GenAI semantic conventions (gen_ai.* attributes)
|
|
6
|
+
* - MCP semantic conventions (mcp.* attributes)
|
|
7
|
+
*
|
|
8
|
+
* Designed to be fully no-op when telemetry is disabled.
|
|
9
|
+
*
|
|
10
|
+
* Span hierarchy:
|
|
11
|
+
* HTTP request span (auto from Express instrumentation)
|
|
12
|
+
* └─ chat {model} (parent — one per sendMessage call)
|
|
13
|
+
* ├─ tools/call {toolName} (child — one per tool execution)
|
|
14
|
+
* ├─ invoke_agent {agentName} (child — one per subagent)
|
|
15
|
+
* └─ skill {skillName} (child — one per skill invocation)
|
|
16
|
+
*
|
|
17
|
+
* @see https://opentelemetry.io/docs/specs/semconv/gen-ai/
|
|
18
|
+
* @see https://github.com/open-telemetry/semantic-conventions/blob/main/docs/gen-ai/mcp.md
|
|
19
|
+
*/
|
|
20
|
+
import { trace, context, SpanStatusCode } from '@opentelemetry/api';
|
|
21
|
+
const TRACER_NAME = 'wingman';
|
|
22
|
+
const TRACER_VERSION = '0.1.0';
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// GenAI + MCP semantic convention attribute keys
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
const ATTR = {
|
|
27
|
+
// GenAI conventions
|
|
28
|
+
GEN_AI_SYSTEM: 'gen_ai.system',
|
|
29
|
+
GEN_AI_REQUEST_MODEL: 'gen_ai.request.model',
|
|
30
|
+
GEN_AI_RESPONSE_MODEL: 'gen_ai.response.model',
|
|
31
|
+
GEN_AI_CONVERSATION_ID: 'gen_ai.conversation.id',
|
|
32
|
+
GEN_AI_OPERATION_NAME: 'gen_ai.operation.name',
|
|
33
|
+
GEN_AI_USAGE_INPUT_TOKENS: 'gen_ai.usage.input_tokens',
|
|
34
|
+
GEN_AI_USAGE_OUTPUT_TOKENS: 'gen_ai.usage.output_tokens',
|
|
35
|
+
GEN_AI_USAGE_CACHE_READ_TOKENS: 'gen_ai.usage.cache_read.input_tokens',
|
|
36
|
+
GEN_AI_TOOL_NAME: 'gen_ai.tool.name',
|
|
37
|
+
GEN_AI_TOOL_CALL_ID: 'gen_ai.tool.call.id',
|
|
38
|
+
// MCP conventions
|
|
39
|
+
MCP_METHOD_NAME: 'mcp.method.name',
|
|
40
|
+
MCP_SERVER_NAME: 'mcp.server.name',
|
|
41
|
+
MCP_SESSION_ID: 'mcp.session.id',
|
|
42
|
+
NETWORK_TRANSPORT: 'network.transport',
|
|
43
|
+
// Error conventions
|
|
44
|
+
ERROR_TYPE: 'error.type',
|
|
45
|
+
// OTel exception conventions
|
|
46
|
+
EXCEPTION_TYPE: 'exception.type',
|
|
47
|
+
EXCEPTION_MESSAGE: 'exception.message',
|
|
48
|
+
EXCEPTION_STACKTRACE: 'exception.stacktrace',
|
|
49
|
+
};
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
// WingmanTracer
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
export class WingmanTracer {
|
|
54
|
+
tracer;
|
|
55
|
+
config;
|
|
56
|
+
constructor(config = {}) {
|
|
57
|
+
this.tracer = trace.getTracer(TRACER_NAME, TRACER_VERSION);
|
|
58
|
+
this.config = {
|
|
59
|
+
captureContent: config.captureContent ?? false,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Create EventCallbacks that produce OTel spans.
|
|
64
|
+
* State is scoped per-call so concurrent sendMessage turns are isolated.
|
|
65
|
+
*/
|
|
66
|
+
createCallbacks(sessionId, model) {
|
|
67
|
+
// Per-turn state — each sendMessage call gets isolated span tracking
|
|
68
|
+
let chatSpan = null;
|
|
69
|
+
const toolSpans = new Map();
|
|
70
|
+
const subagentSpans = new Map();
|
|
71
|
+
const tracer = this.tracer;
|
|
72
|
+
const captureContent = this.config.captureContent;
|
|
73
|
+
// -- Span lifecycle helpers (close over per-turn state) --
|
|
74
|
+
const startChatSpan = () => {
|
|
75
|
+
endChatSpan();
|
|
76
|
+
chatSpan = tracer.startSpan(`chat ${model}`, {
|
|
77
|
+
attributes: {
|
|
78
|
+
[ATTR.GEN_AI_SYSTEM]: 'github.copilot',
|
|
79
|
+
[ATTR.GEN_AI_OPERATION_NAME]: 'chat',
|
|
80
|
+
[ATTR.GEN_AI_REQUEST_MODEL]: model,
|
|
81
|
+
[ATTR.GEN_AI_CONVERSATION_ID]: sessionId,
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
const endChatSpan = () => {
|
|
86
|
+
if (chatSpan) {
|
|
87
|
+
chatSpan.end();
|
|
88
|
+
chatSpan = null;
|
|
89
|
+
}
|
|
90
|
+
for (const [id, span] of toolSpans) {
|
|
91
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: 'Orphaned tool span' });
|
|
92
|
+
span.end();
|
|
93
|
+
toolSpans.delete(id);
|
|
94
|
+
}
|
|
95
|
+
for (const [id, span] of subagentSpans) {
|
|
96
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: 'Orphaned subagent span' });
|
|
97
|
+
span.end();
|
|
98
|
+
subagentSpans.delete(id);
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
const startToolSpan = (toolCallId, toolName, mcpServerName, mcpToolName, args) => {
|
|
102
|
+
const parentContext = chatSpan
|
|
103
|
+
? trace.setSpan(context.active(), chatSpan)
|
|
104
|
+
: context.active();
|
|
105
|
+
const attributes = {
|
|
106
|
+
[ATTR.GEN_AI_SYSTEM]: 'github.copilot',
|
|
107
|
+
[ATTR.GEN_AI_TOOL_NAME]: toolName,
|
|
108
|
+
[ATTR.GEN_AI_TOOL_CALL_ID]: toolCallId,
|
|
109
|
+
...(mcpServerName && {
|
|
110
|
+
[ATTR.MCP_SERVER_NAME]: mcpServerName,
|
|
111
|
+
[ATTR.MCP_METHOD_NAME]: 'tools/call',
|
|
112
|
+
[ATTR.NETWORK_TRANSPORT]: 'pipe',
|
|
113
|
+
}),
|
|
114
|
+
...(mcpToolName && { 'mcp.tool.name': mcpToolName }),
|
|
115
|
+
};
|
|
116
|
+
if (captureContent && args) {
|
|
117
|
+
try {
|
|
118
|
+
attributes['gen_ai.tool.call.arguments'] = JSON.stringify(args);
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
attributes['gen_ai.tool.call.arguments'] = '[unserializable]';
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const span = tracer.startSpan(`tools/call ${toolName}`, { attributes }, parentContext);
|
|
125
|
+
toolSpans.set(toolCallId, span);
|
|
126
|
+
};
|
|
127
|
+
const endToolSpan = (toolCallId, _toolName, result) => {
|
|
128
|
+
const span = toolSpans.get(toolCallId);
|
|
129
|
+
if (!span)
|
|
130
|
+
return;
|
|
131
|
+
const isError = result.startsWith('Error:') || result.startsWith('error:');
|
|
132
|
+
if (isError) {
|
|
133
|
+
const err = new Error(result.slice(0, 500));
|
|
134
|
+
err.name = 'ToolError';
|
|
135
|
+
span.recordException(err);
|
|
136
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: result.slice(0, 200) });
|
|
137
|
+
span.setAttribute(ATTR.ERROR_TYPE, 'tool_error');
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
141
|
+
}
|
|
142
|
+
if (captureContent && !isError) {
|
|
143
|
+
span.setAttribute('gen_ai.tool.call.result', result.slice(0, 4096));
|
|
144
|
+
}
|
|
145
|
+
span.end();
|
|
146
|
+
toolSpans.delete(toolCallId);
|
|
147
|
+
};
|
|
148
|
+
const startSubagentSpan = (toolCallId, agentName) => {
|
|
149
|
+
const parentContext = chatSpan
|
|
150
|
+
? trace.setSpan(context.active(), chatSpan)
|
|
151
|
+
: context.active();
|
|
152
|
+
const span = tracer.startSpan(`invoke_agent ${agentName}`, {
|
|
153
|
+
attributes: {
|
|
154
|
+
[ATTR.GEN_AI_SYSTEM]: 'github.copilot',
|
|
155
|
+
[ATTR.GEN_AI_OPERATION_NAME]: 'invoke_agent',
|
|
156
|
+
'gen_ai.agent.name': agentName,
|
|
157
|
+
},
|
|
158
|
+
}, parentContext);
|
|
159
|
+
subagentSpans.set(toolCallId, span);
|
|
160
|
+
};
|
|
161
|
+
const endSubagentSpan = (toolCallId, error) => {
|
|
162
|
+
const span = subagentSpans.get(toolCallId);
|
|
163
|
+
if (!span)
|
|
164
|
+
return;
|
|
165
|
+
if (error) {
|
|
166
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: error });
|
|
167
|
+
span.setAttribute(ATTR.ERROR_TYPE, 'agent_error');
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
171
|
+
}
|
|
172
|
+
span.end();
|
|
173
|
+
subagentSpans.delete(toolCallId);
|
|
174
|
+
};
|
|
175
|
+
const recordUsage = (inputTokens, outputTokens, cacheReadTokens, responseModel) => {
|
|
176
|
+
if (!chatSpan)
|
|
177
|
+
return;
|
|
178
|
+
chatSpan.setAttribute(ATTR.GEN_AI_USAGE_INPUT_TOKENS, inputTokens);
|
|
179
|
+
chatSpan.setAttribute(ATTR.GEN_AI_USAGE_OUTPUT_TOKENS, outputTokens);
|
|
180
|
+
if (cacheReadTokens != null) {
|
|
181
|
+
chatSpan.setAttribute(ATTR.GEN_AI_USAGE_CACHE_READ_TOKENS, cacheReadTokens);
|
|
182
|
+
}
|
|
183
|
+
if (responseModel) {
|
|
184
|
+
chatSpan.setAttribute(ATTR.GEN_AI_RESPONSE_MODEL, responseModel);
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
const recordError = (message) => {
|
|
188
|
+
if (!chatSpan)
|
|
189
|
+
return;
|
|
190
|
+
chatSpan.recordException(new Error(message));
|
|
191
|
+
chatSpan.setStatus({ code: SpanStatusCode.ERROR, message });
|
|
192
|
+
chatSpan.setAttribute(ATTR.ERROR_TYPE, 'session_error');
|
|
193
|
+
};
|
|
194
|
+
const recordSkillInvocation = (name, pluginName) => {
|
|
195
|
+
if (!chatSpan)
|
|
196
|
+
return;
|
|
197
|
+
chatSpan.addEvent('skill.invoked', {
|
|
198
|
+
'skill.name': name,
|
|
199
|
+
...(pluginName && { 'skill.plugin': pluginName }),
|
|
200
|
+
});
|
|
201
|
+
};
|
|
202
|
+
const recordSpanEvent = (eventName, attributes) => {
|
|
203
|
+
if (!chatSpan)
|
|
204
|
+
return;
|
|
205
|
+
const safeAttrs = {};
|
|
206
|
+
if (attributes) {
|
|
207
|
+
for (const [key, value] of Object.entries(attributes)) {
|
|
208
|
+
if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
|
|
209
|
+
safeAttrs[key] = value;
|
|
210
|
+
}
|
|
211
|
+
else if (value != null) {
|
|
212
|
+
try {
|
|
213
|
+
safeAttrs[key] = JSON.stringify(value);
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
safeAttrs[key] = '[unserializable]';
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
chatSpan.addEvent(eventName, safeAttrs);
|
|
222
|
+
};
|
|
223
|
+
// -- Return callbacks that close over per-turn state --
|
|
224
|
+
return {
|
|
225
|
+
onTurnStart: (_turnId) => startChatSpan(),
|
|
226
|
+
onTurnEnd: (_turnId) => endChatSpan(),
|
|
227
|
+
onToolStart: (tool) => {
|
|
228
|
+
startToolSpan(tool.toolCallId, tool.toolName, tool.mcpServerName, tool.mcpToolName, tool.arguments);
|
|
229
|
+
},
|
|
230
|
+
onToolComplete: (toolCallId, toolName, result) => {
|
|
231
|
+
endToolSpan(toolCallId, toolName, result);
|
|
232
|
+
},
|
|
233
|
+
onUsage: (usage) => {
|
|
234
|
+
recordUsage(usage.inputTokens, usage.outputTokens, usage.cacheReadTokens, usage.model);
|
|
235
|
+
},
|
|
236
|
+
onError: (message) => recordError(message),
|
|
237
|
+
onSubagentStarted: (toolCallId, name) => startSubagentSpan(toolCallId, name),
|
|
238
|
+
onSubagentCompleted: (toolCallId) => endSubagentSpan(toolCallId),
|
|
239
|
+
onSubagentFailed: (toolCallId, _name, error) => endSubagentSpan(toolCallId, error),
|
|
240
|
+
onSkillInvoked: (name, pluginName) => recordSkillInvocation(name, pluginName),
|
|
241
|
+
onTruncation: (data) => recordSpanEvent('context.truncation', data),
|
|
242
|
+
onCompactionStart: () => recordSpanEvent('context.compaction_start'),
|
|
243
|
+
onCompactionComplete: () => recordSpanEvent('context.compaction_complete'),
|
|
244
|
+
onModelChange: (newModel) => {
|
|
245
|
+
if (chatSpan) {
|
|
246
|
+
chatSpan.setAttribute(ATTR.GEN_AI_RESPONSE_MODEL, newModel);
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Track MCP server connection lifecycle with OTel spans.
|
|
253
|
+
* Call `onConnect`, `onDisconnect`, or `onAuthError` to record lifecycle events.
|
|
254
|
+
* Each returned function also ends the span — call exactly one of them.
|
|
255
|
+
*/
|
|
256
|
+
traceMCPConnection(serverName) {
|
|
257
|
+
const span = this.tracer.startSpan('mcp.connect', {
|
|
258
|
+
attributes: {
|
|
259
|
+
[ATTR.MCP_SERVER_NAME]: serverName,
|
|
260
|
+
[ATTR.MCP_METHOD_NAME]: 'initialize',
|
|
261
|
+
},
|
|
262
|
+
});
|
|
263
|
+
return {
|
|
264
|
+
onConnect: () => {
|
|
265
|
+
span.addEvent('mcp.connected', { [ATTR.MCP_SERVER_NAME]: serverName });
|
|
266
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
267
|
+
span.end();
|
|
268
|
+
},
|
|
269
|
+
onDisconnect: (reason) => {
|
|
270
|
+
span.addEvent('mcp.disconnected', {
|
|
271
|
+
[ATTR.MCP_SERVER_NAME]: serverName,
|
|
272
|
+
...(reason && { reason }),
|
|
273
|
+
});
|
|
274
|
+
span.end();
|
|
275
|
+
},
|
|
276
|
+
onAuthError: (error) => {
|
|
277
|
+
span.recordException(error);
|
|
278
|
+
span.addEvent('mcp.auth_error', {
|
|
279
|
+
[ATTR.MCP_SERVER_NAME]: serverName,
|
|
280
|
+
[ATTR.EXCEPTION_TYPE]: error.name || error.constructor.name,
|
|
281
|
+
[ATTR.EXCEPTION_MESSAGE]: error.message,
|
|
282
|
+
});
|
|
283
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: error.message });
|
|
284
|
+
span.end();
|
|
285
|
+
},
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
// ---------------------------------------------------------------------------
|
|
290
|
+
// No-op tracer for when telemetry is disabled
|
|
291
|
+
// ---------------------------------------------------------------------------
|
|
292
|
+
/** Returns empty callbacks that do nothing — zero overhead. */
|
|
293
|
+
export function createNoopCallbacks() {
|
|
294
|
+
return {};
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Create a tracer (or no-op) based on config.
|
|
298
|
+
* Call this at startup; returns the tracer + its callbacks.
|
|
299
|
+
*/
|
|
300
|
+
export function createTracer(config = {}) {
|
|
301
|
+
if (!config.enabled) {
|
|
302
|
+
return {
|
|
303
|
+
tracer: null,
|
|
304
|
+
createCallbacks: () => createNoopCallbacks(),
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
const tracer = new WingmanTracer(config);
|
|
308
|
+
return {
|
|
309
|
+
tracer,
|
|
310
|
+
createCallbacks: (sessionId, model) => tracer.createCallbacks(sessionId, model),
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
//# sourceMappingURL=telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wingman — Core types for the GitHub Copilot SDK chat framework.
|
|
3
|
+
*
|
|
4
|
+
* These types define the public API surface. All 51 SDK event types are
|
|
5
|
+
* represented, along with RPC method types, transport adapters, and
|
|
6
|
+
* configuration schemas.
|
|
7
|
+
*/
|
|
8
|
+
/** Categories of SDK events for routing and filtering. */
|
|
9
|
+
export type EventCategory = 'streaming' | 'reasoning' | 'usage' | 'turn' | 'tool' | 'skill' | 'subagent' | 'session' | 'model' | 'context' | 'mode' | 'title' | 'permission' | 'user_input' | 'message' | 'workspace' | 'hook' | 'task';
|
|
10
|
+
/** All 51 SDK event type strings. */
|
|
11
|
+
export type SDKEventType = 'assistant.message_delta' | 'assistant.streaming_delta' | 'assistant.reasoning_delta' | 'assistant.reasoning' | 'assistant.usage' | 'assistant.turn_start' | 'assistant.turn_end' | 'assistant.intent' | 'tool.execution_start' | 'tool.execution_complete' | 'tool.execution_progress' | 'tool.execution_partial_result' | 'tool.user_requested' | 'skill.invoked' | 'subagent.started' | 'subagent.completed' | 'subagent.failed' | 'subagent.selected' | 'subagent.deselected' | 'session.start' | 'session.resume' | 'session.shutdown' | 'session.idle' | 'session.error' | 'session.info' | 'session.warning' | 'session.model_change' | 'session.truncation' | 'session.compaction_start' | 'session.compaction_complete' | 'session.context_changed' | 'session.mode_changed' | 'session.plan_changed' | 'session.title_changed' | 'permission.requested' | 'permission.completed' | 'elicitation.requested' | 'elicitation.completed' | 'user_input.requested' | 'user_input.completed' | 'user.message' | 'system.message' | 'assistant.message' | 'pending_messages.modified' | 'session.workspace_file_changed' | 'session.snapshot_rewind' | 'hook.start' | 'hook.end' | 'session.task_complete' | 'session.handoff' | 'session.usage_info';
|
|
12
|
+
/** Mapping of event types to their categories for routing. */
|
|
13
|
+
export declare const EVENT_CATEGORIES: Record<SDKEventType, EventCategory>;
|
|
14
|
+
export interface UsageData {
|
|
15
|
+
inputTokens: number;
|
|
16
|
+
outputTokens: number;
|
|
17
|
+
cacheReadTokens?: number;
|
|
18
|
+
cacheWriteTokens?: number;
|
|
19
|
+
model?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface ToolExecution {
|
|
22
|
+
toolCallId: string;
|
|
23
|
+
toolName: string;
|
|
24
|
+
arguments?: Record<string, unknown>;
|
|
25
|
+
result?: string;
|
|
26
|
+
status: 'running' | 'complete' | 'error';
|
|
27
|
+
startedAt: number;
|
|
28
|
+
completedAt?: number;
|
|
29
|
+
}
|
|
30
|
+
export interface SessionInfo {
|
|
31
|
+
sessionId: string;
|
|
32
|
+
title?: string;
|
|
33
|
+
model?: string;
|
|
34
|
+
mode?: AgentMode;
|
|
35
|
+
createdAt: number;
|
|
36
|
+
updatedAt: number;
|
|
37
|
+
}
|
|
38
|
+
export type AgentMode = 'interactive' | 'plan' | 'autopilot';
|
|
39
|
+
export interface ChatMessage {
|
|
40
|
+
id: string;
|
|
41
|
+
role: 'user' | 'assistant' | 'system';
|
|
42
|
+
content: string;
|
|
43
|
+
timestamp: number;
|
|
44
|
+
/** Tool executions that occurred during this message. */
|
|
45
|
+
tools?: ToolExecution[];
|
|
46
|
+
/** Reasoning/thinking content. */
|
|
47
|
+
reasoning?: string;
|
|
48
|
+
/** Token usage for this turn. */
|
|
49
|
+
usage?: UsageData;
|
|
50
|
+
}
|
|
51
|
+
export interface MCPStdioConfig {
|
|
52
|
+
type: 'stdio';
|
|
53
|
+
command: string;
|
|
54
|
+
args?: string[];
|
|
55
|
+
env?: Record<string, string>;
|
|
56
|
+
/** Tool names to enable. Default: ["*"] (all). */
|
|
57
|
+
tools: string[];
|
|
58
|
+
}
|
|
59
|
+
export interface MCPHttpConfig {
|
|
60
|
+
type: 'http';
|
|
61
|
+
url: string;
|
|
62
|
+
headers?: Record<string, string>;
|
|
63
|
+
/** Tool names to enable. Default: ["*"] (all). */
|
|
64
|
+
tools: string[];
|
|
65
|
+
}
|
|
66
|
+
export type MCPServerConfig = MCPStdioConfig | MCPHttpConfig;
|
|
67
|
+
export interface DiscoveredMCPServer {
|
|
68
|
+
name: string;
|
|
69
|
+
config: MCPServerConfig;
|
|
70
|
+
source: 'built-in' | 'global' | 'plugin' | 'project';
|
|
71
|
+
status: 'connected' | 'disconnected' | 'error';
|
|
72
|
+
toolCount?: number;
|
|
73
|
+
}
|
|
74
|
+
export type TransportType = 'socketio' | 'sse';
|
|
75
|
+
export interface TransportAdapter {
|
|
76
|
+
connect(url: string): void;
|
|
77
|
+
disconnect(): void;
|
|
78
|
+
send(event: string, data: unknown): void;
|
|
79
|
+
on(event: string, handler: (data: unknown) => void): void;
|
|
80
|
+
off(event: string, handler: (data: unknown) => void): void;
|
|
81
|
+
}
|
|
82
|
+
export interface WingmanUIConfig {
|
|
83
|
+
title?: string;
|
|
84
|
+
theme?: 'dark' | 'light' | 'system';
|
|
85
|
+
logo?: string;
|
|
86
|
+
welcomeMessage?: string;
|
|
87
|
+
suggestions?: string[];
|
|
88
|
+
colors?: Record<string, string>;
|
|
89
|
+
showTokenUsage?: boolean;
|
|
90
|
+
showModelPicker?: boolean;
|
|
91
|
+
showModeSwitcher?: boolean;
|
|
92
|
+
showDebugPanel?: boolean;
|
|
93
|
+
}
|
|
94
|
+
export interface WingmanServerConfig {
|
|
95
|
+
port?: number;
|
|
96
|
+
/**
|
|
97
|
+
* CORS configuration.
|
|
98
|
+
* - `true` — allow all origins (`*`). Fine for local dev; **unsafe in production**.
|
|
99
|
+
* - `false` — disable CORS headers entirely.
|
|
100
|
+
* - `string` — allow a single origin (e.g. `'https://myapp.com'`).
|
|
101
|
+
* - `string[]` — allow multiple specific origins.
|
|
102
|
+
*
|
|
103
|
+
* @default true
|
|
104
|
+
*/
|
|
105
|
+
cors?: boolean | string | string[];
|
|
106
|
+
transport?: TransportType;
|
|
107
|
+
}
|
|
108
|
+
export interface WingmanTelemetryConfig {
|
|
109
|
+
/** Enable OpenTelemetry tracing. Default: false (fully no-op when disabled). */
|
|
110
|
+
enabled?: boolean;
|
|
111
|
+
/** Trace exporter to use. Default: 'console'. */
|
|
112
|
+
exporter?: 'console' | 'otlp';
|
|
113
|
+
/** OTLP endpoint URL. Default: http://localhost:4318/v1/traces (Jaeger default). */
|
|
114
|
+
endpoint?: string;
|
|
115
|
+
/** OTel service.name attribute. Default: 'wingman'. */
|
|
116
|
+
serviceName?: string;
|
|
117
|
+
/** Capture tool arguments and results in span attributes. Off by default (sensitive data). */
|
|
118
|
+
captureContent?: boolean;
|
|
119
|
+
}
|
|
120
|
+
export interface WingmanConfig {
|
|
121
|
+
systemPrompt?: string;
|
|
122
|
+
model?: string;
|
|
123
|
+
reasoningEffort?: 'low' | 'medium' | 'high' | 'xhigh';
|
|
124
|
+
mcpServers?: Record<string, MCPServerConfig>;
|
|
125
|
+
skillDirectories?: string[];
|
|
126
|
+
customAgents?: string[];
|
|
127
|
+
tools?: string[];
|
|
128
|
+
ui?: WingmanUIConfig;
|
|
129
|
+
server?: WingmanServerConfig;
|
|
130
|
+
telemetry?: WingmanTelemetryConfig;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wingman — Core types for the GitHub Copilot SDK chat framework.
|
|
3
|
+
*
|
|
4
|
+
* These types define the public API surface. All 51 SDK event types are
|
|
5
|
+
* represented, along with RPC method types, transport adapters, and
|
|
6
|
+
* configuration schemas.
|
|
7
|
+
*/
|
|
8
|
+
/** Mapping of event types to their categories for routing. */
|
|
9
|
+
export const EVENT_CATEGORIES = {
|
|
10
|
+
'assistant.message_delta': 'streaming',
|
|
11
|
+
'assistant.streaming_delta': 'streaming',
|
|
12
|
+
'assistant.reasoning_delta': 'reasoning',
|
|
13
|
+
'assistant.reasoning': 'reasoning',
|
|
14
|
+
'assistant.usage': 'usage',
|
|
15
|
+
'assistant.turn_start': 'turn',
|
|
16
|
+
'assistant.turn_end': 'turn',
|
|
17
|
+
'assistant.intent': 'turn',
|
|
18
|
+
'tool.execution_start': 'tool',
|
|
19
|
+
'tool.execution_complete': 'tool',
|
|
20
|
+
'tool.execution_progress': 'tool',
|
|
21
|
+
'tool.execution_partial_result': 'tool',
|
|
22
|
+
'tool.user_requested': 'tool',
|
|
23
|
+
'skill.invoked': 'skill',
|
|
24
|
+
'subagent.started': 'subagent',
|
|
25
|
+
'subagent.completed': 'subagent',
|
|
26
|
+
'subagent.failed': 'subagent',
|
|
27
|
+
'subagent.selected': 'subagent',
|
|
28
|
+
'subagent.deselected': 'subagent',
|
|
29
|
+
'session.start': 'session',
|
|
30
|
+
'session.resume': 'session',
|
|
31
|
+
'session.shutdown': 'session',
|
|
32
|
+
'session.idle': 'session',
|
|
33
|
+
'session.error': 'session',
|
|
34
|
+
'session.info': 'session',
|
|
35
|
+
'session.warning': 'session',
|
|
36
|
+
'session.model_change': 'model',
|
|
37
|
+
'session.truncation': 'context',
|
|
38
|
+
'session.compaction_start': 'context',
|
|
39
|
+
'session.compaction_complete': 'context',
|
|
40
|
+
'session.context_changed': 'context',
|
|
41
|
+
'session.mode_changed': 'mode',
|
|
42
|
+
'session.plan_changed': 'mode',
|
|
43
|
+
'session.title_changed': 'title',
|
|
44
|
+
'permission.requested': 'permission',
|
|
45
|
+
'permission.completed': 'permission',
|
|
46
|
+
'elicitation.requested': 'user_input',
|
|
47
|
+
'elicitation.completed': 'user_input',
|
|
48
|
+
'user_input.requested': 'user_input',
|
|
49
|
+
'user_input.completed': 'user_input',
|
|
50
|
+
'user.message': 'message',
|
|
51
|
+
'system.message': 'message',
|
|
52
|
+
'assistant.message': 'message',
|
|
53
|
+
'pending_messages.modified': 'message',
|
|
54
|
+
'session.workspace_file_changed': 'workspace',
|
|
55
|
+
'session.snapshot_rewind': 'workspace',
|
|
56
|
+
'hook.start': 'hook',
|
|
57
|
+
'hook.end': 'hook',
|
|
58
|
+
'session.task_complete': 'task',
|
|
59
|
+
'session.handoff': 'task',
|
|
60
|
+
'session.usage_info': 'task',
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmGH,8DAA8D;AAC9D,MAAM,CAAC,MAAM,gBAAgB,GAAwC;IACnE,yBAAyB,EAAE,WAAW;IACtC,2BAA2B,EAAE,WAAW;IACxC,2BAA2B,EAAE,WAAW;IACxC,qBAAqB,EAAE,WAAW;IAClC,iBAAiB,EAAE,OAAO;IAC1B,sBAAsB,EAAE,MAAM;IAC9B,oBAAoB,EAAE,MAAM;IAC5B,kBAAkB,EAAE,MAAM;IAC1B,sBAAsB,EAAE,MAAM;IAC9B,yBAAyB,EAAE,MAAM;IACjC,yBAAyB,EAAE,MAAM;IACjC,+BAA+B,EAAE,MAAM;IACvC,qBAAqB,EAAE,MAAM;IAC7B,eAAe,EAAE,OAAO;IACxB,kBAAkB,EAAE,UAAU;IAC9B,oBAAoB,EAAE,UAAU;IAChC,iBAAiB,EAAE,UAAU;IAC7B,mBAAmB,EAAE,UAAU;IAC/B,qBAAqB,EAAE,UAAU;IACjC,eAAe,EAAE,SAAS;IAC1B,gBAAgB,EAAE,SAAS;IAC3B,kBAAkB,EAAE,SAAS;IAC7B,cAAc,EAAE,SAAS;IACzB,eAAe,EAAE,SAAS;IAC1B,cAAc,EAAE,SAAS;IACzB,iBAAiB,EAAE,SAAS;IAC5B,sBAAsB,EAAE,OAAO;IAC/B,oBAAoB,EAAE,SAAS;IAC/B,0BAA0B,EAAE,SAAS;IACrC,6BAA6B,EAAE,SAAS;IACxC,yBAAyB,EAAE,SAAS;IACpC,sBAAsB,EAAE,MAAM;IAC9B,sBAAsB,EAAE,MAAM;IAC9B,uBAAuB,EAAE,OAAO;IAChC,sBAAsB,EAAE,YAAY;IACpC,sBAAsB,EAAE,YAAY;IACpC,uBAAuB,EAAE,YAAY;IACrC,uBAAuB,EAAE,YAAY;IACrC,sBAAsB,EAAE,YAAY;IACpC,sBAAsB,EAAE,YAAY;IACpC,cAAc,EAAE,SAAS;IACzB,gBAAgB,EAAE,SAAS;IAC3B,mBAAmB,EAAE,SAAS;IAC9B,2BAA2B,EAAE,SAAS;IACtC,gCAAgC,EAAE,WAAW;IAC7C,yBAAyB,EAAE,WAAW;IACtC,YAAY,EAAE,MAAM;IACpB,UAAU,EAAE,MAAM;IAClB,uBAAuB,EAAE,MAAM;IAC/B,iBAAiB,EAAE,MAAM;IACzB,oBAAoB,EAAE,MAAM;CAC7B,CAAC"}
|