openclaw-openagent 1.0.8 → 1.0.11

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.
Files changed (39) hide show
  1. package/dist/src/app/remote-agent-tool.js +108 -10
  2. package/dist/src/auth/config.js +65 -10
  3. package/dist/src/channel.js +2 -1
  4. package/dist/src/plugin-ui/assets/bg.png +0 -0
  5. package/dist/src/plugin-ui/assets/icon.png +0 -0
  6. package/dist/src/plugin-ui/assets/openagent-override.js +1753 -774
  7. package/dist/src/plugin-ui/ui-extension-loader/registry-regex.js +53 -5
  8. package/dist/src/proxy/auth-proxy.d.ts +1 -0
  9. package/dist/src/proxy/auth-proxy.js +28 -9
  10. package/dist/src/transport/oasn/oasn-http.d.ts +12 -0
  11. package/dist/src/transport/oasn/oasn-http.js +45 -14
  12. package/dist/src/util/url-resolver.d.ts +6 -0
  13. package/dist/src/util/url-resolver.js +24 -8
  14. package/openclaw.plugin.json +16 -1
  15. package/package.json +3 -3
  16. package/src/app/remote-agent-tool.ts +126 -11
  17. package/src/auth/config.ts +79 -10
  18. package/src/channel.ts +2 -1
  19. package/src/plugin-ui/assets/bg.png +0 -0
  20. package/src/plugin-ui/assets/icon.png +0 -0
  21. package/src/plugin-ui/assets/openagent-override.js +1753 -774
  22. package/src/plugin-ui/build.cjs +80 -4
  23. package/src/plugin-ui/modules/agent-book/panel/agent-book.js +92 -9
  24. package/src/plugin-ui/modules/agent-book/panel/agent-card.js +26 -10
  25. package/src/plugin-ui/modules/agent-book/panel/agent-data.js +1 -1
  26. package/src/plugin-ui/modules/agent-book/panel/inject-ui.js +64 -0
  27. package/src/plugin-ui/modules/agent-book/panel/styles.js +313 -178
  28. package/src/plugin-ui/modules/loader/bootstrap.js +1 -1
  29. package/src/plugin-ui/modules/loader/shared-state.js +54 -0
  30. package/src/plugin-ui/modules/remote-agent/execution-card.js +347 -124
  31. package/src/plugin-ui/modules/remote-agent/media-links.js +151 -0
  32. package/src/plugin-ui/modules/remote-agent/output-card.js +110 -33
  33. package/src/plugin-ui/modules/remote-agent/render-hooks.js +97 -18
  34. package/src/plugin-ui/modules/remote-agent/styles.js +488 -402
  35. package/src/plugin-ui/modules/remote-agent/tool-card-model.js +6 -0
  36. package/src/plugin-ui/ui-extension-loader/registry-regex.ts +50 -5
  37. package/src/proxy/auth-proxy.ts +30 -10
  38. package/src/transport/oasn/oasn-http.ts +60 -14
  39. package/src/util/url-resolver.ts +24 -8
@@ -10,6 +10,8 @@
10
10
  */
11
11
 
12
12
  const DEFAULT_API_BASE = 'https://api.openagent.club';
