crewly 1.9.0 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/config/roles/orchestrator/prompt.md +53 -2
  2. package/config/skills/agent/core/get-sops/SKILL.md +6 -2
  3. package/config/skills/agent/core/get-sops/execute.sh +26 -1
  4. package/config/skills/agent/core/get-team-norms/SKILL.md +69 -0
  5. package/config/skills/agent/core/list-my-crons/SKILL.md +67 -0
  6. package/config/skills/agent/core/list-my-crons/execute.sh +77 -0
  7. package/config/skills/agent/core/schedule-followup/SKILL.md +13 -0
  8. package/config/skills/agent/core/update-sop/SKILL.md +73 -0
  9. package/config/skills/agent/core/update-sop/execute.sh +115 -0
  10. package/config/skills/agent/core/update-team-norm/SKILL.md +67 -0
  11. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts +2 -0
  12. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -1
  13. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +50 -1
  14. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -1
  15. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts +2 -0
  16. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts.map +1 -1
  17. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js +6 -2
  18. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js.map +1 -1
  19. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  20. package/dist/backend/backend/src/controllers/slack/slack.controller.js +10 -0
  21. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  22. package/dist/backend/backend/src/controllers/system/system.controller.d.ts.map +1 -1
  23. package/dist/backend/backend/src/controllers/system/system.controller.js +2 -1
  24. package/dist/backend/backend/src/controllers/system/system.controller.js.map +1 -1
  25. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +29 -5
  26. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  27. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +106 -9
  28. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  29. package/dist/backend/backend/src/controllers/team/team.controller.d.ts +17 -0
  30. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  31. package/dist/backend/backend/src/controllers/team/team.controller.js +32 -0
  32. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  33. package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts +45 -0
  34. package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts.map +1 -1
  35. package/dist/backend/backend/src/controllers/wiki/wiki.controller.js +364 -46
  36. package/dist/backend/backend/src/controllers/wiki/wiki.controller.js.map +1 -1
  37. package/dist/backend/backend/src/controllers/wiki/wiki.routes.d.ts.map +1 -1
  38. package/dist/backend/backend/src/controllers/wiki/wiki.routes.js +9 -1
  39. package/dist/backend/backend/src/controllers/wiki/wiki.routes.js.map +1 -1
  40. package/dist/backend/backend/src/index.d.ts.map +1 -1
  41. package/dist/backend/backend/src/index.js +80 -73
  42. package/dist/backend/backend/src/index.js.map +1 -1
  43. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  44. package/dist/backend/backend/src/routes/api.routes.js +12 -6
  45. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  46. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +13 -4
  47. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  48. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +47 -11
  49. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  50. package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.d.ts +28 -0
  51. package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.d.ts.map +1 -1
  52. package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.js +49 -0
  53. package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.js.map +1 -1
  54. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +60 -2
  55. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  56. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +93 -3
  57. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  58. package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.d.ts +25 -0
  59. package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.d.ts.map +1 -1
  60. package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.js +33 -0
  61. package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.js.map +1 -1
  62. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts +28 -0
  63. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -1
  64. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js +48 -0
  65. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -1
  66. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +21 -0
  67. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
  68. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +30 -0
  69. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
  70. package/dist/backend/backend/src/services/chat-v2/types.d.ts +14 -0
  71. package/dist/backend/backend/src/services/chat-v2/types.d.ts.map +1 -1
  72. package/dist/backend/backend/src/services/chat-v2/types.js.map +1 -1
  73. package/dist/backend/backend/src/services/core/retry.util.d.ts +67 -0
  74. package/dist/backend/backend/src/services/core/retry.util.d.ts.map +1 -0
  75. package/dist/backend/backend/src/services/core/retry.util.js +62 -0
  76. package/dist/backend/backend/src/services/core/retry.util.js.map +1 -0
  77. package/dist/backend/backend/src/services/index.d.ts +0 -1
  78. package/dist/backend/backend/src/services/index.d.ts.map +1 -1
  79. package/dist/backend/backend/src/services/index.js +0 -1
  80. package/dist/backend/backend/src/services/index.js.map +1 -1
  81. package/dist/backend/backend/src/services/intent-task/intent-task-follow-up.service.d.ts +26 -108
  82. package/dist/backend/backend/src/services/intent-task/intent-task-follow-up.service.d.ts.map +1 -1
  83. package/dist/backend/backend/src/services/intent-task/intent-task-follow-up.service.js +26 -214
  84. package/dist/backend/backend/src/services/intent-task/intent-task-follow-up.service.js.map +1 -1
  85. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +11 -0
  86. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  87. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +69 -12
  88. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  89. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +10 -0
  90. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  91. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +21 -0
  92. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  93. package/dist/backend/backend/src/services/slack/slack.service.d.ts +12 -0
  94. package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
  95. package/dist/backend/backend/src/services/slack/slack.service.js +53 -1
  96. package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
  97. package/dist/backend/backend/src/services/sop/sop.service.d.ts +10 -0
  98. package/dist/backend/backend/src/services/sop/sop.service.d.ts.map +1 -1
  99. package/dist/backend/backend/src/services/sop/sop.service.js +71 -10
  100. package/dist/backend/backend/src/services/sop/sop.service.js.map +1 -1
  101. package/dist/backend/backend/src/services/wiki/sop-catalog.service.d.ts +83 -0
  102. package/dist/backend/backend/src/services/wiki/sop-catalog.service.d.ts.map +1 -0
  103. package/dist/backend/backend/src/services/wiki/sop-catalog.service.js +185 -0
  104. package/dist/backend/backend/src/services/wiki/sop-catalog.service.js.map +1 -0
  105. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.d.ts.map +1 -1
  106. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js +12 -0
  107. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js.map +1 -1
  108. package/dist/backend/backend/src/services/wiki/wiki-overlay.resolver.d.ts +43 -0
  109. package/dist/backend/backend/src/services/wiki/wiki-overlay.resolver.d.ts.map +1 -0
  110. package/dist/backend/backend/src/services/wiki/wiki-overlay.resolver.js +67 -0
  111. package/dist/backend/backend/src/services/wiki/wiki-overlay.resolver.js.map +1 -0
  112. package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts +79 -19
  113. package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -1
  114. package/dist/backend/backend/src/services/wiki/wiki-search.service.js +275 -106
  115. package/dist/backend/backend/src/services/wiki/wiki-search.service.js.map +1 -1
  116. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts.map +1 -1
  117. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js +13 -0
  118. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js.map +1 -1
  119. package/dist/backend/backend/src/services/workflow/cron-task.service.d.ts +13 -0
  120. package/dist/backend/backend/src/services/workflow/cron-task.service.d.ts.map +1 -1
  121. package/dist/backend/backend/src/services/workflow/cron-task.service.js +77 -8
  122. package/dist/backend/backend/src/services/workflow/cron-task.service.js.map +1 -1
  123. package/dist/backend/backend/src/types/sop.types.d.ts +7 -0
  124. package/dist/backend/backend/src/types/sop.types.d.ts.map +1 -1
  125. package/dist/backend/backend/src/types/sop.types.js.map +1 -1
  126. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +7 -0
  127. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  128. package/dist/backend/backend/src/types/v2/work-item.types.js +1 -1
  129. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  130. package/dist/cli/backend/src/types/sop.types.d.ts +7 -0
  131. package/dist/cli/backend/src/types/sop.types.d.ts.map +1 -1
  132. package/dist/cli/backend/src/types/sop.types.js.map +1 -1
  133. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +7 -0
  134. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  135. package/dist/cli/backend/src/types/v2/work-item.types.js +1 -1
  136. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  137. package/frontend/dist/assets/index-4099a91c.js +4961 -0
  138. package/frontend/dist/assets/index-44266b5d.css +42 -0
  139. package/frontend/dist/index.html +2 -2
  140. package/package.json +1 -1
  141. package/frontend/dist/assets/index-068bb4f6.css +0 -42
  142. package/frontend/dist/assets/index-c24ceb15.js +0 -4960
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Generic retry-with-backoff helper.
3
+ *
4
+ * Crewly services routinely return a success-flagged result object
5
+ * (`{ success: boolean, error?: string, ... }`) rather than throwing. This
6
+ * helper retries such an operation until it reports success or the attempt
7
+ * budget is exhausted, applying a linear backoff between tries.
8
+ *
9
+ * Extracted so retry policy is unit-testable in isolation (the original
10
+ * caller — the orchestrator auto-start in the server bootstrap, #686 — cannot
11
+ * be unit-tested without standing up the entire CrewlyServer).
12
+ *
13
+ * @module services/core/retry.util
14
+ */
15
+ /** Default real-time sleep. */
16
+ function defaultSleep(ms) {
17
+ return new Promise(resolve => setTimeout(resolve, ms));
18
+ }
19
+ /**
20
+ * Run `operation` up to `maxAttempts` times until `isSuccess` returns true,
21
+ * waiting `backoffMs * attempt` between tries (linear backoff).
22
+ *
23
+ * Always returns the LAST result — successful or not — so the caller can
24
+ * inspect it (e.g. read `result.error`). The operation receives the 1-based
25
+ * attempt number.
26
+ *
27
+ * @param operation - Async operation to run; receives the 1-based attempt number
28
+ * @param options - Retry policy {@link RetryWithBackoffOptions}
29
+ * @returns The last result produced by `operation`
30
+ * @throws RangeError if `maxAttempts` < 1
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * const result = await retryWithBackoff(
35
+ * () => service.createAgentSession({ ... }),
36
+ * { maxAttempts: 5, backoffMs: 3000, isSuccess: r => r.success,
37
+ * onRetry: ({ attempt, retryInMs }) => logger.warn('retrying', { attempt, retryInMs }) },
38
+ * );
39
+ * if (!result.success) logger.error('gave up', { error: result.error });
40
+ * ```
41
+ */
42
+ export async function retryWithBackoff(operation, options) {
43
+ const { maxAttempts, backoffMs, isSuccess, onRetry } = options;
44
+ if (maxAttempts < 1) {
45
+ throw new RangeError(`maxAttempts must be >= 1, got ${maxAttempts}`);
46
+ }
47
+ const sleep = options.sleep ?? defaultSleep;
48
+ let result;
49
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
50
+ result = await operation(attempt);
51
+ if (isSuccess(result)) {
52
+ return result;
53
+ }
54
+ if (attempt < maxAttempts) {
55
+ const retryInMs = backoffMs * attempt;
56
+ onRetry?.({ attempt, maxAttempts, retryInMs, result });
57
+ await sleep(retryInMs);
58
+ }
59
+ }
60
+ return result;
61
+ }
62
+ //# sourceMappingURL=retry.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.util.js","sourceRoot":"","sources":["../../../../../../backend/src/services/core/retry.util.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AA0BH,+BAA+B;AAC/B,SAAS,YAAY,CAAC,EAAU;IAC/B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACrC,SAA0C,EAC1C,OAAmC;IAEnC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC/D,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,UAAU,CAAC,iCAAiC,WAAW,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,YAAY,CAAC;IAE5C,IAAI,MAAU,CAAC;IACf,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;QACzD,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC;QACf,CAAC;QACD,IAAI,OAAO,GAAG,WAAW,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;YACtC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;YACvD,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC"}
@@ -20,7 +20,6 @@ export { TeamActivityWebSocketService } from './monitoring/team-activity-websock
20
20
  export { TeamsJsonWatcherService } from './monitoring/teams-json-watcher.service.js';
