@rotifer/playground 0.32.1 → 0.33.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 +17 -0
- package/README.md +2 -2
- package/README.zh.md +2 -2
- package/dist/commands/agent-create.d.ts +11 -0
- package/dist/commands/agent-create.d.ts.map +1 -1
- package/dist/commands/agent-create.js +50 -1
- package/dist/commands/agent-create.js.map +1 -1
- package/dist/commands/agent-memory.d.ts +64 -0
- package/dist/commands/agent-memory.d.ts.map +1 -0
- package/dist/commands/agent-memory.js +235 -0
- package/dist/commands/agent-memory.js.map +1 -0
- package/dist/commands/agent-run.d.ts.map +1 -1
- package/dist/commands/agent-run.js +84 -26
- 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 +9 -24
- package/dist/commands/arena-submit.js.map +1 -1
- package/dist/commands/compile.d.ts.map +1 -1
- package/dist/commands/compile.js +32 -6
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/genome-format.d.ts +5 -1
- package/dist/commands/genome-format.d.ts.map +1 -1
- package/dist/commands/genome-format.js +5 -1
- package/dist/commands/genome-format.js.map +1 -1
- package/dist/commands/hello.d.ts.map +1 -1
- package/dist/commands/hello.js +15 -2
- package/dist/commands/hello.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +59 -4
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/test.d.ts.map +1 -1
- package/dist/commands/test.js +78 -25
- package/dist/commands/test.js.map +1 -1
- package/dist/commands/wrap.d.ts.map +1 -1
- package/dist/commands/wrap.js +28 -70
- package/dist/commands/wrap.js.map +1 -1
- package/dist/index.js +47 -1
- package/dist/index.js.map +1 -1
- package/dist/memory/access.d.ts +53 -0
- package/dist/memory/access.d.ts.map +1 -0
- package/dist/memory/access.js +111 -0
- package/dist/memory/access.js.map +1 -0
- package/dist/memory/audit.d.ts +26 -0
- package/dist/memory/audit.d.ts.map +1 -0
- package/dist/memory/audit.js +30 -0
- package/dist/memory/audit.js.map +1 -0
- package/dist/memory/backend.d.ts +141 -0
- package/dist/memory/backend.d.ts.map +1 -0
- package/dist/memory/backend.js +536 -0
- package/dist/memory/backend.js.map +1 -0
- package/dist/memory/codec.d.ts +34 -0
- package/dist/memory/codec.d.ts.map +1 -0
- package/dist/memory/codec.js +184 -0
- package/dist/memory/codec.js.map +1 -0
- package/dist/memory/data-policy.d.ts +39 -0
- package/dist/memory/data-policy.d.ts.map +1 -0
- package/dist/memory/data-policy.js +42 -0
- package/dist/memory/data-policy.js.map +1 -0
- package/dist/memory/host.d.ts +119 -0
- package/dist/memory/host.d.ts.map +1 -0
- package/dist/memory/host.js +226 -0
- package/dist/memory/host.js.map +1 -0
- package/dist/memory/index.d.ts +37 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +64 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/telemetry.d.ts +35 -0
- package/dist/memory/telemetry.d.ts.map +1 -0
- package/dist/memory/telemetry.js +51 -0
- package/dist/memory/telemetry.js.map +1 -0
- package/dist/memory/types.d.ts +110 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +74 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/publish/auto-publish.d.ts +1 -1
- package/dist/publish/auto-publish.js +1 -1
- package/dist/testsuite/gate.d.ts +8 -0
- package/dist/testsuite/gate.d.ts.map +1 -1
- package/dist/testsuite/gate.js +8 -2
- package/dist/testsuite/gate.js.map +1 -1
- package/dist/utils/arena-success.d.ts +10 -0
- package/dist/utils/arena-success.d.ts.map +1 -1
- package/dist/utils/arena-success.js +35 -8
- package/dist/utils/arena-success.js.map +1 -1
- package/dist/utils/binding.d.ts +6 -2
- package/dist/utils/binding.d.ts.map +1 -1
- package/dist/utils/binding.js.map +1 -1
- package/dist/utils/clawhub-client.d.ts +73 -0
- package/dist/utils/clawhub-client.d.ts.map +1 -0
- package/dist/utils/clawhub-client.js +176 -0
- package/dist/utils/clawhub-client.js.map +1 -0
- package/dist/utils/config.d.ts +7 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +15 -1
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/gene-id-display.d.ts +14 -0
- package/dist/utils/gene-id-display.d.ts.map +1 -0
- package/dist/utils/gene-id-display.js +64 -0
- package/dist/utils/gene-id-display.js.map +1 -0
- package/dist/utils/l0-gate.d.ts.map +1 -1
- package/dist/utils/l0-gate.js +4 -1
- package/dist/utils/l0-gate.js.map +1 -1
- package/dist/utils/rust-phenotype.d.ts +17 -5
- package/dist/utils/rust-phenotype.d.ts.map +1 -1
- package/dist/utils/rust-phenotype.js +25 -4
- package/dist/utils/rust-phenotype.js.map +1 -1
- package/package.json +10 -5
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAX_RETENTION_DAYS = exports.MAX_KEY_BYTES = void 0;
|
|
4
|
+
exports.entryIdFor = entryIdFor;
|
|
5
|
+
exports.encodeValue = encodeValue;
|
|
6
|
+
exports.decodeValue = decodeValue;
|
|
7
|
+
exports.checkKey = checkKey;
|
|
8
|
+
exports.checkAccessPolicy = checkAccessPolicy;
|
|
9
|
+
exports.checkRetentionPolicy = checkRetentionPolicy;
|
|
10
|
+
exports.toTimestamp = toTimestamp;
|
|
11
|
+
exports.parseTimestamp = parseTimestamp;
|
|
12
|
+
exports.toEntryJson = toEntryJson;
|
|
13
|
+
exports.fromEntryJson = fromEntryJson;
|
|
14
|
+
exports.parseMemoryQuota = parseMemoryQuota;
|
|
15
|
+
exports.entrySize = entrySize;
|
|
16
|
+
exports.isV2GeneId = isV2GeneId;
|
|
17
|
+
/**
|
|
18
|
+
* Conversions at the AgentMemory boundary: entry ids, base64
|
|
19
|
+
* values, the JSON shape of an entry, timestamps and the quota size syntax.
|
|
20
|
+
* Anything that does not parse is MEMORY_INVALID_INPUT, never coerced.
|
|
21
|
+
*/
|
|
22
|
+
const node_crypto_1 = require("node:crypto");
|
|
23
|
+
const types_js_1 = require("./types.js");
|
|
24
|
+
/** Lowercase hex SHA-256 of `agentId + "\0" + key`. Updates keep the id. */
|
|
25
|
+
function entryIdFor(agentId, key) {
|
|
26
|
+
return (0, node_crypto_1.createHash)("sha256").update(`${agentId}\0${key}`, "utf8").digest("hex");
|
|
27
|
+
}
|
|
28
|
+
// Standard alphabet, padded: the same in every binding.
|
|
29
|
+
// Buffer.from(…, "base64") would also accept base64url, missing padding and
|
|
30
|
+
// stray characters, and silently decode something else.
|
|
31
|
+
const BASE64 = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;
|
|
32
|
+
function encodeValue(value) {
|
|
33
|
+
return Buffer.from(value.buffer, value.byteOffset, value.byteLength).toString("base64");
|
|
34
|
+
}
|
|
35
|
+
function decodeValue(base64) {
|
|
36
|
+
if (typeof base64 !== "string" || !BASE64.test(base64)) {
|
|
37
|
+
throw new types_js_1.MemoryError("MEMORY_INVALID_INPUT", "value must be standard base64 (A–Z a–z 0–9 + /, padded)");
|
|
38
|
+
}
|
|
39
|
+
return new Uint8Array(Buffer.from(base64, "base64"));
|
|
40
|
+
}
|
|
41
|
+
/** Keys are UTF-8 text without NUL (the entry id uses "\0" as its separator). */
|
|
42
|
+
exports.MAX_KEY_BYTES = 1024;
|
|
43
|
+
function checkKey(key) {
|
|
44
|
+
if (typeof key !== "string" || key.length === 0) {
|
|
45
|
+
throw new types_js_1.MemoryError("MEMORY_INVALID_INPUT", "key must be a non-empty string");
|
|
46
|
+
}
|
|
47
|
+
if (key.includes("\0")) {
|
|
48
|
+
throw new types_js_1.MemoryError("MEMORY_INVALID_INPUT", "key must not contain a NUL character");
|
|
49
|
+
}
|
|
50
|
+
if (Buffer.byteLength(key, "utf8") > exports.MAX_KEY_BYTES) {
|
|
51
|
+
throw new types_js_1.MemoryError("MEMORY_INVALID_INPUT", `key is longer than ${exports.MAX_KEY_BYTES} bytes`);
|
|
52
|
+
}
|
|
53
|
+
return key;
|
|
54
|
+
}
|
|
55
|
+
function checkAccessPolicy(policy) {
|
|
56
|
+
const p = policy;
|
|
57
|
+
if (!p || typeof p !== "object") {
|
|
58
|
+
throw new types_js_1.MemoryError("MEMORY_INVALID_INPUT", "accessPolicy must be an object");
|
|
59
|
+
}
|
|
60
|
+
if (!(0, types_js_1.isAccessScope)(p.readScope)) {
|
|
61
|
+
throw new types_js_1.MemoryError("MEMORY_INVALID_INPUT", `unknown readScope '${String(p.readScope)}'`);
|
|
62
|
+
}
|
|
63
|
+
if (!(0, types_js_1.isAccessScope)(p.writeScope)) {
|
|
64
|
+
throw new types_js_1.MemoryError("MEMORY_INVALID_INPUT", `unknown writeScope '${String(p.writeScope)}'`);
|
|
65
|
+
}
|
|
66
|
+
if (!(0, types_js_1.isSharePolicy)(p.sharePolicy)) {
|
|
67
|
+
throw new types_js_1.MemoryError("MEMORY_INVALID_INPUT", `unknown sharePolicy '${String(p.sharePolicy)}'`);
|
|
68
|
+
}
|
|
69
|
+
return { readScope: p.readScope, writeScope: p.writeScope, sharePolicy: p.sharePolicy };
|
|
70
|
+
}
|
|
71
|
+
/** A retentionPolicy is at most 4 KiB of JSON. */
|
|
72
|
+
/** Spec §30.2 `Int`: maxRetentionDays is 1..2147483647. */
|
|
73
|
+
exports.MAX_RETENTION_DAYS = 2147483647;
|
|
74
|
+
const RETENTION_FIELDS = ["maxRetentionDays", "autoDeleteOnTermination", "anonymizationSupported"];
|
|
75
|
+
function checkRetentionPolicy(policy) {
|
|
76
|
+
if (policy === null || policy === undefined)
|
|
77
|
+
return null;
|
|
78
|
+
const unknown = typeof policy === "object" ? Object.keys(policy).filter((k) => !RETENTION_FIELDS.includes(k)) : [];
|
|
79
|
+
if (unknown.length > 0) {
|
|
80
|
+
throw new types_js_1.MemoryError("MEMORY_INVALID_INPUT", `unknown retentionPolicy field(s) ${unknown.join(", ")}`);
|
|
81
|
+
}
|
|
82
|
+
const p = policy;
|
|
83
|
+
const days = p.maxRetentionDays;
|
|
84
|
+
if (typeof p !== "object" ||
|
|
85
|
+
!(days === null || (Number.isInteger(days) && days >= 1 && days <= exports.MAX_RETENTION_DAYS)) ||
|
|
86
|
+
typeof p.autoDeleteOnTermination !== "boolean" ||
|
|
87
|
+
typeof p.anonymizationSupported !== "boolean") {
|
|
88
|
+
throw new types_js_1.MemoryError("MEMORY_INVALID_INPUT", `retentionPolicy must be {maxRetentionDays: integer 1..${exports.MAX_RETENTION_DAYS} | null, autoDeleteOnTermination: boolean, anonymizationSupported: boolean} or null`);
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
maxRetentionDays: days,
|
|
92
|
+
autoDeleteOnTermination: p.autoDeleteOnTermination,
|
|
93
|
+
anonymizationSupported: p.anonymizationSupported,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/** RFC 3339 UTC, as timestamps go on the wire. */
|
|
97
|
+
function toTimestamp(ms) {
|
|
98
|
+
return new Date(ms).toISOString();
|
|
99
|
+
}
|
|
100
|
+
// RFC 3339 date-time: full date, full time, seconds, optional fraction, and
|
|
101
|
+
// an explicit offset ("Z" or ±hh:mm). Date.parse alone accepts "2026" and
|
|
102
|
+
// rolls "2026-02-30" over into March.
|
|
103
|
+
const RFC3339 = /^(\d{4})-(\d{2})-(\d{2})[Tt](\d{2}):(\d{2}):(\d{2})(\.\d+)?([Zz]|[+-]\d{2}:\d{2})$/;
|
|
104
|
+
function parseTimestamp(value, field) {
|
|
105
|
+
const bad = () => new types_js_1.MemoryError("MEMORY_INVALID_INPUT", `${field} must be an RFC 3339 timestamp, e.g. 2026-10-30T12:00:00Z`);
|
|
106
|
+
const m = typeof value === "string" ? RFC3339.exec(value) : null;
|
|
107
|
+
if (!m)
|
|
108
|
+
throw bad();
|
|
109
|
+
const [year, month, day, hour, minute, second] = m.slice(1, 7).map(Number);
|
|
110
|
+
const daysInMonth = new Date(Date.UTC(year, month, 0)).getUTCDate();
|
|
111
|
+
if (month < 1 || month > 12 || day < 1 || day > daysInMonth || hour > 23 || minute > 59 || second > 59)
|
|
112
|
+
throw bad();
|
|
113
|
+
const ms = Date.parse(value);
|
|
114
|
+
if (Number.isNaN(ms))
|
|
115
|
+
throw bad();
|
|
116
|
+
return ms;
|
|
117
|
+
}
|
|
118
|
+
function toEntryJson(entry) {
|
|
119
|
+
return { ...entry, value: encodeValue(entry.value) };
|
|
120
|
+
}
|
|
121
|
+
/** Parse an entry received over JSON; refuses anything outside the wire format. */
|
|
122
|
+
function fromEntryJson(json) {
|
|
123
|
+
const j = json;
|
|
124
|
+
if (!j || typeof j !== "object")
|
|
125
|
+
throw new types_js_1.MemoryError("MEMORY_INVALID_INPUT", "entry must be an object");
|
|
126
|
+
if (!(0, types_js_1.isMemoryCategory)(j.category)) {
|
|
127
|
+
throw new types_js_1.MemoryError("MEMORY_INVALID_INPUT", `unknown category '${String(j.category)}'`);
|
|
128
|
+
}
|
|
129
|
+
if (typeof j.entryId !== "string" || !/^[0-9a-f]{64}$/.test(j.entryId)) {
|
|
130
|
+
throw new types_js_1.MemoryError("MEMORY_INVALID_INPUT", "entryId must be 64 lowercase hex characters");
|
|
131
|
+
}
|
|
132
|
+
if (typeof j.createdBy !== "string" || j.createdBy.length === 0) {
|
|
133
|
+
throw new types_js_1.MemoryError("MEMORY_INVALID_INPUT", "createdBy must be a gene id");
|
|
134
|
+
}
|
|
135
|
+
parseTimestamp(j.createdAt, "createdAt");
|
|
136
|
+
parseTimestamp(j.updatedAt, "updatedAt");
|
|
137
|
+
return {
|
|
138
|
+
entryId: j.entryId,
|
|
139
|
+
category: j.category,
|
|
140
|
+
key: checkKey(j.key),
|
|
141
|
+
value: decodeValue(j.value),
|
|
142
|
+
createdBy: j.createdBy,
|
|
143
|
+
lastAccessedBy: typeof j.lastAccessedBy === "string" ? j.lastAccessedBy : null,
|
|
144
|
+
createdAt: j.createdAt,
|
|
145
|
+
updatedAt: j.updatedAt,
|
|
146
|
+
accessPolicy: checkAccessPolicy(j.accessPolicy),
|
|
147
|
+
retentionPolicy: checkRetentionPolicy(j.retentionPolicy),
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
const QUOTA_UNITS = { KB: 1024, MB: 1024 ** 2, GB: 1024 ** 3 };
|
|
151
|
+
/**
|
|
152
|
+
* `--memory-quota`: a positive number with a KB / MB /
|
|
153
|
+
* GB suffix (binary units, case-insensitive), e.g. `512KB`, `10MB`, `1.5GB`.
|
|
154
|
+
* Zero, negative and unit-less values are refused rather than guessed.
|
|
155
|
+
*/
|
|
156
|
+
function parseMemoryQuota(input) {
|
|
157
|
+
const match = /^\s*(-?\d+(?:\.\d+)?)\s*(KB|MB|GB)\s*$/i.exec(input);
|
|
158
|
+
if (!match) {
|
|
159
|
+
throw new types_js_1.MemoryError("MEMORY_INVALID_INPUT", `memory quota '${input}' is not a size; use a number with KB, MB or GB, e.g. 10MB`);
|
|
160
|
+
}
|
|
161
|
+
const bytes = Math.floor(Number(match[1]) * QUOTA_UNITS[match[2].toUpperCase()]);
|
|
162
|
+
if (!(bytes > 0)) {
|
|
163
|
+
throw new types_js_1.MemoryError("MEMORY_INVALID_INPUT", `memory quota must be greater than zero (got '${input}')`);
|
|
164
|
+
}
|
|
165
|
+
// Past 2^53 a JS number stops counting bytes exactly; the store (u64)
|
|
166
|
+
// would get a different quota from the one asked for.
|
|
167
|
+
if (!Number.isSafeInteger(bytes)) {
|
|
168
|
+
throw new types_js_1.MemoryError("MEMORY_INVALID_INPUT", `memory quota '${input}' is too large`);
|
|
169
|
+
}
|
|
170
|
+
return bytes;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* What the quota counts: the UTF-8 bytes of the key and the
|
|
174
|
+
* value's bytes — never JS string length. The retentionPolicy is bounded by
|
|
175
|
+
* its §30.2 schema and not counted.
|
|
176
|
+
*/
|
|
177
|
+
function entrySize(key, value) {
|
|
178
|
+
return Buffer.byteLength(key, "utf8") + value.byteLength;
|
|
179
|
+
}
|
|
180
|
+
/** A gene id as a caller's must be: "v2:" and 64 lowercase hex digits. */
|
|
181
|
+
function isV2GeneId(id) {
|
|
182
|
+
return typeof id === "string" && /^v2:[0-9a-f]{64}$/.test(id);
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/memory/codec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spec §30.2 DataPolicy, and what it allows a gene to write into AgentMemory
|
|
3
|
+
* (spec §38.2 "与数据主权的集成").
|
|
4
|
+
*
|
|
5
|
+
* §30.2 has no field that says "may not write memory", so the checks below
|
|
6
|
+
* are what the declared policy implies for a memory entry:
|
|
7
|
+
* 1. an entry may not be kept longer than the agent's data retention;
|
|
8
|
+
* 2. an entry may not be shareable (ANONYMIZED_SHARE / KNOWLEDGE_GENE)
|
|
9
|
+
* when the agent's data cannot be anonymised — §38.3 makes
|
|
10
|
+
* de-identification a MUST before anything leaves as a knowledge gene;
|
|
11
|
+
* 3. DEPLOYER_CONFIGURED resolves from the DataPolicy, which defines no
|
|
12
|
+
* memory scope (always "not configured", so denied; no
|
|
13
|
+
* field is invented for it).
|
|
14
|
+
* A violation is MEMORY_ACCESS_DENIED.
|
|
15
|
+
*/
|
|
16
|
+
import type { MemoryAccessPolicy, RetentionPolicy } from "./types.js";
|
|
17
|
+
export type DataOwner = "DEPLOYER" | "USER" | "AGENT" | {
|
|
18
|
+
SHARED: string[];
|
|
19
|
+
};
|
|
20
|
+
export interface DataPolicy {
|
|
21
|
+
inputDataOwnership: DataOwner;
|
|
22
|
+
outputDataOwnership: DataOwner;
|
|
23
|
+
learningDataOwnership: DataOwner;
|
|
24
|
+
metadataOwnership: DataOwner;
|
|
25
|
+
retentionPolicy: RetentionPolicy;
|
|
26
|
+
deletionSupport: boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* What `rotifer agent create` records when the deployer configures nothing
|
|
30
|
+
* (§30.2 says the deployer MUST configure one; this is the explicit
|
|
31
|
+
* default written into the agent record, not an implied one). Learning data
|
|
32
|
+
* — which memory is — belongs to the agent and travels with it (§30.4);
|
|
33
|
+
* retention has no day limit; and nothing claims anonymisation it does not
|
|
34
|
+
* do, so shareable entries are refused until the deployer says otherwise.
|
|
35
|
+
*/
|
|
36
|
+
export declare const DEFAULT_DATA_POLICY: Readonly<DataPolicy>;
|
|
37
|
+
/** Why a write breaks the agent's DataPolicy, or null if it does not. */
|
|
38
|
+
export declare function dataPolicyViolation(policy: DataPolicy, accessPolicy: MemoryAccessPolicy, retention: RetentionPolicy | null): string | null;
|
|
39
|
+
//# sourceMappingURL=data-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-policy.d.ts","sourceRoot":"","sources":["../../src/memory/data-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG;IAAE,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAE7E,MAAM,WAAW,UAAU;IACzB,kBAAkB,EAAE,SAAS,CAAC;IAC9B,mBAAmB,EAAE,SAAS,CAAC;IAC/B,qBAAqB,EAAE,SAAS,CAAC;IACjC,iBAAiB,EAAE,SAAS,CAAC;IAC7B,eAAe,EAAE,eAAe,CAAC;IACjC,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,UAAU,CAWrC,CAAC;AAEjB,yEAAyE;AACzE,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,kBAAkB,EAChC,SAAS,EAAE,eAAe,GAAG,IAAI,GAChC,MAAM,GAAG,IAAI,CAgBf"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_DATA_POLICY = void 0;
|
|
4
|
+
exports.dataPolicyViolation = dataPolicyViolation;
|
|
5
|
+
/**
|
|
6
|
+
* What `rotifer agent create` records when the deployer configures nothing
|
|
7
|
+
* (§30.2 says the deployer MUST configure one; this is the explicit
|
|
8
|
+
* default written into the agent record, not an implied one). Learning data
|
|
9
|
+
* — which memory is — belongs to the agent and travels with it (§30.4);
|
|
10
|
+
* retention has no day limit; and nothing claims anonymisation it does not
|
|
11
|
+
* do, so shareable entries are refused until the deployer says otherwise.
|
|
12
|
+
*/
|
|
13
|
+
exports.DEFAULT_DATA_POLICY = Object.freeze({
|
|
14
|
+
inputDataOwnership: "DEPLOYER",
|
|
15
|
+
outputDataOwnership: "DEPLOYER",
|
|
16
|
+
learningDataOwnership: "AGENT",
|
|
17
|
+
metadataOwnership: "DEPLOYER",
|
|
18
|
+
retentionPolicy: Object.freeze({
|
|
19
|
+
maxRetentionDays: null,
|
|
20
|
+
autoDeleteOnTermination: false,
|
|
21
|
+
anonymizationSupported: false,
|
|
22
|
+
}),
|
|
23
|
+
deletionSupport: true,
|
|
24
|
+
});
|
|
25
|
+
/** Why a write breaks the agent's DataPolicy, or null if it does not. */
|
|
26
|
+
function dataPolicyViolation(policy, accessPolicy, retention) {
|
|
27
|
+
const agentDays = policy.retentionPolicy.maxRetentionDays;
|
|
28
|
+
if (retention && agentDays !== null) {
|
|
29
|
+
if (retention.maxRetentionDays === null || retention.maxRetentionDays > agentDays) {
|
|
30
|
+
return `retentionPolicy keeps the entry ${retention.maxRetentionDays ?? "indefinitely"} day(s); the agent's DataPolicy allows at most ${agentDays}`;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (accessPolicy.sharePolicy !== "PRIVATE" && !policy.retentionPolicy.anonymizationSupported) {
|
|
34
|
+
return `sharePolicy ${accessPolicy.sharePolicy} needs a DataPolicy that supports anonymisation (§38.3); this agent's does not`;
|
|
35
|
+
}
|
|
36
|
+
const isDeployerScopeUsed = accessPolicy.readScope === "DEPLOYER_CONFIGURED" || accessPolicy.writeScope === "DEPLOYER_CONFIGURED";
|
|
37
|
+
if (isDeployerScopeUsed) {
|
|
38
|
+
return "DEPLOYER_CONFIGURED resolves from the agent's DataPolicy (§30.2), which defines no memory scope yet, so it is treated as not configured";
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=data-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-policy.js","sourceRoot":"","sources":["../../src/memory/data-policy.ts"],"names":[],"mappings":";;;AAkDA,kDAoBC;AA1CD;;;;;;;GAOG;AACU,QAAA,mBAAmB,GAAyB,MAAM,CAAC,MAAM,CAAC;IACrE,kBAAkB,EAAE,UAAU;IAC9B,mBAAmB,EAAE,UAAU;IAC/B,qBAAqB,EAAE,OAAO;IAC9B,iBAAiB,EAAE,UAAU;IAC7B,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC;QAC7B,gBAAgB,EAAE,IAAI;QACtB,uBAAuB,EAAE,KAAK;QAC9B,sBAAsB,EAAE,KAAK;KAC9B,CAAC;IACF,eAAe,EAAE,IAAI;CACtB,CAAe,CAAC;AAEjB,yEAAyE;AACzE,SAAgB,mBAAmB,CACjC,MAAkB,EAClB,YAAgC,EAChC,SAAiC;IAEjC,MAAM,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC,gBAAgB,CAAC;IAC1D,IAAI,SAAS,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACpC,IAAI,SAAS,CAAC,gBAAgB,KAAK,IAAI,IAAI,SAAS,CAAC,gBAAgB,GAAG,SAAS,EAAE,CAAC;YAClF,OAAO,mCAAmC,SAAS,CAAC,gBAAgB,IAAI,cAAc,kDAAkD,SAAS,EAAE,CAAC;QACtJ,CAAC;IACH,CAAC;IACD,IAAI,YAAY,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,sBAAsB,EAAE,CAAC;QAC7F,OAAO,eAAe,YAAY,CAAC,WAAW,gFAAgF,CAAC;IACjI,CAAC;IACD,MAAM,mBAAmB,GACvB,YAAY,CAAC,SAAS,KAAK,qBAAqB,IAAI,YAAY,CAAC,UAAU,KAAK,qBAAqB,CAAC;IACxG,IAAI,mBAAmB,EAAE,CAAC;QACxB,OAAO,yIAAyI,CAAC;IACnJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { type NativeBinding } from "../utils/binding.js";
|
|
2
|
+
import { type GeneMemoryAccess } from "./access.js";
|
|
3
|
+
import { type MemoryAuditSink } from "./audit.js";
|
|
4
|
+
import { type MemoryBackend, type NativeMemoryApi } from "./backend.js";
|
|
5
|
+
import { type DataPolicy } from "./data-policy.js";
|
|
6
|
+
import { type MemoryTelemetrySink } from "./telemetry.js";
|
|
7
|
+
/** The memory fields of an agent record (`.rotifer/agents/<id>.json`). */
|
|
8
|
+
export interface AgentMemoryFields {
|
|
9
|
+
id: string;
|
|
10
|
+
/** Bytes; absent on agents created before v0.9.4 → the 10 MB default. */
|
|
11
|
+
memoryQuota?: number;
|
|
12
|
+
/** §30.2; absent on agents created before v0.9.4 → DEFAULT_DATA_POLICY. */
|
|
13
|
+
dataPolicy?: DataPolicy;
|
|
14
|
+
}
|
|
15
|
+
export declare function memoryQuotaOf(agent: AgentMemoryFields): number;
|
|
16
|
+
/**
|
|
17
|
+
* The calling gene's content-derived id (the v0.9.1 v2 id).
|
|
18
|
+
* There is no fallback: an entry's `createdBy` is what CREATOR_GENE_ONLY
|
|
19
|
+
* compares, and a second id scheme would make the same gene two creators.
|
|
20
|
+
*/
|
|
21
|
+
export declare function geneIdentity(genesRoot: string, geneName: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* rotifer-napi's memory, on a PlaygroundBinding opened on the project
|
|
24
|
+
* (store: `<root>/.rotifer/playground.db`), or null when the loaded addon has
|
|
25
|
+
* no memory functions. tryLoadBinding() opens its own instance under the
|
|
26
|
+
* user's home for other purposes; memory belongs to the project, so this
|
|
27
|
+
* opens another instance of the same class on the project root.
|
|
28
|
+
*/
|
|
29
|
+
export declare function projectNativeMemory(root: string): (NativeMemoryApi & NativeBinding) | null;
|
|
30
|
+
/**
|
|
31
|
+
* What the WASM path needs for a gene's memory calls: a binding
|
|
32
|
+
* opened on the project — the one tryLoadBinding() returns lives under the
|
|
33
|
+
* user's home, and its store is not the agent's — and the memoryContext JSON
|
|
34
|
+
* rotifer-napi takes.
|
|
35
|
+
*/
|
|
36
|
+
export interface WasmMemory {
|
|
37
|
+
binding: NativeBinding;
|
|
38
|
+
/** For executeGene: {"agentId","geneId"}; a gene without a v2 id gets {"agentId"} alone, and its calls are denied. */
|
|
39
|
+
geneContext(geneName: string): string;
|
|
40
|
+
/** For executeAlgebra: {"agentId"}; each gene runs as its entry's v2Id. */
|
|
41
|
+
agentContext: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Make sure the agent's memory exists in the native store, with its quota
|
|
45
|
+
* (`agent create`, and first use by an agent created before v0.9.4).
|
|
46
|
+
* Returns false when there is no native store to create it in.
|
|
47
|
+
*/
|
|
48
|
+
export declare function ensureAgentMemory(native: NativeMemoryApi | null, agent: AgentMemoryFields): boolean;
|
|
49
|
+
export interface OpenGeneMemoryOptions {
|
|
50
|
+
/** Project root (where `.rotifer/` lives). */
|
|
51
|
+
root: string;
|
|
52
|
+
agent: AgentMemoryFields;
|
|
53
|
+
gene: {
|
|
54
|
+
id: string;
|
|
55
|
+
domain: string;
|
|
56
|
+
};
|
|
57
|
+
/** The store. Omitted → rotifer-napi's on this project, or none (memoryUnavailable). */
|
|
58
|
+
backend?: MemoryBackend;
|
|
59
|
+
telemetry?: MemoryTelemetrySink;
|
|
60
|
+
audit?: MemoryAuditSink;
|
|
61
|
+
}
|
|
62
|
+
/** A GeneMemoryAccess for `gene` inside `agent`. */
|
|
63
|
+
export declare function openGeneMemory(options: OpenGeneMemoryOptions): GeneMemoryAccess;
|
|
64
|
+
export interface AgentMemoryHandle {
|
|
65
|
+
/** "napi" (rotifer-core's store) or "unavailable" (no native memory: every call fails). */
|
|
66
|
+
store: "napi" | "unavailable";
|
|
67
|
+
/** The WASM path's binding and memoryContext; null without native memory, or when the store cannot execute genes. */
|
|
68
|
+
wasm: WasmMemory | null;
|
|
69
|
+
/** GeneMemoryAccess for one gene of the agent. Never undefined: a gene it cannot identify gets one that refuses, saying why. */
|
|
70
|
+
forGene(geneName: string, phenotype: {
|
|
71
|
+
domain?: unknown;
|
|
72
|
+
}): GeneMemoryAccess;
|
|
73
|
+
/** The same, for a host that already holds the caller's v2 gene id and domain. */
|
|
74
|
+
forCaller(geneId: string, domain: string): GeneMemoryAccess;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* An agent's memory for one `agent run` (spec §38.2; Node path ctx.memory),
|
|
78
|
+
* in rotifer-napi's store on this project — created there on first use with
|
|
79
|
+
* the agent's quota. Without native memory every call fails with
|
|
80
|
+
* MEMORY_STORAGE_ERROR. Tests pass `native` to pin the store.
|
|
81
|
+
*/
|
|
82
|
+
export declare function openAgentMemory(options: {
|
|
83
|
+
root: string;
|
|
84
|
+
genesRoot: string;
|
|
85
|
+
agent: AgentMemoryFields;
|
|
86
|
+
native?: NativeMemoryApi | null;
|
|
87
|
+
telemetry?: MemoryTelemetrySink;
|
|
88
|
+
audit?: MemoryAuditSink;
|
|
89
|
+
}): AgentMemoryHandle;
|
|
90
|
+
/**
|
|
91
|
+
* A throwaway agent memory for `rotifer test`, so a gene author can test a
|
|
92
|
+
* gene that uses memory: rotifer-napi's store in a fresh directory under the
|
|
93
|
+
* system temp dir, for a one-off agent with the default quota — as ctx.memory
|
|
94
|
+
* for the Node path, and as a binding + memoryContext for the WASM path.
|
|
95
|
+
* `dispose()` removes the directory. Without native memory every call is
|
|
96
|
+
* MEMORY_STORAGE_ERROR, as anywhere else.
|
|
97
|
+
*/
|
|
98
|
+
export declare function scratchGeneMemory(options: {
|
|
99
|
+
genesRoot: string;
|
|
100
|
+
geneName: string;
|
|
101
|
+
phenotype: {
|
|
102
|
+
domain?: unknown;
|
|
103
|
+
};
|
|
104
|
+
/** Tests pin the store; omitted → rotifer-napi's, if the addon has memory. */
|
|
105
|
+
openNative?: (dir: string) => NativeMemoryApi | null;
|
|
106
|
+
}): {
|
|
107
|
+
memory: GeneMemoryAccess;
|
|
108
|
+
wasm: WasmMemory | null;
|
|
109
|
+
dispose(): void;
|
|
110
|
+
};
|
|
111
|
+
/**
|
|
112
|
+
* `rotifer run`'s memory for the gene in `geneDir`: no agent, so every call
|
|
113
|
+
* is refused "no agent context", and each refusal is reported to the
|
|
114
|
+
* project's .rotifer/telemetry.jsonl (honouring ROTIFER_TELEMETRY / DO_NOT_TRACK)
|
|
115
|
+
* with agentId null and the gene's v2 id when it has one — the record
|
|
116
|
+
* rotifer-core makes for a WASM gene run the same way.
|
|
117
|
+
*/
|
|
118
|
+
export declare function projectNoAgentMemory(root: string, geneDir: string): GeneMemoryAccess;
|
|
119
|
+
//# sourceMappingURL=host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/memory/host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.memoryQuotaOf = memoryQuotaOf;
|
|
4
|
+
exports.geneIdentity = geneIdentity;
|
|
5
|
+
exports.projectNativeMemory = projectNativeMemory;
|
|
6
|
+
exports.ensureAgentMemory = ensureAgentMemory;
|
|
7
|
+
exports.openGeneMemory = openGeneMemory;
|
|
8
|
+
exports.openAgentMemory = openAgentMemory;
|
|
9
|
+
exports.scratchGeneMemory = scratchGeneMemory;
|
|
10
|
+
exports.projectNoAgentMemory = projectNoAgentMemory;
|
|
11
|
+
/**
|
|
12
|
+
* The CLI's side of AgentMemory (spec §38.2): opening an agent's memory in
|
|
13
|
+
* rotifer-napi's store and binding it to one gene, for the Node path
|
|
14
|
+
* (ctx.memory) and the WASM path (a binding + memoryContext).
|
|
15
|
+
*
|
|
16
|
+
* Memory belongs to the agent (§38.1): it is keyed by the agent id, and
|
|
17
|
+
* nothing here looks at the agent's genome, so replacing genes neither
|
|
18
|
+
* deletes nor rewrites it.
|
|
19
|
+
*
|
|
20
|
+
* The store is rotifer-napi's, in the project's `.rotifer/playground.db`
|
|
21
|
+
*. Without the native binding there is no memory: every call
|
|
22
|
+
* fails with MEMORY_STORAGE_ERROR "native binding unavailable". There is no
|
|
23
|
+
* fallback store.
|
|
24
|
+
*
|
|
25
|
+
* Not part of `@rotifer/playground/memory`: these signatures carry the
|
|
26
|
+
* native binding's types.
|
|
27
|
+
*/
|
|
28
|
+
const node_fs_1 = require("node:fs");
|
|
29
|
+
const node_os_1 = require("node:os");
|
|
30
|
+
const node_path_1 = require("node:path");
|
|
31
|
+
const node_crypto_1 = require("node:crypto");
|
|
32
|
+
const binding_js_1 = require("../utils/binding.js");
|
|
33
|
+
const access_js_1 = require("./access.js");
|
|
34
|
+
const audit_js_1 = require("./audit.js");
|
|
35
|
+
const backend_js_1 = require("./backend.js");
|
|
36
|
+
const data_policy_js_1 = require("./data-policy.js");
|
|
37
|
+
const telemetry_js_1 = require("./telemetry.js");
|
|
38
|
+
const types_js_1 = require("./types.js");
|
|
39
|
+
const index_js_1 = require("./index.js");
|
|
40
|
+
function memoryQuotaOf(agent) {
|
|
41
|
+
return agent.memoryQuota ?? types_js_1.DEFAULT_MEMORY_QUOTA_BYTES;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The calling gene's content-derived id (the v0.9.1 v2 id).
|
|
45
|
+
* There is no fallback: an entry's `createdBy` is what CREATOR_GENE_ONLY
|
|
46
|
+
* compares, and a second id scheme would make the same gene two creators.
|
|
47
|
+
*/
|
|
48
|
+
function geneIdentity(genesRoot, geneName) {
|
|
49
|
+
const result = (0, binding_js_1.geneIdV2)(genesRoot, geneName);
|
|
50
|
+
if ("reason" in result) {
|
|
51
|
+
throw new types_js_1.MemoryError("MEMORY_INVALID_INPUT", `gene '${geneName}' has no content-derived id, so it cannot use agent memory: ${result.reason}`);
|
|
52
|
+
}
|
|
53
|
+
return result.id;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* rotifer-napi's memory, on a PlaygroundBinding opened on the project
|
|
57
|
+
* (store: `<root>/.rotifer/playground.db`), or null when the loaded addon has
|
|
58
|
+
* no memory functions. tryLoadBinding() opens its own instance under the
|
|
59
|
+
* user's home for other purposes; memory belongs to the project, so this
|
|
60
|
+
* opens another instance of the same class on the project root.
|
|
61
|
+
*/
|
|
62
|
+
function projectNativeMemory(root) {
|
|
63
|
+
const loaded = (0, binding_js_1.tryLoadBinding)();
|
|
64
|
+
if (!loaded || !(0, backend_js_1.hasNativeMemory)(loaded) || typeof loaded.constructor !== "function")
|
|
65
|
+
return null;
|
|
66
|
+
const binding = new loaded.constructor(root);
|
|
67
|
+
return (0, backend_js_1.hasNativeMemory)(binding) ? binding : null;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Make sure the agent's memory exists in the native store, with its quota
|
|
71
|
+
* (`agent create`, and first use by an agent created before v0.9.4).
|
|
72
|
+
* Returns false when there is no native store to create it in.
|
|
73
|
+
*/
|
|
74
|
+
function ensureAgentMemory(native, agent) {
|
|
75
|
+
if (!native)
|
|
76
|
+
return false;
|
|
77
|
+
try {
|
|
78
|
+
native.memoryGet(agent.id);
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
const e = (0, backend_js_1.asMemoryError)(err);
|
|
82
|
+
if (e.code !== "MEMORY_NOT_FOUND")
|
|
83
|
+
throw e;
|
|
84
|
+
try {
|
|
85
|
+
native.memoryCreate(agent.id, memoryQuotaOf(agent));
|
|
86
|
+
// Entries with no retentionPolicy of their own inherit the agent's
|
|
87
|
+
// DataPolicy retention; unlimited needs no call.
|
|
88
|
+
const days = agent.dataPolicy?.retentionPolicy.maxRetentionDays ?? null;
|
|
89
|
+
if (days !== null)
|
|
90
|
+
native.memorySetDataPolicyRetention(agent.id, days);
|
|
91
|
+
}
|
|
92
|
+
catch (createErr) {
|
|
93
|
+
throw (0, backend_js_1.asMemoryError)(createErr);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
/** A GeneMemoryAccess for `gene` inside `agent`. */
|
|
99
|
+
function openGeneMemory(options) {
|
|
100
|
+
const { root, agent, gene } = options;
|
|
101
|
+
let backend = options.backend;
|
|
102
|
+
if (!backend) {
|
|
103
|
+
const native = projectNativeMemory(root);
|
|
104
|
+
if (!native)
|
|
105
|
+
return (0, index_js_1.memoryUnavailable)();
|
|
106
|
+
ensureAgentMemory(native, agent);
|
|
107
|
+
backend = new backend_js_1.NapiMemoryBackend(native);
|
|
108
|
+
}
|
|
109
|
+
return (0, access_js_1.createGeneMemoryAccess)({
|
|
110
|
+
backend,
|
|
111
|
+
caller: { agentId: agent.id, geneId: gene.id, domain: gene.domain },
|
|
112
|
+
dataPolicy: agent.dataPolicy ?? data_policy_js_1.DEFAULT_DATA_POLICY,
|
|
113
|
+
telemetry: options.telemetry ?? (0, telemetry_js_1.fileTelemetrySink)(root),
|
|
114
|
+
audit: options.audit ?? (0, audit_js_1.fileAuditSink)(root),
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* An agent's memory for one `agent run` (spec §38.2; Node path ctx.memory),
|
|
119
|
+
* in rotifer-napi's store on this project — created there on first use with
|
|
120
|
+
* the agent's quota. Without native memory every call fails with
|
|
121
|
+
* MEMORY_STORAGE_ERROR. Tests pass `native` to pin the store.
|
|
122
|
+
*/
|
|
123
|
+
function openAgentMemory(options) {
|
|
124
|
+
const { root, genesRoot, agent } = options;
|
|
125
|
+
const native = options.native === undefined ? projectNativeMemory(root) : options.native;
|
|
126
|
+
ensureAgentMemory(native, agent);
|
|
127
|
+
const backend = native ? new backend_js_1.NapiMemoryBackend(native) : null;
|
|
128
|
+
const forCaller = (geneId, domain) => backend
|
|
129
|
+
? openGeneMemory({ root, agent, gene: { id: geneId, domain }, backend, telemetry: options.telemetry, audit: options.audit })
|
|
130
|
+
: (0, index_js_1.memoryUnavailable)();
|
|
131
|
+
const canExecute = native !== null && typeof native.executeGene === "function";
|
|
132
|
+
return {
|
|
133
|
+
store: backend ? "napi" : "unavailable",
|
|
134
|
+
wasm: canExecute
|
|
135
|
+
? {
|
|
136
|
+
binding: native,
|
|
137
|
+
geneContext(geneName) {
|
|
138
|
+
const id = (0, binding_js_1.geneIdV2)(genesRoot, geneName);
|
|
139
|
+
return JSON.stringify("id" in id ? { agentId: agent.id, geneId: id.id } : { agentId: agent.id });
|
|
140
|
+
},
|
|
141
|
+
agentContext: JSON.stringify({ agentId: agent.id }),
|
|
142
|
+
}
|
|
143
|
+
: null,
|
|
144
|
+
forGene(geneName, phenotype) {
|
|
145
|
+
if (!backend)
|
|
146
|
+
return (0, index_js_1.memoryUnavailable)();
|
|
147
|
+
const domain = typeof phenotype.domain === "string" ? phenotype.domain : "";
|
|
148
|
+
let geneId;
|
|
149
|
+
try {
|
|
150
|
+
geneId = geneIdentity(genesRoot, geneName);
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
// The store refuses a caller without a v2 id and records it (audit,
|
|
154
|
+
// geneId null, and §17), as rotifer-core does
|
|
155
|
+
// for WASM genes; the refusal tells the author why.
|
|
156
|
+
return explainRefusals(forCaller("", domain), `gene '${geneName}' cannot use agent memory: ${err.message}`);
|
|
157
|
+
}
|
|
158
|
+
return forCaller(geneId, domain);
|
|
159
|
+
},
|
|
160
|
+
forCaller,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* A throwaway agent memory for `rotifer test`, so a gene author can test a
|
|
165
|
+
* gene that uses memory: rotifer-napi's store in a fresh directory under the
|
|
166
|
+
* system temp dir, for a one-off agent with the default quota — as ctx.memory
|
|
167
|
+
* for the Node path, and as a binding + memoryContext for the WASM path.
|
|
168
|
+
* `dispose()` removes the directory. Without native memory every call is
|
|
169
|
+
* MEMORY_STORAGE_ERROR, as anywhere else.
|
|
170
|
+
*/
|
|
171
|
+
function scratchGeneMemory(options) {
|
|
172
|
+
const dir = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), "rotifer-test-memory-"));
|
|
173
|
+
const dispose = () => {
|
|
174
|
+
try {
|
|
175
|
+
(0, node_fs_1.rmSync)(dir, { recursive: true, force: true, maxRetries: 3 });
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
/* a temp dir; the OS cleans what an open handle kept */
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
try {
|
|
182
|
+
const native = (options.openNative ?? projectNativeMemory)(dir);
|
|
183
|
+
if (!native) {
|
|
184
|
+
dispose();
|
|
185
|
+
return { memory: (0, index_js_1.memoryUnavailable)(), wasm: null, dispose: () => { } };
|
|
186
|
+
}
|
|
187
|
+
const agent = { id: `test-${(0, node_crypto_1.randomUUID)()}` };
|
|
188
|
+
const handle = openAgentMemory({ root: dir, genesRoot: options.genesRoot, agent, native });
|
|
189
|
+
return { memory: handle.forGene(options.geneName, options.phenotype), wasm: handle.wasm, dispose };
|
|
190
|
+
}
|
|
191
|
+
catch (err) {
|
|
192
|
+
dispose();
|
|
193
|
+
throw err;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/** `memory`, whose MEMORY_ACCESS_DENIED refusals carry `why` instead of the store's generic message. */
|
|
197
|
+
function explainRefusals(memory, why) {
|
|
198
|
+
const explain = (call) => {
|
|
199
|
+
try {
|
|
200
|
+
return call();
|
|
201
|
+
}
|
|
202
|
+
catch (err) {
|
|
203
|
+
if (err instanceof types_js_1.MemoryError && err.code === "MEMORY_ACCESS_DENIED")
|
|
204
|
+
throw new types_js_1.MemoryError("MEMORY_ACCESS_DENIED", why);
|
|
205
|
+
throw err;
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
return {
|
|
209
|
+
readMemory: (...args) => explain(() => memory.readMemory(...args)),
|
|
210
|
+
writeMemory: (...args) => explain(() => memory.writeMemory(...args)),
|
|
211
|
+
queryMemory: (...args) => explain(() => memory.queryMemory(...args)),
|
|
212
|
+
deleteMemory: (...args) => explain(() => memory.deleteMemory(...args)),
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* `rotifer run`'s memory for the gene in `geneDir`: no agent, so every call
|
|
217
|
+
* is refused "no agent context", and each refusal is reported to the
|
|
218
|
+
* project's .rotifer/telemetry.jsonl (honouring ROTIFER_TELEMETRY / DO_NOT_TRACK)
|
|
219
|
+
* with agentId null and the gene's v2 id when it has one — the record
|
|
220
|
+
* rotifer-core makes for a WASM gene run the same way.
|
|
221
|
+
*/
|
|
222
|
+
function projectNoAgentMemory(root, geneDir) {
|
|
223
|
+
const id = (0, binding_js_1.geneIdV2)((0, node_path_1.dirname)(geneDir), (0, node_path_1.basename)(geneDir));
|
|
224
|
+
return (0, index_js_1.noAgentMemory)({ telemetry: (0, telemetry_js_1.fileTelemetrySink)(root), geneId: "id" in id ? id.id : null });
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/memory/host.ts"],"names":[],"mappings":"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"}
|