feat: recompute basic watchdog statuses

This commit is contained in:
Eve
2026-04-24 10:55:05 +08:00
parent b7416036db
commit 7d6e0716aa

View File

@@ -182,6 +182,47 @@ function writeCompletionReceiptState(payload) {
};
}
function parseTime(value) {
if (typeof value !== 'string' || value.length === 0) {
return null;
}
const timestamp = Date.parse(value);
return Number.isNaN(timestamp) ? null : timestamp;
}
function recomputeStatus(payload) {
if (!payload || typeof payload !== 'object') {
return 'not_implemented';
}
const completionReceivedAt = payload.completionReceivedAt ?? payload.completionReceiptAt ?? null;
if (parseTime(completionReceivedAt) !== null) {
return 'completed';
}
const hasDispatch = [payload.runId, payload.childSessionKey, payload.dispatchAt, payload.expectedBy].every(
(value) => typeof value === 'string' && value.length > 0,
);
if (!hasDispatch) {
return 'not_implemented';
}
const expectedBy = parseTime(payload.expectedBy);
const currentTime = parseTime(payload.currentTime);
if (expectedBy === null || currentTime === null) {
return 'not_implemented';
}
if (currentTime > expectedBy) {
return 'suspect_delivery_failure';
}
return 'active';
}
function main() {
const args = parseArgs(process.argv.slice(2));
@@ -194,6 +235,7 @@ function main() {
const inputPayload = input.exists ? tryParseJson(input.content) : null;
const dispatchWrite = writeDispatchReceiptState(inputPayload);
const completionWrite = writeCompletionReceiptState(inputPayload);
const status = recomputeStatus(inputPayload);
if ('content' in input) {
delete input.content;
@@ -210,7 +252,7 @@ function main() {
const response = {
ok: true,
tool: 'subagent_delivery_watchdog',
version: 'skeleton-v3',
version: 'skeleton-v4',
mode: 'receipt-write',
args: {
compact: args.compact,
@@ -218,8 +260,10 @@ function main() {
},
input,
result: {
status: 'not_implemented',
message: 'Dispatch and completion receipt writes are implemented; status recompute remains pending.',
status,
message: status === 'not_implemented'
? 'Dispatch and completion receipt writes are implemented; status recompute only handles basic active/suspect/completed states.'
: 'Basic watchdog status recompute completed.',
records,
dispatchReceiptWrite: dispatchWrite,
completionReceiptWrite: completionWrite,