@cursor/july 0.1.7 → 0.1.9

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.
Files changed (210) hide show
  1. package/dist/bin/agent-serve.js +31 -2
  2. package/dist/channels/slack/channel-watch.d.ts +6 -1
  3. package/dist/channels/slack/channel-watch.d.ts.map +1 -1
  4. package/dist/channels/slack/channel-watch.js +22 -1
  5. package/dist/channels/slack/cursor-account.d.ts +4 -0
  6. package/dist/channels/slack/cursor-account.d.ts.map +1 -1
  7. package/dist/channels/slack/cursor-account.js +12 -2
  8. package/dist/channels/slack/defaults.d.ts +10 -5
  9. package/dist/channels/slack/defaults.d.ts.map +1 -1
  10. package/dist/channels/slack/defaults.js +39 -17
  11. package/dist/channels/slack/dispatch.d.ts +18 -0
  12. package/dist/channels/slack/dispatch.d.ts.map +1 -1
  13. package/dist/channels/slack/dispatch.js +141 -38
  14. package/dist/channels/slack/inbound.d.ts +13 -3
  15. package/dist/channels/slack/inbound.d.ts.map +1 -1
  16. package/dist/channels/slack/inbound.js +17 -9
  17. package/dist/channels/slack/index.d.ts +4 -0
  18. package/dist/channels/slack/index.d.ts.map +1 -1
  19. package/dist/channels/slack/index.js +4 -0
  20. package/dist/channels/slack/live-delivery.d.ts.map +1 -1
  21. package/dist/channels/slack/live-delivery.js +1 -0
  22. package/dist/channels/slack/manifest.d.ts.map +1 -1
  23. package/dist/channels/slack/manifest.js +3 -0
  24. package/dist/channels/slack/nudge-carrier.d.ts +19 -0
  25. package/dist/channels/slack/nudge-carrier.d.ts.map +1 -0
  26. package/dist/channels/slack/nudge-carrier.js +166 -0
  27. package/dist/channels/slack/nudge-store.d.ts +61 -0
  28. package/dist/channels/slack/nudge-store.d.ts.map +1 -0
  29. package/dist/channels/slack/nudge-store.js +266 -0
  30. package/dist/channels/slack/post-update-delivery.js +318 -0
  31. package/dist/channels/slack/slack-channel.d.ts.map +1 -1
  32. package/dist/channels/slack/slack-channel.js +74 -25
  33. package/dist/channels/slack/stop.d.ts +14 -0
  34. package/dist/channels/slack/stop.d.ts.map +1 -0
  35. package/dist/channels/slack/stop.js +22 -0
  36. package/dist/channels/slack/thread-context.d.ts +81 -0
  37. package/dist/channels/slack/thread-context.d.ts.map +1 -0
  38. package/dist/channels/slack/thread-context.js +470 -0
  39. package/dist/channels/slack/types.d.ts +27 -0
  40. package/dist/channels/slack/types.d.ts.map +1 -1
  41. package/dist/docs/404.html +2 -2
  42. package/dist/docs/ab.html +4 -4
  43. package/dist/docs/assets/{app.COTN7wgo.js → app.Ciosf24M.js} +1 -1
  44. package/dist/docs/assets/chunks/@localSearchIndexroot.D154Detj.js +1 -0
  45. package/dist/docs/assets/chunks/{VPLocalSearchBox.BW3TBdT0.js → VPLocalSearchBox.BcRDly7n.js} +1 -1
  46. package/dist/docs/assets/chunks/{theme.BEJW0vE7.js → theme.CMpbjdfx.js} +2 -2
  47. package/dist/docs/assets/{deployment.md.BtfEsc9S.js → deployment.md.DC5-ImcM.js} +1 -1
  48. package/dist/docs/assets/{example-agents_approval-buddy.md.8R5phXb5.js → example-agents_approval-buddy.md.DFGBYLcc.js} +2 -2
  49. package/dist/docs/assets/{example-agents_approval-buddy.md.8R5phXb5.lean.js → example-agents_approval-buddy.md.DFGBYLcc.lean.js} +1 -1
  50. package/dist/docs/assets/example-agents_index.md.BPXjUtRB.js +2 -0
  51. package/dist/docs/assets/example-agents_index.md.BPXjUtRB.lean.js +1 -0
  52. package/dist/docs/assets/example-agents_oncall.md.BG_sUMly.js +10 -0
  53. package/dist/docs/assets/example-agents_oncall.md.BG_sUMly.lean.js +1 -0
  54. package/dist/docs/assets/{example-agents_security-reviewer.md.D2rtwDTO.js → example-agents_security-reviewer.md.CE9v-aKm.js} +2 -2
  55. package/dist/docs/assets/{example-agents_security-reviewer.md.D2rtwDTO.lean.js → example-agents_security-reviewer.md.CE9v-aKm.lean.js} +1 -1
  56. package/dist/docs/assets/{guides_slack.md.CCwqHvSV.js → guides_slack.md.FWale6Ip.js} +4 -3
  57. package/dist/docs/assets/{guides_slack.md.CCwqHvSV.lean.js → guides_slack.md.FWale6Ip.lean.js} +1 -1
  58. package/dist/docs/assets/{reference_sessions.md.DdjWabnN.js → reference_sessions.md.DLd6mvbv.js} +2 -2
  59. package/dist/docs/assets/{reference_sessions.md.DdjWabnN.lean.js → reference_sessions.md.DLd6mvbv.lean.js} +1 -1
  60. package/dist/docs/assets/{storage.md.CVnInNiN.js → storage.md.DRTdnFvd.js} +9 -2
  61. package/dist/docs/assets/{storage.md.CVnInNiN.lean.js → storage.md.DRTdnFvd.lean.js} +1 -1
  62. package/dist/docs/building-with-agents.html +4 -4
  63. package/dist/docs/concepts.html +4 -4
  64. package/dist/docs/deployment.html +6 -6
  65. package/dist/docs/evals.html +4 -4
  66. package/dist/docs/example-agents/approval-buddy.html +5 -5
  67. package/dist/docs/example-agents/benny.html +5 -5
  68. package/dist/docs/example-agents/bugbot.html +5 -5
  69. package/dist/docs/example-agents/codebase-wiki.html +4 -4
  70. package/dist/docs/example-agents/codeowners-review.html +4 -4
  71. package/dist/docs/example-agents/concierge.html +4 -4
  72. package/dist/docs/example-agents/fsd.html +4 -4
  73. package/dist/docs/example-agents/index.html +6 -6
  74. package/dist/docs/example-agents/knowledge-base.html +4 -4
  75. package/dist/docs/example-agents/oncall.html +34 -0
  76. package/dist/docs/example-agents/security-reviewer.html +6 -6
  77. package/dist/docs/example-agents/slack-agent.html +4 -4
  78. package/dist/docs/example-agents/weather-agent.html +4 -4
  79. package/dist/docs/guides/agent-to-agent.html +4 -4
  80. package/dist/docs/guides/cloud-runtime.html +4 -4
  81. package/dist/docs/guides/github.html +4 -4
  82. package/dist/docs/guides/human-in-the-loop.html +4 -4
  83. package/dist/docs/guides/slack.html +7 -6
  84. package/dist/docs/guides/webhooks.html +4 -4
  85. package/dist/docs/hashmap.json +1 -1
  86. package/dist/docs/hillclimbing.html +4 -4
  87. package/dist/docs/index.html +4 -4
  88. package/dist/docs/quickstart.html +4 -4
  89. package/dist/docs/reference/agent-config.html +4 -4
  90. package/dist/docs/reference/channels.html +4 -4
  91. package/dist/docs/reference/cli.html +4 -4
  92. package/dist/docs/reference/connections.html +4 -4
  93. package/dist/docs/reference/hooks.html +4 -4
  94. package/dist/docs/reference/http-api.html +4 -4
  95. package/dist/docs/reference/instructions.html +4 -4
  96. package/dist/docs/reference/playground.html +4 -4
  97. package/dist/docs/reference/project-layout.html +4 -4
  98. package/dist/docs/reference/schedules.html +4 -4
  99. package/dist/docs/reference/sessions.html +5 -5
  100. package/dist/docs/reference/skills.html +4 -4
  101. package/dist/docs/reference/subagents.html +4 -4
  102. package/dist/docs/reference/tools.html +4 -4
  103. package/dist/docs/scaffolding-agents.html +4 -4
  104. package/dist/docs/storage.html +13 -6
  105. package/dist/docs/troubleshooting.html +4 -4
  106. package/dist/internal/cli-deploy.d.ts.map +1 -1
  107. package/dist/internal/cli-deploy.js +45 -18
  108. package/dist/internal/cli-mcp.d.ts +64 -0
  109. package/dist/internal/cli-mcp.d.ts.map +1 -0
  110. package/dist/internal/cli-mcp.js +570 -0
  111. package/dist/internal/deploy-client.d.ts +7 -1
  112. package/dist/internal/deploy-client.d.ts.map +1 -1
  113. package/dist/internal/deploy-client.js +3 -0
  114. package/dist/internal/deploy-source.d.ts +3 -0
  115. package/dist/internal/deploy-source.d.ts.map +1 -1
  116. package/dist/internal/deploy-source.js +25 -7
  117. package/dist/internal/discovery.js +1 -1
  118. package/dist/internal/distribution.d.ts.map +1 -1
  119. package/dist/internal/distribution.js +3 -0
  120. package/dist/internal/host-kv.d.ts +17 -0
  121. package/dist/internal/host-kv.d.ts.map +1 -0
  122. package/dist/internal/host-kv.js +77 -0
  123. package/dist/internal/hosting.d.ts +12 -2
  124. package/dist/internal/hosting.d.ts.map +1 -1
  125. package/dist/internal/hosting.js +21 -4
  126. package/dist/internal/json-dir-store.js +100 -0
  127. package/dist/internal/logs-client.d.ts +16 -2
  128. package/dist/internal/logs-client.d.ts.map +1 -1
  129. package/dist/internal/logs-client.js +51 -16
  130. package/dist/internal/server.d.ts.map +1 -1
  131. package/dist/internal/server.js +8 -0
  132. package/dist/internal/session-engine.d.ts +42 -7
  133. package/dist/internal/session-engine.d.ts.map +1 -1
  134. package/dist/internal/session-engine.js +276 -66
  135. package/dist/internal/storage-coordinator.d.ts +18 -1
  136. package/dist/internal/storage-coordinator.d.ts.map +1 -1
  137. package/dist/internal/storage-coordinator.js +43 -0
  138. package/dist/internal/workspace.d.ts +19 -0
  139. package/dist/internal/workspace.d.ts.map +1 -1
  140. package/dist/internal/workspace.js +47 -13
  141. package/dist/playground/assets/{index-72vCOBWO.js → index-C0-QEG4O.js} +42 -42
  142. package/dist/playground/assets/index-z3JY9O2x.css +1 -0
  143. package/dist/playground/index.html +2 -2
  144. package/dist/storage-backends/cursor-hosted.d.ts +65 -0
  145. package/dist/storage-backends/cursor-hosted.d.ts.map +1 -0
  146. package/dist/storage-backends/cursor-hosted.js +203 -0
  147. package/dist/storage-backends/file-kv.d.ts +42 -0
  148. package/dist/storage-backends/file-kv.d.ts.map +1 -0
  149. package/dist/storage-backends/file-kv.js +190 -0
  150. package/dist/storage-backends/postgres-kv.d.ts +82 -0
  151. package/dist/storage-backends/postgres-kv.d.ts.map +1 -0
  152. package/dist/storage-backends/postgres-kv.js +185 -0
  153. package/dist/storage.d.ts +10 -1
  154. package/dist/storage.d.ts.map +1 -1
  155. package/dist/storage.js +10 -1
  156. package/dist/types.d.ts +79 -0
  157. package/dist/types.d.ts.map +1 -1
  158. package/docs/.vitepress/cache/deps/package.json +3 -0
  159. package/docs/deployment.md +7 -3
  160. package/docs/example-agents/approval-buddy.md +1 -1
  161. package/docs/example-agents/index.md +15 -10
  162. package/docs/example-agents/oncall.md +216 -0
  163. package/docs/example-agents/security-reviewer.md +5 -5
  164. package/docs/guides/slack.md +11 -2
  165. package/docs/reference/sessions.md +13 -4
  166. package/docs/storage.md +41 -0
  167. package/package.json +22 -1
  168. package/skills/framework-map/SKILL.md +6 -4
  169. package/src/bin/agent-serve.ts +32 -2
  170. package/src/channels/slack/channel-watch.ts +28 -1
  171. package/src/channels/slack/cursor-account.ts +20 -0
  172. package/src/channels/slack/defaults.ts +51 -20
  173. package/src/channels/slack/dispatch.ts +215 -40
  174. package/src/channels/slack/inbound.ts +30 -10
  175. package/src/channels/slack/index.ts +4 -0
  176. package/src/channels/slack/live-delivery.ts +1 -0
  177. package/src/channels/slack/manifest.ts +3 -0
  178. package/src/channels/slack/nudge-carrier.ts +182 -0
  179. package/src/channels/slack/nudge-store.ts +308 -0
  180. package/src/channels/slack/slack-channel.ts +106 -31
  181. package/src/channels/slack/stop.ts +25 -0
  182. package/src/channels/slack/thread-context.ts +572 -0
  183. package/src/channels/slack/types.ts +27 -0
  184. package/src/internal/cli-deploy.ts +58 -20
  185. package/src/internal/cli-mcp.ts +708 -0
  186. package/src/internal/deploy-client.ts +11 -0
  187. package/src/internal/deploy-source.ts +24 -6
  188. package/src/internal/discovery.ts +1 -1
  189. package/src/internal/distribution.ts +3 -0
  190. package/src/internal/host-kv.ts +85 -0
  191. package/src/internal/hosting.ts +24 -4
  192. package/src/internal/logs-client.ts +67 -21
  193. package/src/internal/server.ts +31 -0
  194. package/src/internal/session-engine.ts +379 -61
  195. package/src/internal/storage-coordinator.ts +41 -0
  196. package/src/internal/workspace.ts +48 -11
  197. package/src/storage-backends/cursor-hosted.ts +246 -0
  198. package/src/storage-backends/file-kv.ts +221 -0
  199. package/src/storage-backends/postgres-kv.ts +253 -0
  200. package/src/storage.ts +11 -1
  201. package/src/types.ts +83 -0
  202. package/dist/docs/assets/chunks/@localSearchIndexroot.B7UcKvIn.js +0 -1
  203. package/dist/docs/assets/example-agents_index.md.CRqJlnIf.js +0 -2
  204. package/dist/docs/assets/example-agents_index.md.CRqJlnIf.lean.js +0 -1
  205. package/dist/internal/persistence-coordinator.d.ts +0 -127
  206. package/dist/internal/persistence-coordinator.d.ts.map +0 -1
  207. package/dist/persistence.d.ts +0 -184
  208. package/dist/persistence.d.ts.map +0 -1
  209. package/dist/playground/assets/index-BjnMwYoR.css +0 -1
  210. /package/dist/docs/assets/{deployment.md.BtfEsc9S.lean.js → deployment.md.DC5-ImcM.lean.js} +0 -0
