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
@@ -29,7 +29,9 @@ import { applyPrivacyGate } from './wiki-redaction.js';
29
29
  import { decideWrite } from './wiki-policy.js';
30
30
  import { WikiIndexService } from './wiki-index.service.js';
31
31
  import { WikiHistoryService } from './wiki-history.service.js';
32
- const DEFAULT_LOG_RELATIVE_PATH = 'llm-curated/log.md';
32
+ import { WIKI_LOG_CONSTANTS } from '../../constants.js';
33
+ import { WIKI_LOG_HEADER, isNoiseLogBody, logBodyKey, parseLogEntries } from './wiki-log-entries.js';
34
+ const DEFAULT_LOG_RELATIVE_PATH = WIKI_LOG_CONSTANTS.LOG_RELATIVE_PATH;
33
35
  const MAX_BODY_BYTES = 64 * 1024;
34
36
  // Spec note (Steve, 2026-05-22): the earlier keyword-based
35
37
  // `detectMessageShape` heuristic + `buildDecisionSlug` + `ingestDecision`
@@ -48,6 +50,12 @@ export class WikiIngestService {
48
50
  schemaLoader;
49
51
  index;
50
52
  history;
53
+ /**
54
+ * Per log file: keys of the bodies appended most recently (insertion
55
+ * ordered, bounded), seeded from the file tail on first use. An append
56
+ * whose body key is present is refused as a duplicate (#1345).
57
+ */
58
+ recentBodies = new Map();
51
59
  constructor(schemaLoader, index, history) {
52
60
  this.logger = LoggerService.getInstance().createComponentLogger('WikiIngest');
53
61
  this.schemaLoader = schemaLoader ?? new SchemaLoaderService();
@@ -108,7 +116,15 @@ export class WikiIngestService {
108
116
  const safeInput = { ...input, sourceBody: gate.body };
109
117
  const isLogTarget = path.basename(target) === 'log.md';
110
118
  if (isLogTarget) {
119
+ if (isNoiseLogBody(safeInput.sourceBody)) {
120
+ this.logger.debug('WikiIngest refused a content-free log entry', { vault: input.vaultPath, sourceType: input.sourceType, sourceRef: input.sourceRef });
121
+ return { ok: false, reason: 'content_free', message: 'a templated state-transition record carries nothing a reader could use; not written to log.md' };
122
+ }
111
123
  const absoluteTarget = path.join(input.vaultPath, target);
124
+ if (await this.isRecentDuplicate(absoluteTarget, safeInput.sourceBody)) {
125
+ this.logger.debug('WikiIngest dropped a duplicate log entry', { vault: input.vaultPath, sourceType: input.sourceType, sourceRef: input.sourceRef });
126
+ return { ok: false, reason: 'duplicate', message: 'an identical entry was appended to this log recently; not written again' };
127
+ }
112
128
  await fs.mkdir(path.dirname(absoluteTarget), { recursive: true });
113
129
  const logEntry = this.formatLogEntry(safeInput);
114
130
  await this.appendOrCreate(absoluteTarget, logEntry);
@@ -296,19 +312,71 @@ export class WikiIngestService {
296
312
  }
297
313
  async appendOrCreate(absolutePath, entry) {
298
314
  if (!existsSync(absolutePath)) {
299
- const header = this.buildPageHeader();
300
- await fs.writeFile(absolutePath, header + entry, 'utf8');
315
+ await fs.writeFile(absolutePath, WIKI_LOG_HEADER + entry, 'utf8');
301
316
  return;
302
317
  }
303
318
  await fs.appendFile(absolutePath, entry, 'utf8');
304
319
  }
305
320
  /**
306
- * Header for a freshly-created `log.md` (pages are built by {@link writePage}).
321
+ * Whether `body` was appended to this log recently. The first call for a
322
+ * log seeds the set from the file's tail; every accepted append records
323
+ * its key; the set is bounded FIFO. A rotation replaces the file, so the
324
+ * set is re-seeded when the file disappears or shrinks.
325
+ *
326
+ * @param absolutePath - Log file
327
+ * @param body - Candidate body
328
+ * @returns True when an identical body is in the recent set (and records the key otherwise)
329
+ */
330
+ async isRecentDuplicate(absolutePath, body) {
331
+ const key = logBodyKey(body);
332
+ let recent = this.recentBodies.get(absolutePath);
333
+ if (!recent) {
334
+ recent = new Set();
335
+ for (const k of await this.seedRecentKeys(absolutePath))
336
+ recent.add(k);
337
+ this.recentBodies.set(absolutePath, recent);
338
+ }
339
+ if (recent.has(key))
340
+ return true;
341
+ recent.add(key);
342
+ while (recent.size > WIKI_LOG_CONSTANTS.DEDUPE_RECENT_ENTRIES) {
343
+ const oldest = recent.values().next().value;
344
+ if (oldest === undefined)
345
+ break;
346
+ recent.delete(oldest);
347
+ }
348
+ return false;
349
+ }
350
+ /**
351
+ * Body keys of the entries in the last `DEDUPE_SEED_TAIL_BYTES` of a log.
352
+ *
353
+ * @param absolutePath - Log file
354
+ * @returns Keys in file order (empty when the file is missing)
355
+ */
356
+ async seedRecentKeys(absolutePath) {
357
+ let handle = null;
358
+ try {
359
+ handle = await fs.open(absolutePath, 'r');
360
+ const { size } = await handle.stat();
361
+ const length = Math.min(size, WIKI_LOG_CONSTANTS.DEDUPE_SEED_TAIL_BYTES);
362
+ const buffer = Buffer.alloc(length);
363
+ await handle.read(buffer, 0, length, size - length);
364
+ return parseLogEntries(buffer.toString('utf8')).map((e) => logBodyKey(e.body));
365
+ }
366
+ catch {
367
+ return [];
368
+ }
369
+ finally {
370
+ await handle?.close();
371
+ }
372
+ }
373
+ /**
374
+ * Forget the recent-body set of a log (a rotation replaced the file).
307
375
  *
308
- * @returns The activity-log preamble
376
+ * @param absolutePath - Log file
309
377
  */
310
- buildPageHeader() {
311
- return '# Activity log\n\nAppend-only log of ingested sources. Each entry: `## [<ISO>] <sourceType> | <caller>`.\n';
378
+ forgetRecentBodies(absolutePath) {
379
+ this.recentBodies.delete(absolutePath);
312
380
  }
313
381
  /**
314
382
  * Defuse markers a future skill might mis-route on: `[CHAT]`, `[NOTIFY]`,
@@ -1 +1 @@
1
- {"version":3,"file":"wiki-ingest.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-ingest.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wiki-ingest.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-ingest.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"}
@@ -0,0 +1,222 @@
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
+ import { createHash } from 'crypto';
20
+ import { WIKI_LOG_CONSTANTS } from '../../constants.js';
21
+ /** Header a fresh `log.md` starts with. */
22
+ export const WIKI_LOG_HEADER = '# Activity log\n\nAppend-only log of ingested sources. Each entry: `## [<ISO>] <sourceType> | <caller>`.\n';
23
+ const HEADER_RE = /^## \[([^\]]+)\]\s+(\S+)\s+\|\s+(.+)$/gm;
24
+ /**
25
+ * Templated records that carry no information for a reader:
26
+ * - auto-learning state transitions (`[pattern] [[WorkItem-x]] task:done running→done. timestamp=… Source: …`);
27
+ * - the same shape without the category tag;
28
+ * - task-completion stubs (`Task completed: …`) that belong on the WorkItem.
29
+ */
30
+ const NOISE_PATTERNS = [
31
+ /\[\[(?:WorkItem|Mission)-[^\]]+\]\]\s+(?:task|mission):[a-z_]+\s+\S*\.?\s*(?:team=\S+\s*)?(?:mission=\S+\s*)?(?:resolver=\S+\s*)?timestamp=/i,
32
+ /^\s*(?:\([a-z_]+\)\s*)?(?:\[[a-z_]+\]\s*)?Task (?:completed|done)(?: by [^:]+)?:\s*\S/i,
33
+ ];
34
+ /**
35
+ * Whether a learning / log body is a content-free templated record.
36
+ *
37
+ * @param body - Entry body or learning text
38
+ * @returns True when the text matches a known templated shape or is blank
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * isNoiseLogBody('(learning) [pattern] [[WorkItem-1]] task:done running→done. timestamp=2026-10-17T00:00:00Z. Source: x.'); // true
43
+ * isNoiseLogBody('(gotcha) complete-task rejects queued→done; accept-task first.'); // false
44
+ * ```
45
+ */
46
+ export function isNoiseLogBody(body) {
47
+ if (!body)
48
+ return true;
49
+ const text = body.trim();
50
+ if (text.length === 0)
51
+ return true;
52
+ return NOISE_PATTERNS.some((re) => re.test(text));
53
+ }
54
+ /**
55
+ * Conversation handover snapshots (`**Conversation handover — <agent> — task <id>** (fact) …`)
56
+ * that the fresh-conversation path mirrors into the vault. They are state,
57
+ * not knowledge: a thousand of them a week on one machine. They stay in the
58
+ * log (the agent is pointed at them) but are not knowledge for search, the
59
+ * digest, memory or the briefing.
60
+ *
61
+ * @param body - Entry body
62
+ * @returns True for a handover snapshot
63
+ */
64
+ export function isHandoverLogBody(body) {
65
+ if (!body)
66
+ return false;
67
+ return /^\s*(?:\([a-z_-]+\)\s*)?\*\*Conversation handover\b/i.test(body.trim());
68
+ }
69
+ /**
70
+ * Normalised form of a body used for duplicate detection: whitespace
71
+ * collapsed, case folded, trailing punctuation dropped.
72
+ *
73
+ * @param body - Entry body
74
+ * @returns Normalised text
75
+ */
76
+ export function normalizeLogBody(body) {
77
+ return body.replace(/\s+/g, ' ').trim().toLowerCase().replace(/[.。]+$/, '');
78
+ }
79
+ /**
80
+ * Stable key of an entry's content (sha1 of the normalised body). Two
81
+ * entries with the same body share a key whatever their timestamps.
82
+ *
83
+ * @param body - Entry body
84
+ * @returns 40-char hex digest
85
+ */
86
+ export function logBodyKey(body) {
87
+ return createHash('sha1').update(normalizeLogBody(body)).digest('hex');
88
+ }
89
+ /**
90
+ * Parse a whole `log.md` into entries, in file order. Text before the
91
+ * first entry header (the preamble, a migrated learnings import) is not an
92
+ * entry and is dropped.
93
+ *
94
+ * @param raw - File content
95
+ * @returns Entries in file order
96
+ */
97
+ export function parseLogEntries(raw) {
98
+ const matches = [];
99
+ HEADER_RE.lastIndex = 0;
100
+ let m;
101
+ while ((m = HEADER_RE.exec(raw))) {
102
+ matches.push({ idx: m.index, ts: m[1], sourceType: m[2], caller: m[3].trim() });
103
+ }
104
+ const entries = [];
105
+ for (let i = 0; i < matches.length; i++) {
106
+ const start = matches[i].idx;
107
+ const end = i + 1 < matches.length ? matches[i + 1].idx : raw.length;
108
+ const block = raw.slice(start, end);
109
+ const refMatch = block.match(/^ref:\s*(.+)$/m);
110
+ let body = '';
111
+ if (refMatch) {
112
+ const refLineEnd = block.indexOf(refMatch[0]) + refMatch[0].length;
113
+ body = block.slice(refLineEnd).replace(/^\n+/, '').trim();
114
+ }
115
+ else {
116
+ // Entries written by hand or migrated: body is everything after the header line.
117
+ body = block.slice(block.indexOf('\n') + 1).trim();
118
+ }
119
+ entries.push({
120
+ timestamp: matches[i].ts,
121
+ timestampMs: Date.parse(matches[i].ts),
122
+ sourceType: matches[i].sourceType,
123
+ caller: matches[i].caller,
124
+ ref: refMatch ? refMatch[1].trim() : '',
125
+ body,
126
+ raw: block.replace(/\s+$/, ''),
127
+ });
128
+ }
129
+ return entries;
130
+ }
131
+ /**
132
+ * Serialise an entry back into the append format (leading blank line,
133
+ * header, ref line, body, trailing blank line).
134
+ *
135
+ * @param entry - Entry to serialise
136
+ * @returns Markdown block
137
+ */
138
+ export function serializeLogEntry(entry) {
139
+ return ['', `## [${entry.timestamp}] ${entry.sourceType} | ${entry.caller}`, '', `ref: ${entry.ref}`, '', entry.body, ''].join('\n');
140
+ }
141
+ /**
142
+ * The entries from the last `days` days that carry content, newest first,
143
+ * with duplicate bodies collapsed (the newest copy wins). Handover
144
+ * snapshots are left out unless `includeHandovers` is set (rotation keeps
145
+ * them; search, digest, memory and briefing do not).
146
+ *
147
+ * @param entries - Parsed entries (any order)
148
+ * @param days - Window length
149
+ * @param now - Current epoch ms
150
+ * @param limit - Cap on returned entries
151
+ * @param options - `includeHandovers` keeps handover snapshots
152
+ * @returns Recent, non-noise, deduped entries, newest first
153
+ */
154
+ export function recentContentEntries(entries, days, now = Date.now(), limit = Number.MAX_SAFE_INTEGER, options = {}) {
155
+ const cutoff = now - days * 24 * 60 * 60 * 1000;
156
+ const seen = new Set();
157
+ const out = [];
158
+ const sorted = [...entries].sort((a, b) => (b.timestampMs || 0) - (a.timestampMs || 0));
159
+ for (const e of sorted) {
160
+ if (!Number.isFinite(e.timestampMs) || e.timestampMs < cutoff)
161
+ continue;
162
+ if (isNoiseLogBody(e.body))
163
+ continue;
164
+ if (!options.includeHandovers && isHandoverLogBody(e.body))
165
+ continue;
166
+ const key = logBodyKey(e.body);
167
+ if (seen.has(key))
168
+ continue;
169
+ seen.add(key);
170
+ out.push(e);
171
+ if (out.length >= limit)
172
+ break;
173
+ }
174
+ return out;
175
+ }
176
+ /**
177
+ * Vault-relative "path" of a log entry as surfaced by search:
178
+ * `llm-curated/log.md#<ISO timestamp>`.
179
+ *
180
+ * @param entry - Entry
181
+ * @returns Pseudo path
182
+ */
183
+ export function logEntryPath(entry) {
184
+ return `${WIKI_LOG_CONSTANTS.LOG_RELATIVE_PATH}${WIKI_LOG_CONSTANTS.ENTRY_PATH_SEPARATOR}${entry.timestamp}`;
185
+ }
186
+ /**
187
+ * Whether a vault-relative path points at a log entry (as opposed to a page).
188
+ *
189
+ * @param relativePath - Path from a search hit
190
+ * @returns True for `llm-curated/log.md#…`
191
+ */
192
+ export function isLogEntryPath(relativePath) {
193
+ return relativePath.startsWith(`${WIKI_LOG_CONSTANTS.LOG_RELATIVE_PATH}${WIKI_LOG_CONSTANTS.ENTRY_PATH_SEPARATOR}`);
194
+ }
195
+ /**
196
+ * The `(category)` prefix `MemoryService` puts on a mirrored memory
197
+ * (`(gotcha) …`, `(decision) …`) or the `[tag]` an auto-recorder uses.
198
+ *
199
+ * @param body - Entry body
200
+ * @returns Lower-case category, or 'learning' when none is present
201
+ */
202
+ export function logEntryCategory(body) {
203
+ const m = body.match(/^\s*(?:\*\*[^*]+\*\*\s*)?[([]([a-z_-]+)[)\]]/i);
204
+ return m ? m[1].toLowerCase() : 'learning';
205
+ }
206
+ /**
207
+ * Topic of an entry for grouping in a digest: the first `[[Entity]]` link,
208
+ * else a bold `**Title**` lead, else the category.
209
+ *
210
+ * @param body - Entry body
211
+ * @returns Short topic label
212
+ */
213
+ export function logEntryTopic(body) {
214
+ const link = body.match(/\[\[([^\]]{1,80})\]\]/);
215
+ if (link)
216
+ return link[1].trim();
217
+ const bold = body.match(/^\s*(?:\([a-z_-]+\)\s*)?\*\*([^*]{1,80})\*\*/i);
218
+ if (bold)
219
+ return bold[1].trim();
220
+ return logEntryCategory(body);
221
+ }
222
+ //# sourceMappingURL=wiki-log-entries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki-log-entries.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-log-entries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * WikiRecentService — surface the N most-recently-modified `.md` pages
3
+ * in a vault. Powers the "What's new" widget in the page-pane empty
4
+ * state, so a human landing on a vault sees the freshest content
5
+ * without expanding the tree.
6
+ *
7
+ * Cheap to call: one filesystem walk + sort by mtime. Vaults are small
8
+ * (O(100s) pages), so no caching for Phase 1.
9
+ *
10
+ * @module services/wiki/wiki-recent.service
11
+ */
12
+ /** Default number of recent pages returned when caller passes no limit. */
13
+ export declare const WIKI_RECENT_DEFAULT_LIMIT = 8;
14
+ /** Upper bound on the limit param to prevent unbounded responses. */
15
+ export declare const WIKI_RECENT_MAX_LIMIT = 50;
16
+ /** Cap on .md files walked per request. */
17
+ export declare const WIKI_RECENT_MAX_FILES = 500;
18
+ export interface WikiRecentEntry {
19
+ /** Path relative to vault root. */
20
+ relativePath: string;
21
+ /** File size in bytes. */
22
+ bytes: number;
23
+ /** ISO timestamp of last modification. */
24
+ modifiedAt: string;
25
+ /** True if this file lives inside a folder whose name starts with `llm-curated/`. */
26
+ llmCurated: boolean;
27
+ }
28
+ export type WikiRecentOutcome = {
29
+ ok: true;
30
+ vaultPath: string;
31
+ entries: WikiRecentEntry[];
32
+ } | {
33
+ ok: false;
34
+ reason: 'vault_missing' | 'invalid_input';
35
+ message: string;
36
+ };
37
+ export interface WikiRecentInput {
38
+ vaultPath: string;
39
+ limit?: number;
40
+ }
41
+ /**
42
+ * Singleton service for the recent-pages list.
43
+ */
44
+ export declare class WikiRecentService {
45
+ private static instance;
46
+ static getInstance(): WikiRecentService;
47
+ static resetInstance(): void;
48
+ list(input: WikiRecentInput): Promise<WikiRecentOutcome>;
49
+ private collectMdFiles;
50
+ }
51
+ //# sourceMappingURL=wiki-recent.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki-recent.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-recent.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,2EAA2E;AAC3E,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,qEAAqE;AACrE,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,2CAA2C;AAC3C,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,MAAM,WAAW,eAAe;IAC9B,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,eAAe,EAAE,CAAA;CAAE,GAC3D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9E,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkC;IAEzD,MAAM,CAAC,WAAW,IAAI,iBAAiB;IAKvC,MAAM,CAAC,aAAa,IAAI,IAAI;IAItB,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;YAkChD,cAAc;CAmC7B"}