Commit Graph

4182 Commits

Author SHA1 Message Date
RockChinQ 8c119bc4b6 feat: add verified manual pipeline migration for plugin runners 2026-09-16 18:13:11 +00:00
TyperBody f998e475e3 fix 2026-09-16 22:58:10 +08:00
RockChinQ 273b1ea3cf Merge master into dev/4.11.x and preserve plugin runner architecture
Reconcile migration branches without rewriting published revisions; retain additive Codex, monitoring, provider and platform fixes. Keep dynamic runner schemas and Host ownership, restore compatibility regressions, and preserve safe model-test error handling.
2026-09-16 08:13:07 +00:00
TyperBody 4535a21cb5 feat(plugins): show installed state in marketplace and search installed extensions
Marketplace cards now reflect whether an extension is already installed in
the current workspace, and the installed-extension list gains a search box.

Backend (stream install progress):
- _read_httpx_response_limited gains an optional task_context: it publishes
  download_total from Content-Length before the first chunk and updates
  download_current / download_speed per chunk. The marketplace download path
  previously had no progress reporting; it now matches the GitHub path.
- _marketplace_get forwards task_context to that helper.
- install_plugin resets the per-install counters so re-installing the same
  plugin cannot inherit stale metadata, and reports human-readable stages:
  preparing -> downloading -> inspecting -> storing -> installing
  dependencies -> launching -> waiting for plugin to become ready.

Frontend (installed state):
- New marketplace-installed helper normalises the sidebar identities
  (plugin: author/name, mcp: author__name, skill: bare name) into one
  type:author/name index and resolves a card's installed state from it.
  useMarketplaceInstalledIndex memoises on the sidebar lists, so a finished
  install (which refreshes the sidebar) re-evaluates the cards automatically.
- PluginMarketCardVO carries installed / hasUpdate. An installed extension
  turns its download affordance into a hollow green ring with a green check
  in place, instead of adding a separate badge; the count slot switches to
  the installed label. Cards with an available update use amber.
- PluginMarketComponent derives the annotated list and shares the index with
  RecommendationLists.

Frontend (install task UI):
- mapActionToStage matches the new connector stage strings. The pre-download
  stages are checked before the generic "install" match, because
  "preparing plugin install" also contains "install".
- Stage progress ranges are non-overlapping; overall progress interpolates on
  real byte counts while downloading and drifts monotonically elsewhere,
  capped at 99%.
- The progress dialog and task queue expose the launching stage.

Frontend (installed list search):
- The installed list had no search at all. A query box in the page header
  filters by label / name / author / description, case-insensitively, applied
  before grouping so grouped and flat views both honour it.
- Search misses and an empty list now show distinct empty states, with a
  clear action on a search miss.
- AsyncTask entity gains the optional created_at field.

i18n: new marketplace / install / search strings across all 8 locales.

