@roackb2/heddle 1.5.0 → 1.7.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 (462) hide show
  1. package/README.md +5 -0
  2. package/dist/examples/conversation-engine.js +10 -10
  3. package/dist/examples/conversation-engine.js.map +1 -1
  4. package/dist/examples/heartbeat-scheduler.js +2 -2
  5. package/dist/examples/heartbeat-scheduler.js.map +1 -1
  6. package/dist/examples/heartbeat.js +2 -2
  7. package/dist/examples/heartbeat.js.map +1 -1
  8. package/dist/examples/programmatic-loop.js +2 -2
  9. package/dist/examples/programmatic-loop.js.map +1 -1
  10. package/dist/examples/repo-investigator.js +4 -4
  11. package/dist/examples/repo-investigator.js.map +1 -1
  12. package/dist/src/cli/ask.d.ts.map +1 -1
  13. package/dist/src/cli/ask.js +5 -5
  14. package/dist/src/cli/ask.js.map +1 -1
  15. package/dist/src/cli/auth.d.ts +14 -7
  16. package/dist/src/cli/auth.d.ts.map +1 -1
  17. package/dist/src/cli/auth.js +75 -70
  18. package/dist/src/cli/auth.js.map +1 -1
  19. package/dist/src/cli/chat/adapters/conversation-activity-adapter.d.ts +1 -1
  20. package/dist/src/cli/chat/adapters/conversation-activity-adapter.d.ts.map +1 -1
  21. package/dist/src/cli/chat/adapters/conversation-activity-adapter.js +29 -19
  22. package/dist/src/cli/chat/adapters/conversation-activity-adapter.js.map +1 -1
  23. package/dist/src/cli/chat/adapters/slash-command-context.js +4 -4
  24. package/dist/src/cli/chat/adapters/slash-command-context.js.map +1 -1
  25. package/dist/src/cli/chat/commands/debug-snapshot-command.js +2 -2
  26. package/dist/src/cli/chat/commands/debug-snapshot-command.js.map +1 -1
  27. package/dist/src/cli/chat/components/ModelPickerPanel.d.ts +1 -1
  28. package/dist/src/cli/chat/components/ModelPickerPanel.js +1 -1
  29. package/dist/src/cli/chat/debug/tui-debug-snapshot.d.ts +1 -1
  30. package/dist/src/cli/chat/debug/tui-debug-snapshot.js +1 -1
  31. package/dist/src/cli/chat/hooks/controllers/run/tui-direct-shell-result.js +3 -3
  32. package/dist/src/cli/chat/hooks/controllers/run/tui-direct-shell-result.js.map +1 -1
  33. package/dist/src/cli/chat/hooks/controllers/run/tui-direct-shell.js +2 -2
  34. package/dist/src/cli/chat/hooks/controllers/run/tui-direct-shell.js.map +1 -1
  35. package/dist/src/cli/chat/hooks/controllers/run/tui-run-loop-events.d.ts.map +1 -1
  36. package/dist/src/cli/chat/hooks/controllers/run/tui-run-loop-events.js +3 -3
  37. package/dist/src/cli/chat/hooks/controllers/run/tui-run-loop-events.js.map +1 -1
  38. package/dist/src/cli/chat/hooks/controllers/useAgentRunController.d.ts.map +1 -1
  39. package/dist/src/cli/chat/hooks/controllers/useAgentRunController.js +16 -6
  40. package/dist/src/cli/chat/hooks/controllers/useAgentRunController.js.map +1 -1
  41. package/dist/src/cli/chat/hooks/controllers/useChatAppController.d.ts.map +1 -1
  42. package/dist/src/cli/chat/hooks/controllers/useChatAppController.js +9 -10
  43. package/dist/src/cli/chat/hooks/controllers/useChatAppController.js.map +1 -1
  44. package/dist/src/cli/chat/hooks/controllers/usePromptSubmissionController.d.ts +1 -1
  45. package/dist/src/cli/chat/hooks/useChatPickers.d.ts +1 -1
  46. package/dist/src/cli/chat/hooks/useChatPickers.d.ts.map +1 -1
  47. package/dist/src/cli/chat/hooks/useChatPickers.js +7 -8
  48. package/dist/src/cli/chat/hooks/useChatPickers.js.map +1 -1
  49. package/dist/src/cli/chat/hooks/useChatStatusSummary.d.ts.map +1 -1
  50. package/dist/src/cli/chat/hooks/useChatStatusSummary.js +3 -4
  51. package/dist/src/cli/chat/hooks/useChatStatusSummary.js.map +1 -1
  52. package/dist/src/cli/chat/state/local-commands.d.ts +1 -1
  53. package/dist/src/cli/chat/state/local-commands.d.ts.map +1 -1
  54. package/dist/src/cli/chat/state/local-commands.js +6 -6
  55. package/dist/src/cli/chat/state/local-commands.js.map +1 -1
  56. package/dist/src/cli/chat/utils/format.d.ts +0 -1
  57. package/dist/src/cli/chat/utils/format.d.ts.map +1 -1
  58. package/dist/src/cli/chat/utils/format.js +0 -1
  59. package/dist/src/cli/chat/utils/format.js.map +1 -1
  60. package/dist/src/cli/chat/utils/runtime.d.ts.map +1 -1
  61. package/dist/src/cli/chat/utils/runtime.js +6 -6
  62. package/dist/src/cli/chat/utils/runtime.js.map +1 -1
  63. package/dist/src/cli/main.js +32 -27
  64. package/dist/src/cli/main.js.map +1 -1
  65. package/dist/src/cli/remote/control-plane-client.d.ts +3 -3
  66. package/dist/src/core/agent/budget/index.d.ts +2 -0
  67. package/dist/src/core/agent/budget/index.d.ts.map +1 -0
  68. package/dist/src/core/agent/budget/index.js +2 -0
  69. package/dist/src/core/agent/budget/index.js.map +1 -0
  70. package/dist/src/core/agent/budget/step-budget.d.ts +12 -0
  71. package/dist/src/core/agent/budget/step-budget.d.ts.map +1 -0
  72. package/dist/src/core/agent/budget/step-budget.js +21 -0
  73. package/dist/src/core/agent/budget/step-budget.js.map +1 -0
  74. package/dist/src/core/agent/context/run-context-builder.js +6 -6
  75. package/dist/src/core/agent/context/run-context-builder.js.map +1 -1
  76. package/dist/src/core/agent/tools/tool-dispatcher.d.ts +3 -4
  77. package/dist/src/core/agent/tools/tool-dispatcher.d.ts.map +1 -1
  78. package/dist/src/core/agent/tools/tool-dispatcher.js +2 -2
  79. package/dist/src/core/agent/tools/tool-dispatcher.js.map +1 -1
  80. package/dist/src/core/agent/types.d.ts +5 -5
  81. package/dist/src/core/agent/types.d.ts.map +1 -1
  82. package/dist/src/core/approvals/remembered-rules/schemas.d.ts +3 -3
  83. package/dist/src/core/auth/index.d.ts +4 -0
  84. package/dist/src/core/auth/index.d.ts.map +1 -0
  85. package/dist/src/core/auth/index.js +3 -0
  86. package/dist/src/core/auth/index.js.map +1 -0
  87. package/dist/src/core/auth/openai-oauth.d.ts +41 -61
  88. package/dist/src/core/auth/openai-oauth.d.ts.map +1 -1
  89. package/dist/src/core/auth/openai-oauth.js +264 -258
  90. package/dist/src/core/auth/openai-oauth.js.map +1 -1
  91. package/dist/src/core/auth/provider-credentials.d.ts +23 -51
  92. package/dist/src/core/auth/provider-credentials.d.ts.map +1 -1
  93. package/dist/src/core/auth/provider-credentials.js +69 -134
  94. package/dist/src/core/auth/provider-credentials.js.map +1 -1
  95. package/dist/src/core/auth/schemas.d.ts +54 -0
  96. package/dist/src/core/auth/schemas.d.ts.map +1 -0
  97. package/dist/src/core/auth/schemas.js +63 -0
  98. package/dist/src/core/auth/schemas.js.map +1 -0
  99. package/dist/src/core/auth/types.d.ts +80 -0
  100. package/dist/src/core/auth/types.d.ts.map +1 -0
  101. package/dist/src/core/auth/types.js +2 -0
  102. package/dist/src/core/auth/types.js.map +1 -0
  103. package/dist/src/core/chat/engine/compaction/service.js +2 -2
  104. package/dist/src/core/chat/engine/compaction/service.js.map +1 -1
  105. package/dist/src/core/chat/engine/compaction/summarizer/service.d.ts.map +1 -1
  106. package/dist/src/core/chat/engine/compaction/summarizer/service.js +9 -6
  107. package/dist/src/core/chat/engine/compaction/summarizer/service.js.map +1 -1
  108. package/dist/src/core/chat/engine/compaction/transcript-renderer.js +2 -2
  109. package/dist/src/core/chat/engine/compaction/transcript-renderer.js.map +1 -1
  110. package/dist/src/core/chat/engine/config.d.ts +2 -2
  111. package/dist/src/core/chat/engine/config.d.ts.map +1 -1
  112. package/dist/src/core/chat/engine/sessions/preferences/service.js +3 -3
  113. package/dist/src/core/chat/engine/sessions/preferences/service.js.map +1 -1
  114. package/dist/src/core/chat/engine/sessions/records/records.js +3 -3
  115. package/dist/src/core/chat/engine/sessions/records/records.js.map +1 -1
  116. package/dist/src/core/chat/engine/sessions/records/types.d.ts +2 -2
  117. package/dist/src/core/chat/engine/sessions/records/types.d.ts.map +1 -1
  118. package/dist/src/core/chat/engine/turns/host/host-normalizer.d.ts.map +1 -1
  119. package/dist/src/core/chat/engine/turns/host/host-normalizer.js +4 -4
  120. package/dist/src/core/chat/engine/turns/host/host-normalizer.js.map +1 -1
  121. package/dist/src/core/chat/engine/turns/memory/turn-memory-maintenance.d.ts.map +1 -1
  122. package/dist/src/core/chat/engine/turns/memory/turn-memory-maintenance.js +11 -7
  123. package/dist/src/core/chat/engine/turns/memory/turn-memory-maintenance.js.map +1 -1
  124. package/dist/src/core/chat/engine/turns/persistence/types.d.ts +3 -3
  125. package/dist/src/core/chat/engine/turns/persistence/types.d.ts.map +1 -1
  126. package/dist/src/core/chat/engine/turns/runtime/runtime-resolver.d.ts.map +1 -1
  127. package/dist/src/core/chat/engine/turns/runtime/runtime-resolver.js +12 -10
  128. package/dist/src/core/chat/engine/turns/runtime/runtime-resolver.js.map +1 -1
  129. package/dist/src/core/chat/engine/turns/types.d.ts +2 -3
  130. package/dist/src/core/chat/engine/turns/types.d.ts.map +1 -1
  131. package/dist/src/core/chat/engine/types.d.ts +4 -5
  132. package/dist/src/core/chat/engine/types.d.ts.map +1 -1
  133. package/dist/src/core/commands/slash/autocomplete.d.ts +9 -4
  134. package/dist/src/core/commands/slash/autocomplete.d.ts.map +1 -1
  135. package/dist/src/core/commands/slash/autocomplete.js +53 -48
  136. package/dist/src/core/commands/slash/autocomplete.js.map +1 -1
  137. package/dist/src/core/commands/slash/modules/auth/auth-commands.js +4 -4
  138. package/dist/src/core/commands/slash/modules/auth/auth-commands.js.map +1 -1
  139. package/dist/src/core/commands/slash/modules/compaction/compaction-commands.js +2 -2
  140. package/dist/src/core/commands/slash/modules/compaction/compaction-commands.js.map +1 -1
  141. package/dist/src/core/commands/slash/modules/drift/drift-commands.js +4 -4
  142. package/dist/src/core/commands/slash/modules/drift/drift-commands.js.map +1 -1
  143. package/dist/src/core/commands/slash/modules/heartbeat/heartbeat-commands.js +3 -3
  144. package/dist/src/core/commands/slash/modules/heartbeat/heartbeat-commands.js.map +1 -1
  145. package/dist/src/core/commands/slash/modules/model/model-commands.d.ts.map +1 -1
  146. package/dist/src/core/commands/slash/modules/model/model-commands.js +14 -15
  147. package/dist/src/core/commands/slash/modules/model/model-commands.js.map +1 -1
  148. package/dist/src/core/commands/slash/modules/session/session-commands.js +6 -6
  149. package/dist/src/core/commands/slash/modules/session/session-commands.js.map +1 -1
  150. package/dist/src/core/commands/slash/parser.d.ts +10 -5
  151. package/dist/src/core/commands/slash/parser.d.ts.map +1 -1
  152. package/dist/src/core/commands/slash/parser.js +42 -37
  153. package/dist/src/core/commands/slash/parser.js.map +1 -1
  154. package/dist/src/core/commands/slash/registry.d.ts +12 -3
  155. package/dist/src/core/commands/slash/registry.d.ts.map +1 -1
  156. package/dist/src/core/commands/slash/registry.js +50 -45
  157. package/dist/src/core/commands/slash/registry.js.map +1 -1
  158. package/dist/src/core/heartbeat/wake/service.d.ts.map +1 -1
  159. package/dist/src/core/heartbeat/wake/service.js +2 -3
  160. package/dist/src/core/heartbeat/wake/service.js.map +1 -1
  161. package/dist/src/core/llm/adapters/anthropic/anthropic-adapter.d.ts +21 -0
  162. package/dist/src/core/llm/adapters/anthropic/anthropic-adapter.d.ts.map +1 -0
  163. package/dist/src/core/llm/adapters/anthropic/anthropic-adapter.js +66 -0
  164. package/dist/src/core/llm/adapters/anthropic/anthropic-adapter.js.map +1 -0
  165. package/dist/src/core/llm/adapters/anthropic/anthropic-codec.d.ts +16 -0
  166. package/dist/src/core/llm/adapters/anthropic/anthropic-codec.d.ts.map +1 -0
  167. package/dist/src/core/llm/adapters/anthropic/anthropic-codec.js +64 -0
  168. package/dist/src/core/llm/adapters/anthropic/anthropic-codec.js.map +1 -0
  169. package/dist/src/core/llm/adapters/anthropic/anthropic-provider-adapter.d.ts +17 -0
  170. package/dist/src/core/llm/adapters/anthropic/anthropic-provider-adapter.d.ts.map +1 -0
  171. package/dist/src/core/llm/adapters/anthropic/anthropic-provider-adapter.js +20 -0
  172. package/dist/src/core/llm/adapters/anthropic/anthropic-provider-adapter.js.map +1 -0
  173. package/dist/src/core/llm/adapters/anthropic/index.d.ts +4 -0
  174. package/dist/src/core/llm/adapters/anthropic/index.d.ts.map +1 -0
  175. package/dist/src/core/llm/adapters/anthropic/index.js +3 -0
  176. package/dist/src/core/llm/adapters/anthropic/index.js.map +1 -0
  177. package/dist/src/core/llm/adapters/openai/index.d.ts +4 -0
  178. package/dist/src/core/llm/adapters/openai/index.d.ts.map +1 -0
  179. package/dist/src/core/llm/adapters/openai/index.js +3 -0
  180. package/dist/src/core/llm/adapters/openai/index.js.map +1 -0
  181. package/dist/src/core/llm/adapters/openai/openai-adapter.d.ts +53 -0
  182. package/dist/src/core/llm/adapters/openai/openai-adapter.d.ts.map +1 -0
  183. package/dist/src/core/llm/adapters/openai/openai-adapter.js +266 -0
  184. package/dist/src/core/llm/adapters/openai/openai-adapter.js.map +1 -0
  185. package/dist/src/core/llm/adapters/openai/openai-codec.d.ts +41 -0
  186. package/dist/src/core/llm/adapters/openai/openai-codec.d.ts.map +1 -0
  187. package/dist/src/core/llm/adapters/openai/openai-codec.js +169 -0
  188. package/dist/src/core/llm/adapters/openai/openai-codec.js.map +1 -0
  189. package/dist/src/core/llm/adapters/openai/openai-provider-adapter.d.ts +17 -0
  190. package/dist/src/core/llm/adapters/openai/openai-provider-adapter.d.ts.map +1 -0
  191. package/dist/src/core/llm/adapters/openai/openai-provider-adapter.js +20 -0
  192. package/dist/src/core/llm/adapters/openai/openai-provider-adapter.js.map +1 -0
  193. package/dist/src/core/llm/index.d.ts +9 -0
  194. package/dist/src/core/llm/index.d.ts.map +1 -0
  195. package/dist/src/core/llm/index.js +5 -0
  196. package/dist/src/core/llm/index.js.map +1 -0
  197. package/dist/src/core/llm/models/index.d.ts +5 -0
  198. package/dist/src/core/llm/models/index.d.ts.map +1 -0
  199. package/dist/src/core/llm/models/index.js +3 -0
  200. package/dist/src/core/llm/models/index.js.map +1 -0
  201. package/dist/src/core/llm/models/model-catalog.d.ts +23 -0
  202. package/dist/src/core/llm/models/model-catalog.d.ts.map +1 -0
  203. package/dist/src/core/llm/models/model-catalog.js +132 -0
  204. package/dist/src/core/llm/models/model-catalog.js.map +1 -0
  205. package/dist/src/core/llm/models/model-policy-service.d.ts +70 -0
  206. package/dist/src/core/llm/models/model-policy-service.d.ts.map +1 -0
  207. package/dist/src/core/llm/models/model-policy-service.js +137 -0
  208. package/dist/src/core/llm/models/model-policy-service.js.map +1 -0
  209. package/dist/src/core/llm/registry/builtin-llm-providers.d.ts +5 -0
  210. package/dist/src/core/llm/registry/builtin-llm-providers.d.ts.map +1 -0
  211. package/dist/src/core/llm/registry/builtin-llm-providers.js +16 -0
  212. package/dist/src/core/llm/registry/builtin-llm-providers.js.map +1 -0
  213. package/dist/src/core/llm/registry/index.d.ts +5 -0
  214. package/dist/src/core/llm/registry/index.d.ts.map +1 -0
  215. package/dist/src/core/llm/registry/index.js +4 -0
  216. package/dist/src/core/llm/registry/index.js.map +1 -0
  217. package/dist/src/core/llm/registry/llm-provider-registry.d.ts +17 -0
  218. package/dist/src/core/llm/registry/llm-provider-registry.d.ts.map +1 -0
  219. package/dist/src/core/llm/registry/llm-provider-registry.js +51 -0
  220. package/dist/src/core/llm/registry/llm-provider-registry.js.map +1 -0
  221. package/dist/src/core/llm/registry/provider-inference.d.ts +18 -0
  222. package/dist/src/core/llm/registry/provider-inference.d.ts.map +1 -0
  223. package/dist/src/core/llm/registry/provider-inference.js +41 -0
  224. package/dist/src/core/llm/registry/provider-inference.js.map +1 -0
  225. package/dist/src/core/llm/registry/types.d.ts +16 -0
  226. package/dist/src/core/llm/registry/types.d.ts.map +1 -0
  227. package/dist/src/core/llm/registry/types.js +2 -0
  228. package/dist/src/core/llm/registry/types.js.map +1 -0
  229. package/dist/src/core/llm/service.d.ts +15 -0
  230. package/dist/src/core/llm/service.d.ts.map +1 -0
  231. package/dist/src/core/llm/service.js +44 -0
  232. package/dist/src/core/llm/service.js.map +1 -0
  233. package/dist/src/core/llm/types.d.ts +18 -1
  234. package/dist/src/core/llm/types.d.ts.map +1 -1
  235. package/dist/src/core/memory/catalog.d.ts +22 -40
  236. package/dist/src/core/memory/catalog.d.ts.map +1 -1
  237. package/dist/src/core/memory/catalog.js +166 -155
  238. package/dist/src/core/memory/catalog.js.map +1 -1
  239. package/dist/src/core/memory/index.d.ts +14 -0
  240. package/dist/src/core/memory/index.d.ts.map +1 -0
  241. package/dist/src/core/memory/index.js +13 -0
  242. package/dist/src/core/memory/index.js.map +1 -0
  243. package/dist/src/core/memory/maintainer-prompt.d.ts +14 -0
  244. package/dist/src/core/memory/maintainer-prompt.d.ts.map +1 -0
  245. package/dist/src/core/memory/maintainer-prompt.js +58 -0
  246. package/dist/src/core/memory/maintainer-prompt.js.map +1 -0
  247. package/dist/src/core/memory/maintainer.d.ts +20 -44
  248. package/dist/src/core/memory/maintainer.d.ts.map +1 -1
  249. package/dist/src/core/memory/maintainer.js +124 -184
  250. package/dist/src/core/memory/maintainer.js.map +1 -1
  251. package/dist/src/core/memory/maintenance-integration.d.ts +22 -19
  252. package/dist/src/core/memory/maintenance-integration.d.ts.map +1 -1
  253. package/dist/src/core/memory/maintenance-integration.js +158 -163
  254. package/dist/src/core/memory/maintenance-integration.js.map +1 -1
  255. package/dist/src/core/memory/maintenance-repository.d.ts +27 -0
  256. package/dist/src/core/memory/maintenance-repository.d.ts.map +1 -0
  257. package/dist/src/core/memory/maintenance-repository.js +134 -0
  258. package/dist/src/core/memory/maintenance-repository.js.map +1 -0
  259. package/dist/src/core/memory/note-service.d.ts +23 -0
  260. package/dist/src/core/memory/note-service.d.ts.map +1 -0
  261. package/dist/src/core/memory/note-service.js +165 -0
  262. package/dist/src/core/memory/note-service.js.map +1 -0
  263. package/dist/src/core/memory/path-utils.d.ts +15 -0
  264. package/dist/src/core/memory/path-utils.d.ts.map +1 -0
  265. package/dist/src/core/memory/path-utils.js +31 -0
  266. package/dist/src/core/memory/path-utils.js.map +1 -0
  267. package/dist/src/core/memory/schemas.d.ts +116 -0
  268. package/dist/src/core/memory/schemas.d.ts.map +1 -0
  269. package/dist/src/core/memory/schemas.js +53 -0
  270. package/dist/src/core/memory/schemas.js.map +1 -0
  271. package/dist/src/core/memory/types.d.ts +149 -0
  272. package/dist/src/core/memory/types.d.ts.map +1 -0
  273. package/dist/src/core/memory/types.js +2 -0
  274. package/dist/src/core/memory/types.js.map +1 -0
  275. package/dist/src/core/memory/validation.d.ts +20 -38
  276. package/dist/src/core/memory/validation.d.ts.map +1 -1
  277. package/dist/src/core/memory/validation.js +98 -83
  278. package/dist/src/core/memory/validation.js.map +1 -1
  279. package/dist/src/core/memory/visibility.d.ts +19 -41
  280. package/dist/src/core/memory/visibility.d.ts.map +1 -1
  281. package/dist/src/core/memory/visibility.js +53 -153
  282. package/dist/src/core/memory/visibility.js.map +1 -1
  283. package/dist/src/core/observability/activity/conversation-activity-projector.d.ts +24 -0
  284. package/dist/src/core/observability/activity/conversation-activity-projector.d.ts.map +1 -0
  285. package/dist/src/core/observability/activity/conversation-activity-projector.js +146 -0
  286. package/dist/src/core/observability/activity/conversation-activity-projector.js.map +1 -0
  287. package/dist/src/core/observability/activity/index.d.ts +4 -0
  288. package/dist/src/core/observability/activity/index.d.ts.map +1 -0
  289. package/dist/src/core/observability/activity/index.js +3 -0
  290. package/dist/src/core/observability/activity/index.js.map +1 -0
  291. package/dist/src/core/observability/activity/tool-activity-summarizer.d.ts +15 -0
  292. package/dist/src/core/observability/activity/tool-activity-summarizer.d.ts.map +1 -0
  293. package/dist/src/core/observability/activity/tool-activity-summarizer.js +92 -0
  294. package/dist/src/core/observability/activity/tool-activity-summarizer.js.map +1 -0
  295. package/dist/src/core/observability/activity/types.d.ts +87 -0
  296. package/dist/src/core/observability/activity/types.d.ts.map +1 -0
  297. package/dist/src/core/observability/activity/types.js +2 -0
  298. package/dist/src/core/observability/activity/types.js.map +1 -0
  299. package/dist/src/core/observability/index.d.ts +6 -0
  300. package/dist/src/core/observability/index.d.ts.map +1 -0
  301. package/dist/src/core/observability/index.js +4 -0
  302. package/dist/src/core/observability/index.js.map +1 -0
  303. package/dist/src/core/observability/semantics/index.d.ts +2 -0
  304. package/dist/src/core/observability/semantics/index.d.ts.map +1 -0
  305. package/dist/src/core/observability/semantics/index.js +2 -0
  306. package/dist/src/core/observability/semantics/index.js.map +1 -0
  307. package/dist/src/core/observability/{semantic-conventions.d.ts → semantics/trace-semantics.d.ts} +1 -1
  308. package/dist/src/core/observability/semantics/trace-semantics.d.ts.map +1 -0
  309. package/dist/src/core/observability/{semantic-conventions.js → semantics/trace-semantics.js} +1 -1
  310. package/dist/src/core/observability/semantics/trace-semantics.js.map +1 -0
  311. package/dist/src/core/observability/summaries/default-trace-summarizers.d.ts +3 -0
  312. package/dist/src/core/observability/summaries/default-trace-summarizers.d.ts.map +1 -0
  313. package/dist/src/core/observability/summaries/default-trace-summarizers.js +29 -0
  314. package/dist/src/core/observability/summaries/default-trace-summarizers.js.map +1 -0
  315. package/dist/src/core/observability/summaries/index.d.ts +4 -0
  316. package/dist/src/core/observability/summaries/index.d.ts.map +1 -0
  317. package/dist/src/core/observability/summaries/index.js +3 -0
  318. package/dist/src/core/observability/summaries/index.js.map +1 -0
  319. package/dist/src/core/observability/summaries/trace-summary-service.d.ts +17 -0
  320. package/dist/src/core/observability/summaries/trace-summary-service.d.ts.map +1 -0
  321. package/dist/src/core/observability/summaries/trace-summary-service.js +32 -0
  322. package/dist/src/core/observability/summaries/trace-summary-service.js.map +1 -0
  323. package/dist/src/core/observability/summaries/types.d.ts +15 -0
  324. package/dist/src/core/observability/summaries/types.d.ts.map +1 -0
  325. package/dist/src/core/observability/summaries/types.js +2 -0
  326. package/dist/src/core/observability/summaries/types.js.map +1 -0
  327. package/dist/src/core/review/index.d.ts +3 -0
  328. package/dist/src/core/review/index.d.ts.map +1 -0
  329. package/dist/src/core/review/index.js +2 -0
  330. package/dist/src/core/review/index.js.map +1 -0
  331. package/dist/src/core/review/service.d.ts +22 -0
  332. package/dist/src/core/review/service.d.ts.map +1 -0
  333. package/dist/src/core/review/service.js +143 -0
  334. package/dist/src/core/review/service.js.map +1 -0
  335. package/dist/src/core/review/{diff-domain.d.ts → types.d.ts} +1 -3
  336. package/dist/src/core/review/types.d.ts.map +1 -0
  337. package/dist/src/core/review/types.js +2 -0
  338. package/dist/src/core/review/types.js.map +1 -0
  339. package/dist/src/core/runtime/credentials/service.d.ts +1 -1
  340. package/dist/src/core/runtime/credentials/service.d.ts.map +1 -1
  341. package/dist/src/core/runtime/credentials/service.js +8 -6
  342. package/dist/src/core/runtime/credentials/service.js.map +1 -1
  343. package/dist/src/core/runtime/loop/service.d.ts.map +1 -1
  344. package/dist/src/core/runtime/loop/service.js +14 -6
  345. package/dist/src/core/runtime/loop/service.js.map +1 -1
  346. package/dist/src/core/runtime/tools/service.js +2 -2
  347. package/dist/src/core/runtime/tools/service.js.map +1 -1
  348. package/dist/src/core/tools/execute-tool.d.ts +5 -4
  349. package/dist/src/core/tools/execute-tool.d.ts.map +1 -1
  350. package/dist/src/core/tools/execute-tool.js +23 -25
  351. package/dist/src/core/tools/execute-tool.js.map +1 -1
  352. package/dist/src/core/tools/index.d.ts +5 -0
  353. package/dist/src/core/tools/index.d.ts.map +1 -0
  354. package/dist/src/core/tools/index.js +4 -0
  355. package/dist/src/core/tools/index.js.map +1 -0
  356. package/dist/src/core/tools/registry.d.ts +8 -7
  357. package/dist/src/core/tools/registry.d.ts.map +1 -1
  358. package/dist/src/core/tools/registry.js +18 -21
  359. package/dist/src/core/tools/registry.js.map +1 -1
  360. package/dist/src/core/tools/toolkit.d.ts +9 -4
  361. package/dist/src/core/tools/toolkit.d.ts.map +1 -1
  362. package/dist/src/core/tools/toolkit.js +21 -16
  363. package/dist/src/core/tools/toolkit.js.map +1 -1
  364. package/dist/src/core/tools/toolkits/external-context/view-image.d.ts.map +1 -1
  365. package/dist/src/core/tools/toolkits/external-context/view-image.js +15 -9
  366. package/dist/src/core/tools/toolkits/external-context/view-image.js.map +1 -1
  367. package/dist/src/core/tools/toolkits/external-context/web-search.d.ts.map +1 -1
  368. package/dist/src/core/tools/toolkits/external-context/web-search.js +15 -9
  369. package/dist/src/core/tools/toolkits/external-context/web-search.js.map +1 -1
  370. package/dist/src/core/tools/toolkits/knowledge/memory-notes.d.ts +1 -1
  371. package/dist/src/core/tools/toolkits/knowledge/memory-notes.d.ts.map +1 -1
  372. package/dist/src/core/tools/toolkits/knowledge/memory-notes.js +48 -238
  373. package/dist/src/core/tools/toolkits/knowledge/memory-notes.js.map +1 -1
  374. package/dist/src/core/tools/toolkits/knowledge/record-knowledge.d.ts.map +1 -1
  375. package/dist/src/core/tools/toolkits/knowledge/record-knowledge.js +75 -105
  376. package/dist/src/core/tools/toolkits/knowledge/record-knowledge.js.map +1 -1
  377. package/dist/src/core/trace/format.d.ts +9 -3
  378. package/dist/src/core/trace/format.d.ts.map +1 -1
  379. package/dist/src/core/trace/format.js +106 -107
  380. package/dist/src/core/trace/format.js.map +1 -1
  381. package/dist/src/core/trace/index.d.ts +4 -0
  382. package/dist/src/core/trace/index.d.ts.map +1 -0
  383. package/dist/src/core/trace/index.js +3 -0
  384. package/dist/src/core/trace/index.js.map +1 -0
  385. package/dist/src/core/trace/recorder.d.ts +10 -7
  386. package/dist/src/core/trace/recorder.d.ts.map +1 -1
  387. package/dist/src/core/trace/recorder.js +15 -17
  388. package/dist/src/core/trace/recorder.js.map +1 -1
  389. package/dist/src/core/trace/types.d.ts +7 -0
  390. package/dist/src/core/trace/types.d.ts.map +1 -0
  391. package/dist/src/core/trace/types.js +2 -0
  392. package/dist/src/core/trace/types.js.map +1 -0
  393. package/dist/src/index.d.ts +23 -28
  394. package/dist/src/index.d.ts.map +1 -1
  395. package/dist/src/index.js +15 -15
  396. package/dist/src/index.js.map +1 -1
  397. package/dist/src/server/features/control-plane/controllers/ask.d.ts.map +1 -1
  398. package/dist/src/server/features/control-plane/controllers/ask.js +10 -8
  399. package/dist/src/server/features/control-plane/controllers/ask.js.map +1 -1
  400. package/dist/src/server/features/control-plane/controllers/chat-sessions-controller.js +5 -5
  401. package/dist/src/server/features/control-plane/controllers/chat-sessions-controller.js.map +1 -1
  402. package/dist/src/server/features/control-plane/controllers/chat-turn-review-presenter.js +3 -3
  403. package/dist/src/server/features/control-plane/controllers/chat-turn-review-presenter.js.map +1 -1
  404. package/dist/src/server/features/control-plane/controllers/memory.d.ts +2 -1
  405. package/dist/src/server/features/control-plane/controllers/memory.d.ts.map +1 -1
  406. package/dist/src/server/features/control-plane/controllers/memory.js +8 -7
  407. package/dist/src/server/features/control-plane/controllers/memory.js.map +1 -1
  408. package/dist/src/server/features/control-plane/controllers/workspace-diff.js +2 -2
  409. package/dist/src/server/features/control-plane/controllers/workspace-diff.js.map +1 -1
  410. package/dist/src/server/features/control-plane/router.d.ts +3 -3
  411. package/dist/src/server/features/control-plane/router.d.ts.map +1 -1
  412. package/dist/src/server/features/control-plane/router.js +5 -6
  413. package/dist/src/server/features/control-plane/router.js.map +1 -1
  414. package/dist/src/server/features/control-plane/types.d.ts +2 -2
  415. package/dist/src/server/features/control-plane/types.d.ts.map +1 -1
  416. package/dist/src/server/router.d.ts +3 -3
  417. package/dist/src/web/assets/{MonacoDiffViewer-F3AOHIps.js → MonacoDiffViewer-D_Fh9ndN.js} +1 -1
  418. package/dist/src/web/assets/index-B1wQ0pS4.js +87 -0
  419. package/dist/src/web/index.html +1 -1
  420. package/package.json +1 -1
  421. package/dist/src/core/llm/anthropic.d.ts +0 -7
  422. package/dist/src/core/llm/anthropic.d.ts.map +0 -1
  423. package/dist/src/core/llm/anthropic.js +0 -115
  424. package/dist/src/core/llm/anthropic.js.map +0 -1
  425. package/dist/src/core/llm/factory.d.ts +0 -14
  426. package/dist/src/core/llm/factory.d.ts.map +0 -1
  427. package/dist/src/core/llm/factory.js +0 -46
  428. package/dist/src/core/llm/factory.js.map +0 -1
  429. package/dist/src/core/llm/model-policy.d.ts +0 -63
  430. package/dist/src/core/llm/model-policy.d.ts.map +0 -1
  431. package/dist/src/core/llm/model-policy.js +0 -131
  432. package/dist/src/core/llm/model-policy.js.map +0 -1
  433. package/dist/src/core/llm/openai-models.d.ts +0 -17
  434. package/dist/src/core/llm/openai-models.d.ts.map +0 -1
  435. package/dist/src/core/llm/openai-models.js +0 -127
  436. package/dist/src/core/llm/openai-models.js.map +0 -1
  437. package/dist/src/core/llm/openai.d.ts +0 -31
  438. package/dist/src/core/llm/openai.d.ts.map +0 -1
  439. package/dist/src/core/llm/openai.js +0 -405
  440. package/dist/src/core/llm/openai.js.map +0 -1
  441. package/dist/src/core/llm/providers.d.ts +0 -3
  442. package/dist/src/core/llm/providers.d.ts.map +0 -1
  443. package/dist/src/core/llm/providers.js +0 -21
  444. package/dist/src/core/llm/providers.js.map +0 -1
  445. package/dist/src/core/observability/conversation-activity.d.ts +0 -116
  446. package/dist/src/core/observability/conversation-activity.d.ts.map +0 -1
  447. package/dist/src/core/observability/conversation-activity.js +0 -255
  448. package/dist/src/core/observability/conversation-activity.js.map +0 -1
  449. package/dist/src/core/observability/semantic-conventions.d.ts.map +0 -1
  450. package/dist/src/core/observability/semantic-conventions.js.map +0 -1
  451. package/dist/src/core/observability/trace-summarizers.d.ts +0 -23
  452. package/dist/src/core/observability/trace-summarizers.d.ts.map +0 -1
  453. package/dist/src/core/observability/trace-summarizers.js +0 -60
  454. package/dist/src/core/observability/trace-summarizers.js.map +0 -1
  455. package/dist/src/core/review/diff-domain.d.ts.map +0 -1
  456. package/dist/src/core/review/diff-domain.js +0 -134
  457. package/dist/src/core/review/diff-domain.js.map +0 -1
  458. package/dist/src/core/utils/budget.d.ts +0 -13
  459. package/dist/src/core/utils/budget.d.ts.map +0 -1
  460. package/dist/src/core/utils/budget.js +0 -22
  461. package/dist/src/core/utils/budget.js.map +0 -1
  462. package/dist/src/web/assets/index-D6aK1OFb.js +0 -81
