bopodev-agent-sdk 0.1.14 → 0.1.16

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.
@@ -1,5 +1,5 @@
1
1
 
2
2
  
3
- > bopodev-agent-sdk@0.1.14 build /Users/danielkrusenstrahle/Documents/Projects/Monorepo/bopohq/packages/agent-sdk
3
+ > bopodev-agent-sdk@0.1.16 build /Users/danielkrusenstrahle/Documents/Projects/Monorepo/bopohq/packages/agent-sdk
4
4
  > tsc -p tsconfig.json --emitDeclarationOnly
5
5
 
@@ -0,0 +1,4 @@
1
+
2
+ > bopodev-agent-sdk@0.1.15 lint /Users/danielkrusenstrahle/Documents/Projects/Monorepo/bopohq/packages/agent-sdk
3
+ > tsc -p tsconfig.json --noEmit
4
+
@@ -1,4 +1,4 @@
1
1
 
2
- > bopodev-agent-sdk@0.1.12 typecheck /Users/danielkrusenstrahle/Documents/Projects/Monorepo/bopohq/packages/agent-sdk
2
+ > bopodev-agent-sdk@0.1.15 typecheck /Users/danielkrusenstrahle/Documents/Projects/Monorepo/bopohq/packages/agent-sdk
3
3
  > tsc -p tsconfig.json --noEmit
4
4
 
@@ -1,2 +1,13 @@
1
- export { parseClaudeStreamOutput as parseClaudeOutput } from "../../../../agent-sdk/src/runtime-parsers";
1
+ import type { AdapterRuntimeUsageResolution } from "../../../../agent-sdk/src/adapters";
2
2
  export { isClaudeRunIncomplete, isUnknownSessionError as isClaudeUnknownSessionError } from "../../../../agent-sdk/src/adapters";
3
+ export declare function resolveClaudeRuntimeUsage(input: {
4
+ stdout: string;
5
+ stderr: string;
6
+ parsedUsage?: {
7
+ tokenInput?: number;
8
+ tokenOutput?: number;
9
+ usdCost?: number;
10
+ summary?: string;
11
+ };
12
+ structuredOutputSource?: "stdout" | "stderr";
13
+ }): AdapterRuntimeUsageResolution;
@@ -1,2 +1,13 @@
1
- export { parseStructuredUsage as parseCodexOutput } from "../../../../agent-sdk/src/runtime-parsers";
1
+ import type { AdapterRuntimeUsageResolution } from "../../../../agent-sdk/src/adapters";
2
2
  export { isUnknownSessionError as isCodexUnknownSessionError } from "../../../../agent-sdk/src/adapters";
3
+ export declare function resolveCodexRuntimeUsage(input: {
4
+ stdout: string;
5
+ stderr: string;
6
+ parsedUsage?: {
7
+ tokenInput?: number;
8
+ tokenOutput?: number;
9
+ usdCost?: number;
10
+ summary?: string;
11
+ };
12
+ structuredOutputSource?: "stdout" | "stderr";
13
+ }): AdapterRuntimeUsageResolution;
@@ -1,2 +1,13 @@
1
- export { parseCursorStreamOutput as parseCursorOutput } from "../../../../agent-sdk/src/runtime-parsers";
1
+ import type { AdapterRuntimeUsageResolution } from "../../../../agent-sdk/src/adapters";
2
2
  export { isUnknownSessionError as isCursorUnknownSessionError, readRuntimeSessionId } from "../../../../agent-sdk/src/adapters";
3
+ export declare function resolveCursorRuntimeUsage(input: {
4
+ stdout: string;
5
+ stderr: string;
6
+ parsedUsage?: {
7
+ tokenInput?: number;
8
+ tokenOutput?: number;
9
+ usdCost?: number;
10
+ summary?: string;
11
+ };
12
+ structuredOutputSource?: "stdout" | "stderr";
13
+ }): AdapterRuntimeUsageResolution;
@@ -1 +1,13 @@
1
+ import type { AdapterRuntimeUsageResolution } from "../../../../agent-sdk/src/adapters";
1
2
  export { parseGeminiOutput, isGeminiUnknownSessionError } from "../../../../agent-sdk/src/adapters";
