@ziprack/sdk 0.1.2 → 0.2.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/dist/docs/README.md +52 -0
- package/dist/docs/activity.md +140 -0
- package/dist/docs/ai.md +159 -0
- package/dist/docs/applet-packages.md +118 -0
- package/dist/docs/attempts.md +184 -0
- package/dist/docs/auth.md +106 -0
- package/dist/docs/broadcast.md +226 -0
- package/dist/docs/conformance.md +102 -0
- package/dist/docs/database.md +176 -0
- package/dist/docs/extending.md +256 -0
- package/dist/docs/installation.md +185 -0
- package/dist/docs/introduction.md +124 -0
- package/dist/docs/manifest.md +209 -0
- package/dist/docs/media.md +85 -0
- package/dist/docs/protocol.md +121 -0
- package/dist/docs/publishing.md +127 -0
- package/dist/docs/reporting.md +146 -0
- package/dist/docs/sdk.md +258 -0
- package/dist/docs/security.md +127 -0
- package/dist/docs/storage.md +131 -0
- package/dist/docs/studio.md +425 -0
- package/dist/docs/versioning.md +101 -0
- package/dist/docs/ziprack-1-authoring.md +182 -0
- package/dist/mcp/bin.d.ts +2 -0
- package/dist/mcp/bin.js +3 -0
- package/dist/mcp/docs.d.ts +31 -0
- package/dist/mcp/docs.js +107 -0
- package/dist/mcp/index.d.ts +4 -0
- package/dist/mcp/index.js +4 -0
- package/dist/mcp/rpc.d.ts +33 -0
- package/dist/mcp/rpc.js +86 -0
- package/dist/mcp/server.d.ts +23 -0
- package/dist/mcp/server.js +55 -0
- package/dist/mcp/tools.d.ts +20 -0
- package/dist/mcp/tools.js +106 -0
- package/package.json +10 -4
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { GUIDELINES, loadDocs, searchDocs } from './docs.js';
|
|
3
|
+
export const SDK_VERSION = JSON.parse(readFileSync(new URL('../../package.json', import.meta.url), 'utf8')).version;
|
|
4
|
+
/**
|
|
5
|
+
* Docs and guidelines for the SDK version this server was installed with.
|
|
6
|
+
* Every answer names that version, so an assistant never mistakes it for
|
|
7
|
+
* whatever it remembers of an older one.
|
|
8
|
+
*/
|
|
9
|
+
export function docsTools(docs = loadDocs()) {
|
|
10
|
+
const byName = new Map(docs.map((doc) => [doc.name, doc]));
|
|
11
|
+
const header = `zipRACK docs for @ziprack/sdk ${SDK_VERSION}`;
|
|
12
|
+
const unknownDoc = (name) => ({
|
|
13
|
+
isError: true,
|
|
14
|
+
error: `Unknown doc [${name}].`,
|
|
15
|
+
sdk_version: SDK_VERSION,
|
|
16
|
+
docs: docs.map((doc) => doc.name),
|
|
17
|
+
});
|
|
18
|
+
return [
|
|
19
|
+
{
|
|
20
|
+
name: 'ziprack_guidelines',
|
|
21
|
+
description: 'The rules every zipRACK applet must follow: mental model, package layout, manifest, SDK usage, runtime constraints and the pre-upload checklist. Read this before writing or changing applet code.',
|
|
22
|
+
inputSchema: { type: 'object', properties: {}, additionalProperties: false },
|
|
23
|
+
run: () => {
|
|
24
|
+
const guidelines = byName.get(GUIDELINES);
|
|
25
|
+
return guidelines === undefined ? unknownDoc(GUIDELINES) : `${header}\n\n${guidelines.text}`;
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: 'ziprack_list_docs',
|
|
30
|
+
description: 'Every zipRACK doc in reading order, with its section anchors. Use the names with ziprack_read_doc.',
|
|
31
|
+
inputSchema: { type: 'object', properties: {}, additionalProperties: false },
|
|
32
|
+
run: () => ({
|
|
33
|
+
sdk_version: SDK_VERSION,
|
|
34
|
+
docs: docs.map((doc) => ({
|
|
35
|
+
name: doc.name,
|
|
36
|
+
title: doc.title,
|
|
37
|
+
sections: doc.sections
|
|
38
|
+
.filter((section) => section.anchor !== null)
|
|
39
|
+
.map((section) => ({ anchor: section.anchor, heading: section.heading })),
|
|
40
|
+
})),
|
|
41
|
+
}),
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: 'ziprack_search_docs',
|
|
45
|
+
description: 'Search the zipRACK docs for the installed SDK version and return the best-matching sections in full. Pass several phrasings at once, e.g. ["setState resume", "attempt state"]. Search before guessing at an SDK method, manifest field or error code.',
|
|
46
|
+
inputSchema: {
|
|
47
|
+
type: 'object',
|
|
48
|
+
properties: {
|
|
49
|
+
queries: { type: 'array', items: { type: 'string' }, minItems: 1, description: 'Search phrases; a section scores on any of them.' },
|
|
50
|
+
limit: { type: 'integer', minimum: 1, maximum: 20, description: 'Sections to return. Defaults to 5.' },
|
|
51
|
+
},
|
|
52
|
+
required: ['queries'],
|
|
53
|
+
additionalProperties: false,
|
|
54
|
+
},
|
|
55
|
+
run: (args) => {
|
|
56
|
+
const queries = Array.isArray(args.queries) ? args.queries.filter((query) => typeof query === 'string') : [];
|
|
57
|
+
if (queries.length === 0) {
|
|
58
|
+
return { isError: true, error: 'queries must be a non-empty array of strings.' };
|
|
59
|
+
}
|
|
60
|
+
const limit = typeof args.limit === 'number' ? Math.min(Math.max(Math.trunc(args.limit), 1), 20) : 5;
|
|
61
|
+
const hits = searchDocs(docs, queries, limit);
|
|
62
|
+
if (hits.length === 0) {
|
|
63
|
+
return `${header}\n\nNo section matches ${JSON.stringify(queries)}. ziprack_list_docs shows what is covered.`;
|
|
64
|
+
}
|
|
65
|
+
return [header, ...hits.map(({ doc, section }) => {
|
|
66
|
+
const where = section.anchor === null ? doc.name : `${doc.name}#${section.anchor}`;
|
|
67
|
+
return `---\n[${where}] ${doc.title}\n\n${section.text}`;
|
|
68
|
+
})].join('\n\n');
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
name: 'ziprack_read_doc',
|
|
73
|
+
description: 'One zipRACK doc in full, or one section of it by anchor.',
|
|
74
|
+
inputSchema: {
|
|
75
|
+
type: 'object',
|
|
76
|
+
properties: {
|
|
77
|
+
doc: { type: 'string', description: 'A doc name from ziprack_list_docs, e.g. manifest.' },
|
|
78
|
+
section: { type: 'string', description: 'A section anchor, e.g. acks-and-errors.' },
|
|
79
|
+
},
|
|
80
|
+
required: ['doc'],
|
|
81
|
+
additionalProperties: false,
|
|
82
|
+
},
|
|
83
|
+
run: (args) => {
|
|
84
|
+
const name = String(args.doc ?? '').replace(/\.md$/, '');
|
|
85
|
+
const doc = byName.get(name);
|
|
86
|
+
if (doc === undefined) {
|
|
87
|
+
return unknownDoc(name);
|
|
88
|
+
}
|
|
89
|
+
if (typeof args.section !== 'string' || args.section === '') {
|
|
90
|
+
return `${header}\n\n${doc.text}`;
|
|
91
|
+
}
|
|
92
|
+
const anchor = args.section.replace(/^#/, '');
|
|
93
|
+
const section = doc.sections.find((candidate) => candidate.anchor === anchor);
|
|
94
|
+
if (section === undefined) {
|
|
95
|
+
return {
|
|
96
|
+
isError: true,
|
|
97
|
+
error: `Doc [${name}] has no section [${anchor}].`,
|
|
98
|
+
sdk_version: SDK_VERSION,
|
|
99
|
+
sections: doc.sections.flatMap((candidate) => candidate.anchor === null ? [] : [candidate.anchor]),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
return `${header}\n\n${section.text}`;
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
];
|
|
106
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ziprack/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "JS SDK for zipRACK applets: talk to the Rack over postMessage, with a mock mode for standalone development.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -9,12 +9,17 @@
|
|
|
9
9
|
"types": "./dist/index.d.ts",
|
|
10
10
|
"exports": {
|
|
11
11
|
".": { "types": "./dist/index.d.ts", "import": "./dist/index.js" },
|
|
12
|
-
"./testing": { "types": "./dist/testing.d.ts", "import": "./dist/testing.js" }
|
|
12
|
+
"./testing": { "types": "./dist/testing.d.ts", "import": "./dist/testing.js" },
|
|
13
|
+
"./mcp": { "types": "./dist/mcp/index.d.ts", "import": "./dist/mcp/index.js" }
|
|
14
|
+
},
|
|
15
|
+
"bin": {
|
|
16
|
+
"ziprack-mcp": "./dist/mcp/bin.js"
|
|
13
17
|
},
|
|
14
18
|
"files": ["dist"],
|
|
15
19
|
"scripts": {
|
|
16
|
-
"build": "vite build && vite build --config vite.iife.config.ts && tsc -p tsconfig.build.json",
|
|
17
|
-
"
|
|
20
|
+
"build": "vite build && vite build --config vite.iife.config.ts && tsc -p tsconfig.build.json && npm run build:mcp",
|
|
21
|
+
"build:mcp": "tsc -p tsconfig.mcp.json && rm -rf dist/docs && cp -R ../docs dist/docs",
|
|
22
|
+
"typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.mcp.json --noEmit",
|
|
18
23
|
"test": "vitest run"
|
|
19
24
|
},
|
|
20
25
|
"ziprack": {
|
|
@@ -22,6 +27,7 @@
|
|
|
22
27
|
"capabilities": ["auth@1", "attempt@1", "activity@1", "db@1", "storage@1", "ai@1", "broadcast@1"]
|
|
23
28
|
},
|
|
24
29
|
"devDependencies": {
|
|
30
|
+
"@types/node": "^22.20.4",
|
|
25
31
|
"jsdom": "^26.1.0",
|
|
26
32
|
"typescript": "^5.9.2",
|
|
27
33
|
"vite": "^7.1.5",
|