negotium 0.6.7 → 0.6.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3019,7 +3019,7 @@ var init_codex = __esm(async () => {
3019
3019
  });
3020
3020
 
3021
3021
  // ../../packages/core/src/version.ts
3022
- var NEGOTIUM_VERSION = "0.6.7";
3022
+ var NEGOTIUM_VERSION = "0.6.9";
3023
3023
 
3024
3024
  // ../../packages/core/src/agents/codex-native-multi-agent.ts
3025
3025
  import { spawn as spawn2 } from "child_process";
@@ -21185,7 +21185,7 @@ function protectMcpStdio(target) {
21185
21185
  // ../../packages/core/src/mcp/factories/system-health.ts
21186
21186
  init_mcp_helpers();
21187
21187
  import { execFile } from "child_process";
21188
- import { cpus, freemem, loadavg, totalmem } from "os";
21188
+ import { cpus, loadavg } from "os";
21189
21189
  import { promisify } from "util";
21190
21190
  import { McpServer as McpServer5 } from "@modelcontextprotocol/sdk/server/mcp.js";
21191
21191
  var execFileAsync = promisify(execFile);
@@ -21198,13 +21198,58 @@ async function shell(command, args) {
21198
21198
  return stdout.trim();
21199
21199
  }
21200
21200
  async function getMemoryPressure() {
21201
+ let level = "unknown";
21201
21202
  try {
21202
- const level = await shell("sysctl", ["-n", "kern.memorystatus_vm_pressure_level"]);
21203
- return level === "4" ? "critical" : level === "2" ? "warning" : "normal";
21203
+ const l = await shell("sysctl", ["-n", "kern.memorystatus_vm_pressure_level"]);
21204
+ level = l === "4" ? "critical" : l === "2" ? "warning" : "normal";
21205
+ } catch {}
21206
+ let freePct = null;
21207
+ try {
21208
+ const out = await shell("memory_pressure", []);
21209
+ const m = out.match(/System-wide memory free percentage:\s*(\d+)%/);
21210
+ if (m)
21211
+ freePct = Number(m[1]);
21212
+ } catch {}
21213
+ return { level, freePct };
21214
+ }
21215
+ async function getTotalMemBytes() {
21216
+ try {
21217
+ return Number(await shell("sysctl", ["-n", "hw.memsize"]));
21204
21218
  } catch {
21205
- return "unknown";
21219
+ return 0;
21206
21220
  }
21207
21221
  }
21222
+ async function getVmStatMemory() {
21223
+ const [out, totalFromSysctl] = await Promise.all([shell("vm_stat", []), getTotalMemBytes()]);
21224
+ const extract = (label) => {
21225
+ const m = out.match(new RegExp(`${label.replace(/\s/g, "\\s")}:\\s+(\\d+)`));
21226
+ return m ? Number(m[1]) : 0;
21227
+ };
21228
+ const pageSize = Number(out.match(/page size of (\d+) bytes/)?.[1]) || 16384;
21229
+ const pagesFree = extract("Pages free");
21230
+ const pagesActive = extract("Pages active");
21231
+ const pagesInactive = extract("Pages inactive");
21232
+ const pagesSpeculative = extract("Pages speculative");
21233
+ const pagesWired = extract("Pages wired down");
21234
+ const pagesPurgeable = extract("Pages purgeable");
21235
+ const pagesCompressor = extract("Pages occupied by compressor");
21236
+ const activeBytes = pagesActive * pageSize;
21237
+ const wiredBytes = pagesWired * pageSize;
21238
+ const usedBytes = activeBytes + wiredBytes;
21239
+ const cacheBytes = (pagesInactive + pagesSpeculative + pagesPurgeable) * pageSize;
21240
+ const compressorBytes = pagesCompressor * pageSize;
21241
+ const totalBytes = totalFromSysctl || (pagesFree + pagesActive + pagesInactive + pagesSpeculative + pagesWired + pagesPurgeable + pagesCompressor) * pageSize;
21242
+ const availableBytes = Math.max(0, totalBytes - usedBytes);
21243
+ return {
21244
+ usedBytes,
21245
+ cacheBytes,
21246
+ compressorBytes,
21247
+ availableBytes,
21248
+ totalBytes,
21249
+ activeBytes,
21250
+ wiredBytes
21251
+ };
21252
+ }
21208
21253
  async function getSwapUsage() {
21209
21254
  try {
21210
21255
  const output = await shell("sysctl", ["vm.swapusage"]);
@@ -21258,19 +21303,19 @@ async function getDisk() {
21258
21303
  }
21259
21304
  var defaultSystemHealthMcpHost = {
21260
21305
  async readSystemHealth() {
21261
- const [memoryPressure, swap, thermal, disk, processCount] = await Promise.all([
21306
+ const [memoryPressure, swap, thermal, disk, processCount, memory] = await Promise.all([
21262
21307
  getMemoryPressure(),
21263
21308
  getSwapUsage(),
21264
21309
  getThermal(),
21265
21310
  getDisk(),
21266
- getProcessCount()
21311
+ getProcessCount(),
21312
+ getVmStatMemory()
21267
21313
  ]);
21268
21314
  const load = loadavg();
21269
21315
  return {
21270
21316
  cpuLoad: [load[0] ?? 0, load[1] ?? 0, load[2] ?? 0],
21271
21317
  cpuCount: cpus().length,
21272
- memoryTotal: totalmem(),
21273
- memoryFree: freemem(),
21318
+ memory,
21274
21319
  memoryPressure,
21275
21320
  swap,
21276
21321
  disk,
@@ -21284,23 +21329,30 @@ function createSystemHealthMcpServer(host = defaultSystemHealthMcpHost) {
21284
21329
  server.tool("get_system_health", [
21285
21330
  "\uC2DC\uC2A4\uD15C \uC0C1\uD0DC\uB97C \uC870\uD68C\uD569\uB2C8\uB2E4.",
21286
21331
  "- CPU \uBD80\uD558 (load average 1/5/15\uBD84)",
21287
- "- \uBA54\uBAA8\uB9AC \uC0AC\uC6A9\uB7C9 + \uC555\uB825 (normal/warning/critical)",
21332
+ "- \uBA54\uBAA8\uB9AC: \uC571 \uC2E4\uC0AC\uC6A9(active+wired) / \uD30C\uC77C\uCE90\uC2DC(\uBC18\uD658\uAC00\uB2A5) / available / \uC555\uB825(free%\xB7level)",
21288
21333
  "- \uC2A4\uC651 \uC0AC\uC6A9\uB7C9",
21289
21334
  "- \uB514\uC2A4\uD06C \uC0AC\uC6A9\uB960 (/)",
21290
21335
  "- \uC5F4 \uC0C1\uD0DC (thermal)",
21291
- "- \uD504\uB85C\uC138\uC2A4 \uC218"
21336
+ "- \uD504\uB85C\uC138\uC2A4 \uC218",
21337
+ "",
21338
+ "\u26A0\uFE0F Chromium/playwright \uB4F1 \uBB34\uAC70\uC6B4 \uD504\uB85C\uC138\uC2A4 \uC2E4\uD589 \uAC00\uB2A5 \uC5EC\uBD80\uB294 '\uBA54\uBAA8\uB9AC \uC0AC\uC6A9%'\uAC00 \uC544\uB2C8\uB77C",
21339
+ " \uBA54\uBAA8\uB9AC \uC555\uB825 \uB808\uBCA8(normal/warning/critical) + available GB \uB85C \uD310\uB2E8\uD560 \uAC83.",
21340
+ " (\uD30C\uC77C \uCE90\uC2DC\uB294 \uC555\uBC15 \uC2DC \uC989\uC2DC \uBC18\uD658\uB418\uBBC0\uB85C used%\uC5D0 \uAC81\uBA39\uC9C0 \uB9D0 \uAC83)"
21292
21341
  ].join(`
21293
21342
  `), {}, async () => {
21294
21343
  const snapshot = await host.readSystemHealth();
21295
- const used = snapshot.memoryTotal - snapshot.memoryFree;
21296
- const memoryPercent = (used / snapshot.memoryTotal * 100).toFixed(1);
21344
+ const { memory } = snapshot;
21345
+ const usedPct = memory.totalBytes > 0 ? (memory.usedBytes / memory.totalBytes * 100).toFixed(1) : "0.0";
21297
21346
  const [load1, load5, load15] = snapshot.cpuLoad;
21347
+ const pressureStr = snapshot.memoryPressure.freePct !== null ? `${snapshot.memoryPressure.level} (free ${snapshot.memoryPressure.freePct}%)` : snapshot.memoryPressure.level;
21298
21348
  return mcpOk([
21299
21349
  "\uC2DC\uC2A4\uD15C \uC0C1\uD0DC",
21300
21350
  "",
21301
21351
  `CPU \uBD80\uD558: ${load1.toFixed(2)} / ${load5.toFixed(2)} / ${load15.toFixed(2)} (1/5/15\uBD84, \uCF54\uC5B4 ${snapshot.cpuCount}\uAC1C)`,
21302
- `\uBA54\uBAA8\uB9AC: ${fmtBytes(used)} / ${fmtBytes(snapshot.memoryTotal)} (${memoryPercent}%) \uC5EC\uC720: ${fmtBytes(snapshot.memoryFree)}`,
21303
- `\uBA54\uBAA8\uB9AC \uC555\uB825: ${snapshot.memoryPressure}`,
21352
+ `\uBA54\uBAA8\uB9AC \uC2E4\uC0AC\uC6A9: ${fmtBytes(memory.usedBytes)} / ${fmtBytes(memory.totalBytes)} (${usedPct}%) available: ${fmtBytes(memory.availableBytes)}`,
21353
+ ` (active ${fmtBytes(memory.activeBytes)} + wired ${fmtBytes(memory.wiredBytes)})`,
21354
+ `\uD30C\uC77C \uCE90\uC2DC: ${fmtBytes(memory.cacheBytes)} (\uC555\uBC15 \uC2DC \uBC18\uD658 \uAC00\uB2A5) | \uC555\uCD95 ${fmtBytes(memory.compressorBytes)}`,
21355
+ `\uBA54\uBAA8\uB9AC \uC555\uB825: ${pressureStr}`,
21304
21356
  `\uC2A4\uC651: ${snapshot.swap}`,
21305
21357
  `\uB514\uC2A4\uD06C(/): ${snapshot.disk}`,
21306
21358
  `\uC5F4 \uC0C1\uD0DC: ${snapshot.thermal}`,
@@ -21568,4 +21620,4 @@ export {
21568
21620
  createAgentHealthMcpServer
21569
21621
  };
21570
21622
 
21571
- //# debugId=B75B5A4C65EC41E364756E2164756E21
21623
+ //# debugId=CB128C8A11D2F7DC64756E2164756E21