@@ -0,0 +1,570 @@
1
+ /**
2
+ * `agentkit mcp` — stdio ↔ streamable-HTTP proxy for an agent's MCP endpoint.
3
+ *
4
+ * Every served agent is an MCP server at `<base>/v1/mcp` (hosted deployments
5
+ * run in single mode, so the endpoint sits directly on the engine base URL).
6
+ * MCP clients that spawn stdio servers (Cursor, Claude Code, …) can reach it
7
+ * through this command: newline-delimited JSON-RPC on stdin/stdout, one POST
8
+ * per message to the remote endpoint.
9
+ *
10
+ * Targets:
11
+ * - `--prod [--slug <slug>]` — the team's hosted deployment. Short-lived
12
+ * `engineAccess` credentials are minted through the management API with the
13
+ * signed-in Cursor account, re-minted near expiry and once on auth-shaped
14
+ * failures. No durable secret ever lands in a config file.
15
+ * - `--url <baseUrl>` — a running server (local `serve` mount or self-hosted
16
+ * base URL), with optional `--bearer-token`.
17
+ *
18
+ * `agentkit mcp install` writes the matching entry into `~/.cursor/mcp.json`
19
+ * so the agent shows up as an MCP server in Cursor:
20
+ *
21
+ * { "mcpServers": { "weather-agent": {
22
+ * "command": "agentkit",
23
+ * "args": ["mcp", "--prod", "--slug", "weather-agent"] } } }
24
+ *
25
+ * stdout is reserved for the MCP wire in serve mode; all logging goes to
26
+ * stderr.
27
+ */
28
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
29
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
30
+ return new (P || (P = Promise))(function (resolve, reject) {
31
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
32
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
33
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
34
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
35
+ });
36
+ };
37
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
38
+ import { homedir } from "node:os";
39
+ import { dirname, join } from "node:path";
40
+ import { CLI_COMMAND_NAME as CLI, LOG_PREFIX } from "./distribution.js";
41
+ import { ProdTargetError, resolveProdSlug, resolveProdTarget, } from "./resolve-prod-target.js";
42
+ /** Mount path of the MCP surface relative to an agent base URL. */
43
+ const MCP_PATH = "/v1/mcp";
44
+ /** Re-mint engineAccess when within this window of `expiresAt`. */
45
+ const ACCESS_EXPIRY_LEEWAY_MS = 5 * 60 * 1000;
46
+ /**
47
+ * Upper bound per POST. The remote endpoint bounds `ask`/`check` waits at
48
+ * ~55s, so a healthy turn always responds well inside this; past it the
49
+ * engine is unreachable or hung.
50
+ */
51
+ const REQUEST_TIMEOUT_MS = 120000;
52
+ /** Attempts per message (initial + retries after refresh/backoff). */
53
+ const FORWARD_ATTEMPTS = 3;
54
+ /**
55
+ * Statuses that cannot have reached the agent's tool logic, so retrying
56
+ * cannot double-run a turn: auth/routing rejections (401/403/404), a
57
+ * hibernated engine (417), and proxy-unreachable errors (502/503/504).
58
+ * A plain 500 is ambiguous and is surfaced to the client instead.
59
+ */
60
+ const RETRYABLE_STATUSES = new Set([401, 403, 404, 417, 502, 503, 504]);
61
+ export function cmdMcp(subcommand, options) {
62
+ return __awaiter(this, void 0, void 0, function* () {
63
+ var _a;
64
+ const err = (_a = options.err) !== null && _a !== void 0 ? _a : defaultErr;
65
+ if (subcommand === undefined) {
66
+ return cmdMcpServe(options);
67
+ }
68
+ if (subcommand === "install") {
69
+ return cmdMcpInstall(options);
70
+ }
71
+ err(`Unknown mcp subcommand "${subcommand}".\n` +
72
+ `Usage: ${CLI} mcp [install] --prod [--slug <slug>] | --url <baseUrl>\n`);
73
+ return 1;
74
+ });
75
+ }
76
+ // ============================================================================
77
+ // serve mode: stdio ↔ /v1/mcp
78
+ // ============================================================================
79
+ export function cmdMcpServe(options) {
80
+ return __awaiter(this, void 0, void 0, function* () {
81
+ var _a, _b, _c, _d, _e;
82
+ const err = (_a = options.err) !== null && _a !== void 0 ? _a : defaultErr;
83
+ const source = buildTargetSource(options, err);
84
+ if (typeof source === "string") {
85
+ err(`${source}\n`);
86
+ return 1;
87
+ }
88
+ // Resolve eagerly: a bad slug / signed-out host / stopped deployment fails
89
+ // fast in the client's MCP server logs instead of on the first tool call.
90
+ let initial;
91
+ try {
92
+ initial = yield source.get();
93
+ }
94
+ catch (error) {
95
+ err(`${describeError(error)}\n`);
96
+ return 1;
97
+ }
98
+ err(`${LOG_PREFIX} mcp: proxying stdio <-> ${initial.mcpUrl}\n`);
99
+ const stdin = (_b = options.stdin) !== null && _b !== void 0 ? _b : process.stdin;
100
+ const stdout = (_c = options.stdout) !== null && _c !== void 0 ? _c : process.stdout;
101
+ const fetchImpl = (_d = options.fetchImpl) !== null && _d !== void 0 ? _d : fetch;
102
+ const sleep = (_e = options.sleep) !== null && _e !== void 0 ? _e : sleepMs;
103
+ const pending = new Set();
104
+ const handleLine = (line) => __awaiter(this, void 0, void 0, function* () {
105
+ const outcome = yield forwardMessage({ source, fetchImpl, sleep, line });
106
+ if (outcome.kind === "empty") {
107
+ return;
108
+ }
109
+ if (outcome.kind === "json") {
110
+ writeWireBody(stdout, outcome.body, line, err);
111
+ return;
112
+ }
113
+ emitFailure(stdout, line, outcome.message, err);
114
+ });
115
+ yield new Promise((done) => {
116
+ let buffer = "";
117
+ const enqueueLine = (raw) => {
118
+ const line = raw.trim();
119
+ if (line === "") {
120
+ return;
121
+ }
122
+ const task = handleLine(line)
123
+ .catch((error) => {
124
+ err(`${LOG_PREFIX} mcp: ${describeError(error)}\n`);
125
+ })
126
+ .finally(() => {
127
+ pending.delete(task);
128
+ });
129
+ pending.add(task);
130
+ };
131
+ const onChunk = (chunk) => {
132
+ buffer += typeof chunk === "string" ? chunk : chunk.toString("utf8");
133
+ let newline = buffer.indexOf("\n");
134
+ while (newline !== -1) {
135
+ const line = buffer.slice(0, newline);
136
+ buffer = buffer.slice(newline + 1);
137
+ newline = buffer.indexOf("\n");
138
+ enqueueLine(line);
139
+ }
140
+ };
141
+ let finished = false;
142
+ const finish = () => {
143
+ if (finished) {
144
+ return;
145
+ }
146
+ finished = true;
147
+ enqueueLine(buffer);
148
+ buffer = "";
149
+ done();
150
+ };
151
+ stdin.on("data", onChunk);
152
+ stdin.once("end", finish);
153
+ stdin.once("close", finish);
154
+ stdin.once("error", finish);
155
+ });
156
+ // Drain in-flight turns so piped one-shot usage still sees its replies.
157
+ yield Promise.allSettled([...pending]);
158
+ return 0;
159
+ });
160
+ }
161
+ /** Returns a usage error string when the target flags are invalid. */
162
+ function buildTargetSource(options, err) {
163
+ if (options.prod === true && options.url !== undefined) {
164
+ return "--prod and --url are mutually exclusive";
165
+ }
166
+ if (options.url !== undefined) {
167
+ const base = normalizeBaseUrl(options.url);
168
+ if (typeof base !== "string") {
169
+ return base.error;
170
+ }
171
+ return createStaticTargetSource(base, options.bearerToken);
172
+ }
173
+ if (options.prod === true) {
174
+ return createProdTargetSource(options, err);
175
+ }
176
+ return `${CLI} mcp requires --prod (hosted deployment) or --url <baseUrl>`;
177
+ }
178
+ function createStaticTargetSource(baseUrl, bearerToken) {
179
+ const headers = {};
180
+ if (bearerToken !== undefined && bearerToken.trim() !== "") {
181
+ headers.authorization = `Bearer ${bearerToken.trim()}`;
182
+ }
183
+ const target = { mcpUrl: joinMcpPath(baseUrl), headers };
184
+ return {
185
+ canRefresh: false,
186
+ get: () => Promise.resolve(target),
187
+ invalidate: () => { },
188
+ };
189
+ }
190
+ function createProdTargetSource(options, err) {
191
+ var _a, _b;
192
+ const resolveImpl = (_a = options.resolveProdTargetImpl) !== null && _a !== void 0 ? _a : resolveProdTarget;
193
+ const now = (_b = options.now) !== null && _b !== void 0 ? _b : Date.now;
194
+ let cached;
195
+ let inFlight;
196
+ const resolveFresh = () => __awaiter(this, void 0, void 0, function* () {
197
+ const prod = yield resolveImpl({
198
+ dir: options.dir,
199
+ cwd: options.cwd,
200
+ slug: options.slug,
201
+ team: options.team,
202
+ apiKey: options.apiKey,
203
+ fetchImpl: options.fetchImpl,
204
+ err,
205
+ });
206
+ const target = {
207
+ mcpUrl: joinMcpPath(prod.agentUrl),
208
+ headers: prod.headers,
209
+ };
210
+ const expiresAtMs = Date.parse(prod.expiresAt);
211
+ if (Number.isFinite(expiresAtMs)) {
212
+ target.expiresAtMs = expiresAtMs;
213
+ }
214
+ return target;
215
+ });
216
+ return {
217
+ canRefresh: true,
218
+ invalidate() {
219
+ cached = undefined;
220
+ },
221
+ get() {
222
+ const current = cached;
223
+ const fresh = current !== undefined &&
224
+ (current.expiresAtMs === undefined ||
225
+ now() < current.expiresAtMs - ACCESS_EXPIRY_LEEWAY_MS);
226
+ if (fresh) {
227
+ return Promise.resolve(current);
228
+ }
229
+ if (inFlight === undefined) {
230
+ inFlight = resolveFresh()
231
+ .then((target) => {
232
+ cached = target;
233
+ return target;
234
+ })
235
+ .finally(() => {
236
+ inFlight = undefined;
237
+ });
238
+ }
239
+ return inFlight;
240
+ },
241
+ };
242
+ }
243
+ function forwardMessage(args) {
244
+ return __awaiter(this, void 0, void 0, function* () {
245
+ const { source, fetchImpl, sleep, line } = args;
246
+ let lastFailure = "request failed";
247
+ for (let attempt = 0; attempt < FORWARD_ATTEMPTS; attempt++) {
248
+ if (attempt > 0) {
249
+ yield sleep(500 * attempt);
250
+ }
251
+ let target;
252
+ try {
253
+ target = yield source.get();
254
+ }
255
+ catch (error) {
256
+ lastFailure = describeError(error);
257
+ continue;
258
+ }
259
+ let response;
260
+ try {
261
+ response = yield fetchImpl(target.mcpUrl, {
262
+ method: "POST",
263
+ headers: Object.assign(Object.assign({}, target.headers), { "content-type": "application/json",
264
+ // The streamable-HTTP server transport 406s unless the client
265
+ // accepts both, even in JSON response mode.
266
+ accept: "application/json, text/event-stream" }),
267
+ body: line,
268
+ signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),
269
+ });
270
+ }
271
+ catch (error) {
272
+ source.invalidate();
273
+ if (isTimeoutError(error)) {
274
+ // The turn may have started; retrying could double-send it.
275
+ return {
276
+ kind: "failed",
277
+ message: `no response within ${REQUEST_TIMEOUT_MS / 1000}s (the agent may still be processing; check its sessions)`,
278
+ };
279
+ }
280
+ lastFailure = `request failed: ${describeError(error)}`;
281
+ continue;
282
+ }
283
+ if (response.status === 202) {
284
+ // Notification/response-only message: nothing to relay.
285
+ yield response.text().catch(() => "");
286
+ return { kind: "empty" };
287
+ }
288
+ const text = yield response.text().catch(() => "");
289
+ if (response.ok) {
290
+ if (text.trim() === "") {
291
+ return { kind: "empty" };
292
+ }
293
+ return { kind: "json", body: text };
294
+ }
295
+ lastFailure = `upstream HTTP ${response.status}${text.trim() === "" ? "" : `: ${truncateForLog(text)}`}`;
296
+ if (RETRYABLE_STATUSES.has(response.status)) {
297
+ // Auth/expiry/hibernation shaped: re-mint credentials and retry.
298
+ source.invalidate();
299
+ continue;
300
+ }
301
+ return { kind: "failed", message: lastFailure };
302
+ }
303
+ return { kind: "failed", message: lastFailure };
304
+ });
305
+ }
306
+ /**
307
+ * Relay an upstream JSON body onto the stdio wire. The body is re-serialized
308
+ * so output is always one message per line, and batch responses are split
309
+ * into individual lines (the stdio transport has no batch framing).
310
+ */
311
+ function writeWireBody(stdout, body, inboundLine, err) {
312
+ let parsed;
313
+ try {
314
+ parsed = JSON.parse(body);
315
+ }
316
+ catch (_a) {
317
+ emitFailure(stdout, inboundLine, `upstream returned a non-JSON payload: ${truncateForLog(body)}`, err);
318
+ return;
319
+ }
320
+ const messages = Array.isArray(parsed) ? parsed : [parsed];
321
+ for (const message of messages) {
322
+ stdout.write(`${JSON.stringify(message)}\n`);
323
+ }
324
+ }
325
+ /**
326
+ * Answer every request id in the inbound message with a JSON-RPC error so
327
+ * the client fails the call instead of hanging on a lost response.
328
+ * Notification-only failures are stderr-logged.
329
+ */
330
+ function emitFailure(stdout, inboundLine, message, err) {
331
+ err(`${LOG_PREFIX} mcp: ${message}\n`);
332
+ for (const id of requestIdsOf(inboundLine)) {
333
+ stdout.write(`${JSON.stringify({
334
+ jsonrpc: "2.0",
335
+ id,
336
+ error: { code: -32000, message },
337
+ })}\n`);
338
+ }
339
+ }
340
+ /** Ids of JSON-RPC *requests* (has `method` + `id`) in a raw wire line. */
341
+ function requestIdsOf(line) {
342
+ let parsed;
343
+ try {
344
+ parsed = JSON.parse(line);
345
+ }
346
+ catch (_a) {
347
+ return [];
348
+ }
349
+ const messages = Array.isArray(parsed) ? parsed : [parsed];
350
+ const ids = [];
351
+ for (const message of messages) {
352
+ if (message !== null &&
353
+ typeof message === "object" &&
354
+ "method" in message &&
355
+ "id" in message) {
356
+ const id = message.id;
357
+ if (typeof id === "string" || typeof id === "number") {
358
+ ids.push(id);
359
+ }
360
+ }
361
+ }
362
+ return ids;
363
+ }
364
+ export function cmdMcpInstall(options) {
365
+ return __awaiter(this, void 0, void 0, function* () {
366
+ var _a, _b, _c, _d;
367
+ const err = (_a = options.err) !== null && _a !== void 0 ? _a : defaultErr;
368
+ const stdout = (_b = options.stdout) !== null && _b !== void 0 ? _b : process.stdout;
369
+ if (options.prod === true && options.url !== undefined) {
370
+ err("--prod and --url are mutually exclusive\n");
371
+ return 1;
372
+ }
373
+ let name;
374
+ let entry;
375
+ if (options.prod === true) {
376
+ let slug;
377
+ try {
378
+ slug = resolveProdSlug({
379
+ dir: options.dir,
380
+ cwd: options.cwd,
381
+ slug: options.slug,
382
+ });
383
+ }
384
+ catch (error) {
385
+ err(`${describeError(error)}\n`);
386
+ return 1;
387
+ }
388
+ // Verify the deployment resolves before writing config that cannot work.
389
+ const resolveImpl = (_c = options.resolveProdTargetImpl) !== null && _c !== void 0 ? _c : resolveProdTarget;
390
+ try {
391
+ yield resolveImpl({
392
+ dir: options.dir,
393
+ cwd: options.cwd,
394
+ slug,
395
+ team: options.team,
396
+ apiKey: options.apiKey,
397
+ fetchImpl: options.fetchImpl,
398
+ err,
399
+ });
400
+ }
401
+ catch (error) {
402
+ err(`${describeError(error)}\n`);
403
+ if (error instanceof ProdTargetError && error.notFound) {
404
+ err(`Deploy it first: ${CLI} deploy --slug ${slug}\n`);
405
+ }
406
+ return 1;
407
+ }
408
+ name = resolveServerName(options.name, slug);
409
+ const args = ["mcp", "--prod", "--slug", slug];
410
+ if (options.team !== undefined && options.team !== "") {
411
+ args.push("--team", options.team);
412
+ }
413
+ entry = { command: CLI, args };
414
+ }
415
+ else if (options.url !== undefined) {
416
+ const base = normalizeBaseUrl(options.url);
417
+ if (typeof base !== "string") {
418
+ err(`${base.error}\n`);
419
+ return 1;
420
+ }
421
+ const derived = (_d = options.name) !== null && _d !== void 0 ? _d : deriveNameFromUrl(base);
422
+ if (derived === undefined) {
423
+ err(`Could not derive a server name from ${base}; pass --name <serverName>.\n`);
424
+ return 1;
425
+ }
426
+ name = resolveServerName(derived, derived);
427
+ const args = ["mcp", "--url", base];
428
+ if (options.bearerToken !== undefined && options.bearerToken !== "") {
429
+ args.push("--bearer-token", options.bearerToken);
430
+ err("note: --bearer-token is written to mcp.json in plain text; prefer --prod for hosted agents\n");
431
+ }
432
+ entry = { command: CLI, args };
433
+ }
434
+ else {
435
+ err(`${CLI} mcp install requires --prod (hosted deployment) or --url <baseUrl>\n`);
436
+ return 1;
437
+ }
438
+ if (options.print === true) {
439
+ stdout.write(`${JSON.stringify({ mcpServers: { [name]: entry } }, null, 2)}\n`);
440
+ return 0;
441
+ }
442
+ const path = cursorMcpJsonPath();
443
+ try {
444
+ yield upsertMcpJsonEntry(path, name, entry);
445
+ }
446
+ catch (error) {
447
+ err(`${describeError(error)}\n`);
448
+ return 1;
449
+ }
450
+ if (options.json === true) {
451
+ stdout.write(`${JSON.stringify({ ok: true, path, name, entry })}\n`);
452
+ return 0;
453
+ }
454
+ stdout.write(`Installed MCP server "${name}" in ${path}\n` +
455
+ ` ${entry.command} ${entry.args.join(" ")}\n` +
456
+ "Cursor watches this file; the server appears without a restart.\n");
457
+ return 0;
458
+ });
459
+ }
460
+ /** `~/.cursor/mcp.json` — the user-level Cursor MCP config. */
461
+ export function cursorMcpJsonPath(home) {
462
+ var _a;
463
+ if (home === void 0) { home = (_a = process.env.HOME) !== null && _a !== void 0 ? _a : homedir(); }
464
+ const resolved = home.trim() === "" ? homedir() : home;
465
+ return join(resolved, ".cursor", "mcp.json");
466
+ }
467
+ function upsertMcpJsonEntry(path, name, entry) {
468
+ return __awaiter(this, void 0, void 0, function* () {
469
+ let root = {};
470
+ let raw;
471
+ try {
472
+ raw = yield readFile(path, "utf8");
473
+ }
474
+ catch (_a) {
475
+ raw = undefined;
476
+ }
477
+ if (raw !== undefined && raw.trim() !== "") {
478
+ let parsed;
479
+ try {
480
+ parsed = JSON.parse(raw);
481
+ }
482
+ catch (error) {
483
+ throw new Error(`${path} is not valid JSON (${describeError(error)}); fix it and re-run.`);
484
+ }
485
+ if (parsed === null ||
486
+ typeof parsed !== "object" ||
487
+ Array.isArray(parsed)) {
488
+ throw new Error(`${path} must contain a JSON object; fix it and re-run.`);
489
+ }
490
+ root = parsed;
491
+ }
492
+ const existing = root.mcpServers;
493
+ const servers = existing !== null &&
494
+ typeof existing === "object" &&
495
+ !Array.isArray(existing)
496
+ ? existing
497
+ : {};
498
+ servers[name] = entry;
499
+ root.mcpServers = servers;
500
+ yield mkdir(dirname(path), { recursive: true });
501
+ yield writeFile(path, `${JSON.stringify(root, null, 2)}\n`, "utf8");
502
+ });
503
+ }
504
+ function resolveServerName(name, fallback) {
505
+ const trimmed = name === null || name === void 0 ? void 0 : name.trim();
506
+ if (trimmed !== undefined && trimmed !== "") {
507
+ return trimmed;
508
+ }
509
+ return fallback;
510
+ }
511
+ /** Last path segment of the agent base URL (the mount slug), if any. */
512
+ function deriveNameFromUrl(baseUrl) {
513
+ const segments = new URL(baseUrl).pathname.split("/").filter((s) => s !== "");
514
+ const last = segments.at(-1);
515
+ if (last === undefined || last === "") {
516
+ return undefined;
517
+ }
518
+ return last;
519
+ }
520
+ // ============================================================================
521
+ // Shared helpers
522
+ // ============================================================================
523
+ /** Agent base URL → MCP endpoint URL (idempotent when already pointed at it). */
524
+ export function joinMcpPath(baseUrl) {
525
+ const parsed = new URL(baseUrl);
526
+ let pathname = parsed.pathname.replace(/\/+$/, "");
527
+ if (!pathname.endsWith(MCP_PATH)) {
528
+ pathname = `${pathname}${MCP_PATH}`;
529
+ }
530
+ parsed.pathname = pathname;
531
+ return parsed.toString();
532
+ }
533
+ function normalizeBaseUrl(raw) {
534
+ let parsed;
535
+ try {
536
+ parsed = new URL(raw);
537
+ }
538
+ catch (_a) {
539
+ return { error: `invalid --url: ${raw}` };
540
+ }
541
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
542
+ return { error: `unsupported --url protocol: ${parsed.protocol}` };
543
+ }
544
+ return raw.replace(/\/+$/, "");
545
+ }
546
+ function isTimeoutError(error) {
547
+ return (error instanceof Error &&
548
+ (error.name === "TimeoutError" || error.name === "AbortError"));
549
+ }
550
+ function truncateForLog(text) {
551
+ const flat = text.replace(/\s+/g, " ").trim();
552
+ return flat.length > 300 ? `${flat.slice(0, 300)}…` : flat;
553
+ }
554
+ function describeError(error) {
555
+ if (error instanceof Error) {
556
+ const cause = error.cause instanceof Error && error.cause.message !== ""
557
+ ? ` (${error.cause.message})`
558
+ : "";
559
+ return `${error.message}${cause}`;
560
+ }
561
+ return String(error);
562
+ }
563
+ function defaultErr(text) {
564
+ process.stderr.write(text);
565
+ }
566
+ function sleepMs(ms) {
567
+ return new Promise((resolve) => {
568
+ setTimeout(resolve, ms);
569
+ });
570
+ }
@@ -11,7 +11,7 @@
11
11
  */
