@airprompter/agent-core 0.1.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.
Files changed (129) hide show
  1. package/README.md +28 -0
  2. package/dist/cjs/bundle/apbundle.js +98 -0
  3. package/dist/cjs/bundle/apbundle.js.map +1 -0
  4. package/dist/cjs/bundle/hpke.js +120 -0
  5. package/dist/cjs/bundle/hpke.js.map +1 -0
  6. package/dist/cjs/checks/index.js +450 -0
  7. package/dist/cjs/checks/index.js.map +1 -0
  8. package/dist/cjs/control/client.js +85 -0
  9. package/dist/cjs/control/client.js.map +1 -0
  10. package/dist/cjs/golden/index.js +138 -0
  11. package/dist/cjs/golden/index.js.map +1 -0
  12. package/dist/cjs/index.js +125 -0
  13. package/dist/cjs/index.js.map +1 -0
  14. package/dist/cjs/judge/index.js +134 -0
  15. package/dist/cjs/judge/index.js.map +1 -0
  16. package/dist/cjs/package.json +1 -0
  17. package/dist/cjs/ports/node.js +30 -0
  18. package/dist/cjs/ports/node.js.map +1 -0
  19. package/dist/cjs/protocol/assignment.js +158 -0
  20. package/dist/cjs/protocol/assignment.js.map +1 -0
  21. package/dist/cjs/protocol/canonicalJson.js +72 -0
  22. package/dist/cjs/protocol/canonicalJson.js.map +1 -0
  23. package/dist/cjs/protocol/errors.js +22 -0
  24. package/dist/cjs/protocol/errors.js.map +1 -0
  25. package/dist/cjs/protocol/ports.js +19 -0
  26. package/dist/cjs/protocol/ports.js.map +1 -0
  27. package/dist/cjs/protocol/trust.js +225 -0
  28. package/dist/cjs/protocol/trust.js.map +1 -0
  29. package/dist/cjs/protocol/types.js +15 -0
  30. package/dist/cjs/protocol/types.js.map +1 -0
  31. package/dist/cjs/protocol/version.js +8 -0
  32. package/dist/cjs/protocol/version.js.map +1 -0
  33. package/dist/cjs/release/bundleRelease.js +61 -0
  34. package/dist/cjs/release/bundleRelease.js.map +1 -0
  35. package/dist/cjs/release/reader.js +12 -0
  36. package/dist/cjs/release/reader.js.map +1 -0
  37. package/dist/cjs/render/runRef.js +33 -0
  38. package/dist/cjs/render/runRef.js.map +1 -0
  39. package/dist/cjs/render/template.js +71 -0
  40. package/dist/cjs/render/template.js.map +1 -0
  41. package/dist/cjs/telemetry/feedback.js +81 -0
  42. package/dist/cjs/telemetry/feedback.js.map +1 -0
  43. package/dist/cjs/telemetry/rows.js +28 -0
  44. package/dist/cjs/telemetry/rows.js.map +1 -0
  45. package/dist/cjs/telemetry/uploadSink.js +13 -0
  46. package/dist/cjs/telemetry/uploadSink.js.map +1 -0
  47. package/dist/cjs/testing/controlPlane.js +381 -0
  48. package/dist/cjs/testing/controlPlane.js.map +1 -0
  49. package/dist/cjs/testing/index.js +45 -0
  50. package/dist/cjs/testing/index.js.map +1 -0
  51. package/dist/cjs/testing/memoryFs.js +236 -0
  52. package/dist/cjs/testing/memoryFs.js.map +1 -0
  53. package/dist/esm/.tsbuildinfo +1 -0
  54. package/dist/esm/bundle/apbundle.d.ts +33 -0
  55. package/dist/esm/bundle/apbundle.js +89 -0
  56. package/dist/esm/bundle/apbundle.js.map +1 -0
  57. package/dist/esm/bundle/hpke.d.ts +48 -0
  58. package/dist/esm/bundle/hpke.js +107 -0
  59. package/dist/esm/bundle/hpke.js.map +1 -0
  60. package/dist/esm/checks/index.d.ts +85 -0
  61. package/dist/esm/checks/index.js +436 -0
  62. package/dist/esm/checks/index.js.map +1 -0
  63. package/dist/esm/control/client.d.ts +78 -0
  64. package/dist/esm/control/client.js +81 -0
  65. package/dist/esm/control/client.js.map +1 -0
  66. package/dist/esm/golden/index.d.ts +97 -0
  67. package/dist/esm/golden/index.js +130 -0
  68. package/dist/esm/golden/index.js.map +1 -0
  69. package/dist/esm/index.d.ts +41 -0
  70. package/dist/esm/index.js +31 -0
  71. package/dist/esm/index.js.map +1 -0
  72. package/dist/esm/judge/index.d.ts +51 -0
  73. package/dist/esm/judge/index.js +127 -0
  74. package/dist/esm/judge/index.js.map +1 -0
  75. package/dist/esm/ports/node.d.ts +8 -0
  76. package/dist/esm/ports/node.js +27 -0
  77. package/dist/esm/ports/node.js.map +1 -0
  78. package/dist/esm/protocol/assignment.d.ts +49 -0
  79. package/dist/esm/protocol/assignment.js +143 -0
  80. package/dist/esm/protocol/assignment.js.map +1 -0
  81. package/dist/esm/protocol/canonicalJson.d.ts +10 -0
  82. package/dist/esm/protocol/canonicalJson.js +65 -0
  83. package/dist/esm/protocol/canonicalJson.js.map +1 -0
  84. package/dist/esm/protocol/errors.d.ts +15 -0
  85. package/dist/esm/protocol/errors.js +19 -0
  86. package/dist/esm/protocol/errors.js.map +1 -0
  87. package/dist/esm/protocol/ports.d.ts +65 -0
  88. package/dist/esm/protocol/ports.js +16 -0
  89. package/dist/esm/protocol/ports.js.map +1 -0
  90. package/dist/esm/protocol/trust.d.ts +60 -0
  91. package/dist/esm/protocol/trust.js +211 -0
  92. package/dist/esm/protocol/trust.js.map +1 -0
  93. package/dist/esm/protocol/types.d.ts +235 -0
  94. package/dist/esm/protocol/types.js +12 -0
  95. package/dist/esm/protocol/types.js.map +1 -0
  96. package/dist/esm/protocol/version.d.ts +4 -0
  97. package/dist/esm/protocol/version.js +5 -0
  98. package/dist/esm/protocol/version.js.map +1 -0
  99. package/dist/esm/release/bundleRelease.d.ts +45 -0
  100. package/dist/esm/release/bundleRelease.js +57 -0
  101. package/dist/esm/release/bundleRelease.js.map +1 -0
  102. package/dist/esm/release/reader.d.ts +30 -0
  103. package/dist/esm/release/reader.js +11 -0
  104. package/dist/esm/release/reader.js.map +1 -0
  105. package/dist/esm/render/runRef.d.ts +17 -0
  106. package/dist/esm/render/runRef.js +29 -0
  107. package/dist/esm/render/runRef.js.map +1 -0
  108. package/dist/esm/render/template.d.ts +38 -0
  109. package/dist/esm/render/template.js +65 -0
  110. package/dist/esm/render/template.js.map +1 -0
  111. package/dist/esm/telemetry/feedback.d.ts +21 -0
  112. package/dist/esm/telemetry/feedback.js +77 -0
  113. package/dist/esm/telemetry/feedback.js.map +1 -0
  114. package/dist/esm/telemetry/rows.d.ts +85 -0
  115. package/dist/esm/telemetry/rows.js +22 -0
  116. package/dist/esm/telemetry/rows.js.map +1 -0
  117. package/dist/esm/telemetry/uploadSink.d.ts +52 -0
  118. package/dist/esm/telemetry/uploadSink.js +12 -0
  119. package/dist/esm/telemetry/uploadSink.js.map +1 -0
  120. package/dist/esm/testing/controlPlane.d.ts +116 -0
  121. package/dist/esm/testing/controlPlane.js +341 -0
  122. package/dist/esm/testing/controlPlane.js.map +1 -0
  123. package/dist/esm/testing/index.d.ts +25 -0
  124. package/dist/esm/testing/index.js +35 -0
  125. package/dist/esm/testing/index.js.map +1 -0
  126. package/dist/esm/testing/memoryFs.d.ts +64 -0
  127. package/dist/esm/testing/memoryFs.js +232 -0
  128. package/dist/esm/testing/memoryFs.js.map +1 -0
  129. package/package.json +45 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assignment.js","sourceRoot":"","sources":["../../../src/protocol/assignment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ /** Canonical JSON per `protocol/canonical-json.md`: the bytes under every digest and signature. */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.CanonicalJsonError = void 0;