21
21
  export { SchedulerService } from './workflow/scheduler.service.js';
22
22
  export { MessageSchedulerService } from './workflow/message-scheduler.service.js';
23
- export { UnifiedSchedulerService } from './workflow/unified-scheduler.service.js';
24
23
  export { ContextLoaderService } from './ai/context-loader.service.js';
25
24
  export { PromptTemplateService } from './ai/prompt-template.service.js';
26
25
  export { PromptBuilderService } from './ai/prompt-builder.service.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../backend/src/services/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../backend/src/services/index.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,6 @@ export { TeamsJsonWatcherService } from './monitoring/teams-json-watcher.service
25
25
  // WorkflowService removed - project orchestration now handled via scheduled messages
26
26
  export { SchedulerService } from './workflow/scheduler.service.js';
27
27
  export { MessageSchedulerService } from './workflow/message-scheduler.service.js';
28
- export { UnifiedSchedulerService } from './workflow/unified-scheduler.service.js';
29
28
  // AI Services
30
29
  export { ContextLoaderService } from './ai/context-loader.service.js';
31
30
  export { PromptTemplateService } from './ai/prompt-template.service.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../backend/src/services/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../backend/src/services/index.ts"],"names":[],"mappings":"AAAA,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAsB,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAmB,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AAExF,qBAAqB;AACrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE,sBAAsB;AACtB,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAC;AAC/F,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAC;AAC/F,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AAErF,oBAAoB;AACpB,qFAAqF;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAElF,cAAc;AACd,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEtE,gBAAgB;AAChB,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,sBAAsB;AACtB,OAAO,EAAE,aAAa,EAAkB,MAAM,uBAAuB,CAAC;AAEtE,iBAAiB;AACjB,OAAO,EACL,YAAY,EAEZ,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,6BAA6B,EAC7B,oBAAoB,EACpB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAE1B,gBAAgB;AAChB,OAAO,EACL,WAAW,EAEX,cAAc,EACd,gBAAgB,EAChB,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,oBAAoB;AACpB,OAAO,EACL,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,4BAA4B,EAC5B,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAE7B,iBAAiB;AACjB,OAAO,EACL,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,0BAA0B,EAC1B,4BAA4B,EAC5B,2BAA2B,EAC3B,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAE1B,wBAAwB;AACxB,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,4BAA4B,EAC5B,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,2BAA2B,EAC3B,wBAAwB,EACxB,2BAA2B,EAC3B,6BAA6B,EAC7B,yBAAyB,EACzB,4BAA4B,EAC5B,8BAA8B,GAC/B,MAAM,yBAAyB,CAAC;AAEjC,sBAAsB;AACtB,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAc/B,sBAAsB;AACtB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,GAMrB,MAAM,iBAAiB,CAAC;AAEzB,sBAAsB;AACtB,OAAO,EACL,eAAe,EACf,oBAAoB,GAErB,MAAM,iBAAiB,CAAC"}
