@dbx-tools/appkit-mastra 0.1.97 → 0.1.99
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 +73 -14
- package/package.json +6 -6
package/dist/index.js
CHANGED
|
@@ -881,7 +881,12 @@ const ASSISTANT_WORKSPACE_SKILLS_MOUNT = "/workspace_skills";
|
|
|
881
881
|
/** Composite mount for the caller's `/.assistant/skills` tree. */
|
|
882
882
|
const ASSISTANT_USER_SKILLS_MOUNT = "/workspace_user_skills";
|
|
883
883
|
/** OAuth scopes that gate Databricks workspace file mounts. */
|
|
884
|
-
const WORKSPACE_FILE_SCOPES = [
|
|
884
|
+
const WORKSPACE_FILE_SCOPES = [
|
|
885
|
+
"workspace",
|
|
886
|
+
"workspace.workspace",
|
|
887
|
+
"all-apis"
|
|
888
|
+
];
|
|
889
|
+
const log$8 = logUtils.logger("mastra/workspaces");
|
|
885
890
|
/**
|
|
886
891
|
* Create a Mastra {@link Workspace} with per-request Databricks mounts.
|
|
887
892
|
*
|
|
@@ -907,15 +912,27 @@ function createWorkspace(options = {}) {
|
|
|
907
912
|
const { id, name } = resolveWorkspaceIdentity(options);
|
|
908
913
|
const resolvers = buildMountResolvers(options);
|
|
909
914
|
const skills = options.skills ?? (resolvers.length > 0 ? buildWorkspaceSkillsResolver(resolvers) : void 0);
|
|
915
|
+
const checkSkillFileMtime = options.checkSkillFileMtime ?? options.assistantSkills !== false;
|
|
916
|
+
const bm25 = options.bm25 !== false;
|
|
917
|
+
log$8.debug("workspace:create", {
|
|
918
|
+
id,
|
|
919
|
+
name,
|
|
920
|
+
resolverCount: resolvers.length,
|
|
921
|
+
assistantSkills: options.assistantSkills !== false,
|
|
922
|
+
customMountResolvers: options.mounts?.length ?? 0,
|
|
923
|
+
customSkillsResolver: Boolean(options.skills),
|
|
924
|
+
checkSkillFileMtime,
|
|
925
|
+
bm25
|
|
926
|
+
});
|
|
910
927
|
return new Workspace({
|
|
911
928
|
id,
|
|
912
929
|
name,
|
|
913
930
|
filesystem: (context) => resolveWorkspaceFilesystem(resolvers, context),
|
|
914
931
|
...skills ? {
|
|
915
932
|
skills,
|
|
916
|
-
checkSkillFileMtime
|
|
933
|
+
checkSkillFileMtime
|
|
917
934
|
} : {},
|
|
918
|
-
|
|
935
|
+
bm25
|
|
919
936
|
});
|
|
920
937
|
}
|
|
921
938
|
/**
|
|
@@ -943,18 +960,39 @@ function hasWorkspaceFileScope(requestContext) {
|
|
|
943
960
|
function resolveAssistantSkillsMounts(context) {
|
|
944
961
|
const mounts = {};
|
|
945
962
|
const requestContext = context.requestContext;
|
|
946
|
-
if (!shouldMountAssistantSkills(requestContext))
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
963
|
+
if (!shouldMountAssistantSkills(requestContext)) {
|
|
964
|
+
log$8.debug("assistant-skills:skipped", {
|
|
965
|
+
reason: !requestContext ? "no-request-context" : "missing-workspace-scope",
|
|
966
|
+
nodeEnv: process.env.NODE_ENV,
|
|
967
|
+
scopes: context.requestContext?.get(MASTRA_SCOPES_KEY)
|
|
968
|
+
});
|
|
969
|
+
return {
|
|
970
|
+
mounts,
|
|
971
|
+
skillPaths: []
|
|
972
|
+
};
|
|
973
|
+
}
|
|
974
|
+
const user = requestContext.get(MASTRA_USER_KEY);
|
|
975
|
+
const client = user?.executionContext.client;
|
|
976
|
+
if (!client) {
|
|
977
|
+
log$8.debug("assistant-skills:skipped", {
|
|
978
|
+
reason: "missing-obo-client",
|
|
979
|
+
userId: user?.id
|
|
980
|
+
});
|
|
981
|
+
return {
|
|
982
|
+
mounts,
|
|
983
|
+
skillPaths: []
|
|
984
|
+
};
|
|
985
|
+
}
|
|
955
986
|
mounts[ASSISTANT_WORKSPACE_SKILLS_MOUNT] = readOnlyDatabricksFilesystem(client, ASSISTANT_SHARED_SKILLS_PATH);
|
|
956
987
|
const email = resolveScopedEmail(requestContext);
|
|
957
988
|
if (email) mounts[ASSISTANT_USER_SKILLS_MOUNT] = readOnlyDatabricksFilesystem(client, userAssistantSkillsPath(email));
|
|
989
|
+
log$8.debug("assistant-skills:mounted", {
|
|
990
|
+
sharedPath: ASSISTANT_SHARED_SKILLS_PATH,
|
|
991
|
+
sharedMount: ASSISTANT_WORKSPACE_SKILLS_MOUNT,
|
|
992
|
+
userMount: email ? ASSISTANT_USER_SKILLS_MOUNT : void 0,
|
|
993
|
+
userPath: email ? userAssistantSkillsPath(email) : void 0,
|
|
994
|
+
mountKeys: Object.keys(mounts)
|
|
995
|
+
});
|
|
958
996
|
return {
|
|
959
997
|
mounts,
|
|
960
998
|
skillPaths: Object.keys(mounts)
|
|
@@ -980,6 +1018,12 @@ function buildMountResolvers(options) {
|
|
|
980
1018
|
const { assistantSkills = true, mounts } = options;
|
|
981
1019
|
if (assistantSkills) resolvers.push(resolveAssistantSkillsMounts);
|
|
982
1020
|
if (mounts?.length) resolvers.push(...mounts);
|
|
1021
|
+
log$8.debug("mounts:resolvers", {
|
|
1022
|
+
assistantSkills,
|
|
1023
|
+
builtInResolver: assistantSkills,
|
|
1024
|
+
customResolverCount: mounts?.length ?? 0,
|
|
1025
|
+
totalResolverCount: resolvers.length
|
|
1026
|
+
});
|
|
983
1027
|
return resolvers;
|
|
984
1028
|
}
|
|
985
1029
|
/**
|
|
@@ -1012,11 +1056,20 @@ function readOnlyDatabricksFilesystem(client, basePath) {
|
|
|
1012
1056
|
async function resolveWorkspaceContribution(resolvers, context) {
|
|
1013
1057
|
const mounts = {};
|
|
1014
1058
|
const skillPaths = [];
|
|
1015
|
-
for (const resolver of resolvers) {
|
|
1059
|
+
for (const [index, resolver] of resolvers.entries()) {
|
|
1016
1060
|
const contribution = await resolver(context);
|
|
1061
|
+
log$8.debug("mounts:resolver", {
|
|
1062
|
+
index,
|
|
1063
|
+
mountKeys: Object.keys(contribution.mounts),
|
|
1064
|
+
skillPaths: contribution.skillPaths ?? []
|
|
1065
|
+
});
|
|
1017
1066
|
Object.assign(mounts, contribution.mounts);
|
|
1018
1067
|
if (contribution.skillPaths?.length) skillPaths.push(...contribution.skillPaths);
|
|
1019
1068
|
}
|
|
1069
|
+
log$8.debug("mounts:merged", {
|
|
1070
|
+
mountKeys: Object.keys(mounts),
|
|
1071
|
+
skillPaths
|
|
1072
|
+
});
|
|
1020
1073
|
return {
|
|
1021
1074
|
mounts,
|
|
1022
1075
|
skillPaths
|
|
@@ -1030,7 +1083,12 @@ async function resolveWorkspaceContribution(resolvers, context) {
|
|
|
1030
1083
|
*/
|
|
1031
1084
|
async function resolveWorkspaceFilesystem(resolvers, context) {
|
|
1032
1085
|
const { mounts } = await resolveWorkspaceContribution(resolvers, context);
|
|
1033
|
-
|
|
1086
|
+
const mountKeys = Object.keys(mounts);
|
|
1087
|
+
if (mountKeys.length === 0) {
|
|
1088
|
+
log$8.debug("filesystem:empty", { hasRequestContext: Boolean(context.requestContext) });
|
|
1089
|
+
return emptyFilesystem();
|
|
1090
|
+
}
|
|
1091
|
+
log$8.debug("filesystem:composite", { mountKeys });
|
|
1034
1092
|
return new CompositeFilesystem({ mounts });
|
|
1035
1093
|
}
|
|
1036
1094
|
/**
|
|
@@ -1040,6 +1098,7 @@ async function resolveWorkspaceFilesystem(resolvers, context) {
|
|
|
1040
1098
|
function buildWorkspaceSkillsResolver(resolvers) {
|
|
1041
1099
|
return async (context) => {
|
|
1042
1100
|
const { skillPaths } = await resolveWorkspaceContribution(resolvers, context);
|
|
1101
|
+
log$8.debug("skills:resolved", { skillPaths });
|
|
1043
1102
|
return skillPaths ?? [];
|
|
1044
1103
|
};
|
|
1045
1104
|
}
|
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.99",
|
|
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.99",
|
|
7
|
+
"@dbx-tools/genie": "0.1.99",
|
|
8
|
+
"@dbx-tools/genie-shared": "0.1.99",
|
|
9
|
+
"@dbx-tools/model": "0.1.99",
|
|
10
|
+
"@dbx-tools/shared": "0.1.99",
|
|
11
11
|
"@mastra/ai-sdk": "^1.6.0",
|
|
12
12
|
"@mastra/core": "^1.47.0",
|
|
13
13
|
"@mastra/express": "^1.4.2",
|