@ultrst-armada/kloks 1.4.7 → 1.4.8

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.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schema": 1,
3
3
  "packageName": "@ultrst-armada/kloks",
4
- "version": "1.4.7",
5
- "sourceCommit": "d3bee7220338a9aec6b9787a5308b8dbb2766693",
4
+ "version": "1.4.8",
5
+ "sourceCommit": "6ab0d5dfede2344d9dd35ce366b67ac44b808401",
6
6
  "releaseWorkflow": "npm Release",
7
- "workflowRunId": "39538959938"
7
+ "workflowRunId": "39557640590"
8
8
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ultrst-armada/kloks",
3
- "version": "1.4.7",
3
+ "version": "1.4.8",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public",
@@ -1,14 +1,3 @@
1
- // src/workspace/WorkspaceCanonical.ts
2
- function formatCanonicalWorkspaceFolderName(appName, userName, workspaceName) {
3
- const safeApp = appName.replace(/[^a-zA-Z0-9]/g, "_").toLowerCase();
4
- const safeUser = userName.replace(/[^a-zA-Z0-9]/g, "_").toLowerCase();
5
- const safeWs = workspaceName.replace(/[^a-zA-Z0-9]/g, "_").toLowerCase();
6
- return `ultrst_${safeApp}_${safeUser}_${safeWs}`;
7
- }
8
- function sanitizeWorkspaceName(name) {
9
- return name.replace(/[^a-zA-Z0-9-_\s]/g, "").trim();
10
- }
11
-
12
1
  // src/core/unifiedDb.ts
13
2
  var neon;
14
3
  function cleanDbUrl(url) {
@@ -729,8 +718,6 @@ async function getWorkspaceStorageDetails(workspaceId, env) {
729
718
  }
730
719
 
731
720
  export {
732
- formatCanonicalWorkspaceFolderName,
733
- sanitizeWorkspaceName,
734
721
  cleanDbUrl,
735
722
  getUnifiedDbUrl,
736
723
  queryUnifiedDb,
@@ -0,0 +1,15 @@
1
+ // src/workspace/WorkspaceCanonical.ts
2
+ function formatCanonicalWorkspaceFolderName(appName, userName, workspaceName) {
3
+ const safeApp = appName.replace(/[^a-zA-Z0-9]/g, "_").toLowerCase();
4
+ const safeUser = userName.replace(/[^a-zA-Z0-9]/g, "_").toLowerCase();
5
+ const safeWs = workspaceName.replace(/[^a-zA-Z0-9]/g, "_").toLowerCase();
6
+ return `ultrst_${safeApp}_${safeUser}_${safeWs}`;
7
+ }
8
+ function sanitizeWorkspaceName(name) {
9
+ return name.replace(/[^a-zA-Z0-9-_\s]/g, "").trim();
10
+ }
11
+
12
+ export {
13
+ formatCanonicalWorkspaceFolderName,
14
+ sanitizeWorkspaceName
15
+ };
@@ -12,7 +12,7 @@ import {
12
12
  readWorkspaceFile,
13
13
  updateWorkspace,
14
14
  writeWorkspaceFile
15
- } from "./chunk-ZO3PZGNQ.js";
15
+ } from "./chunk-E72GXBXF.js";
16
16
 
17
17
  // src/workspace/WorkspaceFS.ts
18
18
  import { SkipoBase } from "@ultrst-armada/kloks/functions";
@@ -2,22 +2,13 @@ import {
2
2
  getSrklAccounts,
3
3
  srklListBackblazeBuckets
4
4
  } from "./chunk-VDROUXFT.js";
5
- import {
6
- StorageAdapterFactory
7
- } from "./chunk-J2J24JVC.js";
8
5
  import {
9
6
  b2ListBuckets
10
7
  } from "./chunk-4QEMALXF.js";
11
8
  import {
12
- createWorkspace,
13
- deleteWorkspace,
14
- findUserWorkspace,
15
9
  formatCanonicalWorkspaceFolderName,
16
- getWorkspaces,
17
- queryUnifiedDb,
18
- sanitizeWorkspaceName,
19
- updateWorkspace
20
- } from "./chunk-ZO3PZGNQ.js";
10
+ sanitizeWorkspaceName
11
+ } from "./chunk-FZKBTF34.js";
21
12
  import {
22
13
  RateLimiter,
23
14
  SessionManager,
@@ -26,8 +17,20 @@ import {
26
17
  } from "./chunk-ZDH4XI7W.js";
27
18
  import {
28
19
  createService,
29
- createServiceDefinition
30
- } from "./chunk-TY32TUNI.js";
20
+ createServiceDefinition,
21
+ workspaceGraphService
22
+ } from "./chunk-ZFCEXTNI.js";
23
+ import {
24
+ StorageAdapterFactory
25
+ } from "./chunk-J2J24JVC.js";
26
+ import {
27
+ createWorkspace,
28
+ deleteWorkspace,
29
+ findUserWorkspace,
30
+ getWorkspaces,
31
+ queryUnifiedDb,
32
+ updateWorkspace
33
+ } from "./chunk-E72GXBXF.js";
31
34
 
32
35
  // src/krnl-services.ts
