crewly 1.20.356 → 1.20.358

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 (252) hide show
  1. package/config/constants.ts +11 -0
  2. package/dist/backend/backend/src/constants.d.ts +254 -17
  3. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  4. package/dist/backend/backend/src/constants.js +257 -17
  5. package/dist/backend/backend/src/constants.js.map +1 -1
  6. package/dist/backend/backend/src/index.d.ts.map +1 -1
  7. package/dist/backend/backend/src/index.js +70 -4
  8. package/dist/backend/backend/src/index.js.map +1 -1
  9. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +10 -2
  10. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  11. package/dist/backend/backend/src/services/agent/agent-registration.service.js +27 -2
  12. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  13. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts +34 -1
  14. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
  15. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js +69 -13
  16. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
  17. package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts +8 -0
  18. package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts.map +1 -1
  19. package/dist/backend/backend/src/services/agent/idle-detection.service.js +26 -2
  20. package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
  21. package/dist/backend/backend/src/services/agent/resource-mode.service.d.ts +9 -0
  22. package/dist/backend/backend/src/services/agent/resource-mode.service.d.ts.map +1 -1
  23. package/dist/backend/backend/src/services/agent/resource-mode.service.js +16 -0
  24. package/dist/backend/backend/src/services/agent/resource-mode.service.js.map +1 -1
  25. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts +44 -3
  26. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  27. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js +126 -11
  28. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  29. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +2 -0
  30. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  31. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +9 -1
  32. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  33. package/dist/backend/backend/src/services/memory/agent-memory-refresh.service.d.ts +150 -0
  34. package/dist/backend/backend/src/services/memory/agent-memory-refresh.service.d.ts.map +1 -0
  35. package/dist/backend/backend/src/services/memory/agent-memory-refresh.service.js +319 -0
  36. package/dist/backend/backend/src/services/memory/agent-memory-refresh.service.js.map +1 -0
  37. package/dist/backend/backend/src/services/memory/auto-learning.subscriber.d.ts +9 -7
  38. package/dist/backend/backend/src/services/memory/auto-learning.subscriber.d.ts.map +1 -1
  39. package/dist/backend/backend/src/services/memory/auto-learning.subscriber.js +19 -17
  40. package/dist/backend/backend/src/services/memory/auto-learning.subscriber.js.map +1 -1
  41. package/dist/backend/backend/src/services/memory/memory.service.d.ts.map +1 -1
  42. package/dist/backend/backend/src/services/memory/memory.service.js +11 -0
  43. package/dist/backend/backend/src/services/memory/memory.service.js.map +1 -1
  44. package/dist/backend/backend/src/services/memory/startup-briefing.service.d.ts +104 -0
  45. package/dist/backend/backend/src/services/memory/startup-briefing.service.d.ts.map +1 -0
  46. package/dist/backend/backend/src/services/memory/startup-briefing.service.js +302 -0
  47. package/dist/backend/backend/src/services/memory/startup-briefing.service.js.map +1 -0
  48. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.d.ts +33 -1
  49. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.d.ts.map +1 -1
  50. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.js +69 -4
  51. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.js.map +1 -1
  52. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.wiring.d.ts +24 -1
  53. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.wiring.d.ts.map +1 -1
  54. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.wiring.js +54 -3
  55. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.wiring.js.map +1 -1
  56. package/dist/backend/backend/src/services/orc/owner-completion-report.service.d.ts +9 -0
  57. package/dist/backend/backend/src/services/orc/owner-completion-report.service.d.ts.map +1 -1
  58. package/dist/backend/backend/src/services/orc/owner-completion-report.service.js +16 -2
  59. package/dist/backend/backend/src/services/orc/owner-completion-report.service.js.map +1 -1
  60. package/dist/backend/backend/src/services/project-tickets/ticket-prefixes.d.ts +30 -0
  61. package/dist/backend/backend/src/services/project-tickets/ticket-prefixes.d.ts.map +1 -0
  62. package/dist/backend/backend/src/services/project-tickets/ticket-prefixes.js +48 -0
  63. package/dist/backend/backend/src/services/project-tickets/ticket-prefixes.js.map +1 -0
  64. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts +8 -0
  65. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  66. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +29 -8
  67. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  68. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts +27 -0
  69. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts.map +1 -1
  70. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js +78 -24
  71. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js.map +1 -1
  72. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.d.ts +23 -0
  73. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.d.ts.map +1 -1
  74. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js +38 -1
  75. package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js.map +1 -1
  76. package/dist/backend/backend/src/services/slack/agent-coordination.d.ts +119 -0
  77. package/dist/backend/backend/src/services/slack/agent-coordination.d.ts.map +1 -0
  78. package/dist/backend/backend/src/services/slack/agent-coordination.js +174 -0
  79. package/dist/backend/backend/src/services/slack/agent-coordination.js.map +1 -0
  80. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
  81. package/dist/backend/backend/src/services/slack/slack-initializer.js +7 -0
  82. package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
  83. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +167 -0
  84. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  85. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +619 -9
  86. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  87. package/dist/backend/backend/src/services/slack/slack-thread-context.service.d.ts +22 -0
  88. package/dist/backend/backend/src/services/slack/slack-thread-context.service.d.ts.map +1 -1
  89. package/dist/backend/backend/src/services/slack/slack-thread-context.service.js +49 -12
  90. package/dist/backend/backend/src/services/slack/slack-thread-context.service.js.map +1 -1
  91. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts +7 -0
  92. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
  93. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js +25 -4
  94. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
  95. package/dist/backend/backend/src/services/team-move/team-move-chat.d.ts +21 -1
  96. package/dist/backend/backend/src/services/team-move/team-move-chat.d.ts.map +1 -1
  97. package/dist/backend/backend/src/services/team-move/team-move-chat.js +54 -2
  98. package/dist/backend/backend/src/services/team-move/team-move-chat.js.map +1 -1
  99. package/dist/backend/backend/src/services/team-move/team-move-exporter.d.ts +9 -4
  100. package/dist/backend/backend/src/services/team-move/team-move-exporter.d.ts.map +1 -1
  101. package/dist/backend/backend/src/services/team-move/team-move-exporter.js +32 -10
  102. package/dist/backend/backend/src/services/team-move/team-move-exporter.js.map +1 -1
  103. package/dist/backend/backend/src/services/team-move/team-move-importer.d.ts +19 -0
  104. package/dist/backend/backend/src/services/team-move/team-move-importer.d.ts.map +1 -1
  105. package/dist/backend/backend/src/services/team-move/team-move-importer.js +78 -3
  106. package/dist/backend/backend/src/services/team-move/team-move-importer.js.map +1 -1
  107. package/dist/backend/backend/src/services/team-move/team-move-runtime.d.ts.map +1 -1
  108. package/dist/backend/backend/src/services/team-move/team-move-runtime.js +8 -0
  109. package/dist/backend/backend/src/services/team-move/team-move-runtime.js.map +1 -1
  110. package/dist/backend/backend/src/services/team-move/team-move-transcripts.d.ts +106 -0
  111. package/dist/backend/backend/src/services/team-move/team-move-transcripts.d.ts.map +1 -0
  112. package/dist/backend/backend/src/services/team-move/team-move-transcripts.js +212 -0
  113. package/dist/backend/backend/src/services/team-move/team-move-transcripts.js.map +1 -0
  114. package/dist/backend/backend/src/services/team-move/team-move.types.d.ts +20 -0
  115. package/dist/backend/backend/src/services/team-move/team-move.types.d.ts.map +1 -1
  116. package/dist/backend/backend/src/services/team-move/team-move.types.js.map +1 -1
  117. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts +2 -2
  118. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts.map +1 -1
  119. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js +11 -4
  120. package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js.map +1 -1
  121. package/dist/backend/backend/src/services/wiki/wiki-backlinks.service.d.ts.map +1 -1
  122. package/dist/backend/backend/src/services/wiki/wiki-backlinks.service.js +3 -0
  123. package/dist/backend/backend/src/services/wiki/wiki-backlinks.service.js.map +1 -1
  124. package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.d.ts.map +1 -1
  125. package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.js +4 -1
  126. package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.js.map +1 -1
  127. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.d.ts.map +1 -1
  128. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js +4 -0
  129. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js.map +1 -1
  130. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts +33 -4
  131. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
  132. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js +75 -7
  133. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
  134. package/dist/backend/backend/src/services/wiki/wiki-lint.service.d.ts.map +1 -1
  135. package/dist/backend/backend/src/services/wiki/wiki-lint.service.js +3 -1
  136. package/dist/backend/backend/src/services/wiki/wiki-lint.service.js.map +1 -1
  137. package/dist/backend/backend/src/services/wiki/wiki-log-compile.service.d.ts +116 -0
  138. package/dist/backend/backend/src/services/wiki/wiki-log-compile.service.d.ts.map +1 -0
  139. package/dist/backend/backend/src/services/wiki/wiki-log-compile.service.js +227 -0
  140. package/dist/backend/backend/src/services/wiki/wiki-log-compile.service.js.map +1 -0
  141. package/dist/backend/backend/src/services/wiki/wiki-log-entries.d.ts +142 -0
  142. package/dist/backend/backend/src/services/wiki/wiki-log-entries.d.ts.map +1 -0
  143. package/dist/backend/backend/src/services/wiki/wiki-log-entries.js +222 -0
  144. package/dist/backend/backend/src/services/wiki/wiki-log-entries.js.map +1 -0
  145. package/dist/backend/backend/src/services/wiki/wiki-log-rotation.service.d.ts +93 -0
  146. package/dist/backend/backend/src/services/wiki/wiki-log-rotation.service.d.ts.map +1 -0
  147. package/dist/backend/backend/src/services/wiki/wiki-log-rotation.service.js +142 -0
  148. package/dist/backend/backend/src/services/wiki/wiki-log-rotation.service.js.map +1 -0
  149. package/dist/backend/backend/src/services/wiki/wiki-maintenance.service.d.ts +104 -0
  150. package/dist/backend/backend/src/services/wiki/wiki-maintenance.service.d.ts.map +1 -0
  151. package/dist/backend/backend/src/services/wiki/wiki-maintenance.service.js +192 -0
  152. package/dist/backend/backend/src/services/wiki/wiki-maintenance.service.js.map +1 -0
  153. package/dist/backend/backend/src/services/wiki/wiki-query.service.d.ts +3 -2
  154. package/dist/backend/backend/src/services/wiki/wiki-query.service.d.ts.map +1 -1
  155. package/dist/backend/backend/src/services/wiki/wiki-query.service.js +23 -39
  156. package/dist/backend/backend/src/services/wiki/wiki-query.service.js.map +1 -1
  157. package/dist/backend/backend/src/services/wiki/wiki-queue-drain.service.d.ts +105 -0
  158. package/dist/backend/backend/src/services/wiki/wiki-queue-drain.service.d.ts.map +1 -0
  159. package/dist/backend/backend/src/services/wiki/wiki-queue-drain.service.js +195 -0
  160. package/dist/backend/backend/src/services/wiki/wiki-queue-drain.service.js.map +1 -0
  161. package/dist/backend/backend/src/services/wiki/wiki-recent.service.d.ts.map +1 -1
  162. package/dist/backend/backend/src/services/wiki/wiki-recent.service.js +3 -0
  163. package/dist/backend/backend/src/services/wiki/wiki-recent.service.js.map +1 -1
  164. package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts +28 -5
  165. package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -1
  166. package/dist/backend/backend/src/services/wiki/wiki-search.service.js +96 -25
  167. package/dist/backend/backend/src/services/wiki/wiki-search.service.js.map +1 -1
  168. package/dist/backend/backend/src/services/wiki/wiki-vault-walk.d.ts +11 -0
  169. package/dist/backend/backend/src/services/wiki/wiki-vault-walk.d.ts.map +1 -1
  170. package/dist/backend/backend/src/services/wiki/wiki-vault-walk.js +17 -1
  171. package/dist/backend/backend/src/services/wiki/wiki-vault-walk.js.map +1 -1
  172. package/dist/backend/build-info.json +2 -2
  173. package/dist/backend/config/constants.d.ts +11 -0
  174. package/dist/backend/config/constants.d.ts.map +1 -1
  175. package/dist/backend/config/constants.js +11 -0
  176. package/dist/backend/config/constants.js.map +1 -1
  177. package/dist/cli/backend/src/constants.d.ts +254 -17
  178. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  179. package/dist/cli/backend/src/constants.js +257 -17
  180. package/dist/cli/backend/src/constants.js.map +1 -1
  181. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +10 -2
  182. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  183. package/dist/cli/backend/src/services/agent/agent-registration.service.js +27 -2
  184. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  185. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts +34 -1
  186. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
  187. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js +69 -13
  188. package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
  189. package/dist/cli/backend/src/services/agent/resource-mode.service.d.ts +9 -0
  190. package/dist/cli/backend/src/services/agent/resource-mode.service.d.ts.map +1 -1
  191. package/dist/cli/backend/src/services/agent/resource-mode.service.js +16 -0
  192. package/dist/cli/backend/src/services/agent/resource-mode.service.js.map +1 -1
  193. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts +44 -3
  194. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  195. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js +126 -11
  196. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  197. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +2 -0
  198. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  199. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +9 -1
  200. package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  201. package/dist/cli/backend/src/services/memory/memory.service.d.ts.map +1 -1
  202. package/dist/cli/backend/src/services/memory/memory.service.js +11 -0
  203. package/dist/cli/backend/src/services/memory/memory.service.js.map +1 -1
  204. package/dist/cli/backend/src/services/memory/startup-briefing.service.d.ts +104 -0
  205. package/dist/cli/backend/src/services/memory/startup-briefing.service.d.ts.map +1 -0
  206. package/dist/cli/backend/src/services/memory/startup-briefing.service.js +302 -0
  207. package/dist/cli/backend/src/services/memory/startup-briefing.service.js.map +1 -0
  208. package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.d.ts +33 -1
  209. package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.d.ts.map +1 -1
  210. package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.js +69 -4
  211. package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.js.map +1 -1
  212. package/dist/cli/backend/src/services/slack/agent-coordination.d.ts +119 -0
  213. package/dist/cli/backend/src/services/slack/agent-coordination.d.ts.map +1 -0
  214. package/dist/cli/backend/src/services/slack/agent-coordination.js +174 -0
  215. package/dist/cli/backend/src/services/slack/agent-coordination.js.map +1 -0
  216. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +167 -0
  217. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  218. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +619 -9
  219. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  220. package/dist/cli/backend/src/services/slack/slack-thread-context.service.d.ts +22 -0
  221. package/dist/cli/backend/src/services/slack/slack-thread-context.service.d.ts.map +1 -1
  222. package/dist/cli/backend/src/services/slack/slack-thread-context.service.js +49 -12
  223. package/dist/cli/backend/src/services/slack/slack-thread-context.service.js.map +1 -1
  224. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts +7 -0
  225. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
  226. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js +25 -4
  227. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
  228. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts +33 -4
  229. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
  230. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js +75 -7
  231. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
  232. package/dist/cli/backend/src/services/wiki/wiki-log-entries.d.ts +142 -0
  233. package/dist/cli/backend/src/services/wiki/wiki-log-entries.d.ts.map +1 -0
  234. package/dist/cli/backend/src/services/wiki/wiki-log-entries.js +222 -0
  235. package/dist/cli/backend/src/services/wiki/wiki-log-entries.js.map +1 -0
  236. package/dist/cli/backend/src/services/wiki/wiki-recent.service.d.ts +51 -0
  237. package/dist/cli/backend/src/services/wiki/wiki-recent.service.d.ts.map +1 -0
  238. package/dist/cli/backend/src/services/wiki/wiki-recent.service.js +105 -0
  239. package/dist/cli/backend/src/services/wiki/wiki-recent.service.js.map +1 -0
  240. package/dist/cli/backend/src/services/wiki/wiki-search.service.d.ts +28 -5
  241. package/dist/cli/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -1
  242. package/dist/cli/backend/src/services/wiki/wiki-search.service.js +96 -25
  243. package/dist/cli/backend/src/services/wiki/wiki-search.service.js.map +1 -1
  244. package/dist/cli/backend/src/services/wiki/wiki-vault-walk.d.ts +11 -0
  245. package/dist/cli/backend/src/services/wiki/wiki-vault-walk.d.ts.map +1 -1
  246. package/dist/cli/backend/src/services/wiki/wiki-vault-walk.js +17 -1
  247. package/dist/cli/backend/src/services/wiki/wiki-vault-walk.js.map +1 -1
  248. package/dist/cli/config/constants.d.ts +11 -0
  249. package/dist/cli/config/constants.d.ts.map +1 -1
  250. package/dist/cli/config/constants.js +11 -0
  251. package/dist/cli/config/constants.js.map +1 -1
  252. package/package.json +1 -1
