374 Commits

Author SHA1 Message Date
7f5be99887 feat(menu): update credit limit menu to point to new hub.ui 2026-05-30 21:01:13 +08:00
654c89917c bugfix 2026-05-29 22:26:02 +08:00
f531b71e02 fix: wrap Tabular in VBox with cheight for proper scrolling 2026-05-29 22:09:57 +08:00
4a8f52a3f1 chore: remove runtime-generated files from git tracking
Remove build.sh generated symlinks and runtime files from git:
- conf/config.json (runtime config)
- stop.sh, start.sh, sage.service (runtime scripts)
- wwwroot/* symlinks (module links created by build.sh)

These files are already in .gitignore and should not be tracked.
2026-05-29 22:00:12 +08:00
78da8bd3d9 feat: add module_cache config section for rbac/pricing/uapi cache control 2026-05-29 17:58:34 +08:00
caccd22893 feat: add dapi and uapi module entries to global menu 2026-05-29 13:15:22 +08:00
9855eb7ba7 fix: remove AliSMS override of sms_engine, let smssend module handle SMS 2026-05-29 11:12:08 +08:00
5cb9cef2a9 fix: remove Jinja2 condition from accounting menu items (Jinja2 not effective at menu render time) 2026-05-29 00:10:50 +08:00
ed17dc0c86 feat: add credit limit menu entry to global menu 2026-05-28 22:39:54 +08:00
459f00d995 fix: remove hardcoded dark colors from global_menu and mainpage 2026-05-28 16:14:02 +08:00
60033946ce fix: rbac menu URL from /rbac/index.ui (nonexistent) to /rbac 2026-05-28 15:59:12 +08:00
ec33e43971 feat: add cpcc RBAC permissions to load_path.py (55 entries) 2026-05-28 15:34:24 +08:00
f1447e737a fix: move reallife_asset menu item outside {% if get_user() %} block for universal visibility 2026-05-28 15:28:54 +08:00
4111c72474 feat: add reallife_asset to global menu 2026-05-28 15:23:28 +08:00
01d2385a26 i18n: add new dashboard strings (暂无数据, 排名, 用户金额TOP5, etc.) 2026-05-28 14:53:29 +08:00
30ef2d133c fix: remove hardcoded dark theme colors from index.ui, use CSS classes for theme support 2026-05-28 14:13:55 +08:00
1117dc7b67 i18n: comprehensive translation update - 921 strings across all modules
- Scanned ALL .ui/.json/.dspy files using regex + JSON parsing
  (regex fallback handles template syntax that breaks JSON parser)
- Covers: dashboard_for_sage, menu labels, CRUD headers/tools,
  llmage, accounting, appbase, charge, cpcc, dapi, discount,
  filemgr, hermes-web-cli, msp, platformbiz, pricing, rag, rbac,
  unipay, uapi, and sage core
- zh: 921 entries (Chinese strings as key=value)
- en: 921 entries (Chinese->English translations, preserves existing 227)
- ko: 921 entries (Korean translations, was empty)
- jp: 921 entries (Japanese translations, was empty)
- Generated msg.txt (backend MiniI18N format) in both i18n/ and
  wwwroot/i18n/ directories
- Dashboard translations: 仪表盘, 快捷入口, 今日活跃用户,
  今日交易金额, 数据看板, 在线用户, etc.
- Menu translations: 供应链管理, 平台业务, 折扣管理, 用户与权限,
  算力中心管理, 计费管理, 运维管理, LLM模型管理, etc.
- CRUD: all table headers, tool labels, field labels translated
2026-05-28 14:12:22 +08:00
7ea16d65ce fix: add language switch and window dock buttons to shell top bar
Restored from old top.ui:
- i18n/language.ui: language switcher
- Svg app-dock: show_windows_panel for minimized windows
2026-05-28 13:41:56 +08:00
f71c5f737b i18n: scan all .ui/.dspy files, complete translations for zh/en/ko/jp
- Scanned 193 .ui files across sage/wwwroot/ and pkgs/*/wwwroot/
- Extracted 169 unique otext/label strings
- Generated msg.txt (backend MiniI18N format) for all 4 languages
- Updated i18n.json (frontend reference) for all 4 languages
- zh: 169 entries (Chinese strings as key=value)
- en: 227 entries (Chinese→English translations + existing)
- ko: 169 entries (Korean translations)
- jp: 169 entries (Japanese translations)
- Covered modules: cpcc, dapi, discount, filemgr, hermes-web-cli,
  llmage, msp, platformbiz, pricing, rag, rbac, unipay, accounting,
  appbase, charge, sage core
