@kwonye/mcpx 0.1.104 → 0.1.106

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 (79) hide show
  1. package/dist/adapters/codex.d.ts +2 -0
  2. package/dist/adapters/index.d.ts +2 -1
  3. package/dist/adapters/json.d.ts +26 -0
  4. package/dist/adapters/pi.d.ts +9 -0
  5. package/dist/chunk-0xt563m1.js +126 -0
  6. package/dist/{chunk-s9v1epnk.js → chunk-1mrkz29t.js} +71 -56
  7. package/dist/{chunk-31brdz5s.js → chunk-1v66g9d6.js} +4 -3
  8. package/dist/chunk-1yq3yb66.js +126 -0
  9. package/dist/chunk-27mq4agf.js +33 -0
  10. package/dist/{chunk-941dqsx2.js → chunk-4aafp444.js} +8175 -8066
  11. package/dist/chunk-4xym942z.js +36 -0
  12. package/dist/{chunk-tnhekcpv.js → chunk-56z18csx.js} +1 -1
  13. package/dist/{chunk-bnbz55g6.js → chunk-65kshh9w.js} +1 -1
  14. package/dist/{chunk-xydajvzg.js → chunk-7ky3rsw9.js} +1 -1
  15. package/dist/chunk-7rq88hb3.js +563 -0
  16. package/dist/chunk-8v13hqrp.js +825 -0
  17. package/dist/chunk-a2gen8bn.js +730 -0
  18. package/dist/{chunk-wq4zd3t7.js → chunk-brxwa30j.js} +130 -111
  19. package/dist/chunk-chaj8a8b.js +45 -0
  20. package/dist/chunk-e96643mj.js +26 -0
  21. package/dist/{chunk-02r7k4ax.js → chunk-ew06e41w.js} +12 -6
  22. package/dist/chunk-ezk8txcy.js +23 -0
  23. package/dist/{chunk-cqenqnxk.js → chunk-grkz21sq.js} +35 -3
  24. package/dist/{chunk-12vgqm89.js → chunk-gvjxpk98.js} +1 -1
  25. package/dist/chunk-h9kp47rp.js +18 -0
  26. package/dist/chunk-hahs24dv.js +127 -0
  27. package/dist/{chunk-z34m83m4.js → chunk-jv0s0cp6.js} +5 -3
  28. package/dist/{chunk-enzmq965.js → chunk-n0462d52.js} +1 -1
  29. package/dist/chunk-nh6hhv29.js +138 -0
  30. package/dist/chunk-p7yzyt87.js +19426 -0
  31. package/dist/chunk-q86c5s6r.js +7 -0
  32. package/dist/chunk-qf8bj9y7.js +254 -0
  33. package/dist/chunk-t20f49g3.js +30 -0
  34. package/dist/{chunk-b58zsdp4.js → chunk-v041118a.js} +17 -5
  35. package/dist/{chunk-91vcwk5m.js → chunk-v14bg5yp.js} +1 -1
  36. package/dist/chunk-wvzap0na.js +18166 -0
  37. package/dist/chunk-wztmp5b4.js +30479 -0
  38. package/dist/chunk-xvqr1q9b.js +14 -0
  39. package/dist/{chunk-0xhdyt4z.js → chunk-yj7mpczw.js} +17 -5
  40. package/dist/chunk-yr0txkw0.js +31 -0
  41. package/dist/cli.js +3977 -1045
  42. package/dist/core/adoption.d.ts +62 -0
  43. package/dist/core/analytics.d.ts +17 -0
  44. package/dist/core/consumers.d.ts +8 -0
  45. package/dist/core/control.d.ts +12 -0
  46. package/dist/core/daemon.d.ts +2 -2
  47. package/dist/core/file-state.d.ts +5 -0
  48. package/dist/core/harnesses.d.ts +25 -0
  49. package/dist/core/index.d.ts +17 -7
  50. package/dist/core/index.js +128 -62
  51. package/dist/core/managed-index-lock.d.ts +1 -1
  52. package/dist/core/management.d.ts +32 -0
  53. package/dist/core/native-document.d.ts +4 -0
  54. package/dist/core/operations.d.ts +52 -0
  55. package/dist/core/paths.d.ts +2 -0
  56. package/dist/core/plugin-manager.d.ts +4 -1
  57. package/dist/core/plugin-projections.d.ts +1 -0
  58. package/dist/core/runtime-entry.d.ts +6 -0
  59. package/dist/core/runtime-snapshot.d.ts +6 -0
  60. package/dist/core/secret-keychain.d.ts +31 -0
  61. package/dist/core/secrets.d.ts +12 -2
  62. package/dist/core/served-skills.d.ts +62 -0
  63. package/dist/core/share.d.ts +71 -0
  64. package/dist/core/skills.d.ts +7 -0
  65. package/dist/core/status.d.ts +1 -0
  66. package/dist/core/sync-plan.d.ts +14 -0
  67. package/dist/core/sync.d.ts +3 -0
  68. package/dist/core/telemetry.d.ts +2 -2
  69. package/dist/core/tui.d.ts +20 -0
  70. package/dist/core/verify-upstreams.d.ts +4 -0
  71. package/dist/core/work-limiter.d.ts +10 -0
  72. package/dist/gateway/server.d.ts +2 -0
  73. package/dist/types.d.ts +72 -1
  74. package/dist/util/fs.d.ts +2 -0
  75. package/dist/version.d.ts +1 -1
  76. package/package.json +1 -1
  77. package/dist/adapters/opencode.d.ts +0 -11
  78. package/dist/chunk-cz8cdmw1.js +0 -344
  79. package/dist/chunk-z1k63fa3.js +0 -3760
