crewly 1.20.249 → 1.20.251

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 (123) hide show
  1. package/config/skills/agent/core/complete-task/SKILL.md +5 -1
  2. package/config/skills/agent/core/complete-task/execute.sh +30 -15
  3. package/config/skills/agent/core/complete-task/execute.test.sh +45 -1
  4. package/dist/backend/backend/src/constants.d.ts +49 -0
  5. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  6. package/dist/backend/backend/src/constants.js +49 -0
  7. package/dist/backend/backend/src/constants.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 +43 -4
  10. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  11. package/dist/backend/backend/src/index.d.ts.map +1 -1
  12. package/dist/backend/backend/src/index.js +4 -0
  13. package/dist/backend/backend/src/index.js.map +1 -1
  14. package/dist/backend/backend/src/services/agent/agent-registration.service.js +2 -2
  15. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  16. package/dist/backend/backend/src/services/agent/resource-mode.service.d.ts +13 -0
  17. package/dist/backend/backend/src/services/agent/resource-mode.service.d.ts.map +1 -1
  18. package/dist/backend/backend/src/services/agent/resource-mode.service.js +36 -0
  19. package/dist/backend/backend/src/services/agent/resource-mode.service.js.map +1 -1
  20. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +24 -1
  21. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
  22. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js +44 -1
  23. package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
  24. package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.d.ts +48 -0
  25. package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.d.ts.map +1 -1
  26. package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.js +46 -0
  27. package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.js.map +1 -1
  28. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.d.ts +43 -1
  29. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.d.ts.map +1 -1
  30. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js +34 -0
  31. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js.map +1 -1
  32. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.d.ts.map +1 -1
  33. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.js +1 -0
  34. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.js.map +1 -1
  35. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts.map +1 -1
  36. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js +23 -7
  37. package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js.map +1 -1
  38. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +5 -0
  39. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  40. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  41. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +18 -2
  42. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  43. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +67 -8
  44. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  45. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts +117 -3
  46. package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
  47. package/dist/backend/backend/src/services/reconciler/reconciler.service.js +304 -19
  48. package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
  49. package/dist/backend/backend/src/services/reconciler/stalled-agent-recovery.d.ts +66 -0
  50. package/dist/backend/backend/src/services/reconciler/stalled-agent-recovery.d.ts.map +1 -0
  51. package/dist/backend/backend/src/services/reconciler/stalled-agent-recovery.js +107 -0
  52. package/dist/backend/backend/src/services/reconciler/stalled-agent-recovery.js.map +1 -0
  53. package/dist/backend/backend/src/services/slack/slack-channel-members.d.ts +5 -0
  54. package/dist/backend/backend/src/services/slack/slack-channel-members.d.ts.map +1 -1
  55. package/dist/backend/backend/src/services/slack/slack-channel-members.js +4 -0
  56. package/dist/backend/backend/src/services/slack/slack-channel-members.js.map +1 -1
  57. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +10 -0
  58. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  59. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +29 -0
  60. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  61. package/dist/backend/backend/src/services/trace/trace-metrics.d.ts.map +1 -1
  62. package/dist/backend/backend/src/services/trace/trace-metrics.js +2 -1
  63. package/dist/backend/backend/src/services/trace/trace-metrics.js.map +1 -1
  64. package/dist/backend/backend/src/services/trace/trace.types.d.ts +1 -1
  65. package/dist/backend/backend/src/services/trace/trace.types.d.ts.map +1 -1
  66. package/dist/backend/backend/src/services/trace/trace.types.js +2 -0
  67. package/dist/backend/backend/src/services/trace/trace.types.js.map +1 -1
  68. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +15 -0
  69. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
  70. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +47 -0
  71. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
  72. package/dist/backend/backend/src/types/slack.types.d.ts +7 -0
  73. package/dist/backend/backend/src/types/slack.types.d.ts.map +1 -1
  74. package/dist/backend/backend/src/types/slack.types.js.map +1 -1
  75. package/dist/backend/backend/src/types/v2/index.d.ts +1 -1
  76. package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
  77. package/dist/backend/backend/src/types/v2/index.js.map +1 -1
  78. package/dist/backend/backend/src/types/v2/reconcile.types.d.ts +20 -0
  79. package/dist/backend/backend/src/types/v2/reconcile.types.d.ts.map +1 -1
  80. package/dist/backend/backend/src/types/v2/reconcile.types.js.map +1 -1
  81. package/dist/backend/build-info.json +2 -2
  82. package/dist/cli/backend/src/constants.d.ts +49 -0
  83. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  84. package/dist/cli/backend/src/constants.js +49 -0
  85. package/dist/cli/backend/src/constants.js.map +1 -1
  86. package/dist/cli/backend/src/services/agent/agent-registration.service.js +2 -2
  87. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  88. package/dist/cli/backend/src/services/agent/resource-mode.service.d.ts +13 -0
  89. package/dist/cli/backend/src/services/agent/resource-mode.service.d.ts.map +1 -1
  90. package/dist/cli/backend/src/services/agent/resource-mode.service.js +36 -0
  91. package/dist/cli/backend/src/services/agent/resource-mode.service.js.map +1 -1
  92. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +24 -1
  93. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
  94. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +44 -1
  95. package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
  96. package/dist/cli/backend/src/services/orchestrator/commitment-approval-guard.d.ts +48 -0
  97. package/dist/cli/backend/src/services/orchestrator/commitment-approval-guard.d.ts.map +1 -1
  98. package/dist/cli/backend/src/services/orchestrator/commitment-approval-guard.js +46 -0
  99. package/dist/cli/backend/src/services/orchestrator/commitment-approval-guard.js.map +1 -1
  100. package/dist/cli/backend/src/services/slack/slack-channel-members.d.ts +5 -0
  101. package/dist/cli/backend/src/services/slack/slack-channel-members.d.ts.map +1 -1
  102. package/dist/cli/backend/src/services/slack/slack-channel-members.js +4 -0
  103. package/dist/cli/backend/src/services/slack/slack-channel-members.js.map +1 -1
  104. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +10 -0
  105. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  106. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +29 -0
  107. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  108. package/dist/cli/backend/src/services/trace/trace.types.d.ts +1 -1
  109. package/dist/cli/backend/src/services/trace/trace.types.d.ts.map +1 -1
  110. package/dist/cli/backend/src/services/trace/trace.types.js +2 -0
  111. package/dist/cli/backend/src/services/trace/trace.types.js.map +1 -1
  112. package/dist/cli/backend/src/types/slack.types.d.ts +7 -0
  113. package/dist/cli/backend/src/types/slack.types.d.ts.map +1 -1
  114. package/dist/cli/backend/src/types/slack.types.js.map +1 -1
  115. package/dist/cli/backend/src/types/v2/index.d.ts +1 -1
  116. package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -1
  117. package/dist/cli/backend/src/types/v2/index.js.map +1 -1
  118. package/dist/cli/backend/src/types/v2/reconcile.types.d.ts +20 -0
  119. package/dist/cli/backend/src/types/v2/reconcile.types.d.ts.map +1 -1
  120. package/dist/cli/backend/src/types/v2/reconcile.types.js.map +1 -1
  121. package/frontend/dist/assets/{index-2db17f1e.js → index-83188f0b.js} +2 -2
  122. package/frontend/dist/index.html +1 -1
  123. package/package.json +1 -1
