cmskite-mcp 0.1.1 → 0.1.2
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/README.md +13 -5
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/tools/diagnose.js +18 -0
- package/dist/tools/diagnose.js.map +1 -1
- package/dist/tools/integrate.js +31 -8
- package/dist/tools/integrate.js.map +1 -1
- package/dist/tools/workspace.js +20 -1
- package/dist/tools/workspace.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -10,6 +10,11 @@ what the assistant needs; the defaults are read and write content. The token is
|
|
|
10
10
|
shown once, and that dialogue generates the block below for whichever client you
|
|
11
11
|
pick — **Set up a client** on the same screen shows it again afterwards.
|
|
12
12
|
|
|
13
|
+
The first start downloads the package, which can take longer than a client
|
|
14
|
+
waits for a server (often 30 seconds). If yours reports a timeout, run
|
|
15
|
+
`npx -y cmskite-mcp@latest` once in a terminal to fill the cache, or
|
|
16
|
+
`npm install -g cmskite-mcp` and use `cmskite-mcp` as the command.
|
|
17
|
+
|
|
13
18
|
Every client runs the same process. They disagree only about where it is written
|
|
14
19
|
and under what key, and a block copied from the wrong one pastes without
|
|
15
20
|
complaint and then does nothing.
|
|
@@ -113,7 +118,8 @@ Settings (`cmd-shift-p` → “open settings”) — context servers, marked cus
|
|
|
113
118
|
|
|
114
119
|
## Tools
|
|
115
120
|
|
|
116
|
-
**Where am I** — `whoami`, `list_projects`, `get_project`, `get_project_summary
|
|
121
|
+
**Where am I** — `whoami`, `list_projects`, `get_project`, `get_project_summary`,
|
|
122
|
+
`update_project`
|
|
117
123
|
|
|
118
124
|
**Shape** — `create_workspace`, `create_project`, `list_categories`,
|
|
119
125
|
`create_category`, `update_category`, `delete_category`, `list_tags`,
|
|
@@ -125,9 +131,11 @@ Settings (`cmd-shift-p` → “open settings”) — context servers, marked cus
|
|
|
125
131
|
**Keys** — `list_api_keys`, `create_api_key`
|
|
126
132
|
|
|
127
133
|
**Connecting a website** — `get_integration_guide`, `check_integration`,
|
|
128
|
-
`get_content_analytics`
|
|
134
|
+
`get_content_analytics`, `get_post_analytics`
|
|
129
135
|
|
|
130
|
-
Start with `whoami`, then `list_projects` for a `prj_…` id.
|
|
136
|
+
Start with `whoami`, then `list_projects` for a `prj_…` id. `whoami` returns
|
|
137
|
+
`agentGrants`, the token's own list: a tool works only when that list and the
|
|
138
|
+
owner's role both allow it. Every content tool
|
|
131
139
|
needs one unless `CMSKITE_PROJECT_ID` is set.
|
|
132
140
|
|
|
133
141
|
### Connecting a website
|
|
@@ -149,7 +157,7 @@ Each tool needs the matching grant, and a token has only what was ticked:
|
|
|
149
157
|
|---|---|
|
|
150
158
|
| `whoami` | `member.read` — tick it, or the first call an assistant makes is the one that fails |
|
|
151
159
|
| `list_projects`, `get_project`, `get_project_summary` | `project.read` |
|
|
152
|
-
| `create_project` | `project.write` |
|
|
160
|
+
| `create_project`, `update_project` (including allowed origins) | `project.write` |
|
|
153
161
|
| `create_workspace` | `workspace.create` |
|
|
154
162
|
| `list_*`, `get_post`, `search_posts` | `content.read` |
|
|
155
163
|
| `create_*`, `update_*` | `content.write` |
|
|
@@ -158,7 +166,7 @@ Each tool needs the matching grant, and a token has only what was ticked:
|
|
|
158
166
|
| `list_api_keys` | `apikey.read` |
|
|
159
167
|
| `create_api_key` | `apikey.write` |
|
|
160
168
|
| `check_integration` | `project.read` |
|
|
161
|
-
| `get_content_analytics` | `analytics.read` |
|
|
169
|
+
| `get_content_analytics`, `get_post_analytics` | `analytics.read` |
|
|
162
170
|
| `get_integration_guide` | none — it reads nothing and changes nothing |
|
|
163
171
|
|
|
164
172
|
New posts are drafts. Publishing is `update_post` with `status: "published"` —
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
2
3
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
4
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
5
|
import { CmsKiteClient } from './client.js';
|
|
@@ -14,10 +15,12 @@ import { allTools, registerTools } from './tools/index.js';
|
|
|
14
15
|
* translator, not a second authorization layer, which is the only arrangement
|
|
15
16
|
* where the two cannot disagree.
|
|
16
17
|
*/
|
|
18
|
+
/** From package.json, so the handshake reports the version that is actually running. */
|
|
19
|
+
const { version } = createRequire(import.meta.url)('../package.json');
|
|
17
20
|
async function main() {
|
|
18
21
|
const config = readConfig();
|
|
19
22
|
const client = new CmsKiteClient(config);
|
|
20
|
-
const server = new McpServer({ name: 'cmskite', version
|
|
23
|
+
const server = new McpServer({ name: 'cmskite', version }, {
|
|
21
24
|
instructions: 'CMSKite manages blog content behind an API. A workspace holds projects; a project is ' +
|
|
22
25
|
'one website and holds the posts, categories, tags and authors. Start with `whoami`, ' +
|
|
23
26
|
'then `list_projects` to get a `prj_...` id — every content tool needs one unless ' +
|
|
@@ -31,7 +34,7 @@ async function main() {
|
|
|
31
34
|
// message corrupts the stream and the client drops the connection, so every
|
|
32
35
|
// diagnostic in this process goes to stderr.
|
|
33
36
|
await server.connect(new StdioServerTransport());
|
|
34
|
-
process.stderr.write(`cmskite-mcp ready: ${allTools.length} tools against ${config.apiUrl}\n`);
|
|
37
|
+
process.stderr.write(`cmskite-mcp ${version} ready: ${allTools.length} tools against ${config.apiUrl}\n`);
|
|
35
38
|
}
|
|
36
39
|
main().catch((err) => {
|
|
37
40
|
process.stderr.write(`cmskite-mcp failed to start: ${err instanceof Error ? err.message : String(err)}\n`);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAE1D;;;;;;;;;GASG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAC3B,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAA;IAExC,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAE1D;;;;;;;;;GASG;AACH,wFAAwF;AACxF,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAwB,CAAA;AAE5F,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAC3B,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAA;IAExC,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,EAC5B;QACE,YAAY,EACV,uFAAuF;YACvF,sFAAsF;YACtF,mFAAmF;YACnF,mFAAmF;YACnF,8EAA8E;YAC9E,sFAAsF;YACtF,4DAA4D;KAC/D,CACF,CAAA;IAED,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;IAEvC,gFAAgF;IAChF,4EAA4E;IAC5E,6CAA6C;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAA;IAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,OAAO,WAAW,QAAQ,CAAC,MAAM,kBAAkB,MAAM,CAAC,MAAM,IAAI,CAAC,CAAA;AAC3G,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC1G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
|
package/dist/tools/diagnose.js
CHANGED
|
@@ -74,5 +74,23 @@ export const diagnosticTools = [
|
|
|
74
74
|
return { summary, topPosts: top };
|
|
75
75
|
},
|
|
76
76
|
}),
|
|
77
|
+
defineTool({
|
|
78
|
+
name: 'get_post_analytics',
|
|
79
|
+
title: 'One post, day by day',
|
|
80
|
+
description: 'Views, unique readers and clicks for one post, per day. The way to check that a specific ' +
|
|
81
|
+
'post\'s view landed after wiring up tracking: open the post in a real browser (headless ' +
|
|
82
|
+
'browsers are not counted), wait about a minute for the rollup, then call this. A reader ' +
|
|
83
|
+
'counts once per post per day. Requires the analytics.read grant.',
|
|
84
|
+
input: {
|
|
85
|
+
projectId: z.string().describe('The project id, as `prj_...`.'),
|
|
86
|
+
postId: z.string().describe('The post id, as `post_...`. Not the slug.'),
|
|
87
|
+
from: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional().describe('Inclusive UTC day. Defaults to 30 days ago.'),
|
|
88
|
+
to: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional().describe('Inclusive UTC day. Defaults to today.'),
|
|
89
|
+
},
|
|
90
|
+
readOnly: true,
|
|
91
|
+
run: (client, args) => client.request(`/v1/analytics/content/posts/${segment(args.postId)}`, {
|
|
92
|
+
query: { projectId: args.projectId, from: args.from, to: args.to },
|
|
93
|
+
}),
|
|
94
|
+
}),
|
|
77
95
|
];
|
|
78
96
|
//# sourceMappingURL=diagnose.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnose.js","sourceRoot":"","sources":["../../src/tools/diagnose.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,UAAU,CAAC;QACT,IAAI,EAAE,mBAAmB;QACzB,KAAK,EAAE,mCAAmC;QAC1C,WAAW,EACT,uFAAuF;YACvF,oFAAoF;YACpF,2DAA2D;YAC3D,0FAA0F;YAC1F,0FAA0F;YAC1F,4EAA4E;QAC9E,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE;QAC1E,QAAQ,EAAE,IAAI;QACd,GAAG,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CACpB,MAAM,CAAC,OAAO,CAAC,gBAAgB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC;KAC/E,CAAC;IAEF,UAAU,CAAC;QACT,IAAI,EAAE,uBAAuB;QAC7B,KAAK,EAAE,2BAA2B;QAClC,WAAW,EACT,yFAAyF;YACzF,uFAAuF;YACvF,sFAAsF;YACtF,6EAA6E;YAC7E,uBAAuB;QACzB,KAAK,EAAE;YACL,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;YAC/D,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,KAAK,CAAC,qBAAqB,CAAC;iBAC5B,QAAQ,EAAE;iBACV,QAAQ,CAAC,6CAA6C,CAAC;YAC1D,EAAE,EAAE,CAAC;iBACF,MAAM,EAAE;iBACR,KAAK,CAAC,qBAAqB,CAAC;iBAC5B,QAAQ,EAAE;iBACV,QAAQ,CAAC,uCAAuC,CAAC;YACpD,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,EAAE,CAAC;iBACP,QAAQ,EAAE;iBACV,QAAQ,CAAC,6DAA6D,CAAC;SAC3E;QACD,QAAQ,EAAE,IAAI;QACd,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;YAC1B,MAAM,KAAK,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAA;YACzE,yEAAyE;YACzE,yEAAyE;YACzE,wEAAwE;YACxE,YAAY;YACZ,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACvC,MAAM,CAAC,OAAO,CAAU,+BAA+B,EAAE,EAAE,KAAK,EAAE,CAAC;gBACnE,MAAM,CAAC,OAAO,CAAU,iCAAiC,EAAE;oBACzD,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE;iBAChD,CAAC;aACH,CAAC,CAAA;YACF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAA;QACnC,CAAC;KACF,CAAC;CACM,CAAA"}
|
|
1
|
+
{"version":3,"file":"diagnose.js","sourceRoot":"","sources":["../../src/tools/diagnose.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/integrate.js
CHANGED
|
@@ -23,6 +23,7 @@ import { defineTool } from './register.js';
|
|
|
23
23
|
const framework = z
|
|
24
24
|
.enum([
|
|
25
25
|
'nextjs-app',
|
|
26
|
+
'nextjs',
|
|
26
27
|
'nextjs-pages',
|
|
27
28
|
'react',
|
|
28
29
|
'node',
|
|
@@ -34,7 +35,8 @@ const framework = z
|
|
|
34
35
|
'other',
|
|
35
36
|
])
|
|
36
37
|
.describe('What the project is. Look at the files rather than guessing. ' +
|
|
37
|
-
'JavaScript: `next` in package.json with an app/ directory is `nextjs-app
|
|
38
|
+
'JavaScript: `next` in package.json with an app/ directory is `nextjs-app` (`nextjs` is ' +
|
|
39
|
+
'accepted as the same thing), `next` with ' +
|
|
38
40
|
'pages/ is `nextjs-pages`, `react` without `next` is `react`, a package.json with no ' +
|
|
39
41
|
'framework is `node`. ' +
|
|
40
42
|
'Not JavaScript: .html files and no build step is `html`; wp-config.php or a wp-content/ ' +
|
|
@@ -76,15 +78,20 @@ const RAW = new Set(['html', 'php', 'wordpress', 'laravel', 'python', 'other']);
|
|
|
76
78
|
/** A site whose content is fetched by the browser, not by a server. */
|
|
77
79
|
const BROWSER_FETCHED = new Set(['html', 'react']);
|
|
78
80
|
function guide(args) {
|
|
81
|
+
// The obvious first guess. The App Router is what `create-next-app` makes today.
|
|
82
|
+
if (args.framework === 'nextjs')
|
|
83
|
+
args = { ...args, framework: 'nextjs-app' };
|
|
79
84
|
const analytics = args.includeAnalytics !== false;
|
|
80
85
|
const raw = RAW.has(args.framework);
|
|
81
86
|
const notes = [
|
|
82
87
|
'Fetch the content on the server, report the view from the browser. That split IS the ' +
|
|
83
88
|
'integration, and it is the part that gets missed: a site that only fetches content ' +
|
|
84
89
|
'works perfectly and counts nobody.',
|
|
85
|
-
'A
|
|
86
|
-
'
|
|
87
|
-
'without taking the site down.'
|
|
90
|
+
'A website uses a PROJECT key, which starts `csk_live_`. It is read-only and returns ' +
|
|
91
|
+
'published content only, so it is safe in a page — use two anyway, so the one in the ' +
|
|
92
|
+
'page can be revoked without taking the site down. An AGENT token (`cka_live_`, the kind ' +
|
|
93
|
+
'this MCP server runs on) is not a website key: it can write and delete, and must never ' +
|
|
94
|
+
'be put in a browser bundle or reused as the site key, even though it can read content.',
|
|
88
95
|
'A view is reported by the page that renders the post, never inferred from an API ' +
|
|
89
96
|
'request. A build fetching every post is two hundred requests and no readers.',
|
|
90
97
|
'The tracker needs the post’s `id` (`post_...`), not its slug. Render the id into the ' +
|
|
@@ -99,8 +106,19 @@ function guide(args) {
|
|
|
99
106
|
notes.push('Set allowed origins under Project → Settings → Allowed origins. Until that is set, any ' +
|
|
100
107
|
'page anywhere can read this project’s published content.');
|
|
101
108
|
}
|
|
109
|
+
if (args.framework.startsWith('nextjs') || args.framework === 'react') {
|
|
110
|
+
notes.push('Browser variables (NEXT_PUBLIC_*, VITE_*) are compiled into the bundle at BUILD time. ' +
|
|
111
|
+
'Setting one on the host changes nothing until the site is rebuilt and redeployed; until ' +
|
|
112
|
+
'then the tracker reads undefined and stays off. The tracker below is written so a ' +
|
|
113
|
+
'missing key switches it off instead of failing.');
|
|
114
|
+
}
|
|
115
|
+
notes.push('Views count once per reader, per post, per day, and only from a real browser: headless ' +
|
|
116
|
+
'browsers, curl and scripts are dropped silently (the endpoint still answers 202). To ' +
|
|
117
|
+
'verify, open a post in an ordinary browser and look for the POST to /v1/blog/events.');
|
|
102
118
|
if (args.projectId) {
|
|
103
|
-
notes.push(`Create the keys for project ${args.projectId} with the create_api_key tool
|
|
119
|
+
notes.push(`Create the keys for project ${args.projectId} with the create_api_key tool. That needs ` +
|
|
120
|
+
'the apikey.write grant; if this token lacks it, the person creates the key in the ' +
|
|
121
|
+
'dashboard under Project → API keys and puts it in the site themselves.');
|
|
104
122
|
}
|
|
105
123
|
const keys = browserOnly(args.framework)
|
|
106
124
|
? [
|
|
@@ -237,8 +255,13 @@ import { useTrackView } from 'cmskite/react'
|
|
|
237
255
|
* and the tracker remembers the post for the tab besides. Nothing here can
|
|
238
256
|
* throw, and nothing blocks the page.
|
|
239
257
|
*/
|
|
258
|
+
// A project key (csk_live_...), never an agent token. NEXT_PUBLIC_ values are
|
|
259
|
+
// baked in at build time: after setting it, redeploy.
|
|
260
|
+
const KEY = process.env.NEXT_PUBLIC_CMSKITE_KEY
|
|
261
|
+
|
|
240
262
|
export function TrackView({ postId }: { postId: string }) {
|
|
241
|
-
|
|
263
|
+
// Off until the key exists, and off in \`next dev\` so local reloads are not counted.
|
|
264
|
+
useTrackView(postId, { apiKey: KEY ?? '', enabled: Boolean(KEY) && process.env.NODE_ENV === 'production' })
|
|
242
265
|
return null
|
|
243
266
|
}
|
|
244
267
|
`;
|
|
@@ -309,7 +332,7 @@ ${analytics ? "import { useTrackView } from 'cmskite/react'\n" : ''}import type
|
|
|
309
332
|
import { cms } from '../../lib/cmskite'
|
|
310
333
|
|
|
311
334
|
export default function BlogPost({ post }: { post: Post }) {
|
|
312
|
-
${analytics ? " useTrackView(post.id, {
|
|
335
|
+
${analytics ? " // Off until NEXT_PUBLIC_CMSKITE_KEY exists (it is baked in at build time), and off in dev.\n useTrackView(post.id, {\n apiKey: process.env.NEXT_PUBLIC_CMSKITE_KEY ?? '',\n enabled: Boolean(process.env.NEXT_PUBLIC_CMSKITE_KEY) && process.env.NODE_ENV === 'production',\n })\n\n" : ''} return (
|
|
313
336
|
<article>
|
|
314
337
|
<h1>{post.title}</h1>
|
|
315
338
|
<div dangerouslySetInnerHTML={{ __html: post.body }} />
|
|
@@ -356,7 +379,7 @@ export function BlogPost({ slug }: { slug: string }) {
|
|
|
356
379
|
const [post, setPost] = useState<Post | null>(null)
|
|
357
380
|
const [error, setError] = useState<string | null>(null)
|
|
358
381
|
|
|
359
|
-
${analytics ? " useTrackView(post?.id, {
|
|
382
|
+
${analytics ? " // Off until VITE_CMSKITE_KEY exists (it is baked in at build time), and off in dev.\n useTrackView(post?.id, {\n apiKey: import.meta.env.VITE_CMSKITE_KEY ?? '',\n enabled: Boolean(import.meta.env.VITE_CMSKITE_KEY) && import.meta.env.PROD,\n })\n\n" : ''} useEffect(() => {
|
|
360
383
|
// Cancelled on unmount, and when a newer slug supersedes this one.
|
|
361
384
|
const controller = new AbortController()
|
|
362
385
|
cms.posts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrate.js","sourceRoot":"","sources":["../../src/tools/integrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,SAAS,GAAG,CAAC;KAChB,IAAI,CAAC;IACJ,YAAY;IACZ,cAAc;IACd,OAAO;IACP,MAAM;IACN,MAAM;IACN,KAAK;IACL,WAAW;IACX,SAAS;IACT,QAAQ;IACR,OAAO;CACR,CAAC;KACD,QAAQ,CACP,+DAA+D;IAC7D,yFAAyF;IACzF,sFAAsF;IACtF,uBAAuB;IACvB,0FAA0F;IAC1F,2FAA2F;IAC3F,gFAAgF;IAChF,0FAA0F;IAC1F,WAAW,CACd,CAAA;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,UAAU,CAAC;QACT,IAAI,EAAE,uBAAuB;QAC7B,KAAK,EAAE,4CAA4C;QACnD,WAAW,EACT,0FAA0F;YAC1F,0FAA0F;YAC1F,wFAAwF;YACxF,iFAAiF;YACjF,yFAAyF;YACzF,uFAAuF;YACvF,uCAAuC;YACvC,uFAAuF;YACvF,sDAAsD;YACtD,8CAA8C;QAChD,KAAK,EAAE;YACL,SAAS;YACT,SAAS,EAAE,CAAC;iBACT,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,8DAA8D,CAAC;YAC3E,gBAAgB,EAAE,CAAC;iBAChB,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,QAAQ,CAAC,qFAAqF,CAAC;SACnG;QACD,QAAQ,EAAE,IAAI;QACd,GAAG,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KACrD,CAAC;CACH,CAAA;AAQD,gFAAgF;AAChF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;AAE/E,uEAAuE;AACvE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAElD,SAAS,KAAK,CAAC,IAAe;IAO5B,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,KAAK,KAAK,CAAA;IACjD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAEnC,MAAM,KAAK,GAAG;QACZ,uFAAuF;YACrF,qFAAqF;YACrF,oCAAoC;QACtC,
|
|
1
|
+
{"version":3,"file":"integrate.js","sourceRoot":"","sources":["../../src/tools/integrate.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/workspace.js
CHANGED
|
@@ -14,7 +14,9 @@ export const workspaceTools = [
|
|
|
14
14
|
name: 'whoami',
|
|
15
15
|
title: 'Who this token is',
|
|
16
16
|
description: 'The account this token acts as and the workspaces it can see. Call this first in a new ' +
|
|
17
|
-
'conversation: it confirms the token works and names the workspace everything else happens in.'
|
|
17
|
+
'conversation: it confirms the token works and names the workspace everything else happens in. ' +
|
|
18
|
+
'`agentGrants` is what THIS TOKEN may do; `permissions` is what its owner may do. A tool ' +
|
|
19
|
+
'works only when both allow it, so read `agentGrants` to know which tools will succeed.',
|
|
18
20
|
input: {},
|
|
19
21
|
readOnly: true,
|
|
20
22
|
run: (client) => client.request('/v1/auth/me'),
|
|
@@ -61,6 +63,23 @@ export const workspaceTools = [
|
|
|
61
63
|
},
|
|
62
64
|
run: (client, args) => client.request('/v1/projects', { method: 'POST', body: args }),
|
|
63
65
|
}),
|
|
66
|
+
defineTool({
|
|
67
|
+
name: 'update_project',
|
|
68
|
+
title: 'Update a project',
|
|
69
|
+
description: 'Change a project\'s name, description, website, or allowed origins. Only the fields ' +
|
|
70
|
+
'passed change. `allowedOrigins` REPLACES the list: pass every origin, like ' +
|
|
71
|
+
'["https://example.com", "https://www.example.com"] — scheme and host, no path. It decides ' +
|
|
72
|
+
'which websites may use the project key from a browser. Requires the project.write grant.',
|
|
73
|
+
input: {
|
|
74
|
+
projectId: z.string().describe('The project id, as `prj_...`.'),
|
|
75
|
+
name: z.string().min(1).max(200).optional(),
|
|
76
|
+
description: z.string().max(500).nullable().optional(),
|
|
77
|
+
websiteName: z.string().max(200).nullable().optional(),
|
|
78
|
+
websiteUrl: z.string().max(300).nullable().optional().describe('Display only. Not a CORS allowance.'),
|
|
79
|
+
allowedOrigins: z.array(z.string()).max(20).optional().describe('The complete list. [] removes the restriction.'),
|
|
80
|
+
},
|
|
81
|
+
run: (client, { projectId, ...body }) => client.request(`/v1/projects/${segment(projectId)}`, { method: 'PATCH', body }),
|
|
82
|
+
}),
|
|
64
83
|
defineTool({
|
|
65
84
|
name: 'get_project_summary',
|
|
66
85
|
title: 'Project summary',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/tools/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,UAAU,CAAC;QACT,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACT,yFAAyF;YACzF
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/tools/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,UAAU,CAAC;QACT,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACT,yFAAyF;YACzF,gGAAgG;YAChG,0FAA0F;YAC1F,wFAAwF;QAC1F,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,IAAI;QACd,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC;KAC/C,CAAC;IAEF,UAAU,CAAC;QACT,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,4EAA4E;YAC5E,yFAAyF;YACzF,wFAAwF;YACxF,mFAAmF;QACrF,KAAK,EAAE;YACL,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,qCAAqC,CAAC;SACjF;QACD,GAAG,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CACpB,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;KAClF,CAAC;IAEF,UAAU,CAAC;QACT,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,0FAA0F;QAC5F,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,IAAI;QACd,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;KAChD,CAAC;IAEF,UAAU,CAAC;QACT,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,kEAAkE;QAC/E,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE;QAC1E,QAAQ,EAAE,IAAI;QACd,GAAG,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;KACjF,CAAC;IAEF,UAAU,CAAC;QACT,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,sEAAsE;YACtE,qFAAqF;QACvF,KAAK,EAAE;YACL,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;YAChC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;YACpF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;YAC3C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;YAC3C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;SAC3F;QACD,GAAG,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;KACtF,CAAC;IAEF,UAAU,CAAC;QACT,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,sFAAsF;YACtF,6EAA6E;YAC7E,4FAA4F;YAC5F,0FAA0F;QAC5F,KAAK,EAAE;YACL,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;YAC/D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;YAC3C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;YACtD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;YACtD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;YACrG,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;SAClH;QACD,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CACtC,MAAM,CAAC,OAAO,CAAC,gBAAgB,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;KAClF,CAAC;IAEF,UAAU,CAAC;QACT,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,4FAA4F;YAC5F,sEAAsE;QACxE,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE;QAC1E,QAAQ,EAAE,IAAI;QACd,GAAG,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;KACzF,CAAC;CACM,CAAA"}
|
package/package.json
CHANGED