@@ -6,4 +6,5 @@ export declare function pruneAllPluginProjections(targetDir: string): void;
6
6
  */
7
7
  export declare function pruneUnlistedPlugins(targetDir: string, keepPluginIds: string[]): void;
8
8
  export declare function syncPluginsToClient(clientId: string, plugins: PluginSyncInput[]): PluginSyncResult;
9
+ export declare function syncProjectPluginSkills(clientId: string, skillsBase: string, plugins: PluginSyncInput[]): PluginSyncResult;
9
10
  //# sourceMappingURL=plugin-projections.d.ts.map
@@ -0,0 +1,6 @@
1
+ export declare function localCliCommand(args: string[]): {
2
+ command: string;
3
+ args: string[];
4
+ env?: Record<string, string>;
5
+ };
6
+ //# sourceMappingURL=runtime-entry.d.ts.map
@@ -0,0 +1,6 @@
1
+ import type { McpxConfig } from "../types.js";
2
+ /** A gateway request sees one committed configuration revision throughout its work. */
3
+ export declare function compileRuntimeSnapshot(): void;
4
+ export declare function clearRuntimeSnapshot(): void;
5
+ export declare function runtimeConfig(): McpxConfig;
6
+ //# sourceMappingURL=runtime-snapshot.d.ts.map
@@ -0,0 +1,31 @@
1
+ /** Login-keychain item that holds the whole mcpx secret map for this user. */
2
+ export declare const KEYCHAIN_SERVICE = "com.kwonye.mcpx";
3
+ export declare const KEYCHAIN_ACCOUNT = "secrets";
4
+ export declare const KEYCHAIN_LABEL = "mcpx secrets";
5
+ /**
6
+ * `security -i` reads each command with readline() into a 4096-byte buffer
7
+ * (SecurityTool `MAX_LINE_LEN`) and keeps at most 4095 bytes. A line of exactly
8
+ * 4095 bytes leaves the trailing newline unread; the following empty command
9
+ * succeeds and becomes the process exit status. 4094 leaves room for that newline.
10
+ */
11
+ export declare const SECURITY_INTERACTIVE_MAX_LINE = 4094;
12
+ export interface SecretCommandRequest {
13
+ command: string;
14
+ args: string[];
15
+ input?: string;
16
+ }
17
+ export interface SecretCommandResult {
18
+ status: number;
19
+ stdout: string;
20
+ stderr: string;
21
+ }
22
+ export type SecretCommandRunner = (request: SecretCommandRequest) => SecretCommandResult;
23
+ /** Test hook. Production code leaves the real `security` / `secret-tool` runner in place. */
24
+ export declare function setSecretCommandRunnerForTests(runner: SecretCommandRunner | null): void;
25
+ /** Test hook. `null` uses `process.platform`. */
26
+ export declare function setSecretKeychainPlatformForTests(platform: NodeJS.Platform | null): void;
27
+ export declare function keychainUnsupportedReason(platform?: NodeJS.Platform): string | null;
28
+ export declare function readKeychainSecrets(): Record<string, string>;
29
+ export declare function writeKeychainSecrets(secrets: Record<string, string>): void;
30
+ export declare function clearKeychainSecrets(): void;
31
+ //# sourceMappingURL=secret-keychain.d.ts.map
@@ -1,9 +1,19 @@
1
+ import type { SecretBackendKind } from "../types.js";
2
+ export interface SecretBackendSwitchResult {
3
+ backend: SecretBackendKind;
4
+ changed: boolean;
5
+ migrated: string[];
6
+ preserved: string[];
7
+ removedFrom: SecretBackendKind | null;
8
+ }
9
+ export declare function describeSecretBackend(backend: SecretBackendKind): string;
10
+ export declare function getSecretBackend(configPath?: string): SecretBackendKind;
11
+ export declare function switchSecretBackend(target: SecretBackendKind, configPath?: string): SecretBackendSwitchResult;
1
12
  export declare class SecretsManager {
2
13
  private readonly storePath;
3
14
  private readonly keyPath;
4
15
  constructor(storePath?: string, keyPath?: string);
5
- private readStore;
6
- private recoverCorruptStore;
16
+ get backend(): SecretBackendKind;
7
17
  listSecretNames(): string[];
8
18
  setSecret(name: string, value: string): void;
9
19
  removeSecret(name: string): void;
@@ -0,0 +1,62 @@
1
+ import { z } from "zod";
2
+ import type { McpxConfig } from "../types.js";
3
+ export declare function skillVisible(config: McpxConfig, id: string, projectPath?: string): boolean;
4
+ declare const frontmatterSchema: z.ZodObject<{
5
+ name: z.ZodString;
6
+ description: z.ZodString;
7
+ }, z.core.$loose>;
8
+ interface ServedSkill {
9
+ uri: string;
10
+ frontmatter: z.infer<typeof frontmatterSchema>;
11
+ resources: Array<{
12
+ uri: string;
13
+ digest: string;
14
+ size: number;
15
+ }>;
16
+ files: Map<string, Buffer>;
17
+ }
18
+ export declare function servedSkills(config: McpxConfig, projectPath?: string): ServedSkill[];
19
+ export declare function listServedSkills(config: McpxConfig, projectPath?: string, cursor?: string): {
20
+ ttlMs: number;
21
+ cacheScope: string;
22
+ nextCursor?: string | undefined;
23
+ resultType: string;
24
+ skills: {
25
+ uri: string;
26
+ frontmatter: z.infer<typeof frontmatterSchema>;
27
+ resources: Array<{
28
+ uri: string;
29
+ digest: string;
30
+ size: number;
31
+ }>;
32
+ }[];
33
+ };
34
+ export declare function getServedSkill(config: McpxConfig, uri: string, projectPath?: string): {
35
+ resultType: string;
36
+ skill: {
37
+ uri: string;
38
+ frontmatter: z.infer<typeof frontmatterSchema>;
39
+ resources: Array<{
40
+ uri: string;
41
+ digest: string;
42
+ size: number;
43
+ }>;
44
+ };
45
+ ttlMs: number;
46
+ cacheScope: string;
47
+ };
48
+ export declare function readServedSkill(config: McpxConfig, uri: string, projectPath?: string): {
49
+ contents: ({
50
+ text: string;
51
+ uri: string;
52
+ mimeType: string;
53
+ } | {
54
+ blob: string;
55
+ uri: string;
56
+ mimeType: string;
57
+ })[];
58
+ ttlMs: number;
59
+ cacheScope: string;
60
+ };
61
+ export {};
62
+ //# sourceMappingURL=served-skills.d.ts.map
@@ -0,0 +1,71 @@
1
+ import { z } from "zod";
2
+ declare const environmentSchema: z.ZodObject<{
3
+ version: z.ZodLiteral<1>;
4
+ generatedBy: z.ZodString;
5
+ servers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
6
+ transport: z.ZodLiteral<"http">;
7
+ url: z.ZodURL;
8
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
9
+ enabled: z.ZodDefault<z.ZodBoolean>;
10
+ }, z.core.$strip>, z.ZodObject<{
11
+ transport: z.ZodLiteral<"stdio">;
12
+ command: z.ZodString;
13
+ args: z.ZodDefault<z.ZodArray<z.ZodString>>;
14
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
15
+ cwd: z.ZodOptional<z.ZodString>;
16
+ enabled: z.ZodDefault<z.ZodBoolean>;
17
+ }, z.core.$strip>], "transport">>>;
18
+ skills: z.ZodDefault<z.ZodArray<z.ZodObject<{
19
+ id: z.ZodString;
20
+ kind: z.ZodEnum<{
21
+ skill: "skill";
22
+ plugin: "plugin";
23
+ }>;
24
+ path: z.ZodString;
25
+ source: z.ZodOptional<z.ZodString>;
26
+ }, z.core.$strip>>>;
27
+ plugins: z.ZodDefault<z.ZodArray<z.ZodObject<{
28
+ id: z.ZodString;
29
+ kind: z.ZodEnum<{
30
+ skill: "skill";
31
+ plugin: "plugin";
32
+ }>;
33
+ path: z.ZodString;
34
+ source: z.ZodOptional<z.ZodString>;
35
+ }, z.core.$strip>>>;
36
+ clients: z.ZodDefault<z.ZodArray<z.ZodString>>;
37
+ inputs: z.ZodDefault<z.ZodArray<z.ZodObject<{
38
+ name: z.ZodString;
39
+ description: z.ZodOptional<z.ZodString>;
40
+ }, z.core.$strip>>>;
41
+ }, z.core.$strip>;
42
+ declare const lockSchema: z.ZodObject<{
43
+ version: z.ZodLiteral<1>;
44
+ mcpxCompatibility: z.ZodString;
45
+ manifestSha256: z.ZodString;
46
+ packages: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
47
+ sha256: z.ZodString;
48
+ revision: z.ZodOptional<z.ZodString>;
49
+ }, z.core.$strip>>>;
50
+ }, z.core.$strip>;
51
+ export type ShareEnvironment = z.infer<typeof environmentSchema>;
52
+ export type ShareLock = z.infer<typeof lockSchema>;
53
+ export declare function exportEnvironment(destination: string, options?: {
54
+ skills?: string[];
55
+ plugins?: string[];
56
+ }): {
57
+ environment: ShareEnvironment;
58
+ lock: ShareLock;
59
+ };
60
+ export declare function importEnvironment(sourceDirectory: string, options?: {
61
+ locked?: boolean;
62
+ dryRun?: boolean;
63
+ inputs?: Record<string, string>;
64
+ }): Promise<{
65
+ importedSkills: string[];
66
+ importedPlugins: string[];
67
+ importedServers: string[];
68
+ missingInputs: string[];
69
+ }>;
70
+ export {};
71
+ //# sourceMappingURL=share.d.ts.map
@@ -1,6 +1,13 @@
1
1
  import type { Skill } from "../types.js";
