@xrkseek/harness 0.2.7 → 0.3.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.
Files changed (89) hide show
  1. package/node_modules/@xrkseek/core-tools/dist/settings-tools.d.ts.map +1 -1
  2. package/node_modules/@xrkseek/core-tools/dist/settings-tools.js +10 -7
  3. package/node_modules/@xrkseek/core-tools/dist/settings-tools.js.map +1 -1
  4. package/node_modules/@xrkseek/preset-harness/dist/tsconfig.tsbuildinfo +1 -1
  5. package/node_modules/@xrkseek/preset-minimal/dist/tsconfig.tsbuildinfo +1 -1
  6. package/node_modules/@xrkseek/server-face/dist/adapt/index.d.ts +1 -0
  7. package/node_modules/@xrkseek/server-face/dist/adapt/index.d.ts.map +1 -1
  8. package/node_modules/@xrkseek/server-face/dist/adapt/index.js +1 -0
  9. package/node_modules/@xrkseek/server-face/dist/adapt/index.js.map +1 -1
  10. package/node_modules/@xrkseek/server-face/dist/adapt/model-route.d.ts +37 -0
  11. package/node_modules/@xrkseek/server-face/dist/adapt/model-route.d.ts.map +1 -0
  12. package/node_modules/@xrkseek/server-face/dist/adapt/model-route.js +40 -0
  13. package/node_modules/@xrkseek/server-face/dist/adapt/model-route.js.map +1 -0
  14. package/node_modules/@xrkseek/server-face/dist/adapt/wire-event.d.ts +6 -0
  15. package/node_modules/@xrkseek/server-face/dist/adapt/wire-event.d.ts.map +1 -1
  16. package/node_modules/@xrkseek/server-face/dist/adapt/wire-event.js +6 -2
  17. package/node_modules/@xrkseek/server-face/dist/adapt/wire-event.js.map +1 -1
  18. package/node_modules/@xrkseek/server-face/dist/context.d.ts +6 -0
  19. package/node_modules/@xrkseek/server-face/dist/context.d.ts.map +1 -1
  20. package/node_modules/@xrkseek/server-face/dist/cordis-bridge.d.ts +2 -0
  21. package/node_modules/@xrkseek/server-face/dist/cordis-bridge.d.ts.map +1 -1
  22. package/node_modules/@xrkseek/server-face/dist/cordis-bridge.js +2 -1
  23. package/node_modules/@xrkseek/server-face/dist/cordis-bridge.js.map +1 -1
  24. package/node_modules/@xrkseek/server-face/dist/cost-meter-record.d.ts.map +1 -1
  25. package/node_modules/@xrkseek/server-face/dist/cost-meter-record.js +3 -2
  26. package/node_modules/@xrkseek/server-face/dist/cost-meter-record.js.map +1 -1
  27. package/node_modules/@xrkseek/server-face/dist/handlers/remotes.d.ts.map +1 -1
  28. package/node_modules/@xrkseek/server-face/dist/handlers/remotes.js +12 -27
  29. package/node_modules/@xrkseek/server-face/dist/handlers/remotes.js.map +1 -1
  30. package/node_modules/@xrkseek/server-face/dist/handlers/session.d.ts.map +1 -1
  31. package/node_modules/@xrkseek/server-face/dist/handlers/session.js +18 -5
  32. package/node_modules/@xrkseek/server-face/dist/handlers/session.js.map +1 -1
  33. package/node_modules/@xrkseek/server-face/dist/index.d.ts +5 -2
  34. package/node_modules/@xrkseek/server-face/dist/index.d.ts.map +1 -1
  35. package/node_modules/@xrkseek/server-face/dist/index.js +5 -2
  36. package/node_modules/@xrkseek/server-face/dist/index.js.map +1 -1
  37. package/node_modules/@xrkseek/server-face/dist/plugin-boot.d.ts +22 -0
  38. package/node_modules/@xrkseek/server-face/dist/plugin-boot.d.ts.map +1 -0
  39. package/node_modules/@xrkseek/server-face/dist/plugin-boot.js +92 -0
  40. package/node_modules/@xrkseek/server-face/dist/plugin-boot.js.map +1 -0
  41. package/node_modules/@xrkseek/server-face/dist/plugin-disabled.d.ts +6 -0
  42. package/node_modules/@xrkseek/server-face/dist/plugin-disabled.d.ts.map +1 -0
  43. package/node_modules/@xrkseek/server-face/dist/plugin-disabled.js +6 -0
  44. package/node_modules/@xrkseek/server-face/dist/plugin-disabled.js.map +1 -0
  45. package/node_modules/@xrkseek/server-face/dist/plugin-inventory.d.ts +41 -10
  46. package/node_modules/@xrkseek/server-face/dist/plugin-inventory.d.ts.map +1 -1
  47. package/node_modules/@xrkseek/server-face/dist/plugin-inventory.js +126 -98
  48. package/node_modules/@xrkseek/server-face/dist/plugin-inventory.js.map +1 -1
  49. package/node_modules/@xrkseek/server-face/dist/projections/units/cost-usage.d.ts.map +1 -1
  50. package/node_modules/@xrkseek/server-face/dist/projections/units/cost-usage.js +3 -9
  51. package/node_modules/@xrkseek/server-face/dist/projections/units/cost-usage.js.map +1 -1
  52. package/node_modules/@xrkseek/server-face/dist/runtime.d.ts +5 -0
  53. package/node_modules/@xrkseek/server-face/dist/runtime.d.ts.map +1 -1
  54. package/node_modules/@xrkseek/server-face/dist/runtime.js +14 -8
  55. package/node_modules/@xrkseek/server-face/dist/runtime.js.map +1 -1
  56. package/node_modules/@xrkseek/server-face/dist/settings-credentials.d.ts.map +1 -1
  57. package/node_modules/@xrkseek/server-face/dist/settings-credentials.js +43 -2
  58. package/node_modules/@xrkseek/server-face/dist/settings-credentials.js.map +1 -1
  59. package/node_modules/@xrkseek/server-host/dist/index.d.ts.map +1 -1
  60. package/node_modules/@xrkseek/server-host/dist/index.js +39 -26
  61. package/node_modules/@xrkseek/server-host/dist/index.js.map +1 -1
  62. package/node_modules/@xrkseek/server-http/dist/dsh-compat/market.d.ts.map +1 -1
  63. package/node_modules/@xrkseek/server-http/dist/dsh-compat/market.js +3 -2
  64. package/node_modules/@xrkseek/server-http/dist/dsh-compat/market.js.map +1 -1
  65. package/node_modules/@xrkseek/server-http/dist/index.d.ts +2 -2
  66. package/node_modules/@xrkseek/server-http/dist/index.d.ts.map +1 -1
  67. package/node_modules/@xrkseek/server-http/dist/index.js +2 -2
  68. package/node_modules/@xrkseek/server-http/dist/index.js.map +1 -1
  69. package/node_modules/@xrkseek/server-http/dist/xrk/plugin-mutate.d.ts +33 -0
  70. package/node_modules/@xrkseek/server-http/dist/xrk/plugin-mutate.d.ts.map +1 -1
  71. package/node_modules/@xrkseek/server-http/dist/xrk/plugin-mutate.js +150 -38
  72. package/node_modules/@xrkseek/server-http/dist/xrk/plugin-mutate.js.map +1 -1
  73. package/node_modules/@xrkseek/server-http/dist/xrk/plugin-services.d.ts +2 -0
  74. package/node_modules/@xrkseek/server-http/dist/xrk/plugin-services.d.ts.map +1 -1
  75. package/node_modules/@xrkseek/server-http/dist/xrk/plugin-services.js +17 -33
  76. package/node_modules/@xrkseek/server-http/dist/xrk/plugin-services.js.map +1 -1
  77. package/node_modules/@xrkseek/server-loader/dist/atomic-write.d.ts +2 -0
  78. package/node_modules/@xrkseek/server-loader/dist/atomic-write.d.ts.map +1 -0
  79. package/node_modules/@xrkseek/server-loader/dist/atomic-write.js +14 -0
  80. package/node_modules/@xrkseek/server-loader/dist/atomic-write.js.map +1 -0
  81. package/node_modules/@xrkseek/server-loader/dist/index.d.ts +2 -0
  82. package/node_modules/@xrkseek/server-loader/dist/index.d.ts.map +1 -1
  83. package/node_modules/@xrkseek/server-loader/dist/index.js +2 -0
  84. package/node_modules/@xrkseek/server-loader/dist/index.js.map +1 -1
  85. package/node_modules/@xrkseek/server-loader/dist/managed-state.d.ts +86 -0
  86. package/node_modules/@xrkseek/server-loader/dist/managed-state.d.ts.map +1 -0
  87. package/node_modules/@xrkseek/server-loader/dist/managed-state.js +341 -0
  88. package/node_modules/@xrkseek/server-loader/dist/managed-state.js.map +1 -0
  89. package/package.json +1 -1
