@agent-webui/ai-desk-daemon 1.0.61-beta5 → 1.0.61-beta6

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/bin/cli.js CHANGED
@@ -12,7 +12,7 @@ const { start, stop, restart, status } = require('../lib/daemon-manager');
12
12
  const { getLogPath } = require('../lib/platform');
13
13
  const { VERSION } = require('../lib/platform');
14
14
  const { getPort } = require('../lib/config');
15
- const { reportLifecycle } = require('../lib/daemon-registry');
15
+ const { reportLifecycle, syncRegistryConfigToDaemonConfig } = require('../lib/daemon-registry');
16
16
  const { upgradePackage } = require('../lib/self-upgrade');
17
17
 
18
18
  function wait(ms) {
@@ -141,6 +141,14 @@ async function reportRegistryLifecycle(event) {
141
141
  }
142
142
  }
143
143
 
144
+ function syncRegistryConfigForDaemonStart() {
145
+ try {
146
+ syncRegistryConfigToDaemonConfig();
147
+ } catch (error) {
148
+ console.warn(chalk.yellow(`[registry] Failed to sync daemon registry config: ${error.message || error}`));
149
+ }
150
+ }
151
+
144
152
  program
145
153
  .name('aidesk')
146
154
  .description('AI Desk Daemon - CLI tool for managing the AI Desk daemon service')
