feat: 브리프 인터뷰 단계와 브라우저 도구를 넣고 온보딩 말투를 고친다
세 가지를 고친다. 전부 실제 사용에서 드러난 것이다.
1) 0단계에서 가정으로 채우던 것을 인터뷰로 바꾼다
"꽃집 사이트 만들어보자"를 받고 업종 성격·목표 행동·톤·이름을 혼자 정했다.
물어보니 넷 중 넷이 달랐다(일상 구독 → 하이엔드 스튜디오, 문의 하나 → 넷 다,
톤 미정 → 에디토리얼, 이름 지어냄 → 목요일의 화원).
그대로 갔으면 레퍼런스 세 개를 전부 틀린 방향에서 골랐다.
SKILL.md 0단계에 질문 도구로 한 번에 묻는 절차를 넣었다. 무엇을 묻고
무엇을 묻지 않는지, 답이 모순될 때 어떻게 정리하는지까지 적었다.
2) 레퍼런스가 막히면 브라우저를 띄운다
Aesop(403) → Kinto(404) → Hasami(DNS) → MUJI(타임아웃)로 네 번 왕복하고
톤 레퍼런스를 하나도 못 얻었다. 좋은 레퍼런스일수록 봇을 막는다.
galleries.md 에 headed 브라우저로 직접 열어 스크린샷과 실측값을 받는
방법을 넣고, 접근 실패 2회면 바로 전환하도록 규칙을 세웠다.
Playwright 를 선택 의존성으로 잡았다(core/tools.ts).
- 온보딩 마지막에 설치 여부를 묻는다. 건너뛰어도 스킬은 동작한다
- `designpaca tools` 로 상태 확인, `--yes` 로 설치
- 수백 MB 라 --yes 없이는 상태만 보여준다
- MCP 서버는 설치만 하고 등록 명령은 안내만 한다(에이전트 설정을
대신 건드리지 않는다)
3) 온보딩 말투
"이제 브리프를 던져라", "설치해라", "건너뛴다" — 사용자를 향한 문구가
명령조였다. 스킬 문서의 단정한 반말은 의도지만 CLI UI 는 다르다.
전부 존댓말로 바꾸고, 각 단계가 왜 필요한지 설명을 붙였다.
명령조가 다시 섞이지 않도록 검사하는 테스트를 넣었다(테스트 22 → 25개).
This commit is contained in:
parent
eb9f61e907
commit
4e1e5f0073
15 changed files with 486 additions and 39 deletions
29
packages/cli/test/tools.test.ts
Normal file
29
packages/cli/test/tools.test.ts
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
import { test } from "node:test";
|
||||
import assert from "node:assert/strict";
|
||||
import { execFile } from "node:child_process";
|
||||
import { promisify } from "node:util";
|
||||
import path from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
|
||||
const exec = promisify(execFile);
|
||||
const CLI = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../dist/index.js");
|
||||
|
||||
test("tools 는 --yes 없이 아무것도 설치하지 않는다", async () => {
|
||||
// 수백 MB 를 받는 명령이라 조용히 시작하면 안 된다.
|
||||
// 상태만 보이거나, 이미 다 있으면 그렇다고 말해야 한다.
|
||||
const { stdout } = await exec(process.execPath, [CLI, "tools", "--no-update-check"]);
|
||||
assert.match(stdout, /브라우저 도구/);
|
||||
assert.doesNotMatch(stdout, /설치 중/);
|
||||
});
|
||||
|
||||
test("도움말에 tools 명령이 나온다", async () => {
|
||||
const { stdout } = await exec(process.execPath, [CLI, "--help"]);
|
||||
assert.match(stdout, /designpaca tools/);
|
||||
});
|
||||
|
||||
test("사용자에게 보이는 문구가 명령조가 아니다", async () => {
|
||||
// 스킬 문서는 단정한 반말이 의도지만, 사용자를 향한 CLI 문구는 다르다.
|
||||
const { stdout } = await exec(process.execPath, [CLI, "--help"]);
|
||||
const rude = /(해라|써라|봐라|던져라|가라)/;
|
||||
assert.doesNotMatch(stdout, rude, "도움말에 명령조 표현이 남아 있다");
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue