@dexto/core 1.5.3 → 1.5.5

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 (143) hide show
  1. package/dist/agent/DextoAgent.cjs +190 -1
  2. package/dist/agent/DextoAgent.d.ts +71 -0
  3. package/dist/agent/DextoAgent.d.ts.map +1 -1
  4. package/dist/agent/DextoAgent.js +181 -1
  5. package/dist/agent/schemas.d.ts +51 -21
  6. package/dist/agent/schemas.d.ts.map +1 -1
  7. package/dist/context/compaction/overflow.cjs +6 -10
  8. package/dist/context/compaction/overflow.d.ts +14 -11
  9. package/dist/context/compaction/overflow.d.ts.map +1 -1
  10. package/dist/context/compaction/overflow.js +6 -10
  11. package/dist/context/compaction/providers/reactive-overflow-provider.cjs +15 -0
  12. package/dist/context/compaction/providers/reactive-overflow-provider.d.ts +15 -0
  13. package/dist/context/compaction/providers/reactive-overflow-provider.d.ts.map +1 -1
  14. package/dist/context/compaction/providers/reactive-overflow-provider.js +15 -0
  15. package/dist/context/compaction/schemas.cjs +22 -2
  16. package/dist/context/compaction/schemas.d.ts +45 -0
  17. package/dist/context/compaction/schemas.d.ts.map +1 -1
  18. package/dist/context/compaction/schemas.js +22 -2
  19. package/dist/context/compaction/strategies/reactive-overflow.cjs +168 -26
  20. package/dist/context/compaction/strategies/reactive-overflow.d.ts +22 -0
  21. package/dist/context/compaction/strategies/reactive-overflow.d.ts.map +1 -1
  22. package/dist/context/compaction/strategies/reactive-overflow.js +168 -26
  23. package/dist/context/compaction/types.d.ts +13 -1
  24. package/dist/context/compaction/types.d.ts.map +1 -1
  25. package/dist/context/manager.cjs +278 -31
  26. package/dist/context/manager.d.ts +192 -5
  27. package/dist/context/manager.d.ts.map +1 -1
  28. package/dist/context/manager.js +285 -32
  29. package/dist/context/types.d.ts +6 -0
  30. package/dist/context/types.d.ts.map +1 -1
  31. package/dist/context/utils.cjs +77 -11
  32. package/dist/context/utils.d.ts +86 -8
  33. package/dist/context/utils.d.ts.map +1 -1
  34. package/dist/context/utils.js +71 -11
  35. package/dist/errors/types.cjs +0 -2
  36. package/dist/errors/types.d.ts +1 -5
  37. package/dist/errors/types.d.ts.map +1 -1
  38. package/dist/errors/types.js +0 -2
  39. package/dist/events/index.cjs +2 -0
  40. package/dist/events/index.d.ts +21 -6
  41. package/dist/events/index.d.ts.map +1 -1
  42. package/dist/events/index.js +2 -0
  43. package/dist/llm/executor/stream-processor.cjs +104 -28
  44. package/dist/llm/executor/stream-processor.d.ts +7 -0
  45. package/dist/llm/executor/stream-processor.d.ts.map +1 -1
  46. package/dist/llm/executor/stream-processor.js +104 -28
  47. package/dist/llm/executor/turn-executor.cjs +147 -30
  48. package/dist/llm/executor/turn-executor.d.ts +28 -10
  49. package/dist/llm/executor/turn-executor.d.ts.map +1 -1
  50. package/dist/llm/executor/turn-executor.js +147 -30
  51. package/dist/llm/formatters/vercel.cjs +36 -28
  52. package/dist/llm/formatters/vercel.d.ts.map +1 -1
  53. package/dist/llm/formatters/vercel.js +36 -28
  54. package/dist/llm/services/factory.cjs +3 -2
  55. package/dist/llm/services/factory.d.ts +3 -1
  56. package/dist/llm/services/factory.d.ts.map +1 -1
  57. package/dist/llm/services/factory.js +3 -2
  58. package/dist/llm/services/vercel.cjs +31 -6
  59. package/dist/llm/services/vercel.d.ts +18 -3
  60. package/dist/llm/services/vercel.d.ts.map +1 -1
  61. package/dist/llm/services/vercel.js +31 -6
  62. package/dist/session/chat-session.cjs +29 -13
  63. package/dist/session/chat-session.d.ts +6 -4
  64. package/dist/session/chat-session.d.ts.map +1 -1
  65. package/dist/session/chat-session.js +29 -13
  66. package/dist/session/session-manager.cjs +11 -0
  67. package/dist/session/session-manager.d.ts +7 -0
  68. package/dist/session/session-manager.d.ts.map +1 -1
  69. package/dist/session/session-manager.js +11 -0
  70. package/dist/session/title-generator.cjs +2 -2
  71. package/dist/session/title-generator.js +2 -2
  72. package/dist/systemPrompt/in-built-prompts.cjs +36 -0
  73. package/dist/systemPrompt/in-built-prompts.d.ts +18 -1
  74. package/dist/systemPrompt/in-built-prompts.d.ts.map +1 -1
  75. package/dist/systemPrompt/in-built-prompts.js +25 -0
  76. package/dist/systemPrompt/manager.cjs +22 -0
  77. package/dist/systemPrompt/manager.d.ts +10 -0
  78. package/dist/systemPrompt/manager.d.ts.map +1 -1
  79. package/dist/systemPrompt/manager.js +22 -0
  80. package/dist/systemPrompt/registry.cjs +2 -1
  81. package/dist/systemPrompt/registry.d.ts +1 -1
  82. package/dist/systemPrompt/registry.d.ts.map +1 -1
  83. package/dist/systemPrompt/registry.js +2 -1
  84. package/dist/systemPrompt/schemas.cjs +7 -0
  85. package/dist/systemPrompt/schemas.d.ts +13 -13
  86. package/dist/systemPrompt/schemas.d.ts.map +1 -1
  87. package/dist/systemPrompt/schemas.js +7 -0
  88. package/dist/telemetry/telemetry.cjs +12 -5
  89. package/dist/telemetry/telemetry.d.ts.map +1 -1
  90. package/dist/telemetry/telemetry.js +12 -5
  91. package/dist/utils/index.cjs +3 -1
  92. package/dist/utils/index.d.ts +1 -0
  93. package/dist/utils/index.d.ts.map +1 -1
  94. package/dist/utils/index.js +1 -0
  95. package/package.json +15 -5
  96. package/dist/filesystem/error-codes.cjs +0 -53
  97. package/dist/filesystem/error-codes.d.ts +0 -31
  98. package/dist/filesystem/error-codes.d.ts.map +0 -1
  99. package/dist/filesystem/error-codes.js +0 -30
  100. package/dist/filesystem/errors.cjs +0 -303
  101. package/dist/filesystem/errors.d.ts +0 -109
  102. package/dist/filesystem/errors.d.ts.map +0 -1
  103. package/dist/filesystem/errors.js +0 -280
  104. package/dist/filesystem/filesystem-service.cjs +0 -534
  105. package/dist/filesystem/filesystem-service.d.ts +0 -97
  106. package/dist/filesystem/filesystem-service.d.ts.map +0 -1
  107. package/dist/filesystem/filesystem-service.js +0 -501
  108. package/dist/filesystem/index.cjs +0 -37
  109. package/dist/filesystem/index.d.ts +0 -11
  110. package/dist/filesystem/index.d.ts.map +0 -1
  111. package/dist/filesystem/index.js +0 -11
  112. package/dist/filesystem/path-validator.cjs +0 -250
  113. package/dist/filesystem/path-validator.d.ts +0 -103
  114. package/dist/filesystem/path-validator.d.ts.map +0 -1
  115. package/dist/filesystem/path-validator.js +0 -217
  116. package/dist/filesystem/types.cjs +0 -16
  117. package/dist/filesystem/types.d.ts +0 -175
  118. package/dist/filesystem/types.d.ts.map +0 -1
  119. package/dist/filesystem/types.js +0 -0
  120. package/dist/process/command-validator.cjs +0 -554
  121. package/dist/process/command-validator.d.ts +0 -49
  122. package/dist/process/command-validator.d.ts.map +0 -1
  123. package/dist/process/command-validator.js +0 -531
  124. package/dist/process/error-codes.cjs +0 -47
  125. package/dist/process/error-codes.d.ts +0 -25
  126. package/dist/process/error-codes.d.ts.map +0 -1
  127. package/dist/process/error-codes.js +0 -24
  128. package/dist/process/errors.cjs +0 -244
  129. package/dist/process/errors.d.ts +0 -87
  130. package/dist/process/errors.d.ts.map +0 -1
  131. package/dist/process/errors.js +0 -221
  132. package/dist/process/index.cjs +0 -37
  133. package/dist/process/index.d.ts +0 -11
  134. package/dist/process/index.d.ts.map +0 -1
  135. package/dist/process/index.js +0 -11
  136. package/dist/process/process-service.cjs +0 -497
  137. package/dist/process/process-service.d.ts +0 -69
  138. package/dist/process/process-service.d.ts.map +0 -1
  139. package/dist/process/process-service.js +0 -464
  140. package/dist/process/types.cjs +0 -16
  141. package/dist/process/types.d.ts +0 -107
  142. package/dist/process/types.d.ts.map +0 -1
  143. package/dist/process/types.js +0 -0
