@phuetz/code-buddy 1.1.0 → 1.3.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 (381) hide show
  1. package/README.md +211 -163
  2. package/dist/agent/autonomous/agentic-coding-contract.d.ts +12 -12
  3. package/dist/agent/base-agent.d.ts +4 -0
  4. package/dist/agent/base-agent.js +6 -0
  5. package/dist/agent/codebuddy-agent.d.ts +1 -1
  6. package/dist/agent/codebuddy-agent.js +69 -14
  7. package/dist/agent/execution/agent-executor.js +122 -12
  8. package/dist/agent/execution/tool-dependency-graph.js +7 -0
  9. package/dist/agent/execution/tool-hooks.d.ts +6 -0
  10. package/dist/agent/execution/tool-hooks.js +13 -5
  11. package/dist/agent/execution/tool-selection-strategy.d.ts +11 -2
  12. package/dist/agent/execution/tool-selection-strategy.js +67 -10
  13. package/dist/agent/extended-thinking.d.ts +8 -0
  14. package/dist/agent/extended-thinking.js +27 -0
  15. package/dist/agent/facades/infrastructure-facade.d.ts +9 -2
  16. package/dist/agent/facades/infrastructure-facade.js +15 -6
  17. package/dist/agent/hermes-browser-backends.js +151 -11
  18. package/dist/agent/hermes-claw-migrate.d.ts +59 -0
  19. package/dist/agent/hermes-claw-migrate.js +427 -26
  20. package/dist/agent/hermes-parity-manifest.js +78 -71
  21. package/dist/agent/hermes-runtime-lifecycle.d.ts +67 -0
  22. package/dist/agent/hermes-runtime-lifecycle.js +468 -0
  23. package/dist/agent/middleware/index.d.ts +1 -0
  24. package/dist/agent/middleware/index.js +1 -0
  25. package/dist/agent/middleware/visual-validation-middleware.d.ts +17 -0
  26. package/dist/agent/middleware/visual-validation-middleware.js +67 -0
  27. package/dist/agent/model-benchmark.d.ts +77 -0
  28. package/dist/agent/model-benchmark.js +309 -0
  29. package/dist/agent/model-tier.d.ts +14 -0
  30. package/dist/agent/model-tier.js +71 -0
  31. package/dist/agent/multi-agent/agents/orchestrator-agent.js +17 -6
  32. package/dist/agent/multi-agent/multi-agent-system.js +3 -1
  33. package/dist/agent/multi-agent/session-fleet-bridge.d.ts +2 -0
  34. package/dist/agent/multi-agent/session-fleet-bridge.js +9 -1
  35. package/dist/agent/multi-agent/session-tools.js +22 -5
  36. package/dist/agent/reasoning/mcts.js +20 -6
  37. package/dist/agent/self-improvement/authored-artifact-gate.d.ts +18 -0
  38. package/dist/agent/self-improvement/authored-artifact-gate.js +42 -0
  39. package/dist/agent/self-improvement/authored-tool-runtime.d.ts +27 -0
  40. package/dist/agent/self-improvement/authored-tool-runtime.js +57 -0
  41. package/dist/agent/self-improvement/authored-tool-store.d.ts +24 -0
  42. package/dist/agent/self-improvement/authored-tool-store.js +57 -0
  43. package/dist/agent/self-improvement/llm-tool-proposer.d.ts +41 -0
  44. package/dist/agent/self-improvement/llm-tool-proposer.js +136 -0
  45. package/dist/agent/self-improvement/sandbox-scorer.d.ts +17 -0
  46. package/dist/agent/self-improvement/sandbox-scorer.js +43 -0
  47. package/dist/agent/self-improvement/self-knowledge.d.ts +8 -0
  48. package/dist/agent/self-improvement/self-knowledge.js +24 -0
  49. package/dist/agent/self-improvement/skill-benchmark.d.ts +9 -0
  50. package/dist/agent/self-improvement/skill-benchmark.js +22 -0
  51. package/dist/agent/self-improvement/skill-consolidator.d.ts +71 -0
  52. package/dist/agent/self-improvement/skill-consolidator.js +137 -0
  53. package/dist/agent/self-improvement/skill-engine.d.ts +42 -0
  54. package/dist/agent/self-improvement/skill-engine.js +87 -0
  55. package/dist/agent/self-improvement/skill-gate.d.ts +19 -0
  56. package/dist/agent/self-improvement/skill-gate.js +62 -0
  57. package/dist/agent/self-improvement/skill-mutator.d.ts +74 -0
  58. package/dist/agent/self-improvement/skill-mutator.js +223 -0
  59. package/dist/agent/self-improvement/skill-proposer.d.ts +40 -0
  60. package/dist/agent/self-improvement/skill-proposer.js +82 -0
  61. package/dist/agent/self-improvement/skill-types.d.ts +41 -0
  62. package/dist/agent/self-improvement/skill-types.js +13 -0
  63. package/dist/agent/self-improvement/tool-benchmark.d.ts +10 -0
  64. package/dist/agent/self-improvement/tool-benchmark.js +37 -0
  65. package/dist/agent/self-improvement/tool-engine.d.ts +54 -0
  66. package/dist/agent/self-improvement/tool-engine.js +101 -0
  67. package/dist/agent/self-improvement/tool-gate.d.ts +20 -0
  68. package/dist/agent/self-improvement/tool-gate.js +78 -0
  69. package/dist/agent/self-improvement/tool-proposer.d.ts +31 -0
  70. package/dist/agent/self-improvement/tool-proposer.js +34 -0
  71. package/dist/agent/self-improvement/tool-skill-mutator.d.ts +40 -0
  72. package/dist/agent/self-improvement/tool-skill-mutator.js +79 -0
  73. package/dist/agent/self-improvement/tool-types.d.ts +48 -0
  74. package/dist/agent/self-improvement/tool-types.js +9 -0
  75. package/dist/agent/self-improvement/types.d.ts +3 -1
  76. package/dist/agent/session-end-flush.d.ts +6 -1
  77. package/dist/agent/session-end-flush.js +20 -4
  78. package/dist/agent/streaming/streaming-handler.d.ts +7 -0
  79. package/dist/agent/streaming/streaming-handler.js +8 -1
  80. package/dist/agent/tool-executor.js +1 -0
  81. package/dist/agent/tool-handler.d.ts +5 -0
  82. package/dist/agent/tool-handler.js +133 -4
  83. package/dist/browser-automation/browser-operator-executor.js +15 -0
  84. package/dist/browser-automation/browser-use-runner.d.ts +96 -0
  85. package/dist/browser-automation/browser-use-runner.js +492 -0
  86. package/dist/browser-automation/camofox-runner.d.ts +107 -0
  87. package/dist/browser-automation/camofox-runner.js +287 -0
  88. package/dist/channels/dingtalk/index.js +3 -0
  89. package/dist/channels/discord/client.d.ts +9 -0
  90. package/dist/channels/discord/client.js +12 -0
  91. package/dist/channels/feishu/index.d.ts +167 -1
  92. package/dist/channels/feishu/index.js +432 -7
  93. package/dist/channels/gateway-lifecycle.d.ts +132 -0
  94. package/dist/channels/gateway-lifecycle.js +219 -0
  95. package/dist/channels/google-chat/index.d.ts +5 -1
  96. package/dist/channels/google-chat/index.js +5 -1
  97. package/dist/channels/imessage/index.d.ts +14 -0
  98. package/dist/channels/imessage/index.js +64 -17
  99. package/dist/channels/index.d.ts +4 -0
  100. package/dist/channels/index.js +4 -0
  101. package/dist/channels/irc/index.d.ts +73 -3
  102. package/dist/channels/irc/index.js +446 -11
  103. package/dist/channels/line/index.js +3 -0
  104. package/dist/channels/mattermost/index.d.ts +51 -4
  105. package/dist/channels/mattermost/index.js +303 -20
  106. package/dist/channels/nextcloud-talk/index.d.ts +89 -8
  107. package/dist/channels/nextcloud-talk/index.js +367 -16
  108. package/dist/channels/nostr/index.d.ts +121 -1
  109. package/dist/channels/nostr/index.js +396 -8
  110. package/dist/channels/ntfy/index.js +3 -0
  111. package/dist/channels/qq/index.js +3 -0
  112. package/dist/channels/slash-parity.d.ts +117 -0
  113. package/dist/channels/slash-parity.js +185 -0
  114. package/dist/channels/synology-chat/index.js +3 -0
  115. package/dist/channels/teams/index.d.ts +3 -0
  116. package/dist/channels/teams/index.js +3 -0
  117. package/dist/channels/telegram/client.d.ts +9 -0
  118. package/dist/channels/telegram/client.js +12 -0
  119. package/dist/channels/twilio-voice/index.js +3 -0
  120. package/dist/channels/webchat/index.d.ts +7 -1
  121. package/dist/channels/webchat/index.js +7 -1
  122. package/dist/channels/wecom/index.js +3 -0
  123. package/dist/channels/weixin/index.js +3 -0
  124. package/dist/channels/zalo/index.js +3 -0
  125. package/dist/cli/config-loader.js +1 -1
  126. package/dist/codebuddy/client.d.ts +30 -1
  127. package/dist/codebuddy/client.js +167 -20
  128. package/dist/codebuddy/providers/provider-chatgpt-responses.d.ts +5 -0
  129. package/dist/codebuddy/providers/provider-chatgpt-responses.js +7 -1
  130. package/dist/codebuddy/providers/provider-gemini-native.js +1 -1
  131. package/dist/codebuddy/providers/provider-openai-compat.d.ts +5 -0
  132. package/dist/codebuddy/providers/provider-openai-compat.js +82 -2
  133. package/dist/codebuddy/tool-definitions/computer-control-tools.js +32 -2
  134. package/dist/codebuddy/tool-definitions/core-tools.js +3 -3
  135. package/dist/codebuddy/tool-definitions/index.d.ts +2 -1
  136. package/dist/codebuddy/tool-definitions/index.js +2 -1
  137. package/dist/codebuddy/tool-definitions/multimodal-tools.d.ts +1 -0
  138. package/dist/codebuddy/tool-definitions/multimodal-tools.js +44 -1
  139. package/dist/codebuddy/tool-definitions/windows-tools.d.ts +2 -0
  140. package/dist/codebuddy/tool-definitions/windows-tools.js +34 -0
  141. package/dist/codebuddy/tools.d.ts +8 -1
  142. package/dist/codebuddy/tools.js +67 -24
  143. package/dist/commands/cli/hermes-commands.js +108 -0
  144. package/dist/commands/cli/improve-command.js +123 -0
  145. package/dist/commands/cli/native-engine-commands.js +102 -3
  146. package/dist/commands/cli/utility-commands.js +45 -0
  147. package/dist/commands/enhanced-command-handler.js +2 -2
  148. package/dist/commands/goal-cli.d.ts +30 -0
  149. package/dist/commands/goal-cli.js +210 -27
  150. package/dist/commands/handlers/goal-handler.d.ts +9 -2
  151. package/dist/commands/handlers/goal-handler.js +36 -9
  152. package/dist/commands/handlers/infra-handlers.js +36 -0
  153. package/dist/commands/handlers/memory-handlers.js +96 -1
  154. package/dist/commands/handlers/missing-handlers.d.ts +1 -1
  155. package/dist/commands/handlers/missing-handlers.js +26 -3
  156. package/dist/commands/headless-slash.d.ts +2 -0
  157. package/dist/commands/headless-slash.js +12 -0
  158. package/dist/commands/llm-provider-resolution.d.ts +5 -3
  159. package/dist/commands/llm-provider-resolution.js +87 -33
  160. package/dist/commands/ollama.d.ts +25 -0
  161. package/dist/commands/ollama.js +100 -0
  162. package/dist/commands/provider.d.ts +5 -0
  163. package/dist/commands/provider.js +106 -55
  164. package/dist/commands/skills-cli/index.js +123 -0
  165. package/dist/commands/slash/builtin-commands.js +1 -1
  166. package/dist/commands/spec-next.js +2 -1
  167. package/dist/commands/spec-plan.js +5 -16
  168. package/dist/commands/tunnel.d.ts +2 -0
  169. package/dist/commands/tunnel.js +48 -0
  170. package/dist/companion/percepts.js +11 -1
  171. package/dist/config/config-resolver.d.ts +2 -1
  172. package/dist/config/config-resolver.js +54 -41
  173. package/dist/config/constants.d.ts +28 -0
  174. package/dist/config/constants.js +7 -0
  175. package/dist/config/env-schema.js +756 -0
  176. package/dist/config/model-tools.js +4 -4
  177. package/dist/config/toml-config.d.ts +16 -0
  178. package/dist/config/toml-config.js +3 -0
  179. package/dist/context/bootstrap-loader.js +6 -23
  180. package/dist/context/context-manager-v2.js +1 -0
  181. package/dist/context/import-directive-parser.d.ts +4 -0
  182. package/dist/context/import-directive-parser.js +51 -6
  183. package/dist/context/instruction-excludes.d.ts +30 -1
  184. package/dist/context/instruction-excludes.js +71 -1
  185. package/dist/context/jit-context.d.ts +8 -10
  186. package/dist/context/jit-context.js +28 -106
  187. package/dist/context/project-context.d.ts +90 -0
  188. package/dist/context/project-context.js +295 -0
  189. package/dist/daemon/autonomous-daemon.d.ts +1 -1
  190. package/dist/daemon/autonomous-daemon.js +3 -3
  191. package/dist/daemon/autonomous-loop.d.ts +31 -1
  192. package/dist/daemon/autonomous-loop.js +91 -4
  193. package/dist/daemon/colab-goal.js +9 -1
  194. package/dist/daemon/cron-agent-bridge.d.ts +12 -3
  195. package/dist/daemon/cron-agent-bridge.js +25 -9
  196. package/dist/desktop/codebuddy-engine-adapter.d.ts +32 -0
  197. package/dist/desktop/codebuddy-engine-adapter.js +257 -80
  198. package/dist/desktop/engine-adapter.d.ts +14 -0
  199. package/dist/desktop-automation/automation-manager.js +16 -0
  200. package/dist/desktop-automation/omniparser-runner.d.ts +63 -0
  201. package/dist/desktop-automation/omniparser-runner.js +115 -0
  202. package/dist/desktop-automation/smart-snapshot.d.ts +11 -0
  203. package/dist/desktop-automation/smart-snapshot.js +72 -5
  204. package/dist/doctor/index.js +40 -23
  205. package/dist/events/types.d.ts +11 -0
  206. package/dist/fleet/colab-store.js +14 -2
  207. package/dist/fleet/peer-session-bridge.js +50 -12
  208. package/dist/fleet/peer-tool-bridge.js +14 -0
  209. package/dist/goals/goal-decomposer.d.ts +27 -0
  210. package/dist/goals/goal-decomposer.js +293 -0
  211. package/dist/goals/goal-judge-client.d.ts +15 -0
  212. package/dist/goals/goal-judge-client.js +45 -0
  213. package/dist/goals/goal-judge.d.ts +2 -0
  214. package/dist/goals/goal-judge.js +35 -6
  215. package/dist/goals/goal-loop.d.ts +14 -0
  216. package/dist/goals/goal-loop.js +47 -2
  217. package/dist/goals/goal-manager.d.ts +6 -0
  218. package/dist/goals/goal-manager.js +67 -14
  219. package/dist/goals/goal-state.d.ts +13 -0
  220. package/dist/goals/goal-state.js +83 -13
  221. package/dist/goals/goal-store.d.ts +3 -0
  222. package/dist/goals/goal-store.js +31 -15
  223. package/dist/harness/contract.d.ts +28 -28
  224. package/dist/hooks/user-hooks.js +17 -3
  225. package/dist/identity/identity-manager.js +3 -2
  226. package/dist/index.js +481 -26
  227. package/dist/input/text-to-speech.d.ts +2 -6
  228. package/dist/input/text-to-speech.js +2 -27
  229. package/dist/integrations/screenpipe/screenpipe-client.d.ts +10 -0
  230. package/dist/integrations/screenpipe/screenpipe-client.js +12 -2
  231. package/dist/integrations/tailscale.d.ts +13 -0
  232. package/dist/integrations/tailscale.js +87 -34
  233. package/dist/knowledge/workspace-indexer.js +53 -9
  234. package/dist/mcp/client.js +1 -0
  235. package/dist/mcp/mcp-desktop-tools.d.ts +23 -0
  236. package/dist/mcp/mcp-desktop-tools.js +158 -0
  237. package/dist/mcp/mcp-resources.js +2 -3
  238. package/dist/mcp/mcp-server.js +2 -0
  239. package/dist/memory/enhanced-memory.d.ts +10 -0
  240. package/dist/memory/enhanced-memory.js +33 -2
  241. package/dist/memory/index.d.ts +3 -1
  242. package/dist/memory/index.js +4 -1
  243. package/dist/memory/memory-auto-proposer.d.ts +23 -0
  244. package/dist/memory/memory-auto-proposer.js +308 -0
  245. package/dist/memory/memory-candidate-queue.d.ts +92 -0
  246. package/dist/memory/memory-candidate-queue.js +261 -0
  247. package/dist/memory/persistent-memory.d.ts +45 -2
  248. package/dist/memory/persistent-memory.js +236 -40
  249. package/dist/ml/bayesian-qualifier.d.ts +1 -1
  250. package/dist/ml/bayesian-qualifier.js +35 -2
  251. package/dist/openclaw/gateway-bridge.js +5 -0
  252. package/dist/plugins/marketplace.d.ts +1 -0
  253. package/dist/plugins/marketplace.js +7 -0
  254. package/dist/prompts/execution-discipline.d.ts +14 -0
  255. package/dist/prompts/execution-discipline.js +29 -0
  256. package/dist/prompts/variation-injector.js +9 -2
  257. package/dist/protocols/acp/acp-agentic-runner.d.ts +7 -6
  258. package/dist/protocols/acp/acp-agentic-runner.js +115 -18
  259. package/dist/protocols/acp/acp-session-store.d.ts +23 -0
  260. package/dist/protocols/acp/acp-session-store.js +77 -0
  261. package/dist/protocols/acp/acp-stdio-server.d.ts +7 -0
  262. package/dist/protocols/acp/acp-stdio-server.js +71 -16
  263. package/dist/providers/active-llm-registry.d.ts +37 -0
  264. package/dist/providers/active-llm-registry.js +186 -0
  265. package/dist/providers/auxiliary-provider.d.ts +25 -0
  266. package/dist/providers/auxiliary-provider.js +192 -0
  267. package/dist/providers/codex-oauth.d.ts +1 -1
  268. package/dist/providers/codex-oauth.js +27 -4
  269. package/dist/providers/index.d.ts +3 -0
  270. package/dist/providers/index.js +4 -0
  271. package/dist/providers/provider-catalog.d.ts +70 -0
  272. package/dist/providers/provider-catalog.js +738 -0
  273. package/dist/providers/provider-fallback.d.ts +35 -0
  274. package/dist/providers/provider-fallback.js +171 -0
  275. package/dist/providers/xai-oauth.d.ts +128 -0
  276. package/dist/providers/xai-oauth.js +735 -0
  277. package/dist/scheduler/cron-scheduler.d.ts +15 -3
  278. package/dist/scheduler/cron-scheduler.js +53 -7
  279. package/dist/scheduler/script-runner.d.ts +2 -0
  280. package/dist/scheduler/script-runner.js +19 -4
  281. package/dist/scheduler/watchdog-handlers.js +7 -20
  282. package/dist/search/usearch-index.js +7 -2
  283. package/dist/security/tool-policy/tool-groups.js +2 -0
  284. package/dist/sensory/dreaming.d.ts +45 -0
  285. package/dist/sensory/dreaming.js +114 -0
  286. package/dist/sensory/heartbeat-scheduler.d.ts +38 -0
  287. package/dist/sensory/heartbeat-scheduler.js +72 -0
  288. package/dist/sensory/reactions.d.ts +24 -0
  289. package/dist/sensory/reactions.js +31 -0
  290. package/dist/sensory/screen-reaction.d.ts +23 -0
  291. package/dist/sensory/screen-reaction.js +59 -0
  292. package/dist/sensory/sensory-bridge.d.ts +23 -0
  293. package/dist/sensory/sensory-bridge.js +85 -0
  294. package/dist/sensory/sensory-memory.d.ts +20 -0
  295. package/dist/sensory/sensory-memory.js +39 -0
  296. package/dist/sensory/speech-reaction.d.ts +21 -0
  297. package/dist/sensory/speech-reaction.js +83 -0
  298. package/dist/sensory/vision-reaction.d.ts +31 -0
  299. package/dist/sensory/vision-reaction.js +74 -0
  300. package/dist/server/index.js +106 -2
  301. package/dist/server/routes/mobile.d.ts +12 -4
  302. package/dist/server/routes/mobile.js +116 -1
  303. package/dist/server/tls-config.d.ts +35 -0
  304. package/dist/server/tls-config.js +142 -0
  305. package/dist/server/tunnel-manager.d.ts +20 -0
  306. package/dist/server/tunnel-manager.js +58 -0
  307. package/dist/server/websocket/fleet-bridge.js +5 -0
  308. package/dist/services/prompt-builder.d.ts +11 -0
  309. package/dist/services/prompt-builder.js +124 -17
  310. package/dist/shared/engine-types.d.ts +15 -1
  311. package/dist/sidecar/sidecar-bridge.d.ts +1 -0
  312. package/dist/sidecar/sidecar-bridge.js +21 -10
  313. package/dist/skills/parser.js +3 -0
  314. package/dist/skills/skill-importer.d.ts +58 -0
  315. package/dist/skills/skill-importer.js +261 -0
  316. package/dist/skills/skill-sources.d.ts +20 -0
  317. package/dist/skills/skill-sources.js +102 -0
  318. package/dist/skills/types.d.ts +6 -0
  319. package/dist/spec/spec-store.js +8 -1
  320. package/dist/talk-mode/providers/audioreader-tts.d.ts +1 -1
  321. package/dist/talk-mode/providers/audioreader-tts.js +8 -8
  322. package/dist/templates/project-scaffolding.js +3 -2
  323. package/dist/themes/theme-schema.d.ts +10 -10
  324. package/dist/tools/application-profiles.js +38 -0
  325. package/dist/tools/bash/bash-tool.d.ts +1 -0
  326. package/dist/tools/bash/bash-tool.js +16 -2
  327. package/dist/tools/bash/command-validator.js +3 -0
  328. package/dist/tools/bash/rtk-rewrite.d.ts +16 -0
  329. package/dist/tools/bash/rtk-rewrite.js +100 -0
  330. package/dist/tools/bash/streaming-executor.js +14 -1
  331. package/dist/tools/computer-control-tool.d.ts +16 -1
  332. package/dist/tools/computer-control-tool.js +317 -5
  333. package/dist/tools/document-generator.d.ts +14 -0
  334. package/dist/tools/document-generator.js +79 -0
  335. package/dist/tools/execute-code-rpc-invoker.d.ts +26 -2
  336. package/dist/tools/execute-code-rpc-invoker.js +46 -5
  337. package/dist/tools/metadata.js +28 -0
  338. package/dist/tools/office-macro-tool.d.ts +10 -0
  339. package/dist/tools/office-macro-tool.js +93 -0
  340. package/dist/tools/register-tool-handler.d.ts +25 -0
  341. package/dist/tools/register-tool-handler.js +100 -0
  342. package/dist/tools/registry/index.d.ts +2 -1
  343. package/dist/tools/registry/index.js +2 -1
  344. package/dist/tools/registry/memory-tools.d.ts +20 -0
  345. package/dist/tools/registry/memory-tools.js +225 -3
  346. package/dist/tools/registry/multimodal-tools.js +2 -2
  347. package/dist/tools/registry/vision-tools.d.ts +33 -0
  348. package/dist/tools/registry/vision-tools.js +308 -6
  349. package/dist/tools/registry/windows-tools.d.ts +2 -0
  350. package/dist/tools/registry/windows-tools.js +47 -0
  351. package/dist/tools/registry.d.ts +6 -0
  352. package/dist/tools/registry.js +8 -0
  353. package/dist/tools/route-peer-tool.js +14 -0
  354. package/dist/tools/screenshot-tool.js +14 -2
  355. package/dist/tools/text-to-speech-tool.d.ts +1 -1
  356. package/dist/tools/text-to-speech-tool.js +2 -12
  357. package/dist/tools/tool-selector.js +3 -59
  358. package/dist/utils/config-validation/schema.d.ts +40 -7
  359. package/dist/utils/config-validation/schema.js +130 -1
  360. package/dist/utils/cost-tracker.js +21 -1
  361. package/dist/utils/disk-guard.d.ts +180 -0
  362. package/dist/utils/disk-guard.js +404 -0
  363. package/dist/utils/init-project.d.ts +7 -0
  364. package/dist/utils/init-project.js +37 -0
  365. package/dist/utils/interactive-setup.js +35 -2
  366. package/dist/utils/model-utils.js +11 -2
  367. package/dist/utils/output-sanitizer.js +11 -0
  368. package/dist/utils/provider-detector.d.ts +8 -7
  369. package/dist/utils/provider-detector.js +19 -77
  370. package/dist/utils/settings-manager.d.ts +19 -0
  371. package/dist/utils/token-display.d.ts +3 -3
  372. package/dist/utils/token-display.js +22 -4
  373. package/dist/wizard/onboarding.d.ts +39 -0
  374. package/dist/wizard/onboarding.js +433 -21
  375. package/dist/wizard/provider-onboarding.d.ts +8 -23
  376. package/dist/wizard/provider-onboarding.js +39 -158
  377. package/package.json +4 -2
  378. package/dist/plugins/provider-onboarding.d.ts +0 -23
  379. package/dist/plugins/provider-onboarding.js +0 -116
  380. package/dist/utils/kokoro-tts.d.ts +0 -8
  381. package/dist/utils/kokoro-tts.js +0 -67
