relay.app 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +39 -0
- data/README.md +4 -4
- data/app/concerns/attachment.rb +2 -0
- data/app/concerns/context.rb +5 -12
- data/app/hooks/require_user.rb +1 -1
- data/app/init/database.rb +1 -1
- data/app/init/router.rb +0 -2
- data/app/init.rb +17 -7
- data/app/models/context.rb +13 -4
- data/app/pages/base.rb +0 -1
- data/app/routes/base.rb +0 -1
- data/app/routes/mcp/base.rb +1 -1
- data/app/routes/websocket/connection.rb +3 -3
- data/app/tools/juke_box.rb +1 -1
- data/app/views/fragments/_input.erb +3 -0
- data/app/views/fragments/_providers.erb +1 -2
- data/bin/relay +9 -17
- data/config.ru +1 -1
- data/lib/relay/version.rb +1 -1
- data/lib/relay.rb +26 -13
- data/libexec/relay/bootstrap +2 -1
- data/libexec/relay/configure +51 -15
- data/libexec/relay/console +8 -0
- data/libexec/relay/download-models +1 -1
- data/libexec/relay/migrate +2 -1
- data/libexec/relay/setup +1 -1
- data/libexec/relay/start +3 -2
- data/public/js/relay.js +81 -11
- data/public/js/relay.js.map +1 -1
- metadata +21 -6
data/public/js/relay.js
CHANGED
|
@@ -1,6 +1,70 @@
|
|
|
1
1
|
/******/ (() => { // webpackBootstrap
|
|
2
2
|
/******/ var __webpack_modules__ = ({
|
|
3
3
|
|
|
4
|
+
/***/ "./js/draft.js"
|
|
5
|
+
/*!*********************!*\
|
|
6
|
+
!*** ./js/draft.js ***!
|
|
7
|
+
\*********************/
|
|
8
|
+
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
9
|
+
|
|
10
|
+
"use strict";
|
|
11
|
+
__webpack_require__.r(__webpack_exports__);
|
|
12
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
13
|
+
/* harmony export */ Draft: () => (/* binding */ Draft)
|
|
14
|
+
/* harmony export */ });
|
|
15
|
+
const Draft = () => {
|
|
16
|
+
const prefix = "relay:draft"
|
|
17
|
+
|
|
18
|
+
const composer = () => {
|
|
19
|
+
return document.getElementById("chat-composer")
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const textarea = () => {
|
|
23
|
+
return composer()?.querySelector("textarea[name='message']")
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const key = (form = composer()) => {
|
|
27
|
+
if (!form?.dataset.contextId)
|
|
28
|
+
return null
|
|
29
|
+
return [prefix, form.dataset.contextId].join(":")
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const restore = () => {
|
|
33
|
+
const el = textarea()
|
|
34
|
+
const currentKey = key()
|
|
35
|
+
if (!el || !currentKey)
|
|
36
|
+
return
|
|
37
|
+
const value = localStorage.getItem(currentKey)
|
|
38
|
+
if (value === null)
|
|
39
|
+
return
|
|
40
|
+
el.value = value
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const persist = (el) => {
|
|
44
|
+
const currentKey = key(el?.form)
|
|
45
|
+
if (!currentKey)
|
|
46
|
+
return
|
|
47
|
+
if (el.value.length === 0)
|
|
48
|
+
localStorage.removeItem(currentKey)
|
|
49
|
+
else
|
|
50
|
+
localStorage.setItem(currentKey, el.value)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const clear = (form = composer()) => {
|
|
54
|
+
const currentKey = key(form)
|
|
55
|
+
if (!currentKey)
|
|
56
|
+
return
|
|
57
|
+
localStorage.removeItem(currentKey)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return {clear, persist, restore}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
/***/ },
|
|
67
|
+
|
|
4
68
|
/***/ "./js/file_upload.js"
|
|
5
69
|
/*!***************************!*\
|
|
6
70
|
!*** ./js/file_upload.js ***!
|
|
@@ -237,11 +301,13 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
237
301
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
238
302
|
/* harmony export */ Relay: () => (/* binding */ Relay)
|
|
239
303
|
/* harmony export */ });
|
|
240
|
-
/* harmony import */ var
|
|
241
|
-
/* harmony import */ var
|
|
242
|
-
/* harmony import */ var
|
|
243
|
-
/* harmony import */ var
|
|
244
|
-
/* harmony import */ var
|
|
304
|
+
/* harmony import */ var _draft__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../draft */ "./js/draft.js");
|
|
305
|
+
/* harmony import */ var _file_upload__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../file_upload */ "./js/file_upload.js");
|
|
306
|
+
/* harmony import */ var _controllers_ActivityController__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./controllers/ActivityController */ "./js/lib/controllers/ActivityController.js");
|
|
307
|
+
/* harmony import */ var _controllers_ContentController__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./controllers/ContentController */ "./js/lib/controllers/ContentController.js");
|
|
308
|
+
/* harmony import */ var _scroll__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../scroll */ "./js/scroll.js");
|
|
309
|
+
/* harmony import */ var _timer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../timer */ "./js/timer.js");
|
|
310
|
+
|
|
245
311
|
|
|
246
312
|
|
|
247
313
|
|
|
@@ -250,23 +316,25 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
250
316
|
|
|
251
317
|
const Relay = () => {
|
|
252
318
|
const target = document
|
|
253
|
-
const timer = (0,
|
|
254
|
-
const activity = (0,
|
|
255
|
-
const content = (0,
|
|
319
|
+
const timer = (0,_timer__WEBPACK_IMPORTED_MODULE_5__.Timer)(document.getElementById("chatbot-status"))
|
|
320
|
+
const activity = (0,_controllers_ActivityController__WEBPACK_IMPORTED_MODULE_2__.ActivityController)({target})
|
|
321
|
+
const content = (0,_controllers_ContentController__WEBPACK_IMPORTED_MODULE_3__.ContentController)({target})
|
|
256
322
|
const controllers = [activity, content]
|
|
257
|
-
|
|
323
|
+
const draft = (0,_draft__WEBPACK_IMPORTED_MODULE_0__.Draft)()
|
|
324
|
+
let scroll = (0,_scroll__WEBPACK_IMPORTED_MODULE_4__.Scroll)(document.getElementById("chatbot-stream"))
|
|
258
325
|
|
|
259
326
|
const refreshScroll = () => {
|
|
260
327
|
const stream = document.getElementById("chatbot-stream")
|
|
261
328
|
if (!stream)
|
|
262
329
|
return
|
|
263
330
|
if (!scroll || scroll.parentEl !== stream)
|
|
264
|
-
scroll = (0,
|
|
331
|
+
scroll = (0,_scroll__WEBPACK_IMPORTED_MODULE_4__.Scroll)(stream)
|
|
265
332
|
}
|
|
266
333
|
|
|
267
334
|
const enhance = (root = document.body) => {
|
|
268
335
|
refreshScroll()
|
|
269
336
|
controllers.forEach((controller) => controller.enhance(root))
|
|
337
|
+
draft.restore()
|
|
270
338
|
}
|
|
271
339
|
|
|
272
340
|
const syncTimer = () => {
|
|
@@ -277,7 +345,7 @@ const Relay = () => {
|
|
|
277
345
|
timer.handle(status)
|
|
278
346
|
}
|
|
279
347
|
|
|
280
|
-
const fileUpload = (0,
|
|
348
|
+
const fileUpload = (0,_file_upload__WEBPACK_IMPORTED_MODULE_1__.FileUpload)({afterUpload: enhance})
|
|
281
349
|
|
|
282
350
|
const handleOobSwap = (event) => {
|
|
283
351
|
const elt = event.detail.elt || event.target
|
|
@@ -298,6 +366,7 @@ const Relay = () => {
|
|
|
298
366
|
return
|
|
299
367
|
if (fileUpload.blockSubmit(event))
|
|
300
368
|
return
|
|
369
|
+
draft.clear(event.target)
|
|
301
370
|
scroll?.force()
|
|
302
371
|
}
|
|
303
372
|
|
|
@@ -310,6 +379,7 @@ const Relay = () => {
|
|
|
310
379
|
const handleInput = (event) => {
|
|
311
380
|
if (!event.target.matches("#chat-composer textarea"))
|
|
312
381
|
return
|
|
382
|
+
draft.persist(event.target)
|
|
313
383
|
scroll?.force()
|
|
314
384
|
}
|
|
315
385
|
|