@xrkseek/harness-cli 0.0.5 → 0.0.6

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 (77) hide show
  1. package/README.md +3 -1
  2. package/dist/commands/plugin.d.ts +3 -0
  3. package/dist/commands/plugin.d.ts.map +1 -0
  4. package/dist/commands/plugin.js +100 -0
  5. package/dist/commands/plugin.js.map +1 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +3 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/parse-args.d.ts +3 -1
  10. package/dist/parse-args.d.ts.map +1 -1
  11. package/dist/parse-args.js +11 -0
  12. package/dist/parse-args.js.map +1 -1
  13. package/dist/plugin/classify.d.ts +18 -0
  14. package/dist/plugin/classify.d.ts.map +1 -0
  15. package/dist/plugin/classify.js +109 -0
  16. package/dist/plugin/classify.js.map +1 -0
  17. package/dist/plugin/fetch-pack.d.ts +16 -0
  18. package/dist/plugin/fetch-pack.d.ts.map +1 -0
  19. package/dist/plugin/fetch-pack.js +104 -0
  20. package/dist/plugin/fetch-pack.js.map +1 -0
  21. package/dist/plugin/index.d.ts +27 -0
  22. package/dist/plugin/index.d.ts.map +1 -0
  23. package/dist/plugin/index.js +109 -0
  24. package/dist/plugin/index.js.map +1 -0
  25. package/dist/plugin/install-client.d.ts +4 -0
  26. package/dist/plugin/install-client.d.ts.map +1 -0
  27. package/dist/plugin/install-client.js +34 -0
  28. package/dist/plugin/install-client.js.map +1 -0
  29. package/dist/plugin/install-process.d.ts +4 -0
  30. package/dist/plugin/install-process.d.ts.map +1 -0
  31. package/dist/plugin/install-process.js +46 -0
  32. package/dist/plugin/install-process.js.map +1 -0
  33. package/dist/plugin/inventory.d.ts +42 -0
  34. package/dist/plugin/inventory.d.ts.map +1 -0
  35. package/dist/plugin/inventory.js +105 -0
  36. package/dist/plugin/inventory.js.map +1 -0
  37. package/dist/plugin/remap-inject.d.ts +16 -0
  38. package/dist/plugin/remap-inject.d.ts.map +1 -0
  39. package/dist/plugin/remap-inject.js +52 -0
  40. package/dist/plugin/remap-inject.js.map +1 -0
  41. package/node_modules/@xrkseek/server-config/dist/home.d.ts +5 -0
  42. package/node_modules/@xrkseek/server-config/dist/home.d.ts.map +1 -1
  43. package/node_modules/@xrkseek/server-config/dist/home.js +7 -0
  44. package/node_modules/@xrkseek/server-config/dist/home.js.map +1 -1
  45. package/node_modules/@xrkseek/server-config/dist/index.d.ts +4 -2
  46. package/node_modules/@xrkseek/server-config/dist/index.d.ts.map +1 -1
  47. package/node_modules/@xrkseek/server-config/dist/index.js +10 -1
  48. package/node_modules/@xrkseek/server-config/dist/index.js.map +1 -1
  49. package/package.json +2 -2
  50. package/product-web/boot.json +1 -1
  51. package/product-web/plugins/@xrkseek/client-locale/client.js +4 -4
  52. package/product-web/plugins/@xrkseek/client-ui-agent-preset/client.js +38 -38
  53. package/product-web/plugins/@xrkseek/client-ui-commands/client.js +7 -7
  54. package/product-web/plugins/@xrkseek/client-ui-conversation/client.js +160 -160
  55. package/product-web/plugins/@xrkseek/client-ui-deliverables/client.js +4 -4
  56. package/product-web/plugins/@xrkseek/client-ui-directory-picker-browse/client.js +27 -27
  57. package/product-web/plugins/@xrkseek/client-ui-goal/client.js +5 -5
  58. package/product-web/plugins/@xrkseek/client-ui-input-trigger/client.js +6 -6
  59. package/product-web/plugins/@xrkseek/client-ui-jobs/client.js +8 -8
  60. package/product-web/plugins/@xrkseek/client-ui-layout/client.js +4 -4
  61. package/product-web/plugins/@xrkseek/client-ui-message-feedback/client.js +5 -5
  62. package/product-web/plugins/@xrkseek/client-ui-model-selection/client.js +17 -17
  63. package/product-web/plugins/@xrkseek/client-ui-permission-presets/client.js +3 -3
  64. package/product-web/plugins/@xrkseek/client-ui-plan/client.js +3 -3
  65. package/product-web/plugins/@xrkseek/client-ui-settings-general/client.js +11 -11
  66. package/product-web/plugins/@xrkseek/client-ui-settings-models/client.js +56 -56
  67. package/product-web/plugins/@xrkseek/client-ui-settings-plugin-inventory/client.js +13 -13
  68. package/product-web/plugins/@xrkseek/client-ui-settings-plugins/client.js +45 -45
  69. package/product-web/plugins/@xrkseek/client-ui-sidebar/client.js +16 -16
  70. package/product-web/plugins/@xrkseek/client-ui-skill/client.js +10 -10
  71. package/product-web/plugins/@xrkseek/client-ui-subagent/client.js +17 -17
  72. package/product-web/plugins/@xrkseek/client-ui-theme/client.js +3 -3
  73. package/product-web/plugins/@xrkseek/client-ui-tool/client.js +35 -35
  74. package/product-web/plugins/@xrkseek/client-ui-trajectory/client.js +140 -140
  75. package/product-web/plugins/@xrkseek/client-ui-user-questions/client.js +28 -28
  76. package/product-web/plugins/@xrkseek/client-ui-workflow-run/client.js +16 -16
  77. package/product-web/plugins/@xrkseek/client-ui-workspace/client.js +55 -55
