@melra/runtime-core 0.3.0-alpha.17 → 0.3.0-alpha.19
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/README.md +1 -1
- package/dist/payload-cipher.d.ts +12 -0
- package/dist/payload-cipher.d.ts.map +1 -1
- package/dist/payload-cipher.js +15 -1
- package/dist/payload-cipher.js.map +1 -1
- package/dist/task-controller.d.ts +46 -7
- package/dist/task-controller.d.ts.map +1 -1
- package/dist/task-controller.js +311 -87
- package/dist/task-controller.js.map +1 -1
- package/dist/workflow-controller.d.ts +6 -0
- package/dist/workflow-controller.d.ts.map +1 -1
- package/dist/workflow-controller.js +31 -8
- package/dist/workflow-controller.js.map +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@ Verification decides success, not the adapter. A task reaches
|
|
|
18
18
|
`verified_success` only when the adapter succeeded *and* every declared evidence
|
|
19
19
|
predicate passed; an adapter that reported success with failing evidence is
|
|
20
20
|
`partial`, unless the only unmet evidence is a `semantic` question, which waits
|
|
21
|
-
in `waiting_user`
|
|
21
|
+
in `waiting_user` until `judge()` answers it, or settles closed at expiry (#54). Retries apply to `read` effects only — mutations and destructive
|
|
22
22
|
operations run at most once, because a retried delete is a second delete.
|
|
23
23
|
|
|
24
24
|
`WorkflowController` layers a bounded graph over that same pipeline. Nine node
|
package/dist/payload-cipher.d.ts
CHANGED
|
@@ -1,7 +1,19 @@
|
|
|
1
1
|
import { type EncryptedPayload } from "@melra/protocol";
|
|
2
|
+
/** What a record digest is for. Each one is keyed apart from the others. */
|
|
3
|
+
export type DigestPurpose = "action" | "render" | "input";
|
|
2
4
|
export declare class PayloadCipher {
|
|
3
5
|
private readonly key;
|
|
6
|
+
/** Derived, so the encryption key itself is never used as an HMAC key. */
|
|
7
|
+
private readonly digestKey;
|
|
4
8
|
constructor(key: Buffer);
|
|
9
|
+
/**
|
|
10
|
+
* A digest stored beside a redacted record: an HMAC under a key derived
|
|
11
|
+
* from this home's payload key, so it is checkable only by a holder of
|
|
12
|
+
* that key, who can open the sealed payload anyway. Labelled by purpose, so
|
|
13
|
+
* the same value digested for two purposes gives two unrelated digests.
|
|
14
|
+
* 64 lowercase hex, the shape a plain SHA-256 had.
|
|
15
|
+
*/
|
|
16
|
+
digest(value: unknown, purpose: DigestPurpose): string;
|
|
5
17
|
seal(value: unknown, context: string): EncryptedPayload;
|
|
6
18
|
open<T = unknown>(payload: EncryptedPayload, context: string): T;
|
|
7
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload-cipher.d.ts","sourceRoot":"","sources":["../src/payload-cipher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"payload-cipher.d.ts","sourceRoot":"","sources":["../src/payload-cipher.ts"],"names":[],"mappings":"AAUA,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,iBAAiB,CAAC;AAGzB,4EAA4E;AAC5E,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE1D,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,0EAA0E;IAC1E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,GAAG,EAAE,MAAM;IAOvB;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM;IAItD,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,gBAAgB;IAiBvD,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC;CAoBjE"}
|
package/dist/payload-cipher.js
CHANGED
|
@@ -1,14 +1,28 @@
|
|
|
1
1
|
// Copyright 2026 XAGI Labs Private Limited
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
import { createCipheriv, createDecipheriv, randomBytes, } from "node:crypto";
|
|
3
|
+
import { createCipheriv, createDecipheriv, createHmac, hkdfSync, randomBytes, } from "node:crypto";
|
|
4
4
|
import { EncryptedPayloadSchema, } from "@melra/protocol";
|
|
5
5
|
import { canonicalJson } from "@melra/receipt-schema";
|
|
6
6
|
export class PayloadCipher {
|
|
7
7
|
key;
|
|
8
|
+
/** Derived, so the encryption key itself is never used as an HMAC key. */
|
|
9
|
+
digestKey;
|
|
8
10
|
constructor(key) {
|
|
9
11
|
if (key.length !== 32)
|
|
10
12
|
throw new Error("payload_key_must_be_32_bytes");
|
|
11
13
|
this.key = Buffer.from(key);
|
|
14
|
+
// `v1` names the derivation, so a later one can sit beside it.
|
|
15
|
+
this.digestKey = Buffer.from(hkdfSync("sha256", this.key, Buffer.alloc(0), "melra:record-digest:v1", 32));
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* A digest stored beside a redacted record: an HMAC under a key derived
|
|
19
|
+
* from this home's payload key, so it is checkable only by a holder of
|
|
20
|
+
* that key, who can open the sealed payload anyway. Labelled by purpose, so
|
|
21
|
+
* the same value digested for two purposes gives two unrelated digests.
|
|
22
|
+
* 64 lowercase hex, the shape a plain SHA-256 had.
|
|
23
|
+
*/
|
|
24
|
+
digest(value, purpose) {
|
|
25
|
+
return createHmac("sha256", this.digestKey).update(`${purpose}\0${canonicalJson(value)}`).digest("hex");
|
|
12
26
|
}
|
|
13
27
|
seal(value, context) {
|
|
14
28
|
const iv = randomBytes(12);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload-cipher.js","sourceRoot":"","sources":["../src/payload-cipher.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,sCAAsC;AAEtC,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,sBAAsB,GAEvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"payload-cipher.js","sourceRoot":"","sources":["../src/payload-cipher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ApprovalDecision, ApprovalResponse, EffectContract, EvidencePredicate, Operation, PolicyDecision, TaskRecord, TaskRequest } from "@melra/protocol";
|
|
1
|
+
import type { ApprovalDecision, ApprovalResponse, EffectContract, EvidencePredicate, Identity, MelraTaskJudgeInput, Operation, PolicyDecision, Principal, TaskRecord, TaskRequest } from "@melra/protocol";
|
|
2
2
|
import { type CapabilityUsageReader, type LocalPolicy } from "@melra/policy-core";
|
|
3
3
|
import { type ActionReceipt, type EvidenceItem, type ExecutionCertificate } from "@melra/receipt-schema";
|
|
4
4
|
import { SqliteStore } from "@melra/storage-sqlite";
|
|
@@ -174,22 +174,55 @@ export declare class TaskController {
|
|
|
174
174
|
/**
|
|
175
175
|
* A waiting task whose judgements are past their `expiresAt` settles
|
|
176
176
|
* closed. Re-read and written in one transaction, so a peer settling the
|
|
177
|
-
* same task wins once.
|
|
177
|
+
* same task, or a verdict, wins once.
|
|
178
178
|
*
|
|
179
179
|
* ponytail: runs on the startup pass and the 30 s recovery sweep, so a wait
|
|
180
180
|
* can outlive its `expiresAt` by one interval, or until a runtime next opens
|
|
181
|
-
* this data directory
|
|
181
|
+
* this data directory. `judge` refuses a verdict from `expiresAt` on and
|
|
182
|
+
* writes nothing, so nothing is answered in that gap; every runtime runs
|
|
183
|
+
* this pass before it serves, `melra judge` included.
|
|
182
184
|
*/
|
|
183
185
|
private expireJudgements;
|
|
184
186
|
/**
|
|
185
187
|
* No answer is not a yes (#54). A task whose semantic question went
|
|
186
188
|
* unanswered, at expiry or cut off after its commit, settles closed: its
|
|
187
189
|
* effect ran, so a change is `recovery_required` (never `failed`) and a
|
|
188
|
-
* read is `partial`.
|
|
189
|
-
* certificate, replaced, carries the evidence of the task's last one, the
|
|
190
|
-
* live path's or the one recovery wrote.
|
|
190
|
+
* read is `partial`. A yes given before expiry stays on the certificate.
|
|
191
191
|
*/
|
|
192
192
|
private settleUnanswered;
|
|
193
|
+
/**
|
|
194
|
+
* Settles a semantic task. Nothing runs here, so it writes no receipt: the
|
|
195
|
+
* certificate, replaced, carries the evidence of the task's last one, the
|
|
196
|
+
* live path's or the one recovery wrote, with the answers given so far.
|
|
197
|
+
*/
|
|
198
|
+
private settleSemantic;
|
|
199
|
+
/**
|
|
200
|
+
* Records the answer to one semantic question of a waiting task (#54). The
|
|
201
|
+
* first verdict other than yes settles the task: no ends it `partial`,
|
|
202
|
+
* cannot_tell ends a change `recovery_required` and a read `partial`. The
|
|
203
|
+
* yes that answers the last open question verifies it; an earlier one is
|
|
204
|
+
* recorded, and the task waits on.
|
|
205
|
+
*
|
|
206
|
+
* A verdict writes the task row and nothing else, its certificate on a
|
|
207
|
+
* settle included: no receipt, grant draw, breaker record or idempotency
|
|
208
|
+
* commit, all of which the effect settled when it ran. Every check reads
|
|
209
|
+
* the row inside one transaction, and each refusal writes nothing, so a
|
|
210
|
+
* question is answered once, and a peer's verdict or the expiry sweep wins
|
|
211
|
+
* against this one at most once.
|
|
212
|
+
*
|
|
213
|
+
* `by` is the surface. An agent's declared identity is checked against the
|
|
214
|
+
* task's actor, with `client` the link its transport authenticated, if any;
|
|
215
|
+
* an operator's is not, as `decide` checks no approver. Only
|
|
216
|
+
* an operator in an enforced process, on a task that ran enforced, judges
|
|
217
|
+
* out of band, and an in-band verdict counts for nothing where approvals
|
|
218
|
+
* come only from an operator.
|
|
219
|
+
*/
|
|
220
|
+
judge(input: Omit<MelraTaskJudgeInput, "identity">, by: {
|
|
221
|
+
identity: Identity;
|
|
222
|
+
client?: Principal;
|
|
223
|
+
} | {
|
|
224
|
+
operator: string;
|
|
225
|
+
}): ExecutionResult;
|
|
193
226
|
private recoverTask;
|
|
194
227
|
/**
|
|
195
228
|
* What an approver is shown: the effect contract, minus the challenge and
|
|
@@ -198,12 +231,18 @@ export declare class TaskController {
|
|
|
198
231
|
* shown cannot run on that decision.
|
|
199
232
|
*/
|
|
200
233
|
private approvalRender;
|
|
234
|
+
/**
|
|
235
|
+
* The challenge as stored beside the redacted request: its digest keyed by
|
|
236
|
+
* this home's payload key, and the phrase still `APPROVE` plus that digest's
|
|
237
|
+
* first twelve hex digits, as clients read it.
|
|
238
|
+
*/
|
|
239
|
+
private keyedChallenge;
|
|
201
240
|
/** A pending challenge as an operator surface shows it. */
|
|
202
241
|
approvalView(taskId: string): {
|
|
203
242
|
contract: {
|
|
204
243
|
contractVersion: string;
|
|
205
244
|
taskId: string;
|
|
206
|
-
identity:
|
|
245
|
+
identity: Identity;
|
|
207
246
|
capability: string;
|
|
208
247
|
operation: Operation;
|
|
209
248
|
effect: import("@melra/protocol").Effect;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-controller.d.ts","sourceRoot":"","sources":["../src/task-controller.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"task-controller.d.ts","sourceRoot":"","sources":["../src/task-controller.ts"],"names":[],"mappings":"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"}
|