arc-builder-kit 0.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- arc_builder_kit/__init__.py +4 -0
- arc_builder_kit/__main__.py +6 -0
- arc_builder_kit/_paths.py +47 -0
- arc_builder_kit/cli.py +277 -0
- arc_builder_kit/config/arc_testnet.facts.json +31 -0
- arc_builder_kit/doctor.py +936 -0
- arc_builder_kit/examples/agent-commerce-components/components.js +200 -0
- arc_builder_kit/examples/agent-commerce-components/index.html +120 -0
- arc_builder_kit/examples/agent-commerce-flows/flows.js +271 -0
- arc_builder_kit/examples/agent-commerce-flows/index.html +114 -0
- arc_builder_kit/examples/agent-commerce-live/commerce-live.js +190 -0
- arc_builder_kit/examples/agent-commerce-live/index.html +105 -0
- arc_builder_kit/examples/agent-commerce-review-packet/index.html +96 -0
- arc_builder_kit/examples/agent-commerce-review-packet/packet.js +125 -0
- arc_builder_kit/examples/agent-identity-profile-preview/identity.js +126 -0
- arc_builder_kit/examples/agent-identity-profile-preview/index.html +104 -0
- arc_builder_kit/examples/arc-agent-treasury-lab/index.html +152 -0
- arc_builder_kit/examples/arc-agent-treasury-lab/treasury.js +532 -0
- arc_builder_kit/examples/arc-testnet-operator-evidence/evidence.example.json +47 -0
- arc_builder_kit/examples/arc-testnet-wallet-send-gate/index.html +233 -0
- arc_builder_kit/examples/arc-testnet-wallet-send-gate/live-infrastructure-policy.example.json +59 -0
- arc_builder_kit/examples/arc-testnet-wallet-send-gate/wallet-send-gate.js +472 -0
- arc_builder_kit/examples/circle-wallet-integration/index.html +155 -0
- arc_builder_kit/examples/circle-wallet-integration/wallet-lab.js +91 -0
- arc_builder_kit/examples/job-escrow-simulator/index.html +121 -0
- arc_builder_kit/examples/job-escrow-simulator/simulator.js +162 -0
- arc_builder_kit/examples/payment-intent-demo/index.html +132 -0
- arc_builder_kit/examples/payment-intent-playground/index.html +301 -0
- arc_builder_kit/examples/payment-intent-playground/playground.js +835 -0
- arc_builder_kit/examples/payment-intent-receipt-matcher/index.html +157 -0
- arc_builder_kit/examples/payment-intent-receipt-matcher/matcher.js +877 -0
- arc_builder_kit/examples/receipt-verifier-playground/index.html +120 -0
- arc_builder_kit/examples/receipt-verifier-playground/verifier.js +226 -0
- arc_builder_kit/examples/receipt-viewer/index.html +138 -0
- arc_builder_kit/examples/receipt-viewer/receipt-viewer.js +472 -0
- arc_builder_kit/examples/transaction-status-playground/index.html +135 -0
- arc_builder_kit/examples/transaction-status-playground/status.js +518 -0
- arc_builder_kit/examples/x402-local-challenge-server/.env.example +25 -0
- arc_builder_kit/examples/x402-local-challenge-server/README.md +111 -0
- arc_builder_kit/examples/x402-local-challenge-server/server.py +711 -0
- arc_builder_kit/mcp_server.py +463 -0
- arc_builder_kit/release_packet.py +469 -0
- arc_builder_kit/templates/README.md +25 -0
- arc_builder_kit/templates/job-escrow-starter/README.md +25 -0
- arc_builder_kit/templates/job-escrow-starter/index.html +41 -0
- arc_builder_kit/templates/job-escrow-starter/index.js +14 -0
- arc_builder_kit/templates/payment-intent-starter/README.md +25 -0
- arc_builder_kit/templates/payment-intent-starter/index.html +42 -0
- arc_builder_kit/templates/payment-intent-starter/index.js +7 -0
- arc_builder_kit/templates/x402-agent-starter/README.md +29 -0
- arc_builder_kit/templates/x402-agent-starter/server.py +201 -0
- arc_builder_kit/validate_repo.py +2212 -0
- arc_builder_kit-0.2.0.dist-info/METADATA +543 -0
- arc_builder_kit-0.2.0.dist-info/RECORD +58 -0
- arc_builder_kit-0.2.0.dist-info/WHEEL +5 -0
- arc_builder_kit-0.2.0.dist-info/entry_points.txt +3 -0
- arc_builder_kit-0.2.0.dist-info/licenses/LICENSE +21 -0
- arc_builder_kit-0.2.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<title>Arc Payment Intent Playground · Arc MCP Builder Assistant</title>
|
|
7
|
+
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0' y1='0' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%232563eb'/%3E%3Cstop offset='1' stop-color='%2306b6d4'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width='64' height='64' rx='16' fill='url(%23g)'/%3E%3Ctext x='50%25' y='55%25' text-anchor='middle' font-family='Inter,Arial,sans-serif' font-size='38' font-weight='900' fill='white'%3EA%3C/text%3E%3C/svg%3E" />
|
|
8
|
+
<meta name="description" content="Interactive local-only Arc payment-intent playground with reviewable JSON, explicit human approval states, and no wallet connection." />
|
|
9
|
+
<meta name="author" content="Arc MCP Builder Assistant contributors" />
|
|
10
|
+
<meta name="robots" content="index,follow" />
|
|
11
|
+
<meta name="theme-color" content="#05060a" />
|
|
12
|
+
<meta name="color-scheme" content="dark" />
|
|
13
|
+
<meta name="referrer" content="no-referrer" />
|
|
14
|
+
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; object-src 'none'; base-uri 'none'; form-action 'none'; upgrade-insecure-requests" />
|
|
15
|
+
<link rel="canonical" href="https://anstrays.github.io/arc-mcp-builder-assistant/examples/payment-intent-playground/" />
|
|
16
|
+
<meta property="og:title" content="Arc Payment Intent Playground" />
|
|
17
|
+
<meta property="og:description" content="Local-only interactive playground for AI-prepared, human-approved USDC payment intents on Arc." />
|
|
18
|
+
<meta property="og:type" content="website" />
|
|
19
|
+
<style>
|
|
20
|
+
:root {
|
|
21
|
+
color-scheme: dark;
|
|
22
|
+
--bg: #05060a;
|
|
23
|
+
--panel: rgba(10, 12, 24, .82);
|
|
24
|
+
--panel-2: rgba(255,255,255,.055);
|
|
25
|
+
--text: #f7f7ff;
|
|
26
|
+
--muted: #cbd2ff;
|
|
27
|
+
--soft: #8e95bc;
|
|
28
|
+
--line: rgba(255,255,255,.14);
|
|
29
|
+
--blue: #8ea2ff;
|
|
30
|
+
--cyan: #5eead4;
|
|
31
|
+
--lime: #d9ff72;
|
|
32
|
+
font-family: Inter, ui-sans-serif, system-ui, -apple-system, Segoe UI, sans-serif;
|
|
33
|
+
}
|
|
34
|
+
* { box-sizing: border-box; }
|
|
35
|
+
body { margin: 0; min-height: 100vh; background: radial-gradient(circle at top left, rgba(38,59,255,.76) 0, #080914 34%, var(--bg) 100%); color: var(--text); padding: 32px 0; }
|
|
36
|
+
main { width: min(1180px, calc(100vw - 32px)); margin: 0 auto; display: grid; gap: 18px; }
|
|
37
|
+
a { color: inherit; }
|
|
38
|
+
a:focus-visible,
|
|
39
|
+
button:focus-visible,
|
|
40
|
+
input:focus-visible,
|
|
41
|
+
textarea:focus-visible,
|
|
42
|
+
select:focus-visible { outline: 2px solid var(--cyan); outline-offset: 3px; border-radius: 8px; }
|
|
43
|
+
.breadcrumb { margin: 0 0 4px; font-size: 13px; color: var(--soft); }
|
|
44
|
+
.breadcrumb a { color: var(--muted); text-decoration: underline; text-underline-offset: 3px; }
|
|
45
|
+
.card { border: 1px solid var(--line); background: var(--panel); border-radius: 24px; padding: 24px; box-shadow: 0 24px 80px rgba(0,0,0,.35); }
|
|
46
|
+
.eyebrow { color: var(--blue); text-transform: uppercase; letter-spacing: .16em; font-size: 12px; font-weight: 800; }
|
|
47
|
+
h1 { margin: 8px 0 10px; font-size: clamp(34px, 6vw, 72px); line-height: .95; letter-spacing: -.05em; }
|
|
48
|
+
h2 { margin: 8px 0 12px; font-size: clamp(24px, 3vw, 36px); letter-spacing: -.035em; }
|
|
49
|
+
p { color: var(--muted); line-height: 1.65; }
|
|
50
|
+
.grid { display: grid; grid-template-columns: minmax(280px, .95fr) minmax(320px, 1.05fr); gap: 18px; align-items: start; }
|
|
51
|
+
main > *, .grid > * { min-width: 0; }
|
|
52
|
+
.form-grid { display: grid; gap: 14px; }
|
|
53
|
+
label { display: grid; gap: 7px; color: var(--muted); font-size: 14px; }
|
|
54
|
+
input, textarea, select { width: 100%; border: 1px solid var(--line); border-radius: 14px; background: rgba(0,0,0,.24); color: var(--text); padding: 12px 13px; font: inherit; }
|
|
55
|
+
textarea { min-height: 86px; resize: vertical; }
|
|
56
|
+
.two { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
|
|
57
|
+
.actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 4px; }
|
|
58
|
+
button { border: 0; border-radius: 999px; padding: 13px 18px; font-weight: 900; cursor: pointer; background: var(--text); color: #080914; }
|
|
59
|
+
button.secondary { background: rgba(255,255,255,.1); color: var(--text); border: 1px solid var(--line); }
|
|
60
|
+
button.warn { background: rgba(255,121,121,.18); color: #ffd2d2; border: 1px solid rgba(255,121,121,.35); }
|
|
61
|
+
.pill-row { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 14px; }
|
|
62
|
+
.pill { border: 1px solid var(--line); background: rgba(255,255,255,.06); color: #dce2ff; border-radius: 999px; padding: 8px 11px; font-size: 13px; }
|
|
63
|
+
.status { display: inline-flex; align-items: center; gap: 8px; border: 1px solid rgba(94,234,212,.3); background: rgba(94,234,212,.08); color: #d9fffb; border-radius: 999px; padding: 9px 12px; font-weight: 800; }
|
|
64
|
+
.status::before { content: ""; width: 9px; height: 9px; border-radius: 999px; background: var(--cyan); box-shadow: 0 0 18px rgba(94,234,212,.8); }
|
|
65
|
+
.json-preview { white-space: pre-wrap; overflow: auto; border: 1px solid rgba(255,255,255,.1); border-radius: 16px; padding: 14px; background: rgba(0,0,0,.28); color: #d9fffb; font-size: 13px; line-height: 1.55; min-height: 280px; }
|
|
66
|
+
.json-preview.compact { min-height: 170px; }
|
|
67
|
+
.status-log { display: grid; gap: 10px; margin-top: 14px; }
|
|
68
|
+
.status-log div { border: 1px solid rgba(255,255,255,.1); border-radius: 14px; padding: 12px; color: var(--muted); background: var(--panel-2); }
|
|
69
|
+
.status-log strong { color: var(--text); }
|
|
70
|
+
.status-state-list { display: grid; gap: 10px; margin: 14px 0 0; padding: 0; list-style: none; }
|
|
71
|
+
.status-state-list li { border: 1px solid rgba(255,255,255,.1); border-radius: 14px; padding: 12px; color: var(--muted); background: var(--panel-2); }
|
|
72
|
+
.status-state-list li.active { border-color: rgba(94,234,212,.46); background: rgba(94,234,212,.11); color: #e9fffb; }
|
|
73
|
+
.status-state-list strong { color: var(--text); }
|
|
74
|
+
.notice { border-color: rgba(94,234,212,.32); background: rgba(94,234,212,.08); }
|
|
75
|
+
.danger { border-color: rgba(255,121,121,.32); background: rgba(255,121,121,.08); }
|
|
76
|
+
.metric-grid { display: grid; gap: 10px; grid-template-columns: repeat(3, minmax(0, 1fr)); margin: 14px 0; }
|
|
77
|
+
.metric { border: 1px solid rgba(255,255,255,.1); border-radius: 16px; background: var(--panel-2); padding: 13px; }
|
|
78
|
+
.metric span { display: block; color: var(--soft); font-size: 12px; text-transform: uppercase; letter-spacing: .12em; font-weight: 800; }
|
|
79
|
+
.metric strong { display: block; margin-top: 7px; color: var(--text); overflow-wrap: anywhere; }
|
|
80
|
+
.mini-list { margin: 12px 0 0; padding-left: 18px; color: var(--muted); line-height: 1.6; }
|
|
81
|
+
@media (max-width: 860px) {
|
|
82
|
+
body { padding: 18px 0; }
|
|
83
|
+
.grid, .two, .metric-grid { grid-template-columns: 1fr; }
|
|
84
|
+
}
|
|
85
|
+
@media (prefers-reduced-motion: reduce) {
|
|
86
|
+
* { animation-duration: 0s !important; transition: none !important; }
|
|
87
|
+
}
|
|
88
|
+
</style>
|
|
89
|
+
<script src="./playground.js" defer></script>
|
|
90
|
+
</head>
|
|
91
|
+
<body>
|
|
92
|
+
<main>
|
|
93
|
+
<p class="breadcrumb"><a href="../../index.html">← Back to Arc MCP Builder Assistant</a></p>
|
|
94
|
+
<section class="card" aria-labelledby="playground-title">
|
|
95
|
+
<div class="eyebrow">Local-only interactive prototype</div>
|
|
96
|
+
<h1 id="playground-title">Payment Intent Playground</h1>
|
|
97
|
+
<p>Create a reviewable USDC payment intent from agent-provided context, inspect the JSON, and move it through explicit human approval states. This demo runs only in the browser. It does not connect to a wallet, broadcast transactions, talk to any backend, or request private keys.</p>
|
|
98
|
+
<div class="pill-row" aria-label="Safety properties">
|
|
99
|
+
<span class="pill">No wallet connection</span>
|
|
100
|
+
<span class="pill">No backend calls</span>
|
|
101
|
+
<span class="pill">Human keeps approval control</span>
|
|
102
|
+
<span class="pill">Reviewable JSON first</span>
|
|
103
|
+
</div>
|
|
104
|
+
</section>
|
|
105
|
+
|
|
106
|
+
<section class="grid" aria-label="Payment intent builder">
|
|
107
|
+
<article class="card" aria-labelledby="form-title">
|
|
108
|
+
<div class="eyebrow">Intent form</div>
|
|
109
|
+
<h2 id="form-title">Agent request</h2>
|
|
110
|
+
<form id="intent-form" class="form-grid">
|
|
111
|
+
<label>Agent name
|
|
112
|
+
<input id="agent" name="agent" autocomplete="off" value="Research Agent" />
|
|
113
|
+
</label>
|
|
114
|
+
<label>Recipient
|
|
115
|
+
<input id="recipient" name="recipient" autocomplete="off" value="0x1111111111111111111111111111111111111111" />
|
|
116
|
+
</label>
|
|
117
|
+
<div class="two">
|
|
118
|
+
<label>Asset
|
|
119
|
+
<select id="asset" name="asset">
|
|
120
|
+
<option value="USDC">USDC</option>
|
|
121
|
+
<option value="EURC">EURC</option>
|
|
122
|
+
</select>
|
|
123
|
+
</label>
|
|
124
|
+
<label>Amount
|
|
125
|
+
<input id="amount" name="amount" inputmode="decimal" value="5.00" />
|
|
126
|
+
</label>
|
|
127
|
+
</div>
|
|
128
|
+
<label>Memo
|
|
129
|
+
<textarea id="memo" name="memo">Paid data/API task for Arc market research report.</textarea>
|
|
130
|
+
</label>
|
|
131
|
+
<label>Expiry
|
|
132
|
+
<input id="expiry" name="expiry" type="datetime-local" />
|
|
133
|
+
</label>
|
|
134
|
+
<div class="actions" aria-label="Intent state controls">
|
|
135
|
+
<button type="button" id="prepare">Prepare intent</button>
|
|
136
|
+
<button type="button" id="approve" class="secondary">Approve manually</button>
|
|
137
|
+
<button type="button" id="submit" class="secondary">Mark submitted</button>
|
|
138
|
+
<button type="button" id="reset" class="warn">Reset</button>
|
|
139
|
+
</div>
|
|
140
|
+
</form>
|
|
141
|
+
</article>
|
|
142
|
+
|
|
143
|
+
<article class="card" aria-labelledby="json-title">
|
|
144
|
+
<div class="eyebrow">Review before wallet action</div>
|
|
145
|
+
<h2 id="json-title">Intent JSON</h2>
|
|
146
|
+
<p>Status: <span id="status-pill" class="status">draft</span></p>
|
|
147
|
+
<pre id="intent-json" class="json-preview" aria-live="polite"></pre>
|
|
148
|
+
</article>
|
|
149
|
+
</section>
|
|
150
|
+
|
|
151
|
+
<section class="card notice" id="arc-status-panel" aria-labelledby="arc-status-title">
|
|
152
|
+
<div class="eyebrow">Read-only RPC probe</div>
|
|
153
|
+
<h2 id="arc-status-title">Arc Testnet status</h2>
|
|
154
|
+
<p>This panel keeps the playground grounded in the expected Arc Testnet configuration while staying browser-local. It does not connect to a wallet, call a backend, or broadcast transactions.</p>
|
|
155
|
+
<div class="metric-grid" aria-label="Arc Testnet constants">
|
|
156
|
+
<div class="metric">
|
|
157
|
+
<span>Expected chain ID</span>
|
|
158
|
+
<strong id="arc-chain-id">5042002 (0x4cef52)</strong>
|
|
159
|
+
</div>
|
|
160
|
+
<div class="metric">
|
|
161
|
+
<span>RPC URL</span>
|
|
162
|
+
<strong id="arc-rpc-url">https://rpc.testnet.arc.network</strong>
|
|
163
|
+
</div>
|
|
164
|
+
<div class="metric">
|
|
165
|
+
<span>Network mode</span>
|
|
166
|
+
<strong id="arc-readonly-state">Read-only / no broadcast</strong>
|
|
167
|
+
</div>
|
|
168
|
+
</div>
|
|
169
|
+
<pre id="arc-safety-json" class="json-preview compact" aria-live="polite"></pre>
|
|
170
|
+
</section>
|
|
171
|
+
|
|
172
|
+
<section class="card notice" id="unit-preview-panel" aria-labelledby="unit-preview-title">
|
|
173
|
+
<div class="eyebrow">Amount units before signing</div>
|
|
174
|
+
<h2 id="unit-preview-title">USDC unit preview</h2>
|
|
175
|
+
<p>Arc uses USDC as native gas, but ERC-20 USDC transfers still use 6-decimal token units. This local preview keeps those unit systems visible before any future wallet PR.</p>
|
|
176
|
+
<div class="metric-grid" aria-label="USDC unit conversion preview">
|
|
177
|
+
<div class="metric">
|
|
178
|
+
<span>ERC-20 base units</span>
|
|
179
|
+
<strong id="erc20-base-units">0</strong>
|
|
180
|
+
</div>
|
|
181
|
+
<div class="metric">
|
|
182
|
+
<span>ERC-20 decimals</span>
|
|
183
|
+
<strong id="erc20-decimals">6</strong>
|
|
184
|
+
</div>
|
|
185
|
+
<div class="metric">
|
|
186
|
+
<span>Native gas decimals</span>
|
|
187
|
+
<strong id="native-gas-decimals">18</strong>
|
|
188
|
+
</div>
|
|
189
|
+
</div>
|
|
190
|
+
<ul class="mini-list">
|
|
191
|
+
<li>ERC-20 USDC uses 6 decimals for token transfer amounts.</li>
|
|
192
|
+
<li>Native gas accounting uses 18 decimals and must not be reused for ERC-20 transfer amounts.</li>
|
|
193
|
+
<li>This panel is browser-local math only: no wallet, backend, RPC write, signing, or broadcast.</li>
|
|
194
|
+
</ul>
|
|
195
|
+
</section>
|
|
196
|
+
|
|
197
|
+
<section class="card danger" id="wallet-guard-panel" aria-labelledby="wallet-guard-title">
|
|
198
|
+
<div class="eyebrow">Wallet guardrails</div>
|
|
199
|
+
<h2 id="wallet-guard-title">Wallet action unavailable</h2>
|
|
200
|
+
<p>Signing stays disabled until a separate testnet-only wallet PR proves every guard. The current playground only explains why a real wallet action is blocked.</p>
|
|
201
|
+
<div class="metric-grid" aria-label="Read-only wallet preview state">
|
|
202
|
+
<div class="metric">
|
|
203
|
+
<span>Provider</span>
|
|
204
|
+
<strong id="wallet-provider-state">Not detected</strong>
|
|
205
|
+
</div>
|
|
206
|
+
<div class="metric">
|
|
207
|
+
<span>Connected address</span>
|
|
208
|
+
<strong id="wallet-address-state">Not requested</strong>
|
|
209
|
+
</div>
|
|
210
|
+
<div class="metric">
|
|
211
|
+
<span>Chain gate</span>
|
|
212
|
+
<strong id="wallet-chain-state">Blocked</strong>
|
|
213
|
+
</div>
|
|
214
|
+
</div>
|
|
215
|
+
<button type="button" id="wallet-action-button" disabled aria-disabled="true">Connect wallet / sign intent disabled</button>
|
|
216
|
+
<ul id="wallet-guard-reasons" class="mini-list" aria-live="polite"></ul>
|
|
217
|
+
</section>
|
|
218
|
+
|
|
219
|
+
<section class="card notice" id="validation-summary-panel" aria-labelledby="validation-summary-title">
|
|
220
|
+
<div class="eyebrow">Local readiness checks</div>
|
|
221
|
+
<h2 id="validation-summary-title">Validation summary</h2>
|
|
222
|
+
<p>These checks summarize whether the local intent is ready for human review. They are advisory browser-only checks and never connect to a wallet or network.</p>
|
|
223
|
+
<ul id="validation-summary-list" class="mini-list" aria-live="polite"></ul>
|
|
224
|
+
</section>
|
|
225
|
+
|
|
226
|
+
<section class="card notice" id="status-state-panel" aria-labelledby="status-state-title">
|
|
227
|
+
<div class="eyebrow">Review-safe state machine</div>
|
|
228
|
+
<h2 id="status-state-title">Status states</h2>
|
|
229
|
+
<p>The playground uses explicit local-only states so reviewers can tell what is real today and what still needs a separate Arc Testnet wallet PR.</p>
|
|
230
|
+
<ol id="status-state-list" class="status-state-list" aria-live="polite">
|
|
231
|
+
<li data-status-step="draft"><strong>draft</strong> — intent exists but is not approved.</li>
|
|
232
|
+
<li data-status-step="ready_for_review"><strong>ready_for_review</strong> — fields are valid enough for human review.</li>
|
|
233
|
+
<li data-status-step="approved_local"><strong>approved_local</strong> — human approved the local exercise only.</li>
|
|
234
|
+
<li data-status-step="final_review_confirmed"><strong>final_review_confirmed</strong> — final local confirmation recorded without a wallet request.</li>
|
|
235
|
+
<li data-status-step="blocked_wallet_unavailable"><strong>blocked_wallet_unavailable</strong> — signing remains disabled by guardrails.</li>
|
|
236
|
+
</ol>
|
|
237
|
+
</section>
|
|
238
|
+
|
|
239
|
+
<section class="card notice" id="signing-preflight-panel" aria-labelledby="signing-preflight-title">
|
|
240
|
+
<div class="eyebrow">Manual copy for wallet PR review</div>
|
|
241
|
+
<h2 id="signing-preflight-title">Signing preflight report</h2>
|
|
242
|
+
<p>This generated report summarizes the local intent, guard failures, and readiness checks that a future testnet-only wallet PR must satisfy before any signing path is enabled.</p>
|
|
243
|
+
<button type="button" id="copy-preflight-report" class="secondary" aria-describedby="signing-preflight-copy-help">Copy preflight report</button>
|
|
244
|
+
<p id="signing-preflight-copy-help" class="fine-print">Copies the local JSON report to your clipboard only. No wallet, network, or backend call is made.</p>
|
|
245
|
+
<pre id="signing-preflight-report" class="json-preview compact" aria-live="polite"></pre>
|
|
246
|
+
</section>
|
|
247
|
+
|
|
248
|
+
<section class="card notice" id="unsigned-transaction-panel" aria-labelledby="unsigned-transaction-title">
|
|
249
|
+
<div class="eyebrow">Unsigned transaction draft</div>
|
|
250
|
+
<h2 id="unsigned-transaction-title">ERC-20 transfer payload preview</h2>
|
|
251
|
+
<p>This local preview shows the deterministic Arc Testnet USDC transaction fields a future wallet PR would ask the user to review. It is unsigned JSON only: no wallet request, gas estimate, simulation, RPC write, signing, or broadcast.</p>
|
|
252
|
+
<pre id="unsigned-transaction-draft" class="json-preview compact" aria-live="polite"></pre>
|
|
253
|
+
</section>
|
|
254
|
+
|
|
255
|
+
<section class="card notice" id="draft-consistency-panel" aria-labelledby="draft-consistency-title">
|
|
256
|
+
<div class="eyebrow">Payload consistency check</div>
|
|
257
|
+
<h2 id="draft-consistency-title">Unsigned draft decodes back to intent</h2>
|
|
258
|
+
<p>This local verifier decodes the ERC-20 calldata and compares token target, native value, chain ID, recipient, and base units against the current reviewed intent before any future wallet handoff.</p>
|
|
259
|
+
<ul id="draft-consistency-list" class="mini-list" aria-live="polite"></ul>
|
|
260
|
+
</section>
|
|
261
|
+
|
|
262
|
+
<section class="card danger" id="wallet-handoff-readiness-panel" aria-labelledby="wallet-handoff-readiness-title">
|
|
263
|
+
<div class="eyebrow">Wallet handoff readiness</div>
|
|
264
|
+
<h2 id="wallet-handoff-readiness-title">Send PR blocker manifest</h2>
|
|
265
|
+
<p>This local manifest lists every guard a separate wallet/send PR must satisfy before it can enable any wallet request. It remains a no-transaction checklist: no provider call, chain switch, signing, gas estimate, simulation, or broadcast.</p>
|
|
266
|
+
<ul id="wallet-handoff-readiness-list" class="mini-list" aria-live="polite"></ul>
|
|
267
|
+
<pre id="wallet-handoff-readiness-json" class="json-preview compact" aria-live="polite"></pre>
|
|
268
|
+
</section>
|
|
269
|
+
|
|
270
|
+
<section class="card danger" id="final-confirmation-panel" aria-labelledby="final-confirmation-title">
|
|
271
|
+
<div class="eyebrow">Final review gate</div>
|
|
272
|
+
<h2 id="final-confirmation-title">Final confirmation, still no transaction</h2>
|
|
273
|
+
<p>This is the last human confirmation step a future testnet send PR should reuse before opening any wallet prompt. Today it only records local review intent and keeps transaction requests disabled.</p>
|
|
274
|
+
<label>
|
|
275
|
+
<input id="final-confirmation-checkbox" name="final-confirmation-checkbox" type="checkbox" />
|
|
276
|
+
I reviewed the frozen recipient, amount, memo, expiry, Arc Testnet chain, token address, and guard reasons.
|
|
277
|
+
</label>
|
|
278
|
+
<button type="button" id="final-confirmation-button" class="secondary" disabled aria-disabled="true">Confirm final review locally</button>
|
|
279
|
+
<ul id="final-confirmation-reasons" class="mini-list" aria-live="polite"></ul>
|
|
280
|
+
</section>
|
|
281
|
+
|
|
282
|
+
<section class="grid" aria-label="Status and safety details">
|
|
283
|
+
<article class="card notice" aria-labelledby="timeline-title">
|
|
284
|
+
<div class="eyebrow">Local status timeline</div>
|
|
285
|
+
<h2 id="timeline-title">What happened</h2>
|
|
286
|
+
<div id="status-log" class="status-log" aria-live="polite"></div>
|
|
287
|
+
</article>
|
|
288
|
+
<article class="card danger" aria-labelledby="boundaries-title">
|
|
289
|
+
<div class="eyebrow">Trust boundaries</div>
|
|
290
|
+
<h2 id="boundaries-title">Still not a wallet app</h2>
|
|
291
|
+
<ul class="mini-list">
|
|
292
|
+
<li>The agent can prepare and explain an intent, not spend funds.</li>
|
|
293
|
+
<li>Every approval and final-confirmation state in this playground is local UI state.</li>
|
|
294
|
+
<li>Real Arc Testnet integration must re-check chain, wallet, and contract details through current Arc docs/MCP.</li>
|
|
295
|
+
<li>Use the <a href="../../docs/view.html#arc-builder-readiness-checklist.md">builder readiness checklist</a> before adding any transaction path.</li>
|
|
296
|
+
</ul>
|
|
297
|
+
</article>
|
|
298
|
+
</section>
|
|
299
|
+
</main>
|
|
300
|
+
</body>
|
|
301
|
+
</html>
|