Commit Graph

4171 Commits

Author SHA1 Message Date
RockChinQ a8d291e581 fix(plugins): retain Host progress fallback after master merge 2026-09-21 17:04:57 +00:00
RockChinQ 5d9684731e merge(4.11): integrate master marketplace updates preserving Runner lifecycle 2026-09-21 16:58:35 +00:00
RockChinQ 6b83089535 Merge pull request #2546 from langbot-app/feat/marketplace-installed-state-and-search
feat(plugins): show installed state in marketplace and search install…
2026-09-22 00:43:46 +08:00
RockChinQ 7d37e74ce6 Merge pull request #2558 from langbot-app/fix/411-bot-form-layout-assertion
test(web): align bot form assertion with responsive grid layout
2026-09-21 19:46:24 +08:00
RockChinQ 44ee0e8d71 test(web): align bot form assertion with responsive grid layout 2026-09-21 11:35:19 +00:00
RockChinQ d3eb7b09e5 merge(4.11): synchronize master certification and document identity fixes (#2557)
merge: synchronize master certification and document identity fixes into 4.11
2026-09-21 19:27:49 +08:00
RockChinQ 73f26bd0a3 test: include legacy pipeline dependency in identity migration fixtures 2026-09-21 11:19:03 +00:00
RockChinQ 27871e4363 merge: integrate master certification and document identity fixes into 4.11 2026-09-21 10:55:40 +00:00
RockChinQ b10139bd83 Merge pull request #2556 from langbot-app/fix/ke-document-identity-20260921
fix(rag): retain interrupted ingestion state and engine identity
2026-09-21 15:55:24 +08:00
RockChinQ 381bb3f852 fix(rag): retain interrupted ingestion state and engine identity 2026-09-21 07:47:31 +00:00
TyperBody efc28747d5 Merge origin/master into feat/marketplace-installed-state-and-search
Resolved one conflict in src/langbot/pkg/plugin/connector.py. Master added
archive admission (`_admit_plugin_archive` + the certification digest check
before Runtime apply) at the same points this branch added install-stage
reporting, so both sides are kept:

- the archive is admitted first, then the 'inspecting plugin package' stage is
  reported
- the certification digest is verified before Runtime apply, then the
  'installing or starting plugin' stage is reported

Verified after merge: py_compile + ruff, tsc --noEmit, 98/98 unit tests.
2026-09-21 00:48:20 +08:00
TyperBody 163dac48b0 fix(plugins): correct install progress bounds, skill identity, and stage accuracy
Addresses review feedback on the marketplace installed-state change.

- Progress: byte-derived progress no longer has time-based drift layered on
  top, and fallback drift is clamped to the current stage range, so the bar
  cannot exceed the download band. 90/100 bytes at 40s elapsed used to report
  61% against a declared 5-45% band; it now reports 41%. Drift is measured
  from when the stage was entered rather than from task start.
- Skills: a marketplace skill is no longer reported installed from a bare
  skill name. The backend names skills from their own SKILL.md and records no
  publisher, so alice/review and bob/review install identically; matching the
  bare name marked every publisher's skill as installed. Skill cards now
  resolve to not-installed until the installed skill carries a publisher.
- Stages: "installing plugin dependencies" and "launching plugin" described
  work this task context cannot observe (installation persistence ran under
  the former; the runtime installs dependencies and starts the plugin inside
  apply_plugin_installation under the latter). They become "persisting the
  installation" and "installing or starting plugin", and the frontend maps
  that combined step to the dependency stage rather than the launch stage.
- Removed the per-dependency progress fields: the backend never populated
  them, so the UI could never have displayed them.

The stage mapping and progress maths move to install-progress.ts, and the
installed-state matching to a React-free marketplace-installed.ts, so both
are covered by executable tests (+9).

Verified: ruff, tsc --noEmit, prettier --check, eslint (0 errors), 98/98 unit
tests.
2026-09-21 00:40:23 +08:00
RockChinQ 52f5699533 fix(plugin): honor requested marketplace version (#2555) 2026-09-20 23:59:50 +08:00
RockChinQ 942a302808 fix(plugin): load certification key ring from env (#2554) 2026-09-20 22:22:32 +08:00
RockChinQ 20a04a77bf feat(plugin): enforce certified archive admission (#2553)
* feat(plugin): add certified admission policy

* feat(plugin): enforce certified archive admission

* chore(plugin): pin certified SDK beta

* fix(plugin): consume SDK beta 5

* style(plugin): format certification admission
2026-09-20 18:54:45 +08:00
RockChinQ 503fec4d6e feat(web): unify guided tours and complete translations 2026-09-19 22:14:29 +08:00
fdc310 e7ad051cf6 Merge remote-tracking branch 'origin/dev/4.11.x' into dev/4.11.x
# Conflicts:
#	uv.lock
#	web/src/i18n/locales/en-US.ts
#	web/src/i18n/locales/ja-JP.ts
#	web/src/i18n/locales/zh-Hans.ts
#	web/src/i18n/locales/zh-Hant.ts
2026-09-19 11:00:45 +08:00
sheetung 8f8356fe97 Merge pull request #2552 from sheetung/fnos-privilege
Fnos privilege
2026-09-19 09:16:15 +08:00
fdc310 cc8a0ec847 feat: simplify resource setup and detail guides 2026-09-19 02:39:35 +08:00
RockChinQ 92cac61930 fix(deps): align SDK lock with default prerelease policy 2026-09-18 16:49:04 +00:00
RockChinQ cd1188a62d chore(deps): pin published plugin SDK 0.6.0b3 2026-09-18 16:30:33 +00:00
RockChinQ 804c089d20 fix(wizard): show default AI preparation progress in button 2026-09-19 00:05:49 +08:00
RockChinQ 79cac0c6a3 fix(reasoning): apply explicit per-call levels without runner config caching 2026-09-19 00:05:49 +08:00
RockChinQ 4b86d979dd Update links in README_CN.md 2026-09-18 21:01:31 +08:00
RockChinQ d61926af85 Update website link in README.md 2026-09-18 21:01:02 +08:00
RockChinQ da4b0d6ca2 fix(wizard): prepare default Local Agent and refine Runner setup 2026-09-18 19:27:56 +08:00
fdc310 960e322c79 feat(web): add contextual setup guides 2026-09-18 19:08:30 +08:00
“sheetung” d705861d25 fix(fnos): open LangBot embedded inside fnOS desktop instead of external browser
Change desktop entry type from 'url' (opens external browser) to 'iframe'
(embeds the web UI inside the fnOS desktop window), per the official
Application Entry documentation at developer.fnnas.com/docs/core-concepts/app-entry.
2026-09-18 17:05:47 +08:00
“sheetung” 34f1e3d56f feat(fnos): run entirely without root and harden process lifecycle
- Switch privilege model to run-as: package (zero root, per fnOS guide)
- Borrow App Store python312 instead of bundling CPython; keep bundled uv
- Move venv, HOME and caches onto the persistent data share
- Start service via setsid; stop/upgrade kill the whole process group
- Sweep stray runtime/box orphans in install/upgrade init hooks
- Track LangBot 4.10.11 (manifest baseline + upstream merge)
2026-09-18 16:20:32 +08:00
RockChinQ bece2aa554 fix(wizard): restore message pipeline setup and page bot preview 2026-09-18 16:01:55 +08:00
RockChinQ 60606e1997 fix(migration): improve runner migration and plugin installation feedback 2026-09-18 13:10:32 +08:00
RockChinQ 79b4fe2004 docs(readme): add text links below Cloud deployment buttons (#2551) 2026-09-18 13:10:19 +08:00
RockChinQ e3ae3cc1ea Update links in README_CN.md 2026-09-18 08:30:22 +08:00
RockChinQ db244084a9 Update website link in README.md 2026-09-18 08:29:51 +08:00
RockChinQ e77acfa3ab fix(box): align integration tests with runner-owned bindings 2026-09-18 01:07:43 +08:00
RockChinQ a6ac25cf84 feat(agent): add task-oriented run logs and execution details 2026-09-18 00:59:17 +08:00
RockChinQ b264d46d77 feat: delegate sandbox policy to runners and simplify pipeline migration 2026-09-17 23:05:27 +08:00
RockChinQ 3bc0def0c1 docs(readme): replace Cloud links with branded deployment CTA (#2550) 2026-09-17 18:31:53 +08:00
fdc310 c4e14516ed feat(web): add sidebar onboarding guide 2026-09-17 05:05:01 +08:00
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