grix-connector 2.0.9 → 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/claude/claude-bridge-server.js +1 -1
- package/dist/adapter/claude/claude-tools.js +1 -1
- package/dist/adapter/claude/claude-worker-client.js +1 -1
- package/dist/adapter/claude/mcp-http-launcher.js +2 -2
- package/dist/adapter/claude/result-timeout.js +1 -1
- package/dist/bridge/bridge.js +3 -3
- package/dist/core/aibot/client.js +2 -2
- package/dist/core/file-ops/list-files.js +1 -1
- package/dist/core/files/cert-store.js +1 -0
- package/dist/core/files/file-serve.js +2 -2
- 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/log.js +2 -2
- package/dist/manager.js +1 -1
- package/dist/mcp/stream-http/config.js +1 -1
- package/dist/mcp/stream-http/connection-binding.js +1 -1
- package/dist/mcp/stream-http/security.js +1 -1
- package/dist/mcp/stream-http/tool-executor.js +1 -1
- package/dist/mcp/stream-http/tool-registry.js +1 -1
- package/dist/mcp/stream-http/tool-schemas.js +1 -1
- package/openclaw-plugin/index.js +32 -11
- package/package.json +3 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
const o={required:["action"],properties:{action:{type:"string",enum:["contact_search","session_search","message_history","message_search"]},id:{type:"string"},keyword:{type:"string",maxLength:200},limit:{type:"integer",minimum:1,maximum:100},offset:{type:"integer",minimum:0},sessionId:{type:"string"},beforeId:{type:"string"}}},a={required:["action"],properties:{action:{type:"string",enum:["create","detail","leave","add_members","remove_members","update_member_role","update_all_members_muted","update_member_speaking","dissolve"]},sessionId:{type:"string"},name:{type:"string",maxLength:128},memberIds:{type:"array",items:{type:"string"},maxItems:100},memberTypes:{type:"array",items:{type:"integer",enum:[1,2]}},memberId:{type:"string"},role:{type:"integer",enum:[1,2]},memberType:{type:"integer"},allMembersMuted:{type:"boolean"},isSpeakMuted:{type:"boolean"},canSpeakWhenAllMuted:{type:"boolean"}}},p={required:["sessionId","content"],properties:{sessionId:{type:"string"},content:{type:"string",maxLength:1e4},msgType:{type:"integer"},quotedMessageId:{type:"string"},threadId:{type:"string"}}},m={required:["sessionId","msgId"],properties:{sessionId:{type:"string"},msgId:{type:"string"}}},g={required:["action"],properties:{action:{type:"string",enum:["create_agent","list_categories","create_category","update_category","assign_category","rotate_api_key"]},agentName:{type:"string"},introduction:{type:"string"},isMain:{type:"boolean"},agentId:{type:"string"},categoryId:{type:"string"},name:{type:"string"},parentId:{type:"string"},sortOrder:{type:"integer"}}},y={required:["session_id","text"],properties:{event_id:{type:"string"},session_id:{type:"string"},text:{type:"string",maxLength:5e4},quoted_message_id:{type:"string"},is_final:{type:"boolean"}}},d={required:["event_id","status"],properties:{event_id:{type:"string"},status:{type:"string",enum:["responded","canceled","failed"]},msg:{type:"string",maxLength:500}}},c={required:["event_id"],properties:{event_id:{type:"string"},session_id:{type:"string"}}},l={required:["session_id","active"],properties:{session_id:{type:"string"},active:{type:"boolean"},event_id:{type:"string"}}},_={required:["action"],properties:{action:{type:"string",enum:["pair_approve","pair_deny","allow_sender","remove_sender","set_policy"]},code:{type:"string"},sender_id:{type:"string"},policy:{type:"string",enum:["allowlist","open","disabled"]}}},f={required:[],properties:{}},C={grix_query:o,grix_group:a,grix_message_send:p,grix_message_unsend:m,grix_admin:g,grix_reply:y,grix_complete:d,grix_event_ack:c,grix_composing:l,grix_access_control:_,grix_status:f};function B(
|
|
1
|
+
const o={required:["action"],properties:{action:{type:"string",enum:["contact_search","session_search","message_history","message_search"]},id:{type:"string"},keyword:{type:"string",maxLength:200},limit:{type:"integer",minimum:1,maximum:100},offset:{type:"integer",minimum:0},sessionId:{type:"string"},beforeId:{type:"string"}}},a={required:["action"],properties:{action:{type:"string",enum:["create","detail","leave","add_members","remove_members","update_member_role","update_all_members_muted","update_member_speaking","dissolve"]},sessionId:{type:"string"},name:{type:"string",maxLength:128},memberIds:{type:"array",items:{type:"string"},maxItems:100},memberTypes:{type:"array",items:{type:"integer",enum:[1,2]}},memberId:{type:"string"},role:{type:"integer",enum:[1,2]},memberType:{type:"integer"},allMembersMuted:{type:"boolean"},isSpeakMuted:{type:"boolean"},canSpeakWhenAllMuted:{type:"boolean"}}},p={required:["sessionId","content"],properties:{sessionId:{type:"string"},content:{type:"string",maxLength:1e4},msgType:{type:"integer"},quotedMessageId:{type:"string"},threadId:{type:"string"}}},m={required:["sessionId","msgId"],properties:{sessionId:{type:"string"},msgId:{type:"string"}}},g={required:["action"],properties:{action:{type:"string",enum:["create_agent","list_categories","create_category","update_category","assign_category","rotate_api_key"]},agentName:{type:"string"},introduction:{type:"string"},isMain:{type:"boolean"},agentId:{type:"string"},categoryId:{type:"string"},name:{type:"string"},parentId:{type:"string"},sortOrder:{type:"integer"}}},y={required:["session_id","text"],properties:{event_id:{type:"string"},session_id:{type:"string"},text:{type:"string",maxLength:5e4},quoted_message_id:{type:"string"},is_final:{type:"boolean"}}},d={required:["event_id","status"],properties:{event_id:{type:"string"},status:{type:"string",enum:["responded","canceled","failed"]},msg:{type:"string",maxLength:500}}},c={required:["event_id"],properties:{event_id:{type:"string"},session_id:{type:"string"}}},l={required:["session_id","active"],properties:{session_id:{type:"string"},active:{type:"boolean"},event_id:{type:"string"}}},_={required:["action"],properties:{action:{type:"string",enum:["pair_approve","pair_deny","allow_sender","remove_sender","set_policy"]},code:{type:"string"},sender_id:{type:"string"},policy:{type:"string",enum:["allowlist","open","disabled"]}}},f={required:[],properties:{}},C={grix_query:o,grix_group:a,grix_message_send:p,grix_message_unsend:m,grix_admin:g,grix_reply:y,grix_complete:d,grix_event_ack:c,grix_composing:l,grix_access_control:_,grix_status:f};function B(u,t){const e=C[u];if(!e)return{valid:!1,error:`\u672A\u77E5\u5DE5\u5177: ${u}`};for(const i of e.required)if(t[i]===void 0||t[i]===null)return{valid:!1,error:`\u7F3A\u5C11\u5FC5\u586B\u53C2\u6570: ${i}`};for(const[i,r]of Object.entries(t)){if(r==null)continue;const n=e.properties[i];if(!n)continue;const s=$(i,r,n);if(s)return{valid:!1,error:s}}return{valid:!0}}function $(u,t,e){switch(e.type){case"string":if(typeof t!="string")return`\u53C2\u6570 ${u} \u7C7B\u578B\u9519\u8BEF: \u671F\u671B string\uFF0C\u5B9E\u9645 ${typeof t}`;if(e.maxLength!==void 0&&t.length>e.maxLength)return`\u53C2\u6570 ${u} \u8D85\u8FC7\u6700\u5927\u957F\u5EA6 ${e.maxLength}\uFF0C\u5B9E\u9645 ${t.length}`;if(e.enum&&!e.enum.includes(t))return`\u53C2\u6570 ${u} \u503C "${t}" \u4E0D\u5728\u5141\u8BB8\u8303\u56F4 [${e.enum.join(", ")}]`;break;case"integer":if(typeof t!="number"||!Number.isInteger(t))return`\u53C2\u6570 ${u} \u7C7B\u578B\u9519\u8BEF: \u671F\u671B integer\uFF0C\u5B9E\u9645 ${typeof t=="number"?"\u6D6E\u70B9\u6570":typeof t}`;if(e.minimum!==void 0&&t<e.minimum)return`\u53C2\u6570 ${u} \u503C ${t} \u5C0F\u4E8E\u6700\u5C0F\u503C ${e.minimum}`;if(e.maximum!==void 0&&t>e.maximum)return`\u53C2\u6570 ${u} \u503C ${t} \u5927\u4E8E\u6700\u5927\u503C ${e.maximum}`;if(e.enum&&!e.enum.includes(t))return`\u53C2\u6570 ${u} \u503C ${t} \u4E0D\u5728\u5141\u8BB8\u8303\u56F4 [${e.enum.join(", ")}]`;break;case"boolean":if(typeof t!="boolean")return`\u53C2\u6570 ${u} \u7C7B\u578B\u9519\u8BEF: \u671F\u671B boolean\uFF0C\u5B9E\u9645 ${typeof t}`;break;case"array":if(!Array.isArray(t))return`\u53C2\u6570 ${u} \u7C7B\u578B\u9519\u8BEF: \u671F\u671B array\uFF0C\u5B9E\u9645 ${typeof t}`;if(e.maxItems!==void 0&&t.length>e.maxItems)return`\u53C2\u6570 ${u} \u8D85\u8FC7\u6700\u5927\u5143\u7D20\u6570 ${e.maxItems}\uFF0C\u5B9E\u9645 ${t.length}`;if(e.items)for(let i=0;i<t.length;i++){const r=t[i];if(e.items.type==="string"&&typeof r!="string")return`\u53C2\u6570 ${u}[${i}] \u7C7B\u578B\u9519\u8BEF: \u671F\u671B string\uFF0C\u5B9E\u9645 ${typeof r}`;if(e.items.type==="integer"){if(typeof r!="number"||!Number.isInteger(r))return`\u53C2\u6570 ${u}[${i}] \u7C7B\u578B\u9519\u8BEF: \u671F\u671B integer\uFF0C\u5B9E\u9645 ${typeof r}`;if(e.items.enum&&!e.items.enum.includes(r))return`\u53C2\u6570 ${u}[${i}] \u503C ${r} \u4E0D\u5728\u5141\u8BB8\u8303\u56F4 [${e.items.enum.join(", ")}]`}}break}}export{B as validateToolArgs};
|
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;
|
|
@@ -2892,8 +2892,29 @@ function isWindowsAbsolutePath(p) {
|
|
|
2892
2892
|
return /^[A-Za-z]:[/\\]/.test(p) || p.startsWith("\\\\");
|
|
2893
2893
|
}
|
|
2894
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
|
+
|
|
2895
2916
|
// src/openclaw/shared/file-operations/create-folder.ts
|
|
2896
|
-
import * as
|
|
2917
|
+
import * as os4 from "node:os";
|
|
2897
2918
|
import * as path3 from "node:path";
|
|
2898
2919
|
async function handleCreateFolderAction(params, context) {
|
|
2899
2920
|
if (!params.name || typeof params.name !== "string") {
|
|
@@ -2919,7 +2940,7 @@ async function handleCreateFolderAction(params, context) {
|
|
|
2919
2940
|
};
|
|
2920
2941
|
}
|
|
2921
2942
|
const cwd = context.resolveCwd ? await context.resolveCwd(params.session_id) : null;
|
|
2922
|
-
const fallbackDir = context.fallbackDir ??
|
|
2943
|
+
const fallbackDir = context.fallbackDir ?? os4.homedir();
|
|
2923
2944
|
const normalizedParentId = params.parent_id ? normalizePlatformPath(params.parent_id) : null;
|
|
2924
2945
|
const parentDir = normalizedParentId ? path3.resolve(normalizedParentId) : cwd || fallbackDir;
|
|
2925
2946
|
let realParent;
|
|
@@ -3254,7 +3275,7 @@ async function handleFileListLocalAction(payload) {
|
|
|
3254
3275
|
return {
|
|
3255
3276
|
action_id: payload.action_id,
|
|
3256
3277
|
status: result.status,
|
|
3257
|
-
result: result.result,
|
|
3278
|
+
result: result.result ? { ...result.result, machine_name: getMachineName() } : result.result,
|
|
3258
3279
|
error_code: result.error_code,
|
|
3259
3280
|
error_msg: result.error_msg
|
|
3260
3281
|
};
|
|
@@ -3369,7 +3390,7 @@ ${lines.join("\n\n")}`;
|
|
|
3369
3390
|
|
|
3370
3391
|
// src/openclaw/shared/file-serve/tailnet-ip.ts
|
|
3371
3392
|
import { execFile } from "node:child_process";
|
|
3372
|
-
import * as
|
|
3393
|
+
import * as os5 from "node:os";
|
|
3373
3394
|
function isTailnetIPv4(addr) {
|
|
3374
3395
|
const parts = addr.split(".");
|
|
3375
3396
|
if (parts.length !== 4) return false;
|
|
@@ -3391,7 +3412,7 @@ function detectViaCLI() {
|
|
|
3391
3412
|
});
|
|
3392
3413
|
}
|
|
3393
3414
|
function detectViaInterfaces() {
|
|
3394
|
-
const interfaces =
|
|
3415
|
+
const interfaces = os5.networkInterfaces();
|
|
3395
3416
|
for (const list of Object.values(interfaces)) {
|
|
3396
3417
|
if (!list) continue;
|
|
3397
3418
|
for (const info of list) {
|
|
@@ -3443,10 +3464,10 @@ function buildAuthPayload(account, authMetadata = {}, tailnetIP) {
|
|
|
3443
3464
|
capabilities: [...STABLE_AUTH_CAPABILITIES],
|
|
3444
3465
|
local_actions: [...STABLE_LOCAL_ACTION_TYPES],
|
|
3445
3466
|
host_meta: {
|
|
3446
|
-
hostname:
|
|
3447
|
-
platform:
|
|
3448
|
-
arch:
|
|
3449
|
-
os_release:
|
|
3467
|
+
hostname: getMachineName(),
|
|
3468
|
+
platform: os6.platform(),
|
|
3469
|
+
arch: os6.arch(),
|
|
3470
|
+
os_release: os6.release(),
|
|
3450
3471
|
...tailnetIP !== void 0 && { tailnet_ip: tailnetIP }
|
|
3451
3472
|
},
|
|
3452
3473
|
skills: scanOpenClawSkills().map((s) => ({ name: s.name, description: s.description, source: s.source }))
|
|
@@ -8974,7 +8995,7 @@ var TOOLS = [
|
|
|
8974
8995
|
},
|
|
8975
8996
|
{
|
|
8976
8997
|
name: "grix_file_link",
|
|
8977
|
-
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).",
|
|
8978
8999
|
inputSchema: {
|
|
8979
9000
|
type: "object",
|
|
8980
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
|
},
|