@noodleseed/one 0.13.0 → 0.14.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/cli.d.ts.map +1 -1
- package/dist/cli.js +5 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/analytics-ops.d.ts +3 -0
- package/dist/commands/analytics-ops.d.ts.map +1 -0
- package/dist/commands/analytics-ops.js +250 -0
- package/dist/commands/analytics-ops.js.map +1 -0
- package/dist/commands/shared.d.ts.map +1 -1
- package/dist/commands/shared.js +9 -0
- package/dist/commands/shared.js.map +1 -1
- package/dist/metrics-render.d.ts +99 -0
- package/dist/metrics-render.d.ts.map +1 -0
- package/dist/metrics-render.js +181 -0
- package/dist/metrics-render.js.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js +10 -0
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +2 -0
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-content.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-content.js +4 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-content.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/module/dist/contract.d.ts +61 -0
- package/node_modules/@noodle-borg/module/dist/contract.d.ts.map +1 -1
- package/node_modules/@noodle-borg/module/dist/contract.js +1 -0
- package/node_modules/@noodle-borg/module/dist/contract.js.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/index.d.ts +1 -1
- package/node_modules/@noodle-borg/protocol/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/index.js +1 -1
- package/node_modules/@noodle-borg/protocol/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/sdk-server.d.ts +19 -0
- package/node_modules/@noodle-borg/protocol/dist/sdk-server.d.ts.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/sdk-server.js +74 -16
- package/node_modules/@noodle-borg/protocol/dist/sdk-server.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.d.ts +4 -0
- package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.js +4 -0
- package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/options.d.ts +17 -0
- package/node_modules/@noodle-borg/service/dist/options.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/request-event-metrics.d.ts +63 -0
- package/node_modules/@noodle-borg/service/dist/request-event-metrics.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/request-event-metrics.js +103 -0
- package/node_modules/@noodle-borg/service/dist/request-event-metrics.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/analytics.d.ts +8 -0
- package/node_modules/@noodle-borg/service/dist/routes/analytics.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/analytics.js +109 -0
- package/node_modules/@noodle-borg/service/dist/routes/analytics.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/paths.d.ts +8 -1
- package/node_modules/@noodle-borg/service/dist/routes/paths.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/paths.js +25 -0
- package/node_modules/@noodle-borg/service/dist/routes/paths.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/serve.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/serve.js +27 -0
- package/node_modules/@noodle-borg/service/dist/serve.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/service.js +51 -1
- package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js +2 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/request-event-buffer.d.ts +23 -0
- package/node_modules/@noodle-borg/service/dist/store/request-event-buffer.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/request-event-buffer.js +62 -0
- package/node_modules/@noodle-borg/service/dist/store/request-event-buffer.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/request-events-postgres.d.ts +27 -0
- package/node_modules/@noodle-borg/service/dist/store/request-events-postgres.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/request-events-postgres.js +188 -0
- package/node_modules/@noodle-borg/service/dist/store/request-events-postgres.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/request-events.d.ts +14 -0
- package/node_modules/@noodle-borg/service/dist/store/request-events.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/request-events.js +85 -0
- package/node_modules/@noodle-borg/service/dist/store/request-events.js.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/handler.d.ts +8 -1
- package/node_modules/@noodle-borg/transport-http/dist/handler.d.ts.map +1 -1
- package/node_modules/@noodle-borg/transport-http/dist/handler.js +16 -32
- package/node_modules/@noodle-borg/transport-http/dist/handler.js.map +1 -1
- package/node_modules/@noodle-borg/transport-http/dist/request-capture.d.ts +49 -0
- package/node_modules/@noodle-borg/transport-http/dist/request-capture.d.ts.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/request-capture.js +116 -0
- package/node_modules/@noodle-borg/transport-http/dist/request-capture.js.map +1 -0
- package/package.json +2 -2
|
@@ -6,6 +6,25 @@ import { validateToolArguments } from './input-validation.js';
|
|
|
6
6
|
import { mapExecutionError, mapPromptMessages, mapPromptsList, mapResourceContents, mapResourcesList, mapResourceTemplatesList, mapToolOutput, mapToolsList, redactWidgetLinkedOutput, } from './mapping.js';
|
|
7
7
|
/** MCP "resource not found" JSON-RPC error code (not in the SDK's `ErrorCode` enum). */
|
|
8
8
|
const RESOURCE_NOT_FOUND = -32002;
|
|
9
|
+
/** Report an observation; an observer bug must never break the request it watched. */
|
|
10
|
+
function notify(context, observation) {
|
|
11
|
+
try {
|
|
12
|
+
context.observe?.(observation);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
// Analytics is strictly best-effort.
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/** Rough content-level token estimate (JSON chars / 4), computed on the raw execution output so
|
|
19
|
+
* the response path serializes it once — wire framing/duplication is deliberately excluded. */
|
|
20
|
+
function estimateTokens(value) {
|
|
21
|
+
try {
|
|
22
|
+
return Math.ceil(JSON.stringify(value).length / 4);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return 0;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
9
28
|
/**
|
|
10
29
|
* Build an official `@modelcontextprotocol/sdk` {@link Server} bound to a resolved artifact. The SDK
|
|
11
30
|
* owns the wire (JSON-RPC framing, capability negotiation, protocol-version handling); this function is
|
|
@@ -31,41 +50,53 @@ export function buildMcpServer({ artifact, deps }, context = {}) {
|
|
|
31
50
|
? { instructions: artifact.server.instructions }
|
|
32
51
|
: {}),
|
|
33
52
|
});
|
|
34
|
-
registerTools(server, artifact, requestDeps);
|
|
53
|
+
registerTools(server, artifact, requestDeps, context);
|
|
35
54
|
if (hasResources)
|
|
36
|
-
registerResources(server, artifact, requestDeps);
|
|
55
|
+
registerResources(server, artifact, requestDeps, context);
|
|
37
56
|
if (hasPrompts)
|
|
38
|
-
registerPrompts(server, artifact, requestDeps);
|
|
57
|
+
registerPrompts(server, artifact, requestDeps, context);
|
|
39
58
|
return server;
|
|
40
59
|
}
|
|
41
|
-
function registerTools(server, artifact, deps) {
|
|
60
|
+
function registerTools(server, artifact, deps, context) {
|
|
42
61
|
// Our mapping helpers return structural subsets of the SDK's result unions; the `as` casts pick the
|
|
43
62
|
// intended union arm (the SDK union also has a Tasks arm that requires a `task` field we never emit).
|
|
44
63
|
server.setRequestHandler(ListToolsRequestSchema, () => mapToolsList(artifact));
|
|
45
64
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
46
|
-
const
|
|
65
|
+
const toolName = request.params.name;
|
|
66
|
+
const observe = (outcome, extra = {}) => notify(context, { method: 'tools/call', toolName, outcome, ...extra });
|
|
67
|
+
const tool = artifact.tools.find((item) => item.name === toolName);
|
|
47
68
|
if (tool !== undefined) {
|
|
48
69
|
const validation = validateToolArguments(tool.inputSchema, request.params.arguments ?? {});
|
|
49
70
|
if (validation.length > 0) {
|
|
50
|
-
|
|
71
|
+
observe('mcp_error', { errorKind: 'invalid_params' });
|
|
72
|
+
throw new McpError(ErrorCode.InvalidParams, `invalid arguments for tool "${toolName}"`, {
|
|
73
|
+
reason: 'invalid_tool_arguments',
|
|
74
|
+
validation,
|
|
75
|
+
});
|
|
51
76
|
}
|
|
52
77
|
}
|
|
53
|
-
const result = await executeTool(artifact,
|
|
78
|
+
const result = await executeTool(artifact, toolName, request.params.arguments ?? {}, deps);
|
|
54
79
|
if (result.ok) {
|
|
55
80
|
const output = tool?._meta?.ui?.resourceUri !== undefined
|
|
56
81
|
? redactWidgetLinkedOutput(result.output)
|
|
57
82
|
: result.output;
|
|
58
|
-
|
|
83
|
+
const mapped = mapToolOutput(output);
|
|
84
|
+
observe('ok', { outputTokensEst: estimateTokens(output) });
|
|
85
|
+
return mapped;
|
|
59
86
|
}
|
|
60
87
|
// Two channels (docs/SPEC.md "Error Translation Matrix"): model-actionable failures become an
|
|
61
88
|
// `isError` tool result; protocol faults are thrown as a JSON-RPC error the SDK serializes.
|
|
89
|
+
// The same split is the analytics two-tier taxonomy: tool_error vs mcp_error (ADR 0121).
|
|
62
90
|
const outcome = mapExecutionError(result.error);
|
|
63
|
-
if ('result' in outcome)
|
|
91
|
+
if ('result' in outcome) {
|
|
92
|
+
observe('tool_error', { errorKind: result.error.code });
|
|
64
93
|
return outcome.result;
|
|
94
|
+
}
|
|
95
|
+
observe('mcp_error', { errorKind: result.error.code });
|
|
65
96
|
throw new McpError(outcome.error.code, outcome.error.message);
|
|
66
97
|
});
|
|
67
98
|
}
|
|
68
|
-
function registerResources(server, artifact, deps) {
|
|
99
|
+
function registerResources(server, artifact, deps, context) {
|
|
69
100
|
server.setRequestHandler(ListResourcesRequestSchema, () => mapResourcesList(artifact));
|
|
70
101
|
server.setRequestHandler(ListResourceTemplatesRequestSchema, () => mapResourceTemplatesList(artifact));
|
|
71
102
|
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
@@ -75,10 +106,29 @@ function registerResources(server, artifact, deps) {
|
|
|
75
106
|
if (variables === null)
|
|
76
107
|
continue;
|
|
77
108
|
const result = await executeResource(artifact, resource.name, variables, deps);
|
|
78
|
-
if (!result.ok)
|
|
109
|
+
if (!result.ok) {
|
|
110
|
+
notify(context, {
|
|
111
|
+
method: 'resources/read',
|
|
112
|
+
resourceName: resource.name,
|
|
113
|
+
outcome: 'mcp_error',
|
|
114
|
+
errorKind: result.error.code,
|
|
115
|
+
});
|
|
79
116
|
throw new McpError(ErrorCode.InternalError, result.error.message);
|
|
80
|
-
|
|
117
|
+
}
|
|
118
|
+
const mapped = mapResourceContents(uri, resource.mimeType, result.output);
|
|
119
|
+
notify(context, {
|
|
120
|
+
method: 'resources/read',
|
|
121
|
+
resourceName: resource.name,
|
|
122
|
+
outcome: 'ok',
|
|
123
|
+
outputTokensEst: estimateTokens(result.output),
|
|
124
|
+
});
|
|
125
|
+
return mapped;
|
|
81
126
|
}
|
|
127
|
+
notify(context, {
|
|
128
|
+
method: 'resources/read',
|
|
129
|
+
outcome: 'mcp_error',
|
|
130
|
+
errorKind: 'resource_not_found',
|
|
131
|
+
});
|
|
82
132
|
throw new McpError(RESOURCE_NOT_FOUND, `resource not found: ${uri}`);
|
|
83
133
|
});
|
|
84
134
|
}
|
|
@@ -89,22 +139,30 @@ function matchResourceUri(pattern, isTemplate, uri) {
|
|
|
89
139
|
const parsed = parseUriTemplate(pattern);
|
|
90
140
|
return parsed.ok && parsed.value.kind === 'template' ? parsed.value.match(uri) : null;
|
|
91
141
|
}
|
|
92
|
-
function registerPrompts(server, artifact, deps) {
|
|
142
|
+
function registerPrompts(server, artifact, deps, context) {
|
|
93
143
|
server.setRequestHandler(ListPromptsRequestSchema, () => mapPromptsList(artifact));
|
|
94
144
|
server.setRequestHandler(GetPromptRequestSchema, async (request) => {
|
|
95
145
|
const { name, arguments: args } = request.params;
|
|
146
|
+
const observe = (outcome, extra = {}) => notify(context, { method: 'prompts/get', promptName: name, outcome, ...extra });
|
|
96
147
|
const prompt = (artifact.prompts ?? []).find((p) => p.name === name);
|
|
97
|
-
if (!prompt)
|
|
148
|
+
if (!prompt) {
|
|
149
|
+
observe('mcp_error', { errorKind: 'unknown_prompt' });
|
|
98
150
|
throw new McpError(ErrorCode.InvalidParams, `unknown prompt "${name}"`);
|
|
151
|
+
}
|
|
99
152
|
for (const argument of prompt.arguments ?? []) {
|
|
100
153
|
if (argument.required && args?.[argument.name] === undefined) {
|
|
154
|
+
observe('mcp_error', { errorKind: 'invalid_params' });
|
|
101
155
|
throw new McpError(ErrorCode.InvalidParams, `missing required argument "${argument.name}"`);
|
|
102
156
|
}
|
|
103
157
|
}
|
|
104
158
|
const result = await executePrompt(artifact, name, args ?? {}, deps);
|
|
105
|
-
if (!result.ok)
|
|
159
|
+
if (!result.ok) {
|
|
160
|
+
observe('mcp_error', { errorKind: result.error.code });
|
|
106
161
|
throw new McpError(ErrorCode.InternalError, result.error.message);
|
|
107
|
-
|
|
162
|
+
}
|
|
163
|
+
const mapped = mapPromptMessages(result.output, prompt.description);
|
|
164
|
+
observe('ok', { outputTokensEst: estimateTokens(result.output) });
|
|
165
|
+
return mapped;
|
|
108
166
|
});
|
|
109
167
|
}
|
|
110
168
|
//# sourceMappingURL=sdk-server.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-server.js","sourceRoot":"","sources":["../src/sdk-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EACL,qBAAqB,EAErB,SAAS,EACT,sBAAsB,EACtB,wBAAwB,EACxB,0BAA0B,EAC1B,kCAAkC,EAClC,sBAAsB,EAEtB,QAAQ,EACR,yBAAyB,GAM1B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAwB,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAGL,aAAa,EACb,eAAe,EACf,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,EACxB,aAAa,EACb,YAAY,EACZ,wBAAwB,GACzB,MAAM,cAAc,CAAC;AAEtB,wFAAwF;AACxF,MAAM,kBAAkB,GAAG,CAAC,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"sdk-server.js","sourceRoot":"","sources":["../src/sdk-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ export { createLocalPolicyAdmissionGate, type FixedWindowQuota, InMemoryPolicyAs
|
|
|
13
13
|
export { CachingPolicyAssignmentStore, type PolicyCacheOptions, } from './policy-cache.js';
|
|
14
14
|
export { InMemoryPolicyCounterStore } from './policy-counters.js';
|
|
15
15
|
export { type DeployError, type DeployResult, type RecoverResult, type RollbackResult, ServerRegistry, } from './registry.js';
|
|
16
|
+
export { aggregateRequestEvents, type ClientMetrics, type MethodMetrics, type RequestMetrics, type SeriesBucket, type ToolMetrics, } from './request-event-metrics.js';
|
|
16
17
|
export { type GcpKmsConfig, gcpKmsMasterKeyProvider, type KmsClient, } from './secret/kms-master-key.js';
|
|
17
18
|
export { type RunningService, serveService } from './serve.js';
|
|
18
19
|
export { createServiceHandler } from './service.js';
|
|
@@ -21,6 +22,9 @@ export { AUDIT_SCHEMA_VERSION, type AuditDecision, type AuditDetails, type Audit
|
|
|
21
22
|
export { InMemoryControlPlaneStore } from './store/control-plane.js';
|
|
22
23
|
export { PostgresArtifactStore, type PostgresStoreOptions } from './store/postgres.js';
|
|
23
24
|
export { ensureStateHandleSchema, PostgresStateHandleStore, type PostgresStateHandleStoreOptions, } from './store/postgres-state-handles.js';
|
|
25
|
+
export { RequestEventBuffer } from './store/request-event-buffer.js';
|
|
26
|
+
export { InMemoryRequestEventStore } from './store/request-events.js';
|
|
27
|
+
export { ensureRequestEventSchema, PostgresRequestEventStore, } from './store/request-events-postgres.js';
|
|
24
28
|
export { InMemoryUserAppLogStore, type InMemoryUserAppLogStoreOptions, type UserAppLogEvent, type UserAppLogFilter, type UserAppLogInput, type UserAppLogLevel, type UserAppLogSink, type UserAppLogStore, } from './store/user-app-logs.js';
|
|
25
29
|
export { type AppArchiveResult, type AppRestoreResult, type ArtifactStore, CONFIG_NAME_PATTERN, type ConfigScope, type ConfigStore, type ConfigValueMetadata, type ControlPlaneStore, DEPLOYMENT_ID_PATTERN, type DeploymentListFilter, type DeploymentSummary, type DeployRecord, DOMAIN_PATTERN, InMemoryArtifactStore, InMemoryConfigStore, JsonFileArtifactStore, type ManagedConfigKind, type OrgDomainRecord, type OrgInvitationRecord, type OrgMemberRecord, type OrgRecord, type OrgRole, resolveConfigScope, type SecretEnvelope, type SignupAllowlistKind, type SignupAllowlistRecord, SLUG_PATTERN, scopeChain, type TenantAuthConfig, type TenantRef, validateConfigName, validateConfigScope, validateDomain, validateOrgRole, validateSignupAllowlistKind, validateSlug, validateTenantRef, } from './store.js';
|
|
26
30
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ export { createLocalPolicyAdmissionGate, InMemoryPolicyAssignmentStore, LocalPol
|
|
|
12
12
|
export { CachingPolicyAssignmentStore, } from './policy-cache.js';
|
|
13
13
|
export { InMemoryPolicyCounterStore } from './policy-counters.js';
|
|
14
14
|
export { ServerRegistry, } from './registry.js';
|
|
15
|
+
export { aggregateRequestEvents, } from './request-event-metrics.js';
|
|
15
16
|
export { gcpKmsMasterKeyProvider, } from './secret/kms-master-key.js';
|
|
16
17
|
export { serveService } from './serve.js';
|
|
17
18
|
export { createServiceHandler } from './service.js';
|
|
@@ -20,6 +21,9 @@ export { AUDIT_SCHEMA_VERSION, InMemoryAuditStore, MultiSink, redactDetails, Std
|
|
|
20
21
|
export { InMemoryControlPlaneStore } from './store/control-plane.js';
|
|
21
22
|
export { PostgresArtifactStore } from './store/postgres.js';
|
|
22
23
|
export { ensureStateHandleSchema, PostgresStateHandleStore, } from './store/postgres-state-handles.js';
|
|
24
|
+
export { RequestEventBuffer } from './store/request-event-buffer.js';
|
|
25
|
+
export { InMemoryRequestEventStore } from './store/request-events.js';
|
|
26
|
+
export { ensureRequestEventSchema, PostgresRequestEventStore, } from './store/request-events-postgres.js';
|
|
23
27
|
export { InMemoryUserAppLogStore, } from './store/user-app-logs.js';
|
|
24
28
|
export { CONFIG_NAME_PATTERN, DEPLOYMENT_ID_PATTERN, DOMAIN_PATTERN, InMemoryArtifactStore, InMemoryConfigStore, JsonFileArtifactStore, resolveConfigScope, SLUG_PATTERN, scopeChain, validateConfigName, validateConfigScope, validateDomain, validateOrgRole, validateSignupAllowlistKind, validateSlug, validateTenantRef, } from './store.js';
|
|
25
29
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,EACL,yBAAyB,EACzB,cAAc,EAEd,8BAA8B,EAC9B,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAKL,gBAAgB,EAEhB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAIL,kBAAkB,GAEnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,YAAY,EACZ,WAAW,EAGX,iBAAiB,EAEjB,sBAAsB,EAEtB,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAkB,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EACL,qBAAqB,EAGrB,sBAAsB,EACtB,+BAA+B,EAC/B,oBAAoB,EACpB,wBAAwB,EACxB,iBAAiB,EACjB,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,oBAAoB,EAGpB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAEL,qBAAqB,EACrB,cAAc,EACd,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,8BAA8B,EAE9B,6BAA6B,EAC7B,wBAAwB,EAIxB,mBAAmB,EAQnB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,4BAA4B,GAE7B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAKL,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAEL,uBAAuB,GAExB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAuB,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EAMpB,sBAAsB,EACtB,0BAA0B,GAE3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,oBAAoB,EAQpB,kBAAkB,EAElB,SAAS,EACT,aAAa,EACb,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAA6B,MAAM,qBAAqB,CAAC;AACvF,OAAO,EACL,uBAAuB,EACvB,wBAAwB,GAEzB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,uBAAuB,GAQxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAIL,mBAAmB,EAKnB,qBAAqB,EAIrB,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EAOrB,kBAAkB,EAIlB,YAAY,EACZ,UAAU,EAGV,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,2BAA2B,EAC3B,YAAY,EACZ,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,EACL,yBAAyB,EACzB,cAAc,EAEd,8BAA8B,EAC9B,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAKL,gBAAgB,EAEhB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAIL,kBAAkB,GAEnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,YAAY,EACZ,WAAW,EAGX,iBAAiB,EAEjB,sBAAsB,EAEtB,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAkB,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EACL,qBAAqB,EAGrB,sBAAsB,EACtB,+BAA+B,EAC/B,oBAAoB,EACpB,wBAAwB,EACxB,iBAAiB,EACjB,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,oBAAoB,EAGpB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAEL,qBAAqB,EACrB,cAAc,EACd,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,8BAA8B,EAE9B,6BAA6B,EAC7B,wBAAwB,EAIxB,mBAAmB,EAQnB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,4BAA4B,GAE7B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAKL,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,sBAAsB,GAMvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAEL,uBAAuB,GAExB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAuB,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EAMpB,sBAAsB,EACtB,0BAA0B,GAE3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,oBAAoB,EAQpB,kBAAkB,EAElB,SAAS,EACT,aAAa,EACb,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAA6B,MAAM,qBAAqB,CAAC;AACvF,OAAO,EACL,uBAAuB,EACvB,wBAAwB,GAEzB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EACL,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,uBAAuB,GAQxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAIL,mBAAmB,EAKnB,qBAAqB,EAIrB,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EAOrB,kBAAkB,EAIlB,YAAY,EACZ,UAAU,EAGV,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,2BAA2B,EAC3B,YAAY,EACZ,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
|
+
import type { RequestEventInput, RequestEventStore } from '@noodle-borg/module';
|
|
2
3
|
import type { AdmissionGate, Logger, OwnerTokenVerifier, TlsPosture } from '@noodle-borg/transport-http';
|
|
3
4
|
import type { JSONWebKeySet } from 'jose';
|
|
4
5
|
import type { AssetStore } from './assets.js';
|
|
@@ -90,6 +91,22 @@ export interface ServiceOptions {
|
|
|
90
91
|
* structurally redacted; emit sites pass only safe scalars. Defaults to an in-memory store in `serveService`.
|
|
91
92
|
*/
|
|
92
93
|
readonly userAppLogStore?: UserAppLogStore;
|
|
94
|
+
/**
|
|
95
|
+
* Tenant-facing analytics event store (ADR 0121) — the fourth telemetry stream, separate from platform
|
|
96
|
+
* logs, user-app logs, and audit. Backs the metrics/events read surfaces. `serveService` defaults it to
|
|
97
|
+
* Postgres when persistence is configured, else in-memory.
|
|
98
|
+
*/
|
|
99
|
+
readonly requestEventStore?: RequestEventStore;
|
|
100
|
+
/**
|
|
101
|
+
* Synchronous analytics capture hook threaded into the MCP router (ADR 0121). Must be enqueue-only —
|
|
102
|
+
* `serveService` wires it to a bounded `RequestEventBuffer` over {@link requestEventStore}.
|
|
103
|
+
*/
|
|
104
|
+
readonly captureRequestEvent?: (event: RequestEventInput) => void;
|
|
105
|
+
/**
|
|
106
|
+
* Default analytics retention window in days for the durable request-event stream (ADR 0121 Stage A;
|
|
107
|
+
* tiered by-plan retention is a later stage). Default 30.
|
|
108
|
+
*/
|
|
109
|
+
readonly requestEventRetentionDays?: number;
|
|
93
110
|
/**
|
|
94
111
|
* The self-hosted authorization server issuer (OA-2) advertised in protected-resource metadata so an
|
|
95
112
|
* MCP client can discover where to authenticate. When unset, the metadata omits `authorization_servers`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { RequestEvent } from '@noodle-borg/module';
|
|
2
|
+
/**
|
|
3
|
+
* Pure aggregation over the tenant analytics stream (ADR 0121 Stage B): turns a window of
|
|
4
|
+
* {@link RequestEvent}s into the metrics the CLI and Console render. Discovery events (`*/list`,
|
|
5
|
+
* `ping`) are excluded from usage numbers by construction; sessions are `initialize` counts (the
|
|
6
|
+
* Alpic model — stateless HTTP has no durable session, so `initialize` is the session marker).
|
|
7
|
+
* Node-side aggregation is deliberate for Stage B scale; pre-aggregated rollups are Stage F.
|
|
8
|
+
*/
|
|
9
|
+
export interface RequestMetrics {
|
|
10
|
+
readonly totals: {
|
|
11
|
+
readonly requests: number;
|
|
12
|
+
readonly sessions: number;
|
|
13
|
+
readonly toolCalls: number;
|
|
14
|
+
readonly discovery: number;
|
|
15
|
+
};
|
|
16
|
+
readonly errors: {
|
|
17
|
+
readonly ok: number;
|
|
18
|
+
readonly toolErrors: number;
|
|
19
|
+
readonly mcpErrors: number;
|
|
20
|
+
readonly toolErrorRate: number;
|
|
21
|
+
readonly mcpErrorRate: number;
|
|
22
|
+
readonly errorRate: number;
|
|
23
|
+
};
|
|
24
|
+
readonly latency: {
|
|
25
|
+
readonly avgMs: number;
|
|
26
|
+
readonly p50Ms: number;
|
|
27
|
+
readonly p95Ms: number;
|
|
28
|
+
readonly p99Ms: number;
|
|
29
|
+
};
|
|
30
|
+
readonly tokens: {
|
|
31
|
+
readonly total: number;
|
|
32
|
+
readonly avgPerCall: number;
|
|
33
|
+
};
|
|
34
|
+
readonly byTool: readonly ToolMetrics[];
|
|
35
|
+
readonly byClient: readonly ClientMetrics[];
|
|
36
|
+
readonly byMethod: readonly MethodMetrics[];
|
|
37
|
+
readonly series: readonly SeriesBucket[];
|
|
38
|
+
}
|
|
39
|
+
export interface ToolMetrics {
|
|
40
|
+
readonly tool: string;
|
|
41
|
+
readonly calls: number;
|
|
42
|
+
readonly errors: number;
|
|
43
|
+
readonly share: number;
|
|
44
|
+
readonly p95Ms: number;
|
|
45
|
+
}
|
|
46
|
+
export interface ClientMetrics {
|
|
47
|
+
readonly client: string;
|
|
48
|
+
readonly sessions: number;
|
|
49
|
+
readonly share: number;
|
|
50
|
+
}
|
|
51
|
+
export interface MethodMetrics {
|
|
52
|
+
readonly method: string;
|
|
53
|
+
readonly requests: number;
|
|
54
|
+
readonly share: number;
|
|
55
|
+
}
|
|
56
|
+
export interface SeriesBucket {
|
|
57
|
+
readonly bucketStart: string;
|
|
58
|
+
readonly requests: number;
|
|
59
|
+
readonly toolErrors: number;
|
|
60
|
+
readonly mcpErrors: number;
|
|
61
|
+
}
|
|
62
|
+
export declare function aggregateRequestEvents(events: readonly RequestEvent[]): RequestMetrics;
|
|
63
|
+
//# sourceMappingURL=request-event-metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-event-metrics.d.ts","sourceRoot":"","sources":["../src/request-event-metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IACzE,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAcD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,cAAc,CA4FtF"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/** Nearest-rank percentile over an already-sorted ascending array; 0 when empty. */
|
|
2
|
+
function percentile(sorted, p) {
|
|
3
|
+
if (sorted.length === 0)
|
|
4
|
+
return 0;
|
|
5
|
+
const rank = Math.ceil((p / 100) * sorted.length);
|
|
6
|
+
return sorted[Math.min(Math.max(rank, 1), sorted.length) - 1] ?? 0;
|
|
7
|
+
}
|
|
8
|
+
/** Truncate an ISO timestamp to its UTC hour bucket. */
|
|
9
|
+
function hourBucket(iso) {
|
|
10
|
+
return `${iso.slice(0, 13)}:00:00.000Z`;
|
|
11
|
+
}
|
|
12
|
+
export function aggregateRequestEvents(events) {
|
|
13
|
+
const usage = events.filter((e) => e.kind === 'usage');
|
|
14
|
+
const discovery = events.length - usage.length;
|
|
15
|
+
const durations = usage.map((e) => e.durationMs).sort((a, b) => a - b);
|
|
16
|
+
let ok = 0;
|
|
17
|
+
let toolErrors = 0;
|
|
18
|
+
let mcpErrors = 0;
|
|
19
|
+
let sessions = 0;
|
|
20
|
+
let toolCalls = 0;
|
|
21
|
+
let tokensTotal = 0;
|
|
22
|
+
const byTool = new Map();
|
|
23
|
+
const byClient = new Map();
|
|
24
|
+
const byMethod = new Map();
|
|
25
|
+
const series = new Map();
|
|
26
|
+
for (const event of usage) {
|
|
27
|
+
if (event.outcome === 'ok')
|
|
28
|
+
ok += 1;
|
|
29
|
+
else if (event.outcome === 'tool_error')
|
|
30
|
+
toolErrors += 1;
|
|
31
|
+
else
|
|
32
|
+
mcpErrors += 1;
|
|
33
|
+
if (event.method === 'initialize') {
|
|
34
|
+
sessions += 1;
|
|
35
|
+
const client = event.clientName ?? 'other';
|
|
36
|
+
byClient.set(client, (byClient.get(client) ?? 0) + 1);
|
|
37
|
+
}
|
|
38
|
+
byMethod.set(event.method, (byMethod.get(event.method) ?? 0) + 1);
|
|
39
|
+
if (event.toolName !== undefined) {
|
|
40
|
+
toolCalls += 1;
|
|
41
|
+
const tool = byTool.get(event.toolName) ?? { calls: 0, errors: 0, durations: [] };
|
|
42
|
+
tool.calls += 1;
|
|
43
|
+
if (event.outcome !== 'ok')
|
|
44
|
+
tool.errors += 1;
|
|
45
|
+
tool.durations.push(event.durationMs);
|
|
46
|
+
byTool.set(event.toolName, tool);
|
|
47
|
+
}
|
|
48
|
+
if (event.outputTokensEst !== undefined)
|
|
49
|
+
tokensTotal += event.outputTokensEst;
|
|
50
|
+
const bucketStart = hourBucket(event.createdAt);
|
|
51
|
+
const bucket = series.get(bucketStart) ?? { requests: 0, toolErrors: 0, mcpErrors: 0 };
|
|
52
|
+
bucket.requests += 1;
|
|
53
|
+
if (event.outcome === 'tool_error')
|
|
54
|
+
bucket.toolErrors += 1;
|
|
55
|
+
if (event.outcome === 'mcp_error')
|
|
56
|
+
bucket.mcpErrors += 1;
|
|
57
|
+
series.set(bucketStart, bucket);
|
|
58
|
+
}
|
|
59
|
+
const total = usage.length;
|
|
60
|
+
const rate = (n) => (total === 0 ? 0 : n / total);
|
|
61
|
+
return {
|
|
62
|
+
totals: { requests: total, sessions, toolCalls, discovery },
|
|
63
|
+
errors: {
|
|
64
|
+
ok,
|
|
65
|
+
toolErrors,
|
|
66
|
+
mcpErrors,
|
|
67
|
+
toolErrorRate: rate(toolErrors),
|
|
68
|
+
mcpErrorRate: rate(mcpErrors),
|
|
69
|
+
errorRate: rate(toolErrors + mcpErrors),
|
|
70
|
+
},
|
|
71
|
+
latency: {
|
|
72
|
+
avgMs: total === 0 ? 0 : durations.reduce((a, b) => a + b, 0) / total,
|
|
73
|
+
p50Ms: percentile(durations, 50),
|
|
74
|
+
p95Ms: percentile(durations, 95),
|
|
75
|
+
p99Ms: percentile(durations, 99),
|
|
76
|
+
},
|
|
77
|
+
// avg is over every usage call (a call with no output still dilutes it — it's a bloat gauge).
|
|
78
|
+
tokens: { total: tokensTotal, avgPerCall: total === 0 ? 0 : tokensTotal / total },
|
|
79
|
+
byTool: [...byTool.entries()]
|
|
80
|
+
.map(([tool, t]) => ({
|
|
81
|
+
tool,
|
|
82
|
+
calls: t.calls,
|
|
83
|
+
errors: t.errors,
|
|
84
|
+
share: toolCalls === 0 ? 0 : t.calls / toolCalls,
|
|
85
|
+
p95Ms: percentile(t.durations.slice().sort((a, b) => a - b), 95),
|
|
86
|
+
}))
|
|
87
|
+
.sort((a, b) => b.calls - a.calls),
|
|
88
|
+
byClient: [...byClient.entries()]
|
|
89
|
+
.map(([client, count]) => ({
|
|
90
|
+
client,
|
|
91
|
+
sessions: count,
|
|
92
|
+
share: sessions === 0 ? 0 : count / sessions,
|
|
93
|
+
}))
|
|
94
|
+
.sort((a, b) => b.sessions - a.sessions),
|
|
95
|
+
byMethod: [...byMethod.entries()]
|
|
96
|
+
.map(([method, requests]) => ({ method, requests, share: rate(requests) }))
|
|
97
|
+
.sort((a, b) => b.requests - a.requests),
|
|
98
|
+
series: [...series.entries()]
|
|
99
|
+
.map(([bucketStart, bucket]) => ({ bucketStart, ...bucket }))
|
|
100
|
+
.sort((a, b) => a.bucketStart.localeCompare(b.bucketStart)),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=request-event-metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-event-metrics.js","sourceRoot":"","sources":["../src/request-event-metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
|
+
import type { RequestEventStore } from '@noodle-borg/module';
|
|
3
|
+
import type { DeployAuthGate } from '../auth/deploy-gate.js';
|
|
4
|
+
import type { ControlPlaneStore, TenantRef } from '../store.js';
|
|
5
|
+
export declare function handleTenantMetrics(req: IncomingMessage, res: ServerResponse, gate: DeployAuthGate, controlPlane: ControlPlaneStore, events: RequestEventStore, ref: TenantRef, url: URL): Promise<void>;
|
|
6
|
+
export declare function handleTenantEvents(req: IncomingMessage, res: ServerResponse, gate: DeployAuthGate, controlPlane: ControlPlaneStore, events: RequestEventStore, ref: TenantRef, url: URL): Promise<void>;
|
|
7
|
+
export declare function handleTenantSession(req: IncomingMessage, res: ServerResponse, gate: DeployAuthGate, controlPlane: ControlPlaneStore, events: RequestEventStore, ref: TenantRef, sessionId: string): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=analytics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/routes/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAsB,iBAAiB,EAAkB,MAAM,qBAAqB,CAAC;AACjG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAwBhE,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,cAAc,EACpB,YAAY,EAAE,iBAAiB,EAC/B,MAAM,EAAE,iBAAiB,EACzB,GAAG,EAAE,SAAS,EACd,GAAG,EAAE,GAAG,GACP,OAAO,CAAC,IAAI,CAAC,CAwCf;AAED,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,cAAc,EACpB,YAAY,EAAE,iBAAiB,EAC/B,MAAM,EAAE,iBAAiB,EACzB,GAAG,EAAE,SAAS,EACd,GAAG,EAAE,GAAG,GACP,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,cAAc,EACpB,YAAY,EAAE,iBAAiB,EAC/B,MAAM,EAAE,iBAAiB,EACzB,GAAG,EAAE,SAAS,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAcf"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { sendJson } from '../http-util.js';
|
|
2
|
+
import { aggregateRequestEvents } from '../request-event-metrics.js';
|
|
3
|
+
import { authorizeTenantControl } from './control-plane.js';
|
|
4
|
+
/**
|
|
5
|
+
* Tenant analytics read routes (ADR 0121 Stage B): `metrics` (aggregated), `events` (the stream), and
|
|
6
|
+
* `sessions/{id}` (one session's request sequence). All are org-membership gated and read only the
|
|
7
|
+
* tenant's own slice of the request-event stream; records are scalar-only by construction.
|
|
8
|
+
*/
|
|
9
|
+
// A Map, not a Record: the key is caller-controlled, and a Record lookup would walk the prototype
|
|
10
|
+
// chain (`?window=toString` would resolve to a function instead of undefined).
|
|
11
|
+
const WINDOWS_MS = new Map([
|
|
12
|
+
['24h', 24 * 60 * 60 * 1000],
|
|
13
|
+
['7d', 7 * 24 * 60 * 60 * 1000],
|
|
14
|
+
['30d', 30 * 24 * 60 * 60 * 1000],
|
|
15
|
+
]);
|
|
16
|
+
const OUTCOMES = new Set(['ok', 'tool_error', 'mcp_error']);
|
|
17
|
+
const MAX_EVENTS_LIMIT = 500;
|
|
18
|
+
/** Session replay cap: newest N of one session, rendered chronologically. */
|
|
19
|
+
const SESSION_EVENTS_LIMIT = 1000;
|
|
20
|
+
/** Aggregation reads a bounded slice; pre-aggregated rollups are the Stage-F scale path. */
|
|
21
|
+
const METRICS_SCAN_LIMIT = 50_000;
|
|
22
|
+
export async function handleTenantMetrics(req, res, gate, controlPlane, events, ref, url) {
|
|
23
|
+
const identity = await authorizeTenantControl(req, res, gate, controlPlane, ref.org);
|
|
24
|
+
if (identity === false)
|
|
25
|
+
return;
|
|
26
|
+
const windowParam = url.searchParams.get('window') ?? '7d';
|
|
27
|
+
const windowMs = WINDOWS_MS.get(windowParam);
|
|
28
|
+
const since = url.searchParams.get('since') ?? undefined;
|
|
29
|
+
const until = url.searchParams.get('until') ?? undefined;
|
|
30
|
+
if (windowMs === undefined && since === undefined) {
|
|
31
|
+
return sendJson(res, 400, { error: '"window" must be one of 24h, 7d, 30d (or pass "since")' });
|
|
32
|
+
}
|
|
33
|
+
for (const [name, value] of [
|
|
34
|
+
['since', since],
|
|
35
|
+
['until', until],
|
|
36
|
+
]) {
|
|
37
|
+
if (value !== undefined && Number.isNaN(Date.parse(value))) {
|
|
38
|
+
return sendJson(res, 400, { error: `"${name}" must be an ISO-8601 timestamp` });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const resolvedSince = since ?? new Date(Date.now() - (windowMs ?? WINDOWS_MS.get('7d') ?? 0)).toISOString();
|
|
42
|
+
// No catch here: validation already returned 400, so a rejection is a store/infra fault that must
|
|
43
|
+
// surface as the dispatcher's 500, not masquerade as a client error.
|
|
44
|
+
const window = await events.list({
|
|
45
|
+
org: ref.org,
|
|
46
|
+
app: ref.app,
|
|
47
|
+
env: ref.env,
|
|
48
|
+
since: resolvedSince,
|
|
49
|
+
...(until !== undefined ? { until } : {}),
|
|
50
|
+
limit: METRICS_SCAN_LIMIT,
|
|
51
|
+
});
|
|
52
|
+
// No silent caps: when the scan filled the limit, the aggregates are partial — say so.
|
|
53
|
+
const truncated = window.length >= METRICS_SCAN_LIMIT;
|
|
54
|
+
return sendJson(res, 200, {
|
|
55
|
+
ok: true,
|
|
56
|
+
window: { since: resolvedSince, ...(until !== undefined ? { until } : {}) },
|
|
57
|
+
...(truncated ? { truncated: true } : {}),
|
|
58
|
+
metrics: aggregateRequestEvents(window),
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
export async function handleTenantEvents(req, res, gate, controlPlane, events, ref, url) {
|
|
62
|
+
const identity = await authorizeTenantControl(req, res, gate, controlPlane, ref.org);
|
|
63
|
+
if (identity === false)
|
|
64
|
+
return;
|
|
65
|
+
const limitParam = url.searchParams.get('limit');
|
|
66
|
+
let limit = 100;
|
|
67
|
+
if (limitParam !== null) {
|
|
68
|
+
limit = Number(limitParam);
|
|
69
|
+
if (!Number.isInteger(limit) || limit < 1 || limit > MAX_EVENTS_LIMIT) {
|
|
70
|
+
return sendJson(res, 400, {
|
|
71
|
+
error: `"limit" must be an integer from 1 to ${MAX_EVENTS_LIMIT}`,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const status = url.searchParams.get('status') ?? undefined;
|
|
76
|
+
if (status !== undefined && !OUTCOMES.has(status)) {
|
|
77
|
+
return sendJson(res, 400, { error: '"status" must be one of ok, tool_error, mcp_error' });
|
|
78
|
+
}
|
|
79
|
+
const tool = url.searchParams.get('tool') ?? undefined;
|
|
80
|
+
const client = url.searchParams.get('client') ?? undefined;
|
|
81
|
+
const filter = {
|
|
82
|
+
org: ref.org,
|
|
83
|
+
app: ref.app,
|
|
84
|
+
env: ref.env,
|
|
85
|
+
limit,
|
|
86
|
+
...(status !== undefined ? { outcome: status } : {}),
|
|
87
|
+
...(tool !== undefined ? { toolName: tool } : {}),
|
|
88
|
+
...(client !== undefined ? { clientName: client } : {}),
|
|
89
|
+
};
|
|
90
|
+
// Store rejections surface as the dispatcher's 500 (validation above already handled 400s).
|
|
91
|
+
return sendJson(res, 200, { ok: true, events: await events.list(filter) });
|
|
92
|
+
}
|
|
93
|
+
export async function handleTenantSession(req, res, gate, controlPlane, events, ref, sessionId) {
|
|
94
|
+
const identity = await authorizeTenantControl(req, res, gate, controlPlane, ref.org);
|
|
95
|
+
if (identity === false)
|
|
96
|
+
return;
|
|
97
|
+
// Store rejections surface as the dispatcher's 500. Bounded like every read: a hostile or reused
|
|
98
|
+
// session id must not stream an arbitrarily large payload (newest N, shown chronologically).
|
|
99
|
+
const records = await events.list({
|
|
100
|
+
org: ref.org,
|
|
101
|
+
app: ref.app,
|
|
102
|
+
env: ref.env,
|
|
103
|
+
sessionId,
|
|
104
|
+
limit: SESSION_EVENTS_LIMIT,
|
|
105
|
+
});
|
|
106
|
+
// Stores return newest-first; a session view reads as a chronological sequence.
|
|
107
|
+
return sendJson(res, 200, { ok: true, sessionId, events: [...records].reverse() });
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/routes/analytics.ts"],"names":[],"mappings":"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"}
|