@agentshouse/mdruntime 0.1.0-alpha.27 → 0.1.0-alpha.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/AGENTS.md CHANGED
@@ -111,7 +111,8 @@ the revision you read, or `null` when there was none, and every part it should
111
111
  now change: fields, sections and the preamble, or the whole Markdown, a
112
112
  creation, a move, or a removal. A part new to the Room Draft names its base,
113
113
  the value you showed when it was opened; the MD Runtime keeps a part's first
114
- base. A write or a discard from an older revision is refused as `stale` with
114
+ base. A binary link target has a Room Draft too, for a move or a removal, with
115
+ `null` as its base. A write or a discard from an older revision is refused as `stale` with
115
116
  the current Room Draft; read it and write again.
116
117
 
117
118
  Save takes one Room and the Room Drafts of it to save, each with its revision,
@@ -119,8 +120,8 @@ validates locally, and on success appends one Change Batch to that Room's
119
120
  queue and removes those Room Drafts. It is refused as `stale`, as
120
121
  `changed-underneath` naming each part whose base no longer matches the visible
121
122
  state, or by a local validation rule, and then creates nothing and leaves every
122
- Room Draft in place. A directory move is a move part on each Document beneath
123
- it, saved together.
123
+ Room Draft in place. A directory move or removal is a move or removal part on
124
+ each Document and binary link target beneath it, saved together.
124
125
 
125
126
  Outcomes follow the Provider's answer. Accepted advances the confirmed
126
127
  layer. Conflicted and Rejected, an expired outcome record, and a change that no
package/dist/paths.d.ts CHANGED
@@ -1,6 +1,4 @@
1
1
  export declare function normalize(path: string): string | null;
2
- export declare function resolve(from: string, reference: string): string | null;
3
- export declare function target(from: string, href: string): string | null;
4
2
  export declare function relative(from: string, target: string): string;
5
3
  export declare function beneath(prefix: string, path: string): boolean;
6
4
  export declare function covered(prefixes: readonly string[], path: string): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAKA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYrD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGtE;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOhE;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAW7D;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAK1E"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAKA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYrD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAW7D;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAK1E"}
package/dist/paths.js CHANGED
@@ -15,18 +15,6 @@ export function normalize(path) {
15
15
  }
16
16
  return parts.join('/');
17
17
  }
