@noodleseed/one 0.142.2 → 0.143.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.
@@ -66,6 +66,32 @@ export interface MetricsData {
66
66
  readonly unknown: number;
67
67
  };
68
68
  }[];
69
+ /** Evidence-aware caller activity and legacy handshake diagnostics; absent from older services. */
70
+ readonly clientActivity?: {
71
+ readonly callers: readonly {
72
+ readonly family: string;
73
+ readonly attribution: 'known_client' | 'self_reported' | 'transport_only' | 'unattributed';
74
+ readonly reportedName?: string;
75
+ readonly requests: number;
76
+ readonly errors: number;
77
+ readonly share: number;
78
+ readonly lastSuccessfulAt?: string;
79
+ readonly protocolEras?: {
80
+ readonly legacy: number;
81
+ readonly modern: number;
82
+ readonly unknown: number;
83
+ };
84
+ }[];
85
+ readonly legacyHandshakes: {
86
+ readonly total: number;
87
+ readonly byReportedClient: readonly {
88
+ readonly reportedName?: string;
89
+ readonly initializations: number;
90
+ readonly share: number;
91
+ readonly lastInitializedAt: string;
92
+ }[];
93
+ };
94
+ };
69
95
  readonly byMethod: readonly {
70
96
  readonly method: string;
71
97
  readonly requests: number;
@@ -1 +1 @@
1
- {"version":3,"file":"metrics-render.d.ts","sourceRoot":"","sources":["../src/metrics-render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metrics-render.d.ts","sourceRoot":"","sources":["../src/metrics-render.ts"],"names":[],"mappings":"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"}
@@ -81,7 +81,7 @@ export function renderMetricsReport(context, metrics, opts) {
81
81
  `${gradientText(num(totals.toolCalls), opts)} ${dim(plural(totals.toolCalls, 'tool call'), opts)}`,
82
82
  `${pct(errors.errorRate)} ${dim('errors', opts)}`,
83
83
  `${ms(latency.p95Ms)} ${dim('p95', opts)}`,
84
- ].join(' '), '', `${dim('latency', opts)} p50 ${ms(latency.p50Ms)} p95 ${ms(latency.p95Ms)} p99 ${ms(latency.p99Ms)}`, `${dim('errors', opts)} ${paint(AMBER, `${glyphFor('warn', opts)} tool ${pct(errors.toolErrorRate)}`, opts.color)} ${paint(ROSE, `${glyphFor('fail', opts)} mcp ${pct(errors.mcpErrorRate)}`, opts.color)}`, `${dim('tokens', opts)} ${Math.round(tokens.avgPerCall)} avg/call`, `${dim('protocol', opts)} legacy initializations ${num(initializationCount)} ${dim('· handshakes excluded from activity', opts)}`);
84
+ ].join(' '), '', `${dim('latency', opts)} p50 ${ms(latency.p50Ms)} p95 ${ms(latency.p95Ms)} p99 ${ms(latency.p99Ms)}`, `${dim('errors', opts)} ${paint(AMBER, `${glyphFor('warn', opts)} tool ${pct(errors.toolErrorRate)}`, opts.color)} ${paint(ROSE, `${glyphFor('fail', opts)} mcp ${pct(errors.mcpErrorRate)}`, opts.color)}`, `${dim('tokens', opts)} ${Math.round(tokens.avgPerCall)} avg/call`, `${dim('protocol', opts)} legacy handshakes ${num(initializationCount)} ${dim('· excluded from activity requests', opts)}`);
85
85
  if (metrics.series.length > 1) {
86
86
  lines.push(`${dim('volume', opts)} ${sparkline(metrics.series, opts)} ${dim('· hourly', opts)}`);
87
87
  }
@@ -91,13 +91,16 @@ export function renderMetricsReport(context, metrics, opts) {
91
91
  lines.push(toolRow(tool, metrics, opts));
92
92
  }
93
93
  const mixes = [];
