BiFangKNT
57077740bd
chore(merge): sync master and preserve monitoring test coverage
2026-10-18 12:43:44 +08:00
BiFangKNT
b73f66a234
feat(persistence): enforce image reference storage contract
...
- Reject structured inline images on ORM and Core writes
- Route plugin run results through the media-aware journal
- Redact legacy inline images before merging run metadata
- Cover storage contracts and regressions on SQLite and PostgreSQL
2026-10-18 12:26:09 +08:00
BiFangKNT
80b8358d8d
test(monitoring): add status column to monitoring messages table
2026-10-18 11:10:35 +08:00
huanghuoguoguo
13b8edeace
Merge pull request #2705 from langbot-app/test/required-contract-suites
...
test(ci): decouple required suites from test names and counts
2026-10-17 23:12:59 +08:00
huanghuoguoguo
407e352e5d
Merge pull request #2695 from langbot-app/test/quality-migration-oracles-20261017
...
test(migrations): reuse historical data contracts and measure startup peaks
2026-10-17 20:12:34 +08:00
huanghuoguoguo
da4c987976
Merge pull request #2687 from langbot-app/test/quality-persistence-core-oracles-20261017
...
test: strengthen startup and persistence boundary oracles
2026-10-17 20:11:42 +08:00
huanghuoguoguo
0f522e5286
test(persistence): verify migration data and startup task bounds
2026-10-17 16:08:08 +08:00
huanghuoguoguo
1c0fd7d0ba
test: strengthen startup and persistence boundary oracles
2026-10-17 15:45:09 +08:00
huanghuoguoguo
4afd86c1f6
test: consolidate duplicate backend contracts and strengthen stage checks
2026-10-17 15:03:50 +08:00
huanghuoguoguo
2b79b04d36
Merge pull request #2635 from langbot-app/test/core-contract-coverage-gaps
...
test(core): verify runtime behavior and close PostgreSQL coverage gaps
2026-10-17 09:13:07 +08:00
RockChinQ
338b856eec
fix(monitoring): restore Cloud in-flight snapshots and collapsed dock
2026-10-15 16:42:24 +08:00
RockChinQ
0ed2a513f9
test(persistence): verify tagged 4.10.11 upgrades on sqlite and postgres
2026-10-13 13:28:03 +00:00
RockChinQ
48c6a1f536
fix(sqlite): enable WAL for concurrent plugin callback commits
2026-10-13 11:40:55 +00:00
Hyu
3ff849d243
test: align processor fixtures with current creation and startup behavior
2026-10-11 01:03:31 +08:00
RockChinQ
b51a448b1e
feat: stateless certified shared worker
...
Implements stateless singleton component model for certified shared Workers, integrating with SDK 0.7.0.
2026-09-28 13:25:40 +08:00
RockChinQ
a5e5ee5fb8
fix(plugin): backfill certified artifact digest
2026-09-25 21:03:47 +00: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
28e8821365
fix(auth): repair TOTP CI failures
...
Address the migration and formatting failures reported on the TOTP branch.
Migrations
- Register totp_credentials and totp_recovery_codes in
_ALEMBIC_TENANT_TABLES. On a legacy PostgreSQL install these two tables
reference users.uuid, which only exists after 0009, so create_all() must
not run ahead of Alembic the way it did for the other tenant tables.
Without this the PostgreSQL migration test failed with
"column uuid referenced in foreign key constraint does not exist".
Tests
- Resolve the Alembic head dynamically in the RAG document identity
regression instead of pinning 0025_rag_document_identity. The TOTP and
RAG branches now meet at a merge revision, so the pinned value was no
longer the head. This matches the convention already used by
test_migrations_postgres.
Formatting
- Apply ruff format to the new backend modules and prettier to the locale
files and TOTP components, so the lint jobs pass.
2026-09-24 01:31:54 +08:00
RockChinQ
08a6ed0fdd
fix(runner): normalize PostgreSQL journal timestamps to UTC-naive
...
Preserve the published timezone-less schema and epoch API contract across run lifecycle, deadlines, leases, heartbeat registry, events, transcripts and retention cutoffs. Exercise the real Host journal with asyncpg under a non-superuser role on metadata and published-migration schemas; 32 PostgreSQL regressions fail before the fix and pass after it.
2026-09-21 17:05:40 +00: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
381bb3f852
fix(rag): retain interrupted ingestion state and engine identity
2026-09-21 07:47:31 +00: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
RockChinQ
8c119bc4b6
feat: add verified manual pipeline migration for plugin runners
2026-09-16 18:13:11 +00: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
BiFangKNT
dfde9578c1
fix(ci): fix ruff lint errors and postgres legacy migration table exclusion
2026-09-12 15:35:47 +08:00
Hyu and dadachann
ff6ad6adc2
fix(monitoring): restore Cloud messages and bot-scoped sessions ( #2526 )
...
* fix(monitoring): restore Cloud message persistence and bot-scoped sessions
* fix(migrations): support partial monitoring schemas and align regression fixtures
* test(migrations): complete raw bot session fixture values
---------
Co-authored-by: dadachann <[email protected] >
2026-09-11 14:34:37 +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
Hyu and dadachann
0f216a0d4d
feat(provider): support Codex subscriptions with ChatGPT sign-in ( #2513 )
...
* feat(provider): support Codex subscriptions with ChatGPT sign-in
* style: format Codex live integration test
* fix(provider): preserve Codex identity in temporary model tests
* fix(web): portal provider selector without dialog overflow
* fix(web): allow native scrolling in provider dropdown
* fix(provider): surface safe Codex quota and upstream errors
* fix(web): provide reliable Codex copy feedback in dialogs
* feat(provider): confirm cascade deletion from edit dialog
* fix(persistence): discard connections after failed commit
* fix(web): polish provider loading and confirmation motion
---------
Co-authored-by: dadachann <[email protected] >
2026-09-06 23:31:02 +08:00
Hyu
fde04e64f6
Merge remote-tracking branch 'origin/master' into dev/4.11.x
...
# Conflicts:
# src/langbot/pkg/api/http/controller/groups/pipelines/pipelines.py
# src/langbot/pkg/api/http/service/bot.py
# src/langbot/pkg/provider/runners/localagent.py
# src/langbot/templates/metadata/pipeline/ai.yaml
# tests/unit_tests/api/service/test_bot_service.py
# tests/unit_tests/provider/runners/test_difysvapi_runner.py
# tests/unit_tests/utils/test_safe_regex.py
# web/src/app/infra/entities/adapter-categories.ts
# web/src/app/wizard/page.tsx
# web/src/i18n/locales/en-US.ts
# web/src/i18n/locales/ja-JP.ts
# web/src/i18n/locales/zh-Hans.ts
# web/tests/e2e/plugin-page-auth.spec.ts
2026-08-31 17:17:47 +08:00
Neos and Hyu
e69a80f5e9
Windows 兼容性修复 + Dify API 适配 + 企微 WS 加载优化 ( #2470 )
...
* fix: Windows fsync requires write access to file descriptor
- _fsync_file: os.O_RDONLY -> os.O_RDWR (Windows _commit() requires write access)
- _fsync_directory: tolerate OSError on fsync and os.open (chmod 0o700 blocks access on Windows)
* fix: Dify SSE empty data lines and upload response format mismatch
- Skip malformed/flushed SSE data lines (JSONDecodeError)
- Accept HTTP 200 besides 201 for file upload response
- Unwrap data wrapper in upload response (resp.get('data', resp))
* feat: WeCom WS mode sends empty initial stream frame for loading spinner
Send an empty reply_stream frame immediately after stream session
creation so the WeCom client shows its built-in loading indicator
while the pipeline processes the message (e.g. RAG retrieval).
* fix(compat): harden Windows, Dify, and WeCom changes
* fix(migration): clean interrupted SQLite temp files
---------
Co-authored-by: Hyu <[email protected] >
2026-08-29 22:34:10 +08:00
Hyu and dadachann
bafdaf0033
fix(monitoring): restore SQLite token statistics ( #2479 )
...
* fix(monitoring): restore SQLite token statistics
Allow the monitored SQLite strftime bucket expression through the tenant SQL guard and preserve structured backend errors in the token dashboard. Add persistence and frontend regressions.\n\nVerified-by: independent-review
* test(runtime): accept reconcile timeout in capacity stub
Keep the PostgreSQL capacity probe aligned with the runtime handler contract and assert the bounded reconcile timeout.
---------
Co-authored-by: dadachann <[email protected] >
2026-08-28 11:41:42 +08:00
RockChinQ
80f1790e1d
refactor(agent): remove enabled state
2026-08-25 23:27:45 +08:00
dadachann
0559d9d441
Merge master into dev/4.11.x
...
# Conflicts:
# pyproject.toml
# uv.lock
2026-08-24 02:34:14 +00:00
Hyu and dadachann
54c96a18e1
test(migration): preserve legacy plugin storage payloads ( #2444 )
...
Co-authored-by: dadachann <[email protected] >
2026-08-17 10:31:03 +08:00
dadachann
b62cc9da45
fix(migrations): preserve legacy workspace ownership
2026-08-16 17:15:57 +00:00
dadachann
0cc0e1b02d
fix(migrations): retry backup reopen on bind mounts
2026-08-16 16:42:20 +00:00
Junyan Qin
f94243c725
chore: merge master into dev/4.11.x
2026-08-14 16:04:52 +08:00
Dongchuan Fu
e37987215e
feat(provider): add pipeline reasoning controls ( #2373 )
...
* feat(provider): add pipeline reasoning controls
* fix(provider): preserve local agent model compatibility
* refactor(web): use shadcn reasoning slider
* fix(runtime): stabilize reasoning chat delivery
* fix(provider): route reasoning controls by model family
* fix(provider): handle hosted Kimi reasoning protocols
* fix(provider): map qwen reasoning levels to budgets
* fix(provider): preserve think tags in streamed reasoning
* fix(provider): preserve reasoning tool metadata
* style(provider): satisfy ruff checks after merge
* fix(persistence): preserve reasoning migration compatibility
2026-08-09 17:38:01 +08:00
Hyu and Chan
4bd899e77b
fix(cloud): track workspace membership provenance ( #2406 )
...
* fix(cloud): converge legacy revision-zero members
* fix(cloud): track workspace membership provenance
* test(persistence): track current migration head
---------
Co-authored-by: Chan <[email protected] >
2026-08-07 11:26:06 +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
huanghuoguoguo
679b8346cb
Merge remote-tracking branch 'origin/master' into dev/4.11.x
...
# Conflicts:
# pyproject.toml
# src/langbot/pkg/pipeline/controller.py
# uv.lock
# web/src/app/home/bots/components/bot-form/BotForm.tsx
# web/src/app/home/components/home-sidebar/HomeSidebar.tsx
# web/src/app/home/components/home-sidebar/SidebarDataContext.tsx
# web/src/app/home/plugin-pages/page.tsx
# web/src/app/infra/entities/api/index.ts
2026-08-04 12:16:27 +08:00
Hyu and dadachann
1e6e4c0ca7
fix(cloud): show owner model balance and enforce single owner ( #2384 ) ( #2385 )
...
* fix(cloud): show owner model balance and enforce single owner
* fix(migrations): create owner index idempotently
---------
Co-authored-by: dadachann <[email protected] >
2026-08-03 02:14:43 +08:00
Hyu and dadachann
0ccbcd5f5f
fix(migrations): preserve published Cloud revision head ( #2375 )
...
Co-authored-by: dadachann <[email protected] >
2026-08-02 00:56:20 +08:00
huanghuoguoguo
551593b173
fix(migrations): merge workspace revision heads
2026-08-01 10:09:09 +08:00
huanghuoguoguo
e589683b98
Merge remote-tracking branch 'origin/master' into dev/4.11.x
...
# Conflicts:
# src/langbot/pkg/pipeline/process/handlers/chat.py
# tests/integration/persistence/test_workspace_migration.py
2026-08-01 09:31:23 +08:00
huanghuoguoguo
79611a5513
fix(agent): harden runner integration and QA
2026-08-01 09:23:41 +08:00
Hyu and dadachann
5d9fd15671
feat: use workspace identity for telemetry ( #2371 )
...
Co-authored-by: dadachann <[email protected] >
2026-07-31 23:35:14 +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
RockChinQ
85743cc75f
fix(tests): make Postgres migration head test revision-agnostic
...
The PostgreSQL migration test had the same hardcoded 0005 head
assertion as the SQLite one; resolve the actual head from the Alembic
ScriptDirectory so 0006 (and future migrations) don't break it.
2026-06-21 12:10:20 -04:00