@@ -1,6 +1,9 @@
1
1
  /**
2
- * Run `xrk-harness plugin add|remove` from Host (DSH market compat).
2
+ * Run `xrkh` / `xrk-harness plugin add|remove` from Host (DSH market compat).
3
3
  * Spawns CLI to avoid circular deps (cli → server-host → server-http).
4
+ *
5
+ * Cross-platform: never `shell: true`. Windows `.cmd` shims go through
6
+ * `ComSpec /d /s /c` with quoted argv so spaces / Unicode paths stay intact.
4
7
  */
5
8
  import { execFile } from "node:child_process";
6
9
  import { existsSync } from "node:fs";
@@ -8,23 +11,116 @@ import path from "node:path";
8
11
  import { fileURLToPath } from "node:url";
9
12
  import { promisify } from "node:util";
10
13
  const execFileAsync = promisify(execFile);
11
- function resolveCliInvocation() {
12
- const bin = process.env.XRK_HARNESS_BIN?.trim();
14
+ function monorepoCliBin() {
15
+ const here = path.dirname(fileURLToPath(import.meta.url));
16
+ const binJs = path.resolve(here, "../../../../../apps/cli/dist/bin.js");
17
+ return existsSync(binJs) ? binJs : undefined;
18
+ }
19
+ function isNodeScriptPath(bin) {
20
+ return /\.(cjs|mjs|js)$/i.test(bin);
21
+ }
22
+ /**
23
+ * Quote one argv token for `cmd.exe /s /c` (spaces, quotes, metacharacters).
24
+ * @see https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd
25
+ */
26
+ export function quoteWindowsCmdArg(arg) {
27
+ if (arg.length === 0)
28
+ return '""';
29
+ if (!/[\s"&<>|^!()%]/.test(arg))
30
+ return arg;
31
+ return `"${arg.replace(/(\\*)"/g, '$1$1\\"').replace(/(\\+)$/g, "$1$1")}"`;
32
+ }
33
+ /**
34
+ * Resolve CLI invocation candidates (first usable wins at runtime).
35
+ * Order: `XRK_HARNESS_BIN` → monorepo `apps/cli/dist/bin.js` → `xrkh` → legacy `xrk-harness`.
36
+ */
37
+ export function listCliInvocationCandidates(env = process.env, platform = process.platform) {
38
+ const out = [];
39
+ const bin = env.XRK_HARNESS_BIN?.trim();
13
40
  if (bin) {
14
- if (bin.endsWith(".js") && existsSync(bin)) {
15
- return { command: process.execPath, prefixArgs: [bin] };
41
+ const resolved = path.resolve(bin);
42
+ if (isNodeScriptPath(resolved)) {
43
+ if (existsSync(resolved)) {
44
+ out.push({ command: process.execPath, prefixArgs: [resolved] });
45
+ }
46
+ }
47
+ else {
48
+ out.push({ command: resolved, prefixArgs: [] });
16
49
  }
17
- return { command: bin, prefixArgs: [] };
18
50
  }
19
- const here = path.dirname(fileURLToPath(import.meta.url));
20
- const binJs = path.resolve(here, "../../../../../apps/cli/dist/bin.js");
21
- if (existsSync(binJs)) {
22
- return { command: process.execPath, prefixArgs: [binJs] };
51
+ const mono = monorepoCliBin();
52
+ if (mono) {
53
+ out.push({ command: process.execPath, prefixArgs: [mono] });
23
54
  }
24
- // Global npm shims: prefer xrkh (primary), then legacy xrk-harness.
55
+ if (platform === "win32") {
56
+ out.push({ command: "xrkh.cmd", prefixArgs: [] });
57
+ out.push({ command: "xrk-harness.cmd", prefixArgs: [] });
58
+ }
59
+ else {
60
+ out.push({ command: "xrkh", prefixArgs: [] });
61
+ out.push({ command: "xrk-harness", prefixArgs: [] });
62
+ }
63
+ return out;
64
+ }
65
+ /**
66
+ * @deprecated Prefer {@link planCliInvocation}; kept for call sites that only
67
+ * need “will this go through cmd.exe?”. Always false for `shell` itself —
68
+ * we never set `shell: true`.
69
+ */
70
+ export function cliInvocationNeedsShell(invocation, platform = process.platform) {
71
+ void invocation;
72
+ void platform;
73
+ return false;
74
+ }
75
+ /**
76
+ * Build a shell-free execFile plan for any platform.
77
+ * - `node` + script / unix binary / non-.cmd exe → direct argv
78
+ * - Windows `.cmd` → `ComSpec /d /s /c` + one quoted command line
79
+ */
80
+ export function planCliInvocation(invocation, cliArgs, platform = process.platform, env = process.env) {
81
+ const directArgs = [...invocation.prefixArgs, ...cliArgs];
82
+ const viaCmdShim = platform === "win32" &&
83
+ invocation.prefixArgs.length === 0 &&
84
+ /\.cmd$/i.test(invocation.command);
85
+ if (!viaCmdShim) {
86
+ return { file: invocation.command, args: directArgs };
87
+ }
88
+ const comspec = env.ComSpec?.trim() || "cmd.exe";
89
+ const line = [invocation.command, ...cliArgs]
90
+ .map(quoteWindowsCmdArg)
91
+ .join(" ");
25
92
  return {
26
- command: process.platform === "win32" ? "xrkh.cmd" : "xrkh",
27
- prefixArgs: [],
93
+ file: comspec,
94
+ args: ["/d", "/s", "/c", line],
95
+ windowsVerbatimArguments: true,
96
+ };
97
+ }
98
+ function looksLikeMissingCommand(err) {
99
+ const code = err.code;
100
+ if (code === "ENOENT")
101
+ return true;
102
+ const text = `${err.message ?? ""}\n${err.stderr ?? ""}`.toLowerCase();
103
+ return (text.includes("enoent") ||
104
+ text.includes("not found") ||
105
+ text.includes("is not recognized") ||
106
+ text.includes("command not found"));
107
+ }
108
+ async function execPluginCli(invocation, args, options) {
109
+ const plan = planCliInvocation(invocation, args, process.platform, options.env);
110
+ const { stdout, stderr } = await execFileAsync(plan.file, [...plan.args], {
111
+ cwd: options.cwd,
112
+ env: options.env,
113
+ timeout: 180_000,
114
+ maxBuffer: 4 * 1024 * 1024,
115
+ encoding: "utf8",
116
+ shell: false,
117
+ ...(plan.windowsVerbatimArguments
118
+ ? { windowsVerbatimArguments: true }
119
+ : {}),
120
+ });
121
+ return {
122
+ stdout: String(stdout ?? ""),
123
+ stderr: String(stderr ?? ""),
28
124
  };
29
125
  }
30
126
  export async function runPluginMutate(options) {
@@ -32,32 +128,48 @@ export async function runPluginMutate(options) {
32
128
  if (!spec) {
33
129
  return { ok: false, stdout: "", stderr: "", error: "missing spec" };
34
130
  }
35
- const { command, prefixArgs } = resolveCliInvocation();
36
131
  const sub = options.action === "add" ? "add" : "remove";
37
- const args = [...prefixArgs, "plugin", sub, spec];
38
- const env = { ...process.env, XRK_PLUGINS_DIR: options.pluginsDir };
39
- try {
40
- const { stdout, stderr } = await execFileAsync(command, args, {
41
- cwd: options.cwd ?? process.cwd(),
42
- env,
43
- timeout: 180_000,
44
- maxBuffer: 4 * 1024 * 1024,
45
- shell: process.platform === "win32",
46
- });
47
- return {
48
- ok: true,
49
- stdout: String(stdout ?? ""),
50
- stderr: String(stderr ?? ""),
51
- };
52
- }
53
- catch (err) {
54
- const e = err;
55
- return {
56
- ok: false,
57
- stdout: String(e.stdout ?? ""),
58
- stderr: String(e.stderr ?? ""),
59
- error: e.message ?? String(err),
60
- };
132
+ const args = ["plugin", sub, spec];
133
+ const env = {
134
+ ...(options.env ?? process.env),
135
+ XRK_PLUGINS_DIR: path.resolve(options.pluginsDir),
136
+ };
137
+ const cwd = path.resolve(options.cwd ?? process.cwd());
138
+ const candidates = listCliInvocationCandidates(env);
139
+ let lastError = "no CLI candidate";
140
+ let lastStdout = "";
141
+ let lastStderr = "";
142
+ for (let i = 0; i < candidates.length; i++) {
143
+ const invocation = candidates[i];
144
+ try {
145
+ const { stdout, stderr } = await execPluginCli(invocation, args, {
146
+ cwd,
147
+ env,
148
+ });
149
+ return { ok: true, stdout, stderr };
150
+ }
151
+ catch (err) {
152
+ const e = err;
153
+ lastStdout = String(e.stdout ?? "");
154
+ lastStderr = String(e.stderr ?? "");
155
+ lastError = e.message ?? String(err);
156
+ // Only walk fallbacks when the binary itself is missing; real plugin
157
+ // failures (pack/not installed) must not silently retry another CLI.
158
+ if (!looksLikeMissingCommand(e) || i === candidates.length - 1) {
159
+ return {
160
+ ok: false,
161
+ stdout: lastStdout,
162
+ stderr: lastStderr,
163
+ error: lastError,
164
+ };
165
+ }
166
+ }
61
167
  }
168
+ return {
169
+ ok: false,
170
+ stdout: lastStdout,
171
+ stderr: lastStderr,
172
+ error: lastError,
173
+ };
62
174
  }
63
175
  //# sourceMappingURL=plugin-mutate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-mutate.js","sourceRoot":"","sources":["../../src/xrk/plugin-mutate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-mutate.js","sourceRoot":"","sources":["../../src/xrk/plugin-mutate.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,8 @@ export interface XrkPluginServicesOptions {
21
21
  readonly xrkHome?: string;
22
22
  }
23
23
  export declare function resolvePluginsDir(options?: XrkPluginServicesOptions): string;
24
+ /** Soft-disabled managed plugin ids (shared loader disk contract). */
25
+ export declare function readXrkDisabledPluginIds(options?: XrkPluginServicesOptions): readonly string[];
24
26
  /** Read CLI inventory `{pluginsDir}/.xrk-plugins.json`. */
25
27
  export declare function readXrkPluginInventory(options?: XrkPluginServicesOptions): XrkPluginInventory;
26
28
  /** Community catalog (awesome-dsh-plugin.com) — shared by `/xrk/plugins/catalog`. */
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-services.d.ts","sourceRoot":"","sources":["../../src/xrk/plugin-services.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAClD,kEAAkE;IAClE,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAC7B,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CACtE,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAOD,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,wBAA6B,GACrC,MAAM,CAOR;AAED,2DAA2D;AAC3D,wBAAgB,sBAAsB,CACpC,OAAO,GAAE,wBAA6B,GACrC,kBAAkB,CAqDpB;AAED,qFAAqF;AACrF,wBAAsB,qBAAqB,IAAI,OAAO,CAAC;IACrD,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B,CAAC,CAkBD;AAED,6EAA6E;AAC7E,eAAO,MAAM,uBAAuB,8QAoB1B,CAAC;AAEX,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC"}
1
+ {"version":3,"file":"plugin-services.d.ts","sourceRoot":"","sources":["../../src/xrk/plugin-services.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAClD,kEAAkE;IAClE,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAC7B,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CACtE,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAOD,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,wBAA6B,GACrC,MAAM,CAOR;AAED,sEAAsE;AACtE,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,wBAA6B,GACrC,SAAS,MAAM,EAAE,CAEnB;AAED,2DAA2D;AAC3D,wBAAgB,sBAAsB,CACpC,OAAO,GAAE,wBAA6B,GACrC,kBAAkB,CAqBpB;AAED,qFAAqF;AACrF,wBAAsB,qBAAqB,IAAI,OAAO,CAAC;IACrD,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B,CAAC,CAkBD;AAED,6EAA6E;AAC7E,eAAO,MAAM,uBAAuB,8QAoB1B,CAAC;AAEX,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC"}
@@ -2,9 +2,9 @@
2
2
  * XRK-native plugin inventory + community catalog (底层能力).
3
3
  * DSH market adapters map onto these shapes — do not put `/dsh-*` paths here.
4
4
  */
5
- import { existsSync, readFileSync } from "node:fs";
6
5
  import { homedir } from "node:os";
7
6
  import path from "node:path";
7
+ import { readDisabledPluginIdsAt, readManagedPluginPackagesAt, } from "@xrkseek/server-loader";
8
8
  const AWESOME_URL = "https://awesome-dsh-plugin.com/plugins.json";
9
9
  let cachedCatalog;
10
10
  let cachedCatalogAt = 0;
@@ -18,44 +18,28 @@ export function resolvePluginsDir(options = {}) {
18
18
  return path.join(path.resolve(home), "plugins");
19
19
  return path.join(homedir(), ".xrk", "plugins");
20
20
  }
21
+ /** Soft-disabled managed plugin ids (shared loader disk contract). */
22
+ export function readXrkDisabledPluginIds(options = {}) {
23
+ return [...readDisabledPluginIdsAt(resolvePluginsDir(options))].sort();
24
+ }
21
25
  /** Read CLI inventory `{pluginsDir}/.xrk-plugins.json`. */
22
26
  export function readXrkPluginInventory(options = {}) {
23
27
  const pluginsDir = resolvePluginsDir(options);
24
- const invPath = path.join(pluginsDir, ".xrk-plugins.json");
25
28
  const packages = [];
26
29
  const installedMap = {};
27
30
  const present = [];
28
- if (existsSync(invPath)) {
29
- try {
30
- const raw = JSON.parse(readFileSync(invPath, "utf8"));
31
- for (const [name, entry] of Object.entries(raw.packages ?? {})) {
32
- const version = typeof entry.version === "string" && entry.version.trim()
33
- ? entry.version.trim()
34
- : "0.0.0";
35
- const kind = typeof entry.kind === "string" && entry.kind.trim()
36
- ? entry.kind.trim()
37
- : "unknown";
38
- packages.push({
39
- name,
40
- version,
41
- kind,
42
- ...(typeof entry.source === "string"
43
- ? { source: entry.source }
44
- : {}),
45
- ...(typeof entry.installedAt === "string"
46
- ? { installedAt: entry.installedAt }
47
- : {}),
48
- });
49
- const row = {};
50
- row.version = version;
51
- row.kind = kind;
52
- installedMap[name] = row;
53
- present.push(name);
54
- }
55
- }
56
- catch {
57
- /* empty */
58
- }
31
+ for (const [name, entry] of readManagedPluginPackagesAt(pluginsDir)) {
32
+ const version = entry.version ?? "0.0.0";
33
+ const kind = entry.kind ?? "unknown";
34
+ packages.push({
35
+ name,
36
+ version,
37
+ kind,
38
+ ...(entry.source ? { source: entry.source } : {}),
39
+ ...(entry.installedAt ? { installedAt: entry.installedAt } : {}),
40
+ });
41
+ installedMap[name] = { version, kind };
42
+ present.push(name);
59
43
  }
60
44
  return { pluginsDir, packages, installedMap, present };
61
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-services.js","sourceRoot":"","sources":["../../src/xrk/plugin-services.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-services.js","sourceRoot":"","sources":["../../src/xrk/plugin-services.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function atomicWriteText(file: string, body: string): void;
2
+ //# sourceMappingURL=atomic-write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomic-write.d.ts","sourceRoot":"","sources":["../src/atomic-write.ts"],"names":[],"mappings":"AAOA,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAShE"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Atomic text replace for managed plugin state files.
3
+ * Readers never observe a torn write (temp + rename).
4
+ */
5
+ import { mkdirSync, renameSync, writeFileSync } from "node:fs";
6
+ import path from "node:path";
7
+ export function atomicWriteText(file, body) {
8
+ const dir = path.dirname(file);
9
+ mkdirSync(dir, { recursive: true });
10
+ const tmp = path.join(dir, `.${path.basename(file)}.${process.pid}.${Date.now()}.tmp`);
11
+ writeFileSync(tmp, body, "utf8");
12
+ renameSync(tmp, file);
13
+ }
14
+ //# sourceMappingURL=atomic-write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomic-write.js","sourceRoot":"","sources":["../src/atomic-write.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,IAAY;IACxD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CACnB,GAAG,EACH,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAC3D,CAAC;IACF,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACjC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACxB,CAAC"}
@@ -13,6 +13,8 @@ export { collectPolicyRules, applyPolicyPlugins, isPolicyPlugin, wireComposition
13
13
  export { collectChannelPlugins, collectChannelPluginRegistrations, isChannelPlugin, wireCompositionChannels, type AppliedPluginChannel, type PluginChannelRegistration, } from "./channel.js";
14
14
  export { applyLlmPlugins, collectLlmBrands, createProviderRegistryFromPlugins, isLlmPlugin, wireCompositionLlm, type AppliedPluginLlmBrand, type ApplyLlmPluginsResult, type SkippedPluginLlmBrand, } from "./llm.js";
15
15
  export { isHostPlugin, listHostPlugins } from "./host.js";
16
+ export { atomicWriteText } from "./atomic-write.js";
17
+ export { DISABLED_PLUGINS_FILE, MANAGED_PLUGINS_INVENTORY_FILE, canonicalizeDisabledPluginIdsAt, clearSoftDisabledIdsAt, disabledPluginsPath, isPluginSoftDisabledAt, lookupManagedPluginSourceAt, managedPluginsInventoryPath, readDisabledPluginIdsAt, readManagedPackageIndexAt, readManagedPluginPackagesAt, reconcileManagedProcessPlugins, setSoftDisabledAt, writeDisabledPluginIdsAt, type ManagedPackageIndex, type ManagedPluginPackageMeta, type SoftDisableReconcileLoader, } from "./managed-state.js";
16
18
  export interface PluginLoader {
17
19
  register(plugin: RegisteredPlugin): void;
18
20
  unregister(id: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,YAAY,EACV,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,EACvB,eAAe,EACf,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACjF,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,eAAe,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACpB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,GACvB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACtB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,wBAAwB,EACxB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,6BAA6B,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,iCAAiC,EACjC,eAAe,EACf,uBAAuB,EACvB,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,GAC/B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,iCAAiC,EACjC,WAAW,EACX,kBAAkB,EAClB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,GAC3B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE1D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACzC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,IAAI,SAAS,gBAAgB,EAAE,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAAC;IACxD,2EAA2E;IAC3E,IAAI,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACnD;;;OAGG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;CAClD;AAED,wBAAgB,kBAAkB,IAAI,YAAY,CAyCjD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,8 @@ export { collectPolicyRules, applyPolicyPlugins, isPolicyPlugin, wireComposition
11
11
  export { collectChannelPlugins, collectChannelPluginRegistrations, isChannelPlugin, wireCompositionChannels, } from "./channel.js";
12
12
  export { applyLlmPlugins, collectLlmBrands, createProviderRegistryFromPlugins, isLlmPlugin, wireCompositionLlm, } from "./llm.js";
13
13
  export { isHostPlugin, listHostPlugins } from "./host.js";
14
+ export { atomicWriteText } from "./atomic-write.js";
15
+ export { DISABLED_PLUGINS_FILE, MANAGED_PLUGINS_INVENTORY_FILE, canonicalizeDisabledPluginIdsAt, clearSoftDisabledIdsAt, disabledPluginsPath, isPluginSoftDisabledAt, lookupManagedPluginSourceAt, managedPluginsInventoryPath, readDisabledPluginIdsAt, readManagedPackageIndexAt, readManagedPluginPackagesAt, reconcileManagedProcessPlugins, setSoftDisabledAt, writeDisabledPluginIdsAt, } from "./managed-state.js";
14
16
  export function createPluginLoader() {
15
17
  const plugins = new Map();
16
18
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ import type { DiscoveryHit } from "./manifest.js";
2
+ export declare const DISABLED_PLUGINS_FILE = ".xrk-plugins-disabled.json";
3
+ export declare const MANAGED_PLUGINS_INVENTORY_FILE = ".xrk-plugins.json";
4
+ /** Map any inventory key / package name → durable soft-disable id. */
5
+ export interface ManagedPackageIndex {
6
+ /** Canonical package names recorded in inventory. */
7
+ readonly names: ReadonlySet<string>;
8
+ /** All known keys and names (for orphan pruning). */
9
+ readonly known: ReadonlySet<string>;
10
+ /** Resolve key or name to inventory package name; undefined if unknown. */
11
+ resolve(id: string): string | undefined;
12
+ }
13
+ /** One row from `.xrk-plugins.json` (keyed by durable package name). */
14
+ export interface ManagedPluginPackageMeta {
15
+ readonly name: string;
16
+ readonly version?: string;
17
+ readonly kind?: string;
18
+ readonly source?: string;
19
+ readonly installedAt?: string;
20
+ readonly clientInject?: readonly string[];
21
+ readonly clientImmediately?: boolean;
22
+ }
23
+ export declare function disabledPluginsPath(pluginsDir: string): string;
24
+ export declare function managedPluginsInventoryPath(pluginsDir: string): string;
25
+ /**
26
+ * Read CLI inventory packages keyed by durable package name
27
+ * (`entry.name` when set, else object key).
28
+ */
29
+ export declare function readManagedPluginPackagesAt(pluginsDir: string): Map<string, ManagedPluginPackageMeta>;
30
+ /**
31
+ * Resolve update/reinstall source for a managed package (entryId or aliases).
32
+ */
33
+ export declare function lookupManagedPluginSourceAt(pluginsDir: string, ...ids: readonly string[]): string | undefined;
34
+ /**
35
+ * Index `.xrk-plugins.json` so soft-disable keys can canonicalize across
36
+ * inventory key vs `entry.name` drift.
37
+ */
38
+ export declare function readManagedPackageIndexAt(pluginsDir: string): ManagedPackageIndex;
39
+ /** Soft-disabled managed plugin ids under a plugins directory. */
40
+ export declare function readDisabledPluginIdsAt(pluginsDir: string): Set<string>;
41
+ /** Persist soft-disable list (empty set removes the marker file). */
42
+ export declare function writeDisabledPluginIdsAt(pluginsDir: string, ids: ReadonlySet<string>): void;
43
+ /**
44
+ * Whether `id` is soft-disabled, resolving inventory aliases to the durable
45
+ * package name (and matching stale alias rows still on disk).
46
+ */
47
+ export declare function isPluginSoftDisabledAt(id: string, disabled: ReadonlySet<string>, index?: ManagedPackageIndex): boolean;
48
+ /**
49
+ * Collapse aliases → inventory package names and drop ids not in inventory.
50
+ * Returns whether the set changed.
51
+ */
52
+ export declare function canonicalizeDisabledPluginIdsAt(pluginsDir: string, disabled: Set<string>, index?: ManagedPackageIndex): boolean;
53
+ /**
54
+ * Clear soft-disable for one or more ids (and any aliases that resolve to the
55
+ * same inventory package). Returns true when the on-disk set changed.
56
+ */
57
+ export declare function clearSoftDisabledIdsAt(pluginsDir: string, ...rawIds: readonly string[]): boolean;
58
+ /**
59
+ * Soft-disable or re-enable a managed package using the durable inventory name.
60
+ * Always strips aliases so the disabled file stays canonical.
61
+ */
62
+ export declare function setSoftDisabledAt(pluginsDir: string, options: {
63
+ readonly enabled: boolean;
64
+ readonly entryId: string;
65
+ readonly aliases?: readonly string[];
66
+ }): void;
67
+ /** Discovery + load surface for live soft-disable / remove reconcile. */
68
+ export interface SoftDisableReconcileLoader {
69
+ list(): readonly {
70
+ readonly id: string;
71
+ }[];
72
+ unregister(id: string): Promise<void>;
73
+ discover(dir: string): Promise<readonly DiscoveryHit[]>;
74
+ load(hit: DiscoveryHit): Promise<unknown>;
75
+ }
76
+ /**
77
+ * Live reconcile process plugins with managed inventory + soft-disable:
78
+ * - unregister soft-disabled ids (never `mcp:*`)
79
+ * - unregister ids no longer discoverable under `pluginsDir` (CLI remove)
80
+ * - load discoverable ids that are enabled but missing from the loader
81
+ *
82
+ * Disk intent applies in-process for the process half; client half still
83
+ * needs a browser reload (`needsRestart`).
84
+ */
85
+ export declare function reconcileManagedProcessPlugins(loader: SoftDisableReconcileLoader, pluginsDir: string): Promise<readonly string[]>;
86
+ //# sourceMappingURL=managed-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed-state.d.ts","sourceRoot":"","sources":["../src/managed-state.ts"],"names":[],"mappings":"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"}