@zibby/skills 0.1.33 → 0.1.35

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 (87) hide show
  1. package/README.md +2 -0
  2. package/dist/browser.d.ts +19 -0
  3. package/dist/chat-memory.d.ts +355 -0
  4. package/dist/chat-notify.d.ts +409 -0
  5. package/dist/core-tools.d.ts +131 -0
  6. package/dist/function-skill.d.ts +149 -0
  7. package/dist/git.d.ts +72 -0
  8. package/dist/github.d.ts +777 -0
  9. package/dist/github.js +4 -3
  10. package/dist/gitlab.d.ts +396 -0
  11. package/dist/gitlab.js +19 -0
  12. package/dist/index.d.ts +45 -0
  13. package/dist/index.js +145 -126
  14. package/dist/integrations.d.ts +110 -0
  15. package/dist/jira.d.ts +547 -0
  16. package/dist/lark.d.ts +161 -0
  17. package/dist/linear.d.ts +344 -0
  18. package/dist/llm-billing.d.ts +294 -0
  19. package/dist/memory.d.ts +137 -0
  20. package/dist/package.json +67 -17
  21. package/dist/plane.d.ts +24 -0
  22. package/dist/report.d.ts +354 -0
  23. package/dist/report.js +9 -9
  24. package/dist/sentry.d.ts +43 -0
  25. package/dist/skill-installer.d.ts +86 -0
  26. package/dist/slack.d.ts +284 -0
  27. package/dist/test-runner.d.ts +220 -0
  28. package/dist/trackers/github-adapter.d.ts +96 -0
  29. package/dist/trackers/github-adapter.js +4 -3
  30. package/dist/trackers/index.d.ts +27 -0
  31. package/dist/trackers/index.js +16 -15
  32. package/dist/trackers/jira-adapter.d.ts +90 -0
  33. package/dist/trackers/linear-adapter.d.ts +89 -0
  34. package/dist/trackers/plane-adapter.d.ts +101 -0
  35. package/dist/trackers/types.d.ts +335 -0
  36. package/dist/workflow-builder.d.ts +245 -0
  37. package/docs/apps/agent-ops.md +6 -6
  38. package/docs/apps/deploy.md +1 -1
  39. package/docs/apps/index.md +1 -1
  40. package/docs/apps/managing.md +1 -1
  41. package/docs/cli-reference.md +65 -65
  42. package/docs/cloning-repositories.md +9 -9
  43. package/docs/cloud/bundles.md +8 -8
  44. package/docs/cloud/dedicated-egress.md +6 -6
  45. package/docs/cloud/env-vars.md +29 -29
  46. package/docs/cloud/limits.md +11 -11
  47. package/docs/cloud/triggering.md +16 -16
  48. package/docs/concepts/agents.md +4 -4
  49. package/docs/concepts/sessions.md +7 -7
  50. package/docs/concepts/state.md +1 -1
  51. package/docs/concepts/sub-graphs.md +9 -9
  52. package/docs/get-started/deploy.md +14 -14
  53. package/docs/get-started/install.md +4 -4
  54. package/docs/get-started/run-locally.md +12 -12
  55. package/docs/get-started/trigger-and-logs.md +14 -14
  56. package/docs/get-started/use-from-agents.md +17 -17
  57. package/docs/get-started/your-first-workflow.md +8 -8
  58. package/docs/integrations/gitlab.md +1 -1
  59. package/docs/integrations/lark.md +2 -2
  60. package/docs/integrations/linear.md +1 -1
  61. package/docs/integrations/notion.md +2 -2
  62. package/docs/integrations/plane.md +1 -1
  63. package/docs/integrations/slack.md +1 -1
  64. package/docs/intro.md +4 -4
  65. package/docs/legacy/test-automation.md +2 -2
  66. package/docs/packages/cli.md +11 -11
  67. package/docs/packages/core.md +2 -2
  68. package/docs/packages/mcp-cli.md +18 -18
  69. package/docs/packages/skills.md +2 -2
  70. package/docs/packages/ui-memory.md +1 -1
  71. package/docs/recipes/bug-autofix.md +1 -1
  72. package/docs/recipes/index.md +3 -3
  73. package/docs/recipes/pipeline-supervisor.md +4 -4
  74. package/docs/recipes/sentry-triage.md +7 -7
  75. package/docs/recipes/test.md +6 -6
  76. package/docs/skills/browser.md +2 -2
  77. package/docs/skills/chat-memory.md +1 -1
  78. package/docs/skills/core-tools.md +1 -1
  79. package/docs/skills/function-skill.md +1 -1
  80. package/docs/skills/github.md +2 -2
  81. package/docs/skills/index.md +1 -1
  82. package/docs/skills/jira.md +1 -1
  83. package/docs/skills/lark.md +1 -1
  84. package/docs/skills/memory.md +2 -2
  85. package/docs/skills/sentry.md +1 -1
  86. package/docs/skills/slack.md +2 -2
  87. package/package.json +67 -17