5
+ exports.canonicalJson = canonicalJson;
6
+ exports.sha256Prefixed = sha256Prefixed;
7
+ exports.canonicalBytes = canonicalBytes;
8
+ const node_crypto_1 = require("node:crypto");
9
+ class CanonicalJsonError extends Error {
10
+ reason;
11
+ path;
12
+ constructor(reason, path) {
13
+ super(`${reason} at ${path}`);
14
+ this.reason = reason;
15
+ this.path = path;
16
+ this.name = "CanonicalJsonError";
17
+ }
18
+ }
19
+ exports.CanonicalJsonError = CanonicalJsonError;
20
+ function canonicalJson(value) {
21
+ return encode(value, "$", new Set());
22
+ }
23
+ function encode(value, path, stack) {
24
+ if (value === null)
25
+ return "null";
26
+ switch (typeof value) {
27
+ case "boolean":
28
+ return value ? "true" : "false";
29
+ case "string":
30
+ return JSON.stringify(value);
31
+ case "number":
32
+ if (!Number.isFinite(value))
33
+ throw new CanonicalJsonError("non_finite_number", path);
34
+ if (!Number.isInteger(value))
35
+ throw new CanonicalJsonError("non_integer_number", path);
36
+ if (Math.abs(value) > Number.MAX_SAFE_INTEGER)
37
+ throw new CanonicalJsonError("unsafe_integer", path);
38
+ return Object.is(value, -0) ? "0" : String(value);
39
+ case "undefined":
40
+ throw new CanonicalJsonError("undefined_value", path);
41
+ case "object":
42
+ break;
43
+ default:
44
+ throw new CanonicalJsonError("unsupported_type", path);
45
+ }
46
+ const object = value;
47
+ if (stack.has(object))
48
+ throw new CanonicalJsonError("cycle", path);
49
+ if (Array.isArray(object)) {
50
+ stack.add(object);
51
+ const parts = object.map((item, index) => encode(item, `${path}[${index}]`, stack));
52
+ stack.delete(object);
53
+ return `[${parts.join(",")}]`;
54
+ }
55
+ const proto = Object.getPrototypeOf(object);
56
+ if (proto !== Object.prototype && proto !== null)
57
+ throw new CanonicalJsonError("unsupported_type", path);
58
+ stack.add(object);
59
+ const parts = [];
60
+ for (const key of Object.keys(object).sort()) {
61
+ parts.push(`${JSON.stringify(key)}:${encode(object[key], `${path}.${key}`, stack)}`);
62
+ }
63
+ stack.delete(object);
64
+ return `{${parts.join(",")}}`;
65
+ }
66
+ function sha256Prefixed(bytes) {
67
+ return `sha256:${(0, node_crypto_1.createHash)("sha256").update(bytes).digest("hex")}`;
68
+ }
69
+ function canonicalBytes(value) {
70
+ return Buffer.from(canonicalJson(value), "utf8");
71
+ }
72
+ //# sourceMappingURL=canonicalJson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonicalJson.js","sourceRoot":"","sources":["../../../src/protocol/canonicalJson.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ /**
3
+ * Error identity without `instanceof`.
4
+ *
5
+ * A lockfile can hold two copies of this package (a sibling package pinning
6
+ * a different patch, a bundler duplicating a chunk). An error thrown by one
7
+ * copy is not `instanceof` the class from the other, and a runtime that
8
+ * branches on `instanceof` then misreports a store error as unknown or skips
9
+ * a flush. Every SDK error sets `name` and carries a `code`; both survive
10
+ * duplication, so identity is read from them. Nothing in this package may
11
+ * use `instanceof` on an SDK class (pinned by `test/discriminants.test.ts`).
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.errorNamed = errorNamed;
15
+ /** An error object whose `name` is `name` and which carries a string `code`. */
16
+ function errorNamed(error, name) {
17
+ if (typeof error !== "object" || error === null)
18
+ return false;
19
+ const candidate = error;
20
+ return candidate.name === name && typeof candidate.code === "string";
21
+ }
22
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/protocol/errors.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AAGH,gCAIC;AALD,gFAAgF;AAChF,SAAgB,UAAU,CAAgC,KAAc,EAAE,IAAY;IACpF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,SAAS,GAAG,KAA2C,CAAC;IAC9D,OAAO,SAAS,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC;AACvE,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ /**
3
+ * Ports (S2, AIR-1970): the seams between the SDK and the world it cannot
4
+ * control — the filesystem, the clock, the network. Every I/O module takes
5
+ * one of these instead of reaching for `node:fs`, `Date.now` or `fetch`, so a
6
+ * fake can *fill* (ENOSPC), *fail* (EIO), *vanish a file* (ENOENT) or *skew*
7
+ * — our own rule: a forgiving fake hides every budget bug. The Node
8
+ * implementations live in `../ports/node.js`; the fakes in `../testing/`.
9
+ *
10
+ * Pure types; nothing here imports Node.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.fsFailureCode = fsFailureCode;
14
+ /** The `code` of a filesystem failure, or `"unknown"` for anything else thrown. */
15
+ function fsFailureCode(error) {
16
+ const code = error?.code;
17
+ return typeof code === "string" && code.length > 0 ? code : "unknown";
18
+ }
19
+ //# sourceMappingURL=ports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.js","sourceRoot":"","sources":["../../../src/protocol/ports.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;AAgDH,sCAGC;AAJD,mFAAmF;AACnF,SAAgB,aAAa,CAAC,KAAc;IAC1C,MAAM,IAAI,GAAI,KAAmC,EAAE,IAAI,CAAC;IACxD,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACxE,CAAC"}
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ /**
3
+ * The trust chain (`protocol/trust-chain.md`): thumbprints, ES256 over
4
+ * canonical bytes, root-metadata acceptance R1–R5 and manifest verification
5
+ * M1–M12. Pure over its inputs; `now` is always passed in. This is what
6
+ * decides whether bytes go live, so it never reads the network or the disk.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.SUPPORTED_PROTOCOL_MAJORS = void 0;
10
+ exports.keyThumbprint = keyThumbprint;
11
+ exports.publicJwkOf = publicJwkOf;
12
+ exports.signBytes = signBytes;
13
+ exports.verifyBytes = verifyBytes;
14
+ exports.instant = instant;
15
+ exports.trustedRootFromPinnedKey = trustedRootFromPinnedKey;
16
+ exports.verifyRootMetadata = verifyRootMetadata;
17
+ exports.referencedPayloads = referencedPayloads;
18
+ exports.verifyManifest = verifyManifest;
19
+ exports.releaseDigestInput = releaseDigestInput;
20
+ exports.releaseDigest = releaseDigest;
21
+ const node_crypto_1 = require("node:crypto");
22
+ const assignment_js_1 = require("./assignment.js");
23
+ const canonicalJson_js_1 = require("./canonicalJson.js");
24
+ const types_js_1 = require("./types.js");
25
+ exports.SUPPORTED_PROTOCOL_MAJORS = new Set([0]);
26
+ /** RFC 7638: sha256 over canonical {crv, kty, x, y}, lowercase hex. */
27
+ function keyThumbprint(jwk) {
28
+ return (0, node_crypto_1.createHash)("sha256").update((0, canonicalJson_js_1.canonicalJson)({ crv: jwk.crv, kty: jwk.kty, x: jwk.x, y: jwk.y }), "utf8").digest("hex");
29
+ }
30
+ function publicJwkOf(jwk) {
31
+ return { kty: "EC", crv: "P-256", x: jwk.x, y: jwk.y };
32
+ }
33
+ /** ES256, P1363 r‖s, base64url without padding. Local keys only (the platform signs in KMS). */
34
+ function signBytes(bytes, privateJwk) {
35
+ const key = (0, node_crypto_1.createPrivateKey)({ key: privateJwk, format: "jwk" });
36
+ return (0, node_crypto_1.sign)("sha256", bytes, { key, dsaEncoding: "ieee-p1363" }).toString("base64url");
37
+ }
38
+ function verifyBytes(bytes, signature, publicJwk) {
39
+ if (!/^[A-Za-z0-9_-]{86}$/.test(signature))
40
+ return false;
41
+ try {
42
+ const key = (0, node_crypto_1.createPublicKey)({ key: publicJwk, format: "jwk" });
43
+ return (0, node_crypto_1.verify)("sha256", bytes, { key, dsaEncoding: "ieee-p1363" }, Buffer.from(signature, "base64url"));
44
+ }
45
+ catch {
46
+ return false;
47
+ }
48
+ }
49
+ /** Timestamps compare as instants (RFC 3339), never as strings. */
50
+ function instant(text) {
51
+ const ms = Date.parse(text);
52
+ if (!Number.isFinite(ms))
53
+ throw new Error(`not an RFC 3339 timestamp: ${text}`);
54
+ return ms;
55
+ }
56
+ /** The synthetic trusted document a runtime starts from: the pinned root key alone, in the root role. */
57
+ function trustedRootFromPinnedKey(input) {
58
+ const keyId = keyThumbprint(input.pinnedRoot);
59
+ return {
60
+ signed: {
61
+ type: "root",
62
+ protocol: "0.0.0",
63
+ purpose: input.purpose,
64
+ environment: input.environment,
65
+ version: 0,
66
+ expires: "9999-12-31T23:59:59Z",
67
+ keys: { [keyId]: { keyType: "ecdsa-p256", scheme: "ES256", publicKey: publicJwkOf(input.pinnedRoot) } },
68
+ roles: { root: { keyIds: [keyId], threshold: 1 }, targets: { keyIds: [], threshold: 1 } },
69
+ },
70
+ signatures: [],
71
+ };
72
+ }
73
+ function countValidSignatures(bytes, signatures, keyIds, keys) {
74
+ const seen = new Set();
75
+ let valid = 0;
76
+ for (const signature of signatures) {
77
+ if (!keyIds.includes(signature.keyId) || seen.has(signature.keyId))
78
+ continue;
79
+ const key = keys[signature.keyId];
80
+ if (!key)
81
+ continue;
82
+ if (verifyBytes(bytes, signature.sig, key.publicKey)) {
83
+ seen.add(signature.keyId);
84
+ valid += 1;
85
+ }
86
+ }
87
+ return valid;
88
+ }
89
+ /** R1–R5. */
90
+ function verifyRootMetadata(input) {
91
+ const signed = input.candidate.signed;
92
+ const trusted = input.trusted.signed;
93
+ if (signed.purpose !== trusted.purpose || signed.environment !== trusted.environment)
94
+ return { ok: false, reason: "root_scope_mismatch" };
95
+ for (const [keyId, key] of Object.entries(signed.keys)) {
96
+ if (keyThumbprint(key.publicKey) !== keyId)
97
+ return { ok: false, reason: "key_id_mismatch" };
98
+ }
99
+ if (signed.version < trusted.version)
100
+ return { ok: false, reason: "root_rollback" };
101
+ if (signed.version === trusted.version && (0, canonicalJson_js_1.canonicalJson)(signed) !== (0, canonicalJson_js_1.canonicalJson)(trusted))
102
+ return { ok: false, reason: "root_rollback" };
103
+ const role = trusted.roles.root;
104
+ if (countValidSignatures((0, canonicalJson_js_1.canonicalBytes)(signed), input.candidate.signatures, role.keyIds, trusted.keys) < role.threshold) {
105
+ return { ok: false, reason: "root_signature_invalid" };
106
+ }
107
+ if (!(instant(signed.expires) > instant(input.now)))
108
+ return { ok: false, reason: "root_expired" };
109
+ return { ok: true };
110
+ }
111
+ /** Every content hash a manifest references, with the declared length: slots, steps, arm overrides. */
112
+ function referencedPayloads(payload) {
113
+ const hashes = new Map();
114
+ const add = (slot) => {
115
+ hashes.set(slot.contentHash, slot.byteLength);
116
+ for (const step of slot.steps ?? [])
117
+ hashes.set(step.contentHash, step.byteLength);
118
+ if (slot.goldenSet)
119
+ hashes.set(slot.goldenSet.contentHash, slot.goldenSet.byteLength);
120
+ };
121
+ for (const slot of payload.slots)
122
+ add(slot);
123
+ for (const arm of payload.experiment?.arms ?? [])
124
+ for (const override of arm.overrides)
125
+ add(override);
126
+ return hashes;
127
+ }
128
+ function keyUsableAt(key, now) {
129
+ const at = instant(now);
130
+ if (key.notBefore && !(instant(key.notBefore) <= at))
131
+ return false;
132
+ if (key.notAfter && !(at < instant(key.notAfter)))
133
+ return false;
134
+ return true;
135
+ }
136
+ /** M1–M14. */
137
+ function verifyManifest(input) {
138
+ const { manifest, root } = input;
139
+ const payload = manifest.payload;
140
+ if (!(instant(root.signed.expires) > instant(input.now)))
141
+ return { ok: false, reason: "root_expired" };
142
+ const major = Number(payload.protocol.split(".")[0]);
143
+ if (!exports.SUPPORTED_PROTOCOL_MAJORS.has(major))
144
+ return { ok: false, reason: "protocol_unsupported" };
145
+ const targets = root.signed.roles.targets;
146
+ const named = manifest.signatures.filter((signature) => targets.keyIds.includes(signature.keyId) && root.signed.keys[signature.keyId]);
147
+ if (named.length === 0)
148
+ return { ok: false, reason: "unknown_signing_key" };
149
+ const usable = named.filter((signature) => keyUsableAt(root.signed.keys[signature.keyId], input.now));
150
+ if (usable.length === 0)
151
+ return { ok: false, reason: "signing_key_expired" };
152
+ const valid = countValidSignatures((0, canonicalJson_js_1.canonicalBytes)(payload), usable, targets.keyIds, root.signed.keys);
153
+ if (valid === 0)
154
+ return { ok: false, reason: "signature_invalid" };
155
+ if (valid < targets.threshold)
156
+ return { ok: false, reason: "signature_threshold" };
157
+ if (payload.organizationId !== input.scope.organizationId || payload.agentId !== input.scope.agentId || payload.target !== input.scope.target) {
158
+ return { ok: false, reason: "scope_mismatch" };
159
+ }
160
+ if (payload.generation < input.storedGeneration)
161
+ return { ok: false, reason: "generation_rollback" };
162
+ // M13 (S4): the kinds a runtime honours are a closed set; one it does not know refuses the whole manifest before a byte is fetched.
163
+ if (!Array.isArray(payload.directives) || payload.directives.some((directive) => !directive || typeof directive !== "object" || !types_js_1.DIRECTIVE_KINDS.has(directive.kind))) {
164
+ return { ok: false, reason: "directive_unknown" };
165
+ }
166
+ // M14 (S9): a ramp plan, when present, is well-formed — a malformed one is refused whole rather than walked wrongly.
167
+ if (payload.experiment?.ramp !== undefined) {
168
+ try {
169
+ (0, assignment_js_1.validateRamp)(payload.experiment.ramp, payload.experiment.arms.length);
170
+ }
171
+ catch (error) {
172
+ if ((0, assignment_js_1.isAssignmentError)(error) && error.reason === "ramp_invalid")
173
+ return { ok: false, reason: "ramp_invalid" };
174
+ throw error;
175
+ }
176
+ }
177
+ if (input.payloads) {
178
+ for (const [hash, byteLength] of referencedPayloads(payload)) {
179
+ const bytes = input.payloads.get(hash);
180
+ if (bytes === undefined)
181
+ return { ok: false, reason: "payload_missing" };
182
+ if (bytes.length !== byteLength || (0, canonicalJson_js_1.sha256Prefixed)(bytes) !== hash)
183
+ return { ok: false, reason: "payload_hash_mismatch" };
184
+ }
185
+ }
186
+ if (payload.requireCountersign || input.requireCountersign) {
187
+ const digests = new Set([payload.releaseDigest, ...(payload.experiment?.arms ?? []).map((arm) => arm.releaseDigest)]);
188
+ const role = input.countersignRoot?.signed.roles.targets ?? { keyIds: [], threshold: 1 };
189
+ const keys = input.countersignRoot?.signed.keys ?? {};
190
+ for (const digest of digests) {
191
+ const candidates = (manifest.countersignatures ?? []).filter((c) => c.releaseDigest === digest && role.keyIds.includes(c.keyId) && keys[c.keyId]);
192
+ if (candidates.length === 0)
193
+ return { ok: false, reason: "countersign_missing" };
194
+ if (countValidSignatures(Buffer.from(digest, "utf8"), candidates, role.keyIds, keys) < role.threshold)
195
+ return { ok: false, reason: "countersign_invalid" };
196
+ }
197
+ }
198
+ return { ok: true, signingKeyId: usable[0].keyId, generation: payload.generation };
199
+ }
200
+ /** The digest input: pins sorted by tag, projected to exactly the covered members (canonical-json.md). */
201
+ function releaseDigestInput(slots) {
202
+ return [...slots]
203
+ .sort((a, b) => (a.tag < b.tag ? -1 : a.tag > b.tag ? 1 : 0))
204
+ .map((slot) => ({
205
+ tag: slot.tag,
206
+ kind: slot.kind,
207
+ artifactId: slot.artifactId,
208
+ versionId: slot.versionId,
209
+ versionOrdinal: slot.versionOrdinal,
210
+ contentHash: slot.contentHash,
211
+ byteLength: slot.byteLength,
212
+ model: slot.model,
213
+ ...(slot.modelRequired === true ? { modelRequired: true } : {}),
214
+ ...(Array.isArray(slot.outputChecks) && slot.outputChecks.length > 0 ? { outputChecks: slot.outputChecks } : {}),
215
+ ...(slot.goldenSet ? { goldenSet: { setId: slot.goldenSet.setId, cases: slot.goldenSet.cases, contentHash: slot.goldenSet.contentHash, byteLength: slot.goldenSet.byteLength, minPassBps: slot.goldenSet.minPassBps } } : {}),
216
+ variables: slot.variables.map((v) => ({ name: v.name, required: v.required, trust: v.trust })),
217
+ ...(slot.steps
218
+ ? { steps: slot.steps.map((s) => ({ stepId: s.stepId, ordinal: s.ordinal, promptArtifactId: s.promptArtifactId, promptVersionId: s.promptVersionId, contentHash: s.contentHash, byteLength: s.byteLength })) }
219
+ : {}),
220
+ }));
221
+ }
222
+ function releaseDigest(slots) {
223
+ return (0, canonicalJson_js_1.sha256Prefixed)((0, canonicalJson_js_1.canonicalBytes)(releaseDigestInput(slots)));
224
+ }
225
+ //# sourceMappingURL=trust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust.js","sourceRoot":"","sources":["../../../src/protocol/trust.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ /**
3
+ * Wire types for protocol 0.2 — hand-written to match `protocol/schemas/*`.
4
+ * The conformance vectors, not these types, are what proves agreement; keep
5
+ * them narrow and let the schema tests catch drift.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.DIRECTIVE_KINDS = void 0;
9
+ /**
10
+ * S4: the set of directive kinds a runtime honours is closed. `disable` is the one kind that acts without a
11
+ * local act (a reduction: it only ever stops serving); `request_unlock` is a request the runtime surfaces and
12
+ * never grants. A manifest carrying any other kind is refused whole (`directive_unknown`) — never partly obeyed.
13
+ */
14
+ exports.DIRECTIVE_KINDS = new Set(["request_unlock", "disable"]);
15
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/protocol/types.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAsFH;;;;GAIG;AACU,QAAA,eAAe,GAAwB,IAAI,GAAG,CAAoB,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SDK_VERSION = exports.PROTOCOL_VERSION = void 0;
4
+ /** The protocol this SDK speaks (`protocol/VERSION`); the manifest carries it and the heartbeat reports it. */
5
+ exports.PROTOCOL_VERSION = "0.2.5";
6
+ /** This package's own version, as the heartbeat and store.json (S8: the writer) record it. */
7
+ exports.SDK_VERSION = "0.1.0";
8
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/protocol/version.ts"],"names":[],"mappings":";;;AAAA,+GAA+G;AAClG,QAAA,gBAAgB,GAAG,OAAO,CAAC;AACxC,8FAA8F;AACjF,QAAA,WAAW,GAAG,OAAO,CAAC"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ /**
3
+ * A bundle the customer loads, as a `ReleaseReader` (S10): `agent-runtime`
4
+ * on its own — no store, no daemon, no network — renders and assigns over
5
+ * it. The same chain as OTA runs before a byte is served: the bundle's key
6
+ * set must descend from the pinned root (or be it), and the manifest's
7
+ * signatures, scope, expiry and every payload hash must verify. There is
8
+ * no anti-rollback here because there is no stored generation; that is the
9
+ * slot store's rule (`agent-sync`).
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BundleRelease = void 0;
13
+ const apbundle_js_1 = require("../bundle/apbundle.js");
14
+ const trust_js_1 = require("../protocol/trust.js");
15
+ class BundleRelease {
16
+ release;
17
+ keySet;
18
+ notAfter;
19
+ kind = "bundle";
20
+ constructor(release,
21
+ /** The key set the bundle carried, once it verified against the pinned root: what a host pins next. */
22
+ keySet, notAfter) {
23
+ this.release = release;
24
+ this.keySet = keySet;
25
+ this.notAfter = notAfter;
26
+ }
27
+ /** Open, verify, and hold: `{ ok: false, reason }` names the first rule the bundle failed. */
28
+ static load(input) {
29
+ let contents;
30
+ try {
31
+ contents = (0, apbundle_js_1.openBundle)(input.bundle, { agentId: input.scope.agentId, target: input.scope.target }, input.distributionKey);
32
+ }
33
+ catch (error) {
34
+ const code = error.name === "BundleError" ? error.code : "malformed";
35
+ return { ok: false, reason: `bundle_${code}` };
36
+ }
37
+ let root = input.root;
38
+ const rootVerdict = (0, trust_js_1.verifyRootMetadata)({ candidate: contents.keySet, trusted: root, now: input.now });
39
+ if (rootVerdict.ok)
40
+ root = contents.keySet;
41
+ const payloads = (0, apbundle_js_1.bundlePayloadBytes)(contents);
42
+ const verdict = (0, trust_js_1.verifyManifest)({
43
+ manifest: contents.manifest,
44
+ root,
45
+ now: input.now,
46
+ scope: input.scope,
47
+ storedGeneration: 0,
48
+ payloads,
49
+ countersignRoot: input.countersignRoot ?? null,
50
+ ...(input.requireCountersign !== undefined ? { requireCountersign: input.requireCountersign } : {}),
51
+ });
52
+ if (!verdict.ok)
53
+ return { ok: false, reason: verdict.reason };
54
+ return { ok: true, release: new BundleRelease({ manifest: contents.manifest, generation: verdict.generation, payloads }, root, contents.notAfter) };
55
+ }
56
+ current() {
57
+ return this.release;
58
+ }
59
+ }
60
+ exports.BundleRelease = BundleRelease;
61
+ //# sourceMappingURL=bundleRelease.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundleRelease.js","sourceRoot":"","sources":["../../../src/release/bundleRelease.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,uDAA6F;AAC7F,mDAA0E;AAkB1E,MAAa,aAAa;IAGL;IAER;IACA;IALF,IAAI,GAAG,QAAiB,CAAC;IAClC,YACmB,OAAsB;IACvC,uGAAuG;IAC9F,MAAoB,EACpB,QAAgB;QAHR,YAAO,GAAP,OAAO,CAAe;QAE9B,WAAM,GAAN,MAAM,CAAc;QACpB,aAAQ,GAAR,QAAQ,CAAQ;IACxB,CAAC;IAEJ,8FAA8F;IAC9F,MAAM,CAAC,IAAI,CAAC,KAAyB;QACnC,IAAI,QAAwB,CAAC;QAC7B,IAAI,CAAC;YACH,QAAQ,GAAG,IAAA,wBAAU,EAAC,KAAK,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;QAC3H,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,GAAI,KAA0C,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAE,KAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;YACjI,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,IAAI,EAA0B,EAAE,CAAC;QACzE,CAAC;QACD,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACtB,MAAM,WAAW,GAAG,IAAA,6BAAkB,EAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QACtG,IAAI,WAAW,CAAC,EAAE;YAAE,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,IAAA,yBAAc,EAAC;YAC7B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,IAAI;YACJ,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,gBAAgB,EAAE,CAAC;YACnB,QAAQ;YACR,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,IAAI;YAC9C,GAAG,CAAC,KAAK,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpG,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,EAAE;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QAC9D,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,aAAa,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IACtJ,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAvCD,sCAuCC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ /**
3
+ * The seam between the packages (S10): a verified release as a runtime
4
+ * consumes it, and where one comes from. `@airprompter/agent-sync` produces
5
+ * a `LoadedRelease` from the encrypted slot store or a daemon;
6
+ * `@airprompter/agent-core` produces one from a bundle the customer loads
7
+ * (`loadBundleRelease`); `@airprompter/agent-runtime` renders and assigns
8
+ * over either without knowing which. Structural, never a class: two copies
9
+ * of a package in one lockfile must agree on it (S1, the discriminant rule).
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ //# sourceMappingURL=reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reader.js","sourceRoot":"","sources":["../../../src/release/reader.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ /**
3
+ * `runRef`: a compact, content-free token a customer keeps beside their own
4
+ * trace to attach feedback later. `agent·target·slot·versionId·arm·generation·bucket`,
5
+ * HMAC-signed with a per-store key so a forged ref cannot file signals
6
+ * against a version that was never run here. Carries no subject and no text.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.mintRunRef = mintRunRef;
10
+ exports.parseRunRef = parseRunRef;
11
+ const node_crypto_1 = require("node:crypto");
12
+ const SEP = "·";
13
+ function mintRunRef(facts, key) {
14
+ const body = [facts.agentId, facts.target, facts.tag, facts.versionId, facts.arm, String(facts.generation), facts.bucket === null ? "-" : String(facts.bucket)].join(SEP);
15
+ const mac = (0, node_crypto_1.createHmac)("sha256", key).update(body, "utf8").digest("base64url").slice(0, 22);
16
+ return `${Buffer.from(body, "utf8").toString("base64url")}.${mac}`;
17
+ }
18
+ function parseRunRef(token, key) {
19
+ const dot = token.lastIndexOf(".");
20
+ if (dot <= 0)
21
+ return null;
22
+ const body = Buffer.from(token.slice(0, dot), "base64url").toString("utf8");
23
+ const mac = token.slice(dot + 1);
24
+ const expected = (0, node_crypto_1.createHmac)("sha256", key).update(body, "utf8").digest("base64url").slice(0, 22);
25
+ if (mac.length !== expected.length || !(0, node_crypto_1.timingSafeEqual)(Buffer.from(mac), Buffer.from(expected)))
26
+ return null;
27
+ const parts = body.split(SEP);
28
+ if (parts.length !== 7)
29
+ return null;
30
+ const [agentId, target, tag, versionId, arm, generation, bucket] = parts;
31
+ return { agentId, target, tag, versionId, arm, generation: Number(generation), bucket: bucket === "-" ? null : Number(bucket) };
32
+ }
33
+ //# sourceMappingURL=runRef.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runRef.js","sourceRoot":"","sources":["../../../src/render/runRef.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAgBH,gCAIC;AAED,kCAWC;AA/BD,6CAA0D;AAY1D,MAAM,GAAG,GAAG,GAAG,CAAC;AAEhB,SAAgB,UAAU,CAAC,KAAkB,EAAE,GAAe;IAC5D,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1K,MAAM,GAAG,GAAG,IAAA,wBAAU,EAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5F,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,GAAG,EAAE,CAAC;AACrE,CAAC;AAED,SAAgB,WAAW,CAAC,KAAa,EAAE,GAAe;IACxD,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5E,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAA,wBAAU,EAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACjG,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAA,6BAAe,EAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7G,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,GAAG,KAAiE,CAAC;IACrI,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AAClI,CAAC"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ /**
3
+ * Rendering a slot's text with its declared variables.
4
+ *
5
+ * `{{name}}` placeholders are the only substitution. A variable declared
6
+ * `end_user` (D55) is never dropped into the text raw: it is wrapped in the
7
+ * delimiters declared for it — by default an XML-style element named after
8
+ * the variable — so the model sees where untrusted input starts and stops,
9
+ * and the assurance lens can find it. A missing required variable throws:
10
+ * that is the customer's bug and silence would ship a broken prompt.
11
+ * Sync and telemetry failures degrade; render contract failures throw.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.xmlDelimiters = exports.UnknownVariableError = exports.MissingVariableError = void 0;
15
+ exports.renderTemplate = renderTemplate;
16
+ class MissingVariableError extends Error {
17
+ tag;
18
+ missing;
19
+ constructor(tag, missing) {
20
+ super(`render ${tag}: missing required variable${missing.length > 1 ? "s" : ""} ${missing.join(", ")}`);
21
+ this.tag = tag;
22
+ this.missing = missing;
23
+ this.name = "MissingVariableError";
24
+ }
25
+ }
26
+ exports.MissingVariableError = MissingVariableError;
27
+ class UnknownVariableError extends Error {
28
+ tag;
29
+ unknown;
30
+ constructor(tag, unknown) {
31
+ super(`render ${tag}: variable${unknown.length > 1 ? "s" : ""} ${unknown.join(", ")} not declared on this slot`);
32
+ this.tag = tag;
33
+ this.unknown = unknown;
34
+ this.name = "UnknownVariableError";
35
+ }
36
+ }
37
+ exports.UnknownVariableError = UnknownVariableError;
38
+ /** `<name>…</name>`: visible to the model, easy to find in the text, and never confusable with `{{name}}`. */
39
+ exports.xmlDelimiters = {
40
+ open: (name) => `<${name}>`,
41
+ close: (name) => `</${name}>`,
42
+ };
43
+ const PLACEHOLDER = /\{\{\s*([a-zA-Z0-9_.-]{1,64})\s*\}\}/g;
44
+ function renderTemplate(input) {
45
+ const declared = new Map(input.variables.map((variable) => [variable.name, variable]));
46
+ const delimiters = input.delimiters ?? exports.xmlDelimiters;
47
+ const present = new Set(Object.entries(input.values).filter(([, value]) => value !== undefined && value !== null).map(([name]) => name));
48
+ const missing = input.variables.filter((variable) => variable.required && !present.has(variable.name)).map((variable) => variable.name);
49
+ if (missing.length)
50
+ throw new MissingVariableError(input.tag, missing);
51
+ if (input.strictVariables !== false) {
52
+ const unknown = [...present].filter((name) => !declared.has(name));
53
+ if (unknown.length)
54
+ throw new UnknownVariableError(input.tag, unknown);
55
+ }
56
+ return input.text.replace(PLACEHOLDER, (whole, name) => {
57
+ const variable = declared.get(name);
58
+ if (!variable)
59
+ return whole; // an undeclared placeholder in the text is left for the author to see
60
+ const value = input.values[name];
61
+ if (value === undefined || value === null)
62
+ return "";
63
+ const rendered = String(value);
64
+ // End-user text is fenced; a value that carries the closing fence cannot break out of it.
65
+ return variable.trust === "end_user" ? `${delimiters.open(name)}${escapeFence(rendered, delimiters.close(name))}${delimiters.close(name)}` : rendered;
66
+ });
67
+ }
68
+ function escapeFence(value, close) {
69
+ return close ? value.split(close).join(close.replace("<", "&lt;")) : value;
70
+ }
71
+ //# sourceMappingURL=template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/render/template.ts"],"names":[],"mappings":"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"}