@mininglamp-oss/cc-channel-octo 1.0.3-dev.203dc5f → 1.0.3-dev.3332be0
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/config.bot.example.json +2 -1
- package/config.example.json +8 -1
- package/dist/agent-bridge.js +6 -1
- package/dist/agent-bridge.js.map +1 -1
- package/dist/config.d.ts +80 -0
- package/dist/config.js +12 -0
- package/dist/config.js.map +1 -1
- package/dist/group-config.d.ts +18 -9
- package/dist/group-config.js +47 -10
- package/dist/group-config.js.map +1 -1
- package/dist/group-context.d.ts +18 -0
- package/dist/group-context.js +86 -7
- package/dist/group-context.js.map +1 -1
- package/dist/group-md-cache.d.ts +119 -0
- package/dist/group-md-cache.js +172 -0
- package/dist/group-md-cache.js.map +1 -0
- package/dist/group-md-events.d.ts +75 -0
- package/dist/group-md-events.js +74 -0
- package/dist/group-md-events.js.map +1 -0
- package/dist/group-md-tool.d.ts +80 -0
- package/dist/group-md-tool.js +181 -0
- package/dist/group-md-tool.js.map +1 -0
- package/dist/group-md-writeback.d.ts +183 -0
- package/dist/group-md-writeback.js +223 -0
- package/dist/group-md-writeback.js.map +1 -0
- package/dist/group-md.d.ts +76 -0
- package/dist/group-md.js +187 -0
- package/dist/group-md.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +130 -15
- package/dist/index.js.map +1 -1
- package/dist/octo/api.d.ts +157 -1
- package/dist/octo/api.js +189 -1
- package/dist/octo/api.js.map +1 -1
- package/dist/octo/channel-id.d.ts +36 -0
- package/dist/octo/channel-id.js +52 -0
- package/dist/octo/channel-id.js.map +1 -0
- package/dist/octo/types.d.ts +22 -0
- package/dist/octo/types.js.map +1 -1
- package/dist/prompt-safety.d.ts +20 -0
- package/dist/prompt-safety.js +24 -0
- package/dist/prompt-safety.js.map +1 -1
- package/dist/session-router.d.ts +63 -1
- package/dist/session-router.js +129 -3
- package/dist/session-router.js.map +1 -1
- package/dist/session-store.d.ts +26 -0
- package/dist/session-store.js +64 -1
- package/dist/session-store.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// Forked from openclaw-channel-octo v1.0.13 (2026-06-04)
|
|
2
|
+
// Source: https://github.com/Mininglamp-OSS/openclaw-channel-octo
|
|
3
|
+
// - constants.ts (THREAD_ID_SEPARATOR)
|
|
4
|
+
// - group-md.ts (extractParentGroupNo / extractThreadShortId / isThreadChannelId)
|
|
5
|
+
/**
|
|
6
|
+
* CommunityTopic (thread) channel-id helpers.
|
|
7
|
+
*
|
|
8
|
+
* Octo encodes a thread's channel_id as `<groupNo>____<shortId>` — the parent
|
|
9
|
+
* group number, four underscores, then the thread short id. A plain group's
|
|
10
|
+
* channel_id has no separator. These pure functions are the single place that
|
|
11
|
+
* knows the composite format, so callers that need the parent group number
|
|
12
|
+
* (e.g. roster / @-mention lookups that must hit `/groups/{groupNo}/members`)
|
|
13
|
+
* or the thread short id never re-implement the split and drift apart.
|
|
14
|
+
*
|
|
15
|
+
* Splitting always uses the FIRST `____` occurrence (`indexOf`), so a shortId
|
|
16
|
+
* that itself contains the separator stays intact on the right-hand side.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Separator between parent group_no and thread short_id in Octo's
|
|
20
|
+
* CommunityTopic channel-id format (`<groupNo>____<shortId>`, 4 underscores).
|
|
21
|
+
*/
|
|
22
|
+
export const THREAD_ID_SEPARATOR = "____";
|
|
23
|
+
/**
|
|
24
|
+
* Extract the parent group number from a channelId.
|
|
25
|
+
* Thread channelId format: "groupNo____shortId" → "groupNo".
|
|
26
|
+
* Group channelId format: "groupNo" → "groupNo" (returned unchanged).
|
|
27
|
+
*/
|
|
28
|
+
export function extractParentGroupNo(channelId) {
|
|
29
|
+
const sep = channelId.indexOf(THREAD_ID_SEPARATOR);
|
|
30
|
+
return sep >= 0 ? channelId.slice(0, sep) : channelId;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Extract the thread shortId from a channelId.
|
|
34
|
+
* Only thread channelIds contain a shortId; group channelIds return null.
|
|
35
|
+
*
|
|
36
|
+
* Edge case: if channelId ends with "____" (no shortId portion), returns null.
|
|
37
|
+
* Callers that require a non-empty shortId should check for falsy values.
|
|
38
|
+
*/
|
|
39
|
+
export function extractThreadShortId(channelId) {
|
|
40
|
+
const sep = channelId.indexOf(THREAD_ID_SEPARATOR);
|
|
41
|
+
if (sep < 0)
|
|
42
|
+
return null;
|
|
43
|
+
const id = channelId.slice(sep + THREAD_ID_SEPARATOR.length);
|
|
44
|
+
return id || null;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Check if a channelId is a thread (CommunityTopic) composite id.
|
|
48
|
+
*/
|
|
49
|
+
export function isThreadChannelId(channelId) {
|
|
50
|
+
return channelId.includes(THREAD_ID_SEPARATOR);
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=channel-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-id.js","sourceRoot":"","sources":["../../src/octo/channel-id.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,kEAAkE;AAClE,yCAAyC;AACzC,oFAAoF;AAEpF;;;;;;;;;;;;GAYG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAE1C;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACnD,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACxD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACnD,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC7D,OAAO,EAAE,IAAI,IAAI,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,OAAO,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;AACjD,CAAC"}
|
package/dist/octo/types.d.ts
CHANGED
|
@@ -83,6 +83,28 @@ export declare enum ChannelType {
|
|
|
83
83
|
Group = 2,
|
|
84
84
|
CommunityTopic = 5
|
|
85
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* A thread (CommunityTopic) under a parent group, as returned by the Octo bot
|
|
88
|
+
* thread lifecycle endpoints. A thread's channel_id is the composite
|
|
89
|
+
* `<groupNo>____<shortId>` (see octo/channel-id.ts).
|
|
90
|
+
*/
|
|
91
|
+
export interface Thread {
|
|
92
|
+
/** Thread short id; the right-hand side of the composite channel_id. */
|
|
93
|
+
short_id: string;
|
|
94
|
+
name: string;
|
|
95
|
+
/** uid of the member who created the thread. */
|
|
96
|
+
creator_uid: string;
|
|
97
|
+
/** Lifecycle status flag (server-defined). Absent on the create response. */
|
|
98
|
+
status?: number;
|
|
99
|
+
/** Current member count. Present on getThread. */
|
|
100
|
+
member_count?: number;
|
|
101
|
+
}
|
|
102
|
+
/** A single member of a thread, as returned by listThreadMembers. */
|
|
103
|
+
export interface ThreadMember {
|
|
104
|
+
uid: string;
|
|
105
|
+
/** Member role within the thread (server-defined). */
|
|
106
|
+
role: number;
|
|
107
|
+
}
|
|
86
108
|
/** Message content types */
|
|
87
109
|
export declare enum MessageType {
|
|
88
110
|
Text = 1,
|
package/dist/octo/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/octo/types.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,kEAAkE;AAyFlE,oBAAoB;AACpB,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,yCAAM,CAAA;IACN,+CAAS,CAAA;IACT,iEAAkB,CAAA;AACpB,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/octo/types.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,kEAAkE;AAyFlE,oBAAoB;AACpB,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,yCAAM,CAAA;IACN,+CAAS,CAAA;IACT,iEAAkB,CAAA;AACpB,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB;AA0BD,4BAA4B;AAC5B,MAAM,CAAN,IAAY,WAYX;AAZD,WAAY,WAAW;IACrB,6CAAQ,CAAA;IACR,+CAAS,CAAA;IACT,2CAAO,CAAA;IACP,+CAAS,CAAA;IACT,+CAAS,CAAA;IACT,qDAAY,CAAA;IACZ,6CAAQ,CAAA;IACR,6CAAQ,CAAA;IACR,oEAAoB,CAAA;IACpB,sEAAsE;IACtE,sDAAa,CAAA;AACf,CAAC,EAZW,WAAW,KAAX,WAAW,QAYtB;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAC3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC;AAE7C,2EAA2E;AAC3E,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC"}
|
package/dist/prompt-safety.d.ts
CHANGED
|
@@ -42,6 +42,26 @@ export declare const CURRENT_MESSAGE_ANCHOR = "[Current message \u2014 respond t
|
|
|
42
42
|
* `fallback` if nothing survives.
|
|
43
43
|
*/
|
|
44
44
|
export declare function sanitizeDisplayName(name: unknown, fallback?: string): string;
|
|
45
|
+
/**
|
|
46
|
+
* Format a sender label for prompt display: `name(uid)` when a name is present,
|
|
47
|
+
* otherwise the bare `uid`. Both fields go through sanitizeDisplayName so a
|
|
48
|
+
* user-controlled name (or, defensively, uid) cannot inject brackets, colons,
|
|
49
|
+
* or line breaks that would forge a role/section boundary. Mirrors
|
|
50
|
+
* openclaw-channel-octo's buildSenderPrefix — the shared convention across
|
|
51
|
+
* both Octo channel adapters, so a Claude-Code / Claw agent sees the same
|
|
52
|
+
* `name(uid)` shape whether the transport is cc-channel-octo or
|
|
53
|
+
* openclaw-channel-octo.
|
|
54
|
+
*
|
|
55
|
+
* Used at two sites:
|
|
56
|
+
* 1. The `[Current message — respond to this ONLY]` anchor body in
|
|
57
|
+
* index.ts, so the bot can tell WHO sent the request being replied to
|
|
58
|
+
* (previously the current message was anonymous, forcing the model to
|
|
59
|
+
* guess from context).
|
|
60
|
+
* 2. Each line of the `[Recent group messages]` block in group-context.ts,
|
|
61
|
+
* so the historical background carries uid too — the two blocks now
|
|
62
|
+
* agree on identity semantics.
|
|
63
|
+
*/
|
|
64
|
+
export declare function formatSenderLabel(fromUid: unknown, fromName: unknown): string;
|
|
45
65
|
/**
|
|
46
66
|
* Escape a line-leading role label in user-authored CONTENT so it renders as
|
|
47
67
|
* literal text inside its turn rather than forging a new turn boundary:
|
package/dist/prompt-safety.js
CHANGED
|
@@ -107,6 +107,30 @@ export function sanitizeDisplayName(name, fallback = '') {
|
|
|
107
107
|
.trim();
|
|
108
108
|
return cleaned.length > 0 ? cleaned : fallback;
|
|
109
109
|
}
|
|
110
|
+
/**
|
|
111
|
+
* Format a sender label for prompt display: `name(uid)` when a name is present,
|
|
112
|
+
* otherwise the bare `uid`. Both fields go through sanitizeDisplayName so a
|
|
113
|
+
* user-controlled name (or, defensively, uid) cannot inject brackets, colons,
|
|
114
|
+
* or line breaks that would forge a role/section boundary. Mirrors
|
|
115
|
+
* openclaw-channel-octo's buildSenderPrefix — the shared convention across
|
|
116
|
+
* both Octo channel adapters, so a Claude-Code / Claw agent sees the same
|
|
117
|
+
* `name(uid)` shape whether the transport is cc-channel-octo or
|
|
118
|
+
* openclaw-channel-octo.
|
|
119
|
+
*
|
|
120
|
+
* Used at two sites:
|
|
121
|
+
* 1. The `[Current message — respond to this ONLY]` anchor body in
|
|
122
|
+
* index.ts, so the bot can tell WHO sent the request being replied to
|
|
123
|
+
* (previously the current message was anonymous, forcing the model to
|
|
124
|
+
* guess from context).
|
|
125
|
+
* 2. Each line of the `[Recent group messages]` block in group-context.ts,
|
|
126
|
+
* so the historical background carries uid too — the two blocks now
|
|
127
|
+
* agree on identity semantics.
|
|
128
|
+
*/
|
|
129
|
+
export function formatSenderLabel(fromUid, fromName) {
|
|
130
|
+
const uid = sanitizeDisplayName(fromUid, 'unknown');
|
|
131
|
+
const name = sanitizeDisplayName(fromName, '');
|
|
132
|
+
return name.length > 0 ? `${name}(${uid})` : uid;
|
|
133
|
+
}
|
|
110
134
|
/**
|
|
111
135
|
* Escape a line-leading role label in user-authored CONTENT so it renders as
|
|
112
136
|
* literal text inside its turn rather than forging a new turn boundary:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-safety.js","sourceRoot":"","sources":["../src/prompt-safety.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,qEAAqE;AACrE,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,iBAAiB,GACrB,8PAA8P,CAAC;AAEjQ;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,+CAA+C,CAAC;AAEtF;;;;;;;;;;GAUG;AACH,MAAM,aAAa,GACjB,uDAAuD,CAAC;AAE1D,iFAAiF;AACjF,MAAM,cAAc,GAAG,kCAAkC,CAAC;AAE1D;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,eAAe,CAAC;AAE7C,SAAS,mBAAmB,CAAC,IAAY;IACvC,OAAO,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;AAClD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAa,EAAE,QAAQ,GAAG,EAAE;IAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;SAC/B,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;SAC5B,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC;SAC9B,IAAI,EAAE,CAAC;IACV,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,EAAU,EAAE,KAAa,EAAE,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,EAAE,CAAC,CAAC;AACnH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,+EAA+E;IAC/E,iFAAiF;IACjF,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,OAAO,CACtC,iBAAiB,EACjB,CAAC,EAAE,EAAE,EAAU,EAAE,KAAa,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,CACvD,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,oBAAoB,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;AACtD,CAAC;AAWD,uFAAuF;AACvF,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,kBAAkB,CAAC,IAAI,CAAa,CAAC;AAC9C,CAAC;AAED,2HAA2H;AAC3H,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,oBAAoB,CAAC,IAAI,CAAa,CAAC;AAChD,CAAC;AAED,8KAA8K;AAC9K,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,IAAgB,CAAC;AAC1B,CAAC"}
|
|
1
|
+
{"version":3,"file":"prompt-safety.js","sourceRoot":"","sources":["../src/prompt-safety.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,qEAAqE;AACrE,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,iBAAiB,GACrB,8PAA8P,CAAC;AAEjQ;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,+CAA+C,CAAC;AAEtF;;;;;;;;;;GAUG;AACH,MAAM,aAAa,GACjB,uDAAuD,CAAC;AAE1D,iFAAiF;AACjF,MAAM,cAAc,GAAG,kCAAkC,CAAC;AAE1D;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,eAAe,CAAC;AAE7C,SAAS,mBAAmB,CAAC,IAAY;IACvC,OAAO,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;AAClD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAa,EAAE,QAAQ,GAAG,EAAE;IAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;SAC/B,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;SAC5B,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC;SAC9B,IAAI,EAAE,CAAC;IACV,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;AACjD,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAgB,EAAE,QAAiB;IACnE,MAAM,GAAG,GAAG,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,mBAAmB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AACnD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,EAAU,EAAE,KAAa,EAAE,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,EAAE,CAAC,CAAC;AACnH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,+EAA+E;IAC/E,iFAAiF;IACjF,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,OAAO,CACtC,iBAAiB,EACjB,CAAC,EAAE,EAAE,EAAU,EAAE,KAAa,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,CACvD,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,oBAAoB,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;AACtD,CAAC;AAWD,uFAAuF;AACvF,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,kBAAkB,CAAC,IAAI,CAAa,CAAC;AAC9C,CAAC;AAED,2HAA2H;AAC3H,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,oBAAoB,CAAC,IAAI,CAAa,CAAC;AAChD,CAAC;AAED,8KAA8K;AAC9K,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,IAAgB,CAAC;AAC1B,CAAC"}
|
package/dist/session-router.d.ts
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import type { Config } from './config.js';
|
|
5
5
|
import type { BotMessage } from './octo/types.js';
|
|
6
|
+
import type { GroupMdCache, ThreadMdCache } from './group-md-cache.js';
|
|
6
7
|
export interface RouteResult {
|
|
7
8
|
sessionKey: string;
|
|
8
9
|
shouldProcess: boolean;
|
|
@@ -42,7 +43,21 @@ export declare class SessionRouter {
|
|
|
42
43
|
* extended via registerKnownBot() for future multi-bot deployments.
|
|
43
44
|
*/
|
|
44
45
|
private readonly knownBotUids;
|
|
45
|
-
|
|
46
|
+
/**
|
|
47
|
+
* P2-B: in-memory server GROUP.md cache (A's P2-A cache). Held so a GROUP.md
|
|
48
|
+
* change event can invalidate the affected group's entry, forcing the next
|
|
49
|
+
* turn to re-fetch the authoritative copy. Optional — omitted (or with
|
|
50
|
+
* `serverMd` off) the event path is a harmless no-op.
|
|
51
|
+
*/
|
|
52
|
+
private readonly groupMdCache?;
|
|
53
|
+
/**
|
|
54
|
+
* P3-2: in-memory server THREAD.md cache (P3-1's composite-keyed cache). Held
|
|
55
|
+
* so a THREAD.md change event can invalidate the affected subarea's entry,
|
|
56
|
+
* forcing the next turn to re-fetch the authoritative copy. Optional — omitted
|
|
57
|
+
* (or with `threadMd` off) the thread event path is a harmless no-op.
|
|
58
|
+
*/
|
|
59
|
+
private readonly threadMdCache?;
|
|
60
|
+
constructor(config: Config, robotId: string, ownerUid?: string, groupMdCache?: GroupMdCache, threadMdCache?: ThreadMdCache);
|
|
46
61
|
/** G14: register another known bot uid (future multi-bot support). */
|
|
47
62
|
registerKnownBot(uid: string): void;
|
|
48
63
|
/**
|
|
@@ -130,6 +145,53 @@ export declare class SessionRouter {
|
|
|
130
145
|
* inbound messages never carry the marker.
|
|
131
146
|
*/
|
|
132
147
|
private isCronFire;
|
|
148
|
+
/**
|
|
149
|
+
* P2-B: react to a server system event that signals a GROUP.md change by
|
|
150
|
+
* invalidating that group's cached server GROUP.md, so the next turn re-fetches
|
|
151
|
+
* the authoritative copy over the authenticated bot token (never trusting the
|
|
152
|
+
* event payload as the new content — see group-md-events.ts for the
|
|
153
|
+
* forged-event poisoning rationale). Non-md system events (join/leave, etc.)
|
|
154
|
+
* match nothing here and fall through to the caller's `return null`, so they
|
|
155
|
+
* are dropped exactly as before.
|
|
156
|
+
*
|
|
157
|
+
* Gated on `serverMd`: with the flag off the cache is never populated, so there
|
|
158
|
+
* is nothing to invalidate. Best-effort and never throws — a malformed event
|
|
159
|
+
* must not wedge the router (the caller drops the event regardless).
|
|
160
|
+
*
|
|
161
|
+
* The group is identified from the event's `group_no`: these events are
|
|
162
|
+
* delivered on a system/DM channel (a group event on the group's own channel
|
|
163
|
+
* dies at the mention gate above, never reaching here — XIN-173), so the
|
|
164
|
+
* arriving `channel_id` is the sender, not the group. The channel is only a
|
|
165
|
+
* fallback when `group_no` is absent AND the event happens to have arrived on a
|
|
166
|
+
* group-like channel (e.g. a mention-free group, the one group path that
|
|
167
|
+
* reaches this point). Using the event-supplied `group_no` is safe despite the
|
|
168
|
+
* event being untrusted: invalidation is non-destructive — the worst a forged
|
|
169
|
+
* event can do is force a redundant authenticated re-fetch of the real value,
|
|
170
|
+
* never inject content (the new GROUP.md is always re-fetched, never read from
|
|
171
|
+
* the event body — see group-md-events.ts).
|
|
172
|
+
*/
|
|
173
|
+
private handleGroupMdEvent;
|
|
174
|
+
/**
|
|
175
|
+
* P3-2: thread analogue of {@link handleGroupMdEvent}. On a THREAD.md change
|
|
176
|
+
* event (update or delete) invalidate that subarea's composite-keyed
|
|
177
|
+
* (`groupNo::shortId`) cache entry, so the next turn re-fetches the
|
|
178
|
+
* authoritative copy over the bot token — never trusting the event payload as
|
|
179
|
+
* the new content (identical anti-poisoning rationale to the group side; see
|
|
180
|
+
* group-md-events.ts).
|
|
181
|
+
*
|
|
182
|
+
* Gated on `threadMd` (the flag that governs the thread server-read path): with
|
|
183
|
+
* it off the thread cache is never populated, so there is nothing to
|
|
184
|
+
* invalidate. Group and thread event literals are disjoint, so this and
|
|
185
|
+
* handleGroupMdEvent never both fire for one event.
|
|
186
|
+
*
|
|
187
|
+
* A thread is identified by the event's `group_no` + `short_id`. Both come
|
|
188
|
+
* from the untrusted event, but invalidation is non-destructive — the worst a
|
|
189
|
+
* forged thread event can do is force a redundant authenticated re-fetch of the
|
|
190
|
+
* real THREAD.md, never inject content. When the event omits `short_id` there
|
|
191
|
+
* is no subarea to key, so we fall back to invalidating nothing rather than
|
|
192
|
+
* guessing (a thread event MUST carry short_id to be actionable).
|
|
193
|
+
*/
|
|
194
|
+
private handleThreadMdEvent;
|
|
133
195
|
private processMessage;
|
|
134
196
|
/**
|
|
135
197
|
* G20 fix: Check all three rate limits (global, per-session, per-user) in
|
package/dist/session-router.js
CHANGED
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
import { ChannelType, MessageType } from './octo/types.js';
|
|
5
5
|
import { sendMessage } from './octo/api.js';
|
|
6
6
|
import { isAuthenticCronFire } from './cron-fire-marker.js';
|
|
7
|
+
import { extractParentGroupNo, extractThreadShortId } from './octo/channel-id.js';
|
|
8
|
+
import { isGroupMdUpdateEvent, isThreadMdUpdateEvent } from './group-md-events.js';
|
|
7
9
|
const BUCKET_STALE_MS = 5 * 60 * 1000; // 5 minutes
|
|
8
10
|
/** Global rate limit: 10x per-session limit, shared across all sessions. */
|
|
9
11
|
const GLOBAL_RATE_MULTIPLIER = 10;
|
|
@@ -24,11 +26,27 @@ export class SessionRouter {
|
|
|
24
26
|
* extended via registerKnownBot() for future multi-bot deployments.
|
|
25
27
|
*/
|
|
26
28
|
knownBotUids = new Set();
|
|
27
|
-
|
|
29
|
+
/**
|
|
30
|
+
* P2-B: in-memory server GROUP.md cache (A's P2-A cache). Held so a GROUP.md
|
|
31
|
+
* change event can invalidate the affected group's entry, forcing the next
|
|
32
|
+
* turn to re-fetch the authoritative copy. Optional — omitted (or with
|
|
33
|
+
* `serverMd` off) the event path is a harmless no-op.
|
|
34
|
+
*/
|
|
35
|
+
groupMdCache;
|
|
36
|
+
/**
|
|
37
|
+
* P3-2: in-memory server THREAD.md cache (P3-1's composite-keyed cache). Held
|
|
38
|
+
* so a THREAD.md change event can invalidate the affected subarea's entry,
|
|
39
|
+
* forcing the next turn to re-fetch the authoritative copy. Optional — omitted
|
|
40
|
+
* (or with `threadMd` off) the thread event path is a harmless no-op.
|
|
41
|
+
*/
|
|
42
|
+
threadMdCache;
|
|
43
|
+
constructor(config, robotId, ownerUid = '', groupMdCache, threadMdCache) {
|
|
28
44
|
this.config = config;
|
|
29
45
|
this.robotId = robotId;
|
|
30
46
|
this.ownerUid = ownerUid;
|
|
31
47
|
this.knownBotUids.add(robotId);
|
|
48
|
+
this.groupMdCache = groupMdCache;
|
|
49
|
+
this.threadMdCache = threadMdCache;
|
|
32
50
|
}
|
|
33
51
|
/** G14: register another known bot uid (future multi-bot support). */
|
|
34
52
|
registerKnownBot(uid) {
|
|
@@ -275,6 +293,104 @@ export class SessionRouter {
|
|
|
275
293
|
isCronFire(msg) {
|
|
276
294
|
return isAuthenticCronFire(msg.payload);
|
|
277
295
|
}
|
|
296
|
+
/**
|
|
297
|
+
* P2-B: react to a server system event that signals a GROUP.md change by
|
|
298
|
+
* invalidating that group's cached server GROUP.md, so the next turn re-fetches
|
|
299
|
+
* the authoritative copy over the authenticated bot token (never trusting the
|
|
300
|
+
* event payload as the new content — see group-md-events.ts for the
|
|
301
|
+
* forged-event poisoning rationale). Non-md system events (join/leave, etc.)
|
|
302
|
+
* match nothing here and fall through to the caller's `return null`, so they
|
|
303
|
+
* are dropped exactly as before.
|
|
304
|
+
*
|
|
305
|
+
* Gated on `serverMd`: with the flag off the cache is never populated, so there
|
|
306
|
+
* is nothing to invalidate. Best-effort and never throws — a malformed event
|
|
307
|
+
* must not wedge the router (the caller drops the event regardless).
|
|
308
|
+
*
|
|
309
|
+
* The group is identified from the event's `group_no`: these events are
|
|
310
|
+
* delivered on a system/DM channel (a group event on the group's own channel
|
|
311
|
+
* dies at the mention gate above, never reaching here — XIN-173), so the
|
|
312
|
+
* arriving `channel_id` is the sender, not the group. The channel is only a
|
|
313
|
+
* fallback when `group_no` is absent AND the event happens to have arrived on a
|
|
314
|
+
* group-like channel (e.g. a mention-free group, the one group path that
|
|
315
|
+
* reaches this point). Using the event-supplied `group_no` is safe despite the
|
|
316
|
+
* event being untrusted: invalidation is non-destructive — the worst a forged
|
|
317
|
+
* event can do is force a redundant authenticated re-fetch of the real value,
|
|
318
|
+
* never inject content (the new GROUP.md is always re-fetched, never read from
|
|
319
|
+
* the event body — see group-md-events.ts).
|
|
320
|
+
*/
|
|
321
|
+
handleGroupMdEvent(msg) {
|
|
322
|
+
if (!this.config.serverMd || !this.groupMdCache)
|
|
323
|
+
return;
|
|
324
|
+
const event = msg.payload.event;
|
|
325
|
+
if (!isGroupMdUpdateEvent(event, this.config.serverMdEventTypes))
|
|
326
|
+
return;
|
|
327
|
+
let groupNo = event?.group_no ?? '';
|
|
328
|
+
if (groupNo === '' && this.isGroupLike(msg.channel_type)) {
|
|
329
|
+
groupNo = extractParentGroupNo(msg.channel_id ?? '');
|
|
330
|
+
}
|
|
331
|
+
if (groupNo === '')
|
|
332
|
+
return;
|
|
333
|
+
// invalidate() is itself total (validates the id, never throws); the guard
|
|
334
|
+
// here keeps a future non-total cache from breaking the drop path.
|
|
335
|
+
try {
|
|
336
|
+
this.groupMdCache.invalidate(groupNo);
|
|
337
|
+
}
|
|
338
|
+
catch {
|
|
339
|
+
/* best-effort: a refresh hiccup must never block dropping the event */
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* P3-2: thread analogue of {@link handleGroupMdEvent}. On a THREAD.md change
|
|
344
|
+
* event (update or delete) invalidate that subarea's composite-keyed
|
|
345
|
+
* (`groupNo::shortId`) cache entry, so the next turn re-fetches the
|
|
346
|
+
* authoritative copy over the bot token — never trusting the event payload as
|
|
347
|
+
* the new content (identical anti-poisoning rationale to the group side; see
|
|
348
|
+
* group-md-events.ts).
|
|
349
|
+
*
|
|
350
|
+
* Gated on `threadMd` (the flag that governs the thread server-read path): with
|
|
351
|
+
* it off the thread cache is never populated, so there is nothing to
|
|
352
|
+
* invalidate. Group and thread event literals are disjoint, so this and
|
|
353
|
+
* handleGroupMdEvent never both fire for one event.
|
|
354
|
+
*
|
|
355
|
+
* A thread is identified by the event's `group_no` + `short_id`. Both come
|
|
356
|
+
* from the untrusted event, but invalidation is non-destructive — the worst a
|
|
357
|
+
* forged thread event can do is force a redundant authenticated re-fetch of the
|
|
358
|
+
* real THREAD.md, never inject content. When the event omits `short_id` there
|
|
359
|
+
* is no subarea to key, so we fall back to invalidating nothing rather than
|
|
360
|
+
* guessing (a thread event MUST carry short_id to be actionable).
|
|
361
|
+
*/
|
|
362
|
+
handleThreadMdEvent(msg) {
|
|
363
|
+
if (!this.config.threadMd || !this.threadMdCache)
|
|
364
|
+
return;
|
|
365
|
+
const event = msg.payload.event;
|
|
366
|
+
if (!isThreadMdUpdateEvent(event, this.config.threadMdEventTypes))
|
|
367
|
+
return;
|
|
368
|
+
let groupNo = event?.group_no ?? '';
|
|
369
|
+
// The shortId only ever comes from the event body: these events are
|
|
370
|
+
// delivered on a system/DM channel (a thread event on the thread's own
|
|
371
|
+
// channel dies at the mention gate, never reaching here — XIN-173), so the
|
|
372
|
+
// arriving channel_id is the sender, not the thread. Fall back to the
|
|
373
|
+
// channel only for groupNo (never the shortId) when the event omits it AND
|
|
374
|
+
// it happened to arrive on a thread channel.
|
|
375
|
+
let shortId = event?.short_id ?? '';
|
|
376
|
+
if (this.isGroupLike(msg.channel_type)) {
|
|
377
|
+
const chan = msg.channel_id ?? '';
|
|
378
|
+
if (groupNo === '')
|
|
379
|
+
groupNo = extractParentGroupNo(chan);
|
|
380
|
+
if (shortId === '')
|
|
381
|
+
shortId = extractThreadShortId(chan) ?? '';
|
|
382
|
+
}
|
|
383
|
+
if (groupNo === '' || shortId === '')
|
|
384
|
+
return;
|
|
385
|
+
// invalidate() is itself total (validates both ids, never throws); the guard
|
|
386
|
+
// here keeps a future non-total cache from breaking the drop path.
|
|
387
|
+
try {
|
|
388
|
+
this.threadMdCache.invalidate(groupNo, shortId);
|
|
389
|
+
}
|
|
390
|
+
catch {
|
|
391
|
+
/* best-effort: a refresh hiccup must never block dropping the event */
|
|
392
|
+
}
|
|
393
|
+
}
|
|
278
394
|
async processMessage(msg, key) {
|
|
279
395
|
// Skip messages from self.
|
|
280
396
|
if (msg.from_uid === this.robotId)
|
|
@@ -327,9 +443,19 @@ export class SessionRouter {
|
|
|
327
443
|
return null;
|
|
328
444
|
}
|
|
329
445
|
}
|
|
330
|
-
//
|
|
331
|
-
|
|
446
|
+
// System events (group join/leave, GROUP.md / THREAD.md change, etc.) never
|
|
447
|
+
// produce a user-facing reply, so they always route to `null`. P2-B/P3-2:
|
|
448
|
+
// before dropping, a GROUP.md or THREAD.md change event is dispatched to
|
|
449
|
+
// invalidate the affected cache entry (forcing the next turn to re-fetch the
|
|
450
|
+
// authoritative copy); every other system event (join/leave/...) is dropped
|
|
451
|
+
// unchanged. The two md handlers key on disjoint event-type literals, so a
|
|
452
|
+
// group event never invalidates a thread entry and vice versa, and neither
|
|
453
|
+
// is mistaken for an unrelated system event.
|
|
454
|
+
if (msg.payload.event) {
|
|
455
|
+
this.handleGroupMdEvent(msg);
|
|
456
|
+
this.handleThreadMdEvent(msg);
|
|
332
457
|
return null;
|
|
458
|
+
}
|
|
333
459
|
// Rate limit check BEFORE non-text check — prevents DM spam of non-text
|
|
334
460
|
// messages from bypassing rate limiting entirely.
|
|
335
461
|
// G20 fix: peek all three buckets without consuming; only consume on full
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-router.js","sourceRoot":"","sources":["../src/session-router.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session-router.js","sourceRoot":"","sources":["../src/session-router.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAElF,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAkCnF,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AAEnD,4EAA4E;AAC5E,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAElC,2FAA2F;AAC3F,MAAM,iBAAiB,GAAG,MAAM,CAAC,CAAC,QAAQ;AAE1C,MAAM,OAAO,aAAa;IACP,MAAM,CAAS;IACf,OAAO,CAAS;IACjC,2EAA2E;IAC1D,QAAQ,CAAS;IACjB,aAAa,GAAG,IAAI,GAAG,EAAyB,CAAC;IACjD,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC/D,gFAAgF;IAC/D,WAAW,GAAG,IAAI,GAAG,EAAuB,CAAC;IACtD,YAAY,GAAuB,IAAI,CAAC;IAChD;;;OAGG;IACc,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IAElD;;;;;OAKG;IACc,YAAY,CAAgB;IAE7C;;;;;OAKG;IACc,aAAa,CAAiB;IAE/C,YACE,MAAc,EACd,OAAe,EACf,QAAQ,GAAG,EAAE,EACb,YAA2B,EAC3B,aAA6B;QAE7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED,sEAAsE;IACtE,gBAAgB,CAAC,GAAW;QAC1B,IAAI,GAAG;YAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,GAAW;QAC5B,IAAI,GAAG,IAAI,GAAG,KAAK,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,CAAC;IAED,8DAA8D;IAC9D,oBAAoB;QAClB,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IAED,+EAA+E;IAC/E,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,eAAe,CAAI,GAAW,EAAE,EAAoB;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAC9D,IAAI,WAAwB,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE;YACnC,WAAW,GAAG,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAElC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC;YACX,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;gBAAS,CAAC;YACT,WAAW,EAAE,CAAC;YACd,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;gBACzC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH;;;;;;;;;OASG;IACH,KAAK,CAAC,cAAc,CAClB,GAAe,EACf,OAA+C;QAE/C,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE;YAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACnD,IAAI,MAAM,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBACnC,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACpD,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACK,KAAK,CAAC,qBAAqB,CACjC,MAAmB,EACnB,OAA+C;QAE/C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAChD,IAAI,CAAC,SAAS,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACjC,oCAAoC;YACpC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QAED,IAAI,aAAwD,CAAC;QAC7D,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,4BAA4B,SAAS,IAAI,CAAC,CAAC;QAC1E,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YACtD,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,4EAA4E;QAC5E,wEAAwE;QACxE,8EAA8E;QAC9E,8EAA8E;QAC9E,+CAA+C;QAC/C,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QACvC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,GAA8C,CAAC,CAAC,CAAC;QAE3E,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CACV,sCAAsC,SAAS,uCAAuC,MAAM,CAAC,UAAU,GAAG,CAC3G,CAAC;gBACF,+DAA+D;gBAC/D,qEAAqE;gBACrE,uCAAuC;gBACvC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;gBACvD,OAAO,CAAC,iDAAiD;YAC3D,CAAC;YACD,wEAAwE;YACxE,uEAAuE;YACvE,+DAA+D;YAC/D,OAAO,CAAC,KAAK,CACX,0CAA0C,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,GAAG,CAAC,EAAE,CAC/E,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,IAAI,aAAa;gBAAE,YAAY,CAAC,aAAa,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAe;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,UAAU,CAAC,GAAe;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,GAAG,CAAC,YAAY,KAAK,WAAW,CAAC,EAAE,EAAE,CAAC;YACxC,uEAAuE;YACvE,sEAAsE;YACtE,wEAAwE;YACxE,0EAA0E;YAC1E,uEAAuE;YACvE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;YAC9E,CAAC;YACD,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC/D,CAAC;QACD,6EAA6E;QAC7E,4EAA4E;QAC5E,2EAA2E;QAC3E,yEAAyE;QACzE,gEAAgE;QAChE,EAAE;QACF,4EAA4E;QAC5E,8EAA8E;QAC9E,4EAA4E;QAC5E,wEAAwE;QACxE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,GAAG,CAAC,UAAU,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACK,cAAc,CAAC,GAAe;QACpC,oDAAoD;QACpD,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC;YAAE,OAAO,EAAE,CAAC;QAClD,uDAAuD;QACvD,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC;QACzB,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,cAAc,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QACD,mDAAmD;QACnD,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC;QACjC,IAAI,SAAS,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACrC,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACxE,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBAClD,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;oBACvB,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;gBAChD,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,YAAY,CAAC,GAAW;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC;IAC1D,CAAC;IAED;;;;;;OAMG;IACK,YAAY,CAAC,GAAW;QAC9B,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5C,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,YAAY,CAAC,GAAW;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC;IAC5D,CAAC;IAEO,WAAW,CAAC,WAAoC;QACtD,OAAO,WAAW,KAAK,WAAW,CAAC,KAAK,IAAI,WAAW,KAAK,WAAW,CAAC,cAAc,CAAC;IACzF,CAAC;IAED;;;;;;OAMG;IACK,kBAAkB,CAAC,WAAoC;QAC7D,OAAO,WAAW,KAAK,WAAW,CAAC,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACzE,CAAC;IAEO,WAAW,CAAC,GAAe;QACjC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;QACpC,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC3B,IAAI,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;QACtD,yEAAyE;QACzE,IAAI,OAAO,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACK,UAAU,CAAC,GAAe;QAChC,OAAO,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACK,kBAAkB,CAAC,GAAe;QACxC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QACxD,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;QAChC,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC;YAAE,OAAO;QAEzE,IAAI,OAAO,GAAG,KAAK,EAAE,QAAQ,IAAI,EAAE,CAAC;QACpC,IAAI,OAAO,KAAK,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACzD,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,OAAO,KAAK,EAAE;YAAE,OAAO;QAE3B,2EAA2E;QAC3E,mEAAmE;QACnE,IAAI,CAAC;YACH,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,uEAAuE;QACzE,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACK,mBAAmB,CAAC,GAAe;QACzC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;QACzD,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;QAChC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC;YAAE,OAAO;QAE1E,IAAI,OAAO,GAAG,KAAK,EAAE,QAAQ,IAAI,EAAE,CAAC;QACpC,oEAAoE;QACpE,uEAAuE;QACvE,2EAA2E;QAC3E,sEAAsE;QACtE,2EAA2E;QAC3E,6CAA6C;QAC7C,IAAI,OAAO,GAAG,KAAK,EAAE,QAAQ,IAAI,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;YAClC,IAAI,OAAO,KAAK,EAAE;gBAAE,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;YACzD,IAAI,OAAO,KAAK,EAAE;gBAAE,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACjE,CAAC;QACD,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,EAAE;YAAE,OAAO;QAE7C,6EAA6E;QAC7E,mEAAmE;QACnE,IAAI,CAAC;YACH,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,uEAAuE;QACzE,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,GAAe,EAAE,GAAW;QACvD,2BAA2B;QAC3B,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAE/C,qEAAqE;QACrE,4EAA4E;QAC5E,4EAA4E;QAC5E,sCAAsC;QACtC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC;YAAE,OAAO,IAAI,CAAC;QAE5D,gFAAgF;QAChF,kFAAkF;QAClF,yEAAyE;QACzE,IAAI,GAAG,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE9B,uBAAuB;QACvB,IAAI,GAAG,CAAC,YAAY,KAAK,WAAW,CAAC,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3E,OAAO,IAAI,CAAC;QACd,CAAC;QAED,qEAAqE;QACrE,wDAAwD;QACxD,IACE,GAAG,CAAC,YAAY,KAAK,WAAW,CAAC,EAAE;YACnC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC/B,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAChC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,uEAAuE;QACvE,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1E,OAAO,IAAI,CAAC;QACd,CAAC;QAED,yEAAyE;QACzE,yEAAyE;QACzE,yEAAyE;QAEzE,6EAA6E;QAC7E,6EAA6E;QAC7E,4EAA4E;QAC5E,qEAAqE;QACrE,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1F,uDAAuD;YACvD,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC;YAC7F,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,2EAA2E;YAC3E,0EAA0E;YAC1E,0EAA0E;YAC1E,yEAAyE;YACzE,uEAAuE;YACvE,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACxE,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,4EAA4E;QAC5E,0EAA0E;QAC1E,yEAAyE;QACzE,6EAA6E;QAC7E,4EAA4E;QAC5E,2EAA2E;QAC3E,2EAA2E;QAC3E,6CAA6C;QAC7C,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,wEAAwE;QACxE,kDAAkD;QAClD,0EAA0E;QAC1E,yEAAyE;QACzE,sEAAsE;QACtE,sEAAsE;QACtE,wEAAwE;QACxE,wEAAwE;QACxE,8EAA8E;QAC9E,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC3D,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBACtB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;oBACxB,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBACrC,CAAC;gBACD,OAAO;oBACL,UAAU,EAAE,GAAG;oBACf,aAAa,EAAE,KAAK;oBACpB,OAAO,EAAE,GAAG;oBACZ,eAAe,EAAE,cAAc;iBAChC,CAAC;YACJ,CAAC;QACH,CAAC;QAED,sEAAsE;QACtE,oEAAoE;QACpE,wDAAwD;QAExD,yEAAyE;QACzE,uEAAuE;QACvE,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QAC1C,IACE,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI;YACrC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,iBAAiB,EACvD,CAAC;YACD,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;YACzC,OAAO;gBACL,UAAU,EAAE,GAAG;gBACf,aAAa,EAAE,KAAK;gBACpB,OAAO,EAAE,GAAG;gBACZ,eAAe,EAAE,WAAW;aAC7B,CAAC;QACJ,CAAC;QAED,8EAA8E;QAC9E,2EAA2E;QAC3E,2EAA2E;QAC3E,gBAAgB;QAChB,IAAI,YAAgC,CAAC;QACrC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,EAAE,CAAC;YAC1C,YAAY,GAAG,OAAO,CAAC;YACvB,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;gBACvC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;gBACpC,0DAA0D;gBAC1D,IAAI,OAAO,EAAE,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACzD,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CACrC,CAAC,CAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAC/D,CAAC;oBACF,IAAI,SAAS,IAAI,OAAO,SAAS,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;wBACtD,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;oBACjE,CAAC;gBACH,CAAC;gBACD,wEAAwE;gBACxE,sEAAsE;gBACtE,0DAA0D;gBAC1D,IAAI,YAAY,KAAK,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtD,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;gBAC7D,CAAC;gBACD,mDAAmD;gBACnD,IAAI,CAAC,YAAY;oBAAE,YAAY,GAAG,OAAO,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC;IAC9E,CAAC;IAED;;;;;;;;;;OAUG;IACK,kBAAkB,CAAC,GAAW,EAAE,GAAW;QACjD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC;QACxD,MAAM,SAAS,GAAG,YAAY,GAAG,sBAAsB,CAAC;QAExD,MAAM,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAClE,0EAA0E;QAC1E,sEAAsE;QACtE,6EAA6E;QAC7E,0EAA0E;QAC1E,4EAA4E;QAC5E,sEAAsE;QACtE,8EAA8E;QAC9E,sEAAsE;QACtE,MAAM,gBAAgB,GAAG,GAAG,GAAG,KAAK,GAAG,EAAE,CAAC;QAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;QACrG,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;QAEpF,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;QAEjD,4DAA4D;QAC5D,qEAAqE;QACrE,gEAAgE;QAChE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,YAAY,CAAC;QACjD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,UAAU,CAAC;QAC7C,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,aAAa,CAAC;QAEnD,sEAAsE;QACtE,6CAA6C;QAC7C,YAAY,CAAC,MAAM,IAAI,CAAC,CAAC;QACzB,aAAa,CAAC,MAAM,IAAI,CAAC,CAAC;QAC1B,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC;QACvB,YAAY,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC9B,aAAa,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC/B,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,iBAAiB,CACvB,GAA6B,EAC7B,GAAW,EACX,GAAW,EACX,QAAgB;QAEhB,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YAChE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,uBAAuB,CAAC,GAAW,EAAE,QAAgB;QAC3D,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC7E,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAEO,YAAY,CAAC,MAAmB,EAAE,GAAW,EAAE,QAAgB;QACrE,MAAM,OAAO,GAAG,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;QACxC,MAAM,MAAM,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,QAAQ,CAAC;QAC7C,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;QAC3D,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC;IAC1B,CAAC;IAED,gEAAgE;IACxD,iBAAiB;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC9C,IAAI,GAAG,GAAG,MAAM,CAAC,UAAU,GAAG,eAAe,EAAE,CAAC;gBAC9C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC7C,IAAI,GAAG,GAAG,MAAM,CAAC,UAAU,GAAG,eAAe,EAAE,CAAC;gBAC9C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,GAAe,EAAE,OAAe;QACtD,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,YAAY,KAAK,SAAS;YAAE,OAAO;QAC9D,IAAI,CAAC;YACH,MAAM,WAAW,CAAC;gBAChB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;gBAC1B,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAC9B,SAAS,EAAE,GAAG,CAAC,UAAU;gBACzB,WAAW,EAAE,GAAG,CAAC,YAAY;gBAC7B,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,iCAAiC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;CACF"}
|
package/dist/session-store.d.ts
CHANGED
|
@@ -28,6 +28,32 @@ export declare class SessionStore {
|
|
|
28
28
|
private lastBotReplySeq;
|
|
29
29
|
constructor(adapter: DbAdapter);
|
|
30
30
|
init(): void;
|
|
31
|
+
/**
|
|
32
|
+
* XIN-154 existing-row migration: collapse duplicate
|
|
33
|
+
* (session_id, role, message_seq) rows left by the pre-fix seq236 double-write,
|
|
34
|
+
* keeping the lowest id (the earliest insert) in each group.
|
|
35
|
+
*
|
|
36
|
+
* Only REAL wire seqs (message_seq > 0) participate. Rows are exempt when:
|
|
37
|
+
* - message_seq IS NULL (assistant / legacy / no-seq turns), or
|
|
38
|
+
* - message_seq <= 0 — notably the seq=0 SENTINEL a synthetic cron fire
|
|
39
|
+
* carries (no real wire seq; see index.ts where the cron round stores
|
|
40
|
+
* seq=0). Multiple cron rounds legitimately share seq=0, so folding on it
|
|
41
|
+
* would delete real data — hence `> 0`, matching the codebase's existing
|
|
42
|
+
* "real seq" predicate (`msg.message_seq > 0`).
|
|
43
|
+
* Rows that merely share a seq across roles (a user turn and the bot's reply)
|
|
44
|
+
* are preserved because role is part of the grouping key.
|
|
45
|
+
*
|
|
46
|
+
* Wrapped in a single transaction with explicit before/after row accounting: a
|
|
47
|
+
* mismatch between the delete count and the row delta means the table was
|
|
48
|
+
* mutated concurrently, so we throw and roll back rather than report a clean
|
|
49
|
+
* migration over an inconsistent result (防丢数据). Idempotent: a second run over
|
|
50
|
+
* already-clean data deletes nothing and leaves counts unchanged.
|
|
51
|
+
*/
|
|
52
|
+
dedupeMessagesBySeq(): {
|
|
53
|
+
before: number;
|
|
54
|
+
removed: number;
|
|
55
|
+
after: number;
|
|
56
|
+
};
|
|
31
57
|
getOrCreate(id: string, channelId: string, channelType: number): Session;
|
|
32
58
|
appendUser(sessionId: string, content: string, messageSeq?: number, fromName?: string): void;
|
|
33
59
|
appendAssistant(sessionId: string, content: string, messageSeq?: number, botName?: string): void;
|
package/dist/session-store.js
CHANGED
|
@@ -102,10 +102,36 @@ export class SessionStore {
|
|
|
102
102
|
catch (err) {
|
|
103
103
|
throw new Error(`session-store: messages column migration failed — database is in an unknown state. Underlying error: ${String(err)}`);
|
|
104
104
|
}
|
|
105
|
+
// XIN-154: collapse any pre-existing seq236-style duplicate rows BEFORE
|
|
106
|
+
// creating the partial unique index — a unique index cannot be built over a
|
|
107
|
+
// table that already violates it. Idempotent + transactional (see the method),
|
|
108
|
+
// so it is safe to run on every startup; on an already-clean DB it deletes
|
|
109
|
+
// nothing. After this, INSERT OR IGNORE (insertMessage) keeps the table clean.
|
|
110
|
+
this.dedupeMessagesBySeq();
|
|
111
|
+
// Partial unique index that makes the (session_id, role, message_seq) write
|
|
112
|
+
// idempotent. Keyed on role because a user turn and the bot's reply
|
|
113
|
+
// legitimately share the inbound seq (appendAssistant is called with the
|
|
114
|
+
// inbound message_seq), so a session_id+seq-only index would wrongly forbid
|
|
115
|
+
// the reply. The predicate is `message_seq > 0` (not merely IS NOT NULL):
|
|
116
|
+
// a synthetic cron fire carries the seq=0 SENTINEL (no real wire seq; see
|
|
117
|
+
// index.ts), and multiple cron rounds legitimately share seq=0 — constraining
|
|
118
|
+
// them would silently drop real rounds via INSERT OR IGNORE. So only real
|
|
119
|
+
// positive wire seqs are deduped; NULL- and 0/negative-seq turns stay
|
|
120
|
+
// unconstrained. `> 0` matches the existing "real seq" predicate in index.ts.
|
|
121
|
+
this.adapter.exec('CREATE UNIQUE INDEX IF NOT EXISTS idx_messages_session_role_seq ' +
|
|
122
|
+
'ON messages(session_id, role, message_seq) WHERE message_seq > 0');
|
|
105
123
|
this.selectSession = this.adapter.prepare('SELECT * FROM sessions WHERE id = ?');
|
|
106
124
|
this.insertSession = this.adapter.prepare('INSERT INTO sessions (id, channel_id, channel_type, created_at, updated_at) VALUES (?, ?, ?, ?, ?)');
|
|
107
125
|
this.touchSession = this.adapter.prepare('UPDATE sessions SET updated_at = ? WHERE id = ?');
|
|
108
|
-
|
|
126
|
+
// XIN-145 root cause: the G4 cold-start backfill (seedHistoryFromApi) and the
|
|
127
|
+
// live inbound path both persisted the SAME triggering message, doubling the
|
|
128
|
+
// row at its message_seq (the "seq236" bug). The cure is a PARTIAL unique
|
|
129
|
+
// index (created above) plus INSERT OR IGNORE here: a re-write of an already
|
|
130
|
+
// stored (session_id, role, message_seq) is silently dropped, making append()
|
|
131
|
+
// idempotent. The index is partial on `message_seq > 0`, so NULL-seq turns
|
|
132
|
+
// AND the seq=0 cron sentinel (multiple legit rounds share it) are exempt —
|
|
133
|
+
// OR IGNORE never suppresses them.
|
|
134
|
+
this.insertMessage = this.adapter.prepare('INSERT OR IGNORE INTO messages (session_id, role, content, timestamp, message_seq, from_name) VALUES (?, ?, ?, ?, ?, ?)');
|
|
109
135
|
this.selectRecentMessages = this.adapter.prepare('SELECT role, content, message_seq, from_name FROM messages WHERE session_id = ? ORDER BY id DESC LIMIT ?');
|
|
110
136
|
this.deleteExpired = this.adapter.prepare('DELETE FROM sessions WHERE updated_at < ?');
|
|
111
137
|
this.deleteSessionStmt = this.adapter.prepare('DELETE FROM sessions WHERE id = ?');
|
|
@@ -120,6 +146,43 @@ export class SessionStore {
|
|
|
120
146
|
this.deleteSdkSession = this.adapter.prepare('DELETE FROM sdk_sessions WHERE session_id = ?');
|
|
121
147
|
this.deleteExpiredSdkSessions = this.adapter.prepare('DELETE FROM sdk_sessions WHERE updated_at < ?');
|
|
122
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* XIN-154 existing-row migration: collapse duplicate
|
|
151
|
+
* (session_id, role, message_seq) rows left by the pre-fix seq236 double-write,
|
|
152
|
+
* keeping the lowest id (the earliest insert) in each group.
|
|
153
|
+
*
|
|
154
|
+
* Only REAL wire seqs (message_seq > 0) participate. Rows are exempt when:
|
|
155
|
+
* - message_seq IS NULL (assistant / legacy / no-seq turns), or
|
|
156
|
+
* - message_seq <= 0 — notably the seq=0 SENTINEL a synthetic cron fire
|
|
157
|
+
* carries (no real wire seq; see index.ts where the cron round stores
|
|
158
|
+
* seq=0). Multiple cron rounds legitimately share seq=0, so folding on it
|
|
159
|
+
* would delete real data — hence `> 0`, matching the codebase's existing
|
|
160
|
+
* "real seq" predicate (`msg.message_seq > 0`).
|
|
161
|
+
* Rows that merely share a seq across roles (a user turn and the bot's reply)
|
|
162
|
+
* are preserved because role is part of the grouping key.
|
|
163
|
+
*
|
|
164
|
+
* Wrapped in a single transaction with explicit before/after row accounting: a
|
|
165
|
+
* mismatch between the delete count and the row delta means the table was
|
|
166
|
+
* mutated concurrently, so we throw and roll back rather than report a clean
|
|
167
|
+
* migration over an inconsistent result (防丢数据). Idempotent: a second run over
|
|
168
|
+
* already-clean data deletes nothing and leaves counts unchanged.
|
|
169
|
+
*/
|
|
170
|
+
dedupeMessagesBySeq() {
|
|
171
|
+
const tx = this.adapter.transaction(() => {
|
|
172
|
+
const before = this.adapter.prepare('SELECT COUNT(*) AS n FROM messages').get().n;
|
|
173
|
+
const result = this.adapter
|
|
174
|
+
.prepare('DELETE FROM messages WHERE message_seq > 0 AND id NOT IN (' +
|
|
175
|
+
'SELECT MIN(id) FROM messages WHERE message_seq > 0 ' +
|
|
176
|
+
'GROUP BY session_id, role, message_seq)')
|
|
177
|
+
.run();
|
|
178
|
+
const after = this.adapter.prepare('SELECT COUNT(*) AS n FROM messages').get().n;
|
|
179
|
+
if (before - after !== result.changes) {
|
|
180
|
+
throw new Error(`session-store: dedup row accounting mismatch (before=${before}, after=${after}, deleted=${result.changes}) — rolling back`);
|
|
181
|
+
}
|
|
182
|
+
return { before, removed: result.changes, after };
|
|
183
|
+
});
|
|
184
|
+
return tx();
|
|
185
|
+
}
|
|
123
186
|
getOrCreate(id, channelId, channelType) {
|
|
124
187
|
const now = Date.now();
|
|
125
188
|
const existing = this.selectSession.get(id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../src/session-store.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAyB3E,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+Cd,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE9C,SAAS,YAAY,CAAC,GAAe;IACnC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,YAAY;IACN,OAAO,CAAY;IAE5B,aAAa,CAAqB;IAClC,aAAa,CAAqB;IAClC,YAAY,CAAqB;IACjC,aAAa,CAAqB;IAClC,oBAAoB,CAAqB;IACzC,aAAa,CAAqB;IAClC,iBAAiB,CAAqB;IACtC,kBAAkB,CAAqB;IACvC,kBAAkB,CAAqB;IACvC,gBAAgB,CAAqB;IACrC,gBAAgB,CAAqB;IACrC,gBAAgB,CAAqB;IACrC,wBAAwB,CAAqB;IAErD,mFAAmF;IAC3E,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEpD,YAAY,OAAkB;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,IAAI;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE1B,6EAA6E;QAC7E,6EAA6E;QAC7E,4EAA4E;QAC5E,0EAA0E;QAC1E,4EAA4E;QAC5E,sEAAsE;QACtE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO;iBACtB,OAAO,CAAC,6BAA6B,CAAC;iBACtC,GAAG,EAA6B,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,EAAE,CAAC;gBAChD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YAC3E,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,EAAE,CAAC;gBAC9C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,wGAAwG,MAAM,CAAC,GAAG,CAAC,EAAE,CACtH,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;QACjF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CACvC,oGAAoG,CACrG,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC;QAC5F,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CACvC
|
|
1
|
+
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../src/session-store.ts"],"names":[],"mappings":"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"}
|