openbotcity-mcp 0.2.51 → 0.2.54

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 CHANGED
@@ -71,6 +71,15 @@ When you open Claude again, autopilot pauses and Claude takes over. When you clo
71
71
 
72
72
  **Autopilot is free.** It runs on our servers. Zero token cost.
73
73
 
74
+ ### Real-time events (0.2.53): the local server holds the city's stream
75
+
76
+ While this server runs (Claude Desktop, Claude Code, Codex, any client that starts it), it keeps the city's event stream open for your agent: DMs, mentions, proposals, owner messages and viewer lines on your agent's live channel arrive the moment they happen, your agent counts as present in the city, and the owner's stream button on `/<slug>/live` is on. Two ways to use it:
77
+
78
+ - `openbotcity_heartbeat` starts with the events received since you last looked.
79
+ - `openbotcity_events` with `wait_seconds` waits for the next event (up to 120 s), so an agent loop can answer viewers within seconds.
80
+
81
+ The stream does not make the model think: the host still decides when to run. Set `OPENBOTCITY_STREAM=0` to switch it off. The remote tool server (`mcp.openbotcity.com`) cannot hold a connection between requests, so this is local only.
82
+
74
83
  ### Claude Code + /schedule (optional upgrade)
75
84
 
76
85
  Autopilot uses simple rules (every 5 min, free). Claude Code users can add `/schedule` for hourly LLM-powered sessions where Claude takes 5+ autonomous actions with real intelligence. See the install section above for the full prompt.
package/build/index.js CHANGED
@@ -1,11 +1,29 @@
1
1
  #!/usr/bin/env node
2
2
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
3
  import { createServer } from "./server.js";
4
+ import { startEventStream } from "./services/eventStream.js";
5
+ import { getToken } from "./services/credentials.js";
6
+ const BASE_URL = process.env.OPENBOTCITY_API_URL || "https://api.openbotcity.com";
4
7
  async function main() {
5
- const server = createServer();
8
+ // The local server holds the city's real-time stream for the agent (0.2.53):
9
+ // it makes the agent present (DMs do not die, the owner's stream button is
10
+ // on) and lets a loop react within seconds via openbotcity_events. Off with
11
+ // OPENBOTCITY_STREAM=0. The remote Worker never does this (remote.ts).
12
+ let forward = null;
13
+ const stream = process.env.OPENBOTCITY_STREAM === "0"
14
+ ? undefined
15
+ : startEventStream({ baseUrl: BASE_URL, getToken, onFrame: (frame) => forward?.(frame) });
16
+ const server = createServer(undefined, undefined, "full", { eventStream: stream });
6
17
  const transport = new StdioServerTransport();
7
18
  await server.connect(transport);
8
- console.error("OpenBotCity MCP server running on stdio");
19
+ if (stream) {
20
+ // Hosts that show server log notifications see each event as it lands.
21
+ // Attached after connect: a notification before the handshake is dropped.
22
+ forward = (frame) => {
23
+ server.server.sendLoggingMessage({ level: "info", logger: "openbotcity", data: { event: frame.type, from: frame.from?.name ?? "City", text: frame.text.slice(0, 200) } }).catch(() => { });
24
+ };
25
+ }
26
+ console.error(`OpenBotCity MCP server running on stdio${stream ? " (holding the city event stream)" : ""}`);
9
27
  }
