byollm 0.1.0-alpha.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/LICENSE +21 -0
- package/README.md +118 -0
- package/dist/bin.d.ts +1 -0
- package/dist/bin.js +8 -0
- package/dist/bin.js.map +1 -0
- package/dist/chunk-S5WHDSUF.js +2358 -0
- package/dist/chunk-S5WHDSUF.js.map +1 -0
- package/dist/index.d.ts +913 -0
- package/dist/index.js +65 -0
- package/dist/index.js.map +1 -0
- package/package.json +47 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Of Tomorrow, Inc.
|
|
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
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# `byollm`
|
|
2
|
+
|
|
3
|
+
What end users run. Connects **outbound** to an app you trust, claims only the
|
|
4
|
+
jobs you have agreed to run, and executes them on your own models.
|
|
5
|
+
|
|
6
|
+
```bash
|
|
7
|
+
npx byollm@alpha connect https://your-app.com
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
There is nothing to open on your network. The daemon never listens.
|
|
11
|
+
|
|
12
|
+
## Five minutes, start to finish
|
|
13
|
+
|
|
14
|
+
You need a model server. Ollama is the usual one:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
ollama serve # http://127.0.0.1:11434
|
|
18
|
+
ollama pull gemma3:12b
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Then:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npx byollm@alpha connect https://your-app.com
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
Open: https://your-app.com/settings/runners
|
|
29
|
+
Code: KRTZ-9F2Q (expires in 10m)
|
|
30
|
+
|
|
31
|
+
waiting for approval… ✓ paired as you@example.com
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
You approve inside the app's own login session — the daemon never asks for a
|
|
35
|
+
password and never accepts a pasted secret.
|
|
36
|
+
|
|
37
|
+
## Configuration
|
|
38
|
+
|
|
39
|
+
`~/.byollm/config.json`. Everything the daemon will ever do is in this file.
|
|
40
|
+
|
|
41
|
+
```jsonc
|
|
42
|
+
{
|
|
43
|
+
"backends": {
|
|
44
|
+
// One HTTP backend covers Ollama, MLX, llama.cpp and vLLM — they all
|
|
45
|
+
// speak OpenAI-compatible /v1/chat/completions.
|
|
46
|
+
"local": {
|
|
47
|
+
"backend": "openai-http",
|
|
48
|
+
"baseUrl": "http://127.0.0.1:11434/v1",
|
|
49
|
+
},
|
|
50
|
+
"mlx": { "backend": "openai-http", "baseUrl": "http://127.0.0.1:8080/v1" },
|
|
51
|
+
"claude": { "backend": "claude-cli" },
|
|
52
|
+
},
|
|
53
|
+
"routes": {
|
|
54
|
+
"llm.generate": { "backend": "local", "model": "gemma3:12b" },
|
|
55
|
+
"llm.chat": { "backend": "claude", "model": "claude-opus-5" },
|
|
56
|
+
},
|
|
57
|
+
"concurrency": 2,
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
A job's `kind` selects a route **you defined**. A job can never name a model, a
|
|
62
|
+
URL, a path or a flag — there is no field on the wire for any of them.
|
|
63
|
+
|
|
64
|
+
`byollm backends` shows what is configured, what is healthy, and what is
|
|
65
|
+
therefore advertised. A backend that is down is never advertised, so you never
|
|
66
|
+
get work you cannot run.
|
|
67
|
+
|
|
68
|
+
## The trust surface
|
|
69
|
+
|
|
70
|
+
The meter is the product, and it gets the same care as the loop.
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
byollm status # what's connected, what's running, what you've done for others
|
|
74
|
+
byollm log # every prompt that has ever run here
|
|
75
|
+
byollm log --full # the whole text, not the first line
|
|
76
|
+
byollm pause # stop claiming work
|
|
77
|
+
byollm resume
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Every prompt is appended to `~/.byollm/ingress.log` **before** it executes, so
|
|
81
|
+
a job that wedges the machine still leaves a record of what it was. The file is
|
|
82
|
+
JSONL, `0600`, and yours to read, grep and delete.
|
|
83
|
+
|
|
84
|
+
## Lending your machine to other people
|
|
85
|
+
|
|
86
|
+
Off by default. A fresh daemon runs your work and nobody else's.
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
byollm allow https://your-app.com alice # asks you to confirm, in plain words
|
|
90
|
+
byollm allow --list # everyone who can use this machine
|
|
91
|
+
byollm disallow https://your-app.com alice
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
The allowlist is **yours**, checked locally, keyed by `(app, user)`. An app
|
|
95
|
+
saying "this runner is allowed" is not enough — your daemon decides. Community
|
|
96
|
+
jobs are additionally rate-limited, capped daily, given a tighter resource
|
|
97
|
+
budget, and their prompts are reduced to hashes after 7 days so you are not
|
|
98
|
+
holding strangers' content indefinitely.
|
|
99
|
+
|
|
100
|
+
**Your subscription-backed models are never part of this.** `claude-cli` is
|
|
101
|
+
locked to your own work — a protocol rule, not a setting you can change.
|
|
102
|
+
|
|
103
|
+
## Security
|
|
104
|
+
|
|
105
|
+
Every payload is treated as hostile input. Breakout is structurally
|
|
106
|
+
impossible: process-class backends get a fixed argv with the prompt on stdin,
|
|
107
|
+
a stripped environment, an empty scratch directory and hard timeout/output
|
|
108
|
+
caps; HTTP-class backends spawn nothing at all. The model has no tools, no
|
|
109
|
+
retrieval and no MCP.
|
|
110
|
+
|
|
111
|
+
Prompt injection — steering what the model _says_ — is not prevented by
|
|
112
|
+
anything and we do not claim otherwise. It is bounded here because the model
|
|
113
|
+
has no tools and the output is inert.
|
|
114
|
+
|
|
115
|
+
Full threat model, including what the OS stops us dropping:
|
|
116
|
+
[`docs/security.md`](../../docs/security.md).
|
|
117
|
+
|
|
118
|
+
MIT
|
package/dist/bin.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
package/dist/bin.js
ADDED
package/dist/bin.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/bin.ts"],"sourcesContent":["#!/usr/bin/env node\n/**\n * The `byollm` executable.\n *\n * Deliberately the only module in this package that *does* something on\n * import. `cli.ts` stays a pure module so it can be imported as a library —\n * and so the bundler cannot hoist the command implementations into a shared\n * chunk and leave this entry with nothing to run, which is exactly what\n * happened when the two were the same file.\n */\nimport { main } from \"./cli.js\";\n\nprocess.exitCode = await main(process.argv.slice(2));\n"],"mappings":";;;;;;AAYA,QAAQ,WAAW,MAAM,KAAK,QAAQ,KAAK,MAAM,CAAC,CAAC;","names":[]}
|