formal-ai 0.204.0

Formal symbolic AI implementation with OpenAI-compatible APIs
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="formal-ai-version" content="__FORMAL_AI_VERSION__" />
    <meta
      name="description"
      content="formal-ai — a local, in-process formal-reasoning agent. Open the web app, read the documentation, or download the desktop app for macOS, Windows, and Linux."
    />
    <!--
      The landing page is a fully self-contained chooser (issue #479): it makes
      no cross-origin requests, so a strict same-origin CSP applies. All state
      (theme + UI language) is persisted as Links Notation via preferences.js,
      shared with the app at /app/, the docs at /docs/ and the /download/ page.
    -->
    <meta
      http-equiv="Content-Security-Policy"
      content="default-src 'self'; img-src 'self' data:; script-src 'self'; style-src 'self'; base-uri 'self'; form-action 'self';"
    />
    <title>formal-ai</title>
    <link rel="icon" href="data:," />
    <!--
      Every asset is cache-busted with ?v=__FORMAL_AI_ASSET_VERSION__ (the deploy
      commit SHA, stamped by scripts/stamp-pages-artifact.sh) exactly like /app/.
      This both defeats stale CDN/browser caches across deploys AND embeds the
      deployment SHA into the served index, which the Pages freshness probe
      (scripts/wait-for-pages-deployment.sh) relies on. The strict CSP above
      forbids inline scripts, so the SHA is carried on these refs rather than an
      inline window.FORMAL_AI_ASSET_VERSION assignment (issue #479).
    -->
    <link rel="stylesheet" href="landing.css?v=__FORMAL_AI_ASSET_VERSION__" />
  </head>
  <body>
    <main id="landing-app" class="page-shell" data-testid="landing-app">
      <noscript>
        <section class="hero">
          <h1>formal-ai</h1>
          <p class="summary">
            A local, in-process formal-reasoning agent.
          </p>
          <ul>
            <li><a href="app/">Open the web app</a></li>
            <li><a href="docs/">Read the documentation</a></li>
            <li><a href="download/">Download the desktop app</a></li>
          </ul>
        </section>
      </noscript>
    </main>

    <!--
      preferences.js exposes window.FormalAiPreferences (the same
      Links-Notation-backed localStorage the chat app uses). landing.js renders
      the chooser into #landing-app and reuses that store so the theme/locale a
      visitor picks here is shared with every other page.
    -->
    <script src="preferences.js?v=__FORMAL_AI_ASSET_VERSION__"></script>
    <script src="site-chrome.js?v=__FORMAL_AI_ASSET_VERSION__"></script>
    <script src="landing.js?v=__FORMAL_AI_ASSET_VERSION__"></script>
  </body>
</html>