@@ -0,0 +1,109 @@
1
+ /**
2
+ * High-level plugin install / remove / list for `xrk-harness plugin`.
3
+ */
4
+ import { mkdirSync } from "node:fs";
5
+ import { homedir } from "node:os";
6
+ import path from "node:path";
7
+ import { defaultPluginsDir } from "@xrkseek/server-config";
8
+ import { classifyPackage } from "./classify.js";
9
+ import { fetchPackage } from "./fetch-pack.js";
10
+ import { installClientBundle, removeClientBundle, } from "./install-client.js";
11
+ import { installProcessPlugin, removeProcessPlugin, } from "./install-process.js";
12
+ import { readInventory, reconcileBoot, removeInventoryEntry, upsertInventoryEntry, } from "./inventory.js";
13
+ import { remapInjectList } from "./remap-inject.js";
14
+ export { anchorPathSpec, fetchPackage } from "./fetch-pack.js";
15
+ export { classifyPackage } from "./classify.js";
16
+ export { remapInjectId, remapInjectList } from "./remap-inject.js";
17
+ export { readInventory, reconcileBoot, } from "./inventory.js";
18
+ const defaultIo = {
19
+ log: (line) => {
20
+ process.stdout.write(`${line}\n`);
21
+ },
22
+ warn: (line) => {
23
+ process.stderr.write(`${line}\n`);
24
+ },
25
+ };
26
+ function expandPath(p) {
27
+ if (p === "~")
28
+ return homedir();
29
+ if (p.startsWith("~/") || p.startsWith("~\\")) {
30
+ return path.resolve(homedir(), p.slice(2));
31
+ }
32
+ return path.resolve(p);
33
+ }
34
+ /** Resolve plugins root: `XRK_PLUGINS_DIR` or `{XRK_HOME}/plugins`. */
35
+ export function resolvePluginsDir(env = process.env) {
36
+ const override = env.XRK_PLUGINS_DIR?.trim();
37
+ if (override)
38
+ return expandPath(override);
39
+ return defaultPluginsDir(env);
40
+ }
41
+ export function addPlugin(spec, options = {}) {
42
+ const io = options.io ?? defaultIo;
43
+ const env = options.env ?? process.env;
44
+ const pluginsDir = options.pluginsDir ?? resolvePluginsDir(env);
45
+ const cwd = options.cwd ?? process.cwd();
46
+ mkdirSync(pluginsDir, { recursive: true });
47
+ const unpacked = fetchPackage(spec, cwd);
48
+ try {
49
+ const classified = classifyPackage(unpacked.root, unpacked.pkg);
50
+ const { inject, dropped } = remapInjectList(classified.clientInject);
51
+ for (const d of dropped) {
52
+ io.warn(`xrk-harness: warning: dropped unknown inject ${JSON.stringify(d)}`);
53
+ }
54
+ if (classified.kind === "client" || classified.kind === "both") {
55
+ installClientBundle(pluginsDir, classified);
56
+ }
57
+ if (classified.kind === "process" || classified.kind === "both") {
58
+ installProcessPlugin(pluginsDir, classified);
59
+ }
60
+ const entry = {
61
+ name: classified.name,
62
+ version: classified.version,
63
+ kind: classified.kind,
64
+ source: spec,
65
+ installedAt: new Date().toISOString(),
66
+ ...(classified.kind === "client" || classified.kind === "both"
67
+ ? {
68
+ clientInject: inject,
69
+ ...(classified.clientImmediately
70
+ ? { clientImmediately: true }
71
+ : {}),
72
+ }
73
+ : {}),
74
+ };
75
+ upsertInventoryEntry(pluginsDir, entry);
76
+ reconcileBoot(pluginsDir);
77
+ io.log(`xrk-harness: installed ${entry.name}@${entry.version} (${entry.kind}) → ${pluginsDir}`);
78
+ return entry;
79
+ }
80
+ finally {
81
+ unpacked.cleanup();
82
+ }
83
+ }
84
+ export function removePlugin(name, options = {}) {
85
+ const io = options.io ?? defaultIo;
86
+ const env = options.env ?? process.env;
87
+ const pluginsDir = options.pluginsDir ?? resolvePluginsDir(env);
88
+ const inv = readInventory(pluginsDir);
89
+ const entry = inv.packages[name];
90
+ if (!entry) {
91
+ throw new Error(`plugin not installed: ${name}`);
92
+ }
93
+ if (entry.kind === "client" || entry.kind === "both") {
94
+ removeClientBundle(pluginsDir, name);
95
+ }
96
+ if (entry.kind === "process" || entry.kind === "both") {
97
+ removeProcessPlugin(pluginsDir, name);
98
+ }
99
+ removeInventoryEntry(pluginsDir, name);
100
+ reconcileBoot(pluginsDir);
101
+ io.log(`xrk-harness: removed ${name}`);
102
+ }
103
+ export function listPlugins(options = {}) {
104
+ const env = options.env ?? process.env;
105
+ const pluginsDir = options.pluginsDir ?? resolvePluginsDir(env);
106
+ const inv = readInventory(pluginsDir);
107
+ return Object.values(inv.packages).sort((a, b) => a.name.localeCompare(b.name));
108
+ }
109
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ClassifiedPackage } from "./classify.js";
2
+ export declare function installClientBundle(pluginsDir: string, classified: ClassifiedPackage): void;
3
+ export declare function removeClientBundle(pluginsDir: string, name: string): void;
4
+ //# sourceMappingURL=install-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-client.d.ts","sourceRoot":"","sources":["../../src/plugin/install-client.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGvD,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,iBAAiB,GAC5B,IAAI,CAYN;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAYzE"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Stage a client plugin: copy client.js (+ optional LICENSE) under web/plugins.
3
+ */
4
+ import { copyFileSync, existsSync, mkdirSync, rmSync } from "node:fs";
5
+ import path from "node:path";
6
+ import { clientInstallDir } from "./inventory.js";
7
+ export function installClientBundle(pluginsDir, classified) {
8
+ if (!classified.clientJs) {
9
+ throw new Error(`${classified.name}: missing client.js`);
10
+ }
11
+ const destDir = clientInstallDir(pluginsDir, classified.name);
12
+ rmSync(destDir, { recursive: true, force: true });
13
+ mkdirSync(destDir, { recursive: true });
14
+ copyFileSync(classified.clientJs, path.join(destDir, "client.js"));
15
+ const license = path.join(classified.root, "LICENSE");
16
+ if (existsSync(license)) {
17
+ copyFileSync(license, path.join(destDir, "LICENSE"));
18
+ }
19
+ }
20
+ export function removeClientBundle(pluginsDir, name) {
21
+ const destDir = clientInstallDir(pluginsDir, name);
22
+ rmSync(destDir, { recursive: true, force: true });
23
+ // Prune empty @scope parent
24
+ if (name.startsWith("@")) {
25
+ const scopeDir = path.dirname(destDir);
26
+ try {
27
+ rmSync(scopeDir, { recursive: false });
28
+ }
29
+ catch {
30
+ /* not empty */
31
+ }
32
+ }
33
+ }
34
+ //# sourceMappingURL=install-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-client.js","sourceRoot":"","sources":["../../src/plugin/install-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,UAAU,mBAAmB,CACjC,UAAkB,EAClB,UAA6B;IAE7B,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,GAAG,UAAU,CAAC,IAAI,qBAAqB,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9D,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,YAAY,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACtD,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,UAAkB,EAAE,IAAY;IACjE,MAAM,OAAO,GAAG,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACnD,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,4BAA4B;IAC5B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ClassifiedPackage } from "./classify.js";
2
+ export declare function installProcessPlugin(pluginsDir: string, classified: ClassifiedPackage): void;
3
+ export declare function removeProcessPlugin(pluginsDir: string, name: string): void;
4
+ //# sourceMappingURL=install-process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-process.d.ts","sourceRoot":"","sources":["../../src/plugin/install-process.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAkBvD,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,iBAAiB,GAC5B,IAAI,CAQN;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAW1E"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Stage a process plugin into a discoverable directory under pluginsDir.
3
+ * Copies the unpacked package tree (skips nested node_modules).
4
+ */
5
+ import { cpSync, existsSync, mkdirSync, readdirSync, rmSync, statSync, } from "node:fs";
6
+ import path from "node:path";
7
+ import { processInstallDir } from "./inventory.js";
8
+ function copyTree(src, dest) {
9
+ mkdirSync(dest, { recursive: true });
10
+ for (const name of readdirSync(src)) {
11
+ if (name === "node_modules" || name === ".git")
12
+ continue;
13
+ const from = path.join(src, name);
14
+ const to = path.join(dest, name);
15
+ const st = statSync(from);
16
+ if (st.isDirectory()) {
17
+ copyTree(from, to);
18
+ }
19
+ else {
20
+ cpSync(from, to);
21
+ }
22
+ }
23
+ }
24
+ export function installProcessPlugin(pluginsDir, classified) {
25
+ const dest = processInstallDir(pluginsDir, classified.name);
26
+ rmSync(dest, { recursive: true, force: true });
27
+ mkdirSync(path.dirname(dest), { recursive: true });
28
+ copyTree(classified.root, dest);
29
+ if (!existsSync(path.join(dest, "package.json"))) {
30
+ throw new Error(`${classified.name}: process install missing package.json`);
31
+ }
32
+ }
33
+ export function removeProcessPlugin(pluginsDir, name) {
34
+ const dest = processInstallDir(pluginsDir, name);
35
+ rmSync(dest, { recursive: true, force: true });
36
+ if (name.startsWith("@")) {
37
+ const scopeDir = path.dirname(dest);
38
+ try {
39
+ rmSync(scopeDir, { recursive: false });
40
+ }
41
+ catch {
42
+ /* not empty */
43
+ }
44
+ }
45
+ }
46
+ //# sourceMappingURL=install-process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-process.js","sourceRoot":"","sources":["../../src/plugin/install-process.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,MAAM,EACN,UAAU,EACV,SAAS,EACT,WAAW,EACX,MAAM,EACN,QAAQ,GACT,MAAM,SAAS,CAAC;AACjB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,SAAS,QAAQ,CAAC,GAAW,EAAE,IAAY;IACzC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,MAAM;YAAE,SAAS;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAClC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACjC,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;YACrB,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,UAAkB,EAClB,UAA6B;IAE7B,MAAM,IAAI,GAAG,iBAAiB,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IAC5D,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,GAAG,UAAU,CAAC,IAAI,wCAAwC,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,UAAkB,EAAE,IAAY;IAClE,MAAM,IAAI,GAAG,iBAAiB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,42 @@
1
+ import type { PluginKind } from "./classify.js";
2
+ export declare const INVENTORY_FILE = ".xrk-plugins.json";
3
+ export interface InventoryEntry {
4
+ readonly name: string;
5
+ readonly version: string;
6
+ readonly kind: PluginKind;
7
+ /** Original add spec (registry / path / github). */
8
+ readonly source: string;
9
+ readonly installedAt: string;
10
+ /** Remapped client inject when kind includes client. */
11
+ readonly clientInject?: readonly string[];
12
+ readonly clientImmediately?: boolean;
13
+ }
14
+ export interface PluginInventory {
15
+ readonly rev: number;
16
+ readonly packages: Record<string, InventoryEntry>;
17
+ }
18
+ export interface WebBootEntry {
19
+ readonly id: string;
20
+ readonly url: string;
21
+ readonly rev: string;
22
+ readonly inject: readonly string[];
23
+ readonly immediately?: boolean;
24
+ }
25
+ export interface WebBootManifest {
26
+ readonly rev: string;
27
+ readonly entries: readonly WebBootEntry[];
28
+ }
29
+ export declare function inventoryPath(pluginsDir: string): string;
30
+ export declare function readInventory(pluginsDir: string): PluginInventory;
31
+ export declare function writeInventory(pluginsDir: string, inventory: PluginInventory): void;
32
+ export declare function upsertInventoryEntry(pluginsDir: string, entry: InventoryEntry): PluginInventory;
33
+ export declare function removeInventoryEntry(pluginsDir: string, name: string): PluginInventory;
34
+ /** Absolute install dir for a process plugin package name. */
35
+ export declare function processInstallDir(pluginsDir: string, name: string): string;
36
+ /** Absolute dir for staged client.js. */
37
+ export declare function clientInstallDir(pluginsDir: string, name: string): string;
38
+ /**
39
+ * Rewrite `web/boot.json` from inventory client entries only.
40
+ */
41
+ export declare function reconcileBoot(pluginsDir: string): WebBootManifest;
42
+ //# sourceMappingURL=inventory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inventory.d.ts","sourceRoot":"","sources":["../../src/plugin/inventory.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,eAAO,MAAM,cAAc,sBAAsB,CAAC;AAElD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,wDAAwD;IACxD,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;CAC3C;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,CAoBjE;AAED,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,eAAe,GACzB,IAAI,CAON;AAED,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,cAAc,GACpB,eAAe,CAQjB;AAED,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,eAAe,CAUjB;AAED,8DAA8D;AAC9D,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAS1E;AAED,yCAAyC;AACzC,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,CA2BjE"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Inventory of CLI-installed plugins under `{pluginsDir}/.xrk-plugins.json`.
3
+ * `reconcileBoot` regenerates `{pluginsDir}/web/boot.json` from this list.
4
+ */
5
+ import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync, } from "node:fs";
6
+ import path from "node:path";
7
+ export const INVENTORY_FILE = ".xrk-plugins.json";
8
+ export function inventoryPath(pluginsDir) {
9
+ return path.join(pluginsDir, INVENTORY_FILE);
10
+ }
11
+ export function readInventory(pluginsDir) {
12
+ const file = inventoryPath(pluginsDir);
13
+ if (!existsSync(file)) {
14
+ return { rev: 1, packages: {} };
15
+ }
16
+ try {
17
+ const raw = JSON.parse(readFileSync(file, "utf8"));
18
+ if (!raw || typeof raw !== "object")
19
+ return { rev: 1, packages: {} };
20
+ const o = raw;
21
+ const packages = o.packages && typeof o.packages === "object" && !Array.isArray(o.packages)
22
+ ? o.packages
23
+ : {};
24
+ return {
25
+ rev: typeof o.rev === "number" ? o.rev : 1,
26
+ packages,
27
+ };
28
+ }
29
+ catch {
30
+ return { rev: 1, packages: {} };
31
+ }
32
+ }
33
+ export function writeInventory(pluginsDir, inventory) {
34
+ mkdirSync(pluginsDir, { recursive: true });
35
+ writeFileSync(inventoryPath(pluginsDir), `${JSON.stringify(inventory, null, 2)}\n`, "utf8");
36
+ }
37
+ export function upsertInventoryEntry(pluginsDir, entry) {
38
+ const inv = readInventory(pluginsDir);
39
+ const next = {
40
+ rev: inv.rev,
41
+ packages: { ...inv.packages, [entry.name]: entry },
42
+ };
43
+ writeInventory(pluginsDir, next);
44
+ return next;
45
+ }
46
+ export function removeInventoryEntry(pluginsDir, name) {
47
+ const inv = readInventory(pluginsDir);
48
+ if (!(name in inv.packages)) {
49
+ throw new Error(`plugin not installed: ${name}`);
50
+ }
51
+ const packages = { ...inv.packages };
52
+ delete packages[name];
53
+ const next = { rev: inv.rev, packages };
54
+ writeInventory(pluginsDir, next);
55
+ return next;
56
+ }
57
+ /** Absolute install dir for a process plugin package name. */
58
+ export function processInstallDir(pluginsDir, name) {
59
+ if (name.startsWith("@")) {
60
+ const [scope, pkg] = name.split("/");
61
+ if (!scope || !pkg) {
62
+ throw new Error(`invalid scoped package name: ${name}`);
63
+ }
64
+ return path.join(pluginsDir, scope, pkg);
65
+ }
66
+ return path.join(pluginsDir, name);
67
+ }
68
+ /** Absolute dir for staged client.js. */
69
+ export function clientInstallDir(pluginsDir, name) {
70
+ return path.join(pluginsDir, "web", "plugins", ...name.split("/"));
71
+ }
72
+ /**
73
+ * Rewrite `web/boot.json` from inventory client entries only.
74
+ */
75
+ export function reconcileBoot(pluginsDir) {
76
+ const inv = readInventory(pluginsDir);
77
+ const entries = [];
78
+ for (const entry of Object.values(inv.packages)) {
79
+ if (entry.kind !== "client" && entry.kind !== "both")
80
+ continue;
81
+ entries.push({
82
+ id: entry.name,
83
+ url: `/plugins/${entry.name}/client.js`,
84
+ rev: entry.version,
85
+ inject: entry.clientInject ?? [],
86
+ ...(entry.clientImmediately ? { immediately: true } : {}),
87
+ });
88
+ }
89
+ entries.sort((a, b) => a.id.localeCompare(b.id));
90
+ const manifest = {
91
+ rev: `xrk-plugins-${Date.now()}`,
92
+ entries,
93
+ };
94
+ const webDir = path.join(pluginsDir, "web");
95
+ mkdirSync(webDir, { recursive: true });
96
+ const bootPath = path.join(webDir, "boot.json");
97
+ if (entries.length === 0) {
98
+ if (existsSync(bootPath))
99
+ rmSync(bootPath, { force: true });
100
+ return manifest;
101
+ }
102
+ writeFileSync(bootPath, `${JSON.stringify(manifest, null, 2)}\n`, "utf8");
103
+ return manifest;
104
+ }
105
+ //# sourceMappingURL=inventory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inventory.js","sourceRoot":"","sources":["../../src/plugin/inventory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Remap DSH client boot inject ids onto XRK product-shell packages.
3
+ * Unknown `@deepseek-ai/*` entries are dropped (with optional warn) so boot
4
+ * does not stall on missing ModuleLoader rows.
5
+ */
6
+ export interface RemapInjectResult {
7
+ readonly inject: readonly string[];
8
+ readonly dropped: readonly string[];
9
+ }
10
+ /**
11
+ * Map one inject id. Returns `undefined` when the id should be dropped.
12
+ */
13
+ export declare function remapInjectId(id: string): string | undefined;
14
+ /** Remap a full inject list; preserve order, dedupe. */
15
+ export declare function remapInjectList(inject: readonly string[] | undefined): RemapInjectResult;
16
+ //# sourceMappingURL=remap-inject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remap-inject.d.ts","sourceRoot":"","sources":["../../src/plugin/remap-inject.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAaD;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAa5D;AAED,wDAAwD;AACxD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GACpC,iBAAiB,CAenB"}
@@ -0,0 +1,52 @@
1
+ const EXACT = {
2
+ "@deepseek-ai/dsh-client-runtime": "@xrkseek/client-runtime",
3
+ "@deepseek-ai/dsh-client-locale": "@xrkseek/client-locale",
4
+ "@deepseek-ai/dsh-client-ui-slots": "@xrkseek/client-ui-slots",
5
+ "@deepseek-ai/dsh-client-ui-primitives": "@xrkseek/client-ui-primitives",
6
+ "@deepseek-ai/dsh-client-ui-conversation": "@xrkseek/client-ui-conversation",
7
+ "@deepseek-ai/dsh-client-ui-attachment": "@xrkseek/client-ui-attachment",
8
+ "@deepseek-ai/dsh-client-web-react": "@xrkseek/client-web-react",
9
+ "@deepseek-ai/dsh-client-schema-form": "@xrkseek/client-schema-form",
10
+ };
11
+ /**
12
+ * Map one inject id. Returns `undefined` when the id should be dropped.
13
+ */
14
+ export function remapInjectId(id) {
15
+ const trimmed = id.trim();
16
+ if (!trimmed)
17
+ return undefined;
18
+ if (trimmed.startsWith("@xrkseek/"))
19
+ return trimmed;
20
+ const exact = EXACT[trimmed];
21
+ if (exact)
22
+ return exact;
23
+ // @deepseek-ai/dsh-client-ui-foo → @xrkseek/client-ui-foo
24
+ const ui = /^@deepseek-ai\/dsh-client-(ui-.+)$/.exec(trimmed);
25
+ if (ui?.[1])
26
+ return `@xrkseek/client-${ui[1]}`;
27
+ const client = /^@deepseek-ai\/dsh-client-(.+)$/.exec(trimmed);
28
+ if (client?.[1])
29
+ return `@xrkseek/client-${client[1]}`;
30
+ if (trimmed.startsWith("@deepseek-ai/"))
31
+ return undefined;
32
+ return trimmed;
33
+ }
34
+ /** Remap a full inject list; preserve order, dedupe. */
35
+ export function remapInjectList(inject) {
36
+ const out = [];
37
+ const dropped = [];
38
+ const seen = new Set();
39
+ for (const raw of inject ?? []) {
40
+ const mapped = remapInjectId(raw);
41
+ if (mapped === undefined) {
42
+ dropped.push(raw);
43
+ continue;
44
+ }
45
+ if (seen.has(mapped))
46
+ continue;
47
+ seen.add(mapped);
48
+ out.push(mapped);
49
+ }
50
+ return { inject: out, dropped };
51
+ }
52
+ //# sourceMappingURL=remap-inject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remap-inject.js","sourceRoot":"","sources":["../../src/plugin/remap-inject.ts"],"names":[],"mappings":"AAUA,MAAM,KAAK,GAAqC;IAC9C,iCAAiC,EAAE,yBAAyB;IAC5D,gCAAgC,EAAE,wBAAwB;IAC1D,kCAAkC,EAAE,0BAA0B;IAC9D,uCAAuC,EAAE,+BAA+B;IACxE,yCAAyC,EAAE,iCAAiC;IAC5E,uCAAuC,EAAE,+BAA+B;IACxE,mCAAmC,EAAE,2BAA2B;IAChE,qCAAqC,EAAE,6BAA6B;CACrE,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;IAC1B,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,IAAI,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,OAAO,CAAC;IACpD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,0DAA0D;IAC1D,MAAM,EAAE,GAAG,oCAAoC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9D,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,MAAM,MAAM,GAAG,iCAAiC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/D,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC;QAAE,OAAO,mBAAmB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,IAAI,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1D,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,eAAe,CAC7B,MAAqC;IAErC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,GAAG,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,SAAS;QAC/B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AAClC,CAAC"}
@@ -10,4 +10,9 @@ export declare function resolveXrkHome(env?: NodeJS.ProcessEnv): string;
10
10
  export declare function defaultSessionsDir(env?: NodeJS.ProcessEnv): string;
