@juho0719/cckit 0.2.3 → 0.2.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 (27) hide show
  1. package/assets/hooks/agent-track.sh +53 -0
  2. package/assets/hooks/auto-commit-push.sh +123 -0
  3. package/assets/hooks/on-prompt-start.sh +6 -0
  4. package/assets/hooks/skill-track.sh +26 -0
  5. package/assets/hooks/subagent-notify.sh +20 -0
  6. package/assets/skills/plan-viewer/SKILL.md +162 -0
  7. package/assets/skills/plan-viewer/scripts/frame-template.html +266 -0
  8. package/assets/skills/plan-viewer/scripts/helper.js +84 -0
  9. package/assets/skills/plan-viewer/scripts/server.js +334 -0
  10. package/assets/skills/plan-viewer/scripts/start-server.sh +122 -0
  11. package/assets/skills/plan-viewer/scripts/stop-server.sh +27 -0
  12. package/assets/skills/plan-viewer/spec-reviewer-prompt.md +47 -0
  13. package/assets/skills/plan-viewer/visual-guide.md +234 -0
  14. package/assets/skills/scaffold/SKILL.md +119 -0
  15. package/assets/skills/scaffold/presets.md +94 -0
  16. package/assets/skills/scaffold/scripts/common.sh +73 -0
  17. package/assets/skills/scaffold/scripts/monorepo.sh +449 -0
  18. package/assets/skills/scaffold/scripts/nextjs-fullstack.sh +305 -0
  19. package/assets/statusline/statusline.sh +186 -0
  20. package/dist/{chunk-OLLOS3GG.js → chunk-E3INXQNO.js} +38 -8
  21. package/dist/{chunk-SLVASXTF.js → chunk-W7RWPDBH.js} +13 -3
  22. package/dist/{cli-6WQMAFNA.js → cli-KZYBSIXO.js} +43 -14
  23. package/dist/{hooks-S73JTX2I.js → hooks-A2WQ2LGG.js} +1 -1
  24. package/dist/index.js +10 -10
  25. package/dist/{registry-BU55RMHU.js → registry-KRLOB4TH.js} +1 -1
  26. package/dist/{uninstall-cli-7XGNDIUC.js → uninstall-cli-GLYJG5V2.js} +2 -2
  27. package/package.json +1 -1
@@ -12,7 +12,7 @@ import {
12
12
  getMcpServers,
13
13
  getRuleCategories,
14
14
  getSkills
15
- } from "./chunk-OLLOS3GG.js";
15
+ } from "./chunk-E3INXQNO.js";
16
16
  import {
17
17
  installAgents
18
18
  } from "./chunk-EYY2IZ7N.js";
@@ -24,13 +24,18 @@ import {
24
24
  } from "./chunk-3Y26YU4R.js";
25
25
  import {
26
26
  installHooks
27
- } from "./chunk-SLVASXTF.js";
27
+ } from "./chunk-W7RWPDBH.js";
28
28
  import {
29
29
  installRules
30
30
  } from "./chunk-ID643AV4.js";
31
- import "./chunk-K25UZZVG.js";
32
- import "./chunk-3GUKEMND.js";
33
31
  import {
32
+ backupIfExists
33
+ } from "./chunk-K25UZZVG.js";
34
+ import {
35
+ copyFileUtil
36
+ } from "./chunk-3GUKEMND.js";
37
+ import {
38
+ getAssetsDir,
34
39
  getGlobalDir,
35
40
  getProjectDir
36
41
  } from "./chunk-5XOKKPAA.js";