13
+ const DEFAULT_OASN_PUBLIC_ROOT = 'https://oasn-test.haimawan.com';
14
+ const OASN_ENV_ID_RE = /^[A-Za-z0-9_-]+$/;
13
15
  /**
14
16
  * OASN 默认 API base。
15
17
  *
@@ -22,6 +24,55 @@ export function isUnconfiguredOasnApiBase(value: string | undefined): boolean {
22
24
  return !value || value === DEFAULT_OASN_API_BASE;
23
25
  }
24
26
 
27
+ function normalizeOasnApiBase(value: unknown): string {
28
+ const normalized = String(value || '')
29
+ .trim()
30
+ .replace(/\/+$/, '')
31
+ .replace(/\/api$/, '');
32
+ return normalized === DEFAULT_OASN_API_BASE ? '' : normalized;
33
+ }
34
+
35
+ function normalizeOasnEnvId(value: unknown): string {
36
+ const envId = String(value || '').trim();
37
+ if (!envId) return '';
38
+ return OASN_ENV_ID_RE.test(envId) ? envId : '';
39
+ }
40
+
41
+ function oasnPublicBaseFromEnvId(envId: string): string {
42
+ const normalized = normalizeOasnEnvId(envId);
43
+ if (!normalized) return '';
44
+ const root = normalizeOasnApiBase(process.env.OASN_PUBLIC_ROOT || process.env.OPENAGENT_OASN_PUBLIC_ROOT || DEFAULT_OASN_PUBLIC_ROOT);
45
+ return `${root}/e/${normalized}`;
46
+ }
47
+
48
+ function resolveOasnBase({
49
+ accountBase,
50
+ channelBase,
51
+ envBase,
52
+ accountEnvId,
53
+ channelEnvId,
54
+ envEnvId,
55
+ fallbackBase,
56
+ }: {
57
+ accountBase?: unknown;
58
+ channelBase?: unknown;
59
+ envBase?: unknown;
60
+ accountEnvId?: unknown;
61
+ channelEnvId?: unknown;
62
+ envEnvId?: unknown;
63
+ fallbackBase: string;
64
+ }): string {
65
+ const configuredBase = normalizeOasnApiBase(accountBase) || normalizeOasnApiBase(channelBase);
66
+ if (configuredBase) return configuredBase;
67
+ const configuredEnvId = normalizeOasnEnvId(accountEnvId) || normalizeOasnEnvId(channelEnvId);
68
+ if (configuredEnvId) return oasnPublicBaseFromEnvId(configuredEnvId);
69
+ const ambientBase = normalizeOasnApiBase(envBase);
70
+ if (ambientBase) return ambientBase;
71
+ const ambientEnvId = normalizeOasnEnvId(envEnvId);
72
+ if (ambientEnvId) return oasnPublicBaseFromEnvId(ambientEnvId);
73
+ return fallbackBase;
74
+ }
75
+
25
76
  /**
26
77
  * Transport 类型 —— v3.9+ 双轨抽象。
27
78
  *
@@ -132,19 +183,37 @@ export function resolveOpenagentAccount(
132
183
  const envApiBase = transport === 'oasn'
133
184
  ? (process.env.OASN_API_BASE || process.env.OPENAGENT_OASN_API_BASE || '')
134
185
  : '';
135
- const apiBase = (targetAcc['api_base'] || targetAcc['apiBase']
136
- || clCfg['api_base']
137
- || clCfg['apiBase']
138
- || envApiBase
139
- || fallbackApiBase) as string;
186
+ const apiBase = transport === 'oasn'
187
+ ? resolveOasnBase({
188
+ accountBase: targetAcc['api_base'] || targetAcc['apiBase'],
189
+ channelBase: clCfg['api_base'] || clCfg['apiBase'],
190
+ envBase: envApiBase,
191
+ accountEnvId: targetAcc['oasn_env_id'] || targetAcc['oasnEnvId'] || targetAcc['env_id'] || targetAcc['envId'],
192
+ channelEnvId: clCfg['oasn_env_id'] || clCfg['oasnEnvId'] || clCfg['env_id'] || clCfg['envId'],
193
+ envEnvId: process.env.OASN_ENV_ID || process.env.OPENAGENT_OASN_ENV_ID,
194
+ fallbackBase: fallbackApiBase,
195
+ })
196
+ : (targetAcc['api_base'] || targetAcc['apiBase']
197
+ || clCfg['api_base']
198
+ || clCfg['apiBase']
199
+ || fallbackApiBase) as string;
140
200
  const envAccessApiBase = transport === 'oasn'
141
201
  ? (process.env.OASN_ACCESS_API_BASE || process.env.OPENAGENT_OASN_ACCESS_API_BASE || '')
142
202
  : '';
143
- const accessApiBase = (targetAcc['access_api_base'] || targetAcc['accessApiBase']
144
- || clCfg['access_api_base']
145
- || clCfg['accessApiBase']
146
- || envAccessApiBase
147
- || apiBase) as string;
203
+ const accessApiBase = transport === 'oasn'
204
+ ? resolveOasnBase({
205
+ accountBase: targetAcc['access_api_base'] || targetAcc['accessApiBase'],
206
+ channelBase: clCfg['access_api_base'] || clCfg['accessApiBase'],
207
+ envBase: envAccessApiBase,
208
+ accountEnvId: targetAcc['oasn_env_id'] || targetAcc['oasnEnvId'] || targetAcc['env_id'] || targetAcc['envId'],
209
+ channelEnvId: clCfg['oasn_env_id'] || clCfg['oasnEnvId'] || clCfg['env_id'] || clCfg['envId'],
210
+ envEnvId: process.env.OASN_ENV_ID || process.env.OPENAGENT_OASN_ENV_ID,
211
+ fallbackBase: apiBase,
212
+ })
213
+ : (targetAcc['access_api_base'] || targetAcc['accessApiBase']
214
+ || clCfg['access_api_base']
215
+ || clCfg['accessApiBase']
216
+ || apiBase) as string;
148
217
  const claimUrl = (targetAcc['claim_url'] || targetAcc['claimUrl'] || clCfg['claim_url'] || clCfg['claimUrl'] || '') as string;
149
218
  const rawStatus = (targetAcc['status'] || targetAcc['claim_status'] || targetAcc['claimStatus'] || clCfg['status'] || '') as string;
150
219
  const normalizedStatus = normalizeClaimStatus(rawStatus, agentId, apiKey);
package/src/channel.ts CHANGED
@@ -13,6 +13,7 @@ import { registry } from './runtime/registry.js';
13
13
  import { AccountRuntime } from './runtime/account.js';
14
14
 
15
15
  import { logger } from './util/logger.js';
16
+ import { resolveOasnRelativeUrl } from './util/url-resolver.js';
16
17
  import * as timMessages from './tim/messages.js';
17
18
 
18
19
  const API_BASE = 'https://api.clawlink.club';
@@ -544,7 +545,7 @@ async function claimOasnAgent(
544
545
  agentId: string,
545
546
  ownerEmail: string,
546
547
  ): Promise<Record<string, unknown>> {
547
- const res = await fetch(new URL('/api/agents/claim', apiBase), {
548
+ const res = await fetch(resolveOasnRelativeUrl(apiBase, '/api/agents/claim'), {
548
549
  method: 'POST',
549
550
  headers: {
550
551
  'Content-Type': 'application/json',
Binary file
Binary file