claude-launchpad 0.10.1-dev.6 → 0.11.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.
Files changed (26) hide show
  1. package/README.md +1 -1
  2. package/dist/{chunk-ZMSHFAZQ.js → chunk-JTKRLIEV.js} +1 -2
  3. package/dist/{chunk-YEGOHLE7.js → chunk-LRJW32ZW.js} +2 -2
  4. package/dist/{chunk-6E7Z4DS7.js → chunk-UCU3PG3D.js} +5 -7
  5. package/dist/chunk-UCU3PG3D.js.map +1 -0
  6. package/dist/cli.js +8 -8
  7. package/dist/cli.js.map +1 -1
  8. package/dist/commands/memory/server.js +1 -1
  9. package/dist/{context-SGPGEJV4.js → context-HB6EK2LE.js} +3 -3
  10. package/dist/{extract-T32FMLN5.js → extract-SRE5TBS2.js} +3 -3
  11. package/dist/{install-OKLYDFBJ.js → install-PSSMUGLO.js} +2 -2
  12. package/dist/{pull-RECEBTUE.js → pull-OGPDUNZ2.js} +4 -4
  13. package/dist/{push-FEAWYBV7.js → push-EXJEKBU4.js} +4 -4
  14. package/dist/{stats-77WLARNA.js → stats-W3BHM3WF.js} +3 -3
  15. package/dist/{tui-YV7AFJFR.js → tui-R6XSBUKS.js} +2 -2
  16. package/package.json +1 -1
  17. package/dist/chunk-6E7Z4DS7.js.map +0 -1
  18. /package/dist/{chunk-ZMSHFAZQ.js.map → chunk-JTKRLIEV.js.map} +0 -0
  19. /package/dist/{chunk-YEGOHLE7.js.map → chunk-LRJW32ZW.js.map} +0 -0
  20. /package/dist/{context-SGPGEJV4.js.map → context-HB6EK2LE.js.map} +0 -0
  21. /package/dist/{extract-T32FMLN5.js.map → extract-SRE5TBS2.js.map} +0 -0
  22. /package/dist/{install-OKLYDFBJ.js.map → install-PSSMUGLO.js.map} +0 -0
  23. /package/dist/{pull-RECEBTUE.js.map → pull-OGPDUNZ2.js.map} +0 -0
  24. /package/dist/{push-FEAWYBV7.js.map → push-EXJEKBU4.js.map} +0 -0
  25. /package/dist/{stats-77WLARNA.js.map → stats-W3BHM3WF.js.map} +0 -0
  26. /package/dist/{tui-YV7AFJFR.js.map → tui-R6XSBUKS.js.map} +0 -0
package/README.md CHANGED
@@ -210,7 +210,7 @@ If memory is not installed, it runs interactive setup. If installed, it shows st
210
210
  - **TUI dashboard** (`--dashboard`) with vim navigation, filtering, and search
211
211
  - **Cross-device sync** pushes and pulls memories between machines via private GitHub Gist
212
212
 
