@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,161 +0,0 @@
1
- /**
2
- * CLI Logger - Centralized logging to kosuke-core
3
- *
4
- * Provides automatic command execution tracking, token usage logging,
5
- * and cost monitoring for all CLI commands.
6
- */
7
- /**
8
- * Command names supported by the logger
9
- */
10
- export type CommandName = 'ship' | 'test' | 'review' | 'getcode' | 'tickets' | 'migrate' | 'plan';
11
- /**
12
- * Execution status
13
- */
14
- export type ExecutionStatus = 'success' | 'error' | 'cancelled';
15
- /**
16
- * CLI log data structure matching kosuke-core API schema
17
- */
18
- export interface CliLogData {
19
- projectId: string;
20
- command: CommandName;
21
- status: ExecutionStatus;
22
- errorMessage?: string;
23
- tokensInput: number;
24
- tokensOutput: number;
25
- tokensCacheCreation?: number;
26
- tokensCacheRead?: number;
27
- cost: string;
28
- executionTimeMs: number;
29
- inferenceTimeMs?: number;
30
- fixesApplied?: number;
31
- testsRun?: number;
32
- testsPassed?: number;
33
- testsFailed?: number;
34
- iterations?: number;
35
- filesModified?: string[];
36
- cliVersion?: string;
37
- metadata?: Record<string, unknown>;
38
- conversationMessages?: Array<{
39
- role: 'user' | 'assistant';
40
- content: string;
41
- timestamp: string;
42
- toolCalls?: Array<{
43
- name: string;
44
- input: unknown;
45
- output?: unknown;
46
- }>;
47
- }>;
48
- startedAt: string;
49
- completedAt: string;
50
- }
51
- /**
52
- * Runtime logger options
53
- */
54
- interface LoggerRuntimeOptions {
55
- noLogs?: boolean;
56
- }
57
- /**
58
- * Command execution context for automatic tracking
59
- */
60
- export interface CommandExecutionContext {
61
- command: CommandName;
62
- startTime: number;
63
- startedAt: string;
64
- tokensInput: number;
65
- tokensOutput: number;
66
- tokensCacheCreation: number;
67
- tokensCacheRead: number;
68
- inferenceTimeMs: number;
69
- fixesApplied: number;
70
- testsRun: number;
71
- testsPassed: number;
72
- testsFailed: number;
73
- iterations: number;
74
- filesModified: string[];
75
- noLogs: boolean;
76
- conversationMessages: Array<{
77
- role: 'user' | 'assistant';
78
- content: string;
79
- timestamp: string;
80
- toolCalls?: Array<{
81
- name: string;
82
- input: unknown;
83
- output?: unknown;
84
- }>;
85
- }>;
86
- }
87
- /**
88
- * CLI Logger class
89
- */
90
- declare class CliLogger {
91
- private config;
92
- private cliVersion;
93
- constructor();
94
- /**
95
- * Load configuration from environment variables
96
- */
97
- private loadConfig;
98
- /**
99
- * Load CLI version from package.json
100
- */
101
- private loadVersion;
102
- /**
103
- * Calculate cost from token usage
104
- * Uses Claude Sonnet 4.5 pricing
105
- */
106
- calculateCost(tokensInput: number, tokensOutput: number, tokensCacheCreation?: number, tokensCacheRead?: number): string;
107
- /**
108
- * Log command execution to kosuke-core
109
- */
110
- logCommand(data: CliLogData): Promise<void>;
111
- /**
112
- * Create a new command execution context
113
- */
114
- createContext(command: CommandName, options?: LoggerRuntimeOptions): CommandExecutionContext;
115
- /**
116
- * Track tokens from an agent result
117
- */
118
- trackTokens(context: CommandExecutionContext, tokensUsed: {
119
- input: number;
120
- output: number;
121
- cacheCreation: number;
122
- cacheRead: number;
123
- }): void;
124
- /**
125
- * Complete command execution and log it
126
- */
127
- complete(context: CommandExecutionContext, status: ExecutionStatus, error?: Error): Promise<void>;
128
- /**
129
- * Get project context (returns null if not configured)
130
- */
131
- getProjectContext(): {
132
- projectId: string;
133
- } | null;
134
- /**
135
- * Check if logging is enabled
136
- */
137
- isEnabled(): boolean;
138
- }
139
- export declare const logger: CliLogger;
140
- /**
141
- * Wrapper function to automatically track command execution
142
- *
143
- * Example usage:
144
- * ```typescript
145
- * export async function shipCommand(options: ShipOptions): Promise<void> {
146
- * await withCommandTracking('ship', async (ctx) => {
147
- * // ... command logic ...
148
- * // Track tokens from agent results
149
- * logger.trackTokens(ctx, result.tokensUsed);
150
- * ctx.fixesApplied += result.fixCount;
151
- * }, { noLogs: options.noLogs });
152
- * }
153
- * ```
154
- */
155
- export declare function withCommandTracking<T>(command: CommandName, fn: (context: CommandExecutionContext) => Promise<T>, options?: LoggerRuntimeOptions): Promise<T>;
156
- /**
157
- * Handle command cancellation (SIGINT)
158
- */
159
- export declare function setupCancellationHandler(context: CommandExecutionContext): () => void;
160
- export {};
161
- //# sourceMappingURL=logger.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../kosuke/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -1,234 +0,0 @@
1
- /**
2
- * CLI Logger - Centralized logging to kosuke-core
3
- *
4
- * Provides automatic command execution tracking, token usage logging,
5
- * and cost monitoring for all CLI commands.
6
- */
7
- import { readFileSync } from 'fs';
8
- import { join, dirname } from 'path';
9
- import { fileURLToPath } from 'url';
10
- import { KOSUKE_BASE_URL, KOSUKE_API_KEY, KOSUKE_PROJECT_ID } from './constants.js';
11
- const __filename = fileURLToPath(import.meta.url);
12
- const __dirname = dirname(__filename);
13
- /**
14
- * CLI Logger class
15
- */
16
- class CliLogger {
17
- constructor() {
18
- this.config = this.loadConfig();
19
- this.cliVersion = this.loadVersion();
20
- }
21
- /**
22
- * Load configuration from environment variables
23
- */
24
- loadConfig(suppressWarning = false) {
25
- const baseUrl = KOSUKE_BASE_URL;
26
- const apiKey = KOSUKE_API_KEY;
27
- const projectId = KOSUKE_PROJECT_ID;
28
- const enabled = !!(baseUrl && apiKey && projectId);
29
- if (!enabled && !suppressWarning) {
30
- console.warn('⚠️ CLI logging disabled - missing KOSUKE_BASE_URL, KOSUKE_API_KEY, or KOSUKE_PROJECT_ID');
31
- }
32
- return {
33
- baseUrl,
34
- apiKey,
35
- projectId,
36
- enabled,
37
- };
38
- }
39
- /**
40
- * Load CLI version from package.json
41
- */
42
- loadVersion() {
43
- try {
44
- const packagePath = join(__dirname, '..', '..', 'package.json');
45
- const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8'));
46
- return packageJson.version || 'unknown';
47
- }
48
- catch {
49
- return 'unknown';
50
- }
51
- }
52
- /**
53
- * Calculate cost from token usage
54
- * Uses Claude Sonnet 4.5 pricing
55
- */
56
- calculateCost(tokensInput, tokensOutput, tokensCacheCreation = 0, tokensCacheRead = 0) {
57
- const INPUT_COST_PER_MILLION = 3.0;
58
- const OUTPUT_COST_PER_MILLION = 15.0;
59
- const CACHE_CREATION_COST_PER_MILLION = 3.75;
60
- const CACHE_READ_COST_PER_MILLION = 0.3;
61
- const inputCost = (tokensInput / 1000000) * INPUT_COST_PER_MILLION;
62
- const outputCost = (tokensOutput / 1000000) * OUTPUT_COST_PER_MILLION;
63
- const cacheCreationCost = (tokensCacheCreation / 1000000) * CACHE_CREATION_COST_PER_MILLION;
64
- const cacheReadCost = (tokensCacheRead / 1000000) * CACHE_READ_COST_PER_MILLION;
65
- const totalCost = inputCost + outputCost + cacheCreationCost + cacheReadCost;
66
- return totalCost.toFixed(6);
67
- }
68
- /**
69
- * Log command execution to kosuke-core
70
- */
71
- async logCommand(data) {
72
- if (!this.config.enabled) {
73
- return;
74
- }
75
- try {
76
- const controller = new AbortController();
77
- const timeout = setTimeout(() => controller.abort(), 5000);
78
- const response = await fetch(`${this.config.baseUrl}/api/cli/logs`, {
79
- method: 'POST',
80
- headers: {
81
- 'Content-Type': 'application/json',
82
- 'x-cli-api-key': this.config.apiKey,
83
- },
84
- body: JSON.stringify(data),
85
- signal: controller.signal,
86
- });
87
- clearTimeout(timeout);
88
- if (!response.ok) {
89
- try {
90
- const error = await response.json();
91
- console.warn(`⚠️ Failed to log command: ${JSON.stringify(error)}`);
92
- }
93
- catch {
94
- // Response might not be JSON (e.g., HTML error page)
95
- console.warn(`⚠️ Failed to log command: ${response.status} ${response.statusText}`);
96
- }
97
- }
98
- }
99
- catch (error) {
100
- // Non-blocking: log warning but don't throw
101
- const message = error instanceof Error ? error.message : String(error);
102
- console.warn(`⚠️ Error logging command: ${message}`);
103
- }
104
- }
105
- /**
106
- * Create a new command execution context
107
- */
108
- createContext(command, options = {}) {
109
- return {
110
- command,
111
- startTime: Date.now(),
112
- startedAt: new Date().toISOString(),
113
- tokensInput: 0,
114
- tokensOutput: 0,
115
- tokensCacheCreation: 0,
116
- tokensCacheRead: 0,
117
- inferenceTimeMs: 0,
118
- fixesApplied: 0,
119
- testsRun: 0,
120
- testsPassed: 0,
121
- testsFailed: 0,
122
- iterations: 0,
123
- filesModified: [],
124
- noLogs: options.noLogs || false,
125
- conversationMessages: [],
126
- };
127
- }
128
- /**
129
- * Track tokens from an agent result
130
- */
131
- trackTokens(context, tokensUsed) {
132
- context.tokensInput += tokensUsed.input;
133
- context.tokensOutput += tokensUsed.output;
134
- context.tokensCacheCreation += tokensUsed.cacheCreation;
135
- context.tokensCacheRead += tokensUsed.cacheRead;
136
- }
137
- /**
138
- * Complete command execution and log it
139
- */
140
- async complete(context, status, error) {
141
- // Skip API call if noLogs is true (but still track context internally)
142
- if (context.noLogs || !this.config.enabled) {
143
- return;
144
- }
145
- const executionTimeMs = Date.now() - context.startTime;
146
- const completedAt = new Date().toISOString();
147
- const logData = {
148
- projectId: this.config.projectId,
149
- command: context.command,
150
- status,
151
- errorMessage: error?.message,
152
- tokensInput: context.tokensInput,
153
- tokensOutput: context.tokensOutput,
154
- tokensCacheCreation: context.tokensCacheCreation > 0 ? context.tokensCacheCreation : undefined,
155
- tokensCacheRead: context.tokensCacheRead > 0 ? context.tokensCacheRead : undefined,
156
- cost: this.calculateCost(context.tokensInput, context.tokensOutput, context.tokensCacheCreation, context.tokensCacheRead),
157
- executionTimeMs,
158
- inferenceTimeMs: context.inferenceTimeMs > 0 ? context.inferenceTimeMs : undefined,
159
- fixesApplied: context.fixesApplied > 0 ? context.fixesApplied : undefined,
160
- testsRun: context.testsRun > 0 ? context.testsRun : undefined,
161
- testsPassed: context.testsPassed > 0 ? context.testsPassed : undefined,
162
- testsFailed: context.testsFailed > 0 ? context.testsFailed : undefined,
163
- iterations: context.iterations > 0 ? context.iterations : undefined,
164
- filesModified: context.filesModified.length > 0 ? context.filesModified : undefined,
165
- conversationMessages: context.conversationMessages.length > 0 ? context.conversationMessages : undefined,
166
- cliVersion: this.cliVersion,
167
- startedAt: context.startedAt,
168
- completedAt,
169
- };
170
- await this.logCommand(logData);
171
- }
172
- /**
173
- * Get project context (returns null if not configured)
174
- */
175
- getProjectContext() {
176
- if (!this.config.enabled) {
177
- return null;
178
- }
179
- return {
180
- projectId: this.config.projectId,
181
- };
182
- }
183
- /**
184
- * Check if logging is enabled
185
- */
186
- isEnabled() {
187
- return this.config.enabled;
188
- }
189
- }
190
- // Export singleton instance
191
- export const logger = new CliLogger();
192
- /**
193
- * Wrapper function to automatically track command execution
194
- *
195
- * Example usage:
196
- * ```typescript
197
- * export async function shipCommand(options: ShipOptions): Promise<void> {
198
- * await withCommandTracking('ship', async (ctx) => {
199
- * // ... command logic ...
200
- * // Track tokens from agent results
201
- * logger.trackTokens(ctx, result.tokensUsed);
202
- * ctx.fixesApplied += result.fixCount;
203
- * }, { noLogs: options.noLogs });
204
- * }
205
- * ```
206
- */
207
- export async function withCommandTracking(command, fn, options = {}) {
208
- const context = logger.createContext(command, options);
209
- try {
210
- const result = await fn(context);
211
- await logger.complete(context, 'success');
212
- return result;
213
- }
214
- catch (error) {
215
- await logger.complete(context, 'error', error);
216
- throw error;
217
- }
218
- }
219
- /**
220
- * Handle command cancellation (SIGINT)
221
- */
222
- export function setupCancellationHandler(context) {
223
- const handler = async () => {
224
- console.log('\n\n⚠️ Command cancelled by user');
225
- await logger.complete(context, 'cancelled');
226
- process.exit(130); // Standard exit code for SIGINT
227
- };
228
- process.on('SIGINT', handler);
229
- // Return cleanup function
230
- return () => {
231
- process.off('SIGINT', handler);
232
- };
233
- }
234
- //# sourceMappingURL=logger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../kosuke/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -1,46 +0,0 @@
1
- /**
2
- * Playwright MCP Client
3
- * Connects to Playwright MCP server and provides tools to Claude SDK
4
- */
5
- import type Anthropic from '@anthropic-ai/sdk';
6
- interface PlaywrightMCPConfig {
7
- port?: number;
8
- verbose?: boolean;
9
- trace?: boolean;
10
- outputDir?: string;
11
- }
12
- export declare class PlaywrightMCPClient {
13
- private client;
14
- private transport;
15
- private mcpTools;
16
- private toolCalls;
17
- /**
18
- * Initialize connection to Playwright MCP server
19
- */
20
- connect(config?: PlaywrightMCPConfig): Promise<void>;
21
- /**
22
- * Get MCP tools in Anthropic SDK format
23
- */
24
- getTools(): Anthropic.Tool[];
25
- /**
26
- * Execute MCP tool call
27
- */
28
- executeTool(name: string, input: Record<string, unknown>): Promise<unknown>;
29
- /**
30
- * Get tool usage statistics
31
- */
32
- getToolUsage(): {
33
- navigations: number;
34
- clicks: number;
35
- types: number;
36
- extracts: number;
37
- other: number;
38
- total: number;
39
- };
40
- /**
41
- * Close MCP connection
42
- */
43
- close(): Promise<void>;
44
- }
45
- export {};
46
- //# sourceMappingURL=playwright-mcp-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"playwright-mcp-client.d.ts","sourceRoot":"","sources":["../../../kosuke/utils/playwright-mcp-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAK/C,UAAU,mBAAmB;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAQD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,SAAS,CAAqB;IAEtC;;OAEG;IACG,OAAO,CAAC,MAAM,GAAE,mBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IA4D9D;;OAEG;IACH,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE;IAI5B;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAqBjF;;OAEG;IACH,YAAY,IAAI;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf;IA6BD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAO7B"}
@@ -1,135 +0,0 @@
1
- /**
2
- * Playwright MCP Client
3
- * Connects to Playwright MCP server and provides tools to Claude SDK
4
- */
5
- import { Client } from '@modelcontextprotocol/sdk/client/index.js';
6
- import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
7
- import { TRACES_DIR } from './constants.js';
8
- export class PlaywrightMCPClient {
9
- constructor() {
10
- this.client = null;
11
- this.transport = null;
12
- this.mcpTools = [];
13
- this.toolCalls = [];
14
- }
15
- /**
16
- * Initialize connection to Playwright MCP server
17
- */
18
- async connect(config = {}) {
19
- const { port, verbose, trace, outputDir = TRACES_DIR } = config;
20
- try {
21
- // Start MCP client with stdio transport
22
- const args = [];
23
- if (port) {
24
- args.push('--port', port.toString());
25
- }
26
- if (trace) {
27
- args.push('--caps=tracing');
28
- }
29
- if (outputDir) {
30
- args.push('--output-dir', outputDir);
31
- }
32
- this.transport = new StdioClientTransport({
33
- command: 'npx',
34
- args: ['-y', '@playwright/mcp@latest', ...args],
35
- });
36
- this.client = new Client({
37
- name: 'kosuke-playwright-mcp-client',
38
- version: '1.0.0',
39
- }, {
40
- capabilities: {},
41
- });
42
- await this.client.connect(this.transport);
43
- if (verbose) {
44
- console.log('✅ Connected to Playwright MCP server');
45
- }
46
- // Get available tools from MCP server
47
- const toolsResponse = await this.client.listTools();
48
- // Convert MCP tools to Anthropic SDK format
49
- this.mcpTools = toolsResponse.tools.map((tool) => ({
50
- name: tool.name,
51
- description: tool.description,
52
- input_schema: tool.inputSchema,
53
- }));
54
- if (verbose) {
55
- console.log(`📦 Loaded ${this.mcpTools.length} MCP tools`);
56
- }
57
- }
58
- catch (error) {
59
- throw new Error(`Failed to connect to Playwright MCP server.\n\n` +
60
- `Make sure the server is running:\n` +
61
- ` npx @playwright/mcp@latest\n\n` +
62
- `Error: ${error instanceof Error ? error.message : String(error)}`);
63
- }
64
- }
65
- /**
66
- * Get MCP tools in Anthropic SDK format
67
- */
68
- getTools() {
69
- return this.mcpTools;
70
- }
71
- /**
72
- * Execute MCP tool call
73
- */
74
- async executeTool(name, input) {
75
- if (!this.client) {
76
- throw new Error('MCP client not connected');
77
- }
78
- // Track tool call
79
- this.toolCalls.push({
80
- name,
81
- input,
82
- timestamp: Date.now(),
83
- });
84
- // Execute via MCP
85
- const response = await this.client.callTool({
86
- name,
87
- arguments: input,
88
- });
89
- return response.content;
90
- }
91
- /**
92
- * Get tool usage statistics
93
- */
94
- getToolUsage() {
95
- const usage = {
96
- navigations: 0,
97
- clicks: 0,
98
- types: 0,
99
- extracts: 0,
100
- other: 0,
101
- };
102
- for (const call of this.toolCalls) {
103
- if (call.name.includes('navigate')) {
104
- usage.navigations++;
105
- }
106
- else if (call.name.includes('click')) {
107
- usage.clicks++;
108
- }
109
- else if (call.name.includes('type') || call.name.includes('fill')) {
110
- usage.types++;
111
- }
112
- else if (call.name.includes('extract') || call.name.includes('get')) {
113
- usage.extracts++;
114
- }
115
- else {
116
- usage.other++;
117
- }
118
- }
119
- return {
120
- ...usage,
121
- total: this.toolCalls.length,
122
- };
123
- }
124
- /**
125
- * Close MCP connection
126
- */
127
- async close() {
128
- if (this.client) {
129
- await this.client.close();
130
- }
131
- this.client = null;
132
- this.transport = null;
133
- }
134
- }
135
- //# sourceMappingURL=playwright-mcp-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"playwright-mcp-client.js","sourceRoot":"","sources":["../../../kosuke/utils/playwright-mcp-client.ts"],"names":[],"mappings":"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"}
@@ -1,49 +0,0 @@
1
- /**
2
- * PR Orchestrator - Generic PR workflow utility
3
- *
4
- * Handles branch creation, commits, push, and PR creation
5
- * Used across all commands that support --pr flag
6
- */
7
- interface PRWorkflowOptions {
8
- /** Prefix for branch name (e.g., 'quality', 'fix', 'sync') */
9
- branchPrefix: string;
10
- /** Base branch to create PR against (default: current branch) */
11
- baseBranch?: string;
12
- /** Commit message (can be function for multiple commits) */
13
- commitMessage: string | ((batchIndex: number) => string);
14
- /** PR title */
15
- prTitle: string;
16
- /** PR body (markdown) */
17
- prBody: string;
18
- /** Optional validation before each commit */
19
- validateBeforeCommit?: () => Promise<boolean>;
20
- /** Optional callback after each batch/commit */
21
- onBatchComplete?: (batchIndex: number) => Promise<void>;
22
- /** Number of batches to process (default: 1 for single commit) */
23
- batchCount?: number;
24
- /** Directory to run git operations in (default: cwd) */
25
- cwd?: string;
26
- }
27
- interface PRWorkflowResult {
28
- branchName: string;
29
- prUrl: string;
30
- baseBranch: string;
31
- commitsCreated: number;
32
- }
33
- /**
34
- * Execute core logic wrapped with PR workflow
35
- */
36
- export declare function runWithPR<T>(options: PRWorkflowOptions, coreLogic: () => Promise<T>): Promise<{
37
- result: T;
38
- prInfo: PRWorkflowResult;
39
- }>;
40
- /**
41
- * Execute core logic wrapped with PR workflow (batch mode)
42
- * Supports multiple commits for batch processing
43
- */
44
- export declare function runWithPRBatched<T>(options: PRWorkflowOptions, batches: Array<() => Promise<T>>): Promise<{
45
- results: T[];
46
- prInfo: PRWorkflowResult;
47
- }>;
48
- export {};
49
- //# sourceMappingURL=pr-orchestrator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pr-orchestrator.d.ts","sourceRoot":"","sources":["../../../kosuke/utils/pr-orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,UAAU,iBAAiB;IACzB,8DAA8D;IAC9D,YAAY,EAAE,MAAM,CAAC;IAErB,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,4DAA4D;IAC5D,aAAa,EAAE,MAAM,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IAEzD,eAAe;IACf,OAAO,EAAE,MAAM,CAAC;IAEhB,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IAEf,6CAA6C;IAC7C,oBAAoB,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9C,gDAAgD;IAChD,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAExD,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,wDAAwD;IACxD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,UAAU,gBAAgB;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC;IAAE,MAAM,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,CAAC,CAiElD;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,KAAK,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,GAC/B,OAAO,CAAC;IAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,CAAC,CAmGrD"}