in src/common/chat/chat_state_manager.ts [31:61]
constructor(languageServerFeatureStateProvider: LanguageServerFeatureStateProvider) {
this.#languageServerFeatureStateProvider = languageServerFeatureStateProvider;
this.#subscriptions.push(
this.#languageServerFeatureStateProvider.onChange(async states => {
const chatState = states[CHAT];
if (!chatState) {
log.warn(
`Feature state manager can't find the Duo Chat state. We will disable chat. Please report this as a bug.`,
);
await setChatAvailable(false);
return;
}
const chatAvailable = chatState.engagedChecks.length === 0;
const duoEnabledForProject = !chatState.engagedChecks.find(({ checkId }) => {
return checkId === DUO_DISABLED_FOR_PROJECT;
});
await setChatAvailable(chatAvailable);
await setChatAvailableForProject(duoEnabledForProject);
this.#chatState.chatAvailable = chatAvailable;
const terminalContextState = states[CHAT_TERMINAL_CONTEXT];
const chatTerminalContextAvailable = terminalContextState?.engagedChecks.length === 0;
await setChatTerminalContextAvailable(chatTerminalContextAvailable);
this.#eventEmitter.fire(this.state);
}),
);
}