@exreve/exk 1.0.10 → 1.0.12

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.
@@ -618,8 +618,12 @@ export class AgentSessionManager {
618
618
  isError: msg.is_error,
619
619
  exitCode: msg.is_error ? 1 : 0,
620
620
  durationMs: msg.duration_ms,
621
+ durationApiMs: msg.duration_api_ms,
621
622
  totalCostUsd: msg.total_cost_usd,
622
623
  usage: msg.usage,
624
+ modelUsage: msg.modelUsage,
625
+ structuredOutput: msg.structured_output,
626
+ numTurns: msg.num_turns,
623
627
  contextInfo: {
624
628
  messageCount: session.messages.length,
625
629
  totalInputTokens: session.totalInputTokens,
@@ -721,6 +725,47 @@ export class AgentSessionManager {
721
725
  }
722
726
  });
723
727
  }
728
+ else if (message.type === 'tool_use_summary') {
729
+ const msg = message;
730
+ onOutput({
731
+ type: 'tool_use_summary',
732
+ data: msg.summary || '',
733
+ timestamp: Date.now(),
734
+ metadata: {
735
+ precedingToolUseIds: msg.preceding_tool_use_ids,
736
+ uuid: msg.uuid,
737
+ sessionId: msg.session_id
738
+ }
739
+ });
740
+ }
741
+ else if (message.type === 'rate_limit_event') {
742
+ const msg = message;
743
+ onOutput({
744
+ type: 'rate_limit_event',
745
+ data: msg,
746
+ timestamp: Date.now(),
747
+ metadata: {
748
+ rateLimitInfo: msg.rate_limit_info,
749
+ uuid: msg.uuid,
750
+ sessionId: msg.session_id
751
+ }
752
+ });
753
+ }
754
+ else if (message.type === 'prompt_suggestion') {
755
+ const msg = message;
756
+ onOutput({
757
+ type: 'prompt_suggestion',
758
+ data: msg.suggestion || '',
759
+ timestamp: Date.now(),
760
+ metadata: {
761
+ uuid: msg.uuid,
762
+ sessionId: msg.session_id
763
+ }
764
+ });
765
+ }
766
+ else if (message.type === 'keep_alive') {
767
+ // Internal keepalive - silently ignore
768
+ }
724
769
  else {
725
770
  onOutput({
726
771
  type: 'stdout',
package/dist/index.js CHANGED
@@ -941,7 +941,7 @@ async function runDaemon(foreground = false, email) {
941
941
  socket?.emit('fs:list:response', { success: false, error: error.message });
942
942
  }
943
943
  });
944
- // File write handler
944
+ // File write handler - supports text (utf-8) and binary (base64) files
945
945
  socket.on('fs:write', async (data) => {
946
946
  try {
947
947
  const { filePath, content, encoding = 'utf-8' } = data;
@@ -953,8 +953,14 @@ async function runDaemon(foreground = false, email) {
953
953
  // Ensure directory exists
954
954
  const dir = path.dirname(filePath);
955
955
  await fs.mkdir(dir, { recursive: true });
956
- // Write file
957
- await fs.writeFile(filePath, content, encoding);
956
+ // Write file - support base64 encoding for binary files
957
+ if (encoding === 'base64') {
958
+ const buffer = Buffer.from(content, 'base64');
959
+ await fs.writeFile(filePath, buffer);
960
+ }
961
+ else {
962
+ await fs.writeFile(filePath, content, encoding);
963
+ }
958
964
  socket?.emit('fs:write:response', { success: true });
959
965
  }
960
966
  catch (err) {
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@exreve/exk",
3
- "version": "1.0.10",
3
+ "version": "1.0.12",
4
4
  "description": "exk - Control Claude CLI with voice and programmable interfaces",
5
5
  "type": "module",
6
6
  "bin": {
@@ -33,8 +33,8 @@
33
33
  "url": ""
34
34
  },
35
35
  "dependencies": {
36
- "@anthropic-ai/claude-agent-sdk": "^0.1.23",
37
- "@anthropic-ai/sdk": "^0.74.0",
36
+ "@anthropic-ai/claude-agent-sdk": "^0.2.87",
37
+ "@anthropic-ai/sdk": "^0.80.0",
38
38
  "@fastify/static": "^9.0.0",
39
39
  "@xenova/transformers": "^2.17.2",
40
40
  "chokidar": "^3.6.0",