@dbx-tools/appkit-mastra 0.1.97 → 0.1.98
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/dist/index.js +64 -11
- package/package.json +6 -6
package/dist/index.js
CHANGED
|
@@ -882,6 +882,7 @@ const ASSISTANT_WORKSPACE_SKILLS_MOUNT = "/workspace_skills";
|
|
|
882
882
|
const ASSISTANT_USER_SKILLS_MOUNT = "/workspace_user_skills";
|
|
883
883
|
/** OAuth scopes that gate Databricks workspace file mounts. */
|
|
884
884
|
const WORKSPACE_FILE_SCOPES = ["workspace", "all-apis"];
|
|
885
|
+
const log$8 = logUtils.logger("mastra/workspaces");
|
|
885
886
|
/**
|
|
886
887
|
* Create a Mastra {@link Workspace} with per-request Databricks mounts.
|
|
887
888
|
*
|
|
@@ -907,6 +908,16 @@ function createWorkspace(options = {}) {
|
|
|
907
908
|
const { id, name } = resolveWorkspaceIdentity(options);
|
|
908
909
|
const resolvers = buildMountResolvers(options);
|
|
909
910
|
const skills = options.skills ?? (resolvers.length > 0 ? buildWorkspaceSkillsResolver(resolvers) : void 0);
|
|
911
|
+
log$8.debug("workspace:create", {
|
|
912
|
+
id,
|
|
913
|
+
name,
|
|
914
|
+
resolverCount: resolvers.length,
|
|
915
|
+
assistantSkills: options.assistantSkills !== false,
|
|
916
|
+
customMountResolvers: options.mounts?.length ?? 0,
|
|
917
|
+
customSkillsResolver: Boolean(options.skills),
|
|
918
|
+
checkSkillFileMtime: options.checkSkillFileMtime ?? options.assistantSkills !== false,
|
|
919
|
+
bm25: options.bm25 !== false
|
|
920
|
+
});
|
|
910
921
|
return new Workspace({
|
|
911
922
|
id,
|
|
912
923
|
name,
|
|
@@ -943,18 +954,39 @@ function hasWorkspaceFileScope(requestContext) {
|
|
|
943
954
|
function resolveAssistantSkillsMounts(context) {
|
|
944
955
|
const mounts = {};
|
|
945
956
|
const requestContext = context.requestContext;
|
|
946
|
-
if (!shouldMountAssistantSkills(requestContext))
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
957
|
+
if (!shouldMountAssistantSkills(requestContext)) {
|
|
958
|
+
log$8.debug("assistant-skills:skipped", {
|
|
959
|
+
reason: !requestContext ? "no-request-context" : "missing-workspace-scope",
|
|
960
|
+
nodeEnv: process.env.NODE_ENV,
|
|
961
|
+
scopes: context.requestContext?.get(MASTRA_SCOPES_KEY)
|
|
962
|
+
});
|
|
963
|
+
return {
|
|
964
|
+
mounts,
|
|
965
|
+
skillPaths: []
|
|
966
|
+
};
|
|
967
|
+
}
|
|
968
|
+
const user = requestContext.get(MASTRA_USER_KEY);
|
|
969
|
+
const client = user?.executionContext.client;
|
|
970
|
+
if (!client) {
|
|
971
|
+
log$8.debug("assistant-skills:skipped", {
|
|
972
|
+
reason: "missing-obo-client",
|
|
973
|
+
userId: user?.id
|
|
974
|
+
});
|
|
975
|
+
return {
|
|
976
|
+
mounts,
|
|
977
|
+
skillPaths: []
|
|
978
|
+
};
|
|
979
|
+
}
|
|
955
980
|
mounts[ASSISTANT_WORKSPACE_SKILLS_MOUNT] = readOnlyDatabricksFilesystem(client, ASSISTANT_SHARED_SKILLS_PATH);
|
|
956
981
|
const email = resolveScopedEmail(requestContext);
|
|
957
982
|
if (email) mounts[ASSISTANT_USER_SKILLS_MOUNT] = readOnlyDatabricksFilesystem(client, userAssistantSkillsPath(email));
|
|
983
|
+
log$8.debug("assistant-skills:mounted", {
|
|
984
|
+
sharedPath: ASSISTANT_SHARED_SKILLS_PATH,
|
|
985
|
+
sharedMount: ASSISTANT_WORKSPACE_SKILLS_MOUNT,
|
|
986
|
+
userMount: email ? ASSISTANT_USER_SKILLS_MOUNT : void 0,
|
|
987
|
+
userPath: email ? userAssistantSkillsPath(email) : void 0,
|
|
988
|
+
mountKeys: Object.keys(mounts)
|
|
989
|
+
});
|
|
958
990
|
return {
|
|
959
991
|
mounts,
|
|
960
992
|
skillPaths: Object.keys(mounts)
|
|
@@ -980,6 +1012,12 @@ function buildMountResolvers(options) {
|
|
|
980
1012
|
const { assistantSkills = true, mounts } = options;
|
|
981
1013
|
if (assistantSkills) resolvers.push(resolveAssistantSkillsMounts);
|
|
982
1014
|
if (mounts?.length) resolvers.push(...mounts);
|
|
1015
|
+
log$8.debug("mounts:resolvers", {
|
|
1016
|
+
assistantSkills,
|
|
1017
|
+
builtInResolver: assistantSkills,
|
|
1018
|
+
customResolverCount: mounts?.length ?? 0,
|
|
1019
|
+
totalResolverCount: resolvers.length
|
|
1020
|
+
});
|
|
983
1021
|
return resolvers;
|
|
984
1022
|
}
|
|
985
1023
|
/**
|
|
@@ -1012,11 +1050,20 @@ function readOnlyDatabricksFilesystem(client, basePath) {
|
|
|
1012
1050
|
async function resolveWorkspaceContribution(resolvers, context) {
|
|
1013
1051
|
const mounts = {};
|
|
1014
1052
|
const skillPaths = [];
|
|
1015
|
-
for (const resolver of resolvers) {
|
|
1053
|
+
for (const [index, resolver] of resolvers.entries()) {
|
|
1016
1054
|
const contribution = await resolver(context);
|
|
1055
|
+
log$8.debug("mounts:resolver", {
|
|
1056
|
+
index,
|
|
1057
|
+
mountKeys: Object.keys(contribution.mounts),
|
|
1058
|
+
skillPaths: contribution.skillPaths ?? []
|
|
1059
|
+
});
|
|
1017
1060
|
Object.assign(mounts, contribution.mounts);
|
|
1018
1061
|
if (contribution.skillPaths?.length) skillPaths.push(...contribution.skillPaths);
|
|
1019
1062
|
}
|
|
1063
|
+
log$8.debug("mounts:merged", {
|
|
1064
|
+
mountKeys: Object.keys(mounts),
|
|
1065
|
+
skillPaths
|
|
1066
|
+
});
|
|
1020
1067
|
return {
|
|
1021
1068
|
mounts,
|
|
1022
1069
|
skillPaths
|
|
@@ -1030,7 +1077,12 @@ async function resolveWorkspaceContribution(resolvers, context) {
|
|
|
1030
1077
|
*/
|
|
1031
1078
|
async function resolveWorkspaceFilesystem(resolvers, context) {
|
|
1032
1079
|
const { mounts } = await resolveWorkspaceContribution(resolvers, context);
|
|
1033
|
-
|
|
1080
|
+
const mountKeys = Object.keys(mounts);
|
|
1081
|
+
if (mountKeys.length === 0) {
|
|
1082
|
+
log$8.debug("filesystem:empty", { hasRequestContext: Boolean(context.requestContext) });
|
|
1083
|
+
return emptyFilesystem();
|
|
1084
|
+
}
|
|
1085
|
+
log$8.debug("filesystem:composite", { mountKeys });
|
|
1034
1086
|
return new CompositeFilesystem({ mounts });
|
|
1035
1087
|
}
|
|
1036
1088
|
/**
|
|
@@ -1040,6 +1092,7 @@ async function resolveWorkspaceFilesystem(resolvers, context) {
|
|
|
1040
1092
|
function buildWorkspaceSkillsResolver(resolvers) {
|
|
1041
1093
|
return async (context) => {
|
|
1042
1094
|
const { skillPaths } = await resolveWorkspaceContribution(resolvers, context);
|
|
1095
|
+
log$8.debug("skills:resolved", { skillPaths });
|
|
1043
1096
|
return skillPaths ?? [];
|
|
1044
1097
|
};
|
|
1045
1098
|
}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dbx-tools/appkit-mastra",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.98",
|
|
4
4
|
"dependencies": {
|
|
5
5
|
"@databricks/sdk-experimental": "^0.17.0",
|
|
6
|
-
"@dbx-tools/appkit-mastra-shared": "0.1.
|
|
7
|
-
"@dbx-tools/genie": "0.1.
|
|
8
|
-
"@dbx-tools/genie-shared": "0.1.
|
|
9
|
-
"@dbx-tools/model": "0.1.
|
|
10
|
-
"@dbx-tools/shared": "0.1.
|
|
6
|
+
"@dbx-tools/appkit-mastra-shared": "0.1.98",
|
|
7
|
+
"@dbx-tools/genie": "0.1.98",
|
|
8
|
+
"@dbx-tools/genie-shared": "0.1.98",
|
|
9
|
+
"@dbx-tools/model": "0.1.98",
|
|
10
|
+
"@dbx-tools/shared": "0.1.98",
|
|
11
11
|
"@mastra/ai-sdk": "^1.6.0",
|
|
12
12
|
"@mastra/core": "^1.47.0",
|
|
13
13
|
"@mastra/express": "^1.4.2",
|