@@ -0,0 +1,116 @@
1
+ /**
2
+ * WikiLogCompileService — turns the week's log entries into a digest page.
3
+ *
4
+ * Agents append learnings to `llm-curated/log.md` and nothing ever read
5
+ * them back (#1345): bookkeep waited for ten net-new *pages* and reflect
6
+ * fed a queue nobody drained. This service does the deterministic half of
7
+ * "compile": once a day it takes the non-noise, not-yet-compiled entries
8
+ * of the last `COMPILE_WINDOW_DAYS`, groups them by category and topic,
9
+ * and writes (or appends to) one page per vault and ISO week under
10
+ * `llm-curated/digests/`, through the normal ingest path so the page gets
11
+ * frontmatter, an index line and history. Compiled entries are remembered
12
+ * by body key in `<vault>/.wiki-compile-state.json` so a later run does
13
+ * not compile them again. No LLM; an agent can still rewrite a digest into
14
+ * a proper topic page.
15
+ *
16
+ * @module services/wiki/wiki-log-compile.service
17
+ */
18
+ import { WikiIngestService } from './wiki-ingest.service.js';
19
+ /** Options for {@link WikiLogCompileService.compile}. */
20
+ export interface WikiLogCompileOptions {
21
+ /** Report only; write nothing (page or state). */
22
+ dryRun?: boolean;
23
+ /** Clock (tests). */
24
+ now?: number;
25
+ /** Window override (tests). */
26
+ windowDays?: number;
27
+ /** Minimum-entries override (tests). */
28
+ minEntries?: number;
29
+ }
30
+ /** Outcome of one vault's compile. */
31
+ export interface WikiLogCompileResult {
32
+ vaultPath: string;
33
+ /** False when the log is missing, too few new entries, or ingest refused the page. */
34
+ compiled: boolean;
35
+ reason?: 'no_log' | 'too_few_entries' | 'ingest_refused';
36
+ /** Uncompiled non-noise entries found in the window. */
37
+ candidates: number;
38
+ /** Entries written into the digest. */
39
+ entriesCompiled: number;
40
+ /** Vault-relative digest page (planned in a dry run). */
41
+ pagePath?: string;
42
+ /** Topic groups written. */
43
+ groups: number;
44
+ dryRun: boolean;
45
+ }
46
+ /**
47
+ * ISO-8601 week label (`YYYY-Www`) of a date.
48
+ *
49
+ * @param ms - Epoch ms
50
+ * @returns Label such as `2026-W42`
51
+ */
52
+ export declare function isoWeekLabel(ms: number): string;
53
+ /**
54
+ * Compiles vault log entries into weekly digest pages. Stateless singleton
55
+ * apart from the per-vault state file.
56
+ */
57
+ export declare class WikiLogCompileService {
58
+ private readonly ingest;
59
+ private static instance;
60
+ private readonly logger;
61
+ constructor(ingest?: WikiIngestService);
62
+ static getInstance(): WikiLogCompileService;
63
+ /** Test-only reset. */
64
+ static _resetForTesting(): void;
65
+ /**
66
+ * Compile one vault's uncompiled recent entries into this week's digest.
67
+ *
68
+ * @param vaultPath - Vault root
69
+ * @param opts - Dry run, clock and threshold overrides
70
+ * @returns What was (or would be) written
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * const r = await WikiLogCompileService.getInstance().compile(vault);
75
+ * // r.compiled && r.pagePath === 'llm-curated/digests/2026-W42.md'
76
+ * ```
77
+ */
78
+ compile(vaultPath: string, opts?: WikiLogCompileOptions): Promise<WikiLogCompileResult>;
79
+ /**
80
+ * Compile every vault in a list; failures are logged per vault.
81
+ *
82
+ * @param vaults - Vault roots
83
+ * @param opts - Passed to {@link compile}
84
+ * @returns One result per vault checked
85
+ */
86
+ compileAll(vaults: readonly string[], opts?: WikiLogCompileOptions): Promise<WikiLogCompileResult[]>;
87
+ /**
88
+ * Group entries by `<category> / <topic>`, largest groups first, stable
89
+ * within a group (oldest first).
90
+ *
91
+ * @param entries - Candidate entries
92
+ * @returns Groups with a label and members
93
+ */
94
+ private group;
95
+ /**
96
+ * `k gotchas, m decisions, …` for the page summary.
97
+ *
98
+ * @param entries - Entries
99
+ * @returns Comma-separated counts, most frequent first
100
+ */
101
+ private categoryCounts;
102
+ /**
103
+ * Markdown body of one compile run: a dated heading, then one `###` per
104
+ * group with one bullet per entry (author, date, body clipped).
105
+ *
106
+ * @param groups - Grouped entries
107
+ * @param all - All entries in the run (for the date range)
108
+ * @param now - Epoch ms of the run
109
+ * @returns Markdown
110
+ */
111
+ private renderBody;
112
+ private statePath;
113
+ private readState;
114
+ private writeState;
115
+ }
116
+ //# sourceMappingURL=wiki-log-compile.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki-log-compile.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-log-compile.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAkB7D,yDAAyD;AACzD,MAAM,WAAW,qBAAqB;IACpC,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qBAAqB;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,sCAAsC;AACtC,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,QAAQ,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;IACzD,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,eAAe,EAAE,MAAM,CAAC;IACxB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAS/C;AAED;;;GAGG;AACH,qBAAa,qBAAqB;IAIpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAsC;IAC7D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;gBAEZ,MAAM,GAAE,iBAAmD;IAIxF,MAAM,CAAC,WAAW,IAAI,qBAAqB;IAK3C,uBAAuB;IACvB,MAAM,CAAC,gBAAgB,IAAI,IAAI;IAI/B;;;;;;;;;;;;OAYG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE,qBAA0B,GAAG,OAAO,CAAC,oBAAoB,CAAC;IA6DjG;;;;;;OAMG;IACG,UAAU,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,GAAE,qBAA0B,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAc9G;;;;;;OAMG;IACH,OAAO,CAAC,KAAK;IAeb;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAYtB;;;;;;;;OAQG;IACH,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,SAAS;YAIH,SAAS;YAQT,UAAU;CAGzB"}
@@ -0,0 +1,227 @@
1
+ /**
2
+ * WikiLogCompileService — turns the week's log entries into a digest page.
3
+ *
4
+ * Agents append learnings to `llm-curated/log.md` and nothing ever read
5
+ * them back (#1345): bookkeep waited for ten net-new *pages* and reflect
6
+ * fed a queue nobody drained. This service does the deterministic half of
7
+ * "compile": once a day it takes the non-noise, not-yet-compiled entries
8
+ * of the last `COMPILE_WINDOW_DAYS`, groups them by category and topic,
9
+ * and writes (or appends to) one page per vault and ISO week under
10
+ * `llm-curated/digests/`, through the normal ingest path so the page gets
11
+ * frontmatter, an index line and history. Compiled entries are remembered
12
+ * by body key in `<vault>/.wiki-compile-state.json` so a later run does
13
+ * not compile them again. No LLM; an agent can still rewrite a digest into
14
+ * a proper topic page.
15
+ *
16
+ * @module services/wiki/wiki-log-compile.service
17
+ */
18
+ import * as path from 'path';
19
+ import * as fs from 'fs/promises';
20
+ import { LoggerService } from '../core/logger.service.js';
21
+ import { WIKI_LOG_CONSTANTS } from '../../constants.js';
22
+ import { atomicWriteJson, safeReadJson } from '../../utils/file-io.utils.js';
23
+ import { WikiIngestService } from './wiki-ingest.service.js';
24
+ import { logBodyKey, logEntryCategory, logEntryTopic, parseLogEntries, recentContentEntries, } from './wiki-log-entries.js';
25
+ /**
26
+ * ISO-8601 week label (`YYYY-Www`) of a date.
27
+ *
28
+ * @param ms - Epoch ms
29
+ * @returns Label such as `2026-W42`
30
+ */
31
+ export function isoWeekLabel(ms) {
32
+ const d = new Date(ms);
33
+ const date = new Date(Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate()));
34
+ // Thursday of the current week decides the ISO year.
35
+ const day = date.getUTCDay() || 7;
36
+ date.setUTCDate(date.getUTCDate() + 4 - day);
37
+ const yearStart = Date.UTC(date.getUTCFullYear(), 0, 1);
38
+ const week = Math.ceil(((date.getTime() - yearStart) / 86_400_000 + 1) / 7);
39
+ return `${date.getUTCFullYear()}-W${String(week).padStart(2, '0')}`;
40
+ }
41
+ /**
42
+ * Compiles vault log entries into weekly digest pages. Stateless singleton
43
+ * apart from the per-vault state file.
44
+ */
45
+ export class WikiLogCompileService {
46
+ ingest;
47
+ static instance = null;
48
+ logger;
49
+ constructor(ingest = WikiIngestService.getInstance()) {
50
+ this.ingest = ingest;
51
+ this.logger = LoggerService.getInstance().createComponentLogger('WikiLogCompile');
52
+ }
53
+ static getInstance() {
54
+ if (!this.instance)
55
+ this.instance = new WikiLogCompileService();
56
+ return this.instance;
57
+ }
58
+ /** Test-only reset. */
59
+ static _resetForTesting() {
60
+ this.instance = null;
61
+ }
62
+ /**
63
+ * Compile one vault's uncompiled recent entries into this week's digest.
64
+ *
65
+ * @param vaultPath - Vault root
66
+ * @param opts - Dry run, clock and threshold overrides
67
+ * @returns What was (or would be) written
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * const r = await WikiLogCompileService.getInstance().compile(vault);
72
+ * // r.compiled && r.pagePath === 'llm-curated/digests/2026-W42.md'
73
+ * ```
74
+ */
75
+ async compile(vaultPath, opts = {}) {
76
+ const dryRun = opts.dryRun === true;
77
+ const now = opts.now ?? Date.now();
78
+ const windowDays = opts.windowDays ?? WIKI_LOG_CONSTANTS.COMPILE_WINDOW_DAYS;
79
+ const minEntries = opts.minEntries ?? WIKI_LOG_CONSTANTS.COMPILE_MIN_ENTRIES;
80
+ const base = { vaultPath, compiled: false, candidates: 0, entriesCompiled: 0, groups: 0, dryRun };
81
+ let raw;
82
+ try {
83
+ raw = await fs.readFile(path.join(vaultPath, WIKI_LOG_CONSTANTS.LOG_RELATIVE_PATH), 'utf8');
84
+ }
85
+ catch {
86
+ return { ...base, reason: 'no_log' };
87
+ }
88
+ const state = await this.readState(vaultPath);
89
+ const done = new Set(state.compiledKeys);
90
+ const candidates = recentContentEntries(parseLogEntries(raw), windowDays, now)
91
+ .filter((e) => !done.has(logBodyKey(e.body)))
92
+ .sort((a, b) => a.timestampMs - b.timestampMs)
93
+ .slice(0, WIKI_LOG_CONSTANTS.COMPILE_MAX_ENTRIES);
94
+ base.candidates = candidates.length;
95
+ if (candidates.length < minEntries)
96
+ return { ...base, reason: 'too_few_entries' };
97
+ const week = isoWeekLabel(now);
98
+ const pagePath = `${WIKI_LOG_CONSTANTS.COMPILE_DIR}/${week}.md`;
99
+ const groups = this.group(candidates);
100
+ const body = this.renderBody(groups, candidates, now);
101
+ const result = { ...base, compiled: true, entriesCompiled: candidates.length, pagePath, groups: groups.length };
102
+ if (dryRun) {
103
+ this.logger.info('WikiLogCompile dry run — would write digest', { vaultPath, pagePath, entries: candidates.length, groups: groups.length });
104
+ return result;
105
+ }
106
+ const counts = this.categoryCounts(candidates);
107
+ const outcome = await this.ingest.ingest({
108
+ vaultPath,
109
+ sourceType: 'record_learning',
110
+ sourceRef: `wiki-log-compile:${week}:${new Date(now).toISOString()}`,
111
+ sourceBody: body,
112
+ callerSession: 'system:wiki-log-compile',
113
+ targetRelativePath: pagePath,
114
+ title: `Digest ${week}`,
115
+ summary: `${candidates.length} learnings from the vault log (${counts}) compiled ${new Date(now).toISOString().slice(0, 10)} — read before working on these topics; promote what still matters to its own page.`,
116
+ keepBecause: 'reusable_method',
117
+ tags: ['digest', week],
118
+ });
119
+ if (!outcome.ok) {
120
+ this.logger.warn('WikiLogCompile: ingest refused the digest page (non-fatal)', { vaultPath, pagePath, reason: outcome.reason });
121
+ return { ...base, reason: 'ingest_refused', candidates: candidates.length };
122
+ }
123
+ const keys = [...state.compiledKeys, ...candidates.map((e) => logBodyKey(e.body))];
124
+ await this.writeState(vaultPath, {
125
+ compiledKeys: keys.slice(-WIKI_LOG_CONSTANTS.COMPILE_STATE_MAX_KEYS),
126
+ lastCompiledAt: new Date(now).toISOString(),
127
+ });
128
+ this.logger.info('WikiLogCompile wrote digest', { vaultPath, pagePath, entries: candidates.length, groups: groups.length });
129
+ return result;
130
+ }
131
+ /**
132
+ * Compile every vault in a list; failures are logged per vault.
133
+ *
134
+ * @param vaults - Vault roots
135
+ * @param opts - Passed to {@link compile}
136
+ * @returns One result per vault checked
137
+ */
138
+ async compileAll(vaults, opts = {}) {
139
+ const out = [];
140
+ for (const vaultPath of vaults) {
141
+ try {
142
+ out.push(await this.compile(vaultPath, opts));
143
+ }
144
+ catch (err) {
145
+ this.logger.warn('WikiLogCompile failed for vault (non-fatal)', { vaultPath, error: err instanceof Error ? err.message : String(err) });
146
+ }
147
+ }
148
+ return out;
149
+ }
150
+ // ---------------------------------------------------------------------------
151
+ /**
152
+ * Group entries by `<category> / <topic>`, largest groups first, stable
153
+ * within a group (oldest first).
154
+ *
155
+ * @param entries - Candidate entries
156
+ * @returns Groups with a label and members
157
+ */
158
+ group(entries) {
159
+ const byLabel = new Map();
160
+ for (const e of entries) {
161
+ const category = logEntryCategory(e.body);
162
+ const topic = logEntryTopic(e.body);
163
+ const label = topic.toLowerCase() === category ? category : `${category} / ${topic}`;
164
+ const list = byLabel.get(label) ?? [];
165
+ list.push(e);
166
+ byLabel.set(label, list);
167
+ }
168
+ return [...byLabel.entries()]
169
+ .map(([label, members]) => ({ label, members }))
170
+ .sort((a, b) => b.members.length - a.members.length || a.label.localeCompare(b.label));
171
+ }
172
+ /**
173
+ * `k gotchas, m decisions, …` for the page summary.
174
+ *
175
+ * @param entries - Entries
176
+ * @returns Comma-separated counts, most frequent first
177
+ */
178
+ categoryCounts(entries) {
179
+ const counts = new Map();
180
+ for (const e of entries) {
181
+ const c = logEntryCategory(e.body);
182
+ counts.set(c, (counts.get(c) ?? 0) + 1);
183
+ }
184
+ return [...counts.entries()]
185
+ .sort((a, b) => b[1] - a[1])
186
+ .map(([c, n]) => `${n} ${c}`)
187
+ .join(', ');
188
+ }
189
+ /**
190
+ * Markdown body of one compile run: a dated heading, then one `###` per
191
+ * group with one bullet per entry (author, date, body clipped).
192
+ *
193
+ * @param groups - Grouped entries
194
+ * @param all - All entries in the run (for the date range)
195
+ * @param now - Epoch ms of the run
196
+ * @returns Markdown
197
+ */
198
+ renderBody(groups, all, now) {
199
+ const first = all[0]?.timestamp.slice(0, 10) ?? '';
200
+ const last = all[all.length - 1]?.timestamp.slice(0, 10) ?? '';
201
+ const lines = [`## Compiled ${new Date(now).toISOString().slice(0, 10)} — ${all.length} entries from ${first} to ${last}`, ''];
202
+ for (const g of groups) {
203
+ lines.push(`### ${g.label} (${g.members.length})`, '');
204
+ for (const e of g.members) {
205
+ const body = e.body.replace(/\s+/g, ' ').trim();
206
+ const clipped = body.length > WIKI_LOG_CONSTANTS.COMPILE_ENTRY_MAX_CHARS ? `${body.slice(0, WIKI_LOG_CONSTANTS.COMPILE_ENTRY_MAX_CHARS - 1)}…` : body;
207
+ lines.push(`- ${e.timestamp.slice(0, 10)} · ${e.caller}: ${clipped}`);
208
+ }
209
+ lines.push('');
210
+ }
211
+ return lines.join('\n').trim();
212
+ }
213
+ statePath(vaultPath) {
214
+ return path.join(vaultPath, WIKI_LOG_CONSTANTS.COMPILE_STATE_FILE);
215
+ }
216
+ async readState(vaultPath) {
217
+ const data = await safeReadJson(this.statePath(vaultPath), null);
218
+ return {
219
+ compiledKeys: Array.isArray(data?.compiledKeys) ? data.compiledKeys.filter((k) => typeof k === 'string') : [],
220
+ lastCompiledAt: typeof data?.lastCompiledAt === 'string' ? data.lastCompiledAt : null,
221
+ };
222
+ }
223
+ async writeState(vaultPath, state) {
224
+ await atomicWriteJson(this.statePath(vaultPath), state);
225
+ }
226
+ }
227
+ //# sourceMappingURL=wiki-log-compile.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki-log-compile.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-log-compile.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * The vault activity log (`llm-curated/log.md`) as entries.
3
+ *
4
+ * One place that knows the entry format `WikiIngestService` appends:
5
+ *
6
+ * ## [<ISO>] <sourceType> | <caller>
7
+ *
8
+ * ref: <sourceRef>
9
+ *
10
+ * <body>
11
+ *
12
+ * Used by search (one document per recent entry), rotation (carry forward
13
+ * the recent non-noise entries), the digest compiler and the startup
14
+ * briefing. Also decides what counts as a content-free entry (#1345): a
15
+ * templated state transition carries nothing a reader could use.
16
+ *
17
+ * @module services/wiki/wiki-log-entries
18
+ */
19
+ /** One parsed `log.md` entry. */
20
+ export interface WikiLogEntryRecord {
21
+ /** ISO timestamp from the header. */
22
+ timestamp: string;
23
+ /** Epoch ms of `timestamp`, or NaN when it does not parse. */
24
+ timestampMs: number;
25
+ /** Source type from the header (`record_learning`, `user_chat`, ...). */
26
+ sourceType: string;
27
+ /** Caller session (or source ref) from the header. */
28
+ caller: string;
29
+ /** `ref:` line value, '' when absent. */
30
+ ref: string;
31
+ /** Entry body after the `ref:` line, trimmed. */
32
+ body: string;
33
+ /** The entry's raw text, header included, as it stands in the file. */
34
+ raw: string;
35
+ }
36
+ /** Header a fresh `log.md` starts with. */
37
+ export declare const WIKI_LOG_HEADER = "# Activity log\n\nAppend-only log of ingested sources. Each entry: `## [<ISO>] <sourceType> | <caller>`.\n";
38
+ /**
39
+ * Whether a learning / log body is a content-free templated record.
40
+ *
41
+ * @param body - Entry body or learning text
42
+ * @returns True when the text matches a known templated shape or is blank
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * isNoiseLogBody('(learning) [pattern] [[WorkItem-1]] task:done running→done. timestamp=2026-10-17T00:00:00Z. Source: x.'); // true
47
+ * isNoiseLogBody('(gotcha) complete-task rejects queued→done; accept-task first.'); // false
48
+ * ```
49
+ */
50
+ export declare function isNoiseLogBody(body: string | undefined | null): boolean;
51
+ /**
52
+ * Conversation handover snapshots (`**Conversation handover — <agent> — task <id>** (fact) …`)
53
+ * that the fresh-conversation path mirrors into the vault. They are state,
54
+ * not knowledge: a thousand of them a week on one machine. They stay in the
55
+ * log (the agent is pointed at them) but are not knowledge for search, the
56
+ * digest, memory or the briefing.
57
+ *
58
+ * @param body - Entry body
59
+ * @returns True for a handover snapshot
60
+ */
61
+ export declare function isHandoverLogBody(body: string | undefined | null): boolean;
62
+ /**
63
+ * Normalised form of a body used for duplicate detection: whitespace
64
+ * collapsed, case folded, trailing punctuation dropped.
65
+ *
66
+ * @param body - Entry body
67
+ * @returns Normalised text
68
+ */
69
+ export declare function normalizeLogBody(body: string): string;
70
+ /**
71
+ * Stable key of an entry's content (sha1 of the normalised body). Two
72
+ * entries with the same body share a key whatever their timestamps.
73
+ *
74
+ * @param body - Entry body
75
+ * @returns 40-char hex digest
76
+ */
77
+ export declare function logBodyKey(body: string): string;
78
+ /**
79
+ * Parse a whole `log.md` into entries, in file order. Text before the
80
+ * first entry header (the preamble, a migrated learnings import) is not an
81
+ * entry and is dropped.
82
+ *
83
+ * @param raw - File content
84
+ * @returns Entries in file order
85
+ */
86
+ export declare function parseLogEntries(raw: string): WikiLogEntryRecord[];
87
+ /**
88
+ * Serialise an entry back into the append format (leading blank line,
89
+ * header, ref line, body, trailing blank line).
90
+ *
91
+ * @param entry - Entry to serialise
92
+ * @returns Markdown block
93
+ */
94
+ export declare function serializeLogEntry(entry: Pick<WikiLogEntryRecord, 'timestamp' | 'sourceType' | 'caller' | 'ref' | 'body'>): string;
95
+ /**
96
+ * The entries from the last `days` days that carry content, newest first,
97
+ * with duplicate bodies collapsed (the newest copy wins). Handover
98
+ * snapshots are left out unless `includeHandovers` is set (rotation keeps
99
+ * them; search, digest, memory and briefing do not).
100
+ *
101
+ * @param entries - Parsed entries (any order)
102
+ * @param days - Window length
103
+ * @param now - Current epoch ms
104
+ * @param limit - Cap on returned entries
105
+ * @param options - `includeHandovers` keeps handover snapshots
106
+ * @returns Recent, non-noise, deduped entries, newest first
107
+ */
108
+ export declare function recentContentEntries(entries: readonly WikiLogEntryRecord[], days: number, now?: number, limit?: number, options?: {
109
+ includeHandovers?: boolean;
110
+ }): WikiLogEntryRecord[];
111
+ /**
112
+ * Vault-relative "path" of a log entry as surfaced by search:
113
+ * `llm-curated/log.md#<ISO timestamp>`.
114
+ *
115
+ * @param entry - Entry
116
+ * @returns Pseudo path
117
+ */
118
+ export declare function logEntryPath(entry: Pick<WikiLogEntryRecord, 'timestamp'>): string;
119
+ /**
120
+ * Whether a vault-relative path points at a log entry (as opposed to a page).
121
+ *
122
+ * @param relativePath - Path from a search hit
123
+ * @returns True for `llm-curated/log.md#…`
124
+ */
125
+ export declare function isLogEntryPath(relativePath: string): boolean;
126
+ /**
127
+ * The `(category)` prefix `MemoryService` puts on a mirrored memory
128
+ * (`(gotcha) …`, `(decision) …`) or the `[tag]` an auto-recorder uses.
129
+ *
130
+ * @param body - Entry body
131
+ * @returns Lower-case category, or 'learning' when none is present
132
+ */
133
+ export declare function logEntryCategory(body: string): string;
134
+ /**
135
+ * Topic of an entry for grouping in a digest: the first `[[Entity]]` link,
136
+ * else a bold `**Title**` lead, else the category.
137
+ *
138
+ * @param body - Entry body
139
+ * @returns Short topic label
140
+ */
141
+ export declare function logEntryTopic(body: string): string;
142
+ //# sourceMappingURL=wiki-log-entries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki-log-entries.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-log-entries.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,iCAAiC;AACjC,MAAM,WAAW,kBAAkB;IACjC,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,GAAG,EAAE,MAAM,CAAC;CACb;AAED,2CAA2C;AAC3C,eAAO,MAAM,eAAe,+GACkF,CAAC;AAe/G;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAKvE;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAG1E;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAgCjE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,GAAG,YAAY,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC,GAAG,MAAM,CAEjI;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,SAAS,kBAAkB,EAAE,EACtC,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,MAAmB,EACxB,KAAK,GAAE,MAAgC,EACvC,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC3C,kBAAkB,EAAE,CAgBtB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,GAAG,MAAM,CAEjF;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMlD"}