@sargonpiraev/pulumi-cursor 0.0.0-stage → 0.0.0

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Sargon Piraev
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,54 @@
1
- # Temporary Holding Version
1
+ # @sargonpiraev/pulumi-cursor
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Pulumi provider for [Cursor Cloud Agents](https://cursor.com/docs/cloud-agent/api/endpoints.md) **v1**: a durable **Agent** plus ephemeral **runs** (not modeled as Pulumi resources).
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @sargonpiraev/pulumi-cursor
9
+ ```
10
+
11
+ Pulumi looks up `pulumi-resource-cursor` on `PATH` after install:
12
+
13
+ ```bash
14
+ export PATH="$(npm root)/.bin:$PATH"
15
+ ```
16
+
17
+ ## Usage
18
+
19
+ ```ts
20
+ import { Provider, Agent } from '@sargonpiraev/pulumi-cursor'
21
+
22
+ const cursor = new Provider('cursor', {
23
+ apiKey: process.env.CURSOR_API_KEY!,
24
+ })
25
+
26
+ const growth = new Agent(
27
+ 'growth',
28
+ {
29
+ apiKey: process.env.CURSOR_API_KEY!,
30
+ name: 'growth',
31
+ promptText: '...',
32
+ repositoryUrl: 'https://github.com/sargonpiraev/anidex',
33
+ startingRef: 'main',
34
+ autoCreatePR: true,
35
+ mcpServers: [
36
+ {
37
+ name: 'bigquery',
38
+ type: 'stdio',
39
+ command: 'npx',
40
+ args: ['-y', '@toolbox-sdk/server@latest', '--prebuilt', 'bigquery', '--stdio'],
41
+ },
42
+ ],
43
+ },
44
+ { provider: cursor }
45
+ )
46
+ ```
47
+
48
+ Create is `POST /v1/agents` (agent + initial run). Follow-ups are `POST /v1/agents/{id}/runs` from a scheduler — not a Pulumi resource.
49
+
50
+ Auth: Cursor Dashboard API key as `Authorization: Bearer` (`CURSOR_API_KEY`).
51
+
52
+ ## Home
53
+
54
+ https://github.com/sargonpiraev/shared/tree/main/packages/pulumi-cursor
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import '../build/server.js'
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=api.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/api.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ import { buildCreateAgentBody, buildCreateRunBody } from '../api';
2
+ describe('Cursor Cloud Agents request bodies', () => {
3
+ it('builds POST /v1/agents with repos, autoCreatePR, and mcpServers', () => {
4
+ const body = buildCreateAgentBody({
5
+ name: 'growth',
6
+ promptText: 'Follow .agents/growth.md',
7
+ repositoryUrl: 'https://github.com/sargonpiraev/anidex',
8
+ startingRef: 'main',
9
+ autoCreatePR: true,
10
+ skipReviewerRequest: false,
11
+ mcpServers: [{ name: 'bigquery', type: 'stdio', command: 'npx' }],
12
+ });
13
+ expect(body).toEqual({
14
+ name: 'growth',
15
+ prompt: { text: 'Follow .agents/growth.md' },
16
+ repos: [{ url: 'https://github.com/sargonpiraev/anidex', startingRef: 'main' }],
17
+ autoCreatePR: true,
18
+ skipReviewerRequest: false,
19
+ mcpServers: [{ name: 'bigquery', type: 'stdio', command: 'npx' }],
20
+ });
21
+ });
22
+ it('builds POST /v1/agents/{id}/runs follow-up prompt', () => {
23
+ expect(buildCreateRunBody({ promptText: 'snapshot' })).toEqual({
24
+ prompt: { text: 'snapshot' },
25
+ });
26
+ });
27
+ });
28
+ //# sourceMappingURL=api.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.test.js","sourceRoot":"","sources":["../../src/__tests__/api.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAA;AAEjE,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,IAAI,GAAG,oBAAoB,CAAC;YAChC,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,0BAA0B;YACtC,aAAa,EAAE,wCAAwC;YACvD,WAAW,EAAE,MAAM;YACnB,YAAY,EAAE,IAAI;YAClB,mBAAmB,EAAE,KAAK;YAC1B,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;SAClE,CAAC,CAAA;QACF,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE;YAC5C,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,wCAAwC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;YAC/E,YAAY,EAAE,IAAI;YAClB,mBAAmB,EAAE,KAAK;YAC1B,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;SAClE,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAC7D,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;SAC7B,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
package/build/api.d.ts ADDED
@@ -0,0 +1,44 @@
1
+ export declare const CURSOR_API = "https://api.cursor.com";
2
+ export type CursorMcpServer = {
3
+ name: string;
4
+ type?: 'stdio' | 'http' | 'sse';
5
+ command?: string;
6
+ args?: string[];
7
+ env?: Record<string, string>;
8
+ url?: string;
9
+ headers?: Record<string, string>;
10
+ };
11
+ export type CreateAgentBody = {
12
+ name: string;
13
+ prompt: {
14
+ text: string;
15
+ };
16
+ repos: Array<{
17
+ url: string;
18
+ startingRef: string;
19
+ }>;
20
+ autoCreatePR: boolean;
21
+ skipReviewerRequest: boolean;
22
+ mcpServers: CursorMcpServer[];
23
+ };
24
+ export declare function buildCreateAgentBody(input: {
25
+ name: string;
26
+ promptText: string;
27
+ repositoryUrl: string;
28
+ startingRef: string;
29
+ autoCreatePR: boolean;
30
+ skipReviewerRequest: boolean;
31
+ mcpServers: CursorMcpServer[];
32
+ }): CreateAgentBody;
33
+ export declare function buildCreateRunBody(input: {
34
+ promptText: string;
35
+ }): {
36
+ prompt: {
37
+ text: string;
38
+ };
39
+ };
40
+ export declare function cursorFetch(apiKey: string, method: string, path: string, body?: unknown): Promise<{
41
+ status: number;
42
+ json: unknown;
43
+ }>;
44
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,2BAA2B,CAAA;AAElD,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAA;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IACxB,KAAK,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClD,YAAY,EAAE,OAAO,CAAA;IACrB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,UAAU,EAAE,eAAe,EAAE,CAAA;CAC9B,CAAA;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,OAAO,CAAA;IACrB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,UAAU,EAAE,eAAe,EAAE,CAAA;CAC9B,GAAG,eAAe,CASlB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAE9F;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAc5C"}
package/build/api.js ADDED
@@ -0,0 +1,31 @@
1
+ export const CURSOR_API = 'https://api.cursor.com';
2
+ export function buildCreateAgentBody(input) {
3
+ return {
4
+ name: input.name,
5
+ prompt: { text: input.promptText },
6
+ repos: [{ url: input.repositoryUrl, startingRef: input.startingRef }],
7
+ autoCreatePR: input.autoCreatePR,
8
+ skipReviewerRequest: input.skipReviewerRequest,
9
+ mcpServers: input.mcpServers,
10
+ };
11
+ }
12
+ export function buildCreateRunBody(input) {
13
+ return { prompt: { text: input.promptText } };
14
+ }
15
+ export async function cursorFetch(apiKey, method, path, body) {
16
+ const res = await fetch(`${CURSOR_API}${path}`, {
17
+ method,
18
+ headers: {
19
+ Authorization: `Bearer ${apiKey}`,
20
+ Accept: 'application/json',
21
+ ...(body !== undefined ? { 'Content-Type': 'application/json' } : {}),
22
+ },
23
+ body: body !== undefined ? JSON.stringify(body) : undefined,
24
+ });
25
+ const text = await res.text();
26
+ if (text.length === 0)
27
+ return { status: res.status, json: {} };
28
+ const json = JSON.parse(text);
29
+ return { status: res.status, json };
30
+ }
31
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,wBAAwB,CAAA;AAqBlD,MAAM,UAAU,oBAAoB,CAAC,KAQpC;IACC,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE;QAClC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,aAAa,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;QACrE,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;QAC9C,UAAU,EAAE,KAAK,CAAC,UAAU;KAC7B,CAAA;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAA6B;IAC9D,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,CAAA;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAc,EACd,MAAc,EACd,IAAY,EACZ,IAAc;IAEd,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,GAAG,IAAI,EAAE,EAAE;QAC9C,MAAM;QACN,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,MAAM,EAAE;YACjC,MAAM,EAAE,kBAAkB;YAC1B,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtE;QACD,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;KAC5D,CAAC,CAAA;IACF,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;IAC7B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;IAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAA;IACxC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAA;AACrC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { Provider, Agent } from './resource.js';
2
+ export { buildCreateAgentBody, buildCreateRunBody, CURSOR_API, type CursorMcpServer, } from './api.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,UAAU,EACV,KAAK,eAAe,GACrB,MAAM,UAAU,CAAA"}
package/build/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { Provider, Agent } from './resource.js';
2
+ export { buildCreateAgentBody, buildCreateRunBody, CURSOR_API, } from './api.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,UAAU,GAEX,MAAM,UAAU,CAAA"}
@@ -0,0 +1,26 @@
1
+ import * as pulumi from '@pulumi/pulumi';
2
+ import type { CursorMcpServer } from './api.js';
3
+ export declare class Provider extends pulumi.ProviderResource {
4
+ constructor(name: string, args: {
5
+ apiKey: pulumi.Input<string>;
6
+ }, opts?: pulumi.ResourceOptions);
7
+ }
8
+ export declare class Agent extends pulumi.CustomResource {
9
+ readonly agentId: pulumi.Output<string>;
10
+ readonly agentName: pulumi.Output<string>;
11
+ readonly status: pulumi.Output<string>;
12
+ readonly url: pulumi.Output<string>;
13
+ readonly createdAt: pulumi.Output<string>;
14
+ readonly updatedAt: pulumi.Output<string>;
15
+ constructor(name: string, args: {
16
+ apiKey: pulumi.Input<string>;
17
+ name: pulumi.Input<string>;
18
+ promptText: pulumi.Input<string>;
19
+ repositoryUrl: pulumi.Input<string>;
20
+ startingRef: pulumi.Input<string>;
21
+ autoCreatePR: pulumi.Input<boolean>;
22
+ skipReviewerRequest?: pulumi.Input<boolean>;
23
+ mcpServers: pulumi.Input<CursorMcpServer[]>;
24
+ }, opts?: pulumi.CustomResourceOptions);
25
+ }
26
+ //# sourceMappingURL=resource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAA;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE/C,qBAAa,QAAS,SAAQ,MAAM,CAAC,gBAAgB;gBACvC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;KAAE,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,eAAe;CAGhG;AAED,qBAAa,KAAM,SAAQ,MAAM,CAAC,cAAc;IAC9C,SAAgB,OAAO,EAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC/C,SAAgB,SAAS,EAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACjD,SAAgB,MAAM,EAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC9C,SAAgB,GAAG,EAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC3C,SAAgB,SAAS,EAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACjD,SAAgB,SAAS,EAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;gBAG/C,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;QACJ,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC5B,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC1B,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAChC,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACnC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACjC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACnC,mBAAmB,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC3C,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAA;KAC5C,EACD,IAAI,CAAC,EAAE,MAAM,CAAC,qBAAqB;CA4BtC"}
@@ -0,0 +1,34 @@
1
+ import * as pulumi from '@pulumi/pulumi';
2
+ export class Provider extends pulumi.ProviderResource {
3
+ constructor(name, args, opts) {
4
+ super('cursor', name, { apiKey: pulumi.secret(args.apiKey) }, opts);
5
+ }
6
+ }
7
+ export class Agent extends pulumi.CustomResource {
8
+ agentId;
9
+ agentName;
10
+ status;
11
+ url;
12
+ createdAt;
13
+ updatedAt;
14
+ constructor(name, args, opts) {
15
+ const mcpServersJson = pulumi.secret(pulumi.output(args.mcpServers).apply((servers) => JSON.stringify(servers)));
16
+ super('cursor:index:Agent', name, {
17
+ apiKey: pulumi.secret(args.apiKey),
18
+ name: args.name,
19
+ promptText: args.promptText,
20
+ repositoryUrl: args.repositoryUrl,
21
+ startingRef: args.startingRef,
22
+ autoCreatePR: args.autoCreatePR,
23
+ skipReviewerRequest: args.skipReviewerRequest ?? false,
24
+ mcpServersJson,
25
+ agentId: undefined,
26
+ agentName: undefined,
27
+ status: undefined,
28
+ url: undefined,
29
+ createdAt: undefined,
30
+ updatedAt: undefined,
31
+ }, opts);
32
+ }
33
+ }
34
+ //# sourceMappingURL=resource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource.js","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAA;AAGxC,MAAM,OAAO,QAAS,SAAQ,MAAM,CAAC,gBAAgB;IACnD,YAAY,IAAY,EAAE,IAAsC,EAAE,IAA6B;QAC7F,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IACrE,CAAC;CACF;AAED,MAAM,OAAO,KAAM,SAAQ,MAAM,CAAC,cAAc;IAC9B,OAAO,CAAwB;IAC/B,SAAS,CAAwB;IACjC,MAAM,CAAwB;IAC9B,GAAG,CAAwB;IAC3B,SAAS,CAAwB;IACjC,SAAS,CAAwB;IAEjD,YACE,IAAY,EACZ,IASC,EACD,IAAmC;QAEnC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAClC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAC3E,CAAA;QAED,KAAK,CACH,oBAAoB,EACpB,IAAI,EACJ;YACE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;YAClC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,IAAI,KAAK;YACtD,cAAc;YACd,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,SAAS;YACjB,GAAG,EAAE,SAAS;YACd,SAAS,EAAE,SAAS;YACpB,SAAS,EAAE,SAAS;SACrB,EACD,IAAI,CACL,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":""}
@@ -0,0 +1,211 @@
1
+ import { main } from '@pulumi/pulumi/provider/server.js';
2
+ import { buildCreateAgentBody, cursorFetch } from './api.js';
3
+ const schema = JSON.stringify({
4
+ name: 'cursor',
5
+ version: '0.1.0',
6
+ config: {
7
+ variables: {
8
+ apiKey: {
9
+ type: 'string',
10
+ secret: true,
11
+ description: 'Cursor Cloud Agents API key (Bearer). Vault: CURSOR_API_KEY.',
12
+ },
13
+ },
14
+ required: ['apiKey'],
15
+ },
16
+ resources: {
17
+ 'cursor:index:Agent': {
18
+ description: 'Durable Cursor Cloud Agent (POST /v1/agents). Runs are ephemeral — use POST /v1/agents/{id}/runs.',
19
+ properties: {
20
+ apiKey: { type: 'string', secret: true },
21
+ name: { type: 'string' },
22
+ promptText: { type: 'string' },
23
+ repositoryUrl: { type: 'string' },
24
+ startingRef: { type: 'string' },
25
+ autoCreatePR: { type: 'boolean' },
26
+ skipReviewerRequest: { type: 'boolean' },
27
+ mcpServersJson: { type: 'string', secret: true },
28
+ agentId: { type: 'string' },
29
+ agentName: { type: 'string' },
30
+ status: { type: 'string' },
31
+ url: { type: 'string' },
32
+ createdAt: { type: 'string' },
33
+ updatedAt: { type: 'string' },
34
+ },
35
+ required: [
36
+ 'apiKey',
37
+ 'name',
38
+ 'promptText',
39
+ 'repositoryUrl',
40
+ 'startingRef',
41
+ 'autoCreatePR',
42
+ 'mcpServersJson',
43
+ 'agentId',
44
+ 'agentName',
45
+ 'status',
46
+ 'url',
47
+ 'createdAt',
48
+ 'updatedAt',
49
+ ],
50
+ inputProperties: {
51
+ apiKey: { type: 'string', secret: true },
52
+ name: { type: 'string' },
53
+ promptText: { type: 'string' },
54
+ repositoryUrl: { type: 'string' },
55
+ startingRef: { type: 'string' },
56
+ autoCreatePR: { type: 'boolean' },
57
+ skipReviewerRequest: { type: 'boolean' },
58
+ mcpServersJson: { type: 'string', secret: true },
59
+ },
60
+ requiredInputs: [
61
+ 'apiKey',
62
+ 'name',
63
+ 'promptText',
64
+ 'repositoryUrl',
65
+ 'startingRef',
66
+ 'autoCreatePR',
67
+ 'mcpServersJson',
68
+ ],
69
+ },
70
+ },
71
+ });
72
+ function resourceType(urn) {
73
+ return urn.split('::')[2]?.split(':').pop() ?? '';
74
+ }
75
+ function unwrapString(value, field) {
76
+ if (typeof value === 'string')
77
+ return value;
78
+ if (value && typeof value === 'object') {
79
+ const rec = value;
80
+ if (typeof rec.value === 'string')
81
+ return rec.value;
82
+ if (typeof rec.plaintext === 'string')
83
+ return rec.plaintext;
84
+ }
85
+ throw new Error(`${field} must be a string, got ${typeof value}`);
86
+ }
87
+ function apiKeyFrom(props) {
88
+ return unwrapString(props?.apiKey, 'apiKey');
89
+ }
90
+ function parseAgent(json) {
91
+ const root = json;
92
+ const agent = root.agent ?? root;
93
+ return {
94
+ id: agent.id,
95
+ name: agent.name,
96
+ status: agent.status,
97
+ url: agent.url,
98
+ createdAt: agent.createdAt,
99
+ updatedAt: agent.updatedAt,
100
+ };
101
+ }
102
+ function mcpServersFromInputs(inputs) {
103
+ const raw = inputs.mcpServersJson;
104
+ if (Array.isArray(raw))
105
+ return raw;
106
+ if (typeof raw === 'string')
107
+ return JSON.parse(raw);
108
+ if (raw && typeof raw === 'object' && 'value' in raw) {
109
+ return mcpServersFromInputs({ mcpServersJson: raw.value });
110
+ }
111
+ throw new Error(`mcpServersJson must be a JSON string or array, got ${typeof raw}`);
112
+ }
113
+ function outsFromAgent(inputs, agent) {
114
+ return {
115
+ name: inputs.name,
116
+ promptText: inputs.promptText,
117
+ repositoryUrl: inputs.repositoryUrl,
118
+ startingRef: inputs.startingRef,
119
+ autoCreatePR: inputs.autoCreatePR,
120
+ skipReviewerRequest: inputs.skipReviewerRequest ?? false,
121
+ apiKey: inputs.apiKey,
122
+ mcpServersJson: inputs.mcpServersJson,
123
+ agentId: agent.id,
124
+ agentName: agent.name ?? inputs.name,
125
+ status: agent.status,
126
+ url: agent.url,
127
+ createdAt: agent.createdAt,
128
+ updatedAt: agent.updatedAt,
129
+ };
130
+ }
131
+ const provider = {
132
+ version: '0.1.0',
133
+ schema,
134
+ async create(urn, inputs) {
135
+ if (resourceType(urn) !== 'Agent')
136
+ throw new Error(`Unknown resource type in URN: ${urn}`);
137
+ const key = apiKeyFrom(inputs);
138
+ const body = buildCreateAgentBody({
139
+ name: inputs.name,
140
+ promptText: inputs.promptText,
141
+ repositoryUrl: inputs.repositoryUrl,
142
+ startingRef: inputs.startingRef,
143
+ autoCreatePR: inputs.autoCreatePR,
144
+ skipReviewerRequest: inputs.skipReviewerRequest ?? false,
145
+ mcpServers: mcpServersFromInputs(inputs),
146
+ });
147
+ const { status, json } = await cursorFetch(key, 'POST', '/v1/agents', body);
148
+ if (status !== 201) {
149
+ throw new Error(`Cursor POST /v1/agents ${status}: ${JSON.stringify(json).slice(0, 800)}`);
150
+ }
151
+ const agent = parseAgent(json);
152
+ if (!agent.id) {
153
+ throw new Error(`Cursor POST /v1/agents missing agent.id: ${JSON.stringify(json).slice(0, 800)}`);
154
+ }
155
+ return { id: agent.id, outs: outsFromAgent(inputs, agent) };
156
+ },
157
+ async read(id, urn, props) {
158
+ if (resourceType(urn) !== 'Agent')
159
+ return { id };
160
+ const key = apiKeyFrom(props);
161
+ if (!key) {
162
+ return { id, props: props ?? {} };
163
+ }
164
+ const { status, json } = await cursorFetch(key, 'GET', `/v1/agents/${id}`);
165
+ if (status === 404)
166
+ return { id: '' };
167
+ if (status !== 200) {
168
+ throw new Error(`Cursor GET /v1/agents/${id} ${status}: ${JSON.stringify(json).slice(0, 800)}`);
169
+ }
170
+ const agent = parseAgent(json);
171
+ return { id, props: outsFromAgent(props ?? {}, agent) };
172
+ },
173
+ async diff(_id, urn, olds, news) {
174
+ if (resourceType(urn) !== 'Agent')
175
+ return {};
176
+ const replaces = [];
177
+ if (olds.repositoryUrl !== news.repositoryUrl)
178
+ replaces.push('repositoryUrl');
179
+ if (olds.startingRef !== news.startingRef)
180
+ replaces.push('startingRef');
181
+ const changed = replaces.length > 0 ||
182
+ olds.name !== news.name ||
183
+ olds.promptText !== news.promptText ||
184
+ olds.autoCreatePR !== news.autoCreatePR ||
185
+ olds.skipReviewerRequest !== news.skipReviewerRequest ||
186
+ olds.mcpServersJson !== news.mcpServersJson;
187
+ return { changes: changed, replaces };
188
+ },
189
+ async update(id, urn, _olds, news) {
190
+ if (resourceType(urn) !== 'Agent')
191
+ throw new Error(`Unknown resource type in URN: ${urn}`);
192
+ const key = apiKeyFrom(news);
193
+ const { status, json } = await cursorFetch(key, 'GET', `/v1/agents/${id}`);
194
+ if (status !== 200) {
195
+ throw new Error(`Cursor GET /v1/agents/${id} ${status}: ${JSON.stringify(json).slice(0, 800)}`);
196
+ }
197
+ const agent = parseAgent(json);
198
+ return { outs: outsFromAgent(news, agent) };
199
+ },
200
+ async delete(id, urn, props) {
201
+ if (resourceType(urn) !== 'Agent')
202
+ return;
203
+ const key = apiKeyFrom(props);
204
+ const { status, json } = await cursorFetch(key, 'DELETE', `/v1/agents/${id}`);
205
+ if (status !== 200 && status !== 404) {
206
+ throw new Error(`Cursor DELETE /v1/agents/${id} ${status}: ${JSON.stringify(json).slice(0, 800)}`);
207
+ }
208
+ },
209
+ };
210
+ main(provider, process.argv.slice(2));
211
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,59 @@
1
1
  {
2
2
  "name": "@sargonpiraev/pulumi-cursor",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.0.0",
4
+ "description": "Pulumi provider for Cursor Cloud Agents (v1 durable agent + runs)",
5
+ "keywords": [
6
+ "pulumi",
7
+ "provider",
8
+ "cursor",
9
+ "cloud-agents",
10
+ "infrastructure"
11
+ ],
12
+ "homepage": "https://github.com/sargonpiraev/shared/tree/main/packages/pulumi-cursor#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/sargonpiraev/shared/issues"
15
+ },
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/sargonpiraev/shared.git",
19
+ "directory": "packages/pulumi-cursor"
20
+ },
21
+ "license": "MIT",
22
+ "author": {
23
+ "name": "Sargon Piraev",
24
+ "email": "sargonpiraev@gmail.com"
25
+ },
26
+ "type": "module",
27
+ "main": "./build/index.js",
28
+ "types": "./build/index.d.ts",
29
+ "bin": {
30
+ "pulumi-resource-cursor": "./bin/pulumi-resource-cursor.js"
31
+ },
32
+ "files": [
33
+ "build",
34
+ "bin",
35
+ "README.md",
36
+ "LICENSE"
37
+ ],
38
+ "scripts": {
39
+ "build": "tsc -p tsconfig.json",
40
+ "check-types": "tsc -p tsconfig.json --noEmit",
41
+ "lint": "eslint ./src --ext .ts",
42
+ "test": "jest --passWithNoTests --coverage",
43
+ "test:unit": "jest --passWithNoTests --coverage"
44
+ },
45
+ "dependencies": {
46
+ "@pulumi/pulumi": "^3.0.0"
47
+ },
48
+ "devDependencies": {
49
+ "@types/node": "^22.15.3",
50
+ "typescript": "5.9.2"
51
+ },
52
+ "engines": {
53
+ "node": ">=18.0.0"
54
+ },
55
+ "publishConfig": {
56
+ "access": "public",
57
+ "provenance": true
58
+ }
59
+ }