Tianyi Cui
687aa118f1
feat(session-query): export backend Session Markdown converter
...
Expose the pure Host formatSessionMarkdown(events, sourcePath?) converter at the package entry. Persistence stat/list now report the selected materialized JSONL artifact path, and the Markdown copy route includes that exact optional path after the title. Frontend progressive display and Session format remain unchanged.
2026-10-19 01:46:27 +08:00
imccyu
a2dd724c60
feat(session): expose format status and defer frontend-triggered migration
2026-10-08 16:45:25 +08:00
imccyu
d088572e11
fix(session): declare persistence identity for Typert analysis
2026-09-20 18:41:30 +08:00
imccyu
6fef0f0af9
fix(session-query): stabilize persistence cache identity
2026-09-20 18:41:29 +08:00
Tianyi Cui
7b6b8a2baa
docs(session): correct released V3 compatibility guidance
2026-09-09 15:32:55 +08:00
imccyu
9b78f99dec
perf(session): transfer frozen persistence reads into restore
2026-09-06 02:10:23 +08:00
Tianyi Cui
7145acfe07
Merge master into session format migration
...
# Conflicts:
# .agents/notes/archived/architecture/2026-06-18-shared-persistence-write-coordinator.i18n.yaml
# .agents/notes/implemented/architecture/2026-06-14-session-persistence.i18n.yaml
# .agents/notes/implemented/architecture/2026-06-14-session-persistence.md
# .agents/notes/implemented/architecture/2026-06-14-session-persistence.zh.md
# .agents/notes/implemented/architecture/2026-07-24-project-session-directories.i18n.yaml
# .agents/notes/implemented/architecture/2026-07-24-project-session-directories.md
# .agents/notes/implemented/architecture/2026-07-24-project-session-directories.zh.md
# .agents/notes/implemented/architecture/2026-08-05-session-preparation.i18n.yaml
# .agents/notes/implemented/architecture/2026-08-05-session-preparation.md
# .agents/notes/implemented/architecture/2026-08-05-session-preparation.zh.md
# .agents/notes/implemented/architecture/2026-08-10-message-feedback-sidecar.i18n.yaml
# .agents/notes/implemented/architecture/2026-08-10-message-feedback-sidecar.md
# .agents/notes/implemented/architecture/2026-08-10-message-feedback-sidecar.zh.md
# .agents/notes/implemented/architecture/2026-08-27-handle-based-session-persistence.i18n.yaml
# .agents/notes/implemented/bug-fix/2026-07-28-load-pre-identity-session-messages.md
# .agents/notes/implemented/bug-fix/2026-07-28-load-pre-identity-session-messages.zh.md
# .agents/notes/implemented/bug-fix/2026-08-04-load-pre-react-loop-sessions.md
# .agents/notes/implemented/bug-fix/2026-08-04-load-pre-react-loop-sessions.zh.md
# .agents/notes/implemented/bug-fix/2026-09-01-host-goal-pause-aborts-turn.i18n.yaml
# .agents/notes/implemented/feature/2026-08-10-web-session-log-export.i18n.yaml
# .agents/notes/implemented/feature/2026-08-10-web-session-log-export.md
# .agents/notes/implemented/feature/2026-08-10-web-session-log-export.zh.md
# apps/cli/tests/profiles/headless/tests/session-format-guard.expected.e2e.ts
# apps/web/tests/cold-blank-session.e2e.ts
# apps/web/tests/message-actions.e2e.ts
# apps/web/tests/scaffold.ts
# apps/web/tests/workspace-management.e2e.ts
# docs/config-catalog.i18n.yaml
# docs/config-catalog.md
# docs/config-catalog.zh.md
# docs/event-producer-consumer.i18n.yaml
# docs/event-producer-consumer.md
# docs/event-producer-consumer.zh.md
# docs/persistence-catalog.i18n.yaml
# docs/persistence-catalog.md
# docs/subsystems/feedback.i18n.yaml
# docs/subsystems/feedback.md
# docs/subsystems/feedback.zh.md
# docs/subsystems/persistence.i18n.yaml
# docs/subsystems/persistence.md
# docs/subsystems/persistence.zh.md
# packages/acp/acp/src/index.ts
# packages/acp/acp/tests/bridge.spec.ts
# packages/api/session-controller/src/list.ts
# packages/api/session-controller/tests/agent.host.spec.ts
# packages/api/session-controller/tests/session-cold.host.spec.ts
# packages/api/session-controller/tests/session-projections.host.spec.ts
# packages/api/session-controller/tests/session-search.host.spec.ts
# packages/api/session-controller/tests/test-remote.ts
# packages/api/session-controller/tests/transport.host.spec.ts
# packages/core/agent-loop/src/index.ts
# packages/core/agent-loop/tests/config-session-id.spec.ts
# packages/core/agent-loop/tests/resume.spec.ts
# packages/extensions/tool-cordis/src/api-catalog.ts
# packages/feedback/message-feedback/src/index.ts
# packages/feedback/message-feedback/tests/helpers.ts
# packages/feedback/message-feedback/tests/message-feedback.spec.ts
# packages/session-query/session-log-export/src/archive.ts
# packages/session-query/session-log-export/tests/archive.host.spec.ts
# packages/session-query/session-log-export/tests/route.host.spec.ts
# packages/session-query/session-query-sqlite/README.i18n.yaml
# packages/session-query/session-query-sqlite/README.md
# packages/session-query/session-query-sqlite/README.zh.md
# packages/session-query/session-query-sqlite/src/index.ts
# packages/session-query/session-query-sqlite/tests/sqlite.spec.ts
# packages/session-query/session-query/README.i18n.yaml
# packages/session-query/session-query/README.md
# packages/session-query/session-query/README.zh.md
# packages/session-query/session-query/src/corpus.ts
# packages/session-query/session-query/tests/observation.spec.ts
# packages/session-query/session-query/tests/session-query.spec.ts
# packages/session-query/session-query/tests/tracing.spec.ts
# packages/session/session-checkpoint-policy/tests/session-checkpoint-policy.spec.ts
# packages/session/session-persistence-jsonl/README.i18n.yaml
# packages/session/session-persistence-jsonl/README.md
# packages/session/session-persistence-jsonl/README.zh.md
# packages/session/session-persistence-jsonl/src/index.ts
# packages/session/session-persistence-jsonl/tests/jsonl.spec.ts
# packages/session/session-persistence-jsonl/tests/zstd.spec.ts
# packages/session/session-persistence/README.i18n.yaml
# packages/session/session-persistence/README.md
# packages/session/session-persistence/README.zh.md
# packages/session/session-persistence/src/coordinator.ts
# packages/session/session-persistence/src/index.ts
# packages/session/session-persistence/tests/contract.ts
# packages/session/session-persistence/tests/coordinator-contract.ts
# packages/session/session-persistence/tests/persistence.spec.ts
# packages/session/session-telemetry/package.json
# packages/shell/tool-bash/tests/tools.spec.ts
# packages/subagent/subagent/src/continuation.ts
# packages/subagent/subagent/tests/list-children.spec.ts
# packages/workspace/workspace/src/index.ts
# packages/workspace/workspace/tests/workspace.spec.ts
# scripts/gen-cordis-catalog.ts
2026-09-02 13:34:40 +08:00
Tianyi Cui
79f27df0dd
fix(session): harden migration artifact ownership
2026-09-02 03:34:38 +08:00
Turtle
bec6805d6a
refactor(session-persistence)!: handle-based seam with a lifecycle-owned write path
...
The persistence seam is now create/open/stat/list returning per-session
SessionHandles (read/append/flush/close); every log read and write flows
through the owning handle. The seam package exports only the service and
handle contracts, consumer-visible errors, and pure durable-data
validation helpers; each backend owns its complete storage runtime, and
the shared contract suites pin equivalent observable behavior. The
backend routes published sessions' live events by id into the active
write handle; agent-loop only acquires, seeds, and closes the handle.
Resume appends interruptedTurnClosers through its write handle;
session-query owns the revision-keyed cold cache. Legacy-only surfaces
are removed in the same swap: locate/readRaw/supportsRawArtifacts, the
legacy event-shape read migration, zstd torn-frame salvage,
DSH_SESSION_JSONL, and hook transcript_path population; a torn final
zstd frame is discarded whole; the session-list cold blank probe returns
on stat metadata (eventCount derived from the last physical row,
sizeBytes). The WebUI ZIP export serializes the logical log from a read
handle, so both backends export identically.
Refs #3245
2026-09-01 23:19:02 +08:00
Tianyi Cui
d1521ea783
feat(session)!: add released format migration
2026-09-01 22:12:21 +08:00
Tianyi Cui
27bf1039db
refactor(session)!: distinguish event seqs from log offsets
2026-09-01 20:36:00 +08:00
Turtle
d68ff7e66f
Merge remote-tracking branch 'origin/master' into turtle/omit-unneeded-invariants
...
# Conflicts:
# docs/module-graph.i18n.yaml
# docs/module-graph.md
# docs/module-graph.zh.md
# packages/session/session-projection/src/invariant.ts
# tsconfig.base.json
2026-09-01 11:18:11 +08:00
_Kerman
687ae5c9c0
Merge remote-tracking branch 'github/master' into xtr/session-log-read-api
...
# Conflicts:
# .agents/notes/implemented/architecture/2026-07-25-web-client-session-scope-and-provide-channel.i18n.yaml
# .agents/notes/implemented/architecture/2026-07-25-web-client-session-scope-and-provide-channel.md
# .agents/notes/implemented/architecture/2026-07-25-web-client-session-scope-and-provide-channel.zh.md
# .agents/notes/implemented/feature/2026-08-05-context-form-vocabulary.i18n.yaml
# .agents/notes/implemented/feature/2026-08-05-context-form-vocabulary.md
# .agents/notes/implemented/feature/2026-08-05-context-form-vocabulary.zh.md
# packages/examples/agent-spine-demo/tests/agent-core.spec.ts
# packages/skill/tool-skill/tests/tool-skill.spec.ts
2026-08-31 17:19:59 +08:00
Turtle
b8e3b32fcf
Merge master into codex/omit-unneeded-invariants
2026-08-31 14:38:55 +08:00
Tianyi Cui
4553c9d957
refactor(session)!: remove SQLite persistence backend
2026-08-31 13:23:07 +08:00
_Kerman
6c63e708b8
Merge remote-tracking branch 'origin/master' into dshw/pr-deepseek-harness-deepseek-harness-2907
...
# Conflicts:
# docs/config-catalog.i18n.yaml
# docs/persistence-catalog.i18n.yaml
# docs/subsystems/session.i18n.yaml
# packages/api/session-controller/tests/transport.host.spec.ts
# packages/bundle/headless/src/index.ts
# packages/core/session/README.i18n.yaml
# packages/schedule/schedule/README.i18n.yaml
# packages/schedule/schedule/README.md
# packages/schedule/schedule/README.zh.md
# packages/session-query/tool-session-query/src/workspace-access.ts
# packages/session/session-log-deepseek/src/index.ts
2026-08-31 10:56:53 +08:00
Tianyi Cui
2c6ff296af
Revert "Merge pull request #3087 from deepseek-harness/worktree/remove-ignorable-session-events"
...
This reverts commit 2123b2f418b1c8fbb86dc327b598fb11423da226, reversing
changes made to 3c0b5c68ce697537a21084f9135663017474a2e1.
2026-08-30 12:26:20 +08:00
imccyu
9135a13a8b
refactor(consumers): remove cross-package runtime relays
2026-08-30 02:29:52 +08:00
_Kerman
5660f44d29
perf(session): separate indexed and snapshot log reads
2026-08-28 13:25:58 +08:00
Turtle
15f2997bcb
cleanup: omit unneeded invariant companions
2026-08-28 13:12:52 +08:00
Tianyi Cui
42dc2a46c2
refactor(session): require known event types on read
2026-08-26 00:22:31 +08:00
imccyu
211e6939e3
Revert "Merge pull request #2698 from deepseek-harness/xtr/session-format-migration"
...
This reverts commit 4b592eb90df20dc53dd12215921d5a9137214777, reversing
changes made to d15d3275d905e4d21229cd70a074388a428189d1.
2026-08-25 15:30:10 +08:00
_Kerman
d385dfb3e3
Merge remote-tracking branch 'github/master' into xtr/session-format-migration
...
# Conflicts:
# docs/config-catalog.i18n.yaml
# docs/config-catalog.md
# docs/config-catalog.zh.md
# packages/session/session-persistence-jsonl/src/index.ts
# packages/session/session-persistence/src/coordinator.ts
# packages/session/session-persistence/src/index.ts
2026-08-25 12:41:23 +08:00
imccyu
7f4cdc809c
refactor(session-persistence): add borrowable prepared sessions
2026-08-25 06:05:50 +08:00
_Kerman
2ba721f799
Merge github/master into xtr/session-format-migration
2026-08-22 21:51:30 +08:00
Tianyi Cui
c1764157e7
Merge origin/master into worktree/acp-v1-control
2026-08-22 18:52:58 +08:00
Tianyi Cui
511181684c
feat(acp): complete standard v1 automation controls
2026-08-22 18:52:27 +08:00
_Kerman
421a577b1c
Merge remote-tracking branch 'origin/master' into xtr/session-format-migration
...
# Conflicts:
# .agents/notes/implemented/architecture/2026-08-10-session-log-version-mechanism.i18n.yaml
# .agents/notes/implemented/architecture/2026-08-10-session-log-version-mechanism.md
# .agents/notes/implemented/architecture/2026-08-10-session-log-version-mechanism.zh.md
# docs/subsystems/persistence.i18n.yaml
# docs/subsystems/persistence.md
# docs/subsystems/persistence.zh.md
# packages/session/session-persistence-jsonl/src/format.ts
# packages/session/session-persistence/src/coordinator.ts
2026-08-22 16:01:15 +08:00
Tianyi Cui
d72ff1f49a
docs: harden chain-of-thought leakage audits
2026-08-22 13:39:00 +08:00
Tianyi Cui
934976732d
docs: purge residual chain-of-thought leakage
2026-08-22 13:10:23 +08:00
Turtle
6b3e971805
docs: remove implementation narration from prose
2026-08-21 22:22:23 +08:00
_Kerman
7e3d5332dc
fix(session): address migration review feedback
2026-08-21 17:48:45 +08:00
_Kerman
2da00047f3
refactor(session-persistence): make format migrations one-to-one
2026-08-21 15:50:30 +08:00
_Kerman
50ad2aba19
fix(session-persistence): repair persistence CI gates
...
- document the exported SqliteStore prefix/suffix loaders (verify-export-jsdoc)
- share createStoredEventRead from session-persistence so the standalone
SQLite store stops duplicating the service helper (duplication gate)
- route replaceStored header upserts through writeRow (duplication gate)
- move replacement/conflict test SQL into closed test resources so the
SQLite SQL resource boundary test passes
2026-08-20 14:21:47 +08:00
_Kerman
bb6faaf87b
Merge remote-tracking branch 'origin/master' into dshw/pr-deepseek-harness-deepseek-harness-2698
2026-08-19 21:08:03 +08:00
_Kerman
270a06b38b
fix(session-persistence-jsonl): drop crash-unsafe cross-process log lock
...
The product model has no cross-process writer exclusion (the coordinator
serializes per-session operations in-process; the README documents one
live writer per session), so the wx-created .lock sibling only guarded
byte-level races while adding two failure modes: a crash leaves a stale
lock that permanently wedges that log's appends/repairs/replacements, and
a post-commit lock cleanup failure makes a committed append look failed,
so the retained write-behind batch retries into duplicate seqs.
Remove withLogLock and keep replaceStored's revision compare-and-swap at
the commit boundary (recheck immediately before the atomic rename).
2026-08-19 20:42:56 +08:00
_Kerman
e8f4315cee
fix(session): scope format registry completeness to per-session decode
...
buildStepIndex rejected the whole decoder at initialization whenever any
registered step could not reach the current version, so one retired old
upgrader blocked every session, including later versions whose path to
the current version is complete. planSteps already refuses a specific
stored version when a needed step is missing; initialization now checks
only step legality and duplicates.
2026-08-19 20:31:31 +08:00
Magolor
53c4a4a174
docs(session): document persistence seed ownership
2026-08-19 13:31:07 +08:00
Magolor
1c77a78d6a
perf(session): reuse immutable persistence seed
2026-08-19 13:31:07 +08:00
_Kerman
44feadea05
fix(session): load legacy compact events
2026-08-19 11:15:25 +08:00
_Kerman
c4b3f48e64
fix(session): address format migration review
2026-08-19 11:07:23 +08:00
_Kerman
d4ff836dc2
refactor(session-persistence): share stored read machinery
2026-08-18 18:06:48 +08:00
_Kerman
cc9ab200c7
feat(session): add format migration decoder pipeline
2026-08-18 17:42:40 +08:00
Tianyi Cui
5931afaf87
docs(session-persistence): bind raw capability to its reader
...
The abstract capability flag forces every backend to state whether it owns per-session raw artifacts, but TypeScript cannot express that a true flag requires replacing the concrete unsupported default. Without an implementer-facing obligation, a backend could advertise support and then fail with a contradictory unsupported diagnostic on first use.\n\nDocument the required pairing at the capability declaration. Keep readRaw concrete so backends that correctly report false inherit one fail-loud implementation instead of duplicating rejection code.
2026-08-11 18:10:28 +08:00
Tianyi Cui
f21977383b
Merge remote-tracking branch 'origin/master' into worktree/pr2177-export-fixes-20260811
...
# Conflicts:
# docs/config-catalog.i18n.yaml
# docs/subsystems/persistence.i18n.yaml
# packages/session/session-persistence-jsonl/README.i18n.yaml
# packages/session/session-persistence/README.i18n.yaml
2026-08-11 16:18:28 +08:00
Turtle
0c708cb10d
refactor: replace overloaded surface terminology
2026-08-11 15:23:05 +08:00
Tianyi Cui
e58cc13de4
fix(session-export): distinguish unsupported raw artifacts
...
SessionPersistence.readRaw previously used undefined for two unrelated states: a supported backend could not find the requested session, or the backend had no per-session artifact concept at all. The export endpoint consequently reported an existing SQLite-backed session as HTTP 404, which falsely diagnosed storage capability as session absence.
Make raw-artifact support an explicit backend capability. Unsupported backends now fail their inherited readRaw path loudly and the host answers 501 before reading, while undefined retains the single meaning of an absent artifact on a supporting backend. First-party backends, test providers, generated API catalogs, bilingual persistence docs, and export error contracts now state that distinction; focused tests cover both the 501 and the inherited rejection.
2026-08-11 15:04:35 +08:00
_Kerman
ab0b76d0a3
fix(session): reject readRaw abort with an Error to satisfy contracts lint
2026-08-11 13:20:23 +08:00
_Kerman
3a6112f641
fix(web): satisfy contracts-ready lint and dedup the stable-file read
...
Rescope nothing new: drop the needless async from the inherited readRaw
default (reject explicitly on abort), fix the void arrow shorthand in
downloadBlob, and share one revision-stable file-read loop between readRaw
and readPrefix in the JSONL backend.
2026-08-11 12:49:27 +08:00
_Kerman
118b1a8787
Merge remote-tracking branch 'origin/master' into feat/web-session-log-export
...
# Conflicts:
# docs/subsystems/persistence.i18n.yaml
# docs/subsystems/persistence.md
# docs/subsystems/persistence.zh.md
# packages/client/ui-trajectory/README.i18n.yaml
# packages/client/ui-trajectory/README.md
# packages/client/ui-trajectory/README.zh.md
# packages/client/ui-trajectory/package.json
# packages/client/ui-trajectory/src/client/TrajectoryView.tsx
# packages/client/ui-trajectory/src/client/index.ts
# packages/client/ui-trajectory/tests/client-bundle.spec.ts
# packages/client/ui-trajectory/tests/views.spec.tsx
# packages/host/apiproxy/package.json
# pnpm-lock.yaml
2026-08-11 12:42:53 +08:00