pi-roundtable-web 0.26.1 → 0.26.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/README.md +10 -6
- package/dist/chunk-account-nhpd9j90.js +1 -0
- package/dist/chunk-action-menu-ec9jqtxq.js +1 -0
- package/dist/chunk-agent-d1xfrawq.js +1 -0
- package/dist/chunk-arranged-rooms-bga8yk2v.js +1 -0
- package/dist/{chunk-character-creator-bd426yjw.js → chunk-character-creator-k67f77w5.js} +1 -1
- package/dist/{chunk-codeeditor-ajhgd33t.js → chunk-codeeditor-jm2sm333.js} +2 -2
- package/dist/chunk-confirm-wc5xraev.js +1 -0
- package/dist/chunk-connectors-mhnw6d79.js +1 -0
- package/dist/chunk-conversations-yjyq4g1y.js +1 -0
- package/dist/{chunk-drag-peyb8t0k.js → chunk-drag-nyq52ck7.js} +1 -1
- package/dist/chunk-entry-red1597w.js +1 -0
- package/dist/chunk-folder-list-x56y26yq.js +1 -0
- package/dist/chunk-folds-3p7s2nvx.js +1 -0
- package/dist/{chunk-gate-hc7dd0fx.js → chunk-gate-h41bv4y9.js} +1 -1
- package/dist/chunk-group-scene-7eb6jyev.js +1 -0
- package/dist/chunk-group-table-rca48kt0.js +1 -0
- package/dist/chunk-host-icons-x318gjqp.js +1 -0
- package/dist/chunk-host-picture-xswcakgy.js +1 -0
- package/dist/chunk-host-state-bpahvk54.js +1 -0
- package/dist/chunk-host-ui-tsbwwk38.js +1 -0
- package/dist/{chunk-index-m7fvw92f.js → chunk-index-029209sy.js} +2 -2
- package/dist/chunk-index-066vzexw.js +2 -0
- package/dist/chunk-index-0h4h76kw.js +2 -0
- package/dist/{chunk-index-eg55mqqe.js → chunk-index-0n6ja7my.js} +1 -1
- package/dist/{chunk-index-gyary7np.js → chunk-index-0xj30mzw.js} +11 -11
- package/dist/{chunk-index-pk1yxkv4.js → chunk-index-1f0j335v.js} +2 -2
- package/dist/chunk-index-2f5nfekb.js +8 -0
- package/dist/chunk-index-31ays46f.js +2 -0
- package/dist/{chunk-index-zrvg23jd.js → chunk-index-43k1rjmx.js} +2 -2
- package/dist/chunk-index-4gk88a0x.js +4 -0
- package/dist/chunk-index-4jf4jvfd.css +1 -0
- package/dist/chunk-index-4mf29sbx.js +2 -0
- package/dist/chunk-index-51n20yhb.js +2 -0
- package/dist/{chunk-index-cvbdf2ca.js → chunk-index-6tpr6r6d.js} +2 -2
- package/dist/{chunk-index-w31c4yjv.js → chunk-index-7bbqtdce.js} +1 -1
- package/dist/chunk-index-84v7j6vh.js +50 -0
- package/dist/chunk-index-8f9jer8r.js +2 -0
- package/dist/chunk-index-91z3g774.js +1 -0
- package/dist/{chunk-index-yzsgsvnp.js → chunk-index-934zgd18.js} +2 -2
- package/dist/{chunk-index-vcyzwtk2.js → chunk-index-9nents16.js} +2 -2
- package/dist/chunk-index-9w0sar6s.js +2 -0
- package/dist/chunk-index-a768zmp6.js +2 -0
- package/dist/{chunk-index-w2j3njb6.js → chunk-index-b7jjca66.js} +2 -2
- package/dist/chunk-index-c5x70d9g.js +2 -0
- package/dist/chunk-index-cmxs5y22.js +42 -0
- package/dist/chunk-index-cwc1vvpw.js +2 -0
- package/dist/chunk-index-d85x96q0.js +2 -0
- package/dist/chunk-index-datrrs6b.js +2 -0
- package/dist/chunk-index-dep2e3f3.js +2 -0
- package/dist/{chunk-index-rnxj3z8k.js → chunk-index-dtste2ed.js} +2 -2
- package/dist/{chunk-index-czdketze.js → chunk-index-ewj52be9.js} +2 -2
- package/dist/{chunk-index-2yebd9tb.js → chunk-index-f3b5nch2.js} +4 -4
- package/dist/{chunk-index-rmxbdmn2.js → chunk-index-frwa2fmc.js} +2 -2
- package/dist/chunk-index-grkczq2c.js +2 -0
- package/dist/chunk-index-gzvkpe3e.js +2 -0
- package/dist/{chunk-index-73gh7kgr.js → chunk-index-kfv996qe.js} +3 -3
- package/dist/{chunk-index-5yzfrf7b.js → chunk-index-kw85ajap.js} +3 -3
- package/dist/chunk-index-satam151.js +2 -0
- package/dist/{chunk-index-dt9775ka.js → chunk-index-smw1n2pt.js} +5 -5
- package/dist/chunk-index-th43f690.js +2 -0
- package/dist/chunk-index-ths2hxpe.js +1 -0
- package/dist/{chunk-index-k7t14rwa.js → chunk-index-tmx30r1w.js} +2 -2
- package/dist/{chunk-index-snzzfhk3.js → chunk-index-y00wke93.js} +2 -2
- package/dist/chunk-index-y4sqmenv.js +2 -0
- package/dist/{chunk-index-z9x4cnzf.js → chunk-index-yrhbhmxz.js} +2 -2
- package/dist/chunk-index-zd76pr2k.js +2 -0
- package/dist/chunk-lang-css-fa7c0zfj.js +1 -0
- package/dist/{chunk-lang-dockerfile-k728ewsf.js → chunk-lang-dockerfile-46rk929v.js} +1 -1
- package/dist/{chunk-lang-go-wjwgay4v.js → chunk-lang-go-qb0qdpg7.js} +3 -3
- package/dist/chunk-lang-html-47mf2y0v.js +1 -0
- package/dist/chunk-lang-javascript-d32qrvxz.js +1 -0
- package/dist/{chunk-lang-json-7gd89mvs.js → chunk-lang-json-1q4fp694.js} +1 -1
- package/dist/{chunk-lang-markdown-b6qbe8bt.js → chunk-lang-markdown-5w7t28wa.js} +5 -5
- package/dist/{chunk-lang-python-3v56y31b.js → chunk-lang-python-3dq0p4rf.js} +2 -2
- package/dist/{chunk-lang-rust-kh0z74d1.js → chunk-lang-rust-70pa0agr.js} +1 -1
- package/dist/{chunk-lang-shell-9zv0zvbx.js → chunk-lang-shell-4pxt7hf4.js} +1 -1
- package/dist/{chunk-lang-sql-yw6bf3t7.js → chunk-lang-sql-kgcbh2a9.js} +2 -2
- package/dist/{chunk-lang-toml-tg1r96nq.js → chunk-lang-toml-99t95pab.js} +1 -1
- package/dist/chunk-lang-typescript-4k1d8z7s.js +1 -0
- package/dist/{chunk-lang-xml-ev1mndd4.js → chunk-lang-xml-mnbv9yfa.js} +1 -1
- package/dist/{chunk-lang-yaml-fz5qpb3r.js → chunk-lang-yaml-2by9g1dy.js} +1 -1
- package/dist/chunk-layout-actions-cgghzj1w.js +1 -0
- package/dist/chunk-menu-items-24cfwawa.js +2 -0
- package/dist/chunk-mode-toggle-v4baz3r1.js +1 -0
- package/dist/{chunk-note-row-kd0fy7ee.js → chunk-note-row-72n6cqyk.js} +2 -2
- package/dist/chunk-notes-83s3tsey.js +1 -0
- package/dist/chunk-notice-bell-a4ty5h1p.js +1 -0
- package/dist/chunk-notices-evny44be.js +1 -0
- package/dist/chunk-onboarding-q1avjbrx.js +1 -0
- package/dist/chunk-overview-42h45ehd.js +1 -0
- package/dist/chunk-palette-e44qepmh.js +1 -0
- package/dist/chunk-placement-items-v466t0sv.js +1 -0
- package/dist/chunk-profile-bqcgkgk4.js +1 -0
- package/dist/chunk-prompt-history-hgbtcn4b.js +1 -0
- package/dist/chunk-prompts-czs8y6r1.js +1 -0
- package/dist/chunk-room-confirms-h8cdj3ng.js +1 -0
- package/dist/chunk-room-menu-7s0feajw.js +1 -0
- package/dist/chunk-rooms-menu-button-gawqvpsr.js +1 -0
- package/dist/{chunk-schedules-rw57nr0m.js → chunk-schedules-zba7krac.js} +1 -1
- package/dist/{chunk-seat-menu-ys5v9abz.js → chunk-seat-menu-ca5p4e9q.js} +1 -1
- package/dist/chunk-sheet-hosts-ssbz6hf2.js +1 -0
- package/dist/chunk-skill-editor-n0y9pd90.js +8 -0
- package/dist/chunk-skills-ea4vb2s4.js +1 -0
- package/dist/chunk-switcher-list-pj5csqr9.js +1 -0
- package/dist/{chunk-tab-dot-r6brdbmw.js → chunk-tab-dot-4tkpxqeh.js} +1 -1
- package/dist/chunk-table-j8nmtdnn.js +1 -0
- package/dist/chunk-table-seats-qeytqe0m.js +1 -0
- package/dist/chunk-table2d-18y029k9.js +1 -0
- package/dist/chunk-table3d-q2s31ae0.js +4220 -0
- package/dist/chunk-thread-actions-w3eadnh7.js +1 -0
- package/dist/chunk-thread-cards-fbpky3c9.js +1 -0
- package/dist/chunk-thread-list-pghe84be.js +1 -0
- package/dist/chunk-transcript-eqzxgqys.js +1 -0
- package/dist/chunk-where-ygyr4jdj.js +1 -0
- package/dist/chunk-workspace-h0p32ygy.js +578 -0
- package/dist/chunk-zh-tw-k6xx1hp2.js +1 -0
- package/dist/index.html +1 -2
- package/dist/sw.js +1 -1
- package/package.json +2 -2
- package/src/api-types.ts +5 -0
- package/src/app/api-http.ts +1 -1
- package/src/app/routes.ts +53 -1
- package/src/app/surface-threads.ts +1 -1
- package/src/app/surface.ts +2 -1
- package/src/app/threads.ts +20 -0
- package/src/auth/authenticator.ts +8 -1
- package/src/auth/sessions.ts +10 -3
- package/src/i18n/zh-tw.ts +96 -79
- package/src/options.ts +1 -1
- package/src/web-plugin.ts +12 -1
- package/dist/chunk-account-ghq105t4.js +0 -1
- package/dist/chunk-action-menu-me0g9qsc.js +0 -1
- package/dist/chunk-agent-rdv7ekrt.js +0 -1
- package/dist/chunk-arranged-rooms-81rqhx9x.js +0 -1
- package/dist/chunk-confirm-p3mts8mx.js +0 -1
- package/dist/chunk-connectors-bkv3xn83.js +0 -1
- package/dist/chunk-conversations-0e0vbxwr.js +0 -1
- package/dist/chunk-entry-mv7q8br0.js +0 -1
- package/dist/chunk-folder-list-era3tksh.js +0 -1
- package/dist/chunk-folds-hvws0bd5.js +0 -1
- package/dist/chunk-group-scene-dkbpmbh5.js +0 -1
- package/dist/chunk-group-table-fqmxgdfw.js +0 -1
- package/dist/chunk-host-icons-4xde9ntk.js +0 -1
- package/dist/chunk-host-picture-014yzk20.js +0 -1
- package/dist/chunk-host-state-t56e5sdy.js +0 -1
- package/dist/chunk-host-ui-p1zy9nmp.js +0 -1
- package/dist/chunk-index-0fmmvgee.js +0 -2
- package/dist/chunk-index-0xh24y25.js +0 -2
- package/dist/chunk-index-4t0r3t3b.js +0 -2
- package/dist/chunk-index-6twb7ccd.js +0 -2
- package/dist/chunk-index-7xffskfa.js +0 -8
- package/dist/chunk-index-aqw7cy5j.js +0 -1
- package/dist/chunk-index-b6ca02e8.js +0 -2
- package/dist/chunk-index-b8nvhcx5.js +0 -2
- package/dist/chunk-index-gr6e0hse.js +0 -2
- package/dist/chunk-index-j214tczc.js +0 -1
- package/dist/chunk-index-jd6632ef.js +0 -2
- package/dist/chunk-index-jw7dtshr.js +0 -2
- package/dist/chunk-index-kwcx62wb.js +0 -4
- package/dist/chunk-index-mmg788a1.js +0 -2
- package/dist/chunk-index-mq0dacwr.js +0 -2
- package/dist/chunk-index-p53ak25v.js +0 -2
- package/dist/chunk-index-rbcz9jd4.css +0 -1
- package/dist/chunk-index-v3bmr0nw.js +0 -2
- package/dist/chunk-index-wrm8w165.js +0 -2
- package/dist/chunk-index-xh0mg9cw.js +0 -2
- package/dist/chunk-index-ybtvvx85.js +0 -2
- package/dist/chunk-index-zynq0b0w.js +0 -50
- package/dist/chunk-lang-css-88v3hp3d.js +0 -1
- package/dist/chunk-lang-html-07d47es4.js +0 -1
- package/dist/chunk-lang-javascript-fmhhgzwd.js +0 -1
- package/dist/chunk-lang-typescript-etjjvr2g.js +0 -1
- package/dist/chunk-layout-actions-48ecgtkg.js +0 -1
- package/dist/chunk-menu-items-1epy3h0t.js +0 -2
- package/dist/chunk-mode-toggle-fxmfxsa4.js +0 -1
- package/dist/chunk-notes-yb8f057c.js +0 -1
- package/dist/chunk-notice-bell-wr4f1rph.js +0 -1
- package/dist/chunk-notices-x07da5bb.js +0 -1
- package/dist/chunk-onboarding-csrkbh9z.js +0 -1
- package/dist/chunk-overview-avc2d30t.js +0 -1
- package/dist/chunk-palette-9nhp95bz.js +0 -1
- package/dist/chunk-placement-items-q694dpgk.js +0 -1
- package/dist/chunk-profile-6qemf3m7.js +0 -1
- package/dist/chunk-prompt-history-7enzp2p3.js +0 -1
- package/dist/chunk-prompts-nv6mrn0q.js +0 -1
- package/dist/chunk-room-confirms-zz7n61y7.js +0 -1
- package/dist/chunk-room-menu-rr6nzap1.js +0 -1
- package/dist/chunk-rooms-menu-button-zbtwj47d.js +0 -1
- package/dist/chunk-sheet-hosts-jhvaacst.js +0 -1
- package/dist/chunk-skill-editor-sz8an8qr.js +0 -8
- package/dist/chunk-skills-tnr1h16h.js +0 -1
- package/dist/chunk-switcher-list-17enhrse.js +0 -1
- package/dist/chunk-table-r12cja6p.js +0 -1
- package/dist/chunk-table-seats-g3t392zz.js +0 -1
- package/dist/chunk-table2d-p3ezsdcj.js +0 -1
- package/dist/chunk-table3d-4x2n2b00.js +0 -4220
- package/dist/chunk-thread-actions-qc6ezkha.js +0 -1
- package/dist/chunk-transcript-n2s6dher.js +0 -1
- package/dist/chunk-where-f3scdydc.js +0 -1
- package/dist/chunk-workspace-xs023bxm.js +0 -1
- package/dist/chunk-zh-tw-efvmk3fd.js +0 -1
package/src/i18n/zh-tw.ts
CHANGED
|
@@ -34,7 +34,7 @@ export const ZH_TW: Readonly<Record<string, string>> = {
|
|
|
34
34
|
"binary file": "二進位檔",
|
|
35
35
|
"too large": "檔案太大",
|
|
36
36
|
"not UTF-8": "不是 UTF-8",
|
|
37
|
-
"
|
|
37
|
+
"Knights' workspace": "騎士工作區",
|
|
38
38
|
Scratch: "暫存區",
|
|
39
39
|
Path: "路徑",
|
|
40
40
|
"This folder is empty": "這個資料夾是空的",
|
|
@@ -59,7 +59,7 @@ export const ZH_TW: Readonly<Record<string, string>> = {
|
|
|
59
59
|
"Read only: {reason}": "唯讀:{reason}",
|
|
60
60
|
"File menu": "檔案選單",
|
|
61
61
|
"This file is gone": "這個檔案已經不見了",
|
|
62
|
-
"A
|
|
62
|
+
"A knight is changing this file": "騎士正在改這個檔案",
|
|
63
63
|
"Reload (discard my edits)": "重新載入(放棄我的修改)",
|
|
64
64
|
"This file is too large to show here.": "這個檔案太大,無法在這裡顯示。",
|
|
65
65
|
"This file is not text, so it cannot be shown here.":
|
|
@@ -82,7 +82,7 @@ export const ZH_TW: Readonly<Record<string, string>> = {
|
|
|
82
82
|
"Copy my text": "複製我的內容",
|
|
83
83
|
"Save mine as a new file": "存成新檔案",
|
|
84
84
|
"Save mine anyway": "仍用我的版本覆蓋",
|
|
85
|
-
"Replace the
|
|
85
|
+
"Replace the knight's changes?": "要蓋掉騎士的修改嗎?",
|
|
86
86
|
"The file has been changed since you opened it. Saving yours writes over those changes.":
|
|
87
87
|
"你開啟後,這個檔案又被改過。存下你的版本會蓋掉那些修改。",
|
|
88
88
|
"Unsaved changes, leave?": "還沒存檔,要離開嗎?",
|
|
@@ -257,7 +257,6 @@ export const ZH_TW: Readonly<Record<string, string>> = {
|
|
|
257
257
|
"Yolo mode on": "Yolo 模式已開啟",
|
|
258
258
|
|
|
259
259
|
// 命令面板
|
|
260
|
-
Agent: "夥伴",
|
|
261
260
|
"Find a room or page": "尋找聊天室或頁面",
|
|
262
261
|
"Nothing matches.": "沒有符合的項目。",
|
|
263
262
|
Page: "頁面",
|
|
@@ -280,19 +279,19 @@ export const ZH_TW: Readonly<Record<string, string>> = {
|
|
|
280
279
|
"讓回合可超過時間上限繼續進行,最多到主機設定的上限。提問仍會等你回應。",
|
|
281
280
|
"Long-running mode": "長時間執行模式",
|
|
282
281
|
"Name, prompt, model and picture": "名稱、提示詞、模型與圖像",
|
|
283
|
-
"Reply to the
|
|
282
|
+
"Reply to the knight that started this thread.": "回覆開啟這個討論串的騎士。",
|
|
284
283
|
"Yolo mode": "Yolo 模式",
|
|
285
|
-
"No
|
|
284
|
+
"No knights are seated yet.": "圓桌上還沒有騎士入座。",
|
|
286
285
|
"Who's at the table": "誰上桌",
|
|
287
286
|
"Off the table": "離席中",
|
|
288
287
|
"Leave the table": "離席",
|
|
289
288
|
"{name} left the table": "{name}已離席",
|
|
290
289
|
"The table is empty": "圓桌空了",
|
|
291
290
|
"There are no rooms to seat yet.": "還沒有可以入座的聊天室。",
|
|
292
|
-
"Every
|
|
293
|
-
"
|
|
294
|
-
"
|
|
295
|
-
"
|
|
291
|
+
"Every knight has left the table. Choose who sits down.":
|
|
292
|
+
"所有騎士都離席了。選擇誰要上桌。",
|
|
293
|
+
"A knight who leaves the table is muted: its room stops pushing to you. A card that waits for you is always pushed.":
|
|
294
|
+
"離席的騎士會被靜音:它的聊天室不再推播給你。等你回應的卡片仍會推播。",
|
|
296
295
|
|
|
297
296
|
// 通知
|
|
298
297
|
"A file is no longer available. Attach it again.":
|
|
@@ -328,11 +327,13 @@ export const ZH_TW: Readonly<Record<string, string>> = {
|
|
|
328
327
|
Today: "今天",
|
|
329
328
|
Yesterday: "昨天",
|
|
330
329
|
|
|
331
|
-
//
|
|
330
|
+
// 騎士
|
|
332
331
|
"Class, colors and parts. The picture here, in the rooms and in Discord all follow it.":
|
|
333
332
|
"職業、配色與部件。這裡、聊天室與 Discord 的圖像都會跟著改變。",
|
|
334
|
-
|
|
335
|
-
"
|
|
333
|
+
Default: "預設",
|
|
334
|
+
"Default model": "預設模型",
|
|
335
|
+
"Default model ({current})": "預設模型({current})",
|
|
336
|
+
"Default model (server setting)": "預設模型(跟著伺服器設定)",
|
|
336
337
|
Look: "造型",
|
|
337
338
|
Name: "名稱",
|
|
338
339
|
Prompt: "提示詞",
|
|
@@ -350,8 +351,8 @@ export const ZH_TW: Readonly<Record<string, string>> = {
|
|
|
350
351
|
"Tool list": "工具清單",
|
|
351
352
|
Unreachable: "無法連線",
|
|
352
353
|
"Upstream gateways": "上游閘道",
|
|
353
|
-
"Upstream MCP gateways and virtual servers used by the
|
|
354
|
-
"
|
|
354
|
+
"Upstream MCP gateways and virtual servers used by the knights.":
|
|
355
|
+
"騎士使用的上游 MCP 閘道與虛擬伺服器。",
|
|
355
356
|
"Used by": "使用者",
|
|
356
357
|
"Virtual servers": "虛擬伺服器",
|
|
357
358
|
|
|
@@ -361,15 +362,15 @@ export const ZH_TW: Readonly<Record<string, string>> = {
|
|
|
361
362
|
"None stored.": "沒有儲存的內容。",
|
|
362
363
|
running: "進行中",
|
|
363
364
|
"Owner channels": "擁有者頻道",
|
|
364
|
-
"Direct messages and channels where the owner talks to
|
|
365
|
-
"
|
|
366
|
-
"
|
|
367
|
-
"The
|
|
365
|
+
"Direct messages and channels where the owner talks to a knight.":
|
|
366
|
+
"擁有者與騎士交談的私訊與頻道。",
|
|
367
|
+
"Bot server channels": "Bot 伺服器頻道",
|
|
368
|
+
"The bot server's one-to-one channels.": "Bot 伺服器的一對一頻道。",
|
|
368
369
|
"Group channels": "群組頻道",
|
|
369
|
-
"The
|
|
370
|
-
"Outside
|
|
371
|
-
"Conversations an
|
|
372
|
-
"Discord
|
|
370
|
+
"The bot server's group channels.": "Bot 伺服器的群組頻道。",
|
|
371
|
+
"Outside AI clients": "外部 AI 用戶端",
|
|
372
|
+
"Conversations an outside AI client holds over MCP.":
|
|
373
|
+
"Discord 以外的 AI 用戶端透過 MCP 進行的對話。",
|
|
373
374
|
"Plugin conversations": "外掛對話",
|
|
374
375
|
"Conversations a plugin runs, such as a web chat, as the host recorded them.":
|
|
375
376
|
"外掛(例如網頁聊天)進行的對話,內容為主機所記錄。",
|
|
@@ -398,28 +399,28 @@ export const ZH_TW: Readonly<Record<string, string>> = {
|
|
|
398
399
|
"Search (words separated by spaces)": "搜尋(以空格分隔關鍵字)",
|
|
399
400
|
"Search notes": "搜尋記憶",
|
|
400
401
|
Text: "內容",
|
|
401
|
-
"What
|
|
402
|
-
"
|
|
402
|
+
"What a knight remembers. A change applies from the next turn.":
|
|
403
|
+
"騎士記得的內容。變更會從下一個回合起生效。",
|
|
403
404
|
"Whose notes": "誰的記憶",
|
|
404
405
|
Core: "核心",
|
|
405
406
|
"Carried into every turn.": "每個回合都會帶入。",
|
|
406
407
|
Note: "備忘",
|
|
407
|
-
"Searched when
|
|
408
|
+
"Searched when a knight needs them.": "騎士需要時才會搜尋。",
|
|
408
409
|
Events: "事件",
|
|
409
410
|
"Carried into every turn until their date.": "到期日之前每個回合都會帶入。",
|
|
410
411
|
|
|
411
412
|
// 總覽
|
|
412
413
|
"(No messages)": "(沒有訊息)",
|
|
413
414
|
"{count} waiting": "{count} 項等待中",
|
|
414
|
-
"
|
|
415
|
-
"
|
|
416
|
-
"
|
|
415
|
+
"Knight and group status; starting over archives the conversation and preserves memory.":
|
|
416
|
+
"騎士與群組的狀態;重新開始會封存對話並保留記憶。",
|
|
417
|
+
"Bot server": "Bot 伺服器",
|
|
417
418
|
Context: "上下文",
|
|
418
419
|
"Conversation {size} · Archives {count}": "對話 {size} · 封存 {count} 筆",
|
|
419
420
|
"Conversations opened through remote MCP; after deletion the session ID cannot be resumed.":
|
|
420
421
|
"透過遠端 MCP 開啟的對話;刪除後無法再用該工作階段 ID 接續。",
|
|
421
|
-
"Direct messages and channels where you mention
|
|
422
|
-
"
|
|
422
|
+
"Direct messages and channels where you mention a knight. Start over archives; delete removes every archive permanently.":
|
|
423
|
+
"你在私訊與頻道中提及騎士的對話。重新開始會封存;刪除會永久移除所有封存。",
|
|
423
424
|
"Enabled by {name} at {time}": "由{name}於 {time} 啟用",
|
|
424
425
|
idle: "閒置",
|
|
425
426
|
"Just compacted (limit {limit})": "剛完成壓縮(上限 {limit})",
|
|
@@ -427,13 +428,13 @@ export const ZH_TW: Readonly<Record<string, string>> = {
|
|
|
427
428
|
"Members: {members} | Host: {host}": "成員:{members}|主持:{host}",
|
|
428
429
|
Model: "模型",
|
|
429
430
|
"My workspaces": "我的工作區",
|
|
430
|
-
"No
|
|
431
|
+
"No knights.": "沒有騎士。",
|
|
431
432
|
"No live conversation · Archives {count}":
|
|
432
433
|
"沒有進行中的對話 · 封存 {count} 筆",
|
|
433
|
-
"No outside
|
|
434
|
+
"No outside AI client conversations.": "沒有外部 AI 用戶端的對話。",
|
|
434
435
|
"No party channels.": "沒有派對頻道。",
|
|
435
436
|
"No workspaces.": "沒有工作區。",
|
|
436
|
-
"Outside
|
|
437
|
+
"Outside AI client conversations": "外部 AI 用戶端的對話",
|
|
437
438
|
"Party channels": "派對頻道",
|
|
438
439
|
"Replying in {name}'s channel": "正在{name}的頻道中回覆",
|
|
439
440
|
"Replying in another channel": "正在其他頻道中回覆",
|
|
@@ -452,8 +453,8 @@ export const ZH_TW: Readonly<Record<string, string>> = {
|
|
|
452
453
|
"Back to rooms": "回到聊天室列表",
|
|
453
454
|
"Every approval it makes is written into the conversation, and a banner stays up while yolo mode is on.":
|
|
454
455
|
"它做的每一次核准都會寫進對話,而且 Yolo 模式開啟期間會一直顯示橫幅。",
|
|
455
|
-
"In this room, the
|
|
456
|
-
"
|
|
456
|
+
"In this room, the knight's held actions are approved for you, without a card, as soon as they come up.":
|
|
457
|
+
"在這個聊天室中,騎士保留的操作一出現就會替你核准,不會顯示卡片。",
|
|
457
458
|
Latest: "最新",
|
|
458
459
|
"Load earlier messages": "載入更早的訊息",
|
|
459
460
|
"Loading…": "載入中…",
|
|
@@ -479,7 +480,7 @@ export const ZH_TW: Readonly<Record<string, string>> = {
|
|
|
479
480
|
"Working…": "處理中…",
|
|
480
481
|
|
|
481
482
|
// 長按與右鍵選單
|
|
482
|
-
"Edit
|
|
483
|
+
"Edit knight": "編輯騎士",
|
|
483
484
|
"Change look": "換外觀",
|
|
484
485
|
"Notifications are off": "通知已關閉",
|
|
485
486
|
"Notifications are on for {name}": "已開啟{name}的通知",
|
|
@@ -503,27 +504,27 @@ export const ZH_TW: Readonly<Record<string, string>> = {
|
|
|
503
504
|
"Quote reply": "引用回覆",
|
|
504
505
|
"Select text": "選取文字",
|
|
505
506
|
Share: "分享",
|
|
506
|
-
"
|
|
507
|
+
"Knight profile": "騎士資料",
|
|
507
508
|
"Copy details": "複製細節",
|
|
508
509
|
Download: "下載",
|
|
509
510
|
"Could not copy.": "無法複製。",
|
|
510
511
|
"Could not share.": "無法分享。",
|
|
511
512
|
|
|
512
513
|
// 新增、封存與群組
|
|
513
|
-
"New
|
|
514
|
+
"New knight": "新增騎士",
|
|
514
515
|
"New group": "新增群組",
|
|
515
516
|
Archived: "已封存",
|
|
516
517
|
Archive: "封存",
|
|
517
518
|
"Archive {name}": "封存{name}",
|
|
518
519
|
"Archive {name}?": "要封存{name}嗎?",
|
|
519
|
-
"Archive
|
|
520
|
+
"Archive knight": "封存騎士",
|
|
520
521
|
"Archive group": "封存群組",
|
|
521
522
|
"Archived {name}.": "已封存{name}。",
|
|
522
523
|
"Restored {name}.": "已還原{name}。",
|
|
523
524
|
"Deleted {name}.": "已刪除{name}。",
|
|
524
525
|
"Delete {name}?": "要刪除{name}嗎?",
|
|
525
526
|
"Made {name}.": "已建立{name}。",
|
|
526
|
-
"Make
|
|
527
|
+
"Make knight": "建立騎士",
|
|
527
528
|
"Make group": "建立群組",
|
|
528
529
|
"Making…": "建立中…",
|
|
529
530
|
"Permanent name": "固定名稱",
|
|
@@ -532,8 +533,8 @@ export const ZH_TW: Readonly<Record<string, string>> = {
|
|
|
532
533
|
"Its job, its sources, its limits and how it reports.":
|
|
533
534
|
"它的工作、資料來源、限制,以及怎麼回報。",
|
|
534
535
|
"Opening task": "開場任務",
|
|
535
|
-
"Optional. The
|
|
536
|
-
"
|
|
536
|
+
"Optional. The knight starts on it as soon as it is made.":
|
|
537
|
+
"可不填。騎士建立後會立刻開始做。",
|
|
537
538
|
"Your look": "你選的外觀",
|
|
538
539
|
"Suggested from its role": "依角色建議的外觀",
|
|
539
540
|
"Choose a look": "選擇外觀",
|
|
@@ -541,31 +542,31 @@ export const ZH_TW: Readonly<Record<string, string>> = {
|
|
|
541
542
|
"Edit group": "編輯群組",
|
|
542
543
|
"Name, members and host": "名稱、成員與主持人",
|
|
543
544
|
Members: "成員",
|
|
544
|
-
"Pick 2 to 6
|
|
545
|
-
"選 2 到 6
|
|
545
|
+
"Pick 2 to 6 knights. They take turns in the order picked.":
|
|
546
|
+
"選 2 到 6 位騎士。他們依選取的順序輪流發言。",
|
|
546
547
|
Host: "主持人",
|
|
547
548
|
"It stops answering. The history is kept and it can be restored.":
|
|
548
549
|
"它會停止回應。歷史會保留,之後可以還原。",
|
|
549
|
-
"An archived
|
|
550
|
-
"
|
|
550
|
+
"An archived knight stops answering and its schedules are cancelled. Its history is kept, and you can restore it from Archived.":
|
|
551
|
+
"封存後的騎士不再回應,排程也會取消。歷史會保留,之後可以從「已封存」還原。",
|
|
551
552
|
"{name} stops answering and its schedules are cancelled. A group loses it as a member. The history is kept, and Archived in the room list restores it.":
|
|
552
553
|
"{name}會停止回應,排程也會取消;群組會少掉這位成員。歷史會保留,可以從聊天室列表的「已封存」還原。",
|
|
553
|
-
"Archived
|
|
554
|
-
"
|
|
554
|
+
"Archived knights and groups no longer answer. Their history is kept until you delete them.":
|
|
555
|
+
"已封存的騎士與群組不再回應。歷史會保留,直到你刪除它們。",
|
|
555
556
|
"Nothing is archived.": "沒有已封存的項目。",
|
|
556
557
|
"{name} and its messages in this app are deleted for good, and the name can be used again. This cannot be undone.":
|
|
557
558
|
"{name}和它在這個應用程式裡的訊息會永久刪除,名稱可以再使用。此動作無法復原。",
|
|
558
|
-
"What the
|
|
559
|
-
"
|
|
559
|
+
"What the knight can load when a task calls for it. It applies from its next turn.":
|
|
560
|
+
"騎士在任務需要時可以載入的技能。下一輪對話起生效。",
|
|
560
561
|
"Its file cannot be read.": "讀不到它的檔案。",
|
|
561
|
-
"Built in: every
|
|
562
|
+
"Built in: every knight carries it.": "內建:每位騎士都有。",
|
|
562
563
|
"This host has no skills.": "這個主機沒有技能。",
|
|
563
564
|
"Give add or remove.": "請給 add 或 remove。",
|
|
564
565
|
"members must be a list of text.": "members 必須是文字清單。",
|
|
565
566
|
"Give displayName, members or host.": "請給 displayName、members 或 host。",
|
|
566
567
|
|
|
567
568
|
// 聊天室列表
|
|
568
|
-
|
|
569
|
+
Knights: "騎士",
|
|
569
570
|
"Dispatch threads": "派工討論串",
|
|
570
571
|
"Find a room": "尋找聊天室",
|
|
571
572
|
"Switch rooms": "切換聊天室",
|
|
@@ -574,15 +575,30 @@ export const ZH_TW: Readonly<Record<string, string>> = {
|
|
|
574
575
|
Home: "首頁",
|
|
575
576
|
"Long-running": "長時間執行",
|
|
576
577
|
"No messages yet": "還沒有訊息",
|
|
577
|
-
"No rooms yet. Rooms appear when the team has
|
|
578
|
-
"
|
|
578
|
+
"No rooms yet. Rooms appear when the team has a knight.":
|
|
579
|
+
"還沒有聊天室。團隊有騎士後,聊天室就會出現。",
|
|
579
580
|
Yolo: "Yolo",
|
|
580
581
|
"{count} card waiting": "{count} 張卡片等待中",
|
|
581
582
|
"{count} cards waiting": "{count} 張卡片等待中",
|
|
582
583
|
"{count} finished thread": "{count} 個已結束的討論串",
|
|
583
584
|
"{count} finished threads": "{count} 個已結束的討論串",
|
|
584
|
-
|
|
585
|
+
Clear: "清除",
|
|
586
|
+
"Clear this thread": "清除這則",
|
|
587
|
+
"Clear all finished": "清除所有已完成",
|
|
588
|
+
"Clear finished": "清除已完成",
|
|
589
|
+
Finished: "已完成",
|
|
590
|
+
"In progress": "進行中",
|
|
591
|
+
"More actions for {name}": "{name} 的更多動作",
|
|
592
|
+
"Cleared “{name}”": "已清除「{name}」",
|
|
593
|
+
"Cleared {count} finished thread": "已清除 {count} 個已完成的討論串",
|
|
594
|
+
"Cleared {count} finished threads": "已清除 {count} 個已完成的討論串",
|
|
595
|
+
"Clear {count} finished thread?": "清除 {count} 個已完成的討論串?",
|
|
596
|
+
"Clear {count} finished threads?": "清除 {count} 個已完成的討論串?",
|
|
597
|
+
"They leave the list for every owner. Each one stays readable by its address, and Undo brings them back.":
|
|
598
|
+
"這些討論串會從所有擁有者的列表中消失,仍可用網址讀取,按「復原」就會回來。",
|
|
585
599
|
"The thread is still open.": "這個討論串還在進行中。",
|
|
600
|
+
"threads must be a list of at most 100 keys.":
|
|
601
|
+
"threads 必須是最多 100 個鍵的清單。",
|
|
586
602
|
|
|
587
603
|
// 排程
|
|
588
604
|
"{days} at {time}": "每{days} {time}",
|
|
@@ -594,8 +610,8 @@ export const ZH_TW: Readonly<Record<string, string>> = {
|
|
|
594
610
|
"Every {count} days at {time}": "每 {count} 天 {time}",
|
|
595
611
|
"Every day at {time}": "每天 {time}",
|
|
596
612
|
"next {when}": "下次:{when}",
|
|
597
|
-
"Nothing is scheduled. Ask
|
|
598
|
-
"
|
|
613
|
+
"Nothing is scheduled. Ask a knight to remind you or to run something later.":
|
|
614
|
+
"目前沒有排程。你可以請騎士提醒你,或稍後執行某件事。",
|
|
599
615
|
"Once on {date} at {time}": "{date} {time}(僅一次)",
|
|
600
616
|
"Schedule cancelled.": "排程已取消。",
|
|
601
617
|
"set by {name}": "由{name}設定",
|
|
@@ -613,8 +629,8 @@ export const ZH_TW: Readonly<Record<string, string>> = {
|
|
|
613
629
|
Appearance: "外觀",
|
|
614
630
|
"Color scheme": "色彩配置",
|
|
615
631
|
Device: "裝置",
|
|
616
|
-
"Get a notification on this device when a card waits for you or
|
|
617
|
-
"
|
|
632
|
+
"Get a notification on this device when a card waits for you or a knight reports on its own, while the app is not open.":
|
|
633
|
+
"應用程式未開啟時,只要有卡片等你處理,或騎士主動回報,這台裝置就會收到通知。",
|
|
618
634
|
"Install it to open from your home screen or dock, in its own window.":
|
|
619
635
|
"安裝後可從主畫面或 Dock 直接開啟,並使用獨立的視窗。",
|
|
620
636
|
"Install the app": "安裝應用程式",
|
|
@@ -625,8 +641,8 @@ export const ZH_TW: Readonly<Record<string, string>> = {
|
|
|
625
641
|
"Notifications were not allowed. Allow them in the browser's site settings.":
|
|
626
642
|
"通知未獲允許。請在瀏覽器的網站設定中允許通知。",
|
|
627
643
|
Notifications: "通知",
|
|
628
|
-
"Quiet hours, {start} to {end} ({zone}): no notification for
|
|
629
|
-
"勿擾時段 {start} 至 {end}({zone}
|
|
644
|
+
"Quiet hours, {start} to {end} ({zone}): no notification for a knight's report or a notice. A card waiting for you still notifies. The server sets the hours.":
|
|
645
|
+
"勿擾時段 {start} 至 {end}({zone}):這段時間內,騎士的回報與通知不會推播;等你處理的卡片仍會推播。時段由伺服器設定。",
|
|
630
646
|
Remove: "移除",
|
|
631
647
|
"Signed in as {name}.": "目前登入身分:{name}。",
|
|
632
648
|
"This browser cannot get push notifications. On iPhone and iPad, install the app from Share, Add to Home Screen, and open it from there.":
|
|
@@ -647,15 +663,15 @@ export const ZH_TW: Readonly<Record<string, string>> = {
|
|
|
647
663
|
"白天是羊皮紙,夜晚是夜間城堡,搭配金色分隔線、盾形頭像與蠟封印章。",
|
|
648
664
|
|
|
649
665
|
// 技能
|
|
650
|
-
"All
|
|
651
|
-
"
|
|
666
|
+
"All knights": "所有騎士",
|
|
667
|
+
"Knight-written": "騎士撰寫",
|
|
652
668
|
"Built-in": "內建",
|
|
653
669
|
Carriers: "搭載對象",
|
|
654
670
|
"File missing": "檔案遺失",
|
|
655
671
|
"No skills.": "沒有技能。",
|
|
656
672
|
None: "無",
|
|
657
|
-
"Registered skills and their carriers; ask
|
|
658
|
-
"已登錄的技能與搭載對象;如要修改內容,請在 Discord
|
|
673
|
+
"Registered skills and their carriers; ask a knight on Discord to edit their contents.":
|
|
674
|
+
"已登錄的技能與搭載對象;如要修改內容,請在 Discord 上請騎士編輯。",
|
|
659
675
|
|
|
660
676
|
// 圓桌
|
|
661
677
|
"Reset view": "重設視角",
|
|
@@ -671,18 +687,19 @@ export const ZH_TW: Readonly<Record<string, string>> = {
|
|
|
671
687
|
"Archived {name}": "已封存的{name}",
|
|
672
688
|
"Current conversation": "目前的對話",
|
|
673
689
|
"Nothing to show.": "沒有可顯示的內容。",
|
|
674
|
-
"Outside
|
|
690
|
+
"Outside AI client · {id}": "外部 AI 用戶端 · {id}",
|
|
675
691
|
Showing: "顯示",
|
|
676
692
|
"This conversation is longer than the console reads; the oldest entries are not shown.":
|
|
677
693
|
"這段對話比主控台能讀取的長度還長,最舊的紀錄不會顯示。",
|
|
678
694
|
"Tool failed": "工具執行失敗",
|
|
679
695
|
"Tool result": "工具結果",
|
|
680
696
|
User: "使用者",
|
|
681
|
-
|
|
697
|
+
// 命令面板與對話紀錄共用
|
|
698
|
+
Knight: "騎士",
|
|
682
699
|
"Summary of earlier conversation": "先前對話的摘要",
|
|
683
700
|
|
|
684
701
|
// 伺服器回應
|
|
685
|
-
"There is no such room,
|
|
702
|
+
"There is no such room, knight or file.": "找不到這個聊天室、騎士或檔案。",
|
|
686
703
|
"The body is too large.": "內容太大。",
|
|
687
704
|
"The body is not JSON.": "內容不是 JSON。",
|
|
688
705
|
"The body is not an object.": "內容不是物件。",
|
|
@@ -846,7 +863,7 @@ export const ZH_TW: Readonly<Record<string, string>> = {
|
|
|
846
863
|
"character.class.paladin": "聖騎士",
|
|
847
864
|
"character.class.archivist": "檔案管理員",
|
|
848
865
|
// 職業適合的工作
|
|
849
|
-
"character.jobs.wizard": "
|
|
866
|
+
"character.jobs.wizard": "協調者、規劃者、主騎士",
|
|
850
867
|
"character.jobs.knight": "審查者、品質把關、守護者",
|
|
851
868
|
"character.jobs.scholar": "研究員、文獻回顧",
|
|
852
869
|
"character.jobs.smith": "程式開發、建置、重構",
|
|
@@ -968,14 +985,14 @@ export const ZH_TW: Readonly<Record<string, string>> = {
|
|
|
968
985
|
// 主要提示詞與技能內容的編輯
|
|
969
986
|
"Main prompts": "主要提示詞",
|
|
970
987
|
"Edit the main prompts": "編輯主要提示詞",
|
|
971
|
-
"The texts the
|
|
972
|
-
"
|
|
973
|
-
"The texts the
|
|
974
|
-
"
|
|
988
|
+
"The texts the main knight and the other knights start from, with a diff to read before you save and a way back to the file's text.":
|
|
989
|
+
"主騎士與其他騎士開始工作時所依據的文字;儲存前可檢視差異,也能回到檔案裡的版本。",
|
|
990
|
+
"The texts the main knight and the other knights start from. A text you save here replaces the one from the file from the next turn on, until you go back to the file's.":
|
|
991
|
+
"主騎士與其他騎士開始工作時所依據的文字。你在這裡儲存的文字,從下一回合起取代檔案裡的版本,直到你回到檔案版本為止。",
|
|
975
992
|
"Shared prompt": "共用提示詞",
|
|
976
993
|
"Guest prompt": "訪客提示詞",
|
|
977
|
-
"The base every
|
|
978
|
-
"
|
|
994
|
+
"The base every knight's prompt starts with, the main knight's included.":
|
|
995
|
+
"每位騎士的提示詞都以它開頭,主騎士也不例外。",
|
|
979
996
|
"Used instead of the shared prompt when the person speaking is not the owner.":
|
|
980
997
|
"說話的人不是擁有者時,改用它取代共用提示詞。",
|
|
981
998
|
"No prompts to edit.": "沒有可編輯的提示詞。",
|
|
@@ -1006,8 +1023,8 @@ export const ZH_TW: Readonly<Record<string, string>> = {
|
|
|
1006
1023
|
"這個技能在你編輯時被更動了。下方的差異是對照目前的版本;再儲存一次會取代它,或回去繼續編輯。",
|
|
1007
1024
|
"Frontmatter holds the name, which cannot change, and a description that starts with “Use when”. The rest is the skill.":
|
|
1008
1025
|
"Frontmatter 含有名稱(不能更改)與以「Use when」開頭的描述,其餘就是技能內容。",
|
|
1009
|
-
"Registered skills and their carriers. A skill
|
|
1010
|
-
"
|
|
1026
|
+
"Registered skills and their carriers. A skill a knight wrote can be edited here; the others are read-only.":
|
|
1027
|
+
"已登錄的技能與攜帶者。騎士撰寫的技能可以在這裡編輯,其他的唯讀。",
|
|
1011
1028
|
"Built in with the release; it changes with the release.":
|
|
1012
1029
|
"隨版本內建;要隨版本更新才會改變。",
|
|
1013
1030
|
"From the package {package}; it changes when the package is upgraded.":
|
|
@@ -1054,7 +1071,7 @@ export const ZH_TW: Readonly<Record<string, string>> = {
|
|
|
1054
1071
|
"You can read this room but not write in it.":
|
|
1055
1072
|
"你可以閱讀這個聊天室,但不能在其中發言。",
|
|
1056
1073
|
"@AI": "@AI",
|
|
1057
|
-
"The message starts with @AI, so the
|
|
1074
|
+
"The message starts with @AI, so the knight answers.":
|
|
1058
1075
|
"訊息開頭是 @AI,所以 AI 會回覆。",
|
|
1059
1076
|
"Write an internal note…": "寫一則內部備註…",
|
|
1060
1077
|
"Ask AI…": "問 AI…",
|
package/src/options.ts
CHANGED
package/src/web-plugin.ts
CHANGED
|
@@ -330,7 +330,18 @@ async function build(settings: ResolvedOptions, context: Context) {
|
|
|
330
330
|
const authenticator = createAuthenticator({
|
|
331
331
|
auth: settings.auth,
|
|
332
332
|
identify,
|
|
333
|
-
...(oidc && sessions
|
|
333
|
+
...(oidc && sessions
|
|
334
|
+
? {
|
|
335
|
+
oidc: {
|
|
336
|
+
login: oidc,
|
|
337
|
+
sessions,
|
|
338
|
+
reauthHours:
|
|
339
|
+
settings.auth.mode === "oidc"
|
|
340
|
+
? settings.auth.reauthHours
|
|
341
|
+
: undefined,
|
|
342
|
+
},
|
|
343
|
+
}
|
|
344
|
+
: {}),
|
|
334
345
|
origin: settings.origin,
|
|
335
346
|
mount: settings.mount,
|
|
336
347
|
title: settings.title,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{h,M,w,e,x}from"./chunk-index-zynq0b0w.js";var a={profile:w(()=>(h("6qemf3m7"),import("./chunk-profile-6qemf3m7.js")).then((o)=>({default:o.ProfilePage}))),notices:w(()=>(h("x07da5bb"),import("./chunk-notices-x07da5bb.js")).then((o)=>({default:o.NoticesPage}))),onboarding:w(()=>(h("csrkbh9z"),import("./chunk-onboarding-csrkbh9z.js")).then((o)=>({default:o.OnboardingPage})))};function n({pane:o}){let t=a[o];return t?e(M,{fallback:e(x,{}),children:e(t,{})}):null}export{n as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a,yt,o,r,m,e,n,s,an,hs}from"./chunk-index-zynq0b0w.js";import{I}from"./chunk-index-vcyzwtk2.js";var k=()=>typeof matchMedia==="function"&&matchMedia("(max-width: 719px)").matches,x={rtMenu:!0},g=()=>Boolean(window.history.state?.rtMenu),E=8,y=(t)=>t?.isConnected?t:null;function b(t){return t.items.map((u)=>n("button",{type:"button",role:u.checked===void 0?"menuitem":"menuitemcheckbox",...u.checked===void 0?{}:{"aria-checked":u.checked},className:"menu-item menu-link","data-tone":u.tone,onClick:()=>t.onChoose(u),children:[u.icon?e("span",{className:"menu-icon","data-tone":u.tone,children:e(s,{name:u.icon,size:18})}):null,e("span",{className:"menu-text",children:e("strong",{children:u.label})}),u.checked?e(s,{name:"check",size:18,className:"menu-check"}):null]},u.id))}function H({menu:t}){let u=o(void 0);if(t)u.current=t;let c=u.current,f=o(!1),v=o(void 0),p=t?.serial;return a(()=>{if(p===void 0)return;return window.history.pushState(x,"",window.location.href),f.current=!0,()=>{if(f.current)f.current=!1,window.history.back()}},[p]),a(()=>{let h=()=>{if(!f.current||g())return;f.current=!1,an();let M=v.current;v.current=void 0,M?.()};return window.addEventListener("popstate",h),()=>window.removeEventListener("popstate",h)},[]),e(I,{open:t!==void 0,title:c?.title??"",onClose:an,restoreFocus:()=>y(c?.source??null),children:c?e("div",{className:"menu action-items",role:"menu","aria-label":c.title,children:e(b,{items:c.items,onChoose:(h)=>{if(!f.current){an(),h.run();return}v.current=h.run,window.history.back()}})}):null})}function T({menu:t}){let u=o(null),[c,f]=r(t.at),{source:v}=t,p=(i)=>{y(v)?.focus(),an(),i?.()},h=o(p);h.current=p,yt(()=>{let i=u.current;if(!i)return;let d=i.getBoundingClientRect();f({x:Math.max(E,Math.min(t.at.x,window.innerWidth-d.width-E)),y:Math.max(E,Math.min(t.at.y,window.innerHeight-d.height-E))}),i.querySelector('[role^="menuitem"]')?.focus()},[t.serial]),a(()=>{let i=(l)=>{if(l.target instanceof Node&&u.current?.contains(l.target))return;an()},d=()=>an();return document.addEventListener("pointerdown",i,!0),document.addEventListener("wheel",i,{capture:!0,passive:!0}),document.addEventListener("touchmove",i,{capture:!0,passive:!0}),window.addEventListener("resize",d),()=>{document.removeEventListener("pointerdown",i,!0),document.removeEventListener("wheel",i,!0),document.removeEventListener("touchmove",i,!0),window.removeEventListener("resize",d)}},[]);let M=(i)=>{let d=[...u.current?.querySelectorAll('[role^="menuitem"]')??[]],l=d.indexOf(document.activeElement),w=(L)=>{i.preventDefault(),d[(L+d.length)%d.length]?.focus()};switch(i.key){case"Escape":i.preventDefault(),i.stopPropagation(),h.current();return;case"ArrowDown":return w(l+1);case"ArrowUp":return w(l<0?-1:l-1);case"Tab":return w(i.shiftKey?l<0?-1:l-1:l+1);case"Home":return w(0);case"End":return w(-1)}};return e("div",{ref:u,className:"action-popover",role:"menu","aria-label":t.title,tabIndex:-1,style:{left:`${c.x}px`,top:`${c.y}px`},onKeyDown:M,children:e(b,{items:t.items,onChoose:(i)=>p(i.run)})})}function O(){let t=hs(),u=o(void 0);if(t&&u.current?.serial!==t.serial)u.current={serial:t.serial,sheet:k()};let c=Boolean(t&&u.current?.sheet);return n(m,{children:[e(H,{menu:c?t:void 0}),t&&!c?e(T,{menu:t},t.serial):null]})}export{O as ActionMenuHost};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a,e,K,d,x,Ye}from"./chunk-index-zynq0b0w.js";function g({name:o}){let i=d((t)=>t.listed),r=d((t)=>Object.values(t.rooms).find((m)=>m.view?.kind==="agent"&&m.view.name===o)?.view?.key,o);return a(()=>{if(r)K("room",r,{replace:!0}),Ye(o);else if(i)K("rooms",void 0,{replace:!0})},[r,i,o]),e("div",{className:"page",children:e(x,{})})}export{g as AgentPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{h,M,w,J,A,o,t,m,e,n,s,Ie,d,_,k,ye,Bt,ln,ne,Mi,Kn,ur,Tn,Jn,dr}from"./chunk-index-zynq0b0w.js";import{Me}from"./chunk-index-wrm8w165.js";import{In,Dn,Un,Xt}from"./chunk-index-2yebd9tb.js";import{Ln}from"./chunk-index-4t0r3t3b.js";import{Rt}from"./chunk-index-zrvg23jd.js";In();var O=w(()=>(h("era3tksh"),import("./chunk-folder-list-era3tksh.js")).then((a)=>({default:a.FolderList}))),Z=J(function(c){let{view:r}=c,p=Xt(()=>Bt(r.key),r.home?void 0:Dn(r.key));return e(ur,{...c,press:p,item:{...r.home?{}:{"data-drop-item":"","data-key":r.key},...c.arranging?{"data-arranging":""}:{}},after:c.arranging?e("button",{type:"button",className:"icon-button row-more","aria-haspopup":"menu","aria-label":t("Room menu"),onClick:(u)=>{let g=u.currentTarget;Bt(r.key).then((i)=>{if(!i)return;let y=g.getBoundingClientRect();ye({...i,at:{x:y.left,y:y.bottom},via:"key",source:g})},()=>{return})},children:e(s,{name:"more",size:18})}):null})});function P(a){let{now:c}=ne(),{timeZone:r}=k(),p=Tn(a.rooms);return e("ul",{className:"room-list",children:p.map(({key:u,...g})=>{let i=a.threads[u];return e(Z,{...g,active:u===a.active,now:c,timeZone:r,arranging:a.arranging,...i?{threads:e(Jn,{open:i.open,closed:i.closed,active:a.active,parent:u})}:{}},u)})})}function v(a){let r=Tn(a.rooms).length===0;if(r&&a.zone?.kind!=="pinned")return null;return n("section",{className:"stack",...r?{"data-empty":""}:{},...a.zone?{"data-drop-zone":a.zone.kind,"data-zone-id":a.zone.id}:{},children:[e("h2",{className:"section-title",children:a.title}),r?null:e(P,{rooms:a.rooms,threads:a.threads,active:a.active,arranging:a.arranging})]})}function re(a){let c=Boolean(k().kinds?.length),r=d((l)=>JSON.stringify({listed:l.listed,...Rt(l,(K)=>Ie(l,K))})),p=Un(),u=o(r);if(!p)u.current=r;let g=u.current,{listed:i,...y}=A(()=>JSON.parse(g),[g]),{home:z,pinned:S,folders:N,restAgents:T,restGroups:D,rest:C,threads:L,orphans:f}=y,R=Mi(),F=z.length+S.length+C.length===0&&N.every((l)=>l.rooms.length===0)&&f.open.length+f.closed.length===0,b={threads:L,active:a.active,arranging:R};return n("div",{className:"page","data-column":a.active?"":void 0,"data-drop-root":"",children:[n("header",{className:"page-head",children:[e("h1",{children:t("Rooms")}),n("div",{className:"actions",children:[n("button",{type:"button",className:"header-button search-button",onClick:a.onSearch,children:[e(s,{name:"search",size:16}),e("span",{children:t("Find a room")}),e("kbd",{children:"⌘K"})]}),i?e("button",{type:"button",className:"header-button icon-button","aria-haspopup":"menu","aria-label":t("Folders and order"),onClick:(l)=>Ln(l.currentTarget),children:e(s,{name:"more",size:18})}):null,e("button",{type:"button",className:"header-button icon-button","aria-label":t("Add"),"aria-haspopup":"menu",onClick:(l)=>ln(l.currentTarget),children:e(s,{name:"plus"})})]})]}),R?n("div",{className:"arrange-bar",children:[n("button",{type:"button",className:"secondary",onClick:()=>Me({kind:"new"}),children:[e(s,{name:"plus",size:16}),e("span",{children:t("Add a folder")})]}),e("button",{type:"button",onClick:()=>Kn(!1),children:t("Done")})]}):null,i&&F&&!c?e(_,{children:t("No rooms yet. Rooms appear when the team has an agent.")}):null,!i?n("div",{className:"stack","aria-busy":"true",children:[e("div",{className:"skeleton"}),e("div",{className:"skeleton"}),e("div",{className:"skeleton"})]}):null,e(v,{title:t("Home"),rooms:z,...b}),e(v,{title:t("Pinned"),rooms:S,zone:{kind:"pinned",id:"pinned"},...b}),N.length>0?e("div",{className:"stack folder-list","data-folder-list":"",children:e(M,{fallback:e("div",{className:"skeleton","aria-busy":"true"}),children:e(O,{folders:N,active:a.active,listed:i,rooms:(l)=>e(P,{rooms:l,threads:L,active:a.active,arranging:R})})})}):null,N.length>0?e(v,{title:t("Ungrouped"),rooms:C,zone:{kind:"rest",id:"rest"},...b}):n(m,{children:[e(v,{title:t("Agents"),rooms:T,zone:{kind:"rest",id:"rest-agents"},...b}),e(v,{title:t("Groups"),rooms:D,zone:{kind:"rest",id:"rest-groups"},...b})]}),f.open.length+f.closed.length>0?n("section",{className:"stack",children:[e("h2",{className:"section-title",children:t("Dispatch threads")}),e(Jn,{open:f.open,closed:f.closed,active:a.active})]}):null,e(dr,{active:a.active})]})}export{re as ArrangedRoomsPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j}from"./chunk-index-w31c4yjv.js";import"./chunk-index-vcyzwtk2.js";export{j as Confirm};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t,m,e,n,y,x,p,_,P,k}from"./chunk-index-zynq0b0w.js";import{Oe}from"./chunk-index-gr6e0hse.js";function g(){let{connectorAdminUrl:o}=k(),{data:r,error:s}=Oe(()=>y.connectors(),"connectors");return n("section",{className:"stack",children:[n("div",{className:"card-head",children:[n("div",{children:[e("h2",{children:t("Connectors")}),e("p",{className:"hint",children:t("Upstream MCP gateways and virtual servers used by the assistant.")})]}),o?e("a",{href:o,target:"_blank",rel:"noreferrer",children:t("Open connector admin")}):null]}),s?e(p,{message:s}):null,!r&&!s?e(x,{}):null,r?n(m,{children:[e("h3",{children:t("Upstream gateways")}),r.gateways.length===0?e(_,{children:t("No gateways.")}):null,r.gateways.map((a)=>e("article",{className:"card",children:n("div",{className:"card-head",children:[e("strong",{children:a.name}),e(P,{children:a.enabled?t("Enabled"):t("Disabled")}),e(P,{tone:a.reachable?"plain":"warn",children:a.reachable?t("Reachable"):t("Unreachable")}),e(P,{children:t("{count} tools",{count:a.tools})})]})},a.name)),e("h3",{children:t("Virtual servers")}),r.servers.length===0?e(_,{children:t("No virtual servers.")}):null,r.servers.map((a)=>n("article",{className:"card",children:[n("div",{className:"card-head",children:[e("strong",{children:a.name}),e(P,{children:t("{count} tools",{count:a.tools.length})})]}),n("p",{children:[t("Used by"),": ",a.usedBy.join(", ")||t("None")]}),n("details",{children:[e("summary",{children:t("Tool list")}),e("ul",{children:a.tools.map((l)=>e("li",{children:l},l))})]})]},a.name))]}):null]})}export{g as ConnectorsPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t,c,m,e,n,S,y,x,p,_,P,k,De,te,ke,tn,Hn,ne}from"./chunk-index-zynq0b0w.js";import{Oe}from"./chunk-index-gr6e0hse.js";var u=[{kind:"owner",title:c("Owner channels"),note:c("Direct messages and channels where the owner talks to the assistant.")},{kind:"agent",title:c("Agent channels"),note:c("The agent server's one-to-one channels.")},{kind:"group",title:c("Group channels"),note:c("The agent server's group channels.")},{kind:"outside",title:c("Outside agents"),note:c("Conversations an agent outside Discord holds over MCP.")},{kind:"plugin",title:c("Plugin conversations"),note:c("Conversations a plugin runs, such as a web chat, as the host recorded them.")}];function Z(){let{timeZone:o}=k(),{now:i}=ne(),{data:s,error:a}=Oe(()=>y.conversations(),"conversations"),d=s?.conversations;if(!d)return a?e(p,{message:a}):e(x,{});return n(m,{children:[a?e(p,{message:a}):null,u.map((r)=>{let h=d.filter((l)=>l.kind===r.kind);return n("section",{className:"stack",children:[e("h2",{children:t(r.title)}),e("p",{className:"hint",children:t(r.note)}),h.length===0?e(_,{children:t("None stored.")}):null,h.map((l)=>e(g,{item:l,now:i,timeZone:o},l.key))]},r.kind)})]})}function g(o){let{item:i}=o,s=tn(i.channel,i.id),a=Hn(i);return n("a",{className:"card card-link",href:S("conversations",i.key),children:[n("div",{className:"card-head",children:[e("strong",{children:a}),i.busy>0?e(P,{tone:"busy",children:t("running")}):null,i.liveBytes===0?e(P,{children:t("archived only")}):null]}),n("p",{className:"meta",children:[(i.kind==="outside"||i.kind==="plugin")&&i.startedAt?`${t("Started")} ${te(i.startedAt,o.timeZone)} · `:s.detail?`${s.detail} · `:"",i.principal?`${i.visibility==="private"?t("Private to {name}",{name:i.principal.name}):t("Shared · {name}",{name:i.principal.name})} · `:"",t("Last active")," ",De(i.lastActive,o.now,o.timeZone)," ·"," ",ke(i.liveBytes)," ·"," ",t("{count} archived",{count:i.archives})]})]})}export{Z as ConversationsPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Dt}from"./chunk-index-jw7dtshr.js";import{h}from"./chunk-index-zynq0b0w.js";function H(){try{let c=document.createElement("canvas");return!!(c.getContext("webgl2")||c.getContext("webgl"))}catch{return!1}}function x(c,n){return[c,n.includes("?")?n.slice(n.indexOf("?")):""].some((r)=>{let d=new URLSearchParams(r).get("nogl");return d!==null&&d!=="0"&&d!=="false"})}async function I(c,n,g){let r=n.variant==="compact",d=n.labels??Dt,l=new Map,T=(e)=>{l.clear();for(let t of e)l.set(t.id,{...t})};T(n.seats);let m={t:n.theme,s:n.scheme},a=null,o=document.createElement("div");o.className="rt-table",o.dataset.variant=r?"compact":"full";let f=document.createElement("div");f.className="rt-table-stage",o.appendChild(f);let i=null,E=!1,M=()=>!r&&(Boolean(n.listBelow)||E);c.appendChild(o);let u=new Map,S=()=>{if(!M()){i?.remove(),i=null,u.clear(),delete o.dataset.list;return}if(!i)i=document.createElement("ul"),i.className="rt-table-list",i.setAttribute("aria-label",d.table),o.appendChild(i),o.dataset.list="";for(let e of[...u.keys()])if(!l.has(e))u.delete(e);for(let e of l.values()){let t=u.get(e.id);if(!t){t=document.createElement("button"),t.type="button",t.dataset.seat=e.id;let s=e.id;t.addEventListener("click",()=>{let b=l.get(s);if(b)n.onSeatClick({id:b.id,name:b.name})}),u.set(e.id,t)}t.textContent=d.seat(e.name,e.state??"idle"),t.style.setProperty("--seat",e.color)}i.replaceChildren(...[...l.values()].map((e)=>{let t=document.createElement("li"),s=u.get(e.id);if(s)t.appendChild(s);return t}))};S();let y=(e)=>{E=!e,S(),n.onNames?.(e)},p=async()=>{let{createTable2D:e}=await (h("p3ezsdcj"),import("./chunk-table2d-p3ezsdcj.js"));a=e(f,{...n,theme:m.t,scheme:m.s,seats:[...l.values()]}),y(!0)},A=async()=>{let{createTable3D:e}=await (h("4x2n2b00"),import("./chunk-table3d-4x2n2b00.js"));a=e(f,{...n,theme:m.t,scheme:m.s,seats:[...l.values()],onNames:y},()=>{a?.dispose(),p()})};if(r||g==="svg"||g!=="webgl"&&(x(location.search,location.hash)||!H()))await p();else try{await A()}catch{await p()}let w,L=n.onSeatMenu;if(L&&!r){let{attachSeatMenu:e}=await (h("ys5v9abz"),import("./chunk-seat-menu-ys5v9abz.js"));w=e(o,(t,s,b)=>{let C=t instanceof Element?t.closest("[data-seat]")?.dataset.seat:void 0,v=l.get(C??a?.seatAt?.(s,b)??"");return v?{id:v.id,name:v.name}:void 0},L)}return{get kind(){return a.kind},setTheme(e,t){m={t:e,s:t},a.setTheme(e,t)},setSeats(e){T(e),S(),a.setSeats(e)},setState(e,t){let s=l.get(e);if(s)s.state=t;S(),a.setState(e,t)},setAvatar(e,t){let s=l.get(e);if(s)s.avatarSvg=t;return a.setAvatar(e,t)},setReducedMotion:(e)=>a.setReducedMotion(e),resetCamera:()=>a.resetCamera(),focus:(e,t)=>a.focus(e,t),focused:()=>a.focused(),seatAt:(e,t)=>a.seatAt?.(e,t)??null,getStats:()=>a.getStats(),dispose(){w?.(),a?.dispose(),o.remove()}}}export{I as mountRoundTable};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{h,a,D,t,xe,m,e,n,s,dt,d,ye,vt,Ri,Ei}from"./chunk-index-zynq0b0w.js";import{qi,Bi,Fi,Gi}from"./chunk-index-j214tczc.js";import{Xt}from"./chunk-index-2yebd9tb.js";import{ni}from"./chunk-index-zrvg23jd.js";var v=()=>(h("48ecgtkg"),import("./chunk-layout-actions-48ecgtkg.js")),y=(r)=>(h("q694dpgk"),import("./chunk-placement-items-q694dpgk.js")).then((o)=>o.folderMenu(r)),F=(r)=>({mode:"folder",key:r,item:(o)=>o.closest("[data-folder-block]"),root:(o)=>o.closest("[data-folder-block]")?.parentElement??null,onDrop:(o)=>{if(o.type==="folder")v().then((i)=>i.placeFolderBefore(r,o.before))},open:Fi});function k(r){let{id:o,name:i}=r,c=qi().has(o),l=r.holdsActive||!c,u=D(),b=Xt(()=>y(o),F(o)),N=(f)=>{y(o).then((g)=>{if(!g)return;let p=f.getBoundingClientRect();ye({...g,at:{x:p.left,y:p.bottom},via:"key",source:f})},()=>{return})};return n("section",{className:"folder","aria-label":i,"data-folder-block":"","data-key":o,"data-drop-zone":"folder","data-zone-id":o,"data-folder":o,"data-collapsed":l?void 0:"",children:[n("header",{className:"folder-head","data-folder-head":"",...b,children:[n("button",{type:"button",className:"folder-toggle","aria-expanded":l,"aria-controls":u,"aria-label":l?t("Collapse {name}",{name:i}):t("Expand {name}",{name:i}),onClick:()=>Bi(o),children:[e(s,{name:"chevron",size:16,className:"folder-chevron","data-open":l||void 0}),e("strong",{children:i}),e("span",{className:"meta",children:xe(r.count,"{count} room","{count} rooms")}),l?null:r.stack]}),r.muted==="none"?null:e(s,{name:"bell-off",size:14,className:"muted-mark","data-partial":r.muted==="some"||void 0,role:"img","aria-hidden":!1,"aria-label":r.muted==="all"?t("Notifications are off"):t("Some notifications are off")}),l?null:r.summary,e("button",{type:"button",className:"icon-button folder-more","aria-haspopup":"menu","aria-label":t("Folder menu"),onClick:(f)=>N(f.currentTarget),children:e(s,{name:"more",size:18})})]}),e("div",{id:u,className:"folder-body",hidden:!l,children:l?r.count===0?e("p",{className:"meta folder-empty",children:t("No rooms in this folder yet.")}):r.children:null})]})}var R=4;function S(r){let o=r.rooms.slice(0,R),i=d((l)=>o.map((u)=>l.rooms[u]?.view),o.join(",")),c=r.rooms.length-o.length;return n("span",{className:"folder-stack","aria-hidden":"true",children:[i.map((l)=>l?e("span",{className:"folder-stack-item",children:e(vt,{view:l,size:28})},l.key):null),c>0?n("span",{className:"folder-stack-more",children:["+",c]}):null]})}function M(r){let o=d((i)=>({waiting:r.rooms.reduce((c,l)=>c+dt(i,l),0),typing:r.rooms.some((c)=>i.rooms[c]?.typing)}),r.rooms.join(","));return n(m,{children:[o.typing?e(Ri,{}):null,o.waiting?e(Ei,{count:o.waiting}):null]})}function w(r){return d((o)=>ni(r,(i)=>o.rooms[i]?.view?.muted===!0),r.join(","))}function Q(r){let o=r.folders.map((i)=>i.id).join(",");return a(()=>{if(r.listed)Gi(o?o.split(","):[])},[r.listed,o]),e(m,{children:r.folders.map((i)=>e(C,{folder:i,...r},i.id))})}function C(r){let{folder:o}=r,i=w(o.rooms);return e(k,{id:o.id,name:o.name,count:o.rooms.length,holdsActive:r.active!==void 0&&o.rooms.includes(r.active),muted:i,summary:e(M,{rooms:o.rooms}),stack:e(S,{rooms:o.rooms}),children:r.rooms(o.rooms)})}export{Q as FolderList};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{qi,Bi,Fi,Gi}from"./chunk-index-j214tczc.js";export{Fi as expandFolder,Gi as pruneCollapsed,Bi as toggleCollapsed,qi as useCollapsed};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r,e,n}from"./chunk-index-zynq0b0w.js";import"./chunk-index-yzsgsvnp.js";import"./chunk-index-0fmmvgee.js";import"./chunk-index-rnxj3z8k.js";import{Ut}from"./chunk-index-7xffskfa.js";import{qr,Br,Ui,Xn}from"./chunk-index-b6ca02e8.js";import"./chunk-index-vcyzwtk2.js";function b(i){let{roomKey:o,members:m}=i,{line:s}=Ui(o),[l,a]=r(),u=Br(qr(s,m),s?.id,l),t=(f)=>a({lineId:s?.id,member:f});return n("div",{className:"table-frame room-scene","data-focused":"",children:[e(Ut,{members:m,groupRoom:o,variant:"full",focus:u,onFocus:t,onSeat:t}),e(Xn,{roomKey:o,open:!0,streams:!1})]})}export{b as GroupScene};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{nr,t,m,e,n,s,d,We}from"./chunk-index-zynq0b0w.js";import"./chunk-index-yzsgsvnp.js";import"./chunk-index-0fmmvgee.js";import"./chunk-index-rnxj3z8k.js";import{Ut}from"./chunk-index-7xffskfa.js";var i=(o,a)=>a?nr(o,a):o;function T(o){let a=d((c)=>c.rooms[o.roomKey]?.view),r=We();if(!a||a.kind!=="group")return null;let l=a.members??[];return n(m,{children:[n("button",{type:"button",className:"icon-button group-table-button","aria-label":t("Table"),"aria-pressed":o.scene,onClick:()=>o.onScene(!o.scene),children:[e(s,{name:"table"}),e("span",{className:"group-table-label",children:t("Table")})]}),r==="camelot"&&!o.scene?i(e("div",{className:"group-strip",children:e(Ut,{members:l,groupRoom:o.roomKey,variant:"compact"})}),o.slot):null]})}export{T as GroupTable};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./chunk-index-eg55mqqe.js";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Ke}from"./chunk-index-73gh7kgr.js";export{Ke as HostPicture};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{fr,Qe,hr,pr,mr,Ci,Ai,Or,qs}from"./chunk-index-rnxj3z8k.js";export{Or as keepCards,Ai as keepReads,mr as noCards,pr as noReads,qs as onFrame,Ci as seedUnread,fr as subscribeHost,hr as totalUnread,Qe as useHost};
|