Compare commits

...

7 Commits

Author SHA1 Message Date
46bc814fdc feat: replace index.ui with shell left-right layout, add missing routes for dashboard widgets and module index.ui files 2026-05-26 15:52:45 +08:00
8db5e982fa revert: restore original DB password in config.json (previous change was accidental) 2026-05-26 15:19:41 +08:00
6a27233d2d revert: remove llmage api paths from sage load_path.py
- These paths belong in llmage/scripts/load_path.py
- Follows the rule: module permissions in module's scripts/ directory
2026-05-26 14:32:50 +08:00
9fbc2b1dc6 feat: add llmage api endpoints to load_path.py for data_filter
- /llmage/api/llm_list.dspy logined
- /llmage/api/llm_create.dspy logined
- /llmage/api/llm_update.dspy logined
- /llmage/api/llm_delete.dspy logined
- /llmage/api/get_organizations.dspy logined
- /llmage/api/get_upapps.dspy logined
2026-05-26 14:28:57 +08:00
7dd5fa8234 feat: start cache_sync for cross-process cache invalidation
- sage.py: Import start_cache_sync from rbac.init
  - Call asyncio.create_task(start_cache_sync()) after load_rbac()
  - Starts Redis Pub/Sub subscription for cache invalidation messages
2026-05-26 13:52:23 +08:00
6af4770709 fix: add RBAC permissions for llmage /v1 API endpoints
Added logined permission entries for all v1 OpenAI-compatible endpoints:
- /v1/chat/completions (existing, was missing)
- /v1/models (existing, was missing)
- /v1/tasks (existing, was missing)
- /v1/video/generations (new)
- /v1/image/generations (new)

