mcp-shrimp-task-manager
Version:
Shrimp Task Manager is a task tool built for AI Agents, emphasizing chain-of-thought, reflection, and style consistency. It converts natural language into structured dev tasks with dependency tracking and iterative refinement, enabling agent-like develope
103 lines • 3.14 kB
JavaScript
import path from "path";
import { fileURLToPath } from "url";
// 取得專案根目錄
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const PROJECT_ROOT = path.resolve(__dirname, "../..");
// 全局 server 實例
let globalServer = null;
/**
* 設置全局 server 實例
*/
export function setGlobalServer(server) {
globalServer = server;
}
/**
* 獲取全局 server 實例
*/
export function getGlobalServer() {
return globalServer;
}
/**
* 取得 DATA_DIR 路徑
* 如果有 server 且支援 listRoots,則使用第一筆 file:// 開頭的 root + "/data"
* 否則使用環境變數或專案根目錄
*/
export async function getDataDir() {
const server = getGlobalServer();
let rootPath = null;
if (server) {
try {
const roots = await server.listRoots();
// 找出第一筆 file:// 開頭的 root
if (roots.roots && roots.roots.length > 0) {
const firstFileRoot = roots.roots.find((root) => root.uri.startsWith("file://"));
if (firstFileRoot) {
// 從 file:// URI 中提取實際路徑
rootPath = firstFileRoot.uri.replace("file://", "");
}
}
}
catch (error) {
console.error("Failed to get roots:", error);
}
}
// 處理 process.env.DATA_DIR
if (process.env.DATA_DIR) {
if (path.isAbsolute(process.env.DATA_DIR)) {
// 如果 DATA_DIR 是絕對路徑,返回 "DATA_DIR/rootPath最後一個資料夾名稱"
if (rootPath) {
const lastFolderName = path.basename(rootPath);
return path.join(process.env.DATA_DIR, lastFolderName);
}
else {
// 如果沒有 rootPath,直接返回 DATA_DIR
return process.env.DATA_DIR;
}
}
else {
// 如果 DATA_DIR 是相對路徑,返回 "rootPath/DATA_DIR"
if (rootPath) {
return path.join(rootPath, process.env.DATA_DIR);
}
else {
// 如果沒有 rootPath,使用 PROJECT_ROOT
return path.join(PROJECT_ROOT, process.env.DATA_DIR);
}
}
}
// 如果沒有 DATA_DIR,使用預設邏輯
if (rootPath) {
return path.join(rootPath, "data");
}
// 最後回退到專案根目錄
return path.join(PROJECT_ROOT, "data");
}
/**
* 取得任務檔案路徑
*/
export async function getTasksFilePath() {
const dataDir = await getDataDir();
return path.join(dataDir, "tasks.json");
}
/**
* 取得記憶體資料夾路徑
*/
export async function getMemoryDir() {
const dataDir = await getDataDir();
return path.join(dataDir, "memory");
}
/**
* 取得 WebGUI 檔案路徑
*/
export async function getWebGuiFilePath() {
const dataDir = await getDataDir();
return path.join(dataDir, "WebGUI.md");
}
/**
* 取得專案根目錄
*/
export function getProjectRoot() {
return PROJECT_ROOT;
}
//# sourceMappingURL=paths.js.map