@rotifer/playground 0.10.2 → 0.11.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/CHANGELOG.md CHANGED
@@ -5,6 +5,21 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.11.0](https://github.com/rotifer-protocol/rotifer-playground/compare/v0.10.2...v0.11.0) (2026-08-17)
9
+
10
+
11
+ ### Features
12
+
13
+ * **cli:** rotifer rollback and rotifer uninstall ([#179](https://github.com/rotifer-protocol/rotifer-playground/issues/179)) ([e2accb9](https://github.com/rotifer-protocol/rotifer-playground/commit/e2accb9177fda91d5e96ac6f0ebc1d2404b75bef))
14
+ * **npm:** reserve the unscoped 'rotifer' name ([#176](https://github.com/rotifer-protocol/rotifer-playground/issues/176)) ([dc9ecbf](https://github.com/rotifer-protocol/rotifer-playground/commit/dc9ecbfed0320359a0e806bcab161bd6ab379fe7))
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * **ci:** drop registry-url so the reservation publish can use OIDC ([#177](https://github.com/rotifer-protocol/rotifer-playground/issues/177)) ([c05e1a5](https://github.com/rotifer-protocol/rotifer-playground/commit/c05e1a597eddc24a4241e7c65253e1a13d3510f7))
20
+ * **ci:** keep the lockfiles in step with release-please bumps ([#173](https://github.com/rotifer-protocol/rotifer-playground/issues/173)) ([33a7e42](https://github.com/rotifer-protocol/rotifer-playground/commit/33a7e4259ca70d0ab09a3739ed99da58c5331e30))
21
+ * **supabase:** cast before comparing uuid to text in the arena total_calls trigger ([#180](https://github.com/rotifer-protocol/rotifer-playground/issues/180)) ([22e5941](https://github.com/rotifer-protocol/rotifer-playground/commit/22e594115b5080a06313ca50f3e3e031507e6128))
22
+
8
23
  ## [0.10.2](https://github.com/rotifer-protocol/rotifer-playground/compare/v0.10.1...v0.10.2) (2026-08-14)
9
24
 
10
25
 
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,eAAO,MAAM,cAAc,SA0GvB,CAAC"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,eAAO,MAAM,cAAc,SAyHvB,CAAC"}
@@ -44,6 +44,7 @@ const project_root_js_1 = require("../utils/project-root.js");
44
44
  const client_js_1 = require("../cloud/client.js");
45
45
  const domain_suggest_js_1 = require("../utils/domain-suggest.js");
46
46
  const validate_gene_name_js_1 = require("../utils/validate-gene-name.js");
47
+ const gene_snapshots_js_1 = require("../utils/gene-snapshots.js");
47
48
  exports.installCommand = new commander_1.Command("install")
48
49
  .description("Install a gene from Rotifer Cloud")
49
50
  .argument("<gene-ref>", "gene UUID, name, or content hash")
@@ -57,7 +58,8 @@ exports.installCommand = new commander_1.Command("install")
57
58
  const gene = await (0, client_js_1.getGene)(geneRef);
58
59
  s.stop();
59
60
  (0, validate_gene_name_js_1.validateGeneName)(gene.name);
60
- const geneDir = (0, node_path_1.join)(root, config.genes_dir, gene.name);
61
+ const genesDir = (0, node_path_1.join)(root, config.genes_dir);
62
+ const geneDir = (0, node_path_1.join)(genesDir, gene.name);
61
63
  if ((0, node_fs_1.existsSync)(geneDir) && !options.force) {
62
64
  display.rustStyleError({
63
65
  code: "E0051",
@@ -67,6 +69,14 @@ exports.installCommand = new commander_1.Command("install")
67
69
  });
68
70
  process.exit(1);
69
71
  }
72
+ // Move the old copy aside before writing over it — this is what makes
73
+ // --force reversible. If it fails, nothing is installed: an overwrite the
74
+ // user believes is undoable and is not would be worse than no install.
75
+ let didSnapshot = false;
76
+ if ((0, node_fs_1.existsSync)(geneDir) && options.force) {
77
+ (0, gene_snapshots_js_1.snapshotGene)(genesDir, gene.name, gene.id ?? null);
78
+ didSnapshot = true;
79
+ }
70
80
  (0, node_fs_1.mkdirSync)(geneDir, { recursive: true });
71
81
  (0, node_fs_1.writeFileSync)((0, node_path_1.join)(geneDir, "phenotype.json"), JSON.stringify(gene.phenotype, null, 2) + "\n");
72
82
  display.success("Phenotype saved");
@@ -108,6 +118,11 @@ exports.installCommand = new commander_1.Command("install")
108
118
  display.keyValue("Fidelity", gene.fidelity);
109
119
  display.keyValue("Location", geneDir);
110
120
  console.log();
121
+ if (didSnapshot) {
122
+ // The user asked to overwrite something. Telling them the old copy is
123
+ // recoverable is the whole point of having taken the snapshot.
124
+ display.hint(`Replaced an existing gene — undo with: rotifer rollback ${gene.name}`);
125
+ }
111
126
  display.hint("Test it: rotifer test " + gene.name);
112
127
  display.hint("Submit to local Arena: rotifer arena submit " + gene.name);
113
128
  (0, client_js_1.trackDownload)(gene.id, "cli").catch(() => { });
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Command } from "commander";
2
+ export declare const rollbackCommand: Command;
3
+ export declare const uninstallCommand: Command;
4
+ //# sourceMappingURL=rollback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../../src/commands/rollback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BpC,eAAO,MAAM,eAAe,SA4BxB,CAAC;AAEL,eAAO,MAAM,gBAAgB,SAqBzB,CAAC"}
@@ -0,0 +1,112 @@
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.uninstallCommand = exports.rollbackCommand = void 0;
37
+ const commander_1 = require("commander");
38
+ const node_path_1 = require("node:path");
39
+ const display = __importStar(require("../utils/display.js"));
40
+ const config_js_1 = require("../utils/config.js");
41
+ const project_root_js_1 = require("../utils/project-root.js");
42
+ const gene_snapshots_js_1 = require("../utils/gene-snapshots.js");
43
+ function genesDirOf() {
44
+ const root = (0, project_root_js_1.requireProjectRoot)();
45
+ return (0, node_path_1.join)(root, (0, config_js_1.loadConfig)(root).genes_dir);
46
+ }
47
+ function showAvailable(genesDir) {
48
+ const available = (0, gene_snapshots_js_1.listSnapshots)(genesDir);
49
+ if (available.length === 0) {
50
+ display.info("Nothing to roll back — no gene in this project has been overwritten or removed.");
51
+ return;
52
+ }
53
+ display.info("Genes that can be rolled back:");
54
+ for (const s of available) {
55
+ const version = s.replacedVersion ? ` (was v${s.replacedVersion})` : "";
56
+ const when = s.replacedAt ? ` — replaced ${s.replacedAt}` : "";
57
+ console.log(` ${s.name}${version}${when}`);
58
+ }
59
+ console.log("");
60
+ display.info("Restore one with: rotifer rollback <gene-name>");
61
+ }
62
+ exports.rollbackCommand = new commander_1.Command("rollback")
63
+ .description("Restore the copy of a gene that an overwrite or uninstall replaced")
64
+ .argument("[gene-name]", "gene to restore; omit to list what can be rolled back")
65
+ .action((geneName) => {
66
+ display.header("Rollback");
67
+ const genesDir = genesDirOf();
68
+ if (!geneName) {
69
+ showAvailable(genesDir);
70
+ return;
71
+ }
72
+ try {
73
+ const result = (0, gene_snapshots_js_1.restoreGene)(genesDir, geneName);
74
+ const version = result.replacedVersion ? ` (v${result.replacedVersion})` : "";
75
+ display.success(`Restored ${result.name}${version} to ${result.restoredTo}`);
76
+ // Saying this out loud matters: someone who expects an undo stack would
77
+ // otherwise discover the hard way that there is only one step.
78
+ display.info("The snapshot has been used up. Rollback undoes one step, not a history.");
79
+ }
80
+ catch (err) {
81
+ display.rustStyleError({
82
+ code: "E0052",
83
+ message: err instanceof Error ? err.message : String(err),
84
+ file: genesDir,
85
+ suggestion: "Run 'rotifer rollback' with no arguments to see what can be restored",
86
+ });
87
+ process.exit(1);
88
+ }
89
+ });
90
+ exports.uninstallCommand = new commander_1.Command("uninstall")
91
+ .description("Remove a locally installed gene, keeping a snapshot so it can be restored")
92
+ .argument("<gene-name>", "gene to remove")
93
+ .action((geneName) => {
94
+ display.header("Uninstall");
95
+ const genesDir = genesDirOf();
96
+ try {
97
+ const meta = (0, gene_snapshots_js_1.uninstallGene)(genesDir, geneName);
98
+ const version = meta.replacedVersion ? ` (v${meta.replacedVersion})` : "";
99
+ display.success(`Removed ${meta.name}${version}`);
100
+ display.info(`Restore it with: rotifer rollback ${meta.name}`);
101
+ }
102
+ catch (err) {
103
+ display.rustStyleError({
104
+ code: "E0053",
105
+ message: err instanceof Error ? err.message : String(err),
106
+ file: (0, node_path_1.join)(genesDir, geneName),
107
+ suggestion: "Run 'rotifer list' to see which genes are installed",
108
+ });
109
+ process.exit(1);
110
+ }
111
+ });
112
+ //# sourceMappingURL=rollback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../src/commands/rollback.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -21,6 +21,7 @@ const logout_js_1 = require("./commands/logout.js");
21
21
  const publish_js_1 = require("./commands/publish.js");
22
22
  const search_js_1 = require("./commands/search.js");
23
23
  const install_js_1 = require("./commands/install.js");
24
+ const rollback_js_1 = require("./commands/rollback.js");
24
25
  const reputation_js_1 = require("./commands/reputation.js");
25
26
  const info_js_1 = require("./commands/info.js");
26
27
  const list_js_1 = require("./commands/list.js");
@@ -74,6 +75,8 @@ program.addCommand(logout_js_1.logoutCommand);
74
75
  program.addCommand(publish_js_1.publishCommand);
75
76
  program.addCommand(search_js_1.searchCommand);
76
77
  program.addCommand(install_js_1.installCommand);
78
+ program.addCommand(rollback_js_1.uninstallCommand);
79
+ program.addCommand(rollback_js_1.rollbackCommand);
77
80
  program.addCommand(reputation_js_1.reputationCommand);
78
81
  program.addCommand(info_js_1.infoCommand);
79
82
  program.addCommand(list_js_1.listCommand);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Snapshots — the undo that installing a gene never had.
3
+ *
4
+ * `rotifer install --force` overwrote a gene in place, and nothing in this CLI
5
+ * could put back what it replaced. Neither could the MCP server, which reaches
6
+ * the same directories: overwriting was the only irreversible operation in
7
+ * Rotifer, and an assistant could reach it.
8
+ *
9
+ * An overwrite now moves the old directory into `<genes>/.snapshots/` first.
10
+ * One snapshot per gene, superseded by the next overwrite of that gene and
11
+ * consumed by a rollback — this undoes the last upgrade, which is the thing
12
+ * people want back. `rotifer versions` already answers what exists upstream.
13
+ *
14
+ * The layout is deliberately identical to @rotifer/mcp-server's, because both
15
+ * write into the same project. A gene overwritten through the MCP server can be
16
+ * rolled back with `rotifer rollback`, and the reverse — snapshots that only
17
+ * one half of the toolchain understood would be a trap rather than a safety
18
+ * net.
19
+ */
20
+ export interface SnapshotMeta {
21
+ name: string;
22
+ replacedAt: string;
23
+ replacedBy: string | null;
24
+ replacedVersion: string | null;
25
+ }
26
+ /**
27
+ * Move an installed gene aside so an overwrite can be undone.
28
+ *
29
+ * Returns null when there was nothing to snapshot. Throws if the snapshot
30
+ * cannot be written: an overwrite the caller believes is reversible and is not
31
+ * would be worse than refusing to install.
32
+ */
33
+ export declare function snapshotGene(genesDir: string, name: string, replacedBy?: string | null, now?: () => Date): SnapshotMeta | null;
34
+ /** Every gene that can currently be rolled back, newest replacement first. */
35
+ export declare function listSnapshots(genesDir: string): SnapshotMeta[];
36
+ export interface RestoreResult {
37
+ name: string;
38
+ restoredTo: string;
39
+ replacedAt: string;
40
+ replacedVersion: string | null;
41
+ }
42
+ /**
43
+ * Put a snapshot back, discarding whatever currently occupies the gene's
44
+ * directory. The snapshot is consumed: a second rollback would otherwise
45
+ * silently discard the copy the first one restored.
46
+ */
47
+ export declare function restoreGene(genesDir: string, name: string): RestoreResult;
48
+ /**
49
+ * Remove an installed gene, keeping a snapshot so the removal is undoable too.
50
+ *
51
+ * Uninstall is the same shape of irreversible act as overwrite, so it gets the
52
+ * same safety net rather than a different one.
53
+ */
54
+ export declare function uninstallGene(genesDir: string, name: string): SnapshotMeta;
55
+ //# sourceMappingURL=gene-snapshots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gene-snapshots.d.ts","sourceRoot":"","sources":["../../src/utils/gene-snapshots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAgBH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAeD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE,MAAM,GAAG,IAAW,EAChC,GAAG,GAAE,MAAM,IAAuB,GACjC,YAAY,GAAG,IAAI,CAkBrB;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE,CA4B9D;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAwBzE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAY1E"}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ /**
3
+ * Snapshots — the undo that installing a gene never had.
4
+ *
5
+ * `rotifer install --force` overwrote a gene in place, and nothing in this CLI
6
+ * could put back what it replaced. Neither could the MCP server, which reaches
7
+ * the same directories: overwriting was the only irreversible operation in
8
+ * Rotifer, and an assistant could reach it.
9
+ *
10
+ * An overwrite now moves the old directory into `<genes>/.snapshots/` first.
11
+ * One snapshot per gene, superseded by the next overwrite of that gene and
12
+ * consumed by a rollback — this undoes the last upgrade, which is the thing
13
+ * people want back. `rotifer versions` already answers what exists upstream.
14
+ *
15
+ * The layout is deliberately identical to @rotifer/mcp-server's, because both
16
+ * write into the same project. A gene overwritten through the MCP server can be
17
+ * rolled back with `rotifer rollback`, and the reverse — snapshots that only
18
+ * one half of the toolchain understood would be a trap rather than a safety
19
+ * net.
20
+ */
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.snapshotGene = snapshotGene;
23
+ exports.listSnapshots = listSnapshots;
24
+ exports.restoreGene = restoreGene;
25
+ exports.uninstallGene = uninstallGene;
26
+ const node_fs_1 = require("node:fs");
27
+ const node_path_1 = require("node:path");
28
+ const SNAPSHOT_DIR = ".snapshots";
29
+ const snapshotRoot = (genesDir) => (0, node_path_1.join)(genesDir, SNAPSHOT_DIR);
30
+ const snapshotPath = (genesDir, name) => (0, node_path_1.join)(snapshotRoot(genesDir), name);
31
+ const metaPath = (genesDir, name) => (0, node_path_1.join)(snapshotRoot(genesDir), `${name}.json`);
32
+ function readVersion(geneDir) {
33
+ try {
34
+ const manifest = JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(geneDir, ".cloud-manifest.json"), "utf-8"));
35
+ return typeof manifest?.version === "string" ? manifest.version : null;
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ }
41
+ /**
42
+ * Move an installed gene aside so an overwrite can be undone.
43
+ *
44
+ * Returns null when there was nothing to snapshot. Throws if the snapshot
45
+ * cannot be written: an overwrite the caller believes is reversible and is not
46
+ * would be worse than refusing to install.
47
+ */
48
+ function snapshotGene(genesDir, name, replacedBy = null, now = () => new Date()) {
49
+ const geneDir = (0, node_path_1.join)(genesDir, name);
50
+ if (!(0, node_fs_1.existsSync)(geneDir))
51
+ return null;
52
+ const target = snapshotPath(genesDir, name);
53
+ (0, node_fs_1.mkdirSync)(snapshotRoot(genesDir), { recursive: true });
54
+ if ((0, node_fs_1.existsSync)(target))
55
+ (0, node_fs_1.rmSync)(target, { recursive: true, force: true });
56
+ const meta = {
57
+ name,
58
+ replacedAt: now().toISOString(),
59
+ replacedBy,
60
+ replacedVersion: readVersion(geneDir),
61
+ };
62
+ (0, node_fs_1.renameSync)(geneDir, target);
63
+ (0, node_fs_1.writeFileSync)(metaPath(genesDir, name), JSON.stringify(meta, null, 2) + "\n");
64
+ return meta;
65
+ }
66
+ /** Every gene that can currently be rolled back, newest replacement first. */
67
+ function listSnapshots(genesDir) {
68
+ const root = snapshotRoot(genesDir);
69
+ if (!(0, node_fs_1.existsSync)(root))
70
+ return [];
71
+ let entries;
72
+ try {
73
+ entries = (0, node_fs_1.readdirSync)(root).filter((e) => {
74
+ try {
75
+ return (0, node_fs_1.statSync)((0, node_path_1.join)(root, e)).isDirectory();
76
+ }
77
+ catch {
78
+ return false;
79
+ }
80
+ });
81
+ }
82
+ catch {
83
+ return [];
84
+ }
85
+ return entries
86
+ .map((name) => {
87
+ try {
88
+ return JSON.parse((0, node_fs_1.readFileSync)(metaPath(genesDir, name), "utf-8"));
89
+ }
90
+ catch {
91
+ // The directory is what makes it restorable; a corrupt sidecar should
92
+ // not strand recoverable files.
93
+ return { name, replacedAt: "", replacedBy: null, replacedVersion: null };
94
+ }
95
+ })
96
+ .sort((a, b) => b.replacedAt.localeCompare(a.replacedAt));
97
+ }
98
+ /**
99
+ * Put a snapshot back, discarding whatever currently occupies the gene's
100
+ * directory. The snapshot is consumed: a second rollback would otherwise
101
+ * silently discard the copy the first one restored.
102
+ */
103
+ function restoreGene(genesDir, name) {
104
+ const source = snapshotPath(genesDir, name);
105
+ if (!(0, node_fs_1.existsSync)(source)) {
106
+ const available = listSnapshots(genesDir).map((s) => s.name);
107
+ throw new Error(available.length
108
+ ? `No snapshot for '${name}'. Available: ${available.join(", ")}.`
109
+ : `No snapshot for '${name}'. Nothing has been overwritten in this project.`);
110
+ }
111
+ const meta = listSnapshots(genesDir).find((s) => s.name === name);
112
+ const geneDir = (0, node_path_1.join)(genesDir, name);
113
+ if ((0, node_fs_1.existsSync)(geneDir))
114
+ (0, node_fs_1.rmSync)(geneDir, { recursive: true, force: true });
115
+ (0, node_fs_1.renameSync)(source, geneDir);
116
+ (0, node_fs_1.rmSync)(metaPath(genesDir, name), { force: true });
117
+ return {
118
+ name,
119
+ restoredTo: geneDir,
120
+ replacedAt: meta?.replacedAt ?? "",
121
+ replacedVersion: meta?.replacedVersion ?? null,
122
+ };
123
+ }
124
+ /**
125
+ * Remove an installed gene, keeping a snapshot so the removal is undoable too.
126
+ *
127
+ * Uninstall is the same shape of irreversible act as overwrite, so it gets the
128
+ * same safety net rather than a different one.
129
+ */
130
+ function uninstallGene(genesDir, name) {
131
+ const geneDir = (0, node_path_1.join)(genesDir, name);
132
+ if (!(0, node_fs_1.existsSync)(geneDir)) {
133
+ throw new Error(`Gene '${name}' is not installed at ${geneDir}.`);
134
+ }
135
+ const meta = snapshotGene(genesDir, name);
136
+ if (!meta) {
137
+ // snapshotGene only returns null when the directory is absent, which the
138
+ // check above rules out. Refuse rather than delete unrecoverably.
139
+ throw new Error(`Could not snapshot '${name}' before removing it; nothing was removed.`);
140
+ }
141
+ return meta;
142
+ }
143
+ //# sourceMappingURL=gene-snapshots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gene-snapshots.js","sourceRoot":"","sources":["../../src/utils/gene-snapshots.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rotifer/playground",
3
- "version": "0.10.2",
3
+ "version": "0.11.0",
4
4
  "description": "Rotifer Protocol Playground — local development environment for gene development, Arena competition, and protocol simulation",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Rotifer Protocol Contributors",
@@ -84,10 +84,10 @@
84
84
  },
85
85
  "optionalDependencies": {
86
86
  "@rolldown/binding-linux-x64-gnu": "1.1.1",
87
- "@rotifer/playground-darwin-arm64": "0.10.2",
88
- "@rotifer/playground-darwin-x64": "0.10.2",
89
- "@rotifer/playground-linux-x64-gnu": "0.10.2",
90
- "@rotifer/playground-win32-x64-msvc": "0.10.2"
87
+ "@rotifer/playground-darwin-arm64": "0.11.0",
88
+ "@rotifer/playground-darwin-x64": "0.11.0",
89
+ "@rotifer/playground-linux-x64-gnu": "0.11.0",
90
+ "@rotifer/playground-win32-x64-msvc": "0.11.0"
91
91
  },
92
92
  "engines": {
93
93
  "node": ">=20.0.0"