TyperBody
97c1addba7
Merge remote-tracking branch 'origin/master' into feat/totp-two-factor-auth
...
# Conflicts:
# uv.lock
2026-09-25 14:31:03 +08:00
RockChinQ
7dd943e5a0
chore(deps): pin langbot-plugin 0.6.1 ( #2572 )
...
Pin the stable SDK and refresh only its lockfile package record and artifact hashes.
2026-09-24 23:09:01 +08:00
RockChinQ
4e347dcbad
fix(deps): pin SDK 0.6.1b2
2026-09-24 13:14:59 +08:00
RockChinQ
26726da9b3
fix(deps): pin SDK 0.6.0b6
2026-09-24 04:18:15 +08:00
TyperBody
76398c8bc4
Merge origin/master into feat/totp-two-factor-auth
...
Resolve the revision-graph conflict introduced by the release line.
Conflicts
- tests/integration/persistence/test_rag_document_identity.py: master had
independently introduced the same dynamic-head helper (`current_head`) plus
a `DOCUMENT_IDENTITY_REVISION` constant, and it explicitly upgrades to that
revision. Keep master's semantics (the explicit revision matters because
upgrading to the head now also traverses the TOTP branch) while keeping the
module-level alembic imports on this branch.
New migration
- 0030_merge_totp_into_release joins the TOTP branch's own merge revision
(0026_merge_totp_and_rag_identity) with the release head
(0029_merge_rag_identity). Both reached 0025_rag_document_identity without
including each other, which left Alembic with two heads and made
`upgrade head` fail with "Multiple head revisions are present".
Verification
- Single Alembic head confirmed (0030_merge_totp_into_release).
- tests/integration/persistence/test_rag_document_identity.py: 34 passed.
- Full fast integration suite: 356 passed, 84 skipped.
2026-09-24 02:27:37 +08:00
TyperBody
8633567ce7
feat(auth): add TOTP two-factor authentication
...
Add a per-Account time-based one-time password (TOTP) second sign-in
factor, plus the owner/admin tooling needed to operate it.
Backend
- TotpService: enrolment, constant-time verification with a +/- one step
drift window, single-use recovery codes and disablement.
* shared secret is only ever persisted as a Fernet token whose key is
derived (HKDF-SHA256) from the instance JWT secret and gated by a
key_version epoch;
* recovery codes are only ever persisted as salted
PBKDF2-HMAC-SHA256 digests (600k iterations) and are single-use;
* the consumed counter advances monotonically so a captured code cannot
be replayed inside the same time window.
- New persistence entities and alembic migrations for credentials and
recovery codes.
- Login second-factor challenge, bound to the Account that passed the
password step.
- Owner/admin oversight endpoints to inspect and re-bind the second
factor of any Account.
Frontend
- Account settings panel for enrolling, managing, re-binding and
disabling the second factor.
- Login second-factor step and the matching client methods.
- Strings for all eight locales.
The shared secret never crosses the API boundary: enrolment returns a
server-rendered QR code (as a data: URL) and the plaintext secret is
discarded as soon as the image is produced.
2026-09-24 01:31:54 +08:00
RockChinQ
27871e4363
merge: integrate master certification and document identity fixes into 4.11
2026-09-21 10:55:40 +00: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
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
79cac0c6a3
fix(reasoning): apply explicit per-call levels without runner config caching
2026-09-19 00:05:49 +08:00
RockChinQ
60606e1997
fix(migration): improve runner migration and plugin installation feedback
2026-09-18 13:10:32 +08:00
RockChinQ
b264d46d77
feat: delegate sandbox policy to runners and simplify pipeline migration
2026-09-17 23:05:27 +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
dadachann
03854b5d33
fix(telemetry): require acknowledged adapter evidence and prepare beta.3
2026-09-15 13:23:12 +00: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
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
dadachann
89d42bedaa
chore: release 4.11.0-beta.1 with SDK 0.6.0-beta.1
2026-09-14 16:47:47 +00:00
huanghuoguoguo
d26d0635c5
fix(vector): correct SeekDB adapter semantics ( #2536 )
2026-09-12 19:40:30 +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
RockChinQ
1277c6da07
feat(runner): filter marketplace recommendations by explicit usage
2026-09-12 12:51:16 +08:00
Hyu and dadachann
273b8839b9
chore(release): prepare LangBot 4.10.11 ( #2531 )
...
Co-authored-by: dadachann <[email protected] >
2026-09-12 12:33:26 +08:00
BiFangKNT
b594cf23e4
feat(auth): add webauthn authentication support
2026-09-12 12:17:26 +08:00
Hyu and dadachann
45d77c3926
fix(plugin): preserve explicit nested installation scope ( #2528 )
...
* fix(plugin): preserve explicit nested installation scope
* fix(deps): pin released RAG runtime SDK 0.5.8
---------
Co-authored-by: dadachann <[email protected] >
2026-09-11 17:41:33 +08:00
Hyu and dadachann
e631da0073
fix(runner): align SDK pin and complete real runtime verification ( #2525 )
...
* fix(runner): align SDK pin and workspace-aware integration fixtures
* fix(ci): format sources and resolve current migration head
* test(persistence): align standalone migration fixtures with current models
* test(web): align smoke fixtures with current processor UI
---------
Co-authored-by: dadachann <[email protected] >
2026-09-11 12:57:29 +08:00
RockChinQ
f24a7c9bb2
feat(runner): unify plugin execution across agents and event processors
2026-09-10 18:04:38 +08:00
RockChinQ
8903a40c41
fix(runtime): preserve explicit replies and report bot configuration errors
2026-09-10 17:21:22 +08:00
RockChinQ
ea3e32c904
feat(processors): streamline event debugging and run inspection
2026-09-08 02:30:59 +08:00
RockChinQ
237fa6545d
feat(processors): add explicitly bound plugin event processors
2026-09-08 00:43:35 +08:00
Hyu and dadachann
a63808caa6
chore(release): prepare LangBot 4.10.10 ( #2507 )
...
Co-authored-by: dadachann <[email protected] >
2026-09-04 21:47:31 +08:00
Hyu and dadachann
7aab0cee07
chore(release): bump version to 4.10.9 ( #2488 )
...
Co-authored-by: dadachann <[email protected] >
2026-09-01 00:18:53 +08:00
dadachann
0559d9d441
Merge master into dev/4.11.x
...
# Conflicts:
# pyproject.toml
# uv.lock
2026-08-24 02:34:14 +00:00
RockChinQ
962366c507
fix(deps): make SeekDB optional for native installs
2026-08-21 12:07:36 +08:00
RockChinQ
3d4a726cd8
chore: release v4.10.8 ( #2450 )
2026-08-21 01:47:39 +08:00
dadachann
a08a177a11
fix(runtime): adopt plugin SDK 0.5.5
2026-08-16 17:36:34 +00:00
Junyan Qin
f94243c725
chore: merge master into dev/4.11.x
2026-08-14 16:04:52 +08:00
Hyu and github-actions[bot]
1f1a3aff55
fix(release): publish installable multi-arch artifacts ( #2432 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-14 01:06:31 +08:00
Chan
536534865e
fix: pin plugin runtime SDK 0.5.3
2026-08-13 10:39:51 +00:00
Chan
c18fc9dfe3
chore(runtime): pin plugin SDK 0.5.2
2026-08-13 09:27:50 +00:00
RockChinQ
9b81a0b606
chore(deps): pin langbot-plugin 0.5.1
2026-08-11 21:35:03 +08:00
Hyu and Chan
90f3d880e5
fix(deps): constrain mcp to v1 ( #2413 )
...
Co-authored-by: Chan <[email protected] >
2026-08-11 13:23:03 +08:00
Hyu and dadachann
cdd5c6589c
fix: support 3072-dimensional knowledge embeddings ( #2401 )
...
Co-authored-by: dadachann <[email protected] >
2026-08-05 21:19:57 +08:00
Hyu and dadachann
3b4698463c
chore: pin runtime control binding SDK ( #2400 )
...
Co-authored-by: dadachann <[email protected] >
2026-08-05 15:12:40 +08:00
Hyu and dadachann
edd6cad449
chore: pin fenced debug runtime sessions ( #2396 )
...
Co-authored-by: dadachann <[email protected] >
2026-08-04 19:59:51 +08:00
Hyu and dadachann
d78546967c
feat: expose Workspace-scoped rotating plugin debug keys ( #2395 )
...
* feat: add Workspace-scoped rotating plugin debug tokens
* chore: pin formatted Workspace debug runtime
* chore: pin merged Workspace debug runtime
* chore: pin tenant-safe debug runtime
---------
Co-authored-by: dadachann <[email protected] >
2026-08-04 19:20:06 +08:00
Hyu and dadachann
e2331c4967
fix(cloud): restore plugins and pipeline execution ( #2379 )
...
Co-authored-by: dadachann <[email protected] >
2026-08-02 01:34:11 +08:00
Hyu and dadachann
d64278ab3f
feat(cloud): provision workspace model catalog ( #2376 )
...
* feat(cloud): provision workspace model catalog
* ci(cloud): pin model catalog adapter source
* fix: make cloud model catalog sync recoverable
* ci: pin cloud adapter source for release
---------
Co-authored-by: dadachann <[email protected] >
2026-08-01 18:16:02 +08:00
RockChinQ and dadachann
e1ac5e0fc8
feat(tenancy): add Workspace multi-tenant foundation ( #2353 )
...
* Document multi-tenant workspace architecture
* Add OSS and commercial workspace boundaries
* docs: redesign multi-tenant workspace architecture
* feat(tenancy): implement workspace isolation
* docs(tenancy): record verification evidence
* docs(tenancy): revise single-instance SaaS topology
* docs(tenancy): refine architecture options
* docs: finalize cloud v2 multi-tenant decisions
* feat(tenancy): establish cloud isolation foundations
* feat(tenancy): harden shared cloud runtime boundaries
* docs(tenancy): record final isolation verification
* fix(tenancy): close isolation and permission gaps
* docs(tenancy): record final isolation verification
* feat(tenancy): connect cloud workspace control plane
* fix(build): install git for pinned SDK
* docs(cloud): update control plane verification
* chore: update multi-tenant SDK pin
* fix(cloud): skip legacy model sync during startup
* test(cloud): preserve minimal model manager fixtures
* fix(cloud): preserve authenticated account context
* fix(cloud): reuse authenticated account for user info
* feat(cloud): complete Workspace settings navigation
* test(web): cover Workspace dropdown menu
* feat(web): place workspace controls in sidebar
* refactor(web): streamline workspace controls
* style(web): format workspace layout test
* fix(cloud): surface runtime and workspace plan status
* fix(plugin): keep runtime identity stable across restarts
* fix(ui): widen and center workspace switcher
* fix(ui): hide roles from workspace switcher
* fix(ui): align workspace switcher with sidebar entries
* feat(workspace): add in-product collaboration and direct Cloud launch
* style: format collaboration changes
* fix(workspace): bind collaboration APIs to tenant UoW
* fix(cloud): preserve Core-owned collaboration state
* test(cloud): require Space identity for invite registration
* feat(cloud): complete secure invitation experience
* style(web): format invitation flows
* fix(cloud): recover box runtime without unscoped skill reload
* feat(oss): enforce invitation account and owner billing flows
* style: format OSS account service
* test(oss): cover invitation logout handoff
* fix(oss): resolve workspace owner in scoped session
* feat(cloud): harden multi-tenant runtime resources
* fix(cloud): bound runtime restart storms
* fix(cloud): eliminate periodic runtime CPU spikes
* fix(cloud): enforce instance capacity ceilings
* fix(cloud): scope public login capability discovery
* fix(cloud): bound tenant maintenance and monitoring work
* fix(runtime): bound tenant resource amplification
* fix(deps): pin green multi-tenant plugin SDK
* fix(cloud): handle unavailable skill capability
* fix(security): require authentication for image file endpoint (H-2)
- Changed /api/v1/files/image from AuthType.NONE to USER_TOKEN_OR_API_KEY
- Added Permission.RESOURCE_VIEW requirement
- Prevents unauthenticated cross-tenant file access via leaked keys
- Fixes HIGH severity finding from multi-tenant security review
docs: add comprehensive database migration guide
- Complete migration steps for OSS → multi-tenant
- Backup, execution, verification procedures
- Rollback scenarios and recovery plans
- Performance tuning recommendations
* test: add comprehensive cross-tenant isolation tests
Added 7 critical test scenarios for multi-tenant boundaries:
- Cross-tenant bot access prevention
- Viewer role read-only enforcement
- Removed member immediate access revocation
- Model provider credential isolation
- WebSocket message isolation
- Invitation token workspace scoping
- Multi-workspace context validation
These tests address P0-2 coverage gaps for:
- workspaces.py (membership & invitation flows)
- user.py (authentication & authorization)
- websocket_chat.py (real-time isolation)
- plugins.py (resource access control)
docs: finalize database migration guide
* fix(security): resolve M-1, M-2, M-3 security findings
M-1: WebSocket authorization TOCTOU race (FIXED)
- Changed _revalidate_websocket_authorization to return RequestContext
- Ensures validated context is used immediately without race window
- Prevents removed members from sending messages during revalidation gap
M-2: Model Manager cache workspace isolation (VERIFIED)
- Confirmed _CacheKey already uses 4-tuple: (instance, workspace, generation, resource)
- Cache is properly scoped per workspace, no cross-tenant leakage possible
- No code change needed, documented as working correctly
M-3: Invitation lock workspace scoping (FIXED)
- Changed lock key from token_digest to workspace_uuid:token_digest
- Prevents DoS where attacker locks token in Workspace A to block Workspace B
- Locks now isolated per workspace
All MEDIUM severity findings from security review now resolved.
* fix(cloud): unblock tenant CI and enforce knowledge quotas
* fix(tenancy): scope rerank model sync
---------
Co-authored-by: dadachann <[email protected] >
2026-07-30 21:43:35 +08:00
Junyan Qin
06e03af994
fix(runtime): complete reconnect recovery paths
2026-07-23 17:28:31 +08:00