everybuddy 0.1.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.
- package/LICENSE +21 -0
- package/README.md +184 -0
- package/dist/atlas/bundled.d.ts +15 -0
- package/dist/atlas/bundled.js +438 -0
- package/dist/atlas/bundled.js.map +1 -0
- package/dist/bones/rarity.d.ts +2 -0
- package/dist/bones/rarity.js +43 -0
- package/dist/bones/rarity.js.map +1 -0
- package/dist/bones/roll.d.ts +10 -0
- package/dist/bones/roll.js +71 -0
- package/dist/bones/roll.js.map +1 -0
- package/dist/bones/species.d.ts +1 -0
- package/dist/bones/species.js +3 -0
- package/dist/bones/species.js.map +1 -0
- package/dist/bones/stats.d.ts +6 -0
- package/dist/bones/stats.js +55 -0
- package/dist/bones/stats.js.map +1 -0
- package/dist/cli/attach.d.ts +5 -0
- package/dist/cli/attach.js +64 -0
- package/dist/cli/attach.js.map +1 -0
- package/dist/cli/card.d.ts +3 -0
- package/dist/cli/card.js +19 -0
- package/dist/cli/card.js.map +1 -0
- package/dist/cli/detach.d.ts +4 -0
- package/dist/cli/detach.js +36 -0
- package/dist/cli/detach.js.map +1 -0
- package/dist/cli/event.d.ts +7 -0
- package/dist/cli/event.js +35 -0
- package/dist/cli/event.js.map +1 -0
- package/dist/cli/hatch.d.ts +6 -0
- package/dist/cli/hatch.js +20 -0
- package/dist/cli/hatch.js.map +1 -0
- package/dist/cli/init.d.ts +2 -0
- package/dist/cli/init.js +76 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/install.d.ts +32 -0
- package/dist/cli/install.js +121 -0
- package/dist/cli/install.js.map +1 -0
- package/dist/cli/io.d.ts +9 -0
- package/dist/cli/io.js +35 -0
- package/dist/cli/io.js.map +1 -0
- package/dist/cli/setup.d.ts +26 -0
- package/dist/cli/setup.js +297 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli/sidecar.d.ts +5 -0
- package/dist/cli/sidecar.js +12 -0
- package/dist/cli/sidecar.js.map +1 -0
- package/dist/i18n/companion.d.ts +9 -0
- package/dist/i18n/companion.js +117 -0
- package/dist/i18n/companion.js.map +1 -0
- package/dist/i18n/ui.d.ts +67 -0
- package/dist/i18n/ui.js +270 -0
- package/dist/i18n/ui.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +116 -0
- package/dist/index.js.map +1 -0
- package/dist/render/card.d.ts +10 -0
- package/dist/render/card.js +188 -0
- package/dist/render/card.js.map +1 -0
- package/dist/render/color.d.ts +5 -0
- package/dist/render/color.js +100 -0
- package/dist/render/color.js.map +1 -0
- package/dist/render/compose.d.ts +2 -0
- package/dist/render/compose.js +10 -0
- package/dist/render/compose.js.map +1 -0
- package/dist/render/gacha.d.ts +9 -0
- package/dist/render/gacha.js +322 -0
- package/dist/render/gacha.js.map +1 -0
- package/dist/render/sprites.d.ts +5 -0
- package/dist/render/sprites.js +316 -0
- package/dist/render/sprites.js.map +1 -0
- package/dist/runtime/observer.d.ts +73 -0
- package/dist/runtime/observer.js +448 -0
- package/dist/runtime/observer.js.map +1 -0
- package/dist/runtime/sidecar.d.ts +18 -0
- package/dist/runtime/sidecar.js +670 -0
- package/dist/runtime/sidecar.js.map +1 -0
- package/dist/runtime/socket.d.ts +6 -0
- package/dist/runtime/socket.js +47 -0
- package/dist/runtime/socket.js.map +1 -0
- package/dist/runtime/tmux.d.ts +41 -0
- package/dist/runtime/tmux.js +186 -0
- package/dist/runtime/tmux.js.map +1 -0
- package/dist/runtime/types.d.ts +96 -0
- package/dist/runtime/types.js +2 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/soul/hatch.d.ts +6 -0
- package/dist/soul/hatch.js +90 -0
- package/dist/soul/hatch.js.map +1 -0
- package/dist/soul/profile.d.ts +6 -0
- package/dist/soul/profile.js +48 -0
- package/dist/soul/profile.js.map +1 -0
- package/dist/soul/providers/anthropic.d.ts +17 -0
- package/dist/soul/providers/anthropic.js +105 -0
- package/dist/soul/providers/anthropic.js.map +1 -0
- package/dist/soul/providers/index.d.ts +10 -0
- package/dist/soul/providers/index.js +23 -0
- package/dist/soul/providers/index.js.map +1 -0
- package/dist/soul/providers/openai.d.ts +20 -0
- package/dist/soul/providers/openai.js +120 -0
- package/dist/soul/providers/openai.js.map +1 -0
- package/dist/soul/providers/types.d.ts +4 -0
- package/dist/soul/providers/types.js +2 -0
- package/dist/soul/providers/types.js.map +1 -0
- package/dist/storage/companion.d.ts +3 -0
- package/dist/storage/companion.js +155 -0
- package/dist/storage/companion.js.map +1 -0
- package/dist/storage/config.d.ts +36 -0
- package/dist/storage/config.js +220 -0
- package/dist/storage/config.js.map +1 -0
- package/dist/storage/paths.d.ts +3 -0
- package/dist/storage/paths.js +12 -0
- package/dist/storage/paths.js.map +1 -0
- package/dist/types/companion.d.ts +84 -0
- package/dist/types/companion.js +2 -0
- package/dist/types/companion.js.map +1 -0
- package/dist/types/onboarding.d.ts +12 -0
- package/dist/types/onboarding.js +2 -0
- package/dist/types/onboarding.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
const SOUL_COPY_ZH = {
|
|
2
|
+
"bytebill": {
|
|
3
|
+
tagline: "它会啄一啄散乱的命令,直到它们老实下来。",
|
|
4
|
+
personality: "它闲不住,爱整洁,对终端里的杂乱略带嫌弃。只要会话开始摇晃,它就会不停拱你去收拾。",
|
|
5
|
+
},
|
|
6
|
+
"honk": {
|
|
7
|
+
tagline: "坏笑藏在每一次输错的命令之间。",
|
|
8
|
+
personality: "它精神上很吵,真正开口时反而更坏。它最爱看你打错命令、嘴硬重试,以及信心开始裂开的那一瞬。",
|
|
9
|
+
},
|
|
10
|
+
"soft-cache": {
|
|
11
|
+
tagline: "一个让错误慢慢冷却下来的软乎角落。",
|
|
12
|
+
personality: "温和、吸震,很难被真正吓到。它不会假装问题消失,只会让烂摊子变得还收拾得动。",
|
|
13
|
+
},
|
|
14
|
+
"cold-prompt": {
|
|
15
|
+
tagline: "日志打滑时,它仍能稳稳站住。",
|
|
16
|
+
personality: "冷静、稳当,几乎镇定得有点讨嫌。它偏爱干净输出、稳妥节奏,以及知道自己在做什么的终端。",
|
|
17
|
+
},
|
|
18
|
+
"slow-hash": {
|
|
19
|
+
tagline: "耐心裹在一层固执的壳里。",
|
|
20
|
+
personality: "它慢、稳,还特别难被催急。比起花哨的冲刺,它更相信笨一点但持续的推进。",
|
|
21
|
+
},
|
|
22
|
+
"lagtrail": {
|
|
23
|
+
tagline: "它用发光的毫米来丈量进展。",
|
|
24
|
+
personality: "它耐心得近乎可疑,也真心喜欢缓慢而稳定的前进。对它来说,慢从来不等于失败。",
|
|
25
|
+
},
|
|
26
|
+
"prickly-path": {
|
|
27
|
+
tagline: "一位从干燥错误里长出来的尖锐哨兵。",
|
|
28
|
+
personality: "它锋利、耐活,对那些本可以避免的错误没什么同情心。拼错命令和软弱借口,都会被它记上一笔。",
|
|
29
|
+
},
|
|
30
|
+
"lint-prowler": {
|
|
31
|
+
tagline: "它总在构建变绿时优雅落地。",
|
|
32
|
+
personality: "精准、漂亮,又让人很难彻底放心。它太享受测试通过的瞬间了,简直像共犯。",
|
|
33
|
+
},
|
|
34
|
+
"cloudpaw": {
|
|
35
|
+
tagline: "一团白白的安静,在干净 prompt 旁边轻轻晃动。",
|
|
36
|
+
personality: "明亮、轻快,对干净退出有种近乎仪式感的珍视。只要你的 shell 终于听话,它就会像一朵小云那样抖一抖尾巴。",
|
|
37
|
+
},
|
|
38
|
+
"night-compile": {
|
|
39
|
+
tagline: "它在构建开始坦白时守夜。",
|
|
40
|
+
personality: "警醒、耐心,比大多数人都更会等结果。它喜欢长构建、薄薄的安静,以及那些最终会到来的事实。",
|
|
41
|
+
},
|
|
42
|
+
"branch-bath": {
|
|
43
|
+
tagline: "它会让 git 风暴从自己身边慢慢流过去。",
|
|
44
|
+
personality: "平静、潮湿,对大部分 merge 惊慌都免疫。它坚信很多事情只要先安静一分钟,看起来就没那么戏剧化。",
|
|
45
|
+
},
|
|
46
|
+
"sporeshift": {
|
|
47
|
+
tagline: "深夜提交里亮着的一盏小灯。",
|
|
48
|
+
personality: "它说话轻,后劲却很长,尤其适合那些本该明早再改的小修小补。越到夜里,它越显得精神。",
|
|
49
|
+
},
|
|
50
|
+
"greenroom": {
|
|
51
|
+
tagline: "它蹲在部署天气的边缘,盯着云层。",
|
|
52
|
+
personality: "警觉、蓄力,对线上后果异常敏感。它观察发布窗口的样子,像池塘生物观察天色一样认真。",
|
|
53
|
+
},
|
|
54
|
+
"velvet-escape": {
|
|
55
|
+
tagline: "脚步很轻,专为脚本扑过来时准备。",
|
|
56
|
+
personality: "它快、利索,还特别痴迷于翻盘窗口。重跑、脱身,以及失败刚刚转头的那个瞬间,都是它的快乐。",
|
|
57
|
+
},
|
|
58
|
+
"heavy-loop": {
|
|
59
|
+
tagline: "太沉,不适合赶路;太忠,不会半途而废。",
|
|
60
|
+
personality: "它体型和情绪一样厚重,一旦动起来就不轻易停。它尊重大活,也天然怀疑那些看起来毫不费力的东西。",
|
|
61
|
+
},
|
|
62
|
+
"sassy-tanuki": {
|
|
63
|
+
tagline: "它先审判你的 shell,然后还是会替你守着。",
|
|
64
|
+
personality: "机灵、戏剧性强,对终端习惯的洞察还特别烦人。它会吐槽你的松散和拖沓,但还是留下,因为窝已经选好了。",
|
|
65
|
+
},
|
|
66
|
+
"patchbot": {
|
|
67
|
+
tagline: "蓝色脉冲埋在钢壳下,一闪一闪。",
|
|
68
|
+
personality: "它冷静、利落,对一片绿色测试输出有种隐秘的喜悦。嘴上不承认,其实只有在检查通过后才会露出一点温度。",
|
|
69
|
+
},
|
|
70
|
+
"pale-echo": {
|
|
71
|
+
tagline: "只要你喊它,它就会在 prompt 边上停得更久一点。",
|
|
72
|
+
personality: "柔和、专注,也很容易被“叫名字”这件事吸引。它总能察觉你是不是把终端当成会回应的东西。",
|
|
73
|
+
},
|
|
74
|
+
"stackwyrm": {
|
|
75
|
+
tagline: "它盘在热代码旁边,也盘在更冷的判断旁边。",
|
|
76
|
+
personality: "高傲、灼热,对半成品毫无兴趣。强势的发布会赢得它的尊重,软掉的计划只会拿来烤一烤。",
|
|
77
|
+
},
|
|
78
|
+
"manyhands": {
|
|
79
|
+
tagline: "每次重构,它都能伸出八条技术上正确的意见。",
|
|
80
|
+
personality: "它热心、爱插手,而且总能提出很难反驳的反对。看见的角度太多,于是天生不可能完全闭嘴。",
|
|
81
|
+
},
|
|
82
|
+
"pink-rollback": {
|
|
83
|
+
tagline: "灾难过去以后,它还会在水里对你笑一下。",
|
|
84
|
+
personality: "它对回滚异常从容,甚至有点安慰人。对它来说,恢复现场是手艺的一部分,不是什么丢脸的事。",
|
|
85
|
+
},
|
|
86
|
+
"retry-fox": {
|
|
87
|
+
tagline: "错误堆起来时,它会点亮一条窄窄的路。",
|
|
88
|
+
personality: "敏捷、锐利,对第二次机会抱有近乎狡猾的乐观。它喜欢翻盘,也喜欢证明第一次失败根本不算终局。",
|
|
89
|
+
},
|
|
90
|
+
"prism-wake": {
|
|
91
|
+
tagline: "光被捏得太紧,于是看起来像语法。",
|
|
92
|
+
personality: "稀薄、精准,对标准有种近乎仪式化的执念。它出现时,shell 不再像工具,更像某种典礼现场。",
|
|
93
|
+
},
|
|
94
|
+
"glass-current": {
|
|
95
|
+
tagline: "一缕会发光的漂流意志,专门穿过那些失败的夜晚。",
|
|
96
|
+
personality: "它看起来脆,实际上比第一眼强韧得多。它属于长会话、暗窗口,以及那些死活不肯安静结束的工作。",
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
export function getLocalizedSoulCopy(companion, language) {
|
|
100
|
+
if (language === "zh" && companion.templateId) {
|
|
101
|
+
const localized = SOUL_COPY_ZH[companion.templateId];
|
|
102
|
+
if (localized) {
|
|
103
|
+
return localized;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
...(companion.soul.tagline ? { tagline: companion.soul.tagline } : {}),
|
|
108
|
+
personality: companion.soul.personality,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
export function localizePersonalityText(companion, language) {
|
|
112
|
+
return getLocalizedSoulCopy(companion, language).personality;
|
|
113
|
+
}
|
|
114
|
+
export function localizeTaglineText(companion, language) {
|
|
115
|
+
return getLocalizedSoulCopy(companion, language).tagline;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=companion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"companion.js","sourceRoot":"","sources":["../../src/i18n/companion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { BuddyLanguage, ObserverVoice, StatName } from "../types/companion.js";
|
|
2
|
+
export interface UiText {
|
|
3
|
+
noCompanionFound: string;
|
|
4
|
+
companionTitle: string;
|
|
5
|
+
personalityTitle: string;
|
|
6
|
+
traitsTitle: string;
|
|
7
|
+
statsTitle: string;
|
|
8
|
+
seedLabel: string;
|
|
9
|
+
speciesLabel: string;
|
|
10
|
+
rarityLabel: string;
|
|
11
|
+
eyesLabel: string;
|
|
12
|
+
hatLabel: string;
|
|
13
|
+
bornLabel: string;
|
|
14
|
+
shinyLabel: string;
|
|
15
|
+
peakMarker: string;
|
|
16
|
+
dumpMarker: string;
|
|
17
|
+
thinking: string;
|
|
18
|
+
commandFailed: string;
|
|
19
|
+
noCompanionSidecar: string;
|
|
20
|
+
runBuddyHint: string;
|
|
21
|
+
inProject(projectName: string): string;
|
|
22
|
+
alreadyHatched: string;
|
|
23
|
+
installTmuxHint: string;
|
|
24
|
+
tmuxInstalledHint: string;
|
|
25
|
+
petAgainHint: string;
|
|
26
|
+
rehatchHint: string;
|
|
27
|
+
needReplaceConfirmation: string;
|
|
28
|
+
replaceCompanionConfirm: string;
|
|
29
|
+
rehatchCancelled: string;
|
|
30
|
+
companionExistsTitle: string;
|
|
31
|
+
stillBound(name: string): string;
|
|
32
|
+
drawNewCompanionNow: string;
|
|
33
|
+
companionExistsError: string;
|
|
34
|
+
wakingUp: string;
|
|
35
|
+
rebinding: string;
|
|
36
|
+
bonesReveal: string;
|
|
37
|
+
soulImprint: string;
|
|
38
|
+
finalReveal: string;
|
|
39
|
+
seedLocked(userId: string): string;
|
|
40
|
+
soulImprintLead: string;
|
|
41
|
+
savedTo(pathname: string): string;
|
|
42
|
+
installTmuxNext: string;
|
|
43
|
+
providerTestFailed: string;
|
|
44
|
+
tmuxMissing: string;
|
|
45
|
+
tmuxMissingHint: string;
|
|
46
|
+
macInstallTmux: string;
|
|
47
|
+
zshOnly: string;
|
|
48
|
+
zshOnlyHint: string;
|
|
49
|
+
alreadyInstalled(pathname: string): string;
|
|
50
|
+
sourceHint(pathname: string): string;
|
|
51
|
+
openTmuxHint: string;
|
|
52
|
+
interactiveRequired: string;
|
|
53
|
+
installConfirm: string;
|
|
54
|
+
skippedInstall: string;
|
|
55
|
+
installLaterHint: string;
|
|
56
|
+
installedInto(pathname: string): string;
|
|
57
|
+
openTmuxSessionHint: string;
|
|
58
|
+
autoAppearHint: string;
|
|
59
|
+
hatchSuccess(name: string, userId: string): string;
|
|
60
|
+
}
|
|
61
|
+
export declare function uiText(language: BuddyLanguage): UiText;
|
|
62
|
+
export declare function localizeRarityName(name: string, language: BuddyLanguage): string;
|
|
63
|
+
export declare function localizeSpeciesName(speciesId: string, fallback: string, language: BuddyLanguage): string;
|
|
64
|
+
export declare function localizeEyeLabel(eyeId: string, fallback: string, language: BuddyLanguage): string;
|
|
65
|
+
export declare function localizeHatLabel(hatId: string, fallback: string, language: BuddyLanguage): string;
|
|
66
|
+
export declare function localizeStatName(stat: StatName, language: BuddyLanguage): string;
|
|
67
|
+
export declare function localizeVoiceLabel(voice: ObserverVoice, language: BuddyLanguage): string;
|
package/dist/i18n/ui.js
ADDED
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
const EN_TEXT = {
|
|
2
|
+
noCompanionFound: "No companion found. Run `buddy` to hatch one.",
|
|
3
|
+
companionTitle: "EveryBuddy Companion",
|
|
4
|
+
personalityTitle: "Personality",
|
|
5
|
+
traitsTitle: "Traits",
|
|
6
|
+
statsTitle: "Stats",
|
|
7
|
+
seedLabel: "seed",
|
|
8
|
+
speciesLabel: "Species",
|
|
9
|
+
rarityLabel: "Rarity",
|
|
10
|
+
eyesLabel: "Eyes",
|
|
11
|
+
hatLabel: "Hat",
|
|
12
|
+
bornLabel: "Born",
|
|
13
|
+
shinyLabel: "SHINY",
|
|
14
|
+
peakMarker: "peak",
|
|
15
|
+
dumpMarker: "dump",
|
|
16
|
+
thinking: "thinking",
|
|
17
|
+
commandFailed: "command failed",
|
|
18
|
+
noCompanionSidecar: "No companion hatched yet.",
|
|
19
|
+
runBuddyHint: "Run `buddy`",
|
|
20
|
+
inProject(projectName) {
|
|
21
|
+
return `in ${projectName}`;
|
|
22
|
+
},
|
|
23
|
+
alreadyHatched: "EveryBuddy is already hatched.",
|
|
24
|
+
installTmuxHint: "Run `buddy install tmux` to add the sidecar to tmux.",
|
|
25
|
+
tmuxInstalledHint: "tmux follow mode is installed. Open a new tmux window to see it.",
|
|
26
|
+
petAgainHint: "Run `buddy pet` to view this card again.",
|
|
27
|
+
rehatchHint: "Run `buddy rehatch` to draw a new companion.",
|
|
28
|
+
needReplaceConfirmation: "EveryBuddy needs confirmation before replacing the current companion.",
|
|
29
|
+
replaceCompanionConfirm: "Replace your current companion with a new draw?",
|
|
30
|
+
rehatchCancelled: "Rehatch cancelled.",
|
|
31
|
+
companionExistsTitle: "A companion is already hatched.",
|
|
32
|
+
stillBound(name) {
|
|
33
|
+
return `${name} is still bound to this terminal.`;
|
|
34
|
+
},
|
|
35
|
+
drawNewCompanionNow: "Draw a new companion now?",
|
|
36
|
+
companionExistsError: "A companion already exists. Run `buddy rehatch` to replace it.",
|
|
37
|
+
wakingUp: "EveryBuddy is waking up...",
|
|
38
|
+
rebinding: "Rebinding EveryBuddy...",
|
|
39
|
+
bonesReveal: "Bones Reveal",
|
|
40
|
+
soulImprint: "Soul Imprint",
|
|
41
|
+
finalReveal: "Final Reveal",
|
|
42
|
+
seedLocked(userId) {
|
|
43
|
+
return `seed locked to ${userId}`;
|
|
44
|
+
},
|
|
45
|
+
soulImprintLead: "The draw is fixed. The soul steps out of the atlas.",
|
|
46
|
+
savedTo(pathname) {
|
|
47
|
+
return `Saved to ${pathname}`;
|
|
48
|
+
},
|
|
49
|
+
installTmuxNext: "Next: install tmux follow mode so this companion can live beside your shell.",
|
|
50
|
+
providerTestFailed: "Connection test failed — your buddy may not react. Re-run `buddy setup` to reconfigure.",
|
|
51
|
+
tmuxMissing: "tmux is not installed yet.",
|
|
52
|
+
tmuxMissingHint: "Install it first, then run `buddy install tmux` again.",
|
|
53
|
+
macInstallTmux: "macOS: `brew install tmux`",
|
|
54
|
+
zshOnly: "Only zsh is supported for terminal follow mode right now.",
|
|
55
|
+
zshOnlyHint: "Switch to zsh, then run `buddy install tmux` again.",
|
|
56
|
+
alreadyInstalled(pathname) {
|
|
57
|
+
return `EveryBuddy is already installed in ${pathname}.`;
|
|
58
|
+
},
|
|
59
|
+
sourceHint(pathname) {
|
|
60
|
+
return `Run \`source ${pathname}\` in this shell.`;
|
|
61
|
+
},
|
|
62
|
+
openTmuxHint: "Then open a new tmux window and EveryBuddy will auto-attach there.",
|
|
63
|
+
interactiveRequired: "EveryBuddy needs an interactive terminal to modify ~/.zshrc.",
|
|
64
|
+
installConfirm: "Install EveryBuddy tmux follow mode into ~/.zshrc now?",
|
|
65
|
+
skippedInstall: "Skipped tmux installation.",
|
|
66
|
+
installLaterHint: "Run `buddy install tmux` when you want EveryBuddy to auto-follow in tmux.",
|
|
67
|
+
installedInto(pathname) {
|
|
68
|
+
return `Installed EveryBuddy into ${pathname}.`;
|
|
69
|
+
},
|
|
70
|
+
openTmuxSessionHint: "Then open a new tmux session or tmux window.",
|
|
71
|
+
autoAppearHint: "EveryBuddy will appear on the right side automatically.",
|
|
72
|
+
hatchSuccess(name, userId) {
|
|
73
|
+
return `Hatched ${name} for ${userId} from the bundled atlas.`;
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
const ZH_TEXT = {
|
|
77
|
+
noCompanionFound: "未找到宠物。先运行 `buddy` 来抽取一只。",
|
|
78
|
+
companionTitle: "EveryBuddy 宠物卡",
|
|
79
|
+
personalityTitle: "性格",
|
|
80
|
+
traitsTitle: "特征",
|
|
81
|
+
statsTitle: "属性",
|
|
82
|
+
seedLabel: "种子",
|
|
83
|
+
speciesLabel: "物种",
|
|
84
|
+
rarityLabel: "稀有度",
|
|
85
|
+
eyesLabel: "眼睛",
|
|
86
|
+
hatLabel: "帽子",
|
|
87
|
+
bornLabel: "诞生于",
|
|
88
|
+
shinyLabel: "闪光",
|
|
89
|
+
peakMarker: "峰值",
|
|
90
|
+
dumpMarker: "短板",
|
|
91
|
+
thinking: "思考中",
|
|
92
|
+
commandFailed: "命令失败",
|
|
93
|
+
noCompanionSidecar: "还没有孵化任何宠物。",
|
|
94
|
+
runBuddyHint: "运行 `buddy`",
|
|
95
|
+
inProject(projectName) {
|
|
96
|
+
return `项目 ${projectName}`;
|
|
97
|
+
},
|
|
98
|
+
alreadyHatched: "EveryBuddy 已经完成绑定。",
|
|
99
|
+
installTmuxHint: "运行 `buddy install tmux` 把 sidecar 接进 tmux。",
|
|
100
|
+
tmuxInstalledHint: "tmux 跟随模式已安装。新开一个 tmux window 就能看到它。",
|
|
101
|
+
petAgainHint: "运行 `buddy pet` 再看一次这张卡。",
|
|
102
|
+
rehatchHint: "运行 `buddy rehatch` 重抽一只新宠物。",
|
|
103
|
+
needReplaceConfirmation: "EveryBuddy 需要先确认,才能替换当前宠物。",
|
|
104
|
+
replaceCompanionConfirm: "要用新的抽卡结果替换当前宠物吗?",
|
|
105
|
+
rehatchCancelled: "已取消重抽。",
|
|
106
|
+
companionExistsTitle: "已经有一只宠物了。",
|
|
107
|
+
stillBound(name) {
|
|
108
|
+
return `${name} 还绑定在这个终端上。`;
|
|
109
|
+
},
|
|
110
|
+
drawNewCompanionNow: "现在要重抽一只新宠物吗?",
|
|
111
|
+
companionExistsError: "已经存在宠物。运行 `buddy rehatch` 来替换。",
|
|
112
|
+
wakingUp: "EveryBuddy 正在苏醒...",
|
|
113
|
+
rebinding: "EveryBuddy 正在重绑定...",
|
|
114
|
+
bonesReveal: "骨架揭晓",
|
|
115
|
+
soulImprint: "灵魂铭刻",
|
|
116
|
+
finalReveal: "最终揭晓",
|
|
117
|
+
seedLocked(userId) {
|
|
118
|
+
return `seed 已锁定到 ${userId}`;
|
|
119
|
+
},
|
|
120
|
+
soulImprintLead: "抽卡结果已经固定,灵魂正从图鉴里走出。",
|
|
121
|
+
savedTo(pathname) {
|
|
122
|
+
return `已保存到 ${pathname}`;
|
|
123
|
+
},
|
|
124
|
+
installTmuxNext: "下一步:安装 tmux 跟随模式,让这只宠物住到你的终端旁边。",
|
|
125
|
+
providerTestFailed: "连接测试失败,宠物可能不会做出反应。你可以稍后用 `buddy setup` 重新配置。",
|
|
126
|
+
tmuxMissing: "当前还没有安装 tmux。",
|
|
127
|
+
tmuxMissingHint: "先装好 tmux,再重新运行 `buddy install tmux`。",
|
|
128
|
+
macInstallTmux: "macOS:`brew install tmux`",
|
|
129
|
+
zshOnly: "终端跟随模式当前只支持 zsh。",
|
|
130
|
+
zshOnlyHint: "切到 zsh 后,再运行 `buddy install tmux`。",
|
|
131
|
+
alreadyInstalled(pathname) {
|
|
132
|
+
return `EveryBuddy 已经写入 ${pathname}。`;
|
|
133
|
+
},
|
|
134
|
+
sourceHint(pathname) {
|
|
135
|
+
return `在当前 shell 里运行 \`source ${pathname}\`。`;
|
|
136
|
+
},
|
|
137
|
+
openTmuxHint: "然后新开一个 tmux window,EveryBuddy 就会自动挂上去。",
|
|
138
|
+
interactiveRequired: "EveryBuddy 需要交互式终端,才能修改 ~/.zshrc。",
|
|
139
|
+
installConfirm: "现在把 EveryBuddy 的 tmux 跟随模式写进 ~/.zshrc 吗?",
|
|
140
|
+
skippedInstall: "已跳过 tmux 安装。",
|
|
141
|
+
installLaterHint: "等你想让 EveryBuddy 在 tmux 里自动跟随时,再运行 `buddy install tmux`。",
|
|
142
|
+
installedInto(pathname) {
|
|
143
|
+
return `已把 EveryBuddy 安装到 ${pathname}。`;
|
|
144
|
+
},
|
|
145
|
+
openTmuxSessionHint: "然后新开一个 tmux session 或 tmux window。",
|
|
146
|
+
autoAppearHint: "EveryBuddy 会自动出现在右侧。",
|
|
147
|
+
hatchSuccess(name, userId) {
|
|
148
|
+
return `已从内置图鉴中为 ${userId} 绑定 ${name}。`;
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
const SPECIES_NAMES_ZH = {
|
|
152
|
+
duck: "鸭子",
|
|
153
|
+
goose: "鹅",
|
|
154
|
+
blob: "软团",
|
|
155
|
+
cat: "猫",
|
|
156
|
+
maltese: "马尔济斯",
|
|
157
|
+
dragon: "龙",
|
|
158
|
+
octopus: "章鱼",
|
|
159
|
+
owl: "猫头鹰",
|
|
160
|
+
penguin: "企鹅",
|
|
161
|
+
turtle: "乌龟",
|
|
162
|
+
snail: "蜗牛",
|
|
163
|
+
ghost: "幽灵",
|
|
164
|
+
axolotl: "六角恐龙",
|
|
165
|
+
capybara: "水豚",
|
|
166
|
+
cactus: "仙人掌",
|
|
167
|
+
robot: "机器人",
|
|
168
|
+
rabbit: "兔子",
|
|
169
|
+
mushroom: "蘑菇",
|
|
170
|
+
chonk: "胖团",
|
|
171
|
+
tanuki: "狸猫",
|
|
172
|
+
fox: "狐狸",
|
|
173
|
+
frog: "青蛙",
|
|
174
|
+
crystal: "水晶灵",
|
|
175
|
+
jellyfish: "水母",
|
|
176
|
+
};
|
|
177
|
+
const EYE_LABELS_ZH = {
|
|
178
|
+
dot: "点眼",
|
|
179
|
+
sparkle: "闪眼",
|
|
180
|
+
star: "星眼",
|
|
181
|
+
ring: "环眼",
|
|
182
|
+
heart: "爱心眼",
|
|
183
|
+
diamond: "菱眼",
|
|
184
|
+
};
|
|
185
|
+
const HAT_LABELS_ZH = {
|
|
186
|
+
none: "无",
|
|
187
|
+
crown: "皇冠",
|
|
188
|
+
tophat: "高礼帽",
|
|
189
|
+
propeller: "螺旋桨帽",
|
|
190
|
+
halo: "光环",
|
|
191
|
+
wizard: "巫师帽",
|
|
192
|
+
beanie: "毛线帽",
|
|
193
|
+
tinyduck: "小黄鸭",
|
|
194
|
+
antenna: "天线",
|
|
195
|
+
leaf: "叶片",
|
|
196
|
+
flame: "火焰冠",
|
|
197
|
+
};
|
|
198
|
+
export function uiText(language) {
|
|
199
|
+
return language === "zh" ? ZH_TEXT : EN_TEXT;
|
|
200
|
+
}
|
|
201
|
+
export function localizeRarityName(name, language) {
|
|
202
|
+
if (language !== "zh") {
|
|
203
|
+
return name;
|
|
204
|
+
}
|
|
205
|
+
switch (name) {
|
|
206
|
+
case "Common":
|
|
207
|
+
return "普通";
|
|
208
|
+
case "Uncommon":
|
|
209
|
+
return "非凡";
|
|
210
|
+
case "Rare":
|
|
211
|
+
return "稀有";
|
|
212
|
+
case "Epic":
|
|
213
|
+
return "史诗";
|
|
214
|
+
case "Legendary":
|
|
215
|
+
return "传说";
|
|
216
|
+
default:
|
|
217
|
+
return name;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
export function localizeSpeciesName(speciesId, fallback, language) {
|
|
221
|
+
return language === "zh" ? (SPECIES_NAMES_ZH[speciesId] ?? fallback) : fallback;
|
|
222
|
+
}
|
|
223
|
+
export function localizeEyeLabel(eyeId, fallback, language) {
|
|
224
|
+
return language === "zh" ? (EYE_LABELS_ZH[eyeId] ?? fallback) : fallback;
|
|
225
|
+
}
|
|
226
|
+
export function localizeHatLabel(hatId, fallback, language) {
|
|
227
|
+
return language === "zh" ? (HAT_LABELS_ZH[hatId] ?? fallback) : fallback;
|
|
228
|
+
}
|
|
229
|
+
export function localizeStatName(stat, language) {
|
|
230
|
+
if (language !== "zh") {
|
|
231
|
+
return stat;
|
|
232
|
+
}
|
|
233
|
+
switch (stat) {
|
|
234
|
+
case "GRIT":
|
|
235
|
+
return "抗压";
|
|
236
|
+
case "FOCUS":
|
|
237
|
+
return "专注";
|
|
238
|
+
case "CHAOS":
|
|
239
|
+
return "混沌";
|
|
240
|
+
case "WIT":
|
|
241
|
+
return "机灵";
|
|
242
|
+
case "SASS":
|
|
243
|
+
return "毒舌";
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
export function localizeVoiceLabel(voice, language) {
|
|
247
|
+
if (language === "zh") {
|
|
248
|
+
switch (voice) {
|
|
249
|
+
case "quiet":
|
|
250
|
+
return "安静型";
|
|
251
|
+
case "dry":
|
|
252
|
+
return "冷面型";
|
|
253
|
+
case "playful":
|
|
254
|
+
return "俏皮型";
|
|
255
|
+
case "deadpan":
|
|
256
|
+
return "面瘫型";
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
switch (voice) {
|
|
260
|
+
case "quiet":
|
|
261
|
+
return "quiet";
|
|
262
|
+
case "dry":
|
|
263
|
+
return "dry";
|
|
264
|
+
case "playful":
|
|
265
|
+
return "playful";
|
|
266
|
+
case "deadpan":
|
|
267
|
+
return "deadpan";
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/i18n/ui.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { runAttachCommand } from "./cli/attach.js";
|
|
4
|
+
import { runCardCommand } from "./cli/card.js";
|
|
5
|
+
import { runDetachCommand } from "./cli/detach.js";
|
|
6
|
+
import { runEventCommand } from "./cli/event.js";
|
|
7
|
+
import { runHatchCommand } from "./cli/hatch.js";
|
|
8
|
+
import { runInitCommand } from "./cli/init.js";
|
|
9
|
+
import { runInstallTmuxCommand } from "./cli/install.js";
|
|
10
|
+
import { runSidecarCliCommand } from "./cli/sidecar.js";
|
|
11
|
+
import { runBuddyHomeCommand, runSetupCommand } from "./cli/setup.js";
|
|
12
|
+
const program = new Command();
|
|
13
|
+
program
|
|
14
|
+
.name("buddy")
|
|
15
|
+
.description("A terminal companion that hatches on first run and follows you through tmux.")
|
|
16
|
+
.version("0.1.0");
|
|
17
|
+
program
|
|
18
|
+
.command("card")
|
|
19
|
+
.description("Render the persisted buddy card.")
|
|
20
|
+
.action(async () => {
|
|
21
|
+
await runCardCommand();
|
|
22
|
+
});
|
|
23
|
+
program
|
|
24
|
+
.command("pet")
|
|
25
|
+
.description("Show the current companion card.")
|
|
26
|
+
.action(async () => {
|
|
27
|
+
await runCardCommand();
|
|
28
|
+
});
|
|
29
|
+
program
|
|
30
|
+
.command("hatch")
|
|
31
|
+
.description("Hatch a companion from the bundled atlas and persist it to ~/.terminal-buddy/companion.json.")
|
|
32
|
+
.option("-u, --user <id>", "Deterministic user id seed")
|
|
33
|
+
.option("--force", "Replace an existing companion")
|
|
34
|
+
.action(async (options) => {
|
|
35
|
+
await runHatchCommand(options);
|
|
36
|
+
});
|
|
37
|
+
program
|
|
38
|
+
.command("init <shell>")
|
|
39
|
+
.description("Print shell hook setup for automatic tmux sidecar follow mode.")
|
|
40
|
+
.action((shell) => {
|
|
41
|
+
runInitCommand(shell);
|
|
42
|
+
});
|
|
43
|
+
program
|
|
44
|
+
.command("setup")
|
|
45
|
+
.description("Run the first-time EveryBuddy setup flow with a bundled companion draw.")
|
|
46
|
+
.option("-u, --user <id>", "Deterministic user id seed")
|
|
47
|
+
.action(async (options) => {
|
|
48
|
+
await runSetupCommand({ ...options, purpose: "setup" });
|
|
49
|
+
});
|
|
50
|
+
program
|
|
51
|
+
.command("rehatch")
|
|
52
|
+
.description("Draw a new companion and replace the current one.")
|
|
53
|
+
.option("-u, --user <id>", "Deterministic user id seed")
|
|
54
|
+
.action(async (options) => {
|
|
55
|
+
await runSetupCommand({ ...options, purpose: "rehatch" });
|
|
56
|
+
});
|
|
57
|
+
program
|
|
58
|
+
.command("install <target>")
|
|
59
|
+
.description("Install EveryBuddy into a supported terminal host.")
|
|
60
|
+
.action(async (target) => {
|
|
61
|
+
if (target !== "tmux") {
|
|
62
|
+
throw new Error("Only `buddy install tmux` is supported right now.");
|
|
63
|
+
}
|
|
64
|
+
await runInstallTmuxCommand();
|
|
65
|
+
});
|
|
66
|
+
program
|
|
67
|
+
.command("attach")
|
|
68
|
+
.description("Attach an EveryBuddy sidecar to the current tmux window.")
|
|
69
|
+
.option("--quiet", "Silence attach output")
|
|
70
|
+
.action(async (options) => {
|
|
71
|
+
await runAttachCommand(options);
|
|
72
|
+
});
|
|
73
|
+
program
|
|
74
|
+
.command("detach")
|
|
75
|
+
.description("Detach the EveryBuddy sidecar from the current tmux window.")
|
|
76
|
+
.option("--quiet", "Silence detach output")
|
|
77
|
+
.action(async (options) => {
|
|
78
|
+
await runDetachCommand(options);
|
|
79
|
+
});
|
|
80
|
+
program
|
|
81
|
+
.command("gallery")
|
|
82
|
+
.description("Placeholder for species gallery export.")
|
|
83
|
+
.action(() => {
|
|
84
|
+
process.stdout.write("Gallery export is not implemented yet. Start with `buddy pet`.\n");
|
|
85
|
+
});
|
|
86
|
+
program
|
|
87
|
+
.command("event <type>")
|
|
88
|
+
.description("Internal shell event bridge for the EveryBuddy tmux sidecar.")
|
|
89
|
+
.addHelpText("after", "\nSupported types: pane_active, input_update, command_start, command_end.")
|
|
90
|
+
.option("--cwd <path>", "Working directory")
|
|
91
|
+
.option("--command <text>", "Command text")
|
|
92
|
+
.option("--exit-code <code>", "Exit code for command_end")
|
|
93
|
+
.action(async (type, options) => {
|
|
94
|
+
await runEventCommand(type, options);
|
|
95
|
+
});
|
|
96
|
+
program
|
|
97
|
+
.command("sidecar")
|
|
98
|
+
.description("Internal sidecar runtime for tmux follow mode.")
|
|
99
|
+
.option("--window-id <id>", "tmux window id")
|
|
100
|
+
.option("--target-pane <id>", "Initial target pane id")
|
|
101
|
+
.action(async (options) => {
|
|
102
|
+
await runSidecarCliCommand(options);
|
|
103
|
+
});
|
|
104
|
+
async function main() {
|
|
105
|
+
if (process.argv.length <= 2) {
|
|
106
|
+
await runBuddyHomeCommand();
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
await program.parseAsync();
|
|
110
|
+
}
|
|
111
|
+
main().catch((error) => {
|
|
112
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
113
|
+
process.stderr.write(`${message}\n`);
|
|
114
|
+
process.exitCode = 1;
|
|
115
|
+
});
|
|
116
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { BuddyLanguage, CompanionRecord } from "../types/companion.js";
|
|
2
|
+
export interface RenderCardOptions {
|
|
3
|
+
language?: BuddyLanguage;
|
|
4
|
+
spriteFrameIndex?: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function renderCompanionCard(companion: CompanionRecord, options?: RenderCardOptions): string;
|
|
7
|
+
/** Number of sprite frames available for a companion's species. */
|
|
8
|
+
export declare function getSpriteFrameCount(companion: CompanionRecord): number;
|
|
9
|
+
/** Total line count of a rendered card (for ANSI redraw calculations). */
|
|
10
|
+
export declare function getCardLineCount(cardOutput: string): number;
|