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.
Files changed (175) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/{Bb9LNSu_.js → -JdScH3W.js} +1 -1
  3. package/.output/public/_nuxt/{A5lrd5_j.js → 0EY9Msdx.js} +1 -1
  4. package/.output/public/_nuxt/{BsXPllgv.js → 1lOC4Si0.js} +1 -1
  5. package/.output/public/_nuxt/{CeDxLTxX.js → 1zIQX9mh.js} +1 -1
  6. package/.output/public/_nuxt/{D3V98LVR.js → 4Qy4OdWt.js} +1 -1
  7. package/.output/public/_nuxt/{MdebRWqA.js → 4nN41Tyd.js} +1 -1
  8. package/.output/public/_nuxt/{BrICHPil.js → 5MZBbx-H.js} +1 -1
  9. package/.output/public/_nuxt/{Brqrl-cH.js → 6lIxuL6n.js} +1 -1
  10. package/.output/public/_nuxt/AUdD1uDD.js +1 -0
  11. package/.output/public/_nuxt/{B9Kd_0HK.js → B-513wJW.js} +1 -1
  12. package/.output/public/_nuxt/{CNwGp6eP.js → B1vDCixB.js} +1 -1
  13. package/.output/public/_nuxt/{deSeNTOh.js → B2MVZlI-.js} +1 -1
  14. package/.output/public/_nuxt/{CVr40yKH.js → B5JDxHxC.js} +1 -1
  15. package/.output/public/_nuxt/{CvMqUdkl.js → B63LIwsW.js} +3 -3
  16. package/.output/public/_nuxt/{C5nfaH9w.js → B6bnHNWY.js} +1 -1
  17. package/.output/public/_nuxt/{BaJEGr8G.js → B6wYZD_K.js} +1 -1
  18. package/.output/public/_nuxt/{_16_b82K.js → B8Ou5yh2.js} +1 -1
  19. package/.output/public/_nuxt/{BaVaTug8.js → BE4Ndhrq.js} +1 -1
  20. package/.output/public/_nuxt/{CphXSvBo.js → BES6FzF5.js} +1 -1
  21. package/.output/public/_nuxt/{BmTCDcNm.js → BE_OHTBv.js} +1 -1
  22. package/.output/public/_nuxt/{CBrXB4hk.js → BJ8jbKuq.js} +1 -1
  23. package/.output/public/_nuxt/{vM-wdhkZ.js → BNBGEa-U.js} +1 -1
  24. package/.output/public/_nuxt/{XzRnkkwG.js → BOGXUgGg.js} +1 -1
  25. package/.output/public/_nuxt/BQ1T6zWA.js +1 -0
  26. package/.output/public/_nuxt/{Bb1B0ntt.js → BVc_fOF1.js} +1 -1
  27. package/.output/public/_nuxt/{B-5roYpk.js → BX6vcvkp.js} +1 -1
  28. package/.output/public/_nuxt/{CLZS246x.js → BYIq3eP8.js} +1 -1
  29. package/.output/public/_nuxt/{B_28CKij.js → BZqdzrSw.js} +2 -2
  30. package/.output/public/_nuxt/{D-wVwRIx.js → BaYtugUf.js} +1 -1
  31. package/.output/public/_nuxt/{EgYyfo1g.js → Be5L93GM.js} +3 -3
  32. package/.output/public/_nuxt/{BLszW9T3.js → BfECQayu.js} +1 -1
  33. package/.output/public/_nuxt/{Ci-MVdCd.js → BgG2k-zy.js} +1 -1
  34. package/.output/public/_nuxt/BhnONkIm.js +1 -0
  35. package/.output/public/_nuxt/{BjFs8Ujb.js → BjI5wb_q.js} +1 -1
  36. package/.output/public/_nuxt/{CK5Ef4YR.js → Bk9-HxOg.js} +1 -1
  37. package/.output/public/_nuxt/{MzEmU9ER.js → BltasKce.js} +1 -1
  38. package/.output/public/_nuxt/{BvuV9uCn.js → Bp9kHdw6.js} +1 -1
  39. package/.output/public/_nuxt/{CnW8zyuA.js → Bsdcw5gr.js} +1 -1
  40. package/.output/public/_nuxt/{Zjvb5YJR.js → BsnhHCOa.js} +1 -1
  41. package/.output/public/_nuxt/{DMsHLHmB.js → BwJVN9k0.js} +1 -1
  42. package/.output/public/_nuxt/{CgQKyBSS.js → BwVt3BzR.js} +1 -1
  43. package/.output/public/_nuxt/{Bc0NIKN7.js → BwdxQyyo.js} +1 -1
  44. package/.output/public/_nuxt/{CfWDee_q.js → BzTjmQCD.js} +1 -1
  45. package/.output/public/_nuxt/{RRoc4m9d.js → C1FhgWcI.js} +1 -1
  46. package/.output/public/_nuxt/{DvgLoqaC.js → C2DZeD9G.js} +1 -1
  47. package/.output/public/_nuxt/{B43p0So7.js → C3JOLqW1.js} +1 -1
  48. package/.output/public/_nuxt/{atVSHCxP.js → C4ScCUjy.js} +1 -1
  49. package/.output/public/_nuxt/{Bn8loaeQ.js → C6HEirAm.js} +1 -1
  50. package/.output/public/_nuxt/{BLL1JLwq.js → C6UTTaCP.js} +1 -1
  51. package/.output/public/_nuxt/{DNpsjOxN.js → C8gtQaKB.js} +1 -1
  52. package/.output/public/_nuxt/{BhOIdu3Z.js → C8tXHRIo.js} +1 -1
  53. package/.output/public/_nuxt/{DaiWSWdm.js → C8wa4Wh4.js} +1 -1
  54. package/.output/public/_nuxt/{DZdh7_lh.js → CDradKPE.js} +1 -1
  55. package/.output/public/_nuxt/{DB3y_21M.js → CEJh-OAl.js} +1 -1
  56. package/.output/public/_nuxt/CGfVTQUF.js +1 -0
  57. package/.output/public/_nuxt/{Dx2Tgm6S.js → CGgZuPnb.js} +1 -1
  58. package/.output/public/_nuxt/{CwaMSU1O.js → CH8kNq6W.js} +1 -1
  59. package/.output/public/_nuxt/{NlScC3GW.js → CIJ2MJdc.js} +1 -1
  60. package/.output/public/_nuxt/{CzTTKfet.js → CIUZAp6g.js} +1 -1
  61. package/.output/public/_nuxt/{CwCEQ4Dw.js → CXBOHJ2W.js} +1 -1
  62. package/.output/public/_nuxt/{BJ_GgKV0.js → CY3x8iy3.js} +1 -1
  63. package/.output/public/_nuxt/{ByfSJZV6.js → CaLO8sre.js} +1 -1
  64. package/.output/public/_nuxt/{jeu3Xx8e.js → CbTu13wM.js} +1 -1
  65. package/.output/public/_nuxt/{CjYUi9c8.js → CfO_d5gC.js} +1 -1
  66. package/.output/public/_nuxt/{DpYns7cT.js → Clr3MHUr.js} +1 -1
  67. package/.output/public/_nuxt/{1Hz98MKF.js → Cmdr5BNz.js} +1 -1
  68. package/.output/public/_nuxt/{DZ_azKLI.js → Cmj-BR0q.js} +1 -1
  69. package/.output/public/_nuxt/{CSQ-nblB.js → Cn83lLUb.js} +1 -1
  70. package/.output/public/_nuxt/{BdCB2PoJ.js → CqMgz85Z.js} +1 -1
  71. package/.output/public/_nuxt/{Dkzqkzki.js → CrW6y2-s.js} +1 -1
  72. package/.output/public/_nuxt/{DAs574wU.js → CrjNndEO.js} +1 -1
  73. package/.output/public/_nuxt/{CB8_A8N4.js → Cs_udj6A.js} +1 -1
  74. package/.output/public/_nuxt/{qW7F87d8.js → CsbHYpNi.js} +3 -3
  75. package/.output/public/_nuxt/{DuOsLoVR.js → CwKe2KkK.js} +1 -1
  76. package/.output/public/_nuxt/{Db5XIfWS.js → CwOUYOe5.js} +1 -1
  77. package/.output/public/_nuxt/{0J8pJb0Z.js → CybU4a95.js} +1 -1
  78. package/.output/public/_nuxt/{WWNeb45u.js → CziltI1u.js} +1 -1
  79. package/.output/public/_nuxt/{DgPiIWA2.js → CzurfTnt.js} +1 -1
  80. package/.output/public/_nuxt/{DAFasgHH.js → D-O8wAju.js} +1 -1
  81. package/.output/public/_nuxt/{CJ85o8FK.js → D1t0272g.js} +1 -1
  82. package/.output/public/_nuxt/D3RROe4s.js +1 -0
  83. package/.output/public/_nuxt/{Cedv1M65.js → D5G5UL_g.js} +1 -1
  84. package/.output/public/_nuxt/{1IuG3yiQ.js → D76Dw8rw.js} +1 -1
  85. package/.output/public/_nuxt/{w3t8WD8v.js → D7DTZ0iS.js} +1 -1
  86. package/.output/public/_nuxt/{C6Kc4XvS.js → D7WbsJsa.js} +1 -1
  87. package/.output/public/_nuxt/D7iYVmH6.js +1 -0
  88. package/.output/public/_nuxt/{CXuKrnTA.js → D8gh62A0.js} +1 -1
  89. package/.output/public/_nuxt/{CW8xtqwN.js → DA2RowFe.js} +1 -1
  90. package/.output/public/_nuxt/{4bC1z31I.js → DBKxzQ3U.js} +1 -1
  91. package/.output/public/_nuxt/DBuW01Fx.js +1 -0
  92. package/.output/public/_nuxt/{B7-0ADn3.js → DCL9gWFw.js} +1 -1
  93. package/.output/public/_nuxt/{NBE83ZQn.js → DGJKfutb.js} +1 -1
  94. package/.output/public/_nuxt/{B5OWqWCh.js → DHScQdvh.js} +1 -1
  95. package/.output/public/_nuxt/{BTk5mgdf.js → DI1FIvaM.js} +1 -1
  96. package/.output/public/_nuxt/{0LyRrTRM.js → DJ4pqxg-.js} +1 -1
  97. package/.output/public/_nuxt/{DImdNj-F.js → DJoRBCVm.js} +1 -1
  98. package/.output/public/_nuxt/{DfpSaqgV.js → DLuRYg2p.js} +1 -1
  99. package/.output/public/_nuxt/DMy2sxuC.js +1 -0
  100. package/.output/public/_nuxt/{BJi2ZHtT.js → DQd-GXKJ.js} +1 -1
  101. package/.output/public/_nuxt/{CpC3C9gj.js → DSgubznn.js} +1 -1
  102. package/.output/public/_nuxt/{BZFXnEwe.js → DSynhNOO.js} +1 -1
  103. package/.output/public/_nuxt/{BsPj3ifk.js → DTrFhdRO.js} +1 -1
  104. package/.output/public/_nuxt/{BNlugvM3.js → DTu0K_pX.js} +1 -1
  105. package/.output/public/_nuxt/{DV0JMebZ.js → DUDbJONU.js} +1 -1
  106. package/.output/public/_nuxt/{C14DGwaT.js → DYu_NYj3.js} +1 -1
  107. package/.output/public/_nuxt/{Bf34lExB.js → D_tCgCFX.js} +1 -1
  108. package/.output/public/_nuxt/{pkbwpgSD.js → DdXVAzIg.js} +1 -1
  109. package/.output/public/_nuxt/DfIqFkyp.js +1 -0
  110. package/.output/public/_nuxt/{BoPAYize.js → Dj2opPDu.js} +1 -1
  111. package/.output/public/_nuxt/{Drr-RSSP.js → DjmFlCHK.js} +1 -1
  112. package/.output/public/_nuxt/{DgKeJf5C.js → DkhxRAb3.js} +1 -1
  113. package/.output/public/_nuxt/DlSJ4TF_.js +1 -0
  114. package/.output/public/_nuxt/{S4a_N6rD.js → DmmQUhEb.js} +1 -1
  115. package/.output/public/_nuxt/{CG0fS-BQ.js → DvATBMPl.js} +1 -1
  116. package/.output/public/_nuxt/{CxJr4mB0.js → DwAJIRGg.js} +1 -1
  117. package/.output/public/_nuxt/{CjRmY2OQ.js → FYOLNuMV.js} +1 -1
  118. package/.output/public/_nuxt/Gy6_ehml.js +1 -0
  119. package/.output/public/_nuxt/{zBoPDS4z.js → HPOXd4gt.js} +1 -1
  120. package/.output/public/_nuxt/{HCCuOAgZ.js → HlbU_z9a.js} +1 -1
  121. package/.output/public/_nuxt/{DsKy-gee.js → JQV21WEV.js} +1 -1
  122. package/.output/public/_nuxt/{JJIcQEna.js → NusIKwmA.js} +1 -1
  123. package/.output/public/_nuxt/{HC3657Xq.js → OrcbFmB1.js} +1 -1
  124. package/.output/public/_nuxt/{fTEmwfo4.js → Oy4_RPEZ.js} +1 -1
  125. package/.output/public/_nuxt/{Dpp5cOwJ.js → Pa936BQP.js} +1 -1
  126. package/.output/public/_nuxt/PzQHm02e.js +1 -0
  127. package/.output/public/_nuxt/{Dysa6np_.js → REP2-rzf.js} +1 -1
  128. package/.output/public/_nuxt/{-2wkydbj.js → RRbnMIVe.js} +1 -1
  129. package/.output/public/_nuxt/{CzqLfT8k.js → TGVM5w2K.js} +1 -1
  130. package/.output/public/_nuxt/UbZP7wjm.js +1 -0
  131. package/.output/public/_nuxt/{BW-E-Sar.js → XJYoLoTi.js} +1 -1
  132. package/.output/public/_nuxt/{CrjKigv8.js → a9_LvIZ4.js} +1 -1
  133. package/.output/public/_nuxt/builds/latest.json +1 -1
  134. package/.output/public/_nuxt/builds/meta/613faa5d-8ace-45e0-8274-b611cc4fd1ad.json +1 -0
  135. package/.output/public/_nuxt/entry.DkvuF_CR.css +1 -0
  136. package/.output/public/_nuxt/{CwJR22-0.js → fVkHtgGF.js} +1 -1
  137. package/.output/public/_nuxt/{sdvIKLwS.js → hm3ShyaF.js} +1 -1
  138. package/.output/public/_nuxt/{CqiOV9n1.js → k16puyWi.js} +1 -1
  139. package/.output/public/_nuxt/{B8Kve-DH.js → myNwwtfj.js} +1 -1
  140. package/.output/public/_nuxt/{DxR8g9So.js → nTCVPCKg.js} +1 -1
  141. package/.output/public/_nuxt/{DytaiikM.js → pHQcHl8n.js} +1 -1
  142. package/.output/public/_nuxt/{Cebw7Q7c.js → pNqWPbXW.js} +1 -1
  143. package/.output/public/_nuxt/{Cow1TrPj.js → qWWnsfRV.js} +1 -1
  144. package/.output/public/_nuxt/{DCco_rlV.js → rRYEvKFu.js} +1 -1
  145. package/.output/public/_nuxt/{hqpqUuXS.js → svWfwR0T.js} +1 -1
  146. package/.output/public/_nuxt/{BMLwzSDu.js → wgX1ldgZ.js} +1 -1
  147. package/.output/public/_nuxt/{CEfkp9Rl.js → xrh9hzzH.js} +2 -2
  148. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  149. package/.output/server/chunks/build/server.mjs +1 -1
  150. package/.output/server/chunks/build/{settings-DuT6LGJZ.mjs → settings-B2KXoGcz.mjs} +1679 -203
  151. package/.output/server/chunks/build/settings-B2KXoGcz.mjs.map +1 -0
  152. package/.output/server/chunks/build/styles.mjs +4 -4
  153. package/.output/server/chunks/nitro/nitro.mjs +922 -866
  154. package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
  155. package/.output/server/package.json +1 -1
  156. package/app/pages/settings.vue +581 -6
  157. package/package.json +1 -1
  158. package/server/api/skills/import.post.ts +1 -1
  159. package/server/bridge/adapters/telegram.ts +84 -9
  160. package/.output/public/_nuxt/B-YQztaH.js +0 -1
  161. package/.output/public/_nuxt/B1gFtqXK.js +0 -1
  162. package/.output/public/_nuxt/BTfZ7nek.js +0 -1
  163. package/.output/public/_nuxt/BbPnqQJ0.js +0 -1
  164. package/.output/public/_nuxt/BhSWIRpp.js +0 -1
  165. package/.output/public/_nuxt/By6kmkhJ.js +0 -1
  166. package/.output/public/_nuxt/C4XVJnNJ.js +0 -1
  167. package/.output/public/_nuxt/CkvyAKbu.js +0 -1
  168. package/.output/public/_nuxt/D2f7BlK2.js +0 -1
  169. package/.output/public/_nuxt/D2lmhTjQ.js +0 -1
  170. package/.output/public/_nuxt/D64-rCSQ.js +0 -1
  171. package/.output/public/_nuxt/DGP2JJt8.js +0 -1
  172. package/.output/public/_nuxt/builds/meta/9863fe43-d78c-4b29-a1e8-e6de61119507.json +0 -1
  173. package/.output/public/_nuxt/entry._7ZkP07A.css +0 -1
  174. package/.output/public/_nuxt/f7zDjk6q.js +0 -1
  175. package/.output/server/chunks/build/settings-DuT6LGJZ.mjs.map +0 -1
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "cognova",
3
3
  "type": "module",
4
- "version": "0.2.7",
4
+ "version": "0.2.9",
5
5
  "description": "Personal knowledge management system with Claude Code integration",
6
6
  "repository": {
7
7
  "type": "git",
@@ -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].entryName
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 using the Bot API webhook mode.
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
- console.log('[telegram] No webhook URL configured using polling or manual webhook setup')
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(method: string, body?: Record<string, unknown>): Promise<TelegramApiResponse> {
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
- result?: Record<string, unknown>
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":[]}