@@ -4,6 +4,7 @@ import { LLMServiceConfig } from './types.js';
4
4
  import type { IDextoLogger } from '../../logger/v2/types.js';
5
5
  import { ToolSet } from '../../tools/types.js';
6
6
  import { ContextManager } from '../../context/manager.js';
7
+ import type { CompactionConfigInput } from '../../context/compaction/schemas.js';
7
8
  import type { SessionEventBus } from '../../events/index.js';
8
9
  import type { IConversationHistoryProvider } from '../../session/history/types.js';
9
10
  import type { SystemPromptManager } from '../../systemPrompt/manager.js';
@@ -36,27 +37,37 @@ export declare class VercelLLMService {
36
37
  private resourceManager;
37
38
  private messageQueue;
38
39
  private compactionStrategy;
40
+ private modelLimits;
41
+ private compactionThresholdPercent;
39
42
  /**
40
43
  * Helper to extract model ID from LanguageModel union type (string | LanguageModelV2)
41
44
  */
42
45
  private getModelId;
43
- constructor(toolManager: ToolManager, model: LanguageModel, systemPromptManager: SystemPromptManager, historyProvider: IConversationHistoryProvider, sessionEventBus: SessionEventBus, config: ValidatedLLMConfig, sessionId: string, resourceManager: ResourceManager, logger: IDextoLogger, compactionStrategy?: import('../../context/compaction/types.js').ICompactionStrategy | null);
46
+ constructor(toolManager: ToolManager, model: LanguageModel, systemPromptManager: SystemPromptManager, historyProvider: IConversationHistoryProvider, sessionEventBus: SessionEventBus, config: ValidatedLLMConfig, sessionId: string, resourceManager: ResourceManager, logger: IDextoLogger, compactionStrategy?: import('../../context/compaction/types.js').ICompactionStrategy | null, compactionConfig?: CompactionConfigInput);
44
47
  getAllTools(): Promise<ToolSet>;
45
48
  /**
46
49
  * Create a TurnExecutor instance for executing the agent loop.
47
50
  */
48
51
  private createTurnExecutor;
52
+ /**
53
+ * Result from streaming a response.
54
+ */
55
+ static StreamResult: {
56
+ text: string;
57
+ };
49
58
  /**
50
59
  * Stream a response for the given content.
51
60
  * Primary method for running conversations with multi-image support.
52
61
  *
53
62
  * @param content - String or ContentPart[] (text, images, files)
54
63
  * @param options - { signal?: AbortSignal }
55
- * @returns The assistant's text response
64
+ * @returns Object with text response
56
65
  */
57
66
  stream(content: ContentInput, options?: {
58
67
  signal?: AbortSignal;
59
- }): Promise<string>;
68
+ }): Promise<{
69
+ text: string;
70
+ }>;
60
71
  /**
61
72
  * Get configuration information about the LLM service
62
73
  * @returns Configuration object with provider and model information
@@ -70,5 +81,9 @@ export declare class VercelLLMService {
70
81
  * Get the message queue for external access (e.g., queueing messages while busy)
71
82
  */
