@stackmemoryai/stackmemory
Version:
Project-scoped memory for AI coding tools. Durable context across sessions with MCP integration, frames, smart retrieval, Claude Code skills, and automatic hooks.
77 lines (76 loc) • 2.78 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 "whatsapp":
return process.env["STACKMEMORY_WHATSAPP"] !== "false" && !!process.env["TWILIO_ACCOUNT_SID"];
case "chromadb":
return process.env["STACKMEMORY_CHROMADB"] === "true";
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 "greptile":
return process.env["STACKMEMORY_GREPTILE"] !== "false" && !!process.env["GREPTILE_API_KEY"];
default:
return false;
}
}
function getFeatureFlags() {
return {
core: true,
linear: isFeatureEnabled("linear"),
whatsapp: isFeatureEnabled("whatsapp"),
chromadb: isFeatureEnabled("chromadb"),
aiSummaries: isFeatureEnabled("aiSummaries"),
skills: isFeatureEnabled("skills"),
ralph: isFeatureEnabled("ralph"),
greptile: isFeatureEnabled("greptile")
};
}
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(
` WhatsApp: ${flags.whatsapp ? "enabled" : "disabled (no Twilio)"}`
);
console.log(` ChromaDB: ${flags.chromadb ? "enabled" : "disabled"}`);
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(
` Greptile: ${flags.greptile ? "enabled" : "disabled (no GREPTILE_API_KEY)"}`
);
}
}
export {
getFeatureFlags,
isFeatureEnabled,
isLocalOnly,
logFeatureStatus
};
//# sourceMappingURL=feature-flags.js.map