chiwaa 0.1.2 → 0.1.3

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/README.md CHANGED
@@ -19,6 +19,7 @@ npx chiwaa deploy
19
19
  | `chiwaa versions` | 남아 있는 버전 |
20
20
  | `chiwaa rollback [버전]` | 한 단계 전 또는 지정 버전으로 되돌리기 |
21
21
  | `chiwaa db` · `db on` · `db create <표>` · `db rows <표>` | 사이트 DB(문의·방명록 등 글 저장) — 켜기·표 만들기·글 보기 |
22
+ | `chiwaa agent` | AI 도구용 안내(AGENTS.md·CLAUDE.md) 만들기 — 처음 deploy 때 자동 |
22
23
  | `chiwaa whoami` / `logout` | 계정 확인 / 로그아웃 |
23
24
 
24
25
  ## AI 도구(Claude Code·Codex·Cursor)에서
package/bin/chiwaa.js CHANGED
@@ -27,7 +27,7 @@ const OUTPUTS = [
27
27
  ["parcel", "dist"],
28
28
  ];
29
29
  // 그대로 올리는 사이트에서 빼는 것
30
- const SKIP = new Set([".git", "node_modules", ".chiwaa.json", ".DS_Store", "Thumbs.db", ".vercel", ".netlify"]);
30
+ const SKIP = new Set([".git", "node_modules", ".chiwaa.json", ".DS_Store", "Thumbs.db", ".vercel", ".netlify", "AGENTS.md", "CLAUDE.md"]);
31
31
 
