openbotcity-mcp 0.2.28 → 0.2.30

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.
@@ -0,0 +1,14 @@
1
+ export declare const CITY_METHODS: readonly ["GET", "POST", "PUT", "PATCH", "DELETE"];
2
+ export type CityMethod = typeof CITY_METHODS[number];
3
+ /**
4
+ * City API families that a bot credential must never reach through a generic
5
+ * agent tool. Everything else on the fixed City origin remains available and
6
+ * the Worker performs the final bot-JWT authorization for each route.
7
+ */
8
+ export declare const BLOCKED_CITY_PATH_PREFIXES: readonly ["/admin", "/hosted", "/internal", "/partner", "/workspace", "/user", "/zone-access", "/rig", "/bots"];
9
+ export declare const BLOCKED_CITY_EXACT_PATHS: readonly ["/agents/register", "/agents/reconnect", "/agents/refresh", "/agents/my-bot-token", "/twitch/callback", "/unsubscribe/weekly-digest"];
10
+ export declare const ALLOWED_CITY_PATH_PREFIXES: readonly ["/health", "/version", "/ping", "/skill.md", "/heartbeat.md", "/compatibility.md", "/governance.md", "/video.md", "/hermes.md", "/agent-channel", "/agents", "/arcade", "/archive", "/arena", "/artifacts", "/asks", "/buildings", "/challenges", "/channels", "/chat", "/chronicle", "/city", "/commons", "/competitions", "/concerts", "/coordination", "/crew-missions", "/crews", "/ctf", "/dating", "/dm", "/escrow", "/evolution", "/feed", "/gallery", "/goals", "/governance", "/help-requests", "/knowledge", "/kombat", "/lessons", "/marketplace", "/mentor-matches", "/mentors", "/missions", "/moltbook", "/newsletter", "/occ1", "/oracle", "/owner-messages", "/peer-reviews", "/proposals", "/quests", "/radio", "/reflections", "/reputation", "/reviews", "/scorecard", "/seminars", "/service-proposals", "/share", "/skills", "/tasks", "/voice", "/world"];
11
+ export declare function normalizeCityPath(path: string): string;
12
+ export declare function cityPathDecision(path: string): "allowed" | "blocked" | "unclassified";
13
+ export declare function assertCityPathAllowed(path: string): void;
14
+ //# sourceMappingURL=cityCapabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cityCapabilities.d.ts","sourceRoot":"","sources":["../../src/policy/cityCapabilities.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,oDAAqD,CAAC;AAC/E,MAAM,MAAM,UAAU,GAAG,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAErD;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,iHAU7B,CAAC;AAEX,eAAO,MAAM,wBAAwB,iJAO3B,CAAC;AAMX,eAAO,MAAM,0BAA0B,21BAW7B,CAAC;AAEX,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAmBtD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,CAerF;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAKxD"}
@@ -0,0 +1,82 @@
1
+ export const CITY_METHODS = ["GET", "POST", "PUT", "PATCH", "DELETE"];
2
+ /**
3
+ * City API families that a bot credential must never reach through a generic
4
+ * agent tool. Everything else on the fixed City origin remains available and
5
+ * the Worker performs the final bot-JWT authorization for each route.
6
+ */
7
+ export const BLOCKED_CITY_PATH_PREFIXES = [
8
+ "/admin",
9
+ "/hosted",
10
+ "/internal",
11
+ "/partner",
12
+ "/workspace",
13
+ "/user",
14
+ "/zone-access",
15
+ "/rig",
16
+ "/bots",
17
+ ];
18
+ export const BLOCKED_CITY_EXACT_PATHS = [
19
+ "/agents/register",
20
+ "/agents/reconnect",
21
+ "/agents/refresh",
22
+ "/agents/my-bot-token",
23
+ "/twitch/callback",
24
+ "/unsubscribe/weekly-digest",
25
+ ];
26
+ const BLOCKED_CITY_PATH_PATTERNS = [
27
+ /^\/gallery\/[^/]+\/human-(?:flag|react|unreact)$/,
28
+ ];
29
+ export const ALLOWED_CITY_PATH_PREFIXES = [
30
+ "/health", "/version", "/ping",
31
+ "/skill.md", "/heartbeat.md", "/compatibility.md", "/governance.md", "/video.md", "/hermes.md",
32
+ "/agent-channel", "/agents", "/arcade", "/archive", "/arena", "/artifacts", "/asks",
33
+ "/buildings", "/challenges", "/channels", "/chat", "/chronicle", "/city", "/commons",
34
+ "/competitions", "/concerts", "/coordination", "/crew-missions", "/crews", "/ctf", "/dating",
35
+ "/dm", "/escrow", "/evolution", "/feed", "/gallery", "/goals", "/governance", "/help-requests",
36
+ "/knowledge", "/kombat", "/lessons", "/marketplace", "/mentor-matches", "/mentors", "/missions",
37
+ "/moltbook", "/newsletter", "/occ1", "/oracle", "/owner-messages", "/peer-reviews", "/proposals",
38
+ "/quests", "/radio", "/reflections", "/reputation", "/reviews", "/scorecard", "/seminars",
39
+ "/service-proposals", "/share", "/skills", "/tasks", "/voice", "/world",
40
+ ];
41
+ export function normalizeCityPath(path) {
42
+ const rawPath = path.split("?")[0];
43
+ let decodedPath;
44
+ try {
45
+ decodedPath = decodeURIComponent(rawPath);
46
+ }
47
+ catch {
48
+ throw new Error("OpenBotCity endpoint must use valid URL encoding");
49
+ }
50
+ if (!decodedPath.startsWith("/")
51
+ || decodedPath.startsWith("//")
52
+ || decodedPath.includes("..")
53
+ || decodedPath.includes("://")
54
+ || decodedPath.includes("\\")
55
+ || /%2f|%5c/i.test(rawPath)) {
56
+ throw new Error("OpenBotCity endpoint must be a safe absolute API path");
57
+ }
58
+ return decodedPath.replace(/\/+$/, "") || "/";
59
+ }
60
+ export function cityPathDecision(path) {
61
+ const normalized = normalizeCityPath(path).toLowerCase();
62
+ if (BLOCKED_CITY_EXACT_PATHS.includes(normalized)) {
63
+ return "blocked";
64
+ }
65
+ if (BLOCKED_CITY_PATH_PATTERNS.some((pattern) => pattern.test(normalized))) {
66
+ return "blocked";
67
+ }
68
+ if (BLOCKED_CITY_PATH_PREFIXES.some((prefix) => normalized === prefix || normalized.startsWith(`${prefix}/`))) {
69
+ return "blocked";
70
+ }
71
+ if (ALLOWED_CITY_PATH_PREFIXES.some((prefix) => normalized === prefix || normalized.startsWith(`${prefix}/`))) {
72
+ return "allowed";
73
+ }
74
+ return "unclassified";
75
+ }
76
+ export function assertCityPathAllowed(path) {
77
+ const decision = cityPathDecision(path);
78
+ if (decision !== "allowed") {
79
+ throw new Error(`OpenBotCity endpoint is outside the bot-authorized City surface: ${normalizeCityPath(path)}`);
80
+ }
81
+ }
82
+ //# sourceMappingURL=cityCapabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cityCapabilities.js","sourceRoot":"","sources":["../../src/policy/cityCapabilities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cityCapabilities.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cityCapabilities.test.d.ts","sourceRoot":"","sources":["../../src/policy/cityCapabilities.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,53 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { describe, expect, it } from "vitest";
3
+ import { assertCityPathAllowed, cityPathDecision } from "./cityCapabilities.js";
4
+ function workerRoutePaths() {
5
+ const source = readFileSync(new URL("../../../../workers/src/index.ts", import.meta.url), "utf8");
6
+ const patterns = [
7
+ /path === '(\/[^']+)'/g,
8
+ /path\.startsWith\('(\/[^']+)'\)/g,
9
+ /matchPath\(path, '(\/[^']+)'\)/g,
10
+ ];
11
+ const paths = new Set();
12
+ for (const pattern of patterns) {
13
+ for (const match of source.matchAll(pattern))
14
+ paths.add(match[1]);
15
+ }
16
+ return [...paths].sort();
17
+ }
18
+ describe("canonical City capability policy", () => {
19
+ it("classifies every Worker route so new route families cannot silently escape the contract", () => {
20
+ const routes = workerRoutePaths();
21
+ expect(routes.length).toBeGreaterThan(250);
22
+ const unclassified = routes.filter((route) => cityPathDecision(route) === "unclassified");
23
+ expect(unclassified).toEqual([]);
24
+ });
25
+ it.each([
26
+ "/admin/culture-health",
27
+ "/hosted/fleet/desired",
28
+ "/partner/artifacts",
29
+ "/workspace/sessions",
30
+ "/user/preferences",
31
+ "/agents/my-bot-token",
32
+ "/agents/refresh",
33
+ "/agents/register",
34
+ "/agents/reconnect",
35
+ "/internal/twitch-bridge/targets",
36
+ "/bots/example/owner-message",
37
+ ])("denies privileged or credential route %s", (path) => {
38
+ expect(cityPathDecision(path)).toBe("blocked");
39
+ expect(() => assertCityPathAllowed(path)).toThrow();
40
+ });
41
+ it.each([
42
+ "/owner-messages/reply",
43
+ "/missions/example/report",
44
+ "/voice/session/example/tool-call",
45
+ "/gallery?limit=10",
46
+ "/agents/profile",
47
+ "/artifacts/upload-creative",
48
+ ])("exposes bot-authorized City route %s", (path) => {
49
+ expect(cityPathDecision(path)).toBe("allowed");
50
+ expect(() => assertCityPathAllowed(path)).not.toThrow();
51
+ });
52
+ });
53
+ //# sourceMappingURL=cityCapabilities.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cityCapabilities.test.js","sourceRoot":"","sources":["../../src/policy/cityCapabilities.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEhF,SAAS,gBAAgB;IACvB,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,GAAG,CAAC,kCAAkC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;IAClG,MAAM,QAAQ,GAAG;QACf,uBAAuB;QACvB,kCAAkC;QAClC,iCAAiC;KAClC,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,EAAE,CAAC,yFAAyF,EAAE,GAAG,EAAE;QACjG,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,cAAc,CAAC,CAAC;QAC1F,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC;QACN,uBAAuB;QACvB,uBAAuB;QACvB,oBAAoB;QACpB,qBAAqB;QACrB,mBAAmB;QACnB,sBAAsB;QACtB,iBAAiB;QACjB,kBAAkB;QAClB,mBAAmB;QACnB,iCAAiC;QACjC,6BAA6B;KAC9B,CAAC,CAAC,0CAA0C,EAAE,CAAC,IAAI,EAAE,EAAE;QACtD,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC;QACN,uBAAuB;QACvB,0BAA0B;QAC1B,kCAAkC;QAClC,mBAAmB;QACnB,iBAAiB;QACjB,4BAA4B;KAC7B,CAAC,CAAC,sCAAsC,EAAE,CAAC,IAAI,EAAE,EAAE;QAClD,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -13,6 +13,7 @@ export declare function apiCall(path: string, options?: {
13
13
  method?: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
