@x12i/memorix-service 3.12.3 → 3.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/README.md +2 -2
  2. package/dist/activity-ui.js +1 -1
  3. package/dist/agent-catalog.d.ts +32 -0
  4. package/dist/agent-catalog.d.ts.map +1 -0
  5. package/dist/agent-catalog.js +80 -0
  6. package/dist/agent-catalog.js.map +1 -0
  7. package/dist/analytics/engine.d.ts.map +1 -1
  8. package/dist/analytics/engine.js +2 -1
  9. package/dist/analytics/engine.js.map +1 -1
  10. package/dist/analytics/state.d.ts +1 -1
  11. package/dist/analytics/tracker.d.ts +2 -0
  12. package/dist/analytics/tracker.d.ts.map +1 -1
  13. package/dist/analytics/tracker.js +15 -8
  14. package/dist/analytics/tracker.js.map +1 -1
  15. package/dist/anomaly/catalog.d.ts +4 -0
  16. package/dist/anomaly/catalog.d.ts.map +1 -0
  17. package/dist/anomaly/catalog.js +315 -0
  18. package/dist/anomaly/catalog.js.map +1 -0
  19. package/dist/anomaly/descriptors.d.ts +11 -0
  20. package/dist/anomaly/descriptors.d.ts.map +1 -0
  21. package/dist/anomaly/descriptors.js +113 -0
  22. package/dist/anomaly/descriptors.js.map +1 -0
  23. package/dist/anomaly/index.d.ts +6 -0
  24. package/dist/anomaly/index.d.ts.map +1 -0
  25. package/dist/anomaly/index.js +5 -0
  26. package/dist/anomaly/index.js.map +1 -0
  27. package/dist/anomaly/records.d.ts +28 -0
  28. package/dist/anomaly/records.d.ts.map +1 -0
  29. package/dist/anomaly/records.js +384 -0
  30. package/dist/anomaly/records.js.map +1 -0
  31. package/dist/anomaly/types.d.ts +116 -0
  32. package/dist/anomaly/types.d.ts.map +1 -0
  33. package/dist/anomaly/types.js +24 -0
  34. package/dist/anomaly/types.js.map +1 -0
  35. package/dist/anomaly/values.d.ts +31 -0
  36. package/dist/anomaly/values.d.ts.map +1 -0
  37. package/dist/anomaly/values.js +171 -0
  38. package/dist/anomaly/values.js.map +1 -0
  39. package/dist/app.d.ts.map +1 -1
  40. package/dist/app.js +34 -1
  41. package/dist/app.js.map +1 -1
  42. package/dist/arrivals-backfill.d.ts +23 -0
  43. package/dist/arrivals-backfill.d.ts.map +1 -0
  44. package/dist/arrivals-backfill.js +132 -0
  45. package/dist/arrivals-backfill.js.map +1 -0
  46. package/dist/arrivals-routes.d.ts +8 -0
  47. package/dist/arrivals-routes.d.ts.map +1 -0
  48. package/dist/arrivals-routes.js +17 -0
  49. package/dist/arrivals-routes.js.map +1 -0
  50. package/dist/arrivals-ui.d.ts +3 -0
  51. package/dist/arrivals-ui.d.ts.map +1 -0
  52. package/dist/arrivals-ui.js +277 -0
  53. package/dist/arrivals-ui.js.map +1 -0
  54. package/dist/catalog-bridge.d.ts +18 -0
  55. package/dist/catalog-bridge.d.ts.map +1 -1
  56. package/dist/catalog-bridge.js +115 -7
  57. package/dist/catalog-bridge.js.map +1 -1
  58. package/dist/catalog-live-ui.js +1 -1
  59. package/dist/content-arrivals-countex.d.ts +90 -0
  60. package/dist/content-arrivals-countex.d.ts.map +1 -0
  61. package/dist/content-arrivals-countex.js +252 -0
  62. package/dist/content-arrivals-countex.js.map +1 -0
  63. package/dist/data-changes-ui.js +1 -1
  64. package/dist/data-changes.d.ts +3 -0
  65. package/dist/data-changes.d.ts.map +1 -1
  66. package/dist/data-changes.js +22 -21
  67. package/dist/data-changes.js.map +1 -1
  68. package/dist/errors.d.ts +6 -1
  69. package/dist/errors.d.ts.map +1 -1
  70. package/dist/errors.js +22 -2
  71. package/dist/errors.js.map +1 -1
  72. package/dist/hooks-live-ui.js +1 -1
  73. package/dist/knowledge-upstream.d.ts +32 -0
  74. package/dist/knowledge-upstream.d.ts.map +1 -1
  75. package/dist/knowledge-upstream.js +86 -2
  76. package/dist/knowledge-upstream.js.map +1 -1
  77. package/dist/land-v2-guards.d.ts +5 -12
  78. package/dist/land-v2-guards.d.ts.map +1 -1
  79. package/dist/land-v2-guards.js +10 -33
  80. package/dist/land-v2-guards.js.map +1 -1
  81. package/dist/live-ops-nav.d.ts.map +1 -1
  82. package/dist/live-ops-nav.js +4 -0
  83. package/dist/live-ops-nav.js.map +1 -1
  84. package/dist/mcp/nexum-tools.d.ts +1 -1
  85. package/dist/mcp/nexum-tools.d.ts.map +1 -1
  86. package/dist/mcp/nexum-tools.js +39 -22
  87. package/dist/mcp/nexum-tools.js.map +1 -1
  88. package/dist/nexum-analysis/enqueue.d.ts.map +1 -1
  89. package/dist/nexum-analysis/enqueue.js +2 -1
  90. package/dist/nexum-analysis/enqueue.js.map +1 -1
  91. package/dist/nexum-analysis/knowledge-read.d.ts +45 -0
  92. package/dist/nexum-analysis/knowledge-read.d.ts.map +1 -0
  93. package/dist/nexum-analysis/knowledge-read.js +26 -0
  94. package/dist/nexum-analysis/knowledge-read.js.map +1 -0
  95. package/dist/nexum-analysis/outbox.d.ts +1 -1
  96. package/dist/nexum-analysis/reconcile.d.ts.map +1 -1
  97. package/dist/nexum-analysis/reconcile.js +3 -2
  98. package/dist/nexum-analysis/reconcile.js.map +1 -1
  99. package/dist/openapi/openapi.json +18354 -17673
  100. package/dist/operational-db.d.ts +2 -2
  101. package/dist/operational-db.d.ts.map +1 -1
  102. package/dist/operational-db.js +8 -11
  103. package/dist/operational-db.js.map +1 -1
  104. package/dist/patches/access.d.ts +15 -0
  105. package/dist/patches/access.d.ts.map +1 -0
  106. package/dist/patches/access.js +27 -0
  107. package/dist/patches/access.js.map +1 -0
  108. package/dist/patches/engine.d.ts +67 -0
  109. package/dist/patches/engine.d.ts.map +1 -0
  110. package/dist/patches/engine.js +966 -0
  111. package/dist/patches/engine.js.map +1 -0
  112. package/dist/patches/guards.d.ts +23 -0
  113. package/dist/patches/guards.d.ts.map +1 -0
  114. package/dist/patches/guards.js +77 -0
  115. package/dist/patches/guards.js.map +1 -0
  116. package/dist/patches/legacy-rows.d.ts +56 -0
  117. package/dist/patches/legacy-rows.d.ts.map +1 -0
  118. package/dist/patches/legacy-rows.js +162 -0
  119. package/dist/patches/legacy-rows.js.map +1 -0
  120. package/dist/patches/ops.d.ts +24 -0
  121. package/dist/patches/ops.d.ts.map +1 -0
  122. package/dist/patches/ops.js +204 -0
  123. package/dist/patches/ops.js.map +1 -0
  124. package/dist/patches/parse.d.ts +5 -0
  125. package/dist/patches/parse.d.ts.map +1 -0
  126. package/dist/patches/parse.js +323 -0
  127. package/dist/patches/parse.js.map +1 -0
  128. package/dist/patches/paths.d.ts +38 -0
  129. package/dist/patches/paths.d.ts.map +1 -0
  130. package/dist/patches/paths.js +204 -0
  131. package/dist/patches/paths.js.map +1 -0
  132. package/dist/patches/service.d.ts +16 -0
  133. package/dist/patches/service.d.ts.map +1 -0
  134. package/dist/patches/service.js +128 -0
  135. package/dist/patches/service.js.map +1 -0
  136. package/dist/patches/store.d.ts +87 -0
  137. package/dist/patches/store.d.ts.map +1 -0
  138. package/dist/patches/store.js +27 -0
  139. package/dist/patches/store.js.map +1 -0
  140. package/dist/patches/types.d.ts +112 -0
  141. package/dist/patches/types.d.ts.map +1 -0
  142. package/dist/patches/types.js +5 -0
  143. package/dist/patches/types.js.map +1 -0
  144. package/dist/platform.d.ts +17 -3
  145. package/dist/platform.d.ts.map +1 -1
  146. package/dist/platform.js +114 -11
  147. package/dist/platform.js.map +1 -1
  148. package/dist/routes/anomaly.d.ts +5 -0
  149. package/dist/routes/anomaly.d.ts.map +1 -0
  150. package/dist/routes/anomaly.js +308 -0
  151. package/dist/routes/anomaly.js.map +1 -0
  152. package/dist/routes/data.d.ts.map +1 -1
  153. package/dist/routes/data.js +252 -210
  154. package/dist/routes/data.js.map +1 -1
  155. package/dist/routes/knowledge.d.ts.map +1 -1
  156. package/dist/routes/knowledge.js +6 -22
  157. package/dist/routes/knowledge.js.map +1 -1
  158. package/dist/routes/memory.d.ts.map +1 -1
  159. package/dist/routes/memory.js +2 -4
  160. package/dist/routes/memory.js.map +1 -1
  161. package/dist/routes/metadata.d.ts.map +1 -1
  162. package/dist/routes/metadata.js +40 -1
  163. package/dist/routes/metadata.js.map +1 -1
  164. package/dist/routes/mgc-landing.d.ts.map +1 -1
  165. package/dist/routes/mgc-landing.js +64 -94
  166. package/dist/routes/mgc-landing.js.map +1 -1
  167. package/dist/routes/patches.d.ts +7 -0
  168. package/dist/routes/patches.d.ts.map +1 -0
  169. package/dist/routes/patches.js +111 -0
  170. package/dist/routes/patches.js.map +1 -0
  171. package/dist/routes/subject-roots-backfill.d.ts +4 -0
  172. package/dist/routes/subject-roots-backfill.d.ts.map +1 -0
  173. package/dist/routes/subject-roots-backfill.js +15 -0
  174. package/dist/routes/subject-roots-backfill.js.map +1 -0
  175. package/dist/routes/workflow.d.ts.map +1 -1
  176. package/dist/routes/workflow.js +4 -10
  177. package/dist/routes/workflow.js.map +1 -1
  178. package/dist/single-read-discriminator.d.ts +17 -0
  179. package/dist/single-read-discriminator.d.ts.map +1 -0
  180. package/dist/single-read-discriminator.js +67 -0
  181. package/dist/single-read-discriminator.js.map +1 -0
  182. package/dist/subject-roots-backfill.d.ts +24 -0
  183. package/dist/subject-roots-backfill.d.ts.map +1 -0
  184. package/dist/subject-roots-backfill.js +133 -0
  185. package/dist/subject-roots-backfill.js.map +1 -0
  186. package/dist/write-precondition.d.ts +5 -1
  187. package/dist/write-precondition.d.ts.map +1 -1
  188. package/dist/write-precondition.js +11 -3
  189. package/dist/write-precondition.js.map +1 -1
  190. package/dist/writes/content-write.d.ts +170 -0
  191. package/dist/writes/content-write.d.ts.map +1 -0
  192. package/dist/writes/content-write.js +569 -0
  193. package/dist/writes/content-write.js.map +1 -0
  194. package/dist/writes/effects.d.ts +13 -0
  195. package/dist/writes/effects.d.ts.map +1 -0
  196. package/dist/writes/effects.js +28 -0
  197. package/dist/writes/effects.js.map +1 -0
  198. package/dist/writes/error-shape.d.ts +11 -0
  199. package/dist/writes/error-shape.d.ts.map +1 -0
  200. package/dist/writes/error-shape.js +100 -0
  201. package/dist/writes/error-shape.js.map +1 -0
  202. package/dist/writes/receipt-store.d.ts +81 -0
  203. package/dist/writes/receipt-store.d.ts.map +1 -0
  204. package/dist/writes/receipt-store.js +171 -0
  205. package/dist/writes/receipt-store.js.map +1 -0
  206. package/dist/writes/worker.d.ts +9 -0
  207. package/dist/writes/worker.d.ts.map +1 -0
  208. package/dist/writes/worker.js +20 -0
  209. package/dist/writes/worker.js.map +1 -0
  210. package/openapi/openapi.json +18354 -17673
  211. package/package.json +4 -4
