@modootoday/pmcp 0.16.0 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/plugins/marketplace.json +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +7 -1
- package/dist/cli.js +430 -257
- package/dist/{embed-CVCEz2FH.d.ts → embed-DRROSD3F.d.ts} +1 -1
- package/dist/harness-launch-gate.js +3 -0
- package/dist/harness-worker.js +4 -0
- package/dist/http.d.ts +5 -4
- package/dist/http.js +4 -2
- package/dist/index.d.ts +6 -6
- package/dist/index.js +234 -86
- package/dist/mailbox/index.js +3 -0
- package/dist/{server-DAcT89iv.d.ts → server-VWSY3Shw.d.ts} +2 -3
- package/dist/stdio.d.ts +1 -1
- package/dist/stdio.js +4 -2
- package/dist/tui-worker.js +12 -0
- package/docs/hosting.md +13 -0
- package/docs/project-configuration.md +35 -0
- package/gemini-extension.json +1 -1
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/plugins/pmcp/.claude-plugin/plugin.json +1 -1
- package/plugins/pmcp/gemini-extension.json +1 -1
- package/plugins/pmcp/plugin.json +1 -1
package/dist/mailbox/index.js
CHANGED
|
@@ -144,6 +144,8 @@ var MailboxError = class extends Error {
|
|
|
144
144
|
this.retryable = retryable;
|
|
145
145
|
this.name = "MailboxError";
|
|
146
146
|
}
|
|
147
|
+
code;
|
|
148
|
+
retryable;
|
|
147
149
|
};
|
|
148
150
|
function failure(error) {
|
|
149
151
|
if (error instanceof MailboxError) {
|
|
@@ -1089,6 +1091,7 @@ var NotificationOutbox = class {
|
|
|
1089
1091
|
constructor(store) {
|
|
1090
1092
|
this.store = store;
|
|
1091
1093
|
}
|
|
1094
|
+
store;
|
|
1092
1095
|
discover(binding, nativeTarget) {
|
|
1093
1096
|
return this.store.run(() => {
|
|
1094
1097
|
this.store.assertBinding(binding);
|
|
@@ -144,8 +144,7 @@ interface IntentCache {
|
|
|
144
144
|
close(): void;
|
|
145
145
|
}
|
|
146
146
|
/**
|
|
147
|
-
*
|
|
148
|
-
* key has to survive a caller writing "How do I wire X?" and "how do i wire x".
|
|
147
|
+
* Canonically equivalent Unicode must share the same query and cache key.
|
|
149
148
|
*/
|
|
150
149
|
declare function normaliseIntent(intent: string): string;
|
|
151
150
|
|
|
@@ -541,4 +540,4 @@ declare function createSkillTools(options: SkillServerOptions): {
|
|
|
541
540
|
};
|
|
542
541
|
type SkillTools = ReturnType<typeof createSkillTools>;
|
|
543
542
|
|
|
544
|
-
export {
|
|
543
|
+
export { isUtf8Text as $, ASSET_KINDS as A, type BundleFile as B, type CatalogOptions as C, DEFAULT_FIND_LIMIT as D, type Embedder as E, type FileKind as F, type SkillFile as G, type SkillFileContent as H, type IntentCache as I, type SkillFileListing as J, type KindFilter as K, type SkillFilters as L, type MetadataValue as M, NAME_MAX as N, bundleResponseSchema as O, bundleSkill as P, catalogResponseSchema as Q, type Runtime as R, type SkillServerOptions as S, classify as T, cosine as U, createSkillTools as V, describeResponseSchema as W, detectRuntime as X, displayPath as Y, find as Z, findResultSchema as _, type SkillEntry as a, kindOf as a0, lexicalScore as a1, listSkillFiles as a2, mimeOf as a3, normaliseIntent as a4, frontmatterObject as a5, readBody as a6, readFrontmatter as a7, readSkillFile as a8, runtimeOfClient as a9, specProblems as aa, withoutBody as ab, type Ranking as b, type SkillTools as c, type AssetKind as d, CATALOG_PAGE_MAX as e, CATALOG_PAGE_SIZE as f, COMPATIBILITY_MAX as g, type CallResponse as h, type CatalogItem as i, type CatalogResponse as j, type Classified as k, DESCRIBE_FILE_LIMIT as l, DESCRIPTION_MAX as m, type FindOptions as n, type FindResult as o, type IntentCacheStats as p, MAX_SKILL_DEPTH as q, readCatalog as r, type Match as s, type MetadataLeaf as t, READ_BUDGET_BYTES as u, verifiedRuntimesOf as v, RUNTIMES as w, type ReadResult as x, SKIPPED_DIRS as y, type SkillBundle as z };
|
package/dist/stdio.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { serveStdio } from '@modelcontextprotocol/server/stdio';
|
|
3
|
-
import { S as SkillServerOptions, C as CatalogOptions } from './server-
|
|
3
|
+
import { S as SkillServerOptions, C as CatalogOptions } from './server-VWSY3Shw.js';
|
|
4
4
|
import { M as MailboxService } from './service-qpCsOXkQ.js';
|
|
5
5
|
import { M as MailboxAttachmentOptions } from './attachment-tU5FZrgZ.js';
|
|
6
6
|
import 'zod';
|
package/dist/stdio.js
CHANGED
|
@@ -1050,7 +1050,7 @@ import { createHash as createHash2 } from "crypto";
|
|
|
1050
1050
|
|
|
1051
1051
|
// src/intent.ts
|
|
1052
1052
|
function normaliseIntent(intent) {
|
|
1053
|
-
return intent.toLowerCase().replaceAll(/[^\p{L}\p{N}\s]/gu, " ").split(/\s+/u).filter(Boolean).join(" ");
|
|
1053
|
+
return intent.normalize("NFC").toLowerCase().replaceAll(/[^\p{L}\p{N}\s]/gu, " ").split(/\s+/u).filter(Boolean).join(" ");
|
|
1054
1054
|
}
|
|
1055
1055
|
|
|
1056
1056
|
// src/find.ts
|
|
@@ -1941,7 +1941,7 @@ function registerMailboxTools(server, service) {
|
|
|
1941
1941
|
|
|
1942
1942
|
// src/mcp.ts
|
|
1943
1943
|
var SERVER_NAME = "pmcp";
|
|
1944
|
-
var SERVER_VERSION = "0.
|
|
1944
|
+
var SERVER_VERSION = "0.17.0";
|
|
1945
1945
|
function registerSkillTools(server, tools) {
|
|
1946
1946
|
registerCatalogTool(server, tools);
|
|
1947
1947
|
registerFindTool(server, tools);
|
|
@@ -2003,6 +2003,8 @@ var MailboxError = class extends Error {
|
|
|
2003
2003
|
this.retryable = retryable;
|
|
2004
2004
|
this.name = "MailboxError";
|
|
2005
2005
|
}
|
|
2006
|
+
code;
|
|
2007
|
+
retryable;
|
|
2006
2008
|
};
|
|
2007
2009
|
function failure(error) {
|
|
2008
2010
|
if (error instanceof MailboxError) {
|
package/dist/tui-worker.js
CHANGED
|
@@ -911,6 +911,7 @@ var Connection = class {
|
|
|
911
911
|
constructor(records2) {
|
|
912
912
|
this.records = records2;
|
|
913
913
|
}
|
|
914
|
+
records;
|
|
914
915
|
tmux(args, options = {}) {
|
|
915
916
|
return command(
|
|
916
917
|
"tmux",
|
|
@@ -1147,6 +1148,8 @@ var LaunchJournal = class {
|
|
|
1147
1148
|
this.id = id2;
|
|
1148
1149
|
runtimeUnit(id2);
|
|
1149
1150
|
}
|
|
1151
|
+
records;
|
|
1152
|
+
id;
|
|
1150
1153
|
path(kind) {
|
|
1151
1154
|
if (!["intent", "proof", "grant", "committed", "aborted"].includes(kind))
|
|
1152
1155
|
throw new Error("invalid_launch_artifact");
|
|
@@ -2275,6 +2278,7 @@ var Backend = class {
|
|
|
2275
2278
|
this.runDirectory = recordStore.directory;
|
|
2276
2279
|
this.metadataPath = recordStore.metadataPath;
|
|
2277
2280
|
}
|
|
2281
|
+
recordStore;
|
|
2278
2282
|
connection;
|
|
2279
2283
|
owner;
|
|
2280
2284
|
socket;
|
|
@@ -3413,6 +3417,7 @@ var CommonHarness = class {
|
|
|
3413
3417
|
constructor(view) {
|
|
3414
3418
|
this.view = view;
|
|
3415
3419
|
}
|
|
3420
|
+
view;
|
|
3416
3421
|
async call(family, action, input = {}) {
|
|
3417
3422
|
const group = new GroupStore(this.view.groupFile).state.group;
|
|
3418
3423
|
if (group.owner !== this.view.groupOwner) throw new Error("foreign_group");
|
|
@@ -3570,6 +3575,9 @@ var ViewConnection = class {
|
|
|
3570
3575
|
this.identity = identity;
|
|
3571
3576
|
this.socket = join21(directory, "s");
|
|
3572
3577
|
}
|
|
3578
|
+
directory;
|
|
3579
|
+
owner;
|
|
3580
|
+
identity;
|
|
3573
3581
|
socket;
|
|
3574
3582
|
raw(args) {
|
|
3575
3583
|
const env = { ...process.env };
|
|
@@ -3721,6 +3729,8 @@ var TmuxView = class {
|
|
|
3721
3729
|
view.serverIdentity
|
|
3722
3730
|
);
|
|
3723
3731
|
}
|
|
3732
|
+
view;
|
|
3733
|
+
stateFile;
|
|
3724
3734
|
connection;
|
|
3725
3735
|
shell(argv2) {
|
|
3726
3736
|
return `exec ${argv2.map(quote).join(" ")}`;
|
|
@@ -4408,6 +4418,8 @@ var MailboxError = class extends Error {
|
|
|
4408
4418
|
this.retryable = retryable;
|
|
4409
4419
|
this.name = "MailboxError";
|
|
4410
4420
|
}
|
|
4421
|
+
code;
|
|
4422
|
+
retryable;
|
|
4411
4423
|
};
|
|
4412
4424
|
function failure(error) {
|
|
4413
4425
|
if (error instanceof MailboxError) {
|
package/docs/hosting.md
CHANGED
|
@@ -26,6 +26,19 @@ const skills = createSkillHttpHandler({
|
|
|
26
26
|
export default { fetch: (request: Request) => skills.fetch(request) };
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
+
Import `readCatalog` and `verifiedRuntimesOf` from the same `/http` entry when
|
|
30
|
+
the host also displays the catalog. `verifiedRuntimesOf(metadata)` accepts an
|
|
31
|
+
array or a comma/whitespace-separated string, drops unknown names and removes
|
|
32
|
+
duplicates while preserving declaration order. Hosts that need a fixed display
|
|
33
|
+
order can sort the result themselves.
|
|
34
|
+
|
|
35
|
+
Pass `onReject: ({ path, reason }) => reportRejectedCatalog(path, reason)` to
|
|
36
|
+
observe rejected marketplace entries during startup and `reload()`. This callback
|
|
37
|
+
is synchronous and reports only the path and reason. A custom `loadCatalog` must
|
|
38
|
+
forward its options to `readCatalog` to retain rejection reporting. If the host
|
|
39
|
+
loads a separate site catalog, pass the callback to that load as well. Deduplicate
|
|
40
|
+
repeated warnings in the host and keep local paths out of public responses.
|
|
41
|
+
|
|
29
42
|
The handler checks requests before they reach MCP:
|
|
30
43
|
|
|
31
44
|
| Option | Default | Effect |
|
|
@@ -26,6 +26,9 @@ Antigravity read natively, from cross-tool sources under `.agents/`
|
|
|
26
26
|
(`skills/<name>/SKILL.md`, `agents/<name>/agent.md`, `rules/*.md`) and the rest
|
|
27
27
|
of `pmcp.toml`:
|
|
28
28
|
|
|
29
|
+
OpenCode additionally supports project MCP and direct skill discovery, as
|
|
30
|
+
described in [OpenCode project support](#opencode-project-support).
|
|
31
|
+
|
|
29
32
|
```toml
|
|
30
33
|
[targets]
|
|
31
34
|
tools = ["claude", "codex", "gemini", "grok", "antigravity"]
|
|
@@ -146,6 +149,38 @@ Configuration references: [Codex](https://developers.openai.com/codex/config-ref
|
|
|
146
149
|
[Gemini CLI](https://geminicli.com/docs/tools/mcp-server/),
|
|
147
150
|
and [Grok Build](https://docs.x.ai/build/features/mcp-servers).
|
|
148
151
|
|
|
152
|
+
## OpenCode project support
|
|
153
|
+
|
|
154
|
+
Add opencode to targets.tools to project MCP entries into the project-root
|
|
155
|
+
opencode.json. PMCP owns only its declared mcp entries and user-only skill
|
|
156
|
+
permissions; existing provider, model, other servers and permission rules are
|
|
157
|
+
preserved. An unmanaged conflicting entry is refused. JSONC projection is not
|
|
158
|
+
supported; reconcile a project opencode.jsonc before projecting opencode.json.
|
|
159
|
+
|
|
160
|
+
Local servers use type=local, a command array and environment. Remote servers
|
|
161
|
+
use type=remote, url and native {env:NAME} header references. Optional
|
|
162
|
+
mcp.<name>.native.opencode.timeout uses milliseconds. Per-server tool filtering,
|
|
163
|
+
MCP configuration import and mailbox runtime binding are not qualified for
|
|
164
|
+
OpenCode; explicitly limit those servers to other targets when needed.
|
|
165
|
+
|
|
166
|
+
OpenCode discovers .agents/skills directly, so PMCP creates no skill copies or
|
|
167
|
+
links. For invocation=user, projection sets permission.skill.<name> to deny:
|
|
168
|
+
the model's skill list omits that name, while the native /<name> command still
|
|
169
|
+
loads its original SKILL.md and accepts user arguments. This was qualified with
|
|
170
|
+
OpenCode 1.18.33 using isolated native CLI calls and local scripted responses,
|
|
171
|
+
without an external model call. It controls automatic skill selection, not
|
|
172
|
+
arbitrary file access. Native global skill discovery remains a user preference.
|
|
173
|
+
|
|
174
|
+
pmcp doctor checks opencode debug skill and opencode mcp list without calling
|
|
175
|
+
a model. Discovery does not imply automatic visibility or native tool invocation.
|
|
176
|
+
Memory reporting, shell-hook enforcement, canonical agent projection and
|
|
177
|
+
terminal-harness support are not part of this target's current qualification.
|
|
178
|
+
OpenCode does not run Claude project hooks automatically.
|
|
179
|
+
|
|
180
|
+
See the [OpenCode MCP configuration](https://opencode.ai/docs/mcp-servers/),
|
|
181
|
+
[Agent Skills](https://opencode.ai/docs/skills/) and
|
|
182
|
+
[configuration precedence](https://opencode.ai/docs/config/).
|
|
183
|
+
|
|
149
184
|
## Operator shell guards
|
|
150
185
|
|
|
151
186
|
Declare a project-owned guard explicitly to project it into Codex, Gemini or
|
package/gemini-extension.json
CHANGED
package/package.json
CHANGED
package/plugin.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
|
|
3
3
|
"name": "pmcp",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.17.0",
|
|
5
5
|
"description": "Find package skills and use native runtime project configuration.",
|
|
6
6
|
"author": { "name": "modootoday" },
|
|
7
7
|
"license": "Elastic-2.0",
|
package/plugins/pmcp/plugin.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
|
|
3
3
|
"name": "pmcp",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.17.0",
|
|
5
5
|
"description": "Find package skills and use native runtime project configuration.",
|
|
6
6
|
"author": { "name": "modootoday" },
|
|
7
7
|
"license": "Elastic-2.0",
|