@graview/core 0.1.2 → 0.1.3
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/capabilities.js +1 -1
- package/dist/capabilities.js.map +1 -1
- package/dist/document/compile.d.ts.map +1 -1
- package/dist/document/compile.js +22 -2
- package/dist/document/compile.js.map +1 -1
- package/dist/document/diff.d.ts.map +1 -1
- package/dist/document/diff.js +5 -0
- package/dist/document/diff.js.map +1 -1
- package/dist/document/edit.d.ts.map +1 -1
- package/dist/document/edit.js +12 -0
- package/dist/document/edit.js.map +1 -1
- package/dist/document/schema.d.ts +2 -0
- package/dist/document/schema.d.ts.map +1 -1
- package/dist/document/schema.js +2 -0
- package/dist/document/schema.js.map +1 -1
- package/dist/document/to-document.d.ts.map +1 -1
- package/dist/document/to-document.js +5 -1
- package/dist/document/to-document.js.map +1 -1
- package/dist/graph/graph.d.ts +9 -0
- package/dist/graph/graph.d.ts.map +1 -1
- package/dist/graph/graph.js +18 -4
- package/dist/graph/graph.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/labels.js +1 -1
- package/dist/labels.js.map +1 -1
- package/dist/mutations/define-mutation.js +3 -3
- package/dist/mutations/define-mutation.js.map +1 -1
- package/dist/ops/log.d.ts +11 -0
- package/dist/ops/log.d.ts.map +1 -1
- package/dist/ops/log.js +14 -0
- package/dist/ops/log.js.map +1 -1
- package/dist/ops/undo.d.ts +6 -0
- package/dist/ops/undo.d.ts.map +1 -1
- package/dist/ops/undo.js +3 -0
- package/dist/ops/undo.js.map +1 -1
- package/dist/permissions/sight.d.ts +20 -4
- package/dist/permissions/sight.d.ts.map +1 -1
- package/dist/permissions/sight.js +77 -22
- package/dist/permissions/sight.js.map +1 -1
- package/dist/presence.d.ts +25 -0
- package/dist/presence.d.ts.map +1 -1
- package/dist/presence.js +26 -2
- package/dist/presence.js.map +1 -1
- package/dist/refusal.d.ts +34 -0
- package/dist/refusal.d.ts.map +1 -0
- package/dist/refusal.js +40 -0
- package/dist/refusal.js.map +1 -0
- package/dist/schema/types.d.ts +11 -0
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/seen.d.ts +6 -0
- package/dist/seen.d.ts.map +1 -1
- package/dist/seen.js +10 -4
- package/dist/seen.js.map +1 -1
- package/dist/store.d.ts +61 -0
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +82 -5
- package/dist/store.js.map +1 -1
- package/dist/validate-graph.d.ts +2 -1
- package/dist/validate-graph.d.ts.map +1 -1
- package/dist/validate-graph.js +8 -1
- package/dist/validate-graph.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sight.d.ts","sourceRoot":"","sources":["../../src/permissions/sight.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAS,MAAM,YAAY,CAAC;AAE3D,2EAA2E;AAC3E,UAAU,MAAM;IACd,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACpD,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACpD;AAKD,yDAAyD;AACzD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAE5E;AAED;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACvC,wFAAwF;IACxF,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CAC3C;
|
|
1
|
+
{"version":3,"file":"sight.d.ts","sourceRoot":"","sources":["../../src/permissions/sight.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAS,MAAM,YAAY,CAAC;AAE3D,2EAA2E;AAC3E,UAAU,MAAM;IACd,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACpD,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACpD;AAKD,yDAAyD;AACzD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAE5E;AAED;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACvC,wFAAwF;IACxF,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CAC3C;AAED,0GAA0G;AAC1G,MAAM,WAAW,WAAW;IAC1B,GAAG,IAAI,SAAS,SAAS,EAAE,CAAC;IAC5B,oGAAoG;IACpG,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AA0DD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAwBnD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,IAAI,CAClB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACpD,KAAK,EAAE,MAAM;AACb,gFAAgF;AAChF,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,GACnC,OAAO,CAmBT"}
|
|
@@ -4,36 +4,91 @@ const sightGrantsTo = (sight, principal) => sight.roles === "*" || (principal.ro
|
|
|
4
4
|
export function sightedKinds(policy) {
|
|
5
5
|
return new Set((policy?.sees ?? []).flatMap((sight) => sight.kinds));
|
|
6
6
|
}
|
|
7
|
-
const
|
|
7
|
+
const INDEXES = new WeakMap();
|
|
8
|
+
function indexFrom(base) {
|
|
9
|
+
const kinds = new Map();
|
|
10
|
+
const creators = new Map();
|
|
11
|
+
return { base, end: base, read: [], kinds, creators, entries: [], records: { kindOf: (id) => kinds.get(id), creatorOf: (id) => creators.get(id) } };
|
|
12
|
+
}
|
|
13
|
+
/** Reads one op into the index: the kind of each record it first adds or removes, and who first made one. */
|
|
14
|
+
function readInto(index, op) {
|
|
15
|
+
const seq = index.end;
|
|
16
|
+
for (const primitive of op.primitives) {
|
|
17
|
+
if (primitive.op !== "add-node" && primitive.op !== "remove-node")
|
|
18
|
+
continue;
|
|
19
|
+
const { id, kind } = primitive.node;
|
|
20
|
+
if (!index.kinds.has(id)) {
|
|
21
|
+
index.kinds.set(id, kind);
|
|
22
|
+
index.entries.push({ seq, id, creator: false });
|
|
23
|
+
}
|
|
24
|
+
if (primitive.op !== "add-node" || index.creators.has(id) || op.undoes !== undefined)
|
|
25
|
+
continue;
|
|
26
|
+
const by = actingAs(op.author).id;
|
|
27
|
+
if (by === undefined)
|
|
28
|
+
continue;
|
|
29
|
+
index.creators.set(id, by);
|
|
30
|
+
index.entries.push({ seq, id, creator: true });
|
|
31
|
+
}
|
|
32
|
+
index.read.push(op);
|
|
33
|
+
index.end++;
|
|
34
|
+
}
|
|
35
|
+
/** Takes out what the ops from `seq` on wrote: the log was cut back there. */
|
|
36
|
+
function cutBack(index, seq) {
|
|
37
|
+
while (index.entries.length > 0 && index.entries.at(-1).seq >= seq) {
|
|
38
|
+
const entry = index.entries.pop();
|
|
39
|
+
(entry.creator ? index.creators : index.kinds).delete(entry.id);
|
|
40
|
+
}
|
|
41
|
+
index.read.length = seq - index.base;
|
|
42
|
+
index.end = seq;
|
|
43
|
+
}
|
|
8
44
|
/**
|
|
9
45
|
* The records a log names, read from its add- and remove-node primitives.
|
|
10
46
|
* The first op that added a record made it: putting one back by an undo is
|
|
11
|
-
* not a new author.
|
|
47
|
+
* not a new author.
|
|
48
|
+
*
|
|
49
|
+
* KEPT AS THE LOG GOES (FR-51), as the label index follows the graph: a
|
|
50
|
+
* call reads only the ops appended since the last one, so a commit costs
|
|
51
|
+
* its own ops, not the log's. A log cut back (`truncate`, under a rebase)
|
|
52
|
+
* is noticed by its ops no longer being the ones read, and what they wrote
|
|
53
|
+
* is taken out, back to where the log and the index still agree. A log
|
|
54
|
+
* compacted behind its horizon (FR-23) keeps what the index had already
|
|
55
|
+
* read of the archived ops, so a record made behind the horizon is still
|
|
56
|
+
* known by its maker for as long as this log is open; a log OPENED
|
|
57
|
+
* compacted never read them, and knows its makers from the horizon on.
|
|
58
|
+
* The `Records` returned is the same object every time, and answers as of
|
|
59
|
+
* the last call.
|
|
12
60
|
*/
|
|
13
61
|
export function recordsOf(log) {
|
|
14
62
|
const ops = log.all();
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
63
|
+
const end = typeof log.length === "number" ? log.length : ops.length;
|
|
64
|
+
const first = end - ops.length;
|
|
65
|
+
let index = INDEXES.get(log);
|
|
66
|
+
if (index && index.base <= first && first <= index.end) {
|
|
67
|
+
// Back to the last seq where the log still holds the op the index read: a log is only ever cut from its end.
|
|
68
|
+
let agreed = Math.min(index.end, end);
|
|
69
|
+
while (agreed > first && ops[agreed - 1 - first] !== index.read[agreed - 1 - index.base])
|
|
70
|
+
agreed--;
|
|
71
|
+
if (agreed === first && first > index.base && agreed < index.end) {
|
|
72
|
+
// It disagrees all the way back to its horizon: not the log this index read.
|
|
73
|
+
index = undefined;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
if (agreed < index.end)
|
|
77
|
+
cutBack(index, agreed);
|
|
78
|
+
// What a compaction archived is no longer held here to compare against (FR-23).
|
|
79
|
+
if (first > index.base) {
|
|
80
|
+
index.read = index.read.slice(first - index.base);
|
|
81
|
+
index.base = first;
|
|
82
|
+
}
|
|
32
83
|
}
|
|
33
84
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
85
|
+
else
|
|
86
|
+
index = undefined;
|
|
87
|
+
if (!index)
|
|
88
|
+
INDEXES.set(log, (index = indexFrom(first)));
|
|
89
|
+
for (let seq = index.end; seq < end; seq++)
|
|
90
|
+
readInto(index, ops[seq - first]);
|
|
91
|
+
return index.records;
|
|
37
92
|
}
|
|
38
93
|
/**
|
|
39
94
|
* Whether a principal may see one record.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sight.js","sourceRoot":"","sources":["../../src/permissions/sight.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AASjD,MAAM,aAAa,GAAG,CAAC,KAAY,EAAE,SAAoB,EAAW,EAAE,CACpE,KAAK,CAAC,KAAK,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAE,KAAK,CAAC,KAA2B,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAEnH,yDAAyD;AACzD,MAAM,UAAU,YAAY,CAAC,MAA0B;IACrD,OAAO,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACvE,CAAC;
|
|
1
|
+
{"version":3,"file":"sight.js","sourceRoot":"","sources":["../../src/permissions/sight.ts"],"names":[],"mappings":"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"}
|
package/dist/presence.d.ts
CHANGED
|
@@ -6,8 +6,14 @@ export interface PresenceRobot {
|
|
|
6
6
|
export interface Presence {
|
|
7
7
|
/** `kind:id:session` — the op log's own reading of an author, so a figure and its edits agree. */
|
|
8
8
|
readonly participant: string;
|
|
9
|
+
/** What they are: a person, an agent, a rule, a system. A server says it from the seat (FR-47); absent from an older word, read the key. */
|
|
10
|
+
readonly kind?: Participant["kind"];
|
|
9
11
|
/** What to call them. Absent for an anonymous viewer, who is counted rather than drawn. */
|
|
10
12
|
readonly name?: string;
|
|
13
|
+
/** The id of the person an agent acts for (FR-47), from its seat — never from what a client claims. */
|
|
14
|
+
readonly onBehalfOf?: string;
|
|
15
|
+
/** What to call that person: "Claude, for Ada". Withheld with `onBehalfOf` from a seat that may not see them. */
|
|
16
|
+
readonly onBehalfOfName?: string;
|
|
11
17
|
readonly hue: number;
|
|
12
18
|
/** Where they are: `toUrl(view)`, the complete answer. */
|
|
13
19
|
readonly stop: string;
|
|
@@ -17,6 +23,12 @@ export interface Presence {
|
|
|
17
23
|
readonly robot?: PresenceRobot;
|
|
18
24
|
/** When they last said so, ISO. */
|
|
19
25
|
readonly at: string;
|
|
26
|
+
/**
|
|
27
|
+
* When an ANNOUNCED visitor goes, ISO (FR-47): an agent acting over MCP or
|
|
28
|
+
* an RPC, a polling tab — somebody without a socket, stamped by a host.
|
|
29
|
+
* Until then they stand without a heartbeat; after it, they are gone.
|
|
30
|
+
*/
|
|
31
|
+
readonly until?: string;
|
|
20
32
|
}
|
|
21
33
|
export interface PresenceChannel {
|
|
22
34
|
/** Say where you are. Called on every change and on every heartbeat. */
|
|
@@ -37,6 +49,19 @@ export declare const PRESENCE_TTL_MS = 2500;
|
|
|
37
49
|
* somebody does not keep them on the map.
|
|
38
50
|
*/
|
|
39
51
|
export declare const REMOTE_PRESENCE_TTL_MS: number;
|
|
52
|
+
/**
|
|
53
|
+
* HOW LONG AN ANNOUNCED VISITOR STANDS (FR-47) when a host does not say:
|
|
54
|
+
* an agent between two calls is thinking, not gone.
|
|
55
|
+
*/
|
|
56
|
+
export declare const VISITOR_PRESENCE_TTL_MS = 30000;
|
|
57
|
+
/**
|
|
58
|
+
* WHAT TO CALL THEM, in a room: "Claude, for Ada" for an agent whose
|
|
59
|
+
* person may be named, the name alone otherwise, and "" for an anonymous
|
|
60
|
+
* viewer, who is counted rather than drawn.
|
|
61
|
+
*/
|
|
62
|
+
export declare function presenceName(presence: Presence): string;
|
|
63
|
+
/** Whether a presence still stands at `now`: until its announced time, or within the TTL of its last word. */
|
|
64
|
+
export declare function presenceStands(presence: Presence, now: number, ttlMs?: number): boolean;
|
|
40
65
|
/** The parts of a participant key: who, and which tab of theirs. */
|
|
41
66
|
export interface Participant {
|
|
42
67
|
readonly kind: "human" | "agent" | "rule" | "system";
|
package/dist/presence.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presence.d.ts","sourceRoot":"","sources":["../src/presence.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,aAAa;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,kGAAkG;IAClG,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,2FAA2F;IAC3F,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,sDAAsD;IACtD,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;IAC/B,mCAAmC;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"presence.d.ts","sourceRoot":"","sources":["../src/presence.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,aAAa;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,kGAAkG;IAClG,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,4IAA4I;IAC5I,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,2FAA2F;IAC3F,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,uGAAuG;IACvG,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,iHAAiH;IACjH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,sDAAsD;IACtD,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;IAC/B,mCAAmC;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC/B,yFAAyF;IACzF,KAAK,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,SAAS,QAAQ,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAChE,mCAAmC;IACnC,KAAK,IAAI,IAAI,CAAC;CACf;AAED,sGAAsG;AACtG,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,QAAsB,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAE9C;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAGvD;AAED,8GAA8G;AAC9G,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAwB,GAAG,OAAO,CAGxG;AAED,oEAAoE;AACpE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACrD,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAID;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,WAAW,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAQjG;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,EACpC,OAAO,EAAE,SAAS,QAAQ,EAAE,EAC5B,GAAG,EAAE,MAAM,EACX,KAAK,GAAE,MAAwB,EAC/B,IAAI,CAAC,EAAE,MAAM,GACZ,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAevB;AAED,uEAAuE;AACvE,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,GAAG,SAAS,EAAE,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAetF"}
|
package/dist/presence.js
CHANGED
|
@@ -21,6 +21,26 @@ export const PRESENCE_TTL_MS = 2500;
|
|
|
21
21
|
* somebody does not keep them on the map.
|
|
22
22
|
*/
|
|
23
23
|
export const REMOTE_PRESENCE_TTL_MS = PRESENCE_TTL_MS * 4;
|
|
24
|
+
/**
|
|
25
|
+
* HOW LONG AN ANNOUNCED VISITOR STANDS (FR-47) when a host does not say:
|
|
26
|
+
* an agent between two calls is thinking, not gone.
|
|
27
|
+
*/
|
|
28
|
+
export const VISITOR_PRESENCE_TTL_MS = 30_000;
|
|
29
|
+
/**
|
|
30
|
+
* WHAT TO CALL THEM, in a room: "Claude, for Ada" for an agent whose
|
|
31
|
+
* person may be named, the name alone otherwise, and "" for an anonymous
|
|
32
|
+
* viewer, who is counted rather than drawn.
|
|
33
|
+
*/
|
|
34
|
+
export function presenceName(presence) {
|
|
35
|
+
const name = presence.name ?? "";
|
|
36
|
+
return name && presence.onBehalfOfName ? `${name}, for ${presence.onBehalfOfName}` : name;
|
|
37
|
+
}
|
|
38
|
+
/** Whether a presence still stands at `now`: until its announced time, or within the TTL of its last word. */
|
|
39
|
+
export function presenceStands(presence, now, ttlMs = PRESENCE_TTL_MS) {
|
|
40
|
+
if (presence.until !== undefined)
|
|
41
|
+
return now < Date.parse(presence.until);
|
|
42
|
+
return now - Date.parse(presence.at) < ttlMs;
|
|
43
|
+
}
|
|
24
44
|
const PARTICIPANT_KINDS = new Set(["human", "agent", "rule", "system"]);
|
|
25
45
|
/**
|
|
26
46
|
* THE ONE DIALECT. A participant is `kind:id:session`: the op log's own
|
|
@@ -55,11 +75,11 @@ export function parseParticipant(key) {
|
|
|
55
75
|
export function foldPresence(known, arrived, now, ttlMs = PRESENCE_TTL_MS, self) {
|
|
56
76
|
const next = new Map();
|
|
57
77
|
for (const [participant, presence] of known) {
|
|
58
|
-
if (
|
|
78
|
+
if (presenceStands(presence, now, ttlMs))
|
|
59
79
|
next.set(participant, presence);
|
|
60
80
|
}
|
|
61
81
|
for (const presence of arrived) {
|
|
62
|
-
if (
|
|
82
|
+
if (!presenceStands(presence, now, ttlMs)) {
|
|
63
83
|
next.delete(presence.participant);
|
|
64
84
|
continue;
|
|
65
85
|
}
|
|
@@ -76,7 +96,11 @@ export function samePresence(a, b) {
|
|
|
76
96
|
if (!a || !b)
|
|
77
97
|
return a === b;
|
|
78
98
|
return (a.participant === b.participant &&
|
|
99
|
+
a.kind === b.kind &&
|
|
79
100
|
a.name === b.name &&
|
|
101
|
+
a.onBehalfOf === b.onBehalfOf &&
|
|
102
|
+
a.onBehalfOfName === b.onBehalfOfName &&
|
|
103
|
+
a.until === b.until &&
|
|
80
104
|
a.hue === b.hue &&
|
|
81
105
|
a.stop === b.stop &&
|
|
82
106
|
(a.over ?? null) === (b.over ?? null) &&
|
package/dist/presence.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presence.js","sourceRoot":"","sources":["../src/presence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"presence.js","sourceRoot":"","sources":["../src/presence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WHY A CHANGE WAS REFUSED, AS A CODE A PROGRAM CAN BRANCH ON (FR-46).
|
|
3
|
+
*
|
|
4
|
+
* A refusal reached a client as a sentence and nothing else, so an MCP tool
|
|
5
|
+
* and an interface told "you may not" from "it is gone" by matching words.
|
|
6
|
+
* The set is closed and on the stability surface (docs/stability.md): a
|
|
7
|
+
* code never changes meaning, and a new one is a new protocol.
|
|
8
|
+
*
|
|
9
|
+
* forbidden the seat may not: the policy, a sight, an agent's `may`, a module turned off
|
|
10
|
+
* missing what the call names is not there: a record, or a batch to take back
|
|
11
|
+
* invalid the call as asked does not fit: its arguments, the kind, a rule, the order things happened in
|
|
12
|
+
* limit the host's hard cap: the call can never succeed as asked, however long the caller waits
|
|
13
|
+
*
|
|
14
|
+
* `limit` is the host's to say; nothing in the store says it. It is not
|
|
15
|
+
* `busy`: busy is "not now", and the client keeps the change and sends it
|
|
16
|
+
* again (FR-45). A refusal of any reason is final, and the change is taken
|
|
17
|
+
* back.
|
|
18
|
+
*/
|
|
19
|
+
export declare const REFUSAL_REASONS: readonly ["forbidden", "missing", "invalid", "limit"];
|
|
20
|
+
export type RefusalReason = (typeof REFUSAL_REASONS)[number];
|
|
21
|
+
/** A refusal as the wire carries it: the code, the sentence a person reads, and who could. */
|
|
22
|
+
export interface WireRefusal {
|
|
23
|
+
readonly reason: RefusalReason;
|
|
24
|
+
readonly sentence: string;
|
|
25
|
+
/** The roles that would be allowed, when the policy knows them. Absent when it names none. */
|
|
26
|
+
readonly wouldNeed?: readonly string[];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* THE STORE'S OWN ERRORS, READ INTO A REASON. Anything that is not one of
|
|
30
|
+
* the store's refusals — a mutation's own throw, an invariant, an id that
|
|
31
|
+
* is taken — is `invalid`, in its own words.
|
|
32
|
+
*/
|
|
33
|
+
export declare function refusalOf(error: unknown): WireRefusal;
|
|
34
|
+
//# sourceMappingURL=refusal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refusal.d.ts","sourceRoot":"","sources":["../src/refusal.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,eAAe,uDAAwD,CAAC;AAErF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,8FAA8F;AAC9F,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,8FAA8F;IAC9F,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CASrD"}
|
package/dist/refusal.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { MissingRecordError } from "./graph/graph.js";
|
|
2
|
+
import { UndoBlockedError } from "./ops/undo.js";
|
|
3
|
+
import { PermissionDeniedError } from "./permissions/types.js";
|
|
4
|
+
/**
|
|
5
|
+
* WHY A CHANGE WAS REFUSED, AS A CODE A PROGRAM CAN BRANCH ON (FR-46).
|
|
6
|
+
*
|
|
7
|
+
* A refusal reached a client as a sentence and nothing else, so an MCP tool
|
|
8
|
+
* and an interface told "you may not" from "it is gone" by matching words.
|
|
9
|
+
* The set is closed and on the stability surface (docs/stability.md): a
|
|
10
|
+
* code never changes meaning, and a new one is a new protocol.
|
|
11
|
+
*
|
|
12
|
+
* forbidden the seat may not: the policy, a sight, an agent's `may`, a module turned off
|
|
13
|
+
* missing what the call names is not there: a record, or a batch to take back
|
|
14
|
+
* invalid the call as asked does not fit: its arguments, the kind, a rule, the order things happened in
|
|
15
|
+
* limit the host's hard cap: the call can never succeed as asked, however long the caller waits
|
|
16
|
+
*
|
|
17
|
+
* `limit` is the host's to say; nothing in the store says it. It is not
|
|
18
|
+
* `busy`: busy is "not now", and the client keeps the change and sends it
|
|
19
|
+
* again (FR-45). A refusal of any reason is final, and the change is taken
|
|
20
|
+
* back.
|
|
21
|
+
*/
|
|
22
|
+
export const REFUSAL_REASONS = ["forbidden", "missing", "invalid", "limit"];
|
|
23
|
+
/**
|
|
24
|
+
* THE STORE'S OWN ERRORS, READ INTO A REASON. Anything that is not one of
|
|
25
|
+
* the store's refusals — a mutation's own throw, an invariant, an id that
|
|
26
|
+
* is taken — is `invalid`, in its own words.
|
|
27
|
+
*/
|
|
28
|
+
export function refusalOf(error) {
|
|
29
|
+
const sentence = error instanceof Error ? error.message : String(error);
|
|
30
|
+
if (error instanceof PermissionDeniedError) {
|
|
31
|
+
const roles = error.refusal.wouldNeed;
|
|
32
|
+
return { reason: "forbidden", sentence, ...(roles.length > 0 ? { wouldNeed: [...roles] } : {}) };
|
|
33
|
+
}
|
|
34
|
+
if (error instanceof MissingRecordError)
|
|
35
|
+
return { reason: "missing", sentence };
|
|
36
|
+
if (error instanceof UndoBlockedError)
|
|
37
|
+
return { reason: error.check.reason ?? "invalid", sentence };
|
|
38
|
+
return { reason: "invalid", sentence };
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=refusal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refusal.js","sourceRoot":"","sources":["../src/refusal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAU,CAAC;AAYrF;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxE,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QACtC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACnG,CAAC;IACD,IAAI,KAAK,YAAY,kBAAkB;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;IAChF,IAAI,KAAK,YAAY,gBAAgB;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,SAAS,EAAE,QAAQ,EAAE,CAAC;IACpG,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AACzC,CAAC"}
|
package/dist/schema/types.d.ts
CHANGED
|
@@ -134,6 +134,17 @@ export interface NodeDefinitionSpec<F extends z.ZodObject<z.ZodRawShape>, E exte
|
|
|
134
134
|
* purpose, and `graview check` stops asking who writes it.
|
|
135
135
|
*/
|
|
136
136
|
readonly fixed?: Readonly<Record<string, string>>;
|
|
137
|
+
/**
|
|
138
|
+
* A REQUIRED FIELD'S DEFAULT, declared beside the schema rather than in it.
|
|
139
|
+
*
|
|
140
|
+
* A zod `.default()` makes parsing invent the value, which is right for a
|
|
141
|
+
* kind declared in TypeScript and wrong for one hydrated from storage,
|
|
142
|
+
* where a missing value must stay missing. A kind compiled from a document
|
|
143
|
+
* keeps its fields' `default`s here instead: they are applied when a record
|
|
144
|
+
* is made, and a repair (`validateGraph`) sets a required field that no
|
|
145
|
+
* longer fits to its default rather than removing the record.
|
|
146
|
+
*/
|
|
147
|
+
readonly defaults?: Readonly<Record<string, unknown>>;
|
|
137
148
|
/**
|
|
138
149
|
* A DRAWING OF THE THING, wherever the kind is drawn.
|
|
139
150
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":"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"}
|
package/dist/seen.d.ts
CHANGED
|
@@ -35,6 +35,12 @@ export declare function hidesFrom(store: Judged, principal: Principal): boolean;
|
|
|
35
35
|
* now; one since removed by the kind the log says it was, and so never by
|
|
36
36
|
* an edge it no longer has; and a string that names no record at all (a
|
|
37
37
|
* label in a call's arguments) is nothing to keep from anybody.
|
|
38
|
+
*
|
|
39
|
+
* THE JUDGEMENT FOLLOWS THE STORE (FR-51). It reads the policy, the
|
|
40
|
+
* modules that are off and who made each record as it is asked, not as it
|
|
41
|
+
* was taken: one taken before a commit and asked after it knows the record
|
|
42
|
+
* just made is its maker's own. Asking costs nothing more for that — who
|
|
43
|
+
* made what is an index the log keeps as it goes (`recordsOf`).
|
|
38
44
|
*/
|
|
39
45
|
export declare function seesId(store: Judged, principal: Principal): (id: string) => boolean;
|
|
40
46
|
/** The store's log as one seat may read it: every op in its place, the ones it may not see withheld (FR-16). */
|
package/dist/seen.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seen.d.ts","sourceRoot":"","sources":["../src/seen.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAEpE,OAAO,KAAK,EAAS,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAIvD,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,qFAAqF;AACrF,UAAU,MAAM;IACd,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE;QACd,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG;YAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;SAAE,GAAG,SAAS,CAAC;QAChF,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS;YAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QACpD,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS;YAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KACpD,CAAC;IACF,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,+GAA+G;IAC/G,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC;CACpE;AAaD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAGtE;AAED
|
|
1
|
+
{"version":3,"file":"seen.d.ts","sourceRoot":"","sources":["../src/seen.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAEpE,OAAO,KAAK,EAAS,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAIvD,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,qFAAqF;AACrF,UAAU,MAAM;IACd,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE;QACd,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG;YAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;SAAE,GAAG,SAAS,CAAC;QAChF,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS;YAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QACpD,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS;YAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KACpD,CAAC;IACF,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,+GAA+G;IAC/G,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC;CACpE;AAaD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAGtE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAWnF;AAED,gHAAgH;AAChH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,SAAS,EAAE,CAGnF;AAED,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,GAAG,EAAE,SAAS,SAAS,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,UAAU,CAE7F;AASD;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CA2H3F"}
|
package/dist/seen.js
CHANGED
|
@@ -27,13 +27,19 @@ export function hidesFrom(store, principal) {
|
|
|
27
27
|
* now; one since removed by the kind the log says it was, and so never by
|
|
28
28
|
* an edge it no longer has; and a string that names no record at all (a
|
|
29
29
|
* label in a call's arguments) is nothing to keep from anybody.
|
|
30
|
+
*
|
|
31
|
+
* THE JUDGEMENT FOLLOWS THE STORE (FR-51). It reads the policy, the
|
|
32
|
+
* modules that are off and who made each record as it is asked, not as it
|
|
33
|
+
* was taken: one taken before a commit and asked after it knows the record
|
|
34
|
+
* just made is its maker's own. Asking costs nothing more for that — who
|
|
35
|
+
* made what is an index the log keeps as it goes (`recordsOf`).
|
|
30
36
|
*/
|
|
31
37
|
export function seesId(store, principal) {
|
|
32
|
-
const off = turnedOff(store, principal);
|
|
33
|
-
if (!store.policy?.sees?.length && off.size === 0)
|
|
34
|
-
return () => true;
|
|
35
|
-
const records = recordsOf(store.log);
|
|
36
38
|
return (id) => {
|
|
39
|
+
const off = turnedOff(store, principal);
|
|
40
|
+
if (!store.policy?.sees?.length && off.size === 0)
|
|
41
|
+
return true;
|
|
42
|
+
const records = recordsOf(store.log);
|
|
37
43
|
const node = store.graph.getNode(id);
|
|
38
44
|
if (node)
|
|
39
45
|
return !off.has(node.kind) && sees(store.policy, principal, node, store.graph, records);
|
package/dist/seen.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seen.js","sourceRoot":"","sources":["../src/seen.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAmB,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAkBzD,MAAM,OAAO,GAAwB,IAAI,GAAG,EAAE,CAAC;AAE/C;;;;GAIG;AACH,SAAS,SAAS,CAAC,KAAa,EAAE,SAAoB;IACpD,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,aAAa,IAAI,OAAO,CAAC,CAAC;AACnF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,SAAoB;IAC3D,IAAI,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;AACvF,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"seen.js","sourceRoot":"","sources":["../src/seen.ts"],"names":[],"mappings":"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"}
|
package/dist/store.d.ts
CHANGED
|
@@ -222,6 +222,39 @@ export interface RebaseResult<S extends AnySchema> {
|
|
|
222
222
|
readonly error: unknown;
|
|
223
223
|
}[];
|
|
224
224
|
}
|
|
225
|
+
/**
|
|
226
|
+
* What `Store.adopt` is handed (FR-53): the server's whole state, as
|
|
227
|
+
* `GET /graview/state` answers it, and this store's own batches as `rebase`
|
|
228
|
+
* names them.
|
|
229
|
+
*/
|
|
230
|
+
export interface Adopt<S extends AnySchema> {
|
|
231
|
+
/** The server's graph: it becomes this store's graph, in the server's order. */
|
|
232
|
+
readonly snapshot: GraphSnapshot<NodeOfSchema<S>>;
|
|
233
|
+
/** The server's log, whole or from its undo horizon on: it becomes this store's log. */
|
|
234
|
+
readonly log: readonly Operation[];
|
|
235
|
+
/** The epochs the log folds from (FR-27), the checkpoint among them when it was compacted. */
|
|
236
|
+
readonly epochs?: readonly Epoch[];
|
|
237
|
+
/** The seq `log` begins at when it was compacted and its checkpoint is not among `epochs` (FR-23). */
|
|
238
|
+
readonly horizon?: number;
|
|
239
|
+
/** This store's batches still awaiting a verdict, oldest first: applied again on top. */
|
|
240
|
+
readonly pending?: readonly string[];
|
|
241
|
+
/** This store's batches the server has answered or refused: not applied again. */
|
|
242
|
+
readonly drop?: readonly string[];
|
|
243
|
+
}
|
|
244
|
+
/** What an adoption did. */
|
|
245
|
+
export interface AdoptResult<S extends AnySchema> {
|
|
246
|
+
/** The net change, as subscribers heard it. */
|
|
247
|
+
readonly diff: GraphDiff<NodeOfSchema<S>>;
|
|
248
|
+
/** The server's ops this store did not hold before, as its log numbers them. */
|
|
249
|
+
readonly adopted: readonly Operation[];
|
|
250
|
+
/** The pending batches' ops, applied again. */
|
|
251
|
+
readonly pending: readonly Operation[];
|
|
252
|
+
/** Pending batches that no longer apply on the server's graph, and why; they are not in the log. */
|
|
253
|
+
readonly refused: readonly {
|
|
254
|
+
readonly batch: string;
|
|
255
|
+
readonly error: unknown;
|
|
256
|
+
}[];
|
|
257
|
+
}
|
|
225
258
|
export declare class Store<S extends AnySchema> {
|
|
226
259
|
readonly schema: S;
|
|
227
260
|
readonly graph: Graph<S>;
|
|
@@ -250,10 +283,14 @@ export declare class Store<S extends AnySchema> {
|
|
|
250
283
|
private readonly validate;
|
|
251
284
|
private readonly mintBatch;
|
|
252
285
|
private counter;
|
|
286
|
+
/** The default op id generator's count. */
|
|
287
|
+
private opCount;
|
|
253
288
|
/** Above zero while a rebase applies its pending calls again: they are told as one change at the end. */
|
|
254
289
|
private quiet;
|
|
255
290
|
private readonly listeners;
|
|
256
291
|
constructor(options: StoreOptions<S>);
|
|
292
|
+
/** Winds the default op and batch counters past every id the log holds, and past the horizon (FR-23). */
|
|
293
|
+
private countPastTheLog;
|
|
257
294
|
/**
|
|
258
295
|
* What the enabled modules work out to; every surface reads this one answer.
|
|
259
296
|
*
|
|
@@ -544,6 +581,30 @@ export declare class Store<S extends AnySchema> {
|
|
|
544
581
|
* never flickers through the states in between.
|
|
545
582
|
*/
|
|
546
583
|
rebase(change: Rebase): RebaseResult<S>;
|
|
584
|
+
/**
|
|
585
|
+
* A CLIENT THAT RESYNCED TAKES THE SERVER'S WHOLE STATE (FR-53).
|
|
586
|
+
*
|
|
587
|
+
* `rebase` lands the server's ops on the confirmed prefix this store
|
|
588
|
+
* holds. When that prefix cannot be trusted — this copy drifted, and an
|
|
589
|
+
* op of the server's no longer fits it, or the server compacted past
|
|
590
|
+
* where this client left off, so `/graview/since` cannot bring the ops in
|
|
591
|
+
* between — the client takes the server's graph and log as they are:
|
|
592
|
+
*
|
|
593
|
+
* 1. the ops of the `pending` batches are read off the log as it stands;
|
|
594
|
+
* 2. the log becomes `log` (with its `epochs` and `horizon`, checked as
|
|
595
|
+
* `OperationLog.from` checks them; one that is not intact is refused
|
|
596
|
+
* before anything moves) and the graph becomes `snapshot`, in the
|
|
597
|
+
* server's order — not put back op by op, as `rebase` puts it;
|
|
598
|
+
* 3. the `pending` batches are applied again on top, in the order given,
|
|
599
|
+
* exactly as `rebase` applies them: under the same batch ids, judged
|
|
600
|
+
* and compiled afresh. One that no longer applies is said in `refused`.
|
|
601
|
+
*
|
|
602
|
+
* `drop` names the batches the server has answered or refused: they are
|
|
603
|
+
* not applied again (nor is any batch left unnamed: the log is the
|
|
604
|
+
* server's). Subscribers hear ONE change, the net diff, with the ops this
|
|
605
|
+
* store did not hold before and the re-applied ones.
|
|
606
|
+
*/
|
|
607
|
+
adopt(state: Adopt<S>): AdoptResult<S>;
|
|
547
608
|
/** One pending batch, applied again as it was made: its calls, its undo, or its primitives. */
|
|
548
609
|
private replay;
|
|
549
610
|
snapshot(): GraphSnapshot<NodeOfSchema<S>>;
|