@rotifer/playground 0.1.0-alpha.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/CHANGELOG.md +62 -0
- package/LICENSE +31 -0
- package/README.md +230 -0
- package/dist/commands/agent-create.d.ts +3 -0
- package/dist/commands/agent-create.d.ts.map +1 -0
- package/dist/commands/agent-create.js +86 -0
- package/dist/commands/agent-create.js.map +1 -0
- package/dist/commands/agent-list.d.ts +3 -0
- package/dist/commands/agent-list.d.ts.map +1 -0
- package/dist/commands/agent-list.js +83 -0
- package/dist/commands/agent-list.js.map +1 -0
- package/dist/commands/arena-list.d.ts +3 -0
- package/dist/commands/arena-list.d.ts.map +1 -0
- package/dist/commands/arena-list.js +116 -0
- package/dist/commands/arena-list.js.map +1 -0
- package/dist/commands/arena-submit.d.ts +3 -0
- package/dist/commands/arena-submit.d.ts.map +1 -0
- package/dist/commands/arena-submit.js +106 -0
- package/dist/commands/arena-submit.js.map +1 -0
- package/dist/commands/arena-watch.d.ts +3 -0
- package/dist/commands/arena-watch.d.ts.map +1 -0
- package/dist/commands/arena-watch.js +56 -0
- package/dist/commands/arena-watch.js.map +1 -0
- package/dist/commands/compile.d.ts +3 -0
- package/dist/commands/compile.d.ts.map +1 -0
- package/dist/commands/compile.js +107 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +215 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/scan.d.ts +3 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +106 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/test.d.ts +3 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +155 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/wrap.d.ts +3 -0
- package/dist/commands/wrap.d.ts.map +1 -0
- package/dist/commands/wrap.js +94 -0
- package/dist/commands/wrap.js.map +1 -0
- package/dist/errors/formatter.d.ts +25 -0
- package/dist/errors/formatter.d.ts.map +1 -0
- package/dist/errors/formatter.js +43 -0
- package/dist/errors/formatter.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/config.d.ts +12 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +40 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/display.d.ts +16 -0
- package/dist/utils/display.d.ts.map +1 -0
- package/dist/utils/display.js +56 -0
- package/dist/utils/display.js.map +1 -0
- package/genes/genesis-code-format/index.ts +42 -0
- package/genes/genesis-code-format/phenotype.json +29 -0
- package/genes/genesis-file-read/index.ts +33 -0
- package/genes/genesis-file-read/phenotype.json +29 -0
- package/genes/genesis-l0-constraint/index.ts +62 -0
- package/genes/genesis-l0-constraint/phenotype.json +37 -0
- package/genes/genesis-web-search/index.ts +39 -0
- package/genes/genesis-web-search/phenotype.json +40 -0
- package/genes/genesis-web-search-lite/index.ts +22 -0
- package/genes/genesis-web-search-lite/phenotype.json +27 -0
- package/package.json +72 -0
- package/templates/composition/par-example.json +11 -0
- package/templates/composition/seq-example.json +9 -0
- package/templates/gene/index.ts +13 -0
- package/templates/gene/phenotype.json +21 -0
- package/templates/gene/test.ts +15 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [0.1.0-alpha.1] - 2026-02-20
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **CLI Framework**: 10 commands covering the full gene development lifecycle
|
|
13
|
+
- `rotifer init` — project scaffolding with Genesis genes and Arena preview
|
|
14
|
+
- `rotifer scan` — discover candidate functions from source files
|
|
15
|
+
- `rotifer wrap` — wrap functions as Rotifer genes (Phenotype generation)
|
|
16
|
+
- `rotifer test` — L2 sandbox testing (schema validation, conformance)
|
|
17
|
+
- `rotifer compile` — Phenotype validation and gene fingerprinting
|
|
18
|
+
- `rotifer arena submit` — submit genes to local Arena with admission gate
|
|
19
|
+
- `rotifer arena list` — view Arena rankings with F(g), V(g), Fidelity
|
|
20
|
+
- `rotifer arena watch` — placeholder for live ranking updates
|
|
21
|
+
- `rotifer agent create` — create Agents with gene genomes
|
|
22
|
+
- `rotifer agent list` — view all registered Agents
|
|
23
|
+
|
|
24
|
+
- **Rust Core** (`rotifer-core` crate)
|
|
25
|
+
- Type system: Context, GeneResult, Phenotype, Gene, Agent, AlgebraExpr
|
|
26
|
+
- WASM Sandbox via wasmtime (resource limits, fuel consumption, epoch interruption)
|
|
27
|
+
- Arena Engine: local ranking with fitness-based sorting
|
|
28
|
+
- Algebra Executor: Seq, Par, Cond, Try, Transform composition
|
|
29
|
+
- Fitness computation: simplified F(g) model with admission threshold
|
|
30
|
+
- SQLite storage: genes, agents, arena entries
|
|
31
|
+
- Gene compiler: scan, wrap, schema generation
|
|
32
|
+
- Agent manager: create, activate, terminate lifecycle
|
|
33
|
+
|
|
34
|
+
- **napi-rs Bridge** (`rotifer-napi` crate)
|
|
35
|
+
- PlaygroundBinding facade: 10 methods bridging Rust Core to TypeScript
|
|
36
|
+
- Source file scanner (TypeScript + Rust function detection)
|
|
37
|
+
|
|
38
|
+
- **5 Genesis Genes** (pre-installed with every project)
|
|
39
|
+
- `genesis-web-search` — full search with multiple results
|
|
40
|
+
- `genesis-web-search-lite` — lightweight single-answer search
|
|
41
|
+
- `genesis-file-read` — local file reading
|
|
42
|
+
- `genesis-code-format` — source code formatting
|
|
43
|
+
- `genesis-l0-constraint` — L0 sandbox constraint checker
|
|
44
|
+
|
|
45
|
+
- **Developer Experience** (ADR-068)
|
|
46
|
+
- Three-act Demo: Wow (30s) → Aha (5min) → Hooked (30min)
|
|
47
|
+
- Rust-style error messages with codes, suggestions, and docs links
|
|
48
|
+
- Automatic pre-submission testing on `arena submit`
|
|
49
|
+
- Deterministic Arena rankings from Phenotype content hashing
|
|
50
|
+
|
|
51
|
+
- **Templates**: gene scaffold + Seq/Par composition examples
|
|
52
|
+
- **Test Suite**: 29 tests (unit + E2E) covering full lifecycle
|
|
53
|
+
- **demo.sh**: automated three-act demonstration script
|
|
54
|
+
|
|
55
|
+
### Protocol Compliance
|
|
56
|
+
|
|
57
|
+
Implements Rotifer Protocol Specification v2.9 (Frozen):
|
|
58
|
+
- **Full**: Phenotype, AlgebraExpr, WASM Sandbox, Fitness F(g), Arena
|
|
59
|
+
- **Simplified**: Agent Lifecycle, Gene Lifecycle, RotiferBinding
|
|
60
|
+
- **Stub**: Formal Verification, Cross-Binding Consistency, ZK Proofs
|
|
61
|
+
|
|
62
|
+
[0.1.0-alpha.1]: https://github.com/rotifer-protocol/playground/releases/tag/v0.1.0-alpha.1
|
package/LICENSE
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
GNU AFFERO GENERAL PUBLIC LICENSE
|
|
2
|
+
Version 3, 19 November 2007
|
|
3
|
+
|
|
4
|
+
Copyright (C) 2026 Rotifer Protocol Contributors
|
|
5
|
+
|
|
6
|
+
This program is free software: you can redistribute it and/or modify
|
|
7
|
+
it under the terms of the GNU Affero General Public License as published by
|
|
8
|
+
the Free Software Foundation, either version 3 of the License, or
|
|
9
|
+
(at your option) any later version.
|
|
10
|
+
|
|
11
|
+
This program is distributed in the hope that it will be useful,
|
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
GNU Affero General Public License for more details.
|
|
15
|
+
|
|
16
|
+
You should have received a copy of the GNU Affero General Public License
|
|
17
|
+
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
Additional terms for the Rotifer Protocol:
|
|
22
|
+
|
|
23
|
+
1. "Genesis Genes" included in this package are provided under the same
|
|
24
|
+
AGPL-3.0-or-later license. Genes developed by third parties using this
|
|
25
|
+
tool may use any license compatible with their deployment context.
|
|
26
|
+
|
|
27
|
+
2. The Rotifer Protocol Specification (referenced by this implementation)
|
|
28
|
+
is a separate work with its own licensing terms.
|
|
29
|
+
|
|
30
|
+
For the full AGPL-3.0 license text, see:
|
|
31
|
+
https://www.gnu.org/licenses/agpl-3.0.en.html
|
package/README.md
ADDED
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
# Rotifer Playground
|
|
2
|
+
|
|
3
|
+
[](https://github.com/rotifer-protocol/playground/actions/workflows/ci.yml)
|
|
4
|
+
[](https://www.npmjs.com/package/@rotifer/playground)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
[](https://nodejs.org/)
|
|
7
|
+
[](../spec/rotifer-protocol-specification.md)
|
|
8
|
+
|
|
9
|
+
Local development environment for the **Rotifer Protocol** — build genes, run Arena competitions, and simulate agent evolution.
|
|
10
|
+
|
|
11
|
+
> **Status:** Alpha (v0.1.0-alpha.1). Core gene lifecycle is functional. WASM compilation and live Arena watching are planned for v0.2.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Install
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install -g @rotifer/playground
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Or use directly via npx:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npx @rotifer/playground init my-project
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**Requirements:** Node.js >= 20.0.0
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 30-Second Demo
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
$ rotifer init my-project
|
|
35
|
+
|
|
36
|
+
Rotifer Protocol - Project Initialization
|
|
37
|
+
───────────────────────────────────────────
|
|
38
|
+
✓ Project scaffolding created
|
|
39
|
+
ℹ Installing Genesis genes...
|
|
40
|
+
✓ 5 Genesis genes installed
|
|
41
|
+
|
|
42
|
+
Arena Rankings
|
|
43
|
+
────────────────
|
|
44
|
+
# Name Domain F(g) Fidelity
|
|
45
|
+
────────────────────────────────────────────────────────────────
|
|
46
|
+
1 genesis-web-search search 0.87 Native
|
|
47
|
+
2 genesis-code-format tooling 0.81 Native
|
|
48
|
+
3 genesis-l0-constraint safety 0.79 Native
|
|
49
|
+
4 genesis-web-search-lite search 0.77 Native
|
|
50
|
+
5 genesis-file-read filesystem 0.74 Native
|
|
51
|
+
6 hello-world general 0.57 Wrapped
|
|
52
|
+
|
|
53
|
+
ℹ 6 genes across 5 domain(s) — Arena is alive!
|
|
54
|
+
✓ Project ready: my-project
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
One command. Five Genesis genes. A living Arena.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Three-Act Experience (ADR-068)
|
|
62
|
+
|
|
63
|
+
### Act 1 — Wow (30 seconds)
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
rotifer init my-project && cd my-project
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
You see an Arena with 6 genes ranked by fitness. No configuration needed.
|
|
70
|
+
|
|
71
|
+
### Act 2 — Aha (5 minutes)
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
rotifer scan genes/ # Discover candidate functions
|
|
75
|
+
rotifer wrap hello-world # Wrap as a gene (generates Phenotype)
|
|
76
|
+
rotifer test hello-world # Run L2 sandbox tests
|
|
77
|
+
rotifer arena submit hello-world # Submit to Arena (admission gate)
|
|
78
|
+
rotifer arena list # See your gene's ranking
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Your existing code becomes a gene and competes in the Arena.
|
|
82
|
+
|
|
83
|
+
### Act 3 — Hooked (30 minutes)
|
|
84
|
+
|
|
85
|
+
Write a native gene, compile it, submit to Arena, and create an Agent:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
# Write a native gene (higher fidelity = higher fitness potential)
|
|
89
|
+
mkdir genes/my-search && vim genes/my-search/index.ts
|
|
90
|
+
|
|
91
|
+
rotifer compile my-search # Validate Phenotype + fingerprint
|
|
92
|
+
rotifer arena submit my-search # Watch it climb the rankings
|
|
93
|
+
rotifer arena list --domain search # Compare against Genesis genes
|
|
94
|
+
|
|
95
|
+
# Create an Agent with a gene genome
|
|
96
|
+
rotifer agent create search-bot --genes genesis-web-search my-search
|
|
97
|
+
rotifer agent list
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Architecture
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
playground/
|
|
106
|
+
├── crates/
|
|
107
|
+
│ ├── rotifer-core/ Rust: types, sandbox, arena, algebra, fitness, storage
|
|
108
|
+
│ └── rotifer-napi/ napi-rs bridge: Rust ↔ Node.js FFI
|
|
109
|
+
├── src/ TypeScript CLI (commander.js)
|
|
110
|
+
│ ├── commands/ 10 CLI commands
|
|
111
|
+
│ ├── utils/ Config, display formatting
|
|
112
|
+
│ └── errors/ Rust-style error formatting
|
|
113
|
+
├── genes/ 5 Genesis genes (bundled)
|
|
114
|
+
├── templates/ Gene + composition scaffolds
|
|
115
|
+
└── tests/ Unit + E2E test suites (29 tests)
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Layers
|
|
119
|
+
|
|
120
|
+
| Layer | Technology | Responsibility |
|
|
121
|
+
|-------|-----------|----------------|
|
|
122
|
+
| **CLI** | TypeScript + commander.js | User interface, command routing, display |
|
|
123
|
+
| **Bridge** | napi-rs (cdylib) | Rust-to-Node.js FFI binding |
|
|
124
|
+
| **Core** | Rust + wasmtime | WASM sandbox, Arena engine, Algebra executor, Fitness computation, SQLite storage |
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## CLI Commands
|
|
129
|
+
|
|
130
|
+
| Command | Description |
|
|
131
|
+
|---------|-------------|
|
|
132
|
+
| `rotifer init [name]` | Initialize a new gene project with Genesis genes |
|
|
133
|
+
| `rotifer scan [path]` | Scan source files for candidate gene functions |
|
|
134
|
+
| `rotifer wrap <name>` | Wrap a function as a Rotifer gene |
|
|
135
|
+
| `rotifer test [name]` | Test a gene in L2 sandbox |
|
|
136
|
+
| `rotifer compile [name]` | Compile a gene (validate + fingerprint) |
|
|
137
|
+
| `rotifer arena submit <name>` | Submit a gene to the Arena |
|
|
138
|
+
| `rotifer arena list` | List Arena rankings |
|
|
139
|
+
| `rotifer arena watch <domain>` | Watch Arena rankings (MVP: placeholder) |
|
|
140
|
+
| `rotifer agent create <name>` | Create an Agent with a genome |
|
|
141
|
+
| `rotifer agent list` | List all agents |
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Genesis Genes
|
|
146
|
+
|
|
147
|
+
Five pre-installed genes ship with every project:
|
|
148
|
+
|
|
149
|
+
| Gene | Domain | Fidelity | Description |
|
|
150
|
+
|------|--------|----------|-------------|
|
|
151
|
+
| `genesis-web-search` | search | Native | Full web search with multiple results |
|
|
152
|
+
| `genesis-web-search-lite` | search | Native | Lightweight single-answer search |
|
|
153
|
+
| `genesis-file-read` | filesystem | Native | Read local files (L0 sandbox restricted) |
|
|
154
|
+
| `genesis-code-format` | tooling | Native | Format source code (JSON, TS, etc.) |
|
|
155
|
+
| `genesis-l0-constraint` | safety | Native | L0 sandbox constraint checker |
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Gene Composition (Algebra)
|
|
160
|
+
|
|
161
|
+
Genes can be composed using the Rotifer Algebra:
|
|
162
|
+
|
|
163
|
+
| Operator | Description | Example |
|
|
164
|
+
|----------|-------------|---------|
|
|
165
|
+
| **Seq** | Sequential pipeline | Search → Format |
|
|
166
|
+
| **Par** | Parallel with merge | Search + Search-Lite, take first |
|
|
167
|
+
| **Cond** | Conditional branch | If query.length > 100 → Lite, else → Full |
|
|
168
|
+
| **Try** | Fault tolerance | Primary with fallback |
|
|
169
|
+
| **Transform** | Map/transform | Inner gene → mapper gene |
|
|
170
|
+
|
|
171
|
+
See `templates/composition/` for JSON examples.
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## Development
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
git clone https://github.com/rotifer-protocol/playground.git
|
|
179
|
+
cd playground
|
|
180
|
+
|
|
181
|
+
# TypeScript CLI
|
|
182
|
+
npm install
|
|
183
|
+
npm run build # Build to dist/
|
|
184
|
+
npm test # Run 29 tests
|
|
185
|
+
npm run lint # Type check only
|
|
186
|
+
|
|
187
|
+
# Rust Core (requires Rust toolchain)
|
|
188
|
+
cargo check -p rotifer-core
|
|
189
|
+
cargo test -p rotifer-core
|
|
190
|
+
|
|
191
|
+
# Full demo
|
|
192
|
+
bash demo.sh
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Protocol Compliance
|
|
198
|
+
|
|
199
|
+
Implements **Rotifer Protocol Specification v2.9** (Frozen). Based on 14 rounds of expert discussion and 70 ADRs.
|
|
200
|
+
|
|
201
|
+
| Implementation Depth | Chapters |
|
|
202
|
+
|---------------------|----------|
|
|
203
|
+
| **Full** | Phenotype (§4), AlgebraExpr (§15), WASM Sandbox (§12), Fitness F(g) (§5), Arena (§33) |
|
|
204
|
+
| **Simplified** | Agent Lifecycle (§16), Gene Lifecycle (§46), RotiferBinding (§12) |
|
|
205
|
+
| **Stub** | Formal Verification (§26), Cross-Binding Consistency (§45), ZK Proofs |
|
|
206
|
+
|
|
207
|
+
Changes driven by implementation feedback are proposed through the ADR process.
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## Roadmap
|
|
212
|
+
|
|
213
|
+
- [x] **v0.1.0-alpha.1** — Core CLI + Genesis genes + Arena
|
|
214
|
+
- [ ] **v0.2.0** — WASM compilation pipeline, live Arena watching
|
|
215
|
+
- [ ] **v0.3.0** — Agent gene execution, Seq/Par runtime
|
|
216
|
+
- [ ] **v1.0.0** — Full protocol compliance, multi-binding support
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## Contributing
|
|
221
|
+
|
|
222
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and guidelines.
|
|
223
|
+
|
|
224
|
+
## License
|
|
225
|
+
|
|
226
|
+
[AGPL-3.0-or-later](LICENSE)
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
**The Rotifer Protocol is alive.**
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-create.d.ts","sourceRoot":"","sources":["../../src/commands/agent-create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,kBAAkB,SAoD3B,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.agentCreateCommand = void 0;
|
|
37
|
+
const commander_1 = require("commander");
|
|
38
|
+
const node_fs_1 = require("node:fs");
|
|
39
|
+
const node_path_1 = require("node:path");
|
|
40
|
+
const node_crypto_1 = require("node:crypto");
|
|
41
|
+
const display = __importStar(require("../utils/display.js"));
|
|
42
|
+
const config_js_1 = require("../utils/config.js");
|
|
43
|
+
exports.agentCreateCommand = new commander_1.Command("create")
|
|
44
|
+
.description("Create a new Agent with a genome of genes")
|
|
45
|
+
.argument("<name>", "agent name")
|
|
46
|
+
.option("-g, --genes <genes...>", "gene names to include in genome")
|
|
47
|
+
.action(async (name, options) => {
|
|
48
|
+
const root = (0, config_js_1.getProjectRoot)();
|
|
49
|
+
const config = (0, config_js_1.loadConfig)(root);
|
|
50
|
+
display.header("Agent Creation");
|
|
51
|
+
const agentsDir = (0, node_path_1.join)(root, ".rotifer", "agents");
|
|
52
|
+
(0, node_fs_1.mkdirSync)(agentsDir, { recursive: true });
|
|
53
|
+
const agentId = (0, node_crypto_1.randomUUID)();
|
|
54
|
+
const genome = [];
|
|
55
|
+
if (options.genes) {
|
|
56
|
+
for (const geneName of options.genes) {
|
|
57
|
+
const geneDir = (0, node_path_1.join)(root, config.genes_dir, geneName);
|
|
58
|
+
if (!(0, node_fs_1.existsSync)((0, node_path_1.join)(geneDir, "phenotype.json"))) {
|
|
59
|
+
display.rustStyleError({
|
|
60
|
+
code: "E0040",
|
|
61
|
+
message: `Gene '${geneName}' not found or not wrapped`,
|
|
62
|
+
file: (0, node_path_1.join)(geneDir, "phenotype.json"),
|
|
63
|
+
suggestion: `Run 'rotifer wrap ${geneName} --domain <domain>' first`,
|
|
64
|
+
});
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
genome.push(geneName);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const agent = {
|
|
71
|
+
id: agentId,
|
|
72
|
+
name,
|
|
73
|
+
state: "Active",
|
|
74
|
+
genome,
|
|
75
|
+
createdAt: new Date().toISOString(),
|
|
76
|
+
reputation: 0.0,
|
|
77
|
+
};
|
|
78
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(agentsDir, agentId + ".json"), JSON.stringify(agent, null, 2) + "\n");
|
|
79
|
+
display.success(`Agent '${name}' created`);
|
|
80
|
+
display.keyValue("Agent ID", agentId);
|
|
81
|
+
display.keyValue("State", agent.state);
|
|
82
|
+
display.keyValue("Genome", genome.length > 0 ? genome.join(", ") : "(empty)");
|
|
83
|
+
console.log();
|
|
84
|
+
display.info("View agents: rotifer agent list");
|
|
85
|
+
});
|
|
86
|
+
//# sourceMappingURL=agent-create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-create.js","sourceRoot":"","sources":["../../src/commands/agent-create.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAoC;AACpC,qCAA0F;AAC1F,yCAAiC;AACjC,6CAAyC;AACzC,6DAA+C;AAC/C,kDAAgE;AAEnD,QAAA,kBAAkB,GAAG,IAAI,mBAAO,CAAC,QAAQ,CAAC;KACpD,WAAW,CAAC,2CAA2C,CAAC;KACxD,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;KAChC,MAAM,CAAC,wBAAwB,EAAE,iCAAiC,CAAC;KACnE,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAA6B,EAAE,EAAE;IAC5D,MAAM,IAAI,GAAG,IAAA,0BAAc,GAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAA,sBAAU,EAAC,IAAI,CAAC,CAAC;IAEhC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAEjC,MAAM,SAAS,GAAG,IAAA,gBAAI,EAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IACnD,IAAA,mBAAS,EAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1C,MAAM,OAAO,GAAG,IAAA,wBAAU,GAAE,CAAC;IAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,IAAA,gBAAI,EAAC,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACvD,IAAI,CAAC,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC;gBACjD,OAAO,CAAC,cAAc,CAAC;oBACrB,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,SAAS,QAAQ,4BAA4B;oBACtD,IAAI,EAAE,IAAA,gBAAI,EAAC,OAAO,EAAE,gBAAgB,CAAC;oBACrC,UAAU,EAAE,qBAAqB,QAAQ,2BAA2B;iBACrE,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG;QACZ,EAAE,EAAE,OAAO;QACX,IAAI;QACJ,KAAK,EAAE,QAAQ;QACf,MAAM;QACN,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,UAAU,EAAE,GAAG;KAChB,CAAC;IAEF,IAAA,uBAAa,EACX,IAAA,gBAAI,EAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,EAClC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CACtC,CAAC;IAEF,OAAO,CAAC,OAAO,CAAC,UAAU,IAAI,WAAW,CAAC,CAAC;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;AAClD,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-list.d.ts","sourceRoot":"","sources":["../../src/commands/agent-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,eAAO,MAAM,gBAAgB,SA+CzB,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.agentListCommand = void 0;
|
|
37
|
+
const commander_1 = require("commander");
|
|
38
|
+
const node_fs_1 = require("node:fs");
|
|
39
|
+
const node_path_1 = require("node:path");
|
|
40
|
+
const display = __importStar(require("../utils/display.js"));
|
|
41
|
+
const config_js_1 = require("../utils/config.js");
|
|
42
|
+
exports.agentListCommand = new commander_1.Command("list")
|
|
43
|
+
.description("List all agents")
|
|
44
|
+
.action(async () => {
|
|
45
|
+
const root = (0, config_js_1.getProjectRoot)();
|
|
46
|
+
display.header("Agent Registry");
|
|
47
|
+
const agentsDir = (0, node_path_1.join)(root, ".rotifer", "agents");
|
|
48
|
+
if (!(0, node_fs_1.existsSync)(agentsDir)) {
|
|
49
|
+
display.warn("No agents created yet");
|
|
50
|
+
display.info("Create one: rotifer agent create <name> --genes <gene1> <gene2>");
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const files = (0, node_fs_1.readdirSync)(agentsDir).filter((f) => f.endsWith(".json"));
|
|
54
|
+
if (files.length === 0) {
|
|
55
|
+
display.warn("No agents created yet");
|
|
56
|
+
display.info("Create one: rotifer agent create <name> --genes <gene1> <gene2>");
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const agents = files.map((f) => {
|
|
60
|
+
return JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(agentsDir, f), "utf-8"));
|
|
61
|
+
});
|
|
62
|
+
console.log();
|
|
63
|
+
console.log(" " +
|
|
64
|
+
padRight("Name", 20) +
|
|
65
|
+
padRight("State", 12) +
|
|
66
|
+
padRight("Genome", 30) +
|
|
67
|
+
"Agent ID");
|
|
68
|
+
console.log(" " + "-".repeat(90));
|
|
69
|
+
for (const a of agents) {
|
|
70
|
+
const genomeStr = a.genome.length > 0 ? a.genome.join(", ") : "(empty)";
|
|
71
|
+
console.log(" " +
|
|
72
|
+
padRight(a.name, 20) +
|
|
73
|
+
padRight(a.state, 12) +
|
|
74
|
+
padRight(genomeStr, 30) +
|
|
75
|
+
a.id.slice(0, 12) + "...");
|
|
76
|
+
}
|
|
77
|
+
console.log();
|
|
78
|
+
display.info(`${agents.length} agent(s) registered`);
|
|
79
|
+
});
|
|
80
|
+
function padRight(str, len) {
|
|
81
|
+
return str.length >= len ? str.slice(0, len) : str + " ".repeat(len - str.length);
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=agent-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-list.js","sourceRoot":"","sources":["../../src/commands/agent-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arena-list.d.ts","sourceRoot":"","sources":["../../src/commands/arena-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,eAAO,MAAM,gBAAgB,SAyFzB,CAAC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.arenaListCommand = void 0;
|
|
37
|
+
const commander_1 = require("commander");
|
|
38
|
+
const node_fs_1 = require("node:fs");
|
|
39
|
+
const node_path_1 = require("node:path");
|
|
40
|
+
const node_crypto_1 = require("node:crypto");
|
|
41
|
+
const display = __importStar(require("../utils/display.js"));
|
|
42
|
+
const config_js_1 = require("../utils/config.js");
|
|
43
|
+
exports.arenaListCommand = new commander_1.Command("list")
|
|
44
|
+
.description("List Arena rankings")
|
|
45
|
+
.option("-d, --domain <domain>", "filter by domain")
|
|
46
|
+
.action(async (options) => {
|
|
47
|
+
const root = (0, config_js_1.getProjectRoot)();
|
|
48
|
+
const config = (0, config_js_1.loadConfig)(root);
|
|
49
|
+
display.header("Arena Rankings");
|
|
50
|
+
const genesDir = (0, node_path_1.join)(root, config.genes_dir);
|
|
51
|
+
if (!(0, node_fs_1.existsSync)(genesDir)) {
|
|
52
|
+
display.warn("No genes directory found");
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const entries = [];
|
|
56
|
+
for (const name of (0, node_fs_1.readdirSync)(genesDir)) {
|
|
57
|
+
const phenotypePath = (0, node_path_1.join)(genesDir, name, "phenotype.json");
|
|
58
|
+
if (!(0, node_fs_1.existsSync)(phenotypePath))
|
|
59
|
+
continue;
|
|
60
|
+
const phenotype = JSON.parse((0, node_fs_1.readFileSync)(phenotypePath, "utf-8"));
|
|
61
|
+
if (options.domain && phenotype.domain !== options.domain)
|
|
62
|
+
continue;
|
|
63
|
+
const phenoStr = JSON.stringify(phenotype);
|
|
64
|
+
const geneId = (0, node_crypto_1.createHash)("sha256").update(phenoStr).digest("hex");
|
|
65
|
+
// Deterministic fitness from content hash
|
|
66
|
+
const seed = parseInt(geneId.slice(0, 8), 16);
|
|
67
|
+
const isNative = phenotype.fidelity === "Native";
|
|
68
|
+
const baseFitness = isNative ? 0.70 : 0.45;
|
|
69
|
+
const variance = (seed % 250) / 1000;
|
|
70
|
+
const fitness = Math.min(baseFitness + variance, 0.99);
|
|
71
|
+
const safety = 0.7 + (seed % 300) / 1000;
|
|
72
|
+
entries.push({
|
|
73
|
+
rank: 0,
|
|
74
|
+
name,
|
|
75
|
+
geneId,
|
|
76
|
+
domain: phenotype.domain || "unknown",
|
|
77
|
+
fitness,
|
|
78
|
+
safety,
|
|
79
|
+
fidelity: phenotype.fidelity || "Wrapped",
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
entries.sort((a, b) => b.fitness - a.fitness);
|
|
83
|
+
entries.forEach((e, i) => (e.rank = i + 1));
|
|
84
|
+
if (entries.length === 0) {
|
|
85
|
+
display.warn("No genes in Arena" +
|
|
86
|
+
(options.domain ? ` for domain '${options.domain}'` : ""));
|
|
87
|
+
display.info("Submit a gene: rotifer arena submit <gene-name>");
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
console.log();
|
|
91
|
+
const col = { rank: 4, name: 28, domain: 14, fg: 9, vg: 9, fidelity: 10 };
|
|
92
|
+
console.log(" " +
|
|
93
|
+
padRight("#", col.rank) +
|
|
94
|
+
padRight("Name", col.name) +
|
|
95
|
+
padRight("Domain", col.domain) +
|
|
96
|
+
padRight("F(g)", col.fg) +
|
|
97
|
+
padRight("V(g)", col.vg) +
|
|
98
|
+
"Fidelity");
|
|
99
|
+
console.log(" " + "─".repeat(74));
|
|
100
|
+
for (const e of entries) {
|
|
101
|
+
console.log(" " +
|
|
102
|
+
padRight(String(e.rank), col.rank) +
|
|
103
|
+
padRight(e.name, col.name) +
|
|
104
|
+
padRight(e.domain, col.domain) +
|
|
105
|
+
padRight(e.fitness.toFixed(4), col.fg) +
|
|
106
|
+
padRight(e.safety.toFixed(4), col.vg) +
|
|
107
|
+
e.fidelity);
|
|
108
|
+
}
|
|
109
|
+
console.log();
|
|
110
|
+
const domains = new Set(entries.map((e) => e.domain));
|
|
111
|
+
display.info(`${entries.length} gene(s) across ${domains.size} domain(s) in Arena`);
|
|
112
|
+
});
|
|
113
|
+
function padRight(str, len) {
|
|
114
|
+
return str.length >= len ? str : str + " ".repeat(len - str.length);
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=arena-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arena-list.js","sourceRoot":"","sources":["../../src/commands/arena-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arena-submit.d.ts","sourceRoot":"","sources":["../../src/commands/arena-submit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,kBAAkB,SAyE3B,CAAC"}
|