@graview/core 0.1.0 → 0.1.2

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.
Files changed (292) hide show
  1. package/README.md +7 -0
  2. package/dist/app.d.ts +17 -0
  3. package/dist/app.d.ts.map +1 -1
  4. package/dist/app.js.map +1 -1
  5. package/dist/arrange.d.ts +3 -2
  6. package/dist/arrange.d.ts.map +1 -1
  7. package/dist/arrange.js +19 -2
  8. package/dist/arrange.js.map +1 -1
  9. package/dist/beginning.d.ts +5 -2
  10. package/dist/beginning.d.ts.map +1 -1
  11. package/dist/beginning.js +28 -0
  12. package/dist/beginning.js.map +1 -1
  13. package/dist/capabilities.d.ts +32 -0
  14. package/dist/capabilities.d.ts.map +1 -0
  15. package/dist/capabilities.js +31 -0
  16. package/dist/capabilities.js.map +1 -0
  17. package/dist/cli/check/index.d.ts +1 -0
  18. package/dist/cli/check/index.d.ts.map +1 -1
  19. package/dist/cli/check/index.js +1 -0
  20. package/dist/cli/check/index.js.map +1 -1
  21. package/dist/cli/check/lenses.d.ts.map +1 -1
  22. package/dist/cli/check/lenses.js +25 -0
  23. package/dist/cli/check/lenses.js.map +1 -1
  24. package/dist/cli/check/policy.d.ts.map +1 -1
  25. package/dist/cli/check/policy.js +35 -0
  26. package/dist/cli/check/policy.js.map +1 -1
  27. package/dist/cli/check/relations.d.ts.map +1 -1
  28. package/dist/cli/check/relations.js +31 -0
  29. package/dist/cli/check/relations.js.map +1 -1
  30. package/dist/cli/check/views.d.ts +14 -0
  31. package/dist/cli/check/views.d.ts.map +1 -0
  32. package/dist/cli/check/views.js +27 -0
  33. package/dist/cli/check/views.js.map +1 -0
  34. package/dist/cli/check.d.ts.map +1 -1
  35. package/dist/cli/check.js +2 -1
  36. package/dist/cli/check.js.map +1 -1
  37. package/dist/cli/create.d.ts +1 -1
  38. package/dist/cli/create.d.ts.map +1 -1
  39. package/dist/cli/create.js +63 -1
  40. package/dist/cli/create.js.map +1 -1
  41. package/dist/cli/index.d.ts +18 -1
  42. package/dist/cli/index.d.ts.map +1 -1
  43. package/dist/cli/index.js +66 -1
  44. package/dist/cli/index.js.map +1 -1
  45. package/dist/conformance/fixtures.d.ts +41 -0
  46. package/dist/conformance/fixtures.d.ts.map +1 -0
  47. package/dist/conformance/fixtures.js +950 -0
  48. package/dist/conformance/fixtures.js.map +1 -0
  49. package/dist/conformance/index.d.ts +54 -0
  50. package/dist/conformance/index.d.ts.map +1 -0
  51. package/dist/conformance/index.js +81 -0
  52. package/dist/conformance/index.js.map +1 -0
  53. package/dist/document/canonical.d.ts +4 -0
  54. package/dist/document/canonical.d.ts.map +1 -0
  55. package/dist/document/canonical.js +29 -0
  56. package/dist/document/canonical.js.map +1 -0
  57. package/dist/document/compile.d.ts +43 -0
  58. package/dist/document/compile.d.ts.map +1 -0
  59. package/dist/document/compile.js +787 -0
  60. package/dist/document/compile.js.map +1 -0
  61. package/dist/document/diff.d.ts +32 -0
  62. package/dist/document/diff.d.ts.map +1 -0
  63. package/dist/document/diff.js +143 -0
  64. package/dist/document/diff.js.map +1 -0
  65. package/dist/document/edit.d.ts +63 -0
  66. package/dist/document/edit.d.ts.map +1 -0
  67. package/dist/document/edit.js +1420 -0
  68. package/dist/document/edit.js.map +1 -0
  69. package/dist/document/expr/analyze.d.ts +14 -0
  70. package/dist/document/expr/analyze.d.ts.map +1 -0
  71. package/dist/document/expr/analyze.js +52 -0
  72. package/dist/document/expr/analyze.js.map +1 -0
  73. package/dist/document/expr/evaluate.d.ts +36 -0
  74. package/dist/document/expr/evaluate.d.ts.map +1 -0
  75. package/dist/document/expr/evaluate.js +344 -0
  76. package/dist/document/expr/evaluate.js.map +1 -0
  77. package/dist/document/expr/index.d.ts +8 -0
  78. package/dist/document/expr/index.d.ts.map +1 -0
  79. package/dist/document/expr/index.js +5 -0
  80. package/dist/document/expr/index.js.map +1 -0
  81. package/dist/document/expr/parse.d.ts +50 -0
  82. package/dist/document/expr/parse.d.ts.map +1 -0
  83. package/dist/document/expr/parse.js +240 -0
  84. package/dist/document/expr/parse.js.map +1 -0
  85. package/dist/document/expr/print.d.ts +4 -0
  86. package/dist/document/expr/print.d.ts.map +1 -0
  87. package/dist/document/expr/print.js +81 -0
  88. package/dist/document/expr/print.js.map +1 -0
  89. package/dist/document/findings.d.ts +15 -0
  90. package/dist/document/findings.d.ts.map +1 -0
  91. package/dist/document/findings.js +30 -0
  92. package/dist/document/findings.js.map +1 -0
  93. package/dist/document/graview-template.d.ts +148 -0
  94. package/dist/document/graview-template.d.ts.map +1 -0
  95. package/dist/document/graview-template.js +450 -0
  96. package/dist/document/graview-template.js.map +1 -0
  97. package/dist/document/index.d.ts +27 -0
  98. package/dist/document/index.d.ts.map +1 -0
  99. package/dist/document/index.js +16 -0
  100. package/dist/document/index.js.map +1 -0
  101. package/dist/document/migrate.d.ts +41 -0
  102. package/dist/document/migrate.d.ts.map +1 -0
  103. package/dist/document/migrate.js +252 -0
  104. package/dist/document/migrate.js.map +1 -0
  105. package/dist/document/patch.d.ts +16 -0
  106. package/dist/document/patch.d.ts.map +1 -0
  107. package/dist/document/patch.js +79 -0
  108. package/dist/document/patch.js.map +1 -0
  109. package/dist/document/rules.d.ts +40 -0
  110. package/dist/document/rules.d.ts.map +1 -0
  111. package/dist/document/rules.js +88 -0
  112. package/dist/document/rules.js.map +1 -0
  113. package/dist/document/schema.d.ts +459 -0
  114. package/dist/document/schema.d.ts.map +1 -0
  115. package/dist/document/schema.js +197 -0
  116. package/dist/document/schema.js.map +1 -0
  117. package/dist/document/template.d.ts +28 -0
  118. package/dist/document/template.d.ts.map +1 -0
  119. package/dist/document/template.js +117 -0
  120. package/dist/document/template.js.map +1 -0
  121. package/dist/document/to-document.d.ts +34 -0
  122. package/dist/document/to-document.d.ts.map +1 -0
  123. package/dist/document/to-document.js +182 -0
  124. package/dist/document/to-document.js.map +1 -0
  125. package/dist/document/upgrade.d.ts +9 -0
  126. package/dist/document/upgrade.d.ts.map +1 -0
  127. package/dist/document/upgrade.js +19 -0
  128. package/dist/document/upgrade.js.map +1 -0
  129. package/dist/document/views.d.ts +65 -0
  130. package/dist/document/views.d.ts.map +1 -0
  131. package/dist/document/views.js +264 -0
  132. package/dist/document/views.js.map +1 -0
  133. package/dist/formats.d.ts +50 -0
  134. package/dist/formats.d.ts.map +1 -0
  135. package/dist/formats.js +75 -0
  136. package/dist/formats.js.map +1 -0
  137. package/dist/graph/graph.d.ts +52 -3
  138. package/dist/graph/graph.d.ts.map +1 -1
  139. package/dist/graph/graph.js +169 -16
  140. package/dist/graph/graph.js.map +1 -1
  141. package/dist/index.d.ts +40 -17
  142. package/dist/index.d.ts.map +1 -1
  143. package/dist/index.js +29 -10
  144. package/dist/index.js.map +1 -1
  145. package/dist/integrity.d.ts +46 -0
  146. package/dist/integrity.d.ts.map +1 -0
  147. package/dist/integrity.js +179 -0
  148. package/dist/integrity.js.map +1 -0
  149. package/dist/invariants/engine.d.ts +8 -0
  150. package/dist/invariants/engine.d.ts.map +1 -1
  151. package/dist/invariants/engine.js +40 -2
  152. package/dist/invariants/engine.js.map +1 -1
  153. package/dist/invariants/types.d.ts +19 -0
  154. package/dist/invariants/types.d.ts.map +1 -1
  155. package/dist/labels.d.ts +65 -0
  156. package/dist/labels.d.ts.map +1 -0
  157. package/dist/labels.js +123 -0
  158. package/dist/labels.js.map +1 -0
  159. package/dist/mutations/define-mutation.d.ts.map +1 -1
  160. package/dist/mutations/define-mutation.js +2 -3
  161. package/dist/mutations/define-mutation.js.map +1 -1
  162. package/dist/mutations/derive-edits.d.ts.map +1 -1
  163. package/dist/mutations/derive-edits.js +20 -1
  164. package/dist/mutations/derive-edits.js.map +1 -1
  165. package/dist/mutations/form.d.ts +9 -0
  166. package/dist/mutations/form.d.ts.map +1 -1
  167. package/dist/mutations/form.js +20 -0
  168. package/dist/mutations/form.js.map +1 -1
  169. package/dist/mutations/node-ref.d.ts +6 -0
  170. package/dist/mutations/node-ref.d.ts.map +1 -1
  171. package/dist/mutations/node-ref.js +22 -8
  172. package/dist/mutations/node-ref.js.map +1 -1
  173. package/dist/mutations/types.d.ts +8 -0
  174. package/dist/mutations/types.d.ts.map +1 -1
  175. package/dist/mutations/words.d.ts +49 -0
  176. package/dist/mutations/words.d.ts.map +1 -0
  177. package/dist/mutations/words.js +61 -0
  178. package/dist/mutations/words.js.map +1 -0
  179. package/dist/ops/log.d.ts +145 -4
  180. package/dist/ops/log.d.ts.map +1 -1
  181. package/dist/ops/log.js +220 -51
  182. package/dist/ops/log.js.map +1 -1
  183. package/dist/ops/revisions.d.ts +66 -0
  184. package/dist/ops/revisions.d.ts.map +1 -0
  185. package/dist/ops/revisions.js +97 -0
  186. package/dist/ops/revisions.js.map +1 -0
  187. package/dist/ops/types.d.ts +49 -1
  188. package/dist/ops/types.d.ts.map +1 -1
  189. package/dist/ops/undo.d.ts +23 -2
  190. package/dist/ops/undo.d.ts.map +1 -1
  191. package/dist/ops/undo.js +107 -1
  192. package/dist/ops/undo.js.map +1 -1
  193. package/dist/ops/withheld.d.ts +37 -0
  194. package/dist/ops/withheld.d.ts.map +1 -0
  195. package/dist/ops/withheld.js +84 -0
  196. package/dist/ops/withheld.js.map +1 -0
  197. package/dist/permissions/policy.d.ts +15 -0
  198. package/dist/permissions/policy.d.ts.map +1 -1
  199. package/dist/permissions/policy.js +28 -1
  200. package/dist/permissions/policy.js.map +1 -1
  201. package/dist/permissions/sight.d.ts +50 -0
  202. package/dist/permissions/sight.d.ts.map +1 -0
  203. package/dist/permissions/sight.js +76 -0
  204. package/dist/permissions/sight.js.map +1 -0
  205. package/dist/permissions/types.d.ts +26 -0
  206. package/dist/permissions/types.d.ts.map +1 -1
  207. package/dist/permissions/types.js.map +1 -1
  208. package/dist/persistence/memory.d.ts.map +1 -1
  209. package/dist/persistence/memory.js +25 -0
  210. package/dist/persistence/memory.js.map +1 -1
  211. package/dist/persistence/sql.d.ts +43 -0
  212. package/dist/persistence/sql.d.ts.map +1 -0
  213. package/dist/persistence/sql.js +154 -0
  214. package/dist/persistence/sql.js.map +1 -0
  215. package/dist/persistence/sqlite.d.ts +17 -3
  216. package/dist/persistence/sqlite.d.ts.map +1 -1
  217. package/dist/persistence/sqlite.js +32 -96
  218. package/dist/persistence/sqlite.js.map +1 -1
  219. package/dist/persistence/types.d.ts +19 -0
  220. package/dist/persistence/types.d.ts.map +1 -1
  221. package/dist/presence.d.ts +31 -0
  222. package/dist/presence.d.ts.map +1 -1
  223. package/dist/presence.js +36 -0
  224. package/dist/presence.js.map +1 -1
  225. package/dist/scaffold/from-template.d.ts +16 -0
  226. package/dist/scaffold/from-template.d.ts.map +1 -0
  227. package/dist/scaffold/from-template.js +157 -0
  228. package/dist/scaffold/from-template.js.map +1 -0
  229. package/dist/scaffold/index.d.ts +10 -1
  230. package/dist/scaffold/index.d.ts.map +1 -1
  231. package/dist/scaffold/index.js +35 -7
  232. package/dist/scaffold/index.js.map +1 -1
  233. package/dist/scaffold/names.d.ts +4 -0
  234. package/dist/scaffold/names.d.ts.map +1 -1
  235. package/dist/scaffold/names.js.map +1 -1
  236. package/dist/scaffold/project.d.ts +1 -1
  237. package/dist/scaffold/project.d.ts.map +1 -1
  238. package/dist/scaffold/project.js +44 -13
  239. package/dist/scaffold/project.js.map +1 -1
  240. package/dist/scaffold/ui.d.ts.map +1 -1
  241. package/dist/scaffold/ui.js +19 -10
  242. package/dist/scaffold/ui.js.map +1 -1
  243. package/dist/schema/define-node.d.ts +20 -0
  244. package/dist/schema/define-node.d.ts.map +1 -1
  245. package/dist/schema/define-node.js +27 -2
  246. package/dist/schema/define-node.js.map +1 -1
  247. package/dist/schema/path.d.ts +19 -0
  248. package/dist/schema/path.d.ts.map +1 -0
  249. package/dist/schema/path.js +34 -0
  250. package/dist/schema/path.js.map +1 -0
  251. package/dist/schema/types.d.ts +6 -0
  252. package/dist/schema/types.d.ts.map +1 -1
  253. package/dist/seen.d.ts +58 -0
  254. package/dist/seen.d.ts.map +1 -0
  255. package/dist/seen.js +194 -0
  256. package/dist/seen.js.map +1 -0
  257. package/dist/store.d.ts +317 -8
  258. package/dist/store.d.ts.map +1 -1
  259. package/dist/store.js +720 -37
  260. package/dist/store.js.map +1 -1
  261. package/dist/testing.d.ts +6 -0
  262. package/dist/testing.d.ts.map +1 -1
  263. package/dist/testing.js +3 -1
  264. package/dist/testing.js.map +1 -1
  265. package/dist/theme/palettes.d.ts.map +1 -1
  266. package/dist/theme/palettes.js +4 -0
  267. package/dist/theme/palettes.js.map +1 -1
  268. package/dist/theme/types.d.ts +9 -0
  269. package/dist/theme/types.d.ts.map +1 -1
  270. package/dist/theme/types.js +4 -0
  271. package/dist/theme/types.js.map +1 -1
  272. package/dist/validate-graph.d.ts +83 -0
  273. package/dist/validate-graph.d.ts.map +1 -0
  274. package/dist/validate-graph.js +288 -0
  275. package/dist/validate-graph.js.map +1 -0
  276. package/dist/version.d.ts +3 -0
  277. package/dist/version.d.ts.map +1 -0
  278. package/dist/version.js +3 -0
  279. package/dist/version.js.map +1 -0
  280. package/dist/views/types.d.ts +8 -0
  281. package/dist/views/types.d.ts.map +1 -1
  282. package/dist/views/types.js +5 -0
  283. package/dist/views/types.js.map +1 -1
  284. package/dist/watched.d.ts +39 -0
  285. package/dist/watched.d.ts.map +1 -1
  286. package/dist/watched.js +94 -1
  287. package/dist/watched.js.map +1 -1
  288. package/dist/who.d.ts +24 -1
  289. package/dist/who.d.ts.map +1 -1
  290. package/dist/who.js +49 -2
  291. package/dist/who.js.map +1 -1
  292. package/package.json +9 -1
