@skaile/workspaces 0.27.0 → 0.29.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 (92) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/dist/{asset-feeds-DGZO27M7.js → asset-feeds-2V7LZIG7.js} +4 -4
  3. package/dist/{asset-feeds-DGZO27M7.js.map → asset-feeds-2V7LZIG7.js.map} +1 -1
  4. package/dist/asset-manager/index.js +1 -1
  5. package/dist/{chunk-BUL5H6J7.js → chunk-3OKP6F2J.js} +3 -3
  6. package/dist/{chunk-BUL5H6J7.js.map → chunk-3OKP6F2J.js.map} +1 -1
  7. package/dist/{chunk-3ZER5DST.js → chunk-BZ2JU7IP.js} +3 -3
  8. package/dist/{chunk-3ZER5DST.js.map → chunk-BZ2JU7IP.js.map} +1 -1
  9. package/dist/{chunk-A4ASAIKK.js → chunk-CBNMIKUO.js} +2 -2
  10. package/dist/{chunk-A4ASAIKK.js.map → chunk-CBNMIKUO.js.map} +1 -1
  11. package/dist/{chunk-DGM74UP4.js → chunk-CMG3GJ6B.js} +35 -3
  12. package/dist/chunk-CMG3GJ6B.js.map +1 -0
  13. package/dist/{chunk-XHBPQ7QP.js → chunk-FENG6OO6.js} +46 -20
  14. package/dist/chunk-FENG6OO6.js.map +1 -0
  15. package/dist/{chunk-WRRYESHC.js → chunk-MIH45XPY.js} +99 -65
  16. package/dist/chunk-MIH45XPY.js.map +1 -0
  17. package/dist/{chunk-MZDXEFXF.js → chunk-TDZGENVP.js} +130 -17
  18. package/dist/chunk-TDZGENVP.js.map +1 -0
  19. package/dist/{chunk-UAW7VRAL.js → chunk-XFQ2OXYR.js} +2 -2
  20. package/dist/{chunk-UAW7VRAL.js.map → chunk-XFQ2OXYR.js.map} +1 -1
  21. package/dist/cli/index.js +21 -27
  22. package/dist/cli/index.js.map +1 -1
  23. package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
  24. package/dist/connectors/config.js +1 -1
  25. package/dist/connectors/index.js +2 -2
  26. package/dist/connectors/src/config.d.ts +46 -1
  27. package/dist/connectors/src/config.d.ts.map +1 -1
  28. package/dist/connectors/src/index.d.ts +1 -1
  29. package/dist/connectors/src/index.d.ts.map +1 -1
  30. package/dist/{ensure-sources-KQQEUDKM.js → ensure-sources-BNSRO5G7.js} +3 -3
  31. package/dist/{ensure-sources-KQQEUDKM.js.map → ensure-sources-BNSRO5G7.js.map} +1 -1
  32. package/dist/factory-assets/connectors/deploy.js +2 -2
  33. package/dist/factory-assets/connectors/devserver.js +2 -2
  34. package/dist/factory-assets/connectors/flow/adapter.js +2 -2
  35. package/dist/factory-assets/connectors/flow/run-flow.js +3 -3
  36. package/dist/factory-assets/connectors/flow.js +2 -2
  37. package/dist/factory-assets/connectors/git.js +2 -2
  38. package/dist/factory-assets/connectors/gmail.js +2 -2
  39. package/dist/factory-assets/connectors/googledrive/driver.d.ts +0 -12
  40. package/dist/factory-assets/connectors/googledrive/driver.d.ts.map +1 -1
  41. package/dist/factory-assets/connectors/googledrive.js +2 -2
  42. package/dist/factory-assets/connectors/local.js +2 -2
  43. package/dist/factory-assets/connectors/mattermost.js +2 -2
  44. package/dist/factory-assets/connectors/memory.js +2 -2
  45. package/dist/factory-assets/connectors/minio.js +2 -2
  46. package/dist/factory-assets/connectors/postgres.js +2 -2
  47. package/dist/factory-assets/connectors/s3.js +2 -2
  48. package/dist/factory-assets/connectors/sharepoint/driver.d.ts.map +1 -1
  49. package/dist/factory-assets/connectors/sharepoint.js +2 -2
  50. package/dist/factory-assets/connectors/sqlite.js +2 -2
  51. package/dist/factory-assets/connectors/static-server.js +2 -2
  52. package/dist/factory-assets/connectors/tunnel.js +2 -2
  53. package/dist/factory-assets/connectors/webdav/driver.d.ts +2 -0
  54. package/dist/factory-assets/connectors/webdav/driver.d.ts.map +1 -1
  55. package/dist/factory-assets/connectors/webdav.js +2 -2
  56. package/dist/factory-assets/connectors/xstate-store.js +2 -2
  57. package/dist/factory-assets/connectors/xstate.js +2 -2
  58. package/dist/library/index.js +1 -1
  59. package/dist/library/src/index.d.ts +2 -2
  60. package/dist/library/src/index.d.ts.map +1 -1
  61. package/dist/library/src/library.d.ts +20 -20
  62. package/dist/library/src/library.d.ts.map +1 -1
  63. package/dist/library/src/local/db.d.ts.map +1 -1
  64. package/dist/library/src/local/library.d.ts +6 -6
  65. package/dist/library/src/local/library.d.ts.map +1 -1
  66. package/dist/library/src/local/local-catalog-source.d.ts +1 -1
  67. package/dist/library/src/local/schema.d.ts +9 -9
  68. package/dist/library/src/local/schema.d.ts.map +1 -1
  69. package/dist/library/src/preset/apply.d.ts +9 -9
  70. package/dist/library/src/preset/apply.d.ts.map +1 -1
  71. package/dist/library/src/preset/resolve-item.d.ts +1 -1
  72. package/dist/library/src/workspace-config.d.ts +11 -8
  73. package/dist/library/src/workspace-config.d.ts.map +1 -1
  74. package/dist/{open-library-I7YTADMD.js → open-library-3VJY74LQ.js} +4 -4
  75. package/dist/{open-library-I7YTADMD.js.map → open-library-3VJY74LQ.js.map} +1 -1
  76. package/dist/runner/index.js +4 -4
  77. package/dist/runner/src/capability-roundtrip.d.ts +23 -0
  78. package/dist/runner/src/capability-roundtrip.d.ts.map +1 -1
  79. package/dist/runner/src/runner-capabilities.d.ts.map +1 -1
  80. package/dist/runner/src/serve.d.ts.map +1 -1
  81. package/dist/runner/src/session-resource-handlers.d.ts +23 -0
  82. package/dist/runner/src/session-resource-handlers.d.ts.map +1 -0
  83. package/dist/sdk/asset-manager.js +1 -1
  84. package/dist/sdk/index.js +4 -4
  85. package/dist/sdk/runner.js +4 -4
  86. package/dist/tui/index.js +4 -4
  87. package/dist/workspace-plugin/index.js +1 -1
  88. package/package.json +1 -1
  89. package/dist/chunk-DGM74UP4.js.map +0 -1
  90. package/dist/chunk-MZDXEFXF.js.map +0 -1
  91. package/dist/chunk-WRRYESHC.js.map +0 -1
  92. package/dist/chunk-XHBPQ7QP.js.map +0 -1