@@ -0,0 +1,294 @@
1
+ /**
2
+ * Fetch OpenAI org costs + usage for the window. Iterates pagination
3
+ * (page_token) until exhausted.
4
+ *
5
+ * Reference: GET /v1/organization/costs
6
+ * query: start_time (unix sec), end_time (unix sec), bucket_width=1d,
7
+ * group_by[]=project_id&group_by[]=line_item, page
8
+ * response shape:
9
+ * {
10
+ * object: 'page',
11
+ * data: [
12
+ * { object: 'bucket', start_time, end_time,
13
+ * results: [{ amount: { value, currency }, project_id, line_item, ... }] }
14
+ * ],
15
+ * has_more: boolean,
16
+ * next_page: '...'
17
+ * }
18
+ *
19
+ * We normalize each result row into a NormalizedSpendRecord.
20
+ *
21
+ * @param {{ startMs: number, endMs: number, groupBy?: string[] }} opts
22
+ * @returns {Promise<{ ok: true, items: NormalizedSpendRecord[], rawBuckets: number }>}
23
+ */
24
+ export function fetchOpenAICosts({ startMs, endMs, groupBy }: {
25
+ startMs: number;
26
+ endMs: number;
27
+ groupBy?: string[];
28
+ }): Promise<{
29
+ ok: true;
30
+ items: NormalizedSpendRecord[];
31
+ rawBuckets: number;
32
+ }>;
33
+ /**
34
+ * Fetch the OpenAI project catalog (id → name). Useful for the digest
35
+ * to display "acme-prod" instead of "proj_abc123". Cheap — usually
36
+ * <50 projects. Returns Map<projectId, projectName>.
37
+ */
38
+ export function fetchOpenAIProjects(): Promise<Map<any, any>>;
39
+ /**
40
+ * Fetch Anthropic cost report.
41
+ *
42
+ * Reference: GET /v1/organizations/cost_report
43
+ * query: starting_at (ISO), ending_at (ISO), bucket=1d,
44
+ * group_by[]=workspace_id&group_by[]=model
45
+ * headers: x-api-key, anthropic-version: 2023-06-01
46
+ * response shape (beta):
47
+ * {
48
+ * data: [
49
+ * { starting_at, ending_at, currency: 'USD',
50
+ * results: [{ amount: '0.42', workspace_id, model, ... }] }
51
+ * ],
52
+ * has_more, next_page
53
+ * }
54
+ *
55
+ * Anthropic returns cost amounts as decimal strings (cents-precision).
56
+ * Multiply-by-100 then parse-int → exact-cents arithmetic OK; for the
57
+ * digest we just parseFloat (drift over 28 days is negligible).
58
+ */
59
+ export function fetchAnthropicCosts({ startMs, endMs, groupBy }: {
60
+ startMs: any;
61
+ endMs: any;
62
+ groupBy?: string[];
63
+ }): Promise<{
64
+ ok: boolean;
65
+ items: {
66
+ provider: string;
67
+ day: any;
68
+ costUsd: number;
69
+ workspaceId: any;
70
+ apiKeyId: any;
71
+ model: any;
72
+ tokensIn: number;
73
+ tokensOut: number;
74
+ cachedTokens: number;
75
+ }[];
76
+ rawBuckets: number;
77
+ }>;
78
+ /**
79
+ * Fetch Anthropic workspace catalog (id → name).
80
+ */
81
+ export function fetchAnthropicWorkspaces(): Promise<Map<any, any>>;
82
+ /**
83
+ * Fetch Cursor team daily-usage data. The endpoint returns per-day,
84
+ * per-user, per-model rolls — we flatten to NormalizedSpendRecord.
85
+ *
86
+ * Reference: GET /teams/daily-usage-data
87
+ * query: startDate (YYYY-MM-DD), endDate (YYYY-MM-DD)
88
+ * header: Authorization: Bearer <admin-key>
89
+ * response shape (Cursor Admin API, 2026):
90
+ * {
91
+ * data: [
92
+ * { date, totalCents, userMetrics: [
93
+ * { email, totalCents, modelUsage: [
94
+ * { model, requestCount, acceptedLines, suggestedLines } ] } ]
95
+ * }
96
+ * ]
97
+ * }
98
+ *
99
+ * acceptanceRate = acceptedLines / suggestedLines (per model per user
100
+ * per day). The digest aggregates across users for the team-level rate.
101
+ */
102
+ export function fetchCursorSpend({ startMs, endMs }: {
103
+ startMs: any;
104
+ endMs: any;
105
+ }): Promise<{
106
+ ok: boolean;
107
+ items: ({
108
+ provider: string;
109
+ day: any;
110
+ costUsd: number;
111
+ userEmail: any;
112
+ model: any;
113
+ requestCount: number;
114
+ acceptanceRate: number;
115
+ } | {
116
+ provider: string;
117
+ day: any;
118
+ costUsd: number;
119
+ userEmail: any;
120
+ model?: undefined;
121
+ requestCount?: undefined;
122
+ acceptanceRate?: undefined;
123
+ })[];
124
+ rawBuckets: number;
125
+ }>;
126
+ /**
127
+ * Pull all three providers in parallel. Returns a per-provider result
128
+ * map so the analyze node can degrade gracefully when one provider
129
+ * fails (not connected, key revoked, upstream 500, etc.).
130
+ *
131
+ * @param {{ startMs: number, endMs: number }} opts
132
+ * @returns {Promise<{
133
+ * openai: { ok: true, items: NormalizedSpendRecord[] } | { ok: false, error: string },
134
+ * anthropic: { ok: true, items: NormalizedSpendRecord[] } | { ok: false, error: string },
135
+ * cursor: { ok: true, items: NormalizedSpendRecord[] } | { ok: false, error: string },
136
+ * totals: { provider: string, totalUsd: number }[],
137
+ * }>}
138
+ */
139
+ export function fetchAllProviders({ startMs, endMs }: {
140
+ startMs: number;
141
+ endMs: number;
142
+ }): Promise<{
143
+ openai: {
144
+ ok: true;
145
+ items: NormalizedSpendRecord[];
146
+ } | {
147
+ ok: false;
148
+ error: string;
149
+ };
150
+ anthropic: {
151
+ ok: true;
152
+ items: NormalizedSpendRecord[];
153
+ } | {
154
+ ok: false;
155
+ error: string;
156
+ };
157
+ cursor: {
158
+ ok: true;
159
+ items: NormalizedSpendRecord[];
160
+ } | {
161
+ ok: false;
162
+ error: string;
163
+ };
164
+ totals: {
165
+ provider: string;
166
+ totalUsd: number;
167
+ }[];
168
+ }>;
169
+ /**
170
+ * Group an array of normalized records by a key + sum costUsd.
171
+ * Convenience for analyze nodes — saves writing the same reduce 5x.
172
+ *
173
+ * @param {NormalizedSpendRecord[]} items
174
+ * @param {(item: NormalizedSpendRecord) => string} keyFn
175
+ * @returns {{ key: string, totalUsd: number, count: number }[]} sorted desc by totalUsd
176
+ */
177
+ export function groupByKey(items: NormalizedSpendRecord[], keyFn: (item: NormalizedSpendRecord) => string): {
178
+ key: string;
179
+ totalUsd: number;
180
+ count: number;
181
+ }[];
182
+ /**
183
+ * Compute mean + stddev over a numeric window. Used by analyze nodes
184
+ * to flag this-week-vs-baseline anomalies (>2σ).
185
+ *
186
+ * @param {number[]} xs
187
+ * @returns {{ mean: number, stddev: number }}
188
+ */
189
+ export function meanStddev(xs: number[]): {
190
+ mean: number;
191
+ stddev: number;
192
+ };
193
+ /**
194
+ * Normalized record shape — one entry per (provider × day × dimension)
195
+ * after each provider's response is unpacked. Optional fields are
196
+ * provider-specific and may be undefined.
197
+ *
198
+ * @typedef {Object} NormalizedSpendRecord
199
+ * @property {'openai'|'anthropic'|'cursor'} provider
200
+ * @property {string} day ISO date (YYYY-MM-DD)
201
+ * @property {number} costUsd USD, positive
202
+ * @property {string} [projectId] OpenAI project_id
203
+ * @property {string} [projectName] OpenAI project metadata (joined on lookup)
204
+ * @property {string} [workspaceId] Anthropic workspace_id
205
+ * @property {string} [workspaceName] Anthropic workspace metadata
206
+ * @property {string} [apiKeyId] OpenAI / Anthropic api_key_id
207
+ * @property {string} [userEmail] Cursor team-member email
208
+ * @property {string} [model] Model id (when grouped by model)
209
+ * @property {number} [tokensIn]
210
+ * @property {number} [tokensOut]
211
+ * @property {number} [cachedTokens]
212
+ * @property {number} [requestCount] Cursor
213
+ * @property {number} [acceptanceRate] Cursor: 0..1
214
+ */
215
+ /**
216
+ * Marketplace-gating skill declarations. The id matches the
217
+ * REQUIRED_INTEGRATION_MAP entry on the backend; the template's node
218
+ * just declares `skills: [SKILLS.OPENAI_BILLING, ...]` and the bundler
219
+ * derives required integrations automatically.
220
+ *
221
+ * These are intentionally minimal — no MCP tools, no resolve(), no
222
+ * prompt fragments. The skill object exists ONLY to register the
223
+ * integration dependency. Runtime behavior lives in the fetch fns below.
224
+ */
225
+ export const openaiBillingSkill: Readonly<{
226
+ id: "openai_billing";
227
+ requiresIntegration: "openai_billing";
228
+ description: "OpenAI organization billing/usage admin API (paste sk-admin-... key)";
229
+ }>;
230
+ export const anthropicBillingSkill: Readonly<{
231
+ id: "anthropic_billing";
232
+ requiresIntegration: "anthropic_billing";
233
+ description: "Anthropic organization cost/usage admin API (paste sk-ant-admin-... key)";
234
+ }>;
235
+ export const cursorAdminSkill: Readonly<{
236
+ id: "cursor_admin";
237
+ requiresIntegration: "cursor_admin";
238
+ description: "Cursor Team/Enterprise admin API (paste admin key)";
239
+ }>;
240
+ /**
241
+ * Normalized record shape — one entry per (provider × day × dimension)
242
+ * after each provider's response is unpacked. Optional fields are
243
+ * provider-specific and may be undefined.
244
+ */
245
+ export type NormalizedSpendRecord = {
246
+ provider: "openai" | "anthropic" | "cursor";
247
+ /**
248
+ * ISO date (YYYY-MM-DD)
249
+ */
250
+ day: string;
251
+ /**
252
+ * USD, positive
253
+ */
254
+ costUsd: number;
255
+ /**
256
+ * OpenAI project_id
257
+ */
258
+ projectId?: string;
259
+ /**
260
+ * OpenAI project metadata (joined on lookup)
261
+ */
262
+ projectName?: string;
263
+ /**
264
+ * Anthropic workspace_id
265
+ */
266
+ workspaceId?: string;
267
+ /**
268
+ * Anthropic workspace metadata
269
+ */
270
+ workspaceName?: string;
271
+ /**
272
+ * OpenAI / Anthropic api_key_id
273
+ */
274
+ apiKeyId?: string;
275
+ /**
276
+ * Cursor team-member email
277
+ */
278
+ userEmail?: string;
279
+ /**
280
+ * Model id (when grouped by model)
281
+ */
282
+ model?: string;
283
+ tokensIn?: number;
284
+ tokensOut?: number;
285
+ cachedTokens?: number;
286
+ /**
287
+ * Cursor
288
+ */
289
+ requestCount?: number;
290
+ /**
291
+ * Cursor: 0..1
292
+ */
293
+ acceptanceRate?: number;
294
+ };
@@ -0,0 +1,137 @@
1
+ export namespace memorySkill {
2
+ let id: string;
3
+ let serverName: string;
4
+ let allowedTools: string[];
5
+ let envKeys: any[];
6
+ let description: string;
7
+ function middleware(): Promise<(s: any, o: any, i: any, a: any) => Promise<any>>;
8
+ let promptFragment: string;
9
+ function resolve(): {
10
+ command: string;
11
+ args: any[];
12
+ description: string;
13
+ };
14
+ let tools: ({
15
+ name: string;
16
+ description: string;
17
+ input_schema: {
18
+ type: string;
19
+ properties: {
20
+ specPath: {
21
+ type: string;
22
+ description: string;
23
+ };
24
+ limit: {
25
+ type: string;
26
+ description: string;
27
+ };
28
+ pageUrl?: undefined;
29
+ url?: undefined;
30
+ fromUrl?: undefined;
31
+ category?: undefined;
32
+ content?: undefined;
33
+ sessionId?: undefined;
34
+ };
35
+ required?: undefined;
36
+ };
37
+ } | {
38
+ name: string;
39
+ description: string;
40
+ input_schema: {
41
+ type: string;
42
+ properties: {
43
+ pageUrl: {
44
+ type: string;
45
+ description: string;
46
+ };
47
+ limit: {
48
+ type: string;
49
+ description: string;
50
+ };
51
+ specPath?: undefined;
52
+ url?: undefined;
53
+ fromUrl?: undefined;
54
+ category?: undefined;
55
+ content?: undefined;
56
+ sessionId?: undefined;
57
+ };
58
+ required?: undefined;
59
+ };
60
+ } | {
61
+ name: string;
62
+ description: string;
63
+ input_schema: {
64
+ type: string;
65
+ properties: {
66
+ url: {
67
+ type: string;
68
+ description: string;
69
+ };
70
+ limit: {
71
+ type: string;
72
+ description: string;
73
+ };
74
+ specPath?: undefined;
75
+ pageUrl?: undefined;
76
+ fromUrl?: undefined;
77
+ category?: undefined;
78
+ content?: undefined;
79
+ sessionId?: undefined;
80
+ };
81
+ required?: undefined;
82
+ };
83
+ } | {
84
+ name: string;
85
+ description: string;
86
+ input_schema: {
87
+ type: string;
88
+ properties: {
89
+ fromUrl: {
90
+ type: string;
91
+ description: string;
92
+ };
93
+ limit: {
94
+ type: string;
95
+ description: string;
96
+ };
97
+ specPath?: undefined;
98
+ pageUrl?: undefined;
99
+ url?: undefined;
100
+ category?: undefined;
101
+ content?: undefined;
102
+ sessionId?: undefined;
103
+ };
104
+ required?: undefined;
105
+ };
106
+ } | {
107
+ name: string;
108
+ description: string;
109
+ input_schema: {
110
+ type: string;
111
+ properties: {
112
+ category: {
113
+ type: string;
114
+ enum: string[];
115
+ description: string;
116
+ };
117
+ content: {
118
+ type: string;
119
+ description: string;
120
+ };
121
+ specPath: {
122
+ type: string;
123
+ description: string;
124
+ };
125
+ sessionId: {
126
+ type: string;
127
+ description: string;
128
+ };
129
+ limit?: undefined;
130
+ pageUrl?: undefined;
131
+ url?: undefined;
132
+ fromUrl?: undefined;
133
+ };
134
+ required: string[];
135
+ };
136
+ })[];
137
+ }
package/dist/package.json CHANGED
@@ -1,29 +1,78 @@
1
1
  {
2
2
  "name": "@zibby/skills",
3
- "version": "0.1.33",
3
+ "version": "0.1.35",
4
4
  "description": "Built-in skill definitions for Zibby test automation framework",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
7
8
  "exports": {
8
- ".": "./dist/index.js",
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ },
9
13
  "./bin/mcp-sentry.mjs": "./bin/mcp-sentry.mjs",
10
14
  "./bin/mcp-lark.mjs": "./bin/mcp-lark.mjs",
11
15
  "./bin/mcp-slack.mjs": "./bin/mcp-slack.mjs",
12
- "./browser": "./dist/browser.js",
13
- "./jira": "./dist/jira.js",
14
- "./github": "./dist/github.js",
15
- "./plane": "./dist/plane.js",
16
- "./slack": "./dist/slack.js",
17
- "./lark": "./dist/lark.js",
18
- "./memory": "./dist/memory.js",
19
- "./function": "./dist/function-skill.js",
20
- "./integrations": "./dist/integrations.js",
21
- "./report": "./dist/report.js",
22
- "./llm-billing": "./dist/llm-billing.js",
23
- "./sentry": "./dist/sentry.js"
16
+ "./browser": {
17
+ "types": "./dist/browser.d.ts",
18
+ "default": "./dist/browser.js"
19
+ },
20
+ "./jira": {
21
+ "types": "./dist/jira.d.ts",
22
+ "default": "./dist/jira.js"
23
+ },
24
+ "./github": {
25
+ "types": "./dist/github.d.ts",
26
+ "default": "./dist/github.js"
27
+ },
28
+ "./gitlab": {
29
+ "types": "./dist/gitlab.d.ts",
30
+ "default": "./dist/gitlab.js"
31
+ },
32
+ "./linear": {
33
+ "types": "./dist/linear.d.ts",
34
+ "default": "./dist/linear.js"
35
+ },
36
+ "./plane": {
37
+ "types": "./dist/plane.d.ts",
38
+ "default": "./dist/plane.js"
39
+ },
40
+ "./slack": {
41
+ "types": "./dist/slack.d.ts",
42
+ "default": "./dist/slack.js"
43
+ },
44
+ "./lark": {
45
+ "types": "./dist/lark.d.ts",
46
+ "default": "./dist/lark.js"
47
+ },
48
+ "./memory": {
49
+ "types": "./dist/memory.d.ts",
50
+ "default": "./dist/memory.js"
51
+ },
52
+ "./function": {
53
+ "types": "./dist/function-skill.d.ts",
54
+ "default": "./dist/function-skill.js"
55
+ },
56
+ "./integrations": {
57
+ "types": "./dist/integrations.d.ts",
58
+ "default": "./dist/integrations.js"
59
+ },
60
+ "./report": {
61
+ "types": "./dist/report.d.ts",
62
+ "default": "./dist/report.js"
63
+ },
64
+ "./llm-billing": {
65
+ "types": "./dist/llm-billing.d.ts",
66
+ "default": "./dist/llm-billing.js"
67
+ },
68
+ "./sentry": {
69
+ "types": "./dist/sentry.d.ts",
70
+ "default": "./dist/sentry.js"
71
+ }
24
72
  },