@@ -1,138 +1,56 @@
1
1
  /**
2
- * Intent Task Follow-Up Service
2
+ * Intent Task Follow-Up Service — RETIRED to a no-op (2026-06-02).
3
3
  *
4
- * Automates follow-up scheduling for unresolved intent tasks.
5
- * Periodically checks on tasks that haven't been completed and notifies
6
- * the orchestrator to continue processing them.
4
+ * This service used to schedule periodic follow-up reminders for unresolved
5
+ * intent tasks via `UnifiedSchedulerService`. That mechanism was dead-on-arrival:
6
+ * the UnifiedScheduler poll loop was never started and nothing listened for its
7
+ * `triggered` event, so a scheduled follow-up never actually fired. When
8
+ * UnifiedSchedulerService was retired (in favour of the v3 TriggerEngine), this
9
+ * service was reduced to a no-op shell that preserves its public API so the
10
+ * (lazy) call sites in {@link IntentTaskService} keep compiling without change.
7
11
  *
8
- * Features:
9
- * - Schedule follow-ups for unresolved tasks via UnifiedSchedulerService
10
- * - Auto-cancel follow-ups when tasks reach terminal status
11
- * - Session-less recovery: restore follow-ups on service restart
12
- * - Emit 'follow-up-needed' events for orchestrator consumption
12
+ * Stuck/unresolved work is now handled by the WorkItem + reconciler autonomy
13
+ * mesh (task pool → dispatch / auto-claim / reconciler self-heal), so there is
14
+ * no behaviour to restore here. If task-level follow-up reminders are wanted
15
+ * again, build them on the TriggerEngine (time/interval trigger → WorkItem),
16
+ * not on a separate scheduler.
13
17
  *
14
18
  * @module services/intent-task/intent-task-follow-up.service
15
19
  */