Each has both directory and index.dspy file entries.
2026-05-26 11:58:07 +08:00
b841f79e13 fix: add dark mode background (#0B1120) to public/mainpage/index.ui 2026-05-26 11:57:10 +08:00
5 changed files with 176 additions and 28 deletions

View File

@ -11,7 +11,7 @@ from bricks_for_python.init import load_pybricks
from ahserver.webapp import webapp from ahserver.webapp import webapp
from ahserver.serverenv import ServerEnv from ahserver.serverenv import ServerEnv
from ahserver.configuredServer import add_cleanupctx from ahserver.configuredServer import add_cleanupctx
from rbac.init import load_rbac from rbac.init import load_rbac, start_cache_sync
from pricing.init import load_pricing from pricing.init import load_pricing
from appbase.init import load_appbase from appbase.init import load_appbase
from llmage.init import load_llmage from llmage.init import load_llmage
@ -42,6 +42,7 @@ def init():
load_pybricks() load_pybricks()
load_appbase() load_appbase()
load_rbac() load_rbac()
asyncio.create_task(start_cache_sync())
load_accounting() load_accounting()
load_unipay() load_unipay()
load_platformbiz() load_platformbiz()

View File

@ -44,7 +44,7 @@
"kwargs":{ "kwargs":{
"user":"test", "user":"test",
"db":"sage", "db":"sage",
"password": "xGatnL1idCnFRCe4FaIWRQ==", "password":"SS+C1MDMJrslBwGzYIv3nQ==",
"charset": "utf8mb4", "charset": "utf8mb4",
"host":"db" "host":"db"
} }

View File

@ -74,6 +74,16 @@ paths="""/ any
/llmage/llm/add_llm.dspy logined /llmage/llm/add_llm.dspy logined
/llmage/show_llms_by_providers.ui logined /llmage/show_llms_by_providers.ui logined
/llmage/list_paging_catelog_llms.dspy logined /llmage/list_paging_catelog_llms.dspy logined
/llmage/v1/chat/completions logined
/llmage/v1/chat/completions/index.dspy logined
/llmage/v1/models logined
/llmage/v1/models/index.dspy logined
/llmage/v1/tasks logined
/llmage/v1/tasks/index.dspy logined
/llmage/v1/video/generations logined
/llmage/v1/video/generations/index.dspy logined
/llmage/v1/image/generations logined
/llmage/v1/image/generations/index.dspy logined
/public any /public any
/public/mainpage any /public/mainpage any
/public/mainpage/wish.webp any /public/mainpage/wish.webp any
@ -488,6 +498,7 @@ paths="""/ any
/dashboard_for_sage/accounting_errors.ui logined /dashboard_for_sage/accounting_errors.ui logined
/dashboard_for_sage/top_models_chart.ui logined /dashboard_for_sage/top_models_chart.ui logined
/accounting logined /accounting logined
/accounting/index.ui logined
/accounting/mybalance.dspy logined /accounting/mybalance.dspy logined
/accounting/open_reseller_provider_accounts.dspy logined /accounting/open_reseller_provider_accounts.dspy logined
/accounting/open_owner_accounts.dspy logined /accounting/open_owner_accounts.dspy logined
@ -631,6 +642,7 @@ paths="""/ any
/msp/mspcatelog/delete_mspcatelog.dspy logined /msp/mspcatelog/delete_mspcatelog.dspy logined
/msp/mspcatelog/new_mspcatelog.dspy logined /msp/mspcatelog/new_mspcatelog.dspy logined
/pricing logined /pricing logined
/pricing/index.ui logined
/pricing/pricing_program logined /pricing/pricing_program logined
/pricing/pricing_program/add_pricing_program.dspy logined /pricing/pricing_program/add_pricing_program.dspy logined
/pricing/pricing_program/index.ui logined /pricing/pricing_program/index.ui logined
@ -675,6 +687,7 @@ paths="""/ any
/dagflow/new_instance.ui logined /dagflow/new_instance.ui logined
/API.md any /API.md any
/rbac logined /rbac logined
/rbac/index.ui logined
/rbac/phone_login.dspy any /rbac/phone_login.dspy any
/rbac/refresh_userperm.dspy any /rbac/refresh_userperm.dspy any
/rbac/get_reseller.dspy owner.* /rbac/get_reseller.dspy owner.*
@ -937,6 +950,7 @@ paths="""/ any
/filemgr/folder/index.ui logined /filemgr/folder/index.ui logined
/filemgr/folder/new_folder.dspy logined /filemgr/folder/new_folder.dspy logined
/platformbiz logined /platformbiz logined
/platformbiz/index.ui logined
/platformbiz/agreement logined /platformbiz/agreement logined
/platformbiz/agreement/update_agreement.dspy logined /platformbiz/agreement/update_agreement.dspy logined
/platformbiz/agreement/add_agreement.dspy logined /platformbiz/agreement/add_agreement.dspy logined
@ -1111,6 +1125,24 @@ paths="""/ any
/product_management/product_category_tree logined /product_management/product_category_tree logined
/product_management/product_list logined /product_management/product_list logined
/product_management/product_type_config_list logined /product_management/product_type_config_list logined
/supplychain logined
/supplychain/index.ui logined
/shell_theme.css any
/shell_theme.js any
/global_menu.ui logined
/shell.ui logined
/index.ui any
/dashboard_for_sage/shell.ui logined
/dashboard_for_sage/global_menu.ui any
/dashboard_for_sage/shell_theme.css any
/dashboard_for_sage/shell_theme.js any
/dashboard_for_sage/stat_active_users.ui logined
/dashboard_for_sage/stat_new_users_month.ui logined
/dashboard_for_sage/stat_total_orgs.ui logined
/dashboard_for_sage/table_top_providers_amount.ui logined
/dashboard_for_sage/table_top_providers_count.ui logined
/dashboard_for_sage/table_top_users_count.ui logined
/dashboard_for_sage/chart_top_models.ui logined
""" """

View File

@ -1,27 +1,141 @@
{ {
"widgettype":"VBox", "widgettype": "VBox",
"options":{ "options": {
"width":"100%", "width": "100%",
"height":"100%" "height": "100%",
"bgcolor": "#0B1120"
}, },
"subwidgets":[ "subwidgets": [
{ {
"widgettype":"urlwidget", "widgettype": "HBox",
"options":{ "options": {
"url":"{{entire_url('top.ui')}}" "width": "100%",
"height": "56px",
"bgcolor": "#111827",
"borderBottom": "1px solid #334155",
"padding": "0 16px",
"alignItems": "center"
},
"subwidgets": [
{
"widgettype": "Button",
"id": "sidebar_toggle_btn",
"options": {
"label": "",
"bgcolor": "transparent",
"color": "#94A3B8",
"border": "1px solid #334155",
"borderRadius": "8px",
"width": "36px",
"height": "36px",
"padding": "0"
},
"binds": [
{
"wid": "self",
"event": "click",
"actiontype": "script",
"target": "self",
"script": "sageToggleSidebar()"
}
]
},
{
"widgettype": "Image",
"options": {
"url": "{{entire_url('/imgs/msp.png')}}",
"height": "32px",
"marginLeft": "12px"
} }
}, },
{ {
"widgettype":"urlwidget", "widgettype": "Title4",
"options":{ "options": {
"url":"{{entire_url('center.ui')}}" "text": "Sage",
"color": "#F1F5F9",
"fontWeight": "bold",
"marginLeft": "8px"
} }
}, },
{ {
"widgettype":"urlwidget", "widgettype": "Filler"
"options":{ },
"url":"{{entire_url('bottom.ui')}}" {
"widgettype": "Button",
"id": "theme_toggle_btn",
"options": {
"label": "",
"bgcolor": "transparent",
"color": "#94A3B8",
"border": "1px solid #334155",
"borderRadius": "50%",
"width": "36px",
"height": "36px",
"padding": "0"
},
"binds": [
{
"wid": "self",
"event": "click",
"actiontype": "script",
"target": "self",
"script": "sageToggleTheme()"
}
]
},
{
"widgettype": "urlwidget",
"options": {
"url": "{{entire_url('/rbac/user/user_panel.ui')}}"
} }
} }
] ]
},
{
"widgettype": "HBox",
"options": {
"width": "100%",
"height": "calc(100% - 56px)"
},
"subwidgets": [
{
"widgettype": "VBox",
"id": "sage_sidebar",
"options": {
"width": "240px",
"height": "100%",
"bgcolor": "#111827",
"borderRight": "1px solid #334155"
},
"subwidgets": [
{
"widgettype": "urlwidget",
"options": {
"url": "{{entire_url('global_menu.ui')}}"
}
}
]
},
{
"widgettype": "VBox",
"id": "sage_main_content",
"options": {
"css": "filler",
"height": "100%",
"padding": "24px"
},
"subwidgets": [
{
"widgettype": "Text",
"options": {
"text": "加载中...",
"fontSize": "16px",
"color": "#94A3B8"
}
}
]
}
]
}
]
} }

View File

@ -2,7 +2,8 @@
"widgettype": "HBox", "widgettype": "HBox",
"options":{ "options":{
"height": "100%", "height": "100%",
"width": "100%" "width": "100%",
"bgcolor": "#0B1120"
}, },
"subwidgets":[ "subwidgets":[
{ {