HarborForge.OpenclawPlugin: dev-2026-03-29 -> main #4
6
plugin/calendar/scheduler.d.ts
vendored
6
plugin/calendar/scheduler.d.ts
vendored
@@ -147,6 +147,12 @@ export declare class CalendarScheduler {
|
||||
* Resume a paused slot.
|
||||
*/
|
||||
resumeCurrentSlot(): Promise<void>;
|
||||
/**
|
||||
* Trigger an immediate replanning pass after the current slot lifecycle ends.
|
||||
* This lets previously deferred/not-started slots compete again as soon as
|
||||
* the agent becomes idle.
|
||||
*/
|
||||
private triggerReplan;
|
||||
/**
|
||||
* Get a stable ID for a slot (real or virtual).
|
||||
*/
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["scheduler.ts"],"names":[],"mappings":"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"}
|
||||
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACL,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,oBAAoB,EAEpB,gBAAgB,EAIjB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,uBAAuB;IACtC,uDAAuD;IACvD,MAAM,EAAE,oBAAoB,CAAC;IAC7B,wDAAwD;IACxD,cAAc,EAAE,MAAM,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACvD,qDAAqD;IACrD,SAAS,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D,sBAAsB;IACtB,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;QAC/B,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;QAChC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;QAChC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;KAChC,CAAC;IACF,0DAA0D;IAC1D,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mCAAmC;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0BAA0B;IAC1B,IAAI,EAAE,oBAAoB,CAAC;IAC3B,sCAAsC;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,UAAU,cAAc;IACtB,6CAA6C;IAC7C,SAAS,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,WAAW,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACzC,+BAA+B;IAC/B,eAAe,EAAE,IAAI,GAAG,IAAI,CAAC;IAC7B,kCAAkC;IAClC,cAAc,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,GAAG,IAAI,CAAC;IACtD,iEAAiE;IACjE,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,mDAAmD;IACnD,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,KAAK,CAAiB;gBAElB,MAAM,EAAE,uBAAuB;IAgB3C;;;OAGG;IACH,KAAK,IAAI,IAAI;IAmBb;;;OAGG;IACH,IAAI,IAAI,IAAI;IAWZ;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAyCnC;;;OAGG;YACW,kBAAkB;IA0BhC;;;OAGG;YACW,eAAe;IAiC7B;;OAEG;YACW,WAAW;IAqEzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgCxB;;OAEG;IACH,OAAO,CAAC,cAAc;IAoBtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwCzB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAShC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;YACW,SAAS;IAiBvB;;OAEG;YACW,UAAU;IAiBxB;;;OAGG;IACG,mBAAmB,CAAC,qBAAqB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCvE;;;OAGG;IACG,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCtD;;;OAGG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBvC;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBxC;;;;OAIG;YACW,aAAa;IAc3B;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAMhB;;OAEG;IACH,QAAQ,IAAI,QAAQ,CAAC,cAAc,CAAC;IAIpC;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,cAAc,IAAI,oBAAoB,GAAG,IAAI;CAG9C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,uBAAuB,GAC9B,iBAAiB,CAEnB"}
|
||||
@@ -88,6 +88,12 @@ class CalendarScheduler {
|
||||
await this.handleNonIdleAgent(response.slots, response.agent_status);
|
||||
return;
|
||||
}
|
||||
// Agent is idle again - previously deferred slots should become eligible
|
||||
// for selection in the next planning pass.
|
||||
if (this.state.deferredSlotIds.size > 0) {
|
||||
this.logDebug(`Agent returned to idle; clearing ${this.state.deferredSlotIds.size} deferred slot marker(s) for replanning`);
|
||||
this.state.deferredSlotIds.clear();
|
||||
}
|
||||
// Agent is idle - handle pending slots
|
||||
await this.handleIdleAgent(response.slots);
|
||||
}
|
||||
@@ -191,6 +197,10 @@ class CalendarScheduler {
|
||||
// Revert slot to not_started status
|
||||
await this.revertSlot(slot);
|
||||
await this.config.bridge.reportAgentStatus({ status: 'idle' });
|
||||
this.state.isProcessing = false;
|
||||
this.state.currentSlot = null;
|
||||
await this.triggerReplan('wake failure');
|
||||
return;
|
||||
}
|
||||
// Note: isProcessing remains true until agent signals completion
|
||||
// This is handled by external completion callback
|
||||
@@ -386,6 +396,7 @@ Please use this time for the scheduled activity.`;
|
||||
finally {
|
||||
this.state.isProcessing = false;
|
||||
this.state.currentSlot = null;
|
||||
await this.triggerReplan('slot completion');
|
||||
}
|
||||
}
|
||||
/**
|
||||
@@ -418,6 +429,7 @@ Please use this time for the scheduled activity.`;
|
||||
finally {
|
||||
this.state.isProcessing = false;
|
||||
this.state.currentSlot = null;
|
||||
await this.triggerReplan('slot abort');
|
||||
}
|
||||
}
|
||||
/**
|
||||
@@ -471,6 +483,23 @@ Please use this time for the scheduled activity.`;
|
||||
this.config.logger.error('Failed to resume slot:', err);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Trigger an immediate replanning pass after the current slot lifecycle ends.
|
||||
* This lets previously deferred/not-started slots compete again as soon as
|
||||
* the agent becomes idle.
|
||||
*/
|
||||
async triggerReplan(reason) {
|
||||
if (!this.state.isRunning) {
|
||||
return;
|
||||
}
|
||||
this.logDebug(`Triggering immediate replanning after ${reason}`);
|
||||
try {
|
||||
await this.runHeartbeat();
|
||||
}
|
||||
catch (err) {
|
||||
this.config.logger.error(`Failed to trigger replanning after ${reason}:`, err);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Get a stable ID for a slot (real or virtual).
|
||||
*/
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -167,6 +167,15 @@ export class CalendarScheduler {
|
||||
return;
|
||||
}
|
||||
|
||||
// Agent is idle again - previously deferred slots should become eligible
|
||||
// for selection in the next planning pass.
|
||||
if (this.state.deferredSlotIds.size > 0) {
|
||||
this.logDebug(
|
||||
`Agent returned to idle; clearing ${this.state.deferredSlotIds.size} deferred slot marker(s) for replanning`
|
||||
);
|
||||
this.state.deferredSlotIds.clear();
|
||||
}
|
||||
|
||||
// Agent is idle - handle pending slots
|
||||
await this.handleIdleAgent(response.slots);
|
||||
|
||||
@@ -298,6 +307,10 @@ export class CalendarScheduler {
|
||||
// Revert slot to not_started status
|
||||
await this.revertSlot(slot);
|
||||
await this.config.bridge.reportAgentStatus({ status: 'idle' });
|
||||
this.state.isProcessing = false;
|
||||
this.state.currentSlot = null;
|
||||
await this.triggerReplan('wake failure');
|
||||
return;
|
||||
}
|
||||
|
||||
// Note: isProcessing remains true until agent signals completion
|
||||
@@ -511,6 +524,7 @@ Please use this time for the scheduled activity.`;
|
||||
} finally {
|
||||
this.state.isProcessing = false;
|
||||
this.state.currentSlot = null;
|
||||
await this.triggerReplan('slot completion');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -548,6 +562,7 @@ Please use this time for the scheduled activity.`;
|
||||
} finally {
|
||||
this.state.isProcessing = false;
|
||||
this.state.currentSlot = null;
|
||||
await this.triggerReplan('slot abort');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -608,6 +623,25 @@ Please use this time for the scheduled activity.`;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Trigger an immediate replanning pass after the current slot lifecycle ends.
|
||||
* This lets previously deferred/not-started slots compete again as soon as
|
||||
* the agent becomes idle.
|
||||
*/
|
||||
private async triggerReplan(reason: string): Promise<void> {
|
||||
if (!this.state.isRunning) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.logDebug(`Triggering immediate replanning after ${reason}`);
|
||||
|
||||
try {
|
||||
await this.runHeartbeat();
|
||||
} catch (err) {
|
||||
this.config.logger.error(`Failed to trigger replanning after ${reason}:`, err);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a stable ID for a slot (real or virtual).
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user