@@ -46,6 +46,7 @@ export class EnhancedMemory extends EventEmitter {
46
46
  dbRepository = null;
47
47
  embeddingProvider = null;
48
48
  bayesianQualifier = new BayesianQualifier();
49
+ disposed = false;
49
50
  constructor(config = {}) {
50
51
  super();
51
52
  this.config = { ...DEFAULT_CONFIG, ...config };
@@ -98,8 +99,11 @@ export class EnhancedMemory extends EventEmitter {
98
99
  logger.error(`Failed to load bayesian-state: ${err.message}`);
99
100
  }
100
101
  }
102
+ if (this.disposed)
103
+ return;
101
104
  // Start decay timer
102
105
  this.decayIntervalId = setInterval(() => this.applyDecay(), 3600000); // Every hour
106
+ this.decayIntervalId.unref?.();
103
107
  }
104
108
  /**
105
109
  * Load memories from disk or SQLite
@@ -370,8 +374,11 @@ export class EnhancedMemory extends EventEmitter {
370
374
  results = results
371
375
  .map(m => {
372
376
  const features = this.extractMemoryFeatures(m, queryEmbedding);
373
- const { mean } = this.bayesianQualifier.predict(features);
374
- return { memory: m, score: mean };
377
+ const { mean, std } = this.bayesianQualifier.predict(features);
378
+ // Bayesian Active Learning: Upper Confidence Bound (UCB)
379
+ const explorationFactor = options.explorationFactor ?? 0.05;
380
+ const score = mean + (explorationFactor * std);
381
+ return { memory: m, score };
375
382
  })
376
383
  .filter(r => r.score > 0.3)
377
384
  .sort((a, b) => b.score - a.score)
@@ -749,6 +756,7 @@ export class EnhancedMemory extends EventEmitter {
749
756
  * Dispose
750
757
  */
