@yoooclaw/phone-notifications 1.12.3 → 1.12.4
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 +3 -4
- package/dist/bin/ntf.cjs +327 -9
- package/dist/bin/ntf.cjs.map +9 -7
- package/dist/cli/doctor/check-local-gateway.d.ts +3 -0
- package/dist/cli/doctor/check-local-gateway.d.ts.map +1 -0
- package/dist/cli/doctor/checkers.d.ts.map +1 -1
- package/dist/env.d.ts +8 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/fs-atomic.d.ts +11 -0
- package/dist/fs-atomic.d.ts.map +1 -0
- package/dist/image/store.d.ts.map +1 -1
- package/dist/index.cjs +2084 -740
- package/dist/index.cjs.map +34 -24
- package/dist/index.d.ts.map +1 -1
- package/dist/light/sender.d.ts +14 -3
- package/dist/light/sender.d.ts.map +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/notification/storage.d.ts +4 -3
- package/dist/notification/storage.d.ts.map +1 -1
- package/dist/plugin/auto-update.d.ts +2 -0
- package/dist/plugin/auto-update.d.ts.map +1 -1
- package/dist/plugin/lifecycle.d.ts +7 -14
- package/dist/plugin/lifecycle.d.ts.map +1 -1
- package/dist/plugin/light-control.d.ts.map +1 -1
- package/dist/plugin/light-rules-tools.d.ts.map +1 -1
- package/dist/plugin/notifications.d.ts +1 -0
- package/dist/plugin/notifications.d.ts.map +1 -1
- package/dist/plugin/register-guard.d.ts +16 -0
- package/dist/plugin/register-guard.d.ts.map +1 -0
- package/dist/plugin/runtime.d.ts +64 -0
- package/dist/plugin/runtime.d.ts.map +1 -0
- package/dist/plugin/shared-storage.d.ts +31 -0
- package/dist/plugin/shared-storage.d.ts.map +1 -0
- package/dist/plugin/system.d.ts +17 -0
- package/dist/plugin/system.d.ts.map +1 -0
- package/dist/recording/storage.d.ts +2 -1
- package/dist/recording/storage.d.ts.map +1 -1
- package/dist/system/os-info.d.ts +34 -0
- package/dist/system/os-info.d.ts.map +1 -0
- package/dist/tunnel/connect-status-reporter.d.ts.map +1 -1
- package/dist/tunnel/frame-slimmer.d.ts +82 -1
- package/dist/tunnel/frame-slimmer.d.ts.map +1 -1
- package/dist/tunnel/gateway-target.d.ts +17 -0
- package/dist/tunnel/gateway-target.d.ts.map +1 -0
- package/dist/tunnel/http-proxy.d.ts.map +1 -1
- package/dist/tunnel/proxy.d.ts +20 -1
- package/dist/tunnel/proxy.d.ts.map +1 -1
- package/dist/tunnel/service.d.ts.map +1 -1
- package/dist/update/executor.d.ts +3 -3
- package/dist/update/executor.d.ts.map +1 -1
- package/dist/update/index.d.ts +3 -2
- package/dist/update/index.d.ts.map +1 -1
- package/dist/update/stale-runtime.d.ts +43 -0
- package/dist/update/stale-runtime.d.ts.map +1 -0
- package/openclaw.plugin.json +1 -0
- package/package.json +1 -1
- package/skills/notification-monitor/SKILL.md +2 -2
- package/skills/notification-to-memory/SKILL.md +2 -2
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;;;;kBAyE7C,iBAAiB;;AAJjC,wBAsRE"}
|
package/dist/light/sender.d.ts
CHANGED
|
@@ -1,14 +1,25 @@
|
|
|
1
1
|
import type { LightSegment } from "../types.js";
|
|
2
|
-
import type
|
|
2
|
+
import { type RepeatArgument } from "./repeat.js";
|
|
3
3
|
export interface SendLightResult {
|
|
4
4
|
ok: boolean;
|
|
5
5
|
bizUniqueId?: string;
|
|
6
6
|
response?: unknown;
|
|
7
7
|
status?: number;
|
|
8
8
|
error?: string;
|
|
9
|
+
/** 本次实际走的下发链路:notification-intelligence 新入口或 message-service 旧链路 */
|
|
10
|
+
via?: "notification-intelligence" | "message-service";
|
|
9
11
|
}
|
|
10
|
-
export
|
|
12
|
+
export interface SendLightOptions {
|
|
13
|
+
/**
|
|
14
|
+
* 调用方幂等标识,透传给一次性亮灯入口的 bizUniqueId;
|
|
15
|
+
* 未传时由服务端生成。仅对 notification-intelligence 链路生效。
|
|
16
|
+
*/
|
|
17
|
+
bizUniqueId?: string;
|
|
18
|
+
}
|
|
19
|
+
interface LightLogger {
|
|
11
20
|
info: (msg: string) => void;
|
|
12
21
|
warn: (msg: string) => void;
|
|
13
|
-
}
|
|
22
|
+
}
|
|
23
|
+
export declare function sendLightEffect(apiKey: string, segments: LightSegment[], logger?: LightLogger, repeatInput?: RepeatArgument, reason?: string, title?: string, options?: SendLightOptions): Promise<SendLightResult>;
|
|
24
|
+
export {};
|
|
14
25
|
//# sourceMappingURL=sender.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sender.d.ts","sourceRoot":"","sources":["../../src/light/sender.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"sender.d.ts","sourceRoot":"","sources":["../../src/light/sender.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAExE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,GAAG,CAAC,EAAE,2BAA2B,GAAG,iBAAiB,CAAC;CACvD;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,YAAY,EAAE,EACxB,MAAM,CAAC,EAAE,WAAW,EACpB,WAAW,CAAC,EAAE,cAAc,EAC5B,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,CAAC,CAkC1B"}
|
package/dist/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAKD,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AA+ED,wBAAgB,mBAAmB,CAAC,OAAO,SAAiB,GAAG,OAAO,CAErE;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,IAAI,CAAC,uBAAuB,EAAE,SAAS,CAAM,GACrD,MAAM,CAgBR;AAED;;;;;GAKG;AACH,qBAAa,gBAAiB,YAAW,MAAM;IAO3C,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAN3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,gBAAgB,CAAuB;gBAG5B,QAAQ,EAAE,MAAM,EACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,uBAA4B;IAevC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAKD,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AA+ED,wBAAgB,mBAAmB,CAAC,OAAO,SAAiB,GAAG,OAAO,CAErE;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,IAAI,CAAC,uBAAuB,EAAE,SAAS,CAAM,GACrD,MAAM,CAgBR;AAED;;;;;GAKG;AACH,qBAAa,gBAAiB,YAAW,MAAM;IAO3C,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAN3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,gBAAgB,CAAuB;gBAG5B,QAAQ,EAAE,MAAM,EACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,uBAA4B;IAevC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMvB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMvB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMxB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,MAAM;IAYd,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,gBAAgB;CAgBzB;AAqDD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAwBpD;AAqMD,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAgBpD"}
|
|
@@ -54,13 +54,16 @@ export declare class NotificationStorage {
|
|
|
54
54
|
private contentKeyIndexDir;
|
|
55
55
|
private idCache;
|
|
56
56
|
private contentKeyCache;
|
|
57
|
+
private dayEntriesCache;
|
|
57
58
|
private dateWriteChains;
|
|
58
59
|
private resolveDisplayName;
|
|
59
60
|
constructor(dir: string, logger: Logger, resolveDisplayName?: ResolveDisplayName);
|
|
60
61
|
getStorageDir(): string;
|
|
61
62
|
init(): Promise<void>;
|
|
62
63
|
ingest(items: RawNotification[], ingestId?: string): Promise<NotificationIngestResult>;
|
|
63
|
-
private
|
|
64
|
+
private writeDayNotifications;
|
|
65
|
+
/** 当日条目内存缓存:一天内的高频写入只读盘一次 */
|
|
66
|
+
private getDayEntries;
|
|
64
67
|
private buildStoredNotification;
|
|
65
68
|
private formatDate;
|
|
66
69
|
private getIdIndexPath;
|
|
@@ -71,8 +74,6 @@ export declare class NotificationStorage {
|
|
|
71
74
|
private getContentKeyIndexPath;
|
|
72
75
|
private getContentKeySet;
|
|
73
76
|
private hasNotificationContentKey;
|
|
74
|
-
private recordNotificationId;
|
|
75
|
-
private recordNotificationContentKey;
|
|
76
77
|
private buildNotificationContentKey;
|
|
77
78
|
private contentKeyLabels;
|
|
78
79
|
private readStoredNotifications;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/notification/storage.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD,UAAU,MAAM;IACd,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,MAAM,MAAM,4BAA4B,GAAG,SAAS,GAAG,OAAO,CAAC;AAE/D,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,2DAA2D;AAC3D,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS;IACT,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,gBAAgB,CAAC,EAAE,4BAA4B,CAAC;IAChD,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAMD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,QAAQ,EAAE,kBAAkB,EAAE,CAAC;CAChC;AAQD,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAExE;AAmCD,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GACpC,MAAM,CAqBR;AAED,mDAAmD;AACnD,MAAM,MAAM,kBAAkB,GAAG,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/notification/storage.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD,UAAU,MAAM;IACd,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,MAAM,MAAM,4BAA4B,GAAG,SAAS,GAAG,OAAO,CAAC;AAE/D,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,2DAA2D;AAC3D,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS;IACT,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,gBAAgB,CAAC,EAAE,4BAA4B,CAAC;IAChD,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAMD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,QAAQ,EAAE,kBAAkB,EAAE,CAAC;CAChC;AAQD,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAExE;AAmCD,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GACpC,MAAM,CAqBR;AAED,mDAAmD;AACnD,MAAM,MAAM,kBAAkB,GAAG,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAK1E,qBAAa,mBAAmB;IAY5B,OAAO,CAAC,MAAM;IAXhB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,eAAe,CAA2C;IAClE,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,kBAAkB,CAAiC;gBAGzD,GAAG,EAAE,MAAM,EACH,MAAM,EAAE,MAAM,EACtB,kBAAkB,CAAC,EAAE,kBAAkB;IAQzC,aAAa,IAAI,MAAM;IAIjB,IAAI;IAOJ,MAAM,CACV,KAAK,EAAE,eAAe,EAAE,EACxB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,wBAAwB,CAAC;YA2DtB,qBAAqB;IAsFnC,6BAA6B;IAC7B,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,uBAAuB;IAuB/B,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,QAAQ;IAsBhB,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,yBAAyB;IAWjC,OAAO,CAAC,2BAA2B;IAgBnC,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,uBAAuB;YAoBjB,iBAAiB;IAuBzB,KAAK;CAMZ"}
|
|
@@ -12,6 +12,8 @@ interface AutoUpdateDeps {
|
|
|
12
12
|
cacheBroadcast: (broadcast: BroadcastFn | undefined) => void;
|
|
13
13
|
tunnelService: ReturnType<typeof createTunnelService> | null;
|
|
14
14
|
}
|
|
15
|
+
type AutoUpdateAgentToolDeps = Pick<AutoUpdateDeps, "api" | "config" | "logger">;
|
|
16
|
+
export declare function registerAutoUpdateAgentTool({ api, config, logger, }: AutoUpdateAgentToolDeps): void;
|
|
15
17
|
export declare function registerAutoUpdateLifecycle(deps: AutoUpdateDeps): ReturnType<typeof registerAutoUpdate>;
|
|
16
18
|
export {};
|
|
17
19
|
//# sourceMappingURL=auto-update.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-update.d.ts","sourceRoot":"","sources":["../../src/plugin/auto-update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,
|
|
1
|
+
{"version":3,"file":"auto-update.d.ts","sourceRoot":"","sources":["../../src/plugin/auto-update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EACL,kBAAkB,EAEnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtD,UAAU,cAAc;IACtB,GAAG,EAAE,iBAAiB,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACzC,cAAc,EAAE,CAAC,SAAS,EAAE,WAAW,GAAG,SAAS,KAAK,IAAI,CAAC;IAC7D,aAAa,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,GAAG,IAAI,CAAC;CAC9D;AAED,KAAK,uBAAuB,GAAG,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC;AAkBjF,wBAAgB,2BAA2B,CAAC,EAC1C,GAAG,EACH,MAAM,EACN,MAAM,GACP,EAAE,uBAAuB,GAAG,IAAI,CAIhC;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,cAAc,GACnB,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAsCvC"}
|
|
@@ -1,26 +1,19 @@
|
|
|
1
1
|
import type { OpenClawPluginApi } from "openclaw/plugin-sdk";
|
|
2
2
|
import type { Logger } from "../logger.js";
|
|
3
|
-
import { NotificationStorage } from "../notification/storage.js";
|
|
4
|
-
import { RecordingStorage } from "../recording/index.js";
|
|
5
|
-
import { ImageStorage } from "../image/index.js";
|
|
6
3
|
import { type RelayTunnelService } from "../tunnel/service.js";
|
|
7
4
|
import type { PluginConfig } from "../types.js";
|
|
8
|
-
|
|
9
|
-
workspaceDir?: string;
|
|
10
|
-
stateDir?: string;
|
|
11
|
-
}
|
|
5
|
+
import type { PluginRuntime } from "./runtime.js";
|
|
12
6
|
interface StorageLifecycleDeps {
|
|
13
7
|
api: OpenClawPluginApi;
|
|
14
8
|
logger: Logger;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
setRecordingStorage: (storage: RecordingStorage | null) => void;
|
|
18
|
-
setImageStorage: (storage: ImageStorage | null) => void;
|
|
9
|
+
/** 存储句柄经 runtime.markStorageReady 发布,就绪事件由 runtime 分发。 */
|
|
10
|
+
runtime: PluginRuntime;
|
|
19
11
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
12
|
+
* 进程级共享存储注册表的键(用 register() 阶段的 openclawDir)。路由 handler
|
|
13
|
+
* 在本次 runtime 未就绪时回落到该键读取已启动的存储句柄,规避宿主多次
|
|
14
|
+
* register() 造成的 stale runtime → 503 问题。
|
|
22
15
|
*/
|
|
23
|
-
|
|
16
|
+
sharedStorageKey?: string;
|
|
24
17
|
}
|
|
25
18
|
export declare function registerStorageLifecycle(deps: StorageLifecycleDeps): void;
|
|
26
19
|
interface RelayTunnelDeps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/plugin/lifecycle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/plugin/lifecycle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAc3C,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAQlD,UAAU,oBAAoB;IAC5B,GAAG,EAAE,iBAAiB,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,OAAO,EAAE,aAAa,CAAC;IACvB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,oBAAoB,GACzB,IAAI,CAyEN;AAuGD,UAAU,eAAe;IACvB,GAAG,EAAE,iBAAiB,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,eAAe,GACpB,kBAAkB,GAAG,IAAI,CAwE3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"light-control.d.ts","sourceRoot":"","sources":["../../src/plugin/light-control.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AA4L3C,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,MAAM,GACb,IAAI,
|
|
1
|
+
{"version":3,"file":"light-control.d.ts","sourceRoot":"","sources":["../../src/plugin/light-control.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AA4L3C,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,MAAM,GACb,IAAI,CAoFN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"light-rules-tools.d.ts","sourceRoot":"","sources":["../../src/plugin/light-rules-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAI3C,OAAO,EAAqB,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"light-rules-tools.d.ts","sourceRoot":"","sources":["../../src/plugin/light-rules-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAI3C,OAAO,EAAqB,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAqMpF,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,iBAAiB,EACtB,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GACpC,IAAI,CA6KN"}
|
|
@@ -15,6 +15,7 @@ interface NotificationInterfaceDeps {
|
|
|
15
15
|
notifyNotificationSummaryStatus?: (event: NotificationSummaryStatusEvent) => void;
|
|
16
16
|
notifyNotificationSummaryResult?: (event: NotificationSummaryResultEvent) => void;
|
|
17
17
|
tunnelService?: RelayTunnelService | null;
|
|
18
|
+
agentToolsOnly?: boolean;
|
|
18
19
|
}
|
|
19
20
|
export declare function registerNotificationInterfaces(deps: NotificationInterfaceDeps): void;
|
|
20
21
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../src/plugin/notifications.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAEL,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAQL,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,EACpC,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAGV,eAAe,EAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,aAAa,CAAC;AAwDrB,UAAU,yBAAyB;IACjC,GAAG,EAAE,iBAAiB,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,mBAAmB,GAAG,IAAI,CAAC;IAC7C,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,mBAAmB,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,CAAC;IACrE,qBAAqB,EAAE,sBAAsB,CAAC;IAC9C,+BAA+B,CAAC,EAAE,CAAC,KAAK,EAAE,8BAA8B,KAAK,IAAI,CAAC;IAClF,+BAA+B,CAAC,EAAE,CAAC,KAAK,EAAE,8BAA8B,KAAK,IAAI,CAAC;IAClF,aAAa,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../src/plugin/notifications.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAEL,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAQL,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,EACpC,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAGV,eAAe,EAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,aAAa,CAAC;AAwDrB,UAAU,yBAAyB;IACjC,GAAG,EAAE,iBAAiB,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,mBAAmB,GAAG,IAAI,CAAC;IAC7C,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,mBAAmB,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,CAAC;IACrE,qBAAqB,EAAE,sBAAsB,CAAC;IAC9C,+BAA+B,CAAC,EAAE,CAAC,KAAK,EAAE,8BAA8B,KAAK,IAAI,CAAC;IAClF,+BAA+B,CAAC,EAAE,CAAC,KAAK,EAAE,8BAA8B,KAAK,IAAI,CAAC;IAClF,aAAa,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC1C,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAmGD,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,yBAAyB,GAC9B,IAAI,CAyeN"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { PluginRuntime } from "./runtime.js";
|
|
2
|
+
/**
|
|
3
|
+
* 认领本进程内某 openclawDir 的装配。
|
|
4
|
+
* - 已装配:返回既有 runtime,`firstAssembly=false`,调用方应跳过后台 wiring,
|
|
5
|
+
* 但仍需向当前 api collector 注册 Agent 工具。
|
|
6
|
+
* - 未装配:调用 `create()` 生成 runtime 并登记,`firstAssembly=true`。
|
|
7
|
+
*/
|
|
8
|
+
export declare function claimWiredRuntime(key: string | undefined, create: () => PluginRuntime): {
|
|
9
|
+
runtime: PluginRuntime;
|
|
10
|
+
firstAssembly: boolean;
|
|
11
|
+
};
|
|
12
|
+
/** 关停/重启时清除守卫,使下一次 register 重新完整装配。 */
|
|
13
|
+
export declare function releaseWiredRuntime(key: string | undefined): void;
|
|
14
|
+
/** 仅测试用:清空进程级守卫,避免用例间的模块状态串扰。 */
|
|
15
|
+
export declare function resetWiredRuntimesForTest(): void;
|
|
16
|
+
//# sourceMappingURL=register-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-guard.d.ts","sourceRoot":"","sources":["../../src/plugin/register-guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AA+BlD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,MAAM,EAAE,MAAM,aAAa,GAC1B;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,aAAa,EAAE,OAAO,CAAA;CAAE,CASpD;AAED,uCAAuC;AACvC,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAEjE;AAED,iCAAiC;AACjC,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { ImageStorage } from "../image/index.js";
|
|
2
|
+
import type { Logger } from "../logger.js";
|
|
3
|
+
import type { NotificationStorage } from "../notification/storage.js";
|
|
4
|
+
import type { RecordingStorage } from "../recording/index.js";
|
|
5
|
+
import type { RelayTunnelService } from "../tunnel/service.js";
|
|
6
|
+
import type { BroadcastFn } from "../update/types.js";
|
|
7
|
+
/**
|
|
8
|
+
* 插件运行时上下文:集中持有各子系统的共享句柄与就绪状态。
|
|
9
|
+
*
|
|
10
|
+
* register() 阶段所有子系统围绕这一个对象装配:
|
|
11
|
+
* - 存储句柄在 storage service start 完成后由 markStorageReady 一次性写入,
|
|
12
|
+
* 同时回填 lightRuleCtx 的真实 workspaceDir/stateDir;
|
|
13
|
+
* - broadcast 句柄由任意 gateway 请求携带时经 cacheBroadcast 写入;
|
|
14
|
+
* - 消费方用 getter 读取当前状态,用 onStorageReady / onBroadcastChanged
|
|
15
|
+
* 订阅就绪事件。订阅时若已就绪会立即补触发一次,因此订阅注册的先后
|
|
16
|
+
* 顺序不构成隐式时序约束。
|
|
17
|
+
*/
|
|
18
|
+
export declare class PluginRuntime {
|
|
19
|
+
private readonly logger;
|
|
20
|
+
/**
|
|
21
|
+
* 灯效规则目录上下文。LightRuleRegistry 持有同一引用;
|
|
22
|
+
* storage 就绪后由 markStorageReady 回填 workspaceDir/stateDir。
|
|
23
|
+
*/
|
|
24
|
+
readonly lightRuleCtx: {
|
|
25
|
+
workspaceDir?: string;
|
|
26
|
+
stateDir?: string;
|
|
27
|
+
};
|
|
28
|
+
/** Relay 隧道服务;register() 阶段装配一次,未启用隧道时为 null。 */
|
|
29
|
+
tunnelService: RelayTunnelService | null;
|
|
30
|
+
private storage;
|
|
31
|
+
private recordingStorage;
|
|
32
|
+
private imageStorage;
|
|
33
|
+
private broadcastFn;
|
|
34
|
+
private storageReady;
|
|
35
|
+
private readonly storageReadyListeners;
|
|
36
|
+
private readonly broadcastChangedListeners;
|
|
37
|
+
constructor(logger: Logger, stateDir?: string);
|
|
38
|
+
getStorage(): NotificationStorage | null;
|
|
39
|
+
getRecordingStorage(): RecordingStorage | null;
|
|
40
|
+
getImageStorage(): ImageStorage | null;
|
|
41
|
+
getBroadcastFn(): BroadcastFn | null;
|
|
42
|
+
/**
|
|
43
|
+
* storage service start 完成后调用:一次性发布所有存储句柄并回填
|
|
44
|
+
* lightRuleCtx,然后触发 onStorageReady 订阅者。服务重启会再次触发。
|
|
45
|
+
*/
|
|
46
|
+
markStorageReady(params: {
|
|
47
|
+
storage: NotificationStorage;
|
|
48
|
+
recordingStorage: RecordingStorage;
|
|
49
|
+
imageStorage: ImageStorage;
|
|
50
|
+
workspaceDir?: string;
|
|
51
|
+
stateDir: string;
|
|
52
|
+
}): void;
|
|
53
|
+
/** storage service stop 时调用:先下线句柄,再由调用方关闭各存储。 */
|
|
54
|
+
markStorageStopped(): void;
|
|
55
|
+
/** 订阅存储就绪事件;订阅时若已就绪立即补触发一次。 */
|
|
56
|
+
onStorageReady(listener: () => void): void;
|
|
57
|
+
/** gateway 请求携带 broadcast 时缓存;句柄发生变化时通知订阅者。 */
|
|
58
|
+
cacheBroadcast(broadcast: BroadcastFn | undefined): void;
|
|
59
|
+
/** 订阅 broadcast 句柄可用/变化事件;订阅时若已可用立即补触发一次。 */
|
|
60
|
+
onBroadcastChanged(listener: () => void): void;
|
|
61
|
+
private emitAll;
|
|
62
|
+
private emitOne;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/plugin/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;;;;;;;;;GAUG;AACH,qBAAa,aAAa;IAmBtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAlBzB;;;OAGG;IACH,QAAQ,CAAC,YAAY,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAEpE,iDAAiD;IACjD,aAAa,EAAE,kBAAkB,GAAG,IAAI,CAAQ;IAEhD,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAyB;IAC/D,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAyB;gBAGhD,MAAM,EAAE,MAAM,EAC/B,QAAQ,CAAC,EAAE,MAAM;IAKnB,UAAU,IAAI,mBAAmB,GAAG,IAAI;IAIxC,mBAAmB,IAAI,gBAAgB,GAAG,IAAI;IAI9C,eAAe,IAAI,YAAY,GAAG,IAAI;IAItC,cAAc,IAAI,WAAW,GAAG,IAAI;IAIpC;;;OAGG;IACH,gBAAgB,CAAC,MAAM,EAAE;QACvB,OAAO,EAAE,mBAAmB,CAAC;QAC7B,gBAAgB,EAAE,gBAAgB,CAAC;QACnC,YAAY,EAAE,YAAY,CAAC;QAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI;IAUR,iDAAiD;IACjD,kBAAkB,IAAI,IAAI;IAO1B,+BAA+B;IAC/B,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAO1C,+CAA+C;IAC/C,cAAc,CAAC,SAAS,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI;IAWxD,6CAA6C;IAC7C,kBAAkB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAO9C,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,OAAO;CAShB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ImageStorage } from "../image/index.js";
|
|
2
|
+
import type { NotificationStorage } from "../notification/storage.js";
|
|
3
|
+
import type { RecordingStorage } from "../recording/index.js";
|
|
4
|
+
/**
|
|
5
|
+
* 进程级共享存储句柄注册表。
|
|
6
|
+
*
|
|
7
|
+
* 背景:宿主可能对同一个插件多次调用 `register()`(例如每次 agent 运行都会
|
|
8
|
+
* 重跑一遍以解析该 agent 的工具清单)。每次 register() 都会 new 一个新的
|
|
9
|
+
* PluginRuntime,而 `notification-storage` service 的 start() 只在首个 register()
|
|
10
|
+
* 上真正跑过一次。结果是后续 register() 注册(并覆盖)的 HTTP 路由 handler
|
|
11
|
+
* 绑定到一个 storage 恒为 null 的 runtime,导致 POST /notifications 恒返回
|
|
12
|
+
* 503 Service Not Ready,且重启也无法规避(首条 agent 消息一来就复现)。
|
|
13
|
+
*
|
|
14
|
+
* 这里把「已就绪的存储句柄」提升为模块级(进程级)单例:storage service
|
|
15
|
+
* start() 成功后发布,stop() 时清除。路由 handler 在本次 runtime 未就绪时
|
|
16
|
+
* 回落到这里读取,从而复用首个 register() 启动好的同一份存储实例。
|
|
17
|
+
*/
|
|
18
|
+
interface SharedStorageHandles {
|
|
19
|
+
storage: NotificationStorage;
|
|
20
|
+
recordingStorage: RecordingStorage;
|
|
21
|
+
imageStorage: ImageStorage;
|
|
22
|
+
}
|
|
23
|
+
/** storage service start() 成功后调用,发布进程级共享句柄。 */
|
|
24
|
+
export declare function publishSharedStorage(key: string | undefined, handles: SharedStorageHandles): void;
|
|
25
|
+
/** storage service stop() 时调用,清除共享句柄(避免关闭中的实例被读取)。 */
|
|
26
|
+
export declare function clearSharedStorage(key: string | undefined): void;
|
|
27
|
+
export declare function getSharedNotificationStorage(key: string | undefined): NotificationStorage | null;
|
|
28
|
+
export declare function getSharedRecordingStorage(key: string | undefined): RecordingStorage | null;
|
|
29
|
+
export declare function getSharedImageStorage(key: string | undefined): ImageStorage | null;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=shared-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-storage.d.ts","sourceRoot":"","sources":["../../src/plugin/shared-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;;;;;;;;;;GAaG;AACH,UAAU,oBAAoB;IAC5B,OAAO,EAAE,mBAAmB,CAAC;IAC7B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,YAAY,EAAE,YAAY,CAAC;CAC5B;AAUD,+CAA+C;AAC/C,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,OAAO,EAAE,oBAAoB,GAC5B,IAAI,CAEN;AAED,sDAAsD;AACtD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAEhE;AAED,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB,mBAAmB,GAAG,IAAI,CAE5B;AAED,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB,gBAAgB,GAAG,IAAI,CAEzB;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB,YAAY,GAAG,IAAI,CAErB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { OpenClawPluginApi } from "openclaw/plugin-sdk";
|
|
2
|
+
import type { Logger } from "../logger.js";
|
|
3
|
+
import type { GatewayMethodRegistrar } from "./shared.js";
|
|
4
|
+
interface SystemInterfaceDeps {
|
|
5
|
+
api: OpenClawPluginApi;
|
|
6
|
+
logger: Logger;
|
|
7
|
+
registerGatewayMethod: GatewayMethodRegistrar;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* 注册系统信息接口,供客户端查询 openclaw 当前运行的操作系统。
|
|
11
|
+
*
|
|
12
|
+
* - HTTP: `GET /system/os` 返回归一化的操作系统信息(Windows 会区分是否在 WSL 中);
|
|
13
|
+
* - Gateway: `system.os` 返回同样的数据,供 WS 通道复用。
|
|
14
|
+
*/
|
|
15
|
+
export declare function registerSystemInterfaces(deps: SystemInterfaceDeps): void;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=system.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/plugin/system.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE1D,UAAU,mBAAmB;IAC3B,GAAG,EAAE,iBAAiB,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB,EAAE,sBAAsB,CAAC;CAC/C;AAMD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAwBxE"}
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import type { RecordingMetadata, RecordingTransferStatus } from "../types.js";
|
|
18
18
|
import type { Logger } from "../logger.js";
|
|
19
|
+
import { type TranscriptDocument } from "./transcript-document.js";
|
|
19
20
|
/** 持久化到 index.json 的单条录音记录 */
|
|
20
21
|
export interface RecordingIndexEntry {
|
|
21
22
|
/** 录音 ID,基于文件名(如 "2026-03-23_14-32") */
|
|
@@ -124,7 +125,7 @@ export declare class RecordingStorage {
|
|
|
124
125
|
/**
|
|
125
126
|
* 读取结构化 transcript JSON。
|
|
126
127
|
*/
|
|
127
|
-
readTranscriptDocument(recordingId: string):
|
|
128
|
+
readTranscriptDocument(recordingId: string): TranscriptDocument | undefined;
|
|
128
129
|
findById(id: string): RecordingIndexEntry | undefined;
|
|
129
130
|
listAll(): RecordingIndexEntry[];
|
|
130
131
|
listByStatus(status: RecordingTransferStatus): RecordingIndexEntry[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/recording/storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/recording/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** 归一化后的操作系统类别,供客户端直接判断运行环境。 */
|
|
2
|
+
export type OsKind = "windows" | "macos" | "linux" | "wsl" | "unknown";
|
|
3
|
+
export interface WslInfo {
|
|
4
|
+
/** WSL 版本:1 或 2;无法确定时为 null。 */
|
|
5
|
+
version: 1 | 2 | null;
|
|
6
|
+
/** 当前 WSL 发行版名称(来自 WSL_DISTRO_NAME),未知时为 null。 */
|
|
7
|
+
distro: string | null;
|
|
8
|
+
}
|
|
9
|
+
export interface OsInfo {
|
|
10
|
+
/** 归一化的操作系统类别;WSL 会单独标记为 "wsl"。 */
|
|
11
|
+
os: OsKind;
|
|
12
|
+
/** 是否运行在 WSL(Windows Subsystem for Linux)中。 */
|
|
13
|
+
isWsl: boolean;
|
|
14
|
+
/** Node `os.platform()` 原始值,例如 win32 / darwin / linux。 */
|
|
15
|
+
platform: NodeJS.Platform;
|
|
16
|
+
/** CPU 架构,例如 x64 / arm64。 */
|
|
17
|
+
arch: string;
|
|
18
|
+
/** 内核/系统版本字符串(os.release())。 */
|
|
19
|
+
release: string;
|
|
20
|
+
/** 仅在 isWsl 为 true 时存在,描述 WSL 版本与发行版。 */
|
|
21
|
+
wsl?: WslInfo;
|
|
22
|
+
}
|
|
23
|
+
/** 可注入的探测输入,便于在测试中模拟不同运行环境。 */
|
|
24
|
+
export interface OsInfoProbe {
|
|
25
|
+
platform?: NodeJS.Platform;
|
|
26
|
+
arch?: string;
|
|
27
|
+
release?: string;
|
|
28
|
+
env?: NodeJS.ProcessEnv;
|
|
29
|
+
/** 读取 /proc/version 的内容;读取失败时返回 null。 */
|
|
30
|
+
readProcVersion?: () => string | null;
|
|
31
|
+
}
|
|
32
|
+
/** 探测当前进程所在的操作系统信息,包含 WSL 区分。 */
|
|
33
|
+
export declare function detectOsInfo(probe?: OsInfoProbe): OsInfo;
|
|
34
|
+
//# sourceMappingURL=os-info.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"os-info.d.ts","sourceRoot":"","sources":["../../src/system/os-info.ts"],"names":[],"mappings":"AAGA,gCAAgC;AAChC,MAAM,MAAM,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;AAEvE,MAAM,WAAW,OAAO;IACtB,gCAAgC;IAChC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACtB,kDAAkD;IAClD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,MAAM;IACrB,mCAAmC;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,KAAK,EAAE,OAAO,CAAC;IACf,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,+BAA+B;AAC/B,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,yCAAyC;IACzC,eAAe,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CACvC;AA6CD,iCAAiC;AACjC,wBAAgB,YAAY,CAAC,KAAK,GAAE,WAAgB,GAAG,MAAM,CAsB5D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect-status-reporter.d.ts","sourceRoot":"","sources":["../../src/tunnel/connect-status-reporter.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG,cAAc,CAAC;AAEhE,UAAU,MAAM;IACd,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC3C,KAAK,IAAI,IAAI,CAAC;CACf;
|
|
1
|
+
{"version":3,"file":"connect-status-reporter.d.ts","sourceRoot":"","sources":["../../src/tunnel/connect-status-reporter.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG,cAAc,CAAC;AAEhE,UAAU,MAAM;IACd,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC3C,KAAK,IAAI,IAAI,CAAC;CACf;AAQD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAChD,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,qBAAqB,CAqHxB"}
|
|
@@ -5,7 +5,18 @@
|
|
|
5
5
|
* 已知的放大点(见 2026-05-12 日志,单次命令输出曾产生两帧各 ~226KB):
|
|
6
6
|
* - agent 事件 stream="command_output" 的 data.output 带全量命令输出;
|
|
7
7
|
* - agent 事件 stream="item"(kind="command")的 data.summary 重复同一份全文;
|
|
8
|
-
* - chat.history
|
|
8
|
+
* - chat.history 响应里的工具调用消息(toolResult/tool 角色、夹带的
|
|
9
|
+
* toolUse/toolResult 内容块)由 filterToolMessages 整条剔除,不再下发到移动端。
|
|
10
|
+
* - 实时对话流里的工具调用与推理事件(event=agent、stream=command_output、
|
|
11
|
+
* stream=tool、stream=thinking/thought,或 stream=item 且 kind=command/tool)
|
|
12
|
+
* 由 isSuppressedAgentEventFrame 判定后整帧丢弃,
|
|
13
|
+
* 与 chat.history 保持一致,移动端只收到 assistant/lifecycle 等对话事件。
|
|
14
|
+
* - event=chat 的 state=final 帧携带完整 assistant 消息,其中内嵌的
|
|
15
|
+
* thinking/reasoning/工具内容块由 stripToolContentFromMessage 剥离。
|
|
16
|
+
* - event=session.message 是 Gateway 在 transcript 每落盘一条消息时向会话
|
|
17
|
+
* 订阅者广播的镜像(projectChatDisplayMessage 投影,保留 thinking/toolUse/
|
|
18
|
+
* toolResult 块),event=session.tool 是同机制的工具事件镜像。两者都不走
|
|
19
|
+
* event=agent/event=chat 路径,由 rewriteSessionEventFrame 统一剥离或整帧丢弃。
|
|
9
20
|
* - sessions.list 响应里 lastMessagePreview/lastMessage 会夹带 memory 任务长文本。
|
|
10
21
|
* - cron.runs 响应里 summary/result/output 会夹带后台任务长总结。
|
|
11
22
|
* - config.get 响应会携带 raw config 与完整模型配置,移动端准备会话无需全量文本。
|
|
@@ -40,8 +51,78 @@ export declare const COMMAND_SUMMARY_CAP: number;
|
|
|
40
51
|
export declare function truncateText(text: string, cap: number): string;
|
|
41
52
|
/** 列表预览用单行截断,避免把换行省略标记直接展示在会话列表里。 */
|
|
42
53
|
export declare function truncatePreviewText(text: string, cap: number): string;
|
|
54
|
+
/** 仅过滤非用户产生的内部子任务回传;普通用户消息保持原样。 */
|
|
55
|
+
export declare function filterInternalMessages(messages: any[]): {
|
|
56
|
+
messages: any[];
|
|
57
|
+
removed: number;
|
|
58
|
+
changed: boolean;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* 从 chat.history 的消息数组里剔除工具调用与推理块,无论帧大小都执行:
|
|
62
|
+
* - role 为 toolResult/tool 的消息整条删除;
|
|
63
|
+
* - 其余消息里夹带的工具内容块(toolUse/toolResult 等)与推理块
|
|
64
|
+
* (thinking/redacted_thinking)清除,顶层推理字段(message.thinking 等)
|
|
65
|
+
* 删除,清理后若该消息已无可展示内容则一并删除。
|
|
66
|
+
*/
|
|
67
|
+
export declare function filterToolMessages(messages: any[]): {
|
|
68
|
+
messages: any[];
|
|
69
|
+
removed: number;
|
|
70
|
+
changed: boolean;
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* 清除单条消息里的工具/推理内容:content 数组里的工具与推理块,以及
|
|
74
|
+
* 顶层推理字段(message.thinking 等,见 MESSAGE_REASONING_FIELDS)。
|
|
75
|
+
* 用于 event=chat 的 state=final 帧与 event=session.message 镜像帧:
|
|
76
|
+
* 其 payload.message 由 Gateway 的 projectChatDisplayMessage 生成,
|
|
77
|
+
* thinking/reasoning 内容会原样保留(仅截断文本),若不在这里剥离,
|
|
78
|
+
* App 端会把直播收到的消息渲染出折叠的「思考完成」块。
|
|
79
|
+
* 剥离后即使 content 为空也保留消息本身——final 帧承担运行结束语义,
|
|
80
|
+
* 不能整帧丢弃;是否丢弃由调用方决定。
|
|
81
|
+
*/
|
|
82
|
+
export declare function stripToolContentFromMessage(message: any): {
|
|
83
|
+
message: any;
|
|
84
|
+
changed: boolean;
|
|
85
|
+
};
|
|
86
|
+
/** rewriteSessionEventFrame 的处理结论:透传、整帧丢弃或改写后下发。 */
|
|
87
|
+
export type SessionEventRewrite = {
|
|
88
|
+
action: "keep";
|
|
89
|
+
} | {
|
|
90
|
+
action: "drop";
|
|
91
|
+
reason: string;
|
|
92
|
+
} | {
|
|
93
|
+
action: "rewrite";
|
|
94
|
+
frame: any;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* 处理 Gateway 面向会话订阅者的 session.* 镜像事件:
|
|
98
|
+
* - session.tool:工具执行进度镜像(与 event=agent stream=tool 同源),整帧丢弃;
|
|
99
|
+
* - session.message:transcript 消息镜像,内嵌 projectChatDisplayMessage 投影的
|
|
100
|
+
* 完整消息。与 chat.history 的 filterToolMessages 同口径处理——
|
|
101
|
+
* toolResult/tool 角色消息整帧丢弃,其余消息剥离 thinking/reasoning/工具块,
|
|
102
|
+
* 剥离后无可展示内容的也整帧丢弃(该帧只承担 transcript 镜像语义,
|
|
103
|
+
* 会话列表刷新另有 sessions.changed 事件,丢弃不影响状态同步)。
|
|
104
|
+
*/
|
|
105
|
+
export declare function rewriteSessionEventFrame(frame: any): SessionEventRewrite;
|
|
106
|
+
/**
|
|
107
|
+
* 判断一个帧是否为不应下发移动端的实时 agent 事件:
|
|
108
|
+
* - stream=command_output:工具/命令输出全文;
|
|
109
|
+
* - stream=tool:工具执行进度事件(start/update/result,含 args/result);
|
|
110
|
+
* - stream=thinking / thought:模型推理过程增量(App 渲染成 Thinking 块);
|
|
111
|
+
* - stream=item 且 data.kind 为 command/tool:工具调用条目。
|
|
112
|
+
*
|
|
113
|
+
* 用于在实时对话流里整帧剔除,使移动端与 chat.history(filterToolMessages)
|
|
114
|
+
* 一样只保留对话内容,assistant/lifecycle 等对话事件照常下发。
|
|
115
|
+
*/
|
|
116
|
+
export declare function isSuppressedAgentEventFrame(frame: any): boolean;
|
|
43
117
|
/** 就地瘦身已解析的帧,返回是否有修改。 */
|
|
44
118
|
export declare function slimRelayFrame(frame: any): boolean;
|
|
119
|
+
/**
|
|
120
|
+
* 与 slimRelayFrameText 等价,但复用调用方已解析的帧对象,
|
|
121
|
+
* 避免热路径上对大帧重复 JSON.parse。会就地修改 frame。
|
|
122
|
+
*/
|
|
123
|
+
export declare function slimParsedRelayFrame(text: string, frame: any, logger?: {
|
|
124
|
+
info: (msg: string) => void;
|
|
125
|
+
}): string;
|
|
45
126
|
/**
|
|
46
127
|
* 对即将回传 Relay 的帧文本瘦身。小帧与无法解析的帧原样返回。
|
|
47
128
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frame-slimmer.d.ts","sourceRoot":"","sources":["../../src/tunnel/frame-slimmer.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"frame-slimmer.d.ts","sourceRoot":"","sources":["../../src/tunnel/frame-slimmer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,0CAA0C;AAC1C,eAAO,MAAM,kBAAkB,QAAY,CAAC;AAE5C,iEAAiE;AACjE,eAAO,MAAM,gBAAgB,QAAY,CAAC;AAE1C,4CAA4C;AAC5C,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C,yDAAyD;AACzD,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C,mDAAmD;AACnD,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,2CAA2C;AAC3C,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,uCAAuC;AACvC,eAAO,MAAM,4BAA4B,OAAO,CAAC;AAEjD,sCAAsC;AACtC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC,6BAA6B;AAC7B,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC,8CAA8C;AAC9C,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,QAAW,CAAC;AAwD5C,oCAAoC;AACpC,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAU9D;AAED,qCAAqC;AACrC,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAIrE;AA8VD,mCAAmC;AACnC,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG;IACvD,QAAQ,EAAE,GAAG,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB,CASA;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG;IACnD,QAAQ,EAAE,GAAG,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB,CAkBA;AAED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,GAAG,GAAG;IACzD,OAAO,EAAE,GAAG,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB,CAYA;AAED,oDAAoD;AACpD,MAAM,MAAM,mBAAmB,GAC3B;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,GAAG,CAAA;CAAE,CAAC;AAEtC;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,GAAG,GAAG,mBAAmB,CAgCxE;AA8ID;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAU/D;AAED,yBAAyB;AACzB,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAYlD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,GAAG,EACV,MAAM,CAAC,EAAE;IAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GACvC,MAAM,CASR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE;IAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GACvC,MAAM,CAWR"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface LocalGatewayBaseUrlResolution {
|
|
2
|
+
baseUrl: string;
|
|
3
|
+
source: string;
|
|
4
|
+
explicit: boolean;
|
|
5
|
+
tlsEnabled: boolean;
|
|
6
|
+
warning?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface LocalGatewayTcpTarget {
|
|
9
|
+
host: string;
|
|
10
|
+
port: number;
|
|
11
|
+
}
|
|
12
|
+
export declare function resolveLocalGatewayBaseUrl(params?: {
|
|
13
|
+
config?: unknown;
|
|
14
|
+
env?: NodeJS.ProcessEnv;
|
|
15
|
+
}): LocalGatewayBaseUrlResolution;
|
|
16
|
+
export declare function resolveLocalGatewayTcpTarget(baseUrl: string): LocalGatewayTcpTarget | null;
|
|
17
|
+
//# sourceMappingURL=gateway-target.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-target.d.ts","sourceRoot":"","sources":["../../src/tunnel/gateway-target.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AA0ED,wBAAgB,0BAA0B,CAAC,MAAM,GAAE;IACjD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACpB,GAAG,6BAA6B,CA+BrC;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,GACd,qBAAqB,GAAG,IAAI,CAmB9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-proxy.d.ts","sourceRoot":"","sources":["../../src/tunnel/http-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,eAAO,MAAM,0BAA0B,8BAA8B,CAAC;AAEtE,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;QAC5B,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;QAC5B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;KAC9B,CAAC;CACH;
|
|
1
|
+
{"version":3,"file":"http-proxy.d.ts","sourceRoot":"","sources":["../../src/tunnel/http-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,eAAO,MAAM,0BAA0B,8BAA8B,CAAC;AAEtE,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;QAC5B,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;QAC5B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;KAC9B,CAAC;CACH;AA6DD,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEzC;AAaD,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,gBAAgB,EACtB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC,CA4C3D;AAID,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,IAAI,CAAC,CAuEf"}
|
package/dist/tunnel/proxy.d.ts
CHANGED
|
@@ -11,6 +11,9 @@ interface ProxyOptions {
|
|
|
11
11
|
gatewayToken?: string;
|
|
12
12
|
/** Gateway 鉴权密码,代理请求到本地 gateway 时使用 */
|
|
13
13
|
gatewayPassword?: string;
|
|
14
|
+
/** 本地 Gateway RPC 握手完成/断开时通知上层。 */
|
|
15
|
+
onGatewayConnected?: () => void;
|
|
16
|
+
onGatewayDisconnected?: (reason: string) => void;
|
|
14
17
|
client: RelayClient;
|
|
15
18
|
logger: {
|
|
16
19
|
info: (msg: string) => void;
|
|
@@ -43,6 +46,13 @@ export declare class TunnelProxy {
|
|
|
43
46
|
private recentAbortedChatRuns;
|
|
44
47
|
/** Relay 断开或服务停止时要中断的 HTTP 代理请求。 */
|
|
45
48
|
private httpAbortControllers;
|
|
49
|
+
private gatewayWsConnectLogLastAt;
|
|
50
|
+
private gatewayWsConnectLogSuppressed;
|
|
51
|
+
/** startGatewayConnection 启用后,即使没有待处理 RPC 也维持本地连接。 */
|
|
52
|
+
private maintainGatewayWs;
|
|
53
|
+
private gatewayWsReconnectTimer;
|
|
54
|
+
private gatewayWsReconnectAttempt;
|
|
55
|
+
private gatewayConnectionState;
|
|
46
56
|
/** 设备身份,用于 Gateway connect 握手 */
|
|
47
57
|
private deviceIdentity;
|
|
48
58
|
private readonly stateDir;
|
|
@@ -51,8 +61,12 @@ export declare class TunnelProxy {
|
|
|
51
61
|
constructor(opts: ProxyOptions);
|
|
52
62
|
/** 处理从 Relay 收到的入站帧 */
|
|
53
63
|
handleFrame(frame: InboundFrame): Promise<void>;
|
|
54
|
-
/**
|
|
64
|
+
/** Relay 断开时只清理依赖 Relay 的请求,保留本地 Gateway RPC 连接。 */
|
|
65
|
+
cleanupRelayState(): void;
|
|
66
|
+
/** 插件停止时清理所有代理状态并关闭本地 Gateway RPC 连接。 */
|
|
55
67
|
cleanup(): void;
|
|
68
|
+
/** 主动建立并持续维护到本地 Gateway 的 RPC WebSocket。 */
|
|
69
|
+
startGatewayConnection(): void;
|
|
56
70
|
private handleRequestFrame;
|
|
57
71
|
private pushGatewayPending;
|
|
58
72
|
/** 将未知帧原样转发到 Gateway WS */
|
|
@@ -81,6 +95,11 @@ export declare class TunnelProxy {
|
|
|
81
95
|
private maybeRewriteGatewayFrame;
|
|
82
96
|
/** 确保到本地 Gateway 的 RPC WebSocket 已连接且握手完成 */
|
|
83
97
|
private ensureGatewayWs;
|
|
98
|
+
private setGatewayConnectionState;
|
|
99
|
+
private clearGatewayReconnectTimer;
|
|
100
|
+
private scheduleGatewayReconnect;
|
|
101
|
+
private logGatewayWsConnecting;
|
|
102
|
+
private gatewayTroubleshootingHint;
|
|
84
103
|
private handleConnectChallenge;
|
|
85
104
|
}
|
|
86
105
|
export {};
|