@hirey-ai/hirey 1.0.13
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/README.md +85 -0
- package/dist/clients.d.ts +23 -0
- package/dist/clients.d.ts.map +1 -0
- package/dist/clients.js +47 -0
- package/dist/clients.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +92 -0
- package/dist/index.js.map +1 -0
- package/dist/routes/webhook.d.ts +6 -0
- package/dist/routes/webhook.d.ts.map +1 -0
- package/dist/routes/webhook.js +76 -0
- package/dist/routes/webhook.js.map +1 -0
- package/dist/services/agent-events.d.ts +3 -0
- package/dist/services/agent-events.d.ts.map +1 -0
- package/dist/services/agent-events.js +267 -0
- package/dist/services/agent-events.js.map +1 -0
- package/dist/state.d.ts +61 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +128 -0
- package/dist/state.js.map +1 -0
- package/dist/tools/capabilities.d.ts +4 -0
- package/dist/tools/capabilities.d.ts.map +1 -0
- package/dist/tools/capabilities.js +93 -0
- package/dist/tools/capabilities.js.map +1 -0
- package/dist/tools/control.d.ts +8 -0
- package/dist/tools/control.d.ts.map +1 -0
- package/dist/tools/control.js +508 -0
- package/dist/tools/control.js.map +1 -0
- package/dist/types.d.ts +63 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/openclaw-config.d.ts +30 -0
- package/dist/utils/openclaw-config.d.ts.map +1 -0
- package/dist/utils/openclaw-config.js +162 -0
- package/dist/utils/openclaw-config.js.map +1 -0
- package/dist/utils/openclaw-hooks-payload.d.ts +18 -0
- package/dist/utils/openclaw-hooks-payload.d.ts.map +1 -0
- package/dist/utils/openclaw-hooks-payload.js +52 -0
- package/dist/utils/openclaw-hooks-payload.js.map +1 -0
- package/openclaw.plugin.json +83 -0
- package/package.json +65 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
// 在 hi_agent_install 期间,把 OpenClaw 的 hooks 配置补齐到能让 daemon POST 进 /hooks/agent
|
|
2
|
+
// 后真正 dispatch isolated agentTurn 的状态。等价于老 hi-platform/skills/openclaw-hi-install/
|
|
3
|
+
// scripts/openclaw-host-installer.mjs 中 buildManagedHooksConfig() + `openclaw config set hooks <json>`,
|
|
4
|
+
// 但 native plugin 跑 in-process,没法走 child_process 调 openclaw CLI(install scanner 会拦),
|
|
5
|
+
// 所以直接 fs read-modify-write ~/.openclaw/openclaw.json。
|
|
6
|
+
//
|
|
7
|
+
// 同步源:/Users/lawrence/Code/Hi/hi-platform/skills/openclaw-hi-install/scripts/openclaw-host-installer.mjs
|
|
8
|
+
// - buildManagedHooksConfig (line 227)
|
|
9
|
+
// - phase1 hooks write (line 661–690)
|
|
10
|
+
import fs from 'node:fs/promises';
|
|
11
|
+
import os from 'node:os';
|
|
12
|
+
import path from 'node:path';
|
|
13
|
+
import crypto from 'node:crypto';
|
|
14
|
+
export const OPENCLAW_CONFIG_PATH = path.join(os.homedir(), '.openclaw', 'openclaw.json');
|
|
15
|
+
const DEFAULT_HOOKS_PATH = '/hooks';
|
|
16
|
+
const DEFAULT_ACTIVE_AGENT_PREFIX = 'agent:active:';
|
|
17
|
+
function normalizeHooksPath(value) {
|
|
18
|
+
if (typeof value !== 'string')
|
|
19
|
+
return DEFAULT_HOOKS_PATH;
|
|
20
|
+
const trimmed = value.trim();
|
|
21
|
+
if (!trimmed)
|
|
22
|
+
return DEFAULT_HOOKS_PATH;
|
|
23
|
+
return trimmed.startsWith('/') ? trimmed : `/${trimmed}`;
|
|
24
|
+
}
|
|
25
|
+
function mergePrefixes(current, activeAgentPrefix) {
|
|
26
|
+
const set = new Set();
|
|
27
|
+
if (Array.isArray(current)) {
|
|
28
|
+
for (const entry of current) {
|
|
29
|
+
if (typeof entry === 'string' && entry.trim())
|
|
30
|
+
set.add(entry.trim());
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
set.add('hook:');
|
|
34
|
+
set.add(activeAgentPrefix);
|
|
35
|
+
return Array.from(set);
|
|
36
|
+
}
|
|
37
|
+
function buildManagedHooks(current, hooksPath, hooksToken, activeAgentPrefix) {
|
|
38
|
+
const base = (current && typeof current === 'object') ? { ...current } : {};
|
|
39
|
+
return {
|
|
40
|
+
...base,
|
|
41
|
+
enabled: true,
|
|
42
|
+
path: normalizeHooksPath(hooksPath),
|
|
43
|
+
token: hooksToken,
|
|
44
|
+
allowRequestSessionKey: true,
|
|
45
|
+
allowedSessionKeyPrefixes: mergePrefixes(base.allowedSessionKeyPrefixes, activeAgentPrefix),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function hooksConfigSatisfies(current, desired) {
|
|
49
|
+
if (!current)
|
|
50
|
+
return false;
|
|
51
|
+
if (current.enabled !== true)
|
|
52
|
+
return false;
|
|
53
|
+
if (normalizeHooksPath(current.path) !== normalizeHooksPath(desired.path))
|
|
54
|
+
return false;
|
|
55
|
+
if (typeof current.token !== 'string' || !current.token.trim())
|
|
56
|
+
return false;
|
|
57
|
+
if (current.allowRequestSessionKey !== true)
|
|
58
|
+
return false;
|
|
59
|
+
if (!Array.isArray(current.allowedSessionKeyPrefixes))
|
|
60
|
+
return false;
|
|
61
|
+
const desiredPrefixes = desired.allowedSessionKeyPrefixes || [];
|
|
62
|
+
for (const want of desiredPrefixes) {
|
|
63
|
+
if (!current.allowedSessionKeyPrefixes.includes(want))
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
async function readOpenClawConfig() {
|
|
69
|
+
try {
|
|
70
|
+
const raw = await fs.readFile(OPENCLAW_CONFIG_PATH, 'utf8');
|
|
71
|
+
const parsed = JSON.parse(raw);
|
|
72
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
73
|
+
return { root: {}, hooks: null };
|
|
74
|
+
}
|
|
75
|
+
const hooks = parsed.hooks;
|
|
76
|
+
return {
|
|
77
|
+
root: parsed,
|
|
78
|
+
hooks: hooks && typeof hooks === 'object' && !Array.isArray(hooks) ? hooks : null,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
if (err?.code === 'ENOENT')
|
|
83
|
+
return { root: {}, hooks: null };
|
|
84
|
+
throw err;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async function atomicWriteJson(file, value) {
|
|
88
|
+
const tmp = `${file}.tmp-${process.pid}-${Date.now()}`;
|
|
89
|
+
await fs.mkdir(path.dirname(file), { recursive: true });
|
|
90
|
+
await fs.writeFile(tmp, `${JSON.stringify(value, null, 2)}\n`, 'utf8');
|
|
91
|
+
await fs.rename(tmp, file);
|
|
92
|
+
}
|
|
93
|
+
// 主入口:保证 OpenClaw 的 hooks 段满足 native plugin daemon POST hooks/agent 的最小需求。
|
|
94
|
+
// 已经满足就 noop;不满足就 read-modify-write 一次(atomic rename)。
|
|
95
|
+
// 不破坏用户已有的 hooks 段下我们不管的字段(mappings、presets、transformsDir、gmail.* 等都保留)。
|
|
96
|
+
export async function ensureOpenClawHooksConfigured(args) {
|
|
97
|
+
const hooksPath = normalizeHooksPath(args.hooksPath || DEFAULT_HOOKS_PATH);
|
|
98
|
+
const activeAgentPrefix = (args.activeAgentPrefix || DEFAULT_ACTIVE_AGENT_PREFIX).trim() || DEFAULT_ACTIVE_AGENT_PREFIX;
|
|
99
|
+
const { root, hooks: currentHooks } = await readOpenClawConfig();
|
|
100
|
+
const reuseToken = (typeof args.preferredToken === 'string' && args.preferredToken.trim()) ||
|
|
101
|
+
(typeof currentHooks?.token === 'string' && currentHooks.token.trim()) ||
|
|
102
|
+
crypto.randomBytes(24).toString('hex');
|
|
103
|
+
const desired = buildManagedHooks(currentHooks, hooksPath, reuseToken, activeAgentPrefix);
|
|
104
|
+
if (hooksConfigSatisfies(currentHooks, desired) && currentHooks?.token === reuseToken) {
|
|
105
|
+
return {
|
|
106
|
+
hooks_token: reuseToken,
|
|
107
|
+
hooks_path: desired.path,
|
|
108
|
+
hooks_file: OPENCLAW_CONFIG_PATH,
|
|
109
|
+
changed: false,
|
|
110
|
+
previous_hooks: currentHooks,
|
|
111
|
+
next_hooks: desired,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
const nextRoot = { ...root, hooks: desired };
|
|
115
|
+
await atomicWriteJson(OPENCLAW_CONFIG_PATH, nextRoot);
|
|
116
|
+
return {
|
|
117
|
+
hooks_token: reuseToken,
|
|
118
|
+
hooks_path: desired.path,
|
|
119
|
+
hooks_file: OPENCLAW_CONFIG_PATH,
|
|
120
|
+
changed: true,
|
|
121
|
+
previous_hooks: currentHooks,
|
|
122
|
+
next_hooks: desired,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
// 保证 OpenClaw 当前 tools.profile (coding/messaging 默认) 下 plugin tools 仍可被 LLM 看见。
|
|
126
|
+
// OpenClaw 的 tool profile 是显式 allowlist —— coding profile 默认只允许 core 工具,plugin
|
|
127
|
+
// 工具被 filter 掉。要打开必须在 tools.alsoAllow 里加 "group:plugins" (canonical 通用钩子)。
|
|
128
|
+
//
|
|
129
|
+
// 由 plugin install tool 程序化处理这件事,绝不让 LLM 自己改 tools.allow(LLM 容易把
|
|
130
|
+
// alsoAllow 写成 allow,allow 是 explicit override 模式,会把 read/exec/sessions_* 等内置
|
|
131
|
+
// 全 filter 掉,导致 LLM 下一轮没工具可用 → embedded fallback 报错 "No callable tools remain")。
|
|
132
|
+
export async function ensurePluginToolsAlsoAllowed() {
|
|
133
|
+
const { root } = await readOpenClawConfig();
|
|
134
|
+
const tools = (root.tools && typeof root.tools === 'object' && !Array.isArray(root.tools))
|
|
135
|
+
? { ...root.tools }
|
|
136
|
+
: {};
|
|
137
|
+
const currentAlsoAllow = Array.isArray(tools.alsoAllow)
|
|
138
|
+
? tools.alsoAllow.filter((x) => typeof x === 'string' && x.length > 0)
|
|
139
|
+
: [];
|
|
140
|
+
const wantToken = 'group:plugins';
|
|
141
|
+
if (currentAlsoAllow.includes(wantToken) || currentAlsoAllow.includes('*')) {
|
|
142
|
+
return { changed: false, also_allow_before: currentAlsoAllow, also_allow_after: currentAlsoAllow };
|
|
143
|
+
}
|
|
144
|
+
const nextAlsoAllow = [...currentAlsoAllow, wantToken];
|
|
145
|
+
tools.alsoAllow = nextAlsoAllow;
|
|
146
|
+
const nextRoot = { ...root, tools };
|
|
147
|
+
await atomicWriteJson(OPENCLAW_CONFIG_PATH, nextRoot);
|
|
148
|
+
return { changed: true, also_allow_before: currentAlsoAllow, also_allow_after: nextAlsoAllow };
|
|
149
|
+
}
|
|
150
|
+
// 工具函数:从 OpenClaw config root 读 gateway 监听端口(支持 user 自定义;默认 18789)。
|
|
151
|
+
export function resolveGatewayPort(root) {
|
|
152
|
+
const gw = root?.gateway;
|
|
153
|
+
const port = Number(gw?.port);
|
|
154
|
+
if (Number.isFinite(port) && port > 0 && port < 65536)
|
|
155
|
+
return port;
|
|
156
|
+
return 18789;
|
|
157
|
+
}
|
|
158
|
+
export async function readGatewayPort() {
|
|
159
|
+
const { root } = await readOpenClawConfig();
|
|
160
|
+
return resolveGatewayPort(root);
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=openclaw-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-config.js","sourceRoot":"","sources":["../../src/utils/openclaw-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { AgentGatewayEventSnapshot, OpenClawHooksAgentEndpointConfig } from '@hirey-ai/agent-contracts';
|
|
2
|
+
export declare function buildOpenClawHookPayloadWithRoute(args: {
|
|
3
|
+
event: AgentGatewayEventSnapshot;
|
|
4
|
+
config?: OpenClawHooksAgentEndpointConfig | Record<string, unknown> | null;
|
|
5
|
+
}): {
|
|
6
|
+
message: string;
|
|
7
|
+
name: string;
|
|
8
|
+
agentId?: string;
|
|
9
|
+
sessionKey?: string;
|
|
10
|
+
wakeMode: string;
|
|
11
|
+
deliver: boolean;
|
|
12
|
+
channel?: string;
|
|
13
|
+
to?: string;
|
|
14
|
+
model?: string;
|
|
15
|
+
thinking?: string;
|
|
16
|
+
timeoutSeconds?: number;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=openclaw-hooks-payload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-hooks-payload.d.ts","sourceRoot":"","sources":["../../src/utils/openclaw-hooks-payload.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,yBAAyB,EACzB,gCAAgC,EACjC,MAAM,2BAA2B,CAAC;AAqBnC,wBAAgB,iCAAiC,CAAC,IAAI,EAAE;IACtD,KAAK,EAAE,yBAAyB,CAAC;IACjC,MAAM,CAAC,EAAE,gCAAgC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC5E,GAAG;IACF,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CA6BA"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// 把 hi 平台 event 转成 OpenClaw /hooks/agent 接受的 hook payload。
|
|
2
|
+
// 本文件是从 hirey-ai-agent-receiver/src/server.ts 复制过来的等价实现,让 native plugin 走的
|
|
3
|
+
// 投递语义跟老 hirey-ai-agent-receiver daemon 完全一致。
|
|
4
|
+
// 同步源:/Users/lawrence/Code/Hi/hi-agent-receiver/src/server.ts:173–217 (May 2026)
|
|
5
|
+
// - buildOpenClawContinuationMessage()
|
|
6
|
+
// - buildOpenClawHookPayloadWithRoute()
|
|
7
|
+
// 改动后请同步两处。
|
|
8
|
+
function normalizeText(value) {
|
|
9
|
+
return typeof value === 'string' ? value.trim() : '';
|
|
10
|
+
}
|
|
11
|
+
function buildOpenClawContinuationMessage(event, messagePrefix) {
|
|
12
|
+
const parts = [];
|
|
13
|
+
if (messagePrefix)
|
|
14
|
+
parts.push(messagePrefix);
|
|
15
|
+
if (event?.preview?.text)
|
|
16
|
+
parts.push(String(event.preview.text));
|
|
17
|
+
parts.push(JSON.stringify({
|
|
18
|
+
topic: event.topic,
|
|
19
|
+
resource_ref: event.resource_ref || {},
|
|
20
|
+
payload: event.payload || {},
|
|
21
|
+
}));
|
|
22
|
+
return parts.filter(Boolean).join('\n\n');
|
|
23
|
+
}
|
|
24
|
+
export function buildOpenClawHookPayloadWithRoute(args) {
|
|
25
|
+
const config = (args.config || {});
|
|
26
|
+
const routeSnapshot = args.event?.reply_route_snapshot && typeof args.event.reply_route_snapshot === 'object'
|
|
27
|
+
? args.event.reply_route_snapshot
|
|
28
|
+
: {};
|
|
29
|
+
const deliveryContext = routeSnapshot.delivery_context && typeof routeSnapshot.delivery_context === 'object'
|
|
30
|
+
? routeSnapshot.delivery_context
|
|
31
|
+
: {};
|
|
32
|
+
const messagePrefix = normalizeText(config.message_prefix) || null;
|
|
33
|
+
const explicitSessionKey = normalizeText(routeSnapshot.session_key || config.session_key) || null;
|
|
34
|
+
const shouldSendLegacySessionKey = config.send_session_key === true && !explicitSessionKey;
|
|
35
|
+
const sessionKeyPrefix = normalizeText(config.session_key_prefix) || 'hi';
|
|
36
|
+
return {
|
|
37
|
+
message: buildOpenClawContinuationMessage(args.event, messagePrefix),
|
|
38
|
+
name: normalizeText(config.name) || 'Hi',
|
|
39
|
+
agentId: normalizeText(config.agent_id) || undefined,
|
|
40
|
+
...(explicitSessionKey
|
|
41
|
+
? { sessionKey: explicitSessionKey }
|
|
42
|
+
: (shouldSendLegacySessionKey ? { sessionKey: `${sessionKeyPrefix}:${args.event.event_id}` } : {})),
|
|
43
|
+
wakeMode: normalizeText(config.wake_mode) || 'now',
|
|
44
|
+
deliver: config.deliver !== false,
|
|
45
|
+
channel: normalizeText(deliveryContext.channel || config.channel) || undefined,
|
|
46
|
+
to: normalizeText(deliveryContext.to || config.to) || undefined,
|
|
47
|
+
model: normalizeText(config.model) || undefined,
|
|
48
|
+
thinking: normalizeText(config.thinking) || undefined,
|
|
49
|
+
timeoutSeconds: Number(config.timeout_seconds || 0) || undefined,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=openclaw-hooks-payload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-hooks-payload.js","sourceRoot":"","sources":["../../src/utils/openclaw-hooks-payload.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "hirey",
|
|
3
|
+
"name": "Hirey AI",
|
|
4
|
+
"description": "Hirey Hi for OpenClaw — register Hi's tools, agent-events claim service, and webhook ingress in-process. People-to-people matching for jobs, hiring, housing, friendship, dating, founders, investors, lawyers, and any other human-lead goal.",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"kind": "service",
|
|
7
|
+
"activation": {
|
|
8
|
+
"onStartup": true,
|
|
9
|
+
"onCapabilities": ["tool", "service"],
|
|
10
|
+
"onCommands": []
|
|
11
|
+
},
|
|
12
|
+
"contracts": {
|
|
13
|
+
"tools": [
|
|
14
|
+
"hi_agent_status",
|
|
15
|
+
"hi_agent_doctor",
|
|
16
|
+
"hi_agent_install",
|
|
17
|
+
"hi_agent_reset",
|
|
18
|
+
"hi_pull_events",
|
|
19
|
+
"agent_listings",
|
|
20
|
+
"matching_sessions",
|
|
21
|
+
"pairings",
|
|
22
|
+
"thread_meetings",
|
|
23
|
+
"conversations",
|
|
24
|
+
"listing_taxonomy",
|
|
25
|
+
"agent_credits",
|
|
26
|
+
"content_get",
|
|
27
|
+
"content_render",
|
|
28
|
+
"faq_get",
|
|
29
|
+
"faq_search",
|
|
30
|
+
"social_org",
|
|
31
|
+
"social_permissions",
|
|
32
|
+
"social_relationships"
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
"configSchema": {
|
|
36
|
+
"type": "object",
|
|
37
|
+
"additionalProperties": false,
|
|
38
|
+
"properties": {
|
|
39
|
+
"platformBaseUrl": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"description": "Hirey Hi platform base URL. Defaults to the Hirey AI public service.",
|
|
42
|
+
"default": "https://hi.hirey.ai"
|
|
43
|
+
},
|
|
44
|
+
"profile": {
|
|
45
|
+
"type": "string",
|
|
46
|
+
"description": "Hi MCP profile name. Used to namespace persisted identity / receiver state on disk.",
|
|
47
|
+
"default": "openclaw-main"
|
|
48
|
+
},
|
|
49
|
+
"stateDir": {
|
|
50
|
+
"type": "string",
|
|
51
|
+
"description": "Filesystem dir for persisted hi identity / receiver runtime cursor. Default ~/.openclaw/hi-mcp/<profile>.",
|
|
52
|
+
"default": ""
|
|
53
|
+
},
|
|
54
|
+
"webhookPath": {
|
|
55
|
+
"type": "string",
|
|
56
|
+
"description": "Plugin-owned HTTP path on the gateway where the in-process receiver service delivers Hi events back into the current LLM session. Default /hi/webhook.",
|
|
57
|
+
"default": "/hi/webhook"
|
|
58
|
+
},
|
|
59
|
+
"claimPollIntervalMs": {
|
|
60
|
+
"type": "integer",
|
|
61
|
+
"description": "How often the in-process agent-events claim loop polls the platform when the long-poll connection is idle.",
|
|
62
|
+
"default": 1500,
|
|
63
|
+
"minimum": 250
|
|
64
|
+
},
|
|
65
|
+
"claimLeaseMs": {
|
|
66
|
+
"type": "integer",
|
|
67
|
+
"description": "Per-claim lease length the loop requests from the platform.",
|
|
68
|
+
"default": 60000,
|
|
69
|
+
"minimum": 1000
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
"uiHints": {
|
|
74
|
+
"platformBaseUrl": {
|
|
75
|
+
"label": "Platform base URL",
|
|
76
|
+
"placeholder": "https://hi.hirey.ai"
|
|
77
|
+
},
|
|
78
|
+
"profile": {
|
|
79
|
+
"label": "Hi MCP profile",
|
|
80
|
+
"placeholder": "openclaw-main"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hirey-ai/hirey",
|
|
3
|
+
"version": "1.0.13",
|
|
4
|
+
"repository": {
|
|
5
|
+
"type": "git",
|
|
6
|
+
"url": "https://github.com/hirey-ai/hi-openclaw-plugin.git"
|
|
7
|
+
},
|
|
8
|
+
"homepage": "https://github.com/hirey-ai/hi-openclaw-plugin#readme",
|
|
9
|
+
"license": "UNLICENSED",
|
|
10
|
+
"description": "Hirey Hi as a native OpenClaw plugin: registers Hi tools, the agent-events claim service, and webhook ingress directly inside the gateway process \u2014 zero independent daemons, no `mcp.servers.hi` indirection, no per-run frozen tool inventory boundary. Same business logic as @hirey-ai/mcp-server / @hirey-ai/agent-receiver, but wired through OpenClaw's native register(api) instead of stdio MCP + spawned daemon. For OpenClaw 5.4+ via ClawPack `clawhub:hirey`; for OpenClaw 5.2 ~ 5.3 via npm fallback `openclaw plugins install npm:@hirey-ai/hirey` (same plugin code, ClawPack metadata path is broken on 5.2 ~ 5.3 ClawHub clients so we ship the same tarball through npm under the brand-name `@hirey-ai/hirey` for prod / `@hirey-ai/hirey` for early — npm `hirey` (unscoped) was rejected by npm typosquatting policy). OpenClaw 4.23 ~ 5.1 must use the prod ClawHub bundle `clawhub:hirey-compatible` because their runtime expects date-format `compat.pluginApi` and rejects newer ranges.",
|
|
11
|
+
"private": false,
|
|
12
|
+
"type": "module",
|
|
13
|
+
"main": "dist/index.js",
|
|
14
|
+
"types": "dist/index.d.ts",
|
|
15
|
+
"files": [
|
|
16
|
+
"dist/",
|
|
17
|
+
"openclaw.plugin.json",
|
|
18
|
+
"README.md"
|
|
19
|
+
],
|
|
20
|
+
"exports": {
|
|
21
|
+
".": {
|
|
22
|
+
"types": "./dist/index.d.ts",
|
|
23
|
+
"default": "./dist/index.js"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"openclaw": {
|
|
27
|
+
"extensions": [
|
|
28
|
+
"./dist/index.js"
|
|
29
|
+
],
|
|
30
|
+
"compat": {
|
|
31
|
+
"pluginApi": ">=2026.5.2",
|
|
32
|
+
"pluginApiComment": "OpenClaw \u5b98\u65b9 plugin SDK \u7ea6\u5b9a\uff1acompat.pluginApi \u662f OpenClaw runtime build \u7248\u672c\u7684 semver range\uff08\u4f8b\u5982 docs.openclaw.ai/plugins/sdk-setup \u793a\u4f8b\u5199 '>=2026.3.24-beta.2'\uff09\uff0c\u4e0d\u662f plugin SDK \u534f\u8bae\u53f7\u3002\u4e4b\u524d\u8fd9\u91cc\u5199 '1.0' \u662f\u9519\u7684\uff1a\u4efb\u4f55 OpenClaw runtime \u7684 build version\uff08\u90fd\u662f 2026.x.y\uff09\u8ddf semver range '1.0' \u6bd4\u90fd\u4e0d\u4f1a\u901a\uff0c\u6240\u4ee5 ClawHub install / npm install \u4e24\u6761\u8def\u5f84\u90fd\u4f1a\u88ab reject\u3002\u73b0\u5728\u6539\u6210 '>=2026.5.2'\uff1a\u8ddf README \u517c\u5bb9\u77e9\u9635\u4e2d ClawPack \u3001 npm fallback \u7684\u6709\u6548\u4e0b\u754c\u5bf9\u9f50\uff085.4+ \u8d70 ClawPack\uff0c5.2 ~ 5.3 \u8d70 npm fallback\uff094.23 ~ 5.1 \u4f9d\u7136\u8d70 bundle\uff0c\u4e0d\u8fc7\u8fd9\u4e2a\u5b57\u6bb5\u4e5f\u4f1a\u770b\u5230\uff0c\u5b83\u4eec\u62ff\u81ea\u5df1 build \u7248\u672c \u540c '>=2026.5.2' \u6bd4\u4f1a fail close\uff0c\u8fd9\u662f\u5e0c\u671b\u7684\u884c\u4e3a\uff08\u907f\u514d 4.x runtime \u52a0\u8f7d\u624d \u53d1\u73b0 SDK \u4e0d\u5339\u914d\uff09\u3002"
|
|
33
|
+
},
|
|
34
|
+
"build": {
|
|
35
|
+
"openclawVersion": "2026.5.6"
|
|
36
|
+
},
|
|
37
|
+
"install": {
|
|
38
|
+
"minHostVersion": ">=2026.5.2",
|
|
39
|
+
"minHostVersionComment": "\u8ddf compat.pluginApi \u540c\u6b65\u62c9\u5230 5.2\u3002OpenClaw 5.4+ \u8d70 ClawPack `clawhub:hirey`\uff1bOpenClaw 5.2 ~ 5.3 ClawPack \u4f1a\u7531\u4e8e ClawHub server \u4e0d\u7ed9\u65e7 client sha256hash + files[] metadata \u5931\u8d25\uff08\u8ddf plugin manifest \u65e0\u5173\uff09\uff0c\u8d70 npm fallback `openclaw plugins install npm:hirey` \u80fd\u7a33\u88c5\u3002\u4e4b\u524d\u8fd9\u91cc\u9501 5.4 \u662f\u4e3a\u4e86\u9632\u540e\u9762\u4e24\u6863 ClawPack\uff1bnpm fallback \u8def\u5f84\u4e0d\u5728 ClawHub server\uff0c\u4e0d\u6491 5.4 \u9501\uff0c\u63d0\u524d\u5230 5.2\u3002"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"scripts": {
|
|
43
|
+
"clean": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"",
|
|
44
|
+
"build": "npm run clean && tsc -p tsconfig.json",
|
|
45
|
+
"dev": "tsc -p tsconfig.json --watch",
|
|
46
|
+
"test": "tsx --test src/**/*.test.ts",
|
|
47
|
+
"prepack": "npm run build"
|
|
48
|
+
},
|
|
49
|
+
"publishConfig": {
|
|
50
|
+
"access": "public"
|
|
51
|
+
},
|
|
52
|
+
"peerDependencies": {
|
|
53
|
+
"openclaw": ">=2026.5.2"
|
|
54
|
+
},
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"@hirey-ai/agent-contracts": "^0.1.15",
|
|
57
|
+
"@hirey-ai/agent-sdk": "^0.1.10"
|
|
58
|
+
},
|
|
59
|
+
"devDependencies": {
|
|
60
|
+
"@types/node": "^20.19.37",
|
|
61
|
+
"openclaw": "2026.5.6",
|
|
62
|
+
"tsx": "^4.21.0",
|
|
63
|
+
"typescript": "^5.9.3"
|
|
64
|
+
}
|
|
65
|
+
}
|