@soulcraft/sdk 1.6.2 → 2.0.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 (176) hide show
  1. package/dist/client/create-client-sdk.d.ts +16 -2
  2. package/dist/client/create-client-sdk.d.ts.map +1 -1
  3. package/dist/client/create-client-sdk.js +2 -7
  4. package/dist/client/create-client-sdk.js.map +1 -1
  5. package/dist/client/index.d.ts +48 -37
  6. package/dist/client/index.d.ts.map +1 -1
  7. package/dist/client/index.js +61 -42
  8. package/dist/client/index.js.map +1 -1
  9. package/dist/client/namespace-proxy.d.ts +108 -0
  10. package/dist/client/namespace-proxy.d.ts.map +1 -0
  11. package/dist/client/namespace-proxy.js +151 -0
  12. package/dist/client/namespace-proxy.js.map +1 -0
  13. package/dist/index.d.ts +3 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/modules/app-context/index.d.ts +214 -0
  17. package/dist/modules/app-context/index.d.ts.map +1 -0
  18. package/dist/modules/app-context/index.js +569 -0
  19. package/dist/modules/app-context/index.js.map +1 -0
  20. package/dist/modules/auth/products.d.ts +208 -0
  21. package/dist/modules/auth/products.d.ts.map +1 -0
  22. package/dist/modules/auth/products.js +165 -0
  23. package/dist/modules/auth/products.js.map +1 -0
  24. package/dist/namespaces.d.ts +2942 -0
  25. package/dist/namespaces.d.ts.map +1 -0
  26. package/dist/namespaces.js +37 -0
  27. package/dist/namespaces.js.map +1 -0
  28. package/dist/rpc.d.ts +156 -0
  29. package/dist/rpc.d.ts.map +1 -0
  30. package/dist/rpc.js +26 -0
  31. package/dist/rpc.js.map +1 -0
  32. package/dist/server/create-sdk.d.ts.map +1 -1
  33. package/dist/server/create-sdk.js +3 -13
  34. package/dist/server/create-sdk.js.map +1 -1
  35. package/dist/server/handlers/annotations.d.ts +52 -0
  36. package/dist/server/handlers/annotations.d.ts.map +1 -0
  37. package/dist/server/handlers/annotations.js +204 -0
  38. package/dist/server/handlers/annotations.js.map +1 -0
  39. package/dist/server/handlers/auth.d.ts +53 -0
  40. package/dist/server/handlers/auth.d.ts.map +1 -0
  41. package/dist/server/handlers/auth.js +66 -0
  42. package/dist/server/handlers/auth.js.map +1 -0
  43. package/dist/server/handlers/certification.d.ts +32 -0
  44. package/dist/server/handlers/certification.d.ts.map +1 -0
  45. package/dist/server/handlers/certification.js +253 -0
  46. package/dist/server/handlers/certification.js.map +1 -0
  47. package/dist/server/handlers/chat/conversations.d.ts +91 -0
  48. package/dist/server/handlers/chat/conversations.d.ts.map +1 -0
  49. package/dist/server/handlers/chat/conversations.js +314 -0
  50. package/dist/server/handlers/chat/conversations.js.map +1 -0
  51. package/dist/server/handlers/chat/delegator.d.ts +144 -0
  52. package/dist/server/handlers/chat/delegator.d.ts.map +1 -0
  53. package/dist/server/handlers/chat/delegator.js +431 -0
  54. package/dist/server/handlers/chat/delegator.js.map +1 -0
  55. package/dist/server/handlers/chat/engine.d.ts +81 -0
  56. package/dist/server/handlers/chat/engine.d.ts.map +1 -0
  57. package/dist/server/handlers/chat/engine.js +442 -0
  58. package/dist/server/handlers/chat/engine.js.map +1 -0
  59. package/dist/server/handlers/chat/executor.d.ts +65 -0
  60. package/dist/server/handlers/chat/executor.d.ts.map +1 -0
  61. package/dist/server/handlers/chat/executor.js +375 -0
  62. package/dist/server/handlers/chat/executor.js.map +1 -0
  63. package/dist/server/handlers/chat/index.d.ts +62 -0
  64. package/dist/server/handlers/chat/index.d.ts.map +1 -0
  65. package/dist/server/handlers/chat/index.js +182 -0
  66. package/dist/server/handlers/chat/index.js.map +1 -0
  67. package/dist/server/handlers/chat/memory.d.ts +91 -0
  68. package/dist/server/handlers/chat/memory.d.ts.map +1 -0
  69. package/dist/server/handlers/chat/memory.js +293 -0
  70. package/dist/server/handlers/chat/memory.js.map +1 -0
  71. package/dist/server/handlers/chat/models.d.ts +180 -0
  72. package/dist/server/handlers/chat/models.d.ts.map +1 -0
  73. package/dist/server/handlers/chat/models.js +304 -0
  74. package/dist/server/handlers/chat/models.js.map +1 -0
  75. package/dist/server/handlers/chat/planner.d.ts +116 -0
  76. package/dist/server/handlers/chat/planner.d.ts.map +1 -0
  77. package/dist/server/handlers/chat/planner.js +344 -0
  78. package/dist/server/handlers/chat/planner.js.map +1 -0
  79. package/dist/server/handlers/chat/types.d.ts +500 -0
  80. package/dist/server/handlers/chat/types.d.ts.map +1 -0
  81. package/dist/server/handlers/chat/types.js +11 -0
  82. package/dist/server/handlers/chat/types.js.map +1 -0
  83. package/dist/server/handlers/collections.d.ts +67 -0
  84. package/dist/server/handlers/collections.d.ts.map +1 -0
  85. package/dist/server/handlers/collections.js +484 -0
  86. package/dist/server/handlers/collections.js.map +1 -0
  87. package/dist/server/handlers/commerce.d.ts +106 -0
  88. package/dist/server/handlers/commerce.d.ts.map +1 -0
  89. package/dist/server/handlers/commerce.js +62 -0
  90. package/dist/server/handlers/commerce.js.map +1 -0
  91. package/dist/server/handlers/config.d.ts +112 -0
  92. package/dist/server/handlers/config.d.ts.map +1 -0
  93. package/dist/server/handlers/config.js +122 -0
  94. package/dist/server/handlers/config.js.map +1 -0
  95. package/dist/server/handlers/export.d.ts +72 -0
  96. package/dist/server/handlers/export.d.ts.map +1 -0
  97. package/dist/server/handlers/export.js +175 -0
  98. package/dist/server/handlers/export.js.map +1 -0
  99. package/dist/server/handlers/formats.d.ts +77 -0
  100. package/dist/server/handlers/formats.d.ts.map +1 -0
  101. package/dist/server/handlers/formats.js +65 -0
  102. package/dist/server/handlers/formats.js.map +1 -0
  103. package/dist/server/handlers/graph.d.ts +31 -0
  104. package/dist/server/handlers/graph.d.ts.map +1 -0
  105. package/dist/server/handlers/graph.js +490 -0
  106. package/dist/server/handlers/graph.js.map +1 -0
  107. package/dist/server/handlers/import.d.ts +96 -0
  108. package/dist/server/handlers/import.d.ts.map +1 -0
  109. package/dist/server/handlers/import.js +108 -0
  110. package/dist/server/handlers/import.js.map +1 -0
  111. package/dist/server/handlers/index.d.ts +68 -0
  112. package/dist/server/handlers/index.d.ts.map +1 -0
  113. package/dist/server/handlers/index.js +71 -0
  114. package/dist/server/handlers/index.js.map +1 -0
  115. package/dist/server/handlers/media.d.ts +76 -0
  116. package/dist/server/handlers/media.d.ts.map +1 -0
  117. package/dist/server/handlers/media.js +53 -0
  118. package/dist/server/handlers/media.js.map +1 -0
  119. package/dist/server/handlers/project.d.ts +45 -0
  120. package/dist/server/handlers/project.d.ts.map +1 -0
  121. package/dist/server/handlers/project.js +181 -0
  122. package/dist/server/handlers/project.js.map +1 -0
  123. package/dist/server/handlers/publish.d.ts +102 -0
  124. package/dist/server/handlers/publish.d.ts.map +1 -0
  125. package/dist/server/handlers/publish.js +130 -0
  126. package/dist/server/handlers/publish.js.map +1 -0
  127. package/dist/server/handlers/pulse.d.ts +39 -0
  128. package/dist/server/handlers/pulse.d.ts.map +1 -0
  129. package/dist/server/handlers/pulse.js +78 -0
  130. package/dist/server/handlers/pulse.js.map +1 -0
  131. package/dist/server/handlers/realtime.d.ts +55 -0
  132. package/dist/server/handlers/realtime.d.ts.map +1 -0
  133. package/dist/server/handlers/realtime.js +49 -0
  134. package/dist/server/handlers/realtime.js.map +1 -0
  135. package/dist/server/handlers/search.d.ts +21 -0
  136. package/dist/server/handlers/search.d.ts.map +1 -0
  137. package/dist/server/handlers/search.js +237 -0
  138. package/dist/server/handlers/search.js.map +1 -0
  139. package/dist/server/handlers/session.d.ts +47 -0
  140. package/dist/server/handlers/session.d.ts.map +1 -0
  141. package/dist/server/handlers/session.js +286 -0
  142. package/dist/server/handlers/session.js.map +1 -0
  143. package/dist/server/handlers/settings.d.ts +97 -0
  144. package/dist/server/handlers/settings.d.ts.map +1 -0
  145. package/dist/server/handlers/settings.js +131 -0
  146. package/dist/server/handlers/settings.js.map +1 -0
  147. package/dist/server/handlers/workspace.d.ts +78 -0
  148. package/dist/server/handlers/workspace.d.ts.map +1 -0
  149. package/dist/server/handlers/workspace.js +270 -0
  150. package/dist/server/handlers/workspace.js.map +1 -0
  151. package/dist/server/hono-router.d.ts +66 -0
  152. package/dist/server/hono-router.d.ts.map +1 -0
  153. package/dist/server/hono-router.js +203 -0
  154. package/dist/server/hono-router.js.map +1 -0
  155. package/dist/server/index.d.ts +29 -19
  156. package/dist/server/index.d.ts.map +1 -1
  157. package/dist/server/index.js +33 -19
  158. package/dist/server/index.js.map +1 -1
  159. package/dist/server/namespace-router.d.ts +204 -0
  160. package/dist/server/namespace-router.d.ts.map +1 -0
  161. package/dist/server/namespace-router.js +262 -0
  162. package/dist/server/namespace-router.js.map +1 -0
  163. package/dist/transports/http-namespace.d.ts +210 -0
  164. package/dist/transports/http-namespace.d.ts.map +1 -0
  165. package/dist/transports/http-namespace.js +514 -0
  166. package/dist/transports/http-namespace.js.map +1 -0
  167. package/dist/transports/workshop.d.ts +173 -0
  168. package/dist/transports/workshop.d.ts.map +1 -0
  169. package/dist/transports/workshop.js +307 -0
  170. package/dist/transports/workshop.js.map +1 -0
  171. package/dist/types.d.ts +65 -67
  172. package/dist/types.d.ts.map +1 -1
  173. package/dist/types.js +7 -3
  174. package/dist/types.js.map +1 -1
  175. package/docs/ADR-004-product-registry.md +108 -0
  176. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formats.js","sourceRoot":"","sources":["../../../src/server/handlers/formats.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAoEH,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AAEhF;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAA+B;IAClE,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,CAAA;IAEpC,SAAS,gBAAgB;QACvB,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,yFAAyF;gBACzF,iFAAiF,CAClF,CAAA;QACH,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO;QACL;;;;;;;WAOG;QACH,KAAK,CAAC,OAAO,CACX,YAAoB,EACpB,YAAoB,EACpB,cAAuE;YAEvE,OAAO,gBAAgB,EAAE,CAAC,OAAO,CAC/B,YAAY,EACZ,YAAY,EACZ,cAAc,CAAC,OAAO,EACtB,cAAc,CAAC,OAAO,CACvB,CAAA;QACH,CAAC;QAED;;;;;;WAMG;QACH,KAAK,CAAC,QAAQ,CACZ,MAAc,EACd,QAAiB;YAEjB,OAAO,gBAAgB,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QACtD,CAAC;QAED;;;;WAIG;QACH,KAAK,CAAC,gBAAgB;YACpB,OAAO,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,CAAA;QAC9C,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @module server/handlers/graph
