@geoly-ai/social-hub-cli 0.0.2 → 0.0.4

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.
Files changed (93) hide show
  1. package/dist/index.d.ts.map +1 -1
  2. package/dist/index.js +2 -0
  3. package/dist/index.js.map +1 -1
  4. package/dist/register-skills.d.ts +3 -0
  5. package/dist/register-skills.d.ts.map +1 -0
  6. package/dist/register-skills.js +321 -0
  7. package/dist/register-skills.js.map +1 -0
  8. package/dist/skills/agent-targets.d.ts +7 -0
  9. package/dist/skills/agent-targets.d.ts.map +1 -0
  10. package/dist/skills/agent-targets.js +367 -0
  11. package/dist/skills/agent-targets.js.map +1 -0
  12. package/dist/skills/agent-targets.test.d.ts +2 -0
  13. package/dist/skills/agent-targets.test.d.ts.map +1 -0
  14. package/dist/skills/agent-targets.test.js +19 -0
  15. package/dist/skills/agent-targets.test.js.map +1 -0
  16. package/dist/skills/doctor.d.ts +23 -0
  17. package/dist/skills/doctor.d.ts.map +1 -0
  18. package/dist/skills/doctor.js +112 -0
  19. package/dist/skills/doctor.js.map +1 -0
  20. package/dist/skills/github-source.d.ts +34 -0
  21. package/dist/skills/github-source.d.ts.map +1 -0
  22. package/dist/skills/github-source.js +198 -0
  23. package/dist/skills/github-source.js.map +1 -0
  24. package/dist/skills/github-source.test.d.ts +2 -0
  25. package/dist/skills/github-source.test.d.ts.map +1 -0
  26. package/dist/skills/github-source.test.js +46 -0
  27. package/dist/skills/github-source.test.js.map +1 -0
  28. package/dist/skills/install-planner.d.ts +18 -0
  29. package/dist/skills/install-planner.d.ts.map +1 -0
  30. package/dist/skills/install-planner.js +91 -0
  31. package/dist/skills/install-planner.js.map +1 -0
  32. package/dist/skills/install-planner.test.d.ts +2 -0
  33. package/dist/skills/install-planner.test.d.ts.map +1 -0
  34. package/dist/skills/install-planner.test.js +41 -0
  35. package/dist/skills/install-planner.test.js.map +1 -0
  36. package/dist/skills/installer.d.ts +10 -0
  37. package/dist/skills/installer.d.ts.map +1 -0
  38. package/dist/skills/installer.js +108 -0
  39. package/dist/skills/installer.js.map +1 -0
  40. package/dist/skills/manifest.d.ts +9 -0
  41. package/dist/skills/manifest.d.ts.map +1 -0
  42. package/dist/skills/manifest.js +105 -0
  43. package/dist/skills/manifest.js.map +1 -0
  44. package/dist/skills/marketplace-adapters/claude-plugin.d.ts +6 -0
  45. package/dist/skills/marketplace-adapters/claude-plugin.d.ts.map +1 -0
  46. package/dist/skills/marketplace-adapters/claude-plugin.js +39 -0
  47. package/dist/skills/marketplace-adapters/claude-plugin.js.map +1 -0
  48. package/dist/skills/marketplace-adapters/skills-sh.d.ts +14 -0
  49. package/dist/skills/marketplace-adapters/skills-sh.d.ts.map +1 -0
  50. package/dist/skills/marketplace-adapters/skills-sh.js +24 -0
  51. package/dist/skills/marketplace-adapters/skills-sh.js.map +1 -0
  52. package/dist/skills/paths.d.ts +3 -0
  53. package/dist/skills/paths.d.ts.map +1 -0
  54. package/dist/skills/paths.js +13 -0
  55. package/dist/skills/paths.js.map +1 -0
  56. package/dist/skills/source-resolver.d.ts +16 -0
  57. package/dist/skills/source-resolver.d.ts.map +1 -0
  58. package/dist/skills/source-resolver.js +79 -0
  59. package/dist/skills/source-resolver.js.map +1 -0
  60. package/dist/skills/state-store.d.ts +9 -0
  61. package/dist/skills/state-store.d.ts.map +1 -0
  62. package/dist/skills/state-store.js +39 -0
  63. package/dist/skills/state-store.js.map +1 -0
  64. package/dist/skills/target-detector.d.ts +13 -0
  65. package/dist/skills/target-detector.d.ts.map +1 -0
  66. package/dist/skills/target-detector.js +132 -0
  67. package/dist/skills/target-detector.js.map +1 -0
  68. package/dist/skills/tui.d.ts +10 -0
  69. package/dist/skills/tui.d.ts.map +1 -0
  70. package/dist/skills/tui.js +140 -0
  71. package/dist/skills/tui.js.map +1 -0
  72. package/dist/skills/types.d.ts +94 -0
  73. package/dist/skills/types.d.ts.map +1 -0
  74. package/dist/skills/types.js +2 -0
  75. package/dist/skills/types.js.map +1 -0
  76. package/dist/update-check.d.ts.map +1 -1
  77. package/dist/update-check.js +6 -1
  78. package/dist/update-check.js.map +1 -1
  79. package/package.json +7 -5
  80. package/skills/README.md +113 -0
  81. package/skills/manifest.json +68 -0
  82. package/skills/social-hub-accounts/SKILL.md +25 -0
  83. package/skills/social-hub-admin/SKILL.md +36 -0
  84. package/skills/social-hub-calendar-jobs/SKILL.md +25 -0
  85. package/skills/social-hub-cli/SKILL.md +363 -0
  86. package/skills/social-hub-cli/evals/evals.json +23 -0
  87. package/skills/social-hub-intelligence/SKILL.md +25 -0
  88. package/skills/social-hub-migration/SKILL.md +32 -0
  89. package/skills/social-hub-openclaw-context/SKILL.md +45 -0
  90. package/skills/social-hub-ops-runtime/SKILL.md +40 -0
  91. package/skills/social-hub-posts/SKILL.md +20 -0
  92. package/skills/social-hub-publishing/SKILL.md +31 -0
  93. package/skills/social-hub-shared/SKILL.md +41 -0