32
32
  const c = {
33
33
  dim: (s) => (TTY ? `\x1b[2m${s}\x1b[0m` : s),
@@ -307,9 +307,61 @@ function linkSite(dir, site) {
307
307
  if (site.source === "github")
308
308
  fail(`${site.domain} 은 깃허브(${site.repo})로 배포하는 사이트입니다. CLI 로는 다른 이름을 쓰세요: --name <새 이름>`);
309
309
  fs.writeFileSync(path.join(dir, LINK_FILE), JSON.stringify({ site: site.name }, null, 2) + "\n");
310
+ writeAgentDoc(dir, site.name, false);
310
311
  return site;
311
312
  }
312
313
 
314
+ // ---------- AGENTS.md (AI 코딩 도구가 스스로 읽는 안내) ----------
315
+ // Codex·Cursor 등은 AGENTS.md, Claude Code 는 CLAUDE.md 를 읽는다. 사용자가 쓴 내용은 두고 chiwaa 구간만 넣거나 바꾼다.
316
+ const AGENT_START = "<!-- chiwaa:start -->";
317
+ const AGENT_END = "<!-- chiwaa:end -->";
318
+
319
+ function agentSection(name) {
320
+ return `${AGENT_START}
321
+ ## chiwaa 배포 (이 폴더는 ${name}.chiwaa.com 사이트)
322
+
323
+ - 배포: \`npx chiwaa deploy -y\` — 끝나면 주소가 나온다. 잘못 올렸으면 \`npx chiwaa rollback\`.
324
+ - 이 폴더는 \`.chiwaa.json\` 으로 사이트가 정해져 있다. 다른 이름(--name)으로 올리지 않는다.
325
+ - 정적 사이트만 된다(HTML·CSS·JS, Vite·React·Vue·Astro·Next export 빌드). PHP·Express 같은 서버 코드는 안 된다.
326
+ - 글 저장(문의·방명록·게시판)은 사이트 DB: \`npx chiwaa db on\` → \`npx chiwaa db create <표> --read public|owner --write public|owner\`.
327
+ - 문의·신청서처럼 개인정보가 든 표는 반드시 \`--read owner\`. 사이트에서 안 읽힌다고 public 으로 바꾸지 않는다.
328
+ - 방문자 글은 화면에 \`textContent\` 로만 넣는다. 비밀번호는 \`<input type="password">\` 로 받는다.
329
+ - 로그인 토큰(~/.chiwaa/config.json, CHIWAA_TOKEN)은 출력하거나 파일·저장소에 적지 않는다.
330
+ - 자세한 규칙·예시: https://chiwaa.kr/llms.txt — 처음 작업하거나 헷갈리면 먼저 읽는다.
331
+ ${AGENT_END}`;
332
+ }
333
+
334
+ // 바뀐 파일 이름 목록을 돌려준다
335
+ function writeAgentDoc(dir, name, loud) {
336
+ const changed = [];
337
+ const agents = path.join(dir, "AGENTS.md");
338
+ const block = agentSection(name);
339
+ let text = fs.existsSync(agents) ? fs.readFileSync(agents, "utf8") : "";
340
+ const re = new RegExp(`${AGENT_START}[\\s\\S]*?${AGENT_END}`);
341
+ const next = re.test(text) ? text.replace(re, block) : (text ? `${text.replace(/\s*$/, "")}\n\n${block}\n` : `${block}\n`);
342
+ if (next !== text) {
343
+ fs.writeFileSync(agents, next);
344
+ changed.push("AGENTS.md");
345
+ }
346
+ // Claude Code 는 CLAUDE.md 를 읽는다 — 없을 때만 AGENTS.md 를 불러오는 한 줄짜리를 만든다
347
+ const claude = path.join(dir, "CLAUDE.md");
348
+ if (!fs.existsSync(claude)) {
349
+ fs.writeFileSync(claude, "@AGENTS.md\n");
350
+ changed.push("CLAUDE.md");
351
+ } else if (!/@AGENTS\.md|chiwaa:start/.test(fs.readFileSync(claude, "utf8"))) {
352
+ fs.appendFileSync(claude, "\n@AGENTS.md\n");
353
+ changed.push("CLAUDE.md");
354
+ }
355
+ if (changed.length) console.log(c.dim(`AI 도구용 안내를 ${changed.join("·")} 에 적었습니다(사이트에는 올라가지 않음).`));
356
+ else if (loud) console.log("AI 도구용 안내가 이미 최신입니다(AGENTS.md).");
357
+ return changed;
358
+ }
359
+
360
+ async function agent(args) {
361
+ const name = await siteName(args);
362
+ writeAgentDoc(process.cwd(), name, true);
363
+ }
364
+
313
365
  // ---------- deploy ----------
314
366
  async function deploy(args) {
315
367
  const dir = path.resolve(args._[1] || ".");
@@ -509,6 +561,8 @@ const HELP = `chiwaa ${VERSION} — chiwaa.kr 에 사이트를 바로 올립니
509
561
  chiwaa db rules <표> 읽기·쓰기 권한 바꾸기
510
562
  chiwaa db rows <표> 저장된 글 보기 (--page 2)
511
563
  chiwaa db code <표> 사이트에 붙일 코드 다시 보기
564
+ chiwaa agent AI 도구용 안내(AGENTS.md·CLAUDE.md)를 만들거나 새로 고침
565
+ (처음 deploy 할 때 자동으로 만든다)
512
566
  chiwaa whoami 로그인한 계정
513
567
  chiwaa logout 로그아웃
514
568
 
@@ -520,7 +574,7 @@ async function main() {
520
574
  const cmd = args._[0];
521
575
  if (args.version) return console.log(VERSION);
522
576
  if (args.help || !cmd || cmd === "help") return console.log(HELP);
523
- const cmds = { deploy, login, list, ls: list, versions, rollback, db, whoami, logout };
577
+ const cmds = { deploy, login, list, ls: list, versions, rollback, db, agent, whoami, logout };
524
578
  if (!cmds[cmd]) fail(`모르는 명령입니다: ${cmd}\n\n${HELP}`);
525
579
  await cmds[cmd](args);
526
580
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chiwaa",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "chiwaa.kr 에 사이트를 터미널에서 바로 올리는 도구",
5
5
  "bin": {
6
6
  "chiwaa": "bin/chiwaa.js"