@@ -0,0 +1,277 @@
1
+ /** HTML for GET /_live/arrivals — hourly new content by object type and content type. */
2
+ export function arrivalsHtml() {
3
+ return `<!DOCTYPE html>
4
+ <html lang="en">
5
+ <head>
6
+ <meta charset="utf-8" />
7
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
8
+ <title>Memorix · Arrivals</title>
9
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
10
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11
+ <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap" rel="stylesheet" />
12
+ <style>
13
+ :root {
14
+ --bg: #0a0c10; --bg-elev: #10141b; --bg-row: #141922; --line: #242b38;
15
+ --text: #e8ebe6; --muted: #8a9288; --dim: #5c645c;
16
+ --ok: #3dba7a; --accent: #c8f082; --accent-ink: #0a0c10;
17
+ --sans: "IBM Plex Sans", system-ui, sans-serif;
18
+ --mono: "IBM Plex Mono", ui-monospace, monospace;
19
+ }
20
+ * { box-sizing: border-box; }
21
+ html, body { height: 100%; margin: 0; }
22
+ body {
23
+ font-family: var(--sans);
24
+ background:
25
+ radial-gradient(1200px 600px at 10% -10%, #1a2214 0%, transparent 55%),
26
+ radial-gradient(900px 500px at 100% 0%, #121820 0%, transparent 50%),
27
+ var(--bg);
28
+ color: var(--text); font-size: 14px; line-height: 1.45;
29
+ }
30
+ a { color: var(--accent); }
31
+ .shell { max-width: 1200px; margin: 0 auto; padding: 36px 28px 64px; }
32
+ header {
33
+ display: flex; align-items: flex-end; justify-content: space-between; gap: 24px;
34
+ margin-bottom: 22px; padding-bottom: 18px; border-bottom: 1px solid var(--line);
35
+ }
36
+ .brand { font-size: 26px; font-weight: 700; letter-spacing: -0.03em; }
37
+ .brand span { color: var(--accent); }
38
+ .sub { margin-top: 8px; color: var(--muted); font-size: 13px; max-width: 68ch; }
39
+ .meta { text-align: right; font-family: var(--mono); font-size: 11px; color: var(--dim); display: grid; gap: 4px; }
40
+ .toolbar { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin-bottom: 16px; }
41
+ .tabs { display: flex; gap: 6px; flex-wrap: wrap; }
42
+ .tab, .btn, select {
43
+ appearance: none; border: 1px solid var(--line); background: var(--bg-row); color: var(--text);
44
+ font: 500 12px/1 var(--sans); padding: 10px 14px; border-radius: 2px;
45
+ }
46
+ .tab { cursor: pointer; text-transform: uppercase; letter-spacing: 0.04em; color: var(--muted); background: transparent; }
47
+ .tab[aria-selected="true"] { background: var(--accent); color: var(--accent-ink); border-color: var(--accent); }
48
+ .btn { cursor: pointer; }
49
+ .btn:hover { border-color: var(--accent); }
50
+ select { min-width: 140px; }
51
+ .summary { display: flex; flex-wrap: wrap; gap: 16px; margin-bottom: 14px; font-family: var(--mono); font-size: 12px; color: var(--muted); }
52
+ .summary strong { color: var(--text); font-weight: 500; }
53
+ .chart {
54
+ display: flex; align-items: flex-end; gap: 3px; height: 72px;
55
+ padding: 8px; margin-bottom: 8px; overflow-x: auto;
56
+ background: var(--bg-elev); border: 1px solid var(--line);
57
+ }
58
+ .bar { flex: 1 0 6px; min-width: 6px; background: var(--accent); opacity: 0.85; }
59
+ .bar.empty { background: var(--line); opacity: 1; height: 2px !important; }
60
+ .chart-caption { font-family: var(--mono); font-size: 11px; color: var(--dim); margin-bottom: 18px; }
61
+ .hour { margin: 0 0 14px; background: var(--bg-elev); border: 1px solid var(--line); }
62
+ .hour h2 {
63
+ margin: 0; padding: 12px 14px; font-size: 14px; font-weight: 600;
64
+ display: flex; justify-content: space-between; gap: 12px;
65
+ border-bottom: 1px solid var(--line);
66
+ }
67
+ .hour h2 span { font-family: var(--mono); font-size: 12px; color: var(--muted); font-weight: 500; }
68
+ .org-label { padding: 8px 14px 0; font-family: var(--mono); font-size: 11px; color: var(--accent); }
69
+ details { border-top: 1px solid var(--line); }
70
+ details summary { cursor: pointer; padding: 10px 14px; list-style: none; display: flex; justify-content: space-between; gap: 12px; }
71
+ details summary::-webkit-details-marker { display: none; }
72
+ details summary:hover { background: var(--bg-row); }
73
+ .ot { font-weight: 600; }
74
+ .counts { font-family: var(--mono); font-size: 12px; color: var(--muted); }
75
+ table { width: 100%; border-collapse: collapse; }
76
+ th, td { text-align: left; padding: 8px 14px; border-top: 1px solid var(--line); }
77
+ th { font-family: var(--mono); font-size: 10px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--dim); font-weight: 500; }
78
+ .num { font-family: var(--mono); font-size: 12px; text-align: right; white-space: nowrap; }
79
+ .mono { font-family: var(--mono); font-size: 12px; }
80
+ .muted { color: var(--muted); }
81
+ .err { color: #e25a5a; margin: 12px 0; }
82
+ footer { margin-top: 28px; color: var(--dim); font-size: 12px; max-width: 78ch; }
83
+ </style>
84
+ </head>
85
+ <body>
86
+ <div class="shell">
87
+ <header>
88
+ <div>
89
+ <div class="brand">Memorix <span>arrivals</span></div>
90
+ <p class="sub">New content by the hour. Each hour lists the object types that received data, and under each object type the content types and how many records were created or updated.</p>
91
+ </div>
92
+ <div class="meta">
93
+ <div><strong>UI</strong> /_live/arrivals</div>
94
+ <div><strong>API</strong> /_live/api/arrivals</div>
95
+ <div><a href="/_live">← live view</a> · <a href="/_live/changes">data changes</a> · <a href="/_live/activity">activity</a></div>
96
+ </div>
97
+ </header>
98
+ <div class="toolbar">
99
+ <nav class="tabs" role="tablist">
100
+ <button class="tab" role="tab" aria-selected="true" data-hours="24">24 hours</button>
101
+ <button class="tab" role="tab" aria-selected="false" data-hours="48">48 hours</button>
102
+ <button class="tab" role="tab" aria-selected="false" data-hours="168">7 days</button>
103
+ </nav>
104
+ <label class="muted">Org
105
+ <select id="org"></select>
106
+ </label>
107
+ <button class="btn" id="refresh" type="button">Refresh</button>
108
+ </div>
109
+ <div class="summary" id="summary"></div>
110
+ <div id="error" class="err" hidden></div>
111
+ <div class="chart" id="chart" hidden></div>
112
+ <div class="chart-caption" id="chart-caption"></div>
113
+ <div id="hours"></div>
114
+ <footer>
115
+ Created is a new record. Updated is a write to a record that already existed. Deletes are omitted.
116
+ Analytics rollup writes are omitted. Earlier hours are filled once from stored timestamps
117
+ (<span class="mono">MEMORIX_ARRIVALS_BACKFILL_HOURS</span>, default 168). That fill can see the latest
118
+ modified hour, so a create and an update in the same hour show as one create.
119
+ <span class="mono">MEMORIX_ARRIVALS_BACKFILL=0</span> counts only writes after this process starts.
120
+ Hours are UTC.
121
+ </footer>
122
+ </div>
123
+ <script>
124
+ const $ = (id) => document.getElementById(id);
125
+ let report = null;
126
+ let hours = 24;
127
+ let timer = null;
128
+
129
+ document.querySelectorAll(".tab").forEach((tab) => {
130
+ tab.addEventListener("click", () => {
131
+ document.querySelectorAll(".tab").forEach((t) => t.setAttribute("aria-selected", "false"));
132
+ tab.setAttribute("aria-selected", "true");
133
+ hours = Number(tab.dataset.hours);
134
+ load();
135
+ });
136
+ });
137
+ $("refresh").onclick = () => load();
138
+ $("org").onchange = () => load();
139
+
140
+ function fmt(n) { return new Intl.NumberFormat().format(n ?? 0); }
141
+ function escapeHtml(s) {
142
+ return String(s ?? "").replace(/[&<>"']/g, (c) => ({
143
+ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;"
144
+ })[c]);
145
+ }
146
+ function hourLabel(key) {
147
+ return key.slice(0, 10) + " " + key.slice(11, 13) + ":00 UTC";
148
+ }
149
+ function writes(row) { return (row.created || 0) + (row.updated || 0); }
150
+
151
+ async function load() {
152
+ $("error").hidden = true;
153
+ const params = new URLSearchParams();
154
+ params.set("hours", String(hours));
155
+ const org = $("org").value;
156
+ if (org && org !== "*") params.set("orgId", org);
157
+ try {
158
+ const res = await fetch("/_live/api/arrivals?" + params.toString());
159
+ const body = await res.json();
160
+ if (!res.ok || body.ok === false) throw new Error(body?.error?.message || ("HTTP " + res.status));
161
+ report = body;
162
+ fillOrgs(body.orgIds || [], org);
163
+ render();
164
+ schedule();
165
+ } catch (e) {
166
+ $("summary").textContent = "";
167
+ $("error").hidden = false;
168
+ $("error").textContent = e.message || String(e);
169
+ }
170
+ }
171
+
172
+ function schedule() {
173
+ if (timer) clearTimeout(timer);
174
+ const wait = report?.backfill?.status === "running" ? 5000 : 30000;
175
+ timer = setTimeout(load, wait);
176
+ }
177
+
178
+ function fillOrgs(orgIds, selected) {
179
+ const sel = $("org");
180
+ const keep = selected || sel.value || "*";
181
+ sel.innerHTML = "";
182
+ const all = document.createElement("option");
183
+ all.value = "*";
184
+ all.textContent = "All orgs";
185
+ sel.appendChild(all);
186
+ for (const id of orgIds) {
187
+ const o = document.createElement("option");
188
+ o.value = id;
189
+ o.textContent = id;
190
+ sel.appendChild(o);
191
+ }
192
+ sel.value = [...sel.options].some((o) => o.value === keep) ? keep : "*";
193
+ }
194
+
195
+ function render() {
196
+ if (!report) return;
197
+ const series = report.series || [];
198
+ let created = 0, updated = 0;
199
+ const ots = new Set();
200
+ const cts = new Set();
201
+ for (const hour of series) {
202
+ created += hour.created || 0;
203
+ updated += hour.updated || 0;
204
+ for (const org of hour.orgs || []) {
205
+ for (const ot of org.objectTypes || []) {
206
+ ots.add(ot.objectType);
207
+ for (const ct of ot.contentTypes || []) cts.add(ot.objectType + "/" + ct.contentType);
208
+ }
209
+ }
210
+ }
211
+ const bf = report.backfill || {};
212
+ const bfText = bf.status === "running"
213
+ ? "history fill running"
214
+ : bf.status === "error"
215
+ ? "history fill incomplete"
216
+ : bf.status === "done"
217
+ ? "history filled through " + (bf.cutoff || "").slice(0, 16) + "Z"
218
+ : bf.status === "skipped"
219
+ ? "history fill off"
220
+ : "history fill idle";
221
+ $("summary").innerHTML =
222
+ "<span>writes <strong>" + fmt(created + updated) + "</strong></span>" +
223
+ "<span>created <strong>" + fmt(created) + "</strong></span>" +
224
+ "<span>updated <strong>" + fmt(updated) + "</strong></span>" +
225
+ "<span>object types <strong>" + fmt(ots.size) + "</strong></span>" +
226
+ "<span>content types <strong>" + fmt(cts.size) + "</strong></span>" +
227
+ "<span>" + escapeHtml(bfText) + "</span>" +
228
+ (report.truncated ? "<span>truncated</span>" : "");
229
+
230
+ const max = Math.max(1, ...series.map(writes));
231
+ const chart = $("chart");
232
+ chart.hidden = series.length === 0;
233
+ chart.innerHTML = series.map((hour) => {
234
+ const n = writes(hour);
235
+ const h = n === 0 ? 2 : Math.max(4, Math.round((n / max) * 56));
236
+ return "<div class='bar" + (n ? "" : " empty") + "' style='height:" + h + "px' title='" +
237
+ escapeHtml(hourLabel(hour.hour) + " · " + n + " writes") + "'></div>";
238
+ }).join("");
239
+ $("chart-caption").textContent = series.length
240
+ ? hourLabel(series[0].hour) + " → " + hourLabel(series[series.length - 1].hour) + " · bar height is writes"
241
+ : "";
242
+
243
+ const active = series.filter((hour) => writes(hour) > 0).reverse();
244
+ const root = $("hours");
245
+ if (!active.length) {
246
+ root.innerHTML = "<p class='muted'>No arrivals in this window yet.</p>";
247
+ return;
248
+ }
249
+ const showOrg = (report.orgId == null) && (report.orgIds || []).length > 1;
250
+ root.innerHTML = active.map((hour) => {
251
+ const body = (hour.orgs || []).map((org) => {
252
+ const label = showOrg ? "<div class='org-label'>" + escapeHtml(org.orgId) + "</div>" : "";
253
+ const blocks = (org.objectTypes || []).map((ot) => {
254
+ const rows = (ot.contentTypes || []).map((ct) =>
255
+ "<tr><td class='mono'>" + escapeHtml(ct.contentType) + "</td>" +
256
+ "<td class='num'>" + fmt(ct.created) + "</td>" +
257
+ "<td class='num'>" + fmt(ct.updated) + "</td>" +
258
+ "<td class='num'>" + fmt(writes(ct)) + "</td></tr>"
259
+ ).join("");
260
+ return "<details open><summary><span class='ot'>" + escapeHtml(ot.objectType) + "</span>" +
261
+ "<span class='counts'>" + fmt(ot.created) + " created · " + fmt(ot.updated) + " updated</span></summary>" +
262
+ "<table><thead><tr><th>Content type</th><th class='num'>Created</th><th class='num'>Updated</th><th class='num'>Writes</th></tr></thead><tbody>" +
263
+ rows + "</tbody></table></details>";
264
+ }).join("");
265
+ return label + blocks;
266
+ }).join("");
267
+ return "<section class='hour'><h2>" + escapeHtml(hourLabel(hour.hour)) +
268
+ "<span>" + fmt(writes(hour)) + " writes</span></h2>" + body + "</section>";
269
+ }).join("");
270
+ }
271
+
272
+ load();
273
+ </script>
274
+ </body>
275
+ </html>`;
276
+ }
277
+ //# sourceMappingURL=arrivals-ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrivals-ui.js","sourceRoot":"","sources":["../src/arrivals-ui.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,MAAM,UAAU,YAAY;IAC1B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAgRD,CAAC;AACT,CAAC"}
@@ -2,6 +2,24 @@ import type { UnifiedMetadataClient } from "@x12i/memorix-metadata-runtime";
2
2
  import type { AbstractWriteCatalog, ReaderMetadataCatalog, WriterMetadataCatalog } from "@x12i/memorix-data";
