@agent-teams/repository-mutation 0.0.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 +5 -0
- package/LICENSE +201 -0
- package/README.md +10 -0
- package/dist/canonical-json.d.ts +12 -0
- package/dist/canonical-json.d.ts.map +1 -0
- package/dist/canonical-json.js +137 -0
- package/dist/canonical-json.js.map +1 -0
- package/dist/errors.d.ts +6 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +9 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/installed-artifact-identity.d.ts +15 -0
- package/dist/installed-artifact-identity.d.ts.map +1 -0
- package/dist/installed-artifact-identity.js +127 -0
- package/dist/installed-artifact-identity.js.map +1 -0
- package/dist/node.d.ts +29 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +19 -0
- package/dist/node.js.map +1 -0
- package/dist/package-version.d.ts +3 -0
- package/dist/package-version.d.ts.map +1 -0
- package/dist/package-version.js +11 -0
- package/dist/package-version.js.map +1 -0
- package/dist/qualification/index.d.ts +24 -0
- package/dist/qualification/index.d.ts.map +1 -0
- package/dist/qualification/index.js +11 -0
- package/dist/qualification/index.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-absent-file-publication-private.d.ts +19 -0
- package/dist/repository-mutation/adapters/node/node-absent-file-publication-private.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-absent-file-publication-private.js +74 -0
- package/dist/repository-mutation/adapters/node/node-absent-file-publication-private.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-absent-file-publication.d.ts +35 -0
- package/dist/repository-mutation/adapters/node/node-absent-file-publication.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-absent-file-publication.js +181 -0
- package/dist/repository-mutation/adapters/node/node-absent-file-publication.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-bounded-regular-file.d.ts +23 -0
- package/dist/repository-mutation/adapters/node/node-bounded-regular-file.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-bounded-regular-file.js +134 -0
- package/dist/repository-mutation/adapters/node/node-bounded-regular-file.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-cleanup-owned-temporary.d.ts +26 -0
- package/dist/repository-mutation/adapters/node/node-cleanup-owned-temporary.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-cleanup-owned-temporary.js +172 -0
- package/dist/repository-mutation/adapters/node/node-cleanup-owned-temporary.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-create-and-bind-directory.d.ts +14 -0
- package/dist/repository-mutation/adapters/node/node-create-and-bind-directory.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-create-and-bind-directory.js +23 -0
- package/dist/repository-mutation/adapters/node/node-create-and-bind-directory.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-directory-durability.d.ts +17 -0
- package/dist/repository-mutation/adapters/node/node-directory-durability.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-directory-durability.js +47 -0
- package/dist/repository-mutation/adapters/node/node-directory-durability.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-directory-materialization.d.ts +37 -0
- package/dist/repository-mutation/adapters/node/node-directory-materialization.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-directory-materialization.js +244 -0
- package/dist/repository-mutation/adapters/node/node-directory-materialization.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-existing-repository-ancestors.d.ts +13 -0
- package/dist/repository-mutation/adapters/node/node-existing-repository-ancestors.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-existing-repository-ancestors.js +67 -0
- package/dist/repository-mutation/adapters/node/node-existing-repository-ancestors.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-apply-effects.d.ts +84 -0
- package/dist/repository-mutation/adapters/node/node-known-file-apply-effects.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-apply-effects.js +232 -0
- package/dist/repository-mutation/adapters/node/node-known-file-apply-effects.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-apply-faults.d.ts +9 -0
- package/dist/repository-mutation/adapters/node/node-known-file-apply-faults.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-apply-faults.js +2 -0
- package/dist/repository-mutation/adapters/node/node-known-file-apply-faults.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-apply-observation.d.ts +6 -0
- package/dist/repository-mutation/adapters/node/node-known-file-apply-observation.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-apply-observation.js +30 -0
- package/dist/repository-mutation/adapters/node/node-known-file-apply-observation.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-apply-operation.d.ts +11 -0
- package/dist/repository-mutation/adapters/node/node-known-file-apply-operation.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-apply-operation.js +159 -0
- package/dist/repository-mutation/adapters/node/node-known-file-apply-operation.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-apply-state.d.ts +9 -0
- package/dist/repository-mutation/adapters/node/node-known-file-apply-state.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-apply-state.js +22 -0
- package/dist/repository-mutation/adapters/node/node-known-file-apply-state.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-cleanup.d.ts +9 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-cleanup.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-cleanup.js +203 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-cleanup.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-executor.d.ts +17 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-executor.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-executor.js +22 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-executor.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-filesystem.d.ts +28 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-filesystem.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-filesystem.js +213 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-filesystem.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-observation.d.ts +15 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-observation.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-observation.js +51 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-observation.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage-captured-cleanup.d.ts +29 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage-captured-cleanup.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage-captured-cleanup.js +72 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage-captured-cleanup.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage-captured.d.ts +31 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage-captured.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage-captured.js +254 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage-captured.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage.d.ts +13 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage.js +210 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-retirement.d.ts +15 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-retirement.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-retirement.js +181 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-retirement.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-state.d.ts +12 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-state.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-state.js +18 -0
- package/dist/repository-mutation/adapters/node/node-known-file-recovery-state.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction-filesystem.d.ts +25 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction-filesystem.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction-filesystem.js +150 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction-filesystem.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction-inspection.d.ts +12 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction-inspection.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction-inspection.js +56 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction-inspection.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction-journal-store.d.ts +22 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction-journal-store.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction-journal-store.js +246 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction-journal-store.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction-lease-release.d.ts +21 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction-lease-release.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction-lease-release.js +34 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction-lease-release.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction-receipt.d.ts +4 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction-receipt.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction-receipt.js +43 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction-receipt.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction-recovery.d.ts +14 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction-recovery.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction-recovery.js +109 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction-recovery.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction.d.ts +21 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction.js +215 -0
- package/dist/repository-mutation/adapters/node/node-known-file-transaction.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-prepare-exact-sibling-temporary.d.ts +18 -0
- package/dist/repository-mutation/adapters/node/node-prepare-exact-sibling-temporary.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-prepare-exact-sibling-temporary.js +30 -0
- package/dist/repository-mutation/adapters/node/node-prepare-exact-sibling-temporary.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-publish-prepared-absent-file.d.ts +31 -0
- package/dist/repository-mutation/adapters/node/node-publish-prepared-absent-file.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-publish-prepared-absent-file.js +50 -0
- package/dist/repository-mutation/adapters/node/node-publish-prepared-absent-file.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-repository-path.d.ts +2 -0
- package/dist/repository-mutation/adapters/node/node-repository-path.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-repository-path.js +7 -0
- package/dist/repository-mutation/adapters/node/node-repository-path.js.map +1 -0
- package/dist/repository-mutation/adapters/node/node-terminal-evidence-directory.d.ts +21 -0
- package/dist/repository-mutation/adapters/node/node-terminal-evidence-directory.d.ts.map +1 -0
- package/dist/repository-mutation/adapters/node/node-terminal-evidence-directory.js +59 -0
- package/dist/repository-mutation/adapters/node/node-terminal-evidence-directory.js.map +1 -0
- package/dist/repository-mutation/application/model/directory-materialization.d.ts +35 -0
- package/dist/repository-mutation/application/model/directory-materialization.d.ts.map +1 -0
- package/dist/repository-mutation/application/model/directory-materialization.js +11 -0
- package/dist/repository-mutation/application/model/directory-materialization.js.map +1 -0
- package/dist/repository-mutation/application/model/exact-postimage.d.ts +17 -0
- package/dist/repository-mutation/application/model/exact-postimage.d.ts.map +1 -0
- package/dist/repository-mutation/application/model/exact-postimage.js +11 -0
- package/dist/repository-mutation/application/model/exact-postimage.js.map +1 -0
- package/dist/repository-mutation/application/model/known-file-transaction-journal.d.ts +69 -0
- package/dist/repository-mutation/application/model/known-file-transaction-journal.d.ts.map +1 -0
- package/dist/repository-mutation/application/model/known-file-transaction-journal.js +15 -0
- package/dist/repository-mutation/application/model/known-file-transaction-journal.js.map +1 -0
- package/dist/repository-mutation/application/model/known-file-transaction.d.ts +64 -0
- package/dist/repository-mutation/application/model/known-file-transaction.d.ts.map +1 -0
- package/dist/repository-mutation/application/model/known-file-transaction.js +2 -0
- package/dist/repository-mutation/application/model/known-file-transaction.js.map +1 -0
- package/dist/repository-mutation/application/model/path-identity.d.ts +7 -0
- package/dist/repository-mutation/application/model/path-identity.d.ts.map +1 -0
- package/dist/repository-mutation/application/model/path-identity.js +2 -0
- package/dist/repository-mutation/application/model/path-identity.js.map +1 -0
- package/dist/repository-mutation/application/model/repository-path.d.ts +8 -0
- package/dist/repository-mutation/application/model/repository-path.d.ts.map +1 -0
- package/dist/repository-mutation/application/model/repository-path.js +74 -0
- package/dist/repository-mutation/application/model/repository-path.js.map +1 -0
- package/dist/repository-mutation/application/policies/classify-known-file-recovery-transition.d.ts +33 -0
- package/dist/repository-mutation/application/policies/classify-known-file-recovery-transition.d.ts.map +1 -0
- package/dist/repository-mutation/application/policies/classify-known-file-recovery-transition.js +21 -0
- package/dist/repository-mutation/application/policies/classify-known-file-recovery-transition.js.map +1 -0
- package/dist/repository-mutation/application/policies/known-file-transaction-envelope.d.ts +9 -0
- package/dist/repository-mutation/application/policies/known-file-transaction-envelope.d.ts.map +1 -0
- package/dist/repository-mutation/application/policies/known-file-transaction-envelope.js +214 -0
- package/dist/repository-mutation/application/policies/known-file-transaction-envelope.js.map +1 -0
- package/dist/repository-mutation/application/policies/known-file-transaction-plan.d.ts +7 -0
- package/dist/repository-mutation/application/policies/known-file-transaction-plan.d.ts.map +1 -0
- package/dist/repository-mutation/application/policies/known-file-transaction-plan.js +253 -0
- package/dist/repository-mutation/application/policies/known-file-transaction-plan.js.map +1 -0
- package/dist/repository-mutation/application/ports/owned-temporary-cleanup-transition.d.ts +7 -0
- package/dist/repository-mutation/application/ports/owned-temporary-cleanup-transition.d.ts.map +1 -0
- package/dist/repository-mutation/application/ports/owned-temporary-cleanup-transition.js +2 -0
- package/dist/repository-mutation/application/ports/owned-temporary-cleanup-transition.js.map +1 -0
- package/dist/repository-mutation-envelope.d.ts +32 -0
- package/dist/repository-mutation-envelope.d.ts.map +1 -0
- package/dist/repository-mutation-envelope.js +292 -0
- package/dist/repository-mutation-envelope.js.map +1 -0
- package/dist/state-contract.d.ts +6 -0
- package/dist/state-contract.d.ts.map +1 -0
- package/dist/state-contract.js +6 -0
- package/dist/state-contract.js.map +1 -0
- package/dist/strict-json.d.ts +7 -0
- package/dist/strict-json.d.ts.map +1 -0
- package/dist/strict-json.js +131 -0
- package/dist/strict-json.js.map +1 -0
- package/dist/transaction-coordination/adapters/node/node-journal-slot-evidence.d.ts +29 -0
- package/dist/transaction-coordination/adapters/node/node-journal-slot-evidence.d.ts.map +1 -0
- package/dist/transaction-coordination/adapters/node/node-journal-slot-evidence.js +139 -0
- package/dist/transaction-coordination/adapters/node/node-journal-slot-evidence.js.map +1 -0
- package/dist/transaction-coordination/adapters/node/node-journal-slot-profile.d.ts +151 -0
- package/dist/transaction-coordination/adapters/node/node-journal-slot-profile.d.ts.map +1 -0
- package/dist/transaction-coordination/adapters/node/node-journal-slot-profile.js +29 -0
- package/dist/transaction-coordination/adapters/node/node-journal-slot-profile.js.map +1 -0
- package/dist/transaction-coordination/adapters/node/node-journal-slot-store.d.ts +25 -0
- package/dist/transaction-coordination/adapters/node/node-journal-slot-store.d.ts.map +1 -0
- package/dist/transaction-coordination/adapters/node/node-journal-slot-store.js +303 -0
- package/dist/transaction-coordination/adapters/node/node-journal-slot-store.js.map +1 -0
- package/dist/transaction-coordination/adapters/node/node-operation-lock.d.ts +16 -0
- package/dist/transaction-coordination/adapters/node/node-operation-lock.d.ts.map +1 -0
- package/dist/transaction-coordination/adapters/node/node-operation-lock.js +359 -0
- package/dist/transaction-coordination/adapters/node/node-operation-lock.js.map +1 -0
- package/dist/transaction-coordination/adapters/node/node-state-directory.d.ts +11 -0
- package/dist/transaction-coordination/adapters/node/node-state-directory.d.ts.map +1 -0
- package/dist/transaction-coordination/adapters/node/node-state-directory.js +91 -0
- package/dist/transaction-coordination/adapters/node/node-state-directory.js.map +1 -0
- package/dist/transaction-coordination/mutation-lease.d.ts +38 -0
- package/dist/transaction-coordination/mutation-lease.d.ts.map +1 -0
- package/dist/transaction-coordination/mutation-lease.js +351 -0
- package/dist/transaction-coordination/mutation-lease.js.map +1 -0
- package/package.json +52 -0
- package/schemas/known-file-transaction-plan/v1.schema.json +65 -0
- package/schemas/known-file-transaction-receipt/v1.schema.json +36 -0
- package/schemas/repository-mutation-transaction-envelope/v1.schema.json +46 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { canonicalJson } from "../../../canonical-json.js";
|
|
2
|
+
import { compileRepositoryMutationEnvelope, parseRepositoryMutationEnvelope } from "../../../repository-mutation-envelope.js";
|
|
3
|
+
import { deserializeKnownFileIdentity } from "../model/known-file-transaction-journal.js";
|
|
4
|
+
import { portableRepositoryPathProblem } from "../model/repository-path.js";
|
|
5
|
+
import { assertKnownFileTransactionPlan } from "./known-file-transaction-plan.js";
|
|
6
|
+
const POSITIVE_INTEGER = /^[1-9][0-9]*$/u;
|
|
7
|
+
class KnownFileTransactionEnvelopeError extends Error {
|
|
8
|
+
constructor(message, options) {
|
|
9
|
+
super(message, options);
|
|
10
|
+
this.name = "KnownFileTransactionEnvelopeError";
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function record(value, subject) {
|
|
14
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
15
|
+
throw new KnownFileTransactionEnvelopeError(`${subject} is invalid.`);
|
|
16
|
+
}
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
function exactKeys(value, keys, subject) {
|
|
20
|
+
if (Object.keys(value).toSorted().join(",") !== [...keys].toSorted().join(",")) {
|
|
21
|
+
throw new KnownFileTransactionEnvelopeError(`${subject} has unknown or missing fields.`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function assertIdentity(value, subject) {
|
|
25
|
+
const identity = record(value, subject);
|
|
26
|
+
exactKeys(identity, ["birthtimeNs", "dev", "ino"], subject);
|
|
27
|
+
for (const field of ["birthtimeNs", "dev", "ino"]) {
|
|
28
|
+
if (!POSITIVE_INTEGER.test(String(identity[field]))) {
|
|
29
|
+
throw new KnownFileTransactionEnvelopeError(`${subject}.${field} is invalid.`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
deserializeKnownFileIdentity(identity);
|
|
33
|
+
}
|
|
34
|
+
function journalOperationKeys(operation, withTemporary) {
|
|
35
|
+
if (!withTemporary) {
|
|
36
|
+
return operation["matchedPreimage"] === undefined
|
|
37
|
+
? ["path", "state"]
|
|
38
|
+
: ["matchedPreimage", "path", "state"];
|
|
39
|
+
}
|
|
40
|
+
return [
|
|
41
|
+
...(operation["matchedPreimage"] === undefined ? [] : ["matchedPreimage"]),
|
|
42
|
+
"path",
|
|
43
|
+
...(operation["rollbackTemporaryIdentity"] === undefined
|
|
44
|
+
? []
|
|
45
|
+
: ["rollbackTemporaryIdentity"]),
|
|
46
|
+
...(operation["captureDirectoryIdentity"] === undefined
|
|
47
|
+
? []
|
|
48
|
+
: ["captureDirectoryIdentity"]),
|
|
49
|
+
...(operation["capturedPreimageIdentity"] === undefined
|
|
50
|
+
? []
|
|
51
|
+
: ["capturedPreimageIdentity"]),
|
|
52
|
+
...(operation["retirement"] === undefined ? [] : ["retirement"]),
|
|
53
|
+
"state",
|
|
54
|
+
"temporaryIdentity"
|
|
55
|
+
];
|
|
56
|
+
}
|
|
57
|
+
function assertJournalOperationIdentities(options) {
|
|
58
|
+
const subject = `Known-file journal operation ${options.index}`;
|
|
59
|
+
assertIdentity(options.operation["temporaryIdentity"], `${subject} temporary identity`);
|
|
60
|
+
if (options.operation["rollbackTemporaryIdentity"] !== undefined) {
|
|
61
|
+
if (options.precondition?.state !== "known-file") {
|
|
62
|
+
throw new KnownFileTransactionEnvelopeError(`${subject} rollback identity is invalid.`);
|
|
63
|
+
}
|
|
64
|
+
assertIdentity(options.operation["rollbackTemporaryIdentity"], `${subject} rollback temporary identity`);
|
|
65
|
+
}
|
|
66
|
+
if (options.operation["captureDirectoryIdentity"] !== undefined) {
|
|
67
|
+
if (options.precondition?.state !== "known-file") {
|
|
68
|
+
throw new KnownFileTransactionEnvelopeError(`${subject} capture directory identity is invalid.`);
|
|
69
|
+
}
|
|
70
|
+
assertIdentity(options.operation["captureDirectoryIdentity"], `${subject} capture directory identity`);
|
|
71
|
+
}
|
|
72
|
+
if (options.operation["capturedPreimageIdentity"] !== undefined) {
|
|
73
|
+
if (options.precondition?.state !== "known-file" ||
|
|
74
|
+
options.operation["captureDirectoryIdentity"] === undefined ||
|
|
75
|
+
!["preimage-captured", "destination-retired", "publishing", "published", "rollback-restored"].includes(String(options.state))) {
|
|
76
|
+
throw new KnownFileTransactionEnvelopeError(`${subject} captured preimage identity is invalid.`);
|
|
77
|
+
}
|
|
78
|
+
assertIdentity(options.operation["capturedPreimageIdentity"], `${subject} captured preimage identity`);
|
|
79
|
+
}
|
|
80
|
+
if (options.operation["retirement"] !== undefined) {
|
|
81
|
+
const retirement = record(options.operation["retirement"], `${subject} retirement`);
|
|
82
|
+
exactKeys(retirement, ["directoryIdentity", "kind", "pathIdentity", "state"], `${subject} retirement`);
|
|
83
|
+
if (!["destination", "rollback-temporary", "temporary"].includes(String(retirement["kind"])) ||
|
|
84
|
+
!["ready", "captured", "unlink-authorized"].includes(String(retirement["state"]))) {
|
|
85
|
+
throw new KnownFileTransactionEnvelopeError(`${subject} retirement transition is invalid.`);
|
|
86
|
+
}
|
|
87
|
+
assertIdentity(retirement["directoryIdentity"], `${subject} retirement directory identity`);
|
|
88
|
+
assertIdentity(retirement["pathIdentity"], `${subject} retirement path identity`);
|
|
89
|
+
}
|
|
90
|
+
if (["capture-ready", "preimage-captured", "destination-retired"].includes(String(options.state)) &&
|
|
91
|
+
options.operation["captureDirectoryIdentity"] === undefined) {
|
|
92
|
+
throw new KnownFileTransactionEnvelopeError(`${subject} lacks capture directory identity.`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function assertJournalOperation(candidate, index, plan) {
|
|
96
|
+
const operation = record(candidate, `Known-file journal operation ${index}`);
|
|
97
|
+
const state = operation["state"];
|
|
98
|
+
const withTemporary = [
|
|
99
|
+
"temporary-ready", "capture-authorized", "capture-ready", "preimage-captured",
|
|
100
|
+
"destination-retired", "publishing", "published", "rollback-restored"
|
|
101
|
+
].includes(String(state));
|
|
102
|
+
exactKeys(operation, journalOperationKeys(operation, withTemporary), `Known-file journal operation ${index}`);
|
|
103
|
+
if (operation["path"] !== plan.operations[index]?.path ||
|
|
104
|
+
![
|
|
105
|
+
"already-satisfied", "pending", "temporary-authorized", "temporary-ready", "capture-authorized", "capture-ready",
|
|
106
|
+
"preimage-captured", "destination-retired", "publishing", "published", "rollback-restored"
|
|
107
|
+
].includes(String(state))) {
|
|
108
|
+
throw new KnownFileTransactionEnvelopeError(`Known-file journal operation ${index} is invalid.`);
|
|
109
|
+
}
|
|
110
|
+
const matched = operation["matchedPreimage"];
|
|
111
|
+
const precondition = plan.operations[index]?.precondition;
|
|
112
|
+
if (matched !== undefined &&
|
|
113
|
+
(!Number.isSafeInteger(matched) || matched < 0 ||
|
|
114
|
+
precondition?.state !== "known-file" || matched >= precondition.acceptedPreimages.length)) {
|
|
115
|
+
throw new KnownFileTransactionEnvelopeError(`Known-file journal operation ${index} preimage binding is invalid.`);
|
|
116
|
+
}
|
|
117
|
+
if (withTemporary) {
|
|
118
|
+
assertJournalOperationIdentities({ index, operation, precondition, state });
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
function permittedParentDirectories(plan) {
|
|
122
|
+
const permitted = new Set();
|
|
123
|
+
for (const operation of plan.operations) {
|
|
124
|
+
const segments = operation.path.split("/");
|
|
125
|
+
segments.pop();
|
|
126
|
+
for (let count = 1; count <= segments.length; count += 1) {
|
|
127
|
+
permitted.add(segments.slice(0, count).join("/"));
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return permitted;
|
|
131
|
+
}
|
|
132
|
+
function assertCreatedDirectories(value, plan) {
|
|
133
|
+
if (!Array.isArray(value) || value.length > 128) {
|
|
134
|
+
throw new KnownFileTransactionEnvelopeError("Known-file created-directory evidence is invalid.");
|
|
135
|
+
}
|
|
136
|
+
const permitted = permittedParentDirectories(plan);
|
|
137
|
+
const paths = [];
|
|
138
|
+
for (const [index, candidate] of value.entries()) {
|
|
139
|
+
const directory = record(candidate, `Known-file created directory ${index}`);
|
|
140
|
+
exactKeys(directory, ["identity", "path"], `Known-file created directory ${index}`);
|
|
141
|
+
if (typeof directory["path"] !== "string" ||
|
|
142
|
+
portableRepositoryPathProblem(directory["path"]) !== undefined ||
|
|
143
|
+
directory["path"].normalize("NFC") !== directory["path"] ||
|
|
144
|
+
!permitted.has(directory["path"])) {
|
|
145
|
+
throw new KnownFileTransactionEnvelopeError(`Known-file created directory ${index} path is invalid.`);
|
|
146
|
+
}
|
|
147
|
+
assertIdentity(directory["identity"], `Known-file created directory ${index} identity`);
|
|
148
|
+
paths.push(directory["path"]);
|
|
149
|
+
}
|
|
150
|
+
if (new Set(paths).size !== paths.length) {
|
|
151
|
+
throw new KnownFileTransactionEnvelopeError("Known-file created-directory evidence contains duplicates.");
|
|
152
|
+
}
|
|
153
|
+
return paths;
|
|
154
|
+
}
|
|
155
|
+
function assertJournal(value) {
|
|
156
|
+
const journal = record(value, "Known-file transaction journal");
|
|
157
|
+
exactKeys(journal, ["authorizedDirectories", "createdDirectories", "operations", "plan", "schemaVersion"], "Known-file transaction journal");
|
|
158
|
+
if (journal["schemaVersion"] !== 1) {
|
|
159
|
+
throw new KnownFileTransactionEnvelopeError("Known-file transaction journal version is unsupported.");
|
|
160
|
+
}
|
|
161
|
+
assertKnownFileTransactionPlan(journal["plan"]);
|
|
162
|
+
const plan = journal["plan"];
|
|
163
|
+
if (!Array.isArray(journal["operations"]) || journal["operations"].length !== plan.operations.length) {
|
|
164
|
+
throw new KnownFileTransactionEnvelopeError("Known-file transaction journal operations do not bind the Plan.");
|
|
165
|
+
}
|
|
166
|
+
journal["operations"].forEach((candidate, index) => {
|
|
167
|
+
assertJournalOperation(candidate, index, plan);
|
|
168
|
+
});
|
|
169
|
+
const createdPaths = assertCreatedDirectories(journal["createdDirectories"], plan);
|
|
170
|
+
const authorizedDirectories = journal["authorizedDirectories"];
|
|
171
|
+
if (!Array.isArray(authorizedDirectories) || authorizedDirectories.length > 128 ||
|
|
172
|
+
authorizedDirectories.some((path) => typeof path !== "string" ||
|
|
173
|
+
portableRepositoryPathProblem(path) !== undefined || path.normalize("NFC") !== path ||
|
|
174
|
+
!permittedParentDirectories(plan).has(path)) ||
|
|
175
|
+
new Set(authorizedDirectories).size !== authorizedDirectories.length ||
|
|
176
|
+
authorizedDirectories.some((path) => createdPaths.includes(path))) {
|
|
177
|
+
throw new KnownFileTransactionEnvelopeError("Known-file authorized-directory evidence is invalid.");
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
export function compileKnownFileTransactionEnvelope(input) {
|
|
181
|
+
assertJournal(input.journal);
|
|
182
|
+
return compileRepositoryMutationEnvelope({
|
|
183
|
+
operationKind: "known-file-transaction",
|
|
184
|
+
recoveryHandler: {
|
|
185
|
+
id: "agent-teams.repository-mutation.known-file/v1",
|
|
186
|
+
contractVersion: 1
|
|
187
|
+
},
|
|
188
|
+
ownerArtifact: input.ownerArtifact,
|
|
189
|
+
kernelArtifact: input.kernelArtifact,
|
|
190
|
+
adapterContractVersion: 1,
|
|
191
|
+
payloadKind: "agent-teams.repository-mutation.known-file-journal/v1",
|
|
192
|
+
state: input.state,
|
|
193
|
+
payload: input.journal
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
export function assertKnownFileTransactionEnvelope(value) {
|
|
197
|
+
let envelope;
|
|
198
|
+
try {
|
|
199
|
+
envelope = parseRepositoryMutationEnvelope(Buffer.from(canonicalJson(value), "utf8"));
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
throw new KnownFileTransactionEnvelopeError("Known-file transaction envelope is noncanonical or tampered.", { cause: error });
|
|
203
|
+
}
|
|
204
|
+
if (envelope.operationKind !== "known-file-transaction" ||
|
|
205
|
+
envelope.adapterContractVersion !== 1 ||
|
|
206
|
+
envelope.payloadKind !== "agent-teams.repository-mutation.known-file-journal/v1" ||
|
|
207
|
+
!["APPLYING", "COMMITTED"].includes(envelope.state) ||
|
|
208
|
+
envelope.recoveryHandler.id !== "agent-teams.repository-mutation.known-file/v1" ||
|
|
209
|
+
envelope.recoveryHandler.contractVersion !== 1) {
|
|
210
|
+
throw new KnownFileTransactionEnvelopeError("Known-file transaction envelope binding is invalid.");
|
|
211
|
+
}
|
|
212
|
+
assertJournal(envelope.payload);
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=known-file-transaction-envelope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"known-file-transaction-envelope.js","sourceRoot":"","sources":["../../../../src/repository-mutation/application/policies/known-file-transaction-envelope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { CompileKnownFileTransactionPlanInput, KnownFileTransactionPlanV1 } from "../model/known-file-transaction.js";
|
|
2
|
+
export declare class KnownFileTransactionPlanError extends Error {
|
|
3
|
+
constructor(message: string);
|
|
4
|
+
}
|
|
5
|
+
export declare function compileKnownFileTransactionPlan(input: CompileKnownFileTransactionPlanInput): KnownFileTransactionPlanV1;
|
|
6
|
+
export declare function assertKnownFileTransactionPlan(value: unknown): asserts value is KnownFileTransactionPlanV1;
|
|
7
|
+
//# sourceMappingURL=known-file-transaction-plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"known-file-transaction-plan.d.ts","sourceRoot":"","sources":["../../../../src/repository-mutation/application/policies/known-file-transaction-plan.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,oCAAoC,EAIpC,0BAA0B,EAC3B,MAAM,oCAAoC,CAAC;AAc5C,qBAAa,6BAA8B,SAAQ,KAAK;IACtD,YAAmB,OAAO,EAAE,MAAM,EAGjC;CACF;AA2KD,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,oCAAoC,GAC1C,0BAA0B,CA+C5B;AAED,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,KAAK,IAAI,0BAA0B,CAuD7C"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
import { canonicalJson, sha256Bytes, sha256Json } from "../../../canonical-json.js";
|
|
2
|
+
import { findPortableRepositoryPathCollision, portableRepositoryPathProblem } from "../model/repository-path.js";
|
|
3
|
+
const MAXIMUM_OPERATION_COUNT = 32;
|
|
4
|
+
const MAXIMUM_FILE_BYTES = 8 * 1024 * 1024;
|
|
5
|
+
// Keep the canonical Base64 journal comfortably below its separate 32 MiB
|
|
6
|
+
// serialized limit. Raw transaction evidence expands by at least 4/3.
|
|
7
|
+
const MAXIMUM_TRANSACTION_BYTES = 16 * 1024 * 1024;
|
|
8
|
+
const MAXIMUM_BASE64_FILE_LENGTH = 4 * Math.ceil(MAXIMUM_FILE_BYTES / 3);
|
|
9
|
+
const SHA256 = /^sha256:[0-9a-f]{64}$/u;
|
|
10
|
+
export class KnownFileTransactionPlanError extends Error {
|
|
11
|
+
constructor(message) {
|
|
12
|
+
super(message);
|
|
13
|
+
this.name = "KnownFileTransactionPlanError";
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function binaryCompare(left, right) {
|
|
17
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
18
|
+
}
|
|
19
|
+
function assertInertInputGraph(value, subject, depth = 0) {
|
|
20
|
+
if (depth > 8) {
|
|
21
|
+
throw new KnownFileTransactionPlanError(`${subject} is too deeply nested.`);
|
|
22
|
+
}
|
|
23
|
+
if (value instanceof Uint8Array || value === null || typeof value !== "object") {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (!Array.isArray(value) && ![Object.prototype, null].includes(Object.getPrototypeOf(value))) {
|
|
27
|
+
throw new KnownFileTransactionPlanError(`${subject} must contain only plain data.`);
|
|
28
|
+
}
|
|
29
|
+
const keys = Reflect.ownKeys(value);
|
|
30
|
+
for (const key of keys) {
|
|
31
|
+
if (typeof key !== "string" || (Array.isArray(value) && key === "length")) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
35
|
+
if (descriptor === undefined || !("value" in descriptor) || !descriptor.enumerable) {
|
|
36
|
+
throw new KnownFileTransactionPlanError(`${subject} must contain only enumerable data properties.`);
|
|
37
|
+
}
|
|
38
|
+
assertInertInputGraph(descriptor.value, subject, depth + 1);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function inertInputOperations(input) {
|
|
42
|
+
if (typeof input !== "object" || input === null || Array.isArray(input) ||
|
|
43
|
+
![Object.prototype, null].includes(Object.getPrototypeOf(input)) ||
|
|
44
|
+
Reflect.ownKeys(input).length !== 1) {
|
|
45
|
+
throw new KnownFileTransactionPlanError("Known-file transaction input is not one plain operations record.");
|
|
46
|
+
}
|
|
47
|
+
const descriptor = Object.getOwnPropertyDescriptor(input, "operations");
|
|
48
|
+
if (descriptor === undefined || !("value" in descriptor) || !descriptor.enumerable ||
|
|
49
|
+
!Array.isArray(descriptor.value) || descriptor.value.length > MAXIMUM_OPERATION_COUNT) {
|
|
50
|
+
throw new KnownFileTransactionPlanError(`A transaction supports at most ${MAXIMUM_OPERATION_COUNT} operations.`);
|
|
51
|
+
}
|
|
52
|
+
assertInertInputGraph(descriptor.value, "Known-file transaction operations");
|
|
53
|
+
return descriptor.value;
|
|
54
|
+
}
|
|
55
|
+
function assertMode(mode, subject) {
|
|
56
|
+
if (!Number.isSafeInteger(mode) || mode < 0 || mode > 0o777) {
|
|
57
|
+
throw new KnownFileTransactionPlanError(`${subject} mode must be one portable permission value.`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function assertBytes(bytes, subject) {
|
|
61
|
+
if (!(bytes instanceof Uint8Array)) {
|
|
62
|
+
throw new KnownFileTransactionPlanError(`${subject} bytes must be Uint8Array.`);
|
|
63
|
+
}
|
|
64
|
+
if (bytes.byteLength > MAXIMUM_FILE_BYTES) {
|
|
65
|
+
throw new KnownFileTransactionPlanError(`${subject} exceeds the ${MAXIMUM_FILE_BYTES} byte limit.`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function image(bytes, mode, subject) {
|
|
69
|
+
assertBytes(bytes, subject);
|
|
70
|
+
assertMode(mode, subject);
|
|
71
|
+
const copied = Buffer.from(bytes);
|
|
72
|
+
return Object.freeze({
|
|
73
|
+
contentBase64: copied.toString("base64"),
|
|
74
|
+
digest: sha256Bytes(copied),
|
|
75
|
+
mode,
|
|
76
|
+
size: copied.byteLength
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
function compareImages(left, right) {
|
|
80
|
+
return binaryCompare(canonicalJson(left), canonicalJson(right));
|
|
81
|
+
}
|
|
82
|
+
function compileOperation(operation) {
|
|
83
|
+
const problem = portableRepositoryPathProblem(operation.path);
|
|
84
|
+
if (problem !== undefined) {
|
|
85
|
+
throw new KnownFileTransactionPlanError(`Operation path ${operation.path} is not portable: ${problem}.`);
|
|
86
|
+
}
|
|
87
|
+
if (operation.path.normalize("NFC") !== operation.path) {
|
|
88
|
+
throw new KnownFileTransactionPlanError(`Operation path ${operation.path} must use NFC normalization.`);
|
|
89
|
+
}
|
|
90
|
+
if (operation.path === ".agent-teams-local" ||
|
|
91
|
+
operation.path.startsWith(".agent-teams-local/")) {
|
|
92
|
+
throw new KnownFileTransactionPlanError(`Operation path ${operation.path} overlaps Foundation's internal state namespace.`);
|
|
93
|
+
}
|
|
94
|
+
if (operation.precondition.state === "absent") {
|
|
95
|
+
return Object.freeze({
|
|
96
|
+
path: operation.path,
|
|
97
|
+
precondition: Object.freeze({ state: "absent" }),
|
|
98
|
+
postimage: image(operation.postimage.bytes, operation.postimage.mode ?? 0o644, `${operation.path} postimage`)
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
if (operation.precondition.acceptedPreimages.length === 0) {
|
|
102
|
+
throw new KnownFileTransactionPlanError(`${operation.path} replacement requires at least one exact preimage.`);
|
|
103
|
+
}
|
|
104
|
+
if (operation.precondition.acceptedPreimages.length > 16) {
|
|
105
|
+
throw new KnownFileTransactionPlanError(`${operation.path} replacement exceeds the 16 preimage limit.`);
|
|
106
|
+
}
|
|
107
|
+
const postimageMode = operation.postimage.mode;
|
|
108
|
+
if (postimageMode === undefined) {
|
|
109
|
+
throw new KnownFileTransactionPlanError(`${operation.path} replacement requires an exact file mode.`);
|
|
110
|
+
}
|
|
111
|
+
assertMode(postimageMode, `${operation.path} postimage`);
|
|
112
|
+
const acceptedPreimages = operation.precondition.acceptedPreimages
|
|
113
|
+
.map((entry, index) => {
|
|
114
|
+
if (entry.mode !== postimageMode) {
|
|
115
|
+
throw new KnownFileTransactionPlanError(`${operation.path} replacement must preserve the exact file mode.`);
|
|
116
|
+
}
|
|
117
|
+
return image(entry.bytes, entry.mode, `${operation.path} preimage ${index}`);
|
|
118
|
+
})
|
|
119
|
+
.toSorted(compareImages);
|
|
120
|
+
for (let index = 1; index < acceptedPreimages.length; index += 1) {
|
|
121
|
+
if (canonicalJson(acceptedPreimages[index - 1]) ===
|
|
122
|
+
canonicalJson(acceptedPreimages[index])) {
|
|
123
|
+
throw new KnownFileTransactionPlanError(`${operation.path} replacement contains a duplicate exact preimage.`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
const postimage = image(operation.postimage.bytes, postimageMode, `${operation.path} postimage`);
|
|
127
|
+
return Object.freeze({
|
|
128
|
+
path: operation.path,
|
|
129
|
+
precondition: Object.freeze({
|
|
130
|
+
state: "known-file",
|
|
131
|
+
acceptedPreimages: Object.freeze(acceptedPreimages)
|
|
132
|
+
}),
|
|
133
|
+
postimage
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
function planBody(operations) {
|
|
137
|
+
return {
|
|
138
|
+
schemaVersion: 1,
|
|
139
|
+
protocol: "agent-teams.repository-mutation.known-file/v1",
|
|
140
|
+
operations
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
export function compileKnownFileTransactionPlan(input) {
|
|
144
|
+
const inputOperations = inertInputOperations(input);
|
|
145
|
+
const operations = inputOperations.map(compileOperation).toSorted((left, right) => binaryCompare(left.path, right.path));
|
|
146
|
+
const collision = findPortableRepositoryPathCollision(operations.map(({ path }) => path));
|
|
147
|
+
if (collision !== undefined) {
|
|
148
|
+
throw new KnownFileTransactionPlanError(`Operation paths collide portably: ${collision.first} and ${collision.second}.`);
|
|
149
|
+
}
|
|
150
|
+
for (let index = 1; index < operations.length; index += 1) {
|
|
151
|
+
const ancestor = operations[index - 1].path;
|
|
152
|
+
const descendant = operations[index].path;
|
|
153
|
+
if (descendant.startsWith(`${ancestor}/`)) {
|
|
154
|
+
throw new KnownFileTransactionPlanError(`Operation paths overlap as ancestor and descendant: ${ancestor} and ${descendant}.`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
const totalBytes = operations.reduce((total, operation) => total + operation.postimage.size +
|
|
158
|
+
(operation.precondition.state === "known-file"
|
|
159
|
+
? operation.precondition.acceptedPreimages.reduce((preimageTotal, entry) => preimageTotal + entry.size, 0)
|
|
160
|
+
: 0), 0);
|
|
161
|
+
if (totalBytes > MAXIMUM_TRANSACTION_BYTES) {
|
|
162
|
+
throw new KnownFileTransactionPlanError(`Transaction evidence exceeds the ${MAXIMUM_TRANSACTION_BYTES} byte limit.`);
|
|
163
|
+
}
|
|
164
|
+
const frozenOperations = Object.freeze(operations);
|
|
165
|
+
const body = planBody(frozenOperations);
|
|
166
|
+
const planDigest = sha256Json({
|
|
167
|
+
domain: "agent-teams.repository-mutation.known-file-plan/v1",
|
|
168
|
+
body
|
|
169
|
+
});
|
|
170
|
+
if (!SHA256.test(planDigest)) {
|
|
171
|
+
throw new KnownFileTransactionPlanError("Compiled Plan digest is invalid.");
|
|
172
|
+
}
|
|
173
|
+
return Object.freeze({ ...body, planDigest });
|
|
174
|
+
}
|
|
175
|
+
export function assertKnownFileTransactionPlan(value) {
|
|
176
|
+
if (typeof value !== "object" ||
|
|
177
|
+
value === null ||
|
|
178
|
+
Array.isArray(value) ||
|
|
179
|
+
Reflect.get(value, "schemaVersion") !== 1 ||
|
|
180
|
+
Reflect.get(value, "protocol") !== "agent-teams.repository-mutation.known-file/v1" ||
|
|
181
|
+
!SHA256.test(String(Reflect.get(value, "planDigest"))) ||
|
|
182
|
+
!Array.isArray(Reflect.get(value, "operations"))) {
|
|
183
|
+
throw new KnownFileTransactionPlanError("Known-file transaction Plan is invalid.");
|
|
184
|
+
}
|
|
185
|
+
const operations = Reflect.get(value, "operations");
|
|
186
|
+
const reconstructed = compileKnownFileTransactionPlan({
|
|
187
|
+
operations: operations.map((candidate) => {
|
|
188
|
+
if (typeof candidate !== "object" || candidate === null || Array.isArray(candidate)) {
|
|
189
|
+
throw new KnownFileTransactionPlanError("Known-file transaction operation is invalid.");
|
|
190
|
+
}
|
|
191
|
+
const path = String(Reflect.get(candidate, "path"));
|
|
192
|
+
const precondition = Reflect.get(candidate, "precondition");
|
|
193
|
+
const postimage = readImage(Reflect.get(candidate, "postimage"), `${path} postimage`);
|
|
194
|
+
if (typeof precondition !== "object" || precondition === null || Array.isArray(precondition)) {
|
|
195
|
+
throw new KnownFileTransactionPlanError(`${path} precondition is invalid.`);
|
|
196
|
+
}
|
|
197
|
+
if (Reflect.get(precondition, "state") === "absent") {
|
|
198
|
+
return { path, precondition: { state: "absent" }, postimage: {
|
|
199
|
+
bytes: postimage.bytes,
|
|
200
|
+
mode: postimage.mode
|
|
201
|
+
} };
|
|
202
|
+
}
|
|
203
|
+
const accepted = Reflect.get(precondition, "acceptedPreimages");
|
|
204
|
+
if (Reflect.get(precondition, "state") !== "known-file" || !Array.isArray(accepted)) {
|
|
205
|
+
throw new KnownFileTransactionPlanError(`${path} precondition is invalid.`);
|
|
206
|
+
}
|
|
207
|
+
return {
|
|
208
|
+
path,
|
|
209
|
+
precondition: {
|
|
210
|
+
state: "known-file",
|
|
211
|
+
acceptedPreimages: accepted.map((entry, index) => {
|
|
212
|
+
const parsed = readImage(entry, `${path} preimage ${index}`);
|
|
213
|
+
return { bytes: parsed.bytes, mode: parsed.mode };
|
|
214
|
+
})
|
|
215
|
+
},
|
|
216
|
+
postimage: { bytes: postimage.bytes, mode: postimage.mode }
|
|
217
|
+
};
|
|
218
|
+
})
|
|
219
|
+
});
|
|
220
|
+
if (canonicalJson(reconstructed) !==
|
|
221
|
+
canonicalJson(value)) {
|
|
222
|
+
throw new KnownFileTransactionPlanError("Known-file transaction Plan is not canonical or has an invalid digest.");
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
function readImage(value, subject) {
|
|
226
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
227
|
+
throw new KnownFileTransactionPlanError(`${subject} is invalid.`);
|
|
228
|
+
}
|
|
229
|
+
const contentBase64 = Reflect.get(value, "contentBase64");
|
|
230
|
+
const digest = Reflect.get(value, "digest");
|
|
231
|
+
const mode = Reflect.get(value, "mode");
|
|
232
|
+
const size = Reflect.get(value, "size");
|
|
233
|
+
if (typeof contentBase64 !== "string" ||
|
|
234
|
+
contentBase64.length > MAXIMUM_BASE64_FILE_LENGTH ||
|
|
235
|
+
typeof digest !== "string" ||
|
|
236
|
+
!SHA256.test(digest) ||
|
|
237
|
+
typeof mode !== "number" ||
|
|
238
|
+
typeof size !== "number" ||
|
|
239
|
+
!Number.isSafeInteger(size) ||
|
|
240
|
+
size < 0 || size > MAXIMUM_FILE_BYTES) {
|
|
241
|
+
throw new KnownFileTransactionPlanError(`${subject} is invalid.`);
|
|
242
|
+
}
|
|
243
|
+
const bytes = Buffer.from(contentBase64, "base64");
|
|
244
|
+
const canonicalBase64 = bytes.toString("base64");
|
|
245
|
+
const expected = image(bytes, mode, subject);
|
|
246
|
+
if (contentBase64 !== canonicalBase64 ||
|
|
247
|
+
expected.digest !== digest ||
|
|
248
|
+
expected.size !== size) {
|
|
249
|
+
throw new KnownFileTransactionPlanError(`${subject} bytes or digest are invalid.`);
|
|
250
|
+
}
|
|
251
|
+
return Object.freeze({ ...expected, bytes });
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=known-file-transaction-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"known-file-transaction-plan.js","sourceRoot":"","sources":["../../../../src/repository-mutation/application/policies/known-file-transaction-plan.ts"],"names":[],"mappings":"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"}
|
package/dist/repository-mutation/application/ports/owned-temporary-cleanup-transition.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owned-temporary-cleanup-transition.d.ts","sourceRoot":"","sources":["../../../../src/repository-mutation/application/ports/owned-temporary-cleanup-transition.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,mCAAmC;IAClD,KAAK,IAAI,OAAO,CAAC,+BAA+B,CAAC,CAAC;CACnD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owned-temporary-cleanup-transition.js","sourceRoot":"","sources":["../../../../src/repository-mutation/application/ports/owned-temporary-cleanup-transition.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type CanonicalJsonValue } from "./canonical-json.js";
|
|
2
|
+
export declare const REPOSITORY_MUTATION_ENVELOPE_FORMAT: "agent-teams.repository-mutation.transaction-envelope/v1";
|
|
3
|
+
export interface RepositoryMutationArtifactIdentity {
|
|
4
|
+
readonly name: string;
|
|
5
|
+
readonly version: string;
|
|
6
|
+
readonly buildIdentity: `sha256:${string}`;
|
|
7
|
+
}
|
|
8
|
+
export interface RepositoryMutationEnvelope {
|
|
9
|
+
readonly schemaVersion: 6;
|
|
10
|
+
readonly format: typeof REPOSITORY_MUTATION_ENVELOPE_FORMAT;
|
|
11
|
+
readonly operationKind: string;
|
|
12
|
+
readonly recoveryHandler: {
|
|
13
|
+
readonly id: string;
|
|
14
|
+
readonly contractVersion: number;
|
|
15
|
+
};
|
|
16
|
+
readonly ownerArtifact: RepositoryMutationArtifactIdentity;
|
|
17
|
+
readonly kernelArtifact: RepositoryMutationArtifactIdentity;
|
|
18
|
+
readonly adapterContractVersion: number;
|
|
19
|
+
readonly payloadKind: string;
|
|
20
|
+
readonly state: string;
|
|
21
|
+
readonly payload: CanonicalJsonValue;
|
|
22
|
+
readonly payloadDigest: `sha256:${string}`;
|
|
23
|
+
readonly envelopeDigest: `sha256:${string}`;
|
|
24
|
+
}
|
|
25
|
+
export type CompileRepositoryMutationEnvelopeInput = Omit<RepositoryMutationEnvelope, "envelopeDigest" | "format" | "payloadDigest" | "schemaVersion">;
|
|
26
|
+
export declare class RepositoryMutationEnvelopeError extends Error {
|
|
27
|
+
constructor(message: string, options?: ErrorOptions);
|
|
28
|
+
}
|
|
29
|
+
export declare function compileRepositoryMutationEnvelope(input: CompileRepositoryMutationEnvelopeInput): RepositoryMutationEnvelope;
|
|
30
|
+
export declare function parseRepositoryMutationEnvelope(bytes: Uint8Array): RepositoryMutationEnvelope;
|
|
31
|
+
export declare function assertRepositoryMutationArtifactBindings(envelope: RepositoryMutationEnvelope, expectedOwner: RepositoryMutationArtifactIdentity, expectedKernel: RepositoryMutationArtifactIdentity): void;
|
|
32
|
+
//# sourceMappingURL=repository-mutation-envelope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository-mutation-envelope.d.ts","sourceRoot":"","sources":["../src/repository-mutation-envelope.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,qBAAqB,CAAC;AAG7B,eAAO,MAAM,mCAAmC,EAC9C,yDAAkE,CAAC;AAYrE,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,UAAU,MAAM,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,mCAAmC,CAAC;IAC5D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE;QACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;KAClC,CAAC;IACF,QAAQ,CAAC,aAAa,EAAE,kCAAkC,CAAC;IAC3D,QAAQ,CAAC,cAAc,EAAE,kCAAkC,CAAC;IAC5D,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,aAAa,EAAE,UAAU,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,cAAc,EAAE,UAAU,MAAM,EAAE,CAAC;CAC7C;AAED,MAAM,MAAM,sCAAsC,GAAG,IAAI,CACvD,0BAA0B,EAC1B,gBAAgB,GAAG,QAAQ,GAAG,eAAe,GAAG,eAAe,CAChE,CAAC;AAEF,qBAAa,+BAAgC,SAAQ,KAAK;IACxD,YAAmB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAGzD;CACF;AA+MD,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,sCAAsC,GAC5C,0BAA0B,CAO5B;AAmBD,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,UAAU,GAAG,0BAA0B,CA6B7F;AAED,wBAAgB,wCAAwC,CACtD,QAAQ,EAAE,0BAA0B,EACpC,aAAa,EAAE,kCAAkC,EACjD,cAAc,EAAE,kCAAkC,GACjD,IAAI,CAQN"}
|