@ubiquity-os/plugin-sdk 1.1.0 → 2.0.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/README.md CHANGED
@@ -17,6 +17,10 @@ The `createActionsPlugin` function allows users to create plugins that will be a
17
17
 
18
18
  The `createPlugin` function enables users to create a plugin that will run on Cloudflare Workers environment.
19
19
 
20
+ ### `postComment`
21
+
22
+ The `postComment` function enables users to easily post a comment to an issue, a pull-request, or a pull request review thread.
23
+
20
24
  ## Getting Started
21
25
 
22
26
  To set up the project locally, `bun` is the preferred package manager.
package/dist/index.d.mts CHANGED
@@ -1,10 +1,10 @@
1
1
  import * as hono_types from 'hono/types';
2
2
  import { EmitterWebhookEventName, EmitterWebhookEvent } from '@octokit/webhooks';
3
- import { TAnySchema } from '@sinclair/typebox';
4
- import { Logs, LogLevel, LogReturn } from '@ubiquity-os/ubiquity-os-logger';
5
3
  import { Hono } from 'hono';
4
+ import { Logs, LogLevel, LogReturn } from '@ubiquity-os/ubiquity-os-logger';
6
5
  import { customOctokit } from './octokit.mjs';
7
6
  import { Manifest } from './manifest.mjs';
7
+ import { TAnySchema } from '@sinclair/typebox';
8
8
  import '@octokit/core/dist-types/types';
9
9
  import '@octokit/plugin-paginate-graphql';
10
10
  import '@octokit/plugin-rest-endpoint-methods';
@@ -27,7 +27,7 @@ interface Context<TConfig = unknown, TEnv = unknown, TCommand = unknown, TSuppor
27
27
  type Return = Record<string, unknown> | undefined | void;
28
28
  type HandlerReturn = Promise<Return> | Return;
29
29
 
