claude-launchpad 0.12.0 → 0.12.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/dist/{chunk-VDXWW5H5.js → chunk-GRL3DOCP.js} +2 -2
- package/dist/chunk-GRL3DOCP.js.map +1 -0
- package/dist/{chunk-6IXA2NQN.js → chunk-IPVN6SO4.js} +2 -2
- package/dist/cli.js +115 -56
- package/dist/cli.js.map +1 -1
- package/dist/commands/memory/server.js +5 -5
- package/dist/commands/memory/server.js.map +1 -1
- package/dist/{pull-7ZF3OBPZ.js → pull-YSA225FB.js} +3 -3
- package/dist/{push-SYSRB6OP.js → push-7SCHMUFX.js} +3 -3
- package/dist/{tui-YMBDAVTI.js → tui-IWUB7ZR4.js} +84 -18
- package/dist/tui-IWUB7ZR4.js.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-VDXWW5H5.js.map +0 -1
- package/dist/tui-YMBDAVTI.js.map +0 -1
- /package/dist/{chunk-6IXA2NQN.js.map → chunk-IPVN6SO4.js.map} +0 -0
- /package/dist/{pull-7ZF3OBPZ.js.map → pull-YSA225FB.js.map} +0 -0
- /package/dist/{push-SYSRB6OP.js.map → push-7SCHMUFX.js.map} +0 -0
|
@@ -14,7 +14,7 @@ var RELATION_TYPES = [
|
|
|
14
14
|
];
|
|
15
15
|
var StoreInputSchema = z.object({
|
|
16
16
|
type: z.enum(MEMORY_TYPES),
|
|
17
|
-
content: z.string().min(1)
|
|
17
|
+
content: z.string().min(1),
|
|
18
18
|
title: z.string().max(200).optional(),
|
|
19
19
|
tags: z.array(z.string()).max(20).default([]),
|
|
20
20
|
importance: z.number().min(0).max(1).default(0.5),
|
|
@@ -74,4 +74,4 @@ export {
|
|
|
74
74
|
RELATION_TYPES,
|
|
75
75
|
SyncPayloadSchema
|
|
76
76
|
};
|
|
77
|
-
//# sourceMappingURL=chunk-
|
|
77
|
+
//# sourceMappingURL=chunk-GRL3DOCP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/memory/types.ts"],"sourcesContent":["import { z } from 'zod';\n\n// ── Memory Types ──────────────────────────────────────────────\n\nexport const MEMORY_TYPES = ['working', 'episodic', 'semantic', 'procedural', 'pattern'] as const;\nexport type MemoryType = typeof MEMORY_TYPES[number];\n\nexport const MEMORY_SOURCES = ['manual', 'session_end', 'consolidation', 'hook', 'import'] as const;\nexport type MemorySource = typeof MEMORY_SOURCES[number];\n\nexport const RELATION_TYPES = [\n 'relates_to', 'depends_on', 'contradicts', 'extends', 'implements', 'derived_from',\n] as const;\nexport type RelationType = typeof RELATION_TYPES[number];\n\n// ── Core Entities ─────────────────────────────────────────────\n\nexport interface Memory {\n readonly id: string;\n readonly type: MemoryType;\n readonly title: string | null;\n readonly content: string;\n readonly context: string | null;\n readonly source: MemorySource | null;\n readonly project: string | null;\n readonly tags: readonly string[];\n readonly importance: number;\n readonly createdAt: string;\n readonly updatedAt: string;\n readonly accessCount: number;\n readonly lastAccessed: string | null;\n readonly injectionCount: number;\n}\n\nexport interface Relation {\n readonly sourceId: string;\n readonly targetId: string;\n readonly relationType: RelationType;\n readonly createdAt: string;\n}\n\n// ── Search Types ──────────────────────────────────────────────\n\nexport interface SearchResult {\n readonly memory: Memory;\n readonly score: number;\n readonly explanation: string;\n}\n\nexport interface FtsMatch {\n readonly rowid: number;\n readonly memoryId: string;\n readonly rank: number;\n}\n\nexport interface ScoredCandidate {\n readonly memoryId: string;\n readonly textScore: number;\n readonly importanceScore: number;\n readonly recencyScore: number;\n readonly accessScore: number;\n readonly contextScore: number;\n readonly composite: number;\n}\n\n// ── Decay Parameters ──────────────────────────────────────────\n\nexport interface DecayParams {\n readonly tauByType: Record<MemoryType, number>;\n readonly accessModifiers: readonly { readonly maxCount: number; readonly multiplier: number }[];\n readonly relationModifier: {\n readonly connectedThreshold: number;\n readonly connectedMultiplier: number;\n readonly isolatedMultiplier: number;\n readonly highlyConnectedThreshold: number;\n readonly highlyConnectedMultiplier: number;\n };\n readonly importanceFloor: number;\n readonly pruneThreshold: number;\n readonly pruneMinAgeDays: number;\n}\n\n// ── Input Schemas (for MCP tools) ─────────────────────────────\n\nexport const StoreInputSchema = z.object({\n type: z.enum(MEMORY_TYPES),\n content: z.string().min(1),\n title: z.string().max(200).optional(),\n tags: z.array(z.string()).max(20).default([]),\n importance: z.number().min(0).max(1).default(0.5),\n context: z.string().optional(),\n source: z.enum(MEMORY_SOURCES).default('manual'),\n project: z.string().max(200).optional(),\n});\nexport type StoreInput = z.infer<typeof StoreInputSchema>;\n\nexport const SearchInputSchema = z.object({\n query: z.string().min(1).max(500),\n id: z.string().optional(),\n type: z.enum(MEMORY_TYPES).optional(),\n tags: z.array(z.string()).max(10).optional(),\n limit: z.number().int().min(1).max(50).default(10),\n min_importance: z.number().min(0).max(1).default(0),\n project: z.string().max(200).optional(),\n});\nexport type SearchInput = z.infer<typeof SearchInputSchema>;\n\nexport const ForgetInputSchema = z.object({\n id: z.string(),\n hard_delete: z.boolean().default(false),\n});\nexport type ForgetInput = z.infer<typeof ForgetInputSchema>;\n\nexport const RelateInputSchema = z.object({\n source_id: z.string(),\n target_id: z.string(),\n relation_type: z.enum(RELATION_TYPES),\n});\nexport type RelateInput = z.infer<typeof RelateInputSchema>;\n\n// ── Sync Types ───────────────────────────────────────────────\n\nexport interface SyncPayload {\n readonly version: number;\n readonly machine_id: string;\n readonly pushed_at: string;\n readonly memories: readonly SyncMemoryRow[];\n readonly relations: readonly SyncRelationRow[];\n}\n\nexport interface SyncMemoryRow {\n readonly id: string;\n readonly type: MemoryType;\n readonly title: string | null;\n readonly content: string;\n readonly context: string | null;\n readonly source: MemorySource | null;\n readonly project: string | null;\n readonly tags: readonly string[];\n readonly importance: number;\n readonly access_count: number;\n readonly injection_count: number;\n readonly created_at: string;\n readonly updated_at: string;\n readonly last_accessed: string | null;\n}\n\nexport interface SyncRelationRow {\n readonly source_id: string;\n readonly target_id: string;\n readonly relation_type: RelationType;\n readonly created_at: string;\n}\n\nexport const SyncPayloadSchema = z.object({\n version: z.number(),\n machine_id: z.string(),\n pushed_at: z.string(),\n memories: z.array(z.object({\n id: z.string(),\n type: z.enum(MEMORY_TYPES),\n title: z.string().nullable(),\n content: z.string(),\n context: z.string().nullable(),\n source: z.enum(MEMORY_SOURCES).nullable(),\n project: z.string().nullable(),\n tags: z.array(z.string()),\n importance: z.number(),\n access_count: z.number(),\n injection_count: z.number(),\n created_at: z.string(),\n updated_at: z.string(),\n last_accessed: z.string().nullable(),\n })),\n relations: z.array(z.object({\n source_id: z.string(),\n target_id: z.string(),\n relation_type: z.enum(RELATION_TYPES),\n created_at: z.string(),\n })),\n});\n\nexport interface SyncConfig {\n readonly gistId: string;\n}\n\nexport interface MergeResult {\n readonly inserted: number;\n readonly updated: number;\n readonly relationsAdded: number;\n}\n\n// ── Stats ─────────────────────────────────────────────────────\n\nexport interface MemoryStats {\n readonly totalMemories: number;\n readonly byType: Record<MemoryType, number>;\n readonly totalRelations: number;\n readonly dbSizeBytes: number;\n readonly oldestMemory: string | null;\n readonly newestMemory: string | null;\n readonly topInjected: readonly { readonly id: string; readonly title: string | null; readonly injectionCount: number }[];\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
SyncPayloadSchema
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-GRL3DOCP.js";
|
|
5
5
|
|
|
6
6
|
// src/commands/memory/utils/gist-transport.ts
|
|
7
7
|
import { execSync } from "child_process";
|
|
@@ -216,4 +216,4 @@ export {
|
|
|
216
216
|
parsePayload,
|
|
217
217
|
mergeFromRemote
|
|
218
218
|
};
|
|
219
|
-
//# sourceMappingURL=chunk-
|
|
219
|
+
//# sourceMappingURL=chunk-IPVN6SO4.js.map
|
package/dist/cli.js
CHANGED
|
@@ -535,58 +535,117 @@ DerivedData/
|
|
|
535
535
|
|
|
536
536
|
// src/commands/init/generators/skill-enhance.ts
|
|
537
537
|
function generateEnhanceSkill() {
|
|
538
|
-
return
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
-
|
|
589
|
-
|
|
538
|
+
return [
|
|
539
|
+
"---",
|
|
540
|
+
"name: lp-enhance",
|
|
541
|
+
"description: |",
|
|
542
|
+
" AI-improve your CLAUDE.md based on codebase analysis. Fills in architecture, conventions, guardrails, and suggests hooks and MCP servers.",
|
|
543
|
+
' TRIGGER when: user runs /lp-enhance, asks to "improve CLAUDE.md", "fill in architecture", or after major refactors.',
|
|
544
|
+
" DO NOT TRIGGER when: user is editing CLAUDE.md manually, doing normal coding, or running doctor/eval.",
|
|
545
|
+
"allowed-tools: Read, Glob, Grep, Edit, Write",
|
|
546
|
+
"argument-hint: (no arguments needed)",
|
|
547
|
+
"---",
|
|
548
|
+
"",
|
|
549
|
+
"# lp-enhance - AI-powered CLAUDE.md improver",
|
|
550
|
+
"",
|
|
551
|
+
"Read CLAUDE.md and the project's codebase, then update CLAUDE.md to fill in missing or incomplete sections.",
|
|
552
|
+
"",
|
|
553
|
+
"## Phase 1: Research",
|
|
554
|
+
"",
|
|
555
|
+
"1. Read CLAUDE.md (if it exists)",
|
|
556
|
+
"2. Read .claude/settings.json (hooks, permissions, MCP)",
|
|
557
|
+
"3. Read .claude/rules/*.md (existing rules)",
|
|
558
|
+
"4. Scan src/ directory structure (top-level dirs, key files)",
|
|
559
|
+
"5. Read package.json / go.mod / pyproject.toml for stack detection",
|
|
560
|
+
"6. Check for monorepo indicators (workspaces, nx.json, lerna.json)",
|
|
561
|
+
"",
|
|
562
|
+
"**Done when:** you have a mental model of the stack, architecture, and existing config.",
|
|
563
|
+
"",
|
|
564
|
+
"## Phase 2: Plan",
|
|
565
|
+
"",
|
|
566
|
+
"Count current CLAUDE.md actionable lines. Budget is 200 lines max. Plan which sections to add or improve:",
|
|
567
|
+
"",
|
|
568
|
+
"1. **## Stack** - detect language, framework, package manager",
|
|
569
|
+
"2. **## Architecture** - 3-5 bullets describing codebase shape",
|
|
570
|
+
"3. **## Conventions** - max 8 key patterns. Overflow to .claude/rules/conventions.md",
|
|
571
|
+
"4. **## Off-Limits** - max 8 guardrails specific to this project",
|
|
572
|
+
"5. **## Memory** - ONLY if agentic-memory is configured in settings.json. Max 6 bullets.",
|
|
573
|
+
"6. **## Key Decisions** - only decisions that affect how Claude works in this codebase",
|
|
574
|
+
"",
|
|
575
|
+
"If any section would exceed 8 bullets, plan a .claude/rules/ file for the overflow.",
|
|
576
|
+
"",
|
|
577
|
+
"**Done when:** you know exactly what to add/change and the line count stays under 200.",
|
|
578
|
+
"",
|
|
579
|
+
"## Phase 3: Execute",
|
|
580
|
+
"",
|
|
581
|
+
"Edit CLAUDE.md with the planned changes. Then:",
|
|
582
|
+
"",
|
|
583
|
+
"1. Create or update .claude/rules/ files for overflow content",
|
|
584
|
+
"2. Generate path-scoped rules if the project has distinct areas (see below)",
|
|
585
|
+
"3. Verify line count is under 200",
|
|
586
|
+
"",
|
|
587
|
+
"**Rules:**",
|
|
588
|
+
"- Don't remove existing content, only add or improve",
|
|
589
|
+
"- Be specific to THIS project, not generic advice",
|
|
590
|
+
"- Use bullet points, not paragraphs",
|
|
591
|
+
"",
|
|
592
|
+
"## Phase 4: Verify",
|
|
593
|
+
"",
|
|
594
|
+
"1. Run `claude-launchpad doctor` to check the score improved",
|
|
595
|
+
"2. Print suggested hooks (exact JSON) for .claude/settings.json but don't modify it",
|
|
596
|
+
"3. Print suggested MCP servers if external services detected (Postgres, Redis, Stripe, etc.)",
|
|
597
|
+
"",
|
|
598
|
+
"**Done when:** doctor score is equal or higher, suggestions printed.",
|
|
599
|
+
"",
|
|
600
|
+
"## Path-scoped rules generation",
|
|
601
|
+
"",
|
|
602
|
+
"Scan the project structure and generate focused .claude/rules/ files with paths: frontmatter. These load ONLY when Claude works on matching files, saving context tokens.",
|
|
603
|
+
"",
|
|
604
|
+
"**How to detect areas:**",
|
|
605
|
+
"1. List top-level directories under src/ (or equivalent). Each distinct area (api, components, lib, tests) is a candidate.",
|
|
606
|
+
"2. Check for monorepo indicators: workspaces in package.json, pnpm-workspace.yaml, nx.json, lerna.json. Each workspace is a candidate.",
|
|
607
|
+
"3. Check for docs/, tests/, scripts/ as separate scopes.",
|
|
608
|
+
"",
|
|
609
|
+
"**For each detected area, create a rules file with this format:**",
|
|
610
|
+
"",
|
|
611
|
+
"---",
|
|
612
|
+
'paths: ["src/api/**"]',
|
|
613
|
+
"---",
|
|
614
|
+
"# API Rules",
|
|
615
|
+
"- Validate all request input with zod schemas",
|
|
616
|
+
"- Return typed error responses, never throw raw errors",
|
|
617
|
+
"- Keep route handlers under 30 lines",
|
|
618
|
+
"",
|
|
619
|
+
"**Stack-specific patterns to include:**",
|
|
620
|
+
`- Next.js app/: "Use Server Components by default, add 'use client' only when needed"`,
|
|
621
|
+
'- API routes / src/api/: "Validate input at boundaries, typed error responses"',
|
|
622
|
+
'- React components: "Colocate components near usage, props interface above component"',
|
|
623
|
+
'- Tests: "One assertion per test when possible, descriptive test names"',
|
|
624
|
+
'- Database / prisma/ / drizzle/: "Never write raw SQL, use the ORM, migrations required"',
|
|
625
|
+
'- Docs: "No em dashes, max 3 sentences per paragraph, code examples required"',
|
|
626
|
+
"",
|
|
627
|
+
"**When NOT to generate:**",
|
|
628
|
+
"- Small projects with < 5 source files (one conventions.md is enough)",
|
|
629
|
+
"- Projects where all code is in one flat directory",
|
|
630
|
+
"- If path-scoped rules already exist, don't overwrite them",
|
|
631
|
+
"",
|
|
632
|
+
"**Monorepo handling:**",
|
|
633
|
+
"- Each package gets its own rules file: .claude/rules/packages-<name>.md",
|
|
634
|
+
"- Suggest claudeMdExcludes in settings.json to skip irrelevant package CLAUDE.md files",
|
|
635
|
+
"",
|
|
636
|
+
"## Hook review",
|
|
637
|
+
"",
|
|
638
|
+
"Review .claude/settings.json hooks:",
|
|
639
|
+
"- If you see project-specific patterns that deserve hooks, suggest them",
|
|
640
|
+
"- If no PostCompact hook exists, suggest one that re-injects TASKS.md",
|
|
641
|
+
"- If no SessionStart hook exists, suggest one that injects TASKS.md",
|
|
642
|
+
"- DO NOT modify settings.json directly. Print exact JSON to add.",
|
|
643
|
+
"",
|
|
644
|
+
"## Other advanced configuration",
|
|
645
|
+
"",
|
|
646
|
+
"- If the project uses external APIs, suggest sandbox.network.allowedDomains",
|
|
647
|
+
"- If you detect a monorepo, suggest claudeMdExcludes in settings.json"
|
|
648
|
+
].join("\n");
|
|
590
649
|
}
|
|
591
650
|
|
|
592
651
|
// src/commands/init/generators/backlog.ts
|
|
@@ -2587,7 +2646,7 @@ function createMemoryCommand() {
|
|
|
2587
2646
|
}
|
|
2588
2647
|
const { requireMemoryDeps } = await import("./require-deps-NKRCPVAO.js");
|
|
2589
2648
|
await requireMemoryDeps();
|
|
2590
|
-
const { startTui } = await import("./tui-
|
|
2649
|
+
const { startTui } = await import("./tui-IWUB7ZR4.js");
|
|
2591
2650
|
await startTui();
|
|
2592
2651
|
return;
|
|
2593
2652
|
}
|
|
@@ -2641,13 +2700,13 @@ function createMemoryCommand() {
|
|
|
2641
2700
|
);
|
|
2642
2701
|
memory.addCommand(
|
|
2643
2702
|
new Command4("push").description("Push current project's memories to GitHub Gist").option("--all", "Push all projects").option("-y, --yes", "Skip confirmation prompt").action(async (opts) => {
|
|
2644
|
-
const { runPush } = await import("./push-
|
|
2703
|
+
const { runPush } = await import("./push-7SCHMUFX.js");
|
|
2645
2704
|
await runPush(opts);
|
|
2646
2705
|
})
|
|
2647
2706
|
);
|
|
2648
2707
|
memory.addCommand(
|
|
2649
2708
|
new Command4("pull").description("Pull current project's memories from GitHub Gist").option("--all", "Pull all projects").action(async (opts) => {
|
|
2650
|
-
const { runPull } = await import("./pull-
|
|
2709
|
+
const { runPull } = await import("./pull-YSA225FB.js");
|
|
2651
2710
|
await runPull(opts);
|
|
2652
2711
|
})
|
|
2653
2712
|
);
|
|
@@ -2655,7 +2714,7 @@ function createMemoryCommand() {
|
|
|
2655
2714
|
}
|
|
2656
2715
|
|
|
2657
2716
|
// src/cli.ts
|
|
2658
|
-
var program = new Command5().name("claude-launchpad").description("CLI toolkit that makes Claude Code setups measurably good").version("0.12.
|
|
2717
|
+
var program = new Command5().name("claude-launchpad").description("CLI toolkit that makes Claude Code setups measurably good").version("0.12.2", "-v, --version").action(async () => {
|
|
2659
2718
|
const hasConfig = await fileExists(join11(process.cwd(), "CLAUDE.md")) || await fileExists(join11(process.cwd(), ".claude", "settings.json"));
|
|
2660
2719
|
if (hasConfig) {
|
|
2661
2720
|
await program.commands.find((c) => c.name() === "doctor")?.parseAsync([], { from: "user" });
|