Skip to content

Commit 4925552

Browse files
authored
Merge pull request #93 from lsm/dev
Binary build timed out (infrastructure issue) - all tests passed. Merging manually.
2 parents bfd1f29 + e94d016 commit 4925552

File tree

19 files changed

+231
-83
lines changed

19 files changed

+231
-83
lines changed

bun.lock

Lines changed: 46 additions & 24 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

npm/neokai/package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
{
22
"name": "neokai",
3-
"version": "0.5.0",
3+
"version": "0.5.1",
44
"description": "NeoKai - Claude Agent SDK Web Interface",
55
"bin": {
66
"kai": "bin/kai.js"
77
},
88
"optionalDependencies": {
9-
"@neokai/cli-darwin-arm64": "0.4.0",
10-
"@neokai/cli-darwin-x64": "0.4.0",
11-
"@neokai/cli-linux-x64": "0.4.0",
12-
"@neokai/cli-linux-arm64": "0.4.0"
9+
"@neokai/cli-darwin-arm64": "0.5.0",
10+
"@neokai/cli-darwin-x64": "0.5.0",
11+
"@neokai/cli-linux-x64": "0.5.0",
12+
"@neokai/cli-linux-arm64": "0.5.0"
1313
},
1414
"files": [
1515
"bin/"

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"@biomejs/biome": "2.3.14",
2222
"@testing-library/preact": "3.2.4",
2323
"knip": "5.83.1",
24-
"oxlint": "1.43.0",
24+
"oxlint": "1.46.0",
2525
"typescript": "5.9.3"
2626
}
2727
}

packages/cli/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@neokai/cli",
3-
"version": "0.5.0",
3+
"version": "0.5.1",
44
"type": "module",
55
"license": "Apache-2.0",
66
"bin": {

packages/daemon/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@neokai/daemon",
3-
"version": "0.5.0",
3+
"version": "0.5.1",
44
"type": "module",
55
"license": "Apache-2.0",
66
"main": "main.ts",
@@ -20,7 +20,7 @@
2020
"test:online": "bun test --coverage --coverage-reporter=text ./tests/online"
2121
},
2222
"dependencies": {
23-
"@anthropic-ai/claude-agent-sdk": "^0.2.37",
23+
"@anthropic-ai/claude-agent-sdk": "^0.2.39",
2424
"@neokai/shared": "workspace:*",
2525
"simple-git": "3.30.0"
2626
},

