cpojer
d0cb8c19b2
chore: wtf.
2026-02-17 13:36:48 +09:00
Sebastian
ed11e93cf2
chore(format)
2026-02-16 23:20:16 -05:00
Sebastian
826e62a3bc
fix(sessions): purge deleted transcript archives
2026-02-16 22:35:27 -05:00
cpojer
90ef2d6bdf
chore: Update formatting.
2026-02-17 09:18:40 +09:00
Peter Steinberger
12a947223b
fix(ci): restore main checks after bulk merges
2026-02-16 23:47:27 +00:00
Peter Steinberger
eaa2f7a7bf
fix(ci): restore main lint/typecheck after direct merges
2026-02-16 23:26:11 +00:00
Xinhua Gu
90774c098a
fix(sessions): allow cross-agent session file paths in multi-agent setups
...
When OPENCLAW_STATE_DIR changes between session creation and resolution
(e.g., after reinstall or config change), absolute session file paths
pointing to other agents' sessions directories were rejected even though
they structurally match the valid .../agents/<agentId>/sessions/... pattern.
The existing fallback logic in resolvePathWithinSessionsDir extracts the
agent ID from the path and tries to resolve it via the current env's
state directory. When those directories differ, the containment check
fails. Now, if the path structurally matches the agent sessions pattern
(validated by extractAgentIdFromAbsoluteSessionPath), we accept it
directly as a final fallback.
Fixes #15410 , Fixes #15565 , Fixes #15468
2026-02-17 00:00:54 +01:00
Winston
94eecaa446
fix: atomic session store writes to prevent context loss on Windows
...
On Windows, fs.promises.writeFile truncates the target file to 0 bytes
before writing. Since loadSessionStore reads the file synchronously
without holding the write lock, a concurrent read can observe the empty
file, fail to parse it, and fall through to an empty store — causing the
agent to lose its session context.
Changes:
- saveSessionStoreUnlocked (Windows path): write to a temp file first,
then rename it onto the target. If rename fails due to file locking,
retry 3 times with backoff, then fall back to copyFile (which
overwrites in-place without truncating to 0 bytes).
- loadSessionStore: on Windows, retry up to 3 times with 50ms
synchronous backoff (via Atomics.wait) when the file is empty or
unparseable, giving the writer time to finish. SharedArrayBuffer is
allocated once and reused across retry attempts.
2026-02-16 23:57:21 +01:00
Hudson
93fbe6482b
fix(sessions): archive transcript files when pruning stale entries
...
pruneStaleEntries() removed entries from sessions.json but left the
corresponding .jsonl transcript files on disk indefinitely.
Added an onPruned callback to collect pruned session IDs, then
archives their transcript files via archiveSessionTranscripts()
after pruning completes. Only runs in enforce mode.
2026-02-16 23:50:56 +01:00
Gustavo Madeira Santana
8a67016646
Agents: raise bootstrap total cap and warn on /context truncation ( #18229 )
...
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: f6620526df
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Reviewed-by: @gumadeiras
2026-02-16 12:04:53 -05:00
brandonwise
095d522099
fix(security): create session transcript files with 0o600 permissions ( #18066 )
...
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: 962f497d24
Co-authored-by: brandonwise <21148772+brandonwise@users.noreply.github.com >
Co-authored-by: sebslight <19554889+sebslight@users.noreply.github.com >
Reviewed-by: @sebslight
2026-02-16 08:33:40 -05:00
Peter Steinberger
d3ddf893c2
test: remove redundant store-rotation integration prune case
2026-02-16 09:39:48 +00:00
Peter Steinberger
e30900f93e
test: remove low-value deprecated pruneDays e2e mapping case
2026-02-16 09:20:40 +00:00
Peter Steinberger
22c53af604
test: remove redundant saveSessionStore cap e2e case
2026-02-16 09:13:56 +00:00
Peter Steinberger
54948a1d44
test: remove redundant maintenance config mapping e2e case
2026-02-16 09:13:05 +00:00
Peter Steinberger
22a1a56e7e
test: remove low-value maintenance defaults e2e assertion
2026-02-16 09:11:17 +00:00
Peter Steinberger
404a8bc35f
test: remove redundant pruning-plus-capping e2e case
2026-02-16 09:07:24 +00:00
Peter Steinberger
7a4c131d6b
test: remove low-value mirrored-text media-filename unit case
2026-02-16 09:05:38 +00:00
Peter Steinberger
b156aafab9
test: remove low-value direct metadata-mapping unit case
2026-02-16 09:04:20 +00:00
Peter Steinberger
838d875fcb
test: remove low-value custom-root agent-extraction path case
2026-02-16 09:03:07 +00:00
Peter Steinberger
7932387df2
test: remove low-value stale-prune no-updatedAt edge case
2026-02-16 09:02:08 +00:00
Peter Steinberger
4d2ba58da5
test: remove low-value legacy dm-direct fallback permutation
2026-02-16 09:00:54 +00:00
Peter Steinberger
7d26eae3ee
test: remove low-value no-updatedAt cap-priority edge case
2026-02-16 09:00:02 +00:00
Peter Steinberger
5dc02aa55e
test: remove low-value concurrent store-entry merge permutation
2026-02-16 08:58:43 +00:00
Peter Steinberger
c8704297b2
test: remove low-value relative traversal session-file guard case
2026-02-16 08:57:45 +00:00
Peter Steinberger
eb7b5c02c3
test: remove low-value cross-storepath lock parallelism case
2026-02-16 08:56:28 +00:00
Peter Steinberger
d5bc5ab7ba
test: remove low-value resolveStorePath tilde-expansion unit case
2026-02-16 08:54:55 +00:00
Peter Steinberger
fecd623431
test: remove duplicate reset precedence permutation case
2026-02-16 08:53:51 +00:00
Peter Steinberger
5d8f43ae8e
test: remove duplicate explicit-agent fallback path case
2026-02-16 08:52:55 +00:00
Peter Steinberger
896f9efcb7
test: remove low-value absolute-in-dir session-file happy path
2026-02-16 08:51:41 +00:00
Peter Steinberger
f448e4bf77
test: remove low-value lock queue cleanup bookkeeping case
2026-02-16 08:50:59 +00:00
Peter Steinberger
731d72e119
test: remove redundant in-dir relative session-file acceptance case
2026-02-16 08:49:41 +00:00
Peter Steinberger
bf801f5159
test: remove low-value unknown-session mirror guard case
2026-02-16 08:48:23 +00:00
Peter Steinberger
929a96c2f8
test: remove low-signal mirrored-text trim unit case
2026-02-16 08:47:45 +00:00
Peter Steinberger
b5183c93d6
test: remove low-value lock-storePath guard wrapper test
2026-02-16 08:46:49 +00:00
Peter Steinberger
bd0e7d3d22
test: remove low-value positive session-id validation case
2026-02-16 08:45:30 +00:00
Peter Steinberger
19dfdfe5a8
test: remove low-value missing-session-key mirror guard case
2026-02-16 08:44:46 +00:00
Peter Steinberger
2d6b605cc3
test: remove low-value session-file options wrapper assertion
2026-02-16 08:44:01 +00:00
Peter Steinberger
f9419e26bb
test: remove duplicate empty-text mirror integration case
2026-02-16 08:42:38 +00:00
Peter Steinberger
a4f86dc433
test: remove low-value session-file options agent-only case
2026-02-16 08:41:46 +00:00
Peter Steinberger
0c035c85ab
test: remove redundant single-error lock queue recovery case
2026-02-16 08:40:34 +00:00
Peter Steinberger
aabc09bb9b
test: remove duplicate lock-queue cleanup success case
2026-02-16 08:39:43 +00:00
Peter Steinberger
0d2e13fb73
test: remove redundant transcript-path wrapper case
2026-02-16 08:38:18 +00:00
Peter Steinberger
4f05d045b9
test: remove duplicate absolute outside-session-path guard case
2026-02-16 08:37:19 +00:00
Peter Steinberger
ec00efb38d
test: remove duplicate reset-by-type direct selection case
2026-02-16 08:36:30 +00:00
Peter Steinberger
83a5f7ba8c
test: remove duplicate passthrough storePath guard case
2026-02-16 08:35:14 +00:00
Peter Steinberger
6a759c9191
test: remove duplicate empty-storePath guard case
2026-02-16 08:34:22 +00:00
Peter Steinberger
f6b7736744
test: remove redundant absolute topic-suffix session-file case
2026-02-16 08:33:33 +00:00
Peter Steinberger
1f607bec49
test: remove low-value no-rotation file-size case
2026-02-16 08:24:46 +00:00
Peter Steinberger
3dbb69da05
test: remove duplicate session file options fallback case
2026-02-16 08:23:52 +00:00