constructor()

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);
      }),
    );
  }