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.
- package/config/skills/agent/core/complete-task/SKILL.md +5 -1
- package/config/skills/agent/core/complete-task/execute.sh +30 -15
- package/config/skills/agent/core/complete-task/execute.test.sh +45 -1
- package/dist/backend/backend/src/constants.d.ts +49 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +49 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js +43 -4
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +4 -0
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +2 -2
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/resource-mode.service.d.ts +13 -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 +36 -0
- package/dist/backend/backend/src/services/agent/resource-mode.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +24 -1
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js +44 -1
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.d.ts +48 -0
- package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.js +46 -0
- package/dist/backend/backend/src/services/orchestrator/commitment-approval-guard.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.d.ts +43 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js +34 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.js +1 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js +23 -7
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +5 -0
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +18 -2
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +67 -8
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts +117 -3
- package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler.service.js +304 -19
- package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/stalled-agent-recovery.d.ts +66 -0
- package/dist/backend/backend/src/services/reconciler/stalled-agent-recovery.d.ts.map +1 -0
- package/dist/backend/backend/src/services/reconciler/stalled-agent-recovery.js +107 -0
- package/dist/backend/backend/src/services/reconciler/stalled-agent-recovery.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-channel-members.d.ts +5 -0
- package/dist/backend/backend/src/services/slack/slack-channel-members.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-channel-members.js +4 -0
- package/dist/backend/backend/src/services/slack/slack-channel-members.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +10 -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 +29 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/backend/backend/src/services/trace/trace-metrics.d.ts.map +1 -1
- package/dist/backend/backend/src/services/trace/trace-metrics.js +2 -1
- package/dist/backend/backend/src/services/trace/trace-metrics.js.map +1 -1
- package/dist/backend/backend/src/services/trace/trace.types.d.ts +1 -1
- package/dist/backend/backend/src/services/trace/trace.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/trace/trace.types.js +2 -0
- package/dist/backend/backend/src/services/trace/trace.types.js.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +15 -0
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +47 -0
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
- package/dist/backend/backend/src/types/slack.types.d.ts +7 -0
- package/dist/backend/backend/src/types/slack.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/slack.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/index.d.ts +1 -1
- package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/index.js.map +1 -1
- package/dist/backend/backend/src/types/v2/reconcile.types.d.ts +20 -0
- package/dist/backend/backend/src/types/v2/reconcile.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/reconcile.types.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +49 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +49 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.js +2 -2
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/resource-mode.service.d.ts +13 -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 +36 -0
- package/dist/cli/backend/src/services/agent/resource-mode.service.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +24 -1
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +44 -1
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
- package/dist/cli/backend/src/services/orchestrator/commitment-approval-guard.d.ts +48 -0
- package/dist/cli/backend/src/services/orchestrator/commitment-approval-guard.d.ts.map +1 -1
- package/dist/cli/backend/src/services/orchestrator/commitment-approval-guard.js +46 -0
- package/dist/cli/backend/src/services/orchestrator/commitment-approval-guard.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-channel-members.d.ts +5 -0
- package/dist/cli/backend/src/services/slack/slack-channel-members.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-channel-members.js +4 -0
- package/dist/cli/backend/src/services/slack/slack-channel-members.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +10 -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 +29 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/cli/backend/src/services/trace/trace.types.d.ts +1 -1
- package/dist/cli/backend/src/services/trace/trace.types.d.ts.map +1 -1
- package/dist/cli/backend/src/services/trace/trace.types.js +2 -0
- package/dist/cli/backend/src/services/trace/trace.types.js.map +1 -1
- package/dist/cli/backend/src/types/slack.types.d.ts +7 -0
- package/dist/cli/backend/src/types/slack.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/slack.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/index.d.ts +1 -1
- package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/index.js.map +1 -1
- package/dist/cli/backend/src/types/v2/reconcile.types.d.ts +20 -0
- package/dist/cli/backend/src/types/v2/reconcile.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/reconcile.types.js.map +1 -1
- package/frontend/dist/assets/{index-2db17f1e.js → index-83188f0b.js} +2 -2
- package/frontend/dist/index.html +1 -1
- 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
|
-
|
|
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
|
}
|