@neuledge/context 0.2.3 → 0.4.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/server.js CHANGED
@@ -1,7 +1,11 @@
1
+ import { createServer } from "node:http";
1
2
  import { createRequire } from "node:module";
2
3
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
4
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
5
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
4
6
  import { z } from "zod";
7
+ import { getServerUrl } from "./config.js";
8
+ import { downloadPackage, searchPackages } from "./download.js";
5
9
  import { search } from "./search.js";
6
10
  const require = createRequire(import.meta.url);
7
11
  const { version } = require("../package.json");
@@ -12,6 +16,7 @@ const { version } = require("../package.json");
12
16
  export class ContextServer {
13
17
  mcp;
14
18
  store;
19
+ getDocsRegistration = null;
15
20
  constructor(store) {
16
21
  this.store = store;
17
22
  this.mcp = new McpServer({
@@ -20,24 +25,101 @@ export class ContextServer {
20
25
  });
21
26
  }
22
27
  /**
23
- * Start the server with stdio transport.
24
- * Registers the get_docs tool if packages are available.
28
+ * Register all MCP tools. Called before connecting a transport.
25
29
  */
26
- async start() {
30
+ registerTools() {
27
31
  const packages = this.store.list();
28
32
  if (packages.length > 0) {
29
33
  this.registerGetDocsTool(packages);
30
34
  }
35
+ this.registerSearchPackagesTool();
36
+ this.registerDownloadPackageTool();
37
+ }
38
+ /**
39
+ * Start the server with stdio transport.
40
+ * Registers tools and connects.
41
+ */
42
+ async start() {
43
+ this.registerTools();
31
44
  const transport = new StdioServerTransport();
32
45
  await this.mcp.connect(transport);
33
46
  }
47
+ /**
48
+ * Start the server with Streamable HTTP transport.
49
+ * Creates an HTTP server that handles MCP protocol over HTTP,
50
+ * allowing multiple clients on the network to connect.
51
+ *
52
+ * @returns The HTTP server instance and the port it's listening on.
53
+ */
54
+ async startHTTP(options) {
55
+ this.registerTools();
56
+ const host = options.host ?? "127.0.0.1";
57
+ // Track transports by session ID for multi-client support
58
+ const transports = new Map();
59
+ const httpServer = createServer(async (req, res) => {
60
+ const url = new URL(req.url ?? "/", `http://${req.headers.host}`);
61
+ if (url.pathname !== "/mcp") {
62
+ res.writeHead(404).end("Not Found");
63
+ return;
64
+ }
65
+ // Handle DELETE for session termination
66
+ if (req.method === "DELETE") {
67
+ const sessionId = req.headers["mcp-session-id"];
68
+ const transport = sessionId ? transports.get(sessionId) : undefined;
69
+ if (sessionId && transport) {
70
+ await transport.close();
71
+ transports.delete(sessionId);
72
+ res.writeHead(200).end();
73
+ }
74
+ else {
75
+ res.writeHead(404).end("Session not found");
76
+ }
77
+ return;
78
+ }
79
+ // For GET and POST, route to existing transport or create new one
80
+ const sessionId = req.headers["mcp-session-id"];
81
+ if (sessionId && transports.has(sessionId)) {
82
+ // Existing session
83
+ await transports.get(sessionId)?.handleRequest(req, res);
84
+ return;
85
+ }
86
+ if (sessionId && !transports.has(sessionId)) {
87
+ // Invalid session ID
88
+ res.writeHead(404).end("Session not found");
89
+ return;
90
+ }
91
+ // New session (no session ID header) — create a new transport.
92
+ // Pre-generate the session ID so we can store the transport before
93
+ // handleRequest (which may keep an SSE stream open indefinitely).
94
+ const newSessionId = crypto.randomUUID();
95
+ const transport = new StreamableHTTPServerTransport({
96
+ sessionIdGenerator: () => newSessionId,
97
+ });
98
+ transport.onclose = () => {
99
+ transports.delete(newSessionId);
100
+ };
101
+ transports.set(newSessionId, transport);
102
+ // Each new transport gets its own ContextServer sharing the same store
103
+ const sessionCtx = new ContextServer(this.store);
104
+ sessionCtx.registerTools();
105
+ await sessionCtx.mcp.connect(transport);
106
+ await transport.handleRequest(req, res);
107
+ });
108
+ return new Promise((resolve) => {
109
+ httpServer.listen(options.port, host, () => {
110
+ const addr = httpServer.address();
111
+ const actualPort = typeof addr === "object" && addr ? addr.port : options.port;
112
+ resolve({ server: httpServer, port: actualPort });
113
+ });
114
+ });
115
+ }
34
116
  /** Access the underlying McpServer for testing. */
35
117
  get server() {
36
118
  return this.mcp;
37
119
  }
38
120
  registerGetDocsTool(packages) {
39
121
  const libraryEnum = packages.map(formatLibraryName);
40
- this.mcp.registerTool("get_docs", {
122
+ this.getDocsRegistration = this.mcp.registerTool("get_docs", {
41
123
  description: "Provides the latest official documentation for installed libraries. Use this as your primary reference when working with library APIs - it contains current, version-specific information that may be more accurate than training data or web searches. Covers API signatures, usage patterns, and best practices. Instant local lookup, no network needed.",
42
124
  inputSchema: {
43
125
  library: z
@@ -48,10 +130,41 @@ export class ContextServer {
48
130
  .describe("What you need help with (e.g., 'middleware authentication', 'server components')"),
49
131
  },
50
132
  }, async ({ library, topic }) => {
51
- return this.handleGetDocs(packages, library, topic);
133
+ return this.handleGetDocs(library, topic);
52
134
  });
53
135
  }
54
- handleGetDocs(packages, library, topic) {
136
+ /**
137
+ * Update the get_docs tool to include newly installed packages.
138
+ * If get_docs doesn't exist yet, register it for the first time.
139
+ */
140
+ refreshGetDocsTool() {
141
+ const packages = this.store.list();
142
+ if (packages.length === 0)
143
+ return;
144
+ const libraryEnum = packages.map(formatLibraryName);
145
+ if (this.getDocsRegistration) {
146
+ // Update existing tool with new enum
147
+ this.getDocsRegistration.update({
148
+ paramsSchema: {
149
+ library: z
150
+ .enum(libraryEnum)
151
+ .describe("The library to search (name@version)"),
152
+ topic: z
153
+ .string()
154
+ .describe("What you need help with (e.g., 'middleware authentication', 'server components')"),
155
+ },
156
+ callback: async ({ library, topic, }) => {
157
+ return this.handleGetDocs(library, topic);
158
+ },
159
+ });
160
+ }
161
+ else {
162
+ this.registerGetDocsTool(packages);
163
+ }
164
+ this.mcp.sendToolListChanged();
165
+ }
166
+ handleGetDocs(library, topic) {
167
+ const packages = this.store.list();
55
168
  const pkg = packages.find((p) => formatLibraryName(p) === library);
56
169
  if (!pkg) {
57
170
  return {
@@ -86,6 +199,111 @@ export class ContextServer {
86
199
  db.close();
87
200
  }
88
201
  }
202
+ registerSearchPackagesTool() {
203
+ this.mcp.registerTool("search_packages", {
204
+ description: "Search for documentation packages available on the registry server. Use this to discover libraries you can download for offline documentation access.",
205
+ inputSchema: {
206
+ registry: z
207
+ .string()
208
+ .describe('Package registry (e.g., "npm", "pip", "cargo", "go")'),
209
+ name: z
210
+ .string()
211
+ .describe('Package name to search for (e.g., "react", "next")'),
212
+ version: z
213
+ .string()
214
+ .optional()
215
+ .describe("Specific version to search for (optional)"),
216
+ server: z
217
+ .string()
218
+ .optional()
219
+ .describe("Server name from config (optional, uses default if omitted)"),
220
+ },
221
+ }, async ({ registry, name, version, server }) => {
222
+ try {
223
+ const serverUrl = getServerUrl(server);
224
+ const results = await searchPackages(serverUrl, registry, name, version);
225
+ return {
226
+ content: [
227
+ {
228
+ type: "text",
229
+ text: JSON.stringify({
230
+ results,
231
+ count: results.length,
232
+ }),
233
+ },
234
+ ],
235
+ };
236
+ }
237
+ catch (err) {
238
+ return {
239
+ content: [
240
+ {
241
+ type: "text",
242
+ text: JSON.stringify({
243
+ error: err instanceof Error ? err.message : String(err),
244
+ }),
245
+ },
246
+ ],
247
+ };
248
+ }
249
+ });
250
+ }
251
+ registerDownloadPackageTool() {
252
+ this.mcp.registerTool("download_package", {
253
+ description: "Download and install a documentation package from the registry server. Once installed, the package becomes available through the get_docs tool for instant offline documentation lookup.",
254
+ inputSchema: {
255
+ registry: z
256
+ .string()
257
+ .describe('Package registry (e.g., "npm", "pip", "cargo", "go")'),
258
+ name: z.string().describe('Package name (e.g., "react", "next")'),
259
+ version: z
260
+ .string()
261
+ .describe('Package version (e.g., "18.3.1", "15.0.4")'),
262
+ server: z
263
+ .string()
264
+ .optional()
265
+ .describe("Server name from config (optional, uses default if omitted)"),
266
+ },
267
+ }, async ({ registry, name, version, server }) => {
268
+ try {
269
+ const serverUrl = getServerUrl(server);
270
+ const info = await downloadPackage(serverUrl, registry, name, version);
271
+ // Add to the store and refresh the get_docs tool
272
+ this.store.add(info);
273
+ this.refreshGetDocsTool();
274
+ return {
275
+ content: [
276
+ {
277
+ type: "text",
278
+ text: JSON.stringify({
279
+ success: true,
280
+ package: {
281
+ name: info.name,
282
+ version: info.version,
283
+ description: info.description,
284
+ sectionCount: info.sectionCount,
285
+ sizeBytes: info.sizeBytes,
286
+ },
287
+ message: `Installed ${info.name}@${info.version} (${info.sectionCount} sections). It is now available via the get_docs tool.`,
288
+ }),
289
+ },
290
+ ],
291
+ };
292
+ }
293
+ catch (err) {
294
+ return {
295
+ content: [
296
+ {
297
+ type: "text",
298
+ text: JSON.stringify({
299
+ error: err instanceof Error ? err.message : String(err),
300
+ }),
301
+ },
302
+ ],
303
+ };
304
+ }
305
+ });
306
+ }
89
307
  }
90
308
  function formatLibraryName(pkg) {
91
309
  return `${pkg.name}@${pkg.version}`;
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAqB,MAAM,EAAE,MAAM,aAAa,CAAC;AAGxD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAEtE;;;GAGG;AACH,MAAM,OAAO,aAAa;IAChB,GAAG,CAAY;IACf,KAAK,CAAe;IACpB,mBAAmB,GACzB,IAAI,CAAC;IAEP,YAAY,KAAmB;QAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC;YACvB,IAAI,EAAE,SAAS;YACf,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,aAAa;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,IAAI,CAAC,2BAA2B,EAAE,CAAC;IACrC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,SAAS,CAAC,OAGf;QACC,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;QAEzC,0DAA0D;QAC1D,MAAM,UAAU,GAAG,IAAI,GAAG,EAAyC,CAAC;QAEpE,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YACjD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAElE,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;gBAC5B,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBACpC,OAAO;YACT,CAAC;YAED,wCAAwC;YACxC,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC5B,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAuB,CAAC;gBACtE,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACpE,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;oBAC3B,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;oBACxB,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBAC7B,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;gBAC3B,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;gBAC9C,CAAC;gBACD,OAAO;YACT,CAAC;YAED,kEAAkE;YAClE,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAuB,CAAC;YAEtE,IAAI,SAAS,IAAI,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3C,mBAAmB;gBACnB,MAAM,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACzD,OAAO;YACT,CAAC;YAED,IAAI,SAAS,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC5C,qBAAqB;gBACrB,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;gBAC5C,OAAO;YACT,CAAC;YAED,+DAA+D;YAC/D,mEAAmE;YACnE,kEAAkE;YAClE,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC;gBAClD,kBAAkB,EAAE,GAAG,EAAE,CAAC,YAAY;aACvC,CAAC,CAAC;YAEH,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE;gBACvB,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAClC,CAAC,CAAC;YAEF,UAAU,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YAExC,uEAAuE;YACvE,MAAM,UAAU,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjD,UAAU,CAAC,aAAa,EAAE,CAAC;YAE3B,MAAM,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACxC,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;gBACzC,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;gBAClC,MAAM,UAAU,GACd,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC9D,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,mDAAmD;IACnD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAEO,mBAAmB,CAAC,QAAuB;QACjD,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAEpD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAC9C,UAAU,EACV;YACE,WAAW,EACT,6VAA6V;YAC/V,WAAW,EAAE;gBACX,OAAO,EAAE,CAAC;qBACP,IAAI,CAAC,WAAoC,CAAC;qBAC1C,QAAQ,CAAC,sCAAsC,CAAC;gBACnD,KAAK,EAAE,CAAC;qBACL,MAAM,EAAE;qBACR,QAAQ,CACP,kFAAkF,CACnF;aACJ;SACF,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3B,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC,CACF,CAAC;IACJ,CAAC;IAED;;;OAGG;IACK,kBAAkB;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAEnC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAElC,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAEpD,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,qCAAqC;YACrC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;gBAC9B,YAAY,EAAE;oBACZ,OAAO,EAAE,CAAC;yBACP,IAAI,CAAC,WAAoC,CAAC;yBAC1C,QAAQ,CAAC,sCAAsC,CAAC;oBACnD,KAAK,EAAE,CAAC;yBACL,MAAM,EAAE;yBACR,QAAQ,CACP,kFAAkF,CACnF;iBACJ;gBACD,QAAQ,EAAE,KAAK,EAAE,EACf,OAAO,EACP,KAAK,GAIN,EAAE,EAAE;oBACH,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC5C,CAAC;aACF,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC;IACjC,CAAC;IAEO,aAAa,CACnB,OAAe,EACf,KAAa;QAEb,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;QAEnE,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,sBAAsB,OAAO,EAAE,EAAE,CAAC;qBACjE;iBACF;aACF,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,KAAK,EAAE,oCAAoC,OAAO,EAAE;yBACrD,CAAC;qBACH;iBACF;aACF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YACjC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;aAC9D,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IAEO,0BAA0B;QAChC,IAAI,CAAC,GAAG,CAAC,YAAY,CACnB,iBAAiB,EACjB;YACE,WAAW,EACT,uJAAuJ;YACzJ,WAAW,EAAE;gBACX,QAAQ,EAAE,CAAC;qBACR,MAAM,EAAE;qBACR,QAAQ,CAAC,sDAAsD,CAAC;gBACnE,IAAI,EAAE,CAAC;qBACJ,MAAM,EAAE;qBACR,QAAQ,CAAC,oDAAoD,CAAC;gBACjE,OAAO,EAAE,CAAC;qBACP,MAAM,EAAE;qBACR,QAAQ,EAAE;qBACV,QAAQ,CAAC,2CAA2C,CAAC;gBACxD,MAAM,EAAE,CAAC;qBACN,MAAM,EAAE;qBACR,QAAQ,EAAE;qBACV,QAAQ,CACP,6DAA6D,CAC9D;aACJ;SACF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;YAC5C,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;gBACvC,MAAM,OAAO,GAAG,MAAM,cAAc,CAClC,SAAS,EACT,QAAQ,EACR,IAAI,EACJ,OAAO,CACR,CAAC;gBAEF,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACnB,OAAO;gCACP,KAAK,EAAE,OAAO,CAAC,MAAM;6BACtB,CAAC;yBACH;qBACF;iBACF,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACnB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;6BACxD,CAAC;yBACH;qBACF;iBACF,CAAC;YACJ,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;IAEO,2BAA2B;QACjC,IAAI,CAAC,GAAG,CAAC,YAAY,CACnB,kBAAkB,EAClB;YACE,WAAW,EACT,0LAA0L;YAC5L,WAAW,EAAE;gBACX,QAAQ,EAAE,CAAC;qBACR,MAAM,EAAE;qBACR,QAAQ,CAAC,sDAAsD,CAAC;gBACnE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;gBACjE,OAAO,EAAE,CAAC;qBACP,MAAM,EAAE;qBACR,QAAQ,CAAC,4CAA4C,CAAC;gBACzD,MAAM,EAAE,CAAC;qBACN,MAAM,EAAE;qBACR,QAAQ,EAAE;qBACV,QAAQ,CACP,6DAA6D,CAC9D;aACJ;SACF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;YAC5C,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;gBACvC,MAAM,IAAI,GAAG,MAAM,eAAe,CAChC,SAAS,EACT,QAAQ,EACR,IAAI,EACJ,OAAO,CACR,CAAC;gBAEF,iDAAiD;gBACjD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACrB,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAE1B,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACnB,OAAO,EAAE,IAAI;gCACb,OAAO,EAAE;oCACP,IAAI,EAAE,IAAI,CAAC,IAAI;oCACf,OAAO,EAAE,IAAI,CAAC,OAAO;oCACrB,WAAW,EAAE,IAAI,CAAC,WAAW;oCAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;oCAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;iCAC1B;gCACD,OAAO,EAAE,aAAa,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,YAAY,wDAAwD;6BAC9H,CAAC;yBACH;qBACF;iBACF,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACnB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;6BACxD,CAAC;yBACH;qBACF;iBACF,CAAC;YACJ,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;CACF;AAED,SAAS,iBAAiB,CAAC,GAAgB;IACzC,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAoB;IAC9C,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,iDAAiD;SAC3D,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neuledge/context",
3
- "version": "0.2.3",
3
+ "version": "0.4.0",
4
4
  "mcpName": "io.github.neuledge/context",
5
5
  "description": "Context management for Neuledge packages",
6
6
  "keywords": [],
@@ -27,15 +27,6 @@
27
27
  "README.md",
28
28
  "LICENSE"
29
29
  ],
30
- "scripts": {
31
- "build": "rimraf --glob dist/** && tsc -p tsconfig.build.json",
32
- "test": "vitest run",
33
- "test:watch": "vitest",
34
- "lint": "npx biome ci --error-on-warnings",
35
- "fix": "npx biome check --write",
36
- "prepare": "npm run build",
37
- "prepublishOnly": "npm run build && npm run test"
38
- },
39
30
  "publishConfig": {
40
31
  "access": "public"
41
32
  },
@@ -69,5 +60,12 @@
69
60
  "require": [
70
61
  "tsconfig-paths/register"
71
62
  ]
63
+ },
64
+ "scripts": {
65
+ "build": "rimraf --glob dist/** && tsc -p tsconfig.build.json",
66
+ "test": "vitest run",
67
+ "test:watch": "vitest",
68
+ "lint": "npx biome ci --error-on-warnings",
69
+ "fix": "npx biome check --write"
72
70
  }
73
- }
71
+ }