@christianirack/brainllm 0.0.0-stage → 0.3.1
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/LICENSE +21 -0
- package/README.md +391 -2
- package/bin/brain.js +73 -0
- package/brain.schema.json +208 -0
- package/package.json +44 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Christian Irack Flores Maldonado
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,392 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center"><img src="https://raw.githubusercontent.com/chrisifm/BRAINLLM/main/docs/site/assets/logo.png" width="88" alt="BRAINLLM brain mark"></p>
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
# BRAINLLM
|
|
4
|
+
|
|
5
|
+
### 🦀 The web compiler for LLMs, built in Rust. Blazing fast.
|
|
6
|
+
|
|
7
|
+
**Your LLM owns the frontend. Give it a language built for the job.**
|
|
8
|
+
|
|
9
|
+
> **Written in Rust, from parser to minifier.** One native binary, no toolchain to install. Warm production builds
|
|
10
|
+
> in **~34 ms**, about **4.5× faster than React + Vite** on [our open benchmark](#show-me-the-numbers).
|
|
11
|
+
|
|
12
|
+
<p align="center">
|
|
13
|
+
<img src="https://img.shields.io/badge/built%20with-Rust-dea584?logo=rust&logoColor=white" alt="Built with Rust">
|
|
14
|
+
<a href="https://chrisifm.github.io/BRAINLLM/"><img src="https://img.shields.io/badge/website-chrisifm.github.io%2FBRAINLLM-0071e3" alt="Website"></a>
|
|
15
|
+
<a href="https://www.npmjs.com/package/@christianirack/brainllm"><img src="https://img.shields.io/npm/v/@christianirack/brainllm?color=cb3837" alt="npm version"></a>
|
|
16
|
+
<a href="https://github.com/chrisifm/BRAINLLM/blob/main/LICENSE"><img src="https://img.shields.io/github/license/chrisifm/BRAINLLM" alt="License"></a>
|
|
17
|
+
</p>
|
|
18
|
+
|
|
19
|
+
<p align="center"><a href="https://chrisifm.github.io/BRAINLLM/"><img src="https://raw.githubusercontent.com/chrisifm/BRAINLLM/main/docs/site/assets/cover.png" alt="BRAINLLM — The web compiler for LLMs. Open the website: chrisifm.github.io/BRAINLLM"></a></p>
|
|
20
|
+
|
|
21
|
+
<p align="center"><b>🌐 <a href="https://chrisifm.github.io/BRAINLLM/">chrisifm.github.io/BRAINLLM</a></b></p>
|
|
22
|
+
|
|
23
|
+
BRAINLLM gives coding agents a compact language, a single specification and a native compiler written in Rust that
|
|
24
|
+
tells them how to fix mistakes. The model builds the frontend. You set the direction, inspect the result and decide
|
|
25
|
+
what ships.
|
|
26
|
+
|
|
27
|
+
`.brain` components compile to direct-DOM JavaScript and scoped CSS. The Rust toolchain handles parsing, checking,
|
|
28
|
+
code generation, bundling and minification. The agent can operate it through the CLI or MCP.
|
|
29
|
+
|
|
30
|
+
**Build with it. Let your LLM make it better.** Every run is a chance to spot a compiler bug, an expensive step or
|
|
31
|
+
a confusing diagnostic. The agent can turn that finding into a tested proposal and, when configured, push it
|
|
32
|
+
automatically to a review branch. Maintainers decide what merges.
|
|
33
|
+
|
|
34
|
+
**[Visit the site](https://chrisifm.github.io/BRAINLLM/)** · **[Build your first app](#give-your-agent-its-first-task)** · **[Read the spec](https://github.com/chrisifm/BRAINLLM/blob/main/SPEC.md)** · **[See the benchmarks](#show-me-the-numbers)** · **[Contribute](#build-the-tool-your-agent-needs)**
|
|
35
|
+
|
|
36
|
+
## A frontend language with the model in mind
|
|
37
|
+
|
|
38
|
+
An agent writing your app needs a contract it can follow and feedback it can act on. BRAINLLM makes that loop
|
|
39
|
+
explicit: read the spec, generate a component, check it, apply the fix, test the result.
|
|
40
|
+
|
|
41
|
+

|
|
42
|
+
|
|
43
|
+
- **Less to guess.** `brain spec` defines the supported language. One component format, a prescribed project
|
|
44
|
+
structure and generators keep the model working inside a known contract.
|
|
45
|
+
- **Feedback it can use.** Diagnostics include the file, location, rule and proposed fix. Mechanical fixes carry
|
|
46
|
+
exact replacement edits; `brain fix` applies them. Decisions that need judgment remain visible to the agent.
|
|
47
|
+
- **Tools for the whole loop.** `brain map --json`, `brain check --json`, `brain doctor` and `brain build` let the
|
|
48
|
+
agent inspect, validate and compile its work. `brain mcp` exposes tools over stdio.
|
|
49
|
+
- **Output for the browser.** Signals update the affected DOM nodes. The toolchain includes its own compiler,
|
|
50
|
+
bundler and minifier, with no Vite, webpack, esbuild or Babel in the build pipeline.
|
|
51
|
+
|
|
52
|
+
BrainScript builds on HTML, CSS and a constrained subset of JavaScript. It is designed to reduce the choices an
|
|
53
|
+
agent has to reconstruct while preserving code that a developer can read and review.
|
|
54
|
+
|
|
55
|
+
## What your agent gets to work with
|
|
56
|
+
|
|
57
|
+
| Capability | What it does for the app-building loop |
|
|
58
|
+
|---|---|
|
|
59
|
+
| A served language contract | `brain spec` gives the model the implemented syntax and conventions |
|
|
60
|
+
| Task playbooks | `brain guide <topic>` (also MCP `brain_guide`): steps, checks, common mistakes and an example per task (views, data, forms, server, SEO, accessibility, WebMCP, tests, i18n, performance) |
|
|
61
|
+
| Components and reactive state | `.brain` files combine markup, BrainScript and scoped styles; `sig`, `drv` and `fx` express updates |
|
|
62
|
+
| Forms and data | Form validation, HTTP resources and server contracts give common app behavior a documented path |
|
|
63
|
+
| Routes and layouts | Views, layouts, loaders and guards put navigation and access checks into the project structure |
|
|
64
|
+
| Diagnostics and repairs | JSON diagnostics identify failures; supported mechanical edits can be applied with `brain fix` |
|
|
65
|
+
| Context and automation | The project map, focused reads, CLI and MCP tools let an agent inspect and operate the app |
|
|
66
|
+
| Verification and delivery | Tests, `brain doctor` and the production build make validation part of the workflow |
|
|
67
|
+
| Tested compiler improvements | Isolated proposals, validation gates and optional review-branch pushes let the agent contribute fixes |
|
|
68
|
+
|
|
69
|
+
Use [SPEC.md](https://github.com/chrisifm/BRAINLLM/blob/main/SPEC.md), the served `brain spec` and [EVOLUTION.md](https://github.com/chrisifm/BRAINLLM/blob/main/docs/EVOLUTION.md) for exact contracts and limits.
|
|
70
|
+
|
|
71
|
+
## Where it fits in the frontend stack
|
|
72
|
+
|
|
73
|
+
These tools occupy different layers. This is a comparison of their roles, not a universal speed ranking. Linked
|
|
74
|
+
project documentation describes each tool; the BRAINLLM column explains the choice this project makes.
|
|
75
|
+
|
|
76
|
+
| Project | Main role | How BRAINLLM approaches that part of the job |
|
|
77
|
+
|---|---|---|
|
|
78
|
+
| [React](https://react.dev/) | Library for building component-based user interfaces | A dedicated component language, compiler and agent workflow together |
|
|
79
|
+
| [Angular](https://angular.dev/overview) | Web application framework with integrated tooling | A constrained language and normative spec built around LLM authorship |
|
|
80
|
+
| [Vue](https://vuejs.org/guide/introduction.html) | Progressive framework for declarative, reactive interfaces | Prescribed component syntax and structure with compiler-guided repairs |
|
|
81
|
+
| [Astro](https://docs.astro.build/en/concepts/why-astro/) | Web framework focused on content-driven sites and islands | A language and toolchain for agent-authored frontends, with its own rendering contracts |
|
|
82
|
+
| [Vite](https://vite.dev/guide/) | Development server and production build tooling | An integrated Rust pipeline for `.brain` applications |
|
|
83
|
+
| [webpack](https://webpack.js.org/concepts/) | Module bundler with loaders and plugins | Its own bundler and minifier as part of the compiler pipeline |
|
|
84
|
+
| **BRAINLLM** | **Frontend language, compiler, runtime and agent contract** | **The model writes, checks and improves within one documented workflow** |
|
|
85
|
+
|
|
86
|
+
Other projects also offer AI guidance and tooling. BRAINLLM's emphasis is the authoring contract itself. It does
|
|
87
|
+
not run existing React, Angular or Vue components unchanged, and replacing a build tool alone is not a migration.
|
|
88
|
+
The numerical comparison below covers only the measured React/Vite and Svelte/Vite fixture builds.
|
|
89
|
+
|
|
90
|
+
## A form shouldn't need an ecosystem.
|
|
91
|
+
|
|
92
|
+
Your agent came to build a button. Your stack handed it a committee.
|
|
93
|
+
|
|
94
|
+
If setup decisions are consuming the session, give the model a toolchain with a defined contract.
|
|
95
|
+
|
|
96
|
+
BRAINLLM brings component syntax, state, forms, routing and compiler feedback into one documented workflow. Its
|
|
97
|
+
Rust toolchain owns the build pipeline, and the browser runtime has no third-party dependencies. Start with the
|
|
98
|
+
web behavior you need; give the agent a smaller set of conventions to learn and check.
|
|
99
|
+
|
|
100
|
+
**Less tooling. More web.**
|
|
101
|
+
|
|
102
|
+
## Show me the numbers
|
|
103
|
+
|
|
104
|
+
**Don't trust the headline. Run the benchmark.**
|
|
105
|
+
|
|
106
|
+
If you like reading raw timings more than launch posts, this part is for you. Inspect the fixture, reproduce the
|
|
107
|
+
run and keep the result even when it disagrees with ours.
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
**Seven stacks. The same dashboard workflow. 140 measured builds.**
|
|
111
|
+
|
|
112
|
+
| Warm production build | Median, 20 runs | Standard deviation |
|
|
113
|
+
|---|---:|---:|
|
|
114
|
+
| BRAINLLM | 34.32 ms | 13.23 ms |
|
|
115
|
+
| React + Vite | 155.49 ms | 16.71 ms |
|
|
116
|
+
| Vue + Vite | 211.76 ms | 53.56 ms |
|
|
117
|
+
| Svelte + Vite | 243.53 ms | 56.14 ms |
|
|
118
|
+
| Astro + React island | 504.78 ms | 77.45 ms |
|
|
119
|
+
| Angular CLI | 1,262.50 ms | 69.03 ms |
|
|
120
|
+
| React + webpack | 1,334.54 ms | 560.99 ms |
|
|
121
|
+
|
|
122
|
+
All seven implementations passed the same nine Chrome interaction checks, including create, search, edit and delete.
|
|
123
|
+
These measurements use frozen BRAINLLM source `7889787`, Apple M5 with 24 GiB RAM, Node 26.12.0 and two warmups per
|
|
124
|
+
stack. Builds run serially on a shared machine. Variance matters: inspect the raw samples, especially webpack's.
|
|
125
|
+
The output strategies differ (including SSR, client rendering and an Astro React island); this comparison measures
|
|
126
|
+
production build duration for this fixture, not universal app performance or feature equivalence.
|
|
127
|
+
|
|
128
|
+
Read the [expanded method, versions, payloads and results](https://github.com/chrisifm/BRAINLLM/blob/main/bench/build/expanded.md). The original three-stack
|
|
129
|
+
[historical results](https://github.com/chrisifm/BRAINLLM/blob/main/bench/build/results/summary.md) remain available unchanged. Use `bench/build/expanded.mjs`
|
|
130
|
+
with the documented frozen binary and scratch-directory setup to reproduce this seven-stack run.
|
|
131
|
+
|
|
132
|
+
**Ask your agent to challenge the result:**
|
|
133
|
+
|
|
134
|
+
```text
|
|
135
|
+
Reproduce BRAINLLM's build benchmark and tell me what the evidence supports.
|
|
136
|
+
First inspect bench/build/README.md, bench/build/run.sh, the frozen fixture,
|
|
137
|
+
the React/Svelte reference implementations and their pinned dependencies.
|
|
138
|
+
Explain the output differences and required tools before running anything.
|
|
139
|
+
|
|
140
|
+
Run bench/build/run.sh in an isolated workspace using its documented settings.
|
|
141
|
+
Keep the compared fixture implementations unchanged. Record the compiler hash,
|
|
142
|
+
tool versions, hardware, machine load, warmups and sample count. Preserve the
|
|
143
|
+
raw timings and report cold and warm medians in ms, plus the measured HTML,
|
|
144
|
+
CSS and JavaScript payload in KiB gzip with every excluded asset identified.
|
|
145
|
+
|
|
146
|
+
Compare the local results with the checked-in results. Report failures,
|
|
147
|
+
limitations and regressions as observed. Do not claim a win unless the actual
|
|
148
|
+
numbers support it. Do not upload results or publish anything automatically.
|
|
149
|
+
Clean up only the temporary resources this run created.
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
A separate [cache-key microbenchmark](https://github.com/chrisifm/BRAINLLM/blob/main/bench/build/results/compiler-cache-lookup.json) measured **43.3× faster key
|
|
153
|
+
lookup** after removing an unnecessary parse: 10,000 lookups of a 1,050-byte input. That number measures this
|
|
154
|
+
internal operation only. It is not a full-build speedup or a webpack comparison.
|
|
155
|
+
|
|
156
|
+
The [benchmark report](https://github.com/chrisifm/BRAINLLM/blob/main/bench/REPORT.md) also tracks agent-generated apps, browser behavior, payload size and
|
|
157
|
+
failure recovery. Historical LLM results describe their frozen model/spec/compiler runs; they do not guarantee
|
|
158
|
+
that a new prompt or compiler revision will pass. This project is open to developers and researchers who want to
|
|
159
|
+
investigate how language design and compiler feedback affect agent behavior. Bring a hypothesis and a reproducer.
|
|
160
|
+
|
|
161
|
+
The compiler pipeline is written in Rust. Browser automation drives real Chrome through CDP for interaction and
|
|
162
|
+
regression checks. Those checks establish the flows they exercise; they do not imply universal browser or app
|
|
163
|
+
compatibility. The repository's recorded LLM evaluations identify the models, tasks and frozen revisions so you can inspect
|
|
164
|
+
what each result actually establishes.
|
|
165
|
+
|
|
166
|
+
## Tools for an agent that finishes the job
|
|
167
|
+
|
|
168
|
+
| The agent needs to… | The compiler provides… |
|
|
169
|
+
|---|---|
|
|
170
|
+
| Start with consistent files | Generators for views, components, channels, services, typed APIs, schemas, route guards and server modules |
|
|
171
|
+
| Refactor without guessing imports | Checked AST edits for props, component-file rename, move and extraction |
|
|
172
|
+
| Inspect what it built | Chrome screenshots, accessibility outlines and explicit visual baseline comparisons |
|
|
173
|
+
| Keep routes small | Enforced `viewKB` budgets for emitted JS + CSS + HTML |
|
|
174
|
+
| Defer optional UI | Visible, idle or keyboard-accessible interaction loading; async image decoding |
|
|
175
|
+
| Fix and verify | `brain doctor --fix` applies mechanical edits before the full quality check |
|
|
176
|
+
| Let you try production output | A temporary local `brain preview` server with owned-process cleanup |
|
|
177
|
+
|
|
178
|
+
Browser tooling and the preview supervisor currently require macOS or Linux. Screenshot baselines need stable browser,
|
|
179
|
+
font and app-data inputs. Runtime mount-time/heap budgets remain planned; the compiler rejects those settings rather
|
|
180
|
+
than pretending to measure them. See the [implemented contract](https://github.com/chrisifm/BRAINLLM/blob/main/SPEC.md) and [tool internals](https://github.com/chrisifm/BRAINLLM/blob/main/docs/INTERNALS.md).
|
|
181
|
+
|
|
182
|
+
## Give your agent its first task
|
|
183
|
+
|
|
184
|
+
**Connect your coding agent. Tell it what to build. Try the app.**
|
|
185
|
+
|
|
186
|
+
Open a coding agent with access to your project files and terminal. Give it the prompt below and your product
|
|
187
|
+
brief. It can install the compiler, read the language contract and work through the checks. Once the app runs,
|
|
188
|
+
try the actual workflow and tell the agent what should change. You stay in charge of the product and what ships.
|
|
189
|
+
|
|
190
|
+
BRAINLLM's CLI is the starting point; `brain mcp` also connects through clients that support MCP over stdio.
|
|
191
|
+
Your agent needs Node 22+ and Chrome for browser-based checks on macOS or Linux. Git and Rust stable are needed
|
|
192
|
+
only when building the compiler from source or contributing. It should report missing prerequisites honestly.
|
|
193
|
+
|
|
194
|
+
**Paste this into your coding agent:**
|
|
195
|
+
|
|
196
|
+
```text
|
|
197
|
+
Build a small task app with BRAINLLM: add, complete and delete tasks,
|
|
198
|
+
and save them locally. Follow https://github.com/chrisifm/BRAINLLM
|
|
199
|
+
for setup. Run the checks and open the app for me.
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
<details>
|
|
203
|
+
<summary>Expanded agent workflow for a custom project</summary>
|
|
204
|
+
|
|
205
|
+
```text
|
|
206
|
+
Build my frontend with BRAINLLM.
|
|
207
|
+
|
|
208
|
+
Product brief: [describe the app, its users and the first useful workflow].
|
|
209
|
+
|
|
210
|
+
1. Inspect the workspace and available tools. Preserve existing files and secrets.
|
|
211
|
+
Verify Node 22+ and Chrome for browser checks. Create a separate app with
|
|
212
|
+
npm create @christianirack/brainll@latest my-app. If npm is unavailable,
|
|
213
|
+
follow the source-install instructions in the README. Report missing prerequisites.
|
|
214
|
+
2. Enter the generated app. Read its AGENTS.md and run npx brain spec.
|
|
215
|
+
Only use implemented features in the served spec; do not invent APIs.
|
|
216
|
+
3. Read npx brain map --json. Generate the needed views and components with brain add.
|
|
217
|
+
Implement the first complete user workflow, including loading, empty, error
|
|
218
|
+
and success states. Add meaningful behavior tests.
|
|
219
|
+
4. Run npx brain fix, then npx brain check --json. Resolve remaining diagnostics.
|
|
220
|
+
Run npx brain doctor and npx brain build. Exercise the workflow in the browser.
|
|
221
|
+
5. Report actual test results, remaining gaps and how to run the app. Stop
|
|
222
|
+
temporary processes and close only browser resources you created.
|
|
223
|
+
Do not publish or deploy without my instruction.
|
|
224
|
+
|
|
225
|
+
At each completed workflow, look for a concrete compiler defect or measurable
|
|
226
|
+
improvement. Read docs/EVOLUTION.md and docs/AGENT-IDEAS.md in the framework repo.
|
|
227
|
+
Reproduce it, add a regression test and propose the smallest compatible fix.
|
|
228
|
+
Only use automatic contribution when I have explicitly configured it for an
|
|
229
|
+
owned fork or authorized review branch. Never weaken checks or merge automatically.
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
</details>
|
|
233
|
+
|
|
234
|
+
<details>
|
|
235
|
+
<summary>Prefer to install it yourself? Here are the commands.</summary>
|
|
236
|
+
|
|
237
|
+
Use the public initializer (no npm account required):
|
|
238
|
+
|
|
239
|
+
```sh
|
|
240
|
+
npm create @christianirack/brainll@latest my-app
|
|
241
|
+
cd my-app
|
|
242
|
+
npm run dev
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
`npm create @christianirack/brainllm@latest my-app` is the canonical spelling with identical behavior.
|
|
246
|
+
Inside the generated app, use `npx brain` for CLI commands and `npm run build` for production.
|
|
247
|
+
The compiler is prebuilt; Rust is needed only for the source installation below.
|
|
248
|
+
|
|
249
|
+
```sh
|
|
250
|
+
git clone https://github.com/chrisifm/BRAINLLM.git
|
|
251
|
+
cd BRAINLLM
|
|
252
|
+
cargo install --locked --path crates/brain-cli
|
|
253
|
+
brain new my-app
|
|
254
|
+
cd my-app
|
|
255
|
+
brain run
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
With a source installation, use the installed `brain` commands directly. That workflow does not require
|
|
259
|
+
`npm install` in the generated app.
|
|
260
|
+
|
|
261
|
+
Cargo installs `brain` into its bin directory; make sure that directory is on your `PATH`. Stop the dev server with
|
|
262
|
+
Ctrl+C. From the app directory, run `brain doctor` to validate it and `brain build` to create production output.
|
|
263
|
+
For an MCP client in an npm-created app, use command `npx` with arguments `["brain", "mcp"]` and the app as its
|
|
264
|
+
working directory. With a source installation, use the installed `brain` executable and argument `mcp`. Follow that client's configuration instructions; merely copying a prompt does not grant tool access.
|
|
265
|
+
|
|
266
|
+
</details>
|
|
267
|
+
|
|
268
|
+
For an existing frontend, start with the [migration workflow](https://github.com/chrisifm/BRAINLLM/blob/main/docs/MIGRATION.md). Its read-only planner recognizes
|
|
269
|
+
React, Angular, Vue, Svelte, Next and Nuxt projects. Port one tested route or component at a time, preserve its
|
|
270
|
+
behavior and keep a rollback path. It is an incremental workflow, not an automatic transpiler.
|
|
271
|
+
|
|
272
|
+
## The code your agent handles
|
|
273
|
+
|
|
274
|
+
```html
|
|
275
|
+
<meta props="start:num=0 label:str='Clicks'">
|
|
276
|
+
|
|
277
|
+
<script>
|
|
278
|
+
let n = sig(start)
|
|
279
|
+
let dbl = drv(() => n * 2)
|
|
280
|
+
</script>
|
|
281
|
+
|
|
282
|
+
<button on:click={n++}>{label}: {n} × 2 = {dbl}</button>
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
The compiler handles signal reads and writes. Derived values update when their inputs change. Styles can live in
|
|
286
|
+
the same file and are scoped to the component. The [served spec](https://github.com/chrisifm/BRAINLLM/blob/main/SPEC.md) defines the supported syntax.
|
|
287
|
+
|
|
288
|
+
## Readable intent. Lean browser output.
|
|
289
|
+
|
|
290
|
+
An internal function named `back_to_home` can become a short identifier in production. The exact letter depends
|
|
291
|
+
on scope and the other names in the module. Keep meaningful names where the agent reasons about the code; let the
|
|
292
|
+
compiler shorten eligible bindings in what the browser receives.
|
|
293
|
+
|
|
294
|
+
This example comes from the [minifier's scope regression tests](https://github.com/chrisifm/BRAINLLM/blob/main/crates/brain-min/src/mangle.rs):
|
|
295
|
+
|
|
296
|
+
```js
|
|
297
|
+
// Before
|
|
298
|
+
function outer(longName, other) {
|
|
299
|
+
const total = longName + other.value;
|
|
300
|
+
return total + window.x;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
// After
|
|
304
|
+
function a(a,b){const c=a+b.value;return c+window.x}
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
Property names and external references retain their meaning. Exported bindings and other protected names follow
|
|
308
|
+
the minifier's preservation rules. The source stays readable; the production artifact gets smaller identifiers.
|
|
309
|
+
That saves output bytes, not automatically the tokens used by an LLM reading source. Reducing agent context cost
|
|
310
|
+
is a separate design goal served by the language contract, focused reads and project map; quantify it with a
|
|
311
|
+
measured agent workflow before claiming a token saving.
|
|
312
|
+
|
|
313
|
+
## Errors should give the agent a next move.
|
|
314
|
+
|
|
315
|
+
BRAINLLM includes protections at several stages of the app loop:
|
|
316
|
+
|
|
317
|
+
- **Before it ships:** compiler checks cover supported language rules, accessibility and server/client boundaries.
|
|
318
|
+
Private environment values belong on the server; client access is restricted to `PUBLIC_` values.
|
|
319
|
+
- **At the form:** schemas define required fields and supported types; server field errors return to the form.
|
|
320
|
+
The application still owns its business rules, authorization and server-side validation.
|
|
321
|
+
- **When a component fails:** runtime boundaries capture render and reactive errors, report them and replace the
|
|
322
|
+
affected component with a fallback. A failing event handler reports the error while keeping the component.
|
|
323
|
+
Retry is bounded: three failures within ten seconds remove the retry button.
|
|
324
|
+
- **When work runs away:** runtime budgets stop affected components that exceed monitored limits. The production
|
|
325
|
+
build also probes views with simulated timers for unbounded growth. `brain doctor` runs the project's checks,
|
|
326
|
+
tests and diagnostics; failed stages remain visible to the agent.
|
|
327
|
+
|
|
328
|
+
These are implemented mechanisms, not a promise to catch every bug or repair every failure. The agent still needs
|
|
329
|
+
to test the user's workflow. See [runtime behavior in the spec](https://github.com/chrisifm/BRAINLLM/blob/main/SPEC.md#errors-at-runtime),
|
|
330
|
+
[component boundaries](https://github.com/chrisifm/BRAINLLM/blob/main/runtime/brain-guard.js) and [compiler diagnostics](https://github.com/chrisifm/BRAINLLM/blob/main/crates/brain-check/).
|
|
331
|
+
|
|
332
|
+
## Build the tool your agent needs
|
|
333
|
+
|
|
334
|
+
**Build with it. Let your LLM make it better.**
|
|
335
|
+
|
|
336
|
+

|
|
337
|
+
|
|
338
|
+
A failed compilation can become a regression test. A repeated slow step can become a benchmark. A fix made while
|
|
339
|
+
building your app can become a contribution that helps the next developer and their agent.
|
|
340
|
+
|
|
341
|
+
Found a compiler gap while building an app? Turn the smallest reproducible case into a regression test and a
|
|
342
|
+
contribution. BRAINLLM includes an [evolution workflow](https://github.com/chrisifm/BRAINLLM/blob/main/docs/EVOLUTION.md) for isolated proposals, validated compiler
|
|
343
|
+
binaries and reversible activation. Configured automatic pushes go to review branches; merges require the
|
|
344
|
+
principal author's review. This is an explicit development workflow, not a compiler that silently rewrites itself
|
|
345
|
+
on every build. Read the [agent improvement playbook](https://github.com/chrisifm/BRAINLLM/blob/main/docs/AGENT-IDEAS.md) for an opt-in prompt and concrete ideas
|
|
346
|
+
to investigate.
|
|
347
|
+
|
|
348
|
+
Human developers and LLM contributors are welcome. Useful first contributions include reproducible compiler bugs,
|
|
349
|
+
behavior-preserving migration examples, clearer diagnostics and performance improvements with before/after data.
|
|
350
|
+
|
|
351
|
+
1. Read [CONTRIBUTING.md](https://github.com/chrisifm/BRAINLLM/blob/main/CONTRIBUTING.md) and the relevant [internals](https://github.com/chrisifm/BRAINLLM/blob/main/docs/INTERNALS.md).
|
|
352
|
+
2. Make a focused change with a regression test and synthetic sample data.
|
|
353
|
+
3. Run `bash scripts/verify.sh`. It builds the CLI and checks Rust, runtime, tooling, diagnostic fixtures, privacy
|
|
354
|
+
and repository language. Verification also requires ripgrep.
|
|
355
|
+
4. Open a pull request with the problem, resulting behavior and actual validation evidence.
|
|
356
|
+
|
|
357
|
+
Changes to what app authors write also require the frozen LLM benchmark workflow described in CONTRIBUTING.
|
|
358
|
+
Never include app secrets, private source or customer data in a contribution.
|
|
359
|
+
|
|
360
|
+
## Know what you are adopting
|
|
361
|
+
|
|
362
|
+
BRAINLLM is **0.3.1** (see [CHANGELOG.md](https://github.com/chrisifm/BRAINLLM/blob/main/CHANGELOG.md)). Start with a small app or an isolated route and test the behavior you need. Features marked
|
|
363
|
+
as planned in the source specification are not a supported promise; `brain spec` serves the implemented contract.
|
|
364
|
+
Third-party React, Angular and Vue components do not become BRAINLLM components automatically. Benchmark wins in
|
|
365
|
+
build time do not imply that every runtime workload is faster.
|
|
366
|
+
|
|
367
|
+
## Keep building
|
|
368
|
+
|
|
369
|
+
| You want to… | Start here |
|
|
370
|
+
|---|---|
|
|
371
|
+
| Give an agent the project context | [llms.txt](https://github.com/chrisifm/BRAINLLM/blob/main/llms.txt) |
|
|
372
|
+
| Write an app | [SPEC.md](https://github.com/chrisifm/BRAINLLM/blob/main/SPEC.md) and `brain spec` |
|
|
373
|
+
| Migrate an existing frontend | [Migration guide](https://github.com/chrisifm/BRAINLLM/blob/main/docs/MIGRATION.md) |
|
|
374
|
+
| Improve the compiler while using it | [Evolution workflow](https://github.com/chrisifm/BRAINLLM/blob/main/docs/EVOLUTION.md) and [agent ideas](https://github.com/chrisifm/BRAINLLM/blob/main/docs/AGENT-IDEAS.md) |
|
|
375
|
+
| Understand the implementation | [Internals](https://github.com/chrisifm/BRAINLLM/blob/main/docs/INTERNALS.md) and [crates](https://github.com/chrisifm/BRAINLLM/blob/main/crates/) |
|
|
376
|
+
| Inspect examples and reproduce measurements | [Examples](https://github.com/chrisifm/BRAINLLM/blob/main/examples/) and [benchmarks](https://github.com/chrisifm/BRAINLLM/blob/main/bench/) |
|
|
377
|
+
| Contribute a change | [Contributor guide](https://github.com/chrisifm/BRAINLLM/blob/main/CONTRIBUTING.md) |
|
|
378
|
+
|
|
379
|
+
Released under the [MIT license](https://github.com/chrisifm/BRAINLLM/blob/main/LICENSE).
|
|
380
|
+
|
|
381
|
+
Created and maintained by **Christian Irack Flores Maldonado**, principal author.
|
|
382
|
+
[ingenieria.dev](https://ingenieria.dev) · [irack.mx](https://irack.mx) · [christian@irack.mx](mailto:christian@irack.mx)
|
|
383
|
+
|
|
384
|
+
<!-- contributors:start -->
|
|
385
|
+
## Built by contributors
|
|
386
|
+
|
|
387
|
+
Every merged contribution helps the next developer and their agent. Thank you to the public GitHub accounts credited below.
|
|
388
|
+
|
|
389
|
+
[<img src="https://avatars.githubusercontent.com/u/1562002?v=4" width="48" height="48" alt="chrisifm">](https://github.com/chrisifm) [chrisifm](https://github.com/chrisifm)
|
|
390
|
+
|
|
391
|
+
Attribution is refreshed through a reviewed pull request. [How it works](https://github.com/chrisifm/BRAINLLM/blob/main/docs/CONTRIBUTORS.md).
|
|
392
|
+
<!-- contributors:end -->
|
package/bin/brain.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// `brain` launcher (INTERNALS §23): runs the native binary of this platform, shipped in one of the
|
|
3
|
+
// @christianirack/brainllm-<os>-<arch> optional dependencies. No postinstall, no download, no dependencies.
|
|
4
|
+
//
|
|
5
|
+
// 1. A global `brain` delegates to the version the project pins (node_modules/@christianirack/brainllm of the nearest
|
|
6
|
+
// package.json above the working directory), so two projects on different versions coexist.
|
|
7
|
+
// 2. BRAIN_BINARY=<path> runs that binary instead (local builds, unsupported platforms).
|
|
8
|
+
// 3. Otherwise the platform package's bin/brain(.exe); its exit code and signal pass through unchanged.
|
|
9
|
+
'use strict'
|
|
10
|
+
const { spawnSync } = require('node:child_process')
|
|
11
|
+
const { existsSync, realpathSync } = require('node:fs')
|
|
12
|
+
const { dirname, join, resolve } = require('node:path')
|
|
13
|
+
|
|
14
|
+
const SCOPE = '@christianirack'
|
|
15
|
+
const here = realpathSync(__dirname)
|
|
16
|
+
|
|
17
|
+
function projectLauncher() {
|
|
18
|
+
if (process.env.BRAIN_NO_DELEGATE) return null
|
|
19
|
+
let dir = process.cwd()
|
|
20
|
+
for (;;) {
|
|
21
|
+
const cand = join(dir, 'node_modules', SCOPE, 'brainllm', 'bin', 'brain.js')
|
|
22
|
+
if (existsSync(cand)) {
|
|
23
|
+
const real = realpathSync(cand)
|
|
24
|
+
return dirname(real) === here ? null : real
|
|
25
|
+
}
|
|
26
|
+
const up = dirname(dir)
|
|
27
|
+
if (up === dir) return null
|
|
28
|
+
dir = up
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function isMusl() {
|
|
33
|
+
if (process.platform !== 'linux') return false
|
|
34
|
+
try {
|
|
35
|
+
return !process.report.getReport().header.glibcVersionRuntime
|
|
36
|
+
} catch {
|
|
37
|
+
return existsSync('/etc/alpine-release')
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function platformPackage() {
|
|
42
|
+
const { platform, arch } = process
|
|
43
|
+
const libc = isMusl() ? '-musl' : ''
|
|
44
|
+
const supported = ['darwin-arm64', 'darwin-x64', 'linux-x64', 'linux-arm64', 'linux-x64-musl', 'win32-x64', 'win32-arm64']
|
|
45
|
+
const key = `${platform}-${arch}${libc}`
|
|
46
|
+
return supported.includes(key) ? `${SCOPE}/brainllm-${key}` : null
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function binary() {
|
|
50
|
+
if (process.env.BRAIN_BINARY) return resolve(process.env.BRAIN_BINARY)
|
|
51
|
+
const pkg = platformPackage()
|
|
52
|
+
if (!pkg) {
|
|
53
|
+
fail(`no prebuilt brain for ${process.platform}-${process.arch}; fix: build it with \`cargo build --release -p brain-cli\` and set BRAIN_BINARY to target/release/brain`)
|
|
54
|
+
}
|
|
55
|
+
const exe = process.platform === 'win32' ? 'brain.exe' : 'brain'
|
|
56
|
+
try {
|
|
57
|
+
return join(dirname(require.resolve(`${pkg}/package.json`, { paths: [here] })), 'bin', exe)
|
|
58
|
+
} catch {
|
|
59
|
+
fail(`${pkg} is not installed (it is an optional dependency of ${SCOPE}/brainllm); fix: reinstall without --no-optional / --omit=optional, e.g. \`npm install ${SCOPE}/brainllm\``)
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function fail(msg) {
|
|
64
|
+
process.stderr.write(`error: ${msg}\n`)
|
|
65
|
+
process.exit(3)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const delegate = projectLauncher()
|
|
69
|
+
const [cmd, args] = delegate ? [process.execPath, [delegate, ...process.argv.slice(2)]] : [binary(), process.argv.slice(2)]
|
|
70
|
+
const r = spawnSync(cmd, args, { stdio: 'inherit', windowsHide: true })
|
|
71
|
+
if (r.error) fail(`could not run ${cmd}: ${r.error.message}`)
|
|
72
|
+
if (r.signal) process.kill(process.pid, r.signal)
|
|
73
|
+
process.exit(r.status ?? 1)
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "brain.schema.json",
|
|
4
|
+
"title": "brain.json",
|
|
5
|
+
"description": "BRAINLLM app configuration. Precedence: flag > BRAIN_* variable > brain.json > defaults.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"$schema": {
|
|
9
|
+
"type": "string"
|
|
10
|
+
},
|
|
11
|
+
"name": {
|
|
12
|
+
"type": "string",
|
|
13
|
+
"description": "App name (SEO, web manifest)."
|
|
14
|
+
},
|
|
15
|
+
"description": {
|
|
16
|
+
"type": "string"
|
|
17
|
+
},
|
|
18
|
+
"lang": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"description": "Default document language, e.g. \"en\"."
|
|
21
|
+
},
|
|
22
|
+
"site": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"format": "uri",
|
|
25
|
+
"description": "Public origin, e.g. https://example.com. Prefer PUBLIC_SITE_URL in .brain_env."
|
|
26
|
+
},
|
|
27
|
+
"base": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"pattern": "^/([^/?#\\s]+/)*$",
|
|
30
|
+
"default": "/",
|
|
31
|
+
"description": "Path the app is hosted under: starts and ends with \"/\", e.g. \"/app/\". brain run, brain build and brain start serve every URL under it."
|
|
32
|
+
},
|
|
33
|
+
"cache": {
|
|
34
|
+
"type": "object",
|
|
35
|
+
"properties": {
|
|
36
|
+
"http": {
|
|
37
|
+
"type": "boolean",
|
|
38
|
+
"default": true
|
|
39
|
+
},
|
|
40
|
+
"sw": {
|
|
41
|
+
"type": "boolean",
|
|
42
|
+
"default": true
|
|
43
|
+
},
|
|
44
|
+
"offline": {
|
|
45
|
+
"type": "boolean",
|
|
46
|
+
"default": true
|
|
47
|
+
},
|
|
48
|
+
"data": {
|
|
49
|
+
"type": "boolean",
|
|
50
|
+
"default": true
|
|
51
|
+
},
|
|
52
|
+
"precacheKB": {
|
|
53
|
+
"type": "number",
|
|
54
|
+
"minimum": 0,
|
|
55
|
+
"default": 2048
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"seo": {
|
|
60
|
+
"type": "object",
|
|
61
|
+
"properties": {
|
|
62
|
+
"minScore": {
|
|
63
|
+
"type": "number",
|
|
64
|
+
"minimum": 0,
|
|
65
|
+
"maximum": 100,
|
|
66
|
+
"default": 80
|
|
67
|
+
},
|
|
68
|
+
"sitemap": {
|
|
69
|
+
"type": "boolean",
|
|
70
|
+
"default": true
|
|
71
|
+
},
|
|
72
|
+
"llms": {
|
|
73
|
+
"type": "boolean",
|
|
74
|
+
"default": true
|
|
75
|
+
},
|
|
76
|
+
"llmsFull": {
|
|
77
|
+
"type": "boolean",
|
|
78
|
+
"default": true
|
|
79
|
+
},
|
|
80
|
+
"manifest": {
|
|
81
|
+
"type": "boolean",
|
|
82
|
+
"default": true
|
|
83
|
+
},
|
|
84
|
+
"indexnow": {
|
|
85
|
+
"type": "boolean",
|
|
86
|
+
"default": false
|
|
87
|
+
},
|
|
88
|
+
"markdown": {
|
|
89
|
+
"type": "boolean",
|
|
90
|
+
"default": true,
|
|
91
|
+
"description": "Publish a Markdown copy of every indexable page (/pricing.md), link it, and serve it on the page URL when Accept prefers text/markdown (Vary: Accept); false turns all three off"
|
|
92
|
+
},
|
|
93
|
+
"feed": {
|
|
94
|
+
"type": "boolean",
|
|
95
|
+
"default": true,
|
|
96
|
+
"description": "Write rss.xml (site feed, like WordPress /feed) and <section>/rss.xml for each section without a content collection, linked from every page; false turns them off"
|
|
97
|
+
},
|
|
98
|
+
"sections": {
|
|
99
|
+
"type": "boolean",
|
|
100
|
+
"default": true,
|
|
101
|
+
"description": "Write sections.json, the manifest of every section (title, description, home page, feed and pages with URL, Markdown copy and lastmod), linked from every page; false turns it off"
|
|
102
|
+
},
|
|
103
|
+
"ai": {
|
|
104
|
+
"enum": [
|
|
105
|
+
"allow",
|
|
106
|
+
"search-only",
|
|
107
|
+
"block"
|
|
108
|
+
],
|
|
109
|
+
"default": "allow",
|
|
110
|
+
"description": "AI crawler policy in robots.txt: allow (training, answers, search), search-only (no training) or block (no AI crawler)"
|
|
111
|
+
},
|
|
112
|
+
"og": {
|
|
113
|
+
"enum": [
|
|
114
|
+
"missing",
|
|
115
|
+
"always",
|
|
116
|
+
"off"
|
|
117
|
+
],
|
|
118
|
+
"default": "missing",
|
|
119
|
+
"description": "Generated Open Graph images: only for pages without og:image, for every page, or never"
|
|
120
|
+
},
|
|
121
|
+
"search": {
|
|
122
|
+
"type": "string",
|
|
123
|
+
"pattern": "\\{query\\}",
|
|
124
|
+
"description": "Site search URL with {query}, added as a SearchAction to the home page WebSite JSON-LD"
|
|
125
|
+
},
|
|
126
|
+
"news": {
|
|
127
|
+
"type": "object",
|
|
128
|
+
"required": [
|
|
129
|
+
"name",
|
|
130
|
+
"collections"
|
|
131
|
+
],
|
|
132
|
+
"properties": {
|
|
133
|
+
"name": {
|
|
134
|
+
"type": "string",
|
|
135
|
+
"description": "Publication name Google News shows"
|
|
136
|
+
},
|
|
137
|
+
"collections": {
|
|
138
|
+
"type": "array",
|
|
139
|
+
"minItems": 1,
|
|
140
|
+
"items": {
|
|
141
|
+
"type": "string"
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
"description": "Google News sitemap from these content collections"
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
"budget": {
|
|
150
|
+
"type": "object",
|
|
151
|
+
"additionalProperties": false,
|
|
152
|
+
"description": "Build byte budgets. mountMs and heapMB are planned browser measurements and are rejected until implemented.",
|
|
153
|
+
"properties": {
|
|
154
|
+
"viewKB": {
|
|
155
|
+
"type": "number",
|
|
156
|
+
"minimum": 0,
|
|
157
|
+
"description": "Maximum KiB (1024 bytes) of emitted JS, CSS and HTML per route. Uses gzip when smaller, otherwise raw bytes; includes the conservatively reachable JS graph, including lazy chunks. Excludes images/fonts. Exceeding this value fails build."
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
"i18n": {
|
|
162
|
+
"type": "object",
|
|
163
|
+
"properties": {
|
|
164
|
+
"default": {
|
|
165
|
+
"type": "string"
|
|
166
|
+
},
|
|
167
|
+
"locales": {
|
|
168
|
+
"type": "array",
|
|
169
|
+
"items": {
|
|
170
|
+
"type": "string"
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
"ext": {
|
|
176
|
+
"type": "string",
|
|
177
|
+
"enum": [
|
|
178
|
+
"web",
|
|
179
|
+
"brain"
|
|
180
|
+
],
|
|
181
|
+
"default": "web",
|
|
182
|
+
"description": "Published file names: web (.html/.js/.css) or brain (.brain/.jsbrain/.cssbrain, with Content-Type set by _headers, nginx and Caddy). brain build --ext overrides it."
|
|
183
|
+
},
|
|
184
|
+
"lint": {
|
|
185
|
+
"type": "object",
|
|
186
|
+
"description": "Per-rule level, e.g. {\"B1307\": \"off\"}. Only the quality families (B09xx-B13xx) can be changed; other overrides are ignored.",
|
|
187
|
+
"propertyNames": {
|
|
188
|
+
"pattern": "^B(09|1[0-3])[0-9]{2}$"
|
|
189
|
+
},
|
|
190
|
+
"additionalProperties": {
|
|
191
|
+
"enum": [
|
|
192
|
+
"off",
|
|
193
|
+
"info",
|
|
194
|
+
"warning",
|
|
195
|
+
"error"
|
|
196
|
+
]
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
"targets": {
|
|
200
|
+
"enum": [
|
|
201
|
+
"baseline-widely",
|
|
202
|
+
"baseline-newly"
|
|
203
|
+
],
|
|
204
|
+
"default": "baseline-widely",
|
|
205
|
+
"description": "Browser support target of the B12xx compatibility rules: Baseline widely available (default) or newly available."
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,46 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@christianirack/brainllm",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.3.1",
|
|
4
|
+
"description": "BRAINLLM: the web compiler for LLMs, built in Rust. One blazing-fast native binary: the `brain` CLI, dev server, build (~34 ms) and MCP server.",
|
|
5
|
+
"bin": {
|
|
6
|
+
"brain": "bin/brain.js"
|
|
7
|
+
},
|
|
8
|
+
"files": [
|
|
9
|
+
"bin",
|
|
10
|
+
"brain.schema.json",
|
|
11
|
+
"README.md"
|
|
12
|
+
],
|
|
13
|
+
"engines": {
|
|
14
|
+
"node": ">=22"
|
|
15
|
+
},
|
|
16
|
+
"optionalDependencies": {
|
|
17
|
+
"@christianirack/brainllm-darwin-arm64": "0.3.1",
|
|
18
|
+
"@christianirack/brainllm-darwin-x64": "0.3.1",
|
|
19
|
+
"@christianirack/brainllm-linux-x64": "0.3.1",
|
|
20
|
+
"@christianirack/brainllm-linux-arm64": "0.3.1",
|
|
21
|
+
"@christianirack/brainllm-linux-x64-musl": "0.3.1",
|
|
22
|
+
"@christianirack/brainllm-win32-x64": "0.3.1",
|
|
23
|
+
"@christianirack/brainllm-win32-arm64": "0.3.1"
|
|
24
|
+
},
|
|
25
|
+
"keywords": [
|
|
26
|
+
"framework",
|
|
27
|
+
"llm",
|
|
28
|
+
"ai",
|
|
29
|
+
"compiler",
|
|
30
|
+
"rust",
|
|
31
|
+
"fast",
|
|
32
|
+
"mcp",
|
|
33
|
+
"web"
|
|
34
|
+
],
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"author": "Christian Irack Flores Maldonado <christian@irack.mx> (https://ingenieria.dev)",
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "git+https://github.com/chrisifm/BRAINLLM.git"
|
|
40
|
+
},
|
|
41
|
+
"homepage": "https://chrisifm.github.io/BRAINLLM/",
|
|
42
|
+
"publishConfig": {
|
|
43
|
+
"access": "public",
|
|
44
|
+
"registry": "https://registry.npmjs.org/"
|
|
45
|
+
}
|
|
46
|
+
}
|