16
20
  import { EventEmitter } from 'events';
17
- import { IntentTaskService } from './intent-task.service.js';
18
- import { UnifiedSchedulerService } from '../workflow/unified-scheduler.service.js';
19
21
  import type { IntentTaskStatus } from '../../types/intent-task.types.js';
20
22
  /**
21
- * Payload emitted when a follow-up is triggered for an unresolved task.
23
+ * Payload that used to be emitted when a follow-up triggered. Retained for
24
+ * backwards-compatible imports; no longer emitted.
22
25
  */
23
26
  export interface FollowUpNeededPayload {
24
- /** The task ID that needs attention */
25
27
  taskId: string;
26
- /** The original intent description */
27
28
  intent: string;
28
- /** Current task status */
29
29
  status: IntentTaskStatus;
30
- /** Agent sessions assigned to this task */
31
30
  assignedSessions: string[];
32
31
  }
33
32
  /**
34
- * Service that schedules and manages automatic follow-ups for unresolved
35
- * intent tasks. Works with UnifiedSchedulerService for timing and
36
- * IntentTaskService for task state.
37
- *
38
- * Emits 'follow-up-needed' events when a follow-up triggers and the
39
- * associated task is still unresolved, allowing the orchestrator to
40
- * take action.
41
- *
42
- * @example
43
- * ```typescript
44
- * const service = IntentTaskFollowUpService.getInstance();
45
- * service.on('follow-up-needed', (payload) => {
46
- * console.log(`Task ${payload.taskId} still unresolved`);
47
- * });
48
- * service.scheduleFollowUp('task-123');
49
- * ```
33
+ * No-op shell of the former follow-up scheduler. Public methods are preserved
34
+ * so existing callers compile unchanged; none of them schedule anything.
50
35
  */