72
83
  getMessageQueue(): MessageQueueService;
84
+ /**
85
+ * Get the compaction strategy for external access (e.g., session-native compaction)
86
+ */
87
+ getCompactionStrategy(): import('../../context/compaction/types.js').ICompactionStrategy | null;
73
88
  }
74
89
  //# sourceMappingURL=vercel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../../src/llm/services/vercel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAqB,MAAM,IAAI,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAIxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD;;;;;;;;;;;;;GAaG;AACH,qBAIa,gBAAgB;IACzB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,kBAAkB,CAEf;IAEX;;OAEG;IACH,OAAO,CAAC,UAAU;gBAKd,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,aAAa,EACpB,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,EAAE,4BAA4B,EAC7C,eAAe,EAAE,eAAe,EAChC,MAAM,EAAE,kBAAkB,EAC1B,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,eAAe,EAChC,MAAM,EAAE,YAAY,EACpB,kBAAkB,CAAC,EAAE,OAAO,mCAAmC,EAAE,mBAAmB,GAAG,IAAI;IAkC/F,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAyB1B;;;;;;;OAOG;IACG,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAsDxF;;;OAGG;IACH,SAAS,IAAI,gBAAgB;IA+B7B;;OAEG;IACH,iBAAiB,IAAI,cAAc,CAAC,OAAO,CAAC;IAI5C;;OAEG;IACH,eAAe,IAAI,mBAAmB;CAGzC"}
