cognova 0.2.8 → 0.2.10
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/{CH_jROT9.js → 0NJ3PaRM.js} +1 -1
- package/.output/public/_nuxt/{C075hYlX.js → 0yk-pS3R.js} +2 -2
- package/.output/public/_nuxt/{CVYcsqmL.js → 10_wwHSz.js} +1 -1
- package/.output/public/_nuxt/{BUC36BHp.js → 1zUTf4AP.js} +1 -1
- package/.output/public/_nuxt/{njnzCNrH.js → 2dNDtTiv.js} +3 -3
- package/.output/public/_nuxt/{B8TQvzYX.js → 2nOqGUPr.js} +1 -1
- package/.output/public/_nuxt/{ijmD2cEW.js → 3jQMk_5H.js} +1 -1
- package/.output/public/_nuxt/{D4X6ONPF.js → 4K03TkGA.js} +1 -1
- package/.output/public/_nuxt/{C3tximD1.js → 6boMs_nF.js} +1 -1
- package/.output/public/_nuxt/{Drxf7nJz.js → 7oCGSglN.js} +1 -1
- package/.output/public/_nuxt/{Dt5mOzXj.js → 8q5NepGW.js} +1 -1
- package/.output/public/_nuxt/{GYf-vnR6.js → B93pdGAW.js} +1 -1
- package/.output/public/_nuxt/{BZBNJD7U.js → BA_pRWwX.js} +1 -1
- package/.output/public/_nuxt/{eE8TtXgC.js → BDyn4ApB.js} +3 -3
- package/.output/public/_nuxt/{0dqQoCHY.js → BGgwYWjH.js} +1 -1
- package/.output/public/_nuxt/{BrOKokPO.js → BH0QDWEm.js} +1 -1
- package/.output/public/_nuxt/{B5SnZL2l.js → BHtY0l0l.js} +1 -1
- package/.output/public/_nuxt/{ImPsUDiH.js → BIXrSYwR.js} +1 -1
- package/.output/public/_nuxt/BK8S2ony.js +1 -0
- package/.output/public/_nuxt/{Bkc1Hpcf.js → BKXg-alD.js} +1 -1
- package/.output/public/_nuxt/{BahXyh-A.js → BLnYhy_t.js} +1 -1
- package/.output/public/_nuxt/{Bhhg7oSf.js → BR8bKz8h.js} +1 -1
- package/.output/public/_nuxt/{D2kQkOaG.js → BS2ZNXI1.js} +1 -1
- package/.output/public/_nuxt/{BLm0UviR.js → BUghTae1.js} +1 -1
- package/.output/public/_nuxt/{D4_89MZm.js → BXuWCWsJ.js} +1 -1
- package/.output/public/_nuxt/{LQNRVThr.js → BYHCP8x7.js} +1 -1
- package/.output/public/_nuxt/{BYtVdUIW.js → BZrSPX0S.js} +1 -1
- package/.output/public/_nuxt/{U3f6dy8i.js → B_wilgcd.js} +1 -1
- package/.output/public/_nuxt/BaZwjF8o.js +1 -0
- package/.output/public/_nuxt/{BefOhWHD.js → Bciqk4dX.js} +1 -1
- package/.output/public/_nuxt/{CewcVxDS.js → Beom-INj.js} +1 -1
- package/.output/public/_nuxt/{BlsIfvSf.js → BfcLZ_fC.js} +1 -1
- package/.output/public/_nuxt/{dB7G4iIC.js → Bk6JUtIo.js} +1 -1
- package/.output/public/_nuxt/BkfI94R8.js +1 -0
- package/.output/public/_nuxt/{DqzomZoo.js → BmOtR1wX.js} +1 -1
- package/.output/public/_nuxt/{4XnyUc7C.js → BmVLxnDU.js} +1 -1
- package/.output/public/_nuxt/{DtJnWtpL.js → BtHQ1T0f.js} +1 -1
- package/.output/public/_nuxt/{DcbbfwCe.js → ByYh0uRg.js} +1 -1
- package/.output/public/_nuxt/{CbvNJVrk.js → C27WoGNZ.js} +1 -1
- package/.output/public/_nuxt/{CY7f553E.js → C2FxZbO_.js} +1 -1
- package/.output/public/_nuxt/{zO9MgHj2.js → C2vq6Te8.js} +1 -1
- package/.output/public/_nuxt/{BXtZVbmx.js → C39dQ88F.js} +1 -1
- package/.output/public/_nuxt/{DmDPSvxi.js → C3NST0BU.js} +1 -1
- package/.output/public/_nuxt/{nHSiDk8N.js → C4mwL7SE.js} +1 -1
- package/.output/public/_nuxt/{BBDxhFYY.js → C5R5QaCA.js} +1 -1
- package/.output/public/_nuxt/{D79lbuWG.js → C6qKcgOY.js} +1 -1
- package/.output/public/_nuxt/{C-HCArYP.js → C71_a1IX.js} +1 -1
- package/.output/public/_nuxt/{CSjOaBKu.js → C9WIgRRL.js} +1 -1
- package/.output/public/_nuxt/{DmOS3vFH.js → CBTkrk2M.js} +1 -1
- package/.output/public/_nuxt/CEnSeCqn.js +1 -0
- package/.output/public/_nuxt/{CAfyXyeo.js → CKxSHyww.js} +1 -1
- package/.output/public/_nuxt/{D4Cizi4y.js → CLfF6dSn.js} +1 -1
- package/.output/public/_nuxt/{C7qhmmZh.js → CPutXj8l.js} +1 -1
- package/.output/public/_nuxt/{BCCYopTB.js → CQqCBrXj.js} +1 -1
- package/.output/public/_nuxt/{D-Ge96eV.js → CSKJ-Ahh.js} +1 -1
- package/.output/public/_nuxt/{B2Xfh7am.js → CTCcEJU3.js} +1 -1
- package/.output/public/_nuxt/{BnJ-6YDw.js → CVFwOzbl.js} +1 -1
- package/.output/public/_nuxt/{C21BjagS.js → CVdCqaby.js} +1 -1
- package/.output/public/_nuxt/{2QHXgMyi.js → CVqlefTY.js} +1 -1
- package/.output/public/_nuxt/CWyMCJQH.js +1 -0
- package/.output/public/_nuxt/{B6-U3KqJ.js → CY-QVcA5.js} +2 -2
- package/.output/public/_nuxt/{Cr0NfhPB.js → CY-cjAwJ.js} +1 -1
- package/.output/public/_nuxt/{Bwn-CRYH.js → CYPO5o_C.js} +1 -1
- package/.output/public/_nuxt/{B-AlyT2D.js → CZRnNmU8.js} +1 -1
- package/.output/public/_nuxt/{DwIYtFfA.js → CZVzFlpI.js} +1 -1
- package/.output/public/_nuxt/{BkO884Ds.js → CZoEPC_Q.js} +3 -3
- package/.output/public/_nuxt/{BJUff9Ku.js → Cc-2ziaZ.js} +1 -1
- package/.output/public/_nuxt/{BLwctszt.js → ChcO9s3o.js} +1 -1
- package/.output/public/_nuxt/{DX_9SfFb.js → Cl-LOSDV.js} +1 -1
- package/.output/public/_nuxt/{CSHcfejh.js → CobqYwkp.js} +1 -1
- package/.output/public/_nuxt/{B0xuHXvN.js → CqNwHCpo.js} +1 -1
- package/.output/public/_nuxt/{DMb_1D81.js → CuxrHsu-.js} +1 -1
- package/.output/public/_nuxt/{GGcn5KPW.js → CwPdIZ9J.js} +1 -1
- package/.output/public/_nuxt/{D7pKT3IW.js → D0ifH682.js} +1 -1
- package/.output/public/_nuxt/{KEeoKtq_.js → D3AZaldL.js} +1 -1
- package/.output/public/_nuxt/{BdxP21ep.js → D4UJwDQJ.js} +1 -1
- package/.output/public/_nuxt/{C-Ygk9x5.js → D5jZq8b3.js} +1 -1
- package/.output/public/_nuxt/{B6G3NLfW.js → D5q8SnqE.js} +1 -1
- package/.output/public/_nuxt/{CDkyQ1eQ.js → D8M722pn.js} +1 -1
- package/.output/public/_nuxt/{BjnQ1pI1.js → D8lwrAYS.js} +1 -1
- package/.output/public/_nuxt/{C13FKhqK.js → D9nmzBAw.js} +1 -1
- package/.output/public/_nuxt/{ClGn48iq.js → DC4idAGt.js} +1 -1
- package/.output/public/_nuxt/{vES4kgx7.js → DEd2xVbS.js} +1 -1
- package/.output/public/_nuxt/{CClsKJ9A.js → DH4YkDAi.js} +1 -1
- package/.output/public/_nuxt/{D-5A6cMB.js → DJTCT0bl.js} +1 -1
- package/.output/public/_nuxt/{D_O7SlHm.js → DNP5E1bC.js} +1 -1
- package/.output/public/_nuxt/{BF3tVKtX.js → DO9SFIh1.js} +1 -1
- package/.output/public/_nuxt/DPklr_tJ.js +2 -0
- package/.output/public/_nuxt/{mfAEx0Kz.js → DQM4eBdt.js} +1 -1
- package/.output/public/_nuxt/{cPPThz84.js → DQh6I9z9.js} +1 -1
- package/.output/public/_nuxt/{CXTrUfQ5.js → DS2wStH1.js} +1 -1
- package/.output/public/_nuxt/{CYQP4zpi.js → DTAStixR.js} +1 -1
- package/.output/public/_nuxt/{CEz288t8.js → DTGenhcA.js} +1 -1
- package/.output/public/_nuxt/{B9zgEO8N.js → DUAAXJ6Q.js} +1 -1
- package/.output/public/_nuxt/{CzAZpALW.js → DUVzIl3o.js} +1 -1
- package/.output/public/_nuxt/{DJt7Rogf.js → DXdwpJ-I.js} +1 -1
- package/.output/public/_nuxt/{MWUW1sIF.js → DY3uK7wM.js} +1 -1
- package/.output/public/_nuxt/{CfY_bsV0.js → DYbZBZet.js} +1 -1
- package/.output/public/_nuxt/{DZEuR9ms.js → D_4LPm1U.js} +1 -1
- package/.output/public/_nuxt/{CrmE-JGu.js → Db4KMnt8.js} +1 -1
- package/.output/public/_nuxt/{BwC62XRN.js → DcJbYLTp.js} +1 -1
- package/.output/public/_nuxt/{C6sX7TYf.js → DfF81NlA.js} +1 -1
- package/.output/public/_nuxt/{BHn8tRjg.js → DhI5cA_n.js} +1 -1
- package/.output/public/_nuxt/{CQ3tAemj.js → DhuOKJda.js} +1 -1
- package/.output/public/_nuxt/{D887s9k9.js → Di-Nc75e.js} +1 -1
- package/.output/public/_nuxt/{D_obX2Hj.js → Djs0Tlpa.js} +1 -1
- package/.output/public/_nuxt/DmmdPt_5.js +1 -0
- package/.output/public/_nuxt/{DKKY8zWm.js → Dn5a-guE.js} +1 -1
- package/.output/public/_nuxt/{BvstjGHC.js → DtjjnHnt.js} +1 -1
- package/.output/public/_nuxt/{Dbfwn2zk.js → DuvzM-P1.js} +1 -1
- package/.output/public/_nuxt/{BxShcW0K.js → DwY7rCd_.js} +1 -1
- package/.output/public/_nuxt/{BmaHzvZM.js → Dya5oK8u.js} +1 -1
- package/.output/public/_nuxt/{CO3hceDE.js → DzA58_Lm.js} +1 -1
- package/.output/public/_nuxt/{CF33v_m5.js → DzGy77Vr.js} +1 -1
- package/.output/public/_nuxt/{DmlZSBjF.js → E3rXPwU8.js} +1 -1
- package/.output/public/_nuxt/{CEDw8osP.js → EgKnQnf-.js} +1 -1
- package/.output/public/_nuxt/{it8syoZI.js → GtEM7xVU.js} +1 -1
- package/.output/public/_nuxt/{DLUvsixu.js → H6JbrRBU.js} +1 -1
- package/.output/public/_nuxt/{BE1CVWts.js → ILEvizzp.js} +1 -1
- package/.output/public/_nuxt/{BSA-U0so.js → JX1oqJI9.js} +1 -1
- package/.output/public/_nuxt/{yJ9vRvHj.js → JbHa4oXq.js} +1 -1
- package/.output/public/_nuxt/{zXvvpsZj.js → Kw0zy3FG.js} +1 -1
- package/.output/public/_nuxt/{C6FFW_cO.js → N5XtbYVD.js} +1 -1
- package/.output/public/_nuxt/{D04CyXmf.js → PP_4ebzl.js} +1 -1
- package/.output/public/_nuxt/{6QDVg5TO.js → SrncdpaW.js} +1 -1
- package/.output/public/_nuxt/{36ZHqDPo.js → U1MWjQMi.js} +1 -1
- package/.output/public/_nuxt/{mT7Mt2d7.js → Um1vPiAz.js} +1 -1
- package/.output/public/_nuxt/{CqFcWBkW.js → XCjS70z4.js} +1 -1
- package/.output/public/_nuxt/{C24so3m7.js → YX8avsvq.js} +2 -2
- package/.output/public/_nuxt/{DaBSQDif.js → _cy8R3nk.js} +1 -1
- package/.output/public/_nuxt/{D9aYkNhQ.js → apYB9dr5.js} +1 -1
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/def74b99-d70c-4f30-aa29-70248cbeac7d.json +1 -0
- package/.output/public/_nuxt/entry.NKPfH2kE.css +1 -0
- package/.output/public/_nuxt/{BqTdsCnW.js → fbyIeNkc.js} +1 -1
- package/.output/public/_nuxt/{-2AbaFNH.js → g5MjDvm5.js} +1 -1
- package/.output/public/_nuxt/{C1tCdK-M.js → gTrVszwd.js} +1 -1
- package/.output/public/_nuxt/{BVEFmI4I.js → ixlNW2So.js} +1 -1
- package/.output/public/_nuxt/{DtyyytRx.js → nnQqD5pb.js} +1 -1
- package/.output/public/_nuxt/{pHCJ6lhw.js → rfGRTJJW.js} +1 -1
- package/.output/public/_nuxt/{Buf1PAiO.js → t8aDAkZ5.js} +1 -1
- package/.output/public/_nuxt/{BmdlymIW.js → vIOxcXKR.js} +1 -1
- package/.output/public/_nuxt/{Cve4psva.js → vScW1Zgm.js} +1 -1
- package/.output/public/_nuxt/{SfaNtyKS.js → wO6z2ugJ.js} +1 -1
- package/.output/public/_nuxt/{BhYoxmLV.js → x6FRJ5ac.js} +1 -1
- package/.output/public/_nuxt/{Pn7VD6uQ.js → zq-a1TeT.js} +1 -1
- package/.output/server/chunks/build/{chat-CZMiB68R.mjs → chat-CR3JIVEq.mjs} +65 -11
- package/.output/server/chunks/build/chat-CR3JIVEq.mjs.map +1 -0
- package/.output/server/chunks/build/client.precomputed.mjs +1 -1
- package/.output/server/chunks/build/server.mjs +3 -3
- package/.output/server/chunks/build/{settings-ByUXa46k.mjs → settings-B2KXoGcz.mjs} +213 -26
- package/.output/server/chunks/build/settings-B2KXoGcz.mjs.map +1 -0
- package/.output/server/chunks/build/styles.mjs +2 -2
- package/.output/server/chunks/build/{usage-CSrBh4Or.mjs → usage-BHdQZbfI.mjs} +9 -5
- package/.output/server/chunks/build/{usage-CSrBh4Or.mjs.map → usage-BHdQZbfI.mjs.map} +1 -1
- package/.output/server/chunks/nitro/nitro.mjs +1161 -891
- package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
- package/.output/server/chunks/routes/_ws/chat.mjs +2 -1
- package/.output/server/chunks/routes/_ws/chat.mjs.map +1 -1
- package/.output/server/chunks/routes/api/conversations/_id_.delete.mjs +4 -1
- package/.output/server/chunks/routes/api/conversations/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get3.mjs +1 -1
- package/.output/server/chunks/routes/api/index.get3.mjs.map +1 -1
- package/.output/server/chunks/routes/api/usage/stats.get.mjs +2 -0
- package/.output/server/chunks/routes/api/usage/stats.get.mjs.map +1 -1
- package/.output/server/package.json +1 -1
- package/app/components/chat/ConversationList.vue +7 -1
- package/app/components/chat/MessageBubble.vue +45 -1
- package/app/components/usage/UsageRecordsTable.vue +4 -2
- package/app/components/usage/UsageSourceDonut.client.vue +4 -2
- package/app/components/usage/UsageTopConsumers.vue +4 -2
- package/app/composables/useChat.ts +3 -0
- package/app/pages/settings.vue +148 -9
- package/package.json +1 -1
- package/server/api/conversations/[id].delete.ts +9 -0
- package/server/api/conversations/index.get.ts +2 -1
- package/server/api/usage/stats.get.ts +2 -0
- package/server/bridge/adapters/telegram.ts +83 -8
- package/server/bridge/responder.ts +248 -0
- package/server/bridge/router.ts +6 -4
- package/server/db/schema.ts +3 -1
- package/server/drizzle/migrations/0015_great_mephistopheles.sql +2 -0
- package/server/drizzle/migrations/meta/0015_snapshot.json +1972 -0
- package/server/drizzle/migrations/meta/_journal.json +7 -0
- package/server/routes/_ws/chat.ts +2 -1
- package/server/utils/log-token-usage.ts +1 -1
- package/shared/types/index.ts +6 -0
- package/.output/public/_nuxt/BIo-9u_O.js +0 -1
- package/.output/public/_nuxt/BMs0mHEp.js +0 -1
- package/.output/public/_nuxt/BwyXWqBY.js +0 -1
- package/.output/public/_nuxt/CE9_ECxx.js +0 -1
- package/.output/public/_nuxt/DmcMCO8x.js +0 -1
- package/.output/public/_nuxt/JReYPlwF.js +0 -2
- package/.output/public/_nuxt/builds/meta/410e449d-9fe8-43a0-ae07-80797693b9b8.json +0 -1
- package/.output/public/_nuxt/entry._7ZkP07A.css +0 -1
- package/.output/public/_nuxt/iBaivqi8.js +0 -1
- package/.output/server/chunks/build/chat-CZMiB68R.mjs.map +0 -1
- package/.output/server/chunks/build/settings-ByUXa46k.mjs.map +0 -1
|
@@ -106,6 +106,13 @@
|
|
|
106
106
|
"when": 1771585865493,
|
|
107
107
|
"tag": "0014_worthless_cable",
|
|
108
108
|
"breakpoints": true
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"idx": 15,
|
|
112
|
+
"version": "7",
|
|
113
|
+
"when": 1771736174854,
|
|
114
|
+
"tag": "0015_great_mephistopheles",
|
|
115
|
+
"breakpoints": true
|
|
109
116
|
}
|
|
110
117
|
]
|
|
111
118
|
}
|
|
@@ -97,7 +97,8 @@ async function handleSend(peer: any, message: string, conversationId?: string) {
|
|
|
97
97
|
await db.insert(schema.conversationMessages).values({
|
|
98
98
|
conversationId: convId,
|
|
99
99
|
role: 'user',
|
|
100
|
-
content: JSON.stringify([{ type: 'text', text: message }])
|
|
100
|
+
content: JSON.stringify([{ type: 'text', text: message }]),
|
|
101
|
+
source: 'web'
|
|
101
102
|
})
|
|
102
103
|
|
|
103
104
|
// Start SDK streaming (fire-and-forget so WS stays responsive for interrupts)
|
|
@@ -2,7 +2,7 @@ import { getDb } from '~~/server/db'
|
|
|
2
2
|
import * as schema from '~~/server/db/schema'
|
|
3
3
|
|
|
4
4
|
interface TokenUsageEntry {
|
|
5
|
-
source: 'chat' | 'agent' | 'memory_extraction'
|
|
5
|
+
source: 'chat' | 'agent' | 'memory_extraction' | 'bridge'
|
|
6
6
|
sourceId?: string
|
|
7
7
|
sourceName?: string
|
|
8
8
|
inputTokens: number
|
package/shared/types/index.ts
CHANGED
|
@@ -388,6 +388,7 @@ export type TokenUsageSource
|
|
|
388
388
|
= | 'chat'
|
|
389
389
|
| 'agent'
|
|
390
390
|
| 'memory_extraction'
|
|
391
|
+
| 'bridge'
|
|
391
392
|
|
|
392
393
|
export interface TokenUsageRecord {
|
|
393
394
|
id: string
|
|
@@ -407,6 +408,7 @@ export interface DailyUsageData {
|
|
|
407
408
|
chat: number
|
|
408
409
|
agent: number
|
|
409
410
|
memory: number
|
|
411
|
+
bridge: number
|
|
410
412
|
totalCost: number
|
|
411
413
|
inputTokens: number
|
|
412
414
|
outputTokens: number
|
|
@@ -689,12 +691,15 @@ export interface ChatToolResultBlock {
|
|
|
689
691
|
|
|
690
692
|
export type ChatContentBlock = ChatTextBlock | ChatToolUseBlock | ChatToolResultBlock
|
|
691
693
|
|
|
694
|
+
export type MessageSource = 'web' | 'telegram' | 'discord' | 'imessage' | 'email' | 'google'
|
|
695
|
+
|
|
692
696
|
// Persisted message
|
|
693
697
|
export interface ChatMessage {
|
|
694
698
|
id: string
|
|
695
699
|
conversationId: string
|
|
696
700
|
role: 'user' | 'assistant'
|
|
697
701
|
content: ChatContentBlock[]
|
|
702
|
+
source?: MessageSource
|
|
698
703
|
costUsd?: number
|
|
699
704
|
durationMs?: number
|
|
700
705
|
createdAt: Date
|
|
@@ -709,6 +714,7 @@ export interface ChatConversation {
|
|
|
709
714
|
summary?: string
|
|
710
715
|
status: ChatSessionStatus
|
|
711
716
|
totalCostUsd: number
|
|
717
|
+
isMain: boolean
|
|
712
718
|
messageCount: number
|
|
713
719
|
startedAt: Date
|
|
714
720
|
endedAt?: Date
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{X as e}from"./njnzCNrH.js";function a(r,u="reka"){return r||`${u}-${e?.()}`}export{a as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{d as a,n as i}from"./njnzCNrH.js";import{u}from"./Bkc1Hpcf.js";const r=a(()=>{const{isAuthenticated:e,isPending:t}=u();if(!t.value&&!e.value)return i("/login")});export{r as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as I,G as i,R as o,ab as n,T as a,W as q,a9 as d,ai as z,aj as M,U as W,ae as h,ak as J,bg as K,an as X,e as Y,q as Z,f as w,c as ee,S as p,C as t,Q as $,_ as te,aa as se,k as S}from"./njnzCNrH.js";import{_ as oe,a as ne}from"./B0xuHXvN.js";import{_ as ae}from"./yJ9vRvHj.js";import{u as ie,_ as re,a as le,b as ce}from"./JReYPlwF.js";import"./C-Ygk9x5.js";import"./BHn8tRjg.js";import"./vES4kgx7.js";import"./C24so3m7.js";import"./88opOQSr.js";import"./iik6CYzq.js";import"./Buf1PAiO.js";import"./B5SnZL2l.js";import"./DmcMCO8x.js";const ue={class:"flex flex-col h-full"},de={class:"p-3 border-b border-default"},me={class:"flex-1 overflow-y-auto"},_e={key:0,class:"p-4 text-sm text-dimmed text-center"},fe=["onClick"],pe={class:"flex items-start justify-between gap-2"},ve={class:"truncate text-sm font-medium"},ge={class:"flex items-center gap-2 mt-1 text-xs text-dimmed"},he={key:0},xe={key:1},Ce=I({__name:"ConversationList",props:{conversations:{},activeId:{}},emits:["select","delete","new"],setup(v,{emit:m}){const r=m;function _(f){const l=new Date(f),e=new Date().getTime()-l.getTime();return e<6e4?"just now":e<36e5?`${Math.floor(e/6e4)}m ago`:e<864e5?`${Math.floor(e/36e5)}h ago`:l.toLocaleDateString()}return(f,l)=>{const u=q;return o(),i("div",ue,[n("div",de,[a(u,{label:"New Chat",icon:"i-lucide-plus",color:"primary",variant:"soft",block:"",onClick:l[0]||(l[0]=e=>r("new"))})]),n("div",me,[v.conversations.length===0?(o(),i("div",_e," No conversations yet ")):d("",!0),(o(!0),i(z,null,M(v.conversations,e=>(o(),i("button",{key:e.id,class:W(["w-full p-3 text-left border-b border-default hover:bg-elevated/50 transition-colors group",{"bg-elevated/50":v.activeId===e.id}]),onClick:x=>r("select",e.id)},[n("div",pe,[n("div",ve,h(e.title||"Untitled"),1),a(u,{icon:"i-lucide-trash-2",variant:"ghost",color:"error",size:"xs",class:"opacity-0 group-hover:opacity-100 shrink-0",onClick:J(x=>r("delete",e.id),["stop"])},null,8,["onClick"])]),n("div",ge,[n("span",null,h(_(e.startedAt)),1),e.messageCount?(o(),i("span",he,h(e.messageCount)+" msgs",1)):d("",!0),e.totalCostUsd>0?(o(),i("span",xe,"$"+h(e.totalCostUsd.toFixed(4)),1)):d("",!0)])],10,fe))),128))])])}}}),be=Object.assign(Ce,{__name:"ChatConversationList"}),ke={class:"flex flex-1 min-w-0"},ye={class:"flex flex-col h-full"},we={key:0,class:"flex flex-col items-center justify-center h-full text-dimmed"},Ve=I({__name:"chat",setup(v){const{connectionStatus:m,sessionStatus:r,activeConversationId:_,messages:f,conversations:l,streamingText:u,streamingToolCalls:e,connect:x,sendMessage:N,interrupt:j,startNewConversation:C,loadConversation:T,loadConversations:L,deleteConversation:V}=ie(),b=K(),U=X(),g=Y(null);Z(()=>{if(x(),L(),b.query.conversation){const c=b.query.conversation,s=w(m,y=>{y==="connected"&&(s(),T(c),U.replace({query:{}}))},{immediate:!0})}else if(b.query.onboarding){const c=w(m,s=>{s==="connected"&&(c(),C(),N("Hello!"),S(k),U.replace({query:{}}))},{immediate:!0})}});function R(c){N(c),S(k)}function k(){g.value&&(g.value.scrollTop=g.value.scrollHeight)}w(u,()=>S(k));const F=ee(()=>_.value?l.value.find(s=>s.id===_.value)?.title||"Chat":"New Chat");return(c,s)=>{const y=be,B=oe,H=ae,A=q,E=ne,G=te,O=re,P=le,Q=ce;return o(),i("div",ke,[a(B,{id:"chat-sidebar","default-size":20,"min-size":15,"max-size":30,collapsible:"",resizable:"",class:"hidden lg:flex"},{default:p(()=>[a(y,{conversations:t(l),"active-id":t(_),onSelect:t(T),onDelete:t(V),onNew:t(C)},null,8,["conversations","active-id","onSelect","onDelete","onNew"])]),_:1}),a(B,{id:"chat-main",grow:""},{header:p(()=>[a(E,{title:t(F)},{right:p(()=>[t(r)==="streaming"?(o(),$(H,{key:0,color:"warning",variant:"subtle"},{default:p(()=>[...s[0]||(s[0]=[se(" Streaming ",-1)])]),_:1})):d("",!0),a(A,{icon:"i-lucide-plus",variant:"ghost",color:"neutral",class:"lg:hidden",onClick:t(C)},null,8,["onClick"])]),_:1},8,["title"])]),default:p(()=>[n("div",ye,[n("div",{ref_key:"messagesContainer",ref:g,class:"flex-1 overflow-y-auto p-4 space-y-4"},[t(f).length===0&&t(r)!=="streaming"?(o(),i("div",we,[a(G,{name:"i-lucide-message-square",class:"size-12 mb-4"}),s[1]||(s[1]=n("p",{class:"text-lg font-medium"}," Start a conversation ",-1)),s[2]||(s[2]=n("p",{class:"text-sm mt-1"}," Send a message to start chatting with Claude ",-1))])):d("",!0),(o(!0),i(z,null,M(t(f),D=>(o(),$(O,{key:D.id,message:D},null,8,["message"]))),128)),t(r)==="streaming"?(o(),$(P,{key:1,text:t(u),"tool-calls":t(e)},null,8,["text","tool-calls"])):d("",!0)],512),a(Q,{"session-status":t(r),"connection-status":t(m),onSend:R,onInterrupt:t(j)},null,8,["session-status","connection-status","onInterrupt"])])]),_:1})])}}});export{Ve as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as Xe}from"./BLm0UviR.js";import{_ as Ze,a as el}from"./B0xuHXvN.js";import{_ as ll}from"./SfaNtyKS.js";import{_ as tl}from"./D-5A6cMB.js";import{a as al,ag as sl,ah as B,e as u,f as ol,q as nl,Q as ce,S as n,R as m,T as a,ab as o,G as f,C as t,ai as x,aj as T,a9 as S,W as il,_ as dl,ae as _,aa as p,U as rl,ak as pe,al as K}from"./njnzCNrH.js";import{_ as ul}from"./BhYoxmLV.js";import{_ as ml}from"./Bhhg7oSf.js";import{_ as cl}from"./BxShcW0K.js";import{_ as pl}from"./DqzomZoo.js";import{_ as fl}from"./BUC36BHp.js";import{_ as gl}from"./C7qhmmZh.js";import{_ as vl}from"./B5SnZL2l.js";import{_ as bl}from"./GYf-vnR6.js";import{_ as yl}from"./DmDPSvxi.js";import{u as wl,d as de}from"./it8syoZI.js";import{u as _l}from"./Bkc1Hpcf.js";import"./C-Ygk9x5.js";import"./BHn8tRjg.js";import"./vES4kgx7.js";import"./Pn7VD6uQ.js";import"./88opOQSr.js";import"./D2kQkOaG.js";import"./iBaivqi8.js";import"./dB7G4iIC.js";import"./D7pKT3IW.js";import"./Bwn-CRYH.js";import"./ImPsUDiH.js";import"./CClsKJ9A.js";import"./BIo-9u_O.js";import"./yJ9vRvHj.js";import"./BZBNJD7U.js";import"./BYtVdUIW.js";import"./DLUvsixu.js";import"./B9zgEO8N.js";import"./D9aYkNhQ.js";import"./CrmE-JGu.js";import"./BCCYopTB.js";import"./DmcMCO8x.js";const hl={class:"p-6"},kl={class:"space-y-8 max-w-2xl mx-auto py-6"},xl={class:"py-6"},Vl={class:"flex items-center justify-between mb-6"},Pl={class:"text-sm bg-elevated px-2 py-0.5 rounded"},Sl={class:"text-dimmed"},Cl={class:"text-dimmed text-sm"},Ul={class:"flex gap-2 justify-end"},Il={class:"py-12 text-center"},$l={class:"py-6"},El={class:"flex items-center justify-between mb-6"},Dl={key:0,class:"space-y-3"},Nl={key:1,class:"py-12 text-center"},Al={key:2,class:"space-y-3"},Ml=["onClick"],Bl={class:"flex items-center justify-between"},Tl={class:"flex items-center gap-3"},Hl={class:"font-medium"},Ll={class:"text-sm text-dimmed ml-2"},Fl={class:"flex items-center gap-3"},Ol={key:0,class:"text-xs text-dimmed mt-1 pl-8"},jl={class:"max-w-2xl mx-auto py-6"},zl={key:0,class:"space-y-3"},Kl={key:1,class:"space-y-2"},Rl={class:"flex items-center justify-between px-4 py-3"},ql={class:"flex items-center gap-3"},Gl={class:"font-medium"},Yl={key:0,class:"border-t border-default px-4 py-3 space-y-2 bg-elevated/50"},Wl={class:"text-sm text-dimmed capitalize"},Jl={class:"mt-6"},Ql={class:"space-y-8 max-w-xl mx-auto py-6"},Xl={class:"space-y-4"},Zl={class:"text-lg font-semibold"},et={class:"flex justify-end gap-2 pt-4"},lt={class:"mb-4"},tt={class:"bg-elevated px-2 py-0.5 rounded"},at={class:"flex justify-end gap-2 pt-6"},st={class:"space-y-4"},ot={class:"flex justify-end gap-2 pt-4"},nt={class:"mb-4"},it={class:"flex justify-end gap-2 pt-6"},dt={class:"flex items-center gap-2"},rt={class:"text-lg font-semibold"},ut={class:"space-y-4"},mt={key:0,class:"flex items-start gap-2 rounded-lg bg-elevated p-3 text-sm"},ct={class:"text-dimmed"},pt={class:"bg-elevated px-1 py-0.5 rounded text-xs"},ft={class:"space-y-2"},gt=["checked","onChange"],vt={class:"text-sm"},bt={class:"grid grid-cols-2 gap-4"},yt={class:"grid grid-cols-2 gap-4"},wt={class:"flex justify-end gap-2 pt-4"},oa=al({__name:"settings",setup(_t){const{user:fe,updateProfile:ge,changeEmail:ve,changePassword:be}=_l(),d=sl(),{updatePreferences:ye}=wl(),H=B({name:""}),G=u(!1),U=B({newEmail:""}),Y=u(!1),y=B({currentPassword:"",newPassword:"",confirmPassword:""}),W=u(!1),re=u([]),J=u(!1),C=u(!1),I=u(!1),L=u(null),Q=u(!1),h=u(null),g=B({key:"",value:"",description:""});ol(()=>fe.value,i=>{i&&(H.name=i.name||"",U.newEmail=i.email||"")},{immediate:!0});async function X(){J.value=!0;try{const{data:i}=await $fetch("/api/secrets");re.value=i}catch{d.add({title:"Failed to load secrets",color:"error"})}J.value=!1}const we=[{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"}],_e=[{accessorKey:"key",header:"Key"},{accessorKey:"description",header:"Description"},{accessorKey:"updatedAt",header:"Last Updated"},{accessorKey:"actions",header:""}];function he(){h.value=null,g.key="",g.value="",g.description="",C.value=!0}function ke(i){h.value=i,g.key=i.key,g.value="",g.description=i.description||"",C.value=!0}function xe(i){L.value=i,I.value=!0}async function Ve(){if(!g.key||!h.value&&!g.value){d.add({title:"Missing fields",description:h.value?"Key is required.":"Key and value are required.",color:"error"});return}Q.value=!0;try{h.value?(await $fetch(`/api/secrets/${h.value.key}`,{method:"PUT",body:{value:g.value||void 0,description:g.description||void 0}}),d.add({title:"Secret updated",color:"success"})):(await $fetch("/api/secrets",{method:"POST",body:{key:g.key,value:g.value,description:g.description||void 0}}),d.add({title:"Secret created",color:"success"})),C.value=!1,await X()}catch(i){const e=i;d.add({title:h.value?"Failed to update secret":"Failed to create secret",description:e.data?.message||"An error occurred",color:"error"})}Q.value=!1}async function Pe(){if(L.value)try{await $fetch(`/api/secrets/${L.value.key}`,{method:"DELETE"}),d.add({title:"Secret deleted",color:"success"}),I.value=!1,L.value=null,await X()}catch{d.add({title:"Failed to delete secret",color:"error"})}}function Se(i){return new Date(i).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}const k=u({...de}),Z=u(!1),ee=u(!1),F=u(new Set),Ce=[{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 Ue(){Z.value=!0;try{const{data:i}=await $fetch("/api/settings");k.value={...de,...i.notifications}}catch{k.value={...de}}Z.value=!1}async function Ie(){ee.value=!0;try{await $fetch("/api/settings",{method:"PUT",body:{notifications:k.value}}),ye(k.value),d.add({title:"Notification preferences saved",color:"success"})}catch{d.add({title:"Failed to save preferences",color:"error"})}ee.value=!1}function $e(i){F.value.has(i)?F.value.delete(i):F.value.add(i)}function Ee(i,e){k.value[i]={...k.value[i],enabled:e}}function De(i,e,P){const N=k.value[i];k.value[i]={...N,subtypes:{...N?.subtypes,[e]:P}}}const le=u([]),te=u(!1),$=u(!1),ae=u(!1),E=u(!1),O=u(null),V=B({platform:"telegram",name:""}),D=u(!1),w=u(null),se=u(!1),s=B({name:"",botUsername:"",allowedChatIds:"",listenMode:"mentions",guildId:"",channelId:"",strategy:"imsg",allowedNumbers:"",blueBubblesUrl:"",enabledServices:[],account:"",imapHost:"",imapPort:"",smtpHost:"",smtpPort:"",emailAddress:""}),Ne=[{value:"mentions",label:"Mentions & DMs"},{value:"dm",label:"DMs only"},{value:"all",label:"All messages"}],Ae=[{value:"imsg",label:"Local (imsg CLI)"},{value:"bluebubbles",label:"BlueBubbles"}],Me=[{value:"gmail",label:"Gmail"},{value:"calendar",label:"Calendar"},{value:"drive",label:"Drive"},{value:"contacts",label:"Contacts"},{value:"tasks",label:"Tasks"}],Be={telegram:"My Telegram Bot",discord:"My Discord Bot",imessage:"iMessage Bridge",google:"Google Suite",email:"Work Email"},ue={telegram:"TELEGRAM_BOT_TOKEN",discord:"DISCORD_BOT_TOKEN",imessage:null,google:null,email:null},R=[{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"}],Te={connected:"text-success",disconnected:"text-dimmed",error:"text-error",unconfigured:"text-dimmed"};async function j(){te.value=!0;try{const{data:i}=await $fetch("/api/bridges");le.value=i}catch{d.add({title:"Failed to load integrations",color:"error"})}te.value=!1}function He(i){w.value=i,s.name=i.name;const e=i.config?JSON.parse(i.config):{};switch(s.botUsername="",s.allowedChatIds="",s.listenMode="mentions",s.guildId="",s.channelId="",s.strategy="imsg",s.allowedNumbers="",s.blueBubblesUrl="",s.enabledServices=[],s.account="",s.imapHost="",s.imapPort="",s.smtpHost="",s.smtpPort="",s.emailAddress="",i.platform){case"telegram":s.botUsername=e.botUsername||"",s.allowedChatIds=(e.allowedChatIds||[]).join(", ");break;case"discord":s.listenMode=e.listenMode||"mentions",s.guildId=e.guildId||"",s.channelId=e.channelId||"";break;case"imessage":s.strategy=e.strategy||"imsg",s.allowedNumbers=(e.allowedNumbers||[]).join(", "),s.blueBubblesUrl=e.blueBubblesUrl||"";break;case"google":s.enabledServices=e.enabledServices||[],s.account=e.account||"";break;case"email":s.imapHost=e.imapHost||"",s.imapPort=e.imapPort?.toString()||"",s.smtpHost=e.smtpHost||"",s.smtpPort=e.smtpPort?.toString()||"",s.emailAddress=e.emailAddress||"";break}D.value=!0}async function Le(){if(!w.value)return;const i=w.value.platform;let e={};switch(w.value.config&&(e=JSON.parse(w.value.config)),i){case"telegram":e.botUsername=s.botUsername||void 0,e.allowedChatIds=s.allowedChatIds?s.allowedChatIds.split(",").map(P=>P.trim()).filter(Boolean):void 0;break;case"discord":e.listenMode=s.listenMode,e.guildId=s.guildId||void 0,e.channelId=s.channelId||void 0;break;case"imessage":e.strategy=s.strategy,e.allowedNumbers=s.allowedNumbers?s.allowedNumbers.split(",").map(P=>P.trim()).filter(Boolean):void 0,e.blueBubblesUrl=s.blueBubblesUrl||void 0;break;case"google":e.enabledServices=s.enabledServices,e.account=s.account||void 0;break;case"email":e.imapHost=s.imapHost||void 0,e.imapPort=s.imapPort?Number(s.imapPort):void 0,e.smtpHost=s.smtpHost||void 0,e.smtpPort=s.smtpPort?Number(s.smtpPort):void 0,e.emailAddress=s.emailAddress||void 0;break}se.value=!0;try{await $fetch(`/api/bridges/${w.value.id}`,{method:"PUT",body:{name:s.name,config:e}}),d.add({title:"Integration updated",color:"success"}),D.value=!1,await j()}catch(P){const N=P;d.add({title:"Failed to update integration",description:N.data?.message,color:"error"})}se.value=!1}function Fe(){V.platform="telegram",V.name="",$.value=!0}async function Oe(){if(!V.name){d.add({title:"Name is required",color:"error"});return}ae.value=!0;try{await $fetch("/api/bridges",{method:"POST",body:{platform:V.platform,name:V.name}}),d.add({title:"Integration created",color:"success"}),$.value=!1,await j()}catch(i){const e=i;d.add({title:"Failed to create integration",description:e.data?.message,color:"error"})}ae.value=!1}async function je(i){try{await $fetch(`/api/bridges/${i.id}`,{method:"PUT",body:{enabled:!i.enabled}}),await j()}catch{d.add({title:"Failed to update integration",color:"error"})}}function ze(i){O.value=i,E.value=!0}async function Ke(){if(O.value)try{await $fetch(`/api/bridges/${O.value.id}`,{method:"DELETE"}),d.add({title:"Integration deleted",color:"success"}),E.value=!1,O.value=null,await j()}catch{d.add({title:"Failed to delete integration",color:"error"})}}nl(()=>{X(),Ue(),j()});async function Re(){G.value=!0;const i=await ge({name:H.name});i.error?d.add({title:"Update failed",description:i.error.message,color:"error"}):d.add({title:"Profile updated",description:"Your name has been updated successfully.",color:"success"}),G.value=!1}async function qe(){if(!U.newEmail){d.add({title:"Email required",description:"Please enter a new email address.",color:"error"});return}Y.value=!0;const i=await ve(U.newEmail);i.error?d.add({title:"Email change failed",description:i.error.message,color:"error"}):d.add({title:"Email updated",description:"Your email has been changed successfully.",color:"success"}),Y.value=!1}async function Ge(){if(y.newPassword!==y.confirmPassword){d.add({title:"Passwords do not match",description:"Please make sure your new passwords match.",color:"error"});return}if(!y.currentPassword||!y.newPassword){d.add({title:"Missing fields",description:"Please fill in all password fields.",color:"error"});return}W.value=!0;const i=await be({currentPassword:y.currentPassword,newPassword:y.newPassword});i.error?d.add({title:"Password change failed",description:i.error.message,color:"error"}):(d.add({title:"Password changed",description:"Your password has been changed successfully.",color:"success"}),y.currentPassword="",y.newPassword="",y.confirmPassword=""),W.value=!1}return(i,e)=>{const P=Xe,N=el,c=ll,r=tl,v=il,q=ul,me=ml,A=dl,Ye=cl,M=pl,oe=fl,We=gl,Je=vl,z=bl,ne=yl,Qe=Ze;return m(),ce(Qe,{id:"settings",grow:""},{default:n(()=>[a(N,{title:"Settings"},{right:n(()=>[a(P)]),_:1}),o("div",hl,[a(Je,null,{fallback:n(()=>[o("div",Ql,[a(M,{class:"h-10 w-full"}),o("div",Xl,[a(M,{class:"h-5 w-20"}),a(M,{class:"h-10 w-full"}),a(M,{class:"h-10 w-28"})])])]),default:n(()=>[a(We,{items:we,"default-value":"account",class:"w-full mx-auto",ui:{list:"max-w-xl"}},{account:n(()=>[o("div",kl,[o("div",null,[e[37]||(e[37]=o("h3",{class:"text-lg font-semibold mb-4"}," Profile ",-1)),a(q,{state:t(H),class:"space-y-4",onSubmit:Re},{default:n(()=>[a(r,{label:"Name",name:"name"},{default:n(()=>[a(c,{modelValue:t(H).name,"onUpdate:modelValue":e[0]||(e[0]=l=>t(H).name=l),placeholder:"Your name",class:"w-full"},null,8,["modelValue"])]),_:1}),a(v,{type:"submit",loading:t(G)},{default:n(()=>[...e[36]||(e[36]=[p(" Save Name ",-1)])]),_:1},8,["loading"])]),_:1},8,["state"])]),a(me),o("div",null,[e[39]||(e[39]=o("h3",{class:"text-lg font-semibold mb-4"}," Email Address ",-1)),a(q,{state:t(U),class:"space-y-4",onSubmit:qe},{default:n(()=>[a(r,{label:"Email",name:"newEmail"},{default:n(()=>[a(c,{modelValue:t(U).newEmail,"onUpdate:modelValue":e[1]||(e[1]=l=>t(U).newEmail=l),type:"email",placeholder:"your@email.com",class:"w-full"},null,8,["modelValue"])]),_:1}),a(v,{type:"submit",loading:t(Y)},{default:n(()=>[...e[38]||(e[38]=[p(" Change Email ",-1)])]),_:1},8,["loading"])]),_:1},8,["state"])]),a(me),o("div",null,[e[41]||(e[41]=o("h3",{class:"text-lg font-semibold mb-4"}," Change Password ",-1)),a(q,{state:t(y),class:"space-y-4",onSubmit:Ge},{default:n(()=>[a(r,{label:"Current Password",name:"currentPassword"},{default:n(()=>[a(c,{modelValue:t(y).currentPassword,"onUpdate:modelValue":e[2]||(e[2]=l=>t(y).currentPassword=l),type:"password",class:"w-full"},null,8,["modelValue"])]),_:1}),a(r,{label:"New Password",name:"newPassword"},{default:n(()=>[a(c,{modelValue:t(y).newPassword,"onUpdate:modelValue":e[3]||(e[3]=l=>t(y).newPassword=l),type:"password",class:"w-full"},null,8,["modelValue"])]),_:1}),a(r,{label:"Confirm New Password",name:"confirmPassword"},{default:n(()=>[a(c,{modelValue:t(y).confirmPassword,"onUpdate:modelValue":e[4]||(e[4]=l=>t(y).confirmPassword=l),type:"password",class:"w-full"},null,8,["modelValue"])]),_:1}),a(v,{type:"submit",loading:t(W)},{default:n(()=>[...e[40]||(e[40]=[p(" Change Password ",-1)])]),_:1},8,["loading"])]),_:1},8,["state"])])])]),secrets:n(()=>[o("div",xl,[o("div",Vl,[e[43]||(e[43]=o("div",null,[o("h3",{class:"text-lg font-semibold"}," Secrets "),o("p",{class:"text-sm text-dimmed"}," Encrypted key-value store for skills and integrations. ")],-1)),a(v,{icon:"i-lucide-plus",onClick:he},{default:n(()=>[...e[42]||(e[42]=[p(" Add Secret ",-1)])]),_:1})]),a(Ye,{columns:_e,data:t(re),loading:t(J)},{"key-cell":n(({row:l})=>[o("code",Pl,_(l.original.key),1)]),"description-cell":n(({row:l})=>[o("span",Sl,_(l.original.description||"—"),1)]),"updatedAt-cell":n(({row:l})=>[o("span",Cl,_(Se(l.original.updatedAt)),1)]),"actions-cell":n(({row:l})=>[o("div",Ul,[a(v,{variant:"ghost",icon:"i-lucide-pencil",size:"xs",onClick:b=>ke(l.original)},null,8,["onClick"]),a(v,{variant:"ghost",color:"error",icon:"i-lucide-trash-2",size:"xs",onClick:b=>xe(l.original)},null,8,["onClick"])])]),empty:n(()=>[o("div",Il,[a(A,{name:"i-lucide-key",class:"size-12 mx-auto mb-4 text-dimmed"}),e[44]||(e[44]=o("p",{class:"text-dimmed"}," No secrets yet. Add one to get started. ",-1))])]),_:1},8,["data","loading"])])]),integrations:n(()=>[o("div",$l,[o("div",El,[e[46]||(e[46]=o("div",null,[o("h3",{class:"text-lg font-semibold"}," Integrations "),o("p",{class:"text-sm text-dimmed"}," Connect external platforms to the message bridge. ")],-1)),a(v,{icon:"i-lucide-plus",onClick:Fe},{default:n(()=>[...e[45]||(e[45]=[p(" Add Integration ",-1)])]),_:1})]),t(te)?(m(),f("div",Dl,[(m(),f(x,null,T(3,l=>a(M,{key:l,class:"h-16 w-full"})),64))])):t(le).length===0?(m(),f("div",Nl,[a(A,{name:"i-lucide-plug",class:"size-12 mx-auto mb-4 text-dimmed"}),e[47]||(e[47]=o("p",{class:"text-dimmed"}," No integrations configured. ",-1)),e[48]||(e[48]=o("p",{class:"text-sm text-dimmed mt-1"}," Connect Telegram, Discord, iMessage, or Google Suite. ",-1))])):(m(),f("div",Al,[(m(!0),f(x,null,T(t(le),l=>(m(),f("div",{key:l.id,class:"border border-default rounded-lg px-4 py-3 cursor-pointer hover:bg-elevated/50 transition-colors",onClick:b=>He(l)},[o("div",Bl,[o("div",Tl,[a(A,{name:R.find(b=>b.value===l.platform)?.icon||"i-lucide-plug",class:"size-5 text-dimmed"},null,8,["name"]),o("div",null,[o("span",Hl,_(l.name),1),o("span",Ll,_(R.find(b=>b.value===l.platform)?.label),1)])]),o("div",Fl,[o("span",{class:rl(["text-xs capitalize",Te[l.healthStatus]||"text-dimmed"])},_(l.healthStatus),3),a(oe,{"model-value":l.enabled,onClick:e[5]||(e[5]=pe(()=>{},["stop"])),"onUpdate:modelValue":b=>je(l)},null,8,["model-value","onUpdate:modelValue"]),a(v,{variant:"ghost",color:"error",icon:"i-lucide-trash-2",size:"xs",onClick:pe(b=>ze(l),["stop"])},null,8,["onClick"])])]),l.healthMessage?(m(),f("p",Ol,_(l.healthMessage),1)):S("",!0)],8,Ml))),128))]))])]),app:n(()=>[o("div",jl,[e[50]||(e[50]=o("div",{class:"mb-6"},[o("h3",{class:"text-lg font-semibold mb-1"}," Notification Preferences "),o("p",{class:"text-sm text-dimmed"}," Choose which resource changes show toast notifications. ")],-1)),t(Z)?(m(),f("div",zl,[(m(),f(x,null,T(5,l=>a(M,{key:l,class:"h-12 w-full"})),64))])):(m(),f("div",Kl,[(m(),f(x,null,T(Ce,l=>o("div",{key:l.key,class:"border border-default rounded-lg"},[o("div",Rl,[o("div",ql,[a(v,{variant:"ghost",size:"xs",icon:t(F).has(l.key)?"i-lucide-chevron-down":"i-lucide-chevron-right",onClick:b=>$e(l.key)},null,8,["icon","onClick"]),a(A,{name:l.icon,class:"size-5 text-dimmed"},null,8,["name"]),o("span",Gl,_(l.label),1)]),a(oe,{"model-value":t(k)[l.key]?.enabled??!1,"onUpdate:modelValue":b=>Ee(l.key,b)},null,8,["model-value","onUpdate:modelValue"])]),t(F).has(l.key)&&t(k)[l.key]?.enabled?(m(),f("div",Yl,[(m(!0),f(x,null,T(l.subtypes,b=>(m(),f("div",{key:b,class:"flex items-center justify-between pl-11"},[o("span",Wl,_(b),1),a(oe,{"model-value":t(k)[l.key]?.subtypes?.[b]!==!1,size:"sm","onUpdate:modelValue":ie=>De(l.key,b,ie)},null,8,["model-value","onUpdate:modelValue"])]))),128))])):S("",!0)])),64))])),o("div",Jl,[a(v,{loading:t(ee),onClick:Ie},{default:n(()=>[...e[49]||(e[49]=[p(" Save Preferences ",-1)])]),_:1},8,["loading"])])])]),_:1})]),_:1})]),a(z,{open:t(C),"onUpdate:open":e[10]||(e[10]=l=>K(C)?C.value=l:null)},{header:n(()=>[o("h3",Zl,_(t(h)?"Edit Secret":"Add Secret"),1)]),body:n(()=>[a(q,{state:t(g),class:"space-y-4",onSubmit:Ve},{default:n(()=>[a(r,{label:"Key",name:"key",hint:t(h)?"":"SCREAMING_SNAKE_CASE"},{default:n(()=>[a(c,{modelValue:t(g).key,"onUpdate:modelValue":e[6]||(e[6]=l=>t(g).key=l),disabled:!!t(h),placeholder:"MY_API_KEY",class:"w-full font-mono"},null,8,["modelValue","disabled"])]),_:1},8,["hint"]),a(r,{label:"Value",name:"value",hint:t(h)?"Leave empty to keep current value":""},{default:n(()=>[a(c,{modelValue:t(g).value,"onUpdate:modelValue":e[7]||(e[7]=l=>t(g).value=l),type:"password",placeholder:t(h)?"••••••••":"Secret value",class:"w-full"},null,8,["modelValue","placeholder"])]),_:1},8,["hint"]),a(r,{label:"Description",name:"description"},{default:n(()=>[a(c,{modelValue:t(g).description,"onUpdate:modelValue":e[8]||(e[8]=l=>t(g).description=l),placeholder:"Optional description",class:"w-full"},null,8,["modelValue"])]),_:1}),o("div",et,[a(v,{variant:"ghost",onClick:e[9]||(e[9]=l=>C.value=!1)},{default:n(()=>[...e[51]||(e[51]=[p(" Cancel ",-1)])]),_:1}),a(v,{type:"submit",loading:t(Q)},{default:n(()=>[p(_(t(h)?"Update":"Create"),1)]),_:1},8,["loading"])])]),_:1},8,["state"])]),_:1},8,["open"]),a(z,{open:t(I),"onUpdate:open":e[12]||(e[12]=l=>K(I)?I.value=l:null)},{header:n(()=>[...e[52]||(e[52]=[o("h3",{class:"text-lg font-semibold"}," Delete Secret ",-1)])]),body:n(()=>[o("p",lt,[e[53]||(e[53]=p(" Are you sure you want to delete ",-1)),o("code",tt,_(t(L)?.key),1),e[54]||(e[54]=p("? ",-1))]),e[57]||(e[57]=o("p",{class:"text-sm text-dimmed"}," This action cannot be undone. Any skills using this secret will stop working. ",-1)),o("div",at,[a(v,{variant:"ghost",onClick:e[11]||(e[11]=l=>I.value=!1)},{default:n(()=>[...e[55]||(e[55]=[p(" Cancel ",-1)])]),_:1}),a(v,{color:"error",onClick:Pe},{default:n(()=>[...e[56]||(e[56]=[p(" Delete ",-1)])]),_:1})])]),_:1},8,["open"]),a(z,{open:t($),"onUpdate:open":e[16]||(e[16]=l=>K($)?$.value=l:null)},{header:n(()=>[...e[58]||(e[58]=[o("h3",{class:"text-lg font-semibold"}," Add Integration ",-1)])]),body:n(()=>[o("div",st,[a(r,{label:"Platform",name:"platform"},{default:n(()=>[a(ne,{modelValue:t(V).platform,"onUpdate:modelValue":e[13]||(e[13]=l=>t(V).platform=l),items:R,"value-key":"value",class:"w-full"},null,8,["modelValue"])]),_:1}),a(r,{label:"Name",name:"name"},{default:n(()=>[a(c,{modelValue:t(V).name,"onUpdate:modelValue":e[14]||(e[14]=l=>t(V).name=l),placeholder:Be[t(V).platform],class:"w-full"},null,8,["modelValue","placeholder"])]),_:1}),o("div",ot,[a(v,{variant:"ghost",onClick:e[15]||(e[15]=l=>$.value=!1)},{default:n(()=>[...e[59]||(e[59]=[p(" Cancel ",-1)])]),_:1}),a(v,{loading:t(ae),onClick:Oe},{default:n(()=>[...e[60]||(e[60]=[p(" Create ",-1)])]),_:1},8,["loading"])])])]),_:1},8,["open"]),a(z,{open:t(E),"onUpdate:open":e[18]||(e[18]=l=>K(E)?E.value=l:null)},{header:n(()=>[...e[61]||(e[61]=[o("h3",{class:"text-lg font-semibold"}," Delete Integration ",-1)])]),body:n(()=>[o("p",nt,[e[62]||(e[62]=p(" Are you sure you want to delete ",-1)),o("strong",null,_(t(O)?.name),1),e[63]||(e[63]=p("? ",-1))]),e[66]||(e[66]=o("p",{class:"text-sm text-dimmed"}," This will remove the integration and all associated message history. ",-1)),o("div",it,[a(v,{variant:"ghost",onClick:e[17]||(e[17]=l=>E.value=!1)},{default:n(()=>[...e[64]||(e[64]=[p(" Cancel ",-1)])]),_:1}),a(v,{color:"error",onClick:Ke},{default:n(()=>[...e[65]||(e[65]=[p(" Delete ",-1)])]),_:1})])]),_:1},8,["open"]),a(z,{open:t(D),"onUpdate:open":e[35]||(e[35]=l=>K(D)?D.value=l:null)},{header:n(()=>[o("div",dt,[a(A,{name:R.find(l=>l.value===t(w)?.platform)?.icon||"i-lucide-plug",class:"size-5"},null,8,["name"]),o("h3",rt," Configure "+_(t(w)?.name),1)])]),body:n(()=>[o("div",ut,[t(w)&&ue[t(w).platform]?(m(),f("div",mt,[a(A,{name:"i-lucide-info",class:"size-4 mt-0.5 text-dimmed shrink-0"}),o("span",ct,[e[67]||(e[67]=p(" Requires secret ",-1)),o("code",pt,_(ue[t(w).platform]),1),e[68]||(e[68]=p(" in the Secrets tab. ",-1))])])):S("",!0),a(r,{label:"Name",name:"name"},{default:n(()=>[a(c,{modelValue:t(s).name,"onUpdate:modelValue":e[19]||(e[19]=l=>t(s).name=l),placeholder:"Integration name",class:"w-full"},null,8,["modelValue"])]),_:1}),t(w)?.platform==="telegram"?(m(),f(x,{key:1},[a(r,{label:"Bot Username",name:"botUsername",hint:"Without the @ prefix"},{default:n(()=>[a(c,{modelValue:t(s).botUsername,"onUpdate:modelValue":e[20]||(e[20]=l=>t(s).botUsername=l),placeholder:"my_bot",class:"w-full"},null,8,["modelValue"])]),_:1}),a(r,{label:"Allowed Chat IDs",name:"allowedChatIds",hint:"Comma-separated. Leave empty for all."},{default:n(()=>[a(c,{modelValue:t(s).allowedChatIds,"onUpdate:modelValue":e[21]||(e[21]=l=>t(s).allowedChatIds=l),placeholder:"123456, -100789",class:"w-full"},null,8,["modelValue"])]),_:1})],64)):S("",!0),t(w)?.platform==="discord"?(m(),f(x,{key:2},[a(r,{label:"Listen Mode",name:"listenMode"},{default:n(()=>[a(ne,{modelValue:t(s).listenMode,"onUpdate:modelValue":e[22]||(e[22]=l=>t(s).listenMode=l),items:Ne,"value-key":"value",class:"w-full"},null,8,["modelValue"])]),_:1}),a(r,{label:"Server ID",name:"guildId",hint:"Optional. Limit to one server."},{default:n(()=>[a(c,{modelValue:t(s).guildId,"onUpdate:modelValue":e[23]||(e[23]=l=>t(s).guildId=l),placeholder:"Discord server ID",class:"w-full"},null,8,["modelValue"])]),_:1}),a(r,{label:"Channel ID",name:"channelId",hint:"Optional. Limit to one channel (for 'all' mode)."},{default:n(()=>[a(c,{modelValue:t(s).channelId,"onUpdate:modelValue":e[24]||(e[24]=l=>t(s).channelId=l),placeholder:"Discord channel ID",class:"w-full"},null,8,["modelValue"])]),_:1})],64)):S("",!0),t(w)?.platform==="imessage"?(m(),f(x,{key:3},[a(r,{label:"Strategy",name:"strategy"},{default:n(()=>[a(ne,{modelValue:t(s).strategy,"onUpdate:modelValue":e[25]||(e[25]=l=>t(s).strategy=l),items:Ae,"value-key":"value",class:"w-full"},null,8,["modelValue"])]),_:1}),t(s).strategy==="bluebubbles"?(m(),ce(r,{key:0,label:"BlueBubbles URL",name:"blueBubblesUrl"},{default:n(()=>[a(c,{modelValue:t(s).blueBubblesUrl,"onUpdate:modelValue":e[26]||(e[26]=l=>t(s).blueBubblesUrl=l),placeholder:"http://192.168.1.100:1234",class:"w-full"},null,8,["modelValue"])]),_:1})):S("",!0),a(r,{label:"Allowed Numbers",name:"allowedNumbers",hint:"Comma-separated. Leave empty for all."},{default:n(()=>[a(c,{modelValue:t(s).allowedNumbers,"onUpdate:modelValue":e[27]||(e[27]=l=>t(s).allowedNumbers=l),placeholder:"+15551234567, +15559876543",class:"w-full"},null,8,["modelValue"])]),_:1})],64)):S("",!0),t(w)?.platform==="google"?(m(),f(x,{key:4},[a(r,{label:"Enabled Services",name:"enabledServices"},{default:n(()=>[o("div",ft,[(m(),f(x,null,T(Me,l=>o("label",{key:l.value,class:"flex items-center gap-2 cursor-pointer"},[o("input",{type:"checkbox",checked:t(s).enabledServices.includes(l.value),class:"rounded",onChange:b=>t(s).enabledServices.includes(l.value)?t(s).enabledServices=t(s).enabledServices.filter(ie=>ie!==l.value):t(s).enabledServices.push(l.value)},null,40,gt),o("span",vt,_(l.label),1)])),64))])]),_:1}),a(r,{label:"Google Account",name:"account",hint:"Email used with gogcli"},{default:n(()=>[a(c,{modelValue:t(s).account,"onUpdate:modelValue":e[28]||(e[28]=l=>t(s).account=l),placeholder:"user@gmail.com",class:"w-full"},null,8,["modelValue"])]),_:1})],64)):S("",!0),t(w)?.platform==="email"?(m(),f(x,{key:5},[a(r,{label:"Email Address",name:"emailAddress"},{default:n(()=>[a(c,{modelValue:t(s).emailAddress,"onUpdate:modelValue":e[29]||(e[29]=l=>t(s).emailAddress=l),placeholder:"user@example.com",class:"w-full"},null,8,["modelValue"])]),_:1}),o("div",bt,[a(r,{label:"IMAP Host",name:"imapHost"},{default:n(()=>[a(c,{modelValue:t(s).imapHost,"onUpdate:modelValue":e[30]||(e[30]=l=>t(s).imapHost=l),placeholder:"imap.example.com",class:"w-full"},null,8,["modelValue"])]),_:1}),a(r,{label:"IMAP Port",name:"imapPort"},{default:n(()=>[a(c,{modelValue:t(s).imapPort,"onUpdate:modelValue":e[31]||(e[31]=l=>t(s).imapPort=l),placeholder:"993",class:"w-full"},null,8,["modelValue"])]),_:1})]),o("div",yt,[a(r,{label:"SMTP Host",name:"smtpHost"},{default:n(()=>[a(c,{modelValue:t(s).smtpHost,"onUpdate:modelValue":e[32]||(e[32]=l=>t(s).smtpHost=l),placeholder:"smtp.example.com",class:"w-full"},null,8,["modelValue"])]),_:1}),a(r,{label:"SMTP Port",name:"smtpPort"},{default:n(()=>[a(c,{modelValue:t(s).smtpPort,"onUpdate:modelValue":e[33]||(e[33]=l=>t(s).smtpPort=l),placeholder:"587",class:"w-full"},null,8,["modelValue"])]),_:1})])],64)):S("",!0),o("div",wt,[a(v,{variant:"ghost",onClick:e[34]||(e[34]=l=>D.value=!1)},{default:n(()=>[...e[69]||(e[69]=[p(" Cancel ",-1)])]),_:1}),a(v,{loading:t(se),onClick:Le},{default:n(()=>[...e[70]||(e[70]=[p(" Save ",-1)])]),_:1},8,["loading"])])])]),_:1},8,["open"])]),_:1})}}});export{oa as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./njnzCNrH.js";const s=globalThis.setInterval;export{s};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{_ as K}from"./C24so3m7.js";import{a as D,e as v,c as M,G as c,R as a,ab as g,a9 as b,Q as k,T as P,C as h,ae as B,S as V,aa as J,_ as H,U as R,ai as W,aj as L,bE as Q,bF as X,al as Y,k as Z,W as ee,r as S}from"./njnzCNrH.js";import{_ as te}from"./yJ9vRvHj.js";import{s as ne}from"./DmcMCO8x.js";const se={class:"border border-default rounded-lg my-2 overflow-hidden"},ae={class:"font-mono text-xs"},oe=D({__name:"ToolCallBlock",props:{toolName:{},result:{},isError:{type:Boolean},pending:{type:Boolean}},setup(t){const r=t,i=v(!1),m={Read:"i-lucide-file-text",Edit:"i-lucide-pencil",Write:"i-lucide-file-plus",Bash:"i-lucide-terminal",Glob:"i-lucide-search",Grep:"i-lucide-text-search",Task:"i-lucide-git-branch",WebFetch:"i-lucide-globe",WebSearch:"i-lucide-search"},o=M(()=>m[r.toolName]||"i-lucide-wrench"),s=M(()=>r.result?r.result.length>500?r.result.slice(0,500)+"...":r.result:"");return(u,l)=>{const y=H,U=te;return a(),c("div",se,[g("button",{class:"flex items-center gap-2 w-full px-3 py-2 text-sm text-muted hover:bg-elevated/50 transition-colors",onClick:l[0]||(l[0]=w=>i.value=!h(i))},[t.pending?(a(),k(y,{key:0,name:"i-lucide-loader-2",class:"size-4 animate-spin text-primary"})):(a(),k(y,{key:1,name:h(o),class:"size-4"},null,8,["name"])),g("span",ae,B(t.toolName),1),t.isError?(a(),k(U,{key:2,color:"error",variant:"subtle",size:"xs"},{default:V(()=>[...l[1]||(l[1]=[J(" error ",-1)])]),_:1})):t.pending?(a(),k(U,{key:3,color:"warning",variant:"subtle",size:"xs"},{default:V(()=>[...l[2]||(l[2]=[J(" running ",-1)])]),_:1})):b("",!0),P(y,{name:h(i)?"i-lucide-chevron-up":"i-lucide-chevron-down",class:"size-4 ms-auto"},null,8,["name"])]),h(i)&&t.result?(a(),c("div",{key:0,class:R(["border-t border-default px-3 py-2 text-xs font-mono bg-elevated/25 max-h-64 overflow-auto whitespace-pre-wrap",{"text-error":t.isError}])},B(h(s)),3)):b("",!0)])}}}),q=Object.assign(oe,{__name:"ChatToolCallBlock"}),re={key:0,class:"text-sm whitespace-pre-wrap"},le={key:0,class:"chat-prose prose prose-sm dark:prose-invert max-w-none"},ie={key:1,class:"flex items-center gap-3 mt-2 text-xs text-dimmed"},ce={key:0},ue={key:1},de=D({__name:"MessageBubble",props:{message:{}},setup(t){function r(m){return m.filter(o=>o.type==="text").map(o=>o.text).join(`
|
|
2
|
-
`)}function i(m){const o=[];for(const s of m)if(s.type==="tool_use")o.push({name:s.name,id:s.id});else if(s.type==="tool_result"){const u=o.find(l=>l.id===s.tool_use_id);u&&(u.result=s.content,u.isError=s.is_error)}return o}return(m,o)=>{const s=K,u=q;return a(),c("div",{class:R(["flex",t.message.role==="user"?"justify-end":"justify-start"])},[g("div",{class:R(["max-w-[85%] rounded-xl px-4 py-3",t.message.role==="user"?"bg-primary/5 text-highlighted":"bg-muted"])},[t.message.role==="user"?(a(),c("div",re,B(r(t.message.content)),1)):(a(),c(W,{key:1},[r(t.message.content)?(a(),c("div",le,[P(s,{value:r(t.message.content)},null,8,["value"])])):b("",!0),(a(!0),c(W,null,L(i(t.message.content),l=>(a(),k(u,{key:l.id,"tool-name":l.name,result:l.result,"is-error":l.isError},null,8,["tool-name","result","is-error"]))),128)),t.message.costUsd||t.message.durationMs?(a(),c("div",ie,[t.message.costUsd?(a(),c("span",ce,"$"+B(t.message.costUsd.toFixed(4)),1)):b("",!0),t.message.durationMs?(a(),c("span",ue,B((t.message.durationMs/1e3).toFixed(1))+"s",1)):b("",!0)])):b("",!0)],64))],2)],2)}}}),$e=Object.assign(de,{__name:"ChatMessageBubble"}),ve={class:"flex justify-start"},me={class:"max-w-[85%] rounded-xl px-4 py-3 bg-elevated/50"},fe={key:0,class:"chat-prose prose prose-sm dark:prose-invert max-w-none"},pe=D({__name:"StreamingMessage",props:{text:{},toolCalls:{}},setup(t){return(r,i)=>{const m=K,o=q;return a(),c("div",ve,[g("div",me,[t.text?(a(),c("div",fe,[P(m,{value:t.text},null,8,["value"])])):b("",!0),(a(!0),c(W,null,L(t.toolCalls,(s,u)=>(a(),k(o,{key:u,"tool-name":s.name,result:s.result,"is-error":s.isError,pending:!s.result},null,8,["tool-name","result","is-error","pending"]))),128)),i[0]||(i[0]=g("div",{class:"flex items-center gap-1.5 mt-2"},[g("span",{class:"size-2 rounded-full bg-primary animate-pulse"}),g("span",{class:"text-xs text-dimmed"},"Thinking...")],-1))])])}}}),Ie=Object.assign(pe,{__name:"ChatStreamingMessage"}),he={class:"border-t border-default p-4"},ge={key:0,class:"flex items-center gap-2 mb-2 text-xs text-dimmed"},xe={class:"flex items-start gap-2"},ye=["disabled"],_e=D({__name:"ChatInput",props:{sessionStatus:{},connectionStatus:{}},emits:["send","interrupt"],setup(t,{emit:r}){const i=t,m=r,o=v(""),s=v(null),u=M(()=>i.sessionStatus==="streaming"),l=M(()=>i.connectionStatus==="connected"),y=M(()=>l.value&&!u.value&&o.value.trim().length>0);function U(e){e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),w())}function w(){y.value&&(m("send",o.value.trim()),o.value="",Z(()=>{s.value&&(s.value.style.height="auto")}))}function O(e){const n=e.target;n.style.height="auto",n.style.height=Math.min(n.scrollHeight,200)+"px"}return(e,n)=>{const d=ee;return a(),c("div",he,[h(l)?b("",!0):(a(),c("div",ge,[n[2]||(n[2]=g("span",{class:"size-2 rounded-full bg-warning"},null,-1)),g("span",null,B(t.connectionStatus==="connecting"?"Connecting...":"Disconnected"),1)])),g("div",xe,[Q(g("textarea",{ref_key:"textareaRef",ref:s,"onUpdate:modelValue":n[0]||(n[0]=C=>Y(o)?o.value=C:null),disabled:!h(l)||h(u),placeholder:"Send a message...",rows:"1",class:"flex-1 resize-none bg-elevated/50 border border-default rounded-lg px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-primary/50 disabled:opacity-50",onKeydown:U,onInput:O},null,40,ye),[[X,h(o)]]),h(u)?(a(),k(d,{key:0,icon:"i-lucide-square",color:"error",variant:"soft",size:"md",onClick:n[1]||(n[1]=C=>m("interrupt"))})):(a(),k(d,{key:1,icon:"i-lucide-send",color:"primary",disabled:!h(y),size:"md",onClick:w},null,8,["disabled"]))])])}}}),Ue=Object.assign(_e,{__name:"ChatInput"});function j(){if(typeof crypto<"u"&&crypto.randomUUID)return crypto.randomUUID();const t=new Uint8Array(16);crypto.getRandomValues(t),t[6]=t[6]&15|64,t[8]=t[8]&63|128;const r=Array.from(t,i=>i.toString(16).padStart(2,"0")).join("");return`${r.slice(0,8)}-${r.slice(8,12)}-${r.slice(12,16)}-${r.slice(16,20)}-${r.slice(20)}`}const $=v("disconnected"),I=v("idle"),_=v(null),E=v([]),N=v([]),x=v(""),p=v({}),G=v(0),A=v(!1),f=v(null),z=v(0),be=5;let F=!1,T=null;function Ee(){function t(){return`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/_ws/chat`}function r(e){switch(e.type){case"chat:session_created":_.value=e.conversationId,w();break;case"chat:stream_start":I.value="streaming",x.value="",p.value={};break;case"chat:text_delta":x.value+=e.delta;break;case"chat:tool_start":p.value={...p.value,[e.toolUseId]:{name:e.toolName}};break;case"chat:tool_end":{const n=p.value[e.toolUseId];n&&(p.value={...p.value,[e.toolUseId]:{...n,result:e.result,isError:e.isError}});break}case"chat:stream_end":{I.value="idle",G.value=e.costUsd;const n=[];x.value&&n.push({type:"text",text:x.value});for(const[d,C]of Object.entries(p.value))n.push({type:"tool_use",id:d,name:C.name,input:{}}),C.result!==void 0&&n.push({type:"tool_result",tool_use_id:d,content:C.result,is_error:C.isError});n.length>0&&E.value.push({id:j(),conversationId:e.conversationId,role:"assistant",content:n,costUsd:e.costUsd,durationMs:e.durationMs,createdAt:new Date}),x.value="",p.value={},w();break}case"chat:error":I.value="error",console.error("[chat] Server error:",e.message);break;case"chat:interrupted":I.value="interrupted",x.value&&(E.value.push({id:j(),conversationId:e.conversationId,role:"assistant",content:[{type:"text",text:x.value}],createdAt:new Date}),x.value="",p.value={});break}}function i(){if(f.value?.readyState===WebSocket.OPEN||F&&$.value==="connecting")return;F=!0,$.value="connecting";const e=new WebSocket(t());f.value=e,e.onopen=()=>{$.value="connected",z.value=0,o()},e.onmessage=n=>{try{const d=JSON.parse(n.data);if(d.type==="chat:connected"||d.type==="pong")return;r(d)}catch(d){console.error("[chat] Failed to parse message:",d)}},e.onclose=()=>{$.value="disconnected",s(),z.value<be&&(z.value++,setTimeout(i,2e3*z.value))},e.onerror=()=>{$.value="error"}}function m(){s(),f.value&&(f.value.close(),f.value=null),$.value="disconnected",F=!1}function o(){T&&clearInterval(T),T=ne(()=>{f.value?.readyState===WebSocket.OPEN&&f.value.send(JSON.stringify({type:"ping"}))},3e4)}function s(){T&&(clearInterval(T),T=null)}function u(e){!f.value||f.value.readyState!==WebSocket.OPEN||(E.value.push({id:j(),conversationId:_.value||"",role:"user",content:[{type:"text",text:e}],createdAt:new Date}),f.value.send(JSON.stringify({type:"chat:send",message:e,conversationId:_.value})))}function l(){!f.value||!_.value||f.value.send(JSON.stringify({type:"chat:interrupt",conversationId:_.value}))}function y(){_.value=null,E.value=[],I.value="idle",x.value="",p.value={}}async function U(e){A.value=!0;try{const n=await $fetch(`/api/conversations/${e}`);_.value=e,E.value=(n.data.messages||[]).map(d=>({...d,createdAt:new Date(d.createdAt)})),I.value="idle"}catch(n){console.error("[chat] Failed to load conversation:",n)}finally{A.value=!1}}async function w(){try{const e=await $fetch("/api/conversations");N.value=e.data}catch(e){console.error("[chat] Failed to load conversations:",e)}}async function O(e){try{await $fetch(`/api/conversations/${e}`,{method:"DELETE"}),N.value=N.value.filter(n=>n.id!==e),_.value===e&&y()}catch(n){console.error("[chat] Failed to delete conversation:",n)}}return{connectionStatus:S($),sessionStatus:S(I),activeConversationId:S(_),messages:E,conversations:N,streamingText:S(x),streamingToolCalls:S(p),lastCostUsd:S(G),loading:S(A),connect:i,disconnect:m,sendMessage:u,interrupt:l,startNewConversation:y,loadConversation:U,loadConversations:w,deleteConversation:O}}export{$e as _,Ie as a,Ue as b,Ee as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"id":"410e449d-9fe8-43a0-ae07-80797693b9b8","timestamp":1771731269203,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}
|