2
+ export declare function validateSkillPackage(root: string): void;
2
3
  export declare function listSkills(): Skill[];
3
4
  export declare function getSkill(id: string): Skill | null;
4
5
  export declare function saveSkill(id: string, content: string): void;
5
6
  export declare function deleteSkill(id: string): void;
7
+ export declare function customizeSkill(id: string, targetId?: string): Skill;
8
+ export declare function installSkillFromSource(source: string, skillName?: string): Promise<Skill>;
9
+ export declare function pinSkill(id: string): void;
10
+ export declare function unpinSkill(id: string): void;
11
+ export declare function updateSkill(id: string): Promise<Skill>;
12
+ export declare function rollbackSkill(id: string): Skill;
6
13
  //# sourceMappingURL=skills.d.ts.map
@@ -32,6 +32,7 @@ export interface StatusReport {
32
32
  servers: StatusServerEntry[];
33
33
  clients: McpxConfig["clients"];
34
34
  projects?: McpxConfig["projects"];
35
+ fetchError?: string;
35
36
  totalGlobalTokens?: number;
36
37
  totalProjectTokens?: Record<string, number>;
37
38
  }
@@ -0,0 +1,14 @@
1
+ /** Read-only synchronization preview; credentials and raw configurations stay local. */
2
+ export declare function planSynchronization(targets?: string[]): {
3
+ revision: number;
4
+ harnesses: {
5
+ id: string;
6
+ configPath: string | null;
7
+ changes: {
8
+ name: string;
9
+ action: string;
10
+ }[];
11
+ message: string;
12
+ }[];
13
+ };
14
+ //# sourceMappingURL=sync-plan.d.ts.map
@@ -3,7 +3,10 @@ import { SecretsManager } from "./secrets.js";
3
3
  export interface SyncOptions {
4
4
  targetClients?: ClientId[];
5
5
  importScan?: boolean;
6
+ configPath?: string;
6
7
  }
