@synctek/forgeos 2.0.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +177 -268
  2. package/dist/cli/commands/evidence.d.ts.map +1 -1
  3. package/dist/cli/commands/evidence.js +18 -0
  4. package/dist/cli/commands/evidence.js.map +1 -1
  5. package/dist/cli/commands/federation.d.ts +9 -4
  6. package/dist/cli/commands/federation.d.ts.map +1 -1
  7. package/dist/cli/commands/federation.js +73 -30
  8. package/dist/cli/commands/federation.js.map +1 -1
  9. package/dist/cli/commands/gate.d.ts.map +1 -1
  10. package/dist/cli/commands/gate.js +23 -0
  11. package/dist/cli/commands/gate.js.map +1 -1
  12. package/dist/cli/commands/review.d.ts.map +1 -1
  13. package/dist/cli/commands/review.js +25 -0
  14. package/dist/cli/commands/review.js.map +1 -1
  15. package/dist/cli/index.d.ts +4 -1
  16. package/dist/cli/index.d.ts.map +1 -1
  17. package/dist/cli/index.js +6 -2
  18. package/dist/cli/index.js.map +1 -1
  19. package/dist/mcp/handlers.js +17 -0
  20. package/dist/mcp/handlers.js.map +1 -1
  21. package/dist/mcp/http-server.d.ts.map +1 -1
  22. package/dist/mcp/http-server.js +3 -2
  23. package/dist/mcp/http-server.js.map +1 -1
  24. package/dist/mcp/index.js +2 -1
  25. package/dist/mcp/index.js.map +1 -1
  26. package/dist/shared/types.d.ts +15 -1
  27. package/dist/shared/types.d.ts.map +1 -1
  28. package/dist/shared/version.d.ts +2 -0
  29. package/dist/shared/version.d.ts.map +1 -0
  30. package/dist/shared/version.js +4 -0
  31. package/dist/shared/version.js.map +1 -0
  32. package/dist/trust/index.d.ts +1 -1
  33. package/dist/trust/index.js +1 -1
  34. package/package.json +12 -6
  35. package/dist/client.d.ts +0 -46
  36. package/dist/client.d.ts.map +0 -1
  37. package/dist/client.js +0 -146
  38. package/dist/client.js.map +0 -1
  39. package/dist/handlers.d.ts +0 -11
  40. package/dist/handlers.d.ts.map +0 -1
  41. package/dist/handlers.js +0 -424
  42. package/dist/handlers.js.map +0 -1
  43. package/dist/http-server.d.ts +0 -25
  44. package/dist/http-server.d.ts.map +0 -1
  45. package/dist/http-server.js +0 -246
  46. package/dist/http-server.js.map +0 -1
  47. package/dist/index.d.ts +0 -3
  48. package/dist/index.d.ts.map +0 -1
  49. package/dist/index.js +0 -40
  50. package/dist/index.js.map +0 -1
  51. package/dist/tools.d.ts +0 -944
  52. package/dist/tools.d.ts.map +0 -1
  53. package/dist/tools.js +0 -513
  54. package/dist/tools.js.map +0 -1
  55. package/dist/types.d.ts +0 -183
  56. package/dist/types.d.ts.map +0 -1
  57. package/dist/types.js +0 -3
  58. package/dist/types.js.map +0 -1
