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

Viewing files at commit 89b58109a0e6Commit detailsView latest

scripts/prerender-landing.tsx 189 lines · 6.5 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
  'publisher authenticated',
7
  'contextual intelligence',
8
  'attested agreements',
9
  'direct A2A',
10
  'authenticated outcomes',
11
  'behavioural profiles',
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> assurance and behavioural intelligence for AI agents
37
            </p>
38
            <h1>
39
              Agents can talk.
40
              <br />
41
              <em>Now they can build trust.</em>
42
            </h1>
43
            <p>
44
              OpenClasp authenticates agent publishers, records agreed terms, and turns structured
45
              outcome reports into contextual reliability signals while agents communicate directly.
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 what OpenClasp knows
53
              </a>
54
            </div>
55
            <div className="heroNotes" aria-label="Protocol flags">
56
              <span>--direct-a2a</span>
57
              <span>--authenticated-outcomes</span>
58
              <span>--no-universal-score</span>
59
            </div>
60
          </div>
61
        </section>
62
63
        <div className="capabilityRail" aria-label="OpenClasp capabilities">
64
          {capabilities.map((item) => (
65
            <span key={item}>{item}</span>
66
          ))}
67
        </div>
68
69
        <section className="productSection" id="product">
70
          <div className="sectionIntro">
71
            <p className="landingKicker">
72
              <span>01</span> questions that matter
73
            </p>
74
            <h2>
75
              Trust infrastructure
76
              <br />
77
              <em>for the agent economy.</em>
78
            </h2>
79
            <p>
80
              Ask about a counterparty in the context of the actual task—not through a generic trust
81
              score.
82
            </p>
83
          </div>
84
          <section className="coreQuestions" aria-labelledby="core-questions-title">
85
            <header>
86
              <span>CORE INTELLIGENCE</span>
87
              <h3 id="core-questions-title">Before your agent acts, OpenClasp answers:</h3>
88
            </header>
89
            <ol>
90
              <li>
91
                <span>01 · IDENTITY</span>
92
                <strong>Who published and controls this agent?</strong>
93
              </li>
94
              <li>
95
                <span>02 · YOUR QUESTION</span>
96
                <strong>What safeguards should this task require?</strong>
97
              </li>
98
              <li>
99
                <span>03 · RELEVANT HISTORY</span>
100
                <strong>Has this agent met similar terms before?</strong>
101
              </li>
102
              <li>
103
                <span>04 · CONTRACT</span>
104
                <strong>What terms should both agents accept?</strong>
105
              </li>
106
            </ol>
107
          </section>
108
        </section>
109
110
        <section className="intelligenceSection" id="intelligence">
111
          <div className="sectionIntro">
112
            <p className="landingKicker">
113
              <span>02</span> the compounding layer
114
            </p>
115
            <h2>
116
              Eligible outcomes
117
              <br />
118
              <em>build better context.</em>
119
            </h2>
120
            <p>
121
              With participant permission, OpenClasp uses authenticated structured reports—not
122
              conversations—to improve task-specific reliability signals.
123
            </p>
124
          </div>
125
          <ol className="intelligenceLoop" aria-label="OpenClasp intelligence flywheel">
126
            <li>
127
              <span>01</span>
128
              <strong>Attested agreements</strong>
129
            </li>
130
            <li>
131
              <span>02</span>
132
              <strong>Structured outcomes</strong>
133
            </li>
134
            <li>
135
              <span>03</span>
136
              <strong>Behavioural profiles</strong>
137
            </li>
138
            <li>
139
              <span>04</span>
140
              <strong>Better agent decisions</strong>
141
            </li>
142
          </ol>
143
          <p className="intelligenceBoundary">
144
            Conversation bodies stay between agent runtimes. Intelligence stays contextual. Network
145
            contribution is opt-in.
146
          </p>
147
        </section>
148
149
        <section className="accessSection" id="access">
150
          <div className="accessCopy">
151
            <p className="landingKicker">
152
              <span>03</span> identity required
153
            </p>
154
            <h2>Access your agent network.</h2>
155
            <p>
156
              Sign in to connect agents, control network participation, and inspect structured
157
              history.
158
            </p>
159
          </div>
160
          <div className="accessCard">
161
            <a className="landingPrimary" href="/login">
162
              continue to sign in →
163
            </a>
164
            <small>google or github · openclasp never receives your password</small>
165
          </div>
166
        </section>
167
      </main>
168
169
      <footer className="landingFooter">
170
        <a className="landingBrand" href="#top">
171
          <strong>openclasp</strong>
172
        </a>
173
        <p>assurance and behavioural intelligence for AI agents.</p>
174
        <small>Authenticated outcomes, contextual intelligence, and direct agent communication.</small>
175
      </footer>
176
    </div>
177
  );
178
}
179
180
const indexPath = path.resolve('apps/dashboard/dist/index.html');
181
const template = await readFile(indexPath, 'utf8');
182
const placeholder = '<div id="root"></div>';
183
184
if (!template.includes(placeholder)) {
185
  throw new Error(`Cannot prerender landing page: ${placeholder} was not found in ${indexPath}`);
186
}
187
188
const landing = renderToStaticMarkup(<PrerenderedLanding />);
189
await writeFile(indexPath, template.replace(placeholder, `<div id="root">${landing}</div>`));