crewly 1.20.356 → 1.20.359
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.
- package/config/constants.ts +11 -0
- package/dist/backend/backend/src/constants.d.ts +313 -17
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +316 -17
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts +21 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +232 -15
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +10 -2
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +27 -2
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts +34 -1
- package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js +69 -13
- package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts +8 -0
- package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/idle-detection.service.js +26 -2
- package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/resource-mode.service.d.ts +9 -0
- package/dist/backend/backend/src/services/agent/resource-mode.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/resource-mode.service.js +16 -0
- package/dist/backend/backend/src/services/agent/resource-mode.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts +44 -3
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.js +126 -11
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +2 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +9 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/backend/backend/src/services/memory/agent-memory-refresh.service.d.ts +150 -0
- package/dist/backend/backend/src/services/memory/agent-memory-refresh.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/memory/agent-memory-refresh.service.js +324 -0
- package/dist/backend/backend/src/services/memory/agent-memory-refresh.service.js.map +1 -0
- package/dist/backend/backend/src/services/memory/auto-learning.subscriber.d.ts +9 -7
- package/dist/backend/backend/src/services/memory/auto-learning.subscriber.d.ts.map +1 -1
- package/dist/backend/backend/src/services/memory/auto-learning.subscriber.js +19 -17
- package/dist/backend/backend/src/services/memory/auto-learning.subscriber.js.map +1 -1
- package/dist/backend/backend/src/services/memory/memory.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/memory/memory.service.js +11 -0
- package/dist/backend/backend/src/services/memory/memory.service.js.map +1 -1
- package/dist/backend/backend/src/services/memory/startup-briefing.service.d.ts +114 -0
- package/dist/backend/backend/src/services/memory/startup-briefing.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/memory/startup-briefing.service.js +345 -0
- package/dist/backend/backend/src/services/memory/startup-briefing.service.js.map +1 -0
- package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.d.ts +33 -1
- package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.js +69 -4
- package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.wiring.d.ts +24 -1
- package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.wiring.js +54 -3
- package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/orc/owner-completion-report.service.d.ts +9 -0
- package/dist/backend/backend/src/services/orc/owner-completion-report.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/owner-completion-report.service.js +16 -2
- package/dist/backend/backend/src/services/orc/owner-completion-report.service.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-prefixes.d.ts +30 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-prefixes.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-prefixes.js +48 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-prefixes.js.map +1 -0
- package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts +8 -0
- package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler.service.js +29 -8
- package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts +27 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js +78 -24
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.d.ts +23 -0
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js +38 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/session/session-binding.d.ts +25 -2
- package/dist/backend/backend/src/services/session/session-binding.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/session-binding.js +32 -4
- package/dist/backend/backend/src/services/session/session-binding.js.map +1 -1
- package/dist/backend/backend/src/services/slack/agent-coordination.d.ts +119 -0
- package/dist/backend/backend/src/services/slack/agent-coordination.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/agent-coordination.js +174 -0
- package/dist/backend/backend/src/services/slack/agent-coordination.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.js +7 -0
- package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +167 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +619 -9
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-thread-context.service.d.ts +22 -0
- package/dist/backend/backend/src/services/slack/slack-thread-context.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-thread-context.service.js +49 -12
- package/dist/backend/backend/src/services/slack/slack-thread-context.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts +7 -0
- package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js +25 -4
- package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
- package/dist/backend/backend/src/services/team-move/team-move-chat.d.ts +21 -1
- package/dist/backend/backend/src/services/team-move/team-move-chat.d.ts.map +1 -1
- package/dist/backend/backend/src/services/team-move/team-move-chat.js +54 -2
- package/dist/backend/backend/src/services/team-move/team-move-chat.js.map +1 -1
- package/dist/backend/backend/src/services/team-move/team-move-exporter.d.ts +9 -4
- package/dist/backend/backend/src/services/team-move/team-move-exporter.d.ts.map +1 -1
- package/dist/backend/backend/src/services/team-move/team-move-exporter.js +32 -10
- package/dist/backend/backend/src/services/team-move/team-move-exporter.js.map +1 -1
- package/dist/backend/backend/src/services/team-move/team-move-importer.d.ts +19 -0
- package/dist/backend/backend/src/services/team-move/team-move-importer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/team-move/team-move-importer.js +78 -3
- package/dist/backend/backend/src/services/team-move/team-move-importer.js.map +1 -1
- package/dist/backend/backend/src/services/team-move/team-move-runtime.d.ts.map +1 -1
- package/dist/backend/backend/src/services/team-move/team-move-runtime.js +8 -0
- package/dist/backend/backend/src/services/team-move/team-move-runtime.js.map +1 -1
- package/dist/backend/backend/src/services/team-move/team-move-transcripts.d.ts +106 -0
- package/dist/backend/backend/src/services/team-move/team-move-transcripts.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move-transcripts.js +212 -0
- package/dist/backend/backend/src/services/team-move/team-move-transcripts.js.map +1 -0
- package/dist/backend/backend/src/services/team-move/team-move.types.d.ts +20 -0
- package/dist/backend/backend/src/services/team-move/team-move.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/team-move/team-move.types.js.map +1 -1
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts +2 -2
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js +11 -4
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-backlinks.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-backlinks.service.js +3 -0
- package/dist/backend/backend/src/services/wiki/wiki-backlinks.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.js +4 -1
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js +4 -0
- package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts +36 -5
- package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js +75 -7
- package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-lint.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-lint.service.js +3 -1
- package/dist/backend/backend/src/services/wiki/wiki-lint.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-log-compile.service.d.ts +141 -0
- package/dist/backend/backend/src/services/wiki/wiki-log-compile.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-log-compile.service.js +324 -0
- package/dist/backend/backend/src/services/wiki/wiki-log-compile.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-log-entries.d.ts +142 -0
- package/dist/backend/backend/src/services/wiki/wiki-log-entries.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-log-entries.js +222 -0
- package/dist/backend/backend/src/services/wiki/wiki-log-entries.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-log-rotation.service.d.ts +93 -0
- package/dist/backend/backend/src/services/wiki/wiki-log-rotation.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-log-rotation.service.js +142 -0
- package/dist/backend/backend/src/services/wiki/wiki-log-rotation.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-maintenance.service.d.ts +104 -0
- package/dist/backend/backend/src/services/wiki/wiki-maintenance.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-maintenance.service.js +192 -0
- package/dist/backend/backend/src/services/wiki/wiki-maintenance.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-query.service.d.ts +3 -2
- package/dist/backend/backend/src/services/wiki/wiki-query.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-query.service.js +23 -39
- package/dist/backend/backend/src/services/wiki/wiki-query.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-queue-drain.service.d.ts +105 -0
- package/dist/backend/backend/src/services/wiki/wiki-queue-drain.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-queue-drain.service.js +195 -0
- package/dist/backend/backend/src/services/wiki/wiki-queue-drain.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-recent.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-recent.service.js +3 -0
- package/dist/backend/backend/src/services/wiki/wiki-recent.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts +28 -5
- package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-search.service.js +96 -25
- package/dist/backend/backend/src/services/wiki/wiki-search.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-vault-walk.d.ts +11 -0
- package/dist/backend/backend/src/services/wiki/wiki-vault-walk.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-vault-walk.js +17 -1
- package/dist/backend/backend/src/services/wiki/wiki-vault-walk.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/work-record-transcript.d.ts +64 -0
- package/dist/backend/backend/src/services/wiki/work-record-transcript.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/work-record-transcript.js +194 -0
- package/dist/backend/backend/src/services/wiki/work-record-transcript.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/work-record.d.ts +239 -0
- package/dist/backend/backend/src/services/wiki/work-record.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/work-record.js +631 -0
- package/dist/backend/backend/src/services/wiki/work-record.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/work-record.service.d.ts +209 -0
- package/dist/backend/backend/src/services/wiki/work-record.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/work-record.service.js +514 -0
- package/dist/backend/backend/src/services/wiki/work-record.service.js.map +1 -0
- package/dist/backend/build-info.json +2 -2
- package/dist/backend/config/constants.d.ts +11 -0
- package/dist/backend/config/constants.d.ts.map +1 -1
- package/dist/backend/config/constants.js +11 -0
- package/dist/backend/config/constants.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +313 -17
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +316 -17
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +10 -2
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.js +27 -2
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts +34 -1
- package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js +69 -13
- package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/resource-mode.service.d.ts +9 -0
- package/dist/cli/backend/src/services/agent/resource-mode.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/resource-mode.service.js +16 -0
- package/dist/cli/backend/src/services/agent/resource-mode.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts +44 -3
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.js +126 -11
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +2 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +9 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/cli/backend/src/services/memory/memory.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/memory/memory.service.js +11 -0
- package/dist/cli/backend/src/services/memory/memory.service.js.map +1 -1
- package/dist/cli/backend/src/services/memory/startup-briefing.service.d.ts +114 -0
- package/dist/cli/backend/src/services/memory/startup-briefing.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/memory/startup-briefing.service.js +345 -0
- package/dist/cli/backend/src/services/memory/startup-briefing.service.js.map +1 -0
- package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.d.ts +33 -1
- package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.js +69 -4
- package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/agent-coordination.d.ts +119 -0
- package/dist/cli/backend/src/services/slack/agent-coordination.d.ts.map +1 -0
- package/dist/cli/backend/src/services/slack/agent-coordination.js +174 -0
- package/dist/cli/backend/src/services/slack/agent-coordination.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +167 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +619 -9
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-thread-context.service.d.ts +22 -0
- package/dist/cli/backend/src/services/slack/slack-thread-context.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-thread-context.service.js +49 -12
- package/dist/cli/backend/src/services/slack/slack-thread-context.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts +7 -0
- package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js +25 -4
- package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts +36 -5
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js +75 -7
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
- package/dist/cli/backend/src/services/wiki/wiki-log-entries.d.ts +142 -0
- package/dist/cli/backend/src/services/wiki/wiki-log-entries.d.ts.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-log-entries.js +222 -0
- package/dist/cli/backend/src/services/wiki/wiki-log-entries.js.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-recent.service.d.ts +51 -0
- package/dist/cli/backend/src/services/wiki/wiki-recent.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-recent.service.js +105 -0
- package/dist/cli/backend/src/services/wiki/wiki-recent.service.js.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-search.service.d.ts +28 -5
- package/dist/cli/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/wiki/wiki-search.service.js +96 -25
- package/dist/cli/backend/src/services/wiki/wiki-search.service.js.map +1 -1
- package/dist/cli/backend/src/services/wiki/wiki-vault-walk.d.ts +11 -0
- package/dist/cli/backend/src/services/wiki/wiki-vault-walk.d.ts.map +1 -1
- package/dist/cli/backend/src/services/wiki/wiki-vault-walk.js +17 -1
- package/dist/cli/backend/src/services/wiki/wiki-vault-walk.js.map +1 -1
- package/dist/cli/backend/src/services/wiki/work-record-transcript.d.ts +64 -0
- package/dist/cli/backend/src/services/wiki/work-record-transcript.d.ts.map +1 -0
- package/dist/cli/backend/src/services/wiki/work-record-transcript.js +194 -0
- package/dist/cli/backend/src/services/wiki/work-record-transcript.js.map +1 -0
- package/dist/cli/backend/src/services/wiki/work-record.d.ts +239 -0
- package/dist/cli/backend/src/services/wiki/work-record.d.ts.map +1 -0
- package/dist/cli/backend/src/services/wiki/work-record.js +631 -0
- package/dist/cli/backend/src/services/wiki/work-record.js.map +1 -0
- package/dist/cli/config/constants.d.ts +11 -0
- package/dist/cli/config/constants.d.ts.map +1 -1
- package/dist/cli/config/constants.js +11 -0
- package/dist/cli/config/constants.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,141 @@
|
|
|
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
|
+
* Work records (#1349, `work_record` entries) get their own sections ahead
|
|
17
|
+
* of the learning groups: "Work done", "Errors and fixes", "Collaboration".
|
|
18
|
+
*
|
|
19
|
+
* @module services/wiki/wiki-log-compile.service
|
|
20
|
+
*/
|
|
21
|
+
import { WikiIngestService } from './wiki-ingest.service.js';
|
|
22
|
+
/** Options for {@link WikiLogCompileService.compile}. */
|
|
23
|
+
export interface WikiLogCompileOptions {
|
|
24
|
+
/** Report only; write nothing (page or state). */
|
|
25
|
+
dryRun?: boolean;
|
|
26
|
+
/** Clock (tests). */
|
|
27
|
+
now?: number;
|
|
28
|
+
/** Window override (tests). */
|
|
29
|
+
windowDays?: number;
|
|
30
|
+
/** Minimum-entries override (tests). */
|
|
31
|
+
minEntries?: number;
|
|
32
|
+
}
|
|
33
|
+
/** Outcome of one vault's compile. */
|
|
34
|
+
export interface WikiLogCompileResult {
|
|
35
|
+
vaultPath: string;
|
|
36
|
+
/** False when the log is missing, too few new entries, or ingest refused the page. */
|
|
37
|
+
compiled: boolean;
|
|
38
|
+
reason?: 'no_log' | 'too_few_entries' | 'ingest_refused';
|
|
39
|
+
/** Uncompiled non-noise entries found in the window. */
|
|
40
|
+
candidates: number;
|
|
41
|
+
/** Entries written into the digest. */
|
|
42
|
+
entriesCompiled: number;
|
|
43
|
+
/** Vault-relative digest page (planned in a dry run). */
|
|
44
|
+
pagePath?: string;
|
|
45
|
+
/** Topic groups written. */
|
|
46
|
+
groups: number;
|
|
47
|
+
dryRun: boolean;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* ISO-8601 week label (`YYYY-Www`) of a date.
|
|
51
|
+
*
|
|
52
|
+
* @param ms - Epoch ms
|
|
53
|
+
* @returns Label such as `2026-W42`
|
|
54
|
+
*/
|
|
55
|
+
export declare function isoWeekLabel(ms: number): string;
|
|
56
|
+
/**
|
|
57
|
+
* Compiles vault log entries into weekly digest pages. Stateless singleton
|
|
58
|
+
* apart from the per-vault state file.
|
|
59
|
+
*/
|
|
60
|
+
export declare class WikiLogCompileService {
|
|
61
|
+
private readonly ingest;
|
|
62
|
+
private static instance;
|
|
63
|
+
private readonly logger;
|
|
64
|
+
constructor(ingest?: WikiIngestService);
|
|
65
|
+
static getInstance(): WikiLogCompileService;
|
|
66
|
+
/** Test-only reset. */
|
|
67
|
+
static _resetForTesting(): void;
|
|
68
|
+
/**
|
|
69
|
+
* Compile one vault's uncompiled recent entries into this week's digest.
|
|
70
|
+
*
|
|
71
|
+
* @param vaultPath - Vault root
|
|
72
|
+
* @param opts - Dry run, clock and threshold overrides
|
|
73
|
+
* @returns What was (or would be) written
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```typescript
|
|
77
|
+
* const r = await WikiLogCompileService.getInstance().compile(vault);
|
|
78
|
+
* // r.compiled && r.pagePath === 'llm-curated/digests/2026-W42.md'
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
compile(vaultPath: string, opts?: WikiLogCompileOptions): Promise<WikiLogCompileResult>;
|
|
82
|
+
/**
|
|
83
|
+
* Compile every vault in a list; failures are logged per vault.
|
|
84
|
+
*
|
|
85
|
+
* @param vaults - Vault roots
|
|
86
|
+
* @param opts - Passed to {@link compile}
|
|
87
|
+
* @returns One result per vault checked
|
|
88
|
+
*/
|
|
89
|
+
compileAll(vaults: readonly string[], opts?: WikiLogCompileOptions): Promise<WikiLogCompileResult[]>;
|
|
90
|
+
/**
|
|
91
|
+
* Group entries by `<category> / <topic>`, largest groups first, stable
|
|
92
|
+
* within a group (oldest first).
|
|
93
|
+
*
|
|
94
|
+
* @param entries - Candidate entries
|
|
95
|
+
* @returns Groups with a label and members
|
|
96
|
+
*/
|
|
97
|
+
private group;
|
|
98
|
+
/**
|
|
99
|
+
* `k gotchas, m decisions, …` for the page summary.
|
|
100
|
+
*
|
|
101
|
+
* @param entries - Entries
|
|
102
|
+
* @returns Comma-separated counts, most frequent first
|
|
103
|
+
*/
|
|
104
|
+
private categoryCounts;
|
|
105
|
+
/**
|
|
106
|
+
* Separate work records (#1349) from learnings. A record whose body does
|
|
107
|
+
* not parse is kept as a learning so nothing is dropped.
|
|
108
|
+
*
|
|
109
|
+
* @param entries - Candidate entries
|
|
110
|
+
* @returns Records with parsed fields, and the rest
|
|
111
|
+
*/
|
|
112
|
+
private splitRecords;
|
|
113
|
+
/**
|
|
114
|
+
* Markdown body of one compile run: a dated heading; when the run holds
|
|
115
|
+
* work records, `### Work done`, `### Errors and fixes` and
|
|
116
|
+
* `### Collaboration` (the digest renders task titles, never ticket ids —
|
|
117
|
+
* those stay on each record's `meta:` line); then one `###` per learning
|
|
118
|
+
* group with one bullet per entry (author, date, body clipped).
|
|
119
|
+
*
|
|
120
|
+
* @param groups - Grouped learning entries
|
|
121
|
+
* @param all - All entries in the run (for the date range)
|
|
122
|
+
* @param now - Epoch ms of the run
|
|
123
|
+
* @param records - Work records in the run
|
|
124
|
+
* @returns Markdown
|
|
125
|
+
*/
|
|
126
|
+
private renderBody;
|
|
127
|
+
/**
|
|
128
|
+
* The three record sections. "Work done" lists every record (asked by →
|
|
129
|
+
* done by → outputs → outcome); "Errors and fixes" the records that met
|
|
130
|
+
* errors; "Collaboration" counts, per pair, delegations, asks and reviews.
|
|
131
|
+
*
|
|
132
|
+
* @param records - Records of the run, oldest first
|
|
133
|
+
* @returns Markdown lines (each section followed by a blank line)
|
|
134
|
+
*/
|
|
135
|
+
private renderRecordSections;
|
|
136
|
+
private clipText;
|
|
137
|
+
private statePath;
|
|
138
|
+
private readState;
|
|
139
|
+
private writeState;
|
|
140
|
+
}
|
|
141
|
+
//# 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;;;;;;;;;;;;;;;;;;;GAmBG;AAOH,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAyB7D,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;IAiEjG;;;;;;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;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IAWpB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,UAAU;IAiBlB;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;IA+C5B,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,SAAS;YAIH,SAAS;YAQT,UAAU;CAGzB"}
|
|
@@ -0,0 +1,324 @@
|
|
|
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
|
+
* Work records (#1349, `work_record` entries) get their own sections ahead
|
|
17
|
+
* of the learning groups: "Work done", "Errors and fixes", "Collaboration".
|
|
18
|
+
*
|
|
19
|
+
* @module services/wiki/wiki-log-compile.service
|
|
20
|
+
*/
|
|
21
|
+
import * as path from 'path';
|
|
22
|
+
import * as fs from 'fs/promises';
|
|
23
|
+
import { LoggerService } from '../core/logger.service.js';
|
|
24
|
+
import { WIKI_LOG_CONSTANTS } from '../../constants.js';
|
|
25
|
+
import { atomicWriteJson, safeReadJson } from '../../utils/file-io.utils.js';
|
|
26
|
+
import { WikiIngestService } from './wiki-ingest.service.js';
|
|
27
|
+
import { logBodyKey, logEntryCategory, logEntryTopic, parseLogEntries, recentContentEntries, } from './wiki-log-entries.js';
|
|
28
|
+
import { isWorkRecordEntry, parseWorkRecordBody } from './work-record.js';
|
|
29
|
+
/**
|
|
30
|
+
* ISO-8601 week label (`YYYY-Www`) of a date.
|
|
31
|
+
*
|
|
32
|
+
* @param ms - Epoch ms
|
|
33
|
+
* @returns Label such as `2026-W42`
|
|
34
|
+
*/
|
|
35
|
+
export function isoWeekLabel(ms) {
|
|
36
|
+
const d = new Date(ms);
|
|
37
|
+
const date = new Date(Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate()));
|
|
38
|
+
// Thursday of the current week decides the ISO year.
|
|
39
|
+
const day = date.getUTCDay() || 7;
|
|
40
|
+
date.setUTCDate(date.getUTCDate() + 4 - day);
|
|
41
|
+
const yearStart = Date.UTC(date.getUTCFullYear(), 0, 1);
|
|
42
|
+
const week = Math.ceil(((date.getTime() - yearStart) / 86_400_000 + 1) / 7);
|
|
43
|
+
return `${date.getUTCFullYear()}-W${String(week).padStart(2, '0')}`;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Compiles vault log entries into weekly digest pages. Stateless singleton
|
|
47
|
+
* apart from the per-vault state file.
|
|
48
|
+
*/
|
|
49
|
+
export class WikiLogCompileService {
|
|
50
|
+
ingest;
|
|
51
|
+
static instance = null;
|
|
52
|
+
logger;
|
|
53
|
+
constructor(ingest = WikiIngestService.getInstance()) {
|
|
54
|
+
this.ingest = ingest;
|
|
55
|
+
this.logger = LoggerService.getInstance().createComponentLogger('WikiLogCompile');
|
|
56
|
+
}
|
|
57
|
+
static getInstance() {
|
|
58
|
+
if (!this.instance)
|
|
59
|
+
this.instance = new WikiLogCompileService();
|
|
60
|
+
return this.instance;
|
|
61
|
+
}
|
|
62
|
+
/** Test-only reset. */
|
|
63
|
+
static _resetForTesting() {
|
|
64
|
+
this.instance = null;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Compile one vault's uncompiled recent entries into this week's digest.
|
|
68
|
+
*
|
|
69
|
+
* @param vaultPath - Vault root
|
|
70
|
+
* @param opts - Dry run, clock and threshold overrides
|
|
71
|
+
* @returns What was (or would be) written
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* const r = await WikiLogCompileService.getInstance().compile(vault);
|
|
76
|
+
* // r.compiled && r.pagePath === 'llm-curated/digests/2026-W42.md'
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
async compile(vaultPath, opts = {}) {
|
|
80
|
+
const dryRun = opts.dryRun === true;
|
|
81
|
+
const now = opts.now ?? Date.now();
|
|
82
|
+
const windowDays = opts.windowDays ?? WIKI_LOG_CONSTANTS.COMPILE_WINDOW_DAYS;
|
|
83
|
+
const minEntries = opts.minEntries ?? WIKI_LOG_CONSTANTS.COMPILE_MIN_ENTRIES;
|
|
84
|
+
const base = { vaultPath, compiled: false, candidates: 0, entriesCompiled: 0, groups: 0, dryRun };
|
|
85
|
+
let raw;
|
|
86
|
+
try {
|
|
87
|
+
raw = await fs.readFile(path.join(vaultPath, WIKI_LOG_CONSTANTS.LOG_RELATIVE_PATH), 'utf8');
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return { ...base, reason: 'no_log' };
|
|
91
|
+
}
|
|
92
|
+
const state = await this.readState(vaultPath);
|
|
93
|
+
const done = new Set(state.compiledKeys);
|
|
94
|
+
const candidates = recentContentEntries(parseLogEntries(raw), windowDays, now)
|
|
95
|
+
.filter((e) => !done.has(logBodyKey(e.body)))
|
|
96
|
+
.sort((a, b) => a.timestampMs - b.timestampMs)
|
|
97
|
+
.slice(0, WIKI_LOG_CONSTANTS.COMPILE_MAX_ENTRIES);
|
|
98
|
+
base.candidates = candidates.length;
|
|
99
|
+
if (candidates.length < minEntries)
|
|
100
|
+
return { ...base, reason: 'too_few_entries' };
|
|
101
|
+
const week = isoWeekLabel(now);
|
|
102
|
+
const pagePath = `${WIKI_LOG_CONSTANTS.COMPILE_DIR}/${week}.md`;
|
|
103
|
+
const { records, others } = this.splitRecords(candidates);
|
|
104
|
+
const groups = this.group(others);
|
|
105
|
+
const body = this.renderBody(groups, candidates, now, records);
|
|
106
|
+
const result = { ...base, compiled: true, entriesCompiled: candidates.length, pagePath, groups: groups.length };
|
|
107
|
+
if (dryRun) {
|
|
108
|
+
this.logger.info('WikiLogCompile dry run — would write digest', { vaultPath, pagePath, entries: candidates.length, groups: groups.length, records: records.length });
|
|
109
|
+
return result;
|
|
110
|
+
}
|
|
111
|
+
const counts = this.categoryCounts(others);
|
|
112
|
+
const summaryLead = records.length > 0
|
|
113
|
+
? `${records.length} work record${records.length === 1 ? '' : 's'}${others.length > 0 ? ` and ${others.length} learnings (${counts})` : ''} from the vault log`
|
|
114
|
+
: `${candidates.length} learnings from the vault log (${counts})`;
|
|
115
|
+
const outcome = await this.ingest.ingest({
|
|
116
|
+
vaultPath,
|
|
117
|
+
sourceType: 'record_learning',
|
|
118
|
+
sourceRef: `wiki-log-compile:${week}:${new Date(now).toISOString()}`,
|
|
119
|
+
sourceBody: body,
|
|
120
|
+
callerSession: 'system:wiki-log-compile',
|
|
121
|
+
targetRelativePath: pagePath,
|
|
122
|
+
title: `Digest ${week}`,
|
|
123
|
+
summary: `${summaryLead} compiled ${new Date(now).toISOString().slice(0, 10)} — read before working on these topics; promote what still matters to its own page.`,
|
|
124
|
+
keepBecause: 'reusable_method',
|
|
125
|
+
tags: ['digest', week],
|
|
126
|
+
});
|
|
127
|
+
if (!outcome.ok) {
|
|
128
|
+
this.logger.warn('WikiLogCompile: ingest refused the digest page (non-fatal)', { vaultPath, pagePath, reason: outcome.reason });
|
|
129
|
+
return { ...base, reason: 'ingest_refused', candidates: candidates.length };
|
|
130
|
+
}
|
|
131
|
+
const keys = [...state.compiledKeys, ...candidates.map((e) => logBodyKey(e.body))];
|
|
132
|
+
await this.writeState(vaultPath, {
|
|
133
|
+
compiledKeys: keys.slice(-WIKI_LOG_CONSTANTS.COMPILE_STATE_MAX_KEYS),
|
|
134
|
+
lastCompiledAt: new Date(now).toISOString(),
|
|
135
|
+
});
|
|
136
|
+
this.logger.info('WikiLogCompile wrote digest', { vaultPath, pagePath, entries: candidates.length, groups: groups.length });
|
|
137
|
+
return result;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Compile every vault in a list; failures are logged per vault.
|
|
141
|
+
*
|
|
142
|
+
* @param vaults - Vault roots
|
|
143
|
+
* @param opts - Passed to {@link compile}
|
|
144
|
+
* @returns One result per vault checked
|
|
145
|
+
*/
|
|
146
|
+
async compileAll(vaults, opts = {}) {
|
|
147
|
+
const out = [];
|
|
148
|
+
for (const vaultPath of vaults) {
|
|
149
|
+
try {
|
|
150
|
+
out.push(await this.compile(vaultPath, opts));
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
this.logger.warn('WikiLogCompile failed for vault (non-fatal)', { vaultPath, error: err instanceof Error ? err.message : String(err) });
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return out;
|
|
157
|
+
}
|
|
158
|
+
// ---------------------------------------------------------------------------
|
|
159
|
+
/**
|
|
160
|
+
* Group entries by `<category> / <topic>`, largest groups first, stable
|
|
161
|
+
* within a group (oldest first).
|
|
162
|
+
*
|
|
163
|
+
* @param entries - Candidate entries
|
|
164
|
+
* @returns Groups with a label and members
|
|
165
|
+
*/
|
|
166
|
+
group(entries) {
|
|
167
|
+
const byLabel = new Map();
|
|
168
|
+
for (const e of entries) {
|
|
169
|
+
const category = logEntryCategory(e.body);
|
|
170
|
+
const topic = logEntryTopic(e.body);
|
|
171
|
+
const label = topic.toLowerCase() === category ? category : `${category} / ${topic}`;
|
|
172
|
+
const list = byLabel.get(label) ?? [];
|
|
173
|
+
list.push(e);
|
|
174
|
+
byLabel.set(label, list);
|
|
175
|
+
}
|
|
176
|
+
return [...byLabel.entries()]
|
|
177
|
+
.map(([label, members]) => ({ label, members }))
|
|
178
|
+
.sort((a, b) => b.members.length - a.members.length || a.label.localeCompare(b.label));
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* `k gotchas, m decisions, …` for the page summary.
|
|
182
|
+
*
|
|
183
|
+
* @param entries - Entries
|
|
184
|
+
* @returns Comma-separated counts, most frequent first
|
|
185
|
+
*/
|
|
186
|
+
categoryCounts(entries) {
|
|
187
|
+
const counts = new Map();
|
|
188
|
+
for (const e of entries) {
|
|
189
|
+
const c = logEntryCategory(e.body);
|
|
190
|
+
counts.set(c, (counts.get(c) ?? 0) + 1);
|
|
191
|
+
}
|
|
192
|
+
return [...counts.entries()]
|
|
193
|
+
.sort((a, b) => b[1] - a[1])
|
|
194
|
+
.map(([c, n]) => `${n} ${c}`)
|
|
195
|
+
.join(', ');
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Separate work records (#1349) from learnings. A record whose body does
|
|
199
|
+
* not parse is kept as a learning so nothing is dropped.
|
|
200
|
+
*
|
|
201
|
+
* @param entries - Candidate entries
|
|
202
|
+
* @returns Records with parsed fields, and the rest
|
|
203
|
+
*/
|
|
204
|
+
splitRecords(entries) {
|
|
205
|
+
const records = [];
|
|
206
|
+
const others = [];
|
|
207
|
+
for (const e of entries) {
|
|
208
|
+
const parsed = isWorkRecordEntry(e) ? parseWorkRecordBody(e.body) : null;
|
|
209
|
+
if (parsed)
|
|
210
|
+
records.push({ entry: e, parsed });
|
|
211
|
+
else
|
|
212
|
+
others.push(e);
|
|
213
|
+
}
|
|
214
|
+
return { records, others };
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Markdown body of one compile run: a dated heading; when the run holds
|
|
218
|
+
* work records, `### Work done`, `### Errors and fixes` and
|
|
219
|
+
* `### Collaboration` (the digest renders task titles, never ticket ids —
|
|
220
|
+
* those stay on each record's `meta:` line); then one `###` per learning
|
|
221
|
+
* group with one bullet per entry (author, date, body clipped).
|
|
222
|
+
*
|
|
223
|
+
* @param groups - Grouped learning entries
|
|
224
|
+
* @param all - All entries in the run (for the date range)
|
|
225
|
+
* @param now - Epoch ms of the run
|
|
226
|
+
* @param records - Work records in the run
|
|
227
|
+
* @returns Markdown
|
|
228
|
+
*/
|
|
229
|
+
renderBody(groups, all, now, records = []) {
|
|
230
|
+
const first = all[0]?.timestamp.slice(0, 10) ?? '';
|
|
231
|
+
const last = all[all.length - 1]?.timestamp.slice(0, 10) ?? '';
|
|
232
|
+
const lines = [`## Compiled ${new Date(now).toISOString().slice(0, 10)} — ${all.length} entries from ${first} to ${last}`, ''];
|
|
233
|
+
if (records.length > 0)
|
|
234
|
+
lines.push(...this.renderRecordSections(records));
|
|
235
|
+
for (const g of groups) {
|
|
236
|
+
lines.push(`### ${g.label} (${g.members.length})`, '');
|
|
237
|
+
for (const e of g.members) {
|
|
238
|
+
const body = e.body.replace(/\s+/g, ' ').trim();
|
|
239
|
+
const clipped = body.length > WIKI_LOG_CONSTANTS.COMPILE_ENTRY_MAX_CHARS ? `${body.slice(0, WIKI_LOG_CONSTANTS.COMPILE_ENTRY_MAX_CHARS - 1)}…` : body;
|
|
240
|
+
lines.push(`- ${e.timestamp.slice(0, 10)} · ${e.caller}: ${clipped}`);
|
|
241
|
+
}
|
|
242
|
+
lines.push('');
|
|
243
|
+
}
|
|
244
|
+
return lines.join('\n').trim();
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* The three record sections. "Work done" lists every record (asked by →
|
|
248
|
+
* done by → outputs → outcome); "Errors and fixes" the records that met
|
|
249
|
+
* errors; "Collaboration" counts, per pair, delegations, asks and reviews.
|
|
250
|
+
*
|
|
251
|
+
* @param records - Records of the run, oldest first
|
|
252
|
+
* @returns Markdown lines (each section followed by a blank line)
|
|
253
|
+
*/
|
|
254
|
+
renderRecordSections(records) {
|
|
255
|
+
const lines = [`### Work done (${records.length})`, ''];
|
|
256
|
+
for (const { entry, parsed } of records) {
|
|
257
|
+
const parts = [`asked by ${parsed.askedBy || 'unknown'}`, `done by ${parsed.doneBy || 'unknown'}`];
|
|
258
|
+
if (parsed.did)
|
|
259
|
+
parts.push(this.clipText(parsed.did, WIKI_LOG_CONSTANTS.COMPILE_ENTRY_MAX_CHARS / 2));
|
|
260
|
+
if (parsed.outputs.length)
|
|
261
|
+
parts.push(`outputs: ${parsed.outputs.slice(0, 3).join('; ')}`);
|
|
262
|
+
lines.push(`- ${entry.timestamp.slice(0, 10)} · **${parsed.title}** — ${parts.join(' → ')} → ${parsed.outcome || 'unknown'}`);
|
|
263
|
+
}
|
|
264
|
+
lines.push('');
|
|
265
|
+
const withErrors = records.filter((r) => r.parsed.errors.length > 0);
|
|
266
|
+
if (withErrors.length > 0) {
|
|
267
|
+
lines.push(`### Errors and fixes (${withErrors.length})`, '');
|
|
268
|
+
for (const { entry, parsed } of withErrors) {
|
|
269
|
+
lines.push(`- ${entry.timestamp.slice(0, 10)} · ${parsed.title} (${parsed.doneBy || 'unknown'}): ${this.clipText(parsed.errors.join('; '), WIKI_LOG_CONSTANTS.COMPILE_ENTRY_MAX_CHARS)}`);
|
|
270
|
+
}
|
|
271
|
+
lines.push('');
|
|
272
|
+
}
|
|
273
|
+
const pairs = new Map();
|
|
274
|
+
const count = (from, to, how) => {
|
|
275
|
+
if (!from || !to || from === to)
|
|
276
|
+
return;
|
|
277
|
+
const key = `${from} → ${to}`;
|
|
278
|
+
const byHow = pairs.get(key) ?? new Map();
|
|
279
|
+
byHow.set(how, (byHow.get(how) ?? 0) + 1);
|
|
280
|
+
pairs.set(key, byHow);
|
|
281
|
+
};
|
|
282
|
+
for (const { parsed } of records) {
|
|
283
|
+
const asker = parsed.askedBy.replace(/\s*\((?:team lead|orchestrator)\)/, '').replace(/\s+for the owner.*$/, '').replace(/\s*\([^)]*\)$/, '').trim();
|
|
284
|
+
if (asker && !asker.startsWith('schedule') && asker !== 'Crewly (system)')
|
|
285
|
+
count(asker, parsed.doneBy, 'delegation');
|
|
286
|
+
for (const h of parsed.helpers) {
|
|
287
|
+
if (h.how === 'delegated')
|
|
288
|
+
count(parsed.doneBy, h.name, 'delegation');
|
|
289
|
+
else if (h.how === 'asked')
|
|
290
|
+
count(parsed.doneBy, h.name, h.rest.includes('answered') ? 'ask answered' : 'ask unanswered');
|
|
291
|
+
else
|
|
292
|
+
count(h.name, parsed.doneBy, 'review');
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
if (pairs.size > 0) {
|
|
296
|
+
lines.push(`### Collaboration (${pairs.size} pair${pairs.size === 1 ? '' : 's'})`, '');
|
|
297
|
+
const rows = [...pairs.entries()]
|
|
298
|
+
.map(([pair, byHow]) => ({ pair, total: [...byHow.values()].reduce((a, b) => a + b, 0), detail: [...byHow.entries()].sort((a, b) => b[1] - a[1]).map(([how, n]) => `${n} ${how}${n === 1 || how.endsWith('answered') ? '' : 's'}`).join(', ') }))
|
|
299
|
+
.sort((a, b) => b.total - a.total || a.pair.localeCompare(b.pair));
|
|
300
|
+
for (const r of rows)
|
|
301
|
+
lines.push(`- ${r.pair}: ${r.detail}`);
|
|
302
|
+
lines.push('');
|
|
303
|
+
}
|
|
304
|
+
return lines;
|
|
305
|
+
}
|
|
306
|
+
clipText(text, max) {
|
|
307
|
+
const flat = text.replace(/\s+/g, ' ').trim();
|
|
308
|
+
return flat.length > max ? `${flat.slice(0, max - 1)}…` : flat;
|
|
309
|
+
}
|
|
310
|
+
statePath(vaultPath) {
|
|
311
|
+
return path.join(vaultPath, WIKI_LOG_CONSTANTS.COMPILE_STATE_FILE);
|
|
312
|
+
}
|
|
313
|
+
async readState(vaultPath) {
|
|
314
|
+
const data = await safeReadJson(this.statePath(vaultPath), null);
|
|
315
|
+
return {
|
|
316
|
+
compiledKeys: Array.isArray(data?.compiledKeys) ? data.compiledKeys.filter((k) => typeof k === 'string') : [],
|
|
317
|
+
lastCompiledAt: typeof data?.lastCompiledAt === 'string' ? data.lastCompiledAt : null,
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
async writeState(vaultPath, state) {
|
|
321
|
+
await atomicWriteJson(this.statePath(vaultPath), state);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
//# 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"}
|