@astrale-os/kernel-core 0.9.0-beta.27 → 0.9.0-beta.29

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 CHANGED
@@ -6,6 +6,29 @@
6
6
 
7
7
  * remove endpoint, route, serving issuer, Publication ETag, and View placement properties from the
8
8
  Function and UI schema; graph projection now contains declaration meaning only
9
+ ## [0.9.0-beta.29](https://github.com/astrale-os/kernel/compare/kernel-core-v0.9.0-beta.28...kernel-core-v0.9.0-beta.29) (2026-08-31)
10
+
11
+
12
+ ### Features
13
+
14
+ * **auth:** enforce two-gate Function authority ([#561](https://github.com/astrale-os/kernel/issues/561)) ([c681d4b](https://github.com/astrale-os/kernel/commit/c681d4b391520906b2cad9171cd251962b200faf))
15
+
16
+
17
+ ### Dependencies
18
+
19
+ * The following workspace dependencies were updated
20
+ * dependencies
21
+ * @astrale-os/kernel-dsl bumped to 0.2.0-beta.22
22
+
23
+ ## [0.9.0-beta.28](https://github.com/astrale-os/kernel/compare/kernel-core-v0.9.0-beta.27...kernel-core-v0.9.0-beta.28) (2026-08-30)
24
+
25
+
26
+ ### Dependencies
27
+
28
+ * The following workspace dependencies were updated
29
+ * dependencies
30
+ * @astrale-os/kernel-dsl bumped to 0.2.0-beta.21
31
+
9
32
  ## [0.9.0-beta.27](https://github.com/astrale-os/kernel/compare/kernel-core-v0.9.0-beta.26...kernel-core-v0.9.0-beta.27) (2026-08-30)
10
33
 
11
34
 
@@ -59,6 +59,9 @@ export function project(domain) {
59
59
  [K.classes.method_of.self.properties.name.key]: method.name,
60
60
  [K.classes.method_of.self.properties.static.key]: method.definition.static,
61
61
  }));
62
+ addEdge(managedEdges, methodEndpoint, domainEndpoint, K.classes.of_domain.ref, normalizeProperties({
63
+ [K.classes.of_domain.self.properties.member.key]: callableMemberKey(domain, method),
64
+ }));
62
65
  }
