@agentshouse/mdruntime 0.1.0-cfcbb238a5fa0 → 0.1.0-cfe148b32e3d8

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 (211) hide show
  1. package/AGENTS.md +229 -211
  2. package/README.md +9 -8
  3. package/dist/adapter.d.ts +69 -35
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/attached-model.d.ts +4 -1
  6. package/dist/attached-model.d.ts.map +1 -1
  7. package/dist/attached-model.js +13 -3
  8. package/dist/binary.d.ts +0 -5
  9. package/dist/binary.d.ts.map +1 -1
  10. package/dist/binary.js +1 -1
  11. package/dist/bootstrap.d.ts +24 -6
  12. package/dist/bootstrap.d.ts.map +1 -1
  13. package/dist/bootstrap.js +167 -82
  14. package/dist/chain.d.ts +11 -0
  15. package/dist/chain.d.ts.map +1 -0
  16. package/dist/chain.js +64 -0
  17. package/dist/change-set.d.ts +9 -16
  18. package/dist/change-set.d.ts.map +1 -1
  19. package/dist/change-set.js +11 -89
  20. package/dist/change.d.ts +31 -1
  21. package/dist/change.d.ts.map +1 -1
  22. package/dist/change.js +10 -1
  23. package/dist/chat/earlier.d.ts +10 -0
  24. package/dist/chat/earlier.d.ts.map +1 -0
  25. package/dist/chat/earlier.js +54 -0
  26. package/dist/chat/house.d.ts +25 -0
  27. package/dist/chat/house.d.ts.map +1 -0
  28. package/dist/chat/house.js +38 -0
  29. package/dist/chat/input.d.ts +3 -1
  30. package/dist/chat/input.d.ts.map +1 -1
  31. package/dist/chat/input.js +11 -18
  32. package/dist/chat/list.d.ts +2 -1
  33. package/dist/chat/list.d.ts.map +1 -1
  34. package/dist/chat/list.js +45 -5
  35. package/dist/chat/markdown.d.ts +2 -2
  36. package/dist/chat/markdown.d.ts.map +1 -1
  37. package/dist/chat/markdown.js +80 -39
  38. package/dist/chat/message.d.ts +1 -0
  39. package/dist/chat/message.d.ts.map +1 -1
  40. package/dist/chat/message.js +73 -11
  41. package/dist/chat/messages.d.ts +14 -1
  42. package/dist/chat/messages.d.ts.map +1 -1
  43. package/dist/chat/messages.js +79 -24
  44. package/dist/chat/name.d.ts +1 -0
  45. package/dist/chat/name.d.ts.map +1 -1
  46. package/dist/chat/name.js +1 -1
  47. package/dist/chat/opened.d.ts +1 -0
  48. package/dist/chat/opened.d.ts.map +1 -1
  49. package/dist/chat/opened.js +2 -0
  50. package/dist/chat/overlay.d.ts +1 -0
  51. package/dist/chat/overlay.d.ts.map +1 -1
  52. package/dist/chat/overlay.js +11 -5
  53. package/dist/chat/parts.d.ts +1 -0
  54. package/dist/chat/parts.d.ts.map +1 -1
  55. package/dist/chat/parts.js +3 -2
  56. package/dist/chat/pieces.d.ts +62 -0
  57. package/dist/chat/pieces.d.ts.map +1 -0
  58. package/dist/chat/pieces.js +1110 -0
  59. package/dist/chat/provider.d.ts +8 -1
  60. package/dist/chat/provider.d.ts.map +1 -1
  61. package/dist/chat/provider.js +98 -92
  62. package/dist/chat/question.d.ts +1 -1
  63. package/dist/chat/question.d.ts.map +1 -1
  64. package/dist/chat/question.js +7 -18
  65. package/dist/chat/ready.d.ts +5 -2
  66. package/dist/chat/ready.d.ts.map +1 -1
  67. package/dist/chat/ready.js +7 -5
  68. package/dist/chat/room-file.d.ts +8 -0
  69. package/dist/chat/room-file.d.ts.map +1 -0
  70. package/dist/chat/room-file.js +72 -0
  71. package/dist/chat/steady.d.ts +3 -0
  72. package/dist/chat/steady.d.ts.map +1 -0
  73. package/dist/chat/steady.js +26 -0
  74. package/dist/chat/style.d.ts.map +1 -1
  75. package/dist/chat/style.js +6 -1
  76. package/dist/chat.d.ts +3 -2
  77. package/dist/chat.d.ts.map +1 -1
  78. package/dist/chat.js +2 -2
  79. package/dist/client.d.ts +11 -4
  80. package/dist/client.d.ts.map +1 -1
  81. package/dist/client.js +35 -5
  82. package/dist/collection.d.ts +6 -19
  83. package/dist/collection.d.ts.map +1 -1
  84. package/dist/collection.js +30 -287
  85. package/dist/compile.d.ts +16 -0
  86. package/dist/compile.d.ts.map +1 -0
  87. package/dist/compile.js +721 -0
  88. package/dist/connection.d.ts +19 -9
  89. package/dist/connection.d.ts.map +1 -1
  90. package/dist/connection.js +2392 -848
  91. package/dist/conversation.d.ts +14 -3
  92. package/dist/conversation.d.ts.map +1 -1
  93. package/dist/conversation.js +198 -89
  94. package/dist/digest.d.ts +7 -0
  95. package/dist/digest.d.ts.map +1 -0
  96. package/dist/digest.js +113 -0
  97. package/dist/durability.d.ts +3 -1
  98. package/dist/durability.d.ts.map +1 -1
  99. package/dist/entry.d.ts +3 -1
  100. package/dist/entry.d.ts.map +1 -1
  101. package/dist/entry.js +18 -23
  102. package/dist/file.d.ts +2 -10
  103. package/dist/file.d.ts.map +1 -1
  104. package/dist/file.js +3 -120
  105. package/dist/fulltext.d.ts +27 -0
  106. package/dist/fulltext.d.ts.map +1 -0
  107. package/dist/fulltext.js +368 -0
  108. package/dist/host.d.ts +1 -4
  109. package/dist/host.d.ts.map +1 -1
  110. package/dist/host.js +21 -8
  111. package/dist/identity.d.ts +0 -1
  112. package/dist/identity.d.ts.map +1 -1
  113. package/dist/identity.js +0 -3
  114. package/dist/index.d.ts +11 -8
  115. package/dist/index.d.ts.map +1 -1
  116. package/dist/index.js +3 -0
  117. package/dist/live.d.ts +22 -0
  118. package/dist/live.d.ts.map +1 -0
  119. package/dist/live.js +123 -0
  120. package/dist/memory.d.ts +3 -2
  121. package/dist/memory.d.ts.map +1 -1
  122. package/dist/memory.js +30 -20
  123. package/dist/messages.d.ts +28 -0
  124. package/dist/messages.d.ts.map +1 -0
  125. package/dist/messages.js +90 -0
  126. package/dist/name.d.ts +4 -0
  127. package/dist/name.d.ts.map +1 -0
  128. package/dist/name.js +122 -0
  129. package/dist/observation.d.ts +14 -0
  130. package/dist/observation.d.ts.map +1 -1
  131. package/dist/observation.js +93 -3
  132. package/dist/opened.d.ts +22 -0
  133. package/dist/opened.d.ts.map +1 -0
  134. package/dist/opened.js +107 -0
  135. package/dist/outcome.d.ts +34 -4
  136. package/dist/outcome.d.ts.map +1 -1
  137. package/dist/outcome.js +25 -0
  138. package/dist/overlay.d.ts +2 -5
  139. package/dist/overlay.d.ts.map +1 -1
  140. package/dist/overlay.js +87 -172
  141. package/dist/query.d.ts +26 -2
  142. package/dist/query.d.ts.map +1 -1
  143. package/dist/query.js +41 -6
  144. package/dist/reach.d.ts +5 -3
  145. package/dist/reach.d.ts.map +1 -1
  146. package/dist/reach.js +158 -57
  147. package/dist/react.d.ts +1 -2
  148. package/dist/react.d.ts.map +1 -1
  149. package/dist/react.js +2 -14
  150. package/dist/readiness.d.ts +18 -3
  151. package/dist/readiness.d.ts.map +1 -1
  152. package/dist/readiness.js +1 -1
  153. package/dist/reads.d.ts.map +1 -1
  154. package/dist/reads.js +4 -2
  155. package/dist/recovery.d.ts +2 -2
  156. package/dist/recovery.d.ts.map +1 -1
  157. package/dist/recovery.js +8 -7
  158. package/dist/refresh.d.ts +11 -13
  159. package/dist/refresh.d.ts.map +1 -1
  160. package/dist/refresh.js +78 -51
  161. package/dist/replica.d.ts +57 -33
  162. package/dist/replica.d.ts.map +1 -1
  163. package/dist/replica.js +295 -186
  164. package/dist/room-draft.d.ts +3 -1
  165. package/dist/room-draft.d.ts.map +1 -1
  166. package/dist/room-draft.js +29 -22
  167. package/dist/rows.d.ts +29 -30
  168. package/dist/rows.d.ts.map +1 -1
  169. package/dist/rows.js +113 -64
  170. package/dist/save.d.ts +51 -14
  171. package/dist/save.d.ts.map +1 -1
  172. package/dist/save.js +518 -180
  173. package/dist/search.d.ts +23 -42
  174. package/dist/search.d.ts.map +1 -1
  175. package/dist/search.js +28 -182
  176. package/dist/seed.d.ts.map +1 -1
  177. package/dist/seed.js +18 -4
  178. package/dist/shared.d.ts +8 -3
  179. package/dist/shared.d.ts.map +1 -1
  180. package/dist/shared.js +129 -66
  181. package/dist/store.d.ts +97 -88
  182. package/dist/store.d.ts.map +1 -1
  183. package/dist/store.js +335 -659
  184. package/dist/stored.d.ts +145 -0
  185. package/dist/stored.d.ts.map +1 -0
  186. package/dist/stored.js +567 -0
  187. package/dist/tables.d.ts +342 -0
  188. package/dist/tables.d.ts.map +1 -0
  189. package/dist/tables.js +576 -0
  190. package/dist/turn.d.ts +5 -3
  191. package/dist/turn.d.ts.map +1 -1
  192. package/dist/turn.js +51 -21
  193. package/dist/validation.d.ts +30 -0
  194. package/dist/validation.d.ts.map +1 -0
  195. package/dist/validation.js +162 -0
  196. package/dist/windows.d.ts +22 -0
  197. package/dist/windows.d.ts.map +1 -0
  198. package/dist/windows.js +89 -0
  199. package/dist/wire.d.ts +29 -1
  200. package/dist/wire.d.ts.map +1 -1
  201. package/dist/wire.js +8 -1
  202. package/dist/words.d.ts +19 -0
  203. package/dist/words.d.ts.map +1 -0
  204. package/dist/words.js +150 -0
  205. package/package.json +10 -4
  206. package/dist/acquisition.d.ts +0 -14
  207. package/dist/acquisition.d.ts.map +0 -1
  208. package/dist/acquisition.js +0 -24
  209. package/dist/read-side.d.ts +0 -25
  210. package/dist/read-side.d.ts.map +0 -1
  211. package/dist/read-side.js +0 -642