8
+ /** Canonical sync transaction shared by the CLI, desktop service and plugins. */
9
+ export declare function synchronizeClients(options?: SyncOptions, secrets?: SecretsManager): Promise<SyncSummary>;
7
10
  export interface SyncSummary {
8
11
  gatewayUrl: string;
9
12
  imports: SyncImportReport;
@@ -19,6 +19,8 @@ declare const launchModeSchema: z.ZodEnum<{
19
19
  project: "project";
20
20
  proxy: "proxy";
21
21
  auth: "auth";
22
+ skill: "skill";
23
+ list: "list";
22
24
  plugin: "plugin";
23
25
  desktop: "desktop";
24
26
  daemon: "daemon";
@@ -26,11 +28,9 @@ declare const launchModeSchema: z.ZodEnum<{
26
28
  remove: "remove";
27
29
  enable: "enable";
28
30
  disable: "disable";
29
- list: "list";
30
31
  sync: "sync";
31
32
  doctor: "doctor";
32
33
  secret: "secret";
33
- skill: "skill";
34
34
  "plugin-host": "plugin-host";
35
35
  update: "update";
36
36
  telemetry: "telemetry";
@@ -0,0 +1,20 @@
1
+ type TuiRow = {
2
+ title: string;
3
+ state: string;
4
+ detail: string;
5
+ };
6
+ interface TuiFrameOptions {
7
+ width: number;
8
+ height: number;
9
+ revision: number;
10
+ view: number;
11
+ summary: string;
12
+ rows: TuiRow[];
13
+ selection: number;
14
+ details: string[];
15
+ status: string;
16
+ }
17
+ export declare function renderManagementTuiFrame(frame: TuiFrameOptions): string;
18
+ export declare function runManagementTui(cliPath: string): Promise<void>;
19
+ export {};
20
+ //# sourceMappingURL=tui.d.ts.map
@@ -0,0 +1,4 @@
1
+ import type { McpxConfig } from "../types.js";
2
+ /** Only discovery/list operations are used before retiring native registrations. */
3
+ export declare function verifyUpstreams(config: McpxConfig, names: string[]): Promise<void>;
4
+ //# sourceMappingURL=verify-upstreams.d.ts.map
@@ -0,0 +1,10 @@
1
+ /** Bounds work per upstream instance, including queued requests. */
2
+ export declare class WorkLimiter {
3
+ private readonly concurrency;
4
+ private readonly queueLimit;
5
+ private active;
6
+ private waiting;
7
+ constructor(concurrency?: number, queueLimit?: number);
8
+ run<T>(signal: AbortSignal, work: () => Promise<T>): Promise<T>;
9
+ }
10
+ //# sourceMappingURL=work-limiter.d.ts.map
@@ -1,4 +1,5 @@
1
1
  import http from "node:http";
2
+ import { WorkLimiter } from "../core/work-limiter.js";
2
3
  import { Client } from "@modelcontextprotocol/client";
3
4
  import { StdioClientTransport } from "@modelcontextprotocol/client/stdio";
4
5
  import { StreamableHTTPClientTransport } from "@modelcontextprotocol/client";
@@ -10,6 +11,7 @@ interface GatewayServerOptions {
10
11
  secrets: SecretsManager;
11
12
  }
12
13
  interface UpstreamConnection {
14
+ limiter: WorkLimiter;
13
15
  fingerprint: string;
14
16
  client: Client;
15
17
  transport: StdioClientTransport | StreamableHTTPClientTransport;
package/dist/types.d.ts CHANGED
@@ -1,12 +1,15 @@
1
- export type ClientId = "claude" | "claude-desktop" | "codex" | "cursor" | "cline" | "opencode" | "kiro" | "vscode" | "qwen" | "openclaw" | "hermes";
1
+ /** Harness IDs come from the adapter registry, including project installations. */
2
+ export type ClientId = string;
2
3
  export type PluginComponent = "mcpServers" | "skills" | "hooks" | "agents" | "commands";
3
4
  export interface HttpServerSpec {
5
+ scope?: string;
4
6
  transport: "http";
5
7
  url: string;
6
8
  headers?: Record<string, string>;
7
9
  enabled?: boolean;
8
10
  }
9
11
  export interface StdioServerSpec {
12
+ scope?: string;
10
13
  transport: "stdio";
11
14
  command: string;
12
15
  args?: string[];
@@ -20,6 +23,8 @@ export interface GatewayConfig {
20
23
  tokenRef: string;
21
24
  autoStart: boolean;
22
25
  }
26
+ /** Where stored secrets live. `file` is the default encrypted file; `keychain` is opt-in. */
27
+ export type SecretBackendKind = "file" | "keychain";
23
28
  export type ClientStatus = "SYNCED" | "UNSUPPORTED_HTTP" | "ERROR" | "SKIPPED";
24
29
  export interface ClientSyncState {
25
30
  status: ClientStatus;
@@ -38,6 +43,44 @@ export interface ProjectScope {
38
43
  }
39
44
  export interface McpxConfig {
40
45
  schemaVersion: 1;
46
+ consumers?: Record<string, {
47
+ tokenRef: string;
48
+ projectPath?: string;
49
+ }>;
50
+ packages?: Record<string, {
51
+ id: string;
52
+ root: string;
53
+ source: string;
54
+ harness: string;
55
+ fingerprint: string;
56
+ pinned: boolean;
57
+ name?: string;
58
+ identity?: string;
59
+ servers?: string[];
60
+ skills?: Array<{
61
+ id: string;
62
+ path: string;
63
+ projectionPath: string;
64
+ }>;
65
+ scope?: string;
66
+ previous?: {
67
+ root: string;
68
+ fingerprint: string;
69
+ };
70
+ }>;
71
+ revision?: number;
72
+ harnesses?: Record<string, {
73
+ mode: "observe" | "selected" | "automatic";
74
+ }>;
75
+ origins?: Record<string, {
76
+ id: string;
77
+ kind: string;
78
+ harness: string;
79
+ source: string;
80
+ nativeKey: string;
81
+ fingerprint: string;
82
+ operationId: string;
83
+ }>;
41
84
  name?: string;
42
85
  gateway: GatewayConfig;
43
86
  servers: Record<string, UpstreamServerSpec>;
@@ -45,6 +88,9 @@ export interface McpxConfig {
45
88
  projects?: Record<string, ProjectConfig>;
46
89
  plugins?: Record<string, ManagedPlugin>;
47
90
  marketplaces?: Record<string, ManagedMarketplace>;
91
+ secrets?: {
92
+ backend: SecretBackendKind;
93
+ };
48
94
  }
49
95
  export interface ManagedEntry {
50
96
  fingerprint: string;
@@ -117,8 +163,15 @@ export interface SyncResult {
117
163
  driftedEntries?: string[];
118
164
  }
119
165
  export interface Skill {
166
+ projectionPath?: string;
167
+ scope?: string;
168
+ ownerHarness?: string;
120
169
  id: string;
121
170
  content: string;
171
+ /** Canonical directory containing SKILL.md and optional resources. */
172
+ root?: string;
173
+ source?: "authored" | "installed";
174
+ readOnly?: boolean;
122
175
  }
123
176
  export interface PluginSyncInput {
124
177
  pluginId: string;
@@ -140,12 +193,24 @@ export interface PluginSyncResult {
140
193
  unsupported: PluginComponent[];
141
194
  error?: string;
142
195
  }
196
+ export interface HarnessDescriptor {
197
+ label?: string;
198
+ projectConfig?: string;
199
+ skillPath?: string;
200
+ projectSkills?: string;
201
+ skillLayout?: "dir" | "flat";
202
+ pluginComponents?: PluginComponent[];
203
+ }
143
204
  export interface ClientAdapter {
205
+ descriptor?: HarnessDescriptor;
206
+ managedName?(serverName: string): string;
144
207
  id: ClientId;
145
208
  detectConfigPath(): string | null;
146
209
  supportsHttp(): boolean;
147
210
  scanForImports(config: McpxConfig, managedIndex: ManagedIndex): ClientImportScanResult;
148
211
  syncGateway(config: McpxConfig, options: SyncClientOptions): SyncResult;
212
+ skillDirectory?(): string;
213
+ additionalSkillDirectories?(): string[];
149
214
  syncSkills?(skills: Skill[]): void;
150
215
  syncPlugins?(plugins: PluginSyncInput[]): PluginSyncResult;
151
216
  }
@@ -319,6 +384,12 @@ export interface ManagedPlugin {
319
384
  sourceFingerprint: string;
320
385
  };
321
386
  updateError?: string;
387
+ pinned?: boolean;
388
+ previous?: {
389
+ version: string;
390
+ resolvedSha: string;
391
+ root: string;
392
+ };
322
393
  projectOverrides?: Record<string, {
323
394
  enabled?: boolean;
324
395
  components?: Partial<Record<PluginComponent, boolean>>;
package/dist/util/fs.d.ts CHANGED
@@ -2,4 +2,6 @@ export declare function readJsonFile<T>(filePath: string, fallback: T): T;
2
2
  export declare function writeJsonAtomic(filePath: string, data: unknown): void;
3
3
  export declare function sha256(value: string): string;
4
4
  export declare function safeReadFile(filePath: string): string | null;
5
+ /** Native configuration must fail closed; malformed files are never reset. */
6
+ export declare function readJsonStrict<T>(filePath: string, fallback: T): T;
5
7
  //# sourceMappingURL=fs.d.ts.map
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const APP_VERSION = "0.1.3";
1
+ export declare const APP_VERSION = "0.1.106";
2
2
  //# sourceMappingURL=version.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kwonye/mcpx",
3
- "version": "0.1.104",
3
+ "version": "0.1.106",
4
4
  "description": "HTTP-first MCP gateway and cross-client installer",
5
5
  "keywords": [
6
6
  "mcp",
@@ -1,11 +0,0 @@
1
- import type { ClientAdapter, ManagedIndex, McpxConfig, Skill, SyncClientOptions, SyncResult, PluginSyncInput, PluginSyncResult } from "../types.js";
2
- export declare class OpenCodeAdapter implements ClientAdapter {
3
- readonly id: "opencode";
4
- detectConfigPath(): string | null;
5
- supportsHttp(): boolean;
6
- syncPlugins(plugins: PluginSyncInput[]): PluginSyncResult;
7
- syncSkills(skills: Skill[]): void;
8
- scanForImports(_config: McpxConfig, managedIndex: ManagedIndex): import("../types.js").ClientImportScanResult;
9
- syncGateway(_config: McpxConfig, options: SyncClientOptions): SyncResult;
10
- }
11
- //# sourceMappingURL=opencode.d.ts.map