@@ -39,7 +44,20 @@ import {
39
44
  import { checkbox, select, input, confirm } from "@inquirer/prompts";
40
45
  import chalk from "chalk";
41
46
  import ora from "ora";
47
+ import { join as join2 } from "path";
48
+
49
+ // src/installers/statusline.ts
42
50
  import { join } from "path";
51
+ import { chmod } from "fs/promises";
52
+ async function installStatusline() {
53
+ const src = join(getAssetsDir(), "statusline", "statusline.sh");
54
+ const dest = join(getGlobalDir(), "statusline.sh");
55
+ await backupIfExists(dest);
56
+ await copyFileUtil(src, dest);
57
+ await chmod(dest, 493);
58
+ }
59
+
60
+ // src/cli.ts
43
61
  function printBanner() {
44
62
  console.log(
45
63
  chalk.cyan.bold(`
@@ -79,7 +97,8 @@ async function runCli() {
79
97
  { name: "Hooks - Post-tool hooks", value: "hooks" },
80
98
  { name: "Rules - CLAUDE.md rules", value: "rules" },
81
99
  { name: "MCPs - MCP server configs", value: "mcps" },
82
- { name: "ClaudeMd - Behavioral guidelines", value: "claudemd" }
100
+ { name: "ClaudeMd - Behavioral guidelines", value: "claudemd" },
101
+ { name: "Statusline - Terminal statusline script", value: "statusline" }
83
102
  ]
84
103
  });
85
104
  if (selectedCategories.length === 0) {
@@ -95,7 +114,8 @@ async function runCli() {
95
114
  ruleCategories: [],
96
115
  mcps: [],
97
116
  mcpEnvValues: /* @__PURE__ */ new Map(),
98
- claudemds: []
117
+ claudemds: [],
118
+ statusline: false
99
119
  };
100
120
  const skippedMcps = /* @__PURE__ */ new Map();
101
121
  if (selectedCategories.includes("agents")) {
@@ -164,6 +184,9 @@ async function runCli() {
164
184
  }))
165
185
  });
166
186
  }
187
+ if (selectedCategories.includes("statusline")) {
188
+ plan.statusline = true;
189
+ }
167
190
  if (selectedCategories.includes("mcps")) {
168
191
  const allMcps = await getMcpServers();
169
192
  plan.mcps = await checkbox({
@@ -213,9 +236,10 @@ async function runCli() {
213
236
  if (plan.hooks.length) console.log(` Hooks : ${plan.hooks.map((h) => h.name).join(", ")}`);
214
237
  if (plan.ruleCategories.length) console.log(` Rules : ${plan.ruleCategories.join(", ")}`);
215
238
  if (plan.mcps.length) console.log(` MCPs : ${plan.mcps.map((m) => m.name).join(", ")}`);
216
- if (plan.claudemds.length) console.log(` ClaudeMd: ${plan.claudemds.map((c) => c.name).join(", ")}`);
239
+ if (plan.claudemds.length) console.log(` ClaudeMd : ${plan.claudemds.map((c) => c.name).join(", ")}`);
240
+ if (plan.statusline) console.log(` Statusline: statusline.sh \u2192 ~/.claude/statusline.sh`);
217
241
  console.log("");
218
- const totalItems = plan.agents.length + plan.skills.length + plan.commands.length + plan.hooks.length + plan.ruleCategories.length + plan.mcps.length + plan.claudemds.length;
242
+ const totalItems = plan.agents.length + plan.skills.length + plan.commands.length + plan.hooks.length + plan.ruleCategories.length + plan.mcps.length + plan.claudemds.length + (plan.statusline ? 1 : 0);
219
243
  if (totalItems === 0) {
220
244
  console.log(chalk.yellow(" Nothing selected. Exiting."));
221
245
  return;
@@ -256,15 +280,20 @@ async function runCli() {
256
280
  spinner.text = "Installing claudemd...";
257
281
  await installClaudemd(plan.claudemds, targetDir);
258
282
  }
283
+ if (plan.statusline) {
284
+ spinner.text = "Installing statusline...";
285
+ await installStatusline();
286
+ }
259
287
  spinner.succeed(chalk.green("Installation complete!"));
260
288
  console.log("");
261
- if (plan.agents.length) console.log(` ${chalk.green("\u2713")} ${plan.agents.length} agent(s) \u2192 ${join(targetDir, "agents")}`);
262
- if (plan.skills.length) console.log(` ${chalk.green("\u2713")} ${plan.skills.length} skill(s) \u2192 ${join(targetDir, "skills")}`);
263
- if (plan.commands.length) console.log(` ${chalk.green("\u2713")} ${plan.commands.length} command(s) \u2192 ${join(targetDir, "commands")}`);
264
- if (plan.hooks.length) console.log(` ${chalk.green("\u2713")} ${plan.hooks.length} hook(s) \u2192 ${join(targetDir, "hooks")}`);
265
- if (plan.ruleCategories.length) console.log(` ${chalk.green("\u2713")} Rules copied \u2192 ${join(targetDir, "rules")}`);
289
+ if (plan.agents.length) console.log(` ${chalk.green("\u2713")} ${plan.agents.length} agent(s) \u2192 ${join2(targetDir, "agents")}`);
290
+ if (plan.skills.length) console.log(` ${chalk.green("\u2713")} ${plan.skills.length} skill(s) \u2192 ${join2(targetDir, "skills")}`);
291
+ if (plan.commands.length) console.log(` ${chalk.green("\u2713")} ${plan.commands.length} command(s) \u2192 ${join2(targetDir, "commands")}`);
292
+ if (plan.hooks.length) console.log(` ${chalk.green("\u2713")} ${plan.hooks.length} hook(s) \u2192 ${join2(targetDir, "hooks")}`);
293
+ if (plan.ruleCategories.length) console.log(` ${chalk.green("\u2713")} Rules copied \u2192 ${join2(targetDir, "rules")}`);
266
294
  if (plan.mcps.length) console.log(` ${chalk.green("\u2713")} ${plan.mcps.length} MCP server(s) \u2192 ${scope === "global" ? "~/.claude.json" : "./.claude.json"}`);
267
- if (plan.claudemds.length) console.log(` ${chalk.green("\u2713")} ClaudeMd appended \u2192 ${join(targetDir, "CLAUDE.md")}`);
295
+ if (plan.claudemds.length) console.log(` ${chalk.green("\u2713")} ClaudeMd appended \u2192 ${join2(targetDir, "CLAUDE.md")}`);
296
+ if (plan.statusline) console.log(` ${chalk.green("\u2713")} Statusline installed \u2192 ~/.claude/statusline.sh`);
268
297
  console.log("");
269
298
  if (skippedMcps.size > 0) {
270
299
  console.log(chalk.yellow(" \u26A0 The following MCP servers have placeholder env vars:"));
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  installHooks
3
- } from "./chunk-SLVASXTF.js";
3
+ } from "./chunk-W7RWPDBH.js";
4
4
  import "./chunk-K25UZZVG.js";
5
5
  import "./chunk-3GUKEMND.js";
6
6
  import "./chunk-5XOKKPAA.js";
package/dist/index.js CHANGED
@@ -60,17 +60,17 @@ Installing all to ${targetDir}...
60
60
  { installMcps },
61
61
  { installClaudemd }
62
62
  ] = await Promise.all([
63
- import("./registry-BU55RMHU.js"),
64
- import("./registry-BU55RMHU.js"),
65
- import("./registry-BU55RMHU.js"),
66
- import("./registry-BU55RMHU.js"),
67
- import("./registry-BU55RMHU.js"),
68
- import("./registry-BU55RMHU.js"),
69
- import("./registry-BU55RMHU.js"),
63
+ import("./registry-KRLOB4TH.js"),
64
+ import("./registry-KRLOB4TH.js"),
65
+ import("./registry-KRLOB4TH.js"),
66
+ import("./registry-KRLOB4TH.js"),
67
+ import("./registry-KRLOB4TH.js"),
68
+ import("./registry-KRLOB4TH.js"),
69
+ import("./registry-KRLOB4TH.js"),
70
70
  import("./agents-AEKT67A6.js"),
71
71
  import("./skills-ULMW3UCM.js"),
72
72
  import("./commands-P5LILVZ5.js"),
73
- import("./hooks-S73JTX2I.js"),
73
+ import("./hooks-A2WQ2LGG.js"),
74
74
  import("./rules-EFSJ3L3A.js"),
75
75
  import("./mcps-67Q7TBGW.js"),
76
76
  import("./claudemd-KKQ2DL7P.js")
@@ -124,7 +124,7 @@ async function main() {
124
124
  return;
125
125
  }
126
126
  if (args.includes("--uninstall") || args.includes("-u")) {
127
- const { runUninstallCli } = await import("./uninstall-cli-7XGNDIUC.js");
127
+ const { runUninstallCli } = await import("./uninstall-cli-GLYJG5V2.js");
128
128
  await runUninstallCli();
129
129
  return;
130
130
  }
@@ -134,7 +134,7 @@ async function main() {
134
134
  await installAll(scope);
135
135
  return;
136
136
  }
137
- const { runCli } = await import("./cli-6WQMAFNA.js");
137
+ const { runCli } = await import("./cli-KZYBSIXO.js");
138
138
  await runCli();
139
139
  }
140
140
  main().catch((err) => {
@@ -6,7 +6,7 @@ import {
6
6
  getMcpServers,
7
7
  getRuleCategories,
8
8
  getSkills
9
- } from "./chunk-OLLOS3GG.js";
9
+ } from "./chunk-E3INXQNO.js";
10
10
  import "./chunk-5XOKKPAA.js";
11
11
  export {
12
12
  getAgents,
@@ -6,7 +6,7 @@ import {
6
6
  getMcpServers,
7
7
  getRuleCategories,
8
8
  getSkills
9
- } from "./chunk-OLLOS3GG.js";
9
+ } from "./chunk-E3INXQNO.js";
10
10
  import {
11
11
  getAssetsDir,
12
12
  getGlobalDir,
@@ -199,7 +199,7 @@ async function removeHookFromSettings(settingsPath, hookFileName) {
199
199
  const matchers = settings.hooks[hookType];
200
200
  for (let i = matchers.length - 1; i >= 0; i--) {
201
201
  const matcher = matchers[i];
202
- matcher.hooks = matcher.hooks.filter((h) => !h.command.endsWith(suffix));
202
+ matcher.hooks = matcher.hooks.filter((h) => !h.command.includes(suffix));
203
203
  if (matcher.hooks.length === 0) {
204
204
  matchers.splice(i, 1);
205
205
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@juho0719/cckit",
3
- "version": "0.2.3",
3
+ "version": "0.2.5",
4
4
  "description": "Claude Code Harness Installer - Interactive CLI for installing Claude Code agents, skills, commands, hooks, rules, and MCP servers",
5
5
  "type": "module",
6
6
  "bin": {