@mastra/core 1.16.1-alpha.0 → 1.17.0-alpha.2

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 (192) hide show
  1. package/CHANGELOG.md +128 -0
  2. package/dist/agent/index.cjs +8 -8
  3. package/dist/agent/index.js +1 -1
  4. package/dist/{chunk-XKOCRXCP.js → chunk-4UTQD6B5.js} +3 -3
  5. package/dist/{chunk-XKOCRXCP.js.map → chunk-4UTQD6B5.js.map} +1 -1
  6. package/dist/{chunk-WJEUD4JG.js → chunk-5TKRQNGW.js} +4 -4
  7. package/dist/{chunk-WJEUD4JG.js.map → chunk-5TKRQNGW.js.map} +1 -1
  8. package/dist/{chunk-BEDQJNIR.cjs → chunk-6HSR64XA.cjs} +15 -5
  9. package/dist/chunk-6HSR64XA.cjs.map +1 -0
  10. package/dist/{chunk-LFZXBZR5.cjs → chunk-76NWBCBU.cjs} +9 -9
  11. package/dist/{chunk-LFZXBZR5.cjs.map → chunk-76NWBCBU.cjs.map} +1 -1
  12. package/dist/{chunk-J3NJXIJ4.js → chunk-ABA3KD3X.js} +524 -246
  13. package/dist/chunk-ABA3KD3X.js.map +1 -0
  14. package/dist/{chunk-SNASZNHI.js → chunk-AGEYVARR.js} +2 -2
  15. package/dist/{chunk-SNASZNHI.js.map → chunk-AGEYVARR.js.map} +1 -1
  16. package/dist/{chunk-RQBBPR64.cjs → chunk-AH2ZNH4Y.cjs} +30 -28
  17. package/dist/chunk-AH2ZNH4Y.cjs.map +1 -0
  18. package/dist/{chunk-EXIQD6L3.cjs → chunk-AX5EPGND.cjs} +51 -51
  19. package/dist/{chunk-EXIQD6L3.cjs.map → chunk-AX5EPGND.cjs.map} +1 -1
  20. package/dist/{chunk-BSMSIRKQ.js → chunk-E7L2JB4A.js} +8 -8
  21. package/dist/{chunk-BSMSIRKQ.js.map → chunk-E7L2JB4A.js.map} +1 -1
  22. package/dist/{chunk-RLAMKAFZ.js → chunk-FLW4344C.js} +3 -3
  23. package/dist/{chunk-RLAMKAFZ.js.map → chunk-FLW4344C.js.map} +1 -1
  24. package/dist/{chunk-DKQA3ER2.cjs → chunk-I2Z4GKQ6.cjs} +15 -15
  25. package/dist/{chunk-DKQA3ER2.cjs.map → chunk-I2Z4GKQ6.cjs.map} +1 -1
  26. package/dist/{chunk-LO7V2FG6.cjs → chunk-ID5X55KA.cjs} +7 -7
  27. package/dist/{chunk-LO7V2FG6.cjs.map → chunk-ID5X55KA.cjs.map} +1 -1
  28. package/dist/{chunk-53YOAG3E.js → chunk-JMYTEYXJ.js} +5 -5
  29. package/dist/{chunk-53YOAG3E.js.map → chunk-JMYTEYXJ.js.map} +1 -1
  30. package/dist/{chunk-5TZP6NN4.js → chunk-K76OKOAK.js} +3 -3
  31. package/dist/{chunk-5TZP6NN4.js.map → chunk-K76OKOAK.js.map} +1 -1
  32. package/dist/{chunk-ZJMETLCP.js → chunk-LOGX3EQD.js} +30 -28
  33. package/dist/chunk-LOGX3EQD.js.map +1 -0
  34. package/dist/{chunk-BLBX5SP3.js → chunk-MNIWCQYZ.js} +4 -4
  35. package/dist/{chunk-BLBX5SP3.js.map → chunk-MNIWCQYZ.js.map} +1 -1
  36. package/dist/{chunk-DSFXGE5Y.cjs → chunk-O54IMECL.cjs} +185 -185
  37. package/dist/{chunk-DSFXGE5Y.cjs.map → chunk-O54IMECL.cjs.map} +1 -1
  38. package/dist/{chunk-OC5SNZ6R.cjs → chunk-OBHOUEDZ.cjs} +83 -83
  39. package/dist/{chunk-OC5SNZ6R.cjs.map → chunk-OBHOUEDZ.cjs.map} +1 -1
  40. package/dist/{chunk-OTQY4UJ4.js → chunk-OIZT4TON.js} +476 -27
  41. package/dist/chunk-OIZT4TON.js.map +1 -0
  42. package/dist/{chunk-LIVMJB3N.cjs → chunk-P54SNCAD.cjs} +3 -3
  43. package/dist/{chunk-LIVMJB3N.cjs.map → chunk-P54SNCAD.cjs.map} +1 -1
  44. package/dist/{chunk-DXRM6H35.js → chunk-PICHLY3C.js} +4 -4
  45. package/dist/{chunk-DXRM6H35.js.map → chunk-PICHLY3C.js.map} +1 -1
  46. package/dist/{chunk-7L2ICIDI.cjs → chunk-PQ4CVQXD.cjs} +6 -6
  47. package/dist/{chunk-7L2ICIDI.cjs.map → chunk-PQ4CVQXD.cjs.map} +1 -1
  48. package/dist/{chunk-O7JQYUXP.cjs → chunk-PTRJHO2K.cjs} +7 -7
  49. package/dist/{chunk-O7JQYUXP.cjs.map → chunk-PTRJHO2K.cjs.map} +1 -1
  50. package/dist/{chunk-SQACXTWK.cjs → chunk-QVQ3PGG2.cjs} +2 -2
  51. package/dist/{chunk-SQACXTWK.cjs.map → chunk-QVQ3PGG2.cjs.map} +1 -1
  52. package/dist/{chunk-XW4B2RAG.cjs → chunk-QVVWKMFM.cjs} +525 -248
  53. package/dist/chunk-QVVWKMFM.cjs.map +1 -0
  54. package/dist/{chunk-5S7MQ37C.cjs → chunk-R47HLGU7.cjs} +512 -61
  55. package/dist/chunk-R47HLGU7.cjs.map +1 -0
  56. package/dist/{chunk-R67VVUDR.cjs → chunk-SDSIVJMT.cjs} +16 -16
  57. package/dist/{chunk-R67VVUDR.cjs.map → chunk-SDSIVJMT.cjs.map} +1 -1
  58. package/dist/{chunk-UGXRRSSU.js → chunk-UOCBF4IP.js} +3 -3
  59. package/dist/{chunk-UGXRRSSU.js.map → chunk-UOCBF4IP.js.map} +1 -1
  60. package/dist/{chunk-GVHOPNRI.js → chunk-X234OVG3.js} +14 -4
  61. package/dist/chunk-X234OVG3.js.map +1 -0
  62. package/dist/{chunk-XVP3C4KW.cjs → chunk-XTN63GKI.cjs} +7 -7
  63. package/dist/{chunk-XVP3C4KW.cjs.map → chunk-XTN63GKI.cjs.map} +1 -1
  64. package/dist/{chunk-NJONWVEJ.js → chunk-YBNI2A6Y.js} +8 -8
  65. package/dist/{chunk-NJONWVEJ.js.map → chunk-YBNI2A6Y.js.map} +1 -1
  66. package/dist/{chunk-UXFQJJQG.js → chunk-ZT26XXEB.js} +5 -5
  67. package/dist/{chunk-UXFQJJQG.js.map → chunk-ZT26XXEB.js.map} +1 -1
  68. package/dist/datasets/index.cjs +17 -17
  69. package/dist/datasets/index.js +2 -2
  70. package/dist/docs/SKILL.md +4 -1
  71. package/dist/docs/assets/SOURCE_MAP.json +364 -354
  72. package/dist/docs/references/docs-memory-observational-memory.md +7 -5
  73. package/dist/docs/references/docs-observability-tracing-bridges-otel.md +3 -3
  74. package/dist/docs/references/docs-workspace-lsp.md +116 -0
  75. package/dist/docs/references/docs-workspace-overview.md +15 -1
  76. package/dist/docs/references/guides-agent-frameworks-ai-sdk.md +3 -3
  77. package/dist/docs/references/reference-ai-sdk-with-mastra.md +2 -2
  78. package/dist/docs/references/reference-auth-okta.md +162 -0
  79. package/dist/docs/references/reference-client-js-agents.md +2 -2
  80. package/dist/docs/references/reference-harness-harness-class.md +2 -0
  81. package/dist/docs/references/reference-memory-observational-memory.md +2 -2
  82. package/dist/docs/references/reference-observability-tracing-interfaces.md +1 -1
  83. package/dist/docs/references/reference-processors-message-history-processor.md +1 -1
  84. package/dist/docs/references/reference-processors-processor-interface.md +3 -3
  85. package/dist/docs/references/reference-processors-semantic-recall-processor.md +1 -1
  86. package/dist/docs/references/reference-processors-skill-search-processor.md +93 -0
  87. package/dist/docs/references/reference-processors-tool-call-filter.md +2 -2
  88. package/dist/docs/references/reference-processors-working-memory-processor.md +1 -1
  89. package/dist/docs/references/reference-tools-mcp-client.md +1 -1
  90. package/dist/docs/references/reference.md +2 -0
  91. package/dist/evals/index.cjs +20 -20
  92. package/dist/evals/index.js +3 -3
  93. package/dist/evals/scoreTraces/index.cjs +5 -5
  94. package/dist/evals/scoreTraces/index.js +2 -2
  95. package/dist/harness/harness.d.ts +4 -5
  96. package/dist/harness/harness.d.ts.map +1 -1
  97. package/dist/harness/index.cjs +44 -12
  98. package/dist/harness/index.cjs.map +1 -1
  99. package/dist/harness/index.d.ts +1 -1
  100. package/dist/harness/index.d.ts.map +1 -1
  101. package/dist/harness/index.js +39 -7
  102. package/dist/harness/index.js.map +1 -1
  103. package/dist/harness/types.d.ts +18 -4
  104. package/dist/harness/types.d.ts.map +1 -1
  105. package/dist/index.cjs +2 -2
  106. package/dist/index.js +1 -1
  107. package/dist/llm/index.cjs +16 -16
  108. package/dist/llm/index.js +5 -5
  109. package/dist/llm/model/provider-types.generated.d.ts +5 -0
  110. package/dist/loop/index.cjs +14 -14
  111. package/dist/loop/index.js +1 -1
  112. package/dist/mastra/index.cjs +2 -2
  113. package/dist/mastra/index.js +1 -1
  114. package/dist/memory/index.cjs +14 -14
  115. package/dist/memory/index.js +1 -1
  116. package/dist/memory/types.d.ts +4 -0
  117. package/dist/memory/types.d.ts.map +1 -1
  118. package/dist/models-dev-DYILKQKY.js +3 -0
  119. package/dist/{models-dev-DMH6Y26P.js.map → models-dev-DYILKQKY.js.map} +1 -1
  120. package/dist/models-dev-EX67IAAF.cjs +12 -0
  121. package/dist/{models-dev-YEVVUBSG.cjs.map → models-dev-EX67IAAF.cjs.map} +1 -1
  122. package/dist/netlify-EDK4WKCW.cjs +12 -0
  123. package/dist/{netlify-CQVRCF2F.cjs.map → netlify-EDK4WKCW.cjs.map} +1 -1
  124. package/dist/netlify-RQLBHLLX.js +3 -0
  125. package/dist/{netlify-IAN7GQOF.js.map → netlify-RQLBHLLX.js.map} +1 -1
  126. package/dist/processor-provider/index.cjs +10 -10
  127. package/dist/processor-provider/index.js +1 -1
  128. package/dist/processors/index.cjs +50 -42
  129. package/dist/processors/index.js +1 -1
  130. package/dist/processors/processors/index.d.ts +2 -0
  131. package/dist/processors/processors/index.d.ts.map +1 -1
  132. package/dist/processors/processors/skill-search.d.ts +111 -0
  133. package/dist/processors/processors/skill-search.d.ts.map +1 -0
  134. package/dist/processors/tool-result-reminder.d.ts +32 -0
  135. package/dist/processors/tool-result-reminder.d.ts.map +1 -0
  136. package/dist/provider-registry-3RCP7DTQ.js +3 -0
  137. package/dist/{provider-registry-PBDYA2JQ.js.map → provider-registry-3RCP7DTQ.js.map} +1 -1
  138. package/dist/provider-registry-MBXOBTD4.cjs +40 -0
  139. package/dist/{provider-registry-CCLGCN3B.cjs.map → provider-registry-MBXOBTD4.cjs.map} +1 -1
  140. package/dist/provider-registry.json +10 -0
  141. package/dist/relevance/index.cjs +3 -3
  142. package/dist/relevance/index.js +1 -1
  143. package/dist/storage/constants.cjs +56 -56
  144. package/dist/storage/constants.js +1 -1
  145. package/dist/storage/index.cjs +160 -160
  146. package/dist/storage/index.js +2 -2
  147. package/dist/storage/types.d.ts +2 -0
  148. package/dist/storage/types.d.ts.map +1 -1
  149. package/dist/stream/index.cjs +8 -8
  150. package/dist/stream/index.js +1 -1
  151. package/dist/test-utils/llm-mock.cjs +4 -4
  152. package/dist/test-utils/llm-mock.js +1 -1
  153. package/dist/tool-loop-agent/index.cjs +4 -4
  154. package/dist/tool-loop-agent/index.js +1 -1
  155. package/dist/tools/tool-builder/builder.d.ts.map +1 -1
  156. package/dist/utils.cjs +23 -23
  157. package/dist/utils.js +1 -1
  158. package/dist/vector/index.cjs +7 -7
  159. package/dist/vector/index.js +1 -1
  160. package/dist/workflows/evented/index.cjs +10 -10
  161. package/dist/workflows/evented/index.js +1 -1
  162. package/dist/workflows/index.cjs +24 -24
  163. package/dist/workflows/index.js +1 -1
  164. package/dist/workspace/constants/index.d.ts +4 -1
  165. package/dist/workspace/constants/index.d.ts.map +1 -1
  166. package/dist/workspace/index.cjs +68 -68
  167. package/dist/workspace/index.js +1 -1
  168. package/dist/workspace/lsp/client.d.ts +30 -0
  169. package/dist/workspace/lsp/client.d.ts.map +1 -1
  170. package/dist/workspace/lsp/manager.d.ts +11 -0
  171. package/dist/workspace/lsp/manager.d.ts.map +1 -1
  172. package/dist/workspace/tools/index.d.ts +1 -0
  173. package/dist/workspace/tools/index.d.ts.map +1 -1
  174. package/dist/workspace/tools/lsp-inspect.d.ts +13 -0
  175. package/dist/workspace/tools/lsp-inspect.d.ts.map +1 -0
  176. package/dist/workspace/tools/tools.d.ts.map +1 -1
  177. package/package.json +4 -4
  178. package/src/llm/model/provider-types.generated.d.ts +5 -0
  179. package/dist/chunk-5S7MQ37C.cjs.map +0 -1
  180. package/dist/chunk-BEDQJNIR.cjs.map +0 -1
  181. package/dist/chunk-GVHOPNRI.js.map +0 -1
  182. package/dist/chunk-J3NJXIJ4.js.map +0 -1
  183. package/dist/chunk-OTQY4UJ4.js.map +0 -1
  184. package/dist/chunk-RQBBPR64.cjs.map +0 -1
  185. package/dist/chunk-XW4B2RAG.cjs.map +0 -1
  186. package/dist/chunk-ZJMETLCP.js.map +0 -1
  187. package/dist/models-dev-DMH6Y26P.js +0 -3
  188. package/dist/models-dev-YEVVUBSG.cjs +0 -12
  189. package/dist/netlify-CQVRCF2F.cjs +0 -12
  190. package/dist/netlify-IAN7GQOF.js +0 -3
  191. package/dist/provider-registry-CCLGCN3B.cjs +0 -40
  192. package/dist/provider-registry-PBDYA2JQ.js +0 -3
