@dbx-tools/appkit-lakebox 0.9.154 → 0.9.158
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/index.ts +9 -9
- package/lib/index.d.ts +9 -9
- package/lib/index.js +10 -10
- package/lib/src/_resource-registry.d.ts +1 -1
- package/lib/src/_resource-registry.js +2 -2
- package/lib/src/_service-snapshots.js +4 -4
- package/lib/src/config.js +9 -9
- package/lib/src/desktop.js +4 -4
- package/lib/src/metrics.js +3 -3
- package/lib/src/plugin.d.ts +17 -17
- package/lib/src/plugin.js +8 -7
- package/lib/src/routes.d.ts +1 -1
- package/lib/src/routes.js +6 -6
- package/lib/src/runtime.d.ts +2 -2
- package/lib/src/runtime.js +10 -12
- package/lib/src/services.js +2 -2
- package/lib/src/user.js +3 -3
- package/package.json +11 -99
- package/src/_resource-registry.ts +1 -1
- package/src/_service-snapshots.ts +3 -3
- package/src/config.ts +8 -8
- package/src/desktop.ts +3 -3
- package/src/metrics.ts +2 -2
- package/src/plugin.ts +13 -13
- package/src/routes.ts +13 -6
- package/src/runtime.ts +12 -13
- package/src/services.ts +1 -1
- package/src/user.ts +2 -2
package/lib/src/user.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* @module
|
|
11
11
|
*/
|
|
12
|
-
import {
|
|
12
|
+
import { fnvHashWithOptions } from "@dbx-tools/shared-core";
|
|
13
13
|
/** Platform account that owns the persistent volume and the SSH session. */
|
|
14
14
|
export const LAKEBOX_AGENT_USER = "sandbox-agent";
|
|
15
15
|
/** Persistent home mounted by the platform. Only this path survives a restart. */
|
|
@@ -68,9 +68,9 @@ export function isLakeboxUserHash(value) {
|
|
|
68
68
|
return /^[0-9a-v]{7}$/.test(value);
|
|
69
69
|
}
|
|
70
70
|
function digestText(...values) {
|
|
71
|
-
return
|
|
71
|
+
return fnvHashWithOptions({ length: 7, alphabet: HASH_ALPHABET }, ...values);
|
|
72
72
|
}
|
|
73
73
|
function digestValue(...values) {
|
|
74
74
|
return Number.parseInt(digestText(...values), 32);
|
|
75
75
|
}
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUc1RCw0RUFBNEU7QUFDNUUsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDO0FBQ2xELGtGQUFrRjtBQUNsRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLGtCQUFrQixFQUFFLENBQUM7QUFDaEUsOENBQThDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLEdBQUcsa0JBQWtCLGFBQWEsQ0FBQztBQUNyRSw2REFBNkQ7QUFDN0QsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxrQkFBa0IsUUFBUSxDQUFDO0FBQ2hFLGdGQUFnRjtBQUNoRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLGtCQUFrQixVQUFVLENBQUM7QUFDcEUsbUVBQW1FO0FBQ25FLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGNBQWMsQ0FBQztBQUUvQyx1RkFBdUY7QUFDdkYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQztBQUN0QyxnQ0FBZ0M7QUFDaEMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLDRFQUE0RTtBQUM1RSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7QUFDdkMscUZBQXFGO0FBQ3JGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQztBQUV6QyxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUM7QUFDL0IsTUFBTSxhQUFhLEdBQUcsa0NBQWtDLENBQUM7QUFFekQsMkRBQTJEO0FBQzNELE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxRQUFnQjtJQUN2RCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDakQsSUFBSSxDQUFDLFVBQVU7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7SUFDcEYsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLFFBQWdCLEVBQUUsV0FBbUI7SUFDL0QsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLGNBQWMsRUFBRSx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLE1BQU0sSUFBSSxHQUFHLEdBQUcsV0FBVyxHQUFHLFFBQVEsRUFBRSxDQUFDO0lBQ3pDLE9BQU87UUFDTCxJQUFJLEVBQUUsUUFBUTtRQUNkLElBQUk7UUFDSixHQUFHLEVBQUUsZUFBZSxHQUFHLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztRQUNqRixJQUFJLEVBQUUsU0FBUyxJQUFJLEVBQUU7UUFDckIsV0FBVyxFQUFFLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksUUFBUSxFQUFFO0tBQzlELENBQUM7QUFDSixDQUFDO0FBRUQsZ0VBQWdFO0FBQ2hFLE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxRQUFnQjtJQUNwRCxPQUFPLEdBQUcsa0JBQWtCLElBQUksUUFBUSxFQUFFLENBQUM7QUFDN0MsQ0FBQztBQUVELHdEQUF3RDtBQUN4RCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsUUFBZ0IsRUFBRSxXQUFtQjtJQUN0RSxPQUFPLENBQ0wsZ0JBQWdCLEdBQUcsQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxDQUM3RixDQUFDO0FBQ0osQ0FBQztBQUVELG9FQUFvRTtBQUNwRSxNQUFNLFVBQVUsaUJBQWlCLENBQUMsS0FBYTtJQUM3QyxPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEdBQUcsTUFBZ0I7SUFDckMsT0FBTyxrQkFBa0IsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDL0UsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEdBQUcsTUFBZ0I7SUFDdEMsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERldGVybWluaXN0aWMgTGFrZWJveCB1c2VyIGFuZCBzZXJ2aWNlLXBvcnQgZGVyaXZhdGlvbi5cbiAqXG4gKiBPbmUgRk5WLTFhIGhhc2ggb2YgdGhlIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkgaXMgdGhlIG9ubHkgcm91dGluZyBrZXkuIEl0XG4gKiBzZWxlY3RzIHRoZSBMaW51eCBhY2NvdW50LCBVSUQsIHBlcnNpc3RlbnQgaG9tZSwgQXBwS2l0IHJvdXRlIHNlZ21lbnQsIGFuZCxcbiAqIHdpdGggYSBzZXJ2aWNlIG5hbWUsIHRoZSBsb29wYmFjayBzZXJ2aWNlIHBvcnQuIE5vdGhpbmcgaGVyZSBpcyBwZXJzaXN0ZWQ6XG4gKiBldmVyeSBjYWxsZXIgcmVjb21wdXRlcyB0aGUgc2FtZSB2YWx1ZXMsIGFuZCBjb2xsaXNpb25zIGZhaWwgY2xvc2VkIHdoZXJlXG4gKiB0aGV5IGFyZSBvYnNlcnZlZC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgZm52SGFzaFdpdGhPcHRpb25zIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgTGFrZWJveFVzZXIgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbGFrZWJveFwiO1xuXG4vKiogUGxhdGZvcm0gYWNjb3VudCB0aGF0IG93bnMgdGhlIHBlcnNpc3RlbnQgdm9sdW1lIGFuZCB0aGUgU1NIIHNlc3Npb24uICovXG5leHBvcnQgY29uc3QgTEFLRUJPWF9BR0VOVF9VU0VSID0gXCJzYW5kYm94LWFnZW50XCI7XG4vKiogUGVyc2lzdGVudCBob21lIG1vdW50ZWQgYnkgdGhlIHBsYXRmb3JtLiBPbmx5IHRoaXMgcGF0aCBzdXJ2aXZlcyBhIHJlc3RhcnQuICovXG5leHBvcnQgY29uc3QgTEFLRUJPWF9BR0VOVF9IT01FID0gYC9ob21lLyR7TEFLRUJPWF9BR0VOVF9VU0VSfWA7XG4vKiogUm9vdCBvZiBwYWNrYWdlLW93bmVkIHBlcnNpc3RlbnQgc3RhdGUuICovXG5leHBvcnQgY29uc3QgTEFLRUJPWF9TVEFURV9ST09UID0gYCR7TEFLRUJPWF9BR0VOVF9IT01FfS8uZGJ4LXRvb2xzYDtcbi8qKiBQZXJzaXN0ZW50IGJhY2tpbmcgZGlyZWN0b3JpZXMgZm9yIExha2Vib3ggdXNlciBob21lcy4gKi9cbmV4cG9ydCBjb25zdCBMQUtFQk9YX1VTRVJTX1JPT1QgPSBgJHtMQUtFQk9YX1NUQVRFX1JPT1R9L3VzZXJzYDtcbi8qKiBTaGFyZWQgcmVhZC1vbmx5IHJ1bnRpbWUgYmluYXJpZXMsIHN1Y2ggYXMgdGhlIGNvbnRhaW5lciBidW5kbGUgYW5kIHR0eWQuICovXG5leHBvcnQgY29uc3QgTEFLRUJPWF9SVU5USU1FX1JPT1QgPSBgJHtMQUtFQk9YX1NUQVRFX1JPT1R9L3J1bnRpbWVgO1xuLyoqIFBlci1ib290IHJ1bnRpbWUgc3RhdGUgcm9vdDsgcmVzZXQgd2l0aCB0aGUgcm9vdCBmaWxlc3lzdGVtLiAqL1xuZXhwb3J0IGNvbnN0IExBS0VCT1hfUlVOX1JPT1QgPSBcIi9ydW4vbGFrZWJveFwiO1xuXG4vKiogRmlyc3QgZGVyaXZlZCBMaW51eCBVSUQuIFRoZSBwZXJzaXN0ZW50IGlkbWFwcGVkIHZvbHVtZSBzdG9yZXMgVUlEcyBiZWxvdyA2NTUzNi4gKi9cbmV4cG9ydCBjb25zdCBMQUtFQk9YX1VJRF9NSU4gPSAyMF8wMDA7XG4vKiogTnVtYmVyIG9mIGRlcml2YWJsZSBVSURzLiAqL1xuZXhwb3J0IGNvbnN0IExBS0VCT1hfVUlEX0NPVU5UID0gNDBfMDAwO1xuLyoqIEZpcnN0IGRlcml2ZWQgc2VydmljZSBwb3J0LiBQbGF0Zm9ybSBsaXN0ZW5lcnMgc3RheSBiZWxvdyB0aGlzIHZhbHVlLiAqL1xuZXhwb3J0IGNvbnN0IExBS0VCT1hfUE9SVF9NSU4gPSAyMF8wMDA7XG4vKiogTnVtYmVyIG9mIGRlcml2YWJsZSBzZXJ2aWNlIHBvcnRzOyB0aGUga2VybmVsIGVwaGVtZXJhbCByYW5nZSBzdGFydHMgYXQgMzI3NjguICovXG5leHBvcnQgY29uc3QgTEFLRUJPWF9QT1JUX0NPVU5UID0gMTJfMDAwO1xuXG5jb25zdCBVU0VSX1BSRUZJWCA9IFwibGFrZWJveC1cIjtcbmNvbnN0IEhBU0hfQUxQSEFCRVQgPSBcIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2XCI7XG5cbi8qKiBOb3JtYWxpemVzIGFuIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkgYmVmb3JlIGhhc2hpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplTGFrZWJveElkZW50aXR5KGlkZW50aXR5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBub3JtYWxpemVkID0gaWRlbnRpdHkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGlmICghbm9ybWFsaXplZCkgdGhyb3cgbmV3IEVycm9yKFwiTGFrZWJveCB1c2VycyByZXF1aXJlIGFuIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHlcIik7XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vKipcbiAqIERlcml2ZXMgdGhlIExha2Vib3ggYWNjb3VudCBmb3Igb25lIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkuXG4gKlxuICogQHBhcmFtIHJvdXRlUHJlZml4IC0gQXBwS2l0IHJvb3QgZm9yIHVzZXIgc2VydmljZSByb3V0ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYWtlYm94VXNlcihpZGVudGl0eTogc3RyaW5nLCByb3V0ZVByZWZpeDogc3RyaW5nKTogTGFrZWJveFVzZXIge1xuICBjb25zdCB1c2VySGFzaCA9IGRpZ2VzdFRleHQoXCJsYWtlYm94LXVzZXJcIiwgbm9ybWFsaXplTGFrZWJveElkZW50aXR5KGlkZW50aXR5KSk7XG4gIGNvbnN0IG5hbWUgPSBgJHtVU0VSX1BSRUZJWH0ke3VzZXJIYXNofWA7XG4gIHJldHVybiB7XG4gICAgaGFzaDogdXNlckhhc2gsXG4gICAgbmFtZSxcbiAgICB1aWQ6IExBS0VCT1hfVUlEX01JTiArIChkaWdlc3RWYWx1ZShcImxha2Vib3gtdWlkXCIsIHVzZXJIYXNoKSAlIExBS0VCT1hfVUlEX0NPVU5UKSxcbiAgICBob21lOiBgL2hvbWUvJHtuYW1lfWAsXG4gICAgcm91dGVQcmVmaXg6IGAke3JvdXRlUHJlZml4LnJlcGxhY2UoL1xcLyskLywgXCJcIil9LyR7dXNlckhhc2h9YCxcbiAgfTtcbn1cblxuLyoqIFJldHVybnMgdGhlIHBlcnNpc3RlbnQgYmFja2luZyBkaXJlY3RvcnkgZm9yIGEgdXNlciBoYXNoLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxha2Vib3hQZXJzaXN0ZW50SG9tZSh1c2VySGFzaDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke0xBS0VCT1hfVVNFUlNfUk9PVH0vJHt1c2VySGFzaH1gO1xufVxuXG4vKiogRGVyaXZlcyB0aGUgbG9vcGJhY2sgcG9ydCBmb3Igb25lIHVzZXIncyBzZXJ2aWNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxha2Vib3hTZXJ2aWNlUG9ydCh1c2VySGFzaDogc3RyaW5nLCBzZXJ2aWNlTmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgcmV0dXJuIChcbiAgICBMQUtFQk9YX1BPUlRfTUlOICsgKGRpZ2VzdFZhbHVlKFwibGFrZWJveC1wb3J0XCIsIHVzZXJIYXNoLCBzZXJ2aWNlTmFtZSkgJSBMQUtFQk9YX1BPUlRfQ09VTlQpXG4gICk7XG59XG5cbi8qKiBSZXR1cm5zIHdoZXRoZXIgYSByb3V0ZSBzZWdtZW50IGhhcyB0aGUgc2hhcGUgb2YgYSB1c2VyIGhhc2guICovXG5leHBvcnQgZnVuY3Rpb24gaXNMYWtlYm94VXNlckhhc2godmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL15bMC05YS12XXs3fSQvLnRlc3QodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBkaWdlc3RUZXh0KC4uLnZhbHVlczogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gZm52SGFzaFdpdGhPcHRpb25zKHsgbGVuZ3RoOiA3LCBhbHBoYWJldDogSEFTSF9BTFBIQUJFVCB9LCAuLi52YWx1ZXMpO1xufVxuXG5mdW5jdGlvbiBkaWdlc3RWYWx1ZSguLi52YWx1ZXM6IHN0cmluZ1tdKTogbnVtYmVyIHtcbiAgcmV0dXJuIE51bWJlci5wYXJzZUludChkaWdlc3RUZXh0KC4uLnZhbHVlcyksIDMyKTtcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"projen": "projen"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
|
-
"@dbx-tools/auth": "^0.9.
|
|
22
|
+
"@dbx-tools/auth": "^0.9.158",
|
|
23
23
|
"@types/express": "^5.0.5",
|
|
24
24
|
"@types/json-schema": "^7",
|
|
25
25
|
"@types/node": "^24.6.0",
|
|
@@ -29,14 +29,14 @@
|
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@databricks/appkit": "0.81.0",
|
|
32
|
-
"@dbx-tools/appkit": "^0.9.
|
|
33
|
-
"@dbx-tools/appkit-mastra": "^0.9.
|
|
34
|
-
"@dbx-tools/core": "^0.9.
|
|
35
|
-
"@dbx-tools/lakebox": "^0.9.
|
|
36
|
-
"@dbx-tools/postgres": "^0.9.
|
|
37
|
-
"@dbx-tools/shared-core": "^0.9.
|
|
38
|
-
"@dbx-tools/shared-lakebox": "^0.9.
|
|
39
|
-
"@dbx-tools/ui": "^0.9.
|
|
32
|
+
"@dbx-tools/appkit": "^0.9.158",
|
|
33
|
+
"@dbx-tools/appkit-mastra": "^0.9.158",
|
|
34
|
+
"@dbx-tools/core": "^0.9.158",
|
|
35
|
+
"@dbx-tools/lakebox": "^0.9.158",
|
|
36
|
+
"@dbx-tools/postgres": "^0.9.158",
|
|
37
|
+
"@dbx-tools/shared-core": "^0.9.158",
|
|
38
|
+
"@dbx-tools/shared-lakebox": "^0.9.158",
|
|
39
|
+
"@dbx-tools/ui": "^0.9.158",
|
|
40
40
|
"@mastra/core": "1.71.0",
|
|
41
41
|
"http-proxy-3": "^1.23.1",
|
|
42
42
|
"zod": "4.3.6"
|
|
@@ -52,54 +52,10 @@
|
|
|
52
52
|
"types": "./lib/index.d.ts",
|
|
53
53
|
"default": "./lib/index.js"
|
|
54
54
|
},
|
|
55
|
-
"./config": {
|
|
56
|
-
"types": "./lib/src/config.d.ts",
|
|
57
|
-
"default": "./lib/src/config.js"
|
|
58
|
-
},
|
|
59
|
-
"./desktop": {
|
|
60
|
-
"types": "./lib/src/desktop.d.ts",
|
|
61
|
-
"default": "./lib/src/desktop.js"
|
|
62
|
-
},
|
|
63
|
-
"./metrics": {
|
|
64
|
-
"types": "./lib/src/metrics.d.ts",
|
|
65
|
-
"default": "./lib/src/metrics.js"
|
|
66
|
-
},
|
|
67
|
-
"./plugin": {
|
|
68
|
-
"types": "./lib/src/plugin.d.ts",
|
|
69
|
-
"default": "./lib/src/plugin.js"
|
|
70
|
-
},
|
|
71
|
-
"./routes": {
|
|
72
|
-
"types": "./lib/src/routes.d.ts",
|
|
73
|
-
"default": "./lib/src/routes.js"
|
|
74
|
-
},
|
|
75
|
-
"./runtime": {
|
|
76
|
-
"types": "./lib/src/runtime.d.ts",
|
|
77
|
-
"default": "./lib/src/runtime.js"
|
|
78
|
-
},
|
|
79
|
-
"./services": {
|
|
80
|
-
"types": "./lib/src/services.d.ts",
|
|
81
|
-
"default": "./lib/src/services.js"
|
|
82
|
-
},
|
|
83
|
-
"./skills": {
|
|
84
|
-
"types": "./lib/src/skills.d.ts",
|
|
85
|
-
"default": "./lib/src/skills.js"
|
|
86
|
-
},
|
|
87
|
-
"./user": {
|
|
88
|
-
"types": "./lib/src/user.d.ts",
|
|
89
|
-
"default": "./lib/src/user.js"
|
|
90
|
-
},
|
|
91
|
-
"./workspace": {
|
|
92
|
-
"types": "./lib/src/workspace.d.ts",
|
|
93
|
-
"default": "./lib/src/workspace.js"
|
|
94
|
-
},
|
|
95
|
-
"./*": {
|
|
96
|
-
"types": "./lib/src/*/index.d.ts",
|
|
97
|
-
"default": "./lib/src/*/index.js"
|
|
98
|
-
},
|
|
99
55
|
"./package.json": "./package.json"
|
|
100
56
|
}
|
|
101
57
|
},
|
|
102
|
-
"version": "0.9.
|
|
58
|
+
"version": "0.9.158",
|
|
103
59
|
"types": "./lib/index.d.ts",
|
|
104
60
|
"dbxToolsConfig": {
|
|
105
61
|
"tags": [
|
|
@@ -112,54 +68,10 @@
|
|
|
112
68
|
"types": "./lib/index.d.ts",
|
|
113
69
|
"default": "./lib/index.js"
|
|
114
70
|
},
|
|
115
|
-
"./config": {
|
|
116
|
-
"types": "./lib/src/config.d.ts",
|
|
117
|
-
"default": "./lib/src/config.js"
|
|
118
|
-
},
|
|
119
|
-
"./desktop": {
|
|
120
|
-
"types": "./lib/src/desktop.d.ts",
|
|
121
|
-
"default": "./lib/src/desktop.js"
|
|
122
|
-
},
|
|
123
|
-
"./metrics": {
|
|
124
|
-
"types": "./lib/src/metrics.d.ts",
|
|
125
|
-
"default": "./lib/src/metrics.js"
|
|
126
|
-
},
|
|
127
|
-
"./plugin": {
|
|
128
|
-
"types": "./lib/src/plugin.d.ts",
|
|
129
|
-
"default": "./lib/src/plugin.js"
|
|
130
|
-
},
|
|
131
|
-
"./routes": {
|
|
132
|
-
"types": "./lib/src/routes.d.ts",
|
|
133
|
-
"default": "./lib/src/routes.js"
|
|
134
|
-
},
|
|
135
|
-
"./runtime": {
|
|
136
|
-
"types": "./lib/src/runtime.d.ts",
|
|
137
|
-
"default": "./lib/src/runtime.js"
|
|
138
|
-
},
|
|
139
|
-
"./services": {
|
|
140
|
-
"types": "./lib/src/services.d.ts",
|
|
141
|
-
"default": "./lib/src/services.js"
|
|
142
|
-
},
|
|
143
|
-
"./skills": {
|
|
144
|
-
"types": "./lib/src/skills.d.ts",
|
|
145
|
-
"default": "./lib/src/skills.js"
|
|
146
|
-
},
|
|
147
|
-
"./user": {
|
|
148
|
-
"types": "./lib/src/user.d.ts",
|
|
149
|
-
"default": "./lib/src/user.js"
|
|
150
|
-
},
|
|
151
|
-
"./workspace": {
|
|
152
|
-
"types": "./lib/src/workspace.d.ts",
|
|
153
|
-
"default": "./lib/src/workspace.js"
|
|
154
|
-
},
|
|
155
|
-
"./*": {
|
|
156
|
-
"types": "./lib/src/*/index.d.ts",
|
|
157
|
-
"default": "./lib/src/*/index.js"
|
|
158
|
-
},
|
|
159
71
|
"./package.json": "./package.json"
|
|
160
72
|
},
|
|
161
73
|
"files": [
|
|
162
|
-
"index
|
|
74
|
+
"index*.ts",
|
|
163
75
|
"src",
|
|
164
76
|
"skills",
|
|
165
77
|
"scripts",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CacheManager } from "@databricks/appkit";
|
|
2
|
-
import { LakeboxApiError, type LakeboxEntry } from "@dbx-tools/lakebox
|
|
2
|
+
import { LakeboxApiError, type LakeboxEntry } from "@dbx-tools/lakebox";
|
|
3
3
|
import { withAdvisoryLock, type PgPoolLike } from "@dbx-tools/postgres";
|
|
4
4
|
import { log } from "@dbx-tools/shared-core";
|
|
5
5
|
import { z } from "zod";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CacheManager } from "@databricks/appkit";
|
|
2
|
-
import {
|
|
2
|
+
import { log, toError } from "@dbx-tools/shared-core";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { LakeboxControllerDefinitionSchema, type LakeboxControllerService } from "./services.ts";
|
|
5
5
|
|
|
@@ -52,7 +52,7 @@ export class LakeboxServiceSnapshots {
|
|
|
52
52
|
logger.warn("unable to read cached service snapshot", {
|
|
53
53
|
lakeboxId,
|
|
54
54
|
userHash,
|
|
55
|
-
error:
|
|
55
|
+
error: toError(error),
|
|
56
56
|
});
|
|
57
57
|
}
|
|
58
58
|
return undefined;
|
|
@@ -73,7 +73,7 @@ export class LakeboxServiceSnapshots {
|
|
|
73
73
|
logger.warn("unable to cache service snapshot", {
|
|
74
74
|
lakeboxId,
|
|
75
75
|
userHash,
|
|
76
|
-
error:
|
|
76
|
+
error: toError(error),
|
|
77
77
|
});
|
|
78
78
|
}
|
|
79
79
|
}
|
package/src/config.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { basename } from "node:path";
|
|
2
2
|
import type { BasePluginConfig } from "@databricks/appkit";
|
|
3
|
-
import { configUtils,
|
|
4
|
-
import { Ssh2PatchModeSchema, SshTransportModeSchema } from "@dbx-tools/lakebox
|
|
3
|
+
import { configUtils, string, ENV_ONLY, positiveInt, root } from "@dbx-tools/core";
|
|
4
|
+
import { Ssh2PatchModeSchema, SshTransportModeSchema } from "@dbx-tools/lakebox";
|
|
5
5
|
import { LAKEBOX_DEFAULT_ROUTE_PREFIX } from "@dbx-tools/shared-lakebox";
|
|
6
6
|
import { z } from "zod";
|
|
7
7
|
|
|
@@ -118,11 +118,11 @@ export function resolveLakeboxPluginConfig(
|
|
|
118
118
|
return LakeboxPluginConfigSchema.parse({
|
|
119
119
|
...serializable,
|
|
120
120
|
application:
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
basename(
|
|
124
|
-
idleTimeoutSeconds:
|
|
125
|
-
sshTransport:
|
|
126
|
-
ssh2Patch:
|
|
121
|
+
string(application, APPLICATION_CONFIG_KEY) ??
|
|
122
|
+
string(undefined, "DATABRICKS_APP_NAME", ENV_ONLY) ??
|
|
123
|
+
basename(root() ?? process.cwd()),
|
|
124
|
+
idleTimeoutSeconds: positiveInt(idleTimeoutSeconds, IDLE_TIMEOUT_CONFIG_KEY, 3_600),
|
|
125
|
+
sshTransport: string(sshTransport, SSH_TRANSPORT_CONFIG_KEY),
|
|
126
|
+
ssh2Patch: string(ssh2Patch, SSH2_PATCH_CONFIG_KEY),
|
|
127
127
|
});
|
|
128
128
|
}
|
package/src/desktop.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { dbxToolsAssetDataUrls, dbxToolsAssetSvg } from "@dbx-tools/ui/branding/
|
|
1
|
+
import { defaultBrandContext } from "@dbx-tools/shared-core";
|
|
2
|
+
import { dbxToolsAssetDataUrls, dbxToolsAssetSvg } from "@dbx-tools/ui/branding/generated";
|
|
3
3
|
|
|
4
|
-
const BRAND =
|
|
4
|
+
const BRAND = defaultBrandContext;
|
|
5
5
|
const BRAND_COLORS = BRAND.colors;
|
|
6
6
|
const WALLPAPER_LOGO = dbxToolsAssetSvg.logoDark.replace(
|
|
7
7
|
"<svg ",
|
package/src/metrics.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EventEmitter } from "node:events";
|
|
2
|
-
import {
|
|
2
|
+
import { log, toError } from "@dbx-tools/shared-core";
|
|
3
3
|
import type { LakeboxMetricsSnapshot } from "@dbx-tools/shared-lakebox";
|
|
4
4
|
|
|
5
5
|
const logger = log.logger("appkit-lakebox:metrics");
|
|
@@ -88,7 +88,7 @@ export class LakeboxMetrics extends EventEmitter<LakeboxMetricsEvents> {
|
|
|
88
88
|
this.record(counters, true);
|
|
89
89
|
} catch (error) {
|
|
90
90
|
if (!signal.aborted) {
|
|
91
|
-
logger.debug("Lakebox metrics sample failed", { error:
|
|
91
|
+
logger.debug("Lakebox metrics sample failed", { error: toError(error) });
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
94
|
if (signal.aborted) return;
|
package/src/plugin.ts
CHANGED
|
@@ -14,16 +14,16 @@ import {
|
|
|
14
14
|
type ToolRegistry,
|
|
15
15
|
} from "@databricks/appkit/beta";
|
|
16
16
|
import {
|
|
17
|
-
USER_EMAIL_HEADER,
|
|
18
|
-
USER_ID_HEADER,
|
|
19
|
-
appkit,
|
|
20
|
-
lakebaseResolver,
|
|
21
|
-
pluginRegistry,
|
|
22
|
-
toolkitEntries,
|
|
23
|
-
toolOperations,
|
|
24
17
|
ToolRegistryPlugin,
|
|
25
18
|
type AgentToolExecutionContext,
|
|
19
|
+
tryGetExecutionContext,
|
|
20
|
+
captureServicePrincipalPool,
|
|
21
|
+
require,
|
|
22
|
+
entries,
|
|
23
|
+
defineOperations,
|
|
24
|
+
toolRegistryFromOperations,
|
|
26
25
|
} from "@dbx-tools/appkit";
|
|
26
|
+
import { USER_ID_HEADER, USER_EMAIL_HEADER } from "@dbx-tools/shared-core";
|
|
27
27
|
import {
|
|
28
28
|
createLakeboxServiceOperationSchema,
|
|
29
29
|
executeLakeboxCommandOperationSchema,
|
|
@@ -109,8 +109,8 @@ export class AppKitLakeboxPlugin extends ToolRegistryPlugin<LakeboxPluginConfig>
|
|
|
109
109
|
|
|
110
110
|
override async setup(): Promise<void> {
|
|
111
111
|
this.context?.onLifecycle("setup:complete", async () => {
|
|
112
|
-
const pool =
|
|
113
|
-
|
|
112
|
+
const pool = captureServicePrincipalPool(
|
|
113
|
+
require(this.context, lakebase, "appkit-lakebox").exports().pool,
|
|
114
114
|
);
|
|
115
115
|
this.runtime.initialize(
|
|
116
116
|
createWorkspaceClient().config,
|
|
@@ -202,7 +202,7 @@ export class AppKitLakeboxPlugin extends ToolRegistryPlugin<LakeboxPluginConfig>
|
|
|
202
202
|
|
|
203
203
|
/** Returns selected AppKit toolkit entries backed by this plugin's agent tools. */
|
|
204
204
|
toolkit(options?: ToolkitOptions): Record<string, ToolkitEntry> {
|
|
205
|
-
return
|
|
205
|
+
return entries(LAKEBOX_PLUGIN_NAME, this.getAgentTools(), {
|
|
206
206
|
...options,
|
|
207
207
|
prefix: options?.prefix ?? "",
|
|
208
208
|
});
|
|
@@ -263,7 +263,7 @@ export class AppKitLakeboxPlugin extends ToolRegistryPlugin<LakeboxPluginConfig>
|
|
|
263
263
|
operations(identity?: string, origin?: string) {
|
|
264
264
|
const user = () => identity ?? this.executionIdentity();
|
|
265
265
|
const presentService = (value: LakeboxService) => omitLog(withServiceOrigin(value, origin));
|
|
266
|
-
return
|
|
266
|
+
return defineOperations({
|
|
267
267
|
get_lakebox: {
|
|
268
268
|
schema: getLakeboxOperationSchema,
|
|
269
269
|
execute: async (_input, signal) => {
|
|
@@ -313,11 +313,11 @@ export class AppKitLakeboxPlugin extends ToolRegistryPlugin<LakeboxPluginConfig>
|
|
|
313
313
|
}
|
|
314
314
|
|
|
315
315
|
private createToolRegistry(identity?: string, origin?: string): ToolRegistry {
|
|
316
|
-
return
|
|
316
|
+
return toolRegistryFromOperations(this.operations(identity, origin));
|
|
317
317
|
}
|
|
318
318
|
|
|
319
319
|
private executionIdentity(): string {
|
|
320
|
-
const context =
|
|
320
|
+
const context = tryGetExecutionContext();
|
|
321
321
|
if (!context) throw new Error("Lakebox tools require an AppKit execution context");
|
|
322
322
|
return "userId" in context ? context.userId : context.serviceUserId;
|
|
323
323
|
}
|
package/src/routes.ts
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import type { IncomingHttpHeaders, IncomingMessage, ServerResponse } from "node:http";
|
|
2
2
|
import { createServer, type Server, type Socket } from "node:net";
|
|
3
3
|
import { type Duplex, PassThrough, Readable } from "node:stream";
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
|
|
4
|
+
import type { SshSession } from "@dbx-tools/lakebox";
|
|
5
|
+
import {
|
|
6
|
+
log,
|
|
7
|
+
toError,
|
|
8
|
+
ACCESS_TOKEN_HEADER,
|
|
9
|
+
USER_EMAIL_HEADER,
|
|
10
|
+
USER_ID_HEADER,
|
|
11
|
+
} from "@dbx-tools/shared-core";
|
|
7
12
|
import type { LakeboxUser } from "@dbx-tools/shared-lakebox";
|
|
8
13
|
import type { NextFunction, Request, Response } from "express";
|
|
9
14
|
import ProxyModule from "http-proxy-3";
|
|
@@ -274,7 +279,9 @@ async function closeBridge(bridge: Bridge): Promise<void> {
|
|
|
274
279
|
}
|
|
275
280
|
|
|
276
281
|
function stripIdentityHeaders(request: IncomingMessage): void {
|
|
277
|
-
for (const name of [ACCESS_TOKEN_HEADER, "authorization", "cookie"])
|
|
282
|
+
for (const name of [ACCESS_TOKEN_HEADER, "authorization", "cookie"]) {
|
|
283
|
+
delete request.headers[name];
|
|
284
|
+
}
|
|
278
285
|
}
|
|
279
286
|
|
|
280
287
|
function sendLoadingResponse(
|
|
@@ -358,7 +365,7 @@ async function injectHtmlHead(
|
|
|
358
365
|
response.end(body);
|
|
359
366
|
} catch (error) {
|
|
360
367
|
logger.warn("Lakebox route HTML injection failed", {
|
|
361
|
-
error:
|
|
368
|
+
error: toError(error),
|
|
362
369
|
});
|
|
363
370
|
if (!response.headersSent) response.writeHead(502);
|
|
364
371
|
response.end("Lakebox route unavailable");
|
|
@@ -468,7 +475,7 @@ function bridgeSocket(
|
|
|
468
475
|
clearReadyTimeout();
|
|
469
476
|
if (!timedOut && !socket.destroyed) {
|
|
470
477
|
logger.warn("Lakebox route forwarding channel failed", {
|
|
471
|
-
error:
|
|
478
|
+
error: toError(error),
|
|
472
479
|
});
|
|
473
480
|
socket.end("HTTP/1.1 502 Bad Gateway\r\nConnection: close\r\nContent-Length: 0\r\n\r\n");
|
|
474
481
|
}
|
package/src/runtime.ts
CHANGED
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import type { IncomingHttpHeaders } from "node:http";
|
|
3
|
-
import {
|
|
4
|
-
import { SshKeyStore } from "@dbx-tools/lakebox/key-store";
|
|
3
|
+
import { onParentTerminationSignal } from "@dbx-tools/core";
|
|
5
4
|
import {
|
|
5
|
+
SshKeyStore,
|
|
6
6
|
ensureLakeboxRunning,
|
|
7
7
|
ensureLakeboxStopped,
|
|
8
8
|
lakeboxIdleTimeoutSeconds,
|
|
9
9
|
normalizeLakeboxStatus,
|
|
10
|
-
|
|
10
|
+
SshCommand,
|
|
11
|
+
SshSession,
|
|
12
|
+
} from "@dbx-tools/lakebox";
|
|
11
13
|
import {
|
|
12
14
|
isLakeboxUnavailable,
|
|
13
15
|
LakeboxApiError,
|
|
14
16
|
LakeboxClient,
|
|
15
17
|
type LakeboxAuth,
|
|
16
18
|
type LakeboxEntry,
|
|
17
|
-
} from "@dbx-tools/lakebox
|
|
18
|
-
import {
|
|
19
|
-
import { errorUtils, log } from "@dbx-tools/shared-core";
|
|
19
|
+
} from "@dbx-tools/lakebox";
|
|
20
|
+
import { log, toError } from "@dbx-tools/shared-core";
|
|
20
21
|
import {
|
|
21
22
|
LAKEBOX_BUILT_IN_SERVICES,
|
|
22
23
|
lakeboxBuiltInServiceNameSchema,
|
|
@@ -147,9 +148,7 @@ export class LakeboxRuntime {
|
|
|
147
148
|
(signal) => this.readMetrics(signal),
|
|
148
149
|
config.metricsIntervalSeconds * 1_000,
|
|
149
150
|
);
|
|
150
|
-
this.stopParentTerminationSignal =
|
|
151
|
-
this.routes.beginShutdown(),
|
|
152
|
-
);
|
|
151
|
+
this.stopParentTerminationSignal = onParentTerminationSignal(() => this.routes.beginShutdown());
|
|
153
152
|
}
|
|
154
153
|
|
|
155
154
|
/**
|
|
@@ -414,7 +413,7 @@ export class LakeboxRuntime {
|
|
|
414
413
|
);
|
|
415
414
|
} catch (error) {
|
|
416
415
|
if (!isLakeboxUnavailable(error)) {
|
|
417
|
-
logger.warn("legacy Lakebox cleanup failed", { error:
|
|
416
|
+
logger.warn("legacy Lakebox cleanup failed", { error: toError(error) });
|
|
418
417
|
}
|
|
419
418
|
}
|
|
420
419
|
if (!pool) return;
|
|
@@ -429,7 +428,7 @@ export class LakeboxRuntime {
|
|
|
429
428
|
logger.info("dropped legacy Lakebox ownership schema", { schema });
|
|
430
429
|
}
|
|
431
430
|
} catch (error) {
|
|
432
|
-
logger.warn("legacy ownership schema cleanup failed", { error:
|
|
431
|
+
logger.warn("legacy ownership schema cleanup failed", { error: toError(error) });
|
|
433
432
|
}
|
|
434
433
|
}
|
|
435
434
|
|
|
@@ -661,7 +660,7 @@ export class LakeboxRuntime {
|
|
|
661
660
|
if (this.shutdownController.signal.aborted) return;
|
|
662
661
|
logger.warn("Lakebox service restore failed", {
|
|
663
662
|
user: hash,
|
|
664
|
-
error:
|
|
663
|
+
error: toError(error),
|
|
665
664
|
});
|
|
666
665
|
}
|
|
667
666
|
}
|
|
@@ -867,7 +866,7 @@ export class LakeboxRuntime {
|
|
|
867
866
|
private wake(action: () => Promise<unknown>): void {
|
|
868
867
|
if (this.waking) return;
|
|
869
868
|
this.waking = action()
|
|
870
|
-
.catch((error) => logger.warn("Lakebox wake failed", { error:
|
|
869
|
+
.catch((error) => logger.warn("Lakebox wake failed", { error: toError(error) }))
|
|
871
870
|
.finally(() => {
|
|
872
871
|
this.waking = undefined;
|
|
873
872
|
});
|
package/src/services.ts
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
type LakeboxService,
|
|
8
8
|
type LakeboxUser,
|
|
9
9
|
} from "@dbx-tools/shared-lakebox";
|
|
10
|
-
import { lakeboxServicePath } from "@dbx-tools/shared-lakebox
|
|
10
|
+
import { lakeboxServicePath } from "@dbx-tools/shared-lakebox";
|
|
11
11
|
import { z } from "zod";
|
|
12
12
|
import { desktopEnvironment, desktopHtmlHead, desktopOpenUrl } from "./desktop.ts";
|
|
13
13
|
import { LAKEBOX_RUNTIME_ROOT, lakeboxServicePort } from "./user.ts";
|
package/src/user.ts
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* @module
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import {
|
|
13
|
+
import { fnvHashWithOptions } from "@dbx-tools/shared-core";
|
|
14
14
|
import type { LakeboxUser } from "@dbx-tools/shared-lakebox";
|
|
15
15
|
|
|
16
16
|
/** Platform account that owns the persistent volume and the SSH session. */
|
|
@@ -80,7 +80,7 @@ export function isLakeboxUserHash(value: string): boolean {
|
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
function digestText(...values: string[]): string {
|
|
83
|
-
return
|
|
83
|
+
return fnvHashWithOptions({ length: 7, alphabet: HASH_ALPHABET }, ...values);
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
function digestValue(...values: string[]): number {
|