@ryuhq/sdk 0.1.13 → 0.2.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 +19 -6
- package/dist/agent-plugin.cjs +46 -0
- package/dist/agent-plugin.d.cts +42 -32
- package/dist/agent-plugin.d.ts +42 -32
- package/dist/agent-plugin.js +1 -1
- package/dist/agent.cjs +9 -0
- package/dist/agent.d.cts +377 -1
- package/dist/agent.d.ts +377 -1
- package/dist/agent.js +4 -2
- package/dist/app-Bkw7LlCK.d.ts +129 -0
- package/dist/app-DNaGmLVf.d.cts +129 -0
- package/dist/builder.cjs +1095 -0
- package/dist/builder.d.cts +212 -0
- package/dist/builder.d.ts +212 -0
- package/dist/builder.js +28 -0
- package/dist/chunk-A3RGEPDG.js +250 -0
- package/dist/chunk-FZSFZOIN.js +200 -0
- package/dist/{chunk-ODFEUVPW.js → chunk-HACAGK65.js} +1 -18
- package/dist/{chunk-AO2KJRDD.js → chunk-IEUQ3CDG.js} +125 -2
- package/dist/chunk-IKEDLLFY.js +19 -0
- package/dist/chunk-IOLP5FFE.js +354 -0
- package/dist/{chunk-G6FLVEC4.js → chunk-JX6DDRXV.js} +46 -0
- package/dist/chunk-T5676WL2.js +240 -0
- package/dist/chunk-TLDPEGC7.js +21 -0
- package/dist/chunk-TXSHHZF2.js +0 -0
- package/dist/{chunk-MTUBUPIV.js → chunk-ULSVL7EC.js} +8 -227
- package/dist/chunk-VLIRNNAE.js +154 -0
- package/dist/chunk-W3KPP4WN.js +135 -0
- package/dist/cli.cjs +258 -14
- package/dist/cli.js +96 -16
- package/dist/client-D5U6ssPc.d.cts +84 -0
- package/dist/client-D5U6ssPc.d.ts +84 -0
- package/dist/index.cjs +519 -5
- package/dist/index.d.cts +16 -632
- package/dist/index.d.ts +16 -632
- package/dist/index.js +63 -695
- package/dist/manifest.cjs +129 -3
- package/dist/manifest.d.cts +105 -2
- package/dist/manifest.d.ts +105 -2
- package/dist/manifest.js +7 -1
- package/dist/mcp/client.cjs +180 -0
- package/dist/mcp/client.d.cts +49 -0
- package/dist/mcp/client.d.ts +49 -0
- package/dist/mcp/client.js +10 -0
- package/dist/mcp/server.cjs +370 -0
- package/dist/mcp/server.d.cts +126 -0
- package/dist/mcp/server.d.ts +126 -0
- package/dist/mcp/server.js +9 -0
- package/dist/mcp.cjs +376 -0
- package/dist/mcp.d.cts +2 -0
- package/dist/mcp.d.ts +2 -0
- package/dist/mcp.js +17 -0
- package/dist/model.cjs +141 -0
- package/dist/model.d.cts +33 -0
- package/dist/model.d.ts +33 -0
- package/dist/model.js +18 -0
- package/dist/plugin.cjs +46 -0
- package/dist/plugin.d.cts +215 -0
- package/dist/plugin.d.ts +215 -0
- package/dist/plugin.js +8 -0
- package/dist/runnable.cjs +1230 -0
- package/dist/runnable.d.cts +271 -0
- package/dist/runnable.d.ts +271 -0
- package/dist/runnable.js +28 -0
- package/dist/{index-B6SkaAjJ.d.ts → tool-DSx2bFx8.d.ts} +35 -458
- package/dist/{index-BvAB5eMk.d.cts → tool-u-VR0fLF.d.cts} +35 -458
- package/package.json +38 -2
- package/src/agent/loop.test.ts +4 -4
- package/src/agent/tools.ts +3 -3
- package/src/agent-plugin.test.ts +58 -0
- package/src/agent-plugin.ts +108 -35
- package/src/cli/dev.test.ts +26 -47
- package/src/cli/dev.ts +10 -2
- package/src/cli.ts +98 -15
- package/src/exports-lockstep.test.ts +92 -0
- package/src/generated/plugin-manifest.ts +243 -27
- package/src/index.ts +35 -0
- package/src/manifest-schema.test.ts +30 -1
- package/src/manifest.fixtures.test.ts +13 -3
- package/src/manifest.test.ts +96 -10
- package/src/manifest.ts +334 -187
- package/src/mcp/index.ts +18 -0
- package/src/model/index.ts +22 -0
- package/src/plugin/ryu-plugin.ts +82 -0
- package/src/runnable/app.test.ts +2 -0
- package/src/runnable/app.ts +5 -2
- package/src/runnable/index.ts +2 -0
- package/src/runnable/primitives.ts +57 -0
- package/src/runnable/tool.ts +1 -1
- package/src/runnable/turn-hook.ts +4 -1
package/README.md
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
# <img src="https://raw.githubusercontent.com/amajorai/ryu/main/.github/logo.png" width="50" align="middle" alt="" /> @
|
|
1
|
+
# <img src="https://raw.githubusercontent.com/amajorai/ryu/main/.github/logo.png" width="50" align="middle" alt="" /> @ryuhq/sdk
|
|
2
2
|
|
|
3
3
|
> Ryu's own developer SDK for authoring agents, workflows, tools, and skills. Part of [Ryu](../../README.md).
|
|
4
4
|
|
|
5
5
|
[](./LICENSE)
|
|
6
6
|
[](../../README.md)
|
|
7
7
|
|
|
8
|
-
`@
|
|
8
|
+
`@ryuhq/sdk` provides typed Runnable factories (`agent`, `workflow`, `tool`, `skill` plus their builders), a gateway-mandatory model client so every model call routes through the Ryu Gateway, an MCP server/client, and a `ryu` CLI for packing and publishing plugin bundles. It is Runnable-native: reference the AI SDK / Mastra / ACP patterns, but depend on none of them. The native logic ships through a prebuilt addon, `@ryuhq/sdk-native` (the `crates/sdk/napi` binding).
|
|
9
9
|
|
|
10
10
|
**Tier:** OSS (Apache-2.0)
|
|
11
11
|
|
|
12
12
|
## Install / Build
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
|
-
bun add @
|
|
15
|
+
bun add @ryuhq/sdk
|
|
16
16
|
# build from source
|
|
17
17
|
bun run build # tsup → dist/
|
|
18
18
|
bun test
|
|
@@ -21,11 +21,24 @@ bun test
|
|
|
21
21
|
## What it provides
|
|
22
22
|
|
|
23
23
|
- **Runnable factories:** `agent`, `workflow`, `tool`, `skill` (and `AgentBuilder` / `WorkflowBuilder` / `ToolBuilder` / `SkillBuilder` / `PluginBuilder`) for the one Runnable contract (input to run to output).
|
|
24
|
-
- **Manifest model:** `PluginManifest` types + `PluginManifestSchema` / `validateManifestStrict` / `validatePluginId` (also exported from `@
|
|
25
|
-
- **Gateway-mandatory model client:** chat types and a client where every model call routes through the Ryu Gateway.
|
|
26
|
-
- **MCP server/client:** author and consume MCP tool surfaces
|
|
24
|
+
- **Manifest model:** `PluginManifest` types + `PluginManifestSchema` / `validateManifestStrict` / `validatePluginId` (also exported from `@ryuhq/sdk/manifest`).
|
|
25
|
+
- **Gateway-mandatory model client:** chat types and a client where every model call routes through the Ryu Gateway (also from `@ryuhq/sdk/model`).
|
|
26
|
+
- **MCP server/client:** author (`McpServer`) and consume (`listTools` / `callTool`) MCP tool surfaces, via `@ryuhq/sdk/mcp`, `@ryuhq/sdk/mcp/server`, or `@ryuhq/sdk/mcp/client`.
|
|
27
|
+
- **Plugin host surface:** `RyuPlugin` / `PluginContext` / `definePlugin` types for the desktop companion host, via `@ryuhq/sdk/plugin`.
|
|
28
|
+
- **Runnables + builders as entries:** `@ryuhq/sdk/runnable` (the four kinds and their factories) and `@ryuhq/sdk/builder`.
|
|
27
29
|
- **CLI:** `bunx ryu pack <dir>` (and `ryu publish`) via the package `bin` entry.
|
|
28
30
|
|
|
31
|
+
## Managing a running node
|
|
32
|
+
|
|
33
|
+
`@ryuhq/sdk` is the *authoring* SDK — it builds, packs, and publishes plugin
|
|
34
|
+
bundles and runs Runnables in-process. If you want to **drive a running Ryu
|
|
35
|
+
node programmatically** (install/enable/disable plugins, manage agents, models,
|
|
36
|
+
skills, MCP servers, spaces, workflows, gateway config, chat against Core),
|
|
37
|
+
that surface lives in [`@ryuhq/core-client`](../../packages/core-client) — the
|
|
38
|
+
same client the desktop app, TUI, and CLI run on — plus `@ryuhq/client` for
|
|
39
|
+
embedded agent chat. Nothing here duplicates it; `@ryuhq/sdk` deliberately
|
|
40
|
+
stays the authoring layer.
|
|
41
|
+
|
|
29
42
|
## License
|
|
30
43
|
|
|
31
44
|
Apache-2.0. See [LICENSE](./LICENSE). © 2026 A Major Pte. Ltd.
|
package/dist/agent-plugin.cjs
CHANGED
|
@@ -106,6 +106,21 @@ function toSpecEnv(value) {
|
|
|
106
106
|
}
|
|
107
107
|
return Object.keys(env).length > 0 ? env : void 0;
|
|
108
108
|
}
|
|
109
|
+
function validateRemoteUrl(name, raw) {
|
|
110
|
+
let parsed;
|
|
111
|
+
try {
|
|
112
|
+
parsed = new URL(raw);
|
|
113
|
+
} catch {
|
|
114
|
+
return `mcp server '${name}' remote url ${JSON.stringify(raw)} is invalid and was omitted`;
|
|
115
|
+
}
|
|
116
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
|
|
117
|
+
return `mcp server '${name}' remote url must use http or https and was omitted`;
|
|
118
|
+
}
|
|
119
|
+
if (parsed.username || parsed.password || parsed.hash) {
|
|
120
|
+
return `mcp server '${name}' remote url must not contain credentials or a fragment and was omitted`;
|
|
121
|
+
}
|
|
122
|
+
return void 0;
|
|
123
|
+
}
|
|
109
124
|
function toSpecServer(name, decl) {
|
|
110
125
|
const extras = {};
|
|
111
126
|
const commandEnv = asString(decl.command_env);
|
|
@@ -123,6 +138,37 @@ function toSpecServer(name, decl) {
|
|
|
123
138
|
note: `mcp server '${name}' is disabled in the native manifest and was omitted from ${AGENT_PLUGIN_MCP_FILE}`
|
|
124
139
|
};
|
|
125
140
|
}
|
|
141
|
+
const declaredType = asString(decl.type);
|
|
142
|
+
const remoteUrl = asString(decl.url);
|
|
143
|
+
const remoteType = declaredType === "sse" ? "sse" : declaredType === "streamable-http" || declaredType === "streamable_http" || declaredType === "http" || !declaredType && remoteUrl ? "streamable-http" : void 0;
|
|
144
|
+
if (remoteType) {
|
|
145
|
+
if (!remoteUrl) {
|
|
146
|
+
return {
|
|
147
|
+
extras,
|
|
148
|
+
note: `mcp server '${name}' has remote type '${remoteType}' but no url and was omitted`
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
const urlNote = validateRemoteUrl(name, remoteUrl);
|
|
152
|
+
if (urlNote) {
|
|
153
|
+
return { extras, note: urlNote };
|
|
154
|
+
}
|
|
155
|
+
const server2 = {
|
|
156
|
+
type: remoteType,
|
|
157
|
+
url: remoteUrl
|
|
158
|
+
};
|
|
159
|
+
const headers = toSpecEnv(decl.headers);
|
|
160
|
+
if (headers) {
|
|
161
|
+
server2.headers = headers;
|
|
162
|
+
}
|
|
163
|
+
const note = decl.auth ? `mcp server '${name}' uses Ryu OAuth metadata that is not portable; static headers were exported` : void 0;
|
|
164
|
+
return { server: server2, extras, note };
|
|
165
|
+
}
|
|
166
|
+
if (declaredType && declaredType !== "stdio") {
|
|
167
|
+
return {
|
|
168
|
+
extras,
|
|
169
|
+
note: `mcp server '${name}' has unsupported transport '${declaredType}' and was omitted`
|
|
170
|
+
};
|
|
171
|
+
}
|
|
126
172
|
const command = asString(decl.command);
|
|
127
173
|
if (!command) {
|
|
128
174
|
return {
|
package/dist/agent-plugin.d.cts
CHANGED
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
* The Agent Plugins Specification (https://agent-plugins.org/, TSC: Amazon,
|
|
5
5
|
* Cursor, Microsoft, OpenAI, Vercel) defines a small portable floor: a plugin is
|
|
6
6
|
* a directory with `plugin.json`, Agent Skills under `skills/<slug>/SKILL.md`,
|
|
7
|
-
* and MCP servers in `mcp.json`.
|
|
7
|
+
* and MCP servers in `mcp.json`. Native stdio, Streamable HTTP, and legacy SSE
|
|
8
|
+
* servers all have a direct portable representation; richer Ryu-only fields stay
|
|
9
|
+
* in the extension namespace or are reported as notes.
|
|
8
10
|
*
|
|
9
11
|
* ## Why this is a SECOND file, not a migration
|
|
10
12
|
*
|
|
@@ -69,22 +71,22 @@ declare const AGENT_PLUGIN_MCP_FILE = "mcp.json";
|
|
|
69
71
|
*/
|
|
70
72
|
declare function isAgentPluginManifest(value: unknown): boolean;
|
|
71
73
|
/** Author object — the only three fields the spec permits (§5.4). */
|
|
72
|
-
|
|
73
|
-
name?: string;
|
|
74
|
+
interface AgentPluginAuthor {
|
|
74
75
|
email?: string;
|
|
76
|
+
name?: string;
|
|
75
77
|
url?: string;
|
|
76
|
-
}
|
|
78
|
+
}
|
|
77
79
|
/** Ryu data carried under {@link AGENT_PLUGIN_EXTENSION_NS}. */
|
|
78
|
-
|
|
79
|
-
/** The real scoped plugin id (`@ryu/advisor`) — unrecoverable from spec `name`. */
|
|
80
|
-
id: string;
|
|
80
|
+
interface RyuExtensionData {
|
|
81
81
|
/** Human display name; spec `name` is a slug, not a display string. */
|
|
82
82
|
displayName: string;
|
|
83
|
+
/** The real scoped plugin id (`@ryu/advisor`) — unrecoverable from spec `name`. */
|
|
84
|
+
id: string;
|
|
83
85
|
/** Per-MCP-server fields the spec's closed server variants do not allow. */
|
|
84
86
|
mcp?: Record<string, RyuMcpServerExtras>;
|
|
85
|
-
}
|
|
87
|
+
}
|
|
86
88
|
/** Native MCP fields stripped out of the exported `mcp.json`. */
|
|
87
|
-
|
|
89
|
+
interface RyuMcpServerExtras {
|
|
88
90
|
/** Env var that overrides `command` with an absolute path at spawn. */
|
|
89
91
|
command_env?: string;
|
|
90
92
|
/** Human description for our MCP listing endpoint. */
|
|
@@ -96,37 +98,43 @@ type RyuMcpServerExtras = {
|
|
|
96
98
|
* deliberately do not.
|
|
97
99
|
*/
|
|
98
100
|
enabled?: false;
|
|
99
|
-
}
|
|
101
|
+
}
|
|
100
102
|
/** A conformant `plugin.json` (§5.2). */
|
|
101
|
-
|
|
103
|
+
interface AgentPluginJson {
|
|
102
104
|
$schema: string;
|
|
103
|
-
name: string;
|
|
104
|
-
version?: string;
|
|
105
|
-
description?: string;
|
|
106
105
|
author?: AgentPluginAuthor;
|
|
106
|
+
description?: string;
|
|
107
|
+
extensions: Record<string, unknown>;
|
|
107
108
|
homepage?: string;
|
|
108
|
-
repository?: string;
|
|
109
|
-
license?: string;
|
|
110
109
|
keywords?: string[];
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
110
|
+
license?: string;
|
|
111
|
+
name: string;
|
|
112
|
+
repository?: string;
|
|
113
|
+
version?: string;
|
|
114
|
+
}
|
|
115
|
+
/** A stdio server entry (§7.2.1). */
|
|
116
|
+
interface AgentPluginStdioServer {
|
|
117
117
|
args?: string[];
|
|
118
|
-
|
|
118
|
+
command: string;
|
|
119
119
|
cwd?: string;
|
|
120
|
-
|
|
120
|
+
env?: Record<string, string>;
|
|
121
|
+
type: "stdio";
|
|
122
|
+
}
|
|
123
|
+
/** A remote server entry (§7.2.1). */
|
|
124
|
+
interface AgentPluginRemoteServer {
|
|
125
|
+
headers?: Record<string, string>;
|
|
126
|
+
type: "streamable-http" | "sse";
|
|
127
|
+
url: string;
|
|
128
|
+
}
|
|
129
|
+
/** Any server variant a conformant Agent Plugins client can consume. */
|
|
130
|
+
type AgentPluginServer = AgentPluginStdioServer | AgentPluginRemoteServer;
|
|
121
131
|
/** A conformant `mcp.json` (§7.2.1). */
|
|
122
|
-
|
|
132
|
+
interface AgentPluginMcpJson {
|
|
123
133
|
$schema: string;
|
|
124
|
-
mcpServers: Record<string,
|
|
125
|
-
}
|
|
134
|
+
mcpServers: Record<string, AgentPluginServer>;
|
|
135
|
+
}
|
|
126
136
|
/** What {@link toAgentPlugin} produces, plus what it had to leave behind. */
|
|
127
|
-
|
|
128
|
-
/** The `plugin.json` contents. */
|
|
129
|
-
plugin: AgentPluginJson;
|
|
137
|
+
interface AgentPluginExport {
|
|
130
138
|
/** The `mcp.json` contents, or null when the plugin exports no server. */
|
|
131
139
|
mcp: AgentPluginMcpJson | null;
|
|
132
140
|
/**
|
|
@@ -134,7 +142,9 @@ type AgentPluginExport = {
|
|
|
134
142
|
* is visible at the call site instead of silent.
|
|
135
143
|
*/
|
|
136
144
|
notes: string[];
|
|
137
|
-
|
|
145
|
+
/** The `plugin.json` contents. */
|
|
146
|
+
plugin: AgentPluginJson;
|
|
147
|
+
}
|
|
138
148
|
/**
|
|
139
149
|
* Project a Ryu plugin id onto a spec-legal `name` (§5.5): 1–64 chars of
|
|
140
150
|
* `a-z 0-9 - .`, alphanumeric at both ends, no `--` and no `..`.
|
|
@@ -156,4 +166,4 @@ declare function toSpecName(id: string): string;
|
|
|
156
166
|
*/
|
|
157
167
|
declare function toAgentPlugin(manifest: Record<string, unknown>): AgentPluginExport;
|
|
158
168
|
|
|
159
|
-
export { AGENT_PLUGINS_SPEC_VERSION, AGENT_PLUGIN_EXTENSION_NS, AGENT_PLUGIN_MANIFEST_FILE, AGENT_PLUGIN_MCP_FILE, AGENT_PLUGIN_MCP_SCHEMA_URL, AGENT_PLUGIN_SCHEMA_URL, type AgentPluginAuthor, type AgentPluginExport, type AgentPluginJson, type AgentPluginMcpJson, type AgentPluginStdioServer, type RyuExtensionData, type RyuMcpServerExtras, isAgentPluginManifest, toAgentPlugin, toSpecName };
|
|
169
|
+
export { AGENT_PLUGINS_SPEC_VERSION, AGENT_PLUGIN_EXTENSION_NS, AGENT_PLUGIN_MANIFEST_FILE, AGENT_PLUGIN_MCP_FILE, AGENT_PLUGIN_MCP_SCHEMA_URL, AGENT_PLUGIN_SCHEMA_URL, type AgentPluginAuthor, type AgentPluginExport, type AgentPluginJson, type AgentPluginMcpJson, type AgentPluginRemoteServer, type AgentPluginServer, type AgentPluginStdioServer, type RyuExtensionData, type RyuMcpServerExtras, isAgentPluginManifest, toAgentPlugin, toSpecName };
|
package/dist/agent-plugin.d.ts
CHANGED
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
* The Agent Plugins Specification (https://agent-plugins.org/, TSC: Amazon,
|
|
5
5
|
* Cursor, Microsoft, OpenAI, Vercel) defines a small portable floor: a plugin is
|
|
6
6
|
* a directory with `plugin.json`, Agent Skills under `skills/<slug>/SKILL.md`,
|
|
7
|
-
* and MCP servers in `mcp.json`.
|
|
7
|
+
* and MCP servers in `mcp.json`. Native stdio, Streamable HTTP, and legacy SSE
|
|
8
|
+
* servers all have a direct portable representation; richer Ryu-only fields stay
|
|
9
|
+
* in the extension namespace or are reported as notes.
|
|
8
10
|
*
|
|
9
11
|
* ## Why this is a SECOND file, not a migration
|
|
10
12
|
*
|
|
@@ -69,22 +71,22 @@ declare const AGENT_PLUGIN_MCP_FILE = "mcp.json";
|
|
|
69
71
|
*/
|
|
70
72
|
declare function isAgentPluginManifest(value: unknown): boolean;
|
|
71
73
|
/** Author object — the only three fields the spec permits (§5.4). */
|
|
72
|
-
|
|
73
|
-
name?: string;
|
|
74
|
+
interface AgentPluginAuthor {
|
|
74
75
|
email?: string;
|
|
76
|
+
name?: string;
|
|
75
77
|
url?: string;
|
|
76
|
-
}
|
|
78
|
+
}
|
|
77
79
|
/** Ryu data carried under {@link AGENT_PLUGIN_EXTENSION_NS}. */
|
|
78
|
-
|
|
79
|
-
/** The real scoped plugin id (`@ryu/advisor`) — unrecoverable from spec `name`. */
|
|
80
|
-
id: string;
|
|
80
|
+
interface RyuExtensionData {
|
|
81
81
|
/** Human display name; spec `name` is a slug, not a display string. */
|
|
82
82
|
displayName: string;
|
|
83
|
+
/** The real scoped plugin id (`@ryu/advisor`) — unrecoverable from spec `name`. */
|
|
84
|
+
id: string;
|
|
83
85
|
/** Per-MCP-server fields the spec's closed server variants do not allow. */
|
|
84
86
|
mcp?: Record<string, RyuMcpServerExtras>;
|
|
85
|
-
}
|
|
87
|
+
}
|
|
86
88
|
/** Native MCP fields stripped out of the exported `mcp.json`. */
|
|
87
|
-
|
|
89
|
+
interface RyuMcpServerExtras {
|
|
88
90
|
/** Env var that overrides `command` with an absolute path at spawn. */
|
|
89
91
|
command_env?: string;
|
|
90
92
|
/** Human description for our MCP listing endpoint. */
|
|
@@ -96,37 +98,43 @@ type RyuMcpServerExtras = {
|
|
|
96
98
|
* deliberately do not.
|
|
97
99
|
*/
|
|
98
100
|
enabled?: false;
|
|
99
|
-
}
|
|
101
|
+
}
|
|
100
102
|
/** A conformant `plugin.json` (§5.2). */
|
|
101
|
-
|
|
103
|
+
interface AgentPluginJson {
|
|
102
104
|
$schema: string;
|
|
103
|
-
name: string;
|
|
104
|
-
version?: string;
|
|
105
|
-
description?: string;
|
|
106
105
|
author?: AgentPluginAuthor;
|
|
106
|
+
description?: string;
|
|
107
|
+
extensions: Record<string, unknown>;
|
|
107
108
|
homepage?: string;
|
|
108
|
-
repository?: string;
|
|
109
|
-
license?: string;
|
|
110
109
|
keywords?: string[];
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
110
|
+
license?: string;
|
|
111
|
+
name: string;
|
|
112
|
+
repository?: string;
|
|
113
|
+
version?: string;
|
|
114
|
+
}
|
|
115
|
+
/** A stdio server entry (§7.2.1). */
|
|
116
|
+
interface AgentPluginStdioServer {
|
|
117
117
|
args?: string[];
|
|
118
|
-
|
|
118
|
+
command: string;
|
|
119
119
|
cwd?: string;
|
|
120
|
-
|
|
120
|
+
env?: Record<string, string>;
|
|
121
|
+
type: "stdio";
|
|
122
|
+
}
|
|
123
|
+
/** A remote server entry (§7.2.1). */
|
|
124
|
+
interface AgentPluginRemoteServer {
|
|
125
|
+
headers?: Record<string, string>;
|
|
126
|
+
type: "streamable-http" | "sse";
|
|
127
|
+
url: string;
|
|
128
|
+
}
|
|
129
|
+
/** Any server variant a conformant Agent Plugins client can consume. */
|
|
130
|
+
type AgentPluginServer = AgentPluginStdioServer | AgentPluginRemoteServer;
|
|
121
131
|
/** A conformant `mcp.json` (§7.2.1). */
|
|
122
|
-
|
|
132
|
+
interface AgentPluginMcpJson {
|
|
123
133
|
$schema: string;
|
|
124
|
-
mcpServers: Record<string,
|
|
125
|
-
}
|
|
134
|
+
mcpServers: Record<string, AgentPluginServer>;
|
|
135
|
+
}
|
|
126
136
|
/** What {@link toAgentPlugin} produces, plus what it had to leave behind. */
|
|
127
|
-
|
|
128
|
-
/** The `plugin.json` contents. */
|
|
129
|
-
plugin: AgentPluginJson;
|
|
137
|
+
interface AgentPluginExport {
|
|
130
138
|
/** The `mcp.json` contents, or null when the plugin exports no server. */
|
|
131
139
|
mcp: AgentPluginMcpJson | null;
|
|
132
140
|
/**
|
|
@@ -134,7 +142,9 @@ type AgentPluginExport = {
|
|
|
134
142
|
* is visible at the call site instead of silent.
|
|
135
143
|
*/
|
|
136
144
|
notes: string[];
|
|
137
|
-
|
|
145
|
+
/** The `plugin.json` contents. */
|
|
146
|
+
plugin: AgentPluginJson;
|
|
147
|
+
}
|
|
138
148
|
/**
|
|
139
149
|
* Project a Ryu plugin id onto a spec-legal `name` (§5.5): 1–64 chars of
|
|
140
150
|
* `a-z 0-9 - .`, alphanumeric at both ends, no `--` and no `..`.
|
|
@@ -156,4 +166,4 @@ declare function toSpecName(id: string): string;
|
|
|
156
166
|
*/
|
|
157
167
|
declare function toAgentPlugin(manifest: Record<string, unknown>): AgentPluginExport;
|
|
158
168
|
|
|
159
|
-
export { AGENT_PLUGINS_SPEC_VERSION, AGENT_PLUGIN_EXTENSION_NS, AGENT_PLUGIN_MANIFEST_FILE, AGENT_PLUGIN_MCP_FILE, AGENT_PLUGIN_MCP_SCHEMA_URL, AGENT_PLUGIN_SCHEMA_URL, type AgentPluginAuthor, type AgentPluginExport, type AgentPluginJson, type AgentPluginMcpJson, type AgentPluginStdioServer, type RyuExtensionData, type RyuMcpServerExtras, isAgentPluginManifest, toAgentPlugin, toSpecName };
|
|
169
|
+
export { AGENT_PLUGINS_SPEC_VERSION, AGENT_PLUGIN_EXTENSION_NS, AGENT_PLUGIN_MANIFEST_FILE, AGENT_PLUGIN_MCP_FILE, AGENT_PLUGIN_MCP_SCHEMA_URL, AGENT_PLUGIN_SCHEMA_URL, type AgentPluginAuthor, type AgentPluginExport, type AgentPluginJson, type AgentPluginMcpJson, type AgentPluginRemoteServer, type AgentPluginServer, type AgentPluginStdioServer, type RyuExtensionData, type RyuMcpServerExtras, isAgentPluginManifest, toAgentPlugin, toSpecName };
|
package/dist/agent-plugin.js
CHANGED
package/dist/agent.cjs
CHANGED
|
@@ -273,6 +273,15 @@ function brokerCall(transport, cap, op, input) {
|
|
|
273
273
|
}
|
|
274
274
|
function createPrimitives(transport) {
|
|
275
275
|
return {
|
|
276
|
+
background: {
|
|
277
|
+
list: (input) => transport.bridge("background.list", {
|
|
278
|
+
producer: input?.producer,
|
|
279
|
+
running_only: input?.runningOnly
|
|
280
|
+
}),
|
|
281
|
+
stop: (input) => transport.bridge("background.stop", {
|
|
282
|
+
process_id: input.processId
|
|
283
|
+
})
|
|
284
|
+
},
|
|
276
285
|
rag: {
|
|
277
286
|
retrieve: (input) => brokerCall(transport, "rag", "retrieve", input),
|
|
278
287
|
embed: (input) => brokerCall(transport, "rag", "embed", input),
|