@x12i/memorix-service 3.7.1 → 3.7.7

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 (169) hide show
  1. package/dist/activity-ring.d.ts +185 -0
  2. package/dist/activity-ring.d.ts.map +1 -0
  3. package/dist/activity-ring.js +249 -0
  4. package/dist/activity-ring.js.map +1 -0
  5. package/dist/activity-routes.d.ts +3 -0
  6. package/dist/activity-routes.d.ts.map +1 -0
  7. package/dist/activity-routes.js +47 -0
  8. package/dist/activity-routes.js.map +1 -0
  9. package/dist/activity-ui.d.ts +3 -0
  10. package/dist/activity-ui.d.ts.map +1 -0
  11. package/dist/activity-ui.js +1105 -0
  12. package/dist/activity-ui.js.map +1 -0
  13. package/dist/app.d.ts.map +1 -1
  14. package/dist/app.js +21 -2
  15. package/dist/app.js.map +1 -1
  16. package/dist/caller-identity.d.ts +3 -2
  17. package/dist/caller-identity.d.ts.map +1 -1
  18. package/dist/caller-identity.js.map +1 -1
  19. package/dist/catalog-bridge.d.ts.map +1 -1
  20. package/dist/catalog-bridge.js +7 -1
  21. package/dist/catalog-bridge.js.map +1 -1
  22. package/dist/cli.d.ts.map +1 -1
  23. package/dist/cli.js +12 -0
  24. package/dist/cli.js.map +1 -1
  25. package/dist/connector-catalog.d.ts +1 -1
  26. package/dist/connector-ops/attempt-store.d.ts.map +1 -1
  27. package/dist/connector-ops/attempt-store.js +1 -3
  28. package/dist/connector-ops/attempt-store.js.map +1 -1
  29. package/dist/connector-ops/checkpoint-store.d.ts.map +1 -1
  30. package/dist/connector-ops/checkpoint-store.js +1 -3
  31. package/dist/connector-ops/checkpoint-store.js.map +1 -1
  32. package/dist/connector-ops/override-store.d.ts.map +1 -1
  33. package/dist/connector-ops/override-store.js +1 -3
  34. package/dist/connector-ops/override-store.js.map +1 -1
  35. package/dist/connector-ops/run-store.d.ts.map +1 -1
  36. package/dist/connector-ops/run-store.js +1 -3
  37. package/dist/connector-ops/run-store.js.map +1 -1
  38. package/dist/connector-ops/schedule-lease-store.d.ts.map +1 -1
  39. package/dist/connector-ops/schedule-lease-store.js +1 -3
  40. package/dist/connector-ops/schedule-lease-store.js.map +1 -1
  41. package/dist/data-changes-routes.d.ts +7 -0
  42. package/dist/data-changes-routes.d.ts.map +1 -0
  43. package/dist/data-changes-routes.js +27 -0
  44. package/dist/data-changes-routes.js.map +1 -0
  45. package/dist/data-changes-ui.d.ts +3 -0
  46. package/dist/data-changes-ui.d.ts.map +1 -0
  47. package/dist/data-changes-ui.js +239 -0
  48. package/dist/data-changes-ui.js.map +1 -0
  49. package/dist/data-changes.d.ts +51 -0
  50. package/dist/data-changes.d.ts.map +1 -0
  51. package/dist/data-changes.js +218 -0
  52. package/dist/data-changes.js.map +1 -0
  53. package/dist/errors.d.ts +3 -0
  54. package/dist/errors.d.ts.map +1 -1
  55. package/dist/errors.js +36 -3
  56. package/dist/errors.js.map +1 -1
  57. package/dist/graph-ui.d.ts +3 -0
  58. package/dist/graph-ui.d.ts.map +1 -0
  59. package/dist/graph-ui.js +676 -0
  60. package/dist/graph-ui.js.map +1 -0
  61. package/dist/identity-alias.d.ts +12 -0
  62. package/dist/identity-alias.d.ts.map +1 -0
  63. package/dist/identity-alias.js +22 -0
  64. package/dist/identity-alias.js.map +1 -0
  65. package/dist/incremental-state/state-store.d.ts.map +1 -1
  66. package/dist/incremental-state/state-store.js +1 -3
  67. package/dist/incremental-state/state-store.js.map +1 -1
  68. package/dist/integrations/instance-store.d.ts.map +1 -1
  69. package/dist/integrations/instance-store.js +1 -3
  70. package/dist/integrations/instance-store.js.map +1 -1
  71. package/dist/isolation.d.ts.map +1 -1
  72. package/dist/isolation.js +3 -2
  73. package/dist/isolation.js.map +1 -1
  74. package/dist/knowledge-upstream.d.ts +13 -0
  75. package/dist/knowledge-upstream.d.ts.map +1 -0
  76. package/dist/knowledge-upstream.js +38 -0
  77. package/dist/knowledge-upstream.js.map +1 -0
  78. package/dist/land-v2-guards.d.ts +22 -0
  79. package/dist/land-v2-guards.d.ts.map +1 -0
  80. package/dist/land-v2-guards.js +57 -0
  81. package/dist/land-v2-guards.js.map +1 -0
  82. package/dist/live-ops-nav.d.ts +2 -0
  83. package/dist/live-ops-nav.d.ts.map +1 -0
  84. package/dist/live-ops-nav.js +53 -0
  85. package/dist/live-ops-nav.js.map +1 -0
  86. package/dist/live.d.ts.map +1 -1
  87. package/dist/mcp/nexum-tools.d.ts +28 -0
  88. package/dist/mcp/nexum-tools.d.ts.map +1 -0
  89. package/dist/mcp/nexum-tools.js +257 -0
  90. package/dist/mcp/nexum-tools.js.map +1 -0
  91. package/dist/mcp/service-public-url.d.ts +7 -0
  92. package/dist/mcp/service-public-url.d.ts.map +1 -0
  93. package/dist/mcp/service-public-url.js +19 -0
  94. package/dist/mcp/service-public-url.js.map +1 -0
  95. package/dist/nexum-analysis/backfill.d.ts +59 -0
  96. package/dist/nexum-analysis/backfill.d.ts.map +1 -0
  97. package/dist/nexum-analysis/backfill.js +199 -0
  98. package/dist/nexum-analysis/backfill.js.map +1 -0
  99. package/dist/nexum-analysis/enqueue.d.ts +29 -0
  100. package/dist/nexum-analysis/enqueue.d.ts.map +1 -0
  101. package/dist/nexum-analysis/enqueue.js +190 -0
  102. package/dist/nexum-analysis/enqueue.js.map +1 -0
  103. package/dist/nexum-analysis/outbox.d.ts +44 -0
  104. package/dist/nexum-analysis/outbox.d.ts.map +1 -0
  105. package/dist/nexum-analysis/outbox.js +176 -0
  106. package/dist/nexum-analysis/outbox.js.map +1 -0
  107. package/dist/nexum-analysis/policy.d.ts +48 -0
  108. package/dist/nexum-analysis/policy.d.ts.map +1 -0
  109. package/dist/nexum-analysis/policy.js +165 -0
  110. package/dist/nexum-analysis/policy.js.map +1 -0
  111. package/dist/nexum-analysis/reconcile.d.ts +8 -0
  112. package/dist/nexum-analysis/reconcile.d.ts.map +1 -0
  113. package/dist/nexum-analysis/reconcile.js +37 -0
  114. package/dist/nexum-analysis/reconcile.js.map +1 -0
  115. package/dist/openapi/openapi.json +591 -4
  116. package/dist/operational-db.d.ts +6 -0
  117. package/dist/operational-db.d.ts.map +1 -0
  118. package/dist/operational-db.js +22 -0
  119. package/dist/operational-db.js.map +1 -0
  120. package/dist/platform.d.ts +4 -1
  121. package/dist/platform.d.ts.map +1 -1
  122. package/dist/platform.js +67 -14
  123. package/dist/platform.js.map +1 -1
  124. package/dist/request-countex.d.ts +25 -0
  125. package/dist/request-countex.d.ts.map +1 -1
  126. package/dist/request-countex.js +103 -18
  127. package/dist/request-countex.js.map +1 -1
  128. package/dist/restricted-store/object-store.d.ts.map +1 -1
  129. package/dist/restricted-store/object-store.js +1 -3
  130. package/dist/restricted-store/object-store.js.map +1 -1
  131. package/dist/routes/connector-invocations.d.ts.map +1 -1
  132. package/dist/routes/connector-invocations.js +7 -1
  133. package/dist/routes/connector-invocations.js.map +1 -1
  134. package/dist/routes/data.d.ts.map +1 -1
  135. package/dist/routes/data.js +113 -14
  136. package/dist/routes/data.js.map +1 -1
  137. package/dist/routes/knowledge.d.ts +8 -0
  138. package/dist/routes/knowledge.d.ts.map +1 -0
  139. package/dist/routes/knowledge.js +86 -0
  140. package/dist/routes/knowledge.js.map +1 -0
  141. package/dist/routes/memory.d.ts.map +1 -1
  142. package/dist/routes/memory.js +33 -9
  143. package/dist/routes/memory.js.map +1 -1
  144. package/dist/routes/metadata.d.ts.map +1 -1
  145. package/dist/routes/metadata.js +102 -1
  146. package/dist/routes/metadata.js.map +1 -1
  147. package/dist/routes/mgc-landing.d.ts.map +1 -1
  148. package/dist/routes/mgc-landing.js +90 -1
  149. package/dist/routes/mgc-landing.js.map +1 -1
  150. package/dist/routes/nexum-mcp.d.ts +9 -0
  151. package/dist/routes/nexum-mcp.d.ts.map +1 -0
  152. package/dist/routes/nexum-mcp.js +95 -0
  153. package/dist/routes/nexum-mcp.js.map +1 -0
  154. package/dist/routes/operations.d.ts.map +1 -1
  155. package/dist/routes/operations.js +39 -2
  156. package/dist/routes/operations.js.map +1 -1
  157. package/dist/routes/publications.d.ts +4 -0
  158. package/dist/routes/publications.d.ts.map +1 -0
  159. package/dist/routes/publications.js +111 -0
  160. package/dist/routes/publications.js.map +1 -0
  161. package/dist/routes/workflow.d.ts.map +1 -1
  162. package/dist/routes/workflow.js +18 -9
  163. package/dist/routes/workflow.js.map +1 -1
  164. package/dist/safe-query.d.ts +28 -0
  165. package/dist/safe-query.d.ts.map +1 -0
  166. package/dist/safe-query.js +104 -0
  167. package/dist/safe-query.js.map +1 -0
  168. package/openapi/openapi.json +591 -4
  169. package/package.json +5 -5
