@nebularstreams/statify 3.0.7 → 3.0.9
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/package.json +3 -2
- package/readme.md +28 -0
- package/skill/statify-site/SKILL.md +53 -0
- package/skill/statify-site/agents/openai.yaml +4 -0
- package/skill/statify-site/references/authoring.md +121 -0
- package/skill/statify-site/references/landing-pages.md +107 -0
- package/skill/statify-site/references/skins.md +150 -0
- package/templates/landing/metadata.json +1 -1
- package/templates/landing/pages/docs/cookies.md +25 -0
- package/templates/landing/pages/docs/index.md +13 -0
- package/templates/landing/pages/docs/privacy.md +50 -0
- package/templates/landing/pages/docs/tos.md +49 -0
- package/templates/landing/pages/index.json +3 -3
- package/templates/landing-rich/assets/app/webfonts/fa-brands-400.woff2 +0 -0
- package/templates/landing-rich/assets/app/webfonts/fa-solid-900.woff2 +0 -0
- package/templates/landing-rich/assets/app/website.css +32 -0
- package/templates/landing-rich/assets/app/website.min.js +6 -0
- package/templates/landing-rich/assets/res/carousel/image-1.webp +0 -0
- package/templates/landing-rich/assets/res/carousel/image-2.webp +0 -0
- package/templates/landing-rich/assets/res/carousel/image-3.webp +0 -0
- package/templates/landing-rich/assets/res/custom.css +122 -0
- package/templates/landing-rich/assets/res/logos/favicon.ico +0 -0
- package/templates/landing-rich/assets/res/logos/favicon.png +0 -0
- package/templates/landing-rich/assets/res/logos/logo.medallion.png +0 -0
- package/templates/landing-rich/assets/res/logos/logo.white.png +0 -0
- package/templates/landing-rich/assets/res/proj/banda-tech-client.webp +0 -0
- package/templates/landing-rich/assets/res/proj/banda-tech-server.webp +0 -0
- package/templates/landing-rich/assets/res/proj/proj-common-ground.webp +0 -0
- package/templates/landing-rich/assets/res/proj/proj-fieldnote.webp +0 -0
- package/templates/landing-rich/assets/res/proj/proj-tribes.webp +0 -0
- package/templates/landing-rich/images.json +932 -0
- package/templates/landing-rich/metadata.json +115 -0
- package/templates/landing-rich/pages/docs/cookies.md +25 -0
- package/templates/landing-rich/pages/docs/index.md +13 -0
- package/templates/landing-rich/pages/docs/privacy.md +50 -0
- package/templates/landing-rich/pages/docs/tos.md +49 -0
- package/templates/landing-rich/pages/faq.json +68 -0
- package/templates/landing-rich/pages/index.json +333 -0
- package/templates/landing-rich/pages/res/bg/molecule.svg +3 -0
- package/templates/landing-rich/pages/res/custom.css +270 -0
- package/templates/landing-rich/pages/res/icon-1024.png +0 -0
- package/templates/landing-rich/pages/res/index/cooking-0.webp +0 -0
- package/templates/landing-rich/pages/res/index/cooking-1.webp +0 -0
- package/templates/landing-rich/pages/res/index/cooking-2.webp +0 -0
- package/templates/landing-rich/pages/res/index/cooking-3.webp +0 -0
- package/templates/landing-rich/pages/res/index/icon-holopoke.png +0 -0
- package/templates/landing-rich/pages/res/index/obscene-diagram.webp +0 -0
- package/templates/landing-rich/pages/res/index/obscene-screenshot.webp +0 -0
- package/templates/landing-rich/pages/res/index/obscene-screenshots.png +0 -0
- package/templates/landing-rich/pages/res/index/obscene-studio-midi-controllers-3.webp +0 -0
- package/templates/landing-rich/pages/res/index/scr-avion-dentro.webp +0 -0
- package/templates/landing-rich/pages/res/index/scr-avion.webp +0 -0
- package/templates/landing-rich/pages/res/index/scr-football-0.webp +0 -0
- package/templates/landing-rich/pages/res/index/scr-football-0a.webp +0 -0
- package/templates/landing-rich/pages/res/index/scr-football-1.webp +0 -0
- package/templates/landing-rich/pages/res/index/scr-football-1b.webp +0 -0
- package/templates/landing-rich/pages/res/index/scr-football-jp.webp +0 -0
- package/templates/landing-rich/pages/res/index/scr-gaming-warning-mini.webp +0 -0
- package/templates/landing-rich/pages/res/index/scr-gaming-warning.webp +0 -0
- package/templates/landing-rich/pages/res/index/scr-music-clubbing.webp +0 -0
- package/templates/landing-rich/pages/res/index/scr-pollos-hermanos.webp +0 -0
- package/templates/landing-rich/pages/res/index/shot-livestream.webp +0 -0
- package/templates/landing-rich/pages/res/index/studio-screenshot.webp +0 -0
- package/templates/landing-rich/pages/res/trans-horizontal.png +0 -0
- package/templates/landing-rich/pages/res/videos/obscene-promo-720.mp4 +0 -0
- package/templates/landing-rich/pages/res/videos/obscene-promo-720.webp +0 -0
- package/templates/landing-rich/pages/res/videos/obscene-studio-showcase-1.mp4 +0 -0
- package/templates/landing-rich/pages/res/videos/obscene-studio-showcase-1.webp +0 -0
- package/tool/cli.js +54 -4
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
body {
|
|
2
|
+
font-family: Lato, sans-serif;
|
|
3
|
+
line-height: 150%;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.market .templateitem > .inner {
|
|
7
|
+
border-radius: 1rem;
|
|
8
|
+
box-shadow: 0 0 1px var(--shadow-color);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.obsimage .none {
|
|
12
|
+
width: 100%;
|
|
13
|
+
max-width: 500px;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.fullimage img {
|
|
17
|
+
border-radius: 0.5rem !important;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.smallervideo {
|
|
21
|
+
margin-bottom: 1rem !important;
|
|
22
|
+
width: 90% !important;
|
|
23
|
+
overflow: hidden !important;
|
|
24
|
+
box-shadow: 0 0 1px;
|
|
25
|
+
border-radius: 0.5rem !important;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/*
|
|
29
|
+
|
|
30
|
+
.bg-six-lite {
|
|
31
|
+
background-color: white;
|
|
32
|
+
background-size: auto;
|
|
33
|
+
background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2000 2000" fill="%23f0d8f0"><path d="M1891 560c0-277-224-509-501-499-372 13-397 281-504 302s-215-179-511-75a459 459 0 0 0-222 218C10 809 262 886 259 992s-201 171-82 395c34 64 99 127 212 141 56 6 103 47 115 102a377 377 0 0 0 383 310c222 2 528-202 380-536-42-97 30-123 73-194s-11-120 128-156c233-61 423-246 423-494Z"></path></svg>');
|
|
34
|
+
background-attachment: local;
|
|
35
|
+
background-position: 60vw;
|
|
36
|
+
background-repeat-x: no-repeat;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.bg-seven {
|
|
40
|
+
background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2000 2000" fill="%23fef"><path d="M1912 1209c27-319-72-699-318-882-187-139-462-224-785-204S85 468 84 880c0 455 481 345 636 484s139 514 477 516c386 3 693-420 715-671Z"></path></svg>');
|
|
41
|
+
background-color: white;
|
|
42
|
+
background-position: -50vh -50vw;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
.dark .bg-six-lite {
|
|
47
|
+
background-color: black;
|
|
48
|
+
background-size: auto;
|
|
49
|
+
background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2000 2000" fill="%23303"><path d="M1891 560c0-277-224-509-501-499-372 13-397 281-504 302s-215-179-511-75a459 459 0 0 0-222 218C10 809 262 886 259 992s-201 171-82 395c34 64 99 127 212 141 56 6 103 47 115 102a377 377 0 0 0 383 310c222 2 528-202 380-536-42-97 30-123 73-194s-11-120 128-156c233-61 423-246 423-494Z"></path></svg>');
|
|
50
|
+
background-attachment: local;
|
|
51
|
+
background-position: 60vw;
|
|
52
|
+
background-repeat-x: no-repeat;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
.dark .bg-seven {
|
|
57
|
+
background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2000 2000" fill="%23303"><path d="M1912 1209c27-319-72-699-318-882-187-139-462-224-785-204S85 468 84 880c0 455 481 345 636 484s139 514 477 516c386 3 693-420 715-671Z"></path></svg>');
|
|
58
|
+
background-color: black;
|
|
59
|
+
background-position: -50vh -50vw;
|
|
60
|
+
}
|
|
61
|
+
*/
|
|
62
|
+
.nearbox {
|
|
63
|
+
text-align: left;
|
|
64
|
+
border-left: solid 1rem var(--accent-tx);
|
|
65
|
+
border-bottom: solid 1rem var(--accent-tx);
|
|
66
|
+
border-bottom-right-radius: 2rem;
|
|
67
|
+
border-top-left-radius: 1rem;
|
|
68
|
+
border-bottom-left-radius: 1rem;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.nearbox .obsimagevignette img {
|
|
72
|
+
border: solid var(--accent-tx);
|
|
73
|
+
border-radius: 0 10rem 10rem 0;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.nearbox .youtube {
|
|
77
|
+
width: 100%;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.featurelist .youtube {
|
|
81
|
+
overflow: hidden;
|
|
82
|
+
border-radius: 0.5rem;
|
|
83
|
+
margin-top: 1rem;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.paragraph {
|
|
87
|
+
padding: 1rem 1rem 0 1rem;
|
|
88
|
+
line-height: 150%;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.nearbox > h2 {
|
|
92
|
+
line-height: 125%;
|
|
93
|
+
font-size: 1.75rem !important;
|
|
94
|
+
background: linear-gradient(90deg, var(--accent-tx), transparent);
|
|
95
|
+
color: var(--text);
|
|
96
|
+
border-top-right-radius: 10rem;
|
|
97
|
+
border-bottom-right-radius: 10rem;
|
|
98
|
+
width: max-content;
|
|
99
|
+
padding: 1rem 5rem 1rem 0 !important;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.obsvideo.fully {
|
|
103
|
+
border-top: solid transparent;
|
|
104
|
+
border-bottom: solid transparent;
|
|
105
|
+
background: var(--accent-tx);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.obsimage.shot:after {
|
|
109
|
+
content: attr(aria-label);
|
|
110
|
+
display: block;
|
|
111
|
+
line-height: 1.5;
|
|
112
|
+
font-size: 0.75rem;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.obsimage.usecase {
|
|
116
|
+
display: flex;
|
|
117
|
+
flex-direction: column;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.obsimage.usecase img {
|
|
121
|
+
order: 1;
|
|
122
|
+
margin: 0.5rem 0;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.obsimage.usecase:before {
|
|
126
|
+
content: attr(data-title);
|
|
127
|
+
display: block;
|
|
128
|
+
line-height: 1.5;
|
|
129
|
+
font-size: 1.25rem;
|
|
130
|
+
font-weight: bold;
|
|
131
|
+
color: var(--accent);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.obsimage.usecase:after {
|
|
135
|
+
flex-grow: 1;
|
|
136
|
+
font-size: 1rem;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.circleaccent {
|
|
140
|
+
background: var(--accent);
|
|
141
|
+
border-radius: 2rem;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.featurelist {
|
|
145
|
+
margin: 0.5rem;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.featurelist .mone {
|
|
149
|
+
margin-top: 2rem;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.featurelist .mone .body:before {
|
|
153
|
+
background: linear-gradient(90deg, var(--accent-tx), transparent);
|
|
154
|
+
width: 70%;
|
|
155
|
+
display: block;
|
|
156
|
+
content: "";
|
|
157
|
+
height: 4px;
|
|
158
|
+
margin-bottom: 1rem;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.mone .titleblock {
|
|
162
|
+
padding-bottom: 1rem;
|
|
163
|
+
margin-bottom: 0;
|
|
164
|
+
align-items: flex-end;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.mone .titleholder {
|
|
168
|
+
margin-left: 1rem;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.mone .subhead, .mone h3 {
|
|
172
|
+
margin: 0;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/* latin */
|
|
176
|
+
@font-face {
|
|
177
|
+
font-family: 'Lato';
|
|
178
|
+
font-style: normal;
|
|
179
|
+
font-weight: 300;
|
|
180
|
+
font-display: swap;
|
|
181
|
+
src: url(https://fonts.gstatic.com/s/lato/v23/S6u9w4BMUTPHh7USSwiPGQ3q5d0.woff2) format('woff2');
|
|
182
|
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/* latin */
|
|
186
|
+
@font-face {
|
|
187
|
+
font-family: 'Lato';
|
|
188
|
+
font-style: normal;
|
|
189
|
+
font-weight: 400;
|
|
190
|
+
font-display: swap;
|
|
191
|
+
src: url(https://fonts.gstatic.com/s/lato/v23/S6uyw4BMUTPHjx4wXiWtFCc.woff2) format('woff2');
|
|
192
|
+
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
.back-zero {
|
|
197
|
+
background: var(--back-zero);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.back-one {
|
|
201
|
+
background: var(--back-one);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
.back-two {
|
|
206
|
+
background: var(--back-two);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.back-three {
|
|
210
|
+
background: var(--back-three);
|
|
211
|
+
--accent-tx: var(--back-two);
|
|
212
|
+
--accent: var(--back-two);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
.back-four {
|
|
216
|
+
background: var(--back-four);
|
|
217
|
+
--accent-tx: var(--back-three);
|
|
218
|
+
--accent: var(--back-three);
|
|
219
|
+
/*
|
|
220
|
+
--text: white;
|
|
221
|
+
color: white;
|
|
222
|
+
|
|
223
|
+
*/
|
|
224
|
+
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
.back-five {
|
|
229
|
+
background: var(--back-five);
|
|
230
|
+
--text: white;
|
|
231
|
+
color: white;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/*
|
|
235
|
+
:root {
|
|
236
|
+
--back-one: #E7CDF5;
|
|
237
|
+
--back-two: #D8B6ED;
|
|
238
|
+
--back-three: #B785D5;
|
|
239
|
+
--back-four: #795DA1;
|
|
240
|
+
--back-five: #61428C;
|
|
241
|
+
--back-zero: #fff;
|
|
242
|
+
}
|
|
243
|
+
*/
|
|
244
|
+
:root {
|
|
245
|
+
--back-one: #EFE4FB;
|
|
246
|
+
--back-two: #E0CFF6;
|
|
247
|
+
--back-three: #D0A8ED;
|
|
248
|
+
--back-four: #AB89D6;
|
|
249
|
+
--back-five: #9069b6;
|
|
250
|
+
--back-zero: #fff;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
.skinroot.dark {
|
|
254
|
+
--back-one: #260029;
|
|
255
|
+
--back-two: #400145;
|
|
256
|
+
--back-zero: #222;
|
|
257
|
+
--back-five: #8F0299;
|
|
258
|
+
--back-three: #5C0662;
|
|
259
|
+
--back-four: #720879;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
li.flexcol.lighter.col-12.screen.pad-1 {
|
|
263
|
+
padding: 0;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
li.flexcol > div {
|
|
267
|
+
max-width: 1200px;
|
|
268
|
+
align-self: center;
|
|
269
|
+
width: 100%;
|
|
270
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/tool/cli.js
CHANGED
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
"use strict";
|
|
4
4
|
|
|
5
5
|
const fs = require("node:fs");
|
|
6
|
+
const os = require("node:os");
|
|
6
7
|
const path = require("node:path");
|
|
7
8
|
const { spawnSync } = require("node:child_process");
|
|
8
9
|
const publish = require("../src/publisher-lib");
|
|
9
10
|
|
|
10
11
|
const PACKAGE_ROOT = path.resolve(__dirname, "..");
|
|
11
|
-
const COMMANDS = new Set(["init", "app", "list", "folder", "file"]);
|
|
12
|
+
const COMMANDS = new Set(["init", "app", "list", "folder", "file", "skill"]);
|
|
12
13
|
|
|
13
14
|
function fail(message, code = 1) {
|
|
14
15
|
const error = new Error(message);
|
|
@@ -22,7 +23,8 @@ function usage() {
|
|
|
22
23
|
statify folder <source> [destination]
|
|
23
24
|
statify file <file> [destination] <source>
|
|
24
25
|
statify list <list-file> <source> [destination] [filter-id]
|
|
25
|
-
statify app [simple|software|worlds]
|
|
26
|
+
statify app [simple|software|worlds]
|
|
27
|
+
statify skill install [--force]`;
|
|
26
28
|
}
|
|
27
29
|
|
|
28
30
|
function existingDirectory(value, label) {
|
|
@@ -92,7 +94,7 @@ async function file(fileArg, destinationArg, sourceArg) {
|
|
|
92
94
|
}
|
|
93
95
|
|
|
94
96
|
function walk(directory, relative = "") {
|
|
95
|
-
return fs.readdirSync(directory, { withFileTypes: true })
|
|
97
|
+
return fs.readdirSync(path.join(directory, relative), { withFileTypes: true })
|
|
96
98
|
.filter((entry) => !entry.name.startsWith("."))
|
|
97
99
|
.flatMap((entry) => {
|
|
98
100
|
const item = path.join(relative, entry.name);
|
|
@@ -162,6 +164,54 @@ function app(application = "simple") {
|
|
|
162
164
|
if (result.status !== 0) fail(`Application build failed with exit code ${result.status}`, result.status || 1);
|
|
163
165
|
}
|
|
164
166
|
|
|
167
|
+
function installSkill(options) {
|
|
168
|
+
const unknown = options.filter((option) => option !== "--force");
|
|
169
|
+
if (unknown.length) fail(`Unknown skill install option: ${unknown[0]}`);
|
|
170
|
+
|
|
171
|
+
const
|
|
172
|
+
force = options.includes("--force"),
|
|
173
|
+
source = path.join(PACKAGE_ROOT, "skill", "statify-site"),
|
|
174
|
+
codexHome = process.env.CODEX_HOME
|
|
175
|
+
? path.resolve(process.env.CODEX_HOME)
|
|
176
|
+
: path.join(os.homedir(), ".codex"),
|
|
177
|
+
skillsDirectory = path.join(codexHome, "skills"),
|
|
178
|
+
target = path.join(skillsDirectory, "statify-site");
|
|
179
|
+
|
|
180
|
+
if (!fs.existsSync(path.join(source, "SKILL.md"))) {
|
|
181
|
+
fail(`Packaged skill is missing: ${source}`);
|
|
182
|
+
}
|
|
183
|
+
if (fs.existsSync(target) && !force) {
|
|
184
|
+
fail(`Skill is already installed at ${target}\nRun again with --force to replace it.`);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
fs.mkdirSync(skillsDirectory, { recursive: true });
|
|
188
|
+
const temporary = path.join(skillsDirectory, `.statify-site-install-${process.pid}-${Date.now()}`);
|
|
189
|
+
fs.cpSync(source, temporary, { recursive: true, errorOnExist: true });
|
|
190
|
+
|
|
191
|
+
if (!fs.existsSync(target)) {
|
|
192
|
+
fs.renameSync(temporary, target);
|
|
193
|
+
} else {
|
|
194
|
+
const backup = path.join(skillsDirectory, `.statify-site-backup-${process.pid}-${Date.now()}`);
|
|
195
|
+
fs.renameSync(target, backup);
|
|
196
|
+
try {
|
|
197
|
+
fs.renameSync(temporary, target);
|
|
198
|
+
fs.rmSync(backup, { recursive: true, force: true });
|
|
199
|
+
} catch (error) {
|
|
200
|
+
if (fs.existsSync(temporary)) fs.rmSync(temporary, { recursive: true, force: true });
|
|
201
|
+
if (!fs.existsSync(target)) fs.renameSync(backup, target);
|
|
202
|
+
throw error;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
console.log(`Installed statify-site skill in ${target}`);
|
|
207
|
+
console.log("Restart or refresh Codex, then invoke it with $statify-site.");
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
function skill(action, ...options) {
|
|
211
|
+
if (action !== "install") fail("Usage: statify skill install [--force]");
|
|
212
|
+
installSkill(options);
|
|
213
|
+
}
|
|
214
|
+
|
|
165
215
|
function invocation(argv) {
|
|
166
216
|
if (COMMANDS.has(argv[0])) return [argv[0], argv.slice(1)];
|
|
167
217
|
fail(`Unknown command: ${argv[0]}\n\n${usage()}`);
|
|
@@ -174,7 +224,7 @@ async function main(argv) {
|
|
|
174
224
|
}
|
|
175
225
|
|
|
176
226
|
const [command, args] = invocation(argv);
|
|
177
|
-
await { init, folder, file, list, app }[command](...args);
|
|
227
|
+
await { init, folder, file, list, app, skill }[command](...args);
|
|
178
228
|
}
|
|
179
229
|
|
|
180
230
|
main(process.argv.slice(2)).catch((error) => {
|