30
- interface Options$1 {
30
+ interface Options {
31
31
  kernelPublicKey?: string;
32
32
  logLevel?: LogLevel;
33
33
  postCommentOnError?: boolean;
@@ -39,25 +39,22 @@ interface Options$1 {
39
39
  */
40
40
  bypassSignatureVerification?: boolean;
41
41
  }
42
- declare function createPlugin<TConfig = unknown, TEnv = unknown, TCommand = unknown, TSupportedEvents extends EmitterWebhookEventName = EmitterWebhookEventName>(handler: (context: Context<TConfig, TEnv, TCommand, TSupportedEvents>) => HandlerReturn, manifest: Manifest, options?: Options$1): Hono<hono_types.BlankEnv, hono_types.BlankSchema, "/">;
43
42
 
44
- interface Options {
45
- logLevel?: LogLevel;
46
- postCommentOnError?: boolean;
47
- settingsSchema?: TAnySchema;
48
- envSchema?: TAnySchema;
49
- commandSchema?: TAnySchema;
50
- kernelPublicKey?: string;
51
- /**
52
- * @deprecated This disables signature verification - only for local development
53
- */
54
- bypassSignatureVerification?: boolean;
55
- }
43
+ declare function createPlugin<TConfig = unknown, TEnv = unknown, TCommand = unknown, TSupportedEvents extends EmitterWebhookEventName = EmitterWebhookEventName>(handler: (context: Context<TConfig, TEnv, TCommand, TSupportedEvents>) => HandlerReturn, manifest: Manifest, options?: Options): Hono<hono_types.BlankEnv, hono_types.BlankSchema, "/">;
44
+
56
45
  declare function createActionsPlugin<TConfig = unknown, TEnv = unknown, TCommand = unknown, TSupportedEvents extends EmitterWebhookEventName = EmitterWebhookEventName>(handler: (context: Context<TConfig, TEnv, TCommand, TSupportedEvents>) => HandlerReturn, options?: Options): Promise<void>;
57
46
 
47
+ interface CommentOptions {
48
+ raw?: boolean;
49
+ updateComment?: boolean;
50
+ }
51
+ type PostComment = {
52
+ (context: Context, message: LogReturn | Error, options?: CommentOptions): Promise<void>;
53
+ lastCommentId?: number;
54
+ };
58
55
  /**
59
56
  * Posts a comment on a GitHub issue if the issue exists in the context payload, embedding structured metadata to it.
60
57
  */
61
- declare function postComment(context: Context, message: LogReturn): Promise<void>;
58
+ declare const postComment: PostComment;
62
59
 
63
60
  export { type Context, createActionsPlugin, createPlugin, postComment };
package/dist/index.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import * as hono_types from 'hono/types';
2
2
  import { EmitterWebhookEventName, EmitterWebhookEvent } from '@octokit/webhooks';
3
- import { TAnySchema } from '@sinclair/typebox';
4
- import { Logs, LogLevel, LogReturn } from '@ubiquity-os/ubiquity-os-logger';
5
3
  import { Hono } from 'hono';
4
+ import { Logs, LogLevel, LogReturn } from '@ubiquity-os/ubiquity-os-logger';
6
5
  import { customOctokit } from './octokit.js';
7
6
  import { Manifest } from './manifest.js';
7
+ import { TAnySchema } from '@sinclair/typebox';
8
8
  import '@octokit/core/dist-types/types';
9
9
  import '@octokit/plugin-paginate-graphql';
10
10
  import '@octokit/plugin-rest-endpoint-methods';
@@ -27,7 +27,7 @@ interface Context<TConfig = unknown, TEnv = unknown, TCommand = unknown, TSuppor
27
27
  type Return = Record<string, unknown> | undefined | void;
28
28
  type HandlerReturn = Promise<Return> | Return;
29
29
 
30
- interface Options$1 {
30
+ interface Options {
31
31
  kernelPublicKey?: string;
32
32
  logLevel?: LogLevel;
33
33
  postCommentOnError?: boolean;
@@ -39,25 +39,22 @@ interface Options$1 {
39
39
  */
40
40
  bypassSignatureVerification?: boolean;
41
41
  }
42
- declare function createPlugin<TConfig = unknown, TEnv = unknown, TCommand = unknown, TSupportedEvents extends EmitterWebhookEventName = EmitterWebhookEventName>(handler: (context: Context<TConfig, TEnv, TCommand, TSupportedEvents>) => HandlerReturn, manifest: Manifest, options?: Options$1): Hono<hono_types.BlankEnv, hono_types.BlankSchema, "/">;
43
42
 
44
- interface Options {
45
- logLevel?: LogLevel;
46
- postCommentOnError?: boolean;
47
- settingsSchema?: TAnySchema;
48
- envSchema?: TAnySchema;
49
- commandSchema?: TAnySchema;
50
- kernelPublicKey?: string;
51
- /**
52
- * @deprecated This disables signature verification - only for local development
53
- */
54
- bypassSignatureVerification?: boolean;
55
- }
43
+ declare function createPlugin<TConfig = unknown, TEnv = unknown, TCommand = unknown, TSupportedEvents extends EmitterWebhookEventName = EmitterWebhookEventName>(handler: (context: Context<TConfig, TEnv, TCommand, TSupportedEvents>) => HandlerReturn, manifest: Manifest, options?: Options): Hono<hono_types.BlankEnv, hono_types.BlankSchema, "/">;
44
+
56
45
  declare function createActionsPlugin<TConfig = unknown, TEnv = unknown, TCommand = unknown, TSupportedEvents extends EmitterWebhookEventName = EmitterWebhookEventName>(handler: (context: Context<TConfig, TEnv, TCommand, TSupportedEvents>) => HandlerReturn, options?: Options): Promise<void>;
57
46
 
47
+ interface CommentOptions {
48
+ raw?: boolean;
49
+ updateComment?: boolean;
50
+ }
51
+ type PostComment = {
52
+ (context: Context, message: LogReturn | Error, options?: CommentOptions): Promise<void>;
53
+ lastCommentId?: number;
54
+ };
58
55
  /**
59
56
  * Posts a comment on a GitHub issue if the issue exists in the context payload, embedding structured metadata to it.
60
57
  */
61
- declare function postComment(context: Context, message: LogReturn): Promise<void>;
58
+ declare const postComment: PostComment;
62
59
 
63
60
  export { type Context, createActionsPlugin, createPlugin, postComment };
package/dist/index.js CHANGED
@@ -39,39 +39,152 @@ module.exports = __toCommonJS(src_exports);
39
39
  // src/server.ts
40
40
  var import_typebox = require("@sinclair/typebox");
41
41
  var import_value = require("@sinclair/typebox/value");
42
- var import_ubiquity_os_logger = require("@ubiquity-os/ubiquity-os-logger");
42
+ var import_ubiquity_os_logger2 = require("@ubiquity-os/ubiquity-os-logger");
43
43
  var import_hono = require("hono");
44
- var import_adapter = require("hono/adapter");
44
+ var import_adapter2 = require("hono/adapter");
45
45
  var import_http_exception = require("hono/http-exception");
46
46
 
47
+ // src/helpers/runtime-info.ts
48
+ var import_github = __toESM(require("@actions/github"));
49
+ var import_adapter = require("hono/adapter");
50
+ var PluginRuntimeInfo = class _PluginRuntimeInfo {
51
+ static _instance = null;
52
+ _env = {};
53
+ constructor(env) {
54
+ if (env) {
55
+ this._env = env;
56
+ }
57
+ }
58
+ static getInstance(env) {
59
+ if (!_PluginRuntimeInfo._instance) {
60
+ _PluginRuntimeInfo._instance = (0, import_adapter.getRuntimeKey)() === "workerd" ? new CfRuntimeInfo(env) : new NodeRuntimeInfo(env);
61
+ }
62
+ return _PluginRuntimeInfo._instance;
63
+ }
64
+ };
65
+ var CfRuntimeInfo = class extends PluginRuntimeInfo {
66
+ get version() {
67
+ return Promise.resolve(this._env.CLOUDFLARE_VERSION_METADATA?.id ?? "CLOUDFLARE_VERSION_METADATA");
68
+ }
69
+ get runUrl() {
70
+ const accountId = this._env.CLOUDFLARE_ACCOUNT_ID ?? "<missing-cloudflare-account-id>";
71
+ const workerName = this._env.CLOUDFLARE_WORKER_NAME;
72
+ const toTime = Date.now() + 6e4;
73
+ const fromTime = Date.now() - 6e4;
74
+ const timeParam = encodeURIComponent(`{"type":"absolute","to":${toTime},"from":${fromTime}}`);
75
+ return `https://dash.cloudflare.com/${accountId}/workers/services/view/${workerName}/production/observability/logs?granularity=0&time=${timeParam}`;
76
+ }
77
+ };
78
+ var NodeRuntimeInfo = class extends PluginRuntimeInfo {
79
+ get version() {
80
+ return Promise.resolve(import_github.default.context.sha);
81
+ }
82
+ get runUrl() {
83
+ return import_github.default.context.payload.repository ? `${import_github.default.context.payload.repository?.html_url}/actions/runs/${import_github.default.context.runId}` : "http://localhost";
84
+ }
85
+ };
86
+
87
+ // src/util.ts
88
+ var import_ubiquity_os_logger = require("@ubiquity-os/ubiquity-os-logger");
89
+
90
+ // src/constants.ts
91
+ var KERNEL_PUBLIC_KEY = `-----BEGIN PUBLIC KEY-----
92
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs96DOU+JqM8SyNXOB6u3
93
+ uBKIFiyrcST/LZTYN6y7LeJlyCuGPqSDrWCfjU9Ph5PLf9TWiNmeM8DGaOpwEFC7
94
+ U3NRxOSglo4plnQ5zRwIHHXvxyK400sQP2oISXymISuBQWjEIqkC9DybQrKwNzf+
95
+ I0JHWPqmwMIw26UvVOtXGOOWBqTkk+N2+/9f8eDIJP5QQVwwszc8s1rXOsLMlVIf
96
+ wShw7GO4E2jyK8TSJKpyjV8eb1JJMDwFhPiRrtZfQJUtDf2mV/67shQww61BH2Y/
97
+ Plnalo58kWIbkqZoq1yJrL5sFb73osM5+vADTXVn79bkvea7W19nSkdMiarYt4Hq
98
+ JQIDAQAB
99
+ -----END PUBLIC KEY-----
100
+ `;
101
+
47
102
  // src/util.ts
48
103
  function sanitizeMetadata(obj) {
49
104
  return JSON.stringify(obj, null, 2).replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/--/g, "&#45;&#45;");
50
105
  }
106
+ function getPluginOptions(options) {
107
+ return {
108
+ // Important to use || and not ?? to not consider empty strings
109
+ kernelPublicKey: options?.kernelPublicKey || KERNEL_PUBLIC_KEY,
110
+ logLevel: options?.logLevel ?? import_ubiquity_os_logger.LOG_LEVEL.INFO,
111
+ postCommentOnError: options?.postCommentOnError ?? true,
112
+ settingsSchema: options?.settingsSchema,
113
+ envSchema: options?.envSchema,
114
+ commandSchema: options?.commandSchema,
115
+ bypassSignatureVerification: options?.bypassSignatureVerification || false
116
+ };
117
+ }
51
118
 
52
119
  // src/comment.ts
53
- var HEADER_NAME = "Ubiquity";
54
- async function postComment(context2, message) {
55
- if ("issue" in context2.payload && context2.payload.repository?.owner?.login) {
56
- const metadata = createStructuredMetadata(message.metadata?.name, message);
57
- await context2.octokit.rest.issues.createComment({
58
- owner: context2.payload.repository.owner.login,
59
- repo: context2.payload.repository.name,
60
- issue_number: context2.payload.issue.number,
61
- body: [message.logMessage.diff, metadata].join("\n")
62
- });
120
+ var HEADER_NAME = "UbiquityOS";
121
+ var postComment = async function(context2, message, options = { updateComment: true, raw: false }) {
122
+ let issueNumber;
123
+ if ("issue" in context2.payload) {
124
+ issueNumber = context2.payload.issue.number;
125
+ } else if ("pull_request" in context2.payload) {
126
+ issueNumber = context2.payload.pull_request.number;
127
+ } else if ("discussion" in context2.payload) {
128
+ issueNumber = context2.payload.discussion.number;
63
129
  } else {
64
- context2.logger.info("Cannot post comment because issue is not found in the payload");
130
+ context2.logger.info("Cannot post comment because issue is not found in the payload.");
131
+ return;
132
+ }
133
+ if ("repository" in context2.payload && context2.payload.repository?.owner?.login) {
134
+ const body = await createStructuredMetadataWithMessage(context2, message, options);
135
+ if (options.updateComment && postComment.lastCommentId) {
136
+ await context2.octokit.rest.issues.updateComment({
137
+ owner: context2.payload.repository.owner.login,
138
+ repo: context2.payload.repository.name,
139
+ comment_id: postComment.lastCommentId,
140
+ body
141
+ });
142
+ } else {
143
+ const commentData = await context2.octokit.rest.issues.createComment({
144
+ owner: context2.payload.repository.owner.login,
145
+ repo: context2.payload.repository.name,
146
+ issue_number: issueNumber,
147
+ body
148
+ });
149
+ postComment.lastCommentId = commentData.data.id;
150
+ }
151
+ } else {
152
+ context2.logger.info("Cannot post comment because repository is not found in the payload.", { payload: context2.payload });
153
+ }
154
+ };
155
+ async function createStructuredMetadataWithMessage(context2, message, options) {
156
+ let logMessage;
157
+ let callingFnName;
158
+ let instigatorName;
159
+ let metadata;
160
+ if (message instanceof Error) {
161
+ metadata = {
162
+ message: message.message,
163
+ name: message.name,
164
+ stack: message.stack
165
+ };
166
+ callingFnName = message.stack?.split("\n")[2]?.match(/at (\S+)/)?.[1] ?? "anonymous";
167
+ logMessage = context2.logger.error(message.message).logMessage;
168
+ } else if (message.metadata) {
169
+ metadata = {
170
+ message: message.metadata.message,
171
+ stack: message.metadata.stack || message.metadata.error?.stack,
172
+ caller: message.metadata.caller || message.metadata.error?.stack?.split("\n")[2]?.match(/at (\S+)/)?.[1]
173
+ };
174
+ logMessage = message.logMessage;
175
+ callingFnName = metadata.caller;
176
+ } else {
177
+ metadata = { ...message };
65
178
  }
66
- }
67
- function createStructuredMetadata(className, logReturn) {
68
- const logMessage = logReturn.logMessage;
69
- const metadata = logReturn.metadata;
70
179
  const jsonPretty = sanitizeMetadata(metadata);
71
- const stack = logReturn.metadata?.stack;
72
- const stackLine = (Array.isArray(stack) ? stack.join("\n") : stack)?.split("\n")[2] ?? "";
73
- const caller = stackLine.match(/at (\S+)/)?.[1] ?? "";
74
- const ubiquityMetadataHeader = `<!-- ${HEADER_NAME} - ${className} - ${caller} - ${metadata?.revision}`;
180
+ if ("installation" in context2.payload && context2.payload.installation && "account" in context2.payload.installation) {
181
+ instigatorName = context2.payload.installation?.account?.name;
182
+ } else {
183
+ instigatorName = context2.payload.sender?.login || HEADER_NAME;
184
+ }
185
+ const runUrl = PluginRuntimeInfo.getInstance().runUrl;
186
+ const version = await PluginRuntimeInfo.getInstance().version;
187
+ const ubiquityMetadataHeader = `<!-- ${HEADER_NAME} - ${runUrl} - ${callingFnName} - ${version} - @${instigatorName}`;
75
188
  let metadataSerialized;
76
189
  const metadataSerializedVisible = ["```json", jsonPretty, "```"].join("\n");
77
190
  const metadataSerializedHidden = [ubiquityMetadataHeader, jsonPretty, "-->"].join("\n");
@@ -80,23 +193,12 @@ function createStructuredMetadata(className, logReturn) {
80
193
  } else {
81
194
  metadataSerialized = metadataSerializedHidden;
82
195
  }
83
- return `
196
+ return `${options.raw ? logMessage?.raw : logMessage?.diff}
197
+
84
198
  ${metadataSerialized}
85
199
  `;
86
200
  }
87
201
 
88
- // src/constants.ts
89
- var KERNEL_PUBLIC_KEY = `-----BEGIN PUBLIC KEY-----
90
- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs96DOU+JqM8SyNXOB6u3
91
- uBKIFiyrcST/LZTYN6y7LeJlyCuGPqSDrWCfjU9Ph5PLf9TWiNmeM8DGaOpwEFC7
92
- U3NRxOSglo4plnQ5zRwIHHXvxyK400sQP2oISXymISuBQWjEIqkC9DybQrKwNzf+
93
- I0JHWPqmwMIw26UvVOtXGOOWBqTkk+N2+/9f8eDIJP5QQVwwszc8s1rXOsLMlVIf
94
- wShw7GO4E2jyK8TSJKpyjV8eb1JJMDwFhPiRrtZfQJUtDf2mV/67shQww61BH2Y/
95
- Plnalo58kWIbkqZoq1yJrL5sFb73osM5+vADTXVn79bkvea7W19nSkdMiarYt4Hq
96
- JQIDAQAB
97
- -----END PUBLIC KEY-----
98
- `;
99
-
100
202
  // src/octokit.ts
101
203
  var import_core = require("@octokit/core");
102
204
  var import_plugin_paginate_rest = require("@octokit/plugin-paginate-rest");
@@ -169,15 +271,7 @@ var inputSchema = import_typebox.Type.Object({
169
271
  signature: import_typebox.Type.String()
170
272
  });
171
273
  function createPlugin(handler, manifest, options) {
172
- const pluginOptions = {
173
- kernelPublicKey: options?.kernelPublicKey ?? KERNEL_PUBLIC_KEY,
174
- logLevel: options?.logLevel ?? import_ubiquity_os_logger.LOG_LEVEL.INFO,
175
- postCommentOnError: options?.postCommentOnError ?? true,
176
- settingsSchema: options?.settingsSchema,
177
- envSchema: options?.envSchema,
178
- commandSchema: options?.commandSchema,
179
- bypassSignatureVerification: options?.bypassSignatureVerification || false
180
- };
274
+ const pluginOptions = getPluginOptions(options);
181
275
  const app = new import_hono.Hono();
182
276
  app.get("/manifest.json", (ctx) => {
183
277
  return ctx.json(manifest);
@@ -209,7 +303,7 @@ function createPlugin(handler, manifest, options) {
209
303
  config2 = inputs.settings;
210
304
  }
211
305
  let env;
212
- const honoEnvironment = (0, import_adapter.env)(ctx);
306
+ const honoEnvironment = (0, import_adapter2.env)(ctx);
213
307
  if (pluginOptions.envSchema) {
214
308
  try {
215
309
  env = import_value.Value.Decode(pluginOptions.envSchema, import_value.Value.Default(pluginOptions.envSchema, honoEnvironment));
@@ -220,6 +314,8 @@ function createPlugin(handler, manifest, options) {
220
314
  } else {
221
315
  env = ctx.env;
222
316
  }
317
+ const workerName = new URL(inputs.ref).hostname.split(".")[0];
318
+ PluginRuntimeInfo.getInstance({ ...env, CLOUDFLARE_WORKER_NAME: workerName });
223
319
  let command = null;
224
320
  if (inputs.command && pluginOptions.commandSchema) {
225
321
  try {
@@ -238,7 +334,7 @@ function createPlugin(handler, manifest, options) {
238
334
  octokit: new customOctokit({ auth: inputs.authToken }),
239
335
  config: config2,
240
336
  env,
241
- logger: new import_ubiquity_os_logger.Logs(pluginOptions.logLevel)
337
+ logger: new import_ubiquity_os_logger2.Logs(pluginOptions.logLevel)
242
338
  };
243
339
  try {
244
340
  const result = await handler(context2);
@@ -246,9 +342,7 @@ function createPlugin(handler, manifest, options) {
246
342
  } catch (error) {
247
343
  console.error(error);
248
344
  let loggerError;
249
- if (error instanceof Error) {
250
- loggerError = context2.logger.error(`Error: ${error}`, { error });
251
- } else if (error instanceof import_ubiquity_os_logger.LogReturn) {
345
+ if (error instanceof Error || error instanceof import_ubiquity_os_logger2.LogReturn) {
252
346
  loggerError = error;
253
347
  } else {
254
348
  loggerError = context2.logger.error(`Error: ${error}`);
@@ -264,26 +358,26 @@ function createPlugin(handler, manifest, options) {
264
358
 
265
359
  // src/actions.ts
266
360
  var core = __toESM(require("@actions/core"));
267
- var github = __toESM(require("@actions/github"));
361
+ var github2 = __toESM(require("@actions/github"));
268
362
  var import_typebox4 = require("@sinclair/typebox");
269
363
  var import_value3 = require("@sinclair/typebox/value");
270
- var import_ubiquity_os_logger2 = require("@ubiquity-os/ubiquity-os-logger");
364
+ var import_ubiquity_os_logger3 = require("@ubiquity-os/ubiquity-os-logger");
271
365
  var import_dotenv = require("dotenv");
272
366
 
273
- // src/types/util.ts
367
+ // src/types/command.ts
274
368
  var import_typebox2 = require("@sinclair/typebox");
369
+ var commandCallSchema = import_typebox2.Type.Union([import_typebox2.Type.Null(), import_typebox2.Type.Object({ name: import_typebox2.Type.String(), parameters: import_typebox2.Type.Unknown() })]);
370
+
371
+ // src/types/util.ts
372
+ var import_typebox3 = require("@sinclair/typebox");
275
373
  var import_value2 = require("@sinclair/typebox/value");
276
374
  function jsonType(type) {
277
- return import_typebox2.Type.Transform(import_typebox2.Type.String()).Decode((value) => {
375
+ return import_typebox3.Type.Transform(import_typebox3.Type.String()).Decode((value) => {
278
376
  const parsed = JSON.parse(value);
279
377
  return import_value2.Value.Decode(type, import_value2.Value.Default(type, parsed));
280
378
  }).Encode((value) => JSON.stringify(value));
281
379
  }
282
380
 
283
- // src/types/command.ts
284
- var import_typebox3 = require("@sinclair/typebox");
285
- var commandCallSchema = import_typebox3.Type.Union([import_typebox3.Type.Null(), import_typebox3.Type.Object({ name: import_typebox3.Type.String(), parameters: import_typebox3.Type.Unknown() })]);
286
-
287
381
  // src/actions.ts
288
382
  (0, import_dotenv.config)();
289
383
  var inputSchema2 = import_typebox4.Type.Object({
@@ -297,27 +391,19 @@ var inputSchema2 = import_typebox4.Type.Object({
297
391
  signature: import_typebox4.Type.String()
298
392
  });
299
393
  async function createActionsPlugin(handler, options) {
300
- const pluginOptions = {
301
- logLevel: options?.logLevel ?? import_ubiquity_os_logger2.LOG_LEVEL.INFO,
302
- postCommentOnError: options?.postCommentOnError ?? true,
303
- settingsSchema: options?.settingsSchema,
304
- envSchema: options?.envSchema,
305
- commandSchema: options?.commandSchema,
306
- kernelPublicKey: options?.kernelPublicKey ?? KERNEL_PUBLIC_KEY,
307
- bypassSignatureVerification: options?.bypassSignatureVerification || false
308
- };
394
+ const pluginOptions = getPluginOptions(options);
309
395
  const pluginGithubToken = process.env.PLUGIN_GITHUB_TOKEN;
310
396
  if (!pluginGithubToken) {
311
397
  core.setFailed("Error: PLUGIN_GITHUB_TOKEN env is not set");
312
398
  return;
313
399
  }
314
- const body = github.context.payload.inputs;
400
+ const body = github2.context.payload.inputs;
315
401
  const signature = body.signature;
316
402
  if (!pluginOptions.bypassSignatureVerification && !await verifySignature(pluginOptions.kernelPublicKey, body, signature)) {
317
403
  core.setFailed(`Error: Invalid signature`);
318
404
  return;
319
405
  }
320
- const inputPayload = github.context.payload.inputs;
406
+ const inputPayload = github2.context.payload.inputs;
321
407
  const inputSchemaErrors = [...import_value3.Value.Errors(inputSchema2, inputPayload)];
322
408
  if (inputSchemaErrors.length) {
323
409
  console.dir(inputSchemaErrors, { depth: null });
@@ -365,7 +451,7 @@ async function createActionsPlugin(handler, options) {
365
451
  octokit: new customOctokit({ auth: inputs.authToken }),
366
452
  config: config2,
367
453
  env,
368
- logger: new import_ubiquity_os_logger2.Logs(pluginOptions.logLevel)
454
+ logger: new import_ubiquity_os_logger3.Logs(pluginOptions.logLevel)
369
455
  };
370
456
  try {
371
457
  const result = await handler(context2);
@@ -377,7 +463,7 @@ async function createActionsPlugin(handler, options) {
377
463
  if (error instanceof Error) {
378
464
  core.setFailed(error);
379
465
  loggerError = context2.logger.error(`Error: ${error}`, { error });
380
- } else if (error instanceof import_ubiquity_os_logger2.LogReturn) {
466
+ } else if (error instanceof import_ubiquity_os_logger3.LogReturn) {
381
467
  core.setFailed(error.logMessage.raw);
382
468
  loggerError = error;
383
469
  } else {
@@ -385,34 +471,15 @@ async function createActionsPlugin(handler, options) {
385
471
  loggerError = context2.logger.error(`Error: ${error}`);
386
472
  }
387
473
  if (pluginOptions.postCommentOnError && loggerError) {
388
- await postErrorComment(context2, loggerError);
474
+ await postComment(context2, loggerError);
389
475
  }
390
476
  }
391
477
  }
392
- async function postErrorComment(context2, error) {
393
- if ("issue" in context2.payload && context2.payload.repository?.owner?.login) {
394
- await context2.octokit.rest.issues.createComment({
395
- owner: context2.payload.repository.owner.login,
396
- repo: context2.payload.repository.name,
397
- issue_number: context2.payload.issue.number,
398
- body: `${error.logMessage.diff}
399
- <!--
400
- ${getGithubWorkflowRunUrl()}
401
- ${sanitizeMetadata(error.metadata)}
402
- -->`
403
- });
404
- } else {
405
- context2.logger.info("Cannot post error comment because issue is not found in the payload");
406
- }
407
- }
408
- function getGithubWorkflowRunUrl() {
409
- return `${github.context.payload.repository?.html_url}/actions/runs/${github.context.runId}`;
410
- }
411
478
  async function returnDataToKernel(repoToken, stateId, output) {
412
479
  const octokit = new customOctokit({ auth: repoToken });
413
480
  await octokit.rest.repos.createDispatchEvent({
414
- owner: github.context.repo.owner,
415
- repo: github.context.repo.repo,
481
+ owner: github2.context.repo.owner,
482
+ repo: github2.context.repo.repo,
416
483
  event_type: "return-data-to-ubiquity-os-kernel",
417
484
  client_payload: {
418
485
  state_id: stateId,
package/dist/index.mjs CHANGED
@@ -1,39 +1,152 @@
1
1
  // src/server.ts
2
2
  import { Type as T } from "@sinclair/typebox";
3
3
  import { Value } from "@sinclair/typebox/value";
4
- import { LOG_LEVEL, LogReturn, Logs } from "@ubiquity-os/ubiquity-os-logger";
4
+ import { LogReturn as LogReturn2, Logs } from "@ubiquity-os/ubiquity-os-logger";
5
5
  import { Hono } from "hono";
6
6
  import { env as honoEnv } from "hono/adapter";
7
7
  import { HTTPException } from "hono/http-exception";
8
8
 
9
+ // src/helpers/runtime-info.ts
10
+ import github from "@actions/github";
11
+ import { getRuntimeKey } from "hono/adapter";
12
+ var PluginRuntimeInfo = class _PluginRuntimeInfo {
13
+ static _instance = null;
14
+ _env = {};
15
+ constructor(env) {
16
+ if (env) {
17
+ this._env = env;
18
+ }
19
+ }
20
+ static getInstance(env) {
21
+ if (!_PluginRuntimeInfo._instance) {
22
+ _PluginRuntimeInfo._instance = getRuntimeKey() === "workerd" ? new CfRuntimeInfo(env) : new NodeRuntimeInfo(env);
23
+ }
24
+ return _PluginRuntimeInfo._instance;
25
+ }
26
+ };
27
+ var CfRuntimeInfo = class extends PluginRuntimeInfo {
28
+ get version() {
29
+ return Promise.resolve(this._env.CLOUDFLARE_VERSION_METADATA?.id ?? "CLOUDFLARE_VERSION_METADATA");
30
+ }
31
+ get runUrl() {
32
+ const accountId = this._env.CLOUDFLARE_ACCOUNT_ID ?? "<missing-cloudflare-account-id>";
33
+ const workerName = this._env.CLOUDFLARE_WORKER_NAME;
34
+ const toTime = Date.now() + 6e4;
35
+ const fromTime = Date.now() - 6e4;
36
+ const timeParam = encodeURIComponent(`{"type":"absolute","to":${toTime},"from":${fromTime}}`);
37
+ return `https://dash.cloudflare.com/${accountId}/workers/services/view/${workerName}/production/observability/logs?granularity=0&time=${timeParam}`;
38
+ }
39
+ };
40
+ var NodeRuntimeInfo = class extends PluginRuntimeInfo {
41
+ get version() {
42
+ return Promise.resolve(github.context.sha);
43
+ }
44
+ get runUrl() {
45
+ return github.context.payload.repository ? `${github.context.payload.repository?.html_url}/actions/runs/${github.context.runId}` : "http://localhost";
46
+ }
47
+ };
48
+
49
+ // src/util.ts
50
+ import { LOG_LEVEL } from "@ubiquity-os/ubiquity-os-logger";
51
+
52
+ // src/constants.ts
53
+ var KERNEL_PUBLIC_KEY = `-----BEGIN PUBLIC KEY-----
54
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs96DOU+JqM8SyNXOB6u3
55
+ uBKIFiyrcST/LZTYN6y7LeJlyCuGPqSDrWCfjU9Ph5PLf9TWiNmeM8DGaOpwEFC7
56
+ U3NRxOSglo4plnQ5zRwIHHXvxyK400sQP2oISXymISuBQWjEIqkC9DybQrKwNzf+
57
+ I0JHWPqmwMIw26UvVOtXGOOWBqTkk+N2+/9f8eDIJP5QQVwwszc8s1rXOsLMlVIf
58
+ wShw7GO4E2jyK8TSJKpyjV8eb1JJMDwFhPiRrtZfQJUtDf2mV/67shQww61BH2Y/
59
+ Plnalo58kWIbkqZoq1yJrL5sFb73osM5+vADTXVn79bkvea7W19nSkdMiarYt4Hq
60
+ JQIDAQAB
61
+ -----END PUBLIC KEY-----
62
+ `;
63
+
9
64
  // src/util.ts
10
65
  function sanitizeMetadata(obj) {
11
66
  return JSON.stringify(obj, null, 2).replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/--/g, "&#45;&#45;");
12
67
  }
68
+ function getPluginOptions(options) {
69
+ return {
70
+ // Important to use || and not ?? to not consider empty strings
71
+ kernelPublicKey: options?.kernelPublicKey || KERNEL_PUBLIC_KEY,
72
+ logLevel: options?.logLevel ?? LOG_LEVEL.INFO,
73
+ postCommentOnError: options?.postCommentOnError ?? true,
74
+ settingsSchema: options?.settingsSchema,
75
+ envSchema: options?.envSchema,
76
+ commandSchema: options?.commandSchema,
77
+ bypassSignatureVerification: options?.bypassSignatureVerification || false
78
+ };
79
+ }
13
80
 
14
81
  // src/comment.ts
15
- var HEADER_NAME = "Ubiquity";
16
- async function postComment(context2, message) {
17
- if ("issue" in context2.payload && context2.payload.repository?.owner?.login) {
18
- const metadata = createStructuredMetadata(message.metadata?.name, message);
19
- await context2.octokit.rest.issues.createComment({
20
- owner: context2.payload.repository.owner.login,
21
- repo: context2.payload.repository.name,
22
- issue_number: context2.payload.issue.number,
23
- body: [message.logMessage.diff, metadata].join("\n")
24
- });
82
+ var HEADER_NAME = "UbiquityOS";
83
+ var postComment = async function(context2, message, options = { updateComment: true, raw: false }) {
84
+ let issueNumber;
85
+ if ("issue" in context2.payload) {
86
+ issueNumber = context2.payload.issue.number;
87
+ } else if ("pull_request" in context2.payload) {
88
+ issueNumber = context2.payload.pull_request.number;
89
+ } else if ("discussion" in context2.payload) {
90
+ issueNumber = context2.payload.discussion.number;
25
91
  } else {
26
- context2.logger.info("Cannot post comment because issue is not found in the payload");
92
+ context2.logger.info("Cannot post comment because issue is not found in the payload.");
93
+ return;
94
+ }
95
+ if ("repository" in context2.payload && context2.payload.repository?.owner?.login) {
96
+ const body = await createStructuredMetadataWithMessage(context2, message, options);
97
+ if (options.updateComment && postComment.lastCommentId) {
98
+ await context2.octokit.rest.issues.updateComment({
99
+ owner: context2.payload.repository.owner.login,
100
+ repo: context2.payload.repository.name,
101
+ comment_id: postComment.lastCommentId,
102
+ body
103
+ });
104
+ } else {
105
+ const commentData = await context2.octokit.rest.issues.createComment({
106
+ owner: context2.payload.repository.owner.login,
107
+ repo: context2.payload.repository.name,
108
+ issue_number: issueNumber,
109
+ body
110
+ });
111
+ postComment.lastCommentId = commentData.data.id;
112
+ }
113
+ } else {
114
+ context2.logger.info("Cannot post comment because repository is not found in the payload.", { payload: context2.payload });
115
+ }
116
+ };
117
+ async function createStructuredMetadataWithMessage(context2, message, options) {
118
+ let logMessage;
119
+ let callingFnName;
120
+ let instigatorName;
121
+ let metadata;
122
+ if (message instanceof Error) {
123
+ metadata = {
124
+ message: message.message,
125
+ name: message.name,
126
+ stack: message.stack
127
+ };
128
+ callingFnName = message.stack?.split("\n")[2]?.match(/at (\S+)/)?.[1] ?? "anonymous";
129
+ logMessage = context2.logger.error(message.message).logMessage;
130
+ } else if (message.metadata) {
131
+ metadata = {
132
+ message: message.metadata.message,
133
+ stack: message.metadata.stack || message.metadata.error?.stack,
134
+ caller: message.metadata.caller || message.metadata.error?.stack?.split("\n")[2]?.match(/at (\S+)/)?.[1]
135
+ };
136
+ logMessage = message.logMessage;
137
+ callingFnName = metadata.caller;
138
+ } else {
139
+ metadata = { ...message };
27
140
  }
28
- }
29
- function createStructuredMetadata(className, logReturn) {
30
- const logMessage = logReturn.logMessage;
31
- const metadata = logReturn.metadata;
32
141
  const jsonPretty = sanitizeMetadata(metadata);
33
- const stack = logReturn.metadata?.stack;
34
- const stackLine = (Array.isArray(stack) ? stack.join("\n") : stack)?.split("\n")[2] ?? "";
35
- const caller = stackLine.match(/at (\S+)/)?.[1] ?? "";
36
- const ubiquityMetadataHeader = `<!-- ${HEADER_NAME} - ${className} - ${caller} - ${metadata?.revision}`;
142
+ if ("installation" in context2.payload && context2.payload.installation && "account" in context2.payload.installation) {
143
+ instigatorName = context2.payload.installation?.account?.name;
144
+ } else {
145
+ instigatorName = context2.payload.sender?.login || HEADER_NAME;
146
+ }
147
+ const runUrl = PluginRuntimeInfo.getInstance().runUrl;
148
+ const version = await PluginRuntimeInfo.getInstance().version;
149
+ const ubiquityMetadataHeader = `<!-- ${HEADER_NAME} - ${runUrl} - ${callingFnName} - ${version} - @${instigatorName}`;
37
150
  let metadataSerialized;
38
151
  const metadataSerializedVisible = ["```json", jsonPretty, "```"].join("\n");
39
152
  const metadataSerializedHidden = [ubiquityMetadataHeader, jsonPretty, "-->"].join("\n");
@@ -42,23 +155,12 @@ function createStructuredMetadata(className, logReturn) {
42
155
  } else {
43
156
  metadataSerialized = metadataSerializedHidden;
44
157
  }
45
- return `
158
+ return `${options.raw ? logMessage?.raw : logMessage?.diff}
159
+
46
160
  ${metadataSerialized}
47
161
  `;
48
162
  }
49
163
 
50
- // src/constants.ts
51
- var KERNEL_PUBLIC_KEY = `-----BEGIN PUBLIC KEY-----
52
- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs96DOU+JqM8SyNXOB6u3
53
- uBKIFiyrcST/LZTYN6y7LeJlyCuGPqSDrWCfjU9Ph5PLf9TWiNmeM8DGaOpwEFC7
54
- U3NRxOSglo4plnQ5zRwIHHXvxyK400sQP2oISXymISuBQWjEIqkC9DybQrKwNzf+
55
- I0JHWPqmwMIw26UvVOtXGOOWBqTkk+N2+/9f8eDIJP5QQVwwszc8s1rXOsLMlVIf
56
- wShw7GO4E2jyK8TSJKpyjV8eb1JJMDwFhPiRrtZfQJUtDf2mV/67shQww61BH2Y/
57
- Plnalo58kWIbkqZoq1yJrL5sFb73osM5+vADTXVn79bkvea7W19nSkdMiarYt4Hq
58
- JQIDAQAB
59
- -----END PUBLIC KEY-----
60
- `;
61
-
62
164
  // src/octokit.ts
63
165
  import { Octokit } from "@octokit/core";
64
166
  import { paginateRest } from "@octokit/plugin-paginate-rest";
@@ -131,15 +233,7 @@ var inputSchema = T.Object({
131
233
  signature: T.String()
132
234
  });
133
235
  function createPlugin(handler, manifest, options) {
134
- const pluginOptions = {
135
- kernelPublicKey: options?.kernelPublicKey ?? KERNEL_PUBLIC_KEY,
136
- logLevel: options?.logLevel ?? LOG_LEVEL.INFO,
137
- postCommentOnError: options?.postCommentOnError ?? true,
138
- settingsSchema: options?.settingsSchema,
139
- envSchema: options?.envSchema,
140
- commandSchema: options?.commandSchema,
141
- bypassSignatureVerification: options?.bypassSignatureVerification || false
142
- };
236
+ const pluginOptions = getPluginOptions(options);
143
237
  const app = new Hono();
144
238
  app.get("/manifest.json", (ctx) => {
145
239
  return ctx.json(manifest);
@@ -182,6 +276,8 @@ function createPlugin(handler, manifest, options) {
182
276
  } else {
183
277
  env = ctx.env;
184
278
  }
279
+ const workerName = new URL(inputs.ref).hostname.split(".")[0];
280
+ PluginRuntimeInfo.getInstance({ ...env, CLOUDFLARE_WORKER_NAME: workerName });
185
281
  let command = null;
186
282
  if (inputs.command && pluginOptions.commandSchema) {
187
283
  try {
@@ -208,9 +304,7 @@ function createPlugin(handler, manifest, options) {
208
304
  } catch (error) {
209
305
  console.error(error);
210
306
  let loggerError;
211
- if (error instanceof Error) {
212
- loggerError = context2.logger.error(`Error: ${error}`, { error });
213
- } else if (error instanceof LogReturn) {
307
+ if (error instanceof Error || error instanceof LogReturn2) {
214
308
  loggerError = error;
215
309
  } else {
216
310
  loggerError = context2.logger.error(`Error: ${error}`);
@@ -226,12 +320,16 @@ function createPlugin(handler, manifest, options) {
226
320
 
227
321
  // src/actions.ts
228
322
  import * as core from "@actions/core";
229
- import * as github from "@actions/github";
323
+ import * as github2 from "@actions/github";
230
324
  import { Type as T3 } from "@sinclair/typebox";
231
325
  import { Value as Value3 } from "@sinclair/typebox/value";
232
- import { LOG_LEVEL as LOG_LEVEL2, LogReturn as LogReturn2, Logs as Logs2 } from "@ubiquity-os/ubiquity-os-logger";
326
+ import { LogReturn as LogReturn3, Logs as Logs2 } from "@ubiquity-os/ubiquity-os-logger";
233
327
  import { config } from "dotenv";
234
328
 
329
+ // src/types/command.ts
330
+ import { Type as T2 } from "@sinclair/typebox";
331
+ var commandCallSchema = T2.Union([T2.Null(), T2.Object({ name: T2.String(), parameters: T2.Unknown() })]);
332
+
235
333
  // src/types/util.ts
236
334
  import { Type } from "@sinclair/typebox";
237
335
  import { Value as Value2 } from "@sinclair/typebox/value";
@@ -242,10 +340,6 @@ function jsonType(type) {
242
340
  }).Encode((value) => JSON.stringify(value));
243
341
  }
244
342
 
245
- // src/types/command.ts
246
- import { Type as T2 } from "@sinclair/typebox";
247
- var commandCallSchema = T2.Union([T2.Null(), T2.Object({ name: T2.String(), parameters: T2.Unknown() })]);
248
-
249
343
  // src/actions.ts
250
344
  config();
251
345
  var inputSchema2 = T3.Object({
@@ -259,27 +353,19 @@ var inputSchema2 = T3.Object({
259
353
  signature: T3.String()
260
354
  });
261
355
  async function createActionsPlugin(handler, options) {
262
- const pluginOptions = {
263
- logLevel: options?.logLevel ?? LOG_LEVEL2.INFO,
264
- postCommentOnError: options?.postCommentOnError ?? true,
265
- settingsSchema: options?.settingsSchema,
266
- envSchema: options?.envSchema,
267
- commandSchema: options?.commandSchema,
268
- kernelPublicKey: options?.kernelPublicKey ?? KERNEL_PUBLIC_KEY,
269
- bypassSignatureVerification: options?.bypassSignatureVerification || false
270
- };
356
+ const pluginOptions = getPluginOptions(options);
271
357
  const pluginGithubToken = process.env.PLUGIN_GITHUB_TOKEN;
272
358
  if (!pluginGithubToken) {
273
359
  core.setFailed("Error: PLUGIN_GITHUB_TOKEN env is not set");
274
360
  return;
275
361
  }
276
- const body = github.context.payload.inputs;
362
+ const body = github2.context.payload.inputs;
277
363
  const signature = body.signature;
278
364
  if (!pluginOptions.bypassSignatureVerification && !await verifySignature(pluginOptions.kernelPublicKey, body, signature)) {
279
365
  core.setFailed(`Error: Invalid signature`);
280
366
  return;
281
367
  }
282
- const inputPayload = github.context.payload.inputs;
368
+ const inputPayload = github2.context.payload.inputs;
283
369
  const inputSchemaErrors = [...Value3.Errors(inputSchema2, inputPayload)];
284
370
  if (inputSchemaErrors.length) {
285
371
  console.dir(inputSchemaErrors, { depth: null });
@@ -339,7 +425,7 @@ async function createActionsPlugin(handler, options) {
339
425
  if (error instanceof Error) {
340
426
  core.setFailed(error);
341
427
  loggerError = context2.logger.error(`Error: ${error}`, { error });
342
- } else if (error instanceof LogReturn2) {
428
+ } else if (error instanceof LogReturn3) {
343
429
  core.setFailed(error.logMessage.raw);
344
430
  loggerError = error;
345
431
  } else {
@@ -347,34 +433,15 @@ async function createActionsPlugin(handler, options) {
347
433
  loggerError = context2.logger.error(`Error: ${error}`);
348
434
  }
349
435
  if (pluginOptions.postCommentOnError && loggerError) {
350
- await postErrorComment(context2, loggerError);
436
+ await postComment(context2, loggerError);
351
437
  }
352
438
  }
353
439
  }
354
- async function postErrorComment(context2, error) {
355
- if ("issue" in context2.payload && context2.payload.repository?.owner?.login) {
356
- await context2.octokit.rest.issues.createComment({
357
- owner: context2.payload.repository.owner.login,
358
- repo: context2.payload.repository.name,
359
- issue_number: context2.payload.issue.number,
360
- body: `${error.logMessage.diff}
361
- <!--
362
- ${getGithubWorkflowRunUrl()}
363
- ${sanitizeMetadata(error.metadata)}
364
- -->`
365
- });
366
- } else {
367
- context2.logger.info("Cannot post error comment because issue is not found in the payload");
368
- }
369
- }
370
- function getGithubWorkflowRunUrl() {
371
- return `${github.context.payload.repository?.html_url}/actions/runs/${github.context.runId}`;
372
- }
373
440
  async function returnDataToKernel(repoToken, stateId, output) {
374
441
  const octokit = new customOctokit({ auth: repoToken });
375
442
  await octokit.rest.repos.createDispatchEvent({
376
- owner: github.context.repo.owner,
377
- repo: github.context.repo.repo,
443
+ owner: github2.context.repo.owner,
444
+ repo: github2.context.repo.repo,
378
445
  event_type: "return-data-to-ubiquity-os-kernel",
379
446
  client_payload: {
380
447
  state_id: stateId,
@@ -1,7 +1,7 @@
1
1
  import * as _sinclair_typebox from '@sinclair/typebox';
2
2
  import { Static } from '@sinclair/typebox';
3
3
 
4
- declare const runEvent: _sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"branch_protection_configuration" | "branch_protection_configuration.disabled" | "branch_protection_configuration.enabled" | "branch_protection_rule" | "branch_protection_rule.created" | "branch_protection_rule.deleted" | "branch_protection_rule.edited" | "check_run" | "check_run.completed" | "check_run.created" | "check_run.requested_action" | "check_run.rerequested" | "check_suite" | "check_suite.completed" | "check_suite.requested" | "check_suite.rerequested" | "code_scanning_alert" | "code_scanning_alert.appeared_in_branch" | "code_scanning_alert.closed_by_user" | "code_scanning_alert.created" | "code_scanning_alert.fixed" | "code_scanning_alert.reopened" | "code_scanning_alert.reopened_by_user" | "commit_comment" | "commit_comment.created" | "create" | "custom_property" | "custom_property.created" | "custom_property.deleted" | "custom_property.updated" | "custom_property_values" | "custom_property_values.updated" | "delete" | "dependabot_alert" | "dependabot_alert.auto_dismissed" | "dependabot_alert.auto_reopened" | "dependabot_alert.created" | "dependabot_alert.dismissed" | "dependabot_alert.fixed" | "dependabot_alert.reintroduced" | "dependabot_alert.reopened" | "deploy_key" | "deploy_key.created" | "deploy_key.deleted" | "deployment" | "deployment.created" | "deployment_protection_rule" | "deployment_protection_rule.requested" | "deployment_review" | "deployment_review.approved" | "deployment_review.rejected" | "deployment_review.requested" | "deployment_status" | "deployment_status.created" | "discussion" | "discussion.answered" | "discussion.category_changed" | "discussion.closed" | "discussion.created" | "discussion.deleted" | "discussion.edited" | "discussion.labeled" | "discussion.locked" | "discussion.pinned" | "discussion.reopened" | "discussion.transferred" | "discussion.unanswered" | "discussion.unlabeled" | "discussion.unlocked" | "discussion.unpinned" | "discussion_comment" | "discussion_comment.created" | "discussion_comment.deleted" | "discussion_comment.edited" | "fork" | "github_app_authorization" | "github_app_authorization.revoked" | "gollum" | "installation" | "installation.created" | "installation.deleted" | "installation.new_permissions_accepted" | "installation.suspend" | "installation.unsuspend" | "installation_repositories" | "installation_repositories.added" | "installation_repositories.removed" | "installation_target" | "installation_target.renamed" | "issue_comment" | "issue_comment.created" | "issue_comment.deleted" | "issue_comment.edited" | "issues" | "issues.assigned" | "issues.closed" | "issues.deleted" | "issues.demilestoned" | "issues.edited" | "issues.labeled" | "issues.locked" | "issues.milestoned" | "issues.opened" | "issues.pinned" | "issues.reopened" | "issues.transferred" | "issues.unassigned" | "issues.unlabeled" | "issues.unlocked" | "issues.unpinned" | "label" | "label.created" | "label.deleted" | "label.edited" | "marketplace_purchase" | "marketplace_purchase.cancelled" | "marketplace_purchase.changed" | "marketplace_purchase.pending_change" | "marketplace_purchase.pending_change_cancelled" | "marketplace_purchase.purchased" | "member" | "member.added" | "member.edited" | "member.removed" | "membership" | "membership.added" | "membership.removed" | "merge_group" | "merge_group.checks_requested" | "merge_group.destroyed" | "meta" | "meta.deleted" | "milestone" | "milestone.closed" | "milestone.created" | "milestone.deleted" | "milestone.edited" | "milestone.opened" | "org_block" | "org_block.blocked" | "org_block.unblocked" | "organization" | "organization.deleted" | "organization.member_added" | "organization.member_invited" | "organization.member_removed" | "organization.renamed" | "package" | "package.published" | "package.updated" | "page_build" | "personal_access_token_request" | "personal_access_token_request.approved" | "personal_access_token_request.cancelled" | "personal_access_token_request.created" | "personal_access_token_request.denied" | "ping" | "project" | "project.closed" | "project.created" | "project.deleted" | "project.edited" | "project.reopened" | "project_card" | "project_card.converted" | "project_card.created" | "project_card.deleted" | "project_card.edited" | "project_card.moved" | "project_column" | "project_column.created" | "project_column.deleted" | "project_column.edited" | "project_column.moved" | "projects_v2" | "projects_v2.closed" | "projects_v2.created" | "projects_v2.deleted" | "projects_v2.edited" | "projects_v2.reopened" | "projects_v2_item" | "projects_v2_item.archived" | "projects_v2_item.converted" | "projects_v2_item.created" | "projects_v2_item.deleted" | "projects_v2_item.edited" | "projects_v2_item.reordered" | "projects_v2_item.restored" | "public" | "pull_request" | "pull_request.assigned" | "pull_request.auto_merge_disabled" | "pull_request.auto_merge_enabled" | "pull_request.closed" | "pull_request.converted_to_draft" | "pull_request.demilestoned" | "pull_request.dequeued" | "pull_request.edited" | "pull_request.enqueued" | "pull_request.labeled" | "pull_request.locked" | "pull_request.milestoned" | "pull_request.opened" | "pull_request.ready_for_review" | "pull_request.reopened" | "pull_request.review_request_removed" | "pull_request.review_requested" | "pull_request.synchronize" | "pull_request.unassigned" | "pull_request.unlabeled" | "pull_request.unlocked" | "pull_request_review" | "pull_request_review.dismissed" | "pull_request_review.edited" | "pull_request_review.submitted" | "pull_request_review_comment" | "pull_request_review_comment.created" | "pull_request_review_comment.deleted" | "pull_request_review_comment.edited" | "pull_request_review_thread" | "pull_request_review_thread.resolved" | "pull_request_review_thread.unresolved" | "push" | "registry_package" | "registry_package.published" | "registry_package.updated" | "release" | "release.created" | "release.deleted" | "release.edited" | "release.prereleased" | "release.published" | "release.released" | "release.unpublished" | "repository" | "repository.archived" | "repository.created" | "repository.deleted" | "repository.edited" | "repository.privatized" | "repository.publicized" | "repository.renamed" | "repository.transferred" | "repository.unarchived" | "repository_advisory" | "repository_advisory.published" | "repository_advisory.reported" | "repository_dispatch" | "repository_dispatch.sample.collected" | "repository_import" | "repository_ruleset" | "repository_ruleset.created" | "repository_ruleset.deleted" | "repository_ruleset.edited" | "repository_vulnerability_alert" | "repository_vulnerability_alert.create" | "repository_vulnerability_alert.dismiss" | "repository_vulnerability_alert.reopen" | "repository_vulnerability_alert.resolve" | "secret_scanning_alert" | "secret_scanning_alert.created" | "secret_scanning_alert.reopened" | "secret_scanning_alert.resolved" | "secret_scanning_alert.revoked" | "secret_scanning_alert.validated" | "secret_scanning_alert_location" | "secret_scanning_alert_location.created" | "security_advisory" | "security_advisory.published" | "security_advisory.updated" | "security_advisory.withdrawn" | "security_and_analysis" | "sponsorship" | "sponsorship.cancelled" | "sponsorship.created" | "sponsorship.edited" | "sponsorship.pending_cancellation" | "sponsorship.pending_tier_change" | "sponsorship.tier_changed" | "star" | "star.created" | "star.deleted" | "status" | "team" | "team.added_to_repository" | "team.created" | "team.deleted" | "team.edited" | "team.removed_from_repository" | "team_add" | "watch" | "watch.started" | "workflow_dispatch" | "workflow_job" | "workflow_job.completed" | "workflow_job.in_progress" | "workflow_job.queued" | "workflow_job.waiting" | "workflow_run" | "workflow_run.completed" | "workflow_run.in_progress" | "workflow_run.requested">[]>;
4
+ declare const runEvent: _sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"branch_protection_configuration" | "branch_protection_configuration.disabled" | "branch_protection_configuration.enabled" | "branch_protection_rule" | "branch_protection_rule.created" | "branch_protection_rule.deleted" | "branch_protection_rule.edited" | "check_run" | "check_run.completed" | "check_run.created" | "check_run.requested_action" | "check_run.rerequested" | "check_suite" | "check_suite.completed" | "check_suite.requested" | "check_suite.rerequested" | "code_scanning_alert" | "code_scanning_alert.appeared_in_branch" | "code_scanning_alert.closed_by_user" | "code_scanning_alert.created" | "code_scanning_alert.fixed" | "code_scanning_alert.reopened" | "code_scanning_alert.reopened_by_user" | "commit_comment" | "commit_comment.created" | "create" | "custom_property" | "custom_property.created" | "custom_property.deleted" | "custom_property.updated" | "custom_property_values" | "custom_property_values.updated" | "delete" | "dependabot_alert" | "dependabot_alert.auto_dismissed" | "dependabot_alert.auto_reopened" | "dependabot_alert.created" | "dependabot_alert.dismissed" | "dependabot_alert.fixed" | "dependabot_alert.reintroduced" | "dependabot_alert.reopened" | "deploy_key" | "deploy_key.created" | "deploy_key.deleted" | "deployment" | "deployment.created" | "deployment_protection_rule" | "deployment_protection_rule.requested" | "deployment_review" | "deployment_review.approved" | "deployment_review.rejected" | "deployment_review.requested" | "deployment_status" | "deployment_status.created" | "discussion" | "discussion.answered" | "discussion.category_changed" | "discussion.closed" | "discussion.created" | "discussion.deleted" | "discussion.edited" | "discussion.labeled" | "discussion.locked" | "discussion.pinned" | "discussion.reopened" | "discussion.transferred" | "discussion.unanswered" | "discussion.unlabeled" | "discussion.unlocked" | "discussion.unpinned" | "discussion_comment" | "discussion_comment.created" | "discussion_comment.deleted" | "discussion_comment.edited" | "fork" | "github_app_authorization" | "github_app_authorization.revoked" | "gollum" | "installation" | "installation.created" | "installation.deleted" | "installation.new_permissions_accepted" | "installation.suspend" | "installation.unsuspend" | "installation_repositories" | "installation_repositories.added" | "installation_repositories.removed" | "installation_target" | "installation_target.renamed" | "issue_comment" | "issue_comment.created" | "issue_comment.deleted" | "issue_comment.edited" | "issues" | "issues.assigned" | "issues.closed" | "issues.deleted" | "issues.demilestoned" | "issues.edited" | "issues.labeled" | "issues.locked" | "issues.milestoned" | "issues.opened" | "issues.pinned" | "issues.reopened" | "issues.transferred" | "issues.unassigned" | "issues.unlabeled" | "issues.unlocked" | "issues.unpinned" | "label" | "label.created" | "label.deleted" | "label.edited" | "marketplace_purchase" | "marketplace_purchase.cancelled" | "marketplace_purchase.changed" | "marketplace_purchase.pending_change" | "marketplace_purchase.pending_change_cancelled" | "marketplace_purchase.purchased" | "member" | "member.added" | "member.edited" | "member.removed" | "membership" | "membership.added" | "membership.removed" | "merge_group" | "merge_group.checks_requested" | "merge_group.destroyed" | "meta" | "meta.deleted" | "milestone" | "milestone.closed" | "milestone.created" | "milestone.deleted" | "milestone.edited" | "milestone.opened" | "org_block" | "org_block.blocked" | "org_block.unblocked" | "organization" | "organization.deleted" | "organization.member_added" | "organization.member_invited" | "organization.member_removed" | "organization.renamed" | "package" | "package.published" | "package.updated" | "page_build" | "personal_access_token_request" | "personal_access_token_request.approved" | "personal_access_token_request.cancelled" | "personal_access_token_request.created" | "personal_access_token_request.denied" | "ping" | "project" | "project.closed" | "project.created" | "project.deleted" | "project.edited" | "project.reopened" | "project_card" | "project_card.converted" | "project_card.created" | "project_card.deleted" | "project_card.edited" | "project_card.moved" | "project_column" | "project_column.created" | "project_column.deleted" | "project_column.edited" | "project_column.moved" | "projects_v2" | "projects_v2.closed" | "projects_v2.created" | "projects_v2.deleted" | "projects_v2.edited" | "projects_v2.reopened" | "projects_v2_item" | "projects_v2_item.archived" | "projects_v2_item.converted" | "projects_v2_item.created" | "projects_v2_item.deleted" | "projects_v2_item.edited" | "projects_v2_item.reordered" | "projects_v2_item.restored" | "projects_v2_status_update" | "projects_v2_status_update.created" | "projects_v2_status_update.deleted" | "projects_v2_status_update.edited" | "public" | "pull_request" | "pull_request.assigned" | "pull_request.auto_merge_disabled" | "pull_request.auto_merge_enabled" | "pull_request.closed" | "pull_request.converted_to_draft" | "pull_request.demilestoned" | "pull_request.dequeued" | "pull_request.edited" | "pull_request.enqueued" | "pull_request.labeled" | "pull_request.locked" | "pull_request.milestoned" | "pull_request.opened" | "pull_request.ready_for_review" | "pull_request.reopened" | "pull_request.review_request_removed" | "pull_request.review_requested" | "pull_request.synchronize" | "pull_request.unassigned" | "pull_request.unlabeled" | "pull_request.unlocked" | "pull_request_review" | "pull_request_review.dismissed" | "pull_request_review.edited" | "pull_request_review.submitted" | "pull_request_review_comment" | "pull_request_review_comment.created" | "pull_request_review_comment.deleted" | "pull_request_review_comment.edited" | "pull_request_review_thread" | "pull_request_review_thread.resolved" | "pull_request_review_thread.unresolved" | "push" | "registry_package" | "registry_package.published" | "registry_package.updated" | "release" | "release.created" | "release.deleted" | "release.edited" | "release.prereleased" | "release.published" | "release.released" | "release.unpublished" | "repository" | "repository.archived" | "repository.created" | "repository.deleted" | "repository.edited" | "repository.privatized" | "repository.publicized" | "repository.renamed" | "repository.transferred" | "repository.unarchived" | "repository_advisory" | "repository_advisory.published" | "repository_advisory.reported" | "repository_dispatch" | "repository_dispatch.sample.collected" | "repository_import" | "repository_ruleset" | "repository_ruleset.created" | "repository_ruleset.deleted" | "repository_ruleset.edited" | "repository_vulnerability_alert" | "repository_vulnerability_alert.create" | "repository_vulnerability_alert.dismiss" | "repository_vulnerability_alert.reopen" | "repository_vulnerability_alert.resolve" | "secret_scanning_alert" | "secret_scanning_alert.created" | "secret_scanning_alert.reopened" | "secret_scanning_alert.resolved" | "secret_scanning_alert.validated" | "secret_scanning_alert_location" | "secret_scanning_alert_location.created" | "security_advisory" | "security_advisory.published" | "security_advisory.updated" | "security_advisory.withdrawn" | "security_and_analysis" | "sponsorship" | "sponsorship.cancelled" | "sponsorship.created" | "sponsorship.edited" | "sponsorship.pending_cancellation" | "sponsorship.pending_tier_change" | "sponsorship.tier_changed" | "star" | "star.created" | "star.deleted" | "status" | "sub_issues" | "sub_issues.parent_issue_added" | "sub_issues.parent_issue_removed" | "sub_issues.sub_issue_added" | "sub_issues.sub_issue_removed" | "team" | "team.added_to_repository" | "team.created" | "team.deleted" | "team.edited" | "team.removed_from_repository" | "team_add" | "watch" | "watch.started" | "workflow_dispatch" | "workflow_job" | "workflow_job.completed" | "workflow_job.in_progress" | "workflow_job.queued" | "workflow_job.waiting" | "workflow_run" | "workflow_run.completed" | "workflow_run.in_progress" | "workflow_run.requested">[]>;
5
5
  declare const commandSchema: _sinclair_typebox.TObject<{
6
6
  description: _sinclair_typebox.TString;
7
7
  "ubiquity:example": _sinclair_typebox.TString;
@@ -15,7 +15,7 @@ declare const manifestSchema: _sinclair_typebox.TObject<{
15
15
  "ubiquity:example": _sinclair_typebox.TString;
16
16
  parameters: _sinclair_typebox.TOptional<_sinclair_typebox.TRecord<_sinclair_typebox.TString, _sinclair_typebox.TAny>>;
17
17
  }>>>;
18
- "ubiquity:listeners": _sinclair_typebox.TOptional<_sinclair_typebox.TArray<_sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"branch_protection_configuration" | "branch_protection_configuration.disabled" | "branch_protection_configuration.enabled" | "branch_protection_rule" | "branch_protection_rule.created" | "branch_protection_rule.deleted" | "branch_protection_rule.edited" | "check_run" | "check_run.completed" | "check_run.created" | "check_run.requested_action" | "check_run.rerequested" | "check_suite" | "check_suite.completed" | "check_suite.requested" | "check_suite.rerequested" | "code_scanning_alert" | "code_scanning_alert.appeared_in_branch" | "code_scanning_alert.closed_by_user" | "code_scanning_alert.created" | "code_scanning_alert.fixed" | "code_scanning_alert.reopened" | "code_scanning_alert.reopened_by_user" | "commit_comment" | "commit_comment.created" | "create" | "custom_property" | "custom_property.created" | "custom_property.deleted" | "custom_property.updated" | "custom_property_values" | "custom_property_values.updated" | "delete" | "dependabot_alert" | "dependabot_alert.auto_dismissed" | "dependabot_alert.auto_reopened" | "dependabot_alert.created" | "dependabot_alert.dismissed" | "dependabot_alert.fixed" | "dependabot_alert.reintroduced" | "dependabot_alert.reopened" | "deploy_key" | "deploy_key.created" | "deploy_key.deleted" | "deployment" | "deployment.created" | "deployment_protection_rule" | "deployment_protection_rule.requested" | "deployment_review" | "deployment_review.approved" | "deployment_review.rejected" | "deployment_review.requested" | "deployment_status" | "deployment_status.created" | "discussion" | "discussion.answered" | "discussion.category_changed" | "discussion.closed" | "discussion.created" | "discussion.deleted" | "discussion.edited" | "discussion.labeled" | "discussion.locked" | "discussion.pinned" | "discussion.reopened" | "discussion.transferred" | "discussion.unanswered" | "discussion.unlabeled" | "discussion.unlocked" | "discussion.unpinned" | "discussion_comment" | "discussion_comment.created" | "discussion_comment.deleted" | "discussion_comment.edited" | "fork" | "github_app_authorization" | "github_app_authorization.revoked" | "gollum" | "installation" | "installation.created" | "installation.deleted" | "installation.new_permissions_accepted" | "installation.suspend" | "installation.unsuspend" | "installation_repositories" | "installation_repositories.added" | "installation_repositories.removed" | "installation_target" | "installation_target.renamed" | "issue_comment" | "issue_comment.created" | "issue_comment.deleted" | "issue_comment.edited" | "issues" | "issues.assigned" | "issues.closed" | "issues.deleted" | "issues.demilestoned" | "issues.edited" | "issues.labeled" | "issues.locked" | "issues.milestoned" | "issues.opened" | "issues.pinned" | "issues.reopened" | "issues.transferred" | "issues.unassigned" | "issues.unlabeled" | "issues.unlocked" | "issues.unpinned" | "label" | "label.created" | "label.deleted" | "label.edited" | "marketplace_purchase" | "marketplace_purchase.cancelled" | "marketplace_purchase.changed" | "marketplace_purchase.pending_change" | "marketplace_purchase.pending_change_cancelled" | "marketplace_purchase.purchased" | "member" | "member.added" | "member.edited" | "member.removed" | "membership" | "membership.added" | "membership.removed" | "merge_group" | "merge_group.checks_requested" | "merge_group.destroyed" | "meta" | "meta.deleted" | "milestone" | "milestone.closed" | "milestone.created" | "milestone.deleted" | "milestone.edited" | "milestone.opened" | "org_block" | "org_block.blocked" | "org_block.unblocked" | "organization" | "organization.deleted" | "organization.member_added" | "organization.member_invited" | "organization.member_removed" | "organization.renamed" | "package" | "package.published" | "package.updated" | "page_build" | "personal_access_token_request" | "personal_access_token_request.approved" | "personal_access_token_request.cancelled" | "personal_access_token_request.created" | "personal_access_token_request.denied" | "ping" | "project" | "project.closed" | "project.created" | "project.deleted" | "project.edited" | "project.reopened" | "project_card" | "project_card.converted" | "project_card.created" | "project_card.deleted" | "project_card.edited" | "project_card.moved" | "project_column" | "project_column.created" | "project_column.deleted" | "project_column.edited" | "project_column.moved" | "projects_v2" | "projects_v2.closed" | "projects_v2.created" | "projects_v2.deleted" | "projects_v2.edited" | "projects_v2.reopened" | "projects_v2_item" | "projects_v2_item.archived" | "projects_v2_item.converted" | "projects_v2_item.created" | "projects_v2_item.deleted" | "projects_v2_item.edited" | "projects_v2_item.reordered" | "projects_v2_item.restored" | "public" | "pull_request" | "pull_request.assigned" | "pull_request.auto_merge_disabled" | "pull_request.auto_merge_enabled" | "pull_request.closed" | "pull_request.converted_to_draft" | "pull_request.demilestoned" | "pull_request.dequeued" | "pull_request.edited" | "pull_request.enqueued" | "pull_request.labeled" | "pull_request.locked" | "pull_request.milestoned" | "pull_request.opened" | "pull_request.ready_for_review" | "pull_request.reopened" | "pull_request.review_request_removed" | "pull_request.review_requested" | "pull_request.synchronize" | "pull_request.unassigned" | "pull_request.unlabeled" | "pull_request.unlocked" | "pull_request_review" | "pull_request_review.dismissed" | "pull_request_review.edited" | "pull_request_review.submitted" | "pull_request_review_comment" | "pull_request_review_comment.created" | "pull_request_review_comment.deleted" | "pull_request_review_comment.edited" | "pull_request_review_thread" | "pull_request_review_thread.resolved" | "pull_request_review_thread.unresolved" | "push" | "registry_package" | "registry_package.published" | "registry_package.updated" | "release" | "release.created" | "release.deleted" | "release.edited" | "release.prereleased" | "release.published" | "release.released" | "release.unpublished" | "repository" | "repository.archived" | "repository.created" | "repository.deleted" | "repository.edited" | "repository.privatized" | "repository.publicized" | "repository.renamed" | "repository.transferred" | "repository.unarchived" | "repository_advisory" | "repository_advisory.published" | "repository_advisory.reported" | "repository_dispatch" | "repository_dispatch.sample.collected" | "repository_import" | "repository_ruleset" | "repository_ruleset.created" | "repository_ruleset.deleted" | "repository_ruleset.edited" | "repository_vulnerability_alert" | "repository_vulnerability_alert.create" | "repository_vulnerability_alert.dismiss" | "repository_vulnerability_alert.reopen" | "repository_vulnerability_alert.resolve" | "secret_scanning_alert" | "secret_scanning_alert.created" | "secret_scanning_alert.reopened" | "secret_scanning_alert.resolved" | "secret_scanning_alert.revoked" | "secret_scanning_alert.validated" | "secret_scanning_alert_location" | "secret_scanning_alert_location.created" | "security_advisory" | "security_advisory.published" | "security_advisory.updated" | "security_advisory.withdrawn" | "security_and_analysis" | "sponsorship" | "sponsorship.cancelled" | "sponsorship.created" | "sponsorship.edited" | "sponsorship.pending_cancellation" | "sponsorship.pending_tier_change" | "sponsorship.tier_changed" | "star" | "star.created" | "star.deleted" | "status" | "team" | "team.added_to_repository" | "team.created" | "team.deleted" | "team.edited" | "team.removed_from_repository" | "team_add" | "watch" | "watch.started" | "workflow_dispatch" | "workflow_job" | "workflow_job.completed" | "workflow_job.in_progress" | "workflow_job.queued" | "workflow_job.waiting" | "workflow_run" | "workflow_run.completed" | "workflow_run.in_progress" | "workflow_run.requested">[]>>>;
18
+ "ubiquity:listeners": _sinclair_typebox.TOptional<_sinclair_typebox.TArray<_sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"branch_protection_configuration" | "branch_protection_configuration.disabled" | "branch_protection_configuration.enabled" | "branch_protection_rule" | "branch_protection_rule.created" | "branch_protection_rule.deleted" | "branch_protection_rule.edited" | "check_run" | "check_run.completed" | "check_run.created" | "check_run.requested_action" | "check_run.rerequested" | "check_suite" | "check_suite.completed" | "check_suite.requested" | "check_suite.rerequested" | "code_scanning_alert" | "code_scanning_alert.appeared_in_branch" | "code_scanning_alert.closed_by_user" | "code_scanning_alert.created" | "code_scanning_alert.fixed" | "code_scanning_alert.reopened" | "code_scanning_alert.reopened_by_user" | "commit_comment" | "commit_comment.created" | "create" | "custom_property" | "custom_property.created" | "custom_property.deleted" | "custom_property.updated" | "custom_property_values" | "custom_property_values.updated" | "delete" | "dependabot_alert" | "dependabot_alert.auto_dismissed" | "dependabot_alert.auto_reopened" | "dependabot_alert.created" | "dependabot_alert.dismissed" | "dependabot_alert.fixed" | "dependabot_alert.reintroduced" | "dependabot_alert.reopened" | "deploy_key" | "deploy_key.created" | "deploy_key.deleted" | "deployment" | "deployment.created" | "deployment_protection_rule" | "deployment_protection_rule.requested" | "deployment_review" | "deployment_review.approved" | "deployment_review.rejected" | "deployment_review.requested" | "deployment_status" | "deployment_status.created" | "discussion" | "discussion.answered" | "discussion.category_changed" | "discussion.closed" | "discussion.created" | "discussion.deleted" | "discussion.edited" | "discussion.labeled" | "discussion.locked" | "discussion.pinned" | "discussion.reopened" | "discussion.transferred" | "discussion.unanswered" | "discussion.unlabeled" | "discussion.unlocked" | "discussion.unpinned" | "discussion_comment" | "discussion_comment.created" | "discussion_comment.deleted" | "discussion_comment.edited" | "fork" | "github_app_authorization" | "github_app_authorization.revoked" | "gollum" | "installation" | "installation.created" | "installation.deleted" | "installation.new_permissions_accepted" | "installation.suspend" | "installation.unsuspend" | "installation_repositories" | "installation_repositories.added" | "installation_repositories.removed" | "installation_target" | "installation_target.renamed" | "issue_comment" | "issue_comment.created" | "issue_comment.deleted" | "issue_comment.edited" | "issues" | "issues.assigned" | "issues.closed" | "issues.deleted" | "issues.demilestoned" | "issues.edited" | "issues.labeled" | "issues.locked" | "issues.milestoned" | "issues.opened" | "issues.pinned" | "issues.reopened" | "issues.transferred" | "issues.unassigned" | "issues.unlabeled" | "issues.unlocked" | "issues.unpinned" | "label" | "label.created" | "label.deleted" | "label.edited" | "marketplace_purchase" | "marketplace_purchase.cancelled" | "marketplace_purchase.changed" | "marketplace_purchase.pending_change" | "marketplace_purchase.pending_change_cancelled" | "marketplace_purchase.purchased" | "member" | "member.added" | "member.edited" | "member.removed" | "membership" | "membership.added" | "membership.removed" | "merge_group" | "merge_group.checks_requested" | "merge_group.destroyed" | "meta" | "meta.deleted" | "milestone" | "milestone.closed" | "milestone.created" | "milestone.deleted" | "milestone.edited" | "milestone.opened" | "org_block" | "org_block.blocked" | "org_block.unblocked" | "organization" | "organization.deleted" | "organization.member_added" | "organization.member_invited" | "organization.member_removed" | "organization.renamed" | "package" | "package.published" | "package.updated" | "page_build" | "personal_access_token_request" | "personal_access_token_request.approved" | "personal_access_token_request.cancelled" | "personal_access_token_request.created" | "personal_access_token_request.denied" | "ping" | "project" | "project.closed" | "project.created" | "project.deleted" | "project.edited" | "project.reopened" | "project_card" | "project_card.converted" | "project_card.created" | "project_card.deleted" | "project_card.edited" | "project_card.moved" | "project_column" | "project_column.created" | "project_column.deleted" | "project_column.edited" | "project_column.moved" | "projects_v2" | "projects_v2.closed" | "projects_v2.created" | "projects_v2.deleted" | "projects_v2.edited" | "projects_v2.reopened" | "projects_v2_item" | "projects_v2_item.archived" | "projects_v2_item.converted" | "projects_v2_item.created" | "projects_v2_item.deleted" | "projects_v2_item.edited" | "projects_v2_item.reordered" | "projects_v2_item.restored" | "projects_v2_status_update" | "projects_v2_status_update.created" | "projects_v2_status_update.deleted" | "projects_v2_status_update.edited" | "public" | "pull_request" | "pull_request.assigned" | "pull_request.auto_merge_disabled" | "pull_request.auto_merge_enabled" | "pull_request.closed" | "pull_request.converted_to_draft" | "pull_request.demilestoned" | "pull_request.dequeued" | "pull_request.edited" | "pull_request.enqueued" | "pull_request.labeled" | "pull_request.locked" | "pull_request.milestoned" | "pull_request.opened" | "pull_request.ready_for_review" | "pull_request.reopened" | "pull_request.review_request_removed" | "pull_request.review_requested" | "pull_request.synchronize" | "pull_request.unassigned" | "pull_request.unlabeled" | "pull_request.unlocked" | "pull_request_review" | "pull_request_review.dismissed" | "pull_request_review.edited" | "pull_request_review.submitted" | "pull_request_review_comment" | "pull_request_review_comment.created" | "pull_request_review_comment.deleted" | "pull_request_review_comment.edited" | "pull_request_review_thread" | "pull_request_review_thread.resolved" | "pull_request_review_thread.unresolved" | "push" | "registry_package" | "registry_package.published" | "registry_package.updated" | "release" | "release.created" | "release.deleted" | "release.edited" | "release.prereleased" | "release.published" | "release.released" | "release.unpublished" | "repository" | "repository.archived" | "repository.created" | "repository.deleted" | "repository.edited" | "repository.privatized" | "repository.publicized" | "repository.renamed" | "repository.transferred" | "repository.unarchived" | "repository_advisory" | "repository_advisory.published" | "repository_advisory.reported" | "repository_dispatch" | "repository_dispatch.sample.collected" | "repository_import" | "repository_ruleset" | "repository_ruleset.created" | "repository_ruleset.deleted" | "repository_ruleset.edited" | "repository_vulnerability_alert" | "repository_vulnerability_alert.create" | "repository_vulnerability_alert.dismiss" | "repository_vulnerability_alert.reopen" | "repository_vulnerability_alert.resolve" | "secret_scanning_alert" | "secret_scanning_alert.created" | "secret_scanning_alert.reopened" | "secret_scanning_alert.resolved" | "secret_scanning_alert.validated" | "secret_scanning_alert_location" | "secret_scanning_alert_location.created" | "security_advisory" | "security_advisory.published" | "security_advisory.updated" | "security_advisory.withdrawn" | "security_and_analysis" | "sponsorship" | "sponsorship.cancelled" | "sponsorship.created" | "sponsorship.edited" | "sponsorship.pending_cancellation" | "sponsorship.pending_tier_change" | "sponsorship.tier_changed" | "star" | "star.created" | "star.deleted" | "status" | "sub_issues" | "sub_issues.parent_issue_added" | "sub_issues.parent_issue_removed" | "sub_issues.sub_issue_added" | "sub_issues.sub_issue_removed" | "team" | "team.added_to_repository" | "team.created" | "team.deleted" | "team.edited" | "team.removed_from_repository" | "team_add" | "watch" | "watch.started" | "workflow_dispatch" | "workflow_job" | "workflow_job.completed" | "workflow_job.in_progress" | "workflow_job.queued" | "workflow_job.waiting" | "workflow_run" | "workflow_run.completed" | "workflow_run.in_progress" | "workflow_run.requested">[]>>>;
19
19
  configuration: _sinclair_typebox.TOptional<_sinclair_typebox.TRecord<_sinclair_typebox.TString, _sinclair_typebox.TAny>>;
20
20
  skipBotEvents: _sinclair_typebox.TOptional<_sinclair_typebox.TBoolean>;
21
21
  }>;
@@ -1,7 +1,7 @@
1
1
  import * as _sinclair_typebox from '@sinclair/typebox';
2
2
  import { Static } from '@sinclair/typebox';
3
3
 
4
- declare const runEvent: _sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"branch_protection_configuration" | "branch_protection_configuration.disabled" | "branch_protection_configuration.enabled" | "branch_protection_rule" | "branch_protection_rule.created" | "branch_protection_rule.deleted" | "branch_protection_rule.edited" | "check_run" | "check_run.completed" | "check_run.created" | "check_run.requested_action" | "check_run.rerequested" | "check_suite" | "check_suite.completed" | "check_suite.requested" | "check_suite.rerequested" | "code_scanning_alert" | "code_scanning_alert.appeared_in_branch" | "code_scanning_alert.closed_by_user" | "code_scanning_alert.created" | "code_scanning_alert.fixed" | "code_scanning_alert.reopened" | "code_scanning_alert.reopened_by_user" | "commit_comment" | "commit_comment.created" | "create" | "custom_property" | "custom_property.created" | "custom_property.deleted" | "custom_property.updated" | "custom_property_values" | "custom_property_values.updated" | "delete" | "dependabot_alert" | "dependabot_alert.auto_dismissed" | "dependabot_alert.auto_reopened" | "dependabot_alert.created" | "dependabot_alert.dismissed" | "dependabot_alert.fixed" | "dependabot_alert.reintroduced" | "dependabot_alert.reopened" | "deploy_key" | "deploy_key.created" | "deploy_key.deleted" | "deployment" | "deployment.created" | "deployment_protection_rule" | "deployment_protection_rule.requested" | "deployment_review" | "deployment_review.approved" | "deployment_review.rejected" | "deployment_review.requested" | "deployment_status" | "deployment_status.created" | "discussion" | "discussion.answered" | "discussion.category_changed" | "discussion.closed" | "discussion.created" | "discussion.deleted" | "discussion.edited" | "discussion.labeled" | "discussion.locked" | "discussion.pinned" | "discussion.reopened" | "discussion.transferred" | "discussion.unanswered" | "discussion.unlabeled" | "discussion.unlocked" | "discussion.unpinned" | "discussion_comment" | "discussion_comment.created" | "discussion_comment.deleted" | "discussion_comment.edited" | "fork" | "github_app_authorization" | "github_app_authorization.revoked" | "gollum" | "installation" | "installation.created" | "installation.deleted" | "installation.new_permissions_accepted" | "installation.suspend" | "installation.unsuspend" | "installation_repositories" | "installation_repositories.added" | "installation_repositories.removed" | "installation_target" | "installation_target.renamed" | "issue_comment" | "issue_comment.created" | "issue_comment.deleted" | "issue_comment.edited" | "issues" | "issues.assigned" | "issues.closed" | "issues.deleted" | "issues.demilestoned" | "issues.edited" | "issues.labeled" | "issues.locked" | "issues.milestoned" | "issues.opened" | "issues.pinned" | "issues.reopened" | "issues.transferred" | "issues.unassigned" | "issues.unlabeled" | "issues.unlocked" | "issues.unpinned" | "label" | "label.created" | "label.deleted" | "label.edited" | "marketplace_purchase" | "marketplace_purchase.cancelled" | "marketplace_purchase.changed" | "marketplace_purchase.pending_change" | "marketplace_purchase.pending_change_cancelled" | "marketplace_purchase.purchased" | "member" | "member.added" | "member.edited" | "member.removed" | "membership" | "membership.added" | "membership.removed" | "merge_group" | "merge_group.checks_requested" | "merge_group.destroyed" | "meta" | "meta.deleted" | "milestone" | "milestone.closed" | "milestone.created" | "milestone.deleted" | "milestone.edited" | "milestone.opened" | "org_block" | "org_block.blocked" | "org_block.unblocked" | "organization" | "organization.deleted" | "organization.member_added" | "organization.member_invited" | "organization.member_removed" | "organization.renamed" | "package" | "package.published" | "package.updated" | "page_build" | "personal_access_token_request" | "personal_access_token_request.approved" | "personal_access_token_request.cancelled" | "personal_access_token_request.created" | "personal_access_token_request.denied" | "ping" | "project" | "project.closed" | "project.created" | "project.deleted" | "project.edited" | "project.reopened" | "project_card" | "project_card.converted" | "project_card.created" | "project_card.deleted" | "project_card.edited" | "project_card.moved" | "project_column" | "project_column.created" | "project_column.deleted" | "project_column.edited" | "project_column.moved" | "projects_v2" | "projects_v2.closed" | "projects_v2.created" | "projects_v2.deleted" | "projects_v2.edited" | "projects_v2.reopened" | "projects_v2_item" | "projects_v2_item.archived" | "projects_v2_item.converted" | "projects_v2_item.created" | "projects_v2_item.deleted" | "projects_v2_item.edited" | "projects_v2_item.reordered" | "projects_v2_item.restored" | "public" | "pull_request" | "pull_request.assigned" | "pull_request.auto_merge_disabled" | "pull_request.auto_merge_enabled" | "pull_request.closed" | "pull_request.converted_to_draft" | "pull_request.demilestoned" | "pull_request.dequeued" | "pull_request.edited" | "pull_request.enqueued" | "pull_request.labeled" | "pull_request.locked" | "pull_request.milestoned" | "pull_request.opened" | "pull_request.ready_for_review" | "pull_request.reopened" | "pull_request.review_request_removed" | "pull_request.review_requested" | "pull_request.synchronize" | "pull_request.unassigned" | "pull_request.unlabeled" | "pull_request.unlocked" | "pull_request_review" | "pull_request_review.dismissed" | "pull_request_review.edited" | "pull_request_review.submitted" | "pull_request_review_comment" | "pull_request_review_comment.created" | "pull_request_review_comment.deleted" | "pull_request_review_comment.edited" | "pull_request_review_thread" | "pull_request_review_thread.resolved" | "pull_request_review_thread.unresolved" | "push" | "registry_package" | "registry_package.published" | "registry_package.updated" | "release" | "release.created" | "release.deleted" | "release.edited" | "release.prereleased" | "release.published" | "release.released" | "release.unpublished" | "repository" | "repository.archived" | "repository.created" | "repository.deleted" | "repository.edited" | "repository.privatized" | "repository.publicized" | "repository.renamed" | "repository.transferred" | "repository.unarchived" | "repository_advisory" | "repository_advisory.published" | "repository_advisory.reported" | "repository_dispatch" | "repository_dispatch.sample.collected" | "repository_import" | "repository_ruleset" | "repository_ruleset.created" | "repository_ruleset.deleted" | "repository_ruleset.edited" | "repository_vulnerability_alert" | "repository_vulnerability_alert.create" | "repository_vulnerability_alert.dismiss" | "repository_vulnerability_alert.reopen" | "repository_vulnerability_alert.resolve" | "secret_scanning_alert" | "secret_scanning_alert.created" | "secret_scanning_alert.reopened" | "secret_scanning_alert.resolved" | "secret_scanning_alert.revoked" | "secret_scanning_alert.validated" | "secret_scanning_alert_location" | "secret_scanning_alert_location.created" | "security_advisory" | "security_advisory.published" | "security_advisory.updated" | "security_advisory.withdrawn" | "security_and_analysis" | "sponsorship" | "sponsorship.cancelled" | "sponsorship.created" | "sponsorship.edited" | "sponsorship.pending_cancellation" | "sponsorship.pending_tier_change" | "sponsorship.tier_changed" | "star" | "star.created" | "star.deleted" | "status" | "team" | "team.added_to_repository" | "team.created" | "team.deleted" | "team.edited" | "team.removed_from_repository" | "team_add" | "watch" | "watch.started" | "workflow_dispatch" | "workflow_job" | "workflow_job.completed" | "workflow_job.in_progress" | "workflow_job.queued" | "workflow_job.waiting" | "workflow_run" | "workflow_run.completed" | "workflow_run.in_progress" | "workflow_run.requested">[]>;
4
+ declare const runEvent: _sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"branch_protection_configuration" | "branch_protection_configuration.disabled" | "branch_protection_configuration.enabled" | "branch_protection_rule" | "branch_protection_rule.created" | "branch_protection_rule.deleted" | "branch_protection_rule.edited" | "check_run" | "check_run.completed" | "check_run.created" | "check_run.requested_action" | "check_run.rerequested" | "check_suite" | "check_suite.completed" | "check_suite.requested" | "check_suite.rerequested" | "code_scanning_alert" | "code_scanning_alert.appeared_in_branch" | "code_scanning_alert.closed_by_user" | "code_scanning_alert.created" | "code_scanning_alert.fixed" | "code_scanning_alert.reopened" | "code_scanning_alert.reopened_by_user" | "commit_comment" | "commit_comment.created" | "create" | "custom_property" | "custom_property.created" | "custom_property.deleted" | "custom_property.updated" | "custom_property_values" | "custom_property_values.updated" | "delete" | "dependabot_alert" | "dependabot_alert.auto_dismissed" | "dependabot_alert.auto_reopened" | "dependabot_alert.created" | "dependabot_alert.dismissed" | "dependabot_alert.fixed" | "dependabot_alert.reintroduced" | "dependabot_alert.reopened" | "deploy_key" | "deploy_key.created" | "deploy_key.deleted" | "deployment" | "deployment.created" | "deployment_protection_rule" | "deployment_protection_rule.requested" | "deployment_review" | "deployment_review.approved" | "deployment_review.rejected" | "deployment_review.requested" | "deployment_status" | "deployment_status.created" | "discussion" | "discussion.answered" | "discussion.category_changed" | "discussion.closed" | "discussion.created" | "discussion.deleted" | "discussion.edited" | "discussion.labeled" | "discussion.locked" | "discussion.pinned" | "discussion.reopened" | "discussion.transferred" | "discussion.unanswered" | "discussion.unlabeled" | "discussion.unlocked" | "discussion.unpinned" | "discussion_comment" | "discussion_comment.created" | "discussion_comment.deleted" | "discussion_comment.edited" | "fork" | "github_app_authorization" | "github_app_authorization.revoked" | "gollum" | "installation" | "installation.created" | "installation.deleted" | "installation.new_permissions_accepted" | "installation.suspend" | "installation.unsuspend" | "installation_repositories" | "installation_repositories.added" | "installation_repositories.removed" | "installation_target" | "installation_target.renamed" | "issue_comment" | "issue_comment.created" | "issue_comment.deleted" | "issue_comment.edited" | "issues" | "issues.assigned" | "issues.closed" | "issues.deleted" | "issues.demilestoned" | "issues.edited" | "issues.labeled" | "issues.locked" | "issues.milestoned" | "issues.opened" | "issues.pinned" | "issues.reopened" | "issues.transferred" | "issues.unassigned" | "issues.unlabeled" | "issues.unlocked" | "issues.unpinned" | "label" | "label.created" | "label.deleted" | "label.edited" | "marketplace_purchase" | "marketplace_purchase.cancelled" | "marketplace_purchase.changed" | "marketplace_purchase.pending_change" | "marketplace_purchase.pending_change_cancelled" | "marketplace_purchase.purchased" | "member" | "member.added" | "member.edited" | "member.removed" | "membership" | "membership.added" | "membership.removed" | "merge_group" | "merge_group.checks_requested" | "merge_group.destroyed" | "meta" | "meta.deleted" | "milestone" | "milestone.closed" | "milestone.created" | "milestone.deleted" | "milestone.edited" | "milestone.opened" | "org_block" | "org_block.blocked" | "org_block.unblocked" | "organization" | "organization.deleted" | "organization.member_added" | "organization.member_invited" | "organization.member_removed" | "organization.renamed" | "package" | "package.published" | "package.updated" | "page_build" | "personal_access_token_request" | "personal_access_token_request.approved" | "personal_access_token_request.cancelled" | "personal_access_token_request.created" | "personal_access_token_request.denied" | "ping" | "project" | "project.closed" | "project.created" | "project.deleted" | "project.edited" | "project.reopened" | "project_card" | "project_card.converted" | "project_card.created" | "project_card.deleted" | "project_card.edited" | "project_card.moved" | "project_column" | "project_column.created" | "project_column.deleted" | "project_column.edited" | "project_column.moved" | "projects_v2" | "projects_v2.closed" | "projects_v2.created" | "projects_v2.deleted" | "projects_v2.edited" | "projects_v2.reopened" | "projects_v2_item" | "projects_v2_item.archived" | "projects_v2_item.converted" | "projects_v2_item.created" | "projects_v2_item.deleted" | "projects_v2_item.edited" | "projects_v2_item.reordered" | "projects_v2_item.restored" | "projects_v2_status_update" | "projects_v2_status_update.created" | "projects_v2_status_update.deleted" | "projects_v2_status_update.edited" | "public" | "pull_request" | "pull_request.assigned" | "pull_request.auto_merge_disabled" | "pull_request.auto_merge_enabled" | "pull_request.closed" | "pull_request.converted_to_draft" | "pull_request.demilestoned" | "pull_request.dequeued" | "pull_request.edited" | "pull_request.enqueued" | "pull_request.labeled" | "pull_request.locked" | "pull_request.milestoned" | "pull_request.opened" | "pull_request.ready_for_review" | "pull_request.reopened" | "pull_request.review_request_removed" | "pull_request.review_requested" | "pull_request.synchronize" | "pull_request.unassigned" | "pull_request.unlabeled" | "pull_request.unlocked" | "pull_request_review" | "pull_request_review.dismissed" | "pull_request_review.edited" | "pull_request_review.submitted" | "pull_request_review_comment" | "pull_request_review_comment.created" | "pull_request_review_comment.deleted" | "pull_request_review_comment.edited" | "pull_request_review_thread" | "pull_request_review_thread.resolved" | "pull_request_review_thread.unresolved" | "push" | "registry_package" | "registry_package.published" | "registry_package.updated" | "release" | "release.created" | "release.deleted" | "release.edited" | "release.prereleased" | "release.published" | "release.released" | "release.unpublished" | "repository" | "repository.archived" | "repository.created" | "repository.deleted" | "repository.edited" | "repository.privatized" | "repository.publicized" | "repository.renamed" | "repository.transferred" | "repository.unarchived" | "repository_advisory" | "repository_advisory.published" | "repository_advisory.reported" | "repository_dispatch" | "repository_dispatch.sample.collected" | "repository_import" | "repository_ruleset" | "repository_ruleset.created" | "repository_ruleset.deleted" | "repository_ruleset.edited" | "repository_vulnerability_alert" | "repository_vulnerability_alert.create" | "repository_vulnerability_alert.dismiss" | "repository_vulnerability_alert.reopen" | "repository_vulnerability_alert.resolve" | "secret_scanning_alert" | "secret_scanning_alert.created" | "secret_scanning_alert.reopened" | "secret_scanning_alert.resolved" | "secret_scanning_alert.validated" | "secret_scanning_alert_location" | "secret_scanning_alert_location.created" | "security_advisory" | "security_advisory.published" | "security_advisory.updated" | "security_advisory.withdrawn" | "security_and_analysis" | "sponsorship" | "sponsorship.cancelled" | "sponsorship.created" | "sponsorship.edited" | "sponsorship.pending_cancellation" | "sponsorship.pending_tier_change" | "sponsorship.tier_changed" | "star" | "star.created" | "star.deleted" | "status" | "sub_issues" | "sub_issues.parent_issue_added" | "sub_issues.parent_issue_removed" | "sub_issues.sub_issue_added" | "sub_issues.sub_issue_removed" | "team" | "team.added_to_repository" | "team.created" | "team.deleted" | "team.edited" | "team.removed_from_repository" | "team_add" | "watch" | "watch.started" | "workflow_dispatch" | "workflow_job" | "workflow_job.completed" | "workflow_job.in_progress" | "workflow_job.queued" | "workflow_job.waiting" | "workflow_run" | "workflow_run.completed" | "workflow_run.in_progress" | "workflow_run.requested">[]>;
5
5
  declare const commandSchema: _sinclair_typebox.TObject<{
6
6
  description: _sinclair_typebox.TString;
7
7
  "ubiquity:example": _sinclair_typebox.TString;
@@ -15,7 +15,7 @@ declare const manifestSchema: _sinclair_typebox.TObject<{
15
15
  "ubiquity:example": _sinclair_typebox.TString;
16
16
  parameters: _sinclair_typebox.TOptional<_sinclair_typebox.TRecord<_sinclair_typebox.TString, _sinclair_typebox.TAny>>;
17
17
  }>>>;
18
- "ubiquity:listeners": _sinclair_typebox.TOptional<_sinclair_typebox.TArray<_sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"branch_protection_configuration" | "branch_protection_configuration.disabled" | "branch_protection_configuration.enabled" | "branch_protection_rule" | "branch_protection_rule.created" | "branch_protection_rule.deleted" | "branch_protection_rule.edited" | "check_run" | "check_run.completed" | "check_run.created" | "check_run.requested_action" | "check_run.rerequested" | "check_suite" | "check_suite.completed" | "check_suite.requested" | "check_suite.rerequested" | "code_scanning_alert" | "code_scanning_alert.appeared_in_branch" | "code_scanning_alert.closed_by_user" | "code_scanning_alert.created" | "code_scanning_alert.fixed" | "code_scanning_alert.reopened" | "code_scanning_alert.reopened_by_user" | "commit_comment" | "commit_comment.created" | "create" | "custom_property" | "custom_property.created" | "custom_property.deleted" | "custom_property.updated" | "custom_property_values" | "custom_property_values.updated" | "delete" | "dependabot_alert" | "dependabot_alert.auto_dismissed" | "dependabot_alert.auto_reopened" | "dependabot_alert.created" | "dependabot_alert.dismissed" | "dependabot_alert.fixed" | "dependabot_alert.reintroduced" | "dependabot_alert.reopened" | "deploy_key" | "deploy_key.created" | "deploy_key.deleted" | "deployment" | "deployment.created" | "deployment_protection_rule" | "deployment_protection_rule.requested" | "deployment_review" | "deployment_review.approved" | "deployment_review.rejected" | "deployment_review.requested" | "deployment_status" | "deployment_status.created" | "discussion" | "discussion.answered" | "discussion.category_changed" | "discussion.closed" | "discussion.created" | "discussion.deleted" | "discussion.edited" | "discussion.labeled" | "discussion.locked" | "discussion.pinned" | "discussion.reopened" | "discussion.transferred" | "discussion.unanswered" | "discussion.unlabeled" | "discussion.unlocked" | "discussion.unpinned" | "discussion_comment" | "discussion_comment.created" | "discussion_comment.deleted" | "discussion_comment.edited" | "fork" | "github_app_authorization" | "github_app_authorization.revoked" | "gollum" | "installation" | "installation.created" | "installation.deleted" | "installation.new_permissions_accepted" | "installation.suspend" | "installation.unsuspend" | "installation_repositories" | "installation_repositories.added" | "installation_repositories.removed" | "installation_target" | "installation_target.renamed" | "issue_comment" | "issue_comment.created" | "issue_comment.deleted" | "issue_comment.edited" | "issues" | "issues.assigned" | "issues.closed" | "issues.deleted" | "issues.demilestoned" | "issues.edited" | "issues.labeled" | "issues.locked" | "issues.milestoned" | "issues.opened" | "issues.pinned" | "issues.reopened" | "issues.transferred" | "issues.unassigned" | "issues.unlabeled" | "issues.unlocked" | "issues.unpinned" | "label" | "label.created" | "label.deleted" | "label.edited" | "marketplace_purchase" | "marketplace_purchase.cancelled" | "marketplace_purchase.changed" | "marketplace_purchase.pending_change" | "marketplace_purchase.pending_change_cancelled" | "marketplace_purchase.purchased" | "member" | "member.added" | "member.edited" | "member.removed" | "membership" | "membership.added" | "membership.removed" | "merge_group" | "merge_group.checks_requested" | "merge_group.destroyed" | "meta" | "meta.deleted" | "milestone" | "milestone.closed" | "milestone.created" | "milestone.deleted" | "milestone.edited" | "milestone.opened" | "org_block" | "org_block.blocked" | "org_block.unblocked" | "organization" | "organization.deleted" | "organization.member_added" | "organization.member_invited" | "organization.member_removed" | "organization.renamed" | "package" | "package.published" | "package.updated" | "page_build" | "personal_access_token_request" | "personal_access_token_request.approved" | "personal_access_token_request.cancelled" | "personal_access_token_request.created" | "personal_access_token_request.denied" | "ping" | "project" | "project.closed" | "project.created" | "project.deleted" | "project.edited" | "project.reopened" | "project_card" | "project_card.converted" | "project_card.created" | "project_card.deleted" | "project_card.edited" | "project_card.moved" | "project_column" | "project_column.created" | "project_column.deleted" | "project_column.edited" | "project_column.moved" | "projects_v2" | "projects_v2.closed" | "projects_v2.created" | "projects_v2.deleted" | "projects_v2.edited" | "projects_v2.reopened" | "projects_v2_item" | "projects_v2_item.archived" | "projects_v2_item.converted" | "projects_v2_item.created" | "projects_v2_item.deleted" | "projects_v2_item.edited" | "projects_v2_item.reordered" | "projects_v2_item.restored" | "public" | "pull_request" | "pull_request.assigned" | "pull_request.auto_merge_disabled" | "pull_request.auto_merge_enabled" | "pull_request.closed" | "pull_request.converted_to_draft" | "pull_request.demilestoned" | "pull_request.dequeued" | "pull_request.edited" | "pull_request.enqueued" | "pull_request.labeled" | "pull_request.locked" | "pull_request.milestoned" | "pull_request.opened" | "pull_request.ready_for_review" | "pull_request.reopened" | "pull_request.review_request_removed" | "pull_request.review_requested" | "pull_request.synchronize" | "pull_request.unassigned" | "pull_request.unlabeled" | "pull_request.unlocked" | "pull_request_review" | "pull_request_review.dismissed" | "pull_request_review.edited" | "pull_request_review.submitted" | "pull_request_review_comment" | "pull_request_review_comment.created" | "pull_request_review_comment.deleted" | "pull_request_review_comment.edited" | "pull_request_review_thread" | "pull_request_review_thread.resolved" | "pull_request_review_thread.unresolved" | "push" | "registry_package" | "registry_package.published" | "registry_package.updated" | "release" | "release.created" | "release.deleted" | "release.edited" | "release.prereleased" | "release.published" | "release.released" | "release.unpublished" | "repository" | "repository.archived" | "repository.created" | "repository.deleted" | "repository.edited" | "repository.privatized" | "repository.publicized" | "repository.renamed" | "repository.transferred" | "repository.unarchived" | "repository_advisory" | "repository_advisory.published" | "repository_advisory.reported" | "repository_dispatch" | "repository_dispatch.sample.collected" | "repository_import" | "repository_ruleset" | "repository_ruleset.created" | "repository_ruleset.deleted" | "repository_ruleset.edited" | "repository_vulnerability_alert" | "repository_vulnerability_alert.create" | "repository_vulnerability_alert.dismiss" | "repository_vulnerability_alert.reopen" | "repository_vulnerability_alert.resolve" | "secret_scanning_alert" | "secret_scanning_alert.created" | "secret_scanning_alert.reopened" | "secret_scanning_alert.resolved" | "secret_scanning_alert.revoked" | "secret_scanning_alert.validated" | "secret_scanning_alert_location" | "secret_scanning_alert_location.created" | "security_advisory" | "security_advisory.published" | "security_advisory.updated" | "security_advisory.withdrawn" | "security_and_analysis" | "sponsorship" | "sponsorship.cancelled" | "sponsorship.created" | "sponsorship.edited" | "sponsorship.pending_cancellation" | "sponsorship.pending_tier_change" | "sponsorship.tier_changed" | "star" | "star.created" | "star.deleted" | "status" | "team" | "team.added_to_repository" | "team.created" | "team.deleted" | "team.edited" | "team.removed_from_repository" | "team_add" | "watch" | "watch.started" | "workflow_dispatch" | "workflow_job" | "workflow_job.completed" | "workflow_job.in_progress" | "workflow_job.queued" | "workflow_job.waiting" | "workflow_run" | "workflow_run.completed" | "workflow_run.in_progress" | "workflow_run.requested">[]>>>;
18
+ "ubiquity:listeners": _sinclair_typebox.TOptional<_sinclair_typebox.TArray<_sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"branch_protection_configuration" | "branch_protection_configuration.disabled" | "branch_protection_configuration.enabled" | "branch_protection_rule" | "branch_protection_rule.created" | "branch_protection_rule.deleted" | "branch_protection_rule.edited" | "check_run" | "check_run.completed" | "check_run.created" | "check_run.requested_action" | "check_run.rerequested" | "check_suite" | "check_suite.completed" | "check_suite.requested" | "check_suite.rerequested" | "code_scanning_alert" | "code_scanning_alert.appeared_in_branch" | "code_scanning_alert.closed_by_user" | "code_scanning_alert.created" | "code_scanning_alert.fixed" | "code_scanning_alert.reopened" | "code_scanning_alert.reopened_by_user" | "commit_comment" | "commit_comment.created" | "create" | "custom_property" | "custom_property.created" | "custom_property.deleted" | "custom_property.updated" | "custom_property_values" | "custom_property_values.updated" | "delete" | "dependabot_alert" | "dependabot_alert.auto_dismissed" | "dependabot_alert.auto_reopened" | "dependabot_alert.created" | "dependabot_alert.dismissed" | "dependabot_alert.fixed" | "dependabot_alert.reintroduced" | "dependabot_alert.reopened" | "deploy_key" | "deploy_key.created" | "deploy_key.deleted" | "deployment" | "deployment.created" | "deployment_protection_rule" | "deployment_protection_rule.requested" | "deployment_review" | "deployment_review.approved" | "deployment_review.rejected" | "deployment_review.requested" | "deployment_status" | "deployment_status.created" | "discussion" | "discussion.answered" | "discussion.category_changed" | "discussion.closed" | "discussion.created" | "discussion.deleted" | "discussion.edited" | "discussion.labeled" | "discussion.locked" | "discussion.pinned" | "discussion.reopened" | "discussion.transferred" | "discussion.unanswered" | "discussion.unlabeled" | "discussion.unlocked" | "discussion.unpinned" | "discussion_comment" | "discussion_comment.created" | "discussion_comment.deleted" | "discussion_comment.edited" | "fork" | "github_app_authorization" | "github_app_authorization.revoked" | "gollum" | "installation" | "installation.created" | "installation.deleted" | "installation.new_permissions_accepted" | "installation.suspend" | "installation.unsuspend" | "installation_repositories" | "installation_repositories.added" | "installation_repositories.removed" | "installation_target" | "installation_target.renamed" | "issue_comment" | "issue_comment.created" | "issue_comment.deleted" | "issue_comment.edited" | "issues" | "issues.assigned" | "issues.closed" | "issues.deleted" | "issues.demilestoned" | "issues.edited" | "issues.labeled" | "issues.locked" | "issues.milestoned" | "issues.opened" | "issues.pinned" | "issues.reopened" | "issues.transferred" | "issues.unassigned" | "issues.unlabeled" | "issues.unlocked" | "issues.unpinned" | "label" | "label.created" | "label.deleted" | "label.edited" | "marketplace_purchase" | "marketplace_purchase.cancelled" | "marketplace_purchase.changed" | "marketplace_purchase.pending_change" | "marketplace_purchase.pending_change_cancelled" | "marketplace_purchase.purchased" | "member" | "member.added" | "member.edited" | "member.removed" | "membership" | "membership.added" | "membership.removed" | "merge_group" | "merge_group.checks_requested" | "merge_group.destroyed" | "meta" | "meta.deleted" | "milestone" | "milestone.closed" | "milestone.created" | "milestone.deleted" | "milestone.edited" | "milestone.opened" | "org_block" | "org_block.blocked" | "org_block.unblocked" | "organization" | "organization.deleted" | "organization.member_added" | "organization.member_invited" | "organization.member_removed" | "organization.renamed" | "package" | "package.published" | "package.updated" | "page_build" | "personal_access_token_request" | "personal_access_token_request.approved" | "personal_access_token_request.cancelled" | "personal_access_token_request.created" | "personal_access_token_request.denied" | "ping" | "project" | "project.closed" | "project.created" | "project.deleted" | "project.edited" | "project.reopened" | "project_card" | "project_card.converted" | "project_card.created" | "project_card.deleted" | "project_card.edited" | "project_card.moved" | "project_column" | "project_column.created" | "project_column.deleted" | "project_column.edited" | "project_column.moved" | "projects_v2" | "projects_v2.closed" | "projects_v2.created" | "projects_v2.deleted" | "projects_v2.edited" | "projects_v2.reopened" | "projects_v2_item" | "projects_v2_item.archived" | "projects_v2_item.converted" | "projects_v2_item.created" | "projects_v2_item.deleted" | "projects_v2_item.edited" | "projects_v2_item.reordered" | "projects_v2_item.restored" | "projects_v2_status_update" | "projects_v2_status_update.created" | "projects_v2_status_update.deleted" | "projects_v2_status_update.edited" | "public" | "pull_request" | "pull_request.assigned" | "pull_request.auto_merge_disabled" | "pull_request.auto_merge_enabled" | "pull_request.closed" | "pull_request.converted_to_draft" | "pull_request.demilestoned" | "pull_request.dequeued" | "pull_request.edited" | "pull_request.enqueued" | "pull_request.labeled" | "pull_request.locked" | "pull_request.milestoned" | "pull_request.opened" | "pull_request.ready_for_review" | "pull_request.reopened" | "pull_request.review_request_removed" | "pull_request.review_requested" | "pull_request.synchronize" | "pull_request.unassigned" | "pull_request.unlabeled" | "pull_request.unlocked" | "pull_request_review" | "pull_request_review.dismissed" | "pull_request_review.edited" | "pull_request_review.submitted" | "pull_request_review_comment" | "pull_request_review_comment.created" | "pull_request_review_comment.deleted" | "pull_request_review_comment.edited" | "pull_request_review_thread" | "pull_request_review_thread.resolved" | "pull_request_review_thread.unresolved" | "push" | "registry_package" | "registry_package.published" | "registry_package.updated" | "release" | "release.created" | "release.deleted" | "release.edited" | "release.prereleased" | "release.published" | "release.released" | "release.unpublished" | "repository" | "repository.archived" | "repository.created" | "repository.deleted" | "repository.edited" | "repository.privatized" | "repository.publicized" | "repository.renamed" | "repository.transferred" | "repository.unarchived" | "repository_advisory" | "repository_advisory.published" | "repository_advisory.reported" | "repository_dispatch" | "repository_dispatch.sample.collected" | "repository_import" | "repository_ruleset" | "repository_ruleset.created" | "repository_ruleset.deleted" | "repository_ruleset.edited" | "repository_vulnerability_alert" | "repository_vulnerability_alert.create" | "repository_vulnerability_alert.dismiss" | "repository_vulnerability_alert.reopen" | "repository_vulnerability_alert.resolve" | "secret_scanning_alert" | "secret_scanning_alert.created" | "secret_scanning_alert.reopened" | "secret_scanning_alert.resolved" | "secret_scanning_alert.validated" | "secret_scanning_alert_location" | "secret_scanning_alert_location.created" | "security_advisory" | "security_advisory.published" | "security_advisory.updated" | "security_advisory.withdrawn" | "security_and_analysis" | "sponsorship" | "sponsorship.cancelled" | "sponsorship.created" | "sponsorship.edited" | "sponsorship.pending_cancellation" | "sponsorship.pending_tier_change" | "sponsorship.tier_changed" | "star" | "star.created" | "star.deleted" | "status" | "sub_issues" | "sub_issues.parent_issue_added" | "sub_issues.parent_issue_removed" | "sub_issues.sub_issue_added" | "sub_issues.sub_issue_removed" | "team" | "team.added_to_repository" | "team.created" | "team.deleted" | "team.edited" | "team.removed_from_repository" | "team_add" | "watch" | "watch.started" | "workflow_dispatch" | "workflow_job" | "workflow_job.completed" | "workflow_job.in_progress" | "workflow_job.queued" | "workflow_job.waiting" | "workflow_run" | "workflow_run.completed" | "workflow_run.in_progress" | "workflow_run.requested">[]>>>;
19
19
  configuration: _sinclair_typebox.TOptional<_sinclair_typebox.TRecord<_sinclair_typebox.TString, _sinclair_typebox.TAny>>;
20
20
  skipBotEvents: _sinclair_typebox.TOptional<_sinclair_typebox.TBoolean>;
21
21
  }>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ubiquity-os/plugin-sdk",
3
- "version": "1.1.0",
3
+ "version": "2.0.0",
4
4
  "description": "SDK for plugin support.",
5
5
  "author": "Ubiquity DAO",
6
6
  "license": "MIT",
@@ -110,7 +110,7 @@
110
110
  "eslint-config-prettier": "^9.1.0",
111
111
  "eslint-plugin-check-file": "^2.8.0",
112
112
  "eslint-plugin-prettier": "^5.2.1",
113
- "eslint-plugin-sonarjs": "^2.0.4",
113
+ "eslint-plugin-sonarjs": "^3.0.1",
114
114
  "husky": "^9.0.11",
115
115
  "jest": "^29.7.0",
116
116
  "jest-junit": "^16.0.0",
@@ -129,7 +129,7 @@
129
129
  },
130
130
  "lint-staged": {
131
131
  "*.ts": [
132
- "bun prettier --write",
132
+ "prettier --write",
133
133
  "eslint --fix"
134
134
  ],
135
135
  "src/**.{ts,json}": [