@openclaw/google-meet 2026.8.1 → 2026.8.2
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/dist/{cli-DXn0mn71.js → cli-D8EyxtkZ.js} +14 -12
- package/dist/{create-B9m2WLts.js → create-Da-nAEHY.js} +2 -2
- package/dist/doctor-contract-api.js +3 -1
- package/dist/{google-api-errors-CDUYkIcK.js → google-api-errors-BDYXfKRa.js} +1 -1
- package/dist/index.js +5 -2
- package/dist/{oauth-9sUJ68Mw.js → oauth-DgBscjXK.js} +4 -3
- package/dist/{plugin-helpers-D4pSK6JM.js → plugin-helpers-CiAxinMY.js} +5 -5
- package/dist/{plugin-registration-C66CpV-S.js → plugin-registration-CeQ3RzYT.js} +3 -3
- package/dist/{runtime-B8d1beHo.js → runtime-BP1uG83z.js} +5 -3
- package/node_modules/typebox/build/format/email.mjs +1 -1
- package/node_modules/typebox/build/format/idna/idn-hostname.mjs +19 -1
- package/node_modules/typebox/package.json +1 -1
- package/package.json +5 -5
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { a as resolveGoogleMeetTokenFromParams, c as buildGoogleMeetPreflightReport, d as fetchGoogleMeetSpace, f as fetchLatestGoogleMeetConferenceRecord, i as resolveArtifactQueryFromParams, l as createGoogleMeetSpace, m as listGoogleMeetCalendarEvents, n as fetchResolvedGoogleMeetAttendance, o as resolveMeetingFromParams, p as buildGoogleMeetCalendarDayWindow, s as resolveSpaceFromParams, t as fetchResolvedGoogleMeetArtifacts, u as endGoogleMeetActiveConference } from "./plugin-helpers-
|
|
1
|
+
import { a as resolveGoogleMeetTokenFromParams, c as buildGoogleMeetPreflightReport, d as fetchGoogleMeetSpace, f as fetchLatestGoogleMeetConferenceRecord, i as resolveArtifactQueryFromParams, l as createGoogleMeetSpace, m as listGoogleMeetCalendarEvents, n as fetchResolvedGoogleMeetAttendance, o as resolveMeetingFromParams, p as buildGoogleMeetCalendarDayWindow, s as resolveSpaceFromParams, t as fetchResolvedGoogleMeetArtifacts, u as endGoogleMeetActiveConference } from "./plugin-helpers-CiAxinMY.js";
|
|
2
2
|
import { i as resolveGoogleMeetGatewayOperationTimeoutMs } from "./config-wBK8loBb.js";
|
|
3
|
-
import { buildGoogleMeetAuthUrl, exchangeGoogleMeetAuthCode, resolveGoogleMeetAccessToken, waitForGoogleMeetAuthCode } from "./oauth-
|
|
4
|
-
import { n as hasCreateSpaceConfigInput, r as resolveCreateSpaceConfig } from "./create-
|
|
3
|
+
import { buildGoogleMeetAuthUrl, exchangeGoogleMeetAuthCode, resolveGoogleMeetAccessToken, waitForGoogleMeetAuthCode } from "./oauth-DgBscjXK.js";
|
|
4
|
+
import { n as hasCreateSpaceConfigInput, r as resolveCreateSpaceConfig } from "./create-Da-nAEHY.js";
|
|
5
5
|
import { clampTimerTimeoutMs, parseStrictNonNegativeInteger, parseStrictPositiveInteger } from "openclaw/plugin-sdk/number-runtime";
|
|
6
6
|
import { callGatewayFromCli, isGatewayClientRequestError, isGatewayTransportError } from "openclaw/plugin-sdk/gateway-runtime";
|
|
7
7
|
import { generateHexPkceVerifierChallenge } from "openclaw/plugin-sdk/provider-auth";
|
|
@@ -139,7 +139,8 @@ async function callGoogleMeetGateway(params) {
|
|
|
139
139
|
}
|
|
140
140
|
function formatDuration(value) {
|
|
141
141
|
if (value === void 0) return "n/a";
|
|
142
|
-
|
|
142
|
+
const roundedMs = Math.max(0, Math.round(value / 1e3) * 1e3);
|
|
143
|
+
return formatDurationCompact(roundedMs, {
|
|
143
144
|
showYears: true,
|
|
144
145
|
spaced: true
|
|
145
146
|
}) ?? "0ms";
|
|
@@ -1326,17 +1327,18 @@ function registerGoogleMeetCli(params) {
|
|
|
1326
1327
|
challenge,
|
|
1327
1328
|
state
|
|
1328
1329
|
});
|
|
1330
|
+
const code = await waitForGoogleMeetAuthCode({
|
|
1331
|
+
state,
|
|
1332
|
+
manual: Boolean(options.manual),
|
|
1333
|
+
timeoutMs: resolveGoogleMeetOAuthCallbackTimeoutMs(options.timeoutSec),
|
|
1334
|
+
authUrl,
|
|
1335
|
+
promptInput,
|
|
1336
|
+
writeLine: (message) => writeStdoutLine("%s", message)
|
|
1337
|
+
});
|
|
1329
1338
|
const tokens = await exchangeGoogleMeetAuthCode({
|
|
1330
1339
|
clientId,
|
|
1331
1340
|
clientSecret,
|
|
1332
|
-
code
|
|
1333
|
-
state,
|
|
1334
|
-
manual: Boolean(options.manual),
|
|
1335
|
-
timeoutMs: resolveGoogleMeetOAuthCallbackTimeoutMs(options.timeoutSec),
|
|
1336
|
-
authUrl,
|
|
1337
|
-
promptInput,
|
|
1338
|
-
writeLine: (message) => writeStdoutLine("%s", message)
|
|
1339
|
-
}),
|
|
1341
|
+
code,
|
|
1340
1342
|
verifier
|
|
1341
1343
|
});
|
|
1342
1344
|
if (!tokens.refreshToken) throw new Error("Google OAuth did not return a refresh token. Re-run the flow with consent and offline access.");
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { h as __exportAll, l as createGoogleMeetSpace } from "./plugin-helpers-
|
|
2
|
-
import { resolveGoogleMeetAccessToken } from "./oauth-
|
|
1
|
+
import { h as __exportAll, l as createGoogleMeetSpace } from "./plugin-helpers-CiAxinMY.js";
|
|
2
|
+
import { resolveGoogleMeetAccessToken } from "./oauth-DgBscjXK.js";
|
|
3
3
|
import { t as createMeetWithBrowserProxyOnNode } from "./chrome-create-PKAyxCiL.js";
|
|
4
4
|
import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
5
5
|
//#region extensions/google-meet/src/create.ts
|
|
@@ -20,7 +20,9 @@ const legacyConfigRules = [{
|
|
|
20
20
|
match: hasLegacyGoogleRealtimeProvider
|
|
21
21
|
}];
|
|
22
22
|
function migrateGoogleMeetLegacyRealtimeProvider(config) {
|
|
23
|
-
const
|
|
23
|
+
const rawEntry = asNullableRecord(config.plugins?.entries?.["google-meet"]);
|
|
24
|
+
const rawPluginConfig = asNullableRecord(rawEntry?.config);
|
|
25
|
+
const rawRealtime = asNullableRecord(rawPluginConfig?.realtime);
|
|
24
26
|
if (!rawRealtime || !hasLegacyGoogleRealtimeProvider(rawRealtime)) return null;
|
|
25
27
|
const nextConfig = structuredClone(config);
|
|
26
28
|
const nextPlugins = asNullableRecord(nextConfig.plugins) ?? {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { readResponseTextLimited } from "openclaw/plugin-sdk/provider-http";
|
|
2
2
|
//#region extensions/google-meet/src/google-api-errors.ts
|
|
3
3
|
const REAUTH_HINT = "Re-run `openclaw googlemeet auth login` and store the refreshed oauth block.";
|
|
4
|
-
const GOOGLE_API_ERROR_BODY_LIMIT_BYTES =
|
|
4
|
+
const GOOGLE_API_ERROR_BODY_LIMIT_BYTES = 8192;
|
|
5
5
|
function scopeText(scopes) {
|
|
6
6
|
return scopes.map((scope) => `\`${scope}\``).join(", ");
|
|
7
7
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as GOOGLE_MEET_CLI_DESCRIPTOR } from "./cli-output-mode-BwH_6tH8.js";
|
|
2
2
|
import { n as GOOGLE_MEET_NODE_COMMAND } from "./google-meet-platform-constants-Bs5iAg3E.js";
|
|
3
3
|
import { r as resolveGoogleMeetConfig } from "./config-wBK8loBb.js";
|
|
4
|
-
import { a as createLazyGoogleMeetNodeInvokePolicy, c as loadGoogleMeetCliModule, d as normalizeMode, f as normalizeTransport, h as shouldJoinCreatedMeet, i as createGoogleMeetRuntimeAccessor, l as loadGoogleMeetNodeHostModule, m as sendGoogleMeetGatewayError, n as assertGoogleMeetAgentToolActionSupported, o as formatGoogleMeetGatewayError, p as resolveMeetingInput, r as callGoogleMeetGatewayFromTool, s as keepTrustedToolAgentId, t as asParamRecord, u as loadGoogleMeetPluginHelpers } from "./plugin-registration-
|
|
4
|
+
import { a as createLazyGoogleMeetNodeInvokePolicy, c as loadGoogleMeetCliModule, d as normalizeMode, f as normalizeTransport, h as shouldJoinCreatedMeet, i as createGoogleMeetRuntimeAccessor, l as loadGoogleMeetNodeHostModule, m as sendGoogleMeetGatewayError, n as assertGoogleMeetAgentToolActionSupported, o as formatGoogleMeetGatewayError, p as resolveMeetingInput, r as callGoogleMeetGatewayFromTool, s as keepTrustedToolAgentId, t as asParamRecord, u as loadGoogleMeetPluginHelpers } from "./plugin-registration-CeQ3RzYT.js";
|
|
5
5
|
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
|
|
6
6
|
import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
7
7
|
import { jsonResult } from "openclaw/plugin-sdk/tool-results";
|
|
@@ -338,7 +338,10 @@ var google_meet_default = definePluginEntry({
|
|
|
338
338
|
case "calendar_events":
|
|
339
339
|
case "artifacts":
|
|
340
340
|
case "attendance": return jsonResult(await queryActions[raw.action](raw));
|
|
341
|
-
case "export":
|
|
341
|
+
case "export": {
|
|
342
|
+
const helpers = await loadGoogleMeetPluginHelpers();
|
|
343
|
+
return jsonResult(await helpers.exportGoogleMeetBundleFromParams(config, raw));
|
|
344
|
+
}
|
|
342
345
|
case "leave":
|
|
343
346
|
case "speak":
|
|
344
347
|
if (!normalizeOptionalString(raw.sessionId)) throw new Error("sessionId required");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as readGoogleApiErrorDetail } from "./google-api-errors-
|
|
1
|
+
import { n as readGoogleApiErrorDetail } from "./google-api-errors-BDYXfKRa.js";
|
|
2
2
|
import { MAX_DATE_TIMESTAMP_MS, resolveDateTimestampMs, resolveExpiresAtMsFromDurationSeconds } from "openclaw/plugin-sdk/number-runtime";
|
|
3
3
|
import { parseOAuthCallbackInput, waitForLocalOAuthCallback } from "openclaw/plugin-sdk/provider-auth-runtime";
|
|
4
4
|
import { readProviderJsonResponse } from "openclaw/plugin-sdk/provider-http";
|
|
@@ -9,7 +9,7 @@ const GOOGLE_MEET_AUTH_URL = "https://accounts.google.com/o/oauth2/v2/auth";
|
|
|
9
9
|
const GOOGLE_MEET_TOKEN_URL = "https://oauth2.googleapis.com/token";
|
|
10
10
|
const GOOGLE_MEET_TOKEN_HOST = "oauth2.googleapis.com";
|
|
11
11
|
const GOOGLE_MEET_DEFAULT_TOKEN_LIFETIME_SECONDS = 3600;
|
|
12
|
-
const GOOGLE_OAUTH_TOKEN_JSON_MAX_BYTES =
|
|
12
|
+
const GOOGLE_OAUTH_TOKEN_JSON_MAX_BYTES = 262144;
|
|
13
13
|
const GOOGLE_OAUTH_REQUEST_TIMEOUT_MS = 3e4;
|
|
14
14
|
const GOOGLE_MEET_SCOPES = [
|
|
15
15
|
"https://www.googleapis.com/auth/meetings.space.created",
|
|
@@ -123,7 +123,8 @@ function isLocalCallbackListenerError(error) {
|
|
|
123
123
|
return error.message.includes("EADDRINUSE") || error.message.includes("port") || error.message.includes("listen");
|
|
124
124
|
}
|
|
125
125
|
async function readManualGoogleMeetAuthCode(params) {
|
|
126
|
-
const
|
|
126
|
+
const input = await params.promptInput("Paste the full redirect URL here: ");
|
|
127
|
+
const parsed = parseOAuthCallbackInput(input, {
|
|
127
128
|
missingState: "Missing 'state' parameter. Paste the full redirect URL.",
|
|
128
129
|
invalidInput: "Paste the full redirect URL, not just the code."
|
|
129
130
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { c as loadGoogleMeetCliModule, p as resolveMeetingInput } from "./plugin-registration-
|
|
2
|
-
import { t as googleApiError } from "./google-api-errors-
|
|
1
|
+
import { c as loadGoogleMeetCliModule, p as resolveMeetingInput } from "./plugin-registration-CeQ3RzYT.js";
|
|
2
|
+
import { t as googleApiError } from "./google-api-errors-BDYXfKRa.js";
|
|
3
3
|
import { t as normalizeMeetUrl } from "./meet-url-BP2Jlvjs.js";
|
|
4
4
|
import { normalizeOptionalString, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
5
5
|
import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
|
|
@@ -87,7 +87,7 @@ function rankCalendarEvent(event, nowMs) {
|
|
|
87
87
|
const endMs = parseCalendarEventTime(event.end) ?? startMs;
|
|
88
88
|
if (startMs <= nowMs && endMs >= nowMs) return 0;
|
|
89
89
|
if (startMs > nowMs) return startMs - nowMs;
|
|
90
|
-
return nowMs - startMs +
|
|
90
|
+
return nowMs - startMs + 2592e6;
|
|
91
91
|
}
|
|
92
92
|
function chooseBestMeetCalendarEvent(events, now) {
|
|
93
93
|
const nowMs = now.getTime();
|
|
@@ -773,7 +773,7 @@ var plugin_helpers_exports = /* @__PURE__ */ __exportAll({
|
|
|
773
773
|
resolveMeetingFromParams: () => resolveMeetingFromParams,
|
|
774
774
|
resolveSpaceFromParams: () => resolveSpaceFromParams
|
|
775
775
|
});
|
|
776
|
-
const loadGoogleMeetCreateModule = createLazyRuntimeModule(() => import("./create-
|
|
776
|
+
const loadGoogleMeetCreateModule = createLazyRuntimeModule(() => import("./create-Da-nAEHY.js").then((n) => n.t));
|
|
777
777
|
async function createMeetFromParams(params) {
|
|
778
778
|
return (await loadGoogleMeetCreateModule()).createMeetFromParams(params);
|
|
779
779
|
}
|
|
@@ -781,7 +781,7 @@ async function createAndJoinMeetFromParams(params) {
|
|
|
781
781
|
return (await loadGoogleMeetCreateModule()).createAndJoinMeetFromParams(params);
|
|
782
782
|
}
|
|
783
783
|
async function resolveGoogleMeetTokenFromParams(config, raw) {
|
|
784
|
-
const { resolveGoogleMeetAccessToken } = await import("./oauth-
|
|
784
|
+
const { resolveGoogleMeetAccessToken } = await import("./oauth-DgBscjXK.js");
|
|
785
785
|
return resolveGoogleMeetAccessToken({
|
|
786
786
|
clientId: normalizeOptionalString(raw.clientId) ?? config.oauth.clientId,
|
|
787
787
|
clientSecret: normalizeOptionalString(raw.clientSecret) ?? config.oauth.clientSecret,
|
|
@@ -4,10 +4,10 @@ import { asNonArrayRecord as asParamRecord, normalizeOptionalString } from "open
|
|
|
4
4
|
import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
|
|
5
5
|
import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
|
|
6
6
|
//#region extensions/google-meet/src/plugin-registration.ts
|
|
7
|
-
const loadGoogleMeetPluginHelpers = createLazyRuntimeModule(() => import("./plugin-helpers-
|
|
8
|
-
const loadGoogleMeetCliModule = createLazyRuntimeModule(() => import("./cli-
|
|
7
|
+
const loadGoogleMeetPluginHelpers = createLazyRuntimeModule(() => import("./plugin-helpers-CiAxinMY.js").then((n) => n.r));
|
|
8
|
+
const loadGoogleMeetCliModule = createLazyRuntimeModule(() => import("./cli-D8EyxtkZ.js"));
|
|
9
9
|
const loadGoogleMeetNodeHostModule = createLazyRuntimeModule(() => import("./node-host-BXtXbsMa.js"));
|
|
10
|
-
const loadGoogleMeetRuntimeModule = createLazyRuntimeModule(() => import("./runtime-
|
|
10
|
+
const loadGoogleMeetRuntimeModule = createLazyRuntimeModule(() => import("./runtime-BP1uG83z.js"));
|
|
11
11
|
const loadGoogleMeetNodeInvokePolicyModule = createLazyRuntimeModule(() => import("./node-invoke-policy-B0gOlLJR.js"));
|
|
12
12
|
const loadGoogleMeetGatewayRuntimeModule = createLazyRuntimeModule(() => import("openclaw/plugin-sdk/gateway-runtime"));
|
|
13
13
|
const loadGoogleMeetNodeInvokePolicy = async (config) => (await loadGoogleMeetNodeInvokePolicyModule()).createGoogleMeetChromeNodeInvokePolicy(config);
|
|
@@ -71,7 +71,8 @@ function resolveUserPath(input) {
|
|
|
71
71
|
}
|
|
72
72
|
function isProviderUnreachableWebhookUrl(webhookUrl) {
|
|
73
73
|
try {
|
|
74
|
-
|
|
74
|
+
const parsed = new URL(webhookUrl);
|
|
75
|
+
return isBlockedHostnameOrIp(parsed.hostname);
|
|
75
76
|
} catch {
|
|
76
77
|
return false;
|
|
77
78
|
}
|
|
@@ -665,11 +666,12 @@ async function launchChromeMeetOnNode(params) {
|
|
|
665
666
|
//#endregion
|
|
666
667
|
//#region extensions/google-meet/src/runtime-setup.ts
|
|
667
668
|
function collectChromeAudioCommands(config) {
|
|
668
|
-
|
|
669
|
+
const commands = config.chrome.audioBridgeCommand ? [config.chrome.audioBridgeCommand[0]] : [
|
|
669
670
|
config.chrome.audioInputCommand?.[0],
|
|
670
671
|
config.chrome.audioOutputCommand?.[0],
|
|
671
672
|
config.chrome.bargeInInputCommand?.[0]
|
|
672
|
-
]
|
|
673
|
+
];
|
|
674
|
+
return uniqueStrings(commands.filter((value) => Boolean(value?.trim())));
|
|
673
675
|
}
|
|
674
676
|
async function commandExists(runtime, command) {
|
|
675
677
|
return (await runtime.system.runCommandWithTimeout([
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const Email = /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[^"\\]
|
|
1
|
+
const Email = /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[^"\\]|\\[\x20-\x7e])*")@(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*|\[(?:IPv6:[a-f0-9:]+|(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(?:\.(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3})\])$/i;
|
|
2
2
|
/**
|
|
3
3
|
* Returns true if the value is an Email
|
|
4
4
|
* @specification https://datatracker.ietf.org/doc/html/rfc5322
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import * as FormatBidi from './format/bidi.mjs';
|
|
2
2
|
import * as LabelUnicode from './label/unicode.mjs';
|
|
3
3
|
import * as LabelPuny from './label/puny.mjs';
|
|
4
|
+
// ------------------------------------------------------------------
|
|
5
|
+
// IsLabel
|
|
6
|
+
// ------------------------------------------------------------------
|
|
4
7
|
function IsValidLabelLength(value) {
|
|
5
8
|
return value.length > 0 && value.length <= 63;
|
|
6
9
|
}
|
|
@@ -8,9 +11,24 @@ function IsLabel(value) {
|
|
|
8
11
|
return IsValidLabelLength(value) && (LabelPuny.IsPunyLabel(value) ||
|
|
9
12
|
LabelUnicode.IsUnicodeLabel(value));
|
|
10
13
|
}
|
|
14
|
+
// ------------------------------------------------------------------
|
|
15
|
+
// NormalizeHostname
|
|
16
|
+
//
|
|
17
|
+
// Normalizes a hostname for label validation. Normalizes for NFC
|
|
18
|
+
// such that equivalent codepoint sequences can be uniformly
|
|
19
|
+
// compared. It also removes codepoints that IDNA mapping ignores,
|
|
20
|
+
// and converts full stop variants to ASCII '.' so the hostname can
|
|
21
|
+
// be split into labels.
|
|
22
|
+
// ------------------------------------------------------------------
|
|
11
23
|
function NormalizeHostname(value) {
|
|
12
|
-
return value
|
|
24
|
+
return value
|
|
25
|
+
.normalize('NFC')
|
|
26
|
+
.replace(/[\u00ad\u034f\u180b-\u180d\u200b\ufe00-\ufe0f\u{e0100}-\u{e01ef}]/gu, '') // RE_IGNORED_MAPPING
|
|
27
|
+
.replace(/[\u002E\u3002\uFF0E\uFF61]/g, '.'); // RE_FULL_STOP_MAPPING
|
|
13
28
|
}
|
|
29
|
+
// ------------------------------------------------------------------
|
|
30
|
+
// IsIdnHostname
|
|
31
|
+
// ------------------------------------------------------------------
|
|
14
32
|
export function IsIdnHostname(value) {
|
|
15
33
|
if (value.length === 0 || value.includes(' '))
|
|
16
34
|
return false;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/google-meet",
|
|
3
|
-
"version": "2026.8.
|
|
3
|
+
"version": "2026.8.2",
|
|
4
4
|
"description": "OpenClaw Google Meet participant plugin for joining calls through Chrome or Twilio transports.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
"type": "module",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"jszip": "3.10.1",
|
|
12
|
-
"typebox": "1.3.
|
|
12
|
+
"typebox": "1.3.17"
|
|
13
13
|
},
|
|
14
14
|
"peerDependencies": {
|
|
15
|
-
"openclaw": ">=2026.8.
|
|
15
|
+
"openclaw": ">=2026.8.2"
|
|
16
16
|
},
|
|
17
17
|
"peerDependenciesMeta": {
|
|
18
18
|
"openclaw": {
|
|
@@ -29,10 +29,10 @@
|
|
|
29
29
|
"minHostVersion": ">=2026.4.20"
|
|
30
30
|
},
|
|
31
31
|
"compat": {
|
|
32
|
-
"pluginApi": ">=2026.8.
|
|
32
|
+
"pluginApi": ">=2026.8.2"
|
|
33
33
|
},
|
|
34
34
|
"build": {
|
|
35
|
-
"openclawVersion": "2026.8.
|
|
35
|
+
"openclawVersion": "2026.8.2"
|
|
36
36
|
},
|
|
37
37
|
"release": {
|
|
38
38
|
"publishToClawHub": true,
|