@keyou007/agent-bot 0.1.16-alpha.0 → 0.1.16-alpha.2
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/CHANGELOG.md +10 -0
- package/README.md +1 -1
- package/README.zh.md +1 -1
- package/dist/cli/AgentPrerequisites.js +5 -0
- package/dist/cli/AgentPrerequisites.js.map +1 -1
- package/dist/cli/FeishuAppConfiguration.js +38 -0
- package/dist/cli/FeishuAppConfiguration.js.map +1 -1
- package/dist/cli/FeishuConfigurationFeatures.js +86 -0
- package/dist/cli/FeishuConfigurationFeatures.js.map +1 -0
- package/dist/cli/InitUi.js +90 -0
- package/dist/cli/InitUi.js.map +1 -0
- package/dist/cli.js +401 -271
- package/dist/cli.js.map +1 -1
- package/dist/feishu/CardRenderer.js +17 -6
- package/dist/feishu/CardRenderer.js.map +1 -1
- package/dist/proxy/ProxySessionController.js +10 -7
- package/dist/proxy/ProxySessionController.js.map +1 -1
- package/dist/supervision/SafeRestartNotifier.js +43 -3
- package/dist/supervision/SafeRestartNotifier.js.map +1 -1
- package/dist/supervision/SafeRestartScheduler.js +8 -8
- package/dist/supervision/SafeRestartScheduler.js.map +1 -1
- package/npm-shrinkwrap.json +61 -2
- package/package.json +4 -3
- package/src/cli/AgentPrerequisites.ts +10 -0
- package/src/cli/FeishuAppConfiguration.ts +61 -0
- package/src/cli/FeishuConfigurationFeatures.ts +110 -0
- package/src/cli/InitUi.ts +135 -0
- package/src/cli.ts +551 -403
- package/src/feishu/CardRenderer.ts +19 -7
- package/src/proxy/ProxySessionController.ts +23 -7
- package/src/supervision/SafeRestartNotifier.ts +52 -3
- package/src/supervision/SafeRestartScheduler.ts +8 -8
|
@@ -11,6 +11,7 @@ export class SafeRestartNotifier {
|
|
|
11
11
|
notificationTargets = new Map();
|
|
12
12
|
activeScheduleId;
|
|
13
13
|
terminalScheduleId;
|
|
14
|
+
lastStatus;
|
|
14
15
|
pendingInitialStatus;
|
|
15
16
|
initialCardTimer;
|
|
16
17
|
queue = Promise.resolve();
|
|
@@ -33,12 +34,22 @@ export class SafeRestartNotifier {
|
|
|
33
34
|
this.terminalScheduleId = Math.max(this.terminalScheduleId ?? 0, status.scheduleId);
|
|
34
35
|
}
|
|
35
36
|
if (this.activeScheduleId !== status.scheduleId) {
|
|
37
|
+
const previousStatus = this.lastStatus ?? this.pendingInitialStatus;
|
|
38
|
+
const previousMessageIds = [...this.messageIds];
|
|
39
|
+
const previousTargets = new Map(this.notificationTargets);
|
|
40
|
+
if (previousStatus
|
|
41
|
+
&& previousStatus.phase !== "cancelled"
|
|
42
|
+
&& previousStatus.phase !== "restarting"
|
|
43
|
+
&& previousMessageIds.length > 0) {
|
|
44
|
+
this.enqueueSupersededCards(previousStatus, previousMessageIds, previousTargets);
|
|
45
|
+
}
|
|
36
46
|
this.activeScheduleId = status.scheduleId;
|
|
37
47
|
this.messageIds.clear();
|
|
38
48
|
this.cardHashes.clear();
|
|
39
49
|
this.notificationTargets.clear();
|
|
40
50
|
this.clearInitialCardTimer();
|
|
41
51
|
this.pendingInitialStatus = status;
|
|
52
|
+
this.lastStatus = status;
|
|
42
53
|
this.collectNotificationTargets(status);
|
|
43
54
|
const delayMs = status.phase === "cancelled"
|
|
44
55
|
? 0
|
|
@@ -53,6 +64,7 @@ export class SafeRestartNotifier {
|
|
|
53
64
|
}, delayMs);
|
|
54
65
|
return Promise.resolve();
|
|
55
66
|
}
|
|
67
|
+
this.lastStatus = status;
|
|
56
68
|
this.collectNotificationTargets(status);
|
|
57
69
|
if (this.pendingInitialStatus) {
|
|
58
70
|
this.pendingInitialStatus = status;
|
|
@@ -139,9 +151,14 @@ export class SafeRestartNotifier {
|
|
|
139
151
|
else {
|
|
140
152
|
created = await this.outbound.sendInteractiveCard(contextKey, card);
|
|
141
153
|
}
|
|
142
|
-
if (created
|
|
143
|
-
this.
|
|
144
|
-
|
|
154
|
+
if (created) {
|
|
155
|
+
if (this.activeScheduleId === status.scheduleId) {
|
|
156
|
+
this.messageIds.set(contextKey, created);
|
|
157
|
+
this.cardHashes.set(contextKey, cardHash);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
await this.stopCard(created, status, reason ?? status.reason);
|
|
161
|
+
}
|
|
145
162
|
}
|
|
146
163
|
}
|
|
147
164
|
catch (error) {
|
|
@@ -149,6 +166,29 @@ export class SafeRestartNotifier {
|
|
|
149
166
|
}
|
|
150
167
|
}));
|
|
151
168
|
}
|
|
169
|
+
enqueueSupersededCards(status, messageIds, targets) {
|
|
170
|
+
const queued = this.queue.catch(() => undefined).then(async () => {
|
|
171
|
+
await Promise.all(messageIds.map(async ([contextKey, messageId]) => {
|
|
172
|
+
const reason = targets.get(contextKey)?.reason ?? status.reason;
|
|
173
|
+
await this.stopCard(messageId, status, reason);
|
|
174
|
+
}));
|
|
175
|
+
});
|
|
176
|
+
this.queue = queued;
|
|
177
|
+
}
|
|
178
|
+
async stopCard(messageId, status, reason) {
|
|
179
|
+
try {
|
|
180
|
+
await this.outbound.updateInteractiveCard(messageId, this.renderer.renderSafeRestartStatus({
|
|
181
|
+
scheduleId: status.scheduleId,
|
|
182
|
+
reason,
|
|
183
|
+
phase: "superseded",
|
|
184
|
+
pendingFinalDeliveries: status.activity.pendingFinalDeliveries,
|
|
185
|
+
waitingTasks: [],
|
|
186
|
+
}));
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
this.logger.warn({ error, messageId, scheduleId: status.scheduleId }, "Failed to stop a superseded safe restart status card.");
|
|
190
|
+
}
|
|
191
|
+
}
|
|
152
192
|
collectNotificationTargets(status) {
|
|
153
193
|
for (const target of status.notificationTargets ?? []) {
|
|
154
194
|
const contextKey = target.contextKey.trim();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SafeRestartNotifier.js","sourceRoot":"","sources":["../../src/supervision/SafeRestartNotifier.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAK7D,MAAM,6BAA6B,GAAG,KAAK,CAAC;AAM5C,MAAM,OAAO,mBAAmB;
|
|
1
|
+
{"version":3,"file":"SafeRestartNotifier.js","sourceRoot":"","sources":["../../src/supervision/SafeRestartNotifier.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAK7D,MAAM,6BAA6B,GAAG,KAAK,CAAC;AAM5C,MAAM,OAAO,mBAAmB;IAYX,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,OAAO;IAfT,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,mBAAmB,GAAG,IAAI,GAAG,EAAqC,CAAC;IAC5E,gBAAgB,CAAU;IAC1B,kBAAkB,CAAU;IAC5B,UAAU,CAAqB;IAC/B,oBAAoB,CAAqB;IACzC,gBAAgB,CAAkB;IAClC,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAElC,YACmB,KAAiB,EACjB,QAAwB,EACxB,QAAsB,EACtB,MAA4B,EAC5B,OAAO,GAA+B,EAAE;qBAJxC,KAAK;wBACL,QAAQ;wBACR,QAAQ;sBACR,MAAM;uBACN,OAAO;IACvB,CAAC;IAEJ,MAAM,CAAC,MAAyB;QAC9B,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1F,IAAI,MAAM,CAAC,KAAK,KAAK,WAAW;gBAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC7D,CAAC;QACD,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACrF,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YACjC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,IAAI,CAAC,gBAAgB,KAAK,MAAM,CAAC,UAAU,EAAE,CAAC;YAChD,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,oBAAoB,CAAC;YACpE,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;YAChD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAC1D,IACE,cAAc;mBACX,cAAc,CAAC,KAAK,KAAK,WAAW;mBACpC,cAAc,CAAC,KAAK,KAAK,YAAY;mBACrC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAChC,CAAC;gBACD,IAAI,CAAC,sBAAsB,CAAC,cAAc,EAAE,kBAAkB,EAAE,eAAe,CAAC,CAAC;YACnF,CAAC;YACD,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC;YAC1C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC;YACnC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;YACzB,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,KAAK,WAAW;gBAC1C,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,IAAI,6BAA6B,CAAC;YACrE,IAAI,OAAO,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC,2BAA2B,EAAE,CAAC;YAC5D,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,GAAG,EAAE;gBACtC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;gBAClC,KAAK,IAAI,CAAC,2BAA2B,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;oBAC/D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,gDAAgD,CAAC,CAAC;gBAChF,CAAC,CAAC,CAAC;YACL,CAAC,EAAE,OAAO,CAAC,CAAC;YACZ,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;QACzB,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC;YACnC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACzC,MAAM,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAED,sBAAsB;QACpB,OAAO,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;IACjF,CAAC;IAEO,2BAA2B;QACjC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC;QACzC,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC;QACtC,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IACpD,CAAC;IAEO,OAAO,CAAC,MAAyB;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAC/D,IAAI,IAAI,CAAC,gBAAgB,KAAK,MAAM,CAAC,UAAU;gBAAE,OAAO;YACxD,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;QACpB,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,qBAAqB;QAC3B,IAAI,IAAI,CAAC,gBAAgB;YAAE,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC/D,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;IACpC,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,MAAyB;QAC7C,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACjC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,KAAK,WAAW;YAC/C,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE;iBAC3B,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;iBAC9G,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACjB,EAAE,EAAE,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,cAAc;gBACrD,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC,CAAC,CAAC;QACR,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,EAAE;YAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC;gBACjD,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,MAAM;gBAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,sBAAsB,EAAE,MAAM,CAAC,QAAQ,CAAC,sBAAsB;gBAC9D,YAAY;aACb,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAClD,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,QAAQ;oBAAE,OAAO;gBACzD,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;oBAC3D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;oBAC1C,OAAO;gBACT,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,mEAAmE,CAAC,CAAC;oBACxH,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;oBACnC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;YACD,IAAI,CAAC;gBACH,IAAI,OAA2B,CAAC;gBAChC,IAAI,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;oBACtD,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;gBAChF,CAAC;gBACD,IAAI,cAAc,EAAE,CAAC;oBACnB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC;wBACxC,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;oBACnF,CAAC;oBACD,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAChD,UAAU,EACV,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,IAAI,EAAE,EAClD,IAAI,CACL,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;gBACtE,CAAC;gBACD,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,IAAI,CAAC,gBAAgB,KAAK,MAAM,CAAC,UAAU,EAAE,CAAC;wBAChD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;wBACzC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;oBAC5C,CAAC;yBAAM,CAAC;wBACN,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;oBAChE,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,0CAA0C,CAAC,CAAC;YACtF,CAAC;QACH,CAAC,CAAC,CAAC,CAAC;IACN,CAAC;IAEO,sBAAsB,CAC5B,MAAyB,EACzB,UAAmC,EACnC,OAA+C;QAE/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAC/D,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,EAAE;gBACjE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;gBAChE,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC,CAAC;QACN,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,SAAiB,EAAE,MAAyB,EAAE,MAAc;QACjF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC;gBACzF,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,MAAM;gBACN,KAAK,EAAE,YAAY;gBACnB,sBAAsB,EAAE,MAAM,CAAC,QAAQ,CAAC,sBAAsB;gBAC9D,YAAY,EAAE,EAAE;aACjB,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,EACnD,uDAAuD,CACxD,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,0BAA0B,CAAC,MAAyB;QAC1D,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,mBAAmB,IAAI,EAAE,EAAE,CAAC;YACtD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,CAAC,UAAU;gBAAE,SAAS;YAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC1D,MAAM,cAAc,GAAG,QAAQ,EAAE,cAAc,IAAI,MAAM,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;YACjF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,QAAQ,EAAE,MAAM,CAAC;YACzD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,EAAE;gBACvC,UAAU;gBACV,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7C,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF"}
|
|
@@ -20,9 +20,9 @@ export class SafeRestartScheduler {
|
|
|
20
20
|
schedule(reason, notificationTarget) {
|
|
21
21
|
const newlyScheduled = !this.reason;
|
|
22
22
|
if (newlyScheduled) {
|
|
23
|
-
this.scheduleId += 1;
|
|
24
23
|
this.notificationTargets = [];
|
|
25
24
|
}
|
|
25
|
+
this.scheduleId += 1;
|
|
26
26
|
this.addNotificationTarget(notificationTarget, reason);
|
|
27
27
|
this.reason = reason;
|
|
28
28
|
this.idleSince = undefined;
|
|
@@ -70,12 +70,13 @@ export class SafeRestartScheduler {
|
|
|
70
70
|
const reason = this.reason;
|
|
71
71
|
if (!reason)
|
|
72
72
|
return;
|
|
73
|
+
const scheduleId = this.scheduleId;
|
|
73
74
|
const state = this.options.readActivity();
|
|
74
75
|
if (state.runningSessions > 0 || state.pendingFinalDeliveries > 0) {
|
|
75
76
|
this.idleSince = undefined;
|
|
76
77
|
this.idleInboundAt = undefined;
|
|
77
78
|
await this.emitStatus({
|
|
78
|
-
scheduleId
|
|
79
|
+
scheduleId,
|
|
79
80
|
reason,
|
|
80
81
|
notificationTargets: this.notificationTargetsSnapshot(),
|
|
81
82
|
phase: state.runningSessions > 0 ? "waiting_tasks" : "waiting_delivery",
|
|
@@ -89,7 +90,7 @@ export class SafeRestartScheduler {
|
|
|
89
90
|
this.idleSince = Date.now();
|
|
90
91
|
this.idleInboundAt = latestInboundAt;
|
|
91
92
|
await this.emitStatus({
|
|
92
|
-
scheduleId
|
|
93
|
+
scheduleId,
|
|
93
94
|
reason,
|
|
94
95
|
notificationTargets: this.notificationTargetsSnapshot(),
|
|
95
96
|
phase: "countdown",
|
|
@@ -101,7 +102,7 @@ export class SafeRestartScheduler {
|
|
|
101
102
|
const remainingMs = Math.max(0, quietPeriodMs - (Date.now() - this.idleSince));
|
|
102
103
|
if (remainingMs > 0) {
|
|
103
104
|
await this.emitStatus({
|
|
104
|
-
scheduleId
|
|
105
|
+
scheduleId,
|
|
105
106
|
reason,
|
|
106
107
|
notificationTargets: this.notificationTargetsSnapshot(),
|
|
107
108
|
phase: "countdown",
|
|
@@ -118,7 +119,7 @@ export class SafeRestartScheduler {
|
|
|
118
119
|
this.idleInboundAt = undefined;
|
|
119
120
|
if (confirmed.runningSessions > 0 || confirmed.pendingFinalDeliveries > 0) {
|
|
120
121
|
await this.emitStatus({
|
|
121
|
-
scheduleId
|
|
122
|
+
scheduleId,
|
|
122
123
|
reason,
|
|
123
124
|
notificationTargets: this.notificationTargetsSnapshot(),
|
|
124
125
|
phase: confirmed.runningSessions > 0 ? "waiting_tasks" : "waiting_delivery",
|
|
@@ -127,7 +128,7 @@ export class SafeRestartScheduler {
|
|
|
127
128
|
}
|
|
128
129
|
else {
|
|
129
130
|
await this.emitStatus({
|
|
130
|
-
scheduleId
|
|
131
|
+
scheduleId,
|
|
131
132
|
reason,
|
|
132
133
|
notificationTargets: this.notificationTargetsSnapshot(),
|
|
133
134
|
phase: "countdown",
|
|
@@ -137,7 +138,6 @@ export class SafeRestartScheduler {
|
|
|
137
138
|
}
|
|
138
139
|
return;
|
|
139
140
|
}
|
|
140
|
-
const scheduleId = this.scheduleId;
|
|
141
141
|
const notificationTargets = this.notificationTargetsSnapshot();
|
|
142
142
|
this.clear();
|
|
143
143
|
await this.emitStatus({
|
|
@@ -187,7 +187,7 @@ export class SafeRestartScheduler {
|
|
|
187
187
|
this.notificationTargets[existingIndex] = {
|
|
188
188
|
...existing,
|
|
189
189
|
reason: target.reason,
|
|
190
|
-
...(
|
|
190
|
+
...(target.replyMessageId
|
|
191
191
|
? { replyMessageId: target.replyMessageId }
|
|
192
192
|
: {}),
|
|
193
193
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SafeRestartScheduler.js","sourceRoot":"","sources":["../../src/supervision/SafeRestartScheduler.ts"],"names":[],"mappings":"AAqCA,MAAM,OAAO,oBAAoB;IAUF,OAAO;IAT5B,KAAK,CAAkB;IACvB,OAAO,CAAiB;IACxB,SAAS,GAAG,KAAK,CAAC;IAClB,MAAM,CAAU;IAChB,mBAAmB,GAAgC,EAAE,CAAC;IACtD,SAAS,CAAU;IACnB,aAAa,CAAU;IACvB,UAAU,GAAG,CAAC,CAAC;IAEvB,YAA6B,OAAoC;uBAApC,OAAO;IAAgC,CAAC;IAErE,IAAI,SAAS;QACX,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,QAAQ,CAAC,MAAc,EAAE,kBAA8C;QACrE,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QACpC,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"SafeRestartScheduler.js","sourceRoot":"","sources":["../../src/supervision/SafeRestartScheduler.ts"],"names":[],"mappings":"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"}
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@keyou007/agent-bot",
|
|
3
|
-
"version": "0.1.16-alpha.
|
|
3
|
+
"version": "0.1.16-alpha.2",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@keyou007/agent-bot",
|
|
9
|
-
"version": "0.1.16-alpha.
|
|
9
|
+
"version": "0.1.16-alpha.2",
|
|
10
10
|
"license": "GPL-3.0-only",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@agentclientprotocol/sdk": "1.2.1",
|
|
13
|
+
"@clack/prompts": "1.7.0",
|
|
13
14
|
"@larksuiteoapi/node-sdk": "1.56.1",
|
|
14
15
|
"@resvg/resvg-js": "2.6.2",
|
|
15
16
|
"better-sqlite3": "12.11.1",
|
|
@@ -44,6 +45,34 @@
|
|
|
44
45
|
"zod": "^3.25.0 || ^4.0.0"
|
|
45
46
|
}
|
|
46
47
|
},
|
|
48
|
+
"node_modules/@clack/core": {
|
|
49
|
+
"version": "1.4.3",
|
|
50
|
+
"resolved": "https://registry.npmjs.org/@clack/core/-/core-1.4.3.tgz",
|
|
51
|
+
"integrity": "sha512-/kr3UWNtdJfxZtPgDqUOmG2pvwlmcLGheex5yiZKdwbzZJxhV+HMNR9QNmyY5cGwTNV6LrR7Jtp+KjhUAP1qBQ==",
|
|
52
|
+
"license": "MIT",
|
|
53
|
+
"dependencies": {
|
|
54
|
+
"fast-wrap-ansi": "^0.2.0",
|
|
55
|
+
"sisteransi": "^1.0.5"
|
|
56
|
+
},
|
|
57
|
+
"engines": {
|
|
58
|
+
"node": ">= 20.12.0"
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"node_modules/@clack/prompts": {
|
|
62
|
+
"version": "1.7.0",
|
|
63
|
+
"resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.7.0.tgz",
|
|
64
|
+
"integrity": "sha512-y7/yvZ2TPAnR9+jnc00klvNNLkJiXFFrQA/hlLCcxA9a2A4zQIOimyFQ9XfwYKiGD1fb5GY8vbKIIgO8d5Tb2A==",
|
|
65
|
+
"license": "MIT",
|
|
66
|
+
"dependencies": {
|
|
67
|
+
"@clack/core": "1.4.3",
|
|
68
|
+
"fast-string-width": "^3.0.2",
|
|
69
|
+
"fast-wrap-ansi": "^0.2.0",
|
|
70
|
+
"sisteransi": "^1.0.5"
|
|
71
|
+
},
|
|
72
|
+
"engines": {
|
|
73
|
+
"node": ">= 20.12.0"
|
|
74
|
+
}
|
|
75
|
+
},
|
|
47
76
|
"node_modules/@emnapi/core": {
|
|
48
77
|
"version": "1.11.1",
|
|
49
78
|
"resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz",
|
|
@@ -2527,6 +2556,30 @@
|
|
|
2527
2556
|
"dev": true,
|
|
2528
2557
|
"license": "MIT"
|
|
2529
2558
|
},
|
|
2559
|
+
"node_modules/fast-string-truncated-width": {
|
|
2560
|
+
"version": "3.0.3",
|
|
2561
|
+
"resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz",
|
|
2562
|
+
"integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==",
|
|
2563
|
+
"license": "MIT"
|
|
2564
|
+
},
|
|
2565
|
+
"node_modules/fast-string-width": {
|
|
2566
|
+
"version": "3.0.2",
|
|
2567
|
+
"resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz",
|
|
2568
|
+
"integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==",
|
|
2569
|
+
"license": "MIT",
|
|
2570
|
+
"dependencies": {
|
|
2571
|
+
"fast-string-truncated-width": "^3.0.2"
|
|
2572
|
+
}
|
|
2573
|
+
},
|
|
2574
|
+
"node_modules/fast-wrap-ansi": {
|
|
2575
|
+
"version": "0.2.2",
|
|
2576
|
+
"resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.2.tgz",
|
|
2577
|
+
"integrity": "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==",
|
|
2578
|
+
"license": "MIT",
|
|
2579
|
+
"dependencies": {
|
|
2580
|
+
"fast-string-width": "^3.0.2"
|
|
2581
|
+
}
|
|
2582
|
+
},
|
|
2530
2583
|
"node_modules/fdir": {
|
|
2531
2584
|
"version": "6.5.0",
|
|
2532
2585
|
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
|
|
@@ -3971,6 +4024,12 @@
|
|
|
3971
4024
|
"simple-concat": "^1.0.0"
|
|
3972
4025
|
}
|
|
3973
4026
|
},
|
|
4027
|
+
"node_modules/sisteransi": {
|
|
4028
|
+
"version": "1.0.5",
|
|
4029
|
+
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
|
|
4030
|
+
"integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
|
|
4031
|
+
"license": "MIT"
|
|
4032
|
+
},
|
|
3974
4033
|
"node_modules/sonic-boom": {
|
|
3975
4034
|
"version": "4.2.1",
|
|
3976
4035
|
"resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@keyou007/agent-bot",
|
|
3
|
-
"version": "0.1.16-alpha.
|
|
3
|
+
"version": "0.1.16-alpha.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Use Codex, TraeX, and compatible coding agents from Lark/Feishu.",
|
|
6
6
|
"license": "GPL-3.0-only",
|
|
@@ -53,8 +53,8 @@
|
|
|
53
53
|
"start:once": "node dist/index.js",
|
|
54
54
|
"cli": "node dist/cli.js",
|
|
55
55
|
"test": "npm run test:unit && npm run test:process && npm run test:render",
|
|
56
|
-
"test:unit": "vitest run --exclude tests/shell/ShellCommandJobManager.test.ts --exclude tests/feishu/GroupAvatarGenerator.test.ts",
|
|
57
|
-
"test:process": "vitest run tests/shell/ShellCommandJobManager.test.ts --maxWorkers=1",
|
|
56
|
+
"test:unit": "vitest run --exclude tests/shell/ShellCommandJobManager.test.ts --exclude tests/scripts/prepare-release.test.ts --exclude tests/feishu/GroupAvatarGenerator.test.ts",
|
|
57
|
+
"test:process": "vitest run tests/shell/ShellCommandJobManager.test.ts tests/scripts/prepare-release.test.ts --maxWorkers=1",
|
|
58
58
|
"test:render": "vitest run tests/feishu/GroupAvatarGenerator.test.ts --maxWorkers=1",
|
|
59
59
|
"typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.test.json",
|
|
60
60
|
"verify": "npm run typecheck && npm test",
|
|
@@ -68,6 +68,7 @@
|
|
|
68
68
|
},
|
|
69
69
|
"dependencies": {
|
|
70
70
|
"@agentclientprotocol/sdk": "1.2.1",
|
|
71
|
+
"@clack/prompts": "1.7.0",
|
|
71
72
|
"@larksuiteoapi/node-sdk": "1.56.1",
|
|
72
73
|
"@resvg/resvg-js": "2.6.2",
|
|
73
74
|
"better-sqlite3": "12.11.1",
|
|
@@ -54,6 +54,16 @@ export async function inspectSupportedAgents(
|
|
|
54
54
|
]);
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
+
export function selectAgentMaintenanceActions(
|
|
58
|
+
inspections: SupportedAgentInspection[],
|
|
59
|
+
): SupportedAgentInspection[] {
|
|
60
|
+
const hasInstalledAgent = inspections.some((inspection) => inspection.state !== "missing");
|
|
61
|
+
return inspections.filter((inspection) => (
|
|
62
|
+
inspection.action
|
|
63
|
+
&& (!hasInstalledAgent || inspection.action.kind === "upgrade")
|
|
64
|
+
));
|
|
65
|
+
}
|
|
66
|
+
|
|
57
67
|
export async function inspectSupportedAgent(
|
|
58
68
|
id: SupportedAgentId,
|
|
59
69
|
options: InspectSupportedAgentsOptions = {},
|
|
@@ -242,6 +242,67 @@ export async function ensureFeishuAppConfiguration(
|
|
|
242
242
|
));
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
+
export async function ensureFeishuGroupMessagePermission(
|
|
246
|
+
credentials: FeishuAppCredentials,
|
|
247
|
+
options: EnsureFeishuAppConfigurationOptions = {},
|
|
248
|
+
): Promise<EnsureFeishuAppConfigurationResult> {
|
|
249
|
+
const fetchImpl = options.fetch ?? globalThis.fetch;
|
|
250
|
+
const sleep = options.sleep ?? delay;
|
|
251
|
+
const pollIntervalMs = positiveInteger(options.pollIntervalMs) ?? DEFAULT_POLL_INTERVAL_MS;
|
|
252
|
+
const timeoutMs = positiveInteger(options.optionalTimeoutMs)
|
|
253
|
+
?? DEFAULT_OPTIONAL_COMPLETION_TIMEOUT_MS;
|
|
254
|
+
|
|
255
|
+
let configuration: FeishuAppConfiguration;
|
|
256
|
+
try {
|
|
257
|
+
configuration = await readFeishuAppConfiguration(credentials, fetchImpl, options.signal);
|
|
258
|
+
} catch (error) {
|
|
259
|
+
if (!isPermissionError(error)) throw error;
|
|
260
|
+
configuration = emptyConfiguration();
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
const missing = manualMissingFeishuAppConfiguration(
|
|
264
|
+
missingFeishuAppConfiguration(configuration),
|
|
265
|
+
);
|
|
266
|
+
if (!hasMissingConfiguration(missing)) {
|
|
267
|
+
return {
|
|
268
|
+
status: "ready",
|
|
269
|
+
configuration,
|
|
270
|
+
added: emptyConfiguration(),
|
|
271
|
+
remaining: emptyConfiguration(),
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
await requestMissingFeishuConfiguration(
|
|
276
|
+
credentials.appId,
|
|
277
|
+
missing,
|
|
278
|
+
true,
|
|
279
|
+
options.onVerification,
|
|
280
|
+
);
|
|
281
|
+
|
|
282
|
+
let remaining = missing;
|
|
283
|
+
if (!options.manualPermissionSkipSignal?.aborted) {
|
|
284
|
+
const completed = await waitForManualFeishuConfiguration(
|
|
285
|
+
credentials,
|
|
286
|
+
configuration,
|
|
287
|
+
fetchImpl,
|
|
288
|
+
sleep,
|
|
289
|
+
pollIntervalMs,
|
|
290
|
+
timeoutMs,
|
|
291
|
+
options.signal,
|
|
292
|
+
options.manualPermissionSkipSignal,
|
|
293
|
+
);
|
|
294
|
+
configuration = completed.configuration;
|
|
295
|
+
remaining = manualMissingFeishuAppConfiguration(completed.remaining);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
return {
|
|
299
|
+
status: hasMissingConfiguration(remaining) ? "partial" : "updated",
|
|
300
|
+
configuration,
|
|
301
|
+
added: resolvedMissingConfiguration(missing, remaining),
|
|
302
|
+
remaining,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
|
|
245
306
|
async function requestMissingFeishuConfiguration(
|
|
246
307
|
appId: string,
|
|
247
308
|
missing: MissingFeishuAppConfiguration,
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import type { MissingFeishuAppConfiguration } from "./FeishuAppConfiguration.js";
|
|
2
|
+
import { cliLanguage, cliText, type CliLanguage } from "./i18n.js";
|
|
3
|
+
|
|
4
|
+
interface LocalizedFeatureDescription {
|
|
5
|
+
en: string;
|
|
6
|
+
zh: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface FeishuConfigurationFeature {
|
|
10
|
+
item: string;
|
|
11
|
+
feature: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const FEATURE_DESCRIPTIONS: Readonly<Record<string, LocalizedFeatureDescription>> = {
|
|
15
|
+
"application:application:self_manage": {
|
|
16
|
+
en: "allowing Agent Bot to inspect and complete this Lark app's configuration during initialization",
|
|
17
|
+
zh: "允许 Agent Bot 在初始化时检查并补全当前飞书应用配置",
|
|
18
|
+
},
|
|
19
|
+
"im:chat:create": {
|
|
20
|
+
en: "creating Lark groups with /newgroup and /forkgroup",
|
|
21
|
+
zh: "使用 /newgroup 和 /forkgroup 创建飞书群",
|
|
22
|
+
},
|
|
23
|
+
"im:chat:delete": {
|
|
24
|
+
en: "dissolving task groups with /dismiss",
|
|
25
|
+
zh: "使用 /dismiss 解散任务群",
|
|
26
|
+
},
|
|
27
|
+
"im:chat:read": {
|
|
28
|
+
en: "reading group information and synchronizing task titles after group renames",
|
|
29
|
+
zh: "读取群信息,并在群重命名后同步任务标题",
|
|
30
|
+
},
|
|
31
|
+
"im:message.group_msg": {
|
|
32
|
+
en: "responding to ordinary group messages that do not mention the bot",
|
|
33
|
+
zh: "响应未 @ 机器人的普通群消息",
|
|
34
|
+
},
|
|
35
|
+
"im:message.p2p_msg:readonly": {
|
|
36
|
+
en: "receiving and responding to private messages",
|
|
37
|
+
zh: "接收并响应私聊消息",
|
|
38
|
+
},
|
|
39
|
+
"im:message.reactions:write_only": {
|
|
40
|
+
en: "showing message-processing status with reactions",
|
|
41
|
+
zh: "使用 Reaction 显示消息处理状态",
|
|
42
|
+
},
|
|
43
|
+
"im:message:readonly": {
|
|
44
|
+
en: "reading referenced, forwarded, and image messages",
|
|
45
|
+
zh: "读取引用消息、转发消息和图片消息",
|
|
46
|
+
},
|
|
47
|
+
"im:message:send_as_bot": {
|
|
48
|
+
en: "sending Agent Bot replies, cards, files, and notifications",
|
|
49
|
+
zh: "发送 Agent Bot 回复、卡片、文件和通知",
|
|
50
|
+
},
|
|
51
|
+
"im:message:update": {
|
|
52
|
+
en: "updating sent progress cards",
|
|
53
|
+
zh: "更新已发送的进度卡片",
|
|
54
|
+
},
|
|
55
|
+
"im:resource": {
|
|
56
|
+
en: "uploading and downloading images or files, and setting group avatars",
|
|
57
|
+
zh: "上传和下载图片或文件,以及设置群头像",
|
|
58
|
+
},
|
|
59
|
+
"im.message.receive_v1": {
|
|
60
|
+
en: "receiving private, group, and topic messages",
|
|
61
|
+
zh: "接收私聊、群聊和话题消息",
|
|
62
|
+
},
|
|
63
|
+
"im.chat.updated_v1": {
|
|
64
|
+
en: "detecting group renames and synchronizing task titles",
|
|
65
|
+
zh: "感知群名称变更并同步任务标题",
|
|
66
|
+
},
|
|
67
|
+
"card.action.trigger": {
|
|
68
|
+
en: "using card buttons and interactive actions",
|
|
69
|
+
zh: "使用卡片按钮和交互操作",
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export function feishuConfigurationFeatures(
|
|
74
|
+
missing: MissingFeishuAppConfiguration,
|
|
75
|
+
language: CliLanguage = cliLanguage,
|
|
76
|
+
): FeishuConfigurationFeature[] {
|
|
77
|
+
return [...missing.scopes, ...missing.events, ...missing.callbacks].map((item) => ({
|
|
78
|
+
item,
|
|
79
|
+
feature: localizeFeature(item, language),
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export function formatFeishuConfigurationFeatureIntroduction(
|
|
84
|
+
missing: MissingFeishuAppConfiguration,
|
|
85
|
+
language: CliLanguage = cliLanguage,
|
|
86
|
+
): string {
|
|
87
|
+
const features = feishuConfigurationFeatures(missing, language);
|
|
88
|
+
if (features.length === 0) return "";
|
|
89
|
+
|
|
90
|
+
return [
|
|
91
|
+
cliText("What this configuration enables:", "这些配置对应的功能:", language),
|
|
92
|
+
...features.map(({ item, feature }) => ` ${item}: ${feature}`),
|
|
93
|
+
"",
|
|
94
|
+
].join("\n");
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export function feishuAffectedFeatures(
|
|
98
|
+
missing: MissingFeishuAppConfiguration,
|
|
99
|
+
language: CliLanguage = cliLanguage,
|
|
100
|
+
): string[] {
|
|
101
|
+
return [...new Set(feishuConfigurationFeatures(missing, language).map(({ feature }) => feature))];
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function localizeFeature(item: string, language: CliLanguage): string {
|
|
105
|
+
const description = FEATURE_DESCRIPTIONS[item];
|
|
106
|
+
if (!description) {
|
|
107
|
+
return cliText("supporting Agent Bot's Lark integration", "支持 Agent Bot 的飞书集成", language);
|
|
108
|
+
}
|
|
109
|
+
return cliText(description.en, description.zh, language);
|
|
110
|
+
}
|