18
- export function resolve(from, reference) {
19
- const base = dirname(from);
20
- return normalize(base === '' ? reference : `${base}/${reference}`);
21
- }
22
- export function target(from, href) {
23
- const trimmed = href.trim();
24
- if (trimmed.startsWith('/') || /^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(trimmed)) return null;
25
- const bare = trimmed.replace(/[?#].*$/, '');
26
- if (bare === '') return null;
27
- const resolved = resolve(from, bare);
28
- return resolved === '' ? null : resolved;
29
- }
30
18
  export function relative(from, target) {
31
19
  const base = dirname(from).split('/').filter((part)=>part !== '');
32
20
  const parts = target.split('/');
package/dist/paths.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/workspace/packages/mdruntime/src/paths.ts"],"sourcesContent":["function dirname(path: string): string {\n const index = path.lastIndexOf('/');\n return index === -1 ? '' : path.slice(0, index);\n}\n\nexport function normalize(path: string): string | null {\n const parts: string[] = [];\n for (const part of path.split('/')) {\n if (part === '' || part === '.') continue;\n if (part === '..') {\n if (parts.length === 0) return null;\n parts.pop();\n continue;\n }\n parts.push(part);\n }\n return parts.join('/');\n}\n\nexport function resolve(from: string, reference: string): string | null {\n const base = dirname(from);\n return normalize(base === '' ? reference : `${base}/${reference}`);\n}\n\nexport function target(from: string, href: string): string | null {\n const trimmed = href.trim();\n if (trimmed.startsWith('/') || /^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(trimmed)) return null;\n const bare = trimmed.replace(/[?#].*$/, '');\n if (bare === '') return null;\n const resolved = resolve(from, bare);\n return resolved === '' ? null : resolved;\n}\n\nexport function relative(from: string, target: string): string {\n const base = dirname(from)\n .split('/')\n .filter((part) => part !== '');\n const parts = target.split('/');\n let shared = 0;\n while (shared < base.length && shared + 1 < parts.length && base[shared] === parts[shared]) {\n shared += 1;\n }\n const up = Array.from({ length: base.length - shared }, () => '..');\n return [...up, ...parts.slice(shared)].join('/');\n}\n\nexport function beneath(prefix: string, path: string): boolean {\n return path === prefix || path.startsWith(`${prefix}/`);\n}\n\nexport function covered(prefixes: readonly string[], path: string): boolean {\n return prefixes.some((prefix) => {\n const normalized = normalize(prefix);\n return normalized !== null && (normalized === '' || beneath(normalized, path));\n });\n}\n"],"names":["dirname","path","index","lastIndexOf","slice","normalize","parts","part","split","length","pop","push","join","resolve","from","reference","base","target","href","trimmed","trim","startsWith","test","bare","replace","resolved","relative","filter","shared","up","Array","beneath","prefix","covered","prefixes","some","normalized"],"mappings":"AAAA,SAASA,QAAQC,IAAY;IAC3B,MAAMC,QAAQD,KAAKE,WAAW,CAAC;IAC/B,OAAOD,UAAU,CAAC,IAAI,KAAKD,KAAKG,KAAK,CAAC,GAAGF;AAC3C;AAEA,OAAO,SAASG,UAAUJ,IAAY;IACpC,MAAMK,QAAkB,EAAE;IAC1B,KAAK,MAAMC,QAAQN,KAAKO,KAAK,CAAC,KAAM;QAClC,IAAID,SAAS,MAAMA,SAAS,KAAK;QACjC,IAAIA,SAAS,MAAM;YACjB,IAAID,MAAMG,MAAM,KAAK,GAAG,OAAO;YAC/BH,MAAMI,GAAG;YACT;QACF;QACAJ,MAAMK,IAAI,CAACJ;IACb;IACA,OAAOD,MAAMM,IAAI,CAAC;AACpB;AAEA,OAAO,SAASC,QAAQC,IAAY,EAAEC,SAAiB;IACrD,MAAMC,OAAOhB,QAAQc;IACrB,OAAOT,UAAUW,SAAS,KAAKD,YAAY,GAAGC,KAAK,CAAC,EAAED,WAAW;AACnE;AAEA,OAAO,SAASE,OAAOH,IAAY,EAAEI,IAAY;IAC/C,MAAMC,UAAUD,KAAKE,IAAI;IACzB,IAAID,QAAQE,UAAU,CAAC,QAAQ,4BAA4BC,IAAI,CAACH,UAAU,OAAO;IACjF,MAAMI,OAAOJ,QAAQK,OAAO,CAAC,WAAW;IACxC,IAAID,SAAS,IAAI,OAAO;IACxB,MAAME,WAAWZ,QAAQC,MAAMS;IAC/B,OAAOE,aAAa,KAAK,OAAOA;AAClC;AAEA,OAAO,SAASC,SAASZ,IAAY,EAAEG,MAAc;IACnD,MAAMD,OAAOhB,QAAQc,MAClBN,KAAK,CAAC,KACNmB,MAAM,CAAC,CAACpB,OAASA,SAAS;IAC7B,MAAMD,QAAQW,OAAOT,KAAK,CAAC;IAC3B,IAAIoB,SAAS;IACb,MAAOA,SAASZ,KAAKP,MAAM,IAAImB,SAAS,IAAItB,MAAMG,MAAM,IAAIO,IAAI,CAACY,OAAO,KAAKtB,KAAK,CAACsB,OAAO,CAAE;QAC1FA,UAAU;IACZ;IACA,MAAMC,KAAKC,MAAMhB,IAAI,CAAC;QAAEL,QAAQO,KAAKP,MAAM,GAAGmB;IAAO,GAAG,IAAM;IAC9D,OAAO;WAAIC;WAAOvB,MAAMF,KAAK,CAACwB;KAAQ,CAAChB,IAAI,CAAC;AAC9C;AAEA,OAAO,SAASmB,QAAQC,MAAc,EAAE/B,IAAY;IAClD,OAAOA,SAAS+B,UAAU/B,KAAKoB,UAAU,CAAC,GAAGW,OAAO,CAAC,CAAC;AACxD;AAEA,OAAO,SAASC,QAAQC,QAA2B,EAAEjC,IAAY;IAC/D,OAAOiC,SAASC,IAAI,CAAC,CAACH;QACpB,MAAMI,aAAa/B,UAAU2B;QAC7B,OAAOI,eAAe,QAASA,CAAAA,eAAe,MAAML,QAAQK,YAAYnC,KAAI;IAC9E;AACF"}
1
+ {"version":3,"sources":["/workspace/packages/mdruntime/src/paths.ts"],"sourcesContent":["function dirname(path: string): string {\n const index = path.lastIndexOf('/');\n return index === -1 ? '' : path.slice(0, index);\n}\n\nexport function normalize(path: string): string | null {\n const parts: string[] = [];\n for (const part of path.split('/')) {\n if (part === '' || part === '.') continue;\n if (part === '..') {\n if (parts.length === 0) return null;\n parts.pop();\n continue;\n }\n parts.push(part);\n }\n return parts.join('/');\n}\n\nexport function relative(from: string, target: string): string {\n const base = dirname(from)\n .split('/')\n .filter((part) => part !== '');\n const parts = target.split('/');\n let shared = 0;\n while (shared < base.length && shared + 1 < parts.length && base[shared] === parts[shared]) {\n shared += 1;\n }\n const up = Array.from({ length: base.length - shared }, () => '..');\n return [...up, ...parts.slice(shared)].join('/');\n}\n\nexport function beneath(prefix: string, path: string): boolean {\n return path === prefix || path.startsWith(`${prefix}/`);\n}\n\nexport function covered(prefixes: readonly string[], path: string): boolean {\n return prefixes.some((prefix) => {\n const normalized = normalize(prefix);\n return normalized !== null && (normalized === '' || beneath(normalized, path));\n });\n}\n"],"names":["dirname","path","index","lastIndexOf","slice","normalize","parts","part","split","length","pop","push","join","relative","from","target","base","filter","shared","up","Array","beneath","prefix","startsWith","covered","prefixes","some","normalized"],"mappings":"AAAA,SAASA,QAAQC,IAAY;IAC3B,MAAMC,QAAQD,KAAKE,WAAW,CAAC;IAC/B,OAAOD,UAAU,CAAC,IAAI,KAAKD,KAAKG,KAAK,CAAC,GAAGF;AAC3C;AAEA,OAAO,SAASG,UAAUJ,IAAY;IACpC,MAAMK,QAAkB,EAAE;IAC1B,KAAK,MAAMC,QAAQN,KAAKO,KAAK,CAAC,KAAM;QAClC,IAAID,SAAS,MAAMA,SAAS,KAAK;QACjC,IAAIA,SAAS,MAAM;YACjB,IAAID,MAAMG,MAAM,KAAK,GAAG,OAAO;YAC/BH,MAAMI,GAAG;YACT;QACF;QACAJ,MAAMK,IAAI,CAACJ;IACb;IACA,OAAOD,MAAMM,IAAI,CAAC;AACpB;AAEA,OAAO,SAASC,SAASC,IAAY,EAAEC,MAAc;IACnD,MAAMC,OAAOhB,QAAQc,MAClBN,KAAK,CAAC,KACNS,MAAM,CAAC,CAACV,OAASA,SAAS;IAC7B,MAAMD,QAAQS,OAAOP,KAAK,CAAC;IAC3B,IAAIU,SAAS;IACb,MAAOA,SAASF,KAAKP,MAAM,IAAIS,SAAS,IAAIZ,MAAMG,MAAM,IAAIO,IAAI,CAACE,OAAO,KAAKZ,KAAK,CAACY,OAAO,CAAE;QAC1FA,UAAU;IACZ;IACA,MAAMC,KAAKC,MAAMN,IAAI,CAAC;QAAEL,QAAQO,KAAKP,MAAM,GAAGS;IAAO,GAAG,IAAM;IAC9D,OAAO;WAAIC;WAAOb,MAAMF,KAAK,CAACc;KAAQ,CAACN,IAAI,CAAC;AAC9C;AAEA,OAAO,SAASS,QAAQC,MAAc,EAAErB,IAAY;IAClD,OAAOA,SAASqB,UAAUrB,KAAKsB,UAAU,CAAC,GAAGD,OAAO,CAAC,CAAC;AACxD;AAEA,OAAO,SAASE,QAAQC,QAA2B,EAAExB,IAAY;IAC/D,OAAOwB,SAASC,IAAI,CAAC,CAACJ;QACpB,MAAMK,aAAatB,UAAUiB;QAC7B,OAAOK,eAAe,QAASA,CAAAA,eAAe,MAAMN,QAAQM,YAAY1B,KAAI;IAC9E;AACF"}
@@ -31,10 +31,10 @@ export type RoomDraftParts = {
31
31
  readonly creation?: RoomDraftCreation;
32
32
  readonly move?: {
33
33
  readonly to: string;
34
- readonly base?: string;
34
+ readonly base?: string | null;
35
35
  };
36
36
  readonly removal?: {
37
- readonly base?: string;
37
+ readonly base?: string | null;
38
38
  };
39
39
  };
40
40
  type HeldParts = {
@@ -57,10 +57,10 @@ type HeldParts = {
57
57
  readonly creation?: RoomDraftCreation;
58
58
  readonly move?: {
59
59
  readonly to: string;
60
- readonly base: string;
60
+ readonly base: string | null;
61
61
  };
62
62
  readonly removal?: {
63
- readonly base: string;
63
+ readonly base: string | null;
64
64
  };
65
65
  };
66
66
  type ChangedUnderneath = {
@@ -1 +1 @@
1
- {"version":3,"file":"room-draft.d.ts","sourceRoot":"","sources":["../src/room-draft.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"room-draft.d.ts","sourceRoot":"","sources":["../src/room-draft.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,9 @@ function text(value) {
16
16
  function optionalText(value) {
17
17
  return value === undefined ? undefined : text(value);
18
18
  }
19
+ function markdownBase(value) {
20
+ return value === null ? null : optionalText(value);
21
+ }
19
22
  function entries(value, each) {
20
23
  if (!plain(value)) malformed();
21
24
  const read = {};
@@ -84,7 +87,7 @@ export function readParts(value) {
84
87
  if (value.creation !== undefined) parts.creation = creationOf(value.creation);
85
88
  if (value.move !== undefined) {
86
89
  if (!plain(value.move)) malformed();
87
- const base = optionalText(value.move.base);
90
+ const base = markdownBase(value.move.base);
88
91
  parts.move = {
89
92
  to: text(value.move.to),
90
93
  ...base === undefined ? {} : {
@@ -94,7 +97,7 @@ export function readParts(value) {
94
97
  }
95
98
  if (value.removal !== undefined) {
96
99
  if (!plain(value.removal)) malformed();
97
- const base = optionalText(value.removal.base);
100
+ const base = markdownBase(value.removal.base);
98
101
  parts.removal = base === undefined ? {} : {
99
102
  base
100
103
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["/workspace/packages/mdruntime/src/room-draft.ts"],"sourcesContent":["import { apply, parse, serialize } from '@agentshouse/mdmodel';\nimport type { ProviderRefusal } from './adapter.js';\nimport type { Change, Precondition } from './change.js';\nimport { normalize } from './paths.js';\nimport type { VisibleLayer } from './replica.js';\n\nexport type FieldValue = { readonly value: unknown } | null;\n\nexport type RoomDraftCreation =\n | {\n readonly type: string;\n readonly fields: Readonly<Record<string, unknown>>;\n readonly sections: Readonly<Record<string, string>>;\n }\n | { readonly markdown: string };\n\nexport type RoomDraftParts = {\n readonly fields?: Readonly<\n Record<string, { readonly value: unknown; readonly base?: FieldValue }>\n >;\n readonly sections?: Readonly<Record<string, { readonly value: string; readonly base?: string }>>;\n readonly preamble?: { readonly value: string; readonly base?: string };\n readonly markdown?: { readonly value: string; readonly base?: string };\n readonly creation?: RoomDraftCreation;\n readonly move?: { readonly to: string; readonly base?: string };\n readonly removal?: { readonly base?: string };\n};\n\ntype HeldParts = {\n readonly fields?: Readonly<\n Record<string, { readonly value: unknown; readonly base: FieldValue }>\n >;\n readonly sections?: Readonly<Record<string, { readonly value: string; readonly base: string }>>;\n readonly preamble?: { readonly value: string; readonly base: string };\n readonly markdown?: { readonly value: string; readonly base: string };\n readonly creation?: RoomDraftCreation;\n readonly move?: { readonly to: string; readonly base: string };\n readonly removal?: { readonly base: string };\n};\n\ntype ChangedUnderneath = {\n readonly fields?: Readonly<Record<string, FieldValue>>;\n readonly sections?: Readonly<Record<string, string | null>>;\n readonly preamble?: string | null;\n readonly markdown?: string | null;\n readonly creation?: string;\n readonly move?: string | null;\n readonly removal?: string | null;\n};\n\nexport type ReturnReason =\n | (ProviderRefusal & { readonly kind: 'conflicted' | 'rejected' })\n | { readonly kind: 'expired' }\n | { readonly kind: 'withdrawn' };\n\nexport type RoomDraft = {\n readonly room: string;\n readonly path: string;\n readonly revision: string;\n readonly parts: HeldParts;\n readonly changedUnderneath: ChangedUnderneath;\n readonly returned: ReturnReason | null;\n};\n\nexport type RoomDraftWrite =\n | { readonly outcome: 'written'; readonly roomDraft: RoomDraft | null }\n | { readonly outcome: 'stale'; readonly current: RoomDraft | null };\n\nexport type ChangedPart = {\n readonly path: string;\n readonly part: 'field' | 'section' | 'preamble' | 'markdown' | 'creation' | 'move' | 'removal';\n readonly name?: string;\n};\n\nexport type RoomDraftRecord = {\n readonly locator: string;\n readonly path: string;\n readonly revision: string;\n readonly parts: HeldParts;\n readonly returned: ReturnReason | null;\n};\n\nexport type SavedDraft = { readonly path: string; readonly parts: HeldParts };\n\nfunction malformed(): never {\n throw new Error('room-draft-malformed');\n}\n\nfunction plain(value: unknown): value is Readonly<Record<string, unknown>> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction frontmatterValue(value: unknown): boolean {\n if (Array.isArray(value)) return value.every(frontmatterValue);\n return (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'boolean' ||\n (typeof value === 'number' && Number.isFinite(value))\n );\n}\n\nfunction text(value: unknown): string {\n return typeof value === 'string' ? value : malformed();\n}\n\nfunction optionalText(value: unknown): string | undefined {\n return value === undefined ? undefined : text(value);\n}\n\nfunction entries<T>(value: unknown, each: (item: unknown) => T): Readonly<Record<string, T>> {\n if (!plain(value)) malformed();\n const read: Record<string, T> = {};\n for (const [name, item] of Object.entries(value)) read[name] = each(item);\n return read;\n}\n\nfunction fieldValue(value: unknown): FieldValue {\n if (value === null) return null;\n if (!plain(value) || !Object.hasOwn(value, 'value') || !frontmatterValue(value.value)) {\n malformed();\n }\n return { value: value.value };\n}\n\nfunction textPart(value: unknown): { value: string; base?: string } {\n if (!plain(value)) malformed();\n const base = optionalText(value.base);\n return { value: text(value.value), ...(base === undefined ? {} : { base }) };\n}\n\nfunction creationOf(value: unknown): RoomDraftCreation {\n if (!plain(value)) malformed();\n if (Object.hasOwn(value, 'markdown')) return { markdown: text(value.markdown) };\n const fields = entries(value.fields, (item) => (frontmatterValue(item) ? item : malformed()));\n return { type: text(value.type), fields, sections: entries(value.sections, text) };\n}\n\nconst PART_NAMES = new Set([\n 'fields',\n 'sections',\n 'preamble',\n 'markdown',\n 'creation',\n 'move',\n 'removal',\n]);\n\nexport function readParts(value: unknown): RoomDraftParts {\n if (!plain(value) || Object.keys(value).some((name) => !PART_NAMES.has(name))) malformed();\n const parts: { -readonly [Name in keyof RoomDraftParts]: RoomDraftParts[Name] } = {};\n if (value.fields !== undefined) {\n parts.fields = entries(value.fields, (item) => {\n if (!plain(item) || !Object.hasOwn(item, 'value') || !frontmatterValue(item.value)) {\n malformed();\n }\n return item.base === undefined\n ? { value: item.value }\n : { value: item.value, base: fieldValue(item.base) };\n });\n }\n if (value.sections !== undefined) parts.sections = entries(value.sections, textPart);\n if (value.preamble !== undefined) parts.preamble = textPart(value.preamble);\n if (value.markdown !== undefined) parts.markdown = textPart(value.markdown);\n if (value.creation !== undefined) parts.creation = creationOf(value.creation);\n if (value.move !== undefined) {\n if (!plain(value.move)) malformed();\n const base = optionalText(value.move.base);\n parts.move = { to: text(value.move.to), ...(base === undefined ? {} : { base }) };\n }\n if (value.removal !== undefined) {\n if (!plain(value.removal)) malformed();\n const base = optionalText(value.removal.base);\n parts.removal = base === undefined ? {} : { base };\n }\n return parts;\n}\n\nfunction named<T>(record: Readonly<Record<string, T>> | undefined): readonly [string, T][] {\n return Object.entries(record ?? {});\n}\n\nfunction own<T>(record: Readonly<Record<string, T>> | undefined, name: string): T | undefined {\n return record !== undefined && Object.hasOwn(record, name) ? record[name] : undefined;\n}\n\nfunction kept<T>(prior: { readonly base: T } | undefined, base: T | undefined): T {\n if (prior !== undefined) return prior.base;\n if (base === undefined) throw new Error('room-draft-base-missing');\n return base;\n}\n\nfunction editsText(parts: RoomDraftParts): boolean {\n return (\n parts.preamble !== undefined ||\n named(parts.fields).length > 0 ||\n named(parts.sections).length > 0\n );\n}\n\nexport function held(current: HeldParts | undefined, parts: RoomDraftParts): HeldParts {\n if (parts.markdown !== undefined && editsText(parts)) {\n throw new Error('room-draft-markdown-exclusive');\n }\n const next: { -readonly [Name in keyof HeldParts]: HeldParts[Name] } = {};\n const fields = named(parts.fields);\n if (fields.length > 0) {\n next.fields = Object.fromEntries(\n fields.map(([name, part]) => [\n name,\n { value: part.value, base: kept(own(current?.fields, name), part.base) },\n ]),\n );\n }\n const sections = named(parts.sections);\n if (sections.length > 0) {\n next.sections = Object.fromEntries(\n sections.map(([name, part]) => [\n name,\n { value: part.value, base: kept(own(current?.sections, name), part.base) },\n ]),\n );\n }\n if (parts.preamble !== undefined) {\n next.preamble = {\n value: parts.preamble.value,\n base: kept(current?.preamble, parts.preamble.base),\n };\n }\n if (parts.markdown !== undefined) {\n next.markdown = {\n value: parts.markdown.value,\n base: kept(current?.markdown, parts.markdown.base),\n };\n }\n if (parts.creation !== undefined) next.creation = parts.creation;\n if (parts.move !== undefined) {\n next.move = { to: parts.move.to, base: kept(current?.move, parts.move.base) };\n }\n if (parts.removal !== undefined) {\n next.removal = { base: kept(current?.removal, parts.removal.base) };\n }\n if (Object.keys(next).length === 0) throw new Error('room-draft-empty');\n return next;\n}\n\nexport function equalValue(left: unknown, right: unknown): boolean {\n if (left === right) return true;\n return (\n Array.isArray(left) &&\n Array.isArray(right) &&\n left.length === right.length &&\n left.every((item, index) => equalValue(item, right[index]))\n );\n}\n\nfunction sameField(left: FieldValue, right: FieldValue): boolean {\n if (left === null || right === null) return left === right;\n return equalValue(left.value, right.value);\n}\n\nexport function underneath(\n parts: HeldParts,\n path: string,\n visible: VisibleLayer | undefined,\n): ChangedUnderneath {\n const markdown = visible?.documents[path] ?? null;\n const document = visible?.collection.documents[path];\n const report: { -readonly [Name in keyof ChangedUnderneath]: ChangedUnderneath[Name] } = {};\n const fields: Record<string, FieldValue> = {};\n for (const [name, part] of named(parts.fields)) {\n const current =\n document !== undefined && Object.hasOwn(document.fields, name)\n ? { value: document.fields[name] }\n : null;\n if (!sameField(part.base, current)) fields[name] = current;\n }\n if (Object.keys(fields).length > 0) report.fields = fields;\n const sections: Record<string, string | null> = {};\n for (const [name, part] of named(parts.sections)) {\n const current =\n document !== undefined && Object.hasOwn(document.sections, name)\n ? document.sections[name]\n : null;\n if (current !== part.base) sections[name] = current;\n }\n if (Object.keys(sections).length > 0) report.sections = sections;\n const preamble = document?.preamble ?? null;\n if (parts.preamble !== undefined && preamble !== parts.preamble.base) report.preamble = preamble;\n if (parts.markdown !== undefined && markdown !== parts.markdown.base) report.markdown = markdown;\n if (parts.creation !== undefined && markdown !== null) report.creation = markdown;\n if (parts.move !== undefined && markdown !== parts.move.base) report.move = markdown;\n if (parts.removal !== undefined && markdown !== parts.removal.base) report.removal = markdown;\n return report;\n}\n\nexport function changedParts(path: string, report: ChangedUnderneath): readonly ChangedPart[] {\n return [\n ...(report.creation === undefined ? [] : [{ path, part: 'creation' as const }]),\n ...named(report.fields).map(([name]) => ({ path, part: 'field' as const, name })),\n ...named(report.sections).map(([name]) => ({ path, part: 'section' as const, name })),\n ...(report.preamble === undefined ? [] : [{ path, part: 'preamble' as const }]),\n ...(report.markdown === undefined ? [] : [{ path, part: 'markdown' as const }]),\n ...(report.move === undefined ? [] : [{ path, part: 'move' as const }]),\n ...(report.removal === undefined ? [] : [{ path, part: 'removal' as const }]),\n ];\n}\n\nfunction joined<T>(\n existing: Readonly<Record<string, T>> | undefined,\n returned: Readonly<Record<string, T>> | undefined,\n): Readonly<Record<string, T>> | undefined {\n const merged = { ...existing };\n for (const [name, part] of named(returned)) if (!Object.hasOwn(merged, name)) merged[name] = part;\n return Object.keys(merged).length === 0 ? undefined : merged;\n}\n\nfunction ended(text: string): string {\n return text === '' || text.endsWith('\\n') ? text : `${text}\\n`;\n}\n\nfunction frontmatterOf(fields: readonly [string, { readonly value: unknown }][]): string {\n const opened = parse('---\\n---\\n');\n if (!opened.ok) return malformed();\n let document = opened.document;\n for (const [name, part] of fields) {\n const next = apply(document, { kind: 'field', name, value: part.value, prior: undefined });\n if (next.outcome !== 'applied') return malformed();\n document = next.document;\n }\n return serialize(document);\n}\n\nfunction concatenated(markdown: string, parts: HeldParts): string {\n const fields = named(parts.fields);\n const pieces = [\n ...(fields.length === 0 ? [] : [frontmatterOf(fields)]),\n ...(parts.preamble === undefined ? [] : [parts.preamble.value]),\n ...named(parts.sections).map(([name, part]) => `## ${name}\\n${part.value}`),\n ];\n if (pieces.length === 0) return markdown;\n return `${ended(markdown)}\\n${pieces.map(ended).join('')}`;\n}\n\nexport function returnedInto(existing: HeldParts | undefined, returned: HeldParts): HeldParts {\n if (existing === undefined) return returned;\n const next: { -readonly [Name in keyof HeldParts]: HeldParts[Name] } = { ...existing };\n const whole = existing.markdown ?? returned.markdown;\n if (whole === undefined) {\n const fields = joined(existing.fields, returned.fields);\n const sections = joined(existing.sections, returned.sections);\n if (fields !== undefined) next.fields = fields;\n if (sections !== undefined) next.sections = sections;\n const preamble = existing.preamble ?? returned.preamble;\n if (preamble !== undefined) next.preamble = preamble;\n } else {\n delete next.fields;\n delete next.sections;\n delete next.preamble;\n const value = concatenated(whole.value, existing.markdown === undefined ? existing : returned);\n next.markdown = { value, base: whole.base };\n }\n const creation = existing.creation ?? returned.creation;\n const move = existing.move ?? returned.move;\n const removal = existing.removal ?? returned.removal;\n if (creation !== undefined) next.creation = creation;\n if (move !== undefined) next.move = move;\n if (removal !== undefined) next.removal = removal;\n return next;\n}\n\nexport function changesOf(\n path: string,\n parts: HeldParts,\n): { changes: readonly Change[]; bases: readonly Precondition[] } {\n const changes: Change[] = [];\n const bases: Precondition[] = [];\n const creation = parts.creation;\n if (creation !== undefined) {\n changes.push(\n 'markdown' in creation\n ? { kind: 'create', path, content: creation.markdown }\n : {\n kind: 'create',\n path,\n fields: { type: creation.type, ...creation.fields },\n sections: creation.sections,\n },\n );\n }\n for (const [name, part] of named(parts.fields)) {\n changes.push({ kind: 'field', path, name, value: part.value });\n bases.push({ kind: 'field', path, name, value: part.base?.value });\n }\n for (const [name, part] of named(parts.sections)) {\n changes.push({ kind: 'section', path, name, value: part.value });\n bases.push({ kind: 'section', path, name, value: part.base });\n }\n if (parts.preamble !== undefined) {\n changes.push({ kind: 'preamble', path, value: parts.preamble.value });\n bases.push({ kind: 'preamble', path, value: parts.preamble.base });\n }\n if (parts.markdown !== undefined) {\n changes.push({ kind: 'replace', path, content: parts.markdown.value });\n }\n if (parts.move !== undefined) {\n const to = normalize(parts.move.to);\n changes.push({ kind: 'move', path, to: to === null || to === '' ? parts.move.to : to });\n }\n if (parts.removal !== undefined) changes.push({ kind: 'remove', path });\n return { changes, bases };\n}\n"],"names":["apply","parse","serialize","normalize","malformed","Error","plain","value","Array","isArray","frontmatterValue","every","Number","isFinite","text","optionalText","undefined","entries","each","read","name","item","Object","fieldValue","hasOwn","textPart","base","creationOf","markdown","fields","type","sections","PART_NAMES","Set","readParts","keys","some","has","parts","preamble","creation","move","to","removal","named","record","own","kept","prior","editsText","length","held","current","next","fromEntries","map","part","equalValue","left","right","index","sameField","underneath","path","visible","documents","document","collection","report","changedParts","joined","existing","returned","merged","ended","endsWith","frontmatterOf","opened","ok","kind","outcome","concatenated","pieces","join","returnedInto","whole","changesOf","changes","bases","push","content"],"mappings":"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"}
1
+ {"version":3,"sources":["/workspace/packages/mdruntime/src/room-draft.ts"],"sourcesContent":["import { apply, parse, serialize } from '@agentshouse/mdmodel';\nimport type { ProviderRefusal } from './adapter.js';\nimport type { Change, Precondition } from './change.js';\nimport { normalize } from './paths.js';\nimport type { VisibleLayer } from './replica.js';\n\nexport type FieldValue = { readonly value: unknown } | null;\n\nexport type RoomDraftCreation =\n | {\n readonly type: string;\n readonly fields: Readonly<Record<string, unknown>>;\n readonly sections: Readonly<Record<string, string>>;\n }\n | { readonly markdown: string };\n\nexport type RoomDraftParts = {\n readonly fields?: Readonly<\n Record<string, { readonly value: unknown; readonly base?: FieldValue }>\n >;\n readonly sections?: Readonly<Record<string, { readonly value: string; readonly base?: string }>>;\n readonly preamble?: { readonly value: string; readonly base?: string };\n readonly markdown?: { readonly value: string; readonly base?: string };\n readonly creation?: RoomDraftCreation;\n readonly move?: { readonly to: string; readonly base?: string | null };\n readonly removal?: { readonly base?: string | null };\n};\n\ntype HeldParts = {\n readonly fields?: Readonly<\n Record<string, { readonly value: unknown; readonly base: FieldValue }>\n >;\n readonly sections?: Readonly<Record<string, { readonly value: string; readonly base: string }>>;\n readonly preamble?: { readonly value: string; readonly base: string };\n readonly markdown?: { readonly value: string; readonly base: string };\n readonly creation?: RoomDraftCreation;\n readonly move?: { readonly to: string; readonly base: string | null };\n readonly removal?: { readonly base: string | null };\n};\n\ntype ChangedUnderneath = {\n readonly fields?: Readonly<Record<string, FieldValue>>;\n readonly sections?: Readonly<Record<string, string | null>>;\n readonly preamble?: string | null;\n readonly markdown?: string | null;\n readonly creation?: string;\n readonly move?: string | null;\n readonly removal?: string | null;\n};\n\nexport type ReturnReason =\n | (ProviderRefusal & { readonly kind: 'conflicted' | 'rejected' })\n | { readonly kind: 'expired' }\n | { readonly kind: 'withdrawn' };\n\nexport type RoomDraft = {\n readonly room: string;\n readonly path: string;\n readonly revision: string;\n readonly parts: HeldParts;\n readonly changedUnderneath: ChangedUnderneath;\n readonly returned: ReturnReason | null;\n};\n\nexport type RoomDraftWrite =\n | { readonly outcome: 'written'; readonly roomDraft: RoomDraft | null }\n | { readonly outcome: 'stale'; readonly current: RoomDraft | null };\n\nexport type ChangedPart = {\n readonly path: string;\n readonly part: 'field' | 'section' | 'preamble' | 'markdown' | 'creation' | 'move' | 'removal';\n readonly name?: string;\n};\n\nexport type RoomDraftRecord = {\n readonly locator: string;\n readonly path: string;\n readonly revision: string;\n readonly parts: HeldParts;\n readonly returned: ReturnReason | null;\n};\n\nexport type SavedDraft = { readonly path: string; readonly parts: HeldParts };\n\nfunction malformed(): never {\n throw new Error('room-draft-malformed');\n}\n\nfunction plain(value: unknown): value is Readonly<Record<string, unknown>> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction frontmatterValue(value: unknown): boolean {\n if (Array.isArray(value)) return value.every(frontmatterValue);\n return (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'boolean' ||\n (typeof value === 'number' && Number.isFinite(value))\n );\n}\n\nfunction text(value: unknown): string {\n return typeof value === 'string' ? value : malformed();\n}\n\nfunction optionalText(value: unknown): string | undefined {\n return value === undefined ? undefined : text(value);\n}\n\nfunction markdownBase(value: unknown): string | null | undefined {\n return value === null ? null : optionalText(value);\n}\n\nfunction entries<T>(value: unknown, each: (item: unknown) => T): Readonly<Record<string, T>> {\n if (!plain(value)) malformed();\n const read: Record<string, T> = {};\n for (const [name, item] of Object.entries(value)) read[name] = each(item);\n return read;\n}\n\nfunction fieldValue(value: unknown): FieldValue {\n if (value === null) return null;\n if (!plain(value) || !Object.hasOwn(value, 'value') || !frontmatterValue(value.value)) {\n malformed();\n }\n return { value: value.value };\n}\n\nfunction textPart(value: unknown): { value: string; base?: string } {\n if (!plain(value)) malformed();\n const base = optionalText(value.base);\n return { value: text(value.value), ...(base === undefined ? {} : { base }) };\n}\n\nfunction creationOf(value: unknown): RoomDraftCreation {\n if (!plain(value)) malformed();\n if (Object.hasOwn(value, 'markdown')) return { markdown: text(value.markdown) };\n const fields = entries(value.fields, (item) => (frontmatterValue(item) ? item : malformed()));\n return { type: text(value.type), fields, sections: entries(value.sections, text) };\n}\n\nconst PART_NAMES = new Set([\n 'fields',\n 'sections',\n 'preamble',\n 'markdown',\n 'creation',\n 'move',\n 'removal',\n]);\n\nexport function readParts(value: unknown): RoomDraftParts {\n if (!plain(value) || Object.keys(value).some((name) => !PART_NAMES.has(name))) malformed();\n const parts: { -readonly [Name in keyof RoomDraftParts]: RoomDraftParts[Name] } = {};\n if (value.fields !== undefined) {\n parts.fields = entries(value.fields, (item) => {\n if (!plain(item) || !Object.hasOwn(item, 'value') || !frontmatterValue(item.value)) {\n malformed();\n }\n return item.base === undefined\n ? { value: item.value }\n : { value: item.value, base: fieldValue(item.base) };\n });\n }\n if (value.sections !== undefined) parts.sections = entries(value.sections, textPart);\n if (value.preamble !== undefined) parts.preamble = textPart(value.preamble);\n if (value.markdown !== undefined) parts.markdown = textPart(value.markdown);\n if (value.creation !== undefined) parts.creation = creationOf(value.creation);\n if (value.move !== undefined) {\n if (!plain(value.move)) malformed();\n const base = markdownBase(value.move.base);\n parts.move = { to: text(value.move.to), ...(base === undefined ? {} : { base }) };\n }\n if (value.removal !== undefined) {\n if (!plain(value.removal)) malformed();\n const base = markdownBase(value.removal.base);\n parts.removal = base === undefined ? {} : { base };\n }\n return parts;\n}\n\nfunction named<T>(record: Readonly<Record<string, T>> | undefined): readonly [string, T][] {\n return Object.entries(record ?? {});\n}\n\nfunction own<T>(record: Readonly<Record<string, T>> | undefined, name: string): T | undefined {\n return record !== undefined && Object.hasOwn(record, name) ? record[name] : undefined;\n}\n\nfunction kept<T>(prior: { readonly base: T } | undefined, base: T | undefined): T {\n if (prior !== undefined) return prior.base;\n if (base === undefined) throw new Error('room-draft-base-missing');\n return base;\n}\n\nfunction editsText(parts: RoomDraftParts): boolean {\n return (\n parts.preamble !== undefined ||\n named(parts.fields).length > 0 ||\n named(parts.sections).length > 0\n );\n}\n\nexport function held(current: HeldParts | undefined, parts: RoomDraftParts): HeldParts {\n if (parts.markdown !== undefined && editsText(parts)) {\n throw new Error('room-draft-markdown-exclusive');\n }\n const next: { -readonly [Name in keyof HeldParts]: HeldParts[Name] } = {};\n const fields = named(parts.fields);\n if (fields.length > 0) {\n next.fields = Object.fromEntries(\n fields.map(([name, part]) => [\n name,\n { value: part.value, base: kept(own(current?.fields, name), part.base) },\n ]),\n );\n }\n const sections = named(parts.sections);\n if (sections.length > 0) {\n next.sections = Object.fromEntries(\n sections.map(([name, part]) => [\n name,\n { value: part.value, base: kept(own(current?.sections, name), part.base) },\n ]),\n );\n }\n if (parts.preamble !== undefined) {\n next.preamble = {\n value: parts.preamble.value,\n base: kept(current?.preamble, parts.preamble.base),\n };\n }\n if (parts.markdown !== undefined) {\n next.markdown = {\n value: parts.markdown.value,\n base: kept(current?.markdown, parts.markdown.base),\n };\n }\n if (parts.creation !== undefined) next.creation = parts.creation;\n if (parts.move !== undefined) {\n next.move = { to: parts.move.to, base: kept(current?.move, parts.move.base) };\n }\n if (parts.removal !== undefined) {\n next.removal = { base: kept(current?.removal, parts.removal.base) };\n }\n if (Object.keys(next).length === 0) throw new Error('room-draft-empty');\n return next;\n}\n\nexport function equalValue(left: unknown, right: unknown): boolean {\n if (left === right) return true;\n return (\n Array.isArray(left) &&\n Array.isArray(right) &&\n left.length === right.length &&\n left.every((item, index) => equalValue(item, right[index]))\n );\n}\n\nfunction sameField(left: FieldValue, right: FieldValue): boolean {\n if (left === null || right === null) return left === right;\n return equalValue(left.value, right.value);\n}\n\nexport function underneath(\n parts: HeldParts,\n path: string,\n visible: VisibleLayer | undefined,\n): ChangedUnderneath {\n const markdown = visible?.documents[path] ?? null;\n const document = visible?.collection.documents[path];\n const report: { -readonly [Name in keyof ChangedUnderneath]: ChangedUnderneath[Name] } = {};\n const fields: Record<string, FieldValue> = {};\n for (const [name, part] of named(parts.fields)) {\n const current =\n document !== undefined && Object.hasOwn(document.fields, name)\n ? { value: document.fields[name] }\n : null;\n if (!sameField(part.base, current)) fields[name] = current;\n }\n if (Object.keys(fields).length > 0) report.fields = fields;\n const sections: Record<string, string | null> = {};\n for (const [name, part] of named(parts.sections)) {\n const current =\n document !== undefined && Object.hasOwn(document.sections, name)\n ? document.sections[name]\n : null;\n if (current !== part.base) sections[name] = current;\n }\n if (Object.keys(sections).length > 0) report.sections = sections;\n const preamble = document?.preamble ?? null;\n if (parts.preamble !== undefined && preamble !== parts.preamble.base) report.preamble = preamble;\n if (parts.markdown !== undefined && markdown !== parts.markdown.base) report.markdown = markdown;\n if (parts.creation !== undefined && markdown !== null) report.creation = markdown;\n if (parts.move !== undefined && markdown !== parts.move.base) report.move = markdown;\n if (parts.removal !== undefined && markdown !== parts.removal.base) report.removal = markdown;\n return report;\n}\n\nexport function changedParts(path: string, report: ChangedUnderneath): readonly ChangedPart[] {\n return [\n ...(report.creation === undefined ? [] : [{ path, part: 'creation' as const }]),\n ...named(report.fields).map(([name]) => ({ path, part: 'field' as const, name })),\n ...named(report.sections).map(([name]) => ({ path, part: 'section' as const, name })),\n ...(report.preamble === undefined ? [] : [{ path, part: 'preamble' as const }]),\n ...(report.markdown === undefined ? [] : [{ path, part: 'markdown' as const }]),\n ...(report.move === undefined ? [] : [{ path, part: 'move' as const }]),\n ...(report.removal === undefined ? [] : [{ path, part: 'removal' as const }]),\n ];\n}\n\nfunction joined<T>(\n existing: Readonly<Record<string, T>> | undefined,\n returned: Readonly<Record<string, T>> | undefined,\n): Readonly<Record<string, T>> | undefined {\n const merged = { ...existing };\n for (const [name, part] of named(returned)) if (!Object.hasOwn(merged, name)) merged[name] = part;\n return Object.keys(merged).length === 0 ? undefined : merged;\n}\n\nfunction ended(text: string): string {\n return text === '' || text.endsWith('\\n') ? text : `${text}\\n`;\n}\n\nfunction frontmatterOf(fields: readonly [string, { readonly value: unknown }][]): string {\n const opened = parse('---\\n---\\n');\n if (!opened.ok) return malformed();\n let document = opened.document;\n for (const [name, part] of fields) {\n const next = apply(document, { kind: 'field', name, value: part.value, prior: undefined });\n if (next.outcome !== 'applied') return malformed();\n document = next.document;\n }\n return serialize(document);\n}\n\nfunction concatenated(markdown: string, parts: HeldParts): string {\n const fields = named(parts.fields);\n const pieces = [\n ...(fields.length === 0 ? [] : [frontmatterOf(fields)]),\n ...(parts.preamble === undefined ? [] : [parts.preamble.value]),\n ...named(parts.sections).map(([name, part]) => `## ${name}\\n${part.value}`),\n ];\n if (pieces.length === 0) return markdown;\n return `${ended(markdown)}\\n${pieces.map(ended).join('')}`;\n}\n\nexport function returnedInto(existing: HeldParts | undefined, returned: HeldParts): HeldParts {\n if (existing === undefined) return returned;\n const next: { -readonly [Name in keyof HeldParts]: HeldParts[Name] } = { ...existing };\n const whole = existing.markdown ?? returned.markdown;\n if (whole === undefined) {\n const fields = joined(existing.fields, returned.fields);\n const sections = joined(existing.sections, returned.sections);\n if (fields !== undefined) next.fields = fields;\n if (sections !== undefined) next.sections = sections;\n const preamble = existing.preamble ?? returned.preamble;\n if (preamble !== undefined) next.preamble = preamble;\n } else {\n delete next.fields;\n delete next.sections;\n delete next.preamble;\n const value = concatenated(whole.value, existing.markdown === undefined ? existing : returned);\n next.markdown = { value, base: whole.base };\n }\n const creation = existing.creation ?? returned.creation;\n const move = existing.move ?? returned.move;\n const removal = existing.removal ?? returned.removal;\n if (creation !== undefined) next.creation = creation;\n if (move !== undefined) next.move = move;\n if (removal !== undefined) next.removal = removal;\n return next;\n}\n\nexport function changesOf(\n path: string,\n parts: HeldParts,\n): { changes: readonly Change[]; bases: readonly Precondition[] } {\n const changes: Change[] = [];\n const bases: Precondition[] = [];\n const creation = parts.creation;\n if (creation !== undefined) {\n changes.push(\n 'markdown' in creation\n ? { kind: 'create', path, content: creation.markdown }\n : {\n kind: 'create',\n path,\n fields: { type: creation.type, ...creation.fields },\n sections: creation.sections,\n },\n );\n }\n for (const [name, part] of named(parts.fields)) {\n changes.push({ kind: 'field', path, name, value: part.value });\n bases.push({ kind: 'field', path, name, value: part.base?.value });\n }\n for (const [name, part] of named(parts.sections)) {\n changes.push({ kind: 'section', path, name, value: part.value });\n bases.push({ kind: 'section', path, name, value: part.base });\n }\n if (parts.preamble !== undefined) {\n changes.push({ kind: 'preamble', path, value: parts.preamble.value });\n bases.push({ kind: 'preamble', path, value: parts.preamble.base });\n }\n if (parts.markdown !== undefined) {\n changes.push({ kind: 'replace', path, content: parts.markdown.value });\n }\n if (parts.move !== undefined) {\n const to = normalize(parts.move.to);\n changes.push({ kind: 'move', path, to: to === null || to === '' ? parts.move.to : to });\n }\n if (parts.removal !== undefined) changes.push({ kind: 'remove', path });\n return { changes, bases };\n}\n"],"names":["apply","parse","serialize","normalize","malformed","Error","plain","value","Array","isArray","frontmatterValue","every","Number","isFinite","text","optionalText","undefined","markdownBase","entries","each","read","name","item","Object","fieldValue","hasOwn","textPart","base","creationOf","markdown","fields","type","sections","PART_NAMES","Set","readParts","keys","some","has","parts","preamble","creation","move","to","removal","named","record","own","kept","prior","editsText","length","held","current","next","fromEntries","map","part","equalValue","left","right","index","sameField","underneath","path","visible","documents","document","collection","report","changedParts","joined","existing","returned","merged","ended","endsWith","frontmatterOf","opened","ok","kind","outcome","concatenated","pieces","join","returnedInto","whole","changesOf","changes","bases","push","content"],"mappings":"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"}
package/dist/rows.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { Document } from '@agentshouse/mdmodel';
1
+ import { type Document } from '@agentshouse/mdmodel';
2
2
  import { type Composition } from './collection.js';
3
3
  type Fields = Readonly<Record<string, unknown>>;
4
4
  export type DocumentRow = {
@@ -1 +1 @@
1
- {"version":3,"file":"rows.d.ts","sourceRoot":"","sources":["../src/rows.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAa,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAI9D,KAAK,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEhD,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACxC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,GAAG,GAAG,WAAW,GAAG,OAAO,GAAG,YAAY,CAAC;AAMvD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9D;AAqBD,wBAAgB,MAAM,CACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,GACvB,SAAS,GAAG,EAAE,CAqDhB"}
1
+ {"version":3,"file":"rows.d.ts","sourceRoot":"","sources":["../src/rows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,QAAQ,EAAkB,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9D,KAAK,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEhD,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACxC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,GAAG,GAAG,WAAW,GAAG,OAAO,GAAG,YAAY,CAAC;AAMvD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9D;AAqBD,wBAAgB,MAAM,CACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,GACvB,SAAS,GAAG,EAAE,CAqDhB"}
package/dist/rows.js CHANGED
@@ -1,6 +1,6 @@
1
+ import { target } from '@agentshouse/mdmodel';
1
2
  import { governing } from './collection.js';
2
3
  import { definitionOf } from './model.js';
3
- import { target } from './paths.js';
4
4
  function keyOf(...parts) {
5
5
  return `${parts.join('\u0000')}\u0000`;
6
6
  }
package/dist/rows.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/workspace/packages/mdruntime/src/rows.ts"],"sourcesContent":["import type { Document, FieldSpec } from '@agentshouse/mdmodel';\nimport { governing, type Composition } from './collection.js';\nimport { definitionOf } from './model.js';\nimport { target } from './paths.js';\n\ntype Fields = Readonly<Record<string, unknown>>;\n\nexport type DocumentRow = {\n key: string;\n kind: 'document';\n room: string;\n path: string;\n type: string;\n fields: Fields;\n values: Fields;\n sizes: Readonly<Record<string, number>>;\n directories: readonly string[];\n body: string;\n};\n\nexport type BodyRow = {\n key: string;\n kind: 'body';\n room: string;\n path: string;\n preamble: string;\n sections: Readonly<Record<string, string>>;\n markdown: string;\n};\n\nexport type ReferenceRow = {\n key: string;\n kind: 'reference';\n room: string;\n source: string;\n target: string;\n field: string;\n path: string;\n type: string;\n};\n\nexport type Row = DocumentRow | BodyRow | ReferenceRow;\n\nfunction keyOf(...parts: readonly string[]): string {\n return `${parts.join('\\u0000')}\\u0000`;\n}\n\nexport function documentKey(room: string, path: string): string {\n return keyOf('d', room, path);\n}\n\nfunction referenceField(spec: FieldSpec | undefined): boolean {\n return spec?.kind === 'reference' || (spec?.kind === 'list' && spec.of.kind === 'reference');\n}\n\nfunction targetOf(path: string, value: unknown): string | null {\n return typeof value === 'string' ? target(path, value) : null;\n}\n\nfunction resolved(path: string, value: unknown): unknown {\n if (value === null) return null;\n if (!Array.isArray(value)) return targetOf(path, value) ?? undefined;\n return value.map((item) => targetOf(path, item)).filter((item) => item !== null);\n}\n\nfunction directoriesOf(path: string): readonly string[] {\n const parts = path.split('/').slice(0, -1);\n return ['', ...parts.map((_, index) => parts.slice(0, index + 1).join('/'))];\n}\n\nexport function rowsOf(\n room: string,\n path: string,\n document: Document,\n composition: Composition,\n): readonly Row[] {\n if (!path.endsWith('.md')) return [];\n const type = document.type ?? 'any';\n const definition = definitionOf(governing(composition, path), document.type);\n const key = documentKey(room, path);\n const values: Record<string, unknown> = {};\n const sizes: Record<string, number> = {};\n const references: ReferenceRow[] = [];\n for (const [name, value] of Object.entries(document.fields)) {\n const reference = referenceField(definition?.fields[name]);\n const compared = reference ? resolved(path, value) : value;\n if (compared !== undefined) values[name] = compared;\n if (Array.isArray(value)) sizes[name] = value.length;\n if (!reference) continue;\n const targets = [compared].flat().filter((found) => typeof found === 'string');\n for (const found of new Set(targets)) {\n references.push({\n key: keyOf('r', room, path, name, found),\n kind: 'reference',\n room,\n source: key,\n target: documentKey(room, found),\n field: name,\n path,\n type,\n });\n }\n }\n const body = keyOf('b', room, path);\n return [\n {\n key,\n kind: 'document',\n room,\n path,\n type,\n fields: document.fields,\n values,\n sizes,\n directories: directoriesOf(path),\n body,\n },\n {\n key: body,\n kind: 'body',\n room,\n path,\n preamble: document.preamble,\n sections: document.sections,\n markdown: document.content,\n },\n ...references,\n ];\n}\n"],"names":["governing","definitionOf","target","keyOf","parts","join","documentKey","room","path","referenceField","spec","kind","of","targetOf","value","resolved","Array","isArray","undefined","map","item","filter","directoriesOf","split","slice","_","index","rowsOf","document","composition","endsWith","type","definition","key","values","sizes","references","name","Object","entries","fields","reference","compared","length","targets","flat","found","Set","push","source","field","body","directories","preamble","sections","markdown","content"],"mappings":"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"}
1
+ {"version":3,"sources":["/workspace/packages/mdruntime/src/rows.ts"],"sourcesContent":["import { target, type Document, type FieldSpec } from '@agentshouse/mdmodel';\nimport { governing, type Composition } from './collection.js';\nimport { definitionOf } from './model.js';\n\ntype Fields = Readonly<Record<string, unknown>>;\n\nexport type DocumentRow = {\n key: string;\n kind: 'document';\n room: string;\n path: string;\n type: string;\n fields: Fields;\n values: Fields;\n sizes: Readonly<Record<string, number>>;\n directories: readonly string[];\n body: string;\n};\n\nexport type BodyRow = {\n key: string;\n kind: 'body';\n room: string;\n path: string;\n preamble: string;\n sections: Readonly<Record<string, string>>;\n markdown: string;\n};\n\nexport type ReferenceRow = {\n key: string;\n kind: 'reference';\n room: string;\n source: string;\n target: string;\n field: string;\n path: string;\n type: string;\n};\n\nexport type Row = DocumentRow | BodyRow | ReferenceRow;\n\nfunction keyOf(...parts: readonly string[]): string {\n return `${parts.join('\\u0000')}\\u0000`;\n}\n\nexport function documentKey(room: string, path: string): string {\n return keyOf('d', room, path);\n}\n\nfunction referenceField(spec: FieldSpec | undefined): boolean {\n return spec?.kind === 'reference' || (spec?.kind === 'list' && spec.of.kind === 'reference');\n}\n\nfunction targetOf(path: string, value: unknown): string | null {\n return typeof value === 'string' ? target(path, value) : null;\n}\n\nfunction resolved(path: string, value: unknown): unknown {\n if (value === null) return null;\n if (!Array.isArray(value)) return targetOf(path, value) ?? undefined;\n return value.map((item) => targetOf(path, item)).filter((item) => item !== null);\n}\n\nfunction directoriesOf(path: string): readonly string[] {\n const parts = path.split('/').slice(0, -1);\n return ['', ...parts.map((_, index) => parts.slice(0, index + 1).join('/'))];\n}\n\nexport function rowsOf(\n room: string,\n path: string,\n document: Document,\n composition: Composition,\n): readonly Row[] {\n if (!path.endsWith('.md')) return [];\n const type = document.type ?? 'any';\n const definition = definitionOf(governing(composition, path), document.type);\n const key = documentKey(room, path);\n const values: Record<string, unknown> = {};\n const sizes: Record<string, number> = {};\n const references: ReferenceRow[] = [];\n for (const [name, value] of Object.entries(document.fields)) {\n const reference = referenceField(definition?.fields[name]);\n const compared = reference ? resolved(path, value) : value;\n if (compared !== undefined) values[name] = compared;\n if (Array.isArray(value)) sizes[name] = value.length;\n if (!reference) continue;\n const targets = [compared].flat().filter((found) => typeof found === 'string');\n for (const found of new Set(targets)) {\n references.push({\n key: keyOf('r', room, path, name, found),\n kind: 'reference',\n room,\n source: key,\n target: documentKey(room, found),\n field: name,\n path,\n type,\n });\n }\n }\n const body = keyOf('b', room, path);\n return [\n {\n key,\n kind: 'document',\n room,\n path,\n type,\n fields: document.fields,\n values,\n sizes,\n directories: directoriesOf(path),\n body,\n },\n {\n key: body,\n kind: 'body',\n room,\n path,\n preamble: document.preamble,\n sections: document.sections,\n markdown: document.content,\n },\n ...references,\n ];\n}\n"],"names":["target","governing","definitionOf","keyOf","parts","join","documentKey","room","path","referenceField","spec","kind","of","targetOf","value","resolved","Array","isArray","undefined","map","item","filter","directoriesOf","split","slice","_","index","rowsOf","document","composition","endsWith","type","definition","key","values","sizes","references","name","Object","entries","fields","reference","compared","length","targets","flat","found","Set","push","source","field","body","directories","preamble","sections","markdown","content"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../src/save.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAEL,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AAE/C,MAAM,MAAM,SAAS,GAAG;IACtB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,OAAO,cAAc,EAAE,eAAe,CAAC;IACnD,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,cAAc,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/B,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC;AAwK9C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,GAAG,WAAW,CAOxF;AA2LD,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,CA8FxD"}
1
+ {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../src/save.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAEL,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AAE/C,MAAM,MAAM,SAAS,GAAG;IACtB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,OAAO,cAAc,EAAE,eAAe,CAAC;IACnD,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,cAAc,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/B,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,CAAC;AAwK9C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,GAAG,WAAW,CAOxF;AA2LD,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,CA8FxD"}
package/dist/save.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import { definitionOf } from './model.js';
2
- import { apply, links, parse, serialize } from '@agentshouse/mdmodel';
2
+ import { apply, links, parse, retarget, serialize, target } from '@agentshouse/mdmodel';
3
3
  import { immutable } from './change.js';
4
4
  import { governing, parseCollection, validateCollection } from './collection.js';
5
5
  import { changeBatchIdentity } from './identity.js';
6
6
  import { overlay } from './overlay.js';
7
- import { covered, normalize, relative, resolve } from './paths.js';
7
+ import { covered, normalize, relative } from './paths.js';
8
8
  function refuse(rule, file, location) {
9
9
  return {
10
10
  kind: 'refused',
@@ -22,16 +22,16 @@ function refuse(rule, file, location) {
22
22
  function referenceField(spec) {
23
23
  return spec.kind === 'reference' || spec.kind === 'list' && spec.of.kind === 'reference';
24
24
  }
25
- function retarget(value, from, to, moves) {
25
+ function repointed(value, from, to, moves) {
26
26
  if (Array.isArray(value)) {
27
- const next = value.map((item)=>retarget(item, from, to, moves) ?? item);
27
+ const next = value.map((item)=>repointed(item, from, to, moves) ?? item);
28
28
  return next.some((item, index)=>item !== value[index]) ? next : undefined;
29
29
  }
30
30
  if (typeof value !== 'string') return undefined;
31
- const target = resolve(from, value);
32
- if (target === null) return undefined;
33
- const next = relative(to, moves.get(target) ?? target);
34
- return next === value ? undefined : next;
31
+ const named = target(from, value);
32
+ if (named === null) return undefined;
33
+ const destination = moves.get(named) ?? named;
34
+ return target(to, value) === destination ? undefined : retarget(value, relative(to, destination));
35
35
  }
36
36
  function edited(document, path, changes) {
37
37
  let next = document;
@@ -150,7 +150,7 @@ function rewrites(changes, visible) {
150
150
  const definition = definitionOf(governing(visible.collection.composition, path), document.type);
151
151
  for (const [name, spec] of Object.entries(definition?.fields ?? {})){
152
152
  if (!referenceField(spec) || settled.has(`${path} ${name}`)) continue;
153
- const value = retarget(document.fields[name], path, moved, moves);
153
+ const value = repointed(document.fields[name], path, moved, moves);
154
154
  if (value === undefined) continue;
155
155
  added.push({
156
156
  kind: 'field',
@@ -205,8 +205,8 @@ function targets(value, from) {
205
205
  const resolved = [];
206
206
  for (const item of values){
207
207
  if (typeof item !== 'string') continue;
208
- const target = resolve(from, item);
209
- if (target !== null) resolved.push(target);
208
+ const named = target(from, item);
209
+ if (named !== null) resolved.push(named);
210
210
  }
211
211
  return resolved;
212
212
  }
@@ -222,7 +222,7 @@ function incoming(collection, removed) {
222
222
  const definition = definitionOf(governing(collection.composition, path), document.type);
223
223
  for (const [name, spec] of Object.entries(definition?.fields ?? {})){
224
224
  if (!referenceField(spec)) continue;
225
- for (const target of targets(document.fields[name], path))note(target, path);
225
+ for (const named of targets(document.fields[name], path))note(named, path);
226
226
  }
227
227
  for (const link of links(document, path))note(link.target, path);
228
228
  }
package/dist/save.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/workspace/packages/mdruntime/src/save.ts"],"sourcesContent":["import { definitionOf, type ModelState } from './model.js';\nimport {\n apply,\n links,\n parse,\n serialize,\n type Document,\n type FieldSpec,\n} from '@agentshouse/mdmodel';\nimport type { ProviderLimit } from './adapter.js';\nimport {\n immutable,\n type Change,\n type ChangeBatch,\n type Precondition,\n type WrittenBy,\n} from './change.js';\nimport {\n governing,\n parseCollection,\n validateCollection,\n type Collection,\n type Composition,\n} from './collection.js';\nimport { changeBatchIdentity } from './identity.js';\nimport { overlay, type Layer } from './overlay.js';\nimport { covered, normalize, relative, resolve } from './paths.js';\nimport type { VisibleLayer } from './replica.js';\nimport type { ChangedPart } from './room-draft.js';\n\nexport type SaveRefusal = {\n rule: string;\n file?: string;\n location?: string;\n referrers?: readonly string[];\n parts?: readonly ChangedPart[];\n};\n\nexport type Rewriting = 'runtime' | 'provider';\n\nexport type SaveInput = {\n composition: Composition;\n rewriting: Rewriting;\n baseRoomVersion: string;\n operations: import('./adapter.js').OperationScopes;\n providerOwnedPaths: readonly string[];\n providerLimits: readonly ProviderLimit[];\n visible: VisibleLayer;\n changes: readonly Change[];\n bases: readonly Precondition[];\n writtenBy?: WrittenBy;\n};\n\nexport type BatchResult =\n | { kind: 'batch'; batch: ChangeBatch }\n | { kind: 'refused'; refusal: SaveRefusal };\n\ntype Expansion =\n | { kind: 'changes'; changes: readonly Change[] }\n | { kind: 'refused'; refusal: SaveRefusal };\n\nfunction refuse(rule: string, file?: string, location?: string): BatchResult {\n return {\n kind: 'refused',\n refusal: {\n rule,\n ...(file === undefined ? {} : { file }),\n ...(location === undefined ? {} : { location }),\n },\n };\n}\n\nfunction referenceField(spec: FieldSpec): boolean {\n return spec.kind === 'reference' || (spec.kind === 'list' && spec.of.kind === 'reference');\n}\n\nfunction retarget(\n value: unknown,\n from: string,\n to: string,\n moves: ReadonlyMap<string, string>,\n): unknown {\n if (Array.isArray(value)) {\n const next = value.map((item) => retarget(item, from, to, moves) ?? item);\n return next.some((item, index) => item !== value[index]) ? next : undefined;\n }\n if (typeof value !== 'string') return undefined;\n const target = resolve(from, value);\n if (target === null) return undefined;\n const next = relative(to, moves.get(target) ?? target);\n return next === value ? undefined : next;\n}\n\nfunction edited(document: Document, path: string, changes: readonly Change[]): Document {\n let next = document;\n for (const change of changes) {\n if (change.path !== path) continue;\n if (change.kind !== 'section' && change.kind !== 'preamble') continue;\n const applied = apply(\n next,\n change.kind === 'preamble'\n ? { kind: 'preamble', value: change.value, prior: next.preamble }\n : {\n kind: 'section',\n name: change.name,\n value: change.value,\n prior: next.sections[change.name],\n },\n );\n if (applied.outcome === 'applied') next = applied.document;\n }\n return next;\n}\n\nfunction bodies(path: string, before: Document, after: Document): readonly Change[] {\n const changes: Change[] = [];\n if (after.preamble !== before.preamble) {\n changes.push({ kind: 'preamble', path, value: after.preamble });\n }\n for (const [name, value] of Object.entries(after.sections)) {\n if (before.sections[name] === value) continue;\n changes.push({ kind: 'section', path, name, value });\n }\n return changes;\n}\n\nfunction relinks(\n path: string,\n moved: string,\n before: Document,\n moves: ReadonlyMap<string, string>,\n): Expansion {\n let after = before;\n for (const link of links(before, path)) {\n const destination = moves.get(link.target) ?? link.target;\n if (destination === link.target && moved === path) continue;\n const to = relative(moved, destination);\n if (to === relative(path, link.target)) continue;\n const applied = apply(after, { kind: 'link', href: link.href, to });\n if (applied.outcome === 'refuse') {\n return {\n kind: 'refused',\n refusal: {\n rule: applied.refusal.rule,\n file: path,\n ...(applied.refusal.location === undefined ? {} : { location: applied.refusal.location }),\n },\n };\n }\n after = applied.document;\n }\n if (after === before) return { kind: 'changes', changes: [] };\n if (before.type === undefined) {\n return { kind: 'changes', changes: [{ kind: 'replace', path, content: serialize(after) }] };\n }\n return { kind: 'changes', changes: bodies(path, before, after) };\n}\n\nfunction subsumed(merged: Change[], path: string) {\n for (let index = merged.length - 1; index >= 0; index -= 1) {\n const item = merged[index];\n if (item.path !== path) continue;\n if (item.kind === 'section' || item.kind === 'preamble') merged.splice(index, 1);\n }\n}\n\nfunction rewrites(changes: readonly Change[], visible: VisibleLayer): Expansion {\n const moves = new Map<string, string>();\n const settled = new Set<string>();\n for (const change of changes) {\n if (change.kind === 'move') moves.set(change.path, change.to);\n if (change.kind === 'remove' || change.kind === 'replace' || change.kind === 'create') {\n settled.add(change.path);\n }\n if (change.kind === 'field') settled.add(`${change.path} ${change.name}`);\n }\n if (moves.size === 0) return { kind: 'changes', changes };\n const merged = [...changes];\n const added: Change[] = [];\n for (const [path, document] of Object.entries(visible.collection.documents)) {\n if (settled.has(path)) continue;\n const moved = moves.get(path) ?? path;\n const definition = definitionOf(governing(visible.collection.composition, path), document.type);\n for (const [name, spec] of Object.entries(definition?.fields ?? {})) {\n if (!referenceField(spec) || settled.has(`${path} ${name}`)) continue;\n const value = retarget(document.fields[name], path, moved, moves);\n if (value === undefined) continue;\n added.push({ kind: 'field', path, name, value });\n }\n const relinked = relinks(path, moved, edited(document, path, merged), moves);\n if (relinked.kind === 'refused') return relinked;\n for (const change of relinked.changes) {\n if (change.kind === 'replace') {\n subsumed(merged, path);\n added.push(change);\n continue;\n }\n const index = merged.findIndex(\n (item) =>\n item.kind === change.kind &&\n item.path === path &&\n (change.kind !== 'section' || (item.kind === 'section' && item.name === change.name)),\n );\n if (index === -1) added.push(change);\n else merged[index] = change;\n }\n }\n return { kind: 'changes', changes: [...added, ...merged] };\n}\n\nfunction anticipated(\n changes: readonly Change[],\n preconditions: readonly Precondition[],\n rewritten: readonly Change[],\n visible: VisibleLayer,\n) {\n const derived = rewritten.filter((change) => !changes.includes(change));\n return {\n changes: rewritten,\n preconditions: [...preconditionsOf(derived, visible, []), ...preconditions],\n };\n}\n\nexport function providerRewritten(batch: ChangeBatch, visible: VisibleLayer): ChangeBatch {\n const rewritten = rewrites(batch.changes, visible);\n if (rewritten.kind === 'refused') return batch;\n return {\n ...batch,\n ...anticipated(batch.changes, batch.preconditions, rewritten.changes, visible),\n };\n}\n\nfunction targets(value: unknown, from: string): readonly string[] {\n const values = Array.isArray(value) ? value : [value];\n const resolved: string[] = [];\n for (const item of values) {\n if (typeof item !== 'string') continue;\n const target = resolve(from, item);\n if (target !== null) resolved.push(target);\n }\n return resolved;\n}\n\nfunction incoming(collection: Collection, removed: ReadonlySet<string>): BatchResult | null {\n const found = new Map<string, Set<string>>();\n const note = (target: string, file: string) => {\n if (!removed.has(target)) return;\n const referrers = found.get(target) ?? new Set<string>();\n referrers.add(file);\n found.set(target, referrers);\n };\n for (const [path, document] of Object.entries(collection.documents)) {\n const definition = definitionOf(governing(collection.composition, path), document.type);\n for (const [name, spec] of Object.entries(definition?.fields ?? {})) {\n if (!referenceField(spec)) continue;\n for (const target of targets(document.fields[name], path)) note(target, path);\n }\n for (const link of links(document, path)) note(link.target, path);\n }\n const [first] = [...found.keys()].sort();\n if (first === undefined) return null;\n const every = new Set<string>();\n for (const referrers of found.values()) for (const file of referrers) every.add(file);\n return {\n kind: 'refused',\n refusal: { rule: 'referenced-missing-file', file: first, referrers: [...every].sort() },\n };\n}\n\nfunction affected(change: Change): readonly string[] {\n return change.kind === 'move' ? [change.path, change.to] : [change.path];\n}\n\nfunction guard(changes: readonly Change[], input: SaveInput): BatchResult | null {\n const existing = new Set([\n ...Object.keys(input.visible.documents),\n ...input.visible.binaryTargets,\n ]);\n for (const change of changes) {\n for (const path of affected(change)) {\n const normalized = normalize(path);\n if (normalized === null || normalized === '') return refuse('room-root', path);\n if (covered(input.providerOwnedPaths, normalized)) {\n return refuse('provider-owned-path', normalized);\n }\n const operation = change.kind === 'remove' ? 'delete' : 'write';\n if (!covered(input.operations[operation], normalized))\n return refuse(`${operation}-grant`, normalized);\n }\n if (change.kind === 'create') {\n if (existing.has(change.path)) return refuse('path-collision', change.path);\n existing.add(change.path);\n continue;\n }\n if (change.kind === 'move') {\n if (!existing.has(change.path)) return refuse('path-absent', change.path);\n if (existing.has(change.to)) return refuse('path-collision', change.to);\n existing.delete(change.path);\n existing.add(change.to);\n continue;\n }\n if (!existing.has(change.path)) return refuse('path-absent', change.path);\n if (change.kind === 'remove') {\n existing.delete(change.path);\n continue;\n }\n if (change.kind === 'replace') {\n if (input.visible.revisions[change.path] === undefined) {\n return refuse('unknown-revision', change.path);\n }\n continue;\n }\n if (input.visible.collection.documents[change.path] === undefined) {\n return refuse('path-absent', change.path);\n }\n }\n return null;\n}\n\nfunction existence(visible: VisibleLayer, path: string): Precondition {\n const revision = visible.revisions[path];\n return revision === undefined ? { kind: 'present', path } : { kind: 'revision', path, revision };\n}\n\nfunction sameTarget(precondition: Precondition, change: Change): boolean {\n if (precondition.kind !== change.kind || precondition.path !== change.path) return false;\n return (\n (precondition.kind !== 'field' && precondition.kind !== 'section') ||\n ((change.kind === 'field' || change.kind === 'section') && precondition.name === change.name)\n );\n}\n\nfunction preconditionsOf(\n changes: readonly Change[],\n visible: VisibleLayer,\n bases: readonly Precondition[],\n): readonly Precondition[] {\n const preconditions: Precondition[] = [];\n const seen = new Set<string>();\n const add = (precondition: Precondition) => {\n const part =\n precondition.kind === 'field' || precondition.kind === 'section' ? precondition.name : '';\n const identity = `${precondition.kind} ${precondition.path} ${part}`;\n if (seen.has(identity)) return;\n seen.add(identity);\n preconditions.push(precondition);\n };\n for (const change of changes) {\n if (change.kind === 'field' || change.kind === 'section' || change.kind === 'preamble') {\n const based = bases.find((base) => sameTarget(base, change));\n if (based !== undefined) {\n add(based);\n continue;\n }\n const document = visible.collection.documents[change.path];\n if (change.kind === 'field') {\n add({\n kind: 'field',\n path: change.path,\n name: change.name,\n value: document.fields[change.name],\n });\n } else if (change.kind === 'section') {\n add({\n kind: 'section',\n path: change.path,\n name: change.name,\n value: document.sections[change.name],\n });\n } else add({ kind: 'preamble', path: change.path, value: document.preamble });\n continue;\n }\n if (change.kind === 'create') {\n add({ kind: 'absent', path: change.path });\n continue;\n }\n add(existence(visible, change.path));\n if (change.kind === 'move') add({ kind: 'absent', path: change.to });\n }\n return preconditions;\n}\n\nfunction depth(path: string) {\n return path.split('/').length;\n}\n\nfunction exceeded(\n limits: readonly ProviderLimit[],\n changes: readonly Change[],\n resulting: Layer,\n): BatchResult | null {\n const written = changes.map((change) => (change.kind === 'move' ? change.to : change.path));\n const created = changes\n .filter((change) => change.kind === 'create' || change.kind === 'move')\n .map((change) => (change.kind === 'move' ? change.to : change.path));\n for (const limit of limits) {\n const value = limit.value;\n if (typeof value !== 'number') continue;\n if (limit.name === 'change-batch-operations' && changes.length > value) {\n return refuse('provider-limit', undefined, limit.name);\n }\n if (limit.name === 'document-size') {\n const large = written.find((path) => (resulting.documents[path] ?? '').length > value);\n if (large !== undefined) return refuse('provider-limit', large, limit.name);\n }\n if (limit.name === 'path-length') {\n const long = created.find((path) => path.length > value);\n if (long !== undefined) return refuse('provider-limit', long, limit.name);\n }\n if (limit.name === 'path-depth') {\n const deep = created.find((path) => depth(path) > value);\n if (deep !== undefined) return refuse('provider-limit', deep, limit.name);\n }\n }\n return null;\n}\n\nexport function buildBatch(input: SaveInput): BatchResult {\n const structural = input.changes.find(\n (change) => change.kind === 'move' || change.kind === 'remove',\n );\n if (\n structural !== undefined &&\n Object.entries(input.visible.collection.documents).some(\n ([path, document]) =>\n document.type !== undefined &&\n document.type !== 'any' &&\n governing(input.composition, path).status === 'unavailable',\n )\n )\n return refuse('model-unavailable', structural.path);\n if (input.changes.length === 0) return refuse('no-change');\n const rewritten = rewrites(input.changes, input.visible);\n if (rewritten.kind === 'refused') return rewritten;\n const changes = input.rewriting === 'provider' ? input.changes : rewritten.changes;\n const refusal = guard(changes, input);\n if (refusal !== null) return refusal;\n const preconditions = preconditionsOf(changes, input.visible, input.bases);\n const predicted =\n input.rewriting === 'provider'\n ? anticipated(changes, preconditions, rewritten.changes, input.visible)\n : { changes, preconditions };\n const resulting = overlay(input.visible, [\n { id: '', baseRoomVersion: input.baseRoomVersion, ...predicted },\n ]);\n const removed = new Set(\n changes.filter((change) => change.kind === 'remove').map((change) => change.path),\n );\n if (removed.size > 0) {\n const referenced = incoming(parseCollection(resulting.documents, input.composition), removed);\n if (referenced !== null) return referenced;\n }\n const typed = (content: string | undefined) => {\n if (content === undefined) return false;\n const parsed = parse(content);\n return parsed.ok && parsed.document.type !== undefined && parsed.document.type !== 'any';\n };\n const typedPaths = [...new Set(predicted.changes.flatMap(affected))].filter(\n (path) => typed(input.visible.documents[path]) || typed(resulting.documents[path]),\n );\n const needsModel = typedPaths.length > 0;\n const withoutModel = typedPaths.find(\n (path) => governing(input.composition, path).status === 'unavailable',\n );\n if (withoutModel !== undefined) return refuse('model-unavailable', withoutModel);\n const validationText = needsModel\n ? resulting.documents\n : Object.fromEntries(\n Object.entries(resulting.documents).filter(([path]) =>\n predicted.changes.some((change) => affected(change).includes(path)),\n ),\n );\n const verdict = validateCollection(validationText, resulting.binaryTargets, input.composition);\n if (verdict.verdict === 'refuse') {\n return {\n kind: 'refused',\n refusal: {\n rule: verdict.rule,\n file: verdict.file,\n ...(verdict.location === undefined ? {} : { location: verdict.location }),\n ...(verdict.referrers === undefined ? {} : { referrers: verdict.referrers }),\n },\n };\n }\n const limited = exceeded(input.providerLimits, changes, resulting);\n if (limited !== null) return limited;\n const validated = typedPaths\n .map((path) => governing(input.composition, path))\n .find(\n (model): model is Extract<ModelState, { status: 'current' | 'cached' }> =>\n model.status !== 'unavailable',\n );\n return {\n kind: 'batch',\n batch: immutable({\n id: changeBatchIdentity(),\n baseRoomVersion: input.baseRoomVersion,\n changes,\n preconditions,\n ...(input.writtenBy === undefined ? {} : { writtenBy: input.writtenBy }),\n ...(validated === undefined\n ? {}\n : {\n validation: {\n identity: validated.snapshot.identity,\n version: validated.snapshot.version,\n source: validated.status,\n },\n }),\n }),\n };\n}\n"],"names":["definitionOf","apply","links","parse","serialize","immutable","governing","parseCollection","validateCollection","changeBatchIdentity","overlay","covered","normalize","relative","resolve","refuse","rule","file","location","kind","refusal","undefined","referenceField","spec","of","retarget","value","from","to","moves","Array","isArray","next","map","item","some","index","target","get","edited","document","path","changes","change","applied","prior","preamble","name","sections","outcome","bodies","before","after","push","Object","entries","relinks","moved","link","destination","href","type","content","subsumed","merged","length","splice","rewrites","visible","Map","settled","Set","set","add","size","added","collection","documents","has","definition","composition","fields","relinked","findIndex","anticipated","preconditions","rewritten","derived","filter","includes","preconditionsOf","providerRewritten","batch","targets","values","resolved","incoming","removed","found","note","referrers","first","keys","sort","every","affected","guard","input","existing","binaryTargets","normalized","providerOwnedPaths","operation","operations","delete","revisions","existence","revision","sameTarget","precondition","bases","seen","part","identity","based","find","base","depth","split","exceeded","limits","resulting","written","created","limit","large","long","deep","buildBatch","structural","status","rewriting","predicted","id","baseRoomVersion","referenced","typed","parsed","ok","typedPaths","flatMap","needsModel","withoutModel","validationText","fromEntries","verdict","limited","providerLimits","validated","model","writtenBy","validation","snapshot","version","source"],"mappings":"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"}
1
+ {"version":3,"sources":["/workspace/packages/mdruntime/src/save.ts"],"sourcesContent":["import { definitionOf, type ModelState } from './model.js';\nimport {\n apply,\n links,\n parse,\n retarget,\n serialize,\n target,\n type Document,\n type FieldSpec,\n} from '@agentshouse/mdmodel';\nimport type { ProviderLimit } from './adapter.js';\nimport {\n immutable,\n type Change,\n type ChangeBatch,\n type Precondition,\n type WrittenBy,\n} from './change.js';\nimport {\n governing,\n parseCollection,\n validateCollection,\n type Collection,\n type Composition,\n} from './collection.js';\nimport { changeBatchIdentity } from './identity.js';\nimport { overlay, type Layer } from './overlay.js';\nimport { covered, normalize, relative } from './paths.js';\nimport type { VisibleLayer } from './replica.js';\nimport type { ChangedPart } from './room-draft.js';\n\nexport type SaveRefusal = {\n rule: string;\n file?: string;\n location?: string;\n referrers?: readonly string[];\n parts?: readonly ChangedPart[];\n};\n\nexport type Rewriting = 'runtime' | 'provider';\n\nexport type SaveInput = {\n composition: Composition;\n rewriting: Rewriting;\n baseRoomVersion: string;\n operations: import('./adapter.js').OperationScopes;\n providerOwnedPaths: readonly string[];\n providerLimits: readonly ProviderLimit[];\n visible: VisibleLayer;\n changes: readonly Change[];\n bases: readonly Precondition[];\n writtenBy?: WrittenBy;\n};\n\nexport type BatchResult =\n | { kind: 'batch'; batch: ChangeBatch }\n | { kind: 'refused'; refusal: SaveRefusal };\n\ntype Expansion =\n | { kind: 'changes'; changes: readonly Change[] }\n | { kind: 'refused'; refusal: SaveRefusal };\n\nfunction refuse(rule: string, file?: string, location?: string): BatchResult {\n return {\n kind: 'refused',\n refusal: {\n rule,\n ...(file === undefined ? {} : { file }),\n ...(location === undefined ? {} : { location }),\n },\n };\n}\n\nfunction referenceField(spec: FieldSpec): boolean {\n return spec.kind === 'reference' || (spec.kind === 'list' && spec.of.kind === 'reference');\n}\n\nfunction repointed(\n value: unknown,\n from: string,\n to: string,\n moves: ReadonlyMap<string, string>,\n): unknown {\n if (Array.isArray(value)) {\n const next = value.map((item) => repointed(item, from, to, moves) ?? item);\n return next.some((item, index) => item !== value[index]) ? next : undefined;\n }\n if (typeof value !== 'string') return undefined;\n const named = target(from, value);\n if (named === null) return undefined;\n const destination = moves.get(named) ?? named;\n return target(to, value) === destination ? undefined : retarget(value, relative(to, destination));\n}\n\nfunction edited(document: Document, path: string, changes: readonly Change[]): Document {\n let next = document;\n for (const change of changes) {\n if (change.path !== path) continue;\n if (change.kind !== 'section' && change.kind !== 'preamble') continue;\n const applied = apply(\n next,\n change.kind === 'preamble'\n ? { kind: 'preamble', value: change.value, prior: next.preamble }\n : {\n kind: 'section',\n name: change.name,\n value: change.value,\n prior: next.sections[change.name],\n },\n );\n if (applied.outcome === 'applied') next = applied.document;\n }\n return next;\n}\n\nfunction bodies(path: string, before: Document, after: Document): readonly Change[] {\n const changes: Change[] = [];\n if (after.preamble !== before.preamble) {\n changes.push({ kind: 'preamble', path, value: after.preamble });\n }\n for (const [name, value] of Object.entries(after.sections)) {\n if (before.sections[name] === value) continue;\n changes.push({ kind: 'section', path, name, value });\n }\n return changes;\n}\n\nfunction relinks(\n path: string,\n moved: string,\n before: Document,\n moves: ReadonlyMap<string, string>,\n): Expansion {\n let after = before;\n for (const link of links(before, path)) {\n const destination = moves.get(link.target) ?? link.target;\n if (destination === link.target && moved === path) continue;\n const to = relative(moved, destination);\n if (to === relative(path, link.target)) continue;\n const applied = apply(after, { kind: 'link', href: link.href, to });\n if (applied.outcome === 'refuse') {\n return {\n kind: 'refused',\n refusal: {\n rule: applied.refusal.rule,\n file: path,\n ...(applied.refusal.location === undefined ? {} : { location: applied.refusal.location }),\n },\n };\n }\n after = applied.document;\n }\n if (after === before) return { kind: 'changes', changes: [] };\n if (before.type === undefined) {\n return { kind: 'changes', changes: [{ kind: 'replace', path, content: serialize(after) }] };\n }\n return { kind: 'changes', changes: bodies(path, before, after) };\n}\n\nfunction subsumed(merged: Change[], path: string) {\n for (let index = merged.length - 1; index >= 0; index -= 1) {\n const item = merged[index];\n if (item.path !== path) continue;\n if (item.kind === 'section' || item.kind === 'preamble') merged.splice(index, 1);\n }\n}\n\nfunction rewrites(changes: readonly Change[], visible: VisibleLayer): Expansion {\n const moves = new Map<string, string>();\n const settled = new Set<string>();\n for (const change of changes) {\n if (change.kind === 'move') moves.set(change.path, change.to);\n if (change.kind === 'remove' || change.kind === 'replace' || change.kind === 'create') {\n settled.add(change.path);\n }\n if (change.kind === 'field') settled.add(`${change.path} ${change.name}`);\n }\n if (moves.size === 0) return { kind: 'changes', changes };\n const merged = [...changes];\n const added: Change[] = [];\n for (const [path, document] of Object.entries(visible.collection.documents)) {\n if (settled.has(path)) continue;\n const moved = moves.get(path) ?? path;\n const definition = definitionOf(governing(visible.collection.composition, path), document.type);\n for (const [name, spec] of Object.entries(definition?.fields ?? {})) {\n if (!referenceField(spec) || settled.has(`${path} ${name}`)) continue;\n const value = repointed(document.fields[name], path, moved, moves);\n if (value === undefined) continue;\n added.push({ kind: 'field', path, name, value });\n }\n const relinked = relinks(path, moved, edited(document, path, merged), moves);\n if (relinked.kind === 'refused') return relinked;\n for (const change of relinked.changes) {\n if (change.kind === 'replace') {\n subsumed(merged, path);\n added.push(change);\n continue;\n }\n const index = merged.findIndex(\n (item) =>\n item.kind === change.kind &&\n item.path === path &&\n (change.kind !== 'section' || (item.kind === 'section' && item.name === change.name)),\n );\n if (index === -1) added.push(change);\n else merged[index] = change;\n }\n }\n return { kind: 'changes', changes: [...added, ...merged] };\n}\n\nfunction anticipated(\n changes: readonly Change[],\n preconditions: readonly Precondition[],\n rewritten: readonly Change[],\n visible: VisibleLayer,\n) {\n const derived = rewritten.filter((change) => !changes.includes(change));\n return {\n changes: rewritten,\n preconditions: [...preconditionsOf(derived, visible, []), ...preconditions],\n };\n}\n\nexport function providerRewritten(batch: ChangeBatch, visible: VisibleLayer): ChangeBatch {\n const rewritten = rewrites(batch.changes, visible);\n if (rewritten.kind === 'refused') return batch;\n return {\n ...batch,\n ...anticipated(batch.changes, batch.preconditions, rewritten.changes, visible),\n };\n}\n\nfunction targets(value: unknown, from: string): readonly string[] {\n const values = Array.isArray(value) ? value : [value];\n const resolved: string[] = [];\n for (const item of values) {\n if (typeof item !== 'string') continue;\n const named = target(from, item);\n if (named !== null) resolved.push(named);\n }\n return resolved;\n}\n\nfunction incoming(collection: Collection, removed: ReadonlySet<string>): BatchResult | null {\n const found = new Map<string, Set<string>>();\n const note = (target: string, file: string) => {\n if (!removed.has(target)) return;\n const referrers = found.get(target) ?? new Set<string>();\n referrers.add(file);\n found.set(target, referrers);\n };\n for (const [path, document] of Object.entries(collection.documents)) {\n const definition = definitionOf(governing(collection.composition, path), document.type);\n for (const [name, spec] of Object.entries(definition?.fields ?? {})) {\n if (!referenceField(spec)) continue;\n for (const named of targets(document.fields[name], path)) note(named, path);\n }\n for (const link of links(document, path)) note(link.target, path);\n }\n const [first] = [...found.keys()].sort();\n if (first === undefined) return null;\n const every = new Set<string>();\n for (const referrers of found.values()) for (const file of referrers) every.add(file);\n return {\n kind: 'refused',\n refusal: { rule: 'referenced-missing-file', file: first, referrers: [...every].sort() },\n };\n}\n\nfunction affected(change: Change): readonly string[] {\n return change.kind === 'move' ? [change.path, change.to] : [change.path];\n}\n\nfunction guard(changes: readonly Change[], input: SaveInput): BatchResult | null {\n const existing = new Set([\n ...Object.keys(input.visible.documents),\n ...input.visible.binaryTargets,\n ]);\n for (const change of changes) {\n for (const path of affected(change)) {\n const normalized = normalize(path);\n if (normalized === null || normalized === '') return refuse('room-root', path);\n if (covered(input.providerOwnedPaths, normalized)) {\n return refuse('provider-owned-path', normalized);\n }\n const operation = change.kind === 'remove' ? 'delete' : 'write';\n if (!covered(input.operations[operation], normalized))\n return refuse(`${operation}-grant`, normalized);\n }\n if (change.kind === 'create') {\n if (existing.has(change.path)) return refuse('path-collision', change.path);\n existing.add(change.path);\n continue;\n }\n if (change.kind === 'move') {\n if (!existing.has(change.path)) return refuse('path-absent', change.path);\n if (existing.has(change.to)) return refuse('path-collision', change.to);\n existing.delete(change.path);\n existing.add(change.to);\n continue;\n }\n if (!existing.has(change.path)) return refuse('path-absent', change.path);\n if (change.kind === 'remove') {\n existing.delete(change.path);\n continue;\n }\n if (change.kind === 'replace') {\n if (input.visible.revisions[change.path] === undefined) {\n return refuse('unknown-revision', change.path);\n }\n continue;\n }\n if (input.visible.collection.documents[change.path] === undefined) {\n return refuse('path-absent', change.path);\n }\n }\n return null;\n}\n\nfunction existence(visible: VisibleLayer, path: string): Precondition {\n const revision = visible.revisions[path];\n return revision === undefined ? { kind: 'present', path } : { kind: 'revision', path, revision };\n}\n\nfunction sameTarget(precondition: Precondition, change: Change): boolean {\n if (precondition.kind !== change.kind || precondition.path !== change.path) return false;\n return (\n (precondition.kind !== 'field' && precondition.kind !== 'section') ||\n ((change.kind === 'field' || change.kind === 'section') && precondition.name === change.name)\n );\n}\n\nfunction preconditionsOf(\n changes: readonly Change[],\n visible: VisibleLayer,\n bases: readonly Precondition[],\n): readonly Precondition[] {\n const preconditions: Precondition[] = [];\n const seen = new Set<string>();\n const add = (precondition: Precondition) => {\n const part =\n precondition.kind === 'field' || precondition.kind === 'section' ? precondition.name : '';\n const identity = `${precondition.kind} ${precondition.path} ${part}`;\n if (seen.has(identity)) return;\n seen.add(identity);\n preconditions.push(precondition);\n };\n for (const change of changes) {\n if (change.kind === 'field' || change.kind === 'section' || change.kind === 'preamble') {\n const based = bases.find((base) => sameTarget(base, change));\n if (based !== undefined) {\n add(based);\n continue;\n }\n const document = visible.collection.documents[change.path];\n if (change.kind === 'field') {\n add({\n kind: 'field',\n path: change.path,\n name: change.name,\n value: document.fields[change.name],\n });\n } else if (change.kind === 'section') {\n add({\n kind: 'section',\n path: change.path,\n name: change.name,\n value: document.sections[change.name],\n });\n } else add({ kind: 'preamble', path: change.path, value: document.preamble });\n continue;\n }\n if (change.kind === 'create') {\n add({ kind: 'absent', path: change.path });\n continue;\n }\n add(existence(visible, change.path));\n if (change.kind === 'move') add({ kind: 'absent', path: change.to });\n }\n return preconditions;\n}\n\nfunction depth(path: string) {\n return path.split('/').length;\n}\n\nfunction exceeded(\n limits: readonly ProviderLimit[],\n changes: readonly Change[],\n resulting: Layer,\n): BatchResult | null {\n const written = changes.map((change) => (change.kind === 'move' ? change.to : change.path));\n const created = changes\n .filter((change) => change.kind === 'create' || change.kind === 'move')\n .map((change) => (change.kind === 'move' ? change.to : change.path));\n for (const limit of limits) {\n const value = limit.value;\n if (typeof value !== 'number') continue;\n if (limit.name === 'change-batch-operations' && changes.length > value) {\n return refuse('provider-limit', undefined, limit.name);\n }\n if (limit.name === 'document-size') {\n const large = written.find((path) => (resulting.documents[path] ?? '').length > value);\n if (large !== undefined) return refuse('provider-limit', large, limit.name);\n }\n if (limit.name === 'path-length') {\n const long = created.find((path) => path.length > value);\n if (long !== undefined) return refuse('provider-limit', long, limit.name);\n }\n if (limit.name === 'path-depth') {\n const deep = created.find((path) => depth(path) > value);\n if (deep !== undefined) return refuse('provider-limit', deep, limit.name);\n }\n }\n return null;\n}\n\nexport function buildBatch(input: SaveInput): BatchResult {\n const structural = input.changes.find(\n (change) => change.kind === 'move' || change.kind === 'remove',\n );\n if (\n structural !== undefined &&\n Object.entries(input.visible.collection.documents).some(\n ([path, document]) =>\n document.type !== undefined &&\n document.type !== 'any' &&\n governing(input.composition, path).status === 'unavailable',\n )\n )\n return refuse('model-unavailable', structural.path);\n if (input.changes.length === 0) return refuse('no-change');\n const rewritten = rewrites(input.changes, input.visible);\n if (rewritten.kind === 'refused') return rewritten;\n const changes = input.rewriting === 'provider' ? input.changes : rewritten.changes;\n const refusal = guard(changes, input);\n if (refusal !== null) return refusal;\n const preconditions = preconditionsOf(changes, input.visible, input.bases);\n const predicted =\n input.rewriting === 'provider'\n ? anticipated(changes, preconditions, rewritten.changes, input.visible)\n : { changes, preconditions };\n const resulting = overlay(input.visible, [\n { id: '', baseRoomVersion: input.baseRoomVersion, ...predicted },\n ]);\n const removed = new Set(\n changes.filter((change) => change.kind === 'remove').map((change) => change.path),\n );\n if (removed.size > 0) {\n const referenced = incoming(parseCollection(resulting.documents, input.composition), removed);\n if (referenced !== null) return referenced;\n }\n const typed = (content: string | undefined) => {\n if (content === undefined) return false;\n const parsed = parse(content);\n return parsed.ok && parsed.document.type !== undefined && parsed.document.type !== 'any';\n };\n const typedPaths = [...new Set(predicted.changes.flatMap(affected))].filter(\n (path) => typed(input.visible.documents[path]) || typed(resulting.documents[path]),\n );\n const needsModel = typedPaths.length > 0;\n const withoutModel = typedPaths.find(\n (path) => governing(input.composition, path).status === 'unavailable',\n );\n if (withoutModel !== undefined) return refuse('model-unavailable', withoutModel);\n const validationText = needsModel\n ? resulting.documents\n : Object.fromEntries(\n Object.entries(resulting.documents).filter(([path]) =>\n predicted.changes.some((change) => affected(change).includes(path)),\n ),\n );\n const verdict = validateCollection(validationText, resulting.binaryTargets, input.composition);\n if (verdict.verdict === 'refuse') {\n return {\n kind: 'refused',\n refusal: {\n rule: verdict.rule,\n file: verdict.file,\n ...(verdict.location === undefined ? {} : { location: verdict.location }),\n ...(verdict.referrers === undefined ? {} : { referrers: verdict.referrers }),\n },\n };\n }\n const limited = exceeded(input.providerLimits, changes, resulting);\n if (limited !== null) return limited;\n const validated = typedPaths\n .map((path) => governing(input.composition, path))\n .find(\n (model): model is Extract<ModelState, { status: 'current' | 'cached' }> =>\n model.status !== 'unavailable',\n );\n return {\n kind: 'batch',\n batch: immutable({\n id: changeBatchIdentity(),\n baseRoomVersion: input.baseRoomVersion,\n changes,\n preconditions,\n ...(input.writtenBy === undefined ? {} : { writtenBy: input.writtenBy }),\n ...(validated === undefined\n ? {}\n : {\n validation: {\n identity: validated.snapshot.identity,\n version: validated.snapshot.version,\n source: validated.status,\n },\n }),\n }),\n };\n}\n"],"names":["definitionOf","apply","links","parse","retarget","serialize","target","immutable","governing","parseCollection","validateCollection","changeBatchIdentity","overlay","covered","normalize","relative","refuse","rule","file","location","kind","refusal","undefined","referenceField","spec","of","repointed","value","from","to","moves","Array","isArray","next","map","item","some","index","named","destination","get","edited","document","path","changes","change","applied","prior","preamble","name","sections","outcome","bodies","before","after","push","Object","entries","relinks","moved","link","href","type","content","subsumed","merged","length","splice","rewrites","visible","Map","settled","Set","set","add","size","added","collection","documents","has","definition","composition","fields","relinked","findIndex","anticipated","preconditions","rewritten","derived","filter","includes","preconditionsOf","providerRewritten","batch","targets","values","resolved","incoming","removed","found","note","referrers","first","keys","sort","every","affected","guard","input","existing","binaryTargets","normalized","providerOwnedPaths","operation","operations","delete","revisions","existence","revision","sameTarget","precondition","bases","seen","part","identity","based","find","base","depth","split","exceeded","limits","resulting","written","created","limit","large","long","deep","buildBatch","structural","status","rewriting","predicted","id","baseRoomVersion","referenced","typed","parsed","ok","typedPaths","flatMap","needsModel","withoutModel","validationText","fromEntries","verdict","limited","providerLimits","validated","model","writtenBy","validation","snapshot","version","source"],"mappings":"AAAA,SAASA,YAAY,QAAyB,aAAa;AAC3D,SACEC,KAAK,EACLC,KAAK,EACLC,KAAK,EACLC,QAAQ,EACRC,SAAS,EACTC,MAAM,QAGD,uBAAuB;AAE9B,SACEC,SAAS,QAKJ,cAAc;AACrB,SACEC,SAAS,EACTC,eAAe,EACfC,kBAAkB,QAGb,kBAAkB;AACzB,SAASC,mBAAmB,QAAQ,gBAAgB;AACpD,SAASC,OAAO,QAAoB,eAAe;AACnD,SAASC,OAAO,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,aAAa;AAmC1D,SAASC,OAAOC,IAAY,EAAEC,IAAa,EAAEC,QAAiB;IAC5D,OAAO;QACLC,MAAM;QACNC,SAAS;YACPJ;YACA,GAAIC,SAASI,YAAY,CAAC,IAAI;gBAAEJ;YAAK,CAAC;YACtC,GAAIC,aAAaG,YAAY,CAAC,IAAI;gBAAEH;YAAS,CAAC;QAChD;IACF;AACF;AAEA,SAASI,eAAeC,IAAe;IACrC,OAAOA,KAAKJ,IAAI,KAAK,eAAgBI,KAAKJ,IAAI,KAAK,UAAUI,KAAKC,EAAE,CAACL,IAAI,KAAK;AAChF;AAEA,SAASM,UACPC,KAAc,EACdC,IAAY,EACZC,EAAU,EACVC,KAAkC;IAElC,IAAIC,MAAMC,OAAO,CAACL,QAAQ;QACxB,MAAMM,OAAON,MAAMO,GAAG,CAAC,CAACC,OAAST,UAAUS,MAAMP,MAAMC,IAAIC,UAAUK;QACrE,OAAOF,KAAKG,IAAI,CAAC,CAACD,MAAME,QAAUF,SAASR,KAAK,CAACU,MAAM,IAAIJ,OAAOX;IACpE;IACA,IAAI,OAAOK,UAAU,UAAU,OAAOL;IACtC,MAAMgB,QAAQhC,OAAOsB,MAAMD;IAC3B,IAAIW,UAAU,MAAM,OAAOhB;IAC3B,MAAMiB,cAAcT,MAAMU,GAAG,CAACF,UAAUA;IACxC,OAAOhC,OAAOuB,IAAIF,WAAWY,cAAcjB,YAAYlB,SAASuB,OAAOZ,SAASc,IAAIU;AACtF;AAEA,SAASE,OAAOC,QAAkB,EAAEC,IAAY,EAAEC,OAA0B;IAC1E,IAAIX,OAAOS;IACX,KAAK,MAAMG,UAAUD,QAAS;QAC5B,IAAIC,OAAOF,IAAI,KAAKA,MAAM;QAC1B,IAAIE,OAAOzB,IAAI,KAAK,aAAayB,OAAOzB,IAAI,KAAK,YAAY;QAC7D,MAAM0B,UAAU7C,MACdgC,MACAY,OAAOzB,IAAI,KAAK,aACZ;YAAEA,MAAM;YAAYO,OAAOkB,OAAOlB,KAAK;YAAEoB,OAAOd,KAAKe,QAAQ;QAAC,IAC9D;YACE5B,MAAM;YACN6B,MAAMJ,OAAOI,IAAI;YACjBtB,OAAOkB,OAAOlB,KAAK;YACnBoB,OAAOd,KAAKiB,QAAQ,CAACL,OAAOI,IAAI,CAAC;QACnC;QAEN,IAAIH,QAAQK,OAAO,KAAK,WAAWlB,OAAOa,QAAQJ,QAAQ;IAC5D;IACA,OAAOT;AACT;AAEA,SAASmB,OAAOT,IAAY,EAAEU,MAAgB,EAAEC,KAAe;IAC7D,MAAMV,UAAoB,EAAE;IAC5B,IAAIU,MAAMN,QAAQ,KAAKK,OAAOL,QAAQ,EAAE;QACtCJ,QAAQW,IAAI,CAAC;YAAEnC,MAAM;YAAYuB;YAAMhB,OAAO2B,MAAMN,QAAQ;QAAC;IAC/D;IACA,KAAK,MAAM,CAACC,MAAMtB,MAAM,IAAI6B,OAAOC,OAAO,CAACH,MAAMJ,QAAQ,EAAG;QAC1D,IAAIG,OAAOH,QAAQ,CAACD,KAAK,KAAKtB,OAAO;QACrCiB,QAAQW,IAAI,CAAC;YAAEnC,MAAM;YAAWuB;YAAMM;YAAMtB;QAAM;IACpD;IACA,OAAOiB;AACT;AAEA,SAASc,QACPf,IAAY,EACZgB,KAAa,EACbN,MAAgB,EAChBvB,KAAkC;IAElC,IAAIwB,QAAQD;IACZ,KAAK,MAAMO,QAAQ1D,MAAMmD,QAAQV,MAAO;QACtC,MAAMJ,cAAcT,MAAMU,GAAG,CAACoB,KAAKtD,MAAM,KAAKsD,KAAKtD,MAAM;QACzD,IAAIiC,gBAAgBqB,KAAKtD,MAAM,IAAIqD,UAAUhB,MAAM;QACnD,MAAMd,KAAKd,SAAS4C,OAAOpB;QAC3B,IAAIV,OAAOd,SAAS4B,MAAMiB,KAAKtD,MAAM,GAAG;QACxC,MAAMwC,UAAU7C,MAAMqD,OAAO;YAAElC,MAAM;YAAQyC,MAAMD,KAAKC,IAAI;YAAEhC;QAAG;QACjE,IAAIiB,QAAQK,OAAO,KAAK,UAAU;YAChC,OAAO;gBACL/B,MAAM;gBACNC,SAAS;oBACPJ,MAAM6B,QAAQzB,OAAO,CAACJ,IAAI;oBAC1BC,MAAMyB;oBACN,GAAIG,QAAQzB,OAAO,CAACF,QAAQ,KAAKG,YAAY,CAAC,IAAI;wBAAEH,UAAU2B,QAAQzB,OAAO,CAACF,QAAQ;oBAAC,CAAC;gBAC1F;YACF;QACF;QACAmC,QAAQR,QAAQJ,QAAQ;IAC1B;IACA,IAAIY,UAAUD,QAAQ,OAAO;QAAEjC,MAAM;QAAWwB,SAAS,EAAE;IAAC;IAC5D,IAAIS,OAAOS,IAAI,KAAKxC,WAAW;QAC7B,OAAO;YAAEF,MAAM;YAAWwB,SAAS;gBAAC;oBAAExB,MAAM;oBAAWuB;oBAAMoB,SAAS1D,UAAUiD;gBAAO;aAAE;QAAC;IAC5F;IACA,OAAO;QAAElC,MAAM;QAAWwB,SAASQ,OAAOT,MAAMU,QAAQC;IAAO;AACjE;AAEA,SAASU,SAASC,MAAgB,EAAEtB,IAAY;IAC9C,IAAK,IAAIN,QAAQ4B,OAAOC,MAAM,GAAG,GAAG7B,SAAS,GAAGA,SAAS,EAAG;QAC1D,MAAMF,OAAO8B,MAAM,CAAC5B,MAAM;QAC1B,IAAIF,KAAKQ,IAAI,KAAKA,MAAM;QACxB,IAAIR,KAAKf,IAAI,KAAK,aAAae,KAAKf,IAAI,KAAK,YAAY6C,OAAOE,MAAM,CAAC9B,OAAO;IAChF;AACF;AAEA,SAAS+B,SAASxB,OAA0B,EAAEyB,OAAqB;IACjE,MAAMvC,QAAQ,IAAIwC;IAClB,MAAMC,UAAU,IAAIC;IACpB,KAAK,MAAM3B,UAAUD,QAAS;QAC5B,IAAIC,OAAOzB,IAAI,KAAK,QAAQU,MAAM2C,GAAG,CAAC5B,OAAOF,IAAI,EAAEE,OAAOhB,EAAE;QAC5D,IAAIgB,OAAOzB,IAAI,KAAK,YAAYyB,OAAOzB,IAAI,KAAK,aAAayB,OAAOzB,IAAI,KAAK,UAAU;YACrFmD,QAAQG,GAAG,CAAC7B,OAAOF,IAAI;QACzB;QACA,IAAIE,OAAOzB,IAAI,KAAK,SAASmD,QAAQG,GAAG,CAAC,GAAG7B,OAAOF,IAAI,CAAC,CAAC,EAAEE,OAAOI,IAAI,EAAE;IAC1E;IACA,IAAInB,MAAM6C,IAAI,KAAK,GAAG,OAAO;QAAEvD,MAAM;QAAWwB;IAAQ;IACxD,MAAMqB,SAAS;WAAIrB;KAAQ;IAC3B,MAAMgC,QAAkB,EAAE;IAC1B,KAAK,MAAM,CAACjC,MAAMD,SAAS,IAAIc,OAAOC,OAAO,CAACY,QAAQQ,UAAU,CAACC,SAAS,EAAG;QAC3E,IAAIP,QAAQQ,GAAG,CAACpC,OAAO;QACvB,MAAMgB,QAAQ7B,MAAMU,GAAG,CAACG,SAASA;QACjC,MAAMqC,aAAahF,aAAaQ,UAAU6D,QAAQQ,UAAU,CAACI,WAAW,EAAEtC,OAAOD,SAASoB,IAAI;QAC9F,KAAK,MAAM,CAACb,MAAMzB,KAAK,IAAIgC,OAAOC,OAAO,CAACuB,YAAYE,UAAU,CAAC,GAAI;YACnE,IAAI,CAAC3D,eAAeC,SAAS+C,QAAQQ,GAAG,CAAC,GAAGpC,KAAK,CAAC,EAAEM,MAAM,GAAG;YAC7D,MAAMtB,QAAQD,UAAUgB,SAASwC,MAAM,CAACjC,KAAK,EAAEN,MAAMgB,OAAO7B;YAC5D,IAAIH,UAAUL,WAAW;YACzBsD,MAAMrB,IAAI,CAAC;gBAAEnC,MAAM;gBAASuB;gBAAMM;gBAAMtB;YAAM;QAChD;QACA,MAAMwD,WAAWzB,QAAQf,MAAMgB,OAAOlB,OAAOC,UAAUC,MAAMsB,SAASnC;QACtE,IAAIqD,SAAS/D,IAAI,KAAK,WAAW,OAAO+D;QACxC,KAAK,MAAMtC,UAAUsC,SAASvC,OAAO,CAAE;YACrC,IAAIC,OAAOzB,IAAI,KAAK,WAAW;gBAC7B4C,SAASC,QAAQtB;gBACjBiC,MAAMrB,IAAI,CAACV;gBACX;YACF;YACA,MAAMR,QAAQ4B,OAAOmB,SAAS,CAC5B,CAACjD,OACCA,KAAKf,IAAI,KAAKyB,OAAOzB,IAAI,IACzBe,KAAKQ,IAAI,KAAKA,QACbE,CAAAA,OAAOzB,IAAI,KAAK,aAAce,KAAKf,IAAI,KAAK,aAAae,KAAKc,IAAI,KAAKJ,OAAOI,IAAI;YAEvF,IAAIZ,UAAU,CAAC,GAAGuC,MAAMrB,IAAI,CAACV;iBACxBoB,MAAM,CAAC5B,MAAM,GAAGQ;QACvB;IACF;IACA,OAAO;QAAEzB,MAAM;QAAWwB,SAAS;eAAIgC;eAAUX;SAAO;IAAC;AAC3D;AAEA,SAASoB,YACPzC,OAA0B,EAC1B0C,aAAsC,EACtCC,SAA4B,EAC5BlB,OAAqB;IAErB,MAAMmB,UAAUD,UAAUE,MAAM,CAAC,CAAC5C,SAAW,CAACD,QAAQ8C,QAAQ,CAAC7C;IAC/D,OAAO;QACLD,SAAS2C;QACTD,eAAe;eAAIK,gBAAgBH,SAASnB,SAAS,EAAE;eAAMiB;SAAc;IAC7E;AACF;AAEA,OAAO,SAASM,kBAAkBC,KAAkB,EAAExB,OAAqB;IACzE,MAAMkB,YAAYnB,SAASyB,MAAMjD,OAAO,EAAEyB;IAC1C,IAAIkB,UAAUnE,IAAI,KAAK,WAAW,OAAOyE;IACzC,OAAO;QACL,GAAGA,KAAK;QACR,GAAGR,YAAYQ,MAAMjD,OAAO,EAAEiD,MAAMP,aAAa,EAAEC,UAAU3C,OAAO,EAAEyB,QAAQ;IAChF;AACF;AAEA,SAASyB,QAAQnE,KAAc,EAAEC,IAAY;IAC3C,MAAMmE,SAAShE,MAAMC,OAAO,CAACL,SAASA,QAAQ;QAACA;KAAM;IACrD,MAAMqE,WAAqB,EAAE;IAC7B,KAAK,MAAM7D,QAAQ4D,OAAQ;QACzB,IAAI,OAAO5D,SAAS,UAAU;QAC9B,MAAMG,QAAQhC,OAAOsB,MAAMO;QAC3B,IAAIG,UAAU,MAAM0D,SAASzC,IAAI,CAACjB;IACpC;IACA,OAAO0D;AACT;AAEA,SAASC,SAASpB,UAAsB,EAAEqB,OAA4B;IACpE,MAAMC,QAAQ,IAAI7B;IAClB,MAAM8B,OAAO,CAAC9F,QAAgBY;QAC5B,IAAI,CAACgF,QAAQnB,GAAG,CAACzE,SAAS;QAC1B,MAAM+F,YAAYF,MAAM3D,GAAG,CAAClC,WAAW,IAAIkE;QAC3C6B,UAAU3B,GAAG,CAACxD;QACdiF,MAAM1B,GAAG,CAACnE,QAAQ+F;IACpB;IACA,KAAK,MAAM,CAAC1D,MAAMD,SAAS,IAAIc,OAAOC,OAAO,CAACoB,WAAWC,SAAS,EAAG;QACnE,MAAME,aAAahF,aAAaQ,UAAUqE,WAAWI,WAAW,EAAEtC,OAAOD,SAASoB,IAAI;QACtF,KAAK,MAAM,CAACb,MAAMzB,KAAK,IAAIgC,OAAOC,OAAO,CAACuB,YAAYE,UAAU,CAAC,GAAI;YACnE,IAAI,CAAC3D,eAAeC,OAAO;YAC3B,KAAK,MAAMc,SAASwD,QAAQpD,SAASwC,MAAM,CAACjC,KAAK,EAAEN,MAAOyD,KAAK9D,OAAOK;QACxE;QACA,KAAK,MAAMiB,QAAQ1D,MAAMwC,UAAUC,MAAOyD,KAAKxC,KAAKtD,MAAM,EAAEqC;IAC9D;IACA,MAAM,CAAC2D,MAAM,GAAG;WAAIH,MAAMI,IAAI;KAAG,CAACC,IAAI;IACtC,IAAIF,UAAUhF,WAAW,OAAO;IAChC,MAAMmF,QAAQ,IAAIjC;IAClB,KAAK,MAAM6B,aAAaF,MAAMJ,MAAM,GAAI,KAAK,MAAM7E,QAAQmF,UAAWI,MAAM/B,GAAG,CAACxD;IAChF,OAAO;QACLE,MAAM;QACNC,SAAS;YAAEJ,MAAM;YAA2BC,MAAMoF;YAAOD,WAAW;mBAAII;aAAM,CAACD,IAAI;QAAG;IACxF;AACF;AAEA,SAASE,SAAS7D,MAAc;IAC9B,OAAOA,OAAOzB,IAAI,KAAK,SAAS;QAACyB,OAAOF,IAAI;QAAEE,OAAOhB,EAAE;KAAC,GAAG;QAACgB,OAAOF,IAAI;KAAC;AAC1E;AAEA,SAASgE,MAAM/D,OAA0B,EAAEgE,KAAgB;IACzD,MAAMC,WAAW,IAAIrC,IAAI;WACpBhB,OAAO+C,IAAI,CAACK,MAAMvC,OAAO,CAACS,SAAS;WACnC8B,MAAMvC,OAAO,CAACyC,aAAa;KAC/B;IACD,KAAK,MAAMjE,UAAUD,QAAS;QAC5B,KAAK,MAAMD,QAAQ+D,SAAS7D,QAAS;YACnC,MAAMkE,aAAajG,UAAU6B;YAC7B,IAAIoE,eAAe,QAAQA,eAAe,IAAI,OAAO/F,OAAO,aAAa2B;YACzE,IAAI9B,QAAQ+F,MAAMI,kBAAkB,EAAED,aAAa;gBACjD,OAAO/F,OAAO,uBAAuB+F;YACvC;YACA,MAAME,YAAYpE,OAAOzB,IAAI,KAAK,WAAW,WAAW;YACxD,IAAI,CAACP,QAAQ+F,MAAMM,UAAU,CAACD,UAAU,EAAEF,aACxC,OAAO/F,OAAO,GAAGiG,UAAU,MAAM,CAAC,EAAEF;QACxC;QACA,IAAIlE,OAAOzB,IAAI,KAAK,UAAU;YAC5B,IAAIyF,SAAS9B,GAAG,CAAClC,OAAOF,IAAI,GAAG,OAAO3B,OAAO,kBAAkB6B,OAAOF,IAAI;YAC1EkE,SAASnC,GAAG,CAAC7B,OAAOF,IAAI;YACxB;QACF;QACA,IAAIE,OAAOzB,IAAI,KAAK,QAAQ;YAC1B,IAAI,CAACyF,SAAS9B,GAAG,CAAClC,OAAOF,IAAI,GAAG,OAAO3B,OAAO,eAAe6B,OAAOF,IAAI;YACxE,IAAIkE,SAAS9B,GAAG,CAAClC,OAAOhB,EAAE,GAAG,OAAOb,OAAO,kBAAkB6B,OAAOhB,EAAE;YACtEgF,SAASM,MAAM,CAACtE,OAAOF,IAAI;YAC3BkE,SAASnC,GAAG,CAAC7B,OAAOhB,EAAE;YACtB;QACF;QACA,IAAI,CAACgF,SAAS9B,GAAG,CAAClC,OAAOF,IAAI,GAAG,OAAO3B,OAAO,eAAe6B,OAAOF,IAAI;QACxE,IAAIE,OAAOzB,IAAI,KAAK,UAAU;YAC5ByF,SAASM,MAAM,CAACtE,OAAOF,IAAI;YAC3B;QACF;QACA,IAAIE,OAAOzB,IAAI,KAAK,WAAW;YAC7B,IAAIwF,MAAMvC,OAAO,CAAC+C,SAAS,CAACvE,OAAOF,IAAI,CAAC,KAAKrB,WAAW;gBACtD,OAAON,OAAO,oBAAoB6B,OAAOF,IAAI;YAC/C;YACA;QACF;QACA,IAAIiE,MAAMvC,OAAO,CAACQ,UAAU,CAACC,SAAS,CAACjC,OAAOF,IAAI,CAAC,KAAKrB,WAAW;YACjE,OAAON,OAAO,eAAe6B,OAAOF,IAAI;QAC1C;IACF;IACA,OAAO;AACT;AAEA,SAAS0E,UAAUhD,OAAqB,EAAE1B,IAAY;IACpD,MAAM2E,WAAWjD,QAAQ+C,SAAS,CAACzE,KAAK;IACxC,OAAO2E,aAAahG,YAAY;QAAEF,MAAM;QAAWuB;IAAK,IAAI;QAAEvB,MAAM;QAAYuB;QAAM2E;IAAS;AACjG;AAEA,SAASC,WAAWC,YAA0B,EAAE3E,MAAc;IAC5D,IAAI2E,aAAapG,IAAI,KAAKyB,OAAOzB,IAAI,IAAIoG,aAAa7E,IAAI,KAAKE,OAAOF,IAAI,EAAE,OAAO;IACnF,OACE,AAAC6E,aAAapG,IAAI,KAAK,WAAWoG,aAAapG,IAAI,KAAK,aACvD,AAACyB,CAAAA,OAAOzB,IAAI,KAAK,WAAWyB,OAAOzB,IAAI,KAAK,SAAQ,KAAMoG,aAAavE,IAAI,KAAKJ,OAAOI,IAAI;AAEhG;AAEA,SAAS0C,gBACP/C,OAA0B,EAC1ByB,OAAqB,EACrBoD,KAA8B;IAE9B,MAAMnC,gBAAgC,EAAE;IACxC,MAAMoC,OAAO,IAAIlD;IACjB,MAAME,MAAM,CAAC8C;QACX,MAAMG,OACJH,aAAapG,IAAI,KAAK,WAAWoG,aAAapG,IAAI,KAAK,YAAYoG,aAAavE,IAAI,GAAG;QACzF,MAAM2E,WAAW,GAAGJ,aAAapG,IAAI,CAAC,CAAC,EAAEoG,aAAa7E,IAAI,CAAC,CAAC,EAAEgF,MAAM;QACpE,IAAID,KAAK3C,GAAG,CAAC6C,WAAW;QACxBF,KAAKhD,GAAG,CAACkD;QACTtC,cAAc/B,IAAI,CAACiE;IACrB;IACA,KAAK,MAAM3E,UAAUD,QAAS;QAC5B,IAAIC,OAAOzB,IAAI,KAAK,WAAWyB,OAAOzB,IAAI,KAAK,aAAayB,OAAOzB,IAAI,KAAK,YAAY;YACtF,MAAMyG,QAAQJ,MAAMK,IAAI,CAAC,CAACC,OAASR,WAAWQ,MAAMlF;YACpD,IAAIgF,UAAUvG,WAAW;gBACvBoD,IAAImD;gBACJ;YACF;YACA,MAAMnF,WAAW2B,QAAQQ,UAAU,CAACC,SAAS,CAACjC,OAAOF,IAAI,CAAC;YAC1D,IAAIE,OAAOzB,IAAI,KAAK,SAAS;gBAC3BsD,IAAI;oBACFtD,MAAM;oBACNuB,MAAME,OAAOF,IAAI;oBACjBM,MAAMJ,OAAOI,IAAI;oBACjBtB,OAAOe,SAASwC,MAAM,CAACrC,OAAOI,IAAI,CAAC;gBACrC;YACF,OAAO,IAAIJ,OAAOzB,IAAI,KAAK,WAAW;gBACpCsD,IAAI;oBACFtD,MAAM;oBACNuB,MAAME,OAAOF,IAAI;oBACjBM,MAAMJ,OAAOI,IAAI;oBACjBtB,OAAOe,SAASQ,QAAQ,CAACL,OAAOI,IAAI,CAAC;gBACvC;YACF,OAAOyB,IAAI;gBAAEtD,MAAM;gBAAYuB,MAAME,OAAOF,IAAI;gBAAEhB,OAAOe,SAASM,QAAQ;YAAC;YAC3E;QACF;QACA,IAAIH,OAAOzB,IAAI,KAAK,UAAU;YAC5BsD,IAAI;gBAAEtD,MAAM;gBAAUuB,MAAME,OAAOF,IAAI;YAAC;YACxC;QACF;QACA+B,IAAI2C,UAAUhD,SAASxB,OAAOF,IAAI;QAClC,IAAIE,OAAOzB,IAAI,KAAK,QAAQsD,IAAI;YAAEtD,MAAM;YAAUuB,MAAME,OAAOhB,EAAE;QAAC;IACpE;IACA,OAAOyD;AACT;AAEA,SAAS0C,MAAMrF,IAAY;IACzB,OAAOA,KAAKsF,KAAK,CAAC,KAAK/D,MAAM;AAC/B;AAEA,SAASgE,SACPC,MAAgC,EAChCvF,OAA0B,EAC1BwF,SAAgB;IAEhB,MAAMC,UAAUzF,QAAQV,GAAG,CAAC,CAACW,SAAYA,OAAOzB,IAAI,KAAK,SAASyB,OAAOhB,EAAE,GAAGgB,OAAOF,IAAI;IACzF,MAAM2F,UAAU1F,QACb6C,MAAM,CAAC,CAAC5C,SAAWA,OAAOzB,IAAI,KAAK,YAAYyB,OAAOzB,IAAI,KAAK,QAC/Dc,GAAG,CAAC,CAACW,SAAYA,OAAOzB,IAAI,KAAK,SAASyB,OAAOhB,EAAE,GAAGgB,OAAOF,IAAI;IACpE,KAAK,MAAM4F,SAASJ,OAAQ;QAC1B,MAAMxG,QAAQ4G,MAAM5G,KAAK;QACzB,IAAI,OAAOA,UAAU,UAAU;QAC/B,IAAI4G,MAAMtF,IAAI,KAAK,6BAA6BL,QAAQsB,MAAM,GAAGvC,OAAO;YACtE,OAAOX,OAAO,kBAAkBM,WAAWiH,MAAMtF,IAAI;QACvD;QACA,IAAIsF,MAAMtF,IAAI,KAAK,iBAAiB;YAClC,MAAMuF,QAAQH,QAAQP,IAAI,CAAC,CAACnF,OAAS,AAACyF,CAAAA,UAAUtD,SAAS,CAACnC,KAAK,IAAI,EAAC,EAAGuB,MAAM,GAAGvC;YAChF,IAAI6G,UAAUlH,WAAW,OAAON,OAAO,kBAAkBwH,OAAOD,MAAMtF,IAAI;QAC5E;QACA,IAAIsF,MAAMtF,IAAI,KAAK,eAAe;YAChC,MAAMwF,OAAOH,QAAQR,IAAI,CAAC,CAACnF,OAASA,KAAKuB,MAAM,GAAGvC;YAClD,IAAI8G,SAASnH,WAAW,OAAON,OAAO,kBAAkByH,MAAMF,MAAMtF,IAAI;QAC1E;QACA,IAAIsF,MAAMtF,IAAI,KAAK,cAAc;YAC/B,MAAMyF,OAAOJ,QAAQR,IAAI,CAAC,CAACnF,OAASqF,MAAMrF,QAAQhB;YAClD,IAAI+G,SAASpH,WAAW,OAAON,OAAO,kBAAkB0H,MAAMH,MAAMtF,IAAI;QAC1E;IACF;IACA,OAAO;AACT;AAEA,OAAO,SAAS0F,WAAW/B,KAAgB;IACzC,MAAMgC,aAAahC,MAAMhE,OAAO,CAACkF,IAAI,CACnC,CAACjF,SAAWA,OAAOzB,IAAI,KAAK,UAAUyB,OAAOzB,IAAI,KAAK;IAExD,IACEwH,eAAetH,aACfkC,OAAOC,OAAO,CAACmD,MAAMvC,OAAO,CAACQ,UAAU,CAACC,SAAS,EAAE1C,IAAI,CACrD,CAAC,CAACO,MAAMD,SAAS,GACfA,SAASoB,IAAI,KAAKxC,aAClBoB,SAASoB,IAAI,KAAK,SAClBtD,UAAUoG,MAAM3B,WAAW,EAAEtC,MAAMkG,MAAM,KAAK,gBAGlD,OAAO7H,OAAO,qBAAqB4H,WAAWjG,IAAI;IACpD,IAAIiE,MAAMhE,OAAO,CAACsB,MAAM,KAAK,GAAG,OAAOlD,OAAO;IAC9C,MAAMuE,YAAYnB,SAASwC,MAAMhE,OAAO,EAAEgE,MAAMvC,OAAO;IACvD,IAAIkB,UAAUnE,IAAI,KAAK,WAAW,OAAOmE;IACzC,MAAM3C,UAAUgE,MAAMkC,SAAS,KAAK,aAAalC,MAAMhE,OAAO,GAAG2C,UAAU3C,OAAO;IAClF,MAAMvB,UAAUsF,MAAM/D,SAASgE;IAC/B,IAAIvF,YAAY,MAAM,OAAOA;IAC7B,MAAMiE,gBAAgBK,gBAAgB/C,SAASgE,MAAMvC,OAAO,EAAEuC,MAAMa,KAAK;IACzE,MAAMsB,YACJnC,MAAMkC,SAAS,KAAK,aAChBzD,YAAYzC,SAAS0C,eAAeC,UAAU3C,OAAO,EAAEgE,MAAMvC,OAAO,IACpE;QAAEzB;QAAS0C;IAAc;IAC/B,MAAM8C,YAAYxH,QAAQgG,MAAMvC,OAAO,EAAE;QACvC;YAAE2E,IAAI;YAAIC,iBAAiBrC,MAAMqC,eAAe;YAAE,GAAGF,SAAS;QAAC;KAChE;IACD,MAAM7C,UAAU,IAAI1B,IAClB5B,QAAQ6C,MAAM,CAAC,CAAC5C,SAAWA,OAAOzB,IAAI,KAAK,UAAUc,GAAG,CAAC,CAACW,SAAWA,OAAOF,IAAI;IAElF,IAAIuD,QAAQvB,IAAI,GAAG,GAAG;QACpB,MAAMuE,aAAajD,SAASxF,gBAAgB2H,UAAUtD,SAAS,EAAE8B,MAAM3B,WAAW,GAAGiB;QACrF,IAAIgD,eAAe,MAAM,OAAOA;IAClC;IACA,MAAMC,QAAQ,CAACpF;QACb,IAAIA,YAAYzC,WAAW,OAAO;QAClC,MAAM8H,SAASjJ,MAAM4D;QACrB,OAAOqF,OAAOC,EAAE,IAAID,OAAO1G,QAAQ,CAACoB,IAAI,KAAKxC,aAAa8H,OAAO1G,QAAQ,CAACoB,IAAI,KAAK;IACrF;IACA,MAAMwF,aAAa;WAAI,IAAI9E,IAAIuE,UAAUnG,OAAO,CAAC2G,OAAO,CAAC7C;KAAW,CAACjB,MAAM,CACzE,CAAC9C,OAASwG,MAAMvC,MAAMvC,OAAO,CAACS,SAAS,CAACnC,KAAK,KAAKwG,MAAMf,UAAUtD,SAAS,CAACnC,KAAK;IAEnF,MAAM6G,aAAaF,WAAWpF,MAAM,GAAG;IACvC,MAAMuF,eAAeH,WAAWxB,IAAI,CAClC,CAACnF,OAASnC,UAAUoG,MAAM3B,WAAW,EAAEtC,MAAMkG,MAAM,KAAK;IAE1D,IAAIY,iBAAiBnI,WAAW,OAAON,OAAO,qBAAqByI;IACnE,MAAMC,iBAAiBF,aACnBpB,UAAUtD,SAAS,GACnBtB,OAAOmG,WAAW,CAChBnG,OAAOC,OAAO,CAAC2E,UAAUtD,SAAS,EAAEW,MAAM,CAAC,CAAC,CAAC9C,KAAK,GAChDoG,UAAUnG,OAAO,CAACR,IAAI,CAAC,CAACS,SAAW6D,SAAS7D,QAAQ6C,QAAQ,CAAC/C;IAGrE,MAAMiH,UAAUlJ,mBAAmBgJ,gBAAgBtB,UAAUtB,aAAa,EAAEF,MAAM3B,WAAW;IAC7F,IAAI2E,QAAQA,OAAO,KAAK,UAAU;QAChC,OAAO;YACLxI,MAAM;YACNC,SAAS;gBACPJ,MAAM2I,QAAQ3I,IAAI;gBAClBC,MAAM0I,QAAQ1I,IAAI;gBAClB,GAAI0I,QAAQzI,QAAQ,KAAKG,YAAY,CAAC,IAAI;oBAAEH,UAAUyI,QAAQzI,QAAQ;gBAAC,CAAC;gBACxE,GAAIyI,QAAQvD,SAAS,KAAK/E,YAAY,CAAC,IAAI;oBAAE+E,WAAWuD,QAAQvD,SAAS;gBAAC,CAAC;YAC7E;QACF;IACF;IACA,MAAMwD,UAAU3B,SAAStB,MAAMkD,cAAc,EAAElH,SAASwF;IACxD,IAAIyB,YAAY,MAAM,OAAOA;IAC7B,MAAME,YAAYT,WACfpH,GAAG,CAAC,CAACS,OAASnC,UAAUoG,MAAM3B,WAAW,EAAEtC,OAC3CmF,IAAI,CACH,CAACkC,QACCA,MAAMnB,MAAM,KAAK;IAEvB,OAAO;QACLzH,MAAM;QACNyE,OAAOtF,UAAU;YACfyI,IAAIrI;YACJsI,iBAAiBrC,MAAMqC,eAAe;YACtCrG;YACA0C;YACA,GAAIsB,MAAMqD,SAAS,KAAK3I,YAAY,CAAC,IAAI;gBAAE2I,WAAWrD,MAAMqD,SAAS;YAAC,CAAC;YACvE,GAAIF,cAAczI,YACd,CAAC,IACD;gBACE4I,YAAY;oBACVtC,UAAUmC,UAAUI,QAAQ,CAACvC,QAAQ;oBACrCwC,SAASL,UAAUI,QAAQ,CAACC,OAAO;oBACnCC,QAAQN,UAAUlB,MAAM;gBAC1B;YACF,CAAC;QACP;IACF;AACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentshouse/mdruntime",
3
- "version": "0.1.0-alpha.27",
3
+ "version": "0.1.0-alpha.28",
4
4
  "description": "The headless core of MD App",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -45,7 +45,7 @@
45
45
  "url": "https://github.com/agentshouse/mdruntime/issues"
46
46
  },
47
47
  "dependencies": {
48
- "@agentshouse/mdmodel": "0.1.0-alpha.14",
48
+ "@agentshouse/mdmodel": "0.1.0-alpha.15",
49
49
  "@tanstack/db": "0.9.2",
50
50
  "minisearch": "7.2.0"
51
51
  }