mcp-server-opencode 1.1.5 → 1.3.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/CHANGELOG.md +127 -0
- package/README.md +34 -5
- package/build/src/index.js +32 -15
- package/build/src/index.js.map +1 -1
- package/build/src/modules/shared/execution-report.d.ts +66 -0
- package/build/src/modules/shared/execution-report.d.ts.map +1 -0
- package/build/src/modules/shared/execution-report.js +407 -0
- package/build/src/modules/shared/execution-report.js.map +1 -0
- package/build/src/modules/shared/execution-usage.d.ts +50 -0
- package/build/src/modules/shared/execution-usage.d.ts.map +1 -0
- package/build/src/modules/shared/execution-usage.js +89 -0
- package/build/src/modules/shared/execution-usage.js.map +1 -0
- package/build/src/modules/shared/git-workspace.d.ts +34 -0
- package/build/src/modules/shared/git-workspace.d.ts.map +1 -0
- package/build/src/modules/shared/git-workspace.js +193 -0
- package/build/src/modules/shared/git-workspace.js.map +1 -0
- package/build/src/modules/shared/instructions.d.ts +8 -1
- package/build/src/modules/shared/instructions.d.ts.map +1 -1
- package/build/src/modules/shared/instructions.js +32 -27
- package/build/src/modules/shared/instructions.js.map +1 -1
- package/build/src/modules/shared/message-id.d.ts +3 -0
- package/build/src/modules/shared/message-id.d.ts.map +1 -0
- package/build/src/modules/shared/message-id.js +6 -0
- package/build/src/modules/shared/message-id.js.map +1 -0
- package/build/src/modules/shared/opencode-client.d.ts +42 -4
- package/build/src/modules/shared/opencode-client.d.ts.map +1 -1
- package/build/src/modules/shared/opencode-client.js +214 -38
- package/build/src/modules/shared/opencode-client.js.map +1 -1
- package/build/src/modules/shared/permission-scopes.d.ts +6 -0
- package/build/src/modules/shared/permission-scopes.d.ts.map +1 -0
- package/build/src/modules/shared/permission-scopes.js +60 -0
- package/build/src/modules/shared/permission-scopes.js.map +1 -0
- package/build/src/modules/shared/permissions.d.ts +110 -0
- package/build/src/modules/shared/permissions.d.ts.map +1 -0
- package/build/src/modules/shared/permissions.js +214 -0
- package/build/src/modules/shared/permissions.js.map +1 -0
- package/build/src/modules/shared/prompt-dispatch.d.ts +13 -0
- package/build/src/modules/shared/prompt-dispatch.d.ts.map +1 -0
- package/build/src/modules/shared/prompt-dispatch.js +34 -0
- package/build/src/modules/shared/prompt-dispatch.js.map +1 -0
- package/build/src/modules/shared/run-observer.d.ts +5 -0
- package/build/src/modules/shared/run-observer.d.ts.map +1 -0
- package/build/src/modules/shared/run-observer.js +421 -0
- package/build/src/modules/shared/run-observer.js.map +1 -0
- package/build/src/modules/shared/server-registry.d.ts +4 -0
- package/build/src/modules/shared/server-registry.d.ts.map +1 -1
- package/build/src/modules/shared/server-registry.js.map +1 -1
- package/build/src/modules/shared/task-registry.d.ts +75 -0
- package/build/src/modules/shared/task-registry.d.ts.map +1 -1
- package/build/src/modules/shared/task-registry.js +85 -0
- package/build/src/modules/shared/task-registry.js.map +1 -1
- package/build/src/modules/shared/usage-limits.d.ts +70 -0
- package/build/src/modules/shared/usage-limits.d.ts.map +1 -0
- package/build/src/modules/shared/usage-limits.js +296 -0
- package/build/src/modules/shared/usage-limits.js.map +1 -0
- package/build/src/modules/shared/workspace-manager.d.ts +25 -0
- package/build/src/modules/shared/workspace-manager.d.ts.map +1 -0
- package/build/src/modules/shared/workspace-manager.js +105 -0
- package/build/src/modules/shared/workspace-manager.js.map +1 -0
- package/build/src/modules/tools/cancel_task.d.ts.map +1 -1
- package/build/src/modules/tools/cancel_task.js +30 -1
- package/build/src/modules/tools/cancel_task.js.map +1 -1
- package/build/src/modules/tools/cleanup_workspace.d.ts +3 -0
- package/build/src/modules/tools/cleanup_workspace.d.ts.map +1 -0
- package/build/src/modules/tools/cleanup_workspace.js +82 -0
- package/build/src/modules/tools/cleanup_workspace.js.map +1 -0
- package/build/src/modules/tools/continue_task.d.ts.map +1 -1
- package/build/src/modules/tools/continue_task.js +116 -6
- package/build/src/modules/tools/continue_task.js.map +1 -1
- package/build/src/modules/tools/get_task_result.d.ts.map +1 -1
- package/build/src/modules/tools/get_task_result.js +125 -22
- package/build/src/modules/tools/get_task_result.js.map +1 -1
- package/build/src/modules/tools/get_task_status.d.ts.map +1 -1
- package/build/src/modules/tools/get_task_status.js +69 -6
- package/build/src/modules/tools/get_task_status.js.map +1 -1
- package/build/src/modules/tools/index.d.ts.map +1 -1
- package/build/src/modules/tools/index.js +2 -0
- package/build/src/modules/tools/index.js.map +1 -1
- package/build/src/modules/tools/list_agents.d.ts.map +1 -1
- package/build/src/modules/tools/list_agents.js +48 -7
- package/build/src/modules/tools/list_agents.js.map +1 -1
- package/build/src/modules/tools/start_server.d.ts.map +1 -1
- package/build/src/modules/tools/start_server.js +21 -1
- package/build/src/modules/tools/start_server.js.map +1 -1
- package/build/src/modules/tools/start_task.d.ts.map +1 -1
- package/build/src/modules/tools/start_task.js +218 -13
- package/build/src/modules/tools/start_task.js.map +1 -1
- package/build/src/modules/tools/stop_server.d.ts.map +1 -1
- package/build/src/modules/tools/stop_server.js +17 -0
- package/build/src/modules/tools/stop_server.js.map +1 -1
- package/build/src/modules/tools/wait_for_task.d.ts.map +1 -1
- package/build/src/modules/tools/wait_for_task.js +110 -24
- package/build/src/modules/tools/wait_for_task.js.map +1 -1
- package/package.json +4 -2
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { getMaxToolTimeoutMs } from "../shared/config.js";
|
|
3
3
|
import { jsonError, jsonResult } from "../shared/mcp-result.js";
|
|
4
|
-
import { clientForTask, deriveTaskStatus, } from "../shared/opencode-client.js";
|
|
4
|
+
import { clientForTask, deriveTaskStatus, isTerminalTaskStatus, } from "../shared/opencode-client.js";
|
|
5
|
+
import { getTask } from "../shared/task-registry.js";
|
|
5
6
|
const DEFAULT_TIMEOUT_MS = 120_000;
|
|
6
7
|
const DEFAULT_POLL_INTERVAL_MS = 2_500;
|
|
7
8
|
const MIN_POLL_INTERVAL_MS = 500;
|
|
8
|
-
const FINISHED_STATUSES = new Set(["completed", "failed", "error"]);
|
|
9
9
|
function isFinished(result) {
|
|
10
|
-
return result !== undefined &&
|
|
10
|
+
return result !== undefined && isTerminalTaskStatus(result.status);
|
|
11
11
|
}
|
|
12
12
|
function sleep(ms) {
|
|
13
13
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
@@ -18,7 +18,7 @@ function sleep(ms) {
|
|
|
18
18
|
* poll loop. Failures are swallowed per-task so one bad re-derivation doesn't
|
|
19
19
|
* fail the whole call.
|
|
20
20
|
*/
|
|
21
|
-
async function enrichUnfinishedWithProgress(tasks, taskData) {
|
|
21
|
+
async function enrichUnfinishedWithProgress(tasks, taskData, deadline) {
|
|
22
22
|
const clientByTaskId = new Map(taskData.map((entry) => [entry.task_id, entry.client]));
|
|
23
23
|
return Promise.all(tasks.map(async (task) => {
|
|
24
24
|
if (isFinished(task))
|
|
@@ -26,19 +26,43 @@ async function enrichUnfinishedWithProgress(tasks, taskData) {
|
|
|
26
26
|
// Every task_id in `tasks` was resolved into taskData before polling started.
|
|
27
27
|
// biome-ignore lint/style/noNonNullAssertion: guaranteed present, see comment above
|
|
28
28
|
const client = clientByTaskId.get(task.task_id);
|
|
29
|
+
const remaining = deadline - Date.now();
|
|
30
|
+
if (remaining <= 0)
|
|
31
|
+
return task;
|
|
32
|
+
const controller = new AbortController();
|
|
29
33
|
try {
|
|
30
|
-
return await deriveTaskStatus(client.client, client.sessionId, task.task_id, {
|
|
34
|
+
return await pollUntilDeadline(deriveTaskStatus(client.client, client.sessionId, task.task_id, {
|
|
31
35
|
includeProgress: true,
|
|
32
|
-
|
|
36
|
+
includeUsage: true,
|
|
37
|
+
signal: controller.signal,
|
|
38
|
+
}), remaining, () => controller.abort(new Error("wait deadline exceeded")));
|
|
33
39
|
}
|
|
34
40
|
catch {
|
|
35
41
|
return task;
|
|
36
42
|
}
|
|
37
43
|
}));
|
|
38
44
|
}
|
|
45
|
+
async function pollUntilDeadline(operation, remainingMs, onTimeout) {
|
|
46
|
+
let timer;
|
|
47
|
+
try {
|
|
48
|
+
return await Promise.race([
|
|
49
|
+
operation,
|
|
50
|
+
new Promise((_, reject) => {
|
|
51
|
+
timer = setTimeout(() => {
|
|
52
|
+
onTimeout();
|
|
53
|
+
reject(new Error("status poll deadline exceeded"));
|
|
54
|
+
}, remainingMs);
|
|
55
|
+
timer.unref?.();
|
|
56
|
+
}),
|
|
57
|
+
]);
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
clearTimeout(timer);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
39
63
|
export function registerOpencodeWaitForTask(server) {
|
|
40
64
|
server.registerTool("opencode_wait_for_task", {
|
|
41
|
-
description: "Long-poll one or more delegated tasks until they finish or the timeout elapses. Use mode 'all' to wait for all tasks, or 'any' to return as soon as one completes. Set include_progress to enrich still-running tasks
|
|
65
|
+
description: "Long-poll one or more delegated tasks until they finish or the timeout elapses. Use mode 'all' to wait for all tasks, or 'any' to return as soon as one completes. Set include_progress to best-effort enrich still-running tasks within the same wait deadline; when time runs out, return the last observed status and progress.",
|
|
42
66
|
inputSchema: {
|
|
43
67
|
task_ids: z.string().array().min(1).describe("IDs of tasks to wait for"),
|
|
44
68
|
mode: z
|
|
@@ -53,18 +77,25 @@ export function registerOpencodeWaitForTask(server) {
|
|
|
53
77
|
.number()
|
|
54
78
|
.optional()
|
|
55
79
|
.describe(`Time between status checks in milliseconds (default ${DEFAULT_POLL_INTERVAL_MS})`),
|
|
80
|
+
until: z
|
|
81
|
+
.enum(["execution", "report"])
|
|
82
|
+
.optional()
|
|
83
|
+
.describe("Wait for execution (default) or finalized execution report"),
|
|
56
84
|
include_progress: z
|
|
57
85
|
.boolean()
|
|
58
86
|
.optional()
|
|
59
|
-
.describe("If true, enrich tasks
|
|
87
|
+
.describe("If true, best-effort enrich unfinished tasks with a partial output snippet and the currently running tool, without extending the wait deadline"),
|
|
60
88
|
},
|
|
61
|
-
}, async ({ task_ids, mode = "all", timeout_ms, poll_interval_ms, include_progress }) => {
|
|
89
|
+
}, async ({ task_ids, mode = "all", timeout_ms, poll_interval_ms, include_progress, until = "execution", }) => {
|
|
62
90
|
// Fail-fast: check for unknown task IDs before polling starts
|
|
63
91
|
const unknownIds = [];
|
|
64
92
|
const taskData = [];
|
|
65
93
|
for (const taskId of task_ids) {
|
|
66
94
|
const resolved = clientForTask(taskId);
|
|
67
|
-
|
|
95
|
+
const tracked = getTask(taskId);
|
|
96
|
+
const cached = tracked?.runs?.find((run) => run.run_id === tracked.currentRunId);
|
|
97
|
+
if ((!tracked && !resolved) ||
|
|
98
|
+
(!resolved && until === "execution" && !cached?.reportReady)) {
|
|
68
99
|
unknownIds.push(taskId);
|
|
69
100
|
}
|
|
70
101
|
else {
|
|
@@ -81,40 +112,95 @@ export function registerOpencodeWaitForTask(server) {
|
|
|
81
112
|
while (true) {
|
|
82
113
|
// Poll all tasks that are not yet finished
|
|
83
114
|
for (const { task_id, client } of taskData) {
|
|
115
|
+
const currentRun = getTask(task_id)?.runs?.find((run) => run.run_id === getTask(task_id)?.currentRunId);
|
|
116
|
+
if (currentRun?.reportReady) {
|
|
117
|
+
const cachedStatus = currentRun.result?.status ?? currentRun.executionState ?? "error";
|
|
118
|
+
statusMap.set(task_id, cachedStatus === "error"
|
|
119
|
+
? {
|
|
120
|
+
task_id,
|
|
121
|
+
status: "error",
|
|
122
|
+
error: currentRun.result?.error ?? "execution report unavailable",
|
|
123
|
+
}
|
|
124
|
+
: { task_id, status: cachedStatus });
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
84
127
|
if (isFinished(statusMap.get(task_id)))
|
|
85
128
|
continue;
|
|
129
|
+
if (!client) {
|
|
130
|
+
statusMap.set(task_id, { task_id, status: "running" });
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
86
133
|
try {
|
|
87
|
-
const
|
|
134
|
+
const remaining = Math.max(1, deadline - Date.now());
|
|
135
|
+
const controller = new AbortController();
|
|
136
|
+
const result = await pollUntilDeadline(deriveTaskStatus(client.client, client.sessionId, task_id, {
|
|
137
|
+
includeUsage: true,
|
|
138
|
+
signal: controller.signal,
|
|
139
|
+
}), remaining, () => controller.abort(new Error("wait deadline exceeded")));
|
|
88
140
|
statusMap.set(task_id, result);
|
|
89
141
|
}
|
|
90
142
|
catch (error) {
|
|
91
|
-
//
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
status: "
|
|
95
|
-
|
|
96
|
-
|
|
143
|
+
// The overall deadline returns the last known live status rather than
|
|
144
|
+
// converting a slow read into a completed per-task error.
|
|
145
|
+
statusMap.set(task_id, Date.now() >= deadline
|
|
146
|
+
? (statusMap.get(task_id) ?? { task_id, status: "running" })
|
|
147
|
+
: {
|
|
148
|
+
task_id,
|
|
149
|
+
status: "error",
|
|
150
|
+
error: error instanceof Error ? error.message : String(error),
|
|
151
|
+
usage: {
|
|
152
|
+
captured_at: new Date().toISOString(),
|
|
153
|
+
snapshot_kind: "live_observation",
|
|
154
|
+
report: null,
|
|
155
|
+
diagnostic: `usage unavailable: ${error instanceof Error ? error.message : String(error)}`,
|
|
156
|
+
},
|
|
157
|
+
});
|
|
97
158
|
}
|
|
98
159
|
}
|
|
99
160
|
// biome-ignore lint/style/noNonNullAssertion: every task_id was just written to statusMap above
|
|
100
161
|
const tasks = task_ids.map((id) => statusMap.get(id));
|
|
101
|
-
|
|
102
|
-
|
|
162
|
+
const done = (task) => until === "report"
|
|
163
|
+
? Boolean(getTask(task.task_id)?.runs?.find((run) => run.run_id === getTask(task.task_id)?.currentRunId)?.reportReady)
|
|
164
|
+
: isFinished(task);
|
|
165
|
+
if (mode === "all" && tasks.every(done)) {
|
|
166
|
+
return jsonResult({ mode, tasks: addReports(tasks), timed_out: false });
|
|
103
167
|
}
|
|
104
|
-
if (mode === "any" && tasks.some(
|
|
168
|
+
if (mode === "any" && tasks.some(done)) {
|
|
105
169
|
const enriched = include_progress
|
|
106
|
-
? await enrichUnfinishedWithProgress(tasks, taskData)
|
|
170
|
+
? await enrichUnfinishedWithProgress(tasks, taskData.filter((item) => Boolean(item.client)), deadline)
|
|
107
171
|
: tasks;
|
|
108
|
-
return jsonResult({ mode, tasks: enriched, timed_out: false });
|
|
172
|
+
return jsonResult({ mode, tasks: addReports(enriched), timed_out: false });
|
|
109
173
|
}
|
|
110
174
|
if (Date.now() >= deadline) {
|
|
111
175
|
const enriched = include_progress
|
|
112
|
-
? await enrichUnfinishedWithProgress(tasks, taskData)
|
|
176
|
+
? await enrichUnfinishedWithProgress(tasks, taskData.filter((item) => Boolean(item.client)), deadline)
|
|
113
177
|
: tasks;
|
|
114
|
-
return jsonResult({ mode, tasks: enriched, timed_out: true });
|
|
178
|
+
return jsonResult({ mode, tasks: addReports(enriched), timed_out: true });
|
|
115
179
|
}
|
|
116
180
|
await sleep(pollInterval);
|
|
117
181
|
}
|
|
118
182
|
});
|
|
119
183
|
}
|
|
184
|
+
function addReports(tasks) {
|
|
185
|
+
return tasks.map((result) => {
|
|
186
|
+
const task = getTask(result.task_id);
|
|
187
|
+
const run = task?.runs?.find((item) => item.run_id === task.currentRunId);
|
|
188
|
+
if (!run)
|
|
189
|
+
return result;
|
|
190
|
+
return {
|
|
191
|
+
...result,
|
|
192
|
+
...(run.reportReady && run.executionState ? { status: run.executionState } : {}),
|
|
193
|
+
run_id: run.run_id,
|
|
194
|
+
changes: run.report?.changes ?? [],
|
|
195
|
+
verification: run.report?.verification ?? { state: "pending", checks: [] },
|
|
196
|
+
diagnostics: run.report?.diagnostics ?? [],
|
|
197
|
+
evidence: run.report?.evidence,
|
|
198
|
+
...(run.usage ? { usage: run.usage } : {}),
|
|
199
|
+
...(task?.workspace ? { workspace: task.workspace } : {}),
|
|
200
|
+
...(run.dispatchState === "uncertain"
|
|
201
|
+
? { dispatch: { state: run.dispatchState, error: run.dispatchError } }
|
|
202
|
+
: {}),
|
|
203
|
+
};
|
|
204
|
+
});
|
|
205
|
+
}
|
|
120
206
|
//# sourceMappingURL=wait_for_task.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wait_for_task.js","sourceRoot":"","sources":["../../../../src/modules/tools/wait_for_task.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"wait_for_task.js","sourceRoot":"","sources":["../../../../src/modules/tools/wait_for_task.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mcp-server-opencode",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "MCP server that lets any MCP host (Claude Code, Codex CLI, Cursor, etc.) drive OpenCode and delegate tasks asynchronously to its agents",
|
|
5
5
|
"main": "./build/src/index.js",
|
|
6
6
|
"types": "./build/src/index.d.ts",
|
|
@@ -42,12 +42,14 @@
|
|
|
42
42
|
"lint:format": "biome format --write .",
|
|
43
43
|
"test": "vitest run",
|
|
44
44
|
"test:coverage": "vitest run --coverage",
|
|
45
|
+
"smoke": "pnpm build && node --experimental-strip-types scripts/smoke.ts",
|
|
45
46
|
"build": "rm -rf build && npx tsc && chmod +x build/src/index.js",
|
|
46
47
|
"prepare": "npm run build",
|
|
47
48
|
"publish": "npm publish --access public"
|
|
48
49
|
},
|
|
49
50
|
"files": [
|
|
50
|
-
"build"
|
|
51
|
+
"build",
|
|
52
|
+
"CHANGELOG.md"
|
|
51
53
|
],
|
|
52
54
|
"dependencies": {
|
|
53
55
|
"@modelcontextprotocol/sdk": "^1.29.0",
|