@kosuke-ai/cli 0.0.15 → 0.0.17

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 (35) hide show
  1. package/README.md +40 -0
  2. package/dist/index.js +22 -3
  3. package/dist/index.js.map +1 -1
  4. package/dist/kosuke/commands/build.d.ts.map +1 -1
  5. package/dist/kosuke/commands/build.js +2 -1
  6. package/dist/kosuke/commands/build.js.map +1 -1
  7. package/dist/kosuke/commands/getcode.d.ts.map +1 -1
  8. package/dist/kosuke/commands/getcode.js +16 -0
  9. package/dist/kosuke/commands/getcode.js.map +1 -1
  10. package/dist/kosuke/commands/requirements.d.ts.map +1 -1
  11. package/dist/kosuke/commands/requirements.js +52 -18
  12. package/dist/kosuke/commands/requirements.js.map +1 -1
  13. package/dist/kosuke/commands/review.d.ts.map +1 -1
  14. package/dist/kosuke/commands/review.js +16 -0
  15. package/dist/kosuke/commands/review.js.map +1 -1
  16. package/dist/kosuke/commands/ship.d.ts.map +1 -1
  17. package/dist/kosuke/commands/ship.js +35 -1
  18. package/dist/kosuke/commands/ship.js.map +1 -1
  19. package/dist/kosuke/commands/test.d.ts.map +1 -1
  20. package/dist/kosuke/commands/test.js +32 -2
  21. package/dist/kosuke/commands/test.js.map +1 -1
  22. package/dist/kosuke/commands/tickets.d.ts.map +1 -1
  23. package/dist/kosuke/commands/tickets.js +13 -0
  24. package/dist/kosuke/commands/tickets.js.map +1 -1
  25. package/dist/kosuke/types.d.ts +10 -0
  26. package/dist/kosuke/types.d.ts.map +1 -1
  27. package/dist/kosuke/utils/logger.d.ts +141 -0
  28. package/dist/kosuke/utils/logger.d.ts.map +1 -0
  29. package/dist/kosuke/utils/logger.js +225 -0
  30. package/dist/kosuke/utils/logger.js.map +1 -0
  31. package/dist/lib.d.ts +13 -2
  32. package/dist/lib.d.ts.map +1 -1
  33. package/dist/lib.js +12 -1
  34. package/dist/lib.js.map +1 -1
  35. package/package.json +1 -1
