You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-[ ]`SessionProcessor` — blocked by AI SDK v6 PR (#18433)
217
+
-[ ]`SessionPrompt` — blocked by AI SDK v6 PR (#18433)
218
+
-[ ]`SessionCompaction` — blocked by AI SDK v6 PR (#18433)
219
+
-[ ]`Provider` — blocked by AI SDK v6 PR (#18433)
220
+
221
+
Other services not yet migrated:
222
+
223
+
-[ ]`SessionSummary` — `session/summary.ts`
224
+
-[ ]`SessionTodo` — `session/todo.ts`
225
+
-[ ]`SessionRevert` — `session/revert.ts`
226
+
-[ ]`Instruction` — `session/instruction.ts`
227
+
-[ ]`ShareNext` — `share/share-next.ts`
228
+
-[ ]`SyncEvent` — `sync/index.ts`
229
+
-[ ]`Storage` — `storage/storage.ts`
230
+
-[ ]`Workspace` — `control-plane/workspace.ts`
231
+
232
+
## Tool interface → Effect
233
+
234
+
Once individual tools are effectified, change `Tool.Info` (`tool/tool.ts`) so `init` and `execute` return `Effect` instead of `Promise`. This lets tool implementations compose natively with the Effect pipeline rather than being wrapped in `Effect.promise()` at the call site. Requires:
235
+
236
+
1. Migrate each tool to return Effects
237
+
2. Update `Tool.define()` factory to work with Effects
238
+
3. Update `SessionPrompt` to `yield*` tool results instead of `await`ing — blocked by AI SDK v6 PR (#18433)
239
+
240
+
Individual tools, ordered by value:
241
+
242
+
-[ ]`apply_patch.ts` — HIGH: multi-step orchestration, error accumulation, Bus events
-[ ]`lsp.ts` — LOW: dispatch switch over LSP operations
254
+
-[ ]`skill.ts` — LOW: skill tool adapter
255
+
-[ ]`plan.ts` — LOW: plan file operations
256
+
257
+
## Effect service adoption in already-migrated code
258
+
259
+
Some services are effectified but still use raw `Filesystem.*` or `Process.spawn` instead of the Effect equivalents. These are low-hanging fruit — the layers already exist, they just need the dependency swap.
260
+
261
+
### `Filesystem.*` → `AppFileSystem.Service` (yield in layer)
262
+
263
+
-[ ]`file/index.ts` — 11 calls (the File service itself)
264
+
-[ ]`config/config.ts` — 7 calls
265
+
-[ ]`auth/index.ts` — 3 calls
266
+
-[ ]`skill/index.ts` — 3 calls
267
+
-[ ]`file/time.ts` — 1 call
268
+
269
+
### `Process.spawn` → `ChildProcessSpawner` (yield in layer)
270
+
271
+
-[ ]`format/index.ts` — 1 call
272
+
273
+
## Filesystem consolidation
274
+
275
+
`util/filesystem.ts` (raw fs wrapper) is used by **64 files**. The effectified `AppFileSystem` service (`filesystem/index.ts`) exists but only has **8 consumers**. As services and tools are effectified, they should switch from `Filesystem.*` to yielding `AppFileSystem.Service` — this happens naturally during each migration, not as a separate effort.
276
+
277
+
Similarly, **28 files** still import raw `fs` or `fs/promises` directly. These should migrate to `AppFileSystem` or `Filesystem.*` as they're touched.
278
+
279
+
Current raw fs users that will convert during tool migration:
0 commit comments