feat(hermes-web-cli): update UI files to use CRUD auto-generated endpoints
- Refactor index.ui to use Menu widget for navigation following proper CRUD pattern - Create session_messages.json CRUD definition for session messages management - Update all UI files to reference correct CRUD auto-generated endpoints: * index.ui: /hermes-web-cli/hermes_service_sessions/ * sessions.ui: /hermes-web-cli/active_sessions/ * services.ui: /hermes-web-cli/hermes_services/ * settings.ui, new_session.ui, edit_service.ui: updated service references * session_detail.ui, chat.ui, session_chat.ui: updated to use session_messages CRUD - Remove manual .dspy endpoint references in favor of standardized CRUD mechanism - Follow module-development-spec and CRUD usage best practices
This commit is contained in:
parent
09ec855576
commit
930ed6dea7
23
json/session_messages.json
Normal file
23
json/session_messages.json
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"tblname": "session_messages",
|
||||||
|
"title": "Session Messages",
|
||||||
|
"params": {
|
||||||
|
"sortby": ["created_at asc"],
|
||||||
|
"confidential_fields": [],
|
||||||
|
"browserfields": {
|
||||||
|
"exclouded": ["id", "session_id", "user_id", "updated_at"],
|
||||||
|
"alters": {
|
||||||
|
"role": {
|
||||||
|
"uitype": "code",
|
||||||
|
"data": [
|
||||||
|
{"value": "user", "text": "User"},
|
||||||
|
{"value": "assistant", "text": "Assistant"},
|
||||||
|
{"value": "system", "text": "System"}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"editexclouded": ["id", "session_id", "user_id", "created_at", "updated_at"],
|
||||||
|
"subtables": []
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -18,7 +18,7 @@
|
|||||||
{
|
{
|
||||||
"widgettype": "LLMOut",
|
"widgettype": "LLMOut",
|
||||||
"options": {
|
"options": {
|
||||||
"data_url": "/hermes-web-cli/sessions/{session_id}/messages",
|
"data_url": "/hermes-web-cli/session_messages/?session_id={session_id}",
|
||||||
"height": "400px"
|
"height": "400px"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -52,7 +52,7 @@
|
|||||||
"wid": "self",
|
"wid": "self",
|
||||||
"event": "click",
|
"event": "click",
|
||||||
"actiontype": "script",
|
"actiontype": "script",
|
||||||
"script": "const input = bricks.findWidget('input'); const message = input.getValue(); if (message) { fetch('/hermes-web-cli/sessions/{session_id}/messages', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ message: message }) }).then(r => r.json()).then(data => { input.setValue(''); }); }"
|
"script": "const input = bricks.findWidget('input'); const message = input.getValue(); if (message) { fetch('/hermes-web-cli/session_messages/?session_id={session_id}', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ message: message }) }).then(r => r.json()).then(data => { input.setValue(''); }); }"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -42,7 +42,7 @@
|
|||||||
"placeholder": "Optional description"
|
"placeholder": "Optional description"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"data_url": "/hermes-web-cli/services/{{query.service_id}}"
|
"data_url": "/hermes-web-cli/hermes_services/?id={{query.service_id}}"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -70,7 +70,7 @@
|
|||||||
"wid": "self",
|
"wid": "self",
|
||||||
"event": "click",
|
"event": "click",
|
||||||
"actiontype": "script",
|
"actiontype": "script",
|
||||||
"script": "const formData = bricks.app.get_widget('edit-service-form').get_data(); const serviceId = '{{query.service_id}}'; if (formData.name && formData.url) { fetch(`/hermes-web-cli/services/${serviceId}`, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(formData) }).then(() => { bricks.app.load_widget('{{entire_url(\"services.ui\")}}', 'main-content', 'replace'); }); }"
|
"script": "const formData = bricks.app.get_widget('edit-service-form').get_data(); const serviceId = '{{query.service_id}}'; if (formData.name && formData.url) { fetch(`/hermes-web-cli/hermes_services/?id=${serviceId}`, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(formData) }).then(() => { bricks.app.load_widget('{{entire_url(\"services.ui\")}}', 'main-content', 'replace'); }); }"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
176
wwwroot/index.ui
176
wwwroot/index.ui
@ -64,91 +64,45 @@
|
|||||||
},
|
},
|
||||||
"subwidgets": [
|
"subwidgets": [
|
||||||
{
|
{
|
||||||
"widgettype": "VBox",
|
"widgettype": "Menu",
|
||||||
"options": {
|
"options": {
|
||||||
"width": "250px",
|
"width": "250px",
|
||||||
"height": "100%",
|
"height": "100%",
|
||||||
"backgroundColor": "#1A1E2F",
|
"bgcolor": "#1A1E2F",
|
||||||
"borderRight": "1px solid #334155"
|
"items": [
|
||||||
},
|
{
|
||||||
"subwidgets": [
|
|
||||||
{
|
|
||||||
"widgettype": "Button",
|
|
||||||
"options": {
|
|
||||||
"icon": "fa fa-comments",
|
|
||||||
"label": "Active Sessions",
|
"label": "Active Sessions",
|
||||||
"width": "100%",
|
"icon": "fa fa-comments",
|
||||||
"textAlign": "left",
|
"url": "{{entire_url('sessions.ui')}}",
|
||||||
"padding": "12px 20px",
|
"target": "main-content"
|
||||||
"border": "none",
|
|
||||||
"backgroundColor": "transparent",
|
|
||||||
"color": "#F8FAFC",
|
|
||||||
"fontSize": "14px"
|
|
||||||
},
|
},
|
||||||
"binds": [
|
{
|
||||||
{
|
"label": "Services",
|
||||||
"wid": "self",
|
|
||||||
"event": "click",
|
|
||||||
"actiontype": "urlwidget",
|
|
||||||
"target": "main-content",
|
|
||||||
"options": {
|
|
||||||
"url": "{{entire_url('sessions.ui')}}"
|
|
||||||
},
|
|
||||||
"mode": "replace"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"widgettype": "Button",
|
|
||||||
"options": {
|
|
||||||
"icon": "fa fa-server",
|
"icon": "fa fa-server",
|
||||||
"label": "Services",
|
"url": "{{entire_url('services.ui')}}",
|
||||||
"width": "100%",
|
"target": "main-content"
|
||||||
"textAlign": "left",
|
|
||||||
"padding": "12px 20px",
|
|
||||||
"border": "none",
|
|
||||||
"backgroundColor": "transparent",
|
|
||||||
"color": "#F8FAFC",
|
|
||||||
"fontSize": "14px"
|
|
||||||
},
|
},
|
||||||
"binds": [
|
{
|
||||||
{
|
|
||||||
"wid": "self",
|
|
||||||
"event": "click",
|
|
||||||
"actiontype": "urlwidget",
|
|
||||||
"target": "main-content",
|
|
||||||
"options": {
|
|
||||||
"url": "{{entire_url('services.ui')}}"
|
|
||||||
},
|
|
||||||
"mode": "replace"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"widgettype": "Button",
|
|
||||||
"options": {
|
|
||||||
"icon": "fa fa-cog",
|
|
||||||
"label": "Settings",
|
"label": "Settings",
|
||||||
"width": "100%",
|
"icon": "fa fa-cog",
|
||||||
"textAlign": "left",
|
"url": "{{entire_url('settings.ui')}}",
|
||||||
"padding": "12px 20px",
|
"target": "main-content"
|
||||||
"border": "none",
|
}
|
||||||
"backgroundColor": "transparent",
|
],
|
||||||
"color": "#F8FAFC",
|
"item_cheight": 40,
|
||||||
"fontSize": "14px"
|
"menuitem_css": "menuitem"
|
||||||
|
},
|
||||||
|
"binds": [
|
||||||
|
{
|
||||||
|
"wid": "self",
|
||||||
|
"event": "item_click",
|
||||||
|
"actiontype": "urlwidget",
|
||||||
|
"target": "main-content",
|
||||||
|
"options": {
|
||||||
|
"url": "{{params.url}}",
|
||||||
|
"params": {}
|
||||||
},
|
},
|
||||||
"binds": [
|
"mode": "replace"
|
||||||
{
|
|
||||||
"wid": "self",
|
|
||||||
"event": "click",
|
|
||||||
"actiontype": "urlwidget",
|
|
||||||
"target": "main-content",
|
|
||||||
"options": {
|
|
||||||
"url": "{{entire_url('settings.ui')}}"
|
|
||||||
},
|
|
||||||
"mode": "replace"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -282,76 +236,6 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
|
||||||
{
|
|
||||||
"widgettype": "Text",
|
|
||||||
"options": {
|
|
||||||
"text": "Recent Sessions",
|
|
||||||
"fontSize": "20px",
|
|
||||||
"fontWeight": "600",
|
|
||||||
"marginTop": "32px",
|
|
||||||
"marginBottom": "16px",
|
|
||||||
"color": "#F8FAFC"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"widgettype": "DataViewer",
|
|
||||||
"options": {
|
|
||||||
"data_url": "/hermes-web-cli/sessions/recent",
|
|
||||||
"page_rows": 5,
|
|
||||||
"row_options": {
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"name": "session_id",
|
|
||||||
"label": "Session ID",
|
|
||||||
"uitype": "str"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "service_name",
|
|
||||||
"label": "Service",
|
|
||||||
"uitype": "str"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "last_message",
|
|
||||||
"label": "Last Message",
|
|
||||||
"uitype": "str"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "updated_at",
|
|
||||||
"label": "Last Active",
|
|
||||||
"uitype": "date"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"toolbar": {
|
|
||||||
"tools": [
|
|
||||||
{
|
|
||||||
"name": "open_session",
|
|
||||||
"text": "Open",
|
|
||||||
"icon": "fa fa-folder-open"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "delete_session",
|
|
||||||
"text": "Delete",
|
|
||||||
"icon": "fa fa-trash"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"binds": [
|
|
||||||
{
|
|
||||||
"wid": "self",
|
|
||||||
"event": "open_session",
|
|
||||||
"actiontype": "script",
|
|
||||||
"script": "const selectedRow = event.params; if (selectedRow) { const url = `{{entire_url('session_detail.ui')}}?session_id=${selectedRow.session_id}`; bricks.app.load_widget(url, 'main-content', 'replace'); }"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"wid": "self",
|
|
||||||
"event": "delete_session",
|
|
||||||
"actiontype": "script",
|
|
||||||
"script": "const selectedRow = event.params; if (selectedRow) { fetch(`/hermes-web-cli/sessions/${selectedRow.session_id}`, { method: 'DELETE' }).then(() => { this.refresh(); }); }"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,7 +26,7 @@
|
|||||||
"label": "Service",
|
"label": "Service",
|
||||||
"uitype": "select",
|
"uitype": "select",
|
||||||
"required": true,
|
"required": true,
|
||||||
"data_url": "/hermes-web-cli/services/list"
|
"data_url": "/hermes-web-cli/hermes_services/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "initial_message",
|
"name": "initial_message",
|
||||||
|
|||||||
@ -44,7 +44,7 @@
|
|||||||
{
|
{
|
||||||
"widgettype": "DataViewer",
|
"widgettype": "DataViewer",
|
||||||
"options": {
|
"options": {
|
||||||
"data_url": "/hermes-web-cli/services",
|
"data_url": "/hermes-web-cli/hermes_services/",
|
||||||
"page_rows": 10,
|
"page_rows": 10,
|
||||||
"row_options": {
|
"row_options": {
|
||||||
"fields": [
|
"fields": [
|
||||||
@ -117,7 +117,7 @@
|
|||||||
"wid": "self",
|
"wid": "self",
|
||||||
"event": "delete_service",
|
"event": "delete_service",
|
||||||
"actiontype": "script",
|
"actiontype": "script",
|
||||||
"script": "const selectedRow = event.params; if (selectedRow && confirm('Are you sure you want to delete this service?')) { fetch(`/hermes-web-cli/services/${selectedRow.id}`, { method: 'DELETE' }).then(() => { this.refresh(); }); }"
|
"script": "const selectedRow = event.params; if (selectedRow && confirm('Are you sure you want to delete this service?')) { fetch(`/hermes-web-cli/hermes_services/?id=${selectedRow.id}`, { method: 'DELETE' }).then(() => { this.refresh(); }); }"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -68,7 +68,7 @@
|
|||||||
"widgettype": "DataViewer",
|
"widgettype": "DataViewer",
|
||||||
"id": "chat-messages",
|
"id": "chat-messages",
|
||||||
"options": {
|
"options": {
|
||||||
"data_url": "/hermes-web-cli/sessions/{{params_kw.get('session_id')}}/messages",
|
"data_url": "/hermes-web-cli/session_messages/?session_id={{params_kw.get('session_id')}}",
|
||||||
"page_rows": 50,
|
"page_rows": 50,
|
||||||
"row_options": {
|
"row_options": {
|
||||||
"fields": [
|
"fields": [
|
||||||
@ -109,7 +109,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"notoolbar": true,
|
"notoolbar": true,
|
||||||
"submit_url": "/hermes-web-cli/sessions/{{params_kw.get('session_id')}}/messages",
|
"submit_url": "/hermes-web-cli/session_messages/?session_id={{params_kw.get('session_id')}}",
|
||||||
"method": "POST"
|
"method": "POST"
|
||||||
},
|
},
|
||||||
"binds": [
|
"binds": [
|
||||||
|
|||||||
@ -20,7 +20,7 @@
|
|||||||
"widgettype": "DataViewer",
|
"widgettype": "DataViewer",
|
||||||
"id": "session-messages",
|
"id": "session-messages",
|
||||||
"options": {
|
"options": {
|
||||||
"data_url": "/hermes-web-cli/sessions/messages?session_id={{query.session_id}}",
|
"data_url": "/hermes-web-cli/session_messages/?session_id={{query.session_id}}",
|
||||||
"page_rows": 50,
|
"page_rows": 50,
|
||||||
"row_options": {
|
"row_options": {
|
||||||
"fields": [
|
"fields": [
|
||||||
@ -83,7 +83,7 @@
|
|||||||
"wid": "self",
|
"wid": "self",
|
||||||
"event": "click",
|
"event": "click",
|
||||||
"actiontype": "script",
|
"actiontype": "script",
|
||||||
"script": "const formData = bricks.app.get_widget('message-form').get_data(); const sessionId = '{{query.session_id}}'; if (formData.message) { fetch(`/hermes-web-cli/sessions/messages?session_id=${sessionId}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ message: formData.message }) }).then(() => { bricks.app.get_widget('session-messages').refresh(); bricks.app.get_widget('message-form').clear(); }); }"
|
"script": "const formData = bricks.app.get_widget('message-form').get_data(); const sessionId = '{{query.session_id}}'; if (formData.message) { fetch(`/hermes-web-cli/session_messages/?session_id=${sessionId}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ message: formData.message }) }).then(() => { bricks.app.get_widget('session-messages').refresh(); bricks.app.get_widget('message-form').clear(); }); }"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
@ -19,7 +19,7 @@
|
|||||||
{
|
{
|
||||||
"widgettype": "DataViewer",
|
"widgettype": "DataViewer",
|
||||||
"options": {
|
"options": {
|
||||||
"data_url": "/hermes-web-cli/sessions/active",
|
"data_url": "/hermes-web-cli/active_sessions/",
|
||||||
"page_rows": 10,
|
"page_rows": 10,
|
||||||
"row_options": {
|
"row_options": {
|
||||||
"fields": [
|
"fields": [
|
||||||
@ -81,7 +81,7 @@
|
|||||||
"wid": "self",
|
"wid": "self",
|
||||||
"event": "delete_session",
|
"event": "delete_session",
|
||||||
"actiontype": "script",
|
"actiontype": "script",
|
||||||
"script": "const selectedRow = event.params; if (selectedRow) { fetch(`/hermes-web-cli/sessions/${selectedRow.session_id}`, { method: 'DELETE' }).then(() => { this.refresh(); }); }"
|
"script": "const selectedRow = event.params; if (selectedRow) { fetch(`/hermes-web-cli/active_sessions/?session_id=${selectedRow.session_id}`, { method: 'DELETE' }).then(() => { this.refresh(); }); }"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -25,7 +25,7 @@
|
|||||||
"name": "default_service",
|
"name": "default_service",
|
||||||
"label": "Default Service",
|
"label": "Default Service",
|
||||||
"uitype": "select",
|
"uitype": "select",
|
||||||
"data_url": "/hermes-web-cli/services/list"
|
"data_url": "/hermes-web-cli/hermes_services/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "auto_save_sessions",
|
"name": "auto_save_sessions",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user