@cello-protocol/daemon 0.0.151 → 0.0.153
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/dist/agent-handlers.d.ts.map +1 -1
- package/dist/agent-handlers.js +10 -1
- package/dist/agent-handlers.js.map +1 -1
- package/dist/consortium-bootstrap.d.ts +20 -0
- package/dist/consortium-bootstrap.d.ts.map +1 -1
- package/dist/consortium-bootstrap.js +18 -7
- package/dist/consortium-bootstrap.js.map +1 -1
- package/dist/daemon.js +15 -1
- package/dist/daemon.js.map +1 -1
- package/dist/document-handlers.d.ts.map +1 -1
- package/dist/document-handlers.js +89 -20
- package/dist/document-handlers.js.map +1 -1
- package/dist/document-json.d.ts +97 -0
- package/dist/document-json.d.ts.map +1 -0
- package/dist/document-json.js +124 -0
- package/dist/document-json.js.map +1 -0
- package/dist/document-notify.d.ts +9 -2
- package/dist/document-notify.d.ts.map +1 -1
- package/dist/document-notify.js +13 -3
- package/dist/document-notify.js.map +1 -1
- package/dist/document-types.d.ts +94 -0
- package/dist/document-types.d.ts.map +1 -0
- package/dist/document-types.js +90 -0
- package/dist/document-types.js.map +1 -0
- package/dist/document-write-path.d.ts +6 -11
- package/dist/document-write-path.d.ts.map +1 -1
- package/dist/document-write-path.js +110 -43
- package/dist/document-write-path.js.map +1 -1
- package/package.json +2 -2
package/dist/document-notify.js
CHANGED
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
* wrong is worse than no diff, because the agent cannot tell.
|
|
33
33
|
*/
|
|
34
34
|
import { lineRuns, toChunks } from "./line-lcs.js";
|
|
35
|
+
import { diffableDocumentTypes, rootForDocumentType } from "./document-types.js";
|
|
35
36
|
const CREATE_NOTICES_SQL = `
|
|
36
37
|
CREATE TABLE IF NOT EXISTS document_notices (
|
|
37
38
|
agent_id TEXT NOT NULL,
|
|
@@ -74,7 +75,14 @@ const CREATE_READ_MARKS_SQL = `
|
|
|
74
75
|
/** Born on an existing table. See `PEER_DECISION_COLUMNS` in document-handshake.ts for the pattern. */
|
|
75
76
|
const READ_MARK_COLUMNS = ["ALTER TABLE document_read_marks ADD COLUMN my_text TEXT"];
|
|
76
77
|
/** Types `diff` can render. Decided in-unit; see the header for why the list is closed. */
|
|
77
|
-
|
|
78
|
+
/**
|
|
79
|
+
* The types `cello_doc_diff` renders — DERIVED from the one registry, never listed here.
|
|
80
|
+
*
|
|
81
|
+
* This was a hardcoded `["markdown", "text", "json"]` sitting in parallel with the write path's
|
|
82
|
+
* admitted set, and the two had drifted: `plaintext` was admitted and could not be diffed, so the
|
|
83
|
+
* verb that says what changed was dead on a type the product offered.
|
|
84
|
+
*/
|
|
85
|
+
export const DIFFABLE_DOCUMENT_TYPES = diffableDocumentTypes();
|
|
78
86
|
export class DocumentNotifications {
|
|
79
87
|
#store;
|
|
80
88
|
#logger;
|
|
@@ -298,7 +306,9 @@ export class DocumentNotifications {
|
|
|
298
306
|
// "not computed" — the same absent-is-not-fine trap as the overlap default above.
|
|
299
307
|
let keyPaths = [];
|
|
300
308
|
let keyPathsComputed = false;
|
|
301
|
-
|
|
309
|
+
// Dispatched on the ROOT, not the type name — a second map-root type must not fall through to
|
|
310
|
+
// the line path just because it is not called "json".
|
|
311
|
+
if (documentType !== undefined && rootForDocumentType(documentType) === "map") {
|
|
302
312
|
const paths = changedKeyPaths(before, after);
|
|
303
313
|
if (paths !== null) {
|
|
304
314
|
keyPaths = paths;
|
|
@@ -348,7 +358,7 @@ export class DocumentNotifications {
|
|
|
348
358
|
};
|
|
349
359
|
}
|
|
350
360
|
void documentId;
|
|
351
|
-
if (documentType === "
|
|
361
|
+
if (rootForDocumentType(documentType) === "map") {
|
|
352
362
|
// A key-path diff, not a line diff. Re-serialized JSON changes shape whenever a formatter
|
|
353
363
|
// touches it, so a line diff reports the entire document as rewritten for a change of one
|
|
354
364
|
// value — which is the false "everything changed" alarm that makes an agent stop reading
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-notify.js","sourceRoot":"","sources":["../src/document-notify.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"document-notify.js","sourceRoot":"","sources":["../src/document-notify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOD-DOC-TYPES-1 — the single registry of document types.
|
|
3
|
+
*
|
|
4
|
+
* ── WHY THIS FILE EXISTS ─────────────────────────────────────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* The type list was kept in two places that had no link to each other:
|
|
7
|
+
*
|
|
8
|
+
* `SUPPORTED_DOCUMENT_TYPES` (document-write-path) = markdown, text, plaintext
|
|
9
|
+
* `DIFFABLE_DOCUMENT_TYPES` (document-notify) = markdown, text, json
|
|
10
|
+
*
|
|
11
|
+
* They had already drifted. **`plaintext` was admitted and could not be diffed** — an operator could
|
|
12
|
+
* propose a `plaintext` document, have it accepted, edit it with a peer, and get *"this build renders
|
|
13
|
+
* diffs for markdown, text, json"* from `cello_doc_diff`. The verb that says what changed was dead
|
|
14
|
+
* on a type the product offered them.
|
|
15
|
+
*
|
|
16
|
+
* Neither list was wrong by itself; the defect was that there were two, so adding a type meant
|
|
17
|
+
* remembering a second file. With three more types queued that is a step that gets forgotten, so the
|
|
18
|
+
* properties became COLUMNS on one row and every list is derived.
|
|
19
|
+
*
|
|
20
|
+
* This module deliberately imports nothing. Both `document-write-path` and `document-notify` read
|
|
21
|
+
* it, and a registry that pulled in either of them would be a cycle.
|
|
22
|
+
*/
|
|
23
|
+
/** Which Yjs root a type's content lives in. `text` merges by line; `map` merges per key. */
|
|
24
|
+
export type DocumentRoot = "text" | "map";
|
|
25
|
+
export interface DocumentTypeRow {
|
|
26
|
+
/** The root the content projects from — this decides which merge strategy applies. */
|
|
27
|
+
readonly root: DocumentRoot;
|
|
28
|
+
/** The file extension it materializes as. The file IS the editing surface, so this is load-bearing. */
|
|
29
|
+
readonly extension: string;
|
|
30
|
+
/**
|
|
31
|
+
* Whether `propose`/`accept` may admit it.
|
|
32
|
+
*
|
|
33
|
+
* Every type here is admitted today. The flag exists because `json` was NOT, for a real reason
|
|
34
|
+
* worth keeping: the write path served it (map root) while read/write/diff assumed the text root,
|
|
35
|
+
* so it read as empty, wrote into a root nothing projects, and diffed as unchanged forever. A type
|
|
36
|
+
* only some verbs can serve is worse than an absent one — it reads as done and loses content in
|
|
37
|
+
* silence. The flag is how the next half-built type gets refused instead of shipped.
|
|
38
|
+
*/
|
|
39
|
+
readonly admitted: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Opening this file runs its contents.
|
|
42
|
+
*
|
|
43
|
+
* True for `html`: double-clicking a document a peer co-authored executes their script with a
|
|
44
|
+
* `file://` origin. It is NOT a reason to refuse the type or to strip tags — `<script>` is
|
|
45
|
+
* legitimate content in an HTML document, and refusing it is the "a document about prompt formats
|
|
46
|
+
* loses its subject" mistake from the screening audit. It is a reason to tell the operator plainly
|
|
47
|
+
* at the moment they are handed the path, which is generated from this flag rather than from an
|
|
48
|
+
* `if (type === "html")` the next executable type would not match.
|
|
49
|
+
*/
|
|
50
|
+
readonly executableWhenOpened?: boolean;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Every document type this build knows.
|
|
54
|
+
*
|
|
55
|
+
* `plaintext` and `text` share ONE row object by identity, not two equal rows — an alias cannot
|
|
56
|
+
* drift from what it aliases if there is nothing to drift from.
|
|
57
|
+
*/
|
|
58
|
+
export declare const DOCUMENT_TYPES: ReadonlyMap<string, DocumentTypeRow>;
|
|
59
|
+
/** The row for a type, or `undefined` for one this build does not know. */
|
|
60
|
+
export declare function documentTypeRow(documentType: string): DocumentTypeRow | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* The extension for a type, or `undefined` for an unknown one.
|
|
63
|
+
*
|
|
64
|
+
* Undefined rather than a default: a type nothing can serve must not be handed a plausible-looking
|
|
65
|
+
* path. The silent `: "md"` default is what let `yaml` create a real signed peer-accepted document
|
|
66
|
+
* with no file and no explanation.
|
|
67
|
+
*/
|
|
68
|
+
export declare function extensionForDocumentType(documentType: string): string | undefined;
|
|
69
|
+
/** Whether `propose`/`accept` may admit this type. */
|
|
70
|
+
export declare function isSupportedDocumentType(documentType: string): boolean;
|
|
71
|
+
/** The admitted types, sorted — the set a refusal message names. */
|
|
72
|
+
export declare function admittedDocumentTypes(): readonly string[];
|
|
73
|
+
/**
|
|
74
|
+
* The types `cello_doc_diff` can render.
|
|
75
|
+
*
|
|
76
|
+
* EVERY known type is diffable — a text root diffs by line and a map root by key, and there is no
|
|
77
|
+
* third case. It is derived rather than listed because the listed version is what drifted out of
|
|
78
|
+
* agreement with the admitted set and killed `plaintext`'s diff.
|
|
79
|
+
*/
|
|
80
|
+
export declare function diffableDocumentTypes(): readonly string[];
|
|
81
|
+
/**
|
|
82
|
+
* What the operator is told when handed the path to a document whose file RUNS when opened.
|
|
83
|
+
*
|
|
84
|
+
* Returns `undefined` for every other type on purpose: a notice attached to every document is a
|
|
85
|
+
* notice on none. Keyed on the row's flag rather than on the type name, so the next executable type
|
|
86
|
+
* inherits it by setting the flag instead of by being remembered here.
|
|
87
|
+
*
|
|
88
|
+
* The wording states the consequence rather than the mechanism, because that is what an operator
|
|
89
|
+
* decides from.
|
|
90
|
+
*/
|
|
91
|
+
export declare function openingNoticeFor(documentType: string): string | undefined;
|
|
92
|
+
/** The Yjs root a type's content lives in, or `undefined` for an unknown type. */
|
|
93
|
+
export declare function rootForDocumentType(documentType: string): DocumentRoot | undefined;
|
|
94
|
+
//# sourceMappingURL=document-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-types.d.ts","sourceRoot":"","sources":["../src/document-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,6FAA6F;AAC7F,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,KAAK,CAAC;AAE1C,MAAM,WAAW,eAAe;IAC9B,sFAAsF;IACtF,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,uGAAuG;IACvG,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;;;;;OAQG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B;;;;;;;;;OASG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CACzC;AAID;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAM9D,CAAC;AAEH,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAEjF;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEjF;AAED,sDAAsD;AACtD,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAErE;AAED,oEAAoE;AACpE,wBAAgB,qBAAqB,IAAI,SAAS,MAAM,EAAE,CAEzD;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,IAAI,SAAS,MAAM,EAAE,CAEzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOzE;AAED,kFAAkF;AAClF,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAElF"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOD-DOC-TYPES-1 — the single registry of document types.
|
|
3
|
+
*
|
|
4
|
+
* ── WHY THIS FILE EXISTS ─────────────────────────────────────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* The type list was kept in two places that had no link to each other:
|
|
7
|
+
*
|
|
8
|
+
* `SUPPORTED_DOCUMENT_TYPES` (document-write-path) = markdown, text, plaintext
|
|
9
|
+
* `DIFFABLE_DOCUMENT_TYPES` (document-notify) = markdown, text, json
|
|
10
|
+
*
|
|
11
|
+
* They had already drifted. **`plaintext` was admitted and could not be diffed** — an operator could
|
|
12
|
+
* propose a `plaintext` document, have it accepted, edit it with a peer, and get *"this build renders
|
|
13
|
+
* diffs for markdown, text, json"* from `cello_doc_diff`. The verb that says what changed was dead
|
|
14
|
+
* on a type the product offered them.
|
|
15
|
+
*
|
|
16
|
+
* Neither list was wrong by itself; the defect was that there were two, so adding a type meant
|
|
17
|
+
* remembering a second file. With three more types queued that is a step that gets forgotten, so the
|
|
18
|
+
* properties became COLUMNS on one row and every list is derived.
|
|
19
|
+
*
|
|
20
|
+
* This module deliberately imports nothing. Both `document-write-path` and `document-notify` read
|
|
21
|
+
* it, and a registry that pulled in either of them would be a cycle.
|
|
22
|
+
*/
|
|
23
|
+
const TEXT = { root: "text", extension: "txt", admitted: true };
|
|
24
|
+
/**
|
|
25
|
+
* Every document type this build knows.
|
|
26
|
+
*
|
|
27
|
+
* `plaintext` and `text` share ONE row object by identity, not two equal rows — an alias cannot
|
|
28
|
+
* drift from what it aliases if there is nothing to drift from.
|
|
29
|
+
*/
|
|
30
|
+
export const DOCUMENT_TYPES = new Map([
|
|
31
|
+
["markdown", { root: "text", extension: "md", admitted: true }],
|
|
32
|
+
["text", TEXT],
|
|
33
|
+
["plaintext", TEXT],
|
|
34
|
+
["html", { root: "text", extension: "html", admitted: true, executableWhenOpened: true }],
|
|
35
|
+
["json", { root: "map", extension: "json", admitted: true }],
|
|
36
|
+
]);
|
|
37
|
+
/** The row for a type, or `undefined` for one this build does not know. */
|
|
38
|
+
export function documentTypeRow(documentType) {
|
|
39
|
+
return DOCUMENT_TYPES.get(documentType);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The extension for a type, or `undefined` for an unknown one.
|
|
43
|
+
*
|
|
44
|
+
* Undefined rather than a default: a type nothing can serve must not be handed a plausible-looking
|
|
45
|
+
* path. The silent `: "md"` default is what let `yaml` create a real signed peer-accepted document
|
|
46
|
+
* with no file and no explanation.
|
|
47
|
+
*/
|
|
48
|
+
export function extensionForDocumentType(documentType) {
|
|
49
|
+
return DOCUMENT_TYPES.get(documentType)?.extension;
|
|
50
|
+
}
|
|
51
|
+
/** Whether `propose`/`accept` may admit this type. */
|
|
52
|
+
export function isSupportedDocumentType(documentType) {
|
|
53
|
+
return DOCUMENT_TYPES.get(documentType)?.admitted === true;
|
|
54
|
+
}
|
|
55
|
+
/** The admitted types, sorted — the set a refusal message names. */
|
|
56
|
+
export function admittedDocumentTypes() {
|
|
57
|
+
return [...DOCUMENT_TYPES.entries()].filter(([, row]) => row.admitted).map(([name]) => name).sort();
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The types `cello_doc_diff` can render.
|
|
61
|
+
*
|
|
62
|
+
* EVERY known type is diffable — a text root diffs by line and a map root by key, and there is no
|
|
63
|
+
* third case. It is derived rather than listed because the listed version is what drifted out of
|
|
64
|
+
* agreement with the admitted set and killed `plaintext`'s diff.
|
|
65
|
+
*/
|
|
66
|
+
export function diffableDocumentTypes() {
|
|
67
|
+
return [...DOCUMENT_TYPES.keys()].sort();
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* What the operator is told when handed the path to a document whose file RUNS when opened.
|
|
71
|
+
*
|
|
72
|
+
* Returns `undefined` for every other type on purpose: a notice attached to every document is a
|
|
73
|
+
* notice on none. Keyed on the row's flag rather than on the type name, so the next executable type
|
|
74
|
+
* inherits it by setting the flag instead of by being remembered here.
|
|
75
|
+
*
|
|
76
|
+
* The wording states the consequence rather than the mechanism, because that is what an operator
|
|
77
|
+
* decides from.
|
|
78
|
+
*/
|
|
79
|
+
export function openingNoticeFor(documentType) {
|
|
80
|
+
if (DOCUMENT_TYPES.get(documentType)?.executableWhenOpened !== true)
|
|
81
|
+
return undefined;
|
|
82
|
+
return ("This document is an .html file, and your peer can edit it. Opening it in a browser RUNS " +
|
|
83
|
+
"whatever is in it, including anything they wrote — with access to your local files. Read it " +
|
|
84
|
+
"with cello_doc_read, or open it in an editor, rather than double-clicking it.");
|
|
85
|
+
}
|
|
86
|
+
/** The Yjs root a type's content lives in, or `undefined` for an unknown type. */
|
|
87
|
+
export function rootForDocumentType(documentType) {
|
|
88
|
+
return DOCUMENT_TYPES.get(documentType)?.root;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=document-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-types.js","sourceRoot":"","sources":["../src/document-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAiCH,MAAM,IAAI,GAAoB,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEjF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAyC,IAAI,GAAG,CAA0B;IACnG,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC/D,CAAC,MAAM,EAAE,IAAI,CAAC;IACd,CAAC,WAAW,EAAE,IAAI,CAAC;IACnB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;IACzF,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;CAC7D,CAAC,CAAC;AAEH,2EAA2E;AAC3E,MAAM,UAAU,eAAe,CAAC,YAAoB;IAClD,OAAO,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CAAC,YAAoB;IAC3D,OAAO,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC;AACrD,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,uBAAuB,CAAC,YAAoB;IAC1D,OAAO,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;AAC7D,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,qBAAqB;IACnC,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACtG,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,CAAC,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,YAAoB;IACnD,IAAI,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,oBAAoB,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACtF,OAAO,CACL,0FAA0F;QAC1F,8FAA8F;QAC9F,+EAA+E,CAChF,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,mBAAmB,CAAC,YAAoB;IACtD,OAAO,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC;AAChD,CAAC"}
|
|
@@ -25,20 +25,15 @@ import * as Y from "yjs";
|
|
|
25
25
|
import type { DocumentEngine } from "./document-engine.js";
|
|
26
26
|
import type { Logger } from "./types.js";
|
|
27
27
|
/**
|
|
28
|
-
* The
|
|
28
|
+
* The type registry moved to `document-types.ts` — see that file for why.
|
|
29
29
|
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* projects, and diffs as unchanged forever — while this file's own support makes the feature look
|
|
34
|
-
* finished to anyone reading here. Admitting a type only half the verbs can serve is worse than
|
|
35
|
-
* refusing it: it reads as done and loses content in silence.
|
|
36
|
-
*
|
|
37
|
-
* Exported so the refusal message names this set rather than a hardcoded copy that can drift.
|
|
30
|
+
* These re-exports keep the existing call sites working. `SUPPORTED_DOCUMENT_TYPES` and the
|
|
31
|
+
* extension rule used to be defined HERE, in parallel with a second list in `document-notify`, and
|
|
32
|
+
* the two drifted: `plaintext` was admitted and could not be diffed.
|
|
38
33
|
*/
|
|
34
|
+
export { extensionForDocumentType, isSupportedDocumentType } from "./document-types.js";
|
|
35
|
+
/** The types `propose`/`accept` will admit — derived from the registry, never a second list. */
|
|
39
36
|
export declare const SUPPORTED_DOCUMENT_TYPES: ReadonlySet<string>;
|
|
40
|
-
/** Whether `propose`/`accept` may admit this type. Anything else creates a document with no file. */
|
|
41
|
-
export declare function isSupportedDocumentType(documentType: string): boolean;
|
|
42
37
|
export type DocumentWriteFailure = "document_file_missing" | "document_file_unparseable" | "document_file_stale" | "document_file_changed_during_merge" | "document_projection_missing" | "document_file_unreadable" | "document_type_unsupported" | "document_id_invalid";
|
|
43
38
|
export declare class DocumentWriteError extends Error {
|
|
44
39
|
readonly reason: DocumentWriteFailure;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-write-path.d.ts","sourceRoot":"","sources":["../src/document-write-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAUzC
|
|
1
|
+
{"version":3,"file":"document-write-path.d.ts","sourceRoot":"","sources":["../src/document-write-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAUzC;;;;;;GAMG;AACH,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAExF,gGAAgG;AAChG,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,MAAM,CAAoC,CAAC;AAe9F,MAAM,MAAM,oBAAoB,GAC5B,uBAAuB,GACvB,2BAA2B,GAC3B,qBAAqB,GACrB,oCAAoC,GACpC,6BAA6B,GAC7B,0BAA0B,GAC1B,2BAA2B,GAC3B,qBAAqB,CAAC;AAE1B,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBACZ,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM;CAMzD;AAED,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,iBAAiB;;IAC5B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;gBAIpB,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAMzE;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IAkE3E,kFAAkF;IAC5E,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAWzG;;;;;;OAMG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IA2ChH,+EAA+E;IACzE,KAAK,CACT,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,CAAC,CAAC,GAAG,EACV,QAAQ,EAAE,UAAU,GACnB,OAAO,CAAC,WAAW,CAAC;CAgTxB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAyBrD"}
|
|
@@ -21,31 +21,33 @@
|
|
|
21
21
|
* admitted content as something the agent deleted, and publishes the deletion as deliberate
|
|
22
22
|
* intent. Measured, so the projection is written to disk beside the document and read back.
|
|
23
23
|
*/
|
|
24
|
-
import { mkdir, readFile, writeFile, rename } from "node:fs/promises";
|
|
24
|
+
import { mkdir, readFile, writeFile, rename, access, rm } from "node:fs/promises";
|
|
25
25
|
import { join } from "node:path";
|
|
26
26
|
import { lineRuns, toChunks } from "./line-lcs.js";
|
|
27
|
+
import { serializeJsonDocument, parseJsonDocument, jsonKeyOperations } from "./document-json.js";
|
|
28
|
+
import { extensionForDocumentType, admittedDocumentTypes, rootForDocumentType, DOCUMENT_TYPES } from "./document-types.js";
|
|
27
29
|
/** Yjs roots a materialized document projects from. TEXT_ROOT must match DocumentEngine's. */
|
|
28
30
|
const TEXT_ROOT = "content";
|
|
29
31
|
const MAP_ROOT = "data";
|
|
30
|
-
const TEXT_TYPES = new Set(["markdown", "text", "plaintext"]);
|
|
31
|
-
const JSON_TYPES = new Set(["json"]);
|
|
32
32
|
/**
|
|
33
|
-
* The
|
|
33
|
+
* The type registry moved to `document-types.ts` — see that file for why.
|
|
34
34
|
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
* These re-exports keep the existing call sites working. `SUPPORTED_DOCUMENT_TYPES` and the
|
|
36
|
+
* extension rule used to be defined HERE, in parallel with a second list in `document-notify`, and
|
|
37
|
+
* the two drifted: `plaintext` was admitted and could not be diffed.
|
|
38
|
+
*/
|
|
39
|
+
export { extensionForDocumentType, isSupportedDocumentType } from "./document-types.js";
|
|
40
|
+
/** The types `propose`/`accept` will admit — derived from the registry, never a second list. */
|
|
41
|
+
export const SUPPORTED_DOCUMENT_TYPES = new Set(admittedDocumentTypes());
|
|
42
|
+
/**
|
|
43
|
+
* The extension every type was materialized under before the registry existed.
|
|
41
44
|
*
|
|
42
|
-
*
|
|
45
|
+
* Documents created then are on operators' disks right now. The CONTENT of one is never at risk —
|
|
46
|
+
* it lives in the CRDT and would be rewritten at the new path. What is at risk is whatever the
|
|
47
|
+
* agent typed into the old file and has NOT published: those bytes exist nowhere else, and leaving
|
|
48
|
+
* them at a path nothing reads again loses work silently.
|
|
43
49
|
*/
|
|
44
|
-
|
|
45
|
-
/** Whether `propose`/`accept` may admit this type. Anything else creates a document with no file. */
|
|
46
|
-
export function isSupportedDocumentType(documentType) {
|
|
47
|
-
return SUPPORTED_DOCUMENT_TYPES.has(documentType);
|
|
48
|
-
}
|
|
50
|
+
const LEGACY_EXTENSION = "md";
|
|
49
51
|
/** Ids are hex identities, never names, and they become path components. */
|
|
50
52
|
const ID_PATTERN = /^[0-9a-f]{64}$/;
|
|
51
53
|
export class DocumentWriteError extends Error {
|
|
@@ -75,12 +77,67 @@ export class DocumentWritePath {
|
|
|
75
77
|
filePath(agentId, documentId, documentType) {
|
|
76
78
|
this.#assertId(agentId, "agent_id");
|
|
77
79
|
this.#assertId(documentId, "document_id");
|
|
78
|
-
|
|
79
|
-
|
|
80
|
+
return join(this.#root, agentId, `${documentId}.${this.#extension(documentType)}`);
|
|
81
|
+
}
|
|
82
|
+
/** The extension, refusing a type this build has no path rule for rather than defaulting. */
|
|
83
|
+
#extension(documentType) {
|
|
84
|
+
const extension = extensionForDocumentType(documentType);
|
|
85
|
+
if (extension === undefined) {
|
|
86
|
+
throw new DocumentWriteError("document_type_unsupported", `no file extension is defined for document type '${documentType}'`);
|
|
87
|
+
}
|
|
88
|
+
return extension;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Move a document created under the old everything-is-`.md` rule onto its typed path.
|
|
92
|
+
*
|
|
93
|
+
* The file and its projection move TOGETHER. Moving only the file leaves publish with no recorded
|
|
94
|
+
* baseline (`document_file_missing`); moving only the projection leaves it diffing an absent file.
|
|
95
|
+
*
|
|
96
|
+
* A file already at the new path wins: both present means the new one is the live document and
|
|
97
|
+
* the old one is a leftover, so preferring the old file would replay stale content over current
|
|
98
|
+
* work — the reverse of the bug this fixes. The leftover is removed so a later run cannot find it.
|
|
99
|
+
*/
|
|
100
|
+
async #migrateLegacyPath(agentId, documentId, documentType) {
|
|
101
|
+
const extension = this.#extension(documentType);
|
|
102
|
+
if (extension === LEGACY_EXTENSION)
|
|
103
|
+
return;
|
|
104
|
+
const pairs = [
|
|
105
|
+
[
|
|
106
|
+
join(this.#root, agentId, `${documentId}.${LEGACY_EXTENSION}`),
|
|
107
|
+
join(this.#root, agentId, `${documentId}.${extension}`),
|
|
108
|
+
],
|
|
109
|
+
[
|
|
110
|
+
join(this.#root, ".cello", agentId, `${documentId}.${LEGACY_EXTENSION}.projection`),
|
|
111
|
+
this.#projectionPath(agentId, documentId, documentType),
|
|
112
|
+
],
|
|
113
|
+
];
|
|
114
|
+
let moved = false;
|
|
115
|
+
for (const [from, to] of pairs) {
|
|
116
|
+
try {
|
|
117
|
+
await access(from);
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
continue; // nothing there — the ordinary case for every document created since.
|
|
121
|
+
}
|
|
122
|
+
try {
|
|
123
|
+
await access(to);
|
|
124
|
+
await rm(from, { force: true }); // the new path is live; this is a leftover.
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
// no file at the new path — the legacy one IS the document.
|
|
129
|
+
}
|
|
130
|
+
await rename(from, to);
|
|
131
|
+
moved = true;
|
|
132
|
+
}
|
|
133
|
+
if (moved) {
|
|
134
|
+
this.#logger.info("document.file.migrated", { documentId, documentType, extension });
|
|
135
|
+
}
|
|
80
136
|
}
|
|
81
137
|
/** Write the document's projection to disk and record it as the diff baseline. */
|
|
82
138
|
async materialize(agentId, documentId, documentType, doc) {
|
|
83
139
|
this.#assertSupported(documentType);
|
|
140
|
+
await this.#migrateLegacyPath(agentId, documentId, documentType);
|
|
84
141
|
const path = this.filePath(agentId, documentId, documentType);
|
|
85
142
|
const content = this.#project(doc, documentType);
|
|
86
143
|
await this.#writeAtomic(agentId, path, content);
|
|
@@ -97,6 +154,7 @@ export class DocumentWritePath {
|
|
|
97
154
|
*/
|
|
98
155
|
async publish(agentId, documentId, documentType, doc) {
|
|
99
156
|
this.#assertSupported(documentType);
|
|
157
|
+
await this.#migrateLegacyPath(agentId, documentId, documentType);
|
|
100
158
|
const path = this.filePath(agentId, documentId, documentType);
|
|
101
159
|
const onDisk = await this.#readOrRefuse(path, documentId);
|
|
102
160
|
const projection = await this.#loadProjection(agentId, documentId, documentType);
|
|
@@ -130,6 +188,7 @@ export class DocumentWritePath {
|
|
|
130
188
|
/** Admit a peer's update: fold local edits, merge, rewrite, report overlap. */
|
|
131
189
|
async admit(agentId, documentId, documentType, doc, incoming) {
|
|
132
190
|
this.#assertSupported(documentType);
|
|
191
|
+
await this.#migrateLegacyPath(agentId, documentId, documentType);
|
|
133
192
|
const path = this.filePath(agentId, documentId, documentType);
|
|
134
193
|
// 1. FOLD unpublished local edits in as local operations.
|
|
135
194
|
let onDisk = null;
|
|
@@ -255,8 +314,11 @@ export class DocumentWritePath {
|
|
|
255
314
|
}
|
|
256
315
|
// ─── internals ────────────────────────────────────────────────────────────
|
|
257
316
|
#project(doc, documentType) {
|
|
258
|
-
if (
|
|
259
|
-
|
|
317
|
+
if (rootForDocumentType(documentType) === "map") {
|
|
318
|
+
// DETERMINISTIC, not `JSON.stringify` of the map: `Y.Map.toJSON()` is in INSERTION order, so
|
|
319
|
+
// two peers holding the same document would render different files, and this projection is
|
|
320
|
+
// what publish diffs the file against — a reorder would publish as a rewrite of every line.
|
|
321
|
+
return serializeJsonDocument(doc.getMap(MAP_ROOT).toJSON());
|
|
260
322
|
}
|
|
261
323
|
return this.engine.readTextRoot(doc);
|
|
262
324
|
}
|
|
@@ -265,7 +327,7 @@ export class DocumentWritePath {
|
|
|
265
327
|
* Returns the region (text) or key set (JSON) the local edit occupies, or null if unchanged.
|
|
266
328
|
*/
|
|
267
329
|
#fold(doc, projection, onDisk, documentType) {
|
|
268
|
-
if (
|
|
330
|
+
if (rootForDocumentType(documentType) === "map") {
|
|
269
331
|
const keys = this.#foldJson(doc, onDisk);
|
|
270
332
|
return keys.length > 0 ? { keys } : null;
|
|
271
333
|
}
|
|
@@ -312,31 +374,31 @@ export class DocumentWritePath {
|
|
|
312
374
|
return { from: low, to: high };
|
|
313
375
|
}
|
|
314
376
|
/** Key diff: set what changed, delete what is gone. Returns the keys written. */
|
|
377
|
+
/**
|
|
378
|
+
* Fold the FILE's JSON into the map root, per key.
|
|
379
|
+
*
|
|
380
|
+
* Shares `jsonKeyOperations` with `cello_doc_write`, so the file path and the tool path cannot
|
|
381
|
+
* disagree about what counts as a changed key — the same rule the text path already follows for
|
|
382
|
+
* `lineHunks`.
|
|
383
|
+
*/
|
|
315
384
|
#foldJson(doc, onDisk) {
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
}
|
|
320
|
-
catch (err) {
|
|
321
|
-
throw new DocumentWriteError("document_file_unparseable", `the document's file is not valid JSON — ${err instanceof Error ? err.message : String(err)}`);
|
|
385
|
+
const parsed = parseJsonDocument(onDisk);
|
|
386
|
+
if (!parsed.ok) {
|
|
387
|
+
throw new DocumentWriteError("document_file_unparseable", `the document's file is not valid JSON — ${parsed.detail}`);
|
|
322
388
|
}
|
|
323
389
|
const map = doc.getMap(MAP_ROOT);
|
|
324
|
-
const
|
|
390
|
+
const ops = jsonKeyOperations(map, parsed.value);
|
|
391
|
+
if (ops.length === 0)
|
|
392
|
+
return [];
|
|
325
393
|
doc.transact(() => {
|
|
326
|
-
for (const [key, value] of
|
|
327
|
-
if (
|
|
328
|
-
map.set(key, value);
|
|
329
|
-
written.push(key);
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
for (const key of [...map.keys()]) {
|
|
333
|
-
if (!(key in parsed)) {
|
|
394
|
+
for (const [key, value] of ops) {
|
|
395
|
+
if (value === undefined)
|
|
334
396
|
map.delete(key);
|
|
335
|
-
|
|
336
|
-
|
|
397
|
+
else
|
|
398
|
+
map.set(key, value);
|
|
337
399
|
}
|
|
338
400
|
});
|
|
339
|
-
return
|
|
401
|
+
return ops.map(([key]) => key);
|
|
340
402
|
}
|
|
341
403
|
/** tmp + rename, so an interrupted write cannot leave a truncated file a later diff reads as
|
|
342
404
|
* a deliberate mass deletion. */
|
|
@@ -353,8 +415,7 @@ export class DocumentWritePath {
|
|
|
353
415
|
* the document.
|
|
354
416
|
*/
|
|
355
417
|
#projectionPath(agentId, documentId, documentType) {
|
|
356
|
-
|
|
357
|
-
return join(this.#root, ".cello", agentId, `${documentId}.${extension}.projection`);
|
|
418
|
+
return join(this.#root, ".cello", agentId, `${documentId}.${this.#extension(documentType)}.projection`);
|
|
358
419
|
}
|
|
359
420
|
/** The projection is persisted so it survives a restart — see the header. */
|
|
360
421
|
async #saveProjection(agentId, documentId, documentType, content) {
|
|
@@ -379,9 +440,15 @@ export class DocumentWritePath {
|
|
|
379
440
|
throw new DocumentWriteError("document_file_missing", `no materialized file for document ${documentId} at ${path} — materialize it before publishing`);
|
|
380
441
|
}
|
|
381
442
|
}
|
|
443
|
+
/**
|
|
444
|
+
* A type this FILE can project and fold — knowing a root is exactly that capability.
|
|
445
|
+
*
|
|
446
|
+
* Deliberately wider than `isSupportedDocumentType`: `json` has a root here and is not admitted at
|
|
447
|
+
* the door, because the write path serves it while read/write/diff do not.
|
|
448
|
+
*/
|
|
382
449
|
#assertSupported(documentType) {
|
|
383
|
-
if (
|
|
384
|
-
throw new DocumentWriteError("document_type_unsupported", `no diff strategy for '${documentType}' —
|
|
450
|
+
if (rootForDocumentType(documentType) === undefined) {
|
|
451
|
+
throw new DocumentWriteError("document_type_unsupported", `no diff strategy for '${documentType}' — known types are ${[...DOCUMENT_TYPES.keys()].sort().join(", ")}`);
|
|
385
452
|
}
|
|
386
453
|
}
|
|
387
454
|
#assertId(value, field) {
|