@@ -50,25 +50,25 @@ var InstanceNotFoundError = class extends LibraryError {
50
50
  this.name = "InstanceNotFoundError";
51
51
  }
52
52
  };
53
- var SubscriptionNotFoundError = class extends LibraryError {
53
+ var AssignmentNotFoundError = class extends LibraryError {
54
54
  constructor(id) {
55
- super(`Subscription not found: ${id}`, "SUBSCRIPTION_NOT_FOUND");
56
- this.name = "SubscriptionNotFoundError";
55
+ super(`Assignment not found: ${id}`, "ASSIGNMENT_NOT_FOUND");
56
+ this.name = "AssignmentNotFoundError";
57
57
  }
58
58
  };
59
- var DuplicateSubscriptionError = class extends LibraryError {
59
+ var DuplicateAssignmentError = class extends LibraryError {
60
60
  constructor(workspaceId, instanceId) {
61
61
  super(
62
- `Workspace "${workspaceId}" already subscribes to instance "${instanceId}"`,
63
- "DUPLICATE_SUBSCRIPTION"
62
+ `Workspace "${workspaceId}" already has instance "${instanceId}" assigned`,
63
+ "DUPLICATE_ASSIGNMENT"
64
64
  );
65
- this.name = "DuplicateSubscriptionError";
65
+ this.name = "DuplicateAssignmentError";
66
66
  }
67
67
  };
68
68
  var InstanceHasConsumersError = class extends LibraryError {
69
69
  constructor(instanceId, count) {
70
70
  super(
71
- `Instance "${instanceId}" has ${count} active subscription(s). Use { cascade: true } to force delete.`,
71
+ `Instance "${instanceId}" has ${count} active assignment(s). Use { cascade: true } to force delete.`,
72
72
  "INSTANCE_HAS_CONSUMERS"
73
73
  );
74
74
  this.name = "InstanceHasConsumersError";
@@ -99,7 +99,7 @@ var CatalogConfigSchema = z2.object({
99
99
  var LibraryConfigSchema = z2.object({
100
100
  /** Library storage directory. Default: ~/.skaile/libraries */
101
101
  dir: z2.string().optional(),
102
- /** Default pin policy for new instances/subscriptions. */
102
+ /** Default pin policy for new instances/assignments. */
103
103
  pin_policy: z2.enum(PIN_POLICIES).optional()
104
104
  });
105
105
  var SkaileConfigSchema = z2.object({
@@ -198,9 +198,9 @@ function saveConfig(filePath, config) {
198
198
  var schema_exports = {};
199
199
  __export(schema_exports, {
200
200
  assetDefinitions: () => assetDefinitions,
201
+ assignments: () => assignments,
201
202
  instances: () => instances,
202
- libraries: () => libraries,
203
- subscriptions: () => subscriptions
203
+ libraries: () => libraries
204
204
  });
205
205
  var libraries = sqliteTable("libraries", {
206
206
  /** UUID primary key. */
@@ -256,12 +256,12 @@ var instances = sqliteTable("instances", {
256
256
  createdBy: text("created_by"),
257
257
  sourceCommitSha: text("source_commit_sha")
258
258
  });
259
- var subscriptions = sqliteTable("subscriptions", {
259
+ var assignments = sqliteTable("assignments", {
260
260
  id: text("id").primaryKey(),
261
261
  workspaceId: text("workspace_id").notNull(),
262
262
  instanceId: text("instance_id").notNull(),
263
263
  pinPolicy: text("pin_policy").notNull(),
264
- subscribedAt: text("subscribed_at").notNull()
264
+ assignedAt: text("assigned_at").notNull()
265
265
  });
266
266
  var SKAILE_HOME_ENV = "SKAILE_HOME";
267
267
  function getSidecarRoot() {
@@ -417,16 +417,16 @@ CREATE TABLE IF NOT EXISTS instances (
417
417
  );
418
418
  CREATE INDEX IF NOT EXISTS idx_instances_def_ref ON instances(def_ref);
419
419
 
420
- CREATE TABLE IF NOT EXISTS subscriptions (
420
+ CREATE TABLE IF NOT EXISTS assignments (
421
421
  id TEXT PRIMARY KEY,
422
422
  workspace_id TEXT NOT NULL,
423
423
  instance_id TEXT NOT NULL REFERENCES instances(id) ON DELETE CASCADE,
424
424
  pin_policy TEXT NOT NULL,
425
- subscribed_at TEXT NOT NULL
425
+ assigned_at TEXT NOT NULL
426
426
  );
427
- CREATE UNIQUE INDEX IF NOT EXISTS idx_subs_ws_instance
428
- ON subscriptions(workspace_id, instance_id);
429
- CREATE INDEX IF NOT EXISTS idx_subs_instance_id ON subscriptions(instance_id);
427
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_assignments_ws_instance
428
+ ON assignments(workspace_id, instance_id);
429
+ CREATE INDEX IF NOT EXISTS idx_assignments_instance_id ON assignments(instance_id);
430
430
  `;
431
431
  async function legacySourcesPresent(client) {
432
432
  const rs = await client.execute(
@@ -506,6 +506,26 @@ async function runLibrariesMigration(client) {
506
506
  stmts.push({ sql: `DROP TABLE sources;` });
507
507
  await client.batch(stmts);
508
508
  }
509
+ async function legacySubscriptionsPresent(client) {
510
+ const rs = await client.execute(
511
+ "SELECT name FROM sqlite_master WHERE type='table' AND name='subscriptions'"
512
+ );
513
+ return rs.rows.length > 0;
514
+ }
515
+ async function assignmentsPresent(client) {
516
+ const rs = await client.execute(
517
+ "SELECT name FROM sqlite_master WHERE type='table' AND name='assignments'"
518
+ );
519
+ return rs.rows.length > 0;
520
+ }
521
+ async function runAssignmentsMigration(client) {
522
+ await client.batch([
523
+ { sql: "ALTER TABLE subscriptions RENAME TO assignments;" },
524
+ { sql: "ALTER TABLE assignments RENAME COLUMN subscribed_at TO assigned_at;" },
525
+ { sql: "DROP INDEX IF EXISTS idx_subs_ws_instance;" },
526
+ { sql: "DROP INDEX IF EXISTS idx_subs_instance_id;" }
527
+ ]);
528
+ }
509
529
  function assertNoLegacyLibDb(newDbPath) {
510
530
  if (fs11.existsSync(newDbPath)) return;
511
531
  const parent = path4.dirname(newDbPath);
@@ -545,6 +565,9 @@ async function createLibraryDb(dbPath) {
545
565
  if (await legacySourcesPresent(client) && !await librariesPresent(client)) {
546
566
  await runLibrariesMigration(client);
547
567
  }
568
+ if (await legacySubscriptionsPresent(client) && !await assignmentsPresent(client)) {
569
+ await runAssignmentsMigration(client);
570
+ }
548
571
  await client.executeMultiple(DDL);
549
572
  if (await librariesPresent(client)) {
550
573
  const storeRows = await client.execute({
@@ -632,13 +655,13 @@ function rowToInstance(row) {
632
655
  sourceCommitSha: row.sourceCommitSha ?? void 0
633
656
  };
634
657
  }
635
- function rowToSubscription(row) {
658
+ function rowToAssignment(row) {
636
659
  return {
637
660
  id: row.id,
638
661
  workspaceId: row.workspaceId,
639
662
  instanceId: row.instanceId,
640
663
  pinPolicy: row.pinPolicy,
641
- subscribedAt: new Date(row.subscribedAt)
664
+ assignedAt: new Date(row.assignedAt)
642
665
  };
643
666
  }
644
667
  var LocalIndex = class {
@@ -960,42 +983,42 @@ var LocalIndex = class {
960
983
  const db = await this.ensureDb();
961
984
  const existing = await db.select().from(instances).where(eq(instances.id, id)).get();
962
985
  if (!existing) throw new InstanceNotFoundError(id);
963
- const consumers = await db.select().from(subscriptions).where(eq(subscriptions.instanceId, id)).all();
986
+ const consumers = await db.select().from(assignments).where(eq(assignments.instanceId, id)).all();
964
987
  if (consumers.length > 0 && !opts?.cascade) {
965
988
  throw new InstanceHasConsumersError(id, consumers.length);
966
989
  }
967
990
  await db.delete(instances).where(eq(instances.id, id)).run();
968
991
  }
969
- // -- Subscriptions -------------------------------------------------------
970
- async subscribe(workspaceId, instanceId, pin) {
992
+ // -- Assignments ---------------------------------------------------------
993
+ async assign(workspaceId, instanceId, pin) {
971
994
  const db = await this.ensureDb();
972
995
  const instance = await db.select().from(instances).where(eq(instances.id, instanceId)).get();
973
996
  if (!instance) throw new InstanceNotFoundError(instanceId);
974
- const existing = await db.select().from(subscriptions).where(
997
+ const existing = await db.select().from(assignments).where(
975
998
  and(
976
- eq(subscriptions.workspaceId, workspaceId),
977
- eq(subscriptions.instanceId, instanceId)
999
+ eq(assignments.workspaceId, workspaceId),
1000
+ eq(assignments.instanceId, instanceId)
978
1001
  )
979
1002
  ).get();
980
- if (existing) throw new DuplicateSubscriptionError(workspaceId, instanceId);
1003
+ if (existing) throw new DuplicateAssignmentError(workspaceId, instanceId);
981
1004
  const id = crypto.randomUUID();
982
1005
  const now = (/* @__PURE__ */ new Date()).toISOString();
983
- await db.insert(subscriptions).values({ id, workspaceId, instanceId, pinPolicy: pin, subscribedAt: now }).run();
984
- return { id, workspaceId, instanceId, pinPolicy: pin, subscribedAt: new Date(now) };
1006
+ await db.insert(assignments).values({ id, workspaceId, instanceId, pinPolicy: pin, assignedAt: now }).run();
1007
+ return { id, workspaceId, instanceId, pinPolicy: pin, assignedAt: new Date(now) };
985
1008
  }
986
- async unsubscribe(subscriptionId) {
1009
+ async unassign(assignmentId) {
987
1010
  const db = await this.ensureDb();
988
- const existing = await db.select().from(subscriptions).where(eq(subscriptions.id, subscriptionId)).get();
989
- if (!existing) throw new SubscriptionNotFoundError(subscriptionId);
990
- await db.delete(subscriptions).where(eq(subscriptions.id, subscriptionId)).run();
1011
+ const existing = await db.select().from(assignments).where(eq(assignments.id, assignmentId)).get();
1012
+ if (!existing) throw new AssignmentNotFoundError(assignmentId);
1013
+ await db.delete(assignments).where(eq(assignments.id, assignmentId)).run();
991
1014
  }
992
- async listSubscriptions(workspaceId) {
1015
+ async listAssignments(workspaceId) {
993
1016
  const db = await this.ensureDb();
994
- return (await db.select().from(subscriptions).where(eq(subscriptions.workspaceId, workspaceId)).all()).map(rowToSubscription);
1017
+ return (await db.select().from(assignments).where(eq(assignments.workspaceId, workspaceId)).all()).map(rowToAssignment);
995
1018
  }
996
1019
  async getConsumptionGraph(instanceId) {
997
1020
  const db = await this.ensureDb();
998
- return (await db.select().from(subscriptions).where(eq(subscriptions.instanceId, instanceId)).all()).map(rowToSubscription);
1021
+ return (await db.select().from(assignments).where(eq(assignments.instanceId, instanceId)).all()).map(rowToAssignment);
999
1022
  }
1000
1023
  };
1001
1024
 
@@ -1507,8 +1530,8 @@ var WorkspaceConfigV2Schema = z2.object({
1507
1530
  library: LibrarySectionSchema.optional(),
1508
1531
  presets_applied: z2.array(PresetAppliedSchema).optional()
1509
1532
  });
1510
- var LockSubscriptionSchema = z2.object({
1511
- subscription_id: z2.string().uuid(),
1533
+ var LockAssignmentSchema = z2.object({
1534
+ assignment_id: z2.string().uuid(),
1512
1535
  instance_id: z2.string().uuid(),
1513
1536
  def_ref: z2.string(),
1514
1537
  resolved_version: z2.string(),
@@ -1527,7 +1550,7 @@ var PresetExpandedSchema = z2.object({
1527
1550
  var LockFileSchema = z2.object({
1528
1551
  version: z2.literal(2),
1529
1552
  generated_at: z2.string(),
1530
- subscriptions: z2.array(LockSubscriptionSchema).default([]),
1553
+ assignments: z2.array(LockAssignmentSchema).default([]),
1531
1554
  requires_graph: z2.array(RequiresEdgeSchema).default([]),
1532
1555
  presets_expanded: z2.array(PresetExpandedSchema).default([])
1533
1556
  });
@@ -1564,6 +1587,17 @@ function loadLockFile(dir) {
1564
1587
  if (!fs11.existsSync(filePath)) return null;
1565
1588
  const content = fs11.readFileSync(filePath, "utf-8");
1566
1589
  const raw = parse(content);
1590
+ if (raw !== null && !("assignments" in raw) && "subscriptions" in raw) {
1591
+ const legacySubs = raw["subscriptions"];
1592
+ raw["assignments"] = Array.isArray(legacySubs) ? legacySubs.map((s) => {
1593
+ if (s !== null && typeof s === "object" && "subscription_id" in s && !("assignment_id" in s)) {
1594
+ const { subscription_id, ...rest } = s;
1595
+ return { assignment_id: subscription_id, ...rest };
1596
+ }
1597
+ return s;
1598
+ }) : [];
1599
+ delete raw["subscriptions"];
1600
+ }
1567
1601
  return LockFileSchema.parse(raw);
1568
1602
  }
1569
1603
  function saveLockFile(dir, lock) {
@@ -1582,7 +1616,7 @@ function createEmptyLockFile() {
1582
1616
  return {
1583
1617
  version: 2,
1584
1618
  generated_at: (/* @__PURE__ */ new Date()).toISOString(),
1585
- subscriptions: [],
1619
+ assignments: [],
1586
1620
  requires_graph: [],
1587
1621
  presets_expanded: []
1588
1622
  };
@@ -3252,9 +3286,9 @@ async function applyPreset(presetRef, manifest, inputs, opts) {
3252
3286
  const pinPolicy = opts.pinPolicy ?? "minor-track";
3253
3287
  const depthError = validateNestingDepth(presetRef, depth);
3254
3288
  if (depthError) {
3255
- return { instances: [], subscriptions: [], errors: [depthError] };
3289
+ return { instances: [], assignments: [], errors: [depthError] };
3256
3290
  }
3257
- const result = { instances: [], subscriptions: [], errors: [] };
3291
+ const result = { instances: [], assignments: [], errors: [] };
3258
3292
  const itemResults = /* @__PURE__ */ new Map();
3259
3293
  for (const item of manifest.items) {
3260
3294
  const itemResult = await applyItemImpl(
@@ -3271,7 +3305,7 @@ async function applyPreset(presetRef, manifest, inputs, opts) {
3271
3305
  if (item.id && itemResult.instances.length > 0) {
3272
3306
  itemResults.set(item.id, itemResult.instances[0]);
3273
3307
  }
3274
- result.subscriptions.push(...itemResult.subscriptions);
3308
+ result.assignments.push(...itemResult.assignments);
3275
3309
  }
3276
3310
  return result;
3277
3311
  }
@@ -3280,7 +3314,7 @@ async function applyPresetFromData(presetRef, data, inputs, opts) {
3280
3314
  if (!parseResult.ok || !parseResult.preset) {
3281
3315
  return {
3282
3316
  instances: [],
3283
- subscriptions: [],
3317
+ assignments: [],
3284
3318
  errors: parseResult.errors.map((e) => `Parse: ${e}`)
3285
3319
  };
3286
3320
  }
@@ -3295,34 +3329,34 @@ async function applyItemImpl(presetRef, item, inputs, opts, depth, pinPolicy, it
3295
3329
  if (!target) {
3296
3330
  return {
3297
3331
  instances: [],
3298
- subscriptions: [],
3332
+ assignments: [],
3299
3333
  errors: [
3300
3334
  `Cross-item ref "#${resolved.targetId}" not yet resolved (items must be ordered)`
3301
3335
  ]
3302
3336
  };
3303
3337
  }
3304
- return { instances: [target], subscriptions: [], errors: [] };
3338
+ return { instances: [target], assignments: [], errors: [] };
3305
3339
  }
3306
3340
  case "library-instance": {
3307
3341
  if (!resolved.instance) {
3308
3342
  return {
3309
3343
  instances: [],
3310
- subscriptions: [],
3344
+ assignments: [],
3311
3345
  errors: [`Library instance "${resolved.instanceId}" not found`]
3312
3346
  };
3313
3347
  }
3314
3348
  try {
3315
- const sub = await library.subscribe(opts.workspaceId, resolved.instanceId, pinPolicy);
3316
- return { instances: [resolved.instance], subscriptions: [sub], errors: [] };
3349
+ const asgn = await library.assign(opts.workspaceId, resolved.instanceId, pinPolicy);
3350
+ return { instances: [resolved.instance], assignments: [asgn], errors: [] };
3317
3351
  } catch {
3318
- return { instances: [resolved.instance], subscriptions: [], errors: [] };
3352
+ return { instances: [resolved.instance], assignments: [], errors: [] };
3319
3353
  }
3320
3354
  }
3321
3355
  case "nested-preset": {
3322
3356
  if (!opts.loadPreset) {
3323
3357
  return {
3324
3358
  instances: [],
3325
- subscriptions: [],
3359
+ assignments: [],
3326
3360
  errors: [`Cannot resolve nested preset "${resolved.presetRef}" \u2014 no loader provided`]
3327
3361
  };
3328
3362
  }
@@ -3330,13 +3364,13 @@ async function applyItemImpl(presetRef, item, inputs, opts, depth, pinPolicy, it
3330
3364
  if (!nestedData) {
3331
3365
  return {
3332
3366
  instances: [],
3333
- subscriptions: [],
3367
+ assignments: [],
3334
3368
  errors: [`Nested preset "${resolved.presetRef}" not found`]
3335
3369
  };
3336
3370
  }
3337
3371
  const parseResult = parsePreset(nestedData);
3338
3372
  if (!parseResult.ok || !parseResult.preset) {
3339
- return { instances: [], subscriptions: [], errors: parseResult.errors };
3373
+ return { instances: [], assignments: [], errors: parseResult.errors };
3340
3374
  }
3341
3375
  const nestedInputs = {
3342
3376
  ...item.inputs ?? {},
@@ -3348,7 +3382,7 @@ async function applyItemImpl(presetRef, item, inputs, opts, depth, pinPolicy, it
3348
3382
  });
3349
3383
  return {
3350
3384
  instances: nestedResult.instances,
3351
- subscriptions: nestedResult.subscriptions,
3385
+ assignments: nestedResult.assignments,
3352
3386
  errors: nestedResult.errors
3353
3387
  };
3354
3388
  }
@@ -3361,12 +3395,12 @@ async function applyItemImpl(presetRef, item, inputs, opts, depth, pinPolicy, it
3361
3395
  const secretPhs = item.placeholders.filter((ph) => isSecretPlaceholder(ph));
3362
3396
  const validation = validateAllPlaceholders(nonSecretPhs, itemInputs);
3363
3397
  if (!validation.valid) {
3364
- return { instances: [], subscriptions: [], errors: validation.errors };
3398
+ return { instances: [], assignments: [], errors: validation.errors };
3365
3399
  }
3366
3400
  validatedValues = validation.values;
3367
3401
  const secretValidation = validateAllPlaceholders(secretPhs, itemInputs);
3368
3402
  if (!secretValidation.valid) {
3369
- return { instances: [], subscriptions: [], errors: secretValidation.errors };
3403
+ return { instances: [], assignments: [], errors: secretValidation.errors };
3370
3404
  }
3371
3405
  for (const [key, value] of Object.entries(secretValidation.values)) {
3372
3406
  secretValues[key] = String(value);
@@ -3389,7 +3423,7 @@ async function applyItemImpl(presetRef, item, inputs, opts, depth, pinPolicy, it
3389
3423
  } catch (err) {
3390
3424
  return {
3391
3425
  instances: [],
3392
- subscriptions: [],
3426
+ assignments: [],
3393
3427
  errors: [
3394
3428
  `Secret storage failed for "${item.ref}": ${err instanceof Error ? err.message : String(err)}`
3395
3429
  ]
@@ -3404,17 +3438,17 @@ async function applyItemImpl(presetRef, item, inputs, opts, depth, pinPolicy, it
3404
3438
  credentialRef: interpolated.credentialRef,
3405
3439
  createdBy: opts.createdBy ?? `preset:${presetRef}`
3406
3440
  });
3407
- const subscriptions2 = [];
3441
+ const assignments2 = [];
3408
3442
  try {
3409
- const sub = await library.subscribe(opts.workspaceId, instance.id, pinPolicy);
3410
- subscriptions2.push(sub);
3443
+ const asgn = await library.assign(opts.workspaceId, instance.id, pinPolicy);
3444
+ assignments2.push(asgn);
3411
3445
  } catch {
3412
3446
  }
3413
- return { instances: [instance], subscriptions: subscriptions2, errors: [] };
3447
+ return { instances: [instance], assignments: assignments2, errors: [] };
3414
3448
  } catch (err) {
3415
3449
  return {
3416
3450
  instances: [],
3417
- subscriptions: [],
3451
+ assignments: [],
3418
3452
  errors: [
3419
3453
  `Instance creation failed for "${item.ref}": ${err instanceof Error ? err.message : String(err)}`
3420
3454
  ]
@@ -3533,6 +3567,6 @@ function deepEqual(a, b) {
3533
3567
  return JSON.stringify(a) === JSON.stringify(b);
3534
3568
  }
3535
3569
 
3536
- export { CatalogCache, CatalogConfigSchema, CatalogHttpError, DuplicateLibraryNameError, DuplicateSubscriptionError, GitSyncDriver, InstanceHasConsumersError, InstanceNotFoundError, InterpolationError, KNOWN_ASSET_KINDS, KnowledgeManifestSchema, LIBRARY_BACKENDS, LIBRARY_OWNERSHIPS, LIBRARY_STRUCTURES, LOCAL_CATALOG_URL, LibraryConfigSchema, LibraryError, LibraryInstanceRefSchema, LibraryManager, LibrarySectionSchema, LibrarySyncError, LocalCatalogSource, LocalIndex, LocalSyncDriver, LockFileSchema, LockSubscriptionSchema, OfflineError, OperationNotPermittedError, PIN_POLICIES, PinPolicySchema, PresetAppliedSchema, PresetExpandedSchema, RemoteCatalogSource, RequiresEdgeSchema, RestCatalogSource, SidecarGit, SkaileConfigSchema, SourceNotFoundError, SubscriptionNotFoundError, TarballHashMismatchError, UserLibraryNotFoundError, WorkspaceConfigV2Schema, applyNonStructuralUpgrade, applyPreset, applyPresetFromData, classifyRef, createEmptyLockFile, deriveSlug, detectChanges, detectNestedPresetRefs, detectWorkspaceVersion, evaluateUpgrade, extractLibraryInstanceId, extractReferencedKeys, filterKey, getConfigDefaults, getDefaultValue, getSidecarRoot, getStoreManifestsDir, getStoreRoot, hasInterpolationTokens, interpolate, isLocalCatalogUrl, isSecretPlaceholder, knowledgeKindProvider, listSidecarSlugsOnDisk, loadLockFile, loadWorkspaceV2, migrateSidecarsToStoreIfNeeded, migrateWorkspaceConfig, parsePreset, parsePresetYaml, parseWorkspaceV2, projectConfigPath, queryInstancePickerChoices, resolveAllItems, resolveConfig, resolveIndexPath, resolveItem, resolveLibraryDir, resolvePin, resolveSidecarPaths, saveConfig, saveLockFile, saveWorkspaceV2, sha256Hex, skaileHomeDir, storeSecrets, trpcGetUrl, userConfigPath, validateAllPlaceholders, validateKnowledge, validateNestingDepth, validatePlaceholder, writeManifestIfMissing };
3537
- //# sourceMappingURL=chunk-WRRYESHC.js.map
3538
- //# sourceMappingURL=chunk-WRRYESHC.js.map
3570
+ export { AssignmentNotFoundError, CatalogCache, CatalogConfigSchema, CatalogHttpError, DuplicateAssignmentError, DuplicateLibraryNameError, GitSyncDriver, InstanceHasConsumersError, InstanceNotFoundError, InterpolationError, KNOWN_ASSET_KINDS, KnowledgeManifestSchema, LIBRARY_BACKENDS, LIBRARY_OWNERSHIPS, LIBRARY_STRUCTURES, LOCAL_CATALOG_URL, LibraryConfigSchema, LibraryError, LibraryInstanceRefSchema, LibraryManager, LibrarySectionSchema, LibrarySyncError, LocalCatalogSource, LocalIndex, LocalSyncDriver, LockAssignmentSchema, LockFileSchema, OfflineError, OperationNotPermittedError, PIN_POLICIES, PinPolicySchema, PresetAppliedSchema, PresetExpandedSchema, RemoteCatalogSource, RequiresEdgeSchema, RestCatalogSource, SidecarGit, SkaileConfigSchema, SourceNotFoundError, TarballHashMismatchError, UserLibraryNotFoundError, WorkspaceConfigV2Schema, applyNonStructuralUpgrade, applyPreset, applyPresetFromData, classifyRef, createEmptyLockFile, deriveSlug, detectChanges, detectNestedPresetRefs, detectWorkspaceVersion, evaluateUpgrade, extractLibraryInstanceId, extractReferencedKeys, filterKey, getConfigDefaults, getDefaultValue, getSidecarRoot, getStoreManifestsDir, getStoreRoot, hasInterpolationTokens, interpolate, isLocalCatalogUrl, isSecretPlaceholder, knowledgeKindProvider, listSidecarSlugsOnDisk, loadLockFile, loadWorkspaceV2, migrateSidecarsToStoreIfNeeded, migrateWorkspaceConfig, parsePreset, parsePresetYaml, parseWorkspaceV2, projectConfigPath, queryInstancePickerChoices, resolveAllItems, resolveConfig, resolveIndexPath, resolveItem, resolveLibraryDir, resolvePin, resolveSidecarPaths, saveConfig, saveLockFile, saveWorkspaceV2, sha256Hex, skaileHomeDir, storeSecrets, trpcGetUrl, userConfigPath, validateAllPlaceholders, validateKnowledge, validateNestingDepth, validatePlaceholder, writeManifestIfMissing };
3571
+ //# sourceMappingURL=chunk-MIH45XPY.js.map
3572
+ //# sourceMappingURL=chunk-MIH45XPY.js.map