@draig/lexis-two 1.0.2 → 1.0.3

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.
Files changed (89) hide show
  1. package/package.json +1 -1
  2. package/.claude-plugin/marketplace.json +0 -29
  3. package/.claude-plugin/plugin.json +0 -9
  4. package/.codex-plugin/plugin.json +0 -31
  5. package/.env.example +0 -8
  6. package/.github/FUNDING.yml +0 -1
  7. package/.github/copilot-instructions.md +0 -47
  8. package/.github/plugin/marketplace.json +0 -20
  9. package/.github/plugin/plugin.json +0 -16
  10. package/.github/workflows/deploy-site.yml +0 -53
  11. package/.github/workflows/test.yml +0 -29
  12. package/AUDIT.md +0 -74
  13. package/SPECXIS.md +0 -576
  14. package/benchmarks/README.md +0 -114
  15. package/benchmarks/arms/baseline.js +0 -2
  16. package/benchmarks/arms/caveman-SKILL.md +0 -67
  17. package/benchmarks/arms/caveman.js +0 -8
  18. package/benchmarks/arms/lexis-two.js +0 -10
  19. package/benchmarks/arms/ponytail.js +0 -6
  20. package/benchmarks/behavior.js +0 -58
  21. package/benchmarks/behavior.yaml +0 -40
  22. package/benchmarks/benchmark-local.py +0 -156
  23. package/benchmarks/benchmark-opencode-go.js +0 -294
  24. package/benchmarks/correctness.js +0 -294
  25. package/benchmarks/lib/aggregate-opencode-go.js +0 -103
  26. package/benchmarks/lib/load-env.js +0 -31
  27. package/benchmarks/lib/opencode-go-client.js +0 -151
  28. package/benchmarks/loc.js +0 -13
  29. package/benchmarks/opencode-go-models.json +0 -31
  30. package/benchmarks/promptfooconfig.yaml +0 -41
  31. package/benchmarks/prompts.json +0 -15
  32. package/benchmarks/render-opencode-go-report.js +0 -28
  33. package/benchmarks/results/2026-06-15-llama3.2-local.md +0 -76
  34. package/benchmarks/results/2026-06-16-opencode-go.md +0 -56
  35. package/benchmarks/results/opencode-go-2026-06-16-report.html +0 -226
  36. package/benchmarks/results/opencode-go-2026-06-16.json +0 -1339
  37. package/docs/assets/lexis-two-nobg.png +0 -0
  38. package/docs/assets/logo.png +0 -0
  39. package/docs/assets/logo.svg +0 -4
  40. package/docs/portability.md +0 -147
  41. package/docs/site.md +0 -52
  42. package/gemini-extension.json +0 -7
  43. package/pi-extension/index.js +0 -161
  44. package/pi-extension/package.json +0 -8
  45. package/pi-extension/test/extension.test.js +0 -89
  46. package/pi-extension/test/helpers.test.js +0 -35
  47. package/scripts/check-rule-copies.js +0 -82
  48. package/site/astro.config.mjs +0 -18
  49. package/site/package-lock.json +0 -4913
  50. package/site/package.json +0 -14
  51. package/site/public/CNAME +0 -1
  52. package/site/public/assets/lexis-two-nobg.png +0 -0
  53. package/site/public/assets/logo.png +0 -0
  54. package/site/public/assets/logo.svg +0 -4
  55. package/site/public/robots.txt +0 -4
  56. package/site/src/components/Adapt.astro +0 -33
  57. package/site/src/components/Benchmarks.astro +0 -232
  58. package/site/src/components/Commands.astro +0 -33
  59. package/site/src/components/Ecosystem.astro +0 -30
  60. package/site/src/components/Example.astro +0 -77
  61. package/site/src/components/Footer.astro +0 -28
  62. package/site/src/components/Header.astro +0 -87
  63. package/site/src/components/Hero.astro +0 -58
  64. package/site/src/components/Home.astro +0 -46
  65. package/site/src/components/Hosts.astro +0 -62
  66. package/site/src/components/Install.astro +0 -139
  67. package/site/src/components/LanguageSwitcher.astro +0 -82
  68. package/site/src/components/Philosophy.astro +0 -23
  69. package/site/src/components/Stacks.astro +0 -33
  70. package/site/src/components/Suggested.astro +0 -39
  71. package/site/src/data/opencode-go-benchmark.json +0 -230
  72. package/site/src/i18n/en.ts +0 -155
  73. package/site/src/i18n/es.ts +0 -158
  74. package/site/src/i18n/index.ts +0 -14
  75. package/site/src/layouts/Layout.astro +0 -114
  76. package/site/src/pages/benchmarks.astro +0 -4
  77. package/site/src/pages/es/benchmarks.astro +0 -4
  78. package/site/src/pages/es/index.astro +0 -10
  79. package/site/src/pages/index.astro +0 -10
  80. package/site/src/styles/global.css +0 -780
  81. package/site/tsconfig.json +0 -3
  82. package/tests/behavior.test.js +0 -80
  83. package/tests/commands.test.js +0 -40
  84. package/tests/copilot-plugin.test.js +0 -33
  85. package/tests/correctness.test.js +0 -191
  86. package/tests/gemini-extension.test.js +0 -78
  87. package/tests/hooks-windows.test.js +0 -48
  88. package/tests/hooks.test.js +0 -177
  89. package/tests/opencode-plugin.test.js +0 -64
