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
|
@@ -76,6 +76,11 @@ export declare function claimsTeam(info: Pick<PersistedSessionInfo, 'teamId' | '
|
|
|
76
76
|
* ```
|
|
77
77
|
*/
|
|
78
78
|
export declare function resolvePersistedSessions(sessions: ReadonlyArray<PersistedSessionInfo>, teams: ReadonlyArray<BindingTeam>): ResolvedPersistedSessions;
|
|
79
|
+
/** A restore target resolved to the member bound to its name. */
|
|
80
|
+
export interface TargetBinding extends SessionBinding {
|
|
81
|
+
/** The bound session name */
|
|
82
|
+
name: string;
|
|
83
|
+
}
|
|
79
84
|
/** Which persisted sessions startup auto-restore relaunches, and why the rest are skipped. */
|
|
80
85
|
export interface AutoRestoreSelection {
|
|
81
86
|
/** Sessions to relaunch, each under a bound name (or claiming no team). */
|
|
@@ -89,6 +94,14 @@ export interface AutoRestoreSelection {
|
|
|
89
94
|
}>;
|
|
90
95
|
/** Bound sessions skipped because no pending WorkItem targets them. */
|
|
91
96
|
skippedNoWork: string[];
|
|
97
|
+
/**
|
|
98
|
+
* Targets that were not running at shutdown (absent from the persisted
|
|
99
|
+
* state) but are bound team members: they are owed something and come
|
|
100
|
+
* back from their binding (crewly#1348).
|
|
101
|
+
*/
|
|
102
|
+
fromTargets: TargetBinding[];
|
|
103
|
+
/** Targets absent from the persisted state that are not launchable: unbound, or held back. */
|
|
104
|
+
droppedTargets: string[];
|
|
92
105
|
}
|
|
93
106
|
/**
|
|
94
107
|
* Choose the persisted sessions startup auto-restore relaunches.
|
|
@@ -101,15 +114,25 @@ export interface AutoRestoreSelection {
|
|
|
101
114
|
* A rebound session also counts work that still targets its old name. If
|
|
102
115
|
* the pool could not be read (`targets === null`), the gate is skipped
|
|
103
116
|
* (the pre-existing safety valve: better to over-restore than strand work).
|
|
117
|
+
* 3. Owed but idle: a target that is not in the persisted state at all (the
|
|
118
|
+
* agent had been idle-stopped before the shutdown) is still relaunched
|
|
119
|
+
* when a team member is bound to that name and `heldBack` does not refuse
|
|
120
|
+
* it (owner-stopped, paused or moved-away team). Pia promised the owner a
|
|
121
|
+
* follow-up, was idle-stopped, and the next restart only filtered the
|
|
122
|
+
* persisted sessions, so she never came back (2026-10-16, crewly#1348).
|
|
104
123
|
*
|
|
105
124
|
* @param input - Persisted sessions (orchestrator/auditor already removed),
|
|
106
|
-
* the teams (or null),
|
|
107
|
-
*
|
|
125
|
+
* the teams (or null), the names targeted by pending WorkItems, interrupted
|
|
126
|
+
* turns, queued messages, owed promises and owner threads (or null), and an
|
|
127
|
+
* optional predicate for targets that must stay down.
|
|
128
|
+
* @returns The sessions to relaunch, the targets to relaunch from their
|
|
129
|
+
* binding, and the reasons others were dropped.
|
|
108
130
|
*/
|
|
109
131
|
export declare function selectAutoRestoreSessions(input: {
|
|
110
132
|
sessions: ReadonlyArray<PersistedSessionInfo>;
|
|
111
133
|
teams: ReadonlyArray<BindingTeam> | null;
|
|
112
134
|
targets: ReadonlySet<string> | null;
|
|
135
|
+
heldBack?: (sessionName: string) => boolean;
|
|
113
136
|
}): AutoRestoreSelection;
|
|
114
137
|
/**
|
|
115
138
|
* Delete the Claude Code agent file Crewly generated for a session
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-binding.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/session/session-binding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,6CAA6C;AAC7C,MAAM,WAAW,WAAW;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7D;AAED,0BAA0B;AAC1B,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,sEAAsE;AACtE,MAAM,WAAW,yBAAyB;IACzC;;;OAGG;IACH,UAAU,EAAE,oBAAoB,EAAE,CAAC;IACnC,wEAAwE;IACxE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mEAAmE;IACnE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7C;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAUrG;AAkBD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,oBAAoB,EAAE,QAAQ,GAAG,UAAU,CAAC,GAAG,OAAO,CAE3F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CACvC,QAAQ,EAAE,aAAa,CAAC,oBAAoB,CAAC,EAC7C,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,GAC/B,yBAAyB,CAoC3B;AAED,8FAA8F;AAC9F,MAAM,WAAW,oBAAoB;IACpC,2EAA2E;IAC3E,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,6CAA6C;IAC7C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,oEAAoE;IACpE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7C,uEAAuE;IACvE,aAAa,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"session-binding.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/session/session-binding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,6CAA6C;AAC7C,MAAM,WAAW,WAAW;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7D;AAED,0BAA0B;AAC1B,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,sEAAsE;AACtE,MAAM,WAAW,yBAAyB;IACzC;;;OAGG;IACH,UAAU,EAAE,oBAAoB,EAAE,CAAC;IACnC,wEAAwE;IACxE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mEAAmE;IACnE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7C;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAUrG;AAkBD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,oBAAoB,EAAE,QAAQ,GAAG,UAAU,CAAC,GAAG,OAAO,CAE3F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CACvC,QAAQ,EAAE,aAAa,CAAC,oBAAoB,CAAC,EAC7C,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,GAC/B,yBAAyB,CAoC3B;AAED,iEAAiE;AACjE,MAAM,WAAW,aAAc,SAAQ,cAAc;IACpD,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;CACb;AAED,8FAA8F;AAC9F,MAAM,WAAW,oBAAoB;IACpC,2EAA2E;IAC3E,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,6CAA6C;IAC7C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,oEAAoE;IACpE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7C,uEAAuE;IACvE,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB;;;;OAIG;IACH,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,8FAA8F;IAC9F,cAAc,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAChD,QAAQ,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAC9C,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IACzC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC;CAC5C,GAAG,oBAAoB,CA4CvB;AAKD;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAWlH"}
|
|
@@ -123,10 +123,19 @@ export function resolvePersistedSessions(sessions, teams) {
|
|
|
123
123
|
* A rebound session also counts work that still targets its old name. If
|
|
124
124
|
* the pool could not be read (`targets === null`), the gate is skipped
|
|
125
125
|
* (the pre-existing safety valve: better to over-restore than strand work).
|
|
126
|
+
* 3. Owed but idle: a target that is not in the persisted state at all (the
|
|
127
|
+
* agent had been idle-stopped before the shutdown) is still relaunched
|
|
128
|
+
* when a team member is bound to that name and `heldBack` does not refuse
|
|
129
|
+
* it (owner-stopped, paused or moved-away team). Pia promised the owner a
|
|
130
|
+
* follow-up, was idle-stopped, and the next restart only filtered the
|
|
131
|
+
* persisted sessions, so she never came back (2026-10-16, crewly#1348).
|
|
126
132
|
*
|
|
127
133
|
* @param input - Persisted sessions (orchestrator/auditor already removed),
|
|
128
|
-
* the teams (or null),
|
|
129
|
-
*
|
|
134
|
+
* the teams (or null), the names targeted by pending WorkItems, interrupted
|
|
135
|
+
* turns, queued messages, owed promises and owner threads (or null), and an
|
|
136
|
+
* optional predicate for targets that must stay down.
|
|
137
|
+
* @returns The sessions to relaunch, the targets to relaunch from their
|
|
138
|
+
* binding, and the reasons others were dropped.
|
|
130
139
|
*/
|
|
131
140
|
export function selectAutoRestoreSessions(input) {
|
|
132
141
|
let bound;
|
|
@@ -141,16 +150,35 @@ export function selectAutoRestoreSessions(input) {
|
|
|
141
150
|
({ launchable: bound, unbound, rebound } = resolvePersistedSessions(input.sessions, input.teams));
|
|
142
151
|
}
|
|
143
152
|
if (input.targets === null) {
|
|
144
|
-
return { sessions: bound, unbound, rebound, skippedNoWork: [] };
|
|
153
|
+
return { sessions: bound, unbound, rebound, skippedNoWork: [], fromTargets: [], droppedTargets: [] };
|
|
145
154
|
}
|
|
146
155
|
const targets = input.targets;
|
|
147
156
|
const oldName = new Map(rebound.map((r) => [r.to, r.from]));
|
|
148
157
|
const hasWork = (s) => targets.has(s.name) || targets.has(oldName.get(s.name) ?? '');
|
|
158
|
+
const sessions = bound.filter(hasWork);
|
|
159
|
+
// Targets no persisted entry covers (under the bound name, the stale name
|
|
160
|
+
// or at all): relaunch the bound ones from the team config.
|
|
161
|
+
const persisted = new Set([...input.sessions.map((s) => s.name), ...sessions.map((s) => s.name)]);
|
|
162
|
+
const bindings = input.teams === null ? new Map() : collectSessionBindings(input.teams);
|
|
163
|
+
const fromTargets = [];
|
|
164
|
+
const droppedTargets = [];
|
|
165
|
+
for (const name of targets) {
|
|
166
|
+
if (persisted.has(name))
|
|
167
|
+
continue;
|
|
168
|
+
const binding = bindings.get(name);
|
|
169
|
+
if (!binding || input.heldBack?.(name)) {
|
|
170
|
+
droppedTargets.push(name);
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
fromTargets.push({ name, ...binding });
|
|
174
|
+
}
|
|
149
175
|
return {
|
|
150
|
-
sessions
|
|
176
|
+
sessions,
|
|
151
177
|
unbound,
|
|
152
178
|
rebound,
|
|
153
179
|
skippedNoWork: bound.filter((s) => !hasWork(s)).map((s) => s.name),
|
|
180
|
+
fromTargets,
|
|
181
|
+
droppedTargets,
|
|
154
182
|
};
|
|
155
183
|
}
|
|
156
184
|
/** Marker Crewly writes into the frontmatter of the agent files it generates. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-binding.js","sourceRoot":"","sources":["../../../../../../backend/src/services/session/session-binding.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"session-binding.js","sourceRoot":"","sources":["../../../../../../backend/src/services/session/session-binding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AA4B7B;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAiC;IACvE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;IACnD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YACzC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;gBACxB,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5E,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,KAAiC;IAC/D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YACzC,IAAI,MAAM,CAAC,WAAW;gBAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QACrE,CAAC;IACF,CAAC;IACD,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,IAAuD;IACjF,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,wBAAwB,CACvC,QAA6C,EAC7C,KAAiC;IAEjC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAwC,EAAE,CAAC;IACxD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,wEAAwE;IACxE,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClD,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,SAAS;YACnC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QAC1G,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACF,CAAC;IAED,sEAAsE;IACtE,0EAA0E;IAC1E,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChE,IAAI,SAAS,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACnD,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACrB,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;YAClG,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,4CAA4C;QAC5C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACzC,CAAC;AA4BD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAKzC;IACA,IAAI,KAA6B,CAAC;IAClC,IAAI,OAAiB,CAAC;IACtB,IAAI,OAA4C,CAAC;IACjD,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1B,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5E,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACzE,OAAO,GAAG,EAAE,CAAC;IACd,CAAC;SAAM,CAAC;QACP,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,wBAAwB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACnG,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC5B,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;IACtG,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,CAAC,CAAuB,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3G,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEvC,0EAA0E;IAC1E,4DAA4D;IAC5D,MAAM,SAAS,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1G,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,EAA0B,CAAC,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAChH,MAAM,WAAW,GAAoB,EAAE,CAAC;IACxC,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAClC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,SAAS;QACV,CAAC;QACD,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,OAAO;QACN,QAAQ;QACR,OAAO;QACP,OAAO;QACP,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAClE,WAAW;QACX,cAAc;KACd,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,MAAM,wBAAwB,GAAG,gCAAgC,CAAC;AAElE;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,WAA+B,EAAE,WAAmB;IAC/F,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1G,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,WAAW,KAAK,CAAC,CAAC;IAC9E,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC;YAAE,OAAO,KAAK,CAAC;QACtF,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent-to-agent coordination in Slack rooms (crewly#1340).
|
|
3
|
+
*
|
|
4
|
+
* 2026-10-16, #content-team: Ella, Max and Sam — all on the owner's Mac —
|
|
5
|
+
* posted 20+ top-level Slack messages to each other in 90 minutes ("@Max
|
|
6
|
+
* CREW-718 step 1 of 2 done…", "@Sam Got it, going with your first
|
|
7
|
+
* option…", "@Sam 1.0.217 is live…"). Each one was a new unread for the
|
|
8
|
+
* owner, who does not need that discussion; internal ticket ids leaked into
|
|
9
|
+
* every post; and Ella sent Sam the same conclusion three times.
|
|
10
|
+
*
|
|
11
|
+
* The model is a company group chat: whoever the room asked is the room's
|
|
12
|
+
* one voice; it reaches its helpers privately, and posts one update when
|
|
13
|
+
* their result is in. The pure pieces of that live here:
|
|
14
|
+
* - {@link classifyAgentAddressing}: whom an agent's room post is for —
|
|
15
|
+
* only agents on this machine (stays inside Crewly), agents elsewhere
|
|
16
|
+
* (Slack, in a thread), or anyone else (unchanged);
|
|
17
|
+
* - {@link stripTicketIds}: internal ticket ids out of anything an agent
|
|
18
|
+
* posts to Slack, for real ticket prefixes only;
|
|
19
|
+
* - {@link CoordinationDedupe}: the same agent sending a near-identical
|
|
20
|
+
* message to the same recipients in the same room within 15 minutes.
|
|
21
|
+
*
|
|
22
|
+
* @module services/slack/agent-coordination
|
|
23
|
+
*/
|
|
24
|
+
/** Whom an agent's room post addresses. */
|
|
25
|
+
export type AgentAddressing =
|
|
26
|
+
/** Only agents running on this machine: delivered inside Crewly, never posted to Slack. */
|
|
27
|
+
'local-only'
|
|
28
|
+
/** Only agents, at least one on another machine: Slack is the only way there, in a thread. */
|
|
29
|
+
| 'cross-machine'
|
|
30
|
+
/** No agent @'d, or a person / broadcast / name nobody knows: posted as before. */
|
|
31
|
+
| 'other';
|
|
32
|
+
/** What the room knows about the names an agent post @'s. */
|
|
33
|
+
export interface AgentAddressingInput {
|
|
34
|
+
/** Agents @'d that run on this machine (sessions) */
|
|
35
|
+
localAgents: readonly string[];
|
|
36
|
+
/** Agents @'d that run on another machine (sessions or names) */
|
|
37
|
+
remoteAgents: readonly string[];
|
|
38
|
+
/** @-tokens or native ids that are neither: a person, or a name nobody knows */
|
|
39
|
+
others: readonly string[];
|
|
40
|
+
/** A person addressed by name without an @ ("Steve, …"), or @here/@channel */
|
|
41
|
+
addressesPeople: boolean;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Whom an agent's post addresses. Anything that may be for a person — a
|
|
45
|
+
* person's name, a broadcast, a name that matched nobody — keeps today's
|
|
46
|
+
* behaviour: the owner must never miss a message meant for them.
|
|
47
|
+
*
|
|
48
|
+
* @param input - The resolved names
|
|
49
|
+
* @returns The addressing class
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* classifyAgentAddressing({ localAgents: ['max'], remoteAgents: [], others: [], addressesPeople: false }); // 'local-only'
|
|
54
|
+
* classifyAgentAddressing({ localAgents: ['max'], remoteAgents: ['rex'], others: [], addressesPeople: false }); // 'cross-machine'
|
|
55
|
+
* classifyAgentAddressing({ localAgents: ['max'], remoteAgents: [], others: ['Steve'], addressesPeople: false }); // 'other'
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export declare function classifyAgentAddressing(input: AgentAddressingInput): AgentAddressing;
|
|
59
|
+
/**
|
|
60
|
+
* The real ticket prefixes, normalised: upper case, two to ten letters or
|
|
61
|
+
* digits starting with a letter. One-letter prefixes (the `T` fallback,
|
|
62
|
+
* decisions' `D`) are left out — "T-5" or "D-3" in prose is too often not
|
|
63
|
+
* a ticket.
|
|
64
|
+
*
|
|
65
|
+
* @param prefixes - Prefixes as configured (project ticket counters, `TKT`)
|
|
66
|
+
* @returns Unique prefixes, longest first
|
|
67
|
+
*/
|
|
68
|
+
export declare function normaliseTicketPrefixes(prefixes: readonly string[]): string[];
|
|
69
|
+
/**
|
|
70
|
+
* Take internal ticket ids out of a Slack post. Tickets are the harness's
|
|
71
|
+
* bookkeeping; the owner never sees their ids or mechanics.
|
|
72
|
+
*
|
|
73
|
+
* Only ids with a real prefix are touched, so "UTF-8", "GPT-6" or "ISO-27001"
|
|
74
|
+
* stay. An id that is part of a path, branch or URL ("fix/CREW-12",
|
|
75
|
+
* "/blog/CREW-12") stays too. A parenthetical of ids goes with its brackets,
|
|
76
|
+
* a leading "CREW-718:" with its colon, and a preposition left dangling
|
|
77
|
+
* before punctuation ("for CREW-718.") goes with the id.
|
|
78
|
+
*
|
|
79
|
+
* @param text - The post
|
|
80
|
+
* @param prefixes - Real ticket prefixes
|
|
81
|
+
* @returns The post without ticket ids (the original when nothing would be left)
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```typescript
|
|
85
|
+
* stripTicketIds('@Max CREW-718 step 1 of 2 done', ['CREW']); // '@Max step 1 of 2 done'
|
|
86
|
+
* stripTicketIds('the fix (CREW-718) is live', ['CREW']); // 'the fix is live'
|
|
87
|
+
* stripTicketIds('UTF-8 and GPT-6', ['CREW']); // unchanged
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
export declare function stripTicketIds(text: string, prefixes: readonly string[]): string;
|
|
91
|
+
/**
|
|
92
|
+
* Drops an agent's near-identical repeat to the same recipients in the same
|
|
93
|
+
* room within {@link AGENT_COORDINATION_CONSTANTS.DUPLICATE_WINDOW_MS} — Ella
|
|
94
|
+
* sent Sam one conclusion three times in six minutes (2026-10-16).
|
|
95
|
+
* In memory: a restart forgets, which only lets one repeat through.
|
|
96
|
+
*/
|
|
97
|
+
export declare class CoordinationDedupe {
|
|
98
|
+
private readonly windowMs;
|
|
99
|
+
private readonly threshold;
|
|
100
|
+
private readonly sent;
|
|
101
|
+
/**
|
|
102
|
+
* @param windowMs - How long a message counts as recent
|
|
103
|
+
* @param threshold - Similarity (0..1) at which two messages are one
|
|
104
|
+
*/
|
|
105
|
+
constructor(windowMs?: number, threshold?: number);
|
|
106
|
+
/**
|
|
107
|
+
* Whether this message repeats one the same agent sent the same recipients
|
|
108
|
+
* here recently. A message that is not a repeat is remembered.
|
|
109
|
+
*
|
|
110
|
+
* @param room - Room id
|
|
111
|
+
* @param sender - Sending agent
|
|
112
|
+
* @param recipients - Addressed agents
|
|
113
|
+
* @param text - The message
|
|
114
|
+
* @param now - Current time (ms)
|
|
115
|
+
* @returns True for a repeat (drop it)
|
|
116
|
+
*/
|
|
117
|
+
isRepeat(room: string, sender: string, recipients: readonly string[], text: string, now: number): boolean;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=agent-coordination.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-coordination.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/agent-coordination.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAKH,2CAA2C;AAC3C,MAAM,MAAM,eAAe;AACzB,2FAA2F;AACzF,YAAY;AACd,8FAA8F;GAC5F,eAAe;AACjB,mFAAmF;GACjF,OAAO,CAAC;AAEZ,6DAA6D;AAC7D,MAAM,WAAW,oBAAoB;IACnC,qDAAqD;IACrD,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,iEAAiE;IACjE,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,gFAAgF;IAChF,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,8EAA8E;IAC9E,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,oBAAoB,GAAG,eAAe,CAKpF;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAO7E;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAoBhF;AAQD;;;;;GAKG;AACH,qBAAa,kBAAkB;IAQ3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAR5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkC;IAEvD;;;OAGG;gBAEgB,QAAQ,GAAE,MAAyD,EACnE,SAAS,GAAE,MAA0D;IAGxF;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;CAc1G"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent-to-agent coordination in Slack rooms (crewly#1340).
|
|
3
|
+
*
|
|
4
|
+
* 2026-10-16, #content-team: Ella, Max and Sam — all on the owner's Mac —
|
|
5
|
+
* posted 20+ top-level Slack messages to each other in 90 minutes ("@Max
|
|
6
|
+
* CREW-718 step 1 of 2 done…", "@Sam Got it, going with your first
|
|
7
|
+
* option…", "@Sam 1.0.217 is live…"). Each one was a new unread for the
|
|
8
|
+
* owner, who does not need that discussion; internal ticket ids leaked into
|
|
9
|
+
* every post; and Ella sent Sam the same conclusion three times.
|
|
10
|
+
*
|
|
11
|
+
* The model is a company group chat: whoever the room asked is the room's
|
|
12
|
+
* one voice; it reaches its helpers privately, and posts one update when
|
|
13
|
+
* their result is in. The pure pieces of that live here:
|
|
14
|
+
* - {@link classifyAgentAddressing}: whom an agent's room post is for —
|
|
15
|
+
* only agents on this machine (stays inside Crewly), agents elsewhere
|
|
16
|
+
* (Slack, in a thread), or anyone else (unchanged);
|
|
17
|
+
* - {@link stripTicketIds}: internal ticket ids out of anything an agent
|
|
18
|
+
* posts to Slack, for real ticket prefixes only;
|
|
19
|
+
* - {@link CoordinationDedupe}: the same agent sending a near-identical
|
|
20
|
+
* message to the same recipients in the same room within 15 minutes.
|
|
21
|
+
*
|
|
22
|
+
* @module services/slack/agent-coordination
|
|
23
|
+
*/
|
|
24
|
+
import { questionSimilarity } from '../open-items/open-item-card.js';
|
|
25
|
+
import { AGENT_COORDINATION_CONSTANTS } from '../../constants.js';
|
|
26
|
+
/**
|
|
27
|
+
* Whom an agent's post addresses. Anything that may be for a person — a
|
|
28
|
+
* person's name, a broadcast, a name that matched nobody — keeps today's
|
|
29
|
+
* behaviour: the owner must never miss a message meant for them.
|
|
30
|
+
*
|
|
31
|
+
* @param input - The resolved names
|
|
32
|
+
* @returns The addressing class
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* classifyAgentAddressing({ localAgents: ['max'], remoteAgents: [], others: [], addressesPeople: false }); // 'local-only'
|
|
37
|
+
* classifyAgentAddressing({ localAgents: ['max'], remoteAgents: ['rex'], others: [], addressesPeople: false }); // 'cross-machine'
|
|
38
|
+
* classifyAgentAddressing({ localAgents: ['max'], remoteAgents: [], others: ['Steve'], addressesPeople: false }); // 'other'
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export function classifyAgentAddressing(input) {
|
|
42
|
+
if (input.addressesPeople || input.others.length > 0)
|
|
43
|
+
return 'other';
|
|
44
|
+
if (input.remoteAgents.length > 0)
|
|
45
|
+
return 'cross-machine';
|
|
46
|
+
if (input.localAgents.length > 0)
|
|
47
|
+
return 'local-only';
|
|
48
|
+
return 'other';
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* The real ticket prefixes, normalised: upper case, two to ten letters or
|
|
52
|
+
* digits starting with a letter. One-letter prefixes (the `T` fallback,
|
|
53
|
+
* decisions' `D`) are left out — "T-5" or "D-3" in prose is too often not
|
|
54
|
+
* a ticket.
|
|
55
|
+
*
|
|
56
|
+
* @param prefixes - Prefixes as configured (project ticket counters, `TKT`)
|
|
57
|
+
* @returns Unique prefixes, longest first
|
|
58
|
+
*/
|
|
59
|
+
export function normaliseTicketPrefixes(prefixes) {
|
|
60
|
+
const clean = new Set();
|
|
61
|
+
for (const p of prefixes) {
|
|
62
|
+
const up = (p ?? '').trim().toUpperCase();
|
|
63
|
+
if (/^[A-Z][A-Z0-9]{1,9}$/.test(up))
|
|
64
|
+
clean.add(up);
|
|
65
|
+
}
|
|
66
|
+
return [...clean].sort((a, b) => b.length - a.length || a.localeCompare(b));
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Take internal ticket ids out of a Slack post. Tickets are the harness's
|
|
70
|
+
* bookkeeping; the owner never sees their ids or mechanics.
|
|
71
|
+
*
|
|
72
|
+
* Only ids with a real prefix are touched, so "UTF-8", "GPT-6" or "ISO-27001"
|
|
73
|
+
* stay. An id that is part of a path, branch or URL ("fix/CREW-12",
|
|
74
|
+
* "/blog/CREW-12") stays too. A parenthetical of ids goes with its brackets,
|
|
75
|
+
* a leading "CREW-718:" with its colon, and a preposition left dangling
|
|
76
|
+
* before punctuation ("for CREW-718.") goes with the id.
|
|
77
|
+
*
|
|
78
|
+
* @param text - The post
|
|
79
|
+
* @param prefixes - Real ticket prefixes
|
|
80
|
+
* @returns The post without ticket ids (the original when nothing would be left)
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```typescript
|
|
84
|
+
* stripTicketIds('@Max CREW-718 step 1 of 2 done', ['CREW']); // '@Max step 1 of 2 done'
|
|
85
|
+
* stripTicketIds('the fix (CREW-718) is live', ['CREW']); // 'the fix is live'
|
|
86
|
+
* stripTicketIds('UTF-8 and GPT-6', ['CREW']); // unchanged
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
export function stripTicketIds(text, prefixes) {
|
|
90
|
+
const list = normaliseTicketPrefixes(prefixes);
|
|
91
|
+
if (!text || list.length === 0)
|
|
92
|
+
return text;
|
|
93
|
+
const id = `(?<![\\p{L}\\p{N}_/.#-])(?:${list.join('|')})-\\d+(?![\\p{L}\\p{N}_/-])`;
|
|
94
|
+
if (!new RegExp(id, 'u').test(text))
|
|
95
|
+
return text;
|
|
96
|
+
let out = text
|
|
97
|
+
// "(CREW-718)", "(CREW-718, CREW-719)"
|
|
98
|
+
.replace(new RegExp(`[ \\t]*\\(\\s*${id}(?:\\s*(?:,|/|&|and)\\s*${id})*\\s*\\)`, 'gu'), '')
|
|
99
|
+
// "CREW-718: …", "CREW-718 — …"
|
|
100
|
+
.replace(new RegExp(`${id}[ \\t]*[::—–][ \\t]*`, 'gu'), '')
|
|
101
|
+
// "for CREW-718." / "on CREW-718," — the preposition goes too
|
|
102
|
+
.replace(new RegExp(`[ \\t]+(?:[Ff]or|[Oo]n|[Ii]n|[Uu]nder|[Aa]bout|[Oo]f|[Rr]e)[ \\t]+${id}(?=[ \\t]*(?:[.,;:!?)]|$))`, 'gmu'), '')
|
|
103
|
+
// A bare id, with the space after it ("@Max CREW-718 step" → "@Max step")
|
|
104
|
+
.replace(new RegExp(`${id}[ \\t]?`, 'gu'), '');
|
|
105
|
+
out = out
|
|
106
|
+
.replace(/(\S)[ \t]{2,}(?=\S)/gu, '$1 ')
|
|
107
|
+
.replace(/[ \t]+([.,;:!?)])/gu, '$1')
|
|
108
|
+
.replace(/\([ \t]*\)/gu, '')
|
|
109
|
+
.replace(/[ \t]+$/gmu, '');
|
|
110
|
+
return out.trim().length > 0 ? out : text;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Drops an agent's near-identical repeat to the same recipients in the same
|
|
114
|
+
* room within {@link AGENT_COORDINATION_CONSTANTS.DUPLICATE_WINDOW_MS} — Ella
|
|
115
|
+
* sent Sam one conclusion three times in six minutes (2026-10-16).
|
|
116
|
+
* In memory: a restart forgets, which only lets one repeat through.
|
|
117
|
+
*/
|
|
118
|
+
export class CoordinationDedupe {
|
|
119
|
+
windowMs;
|
|
120
|
+
threshold;
|
|
121
|
+
sent = new Map();
|
|
122
|
+
/**
|
|
123
|
+
* @param windowMs - How long a message counts as recent
|
|
124
|
+
* @param threshold - Similarity (0..1) at which two messages are one
|
|
125
|
+
*/
|
|
126
|
+
constructor(windowMs = AGENT_COORDINATION_CONSTANTS.DUPLICATE_WINDOW_MS, threshold = AGENT_COORDINATION_CONSTANTS.DUPLICATE_SIMILARITY) {
|
|
127
|
+
this.windowMs = windowMs;
|
|
128
|
+
this.threshold = threshold;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Whether this message repeats one the same agent sent the same recipients
|
|
132
|
+
* here recently. A message that is not a repeat is remembered.
|
|
133
|
+
*
|
|
134
|
+
* @param room - Room id
|
|
135
|
+
* @param sender - Sending agent
|
|
136
|
+
* @param recipients - Addressed agents
|
|
137
|
+
* @param text - The message
|
|
138
|
+
* @param now - Current time (ms)
|
|
139
|
+
* @returns True for a repeat (drop it)
|
|
140
|
+
*/
|
|
141
|
+
isRepeat(room, sender, recipients, text, now) {
|
|
142
|
+
const key = `${room}|${sender}|${[...new Set(recipients)].sort().join(',')}`;
|
|
143
|
+
const body = comparable(text);
|
|
144
|
+
const recent = (this.sent.get(key) ?? []).filter((e) => now - e.at <= this.windowMs);
|
|
145
|
+
const repeat = body.length > 0 && recent.some((e) => questionSimilarity(e.text, body) >= this.threshold);
|
|
146
|
+
if (!repeat)
|
|
147
|
+
recent.push({ text: body, at: now });
|
|
148
|
+
if (recent.length > 0)
|
|
149
|
+
this.sent.set(key, recent.slice(-AGENT_COORDINATION_CONSTANTS.DUPLICATE_HISTORY));
|
|
150
|
+
else
|
|
151
|
+
this.sent.delete(key);
|
|
152
|
+
if (this.sent.size > AGENT_COORDINATION_CONSTANTS.DUPLICATE_MAX_KEYS) {
|
|
153
|
+
const oldest = this.sent.keys().next().value;
|
|
154
|
+
if (oldest !== undefined)
|
|
155
|
+
this.sent.delete(oldest);
|
|
156
|
+
}
|
|
157
|
+
return repeat;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* A message as compared for repeats: without @-mentions and Slack ids, so
|
|
162
|
+
* "@Sam X" and "@Sam @Max X" compare on X.
|
|
163
|
+
*
|
|
164
|
+
* @param text - Message
|
|
165
|
+
* @returns Comparable text
|
|
166
|
+
*/
|
|
167
|
+
function comparable(text) {
|
|
168
|
+
return (text ?? '')
|
|
169
|
+
.replace(/<[@#!][^>]*>/g, ' ')
|
|
170
|
+
.replace(/(?<![\w])@[\p{L}\p{N}_.-]+/gu, ' ')
|
|
171
|
+
.replace(/\s+/g, ' ')
|
|
172
|
+
.trim();
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=agent-coordination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-coordination.js","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/agent-coordination.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAuBlE;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAA2B;IACjE,IAAI,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IACrE,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,eAAe,CAAC;IAC1D,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,YAAY,CAAC;IACtD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAA2B;IACjE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,QAA2B;IACtE,MAAM,IAAI,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,MAAM,EAAE,GAAG,8BAA8B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,6BAA6B,CAAC;IACrF,IAAI,CAAC,IAAI,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACjD,IAAI,GAAG,GAAG,IAAI;QACZ,uCAAuC;SACtC,OAAO,CAAC,IAAI,MAAM,CAAC,iBAAiB,EAAE,2BAA2B,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3F,gCAAgC;SAC/B,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,sBAAsB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3D,8DAA8D;SAC7D,OAAO,CAAC,IAAI,MAAM,CAAC,qEAAqE,EAAE,4BAA4B,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QACpI,0EAA0E;SACzE,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACjD,GAAG,GAAG,GAAG;SACN,OAAO,CAAC,uBAAuB,EAAE,KAAK,CAAC;SACvC,OAAO,CAAC,qBAAqB,EAAE,IAAI,CAAC;SACpC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;SAC3B,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC7B,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5C,CAAC;AAQD;;;;;GAKG;AACH,MAAM,OAAO,kBAAkB;IAQV;IACA;IARF,IAAI,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEvD;;;OAGG;IACH,YACmB,WAAmB,4BAA4B,CAAC,mBAAmB,EACnE,YAAoB,4BAA4B,CAAC,oBAAoB;QADrE,aAAQ,GAAR,QAAQ,CAA2D;QACnE,cAAS,GAAT,SAAS,CAA4D;IACrF,CAAC;IAEJ;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,IAAY,EAAE,MAAc,EAAE,UAA6B,EAAE,IAAY,EAAE,GAAW;QAC7F,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7E,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;QACzG,IAAI,CAAC,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAClD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,4BAA4B,CAAC,iBAAiB,CAAC,CAAC,CAAC;;YACpG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC,kBAAkB,EAAE,CAAC;YACrE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YAC7C,IAAI,MAAM,KAAK,SAAS;gBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED;;;;;;GAMG;AACH,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;SAChB,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC;SAC7B,OAAO,CAAC,8BAA8B,EAAE,GAAG,CAAC;SAC5C,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack-initializer.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/slack-initializer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"slack-initializer.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/slack-initializer.ts"],"names":[],"mappings":"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"}
|
|
@@ -897,6 +897,13 @@ export async function startSlackTeamChannels() {
|
|
|
897
897
|
typing,
|
|
898
898
|
autoWorking,
|
|
899
899
|
isLocalAgent: (agentSession) => getSlackService().isLocalAgent?.(agentSession) ?? false,
|
|
900
|
+
// Ticket ids never reach Slack (crewly#1340): the real prefixes in use.
|
|
901
|
+
ticketPrefixes: async () => {
|
|
902
|
+
const { listTicketPrefixes } = await import('../project-tickets/ticket-prefixes.js');
|
|
903
|
+
return listTicketPrefixes({
|
|
904
|
+
listProjectPaths: async () => (await StorageService.getInstance().getProjects()).map((p) => p.path).filter((p) => !!p),
|
|
905
|
+
});
|
|
906
|
+
},
|
|
900
907
|
isAgentAwake: (agentSession) => sessionBackendExists(agentSession),
|
|
901
908
|
getOwnerUserId: () => getSlackCloudConfigService()?.getConfig()?.workspace.installedBy || null,
|
|
902
909
|
resolveInstanceId: async () => getSlackInstanceRegistryService()?.resolveInstanceId() ?? null,
|