@agentshouse/mdruntime 0.1.0-alpha.24 → 0.1.0-alpha.25

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 (46) hide show
  1. package/AGENTS.md +36 -0
  2. package/dist/change-set.d.ts +4 -11
  3. package/dist/change-set.d.ts.map +1 -1
  4. package/dist/change-set.js +8 -16
  5. package/dist/change-set.js.map +1 -1
  6. package/dist/client.d.ts +7 -3
  7. package/dist/client.d.ts.map +1 -1
  8. package/dist/client.js +2 -2
  9. package/dist/client.js.map +1 -1
  10. package/dist/collection.d.ts +0 -2
  11. package/dist/collection.d.ts.map +1 -1
  12. package/dist/collection.js +0 -5
  13. package/dist/collection.js.map +1 -1
  14. package/dist/connection.d.ts +7 -5
  15. package/dist/connection.d.ts.map +1 -1
  16. package/dist/connection.js +52 -68
  17. package/dist/connection.js.map +1 -1
  18. package/dist/conversation.d.ts +4 -4
  19. package/dist/conversation.d.ts.map +1 -1
  20. package/dist/conversation.js +12 -6
  21. package/dist/conversation.js.map +1 -1
  22. package/dist/host.d.ts.map +1 -1
  23. package/dist/host.js.map +1 -1
  24. package/dist/index.d.ts +1 -2
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/paths.d.ts +1 -0
  28. package/dist/paths.d.ts.map +1 -1
  29. package/dist/paths.js +8 -0
  30. package/dist/paths.js.map +1 -1
  31. package/dist/query.d.ts +199 -10
  32. package/dist/query.d.ts.map +1 -1
  33. package/dist/query.js +450 -14
  34. package/dist/query.js.map +1 -1
  35. package/dist/read-side.d.ts +10 -0
  36. package/dist/read-side.d.ts.map +1 -0
  37. package/dist/read-side.js +374 -0
  38. package/dist/read-side.js.map +1 -0
  39. package/dist/rows.d.ts +39 -0
  40. package/dist/rows.d.ts.map +1 -0
  41. package/dist/rows.js +85 -0
  42. package/dist/rows.js.map +1 -0
  43. package/dist/wire.d.ts +1 -1
  44. package/dist/wire.js +1 -1
  45. package/dist/wire.js.map +1 -1
  46. package/package.json +2 -2
package/AGENTS.md CHANGED
@@ -36,6 +36,42 @@ owns their boundary.
36
36
  The in-memory Adapter at `@agentshouse/mdruntime/memory` is for tests and
37
37
  ships in no bundle.
38
38
 
39
+ ## Local Query rules
40
+
41
+ `query(q)` answers once from local state; `observe('query', q, listener)` hears
42
+ the whole result at once and again only when it changes. A query is data:
43
+
44
+ - **Filter.** `rooms` names Room locators and defaults to every Room. `types`
45
+ names MD Types, and `any` names the untyped Documents. `pathPrefix` is a
46
+ directory: `notes` keeps `notes/a.md` and not `notes2/a.md`.
47
+ - **Fields.** `where` names frontmatter fields, ANDs them, and nests `$and` and
48
+ `$or`. A bare value is equality; the operators are `$eq`, `$ne`, `$in`, `$nin`,
49
+ `$gt`, `$gte`, `$lt`, `$lte`, `$all`, `$size` and `$exists`. Equality on a list
50
+ asks whether it contains the value. Missing, null and empty differ:
51
+ `$exists: false` keeps a missing field, `null` an explicit null, `''` empty
52
+ text and `$size: 0` an empty list. A date compares in calendar order and never
53
+ with a date-time. A reference compares by the Room Path it resolves to.
54
+ Untyped frontmatter is plain values. There is no text containment or regular
55
+ expression.
56
+ - **Relations.** `hop: { field, types, where, pathPrefix }` keeps Documents whose
57
+ reference `field` points to a matching Document of the same Room.
58
+ `backlinks: { field, types, where, pathPrefix }` keeps Documents that a
59
+ matching Document of the same Room references. Each keeps a Document once.
60
+ - **Parts.** A Document query must `select`: `'all'`, or `fields`, `sections`,
61
+ `preamble`, `markdown` and `backlinks`, where `fields` and `sections` are
62
+ `'all'` or a list of names. Room, Path and MD Type always return, and an
63
+ unselected part is absent. Select only what a screen shows: a list that selects
64
+ the Markdown hears every edit of it.
65
+ - **Order and groups.** `orderBy` sorts by `room`, `path`, `type` or `{ field }`
66
+ with TanStack DB's own options, and ties end with Room, then Path. `groupBy` by
67
+ `room`, `type` or `{ field }` answers `{ groups: [{ key, count }] }`, counted
68
+ over every match and ordered by `count` or a key. `limit` bounds the Documents
69
+ or the groups.
70
+ - **Results and errors.** A result carries no Room Version: read freshness from
71
+ Rooms and Sync Status. An invalid query fails with `invalid-query`,
72
+ `unknown-type`, `unknown-field` or `wrong-kind`, naming where, and never
73
+ answers an empty result in its place.
74
+
39
75
  ## Room Draft, Save, and outcome rules
40
76
 
41
77
  The MD Runtime owns one Room Draft per Room and Path, shared by every App and
@@ -1,15 +1,10 @@
1
- import type { Document } from '@agentshouse/mdmodel';
2
- import type { Replica } from './replica.js';
3
- export type VisibleDocument = {
4
- content: string;
5
- revision: string | null;
6
- document: Document;
7
- };
1
+ import { type Replica } from './replica.js';
2
+ import { type Row } from './rows.js';
8
3
  export type DocumentChange = {
9
4
  locator: string;
10
5
  path: string;
11
- before: VisibleDocument | null;
12
- after: VisibleDocument | null;
6
+ before: readonly Row[];
7
+ after: readonly Row[];
13
8
  };
14
9
  export type MessageChange = {
15
10
  conversation: string;
@@ -24,7 +19,6 @@ export type ChangeSet = {
24
19
  rooms: readonly string[];
25
20
  queues: readonly string[];
26
21
  presentations: readonly string[];
27
- query: boolean;
28
22
  messages: readonly MessageChange[];
29
23
  conversations: readonly string[];
30
24
  };
@@ -33,7 +27,6 @@ export declare function changeSet(locator: string, before: Replica | null, after
33
27
  room?: boolean;
34
28
  queue?: boolean;
35
29
  presentation?: string;
36
- query?: boolean;
37
30
  }): ChangeSet;
38
31
  export declare function conversationChangeSet(messages: readonly MessageChange[], conversations: readonly string[]): ChangeSet;
39
32
  export declare function mergeChangeSets(sets: readonly ChangeSet[]): ChangeSet;
