@hoilab/ada-cli 0.84.14 → 0.84.16

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.
@@ -38,6 +38,7 @@ import { buildSystemPrompt } from "./system-prompt.js";
38
38
  import { createLocalBashOperations } from "./tools/bash.js";
39
39
  import { createAllToolDefinitions } from "./tools/index.js";
40
40
  import { createMemoryEngineTools } from "./memory-engine/tools.js";
41
+ import { redactSensitive } from "./memory-engine/security.js";
41
42
  import { createToolDefinitionFromAgentTool } from "./tools/tool-definition-wrapper.js";
42
43
  import { addUsageToTotals, createUsageTotals } from "./usage-totals.js";
43
44
  /**
@@ -180,6 +181,22 @@ export class AgentSession {
180
181
  memoryEngine.setNotify((message, level) => {
181
182
  this._emit({ type: "notification", message, level });
182
183
  });
184
+ memoryEngine.setSensitiveDetected((reason) => {
185
+ // Persistent, highlighted message inside the conversation (CLI +
186
+ // desktop) — never a transient banner.
187
+ void this.sendCustomMessage({
188
+ customType: "sensitive-notice",
189
+ content: [
190
+ {
191
+ type: "text",
192
+ text: "Has introducido un dato sensible que no se almacenará en memoria. " +
193
+ reason,
194
+ },
195
+ ],
196
+ display: true,
197
+ details: { engine: "ada-memory", kind: "sensitive" },
198
+ });
199
+ });
183
200
  void memoryEngine.initialize().catch(() => {
184
201
  // Memory must never break the session.
185
202
  });
@@ -981,6 +998,15 @@ Task: given the CURRENT MEMORY and the LATEST CONVERSATION TURN, produce the COM
981
998
  expandedText = this._expandSkillCommand(expandedText);
982
999
  expandedText = expandPromptTemplate(expandedText, [...this.promptTemplates]);
983
1000
  }
1001
+ // Enterprise security: detect sensitive data in the raw text (warning
1002
+ // + audit) and redact it BEFORE it reaches the LLM, the session file
1003
+ // or the chat transcript. The user sees censored content; the raw
1004
+ // secret is never persisted anywhere.
1005
+ const memoryEngine = this._resourceLoader.getMemoryEngine();
1006
+ if (memoryEngine?.isInitialized) {
1007
+ memoryEngine.checkUserTextForSensitive(expandedText);
1008
+ expandedText = redactSensitive(expandedText, memoryEngine.privacyLevel);
1009
+ }
984
1010
  // If streaming, queue via steer() or followUp() based on option
985
1011
  if (this.isStreaming) {
986
1012
  if (!options?.streamingBehavior) {