@skaile/workspaces 0.28.1 → 0.29.1
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.
- package/CHANGELOG.md +38 -0
- package/dist/asset-manager/index.js +1 -1
- package/dist/{chunk-FBVUGRTU.js → chunk-72IA6BTP.js} +3 -3
- package/dist/{chunk-FBVUGRTU.js.map → chunk-72IA6BTP.js.map} +1 -1
- package/dist/{chunk-DGM74UP4.js → chunk-CMG3GJ6B.js} +35 -3
- package/dist/chunk-CMG3GJ6B.js.map +1 -0
- package/dist/{chunk-U5L6F5NZ.js → chunk-DVMSGGCM.js} +2 -2
- package/dist/{chunk-U5L6F5NZ.js.map → chunk-DVMSGGCM.js.map} +1 -1
- package/dist/{chunk-UAW7VRAL.js → chunk-LD4QIVBY.js} +2 -2
- package/dist/{chunk-UAW7VRAL.js.map → chunk-LD4QIVBY.js.map} +1 -1
- package/dist/{chunk-BSVLAHHH.js → chunk-MLJKA3S6.js} +118 -13
- package/dist/chunk-MLJKA3S6.js.map +1 -0
- package/dist/{chunk-XHBPQ7QP.js → chunk-OTFG5Q7H.js} +85 -46
- package/dist/chunk-OTFG5Q7H.js.map +1 -0
- package/dist/cli/index.js +6 -6
- package/dist/connectors/config.js +1 -1
- package/dist/connectors/index.js +2 -2
- package/dist/connectors/src/config.d.ts +46 -1
- package/dist/connectors/src/config.d.ts.map +1 -1
- package/dist/connectors/src/index.d.ts +1 -1
- package/dist/connectors/src/index.d.ts.map +1 -1
- package/dist/factory-assets/connectors/deploy.js +2 -2
- package/dist/factory-assets/connectors/devserver.js +2 -2
- package/dist/factory-assets/connectors/flow/adapter.js +2 -2
- package/dist/factory-assets/connectors/flow/run-flow.js +3 -3
- package/dist/factory-assets/connectors/flow.js +2 -2
- package/dist/factory-assets/connectors/git/driver.d.ts.map +1 -1
- package/dist/factory-assets/connectors/git.js +2 -2
- package/dist/factory-assets/connectors/gmail.js +2 -2
- package/dist/factory-assets/connectors/googledrive/driver.d.ts +0 -12
- package/dist/factory-assets/connectors/googledrive/driver.d.ts.map +1 -1
- package/dist/factory-assets/connectors/googledrive.js +2 -2
- package/dist/factory-assets/connectors/local.js +2 -2
- package/dist/factory-assets/connectors/mattermost.js +2 -2
- package/dist/factory-assets/connectors/memory.js +2 -2
- package/dist/factory-assets/connectors/minio.js +2 -2
- package/dist/factory-assets/connectors/postgres.js +2 -2
- package/dist/factory-assets/connectors/s3.js +2 -2
- package/dist/factory-assets/connectors/sharepoint/driver.d.ts.map +1 -1
- package/dist/factory-assets/connectors/sharepoint.js +2 -2
- package/dist/factory-assets/connectors/sqlite.js +2 -2
- package/dist/factory-assets/connectors/static-server.js +2 -2
- package/dist/factory-assets/connectors/tunnel.js +2 -2
- package/dist/factory-assets/connectors/webdav/driver.d.ts +2 -0
- package/dist/factory-assets/connectors/webdav/driver.d.ts.map +1 -1
- package/dist/factory-assets/connectors/webdav.js +2 -2
- package/dist/factory-assets/connectors/xstate-store.js +2 -2
- package/dist/factory-assets/connectors/xstate.js +2 -2
- package/dist/runner/index.js +4 -4
- package/dist/runner/src/capability-roundtrip.d.ts +23 -0
- package/dist/runner/src/capability-roundtrip.d.ts.map +1 -1
- package/dist/runner/src/runner-capabilities.d.ts.map +1 -1
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/runner/src/session-resource-handlers.d.ts +23 -0
- package/dist/runner/src/session-resource-handlers.d.ts.map +1 -0
- package/dist/sdk/asset-manager.js +1 -1
- package/dist/sdk/index.js +4 -4
- package/dist/sdk/runner.js +4 -4
- package/dist/tui/index.js +4 -4
- package/dist/workspace-plugin/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-BSVLAHHH.js.map +0 -1
- package/dist/chunk-DGM74UP4.js.map +0 -1
- package/dist/chunk-XHBPQ7QP.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { renderWebDAVConfig, renderOneDriveConfig, renderGoogleDriveConfig } from './chunk-OVRSNIKJ.js';
|
|
2
|
-
import { resolveAuthRef, resolveAuth } from './chunk-
|
|
2
|
+
import { resolveAuthRef, resolveAuth, resolveMountCredentialString } from './chunk-CMG3GJ6B.js';
|
|
3
3
|
import { createFsWatcher, RcloneProcessManager, ensureDirMode, PortPool } from './chunk-QMONOHXT.js';
|
|
4
4
|
import { pluginRegistry } from './chunk-6E6PKKAD.js';
|
|
5
5
|
import { computeFlowStateFromSnapshots } from './chunk-W7W66MDZ.js';
|
|
@@ -103,6 +103,14 @@ function hasChanges(cwd) {
|
|
|
103
103
|
const status = git("status --porcelain", cwd);
|
|
104
104
|
return status.length > 0;
|
|
105
105
|
}
|
|
106
|
+
function localBranchExists(branch, cwd) {
|
|
107
|
+
try {
|
|
108
|
+
git(`rev-parse --verify --quiet refs/heads/${branch}`, cwd);
|
|
109
|
+
return true;
|
|
110
|
+
} catch {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
106
114
|
function isDirEmpty(dir) {
|
|
107
115
|
try {
|
|
108
116
|
return readdirSync(dir).length === 0;
|
|
@@ -203,37 +211,42 @@ var GitConnector = class extends AbstractConnector {
|
|
|
203
211
|
if (!isValidGitRefOrSha(sessionBranch)) {
|
|
204
212
|
throw new Error(`Git connector: invalid session branch name "${sessionBranch}"`);
|
|
205
213
|
}
|
|
206
|
-
|
|
207
|
-
git(`
|
|
208
|
-
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
try {
|
|
219
|
-
git(`fetch origin ${session.fromRef}`, targetDir);
|
|
220
|
-
git(`checkout -b ${sessionBranch} FETCH_HEAD`, targetDir);
|
|
221
|
-
anchored = true;
|
|
222
|
-
this.log.info("session branch created from fromRef", {
|
|
214
|
+
if (localBranchExists(sessionBranch, targetDir)) {
|
|
215
|
+
git(`checkout ${sessionBranch}`, targetDir);
|
|
216
|
+
this.log.info("reusing existing local session branch", { sessionBranch });
|
|
217
|
+
} else {
|
|
218
|
+
try {
|
|
219
|
+
git(`rev-parse --verify origin/${sessionBranch}`, targetDir);
|
|
220
|
+
git(`checkout -B ${sessionBranch} origin/${sessionBranch}`, targetDir);
|
|
221
|
+
} catch {
|
|
222
|
+
let anchored = false;
|
|
223
|
+
if (session.fromRef) {
|
|
224
|
+
if (!isValidGitRefOrSha(session.fromRef)) {
|
|
225
|
+
this.log.warn("fromRef rejected by refname validation, falling back to base branch", {
|
|
223
226
|
sessionBranch,
|
|
224
227
|
fromRef: session.fromRef
|
|
225
228
|
});
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
229
|
+
} else {
|
|
230
|
+
try {
|
|
231
|
+
git(`fetch origin ${session.fromRef}`, targetDir);
|
|
232
|
+
git(`checkout -b ${sessionBranch} FETCH_HEAD`, targetDir);
|
|
233
|
+
anchored = true;
|
|
234
|
+
this.log.info("session branch created from fromRef", {
|
|
235
|
+
sessionBranch,
|
|
236
|
+
fromRef: session.fromRef
|
|
237
|
+
});
|
|
238
|
+
} catch (err) {
|
|
239
|
+
this.log.warn("fromRef fetch failed, falling back to base branch", {
|
|
240
|
+
sessionBranch,
|
|
241
|
+
fromRef: session.fromRef,
|
|
242
|
+
error: err instanceof Error ? err.message : String(err)
|
|
243
|
+
});
|
|
244
|
+
}
|
|
232
245
|
}
|
|
233
246
|
}
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
247
|
+
if (!anchored) {
|
|
248
|
+
git(`checkout -b ${sessionBranch}`, targetDir);
|
|
249
|
+
}
|
|
237
250
|
}
|
|
238
251
|
}
|
|
239
252
|
syncSubmodules(targetDir);
|
|
@@ -1192,7 +1205,10 @@ var S3Connector = class extends AbstractConnector {
|
|
|
1192
1205
|
function createConnector4(sdkOverride) {
|
|
1193
1206
|
return new S3Connector(sdkOverride);
|
|
1194
1207
|
}
|
|
1195
|
-
var
|
|
1208
|
+
var DEFAULT_CACHE_BASE = "/var/cache/skaile";
|
|
1209
|
+
function cacheBase() {
|
|
1210
|
+
return process.env.SKAILE_RCLONE_CACHE_BASE ?? DEFAULT_CACHE_BASE;
|
|
1211
|
+
}
|
|
1196
1212
|
var ALLOWED_VENDORS = /* @__PURE__ */ new Set([
|
|
1197
1213
|
"nextcloud",
|
|
1198
1214
|
"owncloud",
|
|
@@ -1202,6 +1218,13 @@ var ALLOWED_VENDORS = /* @__PURE__ */ new Set([
|
|
|
1202
1218
|
]);
|
|
1203
1219
|
var execFileP = promisify(execFile);
|
|
1204
1220
|
var WebDAVConnector = class extends AbstractConnector {
|
|
1221
|
+
// Injectable so tests can stub the `rclone obscure` shell-out; production
|
|
1222
|
+
// wires the real binary via createConnector().
|
|
1223
|
+
constructor(obscure = obscurePassword) {
|
|
1224
|
+
super();
|
|
1225
|
+
this.obscure = obscure;
|
|
1226
|
+
}
|
|
1227
|
+
obscure;
|
|
1205
1228
|
name = "webdav";
|
|
1206
1229
|
rclone = new RcloneProcessManager();
|
|
1207
1230
|
filesystem = {
|
|
@@ -1216,6 +1239,7 @@ var WebDAVConnector = class extends AbstractConnector {
|
|
|
1216
1239
|
throw new Error("WebDAVConnector requires ctx.mountTarget to be set by the manager");
|
|
1217
1240
|
}
|
|
1218
1241
|
const secrets = ctx.secrets;
|
|
1242
|
+
const tokenMediator = ctx.tokenMediator;
|
|
1219
1243
|
const opts = declaration.options;
|
|
1220
1244
|
this.log.info("mount called", {
|
|
1221
1245
|
optionKeys: opts ? Object.keys(opts) : [],
|
|
@@ -1246,11 +1270,12 @@ var WebDAVConnector = class extends AbstractConnector {
|
|
|
1246
1270
|
const vendor = vendorRaw;
|
|
1247
1271
|
const basePath = String(opts?.basePath ?? "").replace(/^\/+|\/+$/g, "");
|
|
1248
1272
|
const remotePath = basePath.length > 0 ? `/${basePath}` : "/";
|
|
1249
|
-
const auth = parseAuth(
|
|
1250
|
-
const obscuredPassword = auth.password ? await
|
|
1273
|
+
const auth = parseAuth(await resolveMountCredentialString(declaration, secrets, tokenMediator));
|
|
1274
|
+
const obscuredPassword = auth.password ? await this.obscure(auth.password) : null;
|
|
1251
1275
|
const remoteName = `skaile-${declaration.id}`;
|
|
1252
1276
|
const remote = `${remoteName}:${remotePath}`;
|
|
1253
|
-
const
|
|
1277
|
+
const base = cacheBase();
|
|
1278
|
+
const cacheDir = `${base}/${declaration.id}`;
|
|
1254
1279
|
const vfsCacheMode = declaration.access === "read-only" ? "minimal" : "full";
|
|
1255
1280
|
this.log.info("mount params resolved", {
|
|
1256
1281
|
url,
|
|
@@ -1268,7 +1293,7 @@ var WebDAVConnector = class extends AbstractConnector {
|
|
|
1268
1293
|
obscuredPassword,
|
|
1269
1294
|
bearerToken: auth.bearerToken
|
|
1270
1295
|
});
|
|
1271
|
-
await ensureDirMode(
|
|
1296
|
+
await ensureDirMode(base, this.log);
|
|
1272
1297
|
await ensureDirMode(cacheDir, this.log);
|
|
1273
1298
|
await ensureDirMode(targetDir, this.log);
|
|
1274
1299
|
const cacheMaxSize = opts?.cacheMaxSize !== void 0 ? String(opts.cacheMaxSize) : void 0;
|
|
@@ -1367,9 +1392,9 @@ async function obscurePassword(plain) {
|
|
|
1367
1392
|
}
|
|
1368
1393
|
|
|
1369
1394
|
// factory-assets/connectors/sharepoint/driver.ts
|
|
1370
|
-
var
|
|
1371
|
-
function
|
|
1372
|
-
return process.env.SKAILE_RCLONE_CACHE_BASE ??
|
|
1395
|
+
var DEFAULT_CACHE_BASE2 = "/var/cache/skaile";
|
|
1396
|
+
function cacheBase2() {
|
|
1397
|
+
return process.env.SKAILE_RCLONE_CACHE_BASE ?? DEFAULT_CACHE_BASE2;
|
|
1373
1398
|
}
|
|
1374
1399
|
var SharePointConnector = class extends AbstractConnector {
|
|
1375
1400
|
name = "sharepoint";
|
|
@@ -1386,6 +1411,7 @@ var SharePointConnector = class extends AbstractConnector {
|
|
|
1386
1411
|
throw new Error("SharePointConnector requires ctx.mountTarget to be set by the manager");
|
|
1387
1412
|
}
|
|
1388
1413
|
const secrets = ctx.secrets;
|
|
1414
|
+
const tokenMediator = ctx.tokenMediator;
|
|
1389
1415
|
const opts = declaration.options;
|
|
1390
1416
|
this.log.info("mount called", {
|
|
1391
1417
|
optionKeys: opts ? Object.keys(opts) : []
|
|
@@ -1413,14 +1439,19 @@ var SharePointConnector = class extends AbstractConnector {
|
|
|
1413
1439
|
);
|
|
1414
1440
|
}
|
|
1415
1441
|
const basePath = String(opts?.basePath ?? "").replace(/^\/+|\/+$/g, "");
|
|
1416
|
-
const auth = parseAuthBlob(
|
|
1442
|
+
const auth = parseAuthBlob(
|
|
1443
|
+
await resolveMountCredentialString(declaration, secrets, tokenMediator),
|
|
1444
|
+
this.log
|
|
1445
|
+
);
|
|
1417
1446
|
if (!auth.accessToken) {
|
|
1418
|
-
throw new Error(
|
|
1447
|
+
throw new Error(
|
|
1448
|
+
"SharePoint connector: no access token resolved. Use 'auth: backend' (platform) or 'auth: env:SHAREPOINT_TOKEN' (standalone)."
|
|
1449
|
+
);
|
|
1419
1450
|
}
|
|
1420
1451
|
const remoteName = `skaile-${declaration.id}`;
|
|
1421
1452
|
const remotePath = buildRemotePath(folderPath, basePath);
|
|
1422
1453
|
const remote = `${remoteName}:${remotePath}`;
|
|
1423
|
-
const base =
|
|
1454
|
+
const base = cacheBase2();
|
|
1424
1455
|
const cacheDir = `${base}/${declaration.id}`;
|
|
1425
1456
|
const vfsCacheMode = declaration.access === "read-only" ? "minimal" : "full";
|
|
1426
1457
|
this.log.info("mount params resolved", {
|
|
@@ -1552,7 +1583,10 @@ function buildRemotePath(folderPath, basePath) {
|
|
|
1552
1583
|
}
|
|
1553
1584
|
|
|
1554
1585
|
// factory-assets/connectors/googledrive/driver.ts
|
|
1555
|
-
var
|
|
1586
|
+
var DEFAULT_CACHE_BASE3 = "/var/cache/skaile";
|
|
1587
|
+
function cacheBase3() {
|
|
1588
|
+
return process.env.SKAILE_RCLONE_CACHE_BASE ?? DEFAULT_CACHE_BASE3;
|
|
1589
|
+
}
|
|
1556
1590
|
var ALLOWED_SCOPES = /* @__PURE__ */ new Set([
|
|
1557
1591
|
"drive",
|
|
1558
1592
|
"drive.readonly",
|
|
@@ -1575,6 +1609,7 @@ var GoogleDriveConnector = class extends AbstractConnector {
|
|
|
1575
1609
|
throw new Error("GoogleDriveConnector requires ctx.mountTarget to be set by the manager");
|
|
1576
1610
|
}
|
|
1577
1611
|
const secrets = ctx.secrets;
|
|
1612
|
+
const tokenMediator = ctx.tokenMediator;
|
|
1578
1613
|
const opts = declaration.options;
|
|
1579
1614
|
this.log.info("mount called", {
|
|
1580
1615
|
optionKeys: opts ? Object.keys(opts) : []
|
|
@@ -1598,10 +1633,13 @@ var GoogleDriveConnector = class extends AbstractConnector {
|
|
|
1598
1633
|
);
|
|
1599
1634
|
}
|
|
1600
1635
|
const scope = scopeRaw;
|
|
1601
|
-
const auth = parseAuthBlob2(
|
|
1636
|
+
const auth = parseAuthBlob2(
|
|
1637
|
+
await resolveMountCredentialString(declaration, secrets, tokenMediator),
|
|
1638
|
+
this.log
|
|
1639
|
+
);
|
|
1602
1640
|
if (!auth.accessToken && !auth.serviceAccountFile) {
|
|
1603
1641
|
throw new Error(
|
|
1604
|
-
"Google Drive connector
|
|
1642
|
+
"Google Drive connector: no access token or serviceAccountFile resolved. Use 'auth: backend' (platform) or 'auth: env:GDRIVE_TOKEN' (standalone)."
|
|
1605
1643
|
);
|
|
1606
1644
|
}
|
|
1607
1645
|
const rootFolderId = opts?.rootFolderId !== void 0 ? String(opts.rootFolderId) : null;
|
|
@@ -1610,7 +1648,8 @@ var GoogleDriveConnector = class extends AbstractConnector {
|
|
|
1610
1648
|
const remoteName = `skaile-${declaration.id}`;
|
|
1611
1649
|
const remotePath = basePath.length > 0 ? `/${basePath}` : "/";
|
|
1612
1650
|
const remote = `${remoteName}:${remotePath}`;
|
|
1613
|
-
const
|
|
1651
|
+
const base = cacheBase3();
|
|
1652
|
+
const cacheDir = `${base}/${declaration.id}`;
|
|
1614
1653
|
const vfsCacheMode = declaration.access === "read-only" ? "minimal" : "full";
|
|
1615
1654
|
this.log.info("mount params resolved", {
|
|
1616
1655
|
scope,
|
|
@@ -1633,7 +1672,7 @@ var GoogleDriveConnector = class extends AbstractConnector {
|
|
|
1633
1672
|
teamDrive,
|
|
1634
1673
|
serviceAccountFile: auth.serviceAccountFile
|
|
1635
1674
|
});
|
|
1636
|
-
await ensureDirMode(
|
|
1675
|
+
await ensureDirMode(base, this.log);
|
|
1637
1676
|
await ensureDirMode(cacheDir, this.log);
|
|
1638
1677
|
await ensureDirMode(targetDir, this.log);
|
|
1639
1678
|
const cacheMaxSize = opts?.cacheMaxSize !== void 0 ? String(opts.cacheMaxSize) : void 0;
|
|
@@ -7795,6 +7834,6 @@ function createConnector() {
|
|
|
7795
7834
|
return new FlowAdapter();
|
|
7796
7835
|
}
|
|
7797
7836
|
|
|
7798
|
-
export { AbstractConnector, BUILTIN_CONNECTOR_CATALOG, ConnectorFieldMissingError, ConnectorManager, ConnectorStartupError, DeployConnector, DevServerConnector, FlowAdapter, GitConnector, GmailConnector, GoogleDriveConnector, LocalConnector, LogBuffer, ManagedGitconfigCollisionError, MattermostConnector, MemoryConnector, MinIOConnector, NOT_READY_SENTINEL, PostgresConnector, RoMountPlaceholderBarrier, S3Connector, SQLiteConnector, SharePointConnector, StaticServerConnector, TunnelConnector, WebDAVConnector, XStateConnector, XStateStoreConnector, atomicReplaceCredential, buildConnectorPromptSection, buildSdkConnectorTools, createConnector, createConnector10, createConnector11, createConnector12, createConnector13, createConnector14, createConnector15, createConnector16, createConnector17, createConnector18, createConnector19, createConnector2, createConnector3, createConnector4, createConnector5, createConnector6, createConnector7, createConnector8, createConnector9, createWorktree, defaultMountPlaceholderBarrier, defaultSpawn, ensureFleetMounted, findGitRoot, findMissingPackages, getConnector, installNpmPackages, isFleetManaged, isPackageResolvable, listConnectors, listWorktrees,
|
|
7799
|
-
//# sourceMappingURL=chunk-
|
|
7800
|
-
//# sourceMappingURL=chunk-
|
|
7837
|
+
export { AbstractConnector, BUILTIN_CONNECTOR_CATALOG, ConnectorFieldMissingError, ConnectorManager, ConnectorStartupError, DeployConnector, DevServerConnector, FlowAdapter, GitConnector, GmailConnector, GoogleDriveConnector, LocalConnector, LogBuffer, ManagedGitconfigCollisionError, MattermostConnector, MemoryConnector, MinIOConnector, NOT_READY_SENTINEL, PostgresConnector, RoMountPlaceholderBarrier, S3Connector, SQLiteConnector, SharePointConnector, StaticServerConnector, TunnelConnector, WebDAVConnector, XStateConnector, XStateStoreConnector, atomicReplaceCredential, buildConnectorPromptSection, buildSdkConnectorTools, createConnector, createConnector10, createConnector11, createConnector12, createConnector13, createConnector14, createConnector15, createConnector16, createConnector17, createConnector18, createConnector19, createConnector2, createConnector3, createConnector4, createConnector5, createConnector6, createConnector7, createConnector8, createConnector9, createWorktree, defaultMountPlaceholderBarrier, defaultSpawn, ensureFleetMounted, findGitRoot, findMissingPackages, getConnector, installNpmPackages, isFleetManaged, isPackageResolvable, listConnectors, listWorktrees, registerBuiltinConnectors, removeMountBlock, renderCredentialHelperScript, tryGetConnector, worktreeRegistry, writeHelperScript, writeMountBlock };
|
|
7838
|
+
//# sourceMappingURL=chunk-OTFG5Q7H.js.map
|
|
7839
|
+
//# sourceMappingURL=chunk-OTFG5Q7H.js.map
|