@vibeapi/api-helper 0.0.2

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 +25 -0
  2. package/dist/cli.d.ts +2 -0
  3. package/dist/cli.js +18 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/commands/auth.d.ts +1 -0
  6. package/dist/commands/auth.js +119 -0
  7. package/dist/commands/auth.js.map +1 -0
  8. package/dist/commands/config.d.ts +1 -0
  9. package/dist/commands/config.js +130 -0
  10. package/dist/commands/config.js.map +1 -0
  11. package/dist/commands/doctor.d.ts +1 -0
  12. package/dist/commands/doctor.js +105 -0
  13. package/dist/commands/doctor.js.map +1 -0
  14. package/dist/commands/index.d.ts +4 -0
  15. package/dist/commands/index.js +5 -0
  16. package/dist/commands/index.js.map +1 -0
  17. package/dist/commands/lang.d.ts +1 -0
  18. package/dist/commands/lang.js +28 -0
  19. package/dist/commands/lang.js.map +1 -0
  20. package/dist/index.d.ts +12 -0
  21. package/dist/index.js +10 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/lib/api-validator.d.ts +12 -0
  24. package/dist/lib/api-validator.js +79 -0
  25. package/dist/lib/api-validator.js.map +1 -0
  26. package/dist/lib/claude-code-manager.d.ts +86 -0
  27. package/dist/lib/claude-code-manager.js +233 -0
  28. package/dist/lib/claude-code-manager.js.map +1 -0
  29. package/dist/lib/command.d.ts +10 -0
  30. package/dist/lib/command.js +168 -0
  31. package/dist/lib/command.js.map +1 -0
  32. package/dist/lib/config.d.ts +64 -0
  33. package/dist/lib/config.js +226 -0
  34. package/dist/lib/config.js.map +1 -0
  35. package/dist/lib/i18n.d.ts +20 -0
  36. package/dist/lib/i18n.js +149 -0
  37. package/dist/lib/i18n.js.map +1 -0
  38. package/dist/lib/opencode-manager.d.ts +55 -0
  39. package/dist/lib/opencode-manager.js +134 -0
  40. package/dist/lib/opencode-manager.js.map +1 -0
  41. package/dist/lib/tool-manager.d.ts +25 -0
  42. package/dist/lib/tool-manager.js +280 -0
  43. package/dist/lib/tool-manager.js.map +1 -0
  44. package/dist/lib/wizard.d.ts +24 -0
  45. package/dist/lib/wizard.js +483 -0
  46. package/dist/lib/wizard.js.map +1 -0
  47. package/dist/locales/en_US.json +150 -0
  48. package/dist/locales/zh_CN.json +150 -0
  49. package/dist/utils/logger.d.ts +55 -0
  50. package/dist/utils/logger.js +202 -0
  51. package/dist/utils/logger.js.map +1 -0
  52. package/dist/utils/string-width.d.ts +38 -0
  53. package/dist/utils/string-width.js +131 -0
  54. package/dist/utils/string-width.js.map +1 -0
  55. package/package.json +73 -0
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Calculate the visual display width of a string
3
+ * Handles emoji, CJK characters, and ANSI escape codes
4
+ */
5
+ /**
6
+ * Strip ANSI escape codes from a string
7
+ */
8
+ export function stripAnsi(str) {
9
+ // eslint-disable-next-line no-control-regex
10
+ return str.replace(/\u001b\[[0-9;]*m/g, '');
11
+ }
12
+ /**
13
+ * Calculate the visual width of a character
14
+ * - Emoji and wide characters (CJK): 2
15
+ * - Regular ASCII: 1
16
+ * - Zero-width characters: 0
17
+ */
18
+ function charWidth(char) {
19
+ const code = char.codePointAt(0);
20
+ if (!code)
21
+ return 0;
22
+ // Zero-width characters
23
+ if (code === 0x200b || // Zero-width space
24
+ code === 0x200c || // Zero-width non-joiner
25
+ code === 0x200d || // Zero-width joiner
26
+ code === 0xfeff || // Zero-width no-break space
27
+ (code >= 0xfe00 && code <= 0xfe0f) // Variation Selectors (emoji style selectors)
28
+ ) {
29
+ return 0;
30
+ }
31
+ // Emoji and symbols (rough approximation)
32
+ // Most emoji are in these ranges and display as 2 characters wide
33
+ if ((code >= 0x1f300 && code <= 0x1f9ff) || // Misc Symbols and Pictographs, Emoticons, etc.
34
+ (code >= 0x2600 && code <= 0x26ff) || // Misc symbols
35
+ (code >= 0x2700 && code <= 0x27bf) || // Dingbats
36
+ (code >= 0x1f000 && code <= 0x1f02f) || // Mahjong Tiles, Domino Tiles
37
+ (code >= 0x1f0a0 && code <= 0x1f0ff) // Playing Cards
38
+ ) {
39
+ return 2;
40
+ }
41
+ // CJK characters (Chinese, Japanese, Korean)
42
+ // These are typically displayed as 2 characters wide
43
+ if ((code >= 0x4e00 && code <= 0x9fff) || // CJK Unified Ideographs
44
+ (code >= 0x3400 && code <= 0x4dbf) || // CJK Unified Ideographs Extension A
45
+ (code >= 0x20000 && code <= 0x2a6df) || // CJK Unified Ideographs Extension B
46
+ (code >= 0x2a700 && code <= 0x2b73f) || // CJK Unified Ideographs Extension C
47
+ (code >= 0x2b740 && code <= 0x2b81f) || // CJK Unified Ideographs Extension D
48
+ (code >= 0x2b820 && code <= 0x2ceaf) || // CJK Unified Ideographs Extension E
49
+ (code >= 0xf900 && code <= 0xfaff) || // CJK Compatibility Ideographs
50
+ (code >= 0x2f800 && code <= 0x2fa1f) || // CJK Compatibility Ideographs Supplement
51
+ (code >= 0x3040 && code <= 0x309f) || // Hiragana
52
+ (code >= 0x30a0 && code <= 0x30ff) || // Katakana
53
+ (code >= 0xac00 && code <= 0xd7af) || // Hangul Syllables
54
+ (code >= 0x1100 && code <= 0x11ff) || // Hangul Jamo
55
+ (code >= 0x3130 && code <= 0x318f) || // Hangul Compatibility Jamo
56
+ (code >= 0xa960 && code <= 0xa97f) || // Hangul Jamo Extended-A
57
+ (code >= 0xd7b0 && code <= 0xd7ff) // Hangul Jamo Extended-B
58
+ ) {
59
+ return 2;
60
+ }
61
+ // Fullwidth characters
62
+ if (code >= 0xff00 && code <= 0xffef) {
63
+ return 2;
64
+ }
65
+ // Default to 1 for regular ASCII and other characters
66
+ return 1;
67
+ }
68
+ /**
69
+ * Calculate the visual display width of a string
70
+ * Strips ANSI codes and counts visual width of each character
71
+ */
72
+ export function stringWidth(str) {
73
+ const cleaned = stripAnsi(str);
74
+ let width = 0;
75
+ // Use Array.from to properly handle surrogate pairs
76
+ for (const char of Array.from(cleaned)) {
77
+ width += charWidth(char);
78
+ }
79
+ return width;
80
+ }
81
+ /**
82
+ * Pad a string to a specific visual width
83
+ * @param str - The string to pad
84
+ * @param targetWidth - The target visual width
85
+ * @param char - The character to use for padding (default: space)
86
+ * @param align - Alignment: 'left', 'right', or 'center' (default: 'left')
87
+ */
88
+ export function padString(str, targetWidth, char = ' ', align = 'left') {
89
+ const currentWidth = stringWidth(str);
90
+ const padWidth = Math.max(0, targetWidth - currentWidth);
91
+ if (padWidth === 0)
92
+ return str;
93
+ const padding = char.repeat(padWidth);
94
+ if (align === 'right') {
95
+ return padding + str;
96
+ }
97
+ else if (align === 'center') {
98
+ const leftPad = Math.floor(padWidth / 2);
99
+ const rightPad = padWidth - leftPad;
100
+ return char.repeat(leftPad) + str + char.repeat(rightPad);
101
+ }
102
+ else {
103
+ return str + padding;
104
+ }
105
+ }
106
+ /**
107
+ * Create a box border line
108
+ * @param leftChar - Left border character
109
+ * @param rightChar - Right border character
110
+ * @param fillChar - Fill character
111
+ * @param width - Total width including borders
112
+ */
113
+ export function createBorderLine(leftChar, rightChar, fillChar, width) {
114
+ const innerWidth = width - stringWidth(leftChar) - stringWidth(rightChar);
115
+ return leftChar + fillChar.repeat(Math.max(0, innerWidth)) + rightChar;
116
+ }
117
+ /**
118
+ * Create a box content line with borders
119
+ * @param content - The content to display
120
+ * @param leftChar - Left border character
121
+ * @param rightChar - Right border character
122
+ * @param width - Total width including borders
123
+ * @param align - Content alignment
124
+ */
125
+ export function createContentLine(content, leftChar, rightChar, width, align = 'left') {
126
+ const borderWidth = stringWidth(leftChar) + stringWidth(rightChar);
127
+ const innerWidth = width - borderWidth;
128
+ const paddedContent = padString(content, innerWidth, ' ', align);
129
+ return leftChar + paddedContent + rightChar;
130
+ }
131
+ //# sourceMappingURL=string-width.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string-width.js","sourceRoot":"","sources":["../../src/utils/string-width.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "@vibeapi/api-helper",
3
+ "version": "0.0.2",
4
+ "description": "CLI tool for managing AI coding assistants (Claude Code, OpenCode) with Anthropic API",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "api-helper": "dist/cli.js",
9
+ "chelper": "dist/cli.js"
10
+ },
11
+ "homepage": "https://www.vibeapi.cn/",
12
+ "bugs": {
13
+ "url": "https://www.vibeapi.cn/support"
14
+ },
15
+ "type": "module",
16
+ "files": [
17
+ "dist",
18
+ "README.md",
19
+ "LICENSE"
20
+ ],
21
+ "engines": {
22
+ "node": ">=18.0.0"
23
+ },
24
+ "publishConfig": {
25
+ "access": "public"
26
+ },
27
+ "scripts": {
28
+ "build": "tsc && cp -r src/locales dist/",
29
+ "dev": "tsx watch src/cli.ts",
30
+ "start": "node dist/cli.js",
31
+ "clean": "rm -rf dist",
32
+ "prepublishOnly": "pnpm run clean && pnpm run build",
33
+ "test": "echo \"Error: no test specified\" && exit 1",
34
+ "lint": "eslint .",
35
+ "lint:fix": "eslint . --fix"
36
+ },
37
+ "keywords": [
38
+ "cli",
39
+ "coding",
40
+ "helper",
41
+ "tools",
42
+ "anthropic",
43
+ "claude",
44
+ "ai",
45
+ "assistant",
46
+ "claude-code",
47
+ "opencode"
48
+ ],
49
+ "author": "VibeAPI",
50
+ "license": "UNLICENSED",
51
+ "private": false,
52
+ "packageManager": "pnpm@10.15.0",
53
+ "dependencies": {
54
+ "chalk": "^5.3.0",
55
+ "commander": "^12.1.0",
56
+ "inquirer": "^9.2.12",
57
+ "js-yaml": "^4.1.0",
58
+ "ora": "^8.0.1",
59
+ "terminal-link": "^5.0.0"
60
+ },
61
+ "devDependencies": {
62
+ "@eslint/js": "^9.39.1",
63
+ "@types/inquirer": "^9.0.7",
64
+ "@types/js-yaml": "^4.0.9",
65
+ "@types/node": "^24.10.1",
66
+ "eslint": "^9.39.1",
67
+ "globals": "^16.5.0",
68
+ "nodemon": "^3.1.11",
69
+ "tsx": "^4.20.6",
70
+ "typescript": "^5.9.3",
71
+ "typescript-eslint": "^8.46.4"
72
+ }
73
+ }