opencode-feishu-plugin 0.1.3 → 0.2.0
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.en.md +28 -6
- package/README.md +31 -3
- package/dist/index.js +475 -157
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -4,11 +4,11 @@ import http from 'http';
|
|
|
4
4
|
import https from 'https';
|
|
5
5
|
import http2 from 'http2';
|
|
6
6
|
import util from 'util';
|
|
7
|
-
import path, { dirname, isAbsolute, resolve as resolve$1, join,
|
|
7
|
+
import path, { dirname, isAbsolute, sep, resolve as resolve$1, join, basename } from 'path';
|
|
8
8
|
import zlib from 'zlib';
|
|
9
9
|
import stream3, { Readable } from 'stream';
|
|
10
10
|
import { EventEmitter } from 'events';
|
|
11
|
-
import fs, { mkdirSync, createWriteStream, readFileSync,
|
|
11
|
+
import fs, { mkdirSync, createWriteStream, readFileSync, realpathSync, statSync } from 'fs';
|
|
12
12
|
import qs from 'querystring';
|
|
13
13
|
import { homedir } from 'os';
|
|
14
14
|
import { readFile, readdir } from 'fs/promises';
|
|
@@ -10936,12 +10936,12 @@ var require_promisify = __commonJS({
|
|
|
10936
10936
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10937
10937
|
function promisify(fn3) {
|
|
10938
10938
|
return function(req, opts) {
|
|
10939
|
-
return new Promise((
|
|
10939
|
+
return new Promise((resolve4, reject) => {
|
|
10940
10940
|
fn3.call(this, req, opts, (err2, rtn) => {
|
|
10941
10941
|
if (err2) {
|
|
10942
10942
|
reject(err2);
|
|
10943
10943
|
} else {
|
|
10944
|
-
|
|
10944
|
+
resolve4(rtn);
|
|
10945
10945
|
}
|
|
10946
10946
|
});
|
|
10947
10947
|
});
|
|
@@ -11143,7 +11143,7 @@ var require_parse_proxy_response = __commonJS({
|
|
|
11143
11143
|
var debug_1 = __importDefault(require_src());
|
|
11144
11144
|
var debug = debug_1.default("https-proxy-agent:parse-proxy-response");
|
|
11145
11145
|
function parseProxyResponse(socket) {
|
|
11146
|
-
return new Promise((
|
|
11146
|
+
return new Promise((resolve4, reject) => {
|
|
11147
11147
|
let buffersLength = 0;
|
|
11148
11148
|
const buffers = [];
|
|
11149
11149
|
function read() {
|
|
@@ -11183,7 +11183,7 @@ var require_parse_proxy_response = __commonJS({
|
|
|
11183
11183
|
const firstLine = buffered.toString("ascii", 0, buffered.indexOf("\r\n"));
|
|
11184
11184
|
const statusCode = +firstLine.split(" ")[1];
|
|
11185
11185
|
debug("got proxy server response: %o", firstLine);
|
|
11186
|
-
|
|
11186
|
+
resolve4({
|
|
11187
11187
|
statusCode,
|
|
11188
11188
|
buffered
|
|
11189
11189
|
});
|
|
@@ -11203,11 +11203,11 @@ var require_agent = __commonJS({
|
|
|
11203
11203
|
"node_modules/https-proxy-agent/dist/agent.js"(exports) {
|
|
11204
11204
|
var __awaiter2 = exports && exports.__awaiter || function(thisArg, _arguments, P, generator) {
|
|
11205
11205
|
function adopt(value3) {
|
|
11206
|
-
return value3 instanceof P ? value3 : new P(function(
|
|
11207
|
-
|
|
11206
|
+
return value3 instanceof P ? value3 : new P(function(resolve4) {
|
|
11207
|
+
resolve4(value3);
|
|
11208
11208
|
});
|
|
11209
11209
|
}
|
|
11210
|
-
return new (P || (P = Promise))(function(
|
|
11210
|
+
return new (P || (P = Promise))(function(resolve4, reject) {
|
|
11211
11211
|
function fulfilled(value3) {
|
|
11212
11212
|
try {
|
|
11213
11213
|
step(generator.next(value3));
|
|
@@ -11223,7 +11223,7 @@ var require_agent = __commonJS({
|
|
|
11223
11223
|
}
|
|
11224
11224
|
}
|
|
11225
11225
|
function step(result3) {
|
|
11226
|
-
result3.done ?
|
|
11226
|
+
result3.done ? resolve4(result3.value) : adopt(result3.value).then(fulfilled, rejected);
|
|
11227
11227
|
}
|
|
11228
11228
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
11229
11229
|
});
|
|
@@ -18969,7 +18969,7 @@ var require_aspromise = __commonJS({
|
|
|
18969
18969
|
var params = new Array(arguments.length - 1), offset = 0, index2 = 2, pending = true;
|
|
18970
18970
|
while (index2 < arguments.length)
|
|
18971
18971
|
params[offset++] = arguments[index2++];
|
|
18972
|
-
return new Promise(function executor(
|
|
18972
|
+
return new Promise(function executor(resolve4, reject) {
|
|
18973
18973
|
params[offset] = function callback3(err2) {
|
|
18974
18974
|
if (pending) {
|
|
18975
18975
|
pending = false;
|
|
@@ -18979,7 +18979,7 @@ var require_aspromise = __commonJS({
|
|
|
18979
18979
|
var params2 = new Array(arguments.length - 1), offset2 = 0;
|
|
18980
18980
|
while (offset2 < params2.length)
|
|
18981
18981
|
params2[offset2++] = arguments[offset2];
|
|
18982
|
-
|
|
18982
|
+
resolve4.apply(null, params2);
|
|
18983
18983
|
}
|
|
18984
18984
|
}
|
|
18985
18985
|
};
|
|
@@ -23158,10 +23158,10 @@ var CanceledError = class extends AxiosError_default {
|
|
|
23158
23158
|
var CanceledError_default = CanceledError;
|
|
23159
23159
|
|
|
23160
23160
|
// node_modules/axios/lib/core/settle.js
|
|
23161
|
-
function settle(
|
|
23161
|
+
function settle(resolve4, reject, response2) {
|
|
23162
23162
|
const validateStatus2 = response2.config.validateStatus;
|
|
23163
23163
|
if (!response2.status || !validateStatus2 || validateStatus2(response2.status)) {
|
|
23164
|
-
|
|
23164
|
+
resolve4(response2);
|
|
23165
23165
|
} else {
|
|
23166
23166
|
reject(new AxiosError_default(
|
|
23167
23167
|
"Request failed with status code " + response2.status,
|
|
@@ -24494,7 +24494,7 @@ function setProxy(options2, configProxy, location, isRedirect, configHttpsAgent,
|
|
|
24494
24494
|
}
|
|
24495
24495
|
var isHttpAdapterSupported = typeof process !== "undefined" && utils_default.kindOf(process) === "process";
|
|
24496
24496
|
var wrapAsync = (asyncExecutor) => {
|
|
24497
|
-
return new Promise((
|
|
24497
|
+
return new Promise((resolve4, reject) => {
|
|
24498
24498
|
let onDone;
|
|
24499
24499
|
let isDone3;
|
|
24500
24500
|
const done4 = (value3, isRejected) => {
|
|
@@ -24504,7 +24504,7 @@ var wrapAsync = (asyncExecutor) => {
|
|
|
24504
24504
|
};
|
|
24505
24505
|
const _resolve = (value3) => {
|
|
24506
24506
|
done4(value3);
|
|
24507
|
-
|
|
24507
|
+
resolve4(value3);
|
|
24508
24508
|
};
|
|
24509
24509
|
const _reject = (reason) => {
|
|
24510
24510
|
done4(reason, true);
|
|
@@ -24575,7 +24575,7 @@ var http2Transport = {
|
|
|
24575
24575
|
}
|
|
24576
24576
|
};
|
|
24577
24577
|
var http_default = isHttpAdapterSupported && function httpAdapter(config) {
|
|
24578
|
-
return wrapAsync(async function dispatchHttpRequest(
|
|
24578
|
+
return wrapAsync(async function dispatchHttpRequest(resolve4, reject, onDone) {
|
|
24579
24579
|
const own2 = (key) => utils_default.getSafeProp(config, key);
|
|
24580
24580
|
const transitional2 = own2("transitional") || transitional_default;
|
|
24581
24581
|
let data = own2("data");
|
|
@@ -24712,7 +24712,7 @@ var http_default = isHttpAdapterSupported && function httpAdapter(config) {
|
|
|
24712
24712
|
}
|
|
24713
24713
|
let convertedData;
|
|
24714
24714
|
if (method !== "GET") {
|
|
24715
|
-
return settle(
|
|
24715
|
+
return settle(resolve4, reject, {
|
|
24716
24716
|
status: 405,
|
|
24717
24717
|
statusText: "method not allowed",
|
|
24718
24718
|
headers: {},
|
|
@@ -24734,7 +24734,7 @@ var http_default = isHttpAdapterSupported && function httpAdapter(config) {
|
|
|
24734
24734
|
} else if (responseType === "stream") {
|
|
24735
24735
|
convertedData = stream3.Readable.from(convertedData);
|
|
24736
24736
|
}
|
|
24737
|
-
return settle(
|
|
24737
|
+
return settle(resolve4, reject, {
|
|
24738
24738
|
data: convertedData,
|
|
24739
24739
|
status: 200,
|
|
24740
24740
|
statusText: "OK",
|
|
@@ -25105,7 +25105,7 @@ var http_default = isHttpAdapterSupported && function httpAdapter(config) {
|
|
|
25105
25105
|
});
|
|
25106
25106
|
}
|
|
25107
25107
|
response2.data = responseStream;
|
|
25108
|
-
settle(
|
|
25108
|
+
settle(resolve4, reject, response2);
|
|
25109
25109
|
} else {
|
|
25110
25110
|
const responseBuffer = [];
|
|
25111
25111
|
let totalResponseBytes = 0;
|
|
@@ -25156,7 +25156,7 @@ var http_default = isHttpAdapterSupported && function httpAdapter(config) {
|
|
|
25156
25156
|
} catch (err2) {
|
|
25157
25157
|
return reject(AxiosError_default.from(err2, null, config, response2.request, response2));
|
|
25158
25158
|
}
|
|
25159
|
-
settle(
|
|
25159
|
+
settle(resolve4, reject, response2);
|
|
25160
25160
|
});
|
|
25161
25161
|
}
|
|
25162
25162
|
abortEmitter.once("abort", (err2) => {
|
|
@@ -25530,7 +25530,7 @@ var resolveConfig_default = resolveConfig;
|
|
|
25530
25530
|
// node_modules/axios/lib/adapters/xhr.js
|
|
25531
25531
|
var isXHRAdapterSupported = typeof XMLHttpRequest !== "undefined";
|
|
25532
25532
|
var xhr_default = isXHRAdapterSupported && function(config) {
|
|
25533
|
-
return new Promise(function dispatchXhrRequest(
|
|
25533
|
+
return new Promise(function dispatchXhrRequest(resolve4, reject) {
|
|
25534
25534
|
const _config = resolveConfig_default(config);
|
|
25535
25535
|
let requestData = _config.data;
|
|
25536
25536
|
const requestHeaders = AxiosHeaders_default.from(_config.headers).normalize();
|
|
@@ -25585,7 +25585,7 @@ var xhr_default = isXHRAdapterSupported && function(config) {
|
|
|
25585
25585
|
};
|
|
25586
25586
|
settle(
|
|
25587
25587
|
function _resolve(value3) {
|
|
25588
|
-
|
|
25588
|
+
resolve4(value3);
|
|
25589
25589
|
done4();
|
|
25590
25590
|
},
|
|
25591
25591
|
function _reject(err2) {
|
|
@@ -26210,8 +26210,8 @@ var factory = (env) => {
|
|
|
26210
26210
|
}
|
|
26211
26211
|
}
|
|
26212
26212
|
!isStreamResponse && unsubscribe && unsubscribe();
|
|
26213
|
-
return await new Promise((
|
|
26214
|
-
settle(
|
|
26213
|
+
return await new Promise((resolve4, reject) => {
|
|
26214
|
+
settle(resolve4, reject, {
|
|
26215
26215
|
data: responseData,
|
|
26216
26216
|
headers: AxiosHeaders_default.from(response2.headers),
|
|
26217
26217
|
status: response2.status,
|
|
@@ -26690,8 +26690,8 @@ var CancelToken = class _CancelToken {
|
|
|
26690
26690
|
throw new TypeError("executor must be a function.");
|
|
26691
26691
|
}
|
|
26692
26692
|
let resolvePromise;
|
|
26693
|
-
this.promise = new Promise(function promiseExecutor(
|
|
26694
|
-
resolvePromise =
|
|
26693
|
+
this.promise = new Promise(function promiseExecutor(resolve4) {
|
|
26694
|
+
resolvePromise = resolve4;
|
|
26695
26695
|
});
|
|
26696
26696
|
const token = this;
|
|
26697
26697
|
this.promise.then((cancel) => {
|
|
@@ -26704,9 +26704,9 @@ var CancelToken = class _CancelToken {
|
|
|
26704
26704
|
});
|
|
26705
26705
|
this.promise.then = (onfulfilled) => {
|
|
26706
26706
|
let _resolve;
|
|
26707
|
-
const promise3 = new Promise((
|
|
26708
|
-
token.subscribe(
|
|
26709
|
-
_resolve =
|
|
26707
|
+
const promise3 = new Promise((resolve4) => {
|
|
26708
|
+
token.subscribe(resolve4);
|
|
26709
|
+
_resolve = resolve4;
|
|
26710
26710
|
}).then(onfulfilled);
|
|
26711
26711
|
promise3.cancel = function reject() {
|
|
26712
26712
|
token.unsubscribe(_resolve);
|
|
@@ -26966,11 +26966,11 @@ function __rest(s, e) {
|
|
|
26966
26966
|
}
|
|
26967
26967
|
function __awaiter(thisArg, _arguments, P, generator) {
|
|
26968
26968
|
function adopt(value3) {
|
|
26969
|
-
return value3 instanceof P ? value3 : new P(function(
|
|
26970
|
-
|
|
26969
|
+
return value3 instanceof P ? value3 : new P(function(resolve4) {
|
|
26970
|
+
resolve4(value3);
|
|
26971
26971
|
});
|
|
26972
26972
|
}
|
|
26973
|
-
return new (P || (P = Promise))(function(
|
|
26973
|
+
return new (P || (P = Promise))(function(resolve4, reject) {
|
|
26974
26974
|
function fulfilled(value3) {
|
|
26975
26975
|
try {
|
|
26976
26976
|
step(generator.next(value3));
|
|
@@ -26986,7 +26986,7 @@ function __awaiter(thisArg, _arguments, P, generator) {
|
|
|
26986
26986
|
}
|
|
26987
26987
|
}
|
|
26988
26988
|
function step(result3) {
|
|
26989
|
-
result3.done ?
|
|
26989
|
+
result3.done ? resolve4(result3.value) : adopt(result3.value).then(fulfilled, rejected);
|
|
26990
26990
|
}
|
|
26991
26991
|
step((generator = generator.apply(thisArg, [])).next());
|
|
26992
26992
|
});
|
|
@@ -27011,11 +27011,11 @@ function __asyncGenerator(thisArg, _arguments, generator) {
|
|
|
27011
27011
|
try {
|
|
27012
27012
|
step(g[n](v));
|
|
27013
27013
|
} catch (e) {
|
|
27014
|
-
|
|
27014
|
+
settle3(q[0][3], e);
|
|
27015
27015
|
}
|
|
27016
27016
|
}
|
|
27017
27017
|
function step(r) {
|
|
27018
|
-
r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) :
|
|
27018
|
+
r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle3(q[0][2], r);
|
|
27019
27019
|
}
|
|
27020
27020
|
function fulfill(value3) {
|
|
27021
27021
|
resume("next", value3);
|
|
@@ -27023,7 +27023,7 @@ function __asyncGenerator(thisArg, _arguments, generator) {
|
|
|
27023
27023
|
function reject(value3) {
|
|
27024
27024
|
resume("throw", value3);
|
|
27025
27025
|
}
|
|
27026
|
-
function
|
|
27026
|
+
function settle3(f, v) {
|
|
27027
27027
|
if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);
|
|
27028
27028
|
}
|
|
27029
27029
|
}
|
|
@@ -27376,10 +27376,10 @@ var Client$1P = class {
|
|
|
27376
27376
|
return {
|
|
27377
27377
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
27378
27378
|
checkIsReadable();
|
|
27379
|
-
return new Promise((
|
|
27379
|
+
return new Promise((resolve4, reject) => {
|
|
27380
27380
|
const writableStream = fs.createWriteStream(filePath);
|
|
27381
27381
|
writableStream.on("finish", () => {
|
|
27382
|
-
|
|
27382
|
+
resolve4(filePath);
|
|
27383
27383
|
});
|
|
27384
27384
|
writableStream.on("error", (e) => {
|
|
27385
27385
|
reject(e);
|
|
@@ -27559,10 +27559,10 @@ var Client$1P = class {
|
|
|
27559
27559
|
return {
|
|
27560
27560
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
27561
27561
|
checkIsReadable();
|
|
27562
|
-
return new Promise((
|
|
27562
|
+
return new Promise((resolve4, reject) => {
|
|
27563
27563
|
const writableStream = fs.createWriteStream(filePath);
|
|
27564
27564
|
writableStream.on("finish", () => {
|
|
27565
|
-
|
|
27565
|
+
resolve4(filePath);
|
|
27566
27566
|
});
|
|
27567
27567
|
writableStream.on("error", (e) => {
|
|
27568
27568
|
reject(e);
|
|
@@ -27895,10 +27895,10 @@ var Client$1P = class {
|
|
|
27895
27895
|
return {
|
|
27896
27896
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
27897
27897
|
checkIsReadable();
|
|
27898
|
-
return new Promise((
|
|
27898
|
+
return new Promise((resolve4, reject) => {
|
|
27899
27899
|
const writableStream = fs.createWriteStream(filePath);
|
|
27900
27900
|
writableStream.on("finish", () => {
|
|
27901
|
-
|
|
27901
|
+
resolve4(filePath);
|
|
27902
27902
|
});
|
|
27903
27903
|
writableStream.on("error", (e) => {
|
|
27904
27904
|
reject(e);
|
|
@@ -28080,10 +28080,10 @@ var Client$1P = class {
|
|
|
28080
28080
|
return {
|
|
28081
28081
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
28082
28082
|
checkIsReadable();
|
|
28083
|
-
return new Promise((
|
|
28083
|
+
return new Promise((resolve4, reject) => {
|
|
28084
28084
|
const writableStream = fs.createWriteStream(filePath);
|
|
28085
28085
|
writableStream.on("finish", () => {
|
|
28086
|
-
|
|
28086
|
+
resolve4(filePath);
|
|
28087
28087
|
});
|
|
28088
28088
|
writableStream.on("error", (e) => {
|
|
28089
28089
|
reject(e);
|
|
@@ -36923,10 +36923,10 @@ var Client$1H = class extends Client$1I {
|
|
|
36923
36923
|
return {
|
|
36924
36924
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
36925
36925
|
checkIsReadable();
|
|
36926
|
-
return new Promise((
|
|
36926
|
+
return new Promise((resolve4, reject) => {
|
|
36927
36927
|
const writableStream = fs.createWriteStream(filePath);
|
|
36928
36928
|
writableStream.on("finish", () => {
|
|
36929
|
-
|
|
36929
|
+
resolve4(filePath);
|
|
36930
36930
|
});
|
|
36931
36931
|
writableStream.on("error", (e) => {
|
|
36932
36932
|
reject(e);
|
|
@@ -38105,10 +38105,10 @@ var Client$1H = class extends Client$1I {
|
|
|
38105
38105
|
return {
|
|
38106
38106
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
38107
38107
|
checkIsReadable();
|
|
38108
|
-
return new Promise((
|
|
38108
|
+
return new Promise((resolve4, reject) => {
|
|
38109
38109
|
const writableStream = fs.createWriteStream(filePath);
|
|
38110
38110
|
writableStream.on("finish", () => {
|
|
38111
|
-
|
|
38111
|
+
resolve4(filePath);
|
|
38112
38112
|
});
|
|
38113
38113
|
writableStream.on("error", (e) => {
|
|
38114
38114
|
reject(e);
|
|
@@ -40311,10 +40311,10 @@ var Client$1B = class extends Client$1C {
|
|
|
40311
40311
|
return {
|
|
40312
40312
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
40313
40313
|
checkIsReadable();
|
|
40314
|
-
return new Promise((
|
|
40314
|
+
return new Promise((resolve4, reject) => {
|
|
40315
40315
|
const writableStream = fs.createWriteStream(filePath);
|
|
40316
40316
|
writableStream.on("finish", () => {
|
|
40317
|
-
|
|
40317
|
+
resolve4(filePath);
|
|
40318
40318
|
});
|
|
40319
40319
|
writableStream.on("error", (e) => {
|
|
40320
40320
|
reject(e);
|
|
@@ -40837,10 +40837,10 @@ var Client$1B = class extends Client$1C {
|
|
|
40837
40837
|
return {
|
|
40838
40838
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
40839
40839
|
checkIsReadable();
|
|
40840
|
-
return new Promise((
|
|
40840
|
+
return new Promise((resolve4, reject) => {
|
|
40841
40841
|
const writableStream = fs.createWriteStream(filePath);
|
|
40842
40842
|
writableStream.on("finish", () => {
|
|
40843
|
-
|
|
40843
|
+
resolve4(filePath);
|
|
40844
40844
|
});
|
|
40845
40845
|
writableStream.on("error", (e) => {
|
|
40846
40846
|
reject(e);
|
|
@@ -44858,10 +44858,10 @@ var Client$1x = class extends Client$1y {
|
|
|
44858
44858
|
return {
|
|
44859
44859
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
44860
44860
|
checkIsReadable();
|
|
44861
|
-
return new Promise((
|
|
44861
|
+
return new Promise((resolve4, reject) => {
|
|
44862
44862
|
const writableStream = fs.createWriteStream(filePath);
|
|
44863
44863
|
writableStream.on("finish", () => {
|
|
44864
|
-
|
|
44864
|
+
resolve4(filePath);
|
|
44865
44865
|
});
|
|
44866
44866
|
writableStream.on("error", (e) => {
|
|
44867
44867
|
reject(e);
|
|
@@ -55831,10 +55831,10 @@ var Client$1l = class extends Client$1m {
|
|
|
55831
55831
|
return {
|
|
55832
55832
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
55833
55833
|
checkIsReadable();
|
|
55834
|
-
return new Promise((
|
|
55834
|
+
return new Promise((resolve4, reject) => {
|
|
55835
55835
|
const writableStream = fs.createWriteStream(filePath);
|
|
55836
55836
|
writableStream.on("finish", () => {
|
|
55837
|
-
|
|
55837
|
+
resolve4(filePath);
|
|
55838
55838
|
});
|
|
55839
55839
|
writableStream.on("error", (e) => {
|
|
55840
55840
|
reject(e);
|
|
@@ -58588,10 +58588,10 @@ var Client$1l = class extends Client$1m {
|
|
|
58588
58588
|
return {
|
|
58589
58589
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
58590
58590
|
checkIsReadable();
|
|
58591
|
-
return new Promise((
|
|
58591
|
+
return new Promise((resolve4, reject) => {
|
|
58592
58592
|
const writableStream = fs.createWriteStream(filePath);
|
|
58593
58593
|
writableStream.on("finish", () => {
|
|
58594
|
-
|
|
58594
|
+
resolve4(filePath);
|
|
58595
58595
|
});
|
|
58596
58596
|
writableStream.on("error", (e) => {
|
|
58597
58597
|
reject(e);
|
|
@@ -62027,10 +62027,10 @@ var Client$1l = class extends Client$1m {
|
|
|
62027
62027
|
return {
|
|
62028
62028
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
62029
62029
|
checkIsReadable();
|
|
62030
|
-
return new Promise((
|
|
62030
|
+
return new Promise((resolve4, reject) => {
|
|
62031
62031
|
const writableStream = fs.createWriteStream(filePath);
|
|
62032
62032
|
writableStream.on("finish", () => {
|
|
62033
|
-
|
|
62033
|
+
resolve4(filePath);
|
|
62034
62034
|
});
|
|
62035
62035
|
writableStream.on("error", (e) => {
|
|
62036
62036
|
reject(e);
|
|
@@ -68652,10 +68652,10 @@ var Client$1c = class extends Client$1d {
|
|
|
68652
68652
|
return {
|
|
68653
68653
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
68654
68654
|
checkIsReadable();
|
|
68655
|
-
return new Promise((
|
|
68655
|
+
return new Promise((resolve4, reject) => {
|
|
68656
68656
|
const writableStream = fs.createWriteStream(filePath);
|
|
68657
68657
|
writableStream.on("finish", () => {
|
|
68658
|
-
|
|
68658
|
+
resolve4(filePath);
|
|
68659
68659
|
});
|
|
68660
68660
|
writableStream.on("error", (e) => {
|
|
68661
68661
|
reject(e);
|
|
@@ -68904,10 +68904,10 @@ var Client$1c = class extends Client$1d {
|
|
|
68904
68904
|
return {
|
|
68905
68905
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
68906
68906
|
checkIsReadable();
|
|
68907
|
-
return new Promise((
|
|
68907
|
+
return new Promise((resolve4, reject) => {
|
|
68908
68908
|
const writableStream = fs.createWriteStream(filePath);
|
|
68909
68909
|
writableStream.on("finish", () => {
|
|
68910
|
-
|
|
68910
|
+
resolve4(filePath);
|
|
68911
68911
|
});
|
|
68912
68912
|
writableStream.on("error", (e) => {
|
|
68913
68913
|
reject(e);
|
|
@@ -69525,10 +69525,10 @@ var Client$1c = class extends Client$1d {
|
|
|
69525
69525
|
return {
|
|
69526
69526
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
69527
69527
|
checkIsReadable();
|
|
69528
|
-
return new Promise((
|
|
69528
|
+
return new Promise((resolve4, reject) => {
|
|
69529
69529
|
const writableStream = fs.createWriteStream(filePath);
|
|
69530
69530
|
writableStream.on("finish", () => {
|
|
69531
|
-
|
|
69531
|
+
resolve4(filePath);
|
|
69532
69532
|
});
|
|
69533
69533
|
writableStream.on("error", (e) => {
|
|
69534
69534
|
reject(e);
|
|
@@ -70471,10 +70471,10 @@ var Client$1c = class extends Client$1d {
|
|
|
70471
70471
|
return {
|
|
70472
70472
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
70473
70473
|
checkIsReadable();
|
|
70474
|
-
return new Promise((
|
|
70474
|
+
return new Promise((resolve4, reject) => {
|
|
70475
70475
|
const writableStream = fs.createWriteStream(filePath);
|
|
70476
70476
|
writableStream.on("finish", () => {
|
|
70477
|
-
|
|
70477
|
+
resolve4(filePath);
|
|
70478
70478
|
});
|
|
70479
70479
|
writableStream.on("error", (e) => {
|
|
70480
70480
|
reject(e);
|
|
@@ -70723,10 +70723,10 @@ var Client$1c = class extends Client$1d {
|
|
|
70723
70723
|
return {
|
|
70724
70724
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
70725
70725
|
checkIsReadable();
|
|
70726
|
-
return new Promise((
|
|
70726
|
+
return new Promise((resolve4, reject) => {
|
|
70727
70727
|
const writableStream = fs.createWriteStream(filePath);
|
|
70728
70728
|
writableStream.on("finish", () => {
|
|
70729
|
-
|
|
70729
|
+
resolve4(filePath);
|
|
70730
70730
|
});
|
|
70731
70731
|
writableStream.on("error", (e) => {
|
|
70732
70732
|
reject(e);
|
|
@@ -71350,10 +71350,10 @@ var Client$1c = class extends Client$1d {
|
|
|
71350
71350
|
return {
|
|
71351
71351
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
71352
71352
|
checkIsReadable();
|
|
71353
|
-
return new Promise((
|
|
71353
|
+
return new Promise((resolve4, reject) => {
|
|
71354
71354
|
const writableStream = fs.createWriteStream(filePath);
|
|
71355
71355
|
writableStream.on("finish", () => {
|
|
71356
|
-
|
|
71356
|
+
resolve4(filePath);
|
|
71357
71357
|
});
|
|
71358
71358
|
writableStream.on("error", (e) => {
|
|
71359
71359
|
reject(e);
|
|
@@ -72189,10 +72189,10 @@ var Client$19 = class extends Client$1a {
|
|
|
72189
72189
|
return {
|
|
72190
72190
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
72191
72191
|
checkIsReadable();
|
|
72192
|
-
return new Promise((
|
|
72192
|
+
return new Promise((resolve4, reject) => {
|
|
72193
72193
|
const writableStream = fs.createWriteStream(filePath);
|
|
72194
72194
|
writableStream.on("finish", () => {
|
|
72195
|
-
|
|
72195
|
+
resolve4(filePath);
|
|
72196
72196
|
});
|
|
72197
72197
|
writableStream.on("error", (e) => {
|
|
72198
72198
|
reject(e);
|
|
@@ -72325,10 +72325,10 @@ var Client$19 = class extends Client$1a {
|
|
|
72325
72325
|
return {
|
|
72326
72326
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
72327
72327
|
checkIsReadable();
|
|
72328
|
-
return new Promise((
|
|
72328
|
+
return new Promise((resolve4, reject) => {
|
|
72329
72329
|
const writableStream = fs.createWriteStream(filePath);
|
|
72330
72330
|
writableStream.on("finish", () => {
|
|
72331
|
-
|
|
72331
|
+
resolve4(filePath);
|
|
72332
72332
|
});
|
|
72333
72333
|
writableStream.on("error", (e) => {
|
|
72334
72334
|
reject(e);
|
|
@@ -73160,10 +73160,10 @@ var Client$11 = class extends Client$12 {
|
|
|
73160
73160
|
return {
|
|
73161
73161
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
73162
73162
|
checkIsReadable();
|
|
73163
|
-
return new Promise((
|
|
73163
|
+
return new Promise((resolve4, reject) => {
|
|
73164
73164
|
const writableStream = fs.createWriteStream(filePath);
|
|
73165
73165
|
writableStream.on("finish", () => {
|
|
73166
|
-
|
|
73166
|
+
resolve4(filePath);
|
|
73167
73167
|
});
|
|
73168
73168
|
writableStream.on("error", (e) => {
|
|
73169
73169
|
reject(e);
|
|
@@ -73558,10 +73558,10 @@ var Client$11 = class extends Client$12 {
|
|
|
73558
73558
|
return {
|
|
73559
73559
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
73560
73560
|
checkIsReadable();
|
|
73561
|
-
return new Promise((
|
|
73561
|
+
return new Promise((resolve4, reject) => {
|
|
73562
73562
|
const writableStream = fs.createWriteStream(filePath);
|
|
73563
73563
|
writableStream.on("finish", () => {
|
|
73564
|
-
|
|
73564
|
+
resolve4(filePath);
|
|
73565
73565
|
});
|
|
73566
73566
|
writableStream.on("error", (e) => {
|
|
73567
73567
|
reject(e);
|
|
@@ -74598,10 +74598,10 @@ var Client$11 = class extends Client$12 {
|
|
|
74598
74598
|
return {
|
|
74599
74599
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
74600
74600
|
checkIsReadable();
|
|
74601
|
-
return new Promise((
|
|
74601
|
+
return new Promise((resolve4, reject) => {
|
|
74602
74602
|
const writableStream = fs.createWriteStream(filePath);
|
|
74603
74603
|
writableStream.on("finish", () => {
|
|
74604
|
-
|
|
74604
|
+
resolve4(filePath);
|
|
74605
74605
|
});
|
|
74606
74606
|
writableStream.on("error", (e) => {
|
|
74607
74607
|
reject(e);
|
|
@@ -75000,10 +75000,10 @@ var Client$11 = class extends Client$12 {
|
|
|
75000
75000
|
return {
|
|
75001
75001
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
75002
75002
|
checkIsReadable();
|
|
75003
|
-
return new Promise((
|
|
75003
|
+
return new Promise((resolve4, reject) => {
|
|
75004
75004
|
const writableStream = fs.createWriteStream(filePath);
|
|
75005
75005
|
writableStream.on("finish", () => {
|
|
75006
|
-
|
|
75006
|
+
resolve4(filePath);
|
|
75007
75007
|
});
|
|
75008
75008
|
writableStream.on("error", (e) => {
|
|
75009
75009
|
reject(e);
|
|
@@ -89699,10 +89699,10 @@ var Client$_ = class extends Client$$ {
|
|
|
89699
89699
|
return {
|
|
89700
89700
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
89701
89701
|
checkIsReadable();
|
|
89702
|
-
return new Promise((
|
|
89702
|
+
return new Promise((resolve4, reject) => {
|
|
89703
89703
|
const writableStream = fs.createWriteStream(filePath);
|
|
89704
89704
|
writableStream.on("finish", () => {
|
|
89705
|
-
|
|
89705
|
+
resolve4(filePath);
|
|
89706
89706
|
});
|
|
89707
89707
|
writableStream.on("error", (e) => {
|
|
89708
89708
|
reject(e);
|
|
@@ -89937,10 +89937,10 @@ var Client$_ = class extends Client$$ {
|
|
|
89937
89937
|
return {
|
|
89938
89938
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
89939
89939
|
checkIsReadable();
|
|
89940
|
-
return new Promise((
|
|
89940
|
+
return new Promise((resolve4, reject) => {
|
|
89941
89941
|
const writableStream = fs.createWriteStream(filePath);
|
|
89942
89942
|
writableStream.on("finish", () => {
|
|
89943
|
-
|
|
89943
|
+
resolve4(filePath);
|
|
89944
89944
|
});
|
|
89945
89945
|
writableStream.on("error", (e) => {
|
|
89946
89946
|
reject(e);
|
|
@@ -90022,10 +90022,10 @@ var Client$_ = class extends Client$$ {
|
|
|
90022
90022
|
return {
|
|
90023
90023
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
90024
90024
|
checkIsReadable();
|
|
90025
|
-
return new Promise((
|
|
90025
|
+
return new Promise((resolve4, reject) => {
|
|
90026
90026
|
const writableStream = fs.createWriteStream(filePath);
|
|
90027
90027
|
writableStream.on("finish", () => {
|
|
90028
|
-
|
|
90028
|
+
resolve4(filePath);
|
|
90029
90029
|
});
|
|
90030
90030
|
writableStream.on("error", (e) => {
|
|
90031
90031
|
reject(e);
|
|
@@ -91844,10 +91844,10 @@ var Client$_ = class extends Client$$ {
|
|
|
91844
91844
|
return {
|
|
91845
91845
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
91846
91846
|
checkIsReadable();
|
|
91847
|
-
return new Promise((
|
|
91847
|
+
return new Promise((resolve4, reject) => {
|
|
91848
91848
|
const writableStream = fs.createWriteStream(filePath);
|
|
91849
91849
|
writableStream.on("finish", () => {
|
|
91850
|
-
|
|
91850
|
+
resolve4(filePath);
|
|
91851
91851
|
});
|
|
91852
91852
|
writableStream.on("error", (e) => {
|
|
91853
91853
|
reject(e);
|
|
@@ -92084,10 +92084,10 @@ var Client$_ = class extends Client$$ {
|
|
|
92084
92084
|
return {
|
|
92085
92085
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
92086
92086
|
checkIsReadable();
|
|
92087
|
-
return new Promise((
|
|
92087
|
+
return new Promise((resolve4, reject) => {
|
|
92088
92088
|
const writableStream = fs.createWriteStream(filePath);
|
|
92089
92089
|
writableStream.on("finish", () => {
|
|
92090
|
-
|
|
92090
|
+
resolve4(filePath);
|
|
92091
92091
|
});
|
|
92092
92092
|
writableStream.on("error", (e) => {
|
|
92093
92093
|
reject(e);
|
|
@@ -92169,10 +92169,10 @@ var Client$_ = class extends Client$$ {
|
|
|
92169
92169
|
return {
|
|
92170
92170
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
92171
92171
|
checkIsReadable();
|
|
92172
|
-
return new Promise((
|
|
92172
|
+
return new Promise((resolve4, reject) => {
|
|
92173
92173
|
const writableStream = fs.createWriteStream(filePath);
|
|
92174
92174
|
writableStream.on("finish", () => {
|
|
92175
|
-
|
|
92175
|
+
resolve4(filePath);
|
|
92176
92176
|
});
|
|
92177
92177
|
writableStream.on("error", (e) => {
|
|
92178
92178
|
reject(e);
|
|
@@ -92674,10 +92674,10 @@ var Client$X = class extends Client$Y {
|
|
|
92674
92674
|
return {
|
|
92675
92675
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
92676
92676
|
checkIsReadable();
|
|
92677
|
-
return new Promise((
|
|
92677
|
+
return new Promise((resolve4, reject) => {
|
|
92678
92678
|
const writableStream = fs.createWriteStream(filePath);
|
|
92679
92679
|
writableStream.on("finish", () => {
|
|
92680
|
-
|
|
92680
|
+
resolve4(filePath);
|
|
92681
92681
|
});
|
|
92682
92682
|
writableStream.on("error", (e) => {
|
|
92683
92683
|
reject(e);
|
|
@@ -99848,10 +99848,10 @@ var Client$Q = class extends Client$R {
|
|
|
99848
99848
|
return {
|
|
99849
99849
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
99850
99850
|
checkIsReadable();
|
|
99851
|
-
return new Promise((
|
|
99851
|
+
return new Promise((resolve4, reject) => {
|
|
99852
99852
|
const writableStream = fs.createWriteStream(filePath);
|
|
99853
99853
|
writableStream.on("finish", () => {
|
|
99854
|
-
|
|
99854
|
+
resolve4(filePath);
|
|
99855
99855
|
});
|
|
99856
99856
|
writableStream.on("error", (e) => {
|
|
99857
99857
|
reject(e);
|
|
@@ -114511,10 +114511,10 @@ var Client$4 = class extends Client$5 {
|
|
|
114511
114511
|
return {
|
|
114512
114512
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
114513
114513
|
checkIsReadable();
|
|
114514
|
-
return new Promise((
|
|
114514
|
+
return new Promise((resolve4, reject) => {
|
|
114515
114515
|
const writableStream = fs.createWriteStream(filePath);
|
|
114516
114516
|
writableStream.on("finish", () => {
|
|
114517
|
-
|
|
114517
|
+
resolve4(filePath);
|
|
114518
114518
|
});
|
|
114519
114519
|
writableStream.on("error", (e) => {
|
|
114520
114520
|
reject(e);
|
|
@@ -117842,10 +117842,10 @@ var Client$4 = class extends Client$5 {
|
|
|
117842
117842
|
return {
|
|
117843
117843
|
writeFile: (filePath) => __awaiter(this, void 0, void 0, function* () {
|
|
117844
117844
|
checkIsReadable();
|
|
117845
|
-
return new Promise((
|
|
117845
|
+
return new Promise((resolve4, reject) => {
|
|
117846
117846
|
const writableStream = fs.createWriteStream(filePath);
|
|
117847
117847
|
writableStream.on("finish", () => {
|
|
117848
|
-
|
|
117848
|
+
resolve4(filePath);
|
|
117849
117849
|
});
|
|
117850
117850
|
writableStream.on("error", (e) => {
|
|
117851
117851
|
reject(e);
|
|
@@ -121514,7 +121514,7 @@ var WSClient = class {
|
|
|
121514
121514
|
if (!wsInstance) {
|
|
121515
121515
|
return Promise.resolve(false);
|
|
121516
121516
|
}
|
|
121517
|
-
return new Promise((
|
|
121517
|
+
return new Promise((resolve4) => {
|
|
121518
121518
|
let settled = false;
|
|
121519
121519
|
let timer;
|
|
121520
121520
|
const settleOnce = (ok) => {
|
|
@@ -121523,7 +121523,7 @@ var WSClient = class {
|
|
|
121523
121523
|
settled = true;
|
|
121524
121524
|
if (timer)
|
|
121525
121525
|
clearTimeout(timer);
|
|
121526
|
-
|
|
121526
|
+
resolve4(ok);
|
|
121527
121527
|
};
|
|
121528
121528
|
if (this.handshakeTimeoutMs && this.handshakeTimeoutMs > 0) {
|
|
121529
121529
|
timer = setTimeout(() => {
|
|
@@ -126771,8 +126771,8 @@ var runPromiseExitWith = (context3) => {
|
|
|
126771
126771
|
const runFork3 = runForkWith(context3);
|
|
126772
126772
|
return (effect2, options2) => {
|
|
126773
126773
|
const fiber3 = runFork3(effect2, options2);
|
|
126774
|
-
return new Promise((
|
|
126775
|
-
fiber3.addObserver((exit3) =>
|
|
126774
|
+
return new Promise((resolve4) => {
|
|
126775
|
+
fiber3.addObserver((exit3) => resolve4(exit3));
|
|
126776
126776
|
});
|
|
126777
126777
|
};
|
|
126778
126778
|
};
|
|
@@ -137127,9 +137127,9 @@ function toStandardSchemaV1(self2, options2) {
|
|
|
137127
137127
|
if (exit3) {
|
|
137128
137128
|
return makeStandardResult(exit3);
|
|
137129
137129
|
}
|
|
137130
|
-
return new Promise((
|
|
137130
|
+
return new Promise((resolve4) => {
|
|
137131
137131
|
fiber3.addObserver((exit4) => {
|
|
137132
|
-
|
|
137132
|
+
resolve4(makeStandardResult(exit4));
|
|
137133
137133
|
});
|
|
137134
137134
|
});
|
|
137135
137135
|
};
|
|
@@ -144024,9 +144024,15 @@ function resolveConfig2(raw, env = process.env, deps = {}) {
|
|
|
144024
144024
|
const topicStatusInTitle = asBoolean(merged.topicStatusInTitle, false);
|
|
144025
144025
|
const topicStatusThrottleMs = clamp4(asNumber(merged.topicStatusThrottleMs, 1e3), 500, 1e4);
|
|
144026
144026
|
const cardMaxTables = clamp4(asNumber(merged.cardMaxTables, 4), 1, 5);
|
|
144027
|
+
const keepalive = asBoolean(merged.keepalive, true);
|
|
144028
|
+
const keepaliveIntervalMs = clamp4(
|
|
144029
|
+
asNumber(merged.keepaliveIntervalMs, 20 * 60 * 1e3),
|
|
144030
|
+
5 * 60 * 1e3,
|
|
144031
|
+
45 * 60 * 1e3
|
|
144032
|
+
);
|
|
144027
144033
|
const domain = merged.domain === "lark" ? "lark" : "feishu";
|
|
144028
144034
|
const logFile = resolveLogFile(merged.logFile, env, deps);
|
|
144029
|
-
const gatewayLocation = asString(merged.gatewayLocation)
|
|
144035
|
+
const gatewayLocation = normalizeGatewayLocation(asString(merged.gatewayLocation));
|
|
144030
144036
|
const signSecretRaw = expandEnv(asString(merged.signSecret), env);
|
|
144031
144037
|
const signSecret = signSecretRaw && signSecretRaw.length > 0 ? signSecretRaw : deriveSignSecret(appSecret);
|
|
144032
144038
|
let enabled = true;
|
|
@@ -144071,7 +144077,9 @@ function resolveConfig2(raw, env = process.env, deps = {}) {
|
|
|
144071
144077
|
topicStatus,
|
|
144072
144078
|
topicStatusInTitle,
|
|
144073
144079
|
topicStatusThrottleMs,
|
|
144074
|
-
cardMaxTables
|
|
144080
|
+
cardMaxTables,
|
|
144081
|
+
keepalive,
|
|
144082
|
+
keepaliveIntervalMs
|
|
144075
144083
|
};
|
|
144076
144084
|
}
|
|
144077
144085
|
function loadConfigFile(env, deps, warnings) {
|
|
@@ -144114,6 +144122,17 @@ function resolveConfigDir(env, explicit) {
|
|
|
144114
144122
|
if (fromEnv) return fromEnv;
|
|
144115
144123
|
return join(homedir(), ".config", "opencode");
|
|
144116
144124
|
}
|
|
144125
|
+
function normalizeGatewayLocation(raw) {
|
|
144126
|
+
const trimmed = raw.trim();
|
|
144127
|
+
if (!trimmed) return void 0;
|
|
144128
|
+
const expanded = trimmed === "~" ? homedir() : trimmed.startsWith("~/") ? join(homedir(), trimmed.slice(2)) : trimmed;
|
|
144129
|
+
const resolved = resolve$1(expanded);
|
|
144130
|
+
try {
|
|
144131
|
+
return realpathSync(resolved);
|
|
144132
|
+
} catch {
|
|
144133
|
+
return resolved;
|
|
144134
|
+
}
|
|
144135
|
+
}
|
|
144117
144136
|
function resolveLogFile(raw, env, deps) {
|
|
144118
144137
|
if (raw === true) return join(resolveConfigDir(env, deps.configDir), ...LOG_FILE_RELATIVE);
|
|
144119
144138
|
if (typeof raw !== "string") return void 0;
|
|
@@ -144258,6 +144277,56 @@ function releaseProcessGuard() {
|
|
|
144258
144277
|
const slot = g[GUARD_SLOT];
|
|
144259
144278
|
if (slot) slot.active = false;
|
|
144260
144279
|
}
|
|
144280
|
+
var GATEWAY_SEEN_SLOT = /* @__PURE__ */ Symbol.for("opencode-feishu-v2/gateway-seen");
|
|
144281
|
+
function trackGatewayLocationSeen(input) {
|
|
144282
|
+
const g = globalThis;
|
|
144283
|
+
let slot = g[GATEWAY_SEEN_SLOT];
|
|
144284
|
+
if (!slot || slot.expected !== input.expected) {
|
|
144285
|
+
if (slot) settle2(slot);
|
|
144286
|
+
slot = { expected: input.expected, seen: [], matched: false, warned: false, onSettled: [], timer: void 0 };
|
|
144287
|
+
g[GATEWAY_SEEN_SLOT] = slot;
|
|
144288
|
+
}
|
|
144289
|
+
const current = slot;
|
|
144290
|
+
if (!current.seen.includes(input.here)) current.seen = [...current.seen, input.here];
|
|
144291
|
+
if (input.matched) {
|
|
144292
|
+
current.matched = true;
|
|
144293
|
+
settle2(current);
|
|
144294
|
+
return;
|
|
144295
|
+
}
|
|
144296
|
+
if (current.matched || current.warned) {
|
|
144297
|
+
runOnSettled(input.onSettled);
|
|
144298
|
+
return;
|
|
144299
|
+
}
|
|
144300
|
+
if (input.onSettled) current.onSettled.push(input.onSettled);
|
|
144301
|
+
if (current.timer) clearTimeout(current.timer);
|
|
144302
|
+
current.timer = setTimeout(() => {
|
|
144303
|
+
const live = g[GATEWAY_SEEN_SLOT];
|
|
144304
|
+
if (live !== current) return;
|
|
144305
|
+
current.timer = void 0;
|
|
144306
|
+
if (current.matched || current.warned) return;
|
|
144307
|
+
current.warned = true;
|
|
144308
|
+
input.warn(
|
|
144309
|
+
`\u5DF2\u914D\u7F6E gatewayLocation="${current.expected}"\uFF0C\u4F46\u5DF2\u52A0\u8F7D\u7684 location \u5747\u672A\u547D\u4E2D\uFF1A[${current.seen.join(", ") || "(\u65E0)"}]\u3002\u98DE\u4E66\u957F\u8FDE\u63A5\u4E0D\u4F1A\u542F\u52A8\uFF08\u673A\u5668\u4EBA\u65E0\u54CD\u5E94\uFF09\u3002\u8BF7\u786E\u8BA4 gatewayLocation \u662F\u5B9E\u9645\u6253\u5F00 opencode \u7684\u76EE\u5F55\u6216\u5176\u7236\u76EE\u5F55\uFF1B\u7559\u7A7A\u5219\u4EFB\u610F location \u751F\u6548\u3002`
|
|
144310
|
+
);
|
|
144311
|
+
runOnSettled(...current.onSettled.splice(0));
|
|
144312
|
+
}, input.delayMs ?? 2e3);
|
|
144313
|
+
}
|
|
144314
|
+
function settle2(slot) {
|
|
144315
|
+
if (slot.timer) {
|
|
144316
|
+
clearTimeout(slot.timer);
|
|
144317
|
+
slot.timer = void 0;
|
|
144318
|
+
}
|
|
144319
|
+
runOnSettled(...slot.onSettled.splice(0));
|
|
144320
|
+
}
|
|
144321
|
+
function runOnSettled(...callbacks) {
|
|
144322
|
+
for (const cb of callbacks) {
|
|
144323
|
+
if (!cb) continue;
|
|
144324
|
+
try {
|
|
144325
|
+
cb();
|
|
144326
|
+
} catch {
|
|
144327
|
+
}
|
|
144328
|
+
}
|
|
144329
|
+
}
|
|
144261
144330
|
|
|
144262
144331
|
// src/security/allowlist.ts
|
|
144263
144332
|
var OWNER_STORAGE_KEY = "feishu:v2:owner";
|
|
@@ -145064,10 +145133,18 @@ function createFeishuSender(client, log2, options2 = {}) {
|
|
|
145064
145133
|
}
|
|
145065
145134
|
},
|
|
145066
145135
|
async deleteMessage(messageId) {
|
|
145067
|
-
if (!messageId) return;
|
|
145136
|
+
if (!messageId) return { ok: false, error: "missing messageId" };
|
|
145068
145137
|
try {
|
|
145069
|
-
await client.im.message.delete({ path: { message_id: messageId } });
|
|
145070
|
-
|
|
145138
|
+
const res = await client.im.message.delete({ path: { message_id: messageId } });
|
|
145139
|
+
if (res?.code && res.code !== 0) {
|
|
145140
|
+
log2.debug("\u64A4\u56DE\u6D88\u606F\u5931\u8D25", { messageId, code: res.code, msg: res.msg });
|
|
145141
|
+
return { ok: false, error: `code=${res.code} msg=${res.msg ?? ""}` };
|
|
145142
|
+
}
|
|
145143
|
+
return { ok: true };
|
|
145144
|
+
} catch (err2) {
|
|
145145
|
+
const error = describeLarkError(err2);
|
|
145146
|
+
log2.debug("\u64A4\u56DE\u6D88\u606F\u5F02\u5E38", { messageId, error });
|
|
145147
|
+
return { ok: false, error };
|
|
145071
145148
|
}
|
|
145072
145149
|
}
|
|
145073
145150
|
};
|
|
@@ -145243,6 +145320,25 @@ var SessionMap = class {
|
|
|
145243
145320
|
await this.persist(chatId, record2);
|
|
145244
145321
|
await this.safeSet(`${SESSION_KEY_PREFIX}${sessionID}`, serializeSession(link2));
|
|
145245
145322
|
}
|
|
145323
|
+
/**
|
|
145324
|
+
* 为**外部来源**的会话(TUI/Web,无飞书映射)补一条会话索引(P7.5)。
|
|
145325
|
+
*
|
|
145326
|
+
* `/ls` 列出 opencode 全量会话后,用户「进入话题」的会话需要审批投递、
|
|
145327
|
+
* 跨 location 路由(`dir`)与失败通知的目标。已存在则只补缺失字段,
|
|
145328
|
+
* **不覆盖** perm/gateMode/model 等既有元数据。
|
|
145329
|
+
*/
|
|
145330
|
+
async ensureSessionLink(sessionID, input) {
|
|
145331
|
+
if (!sessionID || !input.chatId) return;
|
|
145332
|
+
const existing = await this.resolveBySession(sessionID);
|
|
145333
|
+
const link2 = {
|
|
145334
|
+
...existing,
|
|
145335
|
+
chatId: input.chatId,
|
|
145336
|
+
openId: input.openId,
|
|
145337
|
+
...input.directory ? { dir: input.directory } : {}
|
|
145338
|
+
};
|
|
145339
|
+
this.remember(sessionID, link2);
|
|
145340
|
+
await this.safeSet(`${SESSION_KEY_PREFIX}${sessionID}`, serializeSession(link2));
|
|
145341
|
+
}
|
|
145246
145342
|
/** 切换当前会话;会话不属于该 chat 时返回 false。 */
|
|
145247
145343
|
async setActive(chatId, sessionID) {
|
|
145248
145344
|
const record2 = await this.loadChat(chatId);
|
|
@@ -146752,7 +146848,7 @@ var FormRelay = class {
|
|
|
146752
146848
|
return false;
|
|
146753
146849
|
}
|
|
146754
146850
|
const field = pending.form.fields.find((f) => f.key === fieldKey);
|
|
146755
|
-
pending.answers[fieldKey] =
|
|
146851
|
+
pending.answers[fieldKey] = coerceAnswer(field, text);
|
|
146756
146852
|
pending.awaitingField = void 0;
|
|
146757
146853
|
this.awaiting.delete(sessionID);
|
|
146758
146854
|
if (isComplete(pending.form, pending.answers)) {
|
|
@@ -146776,7 +146872,7 @@ var FormRelay = class {
|
|
|
146776
146872
|
}
|
|
146777
146873
|
this.awaiting.delete(sessionID ?? pending.sessionID);
|
|
146778
146874
|
this.forms.delete(id2);
|
|
146779
|
-
void this.
|
|
146875
|
+
void this.finish(pending, "answered");
|
|
146780
146876
|
}
|
|
146781
146877
|
/** 处理 `form.cancelled`。 */
|
|
146782
146878
|
onCancelled(data) {
|
|
@@ -146786,7 +146882,7 @@ var FormRelay = class {
|
|
|
146786
146882
|
if (!pending) return;
|
|
146787
146883
|
this.awaiting.delete(sessionID ?? pending.sessionID);
|
|
146788
146884
|
this.forms.delete(id2);
|
|
146789
|
-
void this.
|
|
146885
|
+
void this.finish(pending, "cancelled");
|
|
146790
146886
|
}
|
|
146791
146887
|
dispose() {
|
|
146792
146888
|
this.disposed = true;
|
|
@@ -146807,6 +146903,13 @@ var FormRelay = class {
|
|
|
146807
146903
|
error: errorMessage(err2)
|
|
146808
146904
|
});
|
|
146809
146905
|
pending.settled = false;
|
|
146906
|
+
const missing2 = pending.form.fields.find(
|
|
146907
|
+
(f) => f.hidden !== true && pending.answers[f.key] === void 0
|
|
146908
|
+
);
|
|
146909
|
+
if (missing2) {
|
|
146910
|
+
pending.awaitingField = missing2.key;
|
|
146911
|
+
this.awaiting.set(pending.sessionID, pending.form.id);
|
|
146912
|
+
}
|
|
146810
146913
|
this.forms.set(pending.form.id, pending);
|
|
146811
146914
|
await this.patch(
|
|
146812
146915
|
pending,
|
|
@@ -146815,7 +146918,20 @@ var FormRelay = class {
|
|
|
146815
146918
|
return;
|
|
146816
146919
|
}
|
|
146817
146920
|
this.forms.delete(pending.form.id);
|
|
146818
|
-
await this.
|
|
146921
|
+
await this.finish(pending, "answered");
|
|
146922
|
+
}
|
|
146923
|
+
/**
|
|
146924
|
+
* 表单收敛:**优先撤回卡片**(作答/取消后不再残留待填卡),撤回失败(超时限/无权限)
|
|
146925
|
+
* 才降级 patch 成结果卡,避免卡片永久停在待填态。
|
|
146926
|
+
*/
|
|
146927
|
+
async finish(pending, outcome) {
|
|
146928
|
+
if (this.disposed) return;
|
|
146929
|
+
const res = await this.deps.sender.deleteMessage(pending.messageId);
|
|
146930
|
+
if (res.ok) {
|
|
146931
|
+
this.deps.log.debug("\u8868\u5355\u5361\u5DF2\u64A4\u56DE", { formID: pending.form.id, outcome });
|
|
146932
|
+
return;
|
|
146933
|
+
}
|
|
146934
|
+
await this.patch(pending, buildFormResolvedCard(pending.form, pending.answers, outcome));
|
|
146819
146935
|
}
|
|
146820
146936
|
async patch(pending, card) {
|
|
146821
146937
|
if (this.disposed) return;
|
|
@@ -146829,17 +146945,47 @@ function isFormValue(value3) {
|
|
|
146829
146945
|
if (typeof value3 === "string" || typeof value3 === "number" || typeof value3 === "boolean") return true;
|
|
146830
146946
|
return Array.isArray(value3) && value3.every((x) => typeof x === "string");
|
|
146831
146947
|
}
|
|
146832
|
-
function
|
|
146948
|
+
function coerceAnswer(field, text) {
|
|
146833
146949
|
const trimmed = text.trim();
|
|
146834
|
-
if (
|
|
146835
|
-
|
|
146836
|
-
|
|
146837
|
-
|
|
146838
|
-
|
|
146839
|
-
|
|
146840
|
-
|
|
146950
|
+
if (!field) return trimmed;
|
|
146951
|
+
switch (field.type) {
|
|
146952
|
+
case "number": {
|
|
146953
|
+
const n = Number(trimmed);
|
|
146954
|
+
return trimmed !== "" && Number.isFinite(n) ? n : trimmed;
|
|
146955
|
+
}
|
|
146956
|
+
case "integer": {
|
|
146957
|
+
const n = Number.parseInt(trimmed, 10);
|
|
146958
|
+
return Number.isFinite(n) && String(n) === trimmed ? n : trimmed;
|
|
146959
|
+
}
|
|
146960
|
+
case "boolean": {
|
|
146961
|
+
const parsed = parseBooleanText(trimmed);
|
|
146962
|
+
return parsed === void 0 ? trimmed : parsed;
|
|
146963
|
+
}
|
|
146964
|
+
case "multiselect": {
|
|
146965
|
+
const parts = trimmed.split(/[、,,;;\n]+/).map((s) => s.trim()).filter(Boolean);
|
|
146966
|
+
if (parts.length === 0) return trimmed;
|
|
146967
|
+
return parts.map((p) => matchOption(field, p) ?? p);
|
|
146968
|
+
}
|
|
146969
|
+
default:
|
|
146970
|
+
return matchOption(field, trimmed) ?? trimmed;
|
|
146841
146971
|
}
|
|
146842
|
-
|
|
146972
|
+
}
|
|
146973
|
+
function matchOption(field, text) {
|
|
146974
|
+
if (!field.options?.length) return void 0;
|
|
146975
|
+
const trimmed = text.trim();
|
|
146976
|
+
const lower = trimmed.toLowerCase();
|
|
146977
|
+
const hit = field.options.find(
|
|
146978
|
+
(o) => o.value === trimmed || o.label.trim() === trimmed || o.label.trim().toLowerCase() === lower
|
|
146979
|
+
);
|
|
146980
|
+
return hit?.value;
|
|
146981
|
+
}
|
|
146982
|
+
var TRUE_WORDS = /* @__PURE__ */ new Set(["\u662F", "\u5BF9", "\u597D", "\u53EF\u4EE5", "\u5141\u8BB8", "\u786E\u8BA4", "\u540C\u610F", "yes", "y", "true", "1"]);
|
|
146983
|
+
var FALSE_WORDS = /* @__PURE__ */ new Set(["\u5426", "\u4E0D", "\u4E0D\u884C", "\u62D2\u7EDD", "\u53D6\u6D88", "\u4E0D\u8981", "no", "n", "false", "0"]);
|
|
146984
|
+
function parseBooleanText(text) {
|
|
146985
|
+
const lower = text.trim().toLowerCase();
|
|
146986
|
+
if (TRUE_WORDS.has(lower)) return true;
|
|
146987
|
+
if (FALSE_WORDS.has(lower)) return false;
|
|
146988
|
+
return void 0;
|
|
146843
146989
|
}
|
|
146844
146990
|
function serviceStatePath(env = process.env) {
|
|
146845
146991
|
const base2 = env["XDG_STATE_HOME"] ?? join(homedir(), ".local", "state");
|
|
@@ -146899,6 +147045,126 @@ async function replyFormOverHttp(input, deps) {
|
|
|
146899
147045
|
}
|
|
146900
147046
|
}
|
|
146901
147047
|
|
|
147048
|
+
// src/session/session-list-http.ts
|
|
147049
|
+
async function listSessionsOverHttp(input, deps) {
|
|
147050
|
+
const discover = deps.discover ?? (() => discoverLocalService());
|
|
147051
|
+
const doFetch = deps.fetchImpl ?? fetch;
|
|
147052
|
+
const service3 = await discover();
|
|
147053
|
+
if (!service3) {
|
|
147054
|
+
deps.log.debug("\u672A\u53D1\u73B0\u672C\u673A opencode \u670D\u52A1\uFF0CHTTP \u4F1A\u8BDD\u5217\u8868\u8DF3\u8FC7");
|
|
147055
|
+
return void 0;
|
|
147056
|
+
}
|
|
147057
|
+
const params = new URLSearchParams();
|
|
147058
|
+
params.set("limit", String(input.limit ?? 200));
|
|
147059
|
+
params.set("order", input.order ?? "desc");
|
|
147060
|
+
if (input.rootsOnly ?? true) params.set("parentID", "null");
|
|
147061
|
+
try {
|
|
147062
|
+
const response2 = await doFetch(`${service3.url}/api/session?${params.toString()}`, {
|
|
147063
|
+
method: "GET",
|
|
147064
|
+
headers: { ...authHeaders(service3) },
|
|
147065
|
+
signal: AbortSignal.timeout(deps.timeoutMs ?? 8e3)
|
|
147066
|
+
});
|
|
147067
|
+
if (!response2.ok) {
|
|
147068
|
+
deps.log.debug("HTTP \u4F1A\u8BDD\u5217\u8868\u5931\u8D25", { status: response2.status });
|
|
147069
|
+
return void 0;
|
|
147070
|
+
}
|
|
147071
|
+
return await response2.json();
|
|
147072
|
+
} catch (err2) {
|
|
147073
|
+
deps.log.debug("HTTP \u4F1A\u8BDD\u5217\u8868\u5F02\u5E38", { error: errorMessage(err2) });
|
|
147074
|
+
return void 0;
|
|
147075
|
+
}
|
|
147076
|
+
}
|
|
147077
|
+
|
|
147078
|
+
// src/session/keepalive.ts
|
|
147079
|
+
var KEEPALIVE_SESSION_TITLE = "__opencode_feishu_keepalive__";
|
|
147080
|
+
async function touchLocationOverHttp(directory, deps) {
|
|
147081
|
+
const discover = deps.discover ?? (() => discoverLocalService());
|
|
147082
|
+
const doFetch = deps.fetchImpl ?? fetch;
|
|
147083
|
+
const service3 = await discover();
|
|
147084
|
+
if (!service3) {
|
|
147085
|
+
deps.log.debug("\u4FDD\u6D3B\u8DF3\u8FC7\uFF1A\u672A\u53D1\u73B0\u672C\u673A opencode \u670D\u52A1");
|
|
147086
|
+
return false;
|
|
147087
|
+
}
|
|
147088
|
+
const headers = {
|
|
147089
|
+
"content-type": "application/json",
|
|
147090
|
+
...authHeaders(service3)
|
|
147091
|
+
};
|
|
147092
|
+
const timeout3 = deps.timeoutMs ?? 8e3;
|
|
147093
|
+
const signal = () => AbortSignal.timeout(timeout3);
|
|
147094
|
+
let touched = false;
|
|
147095
|
+
try {
|
|
147096
|
+
const params = new URLSearchParams({ limit: "1", parentID: "null" });
|
|
147097
|
+
if (directory) params.set("directory", directory);
|
|
147098
|
+
const listRes = await doFetch(`${service3.url}/api/session?${params.toString()}`, {
|
|
147099
|
+
method: "GET",
|
|
147100
|
+
headers,
|
|
147101
|
+
signal: signal()
|
|
147102
|
+
});
|
|
147103
|
+
if (listRes.ok) {
|
|
147104
|
+
const list = await listRes.json().catch(() => void 0);
|
|
147105
|
+
const target = list?.data?.[0]?.id;
|
|
147106
|
+
if (target) {
|
|
147107
|
+
const getRes = await doFetch(`${service3.url}/api/session/${encodeURIComponent(target)}`, {
|
|
147108
|
+
method: "GET",
|
|
147109
|
+
headers,
|
|
147110
|
+
signal: signal()
|
|
147111
|
+
});
|
|
147112
|
+
touched = getRes.ok;
|
|
147113
|
+
}
|
|
147114
|
+
}
|
|
147115
|
+
} catch (err2) {
|
|
147116
|
+
deps.log.debug("\u4FDD\u6D3B\u4F1A\u8BDD\u7EA7\u7EED\u671F\u5931\u8D25", { directory, error: errorMessage(err2) });
|
|
147117
|
+
}
|
|
147118
|
+
let sessionID;
|
|
147119
|
+
try {
|
|
147120
|
+
const response2 = await doFetch(`${service3.url}/api/session`, {
|
|
147121
|
+
method: "POST",
|
|
147122
|
+
headers,
|
|
147123
|
+
body: JSON.stringify({
|
|
147124
|
+
title: KEEPALIVE_SESSION_TITLE,
|
|
147125
|
+
...directory ? { location: { directory } } : {}
|
|
147126
|
+
}),
|
|
147127
|
+
signal: signal()
|
|
147128
|
+
});
|
|
147129
|
+
if (response2.ok) {
|
|
147130
|
+
const body = await response2.json().catch(() => void 0);
|
|
147131
|
+
sessionID = body?.data?.id;
|
|
147132
|
+
touched = true;
|
|
147133
|
+
} else {
|
|
147134
|
+
deps.log.debug("\u4FDD\u6D3B\u63A2\u9488\u521B\u5EFA\u5931\u8D25", { status: response2.status, directory });
|
|
147135
|
+
}
|
|
147136
|
+
} catch (err2) {
|
|
147137
|
+
deps.log.debug("\u4FDD\u6D3B\u63A2\u9488\u521B\u5EFA\u5F02\u5E38", { directory, error: errorMessage(err2) });
|
|
147138
|
+
}
|
|
147139
|
+
if (sessionID) {
|
|
147140
|
+
try {
|
|
147141
|
+
await doFetch(`${service3.url}/api/session/${encodeURIComponent(sessionID)}`, {
|
|
147142
|
+
method: "DELETE",
|
|
147143
|
+
headers,
|
|
147144
|
+
signal: signal()
|
|
147145
|
+
});
|
|
147146
|
+
} catch {
|
|
147147
|
+
}
|
|
147148
|
+
}
|
|
147149
|
+
if (touched) deps.log.debug("\u4FDD\u6D3B\u5FC3\u8DF3\u5DF2\u53D1\u9001", { directory, probe: sessionID ?? "(none)" });
|
|
147150
|
+
return touched;
|
|
147151
|
+
}
|
|
147152
|
+
function startKeepalive(deps) {
|
|
147153
|
+
const setIntervalImpl = deps.setIntervalImpl ?? setInterval;
|
|
147154
|
+
const clearIntervalImpl = deps.clearIntervalImpl ?? clearInterval;
|
|
147155
|
+
const touch = deps.touch ?? ((dir) => touchLocationOverHttp(dir, { log: deps.log }));
|
|
147156
|
+
const timer = setIntervalImpl(() => {
|
|
147157
|
+
void touch(deps.directory).catch((err2) => {
|
|
147158
|
+
deps.log.debug("\u4FDD\u6D3B\u5FC3\u8DF3\u5F02\u5E38", { error: errorMessage(err2) });
|
|
147159
|
+
});
|
|
147160
|
+
}, deps.intervalMs);
|
|
147161
|
+
timer.unref?.();
|
|
147162
|
+
deps.log.info("\u4F4D\u7F6E\u4FDD\u6D3B\u5DF2\u542F\u52A8", { directory: deps.directory, intervalMs: deps.intervalMs });
|
|
147163
|
+
return () => {
|
|
147164
|
+
clearIntervalImpl(timer);
|
|
147165
|
+
};
|
|
147166
|
+
}
|
|
147167
|
+
|
|
146902
147168
|
// src/feishu/commands.ts
|
|
146903
147169
|
var ALIASES = {
|
|
146904
147170
|
new: "new",
|
|
@@ -149391,28 +149657,53 @@ async function cmdSessions(ctx, message, page = 0) {
|
|
|
149391
149657
|
}
|
|
149392
149658
|
}
|
|
149393
149659
|
async function loadSessionEntries(ctx, chatId) {
|
|
149394
|
-
|
|
149395
|
-
|
|
149396
|
-
|
|
149397
|
-
|
|
149398
|
-
if (normalized) {
|
|
149399
|
-
ctx.deps.log.info("\u5217\u51FA\u5168\u90E8\u4F1A\u8BDD", { count: normalized.length, source: "session.list" });
|
|
149400
|
-
return normalized;
|
|
149401
|
-
}
|
|
149402
|
-
ctx.deps.log.warn("session.list \u8FD4\u56DE\u5F62\u72B6\u65E0\u6CD5\u8BC6\u522B\uFF0C\u56DE\u9000 SessionMap \u5217\u8868", { chatId });
|
|
149403
|
-
} catch (err2) {
|
|
149404
|
-
ctx.deps.log.warn("session.list \u8C03\u7528\u5931\u8D25\uFF0C\u56DE\u9000 SessionMap \u5217\u8868", {
|
|
149405
|
-
chatId,
|
|
149406
|
-
error: errorMessage(err2)
|
|
149407
|
-
});
|
|
149408
|
-
}
|
|
149409
|
-
} else {
|
|
149410
|
-
ctx.deps.log.warn("\u8FD0\u884C\u65F6\u672A\u66B4\u9732 session.list\uFF0C\u56DE\u9000 SessionMap \u5217\u8868", { chatId });
|
|
149411
|
-
}
|
|
149660
|
+
const viaApi = await loadViaSessionListApi(ctx, chatId);
|
|
149661
|
+
if (viaApi) return viaApi;
|
|
149662
|
+
const viaHttp = await loadViaHttp(ctx, chatId);
|
|
149663
|
+
if (viaHttp) return viaHttp;
|
|
149412
149664
|
const fallback = fallbackEntries(await ctx.deps.sessionMap.listSessions(chatId));
|
|
149413
149665
|
ctx.deps.log.warn("\u4F1A\u8BDD\u5217\u8868\u56DE\u9000\u5230 SessionMap", { chatId, count: fallback.length });
|
|
149414
149666
|
return fallback;
|
|
149415
149667
|
}
|
|
149668
|
+
async function loadViaSessionListApi(ctx, chatId) {
|
|
149669
|
+
if (!ctx.deps.listAllSessions) {
|
|
149670
|
+
ctx.deps.log.warn("\u8FD0\u884C\u65F6\u672A\u66B4\u9732 session.list\uFF0C\u5C1D\u8BD5 HTTP \u515C\u5E95", { chatId });
|
|
149671
|
+
return void 0;
|
|
149672
|
+
}
|
|
149673
|
+
try {
|
|
149674
|
+
const raw = await ctx.deps.listAllSessions();
|
|
149675
|
+
const normalized = normalizeSessionList(raw);
|
|
149676
|
+
if (normalized) {
|
|
149677
|
+
ctx.deps.log.info("\u5217\u51FA\u5168\u90E8\u4F1A\u8BDD", { count: normalized.length, source: "session.list" });
|
|
149678
|
+
return normalized;
|
|
149679
|
+
}
|
|
149680
|
+
ctx.deps.log.warn("session.list \u8FD4\u56DE\u5F62\u72B6\u65E0\u6CD5\u8BC6\u522B\uFF0C\u5C1D\u8BD5 HTTP \u515C\u5E95", { chatId });
|
|
149681
|
+
} catch (err2) {
|
|
149682
|
+
ctx.deps.log.warn("session.list \u8C03\u7528\u5931\u8D25\uFF0C\u5C1D\u8BD5 HTTP \u515C\u5E95", {
|
|
149683
|
+
chatId,
|
|
149684
|
+
error: errorMessage(err2)
|
|
149685
|
+
});
|
|
149686
|
+
}
|
|
149687
|
+
return void 0;
|
|
149688
|
+
}
|
|
149689
|
+
async function loadViaHttp(ctx, chatId) {
|
|
149690
|
+
if (!ctx.deps.listAllSessionsHttp) return void 0;
|
|
149691
|
+
try {
|
|
149692
|
+
const raw = await ctx.deps.listAllSessionsHttp();
|
|
149693
|
+
const normalized = normalizeSessionList(raw);
|
|
149694
|
+
if (normalized) {
|
|
149695
|
+
ctx.deps.log.info("\u5217\u51FA\u5168\u90E8\u4F1A\u8BDD", { count: normalized.length, source: "http" });
|
|
149696
|
+
return normalized;
|
|
149697
|
+
}
|
|
149698
|
+
ctx.deps.log.warn("HTTP \u4F1A\u8BDD\u5217\u8868\u5F62\u72B6\u65E0\u6CD5\u8BC6\u522B\uFF0C\u56DE\u9000 SessionMap \u5217\u8868", { chatId });
|
|
149699
|
+
} catch (err2) {
|
|
149700
|
+
ctx.deps.log.warn("HTTP \u4F1A\u8BDD\u5217\u8868\u8C03\u7528\u5931\u8D25\uFF0C\u56DE\u9000 SessionMap \u5217\u8868", {
|
|
149701
|
+
chatId,
|
|
149702
|
+
error: errorMessage(err2)
|
|
149703
|
+
});
|
|
149704
|
+
}
|
|
149705
|
+
return void 0;
|
|
149706
|
+
}
|
|
149416
149707
|
async function buildListCard(ctx, chatId, entries3, page, activeID) {
|
|
149417
149708
|
const pageSize = ctx.sessionPageSize;
|
|
149418
149709
|
const pageCount = Math.max(1, Math.ceil(entries3.length / pageSize));
|
|
@@ -149449,6 +149740,13 @@ async function enterSessionThread(ctx, input) {
|
|
|
149449
149740
|
const info = input.info;
|
|
149450
149741
|
const link2 = await ctx.deps.sessionMap.resolveBySession(sessionID);
|
|
149451
149742
|
const dir = info?.directory ?? link2?.dir;
|
|
149743
|
+
if (!link2) {
|
|
149744
|
+
await ctx.deps.sessionMap.ensureSessionLink(sessionID, {
|
|
149745
|
+
chatId,
|
|
149746
|
+
openId: operatorOpenId,
|
|
149747
|
+
...dir ? { directory: dir } : {}
|
|
149748
|
+
});
|
|
149749
|
+
}
|
|
149452
149750
|
const showSummary = (ctx.deps.resumeSummary ?? true) && Boolean(ctx.deps.summarizeSession);
|
|
149453
149751
|
const onLimit = (report) => {
|
|
149454
149752
|
ctx.deps.log.warn("\u4F1A\u8BDD\u6062\u590D\u5361\u5185\u5BB9\u8D85\u9650\uFF0C\u5DF2\u964D\u7EA7", { sessionID, ...report });
|
|
@@ -150096,13 +150394,13 @@ var SummaryTimeoutError = class extends Error {
|
|
|
150096
150394
|
}
|
|
150097
150395
|
};
|
|
150098
150396
|
function withTimeout(promise3, ms) {
|
|
150099
|
-
return new Promise((
|
|
150397
|
+
return new Promise((resolve4, reject) => {
|
|
150100
150398
|
const timer = setTimeout(() => reject(new SummaryTimeoutError()), Math.max(1, ms));
|
|
150101
150399
|
timer.unref?.();
|
|
150102
150400
|
promise3.then(
|
|
150103
150401
|
(value3) => {
|
|
150104
150402
|
clearTimeout(timer);
|
|
150105
|
-
|
|
150403
|
+
resolve4(value3);
|
|
150106
150404
|
},
|
|
150107
150405
|
(err2) => {
|
|
150108
150406
|
clearTimeout(timer);
|
|
@@ -150234,7 +150532,7 @@ var CompactController = class {
|
|
|
150234
150532
|
constructor(deps) {
|
|
150235
150533
|
this.deps = deps;
|
|
150236
150534
|
this.now = deps.now ?? (() => Date.now());
|
|
150237
|
-
this.sleep = deps.sleep ?? ((ms) => new Promise((
|
|
150535
|
+
this.sleep = deps.sleep ?? ((ms) => new Promise((resolve4) => setTimeout(resolve4, ms)));
|
|
150238
150536
|
}
|
|
150239
150537
|
deps;
|
|
150240
150538
|
now;
|
|
@@ -150575,13 +150873,13 @@ async function quickGenerateWithSession(deps, input) {
|
|
|
150575
150873
|
return { route: "http", result: result3 };
|
|
150576
150874
|
}
|
|
150577
150875
|
function withAttemptTimeout(promise3, ms) {
|
|
150578
|
-
return new Promise((
|
|
150876
|
+
return new Promise((resolve4, reject) => {
|
|
150579
150877
|
const timer = setTimeout(() => reject(new Error("generate-attempt-timeout")), Math.max(1, ms));
|
|
150580
150878
|
timer.unref?.();
|
|
150581
150879
|
promise3.then(
|
|
150582
150880
|
(value3) => {
|
|
150583
150881
|
clearTimeout(timer);
|
|
150584
|
-
|
|
150882
|
+
resolve4(value3);
|
|
150585
150883
|
},
|
|
150586
150884
|
(err2) => {
|
|
150587
150885
|
clearTimeout(timer);
|
|
@@ -150619,11 +150917,20 @@ var index_default = plugin_exports.define({
|
|
|
150619
150917
|
hasAppSecret: hasSecret(config.appSecret)
|
|
150620
150918
|
});
|
|
150621
150919
|
const here = ctx.location?.directory;
|
|
150622
|
-
if (config.gatewayLocation
|
|
150623
|
-
|
|
150624
|
-
|
|
150625
|
-
|
|
150626
|
-
|
|
150920
|
+
if (config.gatewayLocation) {
|
|
150921
|
+
const matched = Boolean(here) && isUnder(here, config.gatewayLocation);
|
|
150922
|
+
trackGatewayLocationSeen({
|
|
150923
|
+
here: here ?? "(unknown)",
|
|
150924
|
+
expected: config.gatewayLocation,
|
|
150925
|
+
matched,
|
|
150926
|
+
warn: (message) => log2.warn(message),
|
|
150927
|
+
...matched ? {} : { onSettled: () => logSink?.close() }
|
|
150928
|
+
});
|
|
150929
|
+
if (!matched) {
|
|
150930
|
+
log2.debug("\u8DF3\u8FC7\u975E\u7F51\u5173 location", { here, expected: config.gatewayLocation });
|
|
150931
|
+
return async () => {
|
|
150932
|
+
};
|
|
150933
|
+
}
|
|
150627
150934
|
}
|
|
150628
150935
|
if (!acquireProcessGuard()) {
|
|
150629
150936
|
log2.debug("\u68C0\u6D4B\u5230\u540C\u8FDB\u7A0B\u91CD\u590D setup\uFF0C\u8DF3\u8FC7\u542F\u52A8\uFF08\u4EC5\u9996\u4E2A\u5B9E\u4F8B\u751F\u6548\uFF09");
|
|
@@ -150939,6 +151246,9 @@ async function start(ctx, config, log2, logSink) {
|
|
|
150939
151246
|
sessionPageSize: config.sessionPageSize,
|
|
150940
151247
|
threadRouting: config.threadRouting,
|
|
150941
151248
|
listAllSessions: listAllSessionsRaw,
|
|
151249
|
+
// `ctx.session.list` 在 V2 运行时未暴露 → 本机 HTTP `GET /api/session`
|
|
151250
|
+
// 兜底列出全量会话(含 TUI/Web 来源)。
|
|
151251
|
+
listAllSessionsHttp: () => listSessionsOverHttp({}, { log: log2 }),
|
|
150942
151252
|
getSessionInfo: getSessionInfoRaw,
|
|
150943
151253
|
resumeSummary: config.resumeSummary,
|
|
150944
151254
|
resumeSummaryTimeoutMs: config.resumeSummaryTimeoutMs,
|
|
@@ -151175,6 +151485,13 @@ async function start(ctx, config, log2, logSink) {
|
|
|
151175
151485
|
const res = link2.replyMessageId ? await sender.replyCard(link2.replyMessageId, card) : await sender.sendCard(link2.chatId, card);
|
|
151176
151486
|
if (!res.ok) log2.warn("\u5361\u6B7B\u63D0\u793A\u5361\u53D1\u9001\u5931\u8D25", { sessionID, error: res.error ?? "unknown" });
|
|
151177
151487
|
}
|
|
151488
|
+
const here = ctx.location?.directory;
|
|
151489
|
+
const keepaliveDirectory = here ?? config.gatewayLocation;
|
|
151490
|
+
const stopKeepalive = config.keepalive && keepaliveDirectory ? startKeepalive({
|
|
151491
|
+
log: log2,
|
|
151492
|
+
directory: keepaliveDirectory,
|
|
151493
|
+
intervalMs: config.keepaliveIntervalMs
|
|
151494
|
+
}) : void 0;
|
|
151178
151495
|
log2.info("\u98DE\u4E66\u63D2\u4EF6\u5DF2\u5C31\u7EEA");
|
|
151179
151496
|
let cleanedUp = false;
|
|
151180
151497
|
return async () => {
|
|
@@ -151183,6 +151500,7 @@ async function start(ctx, config, log2, logSink) {
|
|
|
151183
151500
|
log2.info("\u98DE\u4E66\u63D2\u4EF6\u5378\u8F7D\u4E2D");
|
|
151184
151501
|
abort.abort();
|
|
151185
151502
|
stopWatchdog();
|
|
151503
|
+
stopKeepalive?.();
|
|
151186
151504
|
await subscription.catch(() => void 0);
|
|
151187
151505
|
runs.dispose();
|
|
151188
151506
|
executions.clear();
|