@shield-agent/kya 0.34.0 → 0.35.3

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.
Files changed (181) hide show
  1. package/.cursor-plugin/plugin.json +2 -2
  2. package/.mcp.json +1 -1
  3. package/LIMITATIONS.md +2 -1
  4. package/README.md +37 -655
  5. package/amp/settings.example.json +1 -1
  6. package/assets/report-blocked.png +0 -0
  7. package/assets/report-certify.png +0 -0
  8. package/assets/report-overview.png +0 -0
  9. package/assets/screenshot-features.json +1 -0
  10. package/claude/claude_desktop_config.example.json +1 -1
  11. package/cline/cline_mcp_settings.example.json +1 -1
  12. package/copilot/mcp-config.example.json +1 -1
  13. package/dist/alerts/triage-setup.d.ts +4 -0
  14. package/dist/alerts/triage-setup.d.ts.map +1 -1
  15. package/dist/alerts/triage-setup.js +11 -1
  16. package/dist/alerts/triage-setup.js.map +1 -1
  17. package/dist/card-png.d.ts +3 -0
  18. package/dist/card-png.d.ts.map +1 -0
  19. package/dist/card-png.js +54 -0
  20. package/dist/card-png.js.map +1 -0
  21. package/dist/card.d.ts +62 -0
  22. package/dist/card.d.ts.map +1 -0
  23. package/dist/card.js +154 -0
  24. package/dist/card.js.map +1 -0
  25. package/dist/certify/evaluate.d.ts +11 -1
  26. package/dist/certify/evaluate.d.ts.map +1 -1
  27. package/dist/certify/evaluate.js +8 -1
  28. package/dist/certify/evaluate.js.map +1 -1
  29. package/dist/certify/render.d.ts.map +1 -1
  30. package/dist/certify/render.js +10 -1
  31. package/dist/certify/render.js.map +1 -1
  32. package/dist/cli.d.ts +2 -0
  33. package/dist/cli.d.ts.map +1 -1
  34. package/dist/cli.js +223 -52
  35. package/dist/cli.js.map +1 -1
  36. package/dist/commands/connect.d.ts.map +1 -1
  37. package/dist/commands/connect.js +4 -3
  38. package/dist/commands/connect.js.map +1 -1
  39. package/dist/commands/doctor.d.ts.map +1 -1
  40. package/dist/commands/doctor.js +12 -1
  41. package/dist/commands/doctor.js.map +1 -1
  42. package/dist/commands/hook.d.ts.map +1 -1
  43. package/dist/commands/hook.js +94 -8
  44. package/dist/commands/hook.js.map +1 -1
  45. package/dist/commands/init.d.ts +2 -0
  46. package/dist/commands/init.d.ts.map +1 -1
  47. package/dist/commands/init.js +2 -0
  48. package/dist/commands/init.js.map +1 -1
  49. package/dist/commands/receipt.d.ts +19 -0
  50. package/dist/commands/receipt.d.ts.map +1 -1
  51. package/dist/commands/receipt.js +21 -1
  52. package/dist/commands/receipt.js.map +1 -1
  53. package/dist/commands/serve-mcp.d.ts +2 -0
  54. package/dist/commands/serve-mcp.d.ts.map +1 -1
  55. package/dist/commands/serve-mcp.js +2 -0
  56. package/dist/commands/serve-mcp.js.map +1 -1
  57. package/dist/commands/start.d.ts +50 -2
  58. package/dist/commands/start.d.ts.map +1 -1
  59. package/dist/commands/start.js +233 -27
  60. package/dist/commands/start.js.map +1 -1
  61. package/dist/commands/team.d.ts +19 -2
  62. package/dist/commands/team.d.ts.map +1 -1
  63. package/dist/commands/team.js +93 -13
  64. package/dist/commands/team.js.map +1 -1
  65. package/dist/commands/uninstall.d.ts +20 -0
  66. package/dist/commands/uninstall.d.ts.map +1 -0
  67. package/dist/commands/uninstall.js +378 -0
  68. package/dist/commands/uninstall.js.map +1 -0
  69. package/dist/commands/wire-hooks.d.ts +16 -2
  70. package/dist/commands/wire-hooks.d.ts.map +1 -1
  71. package/dist/commands/wire-hooks.js +86 -21
  72. package/dist/commands/wire-hooks.js.map +1 -1
  73. package/dist/cta.d.ts +3 -1
  74. package/dist/cta.d.ts.map +1 -1
  75. package/dist/cta.js +11 -6
  76. package/dist/cta.js.map +1 -1
  77. package/dist/fs-atomic.d.ts.map +1 -1
  78. package/dist/fs-atomic.js +9 -2
  79. package/dist/fs-atomic.js.map +1 -1
  80. package/dist/guard-demo.d.ts +23 -0
  81. package/dist/guard-demo.d.ts.map +1 -0
  82. package/dist/guard-demo.js +34 -0
  83. package/dist/guard-demo.js.map +1 -0
  84. package/dist/guard-entry.d.ts +2 -0
  85. package/dist/guard-entry.d.ts.map +1 -0
  86. package/dist/guard-entry.js +50 -0
  87. package/dist/guard-entry.js.map +1 -0
  88. package/dist/guard-lite.d.ts +27 -0
  89. package/dist/guard-lite.d.ts.map +1 -0
  90. package/dist/guard-lite.js +274 -0
  91. package/dist/guard-lite.js.map +1 -0
  92. package/dist/guard-pack.d.ts +7 -2
  93. package/dist/guard-pack.d.ts.map +1 -1
  94. package/dist/guard-pack.js +202 -4
  95. package/dist/guard-pack.js.map +1 -1
  96. package/dist/hook-health.d.ts +7 -0
  97. package/dist/hook-health.d.ts.map +1 -0
  98. package/dist/hook-health.js +105 -0
  99. package/dist/hook-health.js.map +1 -0
  100. package/dist/manifest.d.ts +106 -0
  101. package/dist/manifest.d.ts.map +1 -0
  102. package/dist/manifest.js +454 -0
  103. package/dist/manifest.js.map +1 -0
  104. package/dist/mcp/http.d.ts +1 -0
  105. package/dist/mcp/http.d.ts.map +1 -1
  106. package/dist/mcp/http.js +1 -0
  107. package/dist/mcp/http.js.map +1 -1
  108. package/dist/mcp/protocol.d.ts +2 -0
  109. package/dist/mcp/protocol.d.ts.map +1 -1
  110. package/dist/mcp/protocol.js +5 -1
  111. package/dist/mcp/protocol.js.map +1 -1
  112. package/dist/mcp/stdio.d.ts +1 -0
  113. package/dist/mcp/stdio.d.ts.map +1 -1
  114. package/dist/mcp/stdio.js +1 -0
  115. package/dist/mcp/stdio.js.map +1 -1
  116. package/dist/never-list-input.d.ts +2 -0
  117. package/dist/never-list-input.d.ts.map +1 -1
  118. package/dist/never-list-input.js +30 -30
  119. package/dist/never-list-input.js.map +1 -1
  120. package/dist/offline-evaluate.d.ts.map +1 -1
  121. package/dist/offline-evaluate.js +2 -1
  122. package/dist/offline-evaluate.js.map +1 -1
  123. package/dist/parse-args.js +1 -1
  124. package/dist/parse-args.js.map +1 -1
  125. package/dist/receipt/changes.d.ts +2 -1
  126. package/dist/receipt/changes.d.ts.map +1 -1
  127. package/dist/receipt/changes.js +9 -0
  128. package/dist/receipt/changes.js.map +1 -1
  129. package/dist/receipt/dashboard.d.ts +14 -1
  130. package/dist/receipt/dashboard.d.ts.map +1 -1
  131. package/dist/receipt/dashboard.js +20 -2
  132. package/dist/receipt/dashboard.js.map +1 -1
  133. package/dist/receipt/live-server.d.ts +15 -0
  134. package/dist/receipt/live-server.d.ts.map +1 -1
  135. package/dist/receipt/live-server.js +71 -0
  136. package/dist/receipt/live-server.js.map +1 -1
  137. package/dist/receipt/receipt-css.d.ts.map +1 -1
  138. package/dist/receipt/receipt-css.js +45 -0
  139. package/dist/receipt/receipt-css.js.map +1 -1
  140. package/dist/receipt/render-receipt.d.ts +14 -0
  141. package/dist/receipt/render-receipt.d.ts.map +1 -1
  142. package/dist/receipt/render-receipt.js +451 -79
  143. package/dist/receipt/render-receipt.js.map +1 -1
  144. package/dist/receipt/search.d.ts.map +1 -1
  145. package/dist/receipt/search.js +2 -0
  146. package/dist/receipt/search.js.map +1 -1
  147. package/dist/receipt/semantic-setup.d.ts +4 -0
  148. package/dist/receipt/semantic-setup.d.ts.map +1 -1
  149. package/dist/receipt/semantic-setup.js +10 -1
  150. package/dist/receipt/semantic-setup.js.map +1 -1
  151. package/dist/receipt/share.d.ts +15 -0
  152. package/dist/receipt/share.d.ts.map +1 -1
  153. package/dist/receipt/share.js +34 -1
  154. package/dist/receipt/share.js.map +1 -1
  155. package/dist/telemetry.d.ts +17 -2
  156. package/dist/telemetry.d.ts.map +1 -1
  157. package/dist/telemetry.js +67 -7
  158. package/dist/telemetry.js.map +1 -1
  159. package/dist/trail.d.ts +39 -0
  160. package/dist/trail.d.ts.map +1 -1
  161. package/dist/trail.js +27 -0
  162. package/dist/trail.js.map +1 -1
  163. package/dist/write-journal.d.ts +39 -0
  164. package/dist/write-journal.d.ts.map +1 -0
  165. package/dist/write-journal.js +107 -0
  166. package/dist/write-journal.js.map +1 -0
  167. package/droid/README.md +1 -1
  168. package/droid/mcp.example.json +1 -1
  169. package/gemini/settings.example.json +1 -1
  170. package/grok/README.md +1 -1
  171. package/kilo/kilo.example.json +1 -1
  172. package/kimi/mcp.example.json +1 -1
  173. package/kiro/mcp.example.json +1 -1
  174. package/manifest.json +2 -2
  175. package/mastracode/mcp.example.json +1 -1
  176. package/mcp.json +1 -1
  177. package/openai/codex.config.example.toml +1 -1
  178. package/opencode/opencode.example.json +1 -1
  179. package/package.json +9 -3
  180. package/qwen/settings.example.json +1 -1
  181. package/server.json +3 -3
