@silkweave/core 1.3.1 → 1.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.
@@ -1,6 +1,6 @@
1
1
 
2
2
  
3
- > @silkweave/core@1.3.0 build /Users/atomic/projects/ai/silkweave/packages/core
3
+ > @silkweave/core@1.3.2 build /Users/atomic/projects/ai/silkweave/packages/core
4
4
  > tsup
5
5
 
6
6
  CLI Building entry: src/index.ts
@@ -10,9 +10,9 @@
10
10
  CLI Target: node18
11
11
  CLI Cleaning output folder
12
12
  ESM Build start
13
- ESM build/index.js 3.27 KB
14
- ESM build/index.js.map 7.72 KB
15
- ESM ⚡️ Build success in 5ms
13
+ ESM build/index.js 2.94 KB
14
+ ESM build/index.js.map 7.03 KB
15
+ ESM ⚡️ Build success in 6ms
16
16
  DTS Build start
17
- DTS ⚡️ Build success in 615ms
18
- DTS build/index.d.ts 2.80 KB
17
+ DTS ⚡️ Build success in 665ms
18
+ DTS build/index.d.ts 2.59 KB
@@ -1,9 +1,12 @@
1
1
 
2
- > @silkweave/core@1.3.0 check /Users/atomic/projects/ai/silkweave/packages/core
2
+ > @silkweave/core@1.3.2 check /Users/atomic/projects/ai/silkweave/packages/core
3
3
  > pnpm lint && pnpm typecheck
4
4
 
5
5
 
6
- > @silkweave/core@1.3.0 lint /Users/atomic/projects/ai/silkweave/packages/core
6
+ > @silkweave/core@1.3.2 lint /Users/atomic/projects/ai/silkweave/packages/core
7
7
  > eslint
8
8
 
9
-  ELIFECYCLE  Command failed.
9
+
10
+ > @silkweave/core@1.3.2 typecheck /Users/atomic/projects/ai/silkweave/packages/core
11
+ > tsc --noEmit
12
+
@@ -1,5 +1,5 @@
1
1
 
2
2
  
3
- > @silkweave/core@1.3.0 lint /Users/atomic/projects/ai/silkweave/packages/core
3
+ > @silkweave/core@1.3.2 lint /Users/atomic/projects/ai/silkweave/packages/core
4
4
  > eslint
5
5
 
@@ -1,14 +1,14 @@
1
1
 
2
2
  
3
- > @silkweave/core@1.3.0 prepack /Users/atomic/projects/ai/silkweave/packages/core
3
+ > @silkweave/core@1.4.0 prepack /Users/atomic/projects/ai/silkweave/packages/core
4
4
  > pnpm clean && pnpm build
5
5
 
6
6
 
7
- > @silkweave/core@1.3.0 clean /Users/atomic/projects/ai/silkweave/packages/core
7
+ > @silkweave/core@1.4.0 clean /Users/atomic/projects/ai/silkweave/packages/core
8
8
  > rimraf build
9
9
 
10
10
 
11
- > @silkweave/core@1.3.0 build /Users/atomic/projects/ai/silkweave/packages/core
11
+ > @silkweave/core@1.4.0 build /Users/atomic/projects/ai/silkweave/packages/core
12
12
  > tsup
13
13
 
14
14
  CLI Building entry: src/index.ts
@@ -18,9 +18,9 @@
18
18
  CLI Target: node18
19
19
  CLI Cleaning output folder
20
20
  ESM Build start
21
- ESM build/index.js 3.27 KB
22
- ESM build/index.js.map 7.72 KB
21
+ ESM build/index.js 2.94 KB
22
+ ESM build/index.js.map 7.03 KB
23
23
  ESM ⚡️ Build success in 5ms
24
24
  DTS Build start
25
- DTS ⚡️ Build success in 609ms
26
- DTS build/index.d.ts 2.80 KB
25
+ DTS ⚡️ Build success in 627ms
26
+ DTS build/index.d.ts 2.59 KB
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @silkweave/core
2
2
 