2026-05-28 11:23:05 +08:00
3ced7485f4 feat: 集成reallife_asset模块到Sage
- app/sage.py: 添加 load_reallife_asset() 导入和调用
- build.sh: 安装循环中加入 reallife_asset
2026-05-28 11:19:13 +08:00
c40492b320 feat(global_menu): restore supplychain module 2026-05-28 11:18:20 +08:00
9f7633f572 fix: remove supplychain from global_menu (not in Sage) 2026-05-28 11:07:57 +08:00
9b710966d2 fix: remove build.sh-managed symlinks from git, clean global_menu
- Remove 55 symlinks/module files from git tracking (build.sh creates them)
- Add .gitignore rules for all build.sh module symlinks
- Remove 7 non-Sage modules from global_menu.ui:
  unified_dashboard, integrated_crm_app, customer_management,
  opportunity_management, contract_management, financial_management,
  workflow_approval
- Keep only Sage modules: dashboard, product_management, supplychain,
  pricing, discount, llmage, rag, cpcc, msp, platformbiz, accounting, rbac
2026-05-28 11:06:35 +08:00
08feced001 fix: remove non-sage modules (cms, hermes-web-cli) from global_menu, use comma-prefix pattern for JSON safety 2026-05-28 10:38:38 +08:00
ac64a9b376 fix: remove id from urlwidget container (belongs in global_menu.ui) 2026-05-28 10:35:08 +08:00
cd2fbfa89a bugfix 2026-05-28 10:31:59 +08:00
8119e7dbd9 fix: relative symlinks + imgs/msp.svg for production compatibility
- Convert all 21 wwwroot symlinks from absolute to relative paths
  - Internal pkgs: ../pkgs/MODULE/wwwroot
  - External repos: ../../MODULE/wwwroot
- Add imgs/msp.svg logo placeholder (replaces missing msp.png)
- Remove stale shell.ui symlink (index.ui is the shell now)
- Update index.ui to reference msp.svg instead of msp.png
2026-05-27 19:11:45 +08:00
3481d80f24 feat: track wwwroot/ in git for simpler deployment
Remove wwwroot/ from .gitignore so production deployment is just git pull.

Changes:
- wwwroot/index.ui: Shell layout with sidebar and main content
- wwwroot/global_menu.ui: Global navigation menu (22 modules)
- wwwroot/dashboard_for_sage/: Dashboard widgets and stats
- wwwroot/product_management/: Product management pages
- Module symlinks (accounting, rbac, bricks, etc.)

Ignored: .DS_Store, *.bak, tmp/
2026-05-27 19:00:46 +08:00
acb5eb29f9 Add deploy_shell.sh for deploying wwwroot shell files
This script copies index.ui and global_menu.ui from git repo
to production wwwroot (which is gitignored).
2026-05-27 18:53:41 +08:00
da47ad0cdb bugfix 2026-05-27 18:50:01 +08:00
beb7d2f646 bugfix 2026-05-27 17:01:56 +08:00
8a3b3a4b2b bugfix 2026-05-27 16:22:10 +08:00
d6fdfb2a51 bugfix 2026-05-27 16:15:03 +08:00
6e09d7c65e bugfix 2026-05-27 16:12:26 +08:00
147b5e94c3 bugfix 2026-05-27 16:07:58 +08:00
6c3ff0c7aa refactor(models): convert to json format per database-table-definition-spec 2026-05-27 13:23:31 +08:00
cb8910cb40 revert: remove cache_sync references from sage.py
- Remove 'start_cache_sync' from rbac.init import
- Remove 'add_startup' import
- Remove 'add_startup(start_cache_sync)' call from init()
- This reverts the cache_sync integration that caused session data loss
2026-05-26 18:31:25 +08:00
bc5e0f5e82 fix: use add_startup() for cache_sync instead of asyncio.create_task
- init() is called synchronously before the event loop starts
  (configuredServer.py:36), so asyncio.create_task() fails with
  'no running event loop'
- Use ahserver's add_startup() which appends to app.on_startup
  and runs after the loop is ready (configuredServer.py:118)
- Remove unused asyncio import
2026-05-26 17:16:18 +08:00
5cbd8535dd bugfix 2026-05-26 16:15:37 +08:00
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
63ee4b324d fix: add local dev env vars and fix DB password format
- start.sh: add placeholder env vars (ALIPAY_PUB, BAIDU_SMS_*) for local dev
- conf/config.json: fix DB password to AES-encoded format
2026-05-26 09:27:32 +08:00
9ac5ae0830 revert: remove scripts moved to rbac module 2026-05-26 09:12:11 +08:00
b589e9f155 fix: pass empty {} ns param to sqlExe() calls 2026-05-26 09:05:35 +08:00
2d2dad84d0 feat: add RBAC scripts — list_path_roles.py and find_unauth_files.py 2026-05-26 08:55:49 +08:00