@@ -0,0 +1,225 @@
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
+ const __filename = fileURLToPath(import.meta.url);
11
+ const __dirname = dirname(__filename);
12
+ /**
13
+ * CLI Logger class
14
+ */
15
+ class CliLogger {
16
+ constructor() {
17
+ this.config = this.loadConfig();
18
+ this.cliVersion = this.loadVersion();
19
+ }
20
+ /**
21
+ * Load configuration from environment variables
22
+ */
23
+ loadConfig(suppressWarning = false) {
24
+ const baseUrl = process.env.KOSUKE_BASE_URL || '';
25
+ const apiKey = process.env.KOSUKE_API_KEY || '';
26
+ const projectId = process.env.KOSUKE_PROJECT_ID || '';
27
+ const enabled = !!(baseUrl && apiKey && projectId);
28
+ if (!enabled && !suppressWarning) {
29
+ console.warn('⚠️ CLI logging disabled - missing KOSUKE_BASE_URL, KOSUKE_API_KEY, or KOSUKE_PROJECT_ID');
30
+ }
31
+ return {
32
+ baseUrl,
33
+ apiKey,
34
+ projectId,
35
+ enabled,
36
+ };
37
+ }
38
+ /**
39
+ * Load CLI version from package.json
40
+ */
41
+ loadVersion() {
42
+ try {
43
+ const packagePath = join(__dirname, '..', '..', 'package.json');
44
+ const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8'));
45
+ return packageJson.version || 'unknown';
46
+ }
47
+ catch {
48
+ return 'unknown';
49
+ }
50
+ }
51
+ /**
52
+ * Calculate cost from token usage
53
+ * Uses Claude Sonnet 4.5 pricing
54
+ */
55
+ calculateCost(tokensInput, tokensOutput, tokensCacheCreation = 0, tokensCacheRead = 0) {
56
+ const INPUT_COST_PER_MILLION = 3.0;
57
+ const OUTPUT_COST_PER_MILLION = 15.0;
58
+ const CACHE_CREATION_COST_PER_MILLION = 3.75;
59
+ const CACHE_READ_COST_PER_MILLION = 0.3;
60
+ const inputCost = (tokensInput / 1000000) * INPUT_COST_PER_MILLION;
61
+ const outputCost = (tokensOutput / 1000000) * OUTPUT_COST_PER_MILLION;
62
+ const cacheCreationCost = (tokensCacheCreation / 1000000) * CACHE_CREATION_COST_PER_MILLION;
63
+ const cacheReadCost = (tokensCacheRead / 1000000) * CACHE_READ_COST_PER_MILLION;
64
+ const totalCost = inputCost + outputCost + cacheCreationCost + cacheReadCost;
65
+ return totalCost.toFixed(6);
66
+ }
67
+ /**
68
+ * Log command execution to kosuke-core
69
+ */
70
+ async logCommand(data) {
71
+ if (!this.config.enabled) {
72
+ return;
73
+ }
74
+ try {
75
+ const controller = new AbortController();
76
+ const timeout = setTimeout(() => controller.abort(), 5000);
77
+ const response = await fetch(`${this.config.baseUrl}/api/cli/logs`, {
78
+ method: 'POST',
79
+ headers: {
80
+ 'Content-Type': 'application/json',
81
+ 'x-cli-api-key': this.config.apiKey,
82
+ },
83
+ body: JSON.stringify(data),
84
+ signal: controller.signal,
85
+ });
86
+ clearTimeout(timeout);
87
+ if (!response.ok) {
88
+ const error = await response.json();
89
+ console.warn(`⚠️ Failed to log command: ${JSON.stringify(error)}`);
90
+ }
91
+ }
92
+ catch (error) {
93
+ // Non-blocking: log warning but don't throw
94
+ const message = error instanceof Error ? error.message : String(error);
95
+ console.warn(`⚠️ Error logging command: ${message}`);
96
+ }
97
+ }
98
+ /**
99
+ * Create a new command execution context
100
+ */
101
+ createContext(command, options = {}) {
102
+ return {
103
+ command,
104
+ startTime: Date.now(),
105
+ startedAt: new Date().toISOString(),
106
+ tokensInput: 0,
107
+ tokensOutput: 0,
108
+ tokensCacheCreation: 0,
109
+ tokensCacheRead: 0,
110
+ inferenceTimeMs: 0,
111
+ fixesApplied: 0,
112
+ testsRun: 0,
113
+ testsPassed: 0,
114
+ testsFailed: 0,
115
+ iterations: 0,
116
+ filesModified: [],
117
+ noLogs: options.noLogs || false,
118
+ };
119
+ }
120
+ /**
121
+ * Track tokens from an agent result
122
+ */
123
+ trackTokens(context, tokensUsed) {
124
+ context.tokensInput += tokensUsed.input;
125
+ context.tokensOutput += tokensUsed.output;
126
+ context.tokensCacheCreation += tokensUsed.cacheCreation;
127
+ context.tokensCacheRead += tokensUsed.cacheRead;
128
+ }
129
+ /**
130
+ * Complete command execution and log it
131
+ */
132
+ async complete(context, status, error) {
133
+ // Skip API call if noLogs is true (but still track context internally)
134
+ if (context.noLogs || !this.config.enabled) {
135
+ return;
136
+ }
137
+ const executionTimeMs = Date.now() - context.startTime;
138
+ const completedAt = new Date().toISOString();
139
+ const logData = {
140
+ projectId: this.config.projectId,
141
+ command: context.command,
142
+ status,
143
+ errorMessage: error?.message,
144
+ tokensInput: context.tokensInput,
145
+ tokensOutput: context.tokensOutput,
146
+ tokensCacheCreation: context.tokensCacheCreation > 0 ? context.tokensCacheCreation : undefined,
147
+ tokensCacheRead: context.tokensCacheRead > 0 ? context.tokensCacheRead : undefined,
148
+ cost: this.calculateCost(context.tokensInput, context.tokensOutput, context.tokensCacheCreation, context.tokensCacheRead),
149
+ executionTimeMs,
150
+ inferenceTimeMs: context.inferenceTimeMs > 0 ? context.inferenceTimeMs : undefined,
151
+ fixesApplied: context.fixesApplied > 0 ? context.fixesApplied : undefined,
152
+ testsRun: context.testsRun > 0 ? context.testsRun : undefined,
153
+ testsPassed: context.testsPassed > 0 ? context.testsPassed : undefined,
154
+ testsFailed: context.testsFailed > 0 ? context.testsFailed : undefined,
155
+ iterations: context.iterations > 0 ? context.iterations : undefined,
156
+ filesModified: context.filesModified.length > 0 ? context.filesModified : undefined,
157
+ cliVersion: this.cliVersion,
158
+ startedAt: context.startedAt,
159
+ completedAt,
160
+ };
161
+ await this.logCommand(logData);
162
+ }
163
+ /**
164
+ * Get project context (returns null if not configured)
165
+ */
166
+ getProjectContext() {
167
+ if (!this.config.enabled) {
168
+ return null;
169
+ }
170
+ return {
171
+ projectId: this.config.projectId,
172
+ };
173
+ }
174
+ /**
175
+ * Check if logging is enabled
176
+ */
177
+ isEnabled() {
178
+ return this.config.enabled;
179
+ }
180
+ }
181
+ // Export singleton instance
182
+ export const logger = new CliLogger();
183
+ /**
184
+ * Wrapper function to automatically track command execution
185
+ *
186
+ * Example usage:
187
+ * ```typescript
188
+ * export async function shipCommand(options: ShipOptions): Promise<void> {
189
+ * await withCommandTracking('ship', async (ctx) => {
190
+ * // ... command logic ...
191
+ * // Track tokens from agent results
192
+ * logger.trackTokens(ctx, result.tokensUsed);
193
+ * ctx.fixesApplied += result.fixCount;
194
+ * }, { noLogs: options.noLogs });
195
+ * }
196
+ * ```
197
+ */
198
+ export async function withCommandTracking(command, fn, options = {}) {
199
+ const context = logger.createContext(command, options);
200
+ try {
201
+ const result = await fn(context);
202
+ await logger.complete(context, 'success');
203
+ return result;
204
+ }
205
+ catch (error) {
206
+ await logger.complete(context, 'error', error);
207
+ throw error;
208
+ }
209
+ }
210
+ /**
211
+ * Handle command cancellation (SIGINT)
212
+ */
213
+ export function setupCancellationHandler(context) {
214
+ const handler = async () => {
215
+ console.log('\n\n⚠️ Command cancelled by user');
216
+ await logger.complete(context, 'cancelled');
217
+ process.exit(130); // Standard exit code for SIGINT
218
+ };
219
+ process.on('SIGINT', handler);
220
+ // Return cleanup function
221
+ return () => {
222
+ process.off('SIGINT', handler);
223
+ };
224
+ }
225
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../kosuke/utils/logger.ts"],"names":[],"mappings":"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"}
package/dist/lib.d.ts CHANGED
@@ -11,7 +11,10 @@
11
11
  * getCodeCore,