@@ -1 +1 @@
1
- {"version":3,"file":"change-set.d.ts","sourceRoot":"","sources":["../src/change-set.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE,MAAM,MAAM,SAAS,GAAG;IACtB,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;IACrC,MAAM,EAAE,SAAS;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrD,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IACnC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC,CAAC;AAaF,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,GAAG,IAAI,EACtB,KAAK,EAAE,OAAO,GAAG,IAAI,EACrB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;CACZ,GACL,SAAS,CAsCX;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,SAAS,aAAa,EAAE,EAClC,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,SAAS,CAWX;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,CAWrE"}
1
+ {"version":3,"file":"change-set.d.ts","sourceRoot":"","sources":["../src/change-set.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAU,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,EAAE,CAAC;IACvB,KAAK,EAAE,SAAS,GAAG,EAAE,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE,MAAM,MAAM,SAAS,GAAG;IACtB,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;IACrC,MAAM,EAAE,SAAS;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrD,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IACnC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC,CAAC;AAYF,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,GAAG,IAAI,EACtB,KAAK,EAAE,OAAO,GAAG,IAAI,EACrB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CAClB,GACL,SAAS,CA4CX;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,SAAS,aAAa,EAAE,EAClC,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,SAAS,CAUX;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,CAUrE"}
@@ -1,13 +1,10 @@
1
1
  import { beneath } from './paths.js';
2
- function documentAt(replica, path) {
3
- const content = replica?.visible.documents[path];
2
+ import { compositionOf } from './replica.js';
3
+ import { rowsOf } from './rows.js';
4
+ function rowsAt(locator, replica, path) {
4
5
  const document = replica?.visible.collection.documents[path];
5
- if (content === undefined || document === undefined) return null;
6
- return {
7
- content,
8
- revision: replica?.visible.revisions[path] ?? null,
9
- document
10
- };
6
+ if (replica === null || document === undefined) return [];
7
+ return rowsOf(locator, path, document, compositionOf(replica.confirmed.record));
11
8
  }
12
9
  function modelShape(model) {
13
10
  return model.status === 'unavailable' ? 'unavailable' : JSON.stringify(model.types);
@@ -23,17 +20,15 @@ export function changeSet(locator, before, after, changed = {}) {
23
20
  const collectionChanged = oldRoom !== undefined && newRoom !== undefined && modelShape(oldRoom.model) !== modelShape(newRoom.model);
24
21
  const selectionChanged = oldRoom !== undefined && newRoom !== undefined && modelShape(oldRoom.selectionModel) !== modelShape(newRoom.selectionModel);
25
22
  for (const path of paths){
26
- const prior = documentAt(before, path);
27
- const next = documentAt(after, path);
28
23
  const selected = newRoom?.typedSelection?.roots.some((root)=>beneath(root, path)) ?? false;
29
24
  const inCollection = newRoom !== undefined && (newRoom.collectionRoot === '' || beneath(newRoom.collectionRoot, path));
30
25
  const retyped = selected ? selectionChanged : inCollection && collectionChanged;
31
- if (prior?.content === next?.content && prior?.revision === next?.revision && !retyped) continue;
26
+ if (before?.visible.documents[path] === after?.visible.documents[path] && before?.visible.revisions[path] === after?.visible.revisions[path] && !retyped) continue;
32
27
  documents.push({
33
28
  locator,
34
29
  path,
35
- before: prior,
36
- after: next
30
+ before: rowsAt(locator, before, path),
31
+ after: rowsAt(locator, after, path)
37
32
  });
38
33
  }
39
34
  return {
@@ -51,7 +46,6 @@ export function changeSet(locator, before, after, changed = {}) {
51
46
  presentations: changed.presentation === undefined ? [] : [
52
47
  changed.presentation
53
48
  ],
54
- query: changed.query ?? false,
55
49
  messages: [],
56
50
  conversations: []
57
51
  };
@@ -63,7 +57,6 @@ export function conversationChangeSet(messages, conversations) {
63
57
  rooms: [],
64
58
  queues: [],
65
59
  presentations: [],
66
- query: false,
67
60
  messages,
68
61
  conversations: [
69
62
  ...new Set(conversations)
@@ -83,7 +76,6 @@ export function mergeChangeSets(sets) {
83
76
  presentations: [
84
77
  ...new Set(sets.flatMap((set)=>set.presentations))
85
78
  ],
86
- query: sets.some((set)=>set.query),
87
79
  messages: sets.flatMap((set)=>set.messages),
88
80
  conversations: [
89
81
  ...new Set(sets.flatMap((set)=>set.conversations))
@@ -1 +1 @@
1
- {"version":3,"sources":["/workspace/packages/mdruntime/src/change-set.ts"],"sourcesContent":["import type { Document } from '@agentshouse/mdmodel';\nimport { beneath } from './paths.js';\nimport type { Replica } from './replica.js';\n\nexport type VisibleDocument = {\n content: string;\n revision: string | null;\n document: Document;\n};\n\nexport type DocumentChange = {\n locator: string;\n path: string;\n before: VisibleDocument | null;\n after: VisibleDocument | null;\n};\n\nexport type MessageChange = { conversation: string; identity: string };\n\nexport type ChangeSet = {\n documents: readonly DocumentChange[];\n drafts: readonly { locator: string; path: string }[];\n rooms: readonly string[];\n queues: readonly string[];\n presentations: readonly string[];\n query: boolean;\n messages: readonly MessageChange[];\n conversations: readonly string[];\n};\n\nfunction documentAt(replica: Replica | null, path: string): VisibleDocument | null {\n const content = replica?.visible.documents[path];\n const document = replica?.visible.collection.documents[path];\n if (content === undefined || document === undefined) return null;\n return { content, revision: replica?.visible.revisions[path] ?? null, document };\n}\n\nfunction modelShape(model: Replica['confirmed']['record']['model']): string {\n return model.status === 'unavailable' ? 'unavailable' : JSON.stringify(model.types);\n}\n\nexport function changeSet(\n locator: string,\n before: Replica | null,\n after: Replica | null,\n changed: {\n drafts?: readonly string[];\n room?: boolean;\n queue?: boolean;\n presentation?: string;\n query?: boolean;\n } = {},\n): ChangeSet {\n const paths = new Set([\n ...Object.keys(before?.visible.documents ?? {}),\n ...Object.keys(after?.visible.documents ?? {}),\n ]);\n const documents: DocumentChange[] = [];\n const oldRoom = before?.confirmed.record;\n const newRoom = after?.confirmed.record;\n const collectionChanged =\n oldRoom !== undefined &&\n newRoom !== undefined &&\n modelShape(oldRoom.model) !== modelShape(newRoom.model);\n const selectionChanged =\n oldRoom !== undefined &&\n newRoom !== undefined &&\n modelShape(oldRoom.selectionModel) !== modelShape(newRoom.selectionModel);\n for (const path of paths) {\n const prior = documentAt(before, path);\n const next = documentAt(after, path);\n const selected = newRoom?.typedSelection?.roots.some((root) => beneath(root, path)) ?? false;\n const inCollection =\n newRoom !== undefined &&\n (newRoom.collectionRoot === '' || beneath(newRoom.collectionRoot, path));\n const retyped = selected ? selectionChanged : inCollection && collectionChanged;\n if (prior?.content === next?.content && prior?.revision === next?.revision && !retyped)\n continue;\n documents.push({ locator, path, before: prior, after: next });\n }\n return {\n documents,\n drafts: (changed.drafts ?? []).map((path) => ({ locator, path })),\n rooms: changed.room ? [locator] : [],\n queues: changed.queue ? [locator] : [],\n presentations: changed.presentation === undefined ? [] : [changed.presentation],\n query: changed.query ?? false,\n messages: [],\n conversations: [],\n };\n}\n\nexport function conversationChangeSet(\n messages: readonly MessageChange[],\n conversations: readonly string[],\n): ChangeSet {\n return {\n documents: [],\n drafts: [],\n rooms: [],\n queues: [],\n presentations: [],\n query: false,\n messages,\n conversations: [...new Set(conversations)],\n };\n}\n\nexport function mergeChangeSets(sets: readonly ChangeSet[]): ChangeSet {\n return {\n documents: sets.flatMap((set) => set.documents),\n drafts: sets.flatMap((set) => set.drafts),\n rooms: [...new Set(sets.flatMap((set) => set.rooms))],\n queues: [...new Set(sets.flatMap((set) => set.queues))],\n presentations: [...new Set(sets.flatMap((set) => set.presentations))],\n query: sets.some((set) => set.query),\n messages: sets.flatMap((set) => set.messages),\n conversations: [...new Set(sets.flatMap((set) => set.conversations))],\n };\n}\n"],"names":["beneath","documentAt","replica","path","content","visible","documents","document","collection","undefined","revision","revisions","modelShape","model","status","JSON","stringify","types","changeSet","locator","before","after","changed","paths","Set","Object","keys","oldRoom","confirmed","record","newRoom","collectionChanged","selectionChanged","selectionModel","prior","next","selected","typedSelection","roots","some","root","inCollection","collectionRoot","retyped","push","drafts","map","rooms","room","queues","queue","presentations","presentation","query","messages","conversations","conversationChangeSet","mergeChangeSets","sets","flatMap","set"],"mappings":"AACA,SAASA,OAAO,QAAQ,aAAa;AA6BrC,SAASC,WAAWC,OAAuB,EAAEC,IAAY;IACvD,MAAMC,UAAUF,SAASG,QAAQC,SAAS,CAACH,KAAK;IAChD,MAAMI,WAAWL,SAASG,QAAQG,WAAWF,SAAS,CAACH,KAAK;IAC5D,IAAIC,YAAYK,aAAaF,aAAaE,WAAW,OAAO;IAC5D,OAAO;QAAEL;QAASM,UAAUR,SAASG,QAAQM,SAAS,CAACR,KAAK,IAAI;QAAMI;IAAS;AACjF;AAEA,SAASK,WAAWC,KAA8C;IAChE,OAAOA,MAAMC,MAAM,KAAK,gBAAgB,gBAAgBC,KAAKC,SAAS,CAACH,MAAMI,KAAK;AACpF;AAEA,OAAO,SAASC,UACdC,OAAe,EACfC,MAAsB,EACtBC,KAAqB,EACrBC,UAMI,CAAC,CAAC;IAEN,MAAMC,QAAQ,IAAIC,IAAI;WACjBC,OAAOC,IAAI,CAACN,QAAQf,QAAQC,aAAa,CAAC;WAC1CmB,OAAOC,IAAI,CAACL,OAAOhB,QAAQC,aAAa,CAAC;KAC7C;IACD,MAAMA,YAA8B,EAAE;IACtC,MAAMqB,UAAUP,QAAQQ,UAAUC;IAClC,MAAMC,UAAUT,OAAOO,UAAUC;IACjC,MAAME,oBACJJ,YAAYlB,aACZqB,YAAYrB,aACZG,WAAWe,QAAQd,KAAK,MAAMD,WAAWkB,QAAQjB,KAAK;IACxD,MAAMmB,mBACJL,YAAYlB,aACZqB,YAAYrB,aACZG,WAAWe,QAAQM,cAAc,MAAMrB,WAAWkB,QAAQG,cAAc;IAC1E,KAAK,MAAM9B,QAAQoB,MAAO;QACxB,MAAMW,QAAQjC,WAAWmB,QAAQjB;QACjC,MAAMgC,OAAOlC,WAAWoB,OAAOlB;QAC/B,MAAMiC,WAAWN,SAASO,gBAAgBC,MAAMC,KAAK,CAACC,OAASxC,QAAQwC,MAAMrC,UAAU;QACvF,MAAMsC,eACJX,YAAYrB,aACXqB,CAAAA,QAAQY,cAAc,KAAK,MAAM1C,QAAQ8B,QAAQY,cAAc,EAAEvC,KAAI;QACxE,MAAMwC,UAAUP,WAAWJ,mBAAmBS,gBAAgBV;QAC9D,IAAIG,OAAO9B,YAAY+B,MAAM/B,WAAW8B,OAAOxB,aAAayB,MAAMzB,YAAY,CAACiC,SAC7E;QACFrC,UAAUsC,IAAI,CAAC;YAAEzB;YAAShB;YAAMiB,QAAQc;YAAOb,OAAOc;QAAK;IAC7D;IACA,OAAO;QACL7B;QACAuC,QAAQ,AAACvB,CAAAA,QAAQuB,MAAM,IAAI,EAAE,AAAD,EAAGC,GAAG,CAAC,CAAC3C,OAAU,CAAA;gBAAEgB;gBAAShB;YAAK,CAAA;QAC9D4C,OAAOzB,QAAQ0B,IAAI,GAAG;YAAC7B;SAAQ,GAAG,EAAE;QACpC8B,QAAQ3B,QAAQ4B,KAAK,GAAG;YAAC/B;SAAQ,GAAG,EAAE;QACtCgC,eAAe7B,QAAQ8B,YAAY,KAAK3C,YAAY,EAAE,GAAG;YAACa,QAAQ8B,YAAY;SAAC;QAC/EC,OAAO/B,QAAQ+B,KAAK,IAAI;QACxBC,UAAU,EAAE;QACZC,eAAe,EAAE;IACnB;AACF;AAEA,OAAO,SAASC,sBACdF,QAAkC,EAClCC,aAAgC;IAEhC,OAAO;QACLjD,WAAW,EAAE;QACbuC,QAAQ,EAAE;QACVE,OAAO,EAAE;QACTE,QAAQ,EAAE;QACVE,eAAe,EAAE;QACjBE,OAAO;QACPC;QACAC,eAAe;eAAI,IAAI/B,IAAI+B;SAAe;IAC5C;AACF;AAEA,OAAO,SAASE,gBAAgBC,IAA0B;IACxD,OAAO;QACLpD,WAAWoD,KAAKC,OAAO,CAAC,CAACC,MAAQA,IAAItD,SAAS;QAC9CuC,QAAQa,KAAKC,OAAO,CAAC,CAACC,MAAQA,IAAIf,MAAM;QACxCE,OAAO;eAAI,IAAIvB,IAAIkC,KAAKC,OAAO,CAAC,CAACC,MAAQA,IAAIb,KAAK;SAAG;QACrDE,QAAQ;eAAI,IAAIzB,IAAIkC,KAAKC,OAAO,CAAC,CAACC,MAAQA,IAAIX,MAAM;SAAG;QACvDE,eAAe;eAAI,IAAI3B,IAAIkC,KAAKC,OAAO,CAAC,CAACC,MAAQA,IAAIT,aAAa;SAAG;QACrEE,OAAOK,KAAKnB,IAAI,CAAC,CAACqB,MAAQA,IAAIP,KAAK;QACnCC,UAAUI,KAAKC,OAAO,CAAC,CAACC,MAAQA,IAAIN,QAAQ;QAC5CC,eAAe;eAAI,IAAI/B,IAAIkC,KAAKC,OAAO,CAAC,CAACC,MAAQA,IAAIL,aAAa;SAAG;IACvE;AACF"}
1
+ {"version":3,"sources":["/workspace/packages/mdruntime/src/change-set.ts"],"sourcesContent":["import { beneath } from './paths.js';\nimport { compositionOf, type Replica } from './replica.js';\nimport { rowsOf, type Row } from './rows.js';\n\nexport type DocumentChange = {\n locator: string;\n path: string;\n before: readonly Row[];\n after: readonly Row[];\n};\n\nexport type MessageChange = { conversation: string; identity: string };\n\nexport type ChangeSet = {\n documents: readonly DocumentChange[];\n drafts: readonly { locator: string; path: string }[];\n rooms: readonly string[];\n queues: readonly string[];\n presentations: readonly string[];\n messages: readonly MessageChange[];\n conversations: readonly string[];\n};\n\nfunction rowsAt(locator: string, replica: Replica | null, path: string): readonly Row[] {\n const document = replica?.visible.collection.documents[path];\n if (replica === null || document === undefined) return [];\n return rowsOf(locator, path, document, compositionOf(replica.confirmed.record));\n}\n\nfunction modelShape(model: Replica['confirmed']['record']['model']): string {\n return model.status === 'unavailable' ? 'unavailable' : JSON.stringify(model.types);\n}\n\nexport function changeSet(\n locator: string,\n before: Replica | null,\n after: Replica | null,\n changed: {\n drafts?: readonly string[];\n room?: boolean;\n queue?: boolean;\n presentation?: string;\n } = {},\n): ChangeSet {\n const paths = new Set([\n ...Object.keys(before?.visible.documents ?? {}),\n ...Object.keys(after?.visible.documents ?? {}),\n ]);\n const documents: DocumentChange[] = [];\n const oldRoom = before?.confirmed.record;\n const newRoom = after?.confirmed.record;\n const collectionChanged =\n oldRoom !== undefined &&\n newRoom !== undefined &&\n modelShape(oldRoom.model) !== modelShape(newRoom.model);\n const selectionChanged =\n oldRoom !== undefined &&\n newRoom !== undefined &&\n modelShape(oldRoom.selectionModel) !== modelShape(newRoom.selectionModel);\n for (const path of paths) {\n const selected = newRoom?.typedSelection?.roots.some((root) => beneath(root, path)) ?? false;\n const inCollection =\n newRoom !== undefined &&\n (newRoom.collectionRoot === '' || beneath(newRoom.collectionRoot, path));\n const retyped = selected ? selectionChanged : inCollection && collectionChanged;\n if (\n before?.visible.documents[path] === after?.visible.documents[path] &&\n before?.visible.revisions[path] === after?.visible.revisions[path] &&\n !retyped\n )\n continue;\n documents.push({\n locator,\n path,\n before: rowsAt(locator, before, path),\n after: rowsAt(locator, after, path),\n });\n }\n return {\n documents,\n drafts: (changed.drafts ?? []).map((path) => ({ locator, path })),\n rooms: changed.room ? [locator] : [],\n queues: changed.queue ? [locator] : [],\n presentations: changed.presentation === undefined ? [] : [changed.presentation],\n messages: [],\n conversations: [],\n };\n}\n\nexport function conversationChangeSet(\n messages: readonly MessageChange[],\n conversations: readonly string[],\n): ChangeSet {\n return {\n documents: [],\n drafts: [],\n rooms: [],\n queues: [],\n presentations: [],\n messages,\n conversations: [...new Set(conversations)],\n };\n}\n\nexport function mergeChangeSets(sets: readonly ChangeSet[]): ChangeSet {\n return {\n documents: sets.flatMap((set) => set.documents),\n drafts: sets.flatMap((set) => set.drafts),\n rooms: [...new Set(sets.flatMap((set) => set.rooms))],\n queues: [...new Set(sets.flatMap((set) => set.queues))],\n presentations: [...new Set(sets.flatMap((set) => set.presentations))],\n messages: sets.flatMap((set) => set.messages),\n conversations: [...new Set(sets.flatMap((set) => set.conversations))],\n };\n}\n"],"names":["beneath","compositionOf","rowsOf","rowsAt","locator","replica","path","document","visible","collection","documents","undefined","confirmed","record","modelShape","model","status","JSON","stringify","types","changeSet","before","after","changed","paths","Set","Object","keys","oldRoom","newRoom","collectionChanged","selectionChanged","selectionModel","selected","typedSelection","roots","some","root","inCollection","collectionRoot","retyped","revisions","push","drafts","map","rooms","room","queues","queue","presentations","presentation","messages","conversations","conversationChangeSet","mergeChangeSets","sets","flatMap","set"],"mappings":"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"}
package/dist/client.d.ts CHANGED
@@ -1,15 +1,18 @@
1
- import type { QueryOptions, QueryResult } from '@agentshouse/query';
2
1
  import type { AppRoom, AppSlot, ConnectionRefusal, HistoryQuery, RoomTypes, SavedRoomDraft, SaveResult } from './connection.js';
3
2
  import type { HistoryResult } from './adapter.js';
4
3
  import type { ChatDraft, ConversationEntry, ConversationOptions, ConversationView } from './conversation.js';
5
4
  import type { CallResult, QueueEntry, SubmissionOutcome } from './outcome.js';
5
+ import type { DocumentQuery, DocumentResult, GroupQuery, GroupResult } from './query.js';
6
6
  import type { RoomDraft, RoomDraftParts, RoomDraftWrite } from './room-draft.js';
7
7
  import type { SyncStatus } from './status.js';
8
8
  import { type RuntimePort } from './wire.js';
9
9
  export type MdRuntimeClient = {
10
10
  rooms(): Promise<readonly AppRoom[]>;
11
11
  slots(): Promise<readonly AppSlot[]>;
12
- query(options?: QueryOptions): Promise<QueryResult>;
12
+ query: {
13
+ (query: DocumentQuery): Promise<DocumentResult>;
14
+ (query: GroupQuery): Promise<GroupResult>;
15
+ };
13
16
  types(locator: string): Promise<RoomTypes>;
14
17
  syncStatus(): Promise<SyncStatus>;
15
18
  roomDraft: {
@@ -51,7 +54,8 @@ export type MdRuntimeClient = {
51
54
  (topic: 'connection-refusal', listener: (refusal: ConnectionRefusal | null) => void): Promise<() => void>;
52
55
  (topic: 'storage-loss', listener: (statement: string | null) => void): Promise<() => void>;
53
56
  (topic: 'sync-status', listener: (status: SyncStatus) => void): Promise<() => void>;
54
- (topic: 'query', query: QueryOptions, listener: (result: QueryResult) => void): Promise<() => void>;
57
+ (topic: 'query', query: DocumentQuery, listener: (result: DocumentResult) => void): Promise<() => void>;
58
+ (topic: 'query', query: GroupQuery, listener: (result: GroupResult) => void): Promise<() => void>;
55
59
  (topic: 'queue', locator: string, listener: (entries: readonly QueueEntry[]) => void): Promise<() => void>;
56
60
  (topic: 'room-drafts', listener: (roomDrafts: readonly RoomDraft[]) => void): Promise<() => void>;
57
61
  (topic: 'presentation', listener: (value: unknown) => void): Promise<() => void>;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -120,8 +120,8 @@ export function connectMdRuntime(port) {
120
120
  return {
121
121
  rooms: ()=>ask('rooms', []),
122
122
  slots: ()=>ask('slots', []),
123
- query: (options)=>ask('query', [
124
- options
123
+ query: (query)=>ask('query', [
124
+ query
125
125
  ]),
126
126
  types: (locator)=>ask('types', [
127
127
  locator
@@ -1 +1 @@
1
- {"version":3,"sources":["/workspace/packages/mdruntime/src/client.ts"],"sourcesContent":["import type { QueryOptions, QueryResult } from '@agentshouse/query';\nimport type {\n AppRoom,\n AppSlot,\n ConnectionRefusal,\n HistoryQuery,\n RoomTypes,\n SavedRoomDraft,\n SaveResult,\n} from './connection.js';\nimport type { HistoryResult } from './adapter.js';\nimport type {\n ChatDraft,\n ConversationEntry,\n ConversationOptions,\n ConversationView,\n} from './conversation.js';\nimport type { CallResult, QueueEntry, SubmissionOutcome } from './outcome.js';\nimport type { RoomDraft, RoomDraftParts, RoomDraftWrite } from './room-draft.js';\nimport type { SyncStatus } from './status.js';\nimport {\n answer,\n AUTHORIZATION_ENDED,\n carried,\n envelope,\n PROTOCOL_MISMATCH,\n type RuntimePort,\n type WireMember,\n type WireRequest,\n type WireTopic,\n} from './wire.js';\n\nexport type MdRuntimeClient = {\n rooms(): Promise<readonly AppRoom[]>;\n slots(): Promise<readonly AppSlot[]>;\n query(options?: QueryOptions): Promise<QueryResult>;\n types(locator: string): Promise<RoomTypes>;\n syncStatus(): Promise<SyncStatus>;\n roomDraft: {\n list(): Promise<readonly RoomDraft[]>;\n read(room: string, path: string): Promise<RoomDraft | null>;\n write(\n room: string,\n path: string,\n revision: string | null,\n parts: RoomDraftParts,\n ): Promise<RoomDraftWrite>;\n discard(room: string, path: string, revision: string): Promise<RoomDraftWrite>;\n };\n save(room: string, roomDrafts: readonly SavedRoomDraft[]): Promise<SaveResult>;\n outcome(identifier: string): Promise<SubmissionOutcome | null>;\n presentation: {\n read(): Promise<unknown>;\n write(value: unknown): Promise<void>;\n };\n conversation: {\n list(): Promise<readonly ConversationEntry[]>;\n read(conversation: string, options?: ConversationOptions): Promise<ConversationView>;\n create(input: unknown): Promise<CallResult>;\n send(conversation: string): Promise<CallResult>;\n answer(conversation: string, answer: unknown): Promise<CallResult>;\n interrupt(conversation: string): Promise<CallResult>;\n kill(conversation: string): Promise<CallResult>;\n cancel(conversation: string, turn: string): Promise<CallResult>;\n delete(conversation: string): Promise<CallResult>;\n };\n chatDraft: {\n write(conversation: string, draft: ChatDraft): Promise<void>;\n discard(conversation: string): Promise<void>;\n };\n history(locator: string, path: string, query?: HistoryQuery): Promise<HistoryResult>;\n call(name: string, input: unknown): Promise<CallResult>;\n log(): Promise<string>;\n storageLoss(): Promise<string | null>;\n persistence(): Promise<boolean>;\n deploymentFacts(): Promise<unknown>;\n observe: {\n (topic: 'deployment-facts', listener: (value: unknown) => void): Promise<() => void>;\n (topic: 'rooms', listener: (rooms: readonly AppRoom[]) => void): Promise<() => void>;\n (\n topic: 'connection-refusal',\n listener: (refusal: ConnectionRefusal | null) => void,\n ): Promise<() => void>;\n (topic: 'storage-loss', listener: (statement: string | null) => void): Promise<() => void>;\n (topic: 'sync-status', listener: (status: SyncStatus) => void): Promise<() => void>;\n (\n topic: 'query',\n query: QueryOptions,\n listener: (result: QueryResult) => void,\n ): Promise<() => void>;\n (\n topic: 'queue',\n locator: string,\n listener: (entries: readonly QueueEntry[]) => void,\n ): Promise<() => void>;\n (\n topic: 'room-drafts',\n listener: (roomDrafts: readonly RoomDraft[]) => void,\n ): Promise<() => void>;\n (topic: 'presentation', listener: (value: unknown) => void): Promise<() => void>;\n (\n topic: 'conversation',\n conversation: string,\n options: ConversationOptions,\n listener: (view: ConversationView) => void,\n ): Promise<() => void>;\n };\n reauthorize(): Promise<void>;\n};\n\nexport function connectMdRuntime(port: RuntimePort): MdRuntimeClient {\n let sequence = 0;\n let refusal: ConnectionRefusal | null = null;\n let ended = false;\n const calls = new Map<\n number,\n { settle: (value: unknown) => void; fail: (error: Error) => void }\n >();\n const acks = new Map<number, { settle: () => void; fail: (error: Error) => void }>();\n const listeners = new Map<number, { topic: WireTopic; notify: (value: unknown) => void }>();\n\n const send = (message: WireRequest) => {\n port.postMessage(envelope(message));\n };\n\n function refuse(reported: ConnectionRefusal) {\n refusal = reported;\n for (const waiting of acks.values()) waiting.settle();\n acks.clear();\n const failure = new Error(reported.reason);\n for (const waiting of calls.values()) waiting.fail(failure);\n calls.clear();\n for (const listener of listeners.values()) {\n if (listener.topic === 'connection-refusal') listener.notify(reported);\n }\n }\n\n function end() {\n ended = true;\n const failure = new Error(AUTHORIZATION_ENDED);\n for (const waiting of acks.values()) waiting.fail(failure);\n acks.clear();\n for (const waiting of calls.values()) waiting.fail(failure);\n calls.clear();\n listeners.clear();\n }\n\n port.addEventListener('message', (event) => {\n const wire = carried(event.data);\n if (wire === null) return;\n if (!wire.matching) {\n refuse(PROTOCOL_MISMATCH);\n return;\n }\n const message = answer(wire.message);\n if (message === null) return;\n if (message.kind === 'refusal') {\n refuse(message.refusal);\n return;\n }\n if (message.kind === 'ended') {\n end();\n return;\n }\n if (message.kind === 'event') {\n listeners.get(message.id)?.notify(message.value);\n return;\n }\n const subscribing = acks.get(message.id);\n if (subscribing !== undefined) {\n acks.delete(message.id);\n if (message.kind === 'failure') {\n listeners.delete(message.id);\n subscribing.fail(new Error(message.message));\n } else subscribing.settle();\n return;\n }\n const waiting = calls.get(message.id);\n if (waiting === undefined) return;\n calls.delete(message.id);\n if (message.kind === 'failure') waiting.fail(new Error(message.message));\n else waiting.settle(message.value);\n });\n port.start();\n send({ kind: 'hello' });\n\n function ask<T>(member: WireMember, input: readonly unknown[]): Promise<T> {\n if (ended) return Promise.reject(new Error(AUTHORIZATION_ENDED));\n if (refusal !== null) return Promise.reject(new Error(refusal.reason));\n const id = (sequence += 1);\n return new Promise<T>((settle, fail) => {\n calls.set(id, { settle: settle as (value: unknown) => void, fail });\n send({ kind: 'call', id, member, input });\n });\n }\n\n function watch(\n topic: WireTopic,\n input: readonly unknown[],\n notify: (value: unknown) => void,\n ): Promise<() => void> {\n if (ended) return Promise.reject(new Error(AUTHORIZATION_ENDED));\n const id = (sequence += 1);\n listeners.set(id, { topic, notify });\n const end = () => {\n if (!listeners.delete(id)) return;\n if (refusal === null) send({ kind: 'stop', id });\n };\n if (refusal !== null) {\n if (topic === 'connection-refusal') notify(refusal);\n return Promise.resolve(end);\n }\n return new Promise<() => void>((settle, fail) => {\n acks.set(id, { settle: () => settle(end), fail });\n send({ kind: 'observe', id, topic, input });\n });\n }\n\n return {\n rooms: () => ask<readonly AppRoom[]>('rooms', []),\n slots: () => ask<readonly AppSlot[]>('slots', []),\n query: (options?: QueryOptions) => ask<QueryResult>('query', [options]),\n types: (locator: string) => ask<RoomTypes>('types', [locator]),\n syncStatus: () => ask<SyncStatus>('syncStatus', []),\n roomDraft: {\n list: () => ask<readonly RoomDraft[]>('roomDraft.list', []),\n read: (room: string, path: string) => ask<RoomDraft | null>('roomDraft.read', [room, path]),\n write: (room: string, path: string, revision: string | null, parts: RoomDraftParts) =>\n ask<RoomDraftWrite>('roomDraft.write', [room, path, revision, parts]),\n discard: (room: string, path: string, revision: string) =>\n ask<RoomDraftWrite>('roomDraft.discard', [room, path, revision]),\n },\n save: (room: string, roomDrafts: readonly SavedRoomDraft[]) =>\n ask<SaveResult>('save', [room, roomDrafts]),\n outcome: (identifier: string) => ask<SubmissionOutcome | null>('outcome', [identifier]),\n presentation: {\n read: () => ask<unknown>('presentation.read', []),\n write: (value: unknown) => ask<void>('presentation.write', [value]),\n },\n conversation: {\n list: () => ask<readonly ConversationEntry[]>('conversation.list', []),\n read: (conversation: string, options?: ConversationOptions) =>\n ask<ConversationView>('conversation.read', [conversation, options]),\n create: (input: unknown) => ask<CallResult>('conversation.create', [input]),\n send: (conversation: string) => ask<CallResult>('conversation.send', [conversation]),\n answer: (conversation: string, answer: unknown) =>\n ask<CallResult>('conversation.answer', [conversation, answer]),\n interrupt: (conversation: string) =>\n ask<CallResult>('conversation.interrupt', [conversation]),\n kill: (conversation: string) => ask<CallResult>('conversation.kill', [conversation]),\n cancel: (conversation: string, turn: string) =>\n ask<CallResult>('conversation.cancel', [conversation, turn]),\n delete: (conversation: string) => ask<CallResult>('conversation.delete', [conversation]),\n },\n chatDraft: {\n write: (conversation: string, draft: ChatDraft) =>\n ask<void>('chatDraft.write', [conversation, draft]),\n discard: (conversation: string) => ask<void>('chatDraft.discard', [conversation]),\n },\n history: (locator: string, path: string, query?: HistoryQuery) =>\n ask<HistoryResult>('history', [locator, path, query]),\n call: (name: string, input: unknown) => ask<CallResult>('call', [name, input]),\n log: () => ask<string>('log', []),\n storageLoss: () => ask<string | null>('storageLoss', []),\n persistence: () => ask<boolean>('persistence', []),\n deploymentFacts: () => ask<unknown>('deploymentFacts', []),\n observe(\n topic: WireTopic,\n second: QueryOptions | string | ((value: never) => void),\n third?: ConversationOptions | ((value: never) => void),\n fourth?: (value: never) => void,\n ) {\n if (topic === 'conversation') {\n return watch(topic, [second, third], fourth as (value: unknown) => void);\n }\n const positional = topic === 'query' || topic === 'queue';\n const notify = (positional ? third : second) as (value: unknown) => void;\n return watch(topic, positional ? [second] : [], notify);\n },\n reauthorize: () => ask<void>('reauthorize', []),\n };\n}\n\nexport type { RuntimePort } from './wire.js';\n"],"names":["answer","AUTHORIZATION_ENDED","carried","envelope","PROTOCOL_MISMATCH","connectMdRuntime","port","sequence","refusal","ended","calls","Map","acks","listeners","send","message","postMessage","refuse","reported","waiting","values","settle","clear","failure","Error","reason","fail","listener","topic","notify","end","addEventListener","event","wire","data","matching","kind","get","id","value","subscribing","undefined","delete","start","ask","member","input","Promise","reject","set","watch","resolve","rooms","slots","query","options","types","locator","syncStatus","roomDraft","list","read","room","path","write","revision","parts","discard","save","roomDrafts","outcome","identifier","presentation","conversation","create","interrupt","kill","cancel","turn","chatDraft","draft","history","call","name","log","storageLoss","persistence","deploymentFacts","observe","second","third","fourth","positional","reauthorize"],"mappings":"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"}
1
+ {"version":3,"sources":["/workspace/packages/mdruntime/src/client.ts"],"sourcesContent":["import type {\n AppRoom,\n AppSlot,\n ConnectionRefusal,\n HistoryQuery,\n RoomTypes,\n SavedRoomDraft,\n SaveResult,\n} from './connection.js';\nimport type { HistoryResult } from './adapter.js';\nimport type {\n ChatDraft,\n ConversationEntry,\n ConversationOptions,\n ConversationView,\n} from './conversation.js';\nimport type { CallResult, QueueEntry, SubmissionOutcome } from './outcome.js';\nimport type { DocumentQuery, DocumentResult, GroupQuery, GroupResult } from './query.js';\nimport type { RoomDraft, RoomDraftParts, RoomDraftWrite } from './room-draft.js';\nimport type { SyncStatus } from './status.js';\nimport {\n answer,\n AUTHORIZATION_ENDED,\n carried,\n envelope,\n PROTOCOL_MISMATCH,\n type RuntimePort,\n type WireMember,\n type WireRequest,\n type WireTopic,\n} from './wire.js';\n\nexport type MdRuntimeClient = {\n rooms(): Promise<readonly AppRoom[]>;\n slots(): Promise<readonly AppSlot[]>;\n query: {\n (query: DocumentQuery): Promise<DocumentResult>;\n (query: GroupQuery): Promise<GroupResult>;\n };\n types(locator: string): Promise<RoomTypes>;\n syncStatus(): Promise<SyncStatus>;\n roomDraft: {\n list(): Promise<readonly RoomDraft[]>;\n read(room: string, path: string): Promise<RoomDraft | null>;\n write(\n room: string,\n path: string,\n revision: string | null,\n parts: RoomDraftParts,\n ): Promise<RoomDraftWrite>;\n discard(room: string, path: string, revision: string): Promise<RoomDraftWrite>;\n };\n save(room: string, roomDrafts: readonly SavedRoomDraft[]): Promise<SaveResult>;\n outcome(identifier: string): Promise<SubmissionOutcome | null>;\n presentation: {\n read(): Promise<unknown>;\n write(value: unknown): Promise<void>;\n };\n conversation: {\n list(): Promise<readonly ConversationEntry[]>;\n read(conversation: string, options?: ConversationOptions): Promise<ConversationView>;\n create(input: unknown): Promise<CallResult>;\n send(conversation: string): Promise<CallResult>;\n answer(conversation: string, answer: unknown): Promise<CallResult>;\n interrupt(conversation: string): Promise<CallResult>;\n kill(conversation: string): Promise<CallResult>;\n cancel(conversation: string, turn: string): Promise<CallResult>;\n delete(conversation: string): Promise<CallResult>;\n };\n chatDraft: {\n write(conversation: string, draft: ChatDraft): Promise<void>;\n discard(conversation: string): Promise<void>;\n };\n history(locator: string, path: string, query?: HistoryQuery): Promise<HistoryResult>;\n call(name: string, input: unknown): Promise<CallResult>;\n log(): Promise<string>;\n storageLoss(): Promise<string | null>;\n persistence(): Promise<boolean>;\n deploymentFacts(): Promise<unknown>;\n observe: {\n (topic: 'deployment-facts', listener: (value: unknown) => void): Promise<() => void>;\n (topic: 'rooms', listener: (rooms: readonly AppRoom[]) => void): Promise<() => void>;\n (\n topic: 'connection-refusal',\n listener: (refusal: ConnectionRefusal | null) => void,\n ): Promise<() => void>;\n (topic: 'storage-loss', listener: (statement: string | null) => void): Promise<() => void>;\n (topic: 'sync-status', listener: (status: SyncStatus) => void): Promise<() => void>;\n (\n topic: 'query',\n query: DocumentQuery,\n listener: (result: DocumentResult) => void,\n ): Promise<() => void>;\n (\n topic: 'query',\n query: GroupQuery,\n listener: (result: GroupResult) => void,\n ): Promise<() => void>;\n (\n topic: 'queue',\n locator: string,\n listener: (entries: readonly QueueEntry[]) => void,\n ): Promise<() => void>;\n (\n topic: 'room-drafts',\n listener: (roomDrafts: readonly RoomDraft[]) => void,\n ): Promise<() => void>;\n (topic: 'presentation', listener: (value: unknown) => void): Promise<() => void>;\n (\n topic: 'conversation',\n conversation: string,\n options: ConversationOptions,\n listener: (view: ConversationView) => void,\n ): Promise<() => void>;\n };\n reauthorize(): Promise<void>;\n};\n\nexport function connectMdRuntime(port: RuntimePort): MdRuntimeClient {\n let sequence = 0;\n let refusal: ConnectionRefusal | null = null;\n let ended = false;\n const calls = new Map<\n number,\n { settle: (value: unknown) => void; fail: (error: Error) => void }\n >();\n const acks = new Map<number, { settle: () => void; fail: (error: Error) => void }>();\n const listeners = new Map<number, { topic: WireTopic; notify: (value: unknown) => void }>();\n\n const send = (message: WireRequest) => {\n port.postMessage(envelope(message));\n };\n\n function refuse(reported: ConnectionRefusal) {\n refusal = reported;\n for (const waiting of acks.values()) waiting.settle();\n acks.clear();\n const failure = new Error(reported.reason);\n for (const waiting of calls.values()) waiting.fail(failure);\n calls.clear();\n for (const listener of listeners.values()) {\n if (listener.topic === 'connection-refusal') listener.notify(reported);\n }\n }\n\n function end() {\n ended = true;\n const failure = new Error(AUTHORIZATION_ENDED);\n for (const waiting of acks.values()) waiting.fail(failure);\n acks.clear();\n for (const waiting of calls.values()) waiting.fail(failure);\n calls.clear();\n listeners.clear();\n }\n\n port.addEventListener('message', (event) => {\n const wire = carried(event.data);\n if (wire === null) return;\n if (!wire.matching) {\n refuse(PROTOCOL_MISMATCH);\n return;\n }\n const message = answer(wire.message);\n if (message === null) return;\n if (message.kind === 'refusal') {\n refuse(message.refusal);\n return;\n }\n if (message.kind === 'ended') {\n end();\n return;\n }\n if (message.kind === 'event') {\n listeners.get(message.id)?.notify(message.value);\n return;\n }\n const subscribing = acks.get(message.id);\n if (subscribing !== undefined) {\n acks.delete(message.id);\n if (message.kind === 'failure') {\n listeners.delete(message.id);\n subscribing.fail(new Error(message.message));\n } else subscribing.settle();\n return;\n }\n const waiting = calls.get(message.id);\n if (waiting === undefined) return;\n calls.delete(message.id);\n if (message.kind === 'failure') waiting.fail(new Error(message.message));\n else waiting.settle(message.value);\n });\n port.start();\n send({ kind: 'hello' });\n\n function ask<T>(member: WireMember, input: readonly unknown[]): Promise<T> {\n if (ended) return Promise.reject(new Error(AUTHORIZATION_ENDED));\n if (refusal !== null) return Promise.reject(new Error(refusal.reason));\n const id = (sequence += 1);\n return new Promise<T>((settle, fail) => {\n calls.set(id, { settle: settle as (value: unknown) => void, fail });\n send({ kind: 'call', id, member, input });\n });\n }\n\n function watch(\n topic: WireTopic,\n input: readonly unknown[],\n notify: (value: unknown) => void,\n ): Promise<() => void> {\n if (ended) return Promise.reject(new Error(AUTHORIZATION_ENDED));\n const id = (sequence += 1);\n listeners.set(id, { topic, notify });\n const end = () => {\n if (!listeners.delete(id)) return;\n if (refusal === null) send({ kind: 'stop', id });\n };\n if (refusal !== null) {\n if (topic === 'connection-refusal') notify(refusal);\n return Promise.resolve(end);\n }\n return new Promise<() => void>((settle, fail) => {\n acks.set(id, { settle: () => settle(end), fail });\n send({ kind: 'observe', id, topic, input });\n });\n }\n\n return {\n rooms: () => ask<readonly AppRoom[]>('rooms', []),\n slots: () => ask<readonly AppSlot[]>('slots', []),\n query: ((query: DocumentQuery | GroupQuery) =>\n ask('query', [query])) as MdRuntimeClient['query'],\n types: (locator: string) => ask<RoomTypes>('types', [locator]),\n syncStatus: () => ask<SyncStatus>('syncStatus', []),\n roomDraft: {\n list: () => ask<readonly RoomDraft[]>('roomDraft.list', []),\n read: (room: string, path: string) => ask<RoomDraft | null>('roomDraft.read', [room, path]),\n write: (room: string, path: string, revision: string | null, parts: RoomDraftParts) =>\n ask<RoomDraftWrite>('roomDraft.write', [room, path, revision, parts]),\n discard: (room: string, path: string, revision: string) =>\n ask<RoomDraftWrite>('roomDraft.discard', [room, path, revision]),\n },\n save: (room: string, roomDrafts: readonly SavedRoomDraft[]) =>\n ask<SaveResult>('save', [room, roomDrafts]),\n outcome: (identifier: string) => ask<SubmissionOutcome | null>('outcome', [identifier]),\n presentation: {\n read: () => ask<unknown>('presentation.read', []),\n write: (value: unknown) => ask<void>('presentation.write', [value]),\n },\n conversation: {\n list: () => ask<readonly ConversationEntry[]>('conversation.list', []),\n read: (conversation: string, options?: ConversationOptions) =>\n ask<ConversationView>('conversation.read', [conversation, options]),\n create: (input: unknown) => ask<CallResult>('conversation.create', [input]),\n send: (conversation: string) => ask<CallResult>('conversation.send', [conversation]),\n answer: (conversation: string, answer: unknown) =>\n ask<CallResult>('conversation.answer', [conversation, answer]),\n interrupt: (conversation: string) =>\n ask<CallResult>('conversation.interrupt', [conversation]),\n kill: (conversation: string) => ask<CallResult>('conversation.kill', [conversation]),\n cancel: (conversation: string, turn: string) =>\n ask<CallResult>('conversation.cancel', [conversation, turn]),\n delete: (conversation: string) => ask<CallResult>('conversation.delete', [conversation]),\n },\n chatDraft: {\n write: (conversation: string, draft: ChatDraft) =>\n ask<void>('chatDraft.write', [conversation, draft]),\n discard: (conversation: string) => ask<void>('chatDraft.discard', [conversation]),\n },\n history: (locator: string, path: string, query?: HistoryQuery) =>\n ask<HistoryResult>('history', [locator, path, query]),\n call: (name: string, input: unknown) => ask<CallResult>('call', [name, input]),\n log: () => ask<string>('log', []),\n storageLoss: () => ask<string | null>('storageLoss', []),\n persistence: () => ask<boolean>('persistence', []),\n deploymentFacts: () => ask<unknown>('deploymentFacts', []),\n observe(\n topic: WireTopic,\n second: unknown,\n third?: ConversationOptions | ((value: never) => void),\n fourth?: (value: never) => void,\n ) {\n if (topic === 'conversation') {\n return watch(topic, [second, third], fourth as (value: unknown) => void);\n }\n const positional = topic === 'query' || topic === 'queue';\n const notify = (positional ? third : second) as (value: unknown) => void;\n return watch(topic, positional ? [second] : [], notify);\n },\n reauthorize: () => ask<void>('reauthorize', []),\n };\n}\n\nexport type { RuntimePort } from './wire.js';\n"],"names":["answer","AUTHORIZATION_ENDED","carried","envelope","PROTOCOL_MISMATCH","connectMdRuntime","port","sequence","refusal","ended","calls","Map","acks","listeners","send","message","postMessage","refuse","reported","waiting","values","settle","clear","failure","Error","reason","fail","listener","topic","notify","end","addEventListener","event","wire","data","matching","kind","get","id","value","subscribing","undefined","delete","start","ask","member","input","Promise","reject","set","watch","resolve","rooms","slots","query","types","locator","syncStatus","roomDraft","list","read","room","path","write","revision","parts","discard","save","roomDrafts","outcome","identifier","presentation","conversation","options","create","interrupt","kill","cancel","turn","chatDraft","draft","history","call","name","log","storageLoss","persistence","deploymentFacts","observe","second","third","fourth","positional","reauthorize"],"mappings":"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"}
@@ -1,9 +1,7 @@
1
1
  import { type Document, type Validation } from '@agentshouse/mdmodel';
2
- import type { Selector } from '@agentshouse/query';
3
2
  import type { ModelState } from './model.js';
4
3
  import type { MdModelIdentity } from './adapter.js';
5
4
  export declare const MD_MODEL: MdModelIdentity;
6
- export declare const PRESENTED: Selector;
7
5
  export type Collection = {
8
6
  documents: Readonly<Record<string, Document>>;
9
7
  composition: Composition;
@@ -1 +1 @@
1
- {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,QAAQ,EACb,KAAK,UAAU,EAEhB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,eAAO,MAAM,QAAQ,EAAE,eAAwE,CAAC;AAEhG,eAAO,MAAM,SAAS,EAAE,QAAyC,CAAC;AAIlE,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9C,WAAW,EAAE,WAAW,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE;QAAE,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI,CAAC;CACnE,CAAC;AASF,wBAAgB,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAI5E;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACtC,WAAW,EAAE,WAAW,EACxB,QAAQ,CAAC,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,GAC5E,UAAU,CAYZ;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACtC,WAAW,EAAE,WAAW,EACxB,QAAQ,CAAC,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,GAC5E,UAAU,GAAG,IAAI,CAenB;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,MAAM,CAEvD;AA0CD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACtC,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,WAAW,EAAE,WAAW,GACvB,UAAU,CA0CZ"}
1
+ {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,QAAQ,EACb,KAAK,UAAU,EAEhB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,eAAO,MAAM,QAAQ,EAAE,eAAwE,CAAC;AAIhG,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9C,WAAW,EAAE,WAAW,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE;QAAE,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI,CAAC;CACnE,CAAC;AASF,wBAAgB,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAI5E;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACtC,WAAW,EAAE,WAAW,EACxB,QAAQ,CAAC,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,GAC5E,UAAU,CAYZ;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACtC,WAAW,EAAE,WAAW,EACxB,QAAQ,CAAC,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,GAC5E,UAAU,GAAG,IAAI,CAenB;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,MAAM,CAEvD;AA0CD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACtC,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,WAAW,EAAE,WAAW,GACvB,UAAU,CA0CZ"}
@@ -4,11 +4,6 @@ export const MD_MODEL = {
4
4
  identity: '@agentshouse/mdmodel',
5
5
  version: VERSION
6
6
  };
7
- export const PRESENTED = {
8
- path: {
9
- $regex: '\\.md$'
10
- }
11
- };
12
7
  const NO_TYPES = {
13
8
  types: {}
14
9
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["/workspace/packages/mdruntime/src/collection.ts"],"sourcesContent":["import {\n parse,\n validate,\n VERSION,\n type Document,\n type Validation,\n type VerifiedModel,\n} from '@agentshouse/mdmodel';\nimport type { Selector } from '@agentshouse/query';\nimport { beneath, normalize } from './paths.js';\nimport type { ModelState } from './model.js';\nimport type { MdModelIdentity } from './adapter.js';\n\nexport const MD_MODEL: MdModelIdentity = { identity: '@agentshouse/mdmodel', version: VERSION };\n\nexport const PRESENTED: Selector = { path: { $regex: '\\\\.md$' } };\n\nconst NO_TYPES: VerifiedModel = { types: {} };\n\nexport type Collection = {\n documents: Readonly<Record<string, Document>>;\n composition: Composition;\n};\n\nexport type Composition = {\n collectionRoot: string;\n model: ModelState;\n selection: { roots: readonly string[]; model: ModelState } | null;\n};\n\nfunction selected(composition: Composition, path: string): boolean {\n return (\n composition.selection !== null &&\n composition.selection.roots.some((root) => beneath(root, path))\n );\n}\n\nexport function governing(composition: Composition, path: string): ModelState {\n return composition.selection !== null && selected(composition, path)\n ? composition.selection.model\n : composition.model;\n}\n\nexport function parseCollection(\n text: Readonly<Record<string, string>>,\n composition: Composition,\n previous?: { text: Readonly<Record<string, string>>; collection: Collection },\n): Collection {\n const documents: Record<string, Document> = {};\n for (const path of Object.keys(text).sort()) {\n const retained = previous?.collection.documents[path];\n if (retained !== undefined && previous?.text[path] === text[path]) {\n documents[path] = retained;\n continue;\n }\n const parsed = parse(text[path], path);\n if (parsed.ok) documents[path] = parsed.document;\n }\n return { documents, composition };\n}\n\nexport function readCollection(\n text: Readonly<Record<string, string>>,\n composition: Composition,\n previous?: { text: Readonly<Record<string, string>>; collection: Collection },\n): Collection | null {\n if (!validRoot(composition.collectionRoot)) return null;\n const collection = parseCollection(text, composition, previous);\n if (Object.keys(collection.documents).length !== Object.keys(text).length) return null;\n if (\n Object.entries(collection.documents).some(\n ([path, document]) =>\n !member(path, composition.collectionRoot) &&\n !selected(composition, path) &&\n document.type !== undefined &&\n document.type !== 'any',\n )\n )\n return null;\n return collection;\n}\n\nexport function validRoot(root: unknown): root is string {\n return typeof root === 'string' && normalize(root) === root;\n}\n\nfunction member(path: string, root: string): boolean {\n return root === '' || path.startsWith(`${root}/`);\n}\n\ntype Refusal = Extract<Validation, { verdict: 'refuse' }>;\n\nfunction validateAgainst(\n documents: Readonly<Record<string, string>>,\n binaryTargets: readonly string[],\n prefix: string,\n model: ModelState,\n): Validation {\n if (model.status === 'unavailable') {\n const typed = Object.entries(documents).find(([, content]) => {\n const parsed = parse(content);\n return parsed.ok && parsed.document.type !== undefined && parsed.document.type !== 'any';\n });\n if (typed !== undefined)\n return {\n verdict: 'refuse',\n rule: 'model-unavailable',\n file: `${prefix}${typed[0]}`,\n version: VERSION,\n };\n }\n const verdict = validate(\n documents,\n { binaryTargets },\n model.status === 'unavailable' ? NO_TYPES : { types: model.types },\n );\n if (verdict.verdict === 'accept') return verdict;\n return {\n ...verdict,\n file: `${prefix}${verdict.file}`,\n ...(verdict.referrers === undefined\n ? {}\n : { referrers: verdict.referrers.map((path) => `${prefix}${path}`) }),\n };\n}\n\nexport function validateCollection(\n text: Readonly<Record<string, string>>,\n binaryTargets: readonly string[],\n composition: Composition,\n): Validation {\n const prefix = composition.collectionRoot === '' ? '' : `${composition.collectionRoot}/`;\n const collection: Record<string, string> = {};\n const selection: Record<string, string> = {};\n for (const [path, content] of Object.entries(text)) {\n if (member(path, composition.collectionRoot)) {\n collection[path.slice(prefix.length)] = content;\n continue;\n }\n if (selected(composition, path)) {\n selection[path] = content;\n continue;\n }\n const parsed = parse(content, path);\n if (!parsed.ok) return { verdict: 'refuse', ...parsed.refusal };\n if (Object.hasOwn(parsed.document.fields, 'type') && parsed.document.fields.type !== 'any') {\n return { verdict: 'refuse', rule: 'outside-collection-type', file: path, version: VERSION };\n }\n }\n const verdicts = [\n validateAgainst(\n collection,\n binaryTargets\n .filter((path) => member(path, composition.collectionRoot))\n .map((path) => path.slice(prefix.length)),\n prefix,\n composition.model,\n ),\n ];\n if (composition.selection !== null) {\n verdicts.push(\n validateAgainst(\n selection,\n binaryTargets.filter((path) => selected(composition, path)),\n '',\n composition.selection.model,\n ),\n );\n }\n const refusals = verdicts.filter((verdict): verdict is Refusal => verdict.verdict === 'refuse');\n if (refusals.length === 0) return verdicts[0];\n return refusals.find((refusal) => refusal.rule !== 'model-unavailable') ?? refusals[0];\n}\n"],"names":["parse","validate","VERSION","beneath","normalize","MD_MODEL","identity","version","PRESENTED","path","$regex","NO_TYPES","types","selected","composition","selection","roots","some","root","governing","model","parseCollection","text","previous","documents","Object","keys","sort","retained","collection","undefined","parsed","ok","document","readCollection","validRoot","collectionRoot","length","entries","member","type","startsWith","validateAgainst","binaryTargets","prefix","status","typed","find","content","verdict","rule","file","referrers","map","validateCollection","slice","refusal","hasOwn","fields","verdicts","filter","push","refusals"],"mappings":"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"}
1
+ {"version":3,"sources":["/workspace/packages/mdruntime/src/collection.ts"],"sourcesContent":["import {\n parse,\n validate,\n VERSION,\n type Document,\n type Validation,\n type VerifiedModel,\n} from '@agentshouse/mdmodel';\nimport { beneath, normalize } from './paths.js';\nimport type { ModelState } from './model.js';\nimport type { MdModelIdentity } from './adapter.js';\n\nexport const MD_MODEL: MdModelIdentity = { identity: '@agentshouse/mdmodel', version: VERSION };\n\nconst NO_TYPES: VerifiedModel = { types: {} };\n\nexport type Collection = {\n documents: Readonly<Record<string, Document>>;\n composition: Composition;\n};\n\nexport type Composition = {\n collectionRoot: string;\n model: ModelState;\n selection: { roots: readonly string[]; model: ModelState } | null;\n};\n\nfunction selected(composition: Composition, path: string): boolean {\n return (\n composition.selection !== null &&\n composition.selection.roots.some((root) => beneath(root, path))\n );\n}\n\nexport function governing(composition: Composition, path: string): ModelState {\n return composition.selection !== null && selected(composition, path)\n ? composition.selection.model\n : composition.model;\n}\n\nexport function parseCollection(\n text: Readonly<Record<string, string>>,\n composition: Composition,\n previous?: { text: Readonly<Record<string, string>>; collection: Collection },\n): Collection {\n const documents: Record<string, Document> = {};\n for (const path of Object.keys(text).sort()) {\n const retained = previous?.collection.documents[path];\n if (retained !== undefined && previous?.text[path] === text[path]) {\n documents[path] = retained;\n continue;\n }\n const parsed = parse(text[path], path);\n if (parsed.ok) documents[path] = parsed.document;\n }\n return { documents, composition };\n}\n\nexport function readCollection(\n text: Readonly<Record<string, string>>,\n composition: Composition,\n previous?: { text: Readonly<Record<string, string>>; collection: Collection },\n): Collection | null {\n if (!validRoot(composition.collectionRoot)) return null;\n const collection = parseCollection(text, composition, previous);\n if (Object.keys(collection.documents).length !== Object.keys(text).length) return null;\n if (\n Object.entries(collection.documents).some(\n ([path, document]) =>\n !member(path, composition.collectionRoot) &&\n !selected(composition, path) &&\n document.type !== undefined &&\n document.type !== 'any',\n )\n )\n return null;\n return collection;\n}\n\nexport function validRoot(root: unknown): root is string {\n return typeof root === 'string' && normalize(root) === root;\n}\n\nfunction member(path: string, root: string): boolean {\n return root === '' || path.startsWith(`${root}/`);\n}\n\ntype Refusal = Extract<Validation, { verdict: 'refuse' }>;\n\nfunction validateAgainst(\n documents: Readonly<Record<string, string>>,\n binaryTargets: readonly string[],\n prefix: string,\n model: ModelState,\n): Validation {\n if (model.status === 'unavailable') {\n const typed = Object.entries(documents).find(([, content]) => {\n const parsed = parse(content);\n return parsed.ok && parsed.document.type !== undefined && parsed.document.type !== 'any';\n });\n if (typed !== undefined)\n return {\n verdict: 'refuse',\n rule: 'model-unavailable',\n file: `${prefix}${typed[0]}`,\n version: VERSION,\n };\n }\n const verdict = validate(\n documents,\n { binaryTargets },\n model.status === 'unavailable' ? NO_TYPES : { types: model.types },\n );\n if (verdict.verdict === 'accept') return verdict;\n return {\n ...verdict,\n file: `${prefix}${verdict.file}`,\n ...(verdict.referrers === undefined\n ? {}\n : { referrers: verdict.referrers.map((path) => `${prefix}${path}`) }),\n };\n}\n\nexport function validateCollection(\n text: Readonly<Record<string, string>>,\n binaryTargets: readonly string[],\n composition: Composition,\n): Validation {\n const prefix = composition.collectionRoot === '' ? '' : `${composition.collectionRoot}/`;\n const collection: Record<string, string> = {};\n const selection: Record<string, string> = {};\n for (const [path, content] of Object.entries(text)) {\n if (member(path, composition.collectionRoot)) {\n collection[path.slice(prefix.length)] = content;\n continue;\n }\n if (selected(composition, path)) {\n selection[path] = content;\n continue;\n }\n const parsed = parse(content, path);\n if (!parsed.ok) return { verdict: 'refuse', ...parsed.refusal };\n if (Object.hasOwn(parsed.document.fields, 'type') && parsed.document.fields.type !== 'any') {\n return { verdict: 'refuse', rule: 'outside-collection-type', file: path, version: VERSION };\n }\n }\n const verdicts = [\n validateAgainst(\n collection,\n binaryTargets\n .filter((path) => member(path, composition.collectionRoot))\n .map((path) => path.slice(prefix.length)),\n prefix,\n composition.model,\n ),\n ];\n if (composition.selection !== null) {\n verdicts.push(\n validateAgainst(\n selection,\n binaryTargets.filter((path) => selected(composition, path)),\n '',\n composition.selection.model,\n ),\n );\n }\n const refusals = verdicts.filter((verdict): verdict is Refusal => verdict.verdict === 'refuse');\n if (refusals.length === 0) return verdicts[0];\n return refusals.find((refusal) => refusal.rule !== 'model-unavailable') ?? refusals[0];\n}\n"],"names":["parse","validate","VERSION","beneath","normalize","MD_MODEL","identity","version","NO_TYPES","types","selected","composition","path","selection","roots","some","root","governing","model","parseCollection","text","previous","documents","Object","keys","sort","retained","collection","undefined","parsed","ok","document","readCollection","validRoot","collectionRoot","length","entries","member","type","startsWith","validateAgainst","binaryTargets","prefix","status","typed","find","content","verdict","rule","file","referrers","map","validateCollection","slice","refusal","hasOwn","fields","verdicts","filter","push","refusals"],"mappings":"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"}
@@ -1,6 +1,5 @@
1
- import { type QueryBinding } from './query.js';
2
1
  import { type TypesResult } from './model.js';
3
- import { type QueryOptions, type QueryResult } from '@agentshouse/query';
2
+ import { type DocumentQuery, type DocumentResult, type GroupQuery, type GroupResult } from './query.js';
4
3
  import { type Adapter, type Authorization, type HistoryResult, type ProviderRefusal } from './adapter.js';
5
4
  import { type ChatDraftSurface, type ConversationOptions, type ConversationSurface, type ConversationView } from './conversation.js';
6
5
  import type { WrittenBy } from './change.js';
@@ -49,7 +48,6 @@ export type ConnectionRefusal = {
49
48
  export type MdRuntimeOptions = {
50
49
  adapter: Adapter;
51
50
  shell: RuntimeShell;
52
- queryBinding: QueryBinding | null;
53
51
  requiredGuarantees: readonly string[];
54
52
  authorization?: Authorization;
55
53
  discoveryIntervalMs?: number;
@@ -83,7 +81,10 @@ export type MdRuntime = {
83
81
  loaded(): Promise<void>;
84
82
  rooms(): readonly AppRoom[];
85
83
  slots(): readonly AppSlot[];
86
- query(options?: QueryOptions): QueryResult;
84
+ query: {
85
+ (query: DocumentQuery): Promise<DocumentResult>;
86
+ (query: GroupQuery): Promise<GroupResult>;
87
+ };
87
88
  types(locator: string): RoomTypes;
88
89
  syncStatus(): SyncStatus;
89
90
  roomDraft: RoomDraftSurface;
@@ -102,7 +103,8 @@ export type MdRuntime = {
102
103
  (topic: 'connection-refusal', listener: (refusal: ConnectionRefusal | null) => void): () => void;
103
104
  (topic: 'storage-loss', listener: (statement: string | null) => void): () => void;
104
105
  (topic: 'sync-status', listener: (status: SyncStatus) => void): () => void;
105
- (topic: 'query', query: QueryOptions, listener: (result: QueryResult) => void): () => void;
106
+ (topic: 'query', query: DocumentQuery, listener: (result: DocumentResult) => void): () => void;
107
+ (topic: 'query', query: GroupQuery, listener: (result: GroupResult) => void): () => void;
106
108
  (topic: 'queue', locator: string, listener: (entries: readonly QueueEntry[]) => void): () => void;
107
109
  (topic: 'room-drafts', listener: (roomDrafts: readonly RoomDraft[]) => void): () => void;
108
110
  (topic: 'presentation', app: string, listener: (value: unknown) => void): () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AACA,OAAO,EAML,KAAK,WAAW,EACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,WAAW,EAGjB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAIL,KAAK,OAAO,EAEZ,KAAK,aAAa,EAIlB,KAAK,aAAa,EAKlB,KAAK,eAAe,EAErB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EAExB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAe,SAAS,EAAE,MAAM,aAAa,CAAC;AAG1D,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAc,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAE1F,OAAO,EAA8B,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAUzE,OAAO,EAQL,KAAK,SAAS,EAEd,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAQL,KAAK,UAAU,EAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAqC,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAkDvF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,OAAO,YAAY,EAAE,aAAa,GAAG,IAAI,CAAC;IACzD,KAAK,EAAE,WAAW,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,cAAc,EAAE,eAAe,CAAC;IACnD,OAAO,EAAE,OAAO,cAAc,EAAE,gBAAgB,CAAC;IACjD,aAAa,EAAE,OAAO,YAAY,EAAE,aAAa,GAAG,IAAI,CAAC;IACzD,KAAK,EAAE,WAAW,CAAC;IACnB,cAAc,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACzC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,wBAAwB,EAAE,OAAO,CAAC;IAClC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,WAAW,CAAC;IACxB,cAAc,EAAE,WAAW,GAAG,IAAI,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAC/B,qBAAqB,GACrB,4BAA4B,GAC5B,2BAA2B,GAC3B,uBAAuB,GACvB,+BAA+B,CAAC;AAEpC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,uBAAuB,CAAC;IAChC,sBAAsB,EAAE,OAAO,CAAC;IAChC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,YAAY,CAAC;IACpB,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,UAAU,GAClB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACxC,CAAC;IAAE,OAAO,EAAE,SAAS,CAAA;CAAE,GAAG,WAAW,CAAC,CAAC;AAE3C,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAElF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,IAAI,OAAO,CAAC,SAAS,SAAS,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACnD,KAAK,CACH,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CAChF,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,KAAK,IAAI,SAAS,OAAO,EAAE,CAAC;IAC5B,KAAK,IAAI,SAAS,OAAO,EAAE,CAAC;IAC5B,KAAK,EAAE;QACL,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;QAChD,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;KAC3C,CAAC;IACF,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,UAAU,IAAI,UAAU,CAAC;IACzB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,YAAY,EAAE,mBAAmB,CAAC;IAClC,SAAS,EAAE,gBAAgB,CAAC;IAC5B,YAAY,EAAE,mBAAmB,CAAC;IAClC,IAAI,CACF,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,SAAS,cAAc,EAAE,EACrC,SAAS,CAAC,EAAE,SAAS,GACpB,OAAO,CAAC,UAAU,CAAC,CAAC;IACvB,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAAC;IACtD,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACrF,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACxD,GAAG,IAAI,MAAM,CAAC;IACd,WAAW,IAAI,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,IAAI,OAAO,CAAC;IACvB,OAAO,EAAE;QACP,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;QAC5E,CACE,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,KAAK,IAAI,GACpD,MAAM,IAAI,CAAC;QACd,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;QAClF,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;QAC3E,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;QAC/F,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;QACzF,CACE,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,KAAK,IAAI,GACjD,MAAM,IAAI,CAAC;QACd,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;QACzF,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;QACrF,CACE,KAAK,EAAE,cAAc,EACrB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,GACzC,MAAM,IAAI,CAAC;KACf,CAAC;IACF,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAAC;AAsBF,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAs+DpE"}