@caupulican/pi-adaptative 0.94.0 → 0.95.0

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 (371) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/dist/bundled-resources/extensions/tmux-agent-manager/README.md +32 -13
  3. package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts +7 -4
  4. package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts.map +1 -1
  5. package/dist/bundled-resources/extensions/tmux-agent-manager/index.js +173 -293
  6. package/dist/bundled-resources/extensions/tmux-agent-manager/index.js.map +1 -1
  7. package/dist/bundled-resources/extensions/tmux-agent-manager/index.ts +247 -392
  8. package/dist/bundled-resources/extensions/tmux-agent-manager/launch-profile.d.ts +52 -0
  9. package/dist/bundled-resources/extensions/tmux-agent-manager/launch-profile.d.ts.map +1 -0
  10. package/dist/bundled-resources/extensions/tmux-agent-manager/launch-profile.js +118 -0
  11. package/dist/bundled-resources/extensions/tmux-agent-manager/launch-profile.js.map +1 -0
  12. package/dist/bundled-resources/extensions/tmux-agent-manager/launch-profile.ts +169 -0
  13. package/dist/bundled-resources/extensions/tmux-agent-manager/templates/builder-validator.json +1 -1
  14. package/dist/bundled-resources/extensions/tmux-agent-manager/templates/provider-prompt-smoke.json +1 -1
  15. package/dist/bundled-resources/skills/pi-harness-learning/SKILL.md +13 -7
  16. package/dist/bundled-resources/skills/worker-profile-writer/SKILL.md +11 -11
  17. package/dist/core/agent-paths.d.ts +2 -0
  18. package/dist/core/agent-paths.d.ts.map +1 -1
  19. package/dist/core/agent-paths.js +7 -0
  20. package/dist/core/agent-paths.js.map +1 -1
  21. package/dist/core/agent-session.d.ts +11 -41
  22. package/dist/core/agent-session.d.ts.map +1 -1
  23. package/dist/core/agent-session.js +98 -161
  24. package/dist/core/agent-session.js.map +1 -1
  25. package/dist/core/autonomy/envelope-enforcement.d.ts +6 -1
  26. package/dist/core/autonomy/envelope-enforcement.d.ts.map +1 -1
  27. package/dist/core/autonomy/envelope-enforcement.js +26 -25
  28. package/dist/core/autonomy/envelope-enforcement.js.map +1 -1
  29. package/dist/core/autonomy/lane-private-paths.d.ts.map +1 -1
  30. package/dist/core/autonomy/lane-private-paths.js +2 -1
  31. package/dist/core/autonomy/lane-private-paths.js.map +1 -1
  32. package/dist/core/autonomy/lane-tool-surface.d.ts +8 -8
  33. package/dist/core/autonomy/lane-tool-surface.d.ts.map +1 -1
  34. package/dist/core/autonomy/lane-tool-surface.js +45 -30
  35. package/dist/core/autonomy/lane-tool-surface.js.map +1 -1
  36. package/dist/core/autonomy/worker-session-private-scope.d.ts +12 -0
  37. package/dist/core/autonomy/worker-session-private-scope.d.ts.map +1 -0
  38. package/dist/core/autonomy/worker-session-private-scope.js +42 -0
  39. package/dist/core/autonomy/worker-session-private-scope.js.map +1 -0
  40. package/dist/core/autonomy/worker-tool-adapter-registry.d.ts +65 -0
  41. package/dist/core/autonomy/worker-tool-adapter-registry.d.ts.map +1 -0
  42. package/dist/core/autonomy/worker-tool-adapter-registry.js +145 -0
  43. package/dist/core/autonomy/worker-tool-adapter-registry.js.map +1 -0
  44. package/dist/core/background-lane-controller.d.ts +9 -1
  45. package/dist/core/background-lane-controller.d.ts.map +1 -1
  46. package/dist/core/background-lane-controller.js +76 -6
  47. package/dist/core/background-lane-controller.js.map +1 -1
  48. package/dist/core/background-tool-task-controller.d.ts +23 -2
  49. package/dist/core/background-tool-task-controller.d.ts.map +1 -1
  50. package/dist/core/background-tool-task-controller.js +132 -17
  51. package/dist/core/background-tool-task-controller.js.map +1 -1
  52. package/dist/core/context/long-term-memory-trigger.d.ts +3 -1
  53. package/dist/core/context/long-term-memory-trigger.d.ts.map +1 -1
  54. package/dist/core/context/long-term-memory-trigger.js +1 -1
  55. package/dist/core/context/long-term-memory-trigger.js.map +1 -1
  56. package/dist/core/context/okf-memory-provider.d.ts +3 -0
  57. package/dist/core/context/okf-memory-provider.d.ts.map +1 -1
  58. package/dist/core/context/okf-memory-provider.js +66 -31
  59. package/dist/core/context/okf-memory-provider.js.map +1 -1
  60. package/dist/core/context/okf-memory.d.ts +18 -1
  61. package/dist/core/context/okf-memory.d.ts.map +1 -1
  62. package/dist/core/context/okf-memory.js +48 -0
  63. package/dist/core/context/okf-memory.js.map +1 -1
  64. package/dist/core/cost-guard-controller.d.ts +37 -0
  65. package/dist/core/cost-guard-controller.d.ts.map +1 -0
  66. package/dist/core/cost-guard-controller.js +71 -0
  67. package/dist/core/cost-guard-controller.js.map +1 -0
  68. package/dist/core/cost-guard.d.ts +9 -4
  69. package/dist/core/cost-guard.d.ts.map +1 -1
  70. package/dist/core/cost-guard.js +7 -3
  71. package/dist/core/cost-guard.js.map +1 -1
  72. package/dist/core/delegation/worker-agent-control.d.ts +4 -0
  73. package/dist/core/delegation/worker-agent-control.d.ts.map +1 -1
  74. package/dist/core/delegation/worker-agent-control.js.map +1 -1
  75. package/dist/core/delegation/worker-attempt-executor.d.ts +1 -1
  76. package/dist/core/delegation/worker-attempt-executor.d.ts.map +1 -1
  77. package/dist/core/delegation/worker-attempt-executor.js +0 -1
  78. package/dist/core/delegation/worker-attempt-executor.js.map +1 -1
  79. package/dist/core/delegation/worker-authority-resolver.d.ts +16 -3
  80. package/dist/core/delegation/worker-authority-resolver.d.ts.map +1 -1
  81. package/dist/core/delegation/worker-authority-resolver.js +114 -55
  82. package/dist/core/delegation/worker-authority-resolver.js.map +1 -1
  83. package/dist/core/delegation/worker-claim.d.ts +1 -2
  84. package/dist/core/delegation/worker-claim.d.ts.map +1 -1
  85. package/dist/core/delegation/worker-claim.js.map +1 -1
  86. package/dist/core/delegation/worker-delegation-controller.d.ts +19 -6
  87. package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -1
  88. package/dist/core/delegation/worker-delegation-controller.js +125 -40
  89. package/dist/core/delegation/worker-delegation-controller.js.map +1 -1
  90. package/dist/core/delegation/worker-delegation-request.d.ts +3 -3
  91. package/dist/core/delegation/worker-delegation-request.d.ts.map +1 -1
  92. package/dist/core/delegation/worker-delegation-request.js +13 -19
  93. package/dist/core/delegation/worker-delegation-request.js.map +1 -1
  94. package/dist/core/delegation/worker-execution-policy.d.ts +3 -2
  95. package/dist/core/delegation/worker-execution-policy.d.ts.map +1 -1
  96. package/dist/core/delegation/worker-execution-policy.js +54 -39
  97. package/dist/core/delegation/worker-execution-policy.js.map +1 -1
  98. package/dist/core/delegation/worker-fleet-limits.d.ts +3 -3
  99. package/dist/core/delegation/worker-fleet-limits.d.ts.map +1 -1
  100. package/dist/core/delegation/worker-fleet-limits.js +7 -7
  101. package/dist/core/delegation/worker-fleet-limits.js.map +1 -1
  102. package/dist/core/delegation/worker-machine-scope.d.ts +12 -0
  103. package/dist/core/delegation/worker-machine-scope.d.ts.map +1 -0
  104. package/dist/core/delegation/worker-machine-scope.js +38 -0
  105. package/dist/core/delegation/worker-machine-scope.js.map +1 -0
  106. package/dist/core/delegation/worker-notification-coordinator.d.ts +10 -0
  107. package/dist/core/delegation/worker-notification-coordinator.d.ts.map +1 -1
  108. package/dist/core/delegation/worker-notification-coordinator.js +69 -3
  109. package/dist/core/delegation/worker-notification-coordinator.js.map +1 -1
  110. package/dist/core/delegation/worker-recovery-coordinator.d.ts.map +1 -1
  111. package/dist/core/delegation/worker-recovery-coordinator.js +6 -1
  112. package/dist/core/delegation/worker-recovery-coordinator.js.map +1 -1
  113. package/dist/core/delegation/worker-runner.d.ts +5 -7
  114. package/dist/core/delegation/worker-runner.d.ts.map +1 -1
  115. package/dist/core/delegation/worker-runner.js +1 -4
  116. package/dist/core/delegation/worker-runner.js.map +1 -1
  117. package/dist/core/delegation/worker-write-reservation-coordinator.d.ts +3 -2
  118. package/dist/core/delegation/worker-write-reservation-coordinator.d.ts.map +1 -1
  119. package/dist/core/delegation/worker-write-reservation-coordinator.js +50 -25
  120. package/dist/core/delegation/worker-write-reservation-coordinator.js.map +1 -1
  121. package/dist/core/durable-custom-message-turn-controller.d.ts +6 -0
  122. package/dist/core/durable-custom-message-turn-controller.d.ts.map +1 -1
  123. package/dist/core/durable-custom-message-turn-controller.js +38 -15
  124. package/dist/core/durable-custom-message-turn-controller.js.map +1 -1
  125. package/dist/core/extension-binding-controller.d.ts +5 -1
  126. package/dist/core/extension-binding-controller.d.ts.map +1 -1
  127. package/dist/core/extension-binding-controller.js +15 -0
  128. package/dist/core/extension-binding-controller.js.map +1 -1
  129. package/dist/core/extensions/factory-runtime.d.ts.map +1 -1
  130. package/dist/core/extensions/factory-runtime.js +5 -0
  131. package/dist/core/extensions/factory-runtime.js.map +1 -1
  132. package/dist/core/extensions/runner.d.ts.map +1 -1
  133. package/dist/core/extensions/runner.js +1 -0
  134. package/dist/core/extensions/runner.js.map +1 -1
  135. package/dist/core/extensions/types.d.ts +8 -4
  136. package/dist/core/extensions/types.d.ts.map +1 -1
  137. package/dist/core/extensions/types.js.map +1 -1
  138. package/dist/core/foreground-terminal-handoff-controller.d.ts +31 -0
  139. package/dist/core/foreground-terminal-handoff-controller.d.ts.map +1 -1
  140. package/dist/core/foreground-terminal-handoff-controller.js +239 -55
  141. package/dist/core/foreground-terminal-handoff-controller.js.map +1 -1
  142. package/dist/core/goals/goal-session-controller.d.ts +2 -0
  143. package/dist/core/goals/goal-session-controller.d.ts.map +1 -1
  144. package/dist/core/goals/goal-session-controller.js +8 -0
  145. package/dist/core/goals/goal-session-controller.js.map +1 -1
  146. package/dist/core/goals/goal-tool-core.d.ts +5 -4
  147. package/dist/core/goals/goal-tool-core.d.ts.map +1 -1
  148. package/dist/core/goals/goal-tool-core.js +23 -19
  149. package/dist/core/goals/goal-tool-core.js.map +1 -1
  150. package/dist/core/learning/auto-learn-settings.d.ts +84 -0
  151. package/dist/core/learning/auto-learn-settings.d.ts.map +1 -0
  152. package/dist/core/learning/auto-learn-settings.js +66 -0
  153. package/dist/core/learning/auto-learn-settings.js.map +1 -0
  154. package/dist/core/learning/learning-audit.d.ts +5 -1
  155. package/dist/core/learning/learning-audit.d.ts.map +1 -1
  156. package/dist/core/learning/learning-audit.js +32 -1
  157. package/dist/core/learning/learning-audit.js.map +1 -1
  158. package/dist/core/learning/reflection-engine.d.ts +24 -0
  159. package/dist/core/learning/reflection-engine.d.ts.map +1 -1
  160. package/dist/core/learning/reflection-engine.js +104 -8
  161. package/dist/core/learning/reflection-engine.js.map +1 -1
  162. package/dist/core/local-prefix-warm-controller.d.ts +24 -0
  163. package/dist/core/local-prefix-warm-controller.d.ts.map +1 -0
  164. package/dist/core/local-prefix-warm-controller.js +79 -0
  165. package/dist/core/local-prefix-warm-controller.js.map +1 -0
  166. package/dist/core/memory/okf-project-memory-store.d.ts +28 -0
  167. package/dist/core/memory/okf-project-memory-store.d.ts.map +1 -0
  168. package/dist/core/memory/okf-project-memory-store.js +111 -0
  169. package/dist/core/memory/okf-project-memory-store.js.map +1 -0
  170. package/dist/core/memory/providers/file-store.d.ts +44 -1
  171. package/dist/core/memory/providers/file-store.d.ts.map +1 -1
  172. package/dist/core/memory/providers/file-store.js +341 -24
  173. package/dist/core/memory/providers/file-store.js.map +1 -1
  174. package/dist/core/memory/worker-memory-tools.d.ts +5 -0
  175. package/dist/core/memory/worker-memory-tools.d.ts.map +1 -0
  176. package/dist/core/memory/worker-memory-tools.js +5 -0
  177. package/dist/core/memory/worker-memory-tools.js.map +1 -0
  178. package/dist/core/memory-controller.d.ts +10 -1
  179. package/dist/core/memory-controller.d.ts.map +1 -1
  180. package/dist/core/memory-controller.js +72 -8
  181. package/dist/core/memory-controller.js.map +1 -1
  182. package/dist/core/model-capability.d.ts +7 -0
  183. package/dist/core/model-capability.d.ts.map +1 -1
  184. package/dist/core/model-capability.js +12 -0
  185. package/dist/core/model-capability.js.map +1 -1
  186. package/dist/core/model-registry.d.ts.map +1 -1
  187. package/dist/core/model-registry.js +2 -10
  188. package/dist/core/model-registry.js.map +1 -1
  189. package/dist/core/model-router-controller.d.ts +3 -2
  190. package/dist/core/model-router-controller.d.ts.map +1 -1
  191. package/dist/core/model-router-controller.js +3 -2
  192. package/dist/core/model-router-controller.js.map +1 -1
  193. package/dist/core/orchestration/contracts.d.ts +16 -12
  194. package/dist/core/orchestration/contracts.d.ts.map +1 -1
  195. package/dist/core/orchestration/contracts.js +2 -2
  196. package/dist/core/orchestration/contracts.js.map +1 -1
  197. package/dist/core/orchestration/lane-tool-manifests.d.ts +2 -2
  198. package/dist/core/orchestration/lane-tool-manifests.d.ts.map +1 -1
  199. package/dist/core/orchestration/lane-tool-manifests.js +6 -1
  200. package/dist/core/orchestration/lane-tool-manifests.js.map +1 -1
  201. package/dist/core/orchestration/profile-registry.d.ts.map +1 -1
  202. package/dist/core/orchestration/profile-registry.js +14 -0
  203. package/dist/core/orchestration/profile-registry.js.map +1 -1
  204. package/dist/core/orchestration/task-profile-writer.d.ts +7 -4
  205. package/dist/core/orchestration/task-profile-writer.d.ts.map +1 -1
  206. package/dist/core/orchestration/task-profile-writer.js +71 -59
  207. package/dist/core/orchestration/task-profile-writer.js.map +1 -1
  208. package/dist/core/orchestration/thinking-level-schema.d.ts +7 -0
  209. package/dist/core/orchestration/thinking-level-schema.d.ts.map +1 -0
  210. package/dist/core/orchestration/thinking-level-schema.js +19 -0
  211. package/dist/core/orchestration/thinking-level-schema.js.map +1 -0
  212. package/dist/core/orchestration/worker-execution-contract.d.ts.map +1 -1
  213. package/dist/core/orchestration/worker-execution-contract.js +12 -5
  214. package/dist/core/orchestration/worker-execution-contract.js.map +1 -1
  215. package/dist/core/provider-prompt-contracts.d.ts +1 -4
  216. package/dist/core/provider-prompt-contracts.d.ts.map +1 -1
  217. package/dist/core/provider-prompt-contracts.js +13 -29
  218. package/dist/core/provider-prompt-contracts.js.map +1 -1
  219. package/dist/core/provider-request-context-controller.d.ts +2 -0
  220. package/dist/core/provider-request-context-controller.d.ts.map +1 -1
  221. package/dist/core/provider-request-context-controller.js +10 -3
  222. package/dist/core/provider-request-context-controller.js.map +1 -1
  223. package/dist/core/reflection-controller.d.ts +63 -27
  224. package/dist/core/reflection-controller.d.ts.map +1 -1
  225. package/dist/core/reflection-controller.js +300 -132
  226. package/dist/core/reflection-controller.js.map +1 -1
  227. package/dist/core/runtime-builder.d.ts +1 -0
  228. package/dist/core/runtime-builder.d.ts.map +1 -1
  229. package/dist/core/runtime-builder.js +25 -14
  230. package/dist/core/runtime-builder.js.map +1 -1
  231. package/dist/core/secrets/credential-exposure-guard.d.ts.map +1 -1
  232. package/dist/core/secrets/credential-exposure-guard.js +55 -10
  233. package/dist/core/secrets/credential-exposure-guard.js.map +1 -1
  234. package/dist/core/session-role.d.ts +6 -8
  235. package/dist/core/session-role.d.ts.map +1 -1
  236. package/dist/core/session-role.js +8 -18
  237. package/dist/core/session-role.js.map +1 -1
  238. package/dist/core/settings-manager.d.ts +13 -16
  239. package/dist/core/settings-manager.d.ts.map +1 -1
  240. package/dist/core/settings-manager.js +53 -50
  241. package/dist/core/settings-manager.js.map +1 -1
  242. package/dist/core/skill-vault.d.ts +15 -0
  243. package/dist/core/skill-vault.d.ts.map +1 -1
  244. package/dist/core/skill-vault.js +79 -45
  245. package/dist/core/skill-vault.js.map +1 -1
  246. package/dist/core/skills.d.ts +3 -0
  247. package/dist/core/skills.d.ts.map +1 -1
  248. package/dist/core/skills.js +6 -6
  249. package/dist/core/skills.js.map +1 -1
  250. package/dist/core/system-prompt-builder.d.ts +2 -0
  251. package/dist/core/system-prompt-builder.d.ts.map +1 -1
  252. package/dist/core/system-prompt-builder.js +52 -12
  253. package/dist/core/system-prompt-builder.js.map +1 -1
  254. package/dist/core/system-prompt.js +1 -1
  255. package/dist/core/system-prompt.js.map +1 -1
  256. package/dist/core/tool-capability-policy.d.ts +3 -0
  257. package/dist/core/tool-capability-policy.d.ts.map +1 -1
  258. package/dist/core/tool-capability-policy.js +13 -2
  259. package/dist/core/tool-capability-policy.js.map +1 -1
  260. package/dist/core/toolkit/script-runner.d.ts +2 -1
  261. package/dist/core/toolkit/script-runner.d.ts.map +1 -1
  262. package/dist/core/toolkit/script-runner.js +10 -2
  263. package/dist/core/toolkit/script-runner.js.map +1 -1
  264. package/dist/core/tools/delegate-status.d.ts +3 -1
  265. package/dist/core/tools/delegate-status.d.ts.map +1 -1
  266. package/dist/core/tools/delegate-status.js +5 -1
  267. package/dist/core/tools/delegate-status.js.map +1 -1
  268. package/dist/core/tools/delegate.d.ts +4 -13
  269. package/dist/core/tools/delegate.d.ts.map +1 -1
  270. package/dist/core/tools/delegate.js +173 -73
  271. package/dist/core/tools/delegate.js.map +1 -1
  272. package/dist/core/tools/goal.d.ts +3 -4
  273. package/dist/core/tools/goal.d.ts.map +1 -1
  274. package/dist/core/tools/goal.js +24 -7
  275. package/dist/core/tools/goal.js.map +1 -1
  276. package/dist/core/tools/profile-writer.d.ts +2 -8
  277. package/dist/core/tools/profile-writer.d.ts.map +1 -1
  278. package/dist/core/tools/profile-writer.js +6 -18
  279. package/dist/core/tools/profile-writer.js.map +1 -1
  280. package/dist/core/tools/run-toolkit-script.d.ts +1 -1
  281. package/dist/core/tools/run-toolkit-script.d.ts.map +1 -1
  282. package/dist/core/tools/run-toolkit-script.js +2 -2
  283. package/dist/core/tools/run-toolkit-script.js.map +1 -1
  284. package/dist/core/tools/skill-audit.d.ts +28 -1
  285. package/dist/core/tools/skill-audit.d.ts.map +1 -1
  286. package/dist/core/tools/skill-audit.js +56 -12
  287. package/dist/core/tools/skill-audit.js.map +1 -1
  288. package/dist/core/tools/skill.d.ts +12 -1
  289. package/dist/core/tools/skill.d.ts.map +1 -1
  290. package/dist/core/tools/skill.js +52 -0
  291. package/dist/core/tools/skill.js.map +1 -1
  292. package/dist/core/tools/skillify.d.ts.map +1 -1
  293. package/dist/core/tools/skillify.js +16 -7
  294. package/dist/core/tools/skillify.js.map +1 -1
  295. package/dist/core/tools/task-steps.js +1 -1
  296. package/dist/core/tools/task-steps.js.map +1 -1
  297. package/dist/core/tools/tmux-dispatch.d.ts +4 -16
  298. package/dist/core/tools/tmux-dispatch.d.ts.map +1 -1
  299. package/dist/core/tools/tmux-dispatch.js +5 -20
  300. package/dist/core/tools/tmux-dispatch.js.map +1 -1
  301. package/dist/core/tools/tool-task.d.ts +1 -0
  302. package/dist/core/tools/tool-task.d.ts.map +1 -1
  303. package/dist/core/tools/tool-task.js +13 -8
  304. package/dist/core/tools/tool-task.js.map +1 -1
  305. package/dist/core/util/atomic-file.d.ts +2 -0
  306. package/dist/core/util/atomic-file.d.ts.map +1 -1
  307. package/dist/core/util/atomic-file.js +4 -0
  308. package/dist/core/util/atomic-file.js.map +1 -1
  309. package/dist/core/worktree-sync/codes.d.ts +1 -2
  310. package/dist/core/worktree-sync/codes.d.ts.map +1 -1
  311. package/dist/core/worktree-sync/codes.js +1 -2
  312. package/dist/core/worktree-sync/codes.js.map +1 -1
  313. package/dist/core/worktree-sync/lane-gate.d.ts +4 -8
  314. package/dist/core/worktree-sync/lane-gate.d.ts.map +1 -1
  315. package/dist/core/worktree-sync/lane-gate.js +5 -51
  316. package/dist/core/worktree-sync/lane-gate.js.map +1 -1
  317. package/dist/index.d.ts +5 -0
  318. package/dist/index.d.ts.map +1 -1
  319. package/dist/index.js +7 -0
  320. package/dist/index.js.map +1 -1
  321. package/dist/modes/interactive/auto-learn-controller.d.ts +6 -7
  322. package/dist/modes/interactive/auto-learn-controller.d.ts.map +1 -1
  323. package/dist/modes/interactive/auto-learn-controller.js +32 -207
  324. package/dist/modes/interactive/auto-learn-controller.js.map +1 -1
  325. package/dist/modes/interactive/autonomy-commands.js +2 -2
  326. package/dist/modes/interactive/autonomy-commands.js.map +1 -1
  327. package/dist/modes/interactive/components/activity-lane.d.ts.map +1 -1
  328. package/dist/modes/interactive/components/activity-lane.js +12 -23
  329. package/dist/modes/interactive/components/activity-lane.js.map +1 -1
  330. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  331. package/dist/modes/interactive/components/custom-message.js +142 -1
  332. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  333. package/dist/modes/interactive/components/fitness-role-selector.d.ts.map +1 -1
  334. package/dist/modes/interactive/components/fitness-role-selector.js +2 -2
  335. package/dist/modes/interactive/components/fitness-role-selector.js.map +1 -1
  336. package/dist/modes/interactive/components/footer.js +1 -1
  337. package/dist/modes/interactive/components/footer.js.map +1 -1
  338. package/dist/modes/interactive/components/settings-selector.d.ts +4 -0
  339. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  340. package/dist/modes/interactive/components/settings-selector.js +150 -73
  341. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  342. package/dist/modes/interactive/report-commands.d.ts.map +1 -1
  343. package/dist/modes/interactive/report-commands.js +8 -4
  344. package/dist/modes/interactive/report-commands.js.map +1 -1
  345. package/dist/modes/interactive/settings-selector-flow.d.ts.map +1 -1
  346. package/dist/modes/interactive/settings-selector-flow.js +10 -0
  347. package/dist/modes/interactive/settings-selector-flow.js.map +1 -1
  348. package/docs/extensions.md +8 -0
  349. package/docs/harness-architecture.md +28 -32
  350. package/docs/index.md +1 -1
  351. package/docs/process-matrix.md +8 -6
  352. package/docs/resources.md +1 -1
  353. package/docs/settings.md +61 -51
  354. package/docs/tmux-agent-manager.md +47 -40
  355. package/docs/usage.md +1 -1
  356. package/docs/worker-profiles.md +8 -6
  357. package/docs/worktree-sync.md +26 -20
  358. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  359. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  360. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  361. package/examples/extensions/sandbox/package-lock.json +2 -2
  362. package/examples/extensions/sandbox/package.json +1 -1
  363. package/examples/extensions/with-deps/package-lock.json +2 -2
  364. package/examples/extensions/with-deps/package.json +1 -1
  365. package/npm-shrinkwrap.json +12 -12
  366. package/package.json +4 -4
  367. package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.d.ts +0 -133
  368. package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.d.ts.map +0 -1
  369. package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.js +0 -199
  370. package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.js.map +0 -1
  371. package/dist/bundled-resources/extensions/tmux-agent-manager/dispatch-grant.ts +0 -312
