huanghuoguoguo
8db23bf950
feat(agent-runner): add event-first context facts and pull APIs
...
Add EventLog and Transcript persistence entities for storing auditable
event facts and conversation history projection. Implement event-first
AgentRunContext builder that produces Protocol v1 compliant context
payloads with required fields: event, delivery, context (ContextAccess).
Key changes:
- EventLog ORM: auditable event records with indexes
- Transcript ORM: conversation history projection with composite indexes
- AgentRunContextBuilder: Protocol v1 payload with delivery, context, bootstrap
- EventLogStore/TranscriptStore: async stores for fact sources
- Host action handlers: HISTORY_PAGE, HISTORY_SEARCH, EVENT_GET, EVENT_PAGE
- Context validation: build_context output validates via SDK AgentRunContext
- Alembic migration for event_log and transcript tables
- Alembic env.py imports all ORM models for autogenerate discovery
Legacy compatibility: max-round messages go into bootstrap.messages and
compatibility.legacy_messages, not top-level messages field.
2026-05-23 16:07:46 +08:00
huanghuoguoguo
8063303cfa
docs(agent-runner): split protocol and context design
2026-05-23 13:07:57 +08:00
huanghuoguoguo
094b87e578
fix(agent-runner): package context for plugin execution
2026-05-21 13:56:17 +08:00
huanghuoguoguo
26923c66c0
feat: make agent runner config schema driven
2026-05-19 12:20:28 +08:00
huanghuoguoguo
146694539e
chore(pipeline): clarify preferred default runner
2026-05-19 10:36:19 +08:00
huanghuoguoguo
7d6f635664
chore(agent): remove v1 wording from runner internals
2026-05-19 10:27:40 +08:00
huanghuoguoguo
641b15c74d
Revert "chore: update uv lock registry urls"
...
This reverts commit 0cf29930a8 .
2026-05-19 10:15:34 +08:00
huanghuoguoguo
0cf29930a8
chore: update uv lock registry urls
2026-05-19 10:15:05 +08:00
huanghuoguoguo
927388c1f7
feat(agent): reserve stable runner event names
2026-05-19 10:15:00 +08:00
huanghuoguoguo
760baa24a3
docs: add phase1 qa report
2026-05-19 10:07:26 +08:00
huanghuoguoguo
036affe01f
feat(agent-runner): enrich plugin runner host context
2026-05-17 23:26:52 +08:00
huanghuoguoguo
19557c3227
fix: log agent runner best-effort failures
2026-05-17 11:07:52 +08:00
huanghuoguoguo
b9ecb27560
test: address agent runner review comments
2026-05-17 11:07:52 +08:00
huanghuoguoguo
b96dd8edc7
fix: stabilize dynamic forms and mcp testing
2026-05-17 11:07:52 +08:00
huanghuoguoguo
423fa0f942
refactor(modelmgr): simplify model sync logic and remove timeout configuration
2026-05-17 11:07:52 +08:00
huanghuoguoguo
948591d439
fix(rag): align knowledge engine plugin actions
2026-05-17 11:07:52 +08:00
huanghuoguoguo
ac3989d3ba
feat: support dynamic agent runner defaults
2026-05-17 11:07:52 +08:00
huanghuoguoguo
1e5acb947b
feat(toolmgr): add get_tool_by_name for unified tool lookup
...
Add unified tool lookup method that searches both plugin and MCP loaders.
Also add _get_tool method to MCPLoader for consistency with PluginToolLoader.
2026-05-17 11:07:52 +08:00
huanghuoguoguo
74b829a288
docs: update PROGRESS.md - rerank support completed
2026-05-17 11:07:52 +08:00
huanghuoguoguo
6e982ff49d
feat(plugin): implement INVOKE_RERANK handler with run-scoped authorization
...
- Add invoke_rerank action handler in plugin handler
- Validate rerank model access via run session
- Cap documents at 64 for API limit
- Return sorted results by relevance score
2026-05-17 11:07:52 +08:00
huanghuoguoguo
b220cf02e5
docs(runner): mark legacy runners and add PROGRESS.md
...
- Add DEPRECATED docstring to all legacy runners in pkg/provider/runners/
- Mark migration target for each runner (local-agent, dify, n8n, coze, dashscope, langflow, tbox)
- Add PROGRESS.md to track agent-runner-pluginization implementation status
- Remove completed PHASE0_INTEGRATION_RECORD.md
2026-05-17 11:07:52 +08:00
huanghuoguoguo
66eaa99887
perf(agent-runner): improve session registry and orchestrator efficiency
...
- Add pre-computed _authorized_ids (frozenset) at session registration for O(1) lookup
- Refactor is_resource_allowed() from linear search to set membership check
- Add thread-safe locking to get_session_registry() singleton
- Cache _session_registry and _state_store references in orchestrator __init__
- Add asyncio.gather() for parallel resource building in AgentResourceBuilder
- Create shared test fixtures in tests/unit_tests/agent/conftest.py
- Update test files to import from shared conftest.py
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-17 11:07:52 +08:00
huanghuoguoguo
5aaa422250
feat(agent-runner): integrate AgentRunner Protocol v1 with plugin system
...
Phase 0 integration complete - verified minimal loop with local-agent stub runner.
Changes:
- Add AgentRunOrchestrator for plugin-based agent execution
- Add AgentResultNormalizer for Protocol v1 result conversion
- Add AgentRunnerDescriptor for runner ID parsing (plugin:author/name/runner)
- Update chat handler to use new orchestrator instead of direct runner lookup
- Add plugin handler methods for list_agent_runners and run_agent
- Add connector methods for AgentRunner protocol forwarding
- Update pipeline API to include runner options in metadata
- Add integration docs and implementation plan
Integration verified:
- Runner: plugin:langbot/local-agent/default
- Input: "你好"
- Output: [stub] Echo: 你好
- Date: 2026-05-10 10:09
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-17 11:05:27 +08:00
Junyan Qin
b7dcda8b23
docs: record agent runner design decisions
2026-05-17 11:05:27 +08:00
Junyan Qin
3c58b9141b
docs: design agent runner pluginization
2026-05-17 11:05:27 +08:00
Junyan Qin
ddbf390d56
chore: stash code
2026-05-17 11:05:27 +08:00
sheetung
767137aaa0
Merge pull request #2209 from sheetung/fix/sidebar-menu-cursor-webui
...
Fix/sidebar menu cursor webui
2026-05-16 23:34:33 +08:00
sheetung
acb2ce6a40
fix(webui): fix prettier formatting for span with className
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 15:21:50 +00:00
sheetung
67784708d6
fix(webui): add cursor-pointer and select-none to sidebar menu text spans
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 15:21:50 +00:00
Nody the lobster
1bd9c334aa
fix: load persisted plugin config ( #2208 )
...
Co-authored-by: RockChinQ <rockchinq@gmail.com >
2026-05-16 15:51:45 +08:00
huanghuoguoguo
17bbc8bf10
Feat/test build ( #2174 )
...
* fix(ci): update unit-test workflow paths to match current source layout
Replace stale pkg/** filter with src/langbot/** and add uv.lock.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* docs(tests): update README to reflect current test layout
- Fix stale paths: tests/pipeline → tests/unit_tests/pipeline
- Update CI Python versions: 3.11, 3.12, 3.13
- Add test directory structure for box, config, platform, plugin, provider, storage
- Document pytest markers and uv commands
- Mention planned E2E tests
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* feat(test): add shared test factories package
Create tests/factories/ with reusable test factories:
- FakeApp: mock application with all dependencies
- Message chains: text_chain, mention_chain, image_chain
- Query factories: text_query, group_text_query, command_query, etc.
No test changes - maintains backward compatibility.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* feat(test): add fake provider factory
Add tests/factories/provider.py with:
- FakeProvider: deterministic fake LLM provider
- Error simulation: timeout, auth, rate-limit, malformed
- Request capture for assertions
- fake_model: mock model with attached provider
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* feat(test): add fake platform factory
Add tests/factories/platform.py with:
- FakePlatform: simulated platform adapter
- Inbound message construction: friend/group/image
- Mention-bot flag simulation
- Outbound message capture for assertions
- Streaming output support simulation
- Send failure simulation
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* feat(test): add comprehensive message/query factories
Extend tests/factories/message.py with:
- file_query: file attachment query
- unsupported_query: unknown message segment
- voice_query: audio/voice query
- at_all_query: group @All mention
- query_with_session: query with session object
- query_with_config: query with custom pipeline config
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* feat(test): add fake message flow smoke test
Create tests/smoke/test_fake_message_flow.py:
- TestFakeMessageFlow: factory verification tests
- TestMessageFlowIntegration: minimal flow smoke test
- Tests FakeApp, FakeProvider, FakePlatform, query factories
- Verifies LANGBOT_FAKE_PONG marker response
- Captures outbound messages for assertions
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* feat(test): add developer test-quick command
Add scripts/test-quick.sh and Makefile with:
- test-quick: runs ruff check + unit tests + smoke tests
- No real provider keys or platform accounts required
- Suitable for local branch self-test
Update tests/README.md:
- Document test-quick command
- Document test factories package
- Add smoke tests and factories directory structure
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* fix(test): make test-quick reliable as developer gate
Fixes for D-001验收问题:
1. test-quick.sh: use set -euo pipefail, uv run ruff, no tail pipe
2. Remove unused imports in factories (app.py, platform.py, provider.py)
3. Fix unused variable in smoke test
4. Add noqa: E402 to test_n8nsvapi.py lazy imports
5. Update smoke test docs: "minimal fake flow" not full pipeline
Now test-quick is a reliable gate: lint failures exit 1, test failures propagate.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* test(unit): add preproc and taskmgr unit tests
U-001: Pipeline Preprocessor tests
- Normal text message processing
- Empty message handling
- Image segment with/without vision model
- Model selection and fallback
- Variable extraction
U-004: Core Task Manager tests (pattern-based)
- Task creation and tracking patterns
- Task cancellation patterns
- Scope-based cancellation
- Task type filtering
- Pruning completed tasks
- Wait all tasks
Taskmgr tests use pattern-based approach to avoid circular import
in source code (taskmgr → app → http_controller → migration → taskmgr).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* test(unit): add config loader unit tests
U-005: Config Loader tests
- Valid YAML config loading
- Valid JSON config loading
- Invalid YAML/JSON error behavior
- Missing config file creation from template
- Template completion for missing keys
- ConfigManager load/dump operations
- Exists check for both YAML and JSON
All tests use tmp_path fixture, no real project config.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* test(unit): add chat and command handler pattern tests
U-002: Chat Handler tests (pattern-based)
- Normal message event emission pattern
- prevent_default handling
- User message alteration pattern
- Runner selection pattern
- Streaming/non-streaming response patterns
- Exception handling modes (show-error, show-hint, hide)
- Message history update pattern
- Telemetry payload pattern
U-003: Command Handler tests (pattern-based)
- Command parsing and text extraction
- Event creation pattern
- Privilege/admin check pattern
- Command result handling (text, error, image)
- prevent_default handling
- String truncation helper
Uses pattern-based testing to avoid circular import issues in source code.
Direct imports of handler modules trigger circular import chain.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* style: fix unused imports after ruff auto-fix
Remove unused imports in test files:
- test_config_loader.py: remove unused os
- test_taskmgr.py: remove unused Mock
- test_preproc.py: remove unused unsupported_query, image_chain
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* test(unit): improve taskmgr tests to test real classes
U-004 improved: Tests now import and test actual classes:
- TaskContext: new(), trace(), to_dict(), placeholder()
- TaskWrapper: task creation, context, exception/result capture, cancel, to_dict
- AsyncTaskManager: create_task, create_user_task, cancel_task, cancel_by_scope
- Task pruning behavior
Uses pre-mocking technique:
- Mock langbot.pkg.core.app before import (breaks circular chain)
- Mock langbot.pkg.core.entities with proper Enum
All 24 tests now test real class behavior, not patterns.
taskmgr.py coverage should improve significantly.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* refactor(test): consolidate FakeApp and add sys.modules isolation utility
- Extract tests/utils/import_isolation.py with isolated_sys_modules context manager
- Extend tests/factories/app.py FakeApp with handler-specific attributes
- Refactor test_chat_handler.py to use centralized FakeApp and cached imports
- Refactor test_command_handler.py with mock_execute_factory fixture
- Refactor test_smoke.py to move import-time sys.modules manipulation into fixture
- Add SQLite migration integration tests (G-002)
- Add HTTP API smoke integration tests (G-005)
- Update CI workflow to call pytest for SQLite migrations (G-004)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* feat(test): add developer quality gate consolidation (G-007)
- Add scripts/test-integration-fast.sh for fast integration tests
- Add scripts/test-coverage.sh with 12% baseline threshold
- Update Makefile with test-integration-fast, test-coverage, test-all-local
- Update CI workflow with integration and coverage jobs
- Add smoke marker to pytest.ini
- Update tests/README.md with quality gate layers documentation
- Add tests/integration/pipeline/ for pipeline stage-chain tests
Quality gate layers:
- Quick: ruff + unit + smoke (~2 min)
- Fast Integration: SQLite/API/Pipeline (~3 min)
- Coverage: 12% threshold gate (~8 min)
- Full Local: all three combined
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* feat(test): add PostgreSQL migration slow integration tests (G-003)
- Add tests/integration/persistence/test_migrations_postgres.py
- All tests marked with @pytest.mark.slow
- Tests skip when TEST_POSTGRES_URL is not set (no local PostgreSQL)
- Database isolation via clean_tables and clean_alembic_version fixtures
- Update CI workflow to use pytest instead of inline Python script
- Remove TODO(G-003) comment
- Update tests/README.md with PostgreSQL test documentation
Covered scenarios:
- Baseline stamp sets revision
- Upgrade from baseline to head
- Upgrade idempotent
- Get current on unstamped DB returns None
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* feat(test): Phase 1.5 coverage expansion - COV-001 to COV-013
Coverage baseline raised from 13.65% to 26% (+12.35%)
Gate raised from 12% to 18%
Tasks completed:
- COV-001: Command system unit tests (100% coverage)
- COV-002: API service unit tests batch 1 (user/apikey/model/provider)
- COV-003: Provider model manager unit tests
- COV-004: Pipeline remaining stage tests (aggregator/cntfilter/longtext/msgtrun)
- COV-005: Storage and utils coverage pass
- COV-006: Gate ratchet 12%→15%
- COV-007: Gate ratchet 15%→18%
- COV-008: API service batch 2 (bot/pipeline/webhook/space/maintenance/mcp)
- COV-009: Blocked - API controller circular import issue documented
- COV-010: Plugin runtime unit tests (+0.08%)
- COV-011: RAG and vector unit tests (+0.68%)
- COV-012: Core boot and migration unit tests
- COV-013: Provider requester logic unit tests (+0.62%)
Key additions:
- tests/utils/import_isolation.py: sys.modules isolation for circular imports
- Provider requester mock tests: proved HTTP-dependent code can be tested locally
- Vector filter utilities: 100% coverage on pure functions
- API services: fake persistence pattern for unit testing
Blocked issue COV-009 documented in langbot-test-plan/1.5/issues/
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* test(phase1): add unit tests for telemetry, plugin, rag, persistence
Add initial unit tests for Phase 1 of test coverage improvement:
- telemetry: test initialization, payload sanitization, early returns (14.3% → 62.9%)
- plugin: test _parse_plugin_id static method
- rag: test _to_i18n_name static method
- persistence: test serialize_model with datetime handling
Overall core coverage: 41.9% → 42.2%
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* test(phase2): add unit tests for core, persistence, plugin, utils
- Add test_handler_helpers.py for plugin handler helpers (7 tests)
- Add test_mgr_methods.py for persistence manager (5 tests)
- Add test_app_config_validation.py for core app config (12 tests)
- Add test_knowledge_service.py for API knowledge service (22 tests)
- Add test_kbmgr.py for RAG knowledge base manager (39 tests)
- Add test_survey_manager.py for survey manager (22 tests)
- Add test_connector_methods.py for plugin connector (24 tests)
- Add test_funcschema.py for utils function schema (9 tests)
- Add test_platform.py for utils platform detection (7 tests)
- Add test_extract_deps.py for plugin deps extraction (7 tests)
- Add test_database_decorator.py for persistence decorator (7 tests)
- Add test_load_config.py for core config loading (19 tests)
- Add COVERAGE_EXCLUSIONS.md documenting external adapter exclusions
- Fix test_chat_session_limit.py path for portability
Coverage: core 28% → 30%, persistence 24% → 24.4%, plugin 27% → 28%
Total: 1082 tests passed, core module coverage 45.5%
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* test(integration): add API controller integration tests
- Add test_pipelines.py (10 tests) covering pipelines CRUD operations
- GET/POST/PUT/DELETE on /api/v1/pipelines
- Extensions endpoint
- Metadata endpoint
- Coverage: pipelines controller 27% → 80%
- Add test_providers.py (10 tests) covering provider/model management
- Provider CRUD with model counts
- LLM model CRUD
- Coverage: providers controller 23% → 81%, models 29% → 45%
Tests use Quart TestClient with mocked services for real HTTP behavior
without external dependencies.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* test(integration): add knowledge, bots, and model endpoints tests
- Add test_knowledge.py (10 tests) covering knowledge base management
- CRUD operations on /api/v1/knowledge/bases
- Files management endpoints
- Retrieve endpoint with validation
- Coverage: knowledge/base.py 26% → 91%
- Add test_bots.py (9 tests) covering bot management
- CRUD operations on /api/v1/platform/bots
- Logs endpoint
- Send message endpoint with validation
- Coverage: platform/bots.py 24% → 87%
- Extend test_providers.py (+4 tests) for embedding/rerank models
- Embedding models CRUD
- Rerank models CRUD
- Coverage: provider/models.py 29% → 60%
Total integration tests: 53 (smoke 12 + pipelines 10 + providers 14 + knowledge 10 + bots 9)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* test(integration): add embed and monitoring endpoint tests
Add integration tests for embed widget and monitoring API endpoints:
- test_embed.py: 15 tests for widget.js, logo, turnstile, messages, reset, feedback
- test_monitoring.py: 15 tests for overview, messages, llm-calls, sessions, errors, export
Coverage improvements:
- embed.py: 17% → 56%
- monitoring.py: 17% → 93%
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* test(e2e): add minimal startup E2E tests
Add E2E tests for LangBot startup flow:
- tests/e2e/utils/config_factory.py: minimal config generation
- tests/e2e/utils/process_manager.py: LangBot subprocess management
- tests/e2e/conftest.py: E2E fixtures (session-scoped process)
- tests/e2e/test_startup.py: 12 tests for startup verification
Tests verify:
- boot.py + stages execution
- database initialization (SQLite)
- API availability
- migrations applied
Uses embedded databases (SQLite, Chroma) - no external dependencies.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* test(quality): fix fake tests and add missing coverage
P0 fixes:
- telemetry: rewrite fake tests with real behavior verification (25 tests)
- config: delete copied-source tests, use proper imports (2 deleted)
- persistence: fix try-except pass to verify specific errors
P1 fixes:
- pipeline: add real FixedWindowAlgo tests instead of mocks (12 tests)
- provider: add SessionManager and ToolManager tests (25 tests)
- storage: add S3StorageProvider tests with moto mock (16 tests)
- plugin: add handler action tests for setting inheritance (15 tests)
- rag: add file storage and ZIP processing tests (21 tests)
- vector: add VDB filter conversion tests (30 tests)
P2 fixes:
- pipeline/msgtrun: strengthen assertions for exact message count
- api: add response structure validation in integration tests
New test files:
- provider/test_session_manager.py
- provider/test_tool_manager.py
- storage/test_s3storage.py
- plugin/test_handler_actions.py
- rag/test_file_storage.py
- vector/test_vdb_filter_conversion.py
Source code bugs documented:
- provider: TokenManager.next_token() ZeroDivisionError
- telemetry: send_tasks class variable shared state
- command: empty command IndexError, unused parameters
- utils: funcschema KeyError
- entity: vector.py independent declarative_base
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* docs(test): update coverage stats and test structure
- Update coverage from 22% to 30%
- Add new test files to structure:
- provider: session_manager, tool_manager
- storage: s3storage
- plugin: handler_actions
- rag: file_storage
- vector: vdb_filter_conversion
- telemetry: rewritten tests
- Update module coverage percentages
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
* test: add 105 new unit tests for untested core functionality
Add comprehensive tests for B-class issues (core functionality untested):
Pipeline:
- test_pool.py: QueryPool ID generation, caching, async context (12 tests)
- test_ratelimit.py: Fixed timing-sensitive test tolerance
- test_pipelinemgr.py: Use real Pydantic StageProcessResult instead of Mock
Utils:
- test_version.py: Version comparison functions (20 tests)
- test_logcache.py: Log page management and retrieval (18 tests)
- test_httpclient.py: HTTP session pool management (10 tests)
- test_proxy.py: Proxy configuration from env and config (10 tests)
- test_image.py: URL parsing and base64 extraction (12 tests)
- test_pkgmgr.py: Pip command generation (8 tests)
Discover:
- test_engine.py: I18nString, Metadata, Component manifest (15 tests)
Test count: 1193 → 1298 (+105 tests)
Note: Some B-class issues cannot be tested due to circular import bugs
filed as GitHub issues #2175 (pipeline) and #2176 (persistence).
* test: tighten phase 1 coverage contracts
* test: align ci integration isolation
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-16 12:05:54 +08:00
huanghuoguoguo
4a4c0921a4
fix(plugin): use specific runtime not connected error ( #2199 )
2026-05-16 11:36:27 +08:00
huanghuoguoguo
e425cf079a
fix(pipeline): return query from QueryPool.add_query ( #2198 )
2026-05-16 11:36:10 +08:00
huanghuoguoguo
245e798b79
fix(pipeline): handle empty longtext response chain ( #2197 )
2026-05-16 11:35:20 +08:00
huanghuoguoguo
27fdccce16
fix(pipeline): preserve routed flag when aggregating ( #2196 )
2026-05-16 11:35:00 +08:00
huanghuoguoguo
484643c0ee
fix(api): validate api key prefix ( #2195 )
2026-05-16 11:33:20 +08:00
huanghuoguoguo
ec61459619
fix(api): avoid mutating bot update payload ( #2194 )
2026-05-16 11:31:59 +08:00
huanghuoguoguo
66ef744447
fix(rag): reject unsafe runtime file paths ( #2193 )
2026-05-16 11:31:00 +08:00
huanghuoguoguo
10d3a9cc92
fix(api): avoid mutating pipeline update payload ( #2192 )
2026-05-16 11:30:32 +08:00
huanghuoguoguo
885320e9ae
fix(utils): preserve QQ image URL scheme ( #2188 )
2026-05-16 11:29:31 +08:00
huanghuoguoguo
ed02ac4710
fix(utils): classify runner URLs safely ( #2191 )
...
* fix(utils): classify runner URLs safely
* fix(utils): keep runner parse failures unknown
2026-05-16 11:28:34 +08:00
huanghuoguoguo
e4841edbaf
fix pkgmgr install requirements default ( #2190 )
2026-05-16 11:26:49 +08:00
huanghuoguoguo
ef7a06b0db
fix telemetry send task isolation ( #2187 )
2026-05-16 11:26:23 +08:00
huanghuoguoguo
6fe20c1812
fix(core): handle sigint before app startup ( #2189 )
2026-05-16 11:24:34 +08:00
huanghuoguoguo
9e8c8f79df
fix(plugin): validate plugin id format ( #2185 )
2026-05-16 11:21:58 +08:00
huanghuoguoguo
01d06898fb
fix(provider): ignore empty token rotation ( #2184 )
2026-05-16 11:21:09 +08:00
huanghuoguoguo
0a669c7016
fix(utils): handle missing funcschema parameter docs ( #2186 )
2026-05-16 11:20:32 +08:00
RockChinQ
b251fc4b89
fix(plugin): resolve plugin page asset origin
2026-05-14 15:39:17 +08:00
Junyan Qin
075c85e2bc
chore: bump version 4.9.7
v4.9.7
2026-05-12 23:48:52 +08:00
Junyan Qin
62b63ca2ca
chore: bump langbot plugin to 0.3.11
2026-05-12 23:47:35 +08:00