package/dist/turn.js CHANGED
@@ -5,41 +5,71 @@ export function yielded() {
5
5
  channel.port1.close();
6
6
  resolve();
7
7
  };
8
- channel.port2.postMessage(null);
8
+ structuredClone(channel.port2, { transfer: [channel.port2] }).postMessage(null);
9
9
  });
10
10
  }
11
11
  const UNIT = 1 << 20;
12
+ // A unit of runtime work ends within one 60 Hz frame so a port's next message waits at most a frame.
13
+ const SLICE_MS = 16;
12
14
  export const ROW_WEIGHT = 256;
13
15
  export function after(value, next) {
14
16
  return value instanceof Promise ? value.then(next) : next(value);
15
17
  }
16
- async function resumed(iterator, each) {
17
- let spent = UNIT;
18
- for (let next = iterator.next(); next.done !== true; next = iterator.next()) {
19
- if (spent >= UNIT) {
20
- await yielded();
18
+ function spending() {
19
+ let spent = 0;
20
+ let since = performance.now();
21
+ return {
22
+ spend(weight) {
23
+ spent += weight;
24
+ return spent >= UNIT || performance.now() - since >= SLICE_MS;
25
+ },
26
+ restart() {
21
27
  spent = 0;
28
+ since = performance.now();
29
+ },
30
+ };
31
+ }
32
+ export function paced() {
33
+ const spent = spending();
34
+ return (weight) => (spent.spend(weight) ? yielded().then(() => spent.restart()) : undefined);
35
+ }
36
+ async function resumed(iterator, each, ended, paused) {
37
+ const spent = spending();
38
+ for (let due = true;;) {
39
+ if (due) {
40
+ await paused();
41
+ spent.restart();
22
42
  }
23
- spent += each(next.value);
43
+ const next = iterator.next();
44
+ if (next.done === true)
45
+ break;
46
+ due = spent.spend(each(next.value));
47
+ if (due)
48
+ ended();
24
49
  }
50
+ ended();
25
51
  }
26
- export function inUnits(items, each) {
52
+ export function inUnits(items, each, ended = () => { }, paused = yielded) {
27
53
  const iterator = items[Symbol.iterator]();
28
- let spent = 0;
54
+ const spent = spending();
29
55
  for (let next = iterator.next(); next.done !== true; next = iterator.next()) {
30
- spent += each(next.value);
31
- if (spent >= UNIT)
32
- return resumed(iterator, each);
56
+ if (spent.spend(each(next.value))) {
57
+ ended();
58
+ return resumed(iterator, each, ended, paused);
59
+ }
33
60
  }
61
+ ended();
34
62
  }
35
- export async function inChunks(items, weigh, each) {
36
- for (let at = 0; at < items.length;) {
37
- await yielded();
38
- const chunk = [];
39
- for (let spent = 0; at < items.length && spent < UNIT; at += 1) {
40
- chunk.push(items[at]);
41
- spent += weigh(items[at]);
42
- }
43
- each(chunk);
63
+ export function finished(steps) {
64
+ for (let step = steps.next();; step = steps.next()) {
65
+ if (step.done === true)
66
+ return step.value;
44
67
  }
45
68
  }
69
+ export function stepped(steps) {
70
+ let result;
71
+ const driven = function* () {
72
+ result = yield* steps;
73
+ };
74
+ return after(inUnits(driven(), (weight) => weight), () => result);
75
+ }
@@ -0,0 +1,30 @@
1
+ import { type Validation } from '@agentshouse/mdmodel';
2
+ import { type Composition } from './collection.js';
3
+ type Examined = {
4
+ readonly path: string;
5
+ readonly content: string | null;
6
+ };
7
+ export type Typed = {
8
+ readonly type: string | undefined;
9
+ readonly binary: boolean;
10
+ };
11
+ export type Walk = (after: string | null) => Promise<{
12
+ readonly entries: readonly Examined[];
13
+ readonly next: string | null;
14
+ }>;
15
+ export type Lookup = (paths: readonly string[]) => Promise<ReadonlyMap<string, Typed>>;
16
+ export declare function validatedCollection(walk: Walk, lookup: Lookup, composition: Composition): Promise<Validation>;
17
+ export type Changed = {
18
+ readonly path: string;
19
+ readonly was: string | null | undefined;
20
+ readonly now: string | null | undefined;
21
+ };
22
+ type CleanSource = {
23
+ readonly lookup: Lookup;
24
+ readonly texts: (paths: readonly string[]) => Promise<ReadonlyMap<string, string | null>>;
25
+ readonly referrers: ((targets: readonly string[]) => Promise<readonly string[]>) | null;
26
+ };
27
+ export declare function sameComposition(left: Composition, right: Composition): boolean;
28
+ export declare function changedCleanly(changes: readonly Changed[], previous: Composition, composition: Composition, source: CleanSource): Promise<boolean>;
29
+ export {};
30
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,UAAU,EAGhB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAMxE,KAAK,QAAQ,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAE3E,MAAM,MAAM,KAAK,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC;AAEpF,MAAM,MAAM,IAAI,GAAG,CACjB,KAAK,EAAE,MAAM,GAAG,IAAI,KACjB,OAAO,CAAC;IAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAAC;AAEtF,MAAM,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAyBvF,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,UAAU,CAAC,CAyCrB;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACzC,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IAC1F,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;CACzF,CAAC;AAaF,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAQ9E;AAqCD,wBAAsB,cAAc,CAClC,OAAO,EAAE,SAAS,OAAO,EAAE,EAC3B,QAAQ,EAAE,WAAW,EACrB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,OAAO,CAAC,CAsDlB"}
@@ -0,0 +1,162 @@
1
+ import { assess, checkDocument, parse, parseFrontmatter, resolves, verdicts, } from '@agentshouse/mdmodel';
2
+ import { governing, selected } from './collection.js';
3
+ import { sameTyping } from './model.js';
4
+ import { paced, ROW_WEIGHT, yielded } from './turn.js';
5
+ const NO_TYPES = { types: {} };
6
+ function modelOf(model) {
7
+ return model.status === 'unavailable' ? NO_TYPES : { types: model.types };
8
+ }
9
+ function typedText(content) {
10
+ const read = parse(content);
11
+ return read.ok && read.document.type !== undefined && read.document.type !== 'any';
12
+ }
13
+ function partVerdict(part) {
14
+ return part.unmodeled !== null
15
+ ? { verdict: 'refuse', rule: 'model-unavailable', file: part.unmodeled }
16
+ : part.judged.verdict();
17
+ }
18
+ export async function validatedCollection(walk, lookup, composition) {
19
+ const collection = { model: composition.model, judged: verdicts(), unmodeled: null };
20
+ const selection = composition.selection === null
21
+ ? null
22
+ : { model: composition.selection.model, judged: verdicts(), unmodeled: null };
23
+ const partOf = (path) => selection !== null && selected(composition, path) ? selection : collection;
24
+ const pace = paced();
25
+ for (let after = null;;) {
26
+ const { entries, next } = await walk(after);
27
+ const assessed = [];
28
+ for (const { path, content } of entries) {
29
+ if (content === null)
30
+ continue;
31
+ const part = partOf(path);
32
+ if (part.model.status === 'unavailable' && part.unmodeled === null && typedText(content)) {
33
+ part.unmodeled = path;
34
+ }
35
+ const assessment = assess(path, content, false, modelOf(part.model), { anyRoom: true });
36
+ assessed.push({ part, assessment });
37
+ await pace(content.length + assessment.targets.length * ROW_WEIGHT);
38
+ }
39
+ const targets = [...new Set(assessed.flatMap(({ assessment }) => assessment.targets))];
40
+ const known = await lookup(targets);
41
+ for (const { part, assessment } of assessed) {
42
+ const within = (path) => partOf(path) === part;
43
+ part.judged.add(assessment, (path) => (within(path) ? known.get(path)?.type : undefined), (path) => within(path) && known.get(path)?.binary === true);
44
+ await pace((assessment.targets.length + 1) * ROW_WEIGHT);
45
+ }
46
+ if (next === null)
47
+ break;
48
+ after = next;
49
+ await yielded();
50
+ }
51
+ const judged = [partVerdict(collection), ...(selection === null ? [] : [partVerdict(selection)])];
52
+ const refusals = judged.filter((verdict) => verdict.verdict === 'refuse');
53
+ if (refusals.length === 0)
54
+ return judged[0];
55
+ return refusals.find((refusal) => refusal.rule !== 'model-unavailable') ?? refusals[0];
56
+ }
57
+ function declared(content) {
58
+ if (content === undefined || content === null)
59
+ return undefined;
60
+ const read = parseFrontmatter(content);
61
+ return read.ok ? (read.frontmatter.type ?? 'any') : undefined;
62
+ }
63
+ function typedIn(content) {
64
+ const type = declared(content);
65
+ return type !== undefined && type !== 'any';
66
+ }
67
+ export function sameComposition(left, right) {
68
+ return (sameTyping(left.model, right.model) &&
69
+ (left.selection === null || right.selection === null
70
+ ? left.selection === right.selection
71
+ : sameTyping(left.selection.model, right.selection.model)) &&
72
+ JSON.stringify(left.selection?.roots ?? null) === JSON.stringify(right.selection?.roots ?? null));
73
+ }
74
+ function checked(path, content, composition) {
75
+ const model = governing(composition, path);
76
+ return checkDocument(path, content, modelOf(model), { anyRoom: true });
77
+ }
78
+ async function reachingAll(checks, composition, next) {
79
+ const targets = [
80
+ ...new Set(checks.flatMap(({ check }) => check.ok ? check.references.flatMap(({ target }) => (target === null ? [] : [target])) : [])),
81
+ ];
82
+ const known = await next(targets);
83
+ const pace = paced();
84
+ for (const { path, check } of checks) {
85
+ if (!check.ok)
86
+ return false;
87
+ const part = (other) => selected(composition, other) === selected(composition, path);
88
+ const resolved = check.references.every((reference) => resolves(reference, (other) => (part(other) ? known.get(other)?.type : undefined), (other) => part(other) && known.get(other)?.binary === true));
89
+ if (!resolved)
90
+ return false;
91
+ await pace((check.references.length + 1) * ROW_WEIGHT);
92
+ }
93
+ return true;
94
+ }
95
+ export async function changedCleanly(changes, previous, composition, source) {
96
+ if (!sameComposition(previous, composition))
97
+ return false;
98
+ const changedAt = new Map(changes.map((change) => [change.path, change]));
99
+ const next = async (paths) => {
100
+ const asked = paths.filter((path) => !changedAt.has(path));
101
+ const known = new Map(await source.lookup(asked));
102
+ for (const path of paths) {
103
+ const change = changedAt.get(path);
104
+ if (change === undefined)
105
+ continue;
106
+ if (change.now === undefined)
107
+ known.delete(path);
108
+ else
109
+ known.set(path, { type: declared(change.now), binary: change.now === null });
110
+ }
111
+ return known;
112
+ };
113
+ const shifted = [];
114
+ const checks = [];
115
+ const pace = paced();
116
+ for (const { path, was, now } of changes) {
117
+ await pace((now?.length ?? 0) + (was?.length ?? 0) + ROW_WEIGHT);
118
+ const modeled = governing(composition, path).status !== 'unavailable';
119
+ if ((now === undefined) !== (was === undefined) ||
120
+ declared(now) !== declared(was) ||
121
+ (now === null) !== (was === null)) {
122
+ shifted.push(path);
123
+ }
124
+ if (!modeled && typedIn(was) && !typedIn(now))
125
+ return false;
126
+ if (now === undefined)
127
+ continue;
128
+ if (now === null)
129
+ return false;
130
+ if (!modeled) {
131
+ if (declared(now) === undefined)
132
+ return false;
133
+ if (typedIn(now))
134
+ continue;
135
+ const check = checked(path, now, composition);
136
+ if (!check.ok)
137
+ return false;
138
+ checks.push({ path, check });
139
+ continue;
140
+ }
141
+ checks.push({ path, check: checked(path, now, composition) });
142
+ }
143
+ if (!(await reachingAll(checks, composition, next)))
144
+ return false;
145
+ if (shifted.length === 0)
146
+ return true;
147
+ if (source.referrers === null)
148
+ return false;
149
+ const files = (await source.referrers(shifted)).filter((file) => !changedAt.has(file));
150
+ if (files.length === 0)
151
+ return true;
152
+ const texts = await source.texts(files);
153
+ const rechecked = [];
154
+ for (const file of files) {
155
+ const content = texts.get(file);
156
+ if (content === undefined || content === null)
157
+ return false;
158
+ await pace(content.length + ROW_WEIGHT);
159
+ rechecked.push({ path: file, check: checked(file, content, composition) });
160
+ }
161
+ return reachingAll(rechecked, composition, next);
162
+ }
@@ -0,0 +1,22 @@
1
+ export declare const MAXIMUM_WINDOW = 1000;
2
+ export declare const FROM_START = "[]";
3
+ export declare function capped(limit: number | null | undefined): number;
4
+ export type Ordering = {
5
+ readonly direction: 'asc' | 'desc';
6
+ readonly nulls: 'first' | 'last';
7
+ readonly stringSort: 'lexical' | 'locale';
8
+ readonly locale: string | undefined;
9
+ readonly localeOptions: Intl.CollatorOptions | undefined;
10
+ };
11
+ interface Placed {
12
+ readonly position: string;
13
+ readonly identity: string;
14
+ }
15
+ export declare function messageOrder(left: Placed, right: Placed): number;
16
+ export declare function precedes(message: Placed, before: readonly [string, string] | null): boolean;
17
+ export declare function byCodePoint(left: string, right: string): number;
18
+ export declare function compared(left: unknown, right: unknown, ordering: Ordering): number;
19
+ export declare function cursorOf(values: readonly unknown[]): string;
20
+ export declare function decodedCursor(text: string): readonly unknown[] | null;
21
+ export {};
22
+ //# sourceMappingURL=windows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows.d.ts","sourceRoot":"","sources":["../src/windows.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,OAAO,CAAC;AAEnC,eAAO,MAAM,UAAU,OAAO,CAAC;AAE/B,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAE/D;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;CAC1D,CAAC;AAEF,UAAU,MAAM;IACd,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,OAAO,CAE3F;AAaD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAO/D;AA4BD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAMlF;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,CAE3D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,OAAO,EAAE,GAAG,IAAI,CAOrE"}
@@ -0,0 +1,89 @@
1
+ export const MAXIMUM_WINDOW = 1000;
2
+ export const FROM_START = '[]';
3
+ export function capped(limit) {
4
+ return limit == null ? MAXIMUM_WINDOW : Math.min(limit, MAXIMUM_WINDOW);
5
+ }
6
+ export function messageOrder(left, right) {
7
+ if (left.position !== right.position)
8
+ return left.position < right.position ? -1 : 1;
9
+ if (left.identity !== right.identity)
10
+ return left.identity < right.identity ? -1 : 1;
11
+ return 0;
12
+ }
13
+ export function precedes(message, before) {
14
+ return before === null || messageOrder(message, { position: before[0], identity: before[1] }) < 0;
15
+ }
16
+ function rank(value) {
17
+ if (typeof value === 'boolean' || typeof value === 'number')
18
+ return 1;
19
+ if (typeof value === 'string')
20
+ return 2;
21
+ return Array.isArray(value) ? 3 : 4;
22
+ }
23
+ function unit(code) {
24
+ if (code >= 0xd800 && code < 0xe000)
25
+ return code + 0x2000;
26
+ return code >= 0xe000 ? code - 0x800 : code;
27
+ }
28
+ export function byCodePoint(left, right) {
29
+ for (let at = 0; at < Math.min(left.length, right.length); at += 1) {
30
+ const ours = left.charCodeAt(at);
31
+ const theirs = right.charCodeAt(at);
32
+ if (ours !== theirs)
33
+ return unit(ours) - unit(theirs);
34
+ }
35
+ return left.length - right.length;
36
+ }
37
+ function ascending(left, right, ordering) {
38
+ if (left == null && right == null)
39
+ return 0;
40
+ if (left == null)
41
+ return ordering.nulls === 'first' ? -1 : 1;
42
+ if (right == null)
43
+ return ordering.nulls === 'first' ? 1 : -1;
44
+ const ranked = rank(left) - rank(right);
45
+ if (ranked !== 0)
46
+ return ranked;
47
+ if (typeof left === 'string' && typeof right === 'string') {
48
+ return ordering.stringSort === 'locale'
49
+ ? left.localeCompare(right, ordering.locale, ordering.localeOptions)
50
+ : byCodePoint(left, right);
51
+ }
52
+ if (Array.isArray(left) && Array.isArray(right)) {
53
+ for (let at = 0; at < Math.min(left.length, right.length); at += 1) {
54
+ const result = ascending(left[at], right[at], ordering);
55
+ if (result !== 0)
56
+ return result;
57
+ }
58
+ return left.length - right.length;
59
+ }
60
+ if (typeof left === 'object')
61
+ return 0;
62
+ const held = left;
63
+ const other = right;
64
+ if (held < other)
65
+ return -1;
66
+ if (held > other)
67
+ return 1;
68
+ return 0;
69
+ }
70
+ export function compared(left, right, ordering) {
71
+ if (ordering.direction === 'asc')
72
+ return ascending(left, right, ordering);
73
+ return ascending(right, left, {
74
+ ...ordering,
75
+ nulls: ordering.nulls === 'first' ? 'last' : 'first',
76
+ });
77
+ }
78
+ export function cursorOf(values) {
79
+ return JSON.stringify(values);
80
+ }
81
+ export function decodedCursor(text) {
82
+ try {
83
+ const decoded = JSON.parse(text);
84
+ return Array.isArray(decoded) ? decoded : null;
85
+ }
86
+ catch {
87
+ return null;
88
+ }
89
+ }
package/dist/wire.d.ts CHANGED
@@ -34,15 +34,27 @@ declare const MEMBERS: {
34
34
  readonly reach: 'within';
35
35
  readonly effect: 'write';
36
36
  };
37
+ readonly saveParts: {
38
+ readonly reach: 'within';
39
+ readonly effect: 'write';
40
+ };
37
41
  readonly history: {
38
42
  readonly reach: 'within';
39
43
  readonly effect: 'read';
40
44
  };
45
+ readonly resolve: {
46
+ readonly reach: 'within';
47
+ readonly effect: 'read';
48
+ };
41
49
  readonly 'binaryFile.read': {
42
50
  readonly reach: 'within';
43
51
  readonly effect: 'read';
44
52
  };
45
- readonly 'binaryFile.readReference': {
53
+ readonly 'binaryFile.link': {
54
+ readonly reach: 'within';
55
+ readonly effect: 'read';
56
+ };
57
+ readonly 'binaryFile.part': {
46
58
  readonly reach: 'within';
47
59
  readonly effect: 'read';
48
60
  };
@@ -58,6 +70,10 @@ declare const MEMBERS: {
58
70
  readonly reach: 'whole';
59
71
  readonly effect: 'read';
60
72
  };
73
+ readonly cleanUp: {
74
+ readonly reach: 'whole';
75
+ readonly effect: 'write';
76
+ };
61
77
  readonly persistence: {
62
78
  readonly reach: 'runtime';
63
79
  readonly effect: 'read';
@@ -94,6 +110,10 @@ declare const MEMBERS: {
94
110
  readonly reach: 'app';
95
111
  readonly effect: 'write';
96
112
  };
113
+ readonly 'presentation.edit': {
114
+ readonly reach: 'app';
115
+ readonly effect: 'write';
116
+ };
97
117
  readonly 'conversation.list': {
98
118
  readonly reach: 'within';
99
119
  readonly effect: 'read';
@@ -110,6 +130,10 @@ declare const MEMBERS: {
110
130
  readonly reach: 'within';
111
131
  readonly effect: 'action';
112
132
  };
133
+ readonly 'conversation.attach': {
134
+ readonly reach: 'within';
135
+ readonly effect: 'action';
136
+ };
113
137
  readonly 'conversation.answer': {
114
138
  readonly reach: 'within';
115
139
  readonly effect: 'action';
@@ -134,6 +158,10 @@ declare const MEMBERS: {
134
158
  readonly reach: 'within';
135
159
  readonly effect: 'write';
136
160
  };
161
+ readonly 'chatDraft.prepend': {
162
+ readonly reach: 'within';
163
+ readonly effect: 'write';
164
+ };
137
165
  readonly 'chatDraft.discard': {
138
166
  readonly reach: 'within';
139
167
  readonly effect: 'write';
@@ -1 +1 @@
1
- {"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../src/wire.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../src/wire.ts"],"names":[],"mappings":"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"}
package/dist/wire.js CHANGED
@@ -5,12 +5,16 @@ const MEMBERS = {
5
5
  search: { reach: 'within', effect: 'read' },
6
6
  types: { reach: 'within', effect: 'read' },
7
7
  save: { reach: 'within', effect: 'write' },
8
+ saveParts: { reach: 'within', effect: 'write' },
8
9
  history: { reach: 'within', effect: 'read' },
10
+ resolve: { reach: 'within', effect: 'read' },
9
11
  'binaryFile.read': { reach: 'within', effect: 'read' },
10
- 'binaryFile.readReference': { reach: 'within', effect: 'read' },
12
+ 'binaryFile.link': { reach: 'within', effect: 'read' },
13
+ 'binaryFile.part': { reach: 'within', effect: 'read' },
11
14
  call: { reach: 'actions', effect: 'action' },
12
15
  reached: { reach: 'within', effect: 'read' },
13
16
  log: { reach: 'whole', effect: 'read' },
17
+ cleanUp: { reach: 'whole', effect: 'write' },
14
18
  persistence: { reach: 'runtime', effect: 'read' },
15
19
  retry: { reach: 'runtime', effect: 'write' },
16
20
  reauthorize: { reach: 'runtime', effect: 'write' },
@@ -20,16 +24,19 @@ const MEMBERS = {
20
24
  'roomDraft.discard': { reach: 'within', effect: 'write' },
21
25
  'presentation.read': { reach: 'app', effect: 'read' },
22
26
  'presentation.write': { reach: 'app', effect: 'write' },
27
+ 'presentation.edit': { reach: 'app', effect: 'write' },
23
28
  'conversation.list': { reach: 'within', effect: 'read' },
24
29
  'conversation.read': { reach: 'within', effect: 'read' },
25
30
  'conversation.create': { reach: 'within', effect: 'action' },
26
31
  'conversation.send': { reach: 'within', effect: 'action' },
32
+ 'conversation.attach': { reach: 'within', effect: 'action' },
27
33
  'conversation.answer': { reach: 'within', effect: 'action' },
28
34
  'conversation.interrupt': { reach: 'within', effect: 'action' },
29
35
  'conversation.kill': { reach: 'within', effect: 'action' },
30
36
  'conversation.cancel': { reach: 'within', effect: 'action' },
31
37
  'conversation.delete': { reach: 'within', effect: 'action' },
32
38
  'chatDraft.write': { reach: 'within', effect: 'write' },
39
+ 'chatDraft.prepend': { reach: 'within', effect: 'write' },
33
40
  'chatDraft.discard': { reach: 'within', effect: 'write' },
34
41
  };
35
42
  const TOPICS = {
@@ -0,0 +1,19 @@
1
+ export type Clause = {
2
+ readonly text: string;
3
+ readonly kind: 'term' | 'stem' | 'prefix' | 'phrase';
4
+ readonly term: string;
5
+ };
6
+ export type Located = {
7
+ readonly start: number;
8
+ readonly end: number;
9
+ };
10
+ export declare function indexed(text: string): string;
11
+ export declare function matchClauses(text: string): Clause[] | null;
12
+ export declare function matchExpression(clauses: readonly Clause[]): string;
13
+ export declare function queryTerms(text: string): string[];
14
+ export declare function snippet(part: string, terms: readonly string[], reach: number): {
15
+ readonly text: string;
16
+ readonly at: readonly [number, number];
17
+ } | null;
18
+ export declare function matched(part: string, terms: readonly string[]): string[];
19
+ //# sourceMappingURL=words.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"words.d.ts","sourceRoot":"","sources":["../src/words.ts"],"names":[],"mappings":"AAwBA,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAYvE,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C;AAgBD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAiB1D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAElE;AAMD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAEjD;AAyDD,wBAAgB,OAAO,CACrB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,KAAK,EAAE,MAAM,GACZ;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAW1E;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAQxE"}