@mastra/core 1.15.0-alpha.2 → 1.15.0-alpha.3

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 (120) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/agent/index.cjs +8 -8
  3. package/dist/agent/index.js +1 -1
  4. package/dist/{chunk-MHTWFVXK.js → chunk-3QVIGF2C.js} +3 -3
  5. package/dist/{chunk-MHTWFVXK.js.map → chunk-3QVIGF2C.js.map} +1 -1
  6. package/dist/{chunk-ORHPD25N.cjs → chunk-4HBFSEH5.cjs} +7 -7
  7. package/dist/{chunk-ORHPD25N.cjs.map → chunk-4HBFSEH5.cjs.map} +1 -1
  8. package/dist/{chunk-Q64Z437G.cjs → chunk-5TR3QHRW.cjs} +15 -15
  9. package/dist/{chunk-Q64Z437G.cjs.map → chunk-5TR3QHRW.cjs.map} +1 -1
  10. package/dist/{chunk-OX63O3QG.cjs → chunk-6H4DIT5W.cjs} +5 -5
  11. package/dist/{chunk-OX63O3QG.cjs.map → chunk-6H4DIT5W.cjs.map} +1 -1
  12. package/dist/{chunk-4YKZNIK6.js → chunk-6OM5P63S.js} +4 -4
  13. package/dist/{chunk-4YKZNIK6.js.map → chunk-6OM5P63S.js.map} +1 -1
  14. package/dist/{chunk-YV5UMIRV.cjs → chunk-7FCDSKDP.cjs} +3 -3
  15. package/dist/{chunk-YV5UMIRV.cjs.map → chunk-7FCDSKDP.cjs.map} +1 -1
  16. package/dist/{chunk-7BM5LQHF.cjs → chunk-A5IWSJLJ.cjs} +75 -75
  17. package/dist/{chunk-7BM5LQHF.cjs.map → chunk-A5IWSJLJ.cjs.map} +1 -1
  18. package/dist/{chunk-KCZ3R5SF.js → chunk-AVLD4VHQ.js} +3 -3
  19. package/dist/{chunk-KCZ3R5SF.js.map → chunk-AVLD4VHQ.js.map} +1 -1
  20. package/dist/{chunk-ECAVJWAH.js → chunk-B5M72XCG.js} +4 -4
  21. package/dist/{chunk-ECAVJWAH.js.map → chunk-B5M72XCG.js.map} +1 -1
  22. package/dist/{chunk-X4RVX77L.cjs → chunk-BAUAKBM6.cjs} +185 -185
  23. package/dist/{chunk-X4RVX77L.cjs.map → chunk-BAUAKBM6.cjs.map} +1 -1
  24. package/dist/{chunk-ASVFCNLS.js → chunk-CJHZXD3U.js} +6 -6
  25. package/dist/{chunk-ASVFCNLS.js.map → chunk-CJHZXD3U.js.map} +1 -1
  26. package/dist/{chunk-NWC75FLU.cjs → chunk-CTFO2ENI.cjs} +53 -20
  27. package/dist/chunk-CTFO2ENI.cjs.map +1 -0
  28. package/dist/{chunk-EFYYAFWD.cjs → chunk-DYFEJA5J.cjs} +17 -17
  29. package/dist/{chunk-EFYYAFWD.cjs.map → chunk-DYFEJA5J.cjs.map} +1 -1
  30. package/dist/{chunk-SHQKQEG2.js → chunk-JEF7ZU43.js} +50 -18
  31. package/dist/chunk-JEF7ZU43.js.map +1 -0
  32. package/dist/{chunk-M5BDH7B4.cjs → chunk-K5NREJ7B.cjs} +6 -6
  33. package/dist/{chunk-M5BDH7B4.cjs.map → chunk-K5NREJ7B.cjs.map} +1 -1
  34. package/dist/{chunk-FNOAF2SZ.js → chunk-K6EF74Q4.js} +3 -3
  35. package/dist/{chunk-FNOAF2SZ.js.map → chunk-K6EF74Q4.js.map} +1 -1
  36. package/dist/{chunk-CTJLKJMO.js → chunk-M4AJQGAW.js} +5 -5
  37. package/dist/{chunk-CTJLKJMO.js.map → chunk-M4AJQGAW.js.map} +1 -1
  38. package/dist/{chunk-Z76WT6W3.js → chunk-MFB7BS3L.js} +4 -4
  39. package/dist/{chunk-Z76WT6W3.js.map → chunk-MFB7BS3L.js.map} +1 -1
  40. package/dist/{chunk-EAWVRIHS.js → chunk-O5KUYSYB.js} +3 -3
  41. package/dist/{chunk-EAWVRIHS.js.map → chunk-O5KUYSYB.js.map} +1 -1
  42. package/dist/{chunk-NWPRZZ2K.cjs → chunk-OFY7LQSG.cjs} +48 -48
  43. package/dist/{chunk-NWPRZZ2K.cjs.map → chunk-OFY7LQSG.cjs.map} +1 -1
  44. package/dist/{chunk-JIBMK2QP.js → chunk-SVHGG25E.js} +8 -8
  45. package/dist/{chunk-JIBMK2QP.js.map → chunk-SVHGG25E.js.map} +1 -1
  46. package/dist/{chunk-TJB7IK7N.cjs → chunk-TRLOXCPX.cjs} +5 -5
  47. package/dist/{chunk-TJB7IK7N.cjs.map → chunk-TRLOXCPX.cjs.map} +1 -1
  48. package/dist/{chunk-HIZDAENF.js → chunk-VPN66PYF.js} +3 -3
  49. package/dist/{chunk-HIZDAENF.js.map → chunk-VPN66PYF.js.map} +1 -1
  50. package/dist/{chunk-RFZB2PQE.cjs → chunk-XOBYVWML.cjs} +9 -9
  51. package/dist/{chunk-RFZB2PQE.cjs.map → chunk-XOBYVWML.cjs.map} +1 -1
  52. package/dist/datasets/index.cjs +11 -11
  53. package/dist/datasets/index.js +1 -1
  54. package/dist/docs/SKILL.md +1 -1
  55. package/dist/docs/assets/SOURCE_MAP.json +119 -119
  56. package/dist/docs/references/docs-workspace-overview.md +15 -0
  57. package/dist/docs/references/reference-workspace-filesystem.md +2 -0
  58. package/dist/docs/references/reference-workspace-local-filesystem.md +2 -0
  59. package/dist/evals/index.cjs +5 -5
  60. package/dist/evals/index.js +2 -2
  61. package/dist/evals/scoreTraces/index.cjs +3 -3
  62. package/dist/evals/scoreTraces/index.js +1 -1
  63. package/dist/harness/index.cjs +11 -11
  64. package/dist/harness/index.js +6 -6
  65. package/dist/index.cjs +2 -2
  66. package/dist/index.js +1 -1
  67. package/dist/llm/index.cjs +16 -16
  68. package/dist/llm/index.js +5 -5
  69. package/dist/loop/index.cjs +14 -14
  70. package/dist/loop/index.js +1 -1
  71. package/dist/mastra/index.cjs +2 -2
  72. package/dist/mastra/index.js +1 -1
  73. package/dist/memory/index.cjs +14 -14
  74. package/dist/memory/index.js +1 -1
  75. package/dist/models-dev-KSUL2WSE.js +3 -0
  76. package/dist/{models-dev-E6FRPGHV.js.map → models-dev-KSUL2WSE.js.map} +1 -1
  77. package/dist/models-dev-N3BB7QC6.cjs +12 -0
  78. package/dist/{models-dev-WIROJ2IM.cjs.map → models-dev-N3BB7QC6.cjs.map} +1 -1
  79. package/dist/netlify-5FZZLF2V.cjs +12 -0
  80. package/dist/{netlify-7IRBQ2BY.cjs.map → netlify-5FZZLF2V.cjs.map} +1 -1
  81. package/dist/netlify-YHUBX5AX.js +3 -0
  82. package/dist/{netlify-OAGRP6WY.js.map → netlify-YHUBX5AX.js.map} +1 -1
  83. package/dist/processor-provider/index.cjs +10 -10
  84. package/dist/processor-provider/index.js +1 -1
  85. package/dist/processors/index.cjs +42 -42
  86. package/dist/processors/index.js +1 -1
  87. package/dist/provider-registry-52PKE45P.js +3 -0
  88. package/dist/{provider-registry-2MHU2NP6.js.map → provider-registry-52PKE45P.js.map} +1 -1
  89. package/dist/provider-registry-YH7WKSYN.cjs +40 -0
  90. package/dist/{provider-registry-FINEGQHE.cjs.map → provider-registry-YH7WKSYN.cjs.map} +1 -1
  91. package/dist/relevance/index.cjs +3 -3
  92. package/dist/relevance/index.js +1 -1
  93. package/dist/stream/index.cjs +8 -8
  94. package/dist/stream/index.js +1 -1
  95. package/dist/tool-loop-agent/index.cjs +4 -4
  96. package/dist/tool-loop-agent/index.js +1 -1
  97. package/dist/workflows/evented/index.cjs +10 -10
  98. package/dist/workflows/evented/index.js +1 -1
  99. package/dist/workflows/index.cjs +24 -24
  100. package/dist/workflows/index.js +1 -1
  101. package/dist/workspace/errors.d.ts +5 -0
  102. package/dist/workspace/errors.d.ts.map +1 -1
  103. package/dist/workspace/filesystem/filesystem.d.ts +6 -0
  104. package/dist/workspace/filesystem/filesystem.d.ts.map +1 -1
  105. package/dist/workspace/filesystem/local-filesystem.d.ts.map +1 -1
  106. package/dist/workspace/index.cjs +71 -67
  107. package/dist/workspace/index.js +1 -1
  108. package/dist/workspace/tools/ast-edit.d.ts.map +1 -1
  109. package/dist/workspace/tools/edit-file.d.ts.map +1 -1
  110. package/dist/workspace/tools/tools.d.ts.map +1 -1
  111. package/dist/workspace/tools/write-file.d.ts.map +1 -1
  112. package/package.json +5 -5
  113. package/dist/chunk-NWC75FLU.cjs.map +0 -1
  114. package/dist/chunk-SHQKQEG2.js.map +0 -1
  115. package/dist/models-dev-E6FRPGHV.js +0 -3
  116. package/dist/models-dev-WIROJ2IM.cjs +0 -12
  117. package/dist/netlify-7IRBQ2BY.cjs +0 -12
  118. package/dist/netlify-OAGRP6WY.js +0 -3
  119. package/dist/provider-registry-2MHU2NP6.js +0 -3
  120. package/dist/provider-registry-FINEGQHE.cjs +0 -40
