@alevental/cccp 0.4.3 → 0.5.1

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.
@@ -1,21 +1,30 @@
1
1
  import { openDatabase } from "../db.js";
2
- import { discoverRuns, loadState, saveState } from "../state.js";
2
+ import { writeFeedbackArtifact } from "../gate/feedback-artifact.js";
3
+ import { discoverRuns, loadState, saveState, setStageArtifact } from "../state.js";
3
4
  // ---------------------------------------------------------------------------
4
- // Gate notifier — polls for pending gates and elicits approval via MCP
5
+ // Gate notifier — polls for pending gates and notifies via MCP
6
+ //
7
+ // Notification tiers (tried in order):
8
+ // 1. Channel notification (push-based, experimental)
9
+ // 2. Elicitation form (interactive, may not be supported)
10
+ // 3. Fallback: user discovers via cccp_status / cccp_gate_respond tools
5
11
  // ---------------------------------------------------------------------------
6
12
  const DEFAULT_POLL_MS = 2000;
7
13
  /**
8
14
  * Watches for pending human gates across all pipeline runs and sends
9
- * MCP elicitation requests to the connected Claude Code session.
15
+ * MCP notifications to the connected Claude Code session.
16
+ *
17
+ * Uses channels as primary notification (push), with elicitation as fallback.
10
18
  *
11
19
  * Lifecycle: call `start()` after the MCP server connects, `stop()` on shutdown.
12
20
  */