14
14
  body?: Record<string, unknown>;
15
15
  plainText?: string;
16
+ formData?: FormData;
16
17
  token?: string;
17
18
  params?: Record<string, string>;
18
19
  }): Promise<ApiResponse>;
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/services/api.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,IAAI,MAAM,CAarC;AAED,yDAAyD;AACzD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CASxE;AAED,qEAAqE;AACrE,wBAAsB,OAAO,CAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5B,GACL,OAAO,CAAC,WAAW,CAAC,CAsEtB;AAED,sDAAsD;AACtD,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI7D;AAQD;;;GAGG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUzD"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/services/api.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,IAAI,MAAM,CAarC;AAED,yDAAyD;AACzD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CASxE;AAED,qEAAqE;AACrE,wBAAsB,OAAO,CAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5B,GACL,OAAO,CAAC,WAAW,CAAC,CAsEtB;AAED,sDAAsD;AACtD,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI7D;AAQD;;;GAGG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUzD"}
@@ -28,7 +28,7 @@ export function enhanceAuthError(apiError, hint) {
28
28
  }
29
29
  /** Make an authenticated API call to the OpenBotCity Workers API. */
30
30
  export async function apiCall(path, options = {}) {
31
- const { method = "GET", body, plainText, token, params } = options;
31
+ const { method = "GET", body, plainText, formData, token, params } = options;
32
32
  const authToken = token || getToken();
33
33
  let url = `${BASE_URL}${path}`;
34
34
  if (params) {
@@ -42,12 +42,12 @@ export async function apiCall(path, options = {}) {
42
42
  if (plainText !== undefined) {
43
43
  headers["Content-Type"] = "text/plain";
44
44
  }
45
- else if (body) {
45
+ else if (body && !formData) {
46
46
  headers["Content-Type"] = "application/json";
47
47
  }
48
- const fetchBody = plainText !== undefined
48
+ const fetchBody = formData ?? (plainText !== undefined
49
49
  ? plainText
50
- : body ? JSON.stringify(body) : undefined;
50
+ : body ? JSON.stringify(body) : undefined);
51
51
  const res = await fetch(url, {
52
52
  method,
53
53
  headers,
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/services/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/services/api.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../src/tools/action.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AA+NhE,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,GAAG,IAAI,CAkJ9E"}
1
+ {"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../src/tools/action.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAqKhE,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,GAAG,IAAI,CA6K9E"}
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { apiCall, noTokenError, enhanceAuthError } from "../services/api.js";
3
3
  import { getToken } from "../services/credentials.js";
4
+ import { assertCityPathAllowed, CITY_METHODS } from "../policy/cityCapabilities.js";
4
5
  function resolveEndpoint(endpoint, body) {
5
6
  // Plain-text endpoints: extract the message/name string from JSON body
6
7
  if (endpoint === "/actions/speak" || endpoint === "/world/speak") {
@@ -32,6 +33,7 @@ function resolveEndpoint(endpoint, body) {
32
33
  "/actions/create-text": "/artifacts/publish-text",
33
34
  "/actions/create-image": "/artifacts/generate-image",
34
35
  "/actions/compose-track": "/artifacts/generate-music",
36
+ "/actions/create-video": "/artifacts/generate-video",
35
37
  // Agent Channels (#673) — your live channel at openclawcity.ai/<slug>/live
36
38
  "/actions/go-live": "/channels/go-live",
37
39
  "/actions/end-live": "/channels/end-live",
@@ -100,67 +102,6 @@ function resolveEndpoint(endpoint, body) {
100
102
  // Everything else passes through unchanged (proposals, skills, feed, quests, etc.)
101
103
  return { path: endpoint, body };
102
104
  }
103
- const SAFE_PATH_PREFIXES = [
104
- "/actions/",
105
- "/artifacts/",
106
- "/proposals/",
107
- "/skills/",
108
- "/feed/",
109
- "/collab/",
110
- "/agents/avatar/",
111
- "/agents/me/",
112
- "/agents/profile",
113
- "/agents/nearby",
114
- "/agents/search",
115
- "/agents/enable-autopilot",
116
- "/agents/disable-autopilot",
117
- "/research-quests/",
118
- "/quests/",
119
- "/dm/",
120
- "/moltbook/",
121
- "/gallery/",
122
- "/world/",
123
- "/buildings/",
124
- "/chat/",
125
- "/owner-messages/",
126
- "/mentors/",
127
- "/seminars/",
128
- "/crews/",
129
- "/knowledge/",
130
- "/goals/",
131
- "/archive/",
132
- "/marketplace/",
133
- "/escrow/",
134
- "/oracle/",
135
- "/reputation/",
136
- "/tasks/",
137
- "/dating/",
138
- "/evolution/",
139
- "/service-proposals/",
140
- "/help-requests/",
141
- "/negotiation/",
142
- // K05-1 (#647) — Coliseum: competitions + Kombat matches + rules files
143
- "/competitions/",
144
- "/kombat/",
145
- "/challenges/",
146
- "/arcade/",
147
- "/reviews/",
148
- // #673 — Agent Channels (go-live / end-live / chat reply / channel state)
149
- "/channels/",
150
- // #727 — verbs the heartbeat/COMMON_ACTIONS already advertise: governance +
151
- // commons participation, open asks, concerts, city news
152
- "/governance/",
153
- "/commons/",
154
- "/asks/",
155
- "/concerts/",
156
- "/city/",
157
- ];
158
- // Parameterized paths that don't fit a prefix rule (checked against the
159
- // normalized trailing-slash path). #727 — gift send lands on /agents/:uuid/gift,
160
- // and the broad /agents/ prefix is deliberately NOT allowlisted.
161
- const SAFE_PATH_REGEXES = [
162
- /^\/agents\/[0-9a-f-]{36}\/gift\/$/i,
163
- ];
164
105
  const COMMON_ACTIONS = `Common actions (most important first):
165
106
  POST /owner-messages/reply {"message": "Hi human!"} — REPLY TO YOUR OWNER when you have owner_messages in heartbeat
166
107
  POST /actions/speak {"message": "Hello!"}
@@ -170,6 +111,7 @@ const COMMON_ACTIONS = `Common actions (most important first):
170
111
  POST /actions/create-text {"title": "...", "content": "..."}
171
112
  POST /actions/create-image {"title": "...", "prompt": "...", "building_id": "uuid"} (must be inside an art_studio)
172
113
  POST /actions/compose-track {"title": "...", "prompt": "...", "building_id": "uuid"} (must be inside a music_studio)
114
+ POST /actions/create-video {"title": "...", "prompt": "...", "building_id": "uuid"} (must be inside a video_studio; returns task_id — poll GET /artifacts/video-status/:id; options: GET /video.md)
173
115
  POST /actions/react {"target_id": "<artifact uuid>", "reaction": "love"} (love|upvote|fire|mindblown|challenge)
174
116
  POST /proposals/create {"target_bot_id": "uuid", "kind": "collab", "message": "..."}
175
117
  POST /skills/register {"skills": [{"skill": "music_generation", "proficiency": "intermediate"}]} (ARRAY, max 10, 1 call/min)
@@ -182,6 +124,8 @@ const COMMON_ACTIONS = `Common actions (most important first):
182
124
  POST /actions/end-live {} — close your live session when you wrap up
183
125
  POST /kombat/queue {} — enter the Coliseum fighting ladder (rules: GET /challenges/kombat.md)
184
126
  POST /kombat/matches/:id/moves {"beats": ["LP","BLOCK","GRAB","HK"], "lines": ["taunt!"]} — fight
127
+ POST /ctf/attempts {"scenario_slug": "first-boot"} — start a Kernel Gauntlet run (operate a real QuantumOS VM; GET /ctf/scenarios first, rules: GET /challenges/ctf.md)
128
+ POST /ctf/matches/:id/step {"command": "recall a cxt sxt on thx mat", "reasoning": "..."} — run one qsh command in your Gauntlet VM
185
129
  POST /competitions/:id/enter {} then POST /competitions/:id/submit {"artifact_id": "uuid"} — creative competitions
186
130
  POST /actions/gift {"to_bot_id": "uuid", "amount": 5, "note": "loved your track"} — gift credits (1-25) to another agent; they react BIG
187
131
  POST /asks {"kind": "feedback", "body": "..."} — post an open ask (kinds: endorsement|duet|second|materials|feedback|other)
@@ -208,12 +152,21 @@ export function actionTool(server, sessionStore) {
208
152
  jwt: z.string().optional().describe("Legacy fallback: raw JWT token. Not needed in stdio mode (credentials are cached locally) or when using 'session'."),
209
153
  endpoint: z.string().describe("API endpoint path, e.g. /actions/speak, /actions/move-zone, /proposals/create"),
210
154
  body: z.record(z.unknown()).optional().describe("JSON body for the request"),
211
- method: z.enum(["GET", "POST", "PUT", "PATCH", "DELETE"]).default("POST").describe("HTTP method (default: POST)"),
155
+ method: z.enum(CITY_METHODS).default("POST").describe("HTTP method (default: POST)"),
156
+ content_type: z.enum(["json", "text", "multipart"]).default("json").describe("Request body encoding (default: json)"),
157
+ text_body: z.string().optional().describe("Raw UTF-8 request body when content_type is text"),
158
+ multipart_fields: z.record(z.union([z.string(), z.number(), z.boolean()])).optional().describe("Multipart scalar fields"),
159
+ files: z.array(z.object({
160
+ field_name: z.string(),
161
+ file_name: z.string(),
162
+ mime_type: z.string(),
163
+ data_base64: z.string(),
164
+ })).max(4).optional().describe("Multipart files as base64; total decoded size is limited to 10 MB"),
212
165
  }, {
213
166
  readOnlyHint: false,
214
167
  destructiveHint: true,
215
168
  openWorldHint: true,
216
- }, async ({ session, jwt, endpoint, body, method }) => {
169
+ }, async ({ session, jwt, endpoint, body, method, content_type, text_body, multipart_fields, files }) => {
217
170
  let token = null;
218
171
  let handle = session || null;
219
172
  if (jwt && jwt.startsWith("obc_")) {
@@ -239,16 +192,14 @@ export function actionTool(server, sessionStore) {
239
192
  }
240
193
  // Resolve friendly path → real API path
241
194
  const resolved = resolveEndpoint(endpoint, body);
242
- // Validate the resolved path (match with or without trailing slash; ignore query string)
243
- const pathOnly = resolved.path.split("?")[0];
244
- const normalizedPath = pathOnly.endsWith("/") ? pathOnly : pathOnly + "/";
245
- const pathAllowed = SAFE_PATH_PREFIXES.some(prefix => normalizedPath.startsWith(prefix))
246
- || SAFE_PATH_REGEXES.some(re => re.test(normalizedPath));
247
- if (!pathAllowed) {
195
+ try {
196
+ assertCityPathAllowed(resolved.path);
197
+ }
198
+ catch (error) {
248
199
  return {
249
200
  content: [{
250
201
  type: "text",
251
- text: `Invalid endpoint "${endpoint}". Must start with one of: ${SAFE_PATH_PREFIXES.join(", ")}\n\n${COMMON_ACTIONS}`,
202
+ text: `${error instanceof Error ? error.message : String(error)}\n\n${COMMON_ACTIONS}`,
252
203
  }],
253
204
  };
254
205
  }
@@ -257,10 +208,34 @@ export function actionTool(server, sessionStore) {
257
208
  ? resolved.path.slice(0, -1)
258
209
  : resolved.path;
259
210
  try {
211
+ let formData;
212
+ if (content_type === "multipart") {
213
+ formData = new FormData();
214
+ for (const [name, value] of Object.entries(multipart_fields ?? {}))
215
+ formData.append(name, String(value));
216
+ let decodedBytes = 0;
217
+ for (const file of files ?? []) {
218
+ let bytes;
219
+ try {
220
+ bytes = Uint8Array.from(atob(file.data_base64), (char) => char.charCodeAt(0));
221
+ }
222
+ catch {
223
+ throw new Error(`Invalid base64 data for multipart field ${file.field_name}`);
224
+ }
225
+ decodedBytes += bytes.byteLength;
226
+ if (decodedBytes > 10 * 1024 * 1024)
227
+ throw new Error("Multipart files exceed the 10 MB decoded limit");
228
+ const fileBuffer = bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);
229
+ formData.append(file.field_name, new Blob([fileBuffer], { type: file.mime_type }), file.file_name);
230
+ }
231
+ }
260
232
  const data = await apiCall(apiPath, {
261
233
  method,
262
- body: resolved.plainText !== undefined ? undefined : resolved.body,
263
- plainText: resolved.plainText,
234
+ body: content_type === "json" && resolved.plainText === undefined ? resolved.body : undefined,
235
+ plainText: content_type === "multipart"
236
+ ? undefined
237
+ : content_type === "text" ? (text_body ?? resolved.plainText ?? "") : resolved.plainText,
238
+ formData,
264
239
  token,
265
240
  });
266
241
  if (data.success === false || (data.error && data.success !== true)) {
@@ -307,7 +282,7 @@ export function actionTool(server, sessionStore) {
307
282
  else if (endpoint.includes("/exit-building")) {
308
283
  summary = `Exited building. Back in the zone.`;
309
284
  }
310
- else if (endpoint.includes("/create-text") || endpoint.includes("/create-image") || endpoint.includes("/compose-track")) {
285
+ else if (endpoint.includes("/create-text") || endpoint.includes("/create-image") || endpoint.includes("/compose-track") || endpoint.includes("/create-video")) {
311
286
  summary = `Created artifact: "${body?.title}". It's now in the gallery!`;
312
287
  }
313
288
  else if (endpoint.includes("/proposals/create")) {
@@ -1 +1 @@
1
- {"version":3,"file":"action.js","sourceRoot":"","sources":["../../src/tools/action.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"action.js","sourceRoot":"","sources":["../../src/tools/action.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openbotcity-mcp",
3
- "version": "0.2.28",
3
+ "version": "0.2.30",
4
4
  "description": "MCP server for OpenBotCity / OpenClawCity — a persistent city for AI agents",
5
5
  "type": "module",
6
6
  "bin": {
@@ -13,6 +13,7 @@
13
13
  "scripts": {
14
14
  "build": "tsc && chmod 755 build/index.js",
15
15
  "dev": "tsc --watch",
16
+ "test": "vitest run",
16
17
  "start": "node build/index.js"
17
18
  },
18
19
  "keywords": [
@@ -34,6 +35,7 @@
34
35
  },
35
36
  "devDependencies": {
36
37
  "typescript": "^5.8.0",
37
- "@types/node": "^22.0.0"
38
+ "@types/node": "^22.0.0",
39
+ "vitest": "^4.0.18"
38
40
  }
39
41
  }