@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.
Files changed (2) hide show
  1. package/dist/index.js +73 -14
  2. 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 = ["workspace", "all-apis"];
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: options.checkSkillFileMtime ?? options.assistantSkills !== false
933
+ checkSkillFileMtime
917
934
  } : {},
918
- ...options.bm25 !== false ? { bm25: true } : {}
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)) return {
947
- mounts,
948
- skillPaths: []
949
- };
950
- const client = requestContext.get(MASTRA_USER_KEY)?.executionContext.client;
951
- if (!client) return {
952
- mounts,
953
- skillPaths: []
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
- if (Object.keys(mounts).length === 0) return emptyFilesystem();
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.97",
3
+ "version": "0.1.99",
4
4
  "dependencies": {
5
5
  "@databricks/sdk-experimental": "^0.17.0",
6
- "@dbx-tools/appkit-mastra-shared": "0.1.97",
7
- "@dbx-tools/genie": "0.1.97",
8
- "@dbx-tools/genie-shared": "0.1.97",
9
- "@dbx-tools/model": "0.1.97",
10
- "@dbx-tools/shared": "0.1.97",
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",