13
21
  export class GateNotifier {
14
22
  opts;
15
23
  seenGates = new Set();
24
+ channelSupported = null; // null = not yet tested
16
25
  elicitationSupported = true;
17
26
  intervalId = null;
18
- pendingElicitation = null;
27
+ pendingNotification = null;
19
28
  constructor(opts) {
20
29
  this.opts = opts;
21
30
  }
@@ -35,9 +44,10 @@ export class GateNotifier {
35
44
  // Poll loop
36
45
  // -------------------------------------------------------------------------
37
46
  async poll() {
38
- if (!this.elicitationSupported)
47
+ // If both notification mechanisms are disabled, stop polling.
48
+ if (this.channelSupported === false && !this.elicitationSupported)
39
49
  return;
40
- if (this.pendingElicitation)
50
+ if (this.pendingNotification)
41
51
  return; // one at a time
42
52
  try {
43
53
  const db = await openDatabase(this.opts.projectDir);
@@ -51,17 +61,23 @@ export class GateNotifier {
51
61
  this.seenGates.delete(key);
52
62
  }
53
63
  }
54
- // Find new pending gates.
64
+ // Find new pending gates (filtered by session affinity).
55
65
  for (const run of runs) {
56
66
  const gate = run.state.gate;
57
67
  if (!gate || gate.status !== "pending")
58
68
  continue;
69
+ // Session affinity: skip gates belonging to other MCP sessions.
70
+ if (this.opts.sessionId &&
71
+ run.state.sessionId &&
72
+ run.state.sessionId !== this.opts.sessionId) {
73
+ continue;
74
+ }
59
75
  const key = this.gateKey(run.state.runId, gate.stageName);
60
76
  if (this.seenGates.has(key))
61
77
  continue;
62
- // Mark as seen immediately to avoid duplicate elicitations.
78
+ // Mark as seen immediately to avoid duplicate notifications.
63
79
  this.seenGates.add(key);
64
- this.pendingElicitation = this.elicitGateApproval(run);
80
+ this.pendingNotification = this.notifyGate(run);
65
81
  // Only process one gate per poll cycle.
66
82
  return;
67
83
  }
@@ -71,75 +87,141 @@ export class GateNotifier {
71
87
  }
72
88
  }
73
89
  // -------------------------------------------------------------------------
74
- // Elicitation
90
+ // Notification dispatch (channel → elicitation → silent fallback)
75
91
  // -------------------------------------------------------------------------
76
- async elicitGateApproval(run) {
92
+ async notifyGate(run) {
93
+ const gate = run.state.gate;
94
+ const gateKey = this.gateKey(run.state.runId, gate.stageName);
95
+ try {
96
+ // Tier 1: Try channel notification (non-blocking push).
97
+ if (this.channelSupported !== false) {
98
+ const sent = await this.sendChannelNotification(run);
99
+ if (sent)
100
+ return; // Channel delivered — no need for elicitation.
101
+ }
102
+ // Tier 2: Fall back to elicitation (blocking form).
103
+ if (this.elicitationSupported) {
104
+ await this.elicitGateApproval(run);
105
+ return;
106
+ }
107
+ // Tier 3: Both unavailable. User will discover via cccp_status / cccp_gate_respond.
108
+ }
109
+ catch {
110
+ // Transient error — remove from seen so it can retry.
111
+ this.seenGates.delete(gateKey);
112
+ }
113
+ finally {
114
+ this.pendingNotification = null;
115
+ }
116
+ }
117
+ // -------------------------------------------------------------------------
118
+ // Tier 1: Channel notification
119
+ // -------------------------------------------------------------------------
120
+ async sendChannelNotification(run) {
77
121
  const gate = run.state.gate;
78
122
  const runShort = run.state.runId.slice(0, 8);
79
123
  try {
80
- // Elicit approval from the user this blocks until they respond.
81
- let result;
82
- try {
83
- result = await this.opts.server.server.elicitInput({
84
- message: [
85
- `Pipeline gate requires approval (run ${runShort}).`,
86
- "",
87
- `Stage: ${gate.stageName}`,
124
+ // Channel notifications use an experimental protocol method.
125
+ // The SDK types don't include this notification type, so we cast through unknown.
126
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
127
+ const notificationFn = this.opts.server.server.notification;
128
+ if (!notificationFn) {
129
+ this.channelSupported = false;
130
+ return false;
131
+ }
132
+ await notificationFn.call(this.opts.server.server, {
133
+ method: "notifications/claude/channel",
134
+ params: {
135
+ content: [
136
+ `Pipeline gate "${gate.stageName}" requires your review (run ${runShort}).`,
88
137
  gate.prompt ? `\n${gate.prompt}` : "",
138
+ `\nUse cccp_gate_review to see full context, discuss with the user, then respond via cccp_gate_respond.`,
89
139
  ]
90
140
  .filter(Boolean)
91
141
  .join("\n"),
92
- requestedSchema: {
93
- type: "object",
94
- properties: {
95
- decision: {
96
- type: "string",
97
- title: "Decision",
98
- description: "Approve or reject this gate",
99
- enum: ["approve", "reject"],
100
- default: "approve",
101
- },
102
- feedback: {
103
- type: "string",
104
- title: "Feedback",
105
- description: "Optional feedback (passed to generator on rejection)",
106
- },
107
- },
108
- required: ["decision"],
142
+ meta: {
143
+ severity: "high",
144
+ type: "gate_pending",
145
+ run_id: runShort,
146
+ stage: gate.stageName,
109
147
  },
110
- });
111
- }
112
- catch {
113
- // Elicitation not supported by this client — disable for the session.
114
- this.elicitationSupported = false;
115
- return;
116
- }
117
- // Handle the elicitation result.
118
- if (result.action === "cancel") {
119
- // User dismissed — remove from seen so it can be re-prompted.
120
- this.seenGates.delete(this.gateKey(run.state.runId, gate.stageName));
121
- return;
148
+ },
149
+ });
150
+ if (this.channelSupported === null) {
151
+ this.channelSupported = true;
122
152
  }
123
- if (result.action === "decline") {
124
- // User explicitly declined — write rejection.
125
- await this.writeGateResponse(run, false);
126
- return;
127
- }
128
- // action === "accept" — check the form content.
129
- const decision = result.content?.decision;
130
- const feedback = result.content?.feedback;
131
- const approved = decision !== "reject";
132
- await this.writeGateResponse(run, approved, feedback);
153
+ return true;
133
154
  }
134
155
  catch {
135
- // DB write errortransient, don't disable elicitation.
136
- // Remove from seen so it can be retried on the next poll cycle.
156
+ // Channel not supporteddisable and fall through to elicitation.
157
+ this.channelSupported = false;
158
+ return false;
159
+ }
160
+ }
161
+ // -------------------------------------------------------------------------
162
+ // Tier 2: Elicitation form
163
+ // -------------------------------------------------------------------------
164
+ async elicitGateApproval(run) {
165
+ const gate = run.state.gate;
166
+ const runShort = run.state.runId.slice(0, 8);
167
+ let result;
168
+ try {
169
+ result = await this.opts.server.server.elicitInput({
170
+ message: [
171
+ `Pipeline gate requires approval (run ${runShort}).`,
172
+ "",
173
+ `Stage: ${gate.stageName}`,
174
+ gate.prompt ? `\n${gate.prompt}` : "",
175
+ "",
176
+ `Reject with feedback to retry the generation cycle with your guidance.`,
177
+ ]
178
+ .filter(Boolean)
179
+ .join("\n"),
180
+ requestedSchema: {
181
+ type: "object",
182
+ properties: {
183
+ decision: {
184
+ type: "string",
185
+ title: "Decision",
186
+ description: "Approve or reject this gate",
187
+ enum: ["approve", "reject"],
188
+ default: "approve",
189
+ },
190
+ feedback: {
191
+ type: "string",
192
+ title: "Feedback",
193
+ description: "Optional feedback (on rejection, triggers retry with your feedback)",
194
+ },
195
+ },
196
+ required: ["decision"],
197
+ },
198
+ });
199
+ }
200
+ catch {
201
+ // Elicitation not supported by this client — disable for the session.
202
+ this.elicitationSupported = false;
203
+ return;
204
+ }
205
+ // Handle the elicitation result.
206
+ if (result.action === "cancel") {
207
+ // User dismissed — remove from seen so it can be re-prompted.
137
208
  this.seenGates.delete(this.gateKey(run.state.runId, gate.stageName));
209
+ return;
138
210
  }
139
- finally {
140
- this.pendingElicitation = null;
211
+ if (result.action === "decline") {
212
+ // User explicitly declined — write rejection.
213
+ await this.writeGateResponse(run, false);
214
+ return;
141
215
  }
216
+ // action === "accept" — check the form content.
217
+ const decision = result.content?.decision;
218
+ const feedback = result.content?.feedback;
219
+ const approved = decision !== "reject";
220
+ await this.writeGateResponse(run, approved, feedback);
142
221
  }
222
+ // -------------------------------------------------------------------------
223
+ // State writes
224
+ // -------------------------------------------------------------------------
143
225
  async writeGateResponse(run, approved, feedback) {
144
226
  // Reload state to ensure we have the latest (gate may have been resolved externally).
145
227
  const freshState = await loadState(run.state.runId, this.opts.projectDir, true);
@@ -149,6 +231,12 @@ export class GateNotifier {
149
231
  freshState.gate.status = approved ? "approved" : "rejected";
150
232
  freshState.gate.feedback = feedback;
151
233
  freshState.gate.respondedAt = new Date().toISOString();
234
+ // Write feedback as a numbered artifact file.
235
+ if (feedback) {
236
+ const feedbackPath = await writeFeedbackArtifact(run.artifactDir, freshState.gate.stageName, feedback, approved);
237
+ freshState.gate.feedbackPath = feedbackPath;
238
+ setStageArtifact(freshState, freshState.gate.stageName, "gate-feedback", feedbackPath);
239
+ }
152
240
  await saveState(freshState);
153
241
  }
154
242
  // -------------------------------------------------------------------------
@@ -1 +1 @@
1
- {"version":3,"file":"gate-notifier.js","sourceRoot":"","sources":["../../src/mcp/gate-notifier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gate-notifier.js","sourceRoot":"","sources":["../../src/mcp/gate-notifier.ts"],"names":[],"mappings":"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"}
@@ -3,9 +3,11 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
3
3
  import { z } from "zod";
4
4
  import { readFile, readdir } from "node:fs/promises";
5
5
  import { resolve } from "node:path";
6
+ import { randomUUID } from "node:crypto";
6
7
  import { openDatabase } from "../db.js";
8
+ import { writeFeedbackArtifact } from "../gate/feedback-artifact.js";
7
9
  import { GateNotifier } from "./gate-notifier.js";
8
- import { saveState, discoverRuns } from "../state.js";
10
+ import { saveState, setStageArtifact, discoverRuns } from "../state.js";
9
11
  // ---------------------------------------------------------------------------
10
12
  // Run resolution
11
13
  // ---------------------------------------------------------------------------
@@ -105,10 +107,22 @@ function textResult(text) {
105
107
  // MCP server
106
108
  // ---------------------------------------------------------------------------
107
109
  export async function startMcpServer() {
110
+ // Generate a unique session ID for this MCP server instance.
111
+ // Used for gate notification routing — only gates from runs started
112
+ // with this session ID (via --session-id on cccp run) will trigger
113
+ // notifications in this session.
114
+ const sessionId = randomUUID();
115
+ const projectDir = process.cwd();
108
116
  const server = new McpServer({
109
117
  name: "cccp",
110
118
  version: "0.1.0",
119
+ }, {
120
+ capabilities: {
121
+ experimental: { "claude/channel": {} },
122
+ },
111
123
  });
124
+ // --- cccp_session_id ---
125
+ server.tool("cccp_session_id", "Get this MCP server's session ID. Pass this as --session-id when running pipelines so gate notifications route to this session.", {}, async () => textResult(sessionId));
112
126
  // --- cccp_runs ---
113
127
  server.tool("cccp_runs", "List all pipeline runs (active and completed). Shows run ID, pipeline name, project, status, and any pending gates.", {}, async () => {
114
128
  const runs = await discoverRuns(process.cwd());
@@ -130,7 +144,7 @@ export async function startMcpServer() {
130
144
  return textResult(formatStatus(result.run.state));
131
145
  });
132
146
  // --- cccp_gate_respond ---
133
- server.tool("cccp_gate_respond", "Approve or reject a pending human gate. Use cccp_runs or cccp_status first to see pending gates.", {
147
+ server.tool("cccp_gate_respond", "Approve or reject a pending human gate. Use cccp_runs or cccp_status first to see pending gates. On rejection with feedback, the feedback is written as a numbered markdown artifact and passed to the generator for retry.", {
134
148
  run_id: z
135
149
  .string()
136
150
  .optional()
@@ -141,8 +155,12 @@ export async function startMcpServer() {
141
155
  feedback: z
142
156
  .string()
143
157
  .optional()
144
- .describe("Optional feedback. On rejection, passed to the generator for retry."),
145
- }, async ({ run_id, approved, feedback }) => {
158
+ .describe("Optional feedback (markdown). Written as an artifact and passed to the generator on retry."),
159
+ feedback_file: z
160
+ .string()
161
+ .optional()
162
+ .describe("Path to a markdown file with detailed feedback. Takes precedence over inline feedback."),
163
+ }, async ({ run_id, approved, feedback, feedback_file }) => {
146
164
  const result = await resolveRun(run_id);
147
165
  if ("error" in result)
148
166
  return textResult(result.error);
@@ -150,12 +168,31 @@ export async function startMcpServer() {
150
168
  if (!state.gate || state.gate.status !== "pending") {
151
169
  return textResult("No pending gate on this run.");
152
170
  }
171
+ // Resolve feedback content: feedback_file takes precedence.
172
+ let feedbackContent = feedback;
173
+ if (feedback_file) {
174
+ try {
175
+ feedbackContent = await readFile(resolve(feedback_file), "utf-8");
176
+ }
177
+ catch (err) {
178
+ return textResult(`Could not read feedback file: ${err instanceof Error ? err.message : String(err)}`);
179
+ }
180
+ }
153
181
  state.gate.status = approved ? "approved" : "rejected";
154
- state.gate.feedback = feedback;
182
+ state.gate.feedback = feedbackContent;
155
183
  state.gate.respondedAt = new Date().toISOString();
184
+ // Write feedback as a numbered artifact file.
185
+ if (feedbackContent) {
186
+ const feedbackPath = await writeFeedbackArtifact(artifactDir, state.gate.stageName, feedbackContent, approved);
187
+ state.gate.feedbackPath = feedbackPath;
188
+ setStageArtifact(state, state.gate.stageName, `gate-feedback`, feedbackPath);
189
+ }
156
190
  await saveState(state);
157
191
  const action = approved ? "approved" : "rejected";
158
- return textResult(`Gate "${state.gate.stageName}" ${action}.${feedback ? ` Feedback: ${feedback}` : ""}`);
192
+ const feedbackNote = state.gate.feedbackPath
193
+ ? ` Feedback artifact: ${state.gate.feedbackPath}`
194
+ : feedbackContent ? ` Feedback: ${feedbackContent}` : "";
195
+ return textResult(`Gate "${state.gate.stageName}" ${action}.${feedbackNote}`);
159
196
  });
160
197
  // --- cccp_logs ---
161
198
  server.tool("cccp_logs", "View recent agent activity logs for a pipeline run.", {
@@ -249,13 +286,103 @@ export async function startMcpServer() {
249
286
  return textResult(`Could not read artifact at ${match.path}: ${err instanceof Error ? err.message : String(err)}`);
250
287
  }
251
288
  });
289
+ // --- cccp_gate_review ---
290
+ server.tool("cccp_gate_review", "Get comprehensive gate review context: pending gate info, stage artifacts, evaluation history, and contract. Use this before responding to a gate to have an informed discussion with the user.", {
291
+ run_id: z
292
+ .string()
293
+ .optional()
294
+ .describe("Run ID prefix (8+ chars). Omit if only one run exists."),
295
+ }, async ({ run_id }) => {
296
+ const result = await resolveRun(run_id);
297
+ if ("error" in result)
298
+ return textResult(result.error);
299
+ const { state, artifactDir } = result.run;
300
+ if (!state.gate || state.gate.status !== "pending") {
301
+ return textResult("No pending gate on this run.");
302
+ }
303
+ const gate = state.gate;
304
+ const stageName = gate.stageName;
305
+ const stageState = state.stages[stageName];
306
+ const lines = [
307
+ `# Gate Review: ${stageName}`,
308
+ "",
309
+ `**Run**: ${state.runId.slice(0, 8)} (${state.pipeline})`,
310
+ `**Stage**: ${stageName} (type: ${stageState?.type ?? "unknown"})`,
311
+ `**Prompt**: ${gate.prompt ?? "(none)"}`,
312
+ "",
313
+ ];
314
+ // Stage artifacts
315
+ if (stageState?.artifacts && Object.keys(stageState.artifacts).length > 0) {
316
+ lines.push("## Artifacts", "");
317
+ for (const [key, path] of Object.entries(stageState.artifacts)) {
318
+ lines.push(`- **${key}**: ${path}`);
319
+ }
320
+ lines.push("");
321
+ }
322
+ // Read key artifacts inline for context
323
+ const inlineArtifacts = ["contract", "deliverable", "task-plan"];
324
+ for (const key of inlineArtifacts) {
325
+ const path = stageState?.artifacts?.[key];
326
+ if (!path)
327
+ continue;
328
+ try {
329
+ const content = await readFile(path, "utf-8");
330
+ const truncated = content.length > 2000
331
+ ? content.slice(0, 2000) + "\n\n... (truncated, use cccp_artifacts to read full content)"
332
+ : content;
333
+ lines.push(`## ${key}`, "", "```", truncated, "```", "");
334
+ }
335
+ catch {
336
+ // File may not exist or be unreadable
337
+ }
338
+ }
339
+ // Latest evaluation
340
+ if (stageState?.artifacts) {
341
+ const evalKeys = Object.keys(stageState.artifacts)
342
+ .filter((k) => k.startsWith("evaluation-"))
343
+ .sort();
344
+ const latestEvalKey = evalKeys[evalKeys.length - 1];
345
+ if (latestEvalKey) {
346
+ const evalPath = stageState.artifacts[latestEvalKey];
347
+ try {
348
+ const evalContent = await readFile(evalPath, "utf-8");
349
+ const truncated = evalContent.length > 2000
350
+ ? evalContent.slice(0, 2000) + "\n\n... (truncated)"
351
+ : evalContent;
352
+ lines.push(`## Latest Evaluation (${latestEvalKey})`, "", "```", truncated, "```", "");
353
+ }
354
+ catch {
355
+ // ignore
356
+ }
357
+ }
358
+ }
359
+ // Iteration info
360
+ if (stageState?.iteration) {
361
+ lines.push(`## Iteration History`, "");
362
+ lines.push(`Current iteration: ${stageState.iteration}`);
363
+ lines.push(`Last step: ${stageState.pgeStep ?? "unknown"}`);
364
+ lines.push("");
365
+ }
366
+ // Pipeline stage overview
367
+ lines.push("## Pipeline Status", "");
368
+ for (const name of state.stageOrder) {
369
+ const s = state.stages[name];
370
+ const icon = s.status === "passed" ? "✓" :
371
+ s.status === "failed" || s.status === "error" ? "✗" :
372
+ s.status === "in_progress" ? "⚙" :
373
+ s.status === "skipped" ? "⏭" : "○";
374
+ lines.push(` ${icon} ${name}: ${s.status}`);
375
+ }
376
+ return textResult(lines.join("\n"));
377
+ });
252
378
  // --- Start server ---
253
379
  const transport = new StdioServerTransport();
254
380
  await server.connect(transport);
255
381
  // --- Start gate notifier ---
256
382
  const notifier = new GateNotifier({
257
383
  server,
258
- projectDir: process.cwd(),
384
+ projectDir,
385
+ sessionId,
259
386
  });
260
387
  notifier.start();
261
388
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/mcp/mcp-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/mcp/mcp-server.ts"],"names":[],"mappings":"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"}
package/dist/pge.d.ts CHANGED
@@ -1,4 +1,13 @@
1
1
  import type { PgeStage, PgeResult, RunContext, PipelineState } from "./types.js";
2
+ /** Options for retrying a PGE cycle with existing artifacts and/or gate feedback. */
3
+ export interface PgeCycleOptions {
4
+ /** Path to gate feedback file from a human reviewer. Injected into generator prompt. */
5
+ gateFeedbackPath?: string;
6
+ /** Reuse an existing contract (skip planner + contract writer). */
7
+ existingContractPath?: string;
8
+ /** Reuse an existing task plan (skip planner). */
9
+ existingTaskPlanPath?: string;
10
+ }
2
11
  /**
3
12
  * Execute a full Plan-Generate-Evaluate cycle for a PGE stage.
4
13
  *
@@ -8,5 +17,17 @@ import type { PgeStage, PgeResult, RunContext, PipelineState } from "./types.js"
8
17
  * 3. Dispatch evaluator agent (evaluation mode) → evaluation-N.md
9
18
  * 4. Parse evaluation (regex on ### Overall: PASS/FAIL)
10
19
  * 5. Route: PASS → done, FAIL + iters left → retry, FAIL + max → escalate
20
+ *
21
+ * When `options.existingContractPath` and `options.existingTaskPlanPath` are set,
22
+ * steps 0 and 1 are skipped (used on gate feedback retry to avoid regenerating
23
+ * the plan and contract).
24
+ */
25
+ export declare function runPgeCycle(stage: PgeStage, ctx: RunContext, state: PipelineState, onProgress?: (eventType?: string, eventData?: Record<string, unknown>) => Promise<void>, options?: PgeCycleOptions): Promise<PgeResult>;
26
+ /**
27
+ * Dispatch the evaluator agent with a human reviewer's feedback file.
28
+ * The evaluator incorporates the feedback into a structured FAIL evaluation
29
+ * that the generator can consume on retry via `previousEvaluation`.
30
+ *
31
+ * Returns the path to the evaluation file.
11
32
  */
12
- export declare function runPgeCycle(stage: PgeStage, ctx: RunContext, state: PipelineState, onProgress?: (eventType?: string, eventData?: Record<string, unknown>) => Promise<void>): Promise<PgeResult>;
33
+ export declare function dispatchEvaluatorWithFeedback(stage: PgeStage, ctx: RunContext, state: PipelineState, pgeResult: PgeResult, feedbackPath: string, onProgress?: (eventType?: string, eventData?: Record<string, unknown>) => Promise<void>): Promise<string>;