@mastra/factory 0.21.0-alpha.3 → 0.21.0-alpha.4

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 (83) hide show
  1. package/dist/auth.d.ts +7 -0
  2. package/dist/auth.d.ts.map +1 -1
  3. package/dist/auth.js +12 -1
  4. package/dist/auth.js.map +1 -1
  5. package/dist/factory.d.ts +9 -0
  6. package/dist/factory.d.ts.map +1 -1
  7. package/dist/factory.js +56 -23
  8. package/dist/factory.js.map +1 -1
  9. package/dist/integrations/github/routes.js +1 -0
  10. package/dist/integrations/github/routes.js.map +1 -1
  11. package/dist/integrations/linear/issue-reconciler.d.ts +3 -1
  12. package/dist/integrations/linear/issue-reconciler.d.ts.map +1 -1
  13. package/dist/integrations/linear/issue-reconciler.js +1 -1
  14. package/dist/integrations/linear/issue-reconciler.js.map +1 -1
  15. package/dist/integrations/platform/linear/integration.d.ts.map +1 -1
  16. package/dist/integrations/platform/linear/integration.js +10 -9
  17. package/dist/integrations/platform/linear/integration.js.map +1 -1
  18. package/dist/integrations/slack/integration.d.ts.map +1 -1
  19. package/dist/integrations/slack/integration.js +0 -1
  20. package/dist/integrations/slack/integration.js.map +1 -1
  21. package/dist/integrations/slack/slack.d.ts +0 -17
  22. package/dist/integrations/slack/slack.d.ts.map +1 -1
  23. package/dist/integrations/slack/slack.js +8 -40
  24. package/dist/integrations/slack/slack.js.map +1 -1
  25. package/dist/routes/config.d.ts +15 -36
  26. package/dist/routes/config.d.ts.map +1 -1
  27. package/dist/routes/config.js +72 -123
  28. package/dist/routes/config.js.map +1 -1
  29. package/dist/routes/knowledge.d.ts +115 -21
  30. package/dist/routes/knowledge.d.ts.map +1 -1
  31. package/dist/routes/knowledge.js +715 -30
  32. package/dist/routes/knowledge.js.map +1 -1
  33. package/dist/routes/oauth.d.ts +0 -3
  34. package/dist/routes/oauth.d.ts.map +1 -1
  35. package/dist/routes/oauth.js +2 -10
  36. package/dist/routes/oauth.js.map +1 -1
  37. package/dist/routes/provider-credentials.d.ts.map +1 -1
  38. package/dist/routes/provider-credentials.js +2 -1
  39. package/dist/routes/provider-credentials.js.map +1 -1
  40. package/dist/routes/surface.d.ts +1 -0
  41. package/dist/routes/surface.d.ts.map +1 -1
  42. package/dist/routes/surface.js +6 -3
  43. package/dist/routes/surface.js.map +1 -1
  44. package/dist/rules/binding-context.d.ts +19 -0
  45. package/dist/rules/binding-context.d.ts.map +1 -1
  46. package/dist/rules/binding-context.js +39 -1
  47. package/dist/rules/binding-context.js.map +1 -1
  48. package/dist/rules/dispatcher.d.ts +2 -13
  49. package/dist/rules/dispatcher.d.ts.map +1 -1
  50. package/dist/rules/dispatcher.js +0 -6
  51. package/dist/rules/dispatcher.js.map +1 -1
  52. package/dist/rules/processor.d.ts +35 -1
  53. package/dist/rules/processor.d.ts.map +1 -1
  54. package/dist/rules/processor.js +80 -4
  55. package/dist/rules/processor.js.map +1 -1
  56. package/dist/rules/start-coordinator.d.ts +1 -2
  57. package/dist/rules/start-coordinator.d.ts.map +1 -1
  58. package/dist/rules/start-coordinator.js +2 -6
  59. package/dist/rules/start-coordinator.js.map +1 -1
  60. package/dist/session/factory-session.d.ts +5 -43
  61. package/dist/session/factory-session.d.ts.map +1 -1
  62. package/dist/session/factory-session.js +6 -47
  63. package/dist/session/factory-session.js.map +1 -1
  64. package/dist/session/memory-settings-hydration.d.ts +17 -89
  65. package/dist/session/memory-settings-hydration.d.ts.map +1 -1
  66. package/dist/session/memory-settings-hydration.js +25 -111
  67. package/dist/session/memory-settings-hydration.js.map +1 -1
  68. package/dist/storage/domains/memory-settings/base.d.ts +5 -17
  69. package/dist/storage/domains/memory-settings/base.d.ts.map +1 -1
  70. package/dist/storage/domains/memory-settings/base.js +8 -15
  71. package/dist/storage/domains/memory-settings/base.js.map +1 -1
  72. package/dist/supervisor/session.d.ts +2 -4
  73. package/dist/supervisor/session.d.ts.map +1 -1
  74. package/dist/supervisor/session.js +3 -5
  75. package/dist/supervisor/session.js.map +1 -1
  76. package/dist/workspace.d.ts.map +1 -1
  77. package/dist/workspace.js +2 -2
  78. package/dist/workspace.js.map +1 -1
  79. package/package.json +7 -7
  80. package/dist/routes/om-seed.d.ts +0 -22
  81. package/dist/routes/om-seed.d.ts.map +0 -1
  82. package/dist/routes/om-seed.js +0 -40
  83. package/dist/routes/om-seed.js.map +0 -1
