dotfiles

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

list-processes.js.map (6236B)


      1 {
      2   "version": 3,
      3   "sources": ["../../src/tools/list-processes.ts", "../../src/utils/process.ts"],
      4   "sourcesContent": ["import { Process } from \"../types\";\nimport { fetchRunningProcesses } from \"../utils/process\";\n\ntype SortOrder = \"asc\" | \"desc\";\ntype SortField = keyof Process;\n\ntype Input = {\n  /**\n   * Optional array of search terms to filter processes.\n   * For single process search, provide an array with one element.\n   * Example: [\"Logi\"] will find all processes containing \"Logi\" in their name\n   * Example: [\"Chrome\", \"Firefox\"] will find all processes containing either \"Chrome\" or \"Firefox\"\n   */\n  searchTerm?: string[];\n  /**\n   * Field to sort by (defaults to 'mem')\n   */\n  sortBy?: SortField;\n  /**\n   * Sort order (defaults to 'desc')\n   */\n  sortOrder?: SortOrder;\n};\n\nconst sortProcesses = (processes: Process[], field: SortField = \"mem\", order: SortOrder = \"desc\"): Process[] => {\n  return [...processes].sort((a, b) => {\n    const valueA = a[field];\n    const valueB = b[field];\n\n    if (valueA === valueB) return 0;\n    if (valueA === undefined) return 1;\n    if (valueB === undefined) return -1;\n\n    const comparison = valueA < valueB ? -1 : 1;\n    return order === \"desc\" ? -comparison : comparison;\n  });\n};\n\nconst filterProcessesBySearchTerm = (processes: Process[], searchTerms?: string[]): Process[] => {\n  if (!searchTerms?.length) return processes;\n\n  return processes.filter((p) => {\n    const searchIn = `${p.path} ${p.processName} ${p.appName || \"\"}`.toLowerCase();\n    return searchTerms.some((term) => searchIn.includes(term.toLowerCase()));\n  });\n};\n\nconst validateResults = (processes: Process[], searchTerms?: string[]): void => {\n  if (processes.length === 0 && searchTerms?.length) {\n    throw new Error(`No processes found matching \"${searchTerms.join(\", \")}\"`);\n  }\n};\n\n/**\n * List out all running processes.\n * This tool can be called by AI to answer queries like,\n * \"What processes are running right now?\"\n * or \"list processes containing xyz\"\n * or \"list processes containing xyz and abc\"\n *\n * Throws an error if no processes are found matching the search terms\n */\nexport default async function listProcesses(input?: Input): Promise<Process[]> {\n  const processes = await fetchRunningProcesses();\n\n  const filteredProcesses = filterProcessesBySearchTerm(processes, input?.searchTerm);\n  validateResults(filteredProcesses, input?.searchTerm);\n\n  return sortProcesses(filteredProcesses, input?.sortBy, input?.sortOrder);\n}\n", "import { exec } from \"child_process\";\nimport { Process } from \"../types\";\n\n/**\n * Get all processes from the system\n * @returns Promise<Process[]> List of processes\n */\nexport async function fetchRunningProcesses(): Promise<Process[]> {\n  return new Promise((resolve, reject) => {\n    exec(`ps -eo pid,ppid,pcpu,rss,comm`, (err, stdout) => {\n      if (err != null) {\n        reject(err);\n        return;\n      }\n\n      const processes = stdout\n        .split(\"\\n\")\n        .map((line) => {\n          const defaultValue = [\"\", \"\", \"\", \"\", \"\", \"\"];\n          const regex = /(\\d+)\\s+(\\d+)\\s+(\\d+[.|,]\\d+)\\s+(\\d+)\\s+(.*)/;\n          const [, id, pid, cpu, mem, path] = line.match(regex) ?? defaultValue;\n          const processName = path.match(/[^/]*[^/]*$/i)?.[0] ?? \"\";\n          const isPrefPane = path.includes(\".prefPane\");\n          const isApp = path.includes(\".app/\");\n\n          return {\n            id: parseInt(id),\n            pid: parseInt(pid),\n            cpu: parseFloat(cpu),\n            mem: parseInt(mem),\n            type: isPrefPane ? \"prefPane\" : isApp ? \"app\" : \"binary\",\n            path,\n            processName,\n            appName: isApp ? path.match(/(?<=\\/)[^/]+(?=\\.app\\/)/)?.[0] : undefined,\n          } as Process;\n        })\n        .filter((process) => process.processName !== \"\");\n      resolve(processes);\n    });\n  });\n}\n"],
      5   "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GCAA,IAAAI,EAAqB,yBAOrB,eAAsBC,GAA4C,CAChE,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAW,IACtC,QAAK,gCAAiC,CAACC,EAAKC,IAAW,CACrD,GAAID,GAAO,KAAM,CACfD,EAAOC,CAAG,EACV,MACF,CAEA,IAAME,EAAYD,EACf,MAAM;AAAA,CAAI,EACV,IAAKE,GAAS,CACb,IAAMC,EAAe,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACtCC,EAAQ,+CACR,CAAC,CAAEC,EAAIC,EAAKC,EAAKC,EAAKC,CAAI,EAAIP,EAAK,MAAME,CAAK,GAAKD,EACnDO,EAAcD,EAAK,MAAM,cAAc,IAAI,CAAC,GAAK,GACjDE,EAAaF,EAAK,SAAS,WAAW,EACtCG,EAAQH,EAAK,SAAS,OAAO,EAEnC,MAAO,CACL,GAAI,SAASJ,CAAE,EACf,IAAK,SAASC,CAAG,EACjB,IAAK,WAAWC,CAAG,EACnB,IAAK,SAASC,CAAG,EACjB,KAAMG,EAAa,WAAaC,EAAQ,MAAQ,SAChD,KAAAH,EACA,YAAAC,EACA,QAASE,EAAQH,EAAK,MAAM,yBAAyB,IAAI,CAAC,EAAI,MAChE,CACF,CAAC,EACA,OAAQI,GAAYA,EAAQ,cAAgB,EAAE,EACjDhB,EAAQI,CAAS,CACnB,CAAC,CACH,CAAC,CACH,CDhBA,IAAMa,EAAgB,CAACC,EAAsBC,EAAmB,MAAOC,EAAmB,SACjF,CAAC,GAAGF,CAAS,EAAE,KAAK,CAACG,EAAGC,IAAM,CACnC,IAAMC,EAASF,EAAEF,CAAK,EAChBK,EAASF,EAAEH,CAAK,EAEtB,GAAII,IAAWC,EAAQ,MAAO,GAC9B,GAAID,IAAW,OAAW,MAAO,GACjC,GAAIC,IAAW,OAAW,MAAO,GAEjC,IAAMC,EAAaF,EAASC,EAAS,GAAK,EAC1C,OAAOJ,IAAU,OAAS,CAACK,EAAaA,CAC1C,CAAC,EAGGC,EAA8B,CAACR,EAAsBS,IACpDA,GAAa,OAEXT,EAAU,OAAQU,GAAM,CAC7B,IAAMC,EAAW,GAAGD,EAAE,IAAI,IAAIA,EAAE,WAAW,IAAIA,EAAE,SAAW,EAAE,GAAG,YAAY,EAC7E,OAAOD,EAAY,KAAMG,GAASD,EAAS,SAASC,EAAK,YAAY,CAAC,CAAC,CACzE,CAAC,EALgCZ,EAQ7Ba,EAAkB,CAACb,EAAsBS,IAAiC,CAC9E,GAAIT,EAAU,SAAW,GAAKS,GAAa,OACzC,MAAM,IAAI,MAAM,gCAAgCA,EAAY,KAAK,IAAI,CAAC,GAAG,CAE7E,EAWA,eAAOK,EAAqCC,EAAmC,CAC7E,IAAMf,EAAY,MAAMgB,EAAsB,EAExCC,EAAoBT,EAA4BR,EAAWe,GAAO,UAAU,EAClF,OAAAF,EAAgBI,EAAmBF,GAAO,UAAU,EAE7ChB,EAAckB,EAAmBF,GAAO,OAAQA,GAAO,SAAS,CACzE",
      6   "names": ["list_processes_exports", "__export", "listProcesses", "__toCommonJS", "import_child_process", "fetchRunningProcesses", "resolve", "reject", "err", "stdout", "processes", "line", "defaultValue", "regex", "id", "pid", "cpu", "mem", "path", "processName", "isPrefPane", "isApp", "process", "sortProcesses", "processes", "field", "order", "a", "b", "valueA", "valueB", "comparison", "filterProcessesBySearchTerm", "searchTerms", "p", "searchIn", "term", "validateResults", "listProcesses", "input", "fetchRunningProcesses", "filteredProcesses"]
      7 }