botmux 2.102.0 → 2.103.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +141 -6
- package/dist/cli.js.map +1 -1
- package/dist/dashboard/bot-onboarding.d.ts +28 -0
- package/dist/dashboard/bot-onboarding.d.ts.map +1 -1
- package/dist/dashboard/bot-onboarding.js +20 -0
- package/dist/dashboard/bot-onboarding.js.map +1 -1
- package/dist/dashboard/feishu-login.d.ts +64 -0
- package/dist/dashboard/feishu-login.d.ts.map +1 -0
- package/dist/dashboard/feishu-login.js +99 -0
- package/dist/dashboard/feishu-login.js.map +1 -0
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js +108 -0
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/bot-onboarding.d.ts.map +1 -1
- package/dist/dashboard/web/bot-onboarding.js +4 -1
- package/dist/dashboard/web/bot-onboarding.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +22 -2
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard-web/app.js +6 -6
- package/dist/dashboard-web/chunks/bot-defaults-page-ZVBKVYIG.js +380 -0
- package/dist/dashboard-web/chunks/{chunk-DWFMPIAQ.js → chunk-HC7ANVX7.js} +5 -5
- package/dist/dashboard-web/chunks/{chunk-NC77G2OB.js → chunk-NNXPEJ7S.js} +1 -1
- package/dist/dashboard-web/chunks/{connectors-BW6WO7P5.js → connectors-POZADN75.js} +1 -1
- package/dist/dashboard-web/chunks/{groups-page-UTXUVV2M.js → groups-page-UQFQ6DRE.js} +1 -1
- package/dist/dashboard-web/chunks/{insights-page-IW3KNMG4.js → insights-page-ATW2W5KP.js} +1 -1
- package/dist/dashboard-web/chunks/{overview-page-RO6R26AZ.js → overview-page-Z7OV54XU.js} +1 -1
- package/dist/dashboard-web/chunks/{roles-page-5DYKR2I5.js → roles-page-4BJVXK2E.js} +1 -1
- package/dist/dashboard-web/chunks/{schedules-WUZP3UPF.js → schedules-XLETZ2EP.js} +1 -1
- package/dist/dashboard-web/chunks/{sessions-page-GWZ4GKSG.js → sessions-page-RMMQUGXJ.js} +1 -1
- package/dist/dashboard-web/chunks/{settings-page-HJH6HQ7D.js → settings-page-PWKI4TWF.js} +1 -1
- package/dist/dashboard-web/chunks/{skills-page-ATVGKR5I.js → skills-page-SH7KUD45.js} +1 -1
- package/dist/dashboard-web/chunks/{team-federation-page-JVC73TTF.js → team-federation-page-JAJXFLXA.js} +1 -1
- package/dist/dashboard-web/chunks/{workflows-YCZTOJUS.js → workflows-FRJ2DJAO.js} +1 -1
- package/dist/dashboard-web/style.css +57 -0
- package/dist/dashboard.js +78 -2
- package/dist/dashboard.js.map +1 -1
- package/dist/utils/bot-routing.d.ts +26 -3
- package/dist/utils/bot-routing.d.ts.map +1 -1
- package/dist/utils/bot-routing.js +38 -4
- package/dist/utils/bot-routing.js.map +1 -1
- package/package.json +1 -1
- package/dist/dashboard-web/chunks/bot-defaults-page-YAHNXFBC.js +0 -370
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bot-routing.d.ts","sourceRoot":"","sources":["../../src/utils/bot-routing.ts"],"names":[],"mappings":"AAiBA,wBAAgB,oBAAoB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAkBpF;AAED,wBAAgB,kBAAkB,CAAC,CAAC,SAAS;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EACxF,UAAU,EAAE,CAAC,EAAE,EACf,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GACzC,CAAC,GAAG,SAAS,CAMf;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAaF,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,OAAO,GAAE,eAAe,EAAO,EAC/B,SAAS,CAAC,EAAE,MAAM,GACjB,GAAG,CAAC,MAAM,CAAC,CAOb;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,eAAe,EAAE,EAC3B,OAAO,EAAE,eAAe,EAAE,EAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAUT;AAED
|
|
1
|
+
{"version":3,"file":"bot-routing.d.ts","sourceRoot":"","sources":["../../src/utils/bot-routing.ts"],"names":[],"mappings":"AAiBA,wBAAgB,oBAAoB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAkBpF;AAED,wBAAgB,kBAAkB,CAAC,CAAC,SAAS;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EACxF,UAAU,EAAE,CAAC,EAAE,EACf,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GACzC,CAAC,GAAG,SAAS,CAMf;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAaF,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,OAAO,GAAE,eAAe,EAAO,EAC/B,SAAS,CAAC,EAAE,MAAM,GACjB,GAAG,CAAC,MAAM,CAAC,CAOb;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,eAAe,EAAE,EAC3B,OAAO,EAAE,eAAe,EAAE,EAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAUT;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAInD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CACnC,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,EACtD,IAAI,EAAE;IACJ,QAAQ,EAAE,OAAO,CAAC;IAClB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC/B,GACA;IAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,EAAE,EAAE,MAAM,EAAE,CAAA;CAAE,CAsB9C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACd,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC/B,GAAG,MAAM,EAAE,CAaX"}
|
|
@@ -80,23 +80,57 @@ export function hasKnownBotMention(_text, mentions, entries, crossRef, selfAppId
|
|
|
80
80
|
}
|
|
81
81
|
return false;
|
|
82
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Blank out Markdown code spans/blocks so a bot name written *inside code* — an
|
|
85
|
+
* example command in backticks, a fenced snippet, a quoted `@Bot` in an
|
|
86
|
+
* explanation — is NOT mistaken for a real `@Bot` handoff by the prose
|
|
87
|
+
* auto-injection scanner (which would otherwise wake that bot). Only presence
|
|
88
|
+
* detection needs to be code-aware; positions are irrelevant, so each matched
|
|
89
|
+
* region collapses to a single space.
|
|
90
|
+
*
|
|
91
|
+
* Fenced blocks (a run of ≥3 backticks or ≥3 tildes, closed by an equal-length
|
|
92
|
+
* run) are removed first so their fences aren't misread as inline runs; then
|
|
93
|
+
* balanced inline backtick runs (`…`, ``…``) go. `~~strike~~` (double tilde) is
|
|
94
|
+
* NOT a fence and is deliberately left intact — an @Bot inside strikethrough is
|
|
95
|
+
* still a real prose mention. Unbalanced stray backticks are harmless literals.
|
|
96
|
+
*/
|
|
97
|
+
export function stripCodeSpans(text) {
|
|
98
|
+
return text
|
|
99
|
+
.replace(/(`{3,}|~{3,})[\s\S]*?\1/g, ' ')
|
|
100
|
+
.replace(/(`+)[\s\S]*?\1/g, ' ');
|
|
101
|
+
}
|
|
83
102
|
/**
|
|
84
103
|
* Decide who a botmux-generated reply should @ in the footer.
|
|
85
104
|
*
|
|
86
|
-
* The footer is an implicit convenience for human readers
|
|
105
|
+
* The footer's `发送给:@owner` is an implicit convenience for human readers —
|
|
106
|
+
* it is NOT the message's explicit @ targets (those come from --mention /
|
|
107
|
+
* --mention-back / prose @Name and are rendered separately). It must not wake a
|
|
87
108
|
* bot: bot-to-bot routing should be explicit in the message body/--mention.
|
|
88
|
-
*
|
|
89
|
-
*
|
|
109
|
+
*
|
|
110
|
+
* When the reply explicitly targets a known bot (a handoff), this default
|
|
111
|
+
* owner-courtesy ping is redundant noise, so it is suppressed entirely
|
|
112
|
+
* (`sendTo: undefined`). To also loop a human in on a handoff, the caller opts
|
|
113
|
+
* in explicitly via --mention-back / --mention <owner>, which land in
|
|
114
|
+
* `mentions[]` and render regardless of this function — i.e. owner-addressing
|
|
115
|
+
* is opt-IN for handoffs, not opt-out. Without an explicit bot target the
|
|
116
|
+
* default addressing (owner / oncall last-caller) is unchanged.
|
|
90
117
|
*/
|
|
91
118
|
export function buildFooterAddressing(s, opts) {
|
|
92
119
|
const owner = s.ownerOpenId;
|
|
93
120
|
const botIds = opts.knownBotOpenIds ?? new Set();
|
|
94
121
|
const ownerHuman = owner && !botIds.has(owner) ? owner : undefined;
|
|
122
|
+
// Explicit bot handoff → drop the default owner/caller courtesy ping. The
|
|
123
|
+
// message is addressed to another bot; a human who should see it is added
|
|
124
|
+
// explicitly (--mention-back) and rides in mentions[], not here.
|
|
125
|
+
if (opts.hasExplicitBotMention)
|
|
126
|
+
return { sendTo: undefined, cc: [] };
|
|
95
127
|
if (!opts.isOncall)
|
|
96
128
|
return { sendTo: ownerHuman, cc: [] };
|
|
97
129
|
const caller = s.lastCallerOpenId ?? owner;
|
|
98
130
|
const callerIsBot = !!caller && botIds.has(caller);
|
|
99
|
-
|
|
131
|
+
// Oncall + last caller is a bot (but this reply itself has no explicit bot
|
|
132
|
+
// target) → fall back to the human owner rather than pinging the bot caller.
|
|
133
|
+
if (callerIsBot) {
|
|
100
134
|
return { sendTo: ownerHuman, cc: [] };
|
|
101
135
|
}
|
|
102
136
|
return { sendTo: caller, cc: [] };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bot-routing.js","sourceRoot":"","sources":["../../src/utils/bot-routing.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"bot-routing.js","sourceRoot":"","sources":["../../src/utils/bot-routing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;AAElE,MAAM,UAAU,oBAAoB,CAAC,YAAqB;IACxD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC3C,MAAM,IAAI,GAAG,YAAY;WACpB,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACtF,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,GAAG,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,GAAG,CAAC;QACvC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,EAAE,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;gBAAE,SAAS;YACjE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;YAChC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;gBAChC,IAAI,OAAO,CAAC,EAAE,MAAM,KAAK,QAAQ;oBAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACzD,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC;gBAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;IACjB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,UAAe,EACf,IAAY,EACZ,YAAgC,EAChC,gBAA0C;IAE1C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC;IAC9E,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY;QAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;IACnE,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AACrG,CAAC;AAcD,SAAS,aAAa,CAAC,OAA0B,EAAE,SAAkB;IACnE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;YAAE,SAAS;QACzD,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAChD,IAAI,IAAI;gBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,QAAgC,EAChC,UAA6B,EAAE,EAC/B,SAAkB;IAElB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;YAAE,SAAS;QACzD,IAAI,KAAK,CAAC,SAAS;YAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,KAAa,EACb,QAA2B,EAC3B,OAA0B,EAC1B,QAAgC,EAChC,SAAkB;IAElB,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,2BAA2B,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAE1E,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9C,IAAI,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;IACzE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,IAAI;SACR,OAAO,CAAC,0BAA0B,EAAE,GAAG,CAAC;SACxC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,qBAAqB,CACnC,CAAsD,EACtD,IAIC;IAED,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,GAAG,EAAU,CAAC;IACzD,MAAM,UAAU,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAEnE,0EAA0E;IAC1E,0EAA0E;IAC1E,iEAAiE;IACjE,IAAI,IAAI,CAAC,qBAAqB;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAErE,IAAI,CAAC,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAE1D,MAAM,MAAM,GAAG,CAAC,CAAC,gBAAgB,IAAI,KAAK,CAAC;IAC3C,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEnD,2EAA2E;IAC3E,6EAA6E;IAC7E,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACxC,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACpC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAKvC;IACC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IACpD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,CAAC,EAAW,EAAE,EAAE;QAC3B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,UAAU,IAAI,EAAE;QAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IACjD,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE;QAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IACzC,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,370 +0,0 @@
|
|
|
1
|
-
import{b as ye}from"./chunk-NC77G2OB.js";import{a as be}from"./chunk-76J7PNZI.js";import{m as e,n as r,p as kt,r as fe,w as Dt}from"./chunk-DWFMPIAQ.js";import{a as Ve,b as me,c as ge}from"./chunk-JTSE5VP6.js";import{c as Wt}from"./chunk-7SZRL6FY.js";var Ct=Wt(Ve(),1);var S={bots:[]},Y=null,Qt=[{id:"claude-code",label:"Claude"},{id:"codex",label:"Codex"},{id:"traex",label:"traex"}],he=!1,wt="glm-5.1",Kt=[],Z=null;function Ft(d,u){return typeof d?.cliId=="string"&&d.cliId?d.cliId:u}var X=new Map;function ve(d){let u=null;for(let m of be.sessions.values())m.larkAppId!==d||!m.cliId||(!u||Number(m.lastMessageAt??0)>Number(u.lastMessageAt??0))&&(u=m);return u?.cliId??""}async function Se(){if(!he){he=!0;try{let d=await fetch("/api/cli-options"),u=await d.json().catch(()=>({}));d.ok&&Array.isArray(u?.options)&&(Qt=u.options.filter(m=>m&&typeof m.id=="string"&&typeof m.label=="string"),typeof u.ttadkModelDefault=="string"&&u.ttadkModelDefault.trim()&&(wt=u.ttadkModelDefault.trim()),Array.isArray(u.ttadkModelSuggestions)&&(Kt=u.ttadkModelSuggestions.filter(m=>typeof m=="string")))}catch{}}}function Ze(d,u){let m=typeof d?.agentSelectionKey=="string"&&d.agentSelectionKey?d.agentSelectionKey:"";return m||Ft(d,u)||"claude-code"}function Et(d){return Qt.find(u=>u.id===d)}function Xe(d){return d?.gateway==="ttadk"&&d.acceptsModel!==!1?Kt:[]}function Ye(d,u){let m=Ze(d,u),U=Qt.map(I=>`<option value="${r(I.id)}" ${I.id===m?"selected":""}>${r(I.label)}\uFF08${r(I.id)}\uFF09</option>`).join(""),W=typeof d?.model=="string"?d.model:"",tt=Xe(Et(m)),lt=Et(m)?.gateway==="ttadk"&&Et(m)?.acceptsModel===!1;return`<section class="bd-section">
|
|
2
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionAgent")}</h3>
|
|
3
|
-
<div class="bd-row">
|
|
4
|
-
<label>
|
|
5
|
-
<span>${e("botDefaults.agentCli")}</span>
|
|
6
|
-
<select data-input="agentCliId">${U}</select>
|
|
7
|
-
</label>
|
|
8
|
-
</div>
|
|
9
|
-
<div class="bd-row">
|
|
10
|
-
<label>
|
|
11
|
-
<span>${e("botDefaults.agentModel")}</span>
|
|
12
|
-
<input type="text" data-input="agentModel" list="agent-model-suggestions-${r(d.larkAppId)}"
|
|
13
|
-
placeholder="${r(e("botDefaults.agentModelPlaceholder"))}"
|
|
14
|
-
value="${r(W)}" ${lt?"disabled":""}>
|
|
15
|
-
<datalist id="agent-model-suggestions-${r(d.larkAppId)}">
|
|
16
|
-
${tt.map(I=>`<option value="${r(I)}"></option>`).join("")}
|
|
17
|
-
</datalist>
|
|
18
|
-
</label>
|
|
19
|
-
<small class="bd-help">${e("botDefaults.agentHelp")}</small>
|
|
20
|
-
<div class="actions">
|
|
21
|
-
<button type="button" class="primary" data-action="save-agent">${e("botDefaults.agentSave")}</button>
|
|
22
|
-
<span class="oncall-status" data-agent-status></span>
|
|
23
|
-
</div>
|
|
24
|
-
</div>
|
|
25
|
-
</section>`}async function $e(){try{let d=await fetch("/api/bots"),u=await d.json().catch(()=>({}));if(!d.ok){Y=u?.error?`HTTP ${d.status}: ${u.error}${u.path?` (${u.path})`:""}`:`HTTP ${d.status}`,S={bots:[]};return}if(!u||!Array.isArray(u.bots)){Y="unexpected response shape (no `bots` array)",S={bots:[]};return}Y=null,S=u}catch(d){Y=d?.message??String(d),S={bots:[]}}}function Le(d){if(!d)return"\u2014";let u=new Date(d);return Number.isNaN(u.getTime())?"\u2014":u.toLocaleString()}function Me(d){let u=d.querySelector("#bd-list"),m=d.querySelector("#bd-roster"),U=d.querySelector("#bd-filters"),W=d.querySelector("#bd-refresh"),tt=!1,lt=!1;W.onclick=async()=>{W.disabled=!0;try{X.clear(),await Promise.all([$e(),Se()]),F()}finally{tt||(W.disabled=!1)}};let I=t=>{let a=t.target.closest(".toggle-tx small, small.bd-help");a&&(t.preventDefault(),a.classList.toggle("open"))};u.addEventListener("click",I),u.innerHTML=Dt(),(async()=>(await Promise.all([$e(),Se()]),lt=!0,F(),await fe(),F()))();function ke(){let a=(new FormData(U).get("q")??"").toLowerCase(),c=S.bots.filter(f=>!a||(f.botName??"").toLowerCase().includes(a)||(f.larkAppId??"").toLowerCase().includes(a));if(Y){m.innerHTML="",u.innerHTML=`<p class="hint-warn">\u65E0\u6CD5\u52A0\u8F7D bot \u5217\u8868\uFF1A${r(Y)}<br>\u5E38\u89C1\u539F\u56E0\uFF1Adashboard / daemon \u8FDB\u7A0B\u8FD8\u5728\u8DD1\u65E7\u4EE3\u7801\uFF0C\u6267\u884C <code>botmux restart</code> \u540E\u5237\u65B0\u3002</p>`;return}if(c.length===0){m.innerHTML="",u.innerHTML=`<p class="empty">${e("botDefaults.empty")}</p>`;return}(!Z||!c.some(f=>f.larkAppId===Z))&&(Z=c[0].larkAppId),m.innerHTML=c.map(De).join(""),m.querySelectorAll(".bd-roster-item").forEach(f=>{f.onclick=()=>{Z=f.dataset.appid,F()}});let p=c.find(f=>f.larkAppId===Z);u.innerHTML=we(p),Ue()}function De(t){let a=t.botName??t.larkAppId,c=Ft(t,ve(t.larkAppId)),p=t.defaultOncall?.enabled?'<span class="bd-roster-flag">oncall</span>':"";return`<div class="bd-roster-item${t.larkAppId===Z?" on":""}" data-appid="${r(t.larkAppId)}" role="button" tabindex="0">
|
|
26
|
-
${kt({name:a,larkAppId:t.larkAppId,size:"sm"})}
|
|
27
|
-
<div class="bd-roster-tx">
|
|
28
|
-
<b>${r(a)}</b>
|
|
29
|
-
<span>${r(c||t.larkAppId.slice(0,14))}</span>
|
|
30
|
-
</div>
|
|
31
|
-
${p}
|
|
32
|
-
</div>`}function we(t){if(t.error)return`<article class="bd-card bd-profile" data-appid="${r(t.larkAppId)}">
|
|
33
|
-
<header class="bd-profile-head">
|
|
34
|
-
${kt({name:t.botName??t.larkAppId,larkAppId:t.larkAppId})}
|
|
35
|
-
<div class="bd-profile-id"><strong>${r(t.botName??t.larkAppId)}</strong>
|
|
36
|
-
<code>${r(t.larkAppId)}</code></div>
|
|
37
|
-
</header>
|
|
38
|
-
<p class="hint-warn-inline">\u67E5\u8BE2\u5931\u8D25\uFF1A${r(t.error)}</p>
|
|
39
|
-
</article>`;let a=t.defaultOncall??{enabled:!1,workingDir:"",since:0},c=a.enabled?"oncall":t.defaultWorkingDir?"default":"off",p=t.defaultWorkingDir||a.workingDir||"",f=t.botName??t.larkAppId,y=Ft(t,ve(t.larkAppId));return`<article class="bd-card bd-profile" data-appid="${r(t.larkAppId)}">
|
|
40
|
-
<header class="bd-profile-head">
|
|
41
|
-
${kt({name:f,larkAppId:t.larkAppId,dot:"ok"})}
|
|
42
|
-
<div class="bd-profile-id">
|
|
43
|
-
<span class="bd-name-row" data-name-row>
|
|
44
|
-
<strong data-bot-name>${r(f)}</strong>
|
|
45
|
-
<button type="button" class="bd-name-edit" data-action="edit-bot-name"
|
|
46
|
-
title="${r(e("botDefaults.renameTitle"))}" aria-label="${r(e("botDefaults.renameTitle"))}">
|
|
47
|
-
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M17 3a2.85 2.85 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z"/></svg>
|
|
48
|
-
</button>
|
|
49
|
-
</span>
|
|
50
|
-
<span class="bd-name-editor" data-name-editor hidden>
|
|
51
|
-
<input type="text" class="bd-name-input" data-input="botRename" maxlength="64" value="${r(f)}">
|
|
52
|
-
<button type="button" class="primary" data-action="save-bot-name">${e("botDefaults.renameSave")}</button>
|
|
53
|
-
<button type="button" data-action="cancel-bot-name">${e("botDefaults.renameCancel")}</button>
|
|
54
|
-
</span>
|
|
55
|
-
${y?`<span class="mate-role">${r(y)}</span>`:""}
|
|
56
|
-
<code>${r(t.larkAppId)}</code>
|
|
57
|
-
<small class="bd-name-status oncall-status" data-name-status></small>
|
|
58
|
-
</div>
|
|
59
|
-
<div class="bd-profile-meta bd-meta">
|
|
60
|
-
<small class="bd-meta-ok">\u25CF ${e("botDefaults.metaOnline")}</small>
|
|
61
|
-
<small data-oncall-since>${e("botDefaults.lastEnabled")}: ${r(Le(a.since??0))}</small>
|
|
62
|
-
<small>${e("botDefaults.autobound",{count:t.autoboundChatCount??0})}</small>
|
|
63
|
-
</div>
|
|
64
|
-
</header>
|
|
65
|
-
<div class="bd-body bd-grid">
|
|
66
|
-
<section class="bd-tile">
|
|
67
|
-
${Ye(t,y)}
|
|
68
|
-
<section class="bd-section">
|
|
69
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionWorkingDir")}</h3>
|
|
70
|
-
<div class="bd-row">
|
|
71
|
-
<label>
|
|
72
|
-
<span>${e("botDefaults.workingDirMode")}</span>
|
|
73
|
-
<select data-input="workingDirMode">
|
|
74
|
-
<option value="off" ${c==="off"?"selected":""}>${r(e("botDefaults.workingDirModeOff"))}</option>
|
|
75
|
-
<option value="default" ${c==="default"?"selected":""}>${r(e("botDefaults.workingDirModeDefault"))}</option>
|
|
76
|
-
<option value="oncall" ${c==="oncall"?"selected":""}>${r(e("botDefaults.workingDirModeOncall"))}</option>
|
|
77
|
-
</select>
|
|
78
|
-
</label>
|
|
79
|
-
<small class="bd-help">${e("botDefaults.workingDirModeHelp")}</small>
|
|
80
|
-
</div>
|
|
81
|
-
<div class="bd-row" data-wd-dir-row ${c==="off"?"hidden":""}>
|
|
82
|
-
<label>
|
|
83
|
-
<span>${e("botDefaults.workingDirField")}</span>
|
|
84
|
-
<input type="text" data-input="workingDir" placeholder="e.g. /root/iserver/botmux"
|
|
85
|
-
value="${r(p)}">
|
|
86
|
-
</label>
|
|
87
|
-
</div>
|
|
88
|
-
<div class="actions">
|
|
89
|
-
<button type="button" class="primary" data-action="save-working-dir">${e("botDefaults.save")}</button>
|
|
90
|
-
<span class="oncall-status" data-status></span>
|
|
91
|
-
</div>
|
|
92
|
-
${Oe(t)}
|
|
93
|
-
</section>
|
|
94
|
-
${Be(t)}
|
|
95
|
-
</section>
|
|
96
|
-
<section class="bd-tile">${Ee(t)}</section>
|
|
97
|
-
<section class="bd-tile">${qe(t)}${Te(t)}${Ie(t)}${Re(t)}${Pe(t)}${Ne(t)}</section>
|
|
98
|
-
<section class="bd-tile">${xe(t)}${He(t)}${Ce(t)}</section>
|
|
99
|
-
<section class="bd-tile">${Ae(t)}</section>
|
|
100
|
-
</div>
|
|
101
|
-
</article>`}function Ee(t){let a=typeof t.teamRole=="string";return`<section class="bd-section">
|
|
102
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionRole")}</h3>
|
|
103
|
-
<p class="bd-section-note">${e("botDefaults.roleHelp")}</p>
|
|
104
|
-
<textarea data-input="teamRole" rows="6"
|
|
105
|
-
placeholder="${r(e("botDefaults.rolePlaceholder"))}"
|
|
106
|
-
style="width:100%;box-sizing:border-box;font:13px/1.5 ui-monospace,Menlo,monospace;padding:10px"${a?"":" disabled"}>${a?r(t.teamRole):""}</textarea>
|
|
107
|
-
<div class="actions">
|
|
108
|
-
<button type="button" class="primary" data-action="save-role"${a?"":" disabled"}>${e("botDefaults.roleSave")}</button>
|
|
109
|
-
<button type="button" data-action="delete-role"${a?"":" disabled"}>${e("botDefaults.roleDelete")}</button>
|
|
110
|
-
<span class="oncall-status" data-role-status></span>
|
|
111
|
-
</div>
|
|
112
|
-
<div class="bd-profile-roles" data-profile-roles>
|
|
113
|
-
<h4 class="bd-subsection-title">${e("botDefaults.profileRoles")}</h4>
|
|
114
|
-
<p class="bd-section-note">${e("botDefaults.profileRolesHelp")}</p>
|
|
115
|
-
<div class="bd-profile-role-list" data-profile-role-list>${zt(t.larkAppId)}</div>
|
|
116
|
-
</div>
|
|
117
|
-
</section>`}function zt(t){let a=X.get(t);return!a||a.loading?Dt():a.error?`<p class="hint-warn-inline">${r(e("botDefaults.profileRolesLoadFailed",{error:a.error}))}</p>`:a.items.length===0?`<p class="empty">${e("botDefaults.profileRolesEmpty")}</p>`:a.items.map(c=>`
|
|
118
|
-
<details class="bd-profile-role-entry" data-profile-id="${r(c.profileId)}">
|
|
119
|
-
<summary><code>${r(c.profileId)}</code></summary>
|
|
120
|
-
<div class="bd-profile-role-content" data-profile-role-body="${r(c.profileId)}">
|
|
121
|
-
${_t(c)}
|
|
122
|
-
</div>
|
|
123
|
-
</details>
|
|
124
|
-
`).join("")}function _t(t){return t.loading?Dt():t.error?`<p class="hint-warn-inline">${r(e("botDefaults.profileRoleDetailLoadFailed",{error:t.error}))}</p>`:t.loaded?`<pre>${r(t.content??"")}</pre>`:`<p class="empty">${e("botDefaults.profileRoleClickToLoad")}</p>`}function Vt(t){return t==null?e("botDefaults.brandStateDefault"):t.trim()===""?e("botDefaults.brandStateOff"):e("botDefaults.brandStateCustom")}function Ce(t){let a=t.brandLabel??null;return`<section class="bd-section">
|
|
125
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionBrand")}</h3>
|
|
126
|
-
<div class="bd-row bd-brand">
|
|
127
|
-
<label>
|
|
128
|
-
<span>${e("botDefaults.brandLabel")}</span>
|
|
129
|
-
<input type="text" data-input="brandLabel"
|
|
130
|
-
placeholder="${r(e("botDefaults.brandLabelPlaceholder"))}"
|
|
131
|
-
value="${r(a??"")}">
|
|
132
|
-
</label>
|
|
133
|
-
<small data-brand-state>${r(Vt(a))}</small>
|
|
134
|
-
<small class="bd-help">${e("botDefaults.brandLabelHelp")}</small>
|
|
135
|
-
<div class="actions">
|
|
136
|
-
<button type="button" class="primary" data-action="save-brand">${e("botDefaults.brandSave")}</button>
|
|
137
|
-
<button type="button" data-action="reset-brand">${e("botDefaults.brandReset")}</button>
|
|
138
|
-
<span class="oncall-status" data-brand-status></span>
|
|
139
|
-
</div>
|
|
140
|
-
</div>
|
|
141
|
-
</section>`}function xe(t){let a=t.disableStreamingCard===!0,c=t.silentTurnReactions===!0,p=t.writableTerminalLinkInCard===!0,f=t.privateCard===!0;return`<section class="bd-section">
|
|
142
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionCard")}</h3>
|
|
143
|
-
<label class="toggle-row">
|
|
144
|
-
<input type="checkbox" data-action="toggle-disable-streaming" ${a?"checked":""}>
|
|
145
|
-
<span class="switch" aria-hidden="true"></span>
|
|
146
|
-
<span class="toggle-tx"><strong>${e("botDefaults.disableStreaming")}</strong>
|
|
147
|
-
<small>${e("botDefaults.disableStreamingHelp")}</small></span>
|
|
148
|
-
</label>
|
|
149
|
-
<label class="toggle-row">
|
|
150
|
-
<input type="checkbox" data-action="toggle-silent-reactions" ${c?"checked":""} ${a?"":"disabled"}>
|
|
151
|
-
<span class="switch" aria-hidden="true"></span>
|
|
152
|
-
<span class="toggle-tx"><strong>${e("botDefaults.silentTurnReactions")}</strong>
|
|
153
|
-
<small>${e("botDefaults.silentTurnReactionsHelp")}</small></span>
|
|
154
|
-
</label>
|
|
155
|
-
<label class="toggle-row">
|
|
156
|
-
<input type="checkbox" data-action="toggle-writable-link" ${p?"checked":""} ${a?"disabled":""}>
|
|
157
|
-
<span class="switch" aria-hidden="true"></span>
|
|
158
|
-
<span class="toggle-tx"><strong>${e("botDefaults.writableLink")}</strong>
|
|
159
|
-
<small>${e("botDefaults.writableLinkHelp")}</small></span>
|
|
160
|
-
</label>
|
|
161
|
-
<label class="toggle-row">
|
|
162
|
-
<input type="checkbox" data-action="toggle-private-card" ${f?"checked":""}>
|
|
163
|
-
<span class="switch" aria-hidden="true"></span>
|
|
164
|
-
<span class="toggle-tx"><strong>${e("botDefaults.privateCard")}</strong>
|
|
165
|
-
<small>${e("botDefaults.privateCardHelp")}</small></span>
|
|
166
|
-
</label>
|
|
167
|
-
<div class="actions">
|
|
168
|
-
<small data-card-pref-moot class="hint-warn-inline" ${a?"":"hidden"}>${e("botDefaults.writableLinkMoot")}</small>
|
|
169
|
-
<span class="oncall-status" data-card-pref-status></span>
|
|
170
|
-
</div>
|
|
171
|
-
</section>`}function Te(t){let a=t.botToBotSameDir!==!1;return`<section class="bd-section">
|
|
172
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionCrossBot")}</h3>
|
|
173
|
-
<label class="toggle-row">
|
|
174
|
-
<input type="checkbox" data-action="toggle-cross-bot-samedir" ${a?"checked":""}>
|
|
175
|
-
<span class="switch" aria-hidden="true"></span>
|
|
176
|
-
<span class="toggle-tx"><strong>${e("botDefaults.botToBotSameDir")}</strong>
|
|
177
|
-
<small>${e("botDefaults.botToBotSameDirHelp")}</small></span>
|
|
178
|
-
</label>
|
|
179
|
-
<div class="actions"><span class="oncall-status" data-crossbot-status></span></div>
|
|
180
|
-
</section>`}function He(t){let a=t.summaryRange??{limit:50,sinceHours:24},c=Number.isInteger(a.limit)&&a.limit>=0?a.limit:50,p=Number.isInteger(a.sinceHours)&&a.sinceHours>=0?a.sinceHours:24;return`<section class="bd-section">
|
|
181
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionSummaryTrigger")}</h3>
|
|
182
|
-
<div class="bd-row bd-summary-limits">
|
|
183
|
-
<label>
|
|
184
|
-
<span>${e("botDefaults.summaryLimit")}</span>
|
|
185
|
-
<input type="number" min="0" step="1" data-input="summaryLimit" value="${c}">
|
|
186
|
-
</label>
|
|
187
|
-
<label>
|
|
188
|
-
<span>${e("botDefaults.summarySinceHours")}</span>
|
|
189
|
-
<input type="number" min="0" step="1" data-input="summarySinceHours" value="${p}">
|
|
190
|
-
</label>
|
|
191
|
-
</div>
|
|
192
|
-
<small class="bd-help">${e("botDefaults.summaryLimitHelp")}</small>
|
|
193
|
-
<div class="actions">
|
|
194
|
-
<button type="button" class="primary" data-action="save-summary-trigger">${e("botDefaults.summarySave")}</button>
|
|
195
|
-
<span class="oncall-status" data-summary-trigger-status></span>
|
|
196
|
-
</div>
|
|
197
|
-
</section>`}function qe(t){let a=t.p2pMode==="chat"?"chat":"thread",c=t.regularGroupReplyMode==="new-topic"||t.regularGroupReplyMode==="shared"||t.regularGroupReplyMode==="chat-topic"?t.regularGroupReplyMode:"chat",p=t.regularGroupMentionMode==="topic"||t.regularGroupMentionMode==="never"||t.regularGroupMentionMode==="ambient"?t.regularGroupMentionMode:"always",f=t.docSubscribeDefaultMode==="all"?"all":"mention-only",y=(g,H)=>`<option value="${g}" ${c===g?"selected":""}>${r(H)}</option>`,h=(g,H)=>`<option value="${g}" ${p===g?"selected":""}>${r(H)}</option>`,M=(g,H)=>`<option value="${g}" ${f===g?"selected":""}>${r(H)}</option>`;return`<section class="bd-section">
|
|
198
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionSessionMode")}</h3>
|
|
199
|
-
<div class="bd-row">
|
|
200
|
-
<label>
|
|
201
|
-
<span>${e("botDefaults.p2pMode")}</span>
|
|
202
|
-
<select data-input="p2pMode">
|
|
203
|
-
<option value="thread" ${a==="chat"?"":"selected"}>${r(e("botDefaults.p2pThread"))}</option>
|
|
204
|
-
<option value="chat" ${a==="chat"?"selected":""}>${r(e("botDefaults.p2pChat"))}</option>
|
|
205
|
-
</select>
|
|
206
|
-
</label>
|
|
207
|
-
<small class="bd-help">${e("botDefaults.p2pHelp")}</small>
|
|
208
|
-
<div class="actions">
|
|
209
|
-
<span class="oncall-status" data-p2p-status></span>
|
|
210
|
-
</div>
|
|
211
|
-
</div>
|
|
212
|
-
<div class="bd-row">
|
|
213
|
-
<label>
|
|
214
|
-
<span>${e("botDefaults.regularGroupMode")}</span>
|
|
215
|
-
<select data-input="regularGroupMode">
|
|
216
|
-
${y("chat",e("botDefaults.regularGroupModeChat"))}
|
|
217
|
-
${y("chat-topic",e("botDefaults.regularGroupModeChatTopic"))}
|
|
218
|
-
${y("new-topic",e("botDefaults.regularGroupModeNewTopic"))}
|
|
219
|
-
${y("shared",e("botDefaults.regularGroupModeShared"))}
|
|
220
|
-
</select>
|
|
221
|
-
</label>
|
|
222
|
-
<small class="bd-help">${e("botDefaults.regularGroupModeHelp")}</small>
|
|
223
|
-
<div class="actions">
|
|
224
|
-
<span class="oncall-status" data-regular-group-status></span>
|
|
225
|
-
</div>
|
|
226
|
-
</div>
|
|
227
|
-
<div class="bd-row">
|
|
228
|
-
<label>
|
|
229
|
-
<span>${e("botDefaults.mentionMode")}</span>
|
|
230
|
-
<select data-input="regularGroupMentionMode">
|
|
231
|
-
${h("always",e("botDefaults.mentionModeAlways"))}
|
|
232
|
-
${h("topic",e("botDefaults.mentionModeTopic"))}
|
|
233
|
-
${h("never",e("botDefaults.mentionModeNever"))}
|
|
234
|
-
${h("ambient",e("botDefaults.mentionModeAmbient"))}
|
|
235
|
-
</select>
|
|
236
|
-
</label>
|
|
237
|
-
<small class="bd-help">${e("botDefaults.mentionModeHelp")}</small>
|
|
238
|
-
<div class="actions">
|
|
239
|
-
<span class="oncall-status" data-mention-mode-status></span>
|
|
240
|
-
</div>
|
|
241
|
-
</div>
|
|
242
|
-
<div class="bd-row">
|
|
243
|
-
<label>
|
|
244
|
-
<span>${e("botDefaults.docSubscribeMode")}</span>
|
|
245
|
-
<select data-input="docSubscribeDefaultMode">
|
|
246
|
-
${M("mention-only",e("botDefaults.docSubscribeModeMention"))}
|
|
247
|
-
${M("all",e("botDefaults.docSubscribeModeAll"))}
|
|
248
|
-
</select>
|
|
249
|
-
</label>
|
|
250
|
-
<small class="bd-help">${e("botDefaults.docSubscribeModeHelp")}</small>
|
|
251
|
-
<div class="actions">
|
|
252
|
-
<span class="oncall-status" data-doc-subscribe-mode-status></span>
|
|
253
|
-
</div>
|
|
254
|
-
</div>
|
|
255
|
-
</section>`}function Zt(t){return t==null?e("botDefaults.maxLiveWorkersStateDefault"):e("botDefaults.maxLiveWorkersStateOn",{count:t})}function Ie(t){let a=typeof t.maxLiveWorkers=="number"?t.maxLiveWorkers:null;return`<div class="bd-subsection">
|
|
256
|
-
<h4 class="bd-subsection-title">${e("botDefaults.sectionSessionCap")}</h4>
|
|
257
|
-
<div class="bd-row bd-quota">
|
|
258
|
-
<label>
|
|
259
|
-
<span>${e("botDefaults.maxLiveWorkers")}</span>
|
|
260
|
-
<input type="number" min="1" step="1" data-input="maxLiveWorkers"
|
|
261
|
-
placeholder="${r(e("botDefaults.maxLiveWorkersPlaceholder"))}"
|
|
262
|
-
value="${a??""}">
|
|
263
|
-
</label>
|
|
264
|
-
<small data-session-cap-state>${r(Zt(a))}</small>
|
|
265
|
-
<small class="bd-help">${e("botDefaults.maxLiveWorkersHelp")}</small>
|
|
266
|
-
<div class="actions">
|
|
267
|
-
<button type="button" class="primary" data-action="save-session-cap">${e("botDefaults.maxLiveWorkersSave")}</button>
|
|
268
|
-
<button type="button" data-action="off-session-cap">${e("botDefaults.maxLiveWorkersOff")}</button>
|
|
269
|
-
<span class="oncall-status" data-session-cap-status></span>
|
|
270
|
-
</div>
|
|
271
|
-
</div>
|
|
272
|
-
</div>`}function Re(t){let a=typeof t.startupCommands=="string"?t.startupCommands:"";return`<div class="bd-subsection">
|
|
273
|
-
<h4 class="bd-subsection-title">${e("botDefaults.sectionStartupCommands")}</h4>
|
|
274
|
-
<p class="bd-section-note">${e("botDefaults.startupCommandsHelp")}</p>
|
|
275
|
-
<textarea data-input="startupCommands" rows="3"
|
|
276
|
-
placeholder="${r(e("botDefaults.startupCommandsPlaceholder"))}"
|
|
277
|
-
style="width:100%;box-sizing:border-box;font:13px/1.5 ui-monospace,Menlo,monospace;padding:10px">${r(a)}</textarea>
|
|
278
|
-
<div class="actions">
|
|
279
|
-
<button type="button" class="primary" data-action="save-startup-commands">${e("botDefaults.startupCommandsSave")}</button>
|
|
280
|
-
<span class="oncall-status" data-startup-commands-status></span>
|
|
281
|
-
</div>
|
|
282
|
-
</div>`}function Pe(t){let a=typeof t.launchShell=="string"?t.launchShell:"";return`<div class="bd-subsection">
|
|
283
|
-
<h4 class="bd-subsection-title">${e("botDefaults.sectionLaunchShell")}</h4>
|
|
284
|
-
<p class="bd-section-note">${e("botDefaults.launchShellHelp")}</p>
|
|
285
|
-
<input type="text" data-input="launchShell"
|
|
286
|
-
placeholder="${r(e("botDefaults.launchShellPlaceholder"))}"
|
|
287
|
-
value="${r(a)}"
|
|
288
|
-
style="width:100%;box-sizing:border-box;font:13px/1.5 ui-monospace,Menlo,monospace;padding:10px">
|
|
289
|
-
<div class="actions">
|
|
290
|
-
<button type="button" class="primary" data-action="save-launch-shell">${e("botDefaults.launchShellSave")}</button>
|
|
291
|
-
<span class="oncall-status" data-launch-shell-status></span>
|
|
292
|
-
</div>
|
|
293
|
-
</div>`}function Ne(t){let a=typeof t.env=="string"?t.env:"";return`<div class="bd-subsection">
|
|
294
|
-
<h4 class="bd-subsection-title">${e("botDefaults.sectionEnv")}</h4>
|
|
295
|
-
<p class="bd-section-note">${e("botDefaults.envHelp")}</p>
|
|
296
|
-
<textarea data-input="env" rows="5"
|
|
297
|
-
placeholder="${r(e("botDefaults.envPlaceholder"))}"
|
|
298
|
-
style="width:100%;box-sizing:border-box;font:13px/1.5 ui-monospace,Menlo,monospace;padding:10px">${r(a)}</textarea>
|
|
299
|
-
<div class="actions">
|
|
300
|
-
<button type="button" class="primary" data-action="save-env">${e("botDefaults.envSave")}</button>
|
|
301
|
-
<span class="oncall-status" data-env-status></span>
|
|
302
|
-
</div>
|
|
303
|
-
</div>`}function Be(t){let a=t.sandbox===!0;return`<section class="bd-section">
|
|
304
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionSandbox")}</h3>
|
|
305
|
-
<label class="toggle-row">
|
|
306
|
-
<input type="checkbox" data-action="toggle-sandbox" ${a?"checked":""}>
|
|
307
|
-
<span class="switch" aria-hidden="true"></span>
|
|
308
|
-
<span class="toggle-tx"><strong>${e("botDefaults.sandboxToggle")}</strong>
|
|
309
|
-
<small>${e("botDefaults.sandboxHelp")}</small></span>
|
|
310
|
-
</label>
|
|
311
|
-
<div class="actions">
|
|
312
|
-
<span class="oncall-status" data-sandbox-status></span>
|
|
313
|
-
</div>
|
|
314
|
-
</section>`}function Xt(t){return t==null?e("botDefaults.quotaStateOff"):e("botDefaults.quotaStateOn",{count:t})}function Ae(t){let a=t.restrictGrantCommands===!0,c=t.autoGrantRequestCards!==!1,p=typeof t.messageQuotaDefaultLimit=="number"?t.messageQuotaDefaultLimit:null;return`<section class="bd-section">
|
|
315
|
-
<h3 class="bd-section-title">${e("botDefaults.sectionGrant")}</h3>
|
|
316
|
-
<label class="toggle-row">
|
|
317
|
-
<input type="checkbox" data-action="toggle-auto-grant-card" ${c?"checked":""}>
|
|
318
|
-
<span class="switch" aria-hidden="true"></span>
|
|
319
|
-
<span class="toggle-tx"><strong>${e("botDefaults.autoGrantCard")}</strong>
|
|
320
|
-
<small>${e("botDefaults.autoGrantCardHelp")}</small></span>
|
|
321
|
-
</label>
|
|
322
|
-
<label class="toggle-row">
|
|
323
|
-
<input type="checkbox" data-action="toggle-restrict-grant" ${a?"checked":""}>
|
|
324
|
-
<span class="switch" aria-hidden="true"></span>
|
|
325
|
-
<span class="toggle-tx"><strong>${e("botDefaults.restrictGrant")}</strong>
|
|
326
|
-
<small>${e("botDefaults.restrictGrantHelp")}</small></span>
|
|
327
|
-
</label>
|
|
328
|
-
<div class="bd-row bd-quota">
|
|
329
|
-
<label>
|
|
330
|
-
<span>${e("botDefaults.quotaDefault")}</span>
|
|
331
|
-
<input type="number" min="1" step="1" data-input="quotaLimit"
|
|
332
|
-
placeholder="${r(e("botDefaults.quotaPlaceholder"))}"
|
|
333
|
-
value="${p??""}">
|
|
334
|
-
</label>
|
|
335
|
-
<small data-quota-state>${r(Xt(p))}</small>
|
|
336
|
-
<small class="bd-help">${e("botDefaults.quotaHelp")}</small>
|
|
337
|
-
<div class="actions">
|
|
338
|
-
<button type="button" class="primary" data-action="save-quota">${e("botDefaults.quotaSave")}</button>
|
|
339
|
-
<button type="button" data-action="off-quota">${e("botDefaults.quotaOff")}</button>
|
|
340
|
-
<span class="oncall-status" data-grant-status></span>
|
|
341
|
-
</div>
|
|
342
|
-
</div>
|
|
343
|
-
</section>`}function Oe(t){let a=t.autoStartOnGroupJoin===!0,c=t.autoStartOnNewTopic===!0,p=typeof t.autoStartOnGroupJoinPrompt=="string"?t.autoStartOnGroupJoinPrompt:"";return`<div class="bd-subsection">
|
|
344
|
-
<h4 class="bd-subsection-title">${e("botDefaults.sectionAutoStart")}</h4>
|
|
345
|
-
<label class="toggle-row">
|
|
346
|
-
<input type="checkbox" data-action="toggle-auto-join" ${a?"checked":""}>
|
|
347
|
-
<span class="switch" aria-hidden="true"></span>
|
|
348
|
-
<span class="toggle-tx"><strong>${e("botDefaults.autoStartJoin")}</strong>
|
|
349
|
-
<small>${e("botDefaults.autoStartJoinHelp")}</small></span>
|
|
350
|
-
</label>
|
|
351
|
-
<div class="bd-row">
|
|
352
|
-
<label>
|
|
353
|
-
<span>${e("botDefaults.autoStartJoinPrompt")}</span>
|
|
354
|
-
<textarea data-input="autoJoinPrompt" rows="3"
|
|
355
|
-
placeholder="${r(e("botDefaults.autoStartJoinPromptPlaceholder"))}">${r(p)}</textarea>
|
|
356
|
-
</label>
|
|
357
|
-
<div class="actions">
|
|
358
|
-
<button type="button" class="primary" data-action="save-auto-join-prompt">${e("botDefaults.autoStartJoinPromptSave")}</button>
|
|
359
|
-
</div>
|
|
360
|
-
</div>
|
|
361
|
-
<label class="toggle-row">
|
|
362
|
-
<input type="checkbox" data-action="toggle-auto-topic" ${c?"checked":""}>
|
|
363
|
-
<span class="switch" aria-hidden="true"></span>
|
|
364
|
-
<span class="toggle-tx"><strong>${e("botDefaults.autoStartTopic")}</strong>
|
|
365
|
-
<small>${e("botDefaults.autoStartTopicHelp")}</small></span>
|
|
366
|
-
</label>
|
|
367
|
-
<div class="actions">
|
|
368
|
-
<span class="oncall-status" data-auto-start-status></span>
|
|
369
|
-
</div>
|
|
370
|
-
</div>`}function Yt(t){return u.querySelector(`.bd-card[data-appid="${CSS.escape(t)}"]`)}function xt(t,a){let c=t?.querySelector("[data-profile-role-list]");c&&(c.innerHTML=zt(a),je(t,a))}async function Ge(t,a){let c=X.get(t);if(c?.loaded||c?.loading){xt(a,t);return}c={loaded:!1,loading:!0,items:[]},X.set(t,c),xt(a,t);try{let p=await fetch("/api/role-profiles"),f=await p.json().catch(()=>({}));if(!p.ok)throw new Error(f?.error??String(p.status));let y=Array.isArray(f.profiles)?f.profiles:[];c.items=y.filter(h=>(h.botEntries??[]).some(M=>M?.larkAppId===t&&M?.hasEntry)).map(h=>({profileId:String(h.profileId)})),c.loaded=!0}catch(p){c.error=p?.message??String(p),c.loaded=!0}finally{c.loading=!1,xt(Yt(t),t)}}function je(t,a){t.querySelectorAll("details.bd-profile-role-entry[data-profile-id]").forEach(c=>{c.addEventListener("toggle",()=>{if(!c.open)return;let p=c.dataset.profileId;p&&Je(a,p)})})}async function Je(t,a){let p=X.get(t)?.items.find(f=>f.profileId===a);if(!(!p||p.loaded||p.loading)){p.loading=!0,te(t,a);try{let f=await fetch(`/api/role-profiles/${encodeURIComponent(a)}/${encodeURIComponent(t)}`),y=await f.json().catch(()=>({}));if(!f.ok)throw new Error(y?.error??String(f.status));p.content=y?.hasEntry?String(y.content??""):"",p.loaded=!0}catch(f){p.error=f?.message??String(f)}finally{p.loading=!1,te(t,a)}}}function te(t,a){let p=X.get(t)?.items.find(y=>y.profileId===a);if(!p)return;let f=Yt(t)?.querySelector(`[data-profile-role-body="${CSS.escape(a)}"]`);f&&(f.innerHTML=_t(p))}function Ue(){u.querySelectorAll(".bd-card").forEach(t=>{let a=t.dataset.appid;Ge(a,t);let c=t.querySelector("select[data-input=workingDirMode]"),p=t.querySelector("input[data-input=workingDir]"),f=t.querySelector("[data-wd-dir-row]"),y=t.querySelector("button[data-action=save-working-dir]"),h=t.querySelector("[data-status]");if(!c||!p||!y||!h)return;let M=t.querySelector("select[data-input=agentCliId]"),g=t.querySelector("input[data-input=agentModel]"),H=t.querySelector("button[data-action=save-agent]"),R=t.querySelector("[data-agent-status]");function ee(){if(!M||!g)return;let n=t.querySelector(`#agent-model-suggestions-${CSS.escape(a)}`),o=Et(M.value),s=o?.gateway==="ttadk",i=s&&o.acceptsModel!==!1;if(s&&!i){n&&(n.innerHTML=""),g.value="",g.disabled=!0,g.placeholder=e("botOnboarding.modelTtadkCocoPlaceholder");return}g.disabled=!1,i?(n&&(n.innerHTML=Kt.map(l=>`<option value="${r(l)}"></option>`).join("")),g.placeholder=e("botOnboarding.modelTtadkPlaceholder").replace("{model}",wt),g.value.trim()||(g.value=wt)):(n&&(n.innerHTML=""),g.placeholder=e("botDefaults.agentModelPlaceholder"),g.value.trim()===wt&&(g.value=""))}M&&g&&H&&R&&(M.addEventListener("change",ee),H.addEventListener("click",async()=>{R.textContent="",R.className="oncall-status",H.disabled=!0,M.disabled=!0,g.disabled=!0;try{let n=await fetch(`/api/bots/${encodeURIComponent(a)}/agent`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({cliId:M.value,model:g.value})}),o=await n.json().catch(()=>({}));if(n.ok&&o.ok){R.textContent=`\u2713 ${e("botDefaults.agentSaved")}`,R.classList.add("hint-ok");let s=S.bots.find(i=>i.larkAppId===a);s&&(s.cliId=o.cliId,s.wrapperCli=o.wrapperCli??null,s.model=o.model??"",s.agentSelectionKey=o.selectionKey??M.value)}else R.textContent=`\u2717 ${o.error??n.status}`,R.classList.add("hint-warn-inline")}catch(n){R.textContent=`\u2717 ${n?.message??n}`,R.classList.add("hint-warn-inline")}finally{H.disabled=!1,M.disabled=!1,g.disabled=!1,ee()}})),c.addEventListener("change",()=>{let n=c.value==="off";f&&(f.hidden=n),n||p.focus()}),y.addEventListener("click",async()=>{h.textContent="",h.className="oncall-status";let n=c.value,o=p.value.trim();if(n!=="off"&&!o){h.textContent=e("botDefaults.required"),h.classList.add("hint-warn-inline");return}y.disabled=!0;try{let s=await fetch(`/api/bots/${encodeURIComponent(a)}/working-dir-mode`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({mode:n,workingDir:o})}),i=await s.json().catch(()=>({}));if(s.ok&&i.ok){let l=i.resolvedPath?` \u2192 ${i.resolvedPath}`:"";h.textContent=`\u2713 ${e("botDefaults.workingDirSaved")}${l}`,h.classList.add("hint-ok");let b=S.bots.find(T=>T.larkAppId===a);b&&(i.defaultOncall&&(b.defaultOncall=i.defaultOncall),b.defaultWorkingDir=i.defaultWorkingDir??null);let v=t.querySelector("[data-oncall-since]");v&&i.defaultOncall?.since!=null&&(v.textContent=`${e("botDefaults.lastEnabled")}: ${Le(i.defaultOncall.since)}`)}else h.textContent=`\u2717 ${i.error??s.status}`,h.classList.add("hint-warn-inline")}catch(s){h.textContent=`\u2717 ${s?.message??s}`,h.classList.add("hint-warn-inline")}finally{y.disabled=!1}});let it=t.querySelector("input[data-input=brandLabel]"),Tt=t.querySelector("button[data-action=save-brand]"),Ht=t.querySelector("button[data-action=reset-brand]"),P=t.querySelector("[data-brand-status]"),ae=t.querySelector("[data-brand-state]");async function ne(n,o){if(P){P.textContent="",P.className="oncall-status",o.disabled=!0;try{let s=await fetch(`/api/bots/${encodeURIComponent(a)}/brand-label`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({brandLabel:n})}),i=await s.json().catch(()=>({}));if(s.ok&&i.ok){let l=i.brandLabel??null;P.textContent="\u2713",P.classList.add("hint-ok"),it&&(it.value=l??""),ae&&(ae.textContent=Vt(l));let b=S.bots.find(v=>v.larkAppId===a);b&&(b.brandLabel=l)}else P.textContent=`\u2717 ${i.error??s.status}`,P.classList.add("hint-warn-inline")}catch(s){P.textContent=`\u2717 ${s?.message??s}`,P.classList.add("hint-warn-inline")}finally{o.disabled=!1}}}it&&Tt&&Tt.addEventListener("click",()=>ne(it.value,Tt)),Ht&&Ht.addEventListener("click",()=>ne(null,Ht));let se=t.querySelector("[data-name-row]"),oe=t.querySelector("[data-name-editor]"),qt=t.querySelector("[data-bot-name]"),q=t.querySelector("input[data-input=botRename]"),le=t.querySelector("button[data-action=edit-bot-name]"),Q=t.querySelector("button[data-action=save-bot-name]"),K=t.querySelector("button[data-action=cancel-bot-name]"),$=t.querySelector("[data-name-status]");function rt(n){!se||!oe||(se.hidden=n,oe.hidden=!n,n&&q&&(q.value=qt?.textContent??"",q.focus(),q.select()))}function We(n,o){let i=["no_session","session_expired","no_access","unsupported_brand"].includes(n)?e(`botDefaults.renameWarn.${n}`):o||n;return e("botDefaults.renameLocalOnly",{reason:i})}async function ie(){if(!q||!$)return;let n=q.value.trim();if(!n){$.textContent=`\u2717 ${e("botDefaults.renameEmpty")}`,$.className="bd-name-status oncall-status hint-warn-inline";return}q.disabled=!0,Q&&(Q.disabled=!0),K&&(K.disabled=!0),$.className="bd-name-status oncall-status",$.textContent=`\u23F3 ${e("botDefaults.renaming")}`;try{let o=await fetch(`/api/bots/${encodeURIComponent(a)}/rename`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({name:n})}),s=await o.json().catch(()=>({}));if(o.ok&&s.ok){let i=typeof s.botName=="string"&&s.botName?s.botName:n,l=S.bots.find(v=>v.larkAppId===a);l&&(l.botName=i,s.mode==="feishu"?(l.larkBotName=n,l.displayName=null):l.displayName=n),qt&&(qt.textContent=i);let b=m.querySelector(`.bd-roster-item[data-appid="${CSS.escape(a)}"] .bd-roster-tx b`);b&&(b.textContent=i),rt(!1),s.mode==="feishu"?($.textContent=`\u2713 ${e("botDefaults.renameOkFeishu")}`,$.classList.add("hint-ok")):($.textContent=`\u26A0 ${We(String(s.warning??""),s.message)}`,$.classList.add("hint-warn-inline"),typeof s.message=="string"&&s.message&&($.title=s.message))}else $.textContent=`\u2717 ${e("botDefaults.renameFailed",{error:String(s.error??o.status)})}`,$.classList.add("hint-warn-inline")}catch(o){$.textContent=`\u2717 ${e("botDefaults.renameFailed",{error:o?.message??String(o)})}`,$.classList.add("hint-warn-inline")}finally{q.disabled=!1,Q&&(Q.disabled=!1),K&&(K.disabled=!1)}}le&&le.addEventListener("click",()=>{$&&($.textContent="",$.className="bd-name-status oncall-status"),rt(!0)}),K&&K.addEventListener("click",()=>rt(!1)),Q&&Q.addEventListener("click",()=>{ie()}),q&&q.addEventListener("keydown",n=>{n.key==="Enter"?(n.preventDefault(),ie()):n.key==="Escape"&&rt(!1)});let z=t.querySelector("input[data-action=toggle-disable-streaming]"),G=t.querySelector("input[data-action=toggle-silent-reactions]"),j=t.querySelector("input[data-action=toggle-writable-link]"),ct=t.querySelector("input[data-action=toggle-private-card]"),Fe=t.querySelector("[data-card-pref-status]"),re=t.querySelector("[data-card-pref-moot]");async function C(n,o,s=Fe){if(s){s.textContent="",s.className="oncall-status",o.disabled=!0;try{let i=await fetch(`/api/bots/${encodeURIComponent(a)}/card-prefs`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify(n)}),l=await i.json().catch(()=>({}));if(i.ok&&l.ok){s.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,s.classList.add("hint-ok");let b=S.bots.find(v=>v.larkAppId===a);b&&(b.disableStreamingCard=l.disableStreamingCard,b.silentTurnReactions=l.silentTurnReactions,b.writableTerminalLinkInCard=l.writableTerminalLinkInCard,b.privateCard=l.privateCard,b.botToBotSameDir=l.botToBotSameDir,b.autoStartOnGroupJoin=l.autoStartOnGroupJoin,b.autoStartOnGroupJoinPrompt=l.autoStartOnGroupJoinPrompt,b.autoStartOnNewTopic=l.autoStartOnNewTopic,b.regularGroupReplyMode=l.regularGroupReplyMode,b.regularGroupMentionMode=l.regularGroupMentionMode,b.docSubscribeDefaultMode=l.docSubscribeDefaultMode)}else s.textContent=`\u2717 ${l.error??i.status}`,s.classList.add("hint-warn-inline")}catch(i){s.textContent=`\u2717 ${i?.message??i}`,s.classList.add("hint-warn-inline")}finally{o===j?o.disabled=!!z?.checked:o===G?o.disabled=!z?.checked:o.disabled=!1}}}z&&z.addEventListener("change",()=>{let n=z.checked;j&&(j.disabled=n),G&&(G.disabled=!n),re&&(re.hidden=!n),C({disableStreamingCard:n},z)}),G&&G.addEventListener("change",()=>{C({silentTurnReactions:G.checked},G)}),j&&j.addEventListener("change",()=>{C({writableTerminalLinkInCard:j.checked},j)}),ct&&ct.addEventListener("change",()=>{C({privateCard:ct.checked},ct)});let dt=t.querySelector("input[data-action=toggle-cross-bot-samedir]"),Qe=t.querySelector("[data-crossbot-status]");dt&&dt.addEventListener("change",()=>{C({botToBotSameDir:dt.checked},dt,Qe)});let It=t.querySelector("input[data-input=summaryLimit]"),Rt=t.querySelector("input[data-input=summarySinceHours]"),ut=t.querySelector("button[data-action=save-summary-trigger]"),x=t.querySelector("[data-summary-trigger-status]");function ce(n,o){let s=n.value.trim();return s===""?o:/^(0|[1-9]\d*)$/.test(s)?Number(s):null}It&&Rt&&ut&&ut.addEventListener("click",async()=>{if(!x)return;x.textContent="",x.className="oncall-status";let n=ce(It,50),o=ce(Rt,24);if(n==null||o==null){x.textContent=`\u2717 ${e("botDefaults.summaryNumberInvalid")}`,x.classList.add("hint-warn-inline");return}ut.disabled=!0;try{let s=await fetch(`/api/bots/${encodeURIComponent(a)}/summary-range`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({limit:n,sinceHours:o})}),i=await s.json().catch(()=>({}));if(s.ok&&i.ok){x.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,x.classList.add("hint-ok");let l=i.summaryRange??{limit:n,sinceHours:o};It.value=String(Number.isInteger(l.limit)&&l.limit>=0?l.limit:n),Rt.value=String(Number.isInteger(l.sinceHours)&&l.sinceHours>=0?l.sinceHours:o);let b=S.bots.find(v=>v.larkAppId===a);b&&(b.summaryRange=l)}else x.textContent=`\u2717 ${i.error??s.status}`,x.classList.add("hint-warn-inline")}catch(s){x.textContent=`\u2717 ${s?.message??s}`,x.classList.add("hint-warn-inline")}finally{ut.disabled=!1}});let J=t.querySelector("input[data-action=toggle-sandbox]"),D=t.querySelector("[data-sandbox-status]");J&&J.addEventListener("change",async()=>{let n=J.checked;D&&(D.textContent="",D.className="oncall-status"),J.disabled=!0;try{let o=await fetch(`/api/bots/${encodeURIComponent(a)}/sandbox`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({enabled:n})}),s=await o.json().catch(()=>({}));if(o.ok&&s.ok){D&&(D.textContent=`\u2713 ${e("botDefaults.sandboxSaved")}`,D.classList.add("hint-ok"));let i=S.bots.find(l=>l.larkAppId===a);i&&(i.sandbox=s.sandbox===!0)}else D&&(D.textContent=`\u2717 ${s.error??o.status}`,D.classList.add("hint-warn-inline")),J.checked=!n}catch(o){D&&(D.textContent=`\u2717 ${o?.message??o}`,D.classList.add("hint-warn-inline")),J.checked=!n}finally{J.disabled=!1}});let pt=t.querySelector("input[data-action=toggle-auto-join]"),bt=t.querySelector("input[data-action=toggle-auto-topic]"),de=t.querySelector("textarea[data-input=autoJoinPrompt]"),Pt=t.querySelector("button[data-action=save-auto-join-prompt]"),Nt=t.querySelector("[data-auto-start-status]");pt&&pt.addEventListener("change",()=>{C({autoStartOnGroupJoin:pt.checked},pt,Nt)}),bt&&bt.addEventListener("change",()=>{C({autoStartOnNewTopic:bt.checked},bt,Nt)}),de&&Pt&&Pt.addEventListener("click",()=>{C({autoStartOnGroupJoinPrompt:de.value},Pt,Nt)});let et=t.querySelector("select[data-input=p2pMode]"),N=t.querySelector("[data-p2p-status]");et&&N&&et.addEventListener("change",async()=>{let n=et.value==="chat"?"chat":"thread";N.textContent="",N.className="oncall-status",et.disabled=!0;try{let o=await fetch(`/api/bots/${encodeURIComponent(a)}/p2p-mode`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({p2pMode:n})}),s=await o.json().catch(()=>({}));if(o.ok&&s.ok){N.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,N.classList.add("hint-ok");let i=S.bots.find(l=>l.larkAppId===a);i&&(i.p2pMode=s.p2pMode==="chat"?"chat":"thread")}else N.textContent=`\u2717 ${s.error??o.status}`,N.classList.add("hint-warn-inline")}catch(o){N.textContent=`\u2717 ${o?.message??o}`,N.classList.add("hint-warn-inline")}finally{et.disabled=!1}});let ft=t.querySelector("select[data-input=regularGroupMode]"),Ke=t.querySelector("[data-regular-group-status]");ft&&ft.addEventListener("change",()=>{C({regularGroupReplyMode:ft.value},ft,Ke)});let mt=t.querySelector("select[data-input=regularGroupMentionMode]"),ze=t.querySelector("[data-mention-mode-status]");mt&&mt.addEventListener("change",()=>{C({regularGroupMentionMode:mt.value},mt,ze)});let gt=t.querySelector("select[data-input=docSubscribeDefaultMode]"),_e=t.querySelector("[data-doc-subscribe-mode-status]");gt&>.addEventListener("change",()=>{C({docSubscribeDefaultMode:gt.value},gt,_e)});let Bt=t.querySelector("textarea[data-input=teamRole]"),at=t.querySelector("button[data-action=save-role]"),nt=t.querySelector("button[data-action=delete-role]"),k=t.querySelector("[data-role-status]");if(Bt&&at&&nt&&k){let s=function(l){let b=u.querySelector(`.bd-card[data-appid="${CSS.escape(a)}"]`);if(!b)return;let v=b.querySelector("textarea[data-input=teamRole]"),T=b.querySelector("button[data-action=save-role]"),ot=b.querySelector("button[data-action=delete-role]");v&&(v.value=l,v.disabled=!1),T&&(T.disabled=!1),ot&&(ot.disabled=!1)};var ea=s;let n=`/api/team/local-bots/${encodeURIComponent(a)}/role`,o=S.bots.find(l=>l.larkAppId===a);o&&typeof o.teamRole!="string"&&!o.teamRoleLoading&&(o.teamRoleLoading=!0,(async()=>{try{let l=await fetch(n),b=await l.json().catch(()=>({}));l.ok&&b.ok?(o.teamRole=b.role??"",s(o.teamRole)):(k.textContent=`\u2717 ${e("botDefaults.roleLoadErr")}: ${b.error??l.status}`,k.classList.add("hint-warn-inline"))}catch(l){k.textContent=`\u2717 ${e("botDefaults.roleLoadErr")}: ${l?.message??l}`,k.classList.add("hint-warn-inline")}finally{o.teamRoleLoading=!1}})());async function i(l,b,v){if(k&&!(!o||typeof o.teamRole!="string")){k.textContent="",k.className="oncall-status",at.disabled=!0,nt.disabled=!0;try{let T=await fetch(n,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({role:l})}),ot=await T.json().catch(()=>({}));T.ok&&ot.ok?(o&&(o.teamRole=l.trim()),k.textContent=`\u2713 ${v?e("botDefaults.roleDeleted"):e("botDefaults.roleSaved")}`,k.classList.add("hint-ok")):(k.textContent=`\u2717 ${ot.error??T.status}`,k.classList.add("hint-warn-inline"))}catch(T){k.textContent=`\u2717 ${T?.message??T}`,k.classList.add("hint-warn-inline")}finally{at.disabled=!1,nt.disabled=!1}}}at.addEventListener("click",()=>i(Bt.value,at,!1)),nt.addEventListener("click",()=>{Bt.value="",i("",nt,!0)})}let yt=t.querySelector("input[data-action=toggle-auto-grant-card]"),ht=t.querySelector("input[data-action=toggle-restrict-grant]"),_=t.querySelector("input[data-input=quotaLimit]"),vt=t.querySelector("button[data-action=save-quota]"),At=t.querySelector("button[data-action=off-quota]"),w=t.querySelector("[data-grant-status]"),ue=t.querySelector("[data-quota-state]");async function st(n,o){if(w){w.textContent="",w.className="oncall-status",o.disabled=!0;try{let s=await fetch(`/api/bots/${encodeURIComponent(a)}/grant-prefs`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify(n)}),i=await s.json().catch(()=>({}));if(s.ok&&i.ok){w.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,w.classList.add("hint-ok");let l=typeof i.messageQuotaDefaultLimit=="number"?i.messageQuotaDefaultLimit:null,b=S.bots.find(v=>v.larkAppId===a);b&&(b.autoGrantRequestCards=i.autoGrantRequestCards!==!1,b.restrictGrantCommands=i.restrictGrantCommands===!0,b.messageQuotaDefaultLimit=l),ue&&(ue.textContent=Xt(l)),_&&"messageQuotaDefaultLimit"in n&&(_.value=l==null?"":String(l))}else w.textContent=`\u2717 ${i.error??s.status}`,w.classList.add("hint-warn-inline")}catch(s){w.textContent=`\u2717 ${s?.message??s}`,w.classList.add("hint-warn-inline")}finally{o.disabled=!1}}}yt&&yt.addEventListener("change",()=>{st({autoGrantRequestCards:yt.checked},yt)}),ht&&ht.addEventListener("change",()=>{st({restrictGrantCommands:ht.checked},ht)}),_&&vt&&vt.addEventListener("click",()=>{let n=_.value.trim();if(n===""){st({messageQuotaDefaultLimit:null},vt);return}if(!/^[1-9]\d*$/.test(n)){w&&(w.textContent=`\u2717 ${e("botDefaults.quotaInvalid")}`,w.className="oncall-status hint-warn-inline");return}st({messageQuotaDefaultLimit:Number(n)},vt)}),_&&At&&At.addEventListener("click",()=>{_.value="",st({messageQuotaDefaultLimit:null},At)});let V=t.querySelector("input[data-input=maxLiveWorkers]"),St=t.querySelector("button[data-action=save-session-cap]"),Ot=t.querySelector("button[data-action=off-session-cap]"),E=t.querySelector("[data-session-cap-status]"),pe=t.querySelector("[data-session-cap-state]");async function Gt(n,o){if(E){E.textContent="",E.className="oncall-status",o.disabled=!0;try{let s=await fetch(`/api/bots/${encodeURIComponent(a)}/max-live-workers`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({maxLiveWorkers:n})}),i=await s.json().catch(()=>({}));if(s.ok&&i.ok){E.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,E.classList.add("hint-ok");let l=typeof i.maxLiveWorkers=="number"?i.maxLiveWorkers:null,b=S.bots.find(v=>v.larkAppId===a);b&&(b.maxLiveWorkers=l),pe&&(pe.textContent=Zt(l)),V&&(V.value=l==null?"":String(l))}else E.textContent=`\u2717 ${i.error??s.status}`,E.classList.add("hint-warn-inline")}catch(s){E.textContent=`\u2717 ${s?.message??s}`,E.classList.add("hint-warn-inline")}finally{o.disabled=!1}}}V&&St&&St.addEventListener("click",()=>{let n=V.value.trim();if(n===""){Gt(null,St);return}if(!/^[1-9]\d*$/.test(n)){E&&(E.textContent=`\u2717 ${e("botDefaults.maxLiveWorkersInvalid")}`,E.className="oncall-status hint-warn-inline");return}Gt(Number(n),St)}),V&&Ot&&Ot.addEventListener("click",()=>{V.value="",Gt(null,Ot)});let jt=t.querySelector("textarea[data-input=startupCommands]"),$t=t.querySelector("button[data-action=save-startup-commands]"),B=t.querySelector("[data-startup-commands-status]");jt&&$t&&$t.addEventListener("click",async()=>{if(B){B.textContent="",B.className="oncall-status",$t.disabled=!0;try{let n=await fetch(`/api/bots/${encodeURIComponent(a)}/startup-commands`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({startupCommands:jt.value})}),o=await n.json().catch(()=>({}));if(n.ok&&o.ok){B.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,B.classList.add("hint-ok");let s=typeof o.startupCommands=="string"?o.startupCommands:"";jt.value=s;let i=S.bots.find(l=>l.larkAppId===a);i&&(i.startupCommands=s)}else B.textContent=`\u2717 ${o.error??n.status}`,B.classList.add("hint-warn-inline")}catch(n){B.textContent=`\u2717 ${n?.message??n}`,B.classList.add("hint-warn-inline")}finally{$t.disabled=!1}}});let Jt=t.querySelector("input[data-input=launchShell]"),Lt=t.querySelector("button[data-action=save-launch-shell]"),A=t.querySelector("[data-launch-shell-status]");Jt&&Lt&&Lt.addEventListener("click",async()=>{if(A){A.textContent="",A.className="oncall-status",Lt.disabled=!0;try{let n=await fetch(`/api/bots/${encodeURIComponent(a)}/launch-shell`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({launchShell:Jt.value})}),o=await n.json().catch(()=>({}));if(n.ok&&o.ok){A.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,A.classList.add("hint-ok");let s=typeof o.launchShell=="string"?o.launchShell:"";Jt.value=s;let i=S.bots.find(l=>l.larkAppId===a);i&&(i.launchShell=s)}else A.textContent=`\u2717 ${o.error??n.status}`,A.classList.add("hint-warn-inline")}catch(n){A.textContent=`\u2717 ${n?.message??n}`,A.classList.add("hint-warn-inline")}finally{Lt.disabled=!1}}});let Ut=t.querySelector("textarea[data-input=env]"),Mt=t.querySelector("button[data-action=save-env]"),O=t.querySelector("[data-env-status]");Ut&&Mt&&Mt.addEventListener("click",async()=>{if(O){O.textContent="",O.className="oncall-status",Mt.disabled=!0;try{let n=await fetch(`/api/bots/${encodeURIComponent(a)}/env`,{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({env:Ut.value})}),o=await n.json().catch(()=>({}));if(n.ok&&o.ok){O.textContent=`\u2713 ${e("botDefaults.cardPrefSaved")}`,O.classList.add("hint-ok");let s=typeof o.env=="string"?o.env:"";Ut.value=s;let i=S.bots.find(l=>l.larkAppId===a);i&&(i.env=s)}else O.textContent=`\u2717 ${o.error??n.status}`,O.classList.add("hint-warn-inline")}catch(n){O.textContent=`\u2717 ${n?.message??n}`,O.classList.add("hint-warn-inline")}finally{Mt.disabled=!1}}})})}function F(){!tt&<&&ke()}return U.addEventListener("input",F),()=>{tt=!0,W.onclick=null,U.removeEventListener("input",F),u.removeEventListener("click",I),m.replaceChildren(),u.replaceChildren()}}var L=Wt(ge(),1);function ta(){let d=ye(),u=(0,Ct.useRef)(null);return(0,Ct.useEffect)(()=>{if(u.current)return Me(u.current)},[]),(0,L.jsxs)("section",{className:"page",ref:u,children:[(0,L.jsx)("div",{className:"page-heading",children:(0,L.jsxs)("div",{children:[(0,L.jsx)("p",{className:"eyebrow",children:d("nav.botDefaults")}),(0,L.jsx)("h1",{children:d("botDefaults.title")}),(0,L.jsx)("p",{children:d("botDefaults.subtitle")})]})}),(0,L.jsxs)("form",{id:"bd-filters",className:"filters sessions-filters",children:[(0,L.jsx)("input",{type:"search",name:"q",placeholder:d("botDefaults.search")}),(0,L.jsx)("button",{type:"button",id:"bd-refresh",children:d("botDefaults.refresh")})]}),(0,L.jsxs)("div",{className:"bd-layout",children:[(0,L.jsx)("aside",{id:"bd-roster",className:"bd-roster"}),(0,L.jsx)("div",{id:"bd-list",className:"bd-detail"})]})]})}function ra(d){return me(d,(0,L.jsx)(ta,{}))}export{ra as renderBotDefaultsPage};
|