@@ -128,6 +128,18 @@ var FileReadRequiredError = class extends FilesystemError {
128
128
  this.name = "FileReadRequiredError";
129
129
  }
130
130
  };
131
+ var StaleFileError = class extends FilesystemError {
132
+ constructor(path7, expectedMtime, actualMtime) {
133
+ super(
134
+ `File was modified externally: ${path7} (expected mtime ${expectedMtime.toISOString()}, actual ${actualMtime.toISOString()})`,
135
+ "ESTALE",
136
+ path7
137
+ );
138
+ this.expectedMtime = expectedMtime;
139
+ this.actualMtime = actualMtime;
140
+ this.name = "StaleFileError";
141
+ }
142
+ };
131
143
  var FilesystemNotReadyError = class extends FilesystemError {
132
144
  constructor(id) {
133
145
  super(`Filesystem "${id}" is not ready. Call init() first or use ensureReady().`, "ENOTREADY", id);
@@ -992,6 +1004,17 @@ var LocalFilesystem = class extends MastraFilesystem {
992
1004
  const dir = nodePath.dirname(absolutePath);
993
1005
  await fs2.mkdir(dir, { recursive: true });
994
1006
  }
1007
+ if (options?.expectedMtime) {
1008
+ try {
1009
+ const currentStat = await fs2.stat(absolutePath);
1010
+ if (currentStat.mtime.getTime() !== options.expectedMtime.getTime()) {
1011
+ throw new StaleFileError(inputPath, options.expectedMtime, currentStat.mtime);
1012
+ }
1013
+ } catch (error) {
1014
+ if (error instanceof StaleFileError) throw error;
1015
+ if (!isEnoentError(error)) throw error;
1016
+ }
1017
+ }
995
1018
  const writeFlag = options?.overwrite === false ? "wx" : "w";
996
1019
  try {
997
1020
  await fs2.writeFile(absolutePath, this.toBuffer(content), { flag: writeFlag });
@@ -6865,7 +6888,10 @@ Pattern replace (for everything else):
6865
6888
  }
6866
6889
  const wasModified = modifiedContent !== content;
6867
6890
  if (wasModified) {
6868
- await filesystem.writeFile(path7, modifiedContent, { overwrite: true });
6891
+ await filesystem.writeFile(path7, modifiedContent, {
6892
+ overwrite: true,
6893
+ expectedMtime: context?.__expectedMtime
6894
+ });
6869
6895
  }
6870
6896
  if (!wasModified) {
6871
6897
  return `No changes made to ${path7} (${changes.join("; ")})`;
@@ -6924,7 +6950,10 @@ Usage:
6924
6950
  return `Cannot edit binary files. Use the write file tool instead.`;
6925
6951
  }
6926
6952
  const result = replaceString(content, old_string, new_string, replace_all);
6927
- await filesystem.writeFile(path7, result.content, { overwrite: true });
6953
+ await filesystem.writeFile(path7, result.content, {
6954
+ overwrite: true,
6955
+ expectedMtime: context?.__expectedMtime
6956
+ });
6928
6957
  let output = `Replaced ${result.replacements} occurrence${result.replacements !== 1 ? "s" : ""} in ${path7}`;
6929
6958
  output += await getEditDiagnosticsText(workspace, path7, result.content);
6930
6959
  return output;
@@ -7806,7 +7835,10 @@ var writeFileTool = createTool({
7806
7835
  if (filesystem.readOnly) {
7807
7836
  throw new WorkspaceReadOnlyError("write_file");
7808
7837
  }
7809
- await filesystem.writeFile(path7, content, { overwrite });
7838
+ await filesystem.writeFile(path7, content, {
7839
+ overwrite,
7840
+ expectedMtime: context?.__expectedMtime
7841
+ });
7810
7842
  const size = Buffer.byteLength(content, "utf-8");
7811
7843
  let output = `Wrote ${size} bytes to ${path7}`;
7812
7844
  output += await getEditDiagnosticsText(workspace, path7, content);
@@ -7853,12 +7885,18 @@ function wrapWithReadTracker(tool, workspace, readTracker, config, mode) {
7853
7885
  return {
7854
7886
  ...tool,
7855
7887
  execute: async (input, context = {}) => {
7856
- if (mode === "write" && config.requireReadBeforeWrite) {
7888
+ if (mode === "write") {
7889
+ const record = readTracker.getReadRecord(input.path);
7890
+ if (record) {
7891
+ context = { ...context, __expectedMtime: record.modifiedAtRead };
7892
+ }
7857
7893
  try {
7858
7894
  const stat3 = await workspace.filesystem.stat(input.path);
7859
- const check = readTracker.needsReRead(input.path, stat3.modifiedAt);
7860
- if (check.needsReRead) {
7861
- throw new FileReadRequiredError(input.path, check.reason);
7895
+ if (config.requireReadBeforeWrite) {
7896
+ const check = readTracker.needsReRead(input.path, stat3.modifiedAt);
7897
+ if (check.needsReRead) {
7898
+ throw new FileReadRequiredError(input.path, check.reason);
7899
+ }
7862
7900
  }
7863
7901
  } catch (error) {
7864
7902
  if (!(error instanceof FileNotFoundError)) {
@@ -7896,19 +7934,13 @@ function createWorkspaceTools(workspace) {
7896
7934
  const toolsConfig = workspace.getToolsConfig();
7897
7935
  const isReadOnly = workspace.filesystem?.readOnly ?? false;
7898
7936
  const writeLock = new InMemoryFileWriteLock();
7899
- let readTracker;
7900
- const writeFileConfig = resolveToolConfig(toolsConfig, WORKSPACE_TOOLS.FILESYSTEM.WRITE_FILE);
7901
- const editFileConfig = resolveToolConfig(toolsConfig, WORKSPACE_TOOLS.FILESYSTEM.EDIT_FILE);
7902
- const astEditConfig = resolveToolConfig(toolsConfig, WORKSPACE_TOOLS.FILESYSTEM.AST_EDIT);
7903
- if (writeFileConfig.requireReadBeforeWrite || editFileConfig.requireReadBeforeWrite || astEditConfig.requireReadBeforeWrite) {
7904
- readTracker = new InMemoryFileReadTracker();
7905
- }
7937
+ const readTracker = new InMemoryFileReadTracker();
7906
7938
  const addTool = (name, tool, opts) => {
7907
7939
  const config = resolveToolConfig(toolsConfig, name);
7908
7940
  if (!config.enabled) return;
7909
7941
  if (opts?.requireWrite && isReadOnly) return;
7910
7942
  let wrapped = { ...tool, requireApproval: config.requireApproval };
7911
- if (readTracker && opts?.readTrackerMode) {
7943
+ if (opts?.readTrackerMode) {
7912
7944
  wrapped = wrapWithReadTracker(wrapped, workspace, readTracker, config, opts.readTrackerMode);
7913
7945
  }
7914
7946
  if (opts?.useWriteLock) {
@@ -7967,6 +7999,6 @@ function createWorkspaceTools(workspace) {
7967
7999
  return tools;
7968
8000
  }
7969
8001
 
7970
- export { BM25Index, CompositeFilesystem, CompositeVersionedSkillSource, DirectoryNotEmptyError, DirectoryNotFoundError, FileExistsError, FileNotFoundError, FileReadRequiredError, FilesystemError, FilesystemNotAvailableError, FilesystemNotMountableError, FilesystemNotReadyError, IsDirectoryError, IsolationUnavailableError, LocalFilesystem, LocalSandbox, LocalSkillSource, MastraFilesystem, MastraSandbox, MountError, MountManager, MountNotSupportedError, NotDirectoryError, PermissionError, ProcessHandle, SandboxError, SandboxExecutionError, SandboxFeatureNotSupportedError, SandboxNotAvailableError, SandboxNotReadyError, SandboxProcessManager, SandboxTimeoutError, SearchNotAvailableError, VersionedSkillSource, WORKSPACE_TOOLS, WORKSPACE_TOOLS_PREFIX, Workspace, WorkspaceError, WorkspaceNotAvailableError, WorkspaceNotReadyError, WorkspaceReadOnlyError, callLifecycle, collectSkillForPublish, createGlobMatcher, createSkillTools, createWorkspaceTools, deleteFileTool, detectIsolation, editFileTool, executeCommandTool, extractGlobBase, fileStatTool, getRecommendedIsolation, getTiktoken, indexContentTool, isGlobPattern, isIsolationAvailable, listFilesTool, matchGlob, mkdirTool, publishSkillFromSource, readFileTool, requireFilesystem, requireSandbox, requireWorkspace, resolveToolConfig, searchTool, writeFileTool };
7971
- //# sourceMappingURL=chunk-SHQKQEG2.js.map
7972
- //# sourceMappingURL=chunk-SHQKQEG2.js.map
8002
+ export { BM25Index, CompositeFilesystem, CompositeVersionedSkillSource, DirectoryNotEmptyError, DirectoryNotFoundError, FileExistsError, FileNotFoundError, FileReadRequiredError, FilesystemError, FilesystemNotAvailableError, FilesystemNotMountableError, FilesystemNotReadyError, IsDirectoryError, IsolationUnavailableError, LocalFilesystem, LocalSandbox, LocalSkillSource, MastraFilesystem, MastraSandbox, MountError, MountManager, MountNotSupportedError, NotDirectoryError, PermissionError, ProcessHandle, SandboxError, SandboxExecutionError, SandboxFeatureNotSupportedError, SandboxNotAvailableError, SandboxNotReadyError, SandboxProcessManager, SandboxTimeoutError, SearchNotAvailableError, StaleFileError, VersionedSkillSource, WORKSPACE_TOOLS, WORKSPACE_TOOLS_PREFIX, Workspace, WorkspaceError, WorkspaceNotAvailableError, WorkspaceNotReadyError, WorkspaceReadOnlyError, callLifecycle, collectSkillForPublish, createGlobMatcher, createSkillTools, createWorkspaceTools, deleteFileTool, detectIsolation, editFileTool, executeCommandTool, extractGlobBase, fileStatTool, getRecommendedIsolation, getTiktoken, indexContentTool, isGlobPattern, isIsolationAvailable, listFilesTool, matchGlob, mkdirTool, publishSkillFromSource, readFileTool, requireFilesystem, requireSandbox, requireWorkspace, resolveToolConfig, searchTool, writeFileTool };
8003
+ //# sourceMappingURL=chunk-JEF7ZU43.js.map
8004
+ //# sourceMappingURL=chunk-JEF7ZU43.js.map