packages/daemon/src/lib/agent/query-options-builder.ts

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import type { Options, CanUseTool } from '@anthropic-ai/claude-agent-sdk/sdk';
2222
import type {
2323
Session,
2424
ThinkingLevel,
25+
ThinkingConfig,
2526
SystemPromptConfig,
2627
ClaudeCodePreset,
2728
AgentDefinition,
@@ -244,12 +245,27 @@ export class QueryOptionsBuilder {
244245
return cleanedOptions;
245246
}
246247

248+
/**
249+
* Convert ThinkingLevel enum to new thinking option
250+
* Maps the UI-friendly enum to SDK's new thinking API
251+
*/
252+
private thinkingLevelToThinkingConfig(level: ThinkingLevel): ThinkingConfig {
253+
const tokens = THINKING_LEVEL_TOKENS[level];
254+
255+
if (tokens === undefined) {
256+
// 'auto' mode
257+
return { type: 'adaptive' };
258+
}
259+
260+
return { type: 'enabled', budgetTokens: tokens };
261+
}
262+
247263
/**
248264
* Add resume and thinking tokens to options
249265
* Called separately since these depend on session state at query time
250266
*/
251267
addSessionStateOptions(options: Options): Options {
252-
const result = { ...options };
268+
const result = { ...options } as Options & { thinking?: ThinkingConfig };
253269

254270
// Add resume parameter if SDK session ID exists (session resumption)
255271
if (this.ctx.session.sdkSessionId) {
@@ -262,14 +278,11 @@ export class QueryOptionsBuilder {
262278
result.resumeSessionAt = this.ctx.session.metadata.resumeSessionAt;
263279
}
264280

265-
// Add thinking token budget based on thinkingLevel config
281+
// Add thinking configuration based on thinkingLevel config
266282
const thinkingLevel = (this.ctx.session.config.thinkingLevel || 'auto') as ThinkingLevel;
267-
const maxThinkingTokens = THINKING_LEVEL_TOKENS[thinkingLevel];
268-
if (maxThinkingTokens !== undefined) {
269-
result.maxThinkingTokens = maxThinkingTokens;
270-
}
283+
result.thinking = this.thinkingLevelToThinkingConfig(thinkingLevel);
271284

272-
return result;
285+
return result as Options;
273286
}
274287

275288
/**

packages/daemon/src/lib/agent/query-runner.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export interface OriginalEnvVars {
3838
ANTHROPIC_DEFAULT_SONNET_MODEL?: string;
3939
ANTHROPIC_DEFAULT_HAIKU_MODEL?: string;
4040
ANTHROPIC_DEFAULT_OPUS_MODEL?: string;
41+
CLAUDE_AGENT_SDK_CLIENT_APP?: string;
4142
}
4243

4344
/**
@@ -151,6 +152,11 @@ export class QueryRunner {
151152
const originalEnvVars = providerService.applyEnvVarsToProcess(modelId);
152153
this.ctx.originalEnvVars = originalEnvVars;
153154

155+
// Set SDK client identifier for analytics
156+
this.ctx.originalEnvVars.CLAUDE_AGENT_SDK_CLIENT_APP =
157+
process.env.CLAUDE_AGENT_SDK_CLIENT_APP;
158+
process.env.CLAUDE_AGENT_SDK_CLIENT_APP = 'neokai/0.5.0';
159+
154160
// const provider = providerRegistry.detectProvider(modelId);
155161

156162
// Create query with AsyncGenerator

packages/daemon/src/lib/agent/sdk-runtime-config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ export class SDKRuntimeConfig {
6464

6565
/**
6666
* Set max thinking tokens at runtime
67+
* @deprecated Use session.setThinkingLevel() instead. This uses the deprecated
68+
* SDK API which is treated as on/off (0 = disabled, any value = adaptive) on Opus 4.6.
6769
*/
6870
async setMaxThinkingTokens(tokens: number | null): Promise<ConfigUpdateResult> {
6971
const { session, db, daemonHub, logger, queryObject, firstMessageReceived } = this.ctx;

packages/daemon/src/lib/provider-service.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ interface OriginalEnvVars {
9393
ANTHROPIC_DEFAULT_SONNET_MODEL?: string;
9494
ANTHROPIC_DEFAULT_HAIKU_MODEL?: string;
9595
ANTHROPIC_DEFAULT_OPUS_MODEL?: string;
96+
CLAUDE_AGENT_SDK_CLIENT_APP?: string;
9697
}
9798

9899
/**
@@ -529,6 +530,11 @@ export class ProviderService {
529530
} else {
530531
delete process.env.ANTHROPIC_DEFAULT_OPUS_MODEL;
531532
}
533+
if (original.CLAUDE_AGENT_SDK_CLIENT_APP !== undefined) {
534+
process.env.CLAUDE_AGENT_SDK_CLIENT_APP = original.CLAUDE_AGENT_SDK_CLIENT_APP;
535+
} else {
536+
delete process.env.CLAUDE_AGENT_SDK_CLIENT_APP;
537+
}
532538
}
533539

534540
/**

packages/daemon/src/lib/settings-manager.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,11 +106,16 @@ export class SettingsManager {
106106
sdkOptions.additionalDirectories = settings.additionalDirectories;
107107
}
108108

109-
// Thinking
110-
if (settings.maxThinkingTokens !== undefined) {
111-
// null means disabled, so pass undefined to SDK
112-
sdkOptions.maxThinkingTokens = settings.maxThinkingTokens ?? undefined;
109+
// Thinking (new SDK API)
110+
if (settings.maxThinkingTokens !== undefined && settings.maxThinkingTokens !== null) {
111+
sdkOptions.thinking = {
112+
type: 'enabled',
113+
budgetTokens: settings.maxThinkingTokens,
114+
};
115+
} else if (settings.maxThinkingTokens === null) {
116+
sdkOptions.thinking = { type: 'disabled' };
113117
}
118+
// Otherwise, session-level thinkingLevel will be used in query-options-builder
114119

115120
// Environment
116121
if (settings.env) {

0 commit comments

Comments
 (0)