@joe-broadhead/opencode-linear 0.0.3 → 0.0.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/CHANGELOG.md +8 -0
- package/assets/icon.svg +1 -0
- package/dist/index.js +19 -8
- package/package.json +4 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and versions follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
4
4
|
|
|
5
|
+
## [0.0.4] - 2026-11-04
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Jelly shows the plugin's one-line summary and icon. The package declares them in its `jelly` section and ships the
|
|
10
|
+
icon as `assets/icon.svg`: a neutral checklist mark, not Linear's logo or colours, because the plugin is
|
|
11
|
+
unofficial.
|
|
12
|
+
|
|
5
13
|
## [0.0.3] - 2026-11-04
|
|
6
14
|
|
|
7
15
|
### Added
|
package/assets/icon.svg
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32"><rect width="32" height="32" rx="7" fill="#4B5563"/><g fill="none" stroke="#FFFFFF" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="M7 10.2l1.9 1.9L12.4 8.4"/><path d="M15.5 10.4h9.5"/><path d="M7 17.2l1.9 1.9 3.5-3.7"/><path d="M15.5 17.4h9.5"/><rect x="7.4" y="22.2" width="4.4" height="4.4" rx="1"/><path d="M15.5 24.4h9.5"/></g></svg>
|
package/dist/index.js
CHANGED
|
@@ -180,6 +180,7 @@ var DESCRIBED = object(
|
|
|
180
180
|
description: STRING,
|
|
181
181
|
available: { type: "boolean" },
|
|
182
182
|
reason: STRING,
|
|
183
|
+
detail: STRING,
|
|
183
184
|
input: ANY_OBJECT,
|
|
184
185
|
output: ANY_OBJECT
|
|
185
186
|
},
|
|
@@ -313,12 +314,15 @@ async function registerToolsRpc(ctx, options) {
|
|
|
313
314
|
const rules = [...agent.data.permissions, ...info.permissions ?? []];
|
|
314
315
|
return { agent: info.agent, rules };
|
|
315
316
|
};
|
|
317
|
+
const notRegistered = (server) => mcp?.notRegistered?.(server);
|
|
316
318
|
const unavailable2 = async (server, tool, connected) => {
|
|
317
319
|
const status = (await ctx.mcp.list()).data.find((entry) => entry.name === server)?.status.status;
|
|
318
320
|
const code = connection(status) ?? connected;
|
|
319
321
|
if (code === "TOOL_UNAVAILABLE") return fail(code, `OpenCode does not list ${tool} on the connected "${server}" server`);
|
|
320
322
|
if (status === "connected") return fail(code, `the "${server}" server was reconnecting when ${tool} ran`);
|
|
321
|
-
|
|
323
|
+
const what = `the "${server}" server ${STATUS_TEXT[code] ?? "is unavailable"}`;
|
|
324
|
+
const own = code === "NOT_REGISTERED" ? notRegistered(server) : void 0;
|
|
325
|
+
return own ? new ScriptError({ code: own.code, what, next: own.next }) : fail(code, what);
|
|
322
326
|
};
|
|
323
327
|
const denied = (action, error, asked = action) => {
|
|
324
328
|
const reason = upstreamText(record(error) && typeof error["message"] === "string" ? error["message"] : String(error));
|
|
@@ -350,11 +354,15 @@ async function registerToolsRpc(ctx, options) {
|
|
|
350
354
|
}
|
|
351
355
|
};
|
|
352
356
|
};
|
|
353
|
-
const ownedTarget = (spec, envelope2) =>
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
357
|
+
const ownedTarget = (spec, envelope2) => {
|
|
358
|
+
if (accounts) serverOf(envelope2.account);
|
|
359
|
+
const account = accounts && envelope2.account !== void 0 ? { account: envelope2.account } : {};
|
|
360
|
+
return {
|
|
361
|
+
action: spec.action,
|
|
362
|
+
mcp: false,
|
|
363
|
+
run: async (call) => await spec.run(envelope2.input, { ...call, ...account }) ?? null
|
|
364
|
+
};
|
|
365
|
+
};
|
|
358
366
|
const invoke = async (target, raw, context) => {
|
|
359
367
|
const envelope2 = raw;
|
|
360
368
|
let method;
|
|
@@ -407,7 +415,9 @@ async function registerToolsRpc(ctx, options) {
|
|
|
407
415
|
for (const name of KNOWN_READS) {
|
|
408
416
|
const id = `${server}_${name}`;
|
|
409
417
|
const tool = managed ? tools.find((entry) => entry.id === id) : void 0;
|
|
410
|
-
const
|
|
418
|
+
const code = !managed ? "SERVER_CONFLICT" : tool ? void 0 : connection(status) ?? "TOOL_UNAVAILABLE";
|
|
419
|
+
const reason = code === "NOT_REGISTERED" ? notRegistered(server)?.code ?? code : code;
|
|
420
|
+
const detail = code === void 0 ? void 0 : mcp.unavailableDetail?.(name, code);
|
|
411
421
|
const input = jsonSchema(tool?.input) ?? ANY_OBJECT;
|
|
412
422
|
const output = jsonSchema(tool?.output);
|
|
413
423
|
methods.push({
|
|
@@ -418,6 +428,7 @@ async function registerToolsRpc(ctx, options) {
|
|
|
418
428
|
description: tool?.description ?? "",
|
|
419
429
|
available: reason === void 0,
|
|
420
430
|
...reason ? { reason } : {},
|
|
431
|
+
...detail === void 0 ? {} : { detail },
|
|
421
432
|
input,
|
|
422
433
|
output: mcpOutput(output)
|
|
423
434
|
});
|
|
@@ -755,7 +766,7 @@ function registerSkills(skill, skills) {
|
|
|
755
766
|
}
|
|
756
767
|
|
|
757
768
|
// src/version.ts
|
|
758
|
-
var VERSION = "0.0.
|
|
769
|
+
var VERSION = "0.0.4";
|
|
759
770
|
|
|
760
771
|
// src/status.ts
|
|
761
772
|
var SIGN_IN = `Run /connect and choose Linear, then press o or Enter to open the link (in a terminal, opencode mcp auth ${SERVER_NAME} opens it automatically).`;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@joe-broadhead/opencode-linear",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"description": "Unofficial OpenCode plugin for Linear: find, read and cite issues, projects and documents through Linear's official MCP server",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"opencode",
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
},
|
|
24
24
|
"files": [
|
|
25
25
|
"dist",
|
|
26
|
+
"assets/icon.svg",
|
|
26
27
|
"skills",
|
|
27
28
|
"README.md",
|
|
28
29
|
"LICENSE",
|
|
@@ -54,6 +55,8 @@
|
|
|
54
55
|
},
|
|
55
56
|
"jelly": {
|
|
56
57
|
"title": "Linear",
|
|
58
|
+
"summary": "Find and read Linear issues, projects and documents.",
|
|
59
|
+
"icon": "assets/icon.svg",
|
|
57
60
|
"tools": [
|
|
58
61
|
{
|
|
59
62
|
"name": "linear.issues",
|