@hoilab/ada-cli 0.84.12 → 0.84.13
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.
- package/dist/core/agent-session.d.ts +11 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +84 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/memory-engine/audit.d.ts +46 -0
- package/dist/core/memory-engine/audit.d.ts.map +1 -0
- package/dist/core/memory-engine/audit.js +165 -0
- package/dist/core/memory-engine/audit.js.map +1 -0
- package/dist/core/memory-engine/engine.d.ts +158 -0
- package/dist/core/memory-engine/engine.d.ts.map +1 -0
- package/dist/core/memory-engine/engine.js +948 -0
- package/dist/core/memory-engine/engine.js.map +1 -0
- package/dist/core/memory-engine/inverted-index.d.ts +46 -0
- package/dist/core/memory-engine/inverted-index.d.ts.map +1 -0
- package/dist/core/memory-engine/inverted-index.js +235 -0
- package/dist/core/memory-engine/inverted-index.js.map +1 -0
- package/dist/core/memory-engine/observation-store.d.ts +101 -0
- package/dist/core/memory-engine/observation-store.d.ts.map +1 -0
- package/dist/core/memory-engine/observation-store.js +429 -0
- package/dist/core/memory-engine/observation-store.js.map +1 -0
- package/dist/core/memory-engine/scanner.d.ts +11 -0
- package/dist/core/memory-engine/scanner.d.ts.map +1 -0
- package/dist/core/memory-engine/scanner.js +66 -0
- package/dist/core/memory-engine/scanner.js.map +1 -0
- package/dist/core/memory-engine/security.d.ts +31 -0
- package/dist/core/memory-engine/security.d.ts.map +1 -0
- package/dist/core/memory-engine/security.js +180 -0
- package/dist/core/memory-engine/security.js.map +1 -0
- package/dist/core/memory-engine/session-indexer.d.ts +71 -0
- package/dist/core/memory-engine/session-indexer.d.ts.map +1 -0
- package/dist/core/memory-engine/session-indexer.js +217 -0
- package/dist/core/memory-engine/session-indexer.js.map +1 -0
- package/dist/core/memory-engine/tools.d.ts +53 -0
- package/dist/core/memory-engine/tools.d.ts.map +1 -0
- package/dist/core/memory-engine/tools.js +220 -0
- package/dist/core/memory-engine/tools.js.map +1 -0
- package/dist/core/memory-engine/types.d.ts +134 -0
- package/dist/core/memory-engine/types.d.ts.map +1 -0
- package/dist/core/memory-engine/types.js +49 -0
- package/dist/core/memory-engine/types.js.map +1 -0
- package/dist/core/resource-loader.d.ts +4 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +27 -8
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/settings-manager.d.ts +48 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +75 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +2 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +12 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +3 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +121 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
|
@@ -37,6 +37,7 @@ import { createSyntheticSourceInfo } from "./source-info.js";
|
|
|
37
37
|
import { buildSystemPrompt } from "./system-prompt.js";
|
|
38
38
|
import { createLocalBashOperations } from "./tools/bash.js";
|
|
39
39
|
import { createAllToolDefinitions } from "./tools/index.js";
|
|
40
|
+
import { createMemoryEngineTools } from "./memory-engine/tools.js";
|
|
40
41
|
import { createToolDefinitionFromAgentTool } from "./tools/tool-definition-wrapper.js";
|
|
41
42
|
import { addUsageToTotals, createUsageTotals } from "./usage-totals.js";
|
|
42
43
|
/**
|
|
@@ -160,6 +161,29 @@ export class AgentSession {
|
|
|
160
161
|
activeToolNames: this._initialActiveToolNames,
|
|
161
162
|
includeAllExtensionTools: true,
|
|
162
163
|
});
|
|
164
|
+
// Ada Memory Engine: lazy-initialize (stores, migration, session index)
|
|
165
|
+
// and wire the LLM callback used by review/correction/flush. Best-effort
|
|
166
|
+
// and never blocks startup.
|
|
167
|
+
const memoryEngine = this._resourceLoader.getMemoryEngine();
|
|
168
|
+
if (memoryEngine) {
|
|
169
|
+
memoryEngine.setSessionId(this.sessionManager.getSessionId());
|
|
170
|
+
memoryEngine.setComplete(async (systemPrompt, userContent) => {
|
|
171
|
+
const model = this.model;
|
|
172
|
+
if (!model)
|
|
173
|
+
throw new Error("No model selected");
|
|
174
|
+
const result = await this._modelRuntime.completeSimple(model, {
|
|
175
|
+
systemPrompt,
|
|
176
|
+
messages: [{ role: "user", content: userContent }],
|
|
177
|
+
});
|
|
178
|
+
return contentText(result.content, "").trim();
|
|
179
|
+
});
|
|
180
|
+
memoryEngine.setNotify((message, level) => {
|
|
181
|
+
this._emit({ type: "notification", message, level });
|
|
182
|
+
});
|
|
183
|
+
void memoryEngine.initialize().catch(() => {
|
|
184
|
+
// Memory must never break the session.
|
|
185
|
+
});
|
|
186
|
+
}
|
|
163
187
|
}
|
|
164
188
|
get modelRuntime() {
|
|
165
189
|
return this._modelRuntime;
|
|
@@ -338,6 +362,23 @@ export class AgentSession {
|
|
|
338
362
|
// =========================================================================
|
|
339
363
|
// Automatic project memory (claude-mem style)
|
|
340
364
|
// =========================================================================
|
|
365
|
+
/** Live-index a message for the Memory Engine session search (layer 3c). */
|
|
366
|
+
_indexMessageForMemory(message) {
|
|
367
|
+
const memoryEngine = this._resourceLoader.getMemoryEngine();
|
|
368
|
+
if (!memoryEngine?.isInitialized)
|
|
369
|
+
return;
|
|
370
|
+
try {
|
|
371
|
+
memoryEngine.indexSessionMessage({
|
|
372
|
+
id: message.id,
|
|
373
|
+
role: message.role,
|
|
374
|
+
content: message.content,
|
|
375
|
+
timestamp: message.timestamp,
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
catch {
|
|
379
|
+
// Best-effort indexing.
|
|
380
|
+
}
|
|
381
|
+
}
|
|
341
382
|
static AUTO_MEMORIZE_MIN_INTERVAL_MS = 45_000;
|
|
342
383
|
static AUTO_MEMORIZE_SYSTEM_PROMPT = `You maintain the shared project memory of a coding project.
|
|
343
384
|
The memory is loaded into the context of every conversation of this project, so it must stay concise and durable.
|
|
@@ -438,11 +479,26 @@ Task: given the CURRENT MEMORY and the LATEST CONVERSATION TURN, produce the COM
|
|
|
438
479
|
await this._emitExtensionEvent(event);
|
|
439
480
|
// Notify all listeners
|
|
440
481
|
this._emit(event.type === "agent_end" ? { ...event, willRetry: this._willRetryAfterAgentEnd(event) } : event);
|
|
482
|
+
// Ada Memory Engine: track user turns / corrections, run the
|
|
483
|
+
// background review loop, and live-index messages for session search.
|
|
484
|
+
const memoryEngine = this._resourceLoader.getMemoryEngine();
|
|
485
|
+
if (memoryEngine?.isInitialized) {
|
|
486
|
+
if (event.type === "message_end") {
|
|
487
|
+
memoryEngine.onMessageEnd(event.message);
|
|
488
|
+
this._indexMessageForMemory(event.message);
|
|
489
|
+
}
|
|
490
|
+
else if (event.type === "turn_end") {
|
|
491
|
+
void memoryEngine.onTurnEnd({ message: event.message });
|
|
492
|
+
}
|
|
493
|
+
}
|
|
441
494
|
// Automatic project memory (claude-mem style): after each completed
|
|
442
495
|
// agent turn with real user interaction, distill durable facts into
|
|
443
496
|
// the shared project memory. Fire-and-forget; never blocks the turn.
|
|
497
|
+
// Disabled when the Memory Engine is active (its review loop replaces it).
|
|
444
498
|
if (event.type === "agent_end") {
|
|
445
|
-
|
|
499
|
+
if (!memoryEngine?.isInitialized) {
|
|
500
|
+
void this._maybeAutoMemorize(event);
|
|
501
|
+
}
|
|
446
502
|
}
|
|
447
503
|
// Handle session persistence
|
|
448
504
|
if (event.type === "message_end") {
|
|
@@ -644,6 +700,16 @@ Task: given the CURRENT MEMORY and the LATEST CONVERSATION TURN, produce the COM
|
|
|
644
700
|
catch {
|
|
645
701
|
// Dispose must succeed even if an abort hook throws.
|
|
646
702
|
}
|
|
703
|
+
// Ada Memory Engine: persist the session index (best-effort).
|
|
704
|
+
try {
|
|
705
|
+
const memoryEngine = this._resourceLoader.getMemoryEngine();
|
|
706
|
+
if (memoryEngine?.isInitialized) {
|
|
707
|
+
void memoryEngine.onShutdown();
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
|
+
catch {
|
|
711
|
+
// Dispose must succeed even if memory persistence fails.
|
|
712
|
+
}
|
|
647
713
|
this._extensionRunner.invalidate("This extension ctx is stale after session replacement or reload. Do not use a captured pi or command ctx after ctx.newSession(), ctx.fork(), ctx.switchSession(), or ctx.reload(). For newSession, fork, and switchSession, move post-replacement work into withSession and use the ctx passed to withSession. For reload, do not use the old ctx after await ctx.reload().");
|
|
648
714
|
this._disconnectFromAgent();
|
|
649
715
|
this._eventListeners = [];
|
|
@@ -723,6 +789,14 @@ Task: given the CURRENT MEMORY and the LATEST CONVERSATION TURN, produce the COM
|
|
|
723
789
|
this._baseSystemPrompt = this._rebuildSystemPrompt(validToolNames);
|
|
724
790
|
this.agent.state.systemPrompt = this._systemPromptOverride ?? this._baseSystemPrompt;
|
|
725
791
|
}
|
|
792
|
+
/**
|
|
793
|
+
* Rebuild the base system prompt (public) — used after settings changes
|
|
794
|
+
* that affect prompt content (e.g. memory injection mode).
|
|
795
|
+
*/
|
|
796
|
+
rebuildSystemPrompt() {
|
|
797
|
+
this._baseSystemPrompt = this._rebuildSystemPrompt(this.getActiveToolNames());
|
|
798
|
+
this.agent.state.systemPrompt = this._systemPromptOverride ?? this._baseSystemPrompt;
|
|
799
|
+
}
|
|
726
800
|
/** Whether compaction or branch summarization is currently running */
|
|
727
801
|
get isCompacting() {
|
|
728
802
|
return (this._autoCompactionAbortController !== undefined ||
|
|
@@ -2112,6 +2186,15 @@ Task: given the CURRENT MEMORY and the LATEST CONVERSATION TURN, produce the COM
|
|
|
2112
2186
|
if (!this.settingsManager.getProjectMemoryEnabled()) {
|
|
2113
2187
|
this._baseToolDefinitions.delete("update_project_memory");
|
|
2114
2188
|
}
|
|
2189
|
+
// Ada Memory Engine tools (memory_add/replace/remove/search,
|
|
2190
|
+
// session_search, scratchpad, memory_status). Exposed when enabled.
|
|
2191
|
+
const memoryEngine = this._resourceLoader.getMemoryEngine();
|
|
2192
|
+
if (memoryEngine && this.settingsManager.getProjectMemoryEnabled()) {
|
|
2193
|
+
const engineTools = createMemoryEngineTools(memoryEngine);
|
|
2194
|
+
for (const [name, tool] of Object.entries(engineTools)) {
|
|
2195
|
+
this._baseToolDefinitions.set(name, tool);
|
|
2196
|
+
}
|
|
2197
|
+
}
|
|
2115
2198
|
const extensionsResult = this._resourceLoader.getExtensions();
|
|
2116
2199
|
if (options.flagValues) {
|
|
2117
2200
|
for (const [name, value] of options.flagValues) {
|