@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.
Files changed (251) hide show
  1. package/README.md +31 -448
  2. package/dist/commands/auth.js +117 -0
  3. package/dist/generated/commands/deploy/cancel.js +17 -0
  4. package/dist/generated/commands/deploy/messages.js +17 -0
  5. package/dist/generated/commands/deploy/run.js +60 -0
  6. package/dist/generated/commands/index.js +132 -0
  7. package/dist/generated/commands/preview/get.js +25 -0
  8. package/dist/generated/commands/preview/health.js +25 -0
  9. package/dist/generated/commands/preview/reset.js +27 -0
  10. package/dist/generated/commands/preview/share-create.js +36 -0
  11. package/dist/generated/commands/preview/share-delete.js +26 -0
  12. package/dist/generated/commands/preview/share-get.js +26 -0
  13. package/dist/generated/commands/preview/shared.js +17 -0
  14. package/dist/generated/commands/projects/create.js +37 -0
  15. package/dist/generated/commands/projects/delete.js +17 -0
  16. package/dist/generated/commands/projects/env-vars-add.js +21 -0
  17. package/dist/generated/commands/projects/env-vars-remove.js +21 -0
  18. package/dist/generated/commands/projects/get.js +17 -0
  19. package/dist/generated/commands/projects/list.js +15 -0
  20. package/dist/generated/commands/projects/services-add.js +87 -0
  21. package/dist/generated/commands/projects/services-list.js +18 -0
  22. package/dist/generated/commands/projects/services-remove.js +19 -0
  23. package/dist/generated/commands/projects/services-update.js +81 -0
  24. package/dist/generated/commands/projects/settings-get.js +18 -0
  25. package/dist/generated/commands/projects/settings-import.js +91 -0
  26. package/dist/generated/commands/projects/settings-update.js +77 -0
  27. package/dist/generated/commands/projects/skills.js +35 -0
  28. package/dist/generated/commands/projects/update.js +27 -0
  29. package/dist/generated/commands/sessions/activate.js +18 -0
  30. package/dist/generated/commands/sessions/checklist-generate.js +19 -0
  31. package/dist/generated/commands/sessions/checklist-get.js +19 -0
  32. package/dist/generated/commands/sessions/comments-add.js +63 -0
  33. package/dist/generated/commands/sessions/comments-delete.js +20 -0
  34. package/dist/generated/commands/sessions/comments-list.js +19 -0
  35. package/dist/generated/commands/sessions/comments-update.js +23 -0
  36. package/dist/generated/commands/sessions/create.js +126 -0
  37. package/dist/generated/commands/sessions/delete.js +18 -0
  38. package/dist/generated/commands/sessions/diff-files.js +19 -0
  39. package/dist/generated/commands/sessions/diff-patch.js +86 -0
  40. package/dist/generated/commands/sessions/edit-prompt.js +59 -0
  41. package/dist/generated/commands/sessions/files-get.js +27 -0
  42. package/dist/generated/commands/sessions/files-list.js +19 -0
  43. package/dist/generated/commands/sessions/files-write.js +41 -0
  44. package/dist/generated/commands/sessions/get.js +18 -0
  45. package/dist/generated/commands/sessions/git-commit-message.js +19 -0
  46. package/dist/generated/commands/sessions/git-commit.js +29 -0
  47. package/dist/generated/commands/sessions/git-push.js +19 -0
  48. package/dist/generated/commands/sessions/git-state.js +19 -0
  49. package/dist/generated/commands/sessions/jobs-cancel.js +20 -0
  50. package/dist/generated/commands/sessions/jobs-get.js +20 -0
  51. package/dist/generated/commands/sessions/list.js +81 -0
  52. package/dist/generated/commands/sessions/messages.js +18 -0
  53. package/dist/generated/commands/sessions/search.js +23 -0
  54. package/dist/generated/commands/sessions/send.js +98 -0
  55. package/dist/generated/commands/sessions/update.js +72 -0
  56. package/dist/generated/commands/workspaces/access-status.js +29 -0
  57. package/dist/generated/commands/workspaces/ai-provider-get.js +18 -0
  58. package/dist/generated/commands/workspaces/ai-provider-remove.js +42 -0
  59. package/dist/generated/commands/workspaces/ai-provider-set.js +21 -0
  60. package/dist/generated/commands/workspaces/credits.js +17 -0
  61. package/dist/generated/commands/workspaces/get.js +17 -0
  62. package/dist/generated/commands/workspaces/getting-started-get.js +18 -0
  63. package/dist/generated/commands/workspaces/getting-started-update.js +32 -0
  64. package/dist/generated/commands/workspaces/list.js +15 -0
  65. package/dist/generated/commands/workspaces/members.js +25 -0
  66. package/dist/generated/commands/workspaces/sandbox-limit.js +17 -0
  67. package/dist/generated/commands/workspaces/stop-sandboxes.js +27 -0
  68. package/dist/generated/commands/workspaces/usage.js +32 -0
  69. package/dist/index.js +5 -516
  70. package/dist/program.js +46 -0
  71. package/dist/runtime/attach.js +139 -0
  72. package/dist/runtime/attachments.js +58 -0
  73. package/dist/runtime/client.js +12 -0
  74. package/dist/runtime/config.js +49 -0
  75. package/dist/runtime/credentials.js +24 -0
  76. package/dist/runtime/descriptor.js +7 -0
  77. package/dist/runtime/invoke.js +152 -0
  78. package/dist/runtime/runtime.js +41 -0
  79. package/dist/runtime/version.js +5 -0
  80. package/openapi.json +5222 -0
  81. package/package.json +21 -79
  82. package/LICENSE +0 -21
  83. package/claude.costs.json +0 -34
  84. package/dist/__tests__/utils/file-discovery.test.d.ts +0 -5
  85. package/dist/__tests__/utils/file-discovery.test.d.ts.map +0 -1
  86. package/dist/__tests__/utils/file-discovery.test.js +0 -51
  87. package/dist/__tests__/utils/file-discovery.test.js.map +0 -1
  88. package/dist/__tests__/utils/logger-nologs.test.d.ts +0 -5
  89. package/dist/__tests__/utils/logger-nologs.test.d.ts.map +0 -1
  90. package/dist/__tests__/utils/logger-nologs.test.js +0 -34
  91. package/dist/__tests__/utils/logger-nologs.test.js.map +0 -1
  92. package/dist/__tests__/utils/logger.test.d.ts +0 -5
  93. package/dist/__tests__/utils/logger.test.d.ts.map +0 -1
  94. package/dist/__tests__/utils/logger.test.js +0 -243
  95. package/dist/__tests__/utils/logger.test.js.map +0 -1
  96. package/dist/__tests__/utils/validator.test.d.ts +0 -5
  97. package/dist/__tests__/utils/validator.test.d.ts.map +0 -1
  98. package/dist/__tests__/utils/validator.test.js +0 -206
  99. package/dist/__tests__/utils/validator.test.js.map +0 -1
  100. package/dist/index.d.ts +0 -35
  101. package/dist/index.d.ts.map +0 -1
  102. package/dist/index.js.map +0 -1
  103. package/dist/kosuke/commands/analyse.d.ts +0 -15
  104. package/dist/kosuke/commands/analyse.d.ts.map +0 -1
  105. package/dist/kosuke/commands/analyse.js +0 -273
  106. package/dist/kosuke/commands/analyse.js.map +0 -1
  107. package/dist/kosuke/commands/build.d.ts +0 -35
  108. package/dist/kosuke/commands/build.d.ts.map +0 -1
  109. package/dist/kosuke/commands/build.js +0 -659
  110. package/dist/kosuke/commands/build.js.map +0 -1
  111. package/dist/kosuke/commands/getcode.d.ts +0 -29
  112. package/dist/kosuke/commands/getcode.d.ts.map +0 -1
  113. package/dist/kosuke/commands/getcode.js +0 -221
  114. package/dist/kosuke/commands/getcode.js.map +0 -1
  115. package/dist/kosuke/commands/lint.d.ts +0 -21
  116. package/dist/kosuke/commands/lint.d.ts.map +0 -1
  117. package/dist/kosuke/commands/lint.js +0 -321
  118. package/dist/kosuke/commands/lint.js.map +0 -1
  119. package/dist/kosuke/commands/migrate.d.ts +0 -38
  120. package/dist/kosuke/commands/migrate.d.ts.map +0 -1
  121. package/dist/kosuke/commands/migrate.js +0 -284
  122. package/dist/kosuke/commands/migrate.js.map +0 -1
  123. package/dist/kosuke/commands/plan.d.ts +0 -28
  124. package/dist/kosuke/commands/plan.d.ts.map +0 -1
  125. package/dist/kosuke/commands/plan.js +0 -630
  126. package/dist/kosuke/commands/plan.js.map +0 -1
  127. package/dist/kosuke/commands/requirements.d.ts +0 -52
  128. package/dist/kosuke/commands/requirements.d.ts.map +0 -1
  129. package/dist/kosuke/commands/requirements.js +0 -615
  130. package/dist/kosuke/commands/requirements.js.map +0 -1
  131. package/dist/kosuke/commands/review.d.ts +0 -26
  132. package/dist/kosuke/commands/review.d.ts.map +0 -1
  133. package/dist/kosuke/commands/review.js +0 -303
  134. package/dist/kosuke/commands/review.js.map +0 -1
  135. package/dist/kosuke/commands/serve.d.ts +0 -9
  136. package/dist/kosuke/commands/serve.d.ts.map +0 -1
  137. package/dist/kosuke/commands/serve.js +0 -17
  138. package/dist/kosuke/commands/serve.js.map +0 -1
  139. package/dist/kosuke/commands/ship.d.ts +0 -37
  140. package/dist/kosuke/commands/ship.d.ts.map +0 -1
  141. package/dist/kosuke/commands/ship.js +0 -375
  142. package/dist/kosuke/commands/ship.js.map +0 -1
  143. package/dist/kosuke/commands/sync-rules.d.ts +0 -9
  144. package/dist/kosuke/commands/sync-rules.d.ts.map +0 -1
  145. package/dist/kosuke/commands/sync-rules.js +0 -379
  146. package/dist/kosuke/commands/sync-rules.js.map +0 -1
  147. package/dist/kosuke/commands/test.d.ts +0 -42
  148. package/dist/kosuke/commands/test.d.ts.map +0 -1
  149. package/dist/kosuke/commands/test.js +0 -540
  150. package/dist/kosuke/commands/test.js.map +0 -1
  151. package/dist/kosuke/commands/tickets.d.ts +0 -43
  152. package/dist/kosuke/commands/tickets.d.ts.map +0 -1
  153. package/dist/kosuke/commands/tickets.js +0 -499
  154. package/dist/kosuke/commands/tickets.js.map +0 -1
  155. package/dist/kosuke/serve/middleware/error-handler.d.ts +0 -14
  156. package/dist/kosuke/serve/middleware/error-handler.d.ts.map +0 -1
  157. package/dist/kosuke/serve/middleware/error-handler.js +0 -42
  158. package/dist/kosuke/serve/middleware/error-handler.js.map +0 -1
  159. package/dist/kosuke/serve/middleware/validation.d.ts +0 -13
  160. package/dist/kosuke/serve/middleware/validation.d.ts.map +0 -1
  161. package/dist/kosuke/serve/middleware/validation.js +0 -38
  162. package/dist/kosuke/serve/middleware/validation.js.map +0 -1
  163. package/dist/kosuke/serve/routes/build.d.ts +0 -6
  164. package/dist/kosuke/serve/routes/build.d.ts.map +0 -1
  165. package/dist/kosuke/serve/routes/build.js +0 -226
  166. package/dist/kosuke/serve/routes/build.js.map +0 -1
  167. package/dist/kosuke/serve/routes/health.d.ts +0 -6
  168. package/dist/kosuke/serve/routes/health.d.ts.map +0 -1
  169. package/dist/kosuke/serve/routes/health.js +0 -11
  170. package/dist/kosuke/serve/routes/health.js.map +0 -1
  171. package/dist/kosuke/serve/routes/plan.d.ts +0 -6
  172. package/dist/kosuke/serve/routes/plan.d.ts.map +0 -1
  173. package/dist/kosuke/serve/routes/plan.js +0 -106
  174. package/dist/kosuke/serve/routes/plan.js.map +0 -1
  175. package/dist/kosuke/serve/server.d.ts +0 -16
  176. package/dist/kosuke/serve/server.d.ts.map +0 -1
  177. package/dist/kosuke/serve/server.js +0 -67
  178. package/dist/kosuke/serve/server.js.map +0 -1
  179. package/dist/kosuke/serve/validation/build.d.ts +0 -41
  180. package/dist/kosuke/serve/validation/build.d.ts.map +0 -1
  181. package/dist/kosuke/serve/validation/build.js +0 -20
  182. package/dist/kosuke/serve/validation/build.js.map +0 -1
  183. package/dist/kosuke/serve/validation/plan.d.ts +0 -26
  184. package/dist/kosuke/serve/validation/plan.d.ts.map +0 -1
  185. package/dist/kosuke/serve/validation/plan.js +0 -15
  186. package/dist/kosuke/serve/validation/plan.js.map +0 -1
  187. package/dist/kosuke/types.d.ts +0 -469
  188. package/dist/kosuke/types.d.ts.map +0 -1
  189. package/dist/kosuke/types.js +0 -5
  190. package/dist/kosuke/types.js.map +0 -1
  191. package/dist/kosuke/utils/batch-creator.d.ts +0 -14
  192. package/dist/kosuke/utils/batch-creator.d.ts.map +0 -1
  193. package/dist/kosuke/utils/batch-creator.js +0 -76
  194. package/dist/kosuke/utils/batch-creator.js.map +0 -1
  195. package/dist/kosuke/utils/claude-agent.d.ts +0 -145
  196. package/dist/kosuke/utils/claude-agent.d.ts.map +0 -1
  197. package/dist/kosuke/utils/claude-agent.js +0 -504
  198. package/dist/kosuke/utils/claude-agent.js.map +0 -1
  199. package/dist/kosuke/utils/constants.d.ts +0 -40
  200. package/dist/kosuke/utils/constants.d.ts.map +0 -1
  201. package/dist/kosuke/utils/constants.js +0 -54
  202. package/dist/kosuke/utils/constants.js.map +0 -1
  203. package/dist/kosuke/utils/file-discovery.d.ts +0 -15
  204. package/dist/kosuke/utils/file-discovery.d.ts.map +0 -1
  205. package/dist/kosuke/utils/file-discovery.js +0 -80
  206. package/dist/kosuke/utils/file-discovery.js.map +0 -1
  207. package/dist/kosuke/utils/git.d.ts +0 -41
  208. package/dist/kosuke/utils/git.d.ts.map +0 -1
  209. package/dist/kosuke/utils/git.js +0 -145
  210. package/dist/kosuke/utils/git.js.map +0 -1
  211. package/dist/kosuke/utils/github.d.ts +0 -17
  212. package/dist/kosuke/utils/github.d.ts.map +0 -1
  213. package/dist/kosuke/utils/github.js +0 -22
  214. package/dist/kosuke/utils/github.js.map +0 -1
  215. package/dist/kosuke/utils/interactive-input.d.ts +0 -22
  216. package/dist/kosuke/utils/interactive-input.d.ts.map +0 -1
  217. package/dist/kosuke/utils/interactive-input.js +0 -124
  218. package/dist/kosuke/utils/interactive-input.js.map +0 -1
  219. package/dist/kosuke/utils/logger.d.ts +0 -161
  220. package/dist/kosuke/utils/logger.d.ts.map +0 -1
  221. package/dist/kosuke/utils/logger.js +0 -234
  222. package/dist/kosuke/utils/logger.js.map +0 -1
  223. package/dist/kosuke/utils/playwright-mcp-client.d.ts +0 -46
  224. package/dist/kosuke/utils/playwright-mcp-client.d.ts.map +0 -1
  225. package/dist/kosuke/utils/playwright-mcp-client.js +0 -135
  226. package/dist/kosuke/utils/playwright-mcp-client.js.map +0 -1
  227. package/dist/kosuke/utils/pr-orchestrator.d.ts +0 -49
  228. package/dist/kosuke/utils/pr-orchestrator.d.ts.map +0 -1
  229. package/dist/kosuke/utils/pr-orchestrator.js +0 -154
  230. package/dist/kosuke/utils/pr-orchestrator.js.map +0 -1
  231. package/dist/kosuke/utils/repository-manager.d.ts +0 -13
  232. package/dist/kosuke/utils/repository-manager.d.ts.map +0 -1
  233. package/dist/kosuke/utils/repository-manager.js +0 -94
  234. package/dist/kosuke/utils/repository-manager.js.map +0 -1
  235. package/dist/kosuke/utils/repository-resolver.d.ts +0 -12
  236. package/dist/kosuke/utils/repository-resolver.d.ts.map +0 -1
  237. package/dist/kosuke/utils/repository-resolver.js +0 -186
  238. package/dist/kosuke/utils/repository-resolver.js.map +0 -1
  239. package/dist/kosuke/utils/tickets-manager.d.ts +0 -64
  240. package/dist/kosuke/utils/tickets-manager.d.ts.map +0 -1
  241. package/dist/kosuke/utils/tickets-manager.js +0 -331
  242. package/dist/kosuke/utils/tickets-manager.js.map +0 -1
  243. package/dist/kosuke/utils/validator.d.ts +0 -45
  244. package/dist/kosuke/utils/validator.d.ts.map +0 -1
  245. package/dist/kosuke/utils/validator.js +0 -248
  246. package/dist/kosuke/utils/validator.js.map +0 -1
  247. package/dist/lib.d.ts +0 -96
  248. package/dist/lib.d.ts.map +0 -1
  249. package/dist/lib.js +0 -95
  250. package/dist/lib.js.map +0 -1
  251. 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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"}