@cursor/july 0.1.2 → 0.1.4
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/AGENTS.md +16 -5
- package/README.md +8 -9
- package/dist/bin/agent-serve.d.ts +3 -1
- package/dist/bin/agent-serve.d.ts.map +1 -1
- package/dist/bin/agent-serve.js +416 -155
- package/dist/channels/slack/log.d.ts +1 -1
- package/dist/channels/slack/log.d.ts.map +1 -1
- package/dist/channels/slack/log.js +4 -5
- package/dist/channels/slack/setup.js +1 -1
- package/dist/channels/slack/socket-mode.d.ts.map +1 -1
- package/dist/channels/slack/socket-mode.js +10 -9
- package/dist/docs/404.html +2 -2
- package/dist/docs/ab.html +3 -3
- package/dist/docs/assets/{app.Oje4vhlk.js → app.DF-Yx4OP.js} +1 -1
- package/dist/docs/assets/chunks/@localSearchIndexroot.0XrheBv2.js +1 -0
- package/dist/docs/assets/chunks/{VPLocalSearchBox.H5XZ2zCB.js → VPLocalSearchBox.DSeJSudL.js} +1 -1
- package/dist/docs/assets/chunks/{theme.CTR_TuaE.js → theme.DZVLTXOC.js} +2 -2
- package/dist/docs/assets/{index.md.m81y7TY7.js → index.md.Cylk70gg.js} +1 -1
- package/dist/docs/assets/{quickstart.md.CfU8_uTC.js → quickstart.md.BU6Iwi_9.js} +18 -6
- package/dist/docs/assets/{reference_cli.md.DA730zCu.js → reference_cli.md.Bv6pOxcF.js} +11 -6
- package/dist/docs/assets/{reference_cli.md.DA730zCu.lean.js → reference_cli.md.Bv6pOxcF.lean.js} +1 -1
- package/dist/docs/building-with-agents.html +3 -3
- package/dist/docs/concepts.html +3 -3
- package/dist/docs/deployment.html +3 -3
- package/dist/docs/evals.html +3 -3
- package/dist/docs/guides/agent-to-agent.html +3 -3
- package/dist/docs/guides/cloud-runtime.html +3 -3
- package/dist/docs/guides/github.html +3 -3
- package/dist/docs/guides/human-in-the-loop.html +3 -3
- package/dist/docs/guides/slack.html +3 -3
- package/dist/docs/guides/webhooks.html +3 -3
- package/dist/docs/hashmap.json +1 -1
- package/dist/docs/hillclimbing.html +3 -3
- package/dist/docs/index.html +5 -5
- package/dist/docs/quickstart.html +22 -10
- package/dist/docs/reference/agent-config.html +3 -3
- package/dist/docs/reference/channels.html +3 -3
- package/dist/docs/reference/cli.html +14 -9
- package/dist/docs/reference/connections.html +3 -3
- package/dist/docs/reference/hooks.html +3 -3
- package/dist/docs/reference/http-api.html +3 -3
- package/dist/docs/reference/instructions.html +3 -3
- package/dist/docs/reference/playground.html +3 -3
- package/dist/docs/reference/project-layout.html +3 -3
- package/dist/docs/reference/schedules.html +3 -3
- package/dist/docs/reference/sessions.html +3 -3
- package/dist/docs/reference/skills.html +3 -3
- package/dist/docs/reference/subagents.html +3 -3
- package/dist/docs/reference/tools.html +3 -3
- package/dist/docs/scaffolding-agents.html +3 -3
- package/dist/docs/storage.html +3 -3
- package/dist/docs/troubleshooting.html +3 -3
- package/dist/internal/ab-collector.js +3 -3
- package/dist/internal/ab-fold.js +1 -1
- package/dist/internal/chat-client.d.ts +29 -3
- package/dist/internal/chat-client.d.ts.map +1 -1
- package/dist/internal/chat-client.js +180 -27
- package/dist/internal/cli-ax.d.ts +83 -2
- package/dist/internal/cli-ax.d.ts.map +1 -1
- package/dist/internal/cli-ax.js +626 -52
- package/dist/internal/cli-cursor.d.ts.map +1 -1
- package/dist/internal/cli-cursor.js +8 -36
- package/dist/internal/cli-deploy.d.ts +59 -3
- package/dist/internal/cli-deploy.d.ts.map +1 -1
- package/dist/internal/cli-deploy.js +316 -38
- package/dist/internal/cli-github.js +13 -13
- package/dist/internal/cursor/account-mcp.js +3 -3
- package/dist/internal/cursor/backend-client.js +1 -1
- package/dist/internal/cursor/credentials.d.ts +14 -3
- package/dist/internal/cursor/credentials.d.ts.map +1 -1
- package/dist/internal/cursor/credentials.js +21 -6
- package/dist/internal/cursor/github-credentials.js +3 -3
- package/dist/internal/cursor-event-relay.js +1 -1
- package/dist/internal/cursor-relay-core.d.ts +1 -1
- package/dist/internal/cursor-relay-core.d.ts.map +1 -1
- package/dist/internal/cursor-relay-core.js +2 -1
- package/dist/internal/cursor-slack-relay.js +1 -1
- package/dist/internal/deploy-client.d.ts +9 -1
- package/dist/internal/deploy-client.d.ts.map +1 -1
- package/dist/internal/deploy-client.js +23 -3
- package/dist/internal/deploy-source.d.ts +35 -0
- package/dist/internal/deploy-source.d.ts.map +1 -0
- package/dist/internal/deploy-source.js +118 -0
- package/dist/internal/discovery.d.ts +11 -0
- package/dist/internal/discovery.d.ts.map +1 -1
- package/dist/internal/discovery.js +43 -14
- package/dist/internal/distribution.d.ts +7 -0
- package/dist/internal/distribution.d.ts.map +1 -1
- package/dist/internal/distribution.js +7 -0
- package/dist/internal/docs-site.js +3 -3
- package/dist/internal/eval-run-store.d.ts.map +1 -1
- package/dist/internal/eval-run-store.js +10 -9
- package/dist/internal/eval-runner.d.ts +2 -0
- package/dist/internal/eval-runner.d.ts.map +1 -1
- package/dist/internal/eval-runner.js +2 -0
- package/dist/internal/event-mapper.d.ts +54 -1
- package/dist/internal/event-mapper.d.ts.map +1 -1
- package/dist/internal/event-mapper.js +151 -41
- package/dist/internal/github-fanout.js +2 -2
- package/dist/internal/host-platforms.js +5 -5
- package/dist/internal/init-project.d.ts +88 -1
- package/dist/internal/init-project.d.ts.map +1 -1
- package/dist/internal/init-project.js +221 -31
- package/dist/internal/install-cursor-skills.d.ts +64 -0
- package/dist/internal/install-cursor-skills.d.ts.map +1 -0
- package/dist/internal/install-cursor-skills.js +274 -0
- package/dist/internal/logs-client.d.ts +60 -0
- package/dist/internal/logs-client.d.ts.map +1 -0
- package/dist/internal/logs-client.js +311 -0
- package/dist/internal/mcp-endpoint.d.ts.map +1 -1
- package/dist/internal/mcp-endpoint.js +1 -1
- package/dist/internal/open-browser.d.ts +5 -0
- package/dist/internal/open-browser.d.ts.map +1 -0
- package/dist/internal/open-browser.js +34 -0
- package/dist/internal/playground/toolchain.d.ts.map +1 -1
- package/dist/internal/playground/toolchain.js +19 -14
- package/dist/internal/playground-proxy.d.ts +69 -0
- package/dist/internal/playground-proxy.d.ts.map +1 -0
- package/dist/internal/playground-proxy.js +468 -0
- package/dist/internal/prompt-context.d.ts +35 -0
- package/dist/internal/prompt-context.d.ts.map +1 -0
- package/dist/internal/prompt-context.js +71 -0
- package/dist/internal/reminder-runner.d.ts.map +1 -1
- package/dist/internal/reminder-runner.js +11 -11
- package/dist/internal/request-headers.d.ts +11 -0
- package/dist/internal/request-headers.d.ts.map +1 -0
- package/dist/internal/request-headers.js +14 -0
- package/dist/internal/resolve-prod-target.d.ts +44 -0
- package/dist/internal/resolve-prod-target.d.ts.map +1 -0
- package/dist/internal/resolve-prod-target.js +134 -0
- package/dist/internal/resolved-connections.js +5 -5
- package/dist/internal/run-client.d.ts +2 -2
- package/dist/internal/run-client.d.ts.map +1 -1
- package/dist/internal/run-client.js +38 -23
- package/dist/internal/schedule-runner.js +1 -1
- package/dist/internal/server.d.ts.map +1 -1
- package/dist/internal/server.js +23 -17
- package/dist/internal/session-engine.d.ts +1 -1
- package/dist/internal/session-engine.d.ts.map +1 -1
- package/dist/internal/session-engine.js +34 -19
- package/dist/internal/sessions-client.d.ts +34 -0
- package/dist/internal/sessions-client.d.ts.map +1 -0
- package/dist/internal/sessions-client.js +193 -0
- package/dist/internal/storage-coordinator.js +6 -6
- package/dist/internal/stream-progress.d.ts.map +1 -1
- package/dist/internal/stream-progress.js +31 -3
- package/dist/internal/terminal-style.d.ts +22 -0
- package/dist/internal/terminal-style.d.ts.map +1 -0
- package/dist/internal/terminal-style.js +49 -0
- package/dist/internal/trajectory.d.ts +10 -5
- package/dist/internal/trajectory.d.ts.map +1 -1
- package/dist/internal/trajectory.js +82 -10
- package/dist/internal/update-check.d.ts +93 -0
- package/dist/internal/update-check.d.ts.map +1 -0
- package/dist/internal/update-check.js +431 -0
- package/dist/internal/workspace.d.ts +11 -0
- package/dist/internal/workspace.d.ts.map +1 -1
- package/dist/internal/workspace.js +38 -4
- package/dist/playground/assets/index-Ct_Usdm8.css +1 -0
- package/dist/playground/assets/index-Dsyb-Vaj.js +319 -0
- package/dist/playground/index.html +2 -2
- package/dist/types.d.ts +29 -2
- package/dist/types.d.ts.map +1 -1
- package/docs/README.md +0 -1
- package/docs/quickstart.md +22 -7
- package/docs/reference/cli.md +51 -3
- package/package.json +4 -1
- package/skills/ab/SKILL.md +8 -8
- package/skills/create-agent/SKILL.md +28 -22
- package/skills/debug/SKILL.md +11 -11
- package/skills/evals/SKILL.md +16 -16
- package/skills/framework-map/SKILL.md +6 -6
- package/skills/github/SKILL.md +13 -13
- package/skills/hillclimb/SKILL.md +10 -10
- package/skills/setup-slack/SKILL.md +14 -14
- package/src/bin/agent-serve.ts +451 -191
- package/src/channels/slack/log.ts +5 -5
- package/src/channels/slack/setup.ts +1 -1
- package/src/channels/slack/socket-mode.ts +11 -9
- package/src/internal/ab-collector.ts +3 -3
- package/src/internal/ab-fold.ts +1 -1
- package/src/internal/chat-client.ts +252 -37
- package/src/internal/cli-ax.ts +761 -72
- package/src/internal/cli-cursor.ts +14 -42
- package/src/internal/cli-deploy.ts +428 -49
- package/src/internal/cli-github.ts +13 -15
- package/src/internal/cursor/account-mcp.ts +3 -3
- package/src/internal/cursor/backend-client.ts +1 -1
- package/src/internal/cursor/credentials.ts +26 -7
- package/src/internal/cursor/github-credentials.ts +3 -3
- package/src/internal/cursor-event-relay.ts +1 -1
- package/src/internal/cursor-relay-core.ts +4 -2
- package/src/internal/cursor-slack-relay.ts +1 -1
- package/src/internal/deploy-client.ts +45 -4
- package/src/internal/deploy-source.ts +133 -0
- package/src/internal/discovery.ts +53 -16
- package/src/internal/distribution.ts +8 -0
- package/src/internal/docs-site.ts +3 -3
- package/src/internal/eval-run-store.ts +10 -11
- package/src/internal/eval-runner.ts +5 -0
- package/src/internal/event-mapper.ts +222 -42
- package/src/internal/github-fanout.ts +2 -2
- package/src/internal/host-platforms.ts +5 -5
- package/src/internal/init-project.ts +333 -51
- package/src/internal/install-cursor-skills.ts +327 -0
- package/src/internal/logs-client.ts +442 -0
- package/src/internal/mcp-endpoint.ts +1 -3
- package/src/internal/open-browser.ts +41 -0
- package/src/internal/playground/toolchain.ts +18 -16
- package/src/internal/playground-proxy.ts +576 -0
- package/src/internal/prompt-context.ts +95 -0
- package/src/internal/reminder-runner.ts +11 -17
- package/src/internal/request-headers.ts +23 -0
- package/src/internal/resolve-prod-target.ts +182 -0
- package/src/internal/resolved-connections.ts +5 -5
- package/src/internal/run-client.ts +39 -36
- package/src/internal/schedule-runner.ts +1 -1
- package/src/internal/server.ts +25 -16
- package/src/internal/session-engine.ts +35 -18
- package/src/internal/sessions-client.ts +216 -0
- package/src/internal/storage-coordinator.ts +6 -6
- package/src/internal/stream-progress.ts +36 -2
- package/src/internal/terminal-style.ts +74 -0
- package/src/internal/trajectory.ts +91 -13
- package/src/internal/update-check.ts +552 -0
- package/src/internal/workspace.ts +42 -4
- package/src/types.ts +45 -7
- package/dist/docs/assets/chunks/@localSearchIndexroot.zwQ9RCQ7.js +0 -1
- package/dist/playground/assets/index-B1Qc9h2u.css +0 -1
- package/dist/playground/assets/index-CpDYCj8W.js +0 -79
- /package/dist/docs/assets/{index.md.m81y7TY7.lean.js → index.md.Cylk70gg.lean.js} +0 -0
- /package/dist/docs/assets/{quickstart.md.CfU8_uTC.lean.js → quickstart.md.BU6Iwi_9.lean.js} +0 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Framework-authored prompt context. Two pieces:
|
|
3
|
+
*
|
|
4
|
+
* 1. Identity section — static, appended to the agent's instructions (local
|
|
5
|
+
* AGENTS.md and cloud first-turn preamble) so the model knows its own
|
|
6
|
+
* name and how messages and sessions reach it.
|
|
7
|
+
* 2. Session context block — dynamic, prepended to the first turn's user
|
|
8
|
+
* prompt only, telling the model which session/channel/environment it is
|
|
9
|
+
* in plus a channel-appropriate presence line.
|
|
10
|
+
*/
|
|
11
|
+
import type { ResolvedAgent } from "../types.js";
|
|
12
|
+
export declare const SCHEDULE_CHANNEL_PREFIX = "schedule:";
|
|
13
|
+
export type PromptEnvironment = "hosted deployment" | "local dev server";
|
|
14
|
+
export declare function buildIdentitySection(agent: Pick<ResolvedAgent, "name" | "description">): string;
|
|
15
|
+
export interface SessionContextInput {
|
|
16
|
+
sessionId: string;
|
|
17
|
+
channelId: string;
|
|
18
|
+
/**
|
|
19
|
+
* The channel pack's `meta.kind` (e.g. `"slack"`, `"github"`). Channel ids
|
|
20
|
+
* are file stems, so kind — not id — identifies what the channel is.
|
|
21
|
+
*/
|
|
22
|
+
channelKind?: string;
|
|
23
|
+
environment: PromptEnvironment;
|
|
24
|
+
/** Injectable clock for tests; defaults to now. */
|
|
25
|
+
now?: Date;
|
|
26
|
+
}
|
|
27
|
+
export declare function buildSessionContextBlock(input: SessionContextInput): string;
|
|
28
|
+
/**
|
|
29
|
+
* One line telling the model whether anyone is watching this session and
|
|
30
|
+
* where its output lands. Resolved from the channel pack's declared kind
|
|
31
|
+
* when present, falling back to the built-in channel ids. Unknown channels
|
|
32
|
+
* get no line rather than a guess.
|
|
33
|
+
*/
|
|
34
|
+
export declare function channelPresenceLine(channel: Pick<SessionContextInput, "channelId" | "channelKind">): string | undefined;
|
|
35
|
+
//# sourceMappingURL=prompt-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-context.d.ts","sourceRoot":"","sources":["../../src/internal/prompt-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,eAAO,MAAM,uBAAuB,cAAc,CAAC;AAEnD,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAEzE,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,CAAC,GACjD,MAAM,CAWR;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,mDAAmD;IACnD,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,CAc3E;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,WAAW,GAAG,aAAa,CAAC,GAC9D,MAAM,GAAG,SAAS,CAepB"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Framework-authored prompt context. Two pieces:
|
|
3
|
+
*
|
|
4
|
+
* 1. Identity section — static, appended to the agent's instructions (local
|
|
5
|
+
* AGENTS.md and cloud first-turn preamble) so the model knows its own
|
|
6
|
+
* name and how messages and sessions reach it.
|
|
7
|
+
* 2. Session context block — dynamic, prepended to the first turn's user
|
|
8
|
+
* prompt only, telling the model which session/channel/environment it is
|
|
9
|
+
* in plus a channel-appropriate presence line.
|
|
10
|
+
*/
|
|
11
|
+
export const SCHEDULE_CHANNEL_PREFIX = "schedule:";
|
|
12
|
+
export function buildIdentitySection(agent) {
|
|
13
|
+
var _a;
|
|
14
|
+
const description = (_a = agent.description) === null || _a === void 0 ? void 0 : _a.trim().replace(/\.$/, "");
|
|
15
|
+
const intro = description === undefined || description === ""
|
|
16
|
+
? `You are "${agent.name}".`
|
|
17
|
+
: `You are "${agent.name}" — ${description}.`;
|
|
18
|
+
return [
|
|
19
|
+
"## About you",
|
|
20
|
+
"",
|
|
21
|
+
`${intro} You run as a persistent service: messages reach you through channels (such as Slack, GitHub, webhooks, or a web playground), and each conversation is a session that can continue across multiple turns.`,
|
|
22
|
+
].join("\n");
|
|
23
|
+
}
|
|
24
|
+
export function buildSessionContextBlock(input) {
|
|
25
|
+
var _a;
|
|
26
|
+
const lines = [
|
|
27
|
+
"<agentkit_context>",
|
|
28
|
+
`session: ${input.sessionId}`,
|
|
29
|
+
`channel: ${input.channelId}`,
|
|
30
|
+
`environment: ${input.environment}`,
|
|
31
|
+
`time: ${((_a = input.now) !== null && _a !== void 0 ? _a : new Date()).toISOString()}`,
|
|
32
|
+
"</agentkit_context>",
|
|
33
|
+
];
|
|
34
|
+
const presence = channelPresenceLine(input);
|
|
35
|
+
if (presence !== undefined) {
|
|
36
|
+
lines.push(presence);
|
|
37
|
+
}
|
|
38
|
+
return lines.join("\n");
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* One line telling the model whether anyone is watching this session and
|
|
42
|
+
* where its output lands. Resolved from the channel pack's declared kind
|
|
43
|
+
* when present, falling back to the built-in channel ids. Unknown channels
|
|
44
|
+
* get no line rather than a guess.
|
|
45
|
+
*/
|
|
46
|
+
export function channelPresenceLine(channel) {
|
|
47
|
+
var _a;
|
|
48
|
+
const kind = (_a = channel.channelKind) !== null && _a !== void 0 ? _a : builtinChannelKind(channel.channelId);
|
|
49
|
+
switch (kind) {
|
|
50
|
+
case "http":
|
|
51
|
+
case "mcp":
|
|
52
|
+
return "A user is interacting with you live and sees your replies as they stream.";
|
|
53
|
+
case "slack":
|
|
54
|
+
return "You are replying in a Slack thread; participants will read your messages.";
|
|
55
|
+
case "github":
|
|
56
|
+
return "You were triggered by a GitHub event. Deliver results through the actions available to you (comments, reviews, PRs); nobody sees your raw output otherwise.";
|
|
57
|
+
case "schedule":
|
|
58
|
+
return "This run was triggered automatically. No user is watching; complete the task autonomously and deliver results through your available tools/channels.";
|
|
59
|
+
default:
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function builtinChannelKind(channelId) {
|
|
64
|
+
if (channelId === "http" || channelId === "mcp") {
|
|
65
|
+
return channelId;
|
|
66
|
+
}
|
|
67
|
+
if (channelId.startsWith(SCHEDULE_CHANNEL_PREFIX)) {
|
|
68
|
+
return "schedule";
|
|
69
|
+
}
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reminder-runner.d.ts","sourceRoot":"","sources":["../../src/internal/reminder-runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAEV,mBAAmB,EAGnB,YAAY,EAEb,MAAM,aAAa,CAAC;AASrB,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,qBAAa,oBAAqB,SAAQ,KAAK;IAG3C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,EAAE;IAFzC,YACE,UAAU,EAAE,MAAM,EACT,oBAAoB,EAAE,MAAM,EAAE,EAIxC;CACF;AAyDD,qBAAa,cAAc;IAUvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAVzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAC9D,OAAO,CAAC,OAAO,CAAS;IAExB,YACmB,MAAM,EAAE,aAAa,EACrB,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,EAG3D;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,sEAAsE;IAChE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CA+B3B;IAED;;;OAGG;YACW,kBAAkB;
|
|
1
|
+
{"version":3,"file":"reminder-runner.d.ts","sourceRoot":"","sources":["../../src/internal/reminder-runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAEV,mBAAmB,EAGnB,YAAY,EAEb,MAAM,aAAa,CAAC;AASrB,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,qBAAa,oBAAqB,SAAQ,KAAK;IAG3C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,EAAE;IAFzC,YACE,UAAU,EAAE,MAAM,EACT,oBAAoB,EAAE,MAAM,EAAE,EAIxC;CACF;AAyDD,qBAAa,cAAc;IAUvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAVzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAC9D,OAAO,CAAC,OAAO,CAAS;IAExB,YACmB,MAAM,EAAE,aAAa,EACrB,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,EAG3D;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,sEAAsE;IAChE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CA+B3B;IAED;;;OAGG;YACW,kBAAkB;IA6BhC,8EAA8E;YAChE,OAAO;IAKrB,IAAI,IAAI,IAAI,CAOX;IAEK,MAAM,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CA8D9D;IAEK,IAAI,CAAC,MAAM,CAAC,EAAE;QAClB,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA4B1B;IAEK,MAAM,CACV,EAAE,EAAE,MAAM,EACV,MAAM,SAAoB,GACzB,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAkBnC;IAED,iFAAiF;IAC3E,qBAAqB,CACzB,iBAAiB,EAAE,MAAM,EACzB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAUjB;IAED,uDAAuD;IACjD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAC1C,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAQD;IAED,OAAO,CAAC,QAAQ;IA4ChB,OAAO,CAAC,UAAU;YAQJ,IAAI;YA6GJ,aAAa;IAY3B,OAAO,CAAC,eAAe;IAsBvB;;;OAGG;YACW,mBAAmB;YAcnB,aAAa;YAcb,YAAY;IA0C1B,OAAO,CAAC,gBAAgB;IAyDxB,OAAO,CAAC,iBAAiB;YAeX,MAAM;YAYN,SAAS;CAoFxB;AAGD,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -110,7 +110,7 @@ export class ReminderRunner {
|
|
|
110
110
|
restored += 1;
|
|
111
111
|
}
|
|
112
112
|
if (restored > 0 || disarmedOrphan > 0) {
|
|
113
|
-
this.logger(`[
|
|
113
|
+
this.logger(`[agentkit] reminders: restored ${restored} armed reminder(s)` +
|
|
114
114
|
(disarmedOrphan > 0
|
|
115
115
|
? `; disarmed ${disarmedOrphan} without live handlers`
|
|
116
116
|
: ""));
|
|
@@ -142,11 +142,11 @@ export class ReminderRunner {
|
|
|
142
142
|
}
|
|
143
143
|
catch (error) {
|
|
144
144
|
const message = error instanceof Error ? error.message : String(error);
|
|
145
|
-
this.logger(`[
|
|
145
|
+
this.logger(`[agentkit] reminders: storage hydrate failed: ${message}`);
|
|
146
146
|
return;
|
|
147
147
|
}
|
|
148
148
|
if (hydrated > 0) {
|
|
149
|
-
this.logger(`[
|
|
149
|
+
this.logger(`[agentkit] reminders: hydrated ${hydrated} reminder(s) from storage`);
|
|
150
150
|
}
|
|
151
151
|
});
|
|
152
152
|
}
|
|
@@ -302,7 +302,7 @@ export class ReminderRunner {
|
|
|
302
302
|
const delay = Math.min(MAX_TIMER_MS, Math.max(0, nextFireAtMs - Date.now()));
|
|
303
303
|
const timer = setTimeout(() => {
|
|
304
304
|
void this.fire(record.id).catch((error) => __awaiter(this, void 0, void 0, function* () {
|
|
305
|
-
this.logger(`[
|
|
305
|
+
this.logger(`[agentkit] reminder "${record.id}" fire failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
306
306
|
// Keep recurring reminders alive after unexpected throws.
|
|
307
307
|
// One-shots stay armed so a failed wake can be retried / dispatched.
|
|
308
308
|
try {
|
|
@@ -317,7 +317,7 @@ export class ReminderRunner {
|
|
|
317
317
|
yield this.afterFire(current, "skip");
|
|
318
318
|
}
|
|
319
319
|
catch (rescheduleError) {
|
|
320
|
-
this.logger(`[
|
|
320
|
+
this.logger(`[agentkit] reminder "${record.id}" reschedule after failure failed: ${rescheduleError instanceof Error
|
|
321
321
|
? rescheduleError.message
|
|
322
322
|
: String(rescheduleError)}`);
|
|
323
323
|
}
|
|
@@ -368,13 +368,13 @@ export class ReminderRunner {
|
|
|
368
368
|
}
|
|
369
369
|
}
|
|
370
370
|
catch (error) {
|
|
371
|
-
this.logger(`[
|
|
371
|
+
this.logger(`[agentkit] reminder "${id}" until() failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
372
372
|
}
|
|
373
373
|
}
|
|
374
374
|
if (yield this.isSessionBusy(record.channelId, record.continuationToken)) {
|
|
375
375
|
if (record.busyPolicy === "skipIfBusy") {
|
|
376
376
|
yield this.afterFire(record, "skip");
|
|
377
|
-
this.logger(`[
|
|
377
|
+
this.logger(`[agentkit] reminder "${id}" (${record.purpose}) skipped: session busy`);
|
|
378
378
|
return { outcome: "fired", reason: "skipped_busy" };
|
|
379
379
|
}
|
|
380
380
|
yield this.whenSessionIdle(record.channelId, record.continuationToken);
|
|
@@ -400,7 +400,7 @@ export class ReminderRunner {
|
|
|
400
400
|
if (result.action === "stop") {
|
|
401
401
|
if (latest !== undefined && latest.status === "armed") {
|
|
402
402
|
yield this.disarm(latest, "run_stop");
|
|
403
|
-
this.logger(`[
|
|
403
|
+
this.logger(`[agentkit] reminder "${id}" (${record.purpose}) disarmed: run_stop`);
|
|
404
404
|
return { outcome: "fired", reason: "run_stop" };
|
|
405
405
|
}
|
|
406
406
|
return {
|
|
@@ -413,11 +413,11 @@ export class ReminderRunner {
|
|
|
413
413
|
}
|
|
414
414
|
if (result.action === "skip") {
|
|
415
415
|
yield this.afterFire(latest, "skip", result.reschedule);
|
|
416
|
-
this.logger(`[
|
|
416
|
+
this.logger(`[agentkit] reminder "${id}" (${record.purpose}) skipped`);
|
|
417
417
|
return { outcome: "fired", reason: "skipped" };
|
|
418
418
|
}
|
|
419
419
|
yield this.afterFire(latest, "delivered", result.reschedule);
|
|
420
|
-
this.logger(`[
|
|
420
|
+
this.logger(`[agentkit] reminder "${id}" (${record.purpose}) delivered`);
|
|
421
421
|
return { outcome: "fired", reason: "delivered" };
|
|
422
422
|
}
|
|
423
423
|
finally {
|
|
@@ -497,7 +497,7 @@ export class ReminderRunner {
|
|
|
497
497
|
return { action: "delivered" };
|
|
498
498
|
}
|
|
499
499
|
catch (retryError) {
|
|
500
|
-
this.logger(`[
|
|
500
|
+
this.logger(`[agentkit] reminder "${record.id}" followup failed after wait: ${retryError instanceof Error
|
|
501
501
|
? retryError.message
|
|
502
502
|
: String(retryError)}`);
|
|
503
503
|
return { action: "skip" };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merge Authorization bearer + arbitrary request headers for agent HTTP
|
|
3
|
+
* clients (local `--bearer-token`, hosted `engineAccess.headers`, etc.).
|
|
4
|
+
*/
|
|
5
|
+
export interface RequestAuth {
|
|
6
|
+
bearerToken?: string;
|
|
7
|
+
/** Extra headers (e.g. X-Anyrun-Port-Token from engineAccess). */
|
|
8
|
+
headers?: Record<string, string>;
|
|
9
|
+
}
|
|
10
|
+
export declare function mergeRequestHeaders(auth: RequestAuth | undefined): Record<string, string>;
|
|
11
|
+
//# sourceMappingURL=request-headers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-headers.d.ts","sourceRoot":"","sources":["../../src/internal/request-headers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,WAAW,GAAG,SAAS,GAC5B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASxB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merge Authorization bearer + arbitrary request headers for agent HTTP
|
|
3
|
+
* clients (local `--bearer-token`, hosted `engineAccess.headers`, etc.).
|
|
4
|
+
*/
|
|
5
|
+
export function mergeRequestHeaders(auth) {
|
|
6
|
+
const out = {};
|
|
7
|
+
if ((auth === null || auth === void 0 ? void 0 : auth.headers) !== undefined) {
|
|
8
|
+
Object.assign(out, auth.headers);
|
|
9
|
+
}
|
|
10
|
+
if ((auth === null || auth === void 0 ? void 0 : auth.bearerToken) !== undefined) {
|
|
11
|
+
out.authorization = `Bearer ${auth.bearerToken}`;
|
|
12
|
+
}
|
|
13
|
+
return out;
|
|
14
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve a hosted (managed) agent-serve deployment into a base URL +
|
|
3
|
+
* request headers for chat/run/call/eval `--prod`.
|
|
4
|
+
*
|
|
5
|
+
* Uses short-lived `engineAccess` from the deployment status route
|
|
6
|
+
* (Cursor API key on the management API; `X-Anyrun-Port-Token` on the
|
|
7
|
+
* engine). Alias tokens are out of scope here.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Interactive CLI keep-alive for hosted engines. Without these, a hibernated
|
|
11
|
+
* Anyrun pod returns 417 `pod_hibernated` and never wakes. Matches the
|
|
12
|
+
* cloud-agent interactive keep-alive shape (lower ≤ upper, seconds).
|
|
13
|
+
*/
|
|
14
|
+
export declare const PROD_ENGINE_WAKE_HEADERS: Readonly<Record<string, string>>;
|
|
15
|
+
export interface ResolveProdTargetOptions {
|
|
16
|
+
dir: string;
|
|
17
|
+
cwd?: string;
|
|
18
|
+
/** Explicit deployment slug; otherwise derived from `--dir` basename. */
|
|
19
|
+
slug?: string;
|
|
20
|
+
team?: string;
|
|
21
|
+
apiKey?: string;
|
|
22
|
+
fetchImpl?: typeof fetch;
|
|
23
|
+
err?: (text: string) => void;
|
|
24
|
+
/** Test seam for reachability-retry backoff. */
|
|
25
|
+
sleep?: (ms: number) => Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
export interface ResolvedProdTarget {
|
|
28
|
+
agentUrl: string;
|
|
29
|
+
headers: Record<string, string>;
|
|
30
|
+
slug: string;
|
|
31
|
+
expiresAt: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Look up a running deployment and return its engineAccess URL/headers.
|
|
35
|
+
* Throws {@link Error} with a CLI-ready message on failure.
|
|
36
|
+
*/
|
|
37
|
+
export declare function resolveProdTarget(options: ResolveProdTargetOptions): Promise<ResolvedProdTarget>;
|
|
38
|
+
/** Resolve the deployment slug the same way `deploy` does for a single dir. */
|
|
39
|
+
export declare function resolveProdSlug(options: {
|
|
40
|
+
dir: string;
|
|
41
|
+
cwd?: string;
|
|
42
|
+
slug?: string;
|
|
43
|
+
}): string;
|
|
44
|
+
//# sourceMappingURL=resolve-prod-target.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-prod-target.d.ts","sourceRoot":"","sources":["../../src/internal/resolve-prod-target.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAGrE,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,gDAAgD;IAChD,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAuF7B;AAiBD,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,CAgBT"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve a hosted (managed) agent-serve deployment into a base URL +
|
|
3
|
+
* request headers for chat/run/call/eval `--prod`.
|
|
4
|
+
*
|
|
5
|
+
* Uses short-lived `engineAccess` from the deployment status route
|
|
6
|
+
* (Cursor API key on the management API; `X-Anyrun-Port-Token` on the
|
|
7
|
+
* engine). Alias tokens are out of scope here.
|
|
8
|
+
*/
|
|
9
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
10
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
11
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
12
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
13
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
14
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
15
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
import { basename, resolve } from "node:path";
|
|
19
|
+
import { resolveDeployAuth } from "./cli-deploy.js";
|
|
20
|
+
import { DeployApiError, slugFromDirectoryName, validateDeploymentSlug, } from "./deploy-client.js";
|
|
21
|
+
import { CLI_COMMAND_NAME as CLI } from "./distribution.js";
|
|
22
|
+
import { stderrPalette } from "./terminal-style.js";
|
|
23
|
+
/**
|
|
24
|
+
* Interactive CLI keep-alive for hosted engines. Without these, a hibernated
|
|
25
|
+
* Anyrun pod returns 417 `pod_hibernated` and never wakes. Matches the
|
|
26
|
+
* cloud-agent interactive keep-alive shape (lower ≤ upper, seconds).
|
|
27
|
+
*/
|
|
28
|
+
export const PROD_ENGINE_WAKE_HEADERS = {
|
|
29
|
+
"x-anyrun-hibernation-lower-bound-s": "1800",
|
|
30
|
+
"x-anyrun-hibernation-upper-bound-s": "3600",
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Look up a running deployment and return its engineAccess URL/headers.
|
|
34
|
+
* Throws {@link Error} with a CLI-ready message on failure.
|
|
35
|
+
*/
|
|
36
|
+
export function resolveProdTarget(options) {
|
|
37
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
38
|
+
var _a, _b;
|
|
39
|
+
const err = (_a = options.err) !== null && _a !== void 0 ? _a : ((text) => void process.stderr.write(text));
|
|
40
|
+
const slug = resolveProdSlug(options);
|
|
41
|
+
const auth = yield resolveDeployAuth({
|
|
42
|
+
team: options.team,
|
|
43
|
+
apiKey: options.apiKey,
|
|
44
|
+
fetchImpl: options.fetchImpl,
|
|
45
|
+
err,
|
|
46
|
+
});
|
|
47
|
+
if (typeof auth === "number") {
|
|
48
|
+
throw new Error(`Could not resolve Cursor credentials/team for --prod (see above).`);
|
|
49
|
+
}
|
|
50
|
+
// A hibernated engine can briefly omit engineAccess while getPod fails
|
|
51
|
+
// during wake. Retry a few times before surfacing "not reachable yet".
|
|
52
|
+
const maxReachabilityAttempts = 5;
|
|
53
|
+
const sleep = (_b = options.sleep) !== null && _b !== void 0 ? _b : sleepMs;
|
|
54
|
+
let detail;
|
|
55
|
+
for (let attempt = 0; attempt < maxReachabilityAttempts; attempt++) {
|
|
56
|
+
try {
|
|
57
|
+
detail = yield auth.client.getDeployment({
|
|
58
|
+
teamId: auth.teamId,
|
|
59
|
+
slug,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
if (error instanceof DeployApiError) {
|
|
64
|
+
throw new Error(`Deployment "${slug}" (team ${auth.teamId}): ${error.message}`);
|
|
65
|
+
}
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
// `degraded` still serves the previous ACTIVE engine; allow runtime access
|
|
69
|
+
// when the control plane minted engineAccess for it.
|
|
70
|
+
const statusOk = detail.status === "running" || detail.status === "degraded";
|
|
71
|
+
if (!statusOk) {
|
|
72
|
+
const lastError = detail.lastError === null || detail.lastError === undefined
|
|
73
|
+
? ""
|
|
74
|
+
: ` ${sanitizeCustomerFacingDetail(detail.lastError)}`;
|
|
75
|
+
throw new Error(`Deployment "${slug}" is ${detail.status}, not running.${lastError}\n` +
|
|
76
|
+
`Deploy or wait: \`${CLI} deploy --slug ${slug}\` / \`${CLI} deployment ${slug}\``);
|
|
77
|
+
}
|
|
78
|
+
if (detail.engineAccess !== null && detail.engineAccess !== undefined) {
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
if (attempt + 1 < maxReachabilityAttempts) {
|
|
82
|
+
if (attempt === 0) {
|
|
83
|
+
err(`${stderrPalette().dim(`Deployment "${slug}" is waking; waiting for engine access…`)}\n`);
|
|
84
|
+
}
|
|
85
|
+
yield sleep(1000 * (attempt + 1));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (detail === undefined) {
|
|
89
|
+
throw new Error(`Deployment "${slug}" lookup failed.`);
|
|
90
|
+
}
|
|
91
|
+
const access = detail.engineAccess;
|
|
92
|
+
if (access === null || access === undefined) {
|
|
93
|
+
throw new Error(`Deployment "${slug}" is ${detail.status} but is not reachable yet. ` +
|
|
94
|
+
`Try \`${CLI} deployment ${slug}\` or redeploy.`);
|
|
95
|
+
}
|
|
96
|
+
err(`${stderrPalette().dim(`Using hosted deployment "${slug}".`)}\n`);
|
|
97
|
+
return {
|
|
98
|
+
agentUrl: access.url.replace(/\/$/, ""),
|
|
99
|
+
headers: Object.assign(Object.assign({}, access.headers), PROD_ENGINE_WAKE_HEADERS),
|
|
100
|
+
slug,
|
|
101
|
+
expiresAt: access.expiresAt,
|
|
102
|
+
};
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
/** Strip obvious hosting internals from customer-facing error fragments. */
|
|
106
|
+
function sanitizeCustomerFacingDetail(message) {
|
|
107
|
+
return message
|
|
108
|
+
.replace(/https?:\/\/\S+/gi, "[url]")
|
|
109
|
+
.replace(/\bpod-[a-z0-9]+\b/gi, "[runtime]")
|
|
110
|
+
.replace(/\banyrun\b/gi, "runtime")
|
|
111
|
+
.replace(/\bcursorvm\.com\b/gi, "host");
|
|
112
|
+
}
|
|
113
|
+
function sleepMs(ms) {
|
|
114
|
+
return new Promise((resolve) => {
|
|
115
|
+
setTimeout(resolve, ms);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
/** Resolve the deployment slug the same way `deploy` does for a single dir. */
|
|
119
|
+
export function resolveProdSlug(options) {
|
|
120
|
+
var _a;
|
|
121
|
+
if (options.slug !== undefined && options.slug !== "") {
|
|
122
|
+
const slugError = validateDeploymentSlug(options.slug);
|
|
123
|
+
if (slugError !== undefined) {
|
|
124
|
+
throw new Error(slugError);
|
|
125
|
+
}
|
|
126
|
+
return options.slug;
|
|
127
|
+
}
|
|
128
|
+
const dir = resolve((_a = options.cwd) !== null && _a !== void 0 ? _a : process.cwd(), options.dir);
|
|
129
|
+
const derived = slugFromDirectoryName(basename(dir));
|
|
130
|
+
if (derived === undefined) {
|
|
131
|
+
throw new Error(`Could not derive a deployment slug from the directory name ${JSON.stringify(basename(dir))}; pass --slug.`);
|
|
132
|
+
}
|
|
133
|
+
return derived;
|
|
134
|
+
}
|
|
@@ -23,7 +23,7 @@ export function validateMountConnectionsConfig(args) {
|
|
|
23
23
|
if (filteredRefs.length === 0) {
|
|
24
24
|
return;
|
|
25
25
|
}
|
|
26
|
-
throw new Error(`[
|
|
26
|
+
throw new Error(`[agentkit] agent "${label}" has Cursor account MCP connections with \`servers\` filters (${filteredRefs
|
|
27
27
|
.map((ref) => ref.name)
|
|
28
28
|
.join(", ")}) but no --public-url; cloud-runtime turns cannot honor those filters without a public bridge URL. Set --public-url or remove the \`servers\` filter.`);
|
|
29
29
|
}
|
|
@@ -37,14 +37,14 @@ export function assertCloudCanHonorAccountServersFilters(args) {
|
|
|
37
37
|
if (blocked.length === 0) {
|
|
38
38
|
return;
|
|
39
39
|
}
|
|
40
|
-
throw new Error(`[
|
|
40
|
+
throw new Error(`[agentkit] cloud turn cannot honor Cursor account \`servers\` filters (${blocked
|
|
41
41
|
.map((connection) => connection.name)
|
|
42
42
|
.join(", ")}) without --public-url; set --public-url so cloud turns reach the filtered account bridge instead of falling back to native connectors.`);
|
|
43
43
|
}
|
|
44
44
|
/** Fail closed when anonymous HTTP admission would expose account connectors. */
|
|
45
45
|
export function assertAccountConnectionsNotAnonymous(args) {
|
|
46
46
|
if (args.allowAnonymous === true && args.hasAccountConnections) {
|
|
47
|
-
throw new Error("[
|
|
47
|
+
throw new Error("[agentkit] --allow-anonymous cannot be used with Cursor account MCP connections (defineConnection({ cursorAccount: true })); use --bearer-token or remove the account MCP connections.");
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
export function resolveMountConnections(args) {
|
|
@@ -56,7 +56,7 @@ export function resolveMountConnections(args) {
|
|
|
56
56
|
const peers = resolvePeerConnections(Object.assign(Object.assign({ refs: args.peerRefs, serverUrl: args.serverUrl }, (args.publicUrl === undefined ? {} : { publicUrl: args.publicUrl })), (args.authToken === undefined ? {} : { authToken: args.authToken })));
|
|
57
57
|
resolved.push(...peers);
|
|
58
58
|
if (cloudCapable && args.publicUrl === undefined) {
|
|
59
|
-
args.logger(`[
|
|
59
|
+
args.logger(`[agentkit] warning: agent "${label}" has peer MCP connections (${peers
|
|
60
60
|
.map((peer) => peer.name)
|
|
61
61
|
.join(", ")}) but no --public-url; cloud-runtime turns cannot reach this host's loopback address, so peers are omitted from cloud turns.`);
|
|
62
62
|
}
|
|
@@ -66,7 +66,7 @@ export function resolveMountConnections(args) {
|
|
|
66
66
|
// Non-blocking startup DX: connector statuses land in the serve log.
|
|
67
67
|
args.accountBridge.logPreflight(args.accountRefs);
|
|
68
68
|
if (cloudCapable && args.publicUrl === undefined) {
|
|
69
|
-
args.logger(`[
|
|
69
|
+
args.logger(`[agentkit] agent "${label}": cloud-runtime turns omit the account bridge without --public-url (cloud agents fall back to the account's native connectors).`);
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
return resolved;
|
|
@@ -6,15 +6,15 @@
|
|
|
6
6
|
* compact {@link Trajectory} plus the continuation token for follow-ups.
|
|
7
7
|
*/
|
|
8
8
|
import type { SessionEvent, SessionPurpose } from "../types.js";
|
|
9
|
+
import { type RequestAuth } from "./request-headers.js";
|
|
9
10
|
import { type Trajectory } from "./trajectory.js";
|
|
10
11
|
/** Thrown when a turn stream exceeds `timeoutMs`; carries the session id. */
|
|
11
12
|
export declare class RunSessionTimeoutError extends Error {
|
|
12
13
|
readonly sessionId: string;
|
|
13
14
|
constructor(message: string, sessionId: string);
|
|
14
15
|
}
|
|
15
|
-
export interface RunClientOptions {
|
|
16
|
+
export interface RunClientOptions extends RequestAuth {
|
|
16
17
|
baseUrl: string;
|
|
17
|
-
bearerToken?: string;
|
|
18
18
|
/** Abort a hung turn. */
|
|
19
19
|
timeoutMs?: number;
|
|
20
20
|
/** Called for each stream event as it arrives (for CLI progress). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-client.d.ts","sourceRoot":"","sources":["../../src/internal/run-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEnE,6EAA6E;AAC7E,qBAAa,sBAAuB,SAAQ,KAAK;IAG7C,QAAQ,CAAC,SAAS,EAAE,MAAM;IAF5B,YACE,OAAO,EAAE,MAAM,EACN,SAAS,EAAE,MAAM,EAI3B;CACF;AACD,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"run-client.d.ts","sourceRoot":"","sources":["../../src/internal/run-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEnE,6EAA6E;AAC7E,qBAAa,sBAAuB,SAAQ,KAAK;IAG7C,QAAQ,CAAC,SAAS,EAAE,MAAM;IAF5B,YACE,OAAO,EAAE,MAAM,EACN,SAAS,EAAE,MAAM,EAI3B;CACF;AACD,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,UAAU,EAAE,UAAU,CAAC;IACvB,EAAE,EAAE,OAAO,CAAC;CACb;AAQD;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,gBAAgB,GAAG;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC,GACA,OAAO,CAAC,gBAAgB,CAAC,CAuD3B"}
|
|
@@ -14,6 +14,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
14
14
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
15
15
|
});
|
|
16
16
|
};
|
|
17
|
+
import { mergeRequestHeaders } from "./request-headers.js";
|
|
17
18
|
import { buildTrajectory } from "./trajectory.js";
|
|
18
19
|
/** Thrown when a turn stream exceeds `timeoutMs`; carries the session id. */
|
|
19
20
|
export class RunSessionTimeoutError extends Error {
|
|
@@ -42,17 +43,24 @@ export function runSession(options) {
|
|
|
42
43
|
let continuationToken = options.continuationToken;
|
|
43
44
|
const allEvents = [];
|
|
44
45
|
let nextEventIndex = 0;
|
|
46
|
+
const auth = {
|
|
47
|
+
bearerToken: options.bearerToken,
|
|
48
|
+
headers: options.headers,
|
|
49
|
+
};
|
|
45
50
|
for (const message of options.messages) {
|
|
46
|
-
const turn = yield runOneTurn(
|
|
51
|
+
const turn = yield runOneTurn({
|
|
52
|
+
baseUrl,
|
|
47
53
|
message,
|
|
48
54
|
sessionId,
|
|
49
|
-
continuationToken,
|
|
50
|
-
?
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
:
|
|
54
|
-
|
|
55
|
-
:
|
|
55
|
+
continuationToken,
|
|
56
|
+
startIndex: sessionId === undefined ? 0 : nextEventIndex,
|
|
57
|
+
auth,
|
|
58
|
+
timeoutMs: options.timeoutMs,
|
|
59
|
+
onEvent: options.onEvent,
|
|
60
|
+
purpose: sessionId === undefined ? options.purpose : undefined,
|
|
61
|
+
workspaceDir: sessionId === undefined ? options.workspaceDir : undefined,
|
|
62
|
+
workspaceFiles: sessionId === undefined ? options.workspaceFiles : undefined,
|
|
63
|
+
});
|
|
56
64
|
sessionId = turn.sessionId;
|
|
57
65
|
continuationToken = turn.continuationToken;
|
|
58
66
|
allEvents.push(...turn.events);
|
|
@@ -77,11 +85,17 @@ function runOneTurn(args) {
|
|
|
77
85
|
let sessionId = args.sessionId;
|
|
78
86
|
let continuationToken = args.continuationToken;
|
|
79
87
|
if (sessionId === undefined) {
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
88
|
+
const body = { message: args.message };
|
|
89
|
+
if (args.purpose !== undefined) {
|
|
90
|
+
body.purpose = args.purpose;
|
|
91
|
+
}
|
|
92
|
+
if (args.workspaceDir !== undefined) {
|
|
93
|
+
body.workspaceDir = args.workspaceDir;
|
|
94
|
+
}
|
|
95
|
+
if (args.workspaceFiles !== undefined) {
|
|
96
|
+
body.workspaceFiles = args.workspaceFiles;
|
|
97
|
+
}
|
|
98
|
+
const created = yield postJson(args.baseUrl, "/v1/session", body, args.auth);
|
|
85
99
|
if (created.status >= 400 || created.body.ok === false) {
|
|
86
100
|
throw new Error(`POST /v1/session failed: ${(_a = str(created.body.error)) !== null && _a !== void 0 ? _a : created.status} ${(_b = str(created.body.message)) !== null && _b !== void 0 ? _b : ""}`.trim());
|
|
87
101
|
}
|
|
@@ -89,7 +103,7 @@ function runOneTurn(args) {
|
|
|
89
103
|
continuationToken = str(created.body.continuationToken);
|
|
90
104
|
}
|
|
91
105
|
else {
|
|
92
|
-
const resp = yield postJson(args.baseUrl, `/v1/session/${sessionId}`, { message: args.message, continuationToken }, args.
|
|
106
|
+
const resp = yield postJson(args.baseUrl, `/v1/session/${sessionId}`, { message: args.message, continuationToken }, args.auth);
|
|
93
107
|
if (resp.status >= 400 || resp.body.ok === false) {
|
|
94
108
|
throw new Error(`follow-up failed: ${(_c = str(resp.body.error)) !== null && _c !== void 0 ? _c : resp.status}: ${(_d = str(resp.body.message)) !== null && _d !== void 0 ? _d : ""}`.trim());
|
|
95
109
|
}
|
|
@@ -102,7 +116,7 @@ function runOneTurn(args) {
|
|
|
102
116
|
baseUrl: args.baseUrl,
|
|
103
117
|
sessionId,
|
|
104
118
|
startIndex: args.startIndex,
|
|
105
|
-
|
|
119
|
+
auth: args.auth,
|
|
106
120
|
timeoutMs: args.timeoutMs,
|
|
107
121
|
onEvent: args.onEvent,
|
|
108
122
|
});
|
|
@@ -121,7 +135,7 @@ function collectStream(args) {
|
|
|
121
135
|
: setTimeout(() => controller.abort(), args.timeoutMs);
|
|
122
136
|
try {
|
|
123
137
|
const resp = yield fetch(`${args.baseUrl}/v1/session/${args.sessionId}/stream?startIndex=${args.startIndex}`, {
|
|
124
|
-
headers:
|
|
138
|
+
headers: mergeRequestHeaders(args.auth),
|
|
125
139
|
signal: controller.signal,
|
|
126
140
|
});
|
|
127
141
|
if (!resp.ok || resp.body === null) {
|
|
@@ -178,16 +192,11 @@ function collectStream(args) {
|
|
|
178
192
|
}
|
|
179
193
|
});
|
|
180
194
|
}
|
|
181
|
-
function
|
|
182
|
-
return bearerToken === undefined
|
|
183
|
-
? {}
|
|
184
|
-
: { authorization: `Bearer ${bearerToken}` };
|
|
185
|
-
}
|
|
186
|
-
function postJson(baseUrl, path, body, bearerToken) {
|
|
195
|
+
function postJson(baseUrl, path, body, auth) {
|
|
187
196
|
return __awaiter(this, void 0, void 0, function* () {
|
|
188
197
|
const resp = yield fetch(`${baseUrl}${path}`, {
|
|
189
198
|
method: "POST",
|
|
190
|
-
headers: Object.assign({ "content-type": "application/json" },
|
|
199
|
+
headers: Object.assign({ "content-type": "application/json" }, mergeRequestHeaders(auth)),
|
|
191
200
|
body: JSON.stringify(body),
|
|
192
201
|
});
|
|
193
202
|
const text = yield resp.text();
|
|
@@ -200,6 +209,12 @@ function postJson(baseUrl, path, body, bearerToken) {
|
|
|
200
209
|
parsed = { message: text };
|
|
201
210
|
}
|
|
202
211
|
}
|
|
212
|
+
const anyrunReason = resp.headers.get("x-anyrun-failure-reason");
|
|
213
|
+
if (anyrunReason !== null &&
|
|
214
|
+
anyrunReason !== "" &&
|
|
215
|
+
(parsed.message === undefined || parsed.message === "")) {
|
|
216
|
+
parsed.message = anyrunReason;
|
|
217
|
+
}
|
|
203
218
|
return { status: resp.status, body: parsed };
|
|
204
219
|
});
|
|
205
220
|
}
|
|
@@ -68,7 +68,7 @@ export class ScheduleRunner {
|
|
|
68
68
|
for (const schedule of this.schedules) {
|
|
69
69
|
if (schedule.cron.matches(now)) {
|
|
70
70
|
void this.dispatch(schedule.name).catch((error) => {
|
|
71
|
-
this.logger(`[
|
|
71
|
+
this.logger(`[agentkit] schedule "${schedule.name}" dispatch failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
72
72
|
});
|
|
73
73
|
}
|
|
74
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/internal/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA2BH,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAOhB,YAAY,EACb,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/internal/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA2BH,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAOhB,YAAY,EACb,MAAM,aAAa,CAAC;AAoFrB,OAAO,EAAE,KAAK,WAAW,EAAmB,MAAM,iBAAiB,CAAC;AAapE,8EAA8E;AAC9E,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;CACvB;AAYD,6EAA6E;AAC7E,MAAM,WAAW,0BAA0B;IACzC,oEAAoE;IACpE,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,UAAU,EAAE,EACpB,OAAO,GAAE,YAAY,GAAG,0BAA+B,GACtD,OAAO,CAAC,gBAAgB,CAAC,CAylB3B"}
|