@@ -1,14 +1,14 @@
1
1
  import { WEB_OAUTH_FLOW_KINDS, getAuthProviderId, listTenantCredentialsForRequest, resolveCredentialContext, tenantOrgId } from "./provider-credentials.js";
2
+ import "../session/memory-settings-hydration.js";
2
3
  import { factoryMemorySettingsUserId } from "../storage/domains/memory-settings/base.js";
3
- import { applyStoredMemorySettings } from "../session/memory-settings-hydration.js";
4
- import { seedPersonalOmDefaults } from "./om-seed.js";
5
4
  import { Route } from "./route.js";
6
5
  import { registerApiRoute } from "@mastra/core/server";
7
6
  import { z } from "zod";
8
- import { DEFAULT_OM_MODEL_ID } from "@mastra/code-sdk/constants";
9
- import { resolveProviderOMDefault } from "@mastra/code-sdk/onboarding/packs";
10
- import { THINKING_LEVEL_VALUES, getCustomProviderId, isThinkingLevelSetting, loadSettings, saveSettings } from "@mastra/code-sdk/onboarding/settings";
7
+ import { MastraCodeGateway } from "@mastra/code-sdk/agents/mastracode-gateway";
8
+ import { resolveAutoOMModelId } from "@mastra/code-sdk/onboarding/packs";
9
+ import { MASTRA_GATEWAY_PROVIDER, THINKING_LEVEL_VALUES, getCustomProviderId, isThinkingLevelSetting, loadSettings, saveSettings } from "@mastra/code-sdk/onboarding/settings";
11
10
  import { AMAZON_BEDROCK_GATEWAY_ID } from "@mastra/code-sdk/providers/amazon-bedrock-gateway";
11
+ import { MASTRA_GATEWAY_PREFIX } from "@mastra/code-sdk/providers/model-ids";
12
12
  import { getModelReasoningOptions } from "@mastra/core/llm";
13
13
  //#region src/routes/config.ts
14
14
  /** Widen a route-local Hono context to the plain `Context` the auth helpers take. */
@@ -217,21 +217,26 @@ async function resolveModelDefaultsContext({ c, auth, modelDefaults }) {
217
217
  message: "Default model storage is unavailable — the app database is not configured or failed to start."
218
218
  }, 503) };
219
219
  }