@@ -158,6 +166,7 @@ program
158
166
  try {
159
167
  const mode = resolveRequestedMode(options) || 'native';
160
168
  const modeResult = configureRequestedMode(mode);
169
+ syncRegistryConfigForDaemonStart();
161
170
  start();
162
171
  await reportRegistryLifecycle('start');
163
172
  if (mode === 'cli-anything' && modeResult?.runtimeInfo?.cliAnythingPath) {
@@ -257,6 +266,7 @@ program
257
266
  try {
258
267
  const mode = resolveRequestedMode(options);
259
268
  const modeResult = configureRequestedMode(mode);
269
+ syncRegistryConfigForDaemonStart();
260
270
  restart();
261
271
  await reportRegistryLifecycle('restart');
262
272
  if (mode === 'cli-anything' && modeResult?.runtimeInfo?.cliAnythingPath) {
@@ -31,10 +31,15 @@ function readRegistrySessionIdentity(homeDir = os.homedir()) {
31
31
  if (!fs.existsSync(sessionPath)) return null;
32
32
  const session = JSON.parse(fs.readFileSync(sessionPath, 'utf8'));
33
33
  if (!session || typeof session !== 'object') return null;
34
+ const apiBaseUrl = normalizeApiBaseUrl(session.api_base_url || session.apiBaseUrl);
34
35
  const rcAccountId = trim(session.account_id || session.accountId);
35
36
  const rcExtensionId = trim(session.extension_id || session.extensionId);
36
- if (!rcAccountId || !rcExtensionId) return null;
37
- return { rcAccountId, rcExtensionId };
37
+ const rcUsername = trim(session.rc_username || session.rcUsername);
38
+ const tlsInsecureSkipVerify = Boolean(
39
+ session.tls_insecure_skip_verify || session.tlsInsecureSkipVerify,
40
+ );
41
+ if (!apiBaseUrl && !rcAccountId && !rcExtensionId && !rcUsername) return null;
42
+ return { apiBaseUrl, rcAccountId, rcExtensionId, rcUsername, tlsInsecureSkipVerify };
38
43
  } catch {
39
44
  return null;
40
45
  }
@@ -55,12 +60,12 @@ function readRegistryConfigFromDaemonConfig(homeDir = os.homedir()) {
55
60
  sessionIdentity?.rcAccountId || '';
56
61
  const rcExtensionId = trim(registry.rc_extension_id || registry.rcExtensionId) ||
57
62
  sessionIdentity?.rcExtensionId || '';
58
- if (!apiBaseUrl || !rcAccountId || !rcExtensionId) return null;
63
+ if (!apiBaseUrl) return null;
59
64
  return {
60
65
  apiBaseUrl,
61
66
  rcAccountId,
62
67
  rcExtensionId,
63
- rcUsername: trim(registry.rc_username || registry.rcUsername),
68
+ rcUsername: trim(registry.rc_username || registry.rcUsername) || sessionIdentity?.rcUsername || '',
64
69
  tlsInsecureSkipVerify: Boolean(registry.tls_insecure_skip_verify || registry.tlsInsecureSkipVerify),
65
70
  };
66
71
  } catch {
@@ -71,32 +76,75 @@ function readRegistryConfigFromDaemonConfig(homeDir = os.homedir()) {
71
76
  function getRegistryConfig(env = process.env, homeDir = os.homedir()) {
72
77
  const daemonConfig = readRegistryConfigFromDaemonConfig(homeDir);
73
78
  const sessionIdentity = readRegistrySessionIdentity(homeDir);
74
- const apiBaseUrl = normalizeApiBaseUrl(
79
+ const envApiBaseUrl = normalizeApiBaseUrl(
75
80
  env.AI_DESK_API_BASE_URL || env.AI_DESK_BACKEND_API_URL || env.AI_DESK_BACKEND_URL,
76
- ) || daemonConfig?.apiBaseUrl || normalizeApiBaseUrl(DEFAULT_REGISTRY_API_BASE_URL);
81
+ );
82
+ const hasSessionUserIdentity = Boolean(sessionIdentity?.rcAccountId || sessionIdentity?.rcExtensionId);
83
+ const apiBaseUrl = normalizeApiBaseUrl(
84
+ envApiBaseUrl ||
85
+ sessionIdentity?.apiBaseUrl ||
86
+ daemonConfig?.apiBaseUrl ||
87
+ (hasSessionUserIdentity ? DEFAULT_REGISTRY_API_BASE_URL : ''),
88
+ );
77
89
  const rcAccountId = trim(env.AI_DESK_RC_ACCOUNT_ID || env.rcAccountId) ||
78
- daemonConfig?.rcAccountId ||
79
90
  sessionIdentity?.rcAccountId ||
91
+ daemonConfig?.rcAccountId ||
80
92
  '';
81
93
  const rcExtensionId = trim(env.AI_DESK_RC_EXTENSION_ID || env.rcExtensionId) ||
82
- daemonConfig?.rcExtensionId ||
83
94
  sessionIdentity?.rcExtensionId ||
95
+ daemonConfig?.rcExtensionId ||
84
96
  '';
85
- if (apiBaseUrl && rcAccountId && rcExtensionId) {
97
+ if (apiBaseUrl) {
86
98
  const tlsEnvValue = parseTruthyEnv(env.AI_DESK_TLS_INSECURE_SKIP_VERIFY);
87
99
  return {
88
100
  apiBaseUrl,
89
101
  rcAccountId,
90
102
  rcExtensionId,
91
- rcUsername: trim(env.AI_DESK_RC_USERNAME || env.rcUsername) || daemonConfig?.rcUsername || '',
103
+ rcUsername: trim(env.AI_DESK_RC_USERNAME || env.rcUsername) ||
104
+ sessionIdentity?.rcUsername ||
105
+ daemonConfig?.rcUsername ||
106
+ '',
92
107
  tlsInsecureSkipVerify: tlsEnvValue === null
93
- ? Boolean(daemonConfig?.tlsInsecureSkipVerify)
108
+ ? Boolean(sessionIdentity?.tlsInsecureSkipVerify ?? daemonConfig?.tlsInsecureSkipVerify)
94
109
  : tlsEnvValue,
95
110
  };
96
111
  }
97
112
  return null;
98
113
  }
99
114
 
115
+ function daemonConfigPath(homeDir = os.homedir()) {
116
+ return path.join(homeDir, '.aidesktop', 'daemon-config.json');
117
+ }
118
+
119
+ function syncRegistryConfigToDaemonConfig(env = process.env, homeDir = os.homedir()) {
120
+ const config = getRegistryConfig(env, homeDir);
121
+ if (!config) return null;
122
+
123
+ const configPath = daemonConfigPath(homeDir);
124
+ let daemonConfig = {};
125
+ try {
126
+ if (fs.existsSync(configPath)) {
127
+ const parsed = JSON.parse(fs.readFileSync(configPath, 'utf8'));
128
+ if (parsed && typeof parsed === 'object') daemonConfig = parsed;
129
+ }
130
+ } catch {
131
+ daemonConfig = {};
132
+ }
133
+
134
+ daemonConfig.registry = {
135
+ ...(daemonConfig.registry && typeof daemonConfig.registry === 'object' ? daemonConfig.registry : {}),
136
+ api_base_url: config.apiBaseUrl,
137
+ rc_account_id: config.rcAccountId,
138
+ rc_extension_id: config.rcExtensionId,
139
+ rc_username: config.rcUsername,
140
+ tls_insecure_skip_verify: Boolean(config.tlsInsecureSkipVerify),
141
+ };
142
+
143
+ fs.mkdirSync(path.dirname(configPath), { recursive: true });
144
+ fs.writeFileSync(configPath, `${JSON.stringify(daemonConfig, null, 2)}\n`, 'utf8');
145
+ return config;
146
+ }
147
+
100
148
  function registryStatePaths(homeDir = os.homedir()) {
101
149
  const root = path.join(homeDir, '.aidesktop');
102
150
  return {
@@ -206,8 +254,8 @@ function postJSON(urlString, payload, config) {
206
254
  headers: {
207
255
  'Content-Type': 'application/json',
208
256
  'Content-Length': Buffer.byteLength(body),
209
- rcAccountId: config.rcAccountId,
210
- rcExtensionId: config.rcExtensionId,
257
+ ...(config.rcAccountId ? { rcAccountId: config.rcAccountId } : {}),
258
+ ...(config.rcExtensionId ? { rcExtensionId: config.rcExtensionId } : {}),
211
259
  ...(config.rcUsername ? { rcUsername: config.rcUsername } : {}),
212
260
  },
213
261
  timeout: 3000,
@@ -261,6 +309,7 @@ module.exports = {
261
309
  buildLifecyclePayload,
262
310
  DEFAULT_REGISTRY_API_BASE_URL,
263
311
  getRegistryConfig,
312
+ syncRegistryConfigToDaemonConfig,
264
313
  readRegistrySessionIdentity,
265
314
  readRegistryConfigFromDaemonConfig,
266
315
  registryStatePaths,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-webui/ai-desk-daemon",
3
- "version": "1.0.61-beta5",
3
+ "version": "1.0.61-beta6",
4
4
  "description": "AI Desk Daemon - CLI tool for managing the AI Desk daemon service",
5
5
  "workspaces": [
6
6
  "packages/*"
@@ -39,16 +39,16 @@
39
39
  "chalk": "^4.1.2"
40
40
  },
41
41
  "optionalDependencies": {
42
- "@agent-webui/ai-desk-daemon-darwin-arm64": "1.0.61-beta5",
43
- "@agent-webui/ai-desk-daemon-darwin-x64": "1.0.61-beta5",
44
- "@agent-webui/ai-desk-daemon-linux-arm64": "1.0.61-beta5",
45
- "@agent-webui/ai-desk-daemon-linux-x64": "1.0.61-beta5",
46
- "@agent-webui/ai-desk-daemon-win32-x64": "1.0.61-beta5",
47
- "@agent-webui/ai-desk-python-darwin-arm64": "1.0.61-beta5",
48
- "@agent-webui/ai-desk-python-darwin-x64": "1.0.61-beta5",
49
- "@agent-webui/ai-desk-python-linux-arm64": "1.0.61-beta5",
50
- "@agent-webui/ai-desk-python-linux-x64": "1.0.61-beta5",
51
- "@agent-webui/ai-desk-python-win32-x64": "1.0.61-beta5"
42
+ "@agent-webui/ai-desk-daemon-darwin-arm64": "1.0.61-beta6",
43
+ "@agent-webui/ai-desk-daemon-darwin-x64": "1.0.61-beta6",
44
+ "@agent-webui/ai-desk-daemon-linux-arm64": "1.0.61-beta6",
45
+ "@agent-webui/ai-desk-daemon-linux-x64": "1.0.61-beta6",
46
+ "@agent-webui/ai-desk-daemon-win32-x64": "1.0.61-beta6",
47
+ "@agent-webui/ai-desk-python-darwin-arm64": "1.0.61-beta6",
48
+ "@agent-webui/ai-desk-python-darwin-x64": "1.0.61-beta6",
49
+ "@agent-webui/ai-desk-python-linux-arm64": "1.0.61-beta6",
50
+ "@agent-webui/ai-desk-python-linux-x64": "1.0.61-beta6",
51
+ "@agent-webui/ai-desk-python-win32-x64": "1.0.61-beta6"
52
52
  },
53
53
  "repository": {
54
54
  "type": "git",