@@ -0,0 +1,185 @@
1
+ /**
2
+ * In-memory operator activity ring — land / index / fetch lanes (no DB).
3
+ * Complements the HTTP traffic ring on /_live; events are Memorix-semantic.
4
+ */
5
+ export type ActivityLane = "land" | "index" | "fetch";
6
+ export type ActivityAddress = {
7
+ objectType: string;
8
+ contentType: string;
9
+ recordId: string;
10
+ };
11
+ export type IndexingSummary = {
12
+ status: "queued";
13
+ policy?: string;
14
+ operationId?: string;
15
+ required?: boolean;
16
+ } | {
17
+ status: "skipped";
18
+ reason?: string;
19
+ policy?: string;
20
+ } | {
21
+ status: string;
22
+ policy?: string;
23
+ operationId?: string;
24
+ reason?: string;
25
+ required?: boolean;
26
+ };
27
+ export type EdgeSummary = {
28
+ from: string;
29
+ to: string;
30
+ label?: string;
31
+ };
32
+ export type LandActivityEvent = {
33
+ lane: "land";
34
+ ts: string;
35
+ orgId: string;
36
+ caller?: string;
37
+ objectType: string;
38
+ contentType: string;
39
+ recordId: string;
40
+ revision: number;
41
+ outcome: "created" | "updated" | string;
42
+ indexing?: IndexingSummary;
43
+ };
44
+ export type IndexActivityEvent = {
45
+ lane: "index";
46
+ ts: string;
47
+ orgId: string;
48
+ operationId?: string;
49
+ status: string;
50
+ policyId?: string;
51
+ runId?: string;
52
+ pipelineId?: string;
53
+ error?: string;
54
+ /** Source subject that triggered analyze (when known). */
55
+ source?: ActivityAddress & {
56
+ revision?: number;
57
+ };
58
+ /** Persisted knowledge-graph snapshot. */
59
+ snapshot?: ActivityAddress & {
60
+ revision?: number;
61
+ };
62
+ nodeCount?: number;
63
+ /** Edges in proposedGraph. */
64
+ edgeCount?: number;
65
+ /** Memorix relationship plans derived from those edges. */
66
+ relationCount?: number;
67
+ /** How Nexum produced the graph: rules (deterministic) vs AI. */
68
+ analyzeMode?: "rules" | "ai" | "unknown";
69
+ analyzeMethod?: string;
70
+ nodeLabels?: string[];
71
+ edgeSummaries?: EdgeSummary[];
72
+ sourceRefs?: string[];
73
+ };
74
+ export type FetchActivityEvent = {
75
+ lane: "fetch";
76
+ ts: string;
77
+ orgId: string;
78
+ caller?: string;
79
+ mode: "get" | "list";
80
+ objectType: string;
81
+ contentType: string;
82
+ recordId?: string;
83
+ hit: boolean;
84
+ count?: number;
85
+ knowledgeGraph?: boolean;
86
+ };
87
+ export type ActivityEvent = LandActivityEvent | IndexActivityEvent | FetchActivityEvent;
88
+ export declare function summarizeProposedGraph(proposedGraph: unknown, caps?: {
89
+ maxNodes?: number;
90
+ maxEdges?: number;
91
+ }): {
92
+ nodeCount: number;
93
+ edgeCount: number;
94
+ nodeLabels: string[];
95
+ edgeSummaries: EdgeSummary[];
96
+ };
97
+ /** Classify Nexum analyze path for operator UI (rules vs AI). */
98
+ export declare function classifyNexumAnalyzeMode(diagnostics?: Record<string, unknown> | null): {
99
+ mode: "rules" | "ai" | "unknown";
100
+ method?: string;
101
+ };
102
+ export declare function recordLooksLikeKnowledgeGraph(record: unknown): boolean;
103
+ export declare function createActivityRing(opts?: {
104
+ capacity?: number;
105
+ }): {
106
+ capacity: number;
107
+ recordLand: (partial: Omit<LandActivityEvent, "lane" | "ts"> & {
108
+ ts?: string;
109
+ }) => LandActivityEvent;
110
+ recordIndex: (partial: Omit<IndexActivityEvent, "lane" | "ts"> & {
111
+ ts?: string;
112
+ }) => IndexActivityEvent;
113
+ recordFetch: (partial: Omit<FetchActivityEvent, "lane" | "ts"> & {
114
+ ts?: string;
115
+ }) => FetchActivityEvent;
116
+ list: (lane: ActivityLane, limit?: number) => ActivityEvent[];
117
+ sizes: () => {
118
+ land: number;
119
+ index: number;
120
+ fetch: number;
121
+ };
122
+ series: (minutes?: number) => {
123
+ bucketMinutes: number;
124
+ buckets: Array<{
125
+ minute: string;
126
+ land: number;
127
+ connect: number;
128
+ connectRules: number;
129
+ connectAi: number;
130
+ fetch: number;
131
+ relations: number;
132
+ }>;
133
+ };
134
+ freshness: () => {
135
+ startedAt: string;
136
+ latest: {
137
+ land: string | null;
138
+ index: string | null;
139
+ fetch: string | null;
140
+ };
141
+ };
142
+ clear: () => void;
143
+ };
144
+ export type ActivityRing = ReturnType<typeof createActivityRing>;
145
+ /** Process-wide ring for memorix-service. */
146
+ export declare const memorixActivityRing: {
147
+ capacity: number;
148
+ recordLand: (partial: Omit<LandActivityEvent, "lane" | "ts"> & {
149
+ ts?: string;
150
+ }) => LandActivityEvent;
151
+ recordIndex: (partial: Omit<IndexActivityEvent, "lane" | "ts"> & {
152
+ ts?: string;
153
+ }) => IndexActivityEvent;
154
+ recordFetch: (partial: Omit<FetchActivityEvent, "lane" | "ts"> & {
155
+ ts?: string;
156
+ }) => FetchActivityEvent;
157
+ list: (lane: ActivityLane, limit?: number) => ActivityEvent[];
158
+ sizes: () => {
159
+ land: number;
160
+ index: number;
161
+ fetch: number;
162
+ };
163
+ series: (minutes?: number) => {
164
+ bucketMinutes: number;
165
+ buckets: Array<{
166
+ minute: string;
167
+ land: number;
168
+ connect: number;
169
+ connectRules: number;
170
+ connectAi: number;
171
+ fetch: number;
172
+ relations: number;
173
+ }>;
174
+ };
175
+ freshness: () => {
176
+ startedAt: string;
177
+ latest: {
178
+ land: string | null;
179
+ index: string | null;
180
+ fetch: string | null;
181
+ };
182
+ };
183
+ clear: () => void;
184
+ };
185
+ //# sourceMappingURL=activity-ring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity-ring.d.ts","sourceRoot":"","sources":["../src/activity-ring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,249 @@
1
+ /**
2
+ * In-memory operator activity ring — land / index / fetch lanes (no DB).
3
+ * Complements the HTTP traffic ring on /_live; events are Memorix-semantic.
4
+ */
5
+ const DEFAULT_CAPACITY = 10_000;
6
+ const MAX_NODE_LABELS = 30;
7
+ const MAX_EDGE_SUMMARIES = 20;
8
+ export function summarizeProposedGraph(proposedGraph, caps) {
9
+ const maxNodes = caps?.maxNodes ?? MAX_NODE_LABELS;
10
+ const maxEdges = caps?.maxEdges ?? MAX_EDGE_SUMMARIES;
11
+ const pg = proposedGraph && typeof proposedGraph === "object" && !Array.isArray(proposedGraph)
12
+ ? proposedGraph
13
+ : null;
14
+ const nodes = Array.isArray(pg?.nodes) ? pg.nodes : [];
15
+ const edges = Array.isArray(pg?.edges) ? pg.edges : [];
16
+ const nodeLabels = [];
17
+ for (const raw of nodes) {
18
+ if (nodeLabels.length >= maxNodes)
19
+ break;
20
+ if (!raw || typeof raw !== "object" || Array.isArray(raw))
21
+ continue;
22
+ const o = raw;
23
+ const label = String(o.label ?? o.id ?? "").trim();
24
+ if (label)
25
+ nodeLabels.push(label);
26
+ }
27
+ const edgeSummaries = [];
28
+ for (const raw of edges) {
29
+ if (edgeSummaries.length >= maxEdges)
30
+ break;
31
+ if (!raw || typeof raw !== "object" || Array.isArray(raw))
32
+ continue;
33
+ const o = raw;
34
+ const from = String(o.from ?? o.source ?? o.fromRecordId ?? o.src ?? "").trim();
35
+ const to = String(o.to ?? o.target ?? o.toRecordId ?? o.dst ?? "").trim();
36
+ if (!from || !to)
37
+ continue;
38
+ const labelRaw = o.label ?? o.type ?? o.kind;
39
+ const label = typeof labelRaw === "string" && labelRaw.trim()
40
+ ? labelRaw.trim()
41
+ : undefined;
42
+ edgeSummaries.push(label ? { from, to, label } : { from, to });
43
+ }
44
+ return {
45
+ nodeCount: nodes.length,
46
+ edgeCount: edges.length,
47
+ nodeLabels,
48
+ edgeSummaries,
49
+ };
50
+ }
51
+ /** Classify Nexum analyze path for operator UI (rules vs AI). */
52
+ export function classifyNexumAnalyzeMode(diagnostics) {
53
+ if (!diagnostics || typeof diagnostics !== "object") {
54
+ return { mode: "unknown" };
55
+ }
56
+ const method = String(diagnostics.method ?? "").trim();
57
+ const methodLower = method.toLowerCase();
58
+ if (diagnostics.ai === true ||
59
+ diagnostics.semanticExtraction === true ||
60
+ diagnostics.llm === true) {
61
+ return { mode: "ai", method: method || undefined };
62
+ }
63
+ if (methodLower === "deterministic" ||
64
+ methodLower.includes("heuristic") ||
65
+ methodLower === "rules") {
66
+ return { mode: "rules", method };
67
+ }
68
+ const blob = JSON.stringify(diagnostics).toLowerCase();
69
+ if (/\b(llm|openai|anthropic|semanticExtraction|ai-profile|model)\b/.test(blob)) {
70
+ return { mode: "ai", method: method || undefined };
71
+ }
72
+ if (method)
73
+ return { mode: "unknown", method };
74
+ return { mode: "unknown" };
75
+ }
76
+ function isKnowledgeGraphRecord(record) {
77
+ if (!record || typeof record !== "object" || Array.isArray(record))
78
+ return false;
79
+ const data = record.data;
80
+ if (!data || typeof data !== "object" || Array.isArray(data))
81
+ return false;
82
+ return data.kind === "knowledge-graph";
83
+ }
84
+ export function recordLooksLikeKnowledgeGraph(record) {
85
+ return isKnowledgeGraphRecord(record);
86
+ }
87
+ export function createActivityRing(opts) {
88
+ const capacity = opts?.capacity ?? DEFAULT_CAPACITY;
89
+ const startedAt = new Date().toISOString();
90
+ const land = [];
91
+ const index = [];
92
+ const fetchLane = [];
93
+ function newestTs(list) {
94
+ return list.length ? list[list.length - 1].ts : null;
95
+ }
96
+ function freshness() {
97
+ return {
98
+ startedAt,
99
+ latest: {
100
+ land: newestTs(land),
101
+ index: newestTs(index),
102
+ fetch: newestTs(fetchLane),
103
+ },
104
+ };
105
+ }
106
+ function laneList(lane) {
107
+ if (lane === "land")
108
+ return land;
109
+ if (lane === "index")
110
+ return index;
111
+ return fetchLane;
112
+ }
113
+ function push(event) {
114
+ const list = laneList(event.lane);
115
+ list.push(event);
116
+ while (list.length > capacity)
117
+ list.shift();
118
+ return event;
119
+ }
120
+ function recordLand(partial) {
121
+ return push({
122
+ ...partial,
123
+ lane: "land",
124
+ ts: partial.ts ?? new Date().toISOString(),
125
+ });
126
+ }
127
+ function recordIndex(partial) {
128
+ return push({
129
+ ...partial,
130
+ lane: "index",
131
+ ts: partial.ts ?? new Date().toISOString(),
132
+ });
133
+ }
134
+ function recordFetch(partial) {
135
+ return push({
136
+ ...partial,
137
+ lane: "fetch",
138
+ ts: partial.ts ?? new Date().toISOString(),
139
+ });
140
+ }
141
+ function list(lane, limit = 10_000) {
142
+ const src = laneList(lane);
143
+ const n = Math.min(Math.max(Number(limit) || 10_000, 1), capacity);
144
+ return src.slice(-n).reverse();
145
+ }
146
+ function sizes() {
147
+ return { land: land.length, index: index.length, fetch: fetchLane.length };
148
+ }
149
+ /**
150
+ * Per-minute counts over the last `minutes` (newest last).
151
+ * Also tracks Nexum connect mode splits and relation totals from connected events.
152
+ */
153
+ function series(minutes = 60) {
154
+ const n = Math.min(Math.max(Number(minutes) || 60, 1), 180);
155
+ const now = Date.now();
156
+ const startMs = now - n * 60_000;
157
+ const byKey = new Map();
158
+ const minuteKey = (ts) => {
159
+ const d = new Date(ts);
160
+ if (Number.isNaN(d.getTime()))
161
+ return "";
162
+ return d.toISOString().slice(0, 16); // YYYY-MM-DDTHH:MM
163
+ };
164
+ const ensure = (key) => {
165
+ let b = byKey.get(key);
166
+ if (!b) {
167
+ b = {
168
+ minute: key,
169
+ land: 0,
170
+ connect: 0,
171
+ connectRules: 0,
172
+ connectAi: 0,
173
+ fetch: 0,
174
+ relations: 0,
175
+ };
176
+ byKey.set(key, b);
177
+ }
178
+ return b;
179
+ };
180
+ for (const e of land) {
181
+ const t = Date.parse(e.ts);
182
+ if (!Number.isFinite(t) || t < startMs)
183
+ continue;
184
+ const key = minuteKey(e.ts);
185
+ if (key)
186
+ ensure(key).land += 1;
187
+ }
188
+ for (const e of index) {
189
+ const t = Date.parse(e.ts);
190
+ if (!Number.isFinite(t) || t < startMs)
191
+ continue;
192
+ const key = minuteKey(e.ts);
193
+ if (!key)
194
+ continue;
195
+ const b = ensure(key);
196
+ b.connect += 1;
197
+ if (e.analyzeMode === "rules")
198
+ b.connectRules += 1;
199
+ if (e.analyzeMode === "ai")
200
+ b.connectAi += 1;
201
+ if (e.status === "connected" && typeof e.relationCount === "number") {
202
+ b.relations += e.relationCount;
203
+ }
204
+ }
205
+ for (const e of fetchLane) {
206
+ const t = Date.parse(e.ts);
207
+ if (!Number.isFinite(t) || t < startMs)
208
+ continue;
209
+ const key = minuteKey(e.ts);
210
+ if (key)
211
+ ensure(key).fetch += 1;
212
+ }
213
+ // Fill empty minutes so sparklines stay continuous.
214
+ const buckets = [];
215
+ for (let i = n - 1; i >= 0; i--) {
216
+ const d = new Date(now - i * 60_000);
217
+ const key = d.toISOString().slice(0, 16);
218
+ buckets.push(byKey.get(key) ?? {
219
+ minute: key,
220
+ land: 0,
221
+ connect: 0,
222
+ connectRules: 0,
223
+ connectAi: 0,
224
+ fetch: 0,
225
+ relations: 0,
226
+ });
227
+ }
228
+ return { bucketMinutes: n, buckets };
229
+ }
230
+ function clear() {
231
+ land.length = 0;
232
+ index.length = 0;
233
+ fetchLane.length = 0;
234
+ }
235
+ return {
236
+ capacity,
237
+ recordLand,
238
+ recordIndex,
239
+ recordFetch,
240
+ list,
241
+ sizes,
242
+ series,
243
+ freshness,
244
+ clear,
245
+ };
246
+ }
247
+ /** Process-wide ring for memorix-service. */
248
+ export const memorixActivityRing = createActivityRing();
249
+ //# sourceMappingURL=activity-ring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity-ring.js","sourceRoot":"","sources":["../src/activity-ring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { FastifyInstance } from "fastify";
2
+ export declare function registerActivityRoutes(app: FastifyInstance): void;
3
+ //# sourceMappingURL=activity-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity-routes.d.ts","sourceRoot":"","sources":["../src/activity-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAkB/C,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,CAmCjE"}
@@ -0,0 +1,47 @@
1
+ import { memorixActivityRing, } from "./activity-ring.js";
2
+ import { activityHtml } from "./activity-ui.js";
3
+ import { graphHtml } from "./graph-ui.js";
4
+ const LANES = ["land", "index", "fetch"];
5
+ function parseLane(raw) {
6
+ const s = String(raw ?? "land").trim().toLowerCase();
7
+ // UI alias: "connect" → index lane
8
+ if (s === "connect")
9
+ return "index";
10
+ if (LANES.includes(s))
11
+ return s;
12
+ return "land";
13
+ }
14
+ export function registerActivityRoutes(app) {
15
+ app.get("/_live/activity", async (_req, reply) => {
16
+ return reply.type("text/html; charset=utf-8").send(activityHtml());
17
+ });
18
+ app.get("/_live/graph", async (_req, reply) => {
19
+ return reply.type("text/html; charset=utf-8").send(graphHtml());
20
+ });
21
+ app.get("/_live/api/activity", async (req) => {
22
+ const q = req.query;
23
+ const lane = parseLane(q.lane);
24
+ const limit = Math.min(Number(q.limit ?? 10_000) || 10_000, 10_000);
25
+ return {
26
+ ok: true,
27
+ lane,
28
+ sizes: memorixActivityRing.sizes(),
29
+ capacity: memorixActivityRing.capacity,
30
+ ...memorixActivityRing.freshness(),
31
+ entries: memorixActivityRing.list(lane, limit),
32
+ };
33
+ });
34
+ app.get("/_live/api/activity-series", async (req) => {
35
+ const q = req.query;
36
+ const minutes = Math.min(Number(q.minutes ?? 60) || 60, 180);
37
+ const series = memorixActivityRing.series(minutes);
38
+ return {
39
+ ok: true,
40
+ capacity: memorixActivityRing.capacity,
41
+ sizes: memorixActivityRing.sizes(),
42
+ ...memorixActivityRing.freshness(),
43
+ ...series,
44
+ };
45
+ });
46
+ }
47
+ //# sourceMappingURL=activity-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity-routes.js","sourceRoot":"","sources":["../src/activity-routes.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,GAEpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,KAAK,GAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAEzD,SAAS,SAAS,CAAC,GAAY;IAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrD,mCAAmC;IACnC,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IACpC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAiB,CAAC;QAAE,OAAO,CAAiB,CAAC;IAChE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,GAAoB;IACzD,GAAG,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QAC/C,OAAO,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5C,OAAO,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,qBAAqB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3C,MAAM,CAAC,GAAG,GAAG,CAAC,KAA0C,CAAC;QACzD,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,MAAM,EAAE,MAAM,CAAC,CAAC;QACpE,OAAO;YACL,EAAE,EAAE,IAAI;YACR,IAAI;YACJ,KAAK,EAAE,mBAAmB,CAAC,KAAK,EAAE;YAClC,QAAQ,EAAE,mBAAmB,CAAC,QAAQ;YACtC,GAAG,mBAAmB,CAAC,SAAS,EAAE;YAClC,OAAO,EAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;SAC/C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,4BAA4B,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAClD,MAAM,CAAC,GAAG,GAAG,CAAC,KAA6B,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnD,OAAO;YACL,EAAE,EAAE,IAAI;YACR,QAAQ,EAAE,mBAAmB,CAAC,QAAQ;YACtC,KAAK,EAAE,mBAAmB,CAAC,KAAK,EAAE;YAClC,GAAG,mBAAmB,CAAC,SAAS,EAAE;YAClC,GAAG,MAAM;SACV,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** HTML for GET /_live/activity — pushed / processed / fetched operator feeds. */
2
+ export declare function activityHtml(): string;
3
+ //# sourceMappingURL=activity-ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity-ui.d.ts","sourceRoot":"","sources":["../src/activity-ui.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,wBAAgB,YAAY,IAAI,MAAM,CA8kCrC"}