3
3
  import type { RelationshipMetadataResolver } from "@x12i/memorix-relationships";
4
4
  export type ServiceCatalog = WriterMetadataCatalog & ReaderMetadataCatalog & AbstractWriteCatalog;
5
+ /** Agent whose pack declares the Nexum persist object type. */
6
+ export declare const HOST_KNOWLEDGE_AGENT_ID = "opx";
7
+ /** Object type of persisted knowledge-graph snapshots (`content` / `snapshots`). */
8
+ export declare const HOST_KNOWLEDGE_OBJECT_TYPE = "content";
9
+ /**
10
+ * Reads of the host knowledge object type succeed when the caller agent does
11
+ * not declare it. The caller's own object types stay as declared. A caller
12
+ * that already includes the host agent is unchanged. Writes keep the caller
13
+ * catalog: this wrapper is for the reader only.
14
+ */
15
+ export declare function readerCatalogWithHostKnowledge(caller: ServiceCatalog, hostObjectType: (objectType: string) => ReturnType<ServiceCatalog["getObjectType"]>, callerAgentIds: readonly string[]): ServiceCatalog;
16
+ /**
17
+ * Discriminator values a pack declares for one content type: the discriminator's
18
+ * own allowedValues, else an ungated field enum on the discriminator path.
19
+ * Used to tell readers what to send. getContentProfile does not carry them,
20
+ * so writes do not enforce them.
21
+ */
22
+ export declare function declaredDiscriminatorValues(metadata: UnifiedMetadataClient, agentIds: string[], objectType: string, contentType: string, path: string): string[] | undefined;
5
23
  export declare function catalogFromMetadataClient(metadata: UnifiedMetadataClient, agentIds: string[]): ServiceCatalog;
