Commit Graph
705 Commits
Author SHA1 Message Date
OpenClaw Sub-agent 124ba0dbe5 fix: stop iOS Safari heuristic-caching stale UI pages
User reported 'still broken' on /ui/tags/ai/ right after the 20-card cap
shipped — the deployed HTML was correct (verified in-pod: 20 cards + View
all 363 posts) but Safari was serving a heuristically cached copy of the
previous template. UI HTML responses had no Cache-Control at all.

- core/middleware.NoCacheUiPagesMiddleware: /ui/* HTML → Cache-Control:
  no-cache, no-store, must-revalidate (+ Pragma/Expires). API untouched.
- tag_detail: defensive width:100% + box-sizing on .tags-page/.apple-card
2026-08-03 19:24:28 +10:00
OpenClaw Sub-agent bd30f83cff chore: update manifest image to 1.0.418 [skip ci] 2026-08-03 19:12:59 +10:00
OpenClaw Sub-agent adab6048d6 fix: tag detail caps resource cards at 20 per tab + View all link
technology tag has 511 posts — the Posts tab rendered all of them, creating a
multi-thousand-pixel page on mobile (looked broken / unusable). Each section
now renders the latest 20 cards, shows the true total in the section badge,
and links 'View all N …' to the respective list page. slice:20 on all four
resource types (links/posts/pages/collections).
2026-08-03 19:04:03 +10:00
github-actions[bot] 49c0c7fc95 chore: update manifest image to 1.0.417 [skip ci] 2026-08-03 08:31:14 +00:00
OpenClaw Sub-agent 44ca5b0aa4 fix: tag detail mobile — tabs no longer wrap to a lonely second row
- seg-tabs: single-row horizontal scroll (scrollbar hidden) as fallback,
  mobile-tuned padding/font/badge so all 4 tabs fit on 390px without clipping
- soft Delete button shadow (was visually louder than every other control)
- empty states: icon + centered text instead of the 'box-in-box' dashed frame
2026-08-03 18:25:56 +10:00
github-actions[bot] 3f0a0c393f chore: update manifest image to 1.0.416 [skip ci] 2026-08-03 07:41:08 +00:00
OpenClaw Sub-agent 53cf2cf1f9 feat: Apple-style redesign of Tags pages (list/detail/form/delete)
- tag_list: Apple design tokens, big header + New Tag pill, Tag Cloud card
  (local echarts vendor assets, no CDN), segmented sort control, search with
  icon, stable per-name hash colors on # prefix, count badges, responsive grid
- tag_detail: Apple header card (#name + usage badge + Edit/Delete pills),
  segmented resource tabs (Links/Posts/Pages/Collections), unified res cards
- tag_form / tag_confirm_delete: Apple card + pill buttons, centered delete
  warning
2026-08-03 17:36:44 +10:00
github-actions[bot] 5acfd5f434 chore: update manifest image to 1.0.415 [skip ci] 2026-08-03 07:21:00 +00:00
OpenClaw Sub-agent cdfe7beac8 feat: immersive lightbox preview + remove upload HUD
- Preview modal redesigned: fullscreen dark immersive lightbox (no white
  shell) — frosted gradient top bar (filename + position + close), centered
  media with soft shadow, frosted bottom bar (mime + blue Download pill),
  translucent circular nav buttons, mobile touch-swipe navigation
- Upload progress HUD (bottom-right panel) removed; upload progress now
  surfaces via the existing toast (x/y uploading → ✓ uploaded); cancelAll /
  hud state dropped
- CSS: lightbox-* replaces preview-* and upload-hud blocks; zero leftover refs
2026-08-03 17:16:04 +10:00
github-actions[bot] ca932b995e chore: update manifest image to 1.0.414 [skip ci] 2026-08-03 06:59:27 +00:00
OpenClaw Sub-agent e685aa6ed8 feat: file type filter + NFS-friendly thumbnail caching
- Files page: type filter chips (All/Image/Video/Audio/Text/Document/Archive/
  Other) with live counts, persisted in localStorage, upload/delete re-apply
  the active filter; header shows filtered/total count
- Cache headers: thumbnails + inline media get public,max-age=31536000,immutable
  (uuid stored_name is immutable); attachment downloads no-store — repeated
  views stop hammering the NFS uploads volume
- Thumbnails pre-generated on upload (form view + /api/files ViewSet +
  collection uploads) so the first page view is instant
- tests: 4 new cache/pre-gen cases (152 total)
2026-08-03 16:53:00 +10:00
github-actions[bot] 9f3a673e47 chore: update manifest image to 1.0.413 [skip ci] 2026-08-03 06:38:54 +00:00
OpenClaw Sub-agent e5fea82fd2 fix: drop drag&drop upload zone (button only) + direct-first R2 backfill download
- Collection detail: remove the 'Drag & drop images here' zone per 大哥;
  Upload button opens the hidden file picker, progress shown via toast
- migrate_image_storage: download via direct boto3 get_object first,
  presigned URL only as fallback (custom domain 403s for this account even
  with valid creds)
2026-08-03 16:34:14 +10:00
github-actions[bot] 87deeb8f24 chore: update manifest image to 1.0.412 [skip ci] 2026-08-03 06:26:31 +00:00
OpenClaw Sub-agent 030e0dc5af fix: backfill via presigned URL instead of direct boto3 API
Direct boto3 calls against the R2 S3 endpoint fail with
SignatureDoesNotMatch for this account, while presigned URLs served
through the R2 custom domain are the path the app already uses. Switch
migrate_image_storage download step to urlopen on the presigned URL.
2026-08-03 16:22:14 +10:00
github-actions[bot] ba58e0a64b chore: update manifest image to 1.0.411 [skip ci] 2026-08-03 06:12:45 +00:00
OpenClaw Sub-agent 366cc35ff5 feat: unify image storage onto files backend + Apple-style collections UI
- Image model: new file OneToOneField → FileUpload; get_url/get_thumbnail_url
  serve via /ui/files/ (Pillow thumbs) with legacy R2 fallback until backfill
- upload_images API now persists through _save_uploaded_file (files backend);
  deletes clean up FileUpload disk+record; collection destroy cascades files
- R2Storage.delete_file implemented (was silently missing → legacy R2 delete no-op)
- manage.py migrate_image_storage: idempotent R2→files backfill (dry-run default,
  --commit, optional --delete-r2); nothing removed from R2 without explicit flag
- Collections list: Apple design system, cover cards, hover actions, mobile-first
- Collection detail: native drag&drop upload (CDN Dropzone removed), lightbox with
  keyboard/swipe nav + description edit + delete, valid JSON image data via json_script
- Slideshow untouched (automatically uses new backend)
- tests: 10 new (upload/delete/URLs/backfill), 148 total green
2026-08-03 16:08:34 +10:00
github-actions[bot] 84ec8c2c24 chore: update manifest image to 1.0.410 [skip ci] 2026-08-03 04:41:26 +00:00
OpenClaw Sub-agent e45f4a5ed5 feat: 微信读书式阅读体验 — 主题/字体/字号/行距调节 + 阅读进度条
- Aa 阅读工具栏:5 种字体(系统/宋体/黑体/楷体/等宽)、字号 13-24px、三档行距、4 种主题(明亮/纸感/护眼绿/夜间),localStorage 持久化
- 正文阅读宽度收敛至 46rem(~736px),行高 1.85,符合长文阅读最佳实践
- 顶部阅读进度条 + 返回顶部按钮
- markdown.css 全量 CSS 变量化:表格/代码/引用/标题随主题联动,夜间模式自动适配
- 主题切换平滑过渡 + 面板弹出动画 + 页面淡入
- 移动端右下角 Aa FAB(与 TOC 按钮错开),面板全宽适配 390px
2026-08-03 14:37:06 +10:00
github-actions[bot] fa3265d848 chore: update manifest image to 1.0.409 [skip ci] 2026-08-02 12:49:43 +00:00
OpenClaw Sub-agent eeb8a4ae4e fix: add missing space between link-field/action-field class and hidden toggle
Template rendered 'action-fieldhidden' / 'link-fieldhidden' (no space) when
the hidden modifier applied, so:
- Tailwind .hidden class never applied -> Discord action card visible on
  the new-link page's default Link tab
- JS querySelectorAll('.action-field') failed to match -> could not hide it

Root cause: '{% if %}...{% endif %}' directly appended to the class name
in link_form.html line 212. Verified via Playwright: new Link tab hides
action card, Action tab shows it, edit pages hide the wrong fields.
2026-08-02 22:45:11 +10:00
github-actions[bot] 5b67254142 chore: update manifest image to 1.0.408 [skip ci] 2026-08-02 11:39:47 +00:00
OpenClaw Sub-agent 69f399dfe0 fix: prevent horizontal page scroll on post detail page
- markdown.css: .prose table gets display:block + overflow-x:auto so
  wide tables scroll inside their own box instead of stretching the page
  (post 2970 had a 1076px table overflowing 390px mobile and 1440px desktop)
- td gets word-break:break-word + overflow-wrap:anywhere for long URLs
- post_detail.html: .post-actions max-width:100% so Listen/Edit/Share/Delete
  buttons wrap inside the container on narrow screens
2026-08-02 21:35:19 +10:00
github-actions[bot] 14902c5c66 chore: update manifest image to 1.0.407 [skip ci] 2026-08-02 08:29:52 +00:00
OpenClaw Sub-agent 5dfb09efff refactor: merge Template back into Link type (per user decision)
- Revert TEMPLATE as separate LinkType; templates are plain links whose
  URL contains {param} placeholders
- migration 0055: data-migrate any TEMPLATE links back to LINK, roll back
  choices (0054 stays in history)
- link_form: back to 3 tabs (Link/Custom/Action); Link tab owns the URL
  field plus a dashed '🔧 Add template parameters' toggle; the Sketch
  builder auto-shows when the URL contains { } (and stays visible after a
  manual toggle); hidden on Custom/Action tabs
- badges (row/detail/search) detect templates by URL content again;
  detail page shows Original URL for plain links
- views/forms: drop is_template plumbing and TEMPLATE validation
2026-08-02 18:22:45 +10:00
github-actions[bot] f756ab83e1 chore: update manifest image to 1.0.406 [skip ci] 2026-08-02 07:52:35 +00:00
OpenClaw Sub-agent 539303b8f6 feat(link form): TEMPLATE becomes its own type with dedicated tab/fields
- models: LinkType gains TEMPLATE (migration 0054, choices only)
- link_form: 4 tabs — Link / 🔧 Template / Custom /  Action; each type
  shows only its own fields: Template tab owns the Sketch builder, Link tab
  is a plain URL, Custom owns the markdown editor, Action owns the Discord
  card + message template; per-type descriptions; tab colors blue/purple/
  green/purple
- Editing a legacy LINK with {param} in URL auto-switches to Template tab
  (and saving migrates it to TEMPLATE type)
- badges (row/detail/search cards) recognize TEMPLATE type; detail page
  shows Original URL for TEMPLATE too
- forms: TEMPLATE requires original_url
2026-08-02 17:48:32 +10:00
github-actions[bot] ce0b83cd4d chore: update manifest image to 1.0.405 [skip ci] 2026-08-02 07:32:52 +00:00
OpenClaw Sub-agent 54a416c63c feat(template links): Sketch-style visual parameter builder
- link_form: template builder under the URL field — preset param chips
  (q/id/page/category/keyword/lang, CN labels) click to insert ?q={q} with
  smart ?/& separators; auto-parsed parameter rows (name + default input +
  remove); custom params (name + default -> append); live dark preview
  filling defaults (green) and flagging required (red); chips grey out
  when used; hidden on Custom/Action tabs; edits existing templates
- redirect_to_original: map GET query params (?q=weather) by name into
  template placeholders, keep path-param backward compat (go/alias/x
  fills every unfilled param), defaults otherwise; query wins over path
- tests: +5 template redirect cases (query map, multi-param, defaults,
  path compat, query-over-path)
2026-08-02 17:28:32 +10:00
github-actions[bot] 131154e183 chore: update manifest image to 1.0.403 [skip ci] 2026-08-02 01:40:00 +00:00
OpenClaw Sub-agent 540733699e fix(home): restore tbody binding, sticky mobile delete bar, 20-row recent-first list
- Fix Uncaught ReferenceError: tbody is not defined — the client-side filter
  rewrite dropped the const tbody declaration still used by load-more
- Mobile: Delete Selected becomes a sticky frosted bottom bar (safe-area
  aware); disabled (grayed) until a row is selected, then red
- Mobile: library search input full-width 48px (primary interaction)
- Default list: 20 rows (was 50) sorted by updated_at desc (recent first)
  instead of click_count; load-more keeps paging +20
2026-08-02 11:35:51 +10:00
github-actions[bot] f3bf4089f6 chore: update manifest image to 1.0.402 [skip ci] 2026-08-02 01:24:30 +00:00
OpenClaw Sub-agent 595b99446b feat: ⌘K command palette + restore green nav (fixes mobile menu collapse)
- Command palette (Ctrl/Cmd+K or nav search icon): /search/palette/ groups
  links/pages/posts with jump/detail/edit actions, keyboard navigation
- Hero: stats inline under search pill, ⌘K chip on desktop, Random Images
  broken-image fallback to elegant SVG placeholder (layout untouched)
- Restore original green nav (bg-custom-blue). The frosted-glass nav from
  1.0.401 broke the mobile Menu dropdown: backdrop-filter creates a
  containing block, collapsing the fixed full-screen dropdown to 3px
- Palette tests: +5 cases (grouping, post match, management fields,
  empty query, no results)
2026-08-02 11:20:11 +10:00
github-actions[bot] ce25637b43 chore: update manifest image to 1.0.401 [skip ci] 2026-08-02 01:02:57 +00:00
OpenClaw Sub-agent dda47ee62e feat(home): search-driven link library with mobile card layout
- /search/aliases/ now matches alias/url/description/text/tags and returns
  id, link_type, detail_url, edit_url, click_count for management actions
- Library filter upgraded from client-side row filtering to live search
  cards: click card -> detail page, inline edit/delete, alias jumps
- Mobile: table rows render as cards (kills 620px horizontal scroll),
  hidden cells stay hidden, no viewport overflow
- Hero search no longer autofocuses on touch devices (no keyboard pop);
  desktop keeps autofocus via hover:fine media query
- Nav bar unified to light frosted-glass (was dark green) across all pages
- Fix hero-glow decorative overflow on mobile
- Add tests/test_search_aliases.py (8 cases)
2026-08-02 10:58:44 +10:00
github-actions[bot] 74557b4c64 chore: update manifest image to 1.0.400 [skip ci] 2026-08-01 22:36:57 +00:00
OpenClaw Sub-agent 509723c197 fix(invest): mobile chart — fixed height, sane scales, horizontal x labels, compact legend/points, Chinese help
Root cause of the squashed chart: canvas had a fixed height=90 attr and no container, so on narrow viewports Chart.js compressed everything — legend overlapped the plot, x labels tilted 45deg, y ticks degenerated (-1000% scale). Fix: relative h-72/h-80 container + maintainAspectRatio:false, grace 5%, maxTicksLimit, maxRotation:0, smaller points (r2/1.5), compact legend/tooltip, Chinese help text.
2026-08-02 08:28:08 +10:00
github-actions[bot] 24435c58df chore: update manifest image to 1.0.399 [skip ci] 2026-08-01 22:13:58 +00:00
OpenClaw Sub-agent b67a834def feat(invest): cost basis & P&L, AUD totals, chart ranges, per-ticker page, manual entry, tx search
P1:
- WAC cost basis per (portfolio, ticker): avg_cost / unrealized P&L / P&L%
  - transaction price when recorded, else trade-date market close (estimated, flagged)
  - dashboard: Unrealized P&L card + Avg Cost & P&L columns on holdings tables
  - fx: frankfurter.dev rates (USD/HKD->AUD, 24h cache, UA header required) -> AUD total on Total Value card
  - chart: 1M/3M/6M/YTD/1Y/ALL period buttons (all periods precomputed server-side, top-level payload stays YTD for compat)
P2:
- /invest/stocks/<ticker>/ per-ticker page: cross-account holdings, WAC, P&L, weight, theme, trade history
- manual transaction + cashflow entry forms (source=MANUAL, confidence=1.0)
- dashboard transaction search (?q= ticker/account) + add-transaction buttons
- tickers link to detail page; tabular-nums on all figures
- 8 new tests (WAC sell, estimated price, incomplete, per-portfolio agg, stock page, forms, search)
2026-08-02 08:09:58 +10:00
github-actions[bot] 911015e2f6 chore: update manifest image to 1.0.398 [skip ci] 2026-08-01 21:50:35 +00:00
OpenClaw Sub-agent 5252222674 feat(invest): P0 dashboard polish — intcomma amounts, ticker-aggregated risk table, unified mobile grid, tx source badges, drop dead invest/base.html
- Add django.contrib.humanize; apply intcomma to every currency amount across invest templates (dashboard, portfolio detail, transactions)
- get_risk_summary now aggregates top_positions by ticker (MRVL across MOMO+IBKR merges into one row with Accounts column), keeping Top 1/3/5 cards and table on the same basis
- Mobile: metric cards all 2-col (2x2 + 2+1 with Last Snapshot spanning full width), no more 1-col break
- Transactions show source badges: purple 🤖 AI (source ai/ocr), grey 手动, amber ⚠ 低置信 when confidence < 0.9
- Delete unused invest/base.html (dead nav; page extends GoLinks base.html)
- tailwind.config.js: add invest/jbot/routermon template dirs so their classes are scanned (text-[10px] etc. were silently missing)
2026-08-02 07:45:21 +10:00
github-actions[bot] 70973a063b chore: update manifest image to 1.0.397 [skip ci] 2026-08-01 13:27:16 +00:00
OpenClaw Sub-agent 8cd92812f7 feat: server-side thumbnails (Pillow/ffmpeg), 3D cover-flow carousel, fix preview close on iOS
- New /ui/files/{pk}/thumb/ endpoint: Pillow resize for images, ffmpeg first-frame for videos, disk-cached with per-record lock
- Grid & carousel render server thumbnails via <img> — fixes blank video thumbs on iOS Safari
- Carousel upgraded to 3D cover-flow: perspective rotateY/scale/opacity driven by scroll position
- Preview <video> gets playsinline + webkit-playsinline — fixes close button unusable after iOS fullscreen playback
- thumbnail_url exposed in serializer, upload response, and client JSON
- 3 new tests: thumb 200/cache, non-media 404, missing-file 404
2026-08-01 23:22:57 +10:00
github-actions[bot] 301224ed18 chore: update manifest image to 1.0.396 [skip ci] 2026-08-01 12:05:02 +00:00
OpenClaw Sub-agent ed4c8853a6 feat: Files page layout switcher — grid (Finder-style) & carousel (cover-flow) views
- Three layouts: list (unchanged) / grid / carousel, persisted in localStorage
- Grid: image thumbnails (lazy), video first-frame + play badge, doc icon fallback
- Carousel: scroll-snap horizontal track, desktop arrows, native swipe on mobile
- Click any card opens the existing preview modal (with prev/next navigation)
- Mobile-first: 2-column grid on phones, hidden carousel arrows on touch
- Pure frontend in list.html; no model/API changes
2026-08-01 22:00:37 +10:00
github-actions[bot] 7f10a90f10 chore: update manifest image to 1.0.395 [skip ci] 2026-08-01 11:41:23 +00:00
OpenClaw Sub-agent 815a5e3543 style: simplify action description to one-line Chinese hint 2026-08-01 21:37:03 +10:00
github-actions[bot] 2004dee25e chore: update manifest image to 1.0.394 [skip ci] 2026-08-01 11:31:49 +00:00
OpenClaw Sub-agent 3e1dd31bab fix: hide template description on Action tab, Discord-style message preview
- template-description box was shown on Action tab (JS never controlled it)
- Message preview now renders as a Discord-style chat bubble (avatar, author,
  dark background) with {query} highlighted as a chip
2026-08-01 21:27:19 +10:00
github-actions[bot] e2c76bd341 chore: update manifest image to 1.0.393 [skip ci] 2026-08-01 11:20:21 +00:00