crewly 1.20.270 → 1.20.272

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 (71) hide show
  1. package/dist/backend/backend/src/constants.d.ts +39 -0
  2. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  3. package/dist/backend/backend/src/constants.js +39 -0
  4. package/dist/backend/backend/src/constants.js.map +1 -1
  5. package/dist/backend/backend/src/controllers/chat/agent-reply.controller.d.ts.map +1 -1
  6. package/dist/backend/backend/src/controllers/chat/agent-reply.controller.js +12 -0
  7. package/dist/backend/backend/src/controllers/chat/agent-reply.controller.js.map +1 -1
  8. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  9. package/dist/backend/backend/src/controllers/team/team.controller.js +11 -0
  10. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  11. package/dist/backend/backend/src/index.d.ts +18 -0
  12. package/dist/backend/backend/src/index.d.ts.map +1 -1
  13. package/dist/backend/backend/src/index.js +85 -0
  14. package/dist/backend/backend/src/index.js.map +1 -1
  15. package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts.map +1 -1
  16. package/dist/backend/backend/src/services/agent/idle-detection.service.js +3 -0
  17. package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
  18. package/dist/backend/backend/src/services/agent/resource-mode.service.d.ts +16 -1
  19. package/dist/backend/backend/src/services/agent/resource-mode.service.d.ts.map +1 -1
  20. package/dist/backend/backend/src/services/agent/resource-mode.service.js +24 -3
  21. package/dist/backend/backend/src/services/agent/resource-mode.service.js.map +1 -1
  22. package/dist/backend/backend/src/services/decisions/decision.service.d.ts +17 -0
  23. package/dist/backend/backend/src/services/decisions/decision.service.d.ts.map +1 -1
  24. package/dist/backend/backend/src/services/decisions/decision.service.js +21 -0
  25. package/dist/backend/backend/src/services/decisions/decision.service.js.map +1 -1
  26. package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts.map +1 -1
  27. package/dist/backend/backend/src/services/decisions/decision.wiring.js +11 -0
  28. package/dist/backend/backend/src/services/decisions/decision.wiring.js.map +1 -1
  29. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.d.ts +11 -0
  30. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
  31. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js +25 -0
  32. package/dist/backend/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
  33. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.d.ts +320 -0
  34. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.d.ts.map +1 -0
  35. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.js +692 -0
  36. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.js.map +1 -0
  37. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.wiring.d.ts +139 -0
  38. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.wiring.d.ts.map +1 -0
  39. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.wiring.js +243 -0
  40. package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.wiring.js.map +1 -0
  41. package/dist/backend/backend/src/services/slack/slack-agent-post.service.d.ts.map +1 -1
  42. package/dist/backend/backend/src/services/slack/slack-agent-post.service.js +3 -0
  43. package/dist/backend/backend/src/services/slack/slack-agent-post.service.js.map +1 -1
  44. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  45. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +13 -1
  46. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  47. package/dist/backend/build-info.json +2 -2
  48. package/dist/cli/backend/src/constants.d.ts +39 -0
  49. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  50. package/dist/cli/backend/src/constants.js +39 -0
  51. package/dist/cli/backend/src/constants.js.map +1 -1
  52. package/dist/cli/backend/src/services/agent/resource-mode.service.d.ts +16 -1
  53. package/dist/cli/backend/src/services/agent/resource-mode.service.d.ts.map +1 -1
  54. package/dist/cli/backend/src/services/agent/resource-mode.service.js +24 -3
  55. package/dist/cli/backend/src/services/agent/resource-mode.service.js.map +1 -1
  56. package/dist/cli/backend/src/services/decisions/decision.service.d.ts +17 -0
  57. package/dist/cli/backend/src/services/decisions/decision.service.d.ts.map +1 -1
  58. package/dist/cli/backend/src/services/decisions/decision.service.js +21 -0
  59. package/dist/cli/backend/src/services/decisions/decision.service.js.map +1 -1
  60. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.d.ts +11 -0
  61. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.d.ts.map +1 -1
  62. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js +25 -0
  63. package/dist/cli/backend/src/services/messaging/owner-message-watchdog.service.js.map +1 -1
  64. package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.d.ts +320 -0
  65. package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.d.ts.map +1 -0
  66. package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.js +692 -0
  67. package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.js.map +1 -0
  68. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  69. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +13 -1
  70. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  71. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../backend/src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../backend/src/index.ts"],"names":[],"mappings":"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"}
@@ -71,6 +71,7 @@ import { SubAgentMessageQueue } from './services/messaging/sub-agent-message-que
71
71
  import { InProcessTurnFailureService, setInProcessTurnFailureService } from './services/agent/in-process-turn-failure.service.js';
72
72
  import { LivenessMonitorService } from './services/monitoring/liveness-monitor.service.js';
