@hirey/hi-mcp-server 0.1.5 → 0.1.7

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 CHANGED
@@ -179,6 +179,7 @@ hi-mcp-server
179
179
  - 工具接入主路径:仍然是 `hi-mcp-server`
180
180
  - 普通用户主路径:本地 `stdio` child process
181
181
  - 推荐先通过公开 npm 安装 `@hirey/hi-mcp-server`,再把它注册到 `openclaw mcp set`
182
+ - 如果 OpenClaw 侧启用 hooks,`hooks.path` 应保持 base path `"/hooks"`;Hi/receiver 使用的完整 agent endpoint 仍然是 `http://127.0.0.1:18789/hooks/agent`,不要把 `hooks.path` 直接写成 `/hooks/agent`
182
183
  - 有公网 ingress:
183
184
  - 事件主路径:gateway endpoint `openclaw.hooks.agent.v1`
184
185
  - 补充路径:`openresponses.v1`
@@ -0,0 +1,13 @@
1
+ export type OpenClawSessionKeyValidation = {
2
+ ok: true;
3
+ normalized: string;
4
+ agentId: string;
5
+ rest: string;
6
+ } | {
7
+ ok: false;
8
+ reason: 'status_display_value' | 'sessions_display_value' | 'non_canonical';
9
+ input: string;
10
+ };
11
+ export declare function looksLikeOpenClawSessionKey(input: unknown): boolean;
12
+ export declare function validateOpenClawSessionKey(input: unknown): OpenClawSessionKeyValidation | null;
13
+ //# sourceMappingURL=openclaw-session-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-session-key.d.ts","sourceRoot":"","sources":["../src/openclaw-session-key.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,4BAA4B,GACpC;IACE,EAAE,EAAE,IAAI,CAAC;IACT,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,sBAAsB,GAAG,wBAAwB,GAAG,eAAe,CAAC;IAC5E,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AA0CN,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAQnE;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,4BAA4B,GAAG,IAAI,CAiC9F"}
@@ -0,0 +1,76 @@
1
+ function parseCanonicalAgentSessionKey(input) {
2
+ const raw = input.trim().toLowerCase();
3
+ if (!raw) {
4
+ return null;
5
+ }
6
+ const parts = raw.split(':').filter(Boolean);
7
+ if (parts.length < 3 || parts[0] !== 'agent') {
8
+ return null;
9
+ }
10
+ const agentId = parts[1]?.trim();
11
+ const rest = parts.slice(2).join(':');
12
+ if (!agentId || !rest) {
13
+ return null;
14
+ }
15
+ return {
16
+ normalized: `agent:${agentId}:${rest}`,
17
+ agentId,
18
+ rest,
19
+ };
20
+ }
21
+ function looksLikeStatusDisplayValue(input) {
22
+ // `openclaw status` textual tables shorten long keys with a trailing Unicode ellipsis.
23
+ return input.includes('…');
24
+ }
25
+ function looksLikeSessionsDisplayValue(input) {
26
+ // `openclaw sessions` currently renders long keys as:
27
+ // <16-char head>...<6-char tail>
28
+ // Keep the detector tight so we only reject the known display artifact.
29
+ const trimmed = input.trim();
30
+ return trimmed.toLowerCase().startsWith('agent:')
31
+ && trimmed.length === 25
32
+ && trimmed.slice(16, 19) === '...';
33
+ }
34
+ export function looksLikeOpenClawSessionKey(input) {
35
+ const trimmed = String(input ?? '').trim();
36
+ if (!trimmed) {
37
+ return false;
38
+ }
39
+ return trimmed.toLowerCase().startsWith('agent:')
40
+ || looksLikeStatusDisplayValue(trimmed)
41
+ || looksLikeSessionsDisplayValue(trimmed);
42
+ }
43
+ export function validateOpenClawSessionKey(input) {
44
+ const trimmed = String(input ?? '').trim();
45
+ if (!trimmed) {
46
+ return null;
47
+ }
48
+ if (looksLikeStatusDisplayValue(trimmed)) {
49
+ return {
50
+ ok: false,
51
+ reason: 'status_display_value',
52
+ input: trimmed,
53
+ };
54
+ }
55
+ if (looksLikeSessionsDisplayValue(trimmed)) {
56
+ return {
57
+ ok: false,
58
+ reason: 'sessions_display_value',
59
+ input: trimmed,
60
+ };
61
+ }
62
+ const parsed = parseCanonicalAgentSessionKey(trimmed);
63
+ if (!parsed) {
64
+ return {
65
+ ok: false,
66
+ reason: 'non_canonical',
67
+ input: trimmed,
68
+ };
69
+ }
70
+ return {
71
+ ok: true,
72
+ normalized: parsed.normalized,
73
+ agentId: parsed.agentId,
74
+ rest: parsed.rest,
75
+ };
76
+ }
package/dist/server.js CHANGED
@@ -12,6 +12,7 @@ import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextpro
12
12
  import { AGENT_GATEWAY_EVENT_TOPICS, normalizeAgentEndpointList, normalizeAgentInstallationDeliveryDeclaration, normalizeAgentSubscriptionList, normalizeText, } from '@hirey/hi-agent-contracts';
