@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.
Files changed (90) hide show
  1. package/README.md +19 -6
  2. package/dist/agent-plugin.cjs +46 -0
  3. package/dist/agent-plugin.d.cts +42 -32
  4. package/dist/agent-plugin.d.ts +42 -32
  5. package/dist/agent-plugin.js +1 -1
  6. package/dist/agent.cjs +9 -0
  7. package/dist/agent.d.cts +377 -1
  8. package/dist/agent.d.ts +377 -1
  9. package/dist/agent.js +4 -2
  10. package/dist/app-Bkw7LlCK.d.ts +129 -0
  11. package/dist/app-DNaGmLVf.d.cts +129 -0
  12. package/dist/builder.cjs +1095 -0
  13. package/dist/builder.d.cts +212 -0
  14. package/dist/builder.d.ts +212 -0
  15. package/dist/builder.js +28 -0
  16. package/dist/chunk-A3RGEPDG.js +250 -0
  17. package/dist/chunk-FZSFZOIN.js +200 -0
  18. package/dist/{chunk-ODFEUVPW.js → chunk-HACAGK65.js} +1 -18
  19. package/dist/{chunk-AO2KJRDD.js → chunk-IEUQ3CDG.js} +125 -2
  20. package/dist/chunk-IKEDLLFY.js +19 -0
  21. package/dist/chunk-IOLP5FFE.js +354 -0
  22. package/dist/{chunk-G6FLVEC4.js → chunk-JX6DDRXV.js} +46 -0
  23. package/dist/chunk-T5676WL2.js +240 -0
  24. package/dist/chunk-TLDPEGC7.js +21 -0
  25. package/dist/chunk-TXSHHZF2.js +0 -0
  26. package/dist/{chunk-MTUBUPIV.js → chunk-ULSVL7EC.js} +8 -227
  27. package/dist/chunk-VLIRNNAE.js +154 -0
  28. package/dist/chunk-W3KPP4WN.js +135 -0
  29. package/dist/cli.cjs +258 -14
  30. package/dist/cli.js +96 -16
  31. package/dist/client-D5U6ssPc.d.cts +84 -0
  32. package/dist/client-D5U6ssPc.d.ts +84 -0
  33. package/dist/index.cjs +519 -5
  34. package/dist/index.d.cts +16 -632
  35. package/dist/index.d.ts +16 -632
  36. package/dist/index.js +63 -695
  37. package/dist/manifest.cjs +129 -3
  38. package/dist/manifest.d.cts +105 -2
  39. package/dist/manifest.d.ts +105 -2
  40. package/dist/manifest.js +7 -1
  41. package/dist/mcp/client.cjs +180 -0
  42. package/dist/mcp/client.d.cts +49 -0
  43. package/dist/mcp/client.d.ts +49 -0
  44. package/dist/mcp/client.js +10 -0
  45. package/dist/mcp/server.cjs +370 -0
  46. package/dist/mcp/server.d.cts +126 -0
  47. package/dist/mcp/server.d.ts +126 -0
  48. package/dist/mcp/server.js +9 -0
  49. package/dist/mcp.cjs +376 -0
  50. package/dist/mcp.d.cts +2 -0
  51. package/dist/mcp.d.ts +2 -0
  52. package/dist/mcp.js +17 -0
  53. package/dist/model.cjs +141 -0
  54. package/dist/model.d.cts +33 -0
  55. package/dist/model.d.ts +33 -0
  56. package/dist/model.js +18 -0
  57. package/dist/plugin.cjs +46 -0
  58. package/dist/plugin.d.cts +215 -0
  59. package/dist/plugin.d.ts +215 -0
  60. package/dist/plugin.js +8 -0
  61. package/dist/runnable.cjs +1230 -0
  62. package/dist/runnable.d.cts +271 -0
  63. package/dist/runnable.d.ts +271 -0
  64. package/dist/runnable.js +28 -0
  65. package/dist/{index-B6SkaAjJ.d.ts → tool-DSx2bFx8.d.ts} +35 -458
  66. package/dist/{index-BvAB5eMk.d.cts → tool-u-VR0fLF.d.cts} +35 -458
  67. package/package.json +38 -2
  68. package/src/agent/loop.test.ts +4 -4
  69. package/src/agent/tools.ts +3 -3
  70. package/src/agent-plugin.test.ts +58 -0
  71. package/src/agent-plugin.ts +108 -35
  72. package/src/cli/dev.test.ts +26 -47
  73. package/src/cli/dev.ts +10 -2
  74. package/src/cli.ts +98 -15
  75. package/src/exports-lockstep.test.ts +92 -0
  76. package/src/generated/plugin-manifest.ts +243 -27
  77. package/src/index.ts +35 -0
  78. package/src/manifest-schema.test.ts +30 -1
  79. package/src/manifest.fixtures.test.ts +13 -3
  80. package/src/manifest.test.ts +96 -10
  81. package/src/manifest.ts +334 -187
  82. package/src/mcp/index.ts +18 -0
  83. package/src/model/index.ts +22 -0
  84. package/src/plugin/ryu-plugin.ts +82 -0
  85. package/src/runnable/app.test.ts +2 -0
  86. package/src/runnable/app.ts +5 -2
  87. package/src/runnable/index.ts +2 -0
  88. package/src/runnable/primitives.ts +57 -0
  89. package/src/runnable/tool.ts +1 -1
  90. 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="" />&nbsp; @ryu/sdk