@@ -1,24 +1,24 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkZC4FJVJZ_cjs = require('./chunk-ZC4FJVJZ.cjs');
4
+ var chunkQVVWKMFM_cjs = require('./chunk-QVVWKMFM.cjs');
4
5
  var chunkZCBG4ZQT_cjs = require('./chunk-ZCBG4ZQT.cjs');
5
- var chunkXW4B2RAG_cjs = require('./chunk-XW4B2RAG.cjs');
6
- var chunkR67VVUDR_cjs = require('./chunk-R67VVUDR.cjs');
6
+ var chunkSDSIVJMT_cjs = require('./chunk-SDSIVJMT.cjs');
7
7
  var chunkANLO4VM2_cjs = require('./chunk-ANLO4VM2.cjs');
8
8
  var chunkY3APFUXZ_cjs = require('./chunk-Y3APFUXZ.cjs');
9
9
  var chunkCFMZZDO2_cjs = require('./chunk-CFMZZDO2.cjs');
10
10
  var chunkMR7ZWBL6_cjs = require('./chunk-MR7ZWBL6.cjs');
11
- var chunkOC5SNZ6R_cjs = require('./chunk-OC5SNZ6R.cjs');
12
- var chunk7L2ICIDI_cjs = require('./chunk-7L2ICIDI.cjs');
11
+ var chunkOBHOUEDZ_cjs = require('./chunk-OBHOUEDZ.cjs');
12
+ var chunkPQ4CVQXD_cjs = require('./chunk-PQ4CVQXD.cjs');
13
13
  var chunk6BJ7XHRH_cjs = require('./chunk-6BJ7XHRH.cjs');