package/site/package.json DELETED
@@ -1,14 +0,0 @@
1
- {
2
- "name": "lexis-two-site",
3
- "type": "module",
4
- "version": "1.0.0",
5
- "scripts": {
6
- "dev": "astro dev",
7
- "build": "astro build",
8
- "preview": "astro preview"
9
- },
10
- "dependencies": {
11
- "@astrojs/sitemap": "^3.7.3",
12
- "astro": "^6.4.7"
13
- }
14
- }
package/site/public/CNAME DELETED
@@ -1 +0,0 @@
1
- lexis-two.excelso.xyz
Binary file
@@ -1,4 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 220 48" role="img" aria-label="Lexis-Two">
2
- <rect x="0" y="8" width="220" height="32" rx="4" fill="#141816" stroke="#7cba8a" stroke-width="1.5"/>
3
- <text x="110" y="30" fill="#7cba8a" font-family="ui-monospace, monospace" font-size="14" font-weight="600" text-anchor="middle" letter-spacing="0.12em">LEXIS-TWO</text>
4
- </svg>
@@ -1,4 +0,0 @@
1
- User-agent: *
2
- Allow: /
3
-
4
- Sitemap: https://lexis-two.excelso.xyz/sitemap-index.xml
@@ -1,33 +0,0 @@
1
- ---
2
- interface Props {
3
- adapt: {
4
- title: string;
5
- subtitle: string;
6
- cards: readonly {
7
- title: string;
8
- desc: string;
9
- }[];
10
- };
11
- }
12
-
13
- const { adapt } = Astro.props;
14
- ---
15
-
16
- <section id="adapt">
17
- <div class="wrap">
18
- <div class="section-head">
19
- <h2>{adapt.title}</h2>
20
- <p>{adapt.subtitle}</p>
21
- </div>
22
- <div class="adapt-list">
23
- {
24
- adapt.cards.map((card) => (
25
- <article class="adapt-card">
26
- <h3>{card.title}</h3>
27
- <p set:html={card.desc} />
28
- </article>
29
- ))
30
- }
31
- </div>
32
- </div>
33
- </section>
@@ -1,232 +0,0 @@
1
- ---
2
- import benchmarkData from "../data/opencode-go-benchmark.json";
3
-
4
- interface Props {
5
- benchmarks: {
6
- title: string;
7
- subtitle: string;
8
- runDate: string;
9
- runsPerCell: string;
10
- source: string;
11
- totalLoc: string;
12
- reduction: string;
13
- time: string;
14
- byTask: string;
15
- summary: string;
16
- colModel: string;
17
- colBaseline: string;
18
- colLexis: string;
19
- colReduction: string;
20
- colCorrect: string;
21
- regenerate: string;
22
- };
23
- }
24
-
25
- const { benchmarks } = Astro.props;
26
- const chartPayload = JSON.stringify(benchmarkData);
27
- ---
28
-
29
- <section id="benchmarks" class="benchmark-page">
30
- <div class="wrap">
31
- <div class="section-head benchmark-head">
32
- <h2>{benchmarks.title}</h2>
33
- <p>{benchmarks.subtitle}</p>
34
- <p class="benchmark-meta">
35
- {benchmarks.runDate}: <strong>{benchmarkData.date}</strong>
36
- · {benchmarkData.repeat} {benchmarks.runsPerCell}
37
- · {benchmarks.source}: <code>{benchmarkData.source}</code>
38
- </p>
39
- </div>
40
-
41
- <div class="benchmark-grid">
42
- <section class="benchmark-card wide" aria-labelledby="chart-total-loc-title">
43
- <h3 id="chart-total-loc-title">{benchmarks.totalLoc}</h3>
44
- <canvas id="chart-total-loc" height="280"></canvas>
45
- </section>
46
-
47
- <section class="benchmark-card" aria-labelledby="chart-reduction-title">
48
- <h3 id="chart-reduction-title">{benchmarks.reduction}</h3>
49
- <canvas id="chart-reduction" height="280"></canvas>
50
- </section>
51
-
52
- <section class="benchmark-card" aria-labelledby="chart-time-title">
53
- <h3 id="chart-time-title">{benchmarks.time}</h3>
54
- <canvas id="chart-time" height="280"></canvas>
55
- </section>
56
-
57
- <section class="benchmark-card wide" aria-labelledby="chart-by-task-title">
58
- <h3 id="chart-by-task-title">{benchmarks.byTask}</h3>
59
- <canvas id="chart-by-task" height="280"></canvas>
60
- </section>
61
-
62
- <section class="benchmark-card wide" aria-labelledby="summary-table-title">
63
- <h3 id="summary-table-title">{benchmarks.summary}</h3>
64
- <div class="table-wrap">
65
- <table id="summary-table">
66
- <thead>
67
- <tr>
68
- <th scope="col">{benchmarks.colModel}</th>
69
- <th scope="col">{benchmarks.colBaseline}</th>
70
- <th scope="col">{benchmarks.colLexis}</th>
71
- <th scope="col">{benchmarks.colReduction}</th>
72
- <th scope="col">{benchmarks.colCorrect}</th>
73
- </tr>
74
- </thead>
75
- <tbody></tbody>
76
- </table>
77
- </div>
78
- </section>
79
- </div>
80
-
81
- <p class="benchmark-foot">
82
- {benchmarks.regenerate}
83
- <code>npm run benchmark:opencode-go &amp;&amp; npm run benchmark:report</code>
84
- </p>
85
- </div>
86
- </section>
87
-
88
- <script define:vars={{ chartPayload, benchmarks }} is:inline>
89
- (function () {
90
- const CHART_JS_URL = "https://cdn.jsdelivr.net/npm/chart.js@4.4.1/dist/chart.umd.min.js";
91
- const section = document.getElementById("benchmarks");
92
- if (!section) return;
93
-
94
- let loaded = false;
95
-
96
- function renderCharts() {
97
- if (loaded) return;
98
- loaded = true;
99
-
100
- const DATA = JSON.parse(chartPayload);
101
- const labels = DATA.models.map(function (m) { return m.label; });
102
-
103
- Chart.defaults.color = "#a0aa9e";
104
- Chart.defaults.borderColor = "#1e2420";
105
- Chart.defaults.font.family = "Syne, system-ui, sans-serif";
106
-
107
- new Chart(document.getElementById("chart-total-loc"), {
108
- type: "bar",
109
- data: {
110
- labels: labels,
111
- datasets: [
112
- {
113
- label: "baseline",
114
- data: DATA.models.map(function (m) { return m.totals.baselineLoc; }),
115
- backgroundColor: "#c97a7a",
116
- },
117
- {
118
- label: "lexis-two",
119
- data: DATA.models.map(function (m) { return m.totals.lexisLoc; }),
120
- backgroundColor: "#7cba8a",
121
- },
122
- ],
123
- },
124
- options: {
125
- responsive: true,
126
- plugins: { legend: { position: "bottom" } },
127
- scales: { y: { beginAtZero: true } },
128
- },
129
- });
130
-
131
- new Chart(document.getElementById("chart-reduction"), {
132
- type: "bar",
133
- data: {
134
- labels: labels,
135
- datasets: [
136
- {
137
- label: benchmarks.reduction,
138
- data: DATA.models.map(function (m) { return m.totals.reductionPct; }),
139
- backgroundColor: "#7cba8a",
140
- },
141
- ],
142
- },
143
- options: {
144
- indexAxis: "y",
145
- responsive: true,
146
- plugins: { legend: { display: false } },
147
- scales: {
148
- x: { beginAtZero: true, max: 100, ticks: { callback: function (v) { return v + "%"; } } },
149
- },
150
- },
151
- });
152
-
153
- new Chart(document.getElementById("chart-time"), {
154
- type: "bar",
155
- data: {
156
- labels: labels,
157
- datasets: [
158
- {
159
- label: "baseline",
160
- data: DATA.models.map(function (m) { return m.totals.baselineTimeSec; }),
161
- backgroundColor: "#c97a7a",
162
- },
163
- {
164
- label: "lexis-two",
165
- data: DATA.models.map(function (m) { return m.totals.lexisTimeSec; }),
166
- backgroundColor: "#7cba8a",
167
- },
168
- ],
169
- },
170
- options: {
171
- responsive: true,
172
- plugins: { legend: { position: "bottom" } },
173
- scales: { y: { beginAtZero: true } },
174
- },
175
- });
176
-
177
- var taskColors = ["#7cba8a", "#5a9a6a", "#9fd4a8", "#4a7356", "#3d5f48"];
178
- new Chart(document.getElementById("chart-by-task"), {
179
- type: "bar",
180
- data: {
181
- labels: labels,
182
- datasets: DATA.tasks.map(function (taskId, i) {
183
- return {
184
- label: taskId,
185
- data: DATA.models.map(function (m) { return m.locByArmTask["lexis-two"][taskId]; }),
186
- backgroundColor: taskColors[i % taskColors.length],
187
- };
188
- }),
189
- },
190
- options: {
191
- responsive: true,
192
- plugins: { legend: { position: "bottom" } },
193
- scales: { y: { beginAtZero: true } },
194
- },
195
- });
196
-
197
- var tbody = document.querySelector("#summary-table tbody");
198
- DATA.models.forEach(function (m) {
199
- var c = m.correctByArm["lexis-two"];
200
- var tr = document.createElement("tr");
201
- tr.innerHTML =
202
- "<td>" + m.label + "</td>" +
203
- "<td>" + m.totals.baselineLoc + "</td>" +
204
- "<td class=\"good\">" + m.totals.lexisLoc + "</td>" +
205
- "<td class=\"good\">" + m.totals.reductionPct + "%</td>" +
206
- "<td>" + c.pass + "/" + c.total + "</td>";
207
- tbody.appendChild(tr);
208
- });
209
- }
210
-
211
- function loadChartJS(callback) {
212
- if (typeof Chart !== "undefined") { callback(); return; }
213
- var s = document.createElement("script");
214
- s.src = CHART_JS_URL;
215
- s.onload = callback;
216
- document.head.appendChild(s);
217
- }
218
-
219
- if ("IntersectionObserver" in window) {
220
- var observer = new IntersectionObserver(function (entries) {
221
- if (entries[0].isIntersecting) {
222
- observer.disconnect();
223
- loadChartJS(renderCharts);
224
- }
225
- }, { rootMargin: "200px" });
226
- observer.observe(section);
227
- } else {
228
- // Fallback: load immediately
229
- loadChartJS(renderCharts);
230
- }
231
- })();
232
- </script>
@@ -1,33 +0,0 @@
1
- ---
2
- interface Props {
3
- commands: {
4
- title: string;
5
- subtitle: string;
6
- items: readonly {
7
- name: string;
8
- desc: string;
9
- }[];
10
- };
11
- }
12
-
13
- const { commands } = Astro.props;
14
- ---
15
-
16
- <section id="commands">
17
- <div class="wrap">
18
- <div class="section-head">
19
- <h2>{commands.title}</h2>
20
- <p>{commands.subtitle}</p>
21
- </div>
22
- <div class="cmd-grid">
23
- {
24
- commands.items.map((cmd) => (
25
- <div class="cmd-card">
26
- <code>{cmd.name}</code>
27
- <p>{cmd.desc}</p>
28
- </div>
29
- ))
30
- }
31
- </div>
32
- </div>
33
- </section>
@@ -1,30 +0,0 @@
1
- ---
2
- interface Props {
3
- ecosystem: {
4
- title: string;
5
- subtitle: string;
6
- };
7
- }
8
-
9
- const { ecosystem } = Astro.props;
10
- ---
11
-
12
- <section id="ecosystem">
13
- <div class="wrap">
14
- <div class="section-head">
15
- <h2>{ecosystem.title}</h2>
16
- <p>{ecosystem.subtitle}</p>
17
- </div>
18
- <pre
19
- class="ecosystem"
20
- aria-label="Lexis ecosystem diagram">
21
- Lexis-One (private) ──extracts the best──▶ Lexis-Two (public)
22
- │ │
23
- │ personal configuration │ portable rules + skills
24
- │ providers &amp; API keys │ multi-host adapters
25
- └───────────────────────────────────────────┘
26
-
27
- Lexis-Core (future)
28
- public orchestrator</pre>
29
- </div>
30
- </section>
@@ -1,77 +0,0 @@
1
- ---
2
- interface Props {
3
- example: {
4
- title: string;
5
- subtitle: string;
6
- without: string;
7
- with: string;
8
- withoutFoot: string;
9
- withFoot: string;
10
- copy: string;
11
- copied: string;
12
- };
13
- }
14
-
15
- const { example } = Astro.props;
16
- ---
17
-
18
- <section id="example">
19
- <div class="wrap">
20
- <div class="section-head">
21
- <h2>{example.title}</h2>
22
- <p set:html={example.subtitle} />
23
- </div>
24
- <div class="compare">
25
- <article class="panel">
26
- <div class="panel-head bad">{example.without}</div>
27
- <div class="panel-body">
28
- <pre><code set:html={`function quickSort(arr, compareFn = (a, b) => a - b) {
29
- if (arr.length <= 1) return arr;
30
- const pivot = arr[Math.floor(arr.length / 2)];
31
- const left = [], right = [], equal = [];
32
- for (const item of arr) {
33
- const cmp = compareFn(item, pivot);
34
- if (cmp < 0) left.push(item);
35
- else if (cmp > 0) right.push(item);
36
- else equal.push(item);
37
- }
38
- return [...quickSort(left), ...equal, ...quickSort(right)];
39
- }`} /></pre>
40
- </div>
41
- <p class="panel-foot">{example.withoutFoot}</p>
42
- </article>
43
- <article class="panel">
44
- <div class="panel-head good">{example.with}</div>
45
- <div class="panel-body">
46
- <button data-copied={example.copied}
47
- type="button"
48
- class="copy-btn"
49
- data-copy="// lexis: this exists
50
- numbers.sort((a, b) => a - b)"
51
- >
52
- {example.copy}
53
- </button>
54
- <pre><code>// lexis: this exists
55
- numbers.sort((a, b) =&gt; a - b)</code></pre>
56
- </div>
57
- <p class="panel-foot"><strong set:html={example.withFoot} /></p>
58
- </article>
59
- </div>
60
- </div>
61
- </section>
62
-
63
- <script>
64
- document.querySelectorAll(".copy-btn").forEach(function (btn) {
65
- btn.addEventListener("click", function () {
66
- var text = btn.getAttribute("data-copy");
67
- navigator.clipboard.writeText(text!).then(function () {
68
- var prev = btn.textContent;
69
- var copiedText = btn.getAttribute("data-copied") || "Copied";
70
- btn.textContent = copiedText;
71
- setTimeout(function () {
72
- btn.textContent = prev;
73
- }, 1500);
74
- });
75
- });
76
- });
77
- </script>
@@ -1,28 +0,0 @@
1
- ---
2
- interface Props {
3
- footer: {
4
- license: string;
5
- forked: string;
6
- built: string;
7
- };
8
- }
9
-
10
- const { footer } = Astro.props;
11
- ---
12
-
13
- <footer class="site-footer">
14
- <div class="wrap">
15
- <p>
16
- <a href="https://github.com/nitdraig/lexis-two"
17
- >github.com/nitdraig/lexis-two</a
18
- >
19
- · {footer.license}
20
- </p>
21
- <p>
22
- {footer.forked}
23
- <a href="https://github.com/nitdraig">@nitdraig</a>.
24
- </p>
25
- <p set:html={footer.built} />
26
- <p>Powered by <a href="https://excelso.xyz">Excelso</a></p>
27
- </div>
28
- </footer>
@@ -1,87 +0,0 @@
1
- ---
2
- import type { Locale } from "../i18n/index.js";
3
- import LanguageSwitcher from "./LanguageSwitcher.astro";
4
-
5
- interface Props {
6
- locale: Locale;
7
- nav: {
8
- philosophy: string;
9
- example: string;
10
- hosts: string;
11
- commands: string;
12
- install: string;
13
- benchmarks: string;
14
- github: string;
15
- skipLink: string;
16
- };
17
- }
18
-
19
- const { locale, nav } = Astro.props;
20
- ---
21
-
22
- <a class="skip-link" href="#main">{nav.skipLink}</a>
23
-
24
- <header class="site-header">
25
- <div class="wrap header-inner">
26
- <a class="brand" href="#">
27
- <img src="/assets/logo.png" width="220" height="48" alt="Lexis-Two" />
28
- <span class="brand-text">Lexis-Two</span>
29
- </a>
30
- <button
31
- type="button"
32
- class="nav-toggle"
33
- aria-expanded="false"
34
- aria-controls="site-nav"
35
- aria-label="Open menu"
36
- >
37
- <span class="nav-toggle-bar" aria-hidden="true"></span>
38
- <span class="nav-toggle-bar" aria-hidden="true"></span>
39
- <span class="nav-toggle-bar" aria-hidden="true"></span>
40
- </button>
41
- <nav id="site-nav" class="nav" aria-label="Primary">
42
- <a href="#philosophy">{nav.philosophy}</a>
43
- <a href="#example">{nav.example}</a>
44
- <a href="#hosts">{nav.hosts}</a>
45
- <a href="#commands">{nav.commands}</a>
46
- <a href="#install">{nav.install}</a>
47
- <a href="#benchmarks">{nav.benchmarks}</a>
48
- <a href="https://github.com/nitdraig/lexis-two">{nav.github}</a>
49
- <LanguageSwitcher locale={locale} />
50
- </nav>
51
- </div>
52
- </header>
53
-
54
- <script>
55
- (function () {
56
- var header = document.querySelector(".site-header");
57
- var toggle = document.querySelector(".nav-toggle");
58
- var nav = document.getElementById("site-nav");
59
- if (!header || !toggle || !nav) return;
60
-
61
- function setNavOpen(open: boolean) {
62
- header!.classList.toggle("is-nav-open", open);
63
- toggle!.setAttribute("aria-expanded", open ? "true" : "false");
64
- toggle!.setAttribute("aria-label", open ? "Close menu" : "Open menu");
65
- }
66
-
67
- toggle!.addEventListener("click", function () {
68
- setNavOpen(!header!.classList.contains("is-nav-open"));
69
- });
70
-
71
- nav!.querySelectorAll("a").forEach(function (link) {
72
- link.addEventListener("click", function () {
73
- setNavOpen(false);
74
- });
75
- });
76
-
77
- document.addEventListener("keydown", function (event) {
78
- if (event.key === "Escape") setNavOpen(false);
79
- });
80
-
81
- window
82
- .matchMedia("(min-width: 768px)")
83
- .addEventListener("change", function (event) {
84
- if (event.matches) setNavOpen(false);
85
- });
86
- })();
87
- </script>
@@ -1,58 +0,0 @@
1
- ---
2
- import type { Locale } from "../i18n/index.js";
3
-
4
- interface Props {
5
- locale: Locale;
6
- hero: {
7
- badge: string;
8
- title: string;
9
- tagline: string;
10
- benchmark: string;
11
- ctaBenchmark: string;
12
- benchmarkLink: string;
13
- benchmarkCode: string;
14
- ctaGitHub: string;
15
- ctaInstall: string;
16
- ctaDocs: string;
17
- };
18
- }
19
-
20
- const { locale, hero } = Astro.props;
21
- ---
22
-
23
- <section class="hero">
24
- <div class="wrap">
25
- <div class="hero-content">
26
- <img src="/assets/logo.png" width="220" height="48" alt="Lexis-Two" />
27
- <p class="hero-badge">{hero.badge}</p>
28
- <h1>{hero.title}</h1>
29
- </div>
30
- <p class="tagline">{hero.tagline}</p>
31
- <p class="benchmark-note">
32
- {hero.benchmark}
33
- <a href="#benchmarks">{hero.ctaBenchmark}</a>
34
- ·
35
- <a href="https://github.com/nitdraig/lexis-two/blob/main/benchmarks/README.md#opencode-go">
36
- {hero.benchmarkLink}
37
- </a>
38
- (<code>{hero.benchmarkCode}</code>).
39
- </p>
40
- <div class="cta-row">
41
- <a
42
- class="btn btn-primary"
43
- href="https://github.com/nitdraig/lexis-two"
44
- rel="noopener noreferrer"
45
- >
46
- {hero.ctaGitHub}
47
- </a>
48
- <a class="btn btn-ghost" href="#install">{hero.ctaInstall}</a>
49
- <a class="btn btn-ghost" href="#benchmarks">{hero.ctaBenchmark}</a>
50
- <a
51
- class="btn btn-ghost"
52
- href="https://github.com/nitdraig/lexis-two/blob/main/docs/portability.md"
53
- >
54
- {hero.ctaDocs}
55
- </a>
56
- </div>
57
- </div>
58
- </section>
@@ -1,46 +0,0 @@
1
- ---
2
- import type { Locale } from "../i18n/index.js";
3
- import { getDictionary } from "../i18n/index.js";
4
- import Header from "./Header.astro";
5
- import Hero from "./Hero.astro";
6
- import Philosophy from "./Philosophy.astro";
7
- import Example from "./Example.astro";
8
- import Hosts from "./Hosts.astro";
9
- import Commands from "./Commands.astro";
10
- import Install from "./Install.astro";
11
- import Adapt from "./Adapt.astro";
12
- import Stacks from "./Stacks.astro";
13
- import Suggested from "./Suggested.astro";
14
- import Benchmarks from "./Benchmarks.astro";
15
- import Ecosystem from "./Ecosystem.astro";
16
- import Footer from "./Footer.astro";
17
-
18
- interface Props {
19
- locale: Locale;
20
- }
21
-
22
- const { locale } = Astro.props;
23
- const t = getDictionary(locale);
24
- ---
25
-
26
- <Header locale={locale} nav={t.nav} />
27
-
28
- <main id="main">
29
- <Hero locale={locale} hero={t.hero} />
30
- <Philosophy philosophy={t.philosophy} />
31
- <Example example={t.example} />
32
- <Hosts hosts={t.hosts} />
33
- <Commands commands={t.commands} />
34
- <Install install={t.install} />
35
- <Adapt adapt={t.adapt} />
36
- <Stacks stacks={t.stacks} />
37
- <Suggested suggested={t.suggested} />
38
- <Benchmarks benchmarks={t.benchmarks} />
39
- <Ecosystem ecosystem={t.ecosystem} />
40
- </main>
41
-
42
- <Footer footer={t.footer} />
43
-
44
- <style is:global>
45
- @import "../styles/global.css";
46
- </style>