mcplane 0.4.1 → 0.5.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/CHANGELOG.md +27 -0
- package/README.md +108 -18
- package/dist/agent-plugins.d.ts +6 -0
- package/dist/agent-plugins.js +76 -0
- package/dist/cdp.d.ts +49 -0
- package/dist/cdp.js +253 -0
- package/dist/checks/ard.d.ts +67 -0
- package/dist/checks/ard.js +215 -0
- package/dist/checks/auth.js +2 -1
- package/dist/checks/chain.d.ts +45 -0
- package/dist/checks/chain.js +171 -0
- package/dist/checks/listing.js +23 -14
- package/dist/checks/oauth.d.ts +45 -0
- package/dist/checks/oauth.js +64 -0
- package/dist/checks/readiness.d.ts +58 -0
- package/dist/checks/readiness.js +230 -0
- package/dist/checks/tools.js +38 -7
- package/dist/checks/vercel.d.ts +27 -0
- package/dist/checks/vercel.js +153 -0
- package/dist/cli.js +54 -6
- package/dist/core.d.ts +1 -0
- package/dist/core.js +20 -4
- package/dist/demo.d.ts +60 -0
- package/dist/demo.js +573 -0
- package/dist/drift.js +10 -3
- package/dist/evals.d.ts +34 -0
- package/dist/evals.js +75 -0
- package/dist/extras.js +1 -1
- package/dist/images.d.ts +21 -0
- package/dist/images.js +99 -0
- package/dist/listings.d.ts +14 -0
- package/dist/listings.js +39 -0
- package/dist/mcp-client.d.ts +1 -5
- package/dist/mcp-client.js +8 -1
- package/dist/mcp-server.js +21 -11
- package/dist/packs.d.ts +48 -18
- package/dist/packs.js +380 -90
- package/dist/report.js +30 -13
- package/dist/skills.d.ts +21 -0
- package/dist/skills.js +180 -0
- package/dist/submissions.js +2 -1
- package/dist/types.d.ts +37 -4
- package/dist/types.js +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/video.d.ts +58 -0
- package/dist/video.js +190 -0
- package/dist/zip.d.ts +16 -2
- package/dist/zip.js +65 -5
- package/package.json +4 -1
- package/schema.json +86 -12
- package/schemas/agent-plugins-1.0.0/LICENSE +202 -0
- package/schemas/agent-plugins-1.0.0/mcp.schema.json +120 -0
- package/schemas/agent-plugins-1.0.0/plugin.schema.json +65 -0
package/dist/core.js
CHANGED
|
@@ -2,10 +2,15 @@
|
|
|
2
2
|
* mcplane's checks for any runtime with fetch (Workers, Deno, browsers' servers).
|
|
3
3
|
* Import from "mcplane/core".
|
|
4
4
|
*/
|
|
5
|
+
import { ardChecks } from './checks/ard.js';
|
|
5
6
|
import { authChecks } from './checks/auth.js';
|
|
7
|
+
import { chainChecks } from './checks/chain.js';
|
|
6
8
|
import { listingChecks, repoChecks } from './checks/listing.js';
|
|
9
|
+
import { discover } from './checks/oauth.js';
|
|
10
|
+
import { readinessChecks } from './checks/readiness.js';
|
|
7
11
|
import { serverChecks } from './checks/server.js';
|
|
8
12
|
import { toolChecks } from './checks/tools.js';
|
|
13
|
+
import { VERCEL_REMINDERS, vercelChecks } from './checks/vercel.js';
|
|
9
14
|
import { storesOf } from './draft.js';
|
|
10
15
|
/** Things no script can see, which have still cost real submissions. */
|
|
11
16
|
function reminders(m, stores) {
|
|
@@ -18,9 +23,9 @@ function reminders(m, stores) {
|
|
|
18
23
|
r.push('If a tool writes somewhere public (posts, sends, publishes), give reviewers a safe target: a sandbox account or a "playground" option that validates and then discards. Reviewers test writes; they shouldn’t post to a real timeline.');
|
|
19
24
|
}
|
|
20
25
|
if (stores.includes('chatgpt')) {
|
|
21
|
-
r.push('ChatGPT needs a demo video recorded in developer mode that shows the tools your test cases use. Re-record it whenever tools change.');
|
|
26
|
+
r.push('ChatGPT needs a demo video recorded in developer mode that shows the tools your test cases use. Re-record it whenever tools change ("mcplane demo" records it on a Mac with ChatGPT desktop).');
|
|
22
27
|
r.push('After "Submit for Review" the ChatGPT portal shows nothing for about 20 seconds. Confirm the status on the plugins list, not the button.');
|
|
23
|
-
r.push('
|
|
28
|
+
r.push('OpenAI no longer asks for hint justifications: its automated review checks each tool’s hints. If it flags one you believe is right, appeal with an explanation.');
|
|
24
29
|
r.push('ChatGPT allows one version in review at a time. To change a submission, Cancel Review and resubmit the same draft.');
|
|
25
30
|
}
|
|
26
31
|
if (stores.includes('claude-connectors') || stores.includes('claude-plugins')) {
|
|
@@ -30,6 +35,8 @@ function reminders(m, stores) {
|
|
|
30
35
|
r.push('Run "claude plugin validate --strict" in the plugin repo; the portal validates every commit on the branch it tracks.');
|
|
31
36
|
r.push('Claude: "Passed review" is not the same as listed. Check claude.ai/directory for your listing after approval; with the new portal you choose when to publish.');
|
|
32
37
|
}
|
|
38
|
+
if (stores.includes('vercel-connect') && m.server.auth === 'oauth')
|
|
39
|
+
r.push(...VERCEL_REMINDERS);
|
|
33
40
|
return r;
|
|
34
41
|
}
|
|
35
42
|
/** Runtime-neutral: fetch only. Node adds socket checks (TLS 1.2) through extraChecks; see preflight-node. */
|
|
@@ -37,16 +44,25 @@ export async function preflight(m, opts = {}) {
|
|
|
37
44
|
const stores = opts.stores?.length ? opts.stores : storesOf(m);
|
|
38
45
|
const auth = m.server.auth ?? 'none';
|
|
39
46
|
const server = await serverChecks(m.server.url, auth, opts.token, opts.extraChecks);
|
|
40
|
-
|
|
47
|
+
// One read of the OAuth discovery documents, shared by the sign-in chain, Vercel Connect and readiness checks.
|
|
48
|
+
const oauth = auth === 'oauth' ? await discover(m.server.url).catch(() => null) : null;
|
|
49
|
+
// A server that doesn't answer at all has already failed; probing it for the next revision adds nothing.
|
|
50
|
+
const down = server.checks.some((c) => c.id === 'server.reachable' && c.level === 'fail');
|
|
51
|
+
const [authC, chain, listing, repo, ard, readiness] = await Promise.all([
|
|
41
52
|
auth === 'oauth' ? authChecks(m.server.url, { register: opts.register }) : Promise.resolve([]),
|
|
53
|
+
auth === 'oauth' ? chainChecks(m, oauth).catch(() => []) : Promise.resolve([]),
|
|
42
54
|
listingChecks(m, server.tools, stores),
|
|
43
55
|
repoChecks(m, stores),
|
|
56
|
+
ardChecks(m),
|
|
57
|
+
down ? Promise.resolve([]) : readinessChecks(m.server.url, auth, { token: opts.token, oauth }),
|
|
44
58
|
]);
|
|
45
|
-
const
|
|
59
|
+
const vercel = stores.includes('vercel-connect') ? vercelChecks(m, oauth) : [];
|
|
60
|
+
const all = [...server.checks, ...authC, ...chain, ...toolChecks(server.tools), ...listing, ...repo, ...vercel, ...ard, ...readiness];
|
|
46
61
|
// Keep checks that apply to every store or to one we're submitting to.
|
|
47
62
|
const checks = all.filter((c) => !c.stores?.length || c.stores.some((s) => stores.includes(s)));
|
|
48
63
|
return { checks, reminders: reminders(m, stores), stores };
|
|
49
64
|
}
|
|
50
65
|
export { draftManifest, forStore, storesOf, SCHEMA_URL } from './draft.js';
|
|
51
66
|
export { toolChecks } from './checks/tools.js';
|
|
67
|
+
export { validateArd, ardManifest } from './checks/ard.js';
|
|
52
68
|
export { STORE_NAMES } from './types.js';
|
package/dist/demo.d.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { Manifest } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Every label mcplane relies on in ChatGPT desktop (checked against 26.903, 1 October 2026).
|
|
4
|
+
* When a release renames something, this is the one place to fix.
|
|
5
|
+
*/
|
|
6
|
+
export declare const UI: {
|
|
7
|
+
hideSidebar: string;
|
|
8
|
+
showSidebar: string;
|
|
9
|
+
newChat: string;
|
|
10
|
+
chatMode: string;
|
|
11
|
+
workMode: string;
|
|
12
|
+
addMenu: string;
|
|
13
|
+
send: string[];
|
|
14
|
+
stop: string[];
|
|
15
|
+
/** Buttons on a tool approval card. */
|
|
16
|
+
approval: string[];
|
|
17
|
+
/** What --approve clicks, first match wins. Never "Always allow": a demo shouldn't change your settings. */
|
|
18
|
+
allow: string[];
|
|
19
|
+
/** The collapsed summary of tool calls ("Worked for 5s"), opened at the end of each scene. */
|
|
20
|
+
activity: string;
|
|
21
|
+
signIn: string[];
|
|
22
|
+
/** Part of the message box's accessible name: "Message ChatGPT", "Ask ChatGPT", "Work with ChatGPT". */
|
|
23
|
+
composer: string;
|
|
24
|
+
/** The @mention pill keeps the plugin's id here; developer-mode plugins are "created-by-me". */
|
|
25
|
+
mentionAttr: string;
|
|
26
|
+
devMode: string;
|
|
27
|
+
};
|
|
28
|
+
/** "1,3" or "2-4" to zero-based indexes into the positive tests, in the order given. */
|
|
29
|
+
export declare function pickTests(count: number, only?: string): number[];
|
|
30
|
+
export interface DemoOptions {
|
|
31
|
+
/** Positive tests to record, e.g. "1,3" (default: all). */
|
|
32
|
+
only?: string;
|
|
33
|
+
/** Where to write the video (default: .mcplane/packs/chatgpt/demo.mp4). */
|
|
34
|
+
out?: string;
|
|
35
|
+
/** Click "Allow once" on tool approval cards. */
|
|
36
|
+
approve?: boolean;
|
|
37
|
+
/** Leave ChatGPT running afterwards (it keeps its debugging port open until you quit it). */
|
|
38
|
+
keepOpen?: boolean;
|
|
39
|
+
/** Don't ask first. */
|
|
40
|
+
yes?: boolean;
|
|
41
|
+
/** The plugin to @mention (default: the manifest's title). */
|
|
42
|
+
plugin?: string;
|
|
43
|
+
/** Record in Work mode instead of Chat. */
|
|
44
|
+
work?: boolean;
|
|
45
|
+
port?: number;
|
|
46
|
+
token?: string;
|
|
47
|
+
dir?: string;
|
|
48
|
+
log?: (line: string) => void;
|
|
49
|
+
}
|
|
50
|
+
export interface DemoResult {
|
|
51
|
+
out: string;
|
|
52
|
+
seconds: number;
|
|
53
|
+
scenes: number;
|
|
54
|
+
notes: string[];
|
|
55
|
+
}
|
|
56
|
+
export declare function demo(m: Manifest, o?: DemoOptions): Promise<DemoResult>;
|
|
57
|
+
export declare const _test: {
|
|
58
|
+
pickTests: typeof pickTests;
|
|
59
|
+
PAGE: string;
|
|
60
|
+
};
|