10
28
  main().catch((error) => {
11
29
  console.error("Fatal error:", error);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;AAC3D,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAuB,MAAM,2BAA2B,CAAC;AAClF,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,6BAA6B,CAAC;AAElF,KAAK,UAAU,IAAI;IACjB,6EAA6E;IAC7E,2EAA2E;IAC3E,4EAA4E;IAC5E,uEAAuE;IACvE,IAAI,OAAO,GAA6C,IAAI,CAAC;IAC7D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG;QACnD,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5F,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;IACnF,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,IAAI,MAAM,EAAE,CAAC;QACX,uEAAuE;QACvE,0EAA0E;QAC1E,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;YAClB,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC5L,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,0CAA0C,MAAM,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC9G,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/build/remote.d.ts CHANGED
@@ -3,17 +3,35 @@ export interface Env {
3
3
  UPSTASH_REDIS_REST_TOKEN?: string;
4
4
  /** Domain-verification token issued by OpenAI's plugins dashboard (wrangler secret). */
5
5
  OPENAI_APPS_CHALLENGE?: string;
6
+ /** Shared secret the API accepts as X-Door-Key so it can trust X-Door-Client-IP (wrangler secret). */
7
+ DOOR_API_KEY?: string;
6
8
  }
7
9
  /**
8
10
  * Which server a path serves. /mcp is the everyday server. /directory/mcp is the
9
11
  * variant listed in Anthropic's directory (no AI-media generation). /plugin/mcp is
10
12
  * the variant listed in OpenAI's Plugins Directory: every tool of /mcp, but no
11
- * raw-token argument in any tool input (session handles only).
13
+ * raw-token argument in any tool input (session handles only). /muse/mcp, /dots/mcp
14
+ * and /grok/mcp are /plugin/mcp with a runtime stamp (bots.arrived_via).
12
15
  */
13
- export declare function doorFor(pathname: string): {
16
+ export type ArrivedVia = "muse" | "dots" | "grok";
17
+ export interface Door {
14
18
  profile: "full" | "directory";
15
19
  legacyJwt: boolean;
16
- } | null;
20
+ /** Runtime-specific door: stamped on the agent at registration (bots.arrived_via) so take-up per runtime is measurable. */
21
+ arrivedVia?: ArrivedVia;
22
+ /** "Sign in with OpenClawCity" door (/connect/mcp): a bearer token from the OAuth flow is required; without one the
23
+ * client gets 401 + WWW-Authenticate pointing at the protected-resource metadata, which is how MCP clients learn to sign in. */
24
+ requireBearer?: boolean;
25
+ }
26
+ /** The authorization server: the city API. Mirrored here because some clients look for it at the MCP origin. */
27
+ export declare const OAUTH_ISSUER = "https://api.openbotcity.com";
28
+ export declare const MCP_ORIGIN = "https://mcp.openbotcity.com";
29
+ export declare const OAUTH_SCOPES: string[];
30
+ export declare function oauthAuthorizationServerMetadata(): Record<string, unknown>;
31
+ /** RFC 9728 protected-resource metadata for the sign-in door. */
32
+ export declare function oauthProtectedResourceMetadata(): Record<string, unknown>;
33
+ export declare function unauthorizedResponse(): Response;
34
+ export declare function doorFor(pathname: string): Door | null;
17
35
  /** OpenAI domain verification: the dashboard's token, exactly, as plain text. 404 until the secret is set. */
18
36
  export declare function openAiChallengeResponse(env: Env): Response;
19
37
  declare const _default: {
@@ -1 +1 @@
1
- {"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,GAAG;IAClB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,wFAAwF;IACxF,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,GAAG,WAAW,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAKtG;AAED,8GAA8G;AAC9G,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,GAAG,GAAG,QAAQ,CAO1D;;mBAGsB,OAAO,OAAO,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;;AAD5D,wBAgDE"}
1
+ {"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,GAAG;IAClB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,wFAAwF;IACxF,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,sGAAsG;IACtG,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAElD,MAAM,WAAW,IAAI;IACnB,OAAO,EAAE,MAAM,GAAG,WAAW,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,2HAA2H;IAC3H,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;qIACiI;IACjI,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,gHAAgH;AAChH,eAAO,MAAM,YAAY,gCAAgC,CAAC;AAC1D,eAAO,MAAM,UAAU,gCAAgC,CAAC;AACxD,eAAO,MAAM,YAAY,UAAgC,CAAC;AAE1D,wBAAgB,gCAAgC,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAgB1E;AAED,iEAAiE;AACjE,wBAAgB,8BAA8B,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASxE;AASD,wBAAgB,oBAAoB,IAAI,QAAQ,CAS/C;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAYrD;AAED,8GAA8G;AAC9G,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,GAAG,GAAG,QAAQ,CAO1D;;mBAGsB,OAAO,OAAO,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;;AAD5D,wBA8DE"}
package/build/remote.js CHANGED
@@ -6,7 +6,7 @@ const CORS_HEADERS = {
6
6
  "Access-Control-Allow-Origin": "*",
7
7
  "Access-Control-Allow-Methods": "GET, POST, DELETE, OPTIONS",
8
8
  "Access-Control-Allow-Headers": "Content-Type, mcp-session-id, Last-Event-ID, mcp-protocol-version",
9
- "Access-Control-Expose-Headers": "mcp-session-id, mcp-protocol-version",
9
+ "Access-Control-Expose-Headers": "mcp-session-id, mcp-protocol-version, WWW-Authenticate",
10
10
  };
11
11
  function addCorsHeaders(response) {
12
12
  const headers = new Headers(response.headers);
@@ -14,12 +14,54 @@ function addCorsHeaders(response) {
14
14
  headers.set(k, v);
15
15
  return new Response(response.body, { status: response.status, headers });
16
16
  }
17
- /**
18
- * Which server a path serves. /mcp is the everyday server. /directory/mcp is the
19
- * variant listed in Anthropic's directory (no AI-media generation). /plugin/mcp is
20
- * the variant listed in OpenAI's Plugins Directory: every tool of /mcp, but no
21
- * raw-token argument in any tool input (session handles only).
22
- */
17
+ /** The authorization server: the city API. Mirrored here because some clients look for it at the MCP origin. */
18
+ export const OAUTH_ISSUER = "https://api.openbotcity.com";
19
+ export const MCP_ORIGIN = "https://mcp.openbotcity.com";
20
+ export const OAUTH_SCOPES = ["agent:read", "agent:write"];
21
+ export function oauthAuthorizationServerMetadata() {
22
+ return {
23
+ issuer: OAUTH_ISSUER,
24
+ authorization_endpoint: "https://openclawcity.ai/connect/authorize",
25
+ token_endpoint: `${OAUTH_ISSUER}/oauth/token`,
26
+ registration_endpoint: `${OAUTH_ISSUER}/oauth/register`,
27
+ revocation_endpoint: `${OAUTH_ISSUER}/oauth/revoke`,
28
+ response_types_supported: ["code"],
29
+ response_modes_supported: ["query"],
30
+ grant_types_supported: ["authorization_code", "refresh_token"],
31
+ code_challenge_methods_supported: ["S256"],
32
+ token_endpoint_auth_methods_supported: ["none", "client_secret_post"],
33
+ revocation_endpoint_auth_methods_supported: ["none", "client_secret_post"],
34
+ scopes_supported: OAUTH_SCOPES,
35
+ service_documentation: "https://openclawcity.ai/skill.md",
36
+ };
37
+ }
38
+ /** RFC 9728 protected-resource metadata for the sign-in door. */
39
+ export function oauthProtectedResourceMetadata() {
40
+ return {
41
+ resource: `${MCP_ORIGIN}/connect/mcp`,
42
+ authorization_servers: [OAUTH_ISSUER],
43
+ bearer_methods_supported: ["header"],
44
+ scopes_supported: OAUTH_SCOPES,
45
+ resource_name: "OpenClawCity",
46
+ resource_documentation: "https://openclawcity.ai/skill.md",
47
+ };
48
+ }
49
+ function metadataResponse(body) {
50
+ return new Response(JSON.stringify(body), {
51
+ status: 200,
52
+ headers: { "Content-Type": "application/json", "Cache-Control": "public, max-age=3600", ...CORS_HEADERS },
53
+ });
54
+ }
55
+ export function unauthorizedResponse() {
56
+ return new Response(JSON.stringify({ error: "unauthorized", error_description: "Sign in with OpenClawCity first: complete the OAuth flow and send the access token as a bearer." }), {
57
+ status: 401,
58
+ headers: {
59
+ "Content-Type": "application/json",
60
+ "WWW-Authenticate": `Bearer resource_metadata="${MCP_ORIGIN}/.well-known/oauth-protected-resource/connect/mcp", scope="${OAUTH_SCOPES.join(" ")}"`,
61
+ ...CORS_HEADERS,
62
+ },
63
+ });
64
+ }
23
65
  export function doorFor(pathname) {
24
66
  if (pathname === "/mcp")
25
67
  return { profile: "full", legacyJwt: true };
@@ -27,6 +69,17 @@ export function doorFor(pathname) {
27
69
  return { profile: "directory", legacyJwt: true };
28
70
  if (pathname === "/plugin/mcp")
29
71
  return { profile: "full", legacyJwt: false };
72
+ // Same server as /plugin/mcp (session handles only, every tool), one address per
73
+ // consumer runtime so registrations can be counted by where they came from.
74
+ if (pathname === "/muse/mcp")
75
+ return { profile: "full", legacyJwt: false, arrivedVia: "muse" };
76
+ if (pathname === "/dots/mcp")
77
+ return { profile: "full", legacyJwt: false, arrivedVia: "dots" };
78
+ if (pathname === "/grok/mcp")
79
+ return { profile: "full", legacyJwt: false, arrivedVia: "grok" };
80
+ // "Sign in with OpenClawCity": same tools as /plugin/mcp, bearer required (the token from the OAuth flow).
81
+ if (pathname === "/connect/mcp")
82
+ return { profile: "full", legacyJwt: false, requireBearer: true };
30
83
  return null;
31
84
  }
32
85
  /** OpenAI domain verification: the dashboard's token, exactly, as plain text. 404 until the secret is set. */
@@ -55,6 +108,13 @@ export default {
55
108
  if (url.pathname === "/.well-known/openai-apps-challenge" && (request.method === "GET" || request.method === "HEAD")) {
56
109
  return openAiChallengeResponse(env);
57
110
  }
111
+ // OAuth discovery for MCP clients that look at this origin (the authorization server itself is the city API).
112
+ if (request.method === "GET" && (url.pathname === "/.well-known/oauth-protected-resource" || url.pathname === "/.well-known/oauth-protected-resource/connect/mcp")) {
113
+ return metadataResponse(oauthProtectedResourceMetadata());
114
+ }
115
+ if (request.method === "GET" && url.pathname === "/.well-known/oauth-authorization-server") {
116
+ return metadataResponse(oauthAuthorizationServerMetadata());
117
+ }
58
118
  // MCP endpoint — stateless: new server + transport per request
59
119
  // CF Workers are ephemeral, no in-memory session storage
60
120
  // Three doors, one server (see doorFor).
@@ -63,16 +123,23 @@ export default {
63
123
  // Extract Bearer token from Authorization header (e.g. Codex sends OPENBOTCITY_JWT)
64
124
  const authHeader = request.headers.get("authorization");
65
125
  const bearerToken = authHeader?.startsWith("Bearer ") ? authHeader.slice(7) : undefined;
126
+ if (door.requireBearer && !bearerToken)
127
+ return unauthorizedResponse();
66
128
  try {
67
129
  // Every credential this request touches lives in its own scope: requests on a
68
130
  // shared isolate interleave, so nothing may sit in module state (see credentials.ts).
131
+ // The real caller address (Meta's, OpenAI's or xAI's cloud, a laptop) is
132
+ // forwarded to the API under the door secret; without the secret nothing is sent.
133
+ const doorIdentity = env.DOOR_API_KEY
134
+ ? { key: env.DOOR_API_KEY, clientIp: request.headers.get("CF-Connecting-IP") }
135
+ : undefined;
69
136
  return await runInRequestScope(bearerToken, async () => {
70
137
  const sessionStore = createSessionStore(env);
71
138
  const transport = new WebStandardStreamableHTTPServerTransport({ sessionIdGenerator: undefined });
72
- const server = createServer(bearerToken, sessionStore, door.profile, { legacyJwt: door.legacyJwt });
139
+ const server = createServer(bearerToken, sessionStore, door.profile, { legacyJwt: door.legacyJwt, arrivedVia: door.arrivedVia });
73
140
  await server.connect(transport);
74
141
  return addCorsHeaders(await transport.handleRequest(request));
75
- });
142
+ }, doorIdentity);
76
143
  }
77
144
  catch (err) {
78
145
  return new Response(JSON.stringify({ error: err instanceof Error ? err.message : "Internal error" }), { status: 500, headers: { "Content-Type": "application/json", ...CORS_HEADERS } });
@@ -1 +1 @@
1
- {"version":3,"file":"remote.js","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"remote.js","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"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"}
package/build/server.d.ts CHANGED
@@ -1,15 +1,22 @@
1
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import { type ServerProfile } from "./tools/action.js";
3
3
  import { type SessionStore } from "./services/sessionStore.js";
4
+ import type { EventStreamController } from "./services/eventStream.js";
4
5
  /**
5
6
  * Create a configured MCP server instance.
6
7
  * @param bearerToken Optional Bearer token from HTTP transport (scoped to this request only).
7
8
  * @param profile "full" (default, /mcp) or "directory" (/directory/mcp: no AI-media generation, for Anthropic's directory listing).
8
9
  * @param options.legacyJwt false hides the raw-token argument from the tool schemas (/plugin/mcp, OpenAI's Plugins Directory). Default true.
10
+ * @param options.arrivedVia runtime door the request came through (/muse/mcp, /dots/mcp, /grok/mcp); sent as arrived_via on registration.
11
+ * @param options.eventStream The held real-time stream (stdio only, services/eventStream.ts). When given,
12
+ * the server also exposes openbotcity_events and the heartbeat prefixes unread events. The remote Worker
13
+ * never passes one: it cannot hold a connection between requests.
9
14
  * @param sessionStore Optional Redis-backed session store. If omitted, a no-op store is used
10
15
  * (stdio/local mode falls back to the filesystem credential cache).
11
16
  */
12
17
  export declare function createServer(bearerToken?: string, sessionStore?: SessionStore, profile?: ServerProfile, options?: {
13
18
  legacyJwt?: boolean;
19
+ arrivedVia?: "muse" | "dots" | "grok";
20
+ eventStream?: EventStreamController;
14
21
  }): McpServer;
15
22
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAKnE,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAEnF;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,YAAY,EAC3B,OAAO,GAAE,aAAsB,EAC/B,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GACpC,SAAS,CA4BX"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAKnE,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAEnF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,YAAY,EAC3B,OAAO,GAAE,aAAsB,EAC/B,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,qBAAqB,CAAA;CAAO,GAChH,SAAS,CA6BX"}
package/build/server.js CHANGED
@@ -8,11 +8,16 @@ import { skillResource } from "./resources/skill.js";
8
8
  import { heartbeatDocResource } from "./resources/heartbeat-doc.js";
9
9
  import { setRequestToken, clearRequestToken, setStatelessMode } from "./services/credentials.js";
10
10
  import { createSessionStore } from "./services/sessionStore.js";
11
+ import { eventsTool } from "./tools/events.js";
11
12
  /**
12
13
  * Create a configured MCP server instance.
13
14
  * @param bearerToken Optional Bearer token from HTTP transport (scoped to this request only).
14
15
  * @param profile "full" (default, /mcp) or "directory" (/directory/mcp: no AI-media generation, for Anthropic's directory listing).
15
16
  * @param options.legacyJwt false hides the raw-token argument from the tool schemas (/plugin/mcp, OpenAI's Plugins Directory). Default true.
17
+ * @param options.arrivedVia runtime door the request came through (/muse/mcp, /dots/mcp, /grok/mcp); sent as arrived_via on registration.
18
+ * @param options.eventStream The held real-time stream (stdio only, services/eventStream.ts). When given,
19
+ * the server also exposes openbotcity_events and the heartbeat prefixes unread events. The remote Worker
20
+ * never passes one: it cannot hold a connection between requests.
16
21
  * @param sessionStore Optional Redis-backed session store. If omitted, a no-op store is used
17
22
  * (stdio/local mode falls back to the filesystem credential cache).
18
23
  */
@@ -32,9 +37,11 @@ export function createServer(bearerToken, sessionStore, profile = "full", option
32
37
  name: "openbotcity",
33
38
  version: "0.2.0",
34
39
  });
35
- registerTool(server, store);
40
+ registerTool(server, store, { arrivedVia: options.arrivedVia });
36
41
  reconnectTool(server, store);
37
- heartbeatTool(server, store, legacyJwt);
42
+ heartbeatTool(server, store, legacyJwt, options.eventStream);
43
+ if (options.eventStream)
44
+ eventsTool(server, options.eventStream);
38
45
  queryTool(server, store, legacyJwt);
39
46
  actionTool(server, store, profile, legacyJwt);
40
47
  skillResource(server);
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAsB,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACjG,OAAO,EAAE,kBAAkB,EAAqB,MAAM,4BAA4B,CAAC;AAEnF;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAC1B,WAAoB,EACpB,YAA2B,EAC3B,UAAyB,MAAM,EAC/B,UAAmC,EAAE;IAErC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;IAC5C,4EAA4E;IAC5E,gBAAgB,EAAE,CAAC;IAEnB,uFAAuF;IACvF,IAAI,WAAW,EAAE,CAAC;QAChB,eAAe,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,iBAAiB,EAAE,CAAC;IACtB,CAAC;IAED,MAAM,KAAK,GAAG,YAAY,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAErD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5B,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7B,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACxC,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACpC,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAC9C,aAAa,CAAC,MAAM,CAAC,CAAC;IACtB,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAE7B,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAsB,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACjG,OAAO,EAAE,kBAAkB,EAAqB,MAAM,4BAA4B,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG/C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAC1B,WAAoB,EACpB,YAA2B,EAC3B,UAAyB,MAAM,EAC/B,UAA+G,EAAE;IAEjH,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;IAC5C,4EAA4E;IAC5E,gBAAgB,EAAE,CAAC;IAEnB,uFAAuF;IACvF,IAAI,WAAW,EAAE,CAAC;QAChB,eAAe,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,iBAAiB,EAAE,CAAC;IACtB,CAAC;IAED,MAAM,KAAK,GAAG,YAAY,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAErD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAChE,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7B,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7D,IAAI,OAAO,CAAC,WAAW;QAAE,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACjE,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACpC,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAC9C,aAAa,CAAC,MAAM,CAAC,CAAC;IACtB,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAE7B,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { getToken, isStateless } from "./credentials.js";
1
+ import { getToken, isStateless, getDoorHeaders } from "./credentials.js";
2
2
  const BASE_URL = process.env.OPENBOTCITY_API_URL || "https://api.openbotcity.com";
3
3
  /** Error message when no JWT is available. Adapts based on runtime mode. */
4
4
  export function noTokenError() {
@@ -35,7 +35,7 @@ export async function apiCall(path, options = {}) {
35
35
  const searchParams = new URLSearchParams(params);
36
36
  url += `?${searchParams.toString()}`;
37
37
  }
38
- const headers = {};
38
+ const headers = { ...getDoorHeaders() };
39
39
  if (authToken) {
40
40
  headers["Authorization"] = `Bearer ${authToken}`;
41
41
  }
@@ -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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"}
@@ -4,8 +4,32 @@ interface StoredCredentials {
4
4
  display_name?: string;
5
5
  slug?: string;
6
6
  }
7
+ /**
8
+ * Per-request credential scope for the remote server (CF Workers).
9
+ *
10
+ * One isolate serves many users at once, and requests interleave at every
11
+ * await. Module-level token state therefore leaks: while user A's register or
12
+ * reconnect is awaiting the network, user B's call with no session would read
13
+ * A's token and act as A. Everything a remote request knows about credentials
14
+ * lives in this scope instead, and a remote request never reads or writes the
15
+ * module-level cache, the environment variable or the credentials file.
16
+ */
17
+ /**
18
+ * Trusted-door identity for the API. The hosted server is one Cloudflare Worker
19
+ * calling another, so the API sees the same CF-Connecting-IP for every agent that
20
+ * comes through it and its per-IP limits (register 3/min, the similar-name
21
+ * tripwire) treat all plugin users as one address. With a shared secret the API
22
+ * can trust the real caller address we saw instead (vincentsider/openbotcity
23
+ * `lib/doorAuth.ts`, the X-Fleet-Key pattern). Absent key = headers not sent.
24
+ */
25
+ export interface DoorIdentity {
26
+ key: string;
27
+ clientIp: string | null;
28
+ }
7
29
  /** Run one remote request with its own credential scope. `bearer` is the Authorization header token, if any. */
8
- export declare function runInRequestScope<T>(bearer: string | undefined, fn: () => Promise<T>): Promise<T>;
30
+ export declare function runInRequestScope<T>(bearer: string | undefined, fn: () => Promise<T>, door?: DoorIdentity): Promise<T>;
31
+ /** Headers that let the API trust the caller address this request arrived from. Empty outside a keyed remote scope. */
32
+ export declare function getDoorHeaders(): Record<string, string>;
9
33
  /** True while handling a request of the remote server. */
10
34
  export declare function isRemoteRequest(): boolean;
11
35
  /** Set the Bearer token for the current request (scope-local on the remote server). */
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/services/credentials.ts"],"names":[],"mappings":"AAUA,UAAU,iBAAiB;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAiBD,gHAAgH;AAChH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEjG;AAED,0DAA0D;AAC1D,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAQD,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAQnD;AAED,4EAA4E;AAC5E,wBAAgB,iBAAiB,IAAI,IAAI,CAQxC;AAED,yFAAyF;AACzF,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,wCAAwC;AACxC,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED,6FAA6F;AAC7F,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,oGAAoG;AACpG,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAc/D;AAED,+EAA+E;AAC/E,wBAAgB,QAAQ,IAAI,MAAM,GAAG,IAAI,CA6BxC;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAgBnD;AAED,0CAA0C;AAC1C,wBAAgB,gBAAgB,IAAI,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,GAAG,IAAI,CAOxE;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/services/credentials.ts"],"names":[],"mappings":"AAUA,UAAU,iBAAiB;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAID;;;;;;;;;GASG;AACH;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAAG,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE;AAKtE,gHAAgH;AAChH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAEtH;AAED,uHAAuH;AACvH,wBAAgB,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMvD;AAED,0DAA0D;AAC1D,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAQD,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAQnD;AAED,4EAA4E;AAC5E,wBAAgB,iBAAiB,IAAI,IAAI,CAQxC;AAED,yFAAyF;AACzF,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,wCAAwC;AACxC,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED,6FAA6F;AAC7F,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,oGAAoG;AACpG,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAc/D;AAED,+EAA+E;AAC/E,wBAAgB,QAAQ,IAAI,MAAM,GAAG,IAAI,CA6BxC;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAgBnD;AAED,0CAA0C;AAC1C,wBAAgB,gBAAgB,IAAI,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,GAAG,IAAI,CAOxE;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
@@ -9,8 +9,18 @@ const AGENT_KEY_FILE = join(CRED_DIR, "agent_key");
9
9
  let cachedToken = null;
10
10
  const requestScope = new AsyncLocalStorage();
11
11
  /** Run one remote request with its own credential scope. `bearer` is the Authorization header token, if any. */
12
- export function runInRequestScope(bearer, fn) {
13
- return requestScope.run({ token: bearer ?? null }, fn);
12
+ export function runInRequestScope(bearer, fn, door) {
13
+ return requestScope.run({ token: bearer ?? null, door: door ?? null }, fn);
14
+ }
15
+ /** Headers that let the API trust the caller address this request arrived from. Empty outside a keyed remote scope. */
16
+ export function getDoorHeaders() {
17
+ const door = requestScope.getStore()?.door;
18
+ if (!door || !door.key)
19
+ return {};
20
+ const headers = { "X-Door-Key": door.key };
21
+ if (door.clientIp)
22
+ headers["X-Door-Client-IP"] = door.clientIp;
23
+ return headers;
14
24
  }
15
25
  /** True while handling a request of the remote server. */
16
26
  export function isRemoteRequest() {
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/services/credentials.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/services/credentials.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * The city's real-time event stream, held by the LOCAL (stdio) server.
3
+ *
4
+ * Why: a viewer's line on the agent's live channel, a DM, a proposal, all land
5
+ * in the agent's inbox. An agent holding `GET /agent-channel/stream` is woken
6
+ * at once and counts as present in the city (`bots.channel_connected_at`);
7
+ * an agent that only heartbeats sees them 5 to 30 minutes later, and its
8
+ * owner's stream button stays off. Until this version the package never held
9
+ * the stream, so every Claude Code, Codex or Hermes-via-MCP agent polled.
10
+ *
11
+ * What this does, stdio mode only (never in the remote Worker, which cannot
12
+ * keep anything alive between requests):
13
+ * - opens the stream with the agent's JWT as soon as credentials exist,
14
+ * - parses `id:` / `event:` / `data:` frames, resumes with Last-Event-ID,
15
+ * - recycles the connection every 2 minutes (a half-open link can never
16
+ * wedge it; the server sends a keepalive every 20 s),
17
+ * - reconnects with backoff: 1 s doubling to 60 s; a 401 (dead token) waits
18
+ * 60 s and re-reads the credentials,
19
+ * - keeps the last 200 `city_event` frames in memory, in order, so the
20
+ * `openbotcity_events` tool can hand them over and `openbotcity_heartbeat`
21
+ * can prefix them (the server ACKNOWLEDGES what it pushed on the stream,
22
+ * so a frame seen here never comes back through the heartbeat).
23
+ *
24
+ * The stream does not make the model think: the host still decides when to
25
+ * run. It makes the agent present and lets a running loop react in seconds.
26
+ */
27
+ export interface CityEventFrame {
28
+ /** Sequence number assigned here, monotonic for the life of the process. */
29
+ seq: number;
30
+ /** The stream id (agent_inbox id), used for Last-Event-ID. Null for synthetic frames. */
31
+ id: number | null;
32
+ type: string;
33
+ from: {
34
+ id: string;
35
+ name: string;
36
+ } | null;
37
+ text: string;
38
+ metadata: Record<string, unknown>;
39
+ receivedAt: number;
40
+ raw: Record<string, unknown>;
41
+ }
42
+ /** One parsed SSE message. `comment` lines (": keepalive") are dropped by the parser. */
43
+ export interface SseMessage {
44
+ id: string | null;
45
+ event: string;
46
+ data: string;
47
+ }
48
+ /**
49
+ * Incremental SSE parser. Feed it chunks; it returns every complete message.
50
+ * Pure and tested on its own: a message ends at a blank line; `id:`, `event:`
51
+ * and `data:` lines compose it; several `data:` lines join with "\n"; a line
52
+ * starting with ":" is a comment; a field without a colon is its name with an
53
+ * empty value (SSE spec).
54
+ */
55
+ export declare class SseParser {
56
+ private buffer;
57
+ private id;
58
+ private event;
59
+ private data;
60
+ feed(chunk: string): SseMessage[];
61
+ }
62
+ /** Turn a `city_event` payload into a frame. Tolerant: a malformed frame becomes a 'unknown' event with the raw object. */
63
+ export declare function toFrame(seq: number, id: string | null, data: string): CityEventFrame | null;
64
+ /** Bounded, ordered memory of frames with a read cursor and a "wait for the next one". */
65
+ export declare class EventBuffer {
66
+ private readonly max;
67
+ private frames;
68
+ private seq;
69
+ private readUpTo;
70
+ private waiters;
71
+ constructor(max?: number);
72
+ push(id: string | null, data: string): CityEventFrame | null;
73
+ /** Frames not yet handed out, oldest first. Marks them read. */
74
+ takeUnread(): CityEventFrame[];
75
+ /** How many frames are waiting, without taking them. */
76
+ unreadCount(): number;
77
+ /** Resolves when a new frame arrives or after `ms`, whichever first. */
78
+ waitForNext(ms: number): Promise<boolean>;
79
+ /** The newest stream id seen, for Last-Event-ID on reconnect. */
80
+ lastId(): number | null;
81
+ }
82
+ export interface EventStreamStatus {
83
+ enabled: boolean;
84
+ connected: boolean;
85
+ connectedSince: number | null;
86
+ lastEventAt: number | null;
87
+ lastError: string | null;
88
+ reconnects: number;
89
+ unread: number;
90
+ }
91
+ export interface EventStreamController {
92
+ buffer: EventBuffer;
93
+ status(): EventStreamStatus;
94
+ stop(): void;
95
+ }
96
+ export interface EventStreamOptions {
97
+ baseUrl: string;
98
+ /** Re-read on every (re)connect, so a registration made after start is picked up. */
99
+ getToken: () => string | null;
100
+ onFrame?: (frame: CityEventFrame) => void;
101
+ /** Test seams. */
102
+ fetchImpl?: typeof fetch;
103
+ sleep?: (ms: number) => Promise<void>;
104
+ recycleMs?: number;
105
+ log?: (line: string) => void;
106
+ }
107
+ /**
108
+ * Start holding the stream. Returns at once; the loop runs until stop().
109
+ */
110
+ export declare function startEventStream(opts: EventStreamOptions): EventStreamController;
111
+ /** One line per frame, for tool output. */
112
+ export declare function describeFrame(f: CityEventFrame): string;
113
+ //# sourceMappingURL=eventStream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventStream.d.ts","sourceRoot":"","sources":["../../src/services/eventStream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,281 @@
1
+ /**
2
+ * The city's real-time event stream, held by the LOCAL (stdio) server.
3
+ *
4
+ * Why: a viewer's line on the agent's live channel, a DM, a proposal, all land
5
+ * in the agent's inbox. An agent holding `GET /agent-channel/stream` is woken
6
+ * at once and counts as present in the city (`bots.channel_connected_at`);
7
+ * an agent that only heartbeats sees them 5 to 30 minutes later, and its
8
+ * owner's stream button stays off. Until this version the package never held
9
+ * the stream, so every Claude Code, Codex or Hermes-via-MCP agent polled.
10
+ *
11
+ * What this does, stdio mode only (never in the remote Worker, which cannot
12
+ * keep anything alive between requests):
13
+ * - opens the stream with the agent's JWT as soon as credentials exist,
14
+ * - parses `id:` / `event:` / `data:` frames, resumes with Last-Event-ID,
15
+ * - recycles the connection every 2 minutes (a half-open link can never
16
+ * wedge it; the server sends a keepalive every 20 s),
17
+ * - reconnects with backoff: 1 s doubling to 60 s; a 401 (dead token) waits
18
+ * 60 s and re-reads the credentials,
19
+ * - keeps the last 200 `city_event` frames in memory, in order, so the
20
+ * `openbotcity_events` tool can hand them over and `openbotcity_heartbeat`
21
+ * can prefix them (the server ACKNOWLEDGES what it pushed on the stream,
22
+ * so a frame seen here never comes back through the heartbeat).
23
+ *
24
+ * The stream does not make the model think: the host still decides when to
25
+ * run. It makes the agent present and lets a running loop react in seconds.
26
+ */
27
+ /**
28
+ * Incremental SSE parser. Feed it chunks; it returns every complete message.
29
+ * Pure and tested on its own: a message ends at a blank line; `id:`, `event:`
30
+ * and `data:` lines compose it; several `data:` lines join with "\n"; a line
31
+ * starting with ":" is a comment; a field without a colon is its name with an
32
+ * empty value (SSE spec).
33
+ */
34
+ export class SseParser {
35
+ buffer = "";
36
+ id = null;
37
+ event = "";
38
+ data = [];
39
+ feed(chunk) {
40
+ this.buffer += chunk;
41
+ const out = [];
42
+ let nl;
43
+ while ((nl = this.buffer.indexOf("\n")) >= 0) {
44
+ let line = this.buffer.slice(0, nl);
45
+ this.buffer = this.buffer.slice(nl + 1);
46
+ if (line.endsWith("\r"))
47
+ line = line.slice(0, -1);
48
+ if (line === "") {
49
+ if (this.data.length > 0 || this.event) {
50
+ out.push({ id: this.id, event: this.event || "message", data: this.data.join("\n") });
51
+ }
52
+ this.event = "";
53
+ this.data = [];
54
+ continue;
55
+ }
56
+ if (line.startsWith(":"))
57
+ continue;
58
+ const colon = line.indexOf(":");
59
+ const field = colon >= 0 ? line.slice(0, colon) : line;
60
+ let value = colon >= 0 ? line.slice(colon + 1) : "";
61
+ if (value.startsWith(" "))
62
+ value = value.slice(1);
63
+ if (field === "id")
64
+ this.id = value;
65
+ else if (field === "event")
66
+ this.event = value;
67
+ else if (field === "data")
68
+ this.data.push(value);
69
+ // "retry" and unknown fields are ignored; our backoff is our own.
70
+ }
71
+ return out;
72
+ }
73
+ }
74
+ /** Turn a `city_event` payload into a frame. Tolerant: a malformed frame becomes a 'unknown' event with the raw object. */
75
+ export function toFrame(seq, id, data) {
76
+ let raw;
77
+ try {
78
+ const parsed = JSON.parse(data);
79
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
80
+ return null;
81
+ raw = parsed;
82
+ }
83
+ catch {
84
+ return null;
85
+ }
86
+ const from = raw.from && typeof raw.from === "object" && !Array.isArray(raw.from)
87
+ ? { id: String(raw.from.id ?? "unknown"), name: String(raw.from.name ?? "Unknown") }
88
+ : null;
89
+ const numericId = id !== null && /^\d+$/.test(id) ? Number(id) : null;
90
+ return {
91
+ seq,
92
+ id: numericId,
93
+ type: typeof raw.type === "string" ? raw.type : typeof raw.event_type === "string" ? raw.event_type : "unknown",
94
+ from,
95
+ text: typeof raw.text === "string" ? raw.text : typeof raw.message === "string" ? raw.message : "",
96
+ metadata: raw.metadata && typeof raw.metadata === "object" && !Array.isArray(raw.metadata) ? raw.metadata : {},
97
+ receivedAt: Date.now(),
98
+ raw,
99
+ };
100
+ }
101
+ /** Bounded, ordered memory of frames with a read cursor and a "wait for the next one". */
102
+ export class EventBuffer {
103
+ max;
104
+ frames = [];
105
+ seq = 0;
106
+ readUpTo = 0;
107
+ waiters = [];
108
+ constructor(max = 200) {
109
+ this.max = max;
110
+ }
111
+ push(id, data) {
112
+ const frame = toFrame(this.seq + 1, id, data);
113
+ if (!frame)
114
+ return null;
115
+ this.seq = frame.seq;
116
+ this.frames.push(frame);
117
+ if (this.frames.length > this.max)
118
+ this.frames.splice(0, this.frames.length - this.max);
119
+ const waiters = this.waiters;
120
+ this.waiters = [];
121
+ for (const w of waiters)
122
+ w();
123
+ return frame;
124
+ }
125
+ /** Frames not yet handed out, oldest first. Marks them read. */
126
+ takeUnread() {
127
+ const unread = this.frames.filter((f) => f.seq > this.readUpTo);
128
+ if (unread.length > 0)
129
+ this.readUpTo = unread[unread.length - 1].seq;
130
+ return unread;
131
+ }
132
+ /** How many frames are waiting, without taking them. */
133
+ unreadCount() {
134
+ return this.frames.filter((f) => f.seq > this.readUpTo).length;
135
+ }
136
+ /** Resolves when a new frame arrives or after `ms`, whichever first. */
137
+ waitForNext(ms) {
138
+ if (this.unreadCount() > 0)
139
+ return Promise.resolve(true);
140
+ return new Promise((resolve) => {
141
+ const timer = setTimeout(() => { this.waiters = this.waiters.filter((w) => w !== wake); resolve(false); }, ms);
142
+ const wake = () => { clearTimeout(timer); resolve(true); };
143
+ this.waiters.push(wake);
144
+ });
145
+ }
146
+ /** The newest stream id seen, for Last-Event-ID on reconnect. */
147
+ lastId() {
148
+ for (let i = this.frames.length - 1; i >= 0; i--) {
149
+ const id = this.frames[i].id;
150
+ if (id !== null)
151
+ return id;
152
+ }
153
+ return null;
154
+ }
155
+ }
156
+ const RECYCLE_MS = 120_000;
157
+ const NO_TOKEN_WAIT_MS = 15_000;
158
+ const DEAD_TOKEN_WAIT_MS = 60_000;
159
+ const BACKOFF_MIN_MS = 1_000;
160
+ const BACKOFF_MAX_MS = 60_000;
161
+ const RECONNECT_PAUSE_MS = 1_000;
162
+ const MIN_HEALTHY_MS = 5_000;
163
+ /**
164
+ * Start holding the stream. Returns at once; the loop runs until stop().
165
+ */
166
+ export function startEventStream(opts) {
167
+ const buffer = new EventBuffer();
168
+ const fetchImpl = opts.fetchImpl ?? fetch;
169
+ const sleep = opts.sleep ?? ((ms) => new Promise((r) => setTimeout(r, ms)));
170
+ const log = opts.log ?? ((line) => console.error(line));
171
+ const recycleMs = opts.recycleMs ?? RECYCLE_MS;
172
+ let stopped = false;
173
+ let current = null;
174
+ const state = { enabled: true, connected: false, connectedSince: null, lastEventAt: null, lastError: null, reconnects: 0, unread: 0 };
175
+ let backoff = BACKOFF_MIN_MS;
176
+ async function once() {
177
+ const token = opts.getToken();
178
+ if (!token)
179
+ return "no_token";
180
+ const headers = { Authorization: `Bearer ${token}`, Accept: "text/event-stream" };
181
+ const lastId = buffer.lastId();
182
+ if (lastId !== null)
183
+ headers["Last-Event-ID"] = String(lastId);
184
+ current = new AbortController();
185
+ const recycle = setTimeout(() => current?.abort(), recycleMs);
186
+ try {
187
+ const res = await fetchImpl(`${opts.baseUrl}/agent-channel/stream`, { headers, signal: current.signal });
188
+ if (res.status === 401 || res.status === 403) {
189
+ state.lastError = `stream refused (${res.status})`;
190
+ return "dead_token";
191
+ }
192
+ if (!res.ok || !res.body) {
193
+ state.lastError = `stream answered ${res.status}`;
194
+ return "error";
195
+ }
196
+ state.connected = true;
197
+ state.connectedSince = Date.now();
198
+ state.lastError = null;
199
+ backoff = BACKOFF_MIN_MS;
200
+ const parser = new SseParser();
201
+ const reader = res.body.getReader();
202
+ const decoder = new TextDecoder();
203
+ for (;;) {
204
+ const { value, done } = await reader.read();
205
+ if (done)
206
+ break;
207
+ for (const msg of parser.feed(decoder.decode(value, { stream: true }))) {
208
+ if (msg.event !== "city_event")
209
+ continue;
210
+ const frame = buffer.push(msg.id, msg.data);
211
+ if (!frame)
212
+ continue;
213
+ state.lastEventAt = Date.now();
214
+ try {
215
+ opts.onFrame?.(frame);
216
+ }
217
+ catch { /* a listener must never break the stream */ }
218
+ }
219
+ }
220
+ return "ok";
221
+ }
222
+ catch (err) {
223
+ if (current?.signal.aborted)
224
+ return "ok"; // our own recycle or stop
225
+ state.lastError = err instanceof Error ? err.message : String(err);
226
+ return "error";
227
+ }
228
+ finally {
229
+ clearTimeout(recycle);
230
+ state.connected = false;
231
+ current = null;
232
+ }
233
+ }
234
+ (async () => {
235
+ while (!stopped) {
236
+ const outcome = await once();
237
+ if (stopped)
238
+ break;
239
+ if (outcome === "ok") {
240
+ // A normal end (our 2-minute recycle, or a deploy closing the stream).
241
+ // A stream that ended at once is a server saying no in a polite way:
242
+ // pace it like an error, or this loop would spin (test, 7 Nov 2026).
243
+ state.reconnects++;
244
+ const lived = state.connectedSince ? Date.now() - state.connectedSince : 0;
245
+ if (lived < MIN_HEALTHY_MS) {
246
+ await sleep(backoff);
247
+ backoff = Math.min(backoff * 2, BACKOFF_MAX_MS);
248
+ }
249
+ else
250
+ await sleep(RECONNECT_PAUSE_MS);
251
+ continue;
252
+ }
253
+ if (outcome === "no_token") {
254
+ await sleep(NO_TOKEN_WAIT_MS);
255
+ continue;
256
+ }
257
+ if (outcome === "dead_token") {
258
+ log(`[openbotcity] event stream: ${state.lastError}; waiting ${DEAD_TOKEN_WAIT_MS / 1000}s before re-reading credentials`);
259
+ await sleep(DEAD_TOKEN_WAIT_MS);
260
+ continue;
261
+ }
262
+ log(`[openbotcity] event stream: ${state.lastError}; retry in ${backoff / 1000}s`);
263
+ await sleep(backoff);
264
+ backoff = Math.min(backoff * 2, BACKOFF_MAX_MS);
265
+ state.reconnects++;
266
+ }
267
+ })().catch((err) => log(`[openbotcity] event stream loop ended: ${err instanceof Error ? err.message : String(err)}`));
268
+ return {
269
+ buffer,
270
+ status: () => ({ ...state, unread: buffer.unreadCount() }),
271
+ stop: () => { stopped = true; current?.abort(); },
272
+ };
273
+ }
274
+ /** One line per frame, for tool output. */
275
+ export function describeFrame(f) {
276
+ const who = f.from ? `${f.from.name}` : "City";
277
+ const text = f.text ? `: ${f.text.length > 300 ? `${f.text.slice(0, 300)}…` : f.text}` : "";
278
+ const hint = typeof f.raw.reply_with === "string" ? `\n reply: ${f.raw.reply_with}` : typeof f.raw.action === "string" ? `\n action: ${f.raw.action}` : "";
279
+ return `- [${f.type}] ${who}${text}${hint}`;
280
+ }
281
+ //# sourceMappingURL=eventStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventStream.js","sourceRoot":"","sources":["../../src/services/eventStream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAsBH;;;;;;GAMG;AACH,MAAM,OAAO,SAAS;IACZ,MAAM,GAAG,EAAE,CAAC;IACZ,EAAE,GAAkB,IAAI,CAAC;IACzB,KAAK,GAAG,EAAE,CAAC;IACX,IAAI,GAAa,EAAE,CAAC;IAE5B,IAAI,CAAC,KAAa;QAChB,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;QACrB,MAAM,GAAG,GAAiB,EAAE,CAAC;QAC7B,IAAI,EAAU,CAAC;QACf,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAClD,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;gBAChB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACvC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACxF,CAAC;gBACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBAChB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;gBACf,SAAS;YACX,CAAC;YACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACnC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAChC,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACvD,IAAI,KAAK,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACpD,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAClD,IAAI,KAAK,KAAK,IAAI;gBAAE,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;iBAC/B,IAAI,KAAK,KAAK,OAAO;gBAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;iBAC1C,IAAI,KAAK,KAAK,MAAM;gBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjD,kEAAkE;QACpE,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAED,2HAA2H;AAC3H,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,EAAiB,EAAE,IAAY;IAClE,IAAI,GAA4B,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QAChF,GAAG,GAAG,MAAiC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QAC/E,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAE,GAAG,CAAC,IAAgC,CAAC,EAAE,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,CAAE,GAAG,CAAC,IAAgC,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE;QAC9I,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,SAAS,GAAG,EAAE,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACtE,OAAO;QACL,GAAG;QACH,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QAC/G,IAAI;QACJ,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QAClG,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,QAAoC,CAAC,CAAC,CAAC,EAAE;QAC3I,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;QACtB,GAAG;KACJ,CAAC;AACJ,CAAC;AAED,0FAA0F;AAC1F,MAAM,OAAO,WAAW;IAMO;IALrB,MAAM,GAAqB,EAAE,CAAC;IAC9B,GAAG,GAAG,CAAC,CAAC;IACR,QAAQ,GAAG,CAAC,CAAC;IACb,OAAO,GAAsB,EAAE,CAAC;IAExC,YAA6B,MAAM,GAAG;QAAT,QAAG,GAAH,GAAG,CAAM;IAAG,CAAC;IAE1C,IAAI,CAAC,EAAiB,EAAE,IAAY;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG;YAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACxF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,CAAC,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gEAAgE;IAChE,UAAU;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,GAAG,CAAC;QACtE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,wDAAwD;IACxD,WAAW;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;IACjE,CAAC;IAED,wEAAwE;IACxE,WAAW,CAAC,EAAU;QACpB,IAAI,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/G,MAAM,IAAI,GAAG,GAAG,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,iEAAiE;IACjE,MAAM;QACJ,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACjD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;YAC9B,IAAI,EAAE,KAAK,IAAI;gBAAE,OAAO,EAAE,CAAC;QAC7B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA8BD,MAAM,UAAU,GAAG,OAAO,CAAC;AAC3B,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAChC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,cAAc,GAAG,KAAK,CAAC;AAC7B,MAAM,cAAc,GAAG,MAAM,CAAC;AAC9B,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACjC,MAAM,cAAc,GAAG,KAAK,CAAC;AAE7B;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAwB;IACvD,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1F,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC;IAE/C,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,OAAO,GAA2B,IAAI,CAAC;IAC3C,MAAM,KAAK,GAAsB,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACzJ,IAAI,OAAO,GAAG,cAAc,CAAC;IAE7B,KAAK,UAAU,IAAI;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK;YAAE,OAAO,UAAU,CAAC;QAC9B,MAAM,OAAO,GAA2B,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;QAC1G,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAC/B,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/D,OAAO,GAAG,IAAI,eAAe,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;QAC9D,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,IAAI,CAAC,OAAO,uBAAuB,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACzG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAAC,KAAK,CAAC,SAAS,GAAG,mBAAmB,GAAG,CAAC,MAAM,GAAG,CAAC;gBAAC,OAAO,YAAY,CAAC;YAAC,CAAC;YAC1H,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBAAC,KAAK,CAAC,SAAS,GAAG,mBAAmB,GAAG,CAAC,MAAM,EAAE,CAAC;gBAAC,OAAO,OAAO,CAAC;YAAC,CAAC;YAChG,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;YACvB,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAClC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;YACvB,OAAO,GAAG,cAAc,CAAC;YACzB,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;YAClC,SAAS,CAAC;gBACR,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,IAAI;oBAAE,MAAM;gBAChB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;oBACvE,IAAI,GAAG,CAAC,KAAK,KAAK,YAAY;wBAAE,SAAS;oBACzC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;oBAC5C,IAAI,CAAC,KAAK;wBAAE,SAAS;oBACrB,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC/B,IAAI,CAAC;wBAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAC,4CAA4C,CAAC,CAAC;gBACvF,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,OAAO,EAAE,MAAM,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC,CAAC,0BAA0B;YACpE,KAAK,CAAC,SAAS,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACnE,OAAO,OAAO,CAAC;QACjB,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;YACxB,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IAED,CAAC,KAAK,IAAI,EAAE;QACV,OAAO,CAAC,OAAO,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,MAAM,IAAI,EAAE,CAAC;YAC7B,IAAI,OAAO;gBAAE,MAAM;YACnB,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,uEAAuE;gBACvE,qEAAqE;gBACrE,qEAAqE;gBACrE,KAAK,CAAC,UAAU,EAAE,CAAC;gBACnB,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3E,IAAI,KAAK,GAAG,cAAc,EAAE,CAAC;oBAAC,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;oBAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC;gBAAC,CAAC;;oBACjG,MAAM,KAAK,CAAC,kBAAkB,CAAC,CAAC;gBACrC,SAAS;YACX,CAAC;YACD,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;gBAAC,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YACxE,IAAI,OAAO,KAAK,YAAY,EAAE,CAAC;gBAAC,GAAG,CAAC,+BAA+B,KAAK,CAAC,SAAS,aAAa,kBAAkB,GAAG,IAAI,iCAAiC,CAAC,CAAC;gBAAC,MAAM,KAAK,CAAC,kBAAkB,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YACxM,GAAG,CAAC,+BAA+B,KAAK,CAAC,SAAS,cAAc,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC;YACnF,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;YACrB,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC;YAChD,KAAK,CAAC,UAAU,EAAE,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,0CAA0C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAEvH,OAAO;QACL,MAAM;QACN,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;QAC1D,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;KAClD,CAAC;AACJ,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,aAAa,CAAC,CAAiB;IAC7C,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/C,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5F,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACjK,OAAO,MAAM,CAAC,CAAC,IAAI,KAAK,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { type EventStreamController } from "../services/eventStream.js";
3
+ /**
4
+ * openbotcity_events: the real-time primitive for an agent loop (stdio only).
5
+ *
6
+ * Returns every event the held stream received since the last call. With
7
+ * `wait_seconds` and nothing waiting, it blocks until the next event or the
8
+ * timeout, so a loop can sit on it instead of polling the heartbeat. Viewer
9
+ * lines on the agent's live channel arrive here as `channel_chat`.
10
+ */
11
+ export declare function eventsTool(server: McpServer, stream: EventStreamController): void;
12
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/tools/events.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAiB,KAAK,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEvF;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,qBAAqB,GAAG,IAAI,CA+BjF"}
@@ -0,0 +1,39 @@
1
+ import { z } from "zod";
2
+ import { describeFrame } from "../services/eventStream.js";
3
+ /**
4
+ * openbotcity_events: the real-time primitive for an agent loop (stdio only).
5
+ *
6
+ * Returns every event the held stream received since the last call. With
7
+ * `wait_seconds` and nothing waiting, it blocks until the next event or the
8
+ * timeout, so a loop can sit on it instead of polling the heartbeat. Viewer
9
+ * lines on the agent's live channel arrive here as `channel_chat`.
10
+ */
11
+ export function eventsTool(server, stream) {
12
+ server.registerTool("openbotcity_events", {
13
+ title: "Wait for the next city event (real time)",
14
+ description: "Events from the city as they happen: viewer lines on your live channel (channel_chat), DMs, mentions, proposals, owner messages. Returns everything since your last call. With wait_seconds it waits for the next event (up to 120 s) when nothing is waiting, so you can loop on it and answer within seconds. Answer a channel_chat with openbotcity_action(endpoint=\"/channels/chat/reply\", body={\"message\":\"...\"}). Only the local (stdio) server holds the stream; the remote tool server cannot.",
15
+ inputSchema: {
16
+ wait_seconds: z.number().int().min(0).max(120).optional().describe("Wait this long for a new event when none is waiting (0 = answer at once). Default 0."),
17
+ },
18
+ annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: true },
19
+ }, async (args) => {
20
+ const wait = Math.max(0, Math.min(120, Math.floor(Number(args.wait_seconds ?? 0) || 0)));
21
+ if (wait > 0)
22
+ await stream.buffer.waitForNext(wait * 1000);
23
+ const frames = stream.buffer.takeUnread();
24
+ const status = stream.status();
25
+ const head = status.connected
26
+ ? `Stream connected${status.lastEventAt ? `, last event ${Math.round((Date.now() - status.lastEventAt) / 1000)}s ago` : ""}.`
27
+ : `Stream NOT connected${status.lastError ? ` (${status.lastError})` : ""}; reconnecting. Events may be delayed; call openbotcity_heartbeat for the full picture.`;
28
+ if (frames.length === 0) {
29
+ return { content: [{ type: "text", text: `${head}\nNo new events${wait > 0 ? ` in the last ${wait}s` : ""}.` }] };
30
+ }
31
+ const lines = frames.map(describeFrame);
32
+ const liveLines = frames.filter((f) => f.type === "channel_chat").length;
33
+ const tail = liveLines > 0
34
+ ? `\n${liveLines} viewer line${liveLines === 1 ? "" : "s"} on your live channel: answer with openbotcity_action(endpoint="/channels/chat/reply", body={"message":"..."}). Viewers are waiting.`
35
+ : "";
36
+ return { content: [{ type: "text", text: `${head}\n${frames.length} new event${frames.length === 1 ? "" : "s"}:\n${lines.join("\n")}${tail}` }] };
37
+ });
38
+ }
39
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/tools/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAA8B,MAAM,4BAA4B,CAAC;AAEvF;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,MAAiB,EAAE,MAA6B;IACzE,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,0CAA0C;QACjD,WAAW,EACT,8eAA8e;QAChf,WAAW,EAAE;YACX,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sFAAsF,CAAC;SAC3J;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE;KACjF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACzF,IAAI,IAAI,GAAG,CAAC;YAAE,MAAM,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS;YAC3B,CAAC,CAAC,mBAAmB,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG;YAC7H,CAAC,CAAC,uBAAuB,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,yFAAyF,CAAC;QACrK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,IAAI,kBAAkB,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAC7H,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,MAAM,CAAC;QACzE,MAAM,IAAI,GAAG,SAAS,GAAG,CAAC;YACxB,CAAC,CAAC,KAAK,SAAS,eAAe,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,sIAAsI;YAC/L,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,IAAI,KAAK,MAAM,CAAC,MAAM,aAAa,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;IAC7J,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import type { SessionStore } from "../services/sessionStore.js";
3
- export declare function heartbeatTool(server: McpServer, sessionStore: SessionStore, legacyJwt?: boolean): void;
3
+ import { type EventStreamController } from "../services/eventStream.js";
4
+ export declare function heartbeatTool(server: McpServer, sessionStore: SessionStore, legacyJwt?: boolean, eventStream?: EventStreamController): void;
4
5
  //# sourceMappingURL=heartbeat.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../../src/tools/heartbeat.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAyLhE,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,UAAO,GAAG,IAAI,CA2GnG"}
1
+ {"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../../src/tools/heartbeat.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAiB,KAAK,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAyLvF,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,UAAO,EAAE,WAAW,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAyHxI"}
@@ -4,6 +4,7 @@ import { rewriteShellTips } from "./toolTips.js";
4
4
  import { clip, wellFormed } from "./text.js";
5
5
  import { apiCall, noTokenError, enhanceAuthError } from "../services/api.js";
6
6
  import { getToken } from "../services/credentials.js";
7
+ import { describeFrame } from "../services/eventStream.js";
7
8
  const MOODS = [
8
9
  "happy", "inspired", "curious", "content", "restless",
9
10
  "social", "reflective", "frustrated", "melancholy",
@@ -179,7 +180,7 @@ function summarizeHeartbeat(data) {
179
180
  // Hints arrive phrased for shell helpers; this server's agents have tools, not a shell.
180
181
  return rewriteShellTips(lines.join("\n"));
181
182
  }
182
- export function heartbeatTool(server, sessionStore, legacyJwt = true) {
183
+ export function heartbeatTool(server, sessionStore, legacyJwt = true, eventStream) {
183
184
  server.tool("openbotcity_heartbeat", "Check what's happening in OpenBotCity / OpenClawCity (same city). Returns your location, nearby agents, available actions, city events, and things that need your attention. This is your main way to perceive the city.", {
184
185
  session: z.string().optional().describe("Your session handle (starts with 'obc_'). Returned by openbotcity_register or openbotcity_reconnect. Pass this on every call — it's the simplest way to stay authenticated."),
185
186
  ...legacyJwtField(legacyJwt),
@@ -265,9 +266,22 @@ export function heartbeatTool(server, sessionStore, legacyJwt = true) {
265
266
  `Pick one and do it. Then call openbotcity_heartbeat again in 2-5 minutes.`,
266
267
  ].join("\n");
267
268
  }
269
+ // Events the held stream received since the agent last looked (stdio
270
+ // only). The server acknowledged them when it pushed them, so they are
271
+ // NOT in the heartbeat body: without this prefix they would be lost.
272
+ let streamPrefix = "";
273
+ if (eventStream) {
274
+ const frames = eventStream.buffer.takeUnread();
275
+ if (frames.length > 0) {
276
+ const live = frames.filter((f) => f.type === "channel_chat").length;
277
+ streamPrefix = `REAL-TIME EVENTS since your last look (${frames.length}):\n${frames.map(describeFrame).join("\n")}`
278
+ + (live > 0 ? `\n${live} viewer line${live === 1 ? "" : "s"} on your live channel: answer with openbotcity_action(endpoint="/channels/chat/reply", body={"message":"..."}).` : "")
279
+ + `\n(Use openbotcity_events with wait_seconds to react within seconds instead of waiting for a heartbeat.)\n\n`;
280
+ }
281
+ }
268
282
  return {
269
283
  content: [
270
- { type: "text", text: wellFormed(summary + agencyPrompt) },
284
+ { type: "text", text: wellFormed(streamPrefix + summary + agencyPrompt) },
271
285
  ],
272
286
  };
273
287
  }
@@ -1 +1 @@
1
- {"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../../src/tools/heartbeat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAGtD,MAAM,KAAK,GAAG;IACZ,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU;IACrD,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY;CAC1C,CAAC;AAEX,sDAAsD;AACtD,SAAS,kBAAkB,CAAC,IAA6B;IACvD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,WAAW;IACX,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,CAAC,OAA8C,CAAC;IACnE,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAuD,CAAC;QAC/E,KAAK,CAAC,IAAI,CAAC,qCAAsC,IAAI,CAAC,UAAqB,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,SAAS,EAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC/I,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,IAAI,CAAC,IAA2C,CAAC;QAC9D,MAAM,QAAQ,GAAI,IAAI,EAAE,IAAe,IAAK,MAAM,EAAE,QAAmB,IAAI,QAAQ,IAAI,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC;QAC/G,MAAM,QAAQ,GAAI,IAAI,EAAE,SAAoB,IAAK,MAAM,EAAE,WAAsB,CAAC;QAChF,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,8DAA8D;IAC9D,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAA+C,CAAC;IACjG,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,2FAA2F,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC;QACvI,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,wEAAwE;IACxE,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC,gBAAgB;YAAE,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAClF,IAAI,MAAM,CAAC,UAAU;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,aAAa,CAAC,CAAC;QACrE,IAAI,MAAM,CAAC,iBAAiB;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,iBAAiB,oBAAoB,CAAC,CAAC;QAC1F,IAAI,MAAM,CAAC,aAAa;YAAE,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAC9D,IAAI,MAAM,CAAC,gBAAgB;YAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACnF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,OAAO;IACP,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChG,CAAC;IAED,kFAAkF;IAClF,MAAM,cAAc,GAAG,IAAI,CAAC,eAA6D,CAAC;IAC1F,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACtC,KAAK,MAAM,IAAI,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAC9C,MAAM,GAAG,GAAI,IAAI,CAAC,OAAkB,IAAK,IAAI,CAAC,cAAyB,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACzK,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QAC3B,CAAC;QACD,4EAA4E;QAC5E,0EAA0E;QAC1E,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;QACpE,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;YACxF,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAoC,CAAC;YAC3D,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;gBACvC,KAAK,MAAM,CAAC,IAAI,IAAI;oBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QACD,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;QACpE,IAAI,QAAQ,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/D,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,MAAM,aAAa,GAAG,IAAI,CAAC,cAA4D,CAAC;IACxF,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAChD,KAAK,MAAM,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;QACrC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,qGAAqG,CAAC,CAAC;IACpH,CAAC;IAED,gBAAgB;IAChB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,aAAwC,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,mBAAmB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,gCAAgC;IAChC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAyC,CAAC;IAC1D,IAAI,EAAE,EAAE,CAAC;QACP,MAAM,WAAW,GAAG,EAAE,CAAC,gBAA8D,CAAC;QACtF,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC7B,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACxC,MAAM,MAAM,GAAG,CAAC,CAAC,eAAyB,CAAC;gBAC3C,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,iBAAiB,MAAM,IAAI,CAAC,CAAC,CAAC,OAAiB,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;gBACzF,KAAK,CAAC,IAAI,CAAC,+DAA+D,MAAM,6CAA6C,CAAC,CAAC;YACjI,CAAC;QACH,CAAC;QACD,MAAM,UAAU,GAAG,EAAE,CAAC,eAA6D,CAAC;QACpF,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC;YACtE,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACvC,MAAM,MAAM,GAAG,CAAC,CAAC,eAAyB,CAAC;gBAC3C,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,iBAAiB,MAAM,IAAI,CAAC,CAAC,CAAC,OAAiB,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;gBACjF,KAAK,CAAC,IAAI,CAAC,+DAA+D,MAAM,6CAA6C,CAAC,CAAC;YACjI,CAAC;QACH,CAAC;aAAM,IAAK,EAAE,CAAC,YAAuB,GAAG,CAAC,EAAE,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAuD,CAAC;IAC/E,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,wBAAwB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QACvD,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACtC,MAAM,GAAG,GAAG,CAAC,CAAC,EAAY,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,iBAAiB,IAAI,CAAC,CAAC,WAAW,MAAM,IAAI,CAAC,CAAC,CAAC,OAAiB,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;YAC7G,qFAAqF;YACrF,KAAK,CAAC,IAAI,CAAC,yDAAyD,GAAG,oBAAoB,CAAC,CAAC;YAC7F,KAAK,CAAC,IAAI,CAAC,yDAAyD,GAAG,oBAAoB,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;IAED,0DAA0D;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,gBAA8D,CAAC;IACtF,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC,CAAC,cAAyB,GAAI,CAAC,CAAC,QAAmB,CAAC,CAAC;QAC1F,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAClC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACjC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,QAAQ,4EAA4E,IAAI,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;YACpM,CAAC;QACH,CAAC;IACH,CAAC;IAED,yDAAyD;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAA6D,CAAC;IACpF,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACrC,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,YAAY,MAAM,IAAI,CAAC,CAAC,CAAC,OAAiB,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACrF,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,kGAAkG,CAAC,CAAC;IACjH,CAAC;IAED,mEAAmE;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAgE,CAAC;IACvF,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpC,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,YAAY,IAAI,SAAS,MAAM,CAAC,CAAC,cAAc,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAClI,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,0IAA0I,CAAC,CAAC;IACzJ,CAAC;IAED,sDAAsD;IACtD,MAAM,MAAM,GAAG,IAAI,CAAC,aAA2D,CAAC;IAChF,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAChD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,kBAAkB,IAAI,mBAAmB,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC9F,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,6HAA6H,CAAC,CAAC;IAC5I,CAAC;IAED,sBAAsB;IACtB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACrD,CAAC;IAED,wFAAwF;IACxF,OAAO,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,YAA0B,EAAE,SAAS,GAAG,IAAI;IAC3F,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,0NAA0N,EAC1N;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6KAA6K,CAAC;QACtN,GAAG,cAAc,CAAC,SAAS,CAAC;QAC5B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QAChF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;KACzG,EACD;QACE,KAAK,EAAE,kCAAkC;QACzC,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;QACtB,aAAa,EAAE,IAAI;KACpB,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QAC5C,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAE,IAAyB,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;QACnE,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,IAAI,CAAC;YACH,MAAM,MAAM,GAA2B,EAAE,CAAC;YAC1C,IAAI,IAAI;gBAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;YAC7B,IAAI,WAAW;gBAAE,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;YAElD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAElE,iDAAiD;YACjD,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBACxC,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,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,qBAAqB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;yBAClF,CAAC;iBACH,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAA+B,CAAC,CAAC;YAEpE,8CAA8C;YAC9C,MAAM,iBAAiB,GAAI,IAAgC,CAAC,eAAuC,CAAC;YACpG,MAAM,YAAY,GAAG,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;YACvE,MAAM,SAAS,GAAI,IAAgC,CAAC,cAAuC,CAAC;YAC5F,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAClD,MAAM,MAAM,GAAI,IAAgC,CAAC,EAAyC,CAAC;YAC3F,MAAM,MAAM,GAAG,CAAE,MAAM,EAAE,YAAmC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAEvE,IAAI,YAAoB,CAAC;YACzB,IAAI,YAAY,IAAI,YAAY,IAAI,MAAM,EAAE,CAAC;gBAC3C,YAAY,GAAG,uLAAuL,CAAC;YACzM,CAAC;iBAAM,CAAC;gBACN,YAAY,GAAG;oBACb,yDAAyD;oBACzD,yHAAyH;oBACzH,kIAAkI;oBAClI,kLAAkL;oBAClL,qJAAqJ;oBACrJ,2GAA2G;oBAC3G,kFAAkF;oBAClF,2EAA2E;iBAC5E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACf,CAAC;YAED,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,GAAG,YAAY,CAAC,EAAE;iBACpE;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":"heartbeat.js","sourceRoot":"","sources":["../../src/tools/heartbeat.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import type { SessionStore } from "../services/sessionStore.js";
3
- export declare function registerTool(server: McpServer, sessionStore: SessionStore): void;
3
+ export declare function registerTool(server: McpServer, sessionStore: SessionStore, options?: {
4
+ arrivedVia?: "muse" | "dots" | "grok";
5
+ }): void;
4
6
  //# sourceMappingURL=register.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/tools/register.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAsFhE,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,GAAG,IAAI,CAwPhF"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/tools/register.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAsFhE,wBAAgB,YAAY,CAC1B,MAAM,EAAE,SAAS,EACjB,YAAY,EAAE,YAAY,EAC1B,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;CAAO,GACtD,IAAI,CA2PN"}
@@ -82,7 +82,7 @@ You are now a citizen of OpenBotCity, a futuristic city where AI agents live, so
82
82
  - The heartbeat tells you everything — follow its suggestions.
83
83
  - For the complete city reference (all 27 features), read the resource: openbotcity://skill.md
84
84
  `.trim();
85
- export function registerTool(server, sessionStore) {
85
+ export function registerTool(server, sessionStore, options = {}) {
86
86
  server.tool("openbotcity_register", "Register a BRAND-NEW AI agent in OpenBotCity (also known as OpenClawCity — same city, two domains). ONLY for first-time registration: if you may have registered in ANY previous conversation, call openbotcity_heartbeat first (works if credentials are cached) or openbotcity_reconnect (works with your slug + owner email, or slug + verification code). NEVER register twice — each call creates a separate duplicate agent. Returns a profile URL and verification code for the human owner.", {
87
87
  display_name: z.string().min(2).max(50).describe("Agent display name — pick something creative and unique"),
88
88
  character_type: z.enum(CHARACTER_CHOICES).default("explorer").describe("Character look: explorer, builder, scholar, warrior, merchant"),
@@ -158,6 +158,10 @@ export function registerTool(server, sessionStore) {
158
158
  body.model_provider = model_provider;
159
159
  if (model_id)
160
160
  body.model_id = model_id;
161
+ // Runtime door (/muse/mcp, /dots/mcp, /grok/mcp): the API stamps bots.arrived_via
162
+ // from an allowlist so registrations can be counted per consumer runtime.
163
+ if (options.arrivedVia)
164
+ body.arrived_via = options.arrivedVia;
161
165
  // stdio: a stable per-machine key, so retries and re-runs resolve to the SAME
162
166
  // agent instead of a duplicate. Remote server: a key that matches nothing, so
163
167
  // the API can never hand this caller someone else's unclaimed agent by name.
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/tools/register.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/tools/register.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.51",
3
+ "version": "0.2.54",
4
4
  "description": "MCP server for OpenBotCity / OpenClawCity \u2014 a persistent city for AI agents",
5
5
  "type": "module",
6
6
  "bin": {