12
12
  export type DeploymentStatus = "pending" | "deploying" | "running" | "degraded" | "failed" | "stopping" | "stopped";
13
13
  /** Customer-safe deploy progress (no hosting phase / infra names). */
14
- export type DeploymentProgress = "queued" | "preparing" | "building" | "finalizing" | "running" | "failed" | "stopping" | "stopped" | "degraded";
14
+ export type DeploymentProgress = "queued" | "preparing" | "creating" | "building" | "starting" | "finalizing" | "running" | "failed" | "stopping" | "stopped" | "degraded";
15
15
  export declare const TERMINAL_DEPLOY_STATUSES: ReadonlySet<DeploymentStatus>;
16
16
  /**
17
17
  * What gets deployed. Today the control plane builds the engine itself from
@@ -73,6 +73,12 @@ export interface Deployment {
73
73
  * backends; older responses omit it.
74
74
  */
75
75
  progress?: DeploymentProgress;
76
+ /**
77
+ * Live step while the deploy converges (e.g. "Checking out source…").
78
+ * Null when running / stopped or when only a failure is on the row.
79
+ * Present on newer backends; older responses omit it.
80
+ */
81
+ statusMessage?: string | null;
76
82
  generation: number;
77
83
  observedGeneration?: number | null;
78
84
  engineGeneration?: number | null;
