@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.
Files changed (75) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/LICENSE +31 -0
  3. package/README.md +230 -0
  4. package/dist/commands/agent-create.d.ts +3 -0
  5. package/dist/commands/agent-create.d.ts.map +1 -0
  6. package/dist/commands/agent-create.js +86 -0
  7. package/dist/commands/agent-create.js.map +1 -0
  8. package/dist/commands/agent-list.d.ts +3 -0
  9. package/dist/commands/agent-list.d.ts.map +1 -0
  10. package/dist/commands/agent-list.js +83 -0
  11. package/dist/commands/agent-list.js.map +1 -0
  12. package/dist/commands/arena-list.d.ts +3 -0
  13. package/dist/commands/arena-list.d.ts.map +1 -0
  14. package/dist/commands/arena-list.js +116 -0
  15. package/dist/commands/arena-list.js.map +1 -0
  16. package/dist/commands/arena-submit.d.ts +3 -0
  17. package/dist/commands/arena-submit.d.ts.map +1 -0
  18. package/dist/commands/arena-submit.js +106 -0
  19. package/dist/commands/arena-submit.js.map +1 -0
  20. package/dist/commands/arena-watch.d.ts +3 -0
  21. package/dist/commands/arena-watch.d.ts.map +1 -0
  22. package/dist/commands/arena-watch.js +56 -0
  23. package/dist/commands/arena-watch.js.map +1 -0
  24. package/dist/commands/compile.d.ts +3 -0
  25. package/dist/commands/compile.d.ts.map +1 -0
  26. package/dist/commands/compile.js +107 -0
  27. package/dist/commands/compile.js.map +1 -0
  28. package/dist/commands/init.d.ts +3 -0
  29. package/dist/commands/init.d.ts.map +1 -0
  30. package/dist/commands/init.js +215 -0
  31. package/dist/commands/init.js.map +1 -0
  32. package/dist/commands/scan.d.ts +3 -0
  33. package/dist/commands/scan.d.ts.map +1 -0
  34. package/dist/commands/scan.js +106 -0
  35. package/dist/commands/scan.js.map +1 -0
  36. package/dist/commands/test.d.ts +3 -0
  37. package/dist/commands/test.d.ts.map +1 -0
  38. package/dist/commands/test.js +155 -0
  39. package/dist/commands/test.js.map +1 -0
  40. package/dist/commands/wrap.d.ts +3 -0
  41. package/dist/commands/wrap.d.ts.map +1 -0
  42. package/dist/commands/wrap.js +94 -0
  43. package/dist/commands/wrap.js.map +1 -0
  44. package/dist/errors/formatter.d.ts +25 -0
  45. package/dist/errors/formatter.d.ts.map +1 -0
  46. package/dist/errors/formatter.js +43 -0
  47. package/dist/errors/formatter.js.map +1 -0
  48. package/dist/index.d.ts +3 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +36 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/utils/config.d.ts +12 -0
  53. package/dist/utils/config.d.ts.map +1 -0
  54. package/dist/utils/config.js +40 -0
  55. package/dist/utils/config.js.map +1 -0
  56. package/dist/utils/display.d.ts +16 -0
  57. package/dist/utils/display.d.ts.map +1 -0
  58. package/dist/utils/display.js +56 -0
  59. package/dist/utils/display.js.map +1 -0
  60. package/genes/genesis-code-format/index.ts +42 -0
  61. package/genes/genesis-code-format/phenotype.json +29 -0
  62. package/genes/genesis-file-read/index.ts +33 -0
  63. package/genes/genesis-file-read/phenotype.json +29 -0
  64. package/genes/genesis-l0-constraint/index.ts +62 -0
  65. package/genes/genesis-l0-constraint/phenotype.json +37 -0
  66. package/genes/genesis-web-search/index.ts +39 -0
  67. package/genes/genesis-web-search/phenotype.json +40 -0
  68. package/genes/genesis-web-search-lite/index.ts +22 -0
  69. package/genes/genesis-web-search-lite/phenotype.json +27 -0
  70. package/package.json +72 -0
  71. package/templates/composition/par-example.json +11 -0
  72. package/templates/composition/seq-example.json +9 -0
  73. package/templates/gene/index.ts +13 -0
  74. package/templates/gene/phenotype.json +21 -0
  75. 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