@@ -3,7 +3,7 @@ import { isPersonId } from '../../services/people/people-directory.service.js';
3
3
  import { canMemberDelegate, getTeamLeadIds, isLeadRole, setTeamLead } from '../../utils/team.utils.js';
4
4
  import { v4 as uuidv4 } from 'uuid';
5
5
  import { ORCHESTRATOR_SESSION_NAME, ORCHESTRATOR_ROLE, RUNTIME_TYPES, NON_RECOVERABLE_ERROR_PATTERNS, CLAUDE_STARTUP_CONSTANTS, RUNTIME_STARTUP_CONSTANTS, } from '../../constants.js';
6
- import { CREWLY_CONSTANTS, AGENT_TIMEOUTS, AGENT_WAKE_ERROR_CODES, TEAM_LEAD_CONSTANTS, TEAM_PAUSE_CONSTANTS } from '../../constants.js';
6
+ import { CREWLY_CONSTANTS, AGENT_TIMEOUTS, AGENT_WAKE_ERROR_CODES, TEAM_LEAD_CONSTANTS, TEAM_PAUSE_CONSTANTS, STALLED_AGENT_RECOVERY_CONSTANTS } from '../../constants.js';
7
7
  import { updateAgentHeartbeat } from '../../services/agent/agent-heartbeat.service.js';
8
8
  import { getSessionBackendSync, getSessionStatePersistence } from '../../services/session/index.js';
9
9
  import { removeCrewlyAgentFile } from '../../services/session/session-binding.js';
@@ -16,12 +16,13 @@ import { seedDeclaredCapabilities } from '../../services/memory/task-history-see
16
16
  import { validateAgentRole, InvalidAgentRoleError, } from '../../services/agent/agent-registration.service.js';
17
17
  import { SubAgentMessageQueue } from '../../services/messaging/sub-agent-message-queue.service.js';
18
18
  import { SUB_AGENT_QUEUE_CONSTANTS } from '../../constants.js';
19
+ import { RESOURCE_MODE_CONSTANTS } from '../../services/agent/resource-mode.service.js';
19
20
  import { LoggerService } from '../../services/core/logger.service.js';
20
21
  import { getChatV2Service } from '../../services/chat-v2/chat-v2.singleton.js';
21
22
  import { OAuthReloginMonitorService } from '../../services/agent/oauth-relogin-monitor.service.js';
22
23
  import { normalizeMemberSkills } from '../../services/ai/prompt-builder.service.js';