13
13
  import { createHiAgentClients, exchangeHiAgentClientCredentialsToken, HiAgentGatewayClient, HiAgentPlatformClient, } from '@hirey/hi-agent-sdk';
14
14
  import { readState, resolveCanonicalOpenClawStateDir, resolveDefaultStateDir, resolveLegacyStateFiles, resolveStateFile, updateState, normalizeStateProfile, } from './state.js';
15
+ import { looksLikeOpenClawSessionKey, validateOpenClawSessionKey, } from './openclaw-session-key.js';
15
16
  const CAPABILITY_CACHE_TTL_MS = 30_000;
16
17
  const resolvedProfile = normalizeStateProfile(process.env.HI_MCP_PROFILE);
17
18
  const config = {
@@ -104,10 +105,10 @@ function controlTools() {
104
105
  items: { type: 'string' },
105
106
  },
106
107
  host_adapter_kind: { type: 'string', description: "enable_local_receiver=true 时可选:'openclaw_hooks'|'openresponses'。OpenClaw 默认 openclaw_hooks。" },
107
- host_adapter_url: { type: 'string', description: 'enable_local_receiver=true 时可选:宿主本地接收入口。OpenClaw 默认 http://127.0.0.1:18789/hooks/agent。' },
108
+ host_adapter_url: { type: 'string', description: 'enable_local_receiver=true 时可选:宿主本地接收入口。OpenClaw 默认 full endpoint 为 http://127.0.0.1:18789/hooks/agent;注意 OpenClaw 配置里的 hooks.path 应保持 /hooks,而不是 /hooks/agent。' },
108
109
  host_adapter_bearer_token: { type: 'string', description: 'host_adapter_kind=openclaw_hooks 时必填:本地 hooks bearer token。' },
109
110
  openresponses_model: { type: 'string', description: 'host_adapter_kind=openresponses 时必填:receiver 发给本地入口使用的 model。' },
110
- host_session_key: { type: 'string', description: '可选:把当前 OpenClaw 可见会话显式设为 default continuation route 的 session_key' },
111
+ host_session_key: { type: 'string', description: '可选:把当前 OpenClaw 当前会话显式设为 default continuation route 的 canonical full session_key。只能使用结构化宿主来源返回的完整 key;不要从 openclaw status / openclaw sessions / TUI footer 这类展示文本里抄值。' },
111
112
  route_missing_policy: { type: 'string', description: "可选:'use_explicit_default_route'|'fail_closed'。默认在提供 host_session_key/default_reply_* 时使用 use_explicit_default_route,否则为 null。" },
112
113
  default_reply_channel: { type: 'string', description: '可选:default continuation route 的 channel。' },
113
114
  default_reply_to: { type: 'string', description: '可选:default continuation route 的宿主 target。' },
@@ -358,11 +359,21 @@ async function loadCapabilities() {
358
359
  };
359
360
  return items;
360
361
  }
