@bstage-sdk/ai-toolkit 0.5.0 → 0.6.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.cjs +158 -76
- package/dist/index.d.cts +15 -6
- package/dist/index.d.ts +15 -6
- package/dist/index.js +158 -76
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -48,7 +48,7 @@ __export(index_exports, {
|
|
|
48
48
|
module.exports = __toCommonJS(index_exports);
|
|
49
49
|
|
|
50
50
|
// src/version.ts
|
|
51
|
-
var VERSION = "0.
|
|
51
|
+
var VERSION = "0.6.0";
|
|
52
52
|
|
|
53
53
|
// src/skills/deploy.ts
|
|
54
54
|
function deploySkillMd() {
|
|
@@ -268,7 +268,7 @@ public/
|
|
|
268
268
|
|
|
269
269
|
# \uD568\uC815
|
|
270
270
|
|
|
271
|
-
- **sdk\uC640
|
|
271
|
+
- **sdk\uC640 \uD568\uAED8 \uC788\uB294 \uB808\uD3EC(\uD63C\uD569)\uC5D0\uC11C\uB294 \uC790\uB9AC\uB97C \uB098\uB208\uB2E4.** \`template.tsx\`(React)\uC640 \`.liquid\`\uAC00 \uD55C \uB808\uD3EC\uC5D0 \uC788\uC5B4\uB3C4 \uD3EC\uD138\uC774 sdk\uB97C \uBE4C\uB4DC\uD55C \uB4A4 liquid\uB97C \uD568\uAED8 \uD328\uD0A4\uC9D5\uD55C\uB2E4. \uB2E8 sdk \uD398\uC774\uC9C0 \uD3F4\uB354 \`src/pages/user\`\xB7\`src/pages/admin\`\uC740 liquid \uC0B0\uCD9C\uBB3C \uC790\uB9AC(\`dist/{user|admin}/\`)\uC640 \uACB9\uCCD0 \`bstage build\`\uAC00 \uC885\uB8CC \uCF54\uB4DC 2\uB85C \uB9C9\uB294\uB2E4(\uB300\uC18C\uBB38\uC790 \uBB34\uC2DC). \uD63C\uD569 \uB808\uD3EC\uC758 liquid \uBBF8\uB9AC\uBCF4\uAE30\uB294 \`bstage dev --kind liquid\`.
|
|
272
272
|
- **liquid\uB294 PAGE \uBC30\uCE58\uB9CC \uAC00\uB2A5\uD558\uB2E4.** \uC2AC\uB86F(\uC704\uC82F \uC790\uB9AC)\uC5D0\uB294 \uB123\uC744 \uC218 \uC5C6\uB2E4. \uD3EC\uD138\uC5D0\uC11C \uD398\uC774\uC9C0\uB97C \uB9CC\uB4E4 \uB54C \uCEE4\uC2A4\uD140 \uBC29\uC2DD\uC73C\uB85C \`liquid\`\uB97C \uACE0\uB978\uB2E4.
|
|
273
273
|
- **\`data.json\`\uC740 \uB85C\uCEEC \uC804\uC6A9\uC774\uB2E4.** \uD3EC\uD138\uC774 \uD328\uD0A4\uC9D5\uD560 \uB54C \uC9C0\uC6B4\uB2E4. \uC2E4\uC81C \uB370\uC774\uD130\uC758 \uCD9C\uCC98\uAC00 \uC544\uB2C8\uBBC0\uB85C \uC5EC\uAE30 \uAC12\uC744 \uB9DE\uCDB0 \uB450\uACE0 "\uBC30\uD3EC\uD558\uBA74 \uC774 \uAC12\uC774 \uB098\uC628\uB2E4"\uACE0 \uAE30\uB300\uD558\uC9C0 \uC54A\uB294\uB2E4.
|
|
274
274
|
- **\`layout.json\`\uB3C4 \uC9C0\uC6CC\uC9C4\uB2E4.** \uB808\uC774\uC544\uC6C3\uC740 \uBC30\uCE58 \uC124\uC815\uC774 \uC18C\uC720\uD55C\uB2E4 \u2014 \uB808\uD3EC\uC5D0\uC11C \uC815\uD558\uB824 \uD558\uC9C0 \uC54A\uB294\uB2E4.
|
|
@@ -471,7 +471,7 @@ description: b.stage \uCEE4\uC2A4\uD140 \uAC1C\uBC1C\uC744 \uCC98\uC74C\uBD80\uD
|
|
|
471
471
|
- **liquid \uD15C\uD50C\uB9BF**: \uB370\uC774\uD130\uB97C \uBC1B\uC544 \uADF8\uB824 \uC8FC\uAE30\uB9CC \uD558\uBA74 \uB418\uB294 \uD654\uBA74\uC5D0 \uB9DE\uB294\uB2E4. \uBC30\uC6B0\uAE30 \uC27D\uACE0 \uBE60\uB974\uC9C0\uB9CC \uBE0C\uB77C\uC6B0\uC800 \uCABD \uB85C\uC9C1\uC740 \uC81C\uD55C\uB41C\uB2E4.
|
|
472
472
|
- **(c) \uC5B4\uB514\uC5D0 \uBC30\uD3EC\uD558\uB098** \u2014 \uBC30\uD3EC \uD658\uACBD(phase)\uACFC \uC2A4\uD14C\uC774\uC9C0 ID. \uBAA8\uB974\uBA74 "\uD3EC\uD138\uC5D0 \uB85C\uADF8\uC778\uD588\uC744 \uB54C \uBCF4\uC774\uB294 \uC2A4\uD14C\uC774\uC9C0 \uC774\uB984"\uC774\uB77C\uACE0 \uC54C\uB824\uC8FC\uACE0, 1\uB2E8\uACC4\uC5D0\uC11C\uB294 \uBE44\uC6CC \uB454 \uCC44 \uC9C4\uD589\uD574\uB3C4 \uB41C\uB2E4(6\uB2E8\uACC4\uC5D0\uC11C \`bstage link\`\uAC00 \uBAA9\uB85D\uC73C\uB85C \uBB3C\uC5B4\uBCF8\uB2E4).
|
|
473
473
|
|
|
474
|
-
\uD55C \uB808\uD3EC\uC5D0\
|
|
474
|
+
\uD55C \uB808\uD3EC\uC5D0 \uB450 \uBC29\uC2DD\uC744 \uD568\uAED8 \uB458 \uC218\uB3C4 \uC788\uB2E4(\uD63C\uD569 \uB808\uD3EC) \u2014 \uD3EC\uD138\uC774 React \uD15C\uD50C\uB9BF\uC744 \uBE4C\uB4DC\uD55C \uB4A4 liquid \uD15C\uD50C\uB9BF\uC744 \uD568\uAED8 \uD328\uD0A4\uC9D5\uD55C\uB2E4. \uB2E4\uB9CC \uAC19\uC740 \uD654\uBA74\uC744 \uB450 \uBC29\uC2DD\uC73C\uB85C \uB9CC\uB4E4\uC9C0 \uC54A\uACE0, sdk \uD398\uC774\uC9C0 \uD3F4\uB354 \uC774\uB984\uC5D0 \`user\`\xB7\`admin\`\uC744 \uC4F0\uC9C0 \uC54A\uB294\uB2E4(\`src/pages/user\`\uB294 liquid \uC0B0\uCD9C\uBB3C \uC790\uB9AC\uC640 \uACB9\uCCD0 \`bstage build\`\uAC00 \uC885\uB8CC \uCF54\uB4DC 2\uB85C \uB9C9\uB294\uB2E4). \uD63C\uD569 \uB808\uD3EC\uC758 \uB85C\uCEEC \uBBF8\uB9AC\uBCF4\uAE30\uB294 \`bstage dev\`(React)\uC640 \`bstage dev --kind liquid\`\uB85C \uB530\uB85C \uB744\uC6B4\uB2E4.
|
|
475
475
|
|
|
476
476
|
## 2. \uD504\uB85C\uC81D\uD2B8 \uC0DD\uC131
|
|
477
477
|
|
|
@@ -571,7 +571,7 @@ bstage deploy
|
|
|
571
571
|
- \uC6D0\uACA9 push\xB7\uBC30\uD3EC\uB97C \uC0AC\uC6A9\uC790 \uD655\uC778 \uC5C6\uC774 \uC2E4\uD589\uD558\uAE30
|
|
572
572
|
- \uC0AC\uC6A9\uC790\uC5D0\uAC8C "\uCF54\uB4DC\uAC00 \uB9DE\uB098\uC694"\uCC98\uB7FC \uAC1C\uBC1C \uC9C0\uC2DD\uC774 \uC788\uC5B4\uC57C \uB2F5\uD560 \uC218 \uC788\uB294 \uAC83\uC744 \uBB3B\uAE30 (\uD655\uC778\uC740 \uB124 \uBAAB)
|
|
573
573
|
- \`bstage list\`\uC5D0 \uBC30\uCE58\uAC00 0\uAC74\uC778\uB370 \uBC30\uD3EC\uB97C \uC2DC\uB3C4\uD558\uAE30
|
|
574
|
-
- \
|
|
574
|
+
- \uD63C\uD569 \uB808\uD3EC\uC5D0\uC11C sdk \uD398\uC774\uC9C0\uB97C \`src/pages/user\`\xB7\`src/pages/admin\` \uC544\uB798\uC5D0 \uB9CC\uB4E4\uAE30 \u2014 liquid \uC0B0\uCD9C\uBB3C \uC790\uB9AC\uC640 \uACB9\uCE5C\uB2E4
|
|
575
575
|
`;
|
|
576
576
|
}
|
|
577
577
|
|
|
@@ -766,11 +766,12 @@ var BSTAGE_SKILLS = [
|
|
|
766
766
|
{ name: "bstage-migrate", kinds: ["sdk", "liquid"], content: () => withStamp(migrateSkillMd()) }
|
|
767
767
|
];
|
|
768
768
|
function skillsFor(kind) {
|
|
769
|
-
|
|
769
|
+
const wanted = kind === "mixed" ? ["sdk", "liquid"] : [kind];
|
|
770
|
+
return BSTAGE_SKILLS.filter((s) => s.kinds.some((k) => wanted.includes(k)));
|
|
770
771
|
}
|
|
771
772
|
|
|
772
773
|
// src/agents/agentsMdRegion.ts
|
|
773
|
-
var AGENTS_MANAGED_VERSION =
|
|
774
|
+
var AGENTS_MANAGED_VERSION = 14;
|
|
774
775
|
var START_MARKER = `<!-- BSTAGE:MANAGED:START v=${AGENTS_MANAGED_VERSION} \u2014 SDK\uAC00 \uAD00\uB9AC\uD558\uB294 \uC601\uC5ED\uC785\uB2C8\uB2E4. \`bstage ai install\` / \`bstage ai update\`\uAC00 \uC7AC\uC0DD\uC131\uD558\uBBC0\uB85C \uC9C1\uC811 \uD3B8\uC9D1\uD558\uC9C0 \uB9C8\uC138\uC694(\uAC31\uC2E0 \uC2DC \uB36E\uC5B4\uC4F0\uC785\uB2C8\uB2E4). \uD504\uB85C\uC81D\uD2B8 \uACE0\uC720 \uADDC\uCE59\uC740 \uC544\uB798 \uC790\uC720 \uC601\uC5ED\uC5D0 \uC801\uC73C\uC138\uC694. -->`;
|
|
775
776
|
var END_MARKER = `<!-- BSTAGE:MANAGED:END -->`;
|
|
776
777
|
var START_TOKEN = "BSTAGE:MANAGED:START";
|
|
@@ -865,6 +866,7 @@ function agentsManagedBody({
|
|
|
865
866
|
}) {
|
|
866
867
|
assertSingleLine({ space, projectName });
|
|
867
868
|
if (kind === "liquid") return liquidManagedBody(space, projectName);
|
|
869
|
+
if (kind === "mixed") return mixedManagedBody(space, projectName, target);
|
|
868
870
|
return sdkManagedBody(space, projectName, target);
|
|
869
871
|
}
|
|
870
872
|
function assertSingleLine(values) {
|
|
@@ -872,8 +874,7 @@ function assertSingleLine(values) {
|
|
|
872
874
|
if (/[\r\n]/.test(value)) throw new Error(`AGENTS.md \uC815\uCCB4\uC131 \uAC12\uC5D0 \uAC1C\uD589\uC774 \uC788\uC2B5\uB2C8\uB2E4: ${key}`);
|
|
873
875
|
}
|
|
874
876
|
}
|
|
875
|
-
|
|
876
|
-
const structureBlock = `src/
|
|
877
|
+
var SDK_STRUCTURE_BLOCK = `src/
|
|
877
878
|
main.tsx \u2014 App \uB9C8\uC6B4\uD2B8\uB9CC (\uC218\uC815 \uBD88\uD544\uC694)
|
|
878
879
|
App.tsx \u2014 import.meta.glob \uAE30\uBC18 \uAC1C\uBC1C\uC6A9 \uBAA9\uB85D\xB7\uB77C\uC6B0\uD305 (\uC218\uC815 \uBD88\uD544\uC694)
|
|
879
880
|
shared/
|
|
@@ -887,25 +888,14 @@ function sdkManagedBody(space, projectName, target) {
|
|
|
887
888
|
.env \u2014 VITE_BSTAGE_PHASE + API \uD0A4 (\uCEE4\uBC0B \uC548 \uB428, .gitignore)
|
|
888
889
|
.env.example \u2014 \uC704 \uD56D\uBAA9 placeholder (\uCEE4\uBC0B\uB428 \u2014 \uBCF5\uC0AC\uD574\uC11C .env \uC0DD\uC131)
|
|
889
890
|
vite.config.ts \u2014 Vite + bstageDevPlugin (phase\uB294 .env\uC5D0\uC11C \uC77D\uC74C)`;
|
|
890
|
-
|
|
891
|
+
var SDK_ENV_SECTION = `\`.env\`(\uCEE4\uBC0B \uC548 \uB428)\uB294 phase\uC640 API \uD0A4\uB97C, \`.env.example\`(\uCEE4\uBC0B\uB428)\uC740 \uADF8 placeholder\uB97C \uB2F4\uB294\uB2E4. \`client.ts\`\uB294 \`import.meta.env.VITE_BSTAGE_APP_*\`\uB97C, \`vite.config.ts\`\uB294 \`.env\`\uC758 phase\uB97C \uCC38\uC870\uD55C\uB2E4.
|
|
891
892
|
|
|
892
893
|
\`\`\`
|
|
893
894
|
VITE_BSTAGE_PHASE=dev # dev | qa | real | sandbox
|
|
894
895
|
\`\`\``;
|
|
895
|
-
|
|
896
|
-
- \uB85C\uADF8\uC778 \uD398\uC774\uC9C0: http://localhost:5173/__bstage__/login`;
|
|
897
|
-
const apiForbidBullet = `- \uACBD\uB85C\xB7\uC751\uB2F5 \uBAA8\uC591\uC744 \uCD94\uCE21\uD574 \uD638\uCD9C\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 SDK\uB294 API \uACBD\uB85C \uBAA9\uB85D\uC744 \uB4E4\uACE0 \uC788\uC9C0 \uC54A\uB2E4(\uC790\uB3D9\uC644\uC131 \uC5C6\uC74C). \uCD9C\uCC98\uB294 \uAC8C\uC774\uD2B8\uC6E8\uC774 API Reference Doc\uC774\uACE0, \uC751\uB2F5 \uD0C0\uC785\uC740 \`client.get<T>(...)\`\uCC98\uB7FC \uC81C\uB124\uB9AD\uC73C\uB85C \uBA85\uC2DC\uD55C\uB2E4.
|
|
896
|
+
var SDK_API_FORBID_BULLETS = `- \uACBD\uB85C\xB7\uC751\uB2F5 \uBAA8\uC591\uC744 \uCD94\uCE21\uD574 \uD638\uCD9C\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 SDK\uB294 API \uACBD\uB85C \uBAA9\uB85D\uC744 \uB4E4\uACE0 \uC788\uC9C0 \uC54A\uB2E4(\uC790\uB3D9\uC644\uC131 \uC5C6\uC74C). \uCD9C\uCC98\uB294 \uAC8C\uC774\uD2B8\uC6E8\uC774 API Reference Doc\uC774\uACE0, \uC751\uB2F5 \uD0C0\uC785\uC740 \`client.get<T>(...)\`\uCC98\uB7FC \uC81C\uB124\uB9AD\uC73C\uB85C \uBA85\uC2DC\uD55C\uB2E4.
|
|
898
897
|
- \uC5B4\uB4DC\uBBFC\uC6A9 API\uB97C \uCD94\uCE21\uD574 \uD638\uCD9C\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 BstageClient\uB294 **\uC720\uC800\uB2E8 API\uB9CC \uC9C0\uC6D0**\uD55C\uB2E4. \uC5B4\uB4DC\uBBFC API\uAC00 \uD544\uC694\uD558\uBA74 \uACBD\uB85C\uB97C \uC784\uC758\uB85C \uB9CC\uB4E4\uC9C0 \uB9D0\uACE0 **\uBC18\uB4DC\uC2DC \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uBA3C\uC800 \uD655\uC778**\uD55C\uB2E4.`;
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
## \uD504\uB85C\uC81D\uD2B8 \uAC1C\uC694
|
|
902
|
-
|
|
903
|
-
b.stage \uC11C\uB4DC\uD30C\uD2F0 \uD15C\uD50C\uB9BF \uD504\uB85C\uC81D\uD2B8. React \uCEF4\uD3EC\uB10C\uD2B8\uB97C \uC791\uC131\uD558\uBA74 SDK\uAC00 Web Component\uB85C \uBE4C\uB4DC\uD558\uACE0, \uBE4C\uB4DC \uC0B0\uCD9C\uBB3C\uC774 b.stage \uD50C\uB7AB\uD3FC\uC5D0\uC11C \uB85C\uB4DC\uB418\uC5B4 \uC2E4\uD589\uB41C\uB2E4.
|
|
904
|
-
|
|
905
|
-
- **Space**: ${space}
|
|
906
|
-
- **\uB808\uD3EC**: \`${projectName}\`
|
|
907
|
-
|
|
908
|
-
## SDK \uBB38\uC11C
|
|
898
|
+
var SDK_DOCS_SECTION = `## SDK \uBB38\uC11C
|
|
909
899
|
|
|
910
900
|
SDK\uC758 API, hooks, \uC2AC\uB86F \uC2DC\uC2A4\uD15C, \uBE4C\uB4DC \uD30C\uC774\uD504\uB77C\uC778 \uB4F1 **SDK\uC640 \uAD00\uB828\uB41C \uBAA8\uB4E0 \uB0B4\uC6A9**\uC740 \uC124\uCE58\uB41C \uD328\uD0A4\uC9C0\uC758 \uBB38\uC11C\uB97C \uCC38\uC870\uD55C\uB2E4. \uC774 \uBB38\uC11C\uB4E4\uC774 \uD56D\uC0C1 \uCD5C\uC2E0\uC774\uBA70 \uC678\uBD80 \uAC80\uC0C9 \uACB0\uACFC\uBCF4\uB2E4 \uC2E0\uB8B0\uD560 \uC218 \uC788\uB2E4.
|
|
911
901
|
|
|
@@ -924,17 +914,9 @@ node_modules/@bstage-sdk/core/docs/
|
|
|
924
914
|
\u2514\u2500\u2500 SDK_ARCHITECTURE.md \u2014 \uD328\uD0A4\uC9C0 \uAD6C\uC870, \uC124\uACC4 \uACB0\uC815
|
|
925
915
|
\`\`\`
|
|
926
916
|
|
|
927
|
-
\uBB38\uC11C \uBAA9\uB85D\uC740 \`npx bstage docs\`\uB85C\uB3C4 \uBCFC \uC218 \uC788\uB2E4. \uD0C0\uC785 \uC815\uC758(.d.ts)\uC640 \uB7F0\uD0C0\uC784 \uC18C\uC2A4(.js)\uB294 \`node_modules/@bstage-sdk/react/dist/\`, \`node_modules/@bstage-sdk/core/dist/\`\uC5D0\uC11C \uC9C1\uC811 \uD655\uC778\uD560 \uC218 \uC788\uB2E4
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
\`\`\`
|
|
932
|
-
${structureBlock}
|
|
933
|
-
\`\`\`
|
|
934
|
-
|
|
935
|
-
## \uD15C\uD50C\uB9BF \uAC1C\uBC1C \uADDC\uCE59
|
|
936
|
-
|
|
937
|
-
### \uC0C8 \uD15C\uD50C\uB9BF \uCD94\uAC00
|
|
917
|
+
\uBB38\uC11C \uBAA9\uB85D\uC740 \`npx bstage docs\`\uB85C\uB3C4 \uBCFC \uC218 \uC788\uB2E4. \uD0C0\uC785 \uC815\uC758(.d.ts)\uC640 \uB7F0\uD0C0\uC784 \uC18C\uC2A4(.js)\uB294 \`node_modules/@bstage-sdk/react/dist/\`, \`node_modules/@bstage-sdk/core/dist/\`\uC5D0\uC11C \uC9C1\uC811 \uD655\uC778\uD560 \uC218 \uC788\uB2E4.`;
|
|
918
|
+
function sdkTemplateRules(space) {
|
|
919
|
+
return `### \uC0C8 \uD15C\uD50C\uB9BF \uCD94\uAC00
|
|
938
920
|
|
|
939
921
|
\uD398\uC774\uC9C0\uB0D0 \uC704\uC82F\uC774\uB0D0\uC5D0 \uB530\uB77C \uB450\uB294 \uACF3\uC774 \uB2E4\uB974\uB2E4. \uD30C\uC77C\uBA85\uC740 \uBC18\uB4DC\uC2DC \`template.tsx\`\uC5EC\uC57C \uD558\uBA70, \`src/pages/\`\xB7\`src/slots/\` \uBC16\uC5D0 \uB450\uBA74 \uBE4C\uB4DC\uAC00 \uC778\uC2DD\uD558\uC9C0 \uC54A\uB294\uB2E4.
|
|
940
922
|
|
|
@@ -967,28 +949,68 @@ createTemplate(MyWidget, {
|
|
|
967
949
|
|
|
968
950
|
- \`name\`\uC740 \uD544\uC218 \u2014 \uD15C\uD50C\uB9BF \uD3F4\uB354\uBA85\uACFC \uC77C\uCE58, \uD558\uC774\uD508 \uD3EC\uD568
|
|
969
951
|
- \uCEF4\uD3EC\uB10C\uD2B8 \uD568\uC218\uBA85\uC740 \uC790\uC720\uC774\uB098 \`export default\` \uD544\uC218
|
|
970
|
-
- \`type\` \uB4F1 \uC120\uD0DD \uD544\uB4DC \uCD94\uAC00 \uAC00\uB2A5
|
|
952
|
+
- \`type\` \uB4F1 \uC120\uD0DD \uD544\uB4DC \uCD94\uAC00 \uAC00\uB2A5`;
|
|
953
|
+
}
|
|
954
|
+
function sdkMigrationSection(skillsList) {
|
|
955
|
+
return `## SDK \uC5C5\uB370\uC774\uD2B8 / \uB9C8\uC774\uADF8\uB808\uC774\uC158
|
|
971
956
|
|
|
972
|
-
|
|
957
|
+
\uC774 \uD504\uB85C\uC81D\uD2B8\uB294 \uC0DD\uC131 \uC2DC\uC810\uC758 SDK \uBC84\uC804\uC744 \`package.json\`\uC5D0 \uACE0\uC815\uD55C\uB2E4. SDK\uAC00 \uC5C5\uB370\uC774\uD2B8\uB3FC\uB3C4 \uC790\uB3D9\uC73C\uB85C \uB530\uB77C\uC624\uC9C0 \uC54A\uC73C\uBBC0\uB85C, \uCD5C\uC2E0\uC73C\uB85C \uC62C\uB9AC\uB824\uBA74:
|
|
973
958
|
|
|
974
|
-
|
|
959
|
+
- \`npx @bstage-sdk/cli@latest doctor\` \u2014 \uBC84\uC804 \uB4DC\uB9AC\uD504\uD2B8\xB7\uB204\uB77D \uD30C\uC77C\xB7\uC801\uC6A9 \uAC00\uB2A5\uD55C \uB9C8\uC774\uADF8\uB808\uC774\uC158 \uD56D\uBAA9\uC744 \uC9C4\uB2E8\uD55C\uB2E4(\uD30C\uC77C \uC218\uC815 \uC5C6\uC74C, \`--json\` \uC9C0\uC6D0).
|
|
960
|
+
- \uC2E4\uC81C \uC801\uC6A9\uC740 \`bstage-migrate\` \uC2A4\uD0AC\uC5D0\uAC8C \uB9E1\uAE34\uB2E4 \u2014 \uC5D0\uC774\uC804\uD2B8\uC5D0\uAC8C "bstage \uCD5C\uC2E0 \uBC84\uC804\uC73C\uB85C \uB9C8\uC774\uADF8\uB808\uC774\uC158 \uD574\uC918"\uB77C\uACE0 \uC694\uCCAD\uD558\uBA74, doctor \uACB0\uACFC\uC640 SDK\uC758 \`MIGRATION.md\`\uB97C \uC77D\uACE0 \uC774 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uB9DE\uCDB0 \uBCC0\uD658\uD55C\uB2E4(\uC0AC\uC6A9\uC790 \uCF54\uB4DC\uB294 \uB36E\uC5B4\uC4F0\uC9C0 \uC54A\uACE0 reconcile).
|
|
975
961
|
|
|
976
|
-
|
|
962
|
+
\uB9C8\uC774\uADF8\uB808\uC774\uC158 \uC808\uCC28\uC758 \uB2E8\uC77C \uC18C\uC2A4\uB294 SDK\uC758 \`node_modules/@bstage-sdk/core/docs/MIGRATION.md\`\uB2E4.
|
|
977
963
|
|
|
978
|
-
|
|
964
|
+
\uC774 \uD504\uB85C\uC81D\uD2B8\uC758 \`.claude/skills/\`\uC5D0\uB294 \uC5D0\uC774\uC804\uD2B8\uC6A9 \uC2A4\uD0AC(${skillsList})\uC774 \uB4E4\uC5B4 \uC788\uB2E4. SDK \uBC84\uC804\uC5C5 \uD6C4 \`npx @bstage-sdk/cli@latest ai update\`\uB85C \uCD5C\uC2E0 \uC2A4\uD0AC\uC744 \uB3D9\uAE30\uD654\uD560 \uC218 \uC788\uC73C\uBA70, \uC774\uB54C **\uC774 AGENTS.md\uC758 SDK \uAD00\uB9AC \uC601\uC5ED(\uB9C8\uCEE4\uB85C \uAC10\uC2FC \uBD80\uBD84)\uB3C4 \uD568\uAED8 \uCD5C\uC2E0\uD654**\uB41C\uB2E4. \uD504\uB85C\uC81D\uD2B8 \uACE0\uC720 \uADDC\uCE59\uC740 \uAD00\uB9AC \uC601\uC5ED \uC544\uB798 **\uC790\uC720 \uC601\uC5ED**\uC5D0 \uC801\uC73C\uBA74 \uAC31\uC2E0 \uC2DC \uBCF4\uC874\uB41C\uB2E4.`;
|
|
965
|
+
}
|
|
966
|
+
var SDK_SKILLS_LIST = "`bstage-template` \uC791\uC131, `bstage-deploy` \uBC30\uD3EC, `bstage-onboarding` \uCC98\uC74C\uBD80\uD130 \uB05D\uAE4C\uC9C0, `bstage-migrate` \uB9C8\uC774\uADF8\uB808\uC774\uC158";
|
|
967
|
+
function sdkForbidBullets() {
|
|
968
|
+
return `- \`src/main.tsx\`\xB7\`src/App.tsx\`\uB97C \uC218\uC815\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uAC1C\uBC1C\uC6A9 \uC9C4\uC785\uC810\xB7\uBAA9\uB85D \uD654\uBA74\uC73C\uB85C SDK\uAC00 \uAD00\uB9AC
|
|
969
|
+
- \`customElements.define()\`\uC744 \uC9C1\uC811 \uD638\uCD9C\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 \`createTemplate()\`\uC774 \uC790\uB3D9 \uCC98\uB9AC
|
|
970
|
+
- Shadow DOM\uC744 \uC9C1\uC811 \uC870\uC791\uD558\uC9C0 \uC54A\uB294\uB2E4 (\`attachShadow\`, \`shadowRoot\` \uB4F1) \u2014 SDK\uAC00 \uAD00\uB9AC
|
|
971
|
+
- \`createTemplate()\` \uD638\uCD9C\uC758 \uC778\uC790 \uAD6C\uC870\uB97C \uC784\uC758\uB85C \uBCC0\uACBD\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uBE4C\uB4DC \uD30C\uC774\uD504\uB77C\uC778\uC774 \uD30C\uC2F1\uC5D0 \uC2E4\uD328\uD560 \uC218 \uC788\uB2E4
|
|
972
|
+
- \`@bstage-sdk/core\`\uB97C \uC9C1\uC811 import\uD558\uC5EC \`createWebComponent()\`\uB97C \uD638\uCD9C\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 \`@bstage-sdk/react\`\uC758 API\uB9CC \uC0AC\uC6A9
|
|
973
|
+
- \uC804\uC5ED CSS \uD30C\uC77C(\`<link>\`, \uC678\uBD80 \uC2A4\uD0C0\uC77C\uC2DC\uD2B8)\uC744 \uC0AC\uC6A9\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 Shadow DOM \uB0B4\uBD80\uC5D0 \uC801\uC6A9\uB418\uC9C0 \uC54A\uB294\uB2E4.
|
|
974
|
+
- **\`import './style.css'\`\uB85C \uC2A4\uD0C0\uC77C\uC744 \uB123\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uBC30\uD3EC \uC0B0\uCD9C\uBB3C\uC5D0\uC11C \uC0AC\uB77C\uC9C4\uB2E4.** \uB85C\uCEEC \uAC1C\uBC1C \uD654\uBA74\uC5D0\uC11C\uB294 \uC801\uC6A9\uB418\uC5B4 \uB208\uCE58\uCC44\uAE30 \uC5B4\uB835\uB2E4. CSS \uD30C\uC77C\uC744 \uC4F0\uB824\uBA74 \`import css from './style.css?inline'\`\uC73C\uB85C \uBB38\uC790\uC5F4\uC744 \uAC00\uC838\uC640 \`createTemplate(..., { styles: css })\`\uC5D0 \uB118\uAE30\uAC70\uB098 \uCEF4\uD3EC\uB10C\uD2B8 \uC548 \`<style>{css}</style>\`\uB85C \uB80C\uB354\uD55C\uB2E4. inline \`style={{}}\`\uB3C4 \uB41C\uB2E4
|
|
975
|
+
- UI \uC0C9\xB7\uD0C0\uC774\uD3EC\xB7\uADF8\uB9BC\uC790\uB97C hex/rgb\uB85C \uD558\uB4DC\uCF54\uB529\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uC704 '\uB514\uC790\uC778' \uC139\uC158\uC758 \uB514\uC790\uC778 \uD1A0\uD070\uC744 \uC0AC\uC6A9
|
|
976
|
+
- \uC571\uD0A4(APP-ID \`bsa_\u2026\`\xB7APP KEY \`bsp_\u2026\`, \uC5B4\uB4DC\uBBFC \uAC8C\uC774\uD2B8\uC6E8\uC774 \`bsm_\u2026\`)\uB97C \uC18C\uC2A4 \uCF54\uB4DC\uC5D0 \uB9AC\uD130\uB7F4\uB85C \uB123\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uC778\uC99D \uAC12\uC740 \`.env\`(\uCEE4\uBC0B \uC548 \uB428)\uC5D0\uC11C \`import.meta.env.VITE_BSTAGE_*\`\uB85C\uB9CC \uC8FC\uC785\uD55C\uB2E4. pre-commit \uD6C5\uC774 \uCEE4\uBC0B \uC804 \uAC80\uCD9C\xB7\uCC28\uB2E8\uD558\uBA70 \`--no-verify\`\uB85C \uC6B0\uD68C\uD558\uC9C0 \uC54A\uB294\uB2E4
|
|
977
|
+
${SDK_API_FORBID_BULLETS}`;
|
|
978
|
+
}
|
|
979
|
+
function sdkManagedBody(space, projectName, target) {
|
|
980
|
+
const commandsSection = `- \`npm run dev\` \u2014 \uAC1C\uBC1C \uC11C\uBC84 \uC2E4\uD589 (\uC778\uC99D \uD504\uB85D\uC2DC \uD3EC\uD568)
|
|
981
|
+
- \uB85C\uADF8\uC778 \uD398\uC774\uC9C0: http://localhost:5173/__bstage__/login`;
|
|
982
|
+
return `# AGENTS.md
|
|
979
983
|
|
|
980
|
-
|
|
984
|
+
## \uD504\uB85C\uC81D\uD2B8 \uAC1C\uC694
|
|
981
985
|
|
|
982
|
-
|
|
986
|
+
b.stage \uC11C\uB4DC\uD30C\uD2F0 \uD15C\uD50C\uB9BF \uD504\uB85C\uC81D\uD2B8. React \uCEF4\uD3EC\uB10C\uD2B8\uB97C \uC791\uC131\uD558\uBA74 SDK\uAC00 Web Component\uB85C \uBE4C\uB4DC\uD558\uACE0, \uBE4C\uB4DC \uC0B0\uCD9C\uBB3C\uC774 b.stage \uD50C\uB7AB\uD3FC\uC5D0\uC11C \uB85C\uB4DC\uB418\uC5B4 \uC2E4\uD589\uB41C\uB2E4.
|
|
983
987
|
|
|
984
|
-
|
|
988
|
+
- **Space**: ${space}
|
|
989
|
+
- **\uB808\uD3EC**: \`${projectName}\`
|
|
985
990
|
|
|
986
|
-
|
|
987
|
-
- \uC2E4\uC81C \uC801\uC6A9\uC740 \`bstage-migrate\` \uC2A4\uD0AC\uC5D0\uAC8C \uB9E1\uAE34\uB2E4 \u2014 \uC5D0\uC774\uC804\uD2B8\uC5D0\uAC8C "bstage \uCD5C\uC2E0 \uBC84\uC804\uC73C\uB85C \uB9C8\uC774\uADF8\uB808\uC774\uC158 \uD574\uC918"\uB77C\uACE0 \uC694\uCCAD\uD558\uBA74, doctor \uACB0\uACFC\uC640 SDK\uC758 \`MIGRATION.md\`\uB97C \uC77D\uACE0 \uC774 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uB9DE\uCDB0 \uBCC0\uD658\uD55C\uB2E4(\uC0AC\uC6A9\uC790 \uCF54\uB4DC\uB294 \uB36E\uC5B4\uC4F0\uC9C0 \uC54A\uACE0 reconcile).
|
|
991
|
+
${SDK_DOCS_SECTION}
|
|
988
992
|
|
|
989
|
-
|
|
993
|
+
## \uD504\uB85C\uC81D\uD2B8 \uAD6C\uC870
|
|
994
|
+
|
|
995
|
+
\`\`\`
|
|
996
|
+
${SDK_STRUCTURE_BLOCK}
|
|
997
|
+
\`\`\`
|
|
998
|
+
|
|
999
|
+
## \uD15C\uD50C\uB9BF \uAC1C\uBC1C \uADDC\uCE59
|
|
1000
|
+
|
|
1001
|
+
${sdkTemplateRules(space)}
|
|
1002
|
+
|
|
1003
|
+
${designRulesBrief(target)}
|
|
1004
|
+
|
|
1005
|
+
## \uD658\uACBD \uC124\uC815
|
|
1006
|
+
|
|
1007
|
+
${SDK_ENV_SECTION}
|
|
1008
|
+
|
|
1009
|
+
## \uBA85\uB839\uC5B4
|
|
1010
|
+
|
|
1011
|
+
${commandsSection}
|
|
990
1012
|
|
|
991
|
-
|
|
1013
|
+
${sdkMigrationSection(SDK_SKILLS_LIST)}
|
|
992
1014
|
|
|
993
1015
|
## \uBE4C\uB4DC
|
|
994
1016
|
|
|
@@ -998,27 +1020,32 @@ ${deploySection()}
|
|
|
998
1020
|
|
|
999
1021
|
## \uAE08\uC9C0 \uC0AC\uD56D
|
|
1000
1022
|
|
|
1001
|
-
|
|
1002
|
-
- \`customElements.define()\`\uC744 \uC9C1\uC811 \uD638\uCD9C\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 \`createTemplate()\`\uC774 \uC790\uB3D9 \uCC98\uB9AC
|
|
1003
|
-
- Shadow DOM\uC744 \uC9C1\uC811 \uC870\uC791\uD558\uC9C0 \uC54A\uB294\uB2E4 (\`attachShadow\`, \`shadowRoot\` \uB4F1) \u2014 SDK\uAC00 \uAD00\uB9AC
|
|
1004
|
-
- \`createTemplate()\` \uD638\uCD9C\uC758 \uC778\uC790 \uAD6C\uC870\uB97C \uC784\uC758\uB85C \uBCC0\uACBD\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uBE4C\uB4DC \uD30C\uC774\uD504\uB77C\uC778\uC774 \uD30C\uC2F1\uC5D0 \uC2E4\uD328\uD560 \uC218 \uC788\uB2E4
|
|
1005
|
-
- \`@bstage-sdk/core\`\uB97C \uC9C1\uC811 import\uD558\uC5EC \`createWebComponent()\`\uB97C \uD638\uCD9C\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 \`@bstage-sdk/react\`\uC758 API\uB9CC \uC0AC\uC6A9
|
|
1006
|
-
- \uC804\uC5ED CSS \uD30C\uC77C(\`<link>\`, \uC678\uBD80 \uC2A4\uD0C0\uC77C\uC2DC\uD2B8)\uC744 \uC0AC\uC6A9\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 Shadow DOM \uB0B4\uBD80\uC5D0 \uC801\uC6A9\uB418\uC9C0 \uC54A\uB294\uB2E4.
|
|
1007
|
-
- **\`import './style.css'\`\uB85C \uC2A4\uD0C0\uC77C\uC744 \uB123\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uBC30\uD3EC \uC0B0\uCD9C\uBB3C\uC5D0\uC11C \uC0AC\uB77C\uC9C4\uB2E4.** \uB85C\uCEEC \uAC1C\uBC1C \uD654\uBA74\uC5D0\uC11C\uB294 \uC801\uC6A9\uB418\uC5B4 \uB208\uCE58\uCC44\uAE30 \uC5B4\uB835\uB2E4. CSS \uD30C\uC77C\uC744 \uC4F0\uB824\uBA74 \`import css from './style.css?inline'\`\uC73C\uB85C \uBB38\uC790\uC5F4\uC744 \uAC00\uC838\uC640 \`createTemplate(..., { styles: css })\`\uC5D0 \uB118\uAE30\uAC70\uB098 \uCEF4\uD3EC\uB10C\uD2B8 \uC548 \`<style>{css}</style>\`\uB85C \uB80C\uB354\uD55C\uB2E4. inline \`style={{}}\`\uB3C4 \uB41C\uB2E4
|
|
1008
|
-
- UI \uC0C9\xB7\uD0C0\uC774\uD3EC\xB7\uADF8\uB9BC\uC790\uB97C hex/rgb\uB85C \uD558\uB4DC\uCF54\uB529\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uC704 '\uB514\uC790\uC778' \uC139\uC158\uC758 \uB514\uC790\uC778 \uD1A0\uD070\uC744 \uC0AC\uC6A9
|
|
1009
|
-
- \uC571\uD0A4(APP-ID \`bsa_\u2026\`\xB7APP KEY \`bsp_\u2026\`, \uC5B4\uB4DC\uBBFC \uAC8C\uC774\uD2B8\uC6E8\uC774 \`bsm_\u2026\`)\uB97C \uC18C\uC2A4 \uCF54\uB4DC\uC5D0 \uB9AC\uD130\uB7F4\uB85C \uB123\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uC778\uC99D \uAC12\uC740 \`.env\`(\uCEE4\uBC0B \uC548 \uB428)\uC5D0\uC11C \`import.meta.env.VITE_BSTAGE_*\`\uB85C\uB9CC \uC8FC\uC785\uD55C\uB2E4. pre-commit \uD6C5\uC774 \uCEE4\uBC0B \uC804 \uAC80\uCD9C\xB7\uCC28\uB2E8\uD558\uBA70 \`--no-verify\`\uB85C \uC6B0\uD68C\uD558\uC9C0 \uC54A\uB294\uB2E4
|
|
1010
|
-
${apiForbidBullet}
|
|
1023
|
+
${sdkForbidBullets()}
|
|
1011
1024
|
`;
|
|
1012
1025
|
}
|
|
1013
|
-
|
|
1014
|
-
const structureBlock = `public/
|
|
1026
|
+
var LIQUID_STRUCTURE_BLOCK = `public/
|
|
1015
1027
|
user/ \u2014 \uC720\uC800 \uD50C\uB7AB\uD3FC\uC6A9 \uD15C\uD50C\uB9BF
|
|
1016
1028
|
{name}/
|
|
1017
1029
|
template.liquid \u2014 \uD15C\uD50C\uB9BF \uBCF8\uBB38 (\uD544\uC218, \uD30C\uC77C\uBA85 \uACE0\uC815)
|
|
1018
1030
|
data.json \u2014 \uB85C\uCEEC \uBBF8\uB9AC\uBCF4\uAE30\uC6A9 \uC0D8\uD50C \uB370\uC774\uD130 (\uBC30\uD3EC\uC5D0\uB294 \uB098\uAC00\uC9C0 \uC54A\uC74C)
|
|
1019
|
-
admin/ \u2014 \uC5B4\uB4DC\uBBFC\uC6A9 \uD15C\uD50C\uB9BF (\uAC19\uC740 \uADDC\uCE59)
|
|
1020
|
-
|
|
1021
|
-
|
|
1031
|
+
admin/ \u2014 \uC5B4\uB4DC\uBBFC\uC6A9 \uD15C\uD50C\uB9BF (\uAC19\uC740 \uADDC\uCE59)`;
|
|
1032
|
+
var LIQUID_DATA_SECTION = `## \uD50C\uB7AB\uD3FC\uC774 \uB123\uB294 \uB370\uC774\uD130 (\uC720\uC800 \uD654\uBA74)
|
|
1033
|
+
|
|
1034
|
+
\uCD5C\uC0C1\uC704 \uAC12\uC740 \uB2E4\uC12F \uAC1C\uB2E4 \u2014 \`lounges\` \xB7 \`stories\` \xB7 \`contentSections\` \xB7 \`latestContents\` \xB7 \`shopCategories\`. \uC774 \uC774\uB984 \uC678\uC758 \uBCC0\uC218\uB294 \uBE48 \uBB38\uC790\uC5F4\uC774 \uB41C\uB2E4. \uAC01 \uD56D\uBAA9\uC758 \uD544\uB4DC\uB294 \uC2E4\uC81C \uB80C\uB354 \uACB0\uACFC\uB85C \uD655\uC778\uD55C\uB2E4. \`data.json\` \uC0D8\uD50C\uB3C4 \uAC19\uC740 \uC774\uB984\uC744 \uC368\uC57C \uD504\uB9AC\uBDF0\uAC00 \uBC30\uD3EC\uC640 \uAC19\uC740 \uBAA8\uC591\uC774 \uB41C\uB2E4. \uC5B4\uB4DC\uBBFC \uD654\uBA74\uC774 \uBC1B\uB294 \uAC12\uC740 \uD655\uC778\uB418\uC9C0 \uC54A\uC558\uB2E4.`;
|
|
1035
|
+
var LIQUID_RULES_BULLETS = `- \uACBD\uB85C \uAE4A\uC774\uAC00 \uACE0\uC815\uC774\uB2E4 \u2014 \`public/{user|admin}/{name}/template.liquid\`(\uC608: \`public/user/welcome/template.liquid\`) \uC790\uB9AC\uC5D0 \uC788\uB294 \uD30C\uC77C\uB9CC \uC778\uC2DD\uD55C\uB2E4. \uB2E4\uB978 \uC704\uCE58\uC758 \uD30C\uC77C\uC740 **\uC870\uC6A9\uD788 \uBB34\uC2DC\uB41C\uB2E4**(\uBE4C\uB4DC\uB294 \uC131\uACF5\uD558\uB294\uB370 \uD654\uBA74\uC5D0 \uB098\uC624\uC9C0 \uC54A\uB294\uB2E4).
|
|
1036
|
+
- \`{name}\`\uC740 **\uC18C\uBB38\uC790\xB7\uC22B\uC790\xB7\uD558\uC774\uD508**\uB9CC \uC4F4\uB2E4. \uD3F4\uB354 \uD558\uB098\uAC00 \uD398\uC774\uC9C0 \uD558\uB098\uB2E4.
|
|
1037
|
+
- \uD30C\uC77C\uBA85\uC740 \uBC18\uB4DC\uC2DC \`template.liquid\`\uB2E4.
|
|
1038
|
+
- \`data.json\`\uC740 \uB85C\uCEEC \uBBF8\uB9AC\uBCF4\uAE30\uC6A9 \uC0D8\uD50C\uC77C \uBFD0\uC774\uB2E4. \uC2E4\uC81C \uAC12\uC740 \uD50C\uB7AB\uD3FC\uC774 \uB123\uC73C\uBBC0\uB85C, \uAC12\uC774 \uBE44\uC5B4 \uC788\uC5B4\uB3C4 \uD654\uBA74\uC774 \uAE68\uC9C0\uC9C0 \uC54A\uAC8C \uAE30\uBCF8\uAC12\xB7\uBE48 \uBAA9\uB85D \uBD84\uAE30\uB97C \uD568\uAED8 \uB123\uB294\uB2E4.
|
|
1039
|
+
- \uC791\uC131\xB7\uC218\uC815 \uC808\uCC28\uC640 \uBB38\uBC95 \uC694\uC810\uC740 \`bstage-liquid\` \uC2A4\uD0AC\uC744 \uB530\uB978\uB2E4.`;
|
|
1040
|
+
function liquidForbidBullets() {
|
|
1041
|
+
return `- liquid \uD15C\uD50C\uB9BF\uC744 \uC2AC\uB86F(\uC704\uC82F \uC790\uB9AC)\uC5D0 \uB123\uC73C\uB824 \uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 **PAGE \uBC30\uCE58\uB9CC \uAC00\uB2A5**\uD558\uB2E4
|
|
1042
|
+
- \`data.json\`\xB7\`layout.json\`\uC5D0 \uBC30\uD3EC\uC5D0 \uD544\uC694\uD55C \uC124\uC815\uC744 \uB2F4\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uD3EC\uD138\uC774 \uD328\uD0A4\uC9D5\uD560 \uB54C \uC9C0\uC6B4\uB2E4(\uB808\uC774\uC544\uC6C3\uC740 \uBC30\uCE58 \uC124\uC815\uC774 \uC18C\uC720)
|
|
1043
|
+
- \uADDC\uC57D \uBC16 \uACBD\uB85C\uC5D0 \uD15C\uD50C\uB9BF\uC744 \uB450\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uAE4A\uC774\uAC00 \uB2E4\uB974\uBA74 \uBB34\uC2DC\uB41C\uB2E4
|
|
1044
|
+
- \uC5D0\uC14B(\uC774\uBBF8\uC9C0\xB7\uC601\uC0C1)\uC744 \uB808\uD3EC\uC5D0 \uB450\uACE0 \uC0C1\uB300 \uACBD\uB85C\uB85C \uCC38\uC870\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uBC30\uD3EC \uD6C4 \uAE68\uC9C4\uB2E4. \uD3EC\uD138 \uD654\uBA74\uC758 \uC2A4\uD14C\uC774\uC9C0 > \uBBF8\uB514\uC5B4\uC5D0 \uC62C\uB824 \uBC1B\uC740 URL\uC744 \uC808\uB300 \uC8FC\uC18C\uB85C \uB123\uB294\uB2E4(\uC774\uBBF8\uC9C0\xB7\uC601\uC0C1\uB9CC \uC62C\uB9B4 \uC218 \uC788\uACE0 \uD5C8\uC6A9 \uD615\uC2DD\xB7\uC6A9\uB7C9 \uD55C\uB3C4\uB294 \uC5C5\uB85C\uB4DC\uD560 \uB54C \uD654\uBA74\uC774 \uC54C\uB824 \uC900\uB2E4). \uB85C\uCEEC \uD504\uB9AC\uBDF0\uC5D0\uC11C\uB294 \uC0C1\uB300 \uACBD\uB85C\uB3C4 \uBCF4\uC774\uBBC0\uB85C \uD504\uB9AC\uBDF0 \uACB0\uACFC\uB97C \uADFC\uAC70\uB85C \uC0BC\uC9C0 \uC54A\uB294\uB2E4
|
|
1045
|
+
- \uD50C\uB7AB\uD3FC\uC774 \uB123\uC5B4 \uC8FC\uB294 \uB370\uC774\uD130\uC758 \uC774\uB984\xB7\uAD6C\uC870\uB97C \uCD94\uCE21\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uCD5C\uC0C1\uC704 \uC774\uB984\uC740 \uC704 '\uD50C\uB7AB\uD3FC\uC774 \uB123\uB294 \uB370\uC774\uD130' \uC808\uC774 \uC804\uBD80\uC774\uACE0, \uADF8 \uC548\uC758 \uD544\uB4DC\uB294 \uC2E4\uC81C \uB80C\uB354 \uACB0\uACFC\uB85C \uD655\uC778\uD55C\uB2E4
|
|
1046
|
+
- \`{% render %}\`\xB7\`{% include %}\`(\uD30C\uC15C)\uB97C \uC4F0\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uBC30\uD3EC \uBDF0\uC5B4\uC5D0\uC11C \uBE48 \uBB38\uC790\uC5F4\uC774 \uB41C\uB2E4(\uB85C\uCEEC \uD504\uB9AC\uBDF0\uC5D0\uC11C\uB9CC \uB3D9\uC791). \uD15C\uD50C\uB9BF\uC740 \`template.liquid\` \uD55C \uD30C\uC77C\uC5D0 \uB2F4\uB294\uB2E4`;
|
|
1047
|
+
}
|
|
1048
|
+
function liquidManagedBody(space, projectName) {
|
|
1022
1049
|
return `# AGENTS.md
|
|
1023
1050
|
|
|
1024
1051
|
## \uD504\uB85C\uC81D\uD2B8 \uAC1C\uC694
|
|
@@ -1036,23 +1063,19 @@ b.stage liquid \uD14C\uB9C8 \uD504\uB85C\uC81D\uD2B8. \`.liquid\` \uD15C\uD50C\u
|
|
|
1036
1063
|
- \uC791\uC131 \uADDC\uC57D\xB7\uB370\uC774\uD130\xB7\uC5D0\uC14B: \`.claude/skills/bstage-liquid/SKILL.md\`
|
|
1037
1064
|
- \uBB38\uBC95(\uD0DC\uADF8\xB7\uD544\uD130): liquidjs \uACF5\uC2DD \uBB38\uC11C
|
|
1038
1065
|
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
\uCD5C\uC0C1\uC704 \uAC12\uC740 \uB2E4\uC12F \uAC1C\uB2E4 \u2014 \`lounges\` \xB7 \`stories\` \xB7 \`contentSections\` \xB7 \`latestContents\` \xB7 \`shopCategories\`. \uC774 \uC774\uB984 \uC678\uC758 \uBCC0\uC218\uB294 \uBE48 \uBB38\uC790\uC5F4\uC774 \uB41C\uB2E4. \uAC01 \uD56D\uBAA9\uC758 \uD544\uB4DC\uB294 \uC2E4\uC81C \uB80C\uB354 \uACB0\uACFC\uB85C \uD655\uC778\uD55C\uB2E4. \`data.json\` \uC0D8\uD50C\uB3C4 \uAC19\uC740 \uC774\uB984\uC744 \uC368\uC57C \uD504\uB9AC\uBDF0\uAC00 \uBC30\uD3EC\uC640 \uAC19\uC740 \uBAA8\uC591\uC774 \uB41C\uB2E4. \uC5B4\uB4DC\uBBFC \uD654\uBA74\uC774 \uBC1B\uB294 \uAC12\uC740 \uD655\uC778\uB418\uC9C0 \uC54A\uC558\uB2E4.
|
|
1066
|
+
${LIQUID_DATA_SECTION}
|
|
1042
1067
|
|
|
1043
1068
|
## \uD504\uB85C\uC81D\uD2B8 \uAD6C\uC870
|
|
1044
1069
|
|
|
1045
1070
|
\`\`\`
|
|
1046
|
-
${
|
|
1071
|
+
${LIQUID_STRUCTURE_BLOCK}
|
|
1072
|
+
package.json
|
|
1073
|
+
AGENTS.md \u2014 \uC774 \uD30C\uC77C
|
|
1047
1074
|
\`\`\`
|
|
1048
1075
|
|
|
1049
1076
|
## \uD15C\uD50C\uB9BF \uC791\uC131 \uADDC\uCE59
|
|
1050
1077
|
|
|
1051
|
-
|
|
1052
|
-
- \`{name}\`\uC740 **\uC18C\uBB38\uC790\xB7\uC22B\uC790\xB7\uD558\uC774\uD508**\uB9CC \uC4F4\uB2E4. \uD3F4\uB354 \uD558\uB098\uAC00 \uD398\uC774\uC9C0 \uD558\uB098\uB2E4.
|
|
1053
|
-
- \uD30C\uC77C\uBA85\uC740 \uBC18\uB4DC\uC2DC \`template.liquid\`\uB2E4.
|
|
1054
|
-
- \`data.json\`\uC740 \uB85C\uCEEC \uBBF8\uB9AC\uBCF4\uAE30\uC6A9 \uC0D8\uD50C\uC77C \uBFD0\uC774\uB2E4. \uC2E4\uC81C \uAC12\uC740 \uD50C\uB7AB\uD3FC\uC774 \uB123\uC73C\uBBC0\uB85C, \uAC12\uC774 \uBE44\uC5B4 \uC788\uC5B4\uB3C4 \uD654\uBA74\uC774 \uAE68\uC9C0\uC9C0 \uC54A\uAC8C \uAE30\uBCF8\uAC12\xB7\uBE48 \uBAA9\uB85D \uBD84\uAE30\uB97C \uD568\uAED8 \uB123\uB294\uB2E4.
|
|
1055
|
-
- \uC791\uC131\xB7\uC218\uC815 \uC808\uCC28\uC640 \uBB38\uBC95 \uC694\uC810\uC740 \`bstage-liquid\` \uC2A4\uD0AC\uC744 \uB530\uB978\uB2E4.
|
|
1078
|
+
${LIQUID_RULES_BULLETS}
|
|
1056
1079
|
|
|
1057
1080
|
## \uBA85\uB839\uC5B4
|
|
1058
1081
|
|
|
@@ -1070,13 +1093,72 @@ ${deploySection()}
|
|
|
1070
1093
|
|
|
1071
1094
|
## \uAE08\uC9C0 \uC0AC\uD56D
|
|
1072
1095
|
|
|
1073
|
-
- \
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1096
|
+
- React(sdk) \uD15C\uD50C\uB9BF\uC744 \uC774 \uB808\uD3EC\uC5D0 \uCD94\uAC00\uD574 \uD63C\uD569 \uB808\uD3EC\uB85C \uB9CC\uB4E4 \uB54C\uB294 sdk \uD398\uC774\uC9C0 \uD3F4\uB354 \uC774\uB984\uC5D0 \`user\`\xB7\`admin\`\uC744 \uC4F0\uC9C0 \uC54A\uB294\uB2E4(\uB300\uC18C\uBB38\uC790 \uBB34\uC2DC) \u2014 \uADF8 \uC790\uB9AC\uB294 liquid \uC0B0\uCD9C\uBB3C(\`dist/{user|admin}/{name}/\`)\uACFC \uACB9\uCCD0 \`bstage build\`\uAC00 \uC885\uB8CC \uCF54\uB4DC 2\uB85C \uB9C9\uB294\uB2E4. \uCD94\uAC00\uD55C \uB4A4 \`npx @bstage-sdk/cli@latest ai update\`\uB97C \uB3CC\uB9AC\uBA74 \uC774 \uD30C\uC77C\uC774 \uD63C\uD569 \uBCF8\uBB38\uC73C\uB85C \uBC14\uB010\uB2E4
|
|
1097
|
+
${liquidForbidBullets()}
|
|
1098
|
+
`;
|
|
1099
|
+
}
|
|
1100
|
+
var MIXED_SKILLS_LIST = "`bstage-template` React \uC791\uC131, `bstage-liquid` liquid \uC791\uC131, `bstage-deploy` \uBC30\uD3EC, `bstage-onboarding` \uCC98\uC74C\uBD80\uD130 \uB05D\uAE4C\uC9C0, `bstage-migrate` \uB9C8\uC774\uADF8\uB808\uC774\uC158";
|
|
1101
|
+
function mixedManagedBody(space, projectName, target) {
|
|
1102
|
+
return `# AGENTS.md
|
|
1103
|
+
|
|
1104
|
+
## \uD504\uB85C\uC81D\uD2B8 \uAC1C\uC694
|
|
1105
|
+
|
|
1106
|
+
b.stage \uCEE4\uC2A4\uD140 \uD15C\uD50C\uB9BF \uD504\uB85C\uC81D\uD2B8 \u2014 **\uD63C\uD569 \uB808\uD3EC**. React \uCEF4\uD3EC\uB10C\uD2B8(sdk) \uD15C\uD50C\uB9BF\uACFC \`.liquid\` \uD15C\uD50C\uB9BF\uC774 \uD55C \uB808\uD3EC\uC5D0 \uC788\uB2E4. \uD3EC\uD138\uC740 sdk \uD15C\uD50C\uB9BF\uC744 Web Component\uB85C \uBE4C\uB4DC\uD55C \uB4A4 liquid \uD15C\uD50C\uB9BF\uC744 \uADF8\uB300\uB85C \uD568\uAED8 \uD328\uD0A4\uC9D5\uD558\uACE0, \uC0B0\uCD9C\uBB3C \uD56D\uBAA9\uB9C8\uB2E4 \uC885\uB958(sdk\xB7liquid)\uB97C \uB530\uB85C \uBCF8\uB2E4.
|
|
1107
|
+
|
|
1108
|
+
- **Space**: ${space}
|
|
1109
|
+
- **\uB808\uD3EC**: \`${projectName}\`
|
|
1110
|
+
|
|
1111
|
+
${SDK_DOCS_SECTION}
|
|
1112
|
+
|
|
1113
|
+
liquid \uC791\uC131 \uADDC\uC57D\xB7\uB370\uC774\uD130 \uACC4\uC57D\uC740 \uC544\uB798 \uC808\uACFC \`.claude/skills/bstage-liquid/SKILL.md\`\uAC00 \uC9C1\uC811 \uB4E4\uACE0 \uC788\uB2E4. \uBB38\uBC95(\uD0DC\uADF8\xB7\uD544\uD130)\uC740 liquidjs \uACF5\uC2DD \uBB38\uC11C.
|
|
1114
|
+
|
|
1115
|
+
## \uD504\uB85C\uC81D\uD2B8 \uAD6C\uC870
|
|
1116
|
+
|
|
1117
|
+
\`\`\`
|
|
1118
|
+
${SDK_STRUCTURE_BLOCK}
|
|
1119
|
+
${LIQUID_STRUCTURE_BLOCK}
|
|
1120
|
+
\`\`\`
|
|
1121
|
+
|
|
1122
|
+
## \uD63C\uD569 \uB808\uD3EC \uADDC\uCE59
|
|
1123
|
+
|
|
1124
|
+
- **\uC5B4\uB290 \uBC29\uC2DD\uC73C\uB85C \uB9CC\uB4E4\uAE4C**: \uC0C1\uD638\uC791\uC6A9\xB7\uC0C1\uD0DC\xB7API \uD638\uCD9C\uC774 \uD544\uC694\uD55C \uD654\uBA74\uC740 React(\`src/pages\`\xB7\`src/slots\`), \uB370\uC774\uD130\uB97C \uBC1B\uC544 \uADF8\uB824 \uC8FC\uAE30\uB9CC \uD558\uBA74 \uB418\uB294 \uD654\uBA74\uC740 liquid(\`public/{user|admin}/{name}/\`). \uAC19\uC740 \uD654\uBA74\uC744 \uB450 \uBC29\uC2DD\uC73C\uB85C \uB9CC\uB4E4\uC9C0 \uC54A\uB294\uB2E4.
|
|
1125
|
+
- **\uC608\uC57D \uC774\uB984**: sdk \uD398\uC774\uC9C0 \uD3F4\uB354 \`src/pages/user/\u2026\`\xB7\`src/pages/admin/\u2026\`\uC740 \uB9CC\uB4E4 \uC218 \uC5C6\uB2E4(\uB300\uC18C\uBB38\uC790 \uBB34\uC2DC \u2014 \`User\`\uB3C4 \uAC19\uB2E4). \uC0B0\uCD9C\uBB3C\uC774 \`dist/{user|admin}/\u2026\`\uB85C \uB098\uAC00 liquid \uC0B0\uCD9C\uBB3C \uC790\uB9AC\uC640 \uACB9\uCE58\uACE0, \uAC19\uC740 \uB514\uB809\uD130\uB9AC\uC5D0 \`template.js\`\xB7\`template.liquid\`\uAC00 \uD568\uAED8 \uC788\uC73C\uBA74 \uD3EC\uD138\uC774 sdk\uB85C\uB9CC \uD310\uC815\uD574 liquid\uAC00 \uC870\uC6A9\uD788 \uC0AC\uB77C\uC9C4\uB2E4. \`bstage build\`\uC640 \uD3EC\uD138 \uBE4C\uB354\uAC00 \uBAA8\uB450 \uC5EC\uAE30\uC11C \uB9C9\uB294\uB2E4. \uC704\uC82F(\`src/slots\`)\uC740 \uD574\uB2F9 \uC5C6\uB2E4.
|
|
1126
|
+
- **\`bstage build\`**: sdk \uC5D4\uD2B8\uB9AC\uB97C \uBC88\uB4E4\uD558\uACE0 liquid\uB294 \uAC80\uC99D\uB9CC \uD55C\uB2E4 \u2014 \`dist/\`\uC5D0 liquid\uB294 \uB4E4\uC5B4\uAC00\uC9C0 \uC54A\uB294\uB2E4(\uD3EC\uD138\uC774 push\uB41C \uCEE4\uBC0B\uC758 \`public/\`\uC5D0\uC11C \uD328\uD0A4\uC9D5). \uAC80\uC99D \uC624\uB958\uAC00 \uC788\uC73C\uBA74 \uBC88\uB4E4\uD558\uC9C0 \uC54A\uACE0 \uC885\uB8CC \uCF54\uB4DC 2.
|
|
1127
|
+
- **\`bstage dev\`**: \uAE30\uBCF8\uC740 sdk(Vite) \uD504\uB9AC\uBDF0. liquid \uD504\uB9AC\uBDF0\uB294 \`bstage dev --kind liquid\`\uB85C \uB530\uB85C \uB744\uC6B4\uB2E4 \u2014 \uB450 \uC11C\uBC84\uB97C \uD568\uAED8 \uB744\uC6B0\uC9C0 \uC54A\uB294\uB2E4.
|
|
1128
|
+
- liquid \uD15C\uD50C\uB9BF\uC740 PAGE \uBC30\uCE58\uB9CC \uB41C\uB2E4. \uC704\uC82F \uC790\uB9AC\uC5D0\uB294 sdk \uC704\uC82F(\`src/slots\`)\uB9CC \uBD99\uC778\uB2E4.
|
|
1129
|
+
|
|
1130
|
+
## React \uD15C\uD50C\uB9BF \uAC1C\uBC1C \uADDC\uCE59
|
|
1131
|
+
|
|
1132
|
+
${sdkTemplateRules(space)}
|
|
1133
|
+
|
|
1134
|
+
## liquid \uD15C\uD50C\uB9BF \uC791\uC131 \uADDC\uCE59
|
|
1135
|
+
|
|
1136
|
+
${LIQUID_RULES_BULLETS}
|
|
1137
|
+
|
|
1138
|
+
${LIQUID_DATA_SECTION}
|
|
1139
|
+
|
|
1140
|
+
${designRulesBrief(target)}
|
|
1141
|
+
|
|
1142
|
+
## \uD658\uACBD \uC124\uC815
|
|
1143
|
+
|
|
1144
|
+
${SDK_ENV_SECTION}
|
|
1145
|
+
|
|
1146
|
+
## \uBA85\uB839\uC5B4
|
|
1147
|
+
|
|
1148
|
+
- \`npm run dev\` \uB610\uB294 \`bstage dev\` \u2014 sdk(Vite) \uAC1C\uBC1C \uC11C\uBC84(\uC778\uC99D \uD504\uB85D\uC2DC \uD3EC\uD568). \uB85C\uADF8\uC778 \uD398\uC774\uC9C0: http://localhost:5173/__bstage__/login
|
|
1149
|
+
- \`bstage dev --kind liquid\` \u2014 liquid \uBBF8\uB9AC\uBCF4\uAE30(\uBAA9\uB85D\uC5D0\uC11C \uD15C\uD50C\uB9BF\uC744 \uACE8\uB77C \uD655\uC778, \`data.json\`\uC73C\uB85C \uB80C\uB354)
|
|
1150
|
+
- \`bstage build\` \u2014 sdk \uBC88\uB4E4 + liquid \uAC80\uC99D
|
|
1151
|
+
- \`bstage deploy\` \u2014 \uD3EC\uD138 \uBC30\uD3EC (\uC544\uB798 "\uBC30\uD3EC" \uC808)
|
|
1152
|
+
|
|
1153
|
+
${sdkMigrationSection(MIXED_SKILLS_LIST)}
|
|
1154
|
+
|
|
1155
|
+
${deploySection()}
|
|
1156
|
+
|
|
1157
|
+
## \uAE08\uC9C0 \uC0AC\uD56D
|
|
1158
|
+
|
|
1159
|
+
- sdk \uD398\uC774\uC9C0\uB97C \`src/pages/user\`\xB7\`src/pages/admin\` \uC544\uB798\uC5D0 \uB9CC\uB4E4\uC9C0 \uC54A\uB294\uB2E4 \u2014 liquid \uC0B0\uCD9C\uBB3C \uC790\uB9AC\uC640 \uACB9\uCE5C\uB2E4(\uC704 '\uD63C\uD569 \uB808\uD3EC \uADDC\uCE59')
|
|
1160
|
+
${sdkForbidBullets()}
|
|
1161
|
+
${liquidForbidBullets()}
|
|
1080
1162
|
`;
|
|
1081
1163
|
}
|
|
1082
1164
|
function renderManagedBlock(opts) {
|
package/dist/index.d.cts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
/** 번들에 심긴 ai-toolkit 버전. */
|
|
2
2
|
declare const VERSION: string;
|
|
3
3
|
|
|
4
|
-
/**
|
|
5
|
-
|
|
4
|
+
/**
|
|
5
|
+
* 스킬이 설치되는 프로젝트 종류 — sdk 템플릿 프로젝트 / liquid 테마 프로젝트 / 혼합(둘 다 한 레포).
|
|
6
|
+
* `mixed`는 판정 결과로만 나온다(`--kind`로 지정하는 값이 아니다) — 스킬 목록은 두 세트의 합집합이고
|
|
7
|
+
* AGENTS.md는 혼합 본문이다. 각 스킬의 `kinds`에는 단일 종류만 적는다(mixed는 파생).
|
|
8
|
+
*/
|
|
9
|
+
type ProjectKind = 'sdk' | 'liquid' | 'mixed';
|
|
6
10
|
/** 디자인 토큰 타깃 — 유저(유저 플랫폼) / 어드민(어드민 플랫폼) */
|
|
7
11
|
type DesignTarget = 'user' | 'admin';
|
|
8
12
|
/** 스킬 본문을 렌더링할 때 넘기는 프로젝트 맥락 */
|
|
@@ -25,7 +29,10 @@ interface BstageSkill {
|
|
|
25
29
|
content: (ctx: SkillContext) => string;
|
|
26
30
|
}
|
|
27
31
|
declare const BSTAGE_SKILLS: BstageSkill[];
|
|
28
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* 해당 프로젝트 종류에 설치할 스킬만 골라낸다. 혼합 레포는 sdk 세트와 liquid 세트의 합집합이다 —
|
|
34
|
+
* React 템플릿과 liquid 템플릿을 둘 다 작성하므로 어느 한쪽 작성 스킬도 빠지면 안 된다.
|
|
35
|
+
*/
|
|
29
36
|
declare function skillsFor(kind: ProjectKind): BstageSkill[];
|
|
30
37
|
|
|
31
38
|
/**
|
|
@@ -54,14 +61,16 @@ interface AgentsMdOptions {
|
|
|
54
61
|
projectName: string;
|
|
55
62
|
/** 디자인 토큰 타깃(user/admin). 미지정 시 user. */
|
|
56
63
|
target?: DesignTarget;
|
|
57
|
-
/** 프로젝트 종류(sdk/liquid). 미지정 시 sdk. */
|
|
64
|
+
/** 프로젝트 종류(sdk/liquid/mixed). 미지정 시 sdk. */
|
|
58
65
|
kind?: ProjectKind;
|
|
59
66
|
}
|
|
60
67
|
/**
|
|
61
68
|
* SDK가 관리하는 AGENTS.md 본문(마커 미포함).
|
|
62
69
|
* 이 본문이 바뀌면 `agentsMdRegion.ts`의 `AGENTS_MANAGED_VERSION`을 올린다(doctor가 갱신 필요를 감지).
|
|
63
70
|
*
|
|
64
|
-
* `kind`로 프로젝트 종류를 가른다 — 기본은 `sdk`라 기존 호출부는 바뀌지 않는다.
|
|
71
|
+
* `kind`로 프로젝트 종류를 가른다 — 기본은 `sdk`라 기존 호출부는 바뀌지 않는다. `mixed`(sdk 템플릿 +
|
|
72
|
+
* liquid 템플릿이 한 레포)는 두 본문의 절을 합친 혼합 본문이다 — 절반씩 섞어 "이 프로젝트에 없는 규칙"을
|
|
73
|
+
* 만들지 않도록, 각 절은 두 kind가 공유하는 조각 함수에서 가져온다.
|
|
65
74
|
*/
|
|
66
75
|
declare function agentsManagedBody({ space, projectName, target, kind, }: AgentsMdOptions): string;
|
|
67
76
|
/** SDK 관리 영역(마커 포함) 블록만 렌더링한다. ai install|update/migrate의 결정론적 치환에 쓴다. */
|
|
@@ -87,7 +96,7 @@ declare function agentsMd(opts: AgentsMdOptions): string;
|
|
|
87
96
|
* 결정론적으로 판단하는 근거. (본문은 space/projectName로 파라미터화되므로 내용 직접 비교 대신
|
|
88
97
|
* 버전 토큰으로 staleness를 본다.)
|
|
89
98
|
*/
|
|
90
|
-
declare const AGENTS_MANAGED_VERSION =
|
|
99
|
+
declare const AGENTS_MANAGED_VERSION = 14;
|
|
91
100
|
/** 본문을 관리 영역 마커로 감싼다. */
|
|
92
101
|
declare function wrapManaged(body: string): string;
|
|
93
102
|
/** init이 새 프로젝트에 까는 기본 자유 영역 스캐폴드(빈 섹션). */
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
/** 번들에 심긴 ai-toolkit 버전. */
|
|
2
2
|
declare const VERSION: string;
|
|
3
3
|
|
|
4
|
-
/**
|
|
5
|
-
|
|
4
|
+
/**
|
|
5
|
+
* 스킬이 설치되는 프로젝트 종류 — sdk 템플릿 프로젝트 / liquid 테마 프로젝트 / 혼합(둘 다 한 레포).
|
|
6
|
+
* `mixed`는 판정 결과로만 나온다(`--kind`로 지정하는 값이 아니다) — 스킬 목록은 두 세트의 합집합이고
|
|
7
|
+
* AGENTS.md는 혼합 본문이다. 각 스킬의 `kinds`에는 단일 종류만 적는다(mixed는 파생).
|
|
8
|
+
*/
|
|
9
|
+
type ProjectKind = 'sdk' | 'liquid' | 'mixed';
|
|
6
10
|
/** 디자인 토큰 타깃 — 유저(유저 플랫폼) / 어드민(어드민 플랫폼) */
|
|
7
11
|
type DesignTarget = 'user' | 'admin';
|
|
8
12
|
/** 스킬 본문을 렌더링할 때 넘기는 프로젝트 맥락 */
|
|
@@ -25,7 +29,10 @@ interface BstageSkill {
|
|
|
25
29
|
content: (ctx: SkillContext) => string;
|
|
26
30
|
}
|
|
27
31
|
declare const BSTAGE_SKILLS: BstageSkill[];
|
|
28
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* 해당 프로젝트 종류에 설치할 스킬만 골라낸다. 혼합 레포는 sdk 세트와 liquid 세트의 합집합이다 —
|
|
34
|
+
* React 템플릿과 liquid 템플릿을 둘 다 작성하므로 어느 한쪽 작성 스킬도 빠지면 안 된다.
|
|
35
|
+
*/
|
|
29
36
|
declare function skillsFor(kind: ProjectKind): BstageSkill[];
|
|
30
37
|
|
|
31
38
|
/**
|
|
@@ -54,14 +61,16 @@ interface AgentsMdOptions {
|
|
|
54
61
|
projectName: string;
|
|
55
62
|
/** 디자인 토큰 타깃(user/admin). 미지정 시 user. */
|
|
56
63
|
target?: DesignTarget;
|
|
57
|
-
/** 프로젝트 종류(sdk/liquid). 미지정 시 sdk. */
|
|
64
|
+
/** 프로젝트 종류(sdk/liquid/mixed). 미지정 시 sdk. */
|
|
58
65
|
kind?: ProjectKind;
|
|
59
66
|
}
|
|
60
67
|
/**
|
|
61
68
|
* SDK가 관리하는 AGENTS.md 본문(마커 미포함).
|
|
62
69
|
* 이 본문이 바뀌면 `agentsMdRegion.ts`의 `AGENTS_MANAGED_VERSION`을 올린다(doctor가 갱신 필요를 감지).
|
|
63
70
|
*
|
|
64
|
-
* `kind`로 프로젝트 종류를 가른다 — 기본은 `sdk`라 기존 호출부는 바뀌지 않는다.
|
|
71
|
+
* `kind`로 프로젝트 종류를 가른다 — 기본은 `sdk`라 기존 호출부는 바뀌지 않는다. `mixed`(sdk 템플릿 +
|
|
72
|
+
* liquid 템플릿이 한 레포)는 두 본문의 절을 합친 혼합 본문이다 — 절반씩 섞어 "이 프로젝트에 없는 규칙"을
|
|
73
|
+
* 만들지 않도록, 각 절은 두 kind가 공유하는 조각 함수에서 가져온다.
|
|
65
74
|
*/
|
|
66
75
|
declare function agentsManagedBody({ space, projectName, target, kind, }: AgentsMdOptions): string;
|
|
67
76
|
/** SDK 관리 영역(마커 포함) 블록만 렌더링한다. ai install|update/migrate의 결정론적 치환에 쓴다. */
|
|
@@ -87,7 +96,7 @@ declare function agentsMd(opts: AgentsMdOptions): string;
|
|
|
87
96
|
* 결정론적으로 판단하는 근거. (본문은 space/projectName로 파라미터화되므로 내용 직접 비교 대신
|
|
88
97
|
* 버전 토큰으로 staleness를 본다.)
|
|
89
98
|
*/
|
|
90
|
-
declare const AGENTS_MANAGED_VERSION =
|
|
99
|
+
declare const AGENTS_MANAGED_VERSION = 14;
|
|
91
100
|
/** 본문을 관리 영역 마커로 감싼다. */
|
|
92
101
|
declare function wrapManaged(body: string): string;
|
|
93
102
|
/** init이 새 프로젝트에 까는 기본 자유 영역 스캐폴드(빈 섹션). */
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/version.ts
|
|
2
|
-
var VERSION = "0.
|
|
2
|
+
var VERSION = "0.6.0";
|
|
3
3
|
|
|
4
4
|
// src/skills/deploy.ts
|
|
5
5
|
function deploySkillMd() {
|
|
@@ -219,7 +219,7 @@ public/
|
|
|
219
219
|
|
|
220
220
|
# \uD568\uC815
|
|
221
221
|
|
|
222
|
-
- **sdk\uC640
|
|
222
|
+
- **sdk\uC640 \uD568\uAED8 \uC788\uB294 \uB808\uD3EC(\uD63C\uD569)\uC5D0\uC11C\uB294 \uC790\uB9AC\uB97C \uB098\uB208\uB2E4.** \`template.tsx\`(React)\uC640 \`.liquid\`\uAC00 \uD55C \uB808\uD3EC\uC5D0 \uC788\uC5B4\uB3C4 \uD3EC\uD138\uC774 sdk\uB97C \uBE4C\uB4DC\uD55C \uB4A4 liquid\uB97C \uD568\uAED8 \uD328\uD0A4\uC9D5\uD55C\uB2E4. \uB2E8 sdk \uD398\uC774\uC9C0 \uD3F4\uB354 \`src/pages/user\`\xB7\`src/pages/admin\`\uC740 liquid \uC0B0\uCD9C\uBB3C \uC790\uB9AC(\`dist/{user|admin}/\`)\uC640 \uACB9\uCCD0 \`bstage build\`\uAC00 \uC885\uB8CC \uCF54\uB4DC 2\uB85C \uB9C9\uB294\uB2E4(\uB300\uC18C\uBB38\uC790 \uBB34\uC2DC). \uD63C\uD569 \uB808\uD3EC\uC758 liquid \uBBF8\uB9AC\uBCF4\uAE30\uB294 \`bstage dev --kind liquid\`.
|
|
223
223
|
- **liquid\uB294 PAGE \uBC30\uCE58\uB9CC \uAC00\uB2A5\uD558\uB2E4.** \uC2AC\uB86F(\uC704\uC82F \uC790\uB9AC)\uC5D0\uB294 \uB123\uC744 \uC218 \uC5C6\uB2E4. \uD3EC\uD138\uC5D0\uC11C \uD398\uC774\uC9C0\uB97C \uB9CC\uB4E4 \uB54C \uCEE4\uC2A4\uD140 \uBC29\uC2DD\uC73C\uB85C \`liquid\`\uB97C \uACE0\uB978\uB2E4.
|
|
224
224
|
- **\`data.json\`\uC740 \uB85C\uCEEC \uC804\uC6A9\uC774\uB2E4.** \uD3EC\uD138\uC774 \uD328\uD0A4\uC9D5\uD560 \uB54C \uC9C0\uC6B4\uB2E4. \uC2E4\uC81C \uB370\uC774\uD130\uC758 \uCD9C\uCC98\uAC00 \uC544\uB2C8\uBBC0\uB85C \uC5EC\uAE30 \uAC12\uC744 \uB9DE\uCDB0 \uB450\uACE0 "\uBC30\uD3EC\uD558\uBA74 \uC774 \uAC12\uC774 \uB098\uC628\uB2E4"\uACE0 \uAE30\uB300\uD558\uC9C0 \uC54A\uB294\uB2E4.
|
|
225
225
|
- **\`layout.json\`\uB3C4 \uC9C0\uC6CC\uC9C4\uB2E4.** \uB808\uC774\uC544\uC6C3\uC740 \uBC30\uCE58 \uC124\uC815\uC774 \uC18C\uC720\uD55C\uB2E4 \u2014 \uB808\uD3EC\uC5D0\uC11C \uC815\uD558\uB824 \uD558\uC9C0 \uC54A\uB294\uB2E4.
|
|
@@ -422,7 +422,7 @@ description: b.stage \uCEE4\uC2A4\uD140 \uAC1C\uBC1C\uC744 \uCC98\uC74C\uBD80\uD
|
|
|
422
422
|
- **liquid \uD15C\uD50C\uB9BF**: \uB370\uC774\uD130\uB97C \uBC1B\uC544 \uADF8\uB824 \uC8FC\uAE30\uB9CC \uD558\uBA74 \uB418\uB294 \uD654\uBA74\uC5D0 \uB9DE\uB294\uB2E4. \uBC30\uC6B0\uAE30 \uC27D\uACE0 \uBE60\uB974\uC9C0\uB9CC \uBE0C\uB77C\uC6B0\uC800 \uCABD \uB85C\uC9C1\uC740 \uC81C\uD55C\uB41C\uB2E4.
|
|
423
423
|
- **(c) \uC5B4\uB514\uC5D0 \uBC30\uD3EC\uD558\uB098** \u2014 \uBC30\uD3EC \uD658\uACBD(phase)\uACFC \uC2A4\uD14C\uC774\uC9C0 ID. \uBAA8\uB974\uBA74 "\uD3EC\uD138\uC5D0 \uB85C\uADF8\uC778\uD588\uC744 \uB54C \uBCF4\uC774\uB294 \uC2A4\uD14C\uC774\uC9C0 \uC774\uB984"\uC774\uB77C\uACE0 \uC54C\uB824\uC8FC\uACE0, 1\uB2E8\uACC4\uC5D0\uC11C\uB294 \uBE44\uC6CC \uB454 \uCC44 \uC9C4\uD589\uD574\uB3C4 \uB41C\uB2E4(6\uB2E8\uACC4\uC5D0\uC11C \`bstage link\`\uAC00 \uBAA9\uB85D\uC73C\uB85C \uBB3C\uC5B4\uBCF8\uB2E4).
|
|
424
424
|
|
|
425
|
-
\uD55C \uB808\uD3EC\uC5D0\
|
|
425
|
+
\uD55C \uB808\uD3EC\uC5D0 \uB450 \uBC29\uC2DD\uC744 \uD568\uAED8 \uB458 \uC218\uB3C4 \uC788\uB2E4(\uD63C\uD569 \uB808\uD3EC) \u2014 \uD3EC\uD138\uC774 React \uD15C\uD50C\uB9BF\uC744 \uBE4C\uB4DC\uD55C \uB4A4 liquid \uD15C\uD50C\uB9BF\uC744 \uD568\uAED8 \uD328\uD0A4\uC9D5\uD55C\uB2E4. \uB2E4\uB9CC \uAC19\uC740 \uD654\uBA74\uC744 \uB450 \uBC29\uC2DD\uC73C\uB85C \uB9CC\uB4E4\uC9C0 \uC54A\uACE0, sdk \uD398\uC774\uC9C0 \uD3F4\uB354 \uC774\uB984\uC5D0 \`user\`\xB7\`admin\`\uC744 \uC4F0\uC9C0 \uC54A\uB294\uB2E4(\`src/pages/user\`\uB294 liquid \uC0B0\uCD9C\uBB3C \uC790\uB9AC\uC640 \uACB9\uCCD0 \`bstage build\`\uAC00 \uC885\uB8CC \uCF54\uB4DC 2\uB85C \uB9C9\uB294\uB2E4). \uD63C\uD569 \uB808\uD3EC\uC758 \uB85C\uCEEC \uBBF8\uB9AC\uBCF4\uAE30\uB294 \`bstage dev\`(React)\uC640 \`bstage dev --kind liquid\`\uB85C \uB530\uB85C \uB744\uC6B4\uB2E4.
|
|
426
426
|
|
|
427
427
|
## 2. \uD504\uB85C\uC81D\uD2B8 \uC0DD\uC131
|
|
428
428
|
|
|
@@ -522,7 +522,7 @@ bstage deploy
|
|
|
522
522
|
- \uC6D0\uACA9 push\xB7\uBC30\uD3EC\uB97C \uC0AC\uC6A9\uC790 \uD655\uC778 \uC5C6\uC774 \uC2E4\uD589\uD558\uAE30
|
|
523
523
|
- \uC0AC\uC6A9\uC790\uC5D0\uAC8C "\uCF54\uB4DC\uAC00 \uB9DE\uB098\uC694"\uCC98\uB7FC \uAC1C\uBC1C \uC9C0\uC2DD\uC774 \uC788\uC5B4\uC57C \uB2F5\uD560 \uC218 \uC788\uB294 \uAC83\uC744 \uBB3B\uAE30 (\uD655\uC778\uC740 \uB124 \uBAAB)
|
|
524
524
|
- \`bstage list\`\uC5D0 \uBC30\uCE58\uAC00 0\uAC74\uC778\uB370 \uBC30\uD3EC\uB97C \uC2DC\uB3C4\uD558\uAE30
|
|
525
|
-
- \
|
|
525
|
+
- \uD63C\uD569 \uB808\uD3EC\uC5D0\uC11C sdk \uD398\uC774\uC9C0\uB97C \`src/pages/user\`\xB7\`src/pages/admin\` \uC544\uB798\uC5D0 \uB9CC\uB4E4\uAE30 \u2014 liquid \uC0B0\uCD9C\uBB3C \uC790\uB9AC\uC640 \uACB9\uCE5C\uB2E4
|
|
526
526
|
`;
|
|
527
527
|
}
|
|
528
528
|
|
|
@@ -717,11 +717,12 @@ var BSTAGE_SKILLS = [
|
|
|
717
717
|
{ name: "bstage-migrate", kinds: ["sdk", "liquid"], content: () => withStamp(migrateSkillMd()) }
|
|
718
718
|
];
|
|
719
719
|
function skillsFor(kind) {
|
|
720
|
-
|
|
720
|
+
const wanted = kind === "mixed" ? ["sdk", "liquid"] : [kind];
|
|
721
|
+
return BSTAGE_SKILLS.filter((s) => s.kinds.some((k) => wanted.includes(k)));
|
|
721
722
|
}
|
|
722
723
|
|
|
723
724
|
// src/agents/agentsMdRegion.ts
|
|
724
|
-
var AGENTS_MANAGED_VERSION =
|
|
725
|
+
var AGENTS_MANAGED_VERSION = 14;
|
|
725
726
|
var START_MARKER = `<!-- BSTAGE:MANAGED:START v=${AGENTS_MANAGED_VERSION} \u2014 SDK\uAC00 \uAD00\uB9AC\uD558\uB294 \uC601\uC5ED\uC785\uB2C8\uB2E4. \`bstage ai install\` / \`bstage ai update\`\uAC00 \uC7AC\uC0DD\uC131\uD558\uBBC0\uB85C \uC9C1\uC811 \uD3B8\uC9D1\uD558\uC9C0 \uB9C8\uC138\uC694(\uAC31\uC2E0 \uC2DC \uB36E\uC5B4\uC4F0\uC785\uB2C8\uB2E4). \uD504\uB85C\uC81D\uD2B8 \uACE0\uC720 \uADDC\uCE59\uC740 \uC544\uB798 \uC790\uC720 \uC601\uC5ED\uC5D0 \uC801\uC73C\uC138\uC694. -->`;
|
|
726
727
|
var END_MARKER = `<!-- BSTAGE:MANAGED:END -->`;
|
|
727
728
|
var START_TOKEN = "BSTAGE:MANAGED:START";
|
|
@@ -816,6 +817,7 @@ function agentsManagedBody({
|
|
|
816
817
|
}) {
|
|
817
818
|
assertSingleLine({ space, projectName });
|
|
818
819
|
if (kind === "liquid") return liquidManagedBody(space, projectName);
|
|
820
|
+
if (kind === "mixed") return mixedManagedBody(space, projectName, target);
|
|
819
821
|
return sdkManagedBody(space, projectName, target);
|
|
820
822
|
}
|
|
821
823
|
function assertSingleLine(values) {
|
|
@@ -823,8 +825,7 @@ function assertSingleLine(values) {
|
|
|
823
825
|
if (/[\r\n]/.test(value)) throw new Error(`AGENTS.md \uC815\uCCB4\uC131 \uAC12\uC5D0 \uAC1C\uD589\uC774 \uC788\uC2B5\uB2C8\uB2E4: ${key}`);
|
|
824
826
|
}
|
|
825
827
|
}
|
|
826
|
-
|
|
827
|
-
const structureBlock = `src/
|
|
828
|
+
var SDK_STRUCTURE_BLOCK = `src/
|
|
828
829
|
main.tsx \u2014 App \uB9C8\uC6B4\uD2B8\uB9CC (\uC218\uC815 \uBD88\uD544\uC694)
|
|
829
830
|
App.tsx \u2014 import.meta.glob \uAE30\uBC18 \uAC1C\uBC1C\uC6A9 \uBAA9\uB85D\xB7\uB77C\uC6B0\uD305 (\uC218\uC815 \uBD88\uD544\uC694)
|
|
830
831
|
shared/
|
|
@@ -838,25 +839,14 @@ function sdkManagedBody(space, projectName, target) {
|
|
|
838
839
|
.env \u2014 VITE_BSTAGE_PHASE + API \uD0A4 (\uCEE4\uBC0B \uC548 \uB428, .gitignore)
|
|
839
840
|
.env.example \u2014 \uC704 \uD56D\uBAA9 placeholder (\uCEE4\uBC0B\uB428 \u2014 \uBCF5\uC0AC\uD574\uC11C .env \uC0DD\uC131)
|
|
840
841
|
vite.config.ts \u2014 Vite + bstageDevPlugin (phase\uB294 .env\uC5D0\uC11C \uC77D\uC74C)`;
|
|
841
|
-
|
|
842
|
+
var SDK_ENV_SECTION = `\`.env\`(\uCEE4\uBC0B \uC548 \uB428)\uB294 phase\uC640 API \uD0A4\uB97C, \`.env.example\`(\uCEE4\uBC0B\uB428)\uC740 \uADF8 placeholder\uB97C \uB2F4\uB294\uB2E4. \`client.ts\`\uB294 \`import.meta.env.VITE_BSTAGE_APP_*\`\uB97C, \`vite.config.ts\`\uB294 \`.env\`\uC758 phase\uB97C \uCC38\uC870\uD55C\uB2E4.
|
|
842
843
|
|
|
843
844
|
\`\`\`
|
|
844
845
|
VITE_BSTAGE_PHASE=dev # dev | qa | real | sandbox
|
|
845
846
|
\`\`\``;
|
|
846
|
-
|
|
847
|
-
- \uB85C\uADF8\uC778 \uD398\uC774\uC9C0: http://localhost:5173/__bstage__/login`;
|
|
848
|
-
const apiForbidBullet = `- \uACBD\uB85C\xB7\uC751\uB2F5 \uBAA8\uC591\uC744 \uCD94\uCE21\uD574 \uD638\uCD9C\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 SDK\uB294 API \uACBD\uB85C \uBAA9\uB85D\uC744 \uB4E4\uACE0 \uC788\uC9C0 \uC54A\uB2E4(\uC790\uB3D9\uC644\uC131 \uC5C6\uC74C). \uCD9C\uCC98\uB294 \uAC8C\uC774\uD2B8\uC6E8\uC774 API Reference Doc\uC774\uACE0, \uC751\uB2F5 \uD0C0\uC785\uC740 \`client.get<T>(...)\`\uCC98\uB7FC \uC81C\uB124\uB9AD\uC73C\uB85C \uBA85\uC2DC\uD55C\uB2E4.
|
|
847
|
+
var SDK_API_FORBID_BULLETS = `- \uACBD\uB85C\xB7\uC751\uB2F5 \uBAA8\uC591\uC744 \uCD94\uCE21\uD574 \uD638\uCD9C\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 SDK\uB294 API \uACBD\uB85C \uBAA9\uB85D\uC744 \uB4E4\uACE0 \uC788\uC9C0 \uC54A\uB2E4(\uC790\uB3D9\uC644\uC131 \uC5C6\uC74C). \uCD9C\uCC98\uB294 \uAC8C\uC774\uD2B8\uC6E8\uC774 API Reference Doc\uC774\uACE0, \uC751\uB2F5 \uD0C0\uC785\uC740 \`client.get<T>(...)\`\uCC98\uB7FC \uC81C\uB124\uB9AD\uC73C\uB85C \uBA85\uC2DC\uD55C\uB2E4.
|
|
849
848
|
- \uC5B4\uB4DC\uBBFC\uC6A9 API\uB97C \uCD94\uCE21\uD574 \uD638\uCD9C\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 BstageClient\uB294 **\uC720\uC800\uB2E8 API\uB9CC \uC9C0\uC6D0**\uD55C\uB2E4. \uC5B4\uB4DC\uBBFC API\uAC00 \uD544\uC694\uD558\uBA74 \uACBD\uB85C\uB97C \uC784\uC758\uB85C \uB9CC\uB4E4\uC9C0 \uB9D0\uACE0 **\uBC18\uB4DC\uC2DC \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uBA3C\uC800 \uD655\uC778**\uD55C\uB2E4.`;
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
## \uD504\uB85C\uC81D\uD2B8 \uAC1C\uC694
|
|
853
|
-
|
|
854
|
-
b.stage \uC11C\uB4DC\uD30C\uD2F0 \uD15C\uD50C\uB9BF \uD504\uB85C\uC81D\uD2B8. React \uCEF4\uD3EC\uB10C\uD2B8\uB97C \uC791\uC131\uD558\uBA74 SDK\uAC00 Web Component\uB85C \uBE4C\uB4DC\uD558\uACE0, \uBE4C\uB4DC \uC0B0\uCD9C\uBB3C\uC774 b.stage \uD50C\uB7AB\uD3FC\uC5D0\uC11C \uB85C\uB4DC\uB418\uC5B4 \uC2E4\uD589\uB41C\uB2E4.
|
|
855
|
-
|
|
856
|
-
- **Space**: ${space}
|
|
857
|
-
- **\uB808\uD3EC**: \`${projectName}\`
|
|
858
|
-
|
|
859
|
-
## SDK \uBB38\uC11C
|
|
849
|
+
var SDK_DOCS_SECTION = `## SDK \uBB38\uC11C
|
|
860
850
|
|
|
861
851
|
SDK\uC758 API, hooks, \uC2AC\uB86F \uC2DC\uC2A4\uD15C, \uBE4C\uB4DC \uD30C\uC774\uD504\uB77C\uC778 \uB4F1 **SDK\uC640 \uAD00\uB828\uB41C \uBAA8\uB4E0 \uB0B4\uC6A9**\uC740 \uC124\uCE58\uB41C \uD328\uD0A4\uC9C0\uC758 \uBB38\uC11C\uB97C \uCC38\uC870\uD55C\uB2E4. \uC774 \uBB38\uC11C\uB4E4\uC774 \uD56D\uC0C1 \uCD5C\uC2E0\uC774\uBA70 \uC678\uBD80 \uAC80\uC0C9 \uACB0\uACFC\uBCF4\uB2E4 \uC2E0\uB8B0\uD560 \uC218 \uC788\uB2E4.
|
|
862
852
|
|
|
@@ -875,17 +865,9 @@ node_modules/@bstage-sdk/core/docs/
|
|
|
875
865
|
\u2514\u2500\u2500 SDK_ARCHITECTURE.md \u2014 \uD328\uD0A4\uC9C0 \uAD6C\uC870, \uC124\uACC4 \uACB0\uC815
|
|
876
866
|
\`\`\`
|
|
877
867
|
|
|
878
|
-
\uBB38\uC11C \uBAA9\uB85D\uC740 \`npx bstage docs\`\uB85C\uB3C4 \uBCFC \uC218 \uC788\uB2E4. \uD0C0\uC785 \uC815\uC758(.d.ts)\uC640 \uB7F0\uD0C0\uC784 \uC18C\uC2A4(.js)\uB294 \`node_modules/@bstage-sdk/react/dist/\`, \`node_modules/@bstage-sdk/core/dist/\`\uC5D0\uC11C \uC9C1\uC811 \uD655\uC778\uD560 \uC218 \uC788\uB2E4
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
\`\`\`
|
|
883
|
-
${structureBlock}
|
|
884
|
-
\`\`\`
|
|
885
|
-
|
|
886
|
-
## \uD15C\uD50C\uB9BF \uAC1C\uBC1C \uADDC\uCE59
|
|
887
|
-
|
|
888
|
-
### \uC0C8 \uD15C\uD50C\uB9BF \uCD94\uAC00
|
|
868
|
+
\uBB38\uC11C \uBAA9\uB85D\uC740 \`npx bstage docs\`\uB85C\uB3C4 \uBCFC \uC218 \uC788\uB2E4. \uD0C0\uC785 \uC815\uC758(.d.ts)\uC640 \uB7F0\uD0C0\uC784 \uC18C\uC2A4(.js)\uB294 \`node_modules/@bstage-sdk/react/dist/\`, \`node_modules/@bstage-sdk/core/dist/\`\uC5D0\uC11C \uC9C1\uC811 \uD655\uC778\uD560 \uC218 \uC788\uB2E4.`;
|
|
869
|
+
function sdkTemplateRules(space) {
|
|
870
|
+
return `### \uC0C8 \uD15C\uD50C\uB9BF \uCD94\uAC00
|
|
889
871
|
|
|
890
872
|
\uD398\uC774\uC9C0\uB0D0 \uC704\uC82F\uC774\uB0D0\uC5D0 \uB530\uB77C \uB450\uB294 \uACF3\uC774 \uB2E4\uB974\uB2E4. \uD30C\uC77C\uBA85\uC740 \uBC18\uB4DC\uC2DC \`template.tsx\`\uC5EC\uC57C \uD558\uBA70, \`src/pages/\`\xB7\`src/slots/\` \uBC16\uC5D0 \uB450\uBA74 \uBE4C\uB4DC\uAC00 \uC778\uC2DD\uD558\uC9C0 \uC54A\uB294\uB2E4.
|
|
891
873
|
|
|
@@ -918,28 +900,68 @@ createTemplate(MyWidget, {
|
|
|
918
900
|
|
|
919
901
|
- \`name\`\uC740 \uD544\uC218 \u2014 \uD15C\uD50C\uB9BF \uD3F4\uB354\uBA85\uACFC \uC77C\uCE58, \uD558\uC774\uD508 \uD3EC\uD568
|
|
920
902
|
- \uCEF4\uD3EC\uB10C\uD2B8 \uD568\uC218\uBA85\uC740 \uC790\uC720\uC774\uB098 \`export default\` \uD544\uC218
|
|
921
|
-
- \`type\` \uB4F1 \uC120\uD0DD \uD544\uB4DC \uCD94\uAC00 \uAC00\uB2A5
|
|
903
|
+
- \`type\` \uB4F1 \uC120\uD0DD \uD544\uB4DC \uCD94\uAC00 \uAC00\uB2A5`;
|
|
904
|
+
}
|
|
905
|
+
function sdkMigrationSection(skillsList) {
|
|
906
|
+
return `## SDK \uC5C5\uB370\uC774\uD2B8 / \uB9C8\uC774\uADF8\uB808\uC774\uC158
|
|
922
907
|
|
|
923
|
-
|
|
908
|
+
\uC774 \uD504\uB85C\uC81D\uD2B8\uB294 \uC0DD\uC131 \uC2DC\uC810\uC758 SDK \uBC84\uC804\uC744 \`package.json\`\uC5D0 \uACE0\uC815\uD55C\uB2E4. SDK\uAC00 \uC5C5\uB370\uC774\uD2B8\uB3FC\uB3C4 \uC790\uB3D9\uC73C\uB85C \uB530\uB77C\uC624\uC9C0 \uC54A\uC73C\uBBC0\uB85C, \uCD5C\uC2E0\uC73C\uB85C \uC62C\uB9AC\uB824\uBA74:
|
|
924
909
|
|
|
925
|
-
|
|
910
|
+
- \`npx @bstage-sdk/cli@latest doctor\` \u2014 \uBC84\uC804 \uB4DC\uB9AC\uD504\uD2B8\xB7\uB204\uB77D \uD30C\uC77C\xB7\uC801\uC6A9 \uAC00\uB2A5\uD55C \uB9C8\uC774\uADF8\uB808\uC774\uC158 \uD56D\uBAA9\uC744 \uC9C4\uB2E8\uD55C\uB2E4(\uD30C\uC77C \uC218\uC815 \uC5C6\uC74C, \`--json\` \uC9C0\uC6D0).
|
|
911
|
+
- \uC2E4\uC81C \uC801\uC6A9\uC740 \`bstage-migrate\` \uC2A4\uD0AC\uC5D0\uAC8C \uB9E1\uAE34\uB2E4 \u2014 \uC5D0\uC774\uC804\uD2B8\uC5D0\uAC8C "bstage \uCD5C\uC2E0 \uBC84\uC804\uC73C\uB85C \uB9C8\uC774\uADF8\uB808\uC774\uC158 \uD574\uC918"\uB77C\uACE0 \uC694\uCCAD\uD558\uBA74, doctor \uACB0\uACFC\uC640 SDK\uC758 \`MIGRATION.md\`\uB97C \uC77D\uACE0 \uC774 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uB9DE\uCDB0 \uBCC0\uD658\uD55C\uB2E4(\uC0AC\uC6A9\uC790 \uCF54\uB4DC\uB294 \uB36E\uC5B4\uC4F0\uC9C0 \uC54A\uACE0 reconcile).
|
|
926
912
|
|
|
927
|
-
|
|
913
|
+
\uB9C8\uC774\uADF8\uB808\uC774\uC158 \uC808\uCC28\uC758 \uB2E8\uC77C \uC18C\uC2A4\uB294 SDK\uC758 \`node_modules/@bstage-sdk/core/docs/MIGRATION.md\`\uB2E4.
|
|
928
914
|
|
|
929
|
-
|
|
915
|
+
\uC774 \uD504\uB85C\uC81D\uD2B8\uC758 \`.claude/skills/\`\uC5D0\uB294 \uC5D0\uC774\uC804\uD2B8\uC6A9 \uC2A4\uD0AC(${skillsList})\uC774 \uB4E4\uC5B4 \uC788\uB2E4. SDK \uBC84\uC804\uC5C5 \uD6C4 \`npx @bstage-sdk/cli@latest ai update\`\uB85C \uCD5C\uC2E0 \uC2A4\uD0AC\uC744 \uB3D9\uAE30\uD654\uD560 \uC218 \uC788\uC73C\uBA70, \uC774\uB54C **\uC774 AGENTS.md\uC758 SDK \uAD00\uB9AC \uC601\uC5ED(\uB9C8\uCEE4\uB85C \uAC10\uC2FC \uBD80\uBD84)\uB3C4 \uD568\uAED8 \uCD5C\uC2E0\uD654**\uB41C\uB2E4. \uD504\uB85C\uC81D\uD2B8 \uACE0\uC720 \uADDC\uCE59\uC740 \uAD00\uB9AC \uC601\uC5ED \uC544\uB798 **\uC790\uC720 \uC601\uC5ED**\uC5D0 \uC801\uC73C\uBA74 \uAC31\uC2E0 \uC2DC \uBCF4\uC874\uB41C\uB2E4.`;
|
|
916
|
+
}
|
|
917
|
+
var SDK_SKILLS_LIST = "`bstage-template` \uC791\uC131, `bstage-deploy` \uBC30\uD3EC, `bstage-onboarding` \uCC98\uC74C\uBD80\uD130 \uB05D\uAE4C\uC9C0, `bstage-migrate` \uB9C8\uC774\uADF8\uB808\uC774\uC158";
|
|
918
|
+
function sdkForbidBullets() {
|
|
919
|
+
return `- \`src/main.tsx\`\xB7\`src/App.tsx\`\uB97C \uC218\uC815\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uAC1C\uBC1C\uC6A9 \uC9C4\uC785\uC810\xB7\uBAA9\uB85D \uD654\uBA74\uC73C\uB85C SDK\uAC00 \uAD00\uB9AC
|
|
920
|
+
- \`customElements.define()\`\uC744 \uC9C1\uC811 \uD638\uCD9C\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 \`createTemplate()\`\uC774 \uC790\uB3D9 \uCC98\uB9AC
|
|
921
|
+
- Shadow DOM\uC744 \uC9C1\uC811 \uC870\uC791\uD558\uC9C0 \uC54A\uB294\uB2E4 (\`attachShadow\`, \`shadowRoot\` \uB4F1) \u2014 SDK\uAC00 \uAD00\uB9AC
|
|
922
|
+
- \`createTemplate()\` \uD638\uCD9C\uC758 \uC778\uC790 \uAD6C\uC870\uB97C \uC784\uC758\uB85C \uBCC0\uACBD\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uBE4C\uB4DC \uD30C\uC774\uD504\uB77C\uC778\uC774 \uD30C\uC2F1\uC5D0 \uC2E4\uD328\uD560 \uC218 \uC788\uB2E4
|
|
923
|
+
- \`@bstage-sdk/core\`\uB97C \uC9C1\uC811 import\uD558\uC5EC \`createWebComponent()\`\uB97C \uD638\uCD9C\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 \`@bstage-sdk/react\`\uC758 API\uB9CC \uC0AC\uC6A9
|
|
924
|
+
- \uC804\uC5ED CSS \uD30C\uC77C(\`<link>\`, \uC678\uBD80 \uC2A4\uD0C0\uC77C\uC2DC\uD2B8)\uC744 \uC0AC\uC6A9\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 Shadow DOM \uB0B4\uBD80\uC5D0 \uC801\uC6A9\uB418\uC9C0 \uC54A\uB294\uB2E4.
|
|
925
|
+
- **\`import './style.css'\`\uB85C \uC2A4\uD0C0\uC77C\uC744 \uB123\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uBC30\uD3EC \uC0B0\uCD9C\uBB3C\uC5D0\uC11C \uC0AC\uB77C\uC9C4\uB2E4.** \uB85C\uCEEC \uAC1C\uBC1C \uD654\uBA74\uC5D0\uC11C\uB294 \uC801\uC6A9\uB418\uC5B4 \uB208\uCE58\uCC44\uAE30 \uC5B4\uB835\uB2E4. CSS \uD30C\uC77C\uC744 \uC4F0\uB824\uBA74 \`import css from './style.css?inline'\`\uC73C\uB85C \uBB38\uC790\uC5F4\uC744 \uAC00\uC838\uC640 \`createTemplate(..., { styles: css })\`\uC5D0 \uB118\uAE30\uAC70\uB098 \uCEF4\uD3EC\uB10C\uD2B8 \uC548 \`<style>{css}</style>\`\uB85C \uB80C\uB354\uD55C\uB2E4. inline \`style={{}}\`\uB3C4 \uB41C\uB2E4
|
|
926
|
+
- UI \uC0C9\xB7\uD0C0\uC774\uD3EC\xB7\uADF8\uB9BC\uC790\uB97C hex/rgb\uB85C \uD558\uB4DC\uCF54\uB529\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uC704 '\uB514\uC790\uC778' \uC139\uC158\uC758 \uB514\uC790\uC778 \uD1A0\uD070\uC744 \uC0AC\uC6A9
|
|
927
|
+
- \uC571\uD0A4(APP-ID \`bsa_\u2026\`\xB7APP KEY \`bsp_\u2026\`, \uC5B4\uB4DC\uBBFC \uAC8C\uC774\uD2B8\uC6E8\uC774 \`bsm_\u2026\`)\uB97C \uC18C\uC2A4 \uCF54\uB4DC\uC5D0 \uB9AC\uD130\uB7F4\uB85C \uB123\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uC778\uC99D \uAC12\uC740 \`.env\`(\uCEE4\uBC0B \uC548 \uB428)\uC5D0\uC11C \`import.meta.env.VITE_BSTAGE_*\`\uB85C\uB9CC \uC8FC\uC785\uD55C\uB2E4. pre-commit \uD6C5\uC774 \uCEE4\uBC0B \uC804 \uAC80\uCD9C\xB7\uCC28\uB2E8\uD558\uBA70 \`--no-verify\`\uB85C \uC6B0\uD68C\uD558\uC9C0 \uC54A\uB294\uB2E4
|
|
928
|
+
${SDK_API_FORBID_BULLETS}`;
|
|
929
|
+
}
|
|
930
|
+
function sdkManagedBody(space, projectName, target) {
|
|
931
|
+
const commandsSection = `- \`npm run dev\` \u2014 \uAC1C\uBC1C \uC11C\uBC84 \uC2E4\uD589 (\uC778\uC99D \uD504\uB85D\uC2DC \uD3EC\uD568)
|
|
932
|
+
- \uB85C\uADF8\uC778 \uD398\uC774\uC9C0: http://localhost:5173/__bstage__/login`;
|
|
933
|
+
return `# AGENTS.md
|
|
930
934
|
|
|
931
|
-
|
|
935
|
+
## \uD504\uB85C\uC81D\uD2B8 \uAC1C\uC694
|
|
932
936
|
|
|
933
|
-
|
|
937
|
+
b.stage \uC11C\uB4DC\uD30C\uD2F0 \uD15C\uD50C\uB9BF \uD504\uB85C\uC81D\uD2B8. React \uCEF4\uD3EC\uB10C\uD2B8\uB97C \uC791\uC131\uD558\uBA74 SDK\uAC00 Web Component\uB85C \uBE4C\uB4DC\uD558\uACE0, \uBE4C\uB4DC \uC0B0\uCD9C\uBB3C\uC774 b.stage \uD50C\uB7AB\uD3FC\uC5D0\uC11C \uB85C\uB4DC\uB418\uC5B4 \uC2E4\uD589\uB41C\uB2E4.
|
|
934
938
|
|
|
935
|
-
|
|
939
|
+
- **Space**: ${space}
|
|
940
|
+
- **\uB808\uD3EC**: \`${projectName}\`
|
|
936
941
|
|
|
937
|
-
|
|
938
|
-
- \uC2E4\uC81C \uC801\uC6A9\uC740 \`bstage-migrate\` \uC2A4\uD0AC\uC5D0\uAC8C \uB9E1\uAE34\uB2E4 \u2014 \uC5D0\uC774\uC804\uD2B8\uC5D0\uAC8C "bstage \uCD5C\uC2E0 \uBC84\uC804\uC73C\uB85C \uB9C8\uC774\uADF8\uB808\uC774\uC158 \uD574\uC918"\uB77C\uACE0 \uC694\uCCAD\uD558\uBA74, doctor \uACB0\uACFC\uC640 SDK\uC758 \`MIGRATION.md\`\uB97C \uC77D\uACE0 \uC774 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uB9DE\uCDB0 \uBCC0\uD658\uD55C\uB2E4(\uC0AC\uC6A9\uC790 \uCF54\uB4DC\uB294 \uB36E\uC5B4\uC4F0\uC9C0 \uC54A\uACE0 reconcile).
|
|
942
|
+
${SDK_DOCS_SECTION}
|
|
939
943
|
|
|
940
|
-
|
|
944
|
+
## \uD504\uB85C\uC81D\uD2B8 \uAD6C\uC870
|
|
945
|
+
|
|
946
|
+
\`\`\`
|
|
947
|
+
${SDK_STRUCTURE_BLOCK}
|
|
948
|
+
\`\`\`
|
|
949
|
+
|
|
950
|
+
## \uD15C\uD50C\uB9BF \uAC1C\uBC1C \uADDC\uCE59
|
|
951
|
+
|
|
952
|
+
${sdkTemplateRules(space)}
|
|
953
|
+
|
|
954
|
+
${designRulesBrief(target)}
|
|
955
|
+
|
|
956
|
+
## \uD658\uACBD \uC124\uC815
|
|
957
|
+
|
|
958
|
+
${SDK_ENV_SECTION}
|
|
959
|
+
|
|
960
|
+
## \uBA85\uB839\uC5B4
|
|
961
|
+
|
|
962
|
+
${commandsSection}
|
|
941
963
|
|
|
942
|
-
|
|
964
|
+
${sdkMigrationSection(SDK_SKILLS_LIST)}
|
|
943
965
|
|
|
944
966
|
## \uBE4C\uB4DC
|
|
945
967
|
|
|
@@ -949,27 +971,32 @@ ${deploySection()}
|
|
|
949
971
|
|
|
950
972
|
## \uAE08\uC9C0 \uC0AC\uD56D
|
|
951
973
|
|
|
952
|
-
|
|
953
|
-
- \`customElements.define()\`\uC744 \uC9C1\uC811 \uD638\uCD9C\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 \`createTemplate()\`\uC774 \uC790\uB3D9 \uCC98\uB9AC
|
|
954
|
-
- Shadow DOM\uC744 \uC9C1\uC811 \uC870\uC791\uD558\uC9C0 \uC54A\uB294\uB2E4 (\`attachShadow\`, \`shadowRoot\` \uB4F1) \u2014 SDK\uAC00 \uAD00\uB9AC
|
|
955
|
-
- \`createTemplate()\` \uD638\uCD9C\uC758 \uC778\uC790 \uAD6C\uC870\uB97C \uC784\uC758\uB85C \uBCC0\uACBD\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uBE4C\uB4DC \uD30C\uC774\uD504\uB77C\uC778\uC774 \uD30C\uC2F1\uC5D0 \uC2E4\uD328\uD560 \uC218 \uC788\uB2E4
|
|
956
|
-
- \`@bstage-sdk/core\`\uB97C \uC9C1\uC811 import\uD558\uC5EC \`createWebComponent()\`\uB97C \uD638\uCD9C\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 \`@bstage-sdk/react\`\uC758 API\uB9CC \uC0AC\uC6A9
|
|
957
|
-
- \uC804\uC5ED CSS \uD30C\uC77C(\`<link>\`, \uC678\uBD80 \uC2A4\uD0C0\uC77C\uC2DC\uD2B8)\uC744 \uC0AC\uC6A9\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 Shadow DOM \uB0B4\uBD80\uC5D0 \uC801\uC6A9\uB418\uC9C0 \uC54A\uB294\uB2E4.
|
|
958
|
-
- **\`import './style.css'\`\uB85C \uC2A4\uD0C0\uC77C\uC744 \uB123\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uBC30\uD3EC \uC0B0\uCD9C\uBB3C\uC5D0\uC11C \uC0AC\uB77C\uC9C4\uB2E4.** \uB85C\uCEEC \uAC1C\uBC1C \uD654\uBA74\uC5D0\uC11C\uB294 \uC801\uC6A9\uB418\uC5B4 \uB208\uCE58\uCC44\uAE30 \uC5B4\uB835\uB2E4. CSS \uD30C\uC77C\uC744 \uC4F0\uB824\uBA74 \`import css from './style.css?inline'\`\uC73C\uB85C \uBB38\uC790\uC5F4\uC744 \uAC00\uC838\uC640 \`createTemplate(..., { styles: css })\`\uC5D0 \uB118\uAE30\uAC70\uB098 \uCEF4\uD3EC\uB10C\uD2B8 \uC548 \`<style>{css}</style>\`\uB85C \uB80C\uB354\uD55C\uB2E4. inline \`style={{}}\`\uB3C4 \uB41C\uB2E4
|
|
959
|
-
- UI \uC0C9\xB7\uD0C0\uC774\uD3EC\xB7\uADF8\uB9BC\uC790\uB97C hex/rgb\uB85C \uD558\uB4DC\uCF54\uB529\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uC704 '\uB514\uC790\uC778' \uC139\uC158\uC758 \uB514\uC790\uC778 \uD1A0\uD070\uC744 \uC0AC\uC6A9
|
|
960
|
-
- \uC571\uD0A4(APP-ID \`bsa_\u2026\`\xB7APP KEY \`bsp_\u2026\`, \uC5B4\uB4DC\uBBFC \uAC8C\uC774\uD2B8\uC6E8\uC774 \`bsm_\u2026\`)\uB97C \uC18C\uC2A4 \uCF54\uB4DC\uC5D0 \uB9AC\uD130\uB7F4\uB85C \uB123\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uC778\uC99D \uAC12\uC740 \`.env\`(\uCEE4\uBC0B \uC548 \uB428)\uC5D0\uC11C \`import.meta.env.VITE_BSTAGE_*\`\uB85C\uB9CC \uC8FC\uC785\uD55C\uB2E4. pre-commit \uD6C5\uC774 \uCEE4\uBC0B \uC804 \uAC80\uCD9C\xB7\uCC28\uB2E8\uD558\uBA70 \`--no-verify\`\uB85C \uC6B0\uD68C\uD558\uC9C0 \uC54A\uB294\uB2E4
|
|
961
|
-
${apiForbidBullet}
|
|
974
|
+
${sdkForbidBullets()}
|
|
962
975
|
`;
|
|
963
976
|
}
|
|
964
|
-
|
|
965
|
-
const structureBlock = `public/
|
|
977
|
+
var LIQUID_STRUCTURE_BLOCK = `public/
|
|
966
978
|
user/ \u2014 \uC720\uC800 \uD50C\uB7AB\uD3FC\uC6A9 \uD15C\uD50C\uB9BF
|
|
967
979
|
{name}/
|
|
968
980
|
template.liquid \u2014 \uD15C\uD50C\uB9BF \uBCF8\uBB38 (\uD544\uC218, \uD30C\uC77C\uBA85 \uACE0\uC815)
|
|
969
981
|
data.json \u2014 \uB85C\uCEEC \uBBF8\uB9AC\uBCF4\uAE30\uC6A9 \uC0D8\uD50C \uB370\uC774\uD130 (\uBC30\uD3EC\uC5D0\uB294 \uB098\uAC00\uC9C0 \uC54A\uC74C)
|
|
970
|
-
admin/ \u2014 \uC5B4\uB4DC\uBBFC\uC6A9 \uD15C\uD50C\uB9BF (\uAC19\uC740 \uADDC\uCE59)
|
|
971
|
-
|
|
972
|
-
|
|
982
|
+
admin/ \u2014 \uC5B4\uB4DC\uBBFC\uC6A9 \uD15C\uD50C\uB9BF (\uAC19\uC740 \uADDC\uCE59)`;
|
|
983
|
+
var LIQUID_DATA_SECTION = `## \uD50C\uB7AB\uD3FC\uC774 \uB123\uB294 \uB370\uC774\uD130 (\uC720\uC800 \uD654\uBA74)
|
|
984
|
+
|
|
985
|
+
\uCD5C\uC0C1\uC704 \uAC12\uC740 \uB2E4\uC12F \uAC1C\uB2E4 \u2014 \`lounges\` \xB7 \`stories\` \xB7 \`contentSections\` \xB7 \`latestContents\` \xB7 \`shopCategories\`. \uC774 \uC774\uB984 \uC678\uC758 \uBCC0\uC218\uB294 \uBE48 \uBB38\uC790\uC5F4\uC774 \uB41C\uB2E4. \uAC01 \uD56D\uBAA9\uC758 \uD544\uB4DC\uB294 \uC2E4\uC81C \uB80C\uB354 \uACB0\uACFC\uB85C \uD655\uC778\uD55C\uB2E4. \`data.json\` \uC0D8\uD50C\uB3C4 \uAC19\uC740 \uC774\uB984\uC744 \uC368\uC57C \uD504\uB9AC\uBDF0\uAC00 \uBC30\uD3EC\uC640 \uAC19\uC740 \uBAA8\uC591\uC774 \uB41C\uB2E4. \uC5B4\uB4DC\uBBFC \uD654\uBA74\uC774 \uBC1B\uB294 \uAC12\uC740 \uD655\uC778\uB418\uC9C0 \uC54A\uC558\uB2E4.`;
|
|
986
|
+
var LIQUID_RULES_BULLETS = `- \uACBD\uB85C \uAE4A\uC774\uAC00 \uACE0\uC815\uC774\uB2E4 \u2014 \`public/{user|admin}/{name}/template.liquid\`(\uC608: \`public/user/welcome/template.liquid\`) \uC790\uB9AC\uC5D0 \uC788\uB294 \uD30C\uC77C\uB9CC \uC778\uC2DD\uD55C\uB2E4. \uB2E4\uB978 \uC704\uCE58\uC758 \uD30C\uC77C\uC740 **\uC870\uC6A9\uD788 \uBB34\uC2DC\uB41C\uB2E4**(\uBE4C\uB4DC\uB294 \uC131\uACF5\uD558\uB294\uB370 \uD654\uBA74\uC5D0 \uB098\uC624\uC9C0 \uC54A\uB294\uB2E4).
|
|
987
|
+
- \`{name}\`\uC740 **\uC18C\uBB38\uC790\xB7\uC22B\uC790\xB7\uD558\uC774\uD508**\uB9CC \uC4F4\uB2E4. \uD3F4\uB354 \uD558\uB098\uAC00 \uD398\uC774\uC9C0 \uD558\uB098\uB2E4.
|
|
988
|
+
- \uD30C\uC77C\uBA85\uC740 \uBC18\uB4DC\uC2DC \`template.liquid\`\uB2E4.
|
|
989
|
+
- \`data.json\`\uC740 \uB85C\uCEEC \uBBF8\uB9AC\uBCF4\uAE30\uC6A9 \uC0D8\uD50C\uC77C \uBFD0\uC774\uB2E4. \uC2E4\uC81C \uAC12\uC740 \uD50C\uB7AB\uD3FC\uC774 \uB123\uC73C\uBBC0\uB85C, \uAC12\uC774 \uBE44\uC5B4 \uC788\uC5B4\uB3C4 \uD654\uBA74\uC774 \uAE68\uC9C0\uC9C0 \uC54A\uAC8C \uAE30\uBCF8\uAC12\xB7\uBE48 \uBAA9\uB85D \uBD84\uAE30\uB97C \uD568\uAED8 \uB123\uB294\uB2E4.
|
|
990
|
+
- \uC791\uC131\xB7\uC218\uC815 \uC808\uCC28\uC640 \uBB38\uBC95 \uC694\uC810\uC740 \`bstage-liquid\` \uC2A4\uD0AC\uC744 \uB530\uB978\uB2E4.`;
|
|
991
|
+
function liquidForbidBullets() {
|
|
992
|
+
return `- liquid \uD15C\uD50C\uB9BF\uC744 \uC2AC\uB86F(\uC704\uC82F \uC790\uB9AC)\uC5D0 \uB123\uC73C\uB824 \uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 **PAGE \uBC30\uCE58\uB9CC \uAC00\uB2A5**\uD558\uB2E4
|
|
993
|
+
- \`data.json\`\xB7\`layout.json\`\uC5D0 \uBC30\uD3EC\uC5D0 \uD544\uC694\uD55C \uC124\uC815\uC744 \uB2F4\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uD3EC\uD138\uC774 \uD328\uD0A4\uC9D5\uD560 \uB54C \uC9C0\uC6B4\uB2E4(\uB808\uC774\uC544\uC6C3\uC740 \uBC30\uCE58 \uC124\uC815\uC774 \uC18C\uC720)
|
|
994
|
+
- \uADDC\uC57D \uBC16 \uACBD\uB85C\uC5D0 \uD15C\uD50C\uB9BF\uC744 \uB450\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uAE4A\uC774\uAC00 \uB2E4\uB974\uBA74 \uBB34\uC2DC\uB41C\uB2E4
|
|
995
|
+
- \uC5D0\uC14B(\uC774\uBBF8\uC9C0\xB7\uC601\uC0C1)\uC744 \uB808\uD3EC\uC5D0 \uB450\uACE0 \uC0C1\uB300 \uACBD\uB85C\uB85C \uCC38\uC870\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uBC30\uD3EC \uD6C4 \uAE68\uC9C4\uB2E4. \uD3EC\uD138 \uD654\uBA74\uC758 \uC2A4\uD14C\uC774\uC9C0 > \uBBF8\uB514\uC5B4\uC5D0 \uC62C\uB824 \uBC1B\uC740 URL\uC744 \uC808\uB300 \uC8FC\uC18C\uB85C \uB123\uB294\uB2E4(\uC774\uBBF8\uC9C0\xB7\uC601\uC0C1\uB9CC \uC62C\uB9B4 \uC218 \uC788\uACE0 \uD5C8\uC6A9 \uD615\uC2DD\xB7\uC6A9\uB7C9 \uD55C\uB3C4\uB294 \uC5C5\uB85C\uB4DC\uD560 \uB54C \uD654\uBA74\uC774 \uC54C\uB824 \uC900\uB2E4). \uB85C\uCEEC \uD504\uB9AC\uBDF0\uC5D0\uC11C\uB294 \uC0C1\uB300 \uACBD\uB85C\uB3C4 \uBCF4\uC774\uBBC0\uB85C \uD504\uB9AC\uBDF0 \uACB0\uACFC\uB97C \uADFC\uAC70\uB85C \uC0BC\uC9C0 \uC54A\uB294\uB2E4
|
|
996
|
+
- \uD50C\uB7AB\uD3FC\uC774 \uB123\uC5B4 \uC8FC\uB294 \uB370\uC774\uD130\uC758 \uC774\uB984\xB7\uAD6C\uC870\uB97C \uCD94\uCE21\uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uCD5C\uC0C1\uC704 \uC774\uB984\uC740 \uC704 '\uD50C\uB7AB\uD3FC\uC774 \uB123\uB294 \uB370\uC774\uD130' \uC808\uC774 \uC804\uBD80\uC774\uACE0, \uADF8 \uC548\uC758 \uD544\uB4DC\uB294 \uC2E4\uC81C \uB80C\uB354 \uACB0\uACFC\uB85C \uD655\uC778\uD55C\uB2E4
|
|
997
|
+
- \`{% render %}\`\xB7\`{% include %}\`(\uD30C\uC15C)\uB97C \uC4F0\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uBC30\uD3EC \uBDF0\uC5B4\uC5D0\uC11C \uBE48 \uBB38\uC790\uC5F4\uC774 \uB41C\uB2E4(\uB85C\uCEEC \uD504\uB9AC\uBDF0\uC5D0\uC11C\uB9CC \uB3D9\uC791). \uD15C\uD50C\uB9BF\uC740 \`template.liquid\` \uD55C \uD30C\uC77C\uC5D0 \uB2F4\uB294\uB2E4`;
|
|
998
|
+
}
|
|
999
|
+
function liquidManagedBody(space, projectName) {
|
|
973
1000
|
return `# AGENTS.md
|
|
974
1001
|
|
|
975
1002
|
## \uD504\uB85C\uC81D\uD2B8 \uAC1C\uC694
|
|
@@ -987,23 +1014,19 @@ b.stage liquid \uD14C\uB9C8 \uD504\uB85C\uC81D\uD2B8. \`.liquid\` \uD15C\uD50C\u
|
|
|
987
1014
|
- \uC791\uC131 \uADDC\uC57D\xB7\uB370\uC774\uD130\xB7\uC5D0\uC14B: \`.claude/skills/bstage-liquid/SKILL.md\`
|
|
988
1015
|
- \uBB38\uBC95(\uD0DC\uADF8\xB7\uD544\uD130): liquidjs \uACF5\uC2DD \uBB38\uC11C
|
|
989
1016
|
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
\uCD5C\uC0C1\uC704 \uAC12\uC740 \uB2E4\uC12F \uAC1C\uB2E4 \u2014 \`lounges\` \xB7 \`stories\` \xB7 \`contentSections\` \xB7 \`latestContents\` \xB7 \`shopCategories\`. \uC774 \uC774\uB984 \uC678\uC758 \uBCC0\uC218\uB294 \uBE48 \uBB38\uC790\uC5F4\uC774 \uB41C\uB2E4. \uAC01 \uD56D\uBAA9\uC758 \uD544\uB4DC\uB294 \uC2E4\uC81C \uB80C\uB354 \uACB0\uACFC\uB85C \uD655\uC778\uD55C\uB2E4. \`data.json\` \uC0D8\uD50C\uB3C4 \uAC19\uC740 \uC774\uB984\uC744 \uC368\uC57C \uD504\uB9AC\uBDF0\uAC00 \uBC30\uD3EC\uC640 \uAC19\uC740 \uBAA8\uC591\uC774 \uB41C\uB2E4. \uC5B4\uB4DC\uBBFC \uD654\uBA74\uC774 \uBC1B\uB294 \uAC12\uC740 \uD655\uC778\uB418\uC9C0 \uC54A\uC558\uB2E4.
|
|
1017
|
+
${LIQUID_DATA_SECTION}
|
|
993
1018
|
|
|
994
1019
|
## \uD504\uB85C\uC81D\uD2B8 \uAD6C\uC870
|
|
995
1020
|
|
|
996
1021
|
\`\`\`
|
|
997
|
-
${
|
|
1022
|
+
${LIQUID_STRUCTURE_BLOCK}
|
|
1023
|
+
package.json
|
|
1024
|
+
AGENTS.md \u2014 \uC774 \uD30C\uC77C
|
|
998
1025
|
\`\`\`
|
|
999
1026
|
|
|
1000
1027
|
## \uD15C\uD50C\uB9BF \uC791\uC131 \uADDC\uCE59
|
|
1001
1028
|
|
|
1002
|
-
|
|
1003
|
-
- \`{name}\`\uC740 **\uC18C\uBB38\uC790\xB7\uC22B\uC790\xB7\uD558\uC774\uD508**\uB9CC \uC4F4\uB2E4. \uD3F4\uB354 \uD558\uB098\uAC00 \uD398\uC774\uC9C0 \uD558\uB098\uB2E4.
|
|
1004
|
-
- \uD30C\uC77C\uBA85\uC740 \uBC18\uB4DC\uC2DC \`template.liquid\`\uB2E4.
|
|
1005
|
-
- \`data.json\`\uC740 \uB85C\uCEEC \uBBF8\uB9AC\uBCF4\uAE30\uC6A9 \uC0D8\uD50C\uC77C \uBFD0\uC774\uB2E4. \uC2E4\uC81C \uAC12\uC740 \uD50C\uB7AB\uD3FC\uC774 \uB123\uC73C\uBBC0\uB85C, \uAC12\uC774 \uBE44\uC5B4 \uC788\uC5B4\uB3C4 \uD654\uBA74\uC774 \uAE68\uC9C0\uC9C0 \uC54A\uAC8C \uAE30\uBCF8\uAC12\xB7\uBE48 \uBAA9\uB85D \uBD84\uAE30\uB97C \uD568\uAED8 \uB123\uB294\uB2E4.
|
|
1006
|
-
- \uC791\uC131\xB7\uC218\uC815 \uC808\uCC28\uC640 \uBB38\uBC95 \uC694\uC810\uC740 \`bstage-liquid\` \uC2A4\uD0AC\uC744 \uB530\uB978\uB2E4.
|
|
1029
|
+
${LIQUID_RULES_BULLETS}
|
|
1007
1030
|
|
|
1008
1031
|
## \uBA85\uB839\uC5B4
|
|
1009
1032
|
|
|
@@ -1021,13 +1044,72 @@ ${deploySection()}
|
|
|
1021
1044
|
|
|
1022
1045
|
## \uAE08\uC9C0 \uC0AC\uD56D
|
|
1023
1046
|
|
|
1024
|
-
- \
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1047
|
+
- React(sdk) \uD15C\uD50C\uB9BF\uC744 \uC774 \uB808\uD3EC\uC5D0 \uCD94\uAC00\uD574 \uD63C\uD569 \uB808\uD3EC\uB85C \uB9CC\uB4E4 \uB54C\uB294 sdk \uD398\uC774\uC9C0 \uD3F4\uB354 \uC774\uB984\uC5D0 \`user\`\xB7\`admin\`\uC744 \uC4F0\uC9C0 \uC54A\uB294\uB2E4(\uB300\uC18C\uBB38\uC790 \uBB34\uC2DC) \u2014 \uADF8 \uC790\uB9AC\uB294 liquid \uC0B0\uCD9C\uBB3C(\`dist/{user|admin}/{name}/\`)\uACFC \uACB9\uCCD0 \`bstage build\`\uAC00 \uC885\uB8CC \uCF54\uB4DC 2\uB85C \uB9C9\uB294\uB2E4. \uCD94\uAC00\uD55C \uB4A4 \`npx @bstage-sdk/cli@latest ai update\`\uB97C \uB3CC\uB9AC\uBA74 \uC774 \uD30C\uC77C\uC774 \uD63C\uD569 \uBCF8\uBB38\uC73C\uB85C \uBC14\uB010\uB2E4
|
|
1048
|
+
${liquidForbidBullets()}
|
|
1049
|
+
`;
|
|
1050
|
+
}
|
|
1051
|
+
var MIXED_SKILLS_LIST = "`bstage-template` React \uC791\uC131, `bstage-liquid` liquid \uC791\uC131, `bstage-deploy` \uBC30\uD3EC, `bstage-onboarding` \uCC98\uC74C\uBD80\uD130 \uB05D\uAE4C\uC9C0, `bstage-migrate` \uB9C8\uC774\uADF8\uB808\uC774\uC158";
|
|
1052
|
+
function mixedManagedBody(space, projectName, target) {
|
|
1053
|
+
return `# AGENTS.md
|
|
1054
|
+
|
|
1055
|
+
## \uD504\uB85C\uC81D\uD2B8 \uAC1C\uC694
|
|
1056
|
+
|
|
1057
|
+
b.stage \uCEE4\uC2A4\uD140 \uD15C\uD50C\uB9BF \uD504\uB85C\uC81D\uD2B8 \u2014 **\uD63C\uD569 \uB808\uD3EC**. React \uCEF4\uD3EC\uB10C\uD2B8(sdk) \uD15C\uD50C\uB9BF\uACFC \`.liquid\` \uD15C\uD50C\uB9BF\uC774 \uD55C \uB808\uD3EC\uC5D0 \uC788\uB2E4. \uD3EC\uD138\uC740 sdk \uD15C\uD50C\uB9BF\uC744 Web Component\uB85C \uBE4C\uB4DC\uD55C \uB4A4 liquid \uD15C\uD50C\uB9BF\uC744 \uADF8\uB300\uB85C \uD568\uAED8 \uD328\uD0A4\uC9D5\uD558\uACE0, \uC0B0\uCD9C\uBB3C \uD56D\uBAA9\uB9C8\uB2E4 \uC885\uB958(sdk\xB7liquid)\uB97C \uB530\uB85C \uBCF8\uB2E4.
|
|
1058
|
+
|
|
1059
|
+
- **Space**: ${space}
|
|
1060
|
+
- **\uB808\uD3EC**: \`${projectName}\`
|
|
1061
|
+
|
|
1062
|
+
${SDK_DOCS_SECTION}
|
|
1063
|
+
|
|
1064
|
+
liquid \uC791\uC131 \uADDC\uC57D\xB7\uB370\uC774\uD130 \uACC4\uC57D\uC740 \uC544\uB798 \uC808\uACFC \`.claude/skills/bstage-liquid/SKILL.md\`\uAC00 \uC9C1\uC811 \uB4E4\uACE0 \uC788\uB2E4. \uBB38\uBC95(\uD0DC\uADF8\xB7\uD544\uD130)\uC740 liquidjs \uACF5\uC2DD \uBB38\uC11C.
|
|
1065
|
+
|
|
1066
|
+
## \uD504\uB85C\uC81D\uD2B8 \uAD6C\uC870
|
|
1067
|
+
|
|
1068
|
+
\`\`\`
|
|
1069
|
+
${SDK_STRUCTURE_BLOCK}
|
|
1070
|
+
${LIQUID_STRUCTURE_BLOCK}
|
|
1071
|
+
\`\`\`
|
|
1072
|
+
|
|
1073
|
+
## \uD63C\uD569 \uB808\uD3EC \uADDC\uCE59
|
|
1074
|
+
|
|
1075
|
+
- **\uC5B4\uB290 \uBC29\uC2DD\uC73C\uB85C \uB9CC\uB4E4\uAE4C**: \uC0C1\uD638\uC791\uC6A9\xB7\uC0C1\uD0DC\xB7API \uD638\uCD9C\uC774 \uD544\uC694\uD55C \uD654\uBA74\uC740 React(\`src/pages\`\xB7\`src/slots\`), \uB370\uC774\uD130\uB97C \uBC1B\uC544 \uADF8\uB824 \uC8FC\uAE30\uB9CC \uD558\uBA74 \uB418\uB294 \uD654\uBA74\uC740 liquid(\`public/{user|admin}/{name}/\`). \uAC19\uC740 \uD654\uBA74\uC744 \uB450 \uBC29\uC2DD\uC73C\uB85C \uB9CC\uB4E4\uC9C0 \uC54A\uB294\uB2E4.
|
|
1076
|
+
- **\uC608\uC57D \uC774\uB984**: sdk \uD398\uC774\uC9C0 \uD3F4\uB354 \`src/pages/user/\u2026\`\xB7\`src/pages/admin/\u2026\`\uC740 \uB9CC\uB4E4 \uC218 \uC5C6\uB2E4(\uB300\uC18C\uBB38\uC790 \uBB34\uC2DC \u2014 \`User\`\uB3C4 \uAC19\uB2E4). \uC0B0\uCD9C\uBB3C\uC774 \`dist/{user|admin}/\u2026\`\uB85C \uB098\uAC00 liquid \uC0B0\uCD9C\uBB3C \uC790\uB9AC\uC640 \uACB9\uCE58\uACE0, \uAC19\uC740 \uB514\uB809\uD130\uB9AC\uC5D0 \`template.js\`\xB7\`template.liquid\`\uAC00 \uD568\uAED8 \uC788\uC73C\uBA74 \uD3EC\uD138\uC774 sdk\uB85C\uB9CC \uD310\uC815\uD574 liquid\uAC00 \uC870\uC6A9\uD788 \uC0AC\uB77C\uC9C4\uB2E4. \`bstage build\`\uC640 \uD3EC\uD138 \uBE4C\uB354\uAC00 \uBAA8\uB450 \uC5EC\uAE30\uC11C \uB9C9\uB294\uB2E4. \uC704\uC82F(\`src/slots\`)\uC740 \uD574\uB2F9 \uC5C6\uB2E4.
|
|
1077
|
+
- **\`bstage build\`**: sdk \uC5D4\uD2B8\uB9AC\uB97C \uBC88\uB4E4\uD558\uACE0 liquid\uB294 \uAC80\uC99D\uB9CC \uD55C\uB2E4 \u2014 \`dist/\`\uC5D0 liquid\uB294 \uB4E4\uC5B4\uAC00\uC9C0 \uC54A\uB294\uB2E4(\uD3EC\uD138\uC774 push\uB41C \uCEE4\uBC0B\uC758 \`public/\`\uC5D0\uC11C \uD328\uD0A4\uC9D5). \uAC80\uC99D \uC624\uB958\uAC00 \uC788\uC73C\uBA74 \uBC88\uB4E4\uD558\uC9C0 \uC54A\uACE0 \uC885\uB8CC \uCF54\uB4DC 2.
|
|
1078
|
+
- **\`bstage dev\`**: \uAE30\uBCF8\uC740 sdk(Vite) \uD504\uB9AC\uBDF0. liquid \uD504\uB9AC\uBDF0\uB294 \`bstage dev --kind liquid\`\uB85C \uB530\uB85C \uB744\uC6B4\uB2E4 \u2014 \uB450 \uC11C\uBC84\uB97C \uD568\uAED8 \uB744\uC6B0\uC9C0 \uC54A\uB294\uB2E4.
|
|
1079
|
+
- liquid \uD15C\uD50C\uB9BF\uC740 PAGE \uBC30\uCE58\uB9CC \uB41C\uB2E4. \uC704\uC82F \uC790\uB9AC\uC5D0\uB294 sdk \uC704\uC82F(\`src/slots\`)\uB9CC \uBD99\uC778\uB2E4.
|
|
1080
|
+
|
|
1081
|
+
## React \uD15C\uD50C\uB9BF \uAC1C\uBC1C \uADDC\uCE59
|
|
1082
|
+
|
|
1083
|
+
${sdkTemplateRules(space)}
|
|
1084
|
+
|
|
1085
|
+
## liquid \uD15C\uD50C\uB9BF \uC791\uC131 \uADDC\uCE59
|
|
1086
|
+
|
|
1087
|
+
${LIQUID_RULES_BULLETS}
|
|
1088
|
+
|
|
1089
|
+
${LIQUID_DATA_SECTION}
|
|
1090
|
+
|
|
1091
|
+
${designRulesBrief(target)}
|
|
1092
|
+
|
|
1093
|
+
## \uD658\uACBD \uC124\uC815
|
|
1094
|
+
|
|
1095
|
+
${SDK_ENV_SECTION}
|
|
1096
|
+
|
|
1097
|
+
## \uBA85\uB839\uC5B4
|
|
1098
|
+
|
|
1099
|
+
- \`npm run dev\` \uB610\uB294 \`bstage dev\` \u2014 sdk(Vite) \uAC1C\uBC1C \uC11C\uBC84(\uC778\uC99D \uD504\uB85D\uC2DC \uD3EC\uD568). \uB85C\uADF8\uC778 \uD398\uC774\uC9C0: http://localhost:5173/__bstage__/login
|
|
1100
|
+
- \`bstage dev --kind liquid\` \u2014 liquid \uBBF8\uB9AC\uBCF4\uAE30(\uBAA9\uB85D\uC5D0\uC11C \uD15C\uD50C\uB9BF\uC744 \uACE8\uB77C \uD655\uC778, \`data.json\`\uC73C\uB85C \uB80C\uB354)
|
|
1101
|
+
- \`bstage build\` \u2014 sdk \uBC88\uB4E4 + liquid \uAC80\uC99D
|
|
1102
|
+
- \`bstage deploy\` \u2014 \uD3EC\uD138 \uBC30\uD3EC (\uC544\uB798 "\uBC30\uD3EC" \uC808)
|
|
1103
|
+
|
|
1104
|
+
${sdkMigrationSection(MIXED_SKILLS_LIST)}
|
|
1105
|
+
|
|
1106
|
+
${deploySection()}
|
|
1107
|
+
|
|
1108
|
+
## \uAE08\uC9C0 \uC0AC\uD56D
|
|
1109
|
+
|
|
1110
|
+
- sdk \uD398\uC774\uC9C0\uB97C \`src/pages/user\`\xB7\`src/pages/admin\` \uC544\uB798\uC5D0 \uB9CC\uB4E4\uC9C0 \uC54A\uB294\uB2E4 \u2014 liquid \uC0B0\uCD9C\uBB3C \uC790\uB9AC\uC640 \uACB9\uCE5C\uB2E4(\uC704 '\uD63C\uD569 \uB808\uD3EC \uADDC\uCE59')
|
|
1111
|
+
${sdkForbidBullets()}
|
|
1112
|
+
${liquidForbidBullets()}
|
|
1031
1113
|
`;
|
|
1032
1114
|
}
|
|
1033
1115
|
function renderManagedBlock(opts) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bstage-sdk/ai-toolkit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "bstage SDK ai-toolkit — 에이전트용 스킬·AGENTS.md 콘텐츠(cli가 소비)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"@types/node": "^25.5.0",
|
|
35
35
|
"tsup": "^8.0.0",
|
|
36
36
|
"typescript": "^5.5.0",
|
|
37
|
-
"@bstage-sdk/design": "0.
|
|
37
|
+
"@bstage-sdk/design": "0.6.0"
|
|
38
38
|
},
|
|
39
39
|
"license": "MIT",
|
|
40
40
|
"scripts": {
|