23
24
  import { isSafeModelId, isSafeReasoningEffort } from '../../utils/runtime-model-flags.utils.js';
24
- import { evaluateColdLaunch, isDormantTeam, isPreAuthorizedSchedule, COMMITMENT_APPROVAL_LOOKBACK_MS, } from '../../services/orchestrator/commitment-approval-guard.js';
25
+ import { evaluateColdLaunch, isDormantTeam, isHarnessParkedResume, isPreAuthorizedSchedule, COMMITMENT_APPROVAL_LOOKBACK_MS, } from '../../services/orchestrator/commitment-approval-guard.js';
25
26
  import { isOwnerDashboardRequest, readAgentSessionHeader } from '../../utils/agent-caller.utils.js';
26
27
  import { getCallerIdentity, isOwnerCaller, rejectNonOwner, sendOwnerAuthRequired } from '../../middleware/caller-identity.middleware.js';
27
28
  import { effectiveRuntimeType } from '../../services/runtime-fallback/effective-runtime.js';
@@ -692,6 +693,9 @@ async function _startTeamMemberCore(context, team, member, projectPath, options
692
693
  // Don't retry non-recoverable errors (e.g. missing CLI binary, or a
693
694
  // start-up blocked on the user such as Claude Code as root / never set up)
694
695
  if (createResult.errorCode === CLAUDE_STARTUP_CONSTANTS.BLOCKED_ERROR_CODE ||
696
+ // Waited for a slot behind the running-agent cap: retrying only waits
697
+ // again (CREW-304); the caller treats it as deferred.
698
+ createResult.errorCode === RESOURCE_MODE_CONSTANTS.START_DEFERRED_ERROR_CODE ||
695
699
  (lastError && NON_RECOVERABLE_ERROR_PATTERNS.some(p => lastError.includes(p)))) {
696
700
  logger.error('Non-recoverable error detected, skipping retries', { sessionName, lastError });
697
701
  break;
@@ -1976,7 +1980,39 @@ export async function startTeamMember(req, res) {
1976
1980
  workItemId: wakeWorkItemId,
1977
1981
  });
1978
1982
  }
1979
- if (!memberAlreadyActive && !ownerDashboardCall && isDormantTeam(team) && !scheduledPreAuthorized) {
1983
+ // A team the harness parked (idle stop, slot freed, update) is resumed by
1984
+ // the reconciler's wake for its own queued work, not cold-launched
1985
+ // (CREW-303/304: CE sat 4h35m behind this gate on 2026-10-06).
1986
+ let harnessParkedResume = false;
1987
+ if (!memberAlreadyActive && !ownerDashboardCall && !scheduledPreAuthorized && wakeWorkItemId && isDormantTeam(team)) {
1988
+ try {
1989
+ const { TaskPoolService } = await import('../../services/task-pool/task-pool.service.js');
1990
+ const wakeItem = await TaskPoolService.getInstance().findWorkItem(wakeWorkItemId);
1991
+ harnessParkedResume = isHarnessParkedResume({
1992
+ team,
1993
+ sessionName: member.sessionName,
1994
+ workItem: wakeItem,
1995
+ now: Date.now(),
1996
+ parkReasons: STALLED_AGENT_RECOVERY_CONSTANTS.HARNESS_PARK_REASONS,
1997
+ windowMs: STALLED_AGENT_RECOVERY_CONSTANTS.PARKED_RESUME_WINDOW_MS,
1998
+ });
1999
+ }
2000
+ catch (err) {
2001
+ logger.warn('Commitment gate: could not read the wake WorkItem — treating as a cold launch', {
2002
+ workItemId: wakeWorkItemId,
2003
+ error: err instanceof Error ? err.message : String(err),
2004
+ });
2005
+ }
2006
+ if (harnessParkedResume) {
2007
+ logger.info('Commitment gate: resuming a team the harness parked (its own queued work)', {
2008
+ teamId,
2009
+ memberId,
2010
+ sessionName: member.sessionName,
2011
+ workItemId: wakeWorkItemId,
2012
+ });
2013
+ }
2014
+ }
2015
+ if (!memberAlreadyActive && !ownerDashboardCall && isDormantTeam(team) && !scheduledPreAuthorized && !harnessParkedResume) {
1980
2016
  let ownerMessages = [];
1981
2017
  let readOk = true;
1982
2018
  try {
@@ -2100,7 +2136,10 @@ export async function startTeamMember(req, res) {
2100
2136
  else {
2101
2137
  res.status(500).json({
2102
2138
  success: false,
2103
- error: result.error || 'Failed to start team member'
2139
+ error: result.error || 'Failed to start team member',
2140
+ // Lets the reconciler tell a deferred start (RESOURCE_PRESSURE_CAP)
2141
+ // from a broken one (CREW-304).
2142
+ ...(result.errorCode ? { code: result.errorCode } : {}),
2104
2143
  });
2105
2144
  }
2106
2145
  }