14
14
  var chunkOQDRPRKM_cjs = require('./chunk-OQDRPRKM.cjs');
15
- var chunkRQBBPR64_cjs = require('./chunk-RQBBPR64.cjs');
15
+ var chunkAH2ZNH4Y_cjs = require('./chunk-AH2ZNH4Y.cjs');
16
16
  var chunkG5HKDGNT_cjs = require('./chunk-G5HKDGNT.cjs');
17
17
  var chunkKJBMTK5B_cjs = require('./chunk-KJBMTK5B.cjs');
18
18
  var chunkK4NN2KQQ_cjs = require('./chunk-K4NN2KQQ.cjs');
19
19
  var chunkXB4FLS7A_cjs = require('./chunk-XB4FLS7A.cjs');
20
- var chunk5WBEMKE2_cjs = require('./chunk-5WBEMKE2.cjs');
21
20
  var chunk4U7ZLI36_cjs = require('./chunk-4U7ZLI36.cjs');
21
+ var chunk5WBEMKE2_cjs = require('./chunk-5WBEMKE2.cjs');
22
22
  var chunkRO47SMI7_cjs = require('./chunk-RO47SMI7.cjs');
23
23
  var chunk7XAECHYL_cjs = require('./chunk-7XAECHYL.cjs');
24
24
  var chunkBVWXTWXP_cjs = require('./chunk-BVWXTWXP.cjs');
@@ -29,6 +29,8 @@ var EventEmitter2 = require('events');
29
29
  var schemaCompat = require('@mastra/schema-compat');
30
30
  var radash = require('radash');
31
31
  var providerUtilsV5 = require('@ai-sdk/provider-utils-v5');
32
+ var fs = require('fs');
33
+ var path = require('path');
32
34
  var xxhash = require('xxhash-wasm');
33
35
  var lruCache = require('lru-cache');
34
36
 
@@ -239,8 +241,8 @@ var MastraAgentNetworkStream = class extends web.ReadableStream {
239
241
  resolve: null,
240
242
  reject: null
241
243
  };
