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
|
@@ -6,12 +6,26 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import * as path from 'path';
|
|
8
8
|
import * as fs from 'fs/promises';
|
|
9
|
-
import { WIKI_KB_CONSTANTS } from '../../constants.js';
|
|
9
|
+
import { WIKI_KB_CONSTANTS, WIKI_LOG_CONSTANTS } from '../../constants.js';
|
|
10
10
|
/** Files that are not knowledge pages (index, log, readme). */
|
|
11
11
|
export function isSeedFile(relativePath) {
|
|
12
12
|
const base = relativePath.split('/').pop()?.toLowerCase() ?? '';
|
|
13
13
|
return base === 'index.md' || base === 'log.md' || base === 'readme.md' || base === 'schema.md';
|
|
14
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Whether a vault-relative path lies inside the rotated-log archive
|
|
17
|
+
* (`llm-curated/log-archive/`). Archived logs are kept, never searched,
|
|
18
|
+
* counted or linted (#1345).
|
|
19
|
+
*
|
|
20
|
+
* @param relativePath - POSIX path relative to the vault root
|
|
21
|
+
* @returns True for the archive folder and anything under it
|
|
22
|
+
*/
|
|
23
|
+
export function isLogArchivePath(relativePath) {
|
|
24
|
+
const normalized = relativePath.replace(/\\/g, '/').replace(/^\/+/, '');
|
|
25
|
+
return normalized === WIKI_LOG_CONSTANTS.ARCHIVE_DIR || normalized.startsWith(`${WIKI_LOG_CONSTANTS.ARCHIVE_DIR}/`);
|
|
26
|
+
}
|
|
27
|
+
/** Directory basename of the rotated-log archive. */
|
|
28
|
+
export const LOG_ARCHIVE_DIR_NAME = WIKI_LOG_CONSTANTS.ARCHIVE_DIR.split('/').pop() ?? 'log-archive';
|
|
15
29
|
/**
|
|
16
30
|
* Walk `<vault>/llm-curated/` and list every `.md` page.
|
|
17
31
|
*
|
|
@@ -40,6 +54,8 @@ export async function walkCuratedPages(vaultPath, options = {}) {
|
|
|
40
54
|
continue;
|
|
41
55
|
if (abs === proposedAbs && !options.includeProposed)
|
|
42
56
|
continue;
|
|
57
|
+
if (isLogArchivePath(path.relative(vaultPath, abs).replace(/\\/g, '/')))
|
|
58
|
+
continue;
|
|
43
59
|
stack.push(abs);
|
|
44
60
|
}
|
|
45
61
|
else if (entry.isFile() && entry.name.endsWith('.md')) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wiki-vault-walk.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-vault-walk.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"wiki-vault-walk.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-vault-walk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcript facts for a work record (#1349).
|
|
3
|
+
*
|
|
4
|
+
* Reads a bounded tail of the doer's Claude Code transcript and keeps only
|
|
5
|
+
* what happened inside the task window: failed tool calls (with whether the
|
|
6
|
+
* same call later succeeded), files written, PR / commit references and
|
|
7
|
+
* messages posted. Only the main chain counts (`isSidechain` entries belong
|
|
8
|
+
* to subagents). Tool results are read for their error flag and the first
|
|
9
|
+
* line of an exit code, never copied.
|
|
10
|
+
*
|
|
11
|
+
* Codex rollouts are not read (their shape differs; the trace covers them).
|
|
12
|
+
*
|
|
13
|
+
* @module services/wiki/work-record-transcript
|
|
14
|
+
*/
|
|
15
|
+
import type { WorkRecordError } from './work-record.js';
|
|
16
|
+
/** What the transcript slice says about a task. */
|
|
17
|
+
export interface TranscriptWindowFacts {
|
|
18
|
+
errors: WorkRecordError[];
|
|
19
|
+
filesWritten: string[];
|
|
20
|
+
urls: string[];
|
|
21
|
+
commits: string[];
|
|
22
|
+
/** Messages the agent posted through a reply / post skill. */
|
|
23
|
+
posts: number;
|
|
24
|
+
/** Tool calls seen inside the window. */
|
|
25
|
+
toolCalls: number;
|
|
26
|
+
}
|
|
27
|
+
/** Task window. */
|
|
28
|
+
export interface TranscriptWindow {
|
|
29
|
+
fromMs: number;
|
|
30
|
+
toMs: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Read the end of a file as whole lines (the first partial line is dropped).
|
|
34
|
+
*
|
|
35
|
+
* @param file - Path
|
|
36
|
+
* @param maxBytes - Bytes from the end
|
|
37
|
+
* @returns Text, '' when the file cannot be read
|
|
38
|
+
*/
|
|
39
|
+
export declare function readTranscriptTail(file: string, maxBytes?: number): Promise<string>;
|
|
40
|
+
/**
|
|
41
|
+
* Facts from whole Claude transcript lines inside a window.
|
|
42
|
+
*
|
|
43
|
+
* @param text - JSONL text (whole lines)
|
|
44
|
+
* @param window - Task window (epoch ms); entries outside it are ignored
|
|
45
|
+
* @param roots - Project roots to make file paths relative to
|
|
46
|
+
* @returns Facts (empty when nothing fell in the window)
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* const facts = parseClaudeTranscriptWindow(await readTranscriptTail(file), { fromMs, toMs }, [projectPath]);
|
|
51
|
+
* facts.errors; // [{ what: 'Bash `npm test` exit 1', resolved: 'fixed' }]
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export declare function parseClaudeTranscriptWindow(text: string, window: TranscriptWindow, roots?: readonly string[]): TranscriptWindowFacts;
|
|
55
|
+
/**
|
|
56
|
+
* Whether a transcript is worth reading for an item that ended at `endedMs`:
|
|
57
|
+
* the tail only holds recent turns.
|
|
58
|
+
*
|
|
59
|
+
* @param endedMs - When the item ended (epoch ms)
|
|
60
|
+
* @param now - Clock
|
|
61
|
+
* @returns True when the window may still be in the tail
|
|
62
|
+
*/
|
|
63
|
+
export declare function transcriptWorthReading(endedMs: number, now?: number): boolean;
|
|
64
|
+
//# sourceMappingURL=work-record-transcript.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-record-transcript.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/work-record-transcript.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAIxD,mDAAmD;AACnD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,mBAAmB;AACnB,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAeD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAgC,GAAG,OAAO,CAAC,MAAM,CAAC,CAelH;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,GAAE,SAAS,MAAM,EAAO,GAAG,qBAAqB,CAmExI;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,OAAO,CAEzF"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcript facts for a work record (#1349).
|
|
3
|
+
*
|
|
4
|
+
* Reads a bounded tail of the doer's Claude Code transcript and keeps only
|
|
5
|
+
* what happened inside the task window: failed tool calls (with whether the
|
|
6
|
+
* same call later succeeded), files written, PR / commit references and
|
|
7
|
+
* messages posted. Only the main chain counts (`isSidechain` entries belong
|
|
8
|
+
* to subagents). Tool results are read for their error flag and the first
|
|
9
|
+
* line of an exit code, never copied.
|
|
10
|
+
*
|
|
11
|
+
* Codex rollouts are not read (their shape differs; the trace covers them).
|
|
12
|
+
*
|
|
13
|
+
* @module services/wiki/work-record-transcript
|
|
14
|
+
*/
|
|
15
|
+
import * as fs from 'fs/promises';
|
|
16
|
+
import { WORK_RECORD_CONSTANTS } from '../../constants.js';
|
|
17
|
+
import { redactSensitive } from './wiki-redaction.js';
|
|
18
|
+
const C = WORK_RECORD_CONSTANTS;
|
|
19
|
+
const PR_URL_RE = /https:\/\/github\.com\/[\w.-]+\/[\w.-]+\/(?:pull|issues)\/\d+/g;
|
|
20
|
+
const COMMIT_LINE_RE = /^\[[^\]\s]+ (?:\(root-commit\) )?([0-9a-f]{7,12})\]/m;
|
|
21
|
+
const EXIT_CODE_RE = /^Exit code (\d+)/m;
|
|
22
|
+
const POST_SKILL_RE = /\b(?:reply-chat|reply-channel|reply|slack-post|send-chat-response|send-message|slack-file|whatsapp-send|gmail-send)\b/;
|
|
23
|
+
const FILE_TOOLS = new Set(['Write', 'Edit', 'MultiEdit', 'NotebookEdit']);
|
|
24
|
+
/**
|
|
25
|
+
* Read the end of a file as whole lines (the first partial line is dropped).
|
|
26
|
+
*
|
|
27
|
+
* @param file - Path
|
|
28
|
+
* @param maxBytes - Bytes from the end
|
|
29
|
+
* @returns Text, '' when the file cannot be read
|
|
30
|
+
*/
|
|
31
|
+
export async function readTranscriptTail(file, maxBytes = C.TRANSCRIPT_TAIL_BYTES) {
|
|
32
|
+
let handle = null;
|
|
33
|
+
try {
|
|
34
|
+
handle = await fs.open(file, 'r');
|
|
35
|
+
const { size } = await handle.stat();
|
|
36
|
+
const start = Math.max(0, size - maxBytes);
|
|
37
|
+
const buf = Buffer.alloc(size - start);
|
|
38
|
+
await handle.read(buf, 0, buf.length, start);
|
|
39
|
+
const text = buf.toString('utf-8');
|
|
40
|
+
return start > 0 ? text.slice(text.indexOf('\n') + 1) : text;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return '';
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
await handle?.close();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Facts from whole Claude transcript lines inside a window.
|
|
51
|
+
*
|
|
52
|
+
* @param text - JSONL text (whole lines)
|
|
53
|
+
* @param window - Task window (epoch ms); entries outside it are ignored
|
|
54
|
+
* @param roots - Project roots to make file paths relative to
|
|
55
|
+
* @returns Facts (empty when nothing fell in the window)
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```typescript
|
|
59
|
+
* const facts = parseClaudeTranscriptWindow(await readTranscriptTail(file), { fromMs, toMs }, [projectPath]);
|
|
60
|
+
* facts.errors; // [{ what: 'Bash `npm test` exit 1', resolved: 'fixed' }]
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export function parseClaudeTranscriptWindow(text, window, roots = []) {
|
|
64
|
+
const facts = { errors: [], filesWritten: [], urls: [], commits: [], posts: 0, toolCalls: 0 };
|
|
65
|
+
const uses = new Map();
|
|
66
|
+
const failed = [];
|
|
67
|
+
const succeededKeys = new Map();
|
|
68
|
+
const files = new Set();
|
|
69
|
+
const urls = new Set();
|
|
70
|
+
const commits = new Set();
|
|
71
|
+
const from = window.fromMs - C.TRANSCRIPT_WINDOW_SLACK_MS;
|
|
72
|
+
const to = window.toMs + C.TRANSCRIPT_WINDOW_SLACK_MS;
|
|
73
|
+
for (const line of text.split('\n')) {
|
|
74
|
+
if (line.length < 20 || !(line.includes('"tool_use"') || line.includes('"tool_result"') || line.includes('"type":"text"')))
|
|
75
|
+
continue;
|
|
76
|
+
let entry;
|
|
77
|
+
try {
|
|
78
|
+
entry = JSON.parse(line);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (entry.isSidechain === true || entry.isMeta === true || entry.isApiErrorMessage === true)
|
|
84
|
+
continue;
|
|
85
|
+
const at = Date.parse(typeof entry.timestamp === 'string' ? entry.timestamp : '');
|
|
86
|
+
if (!Number.isFinite(at) || at < from || at > to)
|
|
87
|
+
continue;
|
|
88
|
+
const content = entry.message?.content;
|
|
89
|
+
if (!Array.isArray(content))
|
|
90
|
+
continue;
|
|
91
|
+
for (const block of content) {
|
|
92
|
+
if (block?.type === 'tool_use' && typeof block.id === 'string' && typeof block.name === 'string') {
|
|
93
|
+
const use = describeToolUse(block.name, block.input, roots, at);
|
|
94
|
+
uses.set(block.id, use);
|
|
95
|
+
facts.toolCalls++;
|
|
96
|
+
if (FILE_TOOLS.has(block.name)) {
|
|
97
|
+
const p = filePathOf(block.input);
|
|
98
|
+
if (p)
|
|
99
|
+
files.add(relative(p, roots));
|
|
100
|
+
}
|
|
101
|
+
if (block.name === 'Bash' && POST_SKILL_RE.test(commandOf(block.input)))
|
|
102
|
+
facts.posts++;
|
|
103
|
+
}
|
|
104
|
+
else if (block?.type === 'tool_result' && typeof block.tool_use_id === 'string') {
|
|
105
|
+
const use = uses.get(block.tool_use_id);
|
|
106
|
+
const resultText = resultTextOf(block.content);
|
|
107
|
+
const exit = resultText.match(EXIT_CODE_RE);
|
|
108
|
+
const nonZeroExit = exit ? Number(exit[1]) !== 0 : false;
|
|
109
|
+
if (block.is_error === true || nonZeroExit) {
|
|
110
|
+
if (use)
|
|
111
|
+
failed.push({ use: exit && nonZeroExit ? { ...use, summary: `${use.summary} exit ${exit[1]}` } : use, at });
|
|
112
|
+
}
|
|
113
|
+
else if (use) {
|
|
114
|
+
succeededKeys.set(use.key, at);
|
|
115
|
+
}
|
|
116
|
+
for (const u of resultText.match(PR_URL_RE) ?? [])
|
|
117
|
+
urls.add(u);
|
|
118
|
+
const commit = resultText.match(COMMIT_LINE_RE);
|
|
119
|
+
if (commit && use?.name === 'Bash' && /\bgit\s+commit\b/.test(use.summary))
|
|
120
|
+
commits.add(commit[1]);
|
|
121
|
+
}
|
|
122
|
+
else if (block?.type === 'text' && typeof block.text === 'string' && entry.type === 'assistant') {
|
|
123
|
+
for (const u of block.text.match(PR_URL_RE) ?? [])
|
|
124
|
+
urls.add(u);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
const seen = new Set();
|
|
129
|
+
for (const f of failed) {
|
|
130
|
+
const what = redactSensitive(f.use.summary);
|
|
131
|
+
if (seen.has(what))
|
|
132
|
+
continue;
|
|
133
|
+
seen.add(what);
|
|
134
|
+
const later = succeededKeys.get(f.use.key);
|
|
135
|
+
facts.errors.push({ what, resolved: later !== undefined && later > f.at ? 'fixed' : 'unresolved' });
|
|
136
|
+
if (facts.errors.length >= C.MAX_ERRORS)
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
facts.filesWritten = [...files].slice(0, C.MAX_OUTPUTS);
|
|
140
|
+
facts.urls = [...urls].slice(0, C.MAX_OUTPUTS);
|
|
141
|
+
facts.commits = [...commits].slice(0, C.MAX_OUTPUTS);
|
|
142
|
+
return facts;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Whether a transcript is worth reading for an item that ended at `endedMs`:
|
|
146
|
+
* the tail only holds recent turns.
|
|
147
|
+
*
|
|
148
|
+
* @param endedMs - When the item ended (epoch ms)
|
|
149
|
+
* @param now - Clock
|
|
150
|
+
* @returns True when the window may still be in the tail
|
|
151
|
+
*/
|
|
152
|
+
export function transcriptWorthReading(endedMs, now = Date.now()) {
|
|
153
|
+
return Number.isFinite(endedMs) && now - endedMs <= C.TRANSCRIPT_MAX_AGE_MS;
|
|
154
|
+
}
|
|
155
|
+
// ---------------------------------------------------------------------------
|
|
156
|
+
function describeToolUse(name, input, roots, at) {
|
|
157
|
+
if (name === 'Bash') {
|
|
158
|
+
const command = commandOf(input).replace(/\s+/g, ' ').trim();
|
|
159
|
+
const shown = command.length > 80 ? `${command.slice(0, 79)}…` : command;
|
|
160
|
+
return { name, summary: `Bash \`${shown}\``, key: `Bash:${command.slice(0, 200)}`, at };
|
|
161
|
+
}
|
|
162
|
+
const p = filePathOf(input);
|
|
163
|
+
if (p)
|
|
164
|
+
return { name, summary: `${name} ${relative(p, roots)}`, key: `${name}:${p}`, at };
|
|
165
|
+
return { name, summary: `${name} call`, key: `${name}:`, at };
|
|
166
|
+
}
|
|
167
|
+
function commandOf(input) {
|
|
168
|
+
const c = input?.command;
|
|
169
|
+
return typeof c === 'string' ? c : '';
|
|
170
|
+
}
|
|
171
|
+
function filePathOf(input) {
|
|
172
|
+
const p = input;
|
|
173
|
+
const v = p?.file_path ?? p?.notebook_path ?? p?.path;
|
|
174
|
+
return typeof v === 'string' && v.length > 0 ? v : null;
|
|
175
|
+
}
|
|
176
|
+
function relative(file, roots) {
|
|
177
|
+
for (const root of roots) {
|
|
178
|
+
if (root && file.startsWith(`${root}/`))
|
|
179
|
+
return file.slice(root.length + 1);
|
|
180
|
+
}
|
|
181
|
+
return file;
|
|
182
|
+
}
|
|
183
|
+
function resultTextOf(content) {
|
|
184
|
+
if (typeof content === 'string')
|
|
185
|
+
return content.slice(0, 4_000);
|
|
186
|
+
if (Array.isArray(content)) {
|
|
187
|
+
return content
|
|
188
|
+
.map((c) => (typeof c?.text === 'string' ? (c.text) : ''))
|
|
189
|
+
.join('\n')
|
|
190
|
+
.slice(0, 4_000);
|
|
191
|
+
}
|
|
192
|
+
return '';
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=work-record-transcript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-record-transcript.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/work-record-transcript.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Work records (#1349) — the pure half.
|
|
3
|
+
*
|
|
4
|
+
* A work record is one structured `(record)` entry in a vault's activity log
|
|
5
|
+
* describing a finished (or long-blocked) task: who asked for it, who did it,
|
|
6
|
+
* what came out, what went wrong on the way and how it was resolved, who was
|
|
7
|
+
* pulled in, and how it ended. This module knows the shape, assembles a
|
|
8
|
+
* record from already-loaded inputs (no I/O, so fixtures can drive it),
|
|
9
|
+
* renders it as a log body, and parses a body back for the digest and the
|
|
10
|
+
* startup briefing.
|
|
11
|
+
*
|
|
12
|
+
* Owner-facing lines never carry ticket ids or WorkItem ids; those live on
|
|
13
|
+
* the `meta:` line, which the digest reads but never renders.
|
|
14
|
+
*
|
|
15
|
+
* Body layout (one field per line, parse-friendly):
|
|
16
|
+
*
|
|
17
|
+
* (record) **<title>** — <outcome phrase>
|
|
18
|
+
* asked by: <who> — "<quote>"
|
|
19
|
+
* done by: <name>
|
|
20
|
+
* did: <summary>
|
|
21
|
+
* outputs: <a>; <b>
|
|
22
|
+
* errors: <what> (fixed); <what> (unresolved)
|
|
23
|
+
* helpers: delegated to Leo: "<title>" → done; asked Ella → answered; reviewed by Owen
|
|
24
|
+
* outcome: <phrase>
|
|
25
|
+
* meta: wi=<id> phase=final status=verified asked_by=owen:lead done_by=nova …
|
|
26
|
+
*
|
|
27
|
+
* @module services/wiki/work-record
|
|
28
|
+
*/
|
|
29
|
+
import type { WorkItem } from '../../types/v2/work-item.types.js';
|
|
30
|
+
import type { ProjectTicket } from '../../types/project-ticket.types.js';
|
|
31
|
+
import type { Request } from '../../types/v2/request.types.js';
|
|
32
|
+
import type { TraceEvent } from '../trace/trace.types.js';
|
|
33
|
+
import type { WikiLogEntryRecord } from './wiki-log-entries.js';
|
|
34
|
+
import type { TranscriptWindowFacts } from './work-record-transcript.js';
|
|
35
|
+
/** Who a party to the task is. */
|
|
36
|
+
export type WorkRecordPartyKind = 'owner' | 'orchestrator' | 'lead' | 'agent' | 'schedule' | 'system';
|
|
37
|
+
/** How the task ended. */
|
|
38
|
+
export type WorkRecordOutcome = 'owner_verified' | 'lead_verified' | 'silence_accepted' | 'done' | 'rejected' | 'cancelled' | 'failed' | 'blocked' | 'waiting_owner';
|
|
39
|
+
/** `final` closes the task; `blocked` is an interim record for a parked task. */
|
|
40
|
+
export type WorkRecordPhase = 'final' | 'blocked';
|
|
41
|
+
/** One party (asker, doer, helper). */
|
|
42
|
+
export interface WorkRecordParty {
|
|
43
|
+
kind: WorkRecordPartyKind;
|
|
44
|
+
/** Display name (`Owen`, `the owner`, `schedule "Daily ops"`). */
|
|
45
|
+
name: string;
|
|
46
|
+
/** Agent session when the party is an agent. */
|
|
47
|
+
session?: string;
|
|
48
|
+
}
|
|
49
|
+
/** Someone pulled in while the task ran. */
|
|
50
|
+
export interface WorkRecordHelper {
|
|
51
|
+
how: 'delegated' | 'asked' | 'reviewed';
|
|
52
|
+
name: string;
|
|
53
|
+
session?: string;
|
|
54
|
+
/** Delegated sub-task title. */
|
|
55
|
+
what?: string;
|
|
56
|
+
/** What came back (`done`, `rejected`, `answered`, `no answer`). */
|
|
57
|
+
back?: string;
|
|
58
|
+
}
|
|
59
|
+
/** An error met on the way. */
|
|
60
|
+
export interface WorkRecordError {
|
|
61
|
+
what: string;
|
|
62
|
+
resolved: 'fixed' | 'unresolved' | 'unknown';
|
|
63
|
+
}
|
|
64
|
+
/** The assembled record. */
|
|
65
|
+
export interface WorkRecord {
|
|
66
|
+
workItemId: string;
|
|
67
|
+
phase: WorkRecordPhase;
|
|
68
|
+
title: string;
|
|
69
|
+
askedBy: WorkRecordParty;
|
|
70
|
+
/** Where the ask came from, when known (`Slack thread`, `chat`, `app comment`). */
|
|
71
|
+
askedWhere?: string;
|
|
72
|
+
/** The person the asker acted for (an owner-origin delegation by a lead). */
|
|
73
|
+
forOwner: boolean;
|
|
74
|
+
askQuote: string;
|
|
75
|
+
doneBy: WorkRecordParty;
|
|
76
|
+
did: string;
|
|
77
|
+
outputs: string[];
|
|
78
|
+
errors: WorkRecordError[];
|
|
79
|
+
helpers: WorkRecordHelper[];
|
|
80
|
+
outcome: WorkRecordOutcome;
|
|
81
|
+
/** Who decided the outcome (reviewer, owner), display name. */
|
|
82
|
+
outcomeBy?: string;
|
|
83
|
+
/** Cancel / block / rejection reason. */
|
|
84
|
+
outcomeNote?: string;
|
|
85
|
+
endedAt: string;
|
|
86
|
+
durationMs?: number;
|
|
87
|
+
/** Machine-readable fields for the digest (ticket ids live here only). */
|
|
88
|
+
meta: Record<string, string>;
|
|
89
|
+
}
|
|
90
|
+
/** Everything the assembler needs, already loaded. */
|
|
91
|
+
export interface WorkRecordInputs {
|
|
92
|
+
workItem: WorkItem;
|
|
93
|
+
phase: WorkRecordPhase;
|
|
94
|
+
/** Linked project ticket (`metadata.projectTicket`), when found. */
|
|
95
|
+
ticket?: ProjectTicket | null;
|
|
96
|
+
/** Linked Request (`workItem.requestId`), when found. */
|
|
97
|
+
request?: Request | null;
|
|
98
|
+
/** Child items: delegations and the verify item. */
|
|
99
|
+
children?: readonly WorkItem[];
|
|
100
|
+
/** The run trace's events, when a trace exists. */
|
|
101
|
+
trace?: readonly TraceEvent[];
|
|
102
|
+
/** Facts from the doer's transcript for the task window. */
|
|
103
|
+
transcript?: TranscriptWindowFacts | null;
|
|
104
|
+
/** Display name of an agent session. */
|
|
105
|
+
nameOf: (session: string) => string;
|
|
106
|
+
/** Party kind of an agent session (`lead`, `orchestrator`, `agent`). */
|
|
107
|
+
kindOf: (session: string) => WorkRecordPartyKind;
|
|
108
|
+
/** Ticket prefixes to strip from owner-facing text (`CE`, `CREW`). */
|
|
109
|
+
ticketPrefixes?: readonly string[];
|
|
110
|
+
/** Clock. */
|
|
111
|
+
now?: number;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* `work-record:<workItemId>#<phase>` — the entry's `ref:` and its dedupe key.
|
|
115
|
+
*
|
|
116
|
+
* @param workItemId - WorkItem id
|
|
117
|
+
* @param phase - Record phase
|
|
118
|
+
* @returns Stable ref
|
|
119
|
+
*/
|
|
120
|
+
export declare function workRecordRef(workItemId: string, phase: WorkRecordPhase): string;
|
|
121
|
+
/**
|
|
122
|
+
* Parse a record ref back into its parts.
|
|
123
|
+
*
|
|
124
|
+
* @param ref - `ref:` value
|
|
125
|
+
* @returns Parts, or null when it is not a record ref
|
|
126
|
+
*/
|
|
127
|
+
export declare function parseWorkRecordRef(ref: string): {
|
|
128
|
+
workItemId: string;
|
|
129
|
+
phase: WorkRecordPhase;
|
|
130
|
+
} | null;
|
|
131
|
+
/**
|
|
132
|
+
* Whether a log entry is a work record.
|
|
133
|
+
*
|
|
134
|
+
* @param entry - Parsed log entry
|
|
135
|
+
* @returns True for `work_record` entries (by source type or ref)
|
|
136
|
+
*/
|
|
137
|
+
export declare function isWorkRecordEntry(entry: Pick<WikiLogEntryRecord, 'sourceType' | 'ref'>): boolean;
|
|
138
|
+
/**
|
|
139
|
+
* Whether a WorkItem is the verify item of another (`<id>:verify:<id>` or
|
|
140
|
+
* `metadata.verifyOf`). Verify items are folded into the parent's record.
|
|
141
|
+
*
|
|
142
|
+
* @param wi - WorkItem
|
|
143
|
+
* @returns True for a verify item
|
|
144
|
+
*/
|
|
145
|
+
export declare function isVerifyWorkItem(wi: Pick<WorkItem, 'id' | 'metadata' | 'type'>): boolean;
|
|
146
|
+
/**
|
|
147
|
+
* Whether a WorkItem gets a record at all: real work, not a verify item or a
|
|
148
|
+
* bookkeeping type.
|
|
149
|
+
*
|
|
150
|
+
* @param wi - WorkItem
|
|
151
|
+
* @returns True when the item is recordable
|
|
152
|
+
*/
|
|
153
|
+
export declare function isRecordableWorkItem(wi: Pick<WorkItem, 'id' | 'metadata' | 'type'>): boolean;
|
|
154
|
+
/**
|
|
155
|
+
* The moment an item stopped: `completedAt`, else `statusChangedAt`, else
|
|
156
|
+
* `createdAt`.
|
|
157
|
+
*
|
|
158
|
+
* @param wi - WorkItem
|
|
159
|
+
* @returns ISO time
|
|
160
|
+
*/
|
|
161
|
+
export declare function workItemEndedAt(wi: Pick<WorkItem, 'completedAt' | 'statusChangedAt' | 'createdAt'>): string;
|
|
162
|
+
/**
|
|
163
|
+
* Owner-facing text: ticket ids, WorkItem ids and uuids removed, whitespace
|
|
164
|
+
* collapsed, clipped.
|
|
165
|
+
*
|
|
166
|
+
* @param text - Raw text
|
|
167
|
+
* @param prefixes - Ticket prefixes to strip
|
|
168
|
+
* @param max - Character cap
|
|
169
|
+
* @returns Clean one-line text
|
|
170
|
+
*/
|
|
171
|
+
export declare function cleanOwnerText(text: string | undefined | null, prefixes?: readonly string[], max?: number): string;
|
|
172
|
+
/**
|
|
173
|
+
* Clip to `max` characters with an ellipsis.
|
|
174
|
+
*
|
|
175
|
+
* @param text - Text
|
|
176
|
+
* @param max - Cap
|
|
177
|
+
* @returns Clipped text
|
|
178
|
+
*/
|
|
179
|
+
export declare function clip(text: string, max: number): string;
|
|
180
|
+
/**
|
|
181
|
+
* Assemble a record from loaded inputs. Pure.
|
|
182
|
+
*
|
|
183
|
+
* @param inputs - WorkItem, links, trace, transcript facts and name resolvers
|
|
184
|
+
* @returns The record
|
|
185
|
+
*
|
|
186
|
+
* @example
|
|
187
|
+
* ```typescript
|
|
188
|
+
* const record = assembleWorkRecord({ workItem, phase: 'final', ticket, children, trace, nameOf, kindOf });
|
|
189
|
+
* const body = renderWorkRecordBody(record);
|
|
190
|
+
* ```
|
|
191
|
+
*/
|
|
192
|
+
export declare function assembleWorkRecord(inputs: WorkRecordInputs): WorkRecord;
|
|
193
|
+
/**
|
|
194
|
+
* Render a record as the log body. Always fits `MAX_CHARS`; the `meta:` line
|
|
195
|
+
* is never cut.
|
|
196
|
+
*
|
|
197
|
+
* @param record - Assembled record
|
|
198
|
+
* @returns Markdown body
|
|
199
|
+
*/
|
|
200
|
+
export declare function renderWorkRecordBody(record: WorkRecord): string;
|
|
201
|
+
/** A record as read back from a log body. */
|
|
202
|
+
export interface ParsedWorkRecord {
|
|
203
|
+
title: string;
|
|
204
|
+
askedBy: string;
|
|
205
|
+
doneBy: string;
|
|
206
|
+
did: string;
|
|
207
|
+
outputs: string[];
|
|
208
|
+
errors: string[];
|
|
209
|
+
helpers: Array<{
|
|
210
|
+
how: 'delegated' | 'asked' | 'reviewed';
|
|
211
|
+
name: string;
|
|
212
|
+
rest: string;
|
|
213
|
+
}>;
|
|
214
|
+
outcome: string;
|
|
215
|
+
meta: Record<string, string>;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Parse a record body written by {@link renderWorkRecordBody}.
|
|
219
|
+
*
|
|
220
|
+
* @param body - Log entry body
|
|
221
|
+
* @returns The fields, or null when the body is not a record
|
|
222
|
+
*/
|
|
223
|
+
export declare function parseWorkRecordBody(body: string): ParsedWorkRecord | null;
|
|
224
|
+
/**
|
|
225
|
+
* One-line form of a record for the startup briefing and the digest.
|
|
226
|
+
*
|
|
227
|
+
* @param parsed - Parsed record
|
|
228
|
+
* @param max - Character cap
|
|
229
|
+
* @returns `**Title** — asked by X, done by Y → outcome`
|
|
230
|
+
*/
|
|
231
|
+
export declare function shortWorkRecordLine(parsed: ParsedWorkRecord, max?: number): string;
|
|
232
|
+
/**
|
|
233
|
+
* The outcome phrase used in the headline and the `outcome:` line.
|
|
234
|
+
*
|
|
235
|
+
* @param record - Record
|
|
236
|
+
* @returns Owner-facing phrase
|
|
237
|
+
*/
|
|
238
|
+
export declare function outcomePhrase(record: Pick<WorkRecord, 'outcome' | 'outcomeBy'>): string;
|
|
239
|
+
//# sourceMappingURL=work-record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-record.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/work-record.ts"],"names":[],"mappings":"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"}
|