@@ -1,9 +1,6 @@
1
- import { access, readdir, readFile, stat } from 'node:fs/promises';
2
- import { isAbsolute, relative, resolve } from 'node:path';
3
- import { spawn } from 'node:child_process';
4
- import { executeScopedEdit } from '../coding-files/file-edit-core.js';
1
+ import { resolve } from 'node:path';
2
+ import { MemoryNoteService } from '../../../../core/memory/note-service.js';
5
3
  const DEFAULT_MEMORY_ROOT = resolve(process.cwd(), '.heddle', 'memory');
6
- const DEFAULT_MAX_SEARCH_RESULTS = 100;
7
4
  export function createListMemoryNotesTool(options = {}) {
8
5
  return {
9
6
  name: 'list_memory_notes',
@@ -19,37 +16,17 @@ export function createListMemoryNotesTool(options = {}) {
19
16
  },
20
17
  },
21
18
  async execute(raw) {
22
- if (!isListMemoryNotesInput(raw)) {
19
+ if (!MemoryNotesToolInput.isList(raw)) {
23
20
  return { ok: false, error: 'Invalid input for list_memory_notes. Optional field: path.' };
24
21
  }
25
- const memoryRoot = resolveMemoryRoot(options);
26
- const targetPath = resolveMemoryPath(memoryRoot, raw.path ?? '.');
27
- if (!targetPath.ok) {
28
- return { ok: false, error: targetPath.error };
29
- }
30
- const exists = await pathExists(targetPath.path);
31
- if (!exists) {
32
- return { ok: true, output: '' };
33
- }
34
22
  try {
35
- const info = await stat(targetPath.path);
36
- if (info.isFile()) {
37
- return {
38
- ok: true,
39
- output: toMemoryRelativePath(memoryRoot, targetPath.path),
40
- };
41
- }
42
- const entries = await listMarkdownNotes(targetPath.path);
43
23
  return {
44
24
  ok: true,
45
- output: entries.map((entry) => toMemoryRelativePath(memoryRoot, entry)).join('\n'),
25
+ output: (await memoryNotes(options).list(raw)).join('\n'),
46
26
  };
47
27
  }
48
28
  catch (error) {
49
- return {
50
- ok: false,
51
- error: `Failed to list memory notes in ${targetPath.path}: ${error instanceof Error ? error.message : String(error)}`,
52
- };
29
+ return { ok: false, error: error instanceof Error ? error.message : String(error) };
53
30
  }
54
31
  },
55
32
  };
@@ -78,32 +55,17 @@ export function createReadMemoryNoteTool(options = {}) {
78
55
  required: ['path'],
79
56
  },
80
57
  async execute(raw) {
81
- if (!isReadMemoryNoteInput(raw)) {
58
+ if (!MemoryNotesToolInput.isRead(raw)) {
82
59
  return { ok: false, error: 'Invalid input for read_memory_note. Required field: path. Optional fields: maxLines, offset.' };
83
60
  }
84
- const memoryRoot = resolveMemoryRoot(options);
85
- const targetPath = resolveMemoryPath(memoryRoot, raw.path);
86
- if (!targetPath.ok) {
87
- return { ok: false, error: targetPath.error };
88
- }
89
61
  try {
90
- const content = await readFile(targetPath.path, 'utf8');
91
62
  return {
92
63
  ok: true,
93
- output: pageText(content, raw.offset, raw.maxLines),
64
+ output: await memoryNotes(options).read(raw),
94
65
  };
95
66
  }
96
67
  catch (error) {
97
- if (isErrorWithCode(error, 'EISDIR')) {
98
- return {
99
- ok: false,
100
- error: `Failed to read ${targetPath.path}: path is a directory, not a file. Use list_memory_notes to inspect memory directories.`,
101
- };
102
- }
103
- return {
104
- ok: false,
105
- error: `Failed to read ${targetPath.path}: ${error instanceof Error ? error.message : String(error)}`,
106
- };
68
+ return { ok: false, error: error instanceof Error ? error.message : String(error) };
107
69
  }
108
70
  },
109
71
  };
@@ -132,20 +94,18 @@ export function createSearchMemoryNotesTool(options = {}) {
132
94
  required: ['query'],
133
95
  },
134
96
  async execute(raw) {
135
- if (!isSearchMemoryNotesInput(raw)) {
97
+ if (!MemoryNotesToolInput.isSearch(raw)) {
136
98
  return { ok: false, error: 'Invalid input for search_memory_notes. Required field: query. Optional fields: path, maxResults.' };
137
99
  }
138
- const memoryRoot = resolveMemoryRoot(options);
139
- const targetPath = resolveMemoryPath(memoryRoot, raw.path ?? '.');
140
- if (!targetPath.ok) {
141
- return { ok: false, error: targetPath.error };
100
+ try {
101
+ return {
102
+ ok: true,
103
+ output: await memoryNotes(options).search(raw),
104
+ };
142
105
  }
143
- const exists = await pathExists(targetPath.path);
144
- if (!exists) {
145
- return { ok: true, output: 'No matches found.' };
106
+ catch (error) {
107
+ return { ok: false, error: error instanceof Error ? error.message : String(error) };
146
108
  }
147
- const searchResult = await searchWithCli(memoryRoot, targetPath.path, raw.query, sanitizeMaxResults(raw.maxResults));
148
- return searchResult;
149
109
  },
150
110
  };
151
111
  }
@@ -185,14 +145,7 @@ export function createEditMemoryNoteTool(options = {}) {
185
145
  required: ['path'],
186
146
  },
187
147
  async execute(raw) {
188
- return executeScopedEdit(raw, {
189
- toolName: 'edit_memory_note',
190
- rootPath: resolveMemoryRoot(options),
191
- rootLabel: 'memory root',
192
- subjectLabel: 'memory note',
193
- creationHint: 'Set createIfMissing to true if you want edit_memory_note to create it.',
194
- enforceRoot: true,
195
- });
148
+ return await memoryNotes(options).edit(raw);
196
149
  },
197
150
  };
198
151
  }
