@claudemax/cli 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 (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +183 -0
  3. package/dist/commands/ask.d.ts +7 -0
  4. package/dist/commands/ask.d.ts.map +1 -0
  5. package/dist/commands/ask.js +70 -0
  6. package/dist/commands/ask.js.map +1 -0
  7. package/dist/commands/chat.d.ts +7 -0
  8. package/dist/commands/chat.d.ts.map +1 -0
  9. package/dist/commands/chat.js +152 -0
  10. package/dist/commands/chat.js.map +1 -0
  11. package/dist/commands/config.d.ts +7 -0
  12. package/dist/commands/config.d.ts.map +1 -0
  13. package/dist/commands/config.js +155 -0
  14. package/dist/commands/config.js.map +1 -0
  15. package/dist/commands/history.d.ts +7 -0
  16. package/dist/commands/history.d.ts.map +1 -0
  17. package/dist/commands/history.js +158 -0
  18. package/dist/commands/history.js.map +1 -0
  19. package/dist/commands/usage.d.ts +7 -0
  20. package/dist/commands/usage.d.ts.map +1 -0
  21. package/dist/commands/usage.js +37 -0
  22. package/dist/commands/usage.js.map +1 -0
  23. package/dist/index.d.ts +7 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +31 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/lib/api-client.d.ts +43 -0
  28. package/dist/lib/api-client.d.ts.map +1 -0
  29. package/dist/lib/api-client.js +136 -0
  30. package/dist/lib/api-client.js.map +1 -0
  31. package/dist/lib/config-manager.d.ts +45 -0
  32. package/dist/lib/config-manager.d.ts.map +1 -0
  33. package/dist/lib/config-manager.js +146 -0
  34. package/dist/lib/config-manager.js.map +1 -0
  35. package/dist/lib/formatter.d.ts +42 -0
  36. package/dist/lib/formatter.d.ts.map +1 -0
  37. package/dist/lib/formatter.js +158 -0
  38. package/dist/lib/formatter.js.map +1 -0
  39. package/dist/lib/history-manager.d.ts +45 -0
  40. package/dist/lib/history-manager.d.ts.map +1 -0
  41. package/dist/lib/history-manager.js +163 -0
  42. package/dist/lib/history-manager.js.map +1 -0
  43. package/dist/lib/model-aliases.d.ts +22 -0
  44. package/dist/lib/model-aliases.d.ts.map +1 -0
  45. package/dist/lib/model-aliases.js +53 -0
  46. package/dist/lib/model-aliases.js.map +1 -0
  47. package/dist/lib/stream-handler.d.ts +37 -0
  48. package/dist/lib/stream-handler.d.ts.map +1 -0
  49. package/dist/lib/stream-handler.js +104 -0
  50. package/dist/lib/stream-handler.js.map +1 -0
  51. package/dist/types/index.d.ts +122 -0
  52. package/dist/types/index.d.ts.map +1 -0
  53. package/dist/types/index.js +6 -0
  54. package/dist/types/index.js.map +1 -0
  55. package/package.json +66 -0
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ /**
3
+ * Stream handler for Server-Sent Events (SSE)
4
+ * Parses SSE data from ClaudeAPI.Dev streaming responses
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.parseSSEStream = parseSSEStream;
8
+ exports.extractTextFromStream = extractTextFromStream;
9
+ exports.collectUsageFromStream = collectUsageFromStream;
10
+ exports.processStream = processStream;
11
+ /**
12
+ * Parse SSE stream from ReadableStream
13
+ * @param body - Response body ReadableStream
14
+ * @yields Parsed stream events
15
+ */
16
+ async function* parseSSEStream(body) {
17
+ const reader = body.getReader();
18
+ const decoder = new TextDecoder();
19
+ let buffer = '';
20
+ try {
21
+ while (true) {
22
+ const { done, value } = await reader.read();
23
+ if (done)
24
+ break;
25
+ buffer += decoder.decode(value, { stream: true });
26
+ const lines = buffer.split('\n');
27
+ buffer = lines.pop() || '';
28
+ for (const line of lines) {
29
+ if (line.startsWith('data: ')) {
30
+ const data = line.slice(6).trim();
31
+ if (data === '[DONE]') {
32
+ return;
33
+ }
34
+ try {
35
+ const event = JSON.parse(data);
36
+ yield event;
37
+ }
38
+ catch (error) {
39
+ // Ignore parse errors (malformed events)
40
+ console.error('Failed to parse SSE event:', data);
41
+ }
42
+ }
43
+ }
44
+ }
45
+ }
46
+ finally {
47
+ reader.releaseLock();
48
+ }
49
+ }
50
+ /**
51
+ * Extract text content from stream events
52
+ * @param events - Async generator of stream events
53
+ * @yields Text delta strings
54
+ */
55
+ async function* extractTextFromStream(events) {
56
+ for await (const event of events) {
57
+ if (event.type === 'content_block_delta' && event.delta?.text) {
58
+ yield event.delta.text;
59
+ }
60
+ }
61
+ }
62
+ /**
63
+ * Collect usage information from stream events
64
+ * @param events - Async generator of stream events
65
+ * @returns Usage stats (input/output tokens)
66
+ */
67
+ async function collectUsageFromStream(events) {
68
+ let inputTokens = 0;
69
+ let outputTokens = 0;
70
+ for await (const event of events) {
71
+ if (event.type === 'message_start' && event.message?.usage) {
72
+ inputTokens = event.message.usage.input_tokens;
73
+ }
74
+ else if (event.type === 'message_delta' && event.usage) {
75
+ outputTokens = event.usage.output_tokens;
76
+ }
77
+ }
78
+ return { inputTokens, outputTokens };
79
+ }
80
+ /**
81
+ * Process stream with callbacks
82
+ * @param events - Async generator of stream events
83
+ * @param onText - Callback for text deltas
84
+ * @param onUsage - Callback for usage stats
85
+ */
86
+ async function processStream(events, onText, onUsage) {
87
+ let inputTokens = 0;
88
+ let outputTokens = 0;
89
+ for await (const event of events) {
90
+ if (event.type === 'content_block_delta' && event.delta?.text) {
91
+ onText(event.delta.text);
92
+ }
93
+ else if (event.type === 'message_start' && event.message?.usage) {
94
+ inputTokens = event.message.usage.input_tokens;
95
+ }
96
+ else if (event.type === 'message_delta' && event.usage) {
97
+ outputTokens = event.usage.output_tokens;
98
+ }
99
+ }
100
+ if (onUsage) {
101
+ onUsage({ inputTokens, outputTokens });
102
+ }
103
+ }
104
+ //# sourceMappingURL=stream-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-handler.js","sourceRoot":"","sources":["../../src/lib/stream-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * TypeScript type definitions for ClaudeAPI CLI
3
+ */
4
+ export interface Config {
5
+ apiKey: string;
6
+ baseUrl: string;
7
+ defaultModel: string;
8
+ maxTokens: number;
9
+ temperature: number;
10
+ }
11
+ export interface PartialConfig {
12
+ apiKey?: string;
13
+ baseUrl?: string;
14
+ defaultModel?: string;
15
+ maxTokens?: number;
16
+ temperature?: number;
17
+ }
18
+ export interface MessageRequest {
19
+ model: string;
20
+ messages: Message[];
21
+ max_tokens: number;
22
+ system?: string;
23
+ temperature?: number;
24
+ stream?: boolean;
25
+ }
26
+ export interface Message {
27
+ role: 'user' | 'assistant';
28
+ content: string;
29
+ }
30
+ export interface MessageResponse {
31
+ id: string;
32
+ type: 'message';
33
+ role: 'assistant';
34
+ content: ContentBlock[];
35
+ model: string;
36
+ stop_reason: string | null;
37
+ usage: Usage;
38
+ }
39
+ export interface ContentBlock {
40
+ type: 'text';
41
+ text: string;
42
+ }
43
+ export interface Usage {
44
+ input_tokens: number;
45
+ output_tokens: number;
46
+ }
47
+ export interface StreamEvent {
48
+ type: string;
49
+ [key: string]: any;
50
+ }
51
+ export interface StreamDelta {
52
+ type: 'content_block_delta';
53
+ index: number;
54
+ delta: {
55
+ type: 'text_delta';
56
+ text: string;
57
+ };
58
+ }
59
+ export interface StreamMessageStart {
60
+ type: 'message_start';
61
+ message: {
62
+ id: string;
63
+ type: 'message';
64
+ role: 'assistant';
65
+ content: [];
66
+ model: string;
67
+ stop_reason: null;
68
+ usage: {
69
+ input_tokens: number;
70
+ output_tokens: number;
71
+ };
72
+ };
73
+ }
74
+ export interface StreamMessageDelta {
75
+ type: 'message_delta';
76
+ delta: {
77
+ stop_reason: string;
78
+ stop_sequence: string | null;
79
+ };
80
+ usage: {
81
+ output_tokens: number;
82
+ };
83
+ }
84
+ export interface UserStats {
85
+ user: {
86
+ id: string;
87
+ email: string;
88
+ name: string | null;
89
+ balance: number;
90
+ status: string;
91
+ tier: string;
92
+ };
93
+ usage: {
94
+ requests: {
95
+ today: number;
96
+ this_month: number;
97
+ };
98
+ tokens: {
99
+ today: number;
100
+ this_month: number;
101
+ };
102
+ cost: {
103
+ today: number;
104
+ this_month: number;
105
+ };
106
+ };
107
+ rate_limits: {
108
+ requests_per_minute: number;
109
+ requests_per_hour: number;
110
+ requests_per_day: number;
111
+ concurrent_requests: number;
112
+ };
113
+ }
114
+ export interface APIError {
115
+ error: {
116
+ type: string;
117
+ message: string;
118
+ details?: any;
119
+ };
120
+ }
121
+ export type ModelName = 'opus' | 'sonnet' | 'haiku' | string;
122
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAGD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,KAAK,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,KAAK;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAGD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,qBAAqB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE;QACL,IAAI,EAAE,YAAY,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,SAAS,CAAC;QAChB,IAAI,EAAE,WAAW,CAAC;QAClB,OAAO,EAAE,EAAE,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,IAAI,CAAC;QAClB,KAAK,EAAE;YACL,YAAY,EAAE,MAAM,CAAC;YACrB,aAAa,EAAE,MAAM,CAAC;SACvB,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,CAAC;IACF,KAAK,EAAE;QACL,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAGD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,KAAK,EAAE;QACL,QAAQ,EAAE;YACR,KAAK,EAAE,MAAM,CAAC;YACd,UAAU,EAAE,MAAM,CAAC;SACpB,CAAC;QACF,MAAM,EAAE;YACN,KAAK,EAAE,MAAM,CAAC;YACd,UAAU,EAAE,MAAM,CAAC;SACpB,CAAC;QACF,IAAI,EAAE;YACJ,KAAK,EAAE,MAAM,CAAC;YACd,UAAU,EAAE,MAAM,CAAC;SACpB,CAAC;KACH,CAAC;IACF,WAAW,EAAE;QACX,mBAAmB,EAAE,MAAM,CAAC;QAC5B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,gBAAgB,EAAE,MAAM,CAAC;QACzB,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH;AAGD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,CAAC;CACH;AAGD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * TypeScript type definitions for ClaudeAPI CLI
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";AAAA;;GAEG"}
package/package.json ADDED
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": "@claudemax/cli",
3
+ "version": "1.0.0",
4
+ "description": "Official CLI tool for ClaudeAPI.Dev - interact with Claude AI from your terminal. 80% cheaper than Anthropic's official API with Vietnamese payment support.",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "claudemax": "./dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist/**/*",
12
+ "README.md",
13
+ "LICENSE"
14
+ ],
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "dev": "tsx src/index.ts",
18
+ "watch": "tsc --watch",
19
+ "prepublishOnly": "npm run build",
20
+ "test": "echo \"No tests yet\" && exit 0",
21
+ "postbuild": "chmod +x dist/index.js"
22
+ },
23
+ "keywords": [
24
+ "claude",
25
+ "cli",
26
+ "ai",
27
+ "anthropic",
28
+ "chatbot",
29
+ "llm",
30
+ "terminal",
31
+ "claude-api",
32
+ "vietnamese",
33
+ "vietnam",
34
+ "vietqr",
35
+ "streaming",
36
+ "chat",
37
+ "gpt",
38
+ "openai-alternative"
39
+ ],
40
+ "author": "ClaudeAPI.Dev <support@claudeapi.dev>",
41
+ "license": "MIT",
42
+ "repository": {
43
+ "type": "git",
44
+ "url": "https://github.com/claudeapi-dev/claudeapi-cli.git"
45
+ },
46
+ "bugs": {
47
+ "url": "https://github.com/claudeapi-dev/claudeapi-cli/issues"
48
+ },
49
+ "homepage": "https://claudeapi.dev",
50
+ "engines": {
51
+ "node": ">=18.0.0"
52
+ },
53
+ "dependencies": {
54
+ "commander": "^11.1.0",
55
+ "chalk": "^5.3.0",
56
+ "ora": "^8.0.1",
57
+ "prompts": "^2.4.2",
58
+ "zod": "^3.22.4"
59
+ },
60
+ "devDependencies": {
61
+ "@types/node": "^20.10.0",
62
+ "@types/prompts": "^2.4.9",
63
+ "typescript": "^5.3.3",
64
+ "tsx": "^4.7.0"
65
+ }
66
+ }