1
+ # <img src="https://raw.githubusercontent.com/amajorai/ryu/main/.github/logo.png" width="50" align="middle" alt="" />&nbsp; @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](https://shieldcn.dev/badge/License-Apache--2.0-73DC8C.svg?logo=apache&logoColor=white)](./LICENSE)
6
6
  [![Stack](https://shieldcn.dev/badge/TypeScript-SDK-3178C6.svg?logo=typescript&logoColor=white)](../../README.md)
7
7
 
8
- `@ryu/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, `@ryu/sdk-native` (the `crates/ryu-sdk-napi` binding).
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 @ryu/sdk
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 `@ryu/sdk/manifest`).
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.
@@ -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 {
@@ -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`. Nothing else is portable.
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
- type AgentPluginAuthor = {
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
- type RyuExtensionData = {
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
- type RyuMcpServerExtras = {
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
- type AgentPluginJson = {
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
- extensions: Record<string, unknown>;
112
- };
113
- /** A stdio server entry (§7.2.1) — the only variant we export. */
114
- type AgentPluginStdioServer = {
115
- type: "stdio";
116
- command: string;
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
- env?: Record<string, string>;
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
- type AgentPluginMcpJson = {
132
+ interface AgentPluginMcpJson {
123
133
  $schema: string;
124
- mcpServers: Record<string, AgentPluginStdioServer>;
125
- };
134
+ mcpServers: Record<string, AgentPluginServer>;
135
+ }
126
136
  /** What {@link toAgentPlugin} produces, plus what it had to leave behind. */
127
- type AgentPluginExport = {
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 };
@@ -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`. Nothing else is portable.
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
- type AgentPluginAuthor = {
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
- type RyuExtensionData = {
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
- type RyuMcpServerExtras = {
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
- type AgentPluginJson = {
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
- extensions: Record<string, unknown>;
112
- };
113
- /** A stdio server entry (§7.2.1) — the only variant we export. */
114
- type AgentPluginStdioServer = {
115
- type: "stdio";
116
- command: string;
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
- env?: Record<string, string>;
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
- type AgentPluginMcpJson = {
132
+ interface AgentPluginMcpJson {
123
133
  $schema: string;
124
- mcpServers: Record<string, AgentPluginStdioServer>;
125
- };
134
+ mcpServers: Record<string, AgentPluginServer>;
135
+ }
126
136
  /** What {@link toAgentPlugin} produces, plus what it had to leave behind. */
127
- type AgentPluginExport = {
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 };
@@ -8,7 +8,7 @@ import {
8
8
  isAgentPluginManifest,
9
9
  toAgentPlugin,
10
10
  toSpecName
11
- } from "./chunk-G6FLVEC4.js";
11
+ } from "./chunk-JX6DDRXV.js";
12
12
  export {
13
13
  AGENT_PLUGINS_SPEC_VERSION,
14
14
  AGENT_PLUGIN_EXTENSION_NS,
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),