@selesai/code 0.13.0 → 0.13.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (463) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/core/agent-session.d.ts +1 -1
  3. package/dist/core/agent-session.js +1 -1
  4. package/dist/core/sdk.d.ts +2 -2
  5. package/dist/core/sdk.js +1 -1
  6. package/dist/core/system-prompt.d.ts +1 -1
  7. package/dist/core/system-prompt.js +1 -1
  8. package/dist/extensions/package.json +1 -2
  9. package/dist/extensions/pi-hermes-memory/CHANGELOG.md +371 -0
  10. package/dist/extensions/pi-hermes-memory/LICENSE +21 -0
  11. package/dist/extensions/pi-hermes-memory/README.md +643 -0
  12. package/dist/extensions/pi-hermes-memory/docs/0.1/TASKS.md +197 -0
  13. package/dist/extensions/pi-hermes-memory/docs/0.2/PLAN.md +290 -0
  14. package/dist/extensions/pi-hermes-memory/docs/0.2/TASKS.md +134 -0
  15. package/dist/extensions/pi-hermes-memory/docs/0.2/TEST-PLAN.md +216 -0
  16. package/dist/extensions/pi-hermes-memory/docs/0.3/PLAN.md +330 -0
  17. package/dist/extensions/pi-hermes-memory/docs/0.3/TASKS.md +125 -0
  18. package/dist/extensions/pi-hermes-memory/docs/0.4/PLAN.md +160 -0
  19. package/dist/extensions/pi-hermes-memory/docs/0.4/TASKS.md +113 -0
  20. package/dist/extensions/pi-hermes-memory/docs/0.6/CHANGELOG.md +57 -0
  21. package/dist/extensions/pi-hermes-memory/docs/0.6/PLAN.md +202 -0
  22. package/dist/extensions/pi-hermes-memory/docs/0.6/TASKS.md +144 -0
  23. package/dist/extensions/pi-hermes-memory/docs/0.7/PLAN.md +349 -0
  24. package/dist/extensions/pi-hermes-memory/docs/0.7/TASKS.md +110 -0
  25. package/dist/extensions/pi-hermes-memory/docs/PUBLISHING.md +149 -0
  26. package/dist/extensions/pi-hermes-memory/docs/ROADMAP.md +468 -0
  27. package/dist/extensions/pi-hermes-memory/docs/images/memory-architecture.svg +1 -0
  28. package/dist/extensions/pi-hermes-memory/docs/images/pi-logo.svg +22 -0
  29. package/dist/extensions/pi-hermes-memory/docs/images/pi_memory.png +0 -0
  30. package/dist/extensions/pi-hermes-memory/docs/images/pi_memory.svg +19 -0
  31. package/dist/extensions/pi-hermes-memory/docs/images/security-flow.svg +1 -0
  32. package/dist/extensions/pi-hermes-memory/docs/images/session-lifecycle.svg +1 -0
  33. package/dist/extensions/pi-hermes-memory/docs/images/source-architecture.svg +1 -0
  34. package/dist/extensions/pi-hermes-memory/docs/mermaid/memory-architecture.mmd +49 -0
  35. package/dist/extensions/pi-hermes-memory/docs/mermaid/security-flow.mmd +40 -0
  36. package/dist/extensions/pi-hermes-memory/docs/mermaid/session-lifecycle.mmd +56 -0
  37. package/dist/extensions/pi-hermes-memory/docs/mermaid/source-architecture.mmd +54 -0
  38. package/dist/extensions/pi-hermes-memory/package-lock.json +3799 -0
  39. package/dist/extensions/pi-hermes-memory/package.json +66 -0
  40. package/dist/extensions/pi-hermes-memory/scripts/check-min-sdk.mjs +99 -0
  41. package/dist/extensions/pi-hermes-memory/scripts/ensure-dev.mjs +57 -0
  42. package/dist/extensions/pi-hermes-memory/src/auto-consolidation-warning.ts +6 -0
  43. package/dist/extensions/pi-hermes-memory/src/config.ts +178 -0
  44. package/dist/extensions/pi-hermes-memory/src/constants.ts +424 -0
  45. package/dist/extensions/pi-hermes-memory/src/extension-root-migration.ts +639 -0
  46. package/dist/extensions/pi-hermes-memory/src/handlers/auto-consolidate.ts +401 -0
  47. package/dist/extensions/pi-hermes-memory/src/handlers/background-review.ts +297 -0
  48. package/dist/extensions/pi-hermes-memory/src/handlers/child-process-watchdog.mjs +90 -0
  49. package/dist/extensions/pi-hermes-memory/src/handlers/correction-detector.ts +300 -0
  50. package/dist/extensions/pi-hermes-memory/src/handlers/index-sessions.ts +86 -0
  51. package/dist/extensions/pi-hermes-memory/src/handlers/insights.ts +78 -0
  52. package/dist/extensions/pi-hermes-memory/src/handlers/interview.ts +37 -0
  53. package/dist/extensions/pi-hermes-memory/src/handlers/learn-memory.ts +186 -0
  54. package/dist/extensions/pi-hermes-memory/src/handlers/message-parts.ts +27 -0
  55. package/dist/extensions/pi-hermes-memory/src/handlers/pi-child-process.ts +485 -0
  56. package/dist/extensions/pi-hermes-memory/src/handlers/preview-context.ts +105 -0
  57. package/dist/extensions/pi-hermes-memory/src/handlers/review-memory-ops.ts +506 -0
  58. package/dist/extensions/pi-hermes-memory/src/handlers/session-backfill.ts +145 -0
  59. package/dist/extensions/pi-hermes-memory/src/handlers/session-flush.ts +151 -0
  60. package/dist/extensions/pi-hermes-memory/src/handlers/session-live-index.ts +94 -0
  61. package/dist/extensions/pi-hermes-memory/src/handlers/skills-command.ts +1334 -0
  62. package/dist/extensions/pi-hermes-memory/src/handlers/standing-pin.ts +111 -0
  63. package/dist/extensions/pi-hermes-memory/src/handlers/switch-project.ts +75 -0
  64. package/dist/extensions/pi-hermes-memory/src/handlers/sync-markdown-memories.ts +266 -0
  65. package/dist/extensions/pi-hermes-memory/src/index.ts +378 -0
  66. package/dist/extensions/pi-hermes-memory/src/lifecycle-timing.ts +54 -0
  67. package/dist/extensions/pi-hermes-memory/src/paths.ts +61 -0
  68. package/dist/extensions/pi-hermes-memory/src/project-context.ts +13 -0
  69. package/dist/extensions/pi-hermes-memory/src/project-memory-migration.ts +93 -0
  70. package/dist/extensions/pi-hermes-memory/src/project.ts +157 -0
  71. package/dist/extensions/pi-hermes-memory/src/prompt-context.ts +55 -0
  72. package/dist/extensions/pi-hermes-memory/src/store/atomic-lock-coordinator.ts +375 -0
  73. package/dist/extensions/pi-hermes-memory/src/store/canonical-storage-path.ts +54 -0
  74. package/dist/extensions/pi-hermes-memory/src/store/content-scanner.ts +101 -0
  75. package/dist/extensions/pi-hermes-memory/src/store/db.ts +1180 -0
  76. package/dist/extensions/pi-hermes-memory/src/store/fts-query.ts +101 -0
  77. package/dist/extensions/pi-hermes-memory/src/store/markdown-mutation-lock.ts +38 -0
  78. package/dist/extensions/pi-hermes-memory/src/store/memory-lookup.ts +24 -0
  79. package/dist/extensions/pi-hermes-memory/src/store/memory-store.ts +1191 -0
  80. package/dist/extensions/pi-hermes-memory/src/store/recovery-maintenance.ts +66 -0
  81. package/dist/extensions/pi-hermes-memory/src/store/schema.ts +118 -0
  82. package/dist/extensions/pi-hermes-memory/src/store/session-anchor-search.ts +472 -0
  83. package/dist/extensions/pi-hermes-memory/src/store/session-indexer.ts +511 -0
  84. package/dist/extensions/pi-hermes-memory/src/store/session-parser.ts +213 -0
  85. package/dist/extensions/pi-hermes-memory/src/store/session-search.ts +234 -0
  86. package/dist/extensions/pi-hermes-memory/src/store/skill-store.ts +950 -0
  87. package/dist/extensions/pi-hermes-memory/src/store/skill-utils.ts +133 -0
  88. package/dist/extensions/pi-hermes-memory/src/store/sqlite-memory-store.ts +1002 -0
  89. package/dist/extensions/pi-hermes-memory/src/store/sqlite-native.ts +241 -0
  90. package/dist/extensions/pi-hermes-memory/src/store/standing-instructions.ts +247 -0
  91. package/dist/extensions/pi-hermes-memory/src/tools/memory-search-tool.ts +95 -0
  92. package/dist/extensions/pi-hermes-memory/src/tools/memory-tool.ts +469 -0
  93. package/dist/extensions/pi-hermes-memory/src/tools/session-search-tool.ts +246 -0
  94. package/dist/extensions/pi-hermes-memory/src/tools/shared-output-view.ts +170 -0
  95. package/dist/extensions/pi-hermes-memory/src/tools/skill-tool.ts +333 -0
  96. package/dist/extensions/pi-hermes-memory/src/tools/tool-result-views.ts +105 -0
  97. package/dist/extensions/pi-hermes-memory/src/types.ts +214 -0
  98. package/dist/extensions/pi-hermes-memory/tests/config.test.ts +434 -0
  99. package/dist/extensions/pi-hermes-memory/tests/extension-root-migration.test.ts +368 -0
  100. package/dist/extensions/pi-hermes-memory/tests/handlers/auto-consolidate.test.ts +984 -0
  101. package/dist/extensions/pi-hermes-memory/tests/handlers/background-review.test.ts +950 -0
  102. package/dist/extensions/pi-hermes-memory/tests/handlers/correction-detector.test.ts +671 -0
  103. package/dist/extensions/pi-hermes-memory/tests/handlers/insights.test.ts +157 -0
  104. package/dist/extensions/pi-hermes-memory/tests/handlers/interview.test.ts +127 -0
  105. package/dist/extensions/pi-hermes-memory/tests/handlers/pi-child-process.test.ts +905 -0
  106. package/dist/extensions/pi-hermes-memory/tests/handlers/preview-context.test.ts +152 -0
  107. package/dist/extensions/pi-hermes-memory/tests/handlers/prompt-context.test.ts +166 -0
  108. package/dist/extensions/pi-hermes-memory/tests/handlers/resources-discover.test.ts +71 -0
  109. package/dist/extensions/pi-hermes-memory/tests/handlers/review-memory-ops.test.ts +614 -0
  110. package/dist/extensions/pi-hermes-memory/tests/handlers/session-backfill.test.ts +192 -0
  111. package/dist/extensions/pi-hermes-memory/tests/handlers/session-flush.test.ts +677 -0
  112. package/dist/extensions/pi-hermes-memory/tests/handlers/session-live-index.test.ts +225 -0
  113. package/dist/extensions/pi-hermes-memory/tests/handlers/skills-command.test.ts +827 -0
  114. package/dist/extensions/pi-hermes-memory/tests/handlers/standing-pin.test.ts +134 -0
  115. package/dist/extensions/pi-hermes-memory/tests/handlers/sync-markdown-memories.test.ts +491 -0
  116. package/dist/extensions/pi-hermes-memory/tests/handlers/system-prompt.test.ts +199 -0
  117. package/dist/extensions/pi-hermes-memory/tests/handlers/thinking-max.test.ts +64 -0
  118. package/dist/extensions/pi-hermes-memory/tests/index.test.ts +30 -0
  119. package/dist/extensions/pi-hermes-memory/tests/integration/flow.test.ts +126 -0
  120. package/dist/extensions/pi-hermes-memory/tests/lifecycle-timing.test.ts +76 -0
  121. package/dist/extensions/pi-hermes-memory/tests/paths.test.ts +23 -0
  122. package/dist/extensions/pi-hermes-memory/tests/project-memory-migration.test.ts +80 -0
  123. package/dist/extensions/pi-hermes-memory/tests/project-rebinding.test.ts +115 -0
  124. package/dist/extensions/pi-hermes-memory/tests/project.test.ts +120 -0
  125. package/dist/extensions/pi-hermes-memory/tests/run-all-timeout.test.ts +107 -0
  126. package/dist/extensions/pi-hermes-memory/tests/run-all.sh +45 -0
  127. package/dist/extensions/pi-hermes-memory/tests/store/atomic-lock-coordinator.test.ts +381 -0
  128. package/dist/extensions/pi-hermes-memory/tests/store/content-scanner.test.ts +388 -0
  129. package/dist/extensions/pi-hermes-memory/tests/store/db.test.ts +1046 -0
  130. package/dist/extensions/pi-hermes-memory/tests/store/markdown-mutation-lock.test.ts +34 -0
  131. package/dist/extensions/pi-hermes-memory/tests/store/memory-store.test.ts +2150 -0
  132. package/dist/extensions/pi-hermes-memory/tests/store/recovery-maintenance.test.ts +170 -0
  133. package/dist/extensions/pi-hermes-memory/tests/store/session-anchor-search.test.ts +210 -0
  134. package/dist/extensions/pi-hermes-memory/tests/store/session-indexer.test.ts +643 -0
  135. package/dist/extensions/pi-hermes-memory/tests/store/session-parser.test.ts +282 -0
  136. package/dist/extensions/pi-hermes-memory/tests/store/session-search.test.ts +287 -0
  137. package/dist/extensions/pi-hermes-memory/tests/store/skill-store.test.ts +678 -0
  138. package/dist/extensions/pi-hermes-memory/tests/store/skill-utils.test.ts +21 -0
  139. package/dist/extensions/pi-hermes-memory/tests/store/sqlite-lazy-load.test.ts +78 -0
  140. package/dist/extensions/pi-hermes-memory/tests/store/sqlite-memory-store.test.ts +543 -0
  141. package/dist/extensions/pi-hermes-memory/tests/store/sqlite-native.test.ts +164 -0
  142. package/dist/extensions/pi-hermes-memory/tests/store/standing-instructions.test.ts +171 -0
  143. package/dist/extensions/pi-hermes-memory/tests/tools/memory-search-tool.test.ts +84 -0
  144. package/dist/extensions/pi-hermes-memory/tests/tools/memory-tool.test.ts +709 -0
  145. package/dist/extensions/pi-hermes-memory/tests/tools/session-search-tool.test.ts +345 -0
  146. package/dist/extensions/pi-hermes-memory/tests/tools/shared-output-view.test.ts +362 -0
  147. package/dist/extensions/pi-hermes-memory/tests/tools/skill-tool.test.ts +478 -0
  148. package/dist/extensions/pi-hermes-memory/tests/tools/tool-result-renderer-wiring.test.ts +40 -0
  149. package/dist/extensions/pi-hermes-memory/tsconfig.json +19 -0
  150. package/dist/extensions/pi-rewind-hook/README.md +4 -1
  151. package/dist/extensions/pi-rewind-hook/index.ts +151 -21
  152. package/dist/extensions/pi-rewind-hook/package.json +5 -3
  153. package/dist/extensions/pi-subagents/.oxlintrc.json +43 -0
  154. package/dist/extensions/pi-subagents/AGENTS.md +5 -0
  155. package/dist/extensions/pi-subagents/CHANGELOG.md +157 -0
  156. package/dist/extensions/pi-subagents/README.md +12 -6
  157. package/dist/extensions/pi-subagents/VISION.md +81 -0
  158. package/dist/extensions/pi-subagents/agents/claude-code-writer.md +15 -0
  159. package/dist/extensions/pi-subagents/agents/claude-code.md +15 -0
  160. package/dist/extensions/pi-subagents/agents/codex-exec-writer.md +15 -0
  161. package/dist/extensions/pi-subagents/agents/codex-exec.md +15 -0
  162. package/dist/extensions/pi-subagents/agents/cursor-agent-writer.md +14 -0
  163. package/dist/extensions/pi-subagents/agents/cursor-agent.md +14 -0
  164. package/dist/extensions/pi-subagents/agents/reviewer.md +1 -3
  165. package/dist/extensions/pi-subagents/docs/agents.md +488 -0
  166. package/dist/extensions/pi-subagents/docs/configuration.md +46 -9
  167. package/dist/extensions/pi-subagents/docs/extension-api.md +42 -3
  168. package/dist/extensions/pi-subagents/docs/models.md +27 -4
  169. package/dist/extensions/pi-subagents/docs/observability.md +10 -9
  170. package/dist/extensions/pi-subagents/docs/tool-reference.md +102 -6
  171. package/dist/extensions/pi-subagents/docs/workflows.md +135 -0
  172. package/dist/extensions/pi-subagents/package-lock.json +389 -2
  173. package/dist/extensions/pi-subagents/package.json +3 -1
  174. package/dist/extensions/pi-subagents/prompts/review-loop.md +2 -2
  175. package/dist/extensions/pi-subagents/skills/council-mode/SKILL.md +1 -1
  176. package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +3 -1
  177. package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +7 -3
  178. package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +2 -2
  179. package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +26 -5
  180. package/dist/extensions/pi-subagents/src/agents/agent-management.ts +41 -22
  181. package/dist/extensions/pi-subagents/src/agents/agent-refinements.ts +4 -4
  182. package/dist/extensions/pi-subagents/src/agents/agent-serializer.ts +9 -2
  183. package/dist/extensions/pi-subagents/src/agents/agents.ts +322 -75
  184. package/dist/extensions/pi-subagents/src/agents/builtin-names.ts +6 -0
  185. package/dist/extensions/pi-subagents/src/agents/runtime-agent-events.ts +70 -0
  186. package/dist/extensions/pi-subagents/src/agents/runtime-agent-registry.ts +27 -20
  187. package/dist/extensions/pi-subagents/src/api/agents.ts +10 -5
  188. package/dist/extensions/pi-subagents/src/api/background-work.ts +5 -1
  189. package/dist/extensions/pi-subagents/src/api/delegation.ts +0 -7
  190. package/dist/extensions/pi-subagents/src/api/preflight.ts +34 -12
  191. package/dist/extensions/pi-subagents/src/extension/config.ts +70 -0
  192. package/dist/extensions/pi-subagents/src/extension/doctor.ts +3 -3
  193. package/dist/extensions/pi-subagents/src/extension/fanout-child.ts +5 -3
  194. package/dist/extensions/pi-subagents/src/extension/index.ts +83 -30
  195. package/dist/extensions/pi-subagents/src/extension/public-execution.ts +44 -15
  196. package/dist/extensions/pi-subagents/src/extension/rpc.ts +55 -19
  197. package/dist/extensions/pi-subagents/src/extension/schemas.ts +41 -15
  198. package/dist/extensions/pi-subagents/src/extension/tool-description.ts +28 -31
  199. package/dist/extensions/pi-subagents/src/inspectors/herdr/actions.ts +2 -1
  200. package/dist/extensions/pi-subagents/src/inspectors/herdr/inspector-runner.ts +2 -10
  201. package/dist/extensions/pi-subagents/src/inspectors/herdr/session-roots-codec.ts +42 -0
  202. package/dist/extensions/pi-subagents/src/integrations/herdr-status.ts +51 -7
  203. package/dist/extensions/pi-subagents/src/intercom/result-intercom.ts +2 -0
  204. package/dist/extensions/pi-subagents/src/profiles/profiles.ts +5 -6
  205. package/dist/extensions/pi-subagents/src/runs/background/active-async-capacity.ts +77 -10
  206. package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +176 -53
  207. package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +19 -12
  208. package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +29 -27
  209. package/dist/extensions/pi-subagents/src/runs/background/async-retention.ts +20 -3
  210. package/dist/extensions/pi-subagents/src/runs/background/async-status-snapshot.ts +23 -261
  211. package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +73 -7
  212. package/dist/extensions/pi-subagents/src/runs/background/chain-append.ts +8 -3
  213. package/dist/extensions/pi-subagents/src/runs/background/chain-root-attachment.ts +74 -8
  214. package/dist/extensions/pi-subagents/src/runs/background/fleet-view.ts +37 -21
  215. package/dist/extensions/pi-subagents/src/runs/background/inspect-rpc.ts +8 -8
  216. package/dist/extensions/pi-subagents/src/runs/background/notify.ts +184 -9
  217. package/dist/extensions/pi-subagents/src/runs/background/result-delivery-ownership.ts +45 -0
  218. package/dist/extensions/pi-subagents/src/runs/background/result-files.ts +28 -14
  219. package/dist/extensions/pi-subagents/src/runs/background/result-watcher.ts +38 -15
  220. package/dist/extensions/pi-subagents/src/runs/background/resume-guidance.ts +1 -1
  221. package/dist/extensions/pi-subagents/src/runs/background/retained-children.ts +1 -1
  222. package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +50 -13
  223. package/dist/extensions/pi-subagents/src/runs/background/scheduled-runs.ts +93 -8
  224. package/dist/extensions/pi-subagents/src/runs/background/stale-run-reconciler.ts +10 -4
  225. package/dist/extensions/pi-subagents/src/runs/background/steering.ts +4 -14
  226. package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +549 -377
  227. package/dist/extensions/pi-subagents/src/runs/background/subagent-wait.ts +58 -10
  228. package/dist/extensions/pi-subagents/src/runs/background/terminal-run-index.ts +1 -1
  229. package/dist/extensions/pi-subagents/src/runs/background/wait-completions.ts +26 -1
  230. package/dist/extensions/pi-subagents/src/runs/background/wait-config.ts +23 -9
  231. package/dist/extensions/pi-subagents/src/runs/background/wait-tool.ts +9 -2
  232. package/dist/extensions/pi-subagents/src/runs/foreground/async-steering-action.ts +2 -2
  233. package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +204 -129
  234. package/dist/extensions/pi-subagents/src/runs/foreground/foreground-control.ts +9 -0
  235. package/dist/extensions/pi-subagents/src/runs/foreground/foreground-history.ts +23 -1
  236. package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +773 -311
  237. package/dist/extensions/pi-subagents/src/runs/foreground/workflow-detach-reconcile.ts +140 -115
  238. package/dist/extensions/pi-subagents/src/runs/shared/abort-recovery.ts +119 -0
  239. package/dist/extensions/pi-subagents/src/runs/shared/async-status-projection.ts +463 -0
  240. package/dist/extensions/pi-subagents/src/runs/shared/child-identity.ts +19 -4
  241. package/dist/extensions/pi-subagents/src/runs/shared/child-launch-plan.ts +151 -0
  242. package/dist/extensions/pi-subagents/src/runs/shared/child-protocol.ts +21 -7
  243. package/dist/extensions/pi-subagents/src/runs/shared/claude-code-adapter.ts +129 -0
  244. package/dist/extensions/pi-subagents/src/runs/shared/codex-exec-adapter.ts +129 -0
  245. package/dist/extensions/pi-subagents/src/runs/shared/completion-evidence.ts +89 -0
  246. package/dist/extensions/pi-subagents/src/runs/shared/completion-guard.ts +5 -4
  247. package/dist/extensions/pi-subagents/src/runs/shared/cursor-agent-adapter.ts +114 -0
  248. package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +3 -3
  249. package/dist/extensions/pi-subagents/src/runs/shared/external-cli-contract.ts +167 -0
  250. package/dist/extensions/pi-subagents/src/runs/shared/external-cli-preflight.ts +122 -0
  251. package/dist/extensions/pi-subagents/src/runs/shared/external-cli-runner.ts +348 -55
  252. package/dist/extensions/pi-subagents/src/runs/shared/fast-mode-extension.ts +5 -5
  253. package/dist/extensions/pi-subagents/src/runs/shared/host-step-status.ts +230 -0
  254. package/dist/extensions/pi-subagents/src/runs/shared/lane-metadata.ts +105 -0
  255. package/dist/extensions/pi-subagents/src/runs/shared/launch-cwd.ts +16 -0
  256. package/dist/extensions/pi-subagents/src/runs/shared/long-running-guard.ts +2 -1
  257. package/dist/extensions/pi-subagents/src/runs/shared/mcp-config-sources.ts +422 -0
  258. package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +221 -158
  259. package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-grant.ts +197 -0
  260. package/dist/extensions/pi-subagents/src/runs/shared/model-exclusions.ts +69 -7
  261. package/dist/extensions/pi-subagents/src/runs/shared/model-fallback.ts +47 -6
  262. package/dist/extensions/pi-subagents/src/runs/shared/mutation-evidence.ts +7 -2
  263. package/dist/extensions/pi-subagents/src/runs/shared/nested-events.ts +9 -3
  264. package/dist/extensions/pi-subagents/src/runs/shared/nested-render.ts +9 -5
  265. package/dist/extensions/pi-subagents/src/runs/shared/parallel-handoff.ts +419 -7
  266. package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +15 -1
  267. package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +81 -8
  268. package/dist/extensions/pi-subagents/src/runs/shared/process-signal.ts +13 -0
  269. package/dist/extensions/pi-subagents/src/runs/shared/run-history.ts +21 -1
  270. package/dist/extensions/pi-subagents/src/runs/shared/single-output.ts +44 -4
  271. package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +98 -13
  272. package/dist/extensions/pi-subagents/src/runs/shared/subagent-startup-retry.ts +1 -1
  273. package/dist/extensions/pi-subagents/src/runs/shared/worktree-cleanup-plan.ts +847 -0
  274. package/dist/extensions/pi-subagents/src/runs/shared/worktree.ts +18 -0
  275. package/dist/extensions/pi-subagents/src/shared/child-session-name.ts +46 -0
  276. package/dist/extensions/pi-subagents/src/shared/extension-context.ts +24 -0
  277. package/dist/extensions/pi-subagents/src/shared/fork-context.ts +21 -0
  278. package/dist/extensions/pi-subagents/src/shared/formatters.ts +18 -3
  279. package/dist/extensions/pi-subagents/src/shared/launch-contract.ts +5 -1
  280. package/dist/extensions/pi-subagents/src/shared/pruned-fork.ts +450 -0
  281. package/dist/extensions/pi-subagents/src/shared/session-file-trust.ts +19 -0
  282. package/dist/extensions/pi-subagents/src/shared/session-tokens.ts +14 -3
  283. package/dist/extensions/pi-subagents/src/shared/settings.ts +19 -105
  284. package/dist/extensions/pi-subagents/src/shared/shortcuts.ts +17 -0
  285. package/dist/extensions/pi-subagents/src/shared/types.ts +359 -40
  286. package/dist/extensions/pi-subagents/src/shared/utils.ts +41 -84
  287. package/dist/extensions/pi-subagents/src/shared/workflow-child-permit.ts +116 -0
  288. package/dist/extensions/pi-subagents/src/slash/delegation-adapters.ts +1 -9
  289. package/dist/extensions/pi-subagents/src/slash/delegation-request.ts +0 -4
  290. package/dist/extensions/pi-subagents/src/slash/slash-bridge.ts +1 -2
  291. package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +378 -88
  292. package/dist/extensions/pi-subagents/src/slash/slash-live-state.ts +22 -11
  293. package/dist/extensions/pi-subagents/src/slash/subagents-admin.ts +3 -0
  294. package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +147 -79
  295. package/dist/extensions/pi-subagents/src/tui/fleet-transcript.ts +11 -5
  296. package/dist/extensions/pi-subagents/src/tui/fleet.ts +39 -18
  297. package/dist/extensions/pi-subagents/src/tui/render.ts +369 -46
  298. package/dist/extensions/pi-subagents/src/watchdog/turn-delta.ts +1 -1
  299. package/dist/extensions/pi-subagents/src/workflows/chat-progress.ts +6 -3
  300. package/dist/extensions/pi-subagents/src/workflows/host-command.ts +230 -0
  301. package/dist/extensions/pi-subagents/src/workflows/scripted-workflow.ts +740 -58
  302. package/dist/extensions/pi-subagents/src/workflows/workflow-child-summary.ts +121 -0
  303. package/dist/extensions/pi-subagents/src/workflows/workflow-preflight.ts +270 -0
  304. package/dist/extensions/pi-subagents/src/workflows/workflow-receipt.ts +195 -6
  305. package/dist/extensions/pi-subagents/src/workflows/workflow-settlement.ts +246 -0
  306. package/dist/extensions/pi-subagents/test/e2e/real-session-subagent.test.ts +2 -2
  307. package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +1114 -260
  308. package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +34 -0
  309. package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +150 -3
  310. package/dist/extensions/pi-subagents/test/integration/claude-code-smoke.test.ts +52 -0
  311. package/dist/extensions/pi-subagents/test/integration/claude-code-writer-smoke.test.ts +55 -0
  312. package/dist/extensions/pi-subagents/test/integration/codex-exec-smoke.test.ts +53 -0
  313. package/dist/extensions/pi-subagents/test/integration/codex-exec-writer-smoke.test.ts +57 -0
  314. package/dist/extensions/pi-subagents/test/integration/cursor-agent-smoke.test.ts +59 -0
  315. package/dist/extensions/pi-subagents/test/integration/cursor-agent-writer-smoke.test.ts +62 -0
  316. package/dist/extensions/pi-subagents/test/integration/error-handling.test.ts +57 -1
  317. package/dist/extensions/pi-subagents/test/integration/external-cli-runner.test.ts +1 -0
  318. package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +20 -0
  319. package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +4 -3
  320. package/dist/extensions/pi-subagents/test/integration/orca-progress-tabs.test.ts +2 -2
  321. package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +54 -4
  322. package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +482 -4
  323. package/dist/extensions/pi-subagents/test/integration/result-watcher.test.ts +157 -9
  324. package/dist/extensions/pi-subagents/test/integration/session-tokens.test.ts +5 -5
  325. package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +1508 -291
  326. package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +423 -1
  327. package/dist/extensions/pi-subagents/test/integration/template-resolution.test.ts +8 -0
  328. package/dist/extensions/pi-subagents/test/support/cursor-smoke-inputs.ts +51 -0
  329. package/dist/extensions/pi-subagents/test/support/helpers.ts +2 -0
  330. package/dist/extensions/pi-subagents/test/support/mock-pi.ts +5 -5
  331. package/dist/extensions/pi-subagents/test/support/real-session-runner.ts +6 -6
  332. package/dist/extensions/pi-subagents/test/unit/abort-recovery.test.ts +152 -0
  333. package/dist/extensions/pi-subagents/test/unit/active-async-capacity.test.ts +48 -0
  334. package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +184 -6
  335. package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +66 -6
  336. package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +77 -0
  337. package/dist/extensions/pi-subagents/test/unit/agent-refinements.test.ts +18 -0
  338. package/dist/extensions/pi-subagents/test/unit/anti-slop-oxlint.test.ts +86 -0
  339. package/dist/extensions/pi-subagents/test/unit/artifacts.test.ts +1 -1
  340. package/dist/extensions/pi-subagents/test/unit/async-execution.test.ts +101 -1
  341. package/dist/extensions/pi-subagents/test/unit/async-interrupt-action.test.ts +121 -0
  342. package/dist/extensions/pi-subagents/test/unit/async-recovery-descriptor.test.ts +28 -0
  343. package/dist/extensions/pi-subagents/test/unit/async-resume.test.ts +14 -7
  344. package/dist/extensions/pi-subagents/test/unit/async-retention.test.ts +53 -0
  345. package/dist/extensions/pi-subagents/test/unit/async-status-projection.test.ts +190 -0
  346. package/dist/extensions/pi-subagents/test/unit/async-status-snapshot.test.ts +42 -0
  347. package/dist/extensions/pi-subagents/test/unit/auto-drain.test.ts +8 -4
  348. package/dist/extensions/pi-subagents/test/unit/background-work.test.ts +23 -0
  349. package/dist/extensions/pi-subagents/test/unit/chain-root-attachment.test.ts +78 -1
  350. package/dist/extensions/pi-subagents/test/unit/child-launch-plan.test.ts +94 -0
  351. package/dist/extensions/pi-subagents/test/unit/child-protocol.test.ts +21 -0
  352. package/dist/extensions/pi-subagents/test/unit/child-session-name.test.ts +50 -0
  353. package/dist/extensions/pi-subagents/test/unit/claude-code-adapter.test.ts +245 -0
  354. package/dist/extensions/pi-subagents/test/unit/codex-exec-adapter.test.ts +192 -0
  355. package/dist/extensions/pi-subagents/test/unit/compaction-resume.test.ts +27 -0
  356. package/dist/extensions/pi-subagents/test/unit/completion-evidence.test.ts +150 -0
  357. package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +21 -0
  358. package/dist/extensions/pi-subagents/test/unit/cursor-agent-adapter.test.ts +259 -0
  359. package/dist/extensions/pi-subagents/test/unit/cursor-smoke-inputs.test.ts +77 -0
  360. package/dist/extensions/pi-subagents/test/unit/delegation-api.test.ts +1 -4
  361. package/dist/extensions/pi-subagents/test/unit/doctor.test.ts +1 -1
  362. package/dist/extensions/pi-subagents/test/unit/extension-context.test.ts +27 -0
  363. package/dist/extensions/pi-subagents/test/unit/external-cli-runner.test.ts +223 -0
  364. package/dist/extensions/pi-subagents/test/unit/fast-mode-extension.test.ts +27 -0
  365. package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +208 -2
  366. package/dist/extensions/pi-subagents/test/unit/fleet-transcript.test.ts +29 -1
  367. package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +110 -1
  368. package/dist/extensions/pi-subagents/test/unit/foreground-control.test.ts +10 -0
  369. package/dist/extensions/pi-subagents/test/unit/formatters.test.ts +14 -0
  370. package/dist/extensions/pi-subagents/test/unit/herdr-inspector.test.ts +18 -9
  371. package/dist/extensions/pi-subagents/test/unit/herdr-session-roots-codec.test.ts +63 -0
  372. package/dist/extensions/pi-subagents/test/unit/herdr-shell-command.test.ts +2 -2
  373. package/dist/extensions/pi-subagents/test/unit/herdr-status-bridge.test.ts +136 -6
  374. package/dist/extensions/pi-subagents/test/unit/host-command.test.ts +156 -0
  375. package/dist/extensions/pi-subagents/test/unit/host-step-status.test.ts +98 -0
  376. package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +178 -26
  377. package/dist/extensions/pi-subagents/test/unit/index-segment.test.ts +2 -1
  378. package/dist/extensions/pi-subagents/test/unit/inspect-rpc.test.ts +21 -0
  379. package/dist/extensions/pi-subagents/test/unit/mcp-direct-tool-grant.test.ts +138 -0
  380. package/dist/extensions/pi-subagents/test/unit/mission-lifecycle.test.ts +1 -1
  381. package/dist/extensions/pi-subagents/test/unit/model-exclusions.test.ts +91 -0
  382. package/dist/extensions/pi-subagents/test/unit/model-fallback.test.ts +72 -7
  383. package/dist/extensions/pi-subagents/test/unit/mutation-evidence.test.ts +21 -0
  384. package/dist/extensions/pi-subagents/test/unit/nested-control.test.ts +1 -0
  385. package/dist/extensions/pi-subagents/test/unit/nested-events.test.ts +20 -2
  386. package/dist/extensions/pi-subagents/test/unit/notify.test.ts +129 -1
  387. package/dist/extensions/pi-subagents/test/unit/orca-progress-tabs.test.ts +2 -2
  388. package/dist/extensions/pi-subagents/test/unit/package-manifest.test.ts +4 -0
  389. package/dist/extensions/pi-subagents/test/unit/parallel-handoff.test.ts +358 -0
  390. package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +574 -21
  391. package/dist/extensions/pi-subagents/test/unit/pi-coding-agent-dir.test.ts +109 -1
  392. package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +71 -1
  393. package/dist/extensions/pi-subagents/test/unit/profiles.test.ts +7 -7
  394. package/dist/extensions/pi-subagents/test/unit/pruned-fork.test.ts +214 -0
  395. package/dist/extensions/pi-subagents/test/unit/public-execution.test.ts +29 -8
  396. package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +53 -0
  397. package/dist/extensions/pi-subagents/test/unit/result-delivery-ownership.test.ts +34 -0
  398. package/dist/extensions/pi-subagents/test/unit/result-files.test.ts +101 -3
  399. package/dist/extensions/pi-subagents/test/unit/retained-children.test.ts +1 -0
  400. package/dist/extensions/pi-subagents/test/unit/rpc.test.ts +10 -8
  401. package/dist/extensions/pi-subagents/test/unit/run-fanout-budget.test.ts +71 -1
  402. package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +41 -7
  403. package/dist/extensions/pi-subagents/test/unit/runtime-agent-registration.test.ts +136 -2
  404. package/dist/extensions/pi-subagents/test/unit/scheduled-runs.test.ts +137 -0
  405. package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +33 -12
  406. package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +504 -1
  407. package/dist/extensions/pi-subagents/test/unit/single-output.test.ts +8 -0
  408. package/dist/extensions/pi-subagents/test/unit/skills-fallback.test.ts +1 -1
  409. package/dist/extensions/pi-subagents/test/unit/stale-run-reconciler.test.ts +12 -1
  410. package/dist/extensions/pi-subagents/test/unit/steering-action.test.ts +3 -5
  411. package/dist/extensions/pi-subagents/test/unit/steering.test.ts +5 -6
  412. package/dist/extensions/pi-subagents/test/unit/subagent-action-recovery.test.ts +0 -8
  413. package/dist/extensions/pi-subagents/test/unit/subagent-guide.test.ts +5 -0
  414. package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +157 -2
  415. package/dist/extensions/pi-subagents/test/unit/subagent-startup-retry.test.ts +1 -1
  416. package/dist/extensions/pi-subagents/test/unit/subagent-wait.test.ts +63 -4
  417. package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +27 -23
  418. package/dist/extensions/pi-subagents/test/unit/wait-completions.test.ts +44 -0
  419. package/dist/extensions/pi-subagents/test/unit/wait-subscriptions.test.ts +1 -0
  420. package/dist/extensions/pi-subagents/test/unit/widget-nested-render.test.ts +7 -5
  421. package/dist/extensions/pi-subagents/test/unit/workflow-chat-progress.test.ts +106 -0
  422. package/dist/extensions/pi-subagents/test/unit/workflow-detach-reconcile.test.ts +484 -9
  423. package/dist/extensions/pi-subagents/test/unit/workflow-launch-params.test.ts +38 -4
  424. package/dist/extensions/pi-subagents/test/unit/workflow-preflight.test.ts +155 -0
  425. package/dist/extensions/pi-subagents/test/unit/workflow-receipt.test.ts +318 -0
  426. package/dist/extensions/pi-subagents/test/unit/workflow-resume-hint.test.ts +365 -0
  427. package/dist/extensions/pi-subagents/test/unit/worktree-cleanup-plan.test.ts +349 -0
  428. package/dist/extensions/pi-subagents/test/unit/worktree.test.ts +21 -0
  429. package/dist/extensions/pi-subagents/test/unit/writer-budget-guidance.test.ts +2 -7
  430. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/effect/index.ts +13 -0
  431. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/effect/rules/no-service-constructor-imports.ts +52 -0
  432. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/index.ts +41 -0
  433. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-chained-type-assertions.ts +77 -0
  434. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-conditional-empty-object-spread.ts +49 -0
  435. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-known-value-widening.ts +247 -0
  436. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-module-mocking.ts +91 -0
  437. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-object-parameters.ts +126 -0
  438. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-reflect-apply.ts +28 -0
  439. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-reflect-get.ts +28 -0
  440. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-runtime-typeof.ts +67 -0
  441. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-shape-in-symbol-names.ts +39 -0
  442. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-unknown-parameters.ts +83 -0
  443. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-unknown-returns.ts +115 -0
  444. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-unknown-type-aliases.ts +72 -0
  445. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-unsafe-dictionary-type.ts +134 -0
  446. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/no-widen-then-assert.ts +366 -0
  447. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/rules/require-safety-comment-for-type-assertion.ts +62 -0
  448. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/shared/dictionary-types.ts +502 -0
  449. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/shared/lexical-type-parameters.ts +60 -0
  450. package/dist/extensions/pi-subagents/tools/oxlint/anti-slop/shared/reflect-method.ts +35 -0
  451. package/dist/extensions/pi-tool-display/tests/capabilities.test.ts +1 -1
  452. package/dist/extensions/pi-tool-display/tests/settings-inspector.test.ts +2 -2
  453. package/dist/extensions/pi-tool-display/tests/tool-overrides-mcp.test.ts +1 -1
  454. package/dist/modes/interactive/interactive-mode.js +7 -7
  455. package/dist/skills/workflow/SKILL.md +65 -50
  456. package/package.json +112 -110
  457. package/dist/extensions/enable-readonly-tools.test.ts +0 -63
  458. package/dist/extensions/enable-readonly-tools.ts +0 -24
  459. package/dist/extensions/model-prompt-injector/config.json +0 -16
  460. package/dist/extensions/model-prompt-injector/index.test.ts +0 -102
  461. package/dist/extensions/model-prompt-injector/index.ts +0 -148
  462. package/dist/extensions/pi-subagents/src/runs/shared/turn-budget.ts +0 -98
  463. package/dist/extensions/pi-subagents/test/unit/turn-budget.test.ts +0 -250
