claude-launchpad 1.16.0 → 1.17.1
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-IPGNXDJF.js → chunk-27HOMHA5.js} +2 -2
- package/dist/{chunk-7KB5YGQZ.js → chunk-2HHXZN3Z.js} +2 -2
- package/dist/{chunk-LCKV24Q3.js → chunk-5H6SQUCA.js} +4 -4
- package/dist/{chunk-MX3T2VEX.js → chunk-7N2D67YJ.js} +3 -3
- package/dist/{chunk-U2TFIUGE.js → chunk-BGCJKEIV.js} +38 -7
- package/dist/chunk-BGCJKEIV.js.map +1 -0
- package/dist/{chunk-IDH3M4EI.js → chunk-MRW63LDL.js} +6 -1
- package/dist/chunk-MRW63LDL.js.map +1 -0
- package/dist/{chunk-DLDVXHI3.js → chunk-VWZTF7B2.js} +2 -2
- package/dist/cli.js +69 -29
- package/dist/cli.js.map +1 -1
- package/dist/commands/memory/server.js +5 -5
- package/dist/{context-3GHG7KW6.js → context-EFI7K7G2.js} +7 -7
- package/dist/{doctor-EKGJ2YAO.js → doctor-XO2B34OL.js} +5 -5
- package/dist/{install-543ZKMXX.js → install-U6FHASCJ.js} +9 -7
- package/dist/install-U6FHASCJ.js.map +1 -0
- package/dist/{pull-ULSZEVCR.js → pull-5QZGRDUZ.js} +9 -9
- package/dist/{push-JXCWX4NY.js → push-CRVJD3AF.js} +9 -9
- package/dist/{require-deps-AEDO5YRM.js → require-deps-PTIUYPTA.js} +3 -3
- package/dist/{stats-63L7C24W.js → stats-52ECUBTK.js} +8 -8
- package/dist/{sync-QTJ6BXQ4.js → sync-D5VL7UG2.js} +5 -5
- package/dist/{sync-clean-OJEK4XH4.js → sync-clean-D3ERG2PH.js} +3 -3
- package/dist/{sync-status-EAX527SC.js → sync-status-XUMY7DLU.js} +9 -9
- package/dist/{tui-BS4XXLOC.js → tui-AG6UZTFO.js} +166 -47
- package/dist/tui-AG6UZTFO.js.map +1 -0
- package/package.json +3 -3
- package/dist/chunk-IDH3M4EI.js.map +0 -1
- package/dist/chunk-U2TFIUGE.js.map +0 -1
- package/dist/install-543ZKMXX.js.map +0 -1
- package/dist/tui-BS4XXLOC.js.map +0 -1
- /package/dist/{chunk-IPGNXDJF.js.map → chunk-27HOMHA5.js.map} +0 -0
- /package/dist/{chunk-7KB5YGQZ.js.map → chunk-2HHXZN3Z.js.map} +0 -0
- /package/dist/{chunk-LCKV24Q3.js.map → chunk-5H6SQUCA.js.map} +0 -0
- /package/dist/{chunk-MX3T2VEX.js.map → chunk-7N2D67YJ.js.map} +0 -0
- /package/dist/{chunk-DLDVXHI3.js.map → chunk-VWZTF7B2.js.map} +0 -0
- /package/dist/{context-3GHG7KW6.js.map → context-EFI7K7G2.js.map} +0 -0
- /package/dist/{doctor-EKGJ2YAO.js.map → doctor-XO2B34OL.js.map} +0 -0
- /package/dist/{pull-ULSZEVCR.js.map → pull-5QZGRDUZ.js.map} +0 -0
- /package/dist/{push-JXCWX4NY.js.map → push-CRVJD3AF.js.map} +0 -0
- /package/dist/{require-deps-AEDO5YRM.js.map → require-deps-PTIUYPTA.js.map} +0 -0
- /package/dist/{stats-63L7C24W.js.map → stats-52ECUBTK.js.map} +0 -0
- /package/dist/{sync-QTJ6BXQ4.js.map → sync-D5VL7UG2.js.map} +0 -0
- /package/dist/{sync-clean-OJEK4XH4.js.map → sync-clean-D3ERG2PH.js.map} +0 -0
- /package/dist/{sync-status-EAX527SC.js.map → sync-status-XUMY7DLU.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
log
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-BGCJKEIV.js";
|
|
5
5
|
|
|
6
6
|
// src/commands/memory/utils/gist-transport.ts
|
|
7
7
|
import { execSync } from "child_process";
|
|
@@ -205,4 +205,4 @@ export {
|
|
|
205
205
|
deleteGistFile,
|
|
206
206
|
updateGistFiles
|
|
207
207
|
};
|
|
208
|
-
//# sourceMappingURL=chunk-
|
|
208
|
+
//# sourceMappingURL=chunk-27HOMHA5.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
log
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-BGCJKEIV.js";
|
|
5
5
|
|
|
6
6
|
// src/commands/memory/utils/require-deps.ts
|
|
7
7
|
import { createRequire } from "module";
|
|
@@ -44,4 +44,4 @@ export {
|
|
|
44
44
|
cwdRequire,
|
|
45
45
|
requireMemoryDeps
|
|
46
46
|
};
|
|
47
|
-
//# sourceMappingURL=chunk-
|
|
47
|
+
//# sourceMappingURL=chunk-2HHXZN3Z.js.map
|
|
@@ -5,16 +5,16 @@ import {
|
|
|
5
5
|
} from "./chunk-HSGSTSVN.js";
|
|
6
6
|
import {
|
|
7
7
|
migrate
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-7N2D67YJ.js";
|
|
9
9
|
import {
|
|
10
10
|
MemoryRepo
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-MRW63LDL.js";
|
|
12
12
|
import {
|
|
13
13
|
closeDatabase,
|
|
14
14
|
createDatabase,
|
|
15
15
|
loadConfig,
|
|
16
16
|
resolveDataDir
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-VWZTF7B2.js";
|
|
18
18
|
|
|
19
19
|
// src/commands/memory/subcommands/init-storage.ts
|
|
20
20
|
function initStorage(dbPath) {
|
|
@@ -36,4 +36,4 @@ function initStorage(dbPath) {
|
|
|
36
36
|
export {
|
|
37
37
|
initStorage
|
|
38
38
|
};
|
|
39
|
-
//# sourceMappingURL=chunk-
|
|
39
|
+
//# sourceMappingURL=chunk-5H6SQUCA.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
cwdRequire
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-2HHXZN3Z.js";
|
|
5
5
|
import {
|
|
6
6
|
__export
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-BGCJKEIV.js";
|
|
8
8
|
|
|
9
9
|
// src/commands/memory/storage/migrations/001-initial.ts
|
|
10
10
|
var initial_exports = {};
|
|
@@ -222,4 +222,4 @@ function migrate(db) {
|
|
|
222
222
|
export {
|
|
223
223
|
migrate
|
|
224
224
|
};
|
|
225
|
-
//# sourceMappingURL=chunk-
|
|
225
|
+
//# sourceMappingURL=chunk-7N2D67YJ.js.map
|
|
@@ -1173,7 +1173,7 @@ These rules apply whenever editing \`BACKLOG.md\` or \`TASKS.md\`. The workflow
|
|
|
1173
1173
|
}
|
|
1174
1174
|
|
|
1175
1175
|
// src/commands/init/generators/hooks-rule.ts
|
|
1176
|
-
var HOOKS_RULE_VERSION =
|
|
1176
|
+
var HOOKS_RULE_VERSION = 2;
|
|
1177
1177
|
function generateHooksRule() {
|
|
1178
1178
|
return `---
|
|
1179
1179
|
paths: [".claude/settings.json", ".claude/settings.local.json"]
|
|
@@ -1208,6 +1208,17 @@ Reference: https://code.claude.com/docs/en/hooks
|
|
|
1208
1208
|
- \`matcher\`: a regex-style string matching tool names (e.g. \`Bash\`, \`Read|Write|Edit\`). Empty string matches all tools for the event. For SessionStart use \`startup\`, \`resume\`, \`clear\`, or \`compact\`.
|
|
1209
1209
|
- \`hooks\` array: every entry runs in parallel when the matcher fires. Identical command strings are deduplicated automatically.
|
|
1210
1210
|
|
|
1211
|
+
## The \`if\` field \u2014 when to use it
|
|
1212
|
+
|
|
1213
|
+
- \`if\` (PreToolUse/PostToolUse/PostToolUseFailure/PermissionRequest) filters a hook with a SINGLE permission rule (e.g. \`"if": "Bash(terraform *)"\`) before your command ever spawns \u2014 cheaper than jq+grep for hooks targeting one narrow rule.
|
|
1214
|
+
- The generated guards intentionally do NOT use it: they match multiple patterns in one hook (rm -rf, DROP TABLE, force-push) and need exclusions (.env but not .env.example) that permission-rule syntax cannot express. Splitting them into per-rule entries would grow the config without changing behavior \u2014 the jq+stdin grep stays the single source of truth.
|
|
1215
|
+
- For your own single-pattern hooks, prefer \`if\` over an inline grep.
|
|
1216
|
+
|
|
1217
|
+
## Long-running SessionEnd work \u2014 use \`async: true\`
|
|
1218
|
+
|
|
1219
|
+
- Plain SessionEnd hooks are killed when Claude Code exits \u2014 a ~3s network push never completes (verified empirically). Mark the hook \`{"type": "command", "command": "...", "async": true}\` and it survives; output is logged without touching the conversation.
|
|
1220
|
+
- The old workaround was a \`nohup ... & exit 0\` wrapper \u2014 still works, but the native field is canonical now.
|
|
1221
|
+
|
|
1211
1222
|
## Input \u2014 JSON on stdin, NOT env vars
|
|
1212
1223
|
|
|
1213
1224
|
The hook receives a JSON payload on stdin. **There are no \`TOOL_INPUT_*\` environment variables in current Claude Code.** A hook that does \`cmd="$TOOL_INPUT_COMMAND"\` reads an empty string and silently no-ops. This is the single most common authoring bug.
|
|
@@ -1512,6 +1523,15 @@ async function createHooksRule(root) {
|
|
|
1512
1523
|
);
|
|
1513
1524
|
return true;
|
|
1514
1525
|
}
|
|
1526
|
+
async function updateHooksRule(root) {
|
|
1527
|
+
const hooksPath = join4(root, ".claude", "rules", "hooks.md");
|
|
1528
|
+
const content = await readFile3(hooksPath, "utf-8").catch(() => null);
|
|
1529
|
+
if (content === null) return false;
|
|
1530
|
+
if (!/<!-- lp-hooks-version: \d+ -->/.test(content)) return false;
|
|
1531
|
+
await writeFile3(hooksPath, generateHooksRule());
|
|
1532
|
+
log.success("Updated .claude/rules/hooks.md to the latest version");
|
|
1533
|
+
return true;
|
|
1534
|
+
}
|
|
1515
1535
|
async function createVerificationRule(root) {
|
|
1516
1536
|
const rulesDir = join4(root, ".claude", "rules");
|
|
1517
1537
|
const verificationPath = join4(rulesDir, "verification.md");
|
|
@@ -1879,7 +1899,7 @@ async function addSessionStartPullHook(root, placement) {
|
|
|
1879
1899
|
async function addSessionEndPushHook(root, placement) {
|
|
1880
1900
|
const target = placement === "local" ? "settings.local.json" : "settings.json";
|
|
1881
1901
|
return addPlacementHook(root, placement, "SessionEnd", "memory push", {
|
|
1882
|
-
hooks: [{ type: "command", command: "
|
|
1902
|
+
hooks: [{ type: "command", command: "npx claude-launchpad memory push -y", async: true }]
|
|
1883
1903
|
}, false, `Added SessionEnd hook for memory sync to ${target}`);
|
|
1884
1904
|
}
|
|
1885
1905
|
async function upgradeStaleSessionEndPushHook(root) {
|
|
@@ -1898,9 +1918,9 @@ async function upgradeStaleSessionEndPushHook(root) {
|
|
|
1898
1918
|
if (!inner) return group;
|
|
1899
1919
|
const rewritten = inner.map((h) => {
|
|
1900
1920
|
const cmd = typeof h.command === "string" ? h.command : "";
|
|
1901
|
-
if (!cmd.includes("memory push") ||
|
|
1921
|
+
if (!cmd.includes("memory push") || h.async === true) return h;
|
|
1902
1922
|
changed = true;
|
|
1903
|
-
return { ...h, command: "
|
|
1923
|
+
return { ...h, type: "command", command: "npx claude-launchpad memory push -y", async: true };
|
|
1904
1924
|
});
|
|
1905
1925
|
return { ...group, hooks: rewritten };
|
|
1906
1926
|
});
|
|
@@ -1908,7 +1928,7 @@ async function upgradeStaleSessionEndPushHook(root) {
|
|
|
1908
1928
|
const updated = { ...settings, hooks: { ...hooks, SessionEnd: upgraded } };
|
|
1909
1929
|
await write(root, updated);
|
|
1910
1930
|
const target = placement === "local" ? "settings.local.json" : "settings.json";
|
|
1911
|
-
log.success(`Upgraded SessionEnd push hook in ${target} (
|
|
1931
|
+
log.success(`Upgraded SessionEnd push hook in ${target} (native async: true)`);
|
|
1912
1932
|
changedAny = true;
|
|
1913
1933
|
}
|
|
1914
1934
|
return changedAny;
|
|
@@ -2150,6 +2170,11 @@ var FIX_TABLE = [
|
|
|
2150
2170
|
match: "workflow.md rule is outdated",
|
|
2151
2171
|
fix: (root) => updateWorkflowRule(root)
|
|
2152
2172
|
},
|
|
2173
|
+
{
|
|
2174
|
+
analyzer: "Rules",
|
|
2175
|
+
match: "hooks.md rule is outdated",
|
|
2176
|
+
fix: (root) => updateHooksRule(root)
|
|
2177
|
+
},
|
|
2153
2178
|
{
|
|
2154
2179
|
analyzer: "Rules",
|
|
2155
2180
|
match: "verification.md rule is outdated",
|
|
@@ -2337,7 +2362,12 @@ var FIX_TABLE = [
|
|
|
2337
2362
|
},
|
|
2338
2363
|
{
|
|
2339
2364
|
analyzer: "Memory",
|
|
2340
|
-
match: "SessionEnd push hook is
|
|
2365
|
+
match: "SessionEnd push hook is neither async nor detached",
|
|
2366
|
+
fix: (root) => upgradeStaleSessionEndPushHook(root)
|
|
2367
|
+
},
|
|
2368
|
+
{
|
|
2369
|
+
analyzer: "Memory",
|
|
2370
|
+
match: "uses the legacy nohup wrapper",
|
|
2341
2371
|
fix: (root) => upgradeStaleSessionEndPushHook(root)
|
|
2342
2372
|
},
|
|
2343
2373
|
{
|
|
@@ -2724,6 +2754,7 @@ export {
|
|
|
2724
2754
|
writeWorkflowCheckScript,
|
|
2725
2755
|
WORKFLOW_RULE_VERSION,
|
|
2726
2756
|
generateWorkflowRule,
|
|
2757
|
+
HOOKS_RULE_VERSION,
|
|
2727
2758
|
generateHooksRule,
|
|
2728
2759
|
VERIFICATION_RULE_VERSION,
|
|
2729
2760
|
generateVerificationRule,
|
|
@@ -2734,4 +2765,4 @@ export {
|
|
|
2734
2765
|
printScoreCard,
|
|
2735
2766
|
renderDoctorReport
|
|
2736
2767
|
};
|
|
2737
|
-
//# sourceMappingURL=chunk-
|
|
2768
|
+
//# sourceMappingURL=chunk-BGCJKEIV.js.map
|