@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
66 lines (65 loc) • 2.34 kB
JavaScript
import { fileURLToPath as __fileURLToPath } from 'url';
import { dirname as __pathDirname } from 'path';
const __filename = __fileURLToPath(import.meta.url);
const __dirname = __pathDirname(__filename);
function isLocalOnly() {
return process.env["STACKMEMORY_LOCAL"] === "true" || process.env["STACKMEMORY_LOCAL"] === "1" || process.env["LOCAL_ONLY"] === "true";
}
function isFeatureEnabled(feature) {
if (feature === "core") return true;
if (isLocalOnly()) return false;
switch (feature) {
case "linear":
return process.env["STACKMEMORY_LINEAR"] !== "false" && (!!process.env["LINEAR_API_KEY"] || !!process.env["LINEAR_OAUTH_TOKEN"]);
case "aiSummaries":
return process.env["STACKMEMORY_AI"] !== "false" && (!!process.env["ANTHROPIC_API_KEY"] || !!process.env["OPENAI_API_KEY"]);
case "skills":
return process.env["STACKMEMORY_SKILLS"] === "true" || process.env["STACKMEMORY_SKILLS"] === "1";
case "ralph":
return process.env["STACKMEMORY_RALPH"] !== "false";
case "multiProvider":
return process.env["STACKMEMORY_MULTI_PROVIDER"] === "true" || process.env["STACKMEMORY_MULTI_PROVIDER"] === "1";
default:
return false;
}
}
function getFeatureFlags() {
return {
core: true,
linear: isFeatureEnabled("linear"),
aiSummaries: isFeatureEnabled("aiSummaries"),
skills: isFeatureEnabled("skills"),
ralph: isFeatureEnabled("ralph"),
multiProvider: isFeatureEnabled("multiProvider")
};
}
function logFeatureStatus() {
const flags = getFeatureFlags();
const local = isLocalOnly();
console.log(
`StackMemory Mode: ${local ? "LOCAL (no external services)" : "FULL"}`
);
if (!local) {
console.log(
` Linear: ${flags.linear ? "enabled" : "disabled (no API key)"}`
);
console.log(
` AI Summaries: ${flags.aiSummaries ? "enabled" : "disabled (no API key)"}`
);
console.log(
` Skills: ${flags.skills ? "enabled" : "disabled (set STACKMEMORY_SKILLS=true)"}`
);
console.log(
` Ralph: ${flags.ralph ? "enabled" : "disabled (set STACKMEMORY_RALPH=true)"}`
);
console.log(
` MultiProvider: ${flags.multiProvider ? "enabled" : "disabled (set STACKMEMORY_MULTI_PROVIDER=true)"}`
);
}
}
export {
getFeatureFlags,
isFeatureEnabled,
isLocalOnly,
logFeatureStatus
};