@songsid/agend 2.2.0-alpha.5 → 2.2.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth-api.d.ts +22 -0
- package/dist/auth-api.js +65 -1
- package/dist/auth-api.js.map +1 -1
- package/dist/channel/adapters/discord.js +9 -0
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/command-table.d.ts +8 -1
- package/dist/command-table.js +13 -4
- package/dist/command-table.js.map +1 -1
- package/dist/fleet-manager.d.ts +38 -0
- package/dist/fleet-manager.js +128 -5
- package/dist/fleet-manager.js.map +1 -1
- package/dist/locale.js +10 -0
- package/dist/locale.js.map +1 -1
- package/dist/public-web-gateway.js +2 -2
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/topic-commands.js +3 -2
- package/dist/topic-commands.js.map +1 -1
- package/dist/ui/chat-render.js +6 -0
- package/dist/ui/chat-strings.js +4 -0
- package/dist/ui/chat-thread.js +7 -3
- package/dist/ui/panel-chat.js +7 -0
- package/dist/ui/preview-panel.js +2 -1
- package/dist/ui/preview.js +49 -0
- package/dist/ui/shared/agend-auth.js +15 -7
- package/dist/ui/shared/app.css +8 -1
- package/dist/ui/shared/signin.js +38 -1
- package/dist/ui/signin.html +3 -0
- package/dist/web-chat-history.d.ts +97 -6
- package/dist/web-chat-history.js +189 -12
- package/dist/web-chat-history.js.map +1 -1
- package/dist/web-chat-store.d.ts +45 -0
- package/dist/web-chat-store.js +192 -0
- package/dist/web-chat-store.js.map +1 -0
- package/dist/web-login.d.ts +2 -0
- package/dist/web-login.js +4 -0
- package/dist/web-login.js.map +1 -1
- package/dist/web-returning-device.d.ts +84 -0
- package/dist/web-returning-device.js +204 -0
- package/dist/web-returning-device.js.map +1 -0
- package/dist/web-upload.d.ts +21 -0
- package/dist/web-upload.js +50 -1
- package/dist/web-upload.js.map +1 -1
- package/package.json +1 -1
package/dist/command-table.js
CHANGED
|
@@ -92,8 +92,17 @@ export const COMMANDS = [
|
|
|
92
92
|
{ name: "tips", slash: true, denied: PERMISSION_DENIED, scopes: everywhere("anyone"), telegram: tg(ANYONE, ANYONE, PASS) },
|
|
93
93
|
];
|
|
94
94
|
const BY_NAME = new Map(COMMANDS.map(spec => [spec.name, spec]));
|
|
95
|
+
/**
|
|
96
|
+
* #1569: other names for a command. An alias is the SAME row — its permission gate, scopes, disabled state, refusals and
|
|
97
|
+
* subcommands are the target's, never a copy that could drift. Every lookup by name resolves through this.
|
|
98
|
+
*/
|
|
99
|
+
export const COMMAND_ALIASES = Object.freeze({ web: "dashboard" });
|
|
100
|
+
/** The command-table name a typed or slash name stands for (itself unless it is an alias). */
|
|
101
|
+
export function canonicalCommand(name) {
|
|
102
|
+
return Object.prototype.hasOwnProperty.call(COMMAND_ALIASES, name) ? COMMAND_ALIASES[name] : name;
|
|
103
|
+
}
|
|
95
104
|
export function commandSpec(name) {
|
|
96
|
-
return BY_NAME.get(name);
|
|
105
|
+
return BY_NAME.get(canonicalCommand(name));
|
|
97
106
|
}
|
|
98
107
|
export function ruleFor(spec, scope, platform) {
|
|
99
108
|
return platform === "telegram" ? spec.telegram[scope] : spec.scopes[scope];
|
|
@@ -107,7 +116,7 @@ export function isLocked(spec) {
|
|
|
107
116
|
}
|
|
108
117
|
/** The prefix for a slash command's menu description: generated, never typed. Unknown names get none. */
|
|
109
118
|
export function slashLock(name) {
|
|
110
|
-
const spec = BY_NAME.get(name);
|
|
119
|
+
const spec = BY_NAME.get(canonicalCommand(name));
|
|
111
120
|
return spec && isLocked(spec) ? "🔒 " : "";
|
|
112
121
|
}
|
|
113
122
|
/** What a menu entry says after its description, as a locale key: the argument a command takes (#1145). */
|
|
@@ -122,7 +131,7 @@ export const TELEGRAM_MENUS = {
|
|
|
122
131
|
/** The fleet's forum group (its `chat` and `chat_administrators` scopes): the General topic and the instance topics. */
|
|
123
132
|
fleet: {
|
|
124
133
|
scopes: ["general", "fleet"],
|
|
125
|
-
names: ["status", "sysinfo", "dashboard", "ctx", "compact", "steer", "btw", "clear", "model", "effort",
|
|
134
|
+
names: ["status", "sysinfo", "dashboard", "web", "ctx", "compact", "steer", "btw", "clear", "model", "effort",
|
|
126
135
|
"pause", "wake", "restart", "collab", "update", "profile", "doctor", "login", "usage", "tips", "visibility"],
|
|
127
136
|
},
|
|
128
137
|
/**
|
|
@@ -148,7 +157,7 @@ export function isLockedOnTelegram(spec, scopes) {
|
|
|
148
157
|
export function telegramMenu(menu) {
|
|
149
158
|
const { scopes, names } = TELEGRAM_MENUS[menu];
|
|
150
159
|
return names.map(name => {
|
|
151
|
-
const spec = BY_NAME.get(name);
|
|
160
|
+
const spec = BY_NAME.get(canonicalCommand(name));
|
|
152
161
|
if (!spec)
|
|
153
162
|
throw new Error(`Telegram ${menu} menu lists /${name}, which the command table does not know`);
|
|
154
163
|
const argHint = TELEGRAM_ARG_HINTS[name];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-table.js","sourceRoot":"","sources":["../src/command-table.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"command-table.js","sourceRoot":"","sources":["../src/command-table.ts"],"names":[],"mappings":"AAuEA,MAAM,MAAM,GAA4B,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AAEhF,iCAAiC;AACjC,MAAM,UAAU,GAAG,CAAC,KAAmB,EAAyB,EAAE,CAChE,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;AAElF,qGAAqG;AACrG,MAAM,eAAe,GAAG,CAAC,KAAmB,EAAE,SAAgB,EAAyB,EAAE,CACvF,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;AAE9F,4EAA4E;AAC5E,MAAM,WAAW,GAAG,CAAC,KAAmB,EAAE,SAAgB,EAAyB,EAAE,CACnF,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;AAEtH,MAAM,cAAc,GAAU,CAAC,gBAAgB,CAAC,CAAC;AACjD,MAAM,iBAAiB,GAAU,CAAC,mBAAmB,CAAC,CAAC;AACvD,MAAM,QAAQ,GAAU,CAAC,kBAAkB,CAAC,CAAC;AAC7C,MAAM,cAAc,GAAU,CAAC,wBAAwB,CAAC,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,IAAI,GAAiB,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AACjD,MAAM,MAAM,GAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AACjD,MAAM,WAAW,GAAiB,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;AAC3D,MAAM,aAAa,GAAiB,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;AAC/D,MAAM,aAAa,GAAiB,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;AAC/D,iIAAiI;AACjI,MAAM,eAAe,GAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC3D,MAAM,qBAAqB,GAAiB,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;AACvE,MAAM,OAAO,GAAiB,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,uFAAuF,EAAE,CAAC;AAClJ,MAAM,EAAE,GAAG,CAAC,OAAqB,EAAE,KAAmB,EAAE,OAAqB,EAAE,OAAqB,IAAI,EAA2B,EAAE,CACnI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACtC;;;;GAIG;AACH,MAAM,aAAa,GAAG,CAAC,OAAqB,EAAE,IAAY,EAA2B,EAAE,CACrF,EAAE,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,oBAAoB,EAAE,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAEpE,MAAM,CAAC,MAAM,QAAQ,GAA2B;IAC9C;QACE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,kBAAkB,CAAC;QACpF,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,sBAAsB,CAAC,EAAE;YACtF,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,sBAAsB,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,sBAAsB,CAAC,EAAE,EAAE;QAC7F,QAAQ,EAAE,aAAa,CAAC,WAAW,EAAE,SAAS,CAAC;KAChD;IACD,6BAA6B;IAC7B;QACE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc;QAClD,8FAA8F;QAC9F,kGAAkG;QAClG,MAAM,EAAE;YACN,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,qBAAqB,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,qBAAqB,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,wBAAwB,CAAC,EAAE;YACzI,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,0HAA0H,EAAE;SAC7J;QACD,QAAQ,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC;KAC3C;IACD,kHAAkH;IAClH,mHAAmH;IACnH,gCAAgC;IAChC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,yBAAyB,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,eAAe,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,eAAe,CAAC,EAAE;IAC5K,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE;IACtI,mFAAmF;IACnF,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,eAAe,EAAE,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;IAE/I,2BAA2B;IAC3B,kHAAkH;IAClH,oEAAoE;IACpE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,eAAe,CAAC,eAAe,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,qBAAqB,CAAC,EAAE;IAC3L,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,eAAe,CAAC,eAAe,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,qBAAqB,CAAC,EAAE;IAC1L,gHAAgH;IAChH,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,oBAAoB,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,eAAe,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,qBAAqB,CAAC,EAAE;IAC9M,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,eAAe,CAAC,eAAe,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,qBAAqB,CAAC,EAAE;IAC3L,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,eAAe,CAAC,eAAe,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,qBAAqB,CAAC,EAAE;IAC3L,2EAA2E;IAC3E,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,eAAe,CAAC,eAAe,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE;IAC5J,2EAA2E;IAC3E,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,CAAC,eAAe,EAAE,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE;IAC/J,2BAA2B;IAC3B,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,eAAe,EAAE,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,qBAAqB,CAAC,EAAE;IACjM,mHAAmH;IACnH,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,CAAC,EAAE;IAChK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,CAAC,EAAE;IAC9J,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,CAAC,EAAE;IACjK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,CAAC,EAAE;IAE9J,0FAA0F;IAC1F,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,oBAAoB,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE;IAC7J,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE;IAC5I,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE;IAC3I,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE;IACzK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE;IAC1I,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE;IAClL,kFAAkF;IAClF,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE;IAClJ,2GAA2G;IAC3G,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE;IAClI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IAC9H,oDAAoD;IACpD,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;CAC3H,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAEjE;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAqC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;AAErG,8FAA8F;AAC9F,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACrG,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7C,CAAC;AAKD,MAAM,UAAU,OAAO,CAAC,IAAiB,EAAE,KAAmB,EAAE,QAAkB;IAChF,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED,0GAA0G;AAC1G,MAAM,UAAU,QAAQ,CAAC,IAAiB;IACxC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,OAAO,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC;IAChF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,yGAAyG;AACzG,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;IACjD,OAAO,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7C,CAAC;AAED,2GAA2G;AAC3G,MAAM,kBAAkB,GAAqC,EAAE,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,sBAAsB,EAAE,CAAC;AAElI;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,wHAAwH;IACxH,KAAK,EAAE;QACL,MAAM,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC;QAC5B,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ;YAC3G,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC;KAC/G;IACD;;;OAGG;IACH,OAAO,EAAE;QACP,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC;KAC9F;CAC+F,CAAC;AAInG,mHAAmH;AACnH,MAAM,UAAU,kBAAkB,CAAC,IAAiB,EAAE,MAA+B;IACnF,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC;IAChF,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAkB;IAC7C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAC/C,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACtB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,gBAAgB,IAAI,yCAAyC,CAAC,CAAC;QAC1G,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACxG,CAAC,CAAC,CAAC;AACL,CAAC;AAiBD,MAAM,UAAU,aAAa,CAAC,IAAiB,EAAE,KAAmB,EAAE,MAAqB,EAAE,WAAqB,SAAS;IACzH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC5C,IAAI,aAAa,IAAI,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACtE,IAAI,QAAQ,IAAI,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IAClE,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,KAAK,eAAe;YAClB,OAAO,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QACxF,KAAK,eAAe;YAClB,OAAO,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QACxF,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YAClC,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAC3C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,KAAK,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACtG,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/fleet-manager.d.ts
CHANGED
|
@@ -66,6 +66,7 @@ import { type WebNeedsItem } from "./needs-you-hub.js";
|
|
|
66
66
|
import { type OrgChart } from "./web-org.js";
|
|
67
67
|
import { type CacheReport } from "./cache-service.js";
|
|
68
68
|
import { type WebCommandResult } from "./web-commands.js";
|
|
69
|
+
import { type ReturningDevice } from "./web-returning-device.js";
|
|
69
70
|
import { type PreviewAvailability } from "./web-preview.js";
|
|
70
71
|
import { type ConnectionMetadata, type ConnectionBinding, type BindingProbe, type SecretApplyJob, type ProviderSecretApplyJob } from "./connection-secrets.js";
|
|
71
72
|
import { type ProviderSecretStatus } from "./provider-secret-registry.js";
|
|
@@ -434,6 +435,8 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
|
|
|
434
435
|
private sseClients;
|
|
435
436
|
/** The web chat's recent messages: what `/ui/history` serves and what a reconnecting SSE stream is sent. */
|
|
436
437
|
readonly webChatHistory: WebChatHistory;
|
|
438
|
+
/** #1565: the web chat history's files (set at fleet start, once the home and the instances are known). */
|
|
439
|
+
private webChatStore;
|
|
437
440
|
/** Uploaded files and the files the dashboard may fetch back (uploads, reply attachments). */
|
|
438
441
|
readonly webFiles: WebFileLedger;
|
|
439
442
|
/**
|
|
@@ -464,6 +467,9 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
|
|
|
464
467
|
sseHeartbeatMs: number;
|
|
465
468
|
/** The dashboard's login codes. Memory only: a code that outlives the process is a code nobody can prove was not copied. */
|
|
466
469
|
private webLoginCodes;
|
|
470
|
+
/** #1570: browsers that may ask the sign-in page for a fresh code, and how often they may. */
|
|
471
|
+
private returningDevices;
|
|
472
|
+
private readonly codeRequestLimiter;
|
|
467
473
|
/**
|
|
468
474
|
* Set while a Settings apply job is driving the reconcile. The reconcile
|
|
469
475
|
* stays the single doer; it just says out loud what it is doing to whom, so
|
|
@@ -1122,6 +1128,31 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
|
|
|
1122
1128
|
count: number;
|
|
1123
1129
|
durable: boolean;
|
|
1124
1130
|
};
|
|
1131
|
+
/** #1570 (auth-api): this browser becomes a returning device of the code's owner. The cookie value, or null. */
|
|
1132
|
+
rememberReturningDevice(owner: LoginCodeOwner, input: {
|
|
1133
|
+
surface: "local" | "gateway";
|
|
1134
|
+
label: string;
|
|
1135
|
+
}): string | null;
|
|
1136
|
+
/** #1570 (auth-api): the returning device a cookie value proves under the CURRENT token, or null. */
|
|
1137
|
+
verifyReturningDevice(value: string | undefined): ReturningDevice | null;
|
|
1138
|
+
/**
|
|
1139
|
+
* #1570: a returning device asks for a fresh code. It goes privately (a DM, the path /dashboard uses) to the person
|
|
1140
|
+
* whose code that browser last redeemed — and only if they are still a fleet admin of that bot, the bot is live, the
|
|
1141
|
+
* breaker is closed and the rate limits allow it. A public-link request must belong to the link that is open now; the
|
|
1142
|
+
* code carries the owner, so its sign-in still goes through confirmPublicWebLogin. Nothing is posted anywhere else.
|
|
1143
|
+
*/
|
|
1144
|
+
requestReturningCode(device: ReturningDevice, input: {
|
|
1145
|
+
surface: "local" | "gateway";
|
|
1146
|
+
exposureId?: string;
|
|
1147
|
+
label: string;
|
|
1148
|
+
}): Promise<{
|
|
1149
|
+
kind: "sent";
|
|
1150
|
+
} | {
|
|
1151
|
+
kind: "limited";
|
|
1152
|
+
retryAfterMs: number;
|
|
1153
|
+
} | {
|
|
1154
|
+
kind: "refused";
|
|
1155
|
+
}>;
|
|
1125
1156
|
/** Called by the sign-in endpoint: a login the operator did not make should be visible to them. */
|
|
1126
1157
|
onWebLogin(info: {
|
|
1127
1158
|
label: string;
|
|
@@ -2362,6 +2393,13 @@ export declare class FleetManager implements FleetContext, LifecycleContext, Arc
|
|
|
2362
2393
|
/** Discord native `/login` slash — shared by every adapter dispatch block. */
|
|
2363
2394
|
private handleLoginSlash;
|
|
2364
2395
|
queueMirrorMessage(text: string): void;
|
|
2396
|
+
/**
|
|
2397
|
+
* #1565: restore the web chat history of the configured instances from disk and keep writing it back. A file that
|
|
2398
|
+
* is skipped says so in the log; nothing here stops the fleet.
|
|
2399
|
+
*/
|
|
2400
|
+
private restoreWebChat;
|
|
2401
|
+
/** #1565: who an instance is, for its web chat file: its working directory, or its ClassicBot room; null if neither. */
|
|
2402
|
+
private webChatOwner;
|
|
2365
2403
|
/** Push an SSE event to all connected Web UI clients. */
|
|
2366
2404
|
emitSseEvent(event: string, data: unknown): void;
|
|
2367
2405
|
listClaimedTasks(assignee: string): Array<{
|
package/dist/fleet-manager.js
CHANGED
|
@@ -23,7 +23,7 @@ import { freemem, totalmem, cpus, homedir } from "node:os";
|
|
|
23
23
|
import { createServer } from "node:http";
|
|
24
24
|
import { Worker } from "node:worker_threads";
|
|
25
25
|
import { ProbeWorkerPool } from "./probe-worker-pool.js";
|
|
26
|
-
import { join, dirname, basename, delimiter, isAbsolute } from "node:path";
|
|
26
|
+
import { join, dirname, basename, delimiter, isAbsolute, resolve as resolvePath } from "node:path";
|
|
27
27
|
import { fileURLToPath } from "node:url";
|
|
28
28
|
import { getAgendHome, ensureWorkspaceGit } from "./paths.js";
|
|
29
29
|
import { fleetLabel } from "./fleet-label.js";
|
|
@@ -126,6 +126,7 @@ export function applyTaskListCap(tasks, filterAssignee, filterStatus) {
|
|
|
126
126
|
}
|
|
127
127
|
import { handleWebRequest, broadcastSseEvent, SSE_HEARTBEAT_MS } from "./web-api.js";
|
|
128
128
|
import { WebChatHistory, WEB_CHAT_TEXT_MAX, isWebMessageId, newWebMessageId } from "./web-chat-history.js";
|
|
129
|
+
import { WebChatDiskStore } from "./web-chat-store.js";
|
|
129
130
|
import { ReplyButtonStore, parseReplyButtons, replyButtonClickText, replyButtonsFallbackText, REPLY_BUTTON_PREFIX } from "./reply-buttons.js";
|
|
130
131
|
import { ReplyButtonsController } from "./reply-buttons-controller.js";
|
|
131
132
|
import { publicAttachment, sweepOrphanedUploads, WebFileLedger } from "./web-upload.js";
|
|
@@ -139,7 +140,7 @@ import { LOGIN_FLOWS, LOGIN_BACKEND_ALIASES } from "./login-flows.js";
|
|
|
139
140
|
import { LoginSession } from "./login-manager.js";
|
|
140
141
|
import { tightenInstanceDirs } from "./private-dir.js";
|
|
141
142
|
import { decideSlash } from "./slash-authz.js";
|
|
142
|
-
import { commandSpec, decideCommand, ruleFor } from "./command-table.js";
|
|
143
|
+
import { canonicalCommand, commandSpec, decideCommand, ruleFor } from "./command-table.js";
|
|
143
144
|
import { runVisibilityCommand } from "./cross-instance-notice.js";
|
|
144
145
|
import { installedChannel, isPrereleaseVersion, updateNoticeKey } from "./update-check.js";
|
|
145
146
|
import { resolveInstalledAgend } from "./update-dispatch.js";
|
|
@@ -180,6 +181,7 @@ import { bypassesWebGate, handleAuthRequest, serveSigninPage } from "./auth-api.
|
|
|
180
181
|
import { isWebPageNavigation } from "./web-shell-routes.js";
|
|
181
182
|
import { tokenEpoch, WebSessionStore } from "./web-session.js";
|
|
182
183
|
import { WebLoginCodes, LOGIN_CODE_TTL_MS } from "./web-login.js";
|
|
184
|
+
import { CodeRequestLimiter, ReturningDevices } from "./web-returning-device.js";
|
|
183
185
|
import { allowedHostNames, applyWebSecurityHeaders, hostnameOf, isHostAllowed, WEB_HOST_REJECTED_MESSAGE } from "./web-host-guard.js";
|
|
184
186
|
import { createPreviewListener, previewAvailability, previewSettings } from "./web-preview.js";
|
|
185
187
|
import { fleetLevelDifferences, fleetLevelSignature, appendedConnections } from "./fleet-level-config.js";
|
|
@@ -751,6 +753,8 @@ export class FleetManager {
|
|
|
751
753
|
sseClients = new Set();
|
|
752
754
|
/** The web chat's recent messages: what `/ui/history` serves and what a reconnecting SSE stream is sent. */
|
|
753
755
|
webChatHistory = new WebChatHistory();
|
|
756
|
+
/** #1565: the web chat history's files (set at fleet start, once the home and the instances are known). */
|
|
757
|
+
webChatStore = null;
|
|
754
758
|
/** Uploaded files and the files the dashboard may fetch back (uploads, reply attachments). */
|
|
755
759
|
webFiles = new WebFileLedger();
|
|
756
760
|
/**
|
|
@@ -1016,6 +1020,9 @@ export class FleetManager {
|
|
|
1016
1020
|
sseHeartbeatMs = SSE_HEARTBEAT_MS;
|
|
1017
1021
|
/** The dashboard's login codes. Memory only: a code that outlives the process is a code nobody can prove was not copied. */
|
|
1018
1022
|
webLoginCodes = null;
|
|
1023
|
+
/** #1570: browsers that may ask the sign-in page for a fresh code, and how often they may. */
|
|
1024
|
+
returningDevices = null;
|
|
1025
|
+
codeRequestLimiter = new CodeRequestLimiter();
|
|
1019
1026
|
/**
|
|
1020
1027
|
* Set while a Settings apply job is driving the reconcile. The reconcile
|
|
1021
1028
|
* stays the single doer; it just says out loud what it is doing to whom, so
|
|
@@ -3194,7 +3201,9 @@ export class FleetManager {
|
|
|
3194
3201
|
* The door, the table and the start of the command run in one synchronous stretch (#1399 review): no await between
|
|
3195
3202
|
* the check and the act, so the channel's instance cannot be rebound to another bot in between.
|
|
3196
3203
|
*/
|
|
3197
|
-
async dispatchSlash(
|
|
3204
|
+
async dispatchSlash(slash, adapterId, adapter) {
|
|
3205
|
+
// #1569: an alias (/web) is its command (/dashboard) from here on — the door, the table and the handler see one name.
|
|
3206
|
+
const data = { ...slash, command: canonicalCommand(slash.command) };
|
|
3198
3207
|
const door = this.slashDoor(data, adapterId);
|
|
3199
3208
|
if ("refusal" in door) {
|
|
3200
3209
|
await data.respond(t(door.refusal)).catch(() => { });
|
|
@@ -4510,6 +4519,9 @@ export class FleetManager {
|
|
|
4510
4519
|
onWarn: message => this.logger.warn(message),
|
|
4511
4520
|
});
|
|
4512
4521
|
}
|
|
4522
|
+
if (!this.returningDevices) {
|
|
4523
|
+
this.returningDevices = new ReturningDevices({ dataDir: this.dataDir, onWarn: message => this.logger.warn(message) });
|
|
4524
|
+
}
|
|
4513
4525
|
if (!this.webLoginCodes) {
|
|
4514
4526
|
this.webLoginCodes = new WebLoginCodes({
|
|
4515
4527
|
onEvent: event => {
|
|
@@ -4807,13 +4819,81 @@ export class FleetManager {
|
|
|
4807
4819
|
this.initializeWebSessions();
|
|
4808
4820
|
void this.publicWebLink?.close("dashboard revoke");
|
|
4809
4821
|
this.webLoginCodes.revoke();
|
|
4810
|
-
|
|
4822
|
+
// #1570: no browser may ask the sign-in page for a code any more.
|
|
4823
|
+
const devices = this.returningDevices.revokeAll();
|
|
4824
|
+
const sessions = this.webSessions.revokeAll();
|
|
4825
|
+
const result = { count: sessions.count, durable: sessions.durable && devices.durable };
|
|
4811
4826
|
if (result.durable)
|
|
4812
|
-
this.logger.info({ count: result.count }, "Web sessions revoked (all)");
|
|
4827
|
+
this.logger.info({ count: result.count, devices: devices.count }, "Web sessions revoked (all)");
|
|
4813
4828
|
else
|
|
4814
4829
|
this.logger.warn({ count: result.count }, "Web sessions revoked in memory only — the session file could not be updated or removed");
|
|
4815
4830
|
return result;
|
|
4816
4831
|
}
|
|
4832
|
+
/** #1570 (auth-api): this browser becomes a returning device of the code's owner. The cookie value, or null. */
|
|
4833
|
+
rememberReturningDevice(owner, input) {
|
|
4834
|
+
const token = this.webToken;
|
|
4835
|
+
if (!token)
|
|
4836
|
+
return null;
|
|
4837
|
+
this.initializeWebSessions();
|
|
4838
|
+
return this.returningDevices.remember(owner, { ...input, tokenEpoch: tokenEpoch(token), webToken: token });
|
|
4839
|
+
}
|
|
4840
|
+
/** #1570 (auth-api): the returning device a cookie value proves under the CURRENT token, or null. */
|
|
4841
|
+
verifyReturningDevice(value) {
|
|
4842
|
+
const token = this.webToken;
|
|
4843
|
+
if (!token)
|
|
4844
|
+
return null;
|
|
4845
|
+
this.initializeWebSessions();
|
|
4846
|
+
return this.returningDevices.verify(value, token, tokenEpoch(token));
|
|
4847
|
+
}
|
|
4848
|
+
/**
|
|
4849
|
+
* #1570: a returning device asks for a fresh code. It goes privately (a DM, the path /dashboard uses) to the person
|
|
4850
|
+
* whose code that browser last redeemed — and only if they are still a fleet admin of that bot, the bot is live, the
|
|
4851
|
+
* breaker is closed and the rate limits allow it. A public-link request must belong to the link that is open now; the
|
|
4852
|
+
* code carries the owner, so its sign-in still goes through confirmPublicWebLogin. Nothing is posted anywhere else.
|
|
4853
|
+
*/
|
|
4854
|
+
async requestReturningCode(device, input) {
|
|
4855
|
+
const token = this.webToken;
|
|
4856
|
+
if (!token || this.shuttingDown)
|
|
4857
|
+
return { kind: "refused" };
|
|
4858
|
+
this.initializeWebSessions();
|
|
4859
|
+
const paused = this.webLoginCodes.pausedForMs();
|
|
4860
|
+
if (paused > 0)
|
|
4861
|
+
return { kind: "limited", retryAfterMs: paused };
|
|
4862
|
+
const admitted = this.codeRequestLimiter.admit(device.idHash);
|
|
4863
|
+
if (!admitted.ok)
|
|
4864
|
+
return { kind: "limited", retryAfterMs: admitted.retryAfterMs };
|
|
4865
|
+
const { adapterId, userId, chatId, threadId } = device.owner;
|
|
4866
|
+
const adapter = this.adapters.get(adapterId);
|
|
4867
|
+
// The same owner gate /dashboard's private delivery uses: still a fleet admin, the same General, the bot live.
|
|
4868
|
+
const owner = { adapterId, userId, chatId, ...(threadId !== undefined ? { threadId } : {}), binding: adapter };
|
|
4869
|
+
if (!adapter?.sendDirect || !this.publicOwnerCurrent(owner)) {
|
|
4870
|
+
this.logger.info({ adapterId }, "Sign-in code request refused: the recorded owner is no longer a fleet admin of a live bot");
|
|
4871
|
+
return { kind: "refused" };
|
|
4872
|
+
}
|
|
4873
|
+
if (input.surface === "gateway") {
|
|
4874
|
+
const link = this.publicWebLink;
|
|
4875
|
+
if (!link || !input.exposureId || link.exposureId !== input.exposureId || link.status().state !== "open")
|
|
4876
|
+
return { kind: "refused" };
|
|
4877
|
+
}
|
|
4878
|
+
else if (input.exposureId !== undefined)
|
|
4879
|
+
return { kind: "refused" };
|
|
4880
|
+
const issued = this.webLoginCodes.issue({ epoch: tokenEpoch(token), audience: input.exposureId ?? "local", owner });
|
|
4881
|
+
const text = t("web.resend_code", issued.display, Math.round(LOGIN_CODE_TTL_MS / 60_000), input.label || t("web.resend_unknown_browser"), t(input.surface === "gateway" ? "web.resend_public" : "web.resend_local"));
|
|
4882
|
+
try {
|
|
4883
|
+
await withinBudget(adapter.sendDirect(userId, text, { disablePreview: true }), performance.now() + 5_000);
|
|
4884
|
+
}
|
|
4885
|
+
catch (err) {
|
|
4886
|
+
this.webLoginCodes.revokeIfCurrent(issued.issuanceId);
|
|
4887
|
+
this.logger.info({ err: err?.message, adapterId }, "Sign-in code request: the private message could not be sent");
|
|
4888
|
+
return { kind: "refused" };
|
|
4889
|
+
}
|
|
4890
|
+
if (this.webToken !== token || !this.publicOwnerCurrent(owner)) {
|
|
4891
|
+
this.webLoginCodes.revokeIfCurrent(issued.issuanceId);
|
|
4892
|
+
return { kind: "refused" };
|
|
4893
|
+
}
|
|
4894
|
+
this.logger.info({ adapterId, surface: input.surface }, "Web sign-in code sent privately to a returning device's owner");
|
|
4895
|
+
return { kind: "sent" };
|
|
4896
|
+
}
|
|
4817
4897
|
/** Called by the sign-in endpoint: a login the operator did not make should be visible to them. */
|
|
4818
4898
|
onWebLogin(info) {
|
|
4819
4899
|
if (this.fleetConfig?.web?.notify_login === false)
|
|
@@ -5123,6 +5203,9 @@ export class FleetManager {
|
|
|
5123
5203
|
if (ch.adapterId)
|
|
5124
5204
|
this.instanceWorldBinding.set(ch.instanceName, ch.adapterId);
|
|
5125
5205
|
}
|
|
5206
|
+
// #1565: the web chat as it was before this process — the configured instances' only (fleet.yaml and ClassicBot
|
|
5207
|
+
// rooms), before the dashboard serves anything; from now on every change is written back (off the loop).
|
|
5208
|
+
this.restoreWebChat(fleet);
|
|
5126
5209
|
// Poll classicBot.yaml for external changes every 30s
|
|
5127
5210
|
this.classicReloadTimer = setInterval(() => {
|
|
5128
5211
|
// Attributes the synchronous part, up to the reload's first await (#1235).
|
|
@@ -13001,6 +13084,43 @@ export class FleetManager {
|
|
|
13001
13084
|
}, 3000);
|
|
13002
13085
|
}
|
|
13003
13086
|
}
|
|
13087
|
+
/**
|
|
13088
|
+
* #1565: restore the web chat history of the configured instances from disk and keep writing it back. A file that
|
|
13089
|
+
* is skipped says so in the log; nothing here stops the fleet.
|
|
13090
|
+
*/
|
|
13091
|
+
restoreWebChat(fleet) {
|
|
13092
|
+
try {
|
|
13093
|
+
const store = new WebChatDiskStore({ home: getAgendHome(), logger: this.logger, ownerOf: (name) => this.webChatOwner(name) });
|
|
13094
|
+
const names = new Set([...Object.keys(fleet.instances ?? {}), ...(this.classicChannels?.getAll().map(c => c.instanceName) ?? [])]);
|
|
13095
|
+
// A kept message's files are served again under their ids only from the instance's own inbox, by the ledger's
|
|
13096
|
+
// checks (web-upload.ts restoreServed); they leave the ledger with their message.
|
|
13097
|
+
this.webChatHistory.setFiles({
|
|
13098
|
+
storablePath: (id) => this.webFiles.storablePath(id),
|
|
13099
|
+
restore: (entry, instance) => this.webFiles.restoreServed(entry, instance, join(getAgendHome(), "workspaces", instance, "inbox")),
|
|
13100
|
+
drop: (ids) => this.webFiles.dropServed(ids),
|
|
13101
|
+
});
|
|
13102
|
+
let restored = 0;
|
|
13103
|
+
for (const name of names)
|
|
13104
|
+
restored += this.webChatHistory.restore(name, store.load(name));
|
|
13105
|
+
this.webChatStore = store;
|
|
13106
|
+
this.webChatHistory.setStore(store);
|
|
13107
|
+
if (restored)
|
|
13108
|
+
this.logger.info({ restored, instances: names.size }, "Web chat history restored from disk");
|
|
13109
|
+
}
|
|
13110
|
+
catch (err) {
|
|
13111
|
+
this.logger.warn({ err }, "Web chat history could not be restored; it starts empty");
|
|
13112
|
+
}
|
|
13113
|
+
}
|
|
13114
|
+
/** #1565: who an instance is, for its web chat file: its working directory, or its ClassicBot room; null if neither. */
|
|
13115
|
+
webChatOwner(name) {
|
|
13116
|
+
const insts = this.fleetConfig?.instances ?? {};
|
|
13117
|
+
if (Object.prototype.hasOwnProperty.call(insts, name)) {
|
|
13118
|
+
const wd = insts[name].working_directory;
|
|
13119
|
+
return `dir:${wd ? resolvePath(wd) : ""}`;
|
|
13120
|
+
}
|
|
13121
|
+
const room = this.classicChannels?.getAll().find(c => c.instanceName === name);
|
|
13122
|
+
return room ? `room:${room.channelId}:${room.adapterId ?? ""}` : null;
|
|
13123
|
+
}
|
|
13004
13124
|
/** Push an SSE event to all connected Web UI clients. */
|
|
13005
13125
|
emitSseEvent(event, data) {
|
|
13006
13126
|
// #1386: a prompt opened or closed, or an instance's state moved — "Needs you" may have changed.
|
|
@@ -15218,6 +15338,8 @@ Plus the operational skills (fleet-health, instance-lifecycle, scheduling, sessi
|
|
|
15218
15338
|
// #1490 P3: stop() now returns a Promise; await it so the final
|
|
15219
15339
|
// ledger flush completes before process.exit(0) in doStopAll's caller.
|
|
15220
15340
|
const cacheStopped = this.cacheService?.stop() ?? Promise.resolve();
|
|
15341
|
+
// #1565: the web chat's last changes reach the disk (bounded: a slow disk does not hold the shutdown).
|
|
15342
|
+
const webChatStopped = this.webChatStore ? Promise.race([this.webChatStore.flush().catch(() => { }), new Promise(r => setTimeout(r, 3_000).unref?.())]) : Promise.resolve();
|
|
15221
15343
|
const profileStopped = this.runtimeCpuProfiler?.shutdown("fleet shutdown");
|
|
15222
15344
|
this.ipcStoppingInstances.add("__fleet_stopping__");
|
|
15223
15345
|
// Release held delivery promises before awaiting daemon shutdown, then
|
|
@@ -15252,6 +15374,7 @@ Plus the operational skills (fleet-health, instance-lifecycle, scheduling, sessi
|
|
|
15252
15374
|
await needsStopped;
|
|
15253
15375
|
await settingsControlStopped;
|
|
15254
15376
|
await cacheStopped;
|
|
15377
|
+
await webChatStopped;
|
|
15255
15378
|
await this.cpuProfileControl?.close();
|
|
15256
15379
|
this.cpuProfileControl = null;
|
|
15257
15380
|
await this.shutdownLoginWindows();
|