@nylorun/runtime 0.39.0-beta → 0.40.0-beta
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/CHANGELOG.md +6 -0
- package/dist/api/a2a/endpoint.js +1 -1
- package/dist/api/a2a/protocol.d.ts +6 -0
- package/dist/api/a2a/protocol.js +13 -0
- package/dist/api/a2a/routes.js +1 -0
- package/dist/management-openapi.json +1 -1
- package/dist/openapi.json +2 -2
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.40.0-beta
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 78787e2: A2A `SendMessage` takes `message.metadata.removeTools` (Host feature `remove-tools`): the tools a new message's turn may not use, by name, as a session message's `removeTools`. `createA2aClient`'s `send` takes `removeTools`.
|
|
8
|
+
|
|
3
9
|
## 0.39.0-beta
|
|
4
10
|
|
|
5
11
|
### Minor Changes
|
package/dist/api/a2a/endpoint.js
CHANGED
|
@@ -72,7 +72,7 @@ export function a2aRoutes(api) {
|
|
|
72
72
|
path: "/v1/a2a/agents/{agentId}",
|
|
73
73
|
tags: TAGS,
|
|
74
74
|
summary: "Call an agent over A2A",
|
|
75
|
-
description: "A2A 1.0 JSON-RPC, for a subject, under the Nylorun profile v2 (Host feature `a2a-profile-v2`). `SendMessage` blocks up to the Runtime limit `a2aWaitMs` (5 minutes by default; then the task is answered still `WORKING`) unless `returnImmediately`; `GetTask` (with `historyLength`), `CancelTask` and `ListTasks`; and the four push notification config methods, plus `configuration.taskPushNotificationConfig` in `SendMessage`: each update is POSTed as one `StreamResponse`, signed with Standard Webhooks (`webhook-id`, `webhook-timestamp`, `webhook-signature` with the Runtime's `a2a.push.secret`) and `X-A2A-Notification-Token`, at least once, retried for up to 24 hours, to hosts the Runtime allows (`a2a.push.allowHosts` for private ones). A message to a busy context is queued and answered with the task that will take it (`TASK_STATE_SUBMITTED`); `message.metadata.delivery: \"reject\"` asks for `UnsupportedOperationError` (reason `CONTEXT_BUSY`) instead. A message is text, one data part, or text with `raw` files (stored as artifacts of the context's session) and `url` files (fetched by the Runtime), each at most the Runtime limit `inlineFileBytes` (20 MiB by default). An approval, question or connection the task waits for (`AUTH_REQUIRED` or `INPUT_REQUIRED`) is shown under `interactions/v1` and answered on the same task with `{ interactionId, approved }` or `{ interactionId, value }` under that URI in the message's `metadata`; text never approves. Artifacts carry the turn's output and the files it wrote, as `url` parts at `/v1/a2a/files/…` with `files/v1`; the task's metadata carries `progress/v1`, `telemetry/v1` and `effects/v1`. Extension data is answered only for the extensions activated with `A2A-Extensions`. A context is one session per subject, agent and `contextId`; a task is one turn. JSON-RPC errors are answered with 200; limits, scopes and unavailable streams stay HTTP errors. Not served: streaming, `GetExtendedAgentCard`.",
|
|
75
|
+
description: "A2A 1.0 JSON-RPC, for a subject, under the Nylorun profile v2 (Host feature `a2a-profile-v2`). `SendMessage` blocks up to the Runtime limit `a2aWaitMs` (5 minutes by default; then the task is answered still `WORKING`) unless `returnImmediately`; `GetTask` (with `historyLength`), `CancelTask` and `ListTasks`; and the four push notification config methods, plus `configuration.taskPushNotificationConfig` in `SendMessage`: each update is POSTed as one `StreamResponse`, signed with Standard Webhooks (`webhook-id`, `webhook-timestamp`, `webhook-signature` with the Runtime's `a2a.push.secret`) and `X-A2A-Notification-Token`, at least once, retried for up to 24 hours, to hosts the Runtime allows (`a2a.push.allowHosts` for private ones). A message to a busy context is queued and answered with the task that will take it (`TASK_STATE_SUBMITTED`); `message.metadata.delivery: \"reject\"` asks for `UnsupportedOperationError` (reason `CONTEXT_BUSY`) instead. `message.metadata.removeTools` (Host feature `remove-tools`) names the tools a new message's turn may not use, as a session message's `removeTools`. A message is text, one data part, or text with `raw` files (stored as artifacts of the context's session) and `url` files (fetched by the Runtime), each at most the Runtime limit `inlineFileBytes` (20 MiB by default). An approval, question or connection the task waits for (`AUTH_REQUIRED` or `INPUT_REQUIRED`) is shown under `interactions/v1` and answered on the same task with `{ interactionId, approved }` or `{ interactionId, value }` under that URI in the message's `metadata`; text never approves. Artifacts carry the turn's output and the files it wrote, as `url` parts at `/v1/a2a/files/…` with `files/v1`; the task's metadata carries `progress/v1`, `telemetry/v1` and `effects/v1`. Extension data is answered only for the extensions activated with `A2A-Extensions`. A context is one session per subject, agent and `contextId`; a task is one turn. JSON-RPC errors are answered with 200; limits, scopes and unavailable streams stay HTTP errors. Not served: streaming, `GetExtendedAgentCard`.",
|
|
76
76
|
externalDocs: A2A_SPECIFICATION,
|
|
77
77
|
request: {
|
|
78
78
|
params: agentId,
|
|
@@ -226,6 +226,12 @@ export interface SendParams {
|
|
|
226
226
|
push?: PushConfigInput;
|
|
227
227
|
/** `metadata.delivery`; default `queue`. */
|
|
228
228
|
delivery: Delivery;
|
|
229
|
+
/**
|
|
230
|
+
* `metadata.removeTools` (Host feature `remove-tools`): the tools the message's turn may not
|
|
231
|
+
* use, by name, as a session message's `removeTools`. A new message only: a reply answers an
|
|
232
|
+
* interaction of a turn already running.
|
|
233
|
+
*/
|
|
234
|
+
removeTools?: readonly string[];
|
|
229
235
|
/** The answer the message carries under `interactions/v1`. */
|
|
230
236
|
answer?: InteractionAnswer;
|
|
231
237
|
}
|
package/dist/api/a2a/protocol.js
CHANGED
|
@@ -223,6 +223,17 @@ export function parsePushConfig(value, field) {
|
|
|
223
223
|
...(authentication ? { authentication } : {}),
|
|
224
224
|
};
|
|
225
225
|
}
|
|
226
|
+
/** `metadata.removeTools`: at most 256 names of 1 to 256 characters (a session message's `removeTools`). */
|
|
227
|
+
function parseRemoveTools(metadata) {
|
|
228
|
+
const value = metadata.removeTools;
|
|
229
|
+
if (value === undefined || value === null)
|
|
230
|
+
return undefined;
|
|
231
|
+
if (!Array.isArray(value) ||
|
|
232
|
+
value.length > 256 ||
|
|
233
|
+
!value.every((name) => typeof name === "string" && name.length >= 1 && name.length <= 256))
|
|
234
|
+
return a2aFail("invalidParams", "message.metadata.removeTools must be at most 256 tool names of 1 to 256 characters", {}, "message.metadata.removeTools");
|
|
235
|
+
return value;
|
|
236
|
+
}
|
|
226
237
|
/** `metadata.delivery`: `queue` (the default) or `reject`. */
|
|
227
238
|
function parseDelivery(metadata) {
|
|
228
239
|
const delivery = metadata.delivery;
|
|
@@ -272,6 +283,7 @@ export function parseSendParams(params) {
|
|
|
272
283
|
// On the message (the profile's place), or on the request's own metadata.
|
|
273
284
|
const delivery = parseDelivery(metadata.delivery === undefined && isObject(params.metadata) ? params.metadata : metadata);
|
|
274
285
|
const answer = parseAnswer(metadata);
|
|
286
|
+
const removeTools = parseRemoveTools(metadata.removeTools === undefined && isObject(params.metadata) ? params.metadata : metadata);
|
|
275
287
|
const configuration = params.configuration;
|
|
276
288
|
if (configuration !== undefined && configuration !== null && !isObject(configuration))
|
|
277
289
|
a2aFail("invalidParams", "configuration must be an object", {}, "configuration");
|
|
@@ -315,6 +327,7 @@ export function parseSendParams(params) {
|
|
|
315
327
|
...(historyLength !== undefined ? { historyLength } : {}),
|
|
316
328
|
...(push ? { push } : {}),
|
|
317
329
|
delivery,
|
|
330
|
+
...(removeTools ? { removeTools } : {}),
|
|
318
331
|
...(answer ? { answer } : {}),
|
|
319
332
|
};
|
|
320
333
|
}
|
package/dist/api/a2a/routes.js
CHANGED
|
@@ -335,6 +335,7 @@ async function sendMessage(caller, params, signal) {
|
|
|
335
335
|
requestId: randomUUID(),
|
|
336
336
|
idempotencyKey,
|
|
337
337
|
...body,
|
|
338
|
+
...(send.removeTools ? { removeTools: [...send.removeTools] } : {}),
|
|
338
339
|
}, async () => {
|
|
339
340
|
const active = (await contextSession(caller, sessionId))?.activeTurnId;
|
|
340
341
|
const taskId = active ? taskIdOf(context, active) : undefined;
|
package/dist/openapi.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"openapi": "3.2.0",
|
|
3
3
|
"info": {
|
|
4
4
|
"title": "Nylorun Runtime API",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.40.0-beta",
|
|
6
6
|
"x-nylorun-protocol": {
|
|
7
7
|
"min": 16,
|
|
8
8
|
"max": 18,
|
|
@@ -36326,7 +36326,7 @@
|
|
|
36326
36326
|
"A2A"
|
|
36327
36327
|
],
|
|
36328
36328
|
"summary": "Call an agent over A2A",
|
|
36329
|
-
"description": "A2A 1.0 JSON-RPC, for a subject, under the Nylorun profile v2 (Host feature `a2a-profile-v2`). `SendMessage` blocks up to the Runtime limit `a2aWaitMs` (5 minutes by default; then the task is answered still `WORKING`) unless `returnImmediately`; `GetTask` (with `historyLength`), `CancelTask` and `ListTasks`; and the four push notification config methods, plus `configuration.taskPushNotificationConfig` in `SendMessage`: each update is POSTed as one `StreamResponse`, signed with Standard Webhooks (`webhook-id`, `webhook-timestamp`, `webhook-signature` with the Runtime's `a2a.push.secret`) and `X-A2A-Notification-Token`, at least once, retried for up to 24 hours, to hosts the Runtime allows (`a2a.push.allowHosts` for private ones). A message to a busy context is queued and answered with the task that will take it (`TASK_STATE_SUBMITTED`); `message.metadata.delivery: \"reject\"` asks for `UnsupportedOperationError` (reason `CONTEXT_BUSY`) instead. A message is text, one data part, or text with `raw` files (stored as artifacts of the context's session) and `url` files (fetched by the Runtime), each at most the Runtime limit `inlineFileBytes` (20 MiB by default). An approval, question or connection the task waits for (`AUTH_REQUIRED` or `INPUT_REQUIRED`) is shown under `interactions/v1` and answered on the same task with `{ interactionId, approved }` or `{ interactionId, value }` under that URI in the message's `metadata`; text never approves. Artifacts carry the turn's output and the files it wrote, as `url` parts at `/v1/a2a/files/…` with `files/v1`; the task's metadata carries `progress/v1`, `telemetry/v1` and `effects/v1`. Extension data is answered only for the extensions activated with `A2A-Extensions`. A context is one session per subject, agent and `contextId`; a task is one turn. JSON-RPC errors are answered with 200; limits, scopes and unavailable streams stay HTTP errors. Not served: streaming, `GetExtendedAgentCard`.",
|
|
36329
|
+
"description": "A2A 1.0 JSON-RPC, for a subject, under the Nylorun profile v2 (Host feature `a2a-profile-v2`). `SendMessage` blocks up to the Runtime limit `a2aWaitMs` (5 minutes by default; then the task is answered still `WORKING`) unless `returnImmediately`; `GetTask` (with `historyLength`), `CancelTask` and `ListTasks`; and the four push notification config methods, plus `configuration.taskPushNotificationConfig` in `SendMessage`: each update is POSTed as one `StreamResponse`, signed with Standard Webhooks (`webhook-id`, `webhook-timestamp`, `webhook-signature` with the Runtime's `a2a.push.secret`) and `X-A2A-Notification-Token`, at least once, retried for up to 24 hours, to hosts the Runtime allows (`a2a.push.allowHosts` for private ones). A message to a busy context is queued and answered with the task that will take it (`TASK_STATE_SUBMITTED`); `message.metadata.delivery: \"reject\"` asks for `UnsupportedOperationError` (reason `CONTEXT_BUSY`) instead. `message.metadata.removeTools` (Host feature `remove-tools`) names the tools a new message's turn may not use, as a session message's `removeTools`. A message is text, one data part, or text with `raw` files (stored as artifacts of the context's session) and `url` files (fetched by the Runtime), each at most the Runtime limit `inlineFileBytes` (20 MiB by default). An approval, question or connection the task waits for (`AUTH_REQUIRED` or `INPUT_REQUIRED`) is shown under `interactions/v1` and answered on the same task with `{ interactionId, approved }` or `{ interactionId, value }` under that URI in the message's `metadata`; text never approves. Artifacts carry the turn's output and the files it wrote, as `url` parts at `/v1/a2a/files/…` with `files/v1`; the task's metadata carries `progress/v1`, `telemetry/v1` and `effects/v1`. Extension data is answered only for the extensions activated with `A2A-Extensions`. A context is one session per subject, agent and `contextId`; a task is one turn. JSON-RPC errors are answered with 200; limits, scopes and unavailable streams stay HTTP errors. Not served: streaming, `GetExtendedAgentCard`.",
|
|
36330
36330
|
"externalDocs": {
|
|
36331
36331
|
"description": "The A2A specification",
|
|
36332
36332
|
"url": "https://a2a-protocol.org/latest/specification/"
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const RUNTIME_VERSION = "0.
|
|
1
|
+
export declare const RUNTIME_VERSION = "0.40.0-beta";
|
package/dist/version.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// Kept in step with package.json by runtime/server/scripts/check-package.mjs, which runs in npm run check.
|
|
2
2
|
// release:prepare also rewrites this when it bumps @nylorun/runtime.
|
|
3
|
-
export const RUNTIME_VERSION = "0.
|
|
3
|
+
export const RUNTIME_VERSION = "0.40.0-beta";
|
package/package.json
CHANGED