+ [![CI](https://github.com/rotifer-protocol/playground/actions/workflows/ci.yml/badge.svg)](https://github.com/rotifer-protocol/playground/actions/workflows/ci.yml)
4
+ [![npm](https://img.shields.io/npm/v/@rotifer/playground)](https://www.npmjs.com/package/@rotifer/playground)
5
+ [![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL--3.0-blue.svg)](LICENSE)
6
+ [![Node.js](https://img.shields.io/badge/node-%3E%3D20.0.0-brightgreen)](https://nodejs.org/)
7
+ [![Protocol](https://img.shields.io/badge/Protocol-v2.9%20Frozen-orange)](../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,3 @@
1
+ import { Command } from "commander";
2
+ export declare const agentCreateCommand: Command;
3
+ //# sourceMappingURL=agent-create.d.ts.map
@@ -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,3 @@
1
+ import { Command } from "commander";
2
+ export declare const agentListCommand: Command;
3
+ //# sourceMappingURL=agent-list.d.ts.map
@@ -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,3 @@
1
+ import { Command } from "commander";
2
+ export declare const arenaListCommand: Command;
3
+ //# sourceMappingURL=arena-list.d.ts.map
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAoC;AACpC,qCAAgE;AAChE,yCAAiC;AACjC,6CAAyC;AACzC,6DAA+C;AAC/C,kDAAgE;AAYnD,QAAA,gBAAgB,GAAG,IAAI,mBAAO,CAAC,MAAM,CAAC;KAChD,WAAW,CAAC,qBAAqB,CAAC;KAClC,MAAM,CAAC,uBAAuB,EAAE,kBAAkB,CAAC;KACnD,MAAM,CAAC,KAAK,EAAE,OAA4B,EAAE,EAAE;IAC7C,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,QAAQ,GAAG,IAAA,gBAAI,EAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAA,oBAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAiB,EAAE,CAAC;IAEjC,KAAK,MAAM,IAAI,IAAI,IAAA,qBAAW,EAAC,QAAQ,CAAC,EAAE,CAAC;QACzC,MAAM,aAAa,GAAG,IAAA,gBAAI,EAAC,QAAQ,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAA,oBAAU,EAAC,aAAa,CAAC;YAAE,SAAS;QAEzC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;QAEnE,IAAI,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM;YAAE,SAAS;QAEpE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAA,wBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEnE,0CAA0C;QAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,KAAK,QAAQ,CAAC;QACjD,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3C,MAAM,QAAQ,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;QAEzC,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,CAAC;YACP,IAAI;YACJ,MAAM;YACN,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,SAAS;YACrC,OAAO;YACP,MAAM;YACN,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,SAAS;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IAC9C,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAE5C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CACV,mBAAmB;YACjB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAC5D,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAChE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC1E,OAAO,CAAC,GAAG,CACT,IAAI;QACF,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC;QACvB,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC;QAC1B,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC;QAC9B,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;QACxB,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;QACxB,UAAU,CACb,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAEnC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CACT,IAAI;YACF,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC;YAClC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;YAC1B,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;YAC9B,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YACtC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YACrC,CAAC,CAAC,QAAQ,CACb,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,IAAI,CACV,GAAG,OAAO,CAAC,MAAM,mBAAmB,OAAO,CAAC,IAAI,qBAAqB,CACtE,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,SAAS,QAAQ,CAAC,GAAW,EAAE,GAAW;IACxC,OAAO,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;AACtE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const arenaSubmitCommand: Command;
3
+ //# sourceMappingURL=arena-submit.d.ts.map
@@ -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"}