petdex-cc 0.1.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/LICENSE +21 -0
- package/README.md +247 -0
- package/README_CN.md +247 -0
- package/dist/bin/cli.d.ts +3 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +78 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/src/assets/tray-icon.png +0 -0
- package/dist/src/cli/config.d.ts +9 -0
- package/dist/src/cli/config.d.ts.map +1 -0
- package/dist/src/cli/config.js +41 -0
- package/dist/src/cli/config.js.map +1 -0
- package/dist/src/cli/install.d.ts +2 -0
- package/dist/src/cli/install.d.ts.map +1 -0
- package/dist/src/cli/install.js +62 -0
- package/dist/src/cli/install.js.map +1 -0
- package/dist/src/cli/list.d.ts +2 -0
- package/dist/src/cli/list.d.ts.map +1 -0
- package/dist/src/cli/list.js +20 -0
- package/dist/src/cli/list.js.map +1 -0
- package/dist/src/cli/start.d.ts +3 -0
- package/dist/src/cli/start.d.ts.map +1 -0
- package/dist/src/cli/start.js +37 -0
- package/dist/src/cli/start.js.map +1 -0
- package/dist/src/cli/status.d.ts +2 -0
- package/dist/src/cli/status.d.ts.map +1 -0
- package/dist/src/cli/status.js +8 -0
- package/dist/src/cli/status.js.map +1 -0
- package/dist/src/cli/stop.d.ts +2 -0
- package/dist/src/cli/stop.d.ts.map +1 -0
- package/dist/src/cli/stop.js +39 -0
- package/dist/src/cli/stop.js.map +1 -0
- package/dist/src/cli/switch.d.ts +2 -0
- package/dist/src/cli/switch.d.ts.map +1 -0
- package/dist/src/cli/switch.js +34 -0
- package/dist/src/cli/switch.js.map +1 -0
- package/dist/src/cli/uninstall.d.ts +2 -0
- package/dist/src/cli/uninstall.d.ts.map +1 -0
- package/dist/src/cli/uninstall.js +18 -0
- package/dist/src/cli/uninstall.js.map +1 -0
- package/dist/src/hooks/register.d.ts +3 -0
- package/dist/src/hooks/register.d.ts.map +1 -0
- package/dist/src/hooks/register.js +113 -0
- package/dist/src/hooks/register.js.map +1 -0
- package/dist/src/hooks/write-scripts.d.ts +2 -0
- package/dist/src/hooks/write-scripts.d.ts.map +1 -0
- package/dist/src/hooks/write-scripts.js +39 -0
- package/dist/src/hooks/write-scripts.js.map +1 -0
- package/dist/src/main/ai-speech.d.ts +22 -0
- package/dist/src/main/ai-speech.d.ts.map +1 -0
- package/dist/src/main/ai-speech.js +131 -0
- package/dist/src/main/ai-speech.js.map +1 -0
- package/dist/src/main/event-mapper.d.ts +10 -0
- package/dist/src/main/event-mapper.d.ts.map +1 -0
- package/dist/src/main/event-mapper.js +92 -0
- package/dist/src/main/event-mapper.js.map +1 -0
- package/dist/src/main/index.d.ts +2 -0
- package/dist/src/main/index.d.ts.map +1 -0
- package/dist/src/main/index.js +175 -0
- package/dist/src/main/index.js.map +1 -0
- package/dist/src/main/server.d.ts +8 -0
- package/dist/src/main/server.d.ts.map +1 -0
- package/dist/src/main/server.js +81 -0
- package/dist/src/main/server.js.map +1 -0
- package/dist/src/main/storage.d.ts +15 -0
- package/dist/src/main/storage.d.ts.map +1 -0
- package/dist/src/main/storage.js +90 -0
- package/dist/src/main/storage.js.map +1 -0
- package/dist/src/main/tray.d.ts +3 -0
- package/dist/src/main/tray.d.ts.map +1 -0
- package/dist/src/main/tray.js +156 -0
- package/dist/src/main/tray.js.map +1 -0
- package/dist/src/petdex-api/client.d.ts +21 -0
- package/dist/src/petdex-api/client.d.ts.map +1 -0
- package/dist/src/petdex-api/client.js +23 -0
- package/dist/src/petdex-api/client.js.map +1 -0
- package/dist/src/petdex-api/download.d.ts +8 -0
- package/dist/src/petdex-api/download.d.ts.map +1 -0
- package/dist/src/petdex-api/download.js +45 -0
- package/dist/src/petdex-api/download.js.map +1 -0
- package/dist/src/renderer/bubble.d.ts +30 -0
- package/dist/src/renderer/bubble.d.ts.map +1 -0
- package/dist/src/renderer/bubble.js +69 -0
- package/dist/src/renderer/bubble.js.map +1 -0
- package/dist/src/renderer/click-through.d.ts +21 -0
- package/dist/src/renderer/click-through.d.ts.map +1 -0
- package/dist/src/renderer/click-through.js +29 -0
- package/dist/src/renderer/click-through.js.map +1 -0
- package/dist/src/renderer/context-menu.d.ts +24 -0
- package/dist/src/renderer/context-menu.d.ts.map +1 -0
- package/dist/src/renderer/context-menu.js +83 -0
- package/dist/src/renderer/context-menu.js.map +1 -0
- package/dist/src/renderer/drag.d.ts +3 -0
- package/dist/src/renderer/drag.d.ts.map +1 -0
- package/dist/src/renderer/drag.js +57 -0
- package/dist/src/renderer/drag.js.map +1 -0
- package/dist/src/renderer/index.html +264 -0
- package/dist/src/renderer/pet-sprite.d.ts +25 -0
- package/dist/src/renderer/pet-sprite.d.ts.map +1 -0
- package/dist/src/renderer/pet-sprite.js +59 -0
- package/dist/src/renderer/pet-sprite.js.map +1 -0
- package/dist/src/renderer/renderer.d.ts +2 -0
- package/dist/src/renderer/renderer.d.ts.map +1 -0
- package/dist/src/renderer/renderer.js +244 -0
- package/dist/src/renderer/renderer.js.map +1 -0
- package/dist/src/renderer/wander.d.ts +8 -0
- package/dist/src/renderer/wander.d.ts.map +1 -0
- package/dist/src/renderer/wander.js +137 -0
- package/dist/src/renderer/wander.js.map +1 -0
- package/dist/src/shared/events.d.ts +62 -0
- package/dist/src/shared/events.d.ts.map +1 -0
- package/dist/src/shared/events.js +2 -0
- package/dist/src/shared/events.js.map +1 -0
- package/dist/src/shared/levels.d.ts +18 -0
- package/dist/src/shared/levels.d.ts.map +1 -0
- package/dist/src/shared/levels.js +20 -0
- package/dist/src/shared/levels.js.map +1 -0
- package/dist/src/shared/pet-states.d.ts +72 -0
- package/dist/src/shared/pet-states.d.ts.map +1 -0
- package/dist/src/shared/pet-states.js +20 -0
- package/dist/src/shared/pet-states.js.map +1 -0
- package/package.json +48 -0
- package/src/assets/tray-icon.png +0 -0
- package/src/hooks/bridge.ps1 +11 -0
- package/src/hooks/bridge.sh +9 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { join, dirname } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { createRequire } from "node:module";
|
|
6
|
+
import { findPetBySlug } from "../petdex-api/client.js";
|
|
7
|
+
import { downloadPetAssets } from "../petdex-api/download.js";
|
|
8
|
+
import { registerHooks } from "../hooks/register.js";
|
|
9
|
+
import { writeBridgeScripts } from "../hooks/write-scripts.js";
|
|
10
|
+
import { spawn } from "node:child_process";
|
|
11
|
+
import { getDefaultState, saveState } from "../main/storage.js";
|
|
12
|
+
import { stop } from "./stop.js";
|
|
13
|
+
const CLAUDE_DIR = join(homedir(), ".claude");
|
|
14
|
+
export async function install(slug) {
|
|
15
|
+
if (!existsSync(CLAUDE_DIR)) {
|
|
16
|
+
console.error("Claude Code not detected. Install Claude Code first.");
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
console.log(`Looking up pet "${slug}" on Petdex...`);
|
|
20
|
+
const pet = await findPetBySlug(slug);
|
|
21
|
+
if (!pet) {
|
|
22
|
+
console.error(`Pet "${slug}" not found on Petdex.`);
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
console.log(`Found: ${pet.displayName} (${pet.kind})`);
|
|
26
|
+
console.log("Downloading assets...");
|
|
27
|
+
const paths = await downloadPetAssets(pet);
|
|
28
|
+
console.log(` Spritesheet: ${paths.spritesheetPath}`);
|
|
29
|
+
console.log(` Pet JSON: ${paths.petJsonPath}`);
|
|
30
|
+
console.log("Writing bridge scripts...");
|
|
31
|
+
writeBridgeScripts();
|
|
32
|
+
console.log("Configuring Claude Code hooks...");
|
|
33
|
+
registerHooks();
|
|
34
|
+
console.log(" Hooks registered in ~/.claude/settings.json");
|
|
35
|
+
saveState(getDefaultState(slug));
|
|
36
|
+
// Kill any existing pet process
|
|
37
|
+
stop();
|
|
38
|
+
try {
|
|
39
|
+
const { execSync } = await import("node:child_process");
|
|
40
|
+
if (process.platform === "win32") {
|
|
41
|
+
execSync("taskkill /F /IM electron.exe 2>nul", { stdio: "ignore" });
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
execSync("pkill -f 'electron.*petdex-cc' 2>/dev/null || true", { stdio: "ignore" });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch { }
|
|
48
|
+
console.log("Starting pet...");
|
|
49
|
+
await startElectron();
|
|
50
|
+
console.log(`\n✓ petdex-cc installed! "${pet.displayName}" is now on your desktop.`);
|
|
51
|
+
}
|
|
52
|
+
async function startElectron() {
|
|
53
|
+
const require = createRequire(import.meta.url);
|
|
54
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
55
|
+
const electronPath = require("electron");
|
|
56
|
+
const child = spawn(String(electronPath), [join(__dirname, "..", "main", "index.js")], {
|
|
57
|
+
detached: true,
|
|
58
|
+
stdio: "ignore",
|
|
59
|
+
});
|
|
60
|
+
child.unref();
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/cli/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/cli/list.ts"],"names":[],"mappings":"AAEA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAgB1C"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { listPets } from "../petdex-api/client.js";
|
|
2
|
+
export async function list() {
|
|
3
|
+
try {
|
|
4
|
+
const pets = await listPets();
|
|
5
|
+
if (pets.length === 0) {
|
|
6
|
+
console.log("No pets found.");
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
console.log(`Found ${pets.length} pets:\n`);
|
|
10
|
+
console.log(" Slug".padEnd(30) + "Name".padEnd(30) + "Kind");
|
|
11
|
+
console.log("-".repeat(70));
|
|
12
|
+
for (const pet of pets) {
|
|
13
|
+
console.log(` ${pet.slug.padEnd(28)}${pet.displayName.padEnd(30)}${pet.kind}`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
console.log("Could not fetch pet list. Check your internet connection.");
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/cli/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,MAAM,UAAU,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/cli/start.ts"],"names":[],"mappings":"AASA,wBAAgB,KAAK,IAAI,IAAI,CAmB5B;AAED,wBAAgB,SAAS,IAAI,OAAO,CASnC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { readFileSync, existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { spawn } from "node:child_process";
|
|
5
|
+
import { createRequire } from "node:module";
|
|
6
|
+
const require = createRequire(import.meta.url);
|
|
7
|
+
const PID_FILE = join(homedir(), ".petdex-cc", "data", "pid.lock");
|
|
8
|
+
export function start() {
|
|
9
|
+
if (isRunning()) {
|
|
10
|
+
console.log("Pet is already running.");
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const electronPath = require("electron");
|
|
14
|
+
const mainPath = join(import.meta.dirname, "..", "main", "index.js");
|
|
15
|
+
const child = spawn(String(electronPath), [mainPath], {
|
|
16
|
+
detached: true,
|
|
17
|
+
stdio: "ignore",
|
|
18
|
+
});
|
|
19
|
+
child.unref();
|
|
20
|
+
const dir = join(homedir(), ".petdex-cc", "data");
|
|
21
|
+
mkdirSync(dir, { recursive: true });
|
|
22
|
+
writeFileSync(PID_FILE, String(child.pid));
|
|
23
|
+
console.log("Pet started!");
|
|
24
|
+
}
|
|
25
|
+
export function isRunning() {
|
|
26
|
+
if (!existsSync(PID_FILE))
|
|
27
|
+
return false;
|
|
28
|
+
try {
|
|
29
|
+
const pid = Number.parseInt(readFileSync(PID_FILE, "utf8").trim(), 10);
|
|
30
|
+
process.kill(pid, 0);
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/cli/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAEnE,MAAM,UAAU,KAAK;IACnB,IAAI,SAAS,EAAE,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,OAAO;IACT,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE;QACpD,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;KAChB,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE,CAAC;IAEd,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAClD,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAE3C,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/status.ts"],"names":[],"mappings":"AAGA,wBAAgB,MAAM,IAAI,IAAI,CAM7B"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { loadState } from "../main/storage.js";
|
|
2
|
+
import { isRunning } from "./start.js";
|
|
3
|
+
export function status() {
|
|
4
|
+
const state = loadState();
|
|
5
|
+
const running = isRunning();
|
|
6
|
+
console.log(`Pet: ${state.petSlug || "(none)"} | Level ${state.level}: ${state.levelName} | Events: ${state.totalEvents} | Running: ${running ? "yes" : "no"}`);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,UAAU,MAAM;IACpB,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;IAC5B,OAAO,CAAC,GAAG,CACT,QAAQ,KAAK,CAAC,OAAO,IAAI,QAAQ,YAAY,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,SAAS,cAAc,KAAK,CAAC,WAAW,eAAe,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CACnJ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../../src/cli/stop.ts"],"names":[],"mappings":"AAMA,wBAAgB,IAAI,IAAI,IAAI,CAgC3B"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { readFileSync, existsSync, unlinkSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
const PID_FILE = join(homedir(), ".petdex-cc", "data", "pid.lock");
|
|
5
|
+
export function stop() {
|
|
6
|
+
if (!existsSync(PID_FILE)) {
|
|
7
|
+
console.log("Pet is not running.");
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
try {
|
|
11
|
+
const pid = Number.parseInt(readFileSync(PID_FILE, "utf8").trim(), 10);
|
|
12
|
+
// Try graceful shutdown via HTTP first
|
|
13
|
+
const portFile = join(homedir(), ".petdex-cc", "data", "port.lock");
|
|
14
|
+
let port = 17321;
|
|
15
|
+
try {
|
|
16
|
+
port = Number(readFileSync(portFile, "utf8").trim()) || 17321;
|
|
17
|
+
}
|
|
18
|
+
catch { }
|
|
19
|
+
try {
|
|
20
|
+
const { fetch } = globalThis;
|
|
21
|
+
fetch(`http://localhost:${port}/shutdown`, { method: "POST" }).catch(() => { });
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// Fallback to SIGTERM
|
|
25
|
+
process.kill(pid, "SIGTERM");
|
|
26
|
+
}
|
|
27
|
+
console.log("Pet stopped!");
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
console.log("Pet process not found (may have already stopped).");
|
|
31
|
+
}
|
|
32
|
+
finally {
|
|
33
|
+
try {
|
|
34
|
+
unlinkSync(PID_FILE);
|
|
35
|
+
}
|
|
36
|
+
catch { }
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=stop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../src/cli/stop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAEnE,MAAM,UAAU,IAAI;IAClB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAEvE,uCAAuC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QACpE,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC;QAChE,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QAEV,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC;YAC7B,KAAK,CAAC,oBAAoB,IAAI,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACjF,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;YACtB,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACnE,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YACH,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switch.d.ts","sourceRoot":"","sources":["../../../src/cli/switch.ts"],"names":[],"mappings":"AAMA,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B3D"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { findPetBySlug } from "../petdex-api/client.js";
|
|
5
|
+
import { downloadPetAssets, isPetDownloaded } from "../petdex-api/download.js";
|
|
6
|
+
export async function switchPet(slug) {
|
|
7
|
+
if (!isPetDownloaded(slug)) {
|
|
8
|
+
console.log(`Downloading "${slug}"...`);
|
|
9
|
+
const pet = await findPetBySlug(slug);
|
|
10
|
+
if (!pet) {
|
|
11
|
+
console.error(`Pet "${slug}" not found on Petdex.`);
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
await downloadPetAssets(pet);
|
|
15
|
+
}
|
|
16
|
+
const portFile = join(homedir(), ".petdex-cc", "data", "port.lock");
|
|
17
|
+
let port = 17321;
|
|
18
|
+
try {
|
|
19
|
+
port = Number(readFileSync(portFile, "utf8").trim()) || 17321;
|
|
20
|
+
}
|
|
21
|
+
catch { }
|
|
22
|
+
try {
|
|
23
|
+
await fetch(`http://localhost:${port}/switch-pet`, {
|
|
24
|
+
method: "POST",
|
|
25
|
+
headers: { "Content-Type": "application/json" },
|
|
26
|
+
body: JSON.stringify({ slug }),
|
|
27
|
+
});
|
|
28
|
+
console.log(`Switched to "${slug}"!`);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
console.log("Pet is not running. Start it first with `petdex-cc start`.");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=switch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switch.js","sourceRoot":"","sources":["../../../src/cli/switch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE/E,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY;IAC1C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,MAAM,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,wBAAwB,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IACpE,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,oBAAoB,IAAI,aAAa,EAAE;YACjD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;SAC/B,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,IAAI,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../../src/cli/uninstall.ts"],"names":[],"mappings":"AAQA,wBAAgB,SAAS,IAAI,IAAI,CAahC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { rmSync, existsSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { stop } from "./stop.js";
|
|
5
|
+
import { unregisterHooks } from "../hooks/register.js";
|
|
6
|
+
const PETDEX_DIR = join(homedir(), ".petdex-cc");
|
|
7
|
+
export function uninstall() {
|
|
8
|
+
console.log("Stopping pet...");
|
|
9
|
+
stop();
|
|
10
|
+
console.log("Removing hooks...");
|
|
11
|
+
unregisterHooks();
|
|
12
|
+
console.log("Deleting ~/.petdex-cc/...");
|
|
13
|
+
if (existsSync(PETDEX_DIR)) {
|
|
14
|
+
rmSync(PETDEX_DIR, { recursive: true, force: true });
|
|
15
|
+
}
|
|
16
|
+
console.log("petdex-cc uninstalled.");
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=uninstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../../src/cli/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AAEjD,MAAM,UAAU,SAAS;IACvB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/B,IAAI,EAAE,CAAC;IAEP,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjC,eAAe,EAAE,CAAC;IAElB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../src/hooks/register.ts"],"names":[],"mappings":"AA2DA,wBAAgB,aAAa,IAAI,IAAI,CAuDpC;AAED,wBAAgB,eAAe,IAAI,IAAI,CAsCtC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import * as fs from "fs";
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
const CLAUDE_SETTINGS = path.join(homedir(), ".claude", "settings.json");
|
|
5
|
+
const PETDEX_CC_HOOK_MARKER = "petdex-cc-bridge";
|
|
6
|
+
function isWindows() {
|
|
7
|
+
return process.platform === "win32";
|
|
8
|
+
}
|
|
9
|
+
function getBridgeScriptPath() {
|
|
10
|
+
const home = homedir();
|
|
11
|
+
if (isWindows()) {
|
|
12
|
+
return path.join(home, ".petdex-cc", "hooks", "bridge.ps1");
|
|
13
|
+
}
|
|
14
|
+
return path.join(home, ".petdex-cc", "hooks", "bridge.sh");
|
|
15
|
+
}
|
|
16
|
+
function buildMatcherGroup(matcher) {
|
|
17
|
+
const bridgePath = getBridgeScriptPath();
|
|
18
|
+
const handler = {
|
|
19
|
+
type: "command",
|
|
20
|
+
command: `${bridgePath} # ${PETDEX_CC_HOOK_MARKER}`,
|
|
21
|
+
async: true,
|
|
22
|
+
timeout: 10,
|
|
23
|
+
};
|
|
24
|
+
if (isWindows()) {
|
|
25
|
+
handler.shell = "powershell";
|
|
26
|
+
}
|
|
27
|
+
const group = {
|
|
28
|
+
hooks: [handler],
|
|
29
|
+
};
|
|
30
|
+
if (matcher) {
|
|
31
|
+
group.matcher = matcher;
|
|
32
|
+
}
|
|
33
|
+
return group;
|
|
34
|
+
}
|
|
35
|
+
export function registerHooks() {
|
|
36
|
+
let settings = {};
|
|
37
|
+
if (fs.existsSync(CLAUDE_SETTINGS)) {
|
|
38
|
+
const raw = fs.readFileSync(CLAUDE_SETTINGS, "utf-8");
|
|
39
|
+
try {
|
|
40
|
+
settings = JSON.parse(raw);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
settings = {};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Create backup
|
|
47
|
+
if (fs.existsSync(CLAUDE_SETTINGS)) {
|
|
48
|
+
const backupPath = CLAUDE_SETTINGS + ".petdex-cc-backup";
|
|
49
|
+
fs.copyFileSync(CLAUDE_SETTINGS, backupPath);
|
|
50
|
+
}
|
|
51
|
+
// Ensure hooks object exists
|
|
52
|
+
if (!settings.hooks) {
|
|
53
|
+
settings.hooks = {};
|
|
54
|
+
}
|
|
55
|
+
// Define all hooks to register
|
|
56
|
+
const hookDefinitions = [
|
|
57
|
+
{ event: "PostToolUse", matcher: "Read|Edit|Write|Bash|Glob|Grep" },
|
|
58
|
+
{ event: "PostToolUseFailure" },
|
|
59
|
+
{ event: "Stop" },
|
|
60
|
+
{ event: "StopFailure" },
|
|
61
|
+
{ event: "Notification", matcher: "idle_prompt" },
|
|
62
|
+
{ event: "SessionStart", matcher: "startup|resume" },
|
|
63
|
+
{ event: "SessionEnd" },
|
|
64
|
+
{ event: "TaskCompleted" },
|
|
65
|
+
];
|
|
66
|
+
for (const def of hookDefinitions) {
|
|
67
|
+
const newGroup = buildMatcherGroup(def.matcher);
|
|
68
|
+
if (!settings.hooks[def.event]) {
|
|
69
|
+
settings.hooks[def.event] = [];
|
|
70
|
+
}
|
|
71
|
+
// Remove any existing petdex-cc matcher groups for this event
|
|
72
|
+
settings.hooks[def.event] = settings.hooks[def.event].filter((group) => {
|
|
73
|
+
const handlers = group.hooks ?? [];
|
|
74
|
+
return !handlers.some((h) => (h.command ?? "").includes(PETDEX_CC_HOOK_MARKER));
|
|
75
|
+
});
|
|
76
|
+
// Add the new matcher group
|
|
77
|
+
settings.hooks[def.event].push(newGroup);
|
|
78
|
+
}
|
|
79
|
+
fs.writeFileSync(CLAUDE_SETTINGS, JSON.stringify(settings, null, 2), "utf-8");
|
|
80
|
+
}
|
|
81
|
+
export function unregisterHooks() {
|
|
82
|
+
if (!fs.existsSync(CLAUDE_SETTINGS)) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const raw = fs.readFileSync(CLAUDE_SETTINGS, "utf-8");
|
|
86
|
+
let settings;
|
|
87
|
+
try {
|
|
88
|
+
settings = JSON.parse(raw);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (!settings.hooks) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
for (const event of Object.keys(settings.hooks)) {
|
|
97
|
+
// Handle both nested format (MatcherGroup[]) and legacy flat format
|
|
98
|
+
settings.hooks[event] = settings.hooks[event].filter((group) => {
|
|
99
|
+
const handlers = group.hooks ?? [];
|
|
100
|
+
return !handlers.some((h) => (h.command ?? "").includes(PETDEX_CC_HOOK_MARKER));
|
|
101
|
+
});
|
|
102
|
+
// Clean up empty arrays
|
|
103
|
+
if (settings.hooks[event].length === 0) {
|
|
104
|
+
delete settings.hooks[event];
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Clean up empty hooks object
|
|
108
|
+
if (Object.keys(settings.hooks).length === 0) {
|
|
109
|
+
delete settings.hooks;
|
|
110
|
+
}
|
|
111
|
+
fs.writeFileSync(CLAUDE_SETTINGS, JSON.stringify(settings, null, 2), "utf-8");
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/hooks/register.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;AACzE,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AAsBjD,SAAS,SAAS;IAChB,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;AACtC,CAAC;AAED,SAAS,mBAAmB;IAC1B,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,IAAI,SAAS,EAAE,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAgB;IACzC,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;IACzC,MAAM,OAAO,GAAgB;QAC3B,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,GAAG,UAAU,MAAM,qBAAqB,EAAE;QACnD,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,EAAE;KACZ,CAAC;IACF,IAAI,SAAS,EAAE,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC;IAC/B,CAAC;IACD,MAAM,KAAK,GAAiB;QAC1B,KAAK,EAAE,CAAC,OAAO,CAAC;KACjB,CAAC;IACF,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IAC1B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,IAAI,QAAQ,GAAmB,EAAE,CAAC;IAElC,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,GAAG,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,eAAe,GAAG,mBAAmB,CAAC;QACzD,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,6BAA6B;IAC7B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACpB,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,+BAA+B;IAC/B,MAAM,eAAe,GAA+C;QAClE,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,gCAAgC,EAAE;QACnE,EAAE,KAAK,EAAE,oBAAoB,EAAE;QAC/B,EAAE,KAAK,EAAE,MAAM,EAAE;QACjB,EAAE,KAAK,EAAE,aAAa,EAAE;QACxB,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE;QACjD,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,gBAAgB,EAAE;QACpD,EAAE,KAAK,EAAE,YAAY,EAAE;QACvB,EAAE,KAAK,EAAE,eAAe,EAAE;KAC3B,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEhD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACjC,CAAC;QAED,8DAA8D;QAC9D,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAC1D,CAAC,KAAK,EAAE,EAAE;YACR,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YACnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAClF,CAAC,CACF,CAAC;QAEF,4BAA4B;QAC5B,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,QAAwB,CAAC;IAC7B,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACpB,OAAO;IACT,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAChD,oEAAoE;QACpE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAoB,CAAC,MAAM,CACtE,CAAC,KAAmB,EAAE,EAAE;YACtB,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YACnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAClF,CAAC,CACF,CAAC;QAEF,wBAAwB;QACxB,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvC,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7C,OAAO,QAAQ,CAAC,KAAK,CAAC;IACxB,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAChF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-scripts.d.ts","sourceRoot":"","sources":["../../../src/hooks/write-scripts.ts"],"names":[],"mappings":"AA6BA,wBAAgB,kBAAkB,IAAI,IAAI,CAczC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import * as fs from "fs";
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
const BRIDGE_SH = `#!/bin/bash
|
|
5
|
+
INPUT=$(cat)
|
|
6
|
+
PORT_FILE="$HOME/.petdex-cc/data/port.lock"
|
|
7
|
+
PORT=17321
|
|
8
|
+
if [ -f "$PORT_FILE" ]; then
|
|
9
|
+
PORT=$(cat "$PORT_FILE" 2>/dev/null || echo "17321")
|
|
10
|
+
fi
|
|
11
|
+
curl -s -X POST "http://localhost:$PORT/event" \\
|
|
12
|
+
-H "Content-Type: application/json" \\
|
|
13
|
+
-d "$INPUT" > /dev/null 2>&1 &
|
|
14
|
+
`;
|
|
15
|
+
const BRIDGE_PS1 = `$inputJson = [System.Console]::In.ReadToEnd()
|
|
16
|
+
$portFile = Join-Path $env:USERPROFILE ".petdex-cc\\data\\port.lock"
|
|
17
|
+
$port = 17321
|
|
18
|
+
if (Test-Path $portFile) {
|
|
19
|
+
$port = Get-Content $portFile -ErrorAction SilentlyContinue
|
|
20
|
+
if (-not $port) { $port = 17321 }
|
|
21
|
+
}
|
|
22
|
+
$url = "http://localhost:$port/event"
|
|
23
|
+
try {
|
|
24
|
+
Invoke-WebRequest -Uri $url -Method POST -ContentType "application/json" -Body $inputJson -UseBasicParsing -TimeoutSec 5 | Out-Null
|
|
25
|
+
} catch {}
|
|
26
|
+
`;
|
|
27
|
+
export function writeBridgeScripts() {
|
|
28
|
+
const hooksDir = path.join(homedir(), ".petdex-cc", "hooks");
|
|
29
|
+
fs.mkdirSync(hooksDir, { recursive: true });
|
|
30
|
+
const shPath = path.join(hooksDir, "bridge.sh");
|
|
31
|
+
const ps1Path = path.join(hooksDir, "bridge.ps1");
|
|
32
|
+
fs.writeFileSync(shPath, BRIDGE_SH, "utf-8");
|
|
33
|
+
fs.writeFileSync(ps1Path, BRIDGE_PS1, "utf-8");
|
|
34
|
+
// Make executable on unix
|
|
35
|
+
if (process.platform !== "win32") {
|
|
36
|
+
fs.chmodSync(shPath, 0o755);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=write-scripts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-scripts.js","sourceRoot":"","sources":["../../../src/hooks/write-scripts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,SAAS,GAAG;;;;;;;;;;CAUjB,CAAC;AAEF,MAAM,UAAU,GAAG;;;;;;;;;;;CAWlB,CAAC;AAEF,MAAM,UAAU,kBAAkB;IAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC7D,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAElD,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC7C,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAE/C,0BAA0B;IAC1B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare function isAiOnCooldown(): boolean;
|
|
2
|
+
export declare function resetCooldown(): void;
|
|
3
|
+
export declare function resolveCredentials(): {
|
|
4
|
+
apiKey: string;
|
|
5
|
+
baseUrl: string;
|
|
6
|
+
} | null;
|
|
7
|
+
export declare function buildPrompt(args: {
|
|
8
|
+
petName: string;
|
|
9
|
+
vibes: string[];
|
|
10
|
+
levelName: string;
|
|
11
|
+
scene: string;
|
|
12
|
+
}): string;
|
|
13
|
+
export declare function generateAiSpeech(args: {
|
|
14
|
+
petName: string;
|
|
15
|
+
vibes: string[];
|
|
16
|
+
levelName: string;
|
|
17
|
+
scene: string;
|
|
18
|
+
skipCooldown?: boolean;
|
|
19
|
+
}): Promise<string | null>;
|
|
20
|
+
export declare const PRESET_LINES: Record<string, string[]>;
|
|
21
|
+
export declare function getPresetLine(scene: string): string;
|
|
22
|
+
//# sourceMappingURL=ai-speech.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-speech.d.ts","sourceRoot":"","sources":["../../../src/main/ai-speech.ts"],"names":[],"mappings":"AAgBA,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAED,wBAAgB,kBAAkB,IAAI;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAe/E;AAsBD,wBAAgB,WAAW,CAAC,IAAI,EAAE;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,CAST;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAyCzB;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CA8BjD,CAAC;AAEF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGnD"}
|