Yichen Jiang
70a37b6cc1
chore(jobs): drop the formatting-only hunks left by the seam refactor
...
Revert the two brace-only rewrites in tool-workflow to master's one-line form and collapse the blank lines left where SessionJob was removed from the session-controller types.
2026-09-04 12:05:43 +08:00
Yichen Jiang
424c8457d9
Merge remote-tracking branch 'origin/master' into worktree/process-plugin-streaming-72f9b3
...
# Conflicts:
# docs/event-producer-consumer.i18n.yaml
# docs/event-producer-consumer.md
# docs/event-producer-consumer.zh.md
# packages/api/session-controller/tests/control-jobs.host.spec.ts
# snapshots/web/fresh-round-trip/session.v2.jsonl
# snapshots/web/ptc-round/session.v2.jsonl
2026-09-04 12:02:02 +08:00
Tianyi Cui
86241a442d
fix(session): keep independent version fields off the format generation
...
`SESSION_FORMAT_VERSION` is the only value that names the Session format
generation. Two other version fields had moved to 2 alongside it:
- The `dsh_session_log` request extension's outer schema `version` returns
to 1 and its Session header projection keeps `seedLength`, derived from
the logical inherited cut, so the external wire is unchanged in this PR;
`sessionFormatVersion` alone identifies the embedded generation.
- The `sessionStats` projection unit's `stateVersion` returns to 1: the
projection cache binds every checkpoint to the format generation, so a
generation change discards old rows without a unit version bump.
Test doubles and the standalone Client fixture that build a current
header now spell `SESSION_FORMAT_VERSION` instead of the literal.
2026-09-03 22:36:51 +08:00
Tianyi Cui
d58964a010
Merge commit 'be5db297c7' into worktree/session-format-05-v1-v2-chunk-migration
...
# Conflicts:
# .agents/notes/implemented/architecture/2026-08-31-live-assistant-stream-frames.i18n.yaml
# .agents/notes/implemented/architecture/2026-08-31-live-assistant-stream-frames.md
# .agents/notes/implemented/architecture/2026-08-31-live-assistant-stream-frames.zh.md
# docs/event-producer-consumer.i18n.yaml
# docs/event-producer-consumer.md
# docs/event-producer-consumer.zh.md
# packages/api/session-controller/README.i18n.yaml
# packages/api/session-controller/README.md
# packages/api/session-controller/README.zh.md
# packages/api/session-controller/src/assistant-stream.ts
# packages/api/session-controller/src/client/sessions/assistant-stream.ts
# packages/api/session-controller/src/types.ts
# packages/api/session-controller/tests/assistant-stream.client.spec.ts
# packages/api/session-controller/tests/session-history-journal.host.spec.ts
# packages/api/session-controller/tests/sessions-service.client.spec.ts
# packages/api/session-controller/tests/transport.client.spec.ts
# packages/core/agent/README.i18n.yaml
# packages/core/agent/README.md
# packages/core/agent/README.zh.md
# packages/extensions/tool-cordis/src/api-catalog.ts
# scripts/package-dependency-policy.ts
2026-09-03 22:09:31 +08:00
Tianyi Cui
fe9c2d7053
refactor(agent, session-controller): drop the unread startedTime frame field
...
The `start` frame and the reconnect baseline attempt carried a wall-clock
`startedTime` that no Host or Client consumer read: the Host accumulator
and the Client reconciler copied it into their attempt maps and nothing
looked at it again. Presentation frames now carry only the coordinates
consumers use (attempt, revision, turn, step, chunk index, and v1 seq
provenance); the type-equivalence block, event graph, READMEs, and the
live-stream Agent Note follow the type.
2026-09-03 21:58:34 +08:00
Tianyi Cui
28b16c011a
Merge commit 'a123cb0055' into worktree/session-format-05-v1-v2-chunk-migration
...
# Conflicts:
# docs/config-catalog.i18n.yaml
# docs/config-catalog.md
# docs/config-catalog.zh.md
2026-09-03 18:39:44 +08:00
Tianyi Cui
13074e4aa2
Merge commit '308c1c69a6' into worktree/session-format-04-live-assistant-stream
2026-09-03 18:36:02 +08:00
Tianyi Cui
3aef64797d
Merge master into session format migration
...
# Conflicts:
# packages/test-support/session-snapshot/src/harness.ts
# scripts/smoke-python-runtime.py
2026-09-03 18:31:54 +08:00
Yichen Jiang
14dc38b2fd
test(session-controller): cover the cold-session baseline queue
...
The roster spec that exercised a session without a live agent left with
the roster; the queue baseline's empty arm needs its own case.
2026-09-03 18:00:42 +08:00
Yichen Jiang
84efac2c42
refactor(ui-jobs): read rows and observations from ctx.jobs
...
The header list watches its session's roster through ctx.jobs.watchRows
while mounted and reads rows and observed views from one jobs snapshot. A
row is expandable while the job is live or once it left retained output
behind; it shows the live progress line or the terminal detail. The web
e2e drivers kill through visibleTo(), and the client fixtures the roster
removal missed drop their jobs baselines.
2026-09-03 17:00:51 +08:00
Yichen Jiang
2132b7beeb
refactor(session-controller): drop the job roster from the control stream
...
The control baseline and frames carry queues and projections only; the
SessionJob row type, the jobs frame, the registry subscription, and the
client jobsBySession mirror are gone, and every client fixture drops the
empty mirror. The roster moves to dsh-api-job-controller's job.rows
stream in the next change.
2026-09-03 16:43:15 +08:00
Yichen Jiang
6d65c12ef2
Merge remote-tracking branch 'origin/master' into worktree/process-plugin-streaming-72f9b3
...
# Conflicts:
# packages/client/ui-jobs/package.json
2026-09-03 11:30:41 +08:00
Yichen Jiang
761282724b
fix(jobs): constant pump waits, quiescent client disposal, record flag on the roster
...
Review corrections on the observation record:
- `pumpJobOutput` subscribes to `done` once and keeps one pending timer;
racing the same pending promise every poll round retained a reaction
per round for the life of the job.
- The `ctx.jobOutput` effect disposer is async and awaits every open
carrier's `dispose()`, so the fiber reports unloaded only once the old
iterators are quiescent.
- `SessionJob.record: true` replaces `outputTotal`: `append` never commits
a roster change, so the mirrored count was stale while output flowed;
the live offsets ride the observation stream's `opened` anchor.
- The record is documented as a best-effort live preview whose
cross-stream reordering is bounded by the poll interval.
- The web e2e scenarios hold their background job on a test-owned barrier
file instead of a wall-clock sleep, and each is one test rather than a
chain sharing a job id.
2026-09-03 11:23:41 +08:00
imccyu
3225ec2d94
Merge remote-tracking branch 'origin/master' into release/dsh-0.1.2-rc.1-version-to-master
2026-09-03 10:40:28 +08:00
Tianyi Cui
67c8a58854
fix(session): address v2 migration review
2026-09-03 04:45:41 +08:00
Tianyi Cui
a88ef734cc
Merge remote-tracking branch 'origin/worktree/session-format-04-live-assistant-stream' into worktree/session-format-05-v1-v2-chunk-migration
...
# Conflicts:
# .agents/notes/implemented/architecture/2026-08-31-live-assistant-stream-frames.i18n.yaml
# .agents/notes/implemented/architecture/2026-08-31-live-assistant-stream-frames.md
# .agents/notes/implemented/architecture/2026-08-31-live-assistant-stream-frames.zh.md
# .agents/notes/implemented/simplification/2026-08-06-buffer-free-feedback-telemetry.i18n.yaml
# .agents/notes/implemented/simplification/2026-08-06-buffer-free-feedback-telemetry.md
# .agents/notes/implemented/simplification/2026-08-06-buffer-free-feedback-telemetry.zh.md
# apps/web/tests/scaffold.ts
# docs/config-catalog.i18n.yaml
# docs/config-catalog.md
# docs/config-catalog.zh.md
# packages/api/session-controller/README.i18n.yaml
# packages/api/session-controller/README.md
# packages/api/session-controller/README.zh.md
# packages/api/session-controller/src/client/sessions/assistant-stream.ts
# packages/core/agent-loop/src/agent.ts
# packages/core/agent-loop/src/assistant-stream.ts
# packages/core/agent-loop/tests/loop.spec.ts
# packages/core/agent/src/runtime-types.ts
# packages/session/session-telemetry/tests/telemetry.spec.ts
# packages/test-support/llm-replay/README.i18n.yaml
# packages/test-support/llm-replay/README.md
# packages/test-support/llm-replay/README.zh.md
# packages/test-support/llm-replay/src/alpha-refusal-fixtures.ts
# packages/test-support/llm-replay/src/index.ts
# packages/test-support/llm-replay/tests/llm-replay.spec.ts
# packages/test-support/session-snapshot/README.i18n.yaml
# packages/test-support/session-snapshot/README.md
# packages/test-support/session-snapshot/README.zh.md
# packages/test-support/session-snapshot/src/suite.ts
# packages/test-support/session-snapshot/tests/suite.spec.ts
# snapshots/sdk/sdk.snapshot.ts
# snapshots/session/headless.snapshot.ts
2026-09-03 03:10:05 +08:00
imccyu
a66e470204
release(dsh): 0.1.2-rc.1
2026-09-03 02:27:19 +08:00
Tianyi Cui
a65edc4810
fix(agent): terminate live assistant attempts
2026-09-03 02:25:25 +08:00
Tianyi Cui
a5c24f204d
Merge remote-tracking branch 'origin/worktree/session-format-03-v0-v1-migration' into worktree/session-format-04-live-assistant-stream
2026-09-03 02:02:47 +08:00
Tianyi Cui
f044d3fad2
fix(session): address v0 migration review
2026-09-03 01:52:25 +08:00
Yichen Jiang
7ec142a325
refactor(jobs): move job observation into api-job-controller
...
Review asked for the observation wire and its client service to leave
session-controller: a job should reach the Host only through its own
Remote namespace, and the session plugin's apply had to materialize
{ $stream, session } for a service that is not session state.
@deepseek-ai/dsh-api-job-controller now owns the Host JobController
(job.observe over ctx.jobs, requiring the agent and job registries) and
the client ClientJobOutput (ctx.jobOutput) over ClientJobOutputModel,
resolving both Remote faces in its own apply. The remotes assembly
mounts the job namespace; ui-jobs injects the new package; the wire
types drop their Session prefix and spell the status union out so the
client face pulls no Host declaration merges into browser programs.
session-controller keeps the jobsBySession roster and loses observe-job,
job-output, and the observe cadence config.
ui-chat's slots and snapshot-builder import CommandNode and friends from
the declaring package: the typert analyzer's cross-package rule trips on
the snapshot re-export as soon as another client face joins the root
Client program (the new controller does), which is why this branch
carried the change before. JobPumpSource documents why it is an offset
snapshot reader rather than a Node.js Readable.
2026-09-02 22:53:36 +08:00
Tianyi Cui
ac8b58241d
Merge remote-tracking branch 'origin/worktree/session-format-04-live-assistant-stream' into worktree/session-format-05-v1-v2-chunk-migration
...
# Conflicts:
# apps/web/tests/scaffold.ts
2026-09-02 22:19:50 +08:00
Tianyi Cui
08ef483c7a
Merge remote-tracking branch 'origin/worktree/session-format-03-v0-v1-migration' into worktree/session-format-04-live-assistant-stream
2026-09-02 22:17:47 +08:00
Tianyi Cui
99567996bd
test(session): cover body-free listing races
2026-09-02 22:16:06 +08:00
Yichen Jiang
4db24c642d
Merge remote-tracking branch 'origin/master' into worktree/process-plugin-streaming-72f9b3
...
# Conflicts:
# docs/config-catalog.i18n.yaml
# docs/config-catalog.md
# docs/config-catalog.zh.md
# packages/client/ui-chat/src/client/contract/slots.ts
# packages/client/ui-chat/src/client/conversation-nodes/chat-snapshot-builder.ts
# packages/client/ui-jobs/package.json
# packages/extensions/cordis-client-runner/src/client/slot-catalog.ts
2026-09-02 22:04:03 +08:00
Tianyi Cui
2087fd3f2c
Merge remote-tracking branch 'origin/worktree/session-format-04-live-assistant-stream' into worktree/session-format-05-v1-v2-chunk-migration
2026-09-02 21:52:34 +08:00
Tianyi Cui
e3e9bd5909
Merge remote-tracking branch 'origin/worktree/session-format-03-v0-v1-migration' into worktree/session-format-04-live-assistant-stream
...
# Conflicts:
# docs/event-producer-consumer.i18n.yaml
# docs/event-producer-consumer.md
# docs/event-producer-consumer.zh.md
# packages/core/agent/src/runtime-types.ts
2026-09-02 21:51:42 +08:00
Tianyi Cui
fe06dccea4
Merge remote-tracking branch 'origin/master' into worktree/session-format-03-v0-v1-migration
...
# Conflicts:
# docs/config-catalog.i18n.yaml
# docs/config-catalog.md
# docs/config-catalog.zh.md
# docs/persistence-catalog.i18n.yaml
# docs/persistence-catalog.md
# packages/api/session-controller/README.i18n.yaml
# packages/api/session-controller/README.md
# packages/api/session-controller/README.zh.md
2026-09-02 21:40:29 +08:00
Tianyi Cui
17f49f6191
fix(session): keep cold listing body-free
2026-09-02 21:29:43 +08:00
Tianyi Cui
e974a655a0
Revert "feat(session, agent, web): support same-session message editing"
2026-09-02 21:20:07 +08:00
Tianyi Cui
d88c258dc7
Merge remote-tracking branch 'origin/worktree/session-format-03-v0-v1-migration' into worktree/session-format-04-live-assistant-stream
...
# Conflicts:
# docs/event-producer-consumer.i18n.yaml
# docs/event-producer-consumer.md
# docs/event-producer-consumer.zh.md
# packages/core/agent/src/runtime-types.ts
2026-09-02 20:58:27 +08:00
Tianyi Cui
5a9353adda
Merge remote-tracking branch 'origin/master' into worktree/session-format-03-v0-v1-migration
...
# Conflicts:
# docs/persistence-catalog.i18n.yaml
# docs/persistence-catalog.md
2026-09-02 20:48:26 +08:00
Tianyi Cui
e12258e2b7
Merge live assistant stream into embedded stream migration
2026-09-02 18:49:39 +08:00
Tianyi Cui
d8cc3e035e
Merge session format migration into live assistant stream
2026-09-02 18:48:50 +08:00
Tianyi Cui
2ca559dee3
Merge master into session format migration
2026-09-02 18:46:49 +08:00
lsdsjy
ef88756f13
feat(session, agent, web): support same-session message editing
2026-09-02 18:26:55 +08:00
imccyu
cf126d8699
Merge remote-tracking branch 'origin/merge/projcache-v6-compat-into-master' into release/dsh-0.1.2-alpha.5-version-to-master
2026-09-02 17:25:23 +08:00
Tianyi Cui
25098647e8
Merge live assistant stream into embedded stream migration
...
# Conflicts:
# .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-08-08-bounded-session-persistence-write-batching.i18n.yaml
# .agents/notes/implemented/architecture/2026-08-08-bounded-session-persistence-write-batching.md
# .agents/notes/implemented/architecture/2026-08-08-bounded-session-persistence-write-batching.zh.md
# .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/message-actions.e2e.ts
# apps/web/tests/scaffold-generation.spec.ts
# apps/web/tests/scaffold.ts
# apps/web/tests/seeded-history.e2e.ts
# apps/web/tests/subagent-conversation.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/persistence-catalog.zh.md
# docs/subsystems/persistence.i18n.yaml
# docs/subsystems/persistence.md
# docs/subsystems/persistence.zh.md
# docs/subsystems/session.i18n.yaml
# docs/subsystems/session.md
# docs/subsystems/session.zh.md
# packages/api/session-controller/tests/session-projections.host.spec.ts
# packages/core/agent-loop/tests/resume.spec.ts
# packages/session-query/session-query-sqlite/tests/sqlite.spec.ts
# packages/session-query/session-query/tests/tracing.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/tests/contract.ts
# packages/session/session-persistence/tests/coordinator-contract.ts
# packages/session/session-persistence/tests/persistence.spec.ts
# packages/subagent/subagent/src/continuation.ts
# packages/subagent/subagent/tests/list-children.spec.ts
2026-09-02 17:20:51 +08:00
imccyu
db6bdc3576
release(dsh): 0.1.2-alpha.5
2026-09-02 15:48:33 +08:00
Tianyi Cui
2372f84206
Merge session format migration into live assistant stream
...
# Conflicts:
# docs/event-producer-consumer.i18n.yaml
# docs/event-producer-consumer.md
# docs/event-producer-consumer.zh.md
2026-09-02 13:54: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
eb7c290b22
fix(session): retain reachable v2 stream settlements
2026-09-02 04:17:44 +08:00
Tianyi Cui
7e5b72ceee
fix(session): harden embedded assistant streams
2026-09-02 04:00:33 +08:00
Tianyi Cui
f99b06eaed
feat(session)!: embed assistant streams in format v2
2026-09-02 04:00:01 +08:00
Tianyi Cui
0bb7bba015
fix(session): close live assistant framing races
2026-09-02 03:49:17 +08:00
Tianyi Cui
30e045dfad
feat(agent): emit live assistant stream frames
2026-09-02 03:36:13 +08:00
Turtle
8b799cd7ac
Merge pull request #3266 from deepseek-harness/refactor/session-persistence-handle-seam
...
refactor(session-persistence)!: handle-based seam with a lifecycle-owned write path
2026-09-02 00:50:53 +08:00
imccyu
a9e185f205
release(dsh): 0.1.2-alpha.4
2026-09-01 23:19:57 +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
Yichen Jiang
c1e6d09305
Merge branch 'master' into worktree/process-plugin-streaming-72f9b3
...
Absorbs the session seq-brand refactor and the turn-rail preview layer;
regenerates the catalogs and graph docs from the merged source and
re-ports the zh config/event rows this branch owns.
2026-09-01 22:13:35 +08:00