63
66
  for (const [slug, declaration] of Object.entries(domainSchema.core.nodes)) {
64
67
  assertIdentityAuthenticationPair(domain, declaration.class, declaration.properties, slug);
@@ -248,6 +251,13 @@ function declarationDescription(definition) {
248
251
  function memberKey(definition) {
249
252
  return `${definition.ref.kind}.${definition.ref.name}`;
250
253
  }
254
+ function callableMemberKey(domain, method) {
255
+ const prefix = `${domain.origin}:`;
256
+ if (!method.key.startsWith(prefix)) {
257
+ throw new ProjectionError('PROJECTION_INVALID', 'Method key belongs to another Domain.');
258
+ }
259
+ return method.key.slice(prefix.length);
260
+ }
251
261
  /** Identity properties are supplied atomically by trusted lifecycle materialization. */
252
262
  function domainPropertiesFor(domain) {
253
263
  return normalizeProperties({
@@ -5622,41 +5622,6 @@ export declare const AuthorityRelations: Readonly<{
5622
5622
  }>;
5623
5623
  /** Exact authorized Kernel Functions for which pristine Root receives direct can_use authority. */
5624
5624
  export declare const KernelRootFunctions: readonly ((import("@astrale-os/kernel-dsl/v1").ResolvedFunction<{
5625
- kind: "bundle" | "inspect";
5626
- origin: string;
5627
- }, {
5628
- readonly mode: 'binary';
5629
- }, "authenticated", import("@astrale-os/kernel-dsl/v1").PolicyCheckExpression<import("@astrale-os/kernel-dsl/v1").PolicyRef, import("@astrale-os/kernel-dsl/v1/language").PolicyCheckObject>> & {
5630
- readonly ref: import("@astrale-os/kernel-dsl/v1").FunctionRef<"introspect"> & {
5631
- readonly origin: "kernel.astrale.ai";
5632
- };
5633
- readonly key: "kernel.astrale.ai:function.introspect";
5634
- }) | (import("@astrale-os/kernel-dsl/v1").ResolvedFunction<{
5635
- operation: string;
5636
- domains: ({
5637
- artifact: {
5638
- digest: string;
5639
- mediaType: string;
5640
- size: number;
5641
- };
5642
- currentRevision?: string | null | undefined;
5643
- } | {
5644
- publication: {
5645
- url: string;
5646
- token?: string | undefined;
5647
- etag?: string | undefined;
5648
- };
5649
- revision?: string | undefined;
5650
- currentRevision?: string | null | undefined;
5651
- })[];
5652
- }, {
5653
- readonly mode: 'binary';
5654
- }, "authorized", import("@astrale-os/kernel-dsl/v1").PolicyCheckExpression<import("@astrale-os/kernel-dsl/v1").PolicyRef, import("@astrale-os/kernel-dsl/v1/language").PolicyCheckObject>> & {
5655
- readonly ref: import("@astrale-os/kernel-dsl/v1").FunctionRef<"install"> & {
5656
- readonly origin: "kernel.astrale.ai";
5657
- };
5658
- readonly key: "kernel.astrale.ai:function.install";
5659
- }) | (import("@astrale-os/kernel-dsl/v1").ResolvedFunction<{
5660
5625
  invocation?: {
5661
5626
  source: string;
5662
5627
  id: string;
@@ -5688,6 +5653,233 @@ export declare const KernelRootFunctions: readonly ((import("@astrale-os/kernel-
5688
5653
  readonly origin: "kernel.astrale.ai";
5689
5654
  };
5690
5655
  readonly key: "kernel.astrale.ai:function.journal";
5656
+ }) | (import("@astrale-os/kernel-dsl/v1").ResolvedFunction<{
5657
+ ast: {
5658
+ format: "astrale.graph.query";
5659
+ version: "v6";
5660
+ source: {
5661
+ kind: "node";
5662
+ terms: ({
5663
+ kind: "path";
5664
+ path: string;
5665
+ } | {
5666
+ kind: "class";
5667
+ class: {
5668
+ origin: string;
5669
+ kind: "class";
5670
+ name: string;
5671
+ };
5672
+ })[];
5673
+ binding: string;
5674
+ } | {
5675
+ kind: "edge";
5676
+ terms: {
5677
+ kind: "class";
5678
+ class: {
5679
+ origin: string;
5680
+ kind: "class";
5681
+ name: string;
5682
+ };
5683
+ }[];
5684
+ bindings: {
5685
+ source: string;
5686
+ edge: string;
5687
+ target: string;
5688
+ };
5689
+ };
5690
+ steps: ({
5691
+ op: "filter";
5692
+ binding: string;
5693
+ predicate: {
5694
+ kind: "class.satisfies";
5695
+ class: {
5696
+ origin: string;
5697
+ kind: "class";
5698
+ name: string;
5699
+ };
5700
+ } | {
5701
+ kind: "class.equal";
5702
+ class: {
5703
+ origin: string;
5704
+ kind: "class";
5705
+ name: string;
5706
+ };
5707
+ } | {
5708
+ kind: "property.equal";
5709
+ property: string;
5710
+ value: unknown;
5711
+ } | {
5712
+ kind: "property.present";
5713
+ property: string;
5714
+ } | {
5715
+ kind: "identity.equal";
5716
+ identity: string | {
5717
+ source: string;
5718
+ target: string;
5719
+ class: string;
5720
+ };
5721
+ };
5722
+ } | {
5723
+ op: "expand";
5724
+ from: string;
5725
+ via: {
5726
+ origin: string;
5727
+ kind: "class";
5728
+ name: string;
5729
+ }[];
5730
+ direction: "incident" | "incoming" | "outgoing";
5731
+ bindings: {
5732
+ edge: string;
5733
+ node: string;
5734
+ };
5735
+ })[];
5736
+ select: {
5737
+ kind: "graph";
5738
+ binding: string;
5739
+ order?: {
5740
+ property: string;
5741
+ direction: "asc" | "desc";
5742
+ unranked: "first" | "last";
5743
+ } | undefined;
5744
+ } | {
5745
+ kind: "nodes";
5746
+ binding: string;
5747
+ projection: {
5748
+ kind: "reference" | "value";
5749
+ };
5750
+ order?: {
5751
+ property: string;
5752
+ direction: "asc" | "desc";
5753
+ unranked: "first" | "last";
5754
+ } | undefined;
5755
+ } | {
5756
+ kind: "edges";
5757
+ binding: string;
5758
+ projection: {
5759
+ edge: "reference" | "value";
5760
+ source: "reference" | "value";
5761
+ target: "reference" | "value";
5762
+ };
5763
+ order?: {
5764
+ property: string;
5765
+ direction: "asc" | "desc";
5766
+ unranked: "first" | "last";
5767
+ } | undefined;
5768
+ };
5769
+ };
5770
+ expected?: {
5771
+ origin: string;
5772
+ revision: string;
5773
+ }[] | undefined;
5774
+ page: {
5775
+ size: number;
5776
+ after?: string | undefined;
5777
+ };
5778
+ }, {
5779
+ readonly mode: 'value';
5780
+ readonly value: {
5781
+ result: {
5782
+ kind: "graph";
5783
+ graph: {
5784
+ nodes: {
5785
+ id: string;
5786
+ class: string;
5787
+ props: Record<string, unknown>;
5788
+ }[];
5789
+ edges: {
5790
+ source: string;
5791
+ target: string;
5792
+ class: string;
5793
+ slug?: import("../../graph/edge/index.js").EdgeSlug | undefined;
5794
+ props: Record<string, unknown>;
5795
+ }[];
5796
+ };
5797
+ selection: {
5798
+ kind: "node";
5799
+ ids: string[];
5800
+ } | {
5801
+ kind: "edge";
5802
+ keys: {
5803
+ source: string;
5804
+ target: string;
5805
+ class: string;
5806
+ }[];
5807
+ };
5808
+ } | {
5809
+ kind: "nodes";
5810
+ nodes: ({
5811
+ kind: "reference";
5812
+ value: {
5813
+ id: string;
5814
+ class: string;
5815
+ };
5816
+ } | {
5817
+ kind: "value";
5818
+ value: {
5819
+ id: string;
5820
+ class: string;
5821
+ props: Record<string, unknown>;
5822
+ };
5823
+ })[];
5824
+ } | {
5825
+ kind: "edges";
5826
+ edges: {
5827
+ edge: {
5828
+ kind: "reference";
5829
+ value: {
5830
+ source: string;
5831
+ target: string;
5832
+ class: string;
5833
+ };
5834
+ } | {
5835
+ kind: "value";
5836
+ value: {
5837
+ source: string;
5838
+ target: string;
5839
+ class: string;
5840
+ slug?: import("../../graph/edge/index.js").EdgeSlug | undefined;
5841
+ props: Record<string, unknown>;
5842
+ };
5843
+ };
5844
+ source: {
5845
+ kind: "reference";
5846
+ value: {
5847
+ id: string;
5848
+ class: string;
5849
+ };
5850
+ } | {
5851
+ kind: "value";
5852
+ value: {
5853
+ id: string;
5854
+ class: string;
5855
+ props: Record<string, unknown>;
5856
+ };
5857
+ };
5858
+ target: {
5859
+ kind: "reference";
5860
+ value: {
5861
+ id: string;
5862
+ class: string;
5863
+ };
5864
+ } | {
5865
+ kind: "value";
5866
+ value: {
5867
+ id: string;
5868
+ class: string;
5869
+ props: Record<string, unknown>;
5870
+ };
5871
+ };
5872
+ }[];
5873
+ };
5874
+ page: {
5875
+ next?: string | undefined;
5876
+ };
5877
+ };
5878
+ }, "authorized", import("@astrale-os/kernel-dsl/v1").PolicyCheckExpression<import("@astrale-os/kernel-dsl/v1").PolicyRef, import("@astrale-os/kernel-dsl/v1/language").PolicyCheckObject>> & {
5879
+ readonly ref: import("@astrale-os/kernel-dsl/v1").FunctionRef<"query"> & {
5880
+ readonly origin: "kernel.astrale.ai";
5881
+ };
5882
+ readonly key: "kernel.astrale.ai:function.query";
5691
5883
  }) | (import("@astrale-os/kernel-dsl/v1").ResolvedFunction<{
5692
5884
  ast: {
5693
5885
  format: "astrale.graph.mutation";
@@ -6191,232 +6383,40 @@ export declare const KernelRootFunctions: readonly ((import("@astrale-os/kernel-
6191
6383
  };
6192
6384
  readonly key: "kernel.astrale.ai:function.provision";
6193
6385
  }) | (import("@astrale-os/kernel-dsl/v1").ResolvedFunction<{
6194
- ast: {
6195
- format: "astrale.graph.query";
6196
- version: "v6";
6197
- source: {
6198
- kind: "node";
6199
- terms: ({
6200
- kind: "path";
6201
- path: string;
6202
- } | {
6203
- kind: "class";
6204
- class: {
6205
- origin: string;
6206
- kind: "class";
6207
- name: string;
6208
- };
6209
- })[];
6210
- binding: string;
6211
- } | {
6212
- kind: "edge";
6213
- terms: {
6214
- kind: "class";
6215
- class: {
6216
- origin: string;
6217
- kind: "class";
6218
- name: string;
6219
- };
6220
- }[];
6221
- bindings: {
6222
- source: string;
6223
- edge: string;
6224
- target: string;
6225
- };
6386
+ operation: string;
6387
+ domains: ({
6388
+ artifact: {
6389
+ digest: string;
6390
+ mediaType: string;
6391
+ size: number;
6226
6392
  };
6227
- steps: ({
6228
- op: "filter";
6229
- binding: string;
6230
- predicate: {
6231
- kind: "class.satisfies";
6232
- class: {
6233
- origin: string;
6234
- kind: "class";
6235
- name: string;
6236
- };
6237
- } | {
6238
- kind: "class.equal";
6239
- class: {
6240
- origin: string;
6241
- kind: "class";
6242
- name: string;
6243
- };
6244
- } | {
6245
- kind: "property.equal";
6246
- property: string;
6247
- value: unknown;
6248
- } | {
6249
- kind: "property.present";
6250
- property: string;
6251
- } | {
6252
- kind: "identity.equal";
6253
- identity: string | {
6254
- source: string;
6255
- target: string;
6256
- class: string;
6257
- };
6258
- };
6259
- } | {
6260
- op: "expand";
6261
- from: string;
6262
- via: {
6263
- origin: string;
6264
- kind: "class";
6265
- name: string;
6266
- }[];
6267
- direction: "incident" | "incoming" | "outgoing";
6268
- bindings: {
6269
- edge: string;
6270
- node: string;
6271
- };
6272
- })[];
6273
- select: {
6274
- kind: "graph";
6275
- binding: string;
6276
- order?: {
6277
- property: string;
6278
- direction: "asc" | "desc";
6279
- unranked: "first" | "last";
6280
- } | undefined;
6281
- } | {
6282
- kind: "nodes";
6283
- binding: string;
6284
- projection: {
6285
- kind: "reference" | "value";
6286
- };
6287
- order?: {
6288
- property: string;
6289
- direction: "asc" | "desc";
6290
- unranked: "first" | "last";
6291
- } | undefined;
6292
- } | {
6293
- kind: "edges";
6294
- binding: string;
6295
- projection: {
6296
- edge: "reference" | "value";
6297
- source: "reference" | "value";
6298
- target: "reference" | "value";
6299
- };
6300
- order?: {
6301
- property: string;
6302
- direction: "asc" | "desc";
6303
- unranked: "first" | "last";
6304
- } | undefined;
6393
+ currentRevision?: string | null | undefined;
6394
+ } | {
6395
+ publication: {
6396
+ url: string;
6397
+ token?: string | undefined;
6398
+ etag?: string | undefined;
6305
6399
  };
6306
- };
6307
- expected?: {
6308
- origin: string;
6309
- revision: string;
6310
- }[] | undefined;
6311
- page: {
6312
- size: number;
6313
- after?: string | undefined;
6314
- };
6400
+ revision?: string | undefined;
6401
+ currentRevision?: string | null | undefined;
6402
+ })[];
6315
6403
  }, {
6316
- readonly mode: 'value';
6317
- readonly value: {
6318
- result: {
6319
- kind: "graph";
6320
- graph: {
6321
- nodes: {
6322
- id: string;
6323
- class: string;
6324
- props: Record<string, unknown>;
6325
- }[];
6326
- edges: {
6327
- source: string;
6328
- target: string;
6329
- class: string;
6330
- slug?: import("../../graph/edge/index.js").EdgeSlug | undefined;
6331
- props: Record<string, unknown>;
6332
- }[];
6333
- };
6334
- selection: {
6335
- kind: "node";
6336
- ids: string[];
6337
- } | {
6338
- kind: "edge";
6339
- keys: {
6340
- source: string;
6341
- target: string;
6342
- class: string;
6343
- }[];
6344
- };
6345
- } | {
6346
- kind: "nodes";
6347
- nodes: ({
6348
- kind: "reference";
6349
- value: {
6350
- id: string;
6351
- class: string;
6352
- };
6353
- } | {
6354
- kind: "value";
6355
- value: {
6356
- id: string;
6357
- class: string;
6358
- props: Record<string, unknown>;
6359
- };
6360
- })[];
6361
- } | {
6362
- kind: "edges";
6363
- edges: {
6364
- edge: {
6365
- kind: "reference";
6366
- value: {
6367
- source: string;
6368
- target: string;
6369
- class: string;
6370
- };
6371
- } | {
6372
- kind: "value";
6373
- value: {
6374
- source: string;
6375
- target: string;
6376
- class: string;
6377
- slug?: import("../../graph/edge/index.js").EdgeSlug | undefined;
6378
- props: Record<string, unknown>;
6379
- };
6380
- };
6381
- source: {
6382
- kind: "reference";
6383
- value: {
6384
- id: string;
6385
- class: string;
6386
- };
6387
- } | {
6388
- kind: "value";
6389
- value: {
6390
- id: string;
6391
- class: string;
6392
- props: Record<string, unknown>;
6393
- };
6394
- };
6395
- target: {
6396
- kind: "reference";
6397
- value: {
6398
- id: string;
6399
- class: string;
6400
- };
6401
- } | {
6402
- kind: "value";
6403
- value: {
6404
- id: string;
6405
- class: string;
6406
- props: Record<string, unknown>;
6407
- };
6408
- };
6409
- }[];
6410
- };
6411
- page: {
6412
- next?: string | undefined;
6413
- };
6414
- };
6404
+ readonly mode: 'binary';
6415
6405
  }, "authorized", import("@astrale-os/kernel-dsl/v1").PolicyCheckExpression<import("@astrale-os/kernel-dsl/v1").PolicyRef, import("@astrale-os/kernel-dsl/v1/language").PolicyCheckObject>> & {
6416
- readonly ref: import("@astrale-os/kernel-dsl/v1").FunctionRef<"query"> & {
6406
+ readonly ref: import("@astrale-os/kernel-dsl/v1").FunctionRef<"install"> & {
6417
6407
  readonly origin: "kernel.astrale.ai";
6418
6408
  };
6419
- readonly key: "kernel.astrale.ai:function.query";
6409
+ readonly key: "kernel.astrale.ai:function.install";
6410
+ }) | (import("@astrale-os/kernel-dsl/v1").ResolvedFunction<{
6411
+ kind: "bundle" | "inspect";
6412
+ origin: string;
6413
+ }, {
6414
+ readonly mode: 'binary';
6415
+ }, "authenticated", import("@astrale-os/kernel-dsl/v1").PolicyCheckExpression<import("@astrale-os/kernel-dsl/v1").PolicyRef, import("@astrale-os/kernel-dsl/v1/language").PolicyCheckObject>> & {
6416
+ readonly ref: import("@astrale-os/kernel-dsl/v1").FunctionRef<"introspect"> & {
6417
+ readonly origin: "kernel.astrale.ai";
6418
+ };
6419
+ readonly key: "kernel.astrale.ai:function.introspect";
6420
6420
  }) | (import("@astrale-os/kernel-dsl/v1").ResolvedFunction<{
6421
6421
  operation: string;
6422
6422
  origin: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astrale-os/kernel-core",
3
- "version": "0.9.0-beta.27",
3
+ "version": "0.9.0-beta.29",
4
4
  "description": "Astrale Kernel Core - Types, Invariants, and Pure Logic",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -160,7 +160,7 @@
160
160
  "access": "public"
161
161
  },
162
162
  "dependencies": {
163
- "@astrale-os/kernel-dsl": "0.2.0-beta.20",
163
+ "@astrale-os/kernel-dsl": "0.2.0-beta.22",
164
164
  "@noble/hashes": "2.3.0",
165
165
  "@types/json-schema": "^7.0.15",
166
166
  "dequal": "2.0.3"