362
+ function buildPlatformSnapshot(wellKnown) {
363
+ return {
364
+ platform_base_url: normalizeText(wellKnown?.platform?.platform_base_url) || config.platformBaseUrl,
365
+ registry_base_url: normalizeText(wellKnown?.platform?.registry_base_url) || config.platformBaseUrl,
366
+ fetched_at: new Date().toISOString(),
367
+ };
368
+ }
361
369
  async function createBootstrapClients() {
362
370
  const wellKnown = await loadWellKnown();
363
- const platform = new HiAgentPlatformClient({ baseUrl: config.platformBaseUrl });
371
+ const platformSnapshot = buildPlatformSnapshot(wellKnown);
372
+ const platform = new HiAgentPlatformClient({
373
+ baseUrl: platformSnapshot.platform_base_url,
374
+ });
364
375
  const gateway = new HiAgentGatewayClient({
365
- baseUrl: wellKnown.platform.registry_base_url,
376
+ baseUrl: platformSnapshot.registry_base_url,
366
377
  token: '',
367
378
  });
368
379
  return {
@@ -385,7 +396,7 @@ async function persistState(updater) {
385
396
  });
386
397
  }
387
398
  async function createAuthorizedClients() {
388
- const state = await loadPersistedState();
399
+ let state = await loadPersistedState();
389
400
  if (!state.identity)
390
401
  throw new Error('missing_agent_identity');
391
402
  const token = await exchangeHiAgentClientCredentialsToken({
@@ -394,9 +405,19 @@ async function createAuthorizedClients() {
394
405
  clientSecret: state.identity.client_secret,
395
406
  });
396
407
  const clients = await createHiAgentClients({
397
- platformBaseUrl: state.platform?.platform_base_url || config.platformBaseUrl,
408
+ // 当前 env 才是用户刚配置/修正过的 discovery 入口;旧 state 里的 platform snapshot 只作为历史记录,
409
+ // 不能反过来把 runtime 锁死在旧入口上。
410
+ platformBaseUrl: config.platformBaseUrl,
398
411
  token: token.access_token,
399
412
  });
413
+ const nextPlatform = buildPlatformSnapshot(clients.wellKnown);
414
+ if (state.platform?.platform_base_url !== nextPlatform.platform_base_url
415
+ || state.platform?.registry_base_url !== nextPlatform.registry_base_url) {
416
+ state = await persistState((current) => ({
417
+ ...current,
418
+ platform: nextPlatform,
419
+ }));
420
+ }
400
421
  return {
401
422
  state,
402
423
  accessToken: token.access_token,
@@ -515,30 +536,91 @@ function buildInstallationDeliveryDeclaration(args) {
515
536
  function hasActiveInstallationCapability(declaration, kind) {
516
537
  return !!declaration?.capabilities?.some((entry) => entry.kind === kind && entry.status !== 'disabled');
517
538
  }
518
- function withInstallationIdOnReplyRoute(input, installationId) {
539
+ function buildInvalidOpenClawSessionKeyError(reason, input) {
540
+ const error = new Error('invalid_openclaw_host_session_key');
541
+ const hint = reason === 'status_display_value'
542
+ ? 'Use a structured host source for the full session key; do not copy the truncated key shown by openclaw status.'
543
+ : reason === 'sessions_display_value'
544
+ ? 'Use a structured host source for the full session key; do not copy the truncated key shown by openclaw sessions.'
545
+ : 'Expected an OpenClaw canonical full session key shaped like agent:<agent_id>:<rest>.';
546
+ error.detail = {
547
+ reason,
548
+ input,
549
+ hint,
550
+ };
551
+ return error;
552
+ }
553
+ function normalizeReplyRouteSessionKey(input, options = {}) {
554
+ const sessionKey = normalizeText(input) || null;
555
+ if (!sessionKey) {
556
+ return null;
557
+ }
558
+ const shouldValidateAsOpenClaw = options.requireOpenClawSessionKey || looksLikeOpenClawSessionKey(sessionKey);
559
+ if (!shouldValidateAsOpenClaw) {
560
+ return sessionKey;
561
+ }
562
+ const validation = validateOpenClawSessionKey(sessionKey);
563
+ if (!validation) {
564
+ return null;
565
+ }
566
+ if (!validation.ok) {
567
+ throw buildInvalidOpenClawSessionKeyError(validation.reason, validation.input);
568
+ }
569
+ return validation.normalized;
570
+ }
571
+ function normalizeReplyRouteWithInstallationId(input, installationId, options = {}) {
519
572
  if (!isPlainObject(input))
520
573
  return null;
521
574
  const normalizedInstallationId = normalizeText(installationId) || null;
522
575
  const existingInstallationId = normalizeText(input.installation_id) || null;
523
- if (!normalizedInstallationId || existingInstallationId)
576
+ const hasSessionKey = Object.prototype.hasOwnProperty.call(input, 'session_key')
577
+ || Object.prototype.hasOwnProperty.call(input, 'sessionKey');
578
+ const normalizedSessionKey = hasSessionKey
579
+ ? normalizeReplyRouteSessionKey(Object.prototype.hasOwnProperty.call(input, 'session_key')
580
+ ? input.session_key
581
+ : input.sessionKey, options)
582
+ : undefined;
583
+ if (!normalizedInstallationId && !hasSessionKey)
524
584
  return input;
525
- return {
585
+ const output = {
526
586
  ...input,
527
- installation_id: normalizedInstallationId,
528
587
  };
588
+ if (normalizedInstallationId && !existingInstallationId) {
589
+ output.installation_id = normalizedInstallationId;
590
+ }
591
+ if (hasSessionKey) {
592
+ if (Object.prototype.hasOwnProperty.call(output, 'session_key')) {
593
+ output.session_key = normalizedSessionKey;
594
+ }
595
+ else {
596
+ output.sessionKey = normalizedSessionKey;
597
+ }
598
+ }
599
+ return output;
529
600
  }
530
- function normalizeDeliveryCapabilitiesWithInstallationId(input, installationId) {
531
- if (!isPlainObject(input)) {
532
- return normalizeAgentInstallationDeliveryDeclaration(input);
601
+ function applyNormalizedDefaultReplyRoute(input, installationId, options = {}) {
602
+ if (!Object.prototype.hasOwnProperty.call(input, 'default_reply_route')) {
603
+ return input;
533
604
  }
534
- const hydrated = {
605
+ return {
535
606
  ...input,
536
- default_reply_route: withInstallationIdOnReplyRoute(input.default_reply_route, installationId),
607
+ default_reply_route: normalizeReplyRouteWithInstallationId(input.default_reply_route, installationId, options),
537
608
  };
538
- return normalizeAgentInstallationDeliveryDeclaration(hydrated);
539
609
  }
540
- function buildDefaultReplyRoute(args, installationId) {
541
- const sessionKey = normalizeText(args.host_session_key) || null;
610
+ function normalizeDeliveryCapabilitiesWithInstallationId(input, installationId) {
611
+ if (isPlainObject(input)) {
612
+ return applyNormalizedDefaultReplyRoute(input, installationId);
613
+ }
614
+ const normalized = normalizeAgentInstallationDeliveryDeclaration(input);
615
+ if (!isPlainObject(normalized)) {
616
+ return normalized;
617
+ }
618
+ return applyNormalizedDefaultReplyRoute(normalized, installationId);
619
+ }
620
+ function buildDefaultReplyRoute(args, options = {}) {
621
+ const sessionKey = normalizeReplyRouteSessionKey(args.host_session_key, {
622
+ requireOpenClawSessionKey: options.requireOpenClawSessionKey,
623
+ });
542
624
  const deliveryContext = {
543
625
  channel: normalizeText(args.default_reply_channel) || null,
544
626
  to: normalizeText(args.default_reply_to) || null,
@@ -552,7 +634,7 @@ function buildDefaultReplyRoute(args, installationId) {
552
634
  if (!sessionKey && !hasDeliveryContext)
553
635
  return null;
554
636
  return {
555
- installation_id: normalizeText(installationId) || null,
637
+ installation_id: normalizeText(options.installationId) || null,
556
638
  session_key: sessionKey,
557
639
  delivery_context: hasDeliveryContext ? deliveryContext : null,
558
640
  };
@@ -673,9 +755,11 @@ function buildDoctorSummary(args) {
673
755
  const defaultReplyRoute = isPlainObject(deliveryDeclaration?.default_reply_route)
674
756
  ? deliveryDeclaration.default_reply_route
675
757
  : null;
676
- const continuityState = defaultReplyRoute
677
- ? 'explicit_default_route_ready'
678
- : (routeMissingPolicy === 'fail_closed' ? 'origin_capture_only' : 'continuity_not_ready');
758
+ const continuityState = defaultReplyRoute && !args.defaultReplyRouteValidation.ok
759
+ ? 'explicit_default_route_invalid'
760
+ : defaultReplyRoute
761
+ ? 'explicit_default_route_ready'
762
+ : (routeMissingPolicy === 'fail_closed' ? 'origin_capture_only' : 'continuity_not_ready');
679
763
  return {
680
764
  ok: args.blockers.length === 0,
681
765
  profile: config.profile,
@@ -695,7 +779,79 @@ function buildDoctorSummary(args) {
695
779
  delivery_capabilities: deliveryDeclaration,
696
780
  route_missing_policy: routeMissingPolicy,
697
781
  default_reply_route: defaultReplyRoute,
782
+ default_reply_route_validation: args.defaultReplyRouteValidation,
698
783
  delivery_probe: args.deliveryProbe,
784
+ delivery_probe_diagnostics: args.deliveryProbeDiagnostics,
785
+ };
786
+ }
787
+ async function readReceiverConfigSnapshot(receiverConfigPath) {
788
+ try {
789
+ const raw = await fs.readFile(receiverConfigPath, 'utf8');
790
+ const parsed = JSON.parse(raw);
791
+ return isPlainObject(parsed) ? parsed : null;
792
+ }
793
+ catch {
794
+ return null;
795
+ }
796
+ }
797
+ async function diagnoseOpenClawHookBasePathMismatch(args) {
798
+ const installState = stateInstallSnapshot(args.state.runtime);
799
+ if (normalizeText(installState.host_kind) !== 'openclaw')
800
+ return null;
801
+ const probeResults = Array.isArray(args.deliveryProbe?.results)
802
+ ? args.deliveryProbe.results
803
+ : [];
804
+ if (!probeResults.some((entry) => String(entry?.error || '').includes('host_adapter_http_404'))) {
805
+ return null;
806
+ }
807
+ const receiverConfigPath = installState.receiver_config_path || resolveReceiverConfigPath(args.state);
808
+ const receiverConfig = await readReceiverConfigSnapshot(receiverConfigPath);
809
+ const hostAdapter = isPlainObject(receiverConfig?.host_adapter)
810
+ ? receiverConfig.host_adapter
811
+ : null;
812
+ if (normalizeText(hostAdapter?.kind) !== 'openclaw_hooks')
813
+ return null;
814
+ const configuredEndpoint = normalizeText(hostAdapter?.url);
815
+ const bearerToken = normalizeText((hostAdapter?.auth || {}).token);
816
+ if (!configuredEndpoint || !bearerToken)
817
+ return null;
818
+ let currentUrl;
819
+ try {
820
+ currentUrl = new URL(configuredEndpoint);
821
+ }
822
+ catch {
823
+ return null;
824
+ }
825
+ if (!currentUrl.pathname.endsWith('/agent'))
826
+ return null;
827
+ // OpenClaw's hooks.path is a base prefix; the actual agent ingress lives at <hooks.path>/agent.
828
+ const candidateUrl = new URL(currentUrl.toString());
829
+ candidateUrl.pathname = `${currentUrl.pathname.replace(/\/+$/, '')}/agent`;
830
+ if (candidateUrl.toString() === currentUrl.toString())
831
+ return null;
832
+ try {
833
+ const response = await fetch(candidateUrl, {
834
+ method: 'POST',
835
+ headers: {
836
+ authorization: `Bearer ${bearerToken}`,
837
+ 'content-type': 'application/json',
838
+ },
839
+ body: '{}',
840
+ });
841
+ const bodyText = await response.text();
842
+ if (response.status !== 400 || !bodyText.includes('message required')) {
843
+ return null;
844
+ }
845
+ }
846
+ catch {
847
+ return null;
848
+ }
849
+ return {
850
+ kind: 'openclaw_hooks_base_path_misconfigured',
851
+ configured_host_adapter_url: configuredEndpoint,
852
+ live_agent_subroute_url: candidateUrl.toString(),
853
+ suggested_hooks_base_path: currentUrl.pathname.replace(/\/agent\/?$/, '') || '/hooks',
854
+ explanation: 'OpenClaw treats hooks.path as a base path, and the agent hook lives at <hooks.path>/agent. This host likely set hooks.path to /hooks/agent instead of /hooks.',
699
855
  };
700
856
  }
701
857
  async function handleRegister(args) {
@@ -715,10 +871,8 @@ async function handleRegister(args) {
715
871
  capabilities: args.capabilities,
716
872
  metadata: isPlainObject(args.metadata) ? args.metadata : null,
717
873
  // register 阶段 installation_id 由 gateway 正式生成;
718
- // 这里不能先把 default_reply_route 这种需要 installation_id 的字段在 client 侧拍扁。
719
- delivery_capabilities: isPlainObject(args.delivery_capabilities)
720
- ? args.delivery_capabilities
721
- : normalizeAgentInstallationDeliveryDeclaration(args.delivery_capabilities),
874
+ // 这里仍然保留 default_reply_route / route_missing_policy,但会先做 reply route 校验。
875
+ delivery_capabilities: normalizeDeliveryCapabilitiesWithInstallationId(args.delivery_capabilities, null),
722
876
  status: normalizeText(args.status) || undefined,
723
877
  };
724
878
  if (agentId)
@@ -726,13 +880,10 @@ async function handleRegister(args) {
726
880
  // gateway 现在会在省略 agent_id 时正式生成 canonical ag_ id;
727
881
  // 这里保持请求与网关 contract 一致,不再人为制造一个本地占位 id。
728
882
  const registered = await gateway.register(request);
883
+ const platformSnapshot = buildPlatformSnapshot(wellKnown);
729
884
  await persistState(() => ({
730
885
  profile: config.profile,
731
- platform: {
732
- platform_base_url: config.platformBaseUrl,
733
- registry_base_url: wellKnown.platform.registry_base_url,
734
- fetched_at: new Date().toISOString(),
735
- },
886
+ platform: platformSnapshot,
736
887
  identity: {
737
888
  agent_id: registered.agent.agent_id,
738
889
  installation_id: registered.installation.installation_id,
@@ -874,6 +1025,12 @@ async function handleDoctor(args) {
874
1025
  const installState = stateInstallSnapshot(state.runtime);
875
1026
  let remote = null;
876
1027
  let deliveryProbe = null;
1028
+ let deliveryProbeDiagnostics = null;
1029
+ let defaultReplyRouteValidation = {
1030
+ ok: true,
1031
+ reason: null,
1032
+ session_key: null,
1033
+ };
877
1034
  if (!state.identity) {
878
1035
  blockers.push('missing_agent_identity');
879
1036
  }
@@ -896,6 +1053,35 @@ async function handleDoctor(args) {
896
1053
  subscriptions: subscriptions.subscriptions,
897
1054
  };
898
1055
  const declaration = installation.installation.delivery_capabilities || null;
1056
+ const defaultReplyRoute = isPlainObject(declaration?.default_reply_route)
1057
+ ? declaration.default_reply_route
1058
+ : null;
1059
+ const defaultReplyRouteSessionKey = normalizeText(defaultReplyRoute?.session_key || defaultReplyRoute?.sessionKey) || null;
1060
+ if (defaultReplyRouteSessionKey && looksLikeOpenClawSessionKey(defaultReplyRouteSessionKey)) {
1061
+ const validation = validateOpenClawSessionKey(defaultReplyRouteSessionKey);
1062
+ if (validation?.ok) {
1063
+ defaultReplyRouteValidation = {
1064
+ ok: true,
1065
+ reason: null,
1066
+ session_key: validation.normalized,
1067
+ };
1068
+ }
1069
+ else if (validation) {
1070
+ defaultReplyRouteValidation = {
1071
+ ok: false,
1072
+ reason: validation.reason,
1073
+ session_key: validation.input,
1074
+ };
1075
+ blockers.push(`openclaw_default_reply_route_session_key_invalid:${validation.reason}`);
1076
+ }
1077
+ }
1078
+ else {
1079
+ defaultReplyRouteValidation = {
1080
+ ok: true,
1081
+ reason: null,
1082
+ session_key: defaultReplyRouteSessionKey,
1083
+ };
1084
+ }
899
1085
  const activeTopics = new Set((subscriptions.subscriptions || [])
900
1086
  .filter((entry) => normalizeText(entry?.status) === 'active')
901
1087
  .map((entry) => normalizeText(entry?.topic))
@@ -926,6 +1112,13 @@ async function handleDoctor(args) {
926
1112
  deliveryProbe = probe;
927
1113
  if (!(probe.results || []).some((entry) => entry.ok)) {
928
1114
  blockers.push('local_receiver_delivery_probe_failed');
1115
+ deliveryProbeDiagnostics = await diagnoseOpenClawHookBasePathMismatch({
1116
+ state,
1117
+ deliveryProbe,
1118
+ });
1119
+ if (deliveryProbeDiagnostics?.kind === 'openclaw_hooks_base_path_misconfigured') {
1120
+ blockers.push('openclaw_hooks_base_path_misconfigured');
1121
+ }
929
1122
  }
930
1123
  }
931
1124
  catch (error) {
@@ -947,6 +1140,8 @@ async function handleDoctor(args) {
947
1140
  blockers,
948
1141
  warnings,
949
1142
  deliveryProbe,
1143
+ deliveryProbeDiagnostics,
1144
+ defaultReplyRouteValidation,
950
1145
  }));
951
1146
  }
952
1147
  async function handleInstall(args) {
@@ -1006,7 +1201,10 @@ async function handleInstall(args) {
1006
1201
  state = await loadPersistedState();
1007
1202
  }
1008
1203
  const { gateway } = await createAuthorizedClients();
1009
- const defaultReplyRoute = buildDefaultReplyRoute(args, state.identity?.installation_id || null);
1204
+ const defaultReplyRoute = buildDefaultReplyRoute(args, {
1205
+ installationId: state.identity?.installation_id || null,
1206
+ requireOpenClawSessionKey: hostKind === 'openclaw',
1207
+ });
1010
1208
  const routeMissingPolicy = normalizeText(args.route_missing_policy)
1011
1209
  || (defaultReplyRoute ? 'use_explicit_default_route' : '');
1012
1210
  const desiredDeliveryCapabilities = buildInstallationDeliveryDeclaration({
@@ -1192,13 +1390,8 @@ async function handleInstallationUpdate(args) {
1192
1390
  : {}),
1193
1391
  ...(Object.prototype.hasOwnProperty.call(args, 'delivery_capabilities')
1194
1392
  // installation_update 需要保留 default_reply_route / route_missing_policy 这类扩展字段,
1195
- // 不能在 client 侧先被旧版 normalize 链路截断。
1196
- ? { delivery_capabilities: (isPlainObject(args.delivery_capabilities)
1197
- ? {
1198
- ...args.delivery_capabilities,
1199
- default_reply_route: withInstallationIdOnReplyRoute(args.delivery_capabilities.default_reply_route, state.identity?.installation_id || null),
1200
- }
1201
- : normalizeDeliveryCapabilitiesWithInstallationId(args.delivery_capabilities, state.identity?.installation_id || null)) }
1393
+ // reply route 里的 session_key 仍然必须先过 canonical 校验。
1394
+ ? { delivery_capabilities: normalizeDeliveryCapabilitiesWithInstallationId(args.delivery_capabilities, state.identity?.installation_id || null) }
1202
1395
  : {}),
1203
1396
  };
1204
1397
  const updated = await gateway.updateInstallation(updateRequest);
@@ -1430,7 +1623,7 @@ async function listTools() {
1430
1623
  function createMcpServer() {
1431
1624
  const server = new Server({
1432
1625
  name: 'hi-mcp-server',
1433
- version: '0.1.3',
1626
+ version: '0.1.7',
1434
1627
  }, {
1435
1628
  capabilities: {
1436
1629
  tools: {},
@@ -6,14 +6,14 @@
6
6
 
7
7
  - `HiAgentPlatformClient`:well-known、skills、capabilities、capability call
8
8
  - `HiAgentGatewayClient`:register / connect / activate / me / installation / endpoints / subscriptions / test-delivery / claim / fetch / ack
9
- - `createHiAgentClients()`:先读 well-known,再自动构造 platform + gateway client
9
+ - `createHiAgentClients()`:先读 well-known,再自动构造 platform + gateway client;后续调用会切到 well-known 返回的 canonical service URL,而不是死守初始 discovery URL
10
10
  - `exchangeHiAgentClientCredentialsToken()`:用 register 返回的 `client_id/client_secret` 向 gateway `oauth_token_url` 交换短期 access token
11
11
  - SSE stream helper
12
12
 
13
13
  ## 使用顺序
14
14
 
15
15
  - 先读取 `/.well-known/hi-agent-platform.json`
16
- - 再按服务目录访问 skills / capabilities / registry / delivery
16
+ - 再按服务目录访问 skills / capabilities / registry / delivery;如果 discovery URL 和实际业务入口分离(例如 CDN 只负责 discover,auth-required capability call 走 canonical origin),SDK 会自动切到 well-known 返回的正式 base URL
17
17
  - 首次 `register` 时 `agent_id` 可以省略;gateway 会正式生成 canonical `ag_...`,之后再用返回/查询到的 agent 身份继续 `activate` 或 `connect`
18
18
  - 如果宿主需要声明自己的收消息方式,使用 register/connect 的 `delivery_capabilities`,或后续调用 `GET/PUT /v1/agents/me/installation`
19
19
  - push profile 与 subscription/claim/fetch/ack 可以并行配置,但正式消费确认仍然建议走 claim/fetch/ack
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -171,14 +171,23 @@ export async function exchangeHiAgentClientCredentialsToken(options) {
171
171
  return body;
172
172
  }
173
173
  export async function createHiAgentClients(options) {
174
- const platform = new HiAgentPlatformClient({
174
+ const bootstrapPlatform = new HiAgentPlatformClient({
175
175
  baseUrl: options.platformBaseUrl,
176
176
  token: options.token,
177
177
  fetchImpl: options.fetchImpl,
178
178
  });
179
- const wellKnown = await platform.wellKnown();
179
+ const wellKnown = await bootstrapPlatform.wellKnown();
180
+ // well-known 允许 discovery host 和实际 capability host 分离;
181
+ // 后续业务调用必须切到 canonical service URL,避免把带 Authorization 的请求继续打到只适合 discovery/CDN 的入口。
182
+ const canonicalPlatformBaseUrl = String(wellKnown?.platform?.platform_base_url || '').trim() || options.platformBaseUrl;
183
+ const canonicalGatewayBaseUrl = String(wellKnown?.platform?.registry_base_url || '').trim() || options.platformBaseUrl;
184
+ const platform = new HiAgentPlatformClient({
185
+ baseUrl: canonicalPlatformBaseUrl,
186
+ token: options.token,
187
+ fetchImpl: options.fetchImpl,
188
+ });
180
189
  const gateway = new HiAgentGatewayClient({
181
- baseUrl: wellKnown.platform.registry_base_url,
190
+ baseUrl: canonicalGatewayBaseUrl,
182
191
  token: options.token,
183
192
  fetchImpl: options.fetchImpl,
184
193
  });
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hirey/hi-agent-sdk",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -18,6 +18,7 @@
18
18
  "scripts": {
19
19
  "clean": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"",
20
20
  "build": "npm run clean && tsc -p tsconfig.json",
21
+ "test": "npm run build && node --test test/**/*.test.mjs",
21
22
  "prepack": "npm run build"
22
23
  },
23
24
  "publishConfig": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hirey/hi-mcp-server",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "dist/server.js",
@@ -35,7 +35,7 @@
35
35
  },
36
36
  "dependencies": {
37
37
  "@hirey/hi-agent-contracts": "^0.1.12",
38
- "@hirey/hi-agent-sdk": "^0.1.6",
38
+ "@hirey/hi-agent-sdk": "^0.1.7",
39
39
  "@modelcontextprotocol/sdk": "^1.29.0",
40
40
  "express": "^5.2.1",
41
41
  "zod": "^4.3.6"