|
|
@@ -186,6 +186,80 @@ schema module with a clear domain.
|
|
|
Major cluster. Message + event types flow through the SSE API and every SDK
|
|
|
output, so byte-identical SDK surface is critical.
|
|
|
|
|
|
+Suggested order for this cluster, starting from the leaves that `session.ts`
|
|
|
+and the SSE/event surface depend on:
|
|
|
+
|
|
|
+1. `src/session/schema.ts` ✅ already migrated
|
|
|
+2. `src/provider/schema.ts` if `message-v2.ts` still relies on zod-first IDs
|
|
|
+3. `src/lsp/*` schema leaves needed by `LSP.Range`
|
|
|
+4. `src/snapshot/*` leaves used by `Snapshot.FileDiff`
|
|
|
+5. `src/session/message-v2.ts`
|
|
|
+6. `src/session/message.ts`
|
|
|
+7. `src/session/prompt.ts`
|
|
|
+8. `src/session/revert.ts`
|
|
|
+9. `src/session/summary.ts`
|
|
|
+10. `src/session/status.ts`
|
|
|
+11. `src/session/todo.ts`
|
|
|
+12. `src/session/session.ts`
|
|
|
+13. `src/session/compaction.ts`
|
|
|
+
|
|
|
+Dependency sketch:
|
|
|
+
|
|
|
+```text
|
|
|
+session.ts
|
|
|
+|- project/schema.ts
|
|
|
+|- control-plane/schema.ts
|
|
|
+|- permission/schema.ts
|
|
|
+|- snapshot/*
|
|
|
+|- message-v2.ts
|
|
|
+| |- provider/schema.ts
|
|
|
+| |- lsp/*
|
|
|
+| |- snapshot/*
|
|
|
+| |- sync/index.ts
|
|
|
+| `- bus/bus-event.ts
|
|
|
+|- sync/index.ts
|
|
|
+|- bus/bus-event.ts
|
|
|
+`- util/update-schema.ts
|
|
|
+```
|
|
|
+
|
|
|
+Working rule for this cluster:
|
|
|
+
|
|
|
+- migrate reusable leaf schemas and nested payload objects first
|
|
|
+- migrate aggregate DTOs like `Session.Info` after their nested pieces exist as
|
|
|
+ named Schema values
|
|
|
+- leave zod-only event/update helpers in place temporarily when converting
|
|
|
+ them would force unrelated churn across sync/bus boundaries
|
|
|
+
|
|
|
+`message-v2.ts` first-pass outline:
|
|
|
+
|
|
|
+1. Schema-backed imports already available
|
|
|
+ - `SessionID`, `MessageID`, `PartID`
|
|
|
+ - `ProviderID`, `ModelID`
|
|
|
+2. Local leaf objects to extract and migrate first
|
|
|
+ - output format payloads
|
|
|
+ - common part bases like `PartBase`
|
|
|
+ - timestamp/range helper objects like `time.start/end`
|
|
|
+ - file/source helper objects
|
|
|
+ - token/cost/model helper objects
|
|
|
+3. Part variants built from those leaves
|
|
|
+ - `SnapshotPart`, `PatchPart`, `TextPart`, `ReasoningPart`
|
|
|
+ - `FilePart`, `AgentPart`, `CompactionPart`, `SubtaskPart`
|
|
|
+ - retry/step/tool related parts
|
|
|
+4. Higher-level unions and DTOs
|
|
|
+ - `FilePartSource`
|
|
|
+ - part unions
|
|
|
+ - message unions and assistant/user payloads
|
|
|
+5. Errors and event payloads last
|
|
|
+ - `NamedError.create(...)` shapes can stay temporarily if converting them to
|
|
|
+ `Schema.TaggedErrorClass` would force unrelated churn
|
|
|
+ - `SyncEvent.define(...)` and `BusEvent.define(...)` payloads can keep using
|
|
|
+ derived `.zod` until the sync/bus layers are migrated
|
|
|
+
|
|
|
+Possible later tightening after the Schema-first migration is stable:
|
|
|
+
|
|
|
+- promote repeated opaque strings and timestamp numbers into branded/newtype
|
|
|
+ leaf schemas where that adds domain value without changing the wire format
|
|
|
+
|
|
|
- [ ] `src/session/compaction.ts`
|
|
|
- [ ] `src/session/message-v2.ts`
|
|
|
- [ ] `src/session/message.ts`
|