220
- function readOMConfig(session) {
221
- const observeAttachments = (session.state.get() ?? {}).observeAttachments;
220
+ function modelProvider(modelId) {
221
+ return modelId.replace(/^mastracode\//, "").replace(/^mastra\//, "").split("/", 1)[0] ?? "";
222
+ }
223
+ function roleConfig(model, effectiveModelId, autoModelSource, availableProviders) {
222
224
  return {
223
- observerModelId: session.om.observer.modelId() ?? "",
224
- reflectorModelId: session.om.reflector.modelId() ?? "",
225
- observationThreshold: session.om.observer.threshold() ?? 3e4,
226
- reflectionThreshold: session.om.reflector.threshold() ?? 4e4,
227
- observeAttachments: observeAttachments === true || observeAttachments === false ? observeAttachments : "auto"
225
+ model,
226
+ effectiveModelId,
227
+ effectiveModelSource: model === "auto" ? autoModelSource : "explicit",
228
+ providerStatus: availableProviders.has(modelProvider(effectiveModelId)) || effectiveModelId.startsWith(MASTRA_GATEWAY_PREFIX) && availableProviders.has(MASTRA_GATEWAY_PROVIDER) ? "available" : "unavailable"
228
229
  };
229
230
  }
230
- function readStoredOMConfig(record, fallbackOmModelId) {
231
- const fallback = fallbackOmModelId ?? DEFAULT_OM_MODEL_ID;
231
+ function readStoredOMConfig(record, currentModelId, autoModelSource, availableProviders) {
232
+ const autoModelId = resolveAutoOMModelId(currentModelId);
233
+ const observerModelId = record?.observerModelId ?? autoModelId;
234
+ const reflectorModelId = record?.reflectorModelId ?? autoModelId;
232
235
  return {
233
- observerModelId: record?.observerModelId ?? fallback,
234
- reflectorModelId: record?.reflectorModelId ?? fallback,
236
+ observer: roleConfig(record?.observerModelId ?? "auto", observerModelId, autoModelSource, availableProviders),
237
+ reflector: roleConfig(record?.reflectorModelId ?? "auto", reflectorModelId, autoModelSource, availableProviders),
238
+ observerModelId,
239
+ reflectorModelId,
235
240
  observationThreshold: record?.observationThreshold ?? 3e4,
236
241
  reflectionThreshold: record?.reflectionThreshold ?? 4e4,
237
242
  observeAttachments: record?.observeAttachments ?? "auto"
@@ -279,12 +284,11 @@ async function resolveMemorySettingsContext({ c, auth, memorySettings, factoryPr
279
284
  }, 503) };
280
285
  }
281
286
  /** Persist an OM knob change to the caller's memory-settings row. */
282
- async function persistMemorySettings(context, patch, fillIfUnset) {
287
+ async function persistMemorySettings(context, patch) {
283
288
  await context.storage.patch({
284
289
  orgId: context.orgId,
285
290
  userId: context.userId,
286
- patch,
287
- fillIfUnset
291
+ patch
288
292
  });
289
293
  }
290
294
  /**
@@ -310,12 +314,34 @@ var ConfigRoutes = class extends Route {
310
314
  const { controller, authStorage, auth, deploymentProviders } = options;
311
315
  const onCredentialsChanged = options.onCredentialsChanged ?? (() => {});
312
316
  const onCustomProvidersChanged = options.onCustomProvidersChanged ?? (() => {});
317
+ const resolveOMResponseContext = async (c) => {
318
+ const tenantCredentials = await listTenantCredentialsForRequest({
319
+ c: loose(c),
320
+ auth,
321
+ credentials: options.modelCredentials
322
+ });
323
+ const access = await buildProviderAccess({
324
+ controller,
325
+ authStorage: tenantCredentials ? void 0 : authStorage,
326
+ tenantCredentials,
327
+ deploymentProviders
328
+ });
329
+ const availableProviders = new Set(Object.entries(access).flatMap(([providerId, configured]) => configured ? [providerId] : []));
330
+ if (MastraCodeGateway.getMastraGatewayApiKey()) availableProviders.add(MASTRA_GATEWAY_PROVIDER);
331
+ if (options.customProviders) {
332
+ const context = await resolveCustomProvidersContext({
333
+ c: loose(c),
334
+ auth,
335
+ customProviders: options.customProviders
336
+ });
337
+ if (!("response" in context)) for (const provider of await context.storage.list({ orgId: context.orgId })) availableProviders.add(provider.providerId);
338
+ }
339
+ return availableProviders;
340
+ };
313
341
  const factoryOmFallback = async (factoryProjectId) => {
314
- if (!factoryProjectId || !options.factoryProjects) return void 0;
315
342
  try {
316
- const defaultModelId = (await options.factoryProjects.getById({ id: factoryProjectId }))?.defaultModelId ?? void 0;
317
- const provider = defaultModelId?.split("/")[0];
318
- return provider ? resolveProviderOMDefault(provider, defaultModelId).modelId : void 0;
343
+ const defaultModelId = factoryProjectId ? await options.factoryProjects?.getById({ id: factoryProjectId }).then((project) => project?.defaultModelId ?? void 0) : controller.listModes?.().find((mode) => mode.defaultModelId)?.defaultModelId;
344
+ return defaultModelId ? resolveAutoOMModelId(defaultModelId) : void 0;
319
345
  } catch {
320
346
  return;
321
347
  }
@@ -389,11 +415,6 @@ var ConfigRoutes = class extends Route {
389
415
  key
390
416
  });
391
417
  onCredentialsChanged(tenant);
392
- await seedPersonalOmDefaults({
393
- memorySettings: options.memorySettings,
394
- tenant,
395
- provider
396
- });
397
418
  const records = await ctx.storage.listCredentials(ctx.orgId, ctx.userId);
398
419
  const providers = await listProviders({
399
420
  controller,
@@ -741,59 +762,6 @@ var ConfigRoutes = class extends Route {
741
762
  }
742
763
  }
743
764
  }),
744
- registerApiRoute("/web/config/om/provider-defaults", {
745
- method: "POST",
746
- requiresAuth: false,
747
- handler: async (c) => {
748
- let body;
749
- try {
750
- body = await c.req.json();
751
- } catch {
752
- return c.json({ error: "Invalid JSON body" }, 400);
753
- }
754
- const providerId = typeof body.providerId === "string" ? body.providerId.trim() : "";
755
- const factoryModelId = typeof body.factoryModelId === "string" ? body.factoryModelId.trim() : "";
756
- const factoryProjectId = typeof body.factoryId === "string" && body.factoryId ? body.factoryId : void 0;
757
- if (!providerId) return c.json({ error: "Missing required field: providerId" }, 400);
758
- const context = await resolveMemorySettingsContext({
759
- c: loose(c),
760
- auth,
761
- memorySettings: options.memorySettings,
762
- factoryProjectId,
763
- factoryProjects: options.factoryProjects
764
- });
765
- if ("response" in context) return context.response;
766
- try {
767
- const tenantCredentials = await listTenantCredentialsForRequest({
768
- c: loose(c),
769
- auth,
770
- credentials: options.modelCredentials
771
- });
772
- if (!(await buildProviderAccess({
773
- controller,
774
- authStorage: tenantCredentials ? void 0 : authStorage,
775
- tenantCredentials,
776
- deploymentProviders
777
- }))[providerId]) return c.json({ error: `Provider "${providerId}" is not configured` }, 400);
778
- const modelId = resolveProviderOMDefault(providerId, factoryModelId).modelId;
779
- const record = await context.storage.patch({
780
- orgId: context.orgId,
781
- userId: context.userId,
782
- patch: {},
783
- fillIfUnset: {
784
- observerModelId: modelId,
785
- reflectorModelId: modelId
786
- }
787
- });
788
- return c.json({
789
- ok: true,
790
- config: readStoredOMConfig(record)
791
- });
792
- } catch (error) {
793
- return c.json({ error: error instanceof Error ? error.message : String(error) }, 500);
794
- }
795
- }
796
- }),
797
765
  registerApiRoute("/web/config/om", {
798
766
  method: "GET",
799
767
  requiresAuth: false,
@@ -815,11 +783,9 @@ var ConfigRoutes = class extends Route {
815
783
  userId: context.userId
816
784
  });
817
785
  const fallback = await factoryOmFallback(factoryProjectId);
818
- if (!resourceId) return c.json({ config: readStoredOMConfig(record, fallback) });
819
- const session = await controller.getSessionByResource?.(resourceId, scope);
820
- if (!session) return c.json({ config: readStoredOMConfig(record, fallback) });
821
- await applyStoredMemorySettings(session, record, fallback);
822
- return c.json({ config: readOMConfig(session) });
786
+ const availableProviders = await resolveOMResponseContext(loose(c));
787
+ const sessionModelId = (resourceId ? await controller.getSessionByResource?.(resourceId, scope) : void 0)?.model.get();
788
+ return c.json({ config: readStoredOMConfig(record, sessionModelId || fallback, sessionModelId ? "live-session" : "configured-default", availableProviders) });
823
789
  } catch (error) {
824
790
  return c.json({ error: error instanceof Error ? error.message : String(error) }, 500);
825
791
  }
@@ -840,8 +806,9 @@ var ConfigRoutes = class extends Route {
840
806
  const resourceId = typeof body.resourceId === "string" ? body.resourceId : "";
841
807
  const scope = typeof body.scope === "string" && body.scope ? body.scope : void 0;
842
808
  const factoryProjectId = typeof body.factoryId === "string" && body.factoryId ? body.factoryId : void 0;
843
- const modelId = typeof body.modelId === "string" ? body.modelId.trim() : "";
844
- if (!modelId) return c.json({ error: "Missing required field: modelId" }, 400);
809
+ const model = typeof body.modelId === "string" ? body.modelId.trim() : "";
810
+ if (!model) return c.json({ error: "Missing required field: modelId" }, 400);
811
+ const wantsAuto = model === "auto";
845
812
  const context = await resolveMemorySettingsContext({
846
813
  c: loose(c),
847
814
  auth,
@@ -850,16 +817,15 @@ var ConfigRoutes = class extends Route {
850
817
  factoryProjects: options.factoryProjects
851
818
  });
852
819
  if ("response" in context) return context.response;
820
+ const availableProviders = await resolveOMResponseContext(loose(c));
853
821
  try {
854
- const session = resourceId ? await controller.getSessionByResource?.(resourceId, scope) : void 0;
855
- const otherRoleCurrentModelId = (session ? role === "observer" ? session.om.reflector : session.om.observer : void 0)?.modelId() ?? null;
856
- await session?.om[role].switchModel({ modelId });
857
- const otherKey = role === "observer" ? "reflectorModelId" : "observerModelId";
858
- await persistMemorySettings(context, { [role === "observer" ? "observerModelId" : "reflectorModelId"]: modelId }, otherRoleCurrentModelId ? { [otherKey]: otherRoleCurrentModelId } : void 0);
859
- const config = session ? readOMConfig(session) : readStoredOMConfig(await context.storage.get({
822
+ await persistMemorySettings(context, { [role === "observer" ? "observerModelId" : "reflectorModelId"]: wantsAuto ? null : model });
823
+ const record = await context.storage.get({
860
824
  orgId: context.orgId,
861
825
  userId: context.userId
862
- }), await factoryOmFallback(factoryProjectId));
826
+ });
827
+ const sessionModelId = (resourceId ? await controller.getSessionByResource?.(resourceId, scope) : void 0)?.model.get();
828
+ const config = readStoredOMConfig(record, sessionModelId || await factoryOmFallback(factoryProjectId), sessionModelId ? "live-session" : "configured-default", availableProviders);
863
829
  return c.json({
864
830
  ok: true,
865
831
  config
@@ -893,30 +859,18 @@ var ConfigRoutes = class extends Route {
893
859
  factoryProjects: options.factoryProjects
894
860
  });
895
861
  if ("response" in context) return context.response;
862
+ const availableProviders = await resolveOMResponseContext(loose(c));
896
863
  try {
897
- const session = resourceId ? await controller.getSessionByResource?.(resourceId, scope) : void 0;
898
- if (observation !== void 0 && session) {
899
- await session.state.set({ observationThreshold: observation });
900
- await session.thread.setSetting({
901
- key: "observationThreshold",
902
- value: observation
903
- });
904
- }
905
- if (reflection !== void 0 && session) {
906
- await session.state.set({ reflectionThreshold: reflection });
907
- await session.thread.setSetting({
908
- key: "reflectionThreshold",
909
- value: reflection
910
- });
911
- }
912
864
  await persistMemorySettings(context, {
913
865
  ...observation !== void 0 ? { observationThreshold: observation } : {},
914
866
  ...reflection !== void 0 ? { reflectionThreshold: reflection } : {}
915
867
  });
916
- const config = session ? readOMConfig(session) : readStoredOMConfig(await context.storage.get({
868
+ const record = await context.storage.get({
917
869
  orgId: context.orgId,
918
870
  userId: context.userId
919
- }), await factoryOmFallback(factoryProjectId));
871
+ });
872
+ const sessionModelId = (resourceId ? await controller.getSessionByResource?.(resourceId, scope) : void 0)?.model.get();
873
+ const config = readStoredOMConfig(record, sessionModelId || await factoryOmFallback(factoryProjectId), sessionModelId ? "live-session" : "configured-default", availableProviders);
920
874
  return c.json({
921
875
  ok: true,
922
876
  config
@@ -950,20 +904,15 @@ var ConfigRoutes = class extends Route {
950
904
  factoryProjects: options.factoryProjects
951
905
  });
952
906
  if ("response" in context) return context.response;
907
+ const availableProviders = await resolveOMResponseContext(loose(c));
953
908
  try {
954
- const session = resourceId ? await controller.getSessionByResource?.(resourceId, scope) : void 0;
955
- if (session) {
956
- await session.state.set({ observeAttachments: value });
957
- await session.thread.setSetting({
958
- key: "observeAttachments",
959
- value
960
- });
961
- }
962
909
  await persistMemorySettings(context, { observeAttachments: value });
963
- const config = session ? readOMConfig(session) : readStoredOMConfig(await context.storage.get({
910
+ const record = await context.storage.get({
964
911
  orgId: context.orgId,
965
912
  userId: context.userId
966
- }), await factoryOmFallback(factoryProjectId));
913
+ });
914
+ const sessionModelId = (resourceId ? await controller.getSessionByResource?.(resourceId, scope) : void 0)?.model.get();
915
+ const config = readStoredOMConfig(record, sessionModelId || await factoryOmFallback(factoryProjectId), sessionModelId ? "live-session" : "configured-default", availableProviders);
967
916
  return c.json({
968
917
  ok: true,
969
918
  config
@@ -977,6 +926,6 @@ var ConfigRoutes = class extends Route {
977
926
  }
978
927
  };
979
928
  //#endregion
980
- export { ConfigRoutes, DEPLOYMENT_MODEL_PROVIDERS, buildProviderAccess, isDeploymentModelProvider, listProviders, readOMConfig, resolveDeploymentModelProviders };
929
+ export { ConfigRoutes, DEPLOYMENT_MODEL_PROVIDERS, buildProviderAccess, isDeploymentModelProvider, listProviders, resolveDeploymentModelProviders };
981
930
 
982
931
  //# sourceMappingURL=config.js.map