@rotifer/playground 0.8.5 → 0.9.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 +96 -0
- package/README.md +39 -23
- package/README.zh.md +38 -22
- package/dist/cloud/auth.d.ts +14 -4
- package/dist/cloud/auth.d.ts.map +1 -1
- package/dist/cloud/auth.js +19 -7
- package/dist/cloud/auth.js.map +1 -1
- package/dist/cloud/badge.d.ts +42 -0
- package/dist/cloud/badge.d.ts.map +1 -0
- package/dist/cloud/badge.js +67 -0
- package/dist/cloud/badge.js.map +1 -0
- package/dist/cloud/client.d.ts +14 -0
- package/dist/cloud/client.d.ts.map +1 -1
- package/dist/cloud/client.js +54 -13
- package/dist/cloud/client.js.map +1 -1
- package/dist/cloud/gene-ref.d.ts +41 -0
- package/dist/cloud/gene-ref.d.ts.map +1 -0
- package/dist/cloud/gene-ref.js +45 -0
- package/dist/cloud/gene-ref.js.map +1 -0
- package/dist/cloud/index.d.ts +1 -0
- package/dist/cloud/index.d.ts.map +1 -1
- package/dist/cloud/index.js +1 -0
- package/dist/cloud/index.js.map +1 -1
- package/dist/cloud/types.d.ts +2 -0
- package/dist/cloud/types.d.ts.map +1 -1
- package/dist/cloud/types.js +2 -1
- package/dist/cloud/types.js.map +1 -1
- package/dist/commands/agent-list.d.ts.map +1 -1
- package/dist/commands/agent-list.js +8 -1
- package/dist/commands/agent-list.js.map +1 -1
- package/dist/commands/agent-run.d.ts.map +1 -1
- package/dist/commands/agent-run.js +12 -8
- package/dist/commands/agent-run.js.map +1 -1
- package/dist/commands/arena-submit.d.ts.map +1 -1
- package/dist/commands/arena-submit.js +2 -8
- package/dist/commands/arena-submit.js.map +1 -1
- package/dist/commands/compile.d.ts.map +1 -1
- package/dist/commands/compile.js +35 -20
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +58 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/hello.d.ts.map +1 -1
- package/dist/commands/hello.js +45 -6
- package/dist/commands/hello.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +11 -9
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.js +3 -3
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/network.d.ts.map +1 -1
- package/dist/commands/network.js +172 -64
- package/dist/commands/network.js.map +1 -1
- package/dist/commands/publish.d.ts.map +1 -1
- package/dist/commands/publish.js +72 -0
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/reputation.d.ts.map +1 -1
- package/dist/commands/reputation.js +51 -10
- package/dist/commands/reputation.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +13 -4
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/test.d.ts.map +1 -1
- package/dist/commands/test.js +9 -4
- package/dist/commands/test.js.map +1 -1
- package/dist/commands/user-config.js +2 -2
- package/dist/commands/user-config.js.map +1 -1
- package/dist/commands/versions.d.ts.map +1 -1
- package/dist/commands/versions.js +34 -3
- package/dist/commands/versions.js.map +1 -1
- package/dist/commands/vg.d.ts.map +1 -1
- package/dist/commands/vg.js +7 -25
- package/dist/commands/vg.js.map +1 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +7 -1
- package/dist/commands/whoami.js.map +1 -1
- package/dist/commands/wrap.d.ts.map +1 -1
- package/dist/commands/wrap.js +25 -2
- package/dist/commands/wrap.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/types/phenotype.d.ts +181 -0
- package/dist/types/phenotype.d.ts.map +1 -0
- package/dist/types/phenotype.js +87 -0
- package/dist/types/phenotype.js.map +1 -0
- package/dist/utils/binding.d.ts +28 -3
- package/dist/utils/binding.d.ts.map +1 -1
- package/dist/utils/binding.js +61 -18
- package/dist/utils/binding.js.map +1 -1
- package/dist/utils/config.js +1 -1
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/detect-source-language.d.ts +20 -0
- package/dist/utils/detect-source-language.d.ts.map +1 -0
- package/dist/utils/detect-source-language.js +83 -0
- package/dist/utils/detect-source-language.js.map +1 -0
- package/dist/utils/javy-compiler.d.ts +32 -1
- package/dist/utils/javy-compiler.d.ts.map +1 -1
- package/dist/utils/javy-compiler.js +137 -12
- package/dist/utils/javy-compiler.js.map +1 -1
- package/dist/utils/p2p-daemon.d.ts +30 -0
- package/dist/utils/p2p-daemon.d.ts.map +1 -0
- package/dist/utils/p2p-daemon.js +199 -0
- package/dist/utils/p2p-daemon.js.map +1 -0
- package/dist/utils/phenotype-validator.d.ts.map +1 -1
- package/dist/utils/phenotype-validator.js +197 -2
- package/dist/utils/phenotype-validator.js.map +1 -1
- package/dist/utils/project-root.js +1 -1
- package/dist/utils/project-root.js.map +1 -1
- package/dist/utils/sandbox-defaults.d.ts +9 -0
- package/dist/utils/sandbox-defaults.d.ts.map +1 -0
- package/dist/utils/sandbox-defaults.js +12 -0
- package/dist/utils/sandbox-defaults.js.map +1 -0
- package/dist/utils/user-config.d.ts +2 -0
- package/dist/utils/user-config.d.ts.map +1 -1
- package/dist/utils/user-config.js +12 -2
- package/dist/utils/user-config.js.map +1 -1
- package/package.json +15 -6
- package/scripts/postinstall.js +2 -2
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readDaemonState = readDaemonState;
|
|
4
|
+
exports.clearDaemonState = clearDaemonState;
|
|
5
|
+
exports.controlRequest = controlRequest;
|
|
6
|
+
exports.isDaemonRunning = isDaemonRunning;
|
|
7
|
+
exports.runDaemon = runDaemon;
|
|
8
|
+
/**
|
|
9
|
+
* P2P daemon + local control channel (§3.1 phase 2).
|
|
10
|
+
*
|
|
11
|
+
* Phase 1 ran the libp2p node only in the foreground (`start`) or one-shot
|
|
12
|
+
* (`announce`). Phase 2 runs it as a persistent background daemon and lets
|
|
13
|
+
* separate `rotifer network` commands talk to it over a loopback HTTP control
|
|
14
|
+
* server (127.0.0.1, OS-assigned port), authenticated with a per-daemon token.
|
|
15
|
+
*
|
|
16
|
+
* State (PID + control port + token + PeerId) lives in `~/.rotifer/daemon.json`
|
|
17
|
+
* (mode 0600). The token gates the control endpoints so other local processes
|
|
18
|
+
* cannot drive the node.
|
|
19
|
+
*/
|
|
20
|
+
const node_http_1 = require("node:http");
|
|
21
|
+
const node_fs_1 = require("node:fs");
|
|
22
|
+
const node_path_1 = require("node:path");
|
|
23
|
+
const node_crypto_1 = require("node:crypto");
|
|
24
|
+
const private_fs_js_1 = require("./private-fs.js");
|
|
25
|
+
const binding_js_1 = require("./binding.js");
|
|
26
|
+
const ROTIFER_HOME = (0, node_path_1.join)(process.env.HOME || process.env.USERPROFILE || "/tmp", ".rotifer");
|
|
27
|
+
const DAEMON_STATE = (0, node_path_1.join)(ROTIFER_HOME, "daemon.json");
|
|
28
|
+
const TOKEN_HEADER = "x-rotifer-token";
|
|
29
|
+
const CONTROL_HOST = "127.0.0.1";
|
|
30
|
+
function readDaemonState() {
|
|
31
|
+
if (!(0, node_fs_1.existsSync)(DAEMON_STATE))
|
|
32
|
+
return null;
|
|
33
|
+
try {
|
|
34
|
+
return JSON.parse((0, node_fs_1.readFileSync)(DAEMON_STATE, "utf-8"));
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function writeDaemonState(state) {
|
|
41
|
+
(0, private_fs_js_1.ensurePrivateDir)(ROTIFER_HOME);
|
|
42
|
+
(0, node_fs_1.writeFileSync)(DAEMON_STATE, JSON.stringify(state, null, 2) + "\n");
|
|
43
|
+
(0, private_fs_js_1.tightenPrivateFile)(DAEMON_STATE);
|
|
44
|
+
}
|
|
45
|
+
function clearDaemonState() {
|
|
46
|
+
try {
|
|
47
|
+
(0, node_fs_1.rmSync)(DAEMON_STATE, { force: true });
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
/* best effort */
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Send a control request to the running daemon. Returns null when no daemon is
|
|
55
|
+
* recorded or it is unreachable (so callers can report "not running").
|
|
56
|
+
*/
|
|
57
|
+
function controlRequest(method, path, body) {
|
|
58
|
+
const state = readDaemonState();
|
|
59
|
+
if (!state)
|
|
60
|
+
return Promise.resolve(null);
|
|
61
|
+
const payload = body === undefined ? undefined : JSON.stringify(body);
|
|
62
|
+
return new Promise((resolve) => {
|
|
63
|
+
const req = (0, node_http_1.request)({
|
|
64
|
+
host: CONTROL_HOST,
|
|
65
|
+
port: state.port,
|
|
66
|
+
path,
|
|
67
|
+
method,
|
|
68
|
+
headers: {
|
|
69
|
+
[TOKEN_HEADER]: state.token,
|
|
70
|
+
...(payload
|
|
71
|
+
? {
|
|
72
|
+
"content-type": "application/json",
|
|
73
|
+
"content-length": Buffer.byteLength(payload),
|
|
74
|
+
}
|
|
75
|
+
: {}),
|
|
76
|
+
},
|
|
77
|
+
timeout: 5000,
|
|
78
|
+
}, (res) => {
|
|
79
|
+
let data = "";
|
|
80
|
+
res.on("data", (chunk) => (data += chunk));
|
|
81
|
+
res.on("end", () => {
|
|
82
|
+
let parsed = null;
|
|
83
|
+
try {
|
|
84
|
+
parsed = data ? JSON.parse(data) : null;
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
parsed = data;
|
|
88
|
+
}
|
|
89
|
+
resolve({ ok: (res.statusCode ?? 0) < 400, status: res.statusCode ?? 0, body: parsed });
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
req.on("error", () => resolve(null));
|
|
93
|
+
req.on("timeout", () => {
|
|
94
|
+
req.destroy();
|
|
95
|
+
resolve(null);
|
|
96
|
+
});
|
|
97
|
+
if (payload)
|
|
98
|
+
req.write(payload);
|
|
99
|
+
req.end();
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/** Whether a daemon is recorded and answering its control server. */
|
|
103
|
+
async function isDaemonRunning() {
|
|
104
|
+
const result = await controlRequest("GET", "/status");
|
|
105
|
+
return result?.ok ?? false;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Run the daemon: start the libp2p node, expose a token-gated loopback control
|
|
109
|
+
* server, record the state file, and stay alive until stopped. Called from the
|
|
110
|
+
* hidden `network __daemon` subcommand in a detached process.
|
|
111
|
+
*/
|
|
112
|
+
async function runDaemon(listenHost, listenPort, bootstrapPeers) {
|
|
113
|
+
const maybeNode = (0, binding_js_1.loadP2pNode)(listenHost, listenPort, bootstrapPeers);
|
|
114
|
+
if (!maybeNode) {
|
|
115
|
+
process.stderr.write("native P2P node unavailable; daemon cannot start\n");
|
|
116
|
+
process.exit(1);
|
|
117
|
+
}
|
|
118
|
+
const node = maybeNode; // non-null below (incl. inside the control-server closure)
|
|
119
|
+
node.start();
|
|
120
|
+
const token = (0, node_crypto_1.randomBytes)(24).toString("hex");
|
|
121
|
+
const startedAt = Date.now();
|
|
122
|
+
let isShuttingDown = false;
|
|
123
|
+
const server = (0, node_http_1.createServer)((req, res) => {
|
|
124
|
+
const send = (code, obj) => {
|
|
125
|
+
res.writeHead(code, { "content-type": "application/json" });
|
|
126
|
+
res.end(JSON.stringify(obj));
|
|
127
|
+
};
|
|
128
|
+
if (req.headers[TOKEN_HEADER] !== token) {
|
|
129
|
+
send(403, { error: "forbidden" });
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const url = new URL(req.url ?? "/", `http://${CONTROL_HOST}`);
|
|
133
|
+
if (req.method === "GET" && url.pathname === "/status") {
|
|
134
|
+
send(200, {
|
|
135
|
+
peerId: node.peerId(),
|
|
136
|
+
listenAddrs: node.listenAddrs(),
|
|
137
|
+
peers: node.discoveredPeers().length,
|
|
138
|
+
startedAt,
|
|
139
|
+
});
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (req.method === "GET" && url.pathname === "/peers") {
|
|
143
|
+
send(200, { peers: node.discoveredPeers() });
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
if (req.method === "GET" && url.pathname === "/received") {
|
|
147
|
+
send(200, { announcements: node.receivedAnnouncements() });
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
if (req.method === "POST" && url.pathname === "/announce") {
|
|
151
|
+
let data = "";
|
|
152
|
+
req.on("data", (chunk) => (data += chunk));
|
|
153
|
+
req.on("end", () => {
|
|
154
|
+
try {
|
|
155
|
+
const g = JSON.parse(data);
|
|
156
|
+
node.announceGene(g.geneId, g.name, g.domain, g.version, g.fidelity);
|
|
157
|
+
send(200, { ok: true });
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
send(400, { error: err.message });
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
if (req.method === "POST" && url.pathname === "/stop") {
|
|
166
|
+
send(200, { ok: true });
|
|
167
|
+
shutdown();
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
send(404, { error: "not found" });
|
|
171
|
+
});
|
|
172
|
+
function shutdown() {
|
|
173
|
+
if (isShuttingDown)
|
|
174
|
+
return;
|
|
175
|
+
isShuttingDown = true;
|
|
176
|
+
try {
|
|
177
|
+
node.stop();
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
/* best effort */
|
|
181
|
+
}
|
|
182
|
+
server.close();
|
|
183
|
+
clearDaemonState();
|
|
184
|
+
process.exit(0);
|
|
185
|
+
}
|
|
186
|
+
process.on("SIGINT", shutdown);
|
|
187
|
+
process.on("SIGTERM", shutdown);
|
|
188
|
+
await new Promise((resolve, reject) => {
|
|
189
|
+
server.listen(0, CONTROL_HOST, () => {
|
|
190
|
+
const addr = server.address();
|
|
191
|
+
const port = typeof addr === "object" && addr ? addr.port : 0;
|
|
192
|
+
writeDaemonState({ pid: process.pid, port, token, peerId: node.peerId(), startedAt });
|
|
193
|
+
resolve();
|
|
194
|
+
});
|
|
195
|
+
server.on("error", reject);
|
|
196
|
+
});
|
|
197
|
+
// The listening control server keeps the process alive; it exits via shutdown().
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=p2p-daemon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p2p-daemon.js","sourceRoot":"","sources":["../../src/utils/p2p-daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phenotype-validator.d.ts","sourceRoot":"","sources":["../../src/utils/phenotype-validator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"phenotype-validator.d.ts","sourceRoot":"","sources":["../../src/utils/phenotype-validator.ts"],"names":[],"mappings":"AA6UA,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,QAAQ,EAAE,MAAM,GACf,IAAI,CAoBN"}
|
|
@@ -35,8 +35,24 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.validateLlmNativePhenotype = validateLlmNativePhenotype;
|
|
37
37
|
const display = __importStar(require("./display.js"));
|
|
38
|
-
const
|
|
39
|
-
const
|
|
38
|
+
const phenotype_js_1 = require("../types/phenotype.js");
|
|
39
|
+
// Validator imports the enum const arrays from src/types/phenotype.ts (the
|
|
40
|
+
// single source of truth — v0.9.1 §3.3). Local aliases keep call-sites compact.
|
|
41
|
+
const VALID_TEMPLATE_FORMATS = phenotype_js_1.TEMPLATE_FORMATS;
|
|
42
|
+
const VALID_GUARD_POSITIONS = phenotype_js_1.GUARD_POSITIONS;
|
|
43
|
+
const VALID_SYNTHESIS_METHODS = phenotype_js_1.SYNTHESIS_METHODS;
|
|
44
|
+
// v0.9.1 §3.3 (ADR-253 D4.4): execution-model enum on the Phenotype.
|
|
45
|
+
// Legacy Genes are pre-§3.3 and lack the field — those are treated as BATCH at
|
|
46
|
+
// runtime (silent default in rotifer.ai's chat URL guard). The validator only
|
|
47
|
+
// flags the field when it IS present but with an unknown value.
|
|
48
|
+
const VALID_EXECUTION_MODELS = phenotype_js_1.EXECUTION_MODELS;
|
|
49
|
+
// v0.9 §3.11 Hybrid Fidelity (spec §4.2 v2.11, ADR-220 D-04): three Optional
|
|
50
|
+
// Phenotype fields enabling external API integration with explicit semantic
|
|
51
|
+
// declaration, dry-run protocol, and graceful degradation contracts.
|
|
52
|
+
const VALID_DEGRADATION_BEHAVIORS = phenotype_js_1.DEGRADATION_BEHAVIORS;
|
|
53
|
+
const VALID_DEGRADATION_MODES = phenotype_js_1.DEGRADATION_MODES;
|
|
54
|
+
// v0.9.1 §3.3 F8: transparency enum (spec §4.2 GeneTransparency).
|
|
55
|
+
const VALID_GENE_TRANSPARENCIES = phenotype_js_1.GENE_TRANSPARENCIES;
|
|
40
56
|
function collectDiagnostics(phenotype) {
|
|
41
57
|
const diags = [];
|
|
42
58
|
const domain = phenotype.domain;
|
|
@@ -114,6 +130,66 @@ function collectDiagnostics(phenotype) {
|
|
|
114
130
|
});
|
|
115
131
|
}
|
|
116
132
|
}
|
|
133
|
+
const sm = phenotype.synthesisMethod;
|
|
134
|
+
if (sm !== undefined && !VALID_SYNTHESIS_METHODS.includes(sm)) {
|
|
135
|
+
diags.push({
|
|
136
|
+
level: "error",
|
|
137
|
+
code: "E0090",
|
|
138
|
+
message: `synthesisMethod must be one of: ${VALID_SYNTHESIS_METHODS.join(", ")} (got '${sm}')`,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
// v0.9.1 §3.3: executionModel enum validation.
|
|
142
|
+
const em = phenotype.executionModel;
|
|
143
|
+
if (em !== undefined && !VALID_EXECUTION_MODELS.includes(em)) {
|
|
144
|
+
diags.push({
|
|
145
|
+
level: "error",
|
|
146
|
+
code: "E0100",
|
|
147
|
+
message: `executionModel must be one of: ${VALID_EXECUTION_MODELS.join(", ")} (got '${em}')`,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
// CHAT Agents should have a description (used as system prompt by rotifer.ai's
|
|
151
|
+
// chat surface — without it the LLM has no Agent identity and replies generically).
|
|
152
|
+
if (em === "CHAT") {
|
|
153
|
+
const desc = phenotype.description;
|
|
154
|
+
if (!desc || desc.trim().length < 10) {
|
|
155
|
+
diags.push({
|
|
156
|
+
level: "warning",
|
|
157
|
+
code: "W0100",
|
|
158
|
+
message: "CHAT executionModel Phenotype has empty or very short description (<10 chars); " +
|
|
159
|
+
"the chat surface uses description as the Agent system prompt, so a richer description " +
|
|
160
|
+
"directly improves conversation quality",
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// BATCH/EVENT_DRIVEN Genes should not declare a chat-style systemPrompt
|
|
165
|
+
// (forward-compat: if a future field 'systemPrompt' is added, warn when misused).
|
|
166
|
+
const sp = phenotype.systemPrompt;
|
|
167
|
+
if (sp !== undefined && em !== undefined && em !== "CHAT") {
|
|
168
|
+
diags.push({
|
|
169
|
+
level: "warning",
|
|
170
|
+
code: "W0101",
|
|
171
|
+
message: `systemPrompt is set but executionModel is '${em}', not 'CHAT' — systemPrompt is ignored outside chat surfaces`,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
// v0.9.1 §3.3 F8: transparency enum validation (spec §4.2 GeneTransparency).
|
|
175
|
+
// Optional field (legacy genes lack it) — only flagged when present.
|
|
176
|
+
const tr = phenotype.transparency;
|
|
177
|
+
if (tr !== undefined && tr in phenotype_js_1.LEGACY_GENE_TRANSPARENCIES) {
|
|
178
|
+
diags.push({
|
|
179
|
+
level: "warning",
|
|
180
|
+
code: "W0140",
|
|
181
|
+
message: `transparency '${tr}' is a deprecated legacy literal; use ` +
|
|
182
|
+
`'${phenotype_js_1.LEGACY_GENE_TRANSPARENCIES[tr]}' instead (spec §4.2 GeneTransparency). ` +
|
|
183
|
+
`Legacy values are removed in v0.9.2.`,
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
else if (tr !== undefined && !VALID_GENE_TRANSPARENCIES.includes(tr)) {
|
|
187
|
+
diags.push({
|
|
188
|
+
level: "error",
|
|
189
|
+
code: "E0140",
|
|
190
|
+
message: `transparency must be one of: ${VALID_GENE_TRANSPARENCIES.join(", ")} (got '${tr}')`,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
117
193
|
if (isPrompt && phenotype.fidelity === "Native") {
|
|
118
194
|
diags.push({
|
|
119
195
|
level: "warning",
|
|
@@ -128,6 +204,125 @@ function collectDiagnostics(phenotype) {
|
|
|
128
204
|
message: "Guard domain gene missing guardConfig — consider adding it for V(g) integration",
|
|
129
205
|
});
|
|
130
206
|
}
|
|
207
|
+
// v0.9 §3.11 Hybrid Fidelity validation (spec §4.2 v2.11, ADR-220 §"D-04").
|
|
208
|
+
const extDeps = phenotype.externalDependencies;
|
|
209
|
+
if (extDeps !== undefined) {
|
|
210
|
+
if (!Array.isArray(extDeps)) {
|
|
211
|
+
diags.push({
|
|
212
|
+
level: "error",
|
|
213
|
+
code: "E0110",
|
|
214
|
+
message: "externalDependencies must be an array",
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
for (let i = 0; i < extDeps.length; i++) {
|
|
219
|
+
const dep = extDeps[i];
|
|
220
|
+
if (!dep || typeof dep !== "object") {
|
|
221
|
+
diags.push({
|
|
222
|
+
level: "error",
|
|
223
|
+
code: "E0111",
|
|
224
|
+
message: `externalDependencies[${i}] must be an object`,
|
|
225
|
+
});
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
if (typeof dep.apiType !== "string" || dep.apiType.length === 0) {
|
|
229
|
+
diags.push({
|
|
230
|
+
level: "error",
|
|
231
|
+
code: "E0112",
|
|
232
|
+
message: `externalDependencies[${i}].apiType is required (non-empty string)`,
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
if (typeof dep.semanticTag !== "string" || dep.semanticTag.length === 0) {
|
|
236
|
+
diags.push({
|
|
237
|
+
level: "error",
|
|
238
|
+
code: "E0113",
|
|
239
|
+
message: `externalDependencies[${i}].semanticTag is required (non-empty string)`,
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
const db = dep.degradationBehavior;
|
|
243
|
+
const isDbValid = db !== undefined && VALID_DEGRADATION_BEHAVIORS.includes(db);
|
|
244
|
+
const isDbLegacy = db !== undefined && db in phenotype_js_1.LEGACY_DEGRADATION_BEHAVIORS;
|
|
245
|
+
if (isDbLegacy) {
|
|
246
|
+
// Pre-§3.3 collapsed literal — still valid through the v0.9.1 grace
|
|
247
|
+
// window, but warn and point at the spec replacement (removed v0.9.2).
|
|
248
|
+
diags.push({
|
|
249
|
+
level: "warning",
|
|
250
|
+
code: "W0114",
|
|
251
|
+
message: `externalDependencies[${i}].degradationBehavior '${db}' is a deprecated ` +
|
|
252
|
+
`legacy value; use '${phenotype_js_1.LEGACY_DEGRADATION_BEHAVIORS[db]}' instead ` +
|
|
253
|
+
`(spec §4.2). Legacy values are removed in v0.9.2.`,
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
else if (!isDbValid) {
|
|
257
|
+
diags.push({
|
|
258
|
+
level: "error",
|
|
259
|
+
code: "E0114",
|
|
260
|
+
message: `externalDependencies[${i}].degradationBehavior must be one of: ` +
|
|
261
|
+
`${VALID_DEGRADATION_BEHAVIORS.join(", ")} (got '${db ?? "<undefined>"}')`,
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
// Hybrid fidelity should declare external dependencies — case-insensitive
|
|
268
|
+
// match per Q2=c (Phase 5 normalization deferred): spec enum is "HYBRID"
|
|
269
|
+
// (uppercase) but plan / runtime use "Hybrid" / "hybrid", so accept all.
|
|
270
|
+
const fidelityRaw = phenotype.fidelity;
|
|
271
|
+
const fidelityLower = fidelityRaw?.toLowerCase();
|
|
272
|
+
if (fidelityLower === "hybrid" && (extDeps === undefined || (Array.isArray(extDeps) && extDeps.length === 0))) {
|
|
273
|
+
diags.push({
|
|
274
|
+
level: "warning",
|
|
275
|
+
code: "W0110",
|
|
276
|
+
message: "Gene has fidelity 'Hybrid' but does not declare externalDependencies — " +
|
|
277
|
+
"Hybrid genes that perform external calls SHOULD declare both `network` (protocol layer) " +
|
|
278
|
+
"and `externalDependencies` (semantic layer) per spec §3.11",
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
const sim = phenotype.simulationSpec;
|
|
282
|
+
if (sim !== undefined) {
|
|
283
|
+
if (typeof sim.supportsDryRun !== "boolean") {
|
|
284
|
+
diags.push({
|
|
285
|
+
level: "error",
|
|
286
|
+
code: "E0120",
|
|
287
|
+
message: "simulationSpec.supportsDryRun must be a boolean",
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
const re = sim.resourceEstimate;
|
|
291
|
+
if (!re || typeof re !== "object") {
|
|
292
|
+
diags.push({
|
|
293
|
+
level: "error",
|
|
294
|
+
code: "E0121",
|
|
295
|
+
message: "simulationSpec.resourceEstimate is required (object with estimatedLatencyMs)",
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
else if (typeof re.estimatedLatencyMs !== "number" || re.estimatedLatencyMs < 0) {
|
|
299
|
+
diags.push({
|
|
300
|
+
level: "error",
|
|
301
|
+
code: "E0122",
|
|
302
|
+
message: "simulationSpec.resourceEstimate.estimatedLatencyMs must be a non-negative number",
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
const deg = phenotype.degradationSpec;
|
|
307
|
+
if (deg !== undefined) {
|
|
308
|
+
const mode = deg.mode;
|
|
309
|
+
if (mode === undefined || !VALID_DEGRADATION_MODES.includes(mode)) {
|
|
310
|
+
diags.push({
|
|
311
|
+
level: "error",
|
|
312
|
+
code: "E0130",
|
|
313
|
+
message: `degradationSpec.mode must be one of: ${VALID_DEGRADATION_MODES.join(", ")} ` +
|
|
314
|
+
`(got '${mode ?? "<undefined>"}')`,
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
const minDeps = deg.minimumDependencies;
|
|
318
|
+
if (!Array.isArray(minDeps)) {
|
|
319
|
+
diags.push({
|
|
320
|
+
level: "error",
|
|
321
|
+
code: "E0131",
|
|
322
|
+
message: "degradationSpec.minimumDependencies must be an array of semanticTag strings",
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
}
|
|
131
326
|
return diags;
|
|
132
327
|
}
|
|
133
328
|
function validateLlmNativePhenotype(phenotype, filePath) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phenotype-validator.js","sourceRoot":"","sources":["../../src/utils/phenotype-validator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"phenotype-validator.js","sourceRoot":"","sources":["../../src/utils/phenotype-validator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6UA,gEAuBC;AApWD,sDAAwC;AACxC,wDAU+B;AAE/B,2EAA2E;AAC3E,gFAAgF;AAChF,MAAM,sBAAsB,GAAG,+BAAgB,CAAC;AAChD,MAAM,qBAAqB,GAAG,8BAAe,CAAC;AAC9C,MAAM,uBAAuB,GAAG,gCAAiB,CAAC;AAClD,qEAAqE;AACrE,+EAA+E;AAC/E,8EAA8E;AAC9E,gEAAgE;AAChE,MAAM,sBAAsB,GAAG,+BAAgB,CAAC;AAChD,6EAA6E;AAC7E,4EAA4E;AAC5E,qEAAqE;AACrE,MAAM,2BAA2B,GAAG,oCAAqB,CAAC;AAC1D,MAAM,uBAAuB,GAAG,gCAAiB,CAAC;AAClD,kEAAkE;AAClE,MAAM,yBAAyB,GAAG,kCAAmB,CAAC;AAQtD,SAAS,kBAAkB,CAAC,SAAkC;IAC5D,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,SAAS,CAAC,MAA4B,CAAC;IACtD,MAAM,QAAQ,GAAG,MAAM,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAE7C,MAAM,GAAG,GAAG,SAAS,CAAC,eAAsD,CAAC;IAC7E,IAAI,GAAG,EAAE,CAAC;QACR,IAAI,CAAC,GAAG,CAAC,cAAc,IAAI,CAAE,sBAA4C,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAwB,CAAC,EAAE,CAAC;YACjH,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,oDAAoD,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aACjG,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,GAAG,GAAG,CAAC,iBAAyC,CAAC;QAC3D,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,6DAA6D;aACvE,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAI,SAAS,CAAC,WAAuC,EAAE,UAE1D,CAAC;YACd,IAAI,UAAU,EAAE,CAAC;gBACf,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;oBACrB,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC;wBACvB,KAAK,CAAC,IAAI,CAAC;4BACT,KAAK,EAAE,OAAO;4BACd,IAAI,EAAE,OAAO;4BACb,OAAO,EAAE,+CAA+C,CAAC,uCAAuC;yBACjG,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,wCAAwC,MAAM,iCAAiC;aACzF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,WAAkD,CAAC;IAC3E,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAE,qBAA2C,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAkB,CAAC,EAAE,CAAC;YACxG,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,wCAAwC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aACpF,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,UAAkC,CAAC;QACtD,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,kDAAkD;aAC5D,CAAC,CAAC;QACL,CAAC;QAED,MAAM,SAAS,GAAG,KAAK,CAAC,aAAmC,CAAC;QAC5D,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;YAChE,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,8DAA8D,SAAS,GAAG;aACpF,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,oCAAoC,MAAM,gCAAgC;aACpF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,EAAE,GAAG,SAAS,CAAC,eAAqC,CAAC;IAC3D,IAAI,EAAE,KAAK,SAAS,IAAI,CAAE,uBAA6C,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QACrF,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,mCAAmC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI;SAC/F,CAAC,CAAC;IACL,CAAC;IAED,+CAA+C;IAC/C,MAAM,EAAE,GAAG,SAAS,CAAC,cAAoC,CAAC;IAC1D,IAAI,EAAE,KAAK,SAAS,IAAI,CAAE,sBAA4C,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QACpF,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,kCAAkC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI;SAC7F,CAAC,CAAC;IACL,CAAC;IAED,+EAA+E;IAC/E,oFAAoF;IACpF,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,SAAS,CAAC,WAAiC,CAAC;QACzD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,OAAO;gBACb,OAAO,EACL,iFAAiF;oBACjF,wFAAwF;oBACxF,wCAAwC;aAC3C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,kFAAkF;IAClF,MAAM,EAAE,GAAG,SAAS,CAAC,YAAkC,CAAC;IACxD,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,8CAA8C,EAAE,+DAA+D;SACzH,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAC7E,qEAAqE;IACrE,MAAM,EAAE,GAAG,SAAS,CAAC,YAAkC,CAAC;IACxD,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,IAAI,yCAA0B,EAAE,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,OAAO;YACb,OAAO,EACL,iBAAiB,EAAE,wCAAwC;gBAC3D,IAAI,yCAA0B,CAAC,EAAE,CAAC,0CAA0C;gBAC5E,sCAAsC;SACzC,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,EAAE,KAAK,SAAS,IAAI,CAAE,yBAA+C,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9F,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,gCAAgC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI;SAC9F,CAAC,CAAC;IACL,CAAC;IAED,IAAI,QAAQ,IAAI,SAAS,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,gFAAgF;SAC1F,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,iFAAiF;SAC3F,CAAC,CAAC;IACL,CAAC;IAED,4EAA4E;IAC5E,MAAM,OAAO,GAAG,SAAS,CAAC,oBAA6C,CAAC;IACxE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,uCAAuC;aACjD,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAwC,CAAC;gBAC9D,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;oBACpC,KAAK,CAAC,IAAI,CAAC;wBACT,KAAK,EAAE,OAAO;wBACd,IAAI,EAAE,OAAO;wBACb,OAAO,EAAE,wBAAwB,CAAC,qBAAqB;qBACxD,CAAC,CAAC;oBACH,SAAS;gBACX,CAAC;gBACD,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAChE,KAAK,CAAC,IAAI,CAAC;wBACT,KAAK,EAAE,OAAO;wBACd,IAAI,EAAE,OAAO;wBACb,OAAO,EAAE,wBAAwB,CAAC,0CAA0C;qBAC7E,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACxE,KAAK,CAAC,IAAI,CAAC;wBACT,KAAK,EAAE,OAAO;wBACd,IAAI,EAAE,OAAO;wBACb,OAAO,EAAE,wBAAwB,CAAC,8CAA8C;qBACjF,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM,EAAE,GAAG,GAAG,CAAC,mBAAyC,CAAC;gBACzD,MAAM,SAAS,GACb,EAAE,KAAK,SAAS,IAAK,2BAAiD,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACtF,MAAM,UAAU,GAAG,EAAE,KAAK,SAAS,IAAI,EAAE,IAAI,2CAA4B,CAAC;gBAC1E,IAAI,UAAU,EAAE,CAAC;oBACf,oEAAoE;oBACpE,uEAAuE;oBACvE,KAAK,CAAC,IAAI,CAAC;wBACT,KAAK,EAAE,SAAS;wBAChB,IAAI,EAAE,OAAO;wBACb,OAAO,EACL,wBAAwB,CAAC,0BAA0B,EAAE,oBAAoB;4BACzE,sBAAsB,2CAA4B,CAAC,EAAY,CAAC,YAAY;4BAC5E,mDAAmD;qBACtD,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,CAAC,SAAS,EAAE,CAAC;oBACtB,KAAK,CAAC,IAAI,CAAC;wBACT,KAAK,EAAE,OAAO;wBACd,IAAI,EAAE,OAAO;wBACb,OAAO,EACL,wBAAwB,CAAC,wCAAwC;4BACjE,GAAG,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,aAAa,IAAI;qBAC7E,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,yEAAyE;IACzE,yEAAyE;IACzE,MAAM,WAAW,GAAG,SAAS,CAAC,QAA8B,CAAC;IAC7D,MAAM,aAAa,GAAG,WAAW,EAAE,WAAW,EAAE,CAAC;IACjD,IAAI,aAAa,KAAK,QAAQ,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9G,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,OAAO;YACb,OAAO,EACL,yEAAyE;gBACzE,0FAA0F;gBAC1F,4DAA4D;SAC/D,CAAC,CAAC;IACL,CAAC;IAED,MAAM,GAAG,GAAG,SAAS,CAAC,cAAqD,CAAC;IAC5E,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,IAAI,OAAO,GAAG,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,iDAAiD;aAC3D,CAAC,CAAC;QACL,CAAC;QACD,MAAM,EAAE,GAAG,GAAG,CAAC,gBAAuD,CAAC;QACvE,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,8EAA8E;aACxF,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,OAAO,EAAE,CAAC,kBAAkB,KAAK,QAAQ,IAAI,EAAE,CAAC,kBAAkB,GAAG,CAAC,EAAE,CAAC;YAClF,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,kFAAkF;aAC5F,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,SAAS,CAAC,eAAsD,CAAC;IAC7E,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,GAAG,CAAC,IAA0B,CAAC;QAC5C,IAAI,IAAI,KAAK,SAAS,IAAI,CAAE,uBAA6C,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACzF,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,OAAO;gBACb,OAAO,EACL,wCAAwC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;oBAC7E,SAAS,IAAI,IAAI,aAAa,IAAI;aACrC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,CAAC,mBAAmB,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,6EAA6E;aACvF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,0BAA0B,CACxC,SAAkC,EAClC,QAAgB;IAEhB,MAAM,KAAK,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAE/B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC;IAEzD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;QACvC,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/E,CAAC;aAAM,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -41,7 +41,7 @@ function requireProjectRoot() {
|
|
|
41
41
|
return (0, config_js_1.getProjectRoot)();
|
|
42
42
|
}
|
|
43
43
|
catch {
|
|
44
|
-
display.error("Not in a Rotifer
|
|
44
|
+
display.error("Not in a Rotifer Agent workspace. Run 'rotifer init' first.");
|
|
45
45
|
process.exit(1);
|
|
46
46
|
}
|
|
47
47
|
throw new Error("unreachable");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-root.js","sourceRoot":"","sources":["../../src/utils/project-root.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,gDASC;AAZD,sDAAwC;AACxC,2CAA6C;AAE7C,SAAgB,kBAAkB;IAChC,IAAI,CAAC;QACH,OAAO,IAAA,0BAAc,GAAE,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"project-root.js","sourceRoot":"","sources":["../../src/utils/project-root.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,gDASC;AAZD,sDAAwC;AACxC,2CAA6C;AAE7C,SAAgB,kBAAkB;IAChC,IAAI,CAAC;QACH,OAAO,IAAA,0BAAc,GAAE,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;QAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const DEFAULT_SANDBOX_CONSTRAINTS: {
|
|
2
|
+
max_fuel: number;
|
|
3
|
+
max_memory_bytes: number;
|
|
4
|
+
max_execution_time_ms: number;
|
|
5
|
+
allowed_host_functions: string[];
|
|
6
|
+
denied_host_functions: string[];
|
|
7
|
+
};
|
|
8
|
+
export declare const DEFAULT_SANDBOX_CONSTRAINTS_JSON: string;
|
|
9
|
+
//# sourceMappingURL=sandbox-defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox-defaults.d.ts","sourceRoot":"","sources":["../../src/utils/sandbox-defaults.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,2BAA2B;;;;4BAIR,MAAM,EAAE;2BACT,MAAM,EAAE;CACtC,CAAC;AAEF,eAAO,MAAM,gCAAgC,QAE5C,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_SANDBOX_CONSTRAINTS_JSON = exports.DEFAULT_SANDBOX_CONSTRAINTS = void 0;
|
|
4
|
+
exports.DEFAULT_SANDBOX_CONSTRAINTS = {
|
|
5
|
+
max_fuel: 500_000_000,
|
|
6
|
+
max_memory_bytes: 256 * 1024 * 1024,
|
|
7
|
+
max_execution_time_ms: 60_000,
|
|
8
|
+
allowed_host_functions: [],
|
|
9
|
+
denied_host_functions: [],
|
|
10
|
+
};
|
|
11
|
+
exports.DEFAULT_SANDBOX_CONSTRAINTS_JSON = JSON.stringify(exports.DEFAULT_SANDBOX_CONSTRAINTS);
|
|
12
|
+
//# sourceMappingURL=sandbox-defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox-defaults.js","sourceRoot":"","sources":["../../src/utils/sandbox-defaults.ts"],"names":[],"mappings":";;;AAAa,QAAA,2BAA2B,GAAG;IACzC,QAAQ,EAAE,WAAW;IACrB,gBAAgB,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI;IACnC,qBAAqB,EAAE,MAAM;IAC7B,sBAAsB,EAAE,EAAc;IACtC,qBAAqB,EAAE,EAAc;CACtC,CAAC;AAEW,QAAA,gCAAgC,GAAG,IAAI,CAAC,SAAS,CAC5D,mCAA2B,CAC5B,CAAC"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
export interface UserConfig {
|
|
2
2
|
"update-check"?: boolean;
|
|
3
3
|
"last-version"?: string;
|
|
4
|
+
"default-publish"?: boolean;
|
|
4
5
|
}
|
|
5
6
|
export declare function isValidKey(key: string): key is keyof UserConfig;
|
|
6
7
|
export declare function loadUserConfig(): UserConfig;
|
|
7
8
|
export declare function saveUserConfig(config: UserConfig): void;
|
|
8
9
|
export declare function getUserConfigValue(key: keyof UserConfig): string;
|
|
9
10
|
export declare function setUserConfigValue(key: keyof UserConfig, value: string): void;
|
|
11
|
+
export declare function shouldAutoPublish(): boolean;
|
|
10
12
|
//# sourceMappingURL=user-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-config.d.ts","sourceRoot":"","sources":["../../src/utils/user-config.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,UAAU;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"user-config.d.ts","sourceRoot":"","sources":["../../src/utils/user-config.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,UAAU;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAUD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,IAAI,MAAM,UAAU,CAE/D;AAED,wBAAgB,cAAc,IAAI,UAAU,CAQ3C;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAGvD;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,UAAU,GAAG,MAAM,CAIhE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAQ7E;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAO3C"}
|
|
@@ -5,6 +5,7 @@ exports.loadUserConfig = loadUserConfig;
|
|
|
5
5
|
exports.saveUserConfig = saveUserConfig;
|
|
6
6
|
exports.getUserConfigValue = getUserConfigValue;
|
|
7
7
|
exports.setUserConfigValue = setUserConfigValue;
|
|
8
|
+
exports.shouldAutoPublish = shouldAutoPublish;
|
|
8
9
|
const node_fs_1 = require("node:fs");
|
|
9
10
|
const node_path_1 = require("node:path");
|
|
10
11
|
const node_os_1 = require("node:os");
|
|
@@ -17,8 +18,9 @@ function getUserConfigFile() {
|
|
|
17
18
|
const DEFAULTS = {
|
|
18
19
|
"update-check": true,
|
|
19
20
|
"last-version": "",
|
|
21
|
+
"default-publish": true,
|
|
20
22
|
};
|
|
21
|
-
const VALID_KEYS = new Set(["update-check", "last-version"]);
|
|
23
|
+
const VALID_KEYS = new Set(["update-check", "last-version", "default-publish"]);
|
|
22
24
|
function isValidKey(key) {
|
|
23
25
|
return VALID_KEYS.has(key);
|
|
24
26
|
}
|
|
@@ -43,7 +45,7 @@ function getUserConfigValue(key) {
|
|
|
43
45
|
}
|
|
44
46
|
function setUserConfigValue(key, value) {
|
|
45
47
|
const config = loadUserConfig();
|
|
46
|
-
if (key === "update-check") {
|
|
48
|
+
if (key === "update-check" || key === "default-publish") {
|
|
47
49
|
config[key] = value === "true" || value === "1";
|
|
48
50
|
}
|
|
49
51
|
else {
|
|
@@ -51,4 +53,12 @@ function setUserConfigValue(key, value) {
|
|
|
51
53
|
}
|
|
52
54
|
saveUserConfig(config);
|
|
53
55
|
}
|
|
56
|
+
function shouldAutoPublish() {
|
|
57
|
+
const envOverride = process.env.ROTIFER_AUTO_PUBLISH;
|
|
58
|
+
if (envOverride !== undefined) {
|
|
59
|
+
return envOverride !== "false" && envOverride !== "0";
|
|
60
|
+
}
|
|
61
|
+
const config = loadUserConfig();
|
|
62
|
+
return config["default-publish"] ?? DEFAULTS["default-publish"];
|
|
63
|
+
}
|
|
54
64
|
//# sourceMappingURL=user-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-config.js","sourceRoot":"","sources":["../../src/utils/user-config.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"user-config.js","sourceRoot":"","sources":["../../src/utils/user-config.ts"],"names":[],"mappings":";;AA0BA,gCAEC;AAED,wCAQC;AAED,wCAGC;AAED,gDAIC;AAED,gDAQC;AAED,8CAOC;AApED,qCAA6E;AAC7E,yCAAiC;AACjC,qCAAkC;AAElC,SAAS,YAAY;IACnB,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,IAAA,gBAAI,EAAC,IAAA,iBAAO,GAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,IAAA,gBAAI,EAAC,YAAY,EAAE,EAAE,aAAa,CAAC,CAAC;AAC7C,CAAC;AAQD,MAAM,QAAQ,GAAyB;IACrC,cAAc,EAAE,IAAI;IACpB,cAAc,EAAE,EAAE;IAClB,iBAAiB,EAAE,IAAI;CACxB,CAAC;AAEF,MAAM,UAAU,GAAG,IAAI,GAAG,CAAmB,CAAC,cAAc,EAAE,cAAc,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAElG,SAAgB,UAAU,CAAC,GAAW;IACpC,OAAO,UAAU,CAAC,GAAG,CAAC,GAAuB,CAAC,CAAC;AACjD,CAAC;AAED,SAAgB,cAAc;IAC5B,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,iBAAiB,EAAE,CAAC;QAC9B,IAAI,IAAA,oBAAU,EAAC,CAAC,CAAC,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,kCAAkC,CAAC,CAAC;IAC9C,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAgB,cAAc,CAAC,MAAkB;IAC/C,IAAA,mBAAS,EAAC,YAAY,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,IAAA,uBAAa,EAAC,iBAAiB,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC7E,CAAC;AAED,SAAgB,kBAAkB,CAAC,GAAqB;IACtD,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED,SAAgB,kBAAkB,CAAC,GAAqB,EAAE,KAAa;IACrE,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,IAAI,GAAG,KAAK,cAAc,IAAI,GAAG,KAAK,iBAAiB,EAAE,CAAC;QACxD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG,CAAC;IAClD,CAAC;SAAM,CAAC;QACL,MAAkC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACnD,CAAC;IACD,cAAc,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC;AAED,SAAgB,iBAAiB;IAC/B,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IACrD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,WAAW,KAAK,OAAO,IAAI,WAAW,KAAK,GAAG,CAAC;IACxD,CAAC;IACD,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,OAAO,MAAM,CAAC,iBAAiB,CAAC,IAAI,QAAQ,CAAC,iBAAiB,CAAC,CAAC;AAClE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rotifer/playground",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.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",
|
|
@@ -49,10 +49,12 @@
|
|
|
49
49
|
"check:plugins": "node scripts/check-plugin-outputs.mjs",
|
|
50
50
|
"verify:plugins": "node scripts/verify-plugin-packaging.mjs",
|
|
51
51
|
"verify:versions": "node scripts/verify-version-alignment.mjs",
|
|
52
|
+
"sync:native-versions": "node scripts/sync-native-versions.mjs",
|
|
52
53
|
"bump:plugin-family": "node scripts/bump-plugin-family.mjs",
|
|
53
54
|
"test": "vitest run",
|
|
54
55
|
"test:watch": "vitest",
|
|
55
56
|
"test:coverage": "vitest run --coverage",
|
|
57
|
+
"test:workspace": "vitest run --config vitest.workspace.config.ts",
|
|
56
58
|
"lint": "tsc --noEmit && eslint src/",
|
|
57
59
|
"lint:names": "eslint src/ --rule '@typescript-eslint/naming-convention: error'",
|
|
58
60
|
"clean": "rm -rf dist",
|
|
@@ -66,19 +68,26 @@
|
|
|
66
68
|
"ajv": "^8.17.0",
|
|
67
69
|
"ajv-formats": "^3.0.0",
|
|
68
70
|
"chalk": "^4.1.2",
|
|
69
|
-
"commander": "^
|
|
71
|
+
"commander": "^15.0.0"
|
|
70
72
|
},
|
|
71
73
|
"devDependencies": {
|
|
72
|
-
"@napi-rs/cli": "^3.
|
|
73
|
-
"@
|
|
74
|
+
"@napi-rs/cli": "^3.7.0",
|
|
75
|
+
"@supabase/supabase-js": "^2.105.4",
|
|
76
|
+
"@types/node": "^25.9.2",
|
|
74
77
|
"@vitest/coverage-v8": "^4.1.2",
|
|
78
|
+
"esbuild": "^0.28.1",
|
|
75
79
|
"eslint": "^10.1.0",
|
|
76
|
-
"
|
|
80
|
+
"javy-cli": "^3.0.1",
|
|
81
|
+
"typescript": "^6.0.3",
|
|
77
82
|
"typescript-eslint": "^8.58.0",
|
|
78
83
|
"vitest": "^4.0.0"
|
|
79
84
|
},
|
|
80
85
|
"optionalDependencies": {
|
|
81
|
-
"@rolldown/binding-linux-x64-gnu": "1.
|
|
86
|
+
"@rolldown/binding-linux-x64-gnu": "1.1.1",
|
|
87
|
+
"@rotifer/playground-darwin-arm64": "0.9.0",
|
|
88
|
+
"@rotifer/playground-darwin-x64": "0.9.0",
|
|
89
|
+
"@rotifer/playground-linux-x64-gnu": "0.9.0",
|
|
90
|
+
"@rotifer/playground-win32-x64-msvc": "0.9.0"
|
|
82
91
|
},
|
|
83
92
|
"engines": {
|
|
84
93
|
"node": ">=20.0.0"
|