@skaile/workspaces 0.17.1 → 0.18.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 (49) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/asset-manager/index.js +1 -1
  3. package/dist/base-assets/connectors/deploy.js +1 -1
  4. package/dist/base-assets/connectors/devserver.js +1 -1
  5. package/dist/base-assets/connectors/flow/adapter.js +1 -1
  6. package/dist/base-assets/connectors/flow/run-flow.js +2 -2
  7. package/dist/base-assets/connectors/flow.js +1 -1
  8. package/dist/base-assets/connectors/git/driver.d.ts +6 -2
  9. package/dist/base-assets/connectors/git/driver.d.ts.map +1 -1
  10. package/dist/base-assets/connectors/git.js +1 -1
  11. package/dist/base-assets/connectors/gmail.js +1 -1
  12. package/dist/base-assets/connectors/googledrive.js +1 -1
  13. package/dist/base-assets/connectors/local.js +1 -1
  14. package/dist/base-assets/connectors/mattermost.js +1 -1
  15. package/dist/base-assets/connectors/memory.js +1 -1
  16. package/dist/base-assets/connectors/minio.js +1 -1
  17. package/dist/base-assets/connectors/postgres.js +1 -1
  18. package/dist/base-assets/connectors/redis.js +1 -1
  19. package/dist/base-assets/connectors/s3.js +1 -1
  20. package/dist/base-assets/connectors/sharepoint.js +1 -1
  21. package/dist/base-assets/connectors/sqlite.js +1 -1
  22. package/dist/base-assets/connectors/static-server.js +1 -1
  23. package/dist/base-assets/connectors/tunnel.js +1 -1
  24. package/dist/base-assets/connectors/webdav.js +1 -1
  25. package/dist/base-assets/connectors/xstate-store.js +1 -1
  26. package/dist/base-assets/connectors/xstate.js +1 -1
  27. package/dist/base-assets/connectors/yjs.js +1 -1
  28. package/dist/{chunk-D6GE2WA2.js → chunk-63Y7YN33.js} +2 -2
  29. package/dist/{chunk-D6GE2WA2.js.map → chunk-63Y7YN33.js.map} +1 -1
  30. package/dist/{chunk-RVPZOFSQ.js → chunk-BCZRPFVQ.js} +4 -4
  31. package/dist/{chunk-RVPZOFSQ.js.map → chunk-BCZRPFVQ.js.map} +1 -1
  32. package/dist/{chunk-JMB6VR3I.js → chunk-I7HGX4ZE.js} +71 -4
  33. package/dist/chunk-I7HGX4ZE.js.map +1 -0
  34. package/dist/{chunk-G5E44VG7.js → chunk-OIIGCFYM.js} +3 -3
  35. package/dist/{chunk-G5E44VG7.js.map → chunk-OIIGCFYM.js.map} +1 -1
  36. package/dist/{chunk-F6RXWVRE.js → chunk-YVX66WNQ.js} +2 -2
  37. package/dist/{chunk-F6RXWVRE.js.map → chunk-YVX66WNQ.js.map} +1 -1
  38. package/dist/cli/index.js +5 -5
  39. package/dist/connectors/index.js +1 -1
  40. package/dist/connectors/src/fleet-utils.d.ts +6 -9
  41. package/dist/connectors/src/fleet-utils.d.ts.map +1 -1
  42. package/dist/runner/index.js +3 -3
  43. package/dist/sdk/asset-manager.js +1 -1
  44. package/dist/sdk/index.js +3 -3
  45. package/dist/sdk/runner.js +3 -3
  46. package/dist/tui/index.js +3 -3
  47. package/dist/workspace-plugin/index.js +1 -1
  48. package/package.json +1 -1
  49. package/dist/chunk-JMB6VR3I.js.map +0 -1