@@ -1,246 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * ForgeOS MCP — HTTP/SSE Transport (Hono)
4
- *
5
- * Exposes three endpoints on /mcp:
6
- * POST /mcp — StreamableHTTP main channel (JSON-RPC over HTTP)
7
- * GET /mcp — SSE fallback (server-to-client event stream)
8
- * DELETE /mcp — Session cleanup
9
- * GET /health — Liveness probe
10
- *
11
- * Security design (BIS Condition — BLOCKING):
12
- * API key is read from the Authorization: Bearer <key> header on EVERY
13
- * request. It is threaded into ForgeOSClient as a constructor parameter.
14
- * We NEVER mutate process.env and NEVER hold a shared client singleton
15
- * across requests. Each MCP Server instance is created per-request so
16
- * there is no cross-request state leakage.
17
- *
18
- * Rate limiting:
19
- * Simple in-memory token-bucket per API key (or per IP when no key).
20
- * Max 60 requests / 60-second window. Configurable via env vars:
21
- * RATE_LIMIT_MAX (default 60)
22
- * RATE_LIMIT_WINDOW_MS (default 60000)
23
- */
24
- import { Hono } from "hono";
25
- import { cors } from "hono/cors";
26
- import { serve } from "@hono/node-server";
27
- import { Server } from "@modelcontextprotocol/sdk/server/index.js";
28
- import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
29
- import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
30
- import { randomUUID } from "node:crypto";
31
- import { TOOLS } from "./tools.js";
32
- import { createHandleTool } from "./handlers.js";
33
- import { ForgeOSClient } from "./client.js";
34
- // ---------------------------------------------------------------------------
35
- // Configuration
36
- // ---------------------------------------------------------------------------
37
- const HTTP_PORT = Number(process.env.MCP_HTTP_PORT ?? 8401);
38
- const RATE_LIMIT_MAX = Number(process.env.RATE_LIMIT_MAX ?? 60);
39
- const RATE_LIMIT_WINDOW_MS = Number(process.env.RATE_LIMIT_WINDOW_MS ?? 60_000);
40
- const rateBuckets = new Map();
41
- function checkRateLimit(identityKey) {
42
- const now = Date.now();
43
- const bucket = rateBuckets.get(identityKey);
44
- if (!bucket || now - bucket.windowStart > RATE_LIMIT_WINDOW_MS) {
45
- rateBuckets.set(identityKey, { count: 1, windowStart: now });
46
- return true;
47
- }
48
- if (bucket.count >= RATE_LIMIT_MAX) {
49
- return false;
50
- }
51
- bucket.count++;
52
- return true;
53
- }
54
- // Purge stale buckets every 5 minutes to prevent unbounded memory growth
55
- setInterval(() => {
56
- const now = Date.now();
57
- for (const [key, bucket] of rateBuckets) {
58
- if (now - bucket.windowStart > RATE_LIMIT_WINDOW_MS * 2) {
59
- rateBuckets.delete(key);
60
- }
61
- }
62
- }, 5 * 60_000).unref();
63
- // ---------------------------------------------------------------------------
64
- // MCP Server factory — one fresh Server per request
65
- // ---------------------------------------------------------------------------
66
- function fail(error) {
67
- return {
68
- content: [
69
- {
70
- type: "text",
71
- text: JSON.stringify({ ok: false, error }, null, 2),
72
- },
73
- ],
74
- isError: true,
75
- };
76
- }
77
- /**
78
- * Create a fully wired MCP Server instance bound to the given API key.
79
- * The ForgeOSClient is constructed here with the per-request key — no
80
- * shared state, no env mutation.
81
- */
82
- function createMcpServer(apiKey) {
83
- const forgeClient = new ForgeOSClient(process.env.FORGEOS_ENGINE_URL, apiKey);
84
- const handleTool = createHandleTool(forgeClient);
85
- const server = new Server({ name: "forgeos", version: "0.1.0" }, { capabilities: { tools: {} } });
86
- server.setRequestHandler(ListToolsRequestSchema, async () => ({
87
- tools: TOOLS,
88
- }));
89
- server.setRequestHandler(CallToolRequestSchema, async (req) => {
90
- const name = req.params.name;
91
- const args = (req.params.arguments ?? {});
92
- try {
93
- return await handleTool(name, args);
94
- }
95
- catch (e) {
96
- return fail(e?.message ?? String(e));
97
- }
98
- });
99
- return server;
100
- }
101
- // ---------------------------------------------------------------------------
102
- // Session registry — maps session ID → transport (for DELETE cleanup)
103
- // ---------------------------------------------------------------------------
104
- const sessions = new Map();
105
- // ---------------------------------------------------------------------------
106
- // Hono app
107
- // ---------------------------------------------------------------------------
108
- const app = new Hono();
109
- // CORS — allow any origin (clients are local AI agents or Claude Code)
110
- app.use("*", cors({
111
- origin: "*",
112
- allowMethods: ["GET", "POST", "DELETE", "OPTIONS"],
113
- allowHeaders: ["Content-Type", "Authorization", "Mcp-Session-Id"],
114
- exposeHeaders: ["Mcp-Session-Id"],
115
- maxAge: 86400,
116
- }));
117
- // Health probe — no auth required
118
- app.get("/health", (c) => {
119
- return c.json({
120
- status: "ok",
121
- service: "forgeos-mcp-http",
122
- version: "0.1.0",
123
- activeSessions: sessions.size,
124
- timestamp: new Date().toISOString(),
125
- });
126
- });
127
- // ---------------------------------------------------------------------------
128
- // Auth + rate-limit middleware for /mcp routes
129
- // ---------------------------------------------------------------------------
130
- app.use("/mcp", async (c, next) => {
131
- // Extract API key from Authorization: Bearer <key>
132
- const authHeader = c.req.header("Authorization") ?? "";
133
- const apiKey = authHeader.startsWith("Bearer ")
134
- ? authHeader.slice(7).trim()
135
- : "";
136
- // Identity for rate limiting: prefer API key, fall back to remote IP
137
- const identity = apiKey || c.req.header("X-Forwarded-For") || "anonymous";
138
- if (!checkRateLimit(identity)) {
139
- return c.json({ error: "Rate limit exceeded. Slow down and retry." }, 429);
140
- }
141
- // Store the extracted key in typed context variables
142
- c.set("apiKey", apiKey);
143
- await next();
144
- });
145
- // ---------------------------------------------------------------------------
146
- // POST /mcp — StreamableHTTP main channel
147
- // ---------------------------------------------------------------------------
148
- app.post("/mcp", async (c) => {
149
- const apiKey = c.get("apiKey");
150
- // Parse body once so we can pass it to handleRequest (avoids double-read)
151
- let parsedBody;
152
- try {
153
- parsedBody = await c.req.json();
154
- }
155
- catch {
156
- return c.json({ error: "Invalid JSON body" }, 400);
157
- }
158
- // Check for existing session or create a new one
159
- const sessionId = c.req.header("Mcp-Session-Id");
160
- let transport = sessionId ? sessions.get(sessionId) : undefined;
161
- if (!transport) {
162
- transport = new StreamableHTTPServerTransport({
163
- sessionIdGenerator: () => randomUUID(),
164
- });
165
- const server = createMcpServer(apiKey);
166
- // Capture transport reference for the closure before it changes
167
- const t = transport;
168
- t.onclose = () => {
169
- if (t.sessionId) {
170
- sessions.delete(t.sessionId);
171
- }
172
- };
173
- await server.connect(transport);
174
- if (transport.sessionId) {
175
- sessions.set(transport.sessionId, transport);
176
- }
177
- }
178
- const { incoming: req, outgoing: res } = c.env;
179
- await transport.handleRequest(req, res, parsedBody);
180
- // Response written by transport; return empty sentinel to Hono
181
- return new Response(null, { status: 0 });
182
- });
183
- // ---------------------------------------------------------------------------
184
- // GET /mcp — SSE fallback (server-initiated events)
185
- // ---------------------------------------------------------------------------
186
- app.get("/mcp", async (c) => {
187
- const apiKey = c.get("apiKey");
188
- const sessionId = c.req.header("Mcp-Session-Id");
189
- let transport = sessionId ? sessions.get(sessionId) : undefined;
190
- if (!transport) {
191
- transport = new StreamableHTTPServerTransport({
192
- sessionIdGenerator: () => randomUUID(),
193
- });
194
- const server = createMcpServer(apiKey);
195
- const t = transport;
196
- t.onclose = () => {
197
- if (t.sessionId) {
198
- sessions.delete(t.sessionId);
199
- }
200
- };
201
- await server.connect(transport);
202
- if (transport.sessionId) {
203
- sessions.set(transport.sessionId, transport);
204
- }
205
- }
206
- const { incoming: req, outgoing: res } = c.env;
207
- await transport.handleRequest(req, res);
208
- return new Response(null, { status: 0 });
209
- });
210
- // ---------------------------------------------------------------------------
211
- // DELETE /mcp — session cleanup
212
- // ---------------------------------------------------------------------------
213
- app.delete("/mcp", async (c) => {
214
- const sessionId = c.req.header("Mcp-Session-Id");
215
- if (!sessionId) {
216
- return c.json({ error: "Mcp-Session-Id header required" }, 400);
217
- }
218
- const transport = sessions.get(sessionId);
219
- if (!transport) {
220
- return c.json({ error: "Session not found" }, 404);
221
- }
222
- const { incoming: req, outgoing: res } = c.env;
223
- await transport.handleRequest(req, res);
224
- return new Response(null, { status: 0 });
225
- });
226
- // ---------------------------------------------------------------------------
227
- // Start server
228
- // ---------------------------------------------------------------------------
229
- export function startHttpServer(port = HTTP_PORT) {
230
- serve({
231
- fetch: app.fetch,
232
- port,
233
- }, (info) => {
234
- console.error(`ForgeOS MCP HTTP server listening on http://localhost:${info.port}`);
235
- console.error(` POST http://localhost:${info.port}/mcp`);
236
- console.error(` GET http://localhost:${info.port}/mcp (SSE)`);
237
- console.error(` DELETE http://localhost:${info.port}/mcp (cleanup)`);
238
- console.error(` GET http://localhost:${info.port}/health`);
239
- });
240
- }
241
- // Allow direct execution: node dist/http-server.js
242
- if (process.argv[1]?.endsWith("http-server.js") ||
243
- process.argv[1]?.endsWith("http-server.ts")) {
244
- startHttpServer();
245
- }
246
- //# sourceMappingURL=http-server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js DELETED
@@ -1,40 +0,0 @@
1
- #!/usr/bin/env node
2
- import { Server } from "@modelcontextprotocol/sdk/server/index.js";
3
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
- import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
5
- import { TOOLS } from "./tools.js";
6
- import { handleTool } from "./handlers.js";
7
- function fail(error) {
8
- return {
9
- content: [
10
- {
11
- type: "text",
12
- text: JSON.stringify({ ok: false, error }, null, 2),
13
- },
14
- ],
15
- isError: true,
16
- };
17
- }
18
- const server = new Server({ name: "forgeos", version: "1.2.0" }, { capabilities: { tools: {} } });
19
- server.setRequestHandler(ListToolsRequestSchema, async () => ({
20
- tools: TOOLS,
21
- }));
22
- server.setRequestHandler(CallToolRequestSchema, async (req) => {
23
- const name = req.params.name;
24
- const args = (req.params.arguments ?? {});
25
- try {
26
- return await handleTool(name, args);
27
- }
28
- catch (e) {
29
- return fail(e?.message ?? String(e));
30
- }
31
- });
32
- async function main() {
33
- const transport = new StdioServerTransport();
34
- await server.connect(transport);
35
- }
36
- main().catch((err) => {
37
- console.error(err);
38
- process.exit(1);
39
- });
40
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,SAAS,IAAI,CAAC,KAAa;IACzB,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;aACpD;SACF;QACD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,EACrC,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChC,CAAC;AAEF,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAC5D,KAAK,EAAE,KAAK;CACb,CAAC,CAAC,CAAC;AAEJ,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IAC5D,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IAC7B,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAA4B,CAAC;IACrE,IAAI,CAAC;QACH,OAAO,MAAM,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}