51
36
  export declare class IntentTaskFollowUpService extends EventEmitter {
52
37
  private static instance;
53
- private readonly intentTaskService;
54
- private readonly schedulerService;
55
- /**
56
- * Create a new IntentTaskFollowUpService.
57
- *
58
- * @param intentTaskService - Override for IntentTaskService (used in tests)
59
- * @param schedulerService - Override for UnifiedSchedulerService (used in tests)
60
- */
61
- constructor(intentTaskService?: IntentTaskService, schedulerService?: UnifiedSchedulerService);
62
- /**
63
- * Get the singleton instance.
64
- *
65
- * @returns Shared IntentTaskFollowUpService instance
66
- */
38
+ /** Get the singleton instance. */
67
39
  static getInstance(): IntentTaskFollowUpService;
68
- /**
69
- * Reset the singleton (for testing).
70
- */
40
+ /** Reset the singleton (for testing). */
71
41
  static resetInstance(): void;
72
42
  /**
73
- * Schedule a follow-up for an unresolved task.
74
- *
75
- * Creates an interval schedule in UnifiedSchedulerService that will
76
- * trigger periodically. The schedule ID is stored on the task for
77
- * later cancellation.
78
- *
79
- * @param taskId - The intent task ID to follow up on
80
- * @param delayMinutes - Minutes between follow-up checks (default: 15)
81
- * @returns The schedule ID, or null if the task is not found or already terminal
82
- * @throws Error if the task does not exist
83
- */
84
- scheduleFollowUp(taskId: string, delayMinutes?: number): string | null;
85
- /**
86
- * Handle a follow-up trigger from the scheduler.
87
- *
88
- * Checks the associated task's status:
89
- * - If terminal (completed/failed/cancelled): cancels the schedule
90
- * - If still unresolved: emits 'follow-up-needed' event
91
- *
92
- * @param scheduleId - The schedule ID that was triggered
93
- */
94
- onFollowUpTriggered(scheduleId: string): void;
95
- /**
96
- * Restore follow-ups after a service restart.
97
- *
98
- * Scans all unresolved tasks and ensures each has an active follow-up
99
- * schedule. For tasks with a scheduleId, verifies the schedule is still
100
- * active in UnifiedSchedulerService. For unresolved tasks without a
101
- * scheduleId, creates a new follow-up.
102
- *
103
- * @param delayMinutes - Minutes between follow-up checks (default: 15)
104
- * @returns Number of follow-ups restored or created
105
- */
106
- restoreFollowUps(delayMinutes?: number): number;
107
- /**
108
- * Cancel the follow-up schedule for a task.
109
- *
110
- * Removes the schedule from UnifiedSchedulerService and clears the
111
- * scheduleId on the task.
112
- *
113
- * @param taskId - The intent task ID
114
- * @returns True if a follow-up was cancelled, false if none existed
115
- */
116
- cancelFollowUp(taskId: string): boolean;
117
- /**
118
- * Find a task by its associated schedule ID.
119
- *
120
- * @param scheduleId - The schedule ID to search for
121
- * @returns The matching task, or null if not found
122
- */
123
- private findTaskByScheduleId;
124
- /**
125
- * Cancel a follow-up by schedule ID and clear the task association.
43
+ * No-op. Previously created an interval schedule in UnifiedSchedulerService
44
+ * (which never fired). Returns null — no schedule is created.
126
45
  *
127
- * @param taskId - The intent task ID
128
- * @param scheduleId - The schedule ID to delete
46
+ * @returns Always null
129
47
  */
130
- private cancelFollowUpByScheduleId;
48
+ scheduleFollowUp(_taskId: string, _delayMinutes?: number): string | null;
131
49
  /**
132
- * Get all unresolved tasks (status is not terminal).
50
+ * No-op. Previously cancelled a task's follow-up schedule.
133
51
  *
134
- * @returns Array of unresolved tasks
52
+ * @returns Always false (nothing to cancel)
135
53
  */
136
- private getUnresolvedTasks;
54
+ cancelFollowUp(_taskId: string): boolean;
137
55
  }
138
56
  //# sourceMappingURL=intent-task-follow-up.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"intent-task-follow-up.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/intent-task/intent-task-follow-up.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,KAAK,EAAc,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAuBrF;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,MAAM,EAAE,gBAAgB,CAAC;IACzB,2CAA2C;IAC3C,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAMD;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,yBAA0B,SAAQ,YAAY;IACzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA0C;IAEjE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IACtD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA0B;IAE3D;;;;;OAKG;gBAED,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,gBAAgB,CAAC,EAAE,uBAAuB;IAO5C;;;;OAIG;IACH,MAAM,CAAC,WAAW,IAAI,yBAAyB;IAO/C;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAQ5B;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAqCtE;;;;;;;;OAQG;IACH,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IA2B7C;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM;IAyB/C;;;;;;;;OAQG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAiBvC;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAK5B;;;;;OAKG;IACH,OAAO,CAAC,0BAA0B;IAKlC;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;CAK3B"}
