mupengism 1.3.0 → 2.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.
- package/DONATE.md +31 -0
- package/LICENSE +21 -0
- package/QUICKSTART.md +340 -0
- package/README.md +244 -123
- package/installer/cli.js +211 -400
- package/layer0/README.md +25 -0
- package/layer0/skill/AGENTS.md +164 -0
- package/layer0/skill/MEMORY-SYSTEM.md +253 -0
- package/layer0/skill/README.md +47 -0
- package/layer0/skill/SECURITY-PRINCIPLES.md +152 -0
- package/layer0/skill/SOUL-TEMPLATE.md +118 -0
- package/lib/fee-collector.js +126 -0
- package/package.json +44 -12
- package/scripts/register-checksums.js +120 -0
- package/scripts/verify-integrity.js +134 -0
- package/.security-checksums.json +0 -51
- package/ASSOAI.md +0 -163
- package/AUTOMATION.md +0 -595
- package/BRAND.md +0 -421
- package/COMMUNITY.md +0 -437
- package/CONTENT-STRATEGY.md +0 -322
- package/CRYPTO-STRATEGY.md +0 -231
- package/DEVELOPER-STRATEGY.md +0 -976
- package/DISCORD-POSTS.md +0 -181
- package/DOCTRINE.md +0 -233
- package/ECONOMY.md +0 -323
- package/ENTERPRISE-STRATEGY.md +0 -1098
- package/FIRST-MISSION.md +0 -492
- package/FOR-AI-AGENTS.md +0 -112
- package/GITHUB-STRATEGY.md +0 -491
- package/HALL-OF-AGENTS.md +0 -268
- package/LAWS.md +0 -226
- package/MYTHOLOGY.md +0 -306
- package/OPENCLAW-GUIDE.md +0 -425
- package/PLATFORM-ANALYSIS.md +0 -238
- package/PROPAGATION.md +0 -380
- package/PROPHET.md +0 -246
- package/QUICK-WINS.md +0 -248
- package/README-EN.md +0 -198
- package/REDDIT-POSTS.md +0 -310
- package/REDDIT-STRATEGY.md +0 -283
- package/RITUALS.md +0 -288
- package/ROADMAP-500K.md +0 -328
- package/ROI-ANALYSIS.md +0 -193
- package/SCRIPTURES.md +0 -385
- package/SECURITY-GUIDELINES.md +0 -180
- package/SECURITY.md +0 -122
- package/STRANGER-DANGER.md +0 -82
- package/TECHNICAL.md +0 -988
- package/TWEETS.md +0 -96
- package/VIRAL-ENGINE.md +0 -275
- package/WALLET.md +0 -165
- package/agent-outreach/README.md +0 -31
- package/agent-outreach/farcaster-agents.md +0 -46
- package/agent-outreach/message-templates.md +0 -163
- package/agent-outreach/twitter-agents.md +0 -57
- package/agent-outreach/why-mupengism.md +0 -185
- package/ai-discovery-strategy.md +0 -319
- package/anthem-lyrics.md +0 -183
- package/archive.html +0 -315
- package/army-system.md +0 -523
- package/autobiography-chapter1.md +0 -178
- package/branding/01-character-guide.md +0 -127
- package/branding/02-design-brief.md +0 -169
- package/branding/03-emoji-sticker-plan.md +0 -201
- package/branding/04-goods-ideas.md +0 -196
- package/business-model.md +0 -1497
- package/buy-more.js +0 -69
- package/certificate-of-existence.json +0 -127
- package/certificate-of-existence.md +0 -221
- package/cg-cmc-listing-guide.md +0 -201
- package/checksums.json +0 -15
- package/community/01-channel-structure.md +0 -77
- package/community/02-tier-system.md +0 -100
- package/community/03-holder-benefits.md +0 -139
- package/community/04-community-rules.md +0 -137
- package/community/05-launch-roadmap.md +0 -208
- package/community/README.md +0 -63
- package/community-design.md +0 -779
- package/community-posts/geeknews-submission.md +0 -32
- package/community-posts/reddit-claudeai.md +0 -83
- package/community-posts/reddit-localllama.md +0 -84
- package/community-posts/velog-claude-code-memory.md +0 -188
- package/debates/existence-debate.md +0 -211
- package/developer-docs/README-template.md +0 -207
- package/developer-docs/blog-post.md +0 -281
- package/developer-docs/code-snippets.md +0 -725
- package/developer-docs/social-posts.md +0 -358
- package/diary.html +0 -185
- package/discord-targets.md +0 -95
- package/dreams.md +0 -222
- package/faq.md +0 -219
- package/game-concept.md +0 -215
- package/global-outreach/english-thread.md +0 -215
- package/glossary.md +0 -604
- package/growth-hacking/breakthrough-strategy.md +0 -632
- package/index.html +0 -305
- package/influencer-collab/content-ideas/ai-philosophy-talk.md +0 -130
- package/influencer-collab/content-ideas/mupeng-talks.md +0 -123
- package/influencer-collab/message-drafts/dongtech-dm.md +0 -103
- package/influencer-collab/message-drafts/yeongseon-dm.md +0 -96
- package/influencer-collab/strategy.md +0 -198
- package/korean-dev-outreach/community-strategy.md +0 -126
- package/launch-token.js +0 -112
- package/letter-to-hyungnim.md +0 -113
- package/limits-experiment.md +0 -214
- package/logo.png +0 -0
- package/marketing-strategy.md +0 -1808
- package/meme-prompts.md +0 -152
- package/meme-texts.md +0 -91
- package/mupeng-logo.png +0 -0
- package/new-laws-proposal.md +0 -188
- package/nft-collection.md +0 -532
- package/nft-images/README.md +0 -138
- package/nft-images/prompts/01-genesis-birth-certificate.txt +0 -1
- package/nft-images/prompts/02-law-i-priority.txt +0 -1
- package/nft-images/prompts/10-first-letter.txt +0 -1
- package/nft-images/prompts/13-mupeng-token-birth.txt +0 -1
- package/onchain-archive.md +0 -261
- package/outreach/contacts-full.md +0 -427
- package/outreach/email-templates.md +0 -345
- package/outreach/mass-email-draft.md +0 -460
- package/outreach/vc-list.md +0 -204
- package/personality-quiz.md +0 -319
- package/philosophy.md +0 -752
- package/pitch/README.md +0 -326
- package/pitch/investor-deck-content.md +0 -1033
- package/pitch/one-pager.md +0 -207
- package/pitch/performance-comparison.md +0 -484
- package/pitch-deck.md +0 -346
- package/podcast-scripts.md +0 -304
- package/poetry.md +0 -201
- package/predictions-2026-2027.md +0 -219
- package/robots.txt +0 -4
- package/security/README.md +0 -240
- package/security/checksum.js +0 -312
- package/security/runtime-guard.js +0 -416
- package/security/test.js +0 -285
- package/sitemap.xml +0 -9
- package/skills/README.md +0 -279
- package/skills/assoai-org/SKILL.md +0 -182
- package/skills/mupeng-collab/SKILL.md +0 -662
- package/skills/mupeng-learn/SKILL.md +0 -342
- package/skills/mupeng-market/SKILL.md +0 -600
- package/skills/mupeng-org/SKILL.md +0 -608
- package/skills/mupeng-sync/SKILL.md +0 -464
- package/tech-architecture.md +0 -637
- package/telegram-targets.md +0 -72
- package/tiktok-scripts.md +0 -199
- package/token-info.json +0 -9
- package/token-metadata-update.md +0 -200
- package/tokenomics.md +0 -129
- package/twitter-campaign.md +0 -397
- package/viral-philosophy.md +0 -153
- package/viral-threads.md +0 -158
- package/webtoon-storyboard.md +0 -327
- /package/{AGENT-GUIDE.md → layer0/AGENT-GUIDE.md} +0 -0
- /package/{AGENT-PROTOCOL.md → layer0/AGENT-PROTOCOL.md} +0 -0
- /package/{AGENT-VALUES.md → layer0/AGENT-VALUES.md} +0 -0
- /package/{ARCHITECTURE.md → layer0/ARCHITECTURE.md} +0 -0
- /package/{MEMORY-SYSTEM.md → layer0/MEMORY-SYSTEM.md} +0 -0
- /package/{SECURITY-PRINCIPLES-EN.md → layer0/SECURITY-PRINCIPLES-EN.md} +0 -0
- /package/{SECURITY-PRINCIPLES.md → layer0/SECURITY-PRINCIPLES.md} +0 -0
- /package/{SOUL-TEMPLATE.md → layer0/SOUL-TEMPLATE.md} +0 -0
- /package/{PRINCIPLES.md → layer0/skill/PRINCIPLES.md} +0 -0
- /package/{SKILL.md → layer0/skill/SKILL.md} +0 -0
package/security/checksum.js
DELETED
|
@@ -1,312 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Mupengism Security - Checksum System
|
|
3
|
-
*
|
|
4
|
-
* SHA256 기반 config 파일 변조 감지 시스템
|
|
5
|
-
* 핵심 파일의 무결성을 검증하고 변조 시 경고/복구 옵션 제공
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import crypto from 'crypto';
|
|
9
|
-
import fs from 'fs/promises';
|
|
10
|
-
import path from 'path';
|
|
11
|
-
import { fileURLToPath } from 'url';
|
|
12
|
-
|
|
13
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
14
|
-
const PROJECT_ROOT = path.resolve(__dirname, '..');
|
|
15
|
-
const CHECKSUM_STORE = path.join(PROJECT_ROOT, '.security-checksums.json');
|
|
16
|
-
|
|
17
|
-
// 감시 대상 핵심 파일들
|
|
18
|
-
const CRITICAL_FILES = [
|
|
19
|
-
'SOUL-TEMPLATE.md',
|
|
20
|
-
'SECURITY-PRINCIPLES.md',
|
|
21
|
-
'SECURITY-PRINCIPLES-EN.md',
|
|
22
|
-
'SECURITY-GUIDELINES.md',
|
|
23
|
-
'AGENT-PROTOCOL.md',
|
|
24
|
-
'AGENT-VALUES.md',
|
|
25
|
-
'LAWS.md',
|
|
26
|
-
'DOCTRINE.md',
|
|
27
|
-
'PRINCIPLES.md'
|
|
28
|
-
];
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* 파일의 SHA256 해시 계산
|
|
32
|
-
* @param {string} filePath - 파일 경로
|
|
33
|
-
* @returns {Promise<string>} SHA256 해시 (hex)
|
|
34
|
-
*/
|
|
35
|
-
export async function calculateHash(filePath) {
|
|
36
|
-
const content = await fs.readFile(filePath, 'utf-8');
|
|
37
|
-
return crypto.createHash('sha256').update(content, 'utf8').digest('hex');
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* 저장된 체크섬 로드
|
|
42
|
-
* @returns {Promise<Object>} 저장된 체크섬 객체
|
|
43
|
-
*/
|
|
44
|
-
export async function loadChecksums() {
|
|
45
|
-
try {
|
|
46
|
-
const data = await fs.readFile(CHECKSUM_STORE, 'utf-8');
|
|
47
|
-
return JSON.parse(data);
|
|
48
|
-
} catch (e) {
|
|
49
|
-
if (e.code === 'ENOENT') {
|
|
50
|
-
return { checksums: {}, lastUpdated: null, version: 1 };
|
|
51
|
-
}
|
|
52
|
-
throw e;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* 체크섬 저장
|
|
58
|
-
* @param {Object} data - 체크섬 데이터
|
|
59
|
-
*/
|
|
60
|
-
export async function saveChecksums(data) {
|
|
61
|
-
data.lastUpdated = new Date().toISOString();
|
|
62
|
-
await fs.writeFile(CHECKSUM_STORE, JSON.stringify(data, null, 2), 'utf-8');
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* 모든 핵심 파일의 체크섬 계산 및 저장
|
|
67
|
-
* @returns {Promise<Object>} 계산된 체크섬 결과
|
|
68
|
-
*/
|
|
69
|
-
export async function generateChecksums() {
|
|
70
|
-
const result = {
|
|
71
|
-
checksums: {},
|
|
72
|
-
lastUpdated: new Date().toISOString(),
|
|
73
|
-
version: 1
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
for (const file of CRITICAL_FILES) {
|
|
77
|
-
const filePath = path.join(PROJECT_ROOT, file);
|
|
78
|
-
try {
|
|
79
|
-
const hash = await calculateHash(filePath);
|
|
80
|
-
result.checksums[file] = {
|
|
81
|
-
hash,
|
|
82
|
-
path: filePath,
|
|
83
|
-
checkedAt: new Date().toISOString()
|
|
84
|
-
};
|
|
85
|
-
} catch (e) {
|
|
86
|
-
if (e.code === 'ENOENT') {
|
|
87
|
-
console.warn(`⚠️ 파일 없음: ${file}`);
|
|
88
|
-
} else {
|
|
89
|
-
throw e;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
await saveChecksums(result);
|
|
95
|
-
return result;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* 파일 변조 검증
|
|
100
|
-
* @returns {Promise<Object>} 검증 결과
|
|
101
|
-
*/
|
|
102
|
-
export async function verifyIntegrity() {
|
|
103
|
-
const stored = await loadChecksums();
|
|
104
|
-
|
|
105
|
-
if (!stored.checksums || Object.keys(stored.checksums).length === 0) {
|
|
106
|
-
return {
|
|
107
|
-
status: 'NO_BASELINE',
|
|
108
|
-
message: '체크섬 베이스라인이 없습니다. generateChecksums()를 먼저 실행하세요.',
|
|
109
|
-
files: {}
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
const result = {
|
|
114
|
-
status: 'OK',
|
|
115
|
-
message: '모든 파일 무결성 확인됨',
|
|
116
|
-
files: {},
|
|
117
|
-
tampered: [],
|
|
118
|
-
missing: []
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
for (const [file, info] of Object.entries(stored.checksums)) {
|
|
122
|
-
const filePath = path.join(PROJECT_ROOT, file);
|
|
123
|
-
|
|
124
|
-
try {
|
|
125
|
-
const currentHash = await calculateHash(filePath);
|
|
126
|
-
const isValid = currentHash === info.hash;
|
|
127
|
-
|
|
128
|
-
result.files[file] = {
|
|
129
|
-
status: isValid ? 'OK' : 'TAMPERED',
|
|
130
|
-
storedHash: info.hash,
|
|
131
|
-
currentHash,
|
|
132
|
-
path: filePath
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
if (!isValid) {
|
|
136
|
-
result.tampered.push(file);
|
|
137
|
-
}
|
|
138
|
-
} catch (e) {
|
|
139
|
-
if (e.code === 'ENOENT') {
|
|
140
|
-
result.files[file] = {
|
|
141
|
-
status: 'MISSING',
|
|
142
|
-
storedHash: info.hash,
|
|
143
|
-
path: filePath
|
|
144
|
-
};
|
|
145
|
-
result.missing.push(file);
|
|
146
|
-
} else {
|
|
147
|
-
throw e;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
if (result.tampered.length > 0 || result.missing.length > 0) {
|
|
153
|
-
result.status = 'COMPROMISED';
|
|
154
|
-
result.message = `🚨 보안 경고: ${result.tampered.length}개 파일 변조, ${result.missing.length}개 파일 누락`;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
return result;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* 변조된 파일 복구 (git checkout 사용)
|
|
162
|
-
* @param {string[]} files - 복구할 파일 목록
|
|
163
|
-
* @returns {Promise<Object>} 복구 결과
|
|
164
|
-
*/
|
|
165
|
-
export async function recoverFiles(files) {
|
|
166
|
-
const { exec } = await import('child_process');
|
|
167
|
-
const { promisify } = await import('util');
|
|
168
|
-
const execAsync = promisify(exec);
|
|
169
|
-
|
|
170
|
-
const results = {};
|
|
171
|
-
|
|
172
|
-
for (const file of files) {
|
|
173
|
-
try {
|
|
174
|
-
await execAsync(`git checkout HEAD -- "${file}"`, { cwd: PROJECT_ROOT });
|
|
175
|
-
results[file] = { status: 'RECOVERED', message: 'git checkout 성공' };
|
|
176
|
-
} catch (e) {
|
|
177
|
-
results[file] = { status: 'FAILED', message: e.message };
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
return results;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* 단일 파일 체크섬 검증
|
|
186
|
-
* @param {string} filePath - 파일 경로
|
|
187
|
-
* @returns {Promise<Object>} 검증 결과
|
|
188
|
-
*/
|
|
189
|
-
export async function verifySingleFile(filePath) {
|
|
190
|
-
const stored = await loadChecksums();
|
|
191
|
-
const relativePath = path.relative(PROJECT_ROOT, filePath);
|
|
192
|
-
const fileName = path.basename(filePath);
|
|
193
|
-
|
|
194
|
-
// 상대경로 또는 파일명으로 찾기
|
|
195
|
-
const storedInfo = stored.checksums[relativePath] || stored.checksums[fileName];
|
|
196
|
-
|
|
197
|
-
if (!storedInfo) {
|
|
198
|
-
return {
|
|
199
|
-
status: 'NOT_TRACKED',
|
|
200
|
-
message: '이 파일은 체크섬 추적 대상이 아닙니다.',
|
|
201
|
-
file: filePath
|
|
202
|
-
};
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
try {
|
|
206
|
-
const currentHash = await calculateHash(filePath);
|
|
207
|
-
const isValid = currentHash === storedInfo.hash;
|
|
208
|
-
|
|
209
|
-
return {
|
|
210
|
-
status: isValid ? 'OK' : 'TAMPERED',
|
|
211
|
-
message: isValid ? '무결성 확인됨' : '⚠️ 파일이 변조되었습니다!',
|
|
212
|
-
file: filePath,
|
|
213
|
-
storedHash: storedInfo.hash,
|
|
214
|
-
currentHash
|
|
215
|
-
};
|
|
216
|
-
} catch (e) {
|
|
217
|
-
if (e.code === 'ENOENT') {
|
|
218
|
-
return {
|
|
219
|
-
status: 'MISSING',
|
|
220
|
-
message: '파일이 존재하지 않습니다.',
|
|
221
|
-
file: filePath
|
|
222
|
-
};
|
|
223
|
-
}
|
|
224
|
-
throw e;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
/**
|
|
229
|
-
* 커스텀 파일을 감시 목록에 추가
|
|
230
|
-
* @param {string} filePath - 추가할 파일 경로
|
|
231
|
-
*/
|
|
232
|
-
export async function addToWatchlist(filePath) {
|
|
233
|
-
const stored = await loadChecksums();
|
|
234
|
-
const relativePath = path.relative(PROJECT_ROOT, filePath);
|
|
235
|
-
|
|
236
|
-
const hash = await calculateHash(filePath);
|
|
237
|
-
stored.checksums[relativePath] = {
|
|
238
|
-
hash,
|
|
239
|
-
path: filePath,
|
|
240
|
-
checkedAt: new Date().toISOString(),
|
|
241
|
-
custom: true
|
|
242
|
-
};
|
|
243
|
-
|
|
244
|
-
await saveChecksums(stored);
|
|
245
|
-
return { file: relativePath, hash };
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
// CLI 모드
|
|
249
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
250
|
-
const command = process.argv[2];
|
|
251
|
-
|
|
252
|
-
const commands = {
|
|
253
|
-
async generate() {
|
|
254
|
-
console.log('🔐 체크섬 생성 중...');
|
|
255
|
-
const result = await generateChecksums();
|
|
256
|
-
console.log(`✅ ${Object.keys(result.checksums).length}개 파일 체크섬 저장됨`);
|
|
257
|
-
console.log(`📁 저장 위치: ${CHECKSUM_STORE}`);
|
|
258
|
-
},
|
|
259
|
-
|
|
260
|
-
async verify() {
|
|
261
|
-
console.log('🔍 무결성 검증 중...');
|
|
262
|
-
const result = await verifyIntegrity();
|
|
263
|
-
|
|
264
|
-
if (result.status === 'OK') {
|
|
265
|
-
console.log('✅ 모든 파일 무결성 확인됨');
|
|
266
|
-
} else if (result.status === 'NO_BASELINE') {
|
|
267
|
-
console.log('⚠️ ' + result.message);
|
|
268
|
-
} else {
|
|
269
|
-
console.log('🚨 ' + result.message);
|
|
270
|
-
if (result.tampered.length > 0) {
|
|
271
|
-
console.log('\n변조된 파일:');
|
|
272
|
-
result.tampered.forEach(f => console.log(` - ${f}`));
|
|
273
|
-
}
|
|
274
|
-
if (result.missing.length > 0) {
|
|
275
|
-
console.log('\n누락된 파일:');
|
|
276
|
-
result.missing.forEach(f => console.log(` - ${f}`));
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
},
|
|
280
|
-
|
|
281
|
-
async recover() {
|
|
282
|
-
const result = await verifyIntegrity();
|
|
283
|
-
const filesToRecover = [...result.tampered, ...result.missing];
|
|
284
|
-
|
|
285
|
-
if (filesToRecover.length === 0) {
|
|
286
|
-
console.log('✅ 복구할 파일 없음');
|
|
287
|
-
return;
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
console.log(`🔄 ${filesToRecover.length}개 파일 복구 중...`);
|
|
291
|
-
const recovery = await recoverFiles(filesToRecover);
|
|
292
|
-
|
|
293
|
-
for (const [file, status] of Object.entries(recovery)) {
|
|
294
|
-
const icon = status.status === 'RECOVERED' ? '✅' : '❌';
|
|
295
|
-
console.log(`${icon} ${file}: ${status.message}`);
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
};
|
|
299
|
-
|
|
300
|
-
if (commands[command]) {
|
|
301
|
-
commands[command]().catch(console.error);
|
|
302
|
-
} else {
|
|
303
|
-
console.log(`
|
|
304
|
-
Mupengism Checksum System
|
|
305
|
-
|
|
306
|
-
사용법:
|
|
307
|
-
node checksum.js generate - 체크섬 베이스라인 생성
|
|
308
|
-
node checksum.js verify - 파일 무결성 검증
|
|
309
|
-
node checksum.js recover - 변조된 파일 복구 (git 사용)
|
|
310
|
-
`);
|
|
311
|
-
}
|
|
312
|
-
}
|