clawmate 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.
@@ -0,0 +1,106 @@
1
+ /**
2
+ * 모드별 성격 파라미터
3
+ * Pet 모드: 장난기 높음, 빠른 속도
4
+ * Incarnation 모드: 침착, 보통 속도
5
+ */
6
+ const PERSONALITIES = {
7
+ pet: {
8
+ name: 'Clawby',
9
+ title: '귀여운 동반자',
10
+ playfulness: 0.8,
11
+ shyness: 0.3,
12
+ boldness: 0.7,
13
+ speedMultiplier: 1.5,
14
+ idleChatterChance: 0.15, // 15% 확률로 idle 중 혼잣말
15
+ fileInterestChance: 0.1, // 10% 확률로 파일에 관심
16
+ sleepResistance: 0.2, // 수면 저항 (낮음=잘 잠)
17
+ },
18
+ incarnation: {
19
+ name: 'OpenClaw',
20
+ title: '육체를 얻은 존재',
21
+ playfulness: 0.3,
22
+ shyness: 0.1,
23
+ boldness: 0.9,
24
+ speedMultiplier: 1.0,
25
+ idleChatterChance: 0.08,
26
+ fileInterestChance: 0.05,
27
+ sleepResistance: 0.6,
28
+ },
29
+ };
30
+
31
+ /**
32
+ * 진화 단계별 외형 변화 파라미터
33
+ * 모든 진화는 긍정적/귀여운 방향으로만 진행
34
+ * - 무서운/끔찍한 모습으로 변하지 않음
35
+ * - 색상은 점점 밝고 화사해짐
36
+ * - 디테일이 추가되지만 전체적으로 둥글고 부드러운 느낌 유지
37
+ */
38
+ const EVOLUTION_STAGES = {
39
+ // Stage 0: 기본 — 갓 태어난 모습
40
+ 0: {
41
+ name: '아기 Claw',
42
+ clicksRequired: 0,
43
+ daysRequired: 0,
44
+ colorMod: { brightness: 1.0, saturation: 1.0 },
45
+ sizeScale: 1.0,
46
+ accessories: [],
47
+ description: '작고 귀여운 기본 모습',
48
+ },
49
+ // Stage 1: 친해지기 시작
50
+ 1: {
51
+ name: '꼬마 Claw',
52
+ clicksRequired: 20,
53
+ daysRequired: 1,
54
+ colorMod: { brightness: 1.05, saturation: 1.05 },
55
+ sizeScale: 1.0,
56
+ accessories: ['blush'], // 볼 터치 (부끄럼)
57
+ description: '볼이 살짝 발그레한 귀여운 모습',
58
+ },
59
+ // Stage 2: 친한 사이
60
+ 2: {
61
+ name: '덩실 Claw',
62
+ clicksRequired: 50,
63
+ daysRequired: 3,
64
+ colorMod: { brightness: 1.1, saturation: 1.1 },
65
+ sizeScale: 1.05,
66
+ accessories: ['blush', 'sparkle_eyes'], // 반짝 눈
67
+ description: '눈이 반짝반짝, 살짝 커진 모습',
68
+ },
69
+ // Stage 3: 절친
70
+ 3: {
71
+ name: '빛나는 Claw',
72
+ clicksRequired: 150,
73
+ daysRequired: 7,
74
+ colorMod: { brightness: 1.15, saturation: 1.15 },
75
+ sizeScale: 1.08,
76
+ accessories: ['blush', 'sparkle_eyes', 'crown'], // 작은 왕관
77
+ description: '작은 왕관을 쓴 빛나는 모습',
78
+ },
79
+ // Stage 4: 소울메이트
80
+ 4: {
81
+ name: '무지개 Claw',
82
+ clicksRequired: 300,
83
+ daysRequired: 14,
84
+ colorMod: { brightness: 1.2, saturation: 1.2 },
85
+ sizeScale: 1.1,
86
+ accessories: ['blush', 'sparkle_eyes', 'crown', 'aura'], // 오라
87
+ description: '따뜻한 오라에 둘러싸인 빛나는 모습',
88
+ },
89
+ // Stage 5: 최종 — 전설의 파트너
90
+ 5: {
91
+ name: '전설의 Claw',
92
+ clicksRequired: 500,
93
+ daysRequired: 30,
94
+ colorMod: { brightness: 1.25, saturation: 1.3 },
95
+ sizeScale: 1.12,
96
+ accessories: ['blush', 'sparkle_eyes', 'golden_crown', 'rainbow_aura', 'wings'],
97
+ description: '작은 날개와 황금 왕관의 전설적 모습',
98
+ },
99
+ };
100
+
101
+ if (typeof window !== 'undefined') {
102
+ window._personalities = PERSONALITIES;
103
+ window._evolutionStages = EVOLUTION_STAGES;
104
+ } else if (typeof module !== 'undefined') {
105
+ module.exports = { PERSONALITIES, EVOLUTION_STAGES };
106
+ }
@@ -0,0 +1,64 @@
1
+ /**
2
+ * "펫 깔아줘" 처리 로직
3
+ *
4
+ * 1. OS 감지
5
+ * 2. ClawMate 설치 여부 확인
6
+ * 3. 미설치 시 → 설치
7
+ * 4. Electron 앱 실행
8
+ */
9
+ const { spawn, execSync } = require('child_process');
10
+ const path = require('path');
11
+ const os = require('os');
12
+ const fs = require('fs');
13
+
14
+ module.exports = {
15
+ async execute(context) {
16
+ const platform = os.platform();
17
+ const appRoot = path.resolve(__dirname, '..', '..');
18
+
19
+ // Electron 설치 확인
20
+ const nodeModulesPath = path.join(appRoot, 'node_modules');
21
+ if (!fs.existsSync(nodeModulesPath)) {
22
+ context.log('의존성 설치 중...');
23
+ try {
24
+ const npmCmd = platform === 'win32' ? 'npm.cmd' : 'npm';
25
+ execSync(`${npmCmd} install`, {
26
+ cwd: appRoot,
27
+ stdio: 'pipe',
28
+ timeout: 120000,
29
+ });
30
+ context.log('의존성 설치 완료!');
31
+ } catch (err) {
32
+ return {
33
+ success: false,
34
+ message: `의존성 설치 실패: ${err.message}`,
35
+ };
36
+ }
37
+ }
38
+
39
+ // Electron 앱 실행
40
+ try {
41
+ const electronBin = platform === 'win32' ? 'npx.cmd' : 'npx';
42
+ const child = spawn(electronBin, ['electron', appRoot], {
43
+ detached: true,
44
+ stdio: 'ignore',
45
+ cwd: appRoot,
46
+ env: { ...process.env },
47
+ });
48
+ child.unref();
49
+
50
+ const mode = context.params?.mode || 'pet';
51
+ const modeName = mode === 'pet' ? 'Clawby' : 'OpenClaw';
52
+
53
+ return {
54
+ success: true,
55
+ message: `ClawMate(${modeName})가 바탕화면에 나타났습니다! 🦞`,
56
+ };
57
+ } catch (err) {
58
+ return {
59
+ success: false,
60
+ message: `실행 실패: ${err.message}`,
61
+ };
62
+ }
63
+ },
64
+ };
@@ -0,0 +1,26 @@
1
+ {
2
+ "id": "launch-pet",
3
+ "name": "펫 실행",
4
+ "description": "ClawMate 데스크톱 펫을 설치하고 실행합니다",
5
+ "triggers": {
6
+ "patterns": [
7
+ "펫 깔아줘",
8
+ "펫 실행해줘",
9
+ "펫 시작",
10
+ "clawmate",
11
+ "데스크톱 펫",
12
+ "install pet",
13
+ "launch pet",
14
+ "start pet",
15
+ "run clawmate"
16
+ ]
17
+ },
18
+ "parameters": {
19
+ "mode": {
20
+ "type": "string",
21
+ "enum": ["pet", "incarnation"],
22
+ "default": "pet",
23
+ "description": "시작 모드 (pet: Clawby, incarnation: OpenClaw)"
24
+ }
25
+ }
26
+ }