@stackmemoryai/stackmemory
Version:
Lossless, project-scoped memory for AI coding tools. Durable context across sessions with 56 MCP tools, FTS5 search, conductor orchestrator, loop/watch monitoring, snapshot capture, pre-flight overlap checks, Claude/Codex/OpenCode wrappers, Linear sync, a
80 lines (79 loc) • 2.03 kB
JavaScript
import { fileURLToPath as __fileURLToPath } from 'url';
import { dirname as __pathDirname } from 'path';
const __filename = __fileURLToPath(import.meta.url);
const __dirname = __pathDirname(__filename);
import { logger } from "../monitoring/logger.js";
class AutoContext {
frameManager;
constructor(frameManager) {
this.frameManager = frameManager;
}
/**
* Initialize a session context
*/
initializeSession(command) {
try {
const sessionFrame = this.frameManager.createFrame({
type: "task",
name: "Session",
inputs: {
command,
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
cwd: process.cwd()
}
});
logger.info("Session context initialized", {
frameId: sessionFrame,
depth: this.frameManager.getStackDepth()
});
} catch (error) {
logger.error("Failed to initialize session context", error);
}
}
/**
* Create a command context
*/
createCommandContext(command, args) {
try {
const frameId = this.frameManager.createFrame({
type: "tool_scope",
name: command,
inputs: args
});
logger.info("Command context created", {
frameId,
command,
depth: this.frameManager.getStackDepth()
});
return frameId;
} catch (error) {
logger.error("Failed to create command context", error);
return null;
}
}
/**
* Auto-save important context
*/
autoSaveContext(data, importance = 5) {
try {
const currentFrame = this.frameManager.getCurrentFrameId();
if (currentFrame) {
this.frameManager.addEvent(
"observation",
{
type: "context_save",
data,
importance,
timestamp: (/* @__PURE__ */ new Date()).toISOString()
},
currentFrame
);
}
} catch (error) {
logger.error("Failed to auto-save context", error);
}
}
}
export {
AutoContext
};