rahman-resources 0.9.0 → 0.9.2
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/bin/cli.js +16 -4
- package/lib/manifest.json +27 -1
- package/lib/skills.json +10 -2
- package/package.json +1 -1
package/bin/cli.js
CHANGED
|
@@ -982,6 +982,8 @@ async function runLift(rest) {
|
|
|
982
982
|
process.stdout.write(`\n pulling ${kleur.dim(step.from)} ... `);
|
|
983
983
|
if (parsed.kind === "superspace-local") {
|
|
984
984
|
copyLocalTree(step.localFromAbs, step.toAbs);
|
|
985
|
+
} else if (parsed.kind === "github") {
|
|
986
|
+
await pullFromRepo(step.githubRepo, step.githubSubPath, "main", step.toAbs);
|
|
985
987
|
} else {
|
|
986
988
|
await pull(step.from, step.toAbs);
|
|
987
989
|
}
|
|
@@ -1073,6 +1075,9 @@ async function resolveLiftPlan(parsed, target) {
|
|
|
1073
1075
|
from: `${parsed.owner}/${parsed.repo}/${parsed.subPath}`,
|
|
1074
1076
|
toRel: parsed.subPath,
|
|
1075
1077
|
toAbs: path.join(target, parsed.subPath),
|
|
1078
|
+
// Mark the full repo so pull dispatcher targets the correct repo, not the kitab.
|
|
1079
|
+
githubRepo: `${parsed.owner}/${parsed.repo}`,
|
|
1080
|
+
githubSubPath: parsed.subPath,
|
|
1076
1081
|
});
|
|
1077
1082
|
}
|
|
1078
1083
|
return { steps, peers, npm, shadcn, env };
|
|
@@ -1109,12 +1114,13 @@ async function runPublishSlice(rest) {
|
|
|
1109
1114
|
}
|
|
1110
1115
|
console.log(kleur.bold(`\n→ Validating ${kleur.cyan(abs)}\n`));
|
|
1111
1116
|
|
|
1112
|
-
// Run the validator script as a subprocess
|
|
1117
|
+
// Run the validator script as a subprocess. Direct binary, no shell — args
|
|
1118
|
+
// pass through Node's argv, no /bin/sh metachar re-parse.
|
|
1113
1119
|
await new Promise((resolve, reject) => {
|
|
1114
1120
|
const ps = spawn(
|
|
1115
|
-
|
|
1121
|
+
process.execPath,
|
|
1116
1122
|
[path.join(__dirname, "../scripts/validate-slice.mjs"), path.join(abs, "slice.json")],
|
|
1117
|
-
{ stdio: "inherit"
|
|
1123
|
+
{ stdio: "inherit" },
|
|
1118
1124
|
);
|
|
1119
1125
|
ps.on("error", reject);
|
|
1120
1126
|
ps.on("exit", (code) => (code === 0 ? resolve() : reject(new Error(`validate-slice exited ${code}`))));
|
|
@@ -1180,7 +1186,8 @@ async function runPublishSlice(rest) {
|
|
|
1180
1186
|
|
|
1181
1187
|
async function checkGhInstalled() {
|
|
1182
1188
|
return new Promise((resolve) => {
|
|
1183
|
-
|
|
1189
|
+
// Direct binary — no shell. PATH lookup happens in spawn itself.
|
|
1190
|
+
const ps = spawn("gh", ["--version"], { stdio: "ignore" });
|
|
1184
1191
|
ps.on("error", () => resolve(false));
|
|
1185
1192
|
ps.on("exit", (code) => resolve(code === 0));
|
|
1186
1193
|
});
|
|
@@ -1193,6 +1200,11 @@ async function pull(repoPath, dest) {
|
|
|
1193
1200
|
await emitter.clone(dest);
|
|
1194
1201
|
}
|
|
1195
1202
|
|
|
1203
|
+
async function pullFromRepo(repo, subPath, branch, dest) {
|
|
1204
|
+
const emitter = tiged(`${repo}/${subPath}#${branch}`, { cache: false, force: true, verbose: false });
|
|
1205
|
+
await emitter.clone(dest);
|
|
1206
|
+
}
|
|
1207
|
+
|
|
1196
1208
|
function detectPM(target) {
|
|
1197
1209
|
if (existsSync(path.join(target, "pnpm-lock.yaml"))) return "pnpm";
|
|
1198
1210
|
if (existsSync(path.join(target, "yarn.lock"))) return "yarn";
|
package/lib/manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 2,
|
|
3
|
-
"generatedAt": "2026-05-
|
|
3
|
+
"generatedAt": "2026-05-11T06:12:19.160Z",
|
|
4
4
|
"repo": "rahmanef63/resource-site",
|
|
5
5
|
"branch": "main",
|
|
6
6
|
"layouts": [
|
|
@@ -931,6 +931,32 @@
|
|
|
931
931
|
"design-system"
|
|
932
932
|
]
|
|
933
933
|
},
|
|
934
|
+
{
|
|
935
|
+
"slug": "icon-picker",
|
|
936
|
+
"title": "Notion-Style Icon Picker",
|
|
937
|
+
"description": "Emoji + lucide icon picker with search, 10-color Notion palette, Twemoji/native toggle. One string stores emoji OR lucide:Name OR with ?c=hex tint — backwards-compat with raw-emoji fields.",
|
|
938
|
+
"source": "notion-page-clone",
|
|
939
|
+
"files": [
|
|
940
|
+
"frontend/slices/notion/slices/icon-picker/components/IconPicker.tsx",
|
|
941
|
+
"frontend/slices/notion/slices/icon-picker/components/DynamicIcon.tsx",
|
|
942
|
+
"frontend/slices/notion/slices/icon-picker/lib/parse.ts",
|
|
943
|
+
"frontend/slices/notion/slices/icon-picker/lib/colors.ts",
|
|
944
|
+
"frontend/slices/notion/slices/icon-picker/lib/emoji-catalog.ts",
|
|
945
|
+
"frontend/slices/notion/slices/icon-picker/lib/lucide-catalog.ts",
|
|
946
|
+
"frontend/slices/notion/slices/icon-picker/lib/twemoji.ts",
|
|
947
|
+
"frontend/slices/notion/slices/icon-picker/lib/style-pref.ts"
|
|
948
|
+
],
|
|
949
|
+
"exampleCode": "import { IconPickerPopover, DynamicIcon } from \"@/frontend/slices/notion/slices/icon-picker\";\n\n<IconPickerPopover value={page.icon} onChange={(v) => updateIcon(v)} onClear={() => updateIcon(\"\")} />\n<DynamicIcon value={page.icon} className=\"text-2xl\" />",
|
|
950
|
+
"agentRecipe": "Single icon field stores emoji or 'lucide:Name' plus optional '?c=hex'. parseIconValue() decodes; lucideValue()/withColor() build. Add 'icon: v.string()' to Convex table — no migration needed for existing emoji fields. Popover variant for inline UI, Inline for sheets/dialogs.",
|
|
951
|
+
"tags": [
|
|
952
|
+
"icon",
|
|
953
|
+
"emoji",
|
|
954
|
+
"lucide",
|
|
955
|
+
"picker",
|
|
956
|
+
"twemoji",
|
|
957
|
+
"notion"
|
|
958
|
+
]
|
|
959
|
+
},
|
|
934
960
|
{
|
|
935
961
|
"slug": "contact-form-resend",
|
|
936
962
|
"title": "Contact Form + Resend",
|
package/lib/skills.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_meta": {
|
|
3
|
-
"description": "Claude Skills inventory —
|
|
3
|
+
"description": "Claude Skills inventory — 19 entries (sync'd from site/lib/content/claude-skills.ts). Used by CLI add-skill + builder UI + MCP server.",
|
|
4
4
|
"anthropicsRepo": "anthropics/skills",
|
|
5
5
|
"branch": "main",
|
|
6
|
-
"lastSynced": "2026-05-
|
|
6
|
+
"lastSynced": "2026-05-09"
|
|
7
7
|
},
|
|
8
8
|
"skills": [
|
|
9
9
|
{
|
|
@@ -149,6 +149,14 @@
|
|
|
149
149
|
"source": "rahman",
|
|
150
150
|
"path": "skills/rahman-resources",
|
|
151
151
|
"description": "Use the Rahman Resources kitab — discover templates, features, recipes; assemble bundles; emit npx commands."
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"slug": "rr",
|
|
155
|
+
"title": "rr — Slice/Template Author",
|
|
156
|
+
"category": "development",
|
|
157
|
+
"source": "rahman",
|
|
158
|
+
"path": ".claude/skills/rr",
|
|
159
|
+
"description": "CRUD slices and templates inside the kitab — scaffold, modify, port from superspace, validate, prep publish. Wires npm run new:slice / modify:slice / new:template plus the npx CLI."
|
|
152
160
|
}
|
|
153
161
|
]
|
|
154
162
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rahman-resources",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.2",
|
|
4
4
|
"description": "Scaffolder + installer for Rahman Resources kitab — npx rahman-resources init/add/lift/scaffold-slice/publish-slice. Tier-3 portable feature slices + manifest + skills + CRUD workflows.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|