claude-launchpad 0.12.1 → 0.13.0
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 +31 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/memory/server.js +4 -4
- 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/package.json +1 -1
- package/dist/chunk-VDXWW5H5.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
|
@@ -572,6 +572,8 @@ function generateEnhanceSkill() {
|
|
|
572
572
|
"5. **## Memory** - ONLY if agentic-memory is configured in settings.json. Max 6 bullets.",
|
|
573
573
|
"6. **## Key Decisions** - only decisions that affect how Claude works in this codebase",
|
|
574
574
|
"",
|
|
575
|
+
"7. **Skill Authoring** - if .claude/rules/conventions.md lacks a Skill Authoring section, plan to add one",
|
|
576
|
+
"",
|
|
575
577
|
"If any section would exceed 8 bullets, plan a .claude/rules/ file for the overflow.",
|
|
576
578
|
"",
|
|
577
579
|
"**Done when:** you know exactly what to add/change and the line count stays under 200.",
|
|
@@ -633,6 +635,20 @@ function generateEnhanceSkill() {
|
|
|
633
635
|
"- Each package gets its own rules file: .claude/rules/packages-<name>.md",
|
|
634
636
|
"- Suggest claudeMdExcludes in settings.json to skip irrelevant package CLAUDE.md files",
|
|
635
637
|
"",
|
|
638
|
+
"## Skill authoring conventions",
|
|
639
|
+
"",
|
|
640
|
+
"If .claude/rules/conventions.md exists but has no Skill Authoring section, add this:",
|
|
641
|
+
"",
|
|
642
|
+
"## Skill Authoring",
|
|
643
|
+
"",
|
|
644
|
+
"When creating Claude Code skills (.claude/skills/*/SKILL.md):",
|
|
645
|
+
"",
|
|
646
|
+
"- Add TRIGGER when / DO NOT TRIGGER when clauses in the description for auto-invocation",
|
|
647
|
+
"- Add allowed-tools in frontmatter to restrict tool access (e.g. Read, Glob, Grep for read-only skills)",
|
|
648
|
+
"- Add argument-hint in frontmatter showing the expected input format",
|
|
649
|
+
'- Structure as phases: Research, Plan, Execute, Verify with "Done when:" success criteria per phase',
|
|
650
|
+
"- Handle edge cases and preconditions before execution",
|
|
651
|
+
"",
|
|
636
652
|
"## Hook review",
|
|
637
653
|
"",
|
|
638
654
|
"Review .claude/settings.json hooks:",
|
|
@@ -786,6 +802,18 @@ function generateStarterRules(detected) {
|
|
|
786
802
|
lines.push("- Prefer Result over unwrap/expect in library code");
|
|
787
803
|
lines.push("- No unsafe blocks without a safety comment");
|
|
788
804
|
}
|
|
805
|
+
lines.push(
|
|
806
|
+
"",
|
|
807
|
+
"## Skill Authoring",
|
|
808
|
+
"",
|
|
809
|
+
"When creating Claude Code skills (.claude/skills/*/SKILL.md):",
|
|
810
|
+
"",
|
|
811
|
+
"- Add TRIGGER when / DO NOT TRIGGER when clauses in the description for auto-invocation",
|
|
812
|
+
"- Add allowed-tools in frontmatter to restrict tool access (e.g. Read, Glob, Grep for read-only skills)",
|
|
813
|
+
"- Add argument-hint in frontmatter showing the expected input format",
|
|
814
|
+
'- Structure as phases: Research, Plan, Execute, Verify with "Done when:" success criteria per phase',
|
|
815
|
+
"- Handle edge cases and preconditions before execution"
|
|
816
|
+
);
|
|
789
817
|
lines.push("");
|
|
790
818
|
return lines.join("\n");
|
|
791
819
|
}
|
|
@@ -2700,13 +2728,13 @@ function createMemoryCommand() {
|
|
|
2700
2728
|
);
|
|
2701
2729
|
memory.addCommand(
|
|
2702
2730
|
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) => {
|
|
2703
|
-
const { runPush } = await import("./push-
|
|
2731
|
+
const { runPush } = await import("./push-7SCHMUFX.js");
|
|
2704
2732
|
await runPush(opts);
|
|
2705
2733
|
})
|
|
2706
2734
|
);
|
|
2707
2735
|
memory.addCommand(
|
|
2708
2736
|
new Command4("pull").description("Pull current project's memories from GitHub Gist").option("--all", "Pull all projects").action(async (opts) => {
|
|
2709
|
-
const { runPull } = await import("./pull-
|
|
2737
|
+
const { runPull } = await import("./pull-YSA225FB.js");
|
|
2710
2738
|
await runPull(opts);
|
|
2711
2739
|
})
|
|
2712
2740
|
);
|
|
@@ -2714,7 +2742,7 @@ function createMemoryCommand() {
|
|
|
2714
2742
|
}
|
|
2715
2743
|
|
|
2716
2744
|
// src/cli.ts
|
|
2717
|
-
var program = new Command5().name("claude-launchpad").description("CLI toolkit that makes Claude Code setups measurably good").version("0.
|
|
2745
|
+
var program = new Command5().name("claude-launchpad").description("CLI toolkit that makes Claude Code setups measurably good").version("0.13.0", "-v, --version").action(async () => {
|
|
2718
2746
|
const hasConfig = await fileExists(join11(process.cwd(), "CLAUDE.md")) || await fileExists(join11(process.cwd(), ".claude", "settings.json"));
|
|
2719
2747
|
if (hasConfig) {
|
|
2720
2748
|
await program.commands.find((c) => c.name() === "doctor")?.parseAsync([], { from: "user" });
|