@agentshouse/mdruntime 0.1.0-ca7c26c6bc27e → 0.1.0-ca92b54804c33

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 (182) hide show
  1. package/README.md +25 -12
  2. package/dist/adapter.d.ts +199 -54
  3. package/dist/adapter.d.ts.map +1 -1
  4. package/dist/adapter.js +1 -9
  5. package/dist/attached-model.d.ts +7 -10
  6. package/dist/attached-model.d.ts.map +1 -1
  7. package/dist/attached-model.js +40 -28
  8. package/dist/attempt.d.ts +16 -0
  9. package/dist/attempt.d.ts.map +1 -0
  10. package/dist/attempt.js +70 -0
  11. package/dist/binary.d.ts +18 -0
  12. package/dist/binary.d.ts.map +1 -0
  13. package/dist/binary.js +8 -0
  14. package/dist/bootstrap.d.ts +37 -5
  15. package/dist/bootstrap.d.ts.map +1 -1
  16. package/dist/bootstrap.js +336 -51
  17. package/dist/chain.d.ts +12 -0
  18. package/dist/chain.d.ts.map +1 -0
  19. package/dist/chain.js +64 -0
  20. package/dist/change-set.d.ts +9 -14
  21. package/dist/change-set.d.ts.map +1 -1
  22. package/dist/change-set.js +11 -56
  23. package/dist/change.d.ts +46 -0
  24. package/dist/change.d.ts.map +1 -1
  25. package/dist/change.js +34 -0
  26. package/dist/client.d.ts +44 -18
  27. package/dist/client.d.ts.map +1 -1
  28. package/dist/client.js +161 -30
  29. package/dist/collection.d.ts +13 -14
  30. package/dist/collection.d.ts.map +1 -1
  31. package/dist/collection.js +52 -56
  32. package/dist/compile.d.ts +11 -0
  33. package/dist/compile.d.ts.map +1 -0
  34. package/dist/compile.js +586 -0
  35. package/dist/connection.d.ts +67 -24
  36. package/dist/connection.d.ts.map +1 -1
  37. package/dist/connection.js +4414 -1205
  38. package/dist/context.d.ts +2 -0
  39. package/dist/context.d.ts.map +1 -0
  40. package/dist/context.js +7 -0
  41. package/dist/conversation.d.ts +65 -21
  42. package/dist/conversation.d.ts.map +1 -1
  43. package/dist/conversation.js +922 -273
  44. package/dist/digest.d.ts +7 -0
  45. package/dist/digest.d.ts.map +1 -0
  46. package/dist/digest.js +113 -0
  47. package/dist/durability.d.ts +10 -1
  48. package/dist/durability.d.ts.map +1 -1
  49. package/dist/durability.js +5 -0
  50. package/dist/entry.d.ts +20 -0
  51. package/dist/entry.d.ts.map +1 -0
  52. package/dist/entry.js +161 -0
  53. package/dist/expectation.d.ts +21 -0
  54. package/dist/expectation.d.ts.map +1 -0
  55. package/dist/expectation.js +70 -0
  56. package/dist/failure.d.ts +13 -0
  57. package/dist/failure.d.ts.map +1 -0
  58. package/dist/failure.js +19 -0
  59. package/dist/file.d.ts +2 -19
  60. package/dist/file.d.ts.map +1 -1
  61. package/dist/file.js +7 -122
  62. package/dist/host.d.ts +11 -2
  63. package/dist/host.d.ts.map +1 -1
  64. package/dist/host.js +134 -34
  65. package/dist/identity.d.ts +3 -0
  66. package/dist/identity.d.ts.map +1 -1
  67. package/dist/identity.js +13 -1
  68. package/dist/index.d.ts +24 -10
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +11 -0
  71. package/dist/job.d.ts +14 -0
  72. package/dist/job.d.ts.map +1 -0
  73. package/dist/job.js +28 -0
  74. package/dist/live.d.ts +23 -0
  75. package/dist/live.d.ts.map +1 -0
  76. package/dist/live.js +165 -0
  77. package/dist/media.d.ts +8 -0
  78. package/dist/media.d.ts.map +1 -0
  79. package/dist/media.js +218 -0
  80. package/dist/memory.d.ts +22 -8
  81. package/dist/memory.d.ts.map +1 -1
  82. package/dist/memory.js +299 -94
  83. package/dist/messages.d.ts +28 -0
  84. package/dist/messages.d.ts.map +1 -0
  85. package/dist/messages.js +91 -0
  86. package/dist/model.d.ts +17 -12
  87. package/dist/model.d.ts.map +1 -1
  88. package/dist/model.js +9 -9
  89. package/dist/name.d.ts +4 -0
  90. package/dist/name.d.ts.map +1 -0
  91. package/dist/name.js +122 -0
  92. package/dist/observation.d.ts +22 -4
  93. package/dist/observation.d.ts.map +1 -1
  94. package/dist/observation.js +120 -14
  95. package/dist/open.d.ts +2 -0
  96. package/dist/open.d.ts.map +1 -0
  97. package/dist/open.js +1 -0
  98. package/dist/opened.d.ts +22 -0
  99. package/dist/opened.d.ts.map +1 -0
  100. package/dist/opened.js +107 -0
  101. package/dist/outcome.d.ts +72 -5
  102. package/dist/outcome.d.ts.map +1 -1
  103. package/dist/outcome.js +81 -1
  104. package/dist/overlay.d.ts +16 -5
  105. package/dist/overlay.d.ts.map +1 -1
  106. package/dist/overlay.js +147 -180
  107. package/dist/paths.d.ts +1 -1
  108. package/dist/paths.d.ts.map +1 -1
  109. package/dist/paths.js +4 -16
  110. package/dist/query.d.ts +42 -181
  111. package/dist/query.d.ts.map +1 -1
  112. package/dist/query.js +3 -423
  113. package/dist/reach.d.ts +19 -5
  114. package/dist/reach.d.ts.map +1 -1
  115. package/dist/reach.js +298 -92
  116. package/dist/react.d.ts +45 -0
  117. package/dist/react.d.ts.map +1 -0
  118. package/dist/react.js +54 -0
  119. package/dist/readiness.d.ts +50 -0
  120. package/dist/readiness.d.ts.map +1 -0
  121. package/dist/readiness.js +27 -0
  122. package/dist/recovery.d.ts +26 -0
  123. package/dist/recovery.d.ts.map +1 -0
  124. package/dist/recovery.js +232 -0
  125. package/dist/refresh.d.ts +20 -7
  126. package/dist/refresh.d.ts.map +1 -1
  127. package/dist/refresh.js +155 -59
  128. package/dist/replica.d.ts +61 -34
  129. package/dist/replica.d.ts.map +1 -1
  130. package/dist/replica.js +355 -162
  131. package/dist/room-draft.d.ts +59 -11
  132. package/dist/room-draft.d.ts.map +1 -1
  133. package/dist/room-draft.js +276 -80
  134. package/dist/rows.d.ts +32 -34
  135. package/dist/rows.d.ts.map +1 -1
  136. package/dist/rows.js +65 -87
  137. package/dist/save.d.ts +74 -6
  138. package/dist/save.d.ts.map +1 -1
  139. package/dist/save.js +902 -182
  140. package/dist/search.d.ts +15 -54
  141. package/dist/search.d.ts.map +1 -1
  142. package/dist/search.js +10 -121
  143. package/dist/seed.d.ts +16 -0
  144. package/dist/seed.d.ts.map +1 -0
  145. package/dist/seed.js +75 -0
  146. package/dist/shared.d.ts +15 -0
  147. package/dist/shared.d.ts.map +1 -0
  148. package/dist/shared.js +421 -0
  149. package/dist/status.d.ts +7 -4
  150. package/dist/status.d.ts.map +1 -1
  151. package/dist/status.js +3 -15
  152. package/dist/store.d.ts +174 -68
  153. package/dist/store.d.ts.map +1 -1
  154. package/dist/store.js +367 -360
  155. package/dist/stored.d.ts +156 -0
  156. package/dist/stored.d.ts.map +1 -0
  157. package/dist/stored.js +635 -0
  158. package/dist/tables.d.ts +381 -0
  159. package/dist/tables.d.ts.map +1 -0
  160. package/dist/tables.js +700 -0
  161. package/dist/transfer.d.ts +0 -5
  162. package/dist/transfer.d.ts.map +1 -1
  163. package/dist/turn.d.ts +9 -0
  164. package/dist/turn.d.ts.map +1 -0
  165. package/dist/turn.js +75 -0
  166. package/dist/validation.d.ts +29 -0
  167. package/dist/validation.d.ts.map +1 -0
  168. package/dist/validation.js +104 -0
  169. package/dist/windows.d.ts +11 -0
  170. package/dist/windows.d.ts.map +1 -0
  171. package/dist/windows.js +16 -0
  172. package/dist/wire.d.ts +179 -45
  173. package/dist/wire.d.ts.map +1 -1
  174. package/dist/wire.js +72 -46
  175. package/package.json +33 -10
  176. package/AGENTS.md +0 -215
  177. package/dist/attachment.d.ts +0 -3
  178. package/dist/attachment.d.ts.map +0 -1
  179. package/dist/attachment.js +0 -8
  180. package/dist/read-side.d.ts +0 -18
  181. package/dist/read-side.d.ts.map +0 -1
  182. package/dist/read-side.js +0 -377