12
12
  * discoverFiles,
13
13
  * runLint,
14
- * type ValidationResult
14
+ * logger,
15
+ * withCommandTracking,
16
+ * type ValidationResult,
17
+ * type CommandExecutionContext
15
18
  * } from '@kosuke-ai/cli';
16
19
  *
17
20
  * // Run analysis programmatically
@@ -28,6 +31,13 @@
28
31
  *
29
32
  * // Discover files
30
33
  * const files = await discoverFiles({ types: ['ts', 'tsx'] });
34
+ *
35
+ * // Track command execution with automatic logging
36
+ * await withCommandTracking('ship', async (ctx: CommandExecutionContext) => {
37
+ * // Your command logic here
38
+ * ctx.fixesApplied = 5;
39
+ * ctx.filesModified = ['src/app.ts'];
40
+ * });
31
41
  * ```
32
42
  */
33
43
  export { analyseCommand } from './kosuke/commands/analyse.js';
@@ -45,7 +55,8 @@ export { createBatches } from './kosuke/utils/batch-creator.js';
45
55
  export { runLint, runTypecheck, runFormat, runTests, runComprehensiveLinting, detectPackageManager, readPackageJsonScripts, } from './kosuke/utils/validator.js';
46
56
  export { getRepoLocalPath } from './kosuke/utils/repository-manager.js';
47
57
  export { validateRepoAccess } from './kosuke/utils/repository-resolver.js';
48
- export type { Batch, Fix, AnalyseOptions, LintOptions, SyncRulesOptions, RulesAdaptation, GitInfo, GetCodeOptions, CodeExplorationResult, TicketsOptions, TicketsResult, Ticket, ShipOptions, ShipResult, BuildOptions, ReviewOptions, ReviewResult, TestOptions, TestResult, AnalysisResult, TestFailure, ConsoleLog, NetworkLog, DockerLog, CollectedLogs, PlaywrightResult, PlaywrightOptions, GeneratedTest, VisualDiff, VisualTestOptions, } from './kosuke/types.js';
58
+ export { logger, withCommandTracking, setupCancellationHandler } from './kosuke/utils/logger.js';
59
+ export type { Batch, Fix, AnalyseOptions, LintOptions, SyncRulesOptions, RulesAdaptation, GitInfo, GetCodeOptions, CodeExplorationResult, TicketsOptions, TicketsResult, Ticket, ShipOptions, ShipResult, BuildOptions, ReviewOptions, ReviewResult, TestOptions, TestResult, AnalysisResult, TestFailure, ConsoleLog, NetworkLog, DockerLog, CollectedLogs, PlaywrightResult, PlaywrightOptions, GeneratedTest, VisualDiff, VisualTestOptions, CommandName, ExecutionStatus, CliLogData, CommandExecutionContext, } from './kosuke/types.js';
49
60
  export type { ValidationResult } from './kosuke/utils/validator.js';
50
61
  export type { AgentVerbosity, AgentConfig, AgentResult } from './kosuke/utils/claude-agent.js';
51
62
  //# sourceMappingURL=lib.d.ts.map
package/dist/lib.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAGlE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EACL,OAAO,EACP,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAG3E,YAAY,EACV,KAAK,EACL,GAAG,EACH,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,OAAO,EACP,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,MAAM,EACN,WAAW,EACX,UAAU,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,UAAU,EAEV,cAAc,EACd,WAAW,EACX,UAAU,EACV,UAAU,EACV,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC"}
1
+ {"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAGlE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EACL,OAAO,EACP,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAGjG,YAAY,EACV,KAAK,EACL,GAAG,EACH,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,OAAO,EACP,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,MAAM,EACN,WAAW,EACX,UAAU,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,UAAU,EAEV,cAAc,EACd,WAAW,EACX,UAAU,EACV,UAAU,EACV,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,iBAAiB,EAEjB,WAAW,EACX,eAAe,EACf,UAAU,EACV,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC"}
package/dist/lib.js CHANGED
@@ -11,7 +11,10 @@
11
11
  * getCodeCore,
12
12
  * discoverFiles,
13
13
  * runLint,
14
- * type ValidationResult
14
+ * logger,
15
+ * withCommandTracking,
16
+ * type ValidationResult,
17
+ * type CommandExecutionContext
15
18
  * } from '@kosuke-ai/cli';
16
19
  *
17
20
  * // Run analysis programmatically
@@ -28,6 +31,13 @@
28
31
  *
29
32
  * // Discover files
30
33
  * const files = await discoverFiles({ types: ['ts', 'tsx'] });
34
+ *
35
+ * // Track command execution with automatic logging
36
+ * await withCommandTracking('ship', async (ctx: CommandExecutionContext) => {
37
+ * // Your command logic here
38
+ * ctx.fixesApplied = 5;
39
+ * ctx.filesModified = ['src/app.ts'];
40
+ * });
31
41
  * ```