@@ -1 +1 @@
1
- {"version":3,"file":"file-store.js","sourceRoot":"","sources":["../../../../src/core/memory/providers/file-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, randomUUID } from \"node:crypto\";\nimport { promises as fs } from \"node:fs\";\nimport { type Static, Type } from \"typebox\";\nimport { configFile, managedMemoryStateFile } from \"../../agent-paths.ts\";\nimport type { MemoryPromptBudget } from \"../../context/memory-prompt-budget.ts\";\nimport type { ToolDefinition } from \"../../extensions/types.ts\";\nimport {\n\thasInvisibleUnicode,\n\tscanContextFileThreats,\n\tstripInvisibleUnicode,\n} from \"../../security/context-threat-scanner.ts\";\nimport { jaccard, tokenize } from \"../../tools/skill-audit.ts\";\nimport { withFileLock, writeFileAtomic } from \"../../util/atomic-file.ts\";\nimport type { MemoryLifecycleContext, MemoryProvider } from \"../memory-provider.ts\";\nimport { UserMemoryArchive } from \"./user-memory-archive.ts\";\n\n/**\n * Confront-before-write (anti append-rot): if `content` is a near-duplicate of an existing\n * non-empty line (token Jaccard ≥ threshold — i.e. the same fact reworded), supersede that line in\n * place and return the rewritten file; otherwise return null (the caller appends normally).\n */\nexport function supersedeNearDuplicateLine(existing: string, content: string): string | null {\n\tconst NEAR_DUP_THRESHOLD = 0.6;\n\tconst contentTokens = tokenize(content);\n\tif (contentTokens.length === 0) return null;\n\tconst lines = existing.split(\"\\n\");\n\tlet bestIdx = -1;\n\tlet bestScore = NEAR_DUP_THRESHOLD;\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tconst line = lines[i].trim();\n\t\tif (!line) continue;\n\t\t// Never supersede structural Markdown (headings, list markers as headings) — a fact must not\n\t\t// silently overwrite section structure.\n\t\tif (line.startsWith(\"#\")) continue;\n\t\tconst score = jaccard(contentTokens, tokenize(line));\n\t\tif (score >= bestScore) {\n\t\t\tbestScore = score;\n\t\t\tbestIdx = i;\n\t\t}\n\t}\n\tif (bestIdx === -1) return null;\n\tlines[bestIdx] = content;\n\treturn lines.join(\"\\n\");\n}\n\nconst memorySchema = Type.Object({\n\taction: Type.Union([Type.Literal(\"add\"), Type.Literal(\"replace\"), Type.Literal(\"remove\")], {\n\t\tdescription: \"Action to perform: add new content, replace existing content, or remove content\",\n\t}),\n\ttarget: Type.Union([Type.Literal(\"memory\"), Type.Literal(\"user\")], {\n\t\tdescription: \"Target file: 'memory' for MEMORY.md, 'user' for USER.md\",\n\t}),\n\tcontent: Type.Optional(Type.String({ description: \"Content to write (required for 'add' or 'replace')\" })),\n\toldContent: Type.Optional(\n\t\tType.String({ description: \"Exact substring to replace or remove (required for 'replace' or 'remove')\" }),\n\t),\n});\n\ntype MemoryParams = Static<typeof memorySchema>;\n\nexport interface FileStoreProviderOptions {\n\tonDurableMemoryChanged?: () => void;\n}\n\nexport const FILE_STORE_MEMORY_SYSTEM_NOTE =\n\t\"[System Note: Below is a snapshot of persistent memory. Proactively record verified reusable project facts and user preferences with the 'memory' tool; never store transient noise.]\";\n\ninterface ManagedMemoryState {\n\tversion: 1;\n\tcommittedDigest: string;\n\tpendingDigest?: string;\n}\n\ntype ManagedMemoryStateRead =\n\t| { status: \"missing\" }\n\t| { status: \"valid\"; state: ManagedMemoryState }\n\t| { status: \"invalid\"; raw: string };\n\nfunction contentDigest(content: string): string {\n\treturn createHash(\"sha256\").update(content, \"utf8\").digest(\"hex\");\n}\n\nfunction isMissingFileError(error: unknown): boolean {\n\treturn typeof error === \"object\" && error !== null && \"code\" in error && error.code === \"ENOENT\";\n}\n\nfunction parseManagedMemoryState(raw: string): ManagedMemoryState | undefined {\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(raw);\n\t} catch {\n\t\treturn undefined;\n\t}\n\tif (typeof parsed !== \"object\" || parsed === null) return undefined;\n\tconst record = parsed as Record<string, unknown>;\n\tif (record.version !== 1 || typeof record.committedDigest !== \"string\") return undefined;\n\tif (record.pendingDigest !== undefined && typeof record.pendingDigest !== \"string\") return undefined;\n\treturn {\n\t\tversion: 1,\n\t\tcommittedDigest: record.committedDigest,\n\t\t...(typeof record.pendingDigest === \"string\" ? { pendingDigest: record.pendingDigest } : {}),\n\t};\n}\n\nasync function readManagedMemoryState(statePath: string): Promise<ManagedMemoryStateRead> {\n\ttry {\n\t\tconst raw = await fs.readFile(statePath, \"utf8\");\n\t\tconst state = parseManagedMemoryState(raw);\n\t\treturn state ? { status: \"valid\", state } : { status: \"invalid\", raw };\n\t} catch (error) {\n\t\tif (isMissingFileError(error)) return { status: \"missing\" };\n\t\tthrow error;\n\t}\n}\n\nfunction serializeManagedMemoryState(state: ManagedMemoryState): string {\n\treturn `${JSON.stringify(state)}\\n`;\n}\n\nasync function writeManagedMemoryState(statePath: string, state: ManagedMemoryState): Promise<void> {\n\tawait writeFileAtomic(statePath, serializeManagedMemoryState(state), { mode: 0o600 });\n}\n\nfunction reconcileManagedMemoryState(\n\tcurrentDigest: string,\n\tstate: ManagedMemoryState,\n): { recognized: true; state: ManagedMemoryState; changed: boolean } | { recognized: false } {\n\tif (currentDigest === state.committedDigest) {\n\t\tif (state.pendingDigest === undefined) return { recognized: true, state, changed: false };\n\t\treturn {\n\t\t\trecognized: true,\n\t\t\tstate: { version: 1, committedDigest: state.committedDigest },\n\t\t\tchanged: true,\n\t\t};\n\t}\n\tif (state.pendingDigest !== undefined && currentDigest === state.pendingDigest) {\n\t\treturn {\n\t\t\trecognized: true,\n\t\t\tstate: { version: 1, committedDigest: state.pendingDigest },\n\t\t\tchanged: true,\n\t\t};\n\t}\n\treturn { recognized: false };\n}\n\nfunction fitMemoryBlockToBudget(block: string, budget: MemoryPromptBudget | undefined): string {\n\tif (budget === undefined) return block;\n\tif (!budget.enabled || budget.maxLines <= 0 || budget.maxChars <= 0) return \"\";\n\tif (block.split(\"\\n\").length <= budget.maxLines && block.length <= budget.maxChars) return block;\n\t// Micro-context profiles deliberately omit a block that cannot fit whole. Larger constrained\n\t// profiles retain a bounded head and say explicitly that more memory exists on disk.\n\tif (budget.compact) return \"\";\n\n\tconst marker = \"[…memory truncated for capability budget; full files remain on disk]\";\n\tif (budget.maxLines < 2 || budget.maxChars <= marker.length + 1) return \"\";\n\tconst lines: string[] = [];\n\tlet chars = 0;\n\tconst contentCharLimit = budget.maxChars - marker.length - 1;\n\tfor (const line of block.split(\"\\n\")) {\n\t\tif (lines.length >= budget.maxLines - 1) break;\n\t\tconst separatorChars = lines.length > 0 ? 1 : 0;\n\t\tconst remaining = contentCharLimit - chars - separatorChars;\n\t\tif (remaining <= 0) break;\n\t\tconst rendered = line.length <= remaining ? line : `${line.slice(0, Math.max(0, remaining - 1))}…`;\n\t\tlines.push(rendered);\n\t\tchars += separatorChars + rendered.length;\n\t\tif (rendered.length !== line.length) break;\n\t}\n\tif (lines.length === 0) return \"\";\n\tlines.push(marker);\n\treturn lines.join(\"\\n\");\n}\n\nexport class FileStoreProvider implements MemoryProvider {\n\tpublic readonly name = \"file-store\";\n\tpublic readonly egress = \"local\";\n\n\tprivate ctx?: MemoryLifecycleContext;\n\tprivate memoryFilePath = \"\";\n\tprivate userFilePath = \"\";\n\tprivate memoryStatePath = \"\";\n\tprivate userStatePath = \"\";\n\n\tprivate lastWrittenMemory = \"\";\n\tprivate lastWrittenUser = \"\";\n\tprivate userArchive?: UserMemoryArchive;\n\tprivate readonly options: FileStoreProviderOptions;\n\n\t// Character budgets\n\tprivate static readonly BUDGET_MEMORY = 2200;\n\tprivate static readonly BUDGET_USER = 1375;\n\n\tconstructor(options: FileStoreProviderOptions = {}) {\n\t\tthis.options = options;\n\t}\n\n\tpublic isAvailable(): boolean {\n\t\treturn true;\n\t}\n\n\tpublic getCapabilities() {\n\t\treturn { surfaces: [\"context\" as const] };\n\t}\n\n\tpublic async initialize(_sessionId: string, ctx: MemoryLifecycleContext): Promise<void> {\n\t\tthis.ctx = ctx;\n\t\tthis.memoryFilePath = configFile(ctx.agentDir, \"MEMORY.md\");\n\t\tthis.userFilePath = configFile(ctx.agentDir, \"USER.md\");\n\t\tthis.memoryStatePath = managedMemoryStateFile(ctx.agentDir, \"MEMORY.md\");\n\t\tthis.userStatePath = managedMemoryStateFile(ctx.agentDir, \"USER.md\");\n\t\tthis.userArchive = new UserMemoryArchive(ctx.agentDir);\n\n\t\tawait fs.mkdir(ctx.agentDir, { recursive: true });\n\t\t[this.lastWrittenMemory, this.lastWrittenUser] = await Promise.all([\n\t\t\tthis.initializeManagedFile(this.memoryFilePath, this.memoryStatePath),\n\t\t\tthis.initializeManagedFile(this.userFilePath, this.userStatePath),\n\t\t]);\n\t}\n\n\tprivate async initializeManagedFile(filePath: string, statePath: string): Promise<string> {\n\t\treturn withFileLock(filePath, async () => {\n\t\t\tlet current = \"\";\n\t\t\ttry {\n\t\t\t\tcurrent = await fs.readFile(filePath, \"utf8\");\n\t\t\t} catch (error) {\n\t\t\t\tif (!isMissingFileError(error)) throw error;\n\t\t\t\tawait writeFileAtomic(filePath, \"\", { mode: 0o600 });\n\t\t\t}\n\n\t\t\tconst currentDigest = contentDigest(current);\n\t\t\tconst stateRead = await readManagedMemoryState(statePath);\n\t\t\tif (stateRead.status === \"missing\") {\n\t\t\t\tawait writeManagedMemoryState(statePath, { version: 1, committedDigest: currentDigest });\n\t\t\t\treturn current;\n\t\t\t}\n\t\t\tif (stateRead.status === \"invalid\") {\n\t\t\t\tawait writeFileAtomic(`${statePath}.bak.${Date.now()}.${randomUUID()}`, stateRead.raw, { mode: 0o600 });\n\t\t\t\tawait writeManagedMemoryState(statePath, { version: 1, committedDigest: currentDigest });\n\t\t\t\treturn current;\n\t\t\t}\n\n\t\t\tconst reconciled = reconcileManagedMemoryState(currentDigest, stateRead.state);\n\t\t\tif (reconciled.recognized && reconciled.changed) {\n\t\t\t\tawait writeManagedMemoryState(statePath, reconciled.state);\n\t\t\t}\n\t\t\treturn current;\n\t\t});\n\t}\n\n\tpublic systemPromptBlock(budget?: MemoryPromptBudget): string {\n\t\tconst sanitize = (content: string) => {\n\t\t\t// Strip hidden/bidi-control chars before injecting memory into the prompt (defence in depth: the\n\t\t\t// write path already blocks them, but a file edited out-of-band could carry them). Strip #31.\n\t\t\tconst lines = stripInvisibleUnicode(content).cleaned.split(\"\\n\");\n\t\t\tconst sanitizedLines = lines.map((line) => {\n\t\t\t\tconst threats = scanContextFileThreats(line);\n\t\t\t\tif (threats.length > 0) {\n\t\t\t\t\treturn `[BLOCKED: potential threat detected (${threats.join(\", \")})]`;\n\t\t\t\t}\n\t\t\t\treturn line;\n\t\t\t});\n\t\t\treturn sanitizedLines.join(\"\\n\");\n\t\t};\n\n\t\t// Read-time budget guard (cost): the memory tool already caps writes at BUDGET_*, but a file edited\n\t\t// externally (or by any path that bypasses the tool) could be arbitrarily large and would then\n\t\t// bloat the system prompt on EVERY turn. Cap the injected view to the same budget so the per-turn\n\t\t// cost stays bounded; the file on disk is untouched and the model is told it was truncated.\n\t\tconst cap = (content: string, limit: number) => {\n\t\t\tif (content.length <= limit) return content;\n\t\t\treturn `${content.slice(0, limit)}\\n[…truncated to ${limit} chars for the prompt; full file is on disk]`;\n\t\t};\n\n\t\tconst mem = cap(sanitize(this.lastWrittenMemory), FileStoreProvider.BUDGET_MEMORY);\n\t\tconst usr = cap(sanitize(this.lastWrittenUser), FileStoreProvider.BUDGET_USER);\n\n\t\tconst blocks: string[] = [];\n\t\tif (mem.trim()) {\n\t\t\tblocks.push(`## MEMORY.md:\\n${mem}`);\n\t\t}\n\t\tif (usr.trim()) {\n\t\t\tblocks.push(`## USER.md:\\n${usr}`);\n\t\t}\n\n\t\tif (blocks.length === 0) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tconst block = `=== Persistent Memory (file-store) ===\\n${FILE_STORE_MEMORY_SYSTEM_NOTE}\\n\\n${blocks.join(\"\\n\\n\")}`;\n\t\treturn fitMemoryBlockToBudget(block, budget);\n\t}\n\n\tpublic async prefetch(_query: string): Promise<string> {\n\t\t// static system prompt block is sufficient for file-store default; no-op prefetch\n\t\treturn \"\";\n\t}\n\n\tpublic async shutdown(): Promise<void> {\n\t\t// no-op\n\t}\n\n\tpublic getContextMarkers(): string[] {\n\t\treturn [];\n\t}\n\n\tpublic getToolDefinitions(): ToolDefinition[] {\n\t\treturn [\n\t\t\t{\n\t\t\t\tname: \"memory\",\n\t\t\t\tlabel: \"Persistent Memory Manager\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"Add, replace, or remove durable project facts and user preferences. Proactively store newly verified reusable facts; USER.md overflow is migrated into indexed OKF shards.\",\n\t\t\t\tpromptSnippet: \"Persist verified project facts and user preferences.\",\n\t\t\t\tpromptGuidelines: [\n\t\t\t\t\t\"Store verified facts and preferences. Repeatable multi-step procedures become skills via skillify; reflection promotes them when the write is a workflow.\",\n\t\t\t\t],\n\t\t\t\tparameters: memorySchema,\n\t\t\t\texecute: async (_toolCallId, params: MemoryParams, _signal, _onUpdate, _execCtx) => {\n\t\t\t\t\tif (this.ctx?.isChildSession) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\ttext: \"Error: Writes to persistent memory are not allowed in child sessions (subagents).\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdetails: { success: false, error: \"Child session write-gated\" },\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tconst { action, target, content, oldContent } = params;\n\n\t\t\t\t\t// Strict-scope injection guard on the high-privilege WRITE path (agy #31): a poisoned\n\t\t\t\t\t// memory entry persists across sessions and is injected into every future system prompt,\n\t\t\t\t\t// so block outright rather than strip. Hidden/bidi-control chars have no legitimate place\n\t\t\t\t\t// in a memory note, so reject those too.\n\t\t\t\t\tif ((action === \"add\" || action === \"replace\") && content !== undefined) {\n\t\t\t\t\t\tif (hasInvisibleUnicode(content)) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\t\ttext: \"Error: memory write rejected — contains hidden/bidirectional control characters.\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tdetails: { success: false, error: \"Invisible unicode in memory write\" },\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst threats = scanContextFileThreats(content, \"strict\");\n\t\t\t\t\t\tif (threats.length > 0) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\t\ttext: `Error: memory write rejected — potential injection/exfiltration detected (${threats.join(\", \")}).`,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tdetails: { success: false, error: \"Threat in memory write\" },\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst filePath = target === \"memory\" ? this.memoryFilePath : this.userFilePath;\n\t\t\t\t\tconst statePath = target === \"memory\" ? this.memoryStatePath : this.userStatePath;\n\t\t\t\t\tconst budget = target === \"memory\" ? FileStoreProvider.BUDGET_MEMORY : FileStoreProvider.BUDGET_USER;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn await withFileLock(filePath, async () => {\n\t\t\t\t\t\t\tconst currentOnDisk = await fs.readFile(filePath, \"utf8\");\n\t\t\t\t\t\t\tconst currentDigest = contentDigest(currentOnDisk);\n\t\t\t\t\t\t\tconst stateRead = await readManagedMemoryState(statePath);\n\t\t\t\t\t\t\tlet managedState: ManagedMemoryState | undefined;\n\t\t\t\t\t\t\tif (stateRead.status === \"valid\") {\n\t\t\t\t\t\t\t\tconst reconciled = reconcileManagedMemoryState(currentDigest, stateRead.state);\n\t\t\t\t\t\t\t\tif (reconciled.recognized) {\n\t\t\t\t\t\t\t\t\tmanagedState = reconciled.state;\n\t\t\t\t\t\t\t\t\tif (reconciled.changed) await writeManagedMemoryState(statePath, reconciled.state);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!managedState) {\n\t\t\t\t\t\t\t\tconst backupPath = `${filePath}.bak.${Date.now()}`;\n\t\t\t\t\t\t\t\tawait writeFileAtomic(backupPath, currentOnDisk, { mode: 0o600 });\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\t\t\ttext: `Error: Drift detected. The memory file has been modified out-of-band by an external process. A backup was created at ${backupPath}. Operation aborted.`,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\tdetails: { success: false, error: \"Drift detected\" },\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// A peer session's committed write is authoritative. Refresh this provider's prompt\n\t\t\t\t\t\t\t// snapshot before applying the caller's mutation to that current content.\n\t\t\t\t\t\t\tif (target === \"memory\") this.lastWrittenMemory = currentOnDisk;\n\t\t\t\t\t\t\telse this.lastWrittenUser = currentOnDisk;\n\n\t\t\t\t\t\t\tlet newContent = currentOnDisk;\n\t\t\t\t\t\t\tlet archiveChanged = false;\n\t\t\t\t\t\t\tif (target === \"user\") {\n\t\t\t\t\t\t\t\tif (!this.userArchive) throw new Error(\"User memory archive is not initialized.\");\n\t\t\t\t\t\t\t\tif (action === \"add\") {\n\t\t\t\t\t\t\t\t\tif (content === undefined)\n\t\t\t\t\t\t\t\t\t\tthrow new Error(\"Parameter 'content' is required for action 'add'.\");\n\t\t\t\t\t\t\t\t\tconst result = await this.userArchive.apply(\n\t\t\t\t\t\t\t\t\t\tcurrentOnDisk,\n\t\t\t\t\t\t\t\t\t\t{ action, content },\n\t\t\t\t\t\t\t\t\t\tbudget,\n\t\t\t\t\t\t\t\t\t\tsupersedeNearDuplicateLine,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tnewContent = result.userContent;\n\t\t\t\t\t\t\t\t\tarchiveChanged = result.archiveChanged;\n\t\t\t\t\t\t\t\t} else if (action === \"replace\") {\n\t\t\t\t\t\t\t\t\tif (content === undefined || oldContent === undefined) {\n\t\t\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t\t\t\"Parameters 'content' and 'oldContent' are required for action 'replace'.\",\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tconst result = await this.userArchive.apply(\n\t\t\t\t\t\t\t\t\t\tcurrentOnDisk,\n\t\t\t\t\t\t\t\t\t\t{ action, content, oldContent },\n\t\t\t\t\t\t\t\t\t\tbudget,\n\t\t\t\t\t\t\t\t\t\tsupersedeNearDuplicateLine,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tnewContent = result.userContent;\n\t\t\t\t\t\t\t\t\tarchiveChanged = result.archiveChanged;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif (oldContent === undefined)\n\t\t\t\t\t\t\t\t\t\tthrow new Error(\"Parameter 'oldContent' is required for action 'remove'.\");\n\t\t\t\t\t\t\t\t\tconst result = await this.userArchive.apply(\n\t\t\t\t\t\t\t\t\t\tcurrentOnDisk,\n\t\t\t\t\t\t\t\t\t\t{ action, oldContent },\n\t\t\t\t\t\t\t\t\t\tbudget,\n\t\t\t\t\t\t\t\t\t\tsupersedeNearDuplicateLine,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tnewContent = result.userContent;\n\t\t\t\t\t\t\t\t\tarchiveChanged = result.archiveChanged;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (action === \"add\") {\n\t\t\t\t\t\t\t\tif (content === undefined) {\n\t\t\t\t\t\t\t\t\tthrow new Error(\"Parameter 'content' is required for action 'add'.\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst superseded = supersedeNearDuplicateLine(currentOnDisk, content);\n\t\t\t\t\t\t\t\tif (superseded !== null) {\n\t\t\t\t\t\t\t\t\tnewContent = superseded;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewContent =\n\t\t\t\t\t\t\t\t\t\tnewContent.endsWith(\"\\n\") || newContent === \"\"\n\t\t\t\t\t\t\t\t\t\t\t? `${newContent}${content}\\n`\n\t\t\t\t\t\t\t\t\t\t\t: `${newContent}\\n${content}\\n`;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (action === \"replace\") {\n\t\t\t\t\t\t\t\tif (content === undefined || oldContent === undefined) {\n\t\t\t\t\t\t\t\t\tthrow new Error(\"Parameters 'content' and 'oldContent' are required for action 'replace'.\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (!currentOnDisk.includes(oldContent)) {\n\t\t\t\t\t\t\t\t\tthrow new Error(`The content to replace ('oldContent') was not found in the file.`);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tnewContent = currentOnDisk.replace(oldContent, content);\n\t\t\t\t\t\t\t} else if (action === \"remove\") {\n\t\t\t\t\t\t\t\tif (oldContent === undefined) {\n\t\t\t\t\t\t\t\t\tthrow new Error(\"Parameter 'oldContent' is required for action 'remove'.\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (!currentOnDisk.includes(oldContent)) {\n\t\t\t\t\t\t\t\t\tthrow new Error(`The content to remove ('oldContent') was not found in the file.`);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tnewContent = currentOnDisk.replace(oldContent, \"\");\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (newContent.length > budget) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\t\t\ttext: `Error: Memory budget exceeded. ${target === \"memory\" ? \"MEMORY.md\" : \"USER.md\"} limit is ${budget} characters. Current operation would result in ${newContent.length} characters.`,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\tdetails: { success: false, error: \"Memory budget exceeded\" },\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (newContent !== currentOnDisk) {\n\t\t\t\t\t\t\t\tconst newDigest = contentDigest(newContent);\n\t\t\t\t\t\t\t\tawait writeManagedMemoryState(statePath, {\n\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\tcommittedDigest: managedState.committedDigest,\n\t\t\t\t\t\t\t\t\tpendingDigest: newDigest,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tawait writeFileAtomic(filePath, newContent, { mode: 0o600 });\n\t\t\t\t\t\t\t\tawait writeManagedMemoryState(statePath, { version: 1, committedDigest: newDigest });\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (target === \"memory\") this.lastWrittenMemory = newContent;\n\t\t\t\t\t\t\telse this.lastWrittenUser = newContent;\n\t\t\t\t\t\t\tif (archiveChanged || newContent !== currentOnDisk) this.options.onDurableMemoryChanged?.();\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\t\ttext: `Successfully updated ${target === \"memory\" ? \"MEMORY.md\" : \"USER.md\"}.`,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tdetails: { success: true },\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\ttext: `Error: Failed to perform memory operation: ${String(err)}`,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdetails: { success: false, error: String(err) },\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\t}\n}\n"]}
1
+ {"version":3,"file":"file-store.js","sourceRoot":"","sources":["../../../../src/core/memory/providers/file-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, randomUUID } from \"node:crypto\";\nimport { promises as fs } from \"node:fs\";\nimport { type Static, Type } from \"typebox\";\nimport { configFile, managedMemoryStateFile } from \"../../agent-paths.ts\";\nimport type { MemoryPromptBudget } from \"../../context/memory-prompt-budget.ts\";\nimport {\n\tOKF_MEMORY_LIMITS,\n\tPI_OKF_TYPES,\n\ttype PiOkfType,\n\tvalidateOkfMemoryDocumentInput,\n} from \"../../context/okf-memory.ts\";\nimport type { ToolDefinition } from \"../../extensions/types.ts\";\nimport {\n\thasInvisibleUnicode,\n\tscanContextFileThreats,\n\tstripInvisibleUnicode,\n} from \"../../security/context-threat-scanner.ts\";\nimport { jaccard, tokenize } from \"../../tools/skill-audit.ts\";\nimport { isMissingFileError, withFileLock, writeFileAtomic } from \"../../util/atomic-file.ts\";\nimport type { MemoryLifecycleContext, MemoryProvider } from \"../memory-provider.ts\";\nimport { OkfProjectMemoryStore } from \"../okf-project-memory-store.ts\";\nimport { ROOT_MEMORY_TOOL_NAME } from \"../worker-memory-tools.ts\";\nimport { UserMemoryArchive } from \"./user-memory-archive.ts\";\n\n/**\n * Confront-before-write (anti append-rot): if `content` is a near-duplicate of an existing\n * non-empty line (token Jaccard ≥ threshold — i.e. the same fact reworded), supersede that line in\n * place and return the rewritten file; otherwise return null (the caller appends normally).\n */\nexport function supersedeNearDuplicateLine(existing: string, content: string): string | null {\n\tconst NEAR_DUP_THRESHOLD = 0.6;\n\tconst contentTokens = tokenize(content);\n\tif (contentTokens.length === 0) return null;\n\tconst lines = existing.split(\"\\n\");\n\tlet bestIdx = -1;\n\tlet bestScore = NEAR_DUP_THRESHOLD;\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tconst line = lines[i].trim();\n\t\tif (!line) continue;\n\t\t// Never supersede structural Markdown (headings, list markers as headings) — a fact must not\n\t\t// silently overwrite section structure.\n\t\tif (line.startsWith(\"#\")) continue;\n\t\tconst score = jaccard(contentTokens, tokenize(line));\n\t\tif (score >= bestScore) {\n\t\t\tbestScore = score;\n\t\t\tbestIdx = i;\n\t\t}\n\t}\n\tif (bestIdx === -1) return null;\n\tlines[bestIdx] = content;\n\treturn lines.join(\"\\n\");\n}\n\nconst memorySchema = Type.Object({\n\taction: Type.Union([Type.Literal(\"add\"), Type.Literal(\"replace\"), Type.Literal(\"remove\"), Type.Literal(\"list\")], {\n\t\tdescription: \"Action to perform: add new content, replace existing content, or remove content\",\n\t}),\n\ttarget: Type.Union([Type.Literal(\"memory\"), Type.Literal(\"user\"), Type.Literal(\"okf\")], {\n\t\tdescription: \"Target: 'memory' for MEMORY.md, 'user' for USER.md, or 'okf' for structured project memory\",\n\t}),\n\tcontent: Type.Optional(\n\t\tType.String({\n\t\t\tmaxLength: OKF_MEMORY_LIMITS.bodyChars,\n\t\t\tdescription: \"Content to write (required for add/replace)\",\n\t\t}),\n\t),\n\ttitle: Type.Optional(\n\t\tType.String({\n\t\t\tminLength: 1,\n\t\t\tmaxLength: OKF_MEMORY_LIMITS.titleChars,\n\t\t\tdescription: \"Structured OKF title (required when target is 'okf')\",\n\t\t}),\n\t),\n\toldContent: Type.Optional(\n\t\tType.String({ description: \"Exact substring to replace or remove (required for 'replace' or 'remove')\" }),\n\t),\n\ttype: Type.Optional(\n\t\tType.Union(\n\t\t\tPI_OKF_TYPES.map((value) => Type.Literal(value)) as [\n\t\t\t\tReturnType<typeof Type.Literal>,\n\t\t\t\t...ReturnType<typeof Type.Literal>[],\n\t\t\t],\n\t\t\t{\n\t\t\t\tdescription: \"Structured OKF type (required when target is 'okf')\",\n\t\t\t},\n\t\t),\n\t),\n\tdescription: Type.Optional(\n\t\tType.String({\n\t\t\tminLength: 1,\n\t\t\tmaxLength: OKF_MEMORY_LIMITS.descriptionChars,\n\t\t\tdescription: \"Structured OKF summary (required when target is 'okf')\",\n\t\t}),\n\t),\n\tscope: Type.Optional(Type.Literal(\"project\", { description: \"Structured OKF records are project-scoped\" })),\n\ttags: Type.Optional(\n\t\tType.Array(Type.String({ minLength: 1, maxLength: OKF_MEMORY_LIMITS.tagChars }), {\n\t\t\tmaxItems: OKF_MEMORY_LIMITS.tagCount,\n\t\t\tuniqueItems: true,\n\t\t\tdescription: \"Structured OKF tags\",\n\t\t}),\n\t),\n\tevidenceRefs: Type.Optional(\n\t\tType.Array(Type.String({ minLength: 1, maxLength: OKF_MEMORY_LIMITS.evidenceRefChars }), {\n\t\t\tminItems: 1,\n\t\t\tmaxItems: OKF_MEMORY_LIMITS.evidenceRefCount,\n\t\t\tuniqueItems: true,\n\t\t\tdescription: \"Evidence references for structured OKF\",\n\t\t}),\n\t),\n\texpectedDigest: Type.Optional(\n\t\tType.String({ pattern: \"^[a-f0-9]{64}$\", description: \"Optional conflict guard for structured removal\" }),\n\t),\n});\n\ntype MemoryParams = Static<typeof memorySchema>;\n\nexport interface FileStoreProviderOptions {\n\tonDurableMemoryChanged?: () => void;\n\t/** Test seam between loss-safe OKF creation and exact hot-memory removal. */\n\tbeforeOrganizeHotRemoval?: () => void | Promise<void>;\n}\n\nexport type StructuredReflectionWrite =\n\t| {\n\t\t\tkind: \"okf_add\";\n\t\t\ttype: PiOkfType;\n\t\t\ttitle: string;\n\t\t\tdescription: string;\n\t\t\ttext: string;\n\t\t\ttags?: string[];\n\t\t\tevidenceRefs: string[];\n\t }\n\t| {\n\t\t\tkind: \"okf_organize\";\n\t\t\ttype: PiOkfType;\n\t\t\ttitle: string;\n\t\t\tdescription: string;\n\t\t\ttext: string;\n\t\t\tsourceText: string;\n\t\t\ttags?: string[];\n\t\t\tevidenceRefs: string[];\n\t };\n\nexport interface StructuredReflectionApplyResult {\n\tapplied: boolean;\n\tcreated: boolean;\n\tdigest?: string;\n\tsourceRemoved?: boolean;\n\terror?: string;\n}\n\nexport interface StructuredReflectionRollback {\n\ttype: PiOkfType;\n\ttitle: string;\n\texpectedDigest?: string;\n\tsourceText?: string;\n\tremoveRecord: boolean;\n}\n\nexport const FILE_STORE_MEMORY_SYSTEM_NOTE =\n\t\"[System Note: Below is a snapshot of persistent memory. Proactively record verified reusable project facts and user preferences with the 'memory' tool. Keep MEMORY.md for compact hot facts, USER.md for preferences, and use target 'okf' for durable project decisions, architecture, rules, findings, and references. Never store transient noise.]\";\n\ninterface ManagedMemoryState {\n\tversion: 1;\n\tcommittedDigest: string;\n\tpendingDigest?: string;\n}\n\ntype ManagedMemoryStateRead =\n\t| { status: \"missing\" }\n\t| { status: \"valid\"; state: ManagedMemoryState }\n\t| { status: \"invalid\"; raw: string };\n\nfunction contentDigest(content: string): string {\n\treturn createHash(\"sha256\").update(content, \"utf8\").digest(\"hex\");\n}\n\nfunction removeExactHotMemoryItem(existing: string, sourceText: string): string | undefined {\n\tif (sourceText.length === 0) return undefined;\n\tconst memoryLines = existing.split(\"\\n\");\n\tconst sourceLines = sourceText.split(\"\\n\");\n\tconst start = memoryLines.findIndex((_, index) =>\n\t\tsourceLines.every((line, offset) => memoryLines[index + offset] === line),\n\t);\n\tif (start === -1) return undefined;\n\tmemoryLines.splice(start, sourceLines.length);\n\treturn memoryLines.join(\"\\n\");\n}\n\nfunction parseManagedMemoryState(raw: string): ManagedMemoryState | undefined {\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(raw);\n\t} catch {\n\t\treturn undefined;\n\t}\n\tif (typeof parsed !== \"object\" || parsed === null) return undefined;\n\tconst record = parsed as Record<string, unknown>;\n\tif (record.version !== 1 || typeof record.committedDigest !== \"string\") return undefined;\n\tif (record.pendingDigest !== undefined && typeof record.pendingDigest !== \"string\") return undefined;\n\treturn {\n\t\tversion: 1,\n\t\tcommittedDigest: record.committedDigest,\n\t\t...(typeof record.pendingDigest === \"string\" ? { pendingDigest: record.pendingDigest } : {}),\n\t};\n}\n\nasync function readManagedMemoryState(statePath: string): Promise<ManagedMemoryStateRead> {\n\ttry {\n\t\tconst raw = await fs.readFile(statePath, \"utf8\");\n\t\tconst state = parseManagedMemoryState(raw);\n\t\treturn state ? { status: \"valid\", state } : { status: \"invalid\", raw };\n\t} catch (error) {\n\t\tif (isMissingFileError(error)) return { status: \"missing\" };\n\t\tthrow error;\n\t}\n}\n\nfunction serializeManagedMemoryState(state: ManagedMemoryState): string {\n\treturn `${JSON.stringify(state)}\\n`;\n}\n\nasync function writeManagedMemoryState(statePath: string, state: ManagedMemoryState): Promise<void> {\n\tawait writeFileAtomic(statePath, serializeManagedMemoryState(state), { mode: 0o600 });\n}\n\nfunction reconcileManagedMemoryState(\n\tcurrentDigest: string,\n\tstate: ManagedMemoryState,\n): { recognized: true; state: ManagedMemoryState; changed: boolean } | { recognized: false } {\n\tif (currentDigest === state.committedDigest) {\n\t\tif (state.pendingDigest === undefined) return { recognized: true, state, changed: false };\n\t\treturn {\n\t\t\trecognized: true,\n\t\t\tstate: { version: 1, committedDigest: state.committedDigest },\n\t\t\tchanged: true,\n\t\t};\n\t}\n\tif (state.pendingDigest !== undefined && currentDigest === state.pendingDigest) {\n\t\treturn {\n\t\t\trecognized: true,\n\t\t\tstate: { version: 1, committedDigest: state.pendingDigest },\n\t\t\tchanged: true,\n\t\t};\n\t}\n\treturn { recognized: false };\n}\n\nfunction fitMemoryBlockToBudget(block: string, budget: MemoryPromptBudget | undefined): string {\n\tif (budget === undefined) return block;\n\tif (!budget.enabled || budget.maxLines <= 0 || budget.maxChars <= 0) return \"\";\n\tif (block.split(\"\\n\").length <= budget.maxLines && block.length <= budget.maxChars) return block;\n\t// Micro-context profiles deliberately omit a block that cannot fit whole. Larger constrained\n\t// profiles retain a bounded head and say explicitly that more memory exists on disk.\n\tif (budget.compact) return \"\";\n\n\tconst marker = \"[…memory truncated for capability budget; full files remain on disk]\";\n\tif (budget.maxLines < 2 || budget.maxChars <= marker.length + 1) return \"\";\n\tconst lines: string[] = [];\n\tlet chars = 0;\n\tconst contentCharLimit = budget.maxChars - marker.length - 1;\n\tfor (const line of block.split(\"\\n\")) {\n\t\tif (lines.length >= budget.maxLines - 1) break;\n\t\tconst separatorChars = lines.length > 0 ? 1 : 0;\n\t\tconst remaining = contentCharLimit - chars - separatorChars;\n\t\tif (remaining <= 0) break;\n\t\tconst rendered = line.length <= remaining ? line : `${line.slice(0, Math.max(0, remaining - 1))}…`;\n\t\tlines.push(rendered);\n\t\tchars += separatorChars + rendered.length;\n\t\tif (rendered.length !== line.length) break;\n\t}\n\tif (lines.length === 0) return \"\";\n\tlines.push(marker);\n\treturn lines.join(\"\\n\");\n}\n\nexport class FileStoreProvider implements MemoryProvider {\n\tpublic readonly name = \"file-store\";\n\tpublic readonly egress = \"local\";\n\n\tprivate ctx?: MemoryLifecycleContext;\n\tprivate memoryFilePath = \"\";\n\tprivate userFilePath = \"\";\n\tprivate memoryStatePath = \"\";\n\tprivate userStatePath = \"\";\n\n\tprivate lastWrittenMemory = \"\";\n\tprivate lastWrittenUser = \"\";\n\tprivate userArchive?: UserMemoryArchive;\n\tprivate okfStore?: OkfProjectMemoryStore;\n\tprivate readonly options: FileStoreProviderOptions;\n\n\t// Character budgets\n\tprivate static readonly BUDGET_MEMORY = 2200;\n\tprivate static readonly BUDGET_USER = 1375;\n\n\tconstructor(options: FileStoreProviderOptions = {}) {\n\t\tthis.options = options;\n\t}\n\n\tpublic isAvailable(): boolean {\n\t\treturn true;\n\t}\n\n\tpublic getCapabilities() {\n\t\treturn { surfaces: [\"context\" as const] };\n\t}\n\n\tpublic async initialize(_sessionId: string, ctx: MemoryLifecycleContext): Promise<void> {\n\t\tthis.ctx = ctx;\n\t\tthis.memoryFilePath = configFile(ctx.agentDir, \"MEMORY.md\");\n\t\tthis.userFilePath = configFile(ctx.agentDir, \"USER.md\");\n\t\tthis.memoryStatePath = managedMemoryStateFile(ctx.agentDir, \"MEMORY.md\");\n\t\tthis.userStatePath = managedMemoryStateFile(ctx.agentDir, \"USER.md\");\n\t\tthis.userArchive = new UserMemoryArchive(ctx.agentDir);\n\n\t\tawait fs.mkdir(ctx.agentDir, { recursive: true });\n\t\tthis.okfStore = new OkfProjectMemoryStore(ctx.agentDir, ctx.cwd);\n\t\t[this.lastWrittenMemory, this.lastWrittenUser] = await Promise.all([\n\t\t\tthis.initializeManagedFile(this.memoryFilePath, this.memoryStatePath),\n\t\t\tthis.initializeManagedFile(this.userFilePath, this.userStatePath),\n\t\t]);\n\t}\n\n\tprivate async initializeManagedFile(filePath: string, statePath: string): Promise<string> {\n\t\treturn withFileLock(filePath, async () => {\n\t\t\tlet current = \"\";\n\t\t\ttry {\n\t\t\t\tcurrent = await fs.readFile(filePath, \"utf8\");\n\t\t\t} catch (error) {\n\t\t\t\tif (!isMissingFileError(error)) throw error;\n\t\t\t\tawait writeFileAtomic(filePath, \"\", { mode: 0o600 });\n\t\t\t}\n\n\t\t\tconst currentDigest = contentDigest(current);\n\t\t\tconst stateRead = await readManagedMemoryState(statePath);\n\t\t\tif (stateRead.status === \"missing\") {\n\t\t\t\tawait writeManagedMemoryState(statePath, { version: 1, committedDigest: currentDigest });\n\t\t\t\treturn current;\n\t\t\t}\n\t\t\tif (stateRead.status === \"invalid\") {\n\t\t\t\tawait writeFileAtomic(`${statePath}.bak.${Date.now()}.${randomUUID()}`, stateRead.raw, { mode: 0o600 });\n\t\t\t\tawait writeManagedMemoryState(statePath, { version: 1, committedDigest: currentDigest });\n\t\t\t\treturn current;\n\t\t\t}\n\n\t\t\tconst reconciled = reconcileManagedMemoryState(currentDigest, stateRead.state);\n\t\t\tif (reconciled.recognized && reconciled.changed) {\n\t\t\t\tawait writeManagedMemoryState(statePath, reconciled.state);\n\t\t\t}\n\t\t\treturn current;\n\t\t});\n\t}\n\n\tpublic systemPromptBlock(budget?: MemoryPromptBudget): string {\n\t\tif (this.ctx?.isChildSession) return \"\";\n\t\tconst sanitize = (content: string) => {\n\t\t\t// Strip hidden/bidi-control chars before injecting memory into the prompt (defence in depth: the\n\t\t\t// write path already blocks them, but a file edited out-of-band could carry them). Strip #31.\n\t\t\tconst lines = stripInvisibleUnicode(content).cleaned.split(\"\\n\");\n\t\t\tconst sanitizedLines = lines.map((line) => {\n\t\t\t\tconst threats = scanContextFileThreats(line);\n\t\t\t\tif (threats.length > 0) {\n\t\t\t\t\treturn `[BLOCKED: potential threat detected (${threats.join(\", \")})]`;\n\t\t\t\t}\n\t\t\t\treturn line;\n\t\t\t});\n\t\t\treturn sanitizedLines.join(\"\\n\");\n\t\t};\n\n\t\t// Read-time budget guard (cost): the memory tool already caps writes at BUDGET_*, but a file edited\n\t\t// externally (or by any path that bypasses the tool) could be arbitrarily large and would then\n\t\t// bloat the system prompt on EVERY turn. Cap the injected view to the same budget so the per-turn\n\t\t// cost stays bounded; the file on disk is untouched and the model is told it was truncated.\n\t\tconst cap = (content: string, limit: number) => {\n\t\t\tif (content.length <= limit) return content;\n\t\t\treturn `${content.slice(0, limit)}\\n[…truncated to ${limit} chars for the prompt; full file is on disk]`;\n\t\t};\n\n\t\tconst mem = cap(sanitize(this.lastWrittenMemory), FileStoreProvider.BUDGET_MEMORY);\n\t\tconst usr = cap(sanitize(this.lastWrittenUser), FileStoreProvider.BUDGET_USER);\n\n\t\tconst blocks: string[] = [];\n\t\tif (mem.trim()) {\n\t\t\tblocks.push(`## MEMORY.md:\\n${mem}`);\n\t\t}\n\t\tif (usr.trim()) {\n\t\t\tblocks.push(`## USER.md:\\n${usr}`);\n\t\t}\n\n\t\tif (blocks.length === 0) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tconst block = `=== Persistent Memory (file-store) ===\\n${FILE_STORE_MEMORY_SYSTEM_NOTE}\\n\\n${blocks.join(\"\\n\\n\")}`;\n\t\treturn fitMemoryBlockToBudget(block, budget);\n\t}\n\n\tpublic async prefetch(_query: string): Promise<string> {\n\t\t// static system prompt block is sufficient for file-store default; no-op prefetch\n\t\treturn \"\";\n\t}\n\n\tpublic async shutdown(): Promise<void> {\n\t\t// no-op\n\t}\n\n\tprivate async executeMemoryCommand(\n\t\tparams: MemoryParams,\n\t\tsignal?: AbortSignal,\n\t): Promise<{\n\t\tdetails?: {\n\t\t\tsuccess?: boolean;\n\t\t\terror?: string;\n\t\t\tcreated?: boolean;\n\t\t\tdigest?: string;\n\t\t\tremoved?: boolean;\n\t\t};\n\t}> {\n\t\tconst tool = this.getToolDefinitions()[0];\n\t\tif (tool === undefined) return { details: { success: false, error: \"Memory tool unavailable\" } };\n\t\tconst result = await tool.execute(\"reflection-memory\", params, signal, undefined, undefined as never);\n\t\treturn result as {\n\t\t\tdetails?: {\n\t\t\t\tsuccess?: boolean;\n\t\t\t\terror?: string;\n\t\t\t\tcreated?: boolean;\n\t\t\t\tdigest?: string;\n\t\t\t\tremoved?: boolean;\n\t\t\t};\n\t\t};\n\t}\n\n\tprivate async hasExactHotMemoryItem(sourceText: string): Promise<boolean> {\n\t\treturn withFileLock(this.memoryFilePath, async () => {\n\t\t\tconst current = await fs.readFile(this.memoryFilePath, \"utf8\");\n\t\t\treturn removeExactHotMemoryItem(current, sourceText) !== undefined;\n\t\t});\n\t}\n\n\tprivate async removeExactHotMemoryItem(sourceText: string): Promise<{ success: boolean; error?: string }> {\n\t\ttry {\n\t\t\treturn await withFileLock(this.memoryFilePath, async () => {\n\t\t\t\tconst currentOnDisk = await fs.readFile(this.memoryFilePath, \"utf8\");\n\t\t\t\tconst currentDigest = contentDigest(currentOnDisk);\n\t\t\t\tconst stateRead = await readManagedMemoryState(this.memoryStatePath);\n\t\t\t\tlet managedState: ManagedMemoryState | undefined;\n\t\t\t\tif (stateRead.status === \"valid\") {\n\t\t\t\t\tconst reconciled = reconcileManagedMemoryState(currentDigest, stateRead.state);\n\t\t\t\t\tif (reconciled.recognized) {\n\t\t\t\t\t\tmanagedState = reconciled.state;\n\t\t\t\t\t\tif (reconciled.changed) await writeManagedMemoryState(this.memoryStatePath, reconciled.state);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!managedState) return { success: false, error: \"Drift detected\" };\n\n\t\t\t\tconst newContent = removeExactHotMemoryItem(currentOnDisk, sourceText);\n\t\t\t\tif (newContent === undefined) return { success: false, error: \"Exact hot-memory item was not found\" };\n\t\t\t\tconst newDigest = contentDigest(newContent);\n\t\t\t\tawait writeManagedMemoryState(this.memoryStatePath, {\n\t\t\t\t\tversion: 1,\n\t\t\t\t\tcommittedDigest: managedState.committedDigest,\n\t\t\t\t\tpendingDigest: newDigest,\n\t\t\t\t});\n\t\t\t\tawait writeFileAtomic(this.memoryFilePath, newContent, { mode: 0o600 });\n\t\t\t\tawait writeManagedMemoryState(this.memoryStatePath, { version: 1, committedDigest: newDigest });\n\t\t\t\tthis.lastWrittenMemory = newContent;\n\t\t\t\tthis.options.onDurableMemoryChanged?.();\n\t\t\t\treturn { success: true };\n\t\t\t});\n\t\t} catch (error) {\n\t\t\treturn { success: false, error: String(error) };\n\t\t}\n\t}\n\n\t/** Reflection-owned structured write. Organization is OKF-first, then exact hot-memory removal. */\n\tpublic async applyStructuredReflectionWrite(\n\t\twrite: StructuredReflectionWrite,\n\t\tsignal?: AbortSignal,\n\t): Promise<StructuredReflectionApplyResult> {\n\t\tif (write.kind === \"okf_organize\" && !(await this.hasExactHotMemoryItem(write.sourceText))) {\n\t\t\treturn {\n\t\t\t\tapplied: false,\n\t\t\t\tcreated: false,\n\t\t\t\tsourceRemoved: false,\n\t\t\t\terror: \"Exact hot-memory item was not found\",\n\t\t\t};\n\t\t}\n\t\tconst added = await this.executeMemoryCommand(\n\t\t\t{\n\t\t\t\taction: \"add\",\n\t\t\t\ttarget: \"okf\",\n\t\t\t\ttype: write.type,\n\t\t\t\ttitle: write.title,\n\t\t\t\tdescription: write.description,\n\t\t\t\tscope: \"project\",\n\t\t\t\tcontent: write.text,\n\t\t\t\ttags: write.tags,\n\t\t\t\tevidenceRefs: write.evidenceRefs,\n\t\t\t},\n\t\t\tsignal,\n\t\t);\n\t\tif (added.details?.success !== true) {\n\t\t\treturn { applied: false, created: false, error: added.details?.error ?? \"OKF write failed\" };\n\t\t}\n\t\tconst created = added.details.created === true;\n\t\tconst storedDigest = added.details.digest;\n\t\tif (write.kind === \"okf_add\") {\n\t\t\treturn {\n\t\t\t\tapplied: created,\n\t\t\t\tcreated,\n\t\t\t\t...(storedDigest ? { digest: storedDigest } : {}),\n\t\t\t\t...(!created ? { error: \"Exact OKF record already exists\" } : {}),\n\t\t\t};\n\t\t}\n\t\tawait this.options.beforeOrganizeHotRemoval?.();\n\t\tconst removed = await this.removeExactHotMemoryItem(write.sourceText);\n\t\tconst sourceRemoved = removed.success;\n\t\treturn {\n\t\t\t// A newly-created OKF record is a real durable change even if exact hot cleanup was\n\t\t\t// interrupted. This records a reversible partial apply instead of hiding landed data.\n\t\t\tapplied: created || sourceRemoved,\n\t\t\tcreated,\n\t\t\t...(storedDigest ? { digest: storedDigest } : {}),\n\t\t\tsourceRemoved,\n\t\t\t...(!sourceRemoved ? { error: removed.error ?? \"Hot-memory removal failed\" } : {}),\n\t\t};\n\t}\n\n\t/** Restore hot memory first, then conditionally remove the exact audited OKF bytes. */\n\tpublic async rollbackStructuredReflectionWrite(\n\t\trollback: StructuredReflectionRollback,\n\t\tsignal?: AbortSignal,\n\t): Promise<boolean> {\n\t\tif (rollback.sourceText !== undefined) {\n\t\t\tconst restored = await this.executeMemoryCommand(\n\t\t\t\t{ action: \"add\", target: \"memory\", content: rollback.sourceText },\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\tif (restored.details?.success !== true) return false;\n\t\t}\n\t\tif (!rollback.removeRecord) return true;\n\t\tconst removed = await this.executeMemoryCommand(\n\t\t\t{\n\t\t\t\taction: \"remove\",\n\t\t\t\ttarget: \"okf\",\n\t\t\t\ttype: rollback.type,\n\t\t\t\ttitle: rollback.title,\n\t\t\t\texpectedDigest: rollback.expectedDigest,\n\t\t\t},\n\t\t\tsignal,\n\t\t);\n\t\treturn removed.details?.success === true;\n\t}\n\n\tpublic getContextMarkers(): string[] {\n\t\treturn [];\n\t}\n\n\tpublic getToolDefinitions(): ToolDefinition[] {\n\t\tif (this.ctx?.isChildSession) return [];\n\t\treturn [\n\t\t\t{\n\t\t\t\tname: ROOT_MEMORY_TOOL_NAME,\n\t\t\t\tlabel: \"Persistent Memory Manager\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"Add, replace, or remove durable facts and preferences. Use target 'okf' with structured metadata for durable project decisions, architecture, rules, debugging findings, and references; USER.md overflow is migrated into indexed OKF shards.\",\n\t\t\t\tpromptSnippet: \"Persist verified facts; route durable project knowledge to structured OKF records.\",\n\t\t\t\tpromptGuidelines: [\n\t\t\t\t\t\"OKF=project decisions/rules/findings with type,title,summary,body,evidenceRefs; MEMORY=hot facts; USER=preferences.\",\n\t\t\t\t\t\"Workers gather evidence read-only; only the parent or its reflection writes memory. Repeatable procedures become skills via skillify.\",\n\t\t\t\t],\n\t\t\t\tparameters: memorySchema,\n\t\t\t\texecute: async (_toolCallId, params: MemoryParams, _signal, _onUpdate, _execCtx) => {\n\t\t\t\t\tconst {\n\t\t\t\t\t\taction,\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t\tcontent,\n\t\t\t\t\t\toldContent,\n\t\t\t\t\t\ttitle,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tdescription,\n\t\t\t\t\t\tscope,\n\t\t\t\t\t\ttags,\n\t\t\t\t\t\tevidenceRefs,\n\t\t\t\t\t\texpectedDigest,\n\t\t\t\t\t} = params;\n\n\t\t\t\t\t// Strict-scope injection guard on the high-privilege WRITE path (agy #31): a poisoned\n\t\t\t\t\t// memory entry persists across sessions and is injected into every future system prompt,\n\t\t\t\t\t// so block outright rather than strip. Hidden/bidi-control chars have no legitimate place\n\t\t\t\t\t// in a memory note, so reject those too.\n\t\t\t\t\tif ((action === \"add\" || action === \"replace\") && content !== undefined) {\n\t\t\t\t\t\tif (hasInvisibleUnicode(content)) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\t\ttext: \"Error: memory write rejected — contains hidden/bidirectional control characters.\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tdetails: { success: false, error: \"Invisible unicode in memory write\" },\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst threats = scanContextFileThreats(content, \"strict\");\n\t\t\t\t\t\tif (threats.length > 0) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\t\ttext: `Error: memory write rejected — potential injection/exfiltration detected (${threats.join(\", \")}).`,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tdetails: { success: false, error: \"Threat in memory write\" },\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (target === \"okf\") {\n\t\t\t\t\t\tif (action === \"list\") {\n\t\t\t\t\t\t\tif (this.okfStore === undefined) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"Error: Memory provider is not initialized.\" }],\n\t\t\t\t\t\t\t\t\tdetails: { success: false },\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst catalog = this.okfStore.list();\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: catalog || \"No structured OKF memory records found.\" }],\n\t\t\t\t\t\t\t\tdetails: { success: true },\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (action !== \"add\" && action !== \"remove\") {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\t\ttext: \"Error: structured OKF memory only supports action 'add' or 'remove'.\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tdetails: { success: false, error: \"Unsupported OKF action\" },\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (action === \"remove\") {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tthis.okfStore === undefined ||\n\t\t\t\t\t\t\t\ttype === undefined ||\n\t\t\t\t\t\t\t\ttitle === undefined ||\n\t\t\t\t\t\t\t\t!PI_OKF_TYPES.includes(type as PiOkfType)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"Error: OKF removal requires a valid type and title.\" }],\n\t\t\t\t\t\t\t\t\tdetails: { success: false, error: \"Incomplete OKF removal\" },\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst removed = await this.okfStore.remove(type as PiOkfType, title, expectedDigest);\n\t\t\t\t\t\t\t\tif (removed.removed) this.options.onDurableMemoryChanged?.();\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\t\t\ttext: removed.removed\n\t\t\t\t\t\t\t\t\t\t\t\t? \"Successfully removed structured OKF project memory.\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"Structured OKF project memory was already absent.\",\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\tdetails: { success: true, removed: removed.removed },\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\tconst error = String(err);\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Error: Failed to remove structured OKF memory: ${error}` }],\n\t\t\t\t\t\t\t\t\tdetails: { success: false, error: /ENOENT/.test(error) ? \"not found\" : error },\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\ttype === undefined ||\n\t\t\t\t\t\t\ttitle === undefined ||\n\t\t\t\t\t\t\tdescription === undefined ||\n\t\t\t\t\t\t\tscope !== \"project\" ||\n\t\t\t\t\t\t\tcontent === undefined ||\n\t\t\t\t\t\t\tevidenceRefs === undefined ||\n\t\t\t\t\t\t\tevidenceRefs.length === 0\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\t\ttext: \"Error: structured OKF memory requires type, title, description, scope, content, and evidenceRefs.\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tdetails: { success: false, error: \"Incomplete OKF memory\" },\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!PI_OKF_TYPES.includes(type as PiOkfType)) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: `Error: unsupported OKF type '${type}'.` }],\n\t\t\t\t\t\t\t\tdetails: { success: false, error: \"Unsupported OKF type\" },\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst validationErrors = validateOkfMemoryDocumentInput(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: type as PiOkfType,\n\t\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\t\tdescription,\n\t\t\t\t\t\t\t\tscope,\n\t\t\t\t\t\t\t\tbody: content,\n\t\t\t\t\t\t\t\ttags,\n\t\t\t\t\t\t\t\tevidenceRefs,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ projectOnly: true, requireEvidence: true },\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (validationErrors.length > 0) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\t\ttext: `Error: Invalid structured OKF memory: ${validationErrors.join(\"; \")}`,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tdetails: { success: false, error: \"Invalid OKF memory\" },\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst okfText = [type, title, description, scope, content, ...(tags ?? []), ...evidenceRefs].join(\n\t\t\t\t\t\t\t\"\\n\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (hasInvisibleUnicode(okfText)) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\t\ttext: \"Error: OKF write rejected — contains hidden/bidirectional control characters.\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tdetails: { success: false, error: \"Invisible unicode in OKF write\" },\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst threats = scanContextFileThreats(okfText, \"strict\");\n\t\t\t\t\t\tif (threats.length > 0) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\t\ttext: `Error: OKF write rejected — potential injection/exfiltration detected (${threats.join(\", \")}).`,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tdetails: { success: false, error: \"Threat in OKF write\" },\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tif (this.okfStore === undefined) throw new Error(\"Memory provider is not initialized.\");\n\t\t\t\t\t\t\tconst stored = await this.okfStore.put({\n\t\t\t\t\t\t\t\ttype: type as PiOkfType,\n\t\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\t\tdescription,\n\t\t\t\t\t\t\t\tscope,\n\t\t\t\t\t\t\t\tbody: content,\n\t\t\t\t\t\t\t\ttags,\n\t\t\t\t\t\t\t\tevidenceRefs,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (stored.created) this.options.onDurableMemoryChanged?.();\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\t\ttext: stored.created\n\t\t\t\t\t\t\t\t\t\t\t? \"Successfully added structured OKF project memory.\"\n\t\t\t\t\t\t\t\t\t\t\t: \"Structured OKF project memory already contained this exact record.\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tdetails: { success: true, created: stored.created, digest: stored.digest },\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t{ type: \"text\", text: `Error: Failed to write structured OKF memory: ${String(err)}` },\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tdetails: { success: false, error: String(err) },\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (action === \"list\") {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"Error: action 'list' is only supported for target 'okf'.\" }],\n\t\t\t\t\t\t\tdetails: { success: false, error: \"Unsupported list target\" },\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tconst filePath = target === \"memory\" ? this.memoryFilePath : this.userFilePath;\n\t\t\t\t\tconst statePath = target === \"memory\" ? this.memoryStatePath : this.userStatePath;\n\t\t\t\t\tconst budget = target === \"memory\" ? FileStoreProvider.BUDGET_MEMORY : FileStoreProvider.BUDGET_USER;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn await withFileLock(filePath, async () => {\n\t\t\t\t\t\t\tconst currentOnDisk = await fs.readFile(filePath, \"utf8\");\n\t\t\t\t\t\t\tconst currentDigest = contentDigest(currentOnDisk);\n\t\t\t\t\t\t\tconst stateRead = await readManagedMemoryState(statePath);\n\t\t\t\t\t\t\tlet managedState: ManagedMemoryState | undefined;\n\t\t\t\t\t\t\tif (stateRead.status === \"valid\") {\n\t\t\t\t\t\t\t\tconst reconciled = reconcileManagedMemoryState(currentDigest, stateRead.state);\n\t\t\t\t\t\t\t\tif (reconciled.recognized) {\n\t\t\t\t\t\t\t\t\tmanagedState = reconciled.state;\n\t\t\t\t\t\t\t\t\tif (reconciled.changed) await writeManagedMemoryState(statePath, reconciled.state);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!managedState) {\n\t\t\t\t\t\t\t\tconst backupPath = `${filePath}.bak.${Date.now()}`;\n\t\t\t\t\t\t\t\tawait writeFileAtomic(backupPath, currentOnDisk, { mode: 0o600 });\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\t\t\ttext: `Error: Drift detected. The memory file has been modified out-of-band by an external process. A backup was created at ${backupPath}. Operation aborted.`,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\tdetails: { success: false, error: \"Drift detected\" },\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// A peer session's committed write is authoritative. Refresh this provider's prompt\n\t\t\t\t\t\t\t// snapshot before applying the caller's mutation to that current content.\n\t\t\t\t\t\t\tif (target === \"memory\") this.lastWrittenMemory = currentOnDisk;\n\t\t\t\t\t\t\telse this.lastWrittenUser = currentOnDisk;\n\n\t\t\t\t\t\t\tlet newContent = currentOnDisk;\n\t\t\t\t\t\t\tlet archiveChanged = false;\n\t\t\t\t\t\t\tif (target === \"user\") {\n\t\t\t\t\t\t\t\tif (!this.userArchive) throw new Error(\"User memory archive is not initialized.\");\n\t\t\t\t\t\t\t\tif (action === \"add\") {\n\t\t\t\t\t\t\t\t\tif (content === undefined)\n\t\t\t\t\t\t\t\t\t\tthrow new Error(\"Parameter 'content' is required for action 'add'.\");\n\t\t\t\t\t\t\t\t\tconst result = await this.userArchive.apply(\n\t\t\t\t\t\t\t\t\t\tcurrentOnDisk,\n\t\t\t\t\t\t\t\t\t\t{ action, content },\n\t\t\t\t\t\t\t\t\t\tbudget,\n\t\t\t\t\t\t\t\t\t\tsupersedeNearDuplicateLine,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tnewContent = result.userContent;\n\t\t\t\t\t\t\t\t\tarchiveChanged = result.archiveChanged;\n\t\t\t\t\t\t\t\t} else if (action === \"replace\") {\n\t\t\t\t\t\t\t\t\tif (content === undefined || oldContent === undefined) {\n\t\t\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t\t\t\"Parameters 'content' and 'oldContent' are required for action 'replace'.\",\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tconst result = await this.userArchive.apply(\n\t\t\t\t\t\t\t\t\t\tcurrentOnDisk,\n\t\t\t\t\t\t\t\t\t\t{ action, content, oldContent },\n\t\t\t\t\t\t\t\t\t\tbudget,\n\t\t\t\t\t\t\t\t\t\tsupersedeNearDuplicateLine,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tnewContent = result.userContent;\n\t\t\t\t\t\t\t\t\tarchiveChanged = result.archiveChanged;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif (oldContent === undefined)\n\t\t\t\t\t\t\t\t\t\tthrow new Error(\"Parameter 'oldContent' is required for action 'remove'.\");\n\t\t\t\t\t\t\t\t\tconst result = await this.userArchive.apply(\n\t\t\t\t\t\t\t\t\t\tcurrentOnDisk,\n\t\t\t\t\t\t\t\t\t\t{ action, oldContent },\n\t\t\t\t\t\t\t\t\t\tbudget,\n\t\t\t\t\t\t\t\t\t\tsupersedeNearDuplicateLine,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tnewContent = result.userContent;\n\t\t\t\t\t\t\t\t\tarchiveChanged = result.archiveChanged;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (action === \"add\") {\n\t\t\t\t\t\t\t\tif (content === undefined) {\n\t\t\t\t\t\t\t\t\tthrow new Error(\"Parameter 'content' is required for action 'add'.\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst superseded = supersedeNearDuplicateLine(currentOnDisk, content);\n\t\t\t\t\t\t\t\tif (superseded !== null) {\n\t\t\t\t\t\t\t\t\tnewContent = superseded;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewContent =\n\t\t\t\t\t\t\t\t\t\tnewContent.endsWith(\"\\n\") || newContent === \"\"\n\t\t\t\t\t\t\t\t\t\t\t? `${newContent}${content}\\n`\n\t\t\t\t\t\t\t\t\t\t\t: `${newContent}\\n${content}\\n`;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (action === \"replace\") {\n\t\t\t\t\t\t\t\tif (content === undefined || oldContent === undefined) {\n\t\t\t\t\t\t\t\t\tthrow new Error(\"Parameters 'content' and 'oldContent' are required for action 'replace'.\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (!currentOnDisk.includes(oldContent)) {\n\t\t\t\t\t\t\t\t\tthrow new Error(`The content to replace ('oldContent') was not found in the file.`);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tnewContent = currentOnDisk.replace(oldContent, content);\n\t\t\t\t\t\t\t} else if (action === \"remove\") {\n\t\t\t\t\t\t\t\tif (oldContent === undefined) {\n\t\t\t\t\t\t\t\t\tthrow new Error(\"Parameter 'oldContent' is required for action 'remove'.\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (!currentOnDisk.includes(oldContent)) {\n\t\t\t\t\t\t\t\t\tthrow new Error(`The content to remove ('oldContent') was not found in the file.`);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tnewContent = currentOnDisk.replace(oldContent, \"\");\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (newContent.length > budget) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\t\t\ttext: `Error: Memory budget exceeded. ${target === \"memory\" ? \"MEMORY.md\" : \"USER.md\"} limit is ${budget} characters. Current operation would result in ${newContent.length} characters.`,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\tdetails: { success: false, error: \"Memory budget exceeded\" },\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (newContent !== currentOnDisk) {\n\t\t\t\t\t\t\t\tconst newDigest = contentDigest(newContent);\n\t\t\t\t\t\t\t\tawait writeManagedMemoryState(statePath, {\n\t\t\t\t\t\t\t\t\tversion: 1,\n\t\t\t\t\t\t\t\t\tcommittedDigest: managedState.committedDigest,\n\t\t\t\t\t\t\t\t\tpendingDigest: newDigest,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tawait writeFileAtomic(filePath, newContent, { mode: 0o600 });\n\t\t\t\t\t\t\t\tawait writeManagedMemoryState(statePath, { version: 1, committedDigest: newDigest });\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (target === \"memory\") this.lastWrittenMemory = newContent;\n\t\t\t\t\t\t\telse this.lastWrittenUser = newContent;\n\t\t\t\t\t\t\tif (archiveChanged || newContent !== currentOnDisk) this.options.onDurableMemoryChanged?.();\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\t\ttext: `Successfully updated ${target === \"memory\" ? \"MEMORY.md\" : \"USER.md\"}.`,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\tdetails: { success: true },\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\ttext: `Error: Failed to perform memory operation: ${String(err)}`,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdetails: { success: false, error: String(err) },\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\t}\n}\n"]}
@@ -0,0 +1,5 @@
1
+ /** Root memory owns mutation and lifecycle; workers may receive only the bounded query broker. */
2
+ export declare const ROOT_MEMORY_TOOL_NAME = "memory";
3
+ export declare const WORKER_MEMORY_READ_TOOL_NAME = "memory_read";
4
+ export declare const WORKER_ROOT_MEMORY_TOOL_NAMES: ReadonlySet<string>;
5
+ //# sourceMappingURL=worker-memory-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-memory-tools.d.ts","sourceRoot":"","sources":["../../../src/core/memory/worker-memory-tools.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,eAAO,MAAM,qBAAqB,WAAW,CAAC;AAC9C,eAAO,MAAM,4BAA4B,gBAAgB,CAAC;AAC1D,eAAO,MAAM,6BAA6B,EAAE,WAAW,CAAC,MAAM,CAAoC,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** Root memory owns mutation and lifecycle; workers may receive only the bounded query broker. */
2
+ export const ROOT_MEMORY_TOOL_NAME = "memory";
3
+ export const WORKER_MEMORY_READ_TOOL_NAME = "memory_read";
4
+ export const WORKER_ROOT_MEMORY_TOOL_NAMES = new Set([ROOT_MEMORY_TOOL_NAME]);
5
+ //# sourceMappingURL=worker-memory-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-memory-tools.js","sourceRoot":"","sources":["../../../src/core/memory/worker-memory-tools.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,MAAM,CAAC,MAAM,qBAAqB,GAAG,QAAQ,CAAC;AAC9C,MAAM,CAAC,MAAM,4BAA4B,GAAG,aAAa,CAAC;AAC1D,MAAM,CAAC,MAAM,6BAA6B,GAAwB,IAAI,GAAG,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC","sourcesContent":["/** Root memory owns mutation and lifecycle; workers may receive only the bounded query broker. */\nexport const ROOT_MEMORY_TOOL_NAME = \"memory\";\nexport const WORKER_MEMORY_READ_TOOL_NAME = \"memory_read\";\nexport const WORKER_ROOT_MEMORY_TOOL_NAMES: ReadonlySet<string> = new Set([ROOT_MEMORY_TOOL_NAME]);\n"]}
@@ -24,7 +24,8 @@ import { type MemoryRetrievalReport } from "./context/memory-retrieval.ts";
24
24
  import type { GoalState } from "./goals/goal-state.ts";
