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.
- package/dist/adapter/acp/acp-adapter.js +8 -8
- package/dist/adapter/acp/session-activity.js +1 -0
- package/dist/agent/process.js +2 -2
- package/dist/bridge/bridge.js +3 -3
- package/dist/core/aibot/client.js +2 -2
- package/dist/core/files/cert-store.js +1 -0
- package/dist/core/files/file-serve.js +2 -2
- package/dist/core/files/list-handler.js +1 -1
- package/dist/core/mcp/tools.js +1 -1
- package/dist/core/util/host-info.js +1 -0
- package/dist/core/util/index.js +1 -1
- package/dist/default-skills/grix-egg/SKILL.md +90 -0
- package/dist/default-skills/tailnet-file-share/SKILL.md +18 -0
- package/dist/manager.js +1 -1
- package/dist/mcp/stream-http/security.js +1 -1
- package/openclaw-plugin/index.js +41 -11
- package/package.json +3 -1
package/openclaw-plugin/index.js
CHANGED
|
@@ -2538,7 +2538,7 @@ function normalizeAibotSessionTarget(raw) {
|
|
|
2538
2538
|
|
|
2539
2539
|
// src/openclaw/client.ts
|
|
2540
2540
|
import { randomUUID } from "node:crypto";
|
|
2541
|
-
import
|
|
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
|
|
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 ??
|
|
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
|
|
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 =
|
|
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:
|
|
3438
|
-
platform:
|
|
3439
|
-
arch:
|
|
3440
|
-
os_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.
|
|
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
|
},
|