@@ -87,7 +87,8 @@ function git(cmd, cwd, timeout = 3e4) {
87
87
  function isValidGitRefOrSha(ref) {
88
88
  if (ref.length === 0 || ref.length > 255) return false;
89
89
  if (/[\s\\~^:?*[\x00-\x1f\x7f`$;&|'"<>()]/.test(ref)) return false;
90
- if (ref.startsWith("-") || ref.endsWith(".lock") || ref.endsWith("/") || ref.endsWith(".")) return false;
90
+ if (ref.startsWith("-") || ref.endsWith(".lock") || ref.endsWith("/") || ref.endsWith("."))
91
+ return false;
91
92
  if (ref.includes("..") || ref.includes("@{")) return false;
92
93
  return true;
93
94
  }
@@ -127,6 +128,9 @@ var GitConnector = class extends AbstractConnector {
127
128
  if (!targetDir) {
128
129
  throw new Error("GitConnector requires ctx.mountTarget to be set by the manager");
129
130
  }
131
+ if (isFleetManaged(declaration.id)) {
132
+ return this.connectFleetManaged(declaration, targetDir);
133
+ }
130
134
  const secrets = ctx.secrets;
131
135
  const tokenMediator = ctx.tokenMediator;
132
136
  const started = Date.now();
@@ -199,7 +203,10 @@ var GitConnector = class extends AbstractConnector {
199
203
  git(`fetch origin ${session.fromRef}`, targetDir);
200
204
  git(`checkout -b ${sessionBranch} FETCH_HEAD`, targetDir);
201
205
  anchored = true;
202
- this.log.info("session branch created from fromRef", { sessionBranch, fromRef: session.fromRef });
206
+ this.log.info("session branch created from fromRef", {
207
+ sessionBranch,
208
+ fromRef: session.fromRef
209
+ });
203
210
  } catch (err) {
204
211
  this.log.warn("fromRef fetch failed, falling back to base branch", {
205
212
  sessionBranch,
@@ -234,6 +241,42 @@ var GitConnector = class extends AbstractConnector {
234
241
  });
235
242
  return this.makeHandle(declaration, state, targetDir);
236
243
  }
244
+ /**
245
+ * Fleet-managed connect: verify the host bind, register an explorer watcher,
246
+ * no-op every git lifecycle hook. Spec: `_devlog/specs/2026-05-28-git-fleet-mode-design.md`.
247
+ */
248
+ async connectFleetManaged(declaration, targetDir) {
249
+ this.log.info("mount handled by host fleet \u2014 skipping in-container git", {
250
+ connectorId: declaration.id,
251
+ targetDir
252
+ });
253
+ if (declaration.mount?.exposeAccessToken) {
254
+ this.log.warn("fleet-managed: exposeAccessToken ignored \u2014 host fleet owns credentials", {
255
+ connectorId: declaration.id
256
+ });
257
+ }
258
+ await ensureFleetMounted(targetDir, this.log);
259
+ let activeBranch = "unknown";
260
+ try {
261
+ activeBranch = git("rev-parse --abbrev-ref HEAD", targetDir, 5e3);
262
+ } catch {
263
+ }
264
+ const state = {
265
+ url: String(declaration.mount?.source ?? ""),
266
+ branch: activeBranch,
267
+ activeBranch,
268
+ session: parseSessionConfig(declaration.options),
269
+ sync: parseSyncConfig(declaration.options),
270
+ lifecycle: parseLifecycleConfig(declaration.options),
271
+ fleetManaged: true
272
+ };
273
+ const dispatch = (event) => {
274
+ state.emitChange?.(event);
275
+ };
276
+ state.fleetWatcher = await createFsWatcher(targetDir, dispatch, { ignored: ["**/.git/**"] });
277
+ this.log.info("fleet mount ready", { activeBranch, targetDir });
278
+ return this.makeHandle(declaration, state, targetDir);
279
+ }
237
280
  /**
238
281
  * Public refresh entry-point used by the runner's wake-mid-401 handler when
239
282
  * the credential-helper script touches the workspace refresh-flag. Calls
@@ -286,6 +329,12 @@ var GitConnector = class extends AbstractConnector {
286
329
  async disconnect(handle) {
287
330
  this.log.info("unmount");
288
331
  const s = handle.state;
332
+ if (s.fleetManaged) {
333
+ await s.fleetWatcher?.close();
334
+ s.fleetWatcher = void 0;
335
+ s.emitChange = void 0;
336
+ return;
337
+ }
289
338
  if (s.fetchTimer) {
290
339
  clearInterval(s.fetchTimer);
291
340
  s.fetchTimer = void 0;
@@ -298,6 +347,10 @@ var GitConnector = class extends AbstractConnector {
298
347
  }
299
348
  async _sync(handle, _options) {
300
349
  const s = handle.state;
350
+ if (s.fleetManaged) {
351
+ this.log.debug("sync skipped \u2014 fleet-managed");
352
+ return { filesWritten: 0, filesDeleted: 0, bytesTransferred: 0 };
353
+ }
301
354
  this.log.debug("sync (pull) start", { branch: s.activeBranch });
302
355
  try {
303
356
  git(`pull origin ${s.activeBranch}`, handle.mountPath, 6e4);
@@ -311,6 +364,14 @@ var GitConnector = class extends AbstractConnector {
311
364
  // ── Watch ──────────────────────────────────────────────────────────────────
312
365
  watch(handle, callback, options) {
313
366
  const s = handle.state;
367
+ if (s.fleetManaged) {
368
+ s.emitChange = callback;
369
+ return {
370
+ close: async () => {
371
+ s.emitChange = void 0;
372
+ }
373
+ };
374
+ }
314
375
  s.emitChange = (event) => {
315
376
  callback(event);
316
377
  this.resetAutoCommitTimer(s, handle.mountPath);
@@ -331,6 +392,9 @@ var GitConnector = class extends AbstractConnector {
331
392
  async onHibernate(handle) {
332
393
  this.log.info("hibernate");
333
394
  const s = handle.state;
395
+ if (s.fleetManaged) {
396
+ return "fleet-managed";
397
+ }
334
398
  const lc = s.lifecycle;
335
399
  if (!lc.commitOnHibernate) return;
336
400
  const result = commitAll(handle.mountPath, `skaile: hibernate snapshot`);
@@ -350,6 +414,9 @@ var GitConnector = class extends AbstractConnector {
350
414
  async onSessionClose(handle) {
351
415
  this.log.info("session closed");
352
416
  const s = handle.state;
417
+ if (s.fleetManaged) {
418
+ return "fleet-managed";
419
+ }
353
420
  const lc = s.lifecycle;
354
421
  const details = [];
355
422
  const commitResult = commitAll(handle.mountPath, `skaile: session close`);
@@ -7914,5 +7981,5 @@ function createConnector() {
7914
7981
  }
7915
7982
 
7916
7983
  export { AbstractConnector, ConnectorFieldMissingError, ConnectorManager, ConnectorStartupError, DeployConnector, DevServerConnector, FlowAdapter, GitConnector, GmailConnector, GoogleDriveConnector, LocalConnector, LogBuffer, ManagedGitconfigCollisionError, MattermostConnector, MemoryConnector, MinIOConnector, PostgresConnector, RedisConnector, S3Connector, SQLiteConnector, SharePointConnector, StaticServerConnector, TunnelConnector, WebDAVConnector, XStateConnector, XStateStoreConnector, YjsConnector, atomicReplaceCredential, buildConnectorPromptSection, buildSdkConnectorTools, createConnector, createConnector10, createConnector11, createConnector12, createConnector13, createConnector14, createConnector15, createConnector16, createConnector17, createConnector18, createConnector19, createConnector2, createConnector20, createConnector21, createConnector3, createConnector4, createConnector5, createConnector6, createConnector7, createConnector8, createConnector9, createFsWatcher, createWorktree, defaultSpawn, ensureFleetMounted, findGitRoot, findMissingPackages, getConnector, installNpmPackages, isFleetManaged, isPackageResolvable, listConnectors, listWorktrees, parseAuthBlob2 as parseAuthBlob, registerBuiltinConnectors, registerConnector, removeMountBlock, renderCredentialHelperScript, tryGetConnector, worktreeRegistry, writeHelperScript, writeMountBlock };
7917
- //# sourceMappingURL=chunk-JMB6VR3I.js.map
7918
- //# sourceMappingURL=chunk-JMB6VR3I.js.map
7984
+ //# sourceMappingURL=chunk-I7HGX4ZE.js.map
7985
+ //# sourceMappingURL=chunk-I7HGX4ZE.js.map