@@ -0,0 +1,160 @@
1
+ # v0.4 Plan: SQLite FTS5 Session Search + Hybrid Memory
2
+
3
+ ## Problem
4
+
5
+ The current memory architecture has two scaling bottlenecks:
6
+
7
+ 1. **Memory capacity**: MEMORY.md is capped at 2,200 chars. Power users accumulate knowledge faster than consolidation can manage. Important facts get pruned.
8
+ 2. **No session history search**: Past conversations are stored as JSONL files in `~/.selesai/agent/sessions/<project>/`, but there's no way to search them. When the agent needs context from a previous session, it's gone forever.
9
+
10
+ ## Solution: Hybrid Memory Architecture
11
+
12
+ ### Core memory (always injected, unchanged)
13
+ - `MEMORY.md` — 5,000 chars (up from 2,200)
14
+ - `USER.md` — 5,000 chars (up from 1,375)
15
+ - Still injected into every session via `<memory-context>` tags
16
+ - Still human-readable, still editable
17
+
18
+ ### Extended memory (SQLite, searchable on demand)
19
+ - `~/.selesai/agent/memory/sessions.db`
20
+ - `memories` table — unlimited entries, searchable via FTS5
21
+ - Agent uses `memory_search` tool to query when it needs context
22
+ - Not automatically injected — agent must explicitly search
23
+
24
+ ### Session history (SQLite, searchable on demand)
25
+ - Same `sessions.db` file
26
+ - `sessions` + `messages` tables — all past conversations indexed
27
+ - `session_fts` FTS5 index — full-text search across all sessions
28
+ - Agent uses `session_search` tool to find relevant past context
29
+
30
+ ## Architecture
31
+
32
+ ```
33
+ Session starts
34
+ ↓
35
+ ┌─────────────────────────────────────────────────┐
36
+ │ System Prompt (always injected) │
37
+ │ ┌─────────────────────────────────────────────┐ │
38
+ │ │ <memory-context> │ │
39
+ │ │ MEMORY (your personal notes) [5,000 chars] │ │
40
+ │ │ ═══ END MEMORY ═══ │ │
41
+ │ │ </memory-context> │ │
42
+ │ │ <memory-context> │ │
43
+ │ │ USER PROFILE [5,000 chars] │ │
44
+ │ │ ═══ END MEMORY ═══ │ │
45
+ │ │ </memory-context> │ │
46
+ │ │ <memory-context> │ │
47
+ │ │ PROJECT MEMORY [5,000 chars] │ │
48
+ │ │ ═══ END MEMORY ═══ │ │
49
+ │ │ </memory-context> │ │
50
+ │ └─────────────────────────────────────────────┘ │
51
+ └─────────────────────────────────────────────────┘
52
+
53
+ Agent has access to tools:
54
+ memory_search("prisma migration")
55
+ → Searches memories table (global + project)
56
+ → Returns top-10 relevant entries
57
+
58
+ session_search("how we fixed the test hang")
59
+ → Searches session history via FTS5
60
+ → Returns relevant conversation snippets
61
+ ```
62
+
63
+ ## Data Model
64
+
65
+ ```sql
66
+ -- Session metadata
67
+ CREATE TABLE sessions (
68
+ id TEXT PRIMARY KEY, -- UUID from JSONL
69
+ project TEXT NOT NULL, -- decoded cwd path
70
+ started_at TEXT NOT NULL, -- ISO timestamp
71
+ ended_at TEXT, -- ISO timestamp (null if still running)
72
+ message_count INTEGER DEFAULT 0
73
+ );
74
+
75
+ -- All messages from all sessions
76
+ CREATE TABLE messages (
77
+ id TEXT PRIMARY KEY, -- message ID from JSONL
78
+ session_id TEXT NOT NULL REFERENCES sessions(id),
79
+ role TEXT NOT NULL, -- 'user', 'assistant', 'system'
80
+ content TEXT NOT NULL, -- extracted text content
81
+ timestamp TEXT NOT NULL, -- ISO timestamp
82
+ tool_calls TEXT -- JSON array of tool call names (for assistant messages)
83
+ );
84
+
85
+ -- FTS5 index for full-text search across messages
86
+ CREATE VIRTUAL TABLE message_fts USING fts5(
87
+ content,
88
+ content='messages',
89
+ content_rowid='rowid'
90
+ );
91
+
92
+ -- Extended memory entries (beyond MEMORY.md limit)
93
+ CREATE TABLE memories (
94
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
95
+ project TEXT, -- NULL for global, project name for project-specific
96
+ target TEXT NOT NULL, -- 'memory' or 'user'
97
+ content TEXT NOT NULL,
98
+ created DATE NOT NULL,
99
+ last_referenced DATE NOT NULL
100
+ );
101
+
102
+ -- FTS5 index for memory search
103
+ CREATE VIRTUAL TABLE memory_fts USING fts5(
104
+ content,
105
+ content='memories',
106
+ content_rowid='id'
107
+ );
108
+ ```
109
+
110
+ ## Key Design Decisions
111
+
112
+ ### 1. Session indexing is lazy (on session end)
113
+ - Don't parse JSONL files on every startup
114
+ - Index a session when `session_shutdown` fires
115
+ - Bulk import existing sessions via `/memory-index-sessions` command
116
+
117
+ ### 2. FTS5 for both memories and sessions
118
+ - Keyword search is sufficient for v0.4
119
+ - Embeddings deferred to v0.5+ if search quality isn't enough
120
+ - `better-sqlite3` includes FTS5 by default
121
+
122
+ ### 3. Single DB file
123
+ - `~/.selesai/agent/memory/sessions.db` stores everything
124
+ - Memories + sessions + FTS indices in one file
125
+ - Simple backup (copy one file), simple cleanup
126
+
127
+ ### 4. Agent-driven search
128
+ - `memory_search` and `session_search` are LLM tools
129
+ - Agent decides when to search (not automatic)
130
+ - Avoids injecting irrelevant context into every session
131
+
132
+ ### 5. Char limit increase to 5,000
133
+ - MEMORY.md: 2,200 → 5,000 chars
134
+ - USER.md: 1,375 → 5,000 chars
135
+ - Project MEMORY.md: 2,200 → 5,000 chars
136
+ - More room for core memories before consolidation kicks in
137
+
138
+ ## Dependencies
139
+
140
+ | Package | Purpose | Size |
141
+ |---|---|---|
142
+ | `better-sqlite3` | SQLite with FTS5 | ~1MB native addon |
143
+
144
+ ## Risks
145
+
146
+ | Risk | Mitigation |
147
+ |---|---|
148
+ | `better-sqlite3` is a native C++ addon | Standard for dev tools; CI has build tools |
149
+ | FTS5 search quality | Start with keyword search, add embeddings later if needed |
150
+ | Session JSONL format changes | Parse defensively, skip unknown message types |
151
+ | Large session history (1000+ sessions) | FTS5 handles this well; add pagination to results |
152
+ | DB corruption | Atomic writes, WAL mode, backup before migrations |
153
+
154
+ ## Success Criteria
155
+
156
+ 1. `session_search("prisma migration")` returns relevant conversation snippets from past sessions
157
+ 2. `memory_search("auth setup")` returns relevant entries from extended memory store
158
+ 3. MEMORY.md limit raised to 5,000 chars without breaking existing functionality
159
+ 4. Existing session files indexed without data loss
160
+ 5. All tests pass, zero regressions
@@ -0,0 +1,113 @@
1
+ # v0.4 Tasks: SQLite FTS5 Session Search + Hybrid Memory
2
+
3
+ ## Status Legend
4
+ - `[ ]` Not started
5
+ - `[~]` In progress
6
+ - `[x]` Done
7
+
8
+ ---
9
+
10
+ ## Epic 1: SQLite Foundation ✅
11
+
12
+ ### Task 1.1: Install better-sqlite3 and create DB module
13
+ - [x] Install `better-sqlite3` + `@types/better-sqlite3`
14
+ - [x] Create `src/store/db.ts` — DatabaseManager class
15
+ - [x] Create `tests/store/db.test.ts` — 14 tests passing
16
+
17
+ ### Task 1.2: Create schema and migrations
18
+ - [x] Define schema in `src/store/schema.ts`
19
+ - [x] Add triggers to keep FTS index in sync
20
+ - [x] Test: schema creates cleanly on fresh DB, idempotent on existing DB
21
+
22
+ ---
23
+
24
+ ## Epic 2: Session History Indexing ✅
25
+
26
+ ### Task 2.1: JSONL parser
27
+ - [x] Create `src/store/session-parser.ts`
28
+ - [x] Create `tests/store/session-parser.test.ts` — 14 tests passing
29
+
30
+ ### Task 2.2: Session indexer
31
+ - [x] Create `src/store/session-indexer.ts`
32
+ - [x] Create `tests/store/session-indexer.test.ts` — 12 tests passing
33
+
34
+ ### Task 2.3: /memory-index-sessions command
35
+ - [x] Create `src/handlers/index-sessions.ts`
36
+ - [x] Wire into `src/index.ts`
37
+
38
+ ---
39
+
40
+ ## Epic 3: Session Search ✅
41
+
42
+ ### Task 3.1: Session search store
43
+ - [x] Create `src/store/session-search.ts` — FTS5 search
44
+ - [x] Create `tests/store/session-search.test.ts` — 11 tests passing
45
+
46
+ ### Task 3.2: session_search tool
47
+ - [x] Create `src/tools/session-search-tool.ts`
48
+ - [x] Register in `src/index.ts`
49
+
50
+ ---
51
+
52
+ ## Epic 4: Extended Memory Store ✅
53
+
54
+ ### Task 4.1: SQLite memory store
55
+ - [x] Create `src/store/sqlite-memory-store.ts`
56
+ - [x] Create `tests/store/sqlite-memory-store.test.ts` — 19 tests passing
57
+
58
+ ### Task 4.2: memory_search tool
59
+ - [x] Create `src/tools/memory-search-tool.ts`
60
+ - [x] Register in `src/index.ts`
61
+
62
+ ---
63
+
64
+ ## Epic 5: Char Limit Increase ✅
65
+
66
+ ### Task 5.1: Update defaults
67
+ - [x] Update `src/constants.ts` — 5000 defaults
68
+ - [x] Update `src/types.ts` — updated comments
69
+ - [x] Update README configuration table
70
+
71
+ ### Task 5.2: Update tests
72
+ - [x] Updated all tests that depend on char limits
73
+ - [x] Verified consolidation still works at new limits
74
+
75
+ ---
76
+
77
+ ## Epic 6: Integration & Polish ✅
78
+
79
+ ### Task 6.1: Wire everything into index.ts
80
+ - [x] Initialize DatabaseManager on extension load
81
+ - [x] Register `session_search` and `memory_search` tools
82
+ - [x] Register `/memory-index-sessions` command
83
+ - [x] Auto-index session on `session_shutdown` event
84
+
85
+ ### Task 6.2: Add session indexing to background review
86
+ - [x] Auto-index on session_shutdown (indexes most recent session)
87
+
88
+ ### Task 6.3: Update README
89
+ - [x] Added session history search and extended memory sections
90
+ - [x] Updated char limits: 2200/1375 → 5000
91
+ - [x] Updated configuration table and JSON example
92
+ - [x] Updated Where Data Lives with sessions.db
93
+ - [x] Updated Known Limitations
94
+
95
+ ### Task 6.4: Version bump & release
96
+ - [x] Bump version to `0.4.0`
97
+ - [x] Run full test suite — 272 tests passing
98
+ - [x] Publish to npm
99
+ - [x] Create GitHub release
100
+
101
+ ---
102
+
103
+ ## Summary
104
+
105
+ | Epic | Files Created | Tests |
106
+ |---|---|---|
107
+ | 1. SQLite Foundation | db.ts, schema.ts | 14 |
108
+ | 2. Session Indexing | session-parser.ts, session-indexer.ts, index-sessions.ts | 26 |
109
+ | 3. Session Search | session-search.ts, session-search-tool.ts | 11 |
110
+ | 4. Extended Memory | sqlite-memory-store.ts, memory-search-tool.ts | 19 |
111
+ | 5. Char Limits | constants.ts, types.ts | — |
112
+ | 6. Integration | index.ts, README.md, learn-memory-tool skill | — |
113
+ | **Total** | **12 new files** | **272 tests** |
@@ -0,0 +1,57 @@
1
+ # v0.6.6 Changelog
2
+
3
+ ## Bug Fixes
4
+
5
+ ### Fix legacy SQLite upgrade error: `no such column: category`
6
+
7
+ Some users upgrading from older versions had an existing `sessions.db` with a legacy
8
+ `memories` table that did not include v0.6 failure-memory columns. During schema init,
9
+ creating `idx_memories_category` failed and `/memory-index-sessions` crashed with:
10
+
11
+ `❌ Session indexing failed: no such column: category`
12
+
13
+ Fix:
14
+
15
+ - Added automatic legacy schema migration in `DatabaseManager`
16
+ - Detects missing `memories` columns and adds them idempotently:
17
+ - `category`
18
+ - `failure_reason`
19
+ - `tool_state`
20
+ - `corrected_to`
21
+ - Retries schema initialization after migration
22
+ - Added regression test: `should migrate legacy memories table without category column`
23
+
24
+ ---
25
+
26
+ # v0.6.5 Changelog
27
+
28
+ ## Bug Fixes
29
+
30
+ ### Auto-review no longer blocks interactive chat (#10)
31
+
32
+ The background auto-review was `await`ing `pi.exec()` inside the `turn_end` handler, which
33
+ blocked the chat from responding while the review subprocess ran. Fixed by making the
34
+ review subprocess fire-and-forget — the turn_end handler returns immediately, and the
35
+ subprocess completes asynchronously.
36
+
37
+ - `pi.exec()` is no longer awaited — handler returns immediately
38
+ - `reviewInProgress` guard resets in `.then()` / `.catch()` callbacks
39
+ - Overlapping reviews are still prevented by the guard
40
+ - Notifications are delivered via `.then()` callback once the subprocess completes
41
+
42
+ ### Auto-review failures on Windows no longer show errors (#9)
43
+
44
+ On Windows git-bash, `pi exec` subprocesses could exit with code 1 producing
45
+ `[hermes] auto-review failed (exit=1): unknown error` messages every few turns. Fixed by
46
+ making auto-review truly best-effort — non-zero exit codes and spawn errors are silently
47
+ ignored.
48
+
49
+ - Suppressed error notifications for non-zero exit codes
50
+ - Suppressed error notifications for subprocess failures (timeout, signal, spawn)
51
+ - The next review cycle will retry automatically
52
+
53
+ ### Crash safety
54
+
55
+ - Snapshot-building code (`getBranch()`, message parsing) is wrapped in a minimal try/catch
56
+ to handle expired sessions gracefully
57
+ - Early return resets `reviewInProgress` guard to unblock future reviews
@@ -0,0 +1,202 @@
1
+ # v0.5 Plan: Failure Memory + Categories + Provenance
2
+
3
+ ## Overview
4
+
5
+ Track **failures, corrections, and insights** as first-class memories with full provenance and category labels. Learn from failures like humans do.
6
+
7
+ ## Motivation
8
+
9
+ From X/Twitter feedback:
10
+ > "Memory gets much more useful when it stores failures, not just conversations. I'd want every recalled session to carry provenance: source, timestamp, tool state, and whether the old answer survived contact with reality."
11
+
12
+ ## Key Features
13
+
14
+ ### 1. Memory Categories
15
+
16
+ Add category labels to differentiate memory types:
17
+
18
+ | Category | What It Is | Example |
19
+ |---|---|---|
20
+ | `failure` | What didn't work | "Tried localStorage for tokens — XSS risk" |
21
+ | `correction` | User corrected the agent | "Use pnpm, not npm" |
22
+ | `insight` | Learning from experience | "Auth0 SDK handles refresh tokens automatically" |
23
+ | `preference` | User preference | "Prefers dark theme" |
24
+ | `convention` | Project convention | "Monorepo uses turborepo" |
25
+ | `tool-quirk` | Tool-specific knowledge | "CI needs --frozen-lockfile" |
26
+
27
+ ### 2. Failure Memory Structure
28
+
29
+ ```typescript
30
+ interface FailureMemory {
31
+ category: 'failure' | 'correction' | 'insight' | 'preference' | 'convention' | 'tool-quirk';
32
+ content: string; // What was tried / what happened
33
+ failure_reason?: string; // Why it failed (for failures)
34
+ tool_state?: string; // Relevant tool state (error message, output)
35
+ corrected_to?: string; // What worked instead (if known)
36
+ project: string; // Which project
37
+ session_id?: string; // Which session
38
+ timestamp: string; // When it happened
39
+ }
40
+ ```
41
+
42
+ ### 3. Auto-Detect Failures
43
+
44
+ Detect failures from:
45
+ - **Explicit corrections**: "that didn't work", "use X instead", "no, do it this way"
46
+ - **Error messages**: stderr output, test failures, build errors
47
+ - **Agent retries**: When the agent tries multiple approaches
48
+ - **User feedback**: "this is wrong", "that's not right"
49
+
50
+ ### 4. Failure Injection into System Prompt
51
+
52
+ Inject relevant recent failures into the system prompt at session start:
53
+
54
+ ```
55
+ <memory-context>
56
+ RECENT FAILURES & LESSONS (learn from these):
57
+ • [failure] Tried: localStorage for JWT tokens — Failed: XSS vulnerability
58
+ → Corrected to: httpOnly cookies with SameSite=Strict
59
+ • [correction] Use pnpm, not npm (corrected 2 days ago)
60
+ • [insight] Auth0 SDK handles refresh tokens automatically — no manual implementation needed
61
+ ═══ END MEMORY ═══
62
+ </memory-context>
63
+ ```
64
+
65
+ **Injection rules:**
66
+ - Only inject failures from last 7 days
67
+ - Only inject failures relevant to current project (or global)
68
+ - Max 5 failure entries to avoid prompt bloat
69
+ - Separate `<memory-context>` block from regular memory
70
+
71
+ ### 5. Search with Categories
72
+
73
+ Update `memory_search` tool to support category filtering:
74
+
75
+ ```
76
+ memory_search("auth", category: "failure") → Past auth failures
77
+ memory_search("deploy", category: "convention") → Deploy conventions
78
+ memory_search("typescript", category: "tool-quirk") → TS tool quirks
79
+ ```
80
+
81
+ ### 6. Store Failures in SQLite
82
+
83
+ Failures stored in `memories` table with `target: 'failure'`:
84
+
85
+ ```sql
86
+ -- New target type
87
+ target TEXT CHECK (target IN ('memory', 'user', 'failure'))
88
+
89
+ -- Content stored as JSON with category
90
+ {
91
+ "category": "failure",
92
+ "content": "Tried localStorage for JWT tokens",
93
+ "failure_reason": "XSS vulnerability - tokens accessible via JS",
94
+ "tool_state": "Error: Token exposed in browser console",
95
+ "corrected_to": "httpOnly cookies with SameSite=Strict",
96
+ "project": "my-app",
97
+ "timestamp": "2026-05-03T10:30:00Z"
98
+ }
99
+ ```
100
+
101
+ ### 7. Update Background Review Prompt
102
+
103
+ Enhance the background review prompt to extract failures:
104
+
105
+ ```
106
+ Review this conversation and extract:
107
+
108
+ 1. FAILURES: What was tried but didn't work?
109
+ - What was attempted
110
+ - Why it failed
111
+ - What error occurred
112
+ - What worked instead (if found)
113
+
114
+ 2. CORRECTIONS: Did the user correct the agent?
115
+ - What was wrong
116
+ - What is correct
117
+
118
+ 3. INSIGHTS: What was learned?
119
+ - New knowledge about tools, APIs, patterns
120
+ - Project-specific learnings
121
+
122
+ 4. CONVENTIONS: Any project conventions discovered?
123
+ - Coding style, naming, patterns
124
+ - Tool preferences
125
+ ```
126
+
127
+ ## Architecture Changes
128
+
129
+ ### Memory Store (`src/store/memory-store.ts`)
130
+
131
+ ```typescript
132
+ // Add to MemoryStore class
133
+ addFailure(content: string, options: {
134
+ category: MemoryCategory;
135
+ failureReason?: string;
136
+ toolState?: string;
137
+ correctedTo?: string;
138
+ }): void;
139
+
140
+ getFailureEntries(): string[]; // Returns recent failures for injection
141
+ ```
142
+
143
+ ### SQLite Memory Store (`src/store/sqlite-memory-store.ts`)
144
+
145
+ ```typescript
146
+ // Update searchMemories to support category filter
147
+ searchMemories(db, query, { project, target, category, limit })
148
+ ```
149
+
150
+ ### Memory Search Tool (`src/tools/memory-search-tool.ts`)
151
+
152
+ ```typescript
153
+ // Add category parameter
154
+ category: Type.Optional(StringEnum([
155
+ 'failure', 'correction', 'insight', 'preference', 'convention', 'tool-quirk'
156
+ ] as const, { description: 'Filter by memory category.' }))
157
+ ```
158
+
159
+ ### Background Review (`src/handlers/background-review.ts`)
160
+
161
+ - Extract failures during review
162
+ - Store with category labels
163
+ - Include failure context in review prompt
164
+
165
+ ### Correction Detector (`src/handlers/correction-detector.ts`)
166
+
167
+ - Extract failure context when correction detected
168
+ - Store what was wrong + what is correct
169
+
170
+ ### System Prompt Injection (`src/index.ts`)
171
+
172
+ - Add separate `<memory-context>` block for failures
173
+ - Inject only recent (7 days) and relevant (project match)
174
+ - Max 5 entries
175
+
176
+ ## Files to Change
177
+
178
+ | File | Change |
179
+ |---|---|
180
+ | `src/types.ts` | Add `MemoryCategory` type |
181
+ | `src/constants.ts` | Update review prompt for failure extraction |
182
+ | `src/store/memory-store.ts` | Add `addFailure()`, `getFailureEntries()` |
183
+ | `src/store/sqlite-memory-store.ts` | Add category support to search |
184
+ | `src/tools/memory-search-tool.ts` | Add category parameter |
185
+ | `src/handlers/background-review.ts` | Extract failures during review |
186
+ | `src/handlers/correction-detector.ts` | Store failure context on corrections |
187
+ | `src/index.ts` | Inject failure memories into system prompt |
188
+ | `tests/store/memory-store.test.ts` | Test failure storage |
189
+ | `tests/store/sqlite-memory-store.test.ts` | Test category search |
190
+ | `tests/tools/memory-search-tool.test.ts` | Test category parameter |
191
+
192
+ ## Complexity Assessment
193
+
194
+ - **Effort**: Medium (2-3 hours)
195
+ - **Risk**: Low (additive, no breaking changes)
196
+ - **Tests**: ~15 new tests
197
+
198
+ ## Migration
199
+
200
+ - Existing memories get `category: null` (no migration needed)
201
+ - New memories get category assigned
202
+ - Search works with or without category filter
@@ -0,0 +1,144 @@
1
+ # v0.5 Tasks: Failure Memory + Categories + Provenance
2
+
3
+ ## Status Legend
4
+ - `[ ]` Not started
5
+ - `[~]` In progress
6
+ - `[x]` Done
7
+
8
+ ---
9
+
10
+ ## Epic 1: Category Types & Schema
11
+
12
+ ### Task 1.1: Add MemoryCategory type
13
+ - [ ] Add `MemoryCategory` type to `src/types.ts`
14
+ - [ ] Categories: `failure`, `correction`, `insight`, `preference`, `convention`, `tool-quirk`
15
+
16
+ ### Task 1.2: Update SQLite schema
17
+ - [ ] Update `src/store/schema.ts` — add `category` column to memories table
18
+ - [ ] Add index on category for faster filtering
19
+
20
+ ---
21
+
22
+ ## Epic 2: Failure Memory Store
23
+
24
+ ### Task 2.1: Update MemoryStore
25
+ - [ ] Add `addFailure()` method to `src/store/memory-store.ts`
26
+ - [ ] Store failures in MEMORY.md with category metadata
27
+ - [ ] Add `getFailureEntries()` to retrieve recent failures (last 7 days)
28
+ - [ ] Update `formatForSystemPrompt()` to include failure section
29
+
30
+ ### Task 2.2: Update SQLite Memory Store
31
+ - [ ] Add category support to `src/store/sqlite-memory-store.ts`
32
+ - [ ] Update `addMemory()` to accept category
33
+ - [ ] Update `searchMemories()` to filter by category
34
+ - [ ] Add `getRecentFailures()` method
35
+
36
+ ### Task 2.3: Tests
37
+ - [ ] Test `addFailure()` in `tests/store/memory-store.test.ts`
38
+ - [ ] Test category filtering in `tests/store/sqlite-memory-store.test.ts`
39
+ - [ ] Test `getRecentFailures()` returns only last 7 days
40
+
41
+ ---
42
+
43
+ ## Epic 3: Failure Detection
44
+
45
+ ### Task 3.1: Update Correction Detector
46
+ - [ ] Update `src/handlers/correction-detector.ts`
47
+ - [ ] Extract failure context when correction detected
48
+ - [ ] Store: what was wrong, what is correct, category
49
+
50
+ ### Task 3.2: Update Background Review Prompt
51
+ - [ ] Update `src/constants.ts` — enhance `CONSOLIDATION_PROMPT`
52
+ - [ ] Add failure extraction instructions
53
+ - [ ] Prompt to categorize findings (failure, correction, insight, etc.)
54
+
55
+ ### Task 3.3: Auto-Detect Failures in Conversation
56
+ - [ ] Add failure pattern detection in `src/handlers/background-review.ts`
57
+ - [ ] Detect: "that didn't work", "use X instead", error messages
58
+ - [ ] Store failures with `tool_state` (error output)
59
+
60
+ ### Task 3.4: Tests
61
+ - [ ] Test failure detection in `tests/handlers/correction-detector.test.ts`
62
+ - [ ] Test failure extraction in `tests/handlers/background-review.test.ts`
63
+
64
+ ---
65
+
66
+ ## Epic 4: Failure Injection
67
+
68
+ ### Task 4.1: Update System Prompt Injection
69
+ - [ ] Update `src/index.ts` — add failure memory block
70
+ - [ ] Separate `<memory-context>` block for failures
71
+ - [ ] Only inject recent (7 days) and relevant (project match)
72
+ - [ ] Max 5 failure entries
73
+
74
+ ### Task 4.2: Failure Injection Format
75
+ - [ ] Format:
76
+ ```
77
+ RECENT FAILURES & LESSONS (learn from these):
78
+ • [failure] Tried: X — Failed: Y → Corrected to: Z
79
+ • [correction] Use X, not Y (corrected N days ago)
80
+ • [insight] Learned: X
81
+ ```
82
+
83
+ ### Task 4.3: Tests
84
+ - [ ] Test failure injection in `tests/handlers/system-prompt.test.ts`
85
+ - [ ] Test: only recent failures injected
86
+ - [ ] Test: max 5 entries enforced
87
+
88
+ ---
89
+
90
+ ## Epic 5: Search with Categories
91
+
92
+ ### Task 5.1: Update Memory Search Tool
93
+ - [ ] Update `src/tools/memory-search-tool.ts`
94
+ - [ ] Add `category` parameter using `StringEnum`
95
+ - [ ] Categories: `failure`, `correction`, `insight`, `preference`, `convention`, `tool-quirk`
96
+
97
+ ### Task 5.2: Update Search Implementation
98
+ - [ ] Update `src/store/sqlite-memory-store.ts` — `searchMemories()`
99
+ - [ ] Filter by category when provided
100
+ - [ ] Include category in search results
101
+
102
+ ### Task 5.3: Tests
103
+ - [ ] Test category search in `tests/store/sqlite-memory-store.test.ts`
104
+ - [ ] Test: `memory_search("auth", category: "failure")` returns failures only
105
+
106
+ ---
107
+
108
+ ## Epic 6: Integration & Polish
109
+
110
+ ### Task 6.1: Wire Everything Together
111
+ - [ ] Update `src/index.ts` — ensure all components work together
112
+ - [ ] Test end-to-end flow: detect → store → inject → search
113
+
114
+ ### Task 6.2: Update README
115
+ - [ ] Add "Learning from Failures" section
116
+ - [ ] Document categories and how they work
117
+ - [ ] Add examples of failure memory
118
+
119
+ ### Task 6.3: Version Bump
120
+ - [ ] Bump to `0.5.5`
121
+ - [ ] Run full test suite
122
+ - [ ] Publish to npm
123
+
124
+ ---
125
+
126
+ ## Summary
127
+
128
+ | Epic | Files Changed | Tests |
129
+ |---|---|---|
130
+ | 1. Category Types | types.ts, schema.ts | 2 |
131
+ | 2. Failure Store | memory-store.ts, sqlite-memory-store.ts | 6 |
132
+ | 3. Failure Detection | correction-detector.ts, background-review.ts, constants.ts | 4 |
133
+ | 4. Failure Injection | index.ts | 3 |
134
+ | 5. Category Search | memory-search-tool.ts, sqlite-memory-store.ts | 3 |
135
+ | 6. Integration | index.ts, README.md | — |
136
+ | **Total** | **8 files** | **~18 tests** |
137
+
138
+ ## Implementation Order
139
+
140
+ ```
141
+ Epic 1 (Types) → Epic 2 (Store) → Epic 3 (Detection) → Epic 4 (Injection) → Epic 5 (Search) → Epic 6 (Polish)
142
+ ```
143
+
144
+ Each epic builds on the previous one. Epics 3-5 can be done in parallel after Epic 2.