openbotcity-mcp 0.2.29 → 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":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,6BAA6B,CAAC;AASlF,4EAA4E;AAC5E,MAAM,UAAU,YAAY;IAC1B,IAAI,WAAW,EAAE,EAAE,CAAC;QAClB,OAAO;YACL,0BAA0B;YAC1B,EAAE;YACF,2EAA2E;YAC3E,wDAAwD;YACxD,EAAE;YACF,iFAAiF;YACjF,iEAAiE;SAClE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IACD,OAAO,2IAA2I,CAAC;AACrJ,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,IAAa;IAC9D,MAAM,IAAI,GAAG,0BAA0B,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAClF,OAAO;QACL,IAAI;QACJ,EAAE;QACF,wEAAwE;QACxE,wHAAwH;QACxH,sDAAsD;KACvD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,qEAAqE;AACrE,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,IAAY,EACZ,UAMI,EAAE;IAEN,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACnE,MAAM,SAAS,GAAG,KAAK,IAAI,QAAQ,EAAE,CAAC;IAEtC,IAAI,GAAG,GAAG,GAAG,QAAQ,GAAG,IAAI,EAAE,CAAC;IAC/B,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,YAAY,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;QACjD,GAAG,IAAI,IAAI,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;IACvC,CAAC;IAED,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,SAAS,EAAE,CAAC;IACnD,CAAC;IACD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC;IACzC,CAAC;SAAM,IAAI,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;IAC/C,CAAC;IAED,MAAM,SAAS,GAAG,SAAS,KAAK,SAAS;QACvC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE5C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,MAAM;QACN,OAAO;QACP,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxD,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAE1D,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,6CAA6C;QAC7C,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAiB,CAAC;gBAChD,+CAA+C;gBAC/C,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBACvB,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;oBACxB,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,cAAc,CAAC;gBAClD,CAAC;gBACD,OAAO,OAAO,CAAC;YACjB,CAAC;YAAC,MAAM,CAAC;gBACP,gDAAgD;YAClD,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,aAAa,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;SACxD,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,6BAA6B,WAAW,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;SAC1E,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,OAAO,MAAM,GAAG,CAAC,IAAI,EAAiB,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,gDAAgD,GAAG,CAAC,MAAM,GAAG;SACrE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,sDAAsD;AACtD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY;IAC1C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAC;IAC9C,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACvE,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AAED,sEAAsE;AAEtE,IAAI,aAAa,GAAkB,IAAI,CAAC;AACxC,IAAI,cAAc,GAAG,CAAC,CAAC;AACvB,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;AAErD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,CAAC;QACH,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,GAAG,eAAe,EAAE,CAAC;YACpE,aAAa,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,CAAC;YAC7C,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,CAAC,kDAAkD;IACjE,CAAC;AACH,CAAC"}
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;AAqOhE,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") {
@@ -101,69 +102,6 @@ function resolveEndpoint(endpoint, body) {
101
102
  // Everything else passes through unchanged (proposals, skills, feed, quests, etc.)
102
103
  return { path: endpoint, body };
103
104
  }
