* fix(session-projection): keep released units in checkpoints Since the Cordis rc.11 teardown order unloads the Web layer before the base layer, Session Controller and harness-dev-context release their projection units before their live Sessions detach. The projection cache is still alive at that point and wrote a checkpoint holding only the units that were still registered, replacing the complete record. A blank Session then lost sessionListMetadata and listed as an untitled conversation after every graceful restart. A released unit now stays in the registry as a predecessor: it leaves event drives, snapshots, restores, and change notifications, while checkpoint() keeps each Session's last cell of it without advancing it. Registering the same key again replaces the predecessor and refolds the log. The projection cache keeps replacing whole records. * test(session-projection): assert frozen released units across unload tests Update the remaining unload tests that still expected a released unit to vanish from checkpoint(): user-approval, agent-loop inbox and scope lifecycle, time-context, and the agent registry now assert that the same Session keeps its pre-unload row, that a later event does not advance it, and that a Session created after the unload has no row. The token-meter and goal unload tests also append an event after the unload. Document that a retained handle read still advances a released cell that checkpoint() serves, and that restore() folds only live units, so its refreshed rows omit released units. * docs(session-projection): sync the ProjectionHandle type-equiv block * docs(session-projection): record frozen released units and their upgrade Add the upgrade guide for checkpoint() keeping a released unit's last row, update the registration-handles Agent Note with the frozen-cell decision and the retained predecessor, list both consequences under the registry README's known limitations, note in the projection cache README that a stored row can be frozen at its unit's release, and say that restoreFloor() ignores released predecessors. Update the agent-loop resource-lifecycle unload test, which read checkpoints through an alias, to the frozen-row semantics. * docs(upgrade-guide): mark the released-checkpoint snippet ignore-check * docs(session-projection): state the retained-handle path and narrow a rejected alternative * docs(upgrade-guide): re-record the released-checkpoint guide pairing
Subsystems
English | 中文
One page per subsystem of the DeepSeek Harness: what it is, the data structures it moves, and — where a ctx service or event scope backs it — a generated Cordis API section carrying its service and event reference. The folder complements architecture.md, which describes behavior across subsystems (the service map, the session/turn/step lifecycle, the event taxonomy); each page here is the reference for one subsystem's vocabulary and wiring.
| Page | Owns |
|---|---|
| boot.md | Current-profile plugin management and launcher reload coordination |
| core.md | how packages/core controls the agent loop: the package-by-package loop description, agent creation and ownership (AgentHandle), the Agent handle's delivery/cancellation/interception contracts, and the repo-wide type patterns (…Map → derived-union, branded ids) |
| llm-streaming.md | the packages/llm conversation types — Message/ContentBlock, the assembled model request, the StreamChunk wire protocol and adapter contract, BlockAssembler, and the LlmAdapter provider contract |
| token-meter.md | immutable scalar and positional replay measurements with consumed-log revisions |
| scope.md | scoped registration identity, dispatch carriers, and the owned Scope context |
| typert.md | Remote invocation descriptors, lookup/Context declarations, Typert registries, and the Host Gateway/Client API boundaries |
| goal.md | persisted goal identity, lifecycle snapshots, activation, change records, and round attribution |
| schedule.md | Host-owned reminder records, durable transitions, active and ended views, and ordinary-conversation delivery |
| todo.md | the todo package's whole-list item type, durable event ownership, and projection |
| deliverables.md | what a turn hands to the user: PresentedFile deliveries from present and the Host-served WorkspaceChangesSummary of changed files from git snapshots |
| commands.md | the human-command registry service: definitions, adapter discovery, direct invocation, results, and parsing views |
| session.md | the full SessionEventMap variant catalog, TurnEndReason, deriveMessages(), execution enclosure, and standalone events |
| working-directory.md | Session execution directories, durable changes, recovery, and user context |
| worktrees.md | Experimental Git branch and checkout creation under existing permissions |
| forge.md | Experimental code host change requests: provider contract, shared status polling, and Session bindings |
| persistence.md | the durability seam: SessionPersistence, the JSONL provider, session/flush, crash recovery, SessionHeader |
| settings.md | the user-settings seam: SettingsNamespace registration, layered resolution (defaults → composition base → user document), owner scopes, hot commits |
| credentials.md | the credential seam: CredentialRef references (never values) in configuration, per-operation resolution, UI-safe CredentialInfo, provider source layers |
| session-query.md | logical records, bounded exact-event reads, relationship traces, semantic filters/documents, and full-text result pages |
| feedback.md | lifecycle-bound per-message feedback records, optimistic versions, sidecar persistence, and the Host Remote contract |
| session-title.md | durable title snapshots, cited source-message seqs, and the asynchronous provider contract |
| session-reference.md | structured cross-session references: SessionReferenceInput/Candidate, prepared message contexts, the stable error taxonomy |
| system-prompt.md | per-assembly context, tool-provider results, prompt sections, and cooperative assembly |
| tools.md | ToolDefinition full fields, the schema DSL, ToolExecution/ToolResult, tool-presentation UI types, and the guarded execution pipeline |
| mcp.md | external MCP connections, scoped tools and resources, server instructions, protocol results, and configuration ownership |
| user-questions.md | the UI-backed human question/answer seam: AskUserQuestionRequest, answer/options vocabulary, provider API, error taxonomy |
| approval.md | the one-shot user-approval seam: ApprovalRequest, ApprovalOutcome, per-session policy, audit events, and answerer contracts |
| office-to-pdf.md | authorized Office-to-PDF conversion, native/WASM engines, and bounded shared reuse |
| attachment.md | durable image identity and metadata, validation inputs, verified reads, and the AttachmentStore seam |
| shell.md | the shell executor seam: ShellExecRequest/Spec, ShellRunResult, background ShellProcess handles |
| subprocess.md | the subprocess seam: fully-explicit SubprocessSpawnSpec, offset-based output readers, unclassified SubprocessOutcome, and the managed DSH_* environment vocabulary |
| ssh.md | the POSIX SSH connection and remote filesystem, subprocess and sandbox providers |
| terminal.md | persistent terminal ids, backend/session contracts, send readiness, bounded reads, and owner-visible snapshots |
| sandbox.md | per-session policy resolution and the process-confinement seam: file-effect modes, execution/provider policies, ConfinedArgv, enforcement and fail-closed errors |
| ptc-runtime.md | the PTC execution seam: PtcRunRequest/Result, binding namespaces, captured logs, the PtcRunFailure taxonomy |
| computer-use.md | exclusive named computer-use provider registration and Cua Driver integration choices |
| browser-use.md | exclusive named browser-use registration, provider choices, and per-Session browser ownership |
| extensions.md | versioned dynamic Cordis Plugins and Packages, Host/Client activation, approval, runtime inspection, and lifecycle teardown |
| filesystem.md | the filesystem seam: FsTarget, read/write/edit outcomes, observed-file state, FsErrorCode |
| lsp.md | the LSP navigation seam: LspQueryRequest/Result, LspProvider/Service, four operations, LspError |
| skills.md | the skill service: discovery priority, SkillSummary/SkillDefinition, session-prefix catalog, model-facing skill loading |
| compaction.md | the compaction seam: the compaction/* session events, CompactionResult, the CompactionEngine interface |
| subagent.md | the subagent seam: the named-provider registry, SubagentStartRequest/Result/Run, the start-time-vs-runtime capability split |
| voice-input.md | experimental named recognizers, transient audio and revision-guarded draft insertion |
| translation.md | experimental anonymous text translation and explicit provider requests |
| agent-team.md | Agent Teams: implicit Lead identity, named continuable teammates, direct peer inbox delivery, and shared task DAG |
| liveshare.md | the opt-in LiveShare bundle: nested share modes, a fork's ceiling and durability, enforcement installation, and the constraint a shared Session's externally driven turns run under |
| claude-code-mods.md | Claude Code mods through the experimental bridge: every event, $ member, chain rule, drawing feature, and example mod that differs from Claude Code |
| web.md | the web access seam: WebSearchRequest/Result, WebFetchRequest/Result, WebFetchBody, provider availability, WebError |
| spill.md | the spill storage seam: SaveTextSpill, SpillOwner/SpillSource, SpillRef, the branded SpillLocator |
| workflow.md | the workflow seam: WorkflowStartRequest, WorkflowMeta, WorkflowRun/Result, the workflow/* event payloads, WorkflowError fatality |
| jobs.md | the background-job runtime: branded JobIds, the producer contract, consumer views, and ctx.jobs service behavior |
| permission-presets.md | the permission-preset layer: PresetSpec/PresetOption, the derived custom state, the log-only permission/preset event |
| plan.md | plan mode: the log-only plan/mode state, pending-selection flush, PlanModeConfig, the exit_plan_mode review arc |
| web-server.md | the HTTP carrier: WebRouteKind/WebRoute, match order, the claimable fallback seat, index taps |
| webhook.md | authenticated provider deliveries, arbitrary programmatic rules, and fire-and-forget Workspace Session creation |
| storage.md | the storage subsystem: the backend contract (StorageBackend), StorageForms, DomainSpec/Domain, domain/changed |
| workspace.md | the workspace registry: Workspace/WorkspaceId, registration and resolution, the session cwd relationship |
| web-client.md | the browser architecture: boot, Remote communication, paired Client models, UI adapters, Conversation assembly, Slots, and reconnect semantics |
| client-modules.md | the web plugin table: dsh.client declarations, WebBootGraph wire composition, the bundle route and index tap |
| slots.md | typed Web UI composition: declaration ownership, cardinality and scope, framework and feature injection, props derivation, and the shipped hierarchy |
| client-resources.md | the client resource model: dsh-resource://<type>/… addresses, protocol providers and ResourceProtocolMap, the useResource global hook and its states, pins and release |
| sidebar-right.md | the right Sidebar: resource and navigation addresses, tab-type registration and routing, the ctx.sidebarRight navigation service, the pane-tab slots and owner props, the resource model, and the Workspace Files service |
| conversation.md | target-neutral Session-event assembly: Context identity, Location data, replay paths, view builders, and target-owned render nodes |
| session-projection.md | the projection seam: SessionProjectionMap, the pure ProjectionDefinition unit, ProjectionSnapshot's consistent cut, the change feed |
| session-telemetry.md | the outbound session-reporting capability seam: SessionTelemetryRecord/SessionTelemetrySeverity, the SessionTelemetrySink contract, and the session-telemetry/record redact waterfall |
| otel.md | Shared ordinary-event and Session-log OTLP channels |
| product-telemetry.md | Explicit product analytics submission and OTLP/HTTP transport |
Type declarations and their JSDoc on these pages are source-equivalent and drift-checked by
pnpm run verify-type-equiv(see development.md). Ordinary blocks preserve complete declarations;public-apiblocks preserve body-stripped public class declarations. Cordis services and events use each page's generated Cordis API section.