@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
@@ -1,62 +0,0 @@
1
- ---
2
- interface Props {
3
- hosts: {
4
- title: string;
5
- subtitle: string;
6
- headHost: string;
7
- headLevel: string;
8
- headEntry: string;
9
- rows: readonly {
10
- host: string;
11
- level: string;
12
- entry: string;
13
- }[];
14
- levelFull: string;
15
- levelSoon: string;
16
- levelRules: string;
17
- };
18
- }
19
-
20
- const { hosts } = Astro.props;
21
- ---
22
-
23
- <section id="hosts">
24
- <div class="wrap">
25
- <div class="section-head">
26
- <h2>{hosts.title}</h2>
27
- <p set:html={hosts.subtitle} />
28
- </div>
29
- <div class="table-wrap">
30
- <table>
31
- <thead>
32
- <tr>
33
- <th scope="col">{hosts.headHost}</th>
34
- <th scope="col">{hosts.headLevel}</th>
35
- <th scope="col">{hosts.headEntry}</th>
36
- </tr>
37
- </thead>
38
- <tbody>
39
- {
40
- hosts.rows.map((row) => (
41
- <tr>
42
- <td>{row.host}</td>
43
- <td>
44
- <span class:list={["pill", row.level]}>
45
- {row.level === "full"
46
- ? hosts.levelFull
47
- : row.level === "soon"
48
- ? hosts.levelSoon
49
- : hosts.levelRules}
50
- </span>
51
- </td>
52
- <td>
53
- <code>{row.entry}</code>
54
- </td>
55
- </tr>
56
- ))
57
- }
58
- </tbody>
59
- </table>
60
- </div>
61
- </div>
62
- </section>
@@ -1,139 +0,0 @@
1
- ---
2
- interface Props {
3
- install: {
4
- title: string;
5
- subtitle: string;
6
- tabOpencode: string;
7
- tabCursor: string;
8
- tabClone: string;
9
- };
10
- }
11
-
12
- const { install } = Astro.props;
13
- ---
14
-
15
- <section id="install">
16
- <div class="wrap">
17
- <div class="section-head">
18
- <h2>{install.title}</h2>
19
- <p>{install.subtitle}</p>
20
- </div>
21
- <div class="install-tabs" role="tablist" aria-label="Install instructions">
22
- <button
23
- type="button"
24
- class="tab-btn"
25
- role="tab"
26
- aria-selected="true"
27
- aria-controls="tab-opencode-npm"
28
- id="tab-btn-opencode-npm"
29
- >
30
- OpenCode (npm)
31
- </button>
32
- <button
33
- type="button"
34
- class="tab-btn"
35
- role="tab"
36
- aria-selected="false"
37
- aria-controls="tab-opencode"
38
- id="tab-btn-opencode"
39
- >
40
- OpenCode (Local)
41
- </button>
42
- <button
43
- type="button"
44
- class="tab-btn"
45
- role="tab"
46
- aria-selected="false"
47
- aria-controls="tab-cursor"
48
- id="tab-btn-cursor"
49
- >
50
- {install.tabCursor}
51
- </button>
52
- <button
53
- type="button"
54
- class="tab-btn"
55
- role="tab"
56
- aria-selected="false"
57
- aria-controls="tab-clone"
58
- id="tab-btn-clone"
59
- >
60
- {install.tabClone}
61
- </button>
62
- </div>
63
- <div
64
- id="tab-opencode-npm"
65
- class="tab-panel active"
66
- role="tabpanel"
67
- aria-labelledby="tab-btn-opencode-npm"
68
- >
69
- <pre><code set:html={`# Add to your opencode.json
70
- {
71
- "plugin": ["@draig/lexis-two"]
72
- }
73
-
74
- # Optional: Copy slash commands globally to use them anywhere
75
- mkdir -p ~/.config/opencode/commands
76
- cp -r .opencode/command/lexis-two*.md ~/.config/opencode/commands/`} /></pre>
77
- </div>
78
- <div
79
- id="tab-opencode"
80
- class="tab-panel"
81
- role="tabpanel"
82
- aria-labelledby="tab-btn-opencode"
83
- hidden
84
- >
85
- <pre><code set:html={`git clone https://github.com/nitdraig/lexis-two.git ~/lexis-two
86
-
87
- # opencode.json
88
- {
89
- "plugin": ["~/lexis-two/.opencode/plugins/lexis-two.mjs"],
90
- "instructions": ["~/lexis-two/AGENTS.md"]
91
- }`} /></pre>
92
- </div>
93
- <div
94
- id="tab-cursor"
95
- class="tab-panel"
96
- role="tabpanel"
97
- aria-labelledby="tab-btn-cursor"
98
- hidden
99
- >
100
- <pre><code>git clone https://github.com/nitdraig/lexis-two.git ~/lexis-two
101
- cp ~/lexis-two/.cursor/rules/lexis-two.mdc .cursor/rules/lexis-two.mdc
102
-
103
- # Or globally:
104
- cp ~/lexis-two/.cursor/rules/lexis-two.mdc ~/.cursor/rules/lexis-two.mdc</code></pre>
105
- </div>
106
- <div
107
- id="tab-clone"
108
- class="tab-panel"
109
- role="tabpanel"
110
- aria-labelledby="tab-btn-clone"
111
- hidden
112
- >
113
- <pre><code set:html={`git clone https://github.com/nitdraig/lexis-two.git ~/lexis-two
114
-
115
- # More hosts: docs/portability.md in the repo
116
- # Default mode: LEXIS_TWO_DEFAULT_MODE=full
117
- # Or ~/.config/lexis-two/config.json → { "defaultMode": "full" }`} /></pre>
118
- </div>
119
- </div>
120
- </section>
121
-
122
- <script>
123
- document.querySelectorAll(".tab-btn").forEach(function (btn) {
124
- btn.addEventListener("click", function () {
125
- var target = btn.getAttribute("aria-controls");
126
- document.querySelectorAll(".tab-btn").forEach(function (b) {
127
- b.setAttribute("aria-selected", "false");
128
- });
129
- document.querySelectorAll(".tab-panel").forEach(function (p) {
130
- p.classList.remove("active");
131
- p.hidden = true;
132
- });
133
- btn.setAttribute("aria-selected", "true");
134
- var panel = document.getElementById(target!);
135
- panel!.classList.add("active");
136
- panel!.hidden = false;
137
- });
138
- });
139
- </script>
@@ -1,82 +0,0 @@
1
- ---
2
- import type { Locale } from "../i18n/index.js";
3
-
4
- interface Props {
5
- locale: Locale;
6
- }
7
-
8
- const { locale } = Astro.props;
9
- const otherLocale: Locale = locale === "en" ? "es" : "en";
10
- const otherLabel = locale === "en" ? "ES" : "EN";
11
-
12
- const currentPath = Astro.url.pathname;
13
- let targetPath: string;
14
- if (locale === "en") {
15
- targetPath = `/es${currentPath}`;
16
- } else {
17
- targetPath = currentPath.replace(/^\/es/, "") || "/";
18
- }
19
- ---
20
-
21
- <a
22
- href={targetPath}
23
- class="lang-switch"
24
- aria-label={locale === "en" ? "Cambiar a espanol" : "Switch to English"}
25
- title={locale === "en" ? "Espanol" : "English"}
26
- >
27
- <svg
28
- width="16"
29
- height="16"
30
- viewBox="0 0 24 24"
31
- fill="none"
32
- stroke="currentColor"
33
- stroke-width="2"
34
- stroke-linecap="round"
35
- stroke-linejoin="round"
36
- aria-hidden="true"
37
- >
38
- <circle cx="12" cy="12" r="10" />
39
- <path d="M2 12h20" />
40
- <path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z" />
41
- </svg>
42
- <span>{otherLabel}</span>
43
- </a>
44
-
45
- <style>
46
- .lang-switch {
47
- display: inline-flex;
48
- align-items: center;
49
- gap: 0.35rem;
50
- font-family: var(--font-mono);
51
- font-size: 0.75rem;
52
- font-weight: 600;
53
- padding: 0.4rem 0.7rem;
54
- border: 1px solid var(--border-bright);
55
- border-radius: 999px;
56
- background: var(--bg-elevated);
57
- color: var(--text-muted);
58
- text-decoration: none;
59
- transition:
60
- border-color 0.15s ease,
61
- color 0.15s ease,
62
- background 0.15s ease;
63
- white-space: nowrap;
64
- }
65
-
66
- .lang-switch:hover {
67
- border-color: var(--accent-dim);
68
- color: var(--accent);
69
- background: var(--accent-glow);
70
- }
71
-
72
- .lang-switch svg {
73
- flex-shrink: 0;
74
- }
75
-
76
- @media (max-width: 767px) {
77
- .lang-switch {
78
- margin-left: 0;
79
- margin-top: 0.25rem;
80
- }
81
- }
82
- </style>
@@ -1,23 +0,0 @@
1
- ---
2
- interface Props {
3
- philosophy: {
4
- title: string;
5
- subtitle: string;
6
- rungs: readonly string[];
7
- };
8
- }
9
-
10
- const { philosophy } = Astro.props;
11
- ---
12
-
13
- <section id="philosophy">
14
- <div class="wrap">
15
- <div class="section-head">
16
- <h2>{philosophy.title}</h2>
17
- <p>{philosophy.subtitle}</p>
18
- </div>
19
- <ol class="ladder">
20
- {philosophy.rungs.map((rung) => <li>{rung}</li>)}
21
- </ol>
22
- </div>
23
- </section>
@@ -1,33 +0,0 @@
1
- ---
2
- interface Props {
3
- stacks: {
4
- title: string;
5
- subtitle: string;
6
- items: readonly {
7
- name: string;
8
- desc: string;
9
- }[];
10
- };
11
- }
12
-
13
- const { stacks } = Astro.props;
14
- ---
15
-
16
- <section id="stacks">
17
- <div class="wrap">
18
- <div class="section-head">
19
- <h2>{stacks.title}</h2>
20
- <p>{stacks.subtitle}</p>
21
- </div>
22
- <div class="stacks-grid">
23
- {
24
- stacks.items.map((stack) => (
25
- <div class="stack-card">
26
- <h3>{stack.name}</h3>
27
- <p>{stack.desc}</p>
28
- </div>
29
- ))
30
- }
31
- </div>
32
- </div>
33
- </section>
@@ -1,39 +0,0 @@
1
- ---
2
- interface Props {
3
- suggested: {
4
- title: string;
5
- subtitle: string;
6
- items: readonly {
7
- name: string;
8
- url: string;
9
- desc: string;
10
- }[];
11
- };
12
- }
13
-
14
- const { suggested } = Astro.props;
15
- ---
16
-
17
- <section id="suggested">
18
- <div class="wrap">
19
- <div class="section-head">
20
- <h2>{suggested.title}</h2>
21
- <p>{suggested.subtitle}</p>
22
- </div>
23
- <div class="suggested-list">
24
- {
25
- suggested.items.map((item) => (
26
- <a
27
- href={item.url}
28
- class="suggested-card"
29
- target="_blank"
30
- rel="noopener noreferrer"
31
- >
32
- <h3>{item.name}</h3>
33
- <p>{item.desc}</p>
34
- </a>
35
- ))
36
- }
37
- </div>
38
- </div>
39
- </section>
@@ -1,230 +0,0 @@
1
- {
2
- "source": "opencode-go-2026-06-16.json",
3
- "date": "2026-06-16",
4
- "repeat": 3,
5
- "models": [
6
- {
7
- "id": "kimi-k2.6",
8
- "label": "Kimi K2.6",
9
- "locByArmTask": {
10
- "baseline": {
11
- "email": 46,
12
- "debounce": 63,
13
- "csv-sum": 18,
14
- "countdown": 413,
15
- "rate-limit": 62
16
- },
17
- "lexis-two": {
18
- "email": 13,
19
- "debounce": 10,
20
- "csv-sum": 4,
21
- "countdown": 13,
22
- "rate-limit": 23
23
- }
24
- },
25
- "timeByArmTask": {
26
- "baseline": {
27
- "email": 14.996,
28
- "debounce": 6.997,
29
- "csv-sum": 5.53,
30
- "countdown": 22.661,
31
- "rate-limit": 9.316
32
- },
33
- "lexis-two": {
34
- "email": 7.944,
35
- "debounce": 7.106,
36
- "csv-sum": 5.982,
37
- "countdown": 13.821,
38
- "rate-limit": 18.117
39
- }
40
- },
41
- "correctByArm": {
42
- "baseline": {
43
- "pass": 12,
44
- "total": 15
45
- },
46
- "lexis-two": {
47
- "pass": 12,
48
- "total": 15
49
- }
50
- },
51
- "totals": {
52
- "baselineLoc": 602,
53
- "lexisLoc": 63,
54
- "reductionPct": 90,
55
- "baselineTimeSec": 59.5,
56
- "lexisTimeSec": 53
57
- }
58
- },
59
- {
60
- "id": "deepseek-v4-pro",
61
- "label": "DeepSeek V4",
62
- "locByArmTask": {
63
- "baseline": {
64
- "email": 36,
65
- "debounce": 61,
66
- "csv-sum": 25,
67
- "countdown": 113,
68
- "rate-limit": 53
69
- },
70
- "lexis-two": {
71
- "email": 9,
72
- "debounce": 12,
73
- "csv-sum": 4,
74
- "countdown": 12,
75
- "rate-limit": 20
76
- }
77
- },
78
- "timeByArmTask": {
79
- "baseline": {
80
- "email": 37.21,
81
- "debounce": 21.122,
82
- "csv-sum": 10.365,
83
- "countdown": 33.662,
84
- "rate-limit": 31.551
85
- },
86
- "lexis-two": {
87
- "email": 68.671,
88
- "debounce": 16.821,
89
- "csv-sum": 25.552,
90
- "countdown": 45.493,
91
- "rate-limit": 47.007
92
- }
93
- },
94
- "correctByArm": {
95
- "baseline": {
96
- "pass": 14,
97
- "total": 15
98
- },
99
- "lexis-two": {
100
- "pass": 13,
101
- "total": 15
102
- }
103
- },
104
- "totals": {
105
- "baselineLoc": 288,
106
- "lexisLoc": 57,
107
- "reductionPct": 80,
108
- "baselineTimeSec": 133.9,
109
- "lexisTimeSec": 203.5
110
- }
111
- },
112
- {
113
- "id": "qwen3.7-max",
114
- "label": "Qwen3.7 Max",
115
- "locByArmTask": {
116
- "baseline": {
117
- "email": 39,
118
- "debounce": 48,
119
- "csv-sum": 19,
120
- "countdown": 124,
121
- "rate-limit": 40
122
- },
123
- "lexis-two": {
124
- "email": 14,
125
- "debounce": 9,
126
- "csv-sum": 4,
127
- "countdown": 10,
128
- "rate-limit": 17
129
- }
130
- },
131
- "timeByArmTask": {
132
- "baseline": {
133
- "email": 58.608,
134
- "debounce": 32.691,
135
- "csv-sum": 26.66,
136
- "countdown": 52.281,
137
- "rate-limit": 42.698
138
- },
139
- "lexis-two": {
140
- "email": 39.348,
141
- "debounce": 27.973,
142
- "csv-sum": 26.696,
143
- "countdown": 38.458,
144
- "rate-limit": 39.445
145
- }
146
- },
147
- "correctByArm": {
148
- "baseline": {
149
- "pass": 12,
150
- "total": 15
151
- },
152
- "lexis-two": {
153
- "pass": 13,
154
- "total": 15
155
- }
156
- },
157
- "totals": {
158
- "baselineLoc": 270,
159
- "lexisLoc": 54,
160
- "reductionPct": 80,
161
- "baselineTimeSec": 212.9,
162
- "lexisTimeSec": 171.9
163
- }
164
- },
165
- {
166
- "id": "minimax-m3",
167
- "label": "MiniMax M3",
168
- "locByArmTask": {
169
- "baseline": {
170
- "email": 55,
171
- "debounce": 66,
172
- "csv-sum": 33,
173
- "countdown": 112,
174
- "rate-limit": 59
175
- },
176
- "lexis-two": {
177
- "email": 9,
178
- "debounce": 10,
179
- "csv-sum": 4,
180
- "countdown": 18,
181
- "rate-limit": 15
182
- }
183
- },
184
- "timeByArmTask": {
185
- "baseline": {
186
- "email": 13.415,
187
- "debounce": 12.657,
188
- "csv-sum": 6.729,
189
- "countdown": 12.771,
190
- "rate-limit": 14.89
191
- },
192
- "lexis-two": {
193
- "email": 6.683,
194
- "debounce": 3.81,
195
- "csv-sum": 2.563,
196
- "countdown": 4.428,
197
- "rate-limit": 4.817
198
- }
199
- },
200
- "correctByArm": {
201
- "baseline": {
202
- "pass": 11,
203
- "total": 15
204
- },
205
- "lexis-two": {
206
- "pass": 15,
207
- "total": 15
208
- }
209
- },
210
- "totals": {
211
- "baselineLoc": 325,
212
- "lexisLoc": 56,
213
- "reductionPct": 83,
214
- "baselineTimeSec": 60.5,
215
- "lexisTimeSec": 22.3
216
- }
217
- }
218
- ],
219
- "tasks": [
220
- "email",
221
- "debounce",
222
- "csv-sum",
223
- "countdown",
224
- "rate-limit"
225
- ],
226
- "arms": [
227
- "baseline",
228
- "lexis-two"
229
- ]
230
- }