3
+ * @description Graph namespace handler — assembles graph visualization data from
4
+ * Brainy entities and relationships.
5
+ *
6
+ * Absorbs Workshop `routes/graph.ts`. All methods receive the Brainy instance
7
+ * via {@link HandlerContext} and return plain objects matching the
8
+ * {@link GraphNamespace} interface in `namespaces.ts`.
9
+ *
10
+ * Methods:
11
+ * - `getData` — Full graph (entities + relationships) for visualization
12
+ * - `getStats` — Aggregate statistics (node/edge counts, type distributions)
13
+ * - `getFocused` — Subgraph centered on a specific entity
14
+ * - `getNeighbors` — Direct neighbors of a node with depth traversal
15
+ * - `getBatch` — Unified graph for multiple selected entities
16
+ * - `deleteNode` — Remove an entity and its relationships
17
+ */
18
+ import type { NamespaceProvider } from '../namespace-router.js';
19
+ /**
20
+ * Creates the `graph` namespace handler.
21
+ *
22
+ * @returns A {@link NamespaceProvider} implementing {@link GraphNamespace}.
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * const providers = { graph: createGraphHandler() }
27
+ * const router = createNamespaceRouter({ resolveBrain, authenticate, providers })
28
+ * ```
29
+ */
30
+ export declare function createGraphHandler(): NamespaceProvider;
31
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAkB,MAAM,wBAAwB,CAAA;AA6C/E;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,IAAI,iBAAiB,CAuXtD"}
@@ -0,0 +1,490 @@
1
+ /**
2
+ * @module server/handlers/graph
3
+ * @description Graph namespace handler — assembles graph visualization data from
4
+ * Brainy entities and relationships.
5
+ *
6
+ * Absorbs Workshop `routes/graph.ts`. All methods receive the Brainy instance
7
+ * via {@link HandlerContext} and return plain objects matching the
8
+ * {@link GraphNamespace} interface in `namespaces.ts`.
9
+ *
10
+ * Methods:
11
+ * - `getData` — Full graph (entities + relationships) for visualization
12
+ * - `getStats` — Aggregate statistics (node/edge counts, type distributions)
13
+ * - `getFocused` — Subgraph centered on a specific entity
14
+ * - `getNeighbors` — Direct neighbors of a node with depth traversal
15
+ * - `getBatch` — Unified graph for multiple selected entities
16
+ * - `deleteNode` — Remove an entity and its relationships
17
+ */
18
+ // ─────────────────────────────────────────────────────────────────────────────
19
+ // Helpers
20
+ // ─────────────────────────────────────────────────────────────────────────────
21
+ /**
22
+ * Extract a display name from a Brainy entity.
23
+ *
24
+ * @param entity - The entity (any shape from brain.get / brain.find).
25
+ * @returns A human-readable name string.
26
+ */
27
+ function extractName(entity) {
28
+ const meta = entity.metadata;
29
+ if (meta?.name && typeof meta.name === 'string')
30
+ return meta.name;
31
+ if (meta?.label && typeof meta.label === 'string')
32
+ return meta.label;
33
+ if (typeof entity.data === 'string' && entity.data.length < 100)
34
+ return entity.data;
35
+ if (typeof entity.data === 'object' && entity.data !== null) {
36
+ const d = entity.data;
37
+ if (typeof d.name === 'string')
38
+ return d.name;
39
+ if (typeof d.title === 'string')
40
+ return d.title;
41
+ }
42
+ return String(entity.id ?? 'untitled');
43
+ }
44
+ /**
45
+ * Parse the `_data` metadata field, which stores embedded JSON in Smart Import entities.
46
+ *
47
+ * @param metadata - Entity metadata object.
48
+ * @returns Parsed data or null.
49
+ */
50
+ function parseDataField(metadata) {
51
+ if (!metadata?._data || typeof metadata._data !== 'string')
52
+ return null;
53
+ try {
54
+ return JSON.parse(metadata._data);
55
+ }
56
+ catch {
57
+ return null;
58
+ }
59
+ }
60
+ // ─────────────────────────────────────────────────────────────────────────────
61
+ // Handler factory
62
+ // ─────────────────────────────────────────────────────────────────────────────
63
+ /**
64
+ * Creates the `graph` namespace handler.
65
+ *
66
+ * @returns A {@link NamespaceProvider} implementing {@link GraphNamespace}.
67
+ *
68
+ * @example
69
+ * ```typescript
70
+ * const providers = { graph: createGraphHandler() }
71
+ * const router = createNamespaceRouter({ resolveBrain, authenticate, providers })
72
+ * ```
73
+ */
74
+ export function createGraphHandler() {
75
+ return {
76
+ /**
77
+ * Get full graph data for visualization.
78
+ *
79
+ * @param options - Query options.
80
+ * @param options.limit - Max nodes to return (default 900, max 900).
81
+ * @param options.includeVFS - Include VFS file hierarchy (default false).
82
+ * @param ctx - Handler context with authenticated user and Brainy instance.
83
+ * @returns Graph data with nodes and edges.
84
+ */
85
+ async getData(options, ctx) {
86
+ const { brain } = ctx;
87
+ const limit = Math.min(options?.limit ?? 900, 900);
88
+ const includeVFS = options?.includeVFS ?? false;
89
+ const nodes = [];
90
+ const edges = [];
91
+ if (includeVFS) {
92
+ await _buildVfsGraph(brain, nodes, edges);
93
+ }
94
+ else {
95
+ await _buildEntityGraph(brain, nodes, edges, limit);
96
+ }
97
+ return { nodes, edges };
98
+ },
99
+ /**
100
+ * Get aggregate graph statistics.
101
+ *
102
+ * Uses Brainy 7.1.0+ `indexStats()` for instant metrics. Falls back to
103
+ * manual counting on older versions.
104
+ *
105
+ * @param ctx - Handler context.
106
+ * @returns Graph statistics including counts and distributions.
107
+ */
108
+ async getStats(ctx) {
109
+ const { brain } = ctx;
110
+ // Use indexStats() for instant metrics (Brainy 7.1.0+)
111
+ if (typeof brain.indexStats === 'function') {
112
+ const stats = await brain.indexStats();
113
+ const nodeCount = stats.totalEntities || stats.nouns?.total || 0;
114
+ const edgeCount = stats.totalRelationships || stats.verbs?.total || 0;
115
+ return {
116
+ nodeCount,
117
+ edgeCount,
118
+ typeDistribution: stats.nouns?.byType || stats.entityTypes || {},
119
+ verbDistribution: stats.verbs?.byType || stats.relationshipTypes || {},
120
+ };
121
+ }
122
+ // Fallback: query all entities and relationships
123
+ const entities = await brain.find({ limit: 900, includeVFS: false });
124
+ const relations = await brain.getRelations({ limit: 900 });
125
+ const typeDistribution = {};
126
+ for (const entity of entities) {
127
+ const type = entity.entity?.type || entity.type || 'unknown';
128
+ typeDistribution[type] = (typeDistribution[type] || 0) + 1;
129
+ }
130
+ const verbDistribution = {};
131
+ for (const rel of relations) {
132
+ const verb = rel.type || 'unknown';
133
+ verbDistribution[verb] = (verbDistribution[verb] || 0) + 1;
134
+ }
135
+ return {
136
+ nodeCount: entities.length,
137
+ edgeCount: relations.length,
138
+ typeDistribution,
139
+ verbDistribution,
140
+ };
141
+ },
142
+ /**
143
+ * Get a focused subgraph centered on a specific entity.
144
+ *
145
+ * @param entityId - The center entity ID.
146
+ * @param options - Focus options.
147
+ * @param options.verb - Filter edges to a specific verb type.
148
+ * @param options.depth - Traversal depth (default 1).
149
+ * @param options.maxNodes - Max neighbor nodes to return (default 50).
150
+ * @param ctx - Handler context.
151
+ * @returns Subgraph centered on the entity with neighbors and edges.
152
+ */
153
+ async getFocused(entityId, options, ctx) {
154
+ const { brain } = ctx;
155
+ const depth = options?.depth ?? 1;
156
+ const maxNodes = options?.maxNodes ?? 50;
157
+ const verbFilter = options?.verb;
158
+ // Get center entity
159
+ const center = await brain.get(entityId);
160
+ if (!center)
161
+ throw new Error(`Entity ${entityId} not found`);
162
+ // Get all relationships for traversal
163
+ const allRelations = await brain.getRelations({ limit: 10_000 });
164
+ const neighborIds = new Set();
165
+ const edges = [];
166
+ // 1-hop neighbors
167
+ for (const rel of allRelations) {
168
+ const relType = rel.type || rel.verb;
169
+ const sourceId = rel.sourceId || rel.from || rel.source;
170
+ const targetId = rel.targetId || rel.to || rel.target;
171
+ if (verbFilter && relType !== verbFilter)
172
+ continue;
173
+ if (sourceId === entityId || targetId === entityId) {
174
+ const otherId = sourceId === entityId ? targetId : sourceId;
175
+ neighborIds.add(otherId);
176
+ edges.push({
177
+ id: `${sourceId}-${relType}-${targetId}`,
178
+ source: sourceId,
179
+ target: targetId,
180
+ label: relType,
181
+ type: relType,
182
+ });
183
+ }
184
+ }
185
+ // Limit neighbors
186
+ const limitedIds = Array.from(neighborIds).slice(0, maxNodes);
187
+ const hasMore = neighborIds.size > maxNodes;
188
+ // Build nodes — center + neighbors
189
+ const nodes = [{
190
+ id: center.id,
191
+ label: extractName(center),
192
+ type: center.type || 'document',
193
+ }];
194
+ // Fetch neighbor entities in parallel
195
+ const neighborResults = await Promise.all(limitedIds.map(async (id) => {
196
+ try {
197
+ return await brain.get(id);
198
+ }
199
+ catch {
200
+ return null;
201
+ }
202
+ }));
203
+ for (const neighbor of neighborResults) {
204
+ if (neighbor) {
205
+ nodes.push({
206
+ id: neighbor.id,
207
+ label: extractName(neighbor),
208
+ type: neighbor.type || 'unknown',
209
+ });
210
+ }
211
+ }
212
+ // Filter edges to only those with both endpoints present
213
+ const nodeIdSet = new Set(nodes.map(n => n.id));
214
+ const filteredEdges = edges.filter(e => nodeIdSet.has(e.source) && nodeIdSet.has(e.target));
215
+ return { nodes, edges: filteredEdges, depth, hasMore };
216
+ },
217
+ /**
218
+ * Get neighbors of a specific node.
219
+ *
220
+ * Uses Brainy 7.1.0+ `neighbors()` for optimized O(log n) traversal
221
+ * when available. Falls back to manual getRelations() scan.
222
+ *
223
+ * @param nodeId - The node to find neighbors for.
224
+ * @param options - Neighbor query options.
225
+ * @param ctx - Handler context.
226
+ * @returns Neighbor nodes, edges, and total count.
227
+ */
228
+ async getNeighbors(nodeId, options, ctx) {
229
+ const { brain } = ctx;
230
+ const depth = options?.depth ?? 1;
231
+ const limit = options?.limit ?? 50;
232
+ const direction = options?.direction ?? 'both';
233
+ // Verify node exists
234
+ const node = await brain.get(nodeId);
235
+ if (!node)
236
+ throw new Error(`Node ${nodeId} not found`);
237
+ // Use neighbors() API for optimized traversal (Brainy 7.1.0+)
238
+ if (typeof brain.neighbors === 'function') {
239
+ const result = await brain.neighbors(nodeId, {
240
+ depth, limit, direction, includeMetadata: true,
241
+ });
242
+ const neighbors = (result.nodes || []).map((n) => ({
243
+ id: n.id,
244
+ label: extractName(n),
245
+ type: n.type || 'unknown',
246
+ }));
247
+ const edges = (result.edges || []).map((e) => ({
248
+ id: e.id || `${e.from || e.source}-${e.to || e.target}`,
249
+ source: e.from || e.source,
250
+ target: e.to || e.target,
251
+ label: e.type || e.verb || 'relatedTo',
252
+ type: e.type || e.verb || 'relatedTo',
253
+ }));
254
+ return { nodeId, neighbors, edges, total: result.total || neighbors.length };
255
+ }
256
+ // Fallback: manual getRelations
257
+ const outgoing = (direction !== 'incoming')
258
+ ? await brain.getRelations({ from: nodeId }) || []
259
+ : [];
260
+ const incoming = (direction !== 'outgoing')
261
+ ? await brain.getRelations({ to: nodeId }) || []
262
+ : [];
263
+ const neighborIds = new Set();
264
+ const edges = [];
265
+ for (const link of outgoing) {
266
+ neighborIds.add(link.to);
267
+ edges.push({
268
+ id: link.id || `${nodeId}-${link.to}`,
269
+ source: nodeId, target: link.to,
270
+ label: link.type || 'relatedTo', type: link.type || 'relatedTo',
271
+ });
272
+ }
273
+ for (const link of incoming) {
274
+ neighborIds.add(link.from);
275
+ edges.push({
276
+ id: link.id || `${link.from}-${nodeId}`,
277
+ source: link.from, target: nodeId,
278
+ label: link.type || 'relatedTo', type: link.type || 'relatedTo',
279
+ });
280
+ }
281
+ // Fetch neighbor entities in parallel
282
+ const limitedIds = Array.from(neighborIds).slice(0, limit);
283
+ const neighborResults = await Promise.all(limitedIds.map(async (id) => {
284
+ try {
285
+ return await brain.get(id);
286
+ }
287
+ catch {
288
+ return null;
289
+ }
290
+ }));
291
+ const neighbors = neighborResults
292
+ .filter((n) => n !== null)
293
+ .map((n) => ({ id: n.id, label: extractName(n), type: n.type || 'unknown' }));
294
+ return { nodeId, neighbors, edges, total: neighborIds.size };
295
+ },
296
+ /**
297
+ * Get unified graph for multiple selected entities.
298
+ *
299
+ * @param options - Batch query options.
300
+ * @param ctx - Handler context.
301
+ * @returns Combined graph data with selected node indicators.
302
+ */
303
+ async getBatch(options, ctx) {
304
+ const { brain } = ctx;
305
+ const allSelectedIds = [...(options.entityIds || []), ...(options.fileIds || [])];
306
+ const depth = options.depth ?? 1;
307
+ const maxNodes = options.maxNodes ?? 100;
308
+ if (allSelectedIds.length === 0) {
309
+ throw new Error('At least one entityId or fileId is required');
310
+ }
311
+ const nodesMap = new Map();
312
+ const edgesMap = new Map();
313
+ const neighborIds = new Set();
314
+ // Process each selected entity
315
+ for (const selectedId of allSelectedIds) {
316
+ let entity;
317
+ try {
318
+ entity = await brain.get(selectedId);
319
+ }
320
+ catch {
321
+ continue;
322
+ }
323
+ if (!entity)
324
+ continue;
325
+ nodesMap.set(selectedId, {
326
+ id: entity.id,
327
+ label: extractName(entity),
328
+ type: entity.type || 'document',
329
+ metadata: entity.metadata,
330
+ });
331
+ // Get relationships for this entity
332
+ const outgoing = await brain.getRelations({ from: selectedId }) || [];
333
+ const incoming = await brain.getRelations({ to: selectedId }) || [];
334
+ for (const link of outgoing) {
335
+ const edgeId = `${selectedId}-${link.type || 'relatedTo'}-${link.to}`;
336
+ neighborIds.add(link.to);
337
+ edgesMap.set(edgeId, {
338
+ id: edgeId, source: selectedId, target: link.to,
339
+ label: link.type || 'relatedTo', type: link.type || 'relatedTo',
340
+ });
341
+ }
342
+ for (const link of incoming) {
343
+ const edgeId = `${link.from}-${link.type || 'relatedTo'}-${selectedId}`;
344
+ neighborIds.add(link.from);
345
+ edgesMap.set(edgeId, {
346
+ id: edgeId, source: link.from, target: selectedId,
347
+ label: link.type || 'relatedTo', type: link.type || 'relatedTo',
348
+ });
349
+ }
350
+ }
351
+ // Fetch neighbor entities (not already in selection)
352
+ const limitedNeighborIds = Array.from(neighborIds)
353
+ .filter(id => !nodesMap.has(id))
354
+ .slice(0, maxNodes);
355
+ const neighborResults = await Promise.all(limitedNeighborIds.map(async (id) => {
356
+ try {
357
+ return await brain.get(id);
358
+ }
359
+ catch {
360
+ return null;
361
+ }
362
+ }));
363
+ for (const neighbor of neighborResults) {
364
+ if (!neighbor)
365
+ continue;
366
+ const meta = neighbor.metadata;
367
+ if (meta?.isViewCollection)
368
+ continue; // Exclude infrastructure nodes
369
+ nodesMap.set(neighbor.id, {
370
+ id: neighbor.id,
371
+ label: extractName(neighbor),
372
+ type: neighbor.type || 'document',
373
+ metadata: meta,
374
+ });
375
+ }
376
+ // Filter edges to those with both endpoints present
377
+ const nodeIdSet = new Set(nodesMap.keys());
378
+ const nodes = Array.from(nodesMap.values());
379
+ const edges = Array.from(edgesMap.values()).filter(e => nodeIdSet.has(e.source) && nodeIdSet.has(e.target));
380
+ return {
381
+ nodes,
382
+ edges,
383
+ selectedNodeIds: allSelectedIds,
384
+ depth,
385
+ hasMore: neighborIds.size > maxNodes,
386
+ };
387
+ },
388
+ /**
389
+ * Delete a node from the graph (entity + relationships).
390
+ *
391
+ * @param nodeId - The node to delete.
392
+ * @param ctx - Handler context.
393
+ * @returns Success confirmation.
394
+ */
395
+ async deleteNode(nodeId, ctx) {
396
+ const { brain } = ctx;
397
+ const node = await brain.get(nodeId);
398
+ if (!node)
399
+ throw new Error(`Node ${nodeId} not found`);
400
+ await brain.delete(nodeId);
401
+ return { success: true, id: nodeId };
402
+ },
403
+ };
404
+ }
405
+ // ─────────────────────────────────────────────────────────────────────────────
406
+ // Internal graph builders
407
+ // ─────────────────────────────────────────────────────────────────────────────
408
+ /**
409
+ * Build graph from VFS file hierarchy.
410
+ */
411
+ async function _buildVfsGraph(brain, nodes, edges) {
412
+ const vfs = brain.vfs;
413
+ const descendants = await vfs.getDescendants('/', { includeAncestor: true });
414
+ const pathToId = new Map();
415
+ for (const item of descendants) {
416
+ const meta = item.metadata;
417
+ const path = meta?.path || '/';
418
+ const isDirectory = meta?.vfsType === 'directory';
419
+ const parsed = parseDataField(meta);
420
+ let name = meta?.name || path.split('/').pop() || 'root';
421
+ let entityType = isDirectory ? 'directory' : 'file';
422
+ if (parsed?.name && typeof parsed.name === 'string')
423
+ name = parsed.name;
424
+ if (parsed?.type && typeof parsed.type === 'string')
425
+ entityType = parsed.type;
426
+ if (path === '/') {
427
+ pathToId.set(path, item.id);
428
+ continue;
429
+ }
430
+ nodes.push({ id: item.id, label: name, type: entityType });
431
+ pathToId.set(path, item.id);
432
+ }
433
+ // Build parent-child edges from paths
434
+ for (const node of nodes) {
435
+ const entity = descendants.find((d) => d.id === node.id);
436
+ const meta = entity?.metadata;
437
+ const path = meta?.path || '';
438
+ const parts = path.split('/').filter(Boolean);
439
+ if (parts.length === 0)
440
+ continue;
441
+ parts.pop();
442
+ const parentPath = parts.length > 0 ? '/' + parts.join('/') : '/';
443
+ if (parentPath === '/')
444
+ continue;
445
+ const parentId = pathToId.get(parentPath);
446
+ if (parentId) {
447
+ const isDir = meta?.vfsType === 'directory';
448
+ edges.push({
449
+ id: `vfs-${parentId}-${node.id}`,
450
+ source: parentId,
451
+ target: node.id,
452
+ label: isDir ? 'contains_dir' : 'contains_file',
453
+ type: 'vfs_hierarchy',
454
+ });
455
+ }
456
+ }
457
+ }
458
+ /**
459
+ * Build graph from non-VFS entities and their relationships.
460
+ */
461
+ async function _buildEntityGraph(brain, nodes, edges, limit) {
462
+ const results = await brain.find({ query: '', limit, includeVFS: false });
463
+ const nodeIds = new Set();
464
+ for (const result of results) {
465
+ const entity = result.entity || result;
466
+ const id = result.id || entity.id;
467
+ const parsed = parseDataField(entity.metadata);
468
+ nodes.push({
469
+ id,
470
+ label: extractName(result),
471
+ type: entity.type || entity.metadata?.noun || 'concept',
472
+ metadata: parsed || entity.metadata?.nodeData || (typeof entity.data === 'object' ? entity.data : undefined),
473
+ });
474
+ nodeIds.add(id);
475
+ }
476
+ // Get all relationships and filter to visible nodes
477
+ const allRelations = await brain.getRelations();
478
+ for (const rel of allRelations) {
479
+ if (nodeIds.has(rel.from) && nodeIds.has(rel.to)) {
480
+ edges.push({
481
+ id: `${rel.from}-${rel.type}-${rel.to}`,
482
+ source: rel.from,
483
+ target: rel.to,
484
+ label: rel.type,
485
+ type: 'semantic',
486
+ });
487
+ }
488
+ }
489
+ }
490
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/server/handlers/graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * @module server/handlers/import
3
+ * @description Import namespace handler — smart file upload and structured data
4
+ * import with streaming progress.
5
+ *
6
+ * Absorbs Workshop `routes/import.ts` and `routes/import-data.ts`. Both
7
+ * `uploadFiles` and `importData` return async iterables that stream
8
+ * {@link ImportProgress} events as the import pipeline processes each phase.
9
+ *
10
+ * The handler delegates format parsing to an injected `ImportPipeline`
11
+ * interface, allowing products to register parsers for their supported formats.
12
+ *
13
+ * Methods:
14
+ * - `uploadFiles` — Smart file import with streaming progress
15
+ * - `importData` — Structured data import (JSON, CSV, GraphML, etc.)
16
+ * - `getFormats` — List supported import formats
17
+ * - `detectFormat` — Auto-detect data format
18
+ * - `getProgress` — Get progress of an ongoing import
19
+ * - `cancel` — Cancel an in-progress import
20
+ */
21
+ import type { NamespaceProvider } from '../namespace-router.js';
22
+ import type { ImportProgress } from '../../namespaces.js';
23
+ /**
24
+ * Import pipeline interface for processing files and structured data.
25
+ *
26
+ * Products implement this to register parsers for their supported formats.
27
+ * Workshop uses `routes/parsers/` which supports GraphML, GEXF, DOT, OPML,
28
+ * CSV, JSON, Obsidian vault, Turtle/JSON-LD, etc.
29
+ */
30
+ export interface ImportPipeline {
31
+ /**
32
+ * Import files into the workspace.
33
+ *
34
+ * @param files - Array of files to import.
35
+ * @param brain - Brainy instance to write to.
36
+ * @param userId - User performing the import.
37
+ * @returns Async iterable of progress events.
38
+ */
39
+ importFiles(files: Array<{
40
+ name: string;
41
+ content: string | ArrayBuffer;
42
+ mimeType: string;
43
+ }>, brain: any, userId: string): AsyncIterable<ImportProgress>;
44
+ /**
45
+ * Import structured data into the workspace.
46
+ *
47
+ * @param options - Import configuration.
48
+ * @param brain - Brainy instance to write to.
49
+ * @param userId - User performing the import.
50
+ * @returns Async iterable of progress events.
51
+ */
52
+ importData(options: {
53
+ format: string;
54
+ data: string | ArrayBuffer;
55
+ mappings?: Record<string, string>;
56
+ }, brain: any, userId: string): AsyncIterable<ImportProgress>;
57
+ /**
58
+ * List supported import formats.
59
+ *
60
+ * @returns Array of format descriptors.
61
+ */
62
+ getFormats(): Array<{
63
+ id: string;
64
+ name: string;
65
+ extensions: string[];
66
+ description: string;
67
+ }>;
68
+ /**
69
+ * Auto-detect the format of data content.
70
+ *
71
+ * @param data - Data to analyze.
72
+ * @returns Detected format and confidence score.
73
+ */
74
+ detectFormat(data: string): {
75
+ format: string;
76
+ confidence: number;
77
+ };
78
+ }
79
+ /**
80
+ * Options for {@link createImportHandler}.
81
+ */
82
+ export interface ImportHandlerOptions {
83
+ /**
84
+ * Import pipeline implementation.
85
+ * If not provided, all methods throw with a "not configured" error.
86
+ */
87
+ pipeline: ImportPipeline;
88
+ }
89
+ /**
90
+ * Creates the `import` namespace handler.
91
+ *
92
+ * @param options - Import handler dependencies. If omitted, all methods throw.
93
+ * @returns A {@link NamespaceProvider} implementing {@link ImportNamespace}.
94
+ */
95
+ export declare function createImportHandler(options?: ImportHandlerOptions): NamespaceProvider;
96
+ //# sourceMappingURL=import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/import.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAkB,MAAM,wBAAwB,CAAA;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAMzD;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;;OAOG;IACH,WAAW,CACT,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,EAC/E,KAAK,EAAE,GAAG,EACV,MAAM,EAAE,MAAM,GACb,aAAa,CAAC,cAAc,CAAC,CAAA;IAEhC;;;;;;;OAOG;IACH,UAAU,CACR,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,EAC1F,KAAK,EAAE,GAAG,EACV,MAAM,EAAE,MAAM,GACb,aAAa,CAAC,cAAc,CAAC,CAAA;IAEhC;;;;OAIG;IACH,UAAU,IAAI,KAAK,CAAC;QAClB,EAAE,EAAE,MAAM,CAAA;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,UAAU,EAAE,MAAM,EAAE,CAAA;QACpB,WAAW,EAAE,MAAM,CAAA;KACpB,CAAC,CAAA;IAEF;;;;;OAKG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAA;CACnE;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,QAAQ,EAAE,cAAc,CAAA;CACzB;AAgBD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,iBAAiB,CAuFrF"}