Commit Graph
5566 Commits
Author SHA1 Message Date
huanghuoguoguo 77dfa17c57 test(regression): add selectable resource lifecycle cases (#2794) 2026-10-28 16:11:19 +08:00
huanghuoguoguo f837083781 test(regression): run expanded scenarios within a shared execution budget (#2793)
* test(regression): expand finite scenarios and share bounded execution lifecycle

* fix(regression): continue job cleanup after state persistence failure
2026-10-28 12:16:36 +08:00
huanghuoguoguo 50e7175066 test(regression): report behavior assertions and observed HTTP routes (#2792)
* test(regression): report asserted behavior coverage and observed HTTP routes

* fix(regression): finalize all callers and classify HTTP evidence safely
2026-10-28 11:49:42 +08:00
huanghuoguoguo 84dd3708fb test(tools): resolve and install latest published plugins with replay evidence (#2791) 2026-10-28 11:49:34 +08:00
huanghuoguoguo 2430944954 test(mock): add scoped model faults and embedding recovery controls (#2790) 2026-10-28 11:49:27 +08:00
huanghuoguoguo 82eef2496a fix(http-bot): reset persistent conversation context through shared service (#2788) 2026-10-28 10:29:17 +08:00
0c99832298 fix(qqofficial): receive full-group messages and preserve bot mentions (#2769)
* fix(qqofficial): support full-group messages and native bot mentions

* test(qqofficial): cover full-group form reply targets

---------

Co-authored-by: Chin Rock <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-28 09:57:00 +08:00
6b57a1074f fix(events): normalize millisecond timestamps before datetime conversion (LANG-170) (#2722)
* fix(events): normalize millisecond timestamps before datetime conversion

- run_journal: _event_time_to_utc normalizes second/millisecond/
  microsecond epoch values (loop-divide above 1e10) with guards for
  bool/non-numeric/zero/non-finite inputs; OverflowError contained
- run_ledger_store, interaction_store: divide epoch values above 1e11
  by 1000 before datetime conversion; OverflowError added to the
  handled exceptions

Second-based inputs are unchanged. Verified in production on a
self-hosted v4.11.0 deployment.

* fix(events): harden timestamp conversion and cover persistence regressions

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: leonoxo <[email protected]>
Co-authored-by: Chin Rock <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-27 23:49:01 +08:00
Li-john1021andLi-john1021 bd4e408d7e fix(plugin): honor display_plugin_debug_url port for managed Runtime (#2782)
Stdio and Windows launches always bound the SDK default debug port 5401,
so changing plugin.display_plugin_debug_url only updated the console URL
and a second Core instance hit Address already in use. Pass the configured
debug (and Windows control) ports into the Runtime CLI, and document the
behavior.

Fixes #2713

Co-authored-by: Li-john1021 <[email protected]>
2026-10-27 20:56:26 +08:00
Martin 12debe2747 fix(plugin): persist v4 runtime state and tolerate runner registration gaps (#2774)
Persist the v4 plugin runtime state so recreating the runtime container no
longer discards installed plugins' artifacts, dependency environments and
installation-private data, and stop a transient Runner registry miss during
steering from dropping the message.

- docker-compose: bind-mount ./data/plugin-runtime for the plugin runtime
  alongside ./data/plugins.
- kubernetes: add the langbot-plugin-runtime-state claim (5Gi) mounted at
  /app/data/plugin-runtime, kept separate from the plugin data claim so
  runtime state does not land inside the plugin directory.
- chat handler: treat RunnerNotFoundError while claiming steering as
  "steering unavailable" and continue with a normal run; every other error
  keeps propagating. The runner error imports move to module scope, which
  the new early reference requires.
- tests: cover the steering fallback, the claimed-steering interrupt, and
  the lasting-gap path that still reports runner-not-found.

The steering fallback buys one extra uncached registry lookup while a
runtime reconnects; it does not recover a gap that outlasts the message.
2026-10-27 20:31:49 +08:00
Dongze Yang 6990607c5c Merge pull request #2743 from ydzat/fix/normalize-access-control-ids
fix(pipeline): normalize IDs in wildcard access control
2026-10-27 20:18:51 +08:00
langbot-docs-bot f185de9f35 docs(articles): sync LangBot Blog 2026-10-27 11:24:35 +00:00
RockChinQ 3bacab34ff Merge pull request #2786 from langbot-app/agent/hk-dev-codex/lang-168-blog-fix
fix(docs): preserve local articles during Blog sync (LANG-168)
2026-10-27 19:21:00 +08:00
Chin Rockandmultica-agent 07e4936404 fix(docs): preserve canonical Blog links and validate changing page counts
Co-authored-by: multica-agent <[email protected]>
2026-10-27 19:12:41 +08:00
Chin Rockandmultica-agent a2f3d2e03c fix(docs): preserve local articles during Blog synchronization
Co-authored-by: multica-agent <[email protected]>
2026-10-27 19:03:03 +08:00
RockChinQ 569ab92ea2 Merge pull request #2785 from langbot-app/agent/mika/lang-168-context7-refresh
ci(context7): refresh the Context7 library when the English docs change
2026-10-27 18:48:00 +08:00
RockChinQ f9f2f986e9 Merge pull request #2783 from langbot-app/agent/hk-dev-codex/lang-168-archive
fix(docs): publish from LangBot before archiving legacy docs (LANG-168)
2026-10-27 18:47:55 +08:00
926f4162dd ci(context7): refresh the Context7 library when the English docs change
Context7 only re-indexes on its own popularity schedule, which is why the
existing /langbot-app/langbot-docs entry had already drifted before this
migration. Add the refresh call documented in Context7's GitHub Actions
integration so a docs change reaches the index on the same push.

The job is inert until a CONTEXT7_API_KEY secret exists, so it cannot fail
the build while the library registration is pending.

Co-Authored-By: Mika (Multica) <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-27 09:20:41 +00:00
Chin Rockandmultica-agent 828c4ff3c7 chore(docs): exclude linked local dependency caches
Co-authored-by: multica-agent <[email protected]>
2026-10-27 16:55:14 +08:00
Chin Rockandmultica-agent fe8fa51b50 fix(docs): publish directly from LangBot before archiving docs repository
Co-authored-by: multica-agent <[email protected]>
2026-10-27 16:54:17 +08:00
RockChinQ 407352cc51 Merge pull request #2781 from langbot-app/agent/mika/lang-168-docs-subtree
feat: merge langbot-docs into docs/ (subtree)
2026-10-27 16:38:06 +08:00
9b3bb30445 fix(ci): fall back to the existing repo PAT for docs publication
The migrated workflows required LANGBOT_WIKI_PUSH_TOKEN, which only exists in
the langbot-docs repository. The existing RELEASE_UPLOAD_GITHUB_TOKEN was
verified to authenticate as the owner with repo scope plus push/admin on
LangBot, langbot-docs, langbot-landing-page and the production fork, and it can
push the Wiki, so publication now falls back to it when the dedicated secret is
absent. Also retarget the cutover notes at the master branch.

Co-Authored-By: Mika (Multica) <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-27 08:22:16 +00:00
c3249a8852 fix(ci): target LangBot's master branch in the migrated docs workflows
LangBot's default branch is master, so the landing-submodule, wiki and blog
sync workflows would never have triggered and would have pushed to a
non-existent main. Also restore the wiki clone URL that was truncated in the
mirror copy of sync-github-wiki.yml.

Co-Authored-By: Mika (Multica) <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-27 08:17:36 +00:00
3e0be870ab feat: merge langbot-docs history into docs/ (subtree, no squash)
Imported langbot-app/langbot-docs main (51dddcb3f) under docs/ with
`git subtree add`, keeping every original commit SHA and signature so the
mirror and landing-page submodule can fast-forward from a `git subtree
split` later. Retarget the docs workflows to docs/, point blog sync at the
main repository, and update the remaining internal references.

Co-Authored-By: Mika (Multica) <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-27 08:04:39 +00:00
RockChinQ 9d2042478a Add 'docs/' from commit '51dddcb3f891d60bc38645e88b2dbd515344da81'
git-subtree-dir: docs
git-subtree-mainline: 0582d1b3d4
git-subtree-split: 51dddcb3f8
2026-10-27 08:04:35 +00:00
0582d1b3d4 chore: rename internal docs/ to dev-docs/ and prepare docs site merge
Move the 27 internal design docs (87 tracked files) from docs/ to dev-docs/
to make room for the public documentation site, adjust Docker/fnOS ignores,
refresh the README/AGENTS/ARCHITECTURE references, and land the docs
workflows ahead of the subtree import so they cannot diverge from mirror.

Co-Authored-By: Mika (Multica) <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-27 08:04:20 +00:00
huanghuoguoguo a89ddf12e1 test(tools): verify sustained runs and resource recovery (#2765)
* test(tools): add verified sustained runs and regression analysis

* docs(tools): clarify sustained comparison prerequisites

* fix(tools): accept observed empty container recovery
2026-10-27 12:10:27 +08:00
huanghuoguoguo 7865ad51f7 perf(plugin): negotiate ordered batch event dispatch (#2778) 2026-10-27 11:36:47 +08:00
huanghuoguoguo 62c0f46dc4 perf(persistence): avoid formatting missing SQL attribute errors (#2776) 2026-10-27 11:19:44 +08:00
huanghuoguoguo fd255a13f4 perf(pipeline): skip redundant binding reads for silent stage output (#2777) 2026-10-27 11:19:33 +08:00
Guanchao Wang 1d3c47c439 fix(wecomcs): preserve provider error details (#2772) 2026-10-26 18:05:38 +08:00
RockChinQandmultica-agent 029fbbf3c3 fix(deps): raise the python-multipart floor to the locked version (#2773)
The declared floor was python-multipart>=0.0.27 while uv.lock resolves 0.0.32.
0.0.27 falls inside four published advisories, so any resolve that honours the
floor rather than the lock can land on a vulnerable release:

- GHSA-5rvq-cxj2-64vf / GHSA-6jv3-5f52-599m / GHSA-vffw-93wf-4j4q (quadratic-time
  querystring DoS, semicolon field-separator and Content-Disposition parameter
  smuggling), fixed in 0.0.30
- GHSA-v9pg-7xvm-68hf (negative Content-Length buffers the entire body), fixed in
  0.0.31

The locked 0.0.32 has no known advisories. Raising the floor to match the lock
costs nothing and keeps the two from drifting apart.

Reachability, for the record: multipart parsing happens on the skills and plugin
local-upload routes, both of which require USER_TOKEN_OR_API_KEY with
RESOURCE_MANAGE, so this is an authenticated-admin DoS rather than an anonymous
one.

The resolved version is unchanged; only the requirement metadata moves.

Co-authored-by: multica-agent <[email protected]>
2026-10-26 14:20:16 +08:00
huanghuoguoguo b1b7ddc259 feat(skill): wire standard host skill contract (#2771)
* feat(skill): wire standard host skill contract

* chore(skill): pin bounded SDK revision

* fix(skill): correct SDK pin and formatting

* chore: use released SDK 0.7.17

* fix(deps): validate nested component imports with SDK 0.7.18rc1

* fix(deps): pin validated SDK 0.7.18
2026-10-26 12:11:27 +08:00
彼方 33653244fc Merge pull request #2770 from langbot-app/fix/test-event-loop-leak
test(vector): prevent event loop leak in base database test
2026-10-25 00:49:43 +08:00
bifangknt bba442a8d3 test(vector): prevent event loop leak in base database test
Use pytest-asyncio and await instead of asyncio.run() to preserve
pytest's event loop lifecycle.
2026-10-25 00:14:41 +08:00
Hyu c6df289345 fix(plugin): initialize setting capability for locally mounted plugins 2026-10-25 00:08:26 +08:00
Hyu d6bce3228b refactor(skill): remove legacy host scan endpoint and client method 2026-10-25 00:08:25 +08:00
彼方 a75f9e2953 Merge pull request #2768 from langbot-app/fix/sqlite-startup-wal-checkpoint
fix(sqlite): reclaim startup WAL and ship patched SQLite
2026-10-24 23:45:56 +08:00
bifangknt 73d5c7d46e test(storage): make SQLite query plan assertions version-independent
Classify event cleanup queries by selected columns instead of CORRELATED
plan text, preserving covering-index, primary-key, and no-sort checks.

Validated all 15 tests on ARM64 with SQLite 3.53.4 and 3.46.1.
2026-10-24 23:23:55 +08:00
RockChinQ 4b4830d4b6 Merge pull request #2542 from Nikarhub/feat/box-local-env
feat(box): 支持 box.local.env 注入每次 exec,便于 skill 读取配置/凭据
2026-10-24 20:19:44 +08:00
49afd9f320 fix(box): ignore box.local.env in multi-workspace deployments
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-24 12:06:00 +00:00
BiFangKNT 96e435486b build(docker): migrate to Debian trixie and update SQLite
- Switch Python base images to python:3.12-slim-trixie
- Replace libprotobuf32 with libprotobuf32t64
- Pin SQLite to 3.53.4-2 from forky for the WAL-reset fix
- Restrict forky packages to libsqlite3-0 with APT pinning
2026-10-24 04:19:18 +08:00
BiFangKNT 95a378a8f1 fix(persistence): reclaim oversized SQLite WAL files
- Require successful WAL truncation before starting application producers
- Preserve completed migrations and retry checkpoint failures on restart
- Set a 64 MiB WAL retention limit on every SQLite connection
- Preserve default automatic checkpoint behavior and reader snapshots
- Cover startup failures, connection recreation, and WAL reclamation
2026-10-24 02:03:41 +08:00
彼方 4aebe9ef2f Merge pull request #2767 from langbot-app/fix/mcp-retirement-test-overhead
test(mcp): reduce scope retirement test overhead
2026-10-24 01:07:30 +08:00
BiFangKNT 4eafc3c22e test(mcp): reduce scope retirement test overhead
- Replace per-session mocks with lightweight shutdown counters
- Preserve the one-second timeout and 100-workspace coverage
- Assert that every session shuts down exactly once
2026-10-24 00:52:50 +08:00
彼方 0f95ce4980 Merge pull request #2766 from langbot-app/fix/sqlite-cleanup-lock
fix(persistence): replace online SQLite VACUUM with incremental reclamation
2026-10-24 00:44:09 +08:00
BiFangKNT 93e5ae4689 fix(persistence): replace online SQLite VACUUM with incremental reclamation
- Add migration 0042 to enable incremental vacuum with verified backup and restore
- Enable incremental vacuum before creating tables in new SQLite databases
- Adapt reclamation batches to elapsed time and lock contention
- Cover migration recovery, WAL mode, and concurrent writes with regression tests
2026-10-23 23:59:00 +08:00
彼方 cdca700c69 Merge pull request #2764 from langbot-app/fix/runner-cancel-terminal-event
fix(agent): preserve terminal events when cancelling runner execution
2026-10-23 20:40:44 +08:00
BiFangKNT ce5b7ffea1 fix(agent): preserve terminal events when cancelling runner execution
Emit and persist a Host cancellation event before closing the runner stream.
Preserve existing terminal events and record cancelled runs consistently.

Serialize Host event sequence allocation to prevent conflicts with admin
cancellation audits, and notify observers with the persisted sequence.

Add deterministic cancellation and concurrent event allocation regressions.
2026-10-23 17:23:44 +08:00
huanghuoguoguo 5ec41f15a1 test(ci): add a 60-second core smoke gate and regression jobs (#2711)
* test(tools): add deterministic lbctl regression job

* test(tools): simulate persistent multi-group conversations

* test(tools): add finite core smoke with terminal run and file oracles

* test(tools): expand smoke coverage across execution stages

* ci: add a timed real core smoke and lightweight tool checks

* fix(ci): keep infrastructure failures visible in smoke verdicts
2026-10-23 16:24:26 +08:00