@geminilight/mindos 1.0.29 → 1.1.4
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_zh.md +3 -3
- package/dist/agent-runtime/claude-code-cli.d.ts +1 -1
- package/dist/agent-runtime/claude-code-cli.d.ts.map +1 -1
- package/dist/agent-runtime/claude-code-cli.js +7 -6
- package/dist/agent-runtime/claude-code-cli.js.map +1 -1
- package/dist/agent-runtime/claude-code-sdk.d.ts +17 -0
- package/dist/agent-runtime/claude-code-sdk.d.ts.map +1 -1
- package/dist/agent-runtime/claude-code-sdk.js +145 -7
- package/dist/agent-runtime/claude-code-sdk.js.map +1 -1
- package/dist/agent-runtime/codex-app-server.d.ts +7 -4
- package/dist/agent-runtime/codex-app-server.d.ts.map +1 -1
- package/dist/agent-runtime/codex-app-server.js +28 -16
- package/dist/agent-runtime/codex-app-server.js.map +1 -1
- package/dist/agent-runtime/codex-env.d.ts +41 -0
- package/dist/agent-runtime/codex-env.d.ts.map +1 -0
- package/dist/agent-runtime/codex-env.js +278 -0
- package/dist/agent-runtime/codex-env.js.map +1 -0
- package/dist/agent-runtime/index.d.ts +2 -0
- package/dist/agent-runtime/index.d.ts.map +1 -1
- package/dist/agent-runtime/index.js +2 -0
- package/dist/agent-runtime/index.js.map +1 -1
- package/dist/agent-runtime/run.d.ts +7 -0
- package/dist/agent-runtime/run.d.ts.map +1 -1
- package/dist/agent-runtime/run.js +238 -42
- package/dist/agent-runtime/run.js.map +1 -1
- package/dist/agent-runtime/runtime-env.d.ts +28 -0
- package/dist/agent-runtime/runtime-env.d.ts.map +1 -0
- package/dist/agent-runtime/runtime-env.js +66 -0
- package/dist/agent-runtime/runtime-env.js.map +1 -0
- package/dist/agent-runtime/runtime-errors.d.ts +20 -0
- package/dist/agent-runtime/runtime-errors.d.ts.map +1 -0
- package/dist/agent-runtime/runtime-errors.js +95 -0
- package/dist/agent-runtime/runtime-errors.js.map +1 -0
- package/dist/client.d.ts +0 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js.map +1 -1
- package/dist/knowledge/audit/index.d.ts +4 -0
- package/dist/knowledge/audit/index.d.ts.map +1 -1
- package/dist/knowledge/audit/index.js +92 -8
- package/dist/knowledge/audit/index.js.map +1 -1
- package/dist/protocols/acp/agent-descriptors.js +7 -1
- package/dist/protocols/acp/agent-descriptors.js.map +1 -1
- package/dist/protocols/acp/index.js +10 -10
- package/dist/protocols/acp/subprocess.d.ts +1 -1
- package/dist/protocols/acp/subprocess.d.ts.map +1 -1
- package/dist/protocols/acp/subprocess.js +3 -3
- package/dist/protocols/acp/subprocess.js.map +1 -1
- package/dist/server/contract.d.ts.map +1 -1
- package/dist/server/contract.js +2 -0
- package/dist/server/contract.js.map +1 -1
- package/dist/server/handlers/a2a.d.ts +7 -0
- package/dist/server/handlers/a2a.d.ts.map +1 -1
- package/dist/server/handlers/a2a.js +5 -1
- package/dist/server/handlers/a2a.js.map +1 -1
- package/dist/server/handlers/agent-capabilities.d.ts +60 -0
- package/dist/server/handlers/agent-capabilities.d.ts.map +1 -0
- package/dist/server/handlers/agent-capabilities.js +178 -0
- package/dist/server/handlers/agent-capabilities.js.map +1 -0
- package/dist/server/handlers/agent-runtime-codex.d.ts +3 -0
- package/dist/server/handlers/agent-runtime-codex.d.ts.map +1 -1
- package/dist/server/handlers/agent-runtime-codex.js +42 -5
- package/dist/server/handlers/agent-runtime-codex.js.map +1 -1
- package/dist/server/handlers/agent-runtimes.d.ts +10 -0
- package/dist/server/handlers/agent-runtimes.d.ts.map +1 -1
- package/dist/server/handlers/agent-runtimes.js +142 -102
- package/dist/server/handlers/agent-runtimes.js.map +1 -1
- package/dist/server/handlers/im-activity.d.ts.map +1 -1
- package/dist/server/handlers/im-activity.js +26 -1
- package/dist/server/handlers/im-activity.js.map +1 -1
- package/dist/server/handlers/mcp-status.d.ts +7 -1
- package/dist/server/handlers/mcp-status.d.ts.map +1 -1
- package/dist/server/handlers/mcp-status.js +14 -1
- package/dist/server/handlers/mcp-status.js.map +1 -1
- package/dist/server/handlers/settings.d.ts +3 -0
- package/dist/server/handlers/settings.d.ts.map +1 -1
- package/dist/server/handlers/settings.js +5 -0
- package/dist/server/handlers/settings.js.map +1 -1
- package/dist/server/handlers/sync.d.ts +1 -0
- package/dist/server/handlers/sync.d.ts.map +1 -1
- package/dist/server/handlers/sync.js +230 -3
- package/dist/server/handlers/sync.js.map +1 -1
- package/dist/server/http.js +5 -1
- package/dist/server/http.js.map +1 -1
- package/dist/server/index.d.ts +3 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +3 -2
- package/dist/server/index.js.map +1 -1
- package/dist/server/route-ownership.d.ts.map +1 -1
- package/dist/server/route-ownership.js +3 -0
- package/dist/server/route-ownership.js.map +1 -1
- package/dist/server/runtime.d.ts +1 -0
- package/dist/server/runtime.d.ts.map +1 -1
- package/dist/server/runtime.js.map +1 -1
- package/dist/session/index.d.ts +2 -0
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js +47 -12
- package/dist/session/index.js.map +1 -1
- package/dist/session/redaction.d.ts +3 -0
- package/dist/session/redaction.d.ts.map +1 -0
- package/dist/session/redaction.js +47 -0
- package/dist/session/redaction.js.map +1 -0
- package/package.json +10 -10
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { createCodexAppServerClient, createCodexAppServerStdioTransport, } from '../../agent-runtime/codex-app-server.js';
|
|
2
|
+
import { compactRuntimeFailureMessage } from '../../agent-runtime/runtime-errors.js';
|
|
3
|
+
import { resolveCommandPath } from '../../protocols/acp/index.js';
|
|
2
4
|
import { errorResponse, json } from '../response.js';
|
|
5
|
+
import { defaultCheckNativeRuntimeHealth, } from './agent-runtimes.js';
|
|
3
6
|
const NO_STORE_HEADERS = { 'Cache-Control': 'no-store' };
|
|
4
7
|
const MAX_THREAD_LIST_LIMIT = 100;
|
|
5
8
|
export async function handleCodexThreadsGet(searchParams, services = {}) {
|
|
@@ -12,7 +15,7 @@ export async function handleCodexThreadsGet(searchParams, services = {}) {
|
|
|
12
15
|
});
|
|
13
16
|
}
|
|
14
17
|
catch (error) {
|
|
15
|
-
return
|
|
18
|
+
return codexThreadErrorResponse(error);
|
|
16
19
|
}
|
|
17
20
|
}
|
|
18
21
|
export async function handleCodexThreadGet(threadId, searchParams, services = {}) {
|
|
@@ -28,7 +31,7 @@ export async function handleCodexThreadGet(threadId, searchParams, services = {}
|
|
|
28
31
|
});
|
|
29
32
|
}
|
|
30
33
|
catch (error) {
|
|
31
|
-
return
|
|
34
|
+
return codexThreadErrorResponse(error);
|
|
32
35
|
}
|
|
33
36
|
}
|
|
34
37
|
export async function handleCodexThreadForkPost(threadId, body, services = {}) {
|
|
@@ -42,7 +45,7 @@ export async function handleCodexThreadForkPost(threadId, body, services = {}) {
|
|
|
42
45
|
});
|
|
43
46
|
}
|
|
44
47
|
catch (error) {
|
|
45
|
-
return
|
|
48
|
+
return codexThreadErrorResponse(error);
|
|
46
49
|
}
|
|
47
50
|
}
|
|
48
51
|
export async function handleCodexThreadArchivePost(threadId, services = {}) {
|
|
@@ -54,7 +57,7 @@ export async function handleCodexThreadArchivePost(threadId, services = {}) {
|
|
|
54
57
|
return json({ ok: true }, { headers: NO_STORE_HEADERS });
|
|
55
58
|
}
|
|
56
59
|
catch (error) {
|
|
57
|
-
return
|
|
60
|
+
return codexThreadErrorResponse(error);
|
|
58
61
|
}
|
|
59
62
|
}
|
|
60
63
|
export async function handleCodexThreadUnarchivePost(threadId, services = {}) {
|
|
@@ -67,10 +70,28 @@ export async function handleCodexThreadUnarchivePost(threadId, services = {}) {
|
|
|
67
70
|
});
|
|
68
71
|
}
|
|
69
72
|
catch (error) {
|
|
70
|
-
return
|
|
73
|
+
return codexThreadErrorResponse(error);
|
|
71
74
|
}
|
|
72
75
|
}
|
|
76
|
+
class CodexThreadRuntimeUnavailableError extends Error {
|
|
77
|
+
constructor(message) {
|
|
78
|
+
super(message);
|
|
79
|
+
this.name = 'CodexThreadRuntimeUnavailableError';
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function codexThreadErrorResponse(error) {
|
|
83
|
+
const status = error instanceof CodexThreadRuntimeUnavailableError ? 409 : 500;
|
|
84
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
85
|
+
const compactError = new Error(compactRuntimeFailureMessage(message, {
|
|
86
|
+
runtime: 'codex',
|
|
87
|
+
fallback: 'Codex app-server error',
|
|
88
|
+
}));
|
|
89
|
+
if (error instanceof Error)
|
|
90
|
+
compactError.name = error.name;
|
|
91
|
+
return errorResponse(compactError, status);
|
|
92
|
+
}
|
|
73
93
|
async function withCodexClient(services, run) {
|
|
94
|
+
await ensureCodexThreadRuntimeAvailable(services);
|
|
74
95
|
const client = await (services.createCodexClient?.() ?? createCodexAppServerClient(createCodexAppServerStdioTransport()));
|
|
75
96
|
try {
|
|
76
97
|
await client.initialize();
|
|
@@ -80,6 +101,22 @@ async function withCodexClient(services, run) {
|
|
|
80
101
|
await client.close?.();
|
|
81
102
|
}
|
|
82
103
|
}
|
|
104
|
+
async function ensureCodexThreadRuntimeAvailable(services) {
|
|
105
|
+
if (services.createCodexClient)
|
|
106
|
+
return;
|
|
107
|
+
const resolveRuntimeCommand = services.resolveRuntimeCommand ?? resolveCommandPath;
|
|
108
|
+
const binaryPath = await resolveRuntimeCommand('codex');
|
|
109
|
+
if (!binaryPath) {
|
|
110
|
+
throw new CodexThreadRuntimeUnavailableError('Codex executable was not detected. Install Codex or start MindOS from an environment where the codex command is available.');
|
|
111
|
+
}
|
|
112
|
+
const health = await (services.checkCodexRuntimeHealth?.(binaryPath) ?? defaultCheckNativeRuntimeHealth({
|
|
113
|
+
runtime: 'codex',
|
|
114
|
+
agent: { id: 'codex-acp', name: 'Codex', binaryPath },
|
|
115
|
+
}));
|
|
116
|
+
if (health.status !== 'available') {
|
|
117
|
+
throw new CodexThreadRuntimeUnavailableError(`Codex is ${health.status === 'signed-out' ? 'signed out' : 'unavailable'}.${health.reason ? ` ${health.reason}` : ''}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
83
120
|
function parseThreadListParams(searchParams) {
|
|
84
121
|
const limit = parseLimit(searchParams.get('limit'));
|
|
85
122
|
if (limit instanceof Error)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-runtime-codex.js","sourceRoot":"","sources":["../../../src/server/handlers/agent-runtime-codex.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,kCAAkC,GAOnC,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,IAAI,EAA6B,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-runtime-codex.js","sourceRoot":"","sources":["../../../src/server/handlers/agent-runtime-codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { type AcpAgentOverride } from '../../protocols/acp/index.js';
|
|
2
|
+
import { type CodexShellEnvValueReader } from '../../agent-runtime/codex-env.js';
|
|
3
|
+
import type { AgentRuntimeEnvironmentSettings } from '../../agent-runtime/runtime-env.js';
|
|
2
4
|
import { type MindosServerResponse } from '../response.js';
|
|
3
5
|
export type AgentRuntimeKind = 'mindos' | 'acp' | 'codex' | 'claude';
|
|
4
6
|
export type AgentRuntimeStatus = 'available' | 'missing' | 'signed-out' | 'error';
|
|
@@ -83,6 +85,7 @@ export type AgentRuntimePayload = {
|
|
|
83
85
|
};
|
|
84
86
|
export type AgentRuntimesSettings = {
|
|
85
87
|
acpAgents?: Record<string, AcpAgentOverride>;
|
|
88
|
+
agentRuntimeEnv?: AgentRuntimeEnvironmentSettings;
|
|
86
89
|
};
|
|
87
90
|
export type NativeRuntimeHealthResult = {
|
|
88
91
|
status: Exclude<AgentRuntimeStatus, 'missing'>;
|
|
@@ -117,8 +120,15 @@ export declare function checkCodexProviderEnvironment(input?: {
|
|
|
117
120
|
env?: NodeJS.ProcessEnv;
|
|
118
121
|
configText?: string;
|
|
119
122
|
configPath?: string;
|
|
123
|
+
readShellEnvValue?: CodexShellEnvValueReader;
|
|
120
124
|
}): NativeRuntimeHealthResult;
|
|
121
125
|
export declare function defaultCheckNativeRuntimeHealth(input: NativeRuntimeHealthInput): Promise<NativeRuntimeHealthResult>;
|
|
126
|
+
export declare function checkClaudeRuntimeHealth(input: {
|
|
127
|
+
binaryPath: string;
|
|
128
|
+
timeoutMs?: number;
|
|
129
|
+
importSdk?: () => Promise<unknown>;
|
|
130
|
+
checkCliVersion?: (binaryPath: string, timeoutMs: number) => Promise<NativeRuntimeHealthResult>;
|
|
131
|
+
}): Promise<NativeRuntimeHealthResult>;
|
|
122
132
|
export declare function handleAgentRuntimesGet(searchParams: URLSearchParams, services?: AgentRuntimesServices): Promise<MindosServerResponse<AgentRuntimesPayload | AgentRuntimePayload | {
|
|
123
133
|
error: string;
|
|
124
134
|
}>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-runtimes.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/agent-runtimes.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-runtimes.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/agent-runtimes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { detectLocalAcpAgents as defaultDetectLocalAcpAgents, resolveCommandPath, } from '../../protocols/acp/index.js';
|
|
2
|
+
import { readCodexConfigText, resolveCodexProviderEnvironment, } from '../../agent-runtime/codex-env.js';
|
|
3
|
+
import { compactRuntimeDiagnosticHints, summarizeRuntimeFailure, } from '../../agent-runtime/runtime-errors.js';
|
|
2
4
|
import { spawn } from 'node:child_process';
|
|
3
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
4
|
-
import { homedir } from 'node:os';
|
|
5
|
-
import { join } from 'node:path';
|
|
6
5
|
import { errorResponse, json, privateCacheHeaders } from '../response.js';
|
|
7
6
|
const mindosCapabilities = {
|
|
8
7
|
ownsModelSelection: true,
|
|
@@ -80,15 +79,28 @@ const nativeRuntimeDefinitions = [
|
|
|
80
79
|
function isRecord(value) {
|
|
81
80
|
return !!value && typeof value === 'object' && !Array.isArray(value);
|
|
82
81
|
}
|
|
83
|
-
function classifyRuntimeFailure(message) {
|
|
82
|
+
function classifyRuntimeFailure(message, runtime) {
|
|
84
83
|
const normalized = message.trim() || 'Runtime failed to start.';
|
|
84
|
+
const summary = summarizeRuntimeFailure(normalized, { runtime });
|
|
85
85
|
if (/\b(login|log in|signin|sign in|auth|authentication|unauthori[sz]ed|credential|api key|token)\b/i.test(normalized)) {
|
|
86
|
-
return {
|
|
86
|
+
return {
|
|
87
|
+
status: 'signed-out',
|
|
88
|
+
reason: summary.reason,
|
|
89
|
+
...(summary.diagnosticHints ? { diagnosticHints: summary.diagnosticHints } : {}),
|
|
90
|
+
};
|
|
87
91
|
}
|
|
88
92
|
if (/missing environment variable/i.test(normalized)) {
|
|
89
|
-
return {
|
|
93
|
+
return {
|
|
94
|
+
status: 'signed-out',
|
|
95
|
+
reason: summary.reason,
|
|
96
|
+
...(summary.diagnosticHints ? { diagnosticHints: summary.diagnosticHints } : {}),
|
|
97
|
+
};
|
|
90
98
|
}
|
|
91
|
-
return {
|
|
99
|
+
return {
|
|
100
|
+
status: 'error',
|
|
101
|
+
reason: summary.reason,
|
|
102
|
+
...(summary.diagnosticHints ? { diagnosticHints: summary.diagnosticHints } : {}),
|
|
103
|
+
};
|
|
92
104
|
}
|
|
93
105
|
function isResolvedCommandSource(value) {
|
|
94
106
|
return value === 'user-override' || value === 'descriptor' || value === 'registry';
|
|
@@ -163,9 +175,13 @@ function isClaudeAgent(agent) {
|
|
|
163
175
|
}
|
|
164
176
|
function nativeDescriptor(input) {
|
|
165
177
|
const status = input.source ? input.source.status ?? 'available' : input.missing?.status ?? 'missing';
|
|
166
|
-
const
|
|
178
|
+
const rawReason = input.source?.reason ?? input.missing?.reason;
|
|
179
|
+
const reasonSummary = rawReason ? summarizeRuntimeFailure(rawReason, { runtime: input.id }) : null;
|
|
180
|
+
const reason = reasonSummary?.reason;
|
|
181
|
+
const sourceDiagnosticHints = compactRuntimeDiagnosticHints(input.source?.diagnosticHints ?? input.missing?.diagnosticHints, { runtime: input.id }).filter((hint) => hint !== reason);
|
|
167
182
|
const diagnosticHints = Array.from(new Set([
|
|
168
|
-
...
|
|
183
|
+
...sourceDiagnosticHints,
|
|
184
|
+
...(reasonSummary?.diagnosticHints ?? []),
|
|
169
185
|
...nativeRuntimeDiagnosticHints({
|
|
170
186
|
id: input.id,
|
|
171
187
|
name: input.name,
|
|
@@ -339,7 +355,7 @@ function buildAcpScopedPayload(input) {
|
|
|
339
355
|
}));
|
|
340
356
|
return { runtimes, installed, notInstalled };
|
|
341
357
|
}
|
|
342
|
-
async function checkProcessVersion(command, args, timeoutMs) {
|
|
358
|
+
async function checkProcessVersion(command, args, timeoutMs, runtime) {
|
|
343
359
|
return new Promise((resolve) => {
|
|
344
360
|
const child = spawn(command, args, { stdio: ['ignore', 'pipe', 'pipe'] });
|
|
345
361
|
let stdout = '';
|
|
@@ -359,24 +375,24 @@ async function checkProcessVersion(command, args, timeoutMs) {
|
|
|
359
375
|
}, timeoutMs);
|
|
360
376
|
child.stdout.on('data', (chunk) => { stdout += String(chunk); });
|
|
361
377
|
child.stderr.on('data', (chunk) => { stderr += String(chunk); });
|
|
362
|
-
child.once('error', (error) => finish(classifyRuntimeFailure(error.message)));
|
|
378
|
+
child.once('error', (error) => finish(classifyRuntimeFailure(error.message, runtime)));
|
|
363
379
|
child.once('exit', (code) => {
|
|
364
380
|
if (code === 0) {
|
|
365
381
|
finish({ status: 'available' });
|
|
366
382
|
return;
|
|
367
383
|
}
|
|
368
|
-
finish(classifyRuntimeFailure((stderr || stdout || `${command} exited with code ${code ?? 'unknown'}`).trim()));
|
|
384
|
+
finish(classifyRuntimeFailure((stderr || stdout || `${command} exited with code ${code ?? 'unknown'}`).trim(), runtime));
|
|
369
385
|
});
|
|
370
386
|
});
|
|
371
387
|
}
|
|
372
388
|
async function checkCodexCliRuntime(command, timeoutMs) {
|
|
373
|
-
const appServerHelp = await checkProcessVersion(command, ['app-server', '--help'], timeoutMs);
|
|
389
|
+
const appServerHelp = await checkProcessVersion(command, ['app-server', '--help'], timeoutMs, 'codex');
|
|
374
390
|
if (appServerHelp.status !== 'available')
|
|
375
391
|
return appServerHelp;
|
|
376
392
|
const providerEnvironment = checkCodexProviderEnvironment();
|
|
377
393
|
if (providerEnvironment.status !== 'available')
|
|
378
394
|
return providerEnvironment;
|
|
379
|
-
const loginStatus = await checkProcessVersion(command, ['login', 'status'], timeoutMs);
|
|
395
|
+
const loginStatus = await checkProcessVersion(command, ['login', 'status'], timeoutMs, 'codex');
|
|
380
396
|
return mergeCodexProviderAndLoginHealth(providerEnvironment, loginStatus);
|
|
381
397
|
}
|
|
382
398
|
export function mergeCodexProviderAndLoginHealth(providerEnvironment, loginStatus) {
|
|
@@ -396,55 +412,36 @@ export function mergeCodexProviderAndLoginHealth(providerEnvironment, loginStatu
|
|
|
396
412
|
}
|
|
397
413
|
export function checkCodexProviderEnvironment(input = {}) {
|
|
398
414
|
const env = input.env ?? process.env;
|
|
399
|
-
const
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
const envKey = providerSection ? extractTomlStringValue(providerSection, 'env_key') : undefined;
|
|
407
|
-
if (!envKey || env[envKey])
|
|
415
|
+
const resolution = resolveCodexProviderEnvironment({
|
|
416
|
+
env,
|
|
417
|
+
configText: input.configText,
|
|
418
|
+
configPath: input.configPath,
|
|
419
|
+
readShellEnvValue: input.readShellEnvValue,
|
|
420
|
+
});
|
|
421
|
+
if (!resolution.envKey)
|
|
408
422
|
return { status: 'available' };
|
|
423
|
+
if (resolution.value) {
|
|
424
|
+
return {
|
|
425
|
+
status: 'available',
|
|
426
|
+
...(resolution.source === 'login-shell'
|
|
427
|
+
? { diagnosticHints: [`Codex provider environment key ${resolution.envKey} was found through MindOS runtime environment fallback and will be injected only into Codex app-server.`] }
|
|
428
|
+
: {}),
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
const configText = input.configText ?? readCodexConfigText(input.configPath, env);
|
|
432
|
+
const provider = configText ? extractTomlStringValue(configText, 'model_provider') : undefined;
|
|
409
433
|
return {
|
|
410
434
|
status: 'signed-out',
|
|
411
|
-
reason:
|
|
435
|
+
reason: provider
|
|
436
|
+
? `Codex model provider "${provider}" requires ${resolution.envKey}, but MindOS cannot see that environment variable in the app process, OS user environment, or login shell. Export ${resolution.envKey} in your shell profile or OS user environment before starting MindOS, or switch Codex to a provider that does not require it.`
|
|
437
|
+
: `Codex requires ${resolution.envKey}, but MindOS cannot see that environment variable in the app process, OS user environment, or login shell.`,
|
|
412
438
|
};
|
|
413
439
|
}
|
|
414
|
-
function readCodexConfigText(configPath, env) {
|
|
415
|
-
const resolvedPath = configPath ?? join(env.CODEX_HOME || join(homedir(), '.codex'), 'config.toml');
|
|
416
|
-
try {
|
|
417
|
-
if (!existsSync(resolvedPath))
|
|
418
|
-
return undefined;
|
|
419
|
-
return readFileSync(resolvedPath, 'utf8');
|
|
420
|
-
}
|
|
421
|
-
catch {
|
|
422
|
-
return undefined;
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
440
|
function extractTomlStringValue(text, key) {
|
|
426
441
|
const escapedKey = escapeRegExp(key);
|
|
427
442
|
const match = text.match(new RegExp(`^\\s*${escapedKey}\\s*=\\s*"([^"]*)"\\s*$`, 'm'));
|
|
428
443
|
return match?.[1]?.trim() || undefined;
|
|
429
444
|
}
|
|
430
|
-
function extractTomlSection(text, sectionName) {
|
|
431
|
-
const lines = text.split(/\r?\n/);
|
|
432
|
-
const targetHeader = `[${sectionName}]`;
|
|
433
|
-
const sectionLines = [];
|
|
434
|
-
let inSection = false;
|
|
435
|
-
for (const line of lines) {
|
|
436
|
-
const trimmed = line.trim();
|
|
437
|
-
if (trimmed.startsWith('[') && trimmed.endsWith(']')) {
|
|
438
|
-
if (inSection)
|
|
439
|
-
break;
|
|
440
|
-
inSection = trimmed === targetHeader;
|
|
441
|
-
continue;
|
|
442
|
-
}
|
|
443
|
-
if (inSection)
|
|
444
|
-
sectionLines.push(line);
|
|
445
|
-
}
|
|
446
|
-
return inSection ? sectionLines.join('\n') : undefined;
|
|
447
|
-
}
|
|
448
445
|
function escapeRegExp(value) {
|
|
449
446
|
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
450
447
|
}
|
|
@@ -453,32 +450,52 @@ export async function defaultCheckNativeRuntimeHealth(input) {
|
|
|
453
450
|
if (input.runtime === 'codex') {
|
|
454
451
|
return checkCodexCliRuntime(input.agent.binaryPath, timeoutMs);
|
|
455
452
|
}
|
|
456
|
-
return
|
|
453
|
+
return checkClaudeRuntimeHealth({ binaryPath: input.agent.binaryPath, timeoutMs });
|
|
457
454
|
}
|
|
458
|
-
async function
|
|
459
|
-
|
|
460
|
-
|
|
455
|
+
export async function checkClaudeRuntimeHealth(input) {
|
|
456
|
+
const timeoutMs = input.timeoutMs ?? NATIVE_HEALTH_TIMEOUT_MS;
|
|
457
|
+
const binaryPath = input.binaryPath;
|
|
458
|
+
const importSdk = input.importSdk ?? (() => import('@anthropic-ai/claude-agent-sdk'));
|
|
459
|
+
const checkCliVersion = input.checkCliVersion ?? ((path, ms) => checkProcessVersion(path, ['--version'], ms, 'claude'));
|
|
460
|
+
if (!binaryPath.trim() || binaryPath.startsWith('sdk:')) {
|
|
461
461
|
return {
|
|
462
|
-
status: '
|
|
462
|
+
status: 'error',
|
|
463
|
+
reason: 'Claude Code requires a local claude executable on the MindOS server PATH. MindOS does not bundle the Claude Agent SDK native runtime.',
|
|
463
464
|
diagnosticHints: [
|
|
464
|
-
|
|
465
|
-
? 'Claude Agent SDK is bundled with MindOS; a global claude command is optional.'
|
|
466
|
-
: `Claude CLI was also detected at ${binaryPath}; MindOS uses Claude Agent SDK first and falls back to CLI if needed.`,
|
|
465
|
+
'Install Claude Code locally and restart MindOS so the server process can resolve the claude command.',
|
|
467
466
|
],
|
|
468
467
|
};
|
|
469
468
|
}
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
469
|
+
const cliHealth = await checkCliVersion(binaryPath, timeoutMs);
|
|
470
|
+
if (cliHealth.status !== 'available')
|
|
471
|
+
return cliHealth;
|
|
472
|
+
try {
|
|
473
|
+
const sdk = await withTimeout(importSdk(), timeoutMs, `Claude Agent SDK health check timed out after ${timeoutMs}ms.`);
|
|
474
|
+
if (typeof sdk.query === 'function') {
|
|
473
475
|
return {
|
|
474
|
-
|
|
476
|
+
status: 'available',
|
|
475
477
|
diagnosticHints: [
|
|
476
|
-
...(
|
|
477
|
-
`Claude Agent SDK is
|
|
478
|
+
...(cliHealth.diagnosticHints ?? []),
|
|
479
|
+
`Claude Agent SDK bridge is available and will use the local Claude Code CLI at ${binaryPath}.`,
|
|
478
480
|
],
|
|
479
481
|
};
|
|
480
482
|
}
|
|
481
|
-
|
|
483
|
+
return {
|
|
484
|
+
status: 'available',
|
|
485
|
+
diagnosticHints: [
|
|
486
|
+
...(cliHealth.diagnosticHints ?? []),
|
|
487
|
+
`Claude Code CLI is available at ${binaryPath}; Claude Agent SDK bridge did not expose query(), so MindOS will use CLI fallback.`,
|
|
488
|
+
],
|
|
489
|
+
};
|
|
490
|
+
}
|
|
491
|
+
catch (error) {
|
|
492
|
+
return {
|
|
493
|
+
status: 'available',
|
|
494
|
+
diagnosticHints: [
|
|
495
|
+
...(cliHealth.diagnosticHints ?? []),
|
|
496
|
+
`Claude Code CLI is available at ${binaryPath}; Claude Agent SDK bridge is unavailable, so MindOS will use CLI fallback. ${error instanceof Error ? error.message : String(error)}`,
|
|
497
|
+
],
|
|
498
|
+
};
|
|
482
499
|
}
|
|
483
500
|
}
|
|
484
501
|
async function applyNativeRuntimeHealth(installed, services) {
|
|
@@ -506,7 +523,7 @@ async function applyNativeRuntimeHealth(installed, services) {
|
|
|
506
523
|
};
|
|
507
524
|
}
|
|
508
525
|
catch (error) {
|
|
509
|
-
const result = classifyRuntimeFailure(error instanceof Error ? error.message : String(error));
|
|
526
|
+
const result = classifyRuntimeFailure(error instanceof Error ? error.message : String(error), runtime);
|
|
510
527
|
return {
|
|
511
528
|
...(isRecord(raw) ? raw : detected),
|
|
512
529
|
status: result.status,
|
|
@@ -519,40 +536,11 @@ async function applyNativeRuntimeHealth(installed, services) {
|
|
|
519
536
|
async function detectNativeRuntimeDefinition(candidate, services) {
|
|
520
537
|
const checkNativeRuntimeHealth = services.checkNativeRuntimeHealth ?? defaultCheckNativeRuntimeHealth;
|
|
521
538
|
const resolveRuntimeCommand = services.resolveRuntimeCommand ?? resolveCommandPath;
|
|
539
|
+
if (candidate.runtime === 'claude') {
|
|
540
|
+
return detectClaudeNativeRuntimeDefinition(candidate, services);
|
|
541
|
+
}
|
|
522
542
|
const binaryPath = await resolveRuntimeCommand(candidate.command);
|
|
523
543
|
if (!binaryPath) {
|
|
524
|
-
if (candidate.runtime === 'claude') {
|
|
525
|
-
const sdkBinaryPath = 'sdk:@anthropic-ai/claude-agent-sdk';
|
|
526
|
-
try {
|
|
527
|
-
const health = await checkNativeRuntimeHealth({
|
|
528
|
-
runtime: candidate.runtime,
|
|
529
|
-
agent: { id: candidate.id, name: candidate.name, binaryPath: sdkBinaryPath },
|
|
530
|
-
timeoutMs: NATIVE_HEALTH_TIMEOUT_MS,
|
|
531
|
-
});
|
|
532
|
-
return {
|
|
533
|
-
id: candidate.id,
|
|
534
|
-
name: candidate.name,
|
|
535
|
-
binaryPath: sdkBinaryPath,
|
|
536
|
-
status: health.status,
|
|
537
|
-
reason: health.reason,
|
|
538
|
-
diagnosticHints: [
|
|
539
|
-
...(health.diagnosticHints ?? []),
|
|
540
|
-
'Global claude command was not detected; CLI fallback will be unavailable until it is installed or on MindOS server PATH.',
|
|
541
|
-
],
|
|
542
|
-
};
|
|
543
|
-
}
|
|
544
|
-
catch (error) {
|
|
545
|
-
const result = classifyRuntimeFailure(error instanceof Error ? error.message : String(error));
|
|
546
|
-
return {
|
|
547
|
-
id: candidate.id,
|
|
548
|
-
name: candidate.name,
|
|
549
|
-
installCmd: candidate.installCmd,
|
|
550
|
-
packageName: candidate.installCmd.match(/npm install -g (.+)/)?.[1],
|
|
551
|
-
status: 'error',
|
|
552
|
-
reason: `Claude Agent SDK is unavailable and the global claude command was not detected. ${result.reason ?? ''}`.trim(),
|
|
553
|
-
};
|
|
554
|
-
}
|
|
555
|
-
}
|
|
556
544
|
return {
|
|
557
545
|
id: candidate.id,
|
|
558
546
|
name: candidate.name,
|
|
@@ -579,7 +567,59 @@ async function detectNativeRuntimeDefinition(candidate, services) {
|
|
|
579
567
|
};
|
|
580
568
|
}
|
|
581
569
|
catch (error) {
|
|
582
|
-
const result = classifyRuntimeFailure(error instanceof Error ? error.message : String(error));
|
|
570
|
+
const result = classifyRuntimeFailure(error instanceof Error ? error.message : String(error), candidate.runtime);
|
|
571
|
+
return {
|
|
572
|
+
id: candidate.id,
|
|
573
|
+
name: candidate.name,
|
|
574
|
+
binaryPath,
|
|
575
|
+
resolvedCommand: { cmd: candidate.command, args: [], source: 'descriptor' },
|
|
576
|
+
status: result.status,
|
|
577
|
+
...(result.reason ? { reason: result.reason } : {}),
|
|
578
|
+
};
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
async function detectClaudeNativeRuntimeDefinition(candidate, services) {
|
|
582
|
+
const checkNativeRuntimeHealth = services.checkNativeRuntimeHealth ?? defaultCheckNativeRuntimeHealth;
|
|
583
|
+
const resolveRuntimeCommand = services.resolveRuntimeCommand ?? resolveCommandPath;
|
|
584
|
+
const commandResolution = { failureReason: undefined };
|
|
585
|
+
const binaryPath = await withTimeout(resolveRuntimeCommand(candidate.command), RUNTIME_DETECTION_TIMEOUT_MS, `Claude Code executable detection timed out after ${RUNTIME_DETECTION_TIMEOUT_MS}ms.`).catch((error) => {
|
|
586
|
+
commandResolution.failureReason = error instanceof Error ? error.message : String(error);
|
|
587
|
+
return null;
|
|
588
|
+
});
|
|
589
|
+
if (!binaryPath) {
|
|
590
|
+
const timedOut = commandResolution.failureReason?.includes('timed out after');
|
|
591
|
+
return {
|
|
592
|
+
id: candidate.id,
|
|
593
|
+
name: candidate.name,
|
|
594
|
+
installCmd: candidate.installCmd,
|
|
595
|
+
packageName: candidate.installCmd.match(/npm install -g (.+)/)?.[1],
|
|
596
|
+
status: 'missing',
|
|
597
|
+
reason: timedOut
|
|
598
|
+
? `${commandResolution.failureReason} MindOS does not bundle the Claude Agent SDK native runtime.`
|
|
599
|
+
: 'Claude Code executable was not detected. MindOS does not bundle the Claude Agent SDK native runtime.',
|
|
600
|
+
diagnosticHints: [
|
|
601
|
+
'Install Claude Code locally or add claude to the PATH used to start MindOS.',
|
|
602
|
+
],
|
|
603
|
+
};
|
|
604
|
+
}
|
|
605
|
+
try {
|
|
606
|
+
const health = await checkNativeRuntimeHealth({
|
|
607
|
+
runtime: candidate.runtime,
|
|
608
|
+
agent: { id: candidate.id, name: candidate.name, binaryPath },
|
|
609
|
+
timeoutMs: NATIVE_HEALTH_TIMEOUT_MS,
|
|
610
|
+
});
|
|
611
|
+
return {
|
|
612
|
+
id: candidate.id,
|
|
613
|
+
name: candidate.name,
|
|
614
|
+
binaryPath,
|
|
615
|
+
resolvedCommand: { cmd: candidate.command, args: [], source: 'descriptor' },
|
|
616
|
+
status: health.status,
|
|
617
|
+
...(health.reason ? { reason: health.reason } : {}),
|
|
618
|
+
...(health.diagnosticHints ? { diagnosticHints: health.diagnosticHints } : {}),
|
|
619
|
+
};
|
|
620
|
+
}
|
|
621
|
+
catch (error) {
|
|
622
|
+
const result = classifyRuntimeFailure(error instanceof Error ? error.message : String(error), candidate.runtime);
|
|
583
623
|
return {
|
|
584
624
|
id: candidate.id,
|
|
585
625
|
name: candidate.name,
|