package/dist/host.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  import { type MdRuntimeOptions } from './connection.js';
2
2
  import type { PortReach } from './reach.js';
3
+ import type { CodeAvailability, Persistence, Readiness } from './readiness.js';
4
+ import type { EntrySeed } from './seed.js';
3
5
  import { type RuntimePort } from './wire.js';
4
6
  export type MdRuntimeHostOptions = MdRuntimeOptions & {
5
7
  deploymentFacts?: unknown;
@@ -7,13 +9,20 @@ export type MdRuntimeHostOptions = MdRuntimeOptions & {
7
9
  export type AttachedPort = {
8
10
  detach(): void;
9
11
  narrow(reach: PortReach): void;
12
+ readiness(deliver: (readiness: Readiness) => void): () => void;
13
+ answered(queries: readonly unknown[], done: () => void): void;
10
14
  };
11
15
  export type MdRuntimeHost = {
12
- attach(port: RuntimePort, app: string, release?: string, reach?: PortReach): AttachedPort;
13
- endAuthorization(): Promise<void>;
16
+ attach(port: RuntimePort, app: string, release?: string, reach?: PortReach, code?: CodeAvailability): AttachedPort;
17
+ seed(entry: EntrySeed): void;
18
+ persisted(answer: Persistence): void;
19
+ endAuthorization(holder?: string): Promise<void>;
14
20
  stop(): Promise<void>;
15
21
  };
16
22
  export declare function serveMdRuntime(options: MdRuntimeHostOptions): MdRuntimeHost;
23
+ export { entrySeedOf, type EntrySeed } from './seed.js';
17
24
  export type { PortReach, ReachedDocument } from './reach.js';
25
+ export type { CodeAvailability, Persistence, Space } from './readiness.js';
26
+ export { createRecovery, retryDelay, type Attempt, type Attempted, type AttemptOptions, type Recovery, type RecoveryOptions, } from './recovery.js';
18
27
  export type { RuntimePort } from './wire.js';
19
28
  //# sourceMappingURL=host.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,gBAAgB,EAEtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,OAAO,EAML,KAAK,WAAW,EAOjB,MAAM,WAAW,CAAC;AAInB,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEpF,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,IAAI,IAAI,CAAC;IACf,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;IAC1F,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB,CAAC;AA0EF,wBAAgB,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CA+H3E;AAED,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7D,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,gBAAgB,EAGtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAGL,KAAK,WAAW,EAOjB,MAAM,WAAW,CAAC;AAInB,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEpF,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,IAAI,IAAI,CAAC;IACf,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IAC/B,SAAS,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC/D,QAAQ,CAAC,OAAO,EAAE,SAAS,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CAC/D,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,CACJ,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,SAAS,EACjB,IAAI,CAAC,EAAE,gBAAgB,GACtB,YAAY,CAAC;IAChB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IACrC,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB,CAAC;AAwIF,wBAAgB,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAoL3E;AAED,OAAO,EAAE,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AACxD,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7D,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EACL,cAAc,EACd,UAAU,EACV,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
package/dist/host.js CHANGED
@@ -1,6 +1,8 @@
1
+ import { queryKey } from '@agentshouse/mdmodel';
1
2
  import { composeRuntime, } from './connection.js';
2
- import { removeRuntimeStore } from './store.js';
3
- import { AUTHORIZATION_ENDED, carried, envelope, PROTOCOL_MISMATCH, request, WIRE_REACH, } from './wire.js';
3
+ import { untilAnswered } from './recovery.js';
4
+ import { described } from './failure.js';
5
+ import { AUTHORIZATION_ENDED, request, WIRE, } from './wire.js';
4
6
  const NARROWED = new Set(['within', 'whole']);
5
7
  function answered(md, app, writtenBy, member, input) {
6
8
  switch (member) {
@@ -14,16 +16,38 @@ function answered(md, app, writtenBy, member, input) {
14
16
  return md.types(input[0]);
15
17
  case 'save':
16
18
  return md.save(input[0], input[1], writtenBy);
19
+ case 'saveParts':
20
+ return md.saveParts(input[0], input[1], writtenBy);
17
21
  case 'history':
18
22
  return md.history(input[0], input[1], input[2]);
23
+ case 'resolve':
24
+ return md.resolve(input[0], input[1], input[2]);
25
+ case 'binaryFile.read':
26
+ return md.binaryFile.read(input[0], input[1], input[2]);
27
+ case 'binaryFile.link':
28
+ return md.binaryFile.link(input[0], input[1], input[2]);
29
+ case 'binaryFile.show':
30
+ return md.binaryFile.show(input[0], input[1], input[2]);
31
+ case 'binaryFile.attach':
32
+ return md.binaryFile.attach(input[0], input[1]);
33
+ case 'binaryFile.part':
34
+ return md.binaryFile.part(input[0], input[1]);
19
35
  case 'call':
20
36
  return md.call(input[0], input[1]);
21
37
  case 'reached':
22
38
  return md.reached(input[0], input[1], input[2]);
23
39
  case 'log':
24
40
  return md.log();
41
+ case 'cleanUp':
42
+ return md.cleanUp();
43
+ case 'unsent':
44
+ return md.unsent();
45
+ case 'reset':
46
+ return md.reset();
25
47
  case 'persistence':
26
48
  return md.persistence();
49
+ case 'retry':
50
+ return md.retry();
27
51
  case 'reauthorize':
28
52
  return md.reauthorize();
29
53
  case 'roomDraft.list':
@@ -31,13 +55,15 @@ function answered(md, app, writtenBy, member, input) {
31
55
  case 'roomDraft.read':
32
56
  return md.roomDraft.read(input[0], input[1]);
33
57
  case 'roomDraft.write':
34
- return md.roomDraft.write(input[0], input[1], input[2], input[3]);
58
+ return md.roomDraft.write(input[0], input[1], input[2], input[3], input[4]);
35
59
  case 'roomDraft.discard':
36
60
  return md.roomDraft.discard(input[0], input[1], input[2]);
37
61
  case 'presentation.read':
38
62
  return md.presentation.read(app);
39
63
  case 'presentation.write':
40
64
  return md.presentation.write(app, input[0]);
65
+ case 'presentation.edit':
66
+ return md.presentation.edit(app, input[0]);
41
67
  case 'conversation.list':
42
68
  return md.conversation.list();
43
69
  case 'conversation.read':
@@ -45,23 +71,39 @@ function answered(md, app, writtenBy, member, input) {
45
71
  case 'conversation.create':
46
72
  return md.conversation.create(input[0]);
47
73
  case 'conversation.send':
48
- return md.conversation.send(input[0]);
74
+ return md.conversation.send(input[0], input[1], input[2]);
49
75
  case 'conversation.answer':
50
76
  return md.conversation.answer(input[0], input[1]);
51
77
  case 'conversation.interrupt':
52
78
  return md.conversation.interrupt(input[0]);
53
79
  case 'conversation.kill':
54
80
  return md.conversation.kill(input[0]);
55
- case 'conversation.cancel':
56
- return md.conversation.cancel(input[0], input[1]);
57
81
  case 'conversation.delete':
58
82
  return md.conversation.delete(input[0]);
59
83
  case 'chatDraft.write':
60
- return md.chatDraft.write(input[0], input[1]);
84
+ return md.chatDraft.write(input[0], input[1], input[2]);
85
+ case 'chatDraft.prepend':
86
+ return md.chatDraft.prepend(input[0], input[1]);
61
87
  case 'chatDraft.discard':
62
88
  return md.chatDraft.discard(input[0]);
63
89
  }
64
90
  }
91
+ function attempted(work) {
92
+ try {
93
+ return Promise.resolve(work());
94
+ }
95
+ catch (error) {
96
+ return Promise.reject(error);
97
+ }
98
+ }
99
+ function answeredResult(value) {
100
+ return typeof value === 'object' && value !== null && !('pending' in value);
101
+ }
102
+ function answeredMessage(value) {
103
+ if (typeof value !== 'object' || value === null)
104
+ return false;
105
+ return !('result' in value) || answeredResult(value.result);
106
+ }
65
107
  export function serveMdRuntime(options) {
66
108
  const deploymentFacts = structuredClone(options.deploymentFacts);
67
109
  const closing = new AbortController();
@@ -75,19 +117,32 @@ export function serveMdRuntime(options) {
75
117
  const { md } = runtime;
76
118
  const attachments = new Map();
77
119
  let authorized = true;
120
+ let opening = null;
121
+ const opened = () => (opening ??= untilAnswered(() => md.loaded(), closing.signal));
78
122
  const watchFacts = (deliver) => {
79
123
  deliver(structuredClone(deploymentFacts));
80
124
  return () => { };
81
125
  };
82
- function attach(port, app, release, reach) {
126
+ function attach(port, app, release, reach, code = 'stored') {
83
127
  if (!authorized)
84
128
  throw new Error(AUTHORIZATION_ENDED);
85
129
  const writtenBy = release === undefined ? undefined : { app, release };
86
- const view = runtime.within(reach ?? null);
130
+ const view = runtime.within(reach ?? null, { target: app, code });
87
131
  const observations = new Map();
132
+ const followed = new Set();
133
+ const answeredKeys = new Set();
134
+ let awaited = null;
88
135
  let serving = true;
136
+ const answeredQuery = (query) => {
137
+ answeredKeys.add(queryKey(query));
138
+ if (awaited === null || !awaited.keys.every((key) => answeredKeys.has(key)))
139
+ return;
140
+ const { done } = awaited;
141
+ awaited = null;
142
+ done();
143
+ };
89
144
  const send = (message) => {
90
- port.postMessage(envelope(message));
145
+ port.postMessage(message);
91
146
  };
92
147
  const detach = () => {
93
148
  if (!serving)
@@ -96,6 +151,8 @@ export function serveMdRuntime(options) {
96
151
  for (const end of observations.values())
97
152
  end();
98
153
  observations.clear();
154
+ for (const end of [...followed])
155
+ end();
99
156
  attachments.delete(detach);
100
157
  };
101
158
  const observe = (id, topic, input) => {
@@ -105,10 +162,33 @@ export function serveMdRuntime(options) {
105
162
  return;
106
163
  send(resolved ? { kind: 'event', id, value } : { kind: 'result', id, value });
107
164
  resolved = true;
165
+ if (topic === 'query' && answeredMessage(value))
166
+ answeredQuery(input[0]);
167
+ };
168
+ const fail = (error) => {
169
+ if (!serving || resolved)
170
+ return;
171
+ observations.get(id)?.();
172
+ observations.delete(id);
173
+ send({ kind: 'failure', id, ...described(error) });
108
174
  };
109
175
  observations.set(id, topic === 'deployment-facts'
110
176
  ? watchFacts(deliver)
111
- : (NARROWED.has(WIRE_REACH.topics[topic]) ? view : runtime).watch(topic, topic === 'presentation' ? [app] : input, deliver));
177
+ : (NARROWED.has(WIRE.topics[topic]) ? view : runtime).watch(topic, topic === 'presentation' ? [app] : input, deliver, fail));
178
+ };
179
+ const reply = async (id, query, pending) => {
180
+ try {
181
+ const value = await pending;
182
+ if (!serving)
183
+ return;
184
+ send({ kind: 'result', id, value });
185
+ if (query !== undefined && answeredResult(value))
186
+ answeredQuery(query);
187
+ }
188
+ catch (error) {
189
+ if (serving)
190
+ send({ kind: 'failure', id, ...described(error) });
191
+ }
112
192
  };
113
193
  const serve = async (message) => {
114
194
  if (message.kind === 'hello')
@@ -119,39 +199,29 @@ export function serveMdRuntime(options) {
119
199
  return;
120
200
  }
121
201
  try {
122
- if (message.kind !== 'observe' || message.topic !== 'room-drafts')
202
+ if (message.kind !== 'observe')
123
203
  await md.loaded();
204
+ else if (message.topic !== 'room-drafts')
205
+ await opened();
124
206
  if (message.kind === 'observe') {
125
207
  if (serving)
126
208
  observe(message.id, message.topic, message.input);
127
209
  return;
128
210
  }
129
- const value = await answered(NARROWED.has(WIRE_REACH.members[message.member]) ? view.md : md, app, writtenBy, message.member, message.input);
130
- if (serving)
131
- send({ kind: 'result', id: message.id, value });
132
211
  }
133
212
  catch (error) {
134
- if (serving) {
135
- send({
136
- kind: 'failure',
137
- id: message.id,
138
- message: error instanceof Error ? error.message : String(error),
139
- });
140
- }
213
+ if (serving)
214
+ send({ kind: 'failure', id: message.id, ...described(error) });
215
+ return;
141
216
  }
217
+ const { id, member, input } = message;
218
+ const pending = attempted(() => answered(NARROWED.has(WIRE.members[member].reach) ? view.md : md, app, writtenBy, member, input));
219
+ return reply(id, member === 'query' ? input[0] : undefined, pending);
142
220
  };
143
221
  port.addEventListener('message', (event) => {
144
222
  if (!serving)
145
223
  return;
146
- const wire = carried(event.data);
147
- if (wire === null)
148
- return;
149
- if (!wire.matching) {
150
- send({ kind: 'refusal', refusal: PROTOCOL_MISMATCH });
151
- detach();
152
- return;
153
- }
154
- const message = request(wire.message);
224
+ const message = request(event.data);
155
225
  if (message === null)
156
226
  return;
157
227
  void serve(message);
@@ -165,22 +235,52 @@ export function serveMdRuntime(options) {
165
235
  if (serving)
166
236
  view.narrow(next);
167
237
  },
238
+ answered(queries, done) {
239
+ const keys = queries.map(queryKey);
240
+ if (keys.every((key) => answeredKeys.has(key)))
241
+ done();
242
+ else
243
+ awaited = { keys, done };
244
+ },
245
+ readiness(deliver) {
246
+ if (!serving)
247
+ return () => { };
248
+ const stop = view.watch('readiness', [], (value) => {
249
+ if (serving)
250
+ deliver(value);
251
+ }, () => { });
252
+ const end = () => {
253
+ followed.delete(end);
254
+ stop();
255
+ };
256
+ followed.add(end);
257
+ return end;
258
+ },
168
259
  };
169
260
  }
170
261
  return {
171
262
  attach,
172
- async endAuthorization() {
263
+ seed(entry) {
264
+ runtime.seed(entry);
265
+ },
266
+ persisted(answer) {
267
+ runtime.persisted(answer);
268
+ },
269
+ async endAuthorization(holder) {
173
270
  authorized = false;
174
271
  for (const [detach, send] of [...attachments]) {
175
272
  send({ kind: 'ended' });
176
273
  detach();
177
274
  }
178
275
  close();
179
- await removeRuntimeStore();
180
- await options.shell.dropGeneration();
276
+ if (!(await options.database.ask({ kind: 'authored.end', holder: holder ?? null }))) {
277
+ await options.shell.dropGeneration();
278
+ }
181
279
  },
182
280
  stop() {
183
281
  return runtime.stop();
184
282
  },
185
283
  };
186
284
  }
285
+ export { entrySeedOf } from './seed.js';
286
+ export { createRecovery, retryDelay, } from './recovery.js';
@@ -1,3 +1,6 @@
1
1
  export declare function changeBatchIdentity(at?: number): string;
2
2
  export declare function roomDraftRevision(): string;
3
+ export declare function chatDraftRevision(): string;
4
+ export declare function transferIdentity(): string;
5
+ export declare function binaryLocalId(): string;
3
6
  //# sourceMappingURL=identity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,EAAE,GAAE,MAAmB,GAAG,MAAM,CAWnE;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAI1C"}
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,EAAE,GAAE,MAAmB,GAAG,MAAM,CAWnE;AAQD,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
package/dist/identity.js CHANGED
@@ -10,8 +10,20 @@ export function changeBatchIdentity(at = Date.now()) {
10
10
  const hex = [...bytes].map((byte) => byte.toString(16).padStart(2, '0')).join('');
11
11
  return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
12
12
  }
13
- export function roomDraftRevision() {
13
+ function randomIdentity() {
14
14
  const bytes = new Uint8Array(16);
15
15
  crypto.getRandomValues(bytes);
16
16
  return [...bytes].map((byte) => byte.toString(16).padStart(2, '0')).join('');
17
17
  }
18
+ export function roomDraftRevision() {
19
+ return randomIdentity();
20
+ }
21
+ export function chatDraftRevision() {
22
+ return randomIdentity();
23
+ }
24
+ export function transferIdentity() {
25
+ return randomIdentity();
26
+ }
27
+ export function binaryLocalId() {
28
+ return randomIdentity();
29
+ }
package/dist/index.d.ts CHANGED
@@ -1,17 +1,31 @@
1
- export type { AcceptedMessage, ActionDeclaration, ActionRequest, ActionResult, Adapter, AdapterFailure, Authorization, BootstrapPage, BootstrapRequest, BootstrapResult, Capability, ChangeAuthor, ContractUnavailable, ConversationAction, ConversationCards, ConversationEvent, ConversationHistories, ConversationHistoryPage, ConversationHistoryRequest, ConversationMessage, ConversationStream, DiscoverResult, DiscoveredRoom, Discovery, HistoryAuthor, HistoryRequest, HistoryResult, HistoryRetention, HistoryRevision, HeldRoom, MdModelIdentity, MutationRequest, MutationResult, PageToken, ProviderLimit, ProviderRefusal, RefreshPage, RefreshRequest, RefreshResult, Retention, RetryableRefusal, RevokedAuthorization, RoomAttachment, RoomModels, RoomNotReadable, RoomStream, RoomStreamEvent, RoomVersionAt, ServiceMode, ServiceModeSignal, TransportUncertainty, TurnContext, TurnOperation, TypedSelection, } from './adapter.js';
2
- export type { Change, ChangeBatch, Precondition, WrittenBy } from './change.js';
3
- export type { ChatDraft, ChatDraftSurface, ConversationEntry, ConversationOptions, ConversationSurface, ConversationView, RunningTurn, } from './conversation.js';
4
- export type { ChatDraftFile, FileDeclaration } from './file.js';
5
- export type { AppRoom, AppTypedSelection, ConnectionRefusal, ConnectionRefusalReason, HistoryQuery, MdRuntime, MdRuntimeOptions, PresentationSurface, RoomDraftSurface, RoomTypes, SavedRoomDraft, SaveResult, } from './connection.js';
1
+ export type { AcceptedMessage, AcceptedRoom, ActionDeclaration, ActionRequest, ActionResult, Adapter, AdapterFailure, AttachRequest, AttachResult, AuthorityChange, Authorization, BinaryFile, BinaryLinkResult, BinaryRequest, BinaryResult, BootstrapPage, BootstrapRequest, BootstrapResult, Capability, ChangeAuthor, ContractUnavailable, ConversationAction, ConversationEvent, ConversationHistories, ConversationHistoryPage, ConversationHistoryRequest, ConversationMessage, ConversationStream, DiscoverResult, DiscoveredRoom, Discovery, SavedFacts, HistoryAuthor, HistoryRequest, HistoryResult, HistoryRetention, HistoryRevision, BootstrapPart, NotReady, HeldRoom, ListedAgent, ListedConversation, MdModelIdentity, Member, MutationRequest, MutationResult, PageToken, ProviderLimit, ProviderRefusal, RefreshPage, RefreshRequest, RefreshResult, Retention, RetryableRefusal, RevokedAuthorization, RoomChange, RoomModels, RoomNotReadable, RoomStream, RoomStreamEvent, RoomVersionAt, SearchAnswer, SearchAsk, ServiceMode, ServiceModeSignal, TransportUncertainty, TurnContext, TurnOperation, TypedPath, TypedSelection, } from './adapter.js';
2
+ export type { Change, ChangeBatch, Precondition, RoomMove, WrittenBy } from './change.js';
3
+ export type { ChatDraft, ChatDraftSurface, ConversationAgent, ConversationAnswer, ConversationEntry, ConversationOptions, ConversationRead, ConversationState, ConversationSurface, ConversationView, RunningTurn, } from './conversation.js';
4
+ export type { AppRoom, AppTypedSelection, BinaryFileSurface, ConnectionRefusal, ConnectionRefusalCode, HistoryQuery, MdRuntime, MdRuntimeOptions, PresentationSurface, RoomDraftSurface, RoomSchemas, SavedParts, SavedRoomDraft, SaveResult, } from './connection.js';
6
5
  export type { Observation } from './observation.js';
7
- export type { CallResult, QueueEntry, Submission } from './outcome.js';
8
- export type { ChangedPart, FieldValue, ReturnReason, RoomDraft, RoomDraftCreation, RoomDraftParts, RoomDraftWrite, } from './room-draft.js';
6
+ export type { AttachAnswer, BinaryAnswer, BinaryLinkAnswer, CallResult, DownloadAnswer, Failure, HistoryAnswer, Offline, QueueEntry, Resolution, Submission, } from './outcome.js';
7
+ export type { BinaryFileRecord } from './binary.js';
8
+ export type { RuntimeError } from './failure.js';
9
+ export type { ChangedPart, FieldValue, ReturnReason, RoomDraft, RoomDraftCreation, RoomDraftParts, RoomDraftWrite, TextParts, } from './room-draft.js';
9
10
  export type { SaveRefusal } from './save.js';
10
- export type { DocumentHit, DocumentPart, MessageHit, SearchRequest, SearchResult, } from './search.js';
11
+ export type { SearchFound, SearchHit, SearchRequest, SearchResult } from './search.js';
12
+ export { departure } from './change.js';
13
+ export { lineEnded, partsAfter, partsChanges } from './room-draft.js';
14
+ export { cutName, nameFrom, transliterated } from './name.js';
15
+ export { HISTORY_CONVERSATIONS, SESSION_STARTED } from './conversation.js';
16
+ export { contextFigure } from './context.js';
17
+ export { jobOf, jobsRunning, sessionEnded, type Job, type RunningJob } from './job.js';
11
18
  export { changeBatchIdentity } from './identity.js';
12
- export type { RuntimeShell } from './durability.js';
19
+ export { paced, ROW_WEIGHT, stepped } from './turn.js';
20
+ export { untilAnswered } from './recovery.js';
21
+ export { entriesIn, patching, sortedKeys } from './shared.js';
22
+ export { attempts, identities, intentOf, type Answered, type Attempt, type Attempts, type Identities, } from './attempt.js';
23
+ export { expectedList, expecting, type ExpectedOf, type Expecting } from './expectation.js';
24
+ export type { RuntimeShell, UnsentKind, UnsentWork } from './durability.js';
25
+ export type { CodeAvailability, ConnectionAvailability, ConversationCoverage, Durability, HouseOutcome, Installation, InstallationAmount, InstallationStep, Persistence, Readiness, ReadinessStatus, RoomCoverage, RoomPreparation, Space, TargetCoverage, } from './readiness.js';
13
26
  export type { AttentionEntry, SyncStatus } from './status.js';
14
- export type { Backlink, Direction, DocumentQuery, DocumentResult, Filter, GroupQuery, GroupResult, Key, LocalQuery, OrderOptions, Predicate, QueryDocument, QueryGroup, QueryResult, Related, Select, Value, Where, } from './query.js';
27
+ export type { Direction, DocumentQuery, Filter, GroupQuery, Key, LocalQuery, OrderOptions, Predicate, Related, Select, Value, Where, } from '@agentshouse/mdmodel';
28
+ export type { Awaits, Backlink, CoveredRoom, DocumentResult, GroupResult, PendingResult, PendingRoom, QueryCoverage, QueryDocument, QueryGroup, QueryResult, QueryRows, } from './query.js';
15
29
  export type { MdType, ModelIdentity, ModelSnapshot, ModelState, ModelResult, TypesResult, ValidationReceipt, } from './model.js';
16
30
  export type { OperationScopes, ReplicaAdmission, ScopedRefusal } from './adapter.js';
17
31
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,OAAO,EACP,cAAc,EACd,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,SAAS,EACT,aAAa,EACb,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,eAAe,EACf,eAAe,EACf,cAAc,EACd,SAAS,EACT,aAAa,EACb,eAAe,EACf,WAAW,EACX,cAAc,EACd,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,UAAU,EACV,eAAe,EACf,UAAU,EACV,eAAe,EACf,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,WAAW,EACX,aAAa,EACb,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAChF,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAChE,YAAY,EACV,OAAO,EACP,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,SAAS,EACT,cAAc,EACd,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACvE,YAAY,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,YAAY,EACV,WAAW,EACX,YAAY,EACZ,UAAU,EACV,aAAa,EACb,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9D,YAAY,EACV,QAAQ,EACR,SAAS,EACT,aAAa,EACb,cAAc,EACd,MAAM,EACN,UAAU,EACV,WAAW,EACX,GAAG,EACH,UAAU,EACV,YAAY,EACZ,SAAS,EACT,aAAa,EACb,UAAU,EACV,WAAW,EACX,OAAO,EACP,MAAM,EACN,KAAK,EACL,KAAK,GACN,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,MAAM,EACN,aAAa,EACb,aAAa,EACb,UAAU,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1 +1,12 @@
1
+ export { departure } from './change.js';
2
+ export { lineEnded, partsAfter, partsChanges } from './room-draft.js';
3
+ export { cutName, nameFrom, transliterated } from './name.js';
4
+ export { HISTORY_CONVERSATIONS, SESSION_STARTED } from './conversation.js';
5
+ export { contextFigure } from './context.js';
6
+ export { jobOf, jobsRunning, sessionEnded } from './job.js';
1
7
  export { changeBatchIdentity } from './identity.js';
8
+ export { paced, ROW_WEIGHT, stepped } from './turn.js';
9
+ export { untilAnswered } from './recovery.js';
10
+ export { entriesIn, patching, sortedKeys } from './shared.js';
11
+ export { attempts, identities, intentOf, } from './attempt.js';
12
+ export { expectedList, expecting } from './expectation.js';
package/dist/job.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ export type Job = {
2
+ readonly label: string;
3
+ readonly kind: 'started' | 'scheduled' | 'ended';
4
+ readonly state: string;
5
+ readonly next: string | null;
6
+ };
7
+ export type RunningJob = {
8
+ readonly name: string;
9
+ readonly running_since: string;
10
+ };
11
+ export declare function jobOf(said: string): Job;
12
+ export declare function jobsRunning(jobs: readonly RunningJob[], now: number): string[];
13
+ export declare function sessionEnded(jobs: readonly RunningJob[], now: number): string;
14
+ //# sourceMappingURL=job.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../src/job.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG,GAAG;IAChB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC,CAAC;AAQF,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CASvC;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAM9E;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAI7E"}
package/dist/job.js ADDED
@@ -0,0 +1,28 @@
1
+ const NEXT_RUN = 'next run ';
2
+ const MINUTE = 60_000;
3
+ const ENDED = 'Session ended.';
4
+ export function jobOf(said) {
5
+ const at = said.lastIndexOf(': ');
6
+ const label = at === -1 ? said : said.slice(0, at);
7
+ const state = at === -1 ? '' : said.slice(at + 2);
8
+ if (state === 'running')
9
+ return { label, kind: 'started', state, next: null };
10
+ if (state === 'scheduled')
11
+ return { label, kind: 'scheduled', state, next: null };
12
+ return state.startsWith(NEXT_RUN)
13
+ ? { label, kind: 'scheduled', state, next: state.slice(NEXT_RUN.length) }
14
+ : { label, kind: 'ended', state, next: null };
15
+ }
16
+ export function jobsRunning(jobs, now) {
17
+ return jobs.map((job) => {
18
+ const since = Date.parse(job.running_since);
19
+ const ran = Number.isNaN(since) ? 0 : Math.floor((now - since) / MINUTE);
20
+ return ran >= 1 ? `${job.name} (${ran} min)` : job.name;
21
+ });
22
+ }
23
+ export function sessionEnded(jobs, now) {
24
+ if (jobs.length === 0)
25
+ return ENDED;
26
+ const counted = jobs.length === 1 ? '1 background job' : `${jobs.length} background jobs`;
27
+ return `${ENDED} ${counted} stopped: ${jobsRunning(jobs, now).join(', ')}`;
28
+ }
package/dist/live.d.ts ADDED
@@ -0,0 +1,23 @@
1
+ import type { ChangeSet } from './change-set.js';
2
+ import { type KeyedResult, type QueryMessage } from './observation.js';
3
+ import type { PendingResult, Plan, QueryCoverage } from './query.js';
4
+ import type { Fail } from './reach.js';
5
+ import type { QueryRoom } from './tables.js';
6
+ export type Cover = {
7
+ coverage: QueryCoverage;
8
+ rooms: readonly QueryRoom[];
9
+ } | PendingResult;
10
+ export type Ran = KeyedResult & {
11
+ readonly current: () => boolean;
12
+ };
13
+ export type Run = (plan: Plan, cover: () => Promise<Cover>) => Promise<Ran>;
14
+ type Listener = (message: QueryMessage) => void;
15
+ export type LiveQueries<H> = {
16
+ touched(set: ChangeSet): void;
17
+ recover(): void;
18
+ watch(plan: Plan, identity: string, cover: (held: H) => Cover, deliver: Listener, failed: Fail): () => void;
19
+ close(): void;
20
+ };
21
+ export declare function createLiveQueries<H>(run: Run, holding: () => Promise<H>): LiveQueries<H>;
22
+ export {};
23
+ //# sourceMappingURL=live.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../src/live.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,KAAK,GAAG;IAAE,QAAQ,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAA;CAAE,GAAG,aAAa,CAAC;AAE7F,MAAM,MAAM,GAAG,GAAG,WAAW,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAA;CAAE,CAAC;AAEpE,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AAE5E,KAAK,QAAQ,GAAG,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;AAchD,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,OAAO,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;IAC9B,OAAO,IAAI,IAAI,CAAC;IAChB,KAAK,CACH,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,EACzB,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,IAAI,GACX,MAAM,IAAI,CAAC;IACd,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAmCF,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CA4HxF"}