@x12i/memorix-service 3.7.1 → 3.7.6

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 (140) hide show
  1. package/dist/activity-ring.d.ts +169 -0
  2. package/dist/activity-ring.d.ts.map +1 -0
  3. package/dist/activity-ring.js +234 -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 +41 -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 +899 -0
  12. package/dist/activity-ui.js.map +1 -0
  13. package/dist/app.d.ts.map +1 -1
  14. package/dist/app.js +14 -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.js +1 -1
  20. package/dist/catalog-bridge.js.map +1 -1
  21. package/dist/cli.d.ts.map +1 -1
  22. package/dist/cli.js +4 -0
  23. package/dist/cli.js.map +1 -1
  24. package/dist/connector-catalog.d.ts +1 -1
  25. package/dist/connector-ops/attempt-store.d.ts.map +1 -1
  26. package/dist/connector-ops/attempt-store.js +1 -3
  27. package/dist/connector-ops/attempt-store.js.map +1 -1
  28. package/dist/connector-ops/checkpoint-store.d.ts.map +1 -1
  29. package/dist/connector-ops/checkpoint-store.js +1 -3
  30. package/dist/connector-ops/checkpoint-store.js.map +1 -1
  31. package/dist/connector-ops/override-store.d.ts.map +1 -1
  32. package/dist/connector-ops/override-store.js +1 -3
  33. package/dist/connector-ops/override-store.js.map +1 -1
  34. package/dist/connector-ops/run-store.d.ts.map +1 -1
  35. package/dist/connector-ops/run-store.js +1 -3
  36. package/dist/connector-ops/run-store.js.map +1 -1
  37. package/dist/connector-ops/schedule-lease-store.d.ts.map +1 -1
  38. package/dist/connector-ops/schedule-lease-store.js +1 -3
  39. package/dist/connector-ops/schedule-lease-store.js.map +1 -1
  40. package/dist/data-changes-routes.d.ts +7 -0
  41. package/dist/data-changes-routes.d.ts.map +1 -0
  42. package/dist/data-changes-routes.js +27 -0
  43. package/dist/data-changes-routes.js.map +1 -0
  44. package/dist/data-changes-ui.d.ts +3 -0
  45. package/dist/data-changes-ui.d.ts.map +1 -0
  46. package/dist/data-changes-ui.js +239 -0
  47. package/dist/data-changes-ui.js.map +1 -0
  48. package/dist/data-changes.d.ts +51 -0
  49. package/dist/data-changes.d.ts.map +1 -0
  50. package/dist/data-changes.js +218 -0
  51. package/dist/data-changes.js.map +1 -0
  52. package/dist/errors.d.ts +3 -0
  53. package/dist/errors.d.ts.map +1 -1
  54. package/dist/errors.js +36 -3
  55. package/dist/errors.js.map +1 -1
  56. package/dist/identity-alias.d.ts +12 -0
  57. package/dist/identity-alias.d.ts.map +1 -0
  58. package/dist/identity-alias.js +22 -0
  59. package/dist/identity-alias.js.map +1 -0
  60. package/dist/incremental-state/state-store.d.ts.map +1 -1
  61. package/dist/incremental-state/state-store.js +1 -3
  62. package/dist/incremental-state/state-store.js.map +1 -1
  63. package/dist/integrations/instance-store.d.ts.map +1 -1
  64. package/dist/integrations/instance-store.js +1 -3
  65. package/dist/integrations/instance-store.js.map +1 -1
  66. package/dist/isolation.d.ts.map +1 -1
  67. package/dist/isolation.js +3 -2
  68. package/dist/isolation.js.map +1 -1
  69. package/dist/land-v2-guards.d.ts +22 -0
  70. package/dist/land-v2-guards.d.ts.map +1 -0
  71. package/dist/land-v2-guards.js +57 -0
  72. package/dist/land-v2-guards.js.map +1 -0
  73. package/dist/live.d.ts.map +1 -1
  74. package/dist/nexum-analysis/backfill.d.ts +59 -0
  75. package/dist/nexum-analysis/backfill.d.ts.map +1 -0
  76. package/dist/nexum-analysis/backfill.js +199 -0
  77. package/dist/nexum-analysis/backfill.js.map +1 -0
  78. package/dist/nexum-analysis/enqueue.d.ts +29 -0
  79. package/dist/nexum-analysis/enqueue.d.ts.map +1 -0
  80. package/dist/nexum-analysis/enqueue.js +190 -0
  81. package/dist/nexum-analysis/enqueue.js.map +1 -0
  82. package/dist/nexum-analysis/outbox.d.ts +44 -0
  83. package/dist/nexum-analysis/outbox.d.ts.map +1 -0
  84. package/dist/nexum-analysis/outbox.js +176 -0
  85. package/dist/nexum-analysis/outbox.js.map +1 -0
  86. package/dist/nexum-analysis/policy.d.ts +48 -0
  87. package/dist/nexum-analysis/policy.d.ts.map +1 -0
  88. package/dist/nexum-analysis/policy.js +165 -0
  89. package/dist/nexum-analysis/policy.js.map +1 -0
  90. package/dist/nexum-analysis/reconcile.d.ts +8 -0
  91. package/dist/nexum-analysis/reconcile.d.ts.map +1 -0
  92. package/dist/nexum-analysis/reconcile.js +37 -0
  93. package/dist/nexum-analysis/reconcile.js.map +1 -0
  94. package/dist/openapi/openapi.json +591 -4
  95. package/dist/operational-db.d.ts +6 -0
  96. package/dist/operational-db.d.ts.map +1 -0
  97. package/dist/operational-db.js +22 -0
  98. package/dist/operational-db.js.map +1 -0
  99. package/dist/platform.d.ts +4 -1
  100. package/dist/platform.d.ts.map +1 -1
  101. package/dist/platform.js +67 -14
  102. package/dist/platform.js.map +1 -1
  103. package/dist/request-countex.d.ts +25 -0
  104. package/dist/request-countex.d.ts.map +1 -1
  105. package/dist/request-countex.js +103 -18
  106. package/dist/request-countex.js.map +1 -1
  107. package/dist/restricted-store/object-store.d.ts.map +1 -1
  108. package/dist/restricted-store/object-store.js +1 -3
  109. package/dist/restricted-store/object-store.js.map +1 -1
  110. package/dist/routes/connector-invocations.d.ts.map +1 -1
  111. package/dist/routes/connector-invocations.js +7 -1
  112. package/dist/routes/connector-invocations.js.map +1 -1
  113. package/dist/routes/data.d.ts.map +1 -1
  114. package/dist/routes/data.js +105 -12
  115. package/dist/routes/data.js.map +1 -1
  116. package/dist/routes/knowledge.d.ts +8 -0
  117. package/dist/routes/knowledge.d.ts.map +1 -0
  118. package/dist/routes/knowledge.js +114 -0
  119. package/dist/routes/knowledge.js.map +1 -0
  120. package/dist/routes/memory.d.ts.map +1 -1
  121. package/dist/routes/memory.js +33 -9
  122. package/dist/routes/memory.js.map +1 -1
  123. package/dist/routes/metadata.d.ts.map +1 -1
  124. package/dist/routes/metadata.js +102 -1
  125. package/dist/routes/metadata.js.map +1 -1
  126. package/dist/routes/mgc-landing.d.ts.map +1 -1
  127. package/dist/routes/mgc-landing.js +90 -1
  128. package/dist/routes/mgc-landing.js.map +1 -1
  129. package/dist/routes/operations.d.ts.map +1 -1
  130. package/dist/routes/operations.js +39 -2
  131. package/dist/routes/operations.js.map +1 -1
  132. package/dist/routes/publications.d.ts +4 -0
  133. package/dist/routes/publications.d.ts.map +1 -0
  134. package/dist/routes/publications.js +111 -0
  135. package/dist/routes/publications.js.map +1 -0
  136. package/dist/routes/workflow.d.ts.map +1 -1
  137. package/dist/routes/workflow.js +18 -9
  138. package/dist/routes/workflow.js.map +1 -1
  139. package/openapi/openapi.json +591 -4
  140. package/package.json +5 -5