1
+ {"version":3,"file":"intent-task-follow-up.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/intent-task/intent-task-follow-up.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEzE;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,gBAAgB,CAAC;IACzB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,YAAY;IACzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA0C;IAEjE,kCAAkC;IAClC,MAAM,CAAC,WAAW,IAAI,yBAAyB;IAO/C,yCAAyC;IACzC,MAAM,CAAC,aAAa,IAAI,IAAI;IAI5B;;;;;OAKG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIxE;;;;OAIG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;CAGzC"}
@@ -1,244 +1,56 @@
1
1
  /**
2
- * Intent Task Follow-Up Service
2
+ * Intent Task Follow-Up Service — RETIRED to a no-op (2026-06-02).
3
3
  *
4
- * Automates follow-up scheduling for unresolved intent tasks.
5
- * Periodically checks on tasks that haven't been completed and notifies
6
- * the orchestrator to continue processing them.
4
+ * This service used to schedule periodic follow-up reminders for unresolved
5
+ * intent tasks via `UnifiedSchedulerService`. That mechanism was dead-on-arrival:
6
+ * the UnifiedScheduler poll loop was never started and nothing listened for its
7
+ * `triggered` event, so a scheduled follow-up never actually fired. When
8
+ * UnifiedSchedulerService was retired (in favour of the v3 TriggerEngine), this
9
+ * service was reduced to a no-op shell that preserves its public API so the
10
+ * (lazy) call sites in {@link IntentTaskService} keep compiling without change.
7
11
  *
8
- * Features:
9
- * - Schedule follow-ups for unresolved tasks via UnifiedSchedulerService
10
- * - Auto-cancel follow-ups when tasks reach terminal status
11
- * - Session-less recovery: restore follow-ups on service restart
12
- * - Emit 'follow-up-needed' events for orchestrator consumption
12
+ * Stuck/unresolved work is now handled by the WorkItem + reconciler autonomy
13
+ * mesh (task pool → dispatch / auto-claim / reconciler self-heal), so there is
14
+ * no behaviour to restore here. If task-level follow-up reminders are wanted
15
+ * again, build them on the TriggerEngine (time/interval trigger → WorkItem),
16
+ * not on a separate scheduler.
13
17
  *
14
18
  * @module services/intent-task/intent-task-follow-up.service
15
19
  */
16
20
  import { EventEmitter } from 'events';
17
- import { IntentTaskService } from './intent-task.service.js';
18
- import { UnifiedSchedulerService } from '../workflow/unified-scheduler.service.js';
19
- // =============================================================================
20
- // Constants
21
- // =============================================================================
22
- /** Default follow-up delay in minutes */
23
- const DEFAULT_FOLLOW_UP_DELAY_MINUTES = 15;
24
- /** Target session for follow-up schedule messages (orchestrator) */
25
- const FOLLOW_UP_TARGET = 'crewly-orc';
26
- /** Terminal statuses that should cancel follow-ups */
27
- const TERMINAL_STATUSES = new Set([
28
- 'completed',
29
- 'failed',
30
- 'cancelled',
31
- ]);
32
- // =============================================================================
33
- // Service
34
- // =============================================================================
35
21
  /**
36
- * Service that schedules and manages automatic follow-ups for unresolved
37
- * intent tasks. Works with UnifiedSchedulerService for timing and
38
- * IntentTaskService for task state.
39
- *
40
- * Emits 'follow-up-needed' events when a follow-up triggers and the
41
- * associated task is still unresolved, allowing the orchestrator to
42
- * take action.
43
- *
44
- * @example
45
- * ```typescript
46
- * const service = IntentTaskFollowUpService.getInstance();
47
- * service.on('follow-up-needed', (payload) => {
48
- * console.log(`Task ${payload.taskId} still unresolved`);
49
- * });
50
- * service.scheduleFollowUp('task-123');
51
- * ```
22
+ * No-op shell of the former follow-up scheduler. Public methods are preserved
23
+ * so existing callers compile unchanged; none of them schedule anything.
52
24
  */