1
+ {"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../../src/llm/services/vercel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAqB,MAAM,IAAI,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAEjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAIxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD;;;;;;;;;;;;;GAaG;AACH,qBAIa,gBAAgB;IACzB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,kBAAkB,CAEf;IACX,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,0BAA0B,CAAS;IAE3C;;OAEG;IACH,OAAO,CAAC,UAAU;gBAKd,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,aAAa,EACpB,mBAAmB,EAAE,mBAAmB,EACxC,eAAe,EAAE,4BAA4B,EAC7C,eAAe,EAAE,eAAe,EAChC,MAAM,EAAE,kBAAkB,EAC1B,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,eAAe,EAChC,MAAM,EAAE,YAAY,EACpB,kBAAkB,CAAC,EAAE,OAAO,mCAAmC,EAAE,mBAAmB,GAAG,IAAI,EAC3F,gBAAgB,CAAC,EAAE,qBAAqB;IAuD5C,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA0B1B;;OAEG;IACH,OAAc,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAE7C;;;;;;;OAOG;IACG,MAAM,CACR,OAAO,EAAE,YAAY,EACrB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACnC,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAwD5B;;;OAGG;IACH,SAAS,IAAI,gBAAgB;IA+B7B;;OAEG;IACH,iBAAiB,IAAI,cAAc,CAAC,OAAO,CAAC;IAI5C;;OAEG;IACH,eAAe,IAAI,mBAAmB;IAItC;;OAEG;IACH,qBAAqB,IACf,OAAO,mCAAmC,EAAE,mBAAmB,GAC/D,IAAI;CAGb"}
@@ -29,13 +29,15 @@ class VercelLLMService {
29
29
  resourceManager;
30
30
  messageQueue;
31
31
  compactionStrategy;
32
+ modelLimits;
33
+ compactionThresholdPercent;
32
34
  /**
33
35
  * Helper to extract model ID from LanguageModel union type (string | LanguageModelV2)
34
36
  */
35
37
  getModelId() {
36
38
  return typeof this.model === "string" ? this.model : this.model.modelId;
37
39
  }
38
- constructor(toolManager, model, systemPromptManager, historyProvider, sessionEventBus, config, sessionId, resourceManager, logger, compactionStrategy) {
40
+ constructor(toolManager, model, systemPromptManager, historyProvider, sessionEventBus, config, sessionId, resourceManager, logger, compactionStrategy, compactionConfig) {
39
41
  this.logger = logger.createChild(DextoLogComponent.LLM);
40
42
  this.model = model;
41
43
  this.config = config;
@@ -44,9 +46,20 @@ class VercelLLMService {
44
46
  this.sessionId = sessionId;
45
47
  this.resourceManager = resourceManager;
46
48
  this.compactionStrategy = compactionStrategy ?? null;
49
+ this.compactionThresholdPercent = compactionConfig?.thresholdPercent ?? 0.9;
47
50
  this.messageQueue = new MessageQueueService(this.sessionEventBus, this.logger);
48
51
  const formatter = new VercelMessageFormatter(this.logger);
49
52
  const maxInputTokens = getEffectiveMaxInputTokens(config, this.logger);
53
+ let effectiveContextWindow = maxInputTokens;
54
+ if (compactionConfig?.maxContextTokens !== void 0) {
55
+ effectiveContextWindow = Math.min(maxInputTokens, compactionConfig.maxContextTokens);
56
+ this.logger.debug(
57
+ `Compaction: Using maxContextTokens override: ${compactionConfig.maxContextTokens} (model max: ${maxInputTokens})`
58
+ );
59
+ }
60
+ this.modelLimits = {
61
+ contextWindow: effectiveContextWindow
62
+ };
50
63
  this.contextManager = new ContextManager(
51
64
  config,
52
65
  formatter,
@@ -86,19 +99,23 @@ class VercelLLMService {
86
99
  { provider: this.config.provider, model: this.getModelId() },
87
100
  this.logger,
88
101
  this.messageQueue,
89
- void 0,
90
- // modelLimits - TurnExecutor will use defaults
102
+ this.modelLimits,
91
103
  externalSignal,
92
- this.compactionStrategy
104
+ this.compactionStrategy,
105
+ this.compactionThresholdPercent
93
106
  );
94
107
  }
108
+ /**
109
+ * Result from streaming a response.
110
+ */
111
+ static StreamResult;
95
112
  /**
96
113
  * Stream a response for the given content.
97
114
  * Primary method for running conversations with multi-image support.
98
115
  *
99
116
  * @param content - String or ContentPart[] (text, images, files)
100
117
  * @param options - { signal?: AbortSignal }
101
- * @returns The assistant's text response
118
+ * @returns Object with text response
102
119
  */
103
120
  async stream(content, options) {
104
121
  const activeSpan = trace.getActiveSpan();
@@ -128,7 +145,9 @@ class VercelLLMService {
128
145
  const executor = this.createTurnExecutor(options?.signal);
129
146
  const contributorContext = { mcpManager: this.toolManager.getMcpManager() };
130
147
  const result = await executor.execute(contributorContext, true);
131
- return result.text ?? "";
148
+ return {
149
+ text: result.text ?? ""
150
+ };
132
151
  });
133
152
  }
134
153
  /**
@@ -173,6 +192,12 @@ class VercelLLMService {
173
192
  getMessageQueue() {
174
193
  return this.messageQueue;
175
194
  }
195
+ /**
196
+ * Get the compaction strategy for external access (e.g., session-native compaction)
197
+ */
198
+ getCompactionStrategy() {
199
+ return this.compactionStrategy;
200
+ }
176
201
  }
177
202
  _init = __decoratorStart(null);
178
203
  VercelLLMService = __decorateElement(_init, 0, "VercelLLMService", _VercelLLMService_decorators, VercelLLMService);
@@ -169,8 +169,10 @@ class ChatSession {
169
169
  // Pass ResourceManager for blob storage
170
170
  this.logger,
171
171
  // Pass logger for dependency injection
172
- compactionStrategy
172
+ compactionStrategy,
173
173
  // Pass compaction strategy
174
+ runtimeConfig.compaction
175
+ // Pass compaction config for threshold settings
174
176
  );
175
177
  this.logger.debug(`ChatSession ${this.id}: Services initialized with storage`);
176
178
  }
@@ -210,15 +212,15 @@ class ChatSession {
210
212
  *
211
213
  * @param content - String or ContentPart[] (text, images, files)
212
214
  * @param options - { signal?: AbortSignal }
213
- * @returns Promise that resolves to the AI's response text
215
+ * @returns Promise that resolves to object with text response
214
216
  *
215
217
  * @example
216
218
  * ```typescript
217
219
  * // Text only
218
- * const response = await session.stream('What is the weather?');
220
+ * const { text } = await session.stream('What is the weather?');
219
221
  *
220
222
  * // Multiple images
221
- * const response = await session.stream([
223
+ * const { text } = await session.stream([
222
224
  * { type: 'text', text: 'Compare these images' },
223
225
  * { type: 'image', image: base64Data1, mimeType: 'image/png' },
224
226
  * { type: 'image', image: base64Data2, mimeType: 'image/png' }
@@ -275,10 +277,10 @@ class ChatSession {
275
277
  modifiedParts = modifiedParts.filter((p) => p.type !== "text");
276
278
  modifiedParts.unshift({ type: "text", text: modifiedBeforePayload.text });
277
279
  }
278
- const response = await this.llmService.stream(modifiedParts, { signal });
280
+ const streamResult = await this.llmService.stream(modifiedParts, { signal });
279
281
  const llmConfig = this.services.stateManager.getLLMConfig(this.id);
280
282
  const beforeResponsePayload = {
281
- content: response,
283
+ content: streamResult.text,
282
284
  provider: llmConfig.provider,
283
285
  model: llmConfig.model,
284
286
  sessionId: this.id
@@ -295,7 +297,9 @@ class ChatSession {
295
297
  abortSignal: signal
296
298
  }
297
299
  );
298
- return modifiedResponsePayload.content;
300
+ return {
301
+ text: modifiedResponsePayload.content
302
+ };
299
303
  } catch (error) {
300
304
  const aborted = error instanceof Error && error.name === "AbortError" || typeof error === "object" && error !== null && error.aborted === true;
301
305
  if (aborted) {
@@ -307,13 +311,23 @@ class ChatSession {
307
311
  try {
308
312
  const history = await this.getHistory();
309
313
  const lastAssistant = history.filter((m) => m.role === "assistant").pop();
310
- if (lastAssistant && typeof lastAssistant.content === "string") {
311
- return lastAssistant.content;
314
+ if (lastAssistant) {
315
+ if (typeof lastAssistant.content === "string") {
316
+ return { text: lastAssistant.content };
317
+ }
318
+ if (Array.isArray(lastAssistant.content)) {
319
+ const text = lastAssistant.content.filter(
320
+ (part) => part.type === "text"
321
+ ).map((part) => part.text).join("");
322
+ if (text) {
323
+ return { text };
324
+ }
325
+ }
312
326
  }
313
327
  } catch {
314
328
  this.logger.debug("Failed to retrieve partial response from history on cancel");
315
329
  }
316
- return "";
330
+ return { text: "" };
317
331
  }
318
332
  if (error instanceof import_errors.DextoRuntimeError && error.code === import_error_codes.PluginErrorCode.PLUGIN_BLOCKED_EXECUTION && error.scope === import_errors.ErrorScope.PLUGIN && error.type === import_errors.ErrorType.FORBIDDEN) {
319
333
  const textContent = parts.filter((p) => p.type === "text").map((p) => p.text).join("\n");
@@ -327,7 +341,7 @@ class ChatSession {
327
341
  `Failed to save blocked interaction to history: ${saveError instanceof Error ? saveError.message : String(saveError)}`
328
342
  );
329
343
  }
330
- return error.message;
344
+ return { text: error.message };
331
345
  }
332
346
  this.logger.error(
333
347
  `Error in ChatSession.stream: ${error instanceof Error ? error.message : String(error)}`
@@ -396,7 +410,7 @@ class ChatSession {
396
410
  * @see {@link ContextManager.resetConversation} for the underlying implementation
397
411
  */
398
412
  async reset() {
399
- await this.historyProvider.clearHistory();
413
+ await this.llmService.getContextManager().resetConversation();
400
414
  this.services.agentEventBus.emit("session:reset", {
401
415
  sessionId: this.id
402
416
  });
@@ -455,8 +469,10 @@ class ChatSession {
455
469
  this.id,
456
470
  this.services.resourceManager,
457
471
  this.logger,
458
- compactionStrategy
472
+ compactionStrategy,
459
473
  // Pass compaction strategy
474
+ runtimeConfig.compaction
475
+ // Pass compaction config for threshold settings
460
476
  );
461
477
  this.llmService = newLLMService;
462
478
  this.logger.info(
@@ -162,15 +162,15 @@ export declare class ChatSession {
162
162
  *
163
163
  * @param content - String or ContentPart[] (text, images, files)
164
164
  * @param options - { signal?: AbortSignal }
165
- * @returns Promise that resolves to the AI's response text
165
+ * @returns Promise that resolves to object with text response
166
166
  *
167
167
  * @example
168
168
  * ```typescript
169
169
  * // Text only
170
- * const response = await session.stream('What is the weather?');
170
+ * const { text } = await session.stream('What is the weather?');
171
171
  *
172
172
  * // Multiple images
173
- * const response = await session.stream([
173
+ * const { text } = await session.stream([
174
174
  * { type: 'text', text: 'Compare these images' },
175
175
  * { type: 'image', image: base64Data1, mimeType: 'image/png' },
176
176
  * { type: 'image', image: base64Data2, mimeType: 'image/png' }
@@ -179,7 +179,9 @@ export declare class ChatSession {
179
179
  */
180
180
  stream(content: ContentInput, options?: {
181
181
  signal?: AbortSignal;
182
- }): Promise<string>;
182
+ }): Promise<{
183
+ text: string;
184
+ }>;
183
185
  /**
184
186
  * Combine multiple abort signals into one.
185
187
  */
@@ -1 +1 @@
1
- {"version":3,"file":"chat-session.d.ts","sourceRoot":"","sources":["../../src/session/chat-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-session.d.ts","sourceRoot":"","sources":["../../src/session/chat-session.ts"],"names":[],"mappings":"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"}
@@ -150,8 +150,10 @@ class ChatSession {
150
150
  // Pass ResourceManager for blob storage
151
151
  this.logger,
152
152
  // Pass logger for dependency injection
153
- compactionStrategy
153
+ compactionStrategy,
154
154
  // Pass compaction strategy
155
+ runtimeConfig.compaction
156
+ // Pass compaction config for threshold settings
155
157
  );
156
158
  this.logger.debug(`ChatSession ${this.id}: Services initialized with storage`);
157
159
  }
@@ -191,15 +193,15 @@ class ChatSession {
191
193
  *
192
194
  * @param content - String or ContentPart[] (text, images, files)
193
195
  * @param options - { signal?: AbortSignal }
194
- * @returns Promise that resolves to the AI's response text
196
+ * @returns Promise that resolves to object with text response
195
197
  *
196
198
  * @example
197
199
  * ```typescript
198
200
  * // Text only
199
- * const response = await session.stream('What is the weather?');
201
+ * const { text } = await session.stream('What is the weather?');
200
202
  *
201
203
  * // Multiple images
202
- * const response = await session.stream([
204
+ * const { text } = await session.stream([
203
205
  * { type: 'text', text: 'Compare these images' },
204
206
  * { type: 'image', image: base64Data1, mimeType: 'image/png' },
205
207
  * { type: 'image', image: base64Data2, mimeType: 'image/png' }
@@ -256,10 +258,10 @@ class ChatSession {
256
258
  modifiedParts = modifiedParts.filter((p) => p.type !== "text");
257
259
  modifiedParts.unshift({ type: "text", text: modifiedBeforePayload.text });
258
260
  }
259
- const response = await this.llmService.stream(modifiedParts, { signal });
261
+ const streamResult = await this.llmService.stream(modifiedParts, { signal });
260
262
  const llmConfig = this.services.stateManager.getLLMConfig(this.id);
261
263
  const beforeResponsePayload = {
262
- content: response,
264
+ content: streamResult.text,
263
265
  provider: llmConfig.provider,
264
266
  model: llmConfig.model,
265
267
  sessionId: this.id
@@ -276,7 +278,9 @@ class ChatSession {
276
278
  abortSignal: signal
277
279
  }
278
280
  );
279
- return modifiedResponsePayload.content;
281
+ return {
282
+ text: modifiedResponsePayload.content
283
+ };
280
284
  } catch (error) {
281
285
  const aborted = error instanceof Error && error.name === "AbortError" || typeof error === "object" && error !== null && error.aborted === true;
282
286
  if (aborted) {
@@ -288,13 +292,23 @@ class ChatSession {
288
292
  try {
289
293
  const history = await this.getHistory();
290
294
  const lastAssistant = history.filter((m) => m.role === "assistant").pop();
291
- if (lastAssistant && typeof lastAssistant.content === "string") {
292
- return lastAssistant.content;
295
+ if (lastAssistant) {
296
+ if (typeof lastAssistant.content === "string") {
297
+ return { text: lastAssistant.content };
298
+ }
299
+ if (Array.isArray(lastAssistant.content)) {
300
+ const text = lastAssistant.content.filter(
301
+ (part) => part.type === "text"
302
+ ).map((part) => part.text).join("");
303
+ if (text) {
304
+ return { text };
305
+ }
306
+ }
293
307
  }
294
308
  } catch {
295
309
  this.logger.debug("Failed to retrieve partial response from history on cancel");
296
310
  }
297
- return "";
311
+ return { text: "" };
298
312
  }
299
313
  if (error instanceof DextoRuntimeError && error.code === PluginErrorCode.PLUGIN_BLOCKED_EXECUTION && error.scope === ErrorScope.PLUGIN && error.type === ErrorType.FORBIDDEN) {
300
314
  const textContent = parts.filter((p) => p.type === "text").map((p) => p.text).join("\n");
@@ -308,7 +322,7 @@ class ChatSession {
308
322
  `Failed to save blocked interaction to history: ${saveError instanceof Error ? saveError.message : String(saveError)}`
309
323
  );
310
324
  }
311
- return error.message;
325
+ return { text: error.message };
312
326
  }
313
327
  this.logger.error(
314
328
  `Error in ChatSession.stream: ${error instanceof Error ? error.message : String(error)}`
@@ -377,7 +391,7 @@ class ChatSession {
377
391
  * @see {@link ContextManager.resetConversation} for the underlying implementation
378
392
  */
379
393
  async reset() {
380
- await this.historyProvider.clearHistory();
394
+ await this.llmService.getContextManager().resetConversation();
381
395
  this.services.agentEventBus.emit("session:reset", {
382
396
  sessionId: this.id
383
397
  });
@@ -436,8 +450,10 @@ class ChatSession {
436
450
  this.id,
437
451
  this.services.resourceManager,
438
452
  this.logger,
439
- compactionStrategy
453
+ compactionStrategy,
440
454
  // Pass compaction strategy
455
+ runtimeConfig.compaction
456
+ // Pass compaction config for threshold settings
441
457
  );
442
458
  this.llmService = newLLMService;
443
459
  this.logger.info(
@@ -516,6 +516,17 @@ class SessionManager {
516
516
  sessionTTL: this.sessionTTL
517
517
  };
518
518
  }
519
+ /**
520
+ * Get the raw session data for a session ID.
521
+ *
522
+ * @param sessionId The session ID
523
+ * @returns Session data if found, undefined otherwise
524
+ */
525
+ async getSessionData(sessionId) {
526
+ await this.ensureInitialized();
527
+ const sessionKey = `session:${sessionId}`;
528
+ return await this.services.storageManager.getDatabase().get(sessionKey);
529
+ }
519
530
  /**
520
531
  * Cleanup all sessions and resources.
521
532
  * This should be called when shutting down the application.
@@ -204,6 +204,13 @@ export declare class SessionManager {
204
204
  maxSessions: number;
205
205
  sessionTTL: number;
206
206
  }>;
207
+ /**
208
+ * Get the raw session data for a session ID.
209
+ *
210
+ * @param sessionId The session ID
211
+ * @returns Session data if found, undefined otherwise
212
+ */
213
+ getSessionData(sessionId: string): Promise<SessionData | undefined>;
207
214
  /**
208
215
  * Cleanup all sessions and resources.
209
216
  * This should be called when shutting down the application.
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/session/session-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/session/session-manager.ts"],"names":[],"mappings":"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"}
@@ -494,6 +494,17 @@ class SessionManager {
494
494
  sessionTTL: this.sessionTTL
495
495
  };
496
496
  }
497
+ /**
498
+ * Get the raw session data for a session ID.
499
+ *
500
+ * @param sessionId The session ID
501
+ * @returns Session data if found, undefined otherwise
502
+ */
503
+ async getSessionData(sessionId) {
504
+ await this.ensureInitialized();
505
+ const sessionKey = `session:${sessionId}`;
506
+ return await this.services.storageManager.getDatabase().get(sessionKey);
507
+ }
497
508
  /**
498
509
  * Cleanup all sessions and resources.
499
510
  * This should be called when shutting down the application.
@@ -52,11 +52,11 @@ async function generateSessionTitle(config, toolManager, systemPromptManager, re
52
52
  "Message:",
53
53
  sanitizeUserText(userText, 512)
54
54
  ].join("\n");
55
- const result = await tempService.stream(
55
+ const streamResult = await tempService.stream(
56
56
  instruction,
57
57
  controller ? { signal: controller.signal } : void 0
58
58
  );
59
- const processed = postProcessTitle(result);
59
+ const processed = postProcessTitle(streamResult.text);
60
60
  if (!processed) {
61
61
  return { error: "LLM returned empty title" };
62
62
  }
@@ -29,11 +29,11 @@ async function generateSessionTitle(config, toolManager, systemPromptManager, re
29
29
  "Message:",
30
30
  sanitizeUserText(userText, 512)
31
31
  ].join("\n");
32
- const result = await tempService.stream(
32
+ const streamResult = await tempService.stream(
33
33
  instruction,
34
34
  controller ? { signal: controller.signal } : void 0
35
35
  );
36
- const processed = postProcessTitle(result);
36
+ const processed = postProcessTitle(streamResult.text);
37
37
  if (!processed) {
38
38
  return { error: "LLM returned empty title" };
39
39
  }
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,10 +17,19 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
19
  };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
  var in_built_prompts_exports = {};
20
30
  __export(in_built_prompts_exports, {
21
31
  getCurrentDate: () => getCurrentDate,
32
+ getEnvironmentInfo: () => getEnvironmentInfo,
22
33
  getResourceData: () => getResourceData
23
34
  });
24
35
  module.exports = __toCommonJS(in_built_prompts_exports);
@@ -26,6 +37,30 @@ async function getCurrentDate(_context) {
26
37
  const date = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
27
38
  return `<date>Current date: ${date}</date>`;
28
39
  }
40
+ async function getEnvironmentInfo(_context) {
41
+ if (typeof process === "undefined" || !process.cwd) {
42
+ return "<environment>Environment info not available in browser context</environment>";
43
+ }
44
+ try {
45
+ const [{ existsSync }, { platform }, { join }] = await Promise.all([
46
+ import("fs"),
47
+ import("os"),
48
+ import("path")
49
+ ]);
50
+ const cwd = process.cwd();
51
+ const os = platform();
52
+ const isGitRepo = existsSync(join(cwd, ".git"));
53
+ const shell = process.env.SHELL || (os === "win32" ? "cmd.exe" : "/bin/sh");
54
+ return `<environment>
55
+ <cwd>${cwd}</cwd>
56
+ <platform>${os}</platform>
57
+ <is_git_repo>${isGitRepo}</is_git_repo>
58
+ <shell>${shell}</shell>
59
+ </environment>`;
60
+ } catch {
61
+ return "<environment>Environment info not available</environment>";
62
+ }
63
+ }
29
64
  async function getResourceData(context) {
30
65
  const resources = await context.mcpManager.listAllResources();
31
66
  if (!resources || resources.length === 0) {
@@ -58,5 +93,6 @@ ${parts.join("\n")}
58
93
  // Annotate the CommonJS export names for ESM import in node:
59
94
  0 && (module.exports = {
60
95
  getCurrentDate,
96
+ getEnvironmentInfo,
61
97
  getResourceData
62
98
  });
@@ -10,8 +10,25 @@ import { DynamicContributorContext } from './types.js';
10
10
  * - Place all dynamic prompt-generating functions in this file.
11
11
  * - Also update the `registry.ts` file to register the new function.
12
12
  * - Use XML tags to indicate the start and end of the dynamic prompt - they are known to improve performance
13
- * - Each function should be named clearly to reflect its purpose (e.g., getCurrentDate, getResourceData).
13
+ * - Each function should be named clearly to reflect its purpose (e.g., getCurrentDate, getEnvironmentInfo).
14
+ */
15
+ /**
16
+ * Returns the current date (without time to prevent KV-cache invalidation).
14
17
  */
15
18
  export declare function getCurrentDate(_context: DynamicContributorContext): Promise<string>;
19
+ /**
20
+ * Returns environment information to help agents understand their execution context.
21
+ * This is kept separate from date to optimize caching (env info rarely changes).
22
+ *
23
+ * Includes:
24
+ * - Working directory (cwd)
25
+ * - Platform (os)
26
+ * - Whether the cwd is a git repository
27
+ * - Default shell
28
+ *
29
+ * Note: This function uses dynamic imports for Node.js modules to maintain browser compatibility.
30
+ * In browser environments, it returns a placeholder message.
31
+ */
32
+ export declare function getEnvironmentInfo(_context: DynamicContributorContext): Promise<string>;
16
33
  export declare function getResourceData(context: DynamicContributorContext): Promise<string>;
17
34
  //# sourceMappingURL=in-built-prompts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"in-built-prompts.d.ts","sourceRoot":"","sources":["../../src/systemPrompt/in-built-prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD;;;;;;;;;;;;GAYG;AAEH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,yBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC,CAIzF;AAGD,wBAAsB,eAAe,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC,CAiCzF"}
1
+ {"version":3,"file":"in-built-prompts.d.ts","sourceRoot":"","sources":["../../src/systemPrompt/in-built-prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD;;;;;;;;;;;;GAYG;AAEH;;GAEG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,yBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC,CAGzF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,yBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4B7F;AAGD,wBAAsB,eAAe,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC,CAiCzF"}