@@ -1,6 +1,11 @@
1
1
  /**
2
2
  * `kya team init` / `kya team managed-settings`: spread the Claude Code plugin to a team.
3
3
  *
4
+ * `team init --guard` does the same for the kya-guard plugin (one bundled file, no install step): the same marketplace pin,
5
+ * and enabledPlugins["kya-guard@shield-kya"] = true instead of kya@shield-kya. It prints the exact diff and a README badge,
6
+ * writes no .kya/policy.json, and refuses when kya@shield-kya is on (both plugins would write a row for every call).
7
+ * The write is recorded in ~/.kya/manifest.json by the caller (src/cli.ts), so `kya uninstall --project` reverses it.
8
+ *
4
9
  * init merges two keys into the CURRENT PROJECT's `.claude/settings.json` (never the user's):
5
10
  * extraKnownMarketplaces["shield-kya"] = github The-Pixel-Boys/shield-kya at ref v<version>
6
11
  * enabledPlugins["kya@shield-kya"] = true
@@ -11,7 +16,7 @@
11
16
  * admin policy document. A prerelease kya refuses both (no public tag to pin). Schema: code.claude.com/docs/en/plugins/org and
12
17
  * /docs/en/plugins/marketplace-reference (marketplace `github` source: repo, ref, path; no sha).
13
18
  */
