File size: 1,841 Bytes
68d7816 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | import { Disposable } from '#/_base/di/lifecycle';
import { ScopeActivation, registerScopedService } from '#/_base/di/scope';
import { IAgentStateService } from '#/agent/state/agentState';
import { IEventBus } from '#/app/event/eventBus';
import { LifecycleScope } from '#/app/scopes';
import { IAgentPlanService } from '#/features/plan/plan';
import { PlanModeEnter, planKey } from '#/features/plan/planOps';
import { IAgentSwarmService } from '#/features/swarm/agent/swarm';
import { SwarmModeEnter } from '#/features/swarm/swarmOps';
import { IAgentTowerService } from '#/features/tower/tower';
import { TowerModeEnter } from '#/features/tower/towerOps';
import { IAgentModeMutexService } from './modeMutex';
export class AgentModeMutexService extends Disposable implements IAgentModeMutexService {
declare readonly _serviceBrand: undefined;
constructor(
@IAgentPlanService private readonly plan: IAgentPlanService,
@IAgentSwarmService private readonly swarm: IAgentSwarmService,
@IAgentTowerService private readonly tower: IAgentTowerService,
@IAgentStateService private readonly agentState: IAgentStateService,
@IEventBus eventBus: IEventBus,
) {
super();
this._register(
eventBus.subscribe(PlanModeEnter, () => {
if (this.tower.isActive) void this.tower.exit();
}),
);
this._register(
eventBus.subscribe(SwarmModeEnter, () => {
if (this.tower.isActive) void this.tower.exit();
}),
);
this._register(
eventBus.subscribe(TowerModeEnter, () => {
if (this.agentState.get(planKey).active) this.plan.exit();
if (this.swarm.isActive) this.swarm.exit();
}),
);
}
}
registerScopedService(
LifecycleScope.Agent,
IAgentModeMutexService,
AgentModeMutexService,
ScopeActivation.OnScopeCreated,
'modeMutex',
);
|