@@ -200,184 +153,41 @@ export const listMemoryNotesTool = createListMemoryNotesTool();
200
153
  export const readMemoryNoteTool = createReadMemoryNoteTool();
201
154
  export const searchMemoryNotesTool = createSearchMemoryNotesTool();
202
155
  export const editMemoryNoteTool = createEditMemoryNoteTool();
203
- function resolveMemoryRoot(options) {
204
- return resolve(options.memoryRoot ?? DEFAULT_MEMORY_ROOT);
205
- }
206
- function resolveMemoryPath(memoryRoot, requestedPath) {
207
- if (!requestedPath.trim()) {
208
- return { ok: false, error: `Memory note paths must be non-empty and stay inside ${memoryRoot}.` };
209
- }
210
- const targetPath = resolve(memoryRoot, requestedPath);
211
- const rel = relative(memoryRoot, targetPath);
212
- if (rel.startsWith('..') || isAbsolute(rel)) {
213
- return { ok: false, error: `Memory note paths must stay inside ${memoryRoot}. Refusing to access ${targetPath}.` };
214
- }
215
- return { ok: true, path: targetPath };
216
- }
217
- async function listMarkdownNotes(root) {
218
- const results = [];
219
- const entries = await readdir(root, { withFileTypes: true });
220
- for (const entry of entries) {
221
- const nextPath = resolve(root, entry.name);
222
- if (entry.isDirectory()) {
223
- results.push(...await listMarkdownNotes(nextPath));
224
- continue;
156
+ class MemoryNotesToolInput {
157
+ static isList(raw) {
158
+ if (raw === undefined) {
159
+ return true;
225
160
  }
226
- if (entry.isFile() && isMarkdownPath(nextPath)) {
227
- results.push(nextPath);
161
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
162
+ return false;
228
163
  }
164
+ const input = raw;
165
+ return Object.keys(input).every((key) => key === 'path')
166
+ && (input.path === undefined || typeof input.path === 'string');
229
167
  }
230
- return results.sort();
231
- }
232
- function pageText(content, offset, maxLines) {
233
- const lines = content.split('\n');
234
- const start = offset && offset > 0 ? Math.floor(offset) : 0;
235
- const end = maxLines && maxLines > 0 ? start + Math.floor(maxLines) : undefined;
236
- if (start > 0 || end !== undefined) {
237
- return lines.slice(start, end).join('\n');
238
- }
239
- return content;
240
- }
241
- function sanitizeMaxResults(value) {
242
- if (!value || !Number.isFinite(value) || value <= 0) {
243
- return DEFAULT_MAX_SEARCH_RESULTS;
244
- }
245
- return Math.min(Math.floor(value), DEFAULT_MAX_SEARCH_RESULTS);
246
- }
247
- function toMemoryRelativePath(memoryRoot, filePath) {
248
- const rel = relative(memoryRoot, filePath);
249
- return rel || '.';
250
- }
251
- function isMarkdownPath(path) {
252
- return /\.md$/i.test(path);
253
- }
254
- async function pathExists(path) {
255
- try {
256
- await access(path);
257
- return true;
258
- }
259
- catch {
260
- return false;
261
- }
262
- }
263
- function isListMemoryNotesInput(raw) {
264
- if (raw === undefined) {
265
- return true;
266
- }
267
- if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
268
- return false;
269
- }
270
- const input = raw;
271
- const keys = Object.keys(input);
272
- if (keys.some((key) => key !== 'path')) {
273
- return false;
274
- }
275
- return input.path === undefined || typeof input.path === 'string';
276
- }
277
- function isReadMemoryNoteInput(raw) {
278
- if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
279
- return false;
280
- }
281
- const input = raw;
282
- const keys = Object.keys(input);
283
- if (keys.some((key) => key !== 'path' && key !== 'maxLines' && key !== 'offset')) {
284
- return false;
285
- }
286
- return (typeof input.path === 'string' &&
287
- (input.maxLines === undefined || typeof input.maxLines === 'number') &&
288
- (input.offset === undefined || typeof input.offset === 'number'));
289
- }
290
- function isSearchMemoryNotesInput(raw) {
291
- if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
292
- return false;
293
- }
294
- const input = raw;
295
- const keys = Object.keys(input);
296
- if (keys.some((key) => key !== 'query' && key !== 'path' && key !== 'maxResults')) {
297
- return false;
298
- }
299
- return (typeof input.query === 'string' &&
300
- input.query.trim().length > 0 &&
301
- (input.path === undefined || typeof input.path === 'string') &&
302
- (input.maxResults === undefined || typeof input.maxResults === 'number'));
303
- }
304
- function isErrorWithCode(error, code) {
305
- return error instanceof Error && 'code' in error && error.code === code;
306
- }
307
- async function searchWithCli(memoryRoot, targetPath, query, maxResults) {
308
- const relativeTarget = toMemoryRelativePath(memoryRoot, targetPath);
309
- const normalizedTarget = relativeTarget === '.' ? '.' : relativeTarget;
310
- const rgResult = await runSearchCommand('rg', ['-n', '--no-heading', '--glob', '*.md', query, normalizedTarget], memoryRoot);
311
- if (rgResult.kind === 'ok') {
312
- return {
313
- ok: true,
314
- output: trimSearchOutput(rgResult.stdout, maxResults),
315
- };
316
- }
317
- if (rgResult.kind === 'nonzero_no_match') {
318
- return { ok: true, output: 'No matches found.' };
319
- }
320
- if (rgResult.kind !== 'missing_binary') {
321
- return {
322
- ok: false,
323
- error: `Failed to search memory notes in ${targetPath}: ${rgResult.error}`,
324
- };
325
- }
326
- const grepResult = await runSearchCommand('grep', ['-R', '-n', '--include=*.md', query, normalizedTarget], memoryRoot);
327
- if (grepResult.kind === 'ok') {
328
- return {
329
- ok: true,
330
- output: trimSearchOutput(grepResult.stdout, maxResults),
331
- };
332
- }
333
- if (grepResult.kind === 'nonzero_no_match') {
334
- return { ok: true, output: 'No matches found.' };
168
+ static isRead(raw) {
169
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
170
+ return false;
171
+ }
172
+ const input = raw;
173
+ return Object.keys(input).every((key) => key === 'path' || key === 'maxLines' || key === 'offset')
174
+ && typeof input.path === 'string'
175
+ && (input.maxLines === undefined || typeof input.maxLines === 'number')
176
+ && (input.offset === undefined || typeof input.offset === 'number');
177
+ }
178
+ static isSearch(raw) {
179
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
180
+ return false;
181
+ }
182
+ const input = raw;
183
+ return Object.keys(input).every((key) => key === 'query' || key === 'path' || key === 'maxResults')
184
+ && typeof input.query === 'string'
185
+ && input.query.trim().length > 0
186
+ && (input.path === undefined || typeof input.path === 'string')
187
+ && (input.maxResults === undefined || typeof input.maxResults === 'number');
335
188
  }