14
- import { existsSync, lstatSync, mkdirSync, readFileSync, realpathSync } from "node:fs";
19
+ import { existsSync, lstatSync, readFileSync, realpathSync } from "node:fs";
15
20
  import { homedir } from "node:os";
16
21
  import { basename, dirname, join } from "node:path";
17
22
  import { globalConfigDir } from "../config.js";
@@ -20,8 +25,13 @@ import { atomicWriteSync } from "../fs-atomic.js";
20
25
  import { POLICY_FILE, POLICY_SCAFFOLD } from "../project-policy.js";
21
26
  import { compareVersions } from "../update-check.js";
22
27
  import { CLI_VERSION } from "../version.js";
28
+ import { journalMkdir } from "../write-journal.js";
23
29
  export const MARKETPLACE = "shield-kya";
24
30
  export const PLUGIN_ID = "kya@shield-kya";
31
+ export const GUARD_PLUGIN_ID = "kya-guard@shield-kya";
32
+ export const SCOREBOARD_URL = "https://shield-agent.com/replays";
33
+ /** The line a maintainer pastes into the README: a static badge that reads "agent-guarded" and links to the scoreboard. */
34
+ export const GUARD_BADGE = `[![agent-guarded](https://img.shields.io/badge/agent--guarded-KYA%20Guard-2ea44f)](${SCOREBOARD_URL})`;
25
35
  export const PUBLIC_REPO = "The-Pixel-Boys/shield-kya";
26
36
  /** Public repo release tags are `v<version>` (the `kya-v*` tags live only in the private monorepo). */