32
42
  */
33
43
  // Re-export commands
@@ -47,4 +57,5 @@ export { createBatches } from './kosuke/utils/batch-creator.js';
47
57
  export { runLint, runTypecheck, runFormat, runTests, runComprehensiveLinting, detectPackageManager, readPackageJsonScripts, } from './kosuke/utils/validator.js';
48
58
  export { getRepoLocalPath } from './kosuke/utils/repository-manager.js';
49
59
  export { validateRepoAccess } from './kosuke/utils/repository-resolver.js';
60
+ export { logger, withCommandTracking, setupCancellationHandler } from './kosuke/utils/logger.js';
50
61
  //# sourceMappingURL=lib.js.map
package/dist/lib.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"lib.js","sourceRoot":"","sources":["../lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,qBAAqB;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAElE,sBAAsB;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EACL,OAAO,EACP,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC"}
1
+ {"version":3,"file":"lib.js","sourceRoot":"","sources":["../lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,qBAAqB;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAElE,sBAAsB;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EACL,OAAO,EACP,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kosuke-ai/cli",
3
- "version": "0.0.15",
3
+ "version": "0.0.17",
4
4
  "description": "Kosuke CLI - Development automation tool for syncing rules and analyzing code quality",
5
5
  "keywords": [
6
6
  "CLI",