53
25
  export class IntentTaskFollowUpService extends EventEmitter {
54
26
  static instance = null;
55
- intentTaskService;
56
- schedulerService;
57
- /**
58
- * Create a new IntentTaskFollowUpService.
59
- *
60
- * @param intentTaskService - Override for IntentTaskService (used in tests)
61
- * @param schedulerService - Override for UnifiedSchedulerService (used in tests)
62
- */
63
- constructor(intentTaskService, schedulerService) {
64
- super();
65
- this.intentTaskService = intentTaskService ?? IntentTaskService.getInstance();
66
- this.schedulerService = schedulerService ?? UnifiedSchedulerService.getInstance();
67
- }
68
- /**
69
- * Get the singleton instance.
70
- *
71
- * @returns Shared IntentTaskFollowUpService instance
72
- */
27
+ /** Get the singleton instance. */
73
28
  static getInstance() {
74
29
  if (!IntentTaskFollowUpService.instance) {
75
30
  IntentTaskFollowUpService.instance = new IntentTaskFollowUpService();
76
31
  }
77
32
  return IntentTaskFollowUpService.instance;
78
33
  }
79
- /**
80
- * Reset the singleton (for testing).
81
- */
34
+ /** Reset the singleton (for testing). */
82
35
  static resetInstance() {
83
36
  IntentTaskFollowUpService.instance = null;
84
37
  }
85
- // ===========================================================================
86
- // Public API
87
- // ===========================================================================
88
- /**
89
- * Schedule a follow-up for an unresolved task.
90
- *
91
- * Creates an interval schedule in UnifiedSchedulerService that will
92
- * trigger periodically. The schedule ID is stored on the task for
93
- * later cancellation.
94
- *
95
- * @param taskId - The intent task ID to follow up on
96
- * @param delayMinutes - Minutes between follow-up checks (default: 15)
97
- * @returns The schedule ID, or null if the task is not found or already terminal
98
- * @throws Error if the task does not exist
99
- */
100
- scheduleFollowUp(taskId, delayMinutes) {
101
- const task = this.intentTaskService.getTask(taskId);
102
- if (!task) {
103
- throw new Error(`Task not found: ${taskId}`);
104
- }
105
- // Don't schedule for already-terminal tasks
106
- if (TERMINAL_STATUSES.has(task.status)) {
107
- return null;
108
- }
109
- // If task already has a follow-up schedule, don't create a duplicate
110
- if (task.scheduleId) {
111
- const existingSchedule = this.schedulerService.get(task.scheduleId);
112
- if (existingSchedule && existingSchedule.status === 'active') {
113
- return task.scheduleId;
114
- }
115
- }
116
- const interval = delayMinutes ?? DEFAULT_FOLLOW_UP_DELAY_MINUTES;
117
- const schedule = this.schedulerService.create({
118
- target: FOLLOW_UP_TARGET,
119
- type: 'interval',
120
- intervalMinutes: interval,
121
- message: `[follow-up] Task ${taskId} is still unresolved. Intent: "${task.intent}". Status: ${task.status}. Please check on it.`,
122
- enabled: true,
123
- autoStart: false,
124
- maxConsecutiveTriggers: 10,
125
- });
126
- // Associate the schedule with the task
127
- this.intentTaskService.setSchedule(taskId, schedule.id);
128
- return schedule.id;
129
- }
130
- /**
131
- * Handle a follow-up trigger from the scheduler.
132
- *
133
- * Checks the associated task's status:
134
- * - If terminal (completed/failed/cancelled): cancels the schedule
135
- * - If still unresolved: emits 'follow-up-needed' event
136
- *
137
- * @param scheduleId - The schedule ID that was triggered
138
- */
139
- onFollowUpTriggered(scheduleId) {
140
- // Find the task associated with this schedule
141
- const task = this.findTaskByScheduleId(scheduleId);
142
- if (!task) {
143
- // No task found for this schedule — clean it up
144
- this.schedulerService.delete(scheduleId);
145
- return;
146
- }
147
- if (TERMINAL_STATUSES.has(task.status)) {
148
- // Task is done — cancel the follow-up schedule
149
- this.cancelFollowUpByScheduleId(task.id, scheduleId);
150
- return;
151
- }
152
- // Task is still unresolved — emit event for orchestrator
153
- const payload = {
154
- taskId: task.id,
155
- intent: task.intent,
156
- status: task.status,
157
- assignedSessions: [...task.assignedSessions],
158
- };
159
- this.emit('follow-up-needed', payload);
160
- }
161
- /**
162
- * Restore follow-ups after a service restart.
163
- *
164
- * Scans all unresolved tasks and ensures each has an active follow-up
165
- * schedule. For tasks with a scheduleId, verifies the schedule is still
166
- * active in UnifiedSchedulerService. For unresolved tasks without a
167
- * scheduleId, creates a new follow-up.
168
- *
169
- * @param delayMinutes - Minutes between follow-up checks (default: 15)
170
- * @returns Number of follow-ups restored or created
171
- */
172
- restoreFollowUps(delayMinutes) {
173
- const unresolvedTasks = this.getUnresolvedTasks();
174
- let restoredCount = 0;
175
- for (const task of unresolvedTasks) {
176
- if (task.scheduleId) {
177
- // Task has a schedule — check if it's still active
178
- const schedule = this.schedulerService.get(task.scheduleId);
179
- if (schedule && schedule.status === 'active') {
180
- // Schedule is still active, nothing to do
181
- continue;
182
- }
183
- // Schedule is missing or not active — recreate
184
- }
185
- // Create (or recreate) a follow-up schedule
186
- const scheduleId = this.scheduleFollowUp(task.id, delayMinutes);
187
- if (scheduleId) {
188
- restoredCount++;
189
- }
190
- }
191
- return restoredCount;
192
- }
193
- /**
194
- * Cancel the follow-up schedule for a task.
195
- *
196
- * Removes the schedule from UnifiedSchedulerService and clears the
197
- * scheduleId on the task.
198
- *
199
- * @param taskId - The intent task ID
200
- * @returns True if a follow-up was cancelled, false if none existed
201
- */
202
- cancelFollowUp(taskId) {
203
- const task = this.intentTaskService.getTask(taskId);
204
- if (!task || !task.scheduleId) {
205
- return false;
206
- }
207
- const scheduleId = task.scheduleId;
208
- this.schedulerService.delete(scheduleId);
209
- this.intentTaskService.updateTask(taskId, { scheduleId: undefined });
210
- return true;
211
- }
212
- // ===========================================================================
213
- // Private Helpers
214
- // ===========================================================================
215
- /**
216
- * Find a task by its associated schedule ID.
217
- *
218
- * @param scheduleId - The schedule ID to search for
219
- * @returns The matching task, or null if not found
220
- */
221
- findTaskByScheduleId(scheduleId) {
222
- const allTasks = this.intentTaskService.listTasks();
223
- return allTasks.find((t) => t.scheduleId === scheduleId) ?? null;
224
- }
225
38
  /**
226
- * Cancel a follow-up by schedule ID and clear the task association.
39
+ * No-op. Previously created an interval schedule in UnifiedSchedulerService
40
+ * (which never fired). Returns null — no schedule is created.
227
41
  *
228
- * @param taskId - The intent task ID
229
- * @param scheduleId - The schedule ID to delete
42
+ * @returns Always null
230
43
  */
231
- cancelFollowUpByScheduleId(taskId, scheduleId) {
232
- this.schedulerService.delete(scheduleId);
233
- this.intentTaskService.updateTask(taskId, { scheduleId: undefined });
44
+ scheduleFollowUp(_taskId, _delayMinutes) {
45
+ return null;
234
46
  }
235
47
  /**
236
- * Get all unresolved tasks (status is not terminal).
48
+ * No-op. Previously cancelled a task's follow-up schedule.
237
49
  *
238
- * @returns Array of unresolved tasks
50
+ * @returns Always false (nothing to cancel)
239
51
  */
240
- getUnresolvedTasks() {
241
- return this.intentTaskService.listTasks().filter((t) => !TERMINAL_STATUSES.has(t.status));
52
+ cancelFollowUp(_taskId) {
53
+ return false;
242
54
  }
243
55
  }
244
56
  //# sourceMappingURL=intent-task-follow-up.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"intent-task-follow-up.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/intent-task/intent-task-follow-up.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"intent-task-follow-up.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/intent-task/intent-task-follow-up.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AActC;;;GAGG;AACH,MAAM,OAAO,yBAA0B,SAAQ,YAAY;IACjD,MAAM,CAAC,QAAQ,GAAqC,IAAI,CAAC;IAEjE,kCAAkC;IAClC,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,CAAC;YACxC,yBAAyB,CAAC,QAAQ,GAAG,IAAI,yBAAyB,EAAE,CAAC;QACvE,CAAC;QACD,OAAO,yBAAyB,CAAC,QAAQ,CAAC;IAC5C,CAAC;IAED,yCAAyC;IACzC,MAAM,CAAC,aAAa;QAClB,yBAAyB,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC5C,CAAC;IAED;;;;;OAKG;IACH,gBAAgB,CAAC,OAAe,EAAE,aAAsB;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,OAAe;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC"}
@@ -72,6 +72,17 @@ export declare class LiveReconcilerDataProvider implements ReconcilerDataProvide
72
72
  private agentRegistration;
73
73
  private consecutivePressureSkips;
74
74
  private lastPressureNotifiedAt;
75
+ /**
76
+ * Per-WorkItem redeliver cooldown. The reconciler fast loop runs every
77
+ * ~10s and re-emits a `redeliver` wake for any queued WI whose target is
78
+ * active-but-idle — with NO per-WI rate-limit in the rule. Without this
79
+ * gate a queued-but-unclaimed WI (e.g. one the orc has read but not yet
80
+ * claimed) is re-POSTed to its PTY every 10s (~50-60/hr), which is the
81
+ * wiki-bridge "spam" the user saw and the same class as the 2026-05-27
82
+ * PTY-flood incident. We cap redelivery of a given WI to once per
83
+ * {@link REDELIVER_COOLDOWN_MS}.
84
+ */
85
+ private readonly lastRedeliverAt;
75
86
  constructor();
76
87
  /**
77
88
  * Inject the EventBus used to broadcast `system:memory_pressure` to
@@ -1 +1 @@
1
- {"version":3,"file":"reconciler-data-provider.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/reconciler/reconciler-data-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reconciler-data-provider.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/reconciler/reconciler-data-provider.ts"],"names":[],"mappings":"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"}