336
- return {
337
- ok: false,
338
- error: `Failed to search memory notes in ${targetPath}: ${grepResult.error}`,
339
- };
340
- }
341
- function trimSearchOutput(stdout, maxResults) {
342
- const lines = stdout
343
- .split('\n')
344
- .map((line) => line.trimEnd().replace(/^\.\//, ''))
345
- .filter((line) => line.length > 0)
346
- .slice(0, maxResults);
347
- return lines.length > 0 ? lines.join('\n') : 'No matches found.';
348
189
  }
349
- async function runSearchCommand(binary, args, cwd) {
350
- return new Promise((resolvePromise) => {
351
- const child = spawn(binary, args, {
352
- cwd,
353
- stdio: ['ignore', 'pipe', 'pipe'],
354
- });
355
- let stdout = '';
356
- let stderr = '';
357
- child.stdout.on('data', (chunk) => {
358
- stdout += chunk.toString();
359
- });
360
- child.stderr.on('data', (chunk) => {
361
- stderr += chunk.toString();
362
- });
363
- child.on('error', (error) => {
364
- if ('code' in error && error.code === 'ENOENT') {
365
- resolvePromise({ kind: 'missing_binary', error: `${binary} is not available in the environment.` });
366
- return;
367
- }
368
- resolvePromise({ kind: 'error', error: error.message });
369
- });
370
- child.on('close', (code) => {
371
- if (code === 0) {
372
- resolvePromise({ kind: 'ok', stdout });
373
- return;
374
- }
375
- if (code === 1) {
376
- resolvePromise({ kind: 'nonzero_no_match', error: stderr.trim() || `${binary} returned exit code 1` });
377
- return;
378
- }
379
- resolvePromise({ kind: 'error', error: stderr.trim() || `${binary} returned exit code ${code ?? 'unknown'}` });
380
- });
381
- });
190
+ function memoryNotes(options) {
191
+ return new MemoryNoteService(resolve(options.memoryRoot ?? DEFAULT_MEMORY_ROOT));
382
192
  }
383
193
  //# sourceMappingURL=memory-notes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory-notes.js","sourceRoot":"","sources":["../../../../../../src/core/tools/toolkits/knowledge/memory-notes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-notes.js","sourceRoot":"","sources":["../../../../../../src/core/tools/toolkits/knowledge/memory-notes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"record-knowledge.d.ts","sourceRoot":"","sources":["../../../../../../src/core/tools/toolkits/knowledge/record-knowledge.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,mBAAmB,CAAC;AAEpE,MAAM,MAAM,0BAA0B,GAAG;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;CACvB,CAAC;AAiBF,wBAAgB,yBAAyB,CAAC,OAAO,GAAE,0BAA+B,GAAG,cAAc,CAsElG;AAED,eAAO,MAAM,mBAAmB,gBAA8B,CAAC"}
1
+ {"version":3,"file":"record-knowledge.d.ts","sourceRoot":"","sources":["../../../../../../src/core/tools/toolkits/knowledge/record-knowledge.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,mBAAmB,CAAC;AAEpE,MAAM,MAAM,0BAA0B,GAAG;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;CACvB,CAAC;AAmBF,wBAAgB,yBAAyB,CAAC,OAAO,GAAE,0BAA+B,GAAG,cAAc,CAoElG;AAED,eAAO,MAAM,mBAAmB,gBAA8B,CAAC"}
@@ -1,5 +1,6 @@
1
- import { mkdir, appendFile } from 'node:fs/promises';
2
- import { dirname, isAbsolute, relative, resolve } from 'node:path';
1
+ import { resolve } from 'node:path';
2
+ import { MemoryMaintenanceRepository } from '../../../../core/memory/maintenance-repository.js';
3
+ import { MemoryMaintenanceService } from '../../../../core/memory/maintainer.js';
3
4
  const DEFAULT_MEMORY_ROOT = resolve(process.cwd(), '.heddle', 'memory');
4
5
  const MAX_SUMMARY_LENGTH = 2000;
5
6
  const MAX_EVIDENCE_ITEMS = 8;
@@ -45,12 +46,11 @@ export function createRecordKnowledgeTool(options = {}) {
45
46
  required: ['summary'],
46
47
  },
47
48
  async execute(raw) {
48
- const parsed = validateRecordKnowledgeInput(raw, resolveMemoryRoot(options));
49
+ const memoryRoot = resolveMemoryRoot(options);
50
+ const parsed = RecordKnowledgeToolInput.validate(raw, memoryRoot);
49
51
  if (!parsed.ok) {
50
52
  return { ok: false, error: parsed.error };
51
53
  }
52
- const memoryRoot = resolveMemoryRoot(options);
53
- const candidatePath = resolve(memoryRoot, '_maintenance', 'candidates.jsonl');
54
54
  const now = options.now?.() ?? new Date();
55
55
  const record = {
56
56
  id: options.nextId?.() ?? `candidate-${now.getTime()}`,
@@ -58,8 +58,7 @@ export function createRecordKnowledgeTool(options = {}) {
58
58
  status: 'pending',
59
59
  ...parsed.input,
60
60
  };
61
- await mkdir(dirname(candidatePath), { recursive: true });
62
- await appendFile(candidatePath, `${JSON.stringify(record)}\n`, 'utf8');
61
+ await new MemoryMaintenanceRepository(memoryRoot).appendCandidate(record);
63
62
  return {
64
63
  ok: true,
65
64
  output: {
@@ -73,109 +72,80 @@ export function createRecordKnowledgeTool(options = {}) {
73
72
  };
74
73
  }
75
74
  export const recordKnowledgeTool = createRecordKnowledgeTool();
76
- function validateRecordKnowledgeInput(raw, memoryRoot) {
77
- if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
78
- return { ok: false, error: invalidInputMessage() };
79
- }
80
- const input = raw;
81
- const allowedKeys = new Set(['summary', 'evidence', 'categoryHint', 'importance', 'confidence', 'sourceRefs']);
82
- if (Object.keys(input).some((key) => !allowedKeys.has(key))) {
83
- return { ok: false, error: invalidInputMessage() };
84
- }
85
- if (typeof input.summary !== 'string' || !input.summary.trim() || input.summary.length > MAX_SUMMARY_LENGTH) {
86
- return { ok: false, error: `Invalid input for record_knowledge. Required field summary must be a non-empty string up to ${MAX_SUMMARY_LENGTH} characters.` };
87
- }
88
- const summary = input.summary.trim();
89
- if (containsSecretLikeText(summary)) {
90
- return { ok: false, error: 'record_knowledge refused secret-like content in summary. Do not store credentials, tokens, private keys, or passwords in memory.' };
91
- }
92
- const evidence = validateOptionalStringArray(input.evidence, 'evidence', MAX_EVIDENCE_ITEMS);
93
- if (!evidence.ok) {
94
- return { ok: false, error: evidence.error };
95
- }
96
- if (evidence.values.some(containsSecretLikeText)) {
97
- return { ok: false, error: 'record_knowledge refused secret-like content in evidence. Do not store credentials, tokens, private keys, or passwords in memory.' };
98
- }
99
- const sourceRefs = validateOptionalStringArray(input.sourceRefs, 'sourceRefs', MAX_SOURCE_REFS);
100
- if (!sourceRefs.ok) {
101
- return { ok: false, error: sourceRefs.error };
102
- }
103
- const invalidSourceRef = sourceRefs.values.find((sourceRef) => !isSafeSourceRef(sourceRef, memoryRoot));
104
- if (invalidSourceRef) {
105
- return { ok: false, error: `record_knowledge sourceRefs must be workspace-relative paths or non-path references. Refusing unsafe sourceRef: ${invalidSourceRef}` };
106
- }
107
- if (sourceRefs.values.some(containsSecretLikeText)) {
108
- return { ok: false, error: 'record_knowledge refused secret-like content in sourceRefs. Do not store credentials, tokens, private keys, or passwords in memory.' };
109
- }
110
- if (input.categoryHint !== undefined && (typeof input.categoryHint !== 'string' || !input.categoryHint.trim() || input.categoryHint.length > 80)) {
111
- return { ok: false, error: 'Invalid input for record_knowledge. Optional field categoryHint must be a non-empty string up to 80 characters.' };
112
- }
113
- if (input.importance !== undefined && input.importance !== 'low' && input.importance !== 'medium' && input.importance !== 'high') {
114
- return { ok: false, error: 'Invalid input for record_knowledge. Optional field importance must be one of: low, medium, high.' };
115
- }
116
- if (input.confidence !== undefined
117
- && input.confidence !== 'user-stated'
118
- && input.confidence !== 'tool-verified'
119
- && input.confidence !== 'inferred'
120
- && input.confidence !== 'historical') {
121
- return { ok: false, error: 'Invalid input for record_knowledge. Optional field confidence must be one of: user-stated, tool-verified, inferred, historical.' };
122
- }
123
- return {
124
- ok: true,
125
- input: {
126
- summary,
127
- evidence: evidence.values.length > 0 ? evidence.values : undefined,
128
- categoryHint: typeof input.categoryHint === 'string' ? input.categoryHint.trim() : undefined,
129
- importance: input.importance,
130
- confidence: input.confidence,
131
- sourceRefs: sourceRefs.values.length > 0 ? sourceRefs.values : undefined,
132
- },
133
- };
134
- }
135
- function validateOptionalStringArray(raw, field, maxItems) {
136
- if (raw === undefined) {
137
- return { ok: true, values: [] };
138
- }
139
- if (!Array.isArray(raw) || raw.length > maxItems || raw.some((value) => typeof value !== 'string' || !value.trim() || value.length > MAX_TEXT_FIELD_LENGTH)) {
140
- return { ok: false, error: `Invalid input for record_knowledge. Optional field ${field} must be an array of up to ${maxItems} non-empty strings, each up to ${MAX_TEXT_FIELD_LENGTH} characters.` };
141
- }
142
- return { ok: true, values: raw.map((value) => value.trim()) };
143
- }
144
- function containsSecretLikeText(value) {
145
- const normalized = value.toLowerCase();
146
- return /\b(api[_ -]?key|password|passwd|private[_ -]?key|access[_ -]?token|refresh[_ -]?token|bearer\s+[a-z0-9._~+/=-]{12,})\b/i.test(value)
147
- || /\bsecret\s*[:=]\s*\S{8,}/i.test(value)
148
- || /\bsk-[a-z0-9_-]{12,}\b/i.test(value)
149
- || normalized.includes('-----begin private key-----')
150
- || normalized.includes('-----begin rsa private key-----')
151
- || normalized.includes('-----begin openSSH private key-----'.toLowerCase());
152
- }
153
- function isSafeSourceRef(value, memoryRoot) {
154
- if (value.includes('\0')) {
155
- return false;
156
- }
157
- if (value.startsWith('trace-') || value.startsWith('session-') || value.startsWith('command:')) {
158
- return true;
159
- }
160
- if (/^[a-z][a-z0-9+.-]*:/i.test(value)) {
161
- return false;
75
+ class RecordKnowledgeToolInput {
76
+ static validate(raw, memoryRoot) {
77
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
78
+ return { ok: false, error: RecordKnowledgeToolInput.invalidInputMessage() };
79
+ }
80
+ const input = raw;
81
+ const allowedKeys = new Set(['summary', 'evidence', 'categoryHint', 'importance', 'confidence', 'sourceRefs']);
82
+ if (Object.keys(input).some((key) => !allowedKeys.has(key))) {
83
+ return { ok: false, error: RecordKnowledgeToolInput.invalidInputMessage() };
84
+ }
85
+ if (typeof input.summary !== 'string' || !input.summary.trim() || input.summary.length > MAX_SUMMARY_LENGTH) {
86
+ return { ok: false, error: `Invalid input for record_knowledge. Required field summary must be a non-empty string up to ${MAX_SUMMARY_LENGTH} characters.` };
87
+ }
88
+ const summary = input.summary.trim();
89
+ if (!MemoryMaintenanceService.isRecordableCandidateText(summary)) {
90
+ return { ok: false, error: 'record_knowledge refused secret-like content in summary. Do not store credentials, tokens, private keys, or passwords in memory.' };
91
+ }
92
+ const evidence = RecordKnowledgeToolInput.validateOptionalStringArray(input.evidence, 'evidence', MAX_EVIDENCE_ITEMS);
93
+ if (!evidence.ok) {
94
+ return { ok: false, error: evidence.error };
95
+ }
96
+ if (evidence.values.some((value) => !MemoryMaintenanceService.isRecordableCandidateText(value))) {
97
+ return { ok: false, error: 'record_knowledge refused secret-like content in evidence. Do not store credentials, tokens, private keys, or passwords in memory.' };
98
+ }
99
+ const sourceRefs = RecordKnowledgeToolInput.validateOptionalStringArray(input.sourceRefs, 'sourceRefs', MAX_SOURCE_REFS);
100
+ if (!sourceRefs.ok) {
101
+ return { ok: false, error: sourceRefs.error };
102
+ }
103
+ const invalidSourceRef = sourceRefs.values.find((sourceRef) => !MemoryMaintenanceService.isSafeSourceRef(sourceRef, memoryRoot));
104
+ if (invalidSourceRef) {
105
+ return { ok: false, error: `record_knowledge sourceRefs must be workspace-relative paths or non-path references. Refusing unsafe sourceRef: ${invalidSourceRef}` };
106
+ }
107
+ if (sourceRefs.values.some((value) => !MemoryMaintenanceService.isRecordableCandidateText(value))) {
108
+ return { ok: false, error: 'record_knowledge refused secret-like content in sourceRefs. Do not store credentials, tokens, private keys, or passwords in memory.' };
109
+ }
110
+ if (input.categoryHint !== undefined && (typeof input.categoryHint !== 'string' || !input.categoryHint.trim() || input.categoryHint.length > 80)) {
111
+ return { ok: false, error: 'Invalid input for record_knowledge. Optional field categoryHint must be a non-empty string up to 80 characters.' };
112
+ }
113
+ if (input.importance !== undefined && input.importance !== 'low' && input.importance !== 'medium' && input.importance !== 'high') {
114
+ return { ok: false, error: 'Invalid input for record_knowledge. Optional field importance must be one of: low, medium, high.' };
115
+ }
116
+ if (input.confidence !== undefined
117
+ && input.confidence !== 'user-stated'
118
+ && input.confidence !== 'tool-verified'
119
+ && input.confidence !== 'inferred'
120
+ && input.confidence !== 'historical') {
121
+ return { ok: false, error: 'Invalid input for record_knowledge. Optional field confidence must be one of: user-stated, tool-verified, inferred, historical.' };
122
+ }
123
+ return {
124
+ ok: true,
125
+ input: {
126
+ summary,
127
+ evidence: evidence.values.length > 0 ? evidence.values : undefined,
128
+ categoryHint: typeof input.categoryHint === 'string' ? input.categoryHint.trim() : undefined,
129
+ importance: input.importance,
130
+ confidence: input.confidence,
131
+ sourceRefs: sourceRefs.values.length > 0 ? sourceRefs.values : undefined,
132
+ },
133
+ };
162
134
  }
163
- if (isAbsolute(value)) {
164
- return false;
135
+ static validateOptionalStringArray(raw, field, maxItems) {
136
+ if (raw === undefined) {
137
+ return { ok: true, values: [] };
138
+ }
139
+ if (!Array.isArray(raw) || raw.length > maxItems || raw.some((value) => typeof value !== 'string' || !value.trim() || value.length > MAX_TEXT_FIELD_LENGTH)) {
140
+ return { ok: false, error: `Invalid input for record_knowledge. Optional field ${field} must be an array of up to ${maxItems} non-empty strings, each up to ${MAX_TEXT_FIELD_LENGTH} characters.` };
141
+ }
142
+ return { ok: true, values: raw.map((value) => value.trim()) };
165
143
  }
166
- const normalizedSegments = value.replace(/\\/g, '/').split('/');
167
- if (normalizedSegments.includes('..')) {
168
- return false;
144
+ static invalidInputMessage() {
145
+ return 'Invalid input for record_knowledge. Required field: summary. Optional fields: evidence, categoryHint, importance, confidence, sourceRefs.';
169
146
  }
170
- const workspaceRoot = resolve(memoryRoot, '..', '..');
171
- const resolved = resolve(workspaceRoot, value);
172
- const rel = relative(workspaceRoot, resolved);
173
- return rel !== '' && !rel.startsWith('..') && !isAbsolute(rel);
174
147
  }
175
148
  function resolveMemoryRoot(options) {
176
149
  return resolve(options.memoryRoot ?? DEFAULT_MEMORY_ROOT);
177
150
  }
178
- function invalidInputMessage() {
179
- return 'Invalid input for record_knowledge. Required field: summary. Optional fields: evidence, categoryHint, importance, confidence, sourceRefs.';
180
- }
181
151
  //# sourceMappingURL=record-knowledge.js.map