@shield-agent/kya 0.3.0 → 0.4.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/.mcp.json +1 -1
- package/LIMITATIONS.md +1 -0
- package/README.md +17 -3
- package/amp/settings.example.json +1 -1
- package/claude/claude_desktop_config.example.json +1 -1
- package/cline/cline_mcp_settings.example.json +1 -1
- package/copilot/mcp-config.example.json +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +33 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands/connect.d.ts +27 -0
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +43 -8
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/hook.d.ts +17 -0
- package/dist/commands/hook.d.ts.map +1 -0
- package/dist/commands/hook.js +105 -0
- package/dist/commands/hook.js.map +1 -0
- package/dist/commands/start.d.ts +2 -0
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +30 -5
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/stop.d.ts +21 -1
- package/dist/commands/stop.d.ts.map +1 -1
- package/dist/commands/stop.js +76 -22
- package/dist/commands/stop.js.map +1 -1
- package/dist/commands/wire-hooks.d.ts +33 -0
- package/dist/commands/wire-hooks.d.ts.map +1 -0
- package/dist/commands/wire-hooks.js +213 -0
- package/dist/commands/wire-hooks.js.map +1 -0
- package/dist/receipt/daemon.d.ts +35 -5
- package/dist/receipt/daemon.d.ts.map +1 -1
- package/dist/receipt/daemon.js +87 -12
- package/dist/receipt/daemon.js.map +1 -1
- package/dist/receipt/live-server.d.ts.map +1 -1
- package/dist/receipt/live-server.js +7 -4
- package/dist/receipt/live-server.js.map +1 -1
- package/dist/trail.d.ts +3 -1
- package/dist/trail.d.ts.map +1 -1
- package/dist/trail.js +20 -0
- package/dist/trail.js.map +1 -1
- package/droid/README.md +1 -1
- package/droid/mcp.example.json +1 -1
- package/gemini/settings.example.json +1 -1
- package/grok/README.md +1 -1
- package/kilo/kilo.example.json +1 -1
- package/kimi/mcp.example.json +1 -1
- package/kiro/mcp.example.json +1 -1
- package/manifest.json +1 -1
- package/mastracode/mcp.example.json +1 -1
- package/mcp.json +1 -1
- package/openai/codex.config.example.toml +1 -1
- package/opencode/opencode.example.json +1 -1
- package/package.json +1 -1
- package/qwen/settings.example.json +1 -1
- package/server.json +2 -2
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kya hook — PreToolUse interception for hosts with native hooks
|
|
3
|
+
* (Claude Code, Grok, Kimi Code). Offline local evaluate only: no network,
|
|
4
|
+
* sub-second, fail-open on any internal error. DENY (local never-list)
|
|
5
|
+
* blocks; REQUIRE_APPROVE records advisory unless --strict.
|
|
6
|
+
*/
|
|
7
|
+
import { resolveConfig } from "../config.js";
|
|
8
|
+
import { runEvalTool } from "./eval-tool.js";
|
|
9
|
+
import { appendTrail, defaultSessionId, hostToProduct } from "../trail.js";
|
|
10
|
+
import { deriveTrailSummary } from "../trail-summary.js";
|
|
11
|
+
/** Accept snake_case (Claude/Kimi) and camelCase (Grok) envelopes. */
|
|
12
|
+
function parsePayload(stdinText) {
|
|
13
|
+
let raw;
|
|
14
|
+
try {
|
|
15
|
+
raw = JSON.parse(stdinText);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
21
|
+
return undefined;
|
|
22
|
+
const p = raw;
|
|
23
|
+
const event = (typeof p.hook_event_name === "string" && p.hook_event_name) ||
|
|
24
|
+
(typeof p.hookEventName === "string" && p.hookEventName) ||
|
|
25
|
+
undefined;
|
|
26
|
+
return {
|
|
27
|
+
event,
|
|
28
|
+
sessionId: (typeof p.session_id === "string" && p.session_id) ||
|
|
29
|
+
(typeof p.sessionId === "string" && p.sessionId) ||
|
|
30
|
+
undefined,
|
|
31
|
+
cwd: typeof p.cwd === "string" ? p.cwd : undefined,
|
|
32
|
+
toolName: (typeof p.tool_name === "string" && p.tool_name) ||
|
|
33
|
+
(typeof p.toolName === "string" && p.toolName) ||
|
|
34
|
+
undefined,
|
|
35
|
+
toolInput: p.tool_input ?? p.toolInput,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const ALLOW = { exitCode: 0, stdout: "", stderr: "" };
|
|
39
|
+
function deny(reason) {
|
|
40
|
+
return {
|
|
41
|
+
exitCode: 2,
|
|
42
|
+
stdout: `${JSON.stringify({
|
|
43
|
+
hookSpecificOutput: {
|
|
44
|
+
hookEventName: "PreToolUse",
|
|
45
|
+
permissionDecision: "deny",
|
|
46
|
+
permissionDecisionReason: reason,
|
|
47
|
+
},
|
|
48
|
+
})}\n`,
|
|
49
|
+
stderr: `${reason}\n`,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export async function runHook(input) {
|
|
53
|
+
try {
|
|
54
|
+
const payload = parsePayload(input.stdinText);
|
|
55
|
+
if (!payload)
|
|
56
|
+
return ALLOW;
|
|
57
|
+
if (payload.event && !/^(PreToolUse|pre_tool_use)$/i.test(payload.event))
|
|
58
|
+
return ALLOW;
|
|
59
|
+
if (!payload.toolName)
|
|
60
|
+
return ALLOW;
|
|
61
|
+
const config = resolveConfig({
|
|
62
|
+
cwd: input.cwd,
|
|
63
|
+
env: input.env,
|
|
64
|
+
flags: {},
|
|
65
|
+
allowMissingApiKey: true,
|
|
66
|
+
requireApiKey: false,
|
|
67
|
+
offline: true,
|
|
68
|
+
});
|
|
69
|
+
const evaluate = input.evaluate ??
|
|
70
|
+
(async (toolId, args) => (await runEvalTool(config, { toolId, args, offline: true })).response);
|
|
71
|
+
const response = await evaluate(payload.toolName, payload.toolInput ?? {});
|
|
72
|
+
// payload.cwd is host-supplied and only feeds the project-basename stamp;
|
|
73
|
+
// the trail path itself comes from env/KYA_HOME — no traversal risk.
|
|
74
|
+
const trailCwd = payload.cwd?.trim() || input.cwd;
|
|
75
|
+
try {
|
|
76
|
+
appendTrail(trailCwd, {
|
|
77
|
+
ts: new Date().toISOString(),
|
|
78
|
+
sessionId: payload.sessionId ?? defaultSessionId(input.env),
|
|
79
|
+
host: config.host,
|
|
80
|
+
product: hostToProduct(input.host),
|
|
81
|
+
toolId: response.toolId ?? payload.toolName,
|
|
82
|
+
verdict: response.verdict,
|
|
83
|
+
reasonCode: response.reasonCode ?? "",
|
|
84
|
+
mode: "offline",
|
|
85
|
+
neverEvent: response.reasonCode === "NEVER_EVENT",
|
|
86
|
+
argsHash: response.argsHash,
|
|
87
|
+
summary: deriveTrailSummary(payload.toolName, payload.toolInput ?? {}),
|
|
88
|
+
}, input.env);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
/* observe path never breaks the gate */
|
|
92
|
+
}
|
|
93
|
+
if (response.verdict === "DENY") {
|
|
94
|
+
return deny(`KYA denied ${payload.toolName}: ${response.reasonCode}`);
|
|
95
|
+
}
|
|
96
|
+
if (input.strict && response.verdict === "REQUIRE_APPROVE") {
|
|
97
|
+
return deny(`KYA strict mode: ${payload.toolName} requires approval (${response.reasonCode})`);
|
|
98
|
+
}
|
|
99
|
+
return ALLOW;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return ALLOW; // fail-open: hook errors must never block the user's agent
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=hook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/commands/hook.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AA0BzD,sEAAsE;AACtE,SAAS,YAAY,CAAC,SAAiB;IACrC,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5E,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,MAAM,KAAK,GACT,CAAC,OAAO,CAAC,CAAC,eAAe,KAAK,QAAQ,IAAI,CAAC,CAAC,eAAe,CAAC;QAC5D,CAAC,OAAO,CAAC,CAAC,aAAa,KAAK,QAAQ,IAAI,CAAC,CAAC,aAAa,CAAC;QACxD,SAAS,CAAC;IACZ,OAAO;QACL,KAAK;QACL,SAAS,EACP,CAAC,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC;YAClD,CAAC,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC;YAChD,SAAS;QACX,GAAG,EAAE,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;QAClD,QAAQ,EACN,CAAC,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC;YAChD,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC;YAC9C,SAAS;QACX,SAAS,EAAE,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,SAAS;KACvC,CAAC;AACJ,CAAC;AAED,MAAM,KAAK,GAAe,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAElE,SAAS,IAAI,CAAC,MAAc;IAC1B,OAAO;QACL,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;YACxB,kBAAkB,EAAE;gBAClB,aAAa,EAAE,YAAY;gBAC3B,kBAAkB,EAAE,MAAM;gBAC1B,wBAAwB,EAAE,MAAM;aACjC;SACF,CAAC,IAAI;QACN,MAAM,EAAE,GAAG,MAAM,IAAI;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAgB;IAC5C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC3B,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACvF,IAAI,CAAC,OAAO,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAEpC,MAAM,MAAM,GAAG,aAAa,CAAC;YAC3B,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,KAAK,EAAE,EAAE;YACT,kBAAkB,EAAE,IAAI;YACxB,aAAa,EAAE,KAAK;YACpB,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QACH,MAAM,QAAQ,GACZ,KAAK,CAAC,QAAQ;YACd,CAAC,KAAK,EAAE,MAAc,EAAE,IAAa,EAAE,EAAE,CACvC,CAAC,MAAM,WAAW,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QAE3E,0EAA0E;QAC1E,qEAAqE;QACrE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC;QAClD,IAAI,CAAC;YACH,WAAW,CAAC,QAAQ,EAAE;gBACpB,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC5B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC;gBAC3D,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;gBAClC,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ;gBAC3C,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,EAAE;gBACrC,IAAI,EAAE,SAAS;gBACf,UAAU,EAAE,QAAQ,CAAC,UAAU,KAAK,aAAa;gBACjD,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;aACvE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACP,wCAAwC;QAC1C,CAAC;QAED,IAAI,QAAQ,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,cAAc,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC,OAAO,KAAK,iBAAiB,EAAE,CAAC;YAC3D,OAAO,IAAI,CAAC,oBAAoB,OAAO,CAAC,QAAQ,uBAAuB,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC;QACjG,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC,CAAC,2DAA2D;IAC3E,CAAC;AACH,CAAC"}
|
package/dist/commands/start.d.ts
CHANGED
|
@@ -10,6 +10,8 @@ export interface StartResult {
|
|
|
10
10
|
readonly skipped: readonly string[];
|
|
11
11
|
/** User-level host configs wired (or created) because the host is installed. */
|
|
12
12
|
readonly wiredHosts: readonly WiredUserHost[];
|
|
13
|
+
/** PreToolUse hook wiring for installed hook-capable hosts (claude/grok/kimi). */
|
|
14
|
+
readonly hooksWired: readonly WiredUserHost[];
|
|
13
15
|
readonly liveUrl?: string;
|
|
14
16
|
readonly reportPid?: number;
|
|
15
17
|
readonly reportReused?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAgBnD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,gFAAgF;IAChF,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAC;IAC9C,kFAAkF;IAClF,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAC;IAC9C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAoCD,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,cAAc,EACtB,KAAK,GAAE;IACL,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5B,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;CACV,GACL,OAAO,CAAC,WAAW,CAAC,CAqHtB;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAgBvD"}
|
package/dist/commands/start.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* One-shot OSS onboarding: init → wire local MCP → open live activity report.
|
|
3
3
|
*
|
|
4
|
-
* Wiring has
|
|
5
|
-
* `.cursor/mcp.json` in cwd)
|
|
6
|
-
* of installation (config file present, or the host's config dir exists)
|
|
7
|
-
*
|
|
4
|
+
* Wiring has three tiers: project files (`.mcp.json`, `mcp.json`,
|
|
5
|
+
* `.cursor/mcp.json` in cwd), user-level MCP configs for hosts with evidence
|
|
6
|
+
* of installation (config file present, or the host's config dir exists),
|
|
7
|
+
* and PreToolUse hooks for hook-capable hosts (claude, grok, kimi).
|
|
8
|
+
* All go through merge-only logic — never clobber.
|
|
8
9
|
*/
|
|
9
10
|
import { existsSync, readFileSync } from "node:fs";
|
|
10
11
|
import { homedir } from "node:os";
|
|
@@ -16,6 +17,7 @@ import { ensureReceiptDaemon } from "../receipt/daemon.js";
|
|
|
16
17
|
import { appendTrail, defaultSessionId, trailPath } from "../trail.js";
|
|
17
18
|
import { hostReload, hostRunning, listProcessNames, reloadMessage } from "../host-reload.js";
|
|
18
19
|
import { CONNECT_REGISTRY, connectableHosts, mergeJsonHostConfig, standardServerBlock, wireHost, } from "./connect.js";
|
|
20
|
+
import { HOOK_HOSTS, wireHook } from "./wire-hooks.js";
|
|
19
21
|
function seedTrailIfEmpty(cwd) {
|
|
20
22
|
const trail = trailPath(cwd);
|
|
21
23
|
if (existsSync(trail) && readFileSync(trail, "utf8").trim())
|
|
@@ -105,6 +107,22 @@ export async function runStart(config, input = {}) {
|
|
|
105
107
|
throw err;
|
|
106
108
|
}
|
|
107
109
|
}
|
|
110
|
+
// PreToolUse hook wiring for installed hook-capable hosts.
|
|
111
|
+
const hookHosts = HOOK_HOSTS.filter((id) => hostInstalled(id, home));
|
|
112
|
+
const hooksWired = [];
|
|
113
|
+
for (const id of hookHosts) {
|
|
114
|
+
try {
|
|
115
|
+
const r = wireHook({ host: id, home, force });
|
|
116
|
+
if (r.status !== "skipped")
|
|
117
|
+
hooksWired.push({ host: r.host, label: r.label, path: r.path });
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
if (err instanceof UsageError)
|
|
121
|
+
skipped.push(String(err.message));
|
|
122
|
+
else
|
|
123
|
+
throw err;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
108
126
|
seedTrailIfEmpty(config.cwd);
|
|
109
127
|
let liveUrl;
|
|
110
128
|
let reportPid;
|
|
@@ -137,12 +155,16 @@ export async function runStart(config, input = {}) {
|
|
|
137
155
|
wired,
|
|
138
156
|
skipped,
|
|
139
157
|
wiredHosts,
|
|
158
|
+
hooksWired,
|
|
140
159
|
liveUrl,
|
|
141
160
|
reportPid,
|
|
142
161
|
reportReused,
|
|
143
162
|
next: `${hostNotes} ` +
|
|
144
163
|
"The report runs in the background — reopen with `kya receipt --open`, " +
|
|
145
|
-
"stop with `kya stop`."
|
|
164
|
+
"stop with `kya stop`." +
|
|
165
|
+
(hooksWired.length
|
|
166
|
+
? " Hooks take effect in new sessions — claude, grok, and kimi all load hooks at session start."
|
|
167
|
+
: ""),
|
|
146
168
|
};
|
|
147
169
|
}
|
|
148
170
|
export function formatStartHuman(r) {
|
|
@@ -153,6 +175,9 @@ export function formatStartHuman(r) {
|
|
|
153
175
|
r.wiredHosts.length
|
|
154
176
|
? `wired hosts: ${r.wiredHosts.map((h) => `${h.label} (${h.path})`).join(", ")}`
|
|
155
177
|
: undefined,
|
|
178
|
+
r.hooksWired.length
|
|
179
|
+
? `hooks: ${r.hooksWired.map((h) => h.label).join(", ")} (PreToolUse interception — applies to new sessions)`
|
|
180
|
+
: undefined,
|
|
156
181
|
r.liveUrl ? `report: ${r.liveUrl}` : undefined,
|
|
157
182
|
r.next,
|
|
158
183
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/stop.d.ts
CHANGED
|
@@ -1,9 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `kya stop` — stop the background live-receipt server started by `kya start`.
|
|
3
|
+
* `--all` additionally sweeps orphaned `receipt-serve` daemons from other
|
|
4
|
+
* cwds or older installs that the cwd state file does not know about.
|
|
5
|
+
*/
|
|
6
|
+
import { type DaemonProc } from "../receipt/daemon.js";
|
|
1
7
|
export interface StopResult {
|
|
2
8
|
readonly stopped: boolean;
|
|
3
9
|
readonly pid?: number;
|
|
4
10
|
/** State file pointed at a pid that is not our daemon; it was cleared. */
|
|
5
11
|
readonly stale?: boolean;
|
|
12
|
+
/** Pids of daemons beyond the cwd state file stopped by --all. */
|
|
13
|
+
readonly extraStopped?: readonly number[];
|
|
14
|
+
/** --all was requested but the orphan sweep is unsupported here (win32). */
|
|
15
|
+
readonly sweepUnsupported?: boolean;
|
|
6
16
|
}
|
|
7
|
-
export
|
|
17
|
+
export interface StopOptions {
|
|
18
|
+
/** Also stop any running `cli.js receipt-serve` daemon owned by this user. */
|
|
19
|
+
readonly all?: boolean;
|
|
20
|
+
/** Injectable process snapshot (tests); defaults to a live ps listing. */
|
|
21
|
+
readonly procs?: readonly DaemonProc[];
|
|
22
|
+
/** Injectable signaler (tests); defaults to SIGTERM. */
|
|
23
|
+
readonly kill?: (pid: number) => void;
|
|
24
|
+
/** Injectable platform (tests); defaults to process.platform. */
|
|
25
|
+
readonly platform?: NodeJS.Platform;
|
|
26
|
+
}
|
|
27
|
+
export declare function runStop(cwd: string, options?: StopOptions): Promise<StopResult>;
|
|
8
28
|
export declare function formatStopHuman(r: StopResult): string;
|
|
9
29
|
//# sourceMappingURL=stop.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAOL,KAAK,UAAU,EAChB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,kEAAkE;IAClE,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,4EAA4E;IAC5E,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED,MAAM,WAAW,WAAW;IAC1B,8EAA8E;IAC9E,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IACvC,wDAAwD;IACxD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;CACrC;AAcD,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAqDzF;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAuBrD"}
|
package/dist/commands/stop.js
CHANGED
|
@@ -1,39 +1,93 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `kya stop` — stop the background live-receipt server started by `kya start`.
|
|
3
|
+
* `--all` additionally sweeps orphaned `receipt-serve` daemons from other
|
|
4
|
+
* cwds or older installs that the cwd state file does not know about.
|
|
3
5
|
*/
|
|
4
|
-
import { clearDaemonState, isReceiptDaemonProcess, pidAlive, readDaemonState, } from "../receipt/daemon.js";
|
|
6
|
+
import { clearDaemonState, findReceiptDaemonPids, isReceiptDaemonProcess, listOwnedProcesses, pidAlive, readDaemonState, } from "../receipt/daemon.js";
|
|
5
7
|
function sleep(ms) {
|
|
6
8
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
7
9
|
}
|
|
8
|
-
|
|
10
|
+
function defaultKill(pid) {
|
|
11
|
+
try {
|
|
12
|
+
process.kill(pid, "SIGTERM");
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
/* raced exit */
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export async function runStop(cwd, options = {}) {
|
|
9
19
|
const state = readDaemonState(cwd);
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
if (
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
+
let stopped = false;
|
|
21
|
+
let stale = false;
|
|
22
|
+
if (state) {
|
|
23
|
+
if (pidAlive(state.pid) && !isReceiptDaemonProcess(state.pid)) {
|
|
24
|
+
// Planted or recycled pid — never signal a foreign process.
|
|
25
|
+
clearDaemonState(cwd);
|
|
26
|
+
stale = true;
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
if (pidAlive(state.pid)) {
|
|
30
|
+
defaultKill(state.pid);
|
|
31
|
+
for (let waited = 0; waited < 3_000 && pidAlive(state.pid); waited += 100) {
|
|
32
|
+
await sleep(100);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
clearDaemonState(cwd);
|
|
36
|
+
stopped = true;
|
|
20
37
|
}
|
|
21
|
-
|
|
22
|
-
|
|
38
|
+
}
|
|
39
|
+
let extraStopped;
|
|
40
|
+
let sweepUnsupported = false;
|
|
41
|
+
if (options.all) {
|
|
42
|
+
const platform = options.platform ?? process.platform;
|
|
43
|
+
if (platform === "win32") {
|
|
44
|
+
// tasklist exposes no command lines, so orphans cannot be identified —
|
|
45
|
+
// report the limitation instead of claiming none are running.
|
|
46
|
+
sweepUnsupported = true;
|
|
47
|
+
extraStopped = [];
|
|
23
48
|
}
|
|
24
|
-
|
|
25
|
-
|
|
49
|
+
else {
|
|
50
|
+
const kill = options.kill ?? defaultKill;
|
|
51
|
+
const procs = options.procs ?? listOwnedProcesses(platform);
|
|
52
|
+
const extra = [];
|
|
53
|
+
for (const pid of findReceiptDaemonPids(procs)) {
|
|
54
|
+
if (stopped && pid === state?.pid)
|
|
55
|
+
continue; // already handled above
|
|
56
|
+
kill(pid);
|
|
57
|
+
for (let waited = 0; waited < 3_000 && pidAlive(pid); waited += 100) {
|
|
58
|
+
await sleep(100);
|
|
59
|
+
}
|
|
60
|
+
extra.push(pid);
|
|
61
|
+
}
|
|
62
|
+
extraStopped = extra;
|
|
26
63
|
}
|
|
27
64
|
}
|
|
28
|
-
|
|
29
|
-
|
|
65
|
+
return {
|
|
66
|
+
stopped,
|
|
67
|
+
pid: state?.pid,
|
|
68
|
+
stale: stale || undefined,
|
|
69
|
+
extraStopped,
|
|
70
|
+
sweepUnsupported: sweepUnsupported || undefined,
|
|
71
|
+
};
|
|
30
72
|
}
|
|
31
73
|
export function formatStopHuman(r) {
|
|
74
|
+
const lines = [];
|
|
32
75
|
if (r.stale) {
|
|
33
|
-
|
|
76
|
+
lines.push(`state file was stale (pid ${r.pid} is not the report server) — cleared it`);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
lines.push(r.stopped ? `stopped report server (pid ${r.pid})` : "no report server running");
|
|
80
|
+
}
|
|
81
|
+
if (r.sweepUnsupported) {
|
|
82
|
+
lines.push("sweep of other receipt daemons is not supported on this platform (win32) — any orphans must be stopped manually");
|
|
83
|
+
}
|
|
84
|
+
else if (r.extraStopped) {
|
|
85
|
+
lines.push(r.extraStopped.length > 0
|
|
86
|
+
? `stopped ${r.extraStopped.length} other receipt daemon(s): ${r.extraStopped
|
|
87
|
+
.map((pid) => `pid ${pid}`)
|
|
88
|
+
.join(", ")}`
|
|
89
|
+
: "no other receipt daemons running");
|
|
34
90
|
}
|
|
35
|
-
return
|
|
36
|
-
? `stopped report server (pid ${r.pid})`
|
|
37
|
-
: "no report server running";
|
|
91
|
+
return lines.join("\n");
|
|
38
92
|
}
|
|
39
93
|
//# sourceMappingURL=stop.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type ConnectStatus } from "./connect.js";
|
|
2
|
+
export interface WireHookInput {
|
|
3
|
+
readonly host: string;
|
|
4
|
+
readonly home: string;
|
|
5
|
+
readonly force?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface WireHookResult {
|
|
8
|
+
readonly host: string;
|
|
9
|
+
readonly label: string;
|
|
10
|
+
readonly path: string;
|
|
11
|
+
readonly status: ConnectStatus;
|
|
12
|
+
}
|
|
13
|
+
export declare const HOOK_HOSTS: readonly ["claude", "grok", "kimi"];
|
|
14
|
+
/** Whether a host has verified PreToolUse hook wiring. */
|
|
15
|
+
export declare function hookSupported(hostId: string): boolean;
|
|
16
|
+
/** Shell command a host's PreToolUse hook runs. JSON-quoted paths are safe to embed. */
|
|
17
|
+
export declare function hookCommand(hostId: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Build the [[hooks]] TOML block for a command string. The command goes into
|
|
20
|
+
* a TOML literal string (single quotes) so the embedded JSON-quoted paths are
|
|
21
|
+
* safe — but a literal string cannot hold a single quote or a newline, so
|
|
22
|
+
* refuse those instead of writing invalid TOML into the user's config.
|
|
23
|
+
*/
|
|
24
|
+
export declare function kimiHooksBlockText(command: string): string;
|
|
25
|
+
/** Wire `kya hook` into one host's user config. Unknown host → UsageError. */
|
|
26
|
+
export declare function wireHook(input: WireHookInput): WireHookResult;
|
|
27
|
+
/** Wire every supported host (or an explicit subset) under one home dir. */
|
|
28
|
+
export declare function wireHooks(input: {
|
|
29
|
+
readonly home: string;
|
|
30
|
+
readonly force?: boolean;
|
|
31
|
+
readonly hosts?: readonly string[];
|
|
32
|
+
}): WireHookResult[];
|
|
33
|
+
//# sourceMappingURL=wire-hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire-hooks.d.ts","sourceRoot":"","sources":["../../src/commands/wire-hooks.ts"],"names":[],"mappings":"AAWA,OAAO,EAML,KAAK,aAAa,EACnB,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;CAChC;AAED,eAAO,MAAM,UAAU,qCAAsC,CAAC;AAI9D,0DAA0D;AAC1D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAErD;AAID,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAIlD;AA4GD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAa1D;AAyDD,8EAA8E;AAC9E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CA4B7D;AAED,4EAA4E;AAC5E,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,GAAG,cAAc,EAAE,CAKnB"}
|