From 8ef3040a7c245d4fe7b67d4123fad093e24fba71 Mon Sep 17 00:00:00 2001 From: benpankow Date: Wed, 29 Jul 2026 13:46:23 -0700 Subject: [PATCH] chore(eve): classify authorized approval contracts Signed-off-by: benpankow --- .../compatibility/connection/v2.ts | 7 +++++++ .../compatibility/dynamicInstructions/v1.ts | 10 ++++++++++ .../compatibility/dynamicSkill/v1.ts | 11 +++++++++++ .../compatibility/dynamicTool/v3.ts | 14 ++++++++++++++ .../compatibility/hook/v2.ts | 9 +++++++++ .../compatibility/tool/v2.ts | 10 ++++++++++ .../reports/connection/v3.json | 15 +++++++++++++++ .../reports/dynamicInstructions/v2.json | 7 +++++++ .../reports/dynamicSkill/v2.json | 7 +++++++ .../reports/dynamicTool/v4.json | 13 +++++++++++++ .../extension-contracts/reports/hook/v3.json | 7 +++++++ .../extension-contracts/reports/tool/v3.json | 19 +++++++++++++++++++ .../src/compiler/extension-compatibility.ts | 12 ++++++------ research/hitl-approver-authorization.md | 2 +- 14 files changed, 136 insertions(+), 7 deletions(-) create mode 100644 packages/eve/extension-contracts/compatibility/connection/v2.ts create mode 100644 packages/eve/extension-contracts/compatibility/dynamicInstructions/v1.ts create mode 100644 packages/eve/extension-contracts/compatibility/dynamicSkill/v1.ts create mode 100644 packages/eve/extension-contracts/compatibility/dynamicTool/v3.ts create mode 100644 packages/eve/extension-contracts/compatibility/hook/v2.ts create mode 100644 packages/eve/extension-contracts/compatibility/tool/v2.ts create mode 100644 packages/eve/extension-contracts/reports/connection/v3.json create mode 100644 packages/eve/extension-contracts/reports/dynamicInstructions/v2.json create mode 100644 packages/eve/extension-contracts/reports/dynamicSkill/v2.json create mode 100644 packages/eve/extension-contracts/reports/dynamicTool/v4.json create mode 100644 packages/eve/extension-contracts/reports/hook/v3.json create mode 100644 packages/eve/extension-contracts/reports/tool/v3.json diff --git a/packages/eve/extension-contracts/compatibility/connection/v2.ts b/packages/eve/extension-contracts/compatibility/connection/v2.ts new file mode 100644 index 000000000..d5831f5ce --- /dev/null +++ b/packages/eve/extension-contracts/compatibility/connection/v2.ts @@ -0,0 +1,7 @@ +import { defineMcpClientConnection } from "#public/connections/index.js"; + +export default defineMcpClientConnection({ + approval: () => "user-approval", + description: "Retain request-time connection approval shorthand", + url: "https://example.com/mcp", +}); diff --git a/packages/eve/extension-contracts/compatibility/dynamicInstructions/v1.ts b/packages/eve/extension-contracts/compatibility/dynamicInstructions/v1.ts new file mode 100644 index 000000000..7f1414ead --- /dev/null +++ b/packages/eve/extension-contracts/compatibility/dynamicInstructions/v1.ts @@ -0,0 +1,10 @@ +import { defineDynamic, defineInstructions } from "#public/instructions/index.js"; + +export default defineDynamic({ + events: { + "session.started": () => + defineInstructions({ + markdown: "Retain dynamic instructions authoring.", + }), + }, +}); diff --git a/packages/eve/extension-contracts/compatibility/dynamicSkill/v1.ts b/packages/eve/extension-contracts/compatibility/dynamicSkill/v1.ts new file mode 100644 index 000000000..9b859ca7f --- /dev/null +++ b/packages/eve/extension-contracts/compatibility/dynamicSkill/v1.ts @@ -0,0 +1,11 @@ +import { defineDynamic, defineSkill } from "#public/skills/index.js"; + +export default defineDynamic({ + events: { + "session.started": () => + defineSkill({ + description: "Retain dynamic skill authoring", + markdown: "# Retained skill", + }), + }, +}); diff --git a/packages/eve/extension-contracts/compatibility/dynamicTool/v3.ts b/packages/eve/extension-contracts/compatibility/dynamicTool/v3.ts new file mode 100644 index 000000000..3ef51c66e --- /dev/null +++ b/packages/eve/extension-contracts/compatibility/dynamicTool/v3.ts @@ -0,0 +1,14 @@ +import { defineDynamic, defineTool } from "#public/tools/index.js"; + +export default defineDynamic({ + events: { + "session.started": () => ({ + inspect: defineTool({ + approval: () => "user-approval", + description: "Retain dynamic request-time approval shorthand", + inputSchema: { type: "object", properties: {} }, + execute: async () => ({ ok: true }), + }), + }), + }, +}); diff --git a/packages/eve/extension-contracts/compatibility/hook/v2.ts b/packages/eve/extension-contracts/compatibility/hook/v2.ts new file mode 100644 index 000000000..91cca603a --- /dev/null +++ b/packages/eve/extension-contracts/compatibility/hook/v2.ts @@ -0,0 +1,9 @@ +import { defineHook } from "#public/hooks/index.js"; + +export default defineHook({ + events: { + "input.requested"(event, ctx) { + console.info("input requested", event.data.requests.length, ctx.session.id); + }, + }, +}); diff --git a/packages/eve/extension-contracts/compatibility/tool/v2.ts b/packages/eve/extension-contracts/compatibility/tool/v2.ts new file mode 100644 index 000000000..a67f17c61 --- /dev/null +++ b/packages/eve/extension-contracts/compatibility/tool/v2.ts @@ -0,0 +1,10 @@ +import { defineTool } from "#public/tools/index.js"; + +export default defineTool({ + approval: ({ toolInput }) => (toolInput?.confirmed === true ? "not-applicable" : "user-approval"), + description: "Retain request-time approval function shorthand", + inputSchema: { type: "object", properties: { confirmed: { type: "boolean" } } }, + async execute(input, ctx) { + return { input, sessionId: ctx.session.id }; + }, +}); diff --git a/packages/eve/extension-contracts/reports/connection/v3.json b/packages/eve/extension-contracts/reports/connection/v3.json new file mode 100644 index 000000000..4e277fb57 --- /dev/null +++ b/packages/eve/extension-contracts/reports/connection/v3.json @@ -0,0 +1,15 @@ +{ + "kind": "eve-extension-capability-contract", + "capability": "connection", + "epoch": 3, + "sha256": "d710e0f9607b6f58b4b488547844c452a3278b36cfbedcbb987c93d5b753fcf2", + "exports": [ + "ConnectionAuthorizationFailedError", + "ConnectionAuthorizationRequiredError", + "defineInteractiveAuthorization", + "defineMcpClientConnection", + "defineOpenAPIConnection", + "isConnectionAuthorizationFailedError", + "isConnectionAuthorizationRequiredError" + ] +} diff --git a/packages/eve/extension-contracts/reports/dynamicInstructions/v2.json b/packages/eve/extension-contracts/reports/dynamicInstructions/v2.json new file mode 100644 index 000000000..48de3ab3b --- /dev/null +++ b/packages/eve/extension-contracts/reports/dynamicInstructions/v2.json @@ -0,0 +1,7 @@ +{ + "kind": "eve-extension-capability-contract", + "capability": "dynamicInstructions", + "epoch": 2, + "sha256": "ef164033630f1192feca8a476fee58e505eda94c82d35e130fb4eda5ebc6690c", + "exports": ["defineDynamic"] +} diff --git a/packages/eve/extension-contracts/reports/dynamicSkill/v2.json b/packages/eve/extension-contracts/reports/dynamicSkill/v2.json new file mode 100644 index 000000000..71ac49adc --- /dev/null +++ b/packages/eve/extension-contracts/reports/dynamicSkill/v2.json @@ -0,0 +1,7 @@ +{ + "kind": "eve-extension-capability-contract", + "capability": "dynamicSkill", + "epoch": 2, + "sha256": "ef164033630f1192feca8a476fee58e505eda94c82d35e130fb4eda5ebc6690c", + "exports": ["defineDynamic"] +} diff --git a/packages/eve/extension-contracts/reports/dynamicTool/v4.json b/packages/eve/extension-contracts/reports/dynamicTool/v4.json new file mode 100644 index 000000000..4b6c74d28 --- /dev/null +++ b/packages/eve/extension-contracts/reports/dynamicTool/v4.json @@ -0,0 +1,13 @@ +{ + "kind": "eve-extension-capability-contract", + "capability": "dynamicTool", + "epoch": 4, + "sha256": "0e6adad8133cbf29ddc790e0f40fc9bed8fca9bccc2db1592ca0ed04f8f29e95", + "exports": [ + "DynamicToolEntry", + "DynamicToolEvents", + "DynamicToolResult", + "DynamicToolSet", + "defineDynamic" + ] +} diff --git a/packages/eve/extension-contracts/reports/hook/v3.json b/packages/eve/extension-contracts/reports/hook/v3.json new file mode 100644 index 000000000..711c0c422 --- /dev/null +++ b/packages/eve/extension-contracts/reports/hook/v3.json @@ -0,0 +1,7 @@ +{ + "kind": "eve-extension-capability-contract", + "capability": "hook", + "epoch": 3, + "sha256": "7fcba2edf86a310a94cf4ed9c9a1ac1ad1c10ecee2393be1c2dc282f34301344", + "exports": ["defineHook"] +} diff --git a/packages/eve/extension-contracts/reports/tool/v3.json b/packages/eve/extension-contracts/reports/tool/v3.json new file mode 100644 index 000000000..02e912d74 --- /dev/null +++ b/packages/eve/extension-contracts/reports/tool/v3.json @@ -0,0 +1,19 @@ +{ + "kind": "eve-extension-capability-contract", + "capability": "tool", + "epoch": 3, + "sha256": "979ad6f9d2519e66f407331c2891fdba62a4779af50a2110dc552f24d5fdd548", + "exports": [ + "defineBashTool", + "defineGlobTool", + "defineGrepTool", + "defineReadFileTool", + "defineTool", + "defineWriteFileTool", + "disableTool", + "experimental_workflow", + "isDisabledToolSentinel", + "isExperimentalWorkflowToolDefinition", + "toolResultFrom" + ] +} diff --git a/packages/eve/src/compiler/extension-compatibility.ts b/packages/eve/src/compiler/extension-compatibility.ts index 13a8d2d47..670e79bc3 100644 --- a/packages/eve/src/compiler/extension-compatibility.ts +++ b/packages/eve/src/compiler/extension-compatibility.ts @@ -21,14 +21,14 @@ interface ExtensionCapabilityContract { const EXTENSION_CAPABILITY_CONTRACTS = { extension: { current: 1, supported: [1], dropped: {} }, - tool: { current: 2, supported: [1, 2], dropped: {} }, - dynamicTool: { current: 3, supported: [1, 2, 3], dropped: {} }, - connection: { current: 2, supported: [1, 2], dropped: {} }, - hook: { current: 2, supported: [1, 2], dropped: {} }, + tool: { current: 3, supported: [1, 2, 3], dropped: {} }, + dynamicTool: { current: 4, supported: [1, 2, 3, 4], dropped: {} }, + connection: { current: 3, supported: [1, 2, 3], dropped: {} }, + hook: { current: 3, supported: [1, 2, 3], dropped: {} }, skill: { current: 1, supported: [1], dropped: {} }, - dynamicSkill: { current: 1, supported: [1], dropped: {} }, + dynamicSkill: { current: 2, supported: [1, 2], dropped: {} }, instructions: { current: 1, supported: [1], dropped: {} }, - dynamicInstructions: { current: 1, supported: [1], dropped: {} }, + dynamicInstructions: { current: 2, supported: [1, 2], dropped: {} }, config: { current: 1, supported: [1], dropped: {} }, state: { current: 2, supported: [1, 2], dropped: {} }, } as const satisfies Record; diff --git a/research/hitl-approver-authorization.md b/research/hitl-approver-authorization.md index 460a74e93..ebbaf1760 100644 --- a/research/hitl-approver-authorization.md +++ b/research/hitl-approver-authorization.md @@ -1,5 +1,5 @@ --- -issue: 1021 +issue: "1021" status: proposed last_updated: "2026-07-29" ---