larkway 0.3.54 → 0.3.55
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/README.md +1 -1
- package/README.zh.md +1 -1
- package/dist/cli/index.js +5 -4
- package/dist/main.js +20 -8
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
You @ the bot in a Feishu thread. It runs on your machine — reading your real codebase, executing commands, opening MRs — and posts the result back. You define what the agent knows and what it can do. Larkway just carries the messages.
|
|
10
10
|
|
|
11
|
-
**Current release: v0.3.
|
|
11
|
+
**Current release: v0.3.55**
|
|
12
12
|
|
|
13
13
|
---
|
|
14
14
|
|
package/README.zh.md
CHANGED
package/dist/cli/index.js
CHANGED
|
@@ -20593,7 +20593,7 @@ var require_websocket = __commonJS({
|
|
|
20593
20593
|
var http2 = __require("http");
|
|
20594
20594
|
var net = __require("net");
|
|
20595
20595
|
var tls = __require("tls");
|
|
20596
|
-
var { randomBytes: randomBytes2, createHash:
|
|
20596
|
+
var { randomBytes: randomBytes2, createHash: createHash3 } = __require("crypto");
|
|
20597
20597
|
var { Duplex, Readable } = __require("stream");
|
|
20598
20598
|
var { URL: URL2 } = __require("url");
|
|
20599
20599
|
var PerMessageDeflate = require_permessage_deflate();
|
|
@@ -21261,7 +21261,7 @@ var require_websocket = __commonJS({
|
|
|
21261
21261
|
abortHandshake(websocket, socket, "Invalid Upgrade header");
|
|
21262
21262
|
return;
|
|
21263
21263
|
}
|
|
21264
|
-
const digest =
|
|
21264
|
+
const digest = createHash3("sha1").update(key + GUID).digest("base64");
|
|
21265
21265
|
if (res.headers["sec-websocket-accept"] !== digest) {
|
|
21266
21266
|
abortHandshake(websocket, socket, "Invalid Sec-WebSocket-Accept header");
|
|
21267
21267
|
return;
|
|
@@ -21630,7 +21630,7 @@ var require_websocket_server = __commonJS({
|
|
|
21630
21630
|
var EventEmitter = __require("events");
|
|
21631
21631
|
var http2 = __require("http");
|
|
21632
21632
|
var { Duplex } = __require("stream");
|
|
21633
|
-
var { createHash:
|
|
21633
|
+
var { createHash: createHash3 } = __require("crypto");
|
|
21634
21634
|
var extension = require_extension();
|
|
21635
21635
|
var PerMessageDeflate = require_permessage_deflate();
|
|
21636
21636
|
var subprotocol = require_subprotocol();
|
|
@@ -21937,7 +21937,7 @@ var require_websocket_server = __commonJS({
|
|
|
21937
21937
|
);
|
|
21938
21938
|
}
|
|
21939
21939
|
if (this._state > RUNNING) return abortHandshake(socket, 503);
|
|
21940
|
-
const digest =
|
|
21940
|
+
const digest = createHash3("sha1").update(key + GUID).digest("base64");
|
|
21941
21941
|
const headers = [
|
|
21942
21942
|
"HTTP/1.1 101 Switching Protocols",
|
|
21943
21943
|
"Upgrade: websocket",
|
|
@@ -107881,6 +107881,7 @@ var init_channelCardKitClient = __esm({
|
|
|
107881
107881
|
});
|
|
107882
107882
|
|
|
107883
107883
|
// src/lark/outboundPostClient.ts
|
|
107884
|
+
import { createHash as createHash2 } from "node:crypto";
|
|
107884
107885
|
function numericStatus(err2) {
|
|
107885
107886
|
if (!err2 || typeof err2 !== "object") return void 0;
|
|
107886
107887
|
const rec = err2;
|
package/dist/main.js
CHANGED
|
@@ -20145,7 +20145,7 @@ var require_websocket = __commonJS({
|
|
|
20145
20145
|
var http = __require("http");
|
|
20146
20146
|
var net = __require("net");
|
|
20147
20147
|
var tls = __require("tls");
|
|
20148
|
-
var { randomBytes, createHash:
|
|
20148
|
+
var { randomBytes, createHash: createHash4 } = __require("crypto");
|
|
20149
20149
|
var { Duplex, Readable } = __require("stream");
|
|
20150
20150
|
var { URL: URL2 } = __require("url");
|
|
20151
20151
|
var PerMessageDeflate = require_permessage_deflate();
|
|
@@ -20813,7 +20813,7 @@ var require_websocket = __commonJS({
|
|
|
20813
20813
|
abortHandshake(websocket, socket, "Invalid Upgrade header");
|
|
20814
20814
|
return;
|
|
20815
20815
|
}
|
|
20816
|
-
const digest =
|
|
20816
|
+
const digest = createHash4("sha1").update(key + GUID).digest("base64");
|
|
20817
20817
|
if (res.headers["sec-websocket-accept"] !== digest) {
|
|
20818
20818
|
abortHandshake(websocket, socket, "Invalid Sec-WebSocket-Accept header");
|
|
20819
20819
|
return;
|
|
@@ -21182,7 +21182,7 @@ var require_websocket_server = __commonJS({
|
|
|
21182
21182
|
var EventEmitter = __require("events");
|
|
21183
21183
|
var http = __require("http");
|
|
21184
21184
|
var { Duplex } = __require("stream");
|
|
21185
|
-
var { createHash:
|
|
21185
|
+
var { createHash: createHash4 } = __require("crypto");
|
|
21186
21186
|
var extension = require_extension();
|
|
21187
21187
|
var PerMessageDeflate = require_permessage_deflate();
|
|
21188
21188
|
var subprotocol = require_subprotocol();
|
|
@@ -21489,7 +21489,7 @@ var require_websocket_server = __commonJS({
|
|
|
21489
21489
|
);
|
|
21490
21490
|
}
|
|
21491
21491
|
if (this._state > RUNNING) return abortHandshake(socket, 503);
|
|
21492
|
-
const digest =
|
|
21492
|
+
const digest = createHash4("sha1").update(key + GUID).digest("base64");
|
|
21493
21493
|
const headers = [
|
|
21494
21494
|
"HTTP/1.1 101 Switching Protocols",
|
|
21495
21495
|
"Upgrade: websocket",
|
|
@@ -112048,6 +112048,10 @@ var ChannelCardKitClient = class {
|
|
|
112048
112048
|
};
|
|
112049
112049
|
|
|
112050
112050
|
// src/lark/outboundPostClient.ts
|
|
112051
|
+
import { createHash as createHash2 } from "node:crypto";
|
|
112052
|
+
function safeIdempotencyKey(raw) {
|
|
112053
|
+
return "lw-" + createHash2("sha256").update(raw).digest("hex").slice(0, 40);
|
|
112054
|
+
}
|
|
112051
112055
|
function numericStatus(err) {
|
|
112052
112056
|
if (!err || typeof err !== "object") return void 0;
|
|
112053
112057
|
const rec = err;
|
|
@@ -117052,7 +117056,12 @@ async function processHandoffs(ctx) {
|
|
|
117052
117056
|
});
|
|
117053
117057
|
const sent = await ctx.postClient.createPostReply(ctx.replyAnchorId, content, {
|
|
117054
117058
|
replyInThread: true,
|
|
117055
|
-
|
|
117059
|
+
// Hashed: raw `handoff:<om_ id>:<i>:<botId>` sits at ~50 chars — right
|
|
117060
|
+
// on Feishu's uuid validation cap (99992402). Same-input stability
|
|
117061
|
+
// keeps retry dedup working.
|
|
117062
|
+
idempotencyKey: safeIdempotencyKey(
|
|
117063
|
+
`handoff:${ctx.triggerMessageId}:${i}:${rosterEntry?.botId ?? wanted}`
|
|
117064
|
+
)
|
|
117056
117065
|
});
|
|
117057
117066
|
mirrorMessageId = sent.messageId;
|
|
117058
117067
|
} catch (err) {
|
|
@@ -118415,12 +118424,12 @@ async function createCotProgressHandle(opts) {
|
|
|
118415
118424
|
}
|
|
118416
118425
|
|
|
118417
118426
|
// src/lark/idempotency.ts
|
|
118418
|
-
import { createHash as
|
|
118427
|
+
import { createHash as createHash3 } from "node:crypto";
|
|
118419
118428
|
var KEY_PREFIX = "lw-p-";
|
|
118420
118429
|
var KEY_HASH_CHARS = 43;
|
|
118421
118430
|
var MAX_POST_IDEMPOTENCY_KEY_LENGTH = 64;
|
|
118422
118431
|
function sha256Base64Url(input) {
|
|
118423
|
-
return
|
|
118432
|
+
return createHash3("sha256").update(input).digest("base64url");
|
|
118424
118433
|
}
|
|
118425
118434
|
function digestPostContent(content) {
|
|
118426
118435
|
return sha256Base64Url(content).slice(0, 22);
|
|
@@ -130255,7 +130264,10 @@ async function runV2Mode({
|
|
|
130255
130264
|
chatId,
|
|
130256
130265
|
buildPostContent({ text: `${header}
|
|
130257
130266
|
${prompt}` }),
|
|
130258
|
-
|
|
130267
|
+
// Hashed: Feishu's uuid field rejects long/odd-charset keys with
|
|
130268
|
+
// 99992402 (see safeIdempotencyKey) — raw cron keys contain
|
|
130269
|
+
// spaces/asterisks and overflow the cap.
|
|
130270
|
+
{ idempotencyKey: safeIdempotencyKey(`schedule:${bot.id}:${id}:${occurrence}`) }
|
|
130259
130271
|
);
|
|
130260
130272
|
mirrorId = sent.messageId;
|
|
130261
130273
|
} catch (err) {
|