242
- deferredPromise.promise = new Promise((resolve, reject) => {
243
- deferredPromise.resolve = resolve;
244
+ deferredPromise.promise = new Promise((resolve2, reject) => {
245
+ deferredPromise.resolve = resolve2;
244
246
  deferredPromise.reject = reject;
245
247
  });
246
248
  const objectDeferredPromise = {
@@ -248,8 +250,8 @@ var MastraAgentNetworkStream = class extends web.ReadableStream {
248
250
  resolve: null,
249
251
  reject: null
250
252
  };
251
- objectDeferredPromise.promise = new Promise((resolve, reject) => {
252
- objectDeferredPromise.resolve = resolve;
253
+ objectDeferredPromise.promise = new Promise((resolve2, reject) => {
254
+ objectDeferredPromise.resolve = resolve2;
253
255
  objectDeferredPromise.reject = reject;
254
256
  });
255
257
  let objectStreamController = null;
@@ -576,13 +578,13 @@ var DelayedPromise = class {
576
578
  if (this._promise) {
577
579
  return this._promise;
578
580
  }
579
- this._promise = new Promise((resolve, reject) => {
581
+ this._promise = new Promise((resolve2, reject) => {
580
582
  if (this.status.type === "resolved") {
581
- resolve(this.status.value);
583
+ resolve2(this.status.value);
582
584
  } else if (this.status.type === "rejected") {
583
585
  reject(this.status.error);
584
586
  }
585
- this._resolve = resolve;
587
+ this._resolve = resolve2;
586
588
  this._reject = reject;
587
589
  });
588
590
  return this._promise;
@@ -2069,7 +2071,7 @@ var ProcessorRunner = class _ProcessorRunner {
2069
2071
  }
2070
2072
  const { model: _model, ...rest } = result;
2071
2073
  if (result.model) {
2072
- const resolvedModel = await chunkOC5SNZ6R_cjs.resolveModelConfig(result.model);
2074
+ const resolvedModel = await chunkOBHOUEDZ_cjs.resolveModelConfig(result.model);
2073
2075
  const isSupported = isSupportedLanguageModel(resolvedModel);
2074
2076
  if (!isSupported) {
2075
2077
  throw new chunk4U7ZLI36_cjs.MastraError({
@@ -5495,7 +5497,7 @@ var createTimeTravelExecutionParams = (params) => {
5495
5497
  result = void 0;
5496
5498
  }
5497
5499
  if (result) {
5498
- const formattedResult = chunkRQBBPR64_cjs.removeUndefinedValues(result);
5500
+ const formattedResult = chunkAH2ZNH4Y_cjs.removeUndefinedValues(result);
5499
5501
  stepResults[stepId] = formattedResult;
5500
5502
  }
5501
5503
  });
@@ -6053,7 +6055,7 @@ async function executeLoop(engine, params) {
6053
6055
  options: {
6054
6056
  type: "workflow_conditional_eval" /* WORKFLOW_CONDITIONAL_EVAL */,
6055
6057
  name: `condition: '${entry.loopType}'`,
6056
- input: chunkRQBBPR64_cjs.selectFields(result.output, ["stepResult", "output.text", "output.object", "messages"]),
6058
+ input: chunkAH2ZNH4Y_cjs.selectFields(result.output, ["stepResult", "output.text", "output.object", "messages"]),
6057
6059
  attributes: {
6058
6060
  conditionIndex: iteration
6059
6061
  },
@@ -7637,7 +7639,7 @@ var DefaultExecutionEngine = class extends ExecutionEngine {
7637
7639
  * @param _workflowId - The workflow ID (for constructing platform-specific IDs)
7638
7640
  */
7639
7641
  async executeSleepDuration(duration, _sleepId, _workflowId) {
7640
- await new Promise((resolve) => setTimeout(resolve, duration < 0 ? 0 : duration));
7642
+ await new Promise((resolve2) => setTimeout(resolve2, duration < 0 ? 0 : duration));
7641
7643
  }
7642
7644
  /**
7643
7645
  * Execute sleep until a specific date. Override to use platform-specific sleep primitives.
@@ -7648,7 +7650,7 @@ var DefaultExecutionEngine = class extends ExecutionEngine {
7648
7650
  */
7649
7651
  async executeSleepUntilDate(date, _sleepUntilId, _workflowId) {
7650
7652
  const time = date.getTime() - Date.now();
7651
- await new Promise((resolve) => setTimeout(resolve, time < 0 ? 0 : time));
7653
+ await new Promise((resolve2) => setTimeout(resolve2, time < 0 ? 0 : time));
7652
7654
  }
7653
7655
  /**
7654
7656
  * Wrap a durable operation (like dynamic sleep function evaluation).
@@ -7812,7 +7814,7 @@ var DefaultExecutionEngine = class extends ExecutionEngine {
7812
7814
  async executeStepWithRetry(stepId, runStep, params) {
7813
7815
  for (let i = 0; i < params.retries + 1; i++) {
7814
7816
  if (i > 0 && params.delay) {
7815
- await new Promise((resolve) => setTimeout(resolve, params.delay));
7817
+ await new Promise((resolve2) => setTimeout(resolve2, params.delay));
7816
7818
  }
7817
7819
  try {
7818
7820
  const result = await this.wrapDurableOperation(stepId, runStep);
@@ -8390,8 +8392,8 @@ function createStepFromAgent(params, agentOrToolOptions) {
8390
8392
  }) => {
8391
8393
  const observabilityContext = chunkG5HKDGNT_cjs.resolveObservabilityContext(rest);
8392
8394
  let streamPromise = {};
8393
- streamPromise.promise = new Promise((resolve, reject) => {
8394
- streamPromise.resolve = resolve;
8395
+ streamPromise.promise = new Promise((resolve2, reject) => {
8396
+ streamPromise.resolve = resolve2;
8395
8397
  streamPromise.reject = reject;
8396
8398
  });
8397
8399
  let structuredResult = null;
@@ -11354,7 +11356,7 @@ var MastraScorer = class _MastraScorer {
11354
11356
  }
11355
11357
  });
11356
11358
  }
11357
- const resolvedModel = await chunkOC5SNZ6R_cjs.resolveModelConfig(modelConfig, void 0, this.#mastra);
11359
+ const resolvedModel = await chunkOBHOUEDZ_cjs.resolveModelConfig(modelConfig, void 0, this.#mastra);
11358
11360
  const judge = new Agent({
11359
11361
  id: "judge",
11360
11362
  name: "judge",
@@ -11478,8 +11480,8 @@ async function runCompletionScorers(scorers, context, options) {
11478
11480
  const startTime = Date.now();
11479
11481
  const results = [];
11480
11482
  let timedOut = false;
11481
- const timeoutPromise = new Promise((resolve) => {
11482
- setTimeout(() => resolve("timeout"), timeout);
11483
+ const timeoutPromise = new Promise((resolve2) => {
11484
+ setTimeout(() => resolve2("timeout"), timeout);
11483
11485
  });
11484
11486
  if (parallel) {
11485
11487
  const scorerPromises = scorers.map((scorer) => runSingleScorer(scorer, context));
@@ -12807,7 +12809,7 @@ function createLLMExecutionStep({
12807
12809
  const convertedTools = {};
12808
12810
  for (const [name, tool2] of Object.entries(currentStep.tools)) {
12809
12811
  if (chunkK4NN2KQQ_cjs.isMastraTool(tool2)) {
12810
- convertedTools[name] = chunkRQBBPR64_cjs.makeCoreTool(
12812
+ convertedTools[name] = chunkAH2ZNH4Y_cjs.makeCoreTool(
12811
12813
  tool2,
12812
12814
  {
12813
12815
  name,
@@ -13014,7 +13016,7 @@ Analyse the suspended tools: ${JSON.stringify(suspendedTools)}, using the messag
13014
13016
  }
13015
13017
  });
13016
13018
  let transportResolver;
13017
- if (currentStep.model instanceof chunkOC5SNZ6R_cjs.ModelRouterLanguageModel) {
13019
+ if (currentStep.model instanceof chunkOBHOUEDZ_cjs.ModelRouterLanguageModel) {
13018
13020
  const routerModel = currentStep.model;
13019
13021
  transportResolver = () => routerModel._getStreamTransport();
13020
13022
  }
@@ -14761,7 +14763,7 @@ var MastraLLMVNext = class extends chunkRO47SMI7_cjs.MastraBase {
14761
14763
  const remainingTokens = parseInt(props?.response?.headers?.["x-ratelimit-remaining-tokens"] ?? "", 10);
14762
14764
  if (!isNaN(remainingTokens) && remainingTokens > 0 && remainingTokens < 2e3) {
14763
14765
  this.logger.warn("Rate limit approaching, waiting 10 seconds", { runId });
14764
- await chunkRQBBPR64_cjs.delay(10 * 1e3);
14766
+ await chunkAH2ZNH4Y_cjs.delay(10 * 1e3);
14765
14767
  }
14766
14768
  },
14767
14769
  onFinish: async (props) => {
@@ -16797,7 +16799,7 @@ async function networkLoop({
16797
16799
  processorRunner,
16798
16800
  { requestContext }
16799
16801
  );
16800
- await new Promise((resolve) => setTimeout(resolve, 10));
16802
+ await new Promise((resolve2) => setTimeout(resolve2, 10));
16801
16803
  if (isComplete) {
16802
16804
  return {
16803
16805
  ...inputData,
@@ -18159,14 +18161,14 @@ var SaveQueueManager = class _SaveQueueManager {
18159
18161
  * @returns A promise that resolves when the debounced save completes.
18160
18162
  */
18161
18163
  debounceSave(threadId, messageList, memoryConfig) {
18162
- return new Promise((resolve, reject) => {
18164
+ return new Promise((resolve2, reject) => {
18163
18165
  if (this.saveDebounceTimers.has(threadId)) {
18164
18166
  clearTimeout(this.saveDebounceTimers.get(threadId));
18165
18167
  }
18166
18168
  this.saveDebounceTimers.set(
18167
18169
  threadId,
18168
18170
  setTimeout(() => {
18169
- this.enqueueSave(threadId, messageList, memoryConfig).then(resolve).catch((err) => {
18171
+ this.enqueueSave(threadId, messageList, memoryConfig).then(resolve2).catch((err) => {
18170
18172
  this.logger?.error?.("Error in debounceSave", { err, threadId });
18171
18173
  reject(err);
18172
18174
  }).finally(() => {
@@ -19783,7 +19785,7 @@ ${errorMessages}`,
19783
19785
  */
19784
19786
  listTools({ requestContext = new chunk5WBEMKE2_cjs.RequestContext() } = {}) {
19785
19787
  if (typeof this.#tools !== "function") {
19786
- return chunkRQBBPR64_cjs.ensureToolProperties(this.#tools);
19788
+ return chunkAH2ZNH4Y_cjs.ensureToolProperties(this.#tools);
19787
19789
  }
19788
19790
  const result = this.#tools({
19789
19791
  requestContext,
@@ -19804,7 +19806,7 @@ ${errorMessages}`,
19804
19806
  this.logger.error(mastraError.toString());
19805
19807
  throw mastraError;
19806
19808
  }
19807
- return chunkRQBBPR64_cjs.ensureToolProperties(tools);
19809
+ return chunkAH2ZNH4Y_cjs.ensureToolProperties(tools);
19808
19810
  });
19809
19811
  }
19810
19812
  /**
@@ -19850,7 +19852,7 @@ ${errorMessages}`,
19850
19852
  });
19851
19853
  });
19852
19854
  } else {
19853
- llm = new chunk7L2ICIDI_cjs.MastraLLMV1({
19855
+ llm = new chunkPQ4CVQXD_cjs.MastraLLMV1({
19854
19856
  model: modelInfo,
19855
19857
  mastra: this.#mastra,
19856
19858
  options: { tracingPolicy: this.#options?.tracingPolicy }
@@ -19876,7 +19878,7 @@ ${errorMessages}`,
19876
19878
  */
19877
19879
  async resolveModelConfig(modelConfig, requestContext) {
19878
19880
  try {
19879
- return await chunkOC5SNZ6R_cjs.resolveModelConfig(modelConfig, requestContext, this.#mastra);
19881
+ return await chunkOBHOUEDZ_cjs.resolveModelConfig(modelConfig, requestContext, this.#mastra);
19880
19882
  } catch (error) {
19881
19883
  const mastraError = new chunk4U7ZLI36_cjs.MastraError({
19882
19884
  id: "AGENT_GET_MODEL_MISSING_MODEL_INSTANCE",
@@ -20362,7 +20364,7 @@ ${errorMessages}`,
20362
20364
  tracingPolicy: this.#options?.tracingPolicy,
20363
20365
  requireApproval: toolObj.requireApproval
20364
20366
  };
20365
- const convertedToCoreTool = chunkRQBBPR64_cjs.makeCoreTool(toolObj, options, void 0, autoResumeSuspendedTools);
20367
+ const convertedToCoreTool = chunkAH2ZNH4Y_cjs.makeCoreTool(toolObj, options, void 0, autoResumeSuspendedTools);
20366
20368
  convertedMemoryTools[toolName] = convertedToCoreTool;
20367
20369
  }
20368
20370
  }
@@ -20391,7 +20393,7 @@ ${errorMessages}`,
20391
20393
  if (!workspace) {
20392
20394
  return convertedWorkspaceTools;
20393
20395
  }
20394
- const workspaceTools = chunkXW4B2RAG_cjs.createWorkspaceTools(workspace);
20396
+ const workspaceTools = chunkQVVWKMFM_cjs.createWorkspaceTools(workspace);
20395
20397
  if (Object.keys(workspaceTools).length > 0) {
20396
20398
  this.logger.debug(`[Agent:${this.name}] - Adding workspace tools: ${Object.keys(workspaceTools).join(", ")}`, {
20397
20399
  runId
@@ -20414,7 +20416,7 @@ ${errorMessages}`,
20414
20416
  requireApproval: toolObj.requireApproval,
20415
20417
  workspace
20416
20418
  };
20417
- const convertedToCoreTool = chunkRQBBPR64_cjs.makeCoreTool(toolObj, options, void 0, autoResumeSuspendedTools);
20419
+ const convertedToCoreTool = chunkAH2ZNH4Y_cjs.makeCoreTool(toolObj, options, void 0, autoResumeSuspendedTools);
20418
20420
  convertedWorkspaceTools[toolName] = convertedToCoreTool;
20419
20421
  }
20420
20422
  }
@@ -20445,7 +20447,7 @@ ${errorMessages}`,
20445
20447
  if (!workspace?.skills) {
20446
20448
  return convertedSkillTools;
20447
20449
  }
20448
- const skillTools = chunkXW4B2RAG_cjs.createSkillTools(workspace.skills);
20450
+ const skillTools = chunkQVVWKMFM_cjs.createSkillTools(workspace.skills);
20449
20451
  if (Object.keys(skillTools).length > 0) {
20450
20452
  this.logger.debug(`[Agent:${this.name}] - Adding skill tools: ${Object.keys(skillTools).join(", ")}`, {
20451
20453
  runId
@@ -20469,7 +20471,7 @@ ${errorMessages}`,
20469
20471
  // Skill tools never require approval
20470
20472
  workspace
20471
20473
  };
20472
- const convertedToCoreTool = chunkRQBBPR64_cjs.makeCoreTool(toolObj, options, void 0, autoResumeSuspendedTools);
20474
+ const convertedToCoreTool = chunkAH2ZNH4Y_cjs.makeCoreTool(toolObj, options, void 0, autoResumeSuspendedTools);
20473
20475
  convertedSkillTools[toolName] = convertedToCoreTool;
20474
20476
  }
20475
20477
  }
@@ -20686,7 +20688,7 @@ ${errorMessages}`,
20686
20688
  tracingPolicy: this.#options?.tracingPolicy,
20687
20689
  requireApproval: tool2.requireApproval
20688
20690
  };
20689
- return [k, chunkRQBBPR64_cjs.makeCoreTool(tool2, options, void 0, autoResumeSuspendedTools)];
20691
+ return [k, chunkAH2ZNH4Y_cjs.makeCoreTool(tool2, options, void 0, autoResumeSuspendedTools)];
20690
20692
  })
20691
20693
  );
20692
20694
  const assignedToolEntriesConverted = Object.fromEntries(
@@ -20738,7 +20740,7 @@ ${errorMessages}`,
20738
20740
  tracingPolicy: this.#options?.tracingPolicy,
20739
20741
  requireApproval: toolObj.requireApproval
20740
20742
  };
20741
- const convertedToCoreTool = chunkRQBBPR64_cjs.makeCoreTool(toolObj, options, "toolset", autoResumeSuspendedTools);
20743
+ const convertedToCoreTool = chunkAH2ZNH4Y_cjs.makeCoreTool(toolObj, options, "toolset", autoResumeSuspendedTools);
20742
20744
  toolsForRequest[toolName] = convertedToCoreTool;
20743
20745
  }
20744
20746
  }
@@ -20785,7 +20787,7 @@ ${errorMessages}`,
20785
20787
  tracingPolicy: this.#options?.tracingPolicy,
20786
20788
  requireApproval: tool2.requireApproval
20787
20789
  };
20788
- const convertedToCoreTool = chunkRQBBPR64_cjs.makeCoreTool(toolRest, options, "client-tool", autoResumeSuspendedTools);
20790
+ const convertedToCoreTool = chunkAH2ZNH4Y_cjs.makeCoreTool(toolRest, options, "client-tool", autoResumeSuspendedTools);
20789
20791
  toolsForRequest[toolName] = convertedToCoreTool;
20790
20792
  }
20791
20793
  }
@@ -21446,7 +21448,7 @@ ${effectiveInstructions}`;
21446
21448
  ...observabilityContext,
21447
21449
  tracingPolicy: this.#options?.tracingPolicy
21448
21450
  };
21449
- convertedAgentTools[`agent-${agentName}`] = chunkRQBBPR64_cjs.makeCoreTool(
21451
+ convertedAgentTools[`agent-${agentName}`] = chunkAH2ZNH4Y_cjs.makeCoreTool(
21450
21452
  toolObj,
21451
21453
  options,
21452
21454
  void 0,
@@ -21663,7 +21665,7 @@ ${effectiveInstructions}`;
21663
21665
  ...observabilityContext,
21664
21666
  tracingPolicy: this.#options?.tracingPolicy
21665
21667
  };
21666
- convertedWorkflowTools[`workflow-${workflowName}`] = chunkRQBBPR64_cjs.makeCoreTool(
21668
+ convertedWorkflowTools[`workflow-${workflowName}`] = chunkAH2ZNH4Y_cjs.makeCoreTool(
21667
21669
  toolObj,
21668
21670
  options,
21669
21671
  void 0,
@@ -21695,7 +21697,7 @@ ${effectiveInstructions}`;
21695
21697
  let mastraProxy = void 0;
21696
21698
  const logger = this.logger;
21697
21699
  if (this.#mastra) {
21698
- mastraProxy = chunkRQBBPR64_cjs.createMastraProxy({ mastra: this.#mastra, logger });
21700
+ mastraProxy = chunkAH2ZNH4Y_cjs.createMastraProxy({ mastra: this.#mastra, logger });
21699
21701
  }
21700
21702
  const assignedTools = await this.listAssignedTools({
21701
21703
  runId,
@@ -21947,7 +21949,7 @@ ${effectiveInstructions}`;
21947
21949
  const resolvedModel = await this.resolveModelConfig(selection, requestContext);
21948
21950
  this.assertSupportsPreparedModels(resolvedModel);
21949
21951
  let headers;
21950
- if (resolvedModel instanceof chunkOC5SNZ6R_cjs.ModelRouterLanguageModel) {
21952
+ if (resolvedModel instanceof chunkOBHOUEDZ_cjs.ModelRouterLanguageModel) {
21951
21953
  headers = resolvedModel.config?.headers;
21952
21954
  }
21953
21955
  return [
@@ -21980,7 +21982,7 @@ ${effectiveInstructions}`;
21980
21982
  throw mastraError;
21981
21983
  }
21982
21984
  let headers;
21983
- if (model instanceof chunkOC5SNZ6R_cjs.ModelRouterLanguageModel) {
21985
+ if (model instanceof chunkOBHOUEDZ_cjs.ModelRouterLanguageModel) {
21984
21986
  headers = model.config?.headers;
21985
21987
  }
21986
21988
  return {
@@ -22431,7 +22433,7 @@ ${effectiveInstructions}`;
22431
22433
  const defaultOptions = await this.getDefaultOptions({
22432
22434
  requestContext: options?.requestContext
22433
22435
  });
22434
- const mergedOptions = chunkRQBBPR64_cjs.deepMerge(
22436
+ const mergedOptions = chunkAH2ZNH4Y_cjs.deepMerge(
22435
22437
  defaultOptions,
22436
22438
  options ?? {}
22437
22439
  );
@@ -22501,7 +22503,7 @@ ${effectiveInstructions}`;
22501
22503
  const defaultOptions = await this.getDefaultOptions({
22502
22504
  requestContext: streamOptions?.requestContext
22503
22505
  });
22504
- const mergedOptions = chunkRQBBPR64_cjs.deepMerge(
22506
+ const mergedOptions = chunkAH2ZNH4Y_cjs.deepMerge(
22505
22507
  defaultOptions,
22506
22508
  streamOptions ?? {}
22507
22509
  );
@@ -22565,7 +22567,7 @@ ${effectiveInstructions}`;
22565
22567
  const defaultOptions = await this.getDefaultOptions({
22566
22568
  requestContext: streamOptions?.requestContext
22567
22569
  });
22568
- let mergedStreamOptions = chunkRQBBPR64_cjs.deepMerge(
22570
+ let mergedStreamOptions = chunkAH2ZNH4Y_cjs.deepMerge(
22569
22571
  defaultOptions,
22570
22572
  streamOptions ?? {}
22571
22573
  );
@@ -22630,7 +22632,7 @@ ${effectiveInstructions}`;
22630
22632
  const defaultOptions = await this.getDefaultOptions({
22631
22633
  requestContext: options?.requestContext
22632
22634
  });
22633
- const mergedOptions = chunkRQBBPR64_cjs.deepMerge(
22635
+ const mergedOptions = chunkAH2ZNH4Y_cjs.deepMerge(
22634
22636
  defaultOptions,
22635
22637
  options ?? {}
22636
22638
  );
@@ -24204,7 +24206,7 @@ var TokenLimiterProcessor = class _TokenLimiterProcessor {
24204
24206
  return new TiktokenClass(this.customEncoding);
24205
24207
  });
24206
24208
  } else {
24207
- this.encoderPromise = chunkXW4B2RAG_cjs.getTiktoken();
24209
+ this.encoderPromise = chunkQVVWKMFM_cjs.getTiktoken();
24208
24210
  }
24209
24211
  }
24210
24212
  return this.encoderPromise;
@@ -24858,6 +24860,200 @@ var ToolCallFilter = class {
24858
24860
  return messages;
24859
24861
  }
24860
24862
  };
24863
+ var INSTRUCTION_FILE_NAMES = ["AGENTS.md", "CLAUDE.md", "CONTEXT.md"];
24864
+ var PATH_FIELDS = ["path", "file", "filePath", "target", "targetPath", "dest", "destination"];
24865
+ var REMINDER_TYPE = "dynamic-agents-md";
24866
+ function isRecord(value) {
24867
+ return typeof value === "object" && value !== null;
24868
+ }
24869
+ function isInstructionFileName(name) {
24870
+ return INSTRUCTION_FILE_NAMES.some((instructionFileName) => instructionFileName.toLowerCase() === name.toLowerCase());
24871
+ }
24872
+ function toAbsolutePath(candidatePath) {
24873
+ return path.normalize(path.isAbsolute(candidatePath) ? candidatePath : path.resolve(process.cwd(), candidatePath));
24874
+ }
24875
+ function findInstructionFileForPath(candidatePath, pathExists, isDirectory) {
24876
+ const absoluteCandidatePath = toAbsolutePath(candidatePath);
24877
+ const candidateName = path.basename(absoluteCandidatePath);
24878
+ if (isInstructionFileName(candidateName)) {
24879
+ return absoluteCandidatePath;
24880
+ }
24881
+ let currentDir = absoluteCandidatePath;
24882
+ if (!pathExists(currentDir) || !isDirectory(currentDir)) {
24883
+ currentDir = path.dirname(currentDir);
24884
+ }
24885
+ let previousDir;
24886
+ while (currentDir && currentDir !== previousDir) {
24887
+ for (const instructionFileName of INSTRUCTION_FILE_NAMES) {
24888
+ const instructionFilePath = path.join(currentDir, instructionFileName);
24889
+ if (pathExists(instructionFilePath)) {
24890
+ return instructionFilePath;
24891
+ }
24892
+ }
24893
+ previousDir = currentDir;
24894
+ currentDir = path.dirname(currentDir);
24895
+ }
24896
+ return void 0;
24897
+ }
24898
+ function escapeXml(value) {
24899
+ return value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");
24900
+ }
24901
+ function escapeXmlAttribute(value) {
24902
+ return escapeXml(value).replaceAll('"', "&quot;");
24903
+ }
24904
+ function getMessageText(message) {
24905
+ const parts = isRecord(message.content) ? message.content.parts : void 0;
24906
+ if (!Array.isArray(parts)) {
24907
+ return "";
24908
+ }
24909
+ return parts.filter((part) => isRecord(part) && part.type === "text" && typeof part.text === "string").map((part) => part.text).join("\n");
24910
+ }
24911
+ function getReminderMarkup(reminderText, instructionPath) {
24912
+ return `<system-reminder type="${REMINDER_TYPE}" path="${escapeXmlAttribute(instructionPath)}">${escapeXml(reminderText)}</system-reminder>`;
24913
+ }
24914
+ function getCompletedToolCalls(messageList) {
24915
+ const completed = [];
24916
+ for (const message of messageList.get.all.db()) {
24917
+ const parts = isRecord(message.content) ? message.content.parts : void 0;
24918
+ if (!Array.isArray(parts)) {
24919
+ continue;
24920
+ }
24921
+ for (const part of parts) {
24922
+ if (!isRecord(part) || part.type !== "tool-invocation") {
24923
+ continue;
24924
+ }
24925
+ const invocation = part.toolInvocation;
24926
+ if (!invocation || invocation.state !== "result" || typeof invocation.toolCallId !== "string") {
24927
+ continue;
24928
+ }
24929
+ completed.push({
24930
+ toolCallId: invocation.toolCallId,
24931
+ args: invocation.args
24932
+ });
24933
+ }
24934
+ }
24935
+ return completed;
24936
+ }
24937
+ function parseInvocationArgs(args) {
24938
+ if (isRecord(args)) {
24939
+ return args;
24940
+ }
24941
+ if (typeof args !== "string") {
24942
+ return void 0;
24943
+ }
24944
+ try {
24945
+ const parsed = JSON.parse(args);
24946
+ return isRecord(parsed) ? parsed : void 0;
24947
+ } catch {
24948
+ return void 0;
24949
+ }
24950
+ }
24951
+ var AgentsMDInjector = class {
24952
+ id = "agents-md-injector";
24953
+ name = "Agents.md Injector";
24954
+ description = "Injects AGENTS.md reminders when instruction file operations are detected";
24955
+ processorIndex = 0;
24956
+ reminderText;
24957
+ pathExists;
24958
+ isDirectory;
24959
+ readFile;
24960
+ getIgnoredInstructionPaths;
24961
+ constructor(options) {
24962
+ this.reminderText = options.reminderText;
24963
+ this.pathExists = options.pathExists ?? fs.existsSync;
24964
+ this.isDirectory = options.isDirectory ?? ((path) => {
24965
+ try {
24966
+ return fs.statSync(path).isDirectory();
24967
+ } catch {
24968
+ return false;
24969
+ }
24970
+ });
24971
+ this.readFile = options.readFile ?? ((path) => fs.readFileSync(path, "utf-8"));
24972
+ this.getIgnoredInstructionPaths = options.getIgnoredInstructionPaths;
24973
+ }
24974
+ async processInputStep(args) {
24975
+ const { messageList, rotateResponseMessageId } = args;
24976
+ const messages = messageList.get.all.db();
24977
+ const completedToolCalls = getCompletedToolCalls(messageList);
24978
+ const instructionPath = this.findReferencedInstructionPath(completedToolCalls);
24979
+ if (!instructionPath || this.isIgnoredInstructionPath(args, instructionPath)) {
24980
+ return messageList;
24981
+ }
24982
+ const reminderText = this.getReminderText(instructionPath);
24983
+ if (!reminderText) {
24984
+ return messageList;
24985
+ }
24986
+ const reminderMarkup = getReminderMarkup(reminderText, instructionPath);
24987
+ if (this.hasReminderAlready(messages, reminderMarkup)) {
24988
+ return messageList;
24989
+ }
24990
+ if (args.writer) {
24991
+ const chunk = {
24992
+ type: "data-system-reminder",
24993
+ data: {
24994
+ message: reminderText,
24995
+ reminderType: REMINDER_TYPE,
24996
+ path: instructionPath
24997
+ },
24998
+ transient: true
24999
+ };
25000
+ await args.writer.custom(chunk);
25001
+ }
25002
+ messageList.add(reminderMarkup, "user");
25003
+ rotateResponseMessageId?.();
25004
+ return messageList;
25005
+ }
25006
+ getReminderText(instructionPath) {
25007
+ try {
25008
+ const content = this.readFile(instructionPath).trim();
25009
+ if (content.length > 0) {
25010
+ return content;
25011
+ }
25012
+ } catch {
25013
+ }
25014
+ return this.reminderText?.trim() || void 0;
25015
+ }
25016
+ isIgnoredInstructionPath(args, instructionPath) {
25017
+ const ignoredPaths = this.getIgnoredInstructionPaths?.(args) ?? [];
25018
+ const normalizedInstructionPath = toAbsolutePath(instructionPath);
25019
+ return ignoredPaths.some((path) => toAbsolutePath(path) === normalizedInstructionPath);
25020
+ }
25021
+ findReferencedInstructionPath(toolCalls) {
25022
+ if (!Array.isArray(toolCalls)) {
25023
+ return void 0;
25024
+ }
25025
+ for (const toolCall of toolCalls) {
25026
+ const path = this.findInstructionPathInInvocation(toolCall);
25027
+ if (path) {
25028
+ return path;
25029
+ }
25030
+ }
25031
+ return void 0;
25032
+ }
25033
+ findInstructionPathInInvocation(invocation) {
25034
+ if (!isRecord(invocation)) {
25035
+ return void 0;
25036
+ }
25037
+ const args = parseInvocationArgs(invocation.args);
25038
+ if (!args) {
25039
+ return void 0;
25040
+ }
25041
+ for (const field of PATH_FIELDS) {
25042
+ const value = args[field];
25043
+ if (typeof value !== "string" || value.trim().length === 0) {
25044
+ continue;
25045
+ }
25046
+ const instructionPath = findInstructionFileForPath(value, this.pathExists, this.isDirectory);
25047
+ if (instructionPath) {
25048
+ return instructionPath;
25049
+ }
25050
+ }
25051
+ return void 0;
25052
+ }
25053
+ hasReminderAlready(messages, reminderMarkup) {
25054
+ return messages.some((message) => message.role === "user" && getMessageText(message).includes(reminderMarkup));
25055
+ }
25056
+ };
24861
25057
  var TOOL_SEARCH_TOKENIZE_OPTIONS = {
24862
25058
  lowercase: true,
24863
25059
  removePunctuation: false,
@@ -24889,7 +25085,7 @@ var ToolSearchProcessor = class {
24889
25085
  minScore: options.search?.minScore ?? 0
24890
25086
  };
24891
25087
  this.ttl = options.ttl ?? 36e5;
24892
- this.bm25Index = new chunkXW4B2RAG_cjs.BM25Index({}, TOOL_SEARCH_TOKENIZE_OPTIONS);
25088
+ this.bm25Index = new chunkQVVWKMFM_cjs.BM25Index({}, TOOL_SEARCH_TOKENIZE_OPTIONS);
24893
25089
  this.indexTools();
24894
25090
  if (this.ttl > 0) {
24895
25091
  this.scheduleCleanup();
@@ -25141,6 +25337,259 @@ var ToolSearchProcessor = class {
25141
25337
  };
25142
25338
  }
25143
25339
  };
25340
+ var SkillSearchProcessor = class {
25341
+ id = "skill-search";
25342
+ name = "Skill Search Processor";
25343
+ description = "Enables on-demand skill discovery and loading via search";
25344
+ workspace;
25345
+ searchConfig;
25346
+ ttl;
25347
+ cleanupIntervalId;
25348
+ /**
25349
+ * Thread-scoped state management for loaded skills with TTL support.
25350
+ * Maps threadId -> ThreadState (skills + timestamp)
25351
+ */
25352
+ threadLoadedSkills = /* @__PURE__ */ new Map();
25353
+ constructor(options) {
25354
+ this.workspace = options.workspace;
25355
+ this.searchConfig = {
25356
+ topK: options.search?.topK ?? 5,
25357
+ minScore: options.search?.minScore ?? 0
25358
+ };
25359
+ this.ttl = options.ttl ?? 36e5;
25360
+ if (this.ttl > 0) {
25361
+ this.scheduleCleanup();
25362
+ }
25363
+ }
25364
+ /**
25365
+ * Dispose of this processor, clearing the cleanup interval and all thread state.
25366
+ * Call this when the processor is no longer needed to prevent timer leaks.
25367
+ */
25368
+ dispose() {
25369
+ if (this.cleanupIntervalId) {
25370
+ clearInterval(this.cleanupIntervalId);
25371
+ this.cleanupIntervalId = void 0;
25372
+ }
25373
+ this.clearAllState();
25374
+ }
25375
+ /**
25376
+ * Get the workspace skills interface
25377
+ */
25378
+ get skills() {
25379
+ return this.workspace.skills;
25380
+ }
25381
+ /**
25382
+ * Get the thread ID from the request context, or use 'default' as fallback.
25383
+ */
25384
+ getThreadId(args) {
25385
+ return args.requestContext?.get(chunk5WBEMKE2_cjs.MASTRA_THREAD_ID_KEY) || "default";
25386
+ }
25387
+ /**
25388
+ * Get or create thread state for the given thread.
25389
+ * Updates the lastAccessed timestamp for TTL management.
25390
+ */
25391
+ getThreadState(threadId) {
25392
+ if (!this.threadLoadedSkills.has(threadId)) {
25393
+ this.threadLoadedSkills.set(threadId, {
25394
+ skills: /* @__PURE__ */ new Map(),
25395
+ lastAccessed: Date.now()
25396
+ });
25397
+ }
25398
+ const state = this.threadLoadedSkills.get(threadId);
25399
+ state.lastAccessed = Date.now();
25400
+ return state;
25401
+ }
25402
+ /**
25403
+ * Clear loaded skills for a specific thread.
25404
+ */
25405
+ clearState(threadId = "default") {
25406
+ this.threadLoadedSkills.delete(threadId);
25407
+ }
25408
+ /**
25409
+ * Clear all thread state for this processor instance.
25410
+ */
25411
+ clearAllState() {
25412
+ this.threadLoadedSkills.clear();
25413
+ }
25414
+ /**
25415
+ * Clean up stale thread state based on TTL.
25416
+ * @returns Number of threads cleaned up
25417
+ */
25418
+ cleanupStaleState() {
25419
+ if (this.ttl <= 0) return 0;
25420
+ const now = Date.now();
25421
+ let cleanedCount = 0;
25422
+ for (const [threadId, state] of this.threadLoadedSkills.entries()) {
25423
+ if (now - state.lastAccessed > this.ttl) {
25424
+ this.threadLoadedSkills.delete(threadId);
25425
+ cleanedCount++;
25426
+ }
25427
+ }
25428
+ return cleanedCount;
25429
+ }
25430
+ /**
25431
+ * Schedule periodic cleanup of stale thread state.
25432
+ */
25433
+ scheduleCleanup() {
25434
+ const cleanupInterval = Math.max(this.ttl / 2, 6e4);
25435
+ this.cleanupIntervalId = setInterval(() => {
25436
+ this.cleanupStaleState();
25437
+ }, cleanupInterval);
25438
+ if (this.cleanupIntervalId.unref) {
25439
+ this.cleanupIntervalId.unref();
25440
+ }
25441
+ }
25442
+ /**
25443
+ * Get statistics about current thread state.
25444
+ */
25445
+ getStateStats() {
25446
+ if (this.threadLoadedSkills.size === 0) {
25447
+ return { threadCount: 0, oldestAccessTime: null };
25448
+ }
25449
+ let oldest = Date.now();
25450
+ for (const state of this.threadLoadedSkills.values()) {
25451
+ if (state.lastAccessed < oldest) {
25452
+ oldest = state.lastAccessed;
25453
+ }
25454
+ }
25455
+ return {
25456
+ threadCount: this.threadLoadedSkills.size,
25457
+ oldestAccessTime: oldest
25458
+ };
25459
+ }
25460
+ /**
25461
+ * Manually trigger cleanup of stale state.
25462
+ * @returns Number of threads cleaned up
25463
+ */
25464
+ cleanupNow() {
25465
+ return this.cleanupStaleState();
25466
+ }
25467
+ async processInputStep(args) {
25468
+ const { tools, messageList } = args;
25469
+ const threadId = this.getThreadId(args);
25470
+ const threadState = this.getThreadState(threadId);
25471
+ const skills = this.skills;
25472
+ if (!skills) {
25473
+ return { tools };
25474
+ }
25475
+ if (args.stepNumber === 0) {
25476
+ await skills.maybeRefresh({ requestContext: args.requestContext });
25477
+ }
25478
+ messageList.addSystem(
25479
+ "To discover available skills, call search_skills with a keyword query. To load a skill's instructions, call load_skill with the skill name. Loaded skills provide context and instructions for the conversation."
25480
+ );
25481
+ const searchSkillTool = chunkK4NN2KQQ_cjs.createTool({
25482
+ id: "search_skills",
25483
+ description: "Search for available skills by keyword. Returns a list of matching skills with their names and descriptions. After finding a useful skill, use load_skill to load its instructions.",
25484
+ inputSchema: v4.z.object({
25485
+ query: v4.z.string().describe('Search keywords (e.g., "api design", "testing", "deployment")')
25486
+ }),
25487
+ outputSchema: v4.z.object({
25488
+ results: v4.z.array(
25489
+ v4.z.object({
25490
+ name: v4.z.string(),
25491
+ description: v4.z.string(),
25492
+ score: v4.z.number()
25493
+ })
25494
+ ),
25495
+ message: v4.z.string()
25496
+ }),
25497
+ execute: async ({ query }) => {
25498
+ const searchResults = await skills.search(query, {
25499
+ topK: this.searchConfig.topK,
25500
+ minScore: this.searchConfig.minScore
25501
+ });
25502
+ if (searchResults.length === 0) {
25503
+ return {
25504
+ results: [],
25505
+ message: `No skills found matching "${query}". Try different keywords.`
25506
+ };
25507
+ }
25508
+ const seen = /* @__PURE__ */ new Set();
25509
+ const uniqueResults = searchResults.filter((r) => {
25510
+ if (seen.has(r.skillName)) return false;
25511
+ seen.add(r.skillName);
25512
+ return true;
25513
+ });
25514
+ const skillList = await skills.list();
25515
+ const metaMap = new Map(skillList.map((s) => [s.name, s]));
25516
+ const results = uniqueResults.map((r) => {
25517
+ const meta = metaMap.get(r.skillName);
25518
+ const description = meta?.description ?? "";
25519
+ return {
25520
+ name: r.skillName,
25521
+ description: description.length > 150 ? description.slice(0, 147) + "..." : description,
25522
+ score: Math.round(r.score * 100) / 100
25523
+ };
25524
+ });
25525
+ return {
25526
+ results,
25527
+ message: `Found ${results.length} skill(s). Use load_skill with the exact skill name to load its instructions.`
25528
+ };
25529
+ }
25530
+ });
25531
+ const loadSkillTool = chunkK4NN2KQQ_cjs.createTool({
25532
+ id: "load_skill",
25533
+ description: "Load a skill's full instructions into the conversation. Call this after finding a skill with search_skills. The skill's instructions will be available as context.",
25534
+ inputSchema: v4.z.object({
25535
+ skillName: v4.z.string().describe("The exact name of the skill to load (from search results)")
25536
+ }),
25537
+ outputSchema: v4.z.object({
25538
+ success: v4.z.boolean(),
25539
+ message: v4.z.string(),
25540
+ skillName: v4.z.string().optional()
25541
+ }),
25542
+ execute: async ({ skillName }) => {
25543
+ if (threadState.skills.has(skillName)) {
25544
+ return {
25545
+ success: true,
25546
+ message: `Skill "${skillName}" is already loaded.`,
25547
+ skillName
25548
+ };
25549
+ }
25550
+ const skill = await skills.get(skillName);
25551
+ if (!skill) {
25552
+ const allSkills = await skills.list();
25553
+ const suggestions = allSkills.filter(
25554
+ (s) => s.name.toLowerCase().includes(skillName.toLowerCase()) || skillName.toLowerCase().includes(s.name.toLowerCase())
25555
+ ).slice(0, 3);
25556
+ let message = `Skill "${skillName}" not found.`;
25557
+ if (suggestions.length > 0) {
25558
+ message += ` Did you mean: ${suggestions.map((s) => s.name).join(", ")}?`;
25559
+ } else {
25560
+ message += " Use search_skills to find available skills.";
25561
+ }
25562
+ return { success: false, message };
25563
+ }
25564
+ threadState.skills.set(skillName, skill.instructions);
25565
+ return {
25566
+ success: true,
25567
+ message: `Skill "${skillName}" loaded. Its instructions are now available as context.`,
25568
+ skillName
25569
+ };
25570
+ }
25571
+ });
25572
+ for (const [skillName, instructions] of threadState.skills) {
25573
+ messageList.addSystem(`[Skill: ${skillName}]
25574
+
25575
+ ${instructions}`);
25576
+ }
25577
+ const metaTools = { search_skills: searchSkillTool, load_skill: loadSkillTool };
25578
+ if (tools) {
25579
+ for (const key of Object.keys(tools)) {
25580
+ if (key in metaTools) {
25581
+ console.warn(`[SkillSearchProcessor] User tool "${key}" conflicts with meta-tool and will be shadowed.`);
25582
+ }
25583
+ }
25584
+ }
25585
+ return {
25586
+ tools: {
25587
+ ...tools ?? {},
25588
+ ...metaTools
25589
+ }
25590
+ };
25591
+ }
25592
+ };
25144
25593
 
25145
25594
  // src/memory/working-memory-utils.ts
25146
25595
  var WORKING_MEMORY_START_TAG = "<working_memory>";
@@ -25308,7 +25757,7 @@ var MessageHistory = class {
25308
25757
  return messageList;
25309
25758
  }
25310
25759
  await this.persistMessages({ messages: messagesToSave, threadId, resourceId });
25311
- await new Promise((resolve) => setTimeout(resolve, 10));
25760
+ await new Promise((resolve2) => setTimeout(resolve2, 10));
25312
25761
  return messageList;
25313
25762
  }
25314
25763
  /**
@@ -25418,7 +25867,7 @@ var WorkingMemory = class {
25418
25867
  return messageList;
25419
25868
  }
25420
25869
  generateEmptyFromSchemaInternal(schema) {
25421
- const result = chunkRQBBPR64_cjs.generateEmptyFromSchema(schema);
25870
+ const result = chunkAH2ZNH4Y_cjs.generateEmptyFromSchema(schema);
25422
25871
  return Object.keys(result).length > 0 ? result : null;
25423
25872
  }
25424
25873
  getWorkingMemoryToolInstruction({
@@ -26063,7 +26512,7 @@ https://mastra.ai/en/docs/memory/semantic-recall`
26063
26512
  );
26064
26513
  }
26065
26514
  if (typeof config.embedder === "string") {
26066
- this.embedder = new chunkOC5SNZ6R_cjs.ModelRouterEmbeddingModel(config.embedder);
26515
+ this.embedder = new chunkOBHOUEDZ_cjs.ModelRouterEmbeddingModel(config.embedder);
26067
26516
  } else {
26068
26517
  this.embedder = config.embedder;
26069
26518
  }
@@ -26102,7 +26551,7 @@ https://mastra.ai/en/docs/memory/overview`
26102
26551
  }
26103
26552
  setEmbedder(embedder, embedderOptions) {
26104
26553
  if (typeof embedder === "string") {
26105
- this.embedder = new chunkOC5SNZ6R_cjs.ModelRouterEmbeddingModel(embedder);
26554
+ this.embedder = new chunkOBHOUEDZ_cjs.ModelRouterEmbeddingModel(embedder);
26106
26555
  } else {
26107
26556
  this.embedder = embedder;
26108
26557
  }
@@ -26199,7 +26648,7 @@ https://mastra.ai/en/docs/memory/overview`
26199
26648
  "The threads.generateTitle option has been moved. Use the top-level generateTitle option instead."
26200
26649
  );
26201
26650
  }
26202
- const mergedConfig = chunkRQBBPR64_cjs.deepMerge(this.threadConfig, config || {});
26651
+ const mergedConfig = chunkAH2ZNH4Y_cjs.deepMerge(this.threadConfig, config || {});
26203
26652
  if (typeof config?.workingMemory === "object" && config.workingMemory?.schema && typeof mergedConfig.workingMemory === "object") {
26204
26653
  mergedConfig.workingMemory.schema = config.workingMemory.schema;
26205
26654
  }
@@ -26551,7 +27000,7 @@ var MockMemory = class extends MastraMemory {
26551
27000
  } = {}) {
26552
27001
  super({
26553
27002
  name: "mock",
26554
- storage: storage || new chunkR67VVUDR_cjs.InMemoryStore(),
27003
+ storage: storage || new chunkSDSIVJMT_cjs.InMemoryStore(),
26555
27004
  options: {
26556
27005
  ...options,
26557
27006
  workingMemory: enableWorkingMemory ? { enabled: true, template: workingMemoryTemplate } : options?.workingMemory,
@@ -26755,6 +27204,7 @@ var MockMemory = class extends MastraMemory {
26755
27204
  };
26756
27205
 
26757
27206
  exports.Agent = Agent;
27207
+ exports.AgentsMDInjector = AgentsMDInjector;
26758
27208
  exports.BaseProcessor = BaseProcessor;
26759
27209
  exports.BatchPartsProcessor = BatchPartsProcessor;
26760
27210
  exports.ChunkFrom = ChunkFrom;
@@ -26790,6 +27240,7 @@ exports.PromptInjectionDetector = PromptInjectionDetector;
26790
27240
  exports.ReasoningPartSchema = ReasoningPartSchema;
26791
27241
  exports.Run = Run;
26792
27242
  exports.SemanticRecall = SemanticRecall;
27243
+ exports.SkillSearchProcessor = SkillSearchProcessor;
26793
27244
  exports.SkillsProcessor = SkillsProcessor;
26794
27245
  exports.SourcePartSchema = SourcePartSchema;
26795
27246
  exports.StepStartPartSchema = StepStartPartSchema;
@@ -26860,5 +27311,5 @@ exports.validateStepRequestContext = validateStepRequestContext;
26860
27311
  exports.validateStepResumeData = validateStepResumeData;
26861
27312
  exports.validateStepStateData = validateStepStateData;
26862
27313
  exports.validateStepSuspendData = validateStepSuspendData;
26863
- //# sourceMappingURL=chunk-5S7MQ37C.cjs.map
26864
- //# sourceMappingURL=chunk-5S7MQ37C.cjs.map
27314
+ //# sourceMappingURL=chunk-R47HLGU7.cjs.map
27315
+ //# sourceMappingURL=chunk-R47HLGU7.cjs.map