33
36
  var AuthServiceDefinition = createServiceDefinition({
@@ -332,6 +335,64 @@ var SrklServiceFacade = {
332
335
  };
333
336
  var krnlSrklServiceDefinition = SrklServiceDefinition;
334
337
  var krnlSrklServiceFacade = SrklServiceFacade;
338
+ var WorkspaceGraphServiceDefinition = createServiceDefinition({
339
+ id: "kloks.backend.workspaceGraph",
340
+ name: "WorkspaceGraphService",
341
+ version: "1.0.0",
342
+ operations: {
343
+ listGraphs: {
344
+ id: "WorkspaceGraphService.listGraphs",
345
+ name: "listGraphs",
346
+ handler: async (input) => workspaceGraphService.listGraphs(input.userId, input.workspaceId)
347
+ },
348
+ createGraph: {
349
+ id: "WorkspaceGraphService.createGraph",
350
+ name: "createGraph",
351
+ handler: async (input) => workspaceGraphService.createGraph(input.userId, input.workspaceId, { name: input.name })
352
+ },
353
+ getGraph: {
354
+ id: "WorkspaceGraphService.getGraph",
355
+ name: "getGraph",
356
+ handler: async (input) => workspaceGraphService.getGraph(input.userId, input.workspaceId, input.slug)
357
+ },
358
+ saveGraph: {
359
+ id: "WorkspaceGraphService.saveGraph",
360
+ name: "saveGraph",
361
+ handler: async (input) => workspaceGraphService.saveGraph(input.userId, input.workspaceId, input.slug, input)
362
+ },
363
+ deleteGraph: {
364
+ id: "WorkspaceGraphService.deleteGraph",
365
+ name: "deleteGraph",
366
+ handler: async (input) => workspaceGraphService.deleteGraph(input.userId, input.workspaceId, input.slug)
367
+ },
368
+ duplicateGraph: {
369
+ id: "WorkspaceGraphService.duplicateGraph",
370
+ name: "duplicateGraph",
371
+ handler: async (input) => workspaceGraphService.duplicateGraph(input.userId, input.workspaceId, input.slug, input.newName)
372
+ },
373
+ clearGraph: {
374
+ id: "WorkspaceGraphService.clearGraph",
375
+ name: "clearGraph",
376
+ handler: async (input) => workspaceGraphService.clearGraph(input.userId, input.workspaceId, input.slug)
377
+ }
378
+ }
379
+ });
380
+ var workspaceGraphServiceInstance = createService(WorkspaceGraphServiceDefinition);
381
+ var WorkspaceGraphServiceFacade = {
382
+ id: WorkspaceGraphServiceDefinition.id,
383
+ name: WorkspaceGraphServiceDefinition.name,
384
+ version: WorkspaceGraphServiceDefinition.version,
385
+ runtime: "server",
386
+ deployment: "local",
387
+ definition: WorkspaceGraphServiceDefinition,
388
+ createInstance: () => createService(WorkspaceGraphServiceDefinition),
389
+ execute: async (op, input) => {
390
+ await workspaceGraphServiceInstance.start();
391
+ return workspaceGraphServiceInstance.call(op, input);
392
+ }
393
+ };
394
+ var krnlWorkspaceGraphServiceDefinition = WorkspaceGraphServiceDefinition;
395
+ var krnlWorkspaceGraphServiceFacade = WorkspaceGraphServiceFacade;
335
396
 
336
397
  export {
337
398
  AuthServiceDefinition,
@@ -361,5 +422,9 @@ export {
361
422
  SrklServiceDefinition,
362
423
  SrklServiceFacade,
363
424
  krnlSrklServiceDefinition,
364
- krnlSrklServiceFacade
425
+ krnlSrklServiceFacade,
426
+ WorkspaceGraphServiceDefinition,
427
+ WorkspaceGraphServiceFacade,
428
+ krnlWorkspaceGraphServiceDefinition,
429
+ krnlWorkspaceGraphServiceFacade
365
430
  };
@@ -2,7 +2,7 @@ import {
2
2
  createService,
3
3
  createServiceDefinition,
4
4
  createServiceProxy
5
- } from "./chunk-TY32TUNI.js";
5
+ } from "./chunk-ZFCEXTNI.js";
6
6
 
7
7
  // src/services/ServiceBoundary.ts
8
8
  function createLocalService(definition) {
@@ -1,3 +1,10 @@
1
+ import {
2
+ StorageAdapterFactory
3
+ } from "./chunk-J2J24JVC.js";
4
+ import {
5
+ findUserWorkspace
6
+ } from "./chunk-E72GXBXF.js";
7
+
1
8
  // ../../node_modules/.pnpm/@ultrst-armada+krnl@1.0.3/node_modules/@ultrst-armada/krnl/packages/core/dist/index.js
2
9
  var ServiceStateStore = class {
3
10
  state;
@@ -369,8 +376,158 @@ function createServiceProxy(definition, adapter, endpoint) {
369
376
  }
370
377
  var asyncHooks = globalThis.process?.getBuiltinModule?.("node:async_hooks");
371
378
 
379
+ // src/services/workspaceGraphService.ts
380
+ function slugify(name) {
381
+ const value = String(name || "").trim().replace(/[/\\]+/g, "_").replace(/[<>:"|?*]/g, "").slice(0, 80);
382
+ return value || "New Graph";
383
+ }
384
+ function storage() {
385
+ return StorageAdapterFactory.create({
386
+ provider: "local_fs",
387
+ basePath: process.env.KLOKS_GRAPH_STORAGE_ROOT || "./workspaces-data"
388
+ });
389
+ }
390
+ function graphPath(workspaceId, slug) {
391
+ return `workspaces/${workspaceId}/graphs/${slug}.graph.json`;
392
+ }
393
+ async function assertWorkspace(userId, workspaceId) {
394
+ const result = await findUserWorkspace(workspaceId);
395
+ if (!result.workspace || !result.user || result.user.id !== userId) {
396
+ throw new Error(`Workspace ${workspaceId} does not exist`);
397
+ }
398
+ return result.workspace;
399
+ }
400
+ async function readGraph(workspaceId, slug) {
401
+ const adapter = storage();
402
+ const path = graphPath(workspaceId, slug);
403
+ if (!await adapter.exists(path)) return null;
404
+ const raw = new TextDecoder().decode(await adapter.read(path));
405
+ return JSON.parse(raw);
406
+ }
407
+ async function writeGraph(document) {
408
+ const adapter = storage();
409
+ await adapter.write(graphPath(document.workspaceId, document.graphSlug), JSON.stringify(document, null, 2), "application/json");
410
+ }
411
+ function toDocument(workspaceId, id, name, slug, nodes = [], edges = [], createdAt = (/* @__PURE__ */ new Date()).toISOString()) {
412
+ const now = (/* @__PURE__ */ new Date()).toISOString();
413
+ return {
414
+ $schema: "https://skipo.dev/schemas/node-graph.v1.json",
415
+ version: "1.0.0",
416
+ appId: workspaceId,
417
+ appName: name,
418
+ createdAt,
419
+ updatedAt: now,
420
+ exportedAt: now,
421
+ workspaceId,
422
+ graphId: id,
423
+ graphSlug: slug,
424
+ graph: { nodes, edges }
425
+ };
426
+ }
427
+ var workspaceGraphService = {
428
+ async listGraphs(userId, workspaceId) {
429
+ await assertWorkspace(userId, workspaceId);
430
+ const adapter = storage();
431
+ const files = await adapter.list(`workspaces/${workspaceId}/graphs`);
432
+ const graphs = [];
433
+ for (const file of files.filter((item) => item.path.endsWith(".graph.json"))) {
434
+ try {
435
+ const raw = new TextDecoder().decode(await adapter.read(file.path));
436
+ const graph = JSON.parse(raw);
437
+ graphs.push({
438
+ id: graph.graphId,
439
+ name: graph.appName,
440
+ slug: graph.graphSlug,
441
+ createdAt: graph.createdAt,
442
+ updatedAt: graph.updatedAt,
443
+ nodeCount: graph.graph.nodes.length
444
+ });
445
+ } catch {
446
+ }
447
+ }
448
+ graphs.sort((a, b) => a.createdAt.localeCompare(b.createdAt));
449
+ return { success: true, graphs };
450
+ },
451
+ async createGraph(userId, workspaceId, input) {
452
+ await assertWorkspace(userId, workspaceId);
453
+ const targetName = String(input?.name || "").trim().slice(0, 80) || "New Graph";
454
+ const baseSlug = slugify(targetName);
455
+ let slug = baseSlug;
456
+ let n = 2;
457
+ while (await readGraph(workspaceId, slug)) slug = `${baseSlug} (${n++})`;
458
+ const graph = toDocument(workspaceId, `graph-${Date.now()}`, targetName, slug);
459
+ await writeGraph(graph);
460
+ return { success: true, graph, graphs: (await this.listGraphs(userId, workspaceId)).graphs };
461
+ },
462
+ async getGraph(userId, workspaceId, slug) {
463
+ await assertWorkspace(userId, workspaceId);
464
+ const graph = await readGraph(workspaceId, slug);
465
+ if (!graph) throw new Error(`Graph "${slug}" not found`);
466
+ return { success: true, graph };
467
+ },
468
+ async saveGraph(userId, workspaceId, slug, patch) {
469
+ await assertWorkspace(userId, workspaceId);
470
+ const existing = await readGraph(workspaceId, slug);
471
+ if (!existing) throw new Error(`Graph "${slug}" not found`);
472
+ const next = {
473
+ ...existing,
474
+ appName: typeof patch.name === "string" && patch.name.trim() ? patch.name.trim().slice(0, 80) : existing.appName,
475
+ graph: {
476
+ nodes: Array.isArray(patch.nodes) ? patch.nodes : existing.graph.nodes,
477
+ edges: Array.isArray(patch.edges) ? patch.edges : existing.graph.edges
478
+ },
479
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString(),
480
+ exportedAt: (/* @__PURE__ */ new Date()).toISOString()
481
+ };
482
+ await writeGraph(next);
483
+ return { success: true, graph: next };
484
+ },
485
+ async deleteGraph(userId, workspaceId, slug) {
486
+ await assertWorkspace(userId, workspaceId);
487
+ const adapter = storage();
488
+ const path = graphPath(workspaceId, slug);
489
+ if (!await adapter.exists(path)) throw new Error(`Graph "${slug}" not found`);
490
+ await adapter.delete(path);
491
+ return { success: true, deletedSlug: slug, graphs: (await this.listGraphs(userId, workspaceId)).graphs };
492
+ },
493
+ async duplicateGraph(userId, workspaceId, slug, newName) {
494
+ const existing = (await this.getGraph(userId, workspaceId, slug)).graph;
495
+ const targetName = (newName || `${existing.appName} (Copy)`).trim().slice(0, 80);
496
+ const baseSlug = slugify(targetName);
497
+ let newSlug = baseSlug;
498
+ let n = 2;
499
+ while (await readGraph(workspaceId, newSlug)) newSlug = `${baseSlug} (${n++})`;
500
+ const now = (/* @__PURE__ */ new Date()).toISOString();
501
+ const graph = {
502
+ ...JSON.parse(JSON.stringify(existing)),
503
+ graphId: `graph-${Date.now()}`,
504
+ graphSlug: newSlug,
505
+ appName: targetName,
506
+ createdAt: now,
507
+ updatedAt: now,
508
+ exportedAt: now
509
+ };
510
+ await writeGraph(graph);
511
+ return { success: true, graph, graphs: (await this.listGraphs(userId, workspaceId)).graphs };
512
+ },
513
+ async clearGraph(userId, workspaceId, slug) {
514
+ const existing = (await this.getGraph(userId, workspaceId, slug)).graph;
515
+ return this.saveGraph(userId, workspaceId, slug, { nodes: [], edges: [] });
516
+ },
517
+ async getGraphDocument(userId, workspaceId, slug) {
518
+ return (await this.getGraph(userId, workspaceId, slug)).graph;
519
+ },
520
+ async saveGraphDocument(userId, workspaceId, document) {
521
+ await assertWorkspace(userId, workspaceId);
522
+ if (document.workspaceId !== workspaceId) throw new Error("Graph workspace mismatch");
523
+ await writeGraph({ ...document, updatedAt: (/* @__PURE__ */ new Date()).toISOString(), exportedAt: (/* @__PURE__ */ new Date()).toISOString() });
524
+ return { success: true, graph: document };
525
+ }
526
+ };
527
+
372
528
  export {
373
529
  createServiceDefinition,
374
530
  createService,
375
- createServiceProxy
531
+ createServiceProxy,
532
+ workspaceGraphService
376
533
  };
@@ -10,9 +10,9 @@ export { A as AuthContext, B as BackendClient, a as BackendClientOptions, b as B
10
10
  export { BackendContract, BackendRegistry, CallbackDefinition, ConcurrencyConflictError, ConcurrencyManager, DomainContract, EventDefinition, HealthMonitor, IdempotencyManager, InProcessExecutor, JobDefinition, JobHandler, JobScheduler, LoadBalancer, LockManager, OperationDefinition, RemoteExecutor, RemoteExecutorOptions, createEmptyContract } from './connectivity/index.js';
11
11
  export { BackendClientInstance, BackendProvider, BackendProviderProps, useBackend, useBackendClient } from './client/index.js';
12
12
  export { AdaptedStorageConnection, AppAccountManifest, AppServiceDeclaration, CANONICAL_SRKL_URL, CredentialRegistryMap, EcosystemAccount, EcosystemAccountsRequest, EcosystemAccountsResponse, EcosystemServiceCategory, KeyMaterial, ServiceAccountEntry, SrklClient, SrklClientOptions, SrklCredentialRegistry, SrklEcosystemQueryOptions, SrklEcosystemResponse, SrklServiceAccount, SrklVaultAccessClient, SrklVaultAccessResponse, UseSrklServicesOptions, UseSrklServicesResult, VaultAccessClientOptions, createSrklClient, decryptVaultBufferInBrowser, getPrimarySrklDeploymentUrl, getSrklAccounts, globalCredentialRegistry, hexToBytes, srklListBackblazeBuckets, srklService, syncSrklAccounts, useSrklServices } from './srkl/index.js';
13
- export { CompositeBackend, EndpointGenerator, GeneratedEndpointSummary, LOCAL_STORAGE_GRAPHS_PREFIX, LocalService, NodeGraphPersistenceService, NodeGraphValidationResult, RemoteServiceProxy, SaveGraphOptions, UniversalAppEntity, UniversalGraphEdge, UniversalGraphNode, UniversalNodeGraphDocument, UniversalStorageConnection, createBackend, createCompositeService, createLocalService, createRemoteService, exportGraphAsJsonFile, nodeGraphPersistence, parseGraphJsonFile, validateGraphDocument } from './services/index.js';
13
+ export { CompositeBackend, EndpointGenerator, GeneratedEndpointSummary, LOCAL_STORAGE_GRAPHS_PREFIX, LocalService, NodeGraphPersistenceService, NodeGraphValidationResult, RemoteServiceProxy, SaveGraphOptions, UniversalAppEntity, UniversalGraphEdge, UniversalGraphNode, UniversalNodeGraphDocument, UniversalStorageConnection, WorkspaceGraphDocument, WorkspaceGraphSummary, createBackend, createCompositeService, createLocalService, createRemoteService, exportGraphAsJsonFile, nodeGraphPersistence, parseGraphJsonFile, validateGraphDocument, workspaceGraphService } from './services/index.js';
14
14
  import { AssetDataType as AssetDataType$1, AssetChannelType as AssetChannelType$1, GraphFolderInfo as GraphFolderInfo$1, GraphAssetItem as GraphAssetItem$1, SpaceNode, NodeConnection, DawProject } from '@ultrst-armada/kloks/state-graph';
15
- export { AuthServiceDefinition, AuthServiceFacade, ControlPlaneServiceDefinition, ControlPlaneServiceFacade, DatabaseServiceDefinition, DatabaseServiceFacade, GeminiServiceDefinition, GeminiServiceFacade, SrklServiceDefinition, SrklServiceFacade, StorageServiceDefinition, StorageServiceFacade, WorkspaceServiceDefinition, WorkspaceServiceFacade, krnlAuthServiceDefinition, krnlAuthServiceFacade, krnlControlPlaneServiceDefinition, krnlControlPlaneServiceFacade, krnlDatabaseServiceDefinition, krnlDatabaseServiceFacade, krnlGeminiServiceDefinition, krnlGeminiServiceFacade, krnlSrklServiceDefinition, krnlSrklServiceFacade, krnlStorageServiceDefinition, krnlStorageServiceFacade, krnlWorkspaceServiceDefinition, krnlWorkspaceServiceFacade } from './krnl-services.js';
15
+ export { AuthServiceDefinition, AuthServiceFacade, ControlPlaneServiceDefinition, ControlPlaneServiceFacade, DatabaseServiceDefinition, DatabaseServiceFacade, GeminiServiceDefinition, GeminiServiceFacade, SrklServiceDefinition, SrklServiceFacade, StorageServiceDefinition, StorageServiceFacade, WorkspaceGraphServiceDefinition, WorkspaceGraphServiceFacade, WorkspaceServiceDefinition, WorkspaceServiceFacade, krnlAuthServiceDefinition, krnlAuthServiceFacade, krnlControlPlaneServiceDefinition, krnlControlPlaneServiceFacade, krnlDatabaseServiceDefinition, krnlDatabaseServiceFacade, krnlGeminiServiceDefinition, krnlGeminiServiceFacade, krnlSrklServiceDefinition, krnlSrklServiceFacade, krnlStorageServiceDefinition, krnlStorageServiceFacade, krnlWorkspaceGraphServiceDefinition, krnlWorkspaceGraphServiceFacade, krnlWorkspaceServiceDefinition, krnlWorkspaceServiceFacade } from './krnl-services.js';
16
16
  export { EndpointDescriptor, IService, ProtocolAdapter, ServiceDefinition } from '@ultrst-armada/krnl';
17
17
  import 'react';
18
18
 
@@ -27,7 +27,7 @@ import {
27
27
  setWorkingWorkspaceConfig,
28
28
  syncWorkspace,
29
29
  workingWorkspaceService
30
- } from "./chunk-DULUHQ5S.js";
30
+ } from "./chunk-GPXV4GBD.js";
31
31
  import {
32
32
  AuthServiceDefinition,
33
33
  AuthServiceFacade,
@@ -41,6 +41,8 @@ import {
41
41
  SrklServiceFacade,
42
42
  StorageServiceDefinition,
43
43
  StorageServiceFacade,
44
+ WorkspaceGraphServiceDefinition,
45
+ WorkspaceGraphServiceFacade,
44
46
  WorkspaceServiceDefinition,
45
47
  WorkspaceServiceFacade,
46
48
  krnlAuthServiceDefinition,
@@ -55,29 +57,16 @@ import {
55
57
  krnlSrklServiceFacade,
56
58
  krnlStorageServiceDefinition,
57
59
  krnlStorageServiceFacade,
60
+ krnlWorkspaceGraphServiceDefinition,
61
+ krnlWorkspaceGraphServiceFacade,
58
62
  krnlWorkspaceServiceDefinition,
59
63
  krnlWorkspaceServiceFacade
60
- } from "./chunk-ZRYACED2.js";
64
+ } from "./chunk-KYBO7FGP.js";
61
65
  import {
62
66
  getPrimarySrklDeploymentUrl,
63
67
  getSrklAccounts,
64
68
  srklListBackblazeBuckets
65
69
  } from "./chunk-VDROUXFT.js";
66
- import {
67
- BackblazeB2Adapter,
68
- BaseStorageAdapter,
69
- LocalFSAdapter,
70
- S3Adapter,
71
- StorageAdapterFactory,
72
- SupabaseStorageAdapter,
73
- ensureS3DirectoryMarker,
74
- isSecretMasked,
75
- normalizeBackblazeCredentials,
76
- permanentDeleteS3Folder,
77
- permanentDeleteS3Object,
78
- renameS3Folder,
79
- resolveBackblazeEndpoint
80
- } from "./chunk-J2J24JVC.js";
81
70
  import {
82
71
  authorizeB2,
83
72
  b2DownloadFile,
@@ -86,36 +75,9 @@ import {
86
75
  b2UploadFile
87
76
  } from "./chunk-4QEMALXF.js";
88
77
  import {
89
- b2DeleteFileVersion,
90
- b2DeleteFolder,
91
- b2ListBuckets as b2ListBuckets2,
92
- cleanDbUrl,
93
- createWorkspace,
94
- deleteWorkspace,
95
- deleteWorkspaceFile,
96
- deleteWorkspaceFolder,
97
- findUserWorkspace,
98
78
  formatCanonicalWorkspaceFolderName,
99
- getB2BucketId,
100
- getUnifiedDbUrl,
101
- getWorkspaceFolderPrefix,
102
- getWorkspaceStorageDetails,
103
- getWorkspaces,
104
- isB2Workspace,
105
- listWorkspaceFiles,
106
- loadWorkspaceData,
107
- queryUnifiedDb,
108
- readWorkspaceFile,
109
- renameAppInWorkspaceData,
110
- resolveWorkspaceConnection,
111
- sanitizeWorkspaceName,
112
- saveWorkspaceData,
113
- syncWorkspaceCreateToBucket,
114
- syncWorkspaceDataToBucket,
115
- syncWorkspaceDeleteToBucket,
116
- updateWorkspace,
117
- writeWorkspaceFile
118
- } from "./chunk-ZO3PZGNQ.js";
79
+ sanitizeWorkspaceName
80
+ } from "./chunk-FZKBTF34.js";
119
81
  import {
120
82
  BaseApiRoute,
121
83
  createSSEResponse,
@@ -134,11 +96,6 @@ import {
134
96
  loginSystemUser,
135
97
  resolveUserFromToken
136
98
  } from "./chunk-ZDH4XI7W.js";
137
- import {
138
- BackendProvider,
139
- useBackend,
140
- useBackendClient
141
- } from "./chunk-G3ZOSXUR.js";
142
99
  import {
143
100
  BackendRegistry,
144
101
  ConcurrencyConflictError,
@@ -152,6 +109,19 @@ import {
152
109
  RemoteExecutor,
153
110
  createEmptyContract
154
111
  } from "./chunk-5E6JRFUH.js";
112
+ import {
113
+ AuditLogger,
114
+ ControlPlaneManager,
115
+ DatabaseClusterManager,
116
+ detectDatabaseEngine,
117
+ getSystemDatabaseUrls,
118
+ resolveSystemDatabaseClusterNodes
119
+ } from "./chunk-RCCQ7IRM.js";
120
+ import {
121
+ BackendProvider,
122
+ useBackend,
123
+ useBackendClient
124
+ } from "./chunk-G3ZOSXUR.js";
155
125
  import {
156
126
  BackendClient,
157
127
  BackendResolver,
@@ -163,14 +133,6 @@ import {
163
133
  WebSocketTransport,
164
134
  createBackendClient
165
135
  } from "./chunk-NIP22V2G.js";
166
- import {
167
- AuditLogger,
168
- ControlPlaneManager,
169
- DatabaseClusterManager,
170
- detectDatabaseEngine,
171
- getSystemDatabaseUrls,
172
- resolveSystemDatabaseClusterNodes
173
- } from "./chunk-RCCQ7IRM.js";
174
136
  import {
175
137
  CompositeBackend,
176
138
  EndpointGenerator,
@@ -184,8 +146,54 @@ import {
184
146
  nodeGraphPersistence,
185
147
  parseGraphJsonFile,
186
148
  validateGraphDocument
187
- } from "./chunk-7B24ZWB3.js";
188
- import "./chunk-TY32TUNI.js";
149
+ } from "./chunk-R27SHBHK.js";
150
+ import {
151
+ workspaceGraphService
152
+ } from "./chunk-ZFCEXTNI.js";
153
+ import {
154
+ BackblazeB2Adapter,
155
+ BaseStorageAdapter,
156
+ LocalFSAdapter,
157
+ S3Adapter,
158
+ StorageAdapterFactory,
159
+ SupabaseStorageAdapter,
160
+ ensureS3DirectoryMarker,
161
+ isSecretMasked,
162
+ normalizeBackblazeCredentials,
163
+ permanentDeleteS3Folder,
164
+ permanentDeleteS3Object,
165
+ renameS3Folder,
166
+ resolveBackblazeEndpoint
167
+ } from "./chunk-J2J24JVC.js";
168
+ import {
169
+ b2DeleteFileVersion,
170
+ b2DeleteFolder,
171
+ b2ListBuckets as b2ListBuckets2,
172
+ cleanDbUrl,
173
+ createWorkspace,
174
+ deleteWorkspace,
175
+ deleteWorkspaceFile,
176
+ deleteWorkspaceFolder,
177
+ findUserWorkspace,
178
+ getB2BucketId,
179
+ getUnifiedDbUrl,
180
+ getWorkspaceFolderPrefix,
181
+ getWorkspaceStorageDetails,
182
+ getWorkspaces,
183
+ isB2Workspace,
184
+ listWorkspaceFiles,
185
+ loadWorkspaceData,
186
+ queryUnifiedDb,
187
+ readWorkspaceFile,
188
+ renameAppInWorkspaceData,
189
+ resolveWorkspaceConnection,
190
+ saveWorkspaceData,
191
+ syncWorkspaceCreateToBucket,
192
+ syncWorkspaceDataToBucket,
193
+ syncWorkspaceDeleteToBucket,
194
+ updateWorkspace,
195
+ writeWorkspaceFile
196
+ } from "./chunk-E72GXBXF.js";
189
197
 
190
198
  // src/data/BaseDataProvider.ts
191
199
  import { SkipoBase } from "@ultrst-armada/kloks/functions";
@@ -4416,6 +4424,8 @@ export {
4416
4424
  WorkingWorkspaceService,
4417
4425
  WorkspaceCloneSyncEngine,
4418
4426
  WorkspaceFS,
4427
+ WorkspaceGraphServiceDefinition,
4428
+ WorkspaceGraphServiceFacade,
4419
4429
  WorkspaceServiceDefinition,
4420
4430
  WorkspaceServiceFacade,
4421
4431
  authorizeB2,
@@ -4527,6 +4537,8 @@ export {
4527
4537
  krnlSrklServiceFacade,
4528
4538
  krnlStorageServiceDefinition,
4529
4539
  krnlStorageServiceFacade,
4540
+ krnlWorkspaceGraphServiceDefinition,
4541
+ krnlWorkspaceGraphServiceFacade,
4530
4542
  krnlWorkspaceServiceDefinition,
4531
4543
  krnlWorkspaceServiceFacade,
4532
4544
  listAllGraphPackages,
@@ -4599,5 +4611,6 @@ export {
4599
4611
  withAuth,
4600
4612
  withCors,
4601
4613
  workingWorkspaceService,
4614
+ workspaceGraphService,
4602
4615
  writeWorkspaceFile
4603
4616
  };
@@ -155,5 +155,27 @@ declare const krnlSrklServiceFacade: {
155
155
  createInstance: () => _ultrst_armada_krnl.ServiceInstance<Record<string, unknown>, Record<string, unknown>>;
156
156
  execute: <TIn = unknown, TOut = unknown>(op: string, input?: TIn) => Promise<TOut>;
157
157
  };
158
+ declare const WorkspaceGraphServiceDefinition: ServiceDefinition;
159
+ declare const WorkspaceGraphServiceFacade: {
160
+ id: string;
161
+ name: string;
162
+ version: string;
163
+ runtime: "server";
164
+ deployment: "local";
165
+ definition: ServiceDefinition<Record<string, unknown>, Record<string, unknown>>;
166
+ createInstance: () => _ultrst_armada_krnl.ServiceInstance<Record<string, unknown>, Record<string, unknown>>;
167
+ execute: <TIn = unknown, TOut = unknown>(op: string, input?: TIn) => Promise<TOut>;
168
+ };
169
+ declare const krnlWorkspaceGraphServiceDefinition: ServiceDefinition<Record<string, unknown>, Record<string, unknown>>;
170
+ declare const krnlWorkspaceGraphServiceFacade: {
171
+ id: string;
172
+ name: string;
173
+ version: string;
174
+ runtime: "server";
175
+ deployment: "local";
176
+ definition: ServiceDefinition<Record<string, unknown>, Record<string, unknown>>;
177
+ createInstance: () => _ultrst_armada_krnl.ServiceInstance<Record<string, unknown>, Record<string, unknown>>;
178
+ execute: <TIn = unknown, TOut = unknown>(op: string, input?: TIn) => Promise<TOut>;
179
+ };
158
180
 
159
- export { AuthServiceDefinition, AuthServiceFacade, ControlPlaneServiceDefinition, ControlPlaneServiceFacade, DatabaseServiceDefinition, DatabaseServiceFacade, GeminiServiceDefinition, GeminiServiceFacade, SrklServiceDefinition, SrklServiceFacade, StorageServiceDefinition, StorageServiceFacade, WorkspaceServiceDefinition, WorkspaceServiceFacade, krnlAuthServiceDefinition, krnlAuthServiceFacade, krnlControlPlaneServiceDefinition, krnlControlPlaneServiceFacade, krnlDatabaseServiceDefinition, krnlDatabaseServiceFacade, krnlGeminiServiceDefinition, krnlGeminiServiceFacade, krnlSrklServiceDefinition, krnlSrklServiceFacade, krnlStorageServiceDefinition, krnlStorageServiceFacade, krnlWorkspaceServiceDefinition, krnlWorkspaceServiceFacade };
181
+ export { AuthServiceDefinition, AuthServiceFacade, ControlPlaneServiceDefinition, ControlPlaneServiceFacade, DatabaseServiceDefinition, DatabaseServiceFacade, GeminiServiceDefinition, GeminiServiceFacade, SrklServiceDefinition, SrklServiceFacade, StorageServiceDefinition, StorageServiceFacade, WorkspaceGraphServiceDefinition, WorkspaceGraphServiceFacade, WorkspaceServiceDefinition, WorkspaceServiceFacade, krnlAuthServiceDefinition, krnlAuthServiceFacade, krnlControlPlaneServiceDefinition, krnlControlPlaneServiceFacade, krnlDatabaseServiceDefinition, krnlDatabaseServiceFacade, krnlGeminiServiceDefinition, krnlGeminiServiceFacade, krnlSrklServiceDefinition, krnlSrklServiceFacade, krnlStorageServiceDefinition, krnlStorageServiceFacade, krnlWorkspaceGraphServiceDefinition, krnlWorkspaceGraphServiceFacade, krnlWorkspaceServiceDefinition, krnlWorkspaceServiceFacade };
@@ -11,6 +11,8 @@ import {
11
11
  SrklServiceFacade,
12
12
  StorageServiceDefinition,
13
13
  StorageServiceFacade,
14
+ WorkspaceGraphServiceDefinition,
15
+ WorkspaceGraphServiceFacade,
14
16
  WorkspaceServiceDefinition,
15
17
  WorkspaceServiceFacade,
16
18
  krnlAuthServiceDefinition,
@@ -25,15 +27,18 @@ import {
25
27
  krnlSrklServiceFacade,
26
28
  krnlStorageServiceDefinition,
27
29
  krnlStorageServiceFacade,
30
+ krnlWorkspaceGraphServiceDefinition,
31
+ krnlWorkspaceGraphServiceFacade,
28
32
  krnlWorkspaceServiceDefinition,
29
33
  krnlWorkspaceServiceFacade
30
- } from "./chunk-ZRYACED2.js";
34
+ } from "./chunk-KYBO7FGP.js";
31
35
  import "./chunk-VDROUXFT.js";
32
- import "./chunk-J2J24JVC.js";
33
36
  import "./chunk-4QEMALXF.js";
34
- import "./chunk-ZO3PZGNQ.js";
37
+ import "./chunk-FZKBTF34.js";
35
38
  import "./chunk-ZDH4XI7W.js";
36
- import "./chunk-TY32TUNI.js";
39
+ import "./chunk-ZFCEXTNI.js";
40
+ import "./chunk-J2J24JVC.js";
41
+ import "./chunk-E72GXBXF.js";
37
42
  export {
38
43
  AuthServiceDefinition,
39
44
  AuthServiceFacade,
@@ -47,6 +52,8 @@ export {
47
52
  SrklServiceFacade,
48
53
  StorageServiceDefinition,
49
54
  StorageServiceFacade,
55
+ WorkspaceGraphServiceDefinition,
56
+ WorkspaceGraphServiceFacade,
50
57
  WorkspaceServiceDefinition,
51
58
  WorkspaceServiceFacade,
52
59
  krnlAuthServiceDefinition,
@@ -61,6 +68,8 @@ export {
61
68
  krnlSrklServiceFacade,
62
69
  krnlStorageServiceDefinition,
63
70
  krnlStorageServiceFacade,
71
+ krnlWorkspaceGraphServiceDefinition,
72
+ krnlWorkspaceGraphServiceFacade,
64
73
  krnlWorkspaceServiceDefinition,
65
74
  krnlWorkspaceServiceFacade
66
75
  };
@@ -228,4 +228,67 @@ declare class NodeGraphPersistenceService {
228
228
  }
229
229
  declare const nodeGraphPersistence: NodeGraphPersistenceService;
230
230
 
231
- export { CompositeBackend, EndpointGenerator, type GeneratedEndpointSummary, LOCAL_STORAGE_GRAPHS_PREFIX, type LocalService, NodeGraphPersistenceService, type NodeGraphValidationResult, type RemoteServiceProxy, type SaveGraphOptions, type UniversalAppEntity, type UniversalGraphEdge, type UniversalGraphNode, type UniversalNodeGraphDocument, type UniversalStorageConnection, createBackend, createCompositeService, createLocalService, createRemoteService, exportGraphAsJsonFile, nodeGraphPersistence, parseGraphJsonFile, validateGraphDocument };
231
+ /**
232
+ * @file workspaceGraphService.ts
233
+ * @description Universal workspace-scoped graph persistence service.
234
+ *
235
+ * This service owns graph documents and storage only. It does not know about
236
+ * BRWLR, Playwright, ZX, node factories, or any application-specific node type.
237
+ */
238
+
239
+ interface WorkspaceGraphDocument extends UniversalNodeGraphDocument {
240
+ workspaceId: string;
241
+ graphId: string;
242
+ graphSlug: string;
243
+ }
244
+ interface WorkspaceGraphSummary {
245
+ id: string;
246
+ name: string;
247
+ slug: string;
248
+ createdAt: string;
249
+ updatedAt: string;
250
+ nodeCount: number;
251
+ }
252
+ declare const workspaceGraphService: {
253
+ listGraphs(userId: string, workspaceId: string): Promise<{
254
+ success: true;
255
+ graphs: WorkspaceGraphSummary[];
256
+ }>;
257
+ createGraph(userId: string, workspaceId: string, input: {
258
+ name?: string;
259
+ }): Promise<{
260
+ success: true;
261
+ graph: WorkspaceGraphDocument;
262
+ graphs: any;
263
+ }>;
264
+ getGraph(userId: string, workspaceId: string, slug: string): Promise<{
265
+ success: true;
266
+ graph: WorkspaceGraphDocument;
267
+ }>;
268
+ saveGraph(userId: string, workspaceId: string, slug: string, patch: {
269
+ nodes?: UniversalGraphNode[];
270
+ edges?: UniversalGraphEdge[];
271
+ name?: string;
272
+ }): Promise<{
273
+ success: true;
274
+ graph: WorkspaceGraphDocument;
275
+ }>;
276
+ deleteGraph(userId: string, workspaceId: string, slug: string): Promise<{
277
+ success: true;
278
+ deletedSlug: string;
279
+ graphs: any;
280
+ }>;
281
+ duplicateGraph(userId: string, workspaceId: string, slug: string, newName?: string): Promise<{
282
+ success: true;
283
+ graph: WorkspaceGraphDocument;
284
+ graphs: any;
285
+ }>;
286
+ clearGraph(userId: string, workspaceId: string, slug: string): Promise<any>;
287
+ getGraphDocument(userId: string, workspaceId: string, slug: string): Promise<any>;
288
+ saveGraphDocument(userId: string, workspaceId: string, document: WorkspaceGraphDocument): Promise<{
289
+ success: true;
290
+ graph: WorkspaceGraphDocument;
291
+ }>;
292
+ };
293
+
294
+ export { CompositeBackend, EndpointGenerator, type GeneratedEndpointSummary, LOCAL_STORAGE_GRAPHS_PREFIX, type LocalService, NodeGraphPersistenceService, type NodeGraphValidationResult, type RemoteServiceProxy, type SaveGraphOptions, type UniversalAppEntity, type UniversalGraphEdge, type UniversalGraphNode, type UniversalNodeGraphDocument, type UniversalStorageConnection, type WorkspaceGraphDocument, type WorkspaceGraphSummary, createBackend, createCompositeService, createLocalService, createRemoteService, exportGraphAsJsonFile, nodeGraphPersistence, parseGraphJsonFile, validateGraphDocument, workspaceGraphService };
@@ -11,8 +11,12 @@ import {
11
11
  nodeGraphPersistence,
12
12
  parseGraphJsonFile,
13
13
  validateGraphDocument
14
- } from "../chunk-7B24ZWB3.js";
15
- import "../chunk-TY32TUNI.js";
14
+ } from "../chunk-R27SHBHK.js";
15
+ import {
16
+ workspaceGraphService
17
+ } from "../chunk-ZFCEXTNI.js";
18
+ import "../chunk-J2J24JVC.js";
19
+ import "../chunk-E72GXBXF.js";
16
20
  export {
17
21
  CompositeBackend,
18
22
  EndpointGenerator,
@@ -25,5 +29,6 @@ export {
25
29
  exportGraphAsJsonFile,
26
30
  nodeGraphPersistence,
27
31
  parseGraphJsonFile,
28
- validateGraphDocument
32
+ validateGraphDocument,
33
+ workspaceGraphService
29
34
  };
@@ -1,4 +1,11 @@
1
1
  import "../chunk-LS3HWJBX.js";
2
+ import {
3
+ authorizeB2,
4
+ b2DownloadFile,
5
+ b2ListBuckets,
6
+ b2ListFileNames,
7
+ b2UploadFile
8
+ } from "../chunk-4QEMALXF.js";
2
9
  import {
3
10
  BackblazeB2Adapter,
4
11
  BaseStorageAdapter,
@@ -14,13 +21,6 @@ import {
14
21
  renameS3Folder,
15
22
  resolveBackblazeEndpoint
16
23
  } from "../chunk-J2J24JVC.js";
17
- import {
18
- authorizeB2,
19
- b2DownloadFile,
20
- b2ListBuckets,
21
- b2ListFileNames,
22
- b2UploadFile
23
- } from "../chunk-4QEMALXF.js";
24
24
  export {
25
25
  BackblazeB2Adapter,
26
26
  BaseStorageAdapter,
@@ -6,11 +6,12 @@ import {
6
6
  WorkspaceFS,
7
7
  remoteWorkspaceService,
8
8
  workingWorkspaceService
9
- } from "../chunk-DULUHQ5S.js";
9
+ } from "../chunk-GPXV4GBD.js";
10
10
  import {
11
11
  formatCanonicalWorkspaceFolderName,
12
12
  sanitizeWorkspaceName
13
- } from "../chunk-ZO3PZGNQ.js";
13
+ } from "../chunk-FZKBTF34.js";
14
+ import "../chunk-E72GXBXF.js";
14
15
  export {
15
16
  RemoteWorkspaceService,
16
17
  SyncEngine,