@skaile/workspaces 0.12.2 → 0.14.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.
- package/CHANGELOG.md +47 -0
- package/dist/asset-manager/index.js +4 -6
- package/dist/asset-manager/installer.js +1 -2
- package/dist/asset-manager/src/index.d.ts +1 -2
- package/dist/asset-manager/src/index.d.ts.map +1 -1
- package/dist/asset-manager/src/{scaffold/layers/agents.d.ts → install-agent.d.ts} +11 -33
- package/dist/asset-manager/src/install-agent.d.ts.map +1 -0
- package/dist/base-assets/connectors/deploy.js +2 -2
- package/dist/base-assets/connectors/devserver.js +2 -2
- package/dist/base-assets/connectors/flow/adapter.js +2 -2
- package/dist/base-assets/connectors/flow/run-flow.js +3 -3
- package/dist/base-assets/connectors/flow.js +2 -2
- package/dist/base-assets/connectors/git.js +2 -2
- package/dist/base-assets/connectors/gmail.js +2 -2
- package/dist/base-assets/connectors/googledrive/driver.d.ts +47 -0
- package/dist/base-assets/connectors/googledrive/driver.d.ts.map +1 -0
- package/dist/base-assets/connectors/googledrive.js +20 -0
- package/dist/base-assets/connectors/googledrive.js.map +1 -0
- package/dist/base-assets/connectors/local.js +2 -2
- package/dist/base-assets/connectors/mattermost.js +2 -2
- package/dist/base-assets/connectors/memory.js +2 -2
- package/dist/base-assets/connectors/minio.js +2 -2
- package/dist/base-assets/connectors/postgres.js +2 -2
- package/dist/base-assets/connectors/redis.js +2 -2
- package/dist/base-assets/connectors/s3.js +2 -2
- package/dist/base-assets/connectors/sharepoint/driver.d.ts.map +1 -1
- package/dist/base-assets/connectors/sharepoint.js +2 -2
- package/dist/base-assets/connectors/sqlite.js +2 -2
- package/dist/base-assets/connectors/static-server.js +2 -2
- package/dist/base-assets/connectors/tunnel.js +2 -2
- package/dist/base-assets/connectors/webdav/driver.d.ts.map +1 -1
- package/dist/base-assets/connectors/webdav.js +2 -2
- package/dist/base-assets/connectors/xstate-store.js +2 -2
- package/dist/base-assets/connectors/xstate.js +2 -2
- package/dist/base-assets/connectors/yjs.js +2 -2
- package/dist/{chunk-M2NLRGIX.js → chunk-4GEVGRWB.js} +159 -6
- package/dist/chunk-4GEVGRWB.js.map +1 -0
- package/dist/{chunk-EARKGKKB.js → chunk-7R4WLTZW.js} +5 -5
- package/dist/{chunk-EARKGKKB.js.map → chunk-7R4WLTZW.js.map} +1 -1
- package/dist/{chunk-UTKGPNLV.js → chunk-DN5476SV.js} +5 -5
- package/dist/{chunk-UTKGPNLV.js.map → chunk-DN5476SV.js.map} +1 -1
- package/dist/{chunk-Z5PO7ZVP.js → chunk-G7O7WDXX.js} +2 -2
- package/dist/{chunk-Z5PO7ZVP.js.map → chunk-G7O7WDXX.js.map} +1 -1
- package/dist/{chunk-EAJKY27M.js → chunk-HSOEX3TA.js} +250 -92
- package/dist/chunk-HSOEX3TA.js.map +1 -0
- package/dist/{chunk-DDVKNST3.js → chunk-OIFGKFZY.js} +3 -3
- package/dist/{chunk-DDVKNST3.js.map → chunk-OIFGKFZY.js.map} +1 -1
- package/dist/chunk-QAVZOJCV.js +72 -0
- package/dist/chunk-QAVZOJCV.js.map +1 -0
- package/dist/cli/index.js +93 -33
- package/dist/cli/index.js.map +1 -1
- package/dist/connectors/index.js +2 -2
- package/dist/connectors/rclone-config.js +1 -1
- package/dist/connectors/src/connector-registry.d.ts.map +1 -1
- package/dist/connectors/src/fleet-utils.d.ts +35 -0
- package/dist/connectors/src/fleet-utils.d.ts.map +1 -0
- package/dist/connectors/src/index.d.ts +2 -1
- package/dist/connectors/src/index.d.ts.map +1 -1
- package/dist/connectors/src/rclone-config/googledrive.d.ts +59 -0
- package/dist/connectors/src/rclone-config/googledrive.d.ts.map +1 -0
- package/dist/connectors/src/rclone-config/index.d.ts +1 -0
- package/dist/connectors/src/rclone-config/index.d.ts.map +1 -1
- package/dist/connectors/src/rclone-config/onedrive.d.ts +1 -0
- package/dist/connectors/src/rclone-config/onedrive.d.ts.map +1 -1
- package/dist/connectors/src/rclone-config/sanitize.d.ts +9 -0
- package/dist/connectors/src/rclone-config/sanitize.d.ts.map +1 -0
- package/dist/connectors/src/rclone-config/webdav.d.ts +1 -0
- package/dist/connectors/src/rclone-config/webdav.d.ts.map +1 -1
- package/dist/runner/index.js +5 -5
- package/dist/sdk/asset-manager.js +4 -6
- package/dist/sdk/index.js +5 -5
- package/dist/sdk/runner.js +5 -5
- package/dist/tui/index.js +5 -5
- package/dist/workspace-plugin/index.js +1 -1
- package/package.json +7 -7
- package/dist/asset-manager/scaffold.js +0 -18
- package/dist/asset-manager/scaffold.js.map +0 -1
- package/dist/asset-manager/src/scaffold/index.d.ts +0 -19
- package/dist/asset-manager/src/scaffold/index.d.ts.map +0 -1
- package/dist/asset-manager/src/scaffold/layers/agents.d.ts.map +0 -1
- package/dist/asset-manager/src/scaffold/layers/base.d.ts +0 -17
- package/dist/asset-manager/src/scaffold/layers/base.d.ts.map +0 -1
- package/dist/asset-manager/src/scaffold/layers/connectors.d.ts +0 -18
- package/dist/asset-manager/src/scaffold/layers/connectors.d.ts.map +0 -1
- package/dist/asset-manager/src/scaffold/layers/container.d.ts +0 -16
- package/dist/asset-manager/src/scaffold/layers/container.d.ts.map +0 -1
- package/dist/asset-manager/src/scaffold/layers/driver-target.d.ts +0 -17
- package/dist/asset-manager/src/scaffold/layers/driver-target.d.ts.map +0 -1
- package/dist/asset-manager/src/scaffold/layers/hooks.d.ts +0 -22
- package/dist/asset-manager/src/scaffold/layers/hooks.d.ts.map +0 -1
- package/dist/asset-manager/src/scaffold/layers/skills.d.ts +0 -31
- package/dist/asset-manager/src/scaffold/layers/skills.d.ts.map +0 -1
- package/dist/asset-manager/src/scaffold/layers/template.d.ts +0 -16
- package/dist/asset-manager/src/scaffold/layers/template.d.ts.map +0 -1
- package/dist/asset-manager/src/scaffold/scaffolder.d.ts +0 -77
- package/dist/asset-manager/src/scaffold/scaffolder.d.ts.map +0 -1
- package/dist/asset-manager/src/scaffold/types.d.ts +0 -241
- package/dist/asset-manager/src/scaffold/types.d.ts.map +0 -1
- package/dist/chunk-DIKFRNCS.js +0 -195
- package/dist/chunk-DIKFRNCS.js.map +0 -1
- package/dist/chunk-EAJKY27M.js.map +0 -1
- package/dist/chunk-GCRKAFH7.js +0 -40
- package/dist/chunk-GCRKAFH7.js.map +0 -1
- package/dist/chunk-M2NLRGIX.js.map +0 -1
- package/dist/chunk-YHXBQLXX.js +0 -546
- package/dist/chunk-YHXBQLXX.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { resolveAuthRef, resolveAuth } from './chunk-W75ASXH4.js';
|
|
2
2
|
import { RcloneProcessManager, ensureDirMode, PortPool } from './chunk-6MB7CRME.js';
|
|
3
|
-
import { renderWebDAVConfig, renderOneDriveConfig } from './chunk-
|
|
3
|
+
import { renderWebDAVConfig, renderOneDriveConfig, renderGoogleDriveConfig } from './chunk-QAVZOJCV.js';
|
|
4
4
|
import { computeFlowStateFromSnapshots } from './chunk-ICS76R4T.js';
|
|
5
5
|
import { renderStimulusPrompt } from './chunk-GZWJGNNN.js';
|
|
6
6
|
import { computeStimulus } from './chunk-FVTV7M76.js';
|
|
@@ -9,13 +9,13 @@ import { createLogger } from './chunk-24UIWON4.js';
|
|
|
9
9
|
import { existsSync, mkdirSync, renameSync, writeFileSync, readFileSync, cpSync, statSync, createReadStream, readdirSync, openSync, writeSync, closeSync, chmodSync } from 'fs';
|
|
10
10
|
import { join, dirname, resolve, sep, relative } from 'path';
|
|
11
11
|
import { execFile, execSync } from 'child_process';
|
|
12
|
-
import { stat, readdir } from 'fs/promises';
|
|
13
12
|
import { promisify } from 'util';
|
|
14
13
|
import { createServer } from 'http';
|
|
15
14
|
import mime from 'mime';
|
|
16
15
|
import * as zNS from 'zod';
|
|
17
16
|
import { createRequire } from 'module';
|
|
18
17
|
import { pathToFileURL } from 'url';
|
|
18
|
+
import { stat, readdir } from 'fs/promises';
|
|
19
19
|
import chokidar from 'chokidar';
|
|
20
20
|
|
|
21
21
|
// connectors/src/connector-base.ts
|
|
@@ -854,8 +854,8 @@ var GitConnector = class extends AbstractConnector {
|
|
|
854
854
|
generateCommitMessage(mountPath) {
|
|
855
855
|
try {
|
|
856
856
|
git("add -A", mountPath);
|
|
857
|
-
const
|
|
858
|
-
const lines =
|
|
857
|
+
const stat2 = git("diff --cached --stat", mountPath);
|
|
858
|
+
const lines = stat2.split("\n").filter((l) => l.includes("|"));
|
|
859
859
|
if (lines.length === 0) return "skaile: auto-save";
|
|
860
860
|
const files = lines.map((l) => l.split("|")[0].trim());
|
|
861
861
|
if (files.length === 1) return `Update ${files[0]}`;
|
|
@@ -1054,32 +1054,6 @@ var S3Connector = class extends AbstractConnector {
|
|
|
1054
1054
|
function createConnector4(sdkOverride) {
|
|
1055
1055
|
return new S3Connector(sdkOverride);
|
|
1056
1056
|
}
|
|
1057
|
-
function isFleetManaged(connectorId) {
|
|
1058
|
-
const raw = process.env.SKAILE_FLEET_MANAGED_MOUNTS ?? "";
|
|
1059
|
-
if (raw.length === 0) return false;
|
|
1060
|
-
return raw.split(",").map((s) => s.trim()).filter((s) => s.length > 0).includes(connectorId);
|
|
1061
|
-
}
|
|
1062
|
-
async function ensureFleetMounted(dir, log) {
|
|
1063
|
-
const deadline = Date.now() + 3e3;
|
|
1064
|
-
let lastErr = null;
|
|
1065
|
-
while (Date.now() < deadline) {
|
|
1066
|
-
try {
|
|
1067
|
-
const st = await stat(dir);
|
|
1068
|
-
if (!st.isDirectory()) {
|
|
1069
|
-
throw new Error(`fleet mountpoint ${dir} is not a directory`);
|
|
1070
|
-
}
|
|
1071
|
-
await readdir(dir);
|
|
1072
|
-
log.info("fleet bind mount verified", { dir });
|
|
1073
|
-
return;
|
|
1074
|
-
} catch (err) {
|
|
1075
|
-
lastErr = err;
|
|
1076
|
-
await new Promise((resolve5) => setTimeout(resolve5, 100));
|
|
1077
|
-
}
|
|
1078
|
-
}
|
|
1079
|
-
throw new Error(
|
|
1080
|
-
`fleet mount ${dir} not ready after 3s \u2014 check SKAILE_FLEET_MANAGED_MOUNTS env var and host bind: ${lastErr instanceof Error ? lastErr.message : String(lastErr)}`
|
|
1081
|
-
);
|
|
1082
|
-
}
|
|
1083
1057
|
var CACHE_BASE = "/var/cache/skaile";
|
|
1084
1058
|
var ALLOWED_VENDORS = /* @__PURE__ */ new Set([
|
|
1085
1059
|
"nextcloud",
|
|
@@ -1250,32 +1224,8 @@ async function obscurePassword(plain) {
|
|
|
1250
1224
|
);
|
|
1251
1225
|
}
|
|
1252
1226
|
}
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
if (raw.length === 0) return false;
|
|
1256
|
-
return raw.split(",").map((s) => s.trim()).filter((s) => s.length > 0).includes(connectorId);
|
|
1257
|
-
}
|
|
1258
|
-
async function ensureFleetMounted2(dir, log) {
|
|
1259
|
-
const deadline = Date.now() + 3e3;
|
|
1260
|
-
let lastErr = null;
|
|
1261
|
-
while (Date.now() < deadline) {
|
|
1262
|
-
try {
|
|
1263
|
-
const st = await stat(dir);
|
|
1264
|
-
if (!st.isDirectory()) {
|
|
1265
|
-
throw new Error(`fleet mountpoint ${dir} is not a directory`);
|
|
1266
|
-
}
|
|
1267
|
-
await readdir(dir);
|
|
1268
|
-
log.info("fleet bind mount verified", { dir });
|
|
1269
|
-
return;
|
|
1270
|
-
} catch (err) {
|
|
1271
|
-
lastErr = err;
|
|
1272
|
-
await new Promise((resolve5) => setTimeout(resolve5, 100));
|
|
1273
|
-
}
|
|
1274
|
-
}
|
|
1275
|
-
throw new Error(
|
|
1276
|
-
`fleet mount ${dir} not ready after 3s \u2014 check SKAILE_FLEET_MANAGED_MOUNTS env var and host bind: ${lastErr instanceof Error ? lastErr.message : String(lastErr)}`
|
|
1277
|
-
);
|
|
1278
|
-
}
|
|
1227
|
+
|
|
1228
|
+
// base-assets/connectors/sharepoint/driver.ts
|
|
1279
1229
|
var CACHE_BASE2 = "/var/cache/skaile";
|
|
1280
1230
|
var SharePointConnector = class extends AbstractConnector {
|
|
1281
1231
|
name = "sharepoint";
|
|
@@ -1295,12 +1245,12 @@ var SharePointConnector = class extends AbstractConnector {
|
|
|
1295
1245
|
this.log.info("mount called", {
|
|
1296
1246
|
optionKeys: opts ? Object.keys(opts) : []
|
|
1297
1247
|
});
|
|
1298
|
-
if (
|
|
1248
|
+
if (isFleetManaged(declaration.id)) {
|
|
1299
1249
|
this.log.info("mount handled by host fleet \u2014 skipping in-container rclone spawn", {
|
|
1300
1250
|
connectorId: declaration.id,
|
|
1301
1251
|
targetDir
|
|
1302
1252
|
});
|
|
1303
|
-
await
|
|
1253
|
+
await ensureFleetMounted(targetDir, this.log);
|
|
1304
1254
|
const fleetState = {
|
|
1305
1255
|
rcloneHandle: null,
|
|
1306
1256
|
fleetManaged: true
|
|
@@ -1318,7 +1268,7 @@ var SharePointConnector = class extends AbstractConnector {
|
|
|
1318
1268
|
);
|
|
1319
1269
|
}
|
|
1320
1270
|
const basePath = String(opts?.basePath ?? "").replace(/^\/+|\/+$/g, "");
|
|
1321
|
-
const auth = parseAuthBlob(resolveAuth(declaration.auth, secrets));
|
|
1271
|
+
const auth = parseAuthBlob(resolveAuth(declaration.auth, secrets), this.log);
|
|
1322
1272
|
if (!auth.accessToken) {
|
|
1323
1273
|
throw new Error("SharePoint connector requires auth token (e.g. auth: env:SHAREPOINT_TOKEN)");
|
|
1324
1274
|
}
|
|
@@ -1408,7 +1358,7 @@ var SharePointConnector = class extends AbstractConnector {
|
|
|
1408
1358
|
function createConnector6() {
|
|
1409
1359
|
return new SharePointConnector();
|
|
1410
1360
|
}
|
|
1411
|
-
function parseAuthBlob(raw) {
|
|
1361
|
+
function parseAuthBlob(raw, log) {
|
|
1412
1362
|
const empty = {
|
|
1413
1363
|
accessToken: "",
|
|
1414
1364
|
refreshToken: null,
|
|
@@ -1431,7 +1381,10 @@ function parseAuthBlob(raw) {
|
|
|
1431
1381
|
clientId: parsed.clientId ?? null,
|
|
1432
1382
|
clientSecret: parsed.clientSecret ?? null
|
|
1433
1383
|
};
|
|
1434
|
-
} catch {
|
|
1384
|
+
} catch (err) {
|
|
1385
|
+
log?.warn("auth blob starts with '{' but is not valid JSON \u2014 treating as raw token", {
|
|
1386
|
+
error: err instanceof Error ? err.message : String(err)
|
|
1387
|
+
});
|
|
1435
1388
|
return { ...empty, accessToken: raw };
|
|
1436
1389
|
}
|
|
1437
1390
|
}
|
|
@@ -1442,6 +1395,182 @@ function buildRemotePath(folderPath, basePath) {
|
|
|
1442
1395
|
return joined.length > 0 ? `/${joined}` : "/";
|
|
1443
1396
|
}
|
|
1444
1397
|
|
|
1398
|
+
// base-assets/connectors/googledrive/driver.ts
|
|
1399
|
+
var CACHE_BASE3 = "/var/cache/skaile";
|
|
1400
|
+
var ALLOWED_SCOPES = /* @__PURE__ */ new Set([
|
|
1401
|
+
"drive",
|
|
1402
|
+
"drive.readonly",
|
|
1403
|
+
"drive.file",
|
|
1404
|
+
"drive.appfolder",
|
|
1405
|
+
"drive.metadata.readonly"
|
|
1406
|
+
]);
|
|
1407
|
+
var GoogleDriveConnector = class extends AbstractConnector {
|
|
1408
|
+
name = "googledrive";
|
|
1409
|
+
rclone = new RcloneProcessManager();
|
|
1410
|
+
filesystem = {
|
|
1411
|
+
sync: (handle, options) => {
|
|
1412
|
+
return this._sync(handle, options);
|
|
1413
|
+
}
|
|
1414
|
+
};
|
|
1415
|
+
async connect(declaration, ctx) {
|
|
1416
|
+
const targetDir = ctx.mountTarget;
|
|
1417
|
+
if (!targetDir) {
|
|
1418
|
+
throw new Error("GoogleDriveConnector requires ctx.mountTarget to be set by the manager");
|
|
1419
|
+
}
|
|
1420
|
+
const secrets = ctx.secrets;
|
|
1421
|
+
const opts = declaration.options;
|
|
1422
|
+
this.log.info("mount called", {
|
|
1423
|
+
optionKeys: opts ? Object.keys(opts) : []
|
|
1424
|
+
});
|
|
1425
|
+
if (isFleetManaged(declaration.id)) {
|
|
1426
|
+
this.log.info("mount handled by host fleet \u2014 skipping in-container rclone spawn", {
|
|
1427
|
+
connectorId: declaration.id,
|
|
1428
|
+
targetDir
|
|
1429
|
+
});
|
|
1430
|
+
await ensureFleetMounted(targetDir, this.log);
|
|
1431
|
+
const fleetState = {
|
|
1432
|
+
rcloneHandle: null,
|
|
1433
|
+
fleetManaged: true
|
|
1434
|
+
};
|
|
1435
|
+
return this.makeHandle(declaration, fleetState, targetDir);
|
|
1436
|
+
}
|
|
1437
|
+
const scopeRaw = opts?.scope !== void 0 ? String(opts.scope) : "drive";
|
|
1438
|
+
if (!ALLOWED_SCOPES.has(scopeRaw)) {
|
|
1439
|
+
throw new Error(
|
|
1440
|
+
`Google Drive connector: invalid scope "${scopeRaw}" (allowed: ${[...ALLOWED_SCOPES].join(", ")})`
|
|
1441
|
+
);
|
|
1442
|
+
}
|
|
1443
|
+
const scope = scopeRaw;
|
|
1444
|
+
const auth = parseAuthBlob2(resolveAuth(declaration.auth, secrets), this.log);
|
|
1445
|
+
if (!auth.accessToken && !auth.serviceAccountFile) {
|
|
1446
|
+
throw new Error(
|
|
1447
|
+
"Google Drive connector requires auth token or serviceAccountFile (e.g. auth: env:GDRIVE_TOKEN)"
|
|
1448
|
+
);
|
|
1449
|
+
}
|
|
1450
|
+
const rootFolderId = opts?.rootFolderId !== void 0 ? String(opts.rootFolderId) : null;
|
|
1451
|
+
const teamDrive = opts?.teamDrive !== void 0 ? String(opts.teamDrive) : null;
|
|
1452
|
+
const basePath = String(opts?.basePath ?? "").replace(/^\/+|\/+$/g, "");
|
|
1453
|
+
const remoteName = `skaile-${declaration.id}`;
|
|
1454
|
+
const remotePath = basePath.length > 0 ? `/${basePath}` : "/";
|
|
1455
|
+
const remote = `${remoteName}:${remotePath}`;
|
|
1456
|
+
const cacheDir = `${CACHE_BASE3}/${declaration.id}`;
|
|
1457
|
+
const vfsCacheMode = declaration.access === "read-only" ? "minimal" : "full";
|
|
1458
|
+
this.log.info("mount params resolved", {
|
|
1459
|
+
scope,
|
|
1460
|
+
remote,
|
|
1461
|
+
cacheDir,
|
|
1462
|
+
vfsCacheMode,
|
|
1463
|
+
hasRefresh: auth.refreshToken !== null,
|
|
1464
|
+
hasServiceAccount: auth.serviceAccountFile !== null,
|
|
1465
|
+
teamDrive
|
|
1466
|
+
});
|
|
1467
|
+
const rcloneConfig = renderGoogleDriveConfig({
|
|
1468
|
+
remoteName,
|
|
1469
|
+
accessToken: auth.accessToken,
|
|
1470
|
+
refreshToken: auth.refreshToken,
|
|
1471
|
+
expiresAtMs: auth.expiresAtMs,
|
|
1472
|
+
clientId: auth.clientId,
|
|
1473
|
+
clientSecret: auth.clientSecret,
|
|
1474
|
+
scope,
|
|
1475
|
+
rootFolderId,
|
|
1476
|
+
teamDrive,
|
|
1477
|
+
serviceAccountFile: auth.serviceAccountFile
|
|
1478
|
+
});
|
|
1479
|
+
await ensureDirMode(CACHE_BASE3, this.log);
|
|
1480
|
+
await ensureDirMode(cacheDir, this.log);
|
|
1481
|
+
await ensureDirMode(targetDir, this.log);
|
|
1482
|
+
const cacheMaxSize = opts?.cacheMaxSize !== void 0 ? String(opts.cacheMaxSize) : void 0;
|
|
1483
|
+
const cacheMaxAge = opts?.cacheMaxAge !== void 0 ? String(opts.cacheMaxAge) : void 0;
|
|
1484
|
+
const rcloneHandle = await this.rclone.spawn({
|
|
1485
|
+
mountId: declaration.id,
|
|
1486
|
+
driverName: "googledrive",
|
|
1487
|
+
mountPoint: targetDir,
|
|
1488
|
+
cacheDir,
|
|
1489
|
+
rcloneConfig,
|
|
1490
|
+
remote,
|
|
1491
|
+
vfsCacheMode,
|
|
1492
|
+
...cacheMaxSize !== void 0 ? { cacheMaxSize } : {},
|
|
1493
|
+
...cacheMaxAge !== void 0 ? { cacheMaxAge } : {},
|
|
1494
|
+
log: this.log
|
|
1495
|
+
});
|
|
1496
|
+
this.log.info("mount ready", { pid: rcloneHandle.pid });
|
|
1497
|
+
const state = { rcloneHandle };
|
|
1498
|
+
return this.makeHandle(declaration, state, targetDir);
|
|
1499
|
+
}
|
|
1500
|
+
async disconnect(handle) {
|
|
1501
|
+
const s = handle.state;
|
|
1502
|
+
if (s.fleetManaged || !s.rcloneHandle) return;
|
|
1503
|
+
await this.rclone.stop(s.rcloneHandle, { graceMs: 3e4 });
|
|
1504
|
+
}
|
|
1505
|
+
async _sync(handle, options) {
|
|
1506
|
+
const s = handle.state;
|
|
1507
|
+
if (s.fleetManaged || !s.rcloneHandle) {
|
|
1508
|
+
options?.onSyncStatus?.({
|
|
1509
|
+
phase: "initial_sync_complete",
|
|
1510
|
+
totalFiles: 0,
|
|
1511
|
+
downloadedFiles: 0,
|
|
1512
|
+
stubFiles: 0,
|
|
1513
|
+
message: "fleet-managed mount \u2014 flush handled by host"
|
|
1514
|
+
});
|
|
1515
|
+
return { filesWritten: 0, filesDeleted: 0, bytesTransferred: 0 };
|
|
1516
|
+
}
|
|
1517
|
+
await this.rclone.flush(s.rcloneHandle);
|
|
1518
|
+
options?.onSyncStatus?.({
|
|
1519
|
+
phase: "initial_sync_complete",
|
|
1520
|
+
totalFiles: 0,
|
|
1521
|
+
downloadedFiles: 0,
|
|
1522
|
+
stubFiles: 0,
|
|
1523
|
+
message: "rclone flush complete"
|
|
1524
|
+
});
|
|
1525
|
+
return { filesWritten: 0, filesDeleted: 0, bytesTransferred: 0 };
|
|
1526
|
+
}
|
|
1527
|
+
async onHibernate(handle) {
|
|
1528
|
+
const s = handle.state;
|
|
1529
|
+
if (s.fleetManaged) return "flushed";
|
|
1530
|
+
await this._sync(handle);
|
|
1531
|
+
return "flushed";
|
|
1532
|
+
}
|
|
1533
|
+
async onSessionClose(handle) {
|
|
1534
|
+
const s = handle.state;
|
|
1535
|
+
if (s.fleetManaged) return "flushed";
|
|
1536
|
+
await this._sync(handle);
|
|
1537
|
+
return "flushed";
|
|
1538
|
+
}
|
|
1539
|
+
};
|
|
1540
|
+
function createConnector7() {
|
|
1541
|
+
return new GoogleDriveConnector();
|
|
1542
|
+
}
|
|
1543
|
+
function parseAuthBlob2(raw, log) {
|
|
1544
|
+
const empty = {
|
|
1545
|
+
accessToken: "",
|
|
1546
|
+
refreshToken: null,
|
|
1547
|
+
expiresAtMs: null,
|
|
1548
|
+
clientId: null,
|
|
1549
|
+
clientSecret: null,
|
|
1550
|
+
serviceAccountFile: null
|
|
1551
|
+
};
|
|
1552
|
+
if (!raw) return empty;
|
|
1553
|
+
if (!raw.startsWith("{")) {
|
|
1554
|
+
return { ...empty, accessToken: raw };
|
|
1555
|
+
}
|
|
1556
|
+
try {
|
|
1557
|
+
const parsed = JSON.parse(raw);
|
|
1558
|
+
return {
|
|
1559
|
+
accessToken: parsed.accessToken ?? "",
|
|
1560
|
+
refreshToken: parsed.refreshToken ?? null,
|
|
1561
|
+
expiresAtMs: parsed.expiresAt ?? null,
|
|
1562
|
+
clientId: parsed.clientId ?? null,
|
|
1563
|
+
clientSecret: parsed.clientSecret ?? null,
|
|
1564
|
+
serviceAccountFile: parsed.serviceAccountFile ?? null
|
|
1565
|
+
};
|
|
1566
|
+
} catch (err) {
|
|
1567
|
+
log?.warn("auth blob starts with '{' but is not valid JSON \u2014 treating as raw token", {
|
|
1568
|
+
error: err instanceof Error ? err.message : String(err)
|
|
1569
|
+
});
|
|
1570
|
+
return { ...empty, accessToken: raw };
|
|
1571
|
+
}
|
|
1572
|
+
}
|
|
1573
|
+
|
|
1445
1574
|
// base-assets/connectors/memory/adapter.ts
|
|
1446
1575
|
var MemoryConnector = class extends AbstractConnector {
|
|
1447
1576
|
name = "memory";
|
|
@@ -1591,7 +1720,7 @@ function matchGlob(str, pattern) {
|
|
|
1591
1720
|
const regex = new RegExp(`^${pattern.replace(/\*/g, ".*").replace(/\?/g, ".")}$`);
|
|
1592
1721
|
return regex.test(str);
|
|
1593
1722
|
}
|
|
1594
|
-
function
|
|
1723
|
+
function createConnector8() {
|
|
1595
1724
|
return new MemoryConnector();
|
|
1596
1725
|
}
|
|
1597
1726
|
|
|
@@ -1856,7 +1985,7 @@ var PostgresConnector = class extends AbstractConnector {
|
|
|
1856
1985
|
}
|
|
1857
1986
|
}
|
|
1858
1987
|
};
|
|
1859
|
-
function
|
|
1988
|
+
function createConnector9() {
|
|
1860
1989
|
return new PostgresConnector();
|
|
1861
1990
|
}
|
|
1862
1991
|
|
|
@@ -2114,7 +2243,7 @@ var RedisConnector = class extends AbstractConnector {
|
|
|
2114
2243
|
}
|
|
2115
2244
|
}
|
|
2116
2245
|
};
|
|
2117
|
-
function
|
|
2246
|
+
function createConnector10() {
|
|
2118
2247
|
return new RedisConnector();
|
|
2119
2248
|
}
|
|
2120
2249
|
var SQLiteConnector = class extends AbstractConnector {
|
|
@@ -2352,7 +2481,7 @@ var SQLiteConnector = class extends AbstractConnector {
|
|
|
2352
2481
|
}
|
|
2353
2482
|
}
|
|
2354
2483
|
};
|
|
2355
|
-
function
|
|
2484
|
+
function createConnector11() {
|
|
2356
2485
|
return new SQLiteConnector();
|
|
2357
2486
|
}
|
|
2358
2487
|
|
|
@@ -2603,7 +2732,7 @@ var MinIOConnector = class extends AbstractConnector {
|
|
|
2603
2732
|
}
|
|
2604
2733
|
}
|
|
2605
2734
|
};
|
|
2606
|
-
function
|
|
2735
|
+
function createConnector12() {
|
|
2607
2736
|
return new MinIOConnector();
|
|
2608
2737
|
}
|
|
2609
2738
|
var XStateConnector = class extends AbstractConnector {
|
|
@@ -2906,7 +3035,7 @@ var XStateConnector = class extends AbstractConnector {
|
|
|
2906
3035
|
return [...names];
|
|
2907
3036
|
}
|
|
2908
3037
|
};
|
|
2909
|
-
function
|
|
3038
|
+
function createConnector13() {
|
|
2910
3039
|
return new XStateConnector();
|
|
2911
3040
|
}
|
|
2912
3041
|
|
|
@@ -3155,7 +3284,7 @@ var XStateStoreConnector = class extends AbstractConnector {
|
|
|
3155
3284
|
if (s.history.length > 500) s.history = s.history.slice(-500);
|
|
3156
3285
|
}
|
|
3157
3286
|
};
|
|
3158
|
-
function
|
|
3287
|
+
function createConnector14() {
|
|
3159
3288
|
return new XStateStoreConnector();
|
|
3160
3289
|
}
|
|
3161
3290
|
|
|
@@ -3445,7 +3574,7 @@ var YjsConnector = class extends AbstractConnector {
|
|
|
3445
3574
|
if (s.history.length > 500) s.history = s.history.slice(-500);
|
|
3446
3575
|
}
|
|
3447
3576
|
};
|
|
3448
|
-
function
|
|
3577
|
+
function createConnector15() {
|
|
3449
3578
|
return new YjsConnector();
|
|
3450
3579
|
}
|
|
3451
3580
|
|
|
@@ -3652,7 +3781,7 @@ var GmailConnector = class extends AbstractConnector {
|
|
|
3652
3781
|
return Buffer.from(message).toString("base64url");
|
|
3653
3782
|
}
|
|
3654
3783
|
};
|
|
3655
|
-
function
|
|
3784
|
+
function createConnector16() {
|
|
3656
3785
|
return new GmailConnector();
|
|
3657
3786
|
}
|
|
3658
3787
|
|
|
@@ -4029,7 +4158,7 @@ var MattermostConnector = class extends AbstractConnector {
|
|
|
4029
4158
|
return res.json();
|
|
4030
4159
|
}
|
|
4031
4160
|
};
|
|
4032
|
-
function
|
|
4161
|
+
function createConnector17() {
|
|
4033
4162
|
return new MattermostConnector();
|
|
4034
4163
|
}
|
|
4035
4164
|
|
|
@@ -4464,7 +4593,7 @@ function instanceToStatus(inst) {
|
|
|
4464
4593
|
uptime_ms: Date.now() - new Date(inst.startedAt).getTime()
|
|
4465
4594
|
};
|
|
4466
4595
|
}
|
|
4467
|
-
function
|
|
4596
|
+
function createConnector18() {
|
|
4468
4597
|
return new DevServerConnector();
|
|
4469
4598
|
}
|
|
4470
4599
|
var DEFAULT_PORT_RANGE = [14e3, 14099];
|
|
@@ -4708,7 +4837,7 @@ function instanceToStatus2(instance) {
|
|
|
4708
4837
|
uptime_ms: Date.now() - new Date(instance.startedAt).getTime()
|
|
4709
4838
|
};
|
|
4710
4839
|
}
|
|
4711
|
-
function
|
|
4840
|
+
function createConnector19() {
|
|
4712
4841
|
return new StaticServerConnector();
|
|
4713
4842
|
}
|
|
4714
4843
|
|
|
@@ -4936,7 +5065,7 @@ async function spawnNgrokTunnel(port) {
|
|
|
4936
5065
|
proc.kill();
|
|
4937
5066
|
throw new Error("ngrok: timed out");
|
|
4938
5067
|
}
|
|
4939
|
-
function
|
|
5068
|
+
function createConnector20() {
|
|
4940
5069
|
return new TunnelConnector();
|
|
4941
5070
|
}
|
|
4942
5071
|
var DeployConnector = class extends AbstractConnector {
|
|
@@ -5162,7 +5291,7 @@ var DeployConnector = class extends AbstractConnector {
|
|
|
5162
5291
|
};
|
|
5163
5292
|
}
|
|
5164
5293
|
};
|
|
5165
|
-
function
|
|
5294
|
+
function createConnector21() {
|
|
5166
5295
|
return new DeployConnector();
|
|
5167
5296
|
}
|
|
5168
5297
|
|
|
@@ -5196,21 +5325,22 @@ function registerBuiltinConnectors() {
|
|
|
5196
5325
|
registerConnector("s3", () => createConnector4());
|
|
5197
5326
|
registerConnector("webdav", () => createConnector5());
|
|
5198
5327
|
registerConnector("sharepoint", () => createConnector6());
|
|
5199
|
-
registerConnector("
|
|
5200
|
-
registerConnector("
|
|
5201
|
-
registerConnector("
|
|
5202
|
-
registerConnector("
|
|
5203
|
-
registerConnector("
|
|
5328
|
+
registerConnector("googledrive", () => createConnector7());
|
|
5329
|
+
registerConnector("memory", () => createConnector8());
|
|
5330
|
+
registerConnector("postgres", () => createConnector9());
|
|
5331
|
+
registerConnector("redis", () => createConnector10());
|
|
5332
|
+
registerConnector("sqlite", () => createConnector11());
|
|
5333
|
+
registerConnector("minio", () => createConnector12());
|
|
5204
5334
|
registerConnector("flow", () => createConnector());
|
|
5205
|
-
registerConnector("xstate", () =>
|
|
5206
|
-
registerConnector("xstate-store", () =>
|
|
5207
|
-
registerConnector("yjs", () =>
|
|
5208
|
-
registerConnector("devserver", () =>
|
|
5209
|
-
registerConnector("static", () =>
|
|
5210
|
-
registerConnector("tunnel", () =>
|
|
5211
|
-
registerConnector("deploy", () =>
|
|
5212
|
-
registerConnector("gmail", () =>
|
|
5213
|
-
registerConnector("mattermost", () =>
|
|
5335
|
+
registerConnector("xstate", () => createConnector13());
|
|
5336
|
+
registerConnector("xstate-store", () => createConnector14());
|
|
5337
|
+
registerConnector("yjs", () => createConnector15());
|
|
5338
|
+
registerConnector("devserver", () => createConnector18());
|
|
5339
|
+
registerConnector("static", () => createConnector19());
|
|
5340
|
+
registerConnector("tunnel", () => createConnector20());
|
|
5341
|
+
registerConnector("deploy", () => createConnector21());
|
|
5342
|
+
registerConnector("gmail", () => createConnector16());
|
|
5343
|
+
registerConnector("mattermost", () => createConnector17());
|
|
5214
5344
|
}
|
|
5215
5345
|
|
|
5216
5346
|
// connectors/src/connector-types.ts
|
|
@@ -6613,6 +6743,34 @@ function isPackageResolvable(pkg, projectDir) {
|
|
|
6613
6743
|
function findMissingPackages(packages, projectDir) {
|
|
6614
6744
|
return packages.filter((p) => !isPackageResolvable(p, projectDir));
|
|
6615
6745
|
}
|
|
6746
|
+
function isFleetManaged(connectorId) {
|
|
6747
|
+
const raw = process.env.SKAILE_FLEET_MANAGED_MOUNTS ?? "";
|
|
6748
|
+
if (raw.length === 0) return false;
|
|
6749
|
+
return raw.split(",").map((segment) => segment.trim()).filter((segment) => segment.length > 0).includes(connectorId);
|
|
6750
|
+
}
|
|
6751
|
+
async function ensureFleetMounted(dir, log, options) {
|
|
6752
|
+
const timeoutMs = options?.timeoutMs ?? 3e3;
|
|
6753
|
+
const pollIntervalMs = options?.pollIntervalMs ?? 100;
|
|
6754
|
+
const deadline = Date.now() + timeoutMs;
|
|
6755
|
+
let lastErr = null;
|
|
6756
|
+
while (Date.now() < deadline) {
|
|
6757
|
+
try {
|
|
6758
|
+
const st = await stat(dir);
|
|
6759
|
+
if (!st.isDirectory()) {
|
|
6760
|
+
throw new Error(`fleet mountpoint ${dir} is not a directory`);
|
|
6761
|
+
}
|
|
6762
|
+
await readdir(dir);
|
|
6763
|
+
log.info("fleet bind mount verified", { dir });
|
|
6764
|
+
return;
|
|
6765
|
+
} catch (err) {
|
|
6766
|
+
lastErr = err;
|
|
6767
|
+
await new Promise((resolve5) => setTimeout(resolve5, pollIntervalMs));
|
|
6768
|
+
}
|
|
6769
|
+
}
|
|
6770
|
+
throw new Error(
|
|
6771
|
+
`fleet mount ${dir} not ready after ${timeoutMs}ms \u2014 check SKAILE_FLEET_MANAGED_MOUNTS env var and host bind: ${lastErr instanceof Error ? lastErr.message : String(lastErr)}`
|
|
6772
|
+
);
|
|
6773
|
+
}
|
|
6616
6774
|
function globToMatcher(pattern) {
|
|
6617
6775
|
const segmentMatch = pattern.match(/^\*\*\/([^*/?]+)\/\*\*$/);
|
|
6618
6776
|
if (segmentMatch) {
|
|
@@ -7723,6 +7881,6 @@ function createConnector() {
|
|
|
7723
7881
|
return new FlowAdapter();
|
|
7724
7882
|
}
|
|
7725
7883
|
|
|
7726
|
-
export { AbstractConnector, ConnectorFieldMissingError, ConnectorManager, ConnectorStartupError, DeployConnector, DevServerConnector, FlowAdapter, GitConnector, GmailConnector, 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, createConnector3, createConnector4, createConnector5, createConnector6, createConnector7, createConnector8, createConnector9, createFsWatcher, createWorktree, defaultSpawn, findGitRoot, findMissingPackages, getConnector, installNpmPackages, isPackageResolvable, listConnectors, listWorktrees, registerBuiltinConnectors, registerConnector, removeMountBlock, renderCredentialHelperScript, tryGetConnector, worktreeRegistry, writeHelperScript, writeMountBlock };
|
|
7727
|
-
//# sourceMappingURL=chunk-
|
|
7728
|
-
//# sourceMappingURL=chunk-
|
|
7884
|
+
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 };
|
|
7885
|
+
//# sourceMappingURL=chunk-HSOEX3TA.js.map
|
|
7886
|
+
//# sourceMappingURL=chunk-HSOEX3TA.js.map
|