Verified: ruff format + check, tsc --noEmit, prettier --check, eslint
(0 errors), and 89/89 frontend unit tests.
2026-09-16 02:03:57 +08:00
dadachann 03854b5d33 fix(telemetry): require acknowledged adapter evidence and prepare beta.3 v4.11.0-beta.3 2026-09-15 13:23:12 +00:00
彼方 9b7ba0d647 Merge pull request #2544 from langbot-app/codex/media-content-cache-2354
feat(storage): Media content addressable storage (CAS) and monitoring Base64 externalization stripping (#2354)
2026-09-15 21:03:48 +08:00
Hyu f7cfb23480 feat: collect beta-only adapter acceptance evidence 2026-09-15 20:40:03 +08:00
BiFangKNT 7e239f1629 fix(maintenance): guard media cache cleanup and annotate exception suppression
- Safely resolve media_cache via getattr in cleanup_expired_files to prevent AttributeError when storage_mgr is unset in cloud/test fixtures
- Only attach 'media_files' in cleanup return dictionary when media cache is active on singleton, preserving exact return contract for cloud maintenance tests
- Add explanatory comments to exception suppression in MediaCache.touch and cleanup loops to address code-quality review findings
2026-09-15 20:30:34 +08:00
BiFangKNT c16cd433e0 refactor(storage): enforce xxHash3-128 and remove sha256 fallback in MediaCache
- Import xxhash directly instead of conditional try-except block
- Remove unused hashlib import and sha256 fallback branch in hash_bytes
- Update docstrings to reflect pure xxHash3-128 content-addressing
2026-09-15 19:48:08 +08:00
BiFangKNT a32b3121d3 build(boot): register xxhash in startup dependency check 2026-09-15 18:14:29 +08:00
BiFangKNT 1143d6a5ae feat(storage): media content-addressable cache and monitoring base64 externalization
- Add MediaCache using xxHash3-128 (with sha256 fallback) content-addressable storage
- Externalize message chain image payloads before recording monitoring and discarded messages
- Strip base64 payloads to null in SQLite monitoring_messages, dropping row size from megabytes to hundreds of bytes
- Add GET /api/v1/files/media/<filename> route with immutable HTTP cache headers to serve cached media
- Integrate age-based retention (default 30 days) and configurable disk quota with MaintenanceService cleanup loop
- Add defensive sanitizer in MonitoringService.record_message against oversized raw base64 payloads
- Add comprehensive unit tests and end-to-end verification covering CAS deduplication, route serving, and LRU pruning
2026-09-15 17:58:23 +08:00
dadachann 7c1445051b build(deps): pin published plugin SDK 0.6.0b2 v4.11.0-beta.2 2026-09-15 09:55:03 +00:00
dadachann f8123ead0a feat(telemetry): add isolated beta quality diagnostics and release identity 2026-09-15 09:35:01 +00:00
Hyu 91d6de8858 fix(bots): add icon to processor compatibility warning 2026-09-15 15:11:30 +08:00
Hyu 11f73ddf12 fix(bots): highlight unsupported processor events and show overlap 2026-09-15 15:05:34 +08:00
Hyu 8b7621cb29 fix(i18n): refine processor compatibility warning 2026-09-15 14:58:41 +08:00
Hyu b71d18f697 test(bots): wait for save notices before reusing subscriptions 2026-09-15 14:58:08 +08:00
Hyu 1c17c4a0db fix(bots): warn about incomplete processor event support 2026-09-15 14:56:43 +08:00
Hyu 2e6fe63750 fix(agents): combine runner selection and configuration in one tab 2026-09-15 14:27:27 +08:00
Hyu 5c98329170 fix(web): unify processor creation and entity detail loading states 2026-09-15 13:51:39 +08:00
Hyu d497defbf7 fix(runner): keep installation context within each stream resume 2026-09-15 13:51:27 +08:00
BiFangKNT 38ff4766ef chore: update .gitignore 2026-09-15 08:22:11 +08:00
Hyu eb4563775d docs(readme): remove retired public demo from all languages (#2543)
Co-authored-by: dadachann <185672915+dadachann@users.noreply.github.com>
2026-09-15 01:11:42 +08:00
dadachann 9db097399c ci: recover beta PyPI publication from immutable tags 2026-09-14 17:00:58 +00:00
dadachann f7cef62290 test: declare agent usage in beta runtime fixture v4.11.0-beta.1 2026-09-14 16:56:35 +00:00
dadachann 89d42bedaa chore: release 4.11.0-beta.1 with SDK 0.6.0-beta.1 2026-09-14 16:47:47 +00:00
RockChinQ 184037a427 feat(bots): bind plugin processor configurations independently 2026-09-15 00:28:13 +08:00
sheetung 60bb67f025 Fnos packaging (#2524)
* feat(packaging): add fnOS FPK packaging and CI workflow

Add packaging/fnos/ shell (manifest, lifecycle cmd scripts, install/
upgrade/uninstall wizards, desktop entry, EULA) plus in-repo build
script. A release now auto-builds langbot-<tag>-fnos.fpk via
.github/workflows/build-fnos-fpk.yaml, uploaded to the release assets.

* ci(fnos): skip release upload on manual dispatch

github.event.release.tag_name is empty when triggered via
workflow_dispatch, causing 'gh release upload' to fail with
'requires at least 2 arg(s)'. Restrict the step to release events.

* ci(fnos): normalize release asset name

Strip a trailing -fnos from the tag-derived version before appending
the suffix, avoiding langbot-<v>-fnos-fnos.fpk when the tag itself
already carries -fnos.

* ci(fnos): use release tag version for auto build, manifest for manual

Auto build (release/tag) reads version from tag like other release
workflows; build.sh strips the v prefix when injecting into manifest.
Manual dispatch falls back to the version maintained in manifest.

* feat(fnos): add post-install deployment notice to install wizard

Last wizard step now informs users that first startup takes about
5-10 minutes for dependency setup before the web UI is ready.

* docs(fnos): add packaging directory README

* refactor(fnos): rename app from ai.langbot to langbot

Rename appname, desktop entry, data share, build artifacts, and all
references from ai.langbot to langbot across packaging files.

---------

Co-authored-by: dadachann <185672915+dadachann@users.noreply.github.com>
2026-09-14 00:31:19 +08:00
Type_rBody cbe6844342 Merge pull request #2541 from hedging8563/codex/refresh-tokenlab-logo-20260913
chore(brand): refresh TokenLab logo
2026-09-13 22:18:08 +08:00
hedging8563 940895c541 chore(brand): refresh TokenLab logo 2026-09-13 21:24:38 +08:00
Hyu 9b130680ca ci(discord): announce published stable releases via webhook (#2539)
Co-authored-by: dadachann <185672915+dadachann@users.noreply.github.com>
2026-09-13 00:39:21 +08:00
RockChinQ e913658e03 fix(processors): clarify processing modes and reorder choices 2026-09-13 00:18:36 +08:00
huanghuoguoguo d26d0635c5 fix(vector): correct SeekDB adapter semantics (#2536) 2026-09-12 19:40:30 +08:00
彼方 58cde8c022 Merge pull request #2534 from langbot-app/fix/i18n-passkey-keys
fix(i18n): complete passkey keys across all locale files
2026-09-12 16:47:27 +08:00
彼方 9eb8683997 Merge pull request #2530 from langbot-app/feat/passkey-login
feat(auth): support passkey (webauthn) login and credential management
2026-09-12 16:00:10 +08:00
BiFangKNT 19526e1400 test(api): define explicit fixtures for passkey integration tests 2026-09-12 15:51:56 +08:00
BiFangKNT dfde9578c1 fix(ci): fix ruff lint errors and postgres legacy migration table exclusion 2026-09-12 15:35:47 +08:00
Hyu ec5b8cc8a8 docs(space): sync Runner usage recommendation contract (#2533)
Co-authored-by: dadachann <185672915+dadachann@users.noreply.github.com>
2026-09-12 13:37:14 +08:00
RockChinQ 1277c6da07 feat(runner): filter marketplace recommendations by explicit usage 2026-09-12 12:51:16 +08:00
Hyu 137bb4fdb3 fix(ci): recover immutable release PyPI builds (#2532)
Co-authored-by: dadachann <185672915+dadachann@users.noreply.github.com>
2026-09-12 12:50:37 +08:00
Hyu 273b8839b9 chore(release): prepare LangBot 4.10.11 (#2531)
Co-authored-by: dadachann <185672915+dadachann@users.noreply.github.com>
v4.10.11
2026-09-12 12:33:26 +08:00
BiFangKNT 9db6650274 style(tests): Remove unused time import from test file 2026-09-12 12:26:51 +08:00
BiFangKNT b594cf23e4 feat(auth): add webauthn authentication support 2026-09-12 12:17:26 +08:00
RockChinQ fa15f48fd7 feat(models): sort catalog by listing date availability and price 2026-09-12 02:07:33 +08:00
RockChinQ 18c1ed93b8 fix(models): show reasoning icon in model selectors 2026-09-12 01:23:06 +08:00
RockChinQ 8b85876a19 fix(models): simplify capability badges 2026-09-12 01:09:12 +08:00
RockChinQ 18b84566c3 fix(models): flag models without pricing 2026-09-12 01:04:03 +08:00
RockChinQ 50d544aa6f fix(models): align selector metadata 2026-09-12 00:57:55 +08:00
RockChinQ 33b4035140 feat(models): show LangBot Models pricing 2026-09-12 00:53:47 +08:00
RockChinQ a3509b3626 feat(models): show LangBot Models availability 2026-09-11 21:17:20 +08:00