@openclaw/line 2026.10.5-beta.4 → 2026.10.10-beta.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/.setup/{api-DPd9f0cI.mjs → api-CO1TnHKG.mjs} +1 -1
- package/dist/.setup/api-DPxiB9eZ.mjs +3 -0
- package/dist/.setup/{channel-DVuSrT_i.mjs → channel-CybGPFDZ.mjs} +21 -39
- package/dist/.setup/{channel.runtime-IN_F95BO.mjs → channel.runtime-IdkB6yvc.mjs} +1 -1
- package/dist/.setup/{monitor-BY32s5Um.mjs → monitor-2NNRm8hi.mjs} +8 -33
- package/dist/.setup/monitor.runtime-DaSymO_N.mjs +1 -0
- package/dist/.setup/{outbound.runtime-DLyndDng.mjs → outbound.runtime-BJL2119X.mjs} +1 -1
- package/dist/.setup/probe.runtime-DaGwztSg.mjs +1 -0
- package/dist/.setup/{template-messages-CwPsGQjw.mjs → template-messages-COcdie6C.mjs} +2 -8
- package/dist/api.js +2 -2
- package/dist/channel-plugin-api.js +1 -2
- package/dist/contract-api.js +1 -2
- package/dist/doctor-contract-api.js +3 -3
- package/dist/runtime-api.js +1 -2
- package/dist/setup-api.js +1 -2
- package/dist/setup-entry.js +1 -1
- package/node_modules/typebox/build/value/clean/from_object.mjs +1 -1
- package/node_modules/typebox/package.json +1 -1
- package/package.json +5 -5
- package/dist/.setup/api-BxKwG8cd.mjs +0 -3
- package/dist/.setup/monitor.runtime-DKuc2SBe.mjs +0 -2
- package/dist/.setup/probe.runtime-D2MUF_B_.mjs +0 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { l as lineChannelPluginCommon } from "./channel-
|
|
1
|
+
import { l as lineChannelPluginCommon } from "./channel-CybGPFDZ.mjs";
|
|
2
2
|
import { r as lineSetupContract, t as lineSetupWizard } from "./setup-surface-CYd8oqzt.mjs";
|
|
3
3
|
//#region extensions/line/src/channel.setup.ts
|
|
4
4
|
const lineSetupPlugin = {
|
|
@@ -17,7 +17,7 @@ import { requireChannelOpenAllowFrom } from "openclaw/plugin-sdk/extension-share
|
|
|
17
17
|
import { z } from "zod";
|
|
18
18
|
import { parseAccessGroupAllowFromEntry } from "openclaw/plugin-sdk/access-groups";
|
|
19
19
|
import { firstDefined } from "openclaw/plugin-sdk/allow-from";
|
|
20
|
-
import { createAccountStatusSink,
|
|
20
|
+
import { createAccountStatusSink, createChannelMessageAdapterFromOutbound, createMessageReceiptFromOutboundResults, listMessageReceiptPlatformIds } from "openclaw/plugin-sdk/channel-outbound";
|
|
21
21
|
import { buildTokenChannelStatusSummary, collectIssuesForEnabledAccounts, createComputedAccountStatusAdapter, createDefaultChannelRuntimeState, createDependentCredentialStatusIssueCollector } from "openclaw/plugin-sdk/status-helpers";
|
|
22
22
|
import { createChannelPartialDeliveryError, isChannelPartialDeliveryError } from "openclaw/plugin-sdk/channel-inbound";
|
|
23
23
|
import { createAttachedChannelResultAdapter, createEmptyChannelResult } from "openclaw/plugin-sdk/channel-send-result";
|
|
@@ -362,7 +362,7 @@ const lineStatusAdapter = createComputedAccountStatusAdapter({
|
|
|
362
362
|
defaultRuntime: createDefaultChannelRuntimeState(DEFAULT_ACCOUNT_ID),
|
|
363
363
|
collectStatusIssues: (accounts) => [...collectLineCredentialIssues(accounts), ...collectLineWebhookIssues(accounts)],
|
|
364
364
|
buildChannelSummary: ({ snapshot }) => buildTokenChannelStatusSummary(snapshot),
|
|
365
|
-
probeAccount: async ({ account, timeoutMs }) => await (await import("./probe.runtime-
|
|
365
|
+
probeAccount: async ({ account, timeoutMs }) => await (await import("./probe.runtime-DaGwztSg.mjs")).probeLineBot(account.channelAccessToken, timeoutMs),
|
|
366
366
|
resolveAccountSnapshot: ({ account, probe }) => ({
|
|
367
367
|
accountId: account.accountId,
|
|
368
368
|
name: account.name,
|
|
@@ -394,7 +394,7 @@ const lineGatewayAdapter = {
|
|
|
394
394
|
statusSink({ lifecycle: "starting" });
|
|
395
395
|
let lineBotLabel = "";
|
|
396
396
|
try {
|
|
397
|
-
const probe = await (await import("./probe.runtime-
|
|
397
|
+
const probe = await (await import("./probe.runtime-DaGwztSg.mjs")).probeLineBot(token, 2500);
|
|
398
398
|
const displayName = probe.ok ? probe.bot?.displayName?.trim() : null;
|
|
399
399
|
if (displayName) lineBotLabel = ` (${displayName})`;
|
|
400
400
|
const delivery = describeLineWebhookDelivery({ webhook: probe.ok ? probe.webhook : void 0 });
|
|
@@ -403,7 +403,7 @@ const lineGatewayAdapter = {
|
|
|
403
403
|
if (getLineRuntime().logging.shouldLogVerbose()) ctx.log?.debug?.(`[${account.accountId}] bot check failed: ${String(err)}`);
|
|
404
404
|
}
|
|
405
405
|
ctx.log?.info(`[${account.accountId}] starting LINE provider${lineBotLabel}`);
|
|
406
|
-
const { monitorLineProvider } = await import("./monitor.runtime-
|
|
406
|
+
const { monitorLineProvider } = await import("./monitor.runtime-DaSymO_N.mjs");
|
|
407
407
|
return await monitorLineProvider({
|
|
408
408
|
channelAccessToken: token,
|
|
409
409
|
channelSecret: secret,
|
|
@@ -1043,7 +1043,7 @@ function createLineQuickReply(items) {
|
|
|
1043
1043
|
}
|
|
1044
1044
|
//#endregion
|
|
1045
1045
|
//#region extensions/line/src/outbound.ts
|
|
1046
|
-
const loadLineOutboundRuntime = createLazyRuntimeModule(() => import("./outbound.runtime-
|
|
1046
|
+
const loadLineOutboundRuntime = createLazyRuntimeModule(() => import("./outbound.runtime-BJL2119X.mjs"));
|
|
1047
1047
|
function quotedOption(quoteToken) {
|
|
1048
1048
|
return quoteToken ? { quoteToken } : {};
|
|
1049
1049
|
}
|
|
@@ -1267,44 +1267,26 @@ const lineOutboundAdapter = {
|
|
|
1267
1267
|
})
|
|
1268
1268
|
})
|
|
1269
1269
|
};
|
|
1270
|
-
|
|
1271
|
-
const { receipt } = result;
|
|
1272
|
-
if (!receipt) throw new Error("LINE message adapter send did not return a receipt");
|
|
1273
|
-
return {
|
|
1274
|
-
messageId: result.messageId || receipt.primaryPlatformMessageId,
|
|
1275
|
-
receipt
|
|
1276
|
-
};
|
|
1277
|
-
}
|
|
1278
|
-
const lineMessageAdapter = defineChannelMessageAdapter({
|
|
1270
|
+
const lineMessageAdapter = createChannelMessageAdapterFromOutbound({
|
|
1279
1271
|
id: "line",
|
|
1280
|
-
|
|
1272
|
+
capabilities: {
|
|
1281
1273
|
text: true,
|
|
1282
1274
|
media: true,
|
|
1283
1275
|
replyTo: true,
|
|
1284
1276
|
messageSendingHooks: true
|
|
1285
|
-
}
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
...ctx,
|
|
1299
|
-
payload: {
|
|
1300
|
-
text: ctx.text,
|
|
1301
|
-
mediaUrl: ctx.mediaUrl
|
|
1302
|
-
},
|
|
1303
|
-
onDeliveryResult: async (deliveryResult) => {
|
|
1304
|
-
await onDeliveryResult?.(toLineMessageSendResult(deliveryResult));
|
|
1305
|
-
}
|
|
1306
|
-
}));
|
|
1307
|
-
}
|
|
1277
|
+
},
|
|
1278
|
+
outbound: {
|
|
1279
|
+
sendText: (ctx) => lineOutboundAdapter.sendPayload({
|
|
1280
|
+
...ctx,
|
|
1281
|
+
payload: { text: ctx.text }
|
|
1282
|
+
}),
|
|
1283
|
+
sendMedia: (ctx) => lineOutboundAdapter.sendPayload({
|
|
1284
|
+
...ctx,
|
|
1285
|
+
payload: {
|
|
1286
|
+
text: ctx.text,
|
|
1287
|
+
mediaUrl: ctx.mediaUrl
|
|
1288
|
+
}
|
|
1289
|
+
})
|
|
1308
1290
|
},
|
|
1309
1291
|
receive: {
|
|
1310
1292
|
defaultAckPolicy: "after_receive_record",
|
|
@@ -1313,7 +1295,7 @@ const lineMessageAdapter = defineChannelMessageAdapter({
|
|
|
1313
1295
|
});
|
|
1314
1296
|
//#endregion
|
|
1315
1297
|
//#region extensions/line/src/channel.ts
|
|
1316
|
-
const loadLineChannelRuntime = createLazyRuntimeModule(() => import("./channel.runtime-
|
|
1298
|
+
const loadLineChannelRuntime = createLazyRuntimeModule(() => import("./channel.runtime-IdkB6yvc.mjs"));
|
|
1317
1299
|
const lineSecurityAdapter = createRestrictSendersChannelSecurity({
|
|
1318
1300
|
channelKey: "line",
|
|
1319
1301
|
resolveDmPolicy: (account) => account.config.dmPolicy,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { a as probeLineBot } from "./send-retry-Dzbkz5wG.mjs";
|
|
2
2
|
import { l as pushMessageLine, m as showLoadingAnimation } from "./send-g4gFsc9W.mjs";
|
|
3
|
-
import { t as monitorLineProvider } from "./monitor-
|
|
3
|
+
import { t as monitorLineProvider } from "./monitor-2NNRm8hi.mjs";
|
|
4
4
|
export { monitorLineProvider, probeLineBot, pushMessageLine, showLoadingAnimation };
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { n as resolveDefaultLineAccountId, r as resolveLineAccount } from "./accounts-DOiM8-y3.mjs";
|
|
2
|
-
import { a as parseLineQuestionPostbackData, c as resolveLineGroupConfigEntry, i as isLineQuestionPostbackData, n as createLineQuickReply, o as resolveLineQuestionPostback, r as prepareLineReplyPayload, s as buildLineQuickReplyFallbackText } from "./channel-
|
|
2
|
+
import { a as parseLineQuestionPostbackData, c as resolveLineGroupConfigEntry, i as isLineQuestionPostbackData, n as createLineQuickReply, o as resolveLineQuestionPostback, r as prepareLineReplyPayload, s as buildLineQuickReplyFallbackText } from "./channel-CybGPFDZ.mjs";
|
|
3
3
|
import { a as normalizeLineAllowEntry } from "./setup-surface-CYd8oqzt.mjs";
|
|
4
4
|
import { t as getLineRuntime } from "./runtime-V7yh9OeC.mjs";
|
|
5
5
|
import { A as resolveLineQuoteToken, D as readLineQuoteToken, E as canCarryLineQuoteToken, M as buildLineMediaMessage, O as recordLineQuoteToken, T as applyLineQuoteToken, k as reportLineQuoteCarrierMissing, n as findLineHttpError, r as resolveLineNonDispatchRetryable, t as explainLineRefusal } from "./send-retry-Dzbkz5wG.mjs";
|
|
6
6
|
import { a as laneKeyFor, i as eventIdFor, n as LINE_WEBHOOK_SPOOL_INVALID_PAYLOAD_MESSAGE, r as LineWebhookPayloadError, t as LINE_WEBHOOK_SPOOL_INVALID_EVENT_REASON } from "./webhook-spool-contract-msjTl60Q.mjs";
|
|
7
7
|
import { a as getUserDisplayName, h as quotesLineBotMessage, i as getLineGroupName, l as pushMessageLine, m as showLoadingAnimation, n as createLocationMessage, o as getUserProfile, p as replyMessageLine, t as createFlexMessage, u as pushMessagesLine } from "./send-g4gFsc9W.mjs";
|
|
8
|
-
import { n as processLineMessage, t as buildTemplateMessageFromPayload } from "./template-messages-
|
|
8
|
+
import { n as processLineMessage, t as buildTemplateMessageFromPayload } from "./template-messages-COcdie6C.mjs";
|
|
9
9
|
import { createChannelPairingChallengeIssuer } from "openclaw/plugin-sdk/channel-pairing";
|
|
10
10
|
import { resolveChannelGroupsConfigPath } from "openclaw/plugin-sdk/channel-policy";
|
|
11
11
|
import { normalizeOptionalString, normalizeStringEntries, readNonEmptyStringPreservingWhitespace } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
@@ -17,7 +17,7 @@ import { collectErrorGraphCandidates, extractErrorCode, formatErrorMessage, read
|
|
|
17
17
|
import { resolveSendableOutboundReplyParts } from "openclaw/plugin-sdk/reply-payload";
|
|
18
18
|
import { sanitizeAssistantVisibleText } from "openclaw/plugin-sdk/text-chunking";
|
|
19
19
|
import { danger, logVerbose, shouldLogVerbose, waitForAbortSignal, warn } from "openclaw/plugin-sdk/runtime-env";
|
|
20
|
-
import { safeParseJson
|
|
20
|
+
import { safeParseJson } from "openclaw/plugin-sdk/text-utility-runtime";
|
|
21
21
|
import { classifyTransientNetworkErrorCode } from "openclaw/plugin-sdk/retry-runtime";
|
|
22
22
|
import { fetchWithRuntimeDispatcherOrMockedGlobal } from "openclaw/plugin-sdk/runtime-fetch";
|
|
23
23
|
import { expectDefined } from "openclaw/plugin-sdk/expect-runtime";
|
|
@@ -58,19 +58,11 @@ function canFallbackAfterLineReplyFailure(error) {
|
|
|
58
58
|
}
|
|
59
59
|
function markLineVisibleDeliveryError(error) {
|
|
60
60
|
const deliveryError = toLineDeliveryError(error);
|
|
61
|
-
|
|
62
|
-
Object.assign(deliveryError, {
|
|
63
|
-
sentBeforeError: true,
|
|
64
|
-
visibleReplySent: true
|
|
65
|
-
});
|
|
66
|
-
return deliveryError;
|
|
67
|
-
}
|
|
68
|
-
const visibleError = new Error("LINE message send failed", { cause: deliveryError });
|
|
69
|
-
Object.assign(visibleError, {
|
|
61
|
+
Object.assign(deliveryError, {
|
|
70
62
|
sentBeforeError: true,
|
|
71
63
|
visibleReplySent: true
|
|
72
64
|
});
|
|
73
|
-
return
|
|
65
|
+
return deliveryError;
|
|
74
66
|
}
|
|
75
67
|
async function deliverLineAutoReply(params) {
|
|
76
68
|
const { payload, lineData, replyToken, accountId, to, textLimit } = params;
|
|
@@ -290,16 +282,9 @@ function getLineSourceInfo(source) {
|
|
|
290
282
|
isGroup: source.type === "group" || source.type === "room"
|
|
291
283
|
};
|
|
292
284
|
}
|
|
293
|
-
function buildPeerId(source) {
|
|
294
|
-
if (!source) return "unknown";
|
|
295
|
-
const groupKey = normalizeOptionalString(source.type === "group" ? source.groupId : void 0) ?? normalizeOptionalString(source.type === "room" ? source.roomId : void 0);
|
|
296
|
-
if (groupKey) return groupKey;
|
|
297
|
-
if (source.type === "user" && source.userId) return source.userId;
|
|
298
|
-
return "unknown";
|
|
299
|
-
}
|
|
300
285
|
async function prepareLineInboundRoute(params) {
|
|
301
286
|
const { userId, groupId, roomId, isGroup } = getLineSourceInfo(params.source);
|
|
302
|
-
const peerId =
|
|
287
|
+
const peerId = normalizeOptionalString(groupId ?? roomId) ?? (!isGroup && userId ? userId : "unknown");
|
|
303
288
|
const routeInput = {
|
|
304
289
|
channel: "line",
|
|
305
290
|
accountId: params.account.accountId,
|
|
@@ -509,10 +494,9 @@ async function finalizeLineInboundContext(params) {
|
|
|
509
494
|
sessionKey: params.route.sessionKey
|
|
510
495
|
});
|
|
511
496
|
if (shouldLogVerbose()) {
|
|
512
|
-
const preview = truncateUtf16Safe(body, 200).replace(/\n/g, "\\n");
|
|
513
497
|
const mediaInfo = params.verboseLog.kind === "inbound" && (params.verboseLog.mediaCount ?? 0) > 1 ? ` mediaCount=${params.verboseLog.mediaCount}` : "";
|
|
514
498
|
const label = params.verboseLog.kind === "inbound" ? "line inbound" : "line postback";
|
|
515
|
-
logVerbose(`${label}: from=${ctxPayload.From} len=${body.length}${mediaInfo}
|
|
499
|
+
logVerbose(`${label}: from=${ctxPayload.From} len=${body.length}${mediaInfo}`);
|
|
516
500
|
}
|
|
517
501
|
return {
|
|
518
502
|
ctxPayload,
|
|
@@ -1773,9 +1757,7 @@ function resolveLineWebhookPath(webhookPath) {
|
|
|
1773
1757
|
const lineWebhookInFlightLimiter = createWebhookInFlightLimiter();
|
|
1774
1758
|
const lineWebhookTargets = /* @__PURE__ */ new Map();
|
|
1775
1759
|
function startLineLoadingKeepalive(params) {
|
|
1776
|
-
let stopped = false;
|
|
1777
1760
|
const trigger = () => {
|
|
1778
|
-
if (stopped) return;
|
|
1779
1761
|
showLoadingAnimation(params.userId, {
|
|
1780
1762
|
cfg: params.cfg,
|
|
1781
1763
|
accountId: params.accountId,
|
|
@@ -1784,11 +1766,7 @@ function startLineLoadingKeepalive(params) {
|
|
|
1784
1766
|
};
|
|
1785
1767
|
trigger();
|
|
1786
1768
|
const timer = setInterval(trigger, 18e3);
|
|
1787
|
-
return () =>
|
|
1788
|
-
if (stopped) return;
|
|
1789
|
-
stopped = true;
|
|
1790
|
-
clearInterval(timer);
|
|
1791
|
-
};
|
|
1769
|
+
return () => clearInterval(timer);
|
|
1792
1770
|
}
|
|
1793
1771
|
async function monitorLineProvider(opts) {
|
|
1794
1772
|
const { channelAccessToken, channelSecret, accountId, config, runtime, buildContext, abortSignal, webhookPath, statusSink } = opts;
|
|
@@ -1958,12 +1936,9 @@ async function monitorLineProvider(opts) {
|
|
|
1958
1936
|
}
|
|
1959
1937
|
logVerbose(`line: registered webhook handler at ${normalizedPath}`);
|
|
1960
1938
|
statusSink?.(channelReadyPatch());
|
|
1961
|
-
let stopped = false;
|
|
1962
1939
|
let stopPromise;
|
|
1963
1940
|
const stopHandler = () => {
|
|
1964
1941
|
if (stopPromise) return stopPromise;
|
|
1965
|
-
if (stopped) return Promise.resolve();
|
|
1966
|
-
stopped = true;
|
|
1967
1942
|
logVerbose(`line: stopping provider for account ${resolvedAccountId}`);
|
|
1968
1943
|
unregisterHttp();
|
|
1969
1944
|
stopPromise = bot.stop().finally(() => {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { t as monitorLineProvider } from "./monitor-2NNRm8hi.mjs";
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { c as pushLocationMessage, d as pushTemplateMessage, f as pushTextMessageWithQuickReplies, l as pushMessageLine, n as createLocationMessage, r as createQuickReplyItems, s as pushFlexMessage, t as createFlexMessage, u as pushMessagesLine } from "./send-g4gFsc9W.mjs";
|
|
2
|
-
import { n as processLineMessage, t as buildTemplateMessageFromPayload } from "./template-messages-
|
|
2
|
+
import { n as processLineMessage, t as buildTemplateMessageFromPayload } from "./template-messages-COcdie6C.mjs";
|
|
3
3
|
export { buildTemplateMessageFromPayload, createFlexMessage, createLocationMessage, createQuickReplyItems, processLineMessage, pushFlexMessage, pushLocationMessage, pushMessageLine, pushMessagesLine, pushTemplateMessage, pushTextMessageWithQuickReplies };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { a as probeLineBot } from "./send-retry-Dzbkz5wG.mjs";
|
|
@@ -324,12 +324,6 @@ function getGraphemeSegmenter() {
|
|
|
324
324
|
graphemeSegmenter ??= new Intl.Segmenter(void 0, { granularity: "grapheme" });
|
|
325
325
|
return graphemeSegmenter;
|
|
326
326
|
}
|
|
327
|
-
/** Uses the same source text that created segments. */
|
|
328
|
-
function containingSegment(segments, text, index) {
|
|
329
|
-
const position = Number.isNaN(index) ? 0 : Math.trunc(index);
|
|
330
|
-
const codePoint = text.codePointAt(position);
|
|
331
|
-
return segments.containing(codePoint !== void 0 && codePoint > 65535 ? position + 1 : position);
|
|
332
|
-
}
|
|
333
327
|
/**
|
|
334
328
|
* Chooses a whole-grapheme cut within the hard budget, honoring a usable preference.
|
|
335
329
|
* If no whole grapheme fits, allowPartial permits a surrogate-safe progress cut;
|
|
@@ -344,8 +338,8 @@ function findGraphemeChunkEnd(text, start, maxEnd, preferredEnd = maxEnd, allowP
|
|
|
344
338
|
const after = text.charCodeAt(preferred);
|
|
345
339
|
if (Number.isInteger(preferred) && before <= 127 && after <= 127 && !(before === 13 && after === 10)) return preferred;
|
|
346
340
|
const segments = getGraphemeSegmenter().segment(text);
|
|
347
|
-
let end =
|
|
348
|
-
if (end <= start && preferred < hardEnd) end = hardEnd === text.length ? hardEnd :
|
|
341
|
+
let end = segments.containing(preferred)?.index ?? preferred;
|
|
342
|
+
if (end <= start && preferred < hardEnd) end = hardEnd === text.length ? hardEnd : segments.containing(hardEnd)?.index ?? hardEnd;
|
|
349
343
|
return end > start ? end : allowPartial ? avoidTrailingHighSurrogateBreak(text, start, hardEnd) : start;
|
|
350
344
|
}
|
|
351
345
|
//#endregion
|
package/dist/api.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { t as linePlugin } from "./.setup/channel-
|
|
2
|
-
import { t as lineSetupPlugin } from "./.setup/api-
|
|
1
|
+
import { t as linePlugin } from "./.setup/channel-CybGPFDZ.mjs";
|
|
2
|
+
import { t as lineSetupPlugin } from "./.setup/api-CO1TnHKG.mjs";
|
|
3
3
|
export { linePlugin, lineSetupPlugin };
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { linePlugin };
|
|
1
|
+
export { t as linePlugin } from "./.setup/channel-CybGPFDZ.mjs";
|
package/dist/contract-api.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { listLineAccountIds, resolveDefaultLineAccountId, resolveLineAccount };
|
|
1
|
+
export { t as listLineAccountIds, n as resolveDefaultLineAccountId, r as resolveLineAccount } from "./.setup/accounts-DOiM8-y3.mjs";
|
|
@@ -110,7 +110,7 @@ const stateMigrations = [{
|
|
|
110
110
|
const preview = [];
|
|
111
111
|
for (const accountId of await spool.listChannelIngressQueueAccountIds()) {
|
|
112
112
|
const count = await countLegacySpoolRows(spool.openChannelIngressQueueForInspection({ accountId }));
|
|
113
|
-
if (count > 0) preview.push(`- LINE pre-drain spool rows (account "${accountId}"): ${count} row(s) ->
|
|
113
|
+
if (count > 0) preview.push(`- LINE pre-drain spool rows (account "${accountId}"): ${count} row(s) -> current ingress format`);
|
|
114
114
|
}
|
|
115
115
|
return preview.length > 0 ? { preview } : null;
|
|
116
116
|
},
|
|
@@ -126,9 +126,9 @@ const stateMigrations = [{
|
|
|
126
126
|
const result = await migrateLineLegacySpoolRows(openForMigration({ accountId }));
|
|
127
127
|
if (result.migrated > 0 || result.reconciled > 0 || result.deadLettered > 0 || result.recovered > 0) {
|
|
128
128
|
const recovered = result.recovered > 0 ? ` (${result.recovered} recovered from the dead-letter table)` : "";
|
|
129
|
-
const reconciled = result.reconciled > 0 ? `, ${result.reconciled} already settled under the
|
|
129
|
+
const reconciled = result.reconciled > 0 ? `, ${result.reconciled} already settled under the current ID` : "";
|
|
130
130
|
const dispatchNote = configuredAccountIds.has(accountId) ? "" : ` (account not currently configured, so these stay queued until it is restored)`;
|
|
131
|
-
changes.push(`Migrated LINE pre-drain spool rows (account "${accountId}"): ${result.migrated} queued under the
|
|
131
|
+
changes.push(`Migrated LINE pre-drain spool rows (account "${accountId}"): ${result.migrated} queued under the current format, ${result.deadLettered} dead-lettered at the identity fence${reconciled}${recovered}${dispatchNote}`);
|
|
132
132
|
}
|
|
133
133
|
for (const failure of result.failures) warnings.push(`Failed migrating a LINE pre-drain spool row (account "${accountId}", ${failure}); the row stays pending and the migration retries on the next run`);
|
|
134
134
|
}
|
package/dist/runtime-api.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { setLineRuntime };
|
|
1
|
+
export { n as setLineRuntime } from "./.setup/runtime-V7yh9OeC.mjs";
|
package/dist/setup-api.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { lineSetupAdapter, lineSetupWizard };
|
|
1
|
+
export { n as lineSetupAdapter, t as lineSetupWizard } from "./.setup/setup-surface-CYd8oqzt.mjs";
|
package/dist/setup-entry.js
CHANGED
|
@@ -4,7 +4,7 @@ import { fileURLToPath } from "node:url";
|
|
|
4
4
|
var setup_entry_default = defineBundledChannelSetupEntry({
|
|
5
5
|
importMetaUrl: import.meta.url,
|
|
6
6
|
plugin: {
|
|
7
|
-
specifier: fileURLToPath(new URL(".setup/api-
|
|
7
|
+
specifier: fileURLToPath(new URL(".setup/api-DPxiB9eZ.mjs", import.meta.url).href),
|
|
8
8
|
exportName: "lineSetupPlugin"
|
|
9
9
|
}
|
|
10
10
|
});
|
|
@@ -12,7 +12,7 @@ export function FromObject(context, type, value) {
|
|
|
12
12
|
return value;
|
|
13
13
|
const additionalProperties = GetAdditionalProperties(type);
|
|
14
14
|
for (const key of Guard.Keys(value)) {
|
|
15
|
-
if (Guard.HasPropertyKey(type.properties, key)) {
|
|
15
|
+
if (Guard.HasPropertyKey(type.properties, key) && IsSchema(type.properties[key])) {
|
|
16
16
|
value[key] = FromType(context, type.properties[key], value[key]);
|
|
17
17
|
continue;
|
|
18
18
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/line",
|
|
3
|
-
"version": "2026.10.
|
|
3
|
+
"version": "2026.10.10-beta.2",
|
|
4
4
|
"description": "OpenClaw LINE channel plugin for LINE Bot API chats.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -9,11 +9,11 @@
|
|
|
9
9
|
"type": "module",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@line/bot-sdk": "11.3.0",
|
|
12
|
-
"typebox": "1.3.
|
|
12
|
+
"typebox": "1.3.35",
|
|
13
13
|
"zod": "4.6.5"
|
|
14
14
|
},
|
|
15
15
|
"peerDependencies": {
|
|
16
|
-
"openclaw": ">=2026.10.
|
|
16
|
+
"openclaw": ">=2026.10.10-beta.2"
|
|
17
17
|
},
|
|
18
18
|
"peerDependenciesMeta": {
|
|
19
19
|
"openclaw": {
|
|
@@ -122,10 +122,10 @@
|
|
|
122
122
|
"minHostVersion": ">=2026.4.10"
|
|
123
123
|
},
|
|
124
124
|
"compat": {
|
|
125
|
-
"pluginApi": ">=2026.10.
|
|
125
|
+
"pluginApi": ">=2026.10.10-beta.2"
|
|
126
126
|
},
|
|
127
127
|
"build": {
|
|
128
|
-
"openclawVersion": "2026.10.
|
|
128
|
+
"openclawVersion": "2026.10.10-beta.2"
|
|
129
129
|
},
|
|
130
130
|
"release": {
|
|
131
131
|
"publishToClawHub": true,
|