73
73
  import { getOwnerMessageWatchdog } from './services/messaging/owner-message-watchdog.service.js';
74
+ import { getOwnerThreadSentinel, reportOwnerThreadBlocking } from './services/messaging/owner-thread-sentinel.service.js';
74
75
  import { parseInboundOrigin } from './services/orc/orc-reply-route.service.js';
75
76
  import { parseSlackThreadKey } from './services/slack/slack-thread-key.js';
76
77
  import { LIVENESS_MONITOR_CONSTANTS, INPUT_CIRCUIT_CONSTANTS, INPUT_BLOCKED_RETRY_CONSTANTS } from './constants.js';
@@ -1938,6 +1939,10 @@ export class CrewlyServer {
1938
1939
  // An agent with work queued for it (e.g. a ticket just assigned to a
1939
1940
  // member that was started for it) is never idle-stopped.
1940
1941
  idleDetection.setPendingWorkCheck(async (sessionName) => {
1942
+ // Mid-conversation with the owner (an unanswered owner message or a
1943
+ // promise in an owner thread in the last 30 min) counts as work.
1944
+ if (getOwnerThreadSentinel()?.owesRecently(sessionName))
1945
+ return true;
1941
1946
  const items = await TaskPoolService.getInstance().getAllItems();
1942
1947
  return items.some((wi) => wi.target === sessionName && PENDING_WORK_STATUSES.has(wi.status));
1943
1948
  });
@@ -1974,6 +1979,12 @@ export class CrewlyServer {
1974
1979
  return out;
1975
1980
  },
1976
1981
  hasOwnerMessage: (name) => SubAgentMessageQueue.getInstance().peek(name).some((m) => m.meta?.owner === true),
1982
+ // An agent mid-conversation with the owner is the last one stopped
1983
+ // for a slot, and its owner thread hears when it is
1984
+ // (specs/2026-10-08-owner-thread-sentinel.md).
1985
+ owesOwnerThread: (name) => getOwnerThreadSentinel()?.owesRecently(name) === true,
1986
+ onStoppedForSlot: (name) => reportOwnerThreadBlocking(name, { kind: 'stopped', why: 'slot' }),
1987
+ onStartDeferred: (name) => reportOwnerThreadBlocking(name, { kind: 'start_deferred' }),
1977
1988
  stopAgent: async (name, role) => {
1978
1989
  await agentRegistration.terminateAgentSession(name, role);
1979
1990
  await StorageService.getInstance().updateAgentStatus(name, CREWLY_CONSTANTS.AGENT_STATUSES.INACTIVE, 'idle_exit');
@@ -4151,6 +4162,12 @@ export class CrewlyServer {
4151
4162
  // (2026-10-02, Eve). Not-yet-due and already-nudged
4152
4163
  // promises are left to the open-items sweep.
4153
4164
  ...owed.map((c) => c.sessionName),
4165
+ // Agents an owner Slack thread waits on: a promised
4166
+ // follow-up, an unanswered owner message, or an owner
4167
+ // card they asked (2026-10-08: Atlas waited on a browser
4168
+ // approval in the owner's thread and was skipped as "no
4169
+ // work in hand").
4170
+ ...(await this.ownerThreadSessionsAtBoot()),
4154
4171
  ]);
4155
4172
  }
