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 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
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ main
4
+ } from "./chunk-S5WHDSUF.js";
5
+
6
+ // src/bin.ts
7
+ process.exitCode = await main(process.argv.slice(2));
8
+ //# sourceMappingURL=bin.js.map
@@ -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":[]}