@kosuke-ai/cli 0.0.56 → 1.0.0
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.md +31 -448
- package/dist/commands/auth.js +117 -0
- package/dist/generated/commands/deploy/cancel.js +17 -0
- package/dist/generated/commands/deploy/messages.js +17 -0
- package/dist/generated/commands/deploy/run.js +60 -0
- package/dist/generated/commands/index.js +132 -0
- package/dist/generated/commands/preview/get.js +25 -0
- package/dist/generated/commands/preview/health.js +25 -0
- package/dist/generated/commands/preview/reset.js +27 -0
- package/dist/generated/commands/preview/share-create.js +36 -0
- package/dist/generated/commands/preview/share-delete.js +26 -0
- package/dist/generated/commands/preview/share-get.js +26 -0
- package/dist/generated/commands/preview/shared.js +17 -0
- package/dist/generated/commands/projects/create.js +37 -0
- package/dist/generated/commands/projects/delete.js +17 -0
- package/dist/generated/commands/projects/env-vars-add.js +21 -0
- package/dist/generated/commands/projects/env-vars-remove.js +21 -0
- package/dist/generated/commands/projects/get.js +17 -0
- package/dist/generated/commands/projects/list.js +15 -0
- package/dist/generated/commands/projects/services-add.js +87 -0
- package/dist/generated/commands/projects/services-list.js +18 -0
- package/dist/generated/commands/projects/services-remove.js +19 -0
- package/dist/generated/commands/projects/services-update.js +81 -0
- package/dist/generated/commands/projects/settings-get.js +18 -0
- package/dist/generated/commands/projects/settings-import.js +91 -0
- package/dist/generated/commands/projects/settings-update.js +77 -0
- package/dist/generated/commands/projects/skills.js +35 -0
- package/dist/generated/commands/projects/update.js +27 -0
- package/dist/generated/commands/sessions/activate.js +18 -0
- package/dist/generated/commands/sessions/checklist-generate.js +19 -0
- package/dist/generated/commands/sessions/checklist-get.js +19 -0
- package/dist/generated/commands/sessions/comments-add.js +63 -0
- package/dist/generated/commands/sessions/comments-delete.js +20 -0
- package/dist/generated/commands/sessions/comments-list.js +19 -0
- package/dist/generated/commands/sessions/comments-update.js +23 -0
- package/dist/generated/commands/sessions/create.js +126 -0
- package/dist/generated/commands/sessions/delete.js +18 -0
- package/dist/generated/commands/sessions/diff-files.js +19 -0
- package/dist/generated/commands/sessions/diff-patch.js +86 -0
- package/dist/generated/commands/sessions/edit-prompt.js +59 -0
- package/dist/generated/commands/sessions/files-get.js +27 -0
- package/dist/generated/commands/sessions/files-list.js +19 -0
- package/dist/generated/commands/sessions/files-write.js +41 -0
- package/dist/generated/commands/sessions/get.js +18 -0
- package/dist/generated/commands/sessions/git-commit-message.js +19 -0
- package/dist/generated/commands/sessions/git-commit.js +29 -0
- package/dist/generated/commands/sessions/git-push.js +19 -0
- package/dist/generated/commands/sessions/git-state.js +19 -0
- package/dist/generated/commands/sessions/jobs-cancel.js +20 -0
- package/dist/generated/commands/sessions/jobs-get.js +20 -0
- package/dist/generated/commands/sessions/list.js +81 -0
- package/dist/generated/commands/sessions/messages.js +18 -0
- package/dist/generated/commands/sessions/search.js +23 -0
- package/dist/generated/commands/sessions/send.js +98 -0
- package/dist/generated/commands/sessions/update.js +72 -0
- package/dist/generated/commands/workspaces/access-status.js +29 -0
- package/dist/generated/commands/workspaces/ai-provider-get.js +18 -0
- package/dist/generated/commands/workspaces/ai-provider-remove.js +42 -0
- package/dist/generated/commands/workspaces/ai-provider-set.js +21 -0
- package/dist/generated/commands/workspaces/credits.js +17 -0
- package/dist/generated/commands/workspaces/get.js +17 -0
- package/dist/generated/commands/workspaces/getting-started-get.js +18 -0
- package/dist/generated/commands/workspaces/getting-started-update.js +32 -0
- package/dist/generated/commands/workspaces/list.js +15 -0
- package/dist/generated/commands/workspaces/members.js +25 -0
- package/dist/generated/commands/workspaces/sandbox-limit.js +17 -0
- package/dist/generated/commands/workspaces/stop-sandboxes.js +27 -0
- package/dist/generated/commands/workspaces/usage.js +32 -0
- package/dist/index.js +5 -516
- package/dist/program.js +46 -0
- package/dist/runtime/attach.js +139 -0
- package/dist/runtime/attachments.js +58 -0
- package/dist/runtime/client.js +12 -0
- package/dist/runtime/config.js +49 -0
- package/dist/runtime/credentials.js +24 -0
- package/dist/runtime/descriptor.js +7 -0
- package/dist/runtime/invoke.js +152 -0
- package/dist/runtime/runtime.js +41 -0
- package/dist/runtime/version.js +5 -0
- package/openapi.json +5222 -0
- package/package.json +21 -79
- package/LICENSE +0 -21
- package/claude.costs.json +0 -34
- package/dist/__tests__/utils/file-discovery.test.d.ts +0 -5
- package/dist/__tests__/utils/file-discovery.test.d.ts.map +0 -1
- package/dist/__tests__/utils/file-discovery.test.js +0 -51
- package/dist/__tests__/utils/file-discovery.test.js.map +0 -1
- package/dist/__tests__/utils/logger-nologs.test.d.ts +0 -5
- package/dist/__tests__/utils/logger-nologs.test.d.ts.map +0 -1
- package/dist/__tests__/utils/logger-nologs.test.js +0 -34
- package/dist/__tests__/utils/logger-nologs.test.js.map +0 -1
- package/dist/__tests__/utils/logger.test.d.ts +0 -5
- package/dist/__tests__/utils/logger.test.d.ts.map +0 -1
- package/dist/__tests__/utils/logger.test.js +0 -243
- package/dist/__tests__/utils/logger.test.js.map +0 -1
- package/dist/__tests__/utils/validator.test.d.ts +0 -5
- package/dist/__tests__/utils/validator.test.d.ts.map +0 -1
- package/dist/__tests__/utils/validator.test.js +0 -206
- package/dist/__tests__/utils/validator.test.js.map +0 -1
- package/dist/index.d.ts +0 -35
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/kosuke/commands/analyse.d.ts +0 -15
- package/dist/kosuke/commands/analyse.d.ts.map +0 -1
- package/dist/kosuke/commands/analyse.js +0 -273
- package/dist/kosuke/commands/analyse.js.map +0 -1
- package/dist/kosuke/commands/build.d.ts +0 -35
- package/dist/kosuke/commands/build.d.ts.map +0 -1
- package/dist/kosuke/commands/build.js +0 -659
- package/dist/kosuke/commands/build.js.map +0 -1
- package/dist/kosuke/commands/getcode.d.ts +0 -29
- package/dist/kosuke/commands/getcode.d.ts.map +0 -1
- package/dist/kosuke/commands/getcode.js +0 -221
- package/dist/kosuke/commands/getcode.js.map +0 -1
- package/dist/kosuke/commands/lint.d.ts +0 -21
- package/dist/kosuke/commands/lint.d.ts.map +0 -1
- package/dist/kosuke/commands/lint.js +0 -321
- package/dist/kosuke/commands/lint.js.map +0 -1
- package/dist/kosuke/commands/migrate.d.ts +0 -38
- package/dist/kosuke/commands/migrate.d.ts.map +0 -1
- package/dist/kosuke/commands/migrate.js +0 -284
- package/dist/kosuke/commands/migrate.js.map +0 -1
- package/dist/kosuke/commands/plan.d.ts +0 -28
- package/dist/kosuke/commands/plan.d.ts.map +0 -1
- package/dist/kosuke/commands/plan.js +0 -630
- package/dist/kosuke/commands/plan.js.map +0 -1
- package/dist/kosuke/commands/requirements.d.ts +0 -52
- package/dist/kosuke/commands/requirements.d.ts.map +0 -1
- package/dist/kosuke/commands/requirements.js +0 -615
- package/dist/kosuke/commands/requirements.js.map +0 -1
- package/dist/kosuke/commands/review.d.ts +0 -26
- package/dist/kosuke/commands/review.d.ts.map +0 -1
- package/dist/kosuke/commands/review.js +0 -303
- package/dist/kosuke/commands/review.js.map +0 -1
- package/dist/kosuke/commands/serve.d.ts +0 -9
- package/dist/kosuke/commands/serve.d.ts.map +0 -1
- package/dist/kosuke/commands/serve.js +0 -17
- package/dist/kosuke/commands/serve.js.map +0 -1
- package/dist/kosuke/commands/ship.d.ts +0 -37
- package/dist/kosuke/commands/ship.d.ts.map +0 -1
- package/dist/kosuke/commands/ship.js +0 -375
- package/dist/kosuke/commands/ship.js.map +0 -1
- package/dist/kosuke/commands/sync-rules.d.ts +0 -9
- package/dist/kosuke/commands/sync-rules.d.ts.map +0 -1
- package/dist/kosuke/commands/sync-rules.js +0 -379
- package/dist/kosuke/commands/sync-rules.js.map +0 -1
- package/dist/kosuke/commands/test.d.ts +0 -42
- package/dist/kosuke/commands/test.d.ts.map +0 -1
- package/dist/kosuke/commands/test.js +0 -540
- package/dist/kosuke/commands/test.js.map +0 -1
- package/dist/kosuke/commands/tickets.d.ts +0 -43
- package/dist/kosuke/commands/tickets.d.ts.map +0 -1
- package/dist/kosuke/commands/tickets.js +0 -499
- package/dist/kosuke/commands/tickets.js.map +0 -1
- package/dist/kosuke/serve/middleware/error-handler.d.ts +0 -14
- package/dist/kosuke/serve/middleware/error-handler.d.ts.map +0 -1
- package/dist/kosuke/serve/middleware/error-handler.js +0 -42
- package/dist/kosuke/serve/middleware/error-handler.js.map +0 -1
- package/dist/kosuke/serve/middleware/validation.d.ts +0 -13
- package/dist/kosuke/serve/middleware/validation.d.ts.map +0 -1
- package/dist/kosuke/serve/middleware/validation.js +0 -38
- package/dist/kosuke/serve/middleware/validation.js.map +0 -1
- package/dist/kosuke/serve/routes/build.d.ts +0 -6
- package/dist/kosuke/serve/routes/build.d.ts.map +0 -1
- package/dist/kosuke/serve/routes/build.js +0 -226
- package/dist/kosuke/serve/routes/build.js.map +0 -1
- package/dist/kosuke/serve/routes/health.d.ts +0 -6
- package/dist/kosuke/serve/routes/health.d.ts.map +0 -1
- package/dist/kosuke/serve/routes/health.js +0 -11
- package/dist/kosuke/serve/routes/health.js.map +0 -1
- package/dist/kosuke/serve/routes/plan.d.ts +0 -6
- package/dist/kosuke/serve/routes/plan.d.ts.map +0 -1
- package/dist/kosuke/serve/routes/plan.js +0 -106
- package/dist/kosuke/serve/routes/plan.js.map +0 -1
- package/dist/kosuke/serve/server.d.ts +0 -16
- package/dist/kosuke/serve/server.d.ts.map +0 -1
- package/dist/kosuke/serve/server.js +0 -67
- package/dist/kosuke/serve/server.js.map +0 -1
- package/dist/kosuke/serve/validation/build.d.ts +0 -41
- package/dist/kosuke/serve/validation/build.d.ts.map +0 -1
- package/dist/kosuke/serve/validation/build.js +0 -20
- package/dist/kosuke/serve/validation/build.js.map +0 -1
- package/dist/kosuke/serve/validation/plan.d.ts +0 -26
- package/dist/kosuke/serve/validation/plan.d.ts.map +0 -1
- package/dist/kosuke/serve/validation/plan.js +0 -15
- package/dist/kosuke/serve/validation/plan.js.map +0 -1
- package/dist/kosuke/types.d.ts +0 -469
- package/dist/kosuke/types.d.ts.map +0 -1
- package/dist/kosuke/types.js +0 -5
- package/dist/kosuke/types.js.map +0 -1
- package/dist/kosuke/utils/batch-creator.d.ts +0 -14
- package/dist/kosuke/utils/batch-creator.d.ts.map +0 -1
- package/dist/kosuke/utils/batch-creator.js +0 -76
- package/dist/kosuke/utils/batch-creator.js.map +0 -1
- package/dist/kosuke/utils/claude-agent.d.ts +0 -145
- package/dist/kosuke/utils/claude-agent.d.ts.map +0 -1
- package/dist/kosuke/utils/claude-agent.js +0 -504
- package/dist/kosuke/utils/claude-agent.js.map +0 -1
- package/dist/kosuke/utils/constants.d.ts +0 -40
- package/dist/kosuke/utils/constants.d.ts.map +0 -1
- package/dist/kosuke/utils/constants.js +0 -54
- package/dist/kosuke/utils/constants.js.map +0 -1
- package/dist/kosuke/utils/file-discovery.d.ts +0 -15
- package/dist/kosuke/utils/file-discovery.d.ts.map +0 -1
- package/dist/kosuke/utils/file-discovery.js +0 -80
- package/dist/kosuke/utils/file-discovery.js.map +0 -1
- package/dist/kosuke/utils/git.d.ts +0 -41
- package/dist/kosuke/utils/git.d.ts.map +0 -1
- package/dist/kosuke/utils/git.js +0 -145
- package/dist/kosuke/utils/git.js.map +0 -1
- package/dist/kosuke/utils/github.d.ts +0 -17
- package/dist/kosuke/utils/github.d.ts.map +0 -1
- package/dist/kosuke/utils/github.js +0 -22
- package/dist/kosuke/utils/github.js.map +0 -1
- package/dist/kosuke/utils/interactive-input.d.ts +0 -22
- package/dist/kosuke/utils/interactive-input.d.ts.map +0 -1
- package/dist/kosuke/utils/interactive-input.js +0 -124
- package/dist/kosuke/utils/interactive-input.js.map +0 -1
- package/dist/kosuke/utils/logger.d.ts +0 -161
- package/dist/kosuke/utils/logger.d.ts.map +0 -1
- package/dist/kosuke/utils/logger.js +0 -234
- package/dist/kosuke/utils/logger.js.map +0 -1
- package/dist/kosuke/utils/playwright-mcp-client.d.ts +0 -46
- package/dist/kosuke/utils/playwright-mcp-client.d.ts.map +0 -1
- package/dist/kosuke/utils/playwright-mcp-client.js +0 -135
- package/dist/kosuke/utils/playwright-mcp-client.js.map +0 -1
- package/dist/kosuke/utils/pr-orchestrator.d.ts +0 -49
- package/dist/kosuke/utils/pr-orchestrator.d.ts.map +0 -1
- package/dist/kosuke/utils/pr-orchestrator.js +0 -154
- package/dist/kosuke/utils/pr-orchestrator.js.map +0 -1
- package/dist/kosuke/utils/repository-manager.d.ts +0 -13
- package/dist/kosuke/utils/repository-manager.d.ts.map +0 -1
- package/dist/kosuke/utils/repository-manager.js +0 -94
- package/dist/kosuke/utils/repository-manager.js.map +0 -1
- package/dist/kosuke/utils/repository-resolver.d.ts +0 -12
- package/dist/kosuke/utils/repository-resolver.d.ts.map +0 -1
- package/dist/kosuke/utils/repository-resolver.js +0 -186
- package/dist/kosuke/utils/repository-resolver.js.map +0 -1
- package/dist/kosuke/utils/tickets-manager.d.ts +0 -64
- package/dist/kosuke/utils/tickets-manager.d.ts.map +0 -1
- package/dist/kosuke/utils/tickets-manager.js +0 -331
- package/dist/kosuke/utils/tickets-manager.js.map +0 -1
- package/dist/kosuke/utils/validator.d.ts +0 -45
- package/dist/kosuke/utils/validator.d.ts.map +0 -1
- package/dist/kosuke/utils/validator.js +0 -248
- package/dist/kosuke/utils/validator.js.map +0 -1
- package/dist/lib.d.ts +0 -96
- package/dist/lib.d.ts.map +0 -1
- package/dist/lib.js +0 -95
- package/dist/lib.js.map +0 -1
- package/dist/package.json +0 -99
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude Agent - Centralized Claude SDK integration
|
|
3
|
-
*
|
|
4
|
-
* Provides unified agent initialization, execution, logging, and cost tracking
|
|
5
|
-
* for all commands that use Claude Code Agent SDK.
|
|
6
|
-
*/
|
|
7
|
-
import { type PermissionMode, type SettingSource } from '@anthropic-ai/claude-agent-sdk';
|
|
8
|
-
/**
|
|
9
|
-
* Verbosity levels for agent execution
|
|
10
|
-
* - minimal: Only show tool usage (fixes, file reads)
|
|
11
|
-
* - normal: Show tool usage + key insights
|
|
12
|
-
* - verbose: Show all text output + tool usage
|
|
13
|
-
*/
|
|
14
|
-
export type AgentVerbosity = 'minimal' | 'normal' | 'verbose';
|
|
15
|
-
/**
|
|
16
|
-
* Claude SDK message structure (subset of properties we use)
|
|
17
|
-
*/
|
|
18
|
-
export interface ClaudeMessage {
|
|
19
|
-
session_id?: string;
|
|
20
|
-
type?: string;
|
|
21
|
-
subtype?: string;
|
|
22
|
-
text?: string;
|
|
23
|
-
message?: {
|
|
24
|
-
content?: Array<{
|
|
25
|
-
type: string;
|
|
26
|
-
text?: string;
|
|
27
|
-
name?: string;
|
|
28
|
-
input?: unknown;
|
|
29
|
-
}>;
|
|
30
|
-
};
|
|
31
|
-
usage?: {
|
|
32
|
-
input_tokens?: number;
|
|
33
|
-
output_tokens?: number;
|
|
34
|
-
cache_creation_input_tokens?: number;
|
|
35
|
-
cache_read_input_tokens?: number;
|
|
36
|
-
};
|
|
37
|
-
[key: string]: unknown;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Agent stream event - either a Claude message or final result
|
|
41
|
-
*/
|
|
42
|
-
export type AgentStreamEvent = {
|
|
43
|
-
type: 'message';
|
|
44
|
-
data: ClaudeMessage;
|
|
45
|
-
} | {
|
|
46
|
-
type: 'agent_result';
|
|
47
|
-
data: AgentResult;
|
|
48
|
-
};
|
|
49
|
-
/**
|
|
50
|
-
* Configuration for agent execution
|
|
51
|
-
*/
|
|
52
|
-
export interface AgentConfig {
|
|
53
|
-
systemPrompt: string;
|
|
54
|
-
maxTurns?: number;
|
|
55
|
-
model?: string;
|
|
56
|
-
cwd?: string;
|
|
57
|
-
verbosity?: AgentVerbosity;
|
|
58
|
-
permissionMode?: PermissionMode;
|
|
59
|
-
captureConversation?: boolean;
|
|
60
|
-
settingSources?: SettingSource[];
|
|
61
|
-
resume?: string;
|
|
62
|
-
allowedTools?: string[];
|
|
63
|
-
disallowedTools?: string[];
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Result from agent execution
|
|
67
|
-
*/
|
|
68
|
-
export interface AgentResult {
|
|
69
|
-
response: string;
|
|
70
|
-
tokensUsed: {
|
|
71
|
-
input: number;
|
|
72
|
-
output: number;
|
|
73
|
-
cacheCreation: number;
|
|
74
|
-
cacheRead: number;
|
|
75
|
-
};
|
|
76
|
-
cost: number;
|
|
77
|
-
fixCount: number;
|
|
78
|
-
filesReferenced: Set<string>;
|
|
79
|
-
sessionId?: string;
|
|
80
|
-
conversationMessages?: Array<{
|
|
81
|
-
role: 'user' | 'assistant';
|
|
82
|
-
content: string;
|
|
83
|
-
timestamp: string;
|
|
84
|
-
toolCalls?: Array<{
|
|
85
|
-
name: string;
|
|
86
|
-
input: unknown;
|
|
87
|
-
output?: unknown;
|
|
88
|
-
}>;
|
|
89
|
-
}>;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Parsed tool action with structured parameters
|
|
93
|
-
*/
|
|
94
|
-
export interface ParsedToolAction {
|
|
95
|
-
action: string;
|
|
96
|
-
params: Record<string, unknown>;
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Parse tool usage into structured action and params for streaming/display
|
|
100
|
-
*
|
|
101
|
-
* @param toolName - Name of the tool being used
|
|
102
|
-
* @param toolInput - Input parameters for the tool
|
|
103
|
-
* @returns Structured action and params object
|
|
104
|
-
*
|
|
105
|
-
* @example
|
|
106
|
-
* parseToolAction('Read', { file_path: '/path/to/file.ts' })
|
|
107
|
-
* // Returns: { action: 'Read', params: { path: '/path/to/file.ts' } }
|
|
108
|
-
*/
|
|
109
|
-
export declare function parseToolAction(toolName: string, toolInput: Record<string, unknown>): ParsedToolAction;
|
|
110
|
-
/**
|
|
111
|
-
* Log tool usage
|
|
112
|
-
*/
|
|
113
|
-
export declare function logToolUsage(toolName: string, toolInput: unknown, filesReferenced: Set<string>): void;
|
|
114
|
-
/**
|
|
115
|
-
* Calculate cost based on Claude pricing from claude.costs.json
|
|
116
|
-
*
|
|
117
|
-
* Costs are loaded from:
|
|
118
|
-
* 1. claude.costs.json model-specific costs (if model provided)
|
|
119
|
-
* 2. claude.costs.json default costs (fallback)
|
|
120
|
-
*/
|
|
121
|
-
export declare function calculateCost(inputTokens: number, outputTokens: number, cacheCreationTokens?: number, cacheReadTokens?: number, model?: string): number;
|
|
122
|
-
/**
|
|
123
|
-
* Format cost breakdown as human-readable string
|
|
124
|
-
*/
|
|
125
|
-
export declare function formatCostBreakdown(result: AgentResult): string;
|
|
126
|
-
/**
|
|
127
|
-
* Log assistant message based on verbosity
|
|
128
|
-
*/
|
|
129
|
-
export declare function logAssistantMessage(text: string, verbosity: AgentVerbosity): void;
|
|
130
|
-
/**
|
|
131
|
-
* Run agent in streaming mode with typed events
|
|
132
|
-
* Yields Claude messages + final AgentResult with metrics
|
|
133
|
-
* For SSE integration and programmatic consumption
|
|
134
|
-
*
|
|
135
|
-
* @param prompt - User prompt/instruction
|
|
136
|
-
* @param config - Agent configuration
|
|
137
|
-
* @returns AsyncGenerator yielding AgentStreamEvent (messages + final result)
|
|
138
|
-
*/
|
|
139
|
-
export declare function runAgentStream(prompt: string, config: AgentConfig): AsyncGenerator<AgentStreamEvent, void, void>;
|
|
140
|
-
/**
|
|
141
|
-
* Run Claude agent with unified configuration and logging
|
|
142
|
-
* Processes stream and returns final result
|
|
143
|
-
*/
|
|
144
|
-
export declare function runAgent(prompt: string, config: AgentConfig): Promise<AgentResult>;
|
|
145
|
-
//# sourceMappingURL=claude-agent.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude-agent.d.ts","sourceRoot":"","sources":["../../../kosuke/utils/claude-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,504 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude Agent - Centralized Claude SDK integration
|
|
3
|
-
*
|
|
4
|
-
* Provides unified agent initialization, execution, logging, and cost tracking
|
|
5
|
-
* for all commands that use Claude Code Agent SDK.
|
|
6
|
-
*/
|
|
7
|
-
import { query, } from '@anthropic-ai/claude-agent-sdk';
|
|
8
|
-
import { existsSync, readFileSync } from 'fs';
|
|
9
|
-
import { dirname, join } from 'path';
|
|
10
|
-
import { fileURLToPath } from 'url';
|
|
11
|
-
import { DEFAULT_ANTHROPIC_MODEL } from './constants.js';
|
|
12
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
13
|
-
const __dirname = dirname(__filename);
|
|
14
|
-
/**
|
|
15
|
-
* Load costs configuration from claude.costs.json
|
|
16
|
-
*/
|
|
17
|
-
let costsCache = null;
|
|
18
|
-
function loadCosts() {
|
|
19
|
-
if (costsCache)
|
|
20
|
-
return costsCache;
|
|
21
|
-
try {
|
|
22
|
-
// Look for claude.costs.json in the package root (three levels up from dist/kosuke/utils)
|
|
23
|
-
const costsPath = join(__dirname, '..', '..', '..', 'claude.costs.json');
|
|
24
|
-
const costsContent = readFileSync(costsPath, 'utf-8');
|
|
25
|
-
costsCache = JSON.parse(costsContent);
|
|
26
|
-
return costsCache;
|
|
27
|
-
}
|
|
28
|
-
catch {
|
|
29
|
-
// Fallback to default Haiku costs if file not found
|
|
30
|
-
return {
|
|
31
|
-
models: {},
|
|
32
|
-
default: {
|
|
33
|
-
name: 'Claude Haiku 4.5',
|
|
34
|
-
input: 1.0,
|
|
35
|
-
output: 5.0,
|
|
36
|
-
cacheCreation: 1.25,
|
|
37
|
-
cacheRead: 0.1,
|
|
38
|
-
},
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Get cost configuration for a specific model
|
|
44
|
-
*/
|
|
45
|
-
function getModelCosts(model) {
|
|
46
|
-
const costs = loadCosts();
|
|
47
|
-
return costs.models[model] || costs.default;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Parse tool usage into structured action and params for streaming/display
|
|
51
|
-
*
|
|
52
|
-
* @param toolName - Name of the tool being used
|
|
53
|
-
* @param toolInput - Input parameters for the tool
|
|
54
|
-
* @returns Structured action and params object
|
|
55
|
-
*
|
|
56
|
-
* @example
|
|
57
|
-
* parseToolAction('Read', { file_path: '/path/to/file.ts' })
|
|
58
|
-
* // Returns: { action: 'Read', params: { path: '/path/to/file.ts' } }
|
|
59
|
-
*/
|
|
60
|
-
export function parseToolAction(toolName, toolInput) {
|
|
61
|
-
const params = {};
|
|
62
|
-
switch (toolName) {
|
|
63
|
-
case 'Read':
|
|
64
|
-
params.path = toolInput.file_path || toolInput.target_file;
|
|
65
|
-
break;
|
|
66
|
-
case 'Grep':
|
|
67
|
-
params.pattern = toolInput.pattern;
|
|
68
|
-
if (toolInput.type)
|
|
69
|
-
params.type = toolInput.type;
|
|
70
|
-
if (toolInput.glob)
|
|
71
|
-
params.glob = toolInput.glob;
|
|
72
|
-
if (toolInput.path)
|
|
73
|
-
params.path = toolInput.path;
|
|
74
|
-
break;
|
|
75
|
-
case 'Glob':
|
|
76
|
-
params.pattern = toolInput.glob_pattern || toolInput.pattern;
|
|
77
|
-
if (toolInput.target_directory)
|
|
78
|
-
params.directory = toolInput.target_directory;
|
|
79
|
-
break;
|
|
80
|
-
case 'LS':
|
|
81
|
-
params.path = toolInput.target_directory;
|
|
82
|
-
break;
|
|
83
|
-
case 'Task':
|
|
84
|
-
{
|
|
85
|
-
const description = toolInput.description;
|
|
86
|
-
params.description = description;
|
|
87
|
-
if (toolInput.subagent_type)
|
|
88
|
-
params.type = toolInput.subagent_type;
|
|
89
|
-
}
|
|
90
|
-
break;
|
|
91
|
-
case 'WebSearch':
|
|
92
|
-
params.query = toolInput.search_term;
|
|
93
|
-
break;
|
|
94
|
-
case 'WebFetch':
|
|
95
|
-
{
|
|
96
|
-
const url = toolInput.url;
|
|
97
|
-
params.url = url;
|
|
98
|
-
if (url) {
|
|
99
|
-
try {
|
|
100
|
-
params.domain = new URL(url).hostname;
|
|
101
|
-
}
|
|
102
|
-
catch {
|
|
103
|
-
params.domain = undefined;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
break;
|
|
108
|
-
case 'Edit':
|
|
109
|
-
case 'StrReplace':
|
|
110
|
-
case 'Write':
|
|
111
|
-
case 'Delete':
|
|
112
|
-
params.path = toolInput.file_path || toolInput.path;
|
|
113
|
-
break;
|
|
114
|
-
case 'Bash':
|
|
115
|
-
case 'Shell':
|
|
116
|
-
{
|
|
117
|
-
const command = toolInput.command;
|
|
118
|
-
params.command = command;
|
|
119
|
-
}
|
|
120
|
-
break;
|
|
121
|
-
case 'CodebaseSearch':
|
|
122
|
-
params.query = toolInput.query;
|
|
123
|
-
if (toolInput.target_directories) {
|
|
124
|
-
params.directories = toolInput.target_directories;
|
|
125
|
-
}
|
|
126
|
-
break;
|
|
127
|
-
default:
|
|
128
|
-
// For unknown tools, include all input params as fallback
|
|
129
|
-
Object.assign(params, toolInput);
|
|
130
|
-
break;
|
|
131
|
-
}
|
|
132
|
-
return { action: toolName, params };
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Check if a tool is a file modification tool
|
|
136
|
-
* Based on actual tool names used in the codebase
|
|
137
|
-
*/
|
|
138
|
-
function isFileModificationTool(toolName) {
|
|
139
|
-
return (toolName === 'Write' ||
|
|
140
|
-
toolName === 'StrReplace' ||
|
|
141
|
-
toolName === 'Edit' ||
|
|
142
|
-
toolName === 'Delete');
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Log tool usage
|
|
146
|
-
*/
|
|
147
|
-
export function logToolUsage(toolName, toolInput, filesReferenced) {
|
|
148
|
-
// Parse tool action using shared utility (handles normalization and params)
|
|
149
|
-
const input = toolInput && typeof toolInput === 'object' ? toolInput : {};
|
|
150
|
-
const parsed = parseToolAction(toolName, input);
|
|
151
|
-
// Track file references for Read operations
|
|
152
|
-
if (parsed.action === 'Read' && parsed.params.path) {
|
|
153
|
-
filesReferenced.add(parsed.params.path);
|
|
154
|
-
}
|
|
155
|
-
// Format log output based on tool type
|
|
156
|
-
let logMsg = '';
|
|
157
|
-
switch (parsed.action) {
|
|
158
|
-
case 'Write':
|
|
159
|
-
logMsg = ` ✍️ Writing ${parsed.params.path || 'file'}`;
|
|
160
|
-
break;
|
|
161
|
-
case 'StrReplace':
|
|
162
|
-
case 'Edit':
|
|
163
|
-
logMsg = ` ✏️ Editing ${parsed.params.path || 'file'}`;
|
|
164
|
-
break;
|
|
165
|
-
case 'Delete':
|
|
166
|
-
logMsg = ` 🗑️ Deleting ${parsed.params.path || 'file'}`;
|
|
167
|
-
break;
|
|
168
|
-
case 'Read':
|
|
169
|
-
logMsg = ` 📄 Reading ${parsed.params.path || 'file'}`;
|
|
170
|
-
break;
|
|
171
|
-
case 'Grep':
|
|
172
|
-
{
|
|
173
|
-
const pathInfo = parsed.params.path ? ` in ${parsed.params.path}` : '';
|
|
174
|
-
logMsg = ` 🔍 Searching: ${parsed.params.pattern}${pathInfo}`;
|
|
175
|
-
}
|
|
176
|
-
break;
|
|
177
|
-
case 'Glob':
|
|
178
|
-
{
|
|
179
|
-
const dirInfo = parsed.params.directory ? ` in ${parsed.params.directory}` : '';
|
|
180
|
-
logMsg = ` 📁 Finding: ${parsed.params.pattern}${dirInfo}`;
|
|
181
|
-
}
|
|
182
|
-
break;
|
|
183
|
-
case 'LS':
|
|
184
|
-
logMsg = ` 📂 Listing: ${parsed.params.path || 'directory'}`;
|
|
185
|
-
break;
|
|
186
|
-
case 'Task':
|
|
187
|
-
{
|
|
188
|
-
const taskType = parsed.params.type || 'Task';
|
|
189
|
-
logMsg = ` 🤖 ${taskType}: ${parsed.params.description || ''}`;
|
|
190
|
-
}
|
|
191
|
-
break;
|
|
192
|
-
case 'WebSearch':
|
|
193
|
-
logMsg = ` 🌐 Search: ${parsed.params.query}`;
|
|
194
|
-
break;
|
|
195
|
-
case 'WebFetch':
|
|
196
|
-
logMsg = ` 🌐 Fetching: ${parsed.params.domain || parsed.params.url}`;
|
|
197
|
-
break;
|
|
198
|
-
case 'Bash':
|
|
199
|
-
case 'Shell':
|
|
200
|
-
{
|
|
201
|
-
const cmd = parsed.params.command;
|
|
202
|
-
logMsg = ` 💻 Running: ${cmd}`;
|
|
203
|
-
}
|
|
204
|
-
break;
|
|
205
|
-
case 'CodebaseSearch':
|
|
206
|
-
{
|
|
207
|
-
const dirInfo = parsed.params.directories && Array.isArray(parsed.params.directories)
|
|
208
|
-
? ` in ${parsed.params.directories.join(', ')}`
|
|
209
|
-
: '';
|
|
210
|
-
logMsg = ` 🔎 Codebase search: ${parsed.params.query || 'query'}${dirInfo}`;
|
|
211
|
-
}
|
|
212
|
-
break;
|
|
213
|
-
default:
|
|
214
|
-
// Fallback: show full tool info for unknown tools
|
|
215
|
-
const args = formatToolArgs(toolInput);
|
|
216
|
-
logMsg = ` 🔧 ${parsed.action}(${args})`;
|
|
217
|
-
break;
|
|
218
|
-
}
|
|
219
|
-
console.log(logMsg);
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* Calculate cost based on Claude pricing from claude.costs.json
|
|
223
|
-
*
|
|
224
|
-
* Costs are loaded from:
|
|
225
|
-
* 1. claude.costs.json model-specific costs (if model provided)
|
|
226
|
-
* 2. claude.costs.json default costs (fallback)
|
|
227
|
-
*/
|
|
228
|
-
export function calculateCost(inputTokens, outputTokens, cacheCreationTokens = 0, cacheReadTokens = 0, model) {
|
|
229
|
-
// Get costs from JSON (uses model if provided, otherwise default)
|
|
230
|
-
const costs = model ? getModelCosts(model) : loadCosts().default;
|
|
231
|
-
const inputCost = (inputTokens / 1000000) * costs.input;
|
|
232
|
-
const outputCost = (outputTokens / 1000000) * costs.output;
|
|
233
|
-
const cacheCreationCost = (cacheCreationTokens / 1000000) * costs.cacheCreation;
|
|
234
|
-
const cacheReadCost = (cacheReadTokens / 1000000) * costs.cacheRead;
|
|
235
|
-
return inputCost + outputCost + cacheCreationCost + cacheReadCost;
|
|
236
|
-
}
|
|
237
|
-
/**
|
|
238
|
-
* Format cost breakdown as human-readable string
|
|
239
|
-
*/
|
|
240
|
-
export function formatCostBreakdown(result) {
|
|
241
|
-
const tokenBreakdown = [];
|
|
242
|
-
if (result.tokensUsed.input > 0) {
|
|
243
|
-
tokenBreakdown.push(`${result.tokensUsed.input.toLocaleString()} input`);
|
|
244
|
-
}
|
|
245
|
-
if (result.tokensUsed.output > 0) {
|
|
246
|
-
tokenBreakdown.push(`${result.tokensUsed.output.toLocaleString()} output`);
|
|
247
|
-
}
|
|
248
|
-
if (result.tokensUsed.cacheCreation > 0) {
|
|
249
|
-
tokenBreakdown.push(`${result.tokensUsed.cacheCreation.toLocaleString()} cache write`);
|
|
250
|
-
}
|
|
251
|
-
if (result.tokensUsed.cacheRead > 0) {
|
|
252
|
-
tokenBreakdown.push(`${result.tokensUsed.cacheRead.toLocaleString()} cache read`);
|
|
253
|
-
}
|
|
254
|
-
return `$${result.cost.toFixed(4)} (${tokenBreakdown.join(' + ')} tokens)`;
|
|
255
|
-
}
|
|
256
|
-
/**
|
|
257
|
-
* Determine if text should be logged based on verbosity level
|
|
258
|
-
*/
|
|
259
|
-
function shouldLogText(text, verbosity) {
|
|
260
|
-
if (verbosity === 'verbose') {
|
|
261
|
-
return true;
|
|
262
|
-
}
|
|
263
|
-
if (verbosity === 'minimal') {
|
|
264
|
-
return false;
|
|
265
|
-
}
|
|
266
|
-
// Normal: Log key insights only
|
|
267
|
-
const keywords = [
|
|
268
|
-
'violation',
|
|
269
|
-
'fix',
|
|
270
|
-
'issue',
|
|
271
|
-
'error',
|
|
272
|
-
'found',
|
|
273
|
-
'located',
|
|
274
|
-
'implementation',
|
|
275
|
-
'✅',
|
|
276
|
-
'❌',
|
|
277
|
-
];
|
|
278
|
-
const lowerText = text.toLowerCase();
|
|
279
|
-
return keywords.some((keyword) => lowerText.includes(keyword)) || text.length < 200;
|
|
280
|
-
}
|
|
281
|
-
/**
|
|
282
|
-
* Log assistant message based on verbosity
|
|
283
|
-
*/
|
|
284
|
-
export function logAssistantMessage(text, verbosity) {
|
|
285
|
-
const trimmed = text.trim();
|
|
286
|
-
if (!trimmed || !shouldLogText(trimmed, verbosity)) {
|
|
287
|
-
return;
|
|
288
|
-
}
|
|
289
|
-
// Show full message without truncation
|
|
290
|
-
console.log(` 💭 ${trimmed}`);
|
|
291
|
-
}
|
|
292
|
-
/**
|
|
293
|
-
* Format tool arguments for display (no truncation)
|
|
294
|
-
*/
|
|
295
|
-
function formatToolArgs(input) {
|
|
296
|
-
if (!input || typeof input !== 'object') {
|
|
297
|
-
return JSON.stringify(input);
|
|
298
|
-
}
|
|
299
|
-
return JSON.stringify(input);
|
|
300
|
-
}
|
|
301
|
-
/**
|
|
302
|
-
* Run agent in streaming mode with typed events
|
|
303
|
-
* Yields Claude messages + final AgentResult with metrics
|
|
304
|
-
* For SSE integration and programmatic consumption
|
|
305
|
-
*
|
|
306
|
-
* @param prompt - User prompt/instruction
|
|
307
|
-
* @param config - Agent configuration
|
|
308
|
-
* @returns AsyncGenerator yielding AgentStreamEvent (messages + final result)
|
|
309
|
-
*/
|
|
310
|
-
export async function* runAgentStream(prompt, config) {
|
|
311
|
-
const { systemPrompt, maxTurns = 20, model = DEFAULT_ANTHROPIC_MODEL, cwd = process.cwd(), permissionMode = 'bypassPermissions', settingSources = ['project'], resume, allowedTools, disallowedTools, } = config;
|
|
312
|
-
// Create AbortController for SDK cleanup
|
|
313
|
-
const abortController = new AbortController();
|
|
314
|
-
const options = {
|
|
315
|
-
model,
|
|
316
|
-
systemPrompt,
|
|
317
|
-
maxTurns,
|
|
318
|
-
cwd,
|
|
319
|
-
permissionMode,
|
|
320
|
-
settingSources,
|
|
321
|
-
abortController,
|
|
322
|
-
...(resume && { resume }),
|
|
323
|
-
...(allowedTools && { allowedTools }),
|
|
324
|
-
...(disallowedTools && { disallowedTools }),
|
|
325
|
-
};
|
|
326
|
-
const responseStream = query({ prompt, options });
|
|
327
|
-
let response = '';
|
|
328
|
-
let inputTokens = 0;
|
|
329
|
-
let outputTokens = 0;
|
|
330
|
-
let cacheCreationTokens = 0;
|
|
331
|
-
let cacheReadTokens = 0;
|
|
332
|
-
let fixCount = 0;
|
|
333
|
-
const filesReferenced = new Set();
|
|
334
|
-
let sessionId;
|
|
335
|
-
// Process the response stream
|
|
336
|
-
for await (const message of responseStream) {
|
|
337
|
-
const claudeMessage = message;
|
|
338
|
-
// Yield the message
|
|
339
|
-
yield { type: 'message', data: claudeMessage };
|
|
340
|
-
// Capture session ID
|
|
341
|
-
if (!sessionId && claudeMessage.session_id) {
|
|
342
|
-
sessionId = claudeMessage.session_id;
|
|
343
|
-
}
|
|
344
|
-
// Track metrics from assistant messages
|
|
345
|
-
if (claudeMessage.type === 'assistant' && claudeMessage.message?.content) {
|
|
346
|
-
for (const block of claudeMessage.message.content) {
|
|
347
|
-
if (block.type === 'text' && block.text) {
|
|
348
|
-
response += block.text;
|
|
349
|
-
}
|
|
350
|
-
else if (block.type === 'tool_use' && block.name) {
|
|
351
|
-
// Track fixes - count all file modification tools
|
|
352
|
-
if (isFileModificationTool(block.name)) {
|
|
353
|
-
fixCount++;
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
// Track token usage
|
|
359
|
-
if (claudeMessage.type === 'result' &&
|
|
360
|
-
claudeMessage.subtype === 'success' &&
|
|
361
|
-
claudeMessage.usage) {
|
|
362
|
-
inputTokens += claudeMessage.usage.input_tokens || 0;
|
|
363
|
-
outputTokens += claudeMessage.usage.output_tokens || 0;
|
|
364
|
-
cacheCreationTokens += claudeMessage.usage.cache_creation_input_tokens || 0;
|
|
365
|
-
cacheReadTokens += claudeMessage.usage.cache_read_input_tokens || 0;
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
// Calculate cost
|
|
369
|
-
const cost = calculateCost(inputTokens, outputTokens, cacheCreationTokens, cacheReadTokens);
|
|
370
|
-
// Yield final result
|
|
371
|
-
yield {
|
|
372
|
-
type: 'agent_result',
|
|
373
|
-
data: {
|
|
374
|
-
response: response.trim(),
|
|
375
|
-
tokensUsed: {
|
|
376
|
-
input: inputTokens,
|
|
377
|
-
output: outputTokens,
|
|
378
|
-
cacheCreation: cacheCreationTokens,
|
|
379
|
-
cacheRead: cacheReadTokens,
|
|
380
|
-
},
|
|
381
|
-
cost,
|
|
382
|
-
fixCount,
|
|
383
|
-
filesReferenced,
|
|
384
|
-
sessionId,
|
|
385
|
-
},
|
|
386
|
-
};
|
|
387
|
-
}
|
|
388
|
-
/**
|
|
389
|
-
* Run Claude agent with unified configuration and logging
|
|
390
|
-
* Processes stream and returns final result
|
|
391
|
-
*/
|
|
392
|
-
export async function runAgent(prompt, config) {
|
|
393
|
-
const { verbosity = 'normal', captureConversation = false, settingSources = ['project'], cwd = process.cwd(), model = DEFAULT_ANTHROPIC_MODEL, } = config;
|
|
394
|
-
// Log the model being used
|
|
395
|
-
console.log(`🤖 Using model: ${model}\n`);
|
|
396
|
-
// Check if CLAUDE.md exists and warn if not (when loading from project)
|
|
397
|
-
if (settingSources.includes('project')) {
|
|
398
|
-
const claudePath = join(cwd, 'CLAUDE.md');
|
|
399
|
-
if (!existsSync(claudePath)) {
|
|
400
|
-
console.warn('⚠️ CLAUDE.md not found in project directory. Agent will use general coding best practices.\n');
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
// Get the stream
|
|
404
|
-
const stream = runAgentStream(prompt, config);
|
|
405
|
-
const filesReferenced = new Set();
|
|
406
|
-
let fixCount = 0;
|
|
407
|
-
// Conversation capture (if enabled)
|
|
408
|
-
const conversationMessages = [];
|
|
409
|
-
// Track current assistant message and tool calls
|
|
410
|
-
let currentMessage = null;
|
|
411
|
-
// Add user message if capturing
|
|
412
|
-
if (captureConversation) {
|
|
413
|
-
conversationMessages.push({
|
|
414
|
-
role: 'user',
|
|
415
|
-
content: prompt,
|
|
416
|
-
timestamp: new Date().toISOString(),
|
|
417
|
-
});
|
|
418
|
-
}
|
|
419
|
-
let result = null;
|
|
420
|
-
// Process the stream and add logging
|
|
421
|
-
for await (const event of stream) {
|
|
422
|
-
if (event.type === 'message') {
|
|
423
|
-
const message = event.data;
|
|
424
|
-
if (message.type === 'assistant' && message.message?.content) {
|
|
425
|
-
// Start new assistant message if capturing
|
|
426
|
-
if (captureConversation && !currentMessage) {
|
|
427
|
-
currentMessage = {
|
|
428
|
-
role: 'assistant',
|
|
429
|
-
content: '',
|
|
430
|
-
timestamp: new Date().toISOString(),
|
|
431
|
-
toolCalls: [],
|
|
432
|
-
};
|
|
433
|
-
}
|
|
434
|
-
for (const block of message.message.content) {
|
|
435
|
-
if (block.type === 'text' && block.text) {
|
|
436
|
-
logAssistantMessage(block.text, verbosity);
|
|
437
|
-
// Add to current message content
|
|
438
|
-
if (captureConversation && currentMessage) {
|
|
439
|
-
currentMessage.content += block.text;
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
else if (block.type === 'tool_use' && block.name) {
|
|
443
|
-
// Track fixes - count all file modification tools
|
|
444
|
-
if (isFileModificationTool(block.name)) {
|
|
445
|
-
fixCount++;
|
|
446
|
-
console.log(` 🔧 Applying fix ${fixCount}... (${block.name})`);
|
|
447
|
-
}
|
|
448
|
-
else {
|
|
449
|
-
logToolUsage(block.name, block.input, filesReferenced);
|
|
450
|
-
}
|
|
451
|
-
// Capture tool call
|
|
452
|
-
if (captureConversation && currentMessage) {
|
|
453
|
-
currentMessage.toolCalls.push({
|
|
454
|
-
name: block.name,
|
|
455
|
-
input: block.input,
|
|
456
|
-
});
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
// Track token usage for verbose logging
|
|
462
|
-
if (message.type === 'result' && message.subtype === 'success' && message.usage) {
|
|
463
|
-
const input = message.usage.input_tokens || 0;
|
|
464
|
-
const output = message.usage.output_tokens || 0;
|
|
465
|
-
const cacheCreation = message.usage.cache_creation_input_tokens || 0;
|
|
466
|
-
const cacheRead = message.usage.cache_read_input_tokens || 0;
|
|
467
|
-
// Debug logging for token tracking (only if verbose)
|
|
468
|
-
if (verbosity === 'verbose' && (input > 0 || output > 0)) {
|
|
469
|
-
console.log(` 📊 Turn tokens: ${input} in, ${output} out, ${cacheCreation} cache write, ${cacheRead} cache read`);
|
|
470
|
-
}
|
|
471
|
-
// Save current message when turn completes
|
|
472
|
-
if (captureConversation && currentMessage) {
|
|
473
|
-
conversationMessages.push({
|
|
474
|
-
role: currentMessage.role,
|
|
475
|
-
content: currentMessage.content,
|
|
476
|
-
timestamp: currentMessage.timestamp,
|
|
477
|
-
toolCalls: currentMessage.toolCalls.length > 0 ? currentMessage.toolCalls : undefined,
|
|
478
|
-
});
|
|
479
|
-
currentMessage = null; // Reset for next turn
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
else if (event.type === 'agent_result') {
|
|
484
|
-
result = event.data;
|
|
485
|
-
// Debug logging for final totals
|
|
486
|
-
if (verbosity === 'verbose') {
|
|
487
|
-
console.log(`\n 📊 Final totals:`);
|
|
488
|
-
console.log(` • Fixes applied: ${result.fixCount}`);
|
|
489
|
-
console.log(` • Total input tokens: ${result.tokensUsed.input.toLocaleString()}`);
|
|
490
|
-
console.log(` • Total output tokens: ${result.tokensUsed.output.toLocaleString()}`);
|
|
491
|
-
console.log(` • Total cost: $${result.cost.toFixed(4)}`);
|
|
492
|
-
}
|
|
493
|
-
}
|
|
494
|
-
}
|
|
495
|
-
if (!result) {
|
|
496
|
-
throw new Error('Agent stream ended without result');
|
|
497
|
-
}
|
|
498
|
-
// Include conversation if captured
|
|
499
|
-
if (captureConversation && conversationMessages.length > 0) {
|
|
500
|
-
result.conversationMessages = conversationMessages;
|
|
501
|
-
}
|
|
502
|
-
return result;
|
|
503
|
-
}
|
|
504
|
-
//# sourceMappingURL=claude-agent.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude-agent.js","sourceRoot":"","sources":["../../../kosuke/utils/claude-agent.ts"],"names":[],"mappings":"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"}
|