@basestream/cli 0.2.4 → 0.2.5
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/cli.mjs +92 -39
- package/package.json +1 -1
package/dist/cli.mjs
CHANGED
|
@@ -332,22 +332,47 @@ function injectClaudeCodeHook() {
|
|
|
332
332
|
);
|
|
333
333
|
if (alreadyInstalled) {
|
|
334
334
|
check("Claude Code hook already installed");
|
|
335
|
-
|
|
335
|
+
} else {
|
|
336
|
+
hooks.Stop.push({
|
|
337
|
+
matcher: "*",
|
|
338
|
+
hooks: [
|
|
339
|
+
{
|
|
340
|
+
type: "command",
|
|
341
|
+
command: HOOK_COMMAND,
|
|
342
|
+
timeout: 30
|
|
343
|
+
}
|
|
344
|
+
]
|
|
345
|
+
});
|
|
336
346
|
}
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
hooks.Stop = [];
|
|
340
|
-
}
|
|
341
|
-
hooks.Stop.push({
|
|
342
|
-
matcher: "*",
|
|
343
|
-
hooks: [
|
|
347
|
+
} else {
|
|
348
|
+
hooks.Stop = [
|
|
344
349
|
{
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
350
|
+
matcher: "*",
|
|
351
|
+
hooks: [
|
|
352
|
+
{
|
|
353
|
+
type: "command",
|
|
354
|
+
command: HOOK_COMMAND,
|
|
355
|
+
timeout: 30
|
|
356
|
+
}
|
|
357
|
+
]
|
|
348
358
|
}
|
|
349
|
-
]
|
|
350
|
-
}
|
|
359
|
+
];
|
|
360
|
+
}
|
|
361
|
+
if (!settings.permissions || typeof settings.permissions !== "object") {
|
|
362
|
+
settings.permissions = {};
|
|
363
|
+
}
|
|
364
|
+
const permissions = settings.permissions;
|
|
365
|
+
if (!Array.isArray(permissions.allow)) {
|
|
366
|
+
permissions.allow = [];
|
|
367
|
+
}
|
|
368
|
+
const allow = permissions.allow;
|
|
369
|
+
const SKILL_PERMISSIONS2 = [
|
|
370
|
+
`Write(${os2.homedir()}/.basestream/sessions/**)`,
|
|
371
|
+
`Read(${os2.homedir()}/.basestream/sessions/**)`
|
|
372
|
+
];
|
|
373
|
+
for (const rule of SKILL_PERMISSIONS2) {
|
|
374
|
+
if (!allow.includes(rule)) allow.push(rule);
|
|
375
|
+
}
|
|
351
376
|
fs2.writeFileSync(CLAUDE_SETTINGS_PATH, JSON.stringify(settings, null, 2));
|
|
352
377
|
check("Injected tracking hook into ~/.claude/settings.json");
|
|
353
378
|
}
|
|
@@ -754,51 +779,79 @@ init_util();
|
|
|
754
779
|
import fs6 from "node:fs";
|
|
755
780
|
import path6 from "node:path";
|
|
756
781
|
import os4 from "node:os";
|
|
757
|
-
var
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
);
|
|
782
|
+
var CLAUDE_DIR2 = path6.join(os4.homedir(), ".claude");
|
|
783
|
+
var CLAUDE_SETTINGS_PATH2 = path6.join(CLAUDE_DIR2, "settings.json");
|
|
784
|
+
var CLAUDE_SKILLS_PATH2 = path6.join(CLAUDE_DIR2, "skills", "bs-summarize.md");
|
|
785
|
+
var CLAUDE_MD_PATH2 = path6.join(CLAUDE_DIR2, "CLAUDE.md");
|
|
762
786
|
var HOOK_MARKER2 = "_hook-stop";
|
|
787
|
+
var CLAUDE_MD_MARKER2 = "<!-- basestream -->";
|
|
788
|
+
var SKILL_PERMISSIONS = [
|
|
789
|
+
`Write(${os4.homedir()}/.basestream/sessions/**)`,
|
|
790
|
+
`Read(${os4.homedir()}/.basestream/sessions/**)`
|
|
791
|
+
];
|
|
763
792
|
function removeClaudeCodeHook() {
|
|
764
793
|
if (!fs6.existsSync(CLAUDE_SETTINGS_PATH2)) {
|
|
765
794
|
warn("No Claude Code settings found \u2014 nothing to remove");
|
|
766
|
-
return
|
|
795
|
+
return;
|
|
767
796
|
}
|
|
768
797
|
let settings;
|
|
769
798
|
try {
|
|
770
799
|
settings = JSON.parse(fs6.readFileSync(CLAUDE_SETTINGS_PATH2, "utf-8"));
|
|
771
800
|
} catch {
|
|
772
801
|
warn("Could not parse ~/.claude/settings.json");
|
|
773
|
-
return
|
|
802
|
+
return;
|
|
774
803
|
}
|
|
804
|
+
let changed = false;
|
|
775
805
|
const hooks = settings.hooks;
|
|
776
|
-
if (
|
|
777
|
-
|
|
778
|
-
|
|
806
|
+
if (hooks && Array.isArray(hooks.Stop)) {
|
|
807
|
+
const before = hooks.Stop.length;
|
|
808
|
+
hooks.Stop = hooks.Stop.filter(
|
|
809
|
+
(entry) => !entry.hooks?.some((h) => h.command?.includes(HOOK_MARKER2))
|
|
810
|
+
);
|
|
811
|
+
if (hooks.Stop.length !== before) {
|
|
812
|
+
if (hooks.Stop.length === 0) delete hooks.Stop;
|
|
813
|
+
if (Object.keys(hooks).length === 0) delete settings.hooks;
|
|
814
|
+
changed = true;
|
|
815
|
+
}
|
|
779
816
|
}
|
|
780
|
-
const
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
817
|
+
const permissions = settings.permissions;
|
|
818
|
+
if (permissions && Array.isArray(permissions.allow)) {
|
|
819
|
+
const before = permissions.allow.length;
|
|
820
|
+
permissions.allow = permissions.allow.filter(
|
|
821
|
+
(rule) => !SKILL_PERMISSIONS.includes(rule)
|
|
822
|
+
);
|
|
823
|
+
if (permissions.allow.length !== before) {
|
|
824
|
+
if (permissions.allow.length === 0) delete permissions.allow;
|
|
825
|
+
if (Object.keys(permissions).length === 0) delete settings.permissions;
|
|
826
|
+
changed = true;
|
|
827
|
+
}
|
|
788
828
|
}
|
|
789
|
-
if (
|
|
790
|
-
|
|
829
|
+
if (changed) {
|
|
830
|
+
fs6.writeFileSync(CLAUDE_SETTINGS_PATH2, JSON.stringify(settings, null, 2));
|
|
831
|
+
check("Removed hook and permissions from ~/.claude/settings.json");
|
|
832
|
+
} else {
|
|
833
|
+
warn("No Basestream hook installed");
|
|
791
834
|
}
|
|
792
|
-
|
|
793
|
-
|
|
835
|
+
}
|
|
836
|
+
function removeSkill() {
|
|
837
|
+
if (fs6.existsSync(CLAUDE_SKILLS_PATH2)) {
|
|
838
|
+
fs6.rmSync(CLAUDE_SKILLS_PATH2);
|
|
839
|
+
check("Removed /bs-summarize skill from ~/.claude/skills/");
|
|
794
840
|
}
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
return
|
|
841
|
+
}
|
|
842
|
+
function removeClaudeMdRule() {
|
|
843
|
+
if (!fs6.existsSync(CLAUDE_MD_PATH2)) return;
|
|
844
|
+
const existing = fs6.readFileSync(CLAUDE_MD_PATH2, "utf-8");
|
|
845
|
+
if (!existing.includes(CLAUDE_MD_MARKER2)) return;
|
|
846
|
+
const updated = existing.replace(/\n\n<!-- basestream -->[\s\S]*?<!-- \/basestream -->\n?/, "").replace(/<!-- basestream -->[\s\S]*?<!-- \/basestream -->\n?/, "").trimEnd();
|
|
847
|
+
fs6.writeFileSync(CLAUDE_MD_PATH2, updated ? updated + "\n" : "");
|
|
848
|
+
check("Removed Basestream rules from ~/.claude/CLAUDE.md");
|
|
798
849
|
}
|
|
799
850
|
async function uninstall() {
|
|
800
851
|
console.log();
|
|
801
852
|
removeClaudeCodeHook();
|
|
853
|
+
removeSkill();
|
|
854
|
+
removeClaudeMdRule();
|
|
802
855
|
console.log();
|
|
803
856
|
console.log(
|
|
804
857
|
` ${c.dim("Basestream will no longer track new Claude Code sessions.")}`
|
|
@@ -834,7 +887,7 @@ async function main() {
|
|
|
834
887
|
process.exit(0);
|
|
835
888
|
}
|
|
836
889
|
if (command === "--version" || command === "-v") {
|
|
837
|
-
console.log(true ? "0.2.
|
|
890
|
+
console.log(true ? "0.2.5" : "dev");
|
|
838
891
|
process.exit(0);
|
|
839
892
|
}
|
|
840
893
|
switch (command || "init") {
|
package/package.json
CHANGED