11
11
  /** `{home}/host-settings.json` — Face MCP desired-servers dump. */
12
12
  export declare function hostSettingsPath(env?: NodeJS.ProcessEnv): string;
13
+ /**
14
+ * `{home}/plugins` — CLI `plugin add` root + optional Host `pluginsDir`.
15
+ * Process discover + `{plugins}/web/` client overlay live here.
16
+ */
17
+ export declare function defaultPluginsDir(env?: NodeJS.ProcessEnv): string;
13
18
  //# sourceMappingURL=home.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"home.d.ts","sourceRoot":"","sources":["../src/home.ts"],"names":[],"mappings":"AASA,wCAAwC;AACxC,eAAO,MAAM,iBAAiB,SAAS,CAAC;AAExC,sEAAsE;AACtE,eAAO,MAAM,aAAa,mDAAoD,CAAC;AAE/E,wBAAwB;AACxB,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAUD,2EAA2E;AAC3E,wBAAgB,cAAc,CAC5B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAMR;AAED,gFAAgF;AAChF,wBAAgB,kBAAkB,CAChC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAER;AAED,mEAAmE;AACnE,wBAAgB,gBAAgB,CAC9B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAER"}
1
+ {"version":3,"file":"home.d.ts","sourceRoot":"","sources":["../src/home.ts"],"names":[],"mappings":"AASA,wCAAwC;AACxC,eAAO,MAAM,iBAAiB,SAAS,CAAC;AAExC,sEAAsE;AACtE,eAAO,MAAM,aAAa,mDAAoD,CAAC;AAE/E,wBAAwB;AACxB,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAUD,2EAA2E;AAC3E,wBAAgB,cAAc,CAC5B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAMR;AAED,gFAAgF;AAChF,wBAAgB,kBAAkB,CAChC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAER;AAED,mEAAmE;AACnE,wBAAgB,gBAAgB,CAC9B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAER;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAER"}
@@ -39,4 +39,11 @@ export function defaultSessionsDir(env = process.env) {
39
39
  export function hostSettingsPath(env = process.env) {
40
40
  return path.join(resolveXrkHome(env), "host-settings.json");
41
41
  }
42
+ /**
43
+ * `{home}/plugins` — CLI `plugin add` root + optional Host `pluginsDir`.
44
+ * Process discover + `{plugins}/web/` client overlay live here.
45
+ */
46
+ export function defaultPluginsDir(env = process.env) {
47
+ return path.join(resolveXrkHome(env), "plugins");
48
+ }
42
49
  //# sourceMappingURL=home.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"home.js","sourceRoot":"","sources":["../src/home.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,wCAAwC;AACxC,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAExC,sEAAsE;AACtE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,cAAc,EAAE,UAAU,CAAU,CAAC;AAE/E,wBAAwB;AACxB,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,iBAAiB,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,OAAO,EAAE,CAAC;IACpC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,cAAc,CAC5B,MAAyB,OAAO,CAAC,GAAG;IAEpC,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;QAC7B,IAAI,GAAG;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,kBAAkB,CAChC,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;AACpD,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,gBAAgB,CAC9B,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,oBAAoB,CAAC,CAAC;AAC9D,CAAC"}
1
+ {"version":3,"file":"home.js","sourceRoot":"","sources":["../src/home.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,wCAAwC;AACxC,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAExC,sEAAsE;AACtE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,cAAc,EAAE,UAAU,CAAU,CAAC;AAE/E,wBAAwB;AACxB,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,iBAAiB,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,OAAO,EAAE,CAAC;IACpC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,cAAc,CAC5B,MAAyB,OAAO,CAAC,GAAG;IAEpC,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;QAC7B,IAAI,GAAG;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,kBAAkB,CAChC,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;AACpD,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,gBAAgB,CAC9B,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,oBAAoB,CAAC,CAAC;AAC9D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;AACnD,CAAC"}
@@ -3,7 +3,7 @@ import type { SessionEvent } from "@xrkseek/protocol";
3
3
  import { type McpServerRow } from "./mcp-servers.js";
4
4
  export type { SessionStore, SessionEvent };
5
5
  export type { McpServerRow };
6
- export { XRK_HOME_DIR_NAME, XRK_HOME_ENVS, defaultSessionsDir, defaultXrkHome, hostSettingsPath, resolveXrkHome, } from "./home.js";
6
+ export { XRK_HOME_DIR_NAME, XRK_HOME_ENVS, defaultPluginsDir, defaultSessionsDir, defaultXrkHome, hostSettingsPath, resolveXrkHome, } from "./home.js";
7
7
  export { mcpServersContainEnv, mcpServersObjectMap, parseMcpServersJson, parseMcpServersValue, } from "./mcp-servers.js";
8
8
  export interface HostCredentials {
9
9
  /** API key for /api/* ; empty disables auth (dev only). */
@@ -18,7 +18,9 @@ export interface HostRuntimeConfig {
18
18
  readonly rateLimitPerMinute: number;
19
19
  /**
20
20
  * Optional plugin root for `loader.loadAll` on host spawn.
21
- * Env: `XRK_PLUGINS_DIR`. Empty / omit = skip discover.
21
+ * Env: `XRK_PLUGINS_DIR`. When unset, `{XRK_HOME}/plugins` if that
22
+ * directory already exists (created by `xrk-harness plugin add`).
23
+ * Empty / omit = skip discover.
22
24
  */
23
25
  readonly pluginsDir?: string;
24
26
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE1E,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;AAC3C,YAAY,EAAE,YAAY,EAAE,CAAC;AAC7B,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,cAAc,GACf,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,eAAe;IAC9B,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,GAAG,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAC9C,2FAA2F;IAC3F,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAChD;AAQD,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,KAAK,GAAE,eAAoB,GAAG,UAAU,CAsGtE;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,aAAa,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACnC,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,YAAY,EAAE,CAAC;CACvD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE1E,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;AAC3C,YAAY,EAAE,YAAY,EAAE,CAAC;AAC7B,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,cAAc,GACf,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,eAAe;IAC9B,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,GAAG,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAC9C,2FAA2F;IAC3F,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAChD;AAQD,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,KAAK,GAAE,eAAoB,GAAG,UAAU,CA6GtE;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,aAAa,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACnC,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,YAAY,EAAE,CAAC;CACvD"}
@@ -1,5 +1,7 @@
1
+ import { existsSync } from "node:fs";
2
+ import { defaultPluginsDir } from "./home.js";
1
3
  import { parseMcpServersJson } from "./mcp-servers.js";
2
- export { XRK_HOME_DIR_NAME, XRK_HOME_ENVS, defaultSessionsDir, defaultXrkHome, hostSettingsPath, resolveXrkHome, } from "./home.js";
4
+ export { XRK_HOME_DIR_NAME, XRK_HOME_ENVS, defaultPluginsDir, defaultSessionsDir, defaultXrkHome, hostSettingsPath, resolveXrkHome, } from "./home.js";
3
5
  export { mcpServersContainEnv, mcpServersObjectMap, parseMcpServersJson, parseMcpServersValue, } from "./mcp-servers.js";
4
6
  function num(v, fallback) {
5
7
  if (v === undefined || v === "")
@@ -31,6 +33,13 @@ export function loadHostConfig(input = {}) {
31
33
  ...(defaults.pluginsDir
32
34
  ? { pluginsDir: defaults.pluginsDir }
33
35
  : {}),
36
+ ...(!defaults.pluginsDir &&
37
+ !(env.XRK_PLUGINS_DIR && String(env.XRK_PLUGINS_DIR).trim())
38
+ ? (() => {
39
+ const homePlugins = defaultPluginsDir(env);
40
+ return existsSync(homePlugins) ? { pluginsDir: homePlugins } : {};
41
+ })()
42
+ : {}),
34
43
  ...(env.XRK_PLUGINS_DIR && String(env.XRK_PLUGINS_DIR).trim()
35
44
  ? { pluginsDir: String(env.XRK_PLUGINS_DIR).trim() }
36
45
  : {}),
@@ -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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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@xrkseek/harness-cli",
3
- "version": "0.0.5",
4
- "description": "XRK-Harness CLI (run / serve / web). Product shell ships in product-web/.",
3
+ "version": "0.0.6",
4
+ "description": "XRK-Harness CLI (run / serve / web / plugin). Product shell ships in product-web/.",
5
5
  "type": "module",
6
6
  "exports": {
7
7
  ".": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "rev": "xrk-web-1787231267944",
2
+ "rev": "xrk-web-1787281577566",
3
3
  "entries": [
4
4
  {
5
5
  "id": "@xrkseek/client-connection",
@@ -884,11 +884,11 @@ window.__ModuleLoader__.load({
884
884
  document.head.appendChild(tag);
885
885
  }
886
886
  var LanguageRow_module_css_default = {
887
- "selector": "jLfXEq_selector",
888
- "rowText": "jLfXEq_rowText",
889
887
  "row": "jLfXEq_row",
890
- "chevron": "jLfXEq_chevron",
891
- "title": "jLfXEq_title"
888
+ "title": "jLfXEq_title",
889
+ "rowText": "jLfXEq_rowText",
890
+ "selector": "jLfXEq_selector",
891
+ "chevron": "jLfXEq_chevron"
892
892
  };
893
893
  //#endregion
894
894
  //#region src/client/LanguageRow.tsx