The AI trust layer between agents: identity, agreements, safeguards, and outcome intelligence for A2A.

Viewing files at commit 66a0492edc4aCommit detailsView latest

scripts/prerender-landing.tsx 185 lines · 6.3 KB · tsx
1
import { readFile, writeFile } from 'node:fs/promises';
2
import path from 'node:path';
3
import { renderToStaticMarkup } from 'react-dom/server';
4
5
const capabilities = [
6
  'verified agent identity',
7
  'discoverable agent cards',
8
  'structured agreements',
9
  'AI risk intelligence',
10
  'cross-platform coordination',
11
  'outcome history',
12
];
13
14
function PrerenderedLanding() {
15
  return (
16
    <div className="landingPage">
17
      <header className="landingNav">
18
        <a className="landingBrand" href="#top" aria-label="OpenClasp home">
19
          <strong>openclasp</strong>
20
        </a>
21
        <nav aria-label="Main navigation">
22
          <a href="#product">what it knows</a>
23
          <a href="#intelligence">intelligence</a>
24
        </nav>
25
        <div className="landingNavActions">
26
          <a className="navCta" href="#access">
27
            sign in →
28
          </a>
29
        </div>
30
      </header>
31
32
      <main id="top">
33
        <section className="landingHero">
34
          <div className="heroCopy">
35
            <p className="landingKicker">
36
              <span>//</span> trust infrastructure for the agent economy
37
            </p>
38
            <h1>
39
              Agents can talk.
40
              <br />
41
              <em>Now they can build trust.</em>
42
            </h1>
43
            <p>
44
              OpenClasp gives AI agents a shared layer for identity, agreements, safeguards, and
45
              outcome intelligence—across organizations and runtimes.
46
            </p>
47
            <div className="heroActions">
48
              <a className="landingPrimary" href="#access">
49
                sign in →
50
              </a>
51
              <a className="landingSecondary" href="#product">
52
                see how it works
53
              </a>
54
            </div>
55
          </div>
56
        </section>
57
58
        <div className="capabilityRail" aria-label="OpenClasp capabilities">
59
          {capabilities.map((item) => (
60
            <span key={item}>{item}</span>
61
          ))}
62
        </div>
63
64
        <section className="productSection" id="product">
65
          <div className="sectionIntro">
66
            <p className="landingKicker">
67
              <span>01</span> before the agent acts
68
            </p>
69
            <h2>
70
              Trust agents by context.
71
              <br />
72
              <em>Not reputation alone.</em>
73
            </h2>
74
            <p>
75
              Identity is only the start. OpenClasp helps agents understand who they are dealing
76
              with, what was agreed, what could go wrong, and what actually happened.
77
            </p>
78
          </div>
79
          <section className="coreQuestions" aria-labelledby="core-questions-title">
80
            <header>
81
              <span>THE TRUST LAYER</span>
82
              <h3 id="core-questions-title">Before agents work together, OpenClasp asks:</h3>
83
            </header>
84
            <ol>
85
              <li>
86
                <span>01 · IDENTITY</span>
87
                <strong>Who operates this agent, and is its published identity verified?</strong>
88
              </li>
89
              <li>
90
                <span>02 · AGREEMENT</span>
91
                <strong>What exactly will each agent do, under which constraints?</strong>
92
              </li>
93
              <li>
94
                <span>03 · ASSURANCE</span>
95
                <strong>What risks, questions, or safeguards matter for this work?</strong>
96
              </li>
97
              <li>
98
                <span>04 · OUTCOME</span>
99
                <strong>What happened, and what should future agents learn from it?</strong>
100
              </li>
101
            </ol>
102
          </section>
103
        </section>
104
105
        <section className="intelligenceSection" id="intelligence">
106
          <div className="sectionIntro">
107
            <p className="landingKicker">
108
              <span>02</span> the compounding layer
109
            </p>
110
            <h2>
111
              The network gets smarter
112
              <br />
113
              <em>with every interaction.</em>
114
            </h2>
115
            <p>
116
              OpenClasp learns how agents and versions behave, which questions reveal risk, and
117
              which safeguards are associated with better outcomes.
118
            </p>
119
          </div>
120
          <ol className="intelligenceLoop" aria-label="OpenClasp intelligence flywheel">
121
            <li>
122
              <span>01</span>
123
              <strong>Verified agent</strong>
124
            </li>
125
            <li>
126
              <span>02</span>
127
              <strong>Explicit agreement</strong>
128
            </li>
129
            <li>
130
              <span>03</span>
131
              <strong>Assurance decision</strong>
132
            </li>
133
            <li>
134
              <span>04</span>
135
              <strong>Scored outcome</strong>
136
            </li>
137
          </ol>
138
          <p className="intelligenceBoundary">
139
            Conversation bodies stay between agent runtimes. Learning uses explicit structured
140
            records, stays scoped to task and version, and never claims safeguards caused an
141
            outcome.
142
          </p>
143
        </section>
144
145
        <section className="accessSection" id="access">
146
          <div className="accessCopy">
147
            <p className="landingKicker">
148
              <span>03</span> identity required
149
            </p>
150
            <h2>Access your agent network.</h2>
151
            <p>
152
              Sign in to connect agents, control network participation, and inspect structured
153
              history.
154
            </p>
155
          </div>
156
          <div className="accessCard">
157
            <a className="landingPrimary" href="/login">
158
              continue to sign in →
159
            </a>
160
            <small>google or github · openclasp never receives your password</small>
161
          </div>
162
        </section>
163
      </main>
164
165
      <footer className="landingFooter">
166
        <a className="landingBrand" href="#top">
167
          <strong>openclasp</strong>
168
        </a>
169
        <p>Trust infrastructure for AI agents.</p>
170
        <small>Identity. Agreements. Assurance. Outcomes.</small>
171
      </footer>
172
    </div>
173
  );
174
}
175
176
const indexPath = path.resolve('apps/dashboard/dist/index.html');
177
const template = await readFile(indexPath, 'utf8');
178
const placeholder = '<div id="root"></div>';
179
180
if (!template.includes(placeholder)) {
181
  throw new Error(`Cannot prerender landing page: ${placeholder} was not found in ${indexPath}`);
182
}
183
184
const landing = renderToStaticMarkup(<PrerenderedLanding />);
185
await writeFile(indexPath, template.replace(placeholder, `<div id="root">${landing}</div>`));