@thomas-elliott/paperclip-plugin-matrix 0.1.0 → 0.1.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.
- package/README.md +1 -2
- package/dist/manifest.js +7 -1
- package/dist/manifest.js.map +2 -2
- package/dist/worker.js +12 -7
- package/dist/worker.js.map +3 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -37,8 +37,6 @@ Only linked people can reply, decide, ask for work or use commands. The bot igno
|
|
|
37
37
|
- Everything is posted by one bot account, with the agent's name in the message. Agents do not have
|
|
38
38
|
their own Matrix accounts.
|
|
39
39
|
- Editing or deleting a message in Matrix does not change the comment or issue made from it.
|
|
40
|
-
- Paperclip blocks plugins from private network addresses, such as `192.168.x.x`, so Paperclip must
|
|
41
|
-
reach the homeserver at a public address.
|
|
42
40
|
|
|
43
41
|
## Install
|
|
44
42
|
|
|
@@ -86,6 +84,7 @@ Open the Matrix plugin's settings in Paperclip:
|
|
|
86
84
|
| Bot access token | The access token from step 1, added as a Paperclip secret |
|
|
87
85
|
| Room | The default room, as a room ID (`!abc…`) or alias (`#name:example.com`). Approvals, budget warnings and issues outside a project's room go here |
|
|
88
86
|
| Default agent | Optional. The URL key or name of the agent that gets work asked for outside a project's room |
|
|
87
|
+
| Homeserver is on a private network | Turn on if Paperclip reaches the homeserver at a private address, such as `192.168.x.x` or `10.x.x.x`. Paperclip blocks plugins from private addresses unless this is on |
|
|
89
88
|
| Paperclip address | Optional. Paperclip's web address, such as `https://paperclip.example.com`, so messages link to it |
|
|
90
89
|
|
|
91
90
|
Invite the bot to the default room, then save. The bot joins the room when the settings are saved.
|
package/dist/manifest.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// package.json
|
|
2
2
|
var package_default = {
|
|
3
3
|
name: "@thomas-elliott/paperclip-plugin-matrix",
|
|
4
|
-
version: "0.1.
|
|
4
|
+
version: "0.1.1",
|
|
5
5
|
type: "module",
|
|
6
6
|
description: "Connect a Paperclip instance to Matrix",
|
|
7
7
|
scripts: {
|
|
@@ -113,6 +113,12 @@ var manifest = {
|
|
|
113
113
|
title: "Default agent",
|
|
114
114
|
description: "Optional. The agent that gets work people ask for by mentioning the bot or messaging it directly, by its URL key or name. In a project's room the project's lead agent gets it instead. Mentioning an agent as @url-key in the message picks that agent."
|
|
115
115
|
},
|
|
116
|
+
privateNetwork: {
|
|
117
|
+
type: "boolean",
|
|
118
|
+
default: false,
|
|
119
|
+
title: "Homeserver is on a private network",
|
|
120
|
+
description: "Turn on if Paperclip reaches the homeserver at a private address, such as 192.168.x.x or 10.x.x.x. Paperclip blocks plugins from private addresses unless this is on."
|
|
121
|
+
},
|
|
116
122
|
paperclipUrl: {
|
|
117
123
|
type: "string",
|
|
118
124
|
title: "Paperclip address",
|
package/dist/manifest.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../package.json", "../src/manifest.ts"],
|
|
4
|
-
"sourcesContent": ["{\n \"name\": \"@thomas-elliott/paperclip-plugin-matrix\",\n \"version\": \"0.1.
|
|
5
|
-
"mappings": ";AAAA;AAAA,EACE,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,aAAe;AAAA,EACf,SAAW;AAAA,IACT,OAAS;AAAA,IACT,KAAO;AAAA,IACP,MAAQ;AAAA,IACR,WAAa;AAAA,IACb,gBAAkB;AAAA,EACpB;AAAA,EACA,OAAS;AAAA,IACP;AAAA,EACF;AAAA,EACA,iBAAmB;AAAA,IACjB,UAAY;AAAA,IACZ,QAAU;AAAA,IACV,IAAM;AAAA,EACR;AAAA,EACA,UAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,QAAU;AAAA,EACV,SAAW;AAAA,EACX,YAAc;AAAA,IACZ,MAAQ;AAAA,IACR,KAAO;AAAA,EACT;AAAA,EACA,gBAAkB;AAAA,EAClB,SAAW;AAAA,IACT,MAAQ;AAAA,EACV;AAAA,EACA,iBAAmB;AAAA,IACjB,2BAA2B;AAAA,IAC3B,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,SAAW;AAAA,IACX,QAAU;AAAA,IACV,YAAc;AAAA,IACd,QAAU;AAAA,EACZ;AAAA,EACA,kBAAoB;AAAA,IAClB,OAAS;AAAA,EACX;AAAA,EACA,eAAiB;AAAA,IACf,QAAU;AAAA,EACZ;AACF;;;AC9CA,IAAM,YAAY;AAElB,IAAM,WAAsC;AAAA,EAC1C,IAAI;AAAA,EACJ,YAAY;AAAA,EACZ,SAAS,gBAAY;AAAA,EACrB,aAAa;AAAA,EACb,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,YAAY,CAAC,WAAW;AAAA,EACxB,cAAc;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,QAAQ;AAAA,IACR,IAAI;AAAA,EACN;AAAA,EACA,sBAAsB;AAAA,IACpB,MAAM;AAAA,IACN,UAAU,CAAC,iBAAiB,aAAa;AAAA,IACzC,YAAY;AAAA,MACV,eAAe;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,aAAa;AAAA,MACf;AAAA,MACA,aAAa;AAAA;AAAA,QAEX,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,aAAa;AAAA,MACf;AAAA,MACA,aAAa;AAAA,QACX,MAAM;AAAA,QACN,OAAO;AAAA,QACP,aACE;AAAA,MACJ;AAAA,MACA,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,OAAO;AAAA,QACP,aACE;AAAA,MACJ;AAAA,MACA,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,OAAO;AAAA,QACP,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,IAAI;AAAA,IACF,OAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,aAAa;AAAA,QACb,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,aAAa,CAAC,SAAS;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAO,mBAAQ;",
|
|
4
|
+
"sourcesContent": ["{\n \"name\": \"@thomas-elliott/paperclip-plugin-matrix\",\n \"version\": \"0.1.1\",\n \"type\": \"module\",\n \"description\": \"Connect a Paperclip instance to Matrix\",\n \"scripts\": {\n \"build\": \"node ./esbuild.config.mjs\",\n \"dev\": \"node ./esbuild.config.mjs --watch\",\n \"test\": \"vitest run\",\n \"typecheck\": \"tsc --noEmit\",\n \"prepublishOnly\": \"pnpm typecheck && pnpm test && pnpm build\"\n },\n \"files\": [\n \"dist\"\n ],\n \"paperclipPlugin\": {\n \"manifest\": \"./dist/manifest.js\",\n \"worker\": \"./dist/worker.js\",\n \"ui\": \"./dist/ui/\"\n },\n \"keywords\": [\n \"paperclip\",\n \"plugin\",\n \"connector\",\n \"matrix\"\n ],\n \"author\": \"Thomas Elliott\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/thomas-elliott/paperclip-plugin-matrix.git\"\n },\n \"packageManager\": \"pnpm@11.25.0\",\n \"engines\": {\n \"node\": \">=24.11.0\"\n },\n \"devDependencies\": {\n \"@paperclipai/plugin-sdk\": \"2026.1023.0\",\n \"@types/node\": \"^24.0.0\",\n \"@types/react\": \"^19.0.8\",\n \"esbuild\": \"^0.27.3\",\n \"marked\": \"^18.1.2\",\n \"typescript\": \"^5.7.3\",\n \"vitest\": \"^3.0.5\"\n },\n \"peerDependencies\": {\n \"react\": \">=18\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n", "import type { PaperclipPluginManifestV1 } from \"@paperclipai/plugin-sdk\";\n// Paperclip shows the manifest version, so take it from package.json rather than keeping two copies.\nimport packageJson from \"../package.json\" with { type: \"json\" };\n\n// Installed settings and state are keyed on this ID, so it must never change.\nconst PLUGIN_ID = \"paperclip-plugin-matrix\";\n\nconst manifest: PaperclipPluginManifestV1 = {\n id: PLUGIN_ID,\n apiVersion: 1,\n version: packageJson.version,\n displayName: \"Matrix\",\n description: \"Connect a Paperclip instance to a Matrix homeserver\",\n author: \"Thomas Elliott\",\n categories: [\"connector\"],\n capabilities: [\n \"http.outbound\",\n \"secrets.read-ref\",\n \"plugin.state.read\",\n \"plugin.state.write\",\n \"events.subscribe\",\n \"companies.read\",\n \"projects.read\",\n \"issues.read\",\n \"issues.create\",\n \"agents.read\",\n \"approvals.read\",\n \"approvals.respond\",\n \"issue.comments.read\",\n \"issue.comments.create\",\n \"issue.comments.create_human_attributed\",\n \"issue.interactions.read\",\n \"issue.interactions.respond\",\n \"ui.dashboardWidget.register\",\n \"ui.detailTab.register\",\n ],\n entrypoints: {\n worker: \"./dist/worker.js\",\n ui: \"./dist/ui\",\n },\n instanceConfigSchema: {\n type: \"object\",\n required: [\"homeserverUrl\", \"accessToken\"],\n properties: {\n homeserverUrl: {\n type: \"string\",\n title: \"Homeserver address\",\n description: \"The address of your Matrix homeserver, for example https://matrix.example.com\",\n },\n accessToken: {\n // The secret picker stores { type: \"secret_ref\", secretId, version? }, not the token itself.\n type: \"object\",\n format: \"secret-ref\",\n title: \"Bot access token\",\n description: \"The Matrix bot account's access token, stored as a Paperclip secret\",\n },\n defaultRoom: {\n type: \"string\",\n title: \"Room\",\n description:\n \"Where the bot posts, as a room ID (!abc\u2026) or alias (#name:server). Invite the bot first. Encrypted rooms are not supported. A project can have its own room, set in the project's Matrix tab.\",\n },\n defaultAgent: {\n type: \"string\",\n title: \"Default agent\",\n description:\n \"Optional. The agent that gets work people ask for by mentioning the bot or messaging it directly, by its URL key or name. In a project's room the project's lead agent gets it instead. Mentioning an agent as @url-key in the message picks that agent.\",\n },\n privateNetwork: {\n type: \"boolean\",\n default: false,\n title: \"Homeserver is on a private network\",\n description:\n \"Turn on if Paperclip reaches the homeserver at a private address, such as 192.168.x.x or 10.x.x.x. Paperclip blocks plugins from private addresses unless this is on.\",\n },\n paperclipUrl: {\n type: \"string\",\n title: \"Paperclip address\",\n description: \"Optional. Your Paperclip's web address, for example https://paperclip.example.com, so messages link to it\",\n },\n },\n },\n ui: {\n slots: [\n {\n type: \"dashboardWidget\",\n id: \"matrix-connection\",\n displayName: \"Matrix connection\",\n exportName: \"DashboardWidget\",\n },\n {\n type: \"detailTab\",\n id: \"matrix-project-room\",\n displayName: \"Matrix\",\n exportName: \"ProjectRoomTab\",\n entityTypes: [\"project\"],\n },\n ],\n },\n};\n\nexport default manifest;\n"],
|
|
5
|
+
"mappings": ";AAAA;AAAA,EACE,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,aAAe;AAAA,EACf,SAAW;AAAA,IACT,OAAS;AAAA,IACT,KAAO;AAAA,IACP,MAAQ;AAAA,IACR,WAAa;AAAA,IACb,gBAAkB;AAAA,EACpB;AAAA,EACA,OAAS;AAAA,IACP;AAAA,EACF;AAAA,EACA,iBAAmB;AAAA,IACjB,UAAY;AAAA,IACZ,QAAU;AAAA,IACV,IAAM;AAAA,EACR;AAAA,EACA,UAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,QAAU;AAAA,EACV,SAAW;AAAA,EACX,YAAc;AAAA,IACZ,MAAQ;AAAA,IACR,KAAO;AAAA,EACT;AAAA,EACA,gBAAkB;AAAA,EAClB,SAAW;AAAA,IACT,MAAQ;AAAA,EACV;AAAA,EACA,iBAAmB;AAAA,IACjB,2BAA2B;AAAA,IAC3B,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,SAAW;AAAA,IACX,QAAU;AAAA,IACV,YAAc;AAAA,IACd,QAAU;AAAA,EACZ;AAAA,EACA,kBAAoB;AAAA,IAClB,OAAS;AAAA,EACX;AAAA,EACA,eAAiB;AAAA,IACf,QAAU;AAAA,EACZ;AACF;;;AC9CA,IAAM,YAAY;AAElB,IAAM,WAAsC;AAAA,EAC1C,IAAI;AAAA,EACJ,YAAY;AAAA,EACZ,SAAS,gBAAY;AAAA,EACrB,aAAa;AAAA,EACb,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,YAAY,CAAC,WAAW;AAAA,EACxB,cAAc;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,QAAQ;AAAA,IACR,IAAI;AAAA,EACN;AAAA,EACA,sBAAsB;AAAA,IACpB,MAAM;AAAA,IACN,UAAU,CAAC,iBAAiB,aAAa;AAAA,IACzC,YAAY;AAAA,MACV,eAAe;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,QACP,aAAa;AAAA,MACf;AAAA,MACA,aAAa;AAAA;AAAA,QAEX,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,aAAa;AAAA,MACf;AAAA,MACA,aAAa;AAAA,QACX,MAAM;AAAA,QACN,OAAO;AAAA,QACP,aACE;AAAA,MACJ;AAAA,MACA,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,OAAO;AAAA,QACP,aACE;AAAA,MACJ;AAAA,MACA,gBAAgB;AAAA,QACd,MAAM;AAAA,QACN,SAAS;AAAA,QACT,OAAO;AAAA,QACP,aACE;AAAA,MACJ;AAAA,MACA,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,OAAO;AAAA,QACP,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,IAAI;AAAA,IACF,OAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,aAAa;AAAA,QACb,YAAY;AAAA,MACd;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,IAAI;AAAA,QACJ,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,aAAa,CAAC,SAAS;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAO,mBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/worker.js
CHANGED
|
@@ -44228,7 +44228,8 @@ async function connect(ctx, companyId) {
|
|
|
44228
44228
|
token,
|
|
44229
44229
|
paperclipUrl: trimmed(config2.paperclipUrl)?.replace(/\/+$/, "") ?? null,
|
|
44230
44230
|
defaultRoom: trimmed(config2.defaultRoom),
|
|
44231
|
-
defaultAgent: trimmed(config2.defaultAgent)
|
|
44231
|
+
defaultAgent: trimmed(config2.defaultAgent),
|
|
44232
|
+
privateNetwork: config2.privateNetwork === true
|
|
44232
44233
|
};
|
|
44233
44234
|
}
|
|
44234
44235
|
var MAX_RATE_LIMIT_WAIT_MS = 1e4;
|
|
@@ -44236,12 +44237,10 @@ var MAX_ATTEMPTS = 3;
|
|
|
44236
44237
|
async function request(ctx, matrix, path2, options = {}) {
|
|
44237
44238
|
const headers = { Accept: "application/json", Authorization: `Bearer ${matrix.token}` };
|
|
44238
44239
|
if (options.body !== void 0) headers["Content-Type"] = "application/json";
|
|
44240
|
+
const url2 = `${matrix.homeserverUrl}/_matrix/client/v3${path2}`;
|
|
44241
|
+
const init = { method: options.method ?? "GET", headers, body: options.body === void 0 ? void 0 : JSON.stringify(options.body) };
|
|
44239
44242
|
for (let attempt = 1; ; attempt += 1) {
|
|
44240
|
-
const response = await ctx.http.fetch(
|
|
44241
|
-
method: options.method ?? "GET",
|
|
44242
|
-
headers,
|
|
44243
|
-
body: options.body === void 0 ? void 0 : JSON.stringify(options.body)
|
|
44244
|
-
});
|
|
44243
|
+
const response = matrix.privateNetwork ? await fetch(url2, { ...init, signal: AbortSignal.timeout(3e4) }) : await ctx.http.fetch(url2, init);
|
|
44245
44244
|
const body = await response.json().catch(() => ({}));
|
|
44246
44245
|
const wait = body.retry_after_ms ?? 1e3;
|
|
44247
44246
|
if (response.status === 429 && attempt < MAX_ATTEMPTS && wait <= MAX_RATE_LIMIT_WAIT_MS) {
|
|
@@ -46017,7 +46016,7 @@ async function handleCommand(ctx, matrix, companyId, roomId, event, command) {
|
|
|
46017
46016
|
// package.json
|
|
46018
46017
|
var package_default = {
|
|
46019
46018
|
name: "@thomas-elliott/paperclip-plugin-matrix",
|
|
46020
|
-
version: "0.1.
|
|
46019
|
+
version: "0.1.1",
|
|
46021
46020
|
type: "module",
|
|
46022
46021
|
description: "Connect a Paperclip instance to Matrix",
|
|
46023
46022
|
scripts: {
|
|
@@ -46129,6 +46128,12 @@ var manifest = {
|
|
|
46129
46128
|
title: "Default agent",
|
|
46130
46129
|
description: "Optional. The agent that gets work people ask for by mentioning the bot or messaging it directly, by its URL key or name. In a project's room the project's lead agent gets it instead. Mentioning an agent as @url-key in the message picks that agent."
|
|
46131
46130
|
},
|
|
46131
|
+
privateNetwork: {
|
|
46132
|
+
type: "boolean",
|
|
46133
|
+
default: false,
|
|
46134
|
+
title: "Homeserver is on a private network",
|
|
46135
|
+
description: "Turn on if Paperclip reaches the homeserver at a private address, such as 192.168.x.x or 10.x.x.x. Paperclip blocks plugins from private addresses unless this is on."
|
|
46136
|
+
},
|
|
46132
46137
|
paperclipUrl: {
|
|
46133
46138
|
type: "string",
|
|
46134
46139
|
title: "Paperclip address",
|