ymq
fcb7d1b744
fix: getID不带参数调用
2026-08-07 16:48:54 +08:00
ymq
24bc017e1f
fix: 所有id统一32字节 — init.py去掉[:16], DSPY文件改用getID(32)去import uuid
2026-08-07 16:47:50 +08:00
ymq
0fff825331
fix: save_tags.dspy media_tags id改为32字节 getID(32)
2026-08-07 16:40:38 +08:00
ymq
608be82e68
fix: save_tags.dspy uuid→getID(16),DSPY禁止import,改用预置getID
2026-08-07 16:31:57 +08:00
ymq
417ea70a34
fix: save_tags.dspy 缺少 import uuid,导致 uuid.uuid4() 报错无法写入标签
2026-08-07 15:46:31 +08:00
ymq
1c03bb8071
fix: 标签保存后不再整页刷新,改为关闭弹窗+AJAX刷新卡片面板
2026-08-07 15:38:20 +08:00
000b3c0b10
fix: tag save blocks browser — capture 'this' before fetch (then callback 'this' is window, causing infinite loop)
2026-08-06 16:06:43 +08:00
26c8d6b77a
fix: save_tags return empty — fetch URL missing _webbricks_=1 (dspy returns HTML without it)
2026-08-06 15:55:10 +08:00
fb706f72d9
bugfix
2026-08-06 14:59:55 +08:00
bbf5b5f257
fix: tag save — close popup + location.reload (PopupWindow.clear_widgets breaks popup)
2026-08-06 14:45:26 +08:00
87ce210b58
fix: save_tags shows close button to dismiss popup after result
2026-08-06 14:37:11 +08:00
13b36df084
fix: tag save → backend save_tags.dspy returns widget, replaces popup content (no reload)
2026-08-06 14:14:42 +08:00
ee0a563e92
fix: KB card buttons stick to bottom via filler; tag save uses reload instead of fragile DOM refresh
2026-08-06 14:09:30 +08:00
e2d17b630b
fix: rename form use 'value' not 'defaultValue' for Form pre-fill
2026-08-06 13:57:05 +08:00
14c72e29d7
fix: index.ui new_kb_form URL missing /rag/ prefix → use relative path
2026-08-06 13:55:35 +08:00
09336b3c10
fix: tag_list_panel use cheight instead of filler for proper scrolling
2026-08-06 13:51:57 +08:00
861cf0af19
fix: all popups close before action (rename, delete, tags)
2026-08-06 13:48:51 +08:00
017500e147
fix: storage_stats join knowledge_bases for org-consistent doc count; clean orphaned docs
2026-08-06 13:44:57 +08:00
70f8f27abb
fix: kb_list only show org KBs (no NULL); tag_form close popup before refresh (remove alert)
2026-08-06 13:40:30 +08:00
7b99ebd16e
fix: add import os in delete_kb; kb_list org filter + DynamicColumn layout
2026-08-06 13:37:30 +08:00
52bdc7ce40
fix: delete_kb returns urlwidget (not JSON), so bricks can render redirect to index.ui
2026-08-05 19:03:14 +08:00
d9e1e77341
refactor: delete KB uses PopupWindow confirm form instead of JS confirm (no inline script)
2026-08-05 18:20:23 +08:00
ee4bf7548a
fix: delete script — assign JSON-safe name to JS var, no \n in string, no inline concat
2026-08-05 18:12:27 +08:00
c0c5ba831f
fix: escape KB name directly for JS single-quoted string, bypassing json.dumps double-quote entanglement
2026-08-05 17:40:35 +08:00
ce457babe7
fix: rename_kb returns json.dumps; delete btn uses pre-computed safe_name
2026-08-05 17:30:39 +08:00
e1f0c406ac
fix(kb): escape namestr with json.dumps in delete button JS to prevent SyntaxError
...
Root cause: namestr directly concatenated into JS confirm() string broke
when KB name contained quotes or special chars. The SyntaxError prevented
event.stopPropagation() from executing, which caused the card click to
also fire (navigating to detail.ui).
2026-08-05 17:15:13 +08:00
5de0a87708
fix(kb): rename 403 (Jinja->Python), delete JS error (stopPropagation), card click restore
...
- rename_kb_form.dspy: {{entire_url(...)}} Jinja syntax invalid in .dspy, use Python entire_url()
- kb_list.dspy: card VBox click restored (navigates to detail.ui)
- rename button: add event.stopPropagation() script before urlwidget
- delete button: add event.stopPropagation(), use json.dumps for namestr safety
2026-08-05 16:57:08 +08:00
37fc233df2
fix: handle NULL org_id in rename/delete KB handlers (OR org_id IS NULL)
2026-08-05 16:46:16 +08:00
8f1f75c947
feat(kb): add rename and delete knowledge base
...
- kb_list.dspy: add per-card rename (popup form) and delete (confirm+cascade) buttons
- rename_kb_form.dspy: popup form with name + description fields
- rename_kb.dspy: UPDATE knowledge_bases handler
- delete_kb.dspy: cascade delete (docs, chunks, media_tags, tags, files) handler
2026-08-05 16:27:32 +08:00
1dd59f7caa
feat(tags): multi-select tag list + dedup create + tag_sync endpoint
...
- tag_form.dspy: rewrite as multi-select checkbox list (clickable rows with toggle)
+ input field for new tag with + button (calls /api/tag/create with dedup)
+ submit button calls /api/tag/sync to sync media_tags
+ dynamically add new tag row to list after creation
- media_cards.dspy: read tags from media_tags table instead of metadata
- init.py: tag_create_handler adds dedup (check existing by kb_id+name)
- init.py: new tag_sync_handler (full sync: delete old + insert selected)
- config.json: add /api/tag/sync route
2026-08-05 15:36:44 +08:00
371afae84a
fix: file list action buttons spacing 6px->14px; drop analysis button; legacy /api/doc/upload now saves via FileStorage (flat files/ layout caused 404)
2026-08-05 12:17:25 +08:00
267fd276c5
fix: escape literal % in LIKE patterns (aiomysql %-format conflict -> TypeError)
2026-08-05 11:55:18 +08:00
3cb591ed92
feat: detail.ui face/voiceprint media card popups (DynamicColumn, image/audio playback) + tag buttons on cards and file list rows (tag_form.dspy -> add_tag.dspy, refresh media panel)
2026-08-05 10:55:50 +08:00
6878b58c95
refactor: kb cards via module-local kb_list.dspy (drop /api/kb/list dep); detail.ui file list -> filler+VScrollPanel no fixed height
2026-08-04 16:14:45 +08:00
548fc6013e
feat: per-org storage quota enforcement — org_storage_limits table, upload rejection, UI display
2026-08-04 15:36:53 +08:00
f160589370
bugfix
2026-08-04 14:40:18 +08:00
020c84bdfc
bugfix
2026-08-04 14:34:10 +08:00
0bd425a2aa
feat: put search results in VScrollPanel with filler layout (no fixed height)
2026-08-04 14:04:07 +08:00
7993b186da
fix: stop double-encoding keyword - pass raw value as httpcall params (CRUD style); defensive unquote fallback in dspy for legacy cached UI
2026-08-04 11:33:52 +08:00
dfad26d3c7
feat: hybrid search - add keyword LIKE recall merged with vector results, mark kw hits
2026-08-03 19:19:32 +08:00
bd03743c6f
fix: use resultValue() not getValue() for kb selector - getValue returns object, broke kb_id in URL
2026-08-03 18:52:34 +08:00
2d4ff6a19f
debug: log incoming params_kw in search_result.dspy
2026-08-03 18:34:50 +08:00
84448259e2
fix: GPU URLs need :10443, create VDB collection before upsert, align VDB id with chunk id
2026-08-03 17:02:06 +08:00
598f5c5c23
sync: add batch_ingest.dspy from test env
2026-08-03 10:40:25 +08:00
8ab8987776
chore: remove debug traces from upload_file.dspy
2026-07-31 18:59:15 +08:00
5bf3ef3822
trace: check if DBPools blocks in background task
2026-07-31 18:56:51 +08:00
2f7acc8120
debug: trace background_reco execution in upload_file.dspy
2026-07-31 18:53:31 +08:00
8dad4e9b5e
feat: async upload — return immediately, ingest in background
2026-07-31 18:17:47 +08:00
cdc02e31e4
fix: search.ui - call buildUrlwidgetHandler result to actually fire HTTP request
2026-07-31 16:35:10 +08:00
7792aa913e
fix: search.ui - code→UiCode widgettype + bricks.app.root→this.parent for urlwidget sub-page
2026-07-31 16:14:53 +08:00