3
+ export declare function resolveGeminiRuntimeUsage(input: {
4
+ stdout: string;
5
+ stderr: string;
6
+ parsedUsage?: {
7
+ tokenInput?: number;
8
+ tokenOutput?: number;
9
+ usdCost?: number;
10
+ summary?: string;
11
+ };
12
+ structuredOutputSource?: "stdout" | "stderr";
13
+ }): AdapterRuntimeUsageResolution;
@@ -1,5 +1,25 @@
1
- import type { AdapterEnvironmentCheck, AdapterEnvironmentResult, AdapterExecutionResult, AdapterMetadata, AdapterModelOption, AgentAdapter, AgentProviderType, AgentRuntimeConfig, HeartbeatContext } from "./types";
1
+ import type { AdapterEnvironmentCheck, AdapterEnvironmentResult, AdapterExecutionResult, AdapterMetadata, AdapterModelOption, AdapterNormalizedUsage, AgentAdapter, AgentProviderType, AgentRuntimeConfig, HeartbeatContext } from "./types";
2
2
  import { type DirectApiProvider } from "./runtime-http";
3
+ type RuntimeParsedUsage = {
4
+ tokenInput?: number;
5
+ tokenOutput?: number;
6
+ usdCost?: number;
7
+ summary?: string;
8
+ inputTokens?: number;
9
+ cachedInputTokens?: number;
10
+ outputTokens?: number;
11
+ costUsd?: number;
12
+ };
13
+ export type AdapterRuntimeUsageResolution = {
14
+ parsedUsage?: RuntimeParsedUsage;
15
+ structuredOutputSource?: "stdout" | "stderr";
16
+ };
17
+ export type AdapterRuntimeUsageResolver = (runtime: {
18
+ stdout: string;
19
+ stderr: string;
20
+ parsedUsage?: RuntimeParsedUsage;
21
+ structuredOutputSource?: "stdout" | "stderr";
22
+ }) => AdapterRuntimeUsageResolution;
3
23
  export declare class ClaudeCodeAdapter implements AgentAdapter {
4
24
  providerType: "claude_code";
5
25
  execute(context: HeartbeatContext): Promise<AdapterExecutionResult>;
@@ -47,17 +67,18 @@ export declare function testDirectApiEnvironment(providerType: DirectApiProvider
47
67
  export declare function runProviderWork(context: HeartbeatContext, provider: "claude_code" | "codex", pricing: {
48
68
  inputRate: number;
49
69
  outputRate: number;
70
+ }, options?: {
71
+ usageResolver?: AdapterRuntimeUsageResolver;
72
+ }): Promise<AdapterExecutionResult>;
73
+ export declare function runCursorWork(context: HeartbeatContext, options?: {
74
+ usageResolver?: AdapterRuntimeUsageResolver;
50
75
  }): Promise<AdapterExecutionResult>;
51
- export declare function runCursorWork(context: HeartbeatContext): Promise<AdapterExecutionResult>;
52
76
  export declare function runOpenCodeWork(context: HeartbeatContext): Promise<AdapterExecutionResult>;
53
- export declare function runGeminiCliWork(context: HeartbeatContext): Promise<AdapterExecutionResult>;
77
+ export declare function runGeminiCliWork(context: HeartbeatContext, options?: {
78
+ usageResolver?: AdapterRuntimeUsageResolver;
79
+ }): Promise<AdapterExecutionResult>;
54
80
  export declare function resolveFailedUsage(runtime: {
55
- parsedUsage?: {
56
- tokenInput?: number;
57
- tokenOutput?: number;
58
- usdCost?: number;
59
- summary?: string;
60
- };
81
+ parsedUsage?: RuntimeParsedUsage;
61
82
  failureType?: "timeout" | "spawn_error" | "nonzero_exit";
62
83
  stdout: string;
63
84
  stderr: string;
@@ -65,11 +86,13 @@ export declare function resolveFailedUsage(runtime: {
65
86
  tokenInput: number;
66
87
  tokenOutput: number;
67
88
  usdCost: number;
89
+ usage: AdapterNormalizedUsage | undefined;
68
90
  source: "structured";
69
91
  } | {
70
92
  tokenInput: number;
71
93
  tokenOutput: number;
72
94
  usdCost: number;
95
+ usage: AdapterNormalizedUsage;
73
96
  source: "none";
74
97
  };
75
98
  export declare function toProviderResult(context: HeartbeatContext, provider: AgentProviderType, prompt: string, runtime: {
@@ -90,12 +113,7 @@ export declare function toProviderResult(context: HeartbeatContext, provider: Ag
90
113
  spawnErrorCode?: string;
91
114
  forcedKill: boolean;
92
115
  }>;
93
- parsedUsage?: {
94
- tokenInput?: number;
95
- tokenOutput?: number;
96
- usdCost?: number;
97
- summary?: string;
98
- };
116
+ parsedUsage?: RuntimeParsedUsage;
99
117
  structuredOutputSource?: "stdout" | "stderr";
100
118
  structuredOutputDiagnostics?: {
101
119
  stdoutJsonObjectCount: number;
@@ -1 +1 @@
1
- export { parseClaudeStreamOutput, parseCursorStreamOutput, parseRuntimeTranscript, parseStructuredUsage } from "./runtime";
1
+ export { parseClaudeStreamOutput, parseCursorStreamOutput, parseGeminiStreamOutput, parseRuntimeTranscript, parseStructuredUsage } from "./runtime";
@@ -97,13 +97,9 @@ export declare function containsRateLimitFailure(text: string): boolean;
97
97
  export declare function checkRuntimeCommandHealth(command: string, options?: {
98
98
  cwd?: string;
99
99
  timeoutMs?: number;
100
+ env?: Record<string, string>;
100
101
  }): Promise<RuntimeCommandHealth>;
101
- export declare function parseStructuredUsage(stdout: string): {
102
- tokenInput: number | undefined;
103
- tokenOutput: number | undefined;
104
- usdCost: number | undefined;
105
- summary: string | undefined;
106
- } | undefined;
102
+ export declare function parseStructuredUsage(stdout: string): ParsedUsageRecord | undefined;
107
103
  export declare function parseClaudeStreamOutput(stdout: string): {
108
104
  usage: {
109
105
  summary: string | undefined;
@@ -58,12 +58,29 @@ export interface HeartbeatContext {
58
58
  memoryContext?: AgentMemoryContext;
59
59
  runtime?: AgentRuntimeConfig;
60
60
  }
61
+ /**
62
+ * Normalized usage contract produced by adapter execution.
63
+ *
64
+ * Invariants:
65
+ * - `inputTokens` excludes cache reads.
66
+ * - `cachedInputTokens` tracks cache-hit prompt tokens only.
67
+ * - persisted `tokenInput` = `inputTokens + cachedInputTokens` for backwards compatibility.
68
+ * - `outputTokens` reflects generated/completion tokens.
69
+ */
70
+ export interface AdapterNormalizedUsage {
71
+ inputTokens: number;
72
+ cachedInputTokens: number;
73
+ outputTokens: number;
74
+ costUsd?: number;
75
+ summary?: string;
76
+ }
61
77
  export interface AdapterExecutionResult {
62
78
  status: "ok" | "skipped" | "failed";
63
79
  summary: string;
64
80
  tokenInput: number;
65
81
  tokenOutput: number;
66
82
  usdCost: number;
83
+ usage?: AdapterNormalizedUsage;
67
84
  pricingProviderType?: string | null;
68
85
  pricingModelId?: string | null;
69
86
  outcome?: ExecutionOutcome;