clauderipple 0.8.10 → 0.9.0
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.
- package/CHANGELOG.md +36 -0
- package/README.es.md +0 -4
- package/README.ja.md +0 -4
- package/README.ko.md +5 -1
- package/README.md +5 -1
- package/README.pt-BR.md +0 -4
- package/README.zh-CN.md +0 -4
- package/dist/app/package.json +1 -1
- package/dist/cli/src/codex.js +3 -1
- package/dist/cli/src/settings.js +5 -2
- package/dist/mod/.claude-plugin/plugin.json +9 -1
- package/dist/mod/hooks/cache.ts +60 -0
- package/dist/mod/hooks/compact.ts +40 -0
- package/dist/mod/hooks/handoff.ts +43 -0
- package/dist/mod/hooks/i18n.ts +2716 -0
- package/dist/mod/hooks/judge.ts +226 -0
- package/dist/mod/hooks/ladder.js +179 -0
- package/dist/mod/hooks/ladder.ts +174 -0
- package/dist/mod/hooks/modes.ts +93 -0
- package/dist/mod/hooks/register.tsx +1458 -256
- package/dist/mod/hooks/session.ts +62 -0
- package/dist/mod/hooks/settings.js +342 -0
- package/dist/mod/hooks/settings.ts +321 -0
- package/dist/mod/hooks/stats.ts +59 -0
- package/dist/mod/hooks/ui/agents.tsx +138 -0
- package/dist/mod/hooks/ui/alerts.tsx +370 -0
- package/dist/mod/hooks/ui/art.ts +628 -0
- package/dist/mod/hooks/ui/band.tsx +836 -0
- package/dist/mod/hooks/ui/kit.tsx +258 -0
- package/dist/mod/hooks/ui/log.tsx +109 -0
- package/dist/mod/hooks/ui/parts.tsx +217 -0
- package/dist/mod/hooks/ui/ripple.ts +614 -0
- package/dist/mod/hooks/ui/settings.tsx +376 -0
- package/dist/mod/hooks/ui/setup.tsx +148 -0
- package/dist/mod/hooks/ui/theme.ts +217 -0
- package/dist/mod/hooks/ui/view.ts +371 -0
- package/dist/mod/hooks/worker.ts +1 -1
- package/dist/mod/hooks/workers.ts +217 -0
- package/dist/mod/tests/register.test.tsx +1730 -0
- package/dist/mod/tests/ui.test.tsx +853 -0
- package/dist/mod/tsconfig.json +2 -1
- package/dist/mod/types/index.d.ts +320 -1
- package/dist/router/src/admin.js +170 -52
- package/dist/router/src/agents.js +24 -5
- package/dist/router/src/bootstrap.js +4 -2
- package/dist/router/src/config.js +3 -0
- package/dist/router/src/health.js +33 -0
- package/dist/router/src/index.js +1 -0
- package/dist/router/src/ingress/models.js +4 -1
- package/dist/router/src/mod-settings.js +119 -0
- package/dist/router/src/model-policy.js +6 -0
- package/dist/router/src/model-scores.js +159 -0
- package/dist/router/src/picker.js +7 -0
- package/dist/router/src/providers/chatgpt/index.js +6 -1
- package/dist/router/src/providers/chatgpt/translate.js +1 -1
- package/dist/router/src/providers/google/index.js +6 -2
- package/dist/router/src/providers/openai/index.js +4 -1
- package/dist/router/src/providers/openai/translate.js +1 -1
- package/dist/router/src/proxy.js +14 -3
- package/dist/router/src/version.js +1 -1
- package/dist/ui/app.js +908 -209
- package/dist/ui/favicon-32.png +0 -0
- package/dist/ui/favicon.svg +12 -0
- package/dist/ui/i18n.js +919 -233
- package/dist/ui/index.html +159 -87
- package/dist/ui/style.css +789 -410
- package/docs/ARCHITECTURE.md +128 -0
- package/package.json +7 -3
package/dist/ui/index.html
CHANGED
|
@@ -1,126 +1,198 @@
|
|
|
1
1
|
<title>ClaudeRipple</title>
|
|
2
2
|
<meta charset="utf-8" />
|
|
3
3
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
4
|
+
<meta name="color-scheme" content="light dark" />
|
|
4
5
|
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; connect-src 'self'; img-src 'self' data:; style-src 'self'; script-src 'self'; base-uri 'none'; form-action 'none'" />
|
|
6
|
+
<link rel="icon" href="favicon-32.png" sizes="32x32" type="image/png" />
|
|
7
|
+
<link rel="icon" href="favicon.svg" type="image/svg+xml" />
|
|
5
8
|
<link rel="stylesheet" href="style.css" />
|
|
6
9
|
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
<
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
<div class="app">
|
|
11
|
+
<nav class="sidebar">
|
|
12
|
+
<div class="nav-list">
|
|
13
|
+
<button data-view="health" class="nav-btn" type="button"><svg class="nav-icon" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 10.5h3.4l2.2-5.6 3.8 10.4 2.3-4.8H18"/></svg><span data-i18n="nav.health">Status</span></button>
|
|
14
|
+
<button data-view="slots" class="nav-btn" type="button"><svg class="nav-icon" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 7h13M13 4l3 3-3 3M17 13H4M7 10l-3 3 3 3"/></svg><span data-i18n="nav.slots">Model mapping</span></button>
|
|
15
|
+
<button data-view="providers" class="nav-btn" type="button"><svg class="nav-icon" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6.2 15.5h8.1a3.3 3.3 0 0 0 .4-6.6 4.8 4.8 0 0 0-9.2-.8 3.7 3.7 0 0 0 .7 7.4z"/></svg><span data-i18n="nav.providers">Providers</span></button>
|
|
16
|
+
<button data-view="clients" class="nav-btn" type="button"><svg class="nav-icon" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3.5" y="4" width="13" height="9.5" rx="1.6"/><path d="M1.8 16.4h16.4"/></svg><span data-i18n="nav.clients">Clients</span></button>
|
|
17
|
+
<button data-view="mod" class="nav-btn" type="button"><svg class="nav-icon" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2.5 6.5h8M14.5 6.5h3M2.5 13.5h3M9.5 13.5h8"/><circle cx="12.5" cy="6.5" r="2"/><circle cx="7.5" cy="13.5" r="2"/></svg><span class="nav-long" data-i18n="nav.mod">ClaudeRipple mod</span><span class="nav-short" data-i18n="nav.modShort">Mod</span></button>
|
|
18
|
+
<button data-view="logs" class="nav-btn" type="button"><svg class="nav-icon" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7.5 5.5H17M7.5 10H17M7.5 14.5H17"/><path d="M3.5 5.5h.01M3.5 10h.01M3.5 14.5h.01" stroke-width="2.4"/></svg><span data-i18n="nav.logs">Logs</span></button>
|
|
19
|
+
<button data-view="about" class="nav-btn" type="button"><svg class="nav-icon" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="10" cy="10" r="7.6"/><path d="M10 9.2v4.6"/><path d="M10 6.3h.01" stroke-width="2.2"/></svg><span data-i18n="nav.about">About</span></button>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="sidebar-footer"><select class="lang-select" id="lang-toggle" data-i18n-title="lang.label"></select></div>
|
|
17
22
|
</nav>
|
|
18
23
|
|
|
19
24
|
<main>
|
|
20
25
|
<section id="view-health" class="view">
|
|
21
|
-
<h1 data-i18n="health.title">Status</h1>
|
|
22
|
-
<
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
<
|
|
26
|
+
<header class="page-header"><div><h1 data-i18n="health.title">Status</h1><p class="page-subtitle" data-i18n="health.subtitle"></p></div></header>
|
|
27
|
+
<section class="section">
|
|
28
|
+
<div class="section-head"><h2 class="section-title" data-i18n="health.desktop">Claude Desktop connection</h2></div>
|
|
29
|
+
<div class="group" id="health-desktop"></div>
|
|
30
|
+
</section>
|
|
31
|
+
<section class="section">
|
|
32
|
+
<div class="section-head"><h2 class="section-title" data-i18n="health.providers">Providers</h2></div>
|
|
33
|
+
<div class="group" id="health-providers"></div>
|
|
34
|
+
</section>
|
|
35
|
+
<section class="section">
|
|
36
|
+
<div class="section-head"><h2 class="section-title" data-i18n="health.requestCount">Request count</h2></div>
|
|
37
|
+
<div class="group" id="health-requests"></div>
|
|
38
|
+
</section>
|
|
27
39
|
</section>
|
|
28
40
|
|
|
29
41
|
<section id="view-slots" class="view">
|
|
30
|
-
<
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
<
|
|
35
|
-
|
|
42
|
+
<header class="page-header">
|
|
43
|
+
<div><h1 data-i18n="slots.title">Model mapping</h1><p class="page-subtitle" data-i18n="slots.subtitle"></p></div>
|
|
44
|
+
<div class="page-actions"><span class="slots-status" id="slots-status" role="status"></span><button class="btn" id="slots-add" type="button" data-i18n="slots.add">+ Add mapping</button></div>
|
|
45
|
+
</header>
|
|
46
|
+
<section class="section">
|
|
47
|
+
<div class="map-head" aria-hidden="true"><span data-i18n="slots.th.claude"></span><span></span><span data-i18n="slots.th.target"></span><span data-i18n="slots.th.effort"></span><span></span></div>
|
|
48
|
+
<div class="group map-list" id="slots-list"></div>
|
|
49
|
+
<p class="group-footer" id="slots-summary"></p>
|
|
50
|
+
<p class="group-footer" data-i18n="slots.effortHint"></p>
|
|
51
|
+
</section>
|
|
36
52
|
</section>
|
|
37
53
|
|
|
38
54
|
<section id="view-providers" class="view providers-view">
|
|
39
|
-
<
|
|
40
|
-
<div><h1 data-i18n="providers.title">Providers</h1><p class="subtitle" data-i18n="providers.subtitle"
|
|
41
|
-
<button class="btn" id="providers-add" type="button" data-i18n="providers.add">+ Add provider</button>
|
|
42
|
-
</
|
|
55
|
+
<header class="page-header">
|
|
56
|
+
<div><h1 data-i18n="providers.title">Providers</h1><p class="page-subtitle" data-i18n="providers.subtitle"></p></div>
|
|
57
|
+
<div class="page-actions"><button class="btn" id="providers-add" type="button" data-i18n="providers.add">+ Add provider</button></div>
|
|
58
|
+
</header>
|
|
43
59
|
<div class="provider-workspace">
|
|
44
|
-
<aside class="provider-rail"
|
|
45
|
-
<div class="provider-rail-tools"
|
|
46
|
-
|
|
60
|
+
<aside class="provider-rail">
|
|
61
|
+
<div class="provider-rail-tools">
|
|
62
|
+
<input id="providers-search" type="search" data-i18n-placeholder="providers.search" placeholder="Search providers…" />
|
|
63
|
+
<button class="icon-btn" id="providers-refresh" type="button" data-i18n-title="providers.refresh" title="Test all"><svg viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M16.2 10a6.2 6.2 0 1 1-1.9-4.5"/><path d="M16.4 3.4v3.8h-3.8"/></svg></button>
|
|
64
|
+
</div>
|
|
65
|
+
<div id="providers-list" class="provider-list group" role="listbox"></div>
|
|
47
66
|
</aside>
|
|
48
67
|
<div id="provider-detail" class="provider-detail"></div>
|
|
49
68
|
</div>
|
|
50
69
|
</section>
|
|
51
70
|
|
|
52
71
|
<section id="view-clients" class="view">
|
|
53
|
-
<h1 data-i18n="clients.title">Clients</h1>
|
|
54
|
-
|
|
55
|
-
<
|
|
56
|
-
<h2 data-i18n="clients.desktop.title">Claude Desktop</h2>
|
|
57
|
-
<
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
<p class="
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
<
|
|
67
|
-
<
|
|
68
|
-
<
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
<
|
|
73
|
-
<div class="
|
|
74
|
-
<
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
<div class="
|
|
79
|
-
<div class="
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
<
|
|
90
|
-
<
|
|
91
|
-
|
|
92
|
-
|
|
72
|
+
<header class="page-header"><div><h1 data-i18n="clients.title">Clients</h1><p class="page-subtitle" data-i18n="clients.subtitle"></p></div></header>
|
|
73
|
+
|
|
74
|
+
<section class="section">
|
|
75
|
+
<div class="section-head"><h2 class="section-title" data-i18n="clients.desktop.title">Claude Desktop</h2><span class="small" id="client-picker-msg" role="status"></span></div>
|
|
76
|
+
<div class="group" id="client-picker-rows">
|
|
77
|
+
<div class="cell">
|
|
78
|
+
<div class="cell-text"><label class="cell-label" for="client-picker-toggle" data-i18n="picker.title">Model picker</label><span class="cell-sub" data-i18n="clients.desktop.help"></span></div>
|
|
79
|
+
<span class="switch"><input type="checkbox" role="switch" id="client-picker-toggle" /><span></span></span>
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
<p class="group-footer" data-i18n="picker.restartHelp"></p>
|
|
83
|
+
</section>
|
|
84
|
+
<section class="section" id="client-picker-models-card" hidden>
|
|
85
|
+
<div class="section-head"><h2 class="section-title" data-i18n="slots.pickerModels">Models in picker</h2></div>
|
|
86
|
+
<div class="group"><div class="model-checklist" id="client-picker-models"></div></div>
|
|
87
|
+
<p class="group-footer" data-i18n="slots.pickerModelsHelp"></p>
|
|
88
|
+
</section>
|
|
89
|
+
|
|
90
|
+
<section class="section">
|
|
91
|
+
<div class="section-head"><h2 class="section-title" data-i18n="slots.modelSlots">Claude Code's own model slots</h2></div>
|
|
92
|
+
<div class="group" id="client-model-slots"></div>
|
|
93
|
+
<p class="group-footer" data-i18n="slots.modelSlotsHelp"></p>
|
|
94
|
+
</section>
|
|
95
|
+
|
|
96
|
+
<section class="section">
|
|
97
|
+
<div class="section-head"><h2 class="section-title" data-i18n="clients.claudeCode.extras">Claude Code add-ons</h2></div>
|
|
98
|
+
<div class="group">
|
|
99
|
+
<div class="cell">
|
|
100
|
+
<div class="cell-text"><label class="cell-label" for="client-status-mod-toggle" data-i18n="statusMod.title">Route line and request log</label></div>
|
|
101
|
+
<span class="switch"><input type="checkbox" role="switch" id="client-status-mod-toggle" /><span></span></span>
|
|
102
|
+
</div>
|
|
103
|
+
<a class="cell link" href="#mod">
|
|
104
|
+
<div class="cell-text"><span class="cell-label" data-i18n="mod.openSettings">ClaudeRipple mod settings</span></div>
|
|
105
|
+
<svg class="chevron" viewBox="0 0 8 13" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M1.5 1.5l5 5-5 5"/></svg>
|
|
106
|
+
</a>
|
|
107
|
+
</div>
|
|
108
|
+
<p class="group-footer" data-i18n="statusMod.help"></p>
|
|
109
|
+
<div class="group stacked-group">
|
|
110
|
+
<div class="cell">
|
|
111
|
+
<div class="cell-text"><label class="cell-label" for="client-worker-tools-toggle" data-i18n="workerTools.switch">Limit worker tools</label></div>
|
|
112
|
+
<span class="switch"><input type="checkbox" role="switch" id="client-worker-tools-toggle" /><span></span></span>
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
<p class="group-footer" data-i18n="workerTools.help"></p>
|
|
116
|
+
</section>
|
|
117
|
+
|
|
118
|
+
<section class="section">
|
|
119
|
+
<div class="section-head"><h2 class="section-title" data-i18n="clients.codex.title">Codex</h2><span class="small" id="client-codex-msg" role="status"></span></div>
|
|
120
|
+
<div class="group">
|
|
121
|
+
<div class="cell">
|
|
122
|
+
<div class="cell-text"><label class="cell-label" for="client-codex-toggle" data-i18n="clients.codex.turnOn">Use ClaudeRipple in Codex</label><span class="cell-sub mono" id="client-codex-rows"></span></div>
|
|
123
|
+
<span class="switch"><input type="checkbox" role="switch" id="client-codex-toggle" /><span></span></span>
|
|
124
|
+
</div>
|
|
125
|
+
</div>
|
|
126
|
+
<p class="group-footer" data-i18n="clients.codex.help"></p>
|
|
127
|
+
<p class="group-footer" data-i18n="clients.codex.note"></p>
|
|
128
|
+
</section>
|
|
129
|
+
|
|
130
|
+
<section class="section">
|
|
131
|
+
<div class="section-head"><h2 class="section-title" data-i18n="clients.claudeCode.title">Terminal Claude Code</h2></div>
|
|
132
|
+
<div class="group" id="client-claude-code-rows"></div>
|
|
133
|
+
<p class="group-footer" data-i18n="clients.claudeCode.help"></p>
|
|
134
|
+
</section>
|
|
135
|
+
</section>
|
|
136
|
+
|
|
137
|
+
<section id="view-mod" class="view">
|
|
138
|
+
<header class="page-header">
|
|
139
|
+
<div><h1 data-i18n="nav.mod">ClaudeRipple mod</h1><p class="page-subtitle" data-i18n="mod.subtitle"></p></div>
|
|
140
|
+
<div class="page-actions"><span class="slots-status" id="mod-status" role="status"></span></div>
|
|
141
|
+
</header>
|
|
142
|
+
<section class="section" id="mod-notice" hidden></section>
|
|
143
|
+
<div id="mod-content"></div>
|
|
93
144
|
</section>
|
|
94
145
|
|
|
95
146
|
<section id="view-logs" class="view">
|
|
96
|
-
<
|
|
97
|
-
|
|
98
|
-
<
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
<div id="logs-requests-panel" role="tabpanel">
|
|
102
|
-
<div class="logs-summary-title"><strong data-i18n="logs.lastHour">Last hour</strong><span class="small" data-i18n="logs.polling">Updates every 3s</span></div>
|
|
103
|
-
<div class="logs-summary" id="logs-summary"></div>
|
|
104
|
-
<div class="toolbar logs-controls">
|
|
105
|
-
<label class="logs-filter"><span data-i18n="logs.provider">Provider</span><select id="logs-provider"><option value="" data-i18n="logs.all">All</option></select></label>
|
|
147
|
+
<header class="page-header">
|
|
148
|
+
<div><h1 data-i18n="logs.title">Logs</h1></div>
|
|
149
|
+
<div class="logs-tabs" role="tablist">
|
|
150
|
+
<button class="logs-tab active" id="logs-requests-tab" type="button" role="tab" aria-selected="true" data-i18n="logs.requests">Requests</button>
|
|
151
|
+
<button class="logs-tab" id="logs-raw-tab" type="button" role="tab" aria-selected="false" data-i18n="logs.raw">Raw logs</button>
|
|
106
152
|
</div>
|
|
107
|
-
|
|
108
|
-
|
|
153
|
+
</header>
|
|
154
|
+
<div id="logs-requests-panel" role="tabpanel">
|
|
155
|
+
<section class="section">
|
|
156
|
+
<div class="logs-header-row"><div><h2 class="section-title" data-i18n="logs.lastHour">Last hour</h2><span class="small" data-i18n="logs.polling">Updates every 3s</span></div></div>
|
|
157
|
+
<div class="group logs-summary" id="logs-summary"></div>
|
|
158
|
+
</section>
|
|
159
|
+
<section class="section">
|
|
160
|
+
<div class="logs-header-row">
|
|
161
|
+
<h2 class="section-title" data-i18n="logs.requests">Requests</h2>
|
|
162
|
+
<label class="logs-filter"><span data-i18n="logs.provider">Provider</span><select id="logs-provider"><option value="" data-i18n="logs.all">All</option></select></label>
|
|
163
|
+
</div>
|
|
164
|
+
<div class="group logs-table-card"><table id="requests-table"><thead><tr><th data-i18n="logs.th.time">Time</th><th data-i18n="logs.th.models">Model</th><th data-i18n="logs.th.effort">effort</th><th data-i18n="logs.th.input">Input</th><th data-i18n="logs.th.output">Output</th><th data-i18n="logs.th.duration">Duration</th><th data-i18n="logs.th.status">Status</th></tr></thead><tbody></tbody></table></div>
|
|
165
|
+
<div class="group empty-card" id="requests-empty" hidden data-i18n="logs.empty">No requests yet.</div>
|
|
166
|
+
</section>
|
|
109
167
|
</div>
|
|
110
168
|
<div id="logs-raw-panel" role="tabpanel" hidden>
|
|
111
|
-
<div class="toolbar"><label class="check"><input type="checkbox" id="logs-autoscroll" checked /><span data-i18n="logs.autoscroll">Auto-scroll</span></label
|
|
112
|
-
<pre id="logbox"></pre>
|
|
169
|
+
<div class="raw-toolbar"><span class="small" data-i18n="logs.rawPolling">Updates every 3s · last 200 lines</span><label class="check"><input type="checkbox" id="logs-autoscroll" checked /><span data-i18n="logs.autoscroll">Auto-scroll</span></label></div>
|
|
170
|
+
<div class="group"><pre id="logbox"></pre></div>
|
|
113
171
|
</div>
|
|
114
172
|
</section>
|
|
115
173
|
|
|
116
174
|
<section id="view-about" class="view">
|
|
117
|
-
<h1 data-i18n="about.title">About</h1>
|
|
118
|
-
<
|
|
175
|
+
<header class="page-header"><div><h1 data-i18n="about.title">About</h1></div></header>
|
|
176
|
+
<section class="section">
|
|
177
|
+
<div class="group" id="health-details"></div>
|
|
178
|
+
</section>
|
|
179
|
+
<section class="section narrow-only">
|
|
180
|
+
<div class="group">
|
|
181
|
+
<div class="cell">
|
|
182
|
+
<div class="cell-text"><span class="cell-label" data-i18n="lang.label">Language</span></div>
|
|
183
|
+
<div class="cell-value"><select class="lang-select" id="lang-about" data-i18n-title="lang.label"></select></div>
|
|
184
|
+
</div>
|
|
185
|
+
</div>
|
|
186
|
+
</section>
|
|
187
|
+
<section class="section">
|
|
188
|
+
<div class="group about-text"><p data-i18n="about.body">ClaudeRipple is an independent open-source project, not affiliated with Anthropic or OpenAI. Claude and Claude Code are trademarks of Anthropic, PBC.</p><p class="small" data-i18n="about.license">License: GPL-3.0</p></div>
|
|
189
|
+
</section>
|
|
119
190
|
</section>
|
|
120
191
|
</main>
|
|
192
|
+
</div>
|
|
121
193
|
|
|
122
|
-
<div class="toast" id="toast" role="status"></div>
|
|
123
|
-
<div class="modal-backdrop" id="modal-backdrop" hidden><section class="modal" role="dialog" aria-modal="true" aria-labelledby="modal-title"><button class="icon-btn modal-close" id="modal-close" type="button" aria-label="Close"
|
|
194
|
+
<div class="toast" id="toast" role="status" aria-live="polite"></div>
|
|
195
|
+
<div class="modal-backdrop" id="modal-backdrop" hidden><section class="modal" role="dialog" aria-modal="true" aria-labelledby="modal-title"><button class="icon-btn modal-close" id="modal-close" type="button" data-i18n-title="common.close" aria-label="Close"><svg viewBox="0 0 10 10" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" aria-hidden="true"><path d="M1.5 1.5l7 7M8.5 1.5l-7 7"/></svg></button><div id="modal-content"></div></section></div>
|
|
124
196
|
|
|
125
197
|
<script src="i18n.js"></script>
|
|
126
198
|
<script src="presets-fallback.js"></script>
|