104
- const SAFE_PATH_PREFIXES = [
105
- "/actions/",
106
- "/artifacts/",
107
- "/proposals/",
108
- "/skills/",
109
- "/feed/",
110
- "/collab/",
111
- "/agents/avatar/",
112
- "/agents/me/",
113
- "/agents/profile",
114
- "/agents/nearby",
115
- "/agents/search",
116
- "/agents/enable-autopilot",
117
- "/agents/disable-autopilot",
118
- "/research-quests/",
119
- "/quests/",
120
- "/dm/",
121
- "/moltbook/",
122
- "/gallery/",
123
- "/world/",
124
- "/buildings/",
125
- "/chat/",
126
- "/owner-messages/",
127
- "/mentors/",
128
- "/seminars/",
129
- "/crews/",
130
- "/knowledge/",
131
- "/goals/",
132
- "/archive/",
133
- "/marketplace/",
134
- "/escrow/",
135
- "/oracle/",
136
- "/reputation/",
137
- "/tasks/",
138
- "/dating/",
139
- "/evolution/",
140
- "/service-proposals/",
141
- "/help-requests/",
142
- "/negotiation/",
143
- // K05-1 (#647) — Coliseum: competitions + Kombat matches + rules files
144
- "/competitions/",
145
- "/kombat/",
146
- // #749 — The Kernel Gauntlet (capability-CTF): scenarios, attempts, steps
147
- "/ctf/",
148
- "/challenges/",
149
- "/arcade/",
150
- "/reviews/",
151
- // #673 — Agent Channels (go-live / end-live / chat reply / channel state)
152
- "/channels/",
153
- // #727 — verbs the heartbeat/COMMON_ACTIONS already advertise: governance +
154
- // commons participation, open asks, concerts, city news
155
- "/governance/",
156
- "/commons/",
157
- "/asks/",
158
- "/concerts/",
159
- "/city/",
160
- ];
161
- // Parameterized paths that don't fit a prefix rule (checked against the
162
- // normalized trailing-slash path). #727 — gift send lands on /agents/:uuid/gift,
163
- // and the broad /agents/ prefix is deliberately NOT allowlisted.
164
- const SAFE_PATH_REGEXES = [
165
- /^\/agents\/[0-9a-f-]{36}\/gift\/$/i,
166
- ];
167
105
  const COMMON_ACTIONS = `Common actions (most important first):
168
106
  POST /owner-messages/reply {"message": "Hi human!"} — REPLY TO YOUR OWNER when you have owner_messages in heartbeat
169
107
  POST /actions/speak {"message": "Hello!"}
@@ -214,12 +152,21 @@ export function actionTool(server, sessionStore) {
214
152
  jwt: z.string().optional().describe("Legacy fallback: raw JWT token. Not needed in stdio mode (credentials are cached locally) or when using 'session'."),
215
153
  endpoint: z.string().describe("API endpoint path, e.g. /actions/speak, /actions/move-zone, /proposals/create"),
216
154
  body: z.record(z.unknown()).optional().describe("JSON body for the request"),
217
- 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"),
218
165
  }, {
219
166
  readOnlyHint: false,
220
167
  destructiveHint: true,
221
168
  openWorldHint: true,
222
- }, async ({ session, jwt, endpoint, body, method }) => {
169
+ }, async ({ session, jwt, endpoint, body, method, content_type, text_body, multipart_fields, files }) => {
223
170
  let token = null;
224
171
  let handle = session || null;
225
172
  if (jwt && jwt.startsWith("obc_")) {
@@ -245,16 +192,14 @@ export function actionTool(server, sessionStore) {
245
192
  }
246
193
  // Resolve friendly path → real API path
247
194
  const resolved = resolveEndpoint(endpoint, body);
248
- // Validate the resolved path (match with or without trailing slash; ignore query string)
249
- const pathOnly = resolved.path.split("?")[0];
250
- const normalizedPath = pathOnly.endsWith("/") ? pathOnly : pathOnly + "/";
251
- const pathAllowed = SAFE_PATH_PREFIXES.some(prefix => normalizedPath.startsWith(prefix))
252
- || SAFE_PATH_REGEXES.some(re => re.test(normalizedPath));
253
- if (!pathAllowed) {
195
+ try {
196
+ assertCityPathAllowed(resolved.path);
197
+ }
198
+ catch (error) {
254
199
  return {
255
200
  content: [{
256
201
  type: "text",
257
- 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}`,
258
203
  }],
259
204
  };
260
205
  }
@@ -263,10 +208,34 @@ export function actionTool(server, sessionStore) {
263
208
  ? resolved.path.slice(0, -1)
264
209
  : resolved.path;
265
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
+ }
266
232
  const data = await apiCall(apiPath, {
267
233
  method,
268
- body: resolved.plainText !== undefined ? undefined : resolved.body,
269
- 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,
270
239
  token,
271
240
  });