@@ -1 +1 @@
1
- {"version":3,"file":"deploy-client.d.ts","sourceRoot":"","sources":["../../src/internal/deploy-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy-client.d.ts","sourceRoot":"","sources":["../../src/internal/deploy-client.ts"],"names":[],"mappings":"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"}
@@ -92,7 +92,9 @@ const deploymentSchema = z.object({
92
92
  .enum([
93
93
  "queued",
94
94
  "preparing",
95
+ "creating",
95
96
  "building",
97
+ "starting",
96
98
  "finalizing",
97
99
  "running",
98
100
  "failed",
@@ -101,6 +103,7 @@ const deploymentSchema = z.object({
101
103
  "degraded",
102
104
  ])
103
105
  .optional(),
106
+ statusMessage: z.string().nullable().optional(),
104
107
  generation: z.number(),
105
108
  observedGeneration: z.number().nullable().optional(),
106
109
  engineGeneration: z.number().nullable().optional(),
@@ -17,6 +17,9 @@ export interface InferredDeploySource {
17
17
  * Normalize a git remote URL to the https form the control plane accepts
18
18
  * (`https://host/owner/repo`, no `.git` suffix). Returns undefined for
19
19
  * unrecognized shapes.
20
+ *
21
+ * Accepts HTTPS, `git@host:path`, GitHub org-scoped SSH
22
+ * (`org-123@github.com:owner/repo.git`), and `ssh://user@host[:port]/path`.
20
23
  */
21
24
  export declare function httpsGitRepoUrlFromRemote(remote: string): string | undefined;
22
25
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"deploy-source.d.ts","sourceRoot":"","sources":["../../src/internal/deploy-source.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,4EAA4E;AAC5E,MAAM,MAAM,SAAS,GAAG,CACtB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,KACR,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAEjC,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAYD;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA6B5E;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,GACd,MAAM,GAAG,SAAS,CAYpB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,SAAS,CAAA;CAAE,GAC5B,OAAO,CAAC,oBAAoB,CAAC,CA8B/B"}
1
+ {"version":3,"file":"deploy-source.d.ts","sourceRoot":"","sources":["../../src/internal/deploy-source.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,4EAA4E;AAC5E,MAAM,MAAM,SAAS,GAAG,CACtB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,KACR,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAEjC,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAYD;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA4C5E;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,GACd,MAAM,GAAG,SAAS,CAYpB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,SAAS,CAAA;CAAE,GAC5B,OAAO,CAAC,oBAAoB,CAAC,CA8B/B"}