@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 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.0",
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",
@@ -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.0\",\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 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,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(`${matrix.homeserverUrl}/_matrix/client/v3${path2}`, {
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.0",
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",