@silkweave/core 1.3.1 → 1.3.2
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/.turbo/turbo-build.log +17 -18
- package/.turbo/turbo-check.log +13 -9
- package/.turbo/turbo-lint.log +1 -1
- package/README.md +1 -1
- package/build/index.d.ts +7 -6
- package/build/index.js +10 -0
- package/build/index.js.map +1 -1
- package/package.json +2 -2
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,18 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
>
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
DTS Build
|
|
17
|
-
DTS
|
|
18
|
-
DTS build/index.d.ts 2.80 KB
|
|
1
|
+
|
|
2
|
+
> @silkweave/core@1.3.1 build /Users/atomic/projects/ai/silkweave/packages/core
|
|
3
|
+
> tsup
|
|
4
|
+
|
|
5
|
+
CLI Building entry: src/index.ts
|
|
6
|
+
CLI Using tsconfig: tsconfig.json
|
|
7
|
+
CLI tsup v8.5.1
|
|
8
|
+
CLI Using tsup config: /Users/atomic/projects/ai/silkweave/packages/core/tsup.config.ts
|
|
9
|
+
CLI Target: node18
|
|
10
|
+
CLI Cleaning output folder
|
|
11
|
+
ESM Build start
|
|
12
|
+
ESM build/index.js 3.75 KB
|
|
13
|
+
ESM build/index.js.map 8.58 KB
|
|
14
|
+
ESM ⚡️ Build success in 7ms
|
|
15
|
+
DTS Build start
|
|
16
|
+
DTS ⚡️ Build success in 673ms
|
|
17
|
+
DTS build/index.d.ts 2.88 KB
|
package/.turbo/turbo-check.log
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
>
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
>
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
> @silkweave/core@1.3.1 check /Users/atomic/projects/ai/silkweave/packages/core
|
|
4
|
+
> pnpm lint && pnpm typecheck
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
> @silkweave/core@1.3.1 lint /Users/atomic/projects/ai/silkweave/packages/core
|
|
8
|
+
> eslint
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
> @silkweave/core@1.3.1 typecheck /Users/atomic/projects/ai/silkweave/packages/core
|
|
12
|
+
> tsc --noEmit
|
|
13
|
+
|
package/.turbo/turbo-lint.log
CHANGED
package/README.md
CHANGED
|
@@ -16,7 +16,7 @@ This package provides the foundational building blocks that all Silkweave adapte
|
|
|
16
16
|
- **`createAction()`** — Define transport-agnostic actions with Zod input schemas
|
|
17
17
|
- **Adapter types** — `Adapter`, `AdapterGenerator`, `AdapterFactory` interfaces for building custom adapters
|
|
18
18
|
- **Context** — `SilkweaveContext` key-value store with `fork()` for per-adapter/per-request isolation
|
|
19
|
-
- **MCP utilities** — `toolResponse()`, `parseToolResponse()` for MCP response formatting
|
|
19
|
+
- **MCP utilities** — `toolResponse()`, `handleToolError()`, `parseToolResponse()` for MCP response formatting
|
|
20
20
|
- **Zod utilities** — `unwrap()` to recursively unwrap Zod wrapper types
|
|
21
21
|
|
|
22
22
|
## Usage
|
package/build/index.d.ts
CHANGED
|
@@ -23,6 +23,11 @@ interface Action<I extends object = any, O extends object = any> {
|
|
|
23
23
|
}
|
|
24
24
|
declare function createAction<I extends object = object, O extends object = object>(action: Action<I, O>): Action<I, O>;
|
|
25
25
|
|
|
26
|
+
interface SilkweaveOptions {
|
|
27
|
+
name: string;
|
|
28
|
+
description: string;
|
|
29
|
+
version: string;
|
|
30
|
+
}
|
|
26
31
|
interface Adapter {
|
|
27
32
|
context: SilkweaveContext;
|
|
28
33
|
start(actions: Action[]): Promise<void>;
|
|
@@ -31,11 +36,6 @@ interface Adapter {
|
|
|
31
36
|
type AdapterGenerator = (options: SilkweaveOptions, baseContext: SilkweaveContext) => Adapter;
|
|
32
37
|
type AdapterFactory<T = void> = (options: T) => AdapterGenerator;
|
|
33
38
|
|
|
34
|
-
interface SilkweaveOptions {
|
|
35
|
-
name: string;
|
|
36
|
-
description: string;
|
|
37
|
-
version: string;
|
|
38
|
-
}
|
|
39
39
|
interface Silkweave {
|
|
40
40
|
set: <T>(key: string, value: T) => Silkweave;
|
|
41
41
|
adapter: (generator: AdapterGenerator) => Silkweave;
|
|
@@ -61,6 +61,7 @@ interface ToolResponse {
|
|
|
61
61
|
[x: string]: unknown;
|
|
62
62
|
}
|
|
63
63
|
declare function toolResponse(data: object, isError?: boolean): ToolResponse;
|
|
64
|
+
declare function handleToolError(error: unknown): ToolResponse;
|
|
64
65
|
declare function parseToolResponse<T = unknown>(result: ToolResponse): T;
|
|
65
66
|
|
|
66
67
|
interface UnwrapResult {
|
|
@@ -71,4 +72,4 @@ interface UnwrapResult {
|
|
|
71
72
|
}
|
|
72
73
|
declare function unwrap(type: z$1.ZodTypeAny, result?: UnwrapResult): [z$1.ZodTypeAny, UnwrapResult];
|
|
73
74
|
|
|
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 };
|
|
75
|
+
export { type Action, type Adapter, type AdapterFactory, type AdapterGenerator, type Silkweave, type SilkweaveContext, SilkweaveError, type SilkweaveOptions, type ToolResponse, type UnwrapResult, badRequest, createAction, createContext, forbidden, handleToolError, internal, notFound, parseToolResponse, silkweave, toolResponse, unwrap };
|
package/build/index.js
CHANGED
|
@@ -99,6 +99,15 @@ function toolResponse(data, isError = false) {
|
|
|
99
99
|
...isError ? { isError: true } : {}
|
|
100
100
|
};
|
|
101
101
|
}
|
|
102
|
+
function handleToolError(error) {
|
|
103
|
+
if (error instanceof SilkweaveError) {
|
|
104
|
+
return toolResponse({ success: false, code: error.code, name: error.name, message: error.message }, true);
|
|
105
|
+
} else if (error instanceof Error) {
|
|
106
|
+
return toolResponse({ success: false, name: error.name, message: error.message, stack: error.stack }, true);
|
|
107
|
+
} else {
|
|
108
|
+
return toolResponse({ success: false, name: "Unknown Error", message: "An unknown error occurred", error }, true);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
102
111
|
function parseToolResponse(result) {
|
|
103
112
|
const text = result.content[0].text;
|
|
104
113
|
return JSON.parse(text);
|
|
@@ -129,6 +138,7 @@ export {
|
|
|
129
138
|
createAction,
|
|
130
139
|
createContext,
|
|
131
140
|
forbidden,
|
|
141
|
+
handleToolError,
|
|
132
142
|
internal,
|
|
133
143
|
notFound,
|
|
134
144
|
parseToolResponse,
|
package/build/index.js.map
CHANGED
|
@@ -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
|
|
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, 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 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'\nimport { SilkweaveError } from './error.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 handleToolError(error: unknown): ToolResponse {\n if (error instanceof SilkweaveError) {\n return toolResponse({ success: false, code: error.code, name: error.name, message: error.message }, true)\n } else if (error instanceof Error) {\n return toolResponse({ success: false, name: error.name, message: error.message, stack: error.stack }, true)\n } else {\n return toolResponse({ success: false, name: 'Unknown Error', message: 'An unknown error occurred', error }, 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":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@silkweave/core",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.2",
|
|
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.
|
|
16
|
+
"@silkweave/logger": "1.3.2"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"@eslint/js": "^10.0.1",
|