grix-connector 2.0.8 → 2.0.10

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.
@@ -2538,7 +2538,7 @@ function normalizeAibotSessionTarget(raw) {
2538
2538
 
2539
2539
  // src/openclaw/client.ts
2540
2540
  import { randomUUID } from "node:crypto";
2541
- import os5 from "node:os";
2541
+ import os6 from "node:os";
2542
2542
 
2543
2543
  // src/openclaw/protocol-send.ts
2544
2544
  var AIBOT_PROTOCOL_SEND_RATE_LIMIT = 8;
@@ -2809,6 +2809,15 @@ async function handleFileListAction(params, context) {
2809
2809
  const files = await listWindowsDrives();
2810
2810
  return { status: "ok", result: { files, current_path: "" } };
2811
2811
  }
2812
+ if (params.parent_id === "::root") {
2813
+ if (process.platform === "win32") {
2814
+ const files = await listWindowsDrives();
2815
+ return { status: "ok", result: { files, current_path: "" } };
2816
+ }
2817
+ params = { ...params, parent_id: "/" };
2818
+ } else if (params.parent_id === "::home") {
2819
+ params = { ...params, parent_id: os2.homedir() };
2820
+ }
2812
2821
  const cwd = await context.resolveCwd(params.session_id);
2813
2822
  const fallbackDir = context.fallbackDir ?? os2.homedir();
2814
2823
  const normalizedParentId = params.parent_id ? normalizePlatformPath(params.parent_id) : null;
@@ -2883,8 +2892,29 @@ function isWindowsAbsolutePath(p) {
2883
2892
  return /^[A-Za-z]:[/\\]/.test(p) || p.startsWith("\\\\");
2884
2893
  }
2885
2894
 
2895
+ // src/core/util/codex-output-policy.ts
2896
+ var DEFAULT_VISIBLE_PHASES = Object.freeze(["commentary", "final_answer"]);
2897
+ var EMPTY_PHASES = Object.freeze([]);
2898
+ function parsePhaseEnvVar(envValue) {
2899
+ if (!envValue || !envValue.trim()) return EMPTY_PHASES;
2900
+ const phases = envValue.split(",").map((phase) => phase.trim().toLowerCase()).filter(Boolean);
2901
+ return phases.length > 0 ? Object.freeze(phases) : EMPTY_PHASES;
2902
+ }
2903
+ function loadVisiblePhases() {
2904
+ const configured = parsePhaseEnvVar(process.env.CODEX_VISIBLE_PHASES);
2905
+ return configured.length > 0 ? configured : DEFAULT_VISIBLE_PHASES;
2906
+ }
2907
+ var USER_VISIBLE_AGENT_MESSAGE_PHASES = loadVisiblePhases();
2908
+ var USER_HIDDEN_AGENT_MESSAGE_PHASES = parsePhaseEnvVar(process.env.CODEX_HIDDEN_PHASES);
2909
+
2910
+ // src/core/util/host-info.ts
2911
+ import os3 from "node:os";
2912
+ function getMachineName() {
2913
+ return os3.hostname();
2914
+ }
2915
+
2886
2916
  // src/openclaw/shared/file-operations/create-folder.ts
2887
- import * as os3 from "node:os";
2917
+ import * as os4 from "node:os";
2888
2918
  import * as path3 from "node:path";
2889
2919
  async function handleCreateFolderAction(params, context) {
2890
2920
  if (!params.name || typeof params.name !== "string") {
@@ -2910,7 +2940,7 @@ async function handleCreateFolderAction(params, context) {
2910
2940
  };
2911
2941
  }
2912
2942
  const cwd = context.resolveCwd ? await context.resolveCwd(params.session_id) : null;
2913
- const fallbackDir = context.fallbackDir ?? os3.homedir();
2943
+ const fallbackDir = context.fallbackDir ?? os4.homedir();
2914
2944
  const normalizedParentId = params.parent_id ? normalizePlatformPath(params.parent_id) : null;
2915
2945
  const parentDir = normalizedParentId ? path3.resolve(normalizedParentId) : cwd || fallbackDir;
2916
2946
  let realParent;
@@ -3245,7 +3275,7 @@ async function handleFileListLocalAction(payload) {
3245
3275
  return {
3246
3276
  action_id: payload.action_id,
3247
3277
  status: result.status,
3248
- result: result.result,
3278
+ result: result.result ? { ...result.result, machine_name: getMachineName() } : result.result,
3249
3279
  error_code: result.error_code,
3250
3280
  error_msg: result.error_msg
3251
3281
  };
@@ -3360,7 +3390,7 @@ ${lines.join("\n\n")}`;
3360
3390
 
3361
3391
  // src/openclaw/shared/file-serve/tailnet-ip.ts
3362
3392
  import { execFile } from "node:child_process";
3363
- import * as os4 from "node:os";
3393
+ import * as os5 from "node:os";
3364
3394
  function isTailnetIPv4(addr) {
3365
3395
  const parts = addr.split(".");
3366
3396
  if (parts.length !== 4) return false;
@@ -3382,7 +3412,7 @@ function detectViaCLI() {
3382
3412
  });
3383
3413
  }
3384
3414
  function detectViaInterfaces() {
3385
- const interfaces = os4.networkInterfaces();
3415
+ const interfaces = os5.networkInterfaces();
3386
3416
  for (const list of Object.values(interfaces)) {
3387
3417
  if (!list) continue;
3388
3418
  for (const info of list) {
@@ -3434,10 +3464,10 @@ function buildAuthPayload(account, authMetadata = {}, tailnetIP) {
3434
3464
  capabilities: [...STABLE_AUTH_CAPABILITIES],
3435
3465
  local_actions: [...STABLE_LOCAL_ACTION_TYPES],
3436
3466
  host_meta: {
3437
- hostname: os5.hostname(),
3438
- platform: os5.platform(),
3439
- arch: os5.arch(),
3440
- os_release: os5.release(),
3467
+ hostname: getMachineName(),
3468
+ platform: os6.platform(),
3469
+ arch: os6.arch(),
3470
+ os_release: os6.release(),
3441
3471
  ...tailnetIP !== void 0 && { tailnet_ip: tailnetIP }
3442
3472
  },
3443
3473
  skills: scanOpenClawSkills().map((s) => ({ name: s.name, description: s.description, source: s.source }))
@@ -8965,7 +8995,7 @@ var TOOLS = [
8965
8995
  },
8966
8996
  {
8967
8997
  name: "grix_file_link",
8968
- description: "Create a direct, tailnet-only download link for a local file on this host. Use this whenever the user asks you to send, share, give, or deliver a file that exists on the machine where you run (a report, log, build artifact, export, or any local path). It returns a ready-to-use Markdown link in the `markdown` field \u2014 include that exact Markdown link in your reply so the user can click and download the file directly over the shared Tailscale network. Each link is one-time and expires, so call this again to produce a fresh link every time you deliver a file. Requires this host to be on a tailnet (Tailscale running).",
8998
+ description: "Create a direct, tailnet-only download link for a local file on this host. Use this whenever the user asks you to send, share, give, or deliver a file that exists on the machine where you run (a report, log, build artifact, export, or any local path). It returns a ready-to-use Markdown link in the `markdown` field \u2014 include that exact Markdown link in your reply so the user can click and download the file directly over the shared Tailscale network. Each link is one-time and expires, so call this again to produce a fresh link every time you deliver a file. The download link is HTTPS, served by a built-in self-signed CA. The result also returns `ca_install_url`: the first time you share a link with a user (or whenever their browser warns the cert is untrusted), also give them this CA install link so they can install and trust it once \u2014 after that all download links work without warnings. Requires this host to be on a tailnet (Tailscale running).",
8969
8999
  inputSchema: {
8970
9000
  type: "object",
8971
9001
  properties: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "grix-connector",
3
- "version": "2.0.8",
3
+ "version": "2.0.10",
4
4
  "description": "Connect local AI coding agents (Claude, Codex, Gemini, Qwen, DeepSeek, Cursor, OpenCode, Pi, OpenHuman, Reasonix) to the Grix scheduling platform. Also serves as an OpenClaw plugin for Grix channel transport.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -68,6 +68,7 @@
68
68
  "license": "MIT",
69
69
  "devDependencies": {
70
70
  "@types/node": "^25.6.0",
71
+ "@types/node-forge": "^1.3.14",
71
72
  "@types/ws": "^8.18.1",
72
73
  "esbuild": "^0.27.7",
73
74
  "fast-check": "^4.8.0",
@@ -89,6 +90,7 @@
89
90
  "@modelcontextprotocol/sdk": "^1.29.0",
90
91
  "@sentry/node": "^10.57.0",
91
92
  "extract-zip": "^2.0.1",
93
+ "node-forge": "^1.4.0",
92
94
  "socket.io-client": "^4.8.3",
93
95
  "ws": "^8.20.0"
94
96
  },