Files
deepseek-harness/packages/goal
imccyu c991f76cef feat(goal): split the pure type outlet and register the 'goal' projection unit
dsh-goal/types becomes the client-safe pure outlet (tool-todo dual-outlet
shape): GoalId/GoalRef/GoalPhase/GoalBlockReason/GoalSnapshot, the new
GoalProjection payload, and the SessionProjectionMap 'goal' key merge — zero
host imports. Host-coupled vocabulary (GoalView/activation, change metas,
message source, folds, GoalError codes, the scoped goal/changed event) moves
to src/domain.ts, re-exported from the package root. ./client re-exports the
outlet for client aggregates.

GoalService registers the projection unit under ctx.inject(['sessionProjections']):
applyGoalProjection is a projection-grade last-wins fold — plain-JSON state,
same-reference return on non-goal or malformed events (a throwing apply
would tear down the registry drive; strict validation stays with the write
side and foldGoal). Activation is process-local and deliberately absent from
the projection value.
2026-07-28 21:31:30 +08:00
..
2026-07-26 05:06:39 +08:00
2026-07-26 05:06:39 +08:00

goal/ — persisted same-session goals

English | 中文

The goal family owns durable objective state independently of the model-facing tools and continuation policy that consume it.

Package Role ctx key
goal/ Event-sourced goal lifecycle, replay fold, compare-and-set mutations, and process-local activation ctx.goals
goal-session/ Same-session goal-round admission, outcome mapping, and lifecycle race fencing
tool-goal/ Model-facing read/create/update tools with execution-time authority checks
command-goal/ Human-facing /goal status and lifecycle control over the command plane

Goal state is part of the owning session log. Consumers depend on dsh-goal, not on the concrete agent loop; continuation behavior belongs in a separate plugin on the public agent seams.