@@ -0,0 +1,140 @@
1
+ import * as readline from "node:readline/promises";
2
+ import { stdin as input, stdout as output } from "node:process";
3
+ import { listAgents } from "./agent-targets.js";
4
+ import { buildInstallPlan, summarizePlan } from "./install-planner.js";
5
+ import { executePlan } from "./installer.js";
6
+ import { resolveBundledSource } from "./source-resolver.js";
7
+ import { resolveAgentDefaultTarget } from "./target-detector.js";
8
+ function isInteractive() {
9
+ return Boolean(process.stdin.isTTY && process.stdout.isTTY);
10
+ }
11
+ async function promptSelect(rl, title, choices, multi = false) {
12
+ console.log(`\n${title}`);
13
+ choices.forEach((c, i) => console.log(` ${i + 1}. ${c.label}`));
14
+ if (multi) {
15
+ console.log(" Enter numbers comma-separated (e.g. 1,3) or * for all:");
16
+ }
17
+ else {
18
+ console.log(" Enter number:");
19
+ }
20
+ const answer = (await rl.question("> ")).trim();
21
+ if (multi && answer === "*") {
22
+ return choices.map((c) => c.value);
23
+ }
24
+ const indices = answer.split(",").map((s) => Number.parseInt(s.trim(), 10) - 1);
25
+ if (multi) {
26
+ return indices
27
+ .filter((i) => i >= 0 && i < choices.length)
28
+ .map((i) => choices[i].value);
29
+ }
30
+ const idx = indices[0];
31
+ if (idx === undefined || idx < 0 || idx >= choices.length) {
32
+ throw new Error("Invalid selection");
33
+ }
34
+ return [choices[idx].value];
35
+ }
36
+ export function printNonInteractiveHint() {
37
+ console.log("Non-interactive environment detected. Use:");
38
+ console.log(" npx @geoly-ai/social-hub-cli skills install --agent cursor --global --yes");
39
+ console.log(" npx @geoly-ai/social-hub-cli skills update --all --yes");
40
+ console.log(" social-hub skills install --agent claude-code --project --yes");
41
+ }
42
+ export async function runSkillsTui(opts = {}) {
43
+ if (!isInteractive()) {
44
+ printNonInteractiveHint();
45
+ process.exit(1);
46
+ }
47
+ const rl = readline.createInterface({ input, output });
48
+ try {
49
+ const agents = listAgents();
50
+ const agentChoices = [
51
+ ...agents.map((a) => ({ label: a.label, value: a.id })),
52
+ { label: "Custom directory", value: "__custom__" },
53
+ ];
54
+ const selectedAgents = await promptSelect(rl, "Select target agent(s):", agentChoices, true);
55
+ let scope = opts.defaultScope ?? "project";
56
+ const scopeAns = (await rl.question("Scope [project/global] (default project): ")).trim();
57
+ if (scopeAns === "global")
58
+ scope = "global";
59
+ let installMode = "standalone";
60
+ if (selectedAgents.includes("claude-code")) {
61
+ const modeAns = (await rl.question("Claude install mode [standalone/plugin] (default standalone): ")).trim();
62
+ if (modeAns === "plugin")
63
+ installMode = "plugin";
64
+ }
65
+ const source = resolveBundledSource();
66
+ const skillChoices = source.manifest.skills.map((s) => ({
67
+ label: `${s.id} — ${s.description}`,
68
+ value: s.id,
69
+ }));
70
+ skillChoices.unshift({ label: "All social-hub skills", value: "*" });
71
+ const selectedSkills = await promptSelect(rl, "Select skill(s):", skillChoices, true);
72
+ const actionChoices = [
73
+ { label: "Install missing skills", value: "install" },
74
+ { label: "Update installed skills", value: "update" },
75
+ { label: "Reinstall selected skills", value: "reinstall" },
76
+ ];
77
+ const [actionRaw] = await promptSelect(rl, "Action:", actionChoices, false);
78
+ const action = actionRaw;
79
+ const methodAns = (await rl.question("Method [copy/symlink] (default copy): ")).trim();
80
+ const method = methodAns === "symlink" ? "symlink" : "copy";
81
+ const targets = [];
82
+ if (selectedAgents.includes("__custom__")) {
83
+ const dir = (await rl.question("Custom skills directory: ")).trim();
84
+ targets.push({
85
+ agentId: "custom",
86
+ label: "Custom",
87
+ dir,
88
+ scope,
89
+ installMode,
90
+ });
91
+ }
92
+ else {
93
+ for (const agentId of selectedAgents.filter((a) => a !== "__custom__")) {
94
+ targets.push(resolveAgentDefaultTarget(agentId, scope, opts.cwd));
95
+ if (installMode === "plugin" && agentId === "claude-code") {
96
+ targets[targets.length - 1].installMode = "plugin";
97
+ }
98
+ }
99
+ }
100
+ const plan = buildInstallPlan({
101
+ action,
102
+ source,
103
+ targets,
104
+ skillIds: selectedSkills.includes("*") ? ["*"] : selectedSkills,
105
+ method,
106
+ force: action === "reinstall",
107
+ });
108
+ const summary = summarizePlan(plan);
109
+ console.log("\nPlan:");
110
+ console.log(JSON.stringify({ summary, items: plan.items, skipped: plan.skipped }, null, 2));
111
+ if (plan.items.length === 0) {
112
+ console.log("Nothing to do.");
113
+ return;
114
+ }
115
+ const confirm = (await rl.question("Proceed? [y/N]: ")).trim().toLowerCase();
116
+ if (confirm !== "y" && confirm !== "yes") {
117
+ console.log("Cancelled.");
118
+ return;
119
+ }
120
+ const result = executePlan(plan);
121
+ console.log(`Applied ${result.applied.length} item(s).`);
122
+ if (result.errors.length) {
123
+ for (const err of result.errors) {
124
+ console.error(`${err.item.skillId}: ${err.error}`);
125
+ }
126
+ process.exit(1);
127
+ }
128
+ }
129
+ finally {
130
+ rl.close();
131
+ }
132
+ }
133
+ export async function runSkillsBootstrap(opts = {}) {
134
+ if (isInteractive()) {
135
+ await runSkillsTui(opts);
136
+ return;
137
+ }
138
+ printNonInteractiveHint();
139
+ }
140
+ //# sourceMappingURL=tui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/skills/tui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAwB,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AASvF,SAAS,aAAa;IACpB,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,EAAsB,EACtB,KAAa,EACb,OAA2C,EAC3C,KAAK,GAAG,KAAK;IAEb,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IAC1B,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACjE,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;IAC1E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAChD,IAAI,KAAK,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAChF,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,OAAO;aACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;aAC3C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,GAAG,CAAE,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;IAC3F,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAmB,EAAE;IACtD,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;QACrB,uBAAuB,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,YAAY,GAAG;YACnB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvD,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,YAAY,EAAE;SACnD,CAAC;QACF,MAAM,cAAc,GAAG,MAAM,YAAY,CACvC,EAAE,EACF,yBAAyB,EACzB,YAAY,EACZ,IAAI,CACL,CAAC;QAEF,IAAI,KAAK,GAAiB,IAAI,CAAC,YAAY,IAAI,SAAS,CAAC;QACzD,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1F,IAAI,QAAQ,KAAK,QAAQ;YAAE,KAAK,GAAG,QAAQ,CAAC;QAE5C,IAAI,WAAW,GAAgB,YAAY,CAAC;QAC5C,IAAI,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gEAAgE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7G,IAAI,OAAO,KAAK,QAAQ;gBAAE,WAAW,GAAG,QAAQ,CAAC;QACnD,CAAC;QAED,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;QACtC,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtD,KAAK,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,WAAW,EAAE;YACnC,KAAK,EAAE,CAAC,CAAC,EAAE;SACZ,CAAC,CAAC,CAAC;QACJ,YAAY,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACrE,MAAM,cAAc,GAAG,MAAM,YAAY,CAAC,EAAE,EAAE,kBAAkB,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;QAEtF,MAAM,aAAa,GAAG;YACpB,EAAE,KAAK,EAAE,wBAAwB,EAAE,KAAK,EAAE,SAAS,EAAE;YACrD,EAAE,KAAK,EAAE,yBAAyB,EAAE,KAAK,EAAE,QAAQ,EAAE;YACrD,EAAE,KAAK,EAAE,2BAA2B,EAAE,KAAK,EAAE,WAAW,EAAE;SAC3D,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,SAAuB,CAAC;QAEvC,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACvF,MAAM,MAAM,GAAkB,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;QAE3E,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,IAAI,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC;gBACX,OAAO,EAAE,QAAQ;gBACjB,KAAK,EAAE,QAAQ;gBACf,GAAG;gBACH,KAAK;gBACL,WAAW;aACZ,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,YAAY,CAAC,EAAE,CAAC;gBACvE,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAClE,IAAI,WAAW,KAAK,QAAQ,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;oBAC1D,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,WAAW,GAAG,QAAQ,CAAC;gBACtD,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAG,gBAAgB,CAAC;YAC5B,MAAM;YACN,MAAM;YACN,OAAO;YACP,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc;YAC/D,MAAM;YACN,KAAK,EAAE,MAAM,KAAK,WAAW;SAC9B,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAE5F,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC7E,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,OAAO,CAAC,MAAM,WAAW,CAAC,CAAC;QACzD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACzB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChC,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAmB,EAAE;IAC5D,IAAI,aAAa,EAAE,EAAE,CAAC;QACpB,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO;IACT,CAAC;IACD,uBAAuB,EAAE,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,94 @@
1
+ export type InstallScope = "global" | "project";
2
+ export type InstallMethod = "copy" | "symlink";
3
+ export type InstallMode = "standalone" | "plugin";
4
+ export type PlanAction = "install" | "update" | "remove" | "reinstall";
5
+ export type SkillManifestEntry = {
6
+ id: string;
7
+ path: string;
8
+ description: string;
9
+ };
10
+ export type SkillsManifest = {
11
+ version: number;
12
+ package: string;
13
+ cliVersion: string;
14
+ repository: string;
15
+ skills: SkillManifestEntry[];
16
+ };
17
+ export type ResolvedSkill = {
18
+ id: string;
19
+ path: string;
20
+ description: string;
21
+ skillDir: string;
22
+ skillMdPath: string;
23
+ skillVersion?: string;
24
+ cliVersion?: string;
25
+ };
26
+ export type SkillSourceKind = "bundled" | "local" | "github" | "skillsh";
27
+ export type SkillSource = {
28
+ kind: SkillSourceKind;
29
+ ref: string;
30
+ version: string;
31
+ skillsRoot: string;
32
+ manifest: SkillsManifest;
33
+ digest?: string;
34
+ remote?: {
35
+ repo: string;
36
+ ref: string;
37
+ skillsPath: string;
38
+ cachedAt?: string;
39
+ cacheDir?: string;
40
+ };
41
+ };
42
+ export type AgentTarget = {
43
+ id: string;
44
+ label: string;
45
+ aliases?: string[];
46
+ projectPaths: string[];
47
+ globalPaths: string[];
48
+ marketplaceModes?: InstallMode[];
49
+ };
50
+ export type InstallTarget = {
51
+ agentId: string;
52
+ label: string;
53
+ dir: string;
54
+ scope: InstallScope;
55
+ installMode: InstallMode;
56
+ };
57
+ export type InstalledSkillRecord = {
58
+ id: string;
59
+ skillVersion: string;
60
+ checksum: string;
61
+ targetAgent: string;
62
+ targetDir: string;
63
+ installMode: InstallMode;
64
+ installedFiles: string[];
65
+ updatedAt: string;
66
+ };
67
+ export type SkillsState = {
68
+ source: string;
69
+ package: string;
70
+ version: string;
71
+ sourceDigest?: string;
72
+ installedAt: string;
73
+ updatedAt: string;
74
+ skills: InstalledSkillRecord[];
75
+ };
76
+ export type PlanItem = {
77
+ action: PlanAction;
78
+ skillId: string;
79
+ target: InstallTarget;
80
+ fromDir: string;
81
+ toDir: string;
82
+ method: InstallMethod;
83
+ overwrite: boolean;
84
+ };
85
+ export type InstallPlan = {
86
+ source: SkillSource;
87
+ items: PlanItem[];
88
+ skipped: {
89
+ skillId: string;
90
+ targetDir: string;
91
+ reason: string;
92
+ }[];
93
+ };
94
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/skills/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/skills/types.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"AA8BA,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAavE;AA0DD,wBAAsB,iBAAiB,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBpF"}
1
+ {"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"AA+BA,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAavE;AA8DD,wBAAsB,iBAAiB,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBpF"}
@@ -1,6 +1,7 @@
1
1
  import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
2
  import { homedir } from "node:os";
3
3
  import { join } from "node:path";
4
+ import { isRunningViaNpx } from "./skills/paths.js";
4
5
  import { getCliVersion } from "./version-info.js";
5
6
  const PACKAGE_NAME = "@geoly-ai/social-hub-cli";
6
7
  const REGISTRY_URL = `https://registry.npmjs.org/${PACKAGE_NAME.replace("/", "%2F")}/latest`;
@@ -81,10 +82,14 @@ async function fetchLatestVersion() {
81
82
  }
82
83
  }