@@ -0,0 +1,169 @@
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
+ clear: () => void;
135
+ };
136
+ export type ActivityRing = ReturnType<typeof createActivityRing>;
137
+ /** Process-wide ring for memorix-service. */
138
+ export declare const memorixActivityRing: {
139
+ capacity: number;
140
+ recordLand: (partial: Omit<LandActivityEvent, "lane" | "ts"> & {
141
+ ts?: string;
142
+ }) => LandActivityEvent;
143
+ recordIndex: (partial: Omit<IndexActivityEvent, "lane" | "ts"> & {
144
+ ts?: string;
145
+ }) => IndexActivityEvent;
146
+ recordFetch: (partial: Omit<FetchActivityEvent, "lane" | "ts"> & {
147
+ ts?: string;
148
+ }) => FetchActivityEvent;
149
+ list: (lane: ActivityLane, limit?: number) => ActivityEvent[];
150
+ sizes: () => {
151
+ land: number;
152
+ index: number;
153
+ fetch: number;
154
+ };
155
+ series: (minutes?: number) => {
156
+ bucketMinutes: number;
157
+ buckets: Array<{
158
+ minute: string;
159
+ land: number;
160
+ connect: number;
161
+ connectRules: number;
162
+ connectAi: number;
163
+ fetch: number;
164
+ relations: number;
165
+ }>;
166
+ };
167
+ clear: () => void;
168
+ };
169
+ //# 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,234 @@
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 land = [];
90
+ const index = [];
91
+ const fetchLane = [];
92
+ function laneList(lane) {
93
+ if (lane === "land")
94
+ return land;
95
+ if (lane === "index")
96
+ return index;
97
+ return fetchLane;
98
+ }
99
+ function push(event) {
100
+ const list = laneList(event.lane);
101
+ list.push(event);
102
+ while (list.length > capacity)
103
+ list.shift();
104
+ return event;
105
+ }
106
+ function recordLand(partial) {
107
+ return push({
108
+ ...partial,
109
+ lane: "land",
110
+ ts: partial.ts ?? new Date().toISOString(),
111
+ });
112
+ }
113
+ function recordIndex(partial) {
114
+ return push({
115
+ ...partial,
116
+ lane: "index",
117
+ ts: partial.ts ?? new Date().toISOString(),
118
+ });
119
+ }
120
+ function recordFetch(partial) {
121
+ return push({
122
+ ...partial,
123
+ lane: "fetch",
124
+ ts: partial.ts ?? new Date().toISOString(),
125
+ });
126
+ }
127
+ function list(lane, limit = 10_000) {
128
+ const src = laneList(lane);
129
+ const n = Math.min(Math.max(Number(limit) || 10_000, 1), capacity);
130
+ return src.slice(-n).reverse();
131
+ }
132
+ function sizes() {
133
+ return { land: land.length, index: index.length, fetch: fetchLane.length };
134
+ }
135
+ /**
136
+ * Per-minute counts over the last `minutes` (newest last).
137
+ * Also tracks Nexum connect mode splits and relation totals from connected events.
138
+ */
139
+ function series(minutes = 60) {
140
+ const n = Math.min(Math.max(Number(minutes) || 60, 1), 180);
141
+ const now = Date.now();
142
+ const startMs = now - n * 60_000;
143
+ const byKey = new Map();
144
+ const minuteKey = (ts) => {
145
+ const d = new Date(ts);
146
+ if (Number.isNaN(d.getTime()))
147
+ return "";
148
+ return d.toISOString().slice(0, 16); // YYYY-MM-DDTHH:MM
149
+ };
150
+ const ensure = (key) => {
151
+ let b = byKey.get(key);
152
+ if (!b) {
153
+ b = {
154
+ minute: key,
155
+ land: 0,
156
+ connect: 0,
157
+ connectRules: 0,
158
+ connectAi: 0,
159
+ fetch: 0,
160
+ relations: 0,
161
+ };
162
+ byKey.set(key, b);
163
+ }
164
+ return b;
165
+ };
166
+ for (const e of land) {
167
+ const t = Date.parse(e.ts);
168
+ if (!Number.isFinite(t) || t < startMs)
169
+ continue;
170
+ const key = minuteKey(e.ts);
171
+ if (key)
172
+ ensure(key).land += 1;
173
+ }
174
+ for (const e of index) {
175
+ const t = Date.parse(e.ts);
176
+ if (!Number.isFinite(t) || t < startMs)
177
+ continue;
178
+ const key = minuteKey(e.ts);
179
+ if (!key)
180
+ continue;
181
+ const b = ensure(key);
182
+ b.connect += 1;
183
+ if (e.analyzeMode === "rules")
184
+ b.connectRules += 1;
185
+ if (e.analyzeMode === "ai")
186
+ b.connectAi += 1;
187
+ if (e.status === "connected" && typeof e.relationCount === "number") {
188
+ b.relations += e.relationCount;
189
+ }
190
+ }
191
+ for (const e of fetchLane) {
192
+ const t = Date.parse(e.ts);
193
+ if (!Number.isFinite(t) || t < startMs)
194
+ continue;
195
+ const key = minuteKey(e.ts);
196
+ if (key)
197
+ ensure(key).fetch += 1;
198
+ }
199
+ // Fill empty minutes so sparklines stay continuous.
200
+ const buckets = [];
201
+ for (let i = n - 1; i >= 0; i--) {
202
+ const d = new Date(now - i * 60_000);
203
+ const key = d.toISOString().slice(0, 16);
204
+ buckets.push(byKey.get(key) ?? {
205
+ minute: key,
206
+ land: 0,
207
+ connect: 0,
208
+ connectRules: 0,
209
+ connectAi: 0,
210
+ fetch: 0,
211
+ relations: 0,
212
+ });
213
+ }
214
+ return { bucketMinutes: n, buckets };
215
+ }
216
+ function clear() {
217
+ land.length = 0;
218
+ index.length = 0;
219
+ fetchLane.length = 0;
220
+ }
221
+ return {
222
+ capacity,
223
+ recordLand,
224
+ recordIndex,
225
+ recordFetch,
226
+ list,
227
+ sizes,
228
+ series,
229
+ clear,
230
+ };
231
+ }
232
+ /** Process-wide ring for memorix-service. */
233
+ export const memorixActivityRing = createActivityRing();
234
+ //# 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;AAiB/C,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,CA6BjE"}
@@ -0,0 +1,41 @@
1
+ import { memorixActivityRing, } from "./activity-ring.js";
2
+ import { activityHtml } from "./activity-ui.js";
3
+ const LANES = ["land", "index", "fetch"];
4
+ function parseLane(raw) {
5
+ const s = String(raw ?? "land").trim().toLowerCase();
6
+ // UI alias: "connect" → index lane
7
+ if (s === "connect")
8
+ return "index";
9
+ if (LANES.includes(s))
10
+ return s;
11
+ return "land";
12
+ }
13
+ export function registerActivityRoutes(app) {
14
+ app.get("/_live/activity", async (_req, reply) => {
15
+ return reply.type("text/html; charset=utf-8").send(activityHtml());
16
+ });
17
+ app.get("/_live/api/activity", async (req) => {
18
+ const q = req.query;
19
+ const lane = parseLane(q.lane);
20
+ const limit = Math.min(Number(q.limit ?? 10_000) || 10_000, 10_000);
21
+ return {
22
+ ok: true,
23
+ lane,
24
+ sizes: memorixActivityRing.sizes(),
25
+ capacity: memorixActivityRing.capacity,
26
+ entries: memorixActivityRing.list(lane, limit),
27
+ };
28
+ });
29
+ app.get("/_live/api/activity-series", async (req) => {
30
+ const q = req.query;
31
+ const minutes = Math.min(Number(q.minutes ?? 60) || 60, 180);
32
+ const series = memorixActivityRing.series(minutes);
33
+ return {
34
+ ok: true,
35
+ capacity: memorixActivityRing.capacity,
36
+ sizes: memorixActivityRing.sizes(),
37
+ ...series,
38
+ };
39
+ });
40
+ }
41
+ //# 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;AAEhD,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,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,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,MAAM;SACV,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** HTML for GET /_live/activity — land / connect / fetch operator feed. */
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,2EAA2E;AAC3E,wBAAgB,YAAY,IAAI,MAAM,CAg4BrC"}