sayren 0.10.0 → 0.12.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/dist/index.mjs +85 -3
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -8038,6 +8038,60 @@ const cli_retired_token = ((inputs = {}, options = {}) => {
|
|
|
8038
8038
|
return ko_cli_retired_token(inputs);
|
|
8039
8039
|
});
|
|
8040
8040
|
|
|
8041
|
+
//#endregion
|
|
8042
|
+
//#region src/paraglide/messages/cli_skill_failed.js
|
|
8043
|
+
/** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
|
|
8044
|
+
/** @typedef {{ status: NonNullable<unknown> }} Cli_Skill_FailedInputs */
|
|
8045
|
+
const ko_cli_skill_failed = (i) => {
|
|
8046
|
+
return `스킬을 읽지 못했습니다(HTTP ${i?.status})`;
|
|
8047
|
+
};
|
|
8048
|
+
/**
|
|
8049
|
+
|
|
8050
|
+
* @param {Cli_Skill_FailedInputs} inputs
|
|
8051
|
+
* @param {{ locale?: "ko" }} options
|
|
8052
|
+
* @returns {LocalizedString}
|
|
8053
|
+
*/
|
|
8054
|
+
const cli_skill_failed = ((inputs, options = {}) => {
|
|
8055
|
+
experimentalStaticLocale ?? options.locale ?? getLocale();
|
|
8056
|
+
return ko_cli_skill_failed(inputs);
|
|
8057
|
+
});
|
|
8058
|
+
|
|
8059
|
+
//#endregion
|
|
8060
|
+
//#region src/paraglide/messages/cli_skill_not_found.js
|
|
8061
|
+
/** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
|
|
8062
|
+
/** @typedef {{ name: NonNullable<unknown> }} Cli_Skill_Not_FoundInputs */
|
|
8063
|
+
const ko_cli_skill_not_found = (i) => {
|
|
8064
|
+
return `스킬 ${i?.name}이(가) 없습니다. npx sayren skill list로 목록을 확인하십시오`;
|
|
8065
|
+
};
|
|
8066
|
+
/**
|
|
8067
|
+
|
|
8068
|
+
* @param {Cli_Skill_Not_FoundInputs} inputs
|
|
8069
|
+
* @param {{ locale?: "ko" }} options
|
|
8070
|
+
* @returns {LocalizedString}
|
|
8071
|
+
*/
|
|
8072
|
+
const cli_skill_not_found = ((inputs, options = {}) => {
|
|
8073
|
+
experimentalStaticLocale ?? options.locale ?? getLocale();
|
|
8074
|
+
return ko_cli_skill_not_found(inputs);
|
|
8075
|
+
});
|
|
8076
|
+
|
|
8077
|
+
//#endregion
|
|
8078
|
+
//#region src/paraglide/messages/cli_skill_usage.js
|
|
8079
|
+
/** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
|
|
8080
|
+
/** @typedef {{}} Cli_Skill_UsageInputs */
|
|
8081
|
+
const ko_cli_skill_usage = () => {
|
|
8082
|
+
return `스킬을 지정하십시오: npx sayren skill list 또는 npx sayren skill <이름>`;
|
|
8083
|
+
};
|
|
8084
|
+
/**
|
|
8085
|
+
|
|
8086
|
+
* @param {Cli_Skill_UsageInputs} inputs
|
|
8087
|
+
* @param {{ locale?: "ko" }} options
|
|
8088
|
+
* @returns {LocalizedString}
|
|
8089
|
+
*/
|
|
8090
|
+
const cli_skill_usage = ((inputs = {}, options = {}) => {
|
|
8091
|
+
experimentalStaticLocale ?? options.locale ?? getLocale();
|
|
8092
|
+
return ko_cli_skill_usage(inputs);
|
|
8093
|
+
});
|
|
8094
|
+
|
|
8041
8095
|
//#endregion
|
|
8042
8096
|
//#region src/paraglide/messages/cli_skipped_outside.js
|
|
8043
8097
|
/** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
|
|
@@ -8746,6 +8800,7 @@ const ko_cli_usage = (i) => {
|
|
|
8746
8800
|
npx sayren deploy [--no-publish] [--skip-build] [--message <메모>] [--force [--yes]]
|
|
8747
8801
|
npx sayren status
|
|
8748
8802
|
npx sayren verify
|
|
8803
|
+
npx sayren skill list | <이름> # sayren 스킬 목록·본문(에이전트용, 로그인 없음)
|
|
8749
8804
|
npx sayren app <명령> # 서드파티 앱(init·dev·trigger·verify·deploy·release·status·logs·secret·dev-store)
|
|
8750
8805
|
|
|
8751
8806
|
명령:
|
|
@@ -8757,6 +8812,7 @@ const ko_cli_usage = (i) => {
|
|
|
8757
8812
|
deploy 로컬 검사 → 로컬 빌드 → 작업 트리 올리기 → 빌드 → 발행. 원격이 pull 이후 바뀌었으면 덮어쓰지 않습니다
|
|
8758
8813
|
status 사이트·발행 버전·최근 빌드·편집 환경
|
|
8759
8814
|
verify 로컬 규칙·경로·크기 검사(서버 빌드와 같은 규칙)
|
|
8815
|
+
skill sayren 스킬 목록(list)과 본문(<이름>)을 출력합니다. 스킬은 중앙에서 고치므로 늘 최신입니다
|
|
8760
8816
|
app 서드파티 앱 — init <handle>로 만들고 dev로 로컬 실행, deploy로 버전을 올리고 release로 적용합니다. 자세히: https://docs.sayren.io/guides/apps-getting-started
|
|
8761
8817
|
|
|
8762
8818
|
토큰은 Sayren 계정 토큰만 받고 --token → SAYREN_TOKEN 환경 변수 → 로그인(credentials.json) 순서로 읽습니다.
|
|
@@ -9688,7 +9744,7 @@ async function selectStore(auth, client, io, candidates, folderStore = null) {
|
|
|
9688
9744
|
|
|
9689
9745
|
//#endregion
|
|
9690
9746
|
//#region package.json
|
|
9691
|
-
var version = "0.
|
|
9747
|
+
var version = "0.12.0";
|
|
9692
9748
|
|
|
9693
9749
|
//#endregion
|
|
9694
9750
|
//#region src/client.ts
|
|
@@ -11779,11 +11835,11 @@ function lockImporterSpecifiers(lock) {
|
|
|
11779
11835
|
//#endregion
|
|
11780
11836
|
//#region src/guide-skill.ts
|
|
11781
11837
|
/**
|
|
11782
|
-
* 받은 폴더의 에이전트 안내 스킬(2026-10-16 사용자 결정) — 셀러의 Claude Code가 sayren 중앙 스킬을
|
|
11838
|
+
* 받은 폴더의 에이전트 안내 스킬(2026-10-16 사용자 결정) — 셀러의 Claude Code가 기능·화면을 고치기 전에 sayren 중앙 스킬을 `npx sayren skill`로 읽게 한다(스킬은 이 하나만 설치한다).
|
|
11783
11839
|
* 빈 템플릿이 싣는 `templates/storefront-blank/.claude/skills/sayren/SKILL.md`와 같은 내용이다(`guide-skill.test.ts`가 고정한다).
|
|
11784
11840
|
*/
|
|
11785
11841
|
const GUIDE_SKILL_PATH = ".claude/skills/sayren/SKILL.md";
|
|
11786
|
-
const GUIDE_SKILL = "---\nname: sayren\ndescription:
|
|
11842
|
+
const GUIDE_SKILL = "---\nname: sayren\ndescription: Load before adding, implementing or changing any feature or page of this sayren storefront. Lists the current sayren skills and loads the ones the task needs.\n---\n\n# sayren skills\n\nThe sayren skills are maintained centrally and change without updating this project.\nDo not rely on memory or earlier copies. Load them at the start of each task.\n\n1. List the skills (name and when to use each):\n `npx -y sayren@latest skill list`\n2. Read every skill that matches the task, in full, and follow it:\n `npx -y sayren@latest skill <name>`\n\nIf the sayren MCP server is connected, the tools `list_skills` and `get_skill` return the same content.\n\nFollow the project's `CLAUDE.md` first. The skills add the sayren-specific details.\n";
|
|
11787
11843
|
/**
|
|
11788
11844
|
* 받은 트리에 안내 스킬이 없으면 넣는다 — 템플릿이 싣거나 셀러가 올린 내용이 우선이다. 트리에 넣으므로 다시 받을 때 지울 파일로 잡히지 않고
|
|
11789
11845
|
* `deploy`가 원격 작업 트리에도 올린다(AI 상점 도우미가 같은 안내를 읽는다). 넣었으면 true
|
|
@@ -12586,6 +12642,31 @@ function relativeOf(io, path) {
|
|
|
12586
12642
|
return relative(io.cwd, path) || ".";
|
|
12587
12643
|
}
|
|
12588
12644
|
|
|
12645
|
+
//#endregion
|
|
12646
|
+
//#region src/skill-commands.ts
|
|
12647
|
+
/**
|
|
12648
|
+
* `sayren skill list`·`sayren skill <name>`(2026-10-16 사용자 결정) — 안내 스킬 `sayren`이 에이전트에게 부르게 하는 중앙 스킬 읽기.
|
|
12649
|
+
* 공개 스킬 API(`/v1/public/agent-skills`, 인증 없음)를 읽어 원문을 출력한다. 셸·OS와 무관하게 같은 명령이고 요약되지 않는다
|
|
12650
|
+
*/
|
|
12651
|
+
async function skill(args, flags, io) {
|
|
12652
|
+
const [target] = args;
|
|
12653
|
+
if (!target) throw new CliError(cli_skill_usage());
|
|
12654
|
+
const { apiOrigin } = resolveApiOrigin(flags, io.cwd, null, io.env);
|
|
12655
|
+
const path = target === "list" ? "" : `/${encodeURIComponent(target)}`;
|
|
12656
|
+
const res = await io.fetch(`${apiOrigin}/v1/public/agent-skills${path}`, { headers: { "User-Agent": CLI_USER_AGENT } });
|
|
12657
|
+
if (res.status === 404) throw new CliError(cli_skill_not_found({ name: target }));
|
|
12658
|
+
if (!res.ok) throw new CliError(cli_skill_failed({ status: res.status }));
|
|
12659
|
+
const { data } = await res.json();
|
|
12660
|
+
if (target === "list") {
|
|
12661
|
+
const skills = data;
|
|
12662
|
+
const width = Math.max(...skills.map((s) => s.name.length));
|
|
12663
|
+
for (const s of skills) io.out(`${s.name.padEnd(width)} ${s.description}`);
|
|
12664
|
+
return 0;
|
|
12665
|
+
}
|
|
12666
|
+
io.out(data.body);
|
|
12667
|
+
return 0;
|
|
12668
|
+
}
|
|
12669
|
+
|
|
12589
12670
|
//#endregion
|
|
12590
12671
|
//#region src/index.ts
|
|
12591
12672
|
/** 도움말 — 쓰는 자리에서 만든다(로케일이 정해진 뒤) */
|
|
@@ -12725,6 +12806,7 @@ async function main(argv, io) {
|
|
|
12725
12806
|
case "login": return login(loginFlags, io, () => ask(cli_prompt_access_token()));
|
|
12726
12807
|
case "logout": return logout(loginFlags, io);
|
|
12727
12808
|
case "whoami": return whoami(common, io);
|
|
12809
|
+
case "skill": return skill(parsed.positional, { apiOrigin: common.apiOrigin }, io);
|
|
12728
12810
|
default: throw new CliError(cli_unknown_command({
|
|
12729
12811
|
command: parsed.command,
|
|
12730
12812
|
usage: usage()
|