@agentcairn/mcp-server 0.0.0-stage → 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/README.md +23 -2
- package/dist/authn.d.ts +38 -0
- package/dist/authn.js +86 -0
- package/dist/authn.js.map +1 -0
- package/dist/bin.d.ts +2 -0
- package/dist/bin.js +25 -0
- package/dist/bin.js.map +1 -0
- package/dist/context.d.ts +49 -0
- package/dist/context.js +79 -0
- package/dist/context.js.map +1 -0
- package/dist/dashboard.d.ts +29 -0
- package/dist/dashboard.js +365 -0
- package/dist/dashboard.js.map +1 -0
- package/dist/events.d.ts +120 -0
- package/dist/events.js +161 -0
- package/dist/events.js.map +1 -0
- package/dist/http.d.ts +35 -0
- package/dist/http.js +348 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/security.d.ts +49 -0
- package/dist/security.js +143 -0
- package/dist/security.js.map +1 -0
- package/dist/serve.d.ts +2 -0
- package/dist/serve.js +60 -0
- package/dist/serve.js.map +1 -0
- package/dist/server.d.ts +10 -0
- package/dist/server.js +14 -0
- package/dist/server.js.map +1 -0
- package/dist/tools.d.ts +8 -0
- package/dist/tools.js +199 -0
- package/dist/tools.js.map +1 -0
- package/dist/util.d.ts +13 -0
- package/dist/util.js +49 -0
- package/dist/util.js.map +1 -0
- package/package.json +55 -4
- package/ui/css/app.css +361 -0
- package/ui/favicon.svg +1 -0
- package/ui/index.html +17 -0
- package/ui/js/api.js +37 -0
- package/ui/js/app.js +190 -0
- package/ui/js/charts.js +133 -0
- package/ui/js/dom.js +247 -0
- package/ui/js/drawer.js +39 -0
- package/ui/js/json.js +37 -0
- package/ui/js/store.js +77 -0
- package/ui/js/views/access.js +129 -0
- package/ui/js/views/auth.js +102 -0
- package/ui/js/views/eventDrawer.js +106 -0
- package/ui/js/views/graph.js +344 -0
- package/ui/js/views/live.js +203 -0
- package/ui/js/views/memoryDrawer.js +37 -0
- package/ui/js/views/project.js +94 -0
- package/ui/js/views/projects.js +77 -0
- package/ui/js/views/query.js +107 -0
- package/ui/js/views/system.js +73 -0
package/dist/events.js
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory flight recorder for everything agents send the server. Nothing
|
|
3
|
+
* here is persisted: it holds the last `capacity` requests plus rolling
|
|
4
|
+
* aggregates, which is what the dashboard's live views are drawn from.
|
|
5
|
+
*/
|
|
6
|
+
const MINUTE = 60_000;
|
|
7
|
+
const ACTIVE_MS = 5 * MINUTE;
|
|
8
|
+
const FORGET_MS = 24 * 60 * MINUTE;
|
|
9
|
+
const percentile = (sorted, p) => sorted.length === 0 ? 0 : sorted[Math.min(sorted.length - 1, Math.floor((p / 100) * sorted.length))];
|
|
10
|
+
export class EventLog {
|
|
11
|
+
capacity;
|
|
12
|
+
startedAt;
|
|
13
|
+
clock;
|
|
14
|
+
ring = [];
|
|
15
|
+
nextId = 1;
|
|
16
|
+
subscribers = new Set();
|
|
17
|
+
clients = new Map();
|
|
18
|
+
projects = new Map();
|
|
19
|
+
minutes = new Map();
|
|
20
|
+
totals = { requests: 0, errors: 0, authFailures: 0, tokensOut: 0, bytesIn: 0, bytesOut: 0 };
|
|
21
|
+
viewers = 0;
|
|
22
|
+
constructor(capacity = 2000, startedAt = new Date(), clock = Date.now) {
|
|
23
|
+
this.capacity = capacity;
|
|
24
|
+
this.startedAt = startedAt;
|
|
25
|
+
this.clock = clock;
|
|
26
|
+
}
|
|
27
|
+
add(input) {
|
|
28
|
+
const now = this.clock();
|
|
29
|
+
const event = { ...input, id: this.nextId++, ts: new Date(now).toISOString() };
|
|
30
|
+
this.ring.push(event);
|
|
31
|
+
if (this.ring.length > this.capacity)
|
|
32
|
+
this.ring.splice(0, this.ring.length - this.capacity);
|
|
33
|
+
this.totals.requests++;
|
|
34
|
+
if (!event.ok)
|
|
35
|
+
this.totals.errors++;
|
|
36
|
+
if (event.source === 'auth')
|
|
37
|
+
this.totals.authFailures++;
|
|
38
|
+
this.totals.tokensOut += event.tokensOut;
|
|
39
|
+
this.totals.bytesIn += event.bytesIn;
|
|
40
|
+
this.totals.bytesOut += event.bytesOut;
|
|
41
|
+
const minute = Math.floor(now / MINUTE) * MINUTE;
|
|
42
|
+
const bucket = this.minutes.get(minute) ?? { t: new Date(minute).toISOString(), requests: 0, errors: 0, tokensOut: 0 };
|
|
43
|
+
bucket.requests++;
|
|
44
|
+
if (!event.ok)
|
|
45
|
+
bucket.errors++;
|
|
46
|
+
bucket.tokensOut += event.tokensOut;
|
|
47
|
+
this.minutes.set(minute, bucket);
|
|
48
|
+
for (const key of this.minutes.keys())
|
|
49
|
+
if (key < now - 6 * 60 * MINUTE)
|
|
50
|
+
this.minutes.delete(key);
|
|
51
|
+
if (event.source !== 'auth')
|
|
52
|
+
this.track(event, now);
|
|
53
|
+
const summary = summarize(event);
|
|
54
|
+
for (const fn of this.subscribers) {
|
|
55
|
+
try {
|
|
56
|
+
fn(summary);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// a broken subscriber must not break recording
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return event;
|
|
63
|
+
}
|
|
64
|
+
track(event, now) {
|
|
65
|
+
const key = `${event.client.token ?? '-'}|${event.client.ip ?? '-'}|${event.client.agent ?? '-'}`;
|
|
66
|
+
const c = this.clients.get(key) ??
|
|
67
|
+
{ key, token: event.client.token, ip: event.client.ip, agent: event.client.agent, firstSeen: event.ts, lastSeen: event.ts, requests: 0, errors: 0, active: false };
|
|
68
|
+
c.requests++;
|
|
69
|
+
if (!event.ok)
|
|
70
|
+
c.errors++;
|
|
71
|
+
c.lastSeen = event.ts;
|
|
72
|
+
if (event.tool)
|
|
73
|
+
c.lastTool = event.tool;
|
|
74
|
+
if (event.project)
|
|
75
|
+
c.lastProject = event.project;
|
|
76
|
+
this.clients.set(key, c);
|
|
77
|
+
for (const [k, v] of this.clients)
|
|
78
|
+
if (Date.parse(v.lastSeen) < now - FORGET_MS)
|
|
79
|
+
this.clients.delete(k);
|
|
80
|
+
if (event.project) {
|
|
81
|
+
const p = this.projects.get(event.project) ?? { project: event.project, requests: 0, lastSeen: event.ts };
|
|
82
|
+
p.requests++;
|
|
83
|
+
p.lastSeen = event.ts;
|
|
84
|
+
this.projects.set(event.project, p);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
subscribe(fn) {
|
|
88
|
+
this.subscribers.add(fn);
|
|
89
|
+
return () => this.subscribers.delete(fn);
|
|
90
|
+
}
|
|
91
|
+
get(id) {
|
|
92
|
+
return this.ring.find(e => e.id === id);
|
|
93
|
+
}
|
|
94
|
+
recent(filter = {}) {
|
|
95
|
+
const limit = Math.min(Math.max(filter.limit ?? 100, 1), 500);
|
|
96
|
+
const out = [];
|
|
97
|
+
for (let i = this.ring.length - 1; i >= 0 && out.length < limit; i--) {
|
|
98
|
+
const e = this.ring[i];
|
|
99
|
+
if (filter.before !== undefined && e.id >= filter.before)
|
|
100
|
+
continue;
|
|
101
|
+
if (filter.tool && e.tool !== filter.tool && e.method !== filter.tool)
|
|
102
|
+
continue;
|
|
103
|
+
if (filter.project && e.project !== filter.project)
|
|
104
|
+
continue;
|
|
105
|
+
if (filter.client && e.client.token !== filter.client && e.client.ip !== filter.client && e.client.agent !== filter.client)
|
|
106
|
+
continue;
|
|
107
|
+
if (filter.ok !== undefined && e.ok !== filter.ok)
|
|
108
|
+
continue;
|
|
109
|
+
if (filter.source && e.source !== filter.source)
|
|
110
|
+
continue;
|
|
111
|
+
out.push(summarize(e));
|
|
112
|
+
}
|
|
113
|
+
return out;
|
|
114
|
+
}
|
|
115
|
+
stats() {
|
|
116
|
+
const now = this.clock();
|
|
117
|
+
const perMinute = [];
|
|
118
|
+
const current = Math.floor(now / MINUTE) * MINUTE;
|
|
119
|
+
for (let i = 59; i >= 0; i--) {
|
|
120
|
+
const t = current - i * MINUTE;
|
|
121
|
+
perMinute.push(this.minutes.get(t) ?? { t: new Date(t).toISOString(), requests: 0, errors: 0, tokensOut: 0 });
|
|
122
|
+
}
|
|
123
|
+
const byTool = new Map();
|
|
124
|
+
for (const e of this.ring) {
|
|
125
|
+
// protocol chatter (initialize, tools/list…) is in the feed but is not a tool
|
|
126
|
+
if (e.source === 'auth' || (e.source === 'mcp' && !e.tool))
|
|
127
|
+
continue;
|
|
128
|
+
const name = e.tool ?? e.method;
|
|
129
|
+
byTool.set(name, [...(byTool.get(name) ?? []), e]);
|
|
130
|
+
}
|
|
131
|
+
const tools = [...byTool].map(([name, events]) => {
|
|
132
|
+
const durations = events.map(e => e.durationMs).sort((a, b) => a - b);
|
|
133
|
+
return {
|
|
134
|
+
name,
|
|
135
|
+
count: events.length,
|
|
136
|
+
errors: events.filter(e => !e.ok).length,
|
|
137
|
+
p50Ms: Math.round(percentile(durations, 50)),
|
|
138
|
+
p95Ms: Math.round(percentile(durations, 95)),
|
|
139
|
+
avgTokensOut: Math.round(events.reduce((a, e) => a + e.tokensOut, 0) / events.length),
|
|
140
|
+
};
|
|
141
|
+
});
|
|
142
|
+
tools.sort((a, b) => b.count - a.count);
|
|
143
|
+
return {
|
|
144
|
+
startedAt: this.startedAt.toISOString(),
|
|
145
|
+
uptimeSeconds: Math.round((now - this.startedAt.getTime()) / 1000),
|
|
146
|
+
totals: { ...this.totals },
|
|
147
|
+
perMinute,
|
|
148
|
+
tools,
|
|
149
|
+
clients: [...this.clients.values()]
|
|
150
|
+
.map(c => ({ ...c, active: now - Date.parse(c.lastSeen) < ACTIVE_MS }))
|
|
151
|
+
.sort((a, b) => b.lastSeen.localeCompare(a.lastSeen)),
|
|
152
|
+
projects: [...this.projects.values()].sort((a, b) => b.lastSeen.localeCompare(a.lastSeen)),
|
|
153
|
+
viewers: this.viewers,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
export function summarize(e) {
|
|
158
|
+
const { request, response, ...rest } = e;
|
|
159
|
+
return { ...rest, hasPayload: request !== undefined || response !== undefined };
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgGH,MAAM,MAAM,GAAG,MAAM,CAAA;AACrB,MAAM,SAAS,GAAG,CAAC,GAAG,MAAM,CAAA;AAC5B,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,CAAA;AAElC,MAAM,UAAU,GAAG,CAAC,MAAgB,EAAE,CAAS,EAAE,EAAE,CACjD,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAE,CAAA;AAEvG,MAAM,OAAO,QAAQ;IAWR;IACQ;IACA;IAZX,IAAI,GAAiB,EAAE,CAAA;IACvB,MAAM,GAAG,CAAC,CAAA;IACD,WAAW,GAAG,IAAI,GAAG,EAAiC,CAAA;IACtD,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAA;IACvC,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAA;IACzC,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAA;IACzC,MAAM,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAA;IAC5G,OAAO,GAAG,CAAC,CAAA;IAEX,YACW,WAAW,IAAI,EACP,YAAY,IAAI,IAAI,EAAE,EACtB,QAAsB,IAAI,CAAC,GAAG;QAFtC,aAAQ,GAAR,QAAQ,CAAO;QACP,cAAS,GAAT,SAAS,CAAa;QACtB,UAAK,GAAL,KAAK,CAAyB;IAC9C,CAAC;IAEJ,GAAG,CAAC,KAAoC;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;QACxB,MAAM,KAAK,GAAe,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAA;QAC1F,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACrB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAA;QAE3F,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;QACtB,IAAI,CAAC,KAAK,CAAC,EAAE;YAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;QACnC,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;YAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAA;QACvD,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAA;QACxC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAA;QACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAA;QAEtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,MAAM,CAAA;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAA;QACtH,MAAM,CAAC,QAAQ,EAAE,CAAA;QACjB,IAAI,CAAC,KAAK,CAAC,EAAE;YAAE,MAAM,CAAC,MAAM,EAAE,CAAA;QAC9B,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAA;QACnC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAChC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAAE,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,MAAM;gBAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAEhG,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;YAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QAEnD,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;QAChC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,EAAE,CAAC,OAAO,CAAC,CAAA;YACb,CAAC;YAAC,MAAM,CAAC;gBACP,+CAA+C;YACjD,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAEO,KAAK,CAAC,KAAiB,EAAE,GAAW;QAC1C,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,GAAG,EAAE,CAAA;QACjG,MAAM,CAAC,GACL,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YACrB,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;QACpK,CAAC,CAAC,QAAQ,EAAE,CAAA;QACZ,IAAI,CAAC,KAAK,CAAC,EAAE;YAAE,CAAC,CAAC,MAAM,EAAE,CAAA;QACzB,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAA;QACrB,IAAI,KAAK,CAAC,IAAI;YAAE,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAA;QACvC,IAAI,KAAK,CAAC,OAAO;YAAE,CAAC,CAAC,WAAW,GAAG,KAAK,CAAC,OAAO,CAAA;QAChD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QACxB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,SAAS;gBAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAEvG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,CAAA;YACzG,CAAC,CAAC,QAAQ,EAAE,CAAA;YACZ,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAA;YACrB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QACrC,CAAC;IACH,CAAC;IAED,SAAS,CAAC,EAAiC;QACzC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACxB,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAC1C,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;IACzC,CAAC;IAED,MAAM,CAAC,SAAsB,EAAE;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAC7D,MAAM,GAAG,GAAmB,EAAE,CAAA;QAC9B,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YACrE,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE,CAAA;YACvB,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,EAAE,IAAI,MAAM,CAAC,MAAM;gBAAE,SAAQ;YAClE,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI;gBAAE,SAAQ;YAC/E,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO;gBAAE,SAAQ;YAC5D,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM;gBAAE,SAAQ;YACpI,IAAI,MAAM,CAAC,EAAE,KAAK,SAAS,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE;gBAAE,SAAQ;YAC3D,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;gBAAE,SAAQ;YACzD,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;QACxB,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,KAAK;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;QACxB,MAAM,SAAS,GAAmB,EAAE,CAAA;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,MAAM,CAAA;QACjD,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,MAAM,CAAA;YAC9B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAA;QAC/G,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAA;QAC9C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC1B,8EAA8E;YAC9E,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;gBAAE,SAAQ;YACpE,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,CAAA;YAC/B,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACpD,CAAC;QACD,MAAM,KAAK,GAAe,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE;YAC3D,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YACrE,OAAO;gBACL,IAAI;gBACJ,KAAK,EAAE,MAAM,CAAC,MAAM;gBACpB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM;gBACxC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBAC5C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBAC5C,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;aACtF,CAAA;QACH,CAAC,CAAC,CAAA;QACF,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;QAEvC,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;YACvC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;YAClE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;YAC1B,SAAS;YACT,KAAK;YACL,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;iBAChC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC;iBACtE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACvD,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC1F,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAA;IACH,CAAC;CACF;AAED,MAAM,UAAU,SAAS,CAAC,CAAa;IACrC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,CAAA;IACxC,OAAO,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,OAAO,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAA;AACjF,CAAC"}
|
package/dist/http.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type Server } from 'node:http';
|
|
2
|
+
import { type Brain } from '@agentcairn/core';
|
|
3
|
+
import { Authenticator } from './authn.js';
|
|
4
|
+
import { EventLog } from './events.js';
|
|
5
|
+
import { SessionStore, SetupGate } from './security.js';
|
|
6
|
+
export declare const PROJECT_HEADER = "x-cairn-project";
|
|
7
|
+
export declare const REMOTE_HEADER = "x-cairn-remote";
|
|
8
|
+
export interface HttpOptions {
|
|
9
|
+
/** Static bearer token (CAIRN_TOKEN). Tokens made in the dashboard work too. */
|
|
10
|
+
token?: string;
|
|
11
|
+
/** Run without any authentication. Trusted networks only. */
|
|
12
|
+
noAuth?: boolean;
|
|
13
|
+
maxBodyBytes?: number;
|
|
14
|
+
log?: (message: string) => void;
|
|
15
|
+
/** `full` keeps request and response payloads for the dashboard; `meta` keeps only the summary. */
|
|
16
|
+
capture?: 'full' | 'meta';
|
|
17
|
+
/** How many recent requests the flight recorder holds. */
|
|
18
|
+
eventCapacity?: number;
|
|
19
|
+
/** Believe X-Forwarded-For (only behind a proxy you control). */
|
|
20
|
+
trustProxy?: boolean;
|
|
21
|
+
/** Mark session cookies Secure (when served over HTTPS). */
|
|
22
|
+
secureCookies?: boolean;
|
|
23
|
+
/** Serve the dashboard (default true). */
|
|
24
|
+
dashboard?: boolean;
|
|
25
|
+
port?: number;
|
|
26
|
+
}
|
|
27
|
+
export interface BrainHttp {
|
|
28
|
+
server: Server;
|
|
29
|
+
events: EventLog;
|
|
30
|
+
setup: SetupGate;
|
|
31
|
+
sessions: SessionStore;
|
|
32
|
+
auth: Authenticator;
|
|
33
|
+
}
|
|
34
|
+
export declare function createBrainHttp(brain: Brain, options?: HttpOptions): BrainHttp;
|
|
35
|
+
export declare function createHttpServer(brain: Brain, options?: HttpOptions): Server;
|
package/dist/http.js
ADDED
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
import { fileURLToPath } from 'node:url';
|
|
2
|
+
import { createServer } from 'node:http';
|
|
3
|
+
import { MemoryValidationError, ProjectMissingError, ProjectNotFoundError, RemoteConflictError, UnresolvedProjectError, attachRemote, buildBriefing, checkConnection, countActiveByKind, estimateTokens, hasDefaultCredentials, listStaleInputs, loadConfig, normalizeRemoteHint, registerProject, remoteHash, schemaVersion, SupersedeError, } from '@agentcairn/core';
|
|
4
|
+
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
5
|
+
import { Authenticator, authFailureMessage } from './authn.js';
|
|
6
|
+
import { BrainContext } from './context.js';
|
|
7
|
+
import { createDashboard } from './dashboard.js';
|
|
8
|
+
import { EventLog } from './events.js';
|
|
9
|
+
import { SessionStore, SetupGate } from './security.js';
|
|
10
|
+
import { createBrainServer } from './server.js';
|
|
11
|
+
import { HttpError, asRecord, clientIp, header, readJson, send } from './util.js';
|
|
12
|
+
export const PROJECT_HEADER = 'x-cairn-project';
|
|
13
|
+
export const REMOTE_HEADER = 'x-cairn-remote';
|
|
14
|
+
const SERVER_VERSION = '0.1.0';
|
|
15
|
+
const PAYLOAD_LIMIT = 16_384;
|
|
16
|
+
const CAPTURE_PARSE_LIMIT = 512 * 1024;
|
|
17
|
+
function toHttpError(error) {
|
|
18
|
+
if (error instanceof HttpError)
|
|
19
|
+
return error;
|
|
20
|
+
if (error instanceof ProjectNotFoundError)
|
|
21
|
+
return new HttpError(404, 'project_not_found', error.message, { projectId: error.projectId });
|
|
22
|
+
if (error instanceof ProjectMissingError)
|
|
23
|
+
return new HttpError(404, 'project_not_found', error.message, { projectId: error.projectId });
|
|
24
|
+
if (error instanceof RemoteConflictError) {
|
|
25
|
+
return new HttpError(409, 'remote_conflict', error.message, { ownerProjectId: error.ownerProjectId });
|
|
26
|
+
}
|
|
27
|
+
if (error instanceof UnresolvedProjectError)
|
|
28
|
+
return new HttpError(400, 'unresolved_project', error.message);
|
|
29
|
+
if (error instanceof MemoryValidationError || error instanceof SupersedeError) {
|
|
30
|
+
return new HttpError(400, 'invalid', error.message);
|
|
31
|
+
}
|
|
32
|
+
const e = error;
|
|
33
|
+
if (e.code === 'ServiceUnavailable' || e.code === 'SessionExpired' || e.code === 'Neo.ClientError.Security.Unauthorized') {
|
|
34
|
+
return new HttpError(503, 'database_unavailable', 'The server cannot reach Neo4j.');
|
|
35
|
+
}
|
|
36
|
+
if (e.message?.startsWith('Invalid project id'))
|
|
37
|
+
return new HttpError(400, 'invalid', e.message);
|
|
38
|
+
return new HttpError(500, 'internal', 'Unexpected server error.');
|
|
39
|
+
}
|
|
40
|
+
/** Keeps payloads small enough to hold thousands of them in memory. */
|
|
41
|
+
function trimPayload(value) {
|
|
42
|
+
if (value === undefined)
|
|
43
|
+
return undefined;
|
|
44
|
+
const text = JSON.stringify(value);
|
|
45
|
+
if (text === undefined || text.length <= PAYLOAD_LIMIT)
|
|
46
|
+
return value;
|
|
47
|
+
return { _truncated: true, originalChars: text.length, preview: text.slice(0, PAYLOAD_LIMIT) };
|
|
48
|
+
}
|
|
49
|
+
/** Records the response as it is written, without changing it. */
|
|
50
|
+
function tapResponse(res) {
|
|
51
|
+
const chunks = [];
|
|
52
|
+
let kept = 0;
|
|
53
|
+
let total = 0;
|
|
54
|
+
const take = (chunk) => {
|
|
55
|
+
if (chunk === undefined || chunk === null || typeof chunk === 'function')
|
|
56
|
+
return;
|
|
57
|
+
const buf = Buffer.isBuffer(chunk) ? chunk : chunk instanceof Uint8Array ? Buffer.from(chunk) : Buffer.from(String(chunk));
|
|
58
|
+
total += buf.length;
|
|
59
|
+
if (kept + buf.length <= CAPTURE_PARSE_LIMIT) {
|
|
60
|
+
chunks.push(buf);
|
|
61
|
+
kept += buf.length;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
const write = res.write.bind(res);
|
|
65
|
+
const end = res.end.bind(res);
|
|
66
|
+
res.write = (chunk, ...rest) => {
|
|
67
|
+
take(chunk);
|
|
68
|
+
return write(chunk, ...rest);
|
|
69
|
+
};
|
|
70
|
+
res.end = (chunk, ...rest) => {
|
|
71
|
+
take(chunk);
|
|
72
|
+
return end(chunk, ...rest);
|
|
73
|
+
};
|
|
74
|
+
return { bytes: () => total, text: () => (total === kept ? Buffer.concat(chunks).toString('utf8') : undefined) };
|
|
75
|
+
}
|
|
76
|
+
/** A response body is plain JSON, or SSE framing (`event: message` / `data: {...}`) around it. */
|
|
77
|
+
function parseResponse(raw) {
|
|
78
|
+
if (!raw)
|
|
79
|
+
return undefined;
|
|
80
|
+
try {
|
|
81
|
+
return JSON.parse(raw);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
for (const line of raw.split('\n')) {
|
|
85
|
+
if (!line.startsWith('data:'))
|
|
86
|
+
continue;
|
|
87
|
+
try {
|
|
88
|
+
return JSON.parse(line.slice(5).trim());
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// keep looking
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const textOf = (content) => Array.isArray(content)
|
|
98
|
+
? content.map(c => c.text).filter((t) => typeof t === 'string').join('\n')
|
|
99
|
+
: undefined;
|
|
100
|
+
const SHORT_ID = /#([0-9a-f]{8})\b/g;
|
|
101
|
+
const refsIn = (text) => [...new Set([...(text ?? '').matchAll(SHORT_ID)].map(m => m[1]))].slice(0, 60);
|
|
102
|
+
export function createBrainHttp(brain, options = {}) {
|
|
103
|
+
const maxBody = options.maxBodyBytes ?? 1_000_000;
|
|
104
|
+
const log = options.log ?? (() => undefined);
|
|
105
|
+
const capture = options.capture ?? 'full';
|
|
106
|
+
const trustProxy = options.trustProxy ?? false;
|
|
107
|
+
const events = new EventLog(options.eventCapacity ?? 2000);
|
|
108
|
+
const sessions = new SessionStore();
|
|
109
|
+
const setup = new SetupGate();
|
|
110
|
+
const auth = new Authenticator(brain, { envToken: options.token, noAuth: options.noAuth }, Date.now, log);
|
|
111
|
+
const dashboard = options.dashboard === false
|
|
112
|
+
? undefined
|
|
113
|
+
: createDashboard({
|
|
114
|
+
brain,
|
|
115
|
+
events,
|
|
116
|
+
auth,
|
|
117
|
+
sessions,
|
|
118
|
+
setup,
|
|
119
|
+
version: SERVER_VERSION,
|
|
120
|
+
port: options.port ?? 8787,
|
|
121
|
+
uiDir: fileURLToPath(new URL('../ui', import.meta.url)),
|
|
122
|
+
trustProxy,
|
|
123
|
+
secureCookies: options.secureCookies ?? false,
|
|
124
|
+
maxBodyBytes: maxBody,
|
|
125
|
+
capture,
|
|
126
|
+
authMode: { envToken: Boolean(options.token), noAuth: Boolean(options.noAuth) },
|
|
127
|
+
log,
|
|
128
|
+
});
|
|
129
|
+
const hintOf = (req) => ({ projectId: header(req, PROJECT_HEADER), remote: header(req, REMOTE_HEADER) });
|
|
130
|
+
const agentOf = (req) => header(req, 'user-agent')?.split(/[\s/]/)[0];
|
|
131
|
+
/** The project each in-flight request resolved to, read when its event is recorded. */
|
|
132
|
+
const resolved = new WeakMap();
|
|
133
|
+
const contextFor = (req) => new BrainContext(brain, { hint: hintOf(req) }, () => agentOf(req), id => resolved.set(req, id));
|
|
134
|
+
async function handleMcp(req, res, body) {
|
|
135
|
+
if (req.method !== 'POST') {
|
|
136
|
+
res.setHeader('allow', 'POST');
|
|
137
|
+
return send(res, 405, {
|
|
138
|
+
jsonrpc: '2.0',
|
|
139
|
+
error: { code: -32000, message: 'Method not allowed: this server is stateless, use POST.' },
|
|
140
|
+
id: null,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
const server = createBrainServer(brain, { hint: hintOf(req) }, { agent: agentOf(req), onProject: id => resolved.set(req, id) });
|
|
144
|
+
const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: undefined, enableJsonResponse: true });
|
|
145
|
+
res.on('close', () => {
|
|
146
|
+
void transport.close();
|
|
147
|
+
void server.close();
|
|
148
|
+
});
|
|
149
|
+
await server.connect(transport);
|
|
150
|
+
await transport.handleRequest(req, res, body);
|
|
151
|
+
}
|
|
152
|
+
async function handleApi(req, res, path, rawBody) {
|
|
153
|
+
const ctx = contextFor(req);
|
|
154
|
+
const method = req.method ?? 'GET';
|
|
155
|
+
const body = asRecord(rawBody);
|
|
156
|
+
if (path === '/api/project' && method === 'GET') {
|
|
157
|
+
await ctx.ready();
|
|
158
|
+
const project = await ctx.project({ write: false });
|
|
159
|
+
const counts = await countActiveByKind(brain, project.projectId);
|
|
160
|
+
const info = await checkConnection(brain);
|
|
161
|
+
return send(res, 200, {
|
|
162
|
+
...project,
|
|
163
|
+
counts: Object.fromEntries(counts),
|
|
164
|
+
total: [...counts.values()].reduce((a, b) => a + b, 0),
|
|
165
|
+
schemaVersion: await schemaVersion(brain),
|
|
166
|
+
neo4j: info.agent,
|
|
167
|
+
defaultCredentials: hasDefaultCredentials(loadConfig()),
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
if (path === '/api/init' && method === 'POST') {
|
|
171
|
+
await ctx.ready();
|
|
172
|
+
const remote = typeof body.remote === 'string' ? normalizeRemoteHint(body.remote) : null;
|
|
173
|
+
if (typeof body.remote === 'string' && !remote)
|
|
174
|
+
throw new HttpError(400, 'invalid', 'remote is not a usable git remote.');
|
|
175
|
+
const result = await registerProject(brain, { projectId: typeof body.projectId === 'string' ? body.projectId : undefined, remoteHash: remote ? remoteHash(remote) : null }, { allowCreate: body.allowCreate === true, forceRemote: body.forceRemote === true });
|
|
176
|
+
return send(res, 200, result);
|
|
177
|
+
}
|
|
178
|
+
if (path === '/api/stale-inputs' && method === 'GET') {
|
|
179
|
+
const project = await ctx.project({ write: false });
|
|
180
|
+
return send(res, 200, { inputs: await listStaleInputs(brain, project.projectId) });
|
|
181
|
+
}
|
|
182
|
+
if (path === '/api/briefing' && method === 'POST') {
|
|
183
|
+
const project = await ctx.project({ write: false });
|
|
184
|
+
const staleness = new Map();
|
|
185
|
+
for (const item of Array.isArray(body.stale) ? body.stale : []) {
|
|
186
|
+
const s = asRecord(item);
|
|
187
|
+
if (typeof s.id === 'string') {
|
|
188
|
+
const changed = Array.isArray(s.changedPaths) ? s.changedPaths.filter((p) => typeof p === 'string') : [];
|
|
189
|
+
staleness.set(s.id, { status: 'stale', changedPaths: changed });
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
const maxTokens = typeof body.maxTokens === 'number' ? body.maxTokens : undefined;
|
|
193
|
+
return send(res, 200, await buildBriefing(brain, project.projectId, { maxTokens, staleness }));
|
|
194
|
+
}
|
|
195
|
+
if (path === '/api/remote' && method === 'POST') {
|
|
196
|
+
const remote = typeof body.remote === 'string' ? normalizeRemoteHint(body.remote) : null;
|
|
197
|
+
if (!remote)
|
|
198
|
+
throw new HttpError(400, 'invalid', 'remote is not a usable git remote.');
|
|
199
|
+
const project = await ctx.project({ write: false });
|
|
200
|
+
if (project.isNew)
|
|
201
|
+
throw new ProjectNotFoundError(project.projectId);
|
|
202
|
+
await attachRemote(brain, project.projectId, remoteHash(remote), { force: body.force === true });
|
|
203
|
+
return send(res, 200, { projectId: project.projectId, remote });
|
|
204
|
+
}
|
|
205
|
+
throw new HttpError(404, 'not_found', `No such endpoint: ${method} ${path}`);
|
|
206
|
+
}
|
|
207
|
+
/** Builds the dashboard's record of one finished request. */
|
|
208
|
+
function record(req, res, source, path, body, tap, startedAt, tokenName) {
|
|
209
|
+
const rawResponse = tap.text();
|
|
210
|
+
const parsed = parseResponse(rawResponse);
|
|
211
|
+
let method = `${req.method} ${path}`;
|
|
212
|
+
let tool;
|
|
213
|
+
let ok = res.statusCode < 400;
|
|
214
|
+
let error;
|
|
215
|
+
let responseText;
|
|
216
|
+
let request = body;
|
|
217
|
+
let response = parsed;
|
|
218
|
+
if (source === 'mcp') {
|
|
219
|
+
const rpc = asRecord(Array.isArray(body) ? body[0] : body);
|
|
220
|
+
const out = asRecord(Array.isArray(parsed) ? parsed[0] : parsed);
|
|
221
|
+
const params = asRecord(rpc.params);
|
|
222
|
+
method = typeof rpc.method === 'string' ? rpc.method : 'mcp';
|
|
223
|
+
if (method === 'tools/call' && typeof params.name === 'string')
|
|
224
|
+
tool = params.name;
|
|
225
|
+
const result = asRecord(out.result);
|
|
226
|
+
const failure = asRecord(out.error);
|
|
227
|
+
responseText = textOf(result.content);
|
|
228
|
+
if (typeof failure.message === 'string') {
|
|
229
|
+
ok = false;
|
|
230
|
+
error = failure.message;
|
|
231
|
+
}
|
|
232
|
+
else if (result.isError === true) {
|
|
233
|
+
ok = false;
|
|
234
|
+
error = responseText;
|
|
235
|
+
}
|
|
236
|
+
request = tool ? { tool, arguments: params.arguments } : rpc;
|
|
237
|
+
response = tool ? { text: responseText, isError: result.isError === true } : result;
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
const out = asRecord(parsed);
|
|
241
|
+
responseText = typeof out.text === 'string' ? out.text : undefined;
|
|
242
|
+
if (!ok)
|
|
243
|
+
error = typeof out.message === 'string' ? out.message : undefined;
|
|
244
|
+
}
|
|
245
|
+
const project = resolved.get(req) ?? header(req, PROJECT_HEADER) ?? (header(req, REMOTE_HEADER) ? `remote:${header(req, REMOTE_HEADER)}` : undefined);
|
|
246
|
+
const bytesOut = tap.bytes();
|
|
247
|
+
const event = {
|
|
248
|
+
source,
|
|
249
|
+
method,
|
|
250
|
+
tool,
|
|
251
|
+
project,
|
|
252
|
+
client: { token: tokenName, ip: clientIp(req, trustProxy), agent: agentOf(req), userAgent: header(req, 'user-agent') },
|
|
253
|
+
durationMs: Math.round(performance.now() - startedAt),
|
|
254
|
+
ok,
|
|
255
|
+
httpStatus: res.statusCode,
|
|
256
|
+
bytesIn: Number(header(req, 'content-length')) || 0,
|
|
257
|
+
bytesOut,
|
|
258
|
+
tokensOut: estimateTokens(responseText ?? rawResponse ?? ''),
|
|
259
|
+
memoryRefs: refsIn(responseText ?? rawResponse),
|
|
260
|
+
error: error?.slice(0, 500),
|
|
261
|
+
request: capture === 'full' ? trimPayload(request) : undefined,
|
|
262
|
+
response: capture === 'full' ? trimPayload(response) : undefined,
|
|
263
|
+
};
|
|
264
|
+
events.add(event);
|
|
265
|
+
}
|
|
266
|
+
const server = createServer((req, res) => {
|
|
267
|
+
void (async () => {
|
|
268
|
+
const startedAt = performance.now();
|
|
269
|
+
let recorded = false;
|
|
270
|
+
try {
|
|
271
|
+
const path = new URL(req.url ?? '/', 'http://localhost').pathname;
|
|
272
|
+
if (path === '/healthz') {
|
|
273
|
+
try {
|
|
274
|
+
await Promise.race([
|
|
275
|
+
brain.driver.verifyConnectivity(),
|
|
276
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), 3000)),
|
|
277
|
+
]);
|
|
278
|
+
return send(res, 200, { status: 'ok' });
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
return send(res, 503, { status: 'database_unavailable' });
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
if (dashboard && (await dashboard(req, res, path)))
|
|
285
|
+
return;
|
|
286
|
+
const isMcp = path === '/mcp';
|
|
287
|
+
if (!isMcp && !path.startsWith('/api/'))
|
|
288
|
+
throw new HttpError(404, 'not_found', 'Not found.');
|
|
289
|
+
const authResult = await auth.check(req);
|
|
290
|
+
if (!authResult.ok) {
|
|
291
|
+
const message = authFailureMessage(authResult.reason);
|
|
292
|
+
res.setHeader('www-authenticate', 'Bearer');
|
|
293
|
+
send(res, 401, { error: authResult.reason === 'no_tokens' ? 'no_tokens' : 'unauthorized', message });
|
|
294
|
+
events.add({
|
|
295
|
+
source: 'auth',
|
|
296
|
+
method: `${req.method} ${path}`,
|
|
297
|
+
client: { ip: clientIp(req, trustProxy), agent: agentOf(req), userAgent: header(req, 'user-agent') },
|
|
298
|
+
durationMs: Math.round(performance.now() - startedAt),
|
|
299
|
+
ok: false,
|
|
300
|
+
httpStatus: 401,
|
|
301
|
+
bytesIn: 0,
|
|
302
|
+
bytesOut: 0,
|
|
303
|
+
tokensOut: 0,
|
|
304
|
+
memoryRefs: [],
|
|
305
|
+
error: message,
|
|
306
|
+
});
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
const tap = tapResponse(res);
|
|
310
|
+
let body;
|
|
311
|
+
res.on('finish', () => {
|
|
312
|
+
if (recorded)
|
|
313
|
+
return;
|
|
314
|
+
recorded = true;
|
|
315
|
+
// a client probing GET/DELETE /mcp for a stream is protocol chatter, not a request
|
|
316
|
+
if (isMcp && req.method !== 'POST')
|
|
317
|
+
return;
|
|
318
|
+
try {
|
|
319
|
+
record(req, res, isMcp ? 'mcp' : 'api', path, body, tap, startedAt, authResult.name);
|
|
320
|
+
}
|
|
321
|
+
catch (error) {
|
|
322
|
+
log(`could not record event: ${error.message}`);
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
if (req.method === 'POST')
|
|
326
|
+
body = await readJson(req, maxBody);
|
|
327
|
+
if (isMcp)
|
|
328
|
+
await handleMcp(req, res, body);
|
|
329
|
+
else
|
|
330
|
+
await handleApi(req, res, path, body);
|
|
331
|
+
}
|
|
332
|
+
catch (error) {
|
|
333
|
+
const e = toHttpError(error);
|
|
334
|
+
if (e.status >= 500)
|
|
335
|
+
log(`error: ${error instanceof Error ? (error.stack ?? error.message) : String(error)}`);
|
|
336
|
+
if (!res.headersSent)
|
|
337
|
+
send(res, e.status, { error: e.code, message: e.message, ...e.extra });
|
|
338
|
+
else
|
|
339
|
+
res.end();
|
|
340
|
+
}
|
|
341
|
+
})();
|
|
342
|
+
});
|
|
343
|
+
return { server, events, setup, sessions, auth };
|
|
344
|
+
}
|
|
345
|
+
export function createHttpServer(brain, options = {}) {
|
|
346
|
+
return createBrainHttp(brain, options).server;
|
|
347
|
+
}
|
|
348
|
+
//# sourceMappingURL=http.js.map
|
package/dist/http.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { Authenticator, type AuthResult } from './authn.js';
|
|
2
|
+
export { BrainContext, type Scope } from './context.js';
|
|
3
|
+
export { EventLog, type BrainEvent, type EventSummary, type Stats } from './events.js';
|
|
4
|
+
export { PROJECT_HEADER, REMOTE_HEADER, createBrainHttp, createHttpServer, type BrainHttp, type HttpOptions } from './http.js';
|
|
5
|
+
export { SessionStore, SetupGate, generateSetupCode } from './security.js';
|
|
6
|
+
export { SERVER_NAME, SERVER_VERSION, createBrainServer } from './server.js';
|
|
7
|
+
export { SERVER_INSTRUCTIONS, describeError, formatMemory, registerTools } from './tools.js';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { Authenticator } from './authn.js';
|
|
2
|
+
export { BrainContext } from './context.js';
|
|
3
|
+
export { EventLog } from './events.js';
|
|
4
|
+
export { PROJECT_HEADER, REMOTE_HEADER, createBrainHttp, createHttpServer } from './http.js';
|
|
5
|
+
export { SessionStore, SetupGate, generateSetupCode } from './security.js';
|
|
6
|
+
export { SERVER_NAME, SERVER_VERSION, createBrainServer } from './server.js';
|
|
7
|
+
export { SERVER_INSTRUCTIONS, describeError, formatMemory, registerTools } from './tools.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAmB,MAAM,YAAY,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAc,MAAM,cAAc,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAkD,MAAM,aAAa,CAAA;AACtF,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAoC,MAAM,WAAW,CAAA;AAC9H,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC5E,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA"}
|