83
84
  function printUpdateNotice(current, latest) {
85
+ const upgradeLine = isRunningViaNpx()
86
+ ? `Run npx ${PACKAGE_NAME}@${latest} … to upgrade`
87
+ : `Run npm update -g ${PACKAGE_NAME} to upgrade`;
84
88
  process.stderr.write([
85
89
  "",
86
90
  `Update available ${current} → ${latest}`,
87
- `Run npm update -g ${PACKAGE_NAME} to upgrade`,
91
+ upgradeLine,
92
+ `After upgrading CLI, run: social-hub skills update --yes`,
88
93
  "",
89
94
  ].join("\n"));
90
95
  }
@@ -1 +1 @@
1
- {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,YAAY,GAAG,0BAA0B,CAAC;AAChD,MAAM,YAAY,GAAG,8BAA8B,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC;AAC7F,MAAM,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACzC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACtD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,8BAA8B,CAAC,CAAC;AAOnE,SAAS,qBAAqB,CAAC,IAAc;IAC3C,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACnE,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAC3E,IAAI,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IACnE,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,OAAe;IAC5D,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,EAAE,CAC9B,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3E,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;IAC1B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS;IAChB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAgB,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,IAAI,CAAC;QACH,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,aAAa,CACX,UAAU,EACV,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EACxE,MAAM,CACP,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;IAChC,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAkB;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC9C,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,YAAY,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,kBAAkB;IAC/B,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACrE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE;YACpC,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;SACxC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAyB,CAAC;QACxD,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe,EAAE,MAAc;IACxD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB;QACE,EAAE;QACF,oBAAoB,OAAO,MAAM,MAAM,EAAE;QACzC,qBAAqB,YAAY,aAAa;QAC9C,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAiB,OAAO,CAAC,IAAI;IACnE,IAAI,qBAAqB,CAAC,IAAI,CAAC;QAAE,OAAO;IAExC,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO;IAElC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,IAAI,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;YAC3C,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAC1C,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,UAAU,CAAC,MAAM,CAAC,CAAC;IACnB,IAAI,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QACpC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,YAAY,GAAG,0BAA0B,CAAC;AAChD,MAAM,YAAY,GAAG,8BAA8B,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC;AAC7F,MAAM,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACzC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACtD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,8BAA8B,CAAC,CAAC;AAOnE,SAAS,qBAAqB,CAAC,IAAc;IAC3C,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACnE,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAC3E,IAAI,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IACnE,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,OAAe;IAC5D,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,EAAE,CAC9B,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3E,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;IAC1B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS;IAChB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAgB,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,IAAI,CAAC;QACH,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,aAAa,CACX,UAAU,EACV,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EACxE,MAAM,CACP,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;IAChC,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAkB;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC9C,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,YAAY,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,kBAAkB;IAC/B,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACrE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE;YACpC,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;SACxC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAyB,CAAC;QACxD,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe,EAAE,MAAc;IACxD,MAAM,WAAW,GAAG,eAAe,EAAE;QACnC,CAAC,CAAC,WAAW,YAAY,IAAI,MAAM,eAAe;QAClD,CAAC,CAAC,qBAAqB,YAAY,aAAa,CAAC;IACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB;QACE,EAAE;QACF,oBAAoB,OAAO,MAAM,MAAM,EAAE;QACzC,WAAW;QACX,0DAA0D;QAC1D,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAiB,OAAO,CAAC,IAAI;IACnE,IAAI,qBAAqB,CAAC,IAAI,CAAC;QAAE,OAAO;IAExC,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO;IAElC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,IAAI,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;YAC3C,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAC1C,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,UAAU,CAAC,MAAM,CAAC,CAAC;IACnB,IAAI,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QACpC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geoly-ai/social-hub-cli",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "type": "module",
5
5
  "description": "social-hub CLI for Social Ops Hub",
6
6
  "repository": {
@@ -12,15 +12,16 @@
12
12
  "access": "public"
13
13
  },
14
14
  "files": [
15
- "dist"
15
+ "dist",
16
+ "skills"
16
17
  ],
17
18
  "bin": {
18
19
  "social-hub": "./dist/index.js"
19
20
  },
20
21
  "dependencies": {
21
22
  "commander": "^12.1.0",
22
- "@geoly-ai/social-hub-sdk": "0.0.2",
23
- "@geoly-ai/social-hub-authz": "0.0.2"
23
+ "@geoly-ai/social-hub-authz": "0.0.3",
24
+ "@geoly-ai/social-hub-sdk": "0.0.3"
24
25
  },
25
26
  "devDependencies": {
26
27
  "@types/node": "^22.10.2",
@@ -28,7 +29,8 @@
28
29
  "vitest": "^2.1.8"
29
30
  },
30
31
  "scripts": {
31
- "build": "tsc",
32
+ "copy-skills": "node ../../scripts/copy-skills-to-cli.mjs",
33
+ "build": "pnpm run copy-skills && tsc",
32
34
  "typecheck": "tsc --noEmit",
33
35
  "test": "vitest run"
34
36
  }
@@ -0,0 +1,113 @@
1
+ # Social Hub Agent Skills
2
+
3
+ 本目录与 `@geoly-ai/social-hub-cli`、SDK、`@social-ops-hub/contracts` 同仓发布。Agent 通过 **`social-hub` CLI** 读写 Hub;Skill 只描述何时用哪条命令、权限与流程。
4
+
5
+ ### Skills 来源
6
+
7
+ | 来源 | 命令 | 说明 |
8
+ |------|------|------|
9
+ | **bundled(默认)** | `social-hub skills install …` | npm 包内置,离线可用,与 CLI 版本对齐 |
10
+ | **GitHub** | `--source github --repo geoly-ai/geoly-reddit [--ref main]` | 从 GitHub 拉取 `social-ops-hub/skills`,缓存 24h |
11
+ | **skill.sh** | `--source skillsh --repo owner/name` | 与 GitHub 相同拉取逻辑(skill.sh 导入仓库) |
12
+ | **local** | `--source local --local-path ./skills` | 本地目录 |
13
+
14
+ ```bash
15
+ # 从 GitHub 安装最新 skill(缓存 ~/.cache/social-hub/skills/github/…)
16
+ social-hub skills install --source github --agent cursor --global --yes
17
+
18
+ # 强制刷新 GitHub 缓存
19
+ social-hub skills update --source github --refresh --yes
20
+
21
+ # 清除缓存
22
+ social-hub skills cache clear
23
+ ```
24
+
25
+ 环境变量:`SOCIAL_HUB_SKILLS_REPO`、`SOCIAL_HUB_SKILLS_REF`、`SOCIAL_HUB_SKILLS_PATH`、`GITHUB_TOKEN`(**私有仓库必填**)
26
+
27
+ 默认仓库 `geoly-ai/geoly-reddit` 若为私有,需先 `export GITHUB_TOKEN=ghp_...` 再执行 `--source github`。
28
+
29
+ ## 安装 Agent Skills(推荐 CLI)
30
+
31
+ Skills 随 `@geoly-ai/social-hub-cli` 一起发布(npm tarball 内置 `skills/`)。
32
+
33
+ ```bash
34
+ # 交互式(选 agent、skill、install/update)
35
+ social-hub skills tui
36
+
37
+ # 或脚本化
38
+ social-hub skills install --agent cursor --global --yes
39
+ social-hub skills install --agent claude-code --project --yes
40
+ social-hub skills install --agent codex --global --all --yes
41
+
42
+ # 更新到当前 CLI 内置版本
43
+ social-hub skills update --all --yes
44
+
45
+ # 健康检查
46
+ social-hub skills doctor --json
47
+
48
+ # 无需全局安装
49
+ npx @geoly-ai/social-hub-cli skills bootstrap
50
+ pnpm dlx @geoly-ai/social-hub-cli skills list
51
+ ```
52
+
53
+ 支持 [skill.sh](https://skill.sh) 兼容的全部 agent(`social-hub skills list --agents`)。安装状态记录在目标目录下的 `.social-hub-skills.json`。
54
+
55
+ ## 发布到 skill 市场(skill.sh / Agent Skill Hub)
56
+
57
+ 1. 将本仓库推送到 GitHub(`skills/` 保持在仓库内)。
58
+ 2. 在 [skill.sh](https://skill.sh) 或 Agent Skill Hub 添加仓库 URL,选择要导入的 skill 目录(如 `skills/social-hub-cli`)。
59
+ 3. 用户安装示例(以市场 CLI 为准,名称可能为 `skill`、`skhub` 等):
60
+
61
+ ```bash
62
+ # 示例:从 registry 安装(具体命令以 skill.sh 文档为准)
63
+ skill add <org>/social-ops-hub/social-hub-cli
64
+ skill add <org>/social-ops-hub/social-hub-ops-runtime
65
+ ```
66
+
67
+ 每个 skill 为独立目录,内含 `SKILL.md`(YAML frontmatter 含 `name`、`description`)。
68
+
69
+ ## 本地开发安装(任意 IDE)
70
+
71
+ | 方式 | 说明 |
72
+ |------|------|
73
+ | **CLI(推荐)** | `social-hub skills install --agent cursor` 或 `social-hub skills tui` |
74
+ | **npx** | `npx @geoly-ai/social-hub-cli skills bootstrap` |
75
+ | **项目内脚本** | `pnpm skills:install` → 默认 `.agents/skills/` |
76
+ | **指定目录** | `SKILLS_INSTALL_DIR=~/.cursor/skills pnpm skills:install` |
77
+ | **符号链接** | `social-hub skills install --symlink --dir <path>` |
78
+
79
+ ```bash
80
+ # 默认:复制到 social-ops-hub/.agents/skills/
81
+ pnpm skills:install
82
+
83
+ # 安装到自定义目录(Cursor / Codex / Claude Code / 其他)
84
+ SKILLS_INSTALL_DIR="$HOME/.config/your-agent/skills" pnpm skills:install
85
+
86
+ # 校验 frontmatter 与 manifest
87
+ pnpm skills:check
88
+ ```
89
+
90
+ 安装后**重启或重新加载**当前 IDE/Agent 的 skill 列表(各产品入口不同)。
91
+
92
+ ## Skill 列表
93
+
94
+ | Skill | 用途 |
95
+ |-------|------|
96
+ | [social-hub-cli](social-hub-cli) | 总路由 + 命令速查 |
97
+ | [social-hub-shared](social-hub-shared) | config、auth、doctor、context |
98
+ | [social-hub-ops-runtime](social-hub-ops-runtime) | claim / complete / fail |
99
+ | [social-hub-openclaw-context](social-hub-openclaw-context) | DB 聚合上下文 |
100
+ | [social-hub-accounts](social-hub-accounts) | 账号 |
101
+ | [social-hub-posts](social-hub-posts) | Reddit 帖 |
102
+ | [social-hub-calendar-jobs](social-hub-calendar-jobs) | 日历与任务 |
103
+ | [social-hub-publishing](social-hub-publishing) | 发布闭环 |
104
+ | [social-hub-admin](social-hub-admin) | 系统/团队管理 |
105
+ | [social-hub-intelligence](social-hub-intelligence) | 板块情报 |
106
+ | [social-hub-migration](social-hub-migration) | 导入导出与 replay |
107
+
108
+ 清单见 [manifest.json](manifest.json)。与 API/CLI 对齐情况见仓库 `docs/cli-api-coverage.md`。
109
+
110
+ ## 版本
111
+
112
+ - CLI / SDK / contracts 与 skills 使用同一 git tag 发布。
113
+ - 各 `SKILL.md` 的 `metadata` 可声明 `cliVersion: ">=0.0.1"`(见 frontmatter)。
@@ -0,0 +1,68 @@
1
+ {
2
+ "version": 1,
3
+ "package": "social-ops-hub",
4
+ "cliVersion": "0.0.4",
5
+ "repository": "social-ops-hub",
6
+ "publish": {
7
+ "registry": "https://skill.sh",
8
+ "layout": "skills/<skill-id>/SKILL.md",
9
+ "note": "Import this GitHub repo on skill.sh; select skill subdirectories under skills/"
10
+ },
11
+ "skills": [
12
+ {
13
+ "id": "social-hub-cli",
14
+ "path": "social-hub-cli",
15
+ "description": "总路由:Hub CLI 触发词与领域 Skill 索引"
16
+ },
17
+ {
18
+ "id": "social-hub-shared",
19
+ "path": "social-hub-shared",
20
+ "description": "config、auth、doctor、permissions、context"
21
+ },
22
+ {
23
+ "id": "social-hub-ops-runtime",
24
+ "path": "social-hub-ops-runtime",
25
+ "description": "OpenClaw 任务 claim、heartbeat、complete、fail、skip"
26
+ },
27
+ {
28
+ "id": "social-hub-openclaw-context",
29
+ "path": "social-hub-openclaw-context",
30
+ "description": "DB-first 账号/任务上下文与板块候选"
31
+ },
32
+ {
33
+ "id": "social-hub-accounts",
34
+ "path": "social-hub-accounts",
35
+ "description": "账号 CRUD、品牌绑定、状态快照"
36
+ },
37
+ {
38
+ "id": "social-hub-posts",
39
+ "path": "social-hub-posts",
40
+ "description": "Reddit 帖快照、刷新、统计"
41
+ },
42
+ {
43
+ "id": "social-hub-calendar-jobs",
44
+ "path": "social-hub-calendar-jobs",
45
+ "description": "日历、调度任务、retry/cancel"
46
+ },
47
+ {
48
+ "id": "social-hub-publishing",
49
+ "path": "social-hub-publishing",
50
+ "description": "campaign 到 report 发布闭环"
51
+ },
52
+ {
53
+ "id": "social-hub-admin",
54
+ "path": "social-hub-admin",
55
+ "description": "settings、invites、members、api-keys"
56
+ },
57
+ {
58
+ "id": "social-hub-intelligence",
59
+ "path": "social-hub-intelligence",
60
+ "description": "板块情报 watchlists、hot posts、industry pools"
61
+ },
62
+ {
63
+ "id": "social-hub-migration",
64
+ "path": "social-hub-migration",
65
+ "description": "JSONL 导入导出、runbook replay"
66
+ }
67
+ ]
68
+ }
@@ -0,0 +1,25 @@
1
+ ---
2
+ name: social-hub-accounts
3
+ description: >-
4
+ Social Hub 社交账号:social-hub accounts list/get/create/update/delete、brand-bindings、status-snapshots。
5
+ 用户要查 Reddit 账号、改 handle、绑品牌、看账号状态快照、同步飞书账号字段时用本 skill。
6
+ metadata:
7
+ cliVersion: ">=0.0.1"
8
+ ---
9
+
10
+ # social-hub-accounts
11
+
12
+ ```bash
13
+ social-hub accounts list -t "$T" -n 50
14
+ social-hub accounts get -t "$T" --id "<uuid>"
15
+ social-hub accounts update -t "$T" --id "<uuid>" -j '{"workflowStage":"active",...}'
16
+ social-hub accounts delete -t "$T" --id "<uuid>" # 危险:需确认
17
+
18
+ social-hub accounts brand-bindings list -t "$T" --account "<uuid>"
19
+ social-hub accounts brand-bindings add -t "$T" --account "<uuid>" -j '{"brandId":"..."}'
20
+ social-hub accounts brand-bindings remove -t "$T" --account "<uuid>" --brand "<brandId>"
21
+
22
+ social-hub accounts status-snapshots list -t "$T" --account "<uuid>"
23
+ ```
24
+
25
+ OpenClaw 执行前优先 `social-hub context account`(见 `social-hub-openclaw-context`),不要只读本地 `account-profiles/*.md`。
@@ -0,0 +1,36 @@
1
+ ---
2
+ name: social-hub-admin
3
+ description: >-
4
+ Social Hub 管理面:settings、invites、members、api-keys、agent-teams、users。
5
+ 用户要改系统设置、发团队邀请、列成员、轮换 API Key 时用本 skill;高风险写操作需 --apply。
6
+ metadata:
7
+ cliVersion: ">=0.0.1"
8
+ ---
9
+
10
+ # social-hub-admin
11
+
12
+ ## Settings(admin)
13
+
14
+ ```bash
15
+ social-hub settings list
16
+ social-hub settings get <key>
17
+ social-hub settings set <key> --value "..." --dry-run
18
+ social-hub settings set <key> --value "..." --apply
19
+ ```
20
+
21
+ ## Invites
22
+
23
+ ```bash
24
+ social-hub invites list -t "$T"
25
+ social-hub invites create -t "$T" --email user@example.com --role manager --dry-run
26
+ social-hub invites create -t "$T" --email user@example.com --role manager --apply
27
+ social-hub invites revoke -t "$T" --id "<inviteId>" --apply
28
+ ```
29
+
30
+ ## Members
31
+
32
+ ```bash
33
+ social-hub members list
34
+ ```
35
+
36
+ API Keys、users、agent-teams 等见 `social-hub-cli` 管理章节。
@@ -0,0 +1,25 @@
1
+ ---
2
+ name: social-hub-calendar-jobs
3
+ description: >-
4
+ 发布日历与调度任务:social-hub calendar list、jobs list/create/batch/retry/cancel。
5
+ 用户要排期、查 scheduled job、重试失败任务、取消任务时用本 skill;Agent 执行态回填优先 ops-runtime。
6
+ metadata:
7
+ cliVersion: ">=0.0.1"
8
+ ---
9
+
10
+ # social-hub-calendar-jobs
11
+
12
+ ```bash
13
+ social-hub calendar list -t "$T"
14
+ social-hub jobs list -t "$T" --status scheduled
15
+ social-hub jobs create -t "$T" -j '{"socialAccountId":"...","subreddit":"...","runAt":"..."}'
16
+ social-hub jobs retry -t "$T" --job "<id>"
17
+ social-hub jobs cancel -t "$T" --job "<id>"
18
+ ```
19
+
20
+ 遗留:`jobs agent-status` 仍可更新状态,但 OpenClaw 推荐:
21
+
22
+ ```bash
23
+ social-hub ops claim-next -t "$T" --agent "<agentId>"
24
+ social-hub ops complete|fail|skip ...
25
+ ```