4156
4173
  catch (poolErr) {
@@ -5027,6 +5044,21 @@ export class CrewlyServer {
5027
5044
  *
5028
5045
  * @returns Open commitments and the agents owing an answer
5029
5046
  */
5047
+ /**
5048
+ * Sessions an owner thread waits on at boot: the owner-thread sentinel's
5049
+ * persisted threads (promise / unanswered owner message / open card) and
5050
+ * the askers of open owner cards from the last day. Read from disk: the
5051
+ * restore can run before the sentinel and the decision service start.
5052
+ *
5053
+ * @returns Session names (never the orchestrator)
5054
+ */
5055
+ async ownerThreadSessionsAtBoot() {
5056
+ const { ownerThreadSessionsAtBoot } = await import('./services/messaging/owner-thread-sentinel.wiring.js');
5057
+ const sessions = await ownerThreadSessionsAtBoot(this.config.crewlyHome, Date.now(), (msg, error) => this.logger.warn(msg, { error: error instanceof Error ? error.message : String(error) }));
5058
+ if (sessions.length > 0)
5059
+ this.logger.info('Owner threads wait on these agents; restoring them as work in hand', { sessions });
5060
+ return sessions;
5061
+ }
5030
5062
  async loadOwedWorkAtBoot() {
5031
5063
  let commitments = [];
5032
5064
  try {
@@ -5659,6 +5691,51 @@ export class CrewlyServer {
5659
5691
  this.logger.warn('Owner completion report not started', { error: error instanceof Error ? error.message : String(error) });
5660
5692
  }
5661
5693
  }
5694
+ /**
5695
+ * An owner Slack thread is never left silent: one status line per
5696
+ * blocking event for the agent it waits on
5697
+ * (services/messaging/owner-thread-sentinel.service.ts). Best-effort.
5698
+ *
5699
+ * @param watchdog - The owner message watchdog (owner messages feed the sentinel)
5700
+ * @param names - Session → display name (kept fresh by the watchdog's refresh)
5701
+ */
5702
+ async startOwnerThreadSentinel(watchdog, names) {
5703
+ try {
5704
+ const wiring = await import('./services/messaging/owner-thread-sentinel.wiring.js');
5705
+ const { ActivityMonitorService } = await import('./services/monitoring/activity-monitor.service.js');
5706
+ const activity = ActivityMonitorService.getInstance();
5707
+ const sentinel = wiring.createOwnerThreadSentinel({
5708
+ crewlyHome: this.config.crewlyHome,
5709
+ slack: () => getSlackService(),
5710
+ agentDmBotToken: (slackChannelId) => {
5711
+ const link = getSlackAgentDmService()?.findBySlackChannelId(slackChannelId);
5712
+ return link ? getSlackAgentIdentityService()?.getInstalled(link.agentSession)?.botToken : undefined;
5713
+ },
5714
+ botTokenOf: (session) => getSlackAgentIdentityService()?.getInstalled(session)?.botToken,
5715
+ sendToAgent: (session, text) => this.apiController.agentRegistrationService.sendMessageToAgent(session, text),
5716
+ sessionExists: (session) => {
5717
+ try {
5718
+ return getSessionBackendSync()?.sessionExists(session) ?? false;
5719
+ }
5720
+ catch {
5721
+ return false;
5722
+ }
5723
+ },
5724
+ activate: async (session) => {
5725
+ const { activateAgentBySession } = await import('./controllers/team/team.controller.js');
5726
+ return activateAgentBySession(this.apiController, session);
5727
+ },
5728
+ displayNameOf: (session) => (session === ORCHESTRATOR_SESSION_NAME ? 'Orc' : names.get(session) ?? session),
5729
+ listItems: () => TaskPoolService.getInstance().getAllItems(),
5730
+ workingStatusOf: (session) => activity.getObservedWorkingStatus(session) ?? null,
5731
+ });
5732
+ watchdog.onTrack((entry) => wiring.onOwnerMessageTracked(sentinel, entry));
5733
+ this.logger.info('Owner thread sentinel started', { watched: sentinel.list().length });
5734
+ }
5735
+ catch (error) {
5736
+ this.logger.warn('Owner thread sentinel not started', { error: error instanceof Error ? error.message : String(error) });
5737
+ }
5738
+ }
5662
5739
  async startOwnerMessageWatchdog(chatV2) {
5663
5740
  try {
5664
5741
  const wiring = await import('./services/messaging/owner-message-watchdog.wiring.js');
@@ -5743,6 +5820,7 @@ export class CrewlyServer {
5743
5820
  slack.on('message', (message) => wiring.onSlackInbound(watchdog, message));
5744
5821
  activity.onWorkingStatusChange((session, status) => watchdog.noteAgentTurn(session, status === 'in_progress'));
5745
5822
  this.logger.info('Owner message watchdog started', { tracked: watchdog.size });
5823
+ await this.startOwnerThreadSentinel(watchdog, names);
5746
5824
  }
5747
5825
  catch (error) {
5748
5826
  this.logger.warn('Owner message watchdog not started', {
@@ -5981,6 +6059,13 @@ export class CrewlyServer {
5981
6059
  },
5982
6060
  notify: async (notice) => {
5983
6061
  const minutes = Math.max(1, Math.round(notice.blockedForMs / 60000));
6062
+ // The owner thread waiting on this agent hears it too
6063
+ // (specs/2026-10-08-owner-thread-sentinel.md).
6064
+ {
6065
+ const { reportOwnerThreadBlocking } = await import('./services/messaging/owner-thread-sentinel.service.js');
6066
+ const why = notice.state === 'busy' ? 'busy' : notice.state === 'unknown' || notice.blockedState === 'unknown' ? 'unreadable' : notice.state === 'circuit-open' ? 'blocked' : 'foreign';
6067
+ reportOwnerThreadBlocking(notice.sessionName, { kind: 'delivery_held', why });
6068
+ }
5984
6069
  // The kind of content, never the text: a box can hold a password.
5985
6070
  if (notice.state === 'stuck') {
5986
6071
  tell(notice.sessionName, `Needs you: ${notice.sessionName} is idle, but its input box has held ${notice.inputLength} characters for ${minutes} min that Crewly cannot match to its own messages, and nobody typed into its terminal since Crewly's last message. Crewly did not submit it. Check the agent's terminal: submit or clear what is in the box.`, undefined);