claude-launchpad 0.14.0 → 0.14.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/README.md +1 -1
- package/dist/cli.js +35 -19
- package/dist/cli.js.map +1 -1
- package/dist/commands/memory/server.js +4 -4
- package/dist/{install-H6GW4P6K.js → install-4GQ57KCQ.js} +2 -20
- package/dist/install-4GQ57KCQ.js.map +1 -0
- package/package.json +1 -1
- package/dist/extract-HMAN7RW4.js +0 -218
- package/dist/extract-HMAN7RW4.js.map +0 -1
- package/dist/install-H6GW4P6K.js.map +0 -1
package/README.md
CHANGED
|
@@ -201,7 +201,7 @@ claude-launchpad memory
|
|
|
201
201
|
|
|
202
202
|
If memory is not installed, it runs interactive setup. If installed, it shows stats. Requires native deps first: `npm install better-sqlite3 sqlite-vec`.
|
|
203
203
|
|
|
204
|
-
Every session, Claude loads what it needs to know and
|
|
204
|
+
Every session, Claude loads what it needs to know and stores new knowledge as it works. Stale facts fade on their own. Knowledge Claude actually uses gets reinforced. Each project has its own isolated memory, and you can sync it across machines via private GitHub Gist.
|
|
205
205
|
|
|
206
206
|
Browse everything with `--dashboard` -- a terminal UI with vim navigation, filtering, and search.
|
|
207
207
|
|
package/dist/cli.js
CHANGED
|
@@ -534,10 +534,9 @@ DerivedData/
|
|
|
534
534
|
}
|
|
535
535
|
|
|
536
536
|
// src/commands/init/generators/skill-enhance.ts
|
|
537
|
-
var ENHANCE_SKILL_VERSION =
|
|
537
|
+
var ENHANCE_SKILL_VERSION = 5;
|
|
538
538
|
function generateEnhanceSkill() {
|
|
539
539
|
return [
|
|
540
|
-
`<!-- lp-enhance-version: ${ENHANCE_SKILL_VERSION} -->`,
|
|
541
540
|
"---",
|
|
542
541
|
"name: lp-enhance",
|
|
543
542
|
"description: |",
|
|
@@ -548,6 +547,8 @@ function generateEnhanceSkill() {
|
|
|
548
547
|
"argument-hint: (no arguments needed)",
|
|
549
548
|
"---",
|
|
550
549
|
"",
|
|
550
|
+
`<!-- lp-enhance-version: ${ENHANCE_SKILL_VERSION} -->`,
|
|
551
|
+
"",
|
|
551
552
|
"# lp-enhance - AI-powered CLAUDE.md improver",
|
|
552
553
|
"",
|
|
553
554
|
"Read CLAUDE.md and the project's codebase, then update CLAUDE.md to fill in missing or incomplete sections.",
|
|
@@ -602,7 +603,7 @@ function generateEnhanceSkill() {
|
|
|
602
603
|
"1. Run `claude-launchpad doctor` to check the score improved",
|
|
603
604
|
"2. Print suggested hooks (exact JSON) for .claude/settings.json but don't modify it",
|
|
604
605
|
"3. Print suggested MCP servers if external services detected (Postgres, Redis, Stripe, etc.)",
|
|
605
|
-
'4. If eval scenarios were generated, print: "Run this in your terminal (not inside Claude Code): `claude-launchpad eval --scenarios scenarios
|
|
606
|
+
'4. If eval scenarios were generated, print: "Run this in your terminal (not inside Claude Code): `claude-launchpad eval --scenarios scenarios/ --runs 1`"',
|
|
606
607
|
"",
|
|
607
608
|
"**Done when:** doctor score is equal or higher, suggestions printed, eval scenarios created if applicable.",
|
|
608
609
|
"",
|
|
@@ -1541,7 +1542,7 @@ var MEMORY_MCP_TOOLS = [
|
|
|
1541
1542
|
function hasMemoryIndicators(config) {
|
|
1542
1543
|
const hasMcpServer = config.mcpServers.some((s) => s.name === "agentic-memory");
|
|
1543
1544
|
const hasHookRef = config.hooks.some(
|
|
1544
|
-
(h) => h.command?.includes("memory context")
|
|
1545
|
+
(h) => h.command?.includes("memory context")
|
|
1545
1546
|
);
|
|
1546
1547
|
return hasMcpServer || hasHookRef;
|
|
1547
1548
|
}
|
|
@@ -1559,15 +1560,15 @@ async function analyzeMemory(config) {
|
|
|
1559
1560
|
fix: "Add a SessionStart hook that runs `memory context` to inject relevant memories"
|
|
1560
1561
|
});
|
|
1561
1562
|
}
|
|
1562
|
-
const
|
|
1563
|
+
const hasStaleStopHook = config.hooks.some(
|
|
1563
1564
|
(h) => h.event === "Stop" && h.command?.includes("memory extract")
|
|
1564
1565
|
);
|
|
1565
|
-
if (
|
|
1566
|
+
if (hasStaleStopHook) {
|
|
1566
1567
|
issues.push({
|
|
1567
1568
|
analyzer: "Memory",
|
|
1568
|
-
severity: "
|
|
1569
|
-
message: "
|
|
1570
|
-
fix: "
|
|
1569
|
+
severity: "low",
|
|
1570
|
+
message: "Deprecated Stop hook found (memory extract) \u2014 auto-extraction was removed, Claude stores memories directly via MCP tools",
|
|
1571
|
+
fix: "Run `doctor --fix` to remove the stale Stop hook"
|
|
1571
1572
|
});
|
|
1572
1573
|
}
|
|
1573
1574
|
const autoMemoryDisabled = config.settings?.autoMemoryEnabled === false;
|
|
@@ -1744,9 +1745,10 @@ var FIX_TABLE = [
|
|
|
1744
1745
|
{ analyzer: "Rules", match: "lp-enhance skill is outdated", fix: (root) => updateEnhanceSkill(root) },
|
|
1745
1746
|
{ analyzer: "Settings", match: "Deprecated includeCoAuthoredBy", fix: (root) => migrateAttribution(root) },
|
|
1746
1747
|
{ analyzer: "Hooks", match: "SessionStart", fix: (root) => addSessionStartHook(root) },
|
|
1748
|
+
{ analyzer: "Memory", match: "Deprecated Stop hook", fix: (root) => removeStaleStopHook(root) },
|
|
1747
1749
|
{ analyzer: "Memory", match: "autoMemoryEnabled not disabled", fix: (root) => disableAutoMemory(root) },
|
|
1748
1750
|
{ analyzer: "Memory", match: "MCP tool permission", fix: (root) => addMemoryToolPermissions(root) },
|
|
1749
|
-
{ analyzer: "Memory", match: "CLAUDE.md missing memory guidance", fix: (root) => addClaudeMdSection(root, "## Memory", "Use agentic-memory to persist knowledge across sessions:\n- Memories are automatically injected at session start
|
|
1751
|
+
{ analyzer: "Memory", match: "CLAUDE.md missing memory guidance", fix: (root) => addClaudeMdSection(root, "## Memory", "Use agentic-memory to persist knowledge across sessions:\n- Memories are automatically injected at session start\n- STORE IMMEDIATELY when: a dependency strategy changes, an architecture decision is made, a convention is established, a bug pattern is discovered, or a feature is killed/added\n- Use memory_search before memory_store to check for duplicates\n- NEVER store credentials, API keys, tokens, or secrets in memories") }
|
|
1750
1752
|
];
|
|
1751
1753
|
async function tryFix(issue, root, detected) {
|
|
1752
1754
|
const entry = FIX_TABLE.find(
|
|
@@ -1998,6 +2000,27 @@ async function updateEnhanceSkill(root) {
|
|
|
1998
2000
|
log.success("Updated /lp-enhance skill to latest version");
|
|
1999
2001
|
return true;
|
|
2000
2002
|
}
|
|
2003
|
+
async function removeStaleStopHook(root) {
|
|
2004
|
+
const settings = await readSettingsJson(root);
|
|
2005
|
+
const hooks = settings.hooks;
|
|
2006
|
+
if (!hooks?.Stop) return false;
|
|
2007
|
+
const stopHooks = hooks.Stop;
|
|
2008
|
+
const filtered = stopHooks.filter((h) => {
|
|
2009
|
+
const innerHooks = h.hooks;
|
|
2010
|
+
return !innerHooks?.some(
|
|
2011
|
+
(ih) => typeof ih.command === "string" && ih.command.includes("memory extract")
|
|
2012
|
+
);
|
|
2013
|
+
});
|
|
2014
|
+
if (filtered.length === stopHooks.length) return false;
|
|
2015
|
+
if (filtered.length === 0) {
|
|
2016
|
+
delete hooks.Stop;
|
|
2017
|
+
} else {
|
|
2018
|
+
hooks.Stop = filtered;
|
|
2019
|
+
}
|
|
2020
|
+
await writeSettingsJson(root, settings);
|
|
2021
|
+
log.success("Removed deprecated Stop hook (memory extract)");
|
|
2022
|
+
return true;
|
|
2023
|
+
}
|
|
2001
2024
|
|
|
2002
2025
|
// src/commands/doctor/watcher.ts
|
|
2003
2026
|
import { readdir as readdir2, stat } from "fs/promises";
|
|
@@ -2805,7 +2828,7 @@ function createMemoryCommand() {
|
|
|
2805
2828
|
log.info("Skipped.");
|
|
2806
2829
|
return;
|
|
2807
2830
|
}
|
|
2808
|
-
const { runInstall } = await import("./install-
|
|
2831
|
+
const { runInstall } = await import("./install-4GQ57KCQ.js");
|
|
2809
2832
|
await runInstall({});
|
|
2810
2833
|
} else {
|
|
2811
2834
|
const { requireMemoryDeps } = await import("./require-deps-NKRCPVAO.js");
|
|
@@ -2821,13 +2844,6 @@ function createMemoryCommand() {
|
|
|
2821
2844
|
}).helpCommand(false),
|
|
2822
2845
|
{ hidden: true }
|
|
2823
2846
|
);
|
|
2824
|
-
memory.addCommand(
|
|
2825
|
-
new Command4("extract").description("Extract facts from transcript (hook handler)").action(async () => {
|
|
2826
|
-
const { runExtract } = await import("./extract-HMAN7RW4.js");
|
|
2827
|
-
await runExtract();
|
|
2828
|
-
}).helpCommand(false),
|
|
2829
|
-
{ hidden: true }
|
|
2830
|
-
);
|
|
2831
2847
|
memory.addCommand(
|
|
2832
2848
|
new Command4("serve").description("Start MCP server (Claude Code)").action(async () => {
|
|
2833
2849
|
const { startServer } = await import("./commands/memory/server.js");
|
|
@@ -2851,7 +2867,7 @@ function createMemoryCommand() {
|
|
|
2851
2867
|
}
|
|
2852
2868
|
|
|
2853
2869
|
// src/cli.ts
|
|
2854
|
-
var program = new Command5().name("claude-launchpad").description("CLI toolkit that makes Claude Code setups measurably good").version("0.14.
|
|
2870
|
+
var program = new Command5().name("claude-launchpad").description("CLI toolkit that makes Claude Code setups measurably good").version("0.14.2", "-v, --version").action(async () => {
|
|
2855
2871
|
const hasConfig = await fileExists(join11(process.cwd(), "CLAUDE.md")) || await fileExists(join11(process.cwd(), ".claude", "settings.json"));
|
|
2856
2872
|
if (hasConfig) {
|
|
2857
2873
|
await program.commands.find((c) => c.name() === "doctor")?.parseAsync([], { from: "user" });
|