3
- Core library for [Silkweave](https://github.com/silkweave/silkweave) the TypeScript toolkit for building MCP servers and CLI tools from a single set of Actions.
3
+ Core library for [Silkweave](https://github.com/silkweave/silkweave) - the TypeScript toolkit for building MCP servers and CLI tools from a single set of Actions.
4
4
 
5
5
  ## Install
6
6
 
@@ -12,12 +12,11 @@ pnpm add @silkweave/core
12
12
 
13
13
  This package provides the foundational building blocks that all Silkweave adapters depend on:
14
14
 
15
- - **`silkweave()`** Fluent builder to wire up adapters and actions
16
- - **`createAction()`** Define transport-agnostic actions with Zod input schemas
17
- - **Adapter types** `Adapter`, `AdapterGenerator`, `AdapterFactory` interfaces for building custom adapters
18
- - **Context** `SilkweaveContext` key-value store with `fork()` for per-adapter/per-request isolation
19
- - **MCP utilities** `toolResponse()`, `parseToolResponse()` for MCP response formatting
20
- - **Zod utilities** — `unwrap()` to recursively unwrap Zod wrapper types
15
+ - **`silkweave()`** - Fluent builder to wire up adapters and actions
16
+ - **`createAction()`** - Define transport-agnostic actions with Zod input schemas
17
+ - **Adapter types** - `Adapter`, `AdapterGenerator`, `AdapterFactory` interfaces for building custom adapters
18
+ - **Context** - `SilkweaveContext` key-value store with `fork()` for per-adapter/per-request isolation
19
+ - **Zod utilities** - `unwrap()` to recursively unwrap Zod wrapper types
21
20
 
22
21
  ## Usage
23
22
 
@@ -65,6 +64,7 @@ Returns a builder with `.adapter()`, `.action()`, `.actions()`, `.set()`, and `.
65
64
  | `args` | `(keyof I)[]` | Fields to expose as CLI positional arguments |
66
65
  | `isEnabled` | `(context) => boolean` | Gate action availability per adapter |
67
66
  | `run` | `(input, context) => Promise<O>` | The action implementation |
67
+ | `toolResult` | `(response, context) => CallToolResult \| undefined` | Custom MCP result formatting (optional) |
68
68
 
69
69
  ### Adapter Interfaces
70
70
 
@@ -81,8 +81,8 @@ type AdapterFactory<T = void> = (options: T) => AdapterGenerator
81
81
 
82
82
  ## See Also
83
83
 
84
- - [Silkweave README](https://github.com/silkweave/silkweave) Full documentation
85
- - [`@silkweave/mcp`](https://www.npmjs.com/package/@silkweave/mcp) MCP stdio and HTTP adapters
86
- - [`@silkweave/fastify`](https://www.npmjs.com/package/@silkweave/fastify) Fastify REST adapter
87
- - [`@silkweave/cli`](https://www.npmjs.com/package/@silkweave/cli) CLI adapter
88
- - [`@silkweave/vercel`](https://www.npmjs.com/package/@silkweave/vercel) Vercel serverless adapter
84
+ - [Silkweave README](https://github.com/silkweave/silkweave) - Full documentation
85
+ - [`@silkweave/mcp`](https://www.npmjs.com/package/@silkweave/mcp) - MCP stdio and HTTP adapters
86
+ - [`@silkweave/fastify`](https://www.npmjs.com/package/@silkweave/fastify) - Fastify REST adapter
87
+ - [`@silkweave/cli`](https://www.npmjs.com/package/@silkweave/cli) - CLI adapter
88
+ - [`@silkweave/vercel`](https://www.npmjs.com/package/@silkweave/vercel) - Vercel serverless adapter
package/build/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
+ import { CallToolResult } from '@modelcontextprotocol/sdk/types';
1
2
  import z, { z as z$1 } from 'zod';
2
- import { TextContent } from '@modelcontextprotocol/sdk/types.js';
3
3
 
4
4
  interface SilkweaveContext {
5
5
  keys: () => string[];
@@ -20,9 +20,15 @@ interface Action<I extends object = any, O extends object = any> {
20
20
  args?: (keyof I)[];
21
21
  isEnabled?: (context: SilkweaveContext) => boolean;
22
22
  run: (input: I, context: SilkweaveContext) => Promise<O>;
23
+ toolResult?: (response: O, context: SilkweaveContext) => CallToolResult | undefined;
23
24
  }
24
25
  declare function createAction<I extends object = object, O extends object = object>(action: Action<I, O>): Action<I, O>;
25
26
 
27
+ interface SilkweaveOptions {
28
+ name: string;
29
+ description: string;
30
+ version: string;
31
+ }
26
32
  interface Adapter {
27
33
  context: SilkweaveContext;
28
34
  start(actions: Action[]): Promise<void>;
@@ -31,11 +37,6 @@ interface Adapter {
31
37
  type AdapterGenerator = (options: SilkweaveOptions, baseContext: SilkweaveContext) => Adapter;
32
38
  type AdapterFactory<T = void> = (options: T) => AdapterGenerator;
33
39
 
34
- interface SilkweaveOptions {
35
- name: string;
36
- description: string;
37
- version: string;
38
- }
39
40
  interface Silkweave {
40
41
  set: <T>(key: string, value: T) => Silkweave;
41
42
  adapter: (generator: AdapterGenerator) => Silkweave;
@@ -55,14 +56,6 @@ declare function badRequest(message?: string): SilkweaveError;
55
56
  declare function forbidden(message?: string): SilkweaveError;
56
57
  declare function internal(message?: string): SilkweaveError;
57
58
 
58
- interface ToolResponse {
59
- content: TextContent[];
60
- isError?: boolean;
61
- [x: string]: unknown;
62
- }
63
- declare function toolResponse(data: object, isError?: boolean): ToolResponse;
64
- declare function parseToolResponse<T = unknown>(result: ToolResponse): T;
65
-
66
59
  interface UnwrapResult {
67
60
  defaultValue?: any;
68
61
  isOptional?: boolean;
@@ -71,4 +64,4 @@ interface UnwrapResult {
71
64
  }
72
65
  declare function unwrap(type: z$1.ZodTypeAny, result?: UnwrapResult): [z$1.ZodTypeAny, UnwrapResult];
73
66
 
74
- export { type Action, type Adapter, type AdapterFactory, type AdapterGenerator, type Silkweave, type SilkweaveContext, SilkweaveError, type SilkweaveOptions, type ToolResponse, type UnwrapResult, badRequest, createAction, createContext, forbidden, internal, notFound, parseToolResponse, silkweave, toolResponse, unwrap };
67
+ export { type Action, type Adapter, type AdapterFactory, type AdapterGenerator, type Silkweave, type SilkweaveContext, SilkweaveError, type SilkweaveOptions, type UnwrapResult, badRequest, createAction, createContext, forbidden, internal, notFound, silkweave, unwrap };
package/build/index.js CHANGED
@@ -92,18 +92,6 @@ function internal(message = "Internal error") {
92
92
  return new SilkweaveError(message, "internal", 500);
93
93
  }
94
94
 
95
- // src/util/mcp.ts
96
- function toolResponse(data, isError = false) {
97
- return {
98
- content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
99
- ...isError ? { isError: true } : {}
100
- };
101
- }
102
- function parseToolResponse(result) {
103
- const text = result.content[0].text;
104
- return JSON.parse(text);
105
- }
106
-
107
95
  // src/util/zod.ts
108
96
  import { z } from "zod";
109
97
  function unwrap(type, result = {}) {
@@ -131,9 +119,7 @@ export {
131
119
  forbidden,
132
120
  internal,
133
121
  notFound,
134
- parseToolResponse,
135
122
  silkweave,
136
- toolResponse,
137
123
  unwrap
138
124
  };
139
125
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/util/context.ts","../src/lib/silkweave.ts","../src/util/action.ts","../src/util/error.ts","../src/util/mcp.ts","../src/util/zod.ts"],"sourcesContent":["export interface SilkweaveContext {\n keys: () => string[]\n has: (key: string) => boolean\n get: <T>(key: string) => T\n getOptional: <T>(key: string) => T | undefined\n set: <T>(key: string, value: T) => void\n fork: (store?: Record<string, unknown>) => SilkweaveContext\n}\n\nexport function createContext(store: Record<string, unknown> = {}): SilkweaveContext {\n return {\n keys: () => {\n return Object.keys(store)\n },\n has: (key: string): boolean => {\n return store[key] != null\n },\n get: <T>(key: string): T => {\n const value = store[key]\n if (value == null) { throw new Error(`Invalid context key: ${key}`) }\n return value as T\n },\n getOptional: <T>(key: string): T | undefined => {\n return store[key] as T | undefined\n },\n set: <T>(key: string, value: T) => {\n store[key] = value\n },\n fork: (value?: Record<string, unknown>) => {\n return createContext({ ...store, ...value })\n }\n }\n}\n","import { Action } from '../util/action.js'\nimport { Adapter, AdapterGenerator } from '../util/adapter.js'\nimport { createContext } from '../util/context.js'\n\nexport interface SilkweaveOptions {\n name: string\n description: string\n version: string\n}\n\nexport interface Silkweave {\n set: <T>(key: string, value: T) => Silkweave\n adapter: (generator: AdapterGenerator) => Silkweave\n action: (action: Action) => Silkweave\n actions: (actions: Action[]) => Silkweave\n start: () => Promise<Silkweave>\n}\n\nexport function silkweave(options: SilkweaveOptions): Silkweave {\n const adapters: Adapter[] = []\n const actions: Action[] = []\n const context = createContext()\n const builder: Silkweave = {\n set: (key, value) => {\n context.set(key, value)\n return builder\n },\n adapter: (generator) => {\n adapters.push(generator(options, context))\n return builder\n },\n action: (value) => {\n actions.push(value)\n return builder\n },\n actions: (values) => {\n actions.push(...values)\n return builder\n },\n start: async () => {\n await Promise.all(adapters.map((adapter) => {\n return adapter.start(actions.filter((action) => {\n if (!action.isEnabled) { return true }\n return action.isEnabled(adapter.context)\n }))\n }))\n return builder\n }\n }\n return builder\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport z from 'zod'\nimport { SilkweaveContext } from './context.js'\n\nexport interface Action<I extends object = any, O extends object = any> {\n name: string\n description: string\n input: z.ZodType<I> & { shape: Record<string, z.ZodTypeAny> }\n args?: (keyof I)[]\n isEnabled?: (context: SilkweaveContext) => boolean\n run: (input: I, context: SilkweaveContext) => Promise<O>\n}\n\nexport function createAction<I extends object = object, O extends object = object>(\n action: Action<I, O>\n): Action<I, O> {\n return action\n}\n","export class SilkweaveError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n public readonly statusCode = 500\n ) {\n super(message)\n this.name = 'SilkweaveError'\n }\n}\n\nexport function notFound(message = 'Not found') {\n return new SilkweaveError(message, 'not_found', 404)\n}\n\nexport function badRequest(message = 'Bad request') {\n return new SilkweaveError(message, 'bad_request', 400)\n}\n\nexport function forbidden(message = 'Forbidden') {\n return new SilkweaveError(message, 'forbidden', 403)\n}\n\nexport function internal(message = 'Internal error') {\n return new SilkweaveError(message, 'internal', 500)\n}\n","import { TextContent } from '@modelcontextprotocol/sdk/types.js'\n\nexport interface ToolResponse {\n content: TextContent[]\n isError?: boolean\n [x: string]: unknown\n}\n\nexport function toolResponse(data: object, isError = false): ToolResponse {\n return {\n content: [{ type: 'text' as const, text: JSON.stringify(data, null, 2) }],\n ...(isError ? { isError: true } : {})\n }\n}\n\nexport function parseToolResponse<T = unknown>(result: ToolResponse): T {\n const text = result.content[0].text\n return JSON.parse(text)\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { z } from 'zod'\n\nexport interface UnwrapResult {\n defaultValue?: any\n isOptional?: boolean\n isNullable?: boolean\n isReadOnly?: boolean\n}\n\nexport function unwrap(\n type: z.ZodTypeAny,\n result: UnwrapResult = {}\n): [z.ZodTypeAny, UnwrapResult] {\n if (type instanceof z.ZodOptional) {\n result.isOptional = true\n return unwrap(type.unwrap() as z.ZodTypeAny, result)\n } else if (type instanceof z.ZodNullable) {\n result.isNullable = true\n return unwrap(type.unwrap() as z.ZodTypeAny, result)\n } else if (type instanceof z.ZodReadonly) {\n result.isReadOnly = true\n return unwrap(type.unwrap() as z.ZodTypeAny, result)\n } else if (type instanceof z.ZodDefault) {\n result.defaultValue = typeof type.def.defaultValue === 'function'\n ? type.def.defaultValue()\n : type.def.defaultValue\n return unwrap(type.unwrap() as z.ZodTypeAny, result)\n } else {\n return [type, result]\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/util/context.ts","../src/lib/silkweave.ts","../src/util/action.ts","../src/util/error.ts","../src/util/zod.ts"],"sourcesContent":["export interface SilkweaveContext {\n keys: () => string[]\n has: (key: string) => boolean\n get: <T>(key: string) => T\n getOptional: <T>(key: string) => T | undefined\n set: <T>(key: string, value: T) => void\n fork: (store?: Record<string, unknown>) => SilkweaveContext\n}\n\nexport function createContext(store: Record<string, unknown> = {}): SilkweaveContext {\n return {\n keys: () => {\n return Object.keys(store)\n },\n has: (key: string): boolean => {\n return store[key] != null\n },\n get: <T>(key: string): T => {\n const value = store[key]\n if (value == null) { throw new Error(`Invalid context key: ${key}`) }\n return value as T\n },\n getOptional: <T>(key: string): T | undefined => {\n return store[key] as T | undefined\n },\n set: <T>(key: string, value: T) => {\n store[key] = value\n },\n fork: (value?: Record<string, unknown>) => {\n return createContext({ ...store, ...value })\n }\n }\n}\n","import { Action } from '../util/action.js'\nimport { Adapter, AdapterGenerator, SilkweaveOptions } from '../util/adapter.js'\nimport { createContext } from '../util/context.js'\n\nexport type { SilkweaveOptions } from '../util/adapter.js'\n\nexport interface Silkweave {\n set: <T>(key: string, value: T) => Silkweave\n adapter: (generator: AdapterGenerator) => Silkweave\n action: (action: Action) => Silkweave\n actions: (actions: Action[]) => Silkweave\n start: () => Promise<Silkweave>\n}\n\nexport function silkweave(options: SilkweaveOptions): Silkweave {\n const adapters: Adapter[] = []\n const actions: Action[] = []\n const context = createContext()\n const builder: Silkweave = {\n set: (key, value) => {\n context.set(key, value)\n return builder\n },\n adapter: (generator) => {\n adapters.push(generator(options, context))\n return builder\n },\n action: (value) => {\n actions.push(value)\n return builder\n },\n actions: (values) => {\n actions.push(...values)\n return builder\n },\n start: async () => {\n await Promise.all(adapters.map((adapter) => {\n return adapter.start(actions.filter((action) => {\n if (!action.isEnabled) { return true }\n return action.isEnabled(adapter.context)\n }))\n }))\n return builder\n }\n }\n return builder\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { CallToolResult } from '@modelcontextprotocol/sdk/types'\nimport z from 'zod'\nimport { SilkweaveContext } from './context.js'\n\nexport interface Action<I extends object = any, O extends object = any> {\n name: string\n description: string\n input: z.ZodType<I> & { shape: Record<string, z.ZodTypeAny> }\n args?: (keyof I)[]\n isEnabled?: (context: SilkweaveContext) => boolean\n run: (input: I, context: SilkweaveContext) => Promise<O>\n toolResult?: (response: O, context: SilkweaveContext) => CallToolResult | undefined\n}\n\nexport function createAction<I extends object = object, O extends object = object>(\n action: Action<I, O>\n): Action<I, O> {\n return action\n}\n","export class SilkweaveError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n public readonly statusCode = 500\n ) {\n super(message)\n this.name = 'SilkweaveError'\n }\n}\n\nexport function notFound(message = 'Not found') {\n return new SilkweaveError(message, 'not_found', 404)\n}\n\nexport function badRequest(message = 'Bad request') {\n return new SilkweaveError(message, 'bad_request', 400)\n}\n\nexport function forbidden(message = 'Forbidden') {\n return new SilkweaveError(message, 'forbidden', 403)\n}\n\nexport function internal(message = 'Internal error') {\n return new SilkweaveError(message, 'internal', 500)\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { z } from 'zod'\n\nexport interface UnwrapResult {\n defaultValue?: any\n isOptional?: boolean\n isNullable?: boolean\n isReadOnly?: boolean\n}\n\nexport function unwrap(\n type: z.ZodTypeAny,\n result: UnwrapResult = {}\n): [z.ZodTypeAny, UnwrapResult] {\n if (type instanceof z.ZodOptional) {\n result.isOptional = true\n return unwrap(type.unwrap() as z.ZodTypeAny, result)\n } else if (type instanceof z.ZodNullable) {\n result.isNullable = true\n return unwrap(type.unwrap() as z.ZodTypeAny, result)\n } else if (type instanceof z.ZodReadonly) {\n result.isReadOnly = true\n return unwrap(type.unwrap() as z.ZodTypeAny, result)\n } else if (type instanceof z.ZodDefault) {\n result.defaultValue = typeof type.def.defaultValue === 'function'\n ? type.def.defaultValue()\n : type.def.defaultValue\n return unwrap(type.unwrap() as z.ZodTypeAny, result)\n } else {\n return [type, result]\n }\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@silkweave/core",
3
- "version": "1.3.1",
3
+ "version": "1.4.0",
4
4
  "description": "Silkweave Core",
5
5
  "repository": {
6
6
  "type": "git",
@@ -13,7 +13,7 @@
13
13
  "dependencies": {
14
14
  "@modelcontextprotocol/sdk": "^1.29.0",
15
15
  "zod": "^4.3.6",
16
- "@silkweave/logger": "1.3.1"
16
+ "@silkweave/logger": "1.4.0"
17
17
  },
18
18
  "devDependencies": {
19
19
  "@eslint/js": "^10.0.1",