94
- if (metrics.byClientFamily === undefined) {
94
+ if (metrics.clientActivity === undefined) {
95
95
  mixes.push(`${dim('clients', opts)} ${dim('client activity unavailable from this service version', opts)}`);
96
96
  }
97
- else if (metrics.byClientFamily.length > 0) {
98
- mixes.push(`${dim('clients', opts)} ${metrics.byClientFamily
99
- .map((family) => clientFamilyActivity(family, opts))
100
- .join(' ')}`);
97
+ else {
98
+ metrics.clientActivity.callers.forEach((caller, index) => {
99
+ mixes.push(`${index === 0 ? `${dim('callers', opts)} ` : ' '}${callerActivity(caller, opts)}`);
100
+ });
101
+ metrics.clientActivity.legacyHandshakes.byReportedClient.forEach((handshake, index) => {
102
+ mixes.push(`${index === 0 ? `${dim('handshakes', opts)} ` : ' '}${legacyHandshakeActivity(handshake)}`);
103
+ });
101
104
  }
102
105
  if (metrics.byMethod.length > 0) {
103
106
  mixes.push(`${dim('methods', opts)} ${metrics.byMethod
@@ -115,20 +118,61 @@ export function renderMetricsReport(context, metrics, opts) {
115
118
  function legacyInitializationCount(metrics) {
116
119
  return metrics.totals.legacyInitializations ?? metrics.totals.sessions;
117
120
  }
118
- function clientFamilyActivity(family, opts) {
119
- const detail = family.protocolEras === undefined
120
- ? 'details unavailable'
121
- : family.lastSuccessfulAt === undefined
122
- ? 'no successful request'
123
- : `last success ${family.lastSuccessfulAt}`;
121
+ const KNOWN_CLIENT_LABELS = {
122
+ 'openai-mcp': 'OpenAI MCP',
123
+ claude: 'Claude',
124
+ codex: 'Codex',
125
+ mcpjam: 'MCPJam Inspector',
126
+ 'mcp-inspector': 'MCP Inspector',
127
+ 'noodle-console': 'Noodle Console',
128
+ };
129
+ function callerActivity(caller, opts) {
130
+ const detail = caller.lastSuccessfulAt === undefined
131
+ ? 'no successful request'
132
+ : `last success ${caller.lastSuccessfulAt}`;
124
133
  return [
125
- `${family.family} ${pct(family.share)}`,
126
- `${num(family.requests)} ${plural(family.requests, 'request')}`,
127
- protocolEraLabel(family.protocolEras),
134
+ `${callerLabel(caller)} ${pct(caller.share)}`,
135
+ `${num(caller.requests)} ${plural(caller.requests, 'request')}`,
136
+ protocolEraLabel(caller.protocolEras),
137
+ callerEvidence(caller),
128
138
  detail,
129
- shareBar(family.share, MIX_BAR_WIDTH, opts),
139
+ shareBar(caller.share, MIX_BAR_WIDTH, opts),
130
140
  ].join(' · ');
131
141
  }
142
+ function callerLabel(caller) {
143
+ if (caller.attribution === 'known_client') {
144
+ return KNOWN_CLIENT_LABELS[caller.family] ?? caller.family;
145
+ }
146
+ if (caller.attribution === 'self_reported') {
147
+ const modernOnly = caller.protocolEras !== undefined &&
148
+ caller.protocolEras.modern > 0 &&
149
+ caller.protocolEras.legacy === 0 &&
150
+ caller.protocolEras.unknown === 0;
151
+ return modernOnly ? 'Unidentified modern caller' : 'Unidentified caller';
152
+ }
153
+ if (caller.attribution === 'transport_only')
154
+ return 'Unrecognized connection software';
155
+ return 'Unidentified caller';
156
+ }
157
+ function callerEvidence(caller) {
158
+ if (caller.attribution === 'known_client')
159
+ return 'recognized client family';
160
+ if (caller.attribution === 'self_reported' && caller.reportedName !== undefined) {
161
+ return `reported itself as “${caller.reportedName}”`;
162
+ }
163
+ if (caller.attribution === 'transport_only')
164
+ return 'transport metadata only';
165
+ return 'No usable client metadata';
166
+ }
167
+ function legacyHandshakeActivity(handshake) {
168
+ const token = handshake.reportedName?.toLowerCase().replace(/[^a-z0-9]+/g, '-');
169
+ const label = token === 'mcpjam' || token === 'mcpjam-inspector'
170
+ ? 'MCPJam Inspector'
171
+ : token === 'codex' || token === 'codex-mcp-client'
172
+ ? 'Codex'
173
+ : (handshake.reportedName ?? 'Unidentified legacy client');
174
+ return `${label} ${num(handshake.initializations)} ${plural(handshake.initializations, 'handshake')} · last ${handshake.lastInitializedAt}`;
175
+ }
132
176
  function protocolEraLabel(eras) {
133
177
  if (eras === undefined)
134
178
  return 'era unavailable';
@@ -138,8 +182,8 @@ function protocolEraLabel(eras) {
138
182
  ? 'legacy'
139
183
  : eras.modern > 0
140
184
  ? 'modern'
141
- : 'unknown';
142
- return eras.unknown > 0 && known !== 'unknown' ? `${known} + unknown` : known;
185
+ : 'era unavailable';
186
+ return eras.unknown > 0 && known !== 'era unavailable' ? `${known} + unattributed` : known;
143
187
  }
144
188
  function toolTableHeader(metrics, opts) {
145
189
  const nameWidth = toolNameWidth(metrics);
@@ -1 +1 @@
1
- {"version":3,"file":"metrics-render.js","sourceRoot":"","sources":["../src/metrics-render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metrics-render.js","sourceRoot":"","sources":["../src/metrics-render.ts"],"names":[],"mappings":"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"}
@@ -41,7 +41,7 @@
41
41
  "@noodle-borg/module": "0.0.0",
42
42
  "@noodle-borg/protocol": "0.0.0",
43
43
  "@noodle-borg/runtime": "0.0.0",
44
- "@noodleseed/assistant": "1.26.0",
44
+ "@noodleseed/assistant": "1.26.1",
45
45
  "zod": "^4.4.3"
46
46
  },
47
47
  "devDependencies": {
@@ -280,6 +280,31 @@ export const requestMetricsSchema = z.strictObject({
280
280
  unknown: countSchema,
281
281
  }),
282
282
  })),
283
+ clientActivity: z.strictObject({
284
+ callers: z.array(z.strictObject({
285
+ family: z.string().min(1).max(32),
286
+ attribution: z.enum(['known_client', 'self_reported', 'transport_only', 'unattributed']),
287
+ reportedName: z.string().min(1).max(128).optional(),
288
+ requests: countSchema,
289
+ errors: countSchema,
290
+ share: metricNumberSchema,
291
+ lastSuccessfulAt: isoTimestampSchema.optional(),
292
+ protocolEras: z.strictObject({
293
+ legacy: countSchema,
294
+ modern: countSchema,
295
+ unknown: countSchema,
296
+ }),
297
+ })),
298
+ legacyHandshakes: z.strictObject({
299
+ total: countSchema,
300
+ byReportedClient: z.array(z.strictObject({
301
+ reportedName: z.string().min(1).max(128).optional(),
302
+ initializations: countSchema,
303
+ share: metricNumberSchema,
304
+ lastInitializedAt: isoTimestampSchema,
305
+ })),
306
+ }),
307
+ }),
283
308
  byMethod: z.array(z.strictObject({
284
309
  method: z.string().min(1).max(128),
285
310
  requests: countSchema,
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { ActionStatus, EmptyState, Metric, Panel, WidgetHeader } from './shared.js';
3
3
  export function AnalyticsWidget() {
4
- return (_jsxs("main", { children: [_jsx(WidgetHeader, { eyebrow: "Noodle Cloud", title: "Analytics", description: "A bounded request window from the selected app environment.", statusPath: "ok" }), _jsx(Panel, { title: "Request health", children: _jsxs("dl", { className: "metrics", children: [_jsx(Metric, { label: "Requests", path: "data.metrics.totals.requests" }), _jsx(Metric, { label: "Tool calls", path: "data.metrics.totals.toolCalls" }), _jsx(Metric, { label: "Error rate", path: "data.metrics.errors.errorRate" }), _jsx(Metric, { label: "P95 latency", path: "data.metrics.latency.p95Ms", hint: "Milliseconds" })] }) }), _jsxs(Panel, { title: "Observation window", children: [_jsxs("dl", { className: "facts", children: [_jsx(Metric, { label: "Since", path: "data.window.since" }), _jsx(Metric, { label: "Until", path: "data.window.until" }), _jsx(Metric, { label: "Partial", path: "data.truncated" }), _jsx(Metric, { label: "Legacy initializations", path: "data.metrics.totals.legacyInitializations" })] }), _jsx("p", { className: "notice", "data-tone": "warn", "data-bind-if": "data.truncated", children: "Partial data: the bounded analytics scan reached its limit. Narrow the time window for a complete view." })] }), _jsx(Panel, { title: "Client activity", children: _jsxs("div", { className: "collection", "data-collection": "data.metrics.byClientFamily", "data-collection-item": "client", children: [_jsx("template", { "data-collection-template": "", children: _jsxs("article", { className: "collection-card", children: [_jsx("h3", { "data-bind": "client.family", children: "Client family" }), _jsxs("p", { children: ["Requests: ", _jsx("strong", { "data-bind": "client.requests", children: "\u2014" })] }), _jsxs("p", { children: ["Errors: ", _jsx("strong", { "data-bind": "client.errors", children: "\u2014" })] }), _jsxs("p", { children: ["Last success: ", _jsx("strong", { "data-bind": "client.lastSuccessfulAt", children: "\u2014" })] }), _jsxs("p", { children: ["Era requests: modern ", _jsx("strong", { "data-bind": "client.protocolEras.modern", children: "\u2014" }), " \u00B7 legacy ", _jsx("strong", { "data-bind": "client.protocolEras.legacy", children: "\u2014" }), " \u00B7 unknown", ' ', _jsx("strong", { "data-bind": "client.protocolEras.unknown", children: "\u2014" })] })] }) }), _jsx(EmptyState, { children: "No client activity was observed in this window." })] }) }), _jsx(Panel, { title: "Tools", children: _jsxs("div", { className: "collection", "data-collection": "data.metrics.byTool", "data-collection-item": "tool", children: [_jsx("template", { "data-collection-template": "", children: _jsxs("article", { className: "collection-card", children: [_jsx("h3", { "data-bind": "tool.tool", children: "Tool" }), _jsxs("p", { children: ["Calls: ", _jsx("strong", { "data-bind": "tool.calls", children: "\u2014" })] }), _jsxs("p", { children: ["Errors: ", _jsx("strong", { "data-bind": "tool.errors", children: "\u2014" })] })] }) }), _jsx(EmptyState, { children: "No tool calls were observed in this window." })] }) }), _jsx(ActionStatus, {})] }));
4
+ return (_jsxs("main", { children: [_jsx(WidgetHeader, { eyebrow: "Noodle Cloud", title: "Analytics", description: "A bounded request window from the selected app environment.", statusPath: "ok" }), _jsx(Panel, { title: "Request health", children: _jsxs("dl", { className: "metrics", children: [_jsx(Metric, { label: "Requests", path: "data.metrics.totals.requests" }), _jsx(Metric, { label: "Tool calls", path: "data.metrics.totals.toolCalls" }), _jsx(Metric, { label: "Error rate", path: "data.metrics.errors.errorRate" }), _jsx(Metric, { label: "P95 latency", path: "data.metrics.latency.p95Ms", hint: "Milliseconds" })] }) }), _jsxs(Panel, { title: "Observation window", children: [_jsxs("dl", { className: "facts", children: [_jsx(Metric, { label: "Since", path: "data.window.since" }), _jsx(Metric, { label: "Until", path: "data.window.until" }), _jsx(Metric, { label: "Partial", path: "data.truncated" }), _jsx(Metric, { label: "Legacy handshakes", path: "data.metrics.totals.legacyInitializations" })] }), _jsx("p", { className: "notice", "data-tone": "warn", "data-bind-if": "data.truncated", children: "Partial data: the bounded analytics scan reached its limit. Narrow the time window for a complete view." })] }), _jsxs(Panel, { title: "Activity sources", children: [_jsx("p", { className: "notice", children: "Caller names are reported by client software and are not verified identities. Embedded assistant usage is a separate telemetry unit and is not counted here." }), _jsxs("div", { className: "collection", "data-collection": "data.metrics.clientActivity.callers", "data-collection-item": "caller", children: [_jsx("template", { "data-collection-template": "", children: _jsxs("article", { className: "collection-card", children: [_jsx("h3", { children: "MCP caller" }), _jsxs("p", { children: ["Attribution: ", _jsx("strong", { "data-bind": "caller.attribution", children: "\u2014" })] }), _jsxs("p", { "data-bind-if": "caller.reportedName", children: ["Reported name: ", _jsx("strong", { "data-bind": "caller.reportedName", children: "\u2014" })] }), _jsxs("p", { children: ["Recognized family: ", _jsx("strong", { "data-bind": "caller.family", children: "\u2014" })] }), _jsxs("p", { children: ["Requests: ", _jsx("strong", { "data-bind": "caller.requests", children: "\u2014" }), " \u00B7 errors:", ' ', _jsx("strong", { "data-bind": "caller.errors", children: "\u2014" })] }), _jsxs("p", { children: ["Era requests: modern ", _jsx("strong", { "data-bind": "caller.protocolEras.modern", children: "\u2014" }), " \u00B7 legacy ", _jsx("strong", { "data-bind": "caller.protocolEras.legacy", children: "\u2014" }), " \u00B7 unattributed", ' ', _jsx("strong", { "data-bind": "caller.protocolEras.unknown", children: "\u2014" })] })] }) }), _jsx(EmptyState, { children: "No MCP caller activity was observed in this window." })] }), _jsxs("div", { className: "collection", "data-collection": "data.metrics.clientActivity.legacyHandshakes.byReportedClient", "data-collection-item": "handshake", children: [_jsx("template", { "data-collection-template": "", children: _jsxs("article", { className: "collection-card", children: [_jsx("h3", { children: "Legacy protocol handshake" }), _jsxs("p", { "data-bind-if": "handshake.reportedName", children: ["Reported name: ", _jsx("strong", { "data-bind": "handshake.reportedName", children: "\u2014" })] }), _jsxs("p", { children: ["Handshakes: ", _jsx("strong", { "data-bind": "handshake.initializations", children: "\u2014" })] }), _jsxs("p", { children: ["Last handshake: ", _jsx("strong", { "data-bind": "handshake.lastInitializedAt", children: "\u2014" })] })] }) }), _jsx(EmptyState, { children: "No legacy handshakes were observed in this window." })] })] }), _jsx(Panel, { title: "Tools", children: _jsxs("div", { className: "collection", "data-collection": "data.metrics.byTool", "data-collection-item": "tool", children: [_jsx("template", { "data-collection-template": "", children: _jsxs("article", { className: "collection-card", children: [_jsx("h3", { "data-bind": "tool.tool", children: "Tool" }), _jsxs("p", { children: ["Calls: ", _jsx("strong", { "data-bind": "tool.calls", children: "\u2014" })] }), _jsxs("p", { children: ["Errors: ", _jsx("strong", { "data-bind": "tool.errors", children: "\u2014" })] })] }) }), _jsx(EmptyState, { children: "No tool calls were observed in this window." })] }) }), _jsx(ActionStatus, {})] }));
5
5
  }
6
6
  //# sourceMappingURL=analytics.js.map
@@ -1,3 +1,46 @@
1
+ const KNOWN_CLIENT_FAMILIES = new Map([
2
+ ['chatgpt', 'openai-mcp'],
3
+ ['openai', 'openai-mcp'],
4
+ ['openai-mcp', 'openai-mcp'],
5
+ ['openai-mcp-codex', 'openai-mcp'],
6
+ ['claude', 'claude'],
7
+ ['claude-ai', 'claude'],
8
+ ['claude-desktop', 'claude'],
9
+ ['codex', 'codex'],
10
+ ['codex-mcp-client', 'codex'],
11
+ ['mcpjam', 'mcpjam'],
12
+ ['mcpjam-inspector', 'mcpjam'],
13
+ ['mcp-inspector', 'mcp-inspector'],
14
+ ['noodle-console', 'noodle-console'],
15
+ ]);
16
+ function familyToken(value) {
17
+ if (value === undefined)
18
+ return undefined;
19
+ const token = value
20
+ .toLowerCase()
21
+ .replace(/[^a-z0-9._-]+/g, '-')
22
+ .replace(/^-+|-+$/g, '')
23
+ .slice(0, 32);
24
+ return token.length === 0 ? undefined : token;
25
+ }
26
+ function callerIdentity(event) {
27
+ const observedFamily = event.clientFamily ?? familyToken(event.clientName) ?? 'unknown';
28
+ const knownFamily = KNOWN_CLIENT_FAMILIES.get(observedFamily);
29
+ if (knownFamily !== undefined) {
30
+ return { family: knownFamily, attribution: 'known_client' };
31
+ }
32
+ if (event.clientName !== undefined) {
33
+ return {
34
+ family: observedFamily,
35
+ attribution: 'self_reported',
36
+ reportedName: event.clientName,
37
+ };
38
+ }
39
+ if (observedFamily === 'unknown') {
40
+ return { family: observedFamily, attribution: 'unattributed' };
41
+ }
42
+ return { family: observedFamily, attribution: 'transport_only' };
43
+ }
1
44
  /** Nearest-rank percentile over an already-sorted ascending array; 0 when empty. */
2
45
  function percentile(sorted, p) {
3
46
  if (sorted.length === 0)
@@ -27,11 +70,22 @@ export function aggregateRequestEvents(events) {
27
70
  const byTool = new Map();
28
71
  const byClient = new Map();
29
72
  const byClientFamily = new Map();
73
+ const callers = new Map();
74
+ const handshakes = new Map();
30
75
  const byMethod = new Map();
31
76
  const series = new Map();
32
77
  for (const event of legacyInitializations) {
33
78
  const client = event.clientName ?? 'other';
34
79
  byClient.set(client, (byClient.get(client) ?? 0) + 1);
80
+ const handshake = handshakes.get(event.clientName) ?? {
81
+ initializations: 0,
82
+ lastInitializedAt: event.createdAt,
83
+ };
84
+ handshake.initializations += 1;
85
+ if (event.createdAt > handshake.lastInitializedAt) {
86
+ handshake.lastInitializedAt = event.createdAt;
87
+ }
88
+ handshakes.set(event.clientName, handshake);
35
89
  }
36
90
  for (const event of usage) {
37
91
  if (event.outcome === 'ok')
@@ -57,6 +111,25 @@ export function aggregateRequestEvents(events) {
57
111
  familyRow.lastSuccessfulAt = event.createdAt;
58
112
  }
59
113
  byClientFamily.set(family, familyRow);
114
+ const identity = callerIdentity(event);
115
+ const callerKey = `${identity.attribution}:${identity.family}`;
116
+ const callerRow = callers.get(callerKey) ?? {
117
+ family: identity.family,
118
+ attribution: identity.attribution,
119
+ ...(identity.reportedName === undefined ? {} : { reportedName: identity.reportedName }),
120
+ requests: 0,
121
+ errors: 0,
122
+ protocolEras: { legacy: 0, modern: 0, unknown: 0 },
123
+ };
124
+ callerRow.requests += 1;
125
+ if (event.outcome !== 'ok')
126
+ callerRow.errors += 1;
127
+ callerRow.protocolEras[era] += 1;
128
+ if (event.outcome === 'ok' &&
129
+ (callerRow.lastSuccessfulAt === undefined || event.createdAt > callerRow.lastSuccessfulAt)) {
130
+ callerRow.lastSuccessfulAt = event.createdAt;
131
+ }
132
+ callers.set(callerKey, callerRow);
60
133
  if (event.toolName !== undefined) {
61
134
  toolCalls += 1;
62
135
  const tool = byTool.get(event.toolName) ?? { calls: 0, errors: 0, durations: [] };
@@ -130,6 +203,34 @@ export function aggregateRequestEvents(events) {
130
203
  protocolEras: { ...row.protocolEras },
131
204
  }))
132
205
  .sort((a, b) => b.requests - a.requests || a.family.localeCompare(b.family)),
206
+ clientActivity: {
207
+ callers: [...callers.entries()]
208
+ .map(([, row]) => ({
209
+ family: row.family,
210
+ attribution: row.attribution,
211
+ ...(row.reportedName === undefined ? {} : { reportedName: row.reportedName }),
212
+ requests: row.requests,
213
+ errors: row.errors,
214
+ share: rate(row.requests),
215
+ ...(row.lastSuccessfulAt === undefined ? {} : { lastSuccessfulAt: row.lastSuccessfulAt }),
216
+ protocolEras: { ...row.protocolEras },
217
+ }))
218
+ .sort((a, b) => b.requests - a.requests ||
219
+ a.family.localeCompare(b.family) ||
220
+ a.attribution.localeCompare(b.attribution)),
221
+ legacyHandshakes: {
222
+ total: sessions,
223
+ byReportedClient: [...handshakes.entries()]
224
+ .map(([reportedName, row]) => ({
225
+ ...(reportedName === undefined ? {} : { reportedName }),
226
+ initializations: row.initializations,
227
+ share: sessions === 0 ? 0 : row.initializations / sessions,
228
+ lastInitializedAt: row.lastInitializedAt,
229
+ }))
230
+ .sort((a, b) => b.initializations - a.initializations ||
231
+ (a.reportedName ?? '').localeCompare(b.reportedName ?? '')),
232
+ },
233
+ },
133
234
  byMethod: [...byMethod.entries()]
134
235
  .map(([method, requests]) => ({ method, requests, share: rate(requests) }))
135
236
  .sort((a, b) => b.requests - a.requests),
@@ -1,5 +1,5 @@
1
1
  import { mcpSubdomainEndpointOptions, rollbackDeploymentOperation, } from '@noodle-borg/control-plane/portable';
2
- import { DeveloperControlPlaneError, } from '@noodle-borg/developer-mcp';
2
+ import { DeveloperControlPlaneError, requestMetricsSchema, } from '@noodle-borg/developer-mcp';
3
3
  import { aggregateRequestEvents } from '@noodle-borg/observability';
4
4
  import { inspectCompiledServiceDeployment, inspectServiceDeployment } from './inspection.js';
5
5
  const METRICS_SCAN_LIMIT = 50_000;
@@ -148,7 +148,7 @@ export class ServiceDeveloperControlPlane {
148
148
  return {
149
149
  window: { since, ...(input.until !== undefined ? { until: input.until } : {}) },
150
150
  truncated: events.length >= METRICS_SCAN_LIMIT,
151
- metrics: mutableMetrics(aggregateRequestEvents(events)),
151
+ metrics: requestMetricsSchema.parse(aggregateRequestEvents(events)),
152
152
  };
153
153
  }
154
154
  async listEvents(ctx, input) {
@@ -311,22 +311,6 @@ function mapRequestEvent(event) {
311
311
  ...(event.details !== undefined ? { details: event.details } : {}),
312
312
  };
313
313
  }
314
- function mutableMetrics(metrics) {
315
- return {
316
- totals: { ...metrics.totals },
317
- errors: { ...metrics.errors },
318
- latency: { ...metrics.latency },
319
- tokens: { ...metrics.tokens },
320
- byTool: metrics.byTool.map((item) => ({ ...item })),
321
- byClient: metrics.byClient.map((item) => ({ ...item })),
322
- byClientFamily: metrics.byClientFamily.map((item) => ({
323
- ...item,
324
- protocolEras: { ...item.protocolEras },
325
- })),
326
- byMethod: metrics.byMethod.map((item) => ({ ...item })),
327
- series: metrics.series.map((item) => ({ ...item })),
328
- };
329
- }
330
314
  function effectiveCapabilities(capabilities, role) {
331
315
  return capabilities.filter((capability) => capability !== 'deployments:rollback' || role === 'owner');
332
316
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noodleseed/assistant",
3
- "version": "1.26.0",
3
+ "version": "1.26.1",
4
4
  "description": "Embed the Noodle Seed customer-branded assistant in your web app with managed or framework-owned UI, a framework-neutral MCP App host, a DOM-free client, and a backend session helper. Authoring and deploying the server is @noodleseed/one.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noodleseed/one",
3
- "version": "0.142.2",
3
+ "version": "0.143.0",
4
4
  "private": false,
5
5
  "description": "Noodle CLI by Noodle Seed — author, run, and deploy declarative MCP servers. Embedding the assistant in your own web app is @noodleseed/assistant.",
6
6
  "license": "Apache-2.0",