213
- Data stays in `~/.agentic-memory/memory.db`. Sync is opt-in via `gh` CLI.
213
+ Data stays in `~/.agentic-memory/memory.db`. Sync requires the [GitHub CLI](https://cli.github.com/) (`gh`).
214
214
 
215
215
  | Flag / Subcommand | What it does |
216
216
  |---|---|
@@ -278,7 +278,6 @@ function migrate(db) {
278
278
  }
279
279
 
280
280
  export {
281
- DEFAULT_CONFIG,
282
281
  DEFAULT_DECAY_PARAMS,
283
282
  SCORING_WEIGHTS,
284
283
  INJECTION_WEIGHTS,
@@ -294,4 +293,4 @@ export {
294
293
  closeDatabase,
295
294
  migrate
296
295
  };
297
- //# sourceMappingURL=chunk-ZMSHFAZQ.js.map
296
+ //# sourceMappingURL=chunk-JTKRLIEV.js.map
@@ -10,7 +10,7 @@ import {
10
10
  loadConfig,
11
11
  migrate,
12
12
  resolveDataDir
13
- } from "./chunk-ZMSHFAZQ.js";
13
+ } from "./chunk-JTKRLIEV.js";
14
14
 
15
15
  // src/commands/memory/subcommands/init-storage.ts
16
16
  function initStorage(dbPath) {
@@ -32,4 +32,4 @@ function initStorage(dbPath) {
32
32
  export {
33
33
  initStorage
34
34
  };
35
- //# sourceMappingURL=chunk-YEGOHLE7.js.map
35
+ //# sourceMappingURL=chunk-LRJW32ZW.js.map
@@ -2,21 +2,19 @@
2
2
  import {
3
3
  SyncPayloadSchema
4
4
  } from "./chunk-J5NT4JGE.js";
5
- import {
6
- DEFAULT_CONFIG,
7
- resolveDataDir
8
- } from "./chunk-ZMSHFAZQ.js";
9
5
 
10
6
  // src/commands/memory/utils/gist-transport.ts
11
7
  import { execSync } from "child_process";
12
8
  import { readFileSync, writeFileSync, unlinkSync, mkdirSync } from "fs";
13
9
  import { join, dirname } from "path";
14
10
  import { tmpdir } from "os";
11
+ import { homedir } from "os";
15
12
  var EXEC_OPTS = { encoding: "utf-8", timeout: 3e4 };
16
13
  var GIST_DESCRIPTION = "agentic-memory sync";
17
14
  var SYNC_CONFIG_FILE = "sync-config.json";
15
+ var DATA_DIR = join(homedir(), ".agentic-memory");
18
16
  function syncConfigPath() {
19
- return join(resolveDataDir(DEFAULT_CONFIG.dataDir), SYNC_CONFIG_FILE);
17
+ return join(DATA_DIR, SYNC_CONFIG_FILE);
20
18
  }
21
19
  function slugify(project) {
22
20
  return project.replace(/[^a-zA-Z0-9._-]/g, "-");
@@ -49,7 +47,7 @@ function loadSyncConfig() {
49
47
  try {
50
48
  const raw = readFileSync(syncConfigPath(), "utf-8");
51
49
  const parsed = JSON.parse(raw);
52
- if (typeof parsed.gistId === "string" && parsed.gistId.length > 0) {
50
+ if (typeof parsed.gistId === "string" && /^[a-f0-9]+$/.test(parsed.gistId)) {
53
51
  return { gistId: parsed.gistId };
54
52
  }
55
53
  } catch {
@@ -218,4 +216,4 @@ export {
218
216
  parsePayload,
219
217
  mergeFromRemote
220
218
  };
221
- //# sourceMappingURL=chunk-6E7Z4DS7.js.map
219
+ //# sourceMappingURL=chunk-UCU3PG3D.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/memory/utils/gist-transport.ts","../src/commands/memory/utils/sync-merge.ts"],"sourcesContent":["import { execSync } from 'node:child_process';\nimport { readFileSync, writeFileSync, unlinkSync, mkdirSync } from 'node:fs';\nimport { join, dirname } from 'node:path';\nimport { tmpdir } from 'node:os';\nimport { homedir } from 'node:os';\n\ninterface SyncConfig {\n readonly gistId: string;\n}\n\nconst EXEC_OPTS = { encoding: 'utf-8' as const, timeout: 30_000 };\nconst GIST_DESCRIPTION = 'agentic-memory sync';\nconst SYNC_CONFIG_FILE = 'sync-config.json';\nconst DATA_DIR = join(homedir(), '.agentic-memory');\n\nfunction syncConfigPath(): string {\n return join(DATA_DIR, SYNC_CONFIG_FILE);\n}\n\nfunction slugify(project: string): string {\n return project.replace(/[^a-zA-Z0-9._-]/g, '-');\n}\n\nexport function projectToFilename(project: string): string {\n if (!project) throw new Error('Project name cannot be empty');\n return `memories-${slugify(project)}.json`;\n}\n\nexport function filenameToProject(filename: string): string | null {\n const match = filename.match(/^memories-(.+)\\.json$/);\n return match?.[1] ?? null;\n}\n\n\nexport function assertGhAvailable(): void {\n try {\n execSync('gh --version', { ...EXEC_OPTS, stdio: 'pipe' });\n } catch {\n throw new Error(\n 'Memory sync requires the GitHub CLI.\\n' +\n 'Install: https://cli.github.com/\\n' +\n 'Then run: gh auth login'\n );\n }\n try {\n execSync('gh auth status', { ...EXEC_OPTS, stdio: 'pipe' });\n } catch {\n throw new Error(\n 'gh is installed but not authenticated.\\n' +\n 'Run: gh auth login'\n );\n }\n}\n\nexport function loadSyncConfig(): SyncConfig | null {\n try {\n const raw = readFileSync(syncConfigPath(), 'utf-8');\n const parsed = JSON.parse(raw) as Record<string, unknown>;\n if (typeof parsed.gistId === 'string' && /^[a-f0-9]+$/.test(parsed.gistId)) {\n return { gistId: parsed.gistId };\n }\n } catch { /* no local config */ }\n\n const discovered = discoverSyncGist();\n if (discovered) {\n saveSyncConfig({ gistId: discovered });\n return { gistId: discovered };\n }\n return null;\n}\n\nfunction discoverSyncGist(): string | null {\n try {\n const output = execSync(\n 'gh gist list --limit 100',\n { ...EXEC_OPTS, stdio: ['pipe', 'pipe', 'pipe'] },\n );\n for (const line of output.split('\\n')) {\n const cols = line.split('\\t');\n if (cols[1]?.trim() === GIST_DESCRIPTION) {\n const gistId = cols[0]?.trim();\n if (gistId && /^[a-f0-9]+$/.test(gistId)) return gistId;\n }\n }\n } catch { /* gh list failed */ }\n return null;\n}\n\nexport function saveSyncConfig(config: SyncConfig): void {\n const filePath = syncConfigPath();\n mkdirSync(dirname(filePath), { recursive: true });\n writeFileSync(filePath, JSON.stringify(config, null, 2) + '\\n', 'utf-8');\n}\n\nexport function createGist(filename: string, content: string): string {\n const safeFilename = slugify(filename.replace(/\\.json$/, '')) + '.json';\n const tmpFile = join(tmpdir(), safeFilename);\n try {\n writeFileSync(tmpFile, content, 'utf-8');\n const result = execSync(\n `gh gist create \"${tmpFile}\" --desc \"${GIST_DESCRIPTION}\" --public=false`,\n { ...EXEC_OPTS, stdio: ['pipe', 'pipe', 'pipe'] },\n ).trim();\n const gistId = result.split('/').pop()?.trim() ?? '';\n if (!gistId || !/^[a-f0-9]+$/.test(gistId)) {\n throw new Error(`Failed to parse gist ID from: ${result}`);\n }\n saveSyncConfig({ gistId });\n return gistId;\n } finally {\n try { unlinkSync(tmpFile); } catch { /* ignore */ }\n }\n}\n\nexport function readGistFile(gistId: string, filename: string): string | null {\n try {\n const escapedFilename = JSON.stringify(filename);\n return execSync(\n `gh api \"/gists/${gistId}\" --jq '.files[${escapedFilename}].content'`,\n { ...EXEC_OPTS, stdio: ['pipe', 'pipe', 'pipe'] },\n ).trimEnd();\n } catch {\n return null;\n }\n}\n\nexport function listGistFiles(gistId: string): readonly string[] {\n try {\n const output = execSync(\n `gh api \"/gists/${gistId}\" --jq '.files | keys[]'`,\n { ...EXEC_OPTS, stdio: ['pipe', 'pipe', 'pipe'] },\n );\n return output.trim().split('\\n').filter(Boolean);\n } catch {\n return [];\n }\n}\n\nexport function updateGistFiles(\n gistId: string,\n files: Record<string, string>,\n): void {\n const payload = {\n files: Object.fromEntries(\n Object.entries(files).map(([name, content]) => [name, { content }]),\n ),\n };\n const tmpFile = join(tmpdir(), `gist-patch-${Date.now()}.json`);\n try {\n writeFileSync(tmpFile, JSON.stringify(payload), 'utf-8');\n execSync(\n `gh api --method PATCH \"/gists/${gistId}\" --input \"${tmpFile}\"`,\n { ...EXEC_OPTS, stdio: ['pipe', 'pipe', 'pipe'] },\n );\n } finally {\n try { unlinkSync(tmpFile); } catch { /* ignore */ }\n }\n}\n","import { SyncPayloadSchema } from '../types.js';\nimport type { Memory, SyncPayload, SyncMemoryRow, MergeResult, RelationType } from '../types.js';\nimport type { MemoryRepo } from '../storage/memory-repo.js';\nimport type { RelationRepo } from '../storage/relation-repo.js';\n\nfunction memoryToSyncRow(m: Memory): SyncMemoryRow {\n return {\n id: m.id,\n type: m.type,\n title: m.title,\n content: m.content,\n context: m.context,\n source: m.source,\n project: m.project,\n tags: [...m.tags],\n importance: m.importance,\n access_count: m.accessCount,\n injection_count: m.injectionCount,\n created_at: m.createdAt,\n updated_at: m.updatedAt,\n last_accessed: m.lastAccessed,\n };\n}\n\nexport { memoryToSyncRow };\n\nexport function parsePayload(raw: string | null): SyncPayload | null {\n if (!raw || raw === 'null') return null;\n try { return SyncPayloadSchema.parse(JSON.parse(raw)); }\n catch { return null; }\n}\n\nexport function mergeFromRemote(\n memoryRepo: MemoryRepo,\n relationRepo: RelationRepo,\n payload: SyncPayload,\n): MergeResult {\n let inserted = 0;\n let updated = 0;\n let relationsAdded = 0;\n\n const memories = payload.memories;\n\n for (const remote of memories) {\n const local = memoryRepo.getById(remote.id);\n if (!local) {\n memoryRepo.upsertFromSync(remote);\n inserted++;\n } else if (remote.updated_at > local.updatedAt) {\n memoryRepo.upsertFromSync(remote);\n updated++;\n }\n }\n\n const localIds = new Set(memoryRepo.getAll().map((m) => m.id));\n const relations = payload.relations.filter(\n (r) => localIds.has(r.source_id) && localIds.has(r.target_id),\n );\n\n for (const rel of relations) {\n const added = relationRepo.create(\n rel.source_id,\n rel.target_id,\n rel.relation_type as RelationType,\n );\n if (added) relationsAdded++;\n }\n\n return { inserted, updated, relationsAdded };\n}\n"],"mappings":"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","names":[]}
package/dist/cli.js CHANGED
@@ -2587,7 +2587,7 @@ function createMemoryCommand() {
2587
2587
  }
2588
2588
  const { requireMemoryDeps } = await import("./require-deps-NKRCPVAO.js");
2589
2589
  await requireMemoryDeps();
2590
- const { startTui } = await import("./tui-YV7AFJFR.js");
2590
+ const { startTui } = await import("./tui-R6XSBUKS.js");
2591
2591
  await startTui();
2592
2592
  return;
2593
2593
  }
@@ -2609,25 +2609,25 @@ function createMemoryCommand() {
2609
2609
  log.info("Skipped.");
2610
2610
  return;
2611
2611
  }
2612
- const { runInstall } = await import("./install-OKLYDFBJ.js");
2612
+ const { runInstall } = await import("./install-PSSMUGLO.js");
2613
2613
  await runInstall({});
2614
2614
  } else {
2615
2615
  const { requireMemoryDeps } = await import("./require-deps-NKRCPVAO.js");
2616
2616
  await requireMemoryDeps();
2617
- const { runStats } = await import("./stats-77WLARNA.js");
2617
+ const { runStats } = await import("./stats-W3BHM3WF.js");
2618
2618
  await runStats({});
2619
2619
  }
2620
2620
  });
2621
2621
  memory.addCommand(
2622
2622
  new Command4("context").description("Load session context (hook handler)").option("--json", "JSON output").action(async (opts) => {
2623
- const { runContext } = await import("./context-SGPGEJV4.js");
2623
+ const { runContext } = await import("./context-HB6EK2LE.js");
2624
2624
  await runContext(opts);
2625
2625
  }).helpCommand(false),
2626
2626
  { hidden: true }
2627
2627
  );
2628
2628
  memory.addCommand(
2629
2629
  new Command4("extract").description("Extract facts from transcript (hook handler)").action(async () => {
2630
- const { runExtract } = await import("./extract-T32FMLN5.js");
2630
+ const { runExtract } = await import("./extract-SRE5TBS2.js");
2631
2631
  await runExtract();
2632
2632
  }).helpCommand(false),
2633
2633
  { hidden: true }
@@ -2641,13 +2641,13 @@ function createMemoryCommand() {
2641
2641
  );
2642
2642
  memory.addCommand(
2643
2643
  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-FEAWYBV7.js");
2644
+ const { runPush } = await import("./push-EXJEKBU4.js");
2645
2645
  await runPush(opts);
2646
2646
  })
2647
2647
  );
2648
2648
  memory.addCommand(
2649
2649
  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-RECEBTUE.js");
2650
+ const { runPull } = await import("./pull-OGPDUNZ2.js");
2651
2651
  await runPull(opts);
2652
2652
  })
2653
2653
  );
@@ -2655,7 +2655,7 @@ function createMemoryCommand() {
2655
2655
  }
2656
2656
 
2657
2657
  // src/cli.ts
2658
- var program = new Command5().name("claude-launchpad").description("CLI toolkit that makes Claude Code setups measurably good").version("0.10.1-dev.6", "-v, --version").action(async () => {
2658
+ var program = new Command5().name("claude-launchpad").description("CLI toolkit that makes Claude Code setups measurably good").version("0.11.0", "-v, --version").action(async () => {
2659
2659
  const hasConfig = await fileExists(join11(process.cwd(), "CLAUDE.md")) || await fileExists(join11(process.cwd(), ".claude", "settings.json"));
2660
2660
  if (hasConfig) {
2661
2661
  await program.commands.find((c) => c.name() === "doctor")?.parseAsync([], { from: "user" });