751
758
  dispose() {
759
+ this.disposed = true;
752
760
  // Clear decay interval timer
753
761
  if (this.decayIntervalId) {
754
762
  clearInterval(this.decayIntervalId);
@@ -789,6 +797,29 @@ export class EnhancedMemory extends EventEmitter {
789
797
  const { mean, std } = this.bayesianQualifier.predict(features);
790
798
  return { score: mean, uncertainty: std };
791
799
  }
800
+ /**
801
+ * Active Learning: Retrieve memories with the highest uncertainty (BALD score)
802
+ * so the system can solicit user feedback and improve its relevance model.
803
+ */
804
+ async getActiveLearningTargets(limit = 5, query) {
805
+ if (!this.bayesianQualifier || !this.bayesianQualifier.isTrained) {
806
+ return [];
807
+ }
808
+ const queryEmbedding = query && this.config.embeddingEnabled
809
+ ? await this.generateEmbedding(query)
810
+ : undefined;
811
+ const allMemories = Array.from(this.memories.values());
812
+ return allMemories
813
+ .map(m => {
814
+ const features = this.extractMemoryFeatures(m, queryEmbedding);
815
+ const baldScore = this.bayesianQualifier.getAcquisitionScore(features);
816
+ return { memory: m, baldScore };
817
+ })
818
+ // Only keep entries with non-trivial uncertainty
819
+ .filter(r => r.baldScore > 0.01)
820
+ .sort((a, b) => b.baldScore - a.baldScore)
821
+ .slice(0, limit);
822
+ }
792
823
  }
793
824
  // Singleton
794
825
  let memoryInstance = null;
@@ -6,7 +6,9 @@
6
6
  * - EnhancedMemory: SQLite-backed with embeddings and semantic search
7
7
  * - ProspectiveMemory: Task/goal management with triggers
8
8
  */
9
- export { PersistentMemoryManager, getMemoryManager, initializeMemory, type Memory, type MemoryCategory, } from "./persistent-memory.js";
9
+ export { PersistentMemoryManager, getMemoryManager, initializeMemory, type Memory, type MemoryCategory, type MemoryScope, type MemoryUsage, type MemoryWriteResult, MemoryWriteRejectedError, } from "./persistent-memory.js";
10
+ export { MemoryCandidateQueue, getMemoryCandidateQueue, resetMemoryCandidateQueues, MEMORY_CANDIDATE_SCHEMA_VERSION, type MemoryCandidate, type MemoryCandidateCitation, type MemoryCandidateSource, type MemoryCandidateStatus, type MemoryCandidateStats, type ProposeMemoryCandidateInput, type ProposeMemoryCandidateResult, type AcceptMemoryCandidateInput, type AcceptMemoryCandidateResult, type RejectMemoryCandidateInput, } from "./memory-candidate-queue.js";
11
+ export { proposeMemoryCandidatesFromSession, buildMemoryCitations, extractHeuristicMemoryCandidates, } from "./memory-auto-proposer.js";
10
12
  export { EnhancedMemory, getEnhancedMemory, resetEnhancedMemory, type MemoryEntry, type MemoryType, type MemoryConfig, type ProjectMemory, type CodeConvention, type ConversationSummary, type UserProfile, type UserPreferences, type SkillLevel, type UserHistory, type MemorySearchOptions, } from "./enhanced-memory.js";
11
13
  export { ProspectiveMemory, getProspectiveMemory, resetProspectiveMemory, initializeProspectiveMemory, type ProspectiveTask, type Goal, type Reminder, type TaskPriority, type TaskStatus, type TriggerType, type TaskTrigger, type TaskContext, type SubTask, type Milestone, type ProspectiveMemoryConfig, } from "./prospective-memory.js";
12
14
  export { AutoCaptureManager, getAutoCaptureManager, resetAutoCaptureManager, type CapturePattern, type CaptureResult, type AutoCaptureConfig, type MemoryRecallResult, } from "./auto-capture.js";
@@ -7,7 +7,10 @@
7
7
  * - ProspectiveMemory: Task/goal management with triggers
8
8
  */
9
9
  // Persistent Memory (markdown files)
10
- export { PersistentMemoryManager, getMemoryManager, initializeMemory, } from "./persistent-memory.js";
10
+ export { PersistentMemoryManager, getMemoryManager, initializeMemory, MemoryWriteRejectedError, } from "./persistent-memory.js";
11
+ // Review-gated long-term memory candidates
12
+ export { MemoryCandidateQueue, getMemoryCandidateQueue, resetMemoryCandidateQueues, MEMORY_CANDIDATE_SCHEMA_VERSION, } from "./memory-candidate-queue.js";
13
+ export { proposeMemoryCandidatesFromSession, buildMemoryCitations, extractHeuristicMemoryCandidates, } from "./memory-auto-proposer.js";
11
14
  // Enhanced Memory (SQLite + embeddings)
12
15
  export { EnhancedMemory, getEnhancedMemory, resetEnhancedMemory, } from "./enhanced-memory.js";
13
16
  // Prospective Memory (tasks, goals, reminders)
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Session transcript -> review-gated long-term memory candidates.
3
+ *
4
+ * This mirrors modern assistant memory systems: the model may infer durable
5
+ * facts from a conversation, but those facts are queued with evidence and only
6
+ * become prompt-injected memory after explicit acceptance.
7
+ */
8
+ import { CodeBuddyClient } from '../codebuddy/client.js';
9
+ import type { ChatEntry } from '../agent/types.js';
10
+ import { type MemoryCandidate, type MemoryCandidateCitation } from './memory-candidate-queue.js';
11
+ import type { MemoryCategory, MemoryScope } from './persistent-memory.js';
12
+ interface NormalizedMemoryCandidate {
13
+ key: string;
14
+ value: string;
15
+ scope: MemoryScope;
16
+ category: MemoryCategory;
17
+ confidence?: number;
18
+ rationale?: string;
19
+ }
20
+ export declare function buildMemoryCitations(history: ChatEntry[], needle: string, sessionId?: string, maxCitations?: number): MemoryCandidateCitation[];
21
+ export declare function extractHeuristicMemoryCandidates(history: ChatEntry[]): NormalizedMemoryCandidate[];
22
+ export declare function proposeMemoryCandidatesFromSession(chatHistory: ChatEntry[], workDir?: string, client?: CodeBuddyClient, sessionId?: string): Promise<MemoryCandidate[]>;
23
+ export {};
@@ -0,0 +1,308 @@
1
+ /**
2
+ * Session transcript -> review-gated long-term memory candidates.
3
+ *
4
+ * This mirrors modern assistant memory systems: the model may infer durable
5
+ * facts from a conversation, but those facts are queued with evidence and only
6
+ * become prompt-injected memory after explicit acceptance.
7
+ */
8
+ import { CodeBuddyClient } from '../codebuddy/client.js';
9
+ import { scanForSecrets } from '../fleet/privacy-lint.js';
10
+ import { logger } from '../utils/logger.js';
11
+ import { detectProviderFromEnv } from '../utils/provider-detector.js';
12
+ import { getMemoryCandidateQueue, } from './memory-candidate-queue.js';
13
+ const VALID_CATEGORIES = [
14
+ 'project',
15
+ 'preferences',
16
+ 'decisions',
17
+ 'patterns',
18
+ 'context',
19
+ 'custom',
20
+ ];
21
+ const SYSTEM_PROMPT = `You extract durable declarative long-term memory candidates for an AI coding assistant.
22
+
23
+ Return only facts that are useful in future sessions. Skip transient task narration, guesses, secrets, PII, credentials, and anything that merely repeats the assistant's own plan.
24
+
25
+ Output ONLY a raw JSON array matching:
26
+ Array<{
27
+ key: string;
28
+ value: string;
29
+ scope: 'project'|'user';
30
+ category: 'project'|'preferences'|'decisions'|'patterns'|'context'|'custom';
31
+ confidence?: number;
32
+ rationale?: string;
33
+ }>
34
+
35
+ Rules:
36
+ - 0 to 6 candidates. Return [] when nothing durable is present.
37
+ - "user" scope is only for stable user preferences/profile; most repo facts are "project".
38
+ - key must be short kebab-case.
39
+ - value must be a concise self-contained sentence under 220 characters.`;
40
+ export function buildMemoryCitations(history, needle, sessionId, maxCitations = 2) {
41
+ const terms = compactText(needle)
42
+ .normalize('NFKD')
43
+ .replace(/[\u0300-\u036f]/g, '')
44
+ .toLowerCase()
45
+ .split(/[^a-z0-9_@./:-]+/g)
46
+ .filter((token) => token.length >= 4)
47
+ .slice(0, 6);
48
+ const matches = [];
49
+ for (let index = 0; index < history.length; index++) {
50
+ const entry = history[index];
51
+ if (!entry?.content || entry.type === 'tool_call' || entry.type === 'reasoning')
52
+ continue;
53
+ const compact = compactText(entry.content);
54
+ if (!compact)
55
+ continue;
56
+ const lower = compact
57
+ .normalize('NFKD')
58
+ .replace(/[\u0300-\u036f]/g, '')
59
+ .toLowerCase();
60
+ let score = 0;
61
+ for (const term of terms) {
62
+ if (lower.includes(term))
63
+ score++;
64
+ }
65
+ if (score > 0 || terms.length === 0) {
66
+ matches.push({ score, index, entry, compact });
67
+ }
68
+ }
69
+ if (matches.length > 0) {
70
+ return matches
71
+ .sort((a, b) => {
72
+ if (b.score !== a.score)
73
+ return b.score - a.score;
74
+ if (a.entry.type === 'user' && b.entry.type !== 'user')
75
+ return -1;
76
+ if (b.entry.type === 'user' && a.entry.type !== 'user')
77
+ return 1;
78
+ return a.index - b.index;
79
+ })
80
+ .slice(0, maxCitations)
81
+ .map((match) => ({
82
+ ...(sessionId ? { sessionId } : {}),
83
+ messageIndex: match.index + 1,
84
+ role: match.entry.type,
85
+ snippet: snippetAround(match.compact, terms),
86
+ }));
87
+ }
88
+ const reversed = [...history].reverse();
89
+ const fallback = reversed.find((entry) => entry.type === 'user' && entry.content.trim())
90
+ ?? reversed.find((entry) => entry.type === 'assistant' && entry.content.trim());
91
+ if (!fallback)
92
+ return [];
93
+ return [{
94
+ ...(sessionId ? { sessionId } : {}),
95
+ messageIndex: history.indexOf(fallback) + 1,
96
+ role: fallback.type,
97
+ snippet: compactText(fallback.content).slice(0, 220),
98
+ }];
99
+ }
100
+ export function extractHeuristicMemoryCandidates(history) {
101
+ const candidates = [];
102
+ for (const entry of history) {
103
+ if (entry.type !== 'user' && entry.type !== 'assistant')
104
+ continue;
105
+ const text = compactText(entry.content);
106
+ if (text.length < 20)
107
+ continue;
108
+ const userOnly = entry.type === 'user';
109
+ const patterns = [
110
+ {
111
+ regex: /\b(?:remember|note|keep in memory|garde en memoire|souviens-toi)(?:\s+that|\s+que)?\s+([^.!?\n]{20,220})/i,
112
+ scope: 'project',
113
+ category: 'context',
114
+ keyPrefix: 'remember',
115
+ confidence: 0.68,
116
+ },
117
+ {
118
+ regex: /\b(?:i|we|je|nous)\s+(?:prefer|prefere|preferons|always prefer)\s+([^.!?\n]{10,180})/i,
119
+ scope: 'user',
120
+ category: 'preferences',
121
+ keyPrefix: 'preference',
122
+ confidence: 0.72,
123
+ },
124
+ {
125
+ regex: /\b(?:this repo|the project|codebase|ce projet|le projet)\s+(?:uses|is using|runs on|utilise|tourne sur)\s+([^.!?\n]{10,180})/i,
126
+ scope: 'project',
127
+ category: 'project',
128
+ keyPrefix: 'project',
129
+ confidence: 0.7,
130
+ },
131
+ {
132
+ regex: /\b(?:we decided|decision:|decided to|nous avons decide|on a decide)\s+([^.!?\n]{10,180})/i,
133
+ scope: 'project',
134
+ category: 'decisions',
135
+ keyPrefix: 'decision',
136
+ confidence: 0.74,
137
+ },
138
+ ];
139
+ for (const pattern of patterns) {
140
+ if (!userOnly && pattern.scope === 'user')
141
+ continue;
142
+ const match = text.match(pattern.regex);
143
+ const captured = match?.[1]?.trim();
144
+ if (!captured)
145
+ continue;
146
+ candidates.push({
147
+ key: makeKey(pattern.keyPrefix, captured),
148
+ value: captured,
149
+ scope: pattern.scope,
150
+ category: pattern.category,
151
+ confidence: pattern.confidence,
152
+ rationale: 'deterministic transcript pattern',
153
+ });
154
+ }
155
+ }
156
+ return dedupeCandidates(candidates).slice(0, 6);
157
+ }
158
+ export async function proposeMemoryCandidatesFromSession(chatHistory, workDir = process.cwd(), client, sessionId) {
159
+ if (!chatHistory || chatHistory.length === 0)
160
+ return [];
161
+ const rawCandidates = await extractWithLlm(chatHistory, client);
162
+ const normalized = rawCandidates.length > 0
163
+ ? rawCandidates
164
+ : extractHeuristicMemoryCandidates(chatHistory);
165
+ if (normalized.length === 0)
166
+ return [];
167
+ const queue = getMemoryCandidateQueue(workDir);
168
+ const proposed = [];
169
+ for (const candidate of normalized) {
170
+ const lint = scanForSecrets(`${candidate.key}\n${candidate.value}\n${candidate.rationale ?? ''}`);
171
+ if (lint.hasSecrets) {
172
+ logger.warn('[memory-auto-proposer] candidate dropped: contains secret/PII material', {
173
+ kinds: lint.matches.map((match) => match.kind),
174
+ });
175
+ continue;
176
+ }
177
+ try {
178
+ const result = queue.propose({
179
+ ...candidate,
180
+ source: 'session_end',
181
+ citations: buildMemoryCitations(chatHistory, `${candidate.key} ${candidate.value}`, sessionId),
182
+ });
183
+ proposed.push(result.candidate);
184
+ }
185
+ catch (err) {
186
+ logger.debug('[memory-auto-proposer] propose failed', { err });
187
+ }
188
+ }
189
+ return proposed;
190
+ }
191
+ async function extractWithLlm(chatHistory, client) {
192
+ let llm = client ?? null;
193
+ if (!llm) {
194
+ if (process.env.NODE_ENV === 'test' || process.env.VITEST)
195
+ return [];
196
+ const detected = detectProviderFromEnv();
197
+ if (!detected)
198
+ return [];
199
+ llm = new CodeBuddyClient(detected.apiKey, detected.defaultModel, detected.baseURL);
200
+ }
201
+ try {
202
+ const res = await llm.chat([
203
+ { role: 'system', content: SYSTEM_PROMPT },
204
+ { role: 'user', content: `Session transcript:\n\n${formatTranscript(chatHistory)}` },
205
+ ]);
206
+ const reply = res.choices[0]?.message?.content || '';
207
+ return parseMemoryCandidates(reply);
208
+ }
209
+ catch (err) {
210
+ logger.debug('[memory-auto-proposer] LLM call failed', { err });
211
+ return [];
212
+ }
213
+ }
214
+ function parseMemoryCandidates(reply) {
215
+ let text = reply.trim();
216
+ const fence = text.match(/```(?:json)?\s*([\s\S]*?)```/);
217
+ const fenced = fence?.[1];
218
+ if (fenced !== undefined)
219
+ text = fenced.trim();
220
+ const start = text.indexOf('[');
221
+ const end = text.lastIndexOf(']');
222
+ if (start === -1 || end === -1 || end <= start)
223
+ return [];
224
+ try {
225
+ const parsed = JSON.parse(text.slice(start, end + 1));
226
+ if (!Array.isArray(parsed))
227
+ return [];
228
+ return dedupeCandidates(parsed.map(normalizeRawCandidate).filter(isCandidate));
229
+ }
230
+ catch {
231
+ return [];
232
+ }
233
+ }
234
+ function normalizeRawCandidate(raw) {
235
+ if (!raw || typeof raw !== 'object')
236
+ return null;
237
+ const item = raw;
238
+ const key = makeSafeKey(item.key ?? '');
239
+ const value = compactText(item.value ?? '').slice(0, 240);
240
+ const scope = item.scope === 'user' ? 'user' : 'project';
241
+ const category = VALID_CATEGORIES.includes(item.category)
242
+ ? item.category
243
+ : 'context';
244
+ if (!key || !value)
245
+ return null;
246
+ return {
247
+ key,
248
+ value,
249
+ scope,
250
+ category,
251
+ ...(typeof item.confidence === 'number' ? { confidence: Math.max(0, Math.min(1, item.confidence)) } : {}),
252
+ ...(item.rationale?.trim() ? { rationale: compactText(item.rationale).slice(0, 240) } : {}),
253
+ };
254
+ }
255
+ function isCandidate(candidate) {
256
+ return candidate !== null;
257
+ }
258
+ function formatTranscript(history) {
259
+ return history
260
+ .slice(-80)
261
+ .map((entry, index) => {
262
+ const role = entry.type === 'tool_result'
263
+ ? `[${entry.toolCall?.function?.name || 'tool'}]`
264
+ : entry.type;
265
+ return `${index + 1}. ${role}: ${compactText(entry.content).slice(0, 800)}`;
266
+ })
267
+ .join('\n');
268
+ }
269
+ function dedupeCandidates(candidates) {
270
+ const seen = new Set();
271
+ const unique = [];
272
+ for (const candidate of candidates) {
273
+ const key = `${candidate.scope}:${candidate.key}:${candidate.value}`.toLowerCase();
274
+ if (seen.has(key))
275
+ continue;
276
+ seen.add(key);
277
+ unique.push(candidate);
278
+ }
279
+ return unique;
280
+ }
281
+ function compactText(text) {
282
+ return text.replace(/\s+/g, ' ').trim();
283
+ }
284
+ function snippetAround(text, terms, maxLength = 220) {
285
+ const lower = text.toLowerCase();
286
+ const indexes = terms
287
+ .map((term) => lower.indexOf(term))
288
+ .filter((index) => index >= 0);
289
+ const first = indexes.length > 0 ? Math.min(...indexes) : 0;
290
+ const start = Math.max(0, first - 60);
291
+ const end = Math.min(text.length, start + maxLength);
292
+ return `${start > 0 ? '...' : ''}${text.slice(start, end)}${end < text.length ? '...' : ''}`;
293
+ }
294
+ function makeKey(prefix, text) {
295
+ const base = makeSafeKey(text).split('-').slice(0, 5).join('-') || prefix;
296
+ return `${prefix}-${base}`.slice(0, 72);
297
+ }
298
+ function makeSafeKey(text) {
299
+ return text
300
+ .normalize('NFKD')
301
+ .replace(/[^\p{L}\p{N}\s_-]/gu, '')
302
+ .trim()
303
+ .toLowerCase()
304
+ .replace(/\s+/g, '-')
305
+ .replace(/-+/g, '-')
306
+ .slice(0, 72);
307
+ }
308
+ //# sourceMappingURL=memory-auto-proposer.js.map
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Review-gated long-term memory candidates.
3
+ *
4
+ * Declarative memories are more dangerous than procedural lessons because they
5
+ * are injected into future prompts as "facts". The safe loop is therefore:
6
+ * infer -> enqueue with evidence -> human accepts/rejects -> write bounded
7
+ * persistent memory. Proposing a candidate never mutates CODEBUDDY_MEMORY.md.
8
+ */
9
+ import { PersistentMemoryManager, type MemoryCategory, type MemoryScope, type MemoryWriteResult } from './persistent-memory.js';
10
+ export declare const MEMORY_CANDIDATE_SCHEMA_VERSION = 1;
11
+ export type MemoryCandidateStatus = 'pending' | 'accepted' | 'rejected';
12
+ export type MemoryCandidateSource = 'self_observed' | 'manual' | 'session_end' | 'precompaction';
13
+ export interface MemoryCandidateCitation {
14
+ sessionId?: string;
15
+ messageId?: number;
16
+ messageIndex?: number;
17
+ role?: string;
18
+ snippet: string;
19
+ }
20
+ export interface MemoryCandidateWriteSummary {
21
+ status: MemoryWriteResult['status'];
22
+ usage: MemoryWriteResult['usage'];
23
+ }
24
+ export interface MemoryCandidate {
25
+ id: string;
26
+ key: string;
27
+ value: string;
28
+ scope: MemoryScope;
29
+ category: MemoryCategory;
30
+ status: MemoryCandidateStatus;
31
+ createdAt: number;
32
+ source: MemoryCandidateSource;
33
+ confidence?: number;
34
+ rationale?: string;
35
+ citations?: MemoryCandidateCitation[];
36
+ reviewedAt?: number;
37
+ reviewedBy?: string;
38
+ reviewNote?: string;
39
+ write?: MemoryCandidateWriteSummary;
40
+ }
41
+ export interface ProposeMemoryCandidateInput {
42
+ key: string;
43
+ value: string;
44
+ scope?: MemoryScope;
45
+ category?: MemoryCategory;
46
+ source?: MemoryCandidateSource;
47
+ confidence?: number;
48
+ rationale?: string;
49
+ citations?: MemoryCandidateCitation[];
50
+ }
51
+ export interface ProposeMemoryCandidateResult {
52
+ candidate: MemoryCandidate;
53
+ deduped: boolean;
54
+ }
55
+ export interface AcceptMemoryCandidateInput {
56
+ reviewedBy: string;
57
+ key?: string;
58
+ value?: string;
59
+ scope?: MemoryScope;
60
+ category?: MemoryCategory;
61
+ reviewNote?: string;
62
+ }
63
+ export interface AcceptMemoryCandidateResult {
64
+ candidate: MemoryCandidate;
65
+ write: MemoryWriteResult;
66
+ }
67
+ export interface RejectMemoryCandidateInput {
68
+ reviewedBy?: string;
69
+ reason?: string;
70
+ }
71
+ export interface MemoryCandidateStats {
72
+ total: number;
73
+ byStatus: Record<MemoryCandidateStatus, number>;
74
+ }
75
+ export declare function getMemoryCandidateQueue(workDir?: string): MemoryCandidateQueue;
76
+ export declare function resetMemoryCandidateQueues(): void;
77
+ export declare class MemoryCandidateQueue {
78
+ private workDir;
79
+ private memoryManager?;
80
+ private filePath;
81
+ private candidates;
82
+ private loaded;
83
+ constructor(workDir?: string, memoryManager?: PersistentMemoryManager | undefined);
84
+ propose(input: ProposeMemoryCandidateInput): ProposeMemoryCandidateResult;
85
+ list(status?: MemoryCandidateStatus): MemoryCandidate[];
86
+ get(id: string): MemoryCandidate | null;
87
+ accept(id: string, input: AcceptMemoryCandidateInput): Promise<AcceptMemoryCandidateResult>;
88
+ reject(id: string, input?: RejectMemoryCandidateInput): MemoryCandidate;
89
+ getStats(): MemoryCandidateStats;
90
+ private load;
91
+ private save;
92
+ }