























1-import { optionalStringEnum, stringEnum } from "openclaw/plugin-sdk/channel-actions";
1+import {
2+optionalNonNegativeIntegerSchema,
3+optionalPositiveIntegerSchema,
4+optionalStringEnum,
5+stringEnum,
6+} from "openclaw/plugin-sdk/channel-actions";
27import { Type } from "typebox";
3849const BROWSER_ACT_KINDS = [
@@ -44,14 +49,6 @@ const BROWSER_SNAPSHOT_REFS = ["role", "aria"] as const;
44494550const BROWSER_IMAGE_TYPES = ["png", "jpeg"] as const;
465147-function optionalPositiveInteger() {
48-return Type.Optional(Type.Integer({ minimum: 1 }));
49-}
50-51-function optionalNonNegativeInteger() {
52-return Type.Optional(Type.Integer({ minimum: 0 }));
53-}
54-5552// NOTE: Using a flattened object schema instead of Type.Union([Type.Object(...), ...])
5653// because Claude API on Vertex AI rejects nested anyOf schemas as invalid JSON Schema.
5754// The discriminator (kind) determines which properties are relevant; runtime validates.
@@ -89,7 +86,7 @@ const BrowserActSchema = Type.Object({
8986url: Type.Optional(Type.String()),
9087loadState: Type.Optional(Type.String()),
9188textGone: Type.Optional(Type.String()),
92-timeoutMs: optionalPositiveInteger(),
89+timeoutMs: optionalPositiveIntegerSchema(),
9390// evaluate
9491fn: Type.Optional(Type.String()),
9592});
@@ -106,14 +103,14 @@ export const BrowserToolSchema = Type.Object({
106103url: Type.Optional(Type.String()),
107104targetId: Type.Optional(Type.String()),
108105label: Type.Optional(Type.String()),
109-limit: optionalPositiveInteger(),
110-maxChars: optionalNonNegativeInteger(),
106+limit: optionalPositiveIntegerSchema(),
107+maxChars: optionalNonNegativeIntegerSchema(),
111108mode: optionalStringEnum(BROWSER_SNAPSHOT_MODES),
112109snapshotFormat: optionalStringEnum(BROWSER_SNAPSHOT_FORMATS),
113110refs: optionalStringEnum(BROWSER_SNAPSHOT_REFS),
114111interactive: Type.Optional(Type.Boolean()),
115112compact: Type.Optional(Type.Boolean()),
116-depth: optionalNonNegativeInteger(),
113+depth: optionalNonNegativeIntegerSchema(),
117114selector: Type.Optional(Type.String()),
118115frame: Type.Optional(Type.String()),
119116labels: Type.Optional(Type.Boolean()),
@@ -125,7 +122,7 @@ export const BrowserToolSchema = Type.Object({
125122level: Type.Optional(Type.String()),
126123paths: Type.Optional(Type.Array(Type.String())),
127124inputRef: Type.Optional(Type.String()),
128-timeoutMs: optionalPositiveInteger(),
125+timeoutMs: optionalPositiveIntegerSchema(),
129126dialogId: Type.Optional(Type.String()),
130127accept: Type.Optional(Type.Boolean()),
131128promptText: Type.Optional(Type.String()),
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。