@smthrs/kernel 0.0.0-stage → 1.0.0-rc.4
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 +206 -0
- package/LICENSE +21 -0
- package/README.md +154 -2
- package/dist/cjs/CapabilitySet.d.ts +6 -0
- package/dist/cjs/CapabilitySet.d.ts.map +1 -0
- package/dist/cjs/CapabilitySet.js +19 -0
- package/dist/cjs/CapabilitySet.js.map +7 -0
- package/dist/cjs/ChildProcessEnvironment.d.ts +60 -0
- package/dist/cjs/ChildProcessEnvironment.d.ts.map +1 -0
- package/dist/cjs/ChildProcessEnvironment.js +61 -0
- package/dist/cjs/ChildProcessEnvironment.js.map +7 -0
- package/dist/cjs/ChildProcessSpawner.d.ts +100 -0
- package/dist/cjs/ChildProcessSpawner.d.ts.map +1 -0
- package/dist/cjs/ChildProcessSpawner.js +291 -0
- package/dist/cjs/ChildProcessSpawner.js.map +7 -0
- package/dist/cjs/CommandLine.d.ts +173 -0
- package/dist/cjs/CommandLine.d.ts.map +1 -0
- package/dist/cjs/CommandLine.js +54 -0
- package/dist/cjs/CommandLine.js.map +7 -0
- package/dist/cjs/ContainedSpawner.d.ts +135 -0
- package/dist/cjs/ContainedSpawner.d.ts.map +1 -0
- package/dist/cjs/ContainedSpawner.js +141 -0
- package/dist/cjs/ContainedSpawner.js.map +7 -0
- package/dist/cjs/FileSystem.d.ts +452 -0
- package/dist/cjs/FileSystem.d.ts.map +1 -0
- package/dist/cjs/FileSystem.js +890 -0
- package/dist/cjs/FileSystem.js.map +7 -0
- package/dist/cjs/FileSystemBatch.d.ts +94 -0
- package/dist/cjs/FileSystemBatch.d.ts.map +1 -0
- package/dist/cjs/FileSystemBatch.js +31 -0
- package/dist/cjs/FileSystemBatch.js.map +7 -0
- package/dist/cjs/GrantEvent.d.ts +240 -0
- package/dist/cjs/GrantEvent.d.ts.map +1 -0
- package/dist/cjs/GrantEvent.js +115 -0
- package/dist/cjs/GrantEvent.js.map +7 -0
- package/dist/cjs/GrantStore.d.ts +270 -0
- package/dist/cjs/GrantStore.d.ts.map +1 -0
- package/dist/cjs/GrantStore.js +857 -0
- package/dist/cjs/GrantStore.js.map +7 -0
- package/dist/cjs/HostError.d.ts +36 -0
- package/dist/cjs/HostError.d.ts.map +1 -0
- package/dist/cjs/HostError.js +17 -0
- package/dist/cjs/HostError.js.map +7 -0
- package/dist/cjs/HostServices.d.ts +101 -0
- package/dist/cjs/HostServices.d.ts.map +1 -0
- package/dist/cjs/HostServices.js +66 -0
- package/dist/cjs/HostServices.js.map +7 -0
- package/dist/cjs/HttpClient.d.ts +177 -0
- package/dist/cjs/HttpClient.d.ts.map +1 -0
- package/dist/cjs/HttpClient.js +217 -0
- package/dist/cjs/HttpClient.js.map +7 -0
- package/dist/cjs/Jj.d.ts +67 -0
- package/dist/cjs/Jj.d.ts.map +1 -0
- package/dist/cjs/Jj.js +118 -0
- package/dist/cjs/Jj.js.map +7 -0
- package/dist/cjs/JournalGrantStore.d.ts +65 -0
- package/dist/cjs/JournalGrantStore.d.ts.map +1 -0
- package/dist/cjs/JournalGrantStore.js +354 -0
- package/dist/cjs/JournalGrantStore.js.map +7 -0
- package/dist/cjs/Path.d.ts +37 -0
- package/dist/cjs/Path.d.ts.map +1 -0
- package/dist/cjs/Path.js +46 -0
- package/dist/cjs/Path.js.map +7 -0
- package/dist/cjs/ProcessConfinement.d.ts +55 -0
- package/dist/cjs/ProcessConfinement.d.ts.map +1 -0
- package/dist/cjs/ProcessConfinement.js +94 -0
- package/dist/cjs/ProcessConfinement.js.map +7 -0
- package/dist/cjs/ProcessLedger.d.ts +260 -0
- package/dist/cjs/ProcessLedger.d.ts.map +1 -0
- package/dist/cjs/ProcessLedger.js +190 -0
- package/dist/cjs/ProcessLedger.js.map +7 -0
- package/dist/cjs/Rooted.d.ts +53 -0
- package/dist/cjs/Rooted.d.ts.map +1 -0
- package/dist/cjs/Rooted.js +101 -0
- package/dist/cjs/Rooted.js.map +7 -0
- package/dist/cjs/Unreachable.d.ts +27 -0
- package/dist/cjs/Unreachable.d.ts.map +1 -0
- package/dist/cjs/Unreachable.js +43 -0
- package/dist/cjs/Unreachable.js.map +7 -0
- package/dist/cjs/Workspace.d.ts +62 -0
- package/dist/cjs/Workspace.d.ts.map +1 -0
- package/dist/cjs/Workspace.js +35 -0
- package/dist/cjs/Workspace.js.map +7 -0
- package/dist/cjs/index.d.ts +161 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +73 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/internal/Containment.d.ts +24 -0
- package/dist/cjs/internal/Containment.d.ts.map +1 -0
- package/dist/cjs/internal/Containment.js +30 -0
- package/dist/cjs/internal/Containment.js.map +7 -0
- package/dist/cjs/internal/Pipeline.d.ts +18 -0
- package/dist/cjs/internal/Pipeline.d.ts.map +1 -0
- package/dist/cjs/internal/Pipeline.js +90 -0
- package/dist/cjs/internal/Pipeline.js.map +7 -0
- package/dist/cjs/internal/makeCapability.d.ts +16 -0
- package/dist/cjs/internal/makeCapability.d.ts.map +1 -0
- package/dist/cjs/internal/makeCapability.js +44 -0
- package/dist/cjs/internal/makeCapability.js.map +7 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/test/FileSystemBatchContract.d.ts +15 -0
- package/dist/cjs/test/FileSystemBatchContract.d.ts.map +1 -0
- package/dist/cjs/test/FileSystemBatchContract.js +76 -0
- package/dist/cjs/test/FileSystemBatchContract.js.map +7 -0
- package/dist/cjs/test/HostContract.d.ts +225 -0
- package/dist/cjs/test/HostContract.d.ts.map +1 -0
- package/dist/cjs/test/HostContract.js +489 -0
- package/dist/cjs/test/HostContract.js.map +7 -0
- package/dist/cjs/test/TestGrantStore.d.ts +31 -0
- package/dist/cjs/test/TestGrantStore.d.ts.map +1 -0
- package/dist/cjs/test/TestGrantStore.js +65 -0
- package/dist/cjs/test/TestGrantStore.js.map +7 -0
- package/dist/esm/CapabilitySet.d.ts +6 -0
- package/dist/esm/CapabilitySet.d.ts.map +1 -0
- package/dist/esm/CapabilitySet.js +6 -0
- package/dist/esm/CapabilitySet.js.map +1 -0
- package/dist/esm/ChildProcessEnvironment.d.ts +60 -0
- package/dist/esm/ChildProcessEnvironment.d.ts.map +1 -0
- package/dist/esm/ChildProcessEnvironment.js +91 -0
- package/dist/esm/ChildProcessEnvironment.js.map +1 -0
- package/dist/esm/ChildProcessSpawner.d.ts +100 -0
- package/dist/esm/ChildProcessSpawner.d.ts.map +1 -0
- package/dist/esm/ChildProcessSpawner.js +342 -0
- package/dist/esm/ChildProcessSpawner.js.map +1 -0
- package/dist/esm/CommandLine.d.ts +173 -0
- package/dist/esm/CommandLine.d.ts.map +1 -0
- package/dist/esm/CommandLine.js +195 -0
- package/dist/esm/CommandLine.js.map +1 -0
- package/dist/esm/ContainedSpawner.d.ts +135 -0
- package/dist/esm/ContainedSpawner.d.ts.map +1 -0
- package/dist/esm/ContainedSpawner.js +180 -0
- package/dist/esm/ContainedSpawner.js.map +1 -0
- package/dist/esm/FileSystem.d.ts +452 -0
- package/dist/esm/FileSystem.d.ts.map +1 -0
- package/dist/esm/FileSystem.js +989 -0
- package/dist/esm/FileSystem.js.map +1 -0
- package/dist/esm/FileSystemBatch.d.ts +94 -0
- package/dist/esm/FileSystemBatch.d.ts.map +1 -0
- package/dist/esm/FileSystemBatch.js +26 -0
- package/dist/esm/FileSystemBatch.js.map +1 -0
- package/dist/esm/GrantEvent.d.ts +240 -0
- package/dist/esm/GrantEvent.d.ts.map +1 -0
- package/dist/esm/GrantEvent.js +155 -0
- package/dist/esm/GrantEvent.js.map +1 -0
- package/dist/esm/GrantStore.d.ts +270 -0
- package/dist/esm/GrantStore.d.ts.map +1 -0
- package/dist/esm/GrantStore.js +951 -0
- package/dist/esm/GrantStore.js.map +1 -0
- package/dist/esm/HostError.d.ts +36 -0
- package/dist/esm/HostError.d.ts.map +1 -0
- package/dist/esm/HostError.js +20 -0
- package/dist/esm/HostError.js.map +1 -0
- package/dist/esm/HostServices.d.ts +101 -0
- package/dist/esm/HostServices.d.ts.map +1 -0
- package/dist/esm/HostServices.js +76 -0
- package/dist/esm/HostServices.js.map +1 -0
- package/dist/esm/HttpClient.d.ts +177 -0
- package/dist/esm/HttpClient.d.ts.map +1 -0
- package/dist/esm/HttpClient.js +299 -0
- package/dist/esm/HttpClient.js.map +1 -0
- package/dist/esm/Jj.d.ts +67 -0
- package/dist/esm/Jj.d.ts.map +1 -0
- package/dist/esm/Jj.js +111 -0
- package/dist/esm/Jj.js.map +1 -0
- package/dist/esm/JournalGrantStore.d.ts +65 -0
- package/dist/esm/JournalGrantStore.d.ts.map +1 -0
- package/dist/esm/JournalGrantStore.js +350 -0
- package/dist/esm/JournalGrantStore.js.map +1 -0
- package/dist/esm/Path.d.ts +37 -0
- package/dist/esm/Path.d.ts.map +1 -0
- package/dist/esm/Path.js +34 -0
- package/dist/esm/Path.js.map +1 -0
- package/dist/esm/ProcessConfinement.d.ts +55 -0
- package/dist/esm/ProcessConfinement.d.ts.map +1 -0
- package/dist/esm/ProcessConfinement.js +106 -0
- package/dist/esm/ProcessConfinement.js.map +1 -0
- package/dist/esm/ProcessLedger.d.ts +260 -0
- package/dist/esm/ProcessLedger.d.ts.map +1 -0
- package/dist/esm/ProcessLedger.js +283 -0
- package/dist/esm/ProcessLedger.js.map +1 -0
- package/dist/esm/Rooted.d.ts +53 -0
- package/dist/esm/Rooted.d.ts.map +1 -0
- package/dist/esm/Rooted.js +104 -0
- package/dist/esm/Rooted.js.map +1 -0
- package/dist/esm/Unreachable.d.ts +27 -0
- package/dist/esm/Unreachable.d.ts.map +1 -0
- package/dist/esm/Unreachable.js +26 -0
- package/dist/esm/Unreachable.js.map +1 -0
- package/dist/esm/Workspace.d.ts +62 -0
- package/dist/esm/Workspace.d.ts.map +1 -0
- package/dist/esm/Workspace.js +51 -0
- package/dist/esm/Workspace.js.map +1 -0
- package/dist/esm/index.d.ts +161 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +151 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal/Containment.d.ts +24 -0
- package/dist/esm/internal/Containment.d.ts.map +1 -0
- package/dist/esm/internal/Containment.js +27 -0
- package/dist/esm/internal/Containment.js.map +1 -0
- package/dist/esm/internal/Pipeline.d.ts +18 -0
- package/dist/esm/internal/Pipeline.d.ts.map +1 -0
- package/dist/esm/internal/Pipeline.js +68 -0
- package/dist/esm/internal/Pipeline.js.map +1 -0
- package/dist/esm/internal/makeCapability.d.ts +16 -0
- package/dist/esm/internal/makeCapability.d.ts.map +1 -0
- package/dist/esm/internal/makeCapability.js +22 -0
- package/dist/esm/internal/makeCapability.js.map +1 -0
- package/dist/esm/test/FileSystemBatchContract.d.ts +15 -0
- package/dist/esm/test/FileSystemBatchContract.d.ts.map +1 -0
- package/dist/esm/test/FileSystemBatchContract.js +57 -0
- package/dist/esm/test/FileSystemBatchContract.js.map +1 -0
- package/dist/esm/test/HostContract.d.ts +225 -0
- package/dist/esm/test/HostContract.d.ts.map +1 -0
- package/dist/esm/test/HostContract.js +460 -0
- package/dist/esm/test/HostContract.js.map +1 -0
- package/dist/esm/test/TestGrantStore.d.ts +31 -0
- package/dist/esm/test/TestGrantStore.d.ts.map +1 -0
- package/dist/esm/test/TestGrantStore.js +57 -0
- package/dist/esm/test/TestGrantStore.js.map +1 -0
- package/docs/README.md +162 -0
- package/docs/api.md +1532 -0
- package/docs/concepts/decoration-in-place.md +117 -0
- package/docs/concepts/filesystem-batches.md +58 -0
- package/docs/concepts/filesystem-confinement.md +168 -0
- package/docs/concepts/grant-decisions.md +181 -0
- package/docs/concepts/process-containment.md +155 -0
- package/docs/contract.md +14 -0
- package/docs/guides/adapt-a-new-host-platform.md +148 -0
- package/docs/guides/answer-permission-requests.md +151 -0
- package/docs/guides/authorize-network-and-model-calls.md +118 -0
- package/docs/guides/contain-spawned-processes.md +118 -0
- package/docs/guides/guard-a-host-bundle.md +109 -0
- package/docs/guides/persist-grants-across-restarts.md +135 -0
- package/docs/guides/write-a-capability-policy.md +159 -0
- package/docs/installation.md +115 -0
- package/docs/quickstart.md +182 -0
- package/docs/testing.md +108 -0
- package/docs/troubleshooting.md +281 -0
- package/package.json +344 -3
- package/src/CapabilitySet.ts +6 -0
- package/src/ChildProcessEnvironment.ts +98 -0
- package/src/ChildProcessSpawner.ts +414 -0
- package/src/CommandLine.ts +250 -0
- package/src/ContainedSpawner.ts +284 -0
- package/src/FileSystem.ts +1655 -0
- package/src/FileSystemBatch.ts +90 -0
- package/src/GrantEvent.ts +174 -0
- package/src/GrantStore.ts +1345 -0
- package/src/HostError.ts +37 -0
- package/src/HostServices.ts +133 -0
- package/src/HttpClient.ts +406 -0
- package/src/Jj.ts +159 -0
- package/src/JournalGrantStore.ts +461 -0
- package/src/Path.ts +47 -0
- package/src/ProcessConfinement.ts +156 -0
- package/src/ProcessLedger.ts +423 -0
- package/src/Rooted.ts +128 -0
- package/src/Unreachable.ts +30 -0
- package/src/Workspace.ts +65 -0
- package/src/index.ts +181 -0
- package/src/internal/Containment.ts +37 -0
- package/src/internal/Pipeline.ts +85 -0
- package/src/internal/makeCapability.ts +26 -0
- package/src/test/FileSystemBatchContract.ts +59 -0
- package/src/test/HostContract.ts +785 -0
- package/src/test/TestGrantStore.ts +73 -0
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable grant decision events.
|
|
3
|
+
*
|
|
4
|
+
* Governing design:
|
|
5
|
+
* `docs/specs/Concepts/Permission Kernel.md` and
|
|
6
|
+
* `docs/specs/Concepts/Journal Queue.md`.
|
|
7
|
+
*
|
|
8
|
+
* @since 1.0.0-rc.0
|
|
9
|
+
*/
|
|
10
|
+
import { Capability, CapabilityPattern } from "@smthrs/capability/Capability";
|
|
11
|
+
import * as Schema from "effect/Schema";
|
|
12
|
+
/**
|
|
13
|
+
* The tier at which a capability decision was made.
|
|
14
|
+
*
|
|
15
|
+
* @category schemas
|
|
16
|
+
* @since 1.0.0-rc.0
|
|
17
|
+
*/
|
|
18
|
+
export declare const GrantTier: Schema.Literals<readonly ["sealed", "compensable", "irreversible"]>;
|
|
19
|
+
/**
|
|
20
|
+
* The scope selected for a permission grant.
|
|
21
|
+
*
|
|
22
|
+
* @category schemas
|
|
23
|
+
* @since 1.0.0-rc.0
|
|
24
|
+
*/
|
|
25
|
+
export declare const GrantScope: Schema.Literals<readonly ["once", "run", "remembered"]>;
|
|
26
|
+
declare const OnceGrant_base: Schema.Class<OnceGrant, Schema.TaggedStruct<"@smthrs/kernel/GrantEvent/OnceGrant", {
|
|
27
|
+
readonly eventType: Schema.Literal<"flows.kernel.grant.once.v1">;
|
|
28
|
+
readonly requestId: Schema.String;
|
|
29
|
+
readonly runId: Schema.String;
|
|
30
|
+
readonly planDigest: Schema.optional<Schema.String>;
|
|
31
|
+
readonly capability: typeof Capability;
|
|
32
|
+
readonly pattern: typeof CapabilityPattern;
|
|
33
|
+
readonly scope: Schema.Literal<"once">;
|
|
34
|
+
readonly tier: Schema.Literals<readonly ["sealed", "compensable", "irreversible"]>;
|
|
35
|
+
}>, {}>;
|
|
36
|
+
/**
|
|
37
|
+
* A one-call grant.
|
|
38
|
+
*
|
|
39
|
+
* It is durable audit evidence but is deliberately never replayed as active
|
|
40
|
+
* authority.
|
|
41
|
+
*
|
|
42
|
+
* @category models
|
|
43
|
+
* @since 1.0.0-rc.0
|
|
44
|
+
*/
|
|
45
|
+
export declare class OnceGrant extends OnceGrant_base {
|
|
46
|
+
}
|
|
47
|
+
declare const RememberedGrant_base: Schema.Class<RememberedGrant, Schema.TaggedStruct<"@smthrs/kernel/GrantEvent/RememberedGrant", {
|
|
48
|
+
readonly eventType: Schema.Literal<"flows.kernel.grant.remembered.v1">;
|
|
49
|
+
readonly requestId: Schema.String;
|
|
50
|
+
readonly runId: Schema.String;
|
|
51
|
+
readonly planDigest: Schema.optional<Schema.String>;
|
|
52
|
+
readonly capability: typeof Capability;
|
|
53
|
+
readonly pattern: typeof CapabilityPattern;
|
|
54
|
+
readonly scope: Schema.Literal<"remembered">;
|
|
55
|
+
readonly tier: Schema.Literals<readonly ["sealed", "compensable", "irreversible"]>;
|
|
56
|
+
}>, {}>;
|
|
57
|
+
/**
|
|
58
|
+
* A grant remembered across runs.
|
|
59
|
+
*
|
|
60
|
+
* @category models
|
|
61
|
+
* @since 1.0.0-rc.0
|
|
62
|
+
*/
|
|
63
|
+
export declare class RememberedGrant extends RememberedGrant_base {
|
|
64
|
+
}
|
|
65
|
+
declare const RunGrant_base: Schema.Class<RunGrant, Schema.TaggedStruct<"@smthrs/kernel/GrantEvent/RunGrant", {
|
|
66
|
+
readonly eventType: Schema.Literal<"flows.kernel.grant.run.v2">;
|
|
67
|
+
readonly requestId: Schema.String;
|
|
68
|
+
readonly runId: Schema.String;
|
|
69
|
+
readonly planDigest: Schema.String;
|
|
70
|
+
readonly capability: typeof Capability;
|
|
71
|
+
readonly pattern: typeof CapabilityPattern;
|
|
72
|
+
readonly ceiling: Schema.$Array<Schema.$Array<typeof CapabilityPattern>>;
|
|
73
|
+
readonly scope: Schema.Literal<"run">;
|
|
74
|
+
readonly tier: Schema.Literals<readonly ["sealed", "compensable", "irreversible"]>;
|
|
75
|
+
}>, {}>;
|
|
76
|
+
/**
|
|
77
|
+
* A grant scoped to the current run.
|
|
78
|
+
*
|
|
79
|
+
* Version 2 captures the requesting fiber's normalized conjunction of any-of
|
|
80
|
+
* capability-pattern groups. Replay intersects it with the constructor ceiling.
|
|
81
|
+
* Version 1 omitted this boundary and cannot safely activate authority.
|
|
82
|
+
*
|
|
83
|
+
* @category models
|
|
84
|
+
* @since 1.0.0-rc.0
|
|
85
|
+
*/
|
|
86
|
+
export declare class RunGrant extends RunGrant_base {
|
|
87
|
+
}
|
|
88
|
+
declare const DeniedGrant_base: Schema.Class<DeniedGrant, Schema.TaggedStruct<"@smthrs/kernel/GrantEvent/DeniedGrant", {
|
|
89
|
+
readonly eventType: Schema.Literal<"flows.kernel.grant.denied.v1">;
|
|
90
|
+
readonly requestId: Schema.String;
|
|
91
|
+
readonly runId: Schema.String;
|
|
92
|
+
readonly planDigest: Schema.optional<Schema.String>;
|
|
93
|
+
readonly capability: typeof Capability;
|
|
94
|
+
readonly pattern: typeof CapabilityPattern;
|
|
95
|
+
readonly scope: Schema.Literal<"once">;
|
|
96
|
+
readonly tier: Schema.Literals<readonly ["sealed", "compensable", "irreversible"]>;
|
|
97
|
+
}>, {}>;
|
|
98
|
+
/**
|
|
99
|
+
* A denied permission request.
|
|
100
|
+
*
|
|
101
|
+
* @category models
|
|
102
|
+
* @since 1.0.0-rc.0
|
|
103
|
+
*/
|
|
104
|
+
export declare class DeniedGrant extends DeniedGrant_base {
|
|
105
|
+
}
|
|
106
|
+
declare const EnvelopeGrant_base: Schema.Class<EnvelopeGrant, Schema.TaggedStruct<"@smthrs/kernel/GrantEvent/EnvelopeGrant", {
|
|
107
|
+
readonly eventType: Schema.Literal<"flows.kernel.grant.envelope.v1">;
|
|
108
|
+
readonly runId: Schema.String;
|
|
109
|
+
readonly planDigest: Schema.String;
|
|
110
|
+
readonly patterns: Schema.$Array<typeof CapabilityPattern>;
|
|
111
|
+
readonly scope: Schema.Literals<readonly ["run", "remembered"]>;
|
|
112
|
+
}>, {}>;
|
|
113
|
+
/**
|
|
114
|
+
* A capability envelope grant.
|
|
115
|
+
*
|
|
116
|
+
* Envelope grants are not attached to an individual request. `planDigest`
|
|
117
|
+
* binds the decision to exactly the plan shown to the approver. A `run`
|
|
118
|
+
* envelope is replayed only for that run and digest; a `remembered` envelope
|
|
119
|
+
* becomes remembered predicate grants for future plans while retaining its
|
|
120
|
+
* origin digest as audit evidence.
|
|
121
|
+
*
|
|
122
|
+
* @category models
|
|
123
|
+
* @since 1.0.0-rc.0
|
|
124
|
+
*/
|
|
125
|
+
export declare class EnvelopeGrant extends EnvelopeGrant_base {
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* All durable grant events understood by the kernel.
|
|
129
|
+
*
|
|
130
|
+
* @category models
|
|
131
|
+
* @since 1.0.0-rc.0
|
|
132
|
+
*/
|
|
133
|
+
export declare const GrantEventSchema: Schema.Union<readonly [typeof OnceGrant, typeof RememberedGrant, typeof DeniedGrant, typeof EnvelopeGrant, typeof RunGrant]>;
|
|
134
|
+
/**
|
|
135
|
+
* All durable grant events understood by the kernel.
|
|
136
|
+
*
|
|
137
|
+
* @category models
|
|
138
|
+
* @since 1.0.0-rc.0
|
|
139
|
+
*/
|
|
140
|
+
export type GrantEvent = typeof GrantEventSchema.Type;
|
|
141
|
+
/**
|
|
142
|
+
* Decodes one JSON-compatible journal payload into a grant event.
|
|
143
|
+
*
|
|
144
|
+
* Excess payload keys are rejected rather than stripped. Grant payloads are
|
|
145
|
+
* replayed as active permission authority, so a payload that mixes fields
|
|
146
|
+
* from two grant variants — for example an envelope carrying request-only
|
|
147
|
+
* fields — is treated as corrupt instead of silently narrowed to whichever
|
|
148
|
+
* variant its declared keys happen to satisfy.
|
|
149
|
+
*
|
|
150
|
+
* @category decoding
|
|
151
|
+
* @since 1.0.0-rc.0
|
|
152
|
+
*/
|
|
153
|
+
export declare const decode: (input: unknown, options?: import("effect/SchemaAST").ParseOptions) => import("effect/Result").Result<OnceGrant | RememberedGrant | RunGrant | DeniedGrant | EnvelopeGrant, Schema.SchemaError>;
|
|
154
|
+
/**
|
|
155
|
+
* Encodes a grant event into its JSON-compatible journal payload.
|
|
156
|
+
*
|
|
157
|
+
* @category encoding
|
|
158
|
+
* @since 1.0.0-rc.0
|
|
159
|
+
*/
|
|
160
|
+
export declare const encode: (input: unknown, options?: import("effect/SchemaAST").ParseOptions) => import("effect/Result").Result<{
|
|
161
|
+
readonly _tag: "@smthrs/kernel/GrantEvent/OnceGrant";
|
|
162
|
+
readonly pattern: {
|
|
163
|
+
readonly action: "fs:read" | "fs:write" | "net:get" | "net:post" | "net:private" | "model:call" | "memory:read" | "memory:write" | "proc:spawn" | "jj:status" | "jj:diff" | "jj:snapshot" | "jj:restore" | "jj:workspace-add" | "jj:workspace-forget" | "jj:root" | "jj:revert" | "jj:op-restore" | "fs:*" | "net:*" | "model:*" | "memory:*" | "proc:*" | "jj:*" | "*";
|
|
164
|
+
readonly resource: string;
|
|
165
|
+
};
|
|
166
|
+
readonly requestId: string;
|
|
167
|
+
readonly runId: string;
|
|
168
|
+
readonly tier: "sealed" | "compensable" | "irreversible";
|
|
169
|
+
readonly capability: {
|
|
170
|
+
readonly action: "fs:read" | "fs:write" | "net:get" | "net:post" | "net:private" | "model:call" | "memory:read" | "memory:write" | "proc:spawn" | "jj:status" | "jj:diff" | "jj:snapshot" | "jj:restore" | "jj:workspace-add" | "jj:workspace-forget" | "jj:root" | "jj:revert" | "jj:op-restore";
|
|
171
|
+
readonly resource: string;
|
|
172
|
+
};
|
|
173
|
+
readonly eventType: "flows.kernel.grant.once.v1";
|
|
174
|
+
readonly scope: "once";
|
|
175
|
+
readonly planDigest?: string | undefined;
|
|
176
|
+
} | {
|
|
177
|
+
readonly _tag: "@smthrs/kernel/GrantEvent/RememberedGrant";
|
|
178
|
+
readonly pattern: {
|
|
179
|
+
readonly action: "fs:read" | "fs:write" | "net:get" | "net:post" | "net:private" | "model:call" | "memory:read" | "memory:write" | "proc:spawn" | "jj:status" | "jj:diff" | "jj:snapshot" | "jj:restore" | "jj:workspace-add" | "jj:workspace-forget" | "jj:root" | "jj:revert" | "jj:op-restore" | "fs:*" | "net:*" | "model:*" | "memory:*" | "proc:*" | "jj:*" | "*";
|
|
180
|
+
readonly resource: string;
|
|
181
|
+
};
|
|
182
|
+
readonly requestId: string;
|
|
183
|
+
readonly runId: string;
|
|
184
|
+
readonly tier: "sealed" | "compensable" | "irreversible";
|
|
185
|
+
readonly capability: {
|
|
186
|
+
readonly action: "fs:read" | "fs:write" | "net:get" | "net:post" | "net:private" | "model:call" | "memory:read" | "memory:write" | "proc:spawn" | "jj:status" | "jj:diff" | "jj:snapshot" | "jj:restore" | "jj:workspace-add" | "jj:workspace-forget" | "jj:root" | "jj:revert" | "jj:op-restore";
|
|
187
|
+
readonly resource: string;
|
|
188
|
+
};
|
|
189
|
+
readonly eventType: "flows.kernel.grant.remembered.v1";
|
|
190
|
+
readonly scope: "remembered";
|
|
191
|
+
readonly planDigest?: string | undefined;
|
|
192
|
+
} | {
|
|
193
|
+
readonly _tag: "@smthrs/kernel/GrantEvent/RunGrant";
|
|
194
|
+
readonly eventType: "flows.kernel.grant.run.v2";
|
|
195
|
+
readonly requestId: string;
|
|
196
|
+
readonly runId: string;
|
|
197
|
+
readonly planDigest: string;
|
|
198
|
+
readonly capability: {
|
|
199
|
+
readonly action: "fs:read" | "fs:write" | "net:get" | "net:post" | "net:private" | "model:call" | "memory:read" | "memory:write" | "proc:spawn" | "jj:status" | "jj:diff" | "jj:snapshot" | "jj:restore" | "jj:workspace-add" | "jj:workspace-forget" | "jj:root" | "jj:revert" | "jj:op-restore";
|
|
200
|
+
readonly resource: string;
|
|
201
|
+
};
|
|
202
|
+
readonly pattern: {
|
|
203
|
+
readonly action: "fs:read" | "fs:write" | "net:get" | "net:post" | "net:private" | "model:call" | "memory:read" | "memory:write" | "proc:spawn" | "jj:status" | "jj:diff" | "jj:snapshot" | "jj:restore" | "jj:workspace-add" | "jj:workspace-forget" | "jj:root" | "jj:revert" | "jj:op-restore" | "fs:*" | "net:*" | "model:*" | "memory:*" | "proc:*" | "jj:*" | "*";
|
|
204
|
+
readonly resource: string;
|
|
205
|
+
};
|
|
206
|
+
readonly ceiling: readonly (readonly {
|
|
207
|
+
readonly action: "fs:read" | "fs:write" | "net:get" | "net:post" | "net:private" | "model:call" | "memory:read" | "memory:write" | "proc:spawn" | "jj:status" | "jj:diff" | "jj:snapshot" | "jj:restore" | "jj:workspace-add" | "jj:workspace-forget" | "jj:root" | "jj:revert" | "jj:op-restore" | "fs:*" | "net:*" | "model:*" | "memory:*" | "proc:*" | "jj:*" | "*";
|
|
208
|
+
readonly resource: string;
|
|
209
|
+
}[])[];
|
|
210
|
+
readonly scope: "run";
|
|
211
|
+
readonly tier: "sealed" | "compensable" | "irreversible";
|
|
212
|
+
} | {
|
|
213
|
+
readonly _tag: "@smthrs/kernel/GrantEvent/DeniedGrant";
|
|
214
|
+
readonly pattern: {
|
|
215
|
+
readonly action: "fs:read" | "fs:write" | "net:get" | "net:post" | "net:private" | "model:call" | "memory:read" | "memory:write" | "proc:spawn" | "jj:status" | "jj:diff" | "jj:snapshot" | "jj:restore" | "jj:workspace-add" | "jj:workspace-forget" | "jj:root" | "jj:revert" | "jj:op-restore" | "fs:*" | "net:*" | "model:*" | "memory:*" | "proc:*" | "jj:*" | "*";
|
|
216
|
+
readonly resource: string;
|
|
217
|
+
};
|
|
218
|
+
readonly requestId: string;
|
|
219
|
+
readonly runId: string;
|
|
220
|
+
readonly tier: "sealed" | "compensable" | "irreversible";
|
|
221
|
+
readonly capability: {
|
|
222
|
+
readonly action: "fs:read" | "fs:write" | "net:get" | "net:post" | "net:private" | "model:call" | "memory:read" | "memory:write" | "proc:spawn" | "jj:status" | "jj:diff" | "jj:snapshot" | "jj:restore" | "jj:workspace-add" | "jj:workspace-forget" | "jj:root" | "jj:revert" | "jj:op-restore";
|
|
223
|
+
readonly resource: string;
|
|
224
|
+
};
|
|
225
|
+
readonly eventType: "flows.kernel.grant.denied.v1";
|
|
226
|
+
readonly scope: "once";
|
|
227
|
+
readonly planDigest?: string | undefined;
|
|
228
|
+
} | {
|
|
229
|
+
readonly _tag: "@smthrs/kernel/GrantEvent/EnvelopeGrant";
|
|
230
|
+
readonly eventType: "flows.kernel.grant.envelope.v1";
|
|
231
|
+
readonly runId: string;
|
|
232
|
+
readonly planDigest: string;
|
|
233
|
+
readonly patterns: readonly {
|
|
234
|
+
readonly action: "fs:read" | "fs:write" | "net:get" | "net:post" | "net:private" | "model:call" | "memory:read" | "memory:write" | "proc:spawn" | "jj:status" | "jj:diff" | "jj:snapshot" | "jj:restore" | "jj:workspace-add" | "jj:workspace-forget" | "jj:root" | "jj:revert" | "jj:op-restore" | "fs:*" | "net:*" | "model:*" | "memory:*" | "proc:*" | "jj:*" | "*";
|
|
235
|
+
readonly resource: string;
|
|
236
|
+
}[];
|
|
237
|
+
readonly scope: "run" | "remembered";
|
|
238
|
+
}, Schema.SchemaError>;
|
|
239
|
+
export {};
|
|
240
|
+
//# sourceMappingURL=GrantEvent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GrantEvent.d.ts","sourceRoot":"","sources":["../../src/GrantEvent.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AAC7E,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC;;;;;GAKG;AACH,eAAO,MAAM,SAAS,qEAA6D,CAAA;AAEnF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,yDAAiD,CAAA;;;;;;;;;;;AAExE;;;;;;;;GAQG;AACH,qBAAa,SAAU,SAAQ,cAS7B;CAAG;;;;;;;;;;;AAEL;;;;;GAKG;AACH,qBAAa,eAAgB,SAAQ,oBAYpC;CAAG;;;;;;;;;;;;AAEJ;;;;;;;;;GASG;AACH,qBAAa,QAAS,SAAQ,aAU5B;CAAG;;;;;;;;;;;AAEL;;;;;GAKG;AACH,qBAAa,WAAY,SAAQ,gBAS/B;CAAG;;;;;;;;AAEL;;;;;;;;;;;GAWG;AACH,qBAAa,aAAc,SAAQ,kBASlC;CAAG;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,8HAM3B,CAAA;AAEF;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,gBAAgB,CAAC,IAAI,CAAA;AAErD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,MAAM,iMAA8E,CAAA;AAEjG;;;;;GAKG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAA+C,CAAA"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable grant decision events.
|
|
3
|
+
*
|
|
4
|
+
* Governing design:
|
|
5
|
+
* `docs/specs/Concepts/Permission Kernel.md` and
|
|
6
|
+
* `docs/specs/Concepts/Journal Queue.md`.
|
|
7
|
+
*
|
|
8
|
+
* @since 1.0.0-rc.0
|
|
9
|
+
*/
|
|
10
|
+
import { Capability, CapabilityPattern } from "@smthrs/capability/Capability";
|
|
11
|
+
import * as Schema from "effect/Schema";
|
|
12
|
+
/**
|
|
13
|
+
* The tier at which a capability decision was made.
|
|
14
|
+
*
|
|
15
|
+
* @category schemas
|
|
16
|
+
* @since 1.0.0-rc.0
|
|
17
|
+
*/
|
|
18
|
+
export const GrantTier = Schema.Literals(["sealed", "compensable", "irreversible"]);
|
|
19
|
+
/**
|
|
20
|
+
* The scope selected for a permission grant.
|
|
21
|
+
*
|
|
22
|
+
* @category schemas
|
|
23
|
+
* @since 1.0.0-rc.0
|
|
24
|
+
*/
|
|
25
|
+
export const GrantScope = Schema.Literals(["once", "run", "remembered"]);
|
|
26
|
+
/**
|
|
27
|
+
* A one-call grant.
|
|
28
|
+
*
|
|
29
|
+
* It is durable audit evidence but is deliberately never replayed as active
|
|
30
|
+
* authority.
|
|
31
|
+
*
|
|
32
|
+
* @category models
|
|
33
|
+
* @since 1.0.0-rc.0
|
|
34
|
+
*/
|
|
35
|
+
export class OnceGrant extends Schema.TaggedClass()("@smthrs/kernel/GrantEvent/OnceGrant", {
|
|
36
|
+
eventType: Schema.Literal("flows.kernel.grant.once.v1"),
|
|
37
|
+
requestId: Schema.String,
|
|
38
|
+
runId: Schema.String,
|
|
39
|
+
planDigest: Schema.optional(Schema.String),
|
|
40
|
+
capability: Capability,
|
|
41
|
+
pattern: CapabilityPattern,
|
|
42
|
+
scope: Schema.Literal("once"),
|
|
43
|
+
tier: GrantTier
|
|
44
|
+
}) {
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* A grant remembered across runs.
|
|
48
|
+
*
|
|
49
|
+
* @category models
|
|
50
|
+
* @since 1.0.0-rc.0
|
|
51
|
+
*/
|
|
52
|
+
export class RememberedGrant extends Schema.TaggedClass()("@smthrs/kernel/GrantEvent/RememberedGrant", {
|
|
53
|
+
eventType: Schema.Literal("flows.kernel.grant.remembered.v1"),
|
|
54
|
+
requestId: Schema.String,
|
|
55
|
+
runId: Schema.String,
|
|
56
|
+
planDigest: Schema.optional(Schema.String),
|
|
57
|
+
capability: Capability,
|
|
58
|
+
pattern: CapabilityPattern,
|
|
59
|
+
scope: Schema.Literal("remembered"),
|
|
60
|
+
tier: GrantTier
|
|
61
|
+
}) {
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* A grant scoped to the current run.
|
|
65
|
+
*
|
|
66
|
+
* Version 2 captures the requesting fiber's normalized conjunction of any-of
|
|
67
|
+
* capability-pattern groups. Replay intersects it with the constructor ceiling.
|
|
68
|
+
* Version 1 omitted this boundary and cannot safely activate authority.
|
|
69
|
+
*
|
|
70
|
+
* @category models
|
|
71
|
+
* @since 1.0.0-rc.0
|
|
72
|
+
*/
|
|
73
|
+
export class RunGrant extends Schema.TaggedClass()("@smthrs/kernel/GrantEvent/RunGrant", {
|
|
74
|
+
eventType: Schema.Literal("flows.kernel.grant.run.v2"),
|
|
75
|
+
requestId: Schema.String,
|
|
76
|
+
runId: Schema.String,
|
|
77
|
+
planDigest: Schema.String,
|
|
78
|
+
capability: Capability,
|
|
79
|
+
pattern: CapabilityPattern,
|
|
80
|
+
ceiling: Schema.Array(Schema.Array(CapabilityPattern)),
|
|
81
|
+
scope: Schema.Literal("run"),
|
|
82
|
+
tier: GrantTier
|
|
83
|
+
}) {
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* A denied permission request.
|
|
87
|
+
*
|
|
88
|
+
* @category models
|
|
89
|
+
* @since 1.0.0-rc.0
|
|
90
|
+
*/
|
|
91
|
+
export class DeniedGrant extends Schema.TaggedClass()("@smthrs/kernel/GrantEvent/DeniedGrant", {
|
|
92
|
+
eventType: Schema.Literal("flows.kernel.grant.denied.v1"),
|
|
93
|
+
requestId: Schema.String,
|
|
94
|
+
runId: Schema.String,
|
|
95
|
+
planDigest: Schema.optional(Schema.String),
|
|
96
|
+
capability: Capability,
|
|
97
|
+
pattern: CapabilityPattern,
|
|
98
|
+
scope: Schema.Literal("once"),
|
|
99
|
+
tier: GrantTier
|
|
100
|
+
}) {
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* A capability envelope grant.
|
|
104
|
+
*
|
|
105
|
+
* Envelope grants are not attached to an individual request. `planDigest`
|
|
106
|
+
* binds the decision to exactly the plan shown to the approver. A `run`
|
|
107
|
+
* envelope is replayed only for that run and digest; a `remembered` envelope
|
|
108
|
+
* becomes remembered predicate grants for future plans while retaining its
|
|
109
|
+
* origin digest as audit evidence.
|
|
110
|
+
*
|
|
111
|
+
* @category models
|
|
112
|
+
* @since 1.0.0-rc.0
|
|
113
|
+
*/
|
|
114
|
+
export class EnvelopeGrant extends Schema.TaggedClass()("@smthrs/kernel/GrantEvent/EnvelopeGrant", {
|
|
115
|
+
eventType: Schema.Literal("flows.kernel.grant.envelope.v1"),
|
|
116
|
+
runId: Schema.String,
|
|
117
|
+
planDigest: Schema.String,
|
|
118
|
+
patterns: Schema.Array(CapabilityPattern),
|
|
119
|
+
scope: Schema.Literals(["run", "remembered"])
|
|
120
|
+
}) {
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* All durable grant events understood by the kernel.
|
|
124
|
+
*
|
|
125
|
+
* @category models
|
|
126
|
+
* @since 1.0.0-rc.0
|
|
127
|
+
*/
|
|
128
|
+
export const GrantEventSchema = Schema.Union([
|
|
129
|
+
OnceGrant,
|
|
130
|
+
RememberedGrant,
|
|
131
|
+
DeniedGrant,
|
|
132
|
+
EnvelopeGrant,
|
|
133
|
+
RunGrant
|
|
134
|
+
]);
|
|
135
|
+
/**
|
|
136
|
+
* Decodes one JSON-compatible journal payload into a grant event.
|
|
137
|
+
*
|
|
138
|
+
* Excess payload keys are rejected rather than stripped. Grant payloads are
|
|
139
|
+
* replayed as active permission authority, so a payload that mixes fields
|
|
140
|
+
* from two grant variants — for example an envelope carrying request-only
|
|
141
|
+
* fields — is treated as corrupt instead of silently narrowed to whichever
|
|
142
|
+
* variant its declared keys happen to satisfy.
|
|
143
|
+
*
|
|
144
|
+
* @category decoding
|
|
145
|
+
* @since 1.0.0-rc.0
|
|
146
|
+
*/
|
|
147
|
+
export const decode = Schema.decodeUnknownResult(GrantEventSchema, { onExcessProperty: "error" });
|
|
148
|
+
/**
|
|
149
|
+
* Encodes a grant event into its JSON-compatible journal payload.
|
|
150
|
+
*
|
|
151
|
+
* @category encoding
|
|
152
|
+
* @since 1.0.0-rc.0
|
|
153
|
+
*/
|
|
154
|
+
export const encode = Schema.encodeUnknownResult(GrantEventSchema);
|
|
155
|
+
//# sourceMappingURL=GrantEvent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GrantEvent.js","sourceRoot":"","sources":["../../src/GrantEvent.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Durable grant decision events.\n *\n * Governing design:\n * `docs/specs/Concepts/Permission Kernel.md` and\n * `docs/specs/Concepts/Journal Queue.md`.\n *\n * @since 1.0.0-rc.0\n */\n\nimport { Capability, CapabilityPattern } from \"@smthrs/capability/Capability\"\nimport * as Schema from \"effect/Schema\"\n\n/**\n * The tier at which a capability decision was made.\n *\n * @category schemas\n * @since 1.0.0-rc.0\n */\nexport const GrantTier = Schema.Literals([\"sealed\", \"compensable\", \"irreversible\"])\n\n/**\n * The scope selected for a permission grant.\n *\n * @category schemas\n * @since 1.0.0-rc.0\n */\nexport const GrantScope = Schema.Literals([\"once\", \"run\", \"remembered\"])\n\n/**\n * A one-call grant.\n *\n * It is durable audit evidence but is deliberately never replayed as active\n * authority.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport class OnceGrant extends Schema.TaggedClass<OnceGrant>()(\"@smthrs/kernel/GrantEvent/OnceGrant\", {\n eventType: Schema.Literal(\"flows.kernel.grant.once.v1\"),\n requestId: Schema.String,\n runId: Schema.String,\n planDigest: Schema.optional(Schema.String),\n capability: Capability,\n pattern: CapabilityPattern,\n scope: Schema.Literal(\"once\"),\n tier: GrantTier\n}) {}\n\n/**\n * A grant remembered across runs.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport class RememberedGrant extends Schema.TaggedClass<RememberedGrant>()(\n \"@smthrs/kernel/GrantEvent/RememberedGrant\",\n {\n eventType: Schema.Literal(\"flows.kernel.grant.remembered.v1\"),\n requestId: Schema.String,\n runId: Schema.String,\n planDigest: Schema.optional(Schema.String),\n capability: Capability,\n pattern: CapabilityPattern,\n scope: Schema.Literal(\"remembered\"),\n tier: GrantTier\n }\n) {}\n\n/**\n * A grant scoped to the current run.\n *\n * Version 2 captures the requesting fiber's normalized conjunction of any-of\n * capability-pattern groups. Replay intersects it with the constructor ceiling.\n * Version 1 omitted this boundary and cannot safely activate authority.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport class RunGrant extends Schema.TaggedClass<RunGrant>()(\"@smthrs/kernel/GrantEvent/RunGrant\", {\n eventType: Schema.Literal(\"flows.kernel.grant.run.v2\"),\n requestId: Schema.String,\n runId: Schema.String,\n planDigest: Schema.String,\n capability: Capability,\n pattern: CapabilityPattern,\n ceiling: Schema.Array(Schema.Array(CapabilityPattern)),\n scope: Schema.Literal(\"run\"),\n tier: GrantTier\n}) {}\n\n/**\n * A denied permission request.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport class DeniedGrant extends Schema.TaggedClass<DeniedGrant>()(\"@smthrs/kernel/GrantEvent/DeniedGrant\", {\n eventType: Schema.Literal(\"flows.kernel.grant.denied.v1\"),\n requestId: Schema.String,\n runId: Schema.String,\n planDigest: Schema.optional(Schema.String),\n capability: Capability,\n pattern: CapabilityPattern,\n scope: Schema.Literal(\"once\"),\n tier: GrantTier\n}) {}\n\n/**\n * A capability envelope grant.\n *\n * Envelope grants are not attached to an individual request. `planDigest`\n * binds the decision to exactly the plan shown to the approver. A `run`\n * envelope is replayed only for that run and digest; a `remembered` envelope\n * becomes remembered predicate grants for future plans while retaining its\n * origin digest as audit evidence.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport class EnvelopeGrant extends Schema.TaggedClass<EnvelopeGrant>()(\n \"@smthrs/kernel/GrantEvent/EnvelopeGrant\",\n {\n eventType: Schema.Literal(\"flows.kernel.grant.envelope.v1\"),\n runId: Schema.String,\n planDigest: Schema.String,\n patterns: Schema.Array(CapabilityPattern),\n scope: Schema.Literals([\"run\", \"remembered\"])\n }\n) {}\n\n/**\n * All durable grant events understood by the kernel.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport const GrantEventSchema = Schema.Union([\n OnceGrant,\n RememberedGrant,\n DeniedGrant,\n EnvelopeGrant,\n RunGrant\n])\n\n/**\n * All durable grant events understood by the kernel.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport type GrantEvent = typeof GrantEventSchema.Type\n\n/**\n * Decodes one JSON-compatible journal payload into a grant event.\n *\n * Excess payload keys are rejected rather than stripped. Grant payloads are\n * replayed as active permission authority, so a payload that mixes fields\n * from two grant variants — for example an envelope carrying request-only\n * fields — is treated as corrupt instead of silently narrowed to whichever\n * variant its declared keys happen to satisfy.\n *\n * @category decoding\n * @since 1.0.0-rc.0\n */\nexport const decode = Schema.decodeUnknownResult(GrantEventSchema, { onExcessProperty: \"error\" })\n\n/**\n * Encodes a grant event into its JSON-compatible journal payload.\n *\n * @category encoding\n * @since 1.0.0-rc.0\n */\nexport const encode = Schema.encodeUnknownResult(GrantEventSchema)\n"]}
|