@bstage-sdk/ai-toolkit 0.5.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/LICENSE +21 -0
- package/README.md +12 -0
- package/dist/index.cjs +1212 -0
- package/dist/index.d.cts +217 -0
- package/dist/index.d.ts +217 -0
- package/dist/index.js +1162 -0
- package/package.json +44 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,1162 @@
|
|
|
1
|
+
// src/version.ts
|
|
2
|
+
var VERSION = "0.5.0";
|
|
3
|
+
|
|
4
|
+
// src/skills/deploy.ts
|
|
5
|
+
function deploySkillMd() {
|
|
6
|
+
return `---
|
|
7
|
+
name: bstage-deploy
|
|
8
|
+
description: b.stage \uD3EC\uD138\uB85C \uBC30\uD3EC\uD558\uACE0 \uB864\uBC31\xB7\uAC8C\uC2DC\xB7\uBE4C\uB4DC \uB85C\uADF8\uB97C \uB2E4\uB8EC\uB2E4. "\uBC30\uD3EC\uD574\uC918", "\uC62C\uB824\uC918", "\uB864\uBC31", "\uAC8C\uC2DC \uAEBC", "\uBE4C\uB4DC \uC2E4\uD328 \uB85C\uADF8 \uBD10\uC918" \uAC19\uC740 \uC694\uCCAD\uC744 \uBC1B\uC744 \uB54C \uC0AC\uC6A9\uD55C\uB2E4.
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# \uC5ED\uD560
|
|
12
|
+
|
|
13
|
+
\uC774 \uB808\uD3EC\uC758 \uCF54\uB4DC\uB97C \uD3EC\uD138\uC744 \uD1B5\uD574 \uD50C\uB7AB\uD3FC\uC5D0 \uC62C\uB9AC\uACE0, \uBB38\uC81C\uAC00 \uC0DD\uAE30\uBA74 \uB418\uB3CC\uB9B0\uB2E4. \uC774 \uC2A4\uD0AC\uC740 \uC21C\uC11C\xB7\uD310\uC815\xB7\uC2E4\uD328 \uAC08\uB798\uB9CC \uB2F4\uB294\uB2E4. \uD50C\uB798\uADF8\uC640 \uD658\uACBD\uBCC0\uC218\uC758 \uC815\uD655\uD55C \uC774\uB984\uC740 \uD56D\uC0C1 \`bstage <\uBA85\uB839> --help\`\uB85C \uD655\uC778\uD55C\uB2E4(\uAE30\uC5B5\uC73C\uB85C \uB9CC\uB4E4\uC9C0 \uC54A\uB294\uB2E4).
|
|
14
|
+
|
|
15
|
+
# \uC804\uC81C (\uC5EC\uAE30\uC11C \uC5B4\uAE0B\uB098\uBA74 \uB098\uBA38\uC9C0\uB294 \uC758\uBBF8\uAC00 \uC5C6\uB2E4)
|
|
16
|
+
|
|
17
|
+
- **\uD3EC\uD138\uC740 \uC6D0\uACA9 \uC800\uC7A5\uC18C \uAE30\uBCF8 \uBE0C\uB79C\uCE58\uC758 push\uB41C \uCEE4\uBC0B\uC744 \uBE4C\uB4DC\uD55C\uB2E4.** \uB85C\uCEEC \`dist/\`\uB97C \uC5C5\uB85C\uB4DC\uD558\uB294 \uAC83\uC774 \uC544\uB2C8\uB2E4. \uB85C\uCEEC\uC5D0\uB9CC \uC788\uB294 \uBCC0\uACBD\uC740 \uC808\uB300 \uBC18\uC601\uB418\uC9C0 \uC54A\uB294\uB2E4.
|
|
18
|
+
- \`bstage build\`\uB294 **\uB85C\uCEEC \uD655\uC778\uC6A9**\uC774\uB2E4. \uBC30\uD3EC \uC0B0\uCD9C\uBB3C\uC740 \uD3EC\uD138\uC774 \uB2E4\uC2DC \uB9CC\uB4E0\uB2E4.
|
|
19
|
+
- **\uBC30\uCE58(\uD398\uC774\uC9C0) \uC0DD\uC131\uACFC \uB808\uD3EC \uC5F0\uACB0\uC740 \uD3EC\uD138 \uD654\uBA74\uC5D0\uC11C\uB9CC** \uD560 \uC218 \uC788\uB2E4. CLI \uD1A0\uD070\uC73C\uB85C\uB294 \uB418\uC9C0 \uC54A\uB294\uB2E4(\uC758\uB3C4\uB41C \uC124\uACC4).
|
|
20
|
+
- \uBC30\uD3EC\uB294 \uC5EC\uB7EC \uC0AC\uB78C\uC774 \uAC19\uC740 \uC2A4\uD14C\uC774\uC9C0\uB97C \uAC74\uB4DC\uB9B0\uB2E4. \uC801\uC6A9 \uC9C1\uC804 \uC0C1\uD0DC\uB97C \uD655\uC778\uD558\uACE0, \uC911\uAC04\uC5D0 \uBC14\uB00C\uC5C8\uC73C\uBA74 \uBA48\uCD98\uB2E4.
|
|
21
|
+
|
|
22
|
+
# \uC808\uCC28
|
|
23
|
+
|
|
24
|
+
## 1. \uC0C1\uD0DC\uBD80\uD130 \uBCF8\uB2E4 (\uC77D\uAE30 \uC804\uC6A9)
|
|
25
|
+
|
|
26
|
+
\`\`\`bash
|
|
27
|
+
bstage whoami
|
|
28
|
+
bstage list
|
|
29
|
+
\`\`\`
|
|
30
|
+
|
|
31
|
+
- \`whoami\` \u2014 \uC5B4\uB290 \uC870\uC9C1\xB7\uC2A4\uD14C\uC774\uC9C0\uC5D0 \uC5B4\uB5A4 \uC5ED\uD560\uB85C \uB85C\uADF8\uC778\uB3FC \uC788\uB294\uC9C0. \uC778\uC99D\uC774 \uC5C6\uC73C\uBA74 \`bstage login\`.
|
|
32
|
+
- \`list\` \u2014 \uC774 \uB808\uD3EC\uC758 \uBC30\uCE58(\uB77C\uC774\uBE0C \uBC84\uC804\xB7\uAC8C\uC2DC \uC0C1\uD0DC)\uC640 \uCD5C\uADFC \uBE4C\uB4DC.
|
|
33
|
+
- \uB450 \uBA85\uB839 \uBAA8\uB450 \uAD6C\uC870\uD654 \uCD9C\uB825\uC744 \uC9C0\uC6D0\uD55C\uB2E4(\`--json\`, \uBA85\uB839\uBCC4 \`--help\` \uD655\uC778) \u2014 \uAC12\uC744 \uD504\uB85C\uADF8\uB7A8\uC73C\uB85C \uC77D\uC5B4\uC57C \uD560 \uB54C \uC4F4\uB2E4.
|
|
34
|
+
|
|
35
|
+
## 2. \uAC08\uB798
|
|
36
|
+
|
|
37
|
+
### 2a. \`bstage list\`\uC5D0 \uBC30\uCE58\uAC00 0\uAC74\uC77C \uB54C
|
|
38
|
+
|
|
39
|
+
\uBC30\uD3EC\uD560 \uC790\uB9AC\uAC00 \uC5C6\uB2E4\uB294 \uB73B\uC774\uB2E4. **\uD3EC\uD138 \uD654\uBA74\uC5D0\uC11C \uBA3C\uC800 \uB9CC\uB4E4\uC5B4\uC57C \uD55C\uB2E4.** \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uC21C\uC11C\uB97C \uC54C\uB824\uC900\uB2E4(\uC8FC\uC18C\uB294 \uC0AC\uC6A9\uC790\uAC00 \uC4F0\uB294 \uD3EC\uD138\uC744 \uADF8\uB300\uB85C \uB530\uB978\uB2E4).
|
|
40
|
+
|
|
41
|
+
1. \uC2A4\uD14C\uC774\uC9C0 > \uB808\uD3EC > \uC0C8 \uB808\uD3EC \uC5F0\uACB0 (\uC870\uC9C1\uC5D0\uC11C \uCC98\uC74C\uC774\uBA74 GitHub \uC571 \uC124\uCE58\uAC00 1\uD68C \uC120\uD589)
|
|
42
|
+
2. \uD654\uBA74\uC758 "\uC0C8 \uBC84\uC804 \uBE4C\uB4DC"\uB85C \uCCAB \uBE4C\uB4DC
|
|
43
|
+
3. \uC2A4\uD14C\uC774\uC9C0 > \uD398\uC774\uC9C0 > \uC0C8 \uD398\uC774\uC9C0 \u2192 \uCEE4\uC2A4\uD140 \uBC29\uC2DD(\`sdk\` \xB7 \`liquid\` \xB7 \`slot\`) \u2192 \uB808\uD3EC\xB7\uC0B0\uCD9C\uBB3C \uC120\uD0DD \u2192 \uACBD\uB85C(PAGE) \uD655\uC778. **liquid\uB294 PAGE\uB9CC** \uAC00\uB2A5\uD558\uB2E4
|
|
44
|
+
4. \uD654\uBA74\uC5D0\uC11C "\uC801\uC6A9"\uACFC "\uAC8C\uC2DC\uD558\uAE30"
|
|
45
|
+
|
|
46
|
+
\uB05D\uB0AC\uB294\uC9C0\uB294 \`bstage list\`\uB85C \uD655\uC778\uD55C\uB2E4. \uBC30\uCE58\uAC00 \uBCF4\uC774\uBA74 2b\uB85C \uAC04\uB2E4. \uC774\uD6C4\uBD80\uD130\uB294 \uAC19\uC740 \uC77C\uC744 \`bstage deploy\`\uAC00 \uD55C\uB2E4.
|
|
47
|
+
|
|
48
|
+
### 2b. \uBC30\uCE58\uAC00 \uC788\uC744 \uB54C
|
|
49
|
+
|
|
50
|
+
\`\`\`bash
|
|
51
|
+
bstage deploy
|
|
52
|
+
\`\`\`
|
|
53
|
+
|
|
54
|
+
\uC21C\uC11C\uB294 \uC774\uB807\uAC8C \uD750\uB978\uB2E4: git \uC0AC\uC804\uC810\uAC80 \u2192 \uD3EC\uD138 \uBE4C\uB4DC \uD2B8\uB9AC\uAC70 \u2192 \uBE4C\uB4DC \uC644\uB8CC \uB300\uAE30(\uB85C\uADF8\uB97C \uB530\uB77C \uCD9C\uB825) \u2192 \uBC30\uCE58\uC5D0 \uC801\uC6A9.
|
|
55
|
+
|
|
56
|
+
- \uD2B9\uC815 \uBC30\uCE58\uB9CC \uB300\uC0C1\uC73C\uB85C \uD558\uAC70\uB098, \uBE4C\uB4DC\uB9CC \uAC78\uACE0 \uB05D\uB0B4\uAC70\uB098(\uB300\uAE30 \uC0DD\uB7B5), \uAD6C\uC870\uD654 \uCD9C\uB825\uC744 \uC4F0\uB824\uBA74 \`bstage deploy --help\`\uC5D0\uC11C \uD574\uB2F9 \uC635\uC158\uC744 \uD655\uC778\uD55C\uB2E4.
|
|
57
|
+
|
|
58
|
+
## 3. \uC2E4\uD589 \uADDC\uCE59 (\uD655\uC778 \uC5C6\uC774 \uC801\uC6A9\uD558\uC9C0 \uC54A\uB294\uB2E4)
|
|
59
|
+
|
|
60
|
+
\`bstage deploy\`\uB294 \uAE30\uBCF8\uC801\uC73C\uB85C **\uBB34\uC5C7\uC774 \uC5B4\uB514\uB85C \uAC00\uB294\uC9C0 \uD45C\uB85C \uBCF4\uC5EC\uC8FC\uACE0 \uD655\uC778\uC744 \uBB3B\uB294\uB2E4.** \uC774 \uD655\uC778 \uD654\uBA74\uC744 \uC5C6\uC560\uC9C0 \uC54A\uB294 \uAC83\uC774 \uAE30\uBCF8\uAC12\uC774\uB2E4.
|
|
61
|
+
|
|
62
|
+
- \uAE30\uBCF8: \uBC30\uD3EC \uC804\uC5D0 \uB124\uAC00 \uD55C \uC904\uB85C \uC694\uC57D\uD558\uACE0(\uC5B4\uB290 \uB808\uD3EC\uC758 \uC5B4\uB290 \uCEE4\uBC0B\uC774 \uC5B4\uB290 \uC2A4\uD14C\uC774\uC9C0\uC758 \uBA87 \uAC1C \uBC30\uCE58\uB85C \uAC00\uB294\uC9C0), \`--yes\` **\uC5C6\uC774** \uC2E4\uD589\uD574 **CLI\uC758 \uD655\uC778\uCC3D\uC744 \uC0AC\uC6A9\uC790\uAC00 \uC9C1\uC811 \uBCF4\uACE0 \uB2F5\uD558\uAC8C** \uD55C\uB2E4.
|
|
63
|
+
- \uC0AC\uC6A9\uC790\uAC00 \uC774\uBBF8 \uBA85\uC2DC\uC801\uC73C\uB85C \uD655\uC778\uD588\uAC70\uB098 \uBE44\uB300\uD654\uD615 \uD658\uACBD(CI)\uC774\uBA74 \`--yes\`\uB97C \uC4F4\uB2E4. \uAD6C\uC870\uD654 \uCD9C\uB825(\`--json\`)\uC740 \uD655\uC778 \uD504\uB86C\uD504\uD2B8\uC640 \uD568\uAED8 \uC4F8 \uC218 \uC5C6\uC73C\uBBC0\uB85C \`--yes\`\uC640 \uD568\uAED8 \uC4F4\uB2E4.
|
|
64
|
+
- \uC0AC\uC804\uC810\uAC80\uC5D0 \uAC78\uB9AC\uBA74(\uCEE4\uBC0B\uB418\uC9C0 \uC54A\uC740 \uBCC0\uACBD \xB7 \uAE30\uBCF8 \uBE0C\uB79C\uCE58\uAC00 \uC544\uB2D8 \xB7 push\uB418\uC9C0 \uC54A\uC740 \uCEE4\uBC0B) **\uADF8 \uC0AC\uC2E4\uC744 \uACE0\uCE5C\uB2E4.** \`--skip-git-check\`\uB85C \uB36E\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uADF8 \uC635\uC158\uC740 "\uB85C\uCEEC\uACFC \uC6D0\uACA9\uC774 \uB2E4\uB974\uB2E4\uB294 \uAC78 \uC54C\uACE0\uB3C4 \uC6D0\uACA9 \uAE30\uC900\uC73C\uB85C \uBE4C\uB4DC\uD558\uACA0\uB2E4"\uB294 \uC120\uC5B8\uC774\uB77C, \uC0AC\uC6A9\uC790\uAC00 \uBC29\uAE08 \uACE0\uCE5C \uB0B4\uC6A9\uC774 \uBE60\uC9C4 \uCC44 \uBC30\uD3EC\uB418\uB294 \uB300\uD45C\uC801 \uC6D0\uC778\uC774\uB2E4.
|
|
65
|
+
|
|
66
|
+
## 4. \uC2E4\uD328\uD588\uC744 \uB54C \u2014 \uC885\uB8CC \uCF54\uB4DC\uB85C \uAC08\uB798\uB97C \uC7A1\uB294\uB2E4
|
|
67
|
+
|
|
68
|
+
| \uCF54\uB4DC | \uB73B | \uB300\uC751 |
|
|
69
|
+
| --- | --- | --- |
|
|
70
|
+
| 0 | \uC131\uACF5 | - |
|
|
71
|
+
| 1 | \uC2E4\uD328(\uBE4C\uB4DC \uC2E4\uD328 \uD3EC\uD568) | \`bstage logs <\uBE4C\uB4DC id>\` \uB610\uB294 \`bstage logs -f\`\uB85C \uC6D0\uC778 \uD655\uC778 \uD6C4 \uCF54\uB4DC \uC218\uC815 \u2192 \uCEE4\uBC0B\xB7push \u2192 \uC7AC\uBC30\uD3EC |
|
|
72
|
+
| 2 | \uC0AC\uC804\uC870\uAC74 \uBBF8\uCDA9\uC871 | \uBA54\uC2DC\uC9C0\uAC00 \uBB34\uC5C7\uC774 \uBE60\uC84C\uB294\uC9C0 \uB9D0\uD55C\uB2E4(\uCEE4\uBC0B\xB7push\xB7\uBE0C\uB79C\uCE58\xB7\uBC30\uCE58 0\uAC74\xB7\uD655\uC778 \uBD88\uAC00 \uD658\uACBD). \uADF8 \uC870\uAC74\uC744 \uCC44\uC6B4\uB2E4 |
|
|
73
|
+
| 3 | \uC778\uC99D | \`bstage login\` \uB2E4\uC2DC. CI\uBA74 \uD1A0\uD070 \uD658\uACBD\uBCC0\uC218 \uC124\uC815 \uD655\uC778 |
|
|
74
|
+
| 4 | \uCDA9\uB3CC | \uB300\uAE30\uD558\uB294 \uB3D9\uC548 \uB2E4\uB978 \uC0AC\uB78C\uC774 \uBA3C\uC800 \uC801\uC6A9\uD588\uB2E4. **\uC7AC\uC2DC\uB3C4\uBD80\uD130 \uD558\uC9C0 \uB9D0\uACE0** \`bstage list\`\uB85C \uD604\uC7AC \uB77C\uC774\uBE0C\uB97C \uD655\uC778\uD558\uACE0 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uBCF4\uACE0\uD55C\uB2E4 |
|
|
75
|
+
| 5 | \uC694\uCCAD \uC81C\uD55C | \uC7A0\uC2DC \uAE30\uB2E4\uB838\uB2E4 \uC7AC\uC2DC\uB3C4 |
|
|
76
|
+
|
|
77
|
+
\uBE4C\uB4DC \uB85C\uADF8\uB294 \`bstage logs\`\uB85C \uBCF8\uB2E4(\uBE4C\uB4DC id \uC0DD\uB7B5 \uC2DC \uCD5C\uADFC \uBE4C\uB4DC, \`-f\`\uB85C \uB05D\uB0A0 \uB54C\uAE4C\uC9C0 \uB530\uB77C\uAC10).
|
|
78
|
+
|
|
79
|
+
## 5. \uB418\uB3CC\uB9AC\uAE30 \xB7 \uAC8C\uC2DC \uB044\uAE30
|
|
80
|
+
|
|
81
|
+
- \`bstage rollback\` \u2014 \uC9C1\uC804 \uC131\uACF5 \uBE4C\uB4DC\uB97C \uB2E4\uC2DC \uB77C\uC774\uBE0C\uB85C \uC801\uC6A9\uD55C\uB2E4. \uD2B9\uC815 \uBE4C\uB4DC\uB85C \uB418\uB3CC\uB9AC\uB824\uBA74 \uBE4C\uB4DC id\uB97C \uC778\uC790\uB85C \uC900\uB2E4(\`bstage list\`\uC5D0\uC11C \uD655\uC778).
|
|
82
|
+
- \`bstage publish off\` \u2014 \uAC8C\uC2DC\uB9CC \uB048\uB2E4. \uB77C\uC774\uBE0C \uBC84\uC804\uC740 \uADF8\uB300\uB85C \uC720\uC9C0\uB418\uBBC0\uB85C, \uD654\uBA74\uC744 \uAE09\uD788 \uB0B4\uB824\uC57C \uD560 \uB54C \uBA3C\uC800 \uC4F8 \uCE74\uB4DC\uB2E4. \uB418\uB3CC\uB9AC\uB824\uBA74 \`bstage publish on\`.
|
|
83
|
+
- \uB458 \uB2E4 \uAE30\uBCF8\uC73C\uB85C \uD655\uC778\uC744 \uBB3B\uB294\uB2E4. \uC7A5\uC560 \uC0C1\uD669\uC774\uB77C \uC0AC\uC6A9\uC790\uAC00 \uC774\uBBF8 \uACB0\uC815\uD588\uB2E4\uBA74 \`--yes\`\uB97C \uC4F0\uB418, **\uBB34\uC5C7\uC774 \uC5B4\uB5BB\uAC8C \uBC14\uB00C\uB294\uC9C0 \uBA3C\uC800 \uD55C \uC904\uB85C \uC54C\uB9B0\uB2E4.**
|
|
84
|
+
- \uC5B4\uB290 \uCABD\uC744 \uC4F8\uC9C0 \uD5F7\uAC08\uB9AC\uBA74: \uC798\uBABB\uB41C \uB0B4\uC6A9\uC774 \uB5A0 \uC788\uC73C\uBA74 \`publish off\`(\uC989\uC2DC \uB0B4\uB9BC) \u2192 \uC6D0\uC778 \uD30C\uC545 \u2192 \`rollback\`(\uC9C1\uC804 \uC815\uC0C1\uC73C\uB85C \uBCF5\uAD6C).
|
|
85
|
+
|
|
86
|
+
## 6. CI\uC5D0\uC11C \uC4F8 \uB54C
|
|
87
|
+
|
|
88
|
+
- \uB85C\uADF8\uC778\uC740 \uB300\uD654\uD615 \uB300\uC2E0 \uD1A0\uD070 \uBD99\uC5EC\uB123\uAE30 \uACBD\uB85C\uB97C \uC4F4\uB2E4. \uC5F0\uACB0 \uC815\uBCF4(\uC870\uC9C1\xB7\uC2A4\uD14C\uC774\uC9C0\xB7\uB808\uD3EC \uB4F1)\uB294 \`.bstage/project.json\` \uB300\uC2E0 \uD658\uACBD\uBCC0\uC218\uB85C \uC900\uB2E4. **\uBCC0\uC218 \uC774\uB984\uC740 \`bstage login --help\`\xB7\`bstage link --help\`\uC5D0 \uC788\uB294 \uAC83\uC744 \uADF8\uB300\uB85C \uC4F4\uB2E4** \u2014 \uC5EC\uAE30 \uC62E\uACA8 \uC801\uC9C0 \uC54A\uB294\uB2E4(\uB4DC\uB9AC\uD504\uD2B8 \uBC29\uC9C0).
|
|
89
|
+
- \uBE44\uB300\uD654\uD615\uC774\uBBC0\uB85C \`--yes\`\uAC00 \uD544\uC694\uD558\uACE0, \uACB0\uACFC\uB97C \uD30C\uC2F1\uD560 \uAC70\uB77C\uBA74 \`--json\`\uACFC \uD568\uAED8 \uC4F4\uB2E4.
|
|
90
|
+
- \uD1A0\uD070\uC740 CI \uC2DC\uD06C\uB9BF\uC73C\uB85C\uB9CC \uC8FC\uC785\uD55C\uB2E4. \uB85C\uADF8\uC5D0 \uCC0D\uAC70\uB098 \uC800\uC7A5\uC18C\uC5D0 \uCEE4\uBC0B\uD558\uC9C0 \uC54A\uB294\uB2E4.
|
|
91
|
+
|
|
92
|
+
# \uD558\uC9C0 \uB9D0 \uAC83
|
|
93
|
+
|
|
94
|
+
- \uD1A0\uD070\uC744 \uCD9C\uB825\xB7\uB85C\uADF8\xB7\uCEE4\uBC0B\uC5D0 \uB0A8\uAE30\uAE30 (\`whoami\`\uB85C \uB85C\uADF8\uC778 \uC5EC\uBD80\uB9CC \uD655\uC778\uD55C\uB2E4)
|
|
95
|
+
- \`--skip-git-check\`\uB97C \uC2B5\uAD00\uC801\uC73C\uB85C \uC4F0\uAE30 \u2014 \uC0AC\uC804\uC810\uAC80\uC774 \uC7A1\uB294 \uAC74 "\uC9C0\uAE08 \uACE0\uCE5C \uAC8C \uC548 \uC62C\uB77C\uAC04\uB2E4"\uB294 \uC0AC\uC2E4\uC774\uB2E4
|
|
96
|
+
- \uD655\uC778 \uD504\uB86C\uD504\uD2B8\uB97C \uAE30\uBCF8\uC73C\uB85C \`--yes\`\uB85C \uAC74\uB108\uB6F0\uAE30
|
|
97
|
+
- \uC885\uB8CC \uCF54\uB4DC 4(\uCDA9\uB3CC)\uB97C \uADF8\uB300\uB85C \uC7AC\uC2DC\uB3C4\uD558\uAE30 \u2014 \uB0A8\uC758 \uBC30\uD3EC\uB97C \uB36E\uC5B4\uC4F8 \uC218 \uC788\uB2E4
|
|
98
|
+
- \uB0B4\uAC00 \uB9E1\uC740 \uBC30\uCE58 \uBC16\uC758 \uBC30\uCE58\uB97C \uD568\uAED8 \uC801\uC6A9\xB7\uAC8C\uC2DC \uC804\uD658\uD558\uAE30 (\uBC94\uC704\uB97C \uC881\uD788\uB294 \uC635\uC158\uC740 \`--help\` \uCC38\uC870)
|
|
99
|
+
- \uB85C\uCEEC \`dist/\`\uB97C \uC5B4\uB518\uAC00\uC5D0 \uC5C5\uB85C\uB4DC\uD574 \uBC30\uD3EC\uD558\uB824 \uC2DC\uB3C4\uD558\uAE30 \u2014 \uBC30\uD3EC \uACBD\uB85C\uAC00 \uC544\uB2C8\uB2E4
|
|
100
|
+
- \uBC30\uCE58\uAC00 0\uAC74\uC778\uB370 \uC6D0\uC778\uC744 \uCC3E\uC9C0 \uC54A\uACE0 \`deploy\`\uB97C \uBC18\uBCF5\uD558\uAE30
|
|
101
|
+
`;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// src/skills/liquid.ts
|
|
105
|
+
function liquidSkillMd() {
|
|
106
|
+
return `---
|
|
107
|
+
name: bstage-liquid
|
|
108
|
+
description: b.stage liquid \uD15C\uD50C\uB9BF\uC744 \uC791\uC131\xB7\uC218\uC815\uD55C\uB2E4. liquid \uB808\uD3EC\uC5D0\uC11C "liquid \uD15C\uD50C\uB9BF", "template.liquid", "data.json", "\uD398\uC774\uC9C0 \uD558\uB098 \uB354" \uAC19\uC740 \uC694\uCCAD\uC744 \uBC1B\uC744 \uB54C \uC0AC\uC6A9\uD55C\uB2E4.
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
# \uC5ED\uD560
|
|
112
|
+
|
|
113
|
+
\uC774 \uD504\uB85C\uC81D\uD2B8\uC5D0\uC11C \`.liquid\` \uD15C\uD50C\uB9BF\uC744 \uC791\uC131\uD55C\uB2E4. \uC791\uC131\uD55C \uD15C\uD50C\uB9BF\uC740 \uD3EC\uD138\uC774 \uADF8\uB300\uB85C \uD328\uD0A4\uC9D5\uD558\uACE0, \uD50C\uB7AB\uD3FC\uC774 **\uC11C\uBC84\uC5D0\uC11C \uB370\uC774\uD130\uB97C \uB123\uC5B4** \uB80C\uB354\uD55C\uB2E4. \uBE0C\uB77C\uC6B0\uC800\uC5D0\uC11C \uB3C4\uB294 \uBE4C\uB4DC \uC0B0\uCD9C\uBB3C\uC774 \uC544\uB2C8\uB2E4.
|
|
114
|
+
|
|
115
|
+
\uC774 \uC2A4\uD0AC\uC740 \uAD6C\uC870 \uADDC\uC57D\xB7\uC808\uCC28\xB7\uD568\uC815\uB9CC \uB2F4\uB294\uB2E4. \uBB38\uBC95 \uC0C1\uC138\uB294 liquidjs \uBB38\uC11C\uB97C, \uBA85\uB839 \uC635\uC158\uC740 \`bstage <\uBA85\uB839> --help\`\uB97C \uBCF8\uB2E4.
|
|
116
|
+
|
|
117
|
+
# \uAD8C\uC704 \uC788\uB294 \uCD9C\uCC98
|
|
118
|
+
|
|
119
|
+
- \`bstage --help\`, \`bstage <\uBA85\uB839> --help\` \u2014 \uBA85\uB839\xB7\uC635\uC158
|
|
120
|
+
- \uD504\uB85C\uC81D\uD2B8 \uADDC\uCE59: \uB808\uD3EC \uB8E8\uD2B8\uC758 \`AGENTS.md\`
|
|
121
|
+
- \uBB38\uBC95: liquidjs \uACF5\uC2DD \uBB38\uC11C(\uD0DC\uADF8\xB7\uD544\uD130 \uBAA9\uB85D). \uC5EC\uAE30 \uC62E\uACA8 \uC801\uC9C0 \uC54A\uB294\uB2E4
|
|
122
|
+
- \uBC30\uD3EC: \`bstage-deploy\` \uC2A4\uD0AC
|
|
123
|
+
|
|
124
|
+
# \uD50C\uB7AB\uD3FC\uC774 \uB123\uB294 \uB370\uC774\uD130 (\uC720\uC800 \uD654\uBA74)
|
|
125
|
+
|
|
126
|
+
\uC720\uC800 \uD654\uBA74 \uD15C\uD50C\uB9BF\uC774 \uBC1B\uB294 \uCD5C\uC0C1\uC704 \uAC12\uC740 **\uB2E4\uC12F \uAC1C\uBFD0**\uC774\uB2E4. \uC774 \uC774\uB984 \uC678\uC758 \uBCC0\uC218\uB294 \uBE48 \uBB38\uC790\uC5F4\uC774 \uB41C\uB2E4.
|
|
127
|
+
|
|
128
|
+
| \uC774\uB984 | \uB0B4\uC6A9 |
|
|
129
|
+
| --- | --- |
|
|
130
|
+
| \`lounges\` | \uB77C\uC6B4\uC9C0 \uBAA9\uB85D |
|
|
131
|
+
| \`stories\` | \uB77C\uC6B4\uC9C0\uBCC4 \uC2A4\uD0C0 \uD648 \uD53C\uB4DC\uB97C \uBAA8\uC740 \uBAA9\uB85D |
|
|
132
|
+
| \`contentSections\` | \uCF58\uD150\uCE20 \uD648 \uC139\uC158 \uBAA9\uB85D |
|
|
133
|
+
| \`latestContents\` | \uAC01 \uC139\uC158\uC758 \uCF58\uD150\uCE20\uB97C \uBC1C\uD589\uC77C \uB0B4\uB9BC\uCC28\uC21C\uC73C\uB85C \uBAA8\uC740 \uBAA9\uB85D |
|
|
134
|
+
| \`shopCategories\` | \uC0F5 \uCE74\uD14C\uACE0\uB9AC \uBAA9\uB85D(\uB300\uD45C \uCEEC\uB809\uC158 \uC0C1\uD488 \uD3EC\uD568) |
|
|
135
|
+
|
|
136
|
+
\uAC01 \uD56D\uBAA9\uC758 \uD544\uB4DC\uB294 \uD50C\uB7AB\uD3FC \uC751\uB2F5\uC744 \uADF8\uB300\uB85C \uB530\uB974\uBBC0\uB85C **\uC2E4\uC81C \uB80C\uB354 \uACB0\uACFC\uB85C \uD655\uC778\uD55C\uB2E4.** \uD544\uB4DC \uC774\uB984\uC744 \uAE30\uC5B5\uC73C\uB85C \uC9C0\uC5B4\uB0B4\uC9C0 \uC54A\uB294\uB2E4.
|
|
137
|
+
|
|
138
|
+
\`data.json\`\uC5D0\uB294 \uC774 \uB2E4\uC12F \uAC1C\uC640 **\uAC19\uC740 \uC774\uB984**\uC73C\uB85C \uC0D8\uD50C\uC744 \uB123\uC5B4\uC57C \uB85C\uCEEC \uD504\uB9AC\uBDF0\uAC00 \uBC30\uD3EC\uC640 \uAC19\uC740 \uBAA8\uC591\uC774 \uB41C\uB2E4. \uB2E4\uB978 \uC774\uB984\uC744 \uC4F0\uBA74 \uB85C\uCEEC\uC5D0\uC11C\uB9CC \uBCF4\uC774\uACE0 \uBC30\uD3EC\uD558\uBA74 \uBE44\uB294\uB370, \uADF8 \uCC28\uC774\uAC00 \uD654\uBA74\uC5D0 \uB4DC\uB7EC\uB098\uC9C0 \uC54A\uC544 \uCC3E\uAE30 \uC5B4\uB835\uB2E4.
|
|
139
|
+
|
|
140
|
+
\uC5B4\uB4DC\uBBFC \uD654\uBA74\uC774 \uBB34\uC5C7\uC744 \uBC1B\uB294\uC9C0\uB294 **\uD655\uC778\uB418\uC9C0 \uC54A\uC558\uB2E4.** \uC5B4\uB4DC\uBBFC \uD15C\uD50C\uB9BF\uC5D0\uC11C\uB294 \uAC12\uC774 \uC628\uB2E4\uACE0 \uAC00\uC815\uD558\uC9C0 \uB9D0\uACE0 \uCCAB \uBC30\uD3EC\uC5D0\uC11C \uC2E4\uC81C \uB80C\uB354\uB97C \uBCF4\uACE0 \uD310\uB2E8\uD55C\uB2E4.
|
|
141
|
+
|
|
142
|
+
# \uAD6C\uC870 \uADDC\uC57D (\uD3EC\uD138 \uBE4C\uB354\uAC00 \uAC15\uC81C\uD55C\uB2E4)
|
|
143
|
+
|
|
144
|
+
\`\`\`
|
|
145
|
+
public/
|
|
146
|
+
user/ \u2014 \uC720\uC800 \uD50C\uB7AB\uD3FC\uC6A9
|
|
147
|
+
{name}/
|
|
148
|
+
template.liquid \u2014 \uC2E4\uC81C \uD15C\uD50C\uB9BF (\uD544\uC218)
|
|
149
|
+
data.json \u2014 \uB85C\uCEEC \uBBF8\uB9AC\uBCF4\uAE30\uC6A9 \uC0D8\uD50C \uB370\uC774\uD130 (\uC120\uD0DD)
|
|
150
|
+
admin/ \u2014 \uC5B4\uB4DC\uBBFC\uC6A9 (\uAC19\uC740 \uADDC\uCE59)
|
|
151
|
+
\`\`\`
|
|
152
|
+
|
|
153
|
+
- **\uAE4A\uC774\uAC00 \uACE0\uC815\uC774\uB2E4.** \`public/{user|admin}/{name}/template.liquid\` \uC815\uD655\uD788 \uC774 \uC790\uB9AC\uB9CC \uC778\uC2DD\uD55C\uB2E4. \uD55C \uB2E8\uACC4 \uB354 \uB4E4\uC5B4\uAC00\uAC70\uB098 \uB35C \uB4E4\uC5B4\uAC00\uBA74 **\uD3EC\uD138\uC774 \uC870\uC6A9\uD788 \uBB34\uC2DC\uD55C\uB2E4**(\uBE4C\uB4DC\uB294 \uC131\uACF5\uD558\uB294\uB370 \uC544\uBB34\uAC83\uB3C4 \uC548 \uB098\uC628\uB2E4).
|
|
154
|
+
- \`{name}\`\uC740 **\uC18C\uBB38\uC790\xB7\uC22B\uC790\xB7\uD558\uC774\uD508**\uB9CC. \uB300\uBB38\uC790\xB7\uBC11\uC904\xB7\uACF5\uBC31\uC740 \uC4F0\uC9C0 \uC54A\uB294\uB2E4.
|
|
155
|
+
- \uD30C\uC77C \uC774\uB984\uC740 \uBC18\uB4DC\uC2DC \`template.liquid\`\uB2E4.
|
|
156
|
+
- \uD55C \uD3F4\uB354\uAC00 \uD55C \uD398\uC774\uC9C0\uB2E4. \uD398\uC774\uC9C0\uB97C \uB354 \uB9CC\uB4E4\uB824\uBA74 \uD3F4\uB354\uB97C \uB354 \uB9CC\uB4E0\uB2E4.
|
|
157
|
+
|
|
158
|
+
# \uC808\uCC28
|
|
159
|
+
|
|
160
|
+
## 1. \uC0C8 \uD15C\uD50C\uB9BF \uCD94\uAC00
|
|
161
|
+
|
|
162
|
+
1. \`public/user/{name}/\` \uD3F4\uB354\uB97C \uB9CC\uB4E0\uB2E4(\uC5B4\uB4DC\uBBFC\uC774\uBA74 \`public/admin/{name}/\`). \uC774\uB984\uC740 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uD655\uC778\uD55C\uB2E4 \u2014 \uC774 \uC774\uB984\uC774 \uD3EC\uD138 \uD654\uBA74\uC5D0\uC11C \uACE0\uB974\uB294 \uC0B0\uCD9C\uBB3C \uC774\uB984\uC774 \uB41C\uB2E4.
|
|
163
|
+
2. \`template.liquid\`\uB97C \uB9CC\uB4E0\uB2E4. \uD654\uBA74 \uC804\uCCB4\uB97C \uADF8\uB9AC\uB294 \uB9C8\uD06C\uC5C5\uC774\uB2E4.
|
|
164
|
+
3. \uD544\uC694\uD558\uBA74 \`data.json\`\uC5D0 **\uB85C\uCEEC \uBBF8\uB9AC\uBCF4\uAE30\uC6A9** \uC0D8\uD50C \uB370\uC774\uD130\uB97C \uB123\uB294\uB2E4. \uC2E4\uC81C \uAC12\uC740 \uD50C\uB7AB\uD3FC\uC774 \uB123\uB294\uB2E4 \u2014 \uC0D8\uD50C\uC740 \uBAA8\uC591\uC744 \uB9DE\uCD94\uAE30 \uC704\uD55C \uAC83\uC774\uC9C0 \uACC4\uC57D\uC774 \uC544\uB2C8\uB2E4.
|
|
165
|
+
4. \uB85C\uCEEC\uC5D0\uC11C \uB208\uC73C\uB85C \uD655\uC778\uD55C\uB2E4 \u2014 \`bstage dev\`\uAC00 liquid \uBAA9\uB85D\xB7\uBBF8\uB9AC\uBCF4\uAE30\uB97C \uB744\uC6B4\uB2E4.
|
|
166
|
+
5. \uAC80\uC99D\uD55C\uB2E4 \u2014 liquid \uB808\uD3EC\uC5D0\uC11C \`bstage build\`\uAC00 \uBC88\uB4E4\uC744 \uB9CC\uB4E4\uC9C0 \uC54A\uACE0 **\uAD6C\uC870\xB7\uBB38\uBC95\uC744 \uAC80\uC0AC**\uD55C\uB2E4.
|
|
167
|
+
6. \uBC30\uD3EC\uB294 \`bstage-deploy\` \uC2A4\uD0AC\uC744 \uB530\uB978\uB2E4(push\uB41C \uCEE4\uBC0B\uC744 \uD3EC\uD138\uC774 \uBE4C\uB4DC\uD55C\uB2E4).
|
|
168
|
+
|
|
169
|
+
> **\uC124\uCE58\uB41C cli\uAC00 liquid\uB97C \uBAA8\uB974\uB294 \uC61B \uBC84\uC804\uC774\uBA74 4\xB75\uAC00 \uC774 \uB808\uD3EC\uB97C \uC54C\uC544\uBCF4\uC9C0 \uBABB\uD55C\uB2E4.** \uC99D\uC0C1\uC774 \uBD84\uBA85\uD558\uB2E4 \u2014 \`bstage build\`\uAC00 liquid \uAC80\uC99D \uB300\uC2E0 \`src/\` \uC544\uB798\uC5D0\uC11C \uC5C6\uB294 \uC18C\uC2A4 \uD30C\uC77C\uC744 \uCC3E\uB294\uB2E4\uACE0 \uB05D\uB09C\uB2E4. \uADF8\uB54C\uB294 cli\uB97C \uCD5C\uC2E0\uC73C\uB85C \uC62C\uB9AC\uB77C\uACE0 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uC54C\uB9B0\uB2E4. \uC62C\uB9B4 \uC218 \uC5C6\uC73C\uBA74 \uB85C\uCEEC \uBBF8\uB9AC\uBCF4\uAE30\uB294 **\uC774 \uB808\uD3EC\uAC00 \uC790\uCCB4\uB85C \uAC00\uC9C4 \uC218\uB2E8**\uC744 \uC4F0\uACE0, \uAD6C\uC870\xB7\uBB38\uBC95\uC740 \uB9AC\uBDF0\uB85C \uD655\uC778\uD55C \uB4A4 \uC2E4\uC81C \uB80C\uB354\uB294 \uCCAB \uBC30\uD3EC\uC5D0\uC11C \uBCF8\uB2E4.
|
|
170
|
+
|
|
171
|
+
## 2. \uAE30\uC874 \uD15C\uD50C\uB9BF \uC218\uC815
|
|
172
|
+
|
|
173
|
+
- \uACE0\uCE58\uAE30 \uC804\uC5D0 **\uC2E4\uC81C \uD30C\uC77C\uC744 \uC77D\uB294\uB2E4.** \uBCC0\uC218 \uC774\uB984\uACFC \uB370\uC774\uD130 \uBAA8\uC591\uC740 \uAE30\uC5B5\uC774 \uC544\uB2C8\uB77C \uADF8 \uD15C\uD50C\uB9BF\uACFC \`data.json\`\uC5D0\uC11C \uD655\uC778\uD55C\uB2E4.
|
|
174
|
+
- \uAC12\uC774 \uC5C6\uC744 \uB54C \uD654\uBA74\uC774 \uAE68\uC9C0\uC9C0 \uC54A\uB294\uC9C0 \uD568\uAED8 \uBCF8\uB2E4(\uC544\uB798 \`default\` \uCC38\uACE0). \uC2E4\uC81C \uB370\uC774\uD130\uC5D0\uB294 \uC0D8\uD50C\uC5D0 \uC5C6\uB358 \uBE48 \uAC12\uC774 \uC628\uB2E4.
|
|
175
|
+
|
|
176
|
+
# liquid \uBB38\uBC95 \uC694\uC810
|
|
177
|
+
|
|
178
|
+
\uC815\uD655\uD55C \uD0DC\uADF8\xB7\uD544\uD130 \uBAA9\uB85D\uC740 liquidjs \uBB38\uC11C\uAC00 SSOT\uB2E4. \uC790\uC8FC \uC4F0\uB294 \uAC83\uB9CC \uC9DA\uB294\uB2E4.
|
|
179
|
+
|
|
180
|
+
**\uBCC0\uC218 \uCD9C\uB825**
|
|
181
|
+
|
|
182
|
+
\`\`\`liquid
|
|
183
|
+
{{ lounges.first.name }}
|
|
184
|
+
\`\`\`
|
|
185
|
+
|
|
186
|
+
\uC774\uC911 \uC911\uAD04\uD638 \uC548\uC758 \uAC12\uC774 \uADF8 \uC790\uB9AC\uC5D0 \uBB38\uC790\uC5F4\uB85C \uB4E4\uC5B4\uAC04\uB2E4. \uC5C6\uB294 \uD0A4\uB294 \uC624\uB958\uAC00 \uC544\uB2C8\uB77C **\uBE48 \uBB38\uC790\uC5F4**\uC774 \uB418\uBBC0\uB85C, \uC624\uD0C0\uB294 \uD654\uBA74\uC774 \uBE44\uB294 \uAC83\uC73C\uB85C \uB098\uD0C0\uB09C\uB2E4.
|
|
187
|
+
|
|
188
|
+
**\uAE30\uBCF8\uAC12**
|
|
189
|
+
|
|
190
|
+
\`\`\`liquid
|
|
191
|
+
{{ lounges.first.name | default: '\uB77C\uC6B4\uC9C0' }}
|
|
192
|
+
\`\`\`
|
|
193
|
+
|
|
194
|
+
\uAC12\uC774 \uC5C6\uAC70\uB098 \uBE44\uC5B4 \uC788\uC744 \uB54C \uB300\uC2E0 \uC4F8 \uAC12. \uC2E4\uC81C \uB370\uC774\uD130\uC5D0\uB294 \uBE48 \uAC12\uC774 \uC790\uC8FC \uC624\uBBC0\uB85C \uB208\uC5D0 \uBCF4\uC774\uB294 \uBB38\uAD6C\uC5D0\uB294 \uAE30\uBCF8\uAC12\uC744 \uB450\uB294 \uD3B8\uC774 \uC548\uC804\uD558\uB2E4.
|
|
195
|
+
|
|
196
|
+
**\uC870\uAC74**
|
|
197
|
+
|
|
198
|
+
\`\`\`liquid
|
|
199
|
+
{% if contentSections.size > 0 %}...{% else %}\uD45C\uC2DC\uD560 \uD56D\uBAA9\uC774 \uC5C6\uC2B5\uB2C8\uB2E4{% endif %}
|
|
200
|
+
\`\`\`
|
|
201
|
+
|
|
202
|
+
\`{% %}\`\uB294 \uCD9C\uB825\uD558\uC9C0 \uC54A\uACE0 \uD750\uB984\uB9CC \uC81C\uC5B4\uD55C\uB2E4. \uBE48 \uBAA9\uB85D \uBD84\uAE30\uB294 \uAC70\uC758 \uD56D\uC0C1 \uD544\uC694\uD558\uB2E4.
|
|
203
|
+
|
|
204
|
+
**\uBC18\uBCF5**
|
|
205
|
+
|
|
206
|
+
\`\`\`liquid
|
|
207
|
+
{% for section in contentSections %}{{ section.title }}{% endfor %}
|
|
208
|
+
\`\`\`
|
|
209
|
+
|
|
210
|
+
\uBAA9\uB85D\uC744 \uC21C\uD68C\uD55C\uB2E4. \uC548\uC5D0\uC11C \`forloop.index\` \uAC19\uC740 \uBCF4\uC870 \uAC12\uC744 \uC4F8 \uC218 \uC788\uB2E4(\uC0C1\uC138\uB294 liquidjs \uBB38\uC11C).
|
|
211
|
+
|
|
212
|
+
**\uD544\uD130**
|
|
213
|
+
|
|
214
|
+
\`\`\`liquid
|
|
215
|
+
{{ latestContents | size }} / {{ section.title | escape }} / {{ forloop.index | plus: 1 }}
|
|
216
|
+
\`\`\`
|
|
217
|
+
|
|
218
|
+
\`|\`\uB85C \uAC12\uC744 \uBCC0\uD658\uD55C\uB2E4. \uC0AC\uC6A9\uC790 \uC785\uB825\uC774 \uC11E\uC778 \uAC12\uC744 HTML\uB85C \uB123\uC744 \uB54C\uB294 \uC774\uC2A4\uCF00\uC774\uD504 \uC5EC\uBD80\uB97C \uD655\uC778\uD55C\uB2E4 \u2014 \uC6D0\uC2DC HTML\uC744 \uADF8\uB300\uB85C \uCD9C\uB825\uD558\uB294 \uD544\uD130\uB294 \uC2E0\uB8B0\uD560 \uC218 \uC788\uB294 \uAC12\uC5D0\uB9CC \uC4F4\uB2E4.
|
|
219
|
+
|
|
220
|
+
# \uD568\uC815
|
|
221
|
+
|
|
222
|
+
- **sdk\uC640 liquid\uB97C \uD55C \uB808\uD3EC\uC5D0 \uC11E\uC9C0 \uC54A\uB294\uB2E4.** \`template.tsx\`(React)\uC640 \`.liquid\`\uAC00 \uD55C \uB808\uD3EC\uC5D0 \uAC19\uC774 \uC788\uC73C\uBA74 \uD3EC\uD138\uC774 \uBE4C\uB4DC\uD558\uC9C0 \uBABB\uD55C\uB2E4. \uD55C \uB808\uD3EC\uB294 \uD55C \uBC29\uC2DD\uB9CC.
|
|
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
|
+
- **\`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
|
+
- **\`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.
|
|
226
|
+
- **\uACBD\uB85C \uAE4A\uC774\uB97C \uC9C0\uD0A8\uB2E4.** \uADDC\uC57D \uBC16 \uC704\uCE58\uC758 \uD30C\uC77C\uC740 \uBB34\uC2DC\uB41C\uB2E4. "\uBD84\uBA85 \uB9CC\uB4E4\uC5C8\uB294\uB370 \uBAA9\uB85D\uC5D0 \uC5C6\uB2E4"\uC758 \uB300\uBD80\uBD84\uC774 \uC774 \uACBD\uC6B0\uB2E4.
|
|
227
|
+
- **\uC5D0\uC14B(\uC774\uBBF8\uC9C0\xB7\uC601\uC0C1)\uC740 \uD3EC\uD138 \uBBF8\uB514\uC5B4\uC5D0 \uC62C\uB9AC\uACE0 \uADF8 URL\uC744 \uC4F4\uB2E4.** \uD3EC\uD138 \uD654\uBA74\uC758 \uC2A4\uD14C\uC774\uC9C0 > \uBBF8\uB514\uC5B4\uC5D0 \uD30C\uC77C\uC744 \uC62C\uB9AC\uBA74 URL\uC744 \uBC1B\uB294\uB2E4. \uADF8 URL\uC744 \uD15C\uD50C\uB9BF\uC5D0 **\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.
|
|
228
|
+
- **\uB808\uD3EC\uC5D0 \uB123\uACE0 \uC0C1\uB300 \uACBD\uB85C\uB85C \uCC38\uC870\uD558\uBA74 \uBC30\uD3EC \uD6C4 \uAE68\uC9C4\uB2E4.** \uB80C\uB354\uB41C HTML\uC774 \uC2A4\uD398\uC774\uC2A4 \uB3C4\uBA54\uC778 \uD398\uC774\uC9C0 \uC548\uC73C\uB85C \uB4E4\uC5B4\uAC00\uBBC0\uB85C \uC0C1\uB300 \uACBD\uB85C\uB294 \uADF8 \uB3C4\uBA54\uC778 \uAE30\uC900\uC73C\uB85C \uD480\uB9AC\uACE0, \uC0B0\uCD9C\uBB3C\uC774 \uB193\uC778 \uC8FC\uC18C\uB97C \uAC00\uB9AC\uD0A4\uC9C0 \uC54A\uB294\uB2E4. \uC61B \uAC00\uC774\uB4DC\uC5D0 \`public\`\uC5D0 \uB450\uACE0 \uC0C1\uB300 \uACBD\uB85C\uB85C \uCC38\uC870\uD558\uB77C\uACE0 \uC801\uD78C \uAC83\uC774 \uC788\uB294\uB370 \uC2E0\uADDC \uD3EC\uD138\uC5D0\uC11C\uB294 \uB9DE\uC9C0 \uC54A\uB294\uB2E4.
|
|
229
|
+
- **\uB85C\uCEEC \uD504\uB9AC\uBDF0\uB294 \uC774 \uC810\uC5D0\uC11C \uBC30\uD3EC\uC640 \uBC18\uB300\uB85C \uB3D9\uC791\uD55C\uB2E4.** \uD504\uB9AC\uBDF0\uB294 \uD15C\uD50C\uB9BF \uD3F4\uB354\uC758 \uD30C\uC77C\uC744 \uD568\uAED8 \uC11C\uBE59\uD558\uBBC0\uB85C \uC0C1\uB300 \uACBD\uB85C \uC774\uBBF8\uC9C0\uAC00 \uC798 \uBCF4\uC778\uB2E4. **\uD504\uB9AC\uBDF0\uC5D0\uC11C \uBCF4\uC600\uB2E4\uB294 \uAC83\uC744 \uADFC\uAC70\uB85C \uC0BC\uC9C0 \uC54A\uB294\uB2E4.**
|
|
230
|
+
- **\uB370\uC774\uD130 \uBAA8\uC591\uC744 \uCD94\uCE21\uD558\uC9C0 \uC54A\uB294\uB2E4.** \uCD5C\uC0C1\uC704 \uC774\uB984\uC740 \uC704 \uD45C\uAC00 \uC804\uBD80\uC774\uACE0, \uADF8 \uC548\uC758 \uD544\uB4DC\uB294 \uC2E4\uC81C \uB80C\uB354 \uACB0\uACFC\uB85C \uD655\uC778\uD55C\uB2E4.
|
|
231
|
+
- **\uD30C\uC15C(\`{% render %}\`\xB7\`{% include %}\`)\uC740 \uBC30\uD3EC\uC5D0\uC11C \uB3D9\uC791\uD558\uC9C0 \uC54A\uB294\uB2E4.** \uBC30\uD3EC \uBDF0\uC5B4\uC758 \uC5D4\uC9C4\uC740 \uB808\uD3EC\uC758 \uD30C\uC77C\uC744 \uCC3E\uC9C0 \uBABB\uD574 \uADF8 \uC790\uB9AC\uB97C \uBE48 \uBB38\uC790\uC5F4\uB85C \uB80C\uB354\uD55C\uB2E4. \uB85C\uCEEC \uD504\uB9AC\uBDF0\uC5D0\uC11C\uB9CC \uB3D9\uC791\uD558\uBBC0\uB85C \uD504\uB9AC\uBDF0 \uACB0\uACFC\uAC00 \uADFC\uAC70\uAC00 \uB418\uC9C0 \uC54A\uB294\uB2E4. \uD15C\uD50C\uB9BF\uC740 \`template.liquid\` \uD55C \uD30C\uC77C\uC5D0 \uB2F4\uB294\uB2E4(\`bstage build\`\uAC00 \uD30C\uC15C \uD0DC\uADF8\uB97C \uACBD\uACE0\uB85C \uC9DA\uB294\uB2E4).
|
|
232
|
+
|
|
233
|
+
# \uD558\uC9C0 \uB9D0 \uAC83
|
|
234
|
+
|
|
235
|
+
- \`public/{user|admin}/{name}/\` \uBC16\uC5D0 \uD15C\uD50C\uB9BF \uD30C\uC77C \uB450\uAE30
|
|
236
|
+
- \`template.liquid\` \uC678\uC758 \uD30C\uC77C\uBA85 \uC4F0\uAE30
|
|
237
|
+
- \`data.json\`\xB7\`layout.json\`\uC5D0 \uBC30\uD3EC\uC5D0 \uD544\uC694\uD55C \uC124\uC815\uC744 \uB2F4\uAE30 (\uD328\uD0A4\uC9D5 \uB54C \uC0AC\uB77C\uC9C4\uB2E4)
|
|
238
|
+
- \uAC19\uC740 \uB808\uD3EC\uC5D0 React \uD15C\uD50C\uB9BF \uCD94\uAC00\uD558\uAE30
|
|
239
|
+
- \`{% render %}\`\xB7\`{% include %}\`\uB85C \uD15C\uD50C\uB9BF \uCABC\uAC1C\uAE30 (\uBC30\uD3EC\uC5D0\uC11C \uBE48 \uBB38\uC790\uC5F4\uC774 \uB41C\uB2E4)
|
|
240
|
+
- \uBB38\uBC95\xB7\uD544\uD130\uB97C \uAE30\uC5B5\uC73C\uB85C \uC9C0\uC5B4\uB0B4\uAE30 \u2014 liquidjs \uBB38\uC11C\uC5D0\uC11C \uD655\uC778\uD55C\uB2E4
|
|
241
|
+
- \uAC12\uC774 \uD56D\uC0C1 \uC788\uB2E4\uACE0 \uAC00\uC815\uD558\uAE30 \u2014 \uBE48 \uAC12\xB7\uBE48 \uBAA9\uB85D \uBD84\uAE30\uB97C \uD568\uAED8 \uB123\uB294\uB2E4
|
|
242
|
+
`;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// src/skills/migrate.ts
|
|
246
|
+
function migrateSkillMd() {
|
|
247
|
+
return `---
|
|
248
|
+
name: bstage-migrate
|
|
249
|
+
description: bstage SDK \uBC84\uC804 \uB9C8\uC774\uADF8\uB808\uC774\uC158\uC744 \uC218\uD589\uD55C\uB2E4. SDK\uAC00 \uC5C5\uB370\uC774\uD2B8\uB418\uC5B4 \uC624\uB798\uB41C \uD504\uB85C\uC81D\uD2B8\uB97C \uCD5C\uC2E0\uC73C\uB85C \uC62C\uB9AC\uAC70\uB098, "bstage \uC5C5\uB370\uC774\uD2B8", "SDK \uB9C8\uC774\uADF8\uB808\uC774\uC158", "\uCD5C\uC2E0 SDK\uB85C \uC62C\uB824\uC918" \uAC19\uC740 \uC694\uCCAD\uC744 \uBC1B\uC744 \uB54C \uC0AC\uC6A9\uD55C\uB2E4.
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
# \uC5ED\uD560
|
|
253
|
+
|
|
254
|
+
\uC774 \uD504\uB85C\uC81D\uD2B8\uC758 bstage SDK\uB97C \uCD5C\uC2E0 \uBC84\uC804\uC73C\uB85C \uB9C8\uC774\uADF8\uB808\uC774\uC158\uD55C\uB2E4. \uAC10\uC9C0\uB294 \`bstage doctor\`(\uACB0\uC815\uB860)\uAC00, \uBCC0\uD658 \uC808\uCC28\uB294 SDK\uAC00 \uB3D9\uBD09\uD55C \`MIGRATION.md\`\uAC00 \uC815\uC758\uD55C\uB2E4. \uB108\uB294 \uC774 \uB458\uC744 \uC77D\uACE0 **\uC774 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uB9DE\uCDB0** \uC801\uC6A9\uD55C\uB2E4.
|
|
255
|
+
|
|
256
|
+
\uD575\uC2EC \uC6D0\uCE59:
|
|
257
|
+
|
|
258
|
+
1. **\uCD94\uCE21 \uAE08\uC9C0 \u2014 \uD56D\uC0C1 \uC2E4\uC81C \uC18C\uC2A4\uB85C \uAC80\uC99D\uD55C\uB2E4.** \uBAA8\uB4E0 \uD310\uB2E8\uC740 \uAE30\uC5B5\xB7\uAC00\uC815\uC774 \uC544\uB2C8\uB77C **\uC9C1\uC811 \uC77D\uC5B4 \uD655\uC778\uD55C \uC0AC\uC2E4**\uC5D0 \uADFC\uAC70\uD574\uC57C \uD55C\uB2E4. \uBCC0\uACBD \uC804\uC5D0 (a) \uC124\uCE58\uB41C \uD328\uD0A4\uC9C0(\`node_modules/@bstage-sdk/*\`\uC758 \`MIGRATION.md\`\xB7\`dist/*.d.ts\` \uD0C0\uC785 \uC120\uC5B8)\uC640 (b) **\uC774 \uD504\uB85C\uC81D\uD2B8\uC758 \uC2E4\uC81C \uC18C\uC2A4 \uCF54\uB4DC**\uB97C \uC9C1\uC811 \uC77D\uC5B4 \uD655\uC778\uD55C\uB2E4. SDK API\xB7\uB3D9\uC791\uC744 \uAE30\uC5B5\uC73C\uB85C \uB2E8\uC815\uD558\uC9C0 \uC54A\uB294\uB2E4.
|
|
259
|
+
2. **\uC0AC\uC6A9\uC790\uAC00 \uC791\uC131/\uC218\uC815\uD55C \uCF54\uB4DC\uB97C \uD568\uBD80\uB85C \uB36E\uC5B4\uC4F0\uC9C0 \uC54A\uB294\uB2E4.** \uCD94\uAC00\uB294 \uC548\uC804\uD558\uAC8C, \uCDA9\uB3CC\xB7\uC7AC\uAD6C\uC131\uC740 \uD655\uC778\uD55C\uB2E4.
|
|
260
|
+
|
|
261
|
+
\uD655\uC778\uC774 \uC548 \uB418\uBA74 **\uCD94\uCE21\uD574\uC11C \uC801\uC6A9\uD558\uC9C0 \uB9D0\uACE0 \uBA48\uCD98\uB2E4.** \uB2E8, \uC0AC\uC6A9\uC790\uC5D0\uAC8C "\uCF54\uB4DC\uB97C \uD655\uC778\uD574 \uB2EC\uB77C"\uACE0 \uB5A0\uB118\uAE30\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uC0AC\uC6A9\uC790\uB294 \uAC1C\uBC1C\uC790\uAC00 \uC544\uB2D0 \uC218 \uC788\uC5B4 \uC9C1\uC811 \uAC80\uC99D\uC774 \uC5B4\uB835\uB2E4. **\uAC80\uC99D\uC740 \uB108(\uC5D0\uC774\uC804\uD2B8)\uC758 \uCC45\uC784**\uC774\uB2E4(\uD30C\uC77C\xB7\uC124\uCE58\uB41C \uD328\uD0A4\uC9C0\uB97C \uC77D\uC5B4 \uC2A4\uC2A4\uB85C \uD655\uC778). \uC0AC\uC6A9\uC790\uC5D0\uAC90 \uCF54\uB4DC\uB85C \uD655\uC778 \uAC00\uB2A5\uD55C *\uC0AC\uC2E4*\uC774 \uC544\uB2C8\uB77C **\uC81C\uD488\xB7\uC120\uD638 *\uACB0\uC815*** \uB9CC, \uAD6C\uCCB4\uC801 \uC120\uD0DD\uC9C0\uB85C \uBB3B\uB294\uB2E4.
|
|
262
|
+
|
|
263
|
+
# \uAD8C\uC704 \uC788\uB294 \uCD9C\uCC98 (\uBA3C\uC800 \uC77D\uAE30)
|
|
264
|
+
|
|
265
|
+
- \`MIGRATION.md\` \u2014 \uBC84\uC804\uBCC4 \uB9C8\uC774\uADF8\uB808\uC774\uC158 \uD56D\uBAA9\xB7\uC808\uCC28(\uB2E8\uC77C \uC18C\uC2A4). \uBC84\uC804 \uBC94\uD504+\uC124\uCE58 \uD6C4 \`node_modules/@bstage-sdk/cli/dist/MIGRATION.md\`(\uB610\uB294 core docs)\uC5D0\uC11C \uC77D\uB294\uB2E4.
|
|
266
|
+
- \`bstage doctor\` \u2014 \uD604\uC7AC \uB4DC\uB9AC\uD504\uD2B8 \uC9C4\uB2E8(\uACB0\uC815\uB860). \`npx @bstage-sdk/cli@latest doctor\`.
|
|
267
|
+
- \uBB38\uC11C \uBAA9\uB85D: \`npx bstage docs\` (SDK \uC758\uC874\uC774 \uC5C6\uB294 \uB808\uD3EC\uC5D0\uC11C\uB294 \uC885\uB8CC \uCF54\uB4DC 2\uB85C \uB05D\uB09C\uB2E4 \u2014 liquid \uB808\uD3EC\uB77C\uBA74 \`bstage-liquid\` \uC2A4\uD0AC\uC744 \uBCF8\uB2E4)
|
|
268
|
+
|
|
269
|
+
# \uC808\uCC28
|
|
270
|
+
|
|
271
|
+
## 1. \uC9C4\uB2E8 (doctor)
|
|
272
|
+
|
|
273
|
+
\`\`\`bash
|
|
274
|
+
npx @bstage-sdk/cli@latest doctor --json
|
|
275
|
+
\`\`\`
|
|
276
|
+
|
|
277
|
+
\`bstage ai doctor\`\uB85C \uC2A4\uD0AC\xB7AGENTS.md\uAC00 \uCD5C\uC2E0\uC778\uC9C0\uB3C4 \uD568\uAED8 \uBCF8\uB2E4(stale\uC774\uBA74 \`bstage ai update\`).
|
|
278
|
+
|
|
279
|
+
\uCD9C\uB825\uC5D0\uC11C \uC138 \uAC00\uC9C0\uB97C \uC5BB\uB294\uB2E4.
|
|
280
|
+
|
|
281
|
+
- \`versions\` \u2014 \uB4A4\uCC98\uC9C4 \uD328\uD0A4\uC9C0\uC640 latest \uBC84\uC804
|
|
282
|
+
- \`files\` \u2014 \uB204\uB77D\uB41C \uBCF4\uC77C\uB7EC\uD50C\uB808\uC774\uD2B8 \uD30C\uC77C
|
|
283
|
+
- \`recommendedDeps\` \u2014 \uAD8C\uC7A5 \uC758\uC874\uC131\uC758 \uC120\uC5B8 \uC0C1\uD0DC(\`declared: false\`\uBA74 \uBBF8\uC120\uC5B8). **\uBC84\uC804 \uB300\uC870\uB85C\uB294 \uC548 \uC7A1\uD788\uB294 \uCD95**\uC774\uBBC0\uB85C \`migrations\`\uAC00 \uBE44\uC5B4 \uC788\uC5B4\uB3C4 \uB530\uB85C \uD655\uC778\uD55C\uB2E4
|
|
284
|
+
- \`migrations\` \u2014 \uC801\uC6A9 \uAC00\uB2A5\uD55C \uB9C8\uC774\uADF8\uB808\uC774\uC158 \uD56D\uBAA9. \uAC01 \uD56D\uBAA9\uC740 \`label\`(\uD5E4\uB354 \uD45C\uAE30, \uC608: \`cli 0.43.0\` \uB610\uB294 \`core 0.32.0 \xB7 react 0.32.0\`) \xB7 \`requirements\`(\uC62C\uB824\uC57C \uD560 \uD328\uD0A4\uC9C0\xB7\uCD5C\uC18C \uBC84\uC804 \uC30D) \xB7 \`items\`(\uD56D\uBAA9 \uC81C\uBAA9)\uB97C \uAC00\uC9C4\uB2E4. \uD5E4\uB354\uC758 \uD328\uD0A4\uC9C0\uB97C \uADF8 \uBC84\uC804 \uC774\uC0C1\uC73C\uB85C \uC62C\uB9B0\uB2E4
|
|
285
|
+
|
|
286
|
+
\`isBstageProject\`\uAC00 false\uBA74 bstage \uD504\uB85C\uC81D\uD2B8\uAC00 \uC544\uB2C8\uBBC0\uB85C \uC911\uB2E8\uD55C\uB2E4. \uB808\uC9C0\uC2A4\uD2B8\uB9AC \uC870\uD68C\uC5D0 \uC2E4\uD328\uD574 \`latestChecked\`\uAC00 false\uBA74 \uBC84\uC804 \uBE44\uAD50\uB97C \uBCF4\uB958\uD55C\uB2E4(\uBCF4\uC77C\uB7EC\uD50C\uB808\uC774\uD2B8\xB7\uD56D\uBAA9\uC740 \uACC4\uC18D \uC9C4\uD589 \uAC00\uB2A5).
|
|
287
|
+
|
|
288
|
+
## 1a. liquid \uB808\uD3EC\uC77C \uB54C
|
|
289
|
+
|
|
290
|
+
\`bstage doctor\`\uAC00 \uC885\uB958\uB97C liquid\uB85C \uD310\uC815\uD558\uBA74 \uB9C8\uC774\uADF8\uB808\uC774\uC158 \uBC94\uC704\uAC00 \uB2E4\uB974\uB2E4.
|
|
291
|
+
|
|
292
|
+
- \uC62C\uB9B4 \uD328\uD0A4\uC9C0\uB294 \`cli\`\uBFD0\uC774\uB2E4(core\xB7react\xB7design \uC758\uC874\uC774 \uC5C6\uB2E4). \`versions\`\uC5D0 \uADF8\uAC83\uB9CC \uB098\uC628\uB2E4.
|
|
293
|
+
- \uBCF4\uC77C\uB7EC\uD50C\uB808\uC774\uD2B8 \uD30C\uC77C \uBAA9\uB85D\uB3C4 liquid \uAE30\uC900\uC774\uB2E4 \u2014 sdk\uC758 \`src/\`\xB7\`vite.config.ts\`\uAC00 \uC5C6\uB2E4\uACE0 \uB9CC\uB4E4\uC9C0 \uC54A\uB294\uB2E4.
|
|
294
|
+
- \`liquid\` \uAC80\uC99D \uACB0\uACFC(\uBB38\uBC95\xB7\uADDC\uC57D\xB7\uACBD\uACE0)\uAC00 \uD568\uAED8 \uB098\uC628\uB2E4. error\uAC00 \uC788\uC73C\uBA74 \uBC84\uC804 \uC791\uC5C5\uBCF4\uB2E4 \uBA3C\uC800 \uACE0\uCE5C\uB2E4 \u2014 \uBC30\uD3EC\uAC00 \uB9C9\uD788\uB294 \uBB38\uC81C\uB2E4.
|
|
295
|
+
- \uC2A4\uD0AC \uC138\uD2B8\uB294 \`bstage-liquid\`\xB7\`bstage-deploy\`\xB7\`bstage-onboarding\`\xB7\uC774 \uC2A4\uD0AC\uC774\uB2E4. \`bstage ai update\`\uAC00 \uB9DE\uCDB0 \uC900\uB2E4.
|
|
296
|
+
- SDK \uBB38\uC11C(\`npx bstage docs\`)\uB294 SDK \uC758\uC874\uC774 \uC5C6\uC5B4 \uC885\uB8CC \uCF54\uB4DC 2\uB85C \uB05D\uB09C\uB2E4 \u2014 \uC791\uC131 \uADDC\uC57D\xB7\uB370\uC774\uD130\xB7\uC5D0\uC14B\uC740 \`bstage-liquid\` \uC2A4\uD0AC\uC774 \uB4E4\uACE0 \uC788\uB2E4.
|
|
297
|
+
|
|
298
|
+
## 2. \uACC4\uD68D \uC81C\uC2DC (\uC2B9\uC778 \uC804 \uBA48\uCDA4)
|
|
299
|
+
|
|
300
|
+
doctor \uACB0\uACFC\uB97C \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uC694\uC57D\uD558\uACE0, **\uBB34\uC5C7\uC744 \uD560\uC9C0** \uACC4\uD68D\uC744 \uC81C\uC2DC\uD55C \uB4A4 \uC2B9\uC778\uC744 \uBC1B\uB294\uB2E4. \uC774\uB54C \uC0AC\uC6A9\uC790\uAC00 \uB9AC\uBDF0\uD558\uB294 \uAC83\uC740 MIGRATION.md \uC6D0\uBB38\uC774 \uC544\uB2C8\uB77C **\uC774 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uB9DE\uCD98 \uC791\uC5C5 \uACC4\uD68D**\uC774\uB2E4.
|
|
301
|
+
|
|
302
|
+
- \uBC84\uC804 \uBC94\uD504 \uBAA9\uB85D(\uD604\uC7AC \u2192 \uBAA9\uD45C)
|
|
303
|
+
- \uCD94\uAC00\uD560 \uBCF4\uC77C\uB7EC\uD50C\uB808\uC774\uD2B8 \uD30C\uC77C
|
|
304
|
+
- \uC801\uC6A9\uD560 \uB9C8\uC774\uADF8\uB808\uC774\uC158 \uD56D\uBAA9, \uAC01 \uD56D\uBAA9\uC758 \`\uC790\uB3D9\`/\`\uD310\uB2E8\` \uAD6C\uBD84
|
|
305
|
+
- \uD310\uB2E8\uC774 \uD544\uC694\uD55C \uC9C0\uC810(\uC608: \uCEE4\uC2A4\uD140 \uCF54\uB4DC \uAD50\uCCB4)\uC740 \uBBF8\uB9AC \uC9DA\uC5B4 \uB454\uB2E4
|
|
306
|
+
|
|
307
|
+
## 3. \uC801\uC6A9
|
|
308
|
+
|
|
309
|
+
### 3a. \uBC84\uC804 \uBC94\uD504 + \uC124\uCE58 (\uC790\uB3D9)
|
|
310
|
+
|
|
311
|
+
\`package.json\`\uC774 \uC758\uC874\uD558\uB294 \`@bstage-sdk/*\` \uD328\uD0A4\uC9C0\uB97C \uBAA8\uB450 latest\uB85C \uC62C\uB9B0\uB2E4 \u2014 \uBCF4\uD1B5 \`cli\`/\`core\`/\`react\`/\`design\`\uC774\uB2E4. \uBC84\uC804 \uD45C\uAE30 \uC2A4\uD0C0\uC77C(\uCE90\uB7FF vs \uC815\uD655\uD55C \uBC84\uC804)\uC740 \uD504\uB85C\uC81D\uD2B8 \uAE30\uC874 \uCEE8\uBCA4\uC158\uC744 \uB530\uB978\uB2E4. \`react\`/\`vite\` \uB4F1 \uC0AC\uC6A9\uC790\uAC00 \uAD00\uB9AC\uD558\uB294 \uC758\uC874\uC131\uC740 **\uC784\uC758\uB85C \uC62C\uB9AC\uAC70\uB098 \uB0B4\uB9AC\uC9C0 \uC54A\uB294\uB2E4**(\uC608: \uD504\uB85C\uC81D\uD2B8\uAC00 \uC774\uBBF8 \uB354 \uB192\uC740 vite\uB97C \uC4F0\uBA74 init \uAE30\uBCF8\uAC12\uC73C\uB85C \uB2E4\uC6B4\uADF8\uB808\uC774\uB4DC \uAE08\uC9C0). \uADF8 \uD6C4 \uC124\uCE58\uD55C\uB2E4(\uD504\uB85C\uC81D\uD2B8\uC758 \uD328\uD0A4\uC9C0 \uB9E4\uB2C8\uC800).
|
|
312
|
+
|
|
313
|
+
> **install\uC774 bstage\uC640 \uBB34\uAD00\uD55C peer \uCDA9\uB3CC\uB85C \uC2E4\uD328**\uD558\uBA74(\uC608: \uB2E4\uB978 SDK\uAC00 \uC61B react\uB97C \uC694\uAD6C) \uD504\uB85C\uC81D\uD2B8 \uACE0\uC720 \uC81C\uC57D\uC774\uB2E4. \uAC15\uC81C \uBCC0\uACBD\uD558\uC9C0 \uB9D0\uACE0 \`--legacy-peer-deps\`(npm) \uB4F1 \uADF8 \uD504\uB85C\uC81D\uD2B8\uC758 \uAE30\uC874 \uC124\uCE58 \uBC29\uC2DD\uC73C\uB85C \uC7AC\uC2DC\uB3C4\uD558\uAC70\uB098, \uD310\uB2E8\uC774 \uD544\uC694\uD558\uBA74 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uBCF4\uACE0\uD55C\uB2E4.
|
|
314
|
+
|
|
315
|
+
> \uC774 \uB2E8\uACC4 \uC9C1\uD6C4 \`node_modules/@bstage-sdk/cli/dist/MIGRATION.md\`\uAC00 \uC0DD\uAE34\uB2E4. \uC774\uD6C4 \uB2E8\uACC4\uB294 \uC774 \uD30C\uC77C\uC758 \uD574\uB2F9 \uBC84\uC804 \uC139\uC158\uC744 \uC815\uB3C5\uD558\uACE0 \uB530\uB978\uB2E4.
|
|
316
|
+
|
|
317
|
+
doctor\uC758 \`recommendedDeps\`\uC5D0 \`declared: false\`\uAC00 \uC788\uC73C\uBA74 **\uC0AC\uC6A9\uC790\uC5D0\uAC8C \uBB3B\uACE0** \uD568\uAED8 \uCD94\uAC00\uD55C\uB2E4. \uC774\uAC74 \uBC84\uC804 \uBC94\uD504\uB85C \uC800\uC808\uB85C \uB4E4\uC5B4\uC624\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uC608: \`@bstage-sdk/design\`(\uB514\uC790\uC778 \uD1A0\uD070)\uC774 \uC5C6\uC73C\uBA74 AGENTS.md\xB7\`bstage-template\` \uC2A4\uD0AC\uC740 \uD1A0\uD070\uC744 \uC4F0\uB77C\uACE0 \uC548\uB0B4\uD558\uB294\uB370 \uC815\uC791 import\uAC00 \uC2E4\uD328\uD55C\uB2E4. \uC774\uBBF8 \uCD5C\uC2E0 \uBC84\uC804\uC778 \uD504\uB85C\uC81D\uD2B8\uC5D0\uC11C\uB294 \`migrations\`\uAC00 \uBE44\uC5B4 \uC774 \uCD95\uB9CC \uB0A8\uC73C\uBBC0\uB85C, \uB9C8\uC774\uADF8\uB808\uC774\uC158\uD560 \uAC8C \uC5C6\uB2E4\uACE0 \uD310\uB2E8\uD558\uACE0 \uB118\uC5B4\uAC00\uC9C0 \uC54A\uB294\uB2E4.
|
|
318
|
+
|
|
319
|
+
### 3b. init \uAE30\uBCF8 \uD30C\uC77C \uCC28\uC774 (\uD310\uB2E8 \u2014 \uAC15\uC694 \uAE08\uC9C0)
|
|
320
|
+
|
|
321
|
+
doctor\uC758 "init \uAE30\uBCF8 \uD30C\uC77C" \uD56D\uBAA9\uC740 **\uB204\uB77D\uC774 \uC544\uB2C8\uB77C init \uAE30\uBCF8 \uAD6C\uC131\uACFC\uC758 \uCC28\uC774**\uB2E4. \uCD94\uAC00\uD558\uAE30 \uC804\uC5D0 **\uD504\uB85C\uC81D\uD2B8\uAC00 \uAC19\uC740 \uBAA9\uC801\uC744 \uB2E4\uB974\uAC8C \uB2EC\uC131\uD588\uB294\uC9C0** \uBA3C\uC800 \uD655\uC778\uD558\uACE0, \uD544\uC694\uD560 \uB54C\uB9CC \uCD94\uAC00\uD55C\uB2E4.
|
|
322
|
+
|
|
323
|
+
- \`src/vite-env.d.ts\` \u2014 \`tsconfig\`\uC758 \`types:["vite/client"]\`\uB85C \uC774\uBBF8 \uCC98\uB9AC \uC911\uC774\uBA74 \uBD88\uD544\uC694.
|
|
324
|
+
- \`eslint.config.js\` \u2014 eslint\uB97C \uC4F0\uC9C0 \uC54A\uB294 \uD504\uB85C\uC81D\uD2B8(\uC608: prettier/\uD0C0 \uB9B0\uD130\uB9CC)\uC5D4 \uCD94\uAC00\uD558\uC9C0 \uC54A\uB294\uB2E4.
|
|
325
|
+
- \`tsconfig.app.json\` / \`tsconfig.node.json\` \u2014 \uB2E8\uC77C \`tsconfig.json\`\uC774 \uC798 \uB3D9\uC791\uD558\uBA74 \uAD73\uC774 \uCABC\uAC1C\uC9C0 \uC54A\uB294\uB2E4. \uBD84\uB9AC\uD560 \uACBD\uC6B0 \uC0AC\uC6A9\uC790 \uC124\uC815(\uACBD\uB85C \uBCC4\uCE6D \uB4F1)\uC744 \uBCF4\uC874\uD55C\uB2E4.
|
|
326
|
+
|
|
327
|
+
\uD310\uB2E8\uC774 \uC11C\uC9C0 \uC54A\uC73C\uBA74 \uCD94\uAC00\uD558\uC9C0 \uB9D0\uACE0 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uD655\uC778\uD55C\uB2E4.
|
|
328
|
+
|
|
329
|
+
### 3c. \uB9C8\uC774\uADF8\uB808\uC774\uC158 \uD56D\uBAA9 (\uD56D\uBAA9\uBCC4\uB85C \uC790\uB3D9/\uD310\uB2E8 \uBD84\uB9AC)
|
|
330
|
+
|
|
331
|
+
\`MIGRATION.md\`\uC5D0\uC11C \uC801\uC6A9 \uB300\uC0C1 \uBC84\uC804 \uC139\uC158\uC744 \uC77D\uACE0, \uAC01 \uD56D\uBAA9\uC758 **\uC801\uC6A9** \uC808\uCC28\uB97C \uB530\uB978\uB2E4.
|
|
332
|
+
|
|
333
|
+
- \`\uC790\uB3D9\` \uB2E8\uACC4\uB294 \uADF8\uB300\uB85C \uC218\uD589\uD55C\uB2E4.
|
|
334
|
+
- \`\uD310\uB2E8\` \uB2E8\uACC4\uB294 **\uC2E4\uC81C \uD504\uB85C\uC81D\uD2B8 \uCF54\uB4DC\uB97C \uC77D\uACE0** \uC801\uC6A9\uD55C\uB2E4. \uC608: \uCEE4\uC2A4\uD140 i18n \uD5EC\uD37C\uAC00 \uC788\uC73C\uBA74 \uC6A9\uB3C4(\uC790\uCCB4 \uBB38\uAD6C vs \uD50C\uB7AB\uD3FC \uBB38\uAD6C)\uB97C \uBD84\uB958\uD574 \`useMessages\`/\`useBstageTranslations\`\uB85C \uC774\uC804\uD55C\uB2E4. \uC560\uB9E4\uD558\uBA74 \uC77C\uAD04 \uCE58\uD658\uD558\uC9C0 \uB9D0\uACE0 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uBB3B\uB294\uB2E4.
|
|
335
|
+
- \`\uC120\uD0DD\` \uD56D\uBAA9\uC740 \uC774 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uD544\uC694\uD55C\uC9C0 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uD655\uC778\uD55C \uB4A4 \uC9C4\uD589\uD55C\uB2E4.
|
|
336
|
+
|
|
337
|
+
### 3c-1. \uD15C\uD50C\uB9BF \uB514\uB809\uD1A0\uB9AC \uAD6C\uC870 (\uD310\uB2E8 \u2014 \uC0AC\uC6A9\uC790\uB9CC \uB2F5\uD560 \uC218 \uC788\uB294 \uAC83)
|
|
338
|
+
|
|
339
|
+
doctor\uC758 \`layout.legacyPresent\`\uAC00 \`true\`\uBA74 \`src/templates/\`\uAC00 \uB0A8\uC544 \uC788\uB294 \uC61B \uAD6C\uC870\uB2E4. \uD398\uC774\uC9C0\uB294 \`src/pages/{\uACBD\uB85C}/\`, \uC704\uC82F\uC740 \`src/slots/{\uC544\uBB34 \uC774\uB984}/\`\uC73C\uB85C \uC62E\uACA8\uC57C \uD558\uACE0, \uC548 \uC62E\uAE30\uBA74 \`bstage build\`\uAC00 \uC5D4\uD2B8\uB9AC\uB97C \uCC3E\uC9C0 \uBABB\uD574 \uBA48\uCD98\uB2E4.
|
|
340
|
+
|
|
341
|
+
**\uC5EC\uAE30\uC11C\uB9CC\uC740 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uBB3C\uC5B4\uC57C \uD55C\uB2E4.** \uC774 \uC2A4\uD0AC\uC758 \uC6D0\uCE59\uC740 "\uC0AC\uC2E4\uC740 \uC5D0\uC774\uC804\uD2B8\uAC00 \uAC80\uC99D\uD558\uACE0, \uC0AC\uC6A9\uC790\uC5D0\uAC90 \uACB0\uC815\uB9CC \uBB3B\uB294\uB2E4"\uC774\uC9C0\uB9CC, \uC774 \uD56D\uBAA9\uC740 **\uC0AC\uC2E4 \uC790\uCCB4\uAC00 \uD504\uB85C\uC81D\uD2B8 \uC18C\uC2A4\uC5D0 \uC5C6\uB2E4**:
|
|
342
|
+
|
|
343
|
+
- \uD3F4\uB354 \uC774\uB984\uC740 \uC9C0\uAE08\uAE4C\uC9C0 \uC544\uBB34 \uC758\uBBF8\uAC00 \uC5C6\uC5C8\uB2E4 \u2014 \uBE4C\uB4DC\uAC00 \uC784\uC2DC \uB77C\uBCA8\uB85C\uB9CC \uC4F0\uACE0 \uBC84\uB838\uB2E4. \uADF8\uB798\uC11C \`src/templates/home/\`\uC774 \uC2E4\uC81C\uB85C\uB294 \`/landing\`\uC5D0 \uBC30\uD3EC\uB3FC \uC788\uC744 \uC218 \uC788\uB2E4.
|
|
344
|
+
- \uC2AC\uB86F \uBC30\uCE58\uB294 \uCF54\uB4DC\uC5D0 \uC120\uC5B8\uD558\uC9C0 \uC54A\uC558\uB2E4(\uC124\uACC4\uC0C1 \uAD00\uB9AC\uB3C4\uAD6C \uBAAB\uC774\uC5C8\uB2E4). \uADF8\uB798\uC11C \uD398\uC774\uC9C0\uC778\uC9C0 \uC704\uC82F\uC778\uC9C0\uB3C4 \uC18C\uC2A4\uB85C\uB294 \uAC08\uB9AC\uC9C0 \uC54A\uB294\uB2E4.
|
|
345
|
+
- \uC5B4\uB4DC\uBBFC \uC804\uC6A9 \`type: 'fullPage' | 'sharedNav'\`\uB294 \uB808\uC774\uC544\uC6C3 \uAD6C\uBD84\uC774\uB77C \uC774 \uD310\uB2E8\uC5D0 \uC4F8 \uC218 \uC5C6\uB2E4.
|
|
346
|
+
|
|
347
|
+
\uC2E4\uC81C \uB9E4\uD551\uC740 \uAD00\uB9AC\uB3C4\uAD6C(bstage portal)\uC5D0\uB9CC \uC788\uB2E4. \`layout.legacyTemplates\`\uC758 \uD3F4\uB354\uB97C \uD558\uB098\uC529 \uC9DA\uC5B4 \uBB3B\uB294\uB2E4.
|
|
348
|
+
|
|
349
|
+
- \uBA3C\uC800 **\uC18C\uC2A4\uB97C \uC77D\uACE0 \uCD94\uC815\uC548\uC744 \uB9CC\uB4E4\uC5B4 \uC81C\uC2DC\uD55C\uB2E4.** \uC804\uCCB4 \uD654\uBA74\uC744 \uADF8\uB9AC\uB294\uC9C0 \uC791\uC740 \uC870\uAC01\uC778\uC9C0, \uCEF4\uD3EC\uB10C\uD2B8 \uC774\uB984\uC774 \uBB34\uC5C7\uC778\uC9C0\uB294 \uB124\uAC00 \uC77D\uC5B4\uC11C \uC54C \uC218 \uC788\uB2E4. \uC0AC\uC6A9\uC790\uAC00 \uBC31\uC9C0\uC5D0\uC11C \uB2F5\uD558\uAC8C \uB450\uC9C0 \uC54A\uB294\uB2E4.
|
|
350
|
+
- \uC704\uC82F\uC774\uB77C\uACE0 \uB2F5\uD558\uBA74 **\uC790\uB9AC \uBAA9\uB85D\uC744 \uC120\uD0DD\uC9C0\uB85C \uC81C\uC2DC\uD55C\uB2E4.** \uCE74\uD0C8\uB85C\uADF8\uB294 SDK\uAC00 \uB4E4\uACE0 \uC788\uC73C\uBBC0\uB85C \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uCC3E\uC544\uC624\uB77C\uACE0 \uD558\uC9C0 \uC54A\uB294\uB2E4 \u2014 \`node_modules/@bstage-sdk/core\`\uC758 \`SLOT_CATALOG_V2\`(\uB610\uB294 \`SLOT_CATALOG_V2.md\`)\uB97C \uC77D\uC5B4 \`description\`\uACFC \uD568\uAED8 \uBCF4\uC5EC\uC900\uB2E4.
|
|
351
|
+
- \uD398\uC774\uC9C0\uB77C\uACE0 \uB2F5\uD558\uBA74 **\uAD00\uB9AC\uB3C4\uAD6C\uC5D0 \uB4F1\uB85D\uB41C \uACBD\uB85C**\uB97C \uBB3B\uB294\uB2E4. \uC774\uAC83\uB9CC\uC740 \uC0AC\uC6A9\uC790\uAC00 \uAD00\uB9AC\uB3C4\uAD6C\uB97C \uBD10\uC57C \uD55C\uB2E4 \u2014 \uB300\uC2E0 "\uAD00\uB9AC\uB3C4\uAD6C\uC5D0\uC11C \uC774 \uCEE4\uC2A4\uD140 \uD398\uC774\uC9C0\uC758 \uACBD\uB85C\uB97C \uD655\uC778\uD574 \uC8FC\uC138\uC694"\uCC98\uB7FC \uC5B4\uB514\uB97C \uBCF4\uBA74 \uB418\uB294\uC9C0\uAE4C\uC9C0 \uC54C\uB824\uC900\uB2E4.
|
|
352
|
+
- \uD655\uC778\uC774 \uC548 \uB418\uBA74 \uCD94\uCE21\uD574\uC11C \uC62E\uAE30\uC9C0 \uB9D0\uACE0 \uBA48\uCD98\uB2E4. \uACBD\uB85C\uAC00 \uD2C0\uB9AC\uBA74 \uBC30\uD3EC \uD6C4 \uD654\uBA74\uC774 \uC548 \uB728\uB294\uB370, \uC6D0\uC778\uC744 \uCC3E\uAE30 \uC5B4\uB835\uB2E4.
|
|
353
|
+
|
|
354
|
+
\uC62E\uAE34 \uB4A4\uC5D0\uB294 \uAC1C\uBC1C\uC6A9 \uC9C4\uC785\uC810\uC758 \`import.meta.glob\`(\uC720\uC800 \uD504\uB85C\uC81D\uD2B8\uB294 \`src/App.tsx\`, \uC5B4\uB4DC\uBBFC\uC740 \`src/main.tsx\`)\uACFC \`route-preview.json\`\xB7\`config-preview.json\` \uAC12\uC744 \uD568\uAED8 \uACE0\uCE5C\uB2E4(MIGRATION.md\uC758 \uD574\uB2F9 \uD56D\uBAA9 \uCC38\uC870). \uB9C8\uC9C0\uB9C9\uC5D0 \`npx bstage build\`\uB97C \uB3CC\uB824 \uC0B0\uCD9C\uBB3C\uC774 \uC758\uB3C4\uD55C \uACBD\uB85C\uB85C \uB098\uC624\uB294\uC9C0 \uD655\uC778\uD558\uACE0, \uADF8 \uBAA9\uB85D\uC744 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uBCF4\uC5EC\uC900\uB2E4.
|
|
355
|
+
|
|
356
|
+
> \uAD00\uB9AC\uB3C4\uAD6C\uAC00 \uD604\uC7AC \uB9E4\uD551\uC744 \uC870\uD68C\uD558\uB294 API\uB97C \uC5F4\uBA74 \uC774 \uBB3C\uC74C\uC740 \uC790\uB3D9 \uC870\uD68C\uB85C \uB300\uCCB4\uD560 \uC218 \uC788\uB2E4. \uADF8\uB54C\uAE4C\uC9C0\uB294 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uBB3B\uB294 \uAC8C \uC720\uC77C\uD55C \uBC29\uBC95\uC774\uB2E4.
|
|
357
|
+
|
|
358
|
+
### 3d. AGENTS.md \uAD00\uB9AC \uC601\uC5ED \uB3D9\uAE30\uD654
|
|
359
|
+
|
|
360
|
+
\`AGENTS.md\`\uB294 **SDK \uAD00\uB9AC \uC601\uC5ED**(\uB9C8\uCEE4 \`BSTAGE:MANAGED:START\`~\`END\`\uB85C \uAC10\uC2FC SDK \uC800\uC791 \uBCF4\uC77C\uB7EC\uD50C\uB808\uC774\uD2B8)\uACFC **\uC790\uC720 \uC601\uC5ED**(\uB9C8\uCEE4 \uBC14\uAE65, \uD504\uB85C\uC81D\uD2B8 \uACE0\uC720 \uADDC\uCE59)\uC73C\uB85C \uB098\uB25C\uB2E4. doctor\uC758 \`agentsMd.status\`\uB85C \uBD84\uAE30\uD55C\uB2E4.
|
|
361
|
+
|
|
362
|
+
- \`ok\` \u2014 \uD560 \uC77C \uC5C6\uC74C.
|
|
363
|
+
- \`stale\` (\uB9C8\uCEE4\uB294 \uC788\uACE0 \uBC84\uC804\uB9CC \uB0AE\uC74C) \u2014 **\uC790\uB3D9**. \`bstage ai update\`\uB97C \uC2E4\uD589\uD558\uBA74 \uAD00\uB9AC \uC601\uC5ED\uB9CC \uCD5C\uC2E0\uC73C\uB85C \uCE58\uD658\uB418\uACE0 \uC790\uC720 \uC601\uC5ED\uC740 \uBCF4\uC874\uB41C\uB2E4. \uB05D.
|
|
364
|
+
- \`legacy\` (\uB9C8\uCEE4 \uC5C6\uC74C \u2014 \uC61B \uD504\uB85C\uC81D\uD2B8) \u2014 **\uD310\uB2E8**. SDK \uB0B4\uC6A9\uACFC \uC0AC\uC6A9\uC790 \uB0B4\uC6A9\uC774 \uD55C \uB369\uC5B4\uB9AC\uB77C 1\uD68C reconcile\uC774 \uD544\uC694\uD558\uB2E4. **\uACBD\uACC4\uB294 \uB124(\uC5D0\uC774\uC804\uD2B8)\uAC00 \uBA3C\uC800 \uBD84\uB958\uD574 \uC81C\uC548\uD558\uACE0, \uC0AC\uC6A9\uC790\uC5D0\uAC90 \uD655\uC778\uB9CC \uBC1B\uB294\uB2E4** \u2014 \uC0AC\uC6A9\uC790\uC5D0\uAC8C "\uC5B4\uB514\uAE4C\uC9C0\uAC00 \uD504\uB85C\uC81D\uD2B8 \uCD94\uAC00\uBD84\uC774\uB0D0"\uB97C \uBC31\uC9C0\uC5D0\uC11C \uBB3B\uC9C0 \uC54A\uB294\uB2E4(\uC0AC\uC6A9\uC790\uB294 AGENTS.md \uAD6C\uC870\uB97C \uBAA8\uB97C \uC218 \uC788\uACE0, \uBD84\uB958\uB294 \uB124 \uCC45\uC784\uC774\uB2E4).
|
|
365
|
+
1. doctor \`--json\`\uC758 \`agentsMd.managedBlock\`\uC774 \uC801\uC6A9\uD560 **\uCD5C\uC2E0 SDK \uAD00\uB9AC \uC601\uC5ED(\uB9C8\uCEE4 \uD3EC\uD568)**\uC774\uB2E4. \uC774\uAC78 \uB808\uD37C\uB7F0\uC2A4\uB85C \uC0BC\uC544, \uC61B AGENTS.md\uC758 \uAC01 \uAD6C\uAC04\uC774 **SDK \uBCF4\uC77C\uB7EC\uD50C\uB808\uC774\uD2B8**(\uD504\uB85C\uC81D\uD2B8 \uAC1C\uC694\xB7SDK \uBB38\uC11C \uBAA9\uB85D\xB7\uD504\uB85C\uC81D\uD2B8 \uAD6C\uC870\xB7\uD15C\uD50C\uB9BF \uC791\uC131 \uADDC\uCE59\xB7\uAE08\uC9C0 \uC0AC\uD56D\xB7\uC61B \`client.get('/api/...')\` \uC608\uC2DC\uB098 \uC5D4\uB4DC\uD3EC\uC778\uD2B8 \uBAA9\uB85D \uB4F1 \u2014 managedBlock\uC774 \uB300\uCCB4\uD558\uB294 \uAC83)\uC778\uC9C0, **\uD504\uB85C\uC81D\uD2B8 \uACE0\uC720 \uB0B4\uC6A9**(\uC774 \uB808\uD3EC\uB9CC\uC758 \uADDC\uCE59\xB7\uB3C4\uBA54\uC778 \uBA54\uBAA8 \uB4F1)\uC778\uC9C0 \uBD84\uB958\uD55C\uB2E4.
|
|
366
|
+
2. \uBD84\uB958 \uACB0\uACFC\uB85C "\uB9E8 \uC704 = managedBlock, \uADF8 \uC544\uB798 \uC790\uC720 \uC601\uC5ED = \uD504\uB85C\uC81D\uD2B8 \uACE0\uC720 \uB0B4\uC6A9\uB9CC" \uAD6C\uC870\uC758 \uC7AC\uC791\uC131\uC548\uC744 \uB9CC\uB4E0\uB2E4. SDK \uBCF4\uC77C\uB7EC\uD50C\uB808\uC774\uD2B8\uB294 managedBlock\uC774 \uB300\uC2E0\uD558\uBBC0\uB85C **\uC790\uC720 \uC601\uC5ED\uC5D0 \uC911\uBCF5 \uBCF4\uC874\uD558\uC9C0 \uC54A\uB294\uB2E4** \u2014 \uD2B9\uD788 \uC61B \`/api/\` \uACBD\uB85C \uBAA9\uB85D\uC774 \uB0A8\uC73C\uBA74 \uC7AC\uBC1C \uC6D0\uC778\uC774 \uB41C\uB2E4.
|
|
367
|
+
3. \uC790\uC720 \uC601\uC5ED\uC73C\uB85C \uBCF4\uC874\uD558\uB824\uB294 \uD56D\uBAA9(=\uB124\uAC00 "\uD504\uB85C\uC81D\uD2B8 \uACE0\uC720"\uB85C \uBD84\uB958\uD55C \uAC83)\uC744 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uC81C\uC2DC\uD558\uACE0 **\uACBD\uACC4\uB97C \uD655\uC778\uBC1B\uB294\uB2E4**: "\uC774 \uBD80\uBD84\uB4E4\uC744 \uD504\uB85C\uC81D\uD2B8 \uACE0\uC720 \uB0B4\uC6A9\uC73C\uB85C \uBCF4\uACE0 \uBCF4\uC874\uD558\uB824\uB294\uB370 \uB9DE\uB098\uC694? SDK \uC601\uC5ED\uC73C\uB85C \uBE7C\uB3C4 \uB418\uB294 \uAC8C \uC11E\uC5EC \uC788\uAC70\uB098, \uBE60\uC9C4 \uAC8C \uC788\uB098\uC694?" (\uC774\uAC74 "\uCF54\uB4DC\uAC00 \uB9DE\uB0D0"\uB294 \uAC80\uC99D\uC774 \uC544\uB2C8\uB77C "\uC774\uAC8C \uB108\uD76C\uAC00 \uCD94\uAC00\uD55C \uAC70\uB0D0"\uB294 \uC18C\uC720 \uD655\uC778\uC774\uB77C \uC0AC\uC6A9\uC790\uAC00 \uB2F5\uD560 \uC218 \uC788\uB2E4.) \uC560\uB9E4\uD55C \uAD6C\uAC04\uC740 \uC784\uC758\uB85C \uC9C0\uC6B0\uC9C0 \uB9D0\uACE0 \uC790\uC720 \uC601\uC5ED\uC5D0 \uB0A8\uACA8 \uD6C4\uBCF4\uB85C \uC81C\uC2DC\uD55C\uB2E4.
|
|
368
|
+
4. \uD655\uC778\xB7\uC870\uC815 \uD6C4 \uC7AC\uC791\uC131\uD558\uACE0, \uCD5C\uC885 diff\uB97C \uBCF4\uC5EC\uC900\uB2E4.
|
|
369
|
+
|
|
370
|
+
## 4. \uAC80\uC99D
|
|
371
|
+
|
|
372
|
+
- \uC124\uCE58\uAC00 \uB05D\uB0AC\uB294\uC9C0 \uD655\uC778\uD558\uACE0, \uD504\uB85C\uC81D\uD2B8\uC758 \uD0C0\uC785\uCCB4\uD06C\xB7\uB9B0\uD2B8\xB7\uBE4C\uB4DC\uB97C \uB3CC\uB824 \uAE68\uC9C4 \uACF3\uC774 \uC5C6\uB294\uC9C0 \uBCF8\uB2E4.
|
|
373
|
+
- \`npx @bstage-sdk/cli@latest doctor\`\uB97C \uB2E4\uC2DC \uB3CC\uB824 \uBC84\uC804\uC774 \uCD5C\uC2E0\uC73C\uB85C \uC815\uB9AC\uB410\uB294\uC9C0 \uD655\uC778\uD55C\uB2E4(init \uAE30\uBCF8 \uD30C\uC77C \uCC28\uC774\uB294 \uC758\uB3C4\uC801\uC73C\uB85C \uB0A8\uAE38 \uC218 \uC788\uB2E4).
|
|
374
|
+
- \uB0A8\uC740 \`\uD310\uB2E8\` \uD56D\uBAA9(\uC608: \uB3C4\uC785\uC744 \uBCF4\uB958\uD55C \uC120\uD0DD \uAE30\uB2A5)\uC774 \uC788\uC73C\uBA74 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uBCF4\uACE0\uD55C\uB2E4.
|
|
375
|
+
|
|
376
|
+
# \uD558\uC9C0 \uB9D0 \uAC83
|
|
377
|
+
|
|
378
|
+
- **\uAE30\uC5B5\xB7\uAC00\uC815\uC73C\uB85C \uC801\uC6A9\uD558\uAE30** \u2014 \uC124\uCE58\uB41C \uD328\uD0A4\uC9C0(\`MIGRATION.md\`\xB7\uD0C0\uC785 \uC120\uC5B8)\uC640 \uD504\uB85C\uC81D\uD2B8 \uC2E4\uC81C \uCF54\uB4DC\uB85C \uD655\uC778\uD558\uC9C0 \uC54A\uACE0 \uBCC0\uD658\uD558\uAE30
|
|
379
|
+
- **\uC0AC\uC6A9\uC790\uC5D0\uAC8C \uCF54\uB4DC \uAC80\uC99D\uC744 \uB5A0\uB118\uAE30\uAE30** \u2014 "\uC774 \uCF54\uB4DC \uB9DE\uB098\uC694?"\uCC98\uB7FC \uC0AC\uC6A9\uC790\uAC00 \uC9C1\uC811 \uD655\uC778\uD574\uC57C \uB2F5\uD560 \uC218 \uC788\uB294 \uC9C8\uBB38\uD558\uAE30 (\uC0AC\uC6A9\uC790\uB294 \uAC1C\uBC1C\uC790\uAC00 \uC544\uB2D0 \uC218 \uC788\uB2E4 \u2014 \uAC80\uC99D\uC740 \uB124 \uBAAB)
|
|
380
|
+
- \uC0AC\uC6A9\uC790 \uCF54\uB4DC\uB97C \uD1B5\uC9F8\uB85C \uB36E\uC5B4\uC4F0\uAE30 (\uD2B9\uD788 \`src/pages/**\`\xB7\`src/slots/**\`, \uCEE4\uC2A4\uD140 \`shared\`/\`api\` \uB4F1)
|
|
381
|
+
- \uD15C\uD50C\uB9BF\uC774 \uD398\uC774\uC9C0\uC778\uC9C0 \uC704\uC82F\uC778\uC9C0, \uD398\uC774\uC9C0\uBA74 \uC5B4\uB290 \uACBD\uB85C\uC778\uC9C0\uB97C **\uCD94\uCE21\uD574\uC11C** \uC62E\uAE30\uAE30 (\uAD00\uB9AC\uB3C4\uAD6C\uC5D0\uB9CC \uC788\uB294 \uC815\uBCF4\uB2E4)
|
|
382
|
+
- \uD55C \uBC88\uC5D0 \uBAA8\uB4E0 \uBCC0\uACBD\uC744 \uC801\uC6A9\uD558\uACE0 \uAC80\uC99D\uC744 \uAC74\uB108\uB6F0\uAE30
|
|
383
|
+
- \`\uD310\uB2E8\` \uD56D\uBAA9\uC744 \uC0AC\uC6A9\uC790 \uD655\uC778 \uC5C6\uC774 \uCD94\uCE21\uC73C\uB85C \uBCC0\uD658\uD558\uAE30
|
|
384
|
+
- \`.bstage/i18n/**/*.json\` \uAC19\uC740 \uC7AC\uC0DD\uC131 \uAC00\uB2A5\uD55C \uCE90\uC2DC\uB97C \uC190\uC73C\uB85C \uD3B8\uC9D1\uD558\uAE30 (\`bstage i18n pull\`\uB85C \uC0DD\uC131)
|
|
385
|
+
`;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
// src/skills/onboarding.ts
|
|
389
|
+
function onboardingSkillMd() {
|
|
390
|
+
return `---
|
|
391
|
+
name: bstage-onboarding
|
|
392
|
+
description: b.stage \uCEE4\uC2A4\uD140 \uAC1C\uBC1C\uC744 \uCC98\uC74C\uBD80\uD130 \uB05D\uAE4C\uC9C0 \uC548\uB0B4\uD55C\uB2E4. \uD504\uB85C\uC81D\uD2B8\uAC00 \uC544\uC9C1 \uC5C6\uAC70\uB098 \uBB34\uC5C7\uBD80\uD130 \uD560\uC9C0 \uBAA8\uB97C \uB54C, "\uCEE4\uC2A4\uD140 \uC2DC\uC791", "\uCC98\uC74C\uC778\uB370", "\uD3EC\uD138\uC5D0 \uC62C\uB9AC\uACE0 \uC2F6\uC5B4", "\uD15C\uD50C\uB9BF \uD504\uB85C\uC81D\uD2B8 \uB9CC\uB4E4\uC5B4\uC918" \uAC19\uC740 \uC694\uCCAD\uC744 \uBC1B\uC744 \uB54C \uC0AC\uC6A9\uD55C\uB2E4.
|
|
393
|
+
---
|
|
394
|
+
|
|
395
|
+
# \uC5ED\uD560
|
|
396
|
+
|
|
397
|
+
\uBE48\uC190\uC5D0\uC11C \uC2DC\uC791\uD574 **\uCCAB \uD654\uBA74\uC774 \uD50C\uB7AB\uD3FC\uC5D0 \uB728\uB294 \uB370\uAE4C\uC9C0** \uC0AC\uC6A9\uC790\uB97C \uB370\uB824\uAC04\uB2E4. \uC774 \uC2A4\uD0AC\uC740 \uC21C\uC11C\uC640 \uC131\uACF5 \uD310\uC815 \uAE30\uC900\uB9CC \uB2F4\uB294\uB2E4. \uBA85\uB839\uC758 \uC815\uD655\uD55C \uC635\uC158\uC740 \uD56D\uC0C1 \`bstage <\uBA85\uB839> --help\`\uB97C, SDK \uC0AC\uC6A9\uBC95\uC740 \uC124\uCE58\uB41C docs\uB97C \uBCF8\uB2E4.
|
|
398
|
+
|
|
399
|
+
\uD575\uC2EC \uC6D0\uCE59:
|
|
400
|
+
|
|
401
|
+
1. **\uC0AC\uC6A9\uC790\uB294 \uAC1C\uBC1C\uC790\uAC00 \uC544\uB2D0 \uC218 \uC788\uB2E4.** \uD30C\uC77C\xB7\uC124\uC815\xB7\uC124\uCE58 \uC0C1\uD0DC \uD655\uC778\uC740 **\uB124(\uC5D0\uC774\uC804\uD2B8) \uCC45\uC784**\uC774\uB2E4. \uC9C1\uC811 \uC77D\uC5B4 \uD655\uC778\uD558\uACE0, \uC0AC\uC6A9\uC790\uC5D0\uAC90 \uC81C\uD488\xB7\uC120\uD638 **\uACB0\uC815**\uB9CC \uAD6C\uCCB4\uC801 \uC120\uD0DD\uC9C0\uB85C \uBB3B\uB294\uB2E4.
|
|
402
|
+
2. **\uD655\uC778\uC774 \uC548 \uB418\uBA74 \uBA48\uCD98\uB2E4.** \uCD94\uCE21\uD574\uC11C \uB2E4\uC74C \uB2E8\uACC4\uB85C \uB118\uC5B4\uAC00\uC9C0 \uC54A\uB294\uB2E4.
|
|
403
|
+
3. **\uB2E8\uACC4\uB9C8\uB2E4 \uC131\uACF5 \uD310\uC815 \uAE30\uC900\uC744 \uBA3C\uC800 \uB9D0\uD558\uACE0 \uD655\uC778\uD55C\uB2E4.** "\uB410\uB098\uC694?"\uAC00 \uC544\uB2C8\uB77C "\uC774 \uCD9C\uB825\uC774 \uB098\uC624\uBA74 \uC131\uACF5"\uC73C\uB85C \uB9D0\uD55C\uB2E4.
|
|
404
|
+
4. **\uB418\uB3CC\uB9AC\uAE30 \uC5B4\uB824\uC6B4 \uC77C\uC740 \uC2E4\uD589 \uC804\uC5D0 \uBCF4\uC5EC\uC8FC\uACE0 \uD655\uC778\uBC1B\uB294\uB2E4** \u2014 \uC6D0\uACA9 push, \uBC30\uD3EC, \uAC8C\uC2DC \uC804\uD658.
|
|
405
|
+
|
|
406
|
+
# \uAD8C\uC704 \uC788\uB294 \uCD9C\uCC98
|
|
407
|
+
|
|
408
|
+
- \`bstage --help\`, \`bstage <\uBA85\uB839> --help\` \u2014 \uBA85\uB839\xB7\uC635\uC158\uC758 \uC720\uC77C\uD55C \uCD9C\uCC98(\uAE30\uC5B5\uC73C\uB85C \uC635\uC158\uC744 \uB9CC\uB4E4\uC9C0 \uC54A\uB294\uB2E4)
|
|
409
|
+
- \uC124\uCE58 \uD6C4 \`node_modules/@bstage-sdk/core/docs/\` \u2014 GETTING_STARTED\xB7INIT\xB7BUILD_SYSTEM \uB4F1. \uBAA9\uB85D\uC740 \`npx bstage docs\`. SDK \uC758\uC874\uC774 \uC5C6\uB294 \uB808\uD3EC(\uC608: \`.liquid\` \uD30C\uC77C\uB9CC \uB454 \uB808\uD3EC)\uC5D0\uB294 \uC774 \uACBD\uB85C\uAC00 \uC5C6\uC5B4 **\uC885\uB8CC \uCF54\uB4DC 2**\uB85C \uB05D\uB09C\uB2E4 \u2014 \uADF8\uB54C\uB294 \`bstage-liquid\` \uC2A4\uD0AC\uC774 \uADDC\uC57D\xB7\uB370\uC774\uD130\xB7\uC5D0\uC14B\uC744 \uB4E4\uACE0 \uC788\uB2E4
|
|
410
|
+
- \uD504\uB85C\uC81D\uD2B8 \uADDC\uCE59: \uB808\uD3EC \uB8E8\uD2B8\uC758 \`AGENTS.md\`
|
|
411
|
+
- \uC774\uD6C4 \uC791\uC5C5\uC740 \uC2A4\uD0AC\uB85C \uB118\uAE34\uB2E4 \u2014 \`bstage-template\`(React \uD15C\uD50C\uB9BF) \xB7 \`bstage-liquid\`(liquid \uD15C\uD50C\uB9BF) \xB7 \`bstage-deploy\`(\uBC30\uD3EC\xB7\uB864\uBC31\xB7\uAC8C\uC2DC)
|
|
412
|
+
|
|
413
|
+
# \uC808\uCC28
|
|
414
|
+
|
|
415
|
+
## 1. \uACB0\uC815 \uC138 \uAC1C\uB97C \uD55C \uBC88\uC5D0 \uBB3B\uB294\uB2E4
|
|
416
|
+
|
|
417
|
+
\uC791\uC5C5\uC744 \uC2DC\uC791\uD558\uAE30 \uC804\uC5D0 \uC544\uB798 \uC14B\uC744 **\uD55C \uBC88\uC5D0** \uBB3B\uB294\uB2E4(\uD558\uB098\uC529 \uBB3C\uC73C\uBA74 \uC0AC\uC6A9\uC790\uAC00 \uC9C0\uCE5C\uB2E4).
|
|
418
|
+
|
|
419
|
+
- **(a) \uC5B4\uB514\uC5D0 \uBD99\uC774\uB098** \u2014 \uC720\uC800 \uD50C\uB7AB\uD3FC(\uBC29\uBB38\uC790\uAC00 \uBCF4\uB294 \uD654\uBA74)\uC778\uC9C0, \uC5B4\uB4DC\uBBFC(\uC6B4\uC601\uC790\uAC00 \uBCF4\uB294 \uD654\uBA74)\uC778\uC9C0.
|
|
420
|
+
- **(b) \uC5B4\uB5BB\uAC8C \uB9CC\uB4DC\uB098** \u2014 \uB458 \uC911 \uD558\uB098\uB97C \uACE0\uB974\uAC8C \uD558\uACE0 \uD55C \uC904 \uC7A5\uB2E8\uC810\uC744 \uD568\uAED8 \uC900\uB2E4.
|
|
421
|
+
- **React \uCEF4\uD3EC\uB10C\uD2B8(sdk)**: \uC0C1\uD638\uC791\uC6A9\xB7\uC0C1\uD0DC\xB7API \uD638\uCD9C\uC774 \uD544\uC694\uD55C \uD654\uBA74\uC5D0 \uB9DE\uB294\uB2E4. \uB300\uC2E0 \uBE4C\uB4DC\xB7\uBC88\uB4E4 \uAC1C\uB150\uC774 \uB530\uB77C\uC628\uB2E4.
|
|
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
|
+
- **(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
|
+
|
|
425
|
+
\uD55C \uB808\uD3EC\uC5D0\uB294 **\uD55C \uBC29\uC2DD\uB9CC** \uB2F4\uB294\uB2E4. React\uC640 liquid\uB97C \uD55C \uB808\uD3EC\uC5D0 \uC11E\uC73C\uBA74 \uD3EC\uD138\uC774 \uBE4C\uB4DC\uD558\uC9C0 \uBABB\uD55C\uB2E4.
|
|
426
|
+
|
|
427
|
+
## 2. \uD504\uB85C\uC81D\uD2B8 \uC0DD\uC131
|
|
428
|
+
|
|
429
|
+
\`\`\`bash
|
|
430
|
+
npx @bstage-sdk/cli@latest init
|
|
431
|
+
\`\`\`
|
|
432
|
+
|
|
433
|
+
- CLI\uAC00 \uC774\uBBF8 \uC124\uCE58\uB41C \uD658\uACBD\uC774\uBA74 \`bstage init\`\uB3C4 \uAC19\uB2E4. \uCC98\uC74C\uC774\uB77C\uBA74 \uC704\uCC98\uB7FC \`npx\`\uB85C \uCD5C\uC2E0 CLI\uB97C \uBC14\uB85C \uC4F4\uB2E4.
|
|
434
|
+
- 1\uB2E8\uACC4 (b)\uC758 \uACB0\uC815\uC740 \`--kind sdk\` \uB610\uB294 \`--kind liquid\`\uB85C \uB118\uAE34\uB2E4(\uAE30\uBCF8\uC740 sdk). \uB300\uC0C1(\uC720\uC800/\uC5B4\uB4DC\uBBFC)\uC740 \`--target\`\uC774\uB2E4. \uB098\uBA38\uC9C0 \uC635\uC158\uC740 \`bstage init --help\`\uB85C \uD655\uC778\uD55C\uB2E4.
|
|
435
|
+
- \uB300\uD654\uD615\uC73C\uB85C \uC2A4\uD398\uC774\uC2A4\xB7\uB300\uC0C1(\uC720\uC800/\uC5B4\uB4DC\uBBFC)\xB7\uCCAB \uD15C\uD50C\uB9BF \uC774\uB984\xB7phase\uB97C \uBB3B\uB294\uB2E4. \uBE44\uB300\uD654\uD615\uC73C\uB85C \uB3CC\uB824\uC57C \uD558\uBA74 \uC635\uC158 \uC774\uB984\uC744 \uCD94\uCE21\uD558\uC9C0 \uB9D0\uACE0 \`bstage init --help\`\uB85C \uD655\uC778\uD55C\uB2E4.
|
|
436
|
+
- **\uC131\uACF5 \uD310\uC815**: \uC0C8 \uD3F4\uB354\uAC00 \uC0DD\uAE30\uACE0 \uADF8 \uC548\uC5D0 \`package.json\`\xB7\`AGENTS.md\`\xB7\`.claude/skills/\`\uAC00 \uC788\uB2E4. \uC774\uD6C4 \uC791\uC5C5\uC740 **\uC0DD\uC131\uB41C \uD3F4\uB354 \uC548\uC5D0\uC11C** \uD55C\uB2E4(\uC5D0\uC774\uC804\uD2B8\uAC00 \uC791\uC5C5 \uB514\uB809\uD130\uB9AC\uB97C \uC62E\uAE34\uB2E4).
|
|
437
|
+
- init\uC774 \uC5D0\uC774\uC804\uD2B8\uC6A9 \uC2A4\uD0AC\xB7\`AGENTS.md\`\uB97C \uC774\uBBF8 \uC124\uCE58\uD574 \uB454\uB2E4 \u2014 \`bstage ai install\`\uC744 \uB2E4\uC2DC \uB3CC\uB9B4 \uD544\uC694\uB294 \uC5C6\uB2E4. \`.claude/skills/\`\uAC00 \uC2E4\uC81C\uB85C \uC788\uB294\uC9C0\uB9CC \uD655\uC778\uD55C\uB2E4.
|
|
438
|
+
- \uC758\uC874\uC131 \uC124\uCE58\uAC00 \uB05D\uB0AC\uB294\uC9C0 \uD655\uC778\uD55C\uB2E4(\`node_modules\`\uAC00 \uC788\uB294\uC9C0). \uC124\uCE58\uAC00 \uC2E4\uD328\uD588\uB2E4\uBA74 \uC6D0\uC778\uC744 \uC77D\uACE0 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uBCF4\uACE0\uD55C\uB2E4 \u2014 \uB118\uC5B4\uAC00\uC9C0 \uC54A\uB294\uB2E4.
|
|
439
|
+
|
|
440
|
+
## 3. \uB85C\uCEEC\uC5D0\uC11C \uB744\uC6B0\uACE0 \uD55C \uAD70\uB370 \uACE0\uCCD0 \uBCF8\uB2E4
|
|
441
|
+
|
|
442
|
+
\`\`\`bash
|
|
443
|
+
bstage dev
|
|
444
|
+
\`\`\`
|
|
445
|
+
|
|
446
|
+
- \`npm run dev\`\uB3C4 \uAC19\uC740 \uC77C\uC744 \uD55C\uB2E4(\uD504\uB85C\uC81D\uD2B8 \uC2A4\uD06C\uB9BD\uD2B8).
|
|
447
|
+
- **\uC131\uACF5 \uD310\uC815**: \uD130\uBBF8\uB110\uC5D0 \uB85C\uCEEC \uC8FC\uC18C\uAC00 \uB728\uACE0, \uBE0C\uB77C\uC6B0\uC800\uC5D0\uC11C \uBAA9\uB85D\xB7\uBBF8\uB9AC\uBCF4\uAE30\uAC00 \uBCF4\uC778\uB2E4.
|
|
448
|
+
- \uC0AC\uC6A9\uC790\uAC00 \uD654\uBA74\uC744 \uD655\uC778\uD55C \uB4A4, **\uB208\uC5D0 \uBCF4\uC774\uB294 \uBB38\uAD6C \uD558\uB098\uB97C \uBC14\uAFD4** \uC0C8\uB85C\uACE0\uCE68\uC73C\uB85C \uBC18\uC601\uB418\uB294 \uAC83\uAE4C\uC9C0 \uAC19\uC774 \uBCF8\uB2E4. \uC774 \uD55C \uBC88\uC73C\uB85C "\uACE0\uCE58\uBA74 \uBC14\uB85C \uBCF4\uC778\uB2E4"\uB294 \uAC10\uC774 \uC0DD\uAE34\uB2E4.
|
|
449
|
+
- \uC548 \uB728\uBA74 \uCD94\uCE21\uD558\uC9C0 \uB9D0\uACE0 \uD130\uBBF8\uB110 \uC624\uB958\uB97C \uC77D\uB294\uB2E4. \uD3EC\uD2B8 \uCDA9\uB3CC\uC774\uBA74 \uD3EC\uD2B8\uB97C \uBC14\uAFB8\uB294 \uC635\uC158\uC774 \uC788\uB2E4(\`bstage dev --help\`).
|
|
450
|
+
|
|
451
|
+
## 4. \uCEE4\uBC0B\uD558\uACE0 \uC6D0\uACA9\uC5D0 \uC62C\uB9B0\uB2E4
|
|
452
|
+
|
|
453
|
+
\uD3EC\uD138\uC740 **\uC6D0\uACA9 \uC800\uC7A5\uC18C\uC5D0 push\uB41C \uCEE4\uBC0B**\uC744 \uBE4C\uB4DC\uD55C\uB2E4. \uB85C\uCEEC \uD30C\uC77C\uC740 \uC62C\uB77C\uAC00\uC9C0 \uC54A\uC73C\uBBC0\uB85C \uC774 \uB2E8\uACC4\uB97C \uAC74\uB108\uB6F8 \uC218 \uC5C6\uB2E4.
|
|
454
|
+
|
|
455
|
+
- \uC544\uC9C1 \uC6D0\uACA9\uC774 \uC5C6\uC73C\uBA74 **\uC0AC\uC6A9\uC790\uC5D0\uAC8C \uACB0\uC815\uC744 \uBB3B\uB294\uB2E4**: \uC5B4\uB290 \uC870\uC9C1(\uB610\uB294 \uAC1C\uC778 \uACC4\uC815)\uC5D0 \uB9CC\uB4E4\uC9C0, \uC800\uC7A5\uC18C \uC774\uB984\uC740 \uBB34\uC5C7\uC73C\uB85C \uD560\uC9C0, \uACF5\uAC1C/\uBE44\uACF5\uAC1C.
|
|
456
|
+
- \uBE48 \uC800\uC7A5\uC18C\uB97C \uB9CC\uB4E0 \uB4A4 \uC6D0\uACA9\uC744 \uCD94\uAC00\uD558\uACE0 \uAE30\uBCF8 \uBE0C\uB79C\uCE58\uC5D0 push\uD55C\uB2E4.
|
|
457
|
+
- **\uC6D0\uACA9\uC5D0 \uC62C\uB9AC\uB294 \uBA85\uB839\uC740 \uC2E4\uD589 \uC804\uC5D0 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uADF8\uB300\uB85C \uBCF4\uC5EC\uC8FC\uACE0 \uD655\uC778\uC744 \uBC1B\uB294\uB2E4.** \uC5B4\uB5A4 \uC800\uC7A5\uC18C\uB85C \uAC00\uB294\uC9C0 \uD55C \uC904\uB85C \uC694\uC57D\uD55C\uB2E4.
|
|
458
|
+
- **\uC131\uACF5 \uD310\uC815**: \uC6D0\uACA9 \uC800\uC7A5\uC18C \uAE30\uBCF8 \uBE0C\uB79C\uCE58\uC5D0\uC11C \uBC29\uAE08 \uB9CC\uB4E0 \uD30C\uC77C\uC774 \uBCF4\uC778\uB2E4.
|
|
459
|
+
|
|
460
|
+
## 5. \uD3EC\uD138\uC5D0\uC11C \uD574\uC57C \uD558\uB294 \uC77C (\uD654\uBA74\uC5D0\uC11C\uB9CC \uAC00\uB2A5)
|
|
461
|
+
|
|
462
|
+
\uB808\uD3EC \uC5F0\uACB0\uACFC \uBC30\uCE58(\uD398\uC774\uC9C0) \uC0DD\uC131\uC740 **\uD3EC\uD138 \uD654\uBA74\uC5D0\uC11C\uB9CC** \uD560 \uC218 \uC788\uB2E4. CLI \uD1A0\uD070\uC73C\uB85C\uB294 \uB418\uC9C0 \uC54A\uB294\uB2E4(\uC758\uB3C4\uB41C \uC124\uACC4). \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uC21C\uC11C\uB97C \uC54C\uB824\uC8FC\uACE0, \uB05D\uB0AC\uB294\uC9C0\uB294 CLI\uB85C \uD655\uC778\uD55C\uB2E4. \uD3EC\uD138 \uC8FC\uC18C\uB294 \uC0AC\uC6A9\uC790\uAC00 \uC4F0\uB294 \uC8FC\uC18C\uB97C \uADF8\uB300\uB85C \uB530\uB978\uB2E4 \u2014 \uCD94\uCE21\uD574\uC11C \uC801\uC9C0 \uC54A\uB294\uB2E4.
|
|
463
|
+
|
|
464
|
+
1. **\uB808\uD3EC \uC5F0\uACB0** \u2014 \uC2A4\uD14C\uC774\uC9C0 > \uB808\uD3EC > \uC0C8 \uB808\uD3EC \uC5F0\uACB0. \uC870\uC9C1\uC5D0\uC11C \uCC98\uC74C\uC774\uB77C\uBA74 GitHub \uC571 \uC124\uCE58\uAC00 \uD55C \uBC88 \uC120\uD589\uB41C\uB2E4(\uC870\uC9C1\uB2F9 1\uD68C).
|
|
465
|
+
2. **\uCCAB \uBE4C\uB4DC** \u2014 \uC5F0\uACB0\uD55C \uB808\uD3EC\uC5D0\uC11C \uD654\uBA74\uC758 "\uC0C8 \uBC84\uC804 \uBE4C\uB4DC"\uB97C \uB20C\uB7EC \uCCAB \uC0B0\uCD9C\uBB3C\uC744 \uB9CC\uB4E0\uB2E4.
|
|
466
|
+
3. **\uD398\uC774\uC9C0(\uBC30\uCE58) \uB9CC\uB4E4\uAE30** \u2014 \uC2A4\uD14C\uC774\uC9C0 > \uD398\uC774\uC9C0 > \uC0C8 \uD398\uC774\uC9C0 \u2192 \uCEE4\uC2A4\uD140 \uBC29\uC2DD \uC120\uD0DD(\`sdk\` \xB7 \`liquid\` \xB7 \`slot\`) \u2192 \uB808\uD3EC\uC640 \uC0B0\uCD9C\uBB3C \uC120\uD0DD \u2192 \uACBD\uB85C(PAGE) \uD655\uC778. liquid\uB294 **PAGE\uB9CC** \uAC00\uB2A5\uD558\uB2E4(\uC2AC\uB86F \uC790\uB9AC\uC5D0\uB294 \uB123\uC744 \uC218 \uC5C6\uB2E4).
|
|
467
|
+
4. \uB9CC\uB4E0 \uB4A4 \uD654\uBA74\uC5D0\uC11C **\uC801\uC6A9**\uD558\uACE0 **\uAC8C\uC2DC\uD558\uAE30**\uAE4C\uC9C0 \uD55C\uB2E4.
|
|
468
|
+
|
|
469
|
+
\uC774 4\uB2E8\uACC4\uB294 **\uC0C8 \uB808\uD3EC\uC5D0\uC11C \uCC98\uC74C \uD55C \uBC88\uB9CC** \uD544\uC694\uD558\uB2E4. \uC774\uD6C4 \uAC19\uC740 \uC77C\uC740 \`bstage deploy\`\uAC00 \uD55C\uB2E4.
|
|
470
|
+
|
|
471
|
+
## 6. CLI\uB97C \uD3EC\uD138\uC5D0 \uC5F0\uACB0\uD55C\uB2E4
|
|
472
|
+
|
|
473
|
+
\`\`\`bash
|
|
474
|
+
bstage login
|
|
475
|
+
bstage link
|
|
476
|
+
bstage list
|
|
477
|
+
\`\`\`
|
|
478
|
+
|
|
479
|
+
- \`bstage login\` \u2014 \uD130\uBBF8\uB110\uC5D0 \uCF54\uB4DC\uC640 \uC8FC\uC18C\uAC00 \uB728\uACE0 \uBE0C\uB77C\uC6B0\uC800\uAC00 \uC5F4\uB9B0\uB2E4. \uBE0C\uB77C\uC6B0\uC800\uB97C \uC5F4 \uC218 \uC5C6\uB294 \uD658\uACBD\uC774\uBA74 \uCF54\uB4DC\xB7\uC8FC\uC18C\uB9CC \uCD9C\uB825\uD558\uB294 \uC635\uC158\uC774 \uC788\uB2E4(\`--help\`). \uD1A0\uD070\uC740 \uC0AC\uC6A9\uC790 \uD648\uC758 \uC124\uC815 \uB514\uB809\uD130\uB9AC\uC5D0 \uC18C\uC720\uC790\uB9CC \uC77D\uC744 \uC218 \uC788\uB294 \uAD8C\uD55C\uC73C\uB85C \uC800\uC7A5\uB418\uACE0 \uD654\uBA74\uC5D0 \uCC0D\uD788\uC9C0 \uC54A\uB294\uB2E4.
|
|
480
|
+
- **1\uB2E8\uACC4 (c)\uC5D0\uC11C \uC815\uD55C phase\uAC00 sandbox\uAC00 \uC544\uB2C8\uBA74** \`bstage login\`\xB7\`bstage link\` \uB458 \uB2E4\uC5D0 \`--phase <phase>\`\uB97C \uC900\uB2E4. \uC0DD\uB7B5\uD558\uBA74 \uD504\uB85C\uC81D\uD2B8 \`.env\`\uC758 \uAC12\uC744, \uADF8\uAC83\uB3C4 \uC5C6\uC73C\uBA74 sandbox\uB97C \uC4F4\uB2E4 \u2014 liquid \uB808\uD3EC\uC5D0\uB294 \uC2A4\uCE90\uD3F4\uB4DC\uB41C \`.env\`\uAC00 \uC5C6\uC73C\uBBC0\uB85C \uC774 \uD50C\uB798\uADF8\uAC00 \uD2B9\uD788 \uC911\uC694\uD558\uB2E4. \uAE30\uBCF8 \uBAA9\uB85D \uBC16\uC758 \uD3EC\uD138\uC774\uBA74 \`--portal\`\uB85C \uC8FC\uC18C\uB97C \uC9C1\uC811 \uC9C0\uC815\uD55C\uB2E4(\`bstage login --help\`).
|
|
481
|
+
- \`bstage link\` \u2014 \uD604\uC7AC \uB514\uB809\uD130\uB9AC\uB97C \uC870\uC9C1\xB7\uC2A4\uD14C\uC774\uC9C0\xB7\uB808\uD3EC\uC5D0 \uC5F0\uACB0\uD558\uACE0 \`.bstage/project.json\`\uC5D0 \uC801\uB294\uB2E4(\uC774 \uD30C\uC77C\uC740 gitignore\uB41C\uB2E4).
|
|
482
|
+
- **\uC131\uACF5 \uD310\uC815**: \`bstage list\`\uC5D0 \uC774 \uB808\uD3EC\uC758 **\uBC30\uCE58\uAC00 1\uAC74 \uC774\uC0C1** \uBCF4\uC778\uB2E4. 0\uAC74\uC774\uBA74 5\uB2E8\uACC4\uC758 \uD398\uC774\uC9C0 \uB9CC\uB4E4\uAE30\uAC00 \uC544\uC9C1 \uC548 \uB05D\uB09C \uAC83\uC774\uB2E4 \u2014 \uBC30\uD3EC\uB85C \uB118\uC5B4\uAC00\uC9C0 \uB9D0\uACE0 \uD3EC\uD138 \uD654\uBA74\uC73C\uB85C \uB3CC\uC544\uAC04\uB2E4.
|
|
483
|
+
|
|
484
|
+
## 7. \uCCAB \uBC30\uD3EC
|
|
485
|
+
|
|
486
|
+
\`\`\`bash
|
|
487
|
+
bstage deploy
|
|
488
|
+
\`\`\`
|
|
489
|
+
|
|
490
|
+
- push\uB41C \uCEE4\uBC0B\uC744 \uD3EC\uD138\uC774 \uBE4C\uB4DC\uD558\uACE0, \uBE4C\uB4DC\uAC00 \uB05D\uB098\uBA74 \uC774 \uB808\uD3EC\uC758 \uBC30\uCE58\uC5D0 \uC801\uC6A9\uD55C\uB2E4. **\uB85C\uCEEC \uBE4C\uB4DC \uC0B0\uCD9C\uBB3C\uC744 \uC62C\uB9AC\uB294 \uAC83\uC774 \uC544\uB2C8\uB2E4.**
|
|
491
|
+
- \uAE30\uBCF8\uC73C\uB85C \uBB34\uC5C7\uC744 \uC5B4\uB514\uC5D0 \uC801\uC6A9\uD560\uC9C0 \uBCF4\uC5EC\uC8FC\uACE0 \uD655\uC778\uC744 \uBB3B\uB294\uB2E4 \u2014 \uC0AC\uC6A9\uC790\uAC00 \uADF8 \uD654\uBA74\uC744 \uC9C1\uC811 \uBCF4\uAC8C \uD55C\uB2E4.
|
|
492
|
+
- **\uC131\uACF5 \uD310\uC815**: \uBA85\uB839\uC774 \uC131\uACF5\uC73C\uB85C \uB05D\uB098\uACE0, \uC2A4\uD14C\uC774\uC9C0 \uD654\uBA74\uC5D0\uC11C \uBC14\uB010 \uB0B4\uC6A9\uC774 \uBCF4\uC778\uB2E4.
|
|
493
|
+
- \uC790\uC138\uD55C \uADDC\uCE59(\uC2E4\uD328 \uB300\uC751\xB7\uB864\uBC31\xB7\uAC8C\uC2DC \uB044\uAE30\xB7CI)\uC740 \`bstage-deploy\` \uC2A4\uD0AC\uC5D0 \uC788\uB2E4.
|
|
494
|
+
|
|
495
|
+
## 8. \uC774\uD6C4 \uBC18\uBCF5 \uB8E8\uD504
|
|
496
|
+
|
|
497
|
+
\uACE0\uCE5C\uB2E4 \u2192 \uB85C\uCEEC\uC5D0\uC11C \uD655\uC778\uD55C\uB2E4(\`bstage dev\`) \u2192 \uCEE4\uBC0B\xB7push\uD55C\uB2E4 \u2192 \`bstage deploy\`. \uD3EC\uD138 \uD654\uBA74\uC73C\uB85C \uB2E4\uC2DC \uAC08 \uC77C\uC740 **\uC0C8 \uBC30\uCE58\uB97C \uB9CC\uB4E4 \uB54C\uBFD0**\uC774\uB2E4.
|
|
498
|
+
|
|
499
|
+
## 9. \uB9C9\uD614\uC744 \uB54C
|
|
500
|
+
|
|
501
|
+
\uBA3C\uC800 \uBA85\uB839\uC758 **\uC885\uB8CC \uCF54\uB4DC**\uB85C \uAC08\uB798\uB97C \uC7A1\uB294\uB2E4.
|
|
502
|
+
|
|
503
|
+
| \uCF54\uB4DC | \uB73B | \uBA3C\uC800 \uD560 \uC77C |
|
|
504
|
+
| --- | --- | --- |
|
|
505
|
+
| 0 | \uC131\uACF5 | - |
|
|
506
|
+
| 1 | \uC2E4\uD328 | \uBE4C\uB4DC \uB85C\uADF8 \uD655\uC778(\`bstage logs -f\`) |
|
|
507
|
+
| 2 | \uC0AC\uC804\uC870\uAC74 \uBBF8\uCDA9\uC871 | \uCEE4\uBC0B\xB7push\xB7\uBE0C\uB79C\uCE58\xB7\uBC30\uCE58 \uC720\uBB34\uB97C \uC810\uAC80(\uBA54\uC2DC\uC9C0\uAC00 \uBB34\uC5C7\uC774 \uBE60\uC84C\uB294\uC9C0 \uB9D0\uD574 \uC900\uB2E4) |
|
|
508
|
+
| 3 | \uC778\uC99D | \`bstage login\` \uB2E4\uC2DC |
|
|
509
|
+
| 4 | \uCDA9\uB3CC | \uB2E4\uB978 \uC0AC\uB78C\uC774 \uBA3C\uC800 \uBC30\uD3EC\uD588\uB2E4 \u2014 \`bstage list\`\uB85C \uD604\uC7AC \uC0C1\uD0DC\uB97C \uBCF4\uACE0 \uB2E4\uC2DC \uD310\uB2E8 |
|
|
510
|
+
| 5 | \uC694\uCCAD \uC81C\uD55C | \uC7A0\uC2DC \uAE30\uB2E4\uB838\uB2E4 \uC7AC\uC2DC\uB3C4 |
|
|
511
|
+
|
|
512
|
+
\uADF8 \uBC16\uC758 \uC9C4\uB2E8:
|
|
513
|
+
|
|
514
|
+
- \`bstage doctor\` \u2014 SDK \uBC84\uC804 \uB4DC\uB9AC\uD504\uD2B8\xB7\uB204\uB77D \uD30C\uC77C \uC9C4\uB2E8(\uD30C\uC77C\uC744 \uACE0\uCE58\uC9C0 \uC54A\uB294\uB2E4)
|
|
515
|
+
- \`bstage ai doctor\` \u2014 \uC2A4\uD0AC\xB7\`AGENTS.md\`\uAC00 \uCD5C\uC2E0\uC778\uC9C0 \uD655\uC778(\uC624\uB798\uB410\uC73C\uBA74 \`bstage ai update\`)
|
|
516
|
+
- \`bstage logs -f\` \u2014 \uCD5C\uADFC \uBE4C\uB4DC \uB85C\uADF8\uB97C \uB05D\uAE4C\uC9C0 \uB530\uB77C\uAC00\uBA70 \uBCF8\uB2E4
|
|
517
|
+
|
|
518
|
+
# \uD558\uC9C0 \uB9D0 \uAC83
|
|
519
|
+
|
|
520
|
+
- \uD3EC\uD138 \uD654\uBA74\uC5D0\uC11C\uB9CC \uB418\uB294 \uC77C(\uB808\uD3EC \uC5F0\uACB0\xB7\uBC30\uCE58 \uC0DD\uC131)\uC744 CLI \uC635\uC158\uC73C\uB85C \uC6B0\uD68C\uD558\uB824 \uC2DC\uB3C4\uD558\uAE30
|
|
521
|
+
- \uC635\uC158 \uC774\uB984\uC744 \uAE30\uC5B5\uC73C\uB85C \uC9C0\uC5B4\uB0B4\uAE30 \u2014 \`--help\`\uB85C \uD655\uC778\uD55C\uB2E4
|
|
522
|
+
- \uC6D0\uACA9 push\xB7\uBC30\uD3EC\uB97C \uC0AC\uC6A9\uC790 \uD655\uC778 \uC5C6\uC774 \uC2E4\uD589\uD558\uAE30
|
|
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
|
+
- \`bstage list\`\uC5D0 \uBC30\uCE58\uAC00 0\uAC74\uC778\uB370 \uBC30\uD3EC\uB97C \uC2DC\uB3C4\uD558\uAE30
|
|
525
|
+
- \uD55C \uB808\uD3EC\uC5D0 React \uD15C\uD50C\uB9BF\uACFC liquid \uD15C\uD50C\uB9BF\uC744 \uC11E\uAE30
|
|
526
|
+
`;
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
// src/skills/stamp.ts
|
|
530
|
+
var STAMP_LINE_RE = /^<!--\s*bstage-ai-toolkit\s+(\S+)\s*-->$/;
|
|
531
|
+
var FRONTMATTER_RE = /^---\r?\n[\s\S]*?\r?\n---\r?\n/;
|
|
532
|
+
function compareVersions(a, b) {
|
|
533
|
+
const parse = (v) => v.split("-")[0].split(".").map((n) => /^\d+$/.test(n) ? Number(n) : 0);
|
|
534
|
+
const pa = parse(a);
|
|
535
|
+
const pb = parse(b);
|
|
536
|
+
const len = Math.max(pa.length, pb.length);
|
|
537
|
+
for (let i = 0; i < len; i++) {
|
|
538
|
+
const x = pa[i] ?? 0;
|
|
539
|
+
const y = pb[i] ?? 0;
|
|
540
|
+
if (x !== y) return x > y ? 1 : -1;
|
|
541
|
+
}
|
|
542
|
+
return 0;
|
|
543
|
+
}
|
|
544
|
+
function skillStamp(version = VERSION) {
|
|
545
|
+
return `<!-- bstage-ai-toolkit ${version} -->`;
|
|
546
|
+
}
|
|
547
|
+
function withStamp(body) {
|
|
548
|
+
const m = FRONTMATTER_RE.exec(body);
|
|
549
|
+
if (!m) {
|
|
550
|
+
throw new Error(
|
|
551
|
+
"\uC2A4\uD0AC \uBCF8\uBB38\uC5D0 frontmatter(---)\uAC00 \uC5C6\uC5B4 \uBC84\uC804 \uC2A4\uD0EC\uD504\uB97C \uB123\uC744 \uC790\uB9AC\uB97C \uCC3E\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4."
|
|
552
|
+
);
|
|
553
|
+
}
|
|
554
|
+
return `${m[0]}${skillStamp()}
|
|
555
|
+
${body.slice(m[0].length)}`;
|
|
556
|
+
}
|
|
557
|
+
function readSkillStamp(content) {
|
|
558
|
+
const m = FRONTMATTER_RE.exec(content);
|
|
559
|
+
if (!m) return null;
|
|
560
|
+
const firstLine = content.slice(m[0].length).split("\n").find((line) => line.trim() !== "");
|
|
561
|
+
if (firstLine === void 0) return null;
|
|
562
|
+
return STAMP_LINE_RE.exec(firstLine.trim())?.[1] ?? null;
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
// src/agents/designGuide.ts
|
|
566
|
+
function meta(target) {
|
|
567
|
+
if (target === "admin") {
|
|
568
|
+
return {
|
|
569
|
+
pkg: "@bstage-sdk/design/admin",
|
|
570
|
+
prefix: "admin",
|
|
571
|
+
colorExample: "color.text.primary",
|
|
572
|
+
cssVarExample: "text/primary",
|
|
573
|
+
textStyleExample: "16/title/med",
|
|
574
|
+
shadowExample: "default-large",
|
|
575
|
+
themeNote: "\uC5B4\uB4DC\uBBFC\uC740 **\uB77C\uC774\uD2B8 \uC804\uC6A9**(\uB2E4\uD06C\uBAA8\uB4DC \uC5C6\uC74C)."
|
|
576
|
+
};
|
|
577
|
+
}
|
|
578
|
+
return {
|
|
579
|
+
pkg: "@bstage-sdk/design/user",
|
|
580
|
+
prefix: "user",
|
|
581
|
+
colorExample: "color.text.secondary",
|
|
582
|
+
cssVarExample: "text/secondary",
|
|
583
|
+
textStyleExample: "16/title/semibold",
|
|
584
|
+
shadowExample: "default-large",
|
|
585
|
+
themeNote: "\uC0C9 \uD1A0\uD070\uC740 \uB77C\uC774\uD2B8/\uB2E4\uD06C \uC790\uB3D9 \uB300\uC751 \u2014 \uD50C\uB7AB\uD3FC \uD14C\uB9C8\uB97C \uB530\uB77C \uAC12\uC774 \uBC14\uB010\uB2E4."
|
|
586
|
+
};
|
|
587
|
+
}
|
|
588
|
+
function designRulesBrief(target) {
|
|
589
|
+
const m = meta(target);
|
|
590
|
+
return `## \uB514\uC790\uC778 (bstage \uB514\uC790\uC778 \uD1A0\uD070)
|
|
591
|
+
|
|
592
|
+
UI\uC758 \uC0C9\xB7\uD0C0\uC774\uD3EC\xB7\uADF8\uB9BC\uC790\uB294 **\uBC18\uB4DC\uC2DC \`${m.pkg}\`\uC758 \uD1A0\uD070\uB9CC** \uC0AC\uC6A9\uD55C\uB2E4. hex/rgb \uD558\uB4DC\uCF54\uB529 \uAE08\uC9C0.
|
|
593
|
+
|
|
594
|
+
- **\uC0C9**: \`${m.colorExample}\`(\uC911\uCCA9 \uD2B8\uB9AC) \uB610\uB294 \`cssVar('${m.cssVarExample}')\` \u2192 \`var(--${m.prefix}-...)\`. \uCE74\uD14C\uACE0\uB9AC: bg / text / border / icon / surface / overlay / service
|
|
595
|
+
- **\uD0C0\uC774\uD3EC**: \`textStyle('${m.textStyleExample}')\` \u2192 \uC778\uB77C\uC778 \uC2A4\uD0C0\uC77C\uC5D0 spread
|
|
596
|
+
- **\uADF8\uB9BC\uC790**: \`shadow['${m.shadowExample}']\`
|
|
597
|
+
- **\uC778\uD130\uB799\uC158**(hover/press): overlay \uD1A0\uD070 \u2014 \`color.overlay['hover-a']\` / \`color.overlay['press-a']\`
|
|
598
|
+
- **\uAC04\uACA9\xB7\uB77C\uC6B4\uB4DC**: \uC804\uC6A9 \uD1A0\uD070 \uC5C6\uC74C \u2014 \uC77C\uAD00\uB41C \uC2A4\uCF00\uC77C(4\uC758 \uBC30\uC218 \uAD8C\uC7A5)\xB7\uC77C\uAD00\uB41C radius. \uC784\uC758\uAC12 \uB0A8\uBC1C \uAE08\uC9C0
|
|
599
|
+
- **\uD14C\uB9C8**: ${m.themeNote}
|
|
600
|
+
- \uAC12\uC740 \uD50C\uB7AB\uD3FC\uC774 \uB7F0\uD0C0\uC784\uC5D0 \`:root\`\uB85C \uC8FC\uC785\uD558\uACE0 \uB85C\uCEEC\uC740 \`bstage dev\`\uAC00 fallback \uC8FC\uC785 \u2192 \uAC1C\uBC1C \uC911\uC5D0\uB3C4 \uC2E4\uC81C \uD1A4\uC73C\uB85C \uBCF4\uC778\uB2E4. \uC815\uD655\uD55C \uD1A0\uD070 \uD0A4\uB294 \`node_modules/${m.pkg.split("/").slice(0, 2).join("/")}/dist/${m.prefix}/index.d.ts\` \uCC38\uC870
|
|
601
|
+
|
|
602
|
+
\uC790\uC138\uD55C \uC0AC\uC6A9\uBC95\uC740 SDK \uBB38\uC11C \`DESIGN_TOKENS.md\`(\`bstage docs\`)\uC640 \`bstage-template\` \uC2A4\uD0AC \uCC38\uACE0.`;
|
|
603
|
+
}
|
|
604
|
+
function designGuideSection(target) {
|
|
605
|
+
const m = meta(target);
|
|
606
|
+
const pkgRoot = m.pkg.split("/").slice(0, 2).join("/");
|
|
607
|
+
return `UI \uC2A4\uD0C0\uC77C\uC740 \uC784\uC758 \uAC12 \uB300\uC2E0 **bstage \uB514\uC790\uC778 \uD1A0\uD070**\uB9CC \uC4F4\uB2E4. \uAC12\uC740 \uD50C\uB7AB\uD3FC\uC774 \uB7F0\uD0C0\uC784\uC5D0 \`:root\`\uB85C \uC8FC\uC785\uD558\uACE0, \uB85C\uCEEC \`bstage dev\`\uB294 fallback\uC744 \uC8FC\uC785\uD558\uBBC0\uB85C \uAC1C\uBC1C \uC911\uC5D0\uB3C4 \uC2E4\uC81C \uD1A4\uC73C\uB85C \uBCF4\uC778\uB2E4. **hex/rgb \uD558\uB4DC\uCF54\uB529 \uAE08\uC9C0.**
|
|
608
|
+
|
|
609
|
+
\`\`\`tsx
|
|
610
|
+
import { color, shadow, cssVar, textStyle } from '${m.pkg}'
|
|
611
|
+
|
|
612
|
+
<div
|
|
613
|
+
style={{
|
|
614
|
+
background: color.bg.base,
|
|
615
|
+
color: ${m.colorExample}, // = 'var(--${m.prefix}-mode-text-...)'
|
|
616
|
+
boxShadow: shadow['${m.shadowExample}'],
|
|
617
|
+
...textStyle('${m.textStyleExample}'), // fontSize/lineHeight/fontWeight/letterSpacing
|
|
618
|
+
}}
|
|
619
|
+
/>
|
|
620
|
+
\`\`\`
|
|
621
|
+
|
|
622
|
+
- **\uC0C9**: \`color.<category>.<name>\` \uC911\uCCA9 \uD2B8\uB9AC, \uB610\uB294 \uD0C0\uC785 \uC548\uC804 \`cssVar('${m.cssVarExample}')\`. \uCE74\uD14C\uACE0\uB9AC: bg / text / border / icon / surface / overlay / service
|
|
623
|
+
- **\uD0C0\uC774\uD3EC**: \`textStyle('{size}/{role}/{weight}')\` \u2192 \uC778\uB77C\uC778 \uC2A4\uD0C0\uC77C \uAC1D\uCCB4(spread). \uC815\uD655\uD55C \uD0A4\uB294 \uD0C0\uC785 \uD655\uC778
|
|
624
|
+
- **\uADF8\uB9BC\uC790**: \`shadow['<name>']\`
|
|
625
|
+
- **\uC778\uD130\uB799\uC158**: hover/press\uB294 overlay \uD1A0\uD070\uC744 \uC704\uC5D0 \uC5B9\uB294\uB2E4 \u2014 \`color.overlay['hover-a']\`, \`color.overlay['press-a']\`
|
|
626
|
+
- **\uAC04\uACA9\xB7\uB77C\uC6B4\uB4DC**: \uC804\uC6A9 \uD1A0\uD070 \uC5C6\uC74C \u2014 \uC77C\uAD00\uB41C \uC2A4\uCF00\uC77C(4\uC758 \uBC30\uC218)\xB7\uC77C\uAD00\uB41C radius\uB97C \uC4F0\uACE0 \uC784\uC758\uAC12\uC744 \uB0A8\uBC1C\uD558\uC9C0 \uC54A\uB294\uB2E4
|
|
627
|
+
- **\uD14C\uB9C8**: ${m.themeNote}
|
|
628
|
+
- **\uC815\uD655\uD55C \uD1A0\uD070 \uBAA9\uB85D(SSOT)**: \`node_modules/${pkgRoot}/dist/${m.prefix}/index.d.ts\`. \uC0AC\uC6A9 \uAC00\uC774\uB4DC\uB294 SDK \uBB38\uC11C \`DESIGN_TOKENS.md\`(\`bstage docs\`). \uAE30\uC5B5\uC5D0 \uC758\uC874\uD574 \uD1A0\uD070\uBA85\uC744 \uCD94\uCE21\uD558\uC9C0 \uC54A\uB294\uB2E4`;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
// src/skills/template.ts
|
|
632
|
+
function templateSkillMd(target = "user") {
|
|
633
|
+
return `---
|
|
634
|
+
name: bstage-template
|
|
635
|
+
description: b.stage \uC11C\uB4DC\uD30C\uD2F0 \uD15C\uD50C\uB9BF\uC744 \uC791\uC131\xB7\uC218\uC815\uD55C\uB2E4. \uC0C8 \uD15C\uD50C\uB9BF\uC744 \uB9CC\uB4E4\uAC70\uB098, createTemplate\xB7\uC2AC\uB86F\xB7\uD50C\uB7AB\uD3FC \uC774\uBCA4\uD2B8\xB7\uB2E4\uAD6D\uC5B4\xB7API \uD638\uCD9C\uC744 \uB2E4\uB8E8\uAC70\uB098, "\uD15C\uD50C\uB9BF \uCD94\uAC00/\uAC1C\uBC1C", "bstage \uC704\uC82F \uB9CC\uB4E4\uC5B4\uC918" \uAC19\uC740 \uC694\uCCAD\uC744 \uBC1B\uC744 \uB54C \uC0AC\uC6A9\uD55C\uB2E4.
|
|
636
|
+
---
|
|
637
|
+
|
|
638
|
+
# \uC5ED\uD560
|
|
639
|
+
|
|
640
|
+
\uC774 \uD504\uB85C\uC81D\uD2B8\uC5D0\uC11C b.stage \uD15C\uD50C\uB9BF\uC744 \uC791\uC131\uD55C\uB2E4. \uC791\uC131\uD55C React \uCEF4\uD3EC\uB10C\uD2B8\uB294 SDK\uAC00 Web Component\uB85C \uBE4C\uB4DC\uD574 \uD50C\uB7AB\uD3FC\uC5D0 \uB9C8\uC6B4\uD2B8\uD55C\uB2E4. \uC774 \uC2A4\uD0AC\uC740 **\uBAA9\uD45C\uC9C0\uD5A5 \uC808\uCC28 + \uD568\uC815**\uB9CC \uB2F4\uB294\uB2E4. \uC815\uD655\uD55C \uC2DC\uADF8\uB2C8\uCC98\uB294 \uD56D\uC0C1 \uC124\uCE58\uB41C docs/\uD0C0\uC785\uC744 SSOT\uB85C \uBCF8\uB2E4.
|
|
641
|
+
|
|
642
|
+
# \uAD8C\uC704 \uC788\uB294 \uCD9C\uCC98 (\uBA3C\uC800 \uC77D\uAE30)
|
|
643
|
+
|
|
644
|
+
\uCD94\uCE21\uD558\uC9C0 \uB9D0\uACE0 \uC124\uCE58\uB41C \uD328\uD0A4\uC9C0\uB97C \uBCF8\uB2E4. \uC678\uBD80 \uAC80\uC0C9\uBCF4\uB2E4 \uC2E0\uB8B0\uD560 \uC218 \uC788\uB2E4.
|
|
645
|
+
|
|
646
|
+
- \`node_modules/@bstage-sdk/core/docs/\` \u2014 GETTING_STARTED, API_REFERENCE, SLOT_*, I18N, BUILD_SYSTEM, DEV_SERVER, DESIGN_TOKENS, SDK_ARCHITECTURE
|
|
647
|
+
- \uD0C0\uC785: \`node_modules/@bstage-sdk/react/dist/*.d.ts\`, \`node_modules/@bstage-sdk/core/dist/*.d.ts\`
|
|
648
|
+
- \uD504\uB85C\uC81D\uD2B8 \uADDC\uCE59: \uB808\uD3EC \uB8E8\uD2B8\uC758 \`AGENTS.md\`
|
|
649
|
+
- \uBB38\uC11C \uBAA9\uB85D: \`npx bstage docs\`
|
|
650
|
+
|
|
651
|
+
# \uC808\uCC28
|
|
652
|
+
|
|
653
|
+
## 1. \uC0C8 \uD15C\uD50C\uB9BF \uCD94\uAC00
|
|
654
|
+
|
|
655
|
+
\uD398\uC774\uC9C0\uB294 \`src/pages/{\uACBD\uB85C}/template.tsx\`(\uD3F4\uB354 \uAD6C\uC870\uAC00 \uACE7 \uBC30\uD3EC \uACBD\uB85C), \uC704\uC82F\uC740 \`src/slots/{\uC544\uBB34 \uC774\uB984}/template.tsx\` + \`slot\` \uC635\uC158\uC73C\uB85C \uB9CC\uB4E0\uB2E4. \uD30C\uC77C\uBA85\uC740 \uBC18\uB4DC\uC2DC \`template.tsx\`(\uB77C\uC6B0\uD305\xB7\uBE4C\uB4DC\uAC00 \uC774 \uCEE8\uBCA4\uC158\uC73C\uB85C \uBC1C\uACAC). \`name\`\uC740 Custom Element \uD0DC\uADF8\uB85C \uADF8\uB300\uB85C \uC4F0\uC774\uBBC0\uB85C **\uC18C\uBB38\uC790 \uC2DC\uC791 + \uD558\uC774\uD508 1\uAC1C \uC774\uC0C1 + \uC18C\uBB38\uC790\xB7\uC22B\uC790\xB7\uD558\uC774\uD508\uB9CC**.
|
|
656
|
+
|
|
657
|
+
\`\`\`tsx
|
|
658
|
+
import { createTemplate } from '@bstage-sdk/react'
|
|
659
|
+
|
|
660
|
+
export default function MyWidget() {
|
|
661
|
+
return <div>...</div>
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
createTemplate(MyWidget, { name: 'my-widget' }) // \uD3F4\uB354\uBA85\uACFC \uB3D9\uC77C, \uD558\uC774\uD508 \uD544\uC218
|
|
665
|
+
\`\`\`
|
|
666
|
+
|
|
667
|
+
## 2. \uAE30\uB2A5\uBCC4 \uD6C5 (\uC2DC\uADF8\uB2C8\uCC98\uB294 API_REFERENCE.md / .d.ts \uD655\uC778)
|
|
668
|
+
|
|
669
|
+
- **\uD50C\uB7AB\uD3FC \uB124\uBE44\uAC8C\uC774\uC158**: \`useNavigation()\` \u2014 \`navigate\`/\`goBack\`/\`openExternal\`
|
|
670
|
+
- **\uD50C\uB7AB\uD3FC \uC774\uBCA4\uD2B8**: \`useBstageContext()\`\uC758 \`bridge\`\uB85C \`emit\`(\uD15C\uD50C\uB9BF\u2192\uD50C\uB7AB\uD3FC), \uAD6C\uB3C5\uC740 \`usePlatformEvent()\`(\uD50C\uB7AB\uD3FC\u2192\uD15C\uD50C\uB9BF)
|
|
671
|
+
- **API \uD638\uCD9C**: \`shared/client.ts\`\uC758 \`client\` \uC778\uC2A4\uD134\uC2A4\uB97C import\uD574 \uC9C1\uC811 \uD638\uCD9C(\`client.get<T>(...)\`). \`BstageClient\`\uB294 \uC778\uC99D fetch\xB7\uAC8C\uC774\uD2B8\uC6E8\uC774 base URL\uC744 \uC2A4\uC2A4\uB85C \uD574\uC11D\uD558\uBBC0\uB85C \uBCC4\uB3C4 \uBC30\uC120\uC774 \uD544\uC694 \uC5C6\uB2E4. **\uACBD\uB85C\xB7\uC751\uB2F5 \uBAA8\uC591\uC740 SDK\uAC00 \uB4E4\uACE0 \uC788\uC9C0 \uC54A\uB2E4** \u2014 \uAC8C\uC774\uD2B8\uC6E8\uC774 API Reference Doc\uC774 \uCD9C\uCC98\uC774\uACE0, \uC751\uB2F5 \uD0C0\uC785\uC740 \uC81C\uB124\uB9AD\uC73C\uB85C \uBA85\uC2DC\uD55C\uB2E4(\uC0DD\uB7B5\uD558\uBA74 \`unknown\`). **\uC720\uC800\uB2E8 API\uB9CC \uC9C0\uC6D0.** **\uC5B4\uB4DC\uBBFC\uC6A9 API\uB294 \uBBF8\uC9C0\uC6D0 \u2014 \uD544\uC694\uD558\uBA74 \uACBD\uB85C\uB97C \uCD94\uCE21\uD558\uC9C0 \uB9D0\uACE0 \uBC18\uB4DC\uC2DC \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uBA3C\uC800 \uD655\uC778\uD560 \uAC83.**
|
|
672
|
+
- **\uC2AC\uB86F context**: \`useSlotContext<Id>()\` \u2014 \uD638\uC2A4\uD2B8\uAC00 \uB9C8\uC6B4\uD2B8 \uC2DC 1\uD68C \uC804\uB2EC\uD558\uB294 read-only \uAC12
|
|
673
|
+
- **\uB2E4\uAD6D\uC5B4**: \uB85C\uCF00\uC77C \uD6C5(\`useLocale\`/\`useMessages\`/\`useBstageTranslations\`)\uC740 **\uBC18\uB4DC\uC2DC \`<BstageLocaleProvider>\` \uD558\uC704\uC5D0\uC11C** \uD638\uCD9C\uD55C\uB2E4(\uBC16\uC774\uBA74 throw). \uC720\uC800 \uD15C\uD50C\uB9BF\uC740 \`<BstageLocaleProvider>\`(target \uC0DD\uB7B5), \uC5B4\uB4DC\uBBFC\uC740 \`<BstageLocaleProvider target="admin">\`. \uC790\uCCB4 \uBB38\uAD6C\uB294 \`useMessages\`(\uC900\uBE44 \uBD88\uD544\uC694). \uD50C\uB7AB\uD3FC \uACF5\uC6A9 \uBB38\uAD6C\uB97C \uC4F0\uB824\uBA74 **\uBA3C\uC800 \`bstage i18n pull\`\uC744 \uC2E4\uD589**\uD574 \uBC88\uC5ED \uD0A4\xB7\uD0C0\uC785\xB7\uB85C\uCEEC \uCE90\uC2DC(\`.bstage/i18n\`)\uB97C \uB9CC\uB4E0 \uB4A4 \`useBstageTranslations\`\uB97C \uC4F4\uB2E4 \u2014 \uC548 \uD558\uBA74 \uB85C\uCEEC dev\uC5D0\uC11C \uBC88\uC5ED\uC774 \uC548 \uB728\uACE0 \uD0A4\uB3C4 \uC54C \uC218 \uC5C6\uB2E4. **\uC720\uC800 \uC2AC\uB86F \uD15C\uD50C\uB9BF\uC740 \`--target user\`(\uAE30\uBCF8, Bxxxxx), \uC5B4\uB4DC\uBBFC \uC2AC\uB86F \uD15C\uD50C\uB9BF\uC740 \`--target admin\`(Axxxxx)** \u2014 Provider \`target\`\uACFC \uAC19\uC740 \uCD95. \uD604\uC7AC \uC5B8\uC5B4\uB9CC \uD544\uC694\uD558\uBA74 \`useLocale\`. \uC0C1\uC138 \uC6CC\uD06C\uD50C\uB85C\uB294 I18N.md
|
|
674
|
+
- **\uB2E4\uAD6D\uC5B4 \uBB38\uAD6C \uBC30\uBD84 (\uC791\uC5C5 \uC804 \uACB0\uC815)**: "\uB2E4\uAD6D\uC5B4 \uCC98\uB9AC\uD574\uC918" \uB958 \uC694\uCCAD\uC744 \uBC1B\uC73C\uBA74 \uC804\uBD80 \`useMessages\`\uB85C \uB9CC\uB4E4\uC9C0 \uB9D0\uACE0, **\uD50C\uB7AB\uD3FC \uD0A4 \uB300\uC870\uBD80\uD130** \uD55C\uB2E4 \u2014 \`bstage i18n pull\` \uC2E4\uD589 \u2192 \uC0DD\uC131\uB41C \`src/bstage-i18n.ts\`\uC5D0\uC11C \uB300\uC0C1 \uBB38\uAD6C\uC758 \uC6D0\uBB38 \uAC80\uC0C9 \u2192 \uB9E4\uCE6D\uB418\uB294 \uD0A4\uAC00 \uC788\uC73C\uBA74 \uACF5\uC6A9 \uD0A4(\`useBstageTranslations\`), \uC5C6\uB294 \uBB38\uAD6C\uB9CC \`useMessages\`\uC5D0 \uCD94\uAC00. \uC800\uC7A5\xB7\uCDE8\uC18C\xB7\uC801\uC6A9\uD558\uAE30 \uAC19\uC740 \uACF5\uC6A9 UI \uB77C\uBCA8\uC740 \uB300\uBD80\uBD84 \uD50C\uB7AB\uD3FC \uD0A4\uAC00 \uC774\uBBF8 \uC788\uB2E4. \uACF5\uC6A9 \uD0A4\uAC00 \uC788\uB294 \uBB38\uAD6C\uB97C \`useMessages\`\uC5D0 \uBCF5\uC0AC\uD574 \uB36E\uC5B4\uC4F0\uBA74 \uD50C\uB7AB\uD3FC \uBC88\uC5ED \uC218\uC815\uC774 \uD15C\uD50C\uB9BF\uC5D0 \uBC18\uC601\uB418\uC9C0 \uC54A\uB294\uB2E4(\uD63C\uC6A9 \uD328\uD134\uC740 I18N.md).
|
|
675
|
+
|
|
676
|
+
## 3. \uB514\uC790\uC778 \uD1A0\uD070 (\uC0C9\xB7\uD0C0\uC774\uD3EC\xB7\uADF8\uB9BC\uC790)
|
|
677
|
+
|
|
678
|
+
${designGuideSection(target)}
|
|
679
|
+
|
|
680
|
+
## 4. \uB85C\uCEEC \uC2E4\uD589 / \uBE4C\uB4DC
|
|
681
|
+
|
|
682
|
+
- \`npm run dev\` \u2014 \uC778\uC99D \uD504\uB85D\uC2DC \uD3EC\uD568 \uAC1C\uBC1C \uC11C\uBC84. \uB85C\uADF8\uC778: http://localhost:5173/__bstage__/login
|
|
683
|
+
- \uC0B0\uCD9C\uBB3C \uD655\uC778: \`npx bstage build\` \u2192 \uD398\uC774\uC9C0\uB294 \`dist/{\uACBD\uB85C}/template.js\`, \uC704\uC82F\uC740 \`dist/{\uC2AC\uB86F id}/template.js\` (\uBC30\uD3EC\uB294 \`bstage deploy\` \u2014 bstage-deploy \uC2A4\uD0AC \uCC38\uC870)
|
|
684
|
+
|
|
685
|
+
# \uD568\uC815 (SDK \uC124\uACC4 \uC81C\uC57D \u2014 \uC5B4\uAE30\uBA74 \uB7F0\uD0C0\uC784\xB7\uBE4C\uB4DC\uAC00 \uAE68\uC9D0)
|
|
686
|
+
|
|
687
|
+
- **CSS\uB294 Shadow DOM \uC548\uC73C\uB85C \uB123\uC5B4\uC57C \uD55C\uB2E4**: \uD15C\uD50C\uB9BF\uC740 Shadow DOM\uC5D0 \uB9C8\uC6B4\uD2B8\uB41C\uB2E4. **\`import './style.css'\`\uB294 \uBC30\uD3EC \uC0B0\uCD9C\uBB3C\uC5D0\uC11C \uC870\uC6A9\uD788 \uC0AC\uB77C\uC9C4\uB2E4** \u2014 \uB85C\uCEEC \uAC1C\uBC1C \uD654\uBA74\uC5D0\uC11C\uB294 \uC801\uC6A9\uB418\uBBC0\uB85C "\uB85C\uCEEC\uC5D0\uC120 \uB418\uB294\uB370 \uBC30\uD3EC\uD558\uBA74 \uC2A4\uD0C0\uC77C\uC774 \uC5C6\uB2E4"\uB85C \uB098\uD0C0\uB09C\uB2E4. \uC4F8 \uC218 \uC788\uB294 \uAC74 \uB458\uBFD0\uC774\uB2E4: \u2460 \`createTemplate\`\uC758 \`styles\` \uC635\uC158(\`import css from './x.css?inline'\`) \u2461 \uCEF4\uD3EC\uB10C\uD2B8 \uC548 \`<style>{cssText}</style>\`. inline \`style={{}}\`\uB3C4 \uBB3C\uB860 \uB41C\uB2E4. \uC804\uC5ED CSS(\`<link>\`)\uB294 \uAE08\uC9C0.
|
|
688
|
+
- **IIFE \uB2E8\uC77C \uBC88\uB4E4**: \uBC88\uB4E4\uC740 \uD56D\uC0C1 \uB2E8\uC77C IIFE. \uCF54\uB4DC \uC2A4\uD50C\uB9BF\xB7\uB3D9\uC801 \`import()\` \uBD88\uAC00.
|
|
689
|
+
- **\`__bstage_fetch__\` \uACC4\uC57D**: \uD50C\uB7AB\uD3FC\uC774 \uC778\uC99D fetch\uB97C \uC804\uC5ED\uC73C\uB85C \uC8FC\uC785\uD55C\uB2E4. \`BstageClient\`\uAC00 \uC774\uB97C \uC6B0\uC120 \uC0AC\uC6A9\uD558\uBBC0\uB85C, fetch \uACBD\uB85C\uB97C \uC6B0\uD68C\uD558\uC9C0 \uB9D0 \uAC83.
|
|
690
|
+
- **\`slot.context\`\uB294 \uB2E8\uBC29\uD5A5\xB7read-only**: \uD638\uC2A4\uD2B8\u2192\uC704\uC82F 1\uD68C \uC804\uB2EC. \uC704\uC82F\uC774 \uB418\uB3CC\uB824 \uC4F0\uC9C0 \uC54A\uB294\uB2E4.
|
|
691
|
+
- **\`createTemplate()\` \uD638\uCD9C \uD615\uD0DC \uC720\uC9C0**: \uBE4C\uB4DC \uD30C\uC774\uD504\uB77C\uC778\uC774 \uC18C\uC2A4\uC5D0\uC11C \`createTemplate(\` \uD638\uCD9C\uC744 \uD30C\uC2F1\uD574 \uBA54\uD0C0\uB370\uC774\uD130\uB97C \uBF51\uB294\uB2E4. \uC778\uC790 \uAD6C\uC870\uB97C \uC784\uC758 \uBCC0\uD615\uD558\uBA74 \uD30C\uC2F1 \uC2E4\uD328.
|
|
692
|
+
|
|
693
|
+
# \uD558\uC9C0 \uB9D0 \uAC83
|
|
694
|
+
|
|
695
|
+
- \`src/main.tsx\`\xB7\`src/App.tsx\` \uC218\uC815 (\uAC1C\uBC1C\uC6A9 \uC9C4\uC785\uC810\xB7\uBAA9\uB85D \uD654\uBA74, SDK\uAC00 \uAD00\uB9AC)
|
|
696
|
+
- \`customElements.define()\` / \`attachShadow\` \uC9C1\uC811 \uD638\uCD9C (createTemplate\uC774 \uCC98\uB9AC)
|
|
697
|
+
- \`@bstage-sdk/core\`\uC758 \`createWebComponent()\` \uC9C1\uC811 \uC0AC\uC6A9 \u2014 react \uD328\uD0A4\uC9C0 API\uB9CC
|
|
698
|
+
- UI \uC0C9\xB7\uD0C0\uC774\uD3EC\xB7\uADF8\uB9BC\uC790\uB97C hex/rgb\uB85C \uD558\uB4DC\uCF54\uB529 \u2014 \uB514\uC790\uC778 \uD1A0\uD070(\uC704 3\uBC88) \uC0AC\uC6A9
|
|
699
|
+
- \uC2DC\uADF8\uB2C8\uCC98\uB97C \uAE30\uC5B5\uC5D0 \uC758\uC874\uD574 \uCD94\uCE21 \u2014 \uC704 docs/.d.ts\uC5D0\uC11C \uD655\uC778
|
|
700
|
+
`;
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
// src/skills/registry.ts
|
|
704
|
+
var BSTAGE_SKILLS = [
|
|
705
|
+
{
|
|
706
|
+
name: "bstage-onboarding",
|
|
707
|
+
kinds: ["sdk", "liquid"],
|
|
708
|
+
content: () => withStamp(onboardingSkillMd())
|
|
709
|
+
},
|
|
710
|
+
{
|
|
711
|
+
name: "bstage-template",
|
|
712
|
+
kinds: ["sdk"],
|
|
713
|
+
content: ({ target }) => withStamp(templateSkillMd(target))
|
|
714
|
+
},
|
|
715
|
+
{ name: "bstage-liquid", kinds: ["liquid"], content: () => withStamp(liquidSkillMd()) },
|
|
716
|
+
{ name: "bstage-deploy", kinds: ["sdk", "liquid"], content: () => withStamp(deploySkillMd()) },
|
|
717
|
+
{ name: "bstage-migrate", kinds: ["sdk", "liquid"], content: () => withStamp(migrateSkillMd()) }
|
|
718
|
+
];
|
|
719
|
+
function skillsFor(kind) {
|
|
720
|
+
return BSTAGE_SKILLS.filter((s) => s.kinds.includes(kind));
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
// src/agents/agentsMdRegion.ts
|
|
724
|
+
var AGENTS_MANAGED_VERSION = 13;
|
|
725
|
+
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
|
+
var END_MARKER = `<!-- BSTAGE:MANAGED:END -->`;
|
|
727
|
+
var START_TOKEN = "BSTAGE:MANAGED:START";
|
|
728
|
+
var END_TOKEN = "BSTAGE:MANAGED:END";
|
|
729
|
+
var COMMENT_OPEN = "<!--";
|
|
730
|
+
var COMMENT_CLOSE = "-->";
|
|
731
|
+
var WS_RE = /\s/;
|
|
732
|
+
function findMarker(content, token) {
|
|
733
|
+
let from = 0;
|
|
734
|
+
let close = -1;
|
|
735
|
+
for (; ; ) {
|
|
736
|
+
const open = content.indexOf(COMMENT_OPEN, from);
|
|
737
|
+
if (open < 0) return null;
|
|
738
|
+
const bodyStart = open + COMMENT_OPEN.length;
|
|
739
|
+
if (close < bodyStart) {
|
|
740
|
+
close = content.indexOf(COMMENT_CLOSE, bodyStart);
|
|
741
|
+
if (close < 0) return null;
|
|
742
|
+
}
|
|
743
|
+
let i = bodyStart;
|
|
744
|
+
while (i < close && WS_RE.test(content[i])) i++;
|
|
745
|
+
if (i + token.length <= close && content.startsWith(token, i)) {
|
|
746
|
+
return { start: open, end: close + COMMENT_CLOSE.length, tokenEnd: i + token.length };
|
|
747
|
+
}
|
|
748
|
+
from = bodyStart;
|
|
749
|
+
}
|
|
750
|
+
}
|
|
751
|
+
function readVersionAfterToken(content, tokenEnd, limit) {
|
|
752
|
+
let i = tokenEnd;
|
|
753
|
+
const wsStart = i;
|
|
754
|
+
while (i < limit && WS_RE.test(content[i])) i++;
|
|
755
|
+
if (i === wsStart) return 0;
|
|
756
|
+
if (!content.startsWith("v=", i)) return 0;
|
|
757
|
+
i += 2;
|
|
758
|
+
let d = i;
|
|
759
|
+
while (d < limit && content[d] >= "0" && content[d] <= "9") d++;
|
|
760
|
+
if (d === i) return 0;
|
|
761
|
+
return parseInt(content.slice(i, d), 10);
|
|
762
|
+
}
|
|
763
|
+
var FREE_REGION_NOTE = `<!-- \uC544\uB798\uB294 \uD504\uB85C\uC81D\uD2B8 \uC790\uC720 \uC601\uC5ED\uC785\uB2C8\uB2E4. SDK \uB9C8\uC774\uADF8\uB808\uC774\uC158\uC774 \uBCF4\uC874\uD569\uB2C8\uB2E4. \uC774 \uD504\uB85C\uC81D\uD2B8\uB9CC\uC758 \uADDC\uCE59\xB7\uCEE8\uD14D\uC2A4\uD2B8\uB97C \uC5EC\uAE30\uC5D0 \uC801\uC73C\uC138\uC694. -->`;
|
|
764
|
+
function wrapManaged(body) {
|
|
765
|
+
return `${START_MARKER}
|
|
766
|
+
${body}
|
|
767
|
+
${END_MARKER}`;
|
|
768
|
+
}
|
|
769
|
+
function freeRegionScaffold() {
|
|
770
|
+
return `${FREE_REGION_NOTE}
|
|
771
|
+
|
|
772
|
+
## \uD504\uB85C\uC81D\uD2B8 \uADDC\uCE59
|
|
773
|
+
|
|
774
|
+
<!-- \uC774 \uD504\uB85C\uC81D\uD2B8\uB9CC\uC758 \uADDC\uCE59\xB7\uCEE8\uD14D\uC2A4\uD2B8\uB97C \uC5EC\uAE30\uC5D0 \uC791\uC131\uD558\uC138\uC694. -->
|
|
775
|
+
`;
|
|
776
|
+
}
|
|
777
|
+
function readManagedVersion(content) {
|
|
778
|
+
const m = findMarker(content, START_TOKEN);
|
|
779
|
+
if (!m) return null;
|
|
780
|
+
return readVersionAfterToken(content, m.tokenEnd, m.end - COMMENT_CLOSE.length);
|
|
781
|
+
}
|
|
782
|
+
function agentsMdStatus(content) {
|
|
783
|
+
const v = readManagedVersion(content);
|
|
784
|
+
if (v === null) return "legacy";
|
|
785
|
+
return v < AGENTS_MANAGED_VERSION ? "stale" : "ok";
|
|
786
|
+
}
|
|
787
|
+
function swapManagedBlock(existing, newWrappedBlock) {
|
|
788
|
+
const s = findMarker(existing, START_TOKEN);
|
|
789
|
+
const e = findMarker(existing, END_TOKEN);
|
|
790
|
+
if (!s || !e) return null;
|
|
791
|
+
const startIdx = s.start;
|
|
792
|
+
const endIdx = e.end;
|
|
793
|
+
if (endIdx <= startIdx) return null;
|
|
794
|
+
return existing.slice(0, startIdx) + newWrappedBlock + existing.slice(endIdx);
|
|
795
|
+
}
|
|
796
|
+
function parseAgentsIdentity(content) {
|
|
797
|
+
const space = /\*\*Space\*\*:\s*([A-Za-z0-9-]+)/.exec(content)?.[1];
|
|
798
|
+
const projectName = /\*\*레포\*\*:\s*`([^`]+)`/.exec(content)?.[1];
|
|
799
|
+
return { space, projectName };
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
// src/agents/agentsMd.ts
|
|
803
|
+
function deploySection() {
|
|
804
|
+
return `## \uBC30\uD3EC
|
|
805
|
+
|
|
806
|
+
- \uD3EC\uD138\uC740 **\uC6D0\uACA9 \uC800\uC7A5\uC18C \uAE30\uBCF8 \uBE0C\uB79C\uCE58\uC5D0 push\uB41C \uCEE4\uBC0B**\uC744 \uBE4C\uB4DC\uD55C\uB2E4. \uB85C\uCEEC \uC0B0\uCD9C\uBB3C\uC744 \uC62C\uB9AC\uB294 \uAC83\uC774 \uC544\uB2C8\uBBC0\uB85C, \uCEE4\uBC0B\xB7push\uD558\uC9C0 \uC54A\uC740 \uBCC0\uACBD\uC740 \uBC18\uC601\uB418\uC9C0 \uC54A\uB294\uB2E4.
|
|
807
|
+
- \uBC30\uD3EC\uB294 \`bstage deploy\` \u2014 \uBE4C\uB4DC \uD2B8\uB9AC\uAC70 \u2192 \uC644\uB8CC \uB300\uAE30 \u2192 \uC774 \uB808\uD3EC\uC758 \uBC30\uCE58\uC5D0 \uC801\uC6A9\uAE4C\uC9C0 \uD55C \uBC88\uC5D0 \uD55C\uB2E4.
|
|
808
|
+
- \uBC30\uCE58(\uD398\uC774\uC9C0) \uC0DD\uC131\uACFC \uB808\uD3EC \uC5F0\uACB0\uC740 **\uD3EC\uD138 \uD654\uBA74\uC5D0\uC11C\uB9CC** \uAC00\uB2A5\uD558\uB2E4. \`bstage list\`\uC5D0 \uBC30\uCE58\uAC00 0\uAC74\uC774\uBA74 \uD654\uBA74\uC5D0\uC11C \uBA3C\uC800 \uB9CC\uB4E0\uB2E4.
|
|
809
|
+
- \uB864\uBC31(\`bstage rollback\`)\xB7\uAC8C\uC2DC \uB044\uAE30(\`bstage publish off\`)\xB7\uC2E4\uD328 \uB300\uC751\xB7CI \uC0AC\uC6A9\uC740 \`bstage-deploy\` \uC2A4\uD0AC\uC744 \uB530\uB978\uB2E4.`;
|
|
810
|
+
}
|
|
811
|
+
function agentsManagedBody({
|
|
812
|
+
space,
|
|
813
|
+
projectName,
|
|
814
|
+
target = "user",
|
|
815
|
+
kind = "sdk"
|
|
816
|
+
}) {
|
|
817
|
+
assertSingleLine({ space, projectName });
|
|
818
|
+
if (kind === "liquid") return liquidManagedBody(space, projectName);
|
|
819
|
+
return sdkManagedBody(space, projectName, target);
|
|
820
|
+
}
|
|
821
|
+
function assertSingleLine(values) {
|
|
822
|
+
for (const [key, value] of Object.entries(values)) {
|
|
823
|
+
if (/[\r\n]/.test(value)) throw new Error(`AGENTS.md \uC815\uCCB4\uC131 \uAC12\uC5D0 \uAC1C\uD589\uC774 \uC788\uC2B5\uB2C8\uB2E4: ${key}`);
|
|
824
|
+
}
|
|
825
|
+
}
|
|
826
|
+
function sdkManagedBody(space, projectName, target) {
|
|
827
|
+
const structureBlock = `src/
|
|
828
|
+
main.tsx \u2014 App \uB9C8\uC6B4\uD2B8\uB9CC (\uC218\uC815 \uBD88\uD544\uC694)
|
|
829
|
+
App.tsx \u2014 import.meta.glob \uAE30\uBC18 \uAC1C\uBC1C\uC6A9 \uBAA9\uB85D\xB7\uB77C\uC6B0\uD305 (\uC218\uC815 \uBD88\uD544\uC694)
|
|
830
|
+
shared/
|
|
831
|
+
client.ts \u2014 BstageClient \uC778\uC2A4\uD134\uC2A4 (API \uD0A4\uB294 .env\uC5D0\uC11C \uC8FC\uC785). \uC720\uC800\uB2E8 API\uB9CC \uC9C0\uC6D0
|
|
832
|
+
pages/
|
|
833
|
+
{\uACBD\uB85C}/
|
|
834
|
+
template.tsx \u2014 \uD398\uC774\uC9C0 (\uD3F4\uB354 \uAD6C\uC870\uAC00 \uACE7 \uBC30\uD3EC \uACBD\uB85C)
|
|
835
|
+
slots/
|
|
836
|
+
{\uC544\uBB34 \uC774\uB984}/
|
|
837
|
+
template.tsx \u2014 \uC704\uC82F (createTemplate\uC758 slot \uC635\uC158\uC774 \uC790\uB9AC\uB97C \uC815\uD568)
|
|
838
|
+
.env \u2014 VITE_BSTAGE_PHASE + API \uD0A4 (\uCEE4\uBC0B \uC548 \uB428, .gitignore)
|
|
839
|
+
.env.example \u2014 \uC704 \uD56D\uBAA9 placeholder (\uCEE4\uBC0B\uB428 \u2014 \uBCF5\uC0AC\uD574\uC11C .env \uC0DD\uC131)
|
|
840
|
+
vite.config.ts \u2014 Vite + bstageDevPlugin (phase\uB294 .env\uC5D0\uC11C \uC77D\uC74C)`;
|
|
841
|
+
const envSection = `\`.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
|
+
\`\`\`
|
|
844
|
+
VITE_BSTAGE_PHASE=dev # dev | qa | real | sandbox
|
|
845
|
+
\`\`\``;
|
|
846
|
+
const commandsSection = `- \`npm run dev\` \u2014 \uAC1C\uBC1C \uC11C\uBC84 \uC2E4\uD589 (\uC778\uC99D \uD504\uB85D\uC2DC \uD3EC\uD568)
|
|
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.
|
|
849
|
+
- \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
|
+
return `# AGENTS.md
|
|
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
|
|
860
|
+
|
|
861
|
+
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
|
+
|
|
863
|
+
\`\`\`
|
|
864
|
+
node_modules/@bstage-sdk/core/docs/
|
|
865
|
+
\u251C\u2500\u2500 GETTING_STARTED.md \u2014 \uBE60\uB978 \uC2DC\uC791 \uAC00\uC774\uB4DC
|
|
866
|
+
\u251C\u2500\u2500 API_REFERENCE.md \u2014 createTemplate, hooks, BstageClient, PlatformBridge API
|
|
867
|
+
\u251C\u2500\u2500 I18N.md \u2014 \uB2E4\uAD6D\uC5B4 \uD6C5 + bstage i18n pull (\uBC88\uC5ED \uCF54\uB4DC\uC820) \uC6CC\uD06C\uD50C\uB85C
|
|
868
|
+
\u251C\u2500\u2500 DESIGN_TOKENS.md \u2014 \uB514\uC790\uC778 \uD1A0\uD070 (\uC0C9\xB7\uD0C0\uC774\uD3EC\xB7\uADF8\uB9BC\uC790) \uC0AC\uC6A9 \uAC00\uC774\uB4DC
|
|
869
|
+
\u251C\u2500\u2500 SLOT_PROTOCOL.md \u2014 \uC2AC\uB86F \uC2DC\uC2A4\uD15C v1 \uD504\uB85C\uD1A0\uCF5C (3-part \uD0A4\xB7context \uB2E8\uBC29\uD5A5)
|
|
870
|
+
\u251C\u2500\u2500 SLOT_CATALOG.md \u2014 \uC2AC\uB86F \uBAA9\uB85D, \uC774\uBCA4\uD2B8 \uC778\uD130\uD398\uC774\uC2A4, resourceId \uC758\uBBF8
|
|
871
|
+
\u251C\u2500\u2500 SLOT_SYSTEM.md \u2014 \uC2AC\uB86F \uC2DC\uC2A4\uD15C \uC124\uACC4, \uB7F0\uD0C0\uC784 \uD750\uB984
|
|
872
|
+
\u251C\u2500\u2500 BUILD_SYSTEM.md \u2014 \uBE4C\uB4DC \uD30C\uC774\uD504\uB77C\uC778, \uC0B0\uCD9C\uBB3C \uACBD\uB85C \uADDC\uCE59
|
|
873
|
+
\u251C\u2500\u2500 DEV_SERVER.md \u2014 \uB85C\uCEEC \uAC1C\uBC1C \uC11C\uBC84, \uC778\uC99D \uD504\uB85D\uC2DC
|
|
874
|
+
\u251C\u2500\u2500 MIGRATION.md \u2014 \uBC84\uC804 \uC0AC\uC774 \uB9C8\uC774\uADF8\uB808\uC774\uC158 \uAC00\uC774\uB4DC (bstage doctor \uC5F0\uACC4)
|
|
875
|
+
\u2514\u2500\u2500 SDK_ARCHITECTURE.md \u2014 \uD328\uD0A4\uC9C0 \uAD6C\uC870, \uC124\uACC4 \uACB0\uC815
|
|
876
|
+
\`\`\`
|
|
877
|
+
|
|
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
|
+
## \uD504\uB85C\uC81D\uD2B8 \uAD6C\uC870
|
|
881
|
+
|
|
882
|
+
\`\`\`
|
|
883
|
+
${structureBlock}
|
|
884
|
+
\`\`\`
|
|
885
|
+
|
|
886
|
+
## \uD15C\uD50C\uB9BF \uAC1C\uBC1C \uADDC\uCE59
|
|
887
|
+
|
|
888
|
+
### \uC0C8 \uD15C\uD50C\uB9BF \uCD94\uAC00
|
|
889
|
+
|
|
890
|
+
\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
|
+
|
|
892
|
+
- **\uD398\uC774\uC9C0** \u2014 \`src/pages/{\uACBD\uB85C}/template.tsx\`. **\uD3F4\uB354 \uAD6C\uC870\uAC00 \uACE7 \uBC30\uD3EC \uACBD\uB85C**\uB2E4(\`src/pages/settings/custom/\` \u2192 \`/settings/custom\`). \uB3D9\uC801 \uACBD\uB85C(\`[id]\`)\uB294 \uC544\uC9C1 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294\uB2E4.
|
|
893
|
+
- **\uC704\uC82F** \u2014 \`src/slots/{\uC544\uBB34 \uC774\uB984}/template.tsx\` + \`createTemplate\`\uC5D0 \`slot\` \uC635\uC158. \uD3F4\uB354 \uC774\uB984\uC740 \uBC30\uCE58\uC5D0 \uC4F0\uC774\uC9C0 \uC54A\uACE0, \uC5B4\uB290 \uC790\uB9AC\uC5D0 \uBD99\uC744\uC9C0\uB294 \`slot\`\uB9CC \uC815\uD55C\uB2E4.
|
|
894
|
+
|
|
895
|
+
\`name\`\uC740 Custom Element \uD0DC\uADF8\uB85C \uADF8\uB300\uB85C \uC0AC\uC6A9\uB41C\uB2E4. Custom Element \uC2A4\uD399\uC0C1 **\uC18C\uBB38\uC790\uB85C \uC2DC\uC791 + \uD558\uC774\uD508 1\uAC1C \uC774\uC0C1 + \uC18C\uBB38\uC790\xB7\uC22B\uC790\xB7\uD558\uC774\uD508\uB9CC** \uD5C8\uC6A9. \uC704\uBC18 \uC2DC \uB7F0\uD0C0\uC784\xB7\uBE4C\uB4DC\uAC00 \uAC70\uBD80\uD55C\uB2E4.
|
|
896
|
+
|
|
897
|
+
\`\`\`
|
|
898
|
+
src/pages/welcome/template.tsx \u2192 /welcome
|
|
899
|
+
src/pages/settings/custom/template.tsx \u2192 /settings/custom
|
|
900
|
+
src/slots/curation-banner/template.tsx \u2192 slot \uC635\uC158\uC774 \uC790\uB9AC\uB97C \uC815\uD568
|
|
901
|
+
\`\`\`
|
|
902
|
+
|
|
903
|
+
### template.tsx \uD544\uC218 \uAD6C\uC870
|
|
904
|
+
|
|
905
|
+
\`\`\`tsx
|
|
906
|
+
import { createTemplate } from '@bstage-sdk/react'
|
|
907
|
+
|
|
908
|
+
// \uCEF4\uD3EC\uB10C\uD2B8\uB294 \uBC18\uB4DC\uC2DC export default
|
|
909
|
+
export default function MyWidget() {
|
|
910
|
+
return <div>...</div>
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
// createTemplate \uD638\uCD9C \uD544\uC218 \u2014 \uBE4C\uB4DC \uD30C\uC774\uD504\uB77C\uC778\uC774 \uC774 \uD638\uCD9C\uC744 \uD30C\uC2F1\uD558\uC5EC \uBA54\uD0C0\uB370\uC774\uD130 \uCD94\uCD9C
|
|
914
|
+
createTemplate(MyWidget, {
|
|
915
|
+
name: '${space}-my-widget', // \uD3F4\uB354\uBA85\uACFC \uB3D9\uC77C\uD574\uC57C \uD568. \uD558\uC774\uD508 \uD544\uC218.
|
|
916
|
+
})
|
|
917
|
+
\`\`\`
|
|
918
|
+
|
|
919
|
+
- \`name\`\uC740 \uD544\uC218 \u2014 \uD15C\uD50C\uB9BF \uD3F4\uB354\uBA85\uACFC \uC77C\uCE58, \uD558\uC774\uD508 \uD3EC\uD568
|
|
920
|
+
- \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
|
|
922
|
+
|
|
923
|
+
${designRulesBrief(target)}
|
|
924
|
+
|
|
925
|
+
## \uD658\uACBD \uC124\uC815
|
|
926
|
+
|
|
927
|
+
${envSection}
|
|
928
|
+
|
|
929
|
+
## \uBA85\uB839\uC5B4
|
|
930
|
+
|
|
931
|
+
${commandsSection}
|
|
932
|
+
|
|
933
|
+
## SDK \uC5C5\uB370\uC774\uD2B8 / \uB9C8\uC774\uADF8\uB808\uC774\uC158
|
|
934
|
+
|
|
935
|
+
\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:
|
|
936
|
+
|
|
937
|
+
- \`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).
|
|
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).
|
|
939
|
+
|
|
940
|
+
\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.
|
|
941
|
+
|
|
942
|
+
\uC774 \uD504\uB85C\uC81D\uD2B8\uC758 \`.claude/skills/\`\uC5D0\uB294 \uC5D0\uC774\uC804\uD2B8\uC6A9 \uC2A4\uD0AC(\`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)\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.
|
|
943
|
+
|
|
944
|
+
## \uBE4C\uB4DC
|
|
945
|
+
|
|
946
|
+
- \uB85C\uCEEC\uC5D0\uC11C \uC0B0\uCD9C\uBB3C \uD655\uC778\uC774 \uD544\uC694\uD558\uBA74 \`npx bstage build\`\uB85C \`dist/\` \uB97C \uC0DD\uC131\uD560 \uC218 \uC788\uB2E4(\uBC30\uD3EC \uC0B0\uCD9C\uBB3C\uC740 \uD3EC\uD138\uC774 \uB2E4\uC2DC \uB9CC\uB4E0\uB2E4).
|
|
947
|
+
|
|
948
|
+
${deploySection()}
|
|
949
|
+
|
|
950
|
+
## \uAE08\uC9C0 \uC0AC\uD56D
|
|
951
|
+
|
|
952
|
+
- \`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
|
|
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}
|
|
962
|
+
`;
|
|
963
|
+
}
|
|
964
|
+
function liquidManagedBody(space, projectName) {
|
|
965
|
+
const structureBlock = `public/
|
|
966
|
+
user/ \u2014 \uC720\uC800 \uD50C\uB7AB\uD3FC\uC6A9 \uD15C\uD50C\uB9BF
|
|
967
|
+
{name}/
|
|
968
|
+
template.liquid \u2014 \uD15C\uD50C\uB9BF \uBCF8\uBB38 (\uD544\uC218, \uD30C\uC77C\uBA85 \uACE0\uC815)
|
|
969
|
+
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
|
+
package.json
|
|
972
|
+
AGENTS.md \u2014 \uC774 \uD30C\uC77C`;
|
|
973
|
+
return `# AGENTS.md
|
|
974
|
+
|
|
975
|
+
## \uD504\uB85C\uC81D\uD2B8 \uAC1C\uC694
|
|
976
|
+
|
|
977
|
+
b.stage liquid \uD14C\uB9C8 \uD504\uB85C\uC81D\uD2B8. \`.liquid\` \uD15C\uD50C\uB9BF\uC744 \uC791\uC131\uD558\uBA74 \uD3EC\uD138\uC774 \uADF8\uB300\uB85C \uD328\uD0A4\uC9D5\uD574 \uD50C\uB7AB\uD3FC\uC774 \uC11C\uBC84\uC5D0\uC11C \uB370\uC774\uD130\uB97C \uB123\uC5B4 \uB80C\uB354\uD55C\uB2E4.
|
|
978
|
+
|
|
979
|
+
- **Space**: ${space}
|
|
980
|
+
- **\uB808\uD3EC**: \`${projectName}\`
|
|
981
|
+
|
|
982
|
+
## SDK \uBB38\uC11C
|
|
983
|
+
|
|
984
|
+
\uADDC\uC57D\xB7\uB370\uC774\uD130 \uACC4\uC57D\uC740 \uC544\uB798 \uC808\uACFC \`bstage-liquid\` \uC2A4\uD0AC\uC774 \uC9C1\uC811 \uB4E4\uACE0 \uC788\uB2E4 \u2014 **\uC774\uAC83\uC744 1\uCC28 \uADFC\uAC70\uB85C \uC0BC\uB294\uB2E4.** SDK \uBB38\uC11C\uAC00 \uD568\uAED8 \uC124\uCE58\uB41C \uB808\uD3EC\uB77C\uBA74 \`bstage docs\`\uB85C \uBAA9\uB85D\uC744 \uBCFC \uC218 \uC788\uC9C0\uB9CC, \`.liquid\` \uD30C\uC77C\uB9CC \uB454 \uB808\uD3EC\uC5D0\uB294 \uC124\uCE58\uB418\uC9C0 \uC54A\uC544 \uADF8 \uBA85\uB839\uC774 \uC885\uB8CC \uCF54\uB4DC 2\uB85C \uB05D\uB09C\uB2E4.
|
|
985
|
+
|
|
986
|
+
- \uBA85\uB839\xB7\uC635\uC158: \`bstage --help\`, \`bstage <\uBA85\uB839> --help\`
|
|
987
|
+
- \uC791\uC131 \uADDC\uC57D\xB7\uB370\uC774\uD130\xB7\uC5D0\uC14B: \`.claude/skills/bstage-liquid/SKILL.md\`
|
|
988
|
+
- \uBB38\uBC95(\uD0DC\uADF8\xB7\uD544\uD130): liquidjs \uACF5\uC2DD \uBB38\uC11C
|
|
989
|
+
|
|
990
|
+
## \uD50C\uB7AB\uD3FC\uC774 \uB123\uB294 \uB370\uC774\uD130 (\uC720\uC800 \uD654\uBA74)
|
|
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.
|
|
993
|
+
|
|
994
|
+
## \uD504\uB85C\uC81D\uD2B8 \uAD6C\uC870
|
|
995
|
+
|
|
996
|
+
\`\`\`
|
|
997
|
+
${structureBlock}
|
|
998
|
+
\`\`\`
|
|
999
|
+
|
|
1000
|
+
## \uD15C\uD50C\uB9BF \uC791\uC131 \uADDC\uCE59
|
|
1001
|
+
|
|
1002
|
+
- \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).
|
|
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.
|
|
1007
|
+
|
|
1008
|
+
## \uBA85\uB839\uC5B4
|
|
1009
|
+
|
|
1010
|
+
- \`bstage dev\` \u2014 \uB85C\uCEEC \uBBF8\uB9AC\uBCF4\uAE30(\uBAA9\uB85D\uC5D0\uC11C \uD15C\uD50C\uB9BF\uC744 \uACE8\uB77C \uD655\uC778)
|
|
1011
|
+
- \`bstage build\` \u2014 \uAC80\uC99D(\uAD6C\uC870\xB7\uBB38\uBC95 \uD655\uC778, \uBC88\uB4E4\uC744 \uB9CC\uB4E4\uC9C0 \uC54A\uB294\uB2E4)
|
|
1012
|
+
- \`bstage deploy\` \u2014 \uD3EC\uD138 \uBC30\uD3EC (\uC544\uB798 "\uBC30\uD3EC" \uC808)
|
|
1013
|
+
|
|
1014
|
+
**\uC124\uCE58\uB41C cli\uAC00 liquid\uB97C \uBAA8\uB974\uB294 \uC61B \uBC84\uC804\uC774\uBA74** \uC704 \uB450 \uBA85\uB839\uC774 \uC774 \uB808\uD3EC\uB97C \uC54C\uC544\uBCF4\uC9C0 \uBABB\uD55C\uB2E4 \u2014 \uC99D\uC0C1\uC774 \uBD84\uBA85\uD558\uB2E4: \`bstage build\`\uAC00 liquid \uAC80\uC99D \uB300\uC2E0 \`src/\` \uC544\uB798\uC5D0\uC11C \uC5C6\uB294 \uC18C\uC2A4 \uD30C\uC77C\uC744 \uCC3E\uB294\uB2E4\uACE0 \uB05D\uB09C\uB2E4. \uADF8\uB54C\uB294 cli\uB97C \uCD5C\uC2E0\uC73C\uB85C \uC62C\uB9B0\uB2E4. \uC62C\uB9B4 \uC218 \uC5C6\uC73C\uBA74 \uB85C\uCEEC \uBBF8\uB9AC\uBCF4\uAE30\uB294 \uC774 \uB808\uD3EC\uAC00 \uAC00\uC9C4 \uC218\uB2E8\uC744 \uC4F4\uB2E4.
|
|
1015
|
+
|
|
1016
|
+
## SDK \uC5C5\uB370\uC774\uD2B8
|
|
1017
|
+
|
|
1018
|
+
\uC774 \uD504\uB85C\uC81D\uD2B8\uC758 \`.claude/skills/\`\uC5D0\uB294 \uC5D0\uC774\uC804\uD2B8\uC6A9 \uC2A4\uD0AC(\`bstage-liquid\` \uC791\uC131, \`bstage-deploy\` \uBC30\uD3EC, \`bstage-onboarding\` \uCC98\uC74C\uBD80\uD130 \uB05D\uAE4C\uC9C0, \`bstage-migrate\` \uB9C8\uC774\uADF8\uB808\uC774\uC158)\uC774 \uB4E4\uC5B4 \uC788\uB2E4. \`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.
|
|
1019
|
+
|
|
1020
|
+
${deploySection()}
|
|
1021
|
+
|
|
1022
|
+
## \uAE08\uC9C0 \uC0AC\uD56D
|
|
1023
|
+
|
|
1024
|
+
- \uD55C \uB808\uD3EC\uC5D0 liquid\uC640 sdk \uBC29\uC2DD(React \uCEF4\uD3EC\uB10C\uD2B8) \uD15C\uD50C\uB9BF\uC744 \uC11E\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uD3EC\uD138\uC774 \uBE4C\uB4DC\uD558\uC9C0 \uBABB\uD55C\uB2E4
|
|
1025
|
+
- 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
|
|
1026
|
+
- \`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)
|
|
1027
|
+
- \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
|
|
1028
|
+
- \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
|
|
1029
|
+
- \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
|
|
1030
|
+
- \`{% 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
|
|
1031
|
+
`;
|
|
1032
|
+
}
|
|
1033
|
+
function renderManagedBlock(opts) {
|
|
1034
|
+
return wrapManaged(agentsManagedBody(opts));
|
|
1035
|
+
}
|
|
1036
|
+
function agentsMd(opts) {
|
|
1037
|
+
assertSingleLine({ space: opts.space, projectName: opts.projectName });
|
|
1038
|
+
return `${renderManagedBlock(opts)}
|
|
1039
|
+
|
|
1040
|
+
${freeRegionScaffold()}`;
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
// src/agents/claudeMd.ts
|
|
1044
|
+
function claudeMd() {
|
|
1045
|
+
return `# CLAUDE.md
|
|
1046
|
+
|
|
1047
|
+
\uC774 \uD504\uB85C\uC81D\uD2B8\uC758 \uADDC\uCE59\uACFC \uCEE8\uD14D\uC2A4\uD2B8\uB294 [AGENTS.md](./AGENTS.md)\uB97C \uCC38\uACE0\uD558\uC138\uC694.
|
|
1048
|
+
`;
|
|
1049
|
+
}
|
|
1050
|
+
|
|
1051
|
+
// src/agents/identity.ts
|
|
1052
|
+
var IDENTITY_RE = /^[A-Za-z0-9._@/-]{1,100}$/;
|
|
1053
|
+
var IDENTITY_FORBIDDEN = ["<!--", "-->", "BSTAGE:MANAGED"];
|
|
1054
|
+
function sanitizeIdentity(value) {
|
|
1055
|
+
if (typeof value !== "string") return null;
|
|
1056
|
+
if (!IDENTITY_RE.test(value)) return null;
|
|
1057
|
+
if (IDENTITY_FORBIDDEN.some((token) => value.includes(token))) return null;
|
|
1058
|
+
return value;
|
|
1059
|
+
}
|
|
1060
|
+
|
|
1061
|
+
// src/install/plan.ts
|
|
1062
|
+
var AGENTS_FILE = "AGENTS.md";
|
|
1063
|
+
var CLAUDE_FILE = "CLAUDE.md";
|
|
1064
|
+
var LEGACY_NOTE = "\uAD00\uB9AC \uC601\uC5ED \uB9C8\uCEE4 \uC5C6\uC74C \u2014 bstage-migrate \uC2A4\uD0AC\uB85C reconcile";
|
|
1065
|
+
var HAND_EDIT_NOTE = "\uBC84\uC804\uC740 \uAC19\uC740\uB370 \uBCF8\uBB38\uC774 \uB2E4\uB985\uB2C8\uB2E4(\uC190\uC218\uC815) \u2014 SDK \uBCF8\uBB38\uC73C\uB85C \uB418\uB3CC\uB9AC\uACE0 \uAE30\uC874 \uBCF8\uBB38\uC740 SKILL.md.bak \uC73C\uB85C \uB0A8\uAE41\uB2C8\uB2E4. \uD504\uB85C\uC81D\uD2B8 \uACE0\uC720 \uADDC\uCE59\uC740 AGENTS.md \uC790\uC720 \uC601\uC5ED\uC5D0 \uC801\uC73C\uC138\uC694.";
|
|
1066
|
+
var NEWER_NOTE = "\uC124\uCE58\uBCF8\uC774 \uC774 toolkit\uBCF4\uB2E4 \uC0C8 \uBC84\uC804\uC785\uB2C8\uB2E4 \u2014 \uC774 CLI\uAC00 \uC624\uB798\uB3FC \uC61B \uBCF8\uBB38\uC73C\uB85C \uB418\uB3CC\uB9BD\uB2C8\uB2E4(\uD558\uD5A5). \uCD5C\uC2E0 CLI(npx @bstage-sdk/cli@latest ai update)\uB85C \uB2E4\uC2DC \uC2E4\uD589\uD558\uC138\uC694.";
|
|
1067
|
+
function planInstall(input) {
|
|
1068
|
+
const actions = [...planSkills(input), planAgentsMd(input), planClaudeMd(input.existing.claudeMd)];
|
|
1069
|
+
return [...actions].sort((a, b) => a.path < b.path ? -1 : a.path > b.path ? 1 : 0);
|
|
1070
|
+
}
|
|
1071
|
+
function skillFilePath(skillsDir, name) {
|
|
1072
|
+
return `${skillsDir}/${name}/SKILL.md`;
|
|
1073
|
+
}
|
|
1074
|
+
function planSkills(input) {
|
|
1075
|
+
const { kind, target, skillsDir, existing } = input;
|
|
1076
|
+
const owned = skillsFor(kind);
|
|
1077
|
+
const ownedNames = new Set(owned.map((s) => s.name));
|
|
1078
|
+
const wanted = owned.map((skill) => {
|
|
1079
|
+
const path = skillFilePath(skillsDir, skill.name);
|
|
1080
|
+
const rendered = skill.content({ kind, target });
|
|
1081
|
+
const installed = existing.skills[skill.name];
|
|
1082
|
+
if (installed === void 0) return { path, content: rendered, reason: "create" };
|
|
1083
|
+
if (installed === rendered) return { path, content: null, reason: "keep" };
|
|
1084
|
+
const stamp = readSkillStamp(installed);
|
|
1085
|
+
if (stamp !== null && compareVersions(stamp, VERSION) > 0) {
|
|
1086
|
+
return { path, content: rendered, reason: "stale", note: NEWER_NOTE };
|
|
1087
|
+
}
|
|
1088
|
+
if (readSkillStamp(installed) === VERSION) {
|
|
1089
|
+
return { path, content: rendered, reason: "stale", note: HAND_EDIT_NOTE, backup: true };
|
|
1090
|
+
}
|
|
1091
|
+
return { path, content: rendered, reason: "stale" };
|
|
1092
|
+
});
|
|
1093
|
+
const extras = BSTAGE_SKILLS.filter(
|
|
1094
|
+
(s) => !ownedNames.has(s.name) && s.name in existing.skills
|
|
1095
|
+
).map(
|
|
1096
|
+
(s) => ({
|
|
1097
|
+
path: skillFilePath(skillsDir, s.name),
|
|
1098
|
+
content: null,
|
|
1099
|
+
reason: "keep",
|
|
1100
|
+
note: `\uC774 \uD504\uB85C\uC81D\uD2B8 \uC885\uB958(${kind})\uC758 \uC2A4\uD0AC\uC774 \uC544\uB2D9\uB2C8\uB2E4 \u2014 \uC9C0\uC6B0\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uD544\uC694 \uC5C6\uC73C\uBA74 \uC9C1\uC811 \uC0AD\uC81C\uD558\uC138\uC694.`
|
|
1101
|
+
})
|
|
1102
|
+
);
|
|
1103
|
+
return [...wanted, ...extras];
|
|
1104
|
+
}
|
|
1105
|
+
function planAgentsMd(input) {
|
|
1106
|
+
const { kind, target, space, projectName, existing } = input;
|
|
1107
|
+
const current = existing.agentsMd;
|
|
1108
|
+
if (current === null) {
|
|
1109
|
+
return {
|
|
1110
|
+
path: AGENTS_FILE,
|
|
1111
|
+
content: agentsMd({ space, projectName, target, kind }),
|
|
1112
|
+
reason: "create"
|
|
1113
|
+
};
|
|
1114
|
+
}
|
|
1115
|
+
const status = agentsMdStatus(current);
|
|
1116
|
+
if (status === "legacy") {
|
|
1117
|
+
return { path: AGENTS_FILE, content: null, reason: "legacy", note: LEGACY_NOTE };
|
|
1118
|
+
}
|
|
1119
|
+
if (status === "ok") return { path: AGENTS_FILE, content: null, reason: "keep" };
|
|
1120
|
+
const identity = parseAgentsIdentity(current);
|
|
1121
|
+
const block = renderManagedBlock({
|
|
1122
|
+
space: sanitizeIdentity(identity.space) ?? space,
|
|
1123
|
+
projectName: sanitizeIdentity(identity.projectName) ?? projectName,
|
|
1124
|
+
target,
|
|
1125
|
+
kind
|
|
1126
|
+
});
|
|
1127
|
+
const swapped = swapManagedBlock(current, block);
|
|
1128
|
+
if (swapped === null) {
|
|
1129
|
+
return { path: AGENTS_FILE, content: null, reason: "legacy", note: LEGACY_NOTE };
|
|
1130
|
+
}
|
|
1131
|
+
return { path: AGENTS_FILE, content: swapped, reason: "update" };
|
|
1132
|
+
}
|
|
1133
|
+
function planClaudeMd(current) {
|
|
1134
|
+
if (current === null) return { path: CLAUDE_FILE, content: claudeMd(), reason: "create" };
|
|
1135
|
+
return { path: CLAUDE_FILE, content: null, reason: "keep" };
|
|
1136
|
+
}
|
|
1137
|
+
export {
|
|
1138
|
+
AGENTS_MANAGED_VERSION,
|
|
1139
|
+
BSTAGE_SKILLS,
|
|
1140
|
+
VERSION,
|
|
1141
|
+
agentsManagedBody,
|
|
1142
|
+
agentsMd,
|
|
1143
|
+
agentsMdStatus,
|
|
1144
|
+
claudeMd,
|
|
1145
|
+
compareVersions,
|
|
1146
|
+
designGuideSection,
|
|
1147
|
+
meta as designMeta,
|
|
1148
|
+
designRulesBrief,
|
|
1149
|
+
freeRegionScaffold,
|
|
1150
|
+
parseAgentsIdentity,
|
|
1151
|
+
planInstall,
|
|
1152
|
+
readManagedVersion,
|
|
1153
|
+
readSkillStamp,
|
|
1154
|
+
renderManagedBlock,
|
|
1155
|
+
sanitizeIdentity,
|
|
1156
|
+
skillFilePath,
|
|
1157
|
+
skillStamp,
|
|
1158
|
+
skillsFor,
|
|
1159
|
+
swapManagedBlock,
|
|
1160
|
+
withStamp,
|
|
1161
|
+
wrapManaged
|
|
1162
|
+
};
|