cognova 0.2.7 → 0.2.9
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/.output/nitro.json +1 -1
- package/.output/public/_nuxt/{Bb9LNSu_.js → -JdScH3W.js} +1 -1
- package/.output/public/_nuxt/{A5lrd5_j.js → 0EY9Msdx.js} +1 -1
- package/.output/public/_nuxt/{BsXPllgv.js → 1lOC4Si0.js} +1 -1
- package/.output/public/_nuxt/{CeDxLTxX.js → 1zIQX9mh.js} +1 -1
- package/.output/public/_nuxt/{D3V98LVR.js → 4Qy4OdWt.js} +1 -1
- package/.output/public/_nuxt/{MdebRWqA.js → 4nN41Tyd.js} +1 -1
- package/.output/public/_nuxt/{BrICHPil.js → 5MZBbx-H.js} +1 -1
- package/.output/public/_nuxt/{Brqrl-cH.js → 6lIxuL6n.js} +1 -1
- package/.output/public/_nuxt/AUdD1uDD.js +1 -0
- package/.output/public/_nuxt/{B9Kd_0HK.js → B-513wJW.js} +1 -1
- package/.output/public/_nuxt/{CNwGp6eP.js → B1vDCixB.js} +1 -1
- package/.output/public/_nuxt/{deSeNTOh.js → B2MVZlI-.js} +1 -1
- package/.output/public/_nuxt/{CVr40yKH.js → B5JDxHxC.js} +1 -1
- package/.output/public/_nuxt/{CvMqUdkl.js → B63LIwsW.js} +3 -3
- package/.output/public/_nuxt/{C5nfaH9w.js → B6bnHNWY.js} +1 -1
- package/.output/public/_nuxt/{BaJEGr8G.js → B6wYZD_K.js} +1 -1
- package/.output/public/_nuxt/{_16_b82K.js → B8Ou5yh2.js} +1 -1
- package/.output/public/_nuxt/{BaVaTug8.js → BE4Ndhrq.js} +1 -1
- package/.output/public/_nuxt/{CphXSvBo.js → BES6FzF5.js} +1 -1
- package/.output/public/_nuxt/{BmTCDcNm.js → BE_OHTBv.js} +1 -1
- package/.output/public/_nuxt/{CBrXB4hk.js → BJ8jbKuq.js} +1 -1
- package/.output/public/_nuxt/{vM-wdhkZ.js → BNBGEa-U.js} +1 -1
- package/.output/public/_nuxt/{XzRnkkwG.js → BOGXUgGg.js} +1 -1
- package/.output/public/_nuxt/BQ1T6zWA.js +1 -0
- package/.output/public/_nuxt/{Bb1B0ntt.js → BVc_fOF1.js} +1 -1
- package/.output/public/_nuxt/{B-5roYpk.js → BX6vcvkp.js} +1 -1
- package/.output/public/_nuxt/{CLZS246x.js → BYIq3eP8.js} +1 -1
- package/.output/public/_nuxt/{B_28CKij.js → BZqdzrSw.js} +2 -2
- package/.output/public/_nuxt/{D-wVwRIx.js → BaYtugUf.js} +1 -1
- package/.output/public/_nuxt/{EgYyfo1g.js → Be5L93GM.js} +3 -3
- package/.output/public/_nuxt/{BLszW9T3.js → BfECQayu.js} +1 -1
- package/.output/public/_nuxt/{Ci-MVdCd.js → BgG2k-zy.js} +1 -1
- package/.output/public/_nuxt/BhnONkIm.js +1 -0
- package/.output/public/_nuxt/{BjFs8Ujb.js → BjI5wb_q.js} +1 -1
- package/.output/public/_nuxt/{CK5Ef4YR.js → Bk9-HxOg.js} +1 -1
- package/.output/public/_nuxt/{MzEmU9ER.js → BltasKce.js} +1 -1
- package/.output/public/_nuxt/{BvuV9uCn.js → Bp9kHdw6.js} +1 -1
- package/.output/public/_nuxt/{CnW8zyuA.js → Bsdcw5gr.js} +1 -1
- package/.output/public/_nuxt/{Zjvb5YJR.js → BsnhHCOa.js} +1 -1
- package/.output/public/_nuxt/{DMsHLHmB.js → BwJVN9k0.js} +1 -1
- package/.output/public/_nuxt/{CgQKyBSS.js → BwVt3BzR.js} +1 -1
- package/.output/public/_nuxt/{Bc0NIKN7.js → BwdxQyyo.js} +1 -1
- package/.output/public/_nuxt/{CfWDee_q.js → BzTjmQCD.js} +1 -1
- package/.output/public/_nuxt/{RRoc4m9d.js → C1FhgWcI.js} +1 -1
- package/.output/public/_nuxt/{DvgLoqaC.js → C2DZeD9G.js} +1 -1
- package/.output/public/_nuxt/{B43p0So7.js → C3JOLqW1.js} +1 -1
- package/.output/public/_nuxt/{atVSHCxP.js → C4ScCUjy.js} +1 -1
- package/.output/public/_nuxt/{Bn8loaeQ.js → C6HEirAm.js} +1 -1
- package/.output/public/_nuxt/{BLL1JLwq.js → C6UTTaCP.js} +1 -1
- package/.output/public/_nuxt/{DNpsjOxN.js → C8gtQaKB.js} +1 -1
- package/.output/public/_nuxt/{BhOIdu3Z.js → C8tXHRIo.js} +1 -1
- package/.output/public/_nuxt/{DaiWSWdm.js → C8wa4Wh4.js} +1 -1
- package/.output/public/_nuxt/{DZdh7_lh.js → CDradKPE.js} +1 -1
- package/.output/public/_nuxt/{DB3y_21M.js → CEJh-OAl.js} +1 -1
- package/.output/public/_nuxt/CGfVTQUF.js +1 -0
- package/.output/public/_nuxt/{Dx2Tgm6S.js → CGgZuPnb.js} +1 -1
- package/.output/public/_nuxt/{CwaMSU1O.js → CH8kNq6W.js} +1 -1
- package/.output/public/_nuxt/{NlScC3GW.js → CIJ2MJdc.js} +1 -1
- package/.output/public/_nuxt/{CzTTKfet.js → CIUZAp6g.js} +1 -1
- package/.output/public/_nuxt/{CwCEQ4Dw.js → CXBOHJ2W.js} +1 -1
- package/.output/public/_nuxt/{BJ_GgKV0.js → CY3x8iy3.js} +1 -1
- package/.output/public/_nuxt/{ByfSJZV6.js → CaLO8sre.js} +1 -1
- package/.output/public/_nuxt/{jeu3Xx8e.js → CbTu13wM.js} +1 -1
- package/.output/public/_nuxt/{CjYUi9c8.js → CfO_d5gC.js} +1 -1
- package/.output/public/_nuxt/{DpYns7cT.js → Clr3MHUr.js} +1 -1
- package/.output/public/_nuxt/{1Hz98MKF.js → Cmdr5BNz.js} +1 -1
- package/.output/public/_nuxt/{DZ_azKLI.js → Cmj-BR0q.js} +1 -1
- package/.output/public/_nuxt/{CSQ-nblB.js → Cn83lLUb.js} +1 -1
- package/.output/public/_nuxt/{BdCB2PoJ.js → CqMgz85Z.js} +1 -1
- package/.output/public/_nuxt/{Dkzqkzki.js → CrW6y2-s.js} +1 -1
- package/.output/public/_nuxt/{DAs574wU.js → CrjNndEO.js} +1 -1
- package/.output/public/_nuxt/{CB8_A8N4.js → Cs_udj6A.js} +1 -1
- package/.output/public/_nuxt/{qW7F87d8.js → CsbHYpNi.js} +3 -3
- package/.output/public/_nuxt/{DuOsLoVR.js → CwKe2KkK.js} +1 -1
- package/.output/public/_nuxt/{Db5XIfWS.js → CwOUYOe5.js} +1 -1
- package/.output/public/_nuxt/{0J8pJb0Z.js → CybU4a95.js} +1 -1
- package/.output/public/_nuxt/{WWNeb45u.js → CziltI1u.js} +1 -1
- package/.output/public/_nuxt/{DgPiIWA2.js → CzurfTnt.js} +1 -1
- package/.output/public/_nuxt/{DAFasgHH.js → D-O8wAju.js} +1 -1
- package/.output/public/_nuxt/{CJ85o8FK.js → D1t0272g.js} +1 -1
- package/.output/public/_nuxt/D3RROe4s.js +1 -0
- package/.output/public/_nuxt/{Cedv1M65.js → D5G5UL_g.js} +1 -1
- package/.output/public/_nuxt/{1IuG3yiQ.js → D76Dw8rw.js} +1 -1
- package/.output/public/_nuxt/{w3t8WD8v.js → D7DTZ0iS.js} +1 -1
- package/.output/public/_nuxt/{C6Kc4XvS.js → D7WbsJsa.js} +1 -1
- package/.output/public/_nuxt/D7iYVmH6.js +1 -0
- package/.output/public/_nuxt/{CXuKrnTA.js → D8gh62A0.js} +1 -1
- package/.output/public/_nuxt/{CW8xtqwN.js → DA2RowFe.js} +1 -1
- package/.output/public/_nuxt/{4bC1z31I.js → DBKxzQ3U.js} +1 -1
- package/.output/public/_nuxt/DBuW01Fx.js +1 -0
- package/.output/public/_nuxt/{B7-0ADn3.js → DCL9gWFw.js} +1 -1
- package/.output/public/_nuxt/{NBE83ZQn.js → DGJKfutb.js} +1 -1
- package/.output/public/_nuxt/{B5OWqWCh.js → DHScQdvh.js} +1 -1
- package/.output/public/_nuxt/{BTk5mgdf.js → DI1FIvaM.js} +1 -1
- package/.output/public/_nuxt/{0LyRrTRM.js → DJ4pqxg-.js} +1 -1
- package/.output/public/_nuxt/{DImdNj-F.js → DJoRBCVm.js} +1 -1
- package/.output/public/_nuxt/{DfpSaqgV.js → DLuRYg2p.js} +1 -1
- package/.output/public/_nuxt/DMy2sxuC.js +1 -0
- package/.output/public/_nuxt/{BJi2ZHtT.js → DQd-GXKJ.js} +1 -1
- package/.output/public/_nuxt/{CpC3C9gj.js → DSgubznn.js} +1 -1
- package/.output/public/_nuxt/{BZFXnEwe.js → DSynhNOO.js} +1 -1
- package/.output/public/_nuxt/{BsPj3ifk.js → DTrFhdRO.js} +1 -1
- package/.output/public/_nuxt/{BNlugvM3.js → DTu0K_pX.js} +1 -1
- package/.output/public/_nuxt/{DV0JMebZ.js → DUDbJONU.js} +1 -1
- package/.output/public/_nuxt/{C14DGwaT.js → DYu_NYj3.js} +1 -1
- package/.output/public/_nuxt/{Bf34lExB.js → D_tCgCFX.js} +1 -1
- package/.output/public/_nuxt/{pkbwpgSD.js → DdXVAzIg.js} +1 -1
- package/.output/public/_nuxt/DfIqFkyp.js +1 -0
- package/.output/public/_nuxt/{BoPAYize.js → Dj2opPDu.js} +1 -1
- package/.output/public/_nuxt/{Drr-RSSP.js → DjmFlCHK.js} +1 -1
- package/.output/public/_nuxt/{DgKeJf5C.js → DkhxRAb3.js} +1 -1
- package/.output/public/_nuxt/DlSJ4TF_.js +1 -0
- package/.output/public/_nuxt/{S4a_N6rD.js → DmmQUhEb.js} +1 -1
- package/.output/public/_nuxt/{CG0fS-BQ.js → DvATBMPl.js} +1 -1
- package/.output/public/_nuxt/{CxJr4mB0.js → DwAJIRGg.js} +1 -1
- package/.output/public/_nuxt/{CjRmY2OQ.js → FYOLNuMV.js} +1 -1
- package/.output/public/_nuxt/Gy6_ehml.js +1 -0
- package/.output/public/_nuxt/{zBoPDS4z.js → HPOXd4gt.js} +1 -1
- package/.output/public/_nuxt/{HCCuOAgZ.js → HlbU_z9a.js} +1 -1
- package/.output/public/_nuxt/{DsKy-gee.js → JQV21WEV.js} +1 -1
- package/.output/public/_nuxt/{JJIcQEna.js → NusIKwmA.js} +1 -1
- package/.output/public/_nuxt/{HC3657Xq.js → OrcbFmB1.js} +1 -1
- package/.output/public/_nuxt/{fTEmwfo4.js → Oy4_RPEZ.js} +1 -1
- package/.output/public/_nuxt/{Dpp5cOwJ.js → Pa936BQP.js} +1 -1
- package/.output/public/_nuxt/PzQHm02e.js +1 -0
- package/.output/public/_nuxt/{Dysa6np_.js → REP2-rzf.js} +1 -1
- package/.output/public/_nuxt/{-2wkydbj.js → RRbnMIVe.js} +1 -1
- package/.output/public/_nuxt/{CzqLfT8k.js → TGVM5w2K.js} +1 -1
- package/.output/public/_nuxt/UbZP7wjm.js +1 -0
- package/.output/public/_nuxt/{BW-E-Sar.js → XJYoLoTi.js} +1 -1
- package/.output/public/_nuxt/{CrjKigv8.js → a9_LvIZ4.js} +1 -1
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/613faa5d-8ace-45e0-8274-b611cc4fd1ad.json +1 -0
- package/.output/public/_nuxt/entry.DkvuF_CR.css +1 -0
- package/.output/public/_nuxt/{CwJR22-0.js → fVkHtgGF.js} +1 -1
- package/.output/public/_nuxt/{sdvIKLwS.js → hm3ShyaF.js} +1 -1
- package/.output/public/_nuxt/{CqiOV9n1.js → k16puyWi.js} +1 -1
- package/.output/public/_nuxt/{B8Kve-DH.js → myNwwtfj.js} +1 -1
- package/.output/public/_nuxt/{DxR8g9So.js → nTCVPCKg.js} +1 -1
- package/.output/public/_nuxt/{DytaiikM.js → pHQcHl8n.js} +1 -1
- package/.output/public/_nuxt/{Cebw7Q7c.js → pNqWPbXW.js} +1 -1
- package/.output/public/_nuxt/{Cow1TrPj.js → qWWnsfRV.js} +1 -1
- package/.output/public/_nuxt/{DCco_rlV.js → rRYEvKFu.js} +1 -1
- package/.output/public/_nuxt/{hqpqUuXS.js → svWfwR0T.js} +1 -1
- package/.output/public/_nuxt/{BMLwzSDu.js → wgX1ldgZ.js} +1 -1
- package/.output/public/_nuxt/{CEfkp9Rl.js → xrh9hzzH.js} +2 -2
- package/.output/server/chunks/build/client.precomputed.mjs +1 -1
- package/.output/server/chunks/build/server.mjs +1 -1
- package/.output/server/chunks/build/{settings-DuT6LGJZ.mjs → settings-B2KXoGcz.mjs} +1679 -203
- package/.output/server/chunks/build/settings-B2KXoGcz.mjs.map +1 -0
- package/.output/server/chunks/build/styles.mjs +4 -4
- package/.output/server/chunks/nitro/nitro.mjs +922 -866
- package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
- package/.output/server/package.json +1 -1
- package/app/pages/settings.vue +581 -6
- package/package.json +1 -1
- package/server/api/skills/import.post.ts +1 -1
- package/server/bridge/adapters/telegram.ts +84 -9
- package/.output/public/_nuxt/B-YQztaH.js +0 -1
- package/.output/public/_nuxt/B1gFtqXK.js +0 -1
- package/.output/public/_nuxt/BTfZ7nek.js +0 -1
- package/.output/public/_nuxt/BbPnqQJ0.js +0 -1
- package/.output/public/_nuxt/BhSWIRpp.js +0 -1
- package/.output/public/_nuxt/By6kmkhJ.js +0 -1
- package/.output/public/_nuxt/C4XVJnNJ.js +0 -1
- package/.output/public/_nuxt/CkvyAKbu.js +0 -1
- package/.output/public/_nuxt/D2f7BlK2.js +0 -1
- package/.output/public/_nuxt/D2lmhTjQ.js +0 -1
- package/.output/public/_nuxt/D64-rCSQ.js +0 -1
- package/.output/public/_nuxt/DGP2JJt8.js +0 -1
- package/.output/public/_nuxt/builds/meta/9863fe43-d78c-4b29-a1e8-e6de61119507.json +0 -1
- package/.output/public/_nuxt/entry._7ZkP07A.css +0 -1
- package/.output/public/_nuxt/f7zDjk6q.js +0 -1
- package/.output/server/chunks/build/settings-DuT6LGJZ.mjs.map +0 -1
package/package.json
CHANGED
|
@@ -19,7 +19,7 @@ export default defineEventHandler(async (event) => {
|
|
|
19
19
|
throw createError({ statusCode: 400, message: 'Zip file is empty' })
|
|
20
20
|
|
|
21
21
|
// Determine skill name from root folder or filename
|
|
22
|
-
const firstEntry = entries[0]
|
|
22
|
+
const firstEntry = entries[0]!.entryName
|
|
23
23
|
const rootFolder = firstEntry.includes('/') ? firstEntry.split('/')[0] : null
|
|
24
24
|
const fileName = fileField.filename?.replace(/\.zip$/i, '') || ''
|
|
25
25
|
const skillName = rootFolder || fileName
|
|
@@ -56,10 +56,11 @@ interface TelegramDocument {
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
/**
|
|
59
|
-
* Telegram adapter
|
|
59
|
+
* Telegram adapter supporting both webhook and long-polling modes.
|
|
60
|
+
*
|
|
61
|
+
* - If a public APP_URL is configured, registers a webhook with Telegram.
|
|
62
|
+
* - Otherwise, falls back to long-polling via getUpdates.
|
|
60
63
|
*
|
|
61
|
-
* When started, registers a webhook with Telegram so they push updates to us.
|
|
62
|
-
* When stopped, removes the webhook.
|
|
63
64
|
* Messages are sent via the Bot API sendMessage endpoint.
|
|
64
65
|
*/
|
|
65
66
|
export class TelegramAdapter implements BridgeAdapter {
|
|
@@ -70,6 +71,9 @@ export class TelegramAdapter implements BridgeAdapter {
|
|
|
70
71
|
private botToken: string | null = null
|
|
71
72
|
private webhookSecret: string
|
|
72
73
|
private healthy = false
|
|
74
|
+
private polling = false
|
|
75
|
+
private pollAbort: AbortController | null = null
|
|
76
|
+
private pollOffset = 0
|
|
73
77
|
|
|
74
78
|
constructor(
|
|
75
79
|
bridgeId: string,
|
|
@@ -92,6 +96,11 @@ export class TelegramAdapter implements BridgeAdapter {
|
|
|
92
96
|
throw new Error('TELEGRAM_BOT_TOKEN secret not found. Add it in Settings → Secrets.')
|
|
93
97
|
}
|
|
94
98
|
|
|
99
|
+
// Also check for APP_URL in secrets store (set via Settings → App)
|
|
100
|
+
const appUrlSecret = await getSecretValue('APP_URL')
|
|
101
|
+
if (appUrlSecret && !process.env.APP_URL)
|
|
102
|
+
process.env.APP_URL = appUrlSecret
|
|
103
|
+
|
|
95
104
|
// Validate token by calling getMe
|
|
96
105
|
const me = await this.apiCall('getMe')
|
|
97
106
|
if (!me.ok) {
|
|
@@ -100,12 +109,12 @@ export class TelegramAdapter implements BridgeAdapter {
|
|
|
100
109
|
|
|
101
110
|
// Store bot username if not set
|
|
102
111
|
if (!this.config.botUsername && me.result?.username) {
|
|
103
|
-
this.config.botUsername = me.result.username
|
|
112
|
+
this.config.botUsername = me.result.username as string
|
|
104
113
|
}
|
|
105
114
|
|
|
106
115
|
console.log(`[telegram] Bot @${me.result?.username} authenticated`)
|
|
107
116
|
|
|
108
|
-
// Register webhook
|
|
117
|
+
// Register webhook or start polling
|
|
109
118
|
const webhookUrl = this.getWebhookUrl()
|
|
110
119
|
if (webhookUrl) {
|
|
111
120
|
const setResult = await this.apiCall('setWebhook', {
|
|
@@ -120,13 +129,19 @@ export class TelegramAdapter implements BridgeAdapter {
|
|
|
120
129
|
|
|
121
130
|
console.log(`[telegram] Webhook registered: ${webhookUrl}`)
|
|
122
131
|
} else {
|
|
123
|
-
|
|
132
|
+
// Delete any existing webhook before polling (Telegram requires this)
|
|
133
|
+
await this.apiCall('deleteWebhook')
|
|
134
|
+
console.log('[telegram] No public URL configured — starting long-polling')
|
|
135
|
+
this.startPolling()
|
|
124
136
|
}
|
|
125
137
|
|
|
126
138
|
this.healthy = true
|
|
127
139
|
}
|
|
128
140
|
|
|
129
141
|
async stop(): Promise<void> {
|
|
142
|
+
// Stop polling loop if running
|
|
143
|
+
this.stopPolling()
|
|
144
|
+
|
|
130
145
|
if (this.botToken) {
|
|
131
146
|
try {
|
|
132
147
|
await this.apiCall('deleteWebhook')
|
|
@@ -238,6 +253,54 @@ export class TelegramAdapter implements BridgeAdapter {
|
|
|
238
253
|
return headerValue === this.webhookSecret
|
|
239
254
|
}
|
|
240
255
|
|
|
256
|
+
// ─── Polling ─────────────────────────────────────
|
|
257
|
+
|
|
258
|
+
private startPolling(): void {
|
|
259
|
+
this.polling = true
|
|
260
|
+
this.pollAbort = new AbortController()
|
|
261
|
+
void this.pollLoop()
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
private stopPolling(): void {
|
|
265
|
+
this.polling = false
|
|
266
|
+
if (this.pollAbort) {
|
|
267
|
+
this.pollAbort.abort()
|
|
268
|
+
this.pollAbort = null
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
private async pollLoop(): Promise<void> {
|
|
273
|
+
while (this.polling && this.botToken) {
|
|
274
|
+
try {
|
|
275
|
+
const result = await this.apiCall('getUpdates', {
|
|
276
|
+
offset: this.pollOffset,
|
|
277
|
+
timeout: 30,
|
|
278
|
+
allowed_updates: ['message', 'edited_message']
|
|
279
|
+
}, this.pollAbort?.signal)
|
|
280
|
+
|
|
281
|
+
if (!this.polling) break
|
|
282
|
+
|
|
283
|
+
if (result.ok && Array.isArray(result.result)) {
|
|
284
|
+
for (const update of result.result as TelegramUpdate[]) {
|
|
285
|
+
this.pollOffset = update.update_id + 1
|
|
286
|
+
await this.handleUpdate(update).catch((error: unknown) => {
|
|
287
|
+
console.error('[telegram] Error handling polled update:', error)
|
|
288
|
+
})
|
|
289
|
+
}
|
|
290
|
+
} else if (!result.ok) {
|
|
291
|
+
console.error('[telegram] Polling error:', result.description)
|
|
292
|
+
// Back off on error to avoid hammering the API
|
|
293
|
+
await sleep(5000)
|
|
294
|
+
}
|
|
295
|
+
} catch (error) {
|
|
296
|
+
if (!this.polling) break
|
|
297
|
+
// Network error — back off and retry
|
|
298
|
+
console.error('[telegram] Poll network error:', error instanceof Error ? error.message : error)
|
|
299
|
+
await sleep(5000)
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
|
|
241
304
|
// ─── Private helpers ───────────────────────────
|
|
242
305
|
|
|
243
306
|
private getWebhookUrl(): string | null {
|
|
@@ -253,18 +316,25 @@ export class TelegramAdapter implements BridgeAdapter {
|
|
|
253
316
|
return null
|
|
254
317
|
}
|
|
255
318
|
|
|
256
|
-
private async apiCall(
|
|
319
|
+
private async apiCall(
|
|
320
|
+
method: string,
|
|
321
|
+
body?: Record<string, unknown>,
|
|
322
|
+
signal?: AbortSignal
|
|
323
|
+
): Promise<TelegramApiResponse> {
|
|
257
324
|
const url = `${TELEGRAM_API}/bot${this.botToken}/${method}`
|
|
258
325
|
|
|
259
326
|
try {
|
|
260
327
|
const response = await fetch(url, {
|
|
261
328
|
method: 'POST',
|
|
262
329
|
headers: { 'Content-Type': 'application/json' },
|
|
263
|
-
body: body ? JSON.stringify(body) : undefined
|
|
330
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
331
|
+
signal
|
|
264
332
|
})
|
|
265
333
|
|
|
266
334
|
return await response.json() as TelegramApiResponse
|
|
267
335
|
} catch (error) {
|
|
336
|
+
if (error instanceof DOMException && error.name === 'AbortError')
|
|
337
|
+
return { ok: false, description: 'Request aborted' }
|
|
268
338
|
return {
|
|
269
339
|
ok: false,
|
|
270
340
|
description: error instanceof Error ? error.message : 'Network error'
|
|
@@ -283,7 +353,8 @@ export class TelegramAdapter implements BridgeAdapter {
|
|
|
283
353
|
interface TelegramApiResponse {
|
|
284
354
|
ok: boolean
|
|
285
355
|
description?: string
|
|
286
|
-
|
|
356
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
357
|
+
result?: any
|
|
287
358
|
}
|
|
288
359
|
|
|
289
360
|
function formatTelegramName(from?: TelegramMessage['from']): string {
|
|
@@ -292,3 +363,7 @@ function formatTelegramName(from?: TelegramMessage['from']): string {
|
|
|
292
363
|
if (from.last_name) parts.push(from.last_name)
|
|
293
364
|
return parts.join(' ')
|
|
294
365
|
}
|
|
366
|
+
|
|
367
|
+
function sleep(ms: number): Promise<void> {
|
|
368
|
+
return new Promise(resolve => setTimeout(resolve, ms))
|
|
369
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{N as r,c,G as n,R as p,a4 as u,U as i,al as s}from"./CvMqUdkl.js";const m={base:"list-disc ps-6 my-5 marker:text-(--ui-border-accented)"},_={__name:"ProseUl",props:{class:{type:null,required:!1}},setup(e){const a=e,t=r(),l=c(()=>s({extend:s(m),...t.ui?.prose?.ul||{}}));return(o,d)=>(p(),n("ul",{class:i(l.value({class:a.class}))},[u(o.$slots,"default")],2))}};export{_ as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as e,b as r,a5 as t}from"./CvMqUdkl.js";function a(o){return e(()=>r(o)?!!t(o)?.closest("form"):!0)}export{a as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{N as o,c as r,al as a,Q as c,R as u,S as i,a4 as p,U as m,C as f,a3 as x}from"./CvMqUdkl.js";const d={base:"w-full max-w-(--ui-container) mx-auto px-4 sm:px-6 lg:px-8"},g={__name:"UContainer",props:{as:{type:null,required:!1},class:{type:null,required:!1}},setup(s){const e=s,t=o(),l=r(()=>a({extend:a(d),...t.ui?.container||{}}));return(n,C)=>(u(),c(f(x),{as:s.as,class:m(l.value({class:e.class}))},{default:i(()=>[p(n.$slots,"default")]),_:3},8,["as","class"]))}};export{g as _};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{N as r,c,G as n,R as p,a4 as u,U as m,al as s}from"./CvMqUdkl.js";const i={base:"list-decimal ps-6 my-5 marker:text-muted"},_={__name:"ProseOl",props:{class:{type:null,required:!1}},setup(e){const a=e,t=r(),l=c(()=>s({extend:s(i),...t.ui?.prose?.ol||{}}));return(o,d)=>(p(),n("ol",{class:m(l.value({class:a.class}))},[u(o.$slots,"default")],2))}};export{_ as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{N as n,c as p,G as r,R as c,a4 as u,U as i,al as s}from"./CvMqUdkl.js";const m={base:"my-5 leading-7 text-pretty"},_={__name:"ProseP",props:{class:{type:null,required:!1}},setup(e){const a=e,t=n(),o=p(()=>s({extend:s(m),...t.ui?.prose?.p||{}}));return(l,d)=>(c(),r("p",{class:i(o.value({class:a.class}))},[u(l.$slots,"default")],2))}};export{_ as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{N as c,c as n,G as r,R as p,a4 as u,U as d,al as s}from"./CvMqUdkl.js";const i={base:""},_={__name:"ProseTbody",props:{class:{type:null,required:!1}},setup(e){const a=e,o=c(),t=n(()=>s({extend:s(i),...o.ui?.prose?.tbody||{}}));return(l,m)=>(p(),r("tbody",{class:d(t.value({class:a.class}))},[u(l.$slots,"default")],2))}};export{_ as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{N as r,c as l,G as c,R as p,a4 as u,U as i,al as s}from"./CvMqUdkl.js";const m={base:""},g={__name:"ProseStrong",props:{class:{type:null,required:!1}},setup(e){const a=e,o=r(),t=l(()=>s({extend:s(m),...o.ui?.prose?.strong||{}}));return(n,f)=>(p(),c("strong",{class:i(t.value({class:a.class}))},[u(n.$slots,"default")],2))}};export{g as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{N as c,c as n,G as r,R as p,a4 as u,U as d,al as e}from"./CvMqUdkl.js";const m={base:"bg-muted"},h={__name:"ProseThead",props:{class:{type:null,required:!1}},setup(s){const a=s,t=c(),o=n(()=>e({extend:e(m),...t.ui?.prose?.thead||{}}));return(l,i)=>(p(),r("thead",{class:d(o.value({class:a.class}))},[u(l.$slots,"default")],2))}};export{h as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./CvMqUdkl.js";const s=globalThis.setInterval;export{s};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{X as e}from"./CvMqUdkl.js";function a(r,u="reka"){return r||`${u}-${e?.()}`}export{a as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as ze}from"./CrjKigv8.js";import{_ as Ie,a as Le}from"./1Hz98MKF.js";import{_ as Ke}from"./BaJEGr8G.js";import{_ as qe}from"./S4a_N6rD.js";import{a as Re,ag as Ye,ah as A,e as r,f as Oe,q as Ge,Q as He,S as o,R as f,T as s,ab as l,G as v,C as a,ai as N,aj as T,a9 as ae,W as Qe,_ as We,ae as g,aa as c,U as Je,ak as I}from"./CvMqUdkl.js";import{_ as Xe}from"./DuOsLoVR.js";import{_ as Ze}from"./BMLwzSDu.js";import{_ as et}from"./C6Kc4XvS.js";import{_ as tt}from"./CB8_A8N4.js";import{_ as st}from"./D-wVwRIx.js";import{_ as lt}from"./CnW8zyuA.js";import{_ as at}from"./Bb1B0ntt.js";import{_ as ot}from"./pkbwpgSD.js";import{_ as nt}from"./MdebRWqA.js";import{u as it,d as te}from"./DpYns7cT.js";import{u as dt}from"./BNlugvM3.js";import"./sdvIKLwS.js";import"./HCCuOAgZ.js";import"./Cow1TrPj.js";import"./w3t8WD8v.js";import"./88opOQSr.js";import"./B9Kd_0HK.js";import"./B1gFtqXK.js";import"./CxJr4mB0.js";import"./DAFasgHH.js";import"./WWNeb45u.js";import"./Bn8loaeQ.js";import"./DxR8g9So.js";import"./D2lmhTjQ.js";import"./Zjvb5YJR.js";import"./CJ85o8FK.js";import"./BJ_GgKV0.js";import"./BJi2ZHtT.js";import"./D3V98LVR.js";import"./DImdNj-F.js";import"./CXuKrnTA.js";import"./Dkzqkzki.js";import"./D2f7BlK2.js";const rt={class:"p-6"},ut={class:"space-y-8 max-w-2xl mx-auto py-6"},ct={class:"py-6"},mt={class:"flex items-center justify-between mb-6"},pt={class:"text-sm bg-elevated px-2 py-0.5 rounded"},ft={class:"text-dimmed"},vt={class:"text-dimmed text-sm"},yt={class:"flex gap-2 justify-end"},gt={class:"py-12 text-center"},bt={class:"py-6"},wt={class:"flex items-center justify-between mb-6"},_t={key:0,class:"space-y-3"},xt={key:1,class:"py-12 text-center"},kt={key:2,class:"space-y-3"},ht={class:"flex items-center justify-between"},Pt={class:"flex items-center gap-3"},St={class:"font-medium"},Ct={class:"text-sm text-dimmed ml-2"},Ut={class:"flex items-center gap-3"},Vt={key:0,class:"text-xs text-dimmed mt-1 pl-8"},$t={class:"max-w-2xl mx-auto py-6"},Et={key:0,class:"space-y-3"},Dt={key:1,class:"space-y-2"},At={class:"flex items-center justify-between px-4 py-3"},Nt={class:"flex items-center gap-3"},Tt={class:"font-medium"},Mt={key:0,class:"border-t border-default px-4 py-3 space-y-2 bg-elevated/50"},Bt={class:"text-sm text-dimmed capitalize"},Ft={class:"mt-6"},jt={class:"space-y-8 max-w-xl mx-auto py-6"},zt={class:"space-y-4"},It={class:"text-lg font-semibold"},Lt={class:"flex justify-end gap-2 pt-4"},Kt={class:"mb-4"},qt={class:"bg-elevated px-2 py-0.5 rounded"},Rt={class:"flex justify-end gap-2 pt-6"},Yt={class:"space-y-4"},Ot={class:"flex justify-end gap-2 pt-4"},Gt={class:"mb-4"},Ht={class:"flex justify-end gap-2 pt-6"},Ts=Re({__name:"settings",setup(Qt){const{user:oe,updateProfile:ne,changeEmail:ie,changePassword:de}=dt(),i=Ye(),{updatePreferences:re}=it(),V=A({name:""}),L=r(!1),h=A({newEmail:""}),K=r(!1),m=A({currentPassword:"",newPassword:"",confirmPassword:""}),q=r(!1),se=r([]),R=r(!1),k=r(!1),P=r(!1),$=r(null),Y=r(!1),y=r(null),d=A({key:"",value:"",description:""});Oe(()=>oe.value,n=>{n&&(V.name=n.name||"",h.newEmail=n.email||"")},{immediate:!0});async function O(){R.value=!0;try{const{data:n}=await $fetch("/api/secrets");se.value=n}catch{i.add({title:"Failed to load secrets",color:"error"})}R.value=!1}const ue=[{label:"Account",icon:"i-lucide-user",value:"account",slot:"account"},{label:"Secrets",icon:"i-lucide-key",value:"secrets",slot:"secrets"},{label:"Integrations",icon:"i-lucide-plug",value:"integrations",slot:"integrations"},{label:"App",icon:"i-lucide-settings",value:"app",slot:"app"}],ce=[{accessorKey:"key",header:"Key"},{accessorKey:"description",header:"Description"},{accessorKey:"updatedAt",header:"Last Updated"},{accessorKey:"actions",header:""}];function me(){y.value=null,d.key="",d.value="",d.description="",k.value=!0}function pe(n){y.value=n,d.key=n.key,d.value="",d.description=n.description||"",k.value=!0}function fe(n){$.value=n,P.value=!0}async function ve(){if(!d.key||!y.value&&!d.value){i.add({title:"Missing fields",description:y.value?"Key is required.":"Key and value are required.",color:"error"});return}Y.value=!0;try{y.value?(await $fetch(`/api/secrets/${y.value.key}`,{method:"PUT",body:{value:d.value||void 0,description:d.description||void 0}}),i.add({title:"Secret updated",color:"success"})):(await $fetch("/api/secrets",{method:"POST",body:{key:d.key,value:d.value,description:d.description||void 0}}),i.add({title:"Secret created",color:"success"})),k.value=!1,await O()}catch(n){const e=n;i.add({title:y.value?"Failed to update secret":"Failed to create secret",description:e.data?.message||"An error occurred",color:"error"})}Y.value=!1}async function ye(){if($.value)try{await $fetch(`/api/secrets/${$.value.key}`,{method:"DELETE"}),i.add({title:"Secret deleted",color:"success"}),P.value=!1,$.value=null,await O()}catch{i.add({title:"Failed to delete secret",color:"error"})}}function ge(n){return new Date(n).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}const b=r({...te}),G=r(!1),H=r(!1),E=r(new Set),be=[{key:"task",label:"Tasks",icon:"i-lucide-check-square",subtypes:["create","edit","delete","restore"]},{key:"project",label:"Projects",icon:"i-lucide-folder",subtypes:["create","edit","delete"]},{key:"agent",label:"Agents",icon:"i-lucide-bot",subtypes:["create","edit","delete","run","complete","fail","cancel"]},{key:"document",label:"Documents",icon:"i-lucide-file-text",subtypes:["edit","delete","restore"]},{key:"memory",label:"Memories",icon:"i-lucide-brain",subtypes:["create","delete"]},{key:"reminder",label:"Reminders",icon:"i-lucide-bell",subtypes:["create"]},{key:"secret",label:"Secrets",icon:"i-lucide-key-round",subtypes:["create","edit","delete"]},{key:"hook",label:"Hooks",icon:"i-lucide-webhook",subtypes:["create"]},{key:"conversation",label:"Conversations",icon:"i-lucide-message-square",subtypes:["delete"]},{key:"bridge",label:"Bridges",icon:"i-lucide-plug",subtypes:["create","edit","delete","complete","fail"]}];async function we(){G.value=!0;try{const{data:n}=await $fetch("/api/settings");b.value={...te,...n.notifications}}catch{b.value={...te}}G.value=!1}async function _e(){H.value=!0;try{await $fetch("/api/settings",{method:"PUT",body:{notifications:b.value}}),re(b.value),i.add({title:"Notification preferences saved",color:"success"})}catch{i.add({title:"Failed to save preferences",color:"error"})}H.value=!1}function xe(n){E.value.has(n)?E.value.delete(n):E.value.add(n)}function ke(n,e){b.value[n]={...b.value[n],enabled:e}}function he(n,e,Z){const B=b.value[n];b.value[n]={...B,subtypes:{...B?.subtypes,[e]:Z}}}const Q=r([]),W=r(!1),S=r(!1),J=r(!1),C=r(!1),D=r(null),_=A({platform:"telegram",name:""}),X=[{value:"telegram",label:"Telegram",icon:"i-lucide-send"},{value:"discord",label:"Discord",icon:"i-lucide-message-circle"},{value:"imessage",label:"iMessage",icon:"i-lucide-smartphone"},{value:"google",label:"Google Suite",icon:"i-lucide-mail"},{value:"email",label:"Email (IMAP)",icon:"i-lucide-at-sign"}],Pe={connected:"text-success",disconnected:"text-dimmed",error:"text-error",unconfigured:"text-dimmed"};async function M(){W.value=!0;try{const{data:n}=await $fetch("/api/bridges");Q.value=n}catch{i.add({title:"Failed to load integrations",color:"error"})}W.value=!1}function Se(){_.platform="telegram",_.name="",S.value=!0}async function Ce(){if(!_.name){i.add({title:"Name is required",color:"error"});return}J.value=!0;try{await $fetch("/api/bridges",{method:"POST",body:{platform:_.platform,name:_.name}}),i.add({title:"Integration created",color:"success"}),S.value=!1,await M()}catch(n){const e=n;i.add({title:"Failed to create integration",description:e.data?.message,color:"error"})}J.value=!1}async function Ue(n){try{await $fetch(`/api/bridges/${n.id}`,{method:"PUT",body:{enabled:!n.enabled}}),await M()}catch{i.add({title:"Failed to update integration",color:"error"})}}function Ve(n){D.value=n,C.value=!0}async function $e(){if(D.value)try{await $fetch(`/api/bridges/${D.value.id}`,{method:"DELETE"}),i.add({title:"Integration deleted",color:"success"}),C.value=!1,D.value=null,await M()}catch{i.add({title:"Failed to delete integration",color:"error"})}}Ge(()=>{O(),we(),M()});async function Ee(){L.value=!0;const n=await ne({name:V.name});n.error?i.add({title:"Update failed",description:n.error.message,color:"error"}):i.add({title:"Profile updated",description:"Your name has been updated successfully.",color:"success"}),L.value=!1}async function De(){if(!h.newEmail){i.add({title:"Email required",description:"Please enter a new email address.",color:"error"});return}K.value=!0;const n=await ie(h.newEmail);n.error?i.add({title:"Email change failed",description:n.error.message,color:"error"}):i.add({title:"Email updated",description:"Your email has been changed successfully.",color:"success"}),K.value=!1}async function Ae(){if(m.newPassword!==m.confirmPassword){i.add({title:"Passwords do not match",description:"Please make sure your new passwords match.",color:"error"});return}if(!m.currentPassword||!m.newPassword){i.add({title:"Missing fields",description:"Please fill in all password fields.",color:"error"});return}q.value=!0;const n=await de({currentPassword:m.currentPassword,newPassword:m.newPassword});n.error?i.add({title:"Password change failed",description:n.error.message,color:"error"}):(i.add({title:"Password changed",description:"Your password has been changed successfully.",color:"success"}),m.currentPassword="",m.newPassword="",m.confirmPassword=""),q.value=!1}return(n,e)=>{const Z=ze,B=Le,x=Ke,w=qe,u=Qe,F=Xe,le=Ze,j=We,Ne=et,U=tt,ee=st,Te=lt,Me=at,z=ot,Be=nt,Fe=Ie;return f(),He(Fe,{id:"settings",grow:""},{default:o(()=>[s(B,{title:"Settings"},{right:o(()=>[s(Z)]),_:1}),l("div",rt,[s(Me,null,{fallback:o(()=>[l("div",jt,[s(U,{class:"h-10 w-full"}),l("div",zt,[s(U,{class:"h-5 w-20"}),s(U,{class:"h-10 w-full"}),s(U,{class:"h-10 w-28"})])])]),default:o(()=>[s(Te,{items:ue,"default-value":"account",class:"w-full mx-auto",ui:{list:"max-w-xl"}},{account:o(()=>[l("div",ut,[l("div",null,[e[19]||(e[19]=l("h3",{class:"text-lg font-semibold mb-4"}," Profile ",-1)),s(F,{state:a(V),class:"space-y-4",onSubmit:Ee},{default:o(()=>[s(w,{label:"Name",name:"name"},{default:o(()=>[s(x,{modelValue:a(V).name,"onUpdate:modelValue":e[0]||(e[0]=t=>a(V).name=t),placeholder:"Your name",class:"w-full"},null,8,["modelValue"])]),_:1}),s(u,{type:"submit",loading:a(L)},{default:o(()=>[...e[18]||(e[18]=[c(" Save Name ",-1)])]),_:1},8,["loading"])]),_:1},8,["state"])]),s(le),l("div",null,[e[21]||(e[21]=l("h3",{class:"text-lg font-semibold mb-4"}," Email Address ",-1)),s(F,{state:a(h),class:"space-y-4",onSubmit:De},{default:o(()=>[s(w,{label:"Email",name:"newEmail"},{default:o(()=>[s(x,{modelValue:a(h).newEmail,"onUpdate:modelValue":e[1]||(e[1]=t=>a(h).newEmail=t),type:"email",placeholder:"your@email.com",class:"w-full"},null,8,["modelValue"])]),_:1}),s(u,{type:"submit",loading:a(K)},{default:o(()=>[...e[20]||(e[20]=[c(" Change Email ",-1)])]),_:1},8,["loading"])]),_:1},8,["state"])]),s(le),l("div",null,[e[23]||(e[23]=l("h3",{class:"text-lg font-semibold mb-4"}," Change Password ",-1)),s(F,{state:a(m),class:"space-y-4",onSubmit:Ae},{default:o(()=>[s(w,{label:"Current Password",name:"currentPassword"},{default:o(()=>[s(x,{modelValue:a(m).currentPassword,"onUpdate:modelValue":e[2]||(e[2]=t=>a(m).currentPassword=t),type:"password",class:"w-full"},null,8,["modelValue"])]),_:1}),s(w,{label:"New Password",name:"newPassword"},{default:o(()=>[s(x,{modelValue:a(m).newPassword,"onUpdate:modelValue":e[3]||(e[3]=t=>a(m).newPassword=t),type:"password",class:"w-full"},null,8,["modelValue"])]),_:1}),s(w,{label:"Confirm New Password",name:"confirmPassword"},{default:o(()=>[s(x,{modelValue:a(m).confirmPassword,"onUpdate:modelValue":e[4]||(e[4]=t=>a(m).confirmPassword=t),type:"password",class:"w-full"},null,8,["modelValue"])]),_:1}),s(u,{type:"submit",loading:a(q)},{default:o(()=>[...e[22]||(e[22]=[c(" Change Password ",-1)])]),_:1},8,["loading"])]),_:1},8,["state"])])])]),secrets:o(()=>[l("div",ct,[l("div",mt,[e[25]||(e[25]=l("div",null,[l("h3",{class:"text-lg font-semibold"}," Secrets "),l("p",{class:"text-sm text-dimmed"}," Encrypted key-value store for skills and integrations. ")],-1)),s(u,{icon:"i-lucide-plus",onClick:me},{default:o(()=>[...e[24]||(e[24]=[c(" Add Secret ",-1)])]),_:1})]),s(Ne,{columns:ce,data:a(se),loading:a(R)},{"key-cell":o(({row:t})=>[l("code",pt,g(t.original.key),1)]),"description-cell":o(({row:t})=>[l("span",ft,g(t.original.description||"—"),1)]),"updatedAt-cell":o(({row:t})=>[l("span",vt,g(ge(t.original.updatedAt)),1)]),"actions-cell":o(({row:t})=>[l("div",yt,[s(u,{variant:"ghost",icon:"i-lucide-pencil",size:"xs",onClick:p=>pe(t.original)},null,8,["onClick"]),s(u,{variant:"ghost",color:"error",icon:"i-lucide-trash-2",size:"xs",onClick:p=>fe(t.original)},null,8,["onClick"])])]),empty:o(()=>[l("div",gt,[s(j,{name:"i-lucide-key",class:"size-12 mx-auto mb-4 text-dimmed"}),e[26]||(e[26]=l("p",{class:"text-dimmed"}," No secrets yet. Add one to get started. ",-1))])]),_:1},8,["data","loading"])])]),integrations:o(()=>[l("div",bt,[l("div",wt,[e[28]||(e[28]=l("div",null,[l("h3",{class:"text-lg font-semibold"}," Integrations "),l("p",{class:"text-sm text-dimmed"}," Connect external platforms to the message bridge. ")],-1)),s(u,{icon:"i-lucide-plus",onClick:Se},{default:o(()=>[...e[27]||(e[27]=[c(" Add Integration ",-1)])]),_:1})]),a(W)?(f(),v("div",_t,[(f(),v(N,null,T(3,t=>s(U,{key:t,class:"h-16 w-full"})),64))])):a(Q).length===0?(f(),v("div",xt,[s(j,{name:"i-lucide-plug",class:"size-12 mx-auto mb-4 text-dimmed"}),e[29]||(e[29]=l("p",{class:"text-dimmed"}," No integrations configured. ",-1)),e[30]||(e[30]=l("p",{class:"text-sm text-dimmed mt-1"}," Connect Telegram, Discord, iMessage, or Google Suite. ",-1))])):(f(),v("div",kt,[(f(!0),v(N,null,T(a(Q),t=>(f(),v("div",{key:t.id,class:"border border-default rounded-lg px-4 py-3"},[l("div",ht,[l("div",Pt,[s(j,{name:X.find(p=>p.value===t.platform)?.icon||"i-lucide-plug",class:"size-5 text-dimmed"},null,8,["name"]),l("div",null,[l("span",St,g(t.name),1),l("span",Ct,g(X.find(p=>p.value===t.platform)?.label),1)])]),l("div",Ut,[l("span",{class:Je(["text-xs capitalize",Pe[t.healthStatus]||"text-dimmed"])},g(t.healthStatus),3),s(ee,{"model-value":t.enabled,"onUpdate:modelValue":p=>Ue(t)},null,8,["model-value","onUpdate:modelValue"]),s(u,{variant:"ghost",color:"error",icon:"i-lucide-trash-2",size:"xs",onClick:p=>Ve(t)},null,8,["onClick"])])]),t.healthMessage?(f(),v("p",Vt,g(t.healthMessage),1)):ae("",!0)]))),128))]))])]),app:o(()=>[l("div",$t,[e[32]||(e[32]=l("div",{class:"mb-6"},[l("h3",{class:"text-lg font-semibold mb-1"}," Notification Preferences "),l("p",{class:"text-sm text-dimmed"}," Choose which resource changes show toast notifications. ")],-1)),a(G)?(f(),v("div",Et,[(f(),v(N,null,T(5,t=>s(U,{key:t,class:"h-12 w-full"})),64))])):(f(),v("div",Dt,[(f(),v(N,null,T(be,t=>l("div",{key:t.key,class:"border border-default rounded-lg"},[l("div",At,[l("div",Nt,[s(u,{variant:"ghost",size:"xs",icon:a(E).has(t.key)?"i-lucide-chevron-down":"i-lucide-chevron-right",onClick:p=>xe(t.key)},null,8,["icon","onClick"]),s(j,{name:t.icon,class:"size-5 text-dimmed"},null,8,["name"]),l("span",Tt,g(t.label),1)]),s(ee,{"model-value":a(b)[t.key]?.enabled??!1,"onUpdate:modelValue":p=>ke(t.key,p)},null,8,["model-value","onUpdate:modelValue"])]),a(E).has(t.key)&&a(b)[t.key]?.enabled?(f(),v("div",Mt,[(f(!0),v(N,null,T(t.subtypes,p=>(f(),v("div",{key:p,class:"flex items-center justify-between pl-11"},[l("span",Bt,g(p),1),s(ee,{"model-value":a(b)[t.key]?.subtypes?.[p]!==!1,size:"sm","onUpdate:modelValue":je=>he(t.key,p,je)},null,8,["model-value","onUpdate:modelValue"])]))),128))])):ae("",!0)])),64))])),l("div",Ft,[s(u,{loading:a(H),onClick:_e},{default:o(()=>[...e[31]||(e[31]=[c(" Save Preferences ",-1)])]),_:1},8,["loading"])])])]),_:1})]),_:1})]),s(z,{open:a(k),"onUpdate:open":e[9]||(e[9]=t=>I(k)?k.value=t:null)},{header:o(()=>[l("h3",It,g(a(y)?"Edit Secret":"Add Secret"),1)]),body:o(()=>[s(F,{state:a(d),class:"space-y-4",onSubmit:ve},{default:o(()=>[s(w,{label:"Key",name:"key",hint:a(y)?"":"SCREAMING_SNAKE_CASE"},{default:o(()=>[s(x,{modelValue:a(d).key,"onUpdate:modelValue":e[5]||(e[5]=t=>a(d).key=t),disabled:!!a(y),placeholder:"MY_API_KEY",class:"w-full font-mono"},null,8,["modelValue","disabled"])]),_:1},8,["hint"]),s(w,{label:"Value",name:"value",hint:a(y)?"Leave empty to keep current value":""},{default:o(()=>[s(x,{modelValue:a(d).value,"onUpdate:modelValue":e[6]||(e[6]=t=>a(d).value=t),type:"password",placeholder:a(y)?"••••••••":"Secret value",class:"w-full"},null,8,["modelValue","placeholder"])]),_:1},8,["hint"]),s(w,{label:"Description",name:"description"},{default:o(()=>[s(x,{modelValue:a(d).description,"onUpdate:modelValue":e[7]||(e[7]=t=>a(d).description=t),placeholder:"Optional description",class:"w-full"},null,8,["modelValue"])]),_:1}),l("div",Lt,[s(u,{variant:"ghost",onClick:e[8]||(e[8]=t=>k.value=!1)},{default:o(()=>[...e[33]||(e[33]=[c(" Cancel ",-1)])]),_:1}),s(u,{type:"submit",loading:a(Y)},{default:o(()=>[c(g(a(y)?"Update":"Create"),1)]),_:1},8,["loading"])])]),_:1},8,["state"])]),_:1},8,["open"]),s(z,{open:a(P),"onUpdate:open":e[11]||(e[11]=t=>I(P)?P.value=t:null)},{header:o(()=>[...e[34]||(e[34]=[l("h3",{class:"text-lg font-semibold"}," Delete Secret ",-1)])]),body:o(()=>[l("p",Kt,[e[35]||(e[35]=c(" Are you sure you want to delete ",-1)),l("code",qt,g(a($)?.key),1),e[36]||(e[36]=c("? ",-1))]),e[39]||(e[39]=l("p",{class:"text-sm text-dimmed"}," This action cannot be undone. Any skills using this secret will stop working. ",-1)),l("div",Rt,[s(u,{variant:"ghost",onClick:e[10]||(e[10]=t=>P.value=!1)},{default:o(()=>[...e[37]||(e[37]=[c(" Cancel ",-1)])]),_:1}),s(u,{color:"error",onClick:ye},{default:o(()=>[...e[38]||(e[38]=[c(" Delete ",-1)])]),_:1})])]),_:1},8,["open"]),s(z,{open:a(S),"onUpdate:open":e[15]||(e[15]=t=>I(S)?S.value=t:null)},{header:o(()=>[...e[40]||(e[40]=[l("h3",{class:"text-lg font-semibold"}," Add Integration ",-1)])]),body:o(()=>[l("div",Yt,[s(w,{label:"Platform",name:"platform"},{default:o(()=>[s(Be,{modelValue:a(_).platform,"onUpdate:modelValue":e[12]||(e[12]=t=>a(_).platform=t),items:X,"value-key":"value",class:"w-full"},null,8,["modelValue"])]),_:1}),s(w,{label:"Name",name:"name"},{default:o(()=>[s(x,{modelValue:a(_).name,"onUpdate:modelValue":e[13]||(e[13]=t=>a(_).name=t),placeholder:"My Telegram Bot",class:"w-full"},null,8,["modelValue"])]),_:1}),l("div",Ot,[s(u,{variant:"ghost",onClick:e[14]||(e[14]=t=>S.value=!1)},{default:o(()=>[...e[41]||(e[41]=[c(" Cancel ",-1)])]),_:1}),s(u,{loading:a(J),onClick:Ce},{default:o(()=>[...e[42]||(e[42]=[c(" Create ",-1)])]),_:1},8,["loading"])])])]),_:1},8,["open"]),s(z,{open:a(C),"onUpdate:open":e[17]||(e[17]=t=>I(C)?C.value=t:null)},{header:o(()=>[...e[43]||(e[43]=[l("h3",{class:"text-lg font-semibold"}," Delete Integration ",-1)])]),body:o(()=>[l("p",Gt,[e[44]||(e[44]=c(" Are you sure you want to delete ",-1)),l("strong",null,g(a(D)?.name),1),e[45]||(e[45]=c("? ",-1))]),e[48]||(e[48]=l("p",{class:"text-sm text-dimmed"}," This will remove the integration and all associated message history. ",-1)),l("div",Ht,[s(u,{variant:"ghost",onClick:e[16]||(e[16]=t=>C.value=!1)},{default:o(()=>[...e[46]||(e[46]=[c(" Cancel ",-1)])]),_:1}),s(u,{color:"error",onClick:$e},{default:o(()=>[...e[47]||(e[47]=[c(" Delete ",-1)])]),_:1})])]),_:1},8,["open"])]),_:1})}}});export{Ts as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as l}from"./BaVaTug8.js";import{N as c,c as p,Q as n,R as u,S as i,U as m,al as s}from"./CvMqUdkl.js";import{_ as d}from"./Zjvb5YJR.js";import"./iik6CYzq.js";const f={base:"rounded-full"},v={__name:"ProseBadge",props:{class:{type:null,required:!1}},setup(a){const e=a,o=c(),r=p(()=>s({extend:s(f),...o.ui?.prose?.badge||{}}));return(t,_)=>(u(),n(d,{color:"primary",variant:"subtle",class:m(r.value({class:e.class}))},{default:i(()=>[l(t.$slots,"default",{mdcUnwrap:"p"})]),_:3},8,["class"]))}};export{v as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"id":"9863fe43-d78c-4b29-a1e8-e6de61119507","timestamp":1771726473975,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}
|