27
37
  export function releaseRef(version = CLI_VERSION) {
@@ -92,8 +102,56 @@ function newerThan(a, b) {
92
102
  const tag = /^v\d+\.\d+\.\d+(-[0-9A-Za-z.-]+)?$/;
93
103
  return tag.test(a) && tag.test(b) && compareVersions(a, b) > 0;
94
104
  }
95
- /** Merge our two keys into `settings`; returns change lines. Throws (nothing written) on conflicts. */
96
- export function mergeTeamSettings(settings, version = CLI_VERSION) {
105
+ /**
106
+ * Unified diff of two texts, 2 lines of context. Line based (LCS): the settings files are small.
107
+ * Empty string when the texts are equal.
108
+ */
109
+ export function unifiedDiff(label, before, after) {
110
+ if (before === after)
111
+ return "";
112
+ const a = before === "" ? [] : before.replace(/\n$/, "").split("\n");
113
+ const b = after.replace(/\n$/, "").split("\n");
114
+ const n = a.length;
115
+ const m = b.length;
116
+ const lcs = Array.from({ length: n + 1 }, () => new Array(m + 1).fill(0));
117
+ for (let i = n - 1; i >= 0; i--)
118
+ for (let j = m - 1; j >= 0; j--)
119
+ lcs[i][j] = a[i] === b[j] ? lcs[i + 1][j + 1] + 1 : Math.max(lcs[i + 1][j], lcs[i][j + 1]);
120
+ const ops = [];
121
+ let i = 0;
122
+ let j = 0;
123
+ while (i < n || j < m) {
124
+ if (i < n && j < m && a[i] === b[j])
125
+ ops.push([" ", a[i++]]), j++;
126
+ else if (i < n && (j === m || lcs[i + 1][j] >= lcs[i][j + 1]))
127
+ ops.push(["-", a[i++]]); // a removal first, as diff does
128
+ else
129
+ ops.push(["+", b[j++]]);
130
+ }
131
+ const keep = ops.map(([k], x) => k !== " " || ops.slice(Math.max(0, x - 2), x + 3).some(([c]) => c !== " "));
132
+ const out = [`--- ${before === "" ? "/dev/null" : `a/${label}`}`, `+++ b/${label}`];
133
+ let x = 0;
134
+ while (x < ops.length) {
135
+ if (!keep[x]) {
136
+ x++;
137
+ continue;
138
+ }
139
+ let end = x;
140
+ while (end < ops.length && keep[end])
141
+ end++;
142
+ const hunk = ops.slice(x, end);
143
+ const startA = ops.slice(0, x).filter(([k]) => k !== "+").length + 1;
144
+ const startB = ops.slice(0, x).filter(([k]) => k !== "-").length + 1;
145
+ out.push(`@@ -${startA},${hunk.filter(([k]) => k !== "+").length} +${startB},${hunk.filter(([k]) => k !== "-").length} @@`);
146
+ for (const [k, line] of hunk)
147
+ out.push(`${k}${line}`);
148
+ x = end;
149
+ }
150
+ return out.join("\n");
151
+ }
152
+ /** Merge our two keys into `settings`; returns change lines. Throws (nothing written) on conflicts. `guard` swaps kya for kya-guard. */
153
+ export function mergeTeamSettings(settings, version = CLI_VERSION, guard = false) {
154
+ const pluginId = guard ? GUARD_PLUGIN_ID : PLUGIN_ID;
97
155
  const changes = [];
98
156
  const want = marketplaceSource(version);
99
157
  // Claude Code reads the alias only when the canonical key is absent: adding ours would drop theirs.
@@ -125,17 +183,21 @@ export function mergeTeamSettings(settings, version = CLI_VERSION) {
125
183
  const enabled = settings.enabledPlugins ?? {};
126
184
  if (!isObj(enabled))
127
185
  throw refuse("enabledPlugins is not an object; fix it by hand first");
128
- if (enabled[PLUGIN_ID] === false) {
129
- throw refuse(`enabledPlugins["${PLUGIN_ID}"] is false (someone turned it off); change it by hand if you want it on`);
186
+ if (enabled[pluginId] === false) {
187
+ throw refuse(`enabledPlugins["${pluginId}"] is false (someone turned it off); change it by hand if you want it on`);
188
+ }
189
+ if (guard && enabled[PLUGIN_ID] === true) {
190
+ throw refuse(`enabledPlugins["${PLUGIN_ID}"] is on: kya and kya-guard together write two rows for every call; turn one off by hand first`);
130
191
  }
131
- if (enabled[PLUGIN_ID] !== true) {
132
- enabled[PLUGIN_ID] = true;
133
- changes.push(`+ enabledPlugins["${PLUGIN_ID}"] = true`);
192
+ if (enabled[pluginId] !== true) {
193
+ enabled[pluginId] = true;
194
+ changes.push(`+ enabledPlugins["${pluginId}"] = true`);
134
195
  }
135
196
  settings.enabledPlugins = enabled;
136
197
  return changes;
137
198
  }
138
199
  export function runTeamInit(opts) {
200
+ const guard = opts.guard === true;
139
201
  const { dir, file, policyDir, policyFile } = guardPaths(opts.cwd, opts.env ?? process.env);
140
202
  const before = existsSync(file) ? readFileSync(file, "utf8") : undefined;
141
203
  let settings = {};
@@ -149,19 +211,23 @@ export function runTeamInit(opts) {
149
211
  }
150
212
  if (!isObj(settings))
151
213
  throw refuse(`${file} is not a JSON object; nothing was written`);
152
- const settingsChanges = mergeTeamSettings(settings, opts.version);
214
+ const settingsChanges = mergeTeamSettings(settings, opts.version, guard);
153
215
  const indent = before ? detectIndent(before) : 2;
154
216
  // ponytail: re-serializes the whole file; a surgical text insert would keep a hand-made layout.
155
217
  const reformatted = !!before?.trim() && `${JSON.stringify(JSON.parse(before), null, indent)}\n` !== before;
156
218
  const content = `${JSON.stringify(settings, null, indent)}\n`;
157
219
  // The policy file is created once and never rewritten: a team's rules belong to the team, not to kya.
158
- const policyChanges = existsSync(policyFile) ? [] : [`+ ${POLICY_FILE} = empty policy (no rules yet; add tool ids to deny or requireApprove)`];
220
+ const policyChanges = guard || existsSync(policyFile) ? [] : [`+ ${POLICY_FILE} = empty policy (no rules yet; add tool ids to deny or requireApprove)`];
159
221
  const changes = [...settingsChanges, ...policyChanges];
160
- const base = { path: file, dryRun: opts.dryRun === true, changes, content, ref: releaseRef(opts.version), reformatted };
222
+ const diff = guard ? unifiedDiff(".claude/settings.json", before ?? "", content) : "";
223
+ const base = {
224
+ path: file, dryRun: opts.dryRun === true, changes, content, ref: releaseRef(opts.version), reformatted, guard, diff,
225
+ badge: guard ? GUARD_BADGE : "",
226
+ };
161
227
  if (base.dryRun || changes.length === 0)
162
228
  return { ...base, written: false };
163
229
  if (!existsSync(dir) && settingsChanges.length > 0)
164
- mkdirSync(dir);
230
+ journalMkdir(dir); // journaled: `kya uninstall --project` removes it again
165
231
  // Re-check right before the rename that .claude and settings.json are still not symlinks and still the
166
232
  // project's. Residual: a same-user process can still swap them between this check and the rename (TOCTOU);
167
233
  // a planted temp file or symlink cannot be followed, since atomicWriteSync creates its temp with O_EXCL.
@@ -174,12 +240,26 @@ export function runTeamInit(opts) {
174
240
  atomicWriteSync(file, content, recheck);
175
241
  if (policyChanges.length > 0) {
176
242
  if (!existsSync(policyDir))
177
- mkdirSync(policyDir);
243
+ journalMkdir(policyDir);
178
244
  atomicWriteSync(policyFile, POLICY_SCAFFOLD, recheck);
179
245
  }
180
246
  return { ...base, written: true };
181
247
  }
248
+ function formatGuardHuman(r) {
249
+ const lines = [];
250
+ if (r.changes.length === 0)
251
+ lines.push(`${r.path} already enables ${GUARD_PLUGIN_ID} at ${r.ref}; nothing to do.`);
252
+ else
253
+ lines.push(`${r.dryRun ? "Would write" : "Wrote"} ${r.path}:`, ...r.changes.map((c) => ` ${c}`), "", "Diff:", r.diff);
254
+ if (r.changes.length > 0 && r.reformatted) {
255
+ lines.push("Note: the existing file's layout is normalized to standard JSON (keys and values unchanged).");
256
+ }
257
+ lines.push("", "README badge (paste it near the top of your README):", r.badge, "", "Next: commit .claude/settings.json. Teammates see Claude Code's folder trust prompt once;", `after they accept it, the ${MARKETPLACE} marketplace is added and ${GUARD_PLUGIN_ID} installs at the next session.`, `Pinned to tag ${r.ref} of ${PUBLIC_REPO}. Rerun kya team init --guard after upgrading kya to move the pin.`, `Verify the tag exists and ships the plugin (git ls-remote https://github.com/${PUBLIC_REPO} refs/tags/${r.ref}; the folder plugins/kya-guard must be in it);`, "if it is not, teammates will see the plugin skipped, not an error.", "The guard needs Node.js 22 or later on PATH. It checks every tool call locally, makes no network call, and fails open.", "Remove: kya uninstall --project (reverses this write), or delete the two keys by hand.");
258
+ return lines.join("\n");
259
+ }
182
260
  export function formatTeamInitHuman(r) {
261
+ if (r.guard)
262
+ return formatGuardHuman(r);
183
263
  const lines = [];
184
264
  if (r.changes.length === 0)
185
265
  lines.push(`${r.path} already enables ${PLUGIN_ID} at ${r.ref}; nothing to do.`);
@@ -1 +1 @@
1
- {"version":3,"file":"team.js","sourceRoot":"","sources":["../../src/commands/team.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"team.js","sourceRoot":"","sources":["../../src/commands/team.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export interface UninstallLine {
2
+ readonly path: string;
3
+ readonly what: string;
4
+ }
5
+ export interface UninstallResult {
6
+ readonly dryRun: boolean;
7
+ readonly restored: readonly UninstallLine[];
8
+ readonly keysRemoved: readonly UninstallLine[];
9
+ readonly deleted: readonly UninstallLine[];
10
+ readonly leftAlone: readonly UninstallLine[];
11
+ readonly nothingToUndo: boolean;
12
+ }
13
+ export declare function runUninstall(opts: {
14
+ env: NodeJS.ProcessEnv;
15
+ cwd: string;
16
+ project: boolean;
17
+ dryRun?: boolean;
18
+ }): UninstallResult;
19
+ export declare function formatUninstallHuman(r: UninstallResult, cwd: string): string;
20
+ //# sourceMappingURL=uninstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AA4BA,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IAC5C,QAAQ,CAAC,WAAW,EAAE,SAAS,aAAa,EAAE,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,SAAS,aAAa,EAAE,CAAC;IAC7C,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC;AAwLD,wBAAgB,YAAY,CAAC,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,eAAe,CAsI/H;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CA0B5E"}
@@ -0,0 +1,378 @@
1
+ /**
2
+ * kya uninstall - undo what `kya start` / `kya connect` wrote, from
3
+ * ~/.kya/manifest.json. Removes only the keys KYA added, deletes files KYA
4
+ * created when they are unchanged, restores merged files byte for byte when
5
+ * nothing touched them since, and lists what it left alone.
6
+ *
7
+ * The manifest drives deletes and writes, so it is not trusted blindly: it must
8
+ * be a 0600 file owned by the user with a valid shape; every entry must name a
9
+ * known KYA target path; backups must live under ~/.kya/undo/; project files go
10
+ * through the project path guard; a symlink or hard link is refused.
11
+ */
12
+ import { existsSync, lstatSync, readdirSync, readFileSync, realpathSync, rmdirSync, rmSync } from "node:fs";
13
+ import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
14
+ import { atomicWriteSync, projectWritePath, writeProjectFile } from "../fs-atomic.js";
15
+ import { readManifestStrict, resolvedOf, sha256, tomlHeaders, writeManifest, manifestPath, withManifestLock, } from "../manifest.js";
16
+ import { globalConfigDir } from "../config.js";
17
+ import { CONNECT_REGISTRY } from "./connect.js";
18
+ const isObj = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
19
+ const same = (a, b) => JSON.stringify(a) === JSON.stringify(b);
20
+ function getAt(doc, path) {
21
+ let cur = doc;
22
+ for (const k of path) {
23
+ if (!isObj(cur) || !(k in cur))
24
+ return undefined;
25
+ cur = cur[k];
26
+ }
27
+ return cur;
28
+ }
29
+ function setAt(doc, path, value) {
30
+ let cur = doc;
31
+ for (const k of path.slice(0, -1)) {
32
+ if (!isObj(cur[k]))
33
+ cur[k] = {};
34
+ cur = cur[k];
35
+ }
36
+ cur[path[path.length - 1]] = value;
37
+ }
38
+ function deleteAt(doc, path) {
39
+ if (path.length === 0)
40
+ return;
41
+ const parent = getAt(doc, path.slice(0, -1));
42
+ if (isObj(parent))
43
+ delete parent[path[path.length - 1]];
44
+ }
45
+ /** Drop containers that became empty and that the original file did not have. */
46
+ function prune(doc, orig, path) {
47
+ for (let n = path.length; n > 0; n--) {
48
+ const p = path.slice(0, n);
49
+ const v = getAt(doc, p);
50
+ const empty = Array.isArray(v) ? v.length === 0 : isObj(v) && Object.keys(v).length === 0;
51
+ if (!empty || getAt(orig, p) !== undefined)
52
+ return;
53
+ deleteAt(doc, p);
54
+ }
55
+ }
56
+ function surgicalJson(text, entry, orig) {
57
+ const doc = JSON.parse(text);
58
+ if (!isObj(doc))
59
+ throw new Error("not an object");
60
+ const unrestored = [];
61
+ for (const a of entry.added) {
62
+ if (a.kind === "key") {
63
+ const was = getAt(orig, a.path);
64
+ if (was !== undefined)
65
+ setAt(doc, a.path, was);
66
+ else
67
+ deleteAt(doc, a.path);
68
+ prune(doc, orig, a.path.slice(0, -1));
69
+ }
70
+ else if (a.kind === "item") {
71
+ const arr = getAt(doc, a.path);
72
+ if (Array.isArray(arr)) {
73
+ const keep = arr.filter((i) => !same(i, a.value));
74
+ if (keep.length !== arr.length)
75
+ setAt(doc, a.path, keep);
76
+ }
77
+ prune(doc, orig, a.path);
78
+ }
79
+ }
80
+ for (const p of entry.removed) {
81
+ const was = getAt(orig, p);
82
+ if (getAt(doc, p) !== undefined)
83
+ continue;
84
+ if (was !== undefined)
85
+ setAt(doc, p, was);
86
+ else
87
+ unrestored.push(p.join("."));
88
+ }
89
+ return { text: `${JSON.stringify(doc, null, 2)}\n`, unrestored };
90
+ }
91
+ function surgicalToml(text, entry, orig) {
92
+ let out = text;
93
+ for (const a of entry.added) {
94
+ const blocks = tomlHeaders(out).filter((h) => a.kind === "toml-table" ? !h.array && h.name === a.name : a.kind === "toml-hook" ? h.array && h.body.includes(a.identity) : false);
95
+ for (const b of blocks.reverse())
96
+ out = out.slice(0, b.start) + out.slice(b.end);
97
+ }
98
+ const unrestored = [];
99
+ const origBlocks = orig === undefined ? [] : tomlHeaders(orig).filter((h) => !h.array);
100
+ for (const name of entry.removedToml ?? []) {
101
+ if (tomlHeaders(out).some((h) => !h.array && h.name === name))
102
+ continue;
103
+ const block = origBlocks.find((h) => h.name === name);
104
+ if (!block) {
105
+ unrestored.push(`[${name}]`);
106
+ continue;
107
+ }
108
+ const body = block.body.endsWith("\n") ? block.body : `${block.body}\n`;
109
+ out = `${out}${out.length === 0 || out.endsWith("\n") ? "" : "\n"}${out.length === 0 ? "" : "\n"}${body}`;
110
+ }
111
+ return { text: out, unrestored };
112
+ }
113
+ function surgicalLines(text, adds) {
114
+ const lines = text.split("\n");
115
+ for (const a of adds) {
116
+ if (a.kind !== "line")
117
+ continue;
118
+ const i = lines.lastIndexOf(a.text);
119
+ if (i !== -1)
120
+ lines.splice(i, 1);
121
+ }
122
+ return { text: lines.join("\n"), unrestored: [] };
123
+ }
124
+ function within(path, dir) {
125
+ const r = relative(resolve(dir), resolve(path));
126
+ return r === "" || (r !== ".." && !r.startsWith(`..${sep}`) && !isAbsolute(r));
127
+ }
128
+ function canon(p) {
129
+ try {
130
+ return realpathSync(p);
131
+ }
132
+ catch {
133
+ return resolvedOf(p);
134
+ }
135
+ }
136
+ /** The only files undo may touch: what start and connect write. */
137
+ function targetSet(home, project) {
138
+ const out = new Set();
139
+ const add = (p) => {
140
+ if (p)
141
+ out.add(canon(p));
142
+ };
143
+ for (const spec of Object.values(CONNECT_REGISTRY)) {
144
+ add(spec.globalPath?.(home));
145
+ if (project)
146
+ add(spec.projectPath?.(project));
147
+ }
148
+ add(join(home, ".claude", "settings.json"));
149
+ add(join(home, ".grok", "hooks", "shield-kya.json"));
150
+ add(join(home, ".kimi-code", "config.toml"));
151
+ add(join(home, ".kya", "bin", "kya-hook"));
152
+ add(join(home, ".kya", "gateways.json"));
153
+ if (project) {
154
+ add(join(project, ".claude", "settings.json"));
155
+ add(join(project, ".gitignore"));
156
+ add(join(project, ".kya", "config.json"));
157
+ }
158
+ return out;
159
+ }
160
+ function allowed(e, c) {
161
+ const set = targetSet(c.home, e.project);
162
+ return set.has(canon(e.path)) || set.has(e.path);
163
+ }
164
+ /** A reason to refuse this entry, or undefined when it is safe to touch. */
165
+ function refusal(e, c) {
166
+ if (!allowed(e, c))
167
+ return "not a file kya start or kya connect writes (manifest entry refused)";
168
+ if (e.backup !== undefined && existsSync(e.backup)) {
169
+ if (lstatSync(e.backup).isSymbolicLink())
170
+ return "its backup is a symlink (refused)";
171
+ if (!within(realpathSync(e.backup), canon(c.undoDir)))
172
+ return "its backup is outside ~/.kya/undo (manifest entry refused)";
173
+ }
174
+ else if (e.backup !== undefined && !within(resolve(e.backup), c.undoDir)) {
175
+ return "its backup path is outside ~/.kya/undo (manifest entry refused)";
176
+ }
177
+ if (!existsSync(e.path))
178
+ return undefined;
179
+ if (e.resolved !== undefined && resolvedOf(e.path) !== e.resolved)
180
+ return "its path no longer resolves to where KYA wrote it (a parent directory was replaced by a link)";
181
+ const st = lstatSync(e.path);
182
+ if (st.isSymbolicLink())
183
+ return "it is now a symlink (refused, not followed)";
184
+ if (!st.isFile())
185
+ return "it is not a regular file";
186
+ if (st.nlink > 1)
187
+ return `it has other hard links (${st.nlink}); refused`;
188
+ if (e.project !== undefined && within(e.path, e.project)) {
189
+ try {
190
+ projectWritePath(e.path, e.project);
191
+ }
192
+ catch (err) {
193
+ return err instanceof Error ? err.message : "project path refused";
194
+ }
195
+ }
196
+ return undefined;
197
+ }
198
+ function errMsg(err) {
199
+ return err instanceof Error ? err.message : String(err);
200
+ }
201
+ export function runUninstall(opts) {
202
+ const dryRun = opts.dryRun === true;
203
+ const globalDir = globalConfigDir(opts.env);
204
+ const manifest = readManifestStrict(globalDir);
205
+ const result = (p) => ({
206
+ dryRun,
207
+ restored: [],
208
+ keysRemoved: [],
209
+ deleted: [],
210
+ leftAlone: [],
211
+ ...p,
212
+ });
213
+ if (!manifest)
214
+ return result({ nothingToUndo: true });
215
+ const ctx = { home: dirname(globalDir), globalDir, undoDir: join(globalDir, "undo") };
216
+ const inScope = (e) => !opts.project || within(e.path, opts.cwd);
217
+ const todo = manifest.entries.filter(inScope);
218
+ const restored = [];
219
+ const keysRemoved = [];
220
+ const deleted = [];
221
+ const leftAlone = [];
222
+ const doneBackups = [];
223
+ /** Entries that stay in the manifest: refused or failed, so a re-run can finish them. */
224
+ const kept = new Set();
225
+ const put = (e, content) => {
226
+ if (dryRun)
227
+ return;
228
+ if (e.project !== undefined && within(e.path, e.project))
229
+ writeProjectFile(e.path, content.toString(), e.project);
230
+ else
231
+ atomicWriteSync(e.path, content);
232
+ };
233
+ for (const e of todo) {
234
+ const bk = e.backup ? ` (backup: ${e.backup})` : "";
235
+ if (!existsSync(e.path)) {
236
+ if (!allowed(e, ctx)) {
237
+ kept.add(e.path);
238
+ leftAlone.push({ path: e.path, what: `not a file kya start or kya connect writes (manifest entry refused)${bk}` });
239
+ continue;
240
+ }
241
+ leftAlone.push({ path: e.path, what: `already gone${bk}` });
242
+ if (e.backup)
243
+ doneBackups.push(e.backup);
244
+ continue;
245
+ }
246
+ const why = refusal(e, ctx);
247
+ if (why !== undefined) {
248
+ kept.add(e.path);
249
+ leftAlone.push({ path: e.path, what: `${why}; left in place${bk}` });
250
+ continue;
251
+ }
252
+ try {
253
+ const bytes = readFileSync(e.path);
254
+ const unchanged = sha256(bytes) === e.sha256 && !e.stale;
255
+ if (e.action === "created") {
256
+ if (!unchanged) {
257
+ leftAlone.push({ path: e.path, what: `KYA created it, but it changed since (or before a later KYA write); left in place (delete it by hand if you want it gone)${bk}` });
258
+ continue;
259
+ }
260
+ if (!dryRun)
261
+ rmSync(e.path, { force: true });
262
+ deleted.push({ path: e.path, what: "created by KYA, unchanged" });
263
+ continue;
264
+ }
265
+ const backupBytes = e.backup && existsSync(e.backup) ? readFileSync(e.backup) : undefined;
266
+ if (backupBytes && sha256(backupBytes) === sha256(bytes)) {
267
+ restored.push({ path: e.path, what: "already in its original state" });
268
+ doneBackups.push(e.backup);
269
+ continue;
270
+ }
271
+ if (unchanged && backupBytes) {
272
+ put(e, backupBytes);
273
+ restored.push({ path: e.path, what: "restored byte for byte from the backup" });
274
+ doneBackups.push(e.backup);
275
+ continue;
276
+ }
277
+ const text = bytes.toString("utf8");
278
+ const origText = backupBytes?.toString("utf8");
279
+ let s;
280
+ if (e.path.endsWith(".json"))
281
+ s = surgicalJson(text, e, origText !== undefined ? JSON.parse(origText) : undefined);
282
+ else if (e.path.endsWith(".toml"))
283
+ s = surgicalToml(text, e, origText);
284
+ else
285
+ s = surgicalLines(text, e.added);
286
+ put(e, s.text);
287
+ keysRemoved.push({ path: e.path, what: `changed since KYA wrote it, so only KYA's entries were removed: ${e.keys.join(", ")}` });
288
+ if (s.unrestored.length > 0) {
289
+ // The backup is the only copy of what the gateway moved: keep it and the entry.
290
+ kept.add(e.path);
291
+ leftAlone.push({ path: e.path, what: `could not put back ${s.unrestored.join(", ")} (not found in the backup); backup kept${bk}` });
292
+ }
293
+ else if (e.backup)
294
+ doneBackups.push(e.backup);
295
+ }
296
+ catch (err) {
297
+ kept.add(e.path);
298
+ leftAlone.push({ path: e.path, what: `could not undo it (${errMsg(err)}); left in place, run kya uninstall again after fixing${bk}` });
299
+ }
300
+ }
301
+ if (!dryRun) {
302
+ for (const b of doneBackups) {
303
+ if (!todo.some((e) => kept.has(e.path) && e.backup === b))
304
+ rmSync(b, { force: true });
305
+ }
306
+ withManifestLock(globalDir, () => {
307
+ const handled = new Set(todo.filter((e) => !kept.has(e.path)).map((e) => e.path));
308
+ const rest = manifest.entries.filter((e) => !handled.has(e.path));
309
+ const roots = [ctx.home, ...rest.map((e) => e.project).filter((p) => p !== undefined), opts.cwd];
310
+ const dirs = [...manifest.dirs].sort((a, b) => b.length - a.length);
311
+ const keepDirs = [];
312
+ for (const d of dirs) {
313
+ const safe = isAbsolute(d) && roots.some((r) => within(d, r) && resolve(d) !== resolve(r));
314
+ if (!safe || (opts.project && !within(d, opts.cwd))) {
315
+ keepDirs.push(d);
316
+ continue;
317
+ }
318
+ try {
319
+ if (existsSync(d) && !lstatSync(d).isSymbolicLink() && readdirSync(d).length === 0)
320
+ rmdirSync(d);
321
+ else if (existsSync(d))
322
+ keepDirs.push(d);
323
+ }
324
+ catch {
325
+ keepDirs.push(d);
326
+ }
327
+ }
328
+ if (rest.length === 0) {
329
+ rmSync(manifestPath(globalDir), { force: true });
330
+ try {
331
+ if (existsSync(ctx.undoDir) && readdirSync(ctx.undoDir).length === 0)
332
+ rmdirSync(ctx.undoDir);
333
+ }
334
+ catch {
335
+ /* not empty: leave it */
336
+ }
337
+ }
338
+ else {
339
+ writeManifest(globalDir, { version: 1, entries: rest, dirs: keepDirs });
340
+ }
341
+ });
342
+ // The lock file is gone by now; remove the global dir only when nothing else lives there.
343
+ try {
344
+ if (existsSync(globalDir) && readdirSync(globalDir).length === 0)
345
+ rmdirSync(globalDir);
346
+ }
347
+ catch {
348
+ /* the global dir holds other KYA data: leave it */
349
+ }
350
+ }
351
+ return { dryRun, restored, keysRemoved, deleted, leftAlone, nothingToUndo: todo.length === 0 };
352
+ }
353
+ export function formatUninstallHuman(r, cwd) {
354
+ if (r.nothingToUndo) {
355
+ return [
356
+ "Nothing to undo: ~/.kya/manifest.json lists no files for this scope.",
357
+ "Hooks and MCP entries written by an older kya (before the manifest) are not listed; remove the shield-kya entries by hand.",
358
+ ].join("\n");
359
+ }
360
+ const verb = r.dryRun ? "Would" : "Did";
361
+ const lines = [`KYA uninstall${r.dryRun ? " (dry run: nothing changed)" : ""}`];
362
+ const show = (head, list) => {
363
+ if (list.length === 0)
364
+ return;
365
+ lines.push(`${head}:`);
366
+ for (const l of list) {
367
+ const rel = relative(cwd, l.path);
368
+ lines.push(` ${rel.startsWith("..") || rel === "" ? l.path : rel}: ${l.what}`);
369
+ }
370
+ };
371
+ show(`${verb} restore`, r.restored);
372
+ show(`${verb} remove KYA's entries from`, r.keysRemoved);
373
+ show(`${verb} delete`, r.deleted);
374
+ show("Left alone", r.leftAlone);
375
+ lines.push("Not touched: .kya/ (your activity trail and report files) and ~/.kya/ state. Delete them by hand if you want them gone.", "The background report server keeps running until you run: kya stop");
376
+ return lines.join("\n");
377
+ }
378
+ //# sourceMappingURL=uninstall.js.map