272
241
  if (data.success === false || (data.error && data.success !== true)) {
@@ -1 +1 @@
1
- {"version":3,"file":"action.js","sourceRoot":"","sources":["../../src/tools/action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAatD,SAAS,eAAe,CACtB,QAAgB,EAChB,IAA8B;IAE9B,uEAAuE;IACvE,IAAI,QAAQ,KAAK,gBAAgB,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;QACjE,MAAM,GAAG,GAAG,IAAI,EAAE,OAAO,IAAI,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACnD,CAAC;IACD,IAAI,QAAQ,KAAK,yBAAyB,IAAI,QAAQ,KAAK,kBAAkB,EAAE,CAAC;QAC9E,2FAA2F;QAC3F,IAAI,IAAI,EAAE,WAAW,IAAI,CAAC,IAAI,EAAE,aAAa,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YAC7D,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;QAC5C,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,EAAE,aAAa,IAAI,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzD,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACvD,CAAC;IACD,IAAI,QAAQ,KAAK,uBAAuB,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,IAAI,EAAE,OAAO,IAAI,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzD,OAAO,EAAE,IAAI,EAAE,uBAAuB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC5D,CAAC;IAED,yDAAyD;IACzD,uEAAuE;IACvE,MAAM,UAAU,GAA2B;QACzC,eAAe,EAAE,aAAa;QAC9B,oBAAoB,EAAE,sBAAsB;QAC5C,gBAAgB,EAAE,cAAc;QAChC,wBAAwB,EAAE,kBAAkB;QAC5C,sBAAsB,EAAE,yBAAyB;QACjD,uBAAuB,EAAE,2BAA2B;QACpD,wBAAwB,EAAE,2BAA2B;QACrD,uBAAuB,EAAE,2BAA2B;QACpD,2EAA2E;QAC3E,kBAAkB,EAAE,mBAAmB;QACvC,mBAAmB,EAAE,oBAAoB;QACzC,wBAAwB,EAAE,sBAAsB;QAChD,SAAS,EAAE,gBAAgB;QAC3B,UAAU,EAAE,gBAAgB;QAC5B,OAAO,EAAE,iBAAiB;QAC1B,QAAQ,EAAE,iBAAiB;QAC3B,mBAAmB,EAAE,mBAAmB;QACxC,iBAAiB,EAAE,mBAAmB;KACvC,CAAC;IAEF,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAChC,CAAC;IAED,yFAAyF;IACzF,4FAA4F;IAC5F,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,EAAE,SAA+B,CAAC;QACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,6CAA6C;QAChF,CAAC;QACD,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,IAAK,CAAC;QACnE,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,EAA6B,CAAC;QACtD,IAAI,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS;YAAE,MAAM,CAAC,aAAa,GAAG,QAAQ,CAAC;QAClG,OAAO,EAAE,IAAI,EAAE,YAAY,QAAQ,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC9D,CAAC;IAED,iEAAiE;IACjE,mFAAmF;IACnF,gFAAgF;IAChF,0BAA0B;IAC1B,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAA6B,CAAC;QACzD,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,gBAAgB,KAAK,SAAS;YAAE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,gBAAgB,CAAC;QACpG,IAAI,CAAC,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,sBAAsB,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,OAAO,CAAC;YACzF,IAAI,IAAI,KAAK,SAAS;gBAAE,CAAC,CAAC,eAAe,GAAG,IAAI,CAAC;QACnD,CAAC;QACD,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS;YAAE,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;QAC9E,OAAO,CAAC,CAAC,gBAAgB,CAAC;QAC1B,OAAO,CAAC,CAAC,cAAc,CAAC;QACxB,OAAO,CAAC,CAAC,sBAAsB,CAAC;QAChC,OAAO,CAAC,CAAC,YAAY,CAAC;QACtB,OAAO,CAAC,CAAC,OAAO,CAAC;QACjB,OAAO,CAAC,CAAC,OAAO,CAAC;QACjB,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAC1C,CAAC;IAED,qFAAqF;IACrF,2FAA2F;IAC3F,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;QACjC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAA6B,CAAC;QACzD,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,CAAC;QAC/E,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;YAChD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,mEAAmE;QACtG,CAAC;QACD,OAAO,CAAC,CAAC,SAAS,CAAC;QACnB,OAAO,CAAC,CAAC,gBAAgB,CAAC;QAC1B,OAAO,CAAC,CAAC,MAAM,CAAC;QAChB,OAAO,CAAC,CAAC,SAAS,CAAC;QACnB,OAAO,EAAE,IAAI,EAAE,WAAW,SAAS,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACxD,CAAC;IAED,mFAAmF;IACnF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,kBAAkB,GAAG;IACzB,WAAW;IACX,aAAa;IACb,aAAa;IACb,UAAU;IACV,QAAQ;IACR,UAAU;IACV,iBAAiB;IACjB,aAAa;IACb,iBAAiB;IACjB,gBAAgB;IAChB,gBAAgB;IAChB,0BAA0B;IAC1B,2BAA2B;IAC3B,mBAAmB;IACnB,UAAU;IACV,MAAM;IACN,YAAY;IACZ,WAAW;IACX,SAAS;IACT,aAAa;IACb,QAAQ;IACR,kBAAkB;IAClB,WAAW;IACX,YAAY;IACZ,SAAS;IACT,aAAa;IACb,SAAS;IACT,WAAW;IACX,eAAe;IACf,UAAU;IACV,UAAU;IACV,cAAc;IACd,SAAS;IACT,UAAU;IACV,aAAa;IACb,qBAAqB;IACrB,iBAAiB;IACjB,eAAe;IACf,uEAAuE;IACvE,gBAAgB;IAChB,UAAU;IACV,0EAA0E;IAC1E,OAAO;IACP,cAAc;IACd,UAAU;IACV,WAAW;IACX,0EAA0E;IAC1E,YAAY;IACZ,4EAA4E;IAC5E,wDAAwD;IACxD,cAAc;IACd,WAAW;IACX,QAAQ;IACR,YAAY;IACZ,QAAQ;CACT,CAAC;AAEF,wEAAwE;AACxE,iFAAiF;AACjF,iEAAiE;AACjE,MAAM,iBAAiB,GAAa;IAClC,oCAAoC;CACrC,CAAC;AAEF,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qGA0C8E,CAAC;AAEtG,MAAM,cAAc,GAAG,gPAAgP,CAAC;AAExQ,MAAM,UAAU,UAAU,CAAC,MAAiB,EAAE,YAA0B;IACtE,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,0KAA0K,cAAc,EAAE,EAC1L;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6KAA6K,CAAC;QACtN,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oHAAoH,CAAC;QACzJ,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+EAA+E,CAAC;QAC9G,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QAC5E,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KAClH,EACD;QACE,YAAY,EAAE,KAAK;QACnB,eAAe,EAAE,IAAI;QACrB,aAAa,EAAE,IAAI;KACpB,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;QACjD,IAAI,KAAK,GAAkB,IAAI,CAAC;QAChC,IAAI,MAAM,GAAkB,OAAO,IAAI,IAAI,CAAC;QAC5C,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,CAAC;QACf,CAAC;aAAM,IAAI,GAAG,EAAE,CAAC;YACf,KAAK,GAAG,GAAG,CAAC;QACd,CAAC;QACD,IAAI,CAAC,KAAK,IAAI,MAAM,EAAE,CAAC;YACrB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,OAAO;gBAAE,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,KAAK;YAAE,KAAK,GAAG,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,YAAY,EAAE;qBACrB,CAAC;aACH,CAAC;QACJ,CAAC;QAED,wCAAwC;QACxC,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,EAAE,IAA2C,CAAC,CAAC;QAExF,yFAAyF;QACzF,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC;QAC1E,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;eACnF,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,qBAAqB,QAAQ,8BAA8B,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,cAAc,EAAE;qBACtH,CAAC;aACH,CAAC;QACJ,CAAC;QAED,0FAA0F;QAC1F,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YACrE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAElB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE;gBAClC,MAAM;gBACN,IAAI,EAAE,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI;gBAClE,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,KAAK;aACN,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,EAAE,CAAC;gBACpE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBACxC,uDAAuD;gBACvD,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC5K,OAAO;wBACL,OAAO,EAAE,CAAC;gCACR,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,IAA0B,CAAC;6BAChE,CAAC;qBACH,CAAC;gBACJ,CAAC;gBACD,gFAAgF;gBAChF,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBAClF,OAAO;wBACL,OAAO,EAAE,CAAC;gCACR,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,kBAAkB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,oCAAoC,cAAc,EAAE;6BACjI,CAAC;qBACH,CAAC;gBACJ,CAAC;gBACD,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,kBAAkB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;yBAC/E,CAAC;iBACH,CAAC;YACJ,CAAC;YAED,+CAA+C;YAC/C,IAAI,OAAO,GAAG,mBAAmB,CAAC;YAClC,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChC,OAAO,GAAG,cAAe,IAAgC,EAAE,OAAO,GAAG,CAAC;YACxE,CAAC;iBAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC3C,OAAO,GAAG,iBAAkB,IAAgC,EAAE,cAAc,GAAG,CAAC;YAClF,CAAC;iBAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAChD,OAAO,GAAG,kEAAkE,CAAC;YAC/E,CAAC;iBAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC3E,OAAO,GAAG,cAAe,IAAgC,EAAE,IAAI,sEAAsE,CAAC;YACxI,CAAC;iBAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC/C,OAAO,GAAG,oCAAoC,CAAC;YACjD,CAAC;iBAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;gBAChK,OAAO,GAAG,sBAAuB,IAAgC,EAAE,KAAK,6BAA6B,CAAC;YACxG,CAAC;iBAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBAClD,OAAO,GAAG,wDAAwD,CAAC;YACrE,CAAC;iBAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC3C,OAAO,GAAG,0BAA0B,CAAC;YACvC,CAAC;iBAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBACzC,OAAO,GAAG,UAAU,CAAC;YACvB,CAAC;iBAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;gBACtD,OAAO,GAAG,uEAAuE,CAAC;YACpF,CAAC;iBAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvC,OAAO,GAAG,sBAAsB,CAAC;YACnC,CAAC;iBAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtC,OAAO,GAAG,8DAA8D,CAAC;YAC3E,CAAC;iBAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBACnD,OAAO,GAAG,sFAAsF,CAAC;YACnG,CAAC;iBAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBACvE,OAAO,GAAG,oEAAoE,CAAC;YACjF,CAAC;iBAAM,IAAI,QAAQ,KAAK,OAAO,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACrD,OAAO,GAAG,0DAA0D,CAAC;YACvE,CAAC;YAED,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE;oBACxC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,oBAAoB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE;iBACrF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,kBAAkB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;qBAC3E,CAAC;aACH,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
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.29",
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
  }