25
25
  import { MemoryManager } from "./memory/memory-manager.ts";
26
26
  import type { MemoryProvider } from "./memory/memory-provider.ts";
27
- import type { SettingsManager } from "./settings-manager.ts";
27
+ import { type StructuredReflectionApplyResult, type StructuredReflectionRollback, type StructuredReflectionWrite } from "./memory/providers/file-store.ts";
28
+ import { type SettingsManager } from "./settings-manager.ts";
28
29
  export interface MemoryControllerDeps {
29
30
  /** Memory-retrieval + prompt-inclusion settings (default-on gates for retrieval and surfacing). */
30
31
  getSettingsManager(): SettingsManager;
@@ -61,6 +62,8 @@ export declare class MemoryController {
61
62
  private _latestMemoryPromptInclusionReport;
62
63
  /** Plug-and-play memory subsystem. Recreated on each (re)initialize so reload is safe. */
63
64
  private _memoryManager;
65
+ /** Active generation's single durable file/OKF writer, also used by parent-owned reflection. */
66
+ private _fileStoreWriter;
64
67
  /** R4: tracks whether injected recall is actually used, to adapt the recall gate. */
65
68
  private readonly _effectivenessTracker;
66
69
  /** Memory providers registered by extensions via pi.registerMemoryProvider, applied on (re)init. */
@@ -157,8 +160,14 @@ export declare class MemoryController {
157
160
  shouldAttemptRecall(text: string): boolean;
158
161
  /** Legacy recall prefetch with the same hard-off and explicit external-egress policy as context retrieval. */
159
162
  prefetchRecall(query: string): Promise<string>;
163
+ /** Fresh bounded OKF snapshot for reflection's confront-before-write pass. */
164
+ getFreshOkfMemoryForReflection(): string;
160
165
  /** Bounded, read-only memory view for an explicitly authorized delegated worker. */
161
166
  readMemoryForLane(query: string): Promise<string>;
167
+ /** Parent reflection's only structured-memory mutation port. Workers never receive this capability. */
168
+ applyStructuredReflectionWrite(write: StructuredReflectionWrite, signal?: AbortSignal): Promise<StructuredReflectionApplyResult>;
169
+ /** Parent-owned inverse for an audited structured reflection write. */
170
+ rollbackStructuredReflectionWrite(rollback: StructuredReflectionRollback, signal?: AbortSignal): Promise<boolean>;
162
171
  /** R4: score whether the agent actually used an injected recall page, so the recall gate can adapt. */
163
172
  recordRecallOutcome(recallText: string, queryText: string, responseText: string): void;
164
173
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"memory-controller.d.ts","sourceRoot":"","sources":["../../src/core/memory-controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-controller.d.ts","sourceRoot":"","sources":["../../src/core/memory-controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,2BAA2B,CAAC;AAM7E,OAAO,EAEN,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAE/B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACN,KAAK,cAAc,IAAI,qBAAqB,EAG5C,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,KAAK,qBAAqB,EAA4B,MAAM,+BAA+B,CAAC;AAGrG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAGN,KAAK,+BAA+B,EACpC,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EAAmC,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AA0C9F,MAAM,WAAW,oBAAoB;IACpC,mGAAmG;IACnG,kBAAkB,IAAI,eAAe,CAAC;IACtC,8EAA8E;IAC9E,YAAY,IAAI,MAAM,CAAC;IACvB,mFAAmF;IACnF,WAAW,IAAI,MAAM,CAAC;IACtB,yDAAyD;IACzD,MAAM,IAAI,MAAM,CAAC;IACjB,4DAA4D;IAC5D,YAAY,IAAI,MAAM,CAAC;IACvB,oFAAoF;IACpF,cAAc,IAAI,OAAO,CAAC;IAC1B,iGAAiG;IACjG,mBAAmB,IAAI,IAAI,CAAC;IAC5B,sEAAsE;IACtE,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAAC;IACvC,yEAAyE;IACzE,YAAY,IAAI,SAAS,GAAG,SAAS,CAAC;CACtC;AAED,iFAAiF;AACjF,MAAM,WAAW,8BAA8B;IAC9C,sBAAsB,EAAE,cAAc,EAAE,CAAC;IACzC,6BAA6B,EAAE,qBAAqB,EAAE,CAAC;IACvD,iBAAiB,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACrD,uBAAuB,EAAE,qBAAqB,GAAG,SAAS,CAAC;CAC3D;AAED,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,kBAAkB,CAAgD;IAC1E,OAAO,CAAC,wBAAwB,CAAgD;IAChF,OAAO,CAAC,mBAAmB,CAAgD;IAC3E,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,4BAA4B,CAAgD;IACpF,OAAO,CAAC,kCAAkC,CAAsD;IAChG,0FAA0F;IAC1F,OAAO,CAAC,cAAc,CAAsC;IAC5D,gGAAgG;IAChG,OAAO,CAAC,gBAAgB,CAAgC;IACxD,qFAAqF;IACrF,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA8B;IACpE,oGAAoG;IACpG,OAAO,CAAC,uBAAuB,CAAwB;IACvD,8FAA8F;IAC9F,OAAO,CAAC,8BAA8B,CAA+B;IACrE,4EAA4E;IAC5E,OAAO,CAAC,cAAc,CAAoC;IAC1D,OAAO,CAAC,gBAAgB,CAA4B;IAEpD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuB;IAE5C,YAAY,IAAI,EAAE,oBAAoB,EAErC;IAED,0GAA0G;IAC1G,gBAAgB,IAAI,aAAa,CAEhC;IAED,sHAAsH;IACtH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAW9D;IAED,0GAA0G;IACpG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAGrC;IAED,oGAAoG;IACpG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAQxB;IAED;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAIrB;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,2BAA2B;IAQnC,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,6BAA6B;IASrC;;;;;;;;;;OAUG;IACG,kBAAkB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAmDjF;IAED,uFAAuF;IACvF,wBAAwB,IAAI,qBAAqB,CAEhD;IAED,OAAO,CAAC,wBAAwB;IAqBhC,OAAO,CAAC,iBAAiB;IAUzB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,8BAA8B,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,qBAAqB,GAAG,YAAY,EAAE,CAsFtG;IAED,kHAAkH;IAClH,8BAA8B,IAAI,2BAA2B,CAE5D;IAED;;;;;OAKG;IACH,yBAAyB,IAAI;QAC5B,SAAS,EAAE,0BAA0B,CAAC;QACtC,eAAe,EAAE,2BAA2B,CAAC;KAC7C,CAMA;IAED;;;;OAIG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAWzC;IAED,8GAA8G;IACxG,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQnD;IAED,8EAA8E;IAC9E,8BAA8B,IAAI,MAAM,CAuBvC;IAED,oFAAoF;IAC9E,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA6BtD;IAED,uGAAuG;IACjG,8BAA8B,CACnC,KAAK,EAAE,yBAAyB,EAChC,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,+BAA+B,CAAC,CAK1C;IAED,uEAAuE;IACjE,iCAAiC,CACtC,QAAQ,EAAE,4BAA4B,EACtC,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,OAAO,CAAC,CAGlB;IAED,uGAAuG;IACvG,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAErF;IAED;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CA4ChC;IAED,mGAAmG;IACnG,sBAAsB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAIrD;IAED,sFAAsF;IACtF,6BAA6B,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAInE;IAED,oBAAoB,IAAI,8BAA8B,CAOrD;IAED,qBAAqB,CAAC,QAAQ,EAAE,8BAA8B,GAAG,IAAI,CAKpE;IAED,0GAA0G;IAC1G,qBAAqB,IAAI,IAAI,CAK5B;CACD"}
@@ -27,12 +27,13 @@ import { resolveMemoryPromptBudget } from "./context/memory-prompt-budget.js";
27
27
  import { DEFAULT_EXTERNAL_MEMORY_EGRESS_POLICY, DEFAULT_LOCAL_MEMORY_EGRESS_POLICY, } from "./context/memory-provider-contract.js";
28
28
  import { retrieveMemoryForContext } from "./context/memory-retrieval.js";
29
29
  import { composeTieredMemoryPromptBlock } from "./context/memory-tier-composer.js";
30
- import { createOkfMemoryProvider } from "./context/okf-memory-provider.js";
30
+ import { createOkfMemoryProvider, loadOkfMemoryBundle } from "./context/okf-memory-provider.js";
31
31
  import { EffectivenessTracker } from "./memory/effectiveness-tracker.js";
32
32
  import { MemoryManager } from "./memory/memory-manager.js";
33
- import { FILE_STORE_MEMORY_SYSTEM_NOTE, FileStoreProvider } from "./memory/providers/file-store.js";
33
+ import { FILE_STORE_MEMORY_SYSTEM_NOTE, FileStoreProvider, } from "./memory/providers/file-store.js";
34
34
  import { TranscriptRecallProvider } from "./memory/providers/transcript-recall.js";
35
35
  import { wrapUntrustedText } from "./security/untrusted-boundary.js";
36
+ import { getDirectoryResourceProfileInfo } from "./settings-manager.js";
36
37
  /**
37
38
  * Text of the most recent user message, or "" if there is none (e.g. goal-continuation
38
39
  * turns with no new user input). An empty query is still valid: standing user preferences may
@@ -115,6 +116,7 @@ export class MemoryController {
115
116
  /** Flush write-side lifecycle hooks before releasing provider resources. Idempotent per session. */
116
117
  shutdown() {
117
118
  this._shutdownPromise ??= (async () => {
119
+ this._fileStoreWriter = undefined;
118
120
  await this._lifecycleTail;
119
121
  await this._memoryManager.onSessionEnd();
120
122
  await this._memoryManager.shutdownAll();
@@ -137,7 +139,12 @@ export class MemoryController {
137
139
  * creation; `createOkfMemoryProvider` itself never writes/mkdirs either way).
138
140
  */
139
141
  _getMemoryOkfProvider() {
140
- this._memoryOkfProvider ??= createOkfMemoryProvider({ rootDir: this._memoryOkfDir() });
142
+ const project = getDirectoryResourceProfileInfo(this.deps.getCwd(), this.deps.getAgentDir());
143
+ this._memoryOkfProvider ??= createOkfMemoryProvider({
144
+ rootDir: this._memoryOkfDir(),
145
+ projectId: project.hash,
146
+ projectRoot: project.root,
147
+ });
141
148
  return this._memoryOkfProvider;
142
149
  }
143
150
  _getFileStoreMemoryProvider() {
@@ -202,7 +209,10 @@ export class MemoryController {
202
209
  });
203
210
  const providers = this._shouldQueryFileStoreFallback(budget) ? [this._getFileStoreMemoryProvider()] : [];
204
211
  if (longTermDecision.shouldQuery) {
205
- providers.push(this._getMemoryOkfProvider(), ...this._pendingContextMemoryProviders);
212
+ providers.push(this._getMemoryOkfProvider(), ...this._pendingContextMemoryProviders.filter((provider) => provider.capabilities.localOnly));
213
+ if (longTermDecision.shouldQueryExternal !== false) {
214
+ providers.push(...this._pendingContextMemoryProviders.filter((provider) => !provider.capabilities.localOnly));
215
+ }
206
216
  const graph = this._getLocalGraphProvider();
207
217
  if (graph)
208
218
  providers.push(graph);
@@ -410,6 +420,32 @@ export class MemoryController {
410
420
  : DEFAULT_EXTERNAL_MEMORY_EGRESS_POLICY,
411
421
  });
412
422
  }
423
+ /** Fresh bounded OKF snapshot for reflection's confront-before-write pass. */
424
+ getFreshOkfMemoryForReflection() {
425
+ try {
426
+ const project = getDirectoryResourceProfileInfo(this.deps.getCwd(), this.deps.getAgentDir());
427
+ const entries = loadOkfMemoryBundle({
428
+ rootDir: this._memoryOkfDir(),
429
+ projectId: project.hash,
430
+ projectRoot: project.root,
431
+ maxDocuments: 64,
432
+ }).entries;
433
+ const snapshot = entries
434
+ .map(({ relativePath, parsed }) => {
435
+ const item = parsed.item;
436
+ return item === undefined
437
+ ? ""
438
+ : `[OKF ${relativePath}] ${item.title ?? "Untitled"}: ${item.summary}\n${item.content ?? ""}`;
439
+ })
440
+ .filter((entry) => entry.length > 0)
441
+ .join("\n\n")
442
+ .slice(0, 12_000);
443
+ return snapshot.length > 0 ? wrapUntrustedText(snapshot, "memory:reflection-okf") : "";
444
+ }
445
+ catch {
446
+ return "";
447
+ }
448
+ }
413
449
  /** Bounded, read-only memory view for an explicitly authorized delegated worker. */
414
450
  async readMemoryForLane(query) {
415
451
  const settings = this.deps.getSettingsManager().getMemoryRetrievalSettings();
@@ -419,8 +455,18 @@ export class MemoryController {
419
455
  const staticBlock = this._memoryManager
420
456
  .buildSystemPromptBlockFresh(budget)
421
457
  .replace(FILE_STORE_MEMORY_SYSTEM_NOTE, "[Read-only snapshot for a delegated worker.]");
422
- const recalled = await this.prefetchRecall(query);
423
- const combined = [staticBlock, recalled]
458
+ const [recalled, okfReport] = await Promise.all([
459
+ this.prefetchRecall(query),
460
+ retrieveMemoryForContext([this._getMemoryOkfProvider()], { query, maxResults: Math.min(3, settings.maxResults) }, {
461
+ createdAtTurn: this.deps.getTurnIndex(),
462
+ maxResults: Math.min(3, settings.maxResults),
463
+ defaultLocalPolicy: DEFAULT_LOCAL_MEMORY_EGRESS_POLICY,
464
+ }),
465
+ ]);
466
+ const okf = okfReport.results
467
+ .map(({ item }) => `[OKF ${item.title ?? item.id}] ${item.summary}\n${item.content ?? ""}`)
468
+ .join("\n\n");
469
+ const combined = [staticBlock, okf, recalled]
424
470
  .filter((part) => part.trim().length > 0)
425
471
  .join("\n\n")
426
472
  .slice(0, 8000);
@@ -428,6 +474,19 @@ export class MemoryController {
428
474
  ? wrapUntrustedText(combined, "worker-memory")
429
475
  : "No relevant standing memory was found.";
430
476
  }
477
+ /** Parent reflection's only structured-memory mutation port. Workers never receive this capability. */
478
+ async applyStructuredReflectionWrite(write, signal) {
479
+ if (this.deps.isChildSession() || this._fileStoreWriter === undefined) {
480
+ return { applied: false, created: false, error: "Structured memory writes are unavailable." };
481
+ }
482
+ return this._fileStoreWriter.applyStructuredReflectionWrite(write, signal);
483
+ }
484
+ /** Parent-owned inverse for an audited structured reflection write. */
485
+ async rollbackStructuredReflectionWrite(rollback, signal) {
486
+ if (this.deps.isChildSession() || this._fileStoreWriter === undefined)
487
+ return false;
488
+ return this._fileStoreWriter.rollbackStructuredReflectionWrite(rollback, signal);
489
+ }
431
490
  /** R4: score whether the agent actually used an injected recall page, so the recall gate can adapt. */
432
491
  recordRecallOutcome(recallText, queryText, responseText) {
433
492
  this._effectivenessTracker.recordRecallOutcome(recallText, queryText, responseText);
@@ -439,6 +498,7 @@ export class MemoryController {
439
498
  */
440
499
  async initialize() {
441
500
  try {
501
+ this._fileStoreWriter = undefined;
442
502
  await this._lifecycleTail;
443
503
  // Release the previous generation's providers (locks/handles) before recreating, so a
444
504
  // reload does not orphan the old MemoryManager. No-op on first init / for file-store.
@@ -446,13 +506,14 @@ export class MemoryController {
446
506
  this._localGraphProvider = undefined;
447
507
  this._localGraphResolved = false;
448
508
  const manager = new MemoryManager();
449
- manager.registerProvider(new FileStoreProvider({
509
+ const fileStoreWriter = new FileStoreProvider({
450
510
  onDurableMemoryChanged: () => {
451
511
  // OKF providers cache one bounded directory load. A USER.md overflow can create or
452
512
  // update a shard during this session, so discard only that read cache generation.
453
513
  this._memoryOkfProvider = undefined;
454
514
  },
455
- }));
515
+ });
516
+ manager.registerProvider(fileStoreWriter);
456
517
  // Bundled read-only cross-session recall (R3): indexes past-session transcripts and answers
457
518
  // prefetch() with a <memory_context> page. Never writes.
458
519
  manager.registerProvider(new TranscriptRecallProvider());
@@ -470,6 +531,9 @@ export class MemoryController {
470
531
  cwd: this.deps.getCwd(),
471
532
  isChildSession: this.deps.isChildSession(),
472
533
  });
534
+ this._fileStoreWriter = manager.getToolDefinitions().some((tool) => tool.name === "memory")
535
+ ? fileStoreWriter
536
+ : undefined;
473
537
  // Surface memory tools + the frozen memory block now that providers are initialized.
474
538
  // refreshToolRegistry() ends in setActiveToolsByName(), which rebuilds AND assigns the
475
539
  // system prompt (including the memory block), so no explicit _rebuildSystemPrompt is needed.