bikky 0.1.0 ā 0.2.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/README.md +4 -35
- package/dist/cli.d.ts +4 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +51 -5
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/lifecycle.d.ts +27 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +121 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/postinstall.d.ts +8 -0
- package/dist/postinstall.d.ts.map +1 -0
- package/dist/postinstall.js +24 -0
- package/dist/postinstall.js.map +1 -0
- package/package.json +6 -3
package/README.md
CHANGED
|
@@ -40,13 +40,7 @@ bikky is not a wiki you have to write. Facts are captured as a natural byproduct
|
|
|
40
40
|
|
|
41
41
|
## How it works
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
graph TD
|
|
45
|
-
A["š¤ Copilot / Claude Code"] <-->|MCP stdio| B["bikky MCP Server"]
|
|
46
|
-
C["š Session logs<br/>~/.copilot/"] -->|events.jsonl| D["bikky Daemon<br/>(background)"]
|
|
47
|
-
B -->|store / recall| E[("š® Qdrant Cloud<br/>vector DB")]
|
|
48
|
-
D -->|embed + store| E
|
|
49
|
-
```
|
|
43
|
+

|
|
50
44
|
|
|
51
45
|
**MCP Server** ā 12 memory tools your AI assistant can call directly:
|
|
52
46
|
- `memory_store` / `memory_recall` ā store and search facts
|
|
@@ -264,15 +258,7 @@ bikky install # Write MCP config for Copilot + Claude Code
|
|
|
264
258
|
|
|
265
259
|
Two-layer dedup prevents bloat:
|
|
266
260
|
|
|
267
|
-
|
|
268
|
-
flowchart TD
|
|
269
|
-
A[New fact] --> B{SHA-256<br/>content hash}
|
|
270
|
-
B -->|exact match| C[Skip ā duplicate]
|
|
271
|
-
B -->|no match| D{Vector<br/>similarity}
|
|
272
|
-
D -->|"> 0.92"| E["Reinforce existing<br/>(bump count)"]
|
|
273
|
-
D -->|"> 0.80"| F[Store + flag<br/>as related]
|
|
274
|
-
D -->|"< 0.80"| G[Store as new]
|
|
275
|
-
```
|
|
261
|
+

|
|
276
262
|
|
|
277
263
|
### Ranking formula
|
|
278
264
|
Facts are ranked using a combined score:
|
|
@@ -285,15 +271,7 @@ Facts are ranked using a combined score:
|
|
|
285
271
|
|
|
286
272
|
Facts mentioning multiple entities build an implicit graph:
|
|
287
273
|
|
|
288
|
-
|
|
289
|
-
graph LR
|
|
290
|
-
subgraph "Entity Graph"
|
|
291
|
-
U(user) -->|owns| P(project-x)
|
|
292
|
-
U -->|uses| Q(qdrant)
|
|
293
|
-
P -->|depends-on| Q
|
|
294
|
-
U -->|prefers| D(dark mode)
|
|
295
|
-
end
|
|
296
|
-
```
|
|
274
|
+

|
|
297
275
|
|
|
298
276
|
The daemon periodically:
|
|
299
277
|
1. Scrolls all facts ā builds entity co-occurrence map
|
|
@@ -302,16 +280,7 @@ The daemon periodically:
|
|
|
302
280
|
|
|
303
281
|
### Consolidation pipeline
|
|
304
282
|
|
|
305
|
-
|
|
306
|
-
flowchart LR
|
|
307
|
-
A[Session<br/>summaries] --> B{5+ summaries?}
|
|
308
|
-
B -->|yes| C[Auto-distill]
|
|
309
|
-
C --> D[Distilled<br/>patterns]
|
|
310
|
-
E[All facts] --> F[Contradiction<br/>detection]
|
|
311
|
-
F --> G[Flagged for<br/>review]
|
|
312
|
-
E --> H[Staleness<br/>scan]
|
|
313
|
-
H --> I["Stale facts<br/>(30+ days)"]
|
|
314
|
-
```
|
|
283
|
+