6
24
  export declare function relationshipMetadataResolver(metadata: UnifiedMetadataClient): RelationshipMetadataResolver;
7
25
  //# sourceMappingURL=catalog-bridge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"catalog-bridge.d.ts","sourceRoot":"","sources":["../src/catalog-bridge.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,KAAK,EAEV,oBAAoB,EAGpB,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAEhF,MAAM,MAAM,cAAc,GAAG,qBAAqB,GAChD,qBAAqB,GACrB,oBAAoB,CAAC;AAsJvB,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,qBAAqB,EAC/B,QAAQ,EAAE,MAAM,EAAE,GACjB,cAAc,CAkDhB;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,qBAAqB,GAC9B,4BAA4B,CAuB9B"}
1
+ {"version":3,"file":"catalog-bridge.d.ts","sourceRoot":"","sources":["../src/catalog-bridge.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,KAAK,EAEV,oBAAoB,EAGpB,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAEhF,MAAM,MAAM,cAAc,GAAG,qBAAqB,GAChD,qBAAqB,GACrB,oBAAoB,CAAC;AAEvB,+DAA+D;AAC/D,eAAO,MAAM,uBAAuB,QAAQ,CAAC;AAE7C,oFAAoF;AACpF,eAAO,MAAM,0BAA0B,YAAY,CAAC;AAEpD;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,cAAc,EACtB,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,UAAU,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,EACnF,cAAc,EAAE,SAAS,MAAM,EAAE,GAChC,cAAc,CAWhB;AAuKD;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,qBAAqB,EAC/B,QAAQ,EAAE,MAAM,EAAE,EAClB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,MAAM,EAAE,GAAG,SAAS,CAyBtB;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,qBAAqB,EAC/B,QAAQ,EAAE,MAAM,EAAE,GACjB,cAAc,CAuFhB;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,qBAAqB,GAC9B,4BAA4B,CAuB9B"}
@@ -1,11 +1,28 @@
1
+ /** Agent whose pack declares the Nexum persist object type. */
2
+ export const HOST_KNOWLEDGE_AGENT_ID = "opx";
3
+ /** Object type of persisted knowledge-graph snapshots (`content` / `snapshots`). */
4
+ export const HOST_KNOWLEDGE_OBJECT_TYPE = "content";
1
5
  /**
2
- * Bridge UnifiedMetadataClient → data-plane catalogs for ops wiring.
3
- *
4
- * Catalog lookups resolve against live installed metadata on every call so
5
- * OrgPorts cache hits do not freeze a pre-install empty object-type map
6
- * (e.g. agent alone after pack install must see new objectTypes).
6
+ * Reads of the host knowledge object type succeed when the caller agent does
7
+ * not declare it. The caller's own object types stay as declared. A caller
8
+ * that already includes the host agent is unchanged. Writes keep the caller
9
+ * catalog: this wrapper is for the reader only.
7
10
  */
8
- import { BUILTIN_CONTENT_PROFILES } from "@x12i/memorix-format/v2";
11
+ export function readerCatalogWithHostKnowledge(caller, hostObjectType, callerAgentIds) {
12
+ if (callerAgentIds.includes(HOST_KNOWLEDGE_AGENT_ID))
13
+ return caller;
14
+ return {
15
+ ...caller,
16
+ getObjectType(objectType) {
17
+ const own = caller.getObjectType(objectType);
18
+ if (own)
19
+ return own;
20
+ if (objectType !== HOST_KNOWLEDGE_OBJECT_TYPE)
21
+ return null;
22
+ return hostObjectType(objectType);
23
+ },
24
+ };
25
+ }
9
26
  function asCategory(v) {
10
27
  if (v === "event" || v === "knowledge" || v === "entity")
11
28
  return v;
@@ -37,6 +54,17 @@ function buildObjectTypes(metadata, agentIds) {
37
54
  ...(Array.isArray(f.enum)
38
55
  ? { enum: f.enum.filter((v) => typeof v === "string") }
39
56
  : {}),
57
+ ...(f.when &&
58
+ typeof f.when === "object" &&
59
+ typeof f.when.path === "string" &&
60
+ typeof f.when.equals === "string"
61
+ ? {
62
+ when: {
63
+ path: f.when.path,
64
+ equals: f.when.equals,
65
+ },
66
+ }
67
+ : {}),
40
68
  ...(f.refersTo && typeof f.refersTo === "object"
41
69
  ? {
42
70
  refersTo: {
@@ -120,13 +148,87 @@ function buildAbstractPlans(metadata, agentIds, objectTypes) {
120
148
  }
121
149
  return abstractPlans;
122
150
  }
151
+ function stringValues(raw) {
152
+ if (!Array.isArray(raw))
153
+ return undefined;
154
+ const out = raw.filter((v) => typeof v === "string" && v.length > 0);
155
+ return out.length ? out : undefined;
156
+ }
157
+ /**
158
+ * Discriminator values a pack declares for one content type: the discriminator's
159
+ * own allowedValues, else an ungated field enum on the discriminator path.
160
+ * Used to tell readers what to send. getContentProfile does not carry them,
161
+ * so writes do not enforce them.
162
+ */
163
+ export function declaredDiscriminatorValues(metadata, agentIds, objectType, contentType, path) {
164
+ const effective = metadata.resolveEffective(agentIds);
165
+ for (const entry of effective.effective ?? []) {
166
+ if (entry.kind !== "object-types")
167
+ continue;
168
+ const def = entry.definition;
169
+ if (String(def.id ?? entry.id) !== objectType)
170
+ continue;
171
+ const ct = Array.isArray(def.contentTypes)
172
+ ? def.contentTypes.find((item) => !!item && typeof item === "object" && item.id === contentType)
173
+ : undefined;
174
+ const own = stringValues(ct?.discriminator?.allowedValues);
175
+ if (own)
176
+ return own;
177
+ if (!Array.isArray(def.fields))
178
+ continue;
179
+ for (const raw of def.fields) {
180
+ if (!raw || typeof raw !== "object")
181
+ continue;
182
+ const f = raw;
183
+ if (f.path !== path || f.when !== undefined)
184
+ continue;
185
+ if (f.contentType !== undefined && f.contentType !== contentType)
186
+ continue;
187
+ const values = stringValues(f.enum);
188
+ if (values)
189
+ return values;
190
+ }
191
+ }
192
+ return undefined;
193
+ }
123
194
  export function catalogFromMetadataClient(metadata, agentIds) {
124
195
  return {
125
196
  getObjectType(objectType) {
126
197
  return buildObjectTypes(metadata, agentIds).get(objectType) ?? null;
127
198
  },
128
199
  getContentProfile(contentType) {
129
- return BUILTIN_CONTENT_PROFILES[contentType];
200
+ const effective = metadata.resolveEffective(agentIds);
201
+ for (const entry of effective.effective ?? []) {
202
+ if (entry.kind !== "object-types")
203
+ continue;
204
+ const raw = entry.definition.contentTypes;
205
+ if (!Array.isArray(raw))
206
+ continue;
207
+ for (const item of raw) {
208
+ if (!item || typeof item !== "object")
209
+ continue;
210
+ const ct = item;
211
+ if (ct.id !== contentType || typeof ct.profile?.allowSnapshotBuckets !== "boolean")
212
+ continue;
213
+ const disc = ct.discriminator;
214
+ return {
215
+ contentType,
216
+ allowSnapshotBuckets: ct.profile.allowSnapshotBuckets,
217
+ ...(disc?.path
218
+ ? {
219
+ discriminator: {
220
+ path: disc.path,
221
+ required: disc.required === true,
222
+ ...(typeof disc.defaultValue === "string" && disc.defaultValue
223
+ ? { defaultValue: disc.defaultValue }
224
+ : {}),
225
+ },
226
+ }
227
+ : {}),
228
+ };
229
+ }
230
+ }
231
+ return undefined;
130
232
  },
131
233
  getAllowedQueryPaths(_objectType, _contentType) {
132
234
  return [
@@ -144,6 +246,12 @@ export function catalogFromMetadataClient(metadata, agentIds) {
144
246
  "data.kind",
145
247
  "_system.modifiedAt",
146
248
  "_system.createdAt",
249
+ "_system.writtenAt",
250
+ "_metadata.execution.runId",
251
+ "_metadata.execution.stepId",
252
+ "writtenAt",
253
+ "subject.recordId",
254
+ "subject.objectType",
147
255
  ];
148
256
  },
149
257
  getAbstractPlan(abstractType) {
@@ -1 +1 @@
1
- {"version":3,"file":"catalog-bridge.js","sourceRoot":"","sources":["../src/catalog-bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalog-bridge.js","sourceRoot":"","sources":["../src/catalog-bridge.ts"],"names":[],"mappings":"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"}
@@ -91,7 +91,7 @@ export function catalogLiveHtml() {
91
91
  <div class="meta">
92
92
  <div><strong>UI</strong> /_live/catalog</div>
93
93
  <div><strong>API</strong> /_live/api/catalog</div>
94
- <div><a href="/_live">← live view</a> · <a href="/_live/activity">activity</a> · <a href="/_live/changes">data changes</a></div>
94
+ <div><a href="/_live">← live view</a> · <a href="/_live/activity">activity</a> · <a href="/_live/arrivals">arrivals</a> · <a href="/_live/changes">data changes</a></div>
95
95
  </div>
96
96
  </header>
97
97
  <div class="toolbar">
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Hourly content arrivals via @x12i/countex.
3
+ *
4
+ * One cell is an org × hour × object type × content type × created|updated.
5
+ * The live writer increments it. A one-time backfill fills earlier hours from
6
+ * stored timestamps. Deletes and analytics rollup writes are not counted.
7
+ */
8
+ import type { MongoClient } from "mongodb";
9
+ import { type WriteEvent } from "./analytics/tracker.js";
10
+ export declare const CONTENT_ARRIVALS_COUNTER_ID = "content_arrivals";
11
+ export declare const CONTENT_ARRIVALS_DB = "memorix_content_arrivals";
12
+ export type ArrivalOp = "created" | "updated";
13
+ export type ArrivalEvent = {
14
+ orgId: string;
15
+ objectType: string;
16
+ contentType: string;
17
+ op: ArrivalOp;
18
+ /** ISO time. The hour bucket is taken from this instant. */
19
+ at: string;
20
+ delta?: number;
21
+ datasourceService?: string;
22
+ };
23
+ export type ArrivalContentType = {
24
+ contentType: string;
25
+ created: number;
26
+ updated: number;
27
+ };
28
+ export type ArrivalObjectType = {
29
+ objectType: string;
30
+ created: number;
31
+ updated: number;
32
+ contentTypes: ArrivalContentType[];
33
+ };
34
+ export type ArrivalOrgHour = {
35
+ orgId: string;
36
+ created: number;
37
+ updated: number;
38
+ objectTypes: ArrivalObjectType[];
39
+ };
40
+ export type ArrivalHour = {
41
+ /** UTC hour key, `YYYY-MM-DDTHH`. */
42
+ hour: string;
43
+ created: number;
44
+ updated: number;
45
+ orgs: ArrivalOrgHour[];
46
+ };
47
+ export type ArrivalsBackfillStatus = {
48
+ status: "idle" | "running" | "done" | "skipped" | "error";
49
+ cutoff: string | null;
50
+ hours: number | null;
51
+ error?: string;
52
+ };
53
+ export type ArrivalsReport = {
54
+ ok: true;
55
+ storage: "memory" | "mongo";
56
+ generatedAt: string;
57
+ hours: number;
58
+ from: string;
59
+ to: string;
60
+ orgId: string | null;
61
+ orgIds: string[];
62
+ truncated: boolean;
63
+ backfill: ArrivalsBackfillStatus;
64
+ series: ArrivalHour[];
65
+ };
66
+ export type ContentArrivals = {
67
+ readonly storage: "memory" | "mongo";
68
+ readonly cutoff: string;
69
+ knownOrgIds(): string[];
70
+ backfillStatus(): ArrivalsBackfillStatus;
71
+ setBackfillStatus(next: ArrivalsBackfillStatus): void;
72
+ /** True after shutdown. Backfill stops between collections. */
73
+ isClosed(): boolean;
74
+ observeWrite(orgId: string, event: WriteEvent): void;
75
+ record(event: ArrivalEvent): void;
76
+ ingestMany(events: ArrivalEvent[]): Promise<void>;
77
+ query(opts?: {
78
+ orgId?: string;
79
+ hours?: number;
80
+ now?: Date;
81
+ orgIds?: string[];
82
+ }): Promise<ArrivalsReport>;
83
+ flush(): Promise<void>;
84
+ shutdown(): Promise<void>;
85
+ };
86
+ export declare function hourKeysEnding(now: Date, hours: number): string[];
87
+ export declare function createContentArrivals(opts?: {
88
+ mongoClient?: MongoClient | null;
89
+ }): Promise<ContentArrivals>;
90
+ //# sourceMappingURL=content-arrivals-countex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-arrivals-countex.d.ts","sourceRoot":"","sources":["../src/content-arrivals-countex.ts"],"names":[],"mappings":"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"}