cc-claw 0.3.4 → 0.3.5

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 (2) hide show
  1. package/dist/cli.js +40 -16
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -48,7 +48,7 @@ var VERSION;
48
48
  var init_version = __esm({
49
49
  "src/version.ts"() {
50
50
  "use strict";
51
- VERSION = true ? "0.3.4" : (() => {
51
+ VERSION = true ? "0.3.5" : (() => {
52
52
  try {
53
53
  return JSON.parse(readFileSync(join2(process.cwd(), "package.json"), "utf-8")).version ?? "unknown";
54
54
  } catch {
@@ -9761,20 +9761,8 @@ Topics: ${s.topics}`;
9761
9761
  await channel.sendText(chatId, "No skills found. Install skills with /skill-install <github-url> or place them in ~/.cc-claw/workspace/skills/", "plain");
9762
9762
  return;
9763
9763
  }
9764
- if (typeof channel.sendKeyboard === "function") {
9765
- const buttons = skills2.map((s) => {
9766
- const tags = s.sources.join(", ");
9767
- return [{ label: `${s.name} [${tags}]`, data: `skill:${s.source}:${s.name}` }];
9768
- });
9769
- await channel.sendKeyboard(chatId, `${skills2.length} skills available. Select one to invoke:`, buttons);
9770
- } else {
9771
- const lines = skills2.map((s) => {
9772
- const tags = s.sources.join(", ");
9773
- const desc = s.description ? ` \u2014 ${s.description.slice(0, 50)}` : "";
9774
- return `\u2022 ${s.name} [${tags}]${desc}`;
9775
- });
9776
- await channel.sendText(chatId, ["Available skills:", "", ...lines].join("\n"), "plain");
9777
- }
9764
+ const page = commandArgs ? parseInt(commandArgs, 10) || 1 : 1;
9765
+ await sendSkillsPage(chatId, channel, skills2, page);
9778
9766
  break;
9779
9767
  }
9780
9768
  case "skill-install": {
@@ -10743,6 +10731,10 @@ ${PERM_MODES[chosen]}`,
10743
10731
  touchBookmark(chatId, alias);
10744
10732
  logActivity(getDb(), { chatId, source: "telegram", eventType: "config_changed", summary: `Working directory set to ${bookmark.path}`, detail: { field: "cwd", value: bookmark.path } });
10745
10733
  await sendCwdSessionChoice(chatId, bookmark.path, channel);
10734
+ } else if (data.startsWith("skills:page:")) {
10735
+ const page = parseInt(data.slice(12), 10);
10736
+ const skills2 = await discoverAllSkills();
10737
+ await sendSkillsPage(chatId, channel, skills2, page);
10746
10738
  } else if (data.startsWith("skill:")) {
10747
10739
  const parts = data.slice(6).split(":");
10748
10740
  let skillName;
@@ -10919,7 +10911,38 @@ function isTextExt(ext) {
10919
10911
  "log"
10920
10912
  ].includes(ext);
10921
10913
  }
10922
- var PERM_MODES, VERBOSE_LEVELS, CLI_INSTALL_HINTS, BLOCKED_PATH_PATTERNS2;
10914
+ async function sendSkillsPage(chatId, channel, skills2, page) {
10915
+ const totalPages = Math.ceil(skills2.length / SKILLS_PER_PAGE);
10916
+ const safePage = Math.max(1, Math.min(page, totalPages));
10917
+ const start = (safePage - 1) * SKILLS_PER_PAGE;
10918
+ const pageSkills = skills2.slice(start, start + SKILLS_PER_PAGE);
10919
+ if (typeof channel.sendKeyboard !== "function") {
10920
+ const lines = pageSkills.map((s) => {
10921
+ const tags = s.sources.join(", ");
10922
+ const desc = s.description ? ` \u2014 ${s.description.slice(0, 50)}` : "";
10923
+ return `\u2022 ${s.name} [${tags}]${desc}`;
10924
+ });
10925
+ const header3 = totalPages > 1 ? `Skills (page ${safePage}/${totalPages}, ${skills2.length} total):` : "Available skills:";
10926
+ const footer = totalPages > 1 ? `
10927
+ Use /skills <page> to navigate (e.g. /skills 2)` : "";
10928
+ await channel.sendText(chatId, [header3, "", ...lines, footer].join("\n"), "plain");
10929
+ return;
10930
+ }
10931
+ const buttons = pageSkills.map((s) => {
10932
+ const tags = s.sources.join(", ");
10933
+ return [{ label: `${s.name} [${tags}]`, data: `skill:${s.source}:${s.name}` }];
10934
+ });
10935
+ if (totalPages > 1) {
10936
+ const navRow = [];
10937
+ if (safePage > 1) navRow.push({ label: `\u2190 Page ${safePage - 1}`, data: `skills:page:${safePage - 1}` });
10938
+ navRow.push({ label: `${safePage}/${totalPages}`, data: "skills:page:noop" });
10939
+ if (safePage < totalPages) navRow.push({ label: `Page ${safePage + 1} \u2192`, data: `skills:page:${safePage + 1}` });
10940
+ buttons.push(navRow);
10941
+ }
10942
+ const header2 = totalPages > 1 ? `${skills2.length} skills (page ${safePage}/${totalPages}). Select one to invoke:` : `${skills2.length} skills available. Select one to invoke:`;
10943
+ await channel.sendKeyboard(chatId, header2, buttons);
10944
+ }
10945
+ var PERM_MODES, VERBOSE_LEVELS, CLI_INSTALL_HINTS, BLOCKED_PATH_PATTERNS2, SKILLS_PER_PAGE;
10923
10946
  var init_router = __esm({
10924
10947
  "src/router.ts"() {
10925
10948
  "use strict";
@@ -10976,6 +10999,7 @@ var init_router = __esm({
10976
10999
  /\/etc\/shadow$/,
10977
11000
  /\/etc\/passwd$/
10978
11001
  ];
11002
+ SKILLS_PER_PAGE = 25;
10979
11003
  }
10980
11004
  });
10981
11005
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cc-claw",
3
- "version": "0.3.4",
3
+ "version": "0.3.5",
4
4
  "description": "CC-Claw: Personal AI assistant on Telegram — multi-backend (Claude, Gemini, Codex), sub-agent orchestration, MCP management",
5
5
  "type": "module",
6
6
  "main": "dist/cli.js",