|
|
315
284
|
|
|
316
285
|
- **Auto-distill** ā merges 5+ session summaries into distilled patterns
|
|
317
286
|
- **Contradiction detection** ā flags conflicting facts for review
|
package/dist/cli.d.ts
CHANGED
|
@@ -2,11 +2,14 @@
|
|
|
2
2
|
* bikky CLI ā setup, start MCP server, manage daemon.
|
|
3
3
|
*
|
|
4
4
|
* Usage:
|
|
5
|
+
* bikky start ā install MCP configs + start background daemon
|
|
6
|
+
* bikky stop ā stop background daemon
|
|
5
7
|
* bikky mcp ā start MCP server (stdio, for editor integration)
|
|
6
|
-
* bikky daemon ā start
|
|
8
|
+
* bikky daemon ā start daemon in foreground (for debugging)
|
|
7
9
|
* bikky setup ā interactive setup wizard
|
|
8
10
|
* bikky status ā check memory system status
|
|
9
11
|
* bikky install ā write MCP config for Copilot / Claude Code
|
|
12
|
+
* bikky --version ā print version
|
|
10
13
|
*/
|
|
11
14
|
export {};
|
|
12
15
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
|
package/dist/cli.js
CHANGED
|
@@ -2,16 +2,57 @@
|
|
|
2
2
|
* bikky CLI ā setup, start MCP server, manage daemon.
|
|
3
3
|
*
|
|
4
4
|
* Usage:
|
|
5
|
+
* bikky start ā install MCP configs + start background daemon
|
|
6
|
+
* bikky stop ā stop background daemon
|
|
5
7
|
* bikky mcp ā start MCP server (stdio, for editor integration)
|
|
6
|
-
* bikky daemon ā start
|
|
8
|
+
* bikky daemon ā start daemon in foreground (for debugging)
|
|
7
9
|
* bikky setup ā interactive setup wizard
|
|
8
10
|
* bikky status ā check memory system status
|
|
9
11
|
* bikky install ā write MCP config for Copilot / Claude Code
|
|
12
|
+
* bikky --version ā print version
|
|
10
13
|
*/
|
|
14
|
+
import fs from "node:fs";
|
|
15
|
+
import path from "node:path";
|
|
11
16
|
import { startMcpServer } from "./mcp/index.js";
|
|
17
|
+
import { getDaemonStatus, startAll, killDaemon } from "./lifecycle.js";
|
|
12
18
|
const command = process.argv[2] ?? "mcp";
|
|
19
|
+
function printVersion() {
|
|
20
|
+
try {
|
|
21
|
+
const pkgPath = new URL("../package.json", import.meta.url).pathname;
|
|
22
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
|
|
23
|
+
console.log(`bikky v${pkg.version}`);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// Fallback: walk up from dist/ to find package.json
|
|
27
|
+
const alt = path.resolve(new URL(".", import.meta.url).pathname, "..", "package.json");
|
|
28
|
+
try {
|
|
29
|
+
const pkg = JSON.parse(fs.readFileSync(alt, "utf-8"));
|
|
30
|
+
console.log(`bikky v${pkg.version}`);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
console.log("bikky (unknown version)");
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
13
37
|
async function main() {
|
|
38
|
+
if (command === "--version" || command === "-v") {
|
|
39
|
+
printVersion();
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
14
42
|
switch (command) {
|
|
43
|
+
case "start":
|
|
44
|
+
await startAll();
|
|
45
|
+
break;
|
|
46
|
+
case "stop": {
|
|
47
|
+
const killed = killDaemon();
|
|
48
|
+
if (killed) {
|
|
49
|
+
console.log("š Daemon stopped.");
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
console.log("ā¹ļø No daemon running.");
|
|
53
|
+
}
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
15
56
|
case "mcp":
|
|
16
57
|
await startMcpServer();
|
|
17
58
|
break;
|
|
@@ -27,12 +68,17 @@ async function main() {
|
|
|
27
68
|
}
|
|
28
69
|
case "setup":
|
|
29
70
|
console.log("š§ bikky setup");
|
|
30
|
-
console.log("Run `bikky
|
|
71
|
+
console.log("Run `bikky start` to install MCP configs and start the daemon.");
|
|
31
72
|
console.log("Then call configure_credentials from your editor to set up Qdrant.");
|
|
32
73
|
break;
|
|
33
|
-
case "status":
|
|
34
|
-
|
|
74
|
+
case "status": {
|
|
75
|
+
const status = getDaemonStatus();
|
|
76
|
+
printVersion();
|
|
77
|
+
console.log(`Daemon: ${status.running ? `š¢ running (PID ${status.pid})` : "š“ stopped"}`);
|
|
78
|
+
console.log("MCP: managed by your editor (stdio)");
|
|
79
|
+
console.log("\nRun `bikky start` to launch everything.");
|
|
35
80
|
break;
|
|
81
|
+
}
|
|
36
82
|
case "install": {
|
|
37
83
|
const { writeInstallConfig } = await import("./install.js");
|
|
38
84
|
await writeInstallConfig();
|
|
@@ -40,7 +86,7 @@ async function main() {
|
|
|
40
86
|
}
|
|
41
87
|
default:
|
|
42
88
|
console.error(`Unknown command: ${command}`);
|
|
43
|
-
console.error("Usage: bikky [mcp|daemon|setup|status|install]");
|
|
89
|
+
console.error("Usage: bikky [start|stop|mcp|daemon|setup|status|install|--version]");
|
|
44
90
|
process.exit(1);
|
|
45
91
|
}
|
|
46
92
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export declare const BIKKY_DIR: string;
|
|
|
8
8
|
export declare const CONFIG_PATH: string;
|
|
9
9
|
export declare const LOG_DIR: string;
|
|
10
10
|
export declare const STATE_DIR: string;
|
|
11
|
+
export declare const PID_PATH: string;
|
|
11
12
|
export interface EmbeddingConfig {
|
|
12
13
|
provider: "ollama" | "openai" | "bedrock";
|
|
13
14
|
model: string;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,eAAO,MAAM,SAAS,QAAoC,CAAC;AAC3D,eAAO,MAAM,WAAW,QAAsC,CAAC;AAC/D,eAAO,MAAM,OAAO,QAA+B,CAAC;AACpD,eAAO,MAAM,SAAS,QAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,eAAO,MAAM,SAAS,QAAoC,CAAC;AAC3D,eAAO,MAAM,WAAW,QAAsC,CAAC;AAC/D,eAAO,MAAM,OAAO,QAA+B,CAAC;AACpD,eAAO,MAAM,SAAS,QAAgC,CAAC;AACvD,eAAO,MAAM,QAAQ,QAAqC,CAAC;AAM3D,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,0BAA0B,EAAE,OAAO,CAAC;IACpC,wBAAwB,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5C;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,eAAe,CAAC;IAC3B,GAAG,EAAE,SAAS,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,aAAa,CAAC;CACzB;AAMD,QAAA,MAAM,QAAQ,EAAE,WA8Bf,CAAC;AA0BF,wBAAgB,UAAU,IAAI,WAAW,CAgDxC;AAED,mDAAmD;AACnD,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAIpD;AAED,yCAAyC;AACzC,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -14,6 +14,7 @@ export const BIKKY_DIR = path.join(os.homedir(), ".bikky");
|
|
|
14
14
|
export const CONFIG_PATH = path.join(BIKKY_DIR, "config.json");
|
|
15
15
|
export const LOG_DIR = path.join(BIKKY_DIR, "logs");
|
|
16
16
|
export const STATE_DIR = path.join(BIKKY_DIR, "state");
|
|
17
|
+
export const PID_PATH = path.join(STATE_DIR, "daemon.pid");
|
|
17
18
|
// ---------------------------------------------------------------------------
|
|
18
19
|
// Defaults
|
|
19
20
|
// ---------------------------------------------------------------------------
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon lifecycle ā start/stop the daemon as a detached background process.
|
|
3
|
+
*
|
|
4
|
+
* - `startAll()` writes MCP configs + launches daemon with PID file
|
|
5
|
+
* - `stopDaemon()` kills daemon via PID file
|
|
6
|
+
* - `getDaemonStatus()` checks if daemon PID is alive
|
|
7
|
+
*/
|
|
8
|
+
export interface DaemonStatus {
|
|
9
|
+
running: boolean;
|
|
10
|
+
pid: number | null;
|
|
11
|
+
}
|
|
12
|
+
export declare function getDaemonStatus(): DaemonStatus;
|
|
13
|
+
/**
|
|
14
|
+
* Start the daemon as a fully detached background process.
|
|
15
|
+
* Returns the child PID, or null if already running.
|
|
16
|
+
*/
|
|
17
|
+
export declare function launchDaemon(): number | null;
|
|
18
|
+
/**
|
|
19
|
+
* Stop the daemon via PID file.
|
|
20
|
+
* Returns true if a process was killed, false if nothing was running.
|
|
21
|
+
*/
|
|
22
|
+
export declare function killDaemon(): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Full startup sequence: install MCP configs + launch daemon.
|
|
25
|
+
*/
|
|
26
|
+
export declare function startAll(): Promise<void>;
|
|
27
|
+
//# sourceMappingURL=lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA8CH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAED,wBAAgB,eAAe,IAAI,YAAY,CAQ9C;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAuB5C;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAcpC;AAED;;GAEG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAoB9C"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon lifecycle ā start/stop the daemon as a detached background process.
|
|
3
|
+
*
|
|
4
|
+
* - `startAll()` writes MCP configs + launches daemon with PID file
|
|
5
|
+
* - `stopDaemon()` kills daemon via PID file
|
|
6
|
+
* - `getDaemonStatus()` checks if daemon PID is alive
|
|
7
|
+
*/
|
|
8
|
+
import fs from "node:fs";
|
|
9
|
+
import { spawn } from "node:child_process";
|
|
10
|
+
import { PID_PATH, STATE_DIR } from "./config.js";
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// PID file helpers
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
function readPid() {
|
|
15
|
+
try {
|
|
16
|
+
const raw = fs.readFileSync(PID_PATH, "utf-8").trim();
|
|
17
|
+
const pid = parseInt(raw, 10);
|
|
18
|
+
return Number.isFinite(pid) ? pid : null;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function writePid(pid) {
|
|
25
|
+
fs.mkdirSync(STATE_DIR, { recursive: true });
|
|
26
|
+
fs.writeFileSync(PID_PATH, String(pid) + "\n");
|
|
27
|
+
}
|
|
28
|
+
function removePid() {
|
|
29
|
+
try {
|
|
30
|
+
fs.unlinkSync(PID_PATH);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// already gone
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function isProcessAlive(pid) {
|
|
37
|
+
try {
|
|
38
|
+
process.kill(pid, 0); // signal 0 = existence check
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export function getDaemonStatus() {
|
|
46
|
+
const pid = readPid();
|
|
47
|
+
if (pid && isProcessAlive(pid)) {
|
|
48
|
+
return { running: true, pid };
|
|
49
|
+
}
|
|
50
|
+
// Stale PID file ā clean up
|
|
51
|
+
if (pid)
|
|
52
|
+
removePid();
|
|
53
|
+
return { running: false, pid: null };
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Start the daemon as a fully detached background process.
|
|
57
|
+
* Returns the child PID, or null if already running.
|
|
58
|
+
*/
|
|
59
|
+
export function launchDaemon() {
|
|
60
|
+
const status = getDaemonStatus();
|
|
61
|
+
if (status.running) {
|
|
62
|
+
return status.pid;
|
|
63
|
+
}
|
|
64
|
+
// Resolve the bikky binary ā use the same node + cli entry that's running now
|
|
65
|
+
const cliPath = new URL("./cli.js", import.meta.url).pathname;
|
|
66
|
+
const child = spawn(process.execPath, [cliPath, "daemon"], {
|
|
67
|
+
detached: true,
|
|
68
|
+
stdio: "ignore",
|
|
69
|
+
env: { ...process.env },
|
|
70
|
+
});
|
|
71
|
+
child.unref();
|
|
72
|
+
if (child.pid) {
|
|
73
|
+
writePid(child.pid);
|
|
74
|
+
return child.pid;
|
|
75
|
+
}
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Stop the daemon via PID file.
|
|
80
|
+
* Returns true if a process was killed, false if nothing was running.
|
|
81
|
+
*/
|
|
82
|
+
export function killDaemon() {
|
|
83
|
+
const pid = readPid();
|
|
84
|
+
if (!pid)
|
|
85
|
+
return false;
|
|
86
|
+
if (isProcessAlive(pid)) {
|
|
87
|
+
try {
|
|
88
|
+
process.kill(pid, "SIGTERM");
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// race: died between check and kill
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
removePid();
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Full startup sequence: install MCP configs + launch daemon.
|
|
99
|
+
*/
|
|
100
|
+
export async function startAll() {
|
|
101
|
+
// 1. Write MCP configs
|
|
102
|
+
const { writeInstallConfig } = await import("./install.js");
|
|
103
|
+
await writeInstallConfig();
|
|
104
|
+
// 2. Launch daemon
|
|
105
|
+
const status = getDaemonStatus();
|
|
106
|
+
if (status.running) {
|
|
107
|
+
console.log(`\nš¢ Daemon already running (PID ${status.pid})`);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
const pid = launchDaemon();
|
|
111
|
+
if (pid) {
|
|
112
|
+
console.log(`\nš¢ Daemon started (PID ${pid})`);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
console.error("\nš“ Failed to start daemon");
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
console.log("\n⨠bikky is ready ā daemon running, MCP configs installed.");
|
|
119
|
+
console.log(" Restart your editor to activate the MCP server.");
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Postinstall hook ā runs after `npm install -g bikky`.
|
|
3
|
+
*
|
|
4
|
+
* Writes MCP configs for Copilot / Claude Code and starts the daemon.
|
|
5
|
+
* All errors are swallowed ā install must never fail due to post-setup.
|
|
6
|
+
*/
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=postinstall.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postinstall.d.ts","sourceRoot":"","sources":["../src/postinstall.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Postinstall hook ā runs after `npm install -g bikky`.
|
|
3
|
+
*
|
|
4
|
+
* Writes MCP configs for Copilot / Claude Code and starts the daemon.
|
|
5
|
+
* All errors are swallowed ā install must never fail due to post-setup.
|
|
6
|
+
*/
|
|
7
|
+
async function postinstall() {
|
|
8
|
+
// Only run for global installs (not when building from source)
|
|
9
|
+
if (!process.env.npm_config_global && !process.env.PREFIX) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
try {
|
|
13
|
+
const { startAll } = await import("./lifecycle.js");
|
|
14
|
+
await startAll();
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
// Silent ā don't break npm install
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
postinstall().catch(() => {
|
|
21
|
+
// swallow
|
|
22
|
+
});
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=postinstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postinstall.js","sourceRoot":"","sources":["../src/postinstall.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,KAAK,UAAU,WAAW;IACxB,+DAA+D;IAC/D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACpD,MAAM,QAAQ,EAAE,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,mCAAmC;IACrC,CAAC;AACH,CAAC;AAED,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;IACvB,UAAU;AACZ,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bikky",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Shared memory for AI coding sessions ā MCP server + background daemon",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "AGPL-3.0-or-later",
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
],
|
|
21
21
|
"scripts": {
|
|
22
22
|
"build": "tsc",
|
|
23
|
+
"postinstall": "node dist/postinstall.js || true",
|
|
23
24
|
"start": "node dist/mcp/index.js",
|
|
24
25
|
"daemon": "node dist/daemon/index.js",
|
|
25
26
|
"dev": "tsc --watch",
|
|
@@ -27,17 +28,19 @@
|
|
|
27
28
|
"lint": "eslint src/",
|
|
28
29
|
"check": "tsc --noEmit && eslint src/",
|
|
29
30
|
"test": "node --test dist/*.test.js dist/**/*.test.js",
|
|
31
|
+
"build:diagrams": "node scripts/build-diagrams.mjs",
|
|
30
32
|
"prepublishOnly": "npm run build"
|
|
31
33
|
},
|
|
32
34
|
"dependencies": {
|
|
33
|
-
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
34
35
|
"@aws-sdk/client-bedrock-runtime": "^3.1006.0",
|
|
36
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
35
37
|
"zod": "^3.24.0"
|
|
36
38
|
},
|
|
37
39
|
"devDependencies": {
|
|
40
|
+
"@mermaid-js/mermaid-cli": "^11.12.0",
|
|
38
41
|
"@types/node": "^22.0.0",
|
|
39
|
-
"typescript": "^5.8.0",
|
|
40
42
|
"eslint": "^9.0.0",
|
|
43
|
+
"typescript": "^5.8.0",
|
|
41
44
|
"typescript-eslint": "^8.0.0"
|
|
42
45
|
},
|
|
43
46
|
"engines": {
|