@opentabs-dev/opentabs-plugin-linear 0.0.75 → 0.0.77
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/README.md +81 -0
- package/dist/adapter.iife.js +32 -20
- package/dist/adapter.iife.js.map +3 -3
- package/dist/tools.json +4 -4
- package/package.json +10 -4
- package/dist/tools/set-api-key.d.ts +0 -8
- package/dist/tools/set-api-key.d.ts.map +0 -1
- package/dist/tools/set-api-key.js +0 -28
- package/dist/tools/set-api-key.js.map +0 -1
package/README.md
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Linear
|
|
2
|
+
|
|
3
|
+
OpenTabs plugin for Linear — gives AI agents access to Linear through your authenticated browser session.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
opentabs plugin install linear
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Or install globally via npm:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install -g @opentabs-dev/opentabs-plugin-linear
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Setup
|
|
18
|
+
|
|
19
|
+
1. Open [linear.app](https://linear.app) in Chrome and log in
|
|
20
|
+
2. Open the OpenTabs side panel — the Linear plugin should appear as **ready**
|
|
21
|
+
|
|
22
|
+
## Tools (21)
|
|
23
|
+
|
|
24
|
+
### Issues (7)
|
|
25
|
+
|
|
26
|
+
| Tool | Description | Type |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| `search_issues` | Search and filter issues | Read |
|
|
29
|
+
| `get_issue` | Get details of a single issue | Read |
|
|
30
|
+
| `create_issue` | Create a new issue in Linear | Write |
|
|
31
|
+
| `update_issue` | Update an existing issue | Write |
|
|
32
|
+
| `delete_issue` | Move an issue to the trash | Write |
|
|
33
|
+
| `archive_issue` | Archive an issue | Write |
|
|
34
|
+
| `list_issue_relations` | List issue dependencies and relations | Read |
|
|
35
|
+
|
|
36
|
+
### Comments (3)
|
|
37
|
+
|
|
38
|
+
| Tool | Description | Type |
|
|
39
|
+
|---|---|---|
|
|
40
|
+
| `create_comment` | Add a comment to an issue | Write |
|
|
41
|
+
| `update_comment` | Update a comment | Write |
|
|
42
|
+
| `list_comments` | List comments on an issue | Read |
|
|
43
|
+
|
|
44
|
+
### Projects (4)
|
|
45
|
+
|
|
46
|
+
| Tool | Description | Type |
|
|
47
|
+
|---|---|---|
|
|
48
|
+
| `list_projects` | List all projects | Read |
|
|
49
|
+
| `get_project` | Get details of a project | Read |
|
|
50
|
+
| `create_project` | Create a new project | Write |
|
|
51
|
+
| `update_project` | Update a project | Write |
|
|
52
|
+
|
|
53
|
+
### Teams & Users (3)
|
|
54
|
+
|
|
55
|
+
| Tool | Description | Type |
|
|
56
|
+
|---|---|---|
|
|
57
|
+
| `list_teams` | List teams in the workspace | Read |
|
|
58
|
+
| `get_viewer` | Get the current user's profile | Read |
|
|
59
|
+
| `list_users` | List all users in the organization | Read |
|
|
60
|
+
|
|
61
|
+
### Workflow (3)
|
|
62
|
+
|
|
63
|
+
| Tool | Description | Type |
|
|
64
|
+
|---|---|---|
|
|
65
|
+
| `list_workflow_states` | List workflow states for a team | Read |
|
|
66
|
+
| `list_labels` | List all issue labels | Read |
|
|
67
|
+
| `list_cycles` | List cycles for a team | Read |
|
|
68
|
+
|
|
69
|
+
### Labels (1)
|
|
70
|
+
|
|
71
|
+
| Tool | Description | Type |
|
|
72
|
+
|---|---|---|
|
|
73
|
+
| `create_label` | Create a new label | Write |
|
|
74
|
+
|
|
75
|
+
## How It Works
|
|
76
|
+
|
|
77
|
+
This plugin runs inside your Linear tab through the [OpenTabs](https://opentabs.dev) Chrome extension. It uses your existing browser session — no API tokens or OAuth apps required. All operations happen as you, with your permissions.
|
|
78
|
+
|
|
79
|
+
## License
|
|
80
|
+
|
|
81
|
+
MIT
|
package/dist/adapter.iife.js
CHANGED
|
@@ -245,18 +245,18 @@
|
|
|
245
245
|
|
|
246
246
|
// node_modules/@opentabs-dev/plugin-sdk/dist/storage.js
|
|
247
247
|
var getLocalStorage = (key) => {
|
|
248
|
-
try {
|
|
249
|
-
return localStorage.getItem(key);
|
|
250
|
-
} catch {
|
|
251
|
-
}
|
|
252
248
|
let storage;
|
|
253
249
|
try {
|
|
254
|
-
storage = localStorage;
|
|
250
|
+
storage = window.localStorage;
|
|
255
251
|
} catch {
|
|
256
252
|
return null;
|
|
257
253
|
}
|
|
258
|
-
if (storage
|
|
259
|
-
|
|
254
|
+
if (storage) {
|
|
255
|
+
try {
|
|
256
|
+
return storage.getItem(key);
|
|
257
|
+
} catch {
|
|
258
|
+
return null;
|
|
259
|
+
}
|
|
260
260
|
}
|
|
261
261
|
try {
|
|
262
262
|
const iframe = document.createElement("iframe");
|
|
@@ -337,6 +337,8 @@
|
|
|
337
337
|
* (e.g., 'https://github.com'), not a match pattern.
|
|
338
338
|
*/
|
|
339
339
|
homepage;
|
|
340
|
+
/** Typed configuration schema — declares settings that users provide via config.json or the side panel. */
|
|
341
|
+
configSchema;
|
|
340
342
|
};
|
|
341
343
|
|
|
342
344
|
// src/linear-api.ts
|
|
@@ -15362,21 +15364,21 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15362
15364
|
};
|
|
15363
15365
|
var src_default = new LinearPlugin();
|
|
15364
15366
|
|
|
15365
|
-
// dist/
|
|
15367
|
+
// dist/_adapter_entry_4adfbfea-895d-48f9-b281-bc72737b59b2.ts
|
|
15366
15368
|
if (!globalThis.__openTabs) {
|
|
15367
15369
|
globalThis.__openTabs = {};
|
|
15368
15370
|
} else {
|
|
15369
15371
|
const desc = Object.getOwnPropertyDescriptor(globalThis.__openTabs, "adapters");
|
|
15370
15372
|
if (desc && !desc.writable) {
|
|
15371
|
-
const
|
|
15373
|
+
const ot3 = globalThis.__openTabs;
|
|
15372
15374
|
const newAdaptersObj = {};
|
|
15373
|
-
if (
|
|
15374
|
-
for (const key of Object.keys(
|
|
15375
|
-
const d = Object.getOwnPropertyDescriptor(
|
|
15375
|
+
if (ot3.adapters) {
|
|
15376
|
+
for (const key of Object.keys(ot3.adapters)) {
|
|
15377
|
+
const d = Object.getOwnPropertyDescriptor(ot3.adapters, key);
|
|
15376
15378
|
if (d) Object.defineProperty(newAdaptersObj, key, d);
|
|
15377
15379
|
}
|
|
15378
15380
|
}
|
|
15379
|
-
globalThis.__openTabs = Object.assign({},
|
|
15381
|
+
globalThis.__openTabs = Object.assign({}, ot3, { adapters: newAdaptersObj });
|
|
15380
15382
|
}
|
|
15381
15383
|
}
|
|
15382
15384
|
if (!globalThis.__openTabs.adapters) {
|
|
@@ -15414,6 +15416,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15414
15416
|
}
|
|
15415
15417
|
};
|
|
15416
15418
|
var restoreTransport = setLogTransport ? setLogTransport(logTransport) : void 0;
|
|
15419
|
+
var ot2 = globalThis.__openTabs;
|
|
15420
|
+
ot2._notifyReadinessChanged = () => {
|
|
15421
|
+
try {
|
|
15422
|
+
const nonce = globalThis.__openTabs?._readinessNonce;
|
|
15423
|
+
if (nonce) {
|
|
15424
|
+
window.postMessage({ type: "opentabs:readiness-changed", plugin: "linear", nonce }, "*");
|
|
15425
|
+
}
|
|
15426
|
+
} catch {
|
|
15427
|
+
}
|
|
15428
|
+
};
|
|
15417
15429
|
var existing = adapters["linear"];
|
|
15418
15430
|
if (existing) {
|
|
15419
15431
|
if (typeof existing.teardown === "function") {
|
|
@@ -15425,7 +15437,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15425
15437
|
}
|
|
15426
15438
|
}
|
|
15427
15439
|
if (!Reflect.deleteProperty(adapters, "linear")) {
|
|
15428
|
-
const
|
|
15440
|
+
const ot3 = globalThis.__openTabs;
|
|
15429
15441
|
const newAdapters = {};
|
|
15430
15442
|
for (const key of Object.keys(adapters)) {
|
|
15431
15443
|
if (key !== "linear") {
|
|
@@ -15433,7 +15445,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15433
15445
|
if (desc) Object.defineProperty(newAdapters, key, desc);
|
|
15434
15446
|
}
|
|
15435
15447
|
}
|
|
15436
|
-
globalThis.__openTabs = Object.assign({},
|
|
15448
|
+
globalThis.__openTabs = Object.assign({}, ot3, { adapters: newAdapters });
|
|
15437
15449
|
}
|
|
15438
15450
|
var hasLifecycleHooks = typeof src_default.onToolInvocationStart === "function" || typeof src_default.onToolInvocationEnd === "function";
|
|
15439
15451
|
for (const tool of src_default.tools) {
|
|
@@ -15494,12 +15506,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15494
15506
|
}
|
|
15495
15507
|
}
|
|
15496
15508
|
};
|
|
15497
|
-
const
|
|
15498
|
-
if (!
|
|
15509
|
+
const ot3 = globalThis.__openTabs;
|
|
15510
|
+
if (!ot3._navigationInterceptor) {
|
|
15499
15511
|
const origPushState = history.pushState.bind(history);
|
|
15500
15512
|
const origReplaceState = history.replaceState.bind(history);
|
|
15501
15513
|
const callbacks = /* @__PURE__ */ new Map();
|
|
15502
|
-
|
|
15514
|
+
ot3._navigationInterceptor = { callbacks, origPushState, origReplaceState };
|
|
15503
15515
|
history.pushState = function(...args) {
|
|
15504
15516
|
origPushState(...args);
|
|
15505
15517
|
for (const cb of callbacks.values()) {
|
|
@@ -15513,7 +15525,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15513
15525
|
}
|
|
15514
15526
|
};
|
|
15515
15527
|
}
|
|
15516
|
-
const interceptor =
|
|
15528
|
+
const interceptor = ot3._navigationInterceptor;
|
|
15517
15529
|
interceptor.callbacks.set("linear", checkUrl);
|
|
15518
15530
|
window.addEventListener("popstate", checkUrl);
|
|
15519
15531
|
window.addEventListener("hashchange", checkUrl);
|
|
@@ -15568,5 +15580,5 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15568
15580
|
};
|
|
15569
15581
|
delete src_default.onDeactivate;
|
|
15570
15582
|
}
|
|
15571
|
-
})();(function(){var o=(globalThis).__openTabs;if(o&&o.adapters&&o.adapters["linear"]){var a=o.adapters["linear"];a.__adapterHash="
|
|
15583
|
+
})();(function(){var o=(globalThis).__openTabs;if(o&&o.adapters&&o.adapters["linear"]){var a=o.adapters["linear"];a.__adapterHash="4bbb059dbbcbc68d32a2d3e185adfeaca569d7f141e6fdafd8520d4d31c52435";if(a.tools&&Array.isArray(a.tools)){for(var i=0;i<a.tools.length;i++){Object.freeze(a.tools[i]);}Object.freeze(a.tools);}Object.freeze(a);Object.defineProperty(o.adapters,"linear",{value:a,writable:false,configurable:false,enumerable:true});Object.defineProperty(o,"adapters",{value:o.adapters,writable:false,configurable:false});}})();
|
|
15572
15584
|
//# sourceMappingURL=adapter.iife.js.map
|