25
73
  "scripts": {
26
- "build": "node ../scripts/build.mjs",
74
+ "build": "node ../scripts/build.mjs && npm run build:types",
75
+ "build:types": "tsc -p tsconfig.types.json",
27
76
  "prepack": "node scripts/copy-docs.mjs",
28
77
  "lint": "eslint .",
29
78
  "lint:fix": "eslint --fix ."
@@ -56,8 +105,8 @@
56
105
  "node": ">=18.0.0"
57
106
  },
58
107
  "dependencies": {
59
- "@zibby/agent-workflow": "^0.3.0",
60
108
  "@modelcontextprotocol/sdk": "^1.29.0",
109
+ "@zibby/agent-workflow": "^0.3.0",
61
110
  "better-sqlite3": "^12.6.2",
62
111
  "mem0ai": "npm:@zibby/mem0ai@^3.0.5",
63
112
  "zod": "^3.23.0 || ^4.0.0"
@@ -73,6 +122,7 @@
73
122
  "@eslint/js": "^10.0.1",
74
123
  "esbuild": "^0.28.0",
75
124
  "eslint": "^10.0.2",
76
- "globals": "^17.4.0"
125
+ "globals": "^17.4.0",
126
+ "typescript": "^5.9.3"
77
127
  }
78
128
  }
@@ -0,0 +1,24 @@
1
+ export namespace planeSkill {
2
+ let id: string;
3
+ let serverName: string;
4
+ let allowedTools: string[];
5
+ let requiresIntegration: "plane";
6
+ let envKeys: string[];
7
+ let description: string;
8
+ let tools: any[];
9
+ let promptFragment: string;
10
+ /**
11
+ * Spawn the official Plane MCP server over stdio. Reads the api-key
12
+ * credentials from the env the backend injected (PLANE_API_KEY /
13
+ * PLANE_WORKSPACE_SLUG / PLANE_BASE_URL). PLANE_BASE_URL is optional —
14
+ * omitted means the MCP server defaults to https://api.plane.so
15
+ * (Plane Cloud); set it for self-hosted / Zibby-hosted instances.
16
+ */
17
+ function resolve(): {
18
+ type: string;
19
+ command: string;
20
+ args: string[];
21
+ env: {};
22
+ description: string;
23
+ };
24
+ }