package/dist/seen.d.ts ADDED
@@ -0,0 +1,58 @@
1
+ import { type LogReading } from "./ops/log.js";
2
+ import type { Operation } from "./ops/types.js";
3
+ import type { Policy, Principal } from "./permissions/types.js";
4
+ import type { AnySchema } from "./schema/schema.js";
5
+ import type { Store } from "./store.js";
6
+ /** What a store reads to judge a seat's sight: its policy, its graph and its log. */
7
+ interface Judged {
8
+ readonly policy: Policy | undefined;
9
+ readonly graph: {
10
+ getNode(id: string): {
11
+ readonly id: string;
12
+ readonly kind: string;
13
+ } | undefined;
14
+ out(id: string): readonly {
15
+ readonly id: string;
16
+ }[];
17
+ in(id: string): readonly {
18
+ readonly id: string;
19
+ }[];
20
+ };
21
+ readonly log: LogReading;
22
+ /** The kinds of the modules this workspace has off (FR-12), kept from every seat as a sight keeps a record. */
23
+ readonly modules?: {
24
+ readonly disabledKinds: ReadonlySet<string>;
25
+ };
26
+ }
27
+ /**
28
+ * WHETHER ANYTHING IS KEPT FROM THIS SEAT: a sight the policy declares
29
+ * (FR-02), or a module the workspace has off (FR-12). When neither, every
30
+ * read is the store's own and nothing needs redacting.
31
+ */
32
+ export declare function hidesFrom(store: Judged, principal: Principal): boolean;
33
+ /**
34
+ * WHETHER ONE SEAT SEES A RECORD, BY ID — one in the graph by what it is
35
+ * now; one since removed by the kind the log says it was, and so never by
36
+ * an edge it no longer has; and a string that names no record at all (a
37
+ * label in a call's arguments) is nothing to keep from anybody.
38
+ */
39
+ export declare function seesId(store: Judged, principal: Principal): (id: string) => boolean;
40
+ /** The store's log as one seat may read it: every op in its place, the ones it may not see withheld (FR-16). */
41
+ export declare function logSeenBy(store: Judged, principal: Principal): readonly Operation[];
42
+ /** A log reading over a seat's redacted ops, for `checkUndo`. */
43
+ export declare function readingOf(ops: readonly Operation[], epochs: LogReading["epochs"]): LogReading;
44
+ /**
45
+ * THE STORE AS ONE PRINCIPAL MAY SEE IT.
46
+ *
47
+ * Every surface reads `store.graph` — the scene, the pages, Find, the
48
+ * chat, an agent's tools — and none of them asked who was looking: a
49
+ * storefront showed a stranger every customer's name, email and finance
50
+ * question, because a policy could only say who may ACT. With the policy's
51
+ * `sees` declared, this is the store a surface is handed: its graph, its
52
+ * log, its history and its problems hold only what the principal may see,
53
+ * and every act still goes to the store itself, judged there as always.
54
+ * With no `sees`, it is the store, unchanged.
55
+ */
56
+ export declare function seenBy<S extends AnySchema>(store: Store<S>, principal: Principal): Store<S>;
57
+ export {};
58
+ //# sourceMappingURL=seen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seen.d.ts","sourceRoot":"","sources":["../src/seen.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAEpE,OAAO,KAAK,EAAS,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAIvD,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,qFAAqF;AACrF,UAAU,MAAM;IACd,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE;QACd,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG;YAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;SAAE,GAAG,SAAS,CAAC;QAChF,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS;YAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QACpD,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS;YAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KACpD,CAAC;IACF,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,+GAA+G;IAC/G,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC;CACpE;AAaD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAGtE;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAWnF;AAED,gHAAgH;AAChH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,SAAS,EAAE,CAGnF;AAED,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,GAAG,EAAE,SAAS,SAAS,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,UAAU,CAE7F;AASD;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CA2H3F"}
package/dist/seen.js ADDED
@@ -0,0 +1,194 @@
1
+ import { batchesOf, undoneIn } from "./ops/log.js";
2
+ import { checkUndo } from "./ops/undo.js";
3
+ import { redact } from "./ops/withheld.js";
4
+ import { actingAs, isSystem } from "./permissions/policy.js";
5
+ import { recordsOf, sees } from "./permissions/sight.js";
6
+ const NOTHING = new Set();
7
+ /**
8
+ * The kinds kept from a seat because their module is off (FR-12): from
9
+ * every seat but the system itself, which keeps the records and is the
10
+ * one that turns the module on again.
11
+ */
12
+ function turnedOff(store, principal) {
13
+ return isSystem(principal) ? NOTHING : (store.modules?.disabledKinds ?? NOTHING);
14
+ }
15
+ /**
16
+ * WHETHER ANYTHING IS KEPT FROM THIS SEAT: a sight the policy declares
17
+ * (FR-02), or a module the workspace has off (FR-12). When neither, every
18
+ * read is the store's own and nothing needs redacting.
19
+ */
20
+ export function hidesFrom(store, principal) {
21
+ if (isSystem(principal))
22
+ return false;
23
+ return (store.policy?.sees?.length ?? 0) > 0 || turnedOff(store, principal).size > 0;
24
+ }
25
+ /**
26
+ * WHETHER ONE SEAT SEES A RECORD, BY ID — one in the graph by what it is
27
+ * now; one since removed by the kind the log says it was, and so never by
28
+ * an edge it no longer has; and a string that names no record at all (a
29
+ * label in a call's arguments) is nothing to keep from anybody.
30
+ */
31
+ export function seesId(store, principal) {
32
+ const off = turnedOff(store, principal);
33
+ if (!store.policy?.sees?.length && off.size === 0)
34
+ return () => true;
35
+ const records = recordsOf(store.log);
36
+ return (id) => {
37
+ const node = store.graph.getNode(id);
38
+ if (node)
39
+ return !off.has(node.kind) && sees(store.policy, principal, node, store.graph, records);
40
+ const kind = records.kindOf(id);
41
+ if (kind === undefined)
42
+ return true;
43
+ return !off.has(kind) && sees(store.policy, principal, { id, kind }, { out: () => [], in: () => [] }, records);
44
+ };
45
+ }
46
+ /** The store's log as one seat may read it: every op in its place, the ones it may not see withheld (FR-16). */
47
+ export function logSeenBy(store, principal) {
48
+ if (!hidesFrom(store, principal))
49
+ return store.log.all();
50
+ return redact(store.log.all(), seesId(store, principal));
51
+ }
52
+ /** A log reading over a seat's redacted ops, for `checkUndo`. */
53
+ export function readingOf(ops, epochs) {
54
+ return { all: () => ops, undoneIds: () => undoneIn(ops), epochs };
55
+ }
56
+ const VIEWS = new WeakMap();
57
+ const bound = (target, prop) => {
58
+ const value = Reflect.get(target, prop, target);
59
+ return typeof value === "function" ? value.bind(target) : value;
60
+ };
61
+ /**
62
+ * THE STORE AS ONE PRINCIPAL MAY SEE IT.
63
+ *
64
+ * Every surface reads `store.graph` — the scene, the pages, Find, the
65
+ * chat, an agent's tools — and none of them asked who was looking: a
66
+ * storefront showed a stranger every customer's name, email and finance
67
+ * question, because a policy could only say who may ACT. With the policy's
68
+ * `sees` declared, this is the store a surface is handed: its graph, its
69
+ * log, its history and its problems hold only what the principal may see,
70
+ * and every act still goes to the store itself, judged there as always.
71
+ * With no `sees`, it is the store, unchanged.
72
+ */
73
+ export function seenBy(store, principal) {
74
+ // A module off keeps its kinds from every seat as a sight would (FR-12); the view reads which are off as it goes.
75
+ if (!store.policy?.sees?.length && store.modules.disabledKinds.size === 0)
76
+ return store;
77
+ // Keyed by the seat the policy judges: an agent for Nick is not the same agent alone.
78
+ const judged = isSystem(principal) ? principal : actingAs(principal);
79
+ const key = `${principal.kind}|${judged.id ?? ""}|${(judged.roles ?? []).join(",")}|${principal.onBehalfOf ? "for" : ""}`;
80
+ let views = VIEWS.get(store);
81
+ if (!views)
82
+ VIEWS.set(store, (views = new Map()));
83
+ const held = views.get(key);
84
+ if (held)
85
+ return held;
86
+ const full = store.graph;
87
+ const seenNode = (node) => node !== undefined && !turnedOff(store, principal).has(node.kind) && sees(store.policy, principal, node, full, recordsOf(store.log));
88
+ const seenId = (id) => seenNode(full.getNode(id));
89
+ const seenEdge = (edge) => seenId(edge.from) && seenId(edge.to);
90
+ /*
91
+ * THE LOG, REDACTED RATHER THAN GAPPED (FR-16): every op in its place,
92
+ * and one that touched what this seat may not see withheld — so the log
93
+ * still loads, folds and undoes, and says something happened there.
94
+ */
95
+ const ops = () => logSeenBy(store, principal);
96
+ const reading = () => readingOf(ops(), () => store.log.epochs());
97
+ const graph = new Proxy(full, {
98
+ get(target, prop) {
99
+ switch (prop) {
100
+ case "getNode":
101
+ return (id) => {
102
+ const node = target.getNode(id);
103
+ return seenNode(node) ? node : undefined;
104
+ };
105
+ case "has":
106
+ return (id) => seenId(id);
107
+ case "allNodes":
108
+ return () => target.allNodes().filter((node) => seenNode(node));
109
+ case "nodesOfKind":
110
+ return (kind) => target.nodesOfKind(kind).filter((node) => seenNode(node));
111
+ case "allEdges":
112
+ return () => target.allEdges().filter(seenEdge);
113
+ case "edgesOfKind":
114
+ return (kind) => target.edgesOfKind(kind).filter(seenEdge);
115
+ case "out":
116
+ return (id, kind) => (seenId(id) ? target.out(id, kind).filter((node) => seenNode(node)) : []);
117
+ case "in":
118
+ return (id, kind) => (seenId(id) ? target.in(id, kind).filter((node) => seenNode(node)) : []);
119
+ case "neighbors":
120
+ return (id) => (seenId(id) ? target.neighbors(id).filter((node) => seenNode(node)) : []);
121
+ case "outEdges":
122
+ return (id, kind) => target.outEdges(id, kind).filter(seenEdge);
123
+ case "inEdges":
124
+ return (id, kind) => target.inEdges(id, kind).filter(seenEdge);
125
+ case "snapshot":
126
+ return () => {
127
+ const snapshot = target.snapshot();
128
+ return { ...snapshot, nodes: snapshot.nodes.filter((node) => seenNode(node)), edges: snapshot.edges.filter(seenEdge) };
129
+ };
130
+ case "size": {
131
+ const nodes = target.allNodes().filter((node) => seenNode(node)).length;
132
+ return { nodes, edges: target.allEdges().filter(seenEdge).length };
133
+ }
134
+ default:
135
+ return bound(target, prop);
136
+ }
137
+ },
138
+ });
139
+ const batches = () => {
140
+ const all = ops();
141
+ return batchesOf(all, undoneIn(all));
142
+ };
143
+ const log = new Proxy(store.log, {
144
+ get(target, prop) {
145
+ switch (prop) {
146
+ case "all":
147
+ case "toJSON":
148
+ return () => [...ops()];
149
+ case "live":
150
+ return () => {
151
+ const all = ops();
152
+ const undone = undoneIn(all);
153
+ return all.filter((op) => !undone.has(op.id));
154
+ };
155
+ case "get":
156
+ return (id) => ops().find((op) => op.id === id);
157
+ case "opsInBatch":
158
+ return (batch) => ops().filter((op) => op.batch === batch);
159
+ case "batches":
160
+ return batches;
161
+ default:
162
+ return bound(target, prop);
163
+ }
164
+ },
165
+ });
166
+ const view = new Proxy(store, {
167
+ get(target, prop) {
168
+ switch (prop) {
169
+ case "graph":
170
+ return graph;
171
+ case "log":
172
+ return log;
173
+ case "snapshot":
174
+ return () => graph.snapshot();
175
+ case "batches":
176
+ return batches;
177
+ // Judged over what this seat sees, so the sentence never names a change it may not (FR-16).
178
+ case "canUndo":
179
+ return (batchIds) => checkUndo(reading(), typeof batchIds === "string" ? [batchIds] : batchIds);
180
+ case "violations":
181
+ return (...args) => target.violations(...args).filter((violation) => (violation.subjectId === undefined || seenId(violation.subjectId)) && violation.nodeIds.every((id) => !full.has(id) || seenId(id)));
182
+ case "seenBy":
183
+ return (other) => seenBy(target, other);
184
+ case "seenFor":
185
+ return principal;
186
+ default:
187
+ return bound(target, prop);
188
+ }
189
+ },
190
+ });
191
+ views.set(key, view);
192
+ return view;
193
+ }
194
+ //# sourceMappingURL=seen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seen.js","sourceRoot":"","sources":["../src/seen.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAmB,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAkBzD,MAAM,OAAO,GAAwB,IAAI,GAAG,EAAE,CAAC;AAE/C;;;;GAIG;AACH,SAAS,SAAS,CAAC,KAAa,EAAE,SAAoB;IACpD,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,aAAa,IAAI,OAAO,CAAC,CAAC;AACnF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,SAAoB;IAC3D,IAAI,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;AACvF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,MAAM,CAAC,KAAa,EAAE,SAAoB;IACxD,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC;IACrE,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,EAAE,EAAE;QACZ,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAClG,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IACjH,CAAC,CAAC;AACJ,CAAC;AAED,gHAAgH;AAChH,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,SAAoB;IAC3D,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IACzD,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,SAAS,CAAC,GAAyB,EAAE,MAA4B;IAC/E,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;AACpE,CAAC;AAED,MAAM,KAAK,GAAG,IAAI,OAAO,EAAgC,CAAC;AAE1D,MAAM,KAAK,GAAG,CAAC,MAAc,EAAE,IAAiB,EAAW,EAAE;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAChD,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAE,KAAyC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACvG,CAAC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,MAAM,CAAsB,KAAe,EAAE,SAAoB;IAC/E,kHAAkH;IAClH,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxF,sFAAsF;IACtF,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACrE,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC1H,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,KAAK;QAAE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,IAAI;QAAE,OAAO,IAAgB,CAAC;IAElC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;IACzB,MAAM,QAAQ,GAAG,CAAC,IAA8C,EAAW,EAAE,CAC3E,IAAI,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,IAAa,EAAE,IAAa,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACzJ,MAAM,MAAM,GAAG,CAAC,EAAU,EAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAU,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,CAAC,IAAe,EAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpF;;;;OAIG;IACH,MAAM,GAAG,GAAG,GAAyB,EAAE,CAAC,SAAS,CAAC,KAAc,EAAE,SAAS,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,GAAe,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAE7E,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE;QAC5B,GAAG,CAAC,MAAM,EAAE,IAAI;YACd,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,SAAS;oBACZ,OAAO,CAAC,EAAU,EAAE,EAAE;wBACpB,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;wBAChC,OAAO,QAAQ,CAAC,IAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;oBACpD,CAAC,CAAC;gBACJ,KAAK,KAAK;oBACR,OAAO,CAAC,EAAU,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACpC,KAAK,UAAU;oBACb,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAa,CAAC,CAAC,CAAC;gBAC3E,KAAK,aAAa;oBAChB,OAAO,CAAC,IAAW,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAa,CAAC,CAAC,CAAC;gBAC7F,KAAK,UAAU;oBACb,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAClD,KAAK,aAAa;oBAChB,OAAO,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACrE,KAAK,KAAK;oBACR,OAAO,CAAC,EAAU,EAAE,IAAa,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC3H,KAAK,IAAI;oBACP,OAAO,CAAC,EAAU,EAAE,IAAa,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC1H,KAAK,WAAW;oBACd,OAAO,CAAC,EAAU,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC5G,KAAK,UAAU;oBACb,OAAO,CAAC,EAAU,EAAE,IAAa,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACnF,KAAK,SAAS;oBACZ,OAAO,CAAC,EAAU,EAAE,IAAa,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAClF,KAAK,UAAU;oBACb,OAAO,GAAG,EAAE;wBACV,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;wBACnC,OAAO,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAa,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAClI,CAAC,CAAC;gBACJ,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAa,CAAC,CAAC,CAAC,MAAM,CAAC;oBACjF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;gBACrE,CAAC;gBACD;oBACE,OAAO,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,GAAY,EAAE;QAC5B,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC;QAClB,OAAO,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;QAC/B,GAAG,CAAC,MAAM,EAAE,IAAI;YACd,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,KAAK,CAAC;gBACX,KAAK,QAAQ;oBACX,OAAO,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;gBAC1B,KAAK,MAAM;oBACT,OAAO,GAAG,EAAE;wBACV,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC;wBAClB,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;wBAC7B,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAChD,CAAC,CAAC;gBACJ,KAAK,KAAK;oBACR,OAAO,CAAC,EAAU,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC1D,KAAK,YAAY;oBACf,OAAO,CAAC,KAAa,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;gBACrE,KAAK,SAAS;oBACZ,OAAO,OAAO,CAAC;gBACjB;oBACE,OAAO,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE;QAC5B,GAAG,CAAC,MAAM,EAAE,IAAI;YACd,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,OAAO;oBACV,OAAO,KAAK,CAAC;gBACf,KAAK,KAAK;oBACR,OAAO,GAAG,CAAC;gBACb,KAAK,UAAU;oBACb,OAAO,GAAG,EAAE,CAAE,KAA4C,CAAC,QAAQ,EAAE,CAAC;gBACxE,KAAK,SAAS;oBACZ,OAAO,OAAO,CAAC;gBACjB,4FAA4F;gBAC5F,KAAK,SAAS;oBACZ,OAAO,CAAC,QAAoC,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAC9H,KAAK,YAAY;oBACf,OAAO,CAAC,GAAG,IAAwC,EAAE,EAAE,CACrD,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACzL,KAAK,QAAQ;oBACX,OAAO,CAAC,KAAgB,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBACrD,KAAK,SAAS;oBACZ,OAAO,SAAS,CAAC;gBACnB;oBACE,OAAO,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;KACF,CAAa,CAAC;IACf,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACrB,OAAO,IAAI,CAAC;AACd,CAAC"}