crewly 1.20.289 → 1.20.290
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/dist/backend/backend/src/controllers/chat/agent-reply.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat/agent-reply.controller.js +5 -0
- package/dist/backend/backend/src/controllers/chat/agent-reply.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +18 -12
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/services/agent/active-work-briefing.service.d.ts +11 -0
- package/dist/backend/backend/src/services/agent/active-work-briefing.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/active-work-briefing.service.js +32 -11
- package/dist/backend/backend/src/services/agent/active-work-briefing.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/follow-through.service.d.ts +132 -0
- package/dist/backend/backend/src/services/agent/follow-through.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/follow-through.service.js +199 -0
- package/dist/backend/backend/src/services/agent/follow-through.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/follow-through.wiring.d.ts +62 -0
- package/dist/backend/backend/src/services/agent/follow-through.wiring.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/follow-through.wiring.js +158 -0
- package/dist/backend/backend/src/services/agent/follow-through.wiring.js.map +1 -0
- package/dist/backend/backend/src/services/agent/idle-detection.service.d.ts +24 -6
- 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 +46 -11
- package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/idle-work-guard.d.ts +61 -0
- package/dist/backend/backend/src/services/agent/idle-work-guard.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/idle-work-guard.js +81 -0
- package/dist/backend/backend/src/services/agent/idle-work-guard.js.map +1 -0
- package/dist/backend/backend/src/services/agent/stated-intent.d.ts +55 -0
- package/dist/backend/backend/src/services/agent/stated-intent.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/stated-intent.js +142 -0
- package/dist/backend/backend/src/services/agent/stated-intent.js.map +1 -0
- package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.d.ts +10 -0
- 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 +25 -0
- package/dist/backend/backend/src/services/messaging/owner-thread-sentinel.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/agent-turn-state.d.ts +16 -0
- package/dist/backend/backend/src/services/monitoring/agent-turn-state.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/agent-turn-state.js +31 -0
- package/dist/backend/backend/src/services/monitoring/agent-turn-state.js.map +1 -1
- package/dist/backend/backend/src/services/v3/ticket-review.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/ticket-review.service.js +5 -0
- package/dist/backend/backend/src/services/v3/ticket-review.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/ticket-work-guard.d.ts +81 -0
- package/dist/backend/backend/src/services/v3/ticket-work-guard.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/ticket-work-guard.js +122 -0
- package/dist/backend/backend/src/services/v3/ticket-work-guard.js.map +1 -0
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts +11 -0
- package/dist/cli/backend/src/services/agent/active-work-briefing.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/active-work-briefing.service.js +32 -11
- package/dist/cli/backend/src/services/agent/active-work-briefing.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/follow-through.service.d.ts +132 -0
- package/dist/cli/backend/src/services/agent/follow-through.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/follow-through.service.js +199 -0
- package/dist/cli/backend/src/services/agent/follow-through.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/stated-intent.d.ts +55 -0
- package/dist/cli/backend/src/services/agent/stated-intent.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/stated-intent.js +142 -0
- package/dist/cli/backend/src/services/agent/stated-intent.js.map +1 -0
- package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.d.ts +10 -0
- 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 +25 -0
- package/dist/cli/backend/src/services/messaging/owner-thread-sentinel.service.js.map +1 -1
- package/dist/cli/backend/src/services/monitoring/agent-turn-state.d.ts +16 -0
- package/dist/cli/backend/src/services/monitoring/agent-turn-state.d.ts.map +1 -1
- package/dist/cli/backend/src/services/monitoring/agent-turn-state.js +31 -0
- package/dist/cli/backend/src/services/monitoring/agent-turn-state.js.map +1 -1
- package/dist/cli/backend/src/services/v3/ticket-review.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/v3/ticket-review.service.js +5 -0
- package/dist/cli/backend/src/services/v3/ticket-review.service.js.map +1 -1
- package/dist/cli/backend/src/services/v3/ticket-work-guard.d.ts +81 -0
- package/dist/cli/backend/src/services/v3/ticket-work-guard.d.ts.map +1 -0
- package/dist/cli/backend/src/services/v3/ticket-work-guard.js +122 -0
- package/dist/cli/backend/src/services/v3/ticket-work-guard.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wiring for the follow-through guard, the ticket work guard and the idle
|
|
3
|
+
* work guard onto the real backend services. Kept apart from the services so
|
|
4
|
+
* their logic stays transport-free (and testable).
|
|
5
|
+
*
|
|
6
|
+
* @module services/agent/follow-through.wiring
|
|
7
|
+
* @see specs/2026-10-10-agent-follow-through.md
|
|
8
|
+
*/
|
|
9
|
+
import { PROJECT_TICKET_CONSTANTS } from '../../constants.js';
|
|
10
|
+
import { createWorkItem } from '../../types/v2/work-item.types.js';
|
|
11
|
+
import { LoggerService } from '../core/logger.service.js';
|
|
12
|
+
import { RequestService } from '../v3/request.service.js';
|
|
13
|
+
import { getTicketReviewService } from '../v3/ticket-review.service.js';
|
|
14
|
+
import { ensureTicketWorkItems } from '../v3/ticket-work-guard.js';
|
|
15
|
+
import { TaskPoolService } from '../task-pool/task-pool.service.js';
|
|
16
|
+
import { DecisionStore, PENDING_DECISION_STATUSES } from '../decisions/decision-store.js';
|
|
17
|
+
import { getOwnerThreadSentinel } from '../messaging/owner-thread-sentinel.service.js';
|
|
18
|
+
import { AgentTurnStateService } from '../monitoring/agent-turn-state.js';
|
|
19
|
+
import { isOwnerStopped } from './owner-stopped.registry.js';
|
|
20
|
+
import { pausedTeamOfSession } from '../team/team-pause.registry.js';
|
|
21
|
+
import { PtyActivityTrackerService } from './pty-activity-tracker.service.js';
|
|
22
|
+
import { AgentFollowThroughService, getFollowThrough, setFollowThrough } from './follow-through.service.js';
|
|
23
|
+
import { holdReasonFor, releaseHeldWork } from './idle-work-guard.js';
|
|
24
|
+
const logger = LoggerService.getInstance().createComponentLogger('FollowThroughWiring');
|
|
25
|
+
/**
|
|
26
|
+
* Whether the agent handed the work off or put it on the pool since `since`:
|
|
27
|
+
* a WorkItem created after that for itself (tracked), or one it delegated to
|
|
28
|
+
* a teammate (`delegatedBy` / `createdBy` / the project-ticket caller stamp).
|
|
29
|
+
*
|
|
30
|
+
* @param items - Pool items
|
|
31
|
+
* @param session - The agent
|
|
32
|
+
* @param since - Epoch ms
|
|
33
|
+
* @returns True when something covers the statement
|
|
34
|
+
*/
|
|
35
|
+
export function handedOffSince(items, session, since) {
|
|
36
|
+
return items.some((wi) => {
|
|
37
|
+
if (Date.parse(wi.createdAt) < since)
|
|
38
|
+
return false;
|
|
39
|
+
if (wi.target === session)
|
|
40
|
+
return true;
|
|
41
|
+
const m = (wi.metadata ?? {});
|
|
42
|
+
return m['delegatedBy'] === session || m['createdBy'] === session || m[PROJECT_TICKET_CONSTANTS.DELEGATION_CALLER_METADATA_KEY] === session;
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Build the guard on the real services and expose it as the singleton.
|
|
47
|
+
* `CREWLY_FOLLOW_THROUGH=off` switches it off (nothing tracked, no nudges).
|
|
48
|
+
*
|
|
49
|
+
* @param deps - Seams
|
|
50
|
+
* @returns The guard, or null when switched off
|
|
51
|
+
*/
|
|
52
|
+
export function createFollowThrough(deps) {
|
|
53
|
+
if ((process.env['CREWLY_FOLLOW_THROUGH'] ?? '').trim().toLowerCase() === 'off')
|
|
54
|
+
return null;
|
|
55
|
+
const turnState = AgentTurnStateService.getInstance();
|
|
56
|
+
const tracker = PtyActivityTrackerService.getInstance();
|
|
57
|
+
const service = new AgentFollowThroughService({
|
|
58
|
+
nudgeAgent: async (session, text) => (await deps.sendToAgent(session, text)).success,
|
|
59
|
+
toolStartsSince: (session, since) => turnState.toolStartsSince(session, since),
|
|
60
|
+
runtimeStartedAt: (session) => turnState.runtimeStartedAt(session),
|
|
61
|
+
outputSpanSince: (session, since) => {
|
|
62
|
+
if (!tracker.hasActivity(session))
|
|
63
|
+
return null;
|
|
64
|
+
return Math.max(0, Date.now() - tracker.getIdleTimeMs(session) - since);
|
|
65
|
+
},
|
|
66
|
+
handedOff: async (session, since) => handedOffSince(await TaskPoolService.getInstance().getAllItems(), session, since),
|
|
67
|
+
waitingOnOwner: async (session) => {
|
|
68
|
+
const open = await DecisionStore.inHome(deps.crewlyHome).list((d) => d.asker === session && !d.system && PENDING_DECISION_STATUSES.has(d.status));
|
|
69
|
+
return open.length > 0;
|
|
70
|
+
},
|
|
71
|
+
isHeldBack: (session) => isOwnerStopped(session) || !!pausedTeamOfSession(session),
|
|
72
|
+
});
|
|
73
|
+
setFollowThrough(service);
|
|
74
|
+
return service;
|
|
75
|
+
}
|
|
76
|
+
const settling = new Set();
|
|
77
|
+
/**
|
|
78
|
+
* End of an agent's turn: nudge a stated intent nothing followed, give an
|
|
79
|
+
* unanswered owner ticket a WorkItem, then (the caller) submit answered
|
|
80
|
+
* tickets. Order matters: the WorkItem exists before the review looks.
|
|
81
|
+
* Never throws.
|
|
82
|
+
*
|
|
83
|
+
* @param session - Agent whose turn ended
|
|
84
|
+
*/
|
|
85
|
+
export async function settleFollowThrough(session) {
|
|
86
|
+
if (settling.has(session))
|
|
87
|
+
return;
|
|
88
|
+
settling.add(session);
|
|
89
|
+
try {
|
|
90
|
+
const guard = getFollowThrough();
|
|
91
|
+
await guard?.onTurnEnd(session);
|
|
92
|
+
const pool = TaskPoolService.getInstance();
|
|
93
|
+
const created = await ensureTicketWorkItems(session, {
|
|
94
|
+
listTickets: () => RequestService.getInstance().listAll(),
|
|
95
|
+
listWorkItems: () => pool.getAllItems(),
|
|
96
|
+
addWorkItem: (wi, creator) => pool.addToPool(wi, { creatorSession: creator }),
|
|
97
|
+
setChecklist: async (ticketId, items) => getTicketReviewService()?.setAcceptance(ticketId, items),
|
|
98
|
+
holdsIntent: (agent) => guard?.holdsIntent(agent) ?? false,
|
|
99
|
+
lastRealReplyAt: (agent) => guard?.lastRealReplyAt(agent),
|
|
100
|
+
});
|
|
101
|
+
for (const c of created)
|
|
102
|
+
logger.info('Owner request had no WorkItem — created one for its assignee', { agent: session, ...c });
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
logger.debug('Follow-through settle failed (non-fatal)', { session, error: err instanceof Error ? err.message : String(err) });
|
|
106
|
+
}
|
|
107
|
+
finally {
|
|
108
|
+
settling.delete(session);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/** Seams of the idle work guard on the real services. */
|
|
112
|
+
export function idleWorkGuardDeps() {
|
|
113
|
+
return {
|
|
114
|
+
listWorkItems: () => TaskPoolService.getInstance().getAllItems(),
|
|
115
|
+
listTickets: () => RequestService.getInstance().listAll(),
|
|
116
|
+
owesOwner: (session) => getOwnerThreadSentinel()?.owesOwner(session) ?? false,
|
|
117
|
+
holdsIntent: (session) => getFollowThrough()?.holdsIntent(session) ?? false,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/** The idle check's pending-work check on the real services. */
|
|
121
|
+
export function idlePendingWorkCheck() {
|
|
122
|
+
return (session) => holdReasonFor(session, idleWorkGuardDeps());
|
|
123
|
+
}
|
|
124
|
+
/** Seams of the work release on the real services. */
|
|
125
|
+
export function releaseWorkDeps() {
|
|
126
|
+
const pool = TaskPoolService.getInstance();
|
|
127
|
+
return {
|
|
128
|
+
listWorkItems: () => pool.getAllItems(),
|
|
129
|
+
releaseBack: (id, reason) => pool.releaseBack(id, reason),
|
|
130
|
+
parkIntent: async (session) => {
|
|
131
|
+
const intent = getFollowThrough()?.takeIntent(session);
|
|
132
|
+
if (!intent)
|
|
133
|
+
return null;
|
|
134
|
+
const wi = createWorkItem({
|
|
135
|
+
type: 'delegate',
|
|
136
|
+
owner: 'system',
|
|
137
|
+
target: session,
|
|
138
|
+
title: `Follow through: ${intent.sentence.slice(0, 70)}`,
|
|
139
|
+
description: `You told the owner: "${intent.sentence}". Crewly stopped you (memory) before you started it. ` +
|
|
140
|
+
'Start it now; reply to the owner when there is a result or a real blocker.',
|
|
141
|
+
metadata: { harnessCreated: 'stated-intent' },
|
|
142
|
+
});
|
|
143
|
+
await pool.addToPool(wi, { creatorSession: session });
|
|
144
|
+
return wi.id;
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Release what a stopping agent holds (idle stop under pressure, emergency stop).
|
|
150
|
+
*
|
|
151
|
+
* @param session - Agent being stopped
|
|
152
|
+
* @param why - Reason text
|
|
153
|
+
* @returns Ids released or created
|
|
154
|
+
*/
|
|
155
|
+
export function releaseWorkForStop(session, why) {
|
|
156
|
+
return releaseHeldWork(session, why, releaseWorkDeps());
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=follow-through.wiring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"follow-through.wiring.js","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/follow-through.wiring.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,8 +16,17 @@ import type { WorkItemStatus } from '../../types/v2/work-item.types.js';
|
|
|
16
16
|
* the whole timeout on a running item is not held up forever.
|
|
17
17
|
*/
|
|
18
18
|
export declare const PENDING_WORK_STATUSES: ReadonlySet<WorkItemStatus>;
|
|
19
|
-
/**
|
|
20
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Why an agent must be kept alive (a reason string), or false/null when
|
|
21
|
+
* nothing holds it: a WorkItem (queued, accepted or running), an assigned
|
|
22
|
+
* ticket, an owner promise, an unfulfilled "doing X now". See idle-work-guard.ts.
|
|
23
|
+
*/
|
|
24
|
+
export type PendingWorkCheck = (sessionName: string) => Promise<boolean | string | null>;
|
|
25
|
+
/**
|
|
26
|
+
* Called before an idle agent is stopped for memory: put the work it holds
|
|
27
|
+
* back in the queue so it is redelivered when the agent starts again.
|
|
28
|
+
*/
|
|
29
|
+
export type WorkReleaser = (sessionName: string, why: string) => Promise<unknown>;
|
|
21
30
|
/**
|
|
22
31
|
* Periodically scans active agents and suspends those that have been
|
|
23
32
|
* idle longer than the configured `agentIdleTimeoutMinutes`.
|
|
@@ -32,6 +41,7 @@ export declare class IdleDetectionService {
|
|
|
32
41
|
private timer;
|
|
33
42
|
private agentRegistrationService;
|
|
34
43
|
private pendingWorkCheck;
|
|
44
|
+
private workReleaser;
|
|
35
45
|
private isChecking;
|
|
36
46
|
private lastTickStartedAt;
|
|
37
47
|
private lastTickCompletedAt;
|
|
@@ -52,6 +62,13 @@ export declare class IdleDetectionService {
|
|
|
52
62
|
* @param check - Check, or null to disable
|
|
53
63
|
*/
|
|
54
64
|
setPendingWorkCheck(check: PendingWorkCheck | null): void;
|
|
65
|
+
/**
|
|
66
|
+
* Inject the releaser used when memory forces a stop of an agent that
|
|
67
|
+
* still holds work: its running items go back to the queue (same target).
|
|
68
|
+
*
|
|
69
|
+
* @param releaser - Releaser, or null to disable
|
|
70
|
+
*/
|
|
71
|
+
setWorkReleaser(releaser: WorkReleaser | null): void;
|
|
55
72
|
/**
|
|
56
73
|
* Get the singleton instance.
|
|
57
74
|
*
|
|
@@ -125,13 +142,14 @@ export declare class IdleDetectionService {
|
|
|
125
142
|
*/
|
|
126
143
|
performCheck(): Promise<void>;
|
|
127
144
|
/**
|
|
128
|
-
*
|
|
129
|
-
* ({@link PENDING_WORK_STATUSES}). False when no check is wired or it fails.
|
|
145
|
+
* Why the agent must be kept alive, or null.
|
|
130
146
|
*
|
|
131
147
|
* @param sessionName - Agent session
|
|
132
|
-
* @returns
|
|
148
|
+
* @returns A reason, or null when nothing holds it or the check fails
|
|
133
149
|
*/
|
|
134
|
-
private
|
|
150
|
+
private holdReason;
|
|
151
|
+
/** Put the work a stopping agent holds back in the queue (best-effort). */
|
|
152
|
+
private releaseWork;
|
|
135
153
|
/**
|
|
136
154
|
* Whether an enabled cron task targeting `sessionName` is due within
|
|
137
155
|
* {@link AGENT_SUSPEND_CONSTANTS.CRON_KEEPALIVE_WINDOW_MINUTES} (an overdue
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idle-detection.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/idle-detection.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAaH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAKxE;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"idle-detection.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/idle-detection.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAaH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAKxE;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,cAAc,CAA0E,CAAC;AAEzI;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;AAEzF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAElF;;;;;;;GAOG;AACH,qBAAa,oBAAoB;IAChC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAqC;IAC5D,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,wBAAwB,CAAyC;IACzE,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,YAAY,CAA6B;IAIjD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,iBAAiB,CAAuB;IAChD,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,uBAAuB,CAAK;IACpC,OAAO,CAAC,gBAAgB,CAAK;IAE7B,OAAO;IAIP;;;;OAIG;IACH,2BAA2B,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI;IAIpE;;;;;OAKG;IACH,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,GAAG,IAAI;IAIzD;;;;;OAKG;IACH,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI;IAIpD;;;;OAIG;IACH,MAAM,CAAC,WAAW,IAAI,oBAAoB;IAO1C;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAO5B;;OAEG;IACH,KAAK,IAAI,IAAI;IAeb;;;;;;;;;;OAUG;IACH,OAAO,CAAC,OAAO;IA2Ef;;;;;OAKG;IACH,QAAQ,IAAI;QACX,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC;QACpB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;QAClC,uBAAuB,EAAE,MAAM,CAAC;QAChC,gBAAgB,EAAE,MAAM,CAAC;KACzB;IAYD;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;;;OAIG;IACH,SAAS,IAAI,OAAO;IAIpB,4CAA4C;IAC5C,WAAW,EAAE,MAAM;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC3B,CAAkB;IAEnB;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAIrB;;;;OAIG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAoOnC;;;;;OAKG;YACW,UAAU;IAWxB,2EAA2E;YAC7D,WAAW;IAQzB;;;;;;;;OAQG;YACW,kBAAkB;IAehC;;;;;;;;OAQG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;CAyE5C"}
|
|
@@ -27,7 +27,7 @@ import { isDriveWarm } from '../drive/drive-keep-warm.js';
|
|
|
27
27
|
* `running` item is left to the working-status check — an agent idle for
|
|
28
28
|
* the whole timeout on a running item is not held up forever.
|
|
29
29
|
*/
|
|
30
|
-
export const PENDING_WORK_STATUSES = new Set(['queued', 'proposed', 'accepted']);
|
|
30
|
+
export const PENDING_WORK_STATUSES = new Set(['queued', 'proposed', 'accepted', 'running']);
|
|
31
31
|
/**
|
|
32
32
|
* Periodically scans active agents and suspends those that have been
|
|
33
33
|
* idle longer than the configured `agentIdleTimeoutMinutes`.
|
|
@@ -42,6 +42,7 @@ export class IdleDetectionService {
|
|
|
42
42
|
timer = null;
|
|
43
43
|
agentRegistrationService = null;
|
|
44
44
|
pendingWorkCheck = null;
|
|
45
|
+
workReleaser = null;
|
|
45
46
|
// Observability: surfaces silent hangs that previously caused the
|
|
46
47
|
// loop to "stop" for hours with no log evidence (2026-05-14 incident).
|
|
47
48
|
isChecking = false;
|
|
@@ -70,6 +71,15 @@ export class IdleDetectionService {
|
|
|
70
71
|
setPendingWorkCheck(check) {
|
|
71
72
|
this.pendingWorkCheck = check;
|
|
72
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Inject the releaser used when memory forces a stop of an agent that
|
|
76
|
+
* still holds work: its running items go back to the queue (same target).
|
|
77
|
+
*
|
|
78
|
+
* @param releaser - Releaser, or null to disable
|
|
79
|
+
*/
|
|
80
|
+
setWorkReleaser(releaser) {
|
|
81
|
+
this.workReleaser = releaser;
|
|
82
|
+
}
|
|
73
83
|
/**
|
|
74
84
|
* Get the singleton instance.
|
|
75
85
|
*
|
|
@@ -375,15 +385,27 @@ export class IdleDetectionService {
|
|
|
375
385
|
});
|
|
376
386
|
continue;
|
|
377
387
|
}
|
|
378
|
-
// Never stop an agent
|
|
379
|
-
//
|
|
380
|
-
|
|
388
|
+
// Never stop an agent that owes work (a WorkItem, an assigned
|
|
389
|
+
// ticket, a promise to the owner) — unless the machine is in
|
|
390
|
+
// pressure mode, where memory wins; then the work is put back
|
|
391
|
+
// in the queue first so the next start redelivers it.
|
|
392
|
+
const held = await this.holdReason(member.sessionName);
|
|
393
|
+
if (held && !pressure) {
|
|
381
394
|
this.logger.info('Agent idle but has queued work, keeping alive', {
|
|
382
395
|
sessionName: member.sessionName,
|
|
383
396
|
role: member.role,
|
|
397
|
+
reason: held,
|
|
384
398
|
});
|
|
385
399
|
continue;
|
|
386
400
|
}
|
|
401
|
+
if (held) {
|
|
402
|
+
this.logger.warn('Stopping an idle agent that still owes work (memory pressure) — work is put back in the queue', {
|
|
403
|
+
sessionName: member.sessionName,
|
|
404
|
+
role: member.role,
|
|
405
|
+
reason: held,
|
|
406
|
+
});
|
|
407
|
+
await this.releaseWork(member.sessionName, 'idle stop under memory pressure');
|
|
408
|
+
}
|
|
387
409
|
// Auto-stop: terminate idle agents to free resources
|
|
388
410
|
if (this.agentRegistrationService) {
|
|
389
411
|
this.logger.info('Agent idle timeout reached, stopping', {
|
|
@@ -427,20 +449,31 @@ export class IdleDetectionService {
|
|
|
427
449
|
}
|
|
428
450
|
}
|
|
429
451
|
/**
|
|
430
|
-
*
|
|
431
|
-
* ({@link PENDING_WORK_STATUSES}). False when no check is wired or it fails.
|
|
452
|
+
* Why the agent must be kept alive, or null.
|
|
432
453
|
*
|
|
433
454
|
* @param sessionName - Agent session
|
|
434
|
-
* @returns
|
|
455
|
+
* @returns A reason, or null when nothing holds it or the check fails
|
|
435
456
|
*/
|
|
436
|
-
async
|
|
457
|
+
async holdReason(sessionName) {
|
|
437
458
|
if (!this.pendingWorkCheck)
|
|
438
|
-
return
|
|
459
|
+
return null;
|
|
439
460
|
try {
|
|
440
|
-
|
|
461
|
+
const r = await this.pendingWorkCheck(sessionName);
|
|
462
|
+
if (typeof r === 'string')
|
|
463
|
+
return r;
|
|
464
|
+
return r ? 'work' : null;
|
|
441
465
|
}
|
|
442
466
|
catch {
|
|
443
|
-
return
|
|
467
|
+
return null;
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
/** Put the work a stopping agent holds back in the queue (best-effort). */
|
|
471
|
+
async releaseWork(sessionName, why) {
|
|
472
|
+
try {
|
|
473
|
+
await this.workReleaser?.(sessionName, why);
|
|
474
|
+
}
|
|
475
|
+
catch {
|
|
476
|
+
/* freeing memory must not depend on it */
|
|
444
477
|
}
|
|
445
478
|
}
|
|
446
479
|
/**
|
|
@@ -516,6 +549,8 @@ export class IdleDetectionService {
|
|
|
516
549
|
role: member.role,
|
|
517
550
|
});
|
|
518
551
|
try {
|
|
552
|
+
// The work it holds survives the stop: back in the queue, redelivered on the next start.
|
|
553
|
+
await this.releaseWork(member.sessionName, 'emergency stop under memory pressure');
|
|
519
554
|
if (backend && member.sessionName && backend.sessionExists(member.sessionName)) {
|
|
520
555
|
await backend.killSession(member.sessionName);
|
|
521
556
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idle-detection.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/idle-detection.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"idle-detection.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/idle-detection.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What keeps an idle agent from being stopped, and what happens to its work
|
|
3
|
+
* when memory forces a stop anyway.
|
|
4
|
+
*
|
|
5
|
+
* The idle check used to spare an agent only for (a) a WorkItem waiting for
|
|
6
|
+
* it (queued / proposed / accepted — not `running`) or (b) an owner message
|
|
7
|
+
* or promise from the last 30 minutes. A request that never became a
|
|
8
|
+
* WorkItem, a `running` item, or an assigned ticket protected nothing, so
|
|
9
|
+
* Pia (2026-10-10) was stopped 30 minutes after the owner's message with the
|
|
10
|
+
* owner's three videos still owed.
|
|
11
|
+
*
|
|
12
|
+
* @module services/agent/idle-work-guard
|
|
13
|
+
* @see specs/2026-10-10-agent-follow-through.md
|
|
14
|
+
*/
|
|
15
|
+
import type { WorkItem, WorkItemStatus } from '../../types/v2/work-item.types.js';
|
|
16
|
+
import type { Request } from '../../types/v2/request.types.js';
|
|
17
|
+
/** WorkItem statuses that mean "this agent owes this work". */
|
|
18
|
+
export declare const HELD_WORK_STATUSES: ReadonlySet<WorkItemStatus>;
|
|
19
|
+
/** Why an agent must not be idle-stopped. */
|
|
20
|
+
export type HoldReason = 'work_item' | 'ticket' | 'promise' | 'stated_intent';
|
|
21
|
+
/** What the guard reads. */
|
|
22
|
+
export interface IdleWorkGuardDeps {
|
|
23
|
+
listWorkItems: () => Promise<WorkItem[]>;
|
|
24
|
+
listTickets: () => Promise<Request[]>;
|
|
25
|
+
/** An open promise or unanswered owner message in an owner thread */
|
|
26
|
+
owesOwner: (session: string) => boolean;
|
|
27
|
+
/** An unfulfilled "I'm doing X now" */
|
|
28
|
+
holdsIntent: (session: string) => boolean;
|
|
29
|
+
now?: () => number;
|
|
30
|
+
}
|
|
31
|
+
/** Tickets older than this no longer hold an agent (a forgotten ticket must not pin memory forever). */
|
|
32
|
+
export declare const TICKET_HOLD_MAX_AGE_MS: number;
|
|
33
|
+
/**
|
|
34
|
+
* Why `session` must be kept alive, or null when nothing holds it.
|
|
35
|
+
*
|
|
36
|
+
* @param session - Agent session
|
|
37
|
+
* @param deps - Seams
|
|
38
|
+
* @returns The first reason found
|
|
39
|
+
*/
|
|
40
|
+
export declare function holdReasonFor(session: string, deps: IdleWorkGuardDeps): Promise<HoldReason | null>;
|
|
41
|
+
/** What {@link releaseHeldWork} needs. */
|
|
42
|
+
export interface ReleaseWorkDeps {
|
|
43
|
+
listWorkItems: () => Promise<WorkItem[]>;
|
|
44
|
+
/** running → queued, owner kept (TaskPoolService.releaseBack) */
|
|
45
|
+
releaseBack: (workItemId: string, reason: string) => Promise<void>;
|
|
46
|
+
/** Turn an unfulfilled "doing X now" into queued work for the agent; returns its id */
|
|
47
|
+
parkIntent?: (session: string) => Promise<string | null>;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The agent is being stopped for memory: put its `running` WorkItems back in
|
|
51
|
+
* the queue (same target) so the reconciler redelivers them when the agent
|
|
52
|
+
* is next started, and park an unfulfilled stated intent as a WorkItem.
|
|
53
|
+
* Never throws.
|
|
54
|
+
*
|
|
55
|
+
* @param session - Agent being stopped
|
|
56
|
+
* @param why - Reason text for the release
|
|
57
|
+
* @param deps - Seams
|
|
58
|
+
* @returns Ids released or created
|
|
59
|
+
*/
|
|
60
|
+
export declare function releaseHeldWork(session: string, why: string, deps: ReleaseWorkDeps): Promise<string[]>;
|
|
61
|
+
//# sourceMappingURL=idle-work-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idle-work-guard.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/idle-work-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAE/D,+DAA+D;AAC/D,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,cAAc,CAA0E,CAAC;AAKtI,6CAA6C;AAC7C,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,eAAe,CAAC;AAE9E,4BAA4B;AAC5B,MAAM,WAAW,iBAAiB;IACjC,aAAa,EAAE,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACzC,WAAW,EAAE,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACtC,qEAAqE;IACrE,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACxC,uCAAuC;IACvC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC1C,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACnB;AAED,wGAAwG;AACxG,eAAO,MAAM,sBAAsB,QAAmB,CAAC;AAEvD;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAoBxG;AAED,0CAA0C;AAC1C,MAAM,WAAW,eAAe;IAC/B,aAAa,EAAE,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACzC,iEAAiE;IACjE,WAAW,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,uFAAuF;IACvF,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACzD;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAkB5G"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What keeps an idle agent from being stopped, and what happens to its work
|
|
3
|
+
* when memory forces a stop anyway.
|
|
4
|
+
*
|
|
5
|
+
* The idle check used to spare an agent only for (a) a WorkItem waiting for
|
|
6
|
+
* it (queued / proposed / accepted — not `running`) or (b) an owner message
|
|
7
|
+
* or promise from the last 30 minutes. A request that never became a
|
|
8
|
+
* WorkItem, a `running` item, or an assigned ticket protected nothing, so
|
|
9
|
+
* Pia (2026-10-10) was stopped 30 minutes after the owner's message with the
|
|
10
|
+
* owner's three videos still owed.
|
|
11
|
+
*
|
|
12
|
+
* @module services/agent/idle-work-guard
|
|
13
|
+
* @see specs/2026-10-10-agent-follow-through.md
|
|
14
|
+
*/
|
|
15
|
+
/** WorkItem statuses that mean "this agent owes this work". */
|
|
16
|
+
export const HELD_WORK_STATUSES = new Set(['queued', 'proposed', 'accepted', 'running']);
|
|
17
|
+
/** Ticket statuses that mean the assignee still owes the owner. */
|
|
18
|
+
const OWED_TICKET_STATUSES = new Set(['open', 'ready', 'running']);
|
|
19
|
+
/** Tickets older than this no longer hold an agent (a forgotten ticket must not pin memory forever). */
|
|
20
|
+
export const TICKET_HOLD_MAX_AGE_MS = 48 * 60 * 60_000;
|
|
21
|
+
/**
|
|
22
|
+
* Why `session` must be kept alive, or null when nothing holds it.
|
|
23
|
+
*
|
|
24
|
+
* @param session - Agent session
|
|
25
|
+
* @param deps - Seams
|
|
26
|
+
* @returns The first reason found
|
|
27
|
+
*/
|
|
28
|
+
export async function holdReasonFor(session, deps) {
|
|
29
|
+
if (deps.owesOwner(session))
|
|
30
|
+
return 'promise';
|
|
31
|
+
if (deps.holdsIntent(session))
|
|
32
|
+
return 'stated_intent';
|
|
33
|
+
const items = await deps.listWorkItems();
|
|
34
|
+
if (items.some((wi) => wi.target === session && HELD_WORK_STATUSES.has(wi.status)))
|
|
35
|
+
return 'work_item';
|
|
36
|
+
const now = deps.now ? deps.now() : Date.now();
|
|
37
|
+
const tickets = await deps.listTickets();
|
|
38
|
+
if (tickets.some((t) => typeof t.ticketNumber === 'number' &&
|
|
39
|
+
t.assignee === session &&
|
|
40
|
+
OWED_TICKET_STATUSES.has(t.status) &&
|
|
41
|
+
t.kind !== 'question' &&
|
|
42
|
+
now - Date.parse(t.createdAt) <= TICKET_HOLD_MAX_AGE_MS)) {
|
|
43
|
+
return 'ticket';
|
|
44
|
+
}
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The agent is being stopped for memory: put its `running` WorkItems back in
|
|
49
|
+
* the queue (same target) so the reconciler redelivers them when the agent
|
|
50
|
+
* is next started, and park an unfulfilled stated intent as a WorkItem.
|
|
51
|
+
* Never throws.
|
|
52
|
+
*
|
|
53
|
+
* @param session - Agent being stopped
|
|
54
|
+
* @param why - Reason text for the release
|
|
55
|
+
* @param deps - Seams
|
|
56
|
+
* @returns Ids released or created
|
|
57
|
+
*/
|
|
58
|
+
export async function releaseHeldWork(session, why, deps) {
|
|
59
|
+
const out = [];
|
|
60
|
+
try {
|
|
61
|
+
for (const wi of await deps.listWorkItems()) {
|
|
62
|
+
if (wi.target !== session || wi.status !== 'running')
|
|
63
|
+
continue;
|
|
64
|
+
try {
|
|
65
|
+
await deps.releaseBack(wi.id, why);
|
|
66
|
+
out.push(wi.id);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
/* already moved on */
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const parked = await deps.parkIntent?.(session);
|
|
73
|
+
if (parked)
|
|
74
|
+
out.push(parked);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
/* best-effort: a failed release must not block freeing memory */
|
|
78
|
+
}
|
|
79
|
+
return out;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=idle-work-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idle-work-guard.js","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/idle-work-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,+DAA+D;AAC/D,MAAM,CAAC,MAAM,kBAAkB,GAAgC,IAAI,GAAG,CAAiB,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;AAEtI,mEAAmE;AACnE,MAAM,oBAAoB,GAAwB,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;AAgBxF,wGAAwG;AACxG,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;AAEvD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAe,EAAE,IAAuB;IAC3E,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;QAAE,OAAO,eAAe,CAAC;IACtD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;IACzC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,KAAK,OAAO,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QAAE,OAAO,WAAW,CAAC;IACvG,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;IACzC,IACC,OAAO,CAAC,IAAI,CACX,CAAC,CAAC,EAAE,EAAE,CACL,OAAO,CAAC,CAAC,YAAY,KAAK,QAAQ;QAClC,CAAC,CAAC,QAAQ,KAAK,OAAO;QACtB,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;QAClC,CAAC,CAAC,IAAI,KAAK,UAAU;QACrB,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,sBAAsB,CACxD,EACA,CAAC;QACF,OAAO,QAAQ,CAAC;IACjB,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAWD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAe,EAAE,GAAW,EAAE,IAAqB;IACxF,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,CAAC;QACJ,KAAK,MAAM,EAAE,IAAI,MAAM,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;YAC7C,IAAI,EAAE,CAAC,MAAM,KAAK,OAAO,IAAI,EAAE,CAAC,MAAM,KAAK,SAAS;gBAAE,SAAS;YAC/D,IAAI,CAAC;gBACJ,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBACnC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;YAAC,MAAM,CAAC;gBACR,sBAAsB;YACvB,CAAC;QACF,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,MAAM;YAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACR,iEAAiE;IAClE,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stated intent and deliverable extraction (text heuristics, no LLM).
|
|
3
|
+
*
|
|
4
|
+
* `detectStatedIntent` recognises an agent telling the owner it is starting
|
|
5
|
+
* work NOW ("I'm breaking down the shot list now", "next step is X", 「我现在…」,
|
|
6
|
+
* 「做好发你」). It is narrower than the owner-thread sentinel's promise
|
|
7
|
+
* detector on purpose: a promise is any "I'll report back"; a stated intent is
|
|
8
|
+
* "I am doing this right now", which a turn that ends right after it has
|
|
9
|
+
* broken. See specs/2026-10-10-agent-follow-through.md.
|
|
10
|
+
*
|
|
11
|
+
* `extractDeliverables` reads an owner's request for the separate things it
|
|
12
|
+
* asks for (numbered items, 「三个视频」, "one … another …") so partial
|
|
13
|
+
* delivery can be shown ("1 of 3 delivered").
|
|
14
|
+
*
|
|
15
|
+
* @module services/agent/stated-intent
|
|
16
|
+
*/
|
|
17
|
+
/** What an agent said it is starting. */
|
|
18
|
+
export interface StatedIntent {
|
|
19
|
+
/** The sentence that says it (clipped) */
|
|
20
|
+
sentence: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Whether an agent post says it is starting work now.
|
|
24
|
+
*
|
|
25
|
+
* Returns null for finished-work reports, for text that waits on someone
|
|
26
|
+
* else, and for a post that ends in a question (the agent is asking, not
|
|
27
|
+
* starting).
|
|
28
|
+
*
|
|
29
|
+
* @param text - The agent's post to the owner
|
|
30
|
+
* @returns The stated intent, or null
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* detectStatedIntent("I'm breaking down the reference shot list now, then building the crab version.");
|
|
35
|
+
* // { sentence: "I'm breaking down the reference shot list now, …" }
|
|
36
|
+
* detectStatedIntent('Done — the video is attached.'); // null
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function detectStatedIntent(text: string): StatedIntent | null;
|
|
40
|
+
/** Most checklist items kept for one request. */
|
|
41
|
+
export declare const MAX_DELIVERABLES = 8;
|
|
42
|
+
/**
|
|
43
|
+
* The separate things an owner's request asks for.
|
|
44
|
+
*
|
|
45
|
+
* Order of trust: explicit numbered/bulleted lists, inline "(1) … (2) …" /
|
|
46
|
+
* 「第一…第二…」 / "first … second …", "one … another …" / 「一个…另一个…」, then a
|
|
47
|
+
* bare count ("three videos" → three items). Returns [] when the request asks
|
|
48
|
+
* for one thing (or the shape is unclear): a checklist is only worth showing
|
|
49
|
+
* when partial delivery is possible.
|
|
50
|
+
*
|
|
51
|
+
* @param text - The owner's words
|
|
52
|
+
* @returns 2..{@link MAX_DELIVERABLES} items, or []
|
|
53
|
+
*/
|
|
54
|
+
export declare function extractDeliverables(text: string): string[];
|
|
55
|
+
//# sourceMappingURL=stated-intent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stated-intent.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/stated-intent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,yCAAyC;AACzC,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAoBD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAcpE;AAMD,iDAAiD;AACjD,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAiBlC;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CA0C1D"}
|