@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,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional, bounded read batches on the existing filesystem host slot.
|
|
3
|
+
*
|
|
4
|
+
* @since 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { Effect, FileSystem, PlatformError, Result } from "effect"
|
|
8
|
+
|
|
9
|
+
/** Maximum operations admitted by one batch.
|
|
10
|
+
* @since 1.0.0
|
|
11
|
+
* @category constants
|
|
12
|
+
*/
|
|
13
|
+
export const maxBatchSize = 128
|
|
14
|
+
|
|
15
|
+
/** Bounded concurrency for hosts without batching.
|
|
16
|
+
* @since 1.0.0
|
|
17
|
+
* @category constants
|
|
18
|
+
*/
|
|
19
|
+
export const fallbackConcurrency = 4
|
|
20
|
+
|
|
21
|
+
/** Read operations supported by a confined batch.
|
|
22
|
+
* @since 1.0.0
|
|
23
|
+
* @category models
|
|
24
|
+
*/
|
|
25
|
+
export type BatchRequest =
|
|
26
|
+
| { readonly operation: "stat"; readonly path: string }
|
|
27
|
+
| { readonly operation: "readDirectory"; readonly path: string; readonly options?: { readonly recursive?: boolean } }
|
|
28
|
+
| { readonly operation: "digest"; readonly path: string; readonly content?: boolean }
|
|
29
|
+
| {
|
|
30
|
+
readonly operation: "glob"
|
|
31
|
+
readonly path: string
|
|
32
|
+
readonly root: string
|
|
33
|
+
readonly options?: { readonly exclude?: ReadonlyArray<string> }
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** A successful per-path observation. SHA-256 hashes raw bytes.
|
|
37
|
+
* @since 1.0.0
|
|
38
|
+
* @category models
|
|
39
|
+
*/
|
|
40
|
+
export type BatchValue =
|
|
41
|
+
| { readonly operation: "stat"; readonly info: FileSystem.File.Info }
|
|
42
|
+
| { readonly operation: "readDirectory" | "glob"; readonly paths: ReadonlyArray<string> }
|
|
43
|
+
| {
|
|
44
|
+
readonly operation: "digest"
|
|
45
|
+
readonly digest: string
|
|
46
|
+
readonly sizeBytes: number
|
|
47
|
+
readonly bytes?: Uint8Array
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** A result names its original request index, including failures.
|
|
51
|
+
* @since 1.0.0
|
|
52
|
+
* @category models
|
|
53
|
+
*/
|
|
54
|
+
export interface BatchEntry {
|
|
55
|
+
readonly index: number
|
|
56
|
+
readonly path: string
|
|
57
|
+
readonly result: Result.Result<BatchValue, PlatformError.PlatformError>
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** Results sorted by path, then request index, bound to one root inode.
|
|
61
|
+
* @since 1.0.0
|
|
62
|
+
* @category models
|
|
63
|
+
*/
|
|
64
|
+
export interface BatchResponse {
|
|
65
|
+
readonly rootIdentity: string
|
|
66
|
+
readonly entries: ReadonlyArray<BatchEntry>
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** The guarded extension, never a second service tag.
|
|
70
|
+
* @since 1.0.0
|
|
71
|
+
* @category models
|
|
72
|
+
*/
|
|
73
|
+
export interface FileSystemBatch {
|
|
74
|
+
readonly maxSize: number
|
|
75
|
+
readonly maxResponseBytes: number
|
|
76
|
+
readonly execute: (requests: ReadonlyArray<BatchRequest>) => Effect.Effect<BatchResponse, PlatformError.PlatformError>
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** Host extension identity on the guarded filesystem.
|
|
80
|
+
* @since 1.0.0
|
|
81
|
+
* @category constants
|
|
82
|
+
*/
|
|
83
|
+
export const FileSystemBatchTypeId = Symbol.for("@smthrs/kernel/FileSystemBatch")
|
|
84
|
+
|
|
85
|
+
/** Discover the guarded batch extension when the host supports it.
|
|
86
|
+
* @since 1.0.0
|
|
87
|
+
* @category accessors
|
|
88
|
+
*/
|
|
89
|
+
export const batch = (fs: FileSystem.FileSystem): FileSystemBatch | undefined =>
|
|
90
|
+
(fs as FileSystem.FileSystem & { readonly [FileSystemBatchTypeId]?: FileSystemBatch })[FileSystemBatchTypeId]
|
|
@@ -0,0 +1,174 @@
|
|
|
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
|
+
|
|
11
|
+
import { Capability, CapabilityPattern } from "@smthrs/capability/Capability"
|
|
12
|
+
import * as Schema from "effect/Schema"
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The tier at which a capability decision was made.
|
|
16
|
+
*
|
|
17
|
+
* @category schemas
|
|
18
|
+
* @since 1.0.0-rc.0
|
|
19
|
+
*/
|
|
20
|
+
export const GrantTier = Schema.Literals(["sealed", "compensable", "irreversible"])
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* The scope selected for a permission grant.
|
|
24
|
+
*
|
|
25
|
+
* @category schemas
|
|
26
|
+
* @since 1.0.0-rc.0
|
|
27
|
+
*/
|
|
28
|
+
export const GrantScope = Schema.Literals(["once", "run", "remembered"])
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* A one-call grant.
|
|
32
|
+
*
|
|
33
|
+
* It is durable audit evidence but is deliberately never replayed as active
|
|
34
|
+
* authority.
|
|
35
|
+
*
|
|
36
|
+
* @category models
|
|
37
|
+
* @since 1.0.0-rc.0
|
|
38
|
+
*/
|
|
39
|
+
export class OnceGrant extends Schema.TaggedClass<OnceGrant>()("@smthrs/kernel/GrantEvent/OnceGrant", {
|
|
40
|
+
eventType: Schema.Literal("flows.kernel.grant.once.v1"),
|
|
41
|
+
requestId: Schema.String,
|
|
42
|
+
runId: Schema.String,
|
|
43
|
+
planDigest: Schema.optional(Schema.String),
|
|
44
|
+
capability: Capability,
|
|
45
|
+
pattern: CapabilityPattern,
|
|
46
|
+
scope: Schema.Literal("once"),
|
|
47
|
+
tier: GrantTier
|
|
48
|
+
}) {}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* A grant remembered across runs.
|
|
52
|
+
*
|
|
53
|
+
* @category models
|
|
54
|
+
* @since 1.0.0-rc.0
|
|
55
|
+
*/
|
|
56
|
+
export class RememberedGrant extends Schema.TaggedClass<RememberedGrant>()(
|
|
57
|
+
"@smthrs/kernel/GrantEvent/RememberedGrant",
|
|
58
|
+
{
|
|
59
|
+
eventType: Schema.Literal("flows.kernel.grant.remembered.v1"),
|
|
60
|
+
requestId: Schema.String,
|
|
61
|
+
runId: Schema.String,
|
|
62
|
+
planDigest: Schema.optional(Schema.String),
|
|
63
|
+
capability: Capability,
|
|
64
|
+
pattern: CapabilityPattern,
|
|
65
|
+
scope: Schema.Literal("remembered"),
|
|
66
|
+
tier: GrantTier
|
|
67
|
+
}
|
|
68
|
+
) {}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* A grant scoped to the current run.
|
|
72
|
+
*
|
|
73
|
+
* Version 2 captures the requesting fiber's normalized conjunction of any-of
|
|
74
|
+
* capability-pattern groups. Replay intersects it with the constructor ceiling.
|
|
75
|
+
* Version 1 omitted this boundary and cannot safely activate authority.
|
|
76
|
+
*
|
|
77
|
+
* @category models
|
|
78
|
+
* @since 1.0.0-rc.0
|
|
79
|
+
*/
|
|
80
|
+
export class RunGrant extends Schema.TaggedClass<RunGrant>()("@smthrs/kernel/GrantEvent/RunGrant", {
|
|
81
|
+
eventType: Schema.Literal("flows.kernel.grant.run.v2"),
|
|
82
|
+
requestId: Schema.String,
|
|
83
|
+
runId: Schema.String,
|
|
84
|
+
planDigest: Schema.String,
|
|
85
|
+
capability: Capability,
|
|
86
|
+
pattern: CapabilityPattern,
|
|
87
|
+
ceiling: Schema.Array(Schema.Array(CapabilityPattern)),
|
|
88
|
+
scope: Schema.Literal("run"),
|
|
89
|
+
tier: GrantTier
|
|
90
|
+
}) {}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* A denied permission request.
|
|
94
|
+
*
|
|
95
|
+
* @category models
|
|
96
|
+
* @since 1.0.0-rc.0
|
|
97
|
+
*/
|
|
98
|
+
export class DeniedGrant extends Schema.TaggedClass<DeniedGrant>()("@smthrs/kernel/GrantEvent/DeniedGrant", {
|
|
99
|
+
eventType: Schema.Literal("flows.kernel.grant.denied.v1"),
|
|
100
|
+
requestId: Schema.String,
|
|
101
|
+
runId: Schema.String,
|
|
102
|
+
planDigest: Schema.optional(Schema.String),
|
|
103
|
+
capability: Capability,
|
|
104
|
+
pattern: CapabilityPattern,
|
|
105
|
+
scope: Schema.Literal("once"),
|
|
106
|
+
tier: GrantTier
|
|
107
|
+
}) {}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* A capability envelope grant.
|
|
111
|
+
*
|
|
112
|
+
* Envelope grants are not attached to an individual request. `planDigest`
|
|
113
|
+
* binds the decision to exactly the plan shown to the approver. A `run`
|
|
114
|
+
* envelope is replayed only for that run and digest; a `remembered` envelope
|
|
115
|
+
* becomes remembered predicate grants for future plans while retaining its
|
|
116
|
+
* origin digest as audit evidence.
|
|
117
|
+
*
|
|
118
|
+
* @category models
|
|
119
|
+
* @since 1.0.0-rc.0
|
|
120
|
+
*/
|
|
121
|
+
export class EnvelopeGrant extends Schema.TaggedClass<EnvelopeGrant>()(
|
|
122
|
+
"@smthrs/kernel/GrantEvent/EnvelopeGrant",
|
|
123
|
+
{
|
|
124
|
+
eventType: Schema.Literal("flows.kernel.grant.envelope.v1"),
|
|
125
|
+
runId: Schema.String,
|
|
126
|
+
planDigest: Schema.String,
|
|
127
|
+
patterns: Schema.Array(CapabilityPattern),
|
|
128
|
+
scope: Schema.Literals(["run", "remembered"])
|
|
129
|
+
}
|
|
130
|
+
) {}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* All durable grant events understood by the kernel.
|
|
134
|
+
*
|
|
135
|
+
* @category models
|
|
136
|
+
* @since 1.0.0-rc.0
|
|
137
|
+
*/
|
|
138
|
+
export const GrantEventSchema = Schema.Union([
|
|
139
|
+
OnceGrant,
|
|
140
|
+
RememberedGrant,
|
|
141
|
+
DeniedGrant,
|
|
142
|
+
EnvelopeGrant,
|
|
143
|
+
RunGrant
|
|
144
|
+
])
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* All durable grant events understood by the kernel.
|
|
148
|
+
*
|
|
149
|
+
* @category models
|
|
150
|
+
* @since 1.0.0-rc.0
|
|
151
|
+
*/
|
|
152
|
+
export type GrantEvent = typeof GrantEventSchema.Type
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Decodes one JSON-compatible journal payload into a grant event.
|
|
156
|
+
*
|
|
157
|
+
* Excess payload keys are rejected rather than stripped. Grant payloads are
|
|
158
|
+
* replayed as active permission authority, so a payload that mixes fields
|
|
159
|
+
* from two grant variants — for example an envelope carrying request-only
|
|
160
|
+
* fields — is treated as corrupt instead of silently narrowed to whichever
|
|
161
|
+
* variant its declared keys happen to satisfy.
|
|
162
|
+
*
|
|
163
|
+
* @category decoding
|
|
164
|
+
* @since 1.0.0-rc.0
|
|
165
|
+
*/
|
|
166
|
+
export const decode = Schema.decodeUnknownResult(GrantEventSchema, { onExcessProperty: "error" })
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Encodes a grant event into its JSON-compatible journal payload.
|
|
170
|
+
*
|
|
171
|
+
* @category encoding
|
|
172
|
+
* @since 1.0.0-rc.0
|
|
173
|
+
*/
|
|
174
|
+
export const encode = Schema.encodeUnknownResult(GrantEventSchema)
|