<?xml version="1.0" encoding="UTF-8"?>
<!--
  Pellucis for Outlook — PRODUCTION manifest. GENERATED FILE; DO NOT EDIT.

  Source:    office/manifest.outlook.xml
  Generator: scripts/build-manifests.mjs   (pnpm manifests:build)
  Served at: https://www.pellucis.com/office/manifest.outlook.xml

  Edit the source manifest and re-run the generator. An edit made here is overwritten without
  warning and, worse, is invisible: the dev and production add-ins would then differ in a way no
  test compares.

  This manifest carries a DIFFERENT <Id> from the source, so a developer running the shared-folder
  dev catalogue and a user running the installed production add-in do not collide.
-->
<OfficeApp
  xmlns="http://schemas.microsoft.com/office/appforoffice/1.1"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:bt="http://schemas.microsoft.com/office/officeappbasictypes/1.0"
  xmlns:mailappor="http://schemas.microsoft.com/office/mailappversionoverrides/1.0"
  xsi:type="MailApp">

  <!-- Distinct from the Word add-in's Id. Two add-ins, two identities. -->
  <Id>eae441b1-b01f-4da9-bdfb-38b397b5c062</Id>
  <Version>1.1.0.0</Version>
  <ProviderName>Pellucis</ProviderName>
  <DefaultLocale>en-CA</DefaultLocale>
  <DisplayName DefaultValue="Pellucis" />
  <!-- The Add-Ins for Outlook card truncates this at roughly 115 characters, mid-sentence.
       Front-load the value; anything after the first two sentences is for the store listing, not here. -->
  <Description DefaultValue="Draft replies grounded in your file and cited to their sources. Pellucis drafts, you send." />
  <IconUrl DefaultValue="https://www.pellucis.com/brand/icon-64.png" />
  <HighResolutionIconUrl DefaultValue="https://www.pellucis.com/brand/icon-128.png" />
  <SupportUrl DefaultValue="https://www.pellucis.com/security" />

  <AppDomains>
    <AppDomain>https://www.pellucis.com</AppDomain>
  </AppDomains>

  <Hosts>
    <Host Name="Mailbox" />
  </Hosts>

  <!--
    Mailbox 1.8, not 1.3, and the reason is attachments. getAttachmentContentAsync arrived in 1.8 and
    returns an attachment's bytes TO THE PANE, on this machine. Below 1.8 the only way to read one is
    a Microsoft Graph call with an access token — the file would leave the mailbox and travel through
    a server to be read, which is a materially different privacy posture and not one we want.
    So: 1.8 or the add-in does not load, rather than 1.3 and a silent fallback to the worse path.
  -->
  <Requirements>
    <Sets>
      <Set Name="Mailbox" MinVersion="1.8" />
    </Sets>
  </Requirements>

  <!-- The legacy surface. Required for the manifest to validate; superseded at runtime by the
       VersionOverrides below on every client that supports them, which is all of them now. -->
  <FormSettings>
    <Form xsi:type="ItemRead">
      <DesktopSettings>
        <SourceLocation DefaultValue="https://www.pellucis.com/outlook" />
        <RequestedHeight>450</RequestedHeight>
      </DesktopSettings>
    </Form>
  </FormSettings>

  <!--
    ReadWriteMailbox is NOT requested, and the difference is the point.

    ReadWriteItem lets the pane read the open message and write into a compose window — which is
    everything it does. ReadWriteMailbox would grant the whole mailbox and the ability to act on
    items the appraiser never opened, which is a permission this add-in has no use for and should
    not hold. Nothing here sends: Office.js gives a task pane no send API, and the draft lands in a
    compose window the appraiser reads first.
  -->
  <Permissions>ReadWriteItem</Permissions>

  <Rule xsi:type="RuleCollection" Mode="Or">
    <Rule xsi:type="ItemIs" ItemType="Message" FormType="Read" />
  </Rule>
  <DisableEntityHighlighting>false</DisableEntityHighlighting>

  <VersionOverrides xmlns="http://schemas.microsoft.com/office/mailappversionoverrides" xsi:type="VersionOverridesV1_0">
    <Requirements>
      <bt:Sets DefaultMinVersion="1.8">
        <bt:Set Name="Mailbox" />
      </bt:Sets>
    </Requirements>

    <Hosts>
      <Host xsi:type="MailHost">
        <DesktopFormFactor>
          <FunctionFile resid="Pellucis.Read.Url" />

          <!-- Reading a thread: ask it what it says, and what it commits the firm to. -->
          <ExtensionPoint xsi:type="MessageReadCommandSurface">
            <OfficeTab id="TabDefault">
              <Group id="Pellucis.Read.Group">
                <Label resid="Pellucis.GroupLabel" />
                <Control xsi:type="Button" id="Pellucis.Read.Button">
                  <Label resid="Pellucis.Read.Label" />
                  <Supertip>
                    <Title resid="Pellucis.Read.Label" />
                    <Description resid="Pellucis.Read.Tip" />
                  </Supertip>
                  <Icon>
                    <bt:Image size="16" resid="Pellucis.Icon16" />
                    <bt:Image size="32" resid="Pellucis.Icon32" />
                    <bt:Image size="80" resid="Pellucis.Icon80" />
                  </Icon>
                  <Action xsi:type="ShowTaskpane">
                    <SourceLocation resid="Pellucis.Read.Url" />
                  </Action>
                </Control>
              </Group>
            </OfficeTab>
          </ExtensionPoint>

          <!-- Composing a reply: draft into the window that is already open, for review. -->
          <ExtensionPoint xsi:type="MessageComposeCommandSurface">
            <OfficeTab id="TabDefault">
              <Group id="Pellucis.Compose.Group">
                <Label resid="Pellucis.GroupLabel" />
                <Control xsi:type="Button" id="Pellucis.Compose.Button">
                  <Label resid="Pellucis.Compose.Label" />
                  <Supertip>
                    <Title resid="Pellucis.Compose.Label" />
                    <Description resid="Pellucis.Compose.Tip" />
                  </Supertip>
                  <Icon>
                    <bt:Image size="16" resid="Pellucis.Icon16" />
                    <bt:Image size="32" resid="Pellucis.Icon32" />
                    <bt:Image size="80" resid="Pellucis.Icon80" />
                  </Icon>
                  <Action xsi:type="ShowTaskpane">
                    <SourceLocation resid="Pellucis.Compose.Url" />
                  </Action>
                </Control>
              </Group>
            </OfficeTab>
          </ExtensionPoint>
        </DesktopFormFactor>
      </Host>
    </Hosts>

    <Resources>
      <bt:Images>
        <bt:Image id="Pellucis.Icon16" DefaultValue="https://www.pellucis.com/brand/icon-16.png" />
        <bt:Image id="Pellucis.Icon32" DefaultValue="https://www.pellucis.com/brand/icon-32.png" />
        <bt:Image id="Pellucis.Icon80" DefaultValue="https://www.pellucis.com/brand/icon-80.png" />
      </bt:Images>
      <bt:Urls>
        <bt:Url id="Pellucis.Read.Url" DefaultValue="https://www.pellucis.com/outlook" />
        <bt:Url id="Pellucis.Compose.Url" DefaultValue="https://www.pellucis.com/outlook?mode=compose" />
      </bt:Urls>
      <bt:ShortStrings>
        <bt:String id="Pellucis.GroupLabel" DefaultValue="Pellucis" />
        <bt:String id="Pellucis.Read.Label" DefaultValue="Ask this thread" />
        <bt:String id="Pellucis.Compose.Label" DefaultValue="Draft a reply" />
      </bt:ShortStrings>
      <bt:LongStrings>
        <bt:String id="Pellucis.Read.Tip" DefaultValue="Ask a question about this message. Answers come from the thread and your engagement, cited to their sources or refused." />
        <bt:String id="Pellucis.Compose.Tip" DefaultValue="Draft a reply grounded in the thread and your engagement. Every figure traces to a source. Review it before you send." />
      </bt:LongStrings>
    </Resources>

    <!--
      v1.1. Identical to the block above in every respect but one: each <Action> carries
      <SupportsPinning>true</SupportsPinning>, which exists in no other schema. A client that
      understands v1.1 reads this and ignores the parent; an older one reads the parent and gets a
      working, unpinnable pane. Nothing is inherited, so everything is repeated — including the
      Resources, which the schema requires to resolve this element's own resids.
    -->
    <VersionOverrides xmlns="http://schemas.microsoft.com/office/mailappversionoverrides/1.1" xsi:type="VersionOverridesV1_1">
      <Requirements>
        <bt:Sets DefaultMinVersion="1.8">
          <bt:Set Name="Mailbox" />
        </bt:Sets>
      </Requirements>

      <Hosts>
        <Host xsi:type="MailHost">
          <DesktopFormFactor>
            <FunctionFile resid="Pellucis.Read.Url" />

            <ExtensionPoint xsi:type="MessageReadCommandSurface">
              <OfficeTab id="TabDefault">
                <Group id="Pellucis.Read.Group">
                  <Label resid="Pellucis.GroupLabel" />
                  <Control xsi:type="Button" id="Pellucis.Read.Button">
                    <Label resid="Pellucis.Read.Label" />
                    <Supertip>
                      <Title resid="Pellucis.Read.Label" />
                      <Description resid="Pellucis.Read.Tip" />
                    </Supertip>
                    <Icon>
                      <bt:Image size="16" resid="Pellucis.Icon16" />
                      <bt:Image size="32" resid="Pellucis.Icon32" />
                      <bt:Image size="80" resid="Pellucis.Icon80" />
                    </Icon>
                    <Action xsi:type="ShowTaskpane">
                      <SourceLocation resid="Pellucis.Read.Url" />
                      <!-- The pane stays open from one message to the next. The pane REMOUNTS itself
                           on every ItemChanged (components/harvey/outlook/OutlookItemBoundary.tsx),
                           so nothing built for one message — least of all the appraiser's statement
                           that a thread carries no real client data — can survive onto another. -->
                      <SupportsPinning>true</SupportsPinning>
                    </Action>
                  </Control>
                </Group>
              </OfficeTab>
            </ExtensionPoint>

            <ExtensionPoint xsi:type="MessageComposeCommandSurface">
              <OfficeTab id="TabDefault">
                <Group id="Pellucis.Compose.Group">
                  <Label resid="Pellucis.GroupLabel" />
                  <Control xsi:type="Button" id="Pellucis.Compose.Button">
                    <Label resid="Pellucis.Compose.Label" />
                    <Supertip>
                      <Title resid="Pellucis.Compose.Label" />
                      <Description resid="Pellucis.Compose.Tip" />
                    </Supertip>
                    <Icon>
                      <bt:Image size="16" resid="Pellucis.Icon16" />
                      <bt:Image size="32" resid="Pellucis.Icon32" />
                      <bt:Image size="80" resid="Pellucis.Icon80" />
                    </Icon>
                    <Action xsi:type="ShowTaskpane">
                      <SourceLocation resid="Pellucis.Compose.Url" />
                      <!-- Pinning does not carry ACROSS modes (Learn, pinnable-taskpane): pinning
                           while reading does not pin while composing. Both are declared so the
                           appraiser gets the same behaviour on either surface. -->
                      <SupportsPinning>true</SupportsPinning>
                    </Action>
                  </Control>
                </Group>
              </OfficeTab>
            </ExtensionPoint>
          </DesktopFormFactor>
        </Host>
      </Hosts>

      <Resources>
        <bt:Images>
          <bt:Image id="Pellucis.Icon16" DefaultValue="https://www.pellucis.com/brand/icon-16.png" />
          <bt:Image id="Pellucis.Icon32" DefaultValue="https://www.pellucis.com/brand/icon-32.png" />
          <bt:Image id="Pellucis.Icon80" DefaultValue="https://www.pellucis.com/brand/icon-80.png" />
        </bt:Images>
        <bt:Urls>
          <bt:Url id="Pellucis.Read.Url" DefaultValue="https://www.pellucis.com/outlook" />
          <bt:Url id="Pellucis.Compose.Url" DefaultValue="https://www.pellucis.com/outlook?mode=compose" />
        </bt:Urls>
        <bt:ShortStrings>
          <bt:String id="Pellucis.GroupLabel" DefaultValue="Pellucis" />
          <bt:String id="Pellucis.Read.Label" DefaultValue="Ask this thread" />
          <bt:String id="Pellucis.Compose.Label" DefaultValue="Draft a reply" />
        </bt:ShortStrings>
        <bt:LongStrings>
          <bt:String id="Pellucis.Read.Tip" DefaultValue="Ask a question about this message. Answers come from the thread and your engagement, cited to their sources or refused." />
          <bt:String id="Pellucis.Compose.Tip" DefaultValue="Draft a reply grounded in the thread and your engagement. Every figure traces to a source. Review it before you send." />
        </bt:LongStrings>
      </Resources>
    </VersionOverrides>
  </VersionOverrides>
</OfficeApp>
