@hcrosse/opencode-pr-tracker 0.3.0 → 0.4.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 +67 -62
- package/dist/server.js +1215 -2838
- package/dist/server.js.map +30 -21
- package/dist/tui.js +1112 -4393
- package/dist/tui.js.map +20 -28
- package/package.json +34 -26
- package/server.js +1 -0
- package/tui.js +1 -0
package/dist/tui.js.map
CHANGED
|
@@ -1,34 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../
|
|
3
|
+
"sources": ["../src/tui.tsx", "../src/adapters/Command.ts", "../src/rpc.ts", "../src/domain/PullRequest.ts", "../src/domain/Snapshot.ts", "../src/domain/StackLayout.ts", "../src/tui/Actions.ts", "../src/tui/Background.ts", "../src/tui/Browser.ts", "../src/tui/Client.ts", "../src/tui/Commands.tsx", "../src/tui/SessionSidebar.tsx", "../src/ui/Palette.ts", "../src/ui/Sidebar.tsx", "../src/ui/Row.tsx", "../src/domain/Appearance.ts", "../src/tui/Terminal.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"var constants = require('constants')\n\nvar origCwd = process.cwd\nvar cwd = null\n\nvar platform = process.env.GRACEFUL_FS_PLATFORM || process.platform\n\nprocess.cwd = function() {\n if (!cwd)\n cwd = origCwd.call(process)\n return cwd\n}\ntry {\n process.cwd()\n} catch (er) {}\n\n// This check is needed until node.js 12 is required\nif (typeof process.chdir === 'function') {\n var chdir = process.chdir\n process.chdir = function (d) {\n cwd = null\n chdir.call(process, d)\n }\n if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir)\n}\n\nmodule.exports = patch\n\nfunction patch (fs) {\n // (re-)implement some things that are known busted or missing.\n\n // lchmod, broken prior to 0.6.2\n // back-port the fix here.\n if (constants.hasOwnProperty('O_SYMLINK') &&\n process.version.match(/^v0\\.6\\.[0-2]|^v0\\.5\\./)) {\n patchLchmod(fs)\n }\n\n // lutimes implementation, or no-op\n if (!fs.lutimes) {\n patchLutimes(fs)\n }\n\n // https://github.com/isaacs/node-graceful-fs/issues/4\n // Chown should not fail on einval or eperm if non-root.\n // It should not fail on enosys ever, as this just indicates\n // that a fs doesn't support the intended operation.\n\n fs.chown = chownFix(fs.chown)\n fs.fchown = chownFix(fs.fchown)\n fs.lchown = chownFix(fs.lchown)\n\n fs.chmod = chmodFix(fs.chmod)\n fs.fchmod = chmodFix(fs.fchmod)\n fs.lchmod = chmodFix(fs.lchmod)\n\n fs.chownSync = chownFixSync(fs.chownSync)\n fs.fchownSync = chownFixSync(fs.fchownSync)\n fs.lchownSync = chownFixSync(fs.lchownSync)\n\n fs.chmodSync = chmodFixSync(fs.chmodSync)\n fs.fchmodSync = chmodFixSync(fs.fchmodSync)\n fs.lchmodSync = chmodFixSync(fs.lchmodSync)\n\n fs.stat = statFix(fs.stat)\n fs.fstat = statFix(fs.fstat)\n fs.lstat = statFix(fs.lstat)\n\n fs.statSync = statFixSync(fs.statSync)\n fs.fstatSync = statFixSync(fs.fstatSync)\n fs.lstatSync = statFixSync(fs.lstatSync)\n\n // if lchmod/lchown do not exist, then make them no-ops\n if (fs.chmod && !fs.lchmod) {\n fs.lchmod = function (path, mode, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchmodSync = function () {}\n }\n if (fs.chown && !fs.lchown) {\n fs.lchown = function (path, uid, gid, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchownSync = function () {}\n }\n\n // on Windows, A/V software can lock the directory, causing this\n // to fail with an EACCES or EPERM if the directory contains newly\n // created files. Try again on failure, for up to 60 seconds.\n\n // Set the timeout this long because some Windows Anti-Virus, such as Parity\n // bit9, may lock files for up to a minute, causing npm package install\n // failures. Also, take care to yield the scheduler. Windows scheduling gives\n // CPU to a busy looping process, which can cause the program causing the lock\n // contention to be starved of CPU by node, so the contention doesn't resolve.\n if (platform === \"win32\") {\n fs.rename = typeof fs.rename !== 'function' ? fs.rename\n : (function (fs$rename) {\n function rename (from, to, cb) {\n var start = Date.now()\n var backoff = 0;\n fs$rename(from, to, function CB (er) {\n if (er\n && (er.code === \"EACCES\" || er.code === \"EPERM\" || er.code === \"EBUSY\")\n && Date.now() - start < 60000) {\n setTimeout(function() {\n fs.stat(to, function (stater, st) {\n if (stater && stater.code === \"ENOENT\")\n fs$rename(from, to, CB);\n else\n cb(er)\n })\n }, backoff)\n if (backoff < 100)\n backoff += 10;\n return;\n }\n if (cb) cb(er)\n })\n }\n if (Object.setPrototypeOf) Object.setPrototypeOf(rename, fs$rename)\n return rename\n })(fs.rename)\n }\n\n // if read() returns EAGAIN, then just try it again.\n fs.read = typeof fs.read !== 'function' ? fs.read\n : (function (fs$read) {\n function read (fd, buffer, offset, length, position, callback_) {\n var callback\n if (callback_ && typeof callback_ === 'function') {\n var eagCounter = 0\n callback = function (er, _, __) {\n if (er && er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n callback_.apply(this, arguments)\n }\n }\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n\n // This ensures `util.promisify` works as it does for native `fs.read`.\n if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read)\n return read\n })(fs.read)\n\n fs.readSync = typeof fs.readSync !== 'function' ? fs.readSync\n : (function (fs$readSync) { return function (fd, buffer, offset, length, position) {\n var eagCounter = 0\n while (true) {\n try {\n return fs$readSync.call(fs, fd, buffer, offset, length, position)\n } catch (er) {\n if (er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n continue\n }\n throw er\n }\n }\n }})(fs.readSync)\n\n function patchLchmod (fs) {\n fs.lchmod = function (path, mode, callback) {\n fs.open( path\n , constants.O_WRONLY | constants.O_SYMLINK\n , mode\n , function (err, fd) {\n if (err) {\n if (callback) callback(err)\n return\n }\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n fs.fchmod(fd, mode, function (err) {\n fs.close(fd, function(err2) {\n if (callback) callback(err || err2)\n })\n })\n })\n }\n\n fs.lchmodSync = function (path, mode) {\n var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)\n\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n var threw = true\n var ret\n try {\n ret = fs.fchmodSync(fd, mode)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n }\n\n function patchLutimes (fs) {\n if (constants.hasOwnProperty(\"O_SYMLINK\") && fs.futimes) {\n fs.lutimes = function (path, at, mt, cb) {\n fs.open(path, constants.O_SYMLINK, function (er, fd) {\n if (er) {\n if (cb) cb(er)\n return\n }\n fs.futimes(fd, at, mt, function (er) {\n fs.close(fd, function (er2) {\n if (cb) cb(er || er2)\n })\n })\n })\n }\n\n fs.lutimesSync = function (path, at, mt) {\n var fd = fs.openSync(path, constants.O_SYMLINK)\n var ret\n var threw = true\n try {\n ret = fs.futimesSync(fd, at, mt)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n\n } else if (fs.futimes) {\n fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }\n fs.lutimesSync = function () {}\n }\n }\n\n function chmodFix (orig) {\n if (!orig) return orig\n return function (target, mode, cb) {\n return orig.call(fs, target, mode, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chmodFixSync (orig) {\n if (!orig) return orig\n return function (target, mode) {\n try {\n return orig.call(fs, target, mode)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n\n function chownFix (orig) {\n if (!orig) return orig\n return function (target, uid, gid, cb) {\n return orig.call(fs, target, uid, gid, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chownFixSync (orig) {\n if (!orig) return orig\n return function (target, uid, gid) {\n try {\n return orig.call(fs, target, uid, gid)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n function statFix (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options, cb) {\n if (typeof options === 'function') {\n cb = options\n options = null\n }\n function callback (er, stats) {\n if (stats) {\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n }\n if (cb) cb.apply(this, arguments)\n }\n return options ? orig.call(fs, target, options, callback)\n : orig.call(fs, target, callback)\n }\n }\n\n function statFixSync (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options) {\n var stats = options ? orig.call(fs, target, options)\n : orig.call(fs, target)\n if (stats) {\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n }\n return stats;\n }\n }\n\n // ENOSYS means that the fs doesn't support the op. Just ignore\n // that, because it doesn't matter.\n //\n // if there's no getuid, or if getuid() is something other\n // than 0, and the error is EINVAL or EPERM, then just ignore\n // it.\n //\n // This specific case is a silent failure in cp, install, tar,\n // and most other unix tools that manage permissions.\n //\n // When running as root, or if other types of errors are\n // encountered, then it's strict.\n function chownErOk (er) {\n if (!er)\n return true\n\n if (er.code === \"ENOSYS\")\n return true\n\n var nonroot = !process.getuid || process.getuid() !== 0\n if (nonroot) {\n if (er.code === \"EINVAL\" || er.code === \"EPERM\")\n return true\n }\n\n return false\n }\n}\n",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"var fs = require('fs')\nvar polyfills = require('./polyfills.js')\nvar legacy = require('./legacy-streams.js')\nvar clone = require('./clone.js')\n\nvar util = require('util')\n\n/* istanbul ignore next - node 0.x polyfill */\nvar gracefulQueue\nvar previousSymbol\n\n/* istanbul ignore else - node 0.x polyfill */\nif (typeof Symbol === 'function' && typeof Symbol.for === 'function') {\n gracefulQueue = Symbol.for('graceful-fs.queue')\n // This is used in testing by future versions\n previousSymbol = Symbol.for('graceful-fs.previous')\n} else {\n gracefulQueue = '___graceful-fs.queue'\n previousSymbol = '___graceful-fs.previous'\n}\n\nfunction noop () {}\n\nfunction publishQueue(context, queue) {\n Object.defineProperty(context, gracefulQueue, {\n get: function() {\n return queue\n }\n })\n}\n\nvar debug = noop\nif (util.debuglog)\n debug = util.debuglog('gfs4')\nelse if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || ''))\n debug = function() {\n var m = util.format.apply(util, arguments)\n m = 'GFS4: ' + m.split(/\\n/).join('\\nGFS4: ')\n console.error(m)\n }\n\n// Once time initialization\nif (!fs[gracefulQueue]) {\n // This queue can be shared by multiple loaded instances\n var queue = global[gracefulQueue] || []\n publishQueue(fs, queue)\n\n // Patch fs.close/closeSync to shared queue version, because we need\n // to retry() whenever a close happens *anywhere* in the program.\n // This is essential when multiple graceful-fs instances are\n // in play at the same time.\n fs.close = (function (fs$close) {\n function close (fd, cb) {\n return fs$close.call(fs, fd, function (err) {\n // This function uses the graceful-fs shared queue\n if (!err) {\n resetQueue()\n }\n\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n })\n }\n\n Object.defineProperty(close, previousSymbol, {\n value: fs$close\n })\n return close\n })(fs.close)\n\n fs.closeSync = (function (fs$closeSync) {\n function closeSync (fd) {\n // This function uses the graceful-fs shared queue\n fs$closeSync.apply(fs, arguments)\n resetQueue()\n }\n\n Object.defineProperty(closeSync, previousSymbol, {\n value: fs$closeSync\n })\n return closeSync\n })(fs.closeSync)\n\n if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || '')) {\n process.on('exit', function() {\n debug(fs[gracefulQueue])\n require('assert').equal(fs[gracefulQueue].length, 0)\n })\n }\n}\n\nif (!global[gracefulQueue]) {\n publishQueue(global, fs[gracefulQueue]);\n}\n\nmodule.exports = patch(clone(fs))\nif (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) {\n module.exports = patch(fs)\n fs.__patched = true;\n}\n\nfunction patch (fs) {\n // Everything that references the open() function needs to be in here\n polyfills(fs)\n fs.gracefulify = patch\n\n fs.createReadStream = createReadStream\n fs.createWriteStream = createWriteStream\n var fs$readFile = fs.readFile\n fs.readFile = readFile\n function readFile (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$readFile(path, options, cb)\n\n function go$readFile (path, options, cb, startTime) {\n return fs$readFile(path, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$readFile, [path, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$writeFile = fs.writeFile\n fs.writeFile = writeFile\n function writeFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$writeFile(path, data, options, cb)\n\n function go$writeFile (path, data, options, cb, startTime) {\n return fs$writeFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$writeFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$appendFile = fs.appendFile\n if (fs$appendFile)\n fs.appendFile = appendFile\n function appendFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$appendFile(path, data, options, cb)\n\n function go$appendFile (path, data, options, cb, startTime) {\n return fs$appendFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$appendFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$copyFile = fs.copyFile\n if (fs$copyFile)\n fs.copyFile = copyFile\n function copyFile (src, dest, flags, cb) {\n if (typeof flags === 'function') {\n cb = flags\n flags = 0\n }\n return go$copyFile(src, dest, flags, cb)\n\n function go$copyFile (src, dest, flags, cb, startTime) {\n return fs$copyFile(src, dest, flags, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$copyFile, [src, dest, flags, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$readdir = fs.readdir\n fs.readdir = readdir\n var noReaddirOptionVersions = /^v[0-5]\\./\n function readdir (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n var go$readdir = noReaddirOptionVersions.test(process.version)\n ? function go$readdir (path, options, cb, startTime) {\n return fs$readdir(path, fs$readdirCallback(\n path, options, cb, startTime\n ))\n }\n : function go$readdir (path, options, cb, startTime) {\n return fs$readdir(path, options, fs$readdirCallback(\n path, options, cb, startTime\n ))\n }\n\n return go$readdir(path, options, cb)\n\n function fs$readdirCallback (path, options, cb, startTime) {\n return function (err, files) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([\n go$readdir,\n [path, options, cb],\n err,\n startTime || Date.now(),\n Date.now()\n ])\n else {\n if (files && files.sort)\n files.sort()\n\n if (typeof cb === 'function')\n cb.call(this, err, files)\n }\n }\n }\n }\n\n if (process.version.substr(0, 4) === 'v0.8') {\n var legStreams = legacy(fs)\n ReadStream = legStreams.ReadStream\n WriteStream = legStreams.WriteStream\n }\n\n var fs$ReadStream = fs.ReadStream\n if (fs$ReadStream) {\n ReadStream.prototype = Object.create(fs$ReadStream.prototype)\n ReadStream.prototype.open = ReadStream$open\n }\n\n var fs$WriteStream = fs.WriteStream\n if (fs$WriteStream) {\n WriteStream.prototype = Object.create(fs$WriteStream.prototype)\n WriteStream.prototype.open = WriteStream$open\n }\n\n Object.defineProperty(fs, 'ReadStream', {\n get: function () {\n return ReadStream\n },\n set: function (val) {\n ReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n Object.defineProperty(fs, 'WriteStream', {\n get: function () {\n return WriteStream\n },\n set: function (val) {\n WriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n // legacy names\n var FileReadStream = ReadStream\n Object.defineProperty(fs, 'FileReadStream', {\n get: function () {\n return FileReadStream\n },\n set: function (val) {\n FileReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n var FileWriteStream = WriteStream\n Object.defineProperty(fs, 'FileWriteStream', {\n get: function () {\n return FileWriteStream\n },\n set: function (val) {\n FileWriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n function ReadStream (path, options) {\n if (this instanceof ReadStream)\n return fs$ReadStream.apply(this, arguments), this\n else\n return ReadStream.apply(Object.create(ReadStream.prototype), arguments)\n }\n\n function ReadStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n if (that.autoClose)\n that.destroy()\n\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n that.read()\n }\n })\n }\n\n function WriteStream (path, options) {\n if (this instanceof WriteStream)\n return fs$WriteStream.apply(this, arguments), this\n else\n return WriteStream.apply(Object.create(WriteStream.prototype), arguments)\n }\n\n function WriteStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n that.destroy()\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n }\n })\n }\n\n function createReadStream (path, options) {\n return new fs.ReadStream(path, options)\n }\n\n function createWriteStream (path, options) {\n return new fs.WriteStream(path, options)\n }\n\n var fs$open = fs.open\n fs.open = open\n function open (path, flags, mode, cb) {\n if (typeof mode === 'function')\n cb = mode, mode = null\n\n return go$open(path, flags, mode, cb)\n\n function go$open (path, flags, mode, cb, startTime) {\n return fs$open(path, flags, mode, function (err, fd) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$open, [path, flags, mode, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n return fs\n}\n\nfunction enqueue (elem) {\n debug('ENQUEUE', elem[0].name, elem[1])\n fs[gracefulQueue].push(elem)\n retry()\n}\n\n// keep track of the timeout between retry() calls\nvar retryTimer\n\n// reset the startTime and lastTime to now\n// this resets the start of the 60 second overall timeout as well as the\n// delay between attempts so that we'll retry these jobs sooner\nfunction resetQueue () {\n var now = Date.now()\n for (var i = 0; i < fs[gracefulQueue].length; ++i) {\n // entries that are only a length of 2 are from an older version, don't\n // bother modifying those since they'll be retried anyway.\n if (fs[gracefulQueue][i].length > 2) {\n fs[gracefulQueue][i][3] = now // startTime\n fs[gracefulQueue][i][4] = now // lastTime\n }\n }\n // call retry to make sure we're actively processing the queue\n retry()\n}\n\nfunction retry () {\n // clear the timer and remove it to help prevent unintended concurrency\n clearTimeout(retryTimer)\n retryTimer = undefined\n\n if (fs[gracefulQueue].length === 0)\n return\n\n var elem = fs[gracefulQueue].shift()\n var fn = elem[0]\n var args = elem[1]\n // these items may be unset if they were added by an older graceful-fs\n var err = elem[2]\n var startTime = elem[3]\n var lastTime = elem[4]\n\n // if we don't have a startTime we have no way of knowing if we've waited\n // long enough, so go ahead and retry this item now\n if (startTime === undefined) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args)\n } else if (Date.now() - startTime >= 60000) {\n // it's been more than 60 seconds total, bail now\n debug('TIMEOUT', fn.name, args)\n var cb = args.pop()\n if (typeof cb === 'function')\n cb.call(null, err)\n } else {\n // the amount of time between the last attempt and right now\n var sinceAttempt = Date.now() - lastTime\n // the amount of time between when we first tried, and when we last tried\n // rounded up to at least 1\n var sinceStart = Math.max(lastTime - startTime, 1)\n // backoff. wait longer than the total time we've been retrying, but only\n // up to a maximum of 100ms\n var desiredDelay = Math.min(sinceStart * 1.2, 100)\n // it's been long enough since the last retry, do it again\n if (sinceAttempt >= desiredDelay) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args.concat([startTime]))\n } else {\n // if we can't do this job yet, push it to the end of the queue\n // and let the next iteration check again\n fs[gracefulQueue].push(elem)\n }\n }\n\n // schedule our next run if one isn't already scheduled\n if (retryTimer === undefined) {\n retryTimer = setTimeout(retry, 0)\n }\n}\n",
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"'use strict';\n\nconst path = require('path');\nconst fs = require('graceful-fs');\nconst retry = require('retry');\nconst onExit = require('signal-exit');\nconst mtimePrecision = require('./mtime-precision');\n\nconst locks = {};\n\nfunction getLockFile(file, options) {\n return options.lockfilePath || `${file}.lock`;\n}\n\nfunction resolveCanonicalPath(file, options, callback) {\n if (!options.realpath) {\n return callback(null, path.resolve(file));\n }\n\n // Use realpath to resolve symlinks\n // It also resolves relative paths\n options.fs.realpath(file, callback);\n}\n\nfunction acquireLock(file, options, callback) {\n const lockfilePath = getLockFile(file, options);\n\n // Use mkdir to create the lockfile (atomic operation)\n options.fs.mkdir(lockfilePath, (err) => {\n if (!err) {\n // At this point, we acquired the lock!\n // Probe the mtime precision\n return mtimePrecision.probe(lockfilePath, options.fs, (err, mtime, mtimePrecision) => {\n // If it failed, try to remove the lock..\n /* istanbul ignore if */\n if (err) {\n options.fs.rmdir(lockfilePath, () => {});\n\n return callback(err);\n }\n\n callback(null, mtime, mtimePrecision);\n });\n }\n\n // If error is not EEXIST then some other error occurred while locking\n if (err.code !== 'EEXIST') {\n return callback(err);\n }\n\n // Otherwise, check if lock is stale by analyzing the file mtime\n if (options.stale <= 0) {\n return callback(Object.assign(new Error('Lock file is already being held'), { code: 'ELOCKED', file }));\n }\n\n options.fs.stat(lockfilePath, (err, stat) => {\n if (err) {\n // Retry if the lockfile has been removed (meanwhile)\n // Skip stale check to avoid recursiveness\n if (err.code === 'ENOENT') {\n return acquireLock(file, { ...options, stale: 0 }, callback);\n }\n\n return callback(err);\n }\n\n if (!isLockStale(stat, options)) {\n return callback(Object.assign(new Error('Lock file is already being held'), { code: 'ELOCKED', file }));\n }\n\n // If it's stale, remove it and try again!\n // Skip stale check to avoid recursiveness\n removeLock(file, options, (err) => {\n if (err) {\n return callback(err);\n }\n\n acquireLock(file, { ...options, stale: 0 }, callback);\n });\n });\n });\n}\n\nfunction isLockStale(stat, options) {\n return stat.mtime.getTime() < Date.now() - options.stale;\n}\n\nfunction removeLock(file, options, callback) {\n // Remove lockfile, ignoring ENOENT errors\n options.fs.rmdir(getLockFile(file, options), (err) => {\n if (err && err.code !== 'ENOENT') {\n return callback(err);\n }\n\n callback();\n });\n}\n\nfunction updateLock(file, options) {\n const lock = locks[file];\n\n // Just for safety, should never happen\n /* istanbul ignore if */\n if (lock.updateTimeout) {\n return;\n }\n\n lock.updateDelay = lock.updateDelay || options.update;\n lock.updateTimeout = setTimeout(() => {\n lock.updateTimeout = null;\n\n // Stat the file to check if mtime is still ours\n // If it is, we can still recover from a system sleep or a busy event loop\n options.fs.stat(lock.lockfilePath, (err, stat) => {\n const isOverThreshold = lock.lastUpdate + options.stale < Date.now();\n\n // If it failed to update the lockfile, keep trying unless\n // the lockfile was deleted or we are over the threshold\n if (err) {\n if (err.code === 'ENOENT' || isOverThreshold) {\n return setLockAsCompromised(file, lock, Object.assign(err, { code: 'ECOMPROMISED' }));\n }\n\n lock.updateDelay = 1000;\n\n return updateLock(file, options);\n }\n\n const isMtimeOurs = lock.mtime.getTime() === stat.mtime.getTime();\n\n if (!isMtimeOurs) {\n return setLockAsCompromised(\n file,\n lock,\n Object.assign(\n new Error('Unable to update lock within the stale threshold'),\n { code: 'ECOMPROMISED' }\n ));\n }\n\n const mtime = mtimePrecision.getMtime(lock.mtimePrecision);\n\n options.fs.utimes(lock.lockfilePath, mtime, mtime, (err) => {\n const isOverThreshold = lock.lastUpdate + options.stale < Date.now();\n\n // Ignore if the lock was released\n if (lock.released) {\n return;\n }\n\n // If it failed to update the lockfile, keep trying unless\n // the lockfile was deleted or we are over the threshold\n if (err) {\n if (err.code === 'ENOENT' || isOverThreshold) {\n return setLockAsCompromised(file, lock, Object.assign(err, { code: 'ECOMPROMISED' }));\n }\n\n lock.updateDelay = 1000;\n\n return updateLock(file, options);\n }\n\n // All ok, keep updating..\n lock.mtime = mtime;\n lock.lastUpdate = Date.now();\n lock.updateDelay = null;\n updateLock(file, options);\n });\n });\n }, lock.updateDelay);\n\n // Unref the timer so that the nodejs process can exit freely\n // This is safe because all acquired locks will be automatically released\n // on process exit\n\n // We first check that `lock.updateTimeout.unref` exists because some users\n // may be using this module outside of NodeJS (e.g., in an electron app),\n // and in those cases `setTimeout` return an integer.\n /* istanbul ignore else */\n if (lock.updateTimeout.unref) {\n lock.updateTimeout.unref();\n }\n}\n\nfunction setLockAsCompromised(file, lock, err) {\n // Signal the lock has been released\n lock.released = true;\n\n // Cancel lock mtime update\n // Just for safety, at this point updateTimeout should be null\n /* istanbul ignore if */\n if (lock.updateTimeout) {\n clearTimeout(lock.updateTimeout);\n }\n\n if (locks[file] === lock) {\n delete locks[file];\n }\n\n lock.options.onCompromised(err);\n}\n\n// ----------------------------------------------------------\n\nfunction lock(file, options, callback) {\n /* istanbul ignore next */\n options = {\n stale: 10000,\n update: null,\n realpath: true,\n retries: 0,\n fs,\n onCompromised: (err) => { throw err; },\n ...options,\n };\n\n options.retries = options.retries || 0;\n options.retries = typeof options.retries === 'number' ? { retries: options.retries } : options.retries;\n options.stale = Math.max(options.stale || 0, 2000);\n options.update = options.update == null ? options.stale / 2 : options.update || 0;\n options.update = Math.max(Math.min(options.update, options.stale / 2), 1000);\n\n // Resolve to a canonical file path\n resolveCanonicalPath(file, options, (err, file) => {\n if (err) {\n return callback(err);\n }\n\n // Attempt to acquire the lock\n const operation = retry.operation(options.retries);\n\n operation.attempt(() => {\n acquireLock(file, options, (err, mtime, mtimePrecision) => {\n if (operation.retry(err)) {\n return;\n }\n\n if (err) {\n return callback(operation.mainError());\n }\n\n // We now own the lock\n const lock = locks[file] = {\n lockfilePath: getLockFile(file, options),\n mtime,\n mtimePrecision,\n options,\n lastUpdate: Date.now(),\n };\n\n // We must keep the lock fresh to avoid staleness\n updateLock(file, options);\n\n callback(null, (releasedCallback) => {\n if (lock.released) {\n return releasedCallback &&\n releasedCallback(Object.assign(new Error('Lock is already released'), { code: 'ERELEASED' }));\n }\n\n // Not necessary to use realpath twice when unlocking\n unlock(file, { ...options, realpath: false }, releasedCallback);\n });\n });\n });\n });\n}\n\nfunction unlock(file, options, callback) {\n options = {\n fs,\n realpath: true,\n ...options,\n };\n\n // Resolve to a canonical file path\n resolveCanonicalPath(file, options, (err, file) => {\n if (err) {\n return callback(err);\n }\n\n // Skip if the lock is not acquired\n const lock = locks[file];\n\n if (!lock) {\n return callback(Object.assign(new Error('Lock is not acquired/owned by you'), { code: 'ENOTACQUIRED' }));\n }\n\n lock.updateTimeout && clearTimeout(lock.updateTimeout); // Cancel lock mtime update\n lock.released = true; // Signal the lock has been released\n delete locks[file]; // Delete from locks\n\n removeLock(file, options, callback);\n });\n}\n\nfunction check(file, options, callback) {\n options = {\n stale: 10000,\n realpath: true,\n fs,\n ...options,\n };\n\n options.stale = Math.max(options.stale || 0, 2000);\n\n // Resolve to a canonical file path\n resolveCanonicalPath(file, options, (err, file) => {\n if (err) {\n return callback(err);\n }\n\n // Check if lockfile exists\n options.fs.stat(getLockFile(file, options), (err, stat) => {\n if (err) {\n // If does not exist, file is not locked. Otherwise, callback with error\n return err.code === 'ENOENT' ? callback(null, false) : callback(err);\n }\n\n // Otherwise, check if lock is stale by analyzing the file mtime\n return callback(null, !isLockStale(stat, options));\n });\n });\n}\n\nfunction getLocks() {\n return locks;\n}\n\n// Remove acquired locks on exit\n/* istanbul ignore next */\nonExit(() => {\n for (const file in locks) {\n const options = locks[file].options;\n\n try { options.fs.rmdirSync(getLockFile(file, options)); } catch (e) { /* Empty */ }\n }\n});\n\nmodule.exports.lock = lock;\nmodule.exports.unlock = unlock;\nmodule.exports.check = check;\nmodule.exports.getLocks = getLocks;\n",
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"import {
|
|
18
|
-
"import { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { createTextNode as _$createTextNode } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\n/** @jsxImportSource @opentui/solid */\nimport { useKeyboard } from \"@opentui/solid\";\nimport { createSignal } from \"solid-js\";\nimport { casesHandled } from \"./exhaustive.js\";\nimport { createFeedbackDraft, openFeedbackDraft, submitFeedbackDraft } from \"./feedback.js\";\nexport function FeedbackConfirmation(props) {\n useKeyboard(key => {\n if (key.name === \"return\") {\n key.preventDefault();\n key.stopPropagation();\n props.onConfirm();\n return;\n }\n if (key.name === \"escape\" || key.ctrl && key.name === \"c\") {\n key.preventDefault();\n key.stopPropagation();\n props.onCancel();\n }\n });\n return (() => {\n var _el$ = _$createElement(\"box\"),\n _el$2 = _$createElement(\"text\"),\n _el$3 = _$createElement(\"b\"),\n _el$4 = _$createElement(\"scrollbox\"),\n _el$5 = _$createElement(\"text\"),\n _el$6 = _$createElement(\"box\"),\n _el$7 = _$createElement(\"text\"),\n _el$9 = _$createElement(\"text\");\n _$insertNode(_el$, _el$2);\n _$insertNode(_el$, _el$4);\n _$insertNode(_el$, _el$6);\n _$setProp(_el$, \"flexDirection\", \"column\");\n _$setProp(_el$, \"gap\", 1);\n _$insertNode(_el$2, _el$3);\n _$insert(_el$3, () => props.title);\n _$insertNode(_el$4, _el$5);\n _$setProp(_el$4, \"focused\", true);\n _$setProp(_el$4, \"scrollY\", true);\n _$setProp(_el$4, \"height\", 10);\n _$insert(_el$5, () => props.preview);\n _$insertNode(_el$6, _el$7);\n _$insertNode(_el$6, _el$9);\n _$setProp(_el$6, \"flexDirection\", \"row\");\n _$setProp(_el$6, \"gap\", 2);\n _$insertNode(_el$7, _$createTextNode(`[Esc] Cancel`));\n _$insert(_el$9, () => props.confirmLabel);\n _$effect(_p$ => {\n var _v$ = props.onCancel,\n _v$2 = props.onConfirm;\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$7, \"onMouseUp\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$9, \"onMouseUp\", _v$2, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$;\n })();\n}\nfunction showDialog(api, signal, render) {\n return new Promise(resolve => {\n let finished = false;\n const onAbort = () => finish(undefined);\n const finish = (value, clearDialog = true) => {\n if (finished) return;\n finished = true;\n signal.removeEventListener(\"abort\", onAbort);\n if (clearDialog) api.ui.dialog.clear();\n resolve(value);\n };\n if (signal.aborted) {\n finish(undefined, false);\n return;\n }\n signal.addEventListener(\"abort\", onAbort, {\n once: true\n });\n api.ui.dialog.setSize(\"medium\");\n api.ui.dialog.replace(() => render(value => finish(value)), () => finish(undefined, false));\n });\n}\nfunction selectFeedbackKind(api, signal) {\n return showDialog(api, signal, finish => {\n const DialogSelect = api.ui.DialogSelect;\n return _$createComponent(DialogSelect, {\n title: \"Feedback type\",\n options: [{\n title: \"Bug report\",\n value: \"bug\"\n }, {\n title: \"Feature request\",\n value: \"feature\"\n }, {\n title: \"Other feedback\",\n value: \"other\"\n }],\n current: \"bug\",\n onSelect: option => finish(option.value)\n });\n });\n}\nfunction promptForValue(api, signal, title, required) {\n return showDialog(api, signal, finish => {\n const [error, setError] = createSignal();\n const DialogPrompt = api.ui.DialogPrompt;\n return _$createComponent(DialogPrompt, {\n title: title,\n description: () => error() ? (() => {\n var _el$0 = _$createElement(\"text\");\n _$insert(_el$0, error);\n _$effect(_$p => _$setProp(_el$0, \"fg\", api.theme.current.error, _$p));\n return _el$0;\n })() : null,\n onConfirm: value => {\n if (required && value.trim() === \"\") {\n setError(`${title} is required`);\n return;\n }\n finish(value);\n },\n onCancel: () => finish(undefined)\n });\n });\n}\nfunction confirmDiagnostics(api, signal, diagnostics) {\n const message = [`Plugin version: ${diagnostics.pluginVersion}`, `OpenCode version: ${diagnostics.opencodeVersion}`, `Operating system: ${diagnostics.operatingSystem}`, `Installation source: ${diagnostics.installationSource}`].join(\"\\n\");\n return showDialog(api, signal, finish => _$createComponent(api.ui.DialogConfirm, {\n title: \"Include diagnostics?\",\n message: message,\n onConfirm: () => finish(true),\n onCancel: () => finish(false)\n }));\n}\nfunction selectDelivery(api, signal) {\n return showDialog(api, signal, finish => {\n const DialogSelect = api.ui.DialogSelect;\n return _$createComponent(DialogSelect, {\n title: \"Send feedback\",\n options: [{\n title: \"Open in browser\",\n value: \"browser\"\n }, {\n title: \"Submit with GitHub CLI\",\n value: \"gh\"\n }],\n current: \"browser\",\n onSelect: option => finish(option.value)\n });\n });\n}\nfunction deliveryAction(delivery) {\n return delivery === \"browser\" ? \"Open a prefilled issue in your browser\" : \"Create the issue with GitHub CLI\";\n}\nfunction feedbackPreview(draft, delivery) {\n const label = delivery === \"gh\" ? \"none\" : draft.template === \"bug_report.md\" ? \"bug\" : draft.template === \"feature_request.md\" ? \"enhancement\" : \"none\";\n return [\"Repository: hcrosse/opencode-pr-tracker\", `Action: ${deliveryAction(delivery)}`, `Title: ${draft.title}`, `Label: ${label}`, \"\", \"Body:\", draft.body].join(\"\\n\");\n}\nfunction confirmFeedback(api, signal, draft, delivery, confirmationRenderer) {\n const title = delivery === \"browser\" ? \"Open PR tracker feedback?\" : \"Send PR tracker feedback?\";\n const confirmLabel = delivery === \"browser\" ? \"[Enter] Open issue\" : \"[Enter] Send\";\n return showDialog(api, signal, finish => {\n const Confirmation = confirmationRenderer;\n return _$createComponent(Confirmation, {\n title: title,\n confirmLabel: confirmLabel,\n get preview() {\n return feedbackPreview(draft, delivery);\n },\n onConfirm: () => finish(true),\n onCancel: () => finish(false)\n });\n });\n}\nasync function collectFeedbackInput(api, signal, kind) {\n const title = await promptForValue(api, signal, \"Feedback title\", true);\n if (title === undefined) return undefined;\n switch (kind) {\n case \"bug\":\n {\n const problem = await promptForValue(api, signal, \"Problem\", true);\n if (problem === undefined) return undefined;\n const reproduction = await promptForValue(api, signal, \"Reproduction steps\", true);\n if (reproduction === undefined) return undefined;\n const expectedBehavior = await promptForValue(api, signal, \"Expected behavior\", true);\n if (expectedBehavior === undefined) return undefined;\n return {\n kind,\n title,\n problem,\n reproduction,\n expectedBehavior\n };\n }\n case \"feature\":\n {\n const problem = await promptForValue(api, signal, \"Problem\", true);\n if (problem === undefined) return undefined;\n const desiredOutcome = await promptForValue(api, signal, \"Desired outcome\", true);\n if (desiredOutcome === undefined) return undefined;\n const constraints = await promptForValue(api, signal, \"Constraints (optional)\", false);\n if (constraints === undefined) return undefined;\n return {\n kind,\n title,\n problem,\n desiredOutcome,\n constraints\n };\n }\n case \"other\":\n {\n const details = await promptForValue(api, signal, \"Details\", true);\n if (details === undefined) return undefined;\n return {\n kind,\n title,\n details\n };\n }\n default:\n return casesHandled(kind);\n }\n}\nexport function createFeedbackCommand(api, dependencies, release) {\n return {\n name: \"pr.tracker.feedback\",\n title: \"Send PR tracker feedback\",\n category: \"Plugin\",\n namespace: \"palette\",\n slashName: \"pr-tracker-feedback\",\n async run() {\n const signal = api.lifecycle.signal;\n const kind = await selectFeedbackKind(api, signal);\n if (kind === undefined) return;\n const input = await collectFeedbackInput(api, signal, kind);\n if (input === undefined) return;\n const diagnostics = {\n pluginVersion: release?.version ?? \"unavailable\",\n opencodeVersion: api.app.version,\n operatingSystem: `${process.platform}/${process.arch}`,\n installationSource: release?.source ?? \"unavailable\"\n };\n const includeDiagnostics = await confirmDiagnostics(api, signal, diagnostics);\n if (includeDiagnostics === undefined) return;\n const draft = createFeedbackDraft(input, includeDiagnostics ? diagnostics : undefined);\n if (!draft.ok) {\n api.ui.toast({\n variant: \"error\",\n title: \"Pull request tracker\",\n message: draft.error.message\n });\n return;\n }\n const delivery = await selectDelivery(api, signal);\n if (delivery === undefined) return;\n const confirmed = await confirmFeedback(api, signal, draft.value, delivery, dependencies.confirmationRenderer ?? FeedbackConfirmation);\n if (!confirmed || signal.aborted) return;\n if (delivery === \"browser\") {\n const result = await openFeedbackDraft(draft.value, {\n ...(dependencies.platform === undefined ? {} : {\n platform: dependencies.platform\n }),\n ...(dependencies.runner === undefined ? {} : {\n runner: dependencies.runner\n }),\n signal\n });\n if (!result.ok && !signal.aborted) {\n api.ui.toast({\n variant: \"error\",\n title: \"Pull request tracker\",\n message: result.error.message\n });\n }\n return;\n }\n const result = await submitFeedbackDraft(draft.value, {\n ...(dependencies.runner === undefined ? {} : {\n runner: dependencies.runner\n }),\n signal\n });\n if (result.ok) {\n if (!signal.aborted) {\n api.ui.toast({\n variant: \"success\",\n title: \"Pull request tracker\",\n message: result.value\n });\n }\n } else if (result.error.tag !== \"SubmitFeedbackCancelled\" && !signal.aborted) {\n api.ui.toast({\n variant: \"error\",\n title: \"Pull request tracker\",\n message: result.error.message\n });\n }\n }\n };\n}",
|
|
19
|
-
"
|
|
20
|
-
"import { execFile } from \"node:child_process\"\n\nimport { casesHandled } from \"./exhaustive.js\"\nimport { parsePullRequestUrl, type PullRequestUrl, type Result } from \"./url.js\"\n\nexport type PullRequestCi = \"passed\" | \"pending\" | \"failed\" | \"none\"\nexport type PullRequestMergeability = \"mergeable\" | \"conflicting\" | \"unknown\"\nexport type PullRequestBlocker = \"behind\" | \"none\"\n\nexport type PullRequestState =\n | Readonly<{\n tag: \"Open\"\n ci: PullRequestCi\n mergeability: PullRequestMergeability\n blocker: PullRequestBlocker\n }>\n | Readonly<{ tag: \"Merged\" }>\n | Readonly<{ tag: \"Closed\" }>\n\nexport type AvailablePullRequestStatus = Readonly<{\n tag: \"Available\"\n pullRequest: PullRequestUrl\n title: string\n state: PullRequestState\n}> &\n (Readonly<{ stale: false }> | Readonly<{ stale: true; diagnostic: PullRequestDiagnostic }>)\n\nexport type PullRequestStatus =\n | AvailablePullRequestStatus\n | Readonly<{ tag: \"Unavailable\"; diagnostic?: PullRequestDiagnostic }>\n\nexport type GitHubUnavailable = Readonly<{\n tag: \"GitHubUnavailable\"\n message: \"GitHub status unavailable\"\n cause: unknown\n}>\n\nexport type GitHubCliMissing = Readonly<{\n tag: \"GitHubCliMissing\"\n message: \"GitHub CLI is not installed\"\n cause: unknown\n}>\n\nexport type GitHubAuthenticationRequired = Readonly<{\n tag: \"GitHubAuthenticationRequired\"\n message: \"GitHub CLI authentication required\"\n cause: unknown\n}>\n\nexport type GitHubCancelled = Readonly<{\n tag: \"GitHubCancelled\"\n message: \"GitHub status request cancelled\"\n cause: unknown\n}>\n\nexport type PullRequestNotFound = Readonly<{\n tag: \"PullRequestNotFound\"\n message: \"Pull request does not exist or is not accessible\"\n}>\n\nexport type InvalidGitHubResponse = Readonly<{\n tag: \"InvalidGitHubResponse\"\n message: \"GitHub returned an invalid pull request response\"\n}>\n\nexport type GitHubBatchLimitExceeded = Readonly<{\n tag: \"GitHubBatchLimitExceeded\"\n limit: 20\n message: \"GitHub batch cannot contain more than 20 pull requests\"\n}>\n\nexport type GitHubFailure =\n | GitHubCliMissing\n | GitHubAuthenticationRequired\n | GitHubUnavailable\n | GitHubCancelled\n | PullRequestNotFound\n | InvalidGitHubResponse\n | GitHubBatchLimitExceeded\n\nexport type PullRequestItemFailure = Exclude<GitHubFailure, GitHubCancelled | GitHubBatchLimitExceeded>\n\nexport type GitHubBatch = readonly Result<AvailablePullRequestStatus, PullRequestItemFailure>[]\n\nexport type PullRequestDiagnostic = Exclude<GitHubFailure, GitHubCancelled | GitHubBatchLimitExceeded>[\"tag\"]\n\nexport type ProcessRunner = (\n file: string,\n args: readonly string[],\n options: Readonly<{ signal?: AbortSignal; cwd?: string }>,\n) => Promise<Readonly<{ stdout: string }>>\n\nexport type GitHubClient = Readonly<{\n get(\n pullRequests: readonly PullRequestUrl[],\n options?: Readonly<{ signal?: AbortSignal }>,\n ): Promise<Result<GitHubBatch, GitHubFailure>>\n}>\n\nconst invalidGitHubResponse: Result<never, InvalidGitHubResponse> = {\n ok: false,\n error: {\n tag: \"InvalidGitHubResponse\",\n message: \"GitHub returned an invalid pull request response\",\n },\n}\nconst pullRequestNotFound: Result<never, PullRequestNotFound> = {\n ok: false,\n error: {\n tag: \"PullRequestNotFound\",\n message: \"Pull request does not exist or is not accessible\",\n },\n}\nconst githubBatchLimitExceeded: Result<never, GitHubBatchLimitExceeded> = {\n ok: false,\n error: {\n tag: \"GitHubBatchLimitExceeded\",\n limit: 20,\n message: \"GitHub batch cannot contain more than 20 pull requests\",\n },\n}\n\nconst maximumPullRequestsPerBatch = 20\nconst maximumCheckContextsPerPage = 100\nconst statusContextOnlyFields = [\"context\", \"state\", \"createdAt\"] as const\nconst checkRunOnlyFields = [\"name\", \"status\", \"conclusion\", \"checkSuite\"] as const\nconst checkContextSelection = `nodes { __typename ... on StatusContext { id context state createdAt } ... on CheckRun { id name status conclusion checkSuite { id createdAt app { id } workflowRun { event runNumber runAttempt workflow { id } } } } } totalCount pageInfo { hasNextPage endCursor }`\nconst pullRequestSelection = `__typename ... on PullRequest { title state url mergedAt mergeable mergeStateStatus baseRef { branchProtectionRule { requiresStatusChecks requiresStrictStatusChecks } refUpdateRule { requiredStatusCheckContexts } rules(first: 100) { nodes { parameters { __typename ... on RequiredStatusChecksParameters { strictRequiredStatusChecksPolicy requiredStatusChecks { context } } } } totalCount pageInfo { hasNextPage } } } statusCheckRollup { contexts(first: ${maximumCheckContextsPerPage}) { ${checkContextSelection} } } }`\nconst continuationQuery = `query PullRequestContexts($url: URI!, $cursor: String!) { resource(url: $url) { __typename ... on PullRequest { url statusCheckRollup { contexts(first: ${maximumCheckContextsPerPage}, after: $cursor) { ${checkContextSelection} } } } } }`\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n}\n\ntype CheckBucket = \"passed\" | \"pending\" | \"failed\" | \"ignored\"\n\ntype StatusContextState = \"EXPECTED\" | \"PENDING\" | \"SUCCESS\" | \"ERROR\" | \"FAILURE\"\ntype CheckRunStatus = \"REQUESTED\" | \"QUEUED\" | \"IN_PROGRESS\" | \"COMPLETED\" | \"WAITING\" | \"PENDING\"\ntype CheckRunConclusion =\n | \"SUCCESS\"\n | \"FAILURE\"\n | \"CANCELLED\"\n | \"TIMED_OUT\"\n | \"ACTION_REQUIRED\"\n | \"STARTUP_FAILURE\"\n | \"STALE\"\n | \"NEUTRAL\"\n | \"SKIPPED\"\n\ntype ParsedTimestamp = Readonly<{\n epochSeconds: number\n fractionalSeconds: string\n}>\n\ntype ParsedStatusContext = Readonly<{\n tag: \"StatusContext\"\n id: string\n context: string\n state: StatusContextState\n createdAt: ParsedTimestamp\n}>\n\ntype ParsedCheckRun = Readonly<{\n tag: \"CheckRun\"\n id: string\n name: string\n status: CheckRunStatus\n conclusion: CheckRunConclusion | null\n suiteId: string\n suiteCreatedAt: ParsedTimestamp\n sourceIdentity: readonly [\"app\" | \"suite\", string]\n workflowRun:\n | Readonly<{\n event: string\n runNumber: number\n runAttempt: number\n workflowId: string\n }>\n | undefined\n}>\n\ntype ParsedCheckContext = ParsedStatusContext | ParsedCheckRun\n\ntype ParsedCheckContextPage = Readonly<{\n contexts: readonly ParsedCheckContext[]\n totalCount: number\n nextCursor?: string\n}>\n\ntype ProcessExecutionFailed = Readonly<{\n tag: \"ProcessExecutionFailed\"\n code: string | number | null\n stderr: string\n stdout: string\n cause: unknown\n}>\n\nfunction parseProcessExecutionFailed(value: unknown): ProcessExecutionFailed | undefined {\n if (\n !isRecord(value) ||\n value.tag !== \"ProcessExecutionFailed\" ||\n (value.code !== null && typeof value.code !== \"string\" && typeof value.code !== \"number\") ||\n typeof value.stderr !== \"string\" ||\n typeof value.stdout !== \"string\" ||\n !(\"cause\" in value)\n ) {\n return undefined\n }\n\n return {\n tag: \"ProcessExecutionFailed\",\n code: value.code,\n stderr: value.stderr,\n stdout: value.stdout,\n cause: value.cause,\n }\n}\n\nfunction parseNonBlankString(input: unknown): string | undefined {\n return typeof input === \"string\" && input.trim() !== \"\" ? input : undefined\n}\n\nfunction parseDate(input: unknown): ParsedTimestamp | undefined {\n if (typeof input !== \"string\") return undefined\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})[Tt](\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d+))?(?:[Zz]|[+-](\\d{2}):(\\d{2}))$/.exec(\n input,\n )\n if (match === null) return undefined\n const year = Number(match[1])\n const month = Number(match[2])\n const day = Number(match[3])\n const hour = Number(match[4])\n const minute = Number(match[5])\n const second = Number(match[6])\n const offsetHour = Number(match[8] ?? 0)\n const offsetMinute = Number(match[9] ?? 0)\n const leapYear = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0)\n const daysInMonth = [31, leapYear ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month - 1]\n if (\n daysInMonth === undefined ||\n day < 1 ||\n day > daysInMonth ||\n hour > 23 ||\n minute > 59 ||\n second > 59 ||\n offsetHour > 23 ||\n offsetMinute > 59\n ) {\n return undefined\n }\n if (Number.isNaN(new Date(input).valueOf())) return undefined\n const epochSeconds = new Date(input.replace(/\\.\\d+/, \"\")).valueOf() / 1000\n if (!Number.isInteger(epochSeconds)) return undefined\n return {\n epochSeconds,\n fractionalSeconds: (match[7] ?? \"\").replace(/0+$/, \"\"),\n }\n}\n\nfunction compareTimestamps(left: ParsedTimestamp, right: ParsedTimestamp): -1 | 0 | 1 {\n if (left.epochSeconds < right.epochSeconds) return -1\n if (left.epochSeconds > right.epochSeconds) return 1\n const width = Math.max(left.fractionalSeconds.length, right.fractionalSeconds.length)\n const leftFraction = left.fractionalSeconds.padEnd(width, \"0\")\n const rightFraction = right.fractionalSeconds.padEnd(width, \"0\")\n if (leftFraction < rightFraction) return -1\n if (leftFraction > rightFraction) return 1\n return 0\n}\n\nfunction parseStatusContextState(input: unknown): StatusContextState | undefined {\n switch (input) {\n case \"EXPECTED\":\n case \"PENDING\":\n case \"SUCCESS\":\n case \"ERROR\":\n case \"FAILURE\":\n return input\n default:\n return undefined\n }\n}\n\nfunction parseCheckRunStatus(input: unknown): CheckRunStatus | undefined {\n switch (input) {\n case \"REQUESTED\":\n case \"QUEUED\":\n case \"IN_PROGRESS\":\n case \"COMPLETED\":\n case \"WAITING\":\n case \"PENDING\":\n return input\n default:\n return undefined\n }\n}\n\nfunction parseCheckRunConclusion(input: unknown): CheckRunConclusion | null | undefined {\n switch (input) {\n case null:\n case \"SUCCESS\":\n case \"FAILURE\":\n case \"CANCELLED\":\n case \"TIMED_OUT\":\n case \"ACTION_REQUIRED\":\n case \"STARTUP_FAILURE\":\n case \"STALE\":\n case \"NEUTRAL\":\n case \"SKIPPED\":\n return input\n default:\n return undefined\n }\n}\n\nfunction parseStatusContext(input: Record<string, unknown>): Result<ParsedStatusContext, InvalidGitHubResponse> {\n const id = parseNonBlankString(input.id)\n const context = parseNonBlankString(input.context)\n const state = parseStatusContextState(input.state)\n const createdAt = parseDate(input.createdAt)\n if (id === undefined || context === undefined || state === undefined || createdAt === undefined) {\n return invalidGitHubResponse\n }\n return { ok: true, value: { tag: \"StatusContext\", id, context, state, createdAt } }\n}\n\nfunction parseCheckRun(input: Record<string, unknown>): Result<ParsedCheckRun, InvalidGitHubResponse> {\n const id = parseNonBlankString(input.id)\n const name = parseNonBlankString(input.name)\n const status = parseCheckRunStatus(input.status)\n const conclusion = parseCheckRunConclusion(input.conclusion)\n if (\n id === undefined ||\n name === undefined ||\n status === undefined ||\n conclusion === undefined ||\n (status !== \"COMPLETED\" && conclusion !== null) ||\n !isRecord(input.checkSuite)\n ) {\n return invalidGitHubResponse\n }\n\n const suiteId = parseNonBlankString(input.checkSuite.id)\n const suiteCreatedAt = parseDate(input.checkSuite.createdAt)\n if (suiteId === undefined || suiteCreatedAt === undefined) return invalidGitHubResponse\n\n let sourceIdentity: readonly [\"app\" | \"suite\", string]\n if (input.checkSuite.app === null) {\n sourceIdentity = [\"suite\", suiteId]\n } else {\n if (!isRecord(input.checkSuite.app)) return invalidGitHubResponse\n const appId = parseNonBlankString(input.checkSuite.app.id)\n if (appId === undefined) return invalidGitHubResponse\n sourceIdentity = [\"app\", appId]\n }\n\n let workflowRun: ParsedCheckRun[\"workflowRun\"]\n if (input.checkSuite.workflowRun === null) {\n workflowRun = undefined\n } else {\n if (!isRecord(input.checkSuite.workflowRun) || !isRecord(input.checkSuite.workflowRun.workflow)) {\n return invalidGitHubResponse\n }\n const event = parseNonBlankString(input.checkSuite.workflowRun.event)\n const workflowId = parseNonBlankString(input.checkSuite.workflowRun.workflow.id)\n const runNumber = input.checkSuite.workflowRun.runNumber\n const runAttempt = input.checkSuite.workflowRun.runAttempt\n if (\n event === undefined ||\n workflowId === undefined ||\n !Number.isInteger(runNumber) ||\n Number(runNumber) <= 0 ||\n !Number.isInteger(runAttempt) ||\n Number(runAttempt) <= 0\n ) {\n return invalidGitHubResponse\n }\n workflowRun = { event, workflowId, runNumber: Number(runNumber), runAttempt: Number(runAttempt) }\n }\n\n return {\n ok: true,\n value: { tag: \"CheckRun\", id, name, status, conclusion, suiteId, suiteCreatedAt, sourceIdentity, workflowRun },\n }\n}\n\nfunction parseCheckContexts(input: unknown): Result<ParsedCheckContextPage, InvalidGitHubResponse> {\n if (\n !isRecord(input) ||\n !Number.isInteger(input.totalCount) ||\n Number(input.totalCount) < 0 ||\n !isRecord(input.pageInfo) ||\n typeof input.pageInfo.hasNextPage !== \"boolean\" ||\n (input.pageInfo.endCursor !== null && typeof input.pageInfo.endCursor !== \"string\")\n ) {\n return invalidGitHubResponse\n }\n\n const nodes = input.nodes === null && input.totalCount === 0 ? [] : input.nodes\n if (!Array.isArray(nodes) || nodes.length > maximumCheckContextsPerPage || nodes.length > Number(input.totalCount)) {\n return invalidGitHubResponse\n }\n\n const contexts: ParsedCheckContext[] = []\n const ids = new Set<string>()\n for (const node of nodes) {\n if (!isRecord(node)) return invalidGitHubResponse\n let parsed: Result<ParsedCheckContext, InvalidGitHubResponse>\n switch (node.__typename) {\n case \"StatusContext\":\n if (checkRunOnlyFields.some((field) => field in node)) return invalidGitHubResponse\n parsed = parseStatusContext(node)\n break\n case \"CheckRun\":\n if (statusContextOnlyFields.some((field) => field in node)) return invalidGitHubResponse\n parsed = parseCheckRun(node)\n break\n default:\n return invalidGitHubResponse\n }\n if (!parsed.ok || ids.has(parsed.value.id)) return invalidGitHubResponse\n ids.add(parsed.value.id)\n contexts.push(parsed.value)\n }\n const nextCursor = input.pageInfo.hasNextPage ? parseNonBlankString(input.pageInfo.endCursor) : undefined\n if (input.pageInfo.hasNextPage && nextCursor === undefined) return invalidGitHubResponse\n if (nextCursor !== undefined && contexts.length === 0) return invalidGitHubResponse\n return {\n ok: true,\n value: {\n contexts,\n totalCount: Number(input.totalCount),\n ...(nextCursor === undefined ? {} : { nextCursor }),\n },\n }\n}\n\nfunction classifyStatusContext(state: StatusContextState): Exclude<CheckBucket, \"ignored\"> {\n switch (state) {\n case \"ERROR\":\n case \"FAILURE\":\n return \"failed\"\n case \"EXPECTED\":\n case \"PENDING\":\n return \"pending\"\n case \"SUCCESS\":\n return \"passed\"\n default:\n return casesHandled(state)\n }\n}\n\nfunction classifyCheckRun(checkRun: ParsedCheckRun): CheckBucket {\n if (checkRun.status !== \"COMPLETED\") return \"pending\"\n switch (checkRun.conclusion) {\n case \"FAILURE\":\n case \"CANCELLED\":\n case \"TIMED_OUT\":\n case \"ACTION_REQUIRED\":\n case \"STARTUP_FAILURE\":\n case \"STALE\":\n return \"failed\"\n case \"SUCCESS\":\n return \"passed\"\n case \"NEUTRAL\":\n case \"SKIPPED\":\n case null:\n return \"ignored\"\n default:\n return casesHandled(checkRun.conclusion)\n }\n}\n\nfunction classifyContexts(contexts: readonly ParsedCheckContext[]): PullRequestCi {\n const statusContexts = new Map<string, { createdAt: ParsedTimestamp; buckets: CheckBucket[] }>()\n const workflowChecks = new Map<string, { runNumber: number; runAttempt: number; buckets: CheckBucket[] }>()\n const nonWorkflowChecks = new Map<string, { suiteCreatedAt: ParsedTimestamp; buckets: CheckBucket[] }>()\n\n for (const context of contexts) {\n if (context.tag === \"StatusContext\") {\n const identity = context.context.toLowerCase()\n const existing = statusContexts.get(identity)\n const bucket = classifyStatusContext(context.state)\n const ordering = existing === undefined ? 1 : compareTimestamps(context.createdAt, existing.createdAt)\n if (ordering > 0) {\n statusContexts.set(identity, { createdAt: context.createdAt, buckets: [bucket] })\n } else if (ordering === 0 && existing !== undefined) {\n existing.buckets.push(bucket)\n }\n continue\n }\n\n const bucket = classifyCheckRun(context)\n if (context.workflowRun !== undefined) {\n const identity = JSON.stringify([\n \"workflow\",\n context.sourceIdentity,\n context.workflowRun.workflowId,\n context.workflowRun.event,\n context.name,\n ])\n const existing = workflowChecks.get(identity)\n const isNewer =\n existing === undefined ||\n context.workflowRun.runNumber > existing.runNumber ||\n (context.workflowRun.runNumber === existing.runNumber && context.workflowRun.runAttempt > existing.runAttempt)\n if (isNewer) {\n workflowChecks.set(identity, {\n runNumber: context.workflowRun.runNumber,\n runAttempt: context.workflowRun.runAttempt,\n buckets: [bucket],\n })\n } else if (\n context.workflowRun.runNumber === existing.runNumber &&\n context.workflowRun.runAttempt === existing.runAttempt\n ) {\n existing.buckets.push(bucket)\n }\n continue\n }\n\n const identity = JSON.stringify([\"check\", context.sourceIdentity, context.name])\n const existing = nonWorkflowChecks.get(identity)\n const ordering = existing === undefined ? 1 : compareTimestamps(context.suiteCreatedAt, existing.suiteCreatedAt)\n if (ordering > 0) {\n nonWorkflowChecks.set(identity, { suiteCreatedAt: context.suiteCreatedAt, buckets: [bucket] })\n } else if (ordering === 0 && existing !== undefined) {\n existing.buckets.push(bucket)\n }\n }\n\n const buckets = new Set<CheckBucket>()\n for (const selection of [...statusContexts.values(), ...workflowChecks.values(), ...nonWorkflowChecks.values()]) {\n for (const bucket of selection.buckets) buckets.add(bucket)\n }\n if (buckets.has(\"failed\")) return \"failed\"\n if (buckets.has(\"pending\")) return \"pending\"\n if (buckets.has(\"passed\")) return \"passed\"\n return \"none\"\n}\n\nfunction parseStatusCheckRollup(input: unknown): Result<ParsedCheckContextPage | null, InvalidGitHubResponse> {\n if (input === null) return { ok: true, value: null }\n if (!isRecord(input)) return invalidGitHubResponse\n return parseCheckContexts(input.contexts)\n}\n\nfunction samePullRequest(left: PullRequestUrl, right: PullRequestUrl): boolean {\n return (\n left.number === right.number &&\n left.owner.toLowerCase() === right.owner.toLowerCase() &&\n left.repository.toLowerCase() === right.repository.toLowerCase()\n )\n}\n\nfunction parseMergeability(input: unknown): Result<PullRequestMergeability, InvalidGitHubResponse> {\n switch (input) {\n case \"MERGEABLE\":\n return { ok: true, value: \"mergeable\" }\n case \"CONFLICTING\":\n return { ok: true, value: \"conflicting\" }\n case \"UNKNOWN\":\n return { ok: true, value: \"unknown\" }\n default:\n return invalidGitHubResponse\n }\n}\n\nfunction parseMergeStateStatus(input: unknown): Result<\"behind\" | \"other\", InvalidGitHubResponse> {\n switch (input) {\n case \"BEHIND\":\n return { ok: true, value: \"behind\" }\n case \"BLOCKED\":\n case \"CLEAN\":\n case \"DIRTY\":\n case \"DRAFT\":\n case \"HAS_HOOKS\":\n case \"UNKNOWN\":\n case \"UNSTABLE\":\n return { ok: true, value: \"other\" }\n default:\n return invalidGitHubResponse\n }\n}\n\nfunction parseRequiredStatusChecks(input: unknown): Result<boolean, InvalidGitHubResponse> {\n if (!Array.isArray(input)) return invalidGitHubResponse\n for (const check of input) {\n if (!isRecord(check) || typeof check.context !== \"string\" || check.context.trim() === \"\") {\n return invalidGitHubResponse\n }\n }\n return { ok: true, value: input.length > 0 }\n}\n\nfunction parseRules(input: unknown): Result<Readonly<{ strict: boolean; incomplete: boolean }>, InvalidGitHubResponse> {\n if (\n !isRecord(input) ||\n !Number.isInteger(input.totalCount) ||\n Number(input.totalCount) < 0 ||\n !isRecord(input.pageInfo) ||\n typeof input.pageInfo.hasNextPage !== \"boolean\"\n ) {\n return invalidGitHubResponse\n }\n\n const nodes = input.nodes === null && input.totalCount === 0 ? [] : input.nodes\n if (!Array.isArray(nodes) || nodes.length > Number(input.totalCount)) return invalidGitHubResponse\n if (input.pageInfo.hasNextPage ? nodes.length >= Number(input.totalCount) : nodes.length !== input.totalCount) {\n return invalidGitHubResponse\n }\n\n let strict = false\n for (const node of nodes) {\n if (!isRecord(node) || !(node.parameters === null || isRecord(node.parameters))) {\n return invalidGitHubResponse\n }\n if (node.parameters === null) continue\n if (typeof node.parameters.__typename !== \"string\") return invalidGitHubResponse\n if (node.parameters.__typename !== \"RequiredStatusChecksParameters\") continue\n if (typeof node.parameters.strictRequiredStatusChecksPolicy !== \"boolean\") return invalidGitHubResponse\n const requiredChecks = parseRequiredStatusChecks(node.parameters.requiredStatusChecks)\n if (!requiredChecks.ok) return requiredChecks\n if (node.parameters.strictRequiredStatusChecksPolicy && requiredChecks.value) strict = true\n }\n\n return { ok: true, value: { strict, incomplete: input.pageInfo.hasNextPage } }\n}\n\nfunction parseRefUpdateRule(input: unknown): Result<boolean, InvalidGitHubResponse> {\n if (input === null) return { ok: true, value: false }\n if (!isRecord(input)) return invalidGitHubResponse\n if (input.requiredStatusCheckContexts === null) return { ok: true, value: false }\n if (!Array.isArray(input.requiredStatusCheckContexts)) return invalidGitHubResponse\n for (const context of input.requiredStatusCheckContexts) {\n if (typeof context !== \"string\" || context.trim() === \"\") return invalidGitHubResponse\n }\n return { ok: true, value: input.requiredStatusCheckContexts.length > 0 }\n}\n\nfunction parseUpdatePolicy(\n input: unknown,\n): Result<Readonly<{ strict: boolean; incomplete: boolean }>, InvalidGitHubResponse> {\n if (input === null) return { ok: true, value: { strict: false, incomplete: false } }\n if (!isRecord(input)) return invalidGitHubResponse\n\n const refUpdateHasRequiredChecks = parseRefUpdateRule(input.refUpdateRule)\n if (!refUpdateHasRequiredChecks.ok) return refUpdateHasRequiredChecks\n\n let branchProtectionIsStrict = false\n if (input.branchProtectionRule !== null) {\n if (\n !isRecord(input.branchProtectionRule) ||\n typeof input.branchProtectionRule.requiresStatusChecks !== \"boolean\" ||\n typeof input.branchProtectionRule.requiresStrictStatusChecks !== \"boolean\"\n ) {\n return invalidGitHubResponse\n }\n branchProtectionIsStrict =\n input.branchProtectionRule.requiresStatusChecks && input.branchProtectionRule.requiresStrictStatusChecks\n }\n\n const rules = parseRules(input.rules)\n if (!rules.ok) return rules\n return {\n ok: true,\n value: {\n strict: branchProtectionIsStrict || rules.value.strict,\n incomplete: rules.value.incomplete || (input.branchProtectionRule === null && refUpdateHasRequiredChecks.value),\n },\n }\n}\n\nfunction parseBlocker(\n mergeStateStatusInput: unknown,\n baseRefInput: unknown,\n): Result<PullRequestBlocker, InvalidGitHubResponse> {\n const mergeStateStatus = parseMergeStateStatus(mergeStateStatusInput)\n if (!mergeStateStatus.ok) return mergeStateStatus\n if (mergeStateStatus.value !== \"behind\") return { ok: true, value: \"none\" }\n const updatePolicy = parseUpdatePolicy(baseRefInput)\n if (!updatePolicy.ok) return updatePolicy\n if (updatePolicy.value.strict) return { ok: true, value: \"behind\" }\n return updatePolicy.value.incomplete ? invalidGitHubResponse : { ok: true, value: \"none\" }\n}\n\ntype ParsedPullRequestMetadata = Readonly<{\n title: string\n state: \"OPEN\" | \"CLOSED\" | \"MERGED\"\n mergeability: PullRequestMergeability\n mergeStateStatus: unknown\n baseRef: unknown\n}>\n\nfunction parsePullRequestMetadata(\n input: unknown,\n pullRequest: PullRequestUrl,\n): Result<ParsedPullRequestMetadata, InvalidGitHubResponse> {\n if (\n !isRecord(input) ||\n input.__typename !== \"PullRequest\" ||\n typeof input.title !== \"string\" ||\n input.title.trim() === \"\"\n ) {\n return invalidGitHubResponse\n }\n if (input.state !== \"OPEN\" && input.state !== \"CLOSED\" && input.state !== \"MERGED\") {\n return invalidGitHubResponse\n }\n if (input.mergedAt !== null && typeof input.mergedAt !== \"string\") return invalidGitHubResponse\n if (typeof input.mergedAt === \"string\" && Number.isNaN(new Date(input.mergedAt).valueOf())) {\n return invalidGitHubResponse\n }\n if (input.state === \"MERGED\" && typeof input.mergedAt !== \"string\") return invalidGitHubResponse\n if (input.state !== \"MERGED\" && input.mergedAt !== null) return invalidGitHubResponse\n if (typeof input.url !== \"string\") return invalidGitHubResponse\n\n const responseUrl = parsePullRequestUrl(input.url)\n if (!responseUrl.ok || !samePullRequest(responseUrl.value, pullRequest)) return invalidGitHubResponse\n\n const mergeability = parseMergeability(input.mergeable)\n if (!mergeability.ok) return mergeability\n\n return {\n ok: true,\n value: {\n title: input.title,\n state: input.state,\n mergeability: mergeability.value,\n mergeStateStatus: input.mergeStateStatus,\n baseRef: input.baseRef,\n },\n }\n}\n\nfunction finalizeResponse(\n metadata: ParsedPullRequestMetadata,\n pullRequest: PullRequestUrl,\n ci: PullRequestCi,\n): Result<AvailablePullRequestStatus, InvalidGitHubResponse> {\n let state: PullRequestState\n switch (metadata.state) {\n case \"OPEN\": {\n let blocker: PullRequestBlocker = \"none\"\n if (metadata.mergeability !== \"conflicting\" && (ci === \"none\" || ci === \"passed\")) {\n const parsedBlocker = parseBlocker(metadata.mergeStateStatus, metadata.baseRef)\n if (!parsedBlocker.ok) return parsedBlocker\n blocker = parsedBlocker.value\n }\n state = { tag: \"Open\", ci, mergeability: metadata.mergeability, blocker }\n break\n }\n case \"MERGED\":\n state = { tag: \"Merged\" }\n break\n case \"CLOSED\":\n state = { tag: \"Closed\" }\n break\n default:\n return casesHandled(metadata.state)\n }\n\n return {\n ok: true,\n value: {\n tag: \"Available\",\n pullRequest,\n title: metadata.title,\n state,\n stale: false,\n },\n }\n}\n\ntype ParsedInitialPullRequest = Readonly<{\n pullRequest: PullRequestUrl\n metadata: ParsedPullRequestMetadata\n contextPage: ParsedCheckContextPage | null\n}>\n\nfunction parseInitialPullRequest(\n input: unknown,\n pullRequest: PullRequestUrl,\n): Result<ParsedInitialPullRequest, PullRequestNotFound | InvalidGitHubResponse> {\n if (input === null) return pullRequestNotFound\n if (!isRecord(input)) return invalidGitHubResponse\n const contextPage = parseStatusCheckRollup(input.statusCheckRollup)\n if (!contextPage.ok) return contextPage\n if (\n contextPage.value !== null &&\n contextPage.value.nextCursor === undefined &&\n contextPage.value.contexts.length !== contextPage.value.totalCount\n ) {\n return invalidGitHubResponse\n }\n const metadata = parsePullRequestMetadata(input, pullRequest)\n return metadata.ok\n ? { ok: true, value: { pullRequest, metadata: metadata.value, contextPage: contextPage.value } }\n : metadata\n}\n\nfunction createBatchQuery(size: number): string {\n const variables = Array.from({ length: size }, (_, index) => `$url${index}: URI!`).join(\", \")\n const fields = Array.from(\n { length: size },\n (_, index) => `pr${index}: resource(url: $url${index}) { ${pullRequestSelection} }`,\n ).join(\" \")\n return `query BatchPullRequests(${variables}) { ${fields} }`\n}\n\nfunction parseGraphqlErrorAliases(input: unknown, size: number): Result<ReadonlySet<number>, InvalidGitHubResponse> {\n if (input === undefined) return { ok: true, value: new Set() }\n if (!Array.isArray(input)) return invalidGitHubResponse\n const aliases = new Set<number>()\n for (const error of input) {\n if (\n !isRecord(error) ||\n typeof error.message !== \"string\" ||\n !Array.isArray(error.path) ||\n typeof error.path[0] !== \"string\"\n ) {\n return invalidGitHubResponse\n }\n const match = /^pr([0-9]+)$/.exec(error.path[0])\n if (match === null) return invalidGitHubResponse\n const index = Number(match[1])\n if (!Number.isInteger(index) || index < 0 || index >= size) return invalidGitHubResponse\n aliases.add(index)\n }\n return { ok: true, value: aliases }\n}\n\nfunction parseBatchResponse(\n input: unknown,\n pullRequests: readonly PullRequestUrl[],\n): Result<\n readonly Result<ParsedInitialPullRequest, PullRequestNotFound | InvalidGitHubResponse>[],\n InvalidGitHubResponse\n> {\n if (!isRecord(input) || !isRecord(input.data)) return invalidGitHubResponse\n const data = input.data\n const errorAliases = parseGraphqlErrorAliases(input.errors, pullRequests.length)\n if (!errorAliases.ok) return errorAliases\n return {\n ok: true,\n value: pullRequests.map((pullRequest, index) =>\n errorAliases.value.has(index) ? invalidGitHubResponse : parseInitialPullRequest(data[`pr${index}`], pullRequest),\n ),\n }\n}\n\nfunction parseContinuationResponse(\n input: unknown,\n pullRequest: PullRequestUrl,\n): Result<ParsedCheckContextPage, InvalidGitHubResponse> {\n if (\n !isRecord(input) ||\n (input.errors !== undefined && (!Array.isArray(input.errors) || input.errors.length > 0)) ||\n !isRecord(input.data) ||\n !isRecord(input.data.resource)\n ) {\n return invalidGitHubResponse\n }\n const resource = input.data.resource\n if (resource.__typename !== \"PullRequest\" || typeof resource.url !== \"string\") return invalidGitHubResponse\n const responseUrl = parsePullRequestUrl(resource.url)\n if (!responseUrl.ok || !samePullRequest(responseUrl.value, pullRequest) || !isRecord(resource.statusCheckRollup)) {\n return invalidGitHubResponse\n }\n return parseCheckContexts(resource.statusCheckRollup.contexts)\n}\n\nfunction isCancellation(cause: unknown, signal: AbortSignal | undefined): boolean {\n if (signal?.aborted) return true\n const originalCause = parseProcessExecutionFailed(cause)?.cause ?? cause\n return originalCause instanceof Error && originalCause.name === \"AbortError\"\n}\n\nconst authenticationFailureMarkers = [\"http 401\", \"bad credentials\", \"not logged into\", \"gh auth login\"] as const\n\nfunction isAuthenticationFailure(failure: ProcessExecutionFailed): boolean {\n if (failure.code === 4) return true\n const stderr = failure.stderr.toLowerCase()\n return authenticationFailureMarkers.some((marker) => stderr.includes(marker))\n}\n\nfunction classifyProcessFailure(cause: unknown): GitHubCliMissing | GitHubAuthenticationRequired | GitHubUnavailable {\n const failure = parseProcessExecutionFailed(cause)\n if (failure?.code === \"ENOENT\") {\n return { tag: \"GitHubCliMissing\", message: \"GitHub CLI is not installed\", cause }\n }\n if (failure && isAuthenticationFailure(failure)) {\n return { tag: \"GitHubAuthenticationRequired\", message: \"GitHub CLI authentication required\", cause }\n }\n return { tag: \"GitHubUnavailable\", message: \"GitHub status unavailable\", cause }\n}\n\nfunction processFailureStdout(cause: unknown): string | undefined {\n if (!isRecord(cause) || typeof cause.stdout !== \"string\" || cause.stdout.trim() === \"\") return undefined\n return cause.stdout\n}\n\ntype ProcessFailure = GitHubCliMissing | GitHubAuthenticationRequired | GitHubUnavailable\ntype DecodedProcessOutput = Readonly<{ decoded: unknown; processFailure?: ProcessFailure }>\n\nasync function runAndDecode(\n runner: ProcessRunner,\n args: readonly string[],\n options: Readonly<{ signal?: AbortSignal }>,\n): Promise<Result<DecodedProcessOutput, ProcessFailure | GitHubCancelled | InvalidGitHubResponse>> {\n let stdout: string\n let processFailure: ProcessFailure | undefined\n try {\n const output = await runner(\"gh\", args, options)\n stdout = output.stdout\n } catch (cause) {\n if (isCancellation(cause, options.signal)) {\n return {\n ok: false,\n error: {\n tag: \"GitHubCancelled\",\n message: \"GitHub status request cancelled\",\n cause,\n },\n }\n }\n processFailure = classifyProcessFailure(cause)\n const partialStdout = processFailureStdout(cause)\n if (partialStdout === undefined) return { ok: false, error: processFailure }\n stdout = partialStdout\n }\n\n let decoded: unknown\n try {\n decoded = JSON.parse(stdout)\n } catch {\n return processFailure === undefined ? invalidGitHubResponse : { ok: false, error: processFailure }\n }\n return { ok: true, value: { decoded, ...(processFailure === undefined ? {} : { processFailure }) } }\n}\n\ntype ContinuationOutcome =\n | Readonly<{ tag: \"Item\"; result: Result<AvailablePullRequestStatus, PullRequestItemFailure> }>\n | Readonly<{ tag: \"Cancelled\"; error: GitHubCancelled }>\n\nasync function continuePullRequest(\n runner: ProcessRunner,\n initial: ParsedInitialPullRequest,\n options: Readonly<{ signal?: AbortSignal }>,\n): Promise<ContinuationOutcome> {\n if (initial.contextPage?.nextCursor === undefined) {\n const ci = initial.contextPage === null ? \"none\" : classifyContexts(initial.contextPage.contexts)\n return { tag: \"Item\", result: finalizeResponse(initial.metadata, initial.pullRequest, ci) }\n }\n\n const contexts = [...initial.contextPage.contexts]\n const totalCount = initial.contextPage.totalCount\n const contextIds = new Set(contexts.map((context) => context.id))\n const cursors = new Set([initial.contextPage.nextCursor])\n let cursor: string | undefined = initial.contextPage.nextCursor\n while (cursor !== undefined) {\n const args = [\n \"api\",\n \"graphql\",\n \"--method\",\n \"POST\",\n \"-f\",\n `query=${continuationQuery}`,\n \"-f\",\n `url=${initial.pullRequest.url}`,\n \"-f\",\n `cursor=${cursor}`,\n ]\n const output = await runAndDecode(runner, args, options)\n if (!output.ok) {\n return output.error.tag === \"GitHubCancelled\"\n ? { tag: \"Cancelled\", error: output.error }\n : { tag: \"Item\", result: { ok: false, error: output.error } }\n }\n const page = parseContinuationResponse(output.value.decoded, initial.pullRequest)\n if (!page.ok) {\n return {\n tag: \"Item\",\n result: { ok: false, error: output.value.processFailure ?? page.error },\n }\n }\n if (page.value.totalCount !== totalCount) return { tag: \"Item\", result: invalidGitHubResponse }\n for (const context of page.value.contexts) {\n if (contextIds.has(context.id)) return { tag: \"Item\", result: invalidGitHubResponse }\n contextIds.add(context.id)\n }\n if (contexts.length + page.value.contexts.length > totalCount) {\n return { tag: \"Item\", result: invalidGitHubResponse }\n }\n if (page.value.nextCursor !== undefined) {\n if (cursors.has(page.value.nextCursor)) return { tag: \"Item\", result: invalidGitHubResponse }\n cursors.add(page.value.nextCursor)\n }\n contexts.push(...page.value.contexts)\n cursor = page.value.nextCursor\n }\n\n if (contexts.length !== totalCount) return { tag: \"Item\", result: invalidGitHubResponse }\n\n const status = finalizeResponse(initial.metadata, initial.pullRequest, classifyContexts(contexts))\n return { tag: \"Item\", result: status }\n}\n\nexport const execFileRunner: ProcessRunner = (file, args, options) =>\n new Promise((resolve, reject) => {\n execFile(\n file,\n [...args],\n {\n encoding: \"utf8\",\n ...(options.signal ? { signal: options.signal } : {}),\n ...(options.cwd ? { cwd: options.cwd } : {}),\n },\n (error, stdout, stderr) => {\n if (error) {\n reject({\n tag: \"ProcessExecutionFailed\",\n code: error.code ?? null,\n stderr,\n stdout,\n cause: error,\n } satisfies ProcessExecutionFailed)\n return\n }\n resolve({ stdout })\n },\n )\n })\n\nexport function createGitHubClient(runner: ProcessRunner = execFileRunner): GitHubClient {\n return {\n async get(pullRequests, options = {}) {\n if (pullRequests.length === 0) return { ok: true, value: [] }\n if (pullRequests.length > maximumPullRequestsPerBatch) return githubBatchLimitExceeded\n const query = createBatchQuery(pullRequests.length)\n const args = [\"api\", \"graphql\", \"--method\", \"POST\", \"-f\", `query=${query}`]\n for (const [index, pullRequest] of pullRequests.entries()) {\n args.push(\"-f\", `url${index}=${pullRequest.url}`)\n }\n const output = await runAndDecode(runner, args, options)\n if (!output.ok) return output\n const parsed = parseBatchResponse(output.value.decoded, pullRequests)\n if (!parsed.ok) return { ok: false, error: output.value.processFailure ?? parsed.error }\n\n const outcomes = await Promise.all(\n parsed.value.map((item): Promise<ContinuationOutcome> => {\n if (!item.ok) return Promise.resolve({ tag: \"Item\", result: item })\n return continuePullRequest(runner, item.value, options)\n }),\n )\n const batch: Result<AvailablePullRequestStatus, PullRequestItemFailure>[] = []\n let cancellation: GitHubCancelled | undefined\n for (const outcome of outcomes) {\n if (outcome.tag === \"Cancelled\") cancellation ??= outcome.error\n else batch.push(outcome.result)\n }\n return cancellation === undefined ? { ok: true, value: batch } : { ok: false, error: cancellation }\n },\n }\n}\n\nexport type StatusAppearance = Readonly<{\n tone: \"green\" | \"yellow\" | \"red\" | \"purple\" | \"gray\"\n label: string\n strikethrough: boolean\n}>\n\nconst openAppearances = {\n passed: { tone: \"green\", label: \"checks passed\", strikethrough: false },\n pending: { tone: \"yellow\", label: \"checks pending\", strikethrough: false },\n failed: { tone: \"red\", label: \"checks failed\", strikethrough: false },\n none: { tone: \"gray\", label: \"no checks\", strikethrough: false },\n} satisfies Record<PullRequestCi, StatusAppearance>\n\nconst diagnosticLabels = {\n GitHubCliMissing: \"install gh\",\n GitHubAuthenticationRequired: \"run gh auth login\",\n GitHubUnavailable: \"GitHub unavailable\",\n PullRequestNotFound: \"not found or inaccessible\",\n InvalidGitHubResponse: \"invalid GitHub response\",\n} satisfies Record<PullRequestDiagnostic, string>\n\nfunction stateAppearance(state: PullRequestState): StatusAppearance {\n switch (state.tag) {\n case \"Open\": {\n switch (state.mergeability) {\n case \"conflicting\":\n return { tone: \"red\", label: \"merge conflict\", strikethrough: false }\n case \"mergeable\":\n case \"unknown\":\n switch (state.ci) {\n case \"failed\":\n case \"pending\":\n return openAppearances[state.ci]\n case \"none\":\n case \"passed\":\n switch (state.blocker) {\n case \"behind\":\n return { tone: \"yellow\", label: \"branch behind\", strikethrough: false }\n case \"none\":\n return openAppearances[state.ci]\n default:\n return casesHandled(state.blocker)\n }\n default:\n return casesHandled(state.ci)\n }\n default:\n return casesHandled(state.mergeability)\n }\n }\n case \"Merged\":\n return { tone: \"purple\", label: \"merged\", strikethrough: true }\n case \"Closed\":\n return { tone: \"red\", label: \"closed\", strikethrough: true }\n default:\n return casesHandled(state)\n }\n}\n\nexport function statusAppearance(status: PullRequestStatus): StatusAppearance {\n if (status.tag === \"Unavailable\") {\n return {\n tone: \"gray\",\n label: status.diagnostic === undefined ? \"status unavailable\" : diagnosticLabels[status.diagnostic],\n strikethrough: false,\n }\n }\n\n const appearance = stateAppearance(status.state)\n return status.stale\n ? { ...appearance, label: `${appearance.label} (stale; ${diagnosticLabels[status.diagnostic]})` }\n : appearance\n}\n",
|
|
21
|
-
"
|
|
22
|
-
"import { execFileRunner, type ProcessRunner } from \"./github.js\"\nimport type { PullRequestUrl, Result } from \"./url.js\"\n\nexport type OpenExternalUrlFailure =\n | Readonly<{ tag: \"UnsupportedPlatform\"; message: string; platform: string }>\n | Readonly<{ tag: \"OpenExternalUrlFailed\"; message: string; cause: unknown }>\n\ntype OpenExternalUrlOptions = Readonly<{\n platform?: string\n runner?: ProcessRunner\n signal?: AbortSignal\n}>\n\nexport async function openExternalUrl(\n url: string,\n subject: string,\n options: OpenExternalUrlOptions = {},\n): Promise<Result<void, OpenExternalUrlFailure>> {\n const platform = options.platform ?? process.platform\n const executable = platform === \"darwin\" ? \"open\" : platform === \"linux\" ? \"xdg-open\" : undefined\n if (executable === undefined) {\n return {\n ok: false,\n error: {\n tag: \"UnsupportedPlatform\",\n message: `Opening ${subject} is unsupported on ${platform}`,\n platform,\n },\n }\n }\n\n try {\n await (options.runner ?? execFileRunner)(executable, [url], options.signal ? { signal: options.signal } : {})\n return { ok: true, value: undefined }\n } catch (cause) {\n return {\n ok: false,\n error: { tag: \"OpenExternalUrlFailed\", message: `Unable to open ${subject}`, cause },\n }\n }\n}\n\nexport type OpenPullRequestFailure =\n | Readonly<{ tag: \"UnsupportedPlatform\"; message: string; platform: string }>\n | Readonly<{\n tag: \"OpenPullRequestFailed\"\n message: \"Unable to open the pull request\"\n cause: unknown\n }>\n\nexport async function openPullRequest(\n pullRequest: PullRequestUrl,\n options: OpenExternalUrlOptions = {},\n): Promise<Result<void, OpenPullRequestFailure>> {\n const result = await openExternalUrl(pullRequest.url, \"pull requests\", options)\n if (result.ok) return result\n if (result.error.tag === \"UnsupportedPlatform\") {\n return {\n ok: false,\n error: result.error,\n }\n }\n return {\n ok: false,\n error: {\n tag: \"OpenPullRequestFailed\",\n message: \"Unable to open the pull request\",\n cause: result.error.cause,\n },\n }\n}\n",
|
|
23
|
-
"import { casesHandled } from \"./exhaustive.js\"\nimport { openExternalUrl } from \"./external-url.js\"\nimport { execFileRunner, type ProcessRunner } from \"./github.js\"\nimport type { Result } from \"./url.js\"\n\nexport type FeedbackKind = \"bug\" | \"feature\" | \"other\"\n\nexport type FeedbackDiagnostics = Readonly<{\n pluginVersion: string\n opencodeVersion: string\n operatingSystem: string\n installationSource: string\n}>\n\nexport type FeedbackInput =\n | Readonly<{\n kind: \"bug\"\n title: string\n problem: string\n reproduction: string\n expectedBehavior: string\n }>\n | Readonly<{\n kind: \"feature\"\n title: string\n problem: string\n desiredOutcome: string\n constraints?: string\n }>\n | Readonly<{ kind: \"other\"; title: string; details: string }>\n\nexport type FeedbackDraft = Readonly<{\n title: string\n body: string\n label?: \"bug\" | \"enhancement\"\n template?: \"bug_report.md\" | \"feature_request.md\"\n}>\n\nexport type FeedbackFailure = Readonly<{\n tag: \"InvalidFeedback\"\n message: string\n}>\n\nexport type OpenFeedbackFailure =\n | Readonly<{ tag: \"UnsupportedPlatform\"; message: string; platform: string }>\n | Readonly<{\n tag: \"FeedbackUrlTooLong\"\n message: \"Feedback is too long for browser delivery; choose GitHub CLI delivery\"\n }>\n | Readonly<{\n tag: \"OpenFeedbackFailed\"\n message: \"Unable to open feedback; choose GitHub CLI delivery or retry\"\n cause: unknown\n }>\n\nexport type SubmitFeedbackFailure =\n | Readonly<{\n tag: \"GitHubCliMissing\"\n message: \"GitHub CLI is not installed; install gh and retry\"\n cause: unknown\n }>\n | Readonly<{\n tag: \"GitHubAuthenticationRequired\"\n message: \"GitHub CLI authentication required; run gh auth login\"\n cause: unknown\n }>\n | Readonly<{ tag: \"SubmitFeedbackCancelled\" }>\n | Readonly<{\n tag: \"InvalidGitHubResponse\"\n message: \"GitHub CLI did not return the created issue URL\"\n }>\n | Readonly<{\n tag: \"SubmitFeedbackFailed\"\n message: \"Unable to submit feedback with GitHub CLI; choose browser delivery or retry\"\n cause: unknown\n }>\n\ntype ProcessExecutionFailed = Readonly<{\n tag: \"ProcessExecutionFailed\"\n code: string | number | null\n stderr: string\n stdout: string\n cause: unknown\n}>\n\nfunction parseProcessExecutionFailed(value: unknown): ProcessExecutionFailed | undefined {\n if (\n value === null ||\n typeof value !== \"object\" ||\n Array.isArray(value) ||\n !(\"tag\" in value) ||\n value.tag !== \"ProcessExecutionFailed\" ||\n !(\"code\" in value) ||\n (value.code !== null && typeof value.code !== \"string\" && typeof value.code !== \"number\") ||\n !(\"stderr\" in value) ||\n typeof value.stderr !== \"string\" ||\n !(\"stdout\" in value) ||\n typeof value.stdout !== \"string\" ||\n !(\"cause\" in value)\n ) {\n return undefined\n }\n\n return {\n tag: \"ProcessExecutionFailed\",\n code: value.code,\n stderr: value.stderr,\n stdout: value.stdout,\n cause: value.cause,\n }\n}\n\nfunction isProcessCancellation(cause: unknown, signal: AbortSignal | undefined): boolean {\n if (signal?.aborted) return true\n const originalCause = parseProcessExecutionFailed(cause)?.cause ?? cause\n return originalCause instanceof Error && originalCause.name === \"AbortError\"\n}\n\nconst authenticationFailureMarkers = [\"http 401\", \"bad credentials\", \"not logged into\", \"gh auth login\"] as const\n\nfunction isAuthenticationFailure(failure: ProcessExecutionFailed): boolean {\n if (failure.code === 4) return true\n const stderr = failure.stderr.toLowerCase()\n return authenticationFailureMarkers.some((marker) => stderr.includes(marker))\n}\n\nfunction trimRequired(value: string, field: string): Result<string, FeedbackFailure> {\n const trimmed = value.trim()\n if (trimmed !== \"\") return { ok: true, value: trimmed }\n\n return {\n ok: false,\n error: { tag: \"InvalidFeedback\", message: `${field} must not be empty` },\n }\n}\n\nfunction appendDiagnostics(\n draft: FeedbackDraft,\n diagnostics: FeedbackDiagnostics | undefined,\n): Result<FeedbackDraft, FeedbackFailure> {\n if (diagnostics === undefined) return { ok: true, value: draft }\n\n const entries = [\n [\"pluginVersion\", \"Plugin version\", diagnostics.pluginVersion],\n [\"opencodeVersion\", \"OpenCode version\", diagnostics.opencodeVersion],\n [\"operatingSystem\", \"Operating system\", diagnostics.operatingSystem],\n [\"installationSource\", \"Installation source\", diagnostics.installationSource],\n ] as const\n const lines: string[] = []\n\n for (const [field, label, value] of entries) {\n const trimmed = trimRequired(value, field)\n if (!trimmed.ok) return trimmed\n lines.push(`- ${label}: ${trimmed.value}`)\n }\n\n return {\n ok: true,\n value: {\n ...draft,\n body: [draft.body, \"\", \"## Diagnostics\", \"\", ...lines].join(\"\\n\"),\n },\n }\n}\n\nexport function createFeedbackDraft(\n input: FeedbackInput,\n diagnostics?: FeedbackDiagnostics,\n): Result<FeedbackDraft, FeedbackFailure> {\n const title = trimRequired(input.title, \"title\")\n if (!title.ok) return title\n\n switch (input.kind) {\n case \"bug\": {\n const problem = trimRequired(input.problem, \"problem\")\n if (!problem.ok) return problem\n const reproduction = trimRequired(input.reproduction, \"reproduction\")\n if (!reproduction.ok) return reproduction\n const expectedBehavior = trimRequired(input.expectedBehavior, \"expectedBehavior\")\n if (!expectedBehavior.ok) return expectedBehavior\n\n return appendDiagnostics(\n {\n title: title.value,\n body: [\n \"## Problem\",\n \"\",\n problem.value,\n \"\",\n \"## Reproduction\",\n \"\",\n reproduction.value,\n \"\",\n \"## Expected Behavior\",\n \"\",\n expectedBehavior.value,\n ].join(\"\\n\"),\n label: \"bug\",\n template: \"bug_report.md\",\n },\n diagnostics,\n )\n }\n case \"feature\": {\n const problem = trimRequired(input.problem, \"problem\")\n if (!problem.ok) return problem\n const desiredOutcome = trimRequired(input.desiredOutcome, \"desiredOutcome\")\n if (!desiredOutcome.ok) return desiredOutcome\n const body = [\"## Problem\", \"\", problem.value, \"\", \"## Desired Outcome\", \"\", desiredOutcome.value]\n const constraints = input.constraints?.trim()\n if (constraints !== undefined && constraints !== \"\") {\n body.push(\"\", \"## Constraints\", \"\", constraints)\n }\n\n return appendDiagnostics(\n {\n title: title.value,\n body: body.join(\"\\n\"),\n label: \"enhancement\",\n template: \"feature_request.md\",\n },\n diagnostics,\n )\n }\n case \"other\": {\n const details = trimRequired(input.details, \"details\")\n if (!details.ok) return details\n\n return appendDiagnostics(\n {\n title: title.value,\n body: [\"## Details\", \"\", details.value].join(\"\\n\"),\n },\n diagnostics,\n )\n }\n default:\n return casesHandled(input)\n }\n}\n\nexport function createFeedbackIssueUrl(draft: FeedbackDraft): string {\n const url = new URL(\"https://github.com/hcrosse/opencode-pr-tracker/issues/new\")\n url.searchParams.set(\"title\", draft.title)\n url.searchParams.set(\"body\", draft.body)\n if (draft.template !== undefined) url.searchParams.set(\"template\", draft.template)\n return url.toString()\n}\n\nexport async function openFeedbackDraft(\n draft: FeedbackDraft,\n options: Readonly<{ platform?: string; runner?: ProcessRunner; signal?: AbortSignal }> = {},\n): Promise<Result<void, OpenFeedbackFailure>> {\n const url = createFeedbackIssueUrl(draft)\n if (url.length > 8_000) {\n return {\n ok: false,\n error: {\n tag: \"FeedbackUrlTooLong\",\n message: \"Feedback is too long for browser delivery; choose GitHub CLI delivery\",\n },\n }\n }\n const result = await openExternalUrl(url, \"feedback\", options)\n if (result.ok) return result\n if (result.error.tag === \"UnsupportedPlatform\") {\n return {\n ok: false,\n error: result.error,\n }\n }\n return {\n ok: false,\n error: {\n tag: \"OpenFeedbackFailed\",\n message: \"Unable to open feedback; choose GitHub CLI delivery or retry\",\n cause: result.error.cause,\n },\n }\n}\n\nexport async function submitFeedbackDraft(\n draft: FeedbackDraft,\n options: Readonly<{ runner?: ProcessRunner; signal?: AbortSignal }> = {},\n): Promise<Result<string, SubmitFeedbackFailure>> {\n const args = [\n \"issue\",\n \"create\",\n \"--repo\",\n \"hcrosse/opencode-pr-tracker\",\n \"--title\",\n draft.title,\n \"--body\",\n draft.body,\n ]\n\n let stdout: string\n try {\n const result = await (options.runner ?? execFileRunner)(\n \"gh\",\n args,\n options.signal ? { signal: options.signal } : {},\n )\n stdout = result.stdout\n } catch (cause) {\n if (isProcessCancellation(cause, options.signal)) {\n return { ok: false, error: { tag: \"SubmitFeedbackCancelled\" } }\n }\n const failure = parseProcessExecutionFailed(cause)\n if (failure?.code === \"ENOENT\") {\n return {\n ok: false,\n error: {\n tag: \"GitHubCliMissing\",\n message: \"GitHub CLI is not installed; install gh and retry\",\n cause,\n },\n }\n }\n if (failure !== undefined && isAuthenticationFailure(failure)) {\n return {\n ok: false,\n error: {\n tag: \"GitHubAuthenticationRequired\",\n message: \"GitHub CLI authentication required; run gh auth login\",\n cause,\n },\n }\n }\n return {\n ok: false,\n error: {\n tag: \"SubmitFeedbackFailed\",\n message: \"Unable to submit feedback with GitHub CLI; choose browser delivery or retry\",\n cause,\n },\n }\n }\n\n const issueUrl = stdout.trim()\n if (issueUrl === \"\") {\n return {\n ok: false,\n error: {\n tag: \"InvalidGitHubResponse\",\n message: \"GitHub CLI did not return the created issue URL\",\n },\n }\n }\n return { ok: true, value: issueUrl }\n}\n",
|
|
24
|
-
"import { createComponent as _$createComponent } from \"@opentui/solid\";\n/** @jsxImportSource @opentui/solid */\n\nimport { join } from \"node:path\";\nimport { checkForUpdate, detectInstallationScopes, formatUpdateInstructions, parseFreshUpdateCache, updateCacheKey } from \"./update.js\";\nfunction createUpdateBus() {\n const listeners = new Set();\n let version;\n return {\n current: () => version,\n publish(value) {\n version = value;\n for (const listener of listeners) listener(value);\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n }\n };\n}\nfunction writeUpdateCache(api, versions, availableVersion, now) {\n const cache = {\n checkedAt: now(),\n ...versions,\n availableVersion\n };\n api.kv.set(updateCacheKey, cache);\n}\nfunction waitForKvReady(api) {\n return new Promise(resolve => {\n let timer;\n const finish = ready => {\n if (timer !== undefined) clearTimeout(timer);\n api.lifecycle.signal.removeEventListener(\"abort\", onAbort);\n resolve(ready);\n };\n const onAbort = () => finish(false);\n const check = () => {\n if (api.lifecycle.signal.aborted) {\n finish(false);\n } else if (api.kv.ready) {\n finish(true);\n } else {\n timer = setTimeout(check, 10);\n }\n };\n api.lifecycle.signal.addEventListener(\"abort\", onAbort, {\n once: true\n });\n check();\n });\n}\nexport function updateStatusLabel(version) {\n return `${version} available`;\n}\nexport function createPluginUpdateController(api, dependencies, release) {\n const updateBus = createUpdateBus();\n const updateChecker = dependencies.updateChecker ?? checkForUpdate;\n const installationScopes = dependencies.installationScopes ?? detectInstallationScopes;\n const now = dependencies.now ?? Date.now;\n const versions = release?.source === \"npm\" && release.version !== undefined ? {\n currentVersion: release.version,\n opencodeVersion: api.app.version\n } : undefined;\n let updateOperations = Promise.resolve();\n function serializeUpdateOperation(operation) {\n const result = updateOperations.then(operation);\n updateOperations = result.then(() => undefined, () => undefined);\n return result;\n }\n let startup;\n if (versions !== undefined) {\n startup = serializeUpdateOperation(async () => {\n try {\n if (!(await waitForKvReady(api))) return;\n const cached = parseFreshUpdateCache(api.kv.get(updateCacheKey), versions, now());\n if (cached !== undefined) {\n updateBus.publish(cached ?? undefined);\n return;\n }\n const result = await updateChecker(versions, {\n signal: api.lifecycle.signal\n });\n if (api.lifecycle.signal.aborted) return;\n const availableVersion = result.ok ? result.value?.version ?? null : null;\n writeUpdateCache(api, versions, availableVersion, now);\n if (result.ok) updateBus.publish(result.value?.version);\n } catch {\n if (!api.lifecycle.signal.aborted && api.kv.ready) writeUpdateCache(api, versions, null, now);\n }\n });\n }\n const command = {\n name: \"pr.tracker.plugin.update\",\n title: \"Update PR tracker plugin\",\n category: \"Plugin\",\n namespace: \"palette\",\n slashName: \"pr-tracker-plugin-update\",\n async run() {\n if (versions === undefined) {\n api.ui.toast({\n variant: \"info\",\n title: \"Pull request tracker\",\n message: \"Update checks are unavailable for this plugin installation\"\n });\n return;\n }\n const result = await serializeUpdateOperation(async () => {\n if (!(await waitForKvReady(api))) return undefined;\n const checked = await updateChecker(versions, {\n signal: api.lifecycle.signal\n });\n if (api.lifecycle.signal.aborted || !checked.ok && checked.error.tag === \"UpdateCheckCancelled\") {\n return undefined;\n }\n if (checked.ok) {\n writeUpdateCache(api, versions, checked.value?.version ?? null, now);\n updateBus.publish(checked.value?.version);\n }\n return checked;\n });\n if (result === undefined) return;\n if (!result.ok) {\n api.ui.toast({\n variant: \"error\",\n title: \"Pull request tracker\",\n message: result.error.message\n });\n return;\n }\n if (result.value === undefined) {\n api.ui.toast({\n variant: \"info\",\n title: \"Pull request tracker\",\n message: \"PR tracker is up to date\"\n });\n return;\n }\n const update = result.value;\n let scopes;\n try {\n const projectRoot = api.state.path.worktree === \"/\" ? api.state.path.directory : api.state.path.worktree;\n scopes = await installationScopes({\n projectConfigDirectory: join(projectRoot, \".opencode\"),\n globalConfigDirectory: api.state.path.config\n });\n } catch {\n scopes = [];\n }\n if (api.lifecycle.signal.aborted) return;\n api.ui.dialog.setSize(\"medium\");\n api.ui.dialog.replace(() => _$createComponent(api.ui.DialogAlert, {\n get title() {\n return `Update PR tracker to ${update.version}`;\n },\n get message() {\n return formatUpdateInstructions(update.version, scopes);\n }\n }));\n }\n };\n return {\n command,\n current: updateBus.current,\n subscribe: updateBus.subscribe,\n startup\n };\n}",
|
|
25
|
-
"import { readFile } from \"node:fs/promises\"\nimport { join } from \"node:path\"\n\nimport type { Result } from \"./url.js\"\n\nexport const updateCacheKey = \"plugin-update-check-v1\"\n\nconst packageName = \"@hcrosse/opencode-pr-tracker\"\nconst registryUrl = `https://registry.npmjs.org/${encodeURIComponent(packageName)}`\nconst updateCacheMilliseconds = 24 * 60 * 60 * 1000\n\nexport type AvailablePluginUpdate = Readonly<{\n currentVersion: string\n version: string\n}>\n\nexport type UpdateCheckFailure =\n | Readonly<{\n tag: \"InvalidUpdateResponse\"\n message: \"The npm registry returned invalid plugin release metadata\"\n }>\n | Readonly<{\n tag: \"UpdateCheckUnavailable\"\n message: \"Unable to check for plugin updates\"\n cause: unknown\n }>\n | Readonly<{\n tag: \"UpdateCheckCancelled\"\n message: \"Plugin update check cancelled\"\n }>\n\nexport type UpdateCache = Readonly<{\n checkedAt: number\n currentVersion: string\n opencodeVersion: string\n availableVersion: string | null\n}>\n\nexport type InstallationScope = \"project\" | \"global\"\n\ntype UpdateVersions = Readonly<{\n currentVersion: string\n opencodeVersion: string\n}>\n\ntype RegistryRelease = Readonly<{\n version: string\n opencodeRange: string\n}>\n\nexport type UpdateFetcher = (url: string, options?: Readonly<{ signal?: AbortSignal }>) => Promise<Response>\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n}\n\nfunction parseRegistryReleases(input: unknown): readonly RegistryRelease[] | undefined {\n if (!isRecord(input) || !isRecord(input.versions)) return undefined\n\n const releases: RegistryRelease[] = []\n for (const [version, metadata] of Object.entries(input.versions)) {\n if (!isRecord(metadata) || !isRecord(metadata.engines) || typeof metadata.engines.opencode !== \"string\") continue\n releases.push({ version, opencodeRange: metadata.engines.opencode })\n }\n return releases\n}\n\nfunction isStableVersion(version: string): boolean {\n return /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:\\+[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?$/.test(version)\n}\n\nfunction isNewerStableVersion(version: string, currentVersion: string): boolean {\n if (!isStableVersion(version)) return false\n try {\n return Bun.semver.order(version, currentVersion) > 0\n } catch {\n return false\n }\n}\n\nfunction newestCompatibleUpdate(\n releases: readonly RegistryRelease[],\n versions: UpdateVersions,\n): AvailablePluginUpdate | undefined {\n let latest: string | undefined\n for (const release of releases) {\n if (!isNewerStableVersion(release.version, versions.currentVersion)) continue\n try {\n if (!Bun.semver.satisfies(versions.opencodeVersion, release.opencodeRange)) continue\n if (latest === undefined || Bun.semver.order(release.version, latest) > 0) latest = release.version\n } catch {\n continue\n }\n }\n return latest === undefined ? undefined : { currentVersion: versions.currentVersion, version: latest }\n}\n\nfunction isCancellation(cause: unknown, signal: AbortSignal | undefined): boolean {\n return signal?.aborted === true || (cause instanceof DOMException && cause.name === \"AbortError\")\n}\n\nexport async function checkForUpdate(\n versions: UpdateVersions,\n options: Readonly<{\n fetch?: UpdateFetcher\n signal?: AbortSignal\n }> = {},\n): Promise<Result<AvailablePluginUpdate | undefined, UpdateCheckFailure>> {\n const fetcher: UpdateFetcher = options.fetch ?? ((url, input) => globalThis.fetch(url, input))\n let response: Response\n try {\n response = await fetcher(registryUrl, options.signal ? { signal: options.signal } : {})\n } catch (cause) {\n if (isCancellation(cause, options.signal)) {\n return { ok: false, error: { tag: \"UpdateCheckCancelled\", message: \"Plugin update check cancelled\" } }\n }\n return {\n ok: false,\n error: { tag: \"UpdateCheckUnavailable\", message: \"Unable to check for plugin updates\", cause },\n }\n }\n\n if (!response.ok) {\n return {\n ok: false,\n error: {\n tag: \"UpdateCheckUnavailable\",\n message: \"Unable to check for plugin updates\",\n cause: new Error(`npm registry returned HTTP ${response.status}`),\n },\n }\n }\n\n let decoded: unknown\n try {\n decoded = await response.json()\n } catch {\n return {\n ok: false,\n error: {\n tag: \"InvalidUpdateResponse\",\n message: \"The npm registry returned invalid plugin release metadata\",\n },\n }\n }\n const releases = parseRegistryReleases(decoded)\n if (releases === undefined) {\n return {\n ok: false,\n error: {\n tag: \"InvalidUpdateResponse\",\n message: \"The npm registry returned invalid plugin release metadata\",\n },\n }\n }\n return { ok: true, value: newestCompatibleUpdate(releases, versions) }\n}\n\nexport function parseFreshUpdateCache(\n input: unknown,\n versions: UpdateVersions,\n now: number = Date.now(),\n): string | null | undefined {\n if (!isRecord(input)) return undefined\n if (\n typeof input.checkedAt !== \"number\" ||\n !Number.isFinite(input.checkedAt) ||\n input.checkedAt > now ||\n now - input.checkedAt >= updateCacheMilliseconds ||\n input.currentVersion !== versions.currentVersion ||\n input.opencodeVersion !== versions.opencodeVersion ||\n (input.availableVersion !== null &&\n (typeof input.availableVersion !== \"string\" ||\n !isNewerStableVersion(input.availableVersion, versions.currentVersion)))\n ) {\n return undefined\n }\n return input.availableVersion\n}\n\nfunction isMissingFile(cause: unknown): boolean {\n return cause instanceof Error && \"code\" in cause && cause.code === \"ENOENT\"\n}\n\nasync function readConfig(path: string): Promise<unknown> {\n try {\n return Bun.JSONC.parse(await readFile(path, \"utf8\"))\n } catch (cause) {\n if (isMissingFile(cause)) return undefined\n return undefined\n }\n}\n\nfunction configuredPluginSpecifier(input: unknown): string | undefined {\n if (typeof input === \"string\") return input\n if (Array.isArray(input) && input.length === 2 && typeof input[0] === \"string\" && isRecord(input[1])) {\n return input[0]\n }\n return undefined\n}\n\nfunction containsPlugin(input: unknown): boolean {\n if (!isRecord(input) || !Array.isArray(input.plugin)) return false\n return input.plugin.some((entry) => {\n const spec = configuredPluginSpecifier(entry)\n return (\n spec !== undefined &&\n (spec === packageName || spec.startsWith(`${packageName}/`) || spec.startsWith(`${packageName}@`))\n )\n })\n}\n\nasync function containsConfiguredPlugin(directory: string): Promise<boolean> {\n const configs = await Promise.all(\n [\"opencode.json\", \"opencode.jsonc\", \"tui.json\", \"tui.jsonc\"].map((name) => readConfig(join(directory, name))),\n )\n return configs.some(containsPlugin)\n}\n\nexport async function detectInstallationScopes(\n input: Readonly<{\n projectConfigDirectory: string\n globalConfigDirectory: string\n }>,\n): Promise<readonly InstallationScope[]> {\n const [project, global] = await Promise.all([\n containsConfiguredPlugin(input.projectConfigDirectory),\n containsConfiguredPlugin(input.globalConfigDirectory),\n ])\n return [...(project ? ([\"project\"] as const) : []), ...(global ? ([\"global\"] as const) : [])]\n}\n\nfunction updateCommand(version: string, scope: InstallationScope): string {\n const globalFlag = scope === \"global\" ? \" --global\" : \"\"\n return `opencode plugin ${packageName}@${version}${globalFlag} --force`\n}\n\nexport function formatUpdateInstructions(version: string, scopes: readonly InstallationScope[]): string {\n const commands = scopes.length === 0 ? ([\"project\", \"global\"] as const) : scopes\n const body =\n commands.length === 1\n ? updateCommand(version, commands[0]!)\n : commands\n .map(\n (scope) => `${scope === \"project\" ? \"Project\" : \"Global\"} installation:\\n${updateCommand(version, scope)}`,\n )\n .join(\"\\n\\n\")\n return `${body}\\n\\nRestart OpenCode after updating.`\n}\n",
|
|
26
|
-
"import { createTextNode as _$createTextNode } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { memo as _$memo } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\nimport { createComponent as _$createComponent } from \"@opentui/solid\";\n/** @jsxImportSource @opentui/solid */\nimport { TextAttributes } from \"@opentui/core\";\nimport { createSignal, onCleanup } from \"solid-js\";\nimport { attachPullRequest as attachValidatedPullRequest, resolvePullRequestInput } from \"./attach.js\";\nimport { openPullRequest } from \"./external-url.js\";\nimport { createGitHubClient, statusAppearance } from \"./github.js\";\nimport { updateStatusLabel } from \"./plugin-update-tui.js\";\nimport { startSessionPolling } from \"./polling.js\";\nimport { formatPullRequestRef, parsePullRequestUrl } from \"./url.js\";\nexport function attachPullRequest(store, sessionID, input, options = {}) {\n const pullRequest = parsePullRequestUrl(input);\n if (!pullRequest.ok) return Promise.resolve(pullRequest);\n return attachValidatedPullRequest({\n store,\n github: options.github ?? createGitHubClient()\n }, sessionID, pullRequest.value, options.signal ? {\n signal: options.signal\n } : {});\n}\nexport function createRefreshBus() {\n const listeners = new Map();\n return {\n emit(sessionID) {\n for (const listener of listeners.get(sessionID) ?? []) listener.refresh();\n },\n async forceRefresh(sessionID) {\n const sessionListeners = listeners.get(sessionID);\n if (sessionListeners === undefined || sessionListeners.size === 0) return undefined;\n const settled = await Promise.allSettled([...sessionListeners].map(listener => listener.forceRefresh()));\n const rejected = settled.find(result => result.status === \"rejected\");\n if (rejected !== undefined) throw rejected.reason;\n const results = settled.flatMap(result => result.status === \"fulfilled\" ? [result.value] : []);\n return results.find(result => !result.ok) ?? results.find(result => result.ok && result.value === \"refreshed\") ?? results[0];\n },\n subscribe(sessionID, listener) {\n const sessionListeners = listeners.get(sessionID) ?? new Set();\n sessionListeners.add(listener);\n listeners.set(sessionID, sessionListeners);\n return () => {\n sessionListeners.delete(listener);\n if (sessionListeners.size === 0) listeners.delete(sessionID);\n };\n }\n };\n}\nfunction currentSessionID(api) {\n const route = api.route.current;\n if (route.name !== \"session\" || !(\"params\" in route)) return undefined;\n return typeof route.params?.sessionID === \"string\" ? route.params.sessionID : undefined;\n}\nfunction promptForPullRequest(api, options) {\n return new Promise(resolve => {\n const controller = new AbortController();\n const signal = AbortSignal.any([options.signal, controller.signal]);\n let finished = false;\n const onAbort = () => finish(undefined);\n const finish = (value, clearDialog = true) => {\n if (finished) return;\n finished = true;\n options.signal.removeEventListener(\"abort\", onAbort);\n controller.abort();\n if (clearDialog) api.ui.dialog.clear();\n resolve(value);\n };\n if (options.signal.aborted) {\n finish(undefined, false);\n return;\n }\n options.signal.addEventListener(\"abort\", onAbort, {\n once: true\n });\n api.ui.dialog.setSize(\"medium\");\n api.ui.dialog.replace(() => {\n const [error, setError] = createSignal();\n const [busy, setBusy] = createSignal(false);\n const DialogPrompt = api.ui.DialogPrompt;\n return _$createComponent(DialogPrompt, {\n title: \"Attach pull request\",\n placeholder: \"https://github.com/owner/repository/pull/123, github.com/owner/repository/pull/123, or 123\",\n description: () => error() ? (() => {\n var _el$ = _$createElement(\"text\");\n _$insert(_el$, error);\n _$effect(_$p => _$setProp(_el$, \"fg\", api.theme.current.error, _$p));\n return _el$;\n })() : null,\n get busy() {\n return busy();\n },\n busyText: \"Resolving repository\",\n onConfirm: value => {\n if (finished || busy()) return;\n setBusy(true);\n void resolvePullRequestInput(value, {\n directory: options.directory,\n ...(options.runner ? {\n runner: options.runner\n } : {}),\n signal\n }).then(result => {\n if (finished) return;\n setBusy(false);\n if (result.ok) {\n finish(result.value);\n return;\n }\n if (result.error.tag === \"RepositoryResolutionCancelled\") {\n finish(undefined);\n return;\n }\n setError(result.error.message);\n });\n },\n onCancel: () => finish(undefined)\n });\n }, () => finish(undefined, false));\n });\n}\nfunction selectPullRequest(api, title, attachments, signal) {\n return new Promise(resolve => {\n let finished = false;\n const onAbort = () => finish(undefined);\n const finish = (value, clearDialog = true) => {\n if (finished) return;\n finished = true;\n signal.removeEventListener(\"abort\", onAbort);\n if (clearDialog) api.ui.dialog.clear();\n resolve(value);\n };\n if (signal.aborted) {\n finish(undefined, false);\n return;\n }\n signal.addEventListener(\"abort\", onAbort, {\n once: true\n });\n api.ui.dialog.setSize(\"medium\");\n api.ui.dialog.replace(() => {\n const DialogSelect = api.ui.DialogSelect;\n return _$createComponent(DialogSelect, {\n title: title,\n get options() {\n return attachments.map(attachment => ({\n title: formatPullRequestRef(attachment.pullRequest),\n value: attachment.pullRequest,\n description: attachment.pullRequest.url\n }));\n },\n onSelect: option => finish(option.value)\n });\n }, () => finish(undefined, false));\n });\n}\nfunction showStateFailure(api, failure) {\n api.ui.toast({\n variant: \"error\",\n title: \"Pull request tracker\",\n message: failure.message\n });\n}\nexport function createPullRequestCommands(api, dependencies, refreshBus) {\n return [{\n name: \"pr.attach\",\n title: \"Attach pull request\",\n category: \"Plugin\",\n namespace: \"palette\",\n slashName: \"pr-attach\",\n async run() {\n const sessionID = currentSessionID(api);\n if (sessionID === undefined) {\n api.ui.toast({\n variant: \"warning\",\n title: \"Pull request tracker\",\n message: \"Open a session first\"\n });\n return;\n }\n const pullRequest = await promptForPullRequest(api, {\n directory: api.state.path.directory,\n ...(dependencies.runner ? {\n runner: dependencies.runner\n } : {}),\n signal: api.lifecycle.signal\n });\n if (pullRequest === undefined) return;\n const result = await attachValidatedPullRequest(dependencies, sessionID, pullRequest, {\n signal: api.lifecycle.signal\n });\n if (!result.ok) {\n showStateFailure(api, result.error);\n return;\n }\n const message = result.value === \"added\" ? `Attached ${formatPullRequestRef(pullRequest)}` : `${formatPullRequestRef(pullRequest)} is already attached`;\n api.ui.toast({\n variant: \"success\",\n title: \"Pull request tracker\",\n message\n });\n refreshBus.emit(sessionID);\n }\n }, {\n name: \"pr.open\",\n title: \"Open pull request\",\n category: \"Plugin\",\n namespace: \"palette\",\n slashName: \"pr-open\",\n async run() {\n const sessionID = currentSessionID(api);\n if (sessionID === undefined) {\n api.ui.toast({\n variant: \"warning\",\n title: \"Pull request tracker\",\n message: \"Open a session first\"\n });\n return;\n }\n const attachments = await dependencies.store.list(sessionID);\n if (!attachments.ok) {\n showStateFailure(api, attachments.error);\n return;\n }\n if (attachments.value.length === 0) {\n api.ui.toast({\n variant: \"info\",\n title: \"Pull request tracker\",\n message: \"No pull requests are attached\"\n });\n return;\n }\n const pullRequest = await selectPullRequest(api, \"Open pull request\", attachments.value, api.lifecycle.signal);\n if (pullRequest === undefined) return;\n const result = await openPullRequest(pullRequest, {\n ...(dependencies.runner ? {\n runner: dependencies.runner\n } : {}),\n signal: api.lifecycle.signal\n });\n if (!result.ok) {\n api.ui.toast({\n variant: \"error\",\n title: \"Pull request tracker\",\n message: result.error.message\n });\n }\n }\n }, {\n name: \"pr.detach\",\n title: \"Detach pull request\",\n category: \"Plugin\",\n namespace: \"palette\",\n slashName: \"pr-detach\",\n async run() {\n const sessionID = currentSessionID(api);\n if (sessionID === undefined) {\n api.ui.toast({\n variant: \"warning\",\n title: \"Pull request tracker\",\n message: \"Open a session first\"\n });\n return;\n }\n const attachments = await dependencies.store.list(sessionID);\n if (!attachments.ok) {\n showStateFailure(api, attachments.error);\n return;\n }\n if (attachments.value.length === 0) {\n api.ui.toast({\n variant: \"info\",\n title: \"Pull request tracker\",\n message: \"No pull requests are attached\"\n });\n return;\n }\n const pullRequest = await selectPullRequest(api, \"Detach pull request\", attachments.value, api.lifecycle.signal);\n if (pullRequest === undefined) return;\n const result = await dependencies.store.detach(sessionID, pullRequest);\n if (!result.ok) {\n showStateFailure(api, result.error);\n return;\n }\n const message = result.value === \"removed\" ? `Detached ${formatPullRequestRef(pullRequest)}` : `${formatPullRequestRef(pullRequest)} was not attached`;\n api.ui.toast({\n variant: \"success\",\n title: \"Pull request tracker\",\n message\n });\n refreshBus.emit(sessionID);\n }\n }, {\n name: \"pr.sync\",\n title: \"Sync pull request status\",\n category: \"Plugin\",\n namespace: \"palette\",\n slashName: \"pr-sync\",\n async run() {\n const sessionID = currentSessionID(api);\n if (sessionID === undefined) {\n api.ui.toast({\n variant: \"warning\",\n title: \"Pull request tracker\",\n message: \"Open a session first\"\n });\n return;\n }\n try {\n const result = await refreshBus.forceRefresh(sessionID);\n if (result === undefined) {\n api.ui.toast({\n variant: \"warning\",\n title: \"Pull request tracker\",\n message: \"Pull request sidebar is not available\"\n });\n return;\n }\n if (!result.ok) {\n api.ui.toast({\n variant: \"error\",\n title: \"Pull request tracker\",\n message: result.error.message\n });\n return;\n }\n switch (result.value) {\n case \"refreshed\":\n api.ui.toast({\n variant: \"success\",\n title: \"Pull request tracker\",\n message: \"Pull request status synced\"\n });\n return;\n case \"no_attachments\":\n api.ui.toast({\n variant: \"info\",\n title: \"Pull request tracker\",\n message: \"No pull requests are attached\"\n });\n return;\n case \"stopped\":\n api.ui.toast({\n variant: \"error\",\n title: \"Pull request tracker\",\n message: \"Unable to refresh pull request status\"\n });\n return;\n }\n } catch {\n api.ui.toast({\n variant: \"error\",\n title: \"Pull request tracker\",\n message: \"Unable to refresh pull request status\"\n });\n }\n }\n }];\n}\nfunction toneColor(theme, tone) {\n const colors = {\n green: theme.success,\n yellow: theme.warning,\n red: theme.error,\n purple: theme.secondary,\n gray: theme.textMuted\n };\n return colors[tone];\n}\nexport function PullRequestSidebar(props) {\n const [items, setItems] = createSignal([]);\n const [failure, setFailure] = createSignal();\n const [update, setUpdate] = createSignal(props.updates.current());\n const [open, setOpen] = createSignal(true);\n const collapsible = () => items().length > 2;\n const polling = startSessionPolling({\n sessionID: props.sessionID,\n store: props.dependencies.store,\n github: props.dependencies.github,\n publish: value => {\n setFailure(undefined);\n setItems(value);\n },\n onStateFailure: error => setFailure(error.message),\n onError: () => setFailure(\"Unable to refresh pull request status\")\n });\n polling.start().catch(() => setFailure(\"Unable to refresh pull request status\"));\n const unsubscribe = props.refreshBus.subscribe(props.sessionID, {\n refresh() {\n polling.refresh().catch(() => setFailure(\"Unable to refresh pull request status\"));\n },\n async forceRefresh() {\n try {\n return await polling.forceRefresh();\n } catch (error) {\n setFailure(\"Unable to refresh pull request status\");\n throw error;\n }\n }\n });\n const unsubscribeUpdate = props.updates.subscribe(setUpdate);\n const onAbort = () => polling.stop();\n props.api.lifecycle.signal.addEventListener(\"abort\", onAbort, {\n once: true\n });\n onCleanup(() => {\n unsubscribe();\n unsubscribeUpdate();\n polling.stop();\n props.api.lifecycle.signal.removeEventListener(\"abort\", onAbort);\n });\n return (() => {\n var _el$2 = _$createElement(\"box\"),\n _el$3 = _$createElement(\"box\"),\n _el$4 = _$createElement(\"text\"),\n _el$5 = _$createElement(\"b\");\n _$insertNode(_el$2, _el$3);\n _$setProp(_el$2, \"flexDirection\", \"column\");\n _$setProp(_el$2, \"gap\", 1);\n _$insertNode(_el$3, _el$4);\n _$setProp(_el$3, \"flexDirection\", \"row\");\n _$setProp(_el$3, \"gap\", 1);\n _$setProp(_el$3, \"onMouseDown\", () => collapsible() && setOpen(value => !value));\n _$insert(_el$3, (() => {\n var _c$ = _$memo(() => !!collapsible());\n return () => _c$() ? (() => {\n var _el$7 = _$createElement(\"text\");\n _$insert(_el$7, () => open() ? \"▼\" : \"▶\");\n _$effect(_$p => _$setProp(_el$7, \"fg\", props.api.theme.current.text, _$p));\n return _el$7;\n })() : null;\n })(), _el$4);\n _$insertNode(_el$4, _el$5);\n _$insertNode(_el$5, _$createTextNode(`Pull requests`));\n _$insert(_el$2, (() => {\n var _c$2 = _$memo(() => !!(!collapsible() || open()));\n return () => _c$2() ? (() => {\n var _el$8 = _$createElement(\"box\");\n _$setProp(_el$8, \"flexDirection\", \"column\");\n _$setProp(_el$8, \"gap\", 1);\n _$insert(_el$8, (() => {\n var _c$3 = _$memo(() => !!update());\n return () => _c$3() ? (() => {\n var _el$9 = _$createElement(\"box\"),\n _el$0 = _$createElement(\"text\"),\n _el$10 = _$createElement(\"text\");\n _$insertNode(_el$9, _el$0);\n _$insertNode(_el$9, _el$10);\n _$setProp(_el$9, \"flexDirection\", \"row\");\n _$setProp(_el$9, \"onMouseUp\", () => props.api.keymap.dispatchCommand(\"pr.tracker.plugin.update\"));\n _$insertNode(_el$0, _$createTextNode(`• `));\n _$insert(_el$10, () => updateStatusLabel(update()));\n _$effect(_p$ => {\n var _v$ = props.api.theme.current.warning,\n _v$2 = props.api.theme.current.textMuted,\n _v$3 = TextAttributes.ITALIC;\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$0, \"fg\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$10, \"fg\", _v$2, _p$.t));\n _v$3 !== _p$.a && (_p$.a = _$setProp(_el$10, \"attributes\", _v$3, _p$.a));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined\n });\n return _el$9;\n })() : null;\n })(), null);\n _$insert(_el$8, (() => {\n var _c$4 = _$memo(() => !!failure());\n return () => _c$4() ? (() => {\n var _el$11 = _$createElement(\"text\");\n _$insert(_el$11, failure);\n _$effect(_$p => _$setProp(_el$11, \"fg\", props.api.theme.current.error, _$p));\n return _el$11;\n })() : null;\n })(), null);\n _$insert(_el$8, (() => {\n var _c$5 = _$memo(() => !!(!failure() && items().length === 0));\n return () => _c$5() ? (() => {\n var _el$12 = _$createElement(\"text\");\n _$insertNode(_el$12, _$createTextNode(`No pull requests attached`));\n _$effect(_$p => _$setProp(_el$12, \"fg\", props.api.theme.current.textMuted, _$p));\n return _el$12;\n })() : null;\n })(), null);\n _$insert(_el$8, () => items().map(item => {\n const appearance = statusAppearance(item.status);\n const attributes = appearance.strikethrough ? TextAttributes.STRIKETHROUGH : TextAttributes.NONE;\n const title = item.status.tag === \"Available\" ? item.status.title : \"Title unavailable\";\n return (() => {\n var _el$14 = _$createElement(\"box\"),\n _el$15 = _$createElement(\"text\"),\n _el$16 = _$createElement(\"b\"),\n _el$17 = _$createTextNode(` `),\n _el$18 = _$createElement(\"text\");\n _$insertNode(_el$14, _el$15);\n _$insertNode(_el$14, _el$18);\n _$setProp(_el$14, \"flexDirection\", \"column\");\n _$setProp(_el$14, \"onMouseUp\", () => {\n openPullRequest(item.attachment.pullRequest, {\n ...(props.dependencies.runner ? {\n runner: props.dependencies.runner\n } : {}),\n signal: props.api.lifecycle.signal\n }).then(result => {\n if (!result.ok) {\n props.api.ui.toast({\n variant: \"error\",\n title: \"Pull request tracker\",\n message: result.error.message\n });\n }\n }).catch(() => {\n props.api.ui.toast({\n variant: \"error\",\n title: \"Pull request tracker\",\n message: \"Unable to open the pull request\"\n });\n });\n });\n _$insertNode(_el$15, _el$16);\n _$insertNode(_el$15, _el$17);\n _$setProp(_el$15, \"attributes\", attributes);\n _$insert(_el$16, () => formatPullRequestRef(item.attachment.pullRequest));\n _$insert(_el$15, () => appearance.label, null);\n _$setProp(_el$18, \"attributes\", attributes);\n _$insert(_el$18, title);\n _$effect(_p$ => {\n var _v$4 = toneColor(props.api.theme.current, appearance.tone),\n _v$5 = props.api.theme.current.textMuted;\n _v$4 !== _p$.e && (_p$.e = _$setProp(_el$15, \"fg\", _v$4, _p$.e));\n _v$5 !== _p$.t && (_p$.t = _$setProp(_el$18, \"fg\", _v$5, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$14;\n })();\n }), null);\n return _el$8;\n })() : null;\n })(), null);\n _$effect(_$p => _$setProp(_el$4, \"fg\", props.api.theme.current.text, _$p));\n return _el$2;\n })();\n}",
|
|
27
|
-
"import { execFileRunner, type GitHubClient, type GitHubFailure, type ProcessRunner } from \"./github.js\"\nimport type { AttachFailure, StateStore } from \"./state.js\"\nimport { parsePullRequestUrl, type PullRequestUrl, type Result } from \"./url.js\"\n\nexport type AttachPullRequestFailure = GitHubFailure | AttachFailure\n\nexport async function attachPullRequest(\n dependencies: Readonly<{ store: StateStore; github: GitHubClient }>,\n sessionID: string,\n pullRequest: PullRequestUrl,\n options: Readonly<{ signal?: AbortSignal }> = {},\n): Promise<Result<\"added\" | \"already_attached\", AttachPullRequestFailure>> {\n return dependencies.store.attach(sessionID, pullRequest, {\n async validate() {\n const batch = await dependencies.github.get([pullRequest], options)\n if (!batch.ok) return batch\n const item = batch.value[0]\n if (item === undefined) throw new Error(\"GitHub client omitted the requested pull request\")\n if (!item.ok) return item\n return { ok: true, value: undefined }\n },\n })\n}\n\nexport type InvalidPullRequestInput = Readonly<{\n tag: \"InvalidPullRequestInput\"\n message: \"Expected https://github.com/<owner>/<repository>/pull/<positive-integer>, github.com/<owner>/<repository>/pull/<positive-integer>, or a positive pull request number\"\n}>\n\nexport type RepositoryResolutionFailed = Readonly<{\n tag: \"RepositoryResolutionFailed\"\n message: \"Unable to resolve the current GitHub repository with gh; attach with a full URL instead\"\n cause?: unknown\n}>\n\nexport type RepositoryResolutionCancelled = Readonly<{\n tag: \"RepositoryResolutionCancelled\"\n}>\n\nexport type PullRequestInputFailure =\n | InvalidPullRequestInput\n | RepositoryResolutionFailed\n | RepositoryResolutionCancelled\n\nconst invalidPullRequestInput: Result<never, InvalidPullRequestInput> = {\n ok: false,\n error: {\n tag: \"InvalidPullRequestInput\",\n message:\n \"Expected https://github.com/<owner>/<repository>/pull/<positive-integer>, github.com/<owner>/<repository>/pull/<positive-integer>, or a positive pull request number\",\n },\n}\n\nconst repositoryResolutionFailed: RepositoryResolutionFailed = {\n tag: \"RepositoryResolutionFailed\",\n message: \"Unable to resolve the current GitHub repository with gh; attach with a full URL instead\",\n}\n\nconst repositoryResolutionCancelled: Result<never, RepositoryResolutionCancelled> = {\n ok: false,\n error: { tag: \"RepositoryResolutionCancelled\" },\n}\n\nfunction isCancellation(cause: unknown, signal: AbortSignal | undefined): boolean {\n if (signal?.aborted) return true\n return cause instanceof Error && cause.name === \"AbortError\"\n}\n\nfunction parseRepositoryPullRequest(\n stdout: string,\n number: number,\n): Result<PullRequestUrl, RepositoryResolutionFailed> {\n let decoded: unknown\n try {\n decoded = JSON.parse(stdout)\n } catch {\n return { ok: false, error: repositoryResolutionFailed }\n }\n if (\n decoded === null ||\n typeof decoded !== \"object\" ||\n !(\"url\" in decoded) ||\n typeof decoded.url !== \"string\" ||\n decoded.url === \"\"\n ) {\n return { ok: false, error: repositoryResolutionFailed }\n }\n\n const repositoryUrl = decoded.url.endsWith(\"/\") ? decoded.url.slice(0, -1) : decoded.url\n const pullRequest = parsePullRequestUrl(`${repositoryUrl}/pull/${number}`)\n return pullRequest.ok ? pullRequest : { ok: false, error: repositoryResolutionFailed }\n}\n\nexport async function resolvePullRequestInput(\n input: string,\n options: Readonly<{\n directory: string\n runner?: ProcessRunner\n signal?: AbortSignal\n }>,\n): Promise<Result<PullRequestUrl, PullRequestInputFailure>> {\n const direct = parsePullRequestUrl(input)\n if (direct.ok) return direct\n if (input.trim() !== input || !/^\\d+$/.test(input)) return invalidPullRequestInput\n\n const number = Number(input)\n if (!Number.isSafeInteger(number) || number <= 0) return invalidPullRequestInput\n\n let stdout: string\n try {\n const result = await (options.runner ?? execFileRunner)(\"gh\", [\"repo\", \"view\", \"--json\", \"url\"], {\n cwd: options.directory,\n ...(options.signal ? { signal: options.signal } : {}),\n })\n stdout = result.stdout\n } catch (cause) {\n if (isCancellation(cause, options.signal)) return repositoryResolutionCancelled\n return { ok: false, error: { ...repositoryResolutionFailed, cause } }\n }\n\n return parseRepositoryPullRequest(stdout, number)\n}\n",
|
|
28
|
-
"import type { GitHubClient, GitHubFailure, PullRequestDiagnostic, PullRequestStatus } from \"./github.js\"\nimport type { PullRequestAttachment, StateFailure, StateStore } from \"./state.js\"\nimport type { CanonicalPullRequestUrl, Result } from \"./url.js\"\n\nexport type SidebarPullRequest = Readonly<{\n attachment: PullRequestAttachment\n status: PullRequestStatus\n}>\n\nexport type PollScheduler = Readonly<{\n setInterval(task: () => void, delay: number): unknown\n clearInterval(handle: unknown): void\n}>\n\nexport type SessionPolling = Readonly<{\n start(): Promise<void>\n refresh(): Promise<void>\n forceRefresh(): Promise<SessionRefreshResult>\n stop(): void\n}>\n\nexport type SessionRefreshResult = Result<\"refreshed\" | \"no_attachments\" | \"stopped\", StateFailure | GitHubFailure>\n\nconst pollIntervalMilliseconds = 60_000\n\nconst defaultScheduler: PollScheduler = {\n setInterval: (task, delay) => globalThis.setInterval(task, delay),\n // SAFETY: this scheduler only receives handles returned by setInterval above.\n // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- PollScheduler erases the host-specific handle type\n clearInterval: (handle) => globalThis.clearInterval(handle as ReturnType<typeof setInterval>),\n}\n\nexport function startSessionPolling(\n input: Readonly<{\n sessionID: string\n store: StateStore\n github: GitHubClient\n scheduler?: PollScheduler\n publish(items: readonly SidebarPullRequest[]): void\n onStateFailure(failure: StateFailure): void\n onError(error: unknown): void\n }>,\n): SessionPolling {\n const scheduler = input.scheduler ?? defaultScheduler\n const statuses = new Map<CanonicalPullRequestUrl, PullRequestStatus>()\n const controller = new AbortController()\n let timer: unknown\n let timerRegistered = false\n let stopped = false\n let inFlight: Promise<SessionRefreshResult> | undefined\n let queued:\n | {\n promise: Promise<SessionRefreshResult>\n resolve(result: SessionRefreshResult): void\n reject(error: unknown): void\n }\n | undefined\n\n function project(attachments: readonly PullRequestAttachment[]): SidebarPullRequest[] {\n return attachments.map((attachment) => ({\n attachment,\n status: statuses.get(attachment.pullRequest.url) ?? { tag: \"Unavailable\" },\n }))\n }\n\n async function poll(): Promise<SessionRefreshResult> {\n const attachments = await input.store.list(input.sessionID)\n if (stopped) return { ok: true, value: \"stopped\" }\n if (!attachments.ok) {\n input.publish([])\n input.onStateFailure(attachments.error)\n return attachments\n }\n\n const attachedUrls = new Set<CanonicalPullRequestUrl>(\n attachments.value.map((attachment) => attachment.pullRequest.url),\n )\n for (const url of statuses.keys()) {\n if (!attachedUrls.has(url)) statuses.delete(url)\n }\n input.publish(project(attachments.value))\n if (attachments.value.length === 0) return { ok: true, value: \"no_attachments\" }\n\n const refreshable = attachments.value.filter((attachment) => {\n const previous = statuses.get(attachment.pullRequest.url)\n return previous?.tag !== \"Available\" || previous.state.tag !== \"Merged\"\n })\n const batch = await input.github.get(\n refreshable.map((attachment) => attachment.pullRequest),\n { signal: controller.signal },\n )\n if (stopped) return { ok: true, value: \"stopped\" }\n let batchDiagnostic: PullRequestDiagnostic | undefined\n let failure: GitHubFailure | undefined\n if (!batch.ok) {\n if (batch.error.tag === \"GitHubCancelled\") return batch\n batchDiagnostic = batch.error.tag === \"GitHubBatchLimitExceeded\" ? \"GitHubUnavailable\" : batch.error.tag\n failure = batch.error\n }\n\n for (const [index, attachment] of refreshable.entries()) {\n const previous = statuses.get(attachment.pullRequest.url)\n const result = batch.ok ? batch.value[index] : undefined\n if (result?.ok) {\n statuses.set(attachment.pullRequest.url, result.value)\n continue\n }\n const diagnostic = result === undefined ? (batchDiagnostic ?? \"GitHubUnavailable\") : result.error.tag\n if (result !== undefined && !result.ok) failure ??= result.error\n statuses.set(\n attachment.pullRequest.url,\n previous?.tag === \"Available\" ? { ...previous, stale: true, diagnostic } : { tag: \"Unavailable\", diagnostic },\n )\n }\n\n if (!stopped) input.publish(project(attachments.value))\n return failure === undefined ? { ok: true, value: \"refreshed\" } : { ok: false, error: failure }\n }\n\n function startQueuedRefresh(): void {\n inFlight = undefined\n const next = queued\n queued = undefined\n if (next === undefined) return\n if (stopped) {\n next.resolve({ ok: true, value: \"stopped\" })\n return\n }\n void requestRefresh().then(\n (result) => next.resolve(result),\n (error: unknown) => next.reject(error),\n )\n }\n\n function requestRefresh(): Promise<SessionRefreshResult> {\n if (stopped) return Promise.resolve({ ok: true, value: \"stopped\" })\n if (inFlight) {\n if (queued !== undefined) return queued.promise\n let resolve!: (result: SessionRefreshResult) => void\n let reject!: (error: unknown) => void\n const promise = new Promise<SessionRefreshResult>((resolvePromise, rejectPromise) => {\n resolve = resolvePromise\n reject = rejectPromise\n })\n queued = { promise, resolve, reject }\n return promise\n }\n const current = poll()\n inFlight = current\n void current.then(startQueuedRefresh, startQueuedRefresh)\n return current\n }\n\n function scheduledRefresh(): Promise<void> {\n return requestRefresh().then(() => undefined)\n }\n\n return {\n start() {\n if (stopped) return Promise.resolve()\n if (!timerRegistered) {\n timer = scheduler.setInterval(() => {\n scheduledRefresh().catch(input.onError)\n }, pollIntervalMilliseconds)\n timerRegistered = true\n }\n return scheduledRefresh()\n },\n refresh: scheduledRefresh,\n forceRefresh: requestRefresh,\n stop() {\n if (stopped) return\n stopped = true\n controller.abort()\n if (timerRegistered) scheduler.clearInterval(timer)\n },\n }\n}\n",
|
|
29
|
-
"import { createHash, randomUUID } from \"node:crypto\"\nimport { mkdir, readFile, rename, rm, writeFile } from \"node:fs/promises\"\nimport { homedir } from \"node:os\"\nimport { join } from \"node:path\"\nimport { lock as lockFile } from \"proper-lockfile\"\n\nimport { parsePullRequestUrl, type PullRequestUrl, type Result } from \"./url.js\"\n\nexport const maximumPullRequestsPerSession = 20\n\nexport type PullRequestAttachment = Readonly<{\n pullRequest: PullRequestUrl\n attachedAt: string\n}>\n\nexport type InvalidStateFile = Readonly<{\n tag: \"InvalidStateFile\"\n message: \"The session pull request state file is invalid\"\n}>\n\nexport type StateUnavailable = Readonly<{\n tag: \"StateUnavailable\"\n operation: \"read\" | \"write\"\n message: string\n cause: unknown\n}>\n\nexport type AttachmentLimitReached = Readonly<{\n tag: \"AttachmentLimitReached\"\n limit: 20\n message: \"A session can track at most 20 pull requests\"\n}>\n\nexport type StateFailure = InvalidStateFile | StateUnavailable\nexport type AttachFailure = StateFailure | AttachmentLimitReached\nexport type AttachOptions<ValidationFailure> = Readonly<{\n validate?: () => Promise<Result<void, ValidationFailure>>\n}>\nexport type DetachByNumberOutcome =\n | Readonly<{ tag: \"removed\"; pullRequest: PullRequestUrl }>\n | Readonly<{ tag: \"absent\" }>\n | Readonly<{ tag: \"ambiguous\"; pullRequests: readonly PullRequestUrl[] }>\n\nexport type StateStore = Readonly<{\n list(sessionID: string): Promise<Result<readonly PullRequestAttachment[], StateFailure>>\n attach<ValidationFailure = never>(\n sessionID: string,\n pullRequest: PullRequestUrl,\n options?: AttachOptions<ValidationFailure>,\n ): Promise<Result<\"added\" | \"already_attached\", AttachFailure | ValidationFailure>>\n detach(sessionID: string, pullRequest: PullRequestUrl): Promise<Result<\"removed\" | \"absent\", StateFailure>>\n detachByNumber(sessionID: string, number: number): Promise<Result<DetachByNumberOutcome, StateFailure>>\n removeSession(sessionID: string): Promise<Result<\"removed\" | \"absent\", StateFailure>>\n}>\n\ntype PersistedState = Readonly<{\n version: 1\n pullRequests: readonly Readonly<{ url: string; attachedAt: string }>[]\n}>\n\nconst invalidStateFile: Result<never, InvalidStateFile> = {\n ok: false,\n error: {\n tag: \"InvalidStateFile\",\n message: \"The session pull request state file is invalid\",\n },\n}\n\nconst lockStaleMilliseconds = 10_000\nconst lockUpdateMilliseconds = 2_000\n\nfunction stateUnavailable(operation: \"read\" | \"write\", message: string, cause: unknown): StateUnavailable {\n return { tag: \"StateUnavailable\", operation, message, cause }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n}\n\nfunction hasExactKeys(value: Record<string, unknown>, keys: readonly string[]): boolean {\n const actual = Object.keys(value)\n return actual.length === keys.length && keys.every((key) => Object.hasOwn(value, key))\n}\n\nfunction parseState(input: unknown): Result<readonly PullRequestAttachment[], InvalidStateFile> {\n if (!isRecord(input) || !hasExactKeys(input, [\"version\", \"pullRequests\"])) return invalidStateFile\n if (input.version !== 1 || !Array.isArray(input.pullRequests)) return invalidStateFile\n if (input.pullRequests.length > maximumPullRequestsPerSession) return invalidStateFile\n\n const attachments: PullRequestAttachment[] = []\n const seen = new Set<string>()\n for (const item of input.pullRequests) {\n if (!isRecord(item) || !hasExactKeys(item, [\"url\", \"attachedAt\"])) return invalidStateFile\n if (typeof item.url !== \"string\" || typeof item.attachedAt !== \"string\") return invalidStateFile\n\n const parsed = parsePullRequestUrl(item.url)\n if (!parsed.ok || parsed.value.url !== item.url || seen.has(item.url)) return invalidStateFile\n\n const attachedAt = new Date(item.attachedAt)\n if (Number.isNaN(attachedAt.valueOf()) || attachedAt.toISOString() !== item.attachedAt) return invalidStateFile\n\n seen.add(item.url)\n attachments.push({ pullRequest: parsed.value, attachedAt: item.attachedAt })\n }\n\n return { ok: true, value: attachments }\n}\n\nfunction isMissingFile(cause: unknown): boolean {\n return cause instanceof Error && \"code\" in cause && cause.code === \"ENOENT\"\n}\n\nfunction fileName(sessionID: string): string {\n return `${createHash(\"sha256\").update(sessionID).digest(\"hex\")}.json`\n}\n\nexport function defaultStateDirectory(\n environment: Readonly<Record<string, string | undefined>> = process.env,\n home: string = homedir(),\n): string {\n const dataHome = environment.XDG_DATA_HOME || join(home, \".local\", \"share\")\n return join(dataHome, \"opencode\", \"opencode-pr-tracker\")\n}\n\nexport function createStateStore(\n options: Readonly<{ directory?: string; now?: () => Date; lock?: typeof lockFile }> = {},\n): StateStore {\n const directory = options.directory ?? defaultStateDirectory()\n const now = options.now ?? (() => new Date())\n const lockStateFile = options.lock ?? lockFile\n const attachTails = new Map<string, Promise<void>>()\n\n async function enqueueAttach<Value>(sessionID: string, operation: () => Promise<Value>): Promise<Value> {\n const previous = attachTails.get(sessionID) ?? Promise.resolve()\n let release!: () => void\n const current = new Promise<void>((resolve) => {\n release = resolve\n })\n attachTails.set(sessionID, current)\n\n await previous\n try {\n return await operation()\n } finally {\n release()\n if (attachTails.get(sessionID) === current) attachTails.delete(sessionID)\n }\n }\n\n async function acquireLock(sessionID: string): Promise<\n Result<\n Readonly<{\n release(): Promise<void>\n compromised(): Error | undefined\n }>,\n StateUnavailable\n >\n > {\n const stateFile = join(directory, fileName(sessionID))\n let compromised: Error | undefined\n try {\n await mkdir(directory, { recursive: true })\n const release = await lockStateFile(stateFile, {\n realpath: false,\n stale: lockStaleMilliseconds,\n update: lockUpdateMilliseconds,\n retries: { retries: 50, factor: 1, minTimeout: 10, maxTimeout: 100 },\n onCompromised: (error) => {\n compromised = error\n },\n })\n return { ok: true, value: { release, compromised: () => compromised } }\n } catch (cause) {\n return {\n ok: false,\n error: stateUnavailable(\"write\", \"Unable to lock the session pull request state\", cause),\n }\n }\n }\n\n async function withLock<Value, Failure>(\n sessionID: string,\n operation: () => Promise<Result<Value, Failure>>,\n ): Promise<Result<Value, Failure | StateUnavailable>> {\n const lock = await acquireLock(sessionID)\n if (!lock.ok) return lock\n let result: Result<Value, Failure>\n try {\n result = await operation()\n } catch (cause) {\n await lock.value.release().catch(() => undefined)\n throw cause\n }\n\n try {\n await lock.value.release()\n } catch (cause) {\n return {\n ok: false,\n error: stateUnavailable(\"write\", \"Unable to unlock the session pull request state\", cause),\n }\n }\n\n const compromise = lock.value.compromised()\n if (compromise !== undefined) {\n return {\n ok: false,\n error: stateUnavailable(\"write\", \"The session pull request state lock was compromised\", compromise),\n }\n }\n return result\n }\n\n async function readExisting(\n sessionID: string,\n ): Promise<Result<readonly PullRequestAttachment[] | undefined, StateFailure>> {\n const path = join(directory, fileName(sessionID))\n let content: string\n try {\n content = await readFile(path, \"utf8\")\n } catch (cause) {\n if (isMissingFile(cause)) return { ok: true, value: undefined }\n return {\n ok: false,\n error: stateUnavailable(\"read\", \"Unable to read the session pull request state\", cause),\n }\n }\n\n let decoded: unknown\n try {\n decoded = JSON.parse(content)\n } catch {\n return invalidStateFile\n }\n return parseState(decoded)\n }\n\n async function read(sessionID: string): Promise<Result<readonly PullRequestAttachment[], StateFailure>> {\n const result = await readExisting(sessionID)\n if (!result.ok) return result\n return { ok: true, value: result.value ?? [] }\n }\n\n async function write(\n sessionID: string,\n attachments: readonly PullRequestAttachment[],\n ): Promise<Result<void, StateUnavailable>> {\n const destination = join(directory, fileName(sessionID))\n const temporary = `${destination}.${process.pid}.${randomUUID()}.tmp`\n const state: PersistedState = {\n version: 1,\n pullRequests: attachments.map((attachment) => ({\n url: attachment.pullRequest.url,\n attachedAt: attachment.attachedAt,\n })),\n }\n\n try {\n await mkdir(directory, { recursive: true })\n await writeFile(temporary, `${JSON.stringify(state, null, 2)}\\n`, { mode: 0o600 })\n await rename(temporary, destination)\n return { ok: true, value: undefined }\n } catch (cause) {\n await rm(temporary, { force: true }).catch(() => undefined)\n return {\n ok: false,\n error: stateUnavailable(\"write\", \"Unable to write the session pull request state\", cause),\n }\n }\n }\n\n async function attach<ValidationFailure = never>(\n sessionID: string,\n pullRequest: PullRequestUrl,\n attachOptions: AttachOptions<ValidationFailure> = {},\n ): Promise<Result<\"added\" | \"already_attached\", AttachFailure | ValidationFailure>> {\n return enqueueAttach(sessionID, async () => {\n if (attachOptions.validate !== undefined) {\n const current = await read(sessionID)\n if (!current.ok) return current\n if (current.value.some((attachment) => attachment.pullRequest.url === pullRequest.url)) {\n return { ok: true, value: \"already_attached\" }\n }\n if (current.value.length >= maximumPullRequestsPerSession) {\n return {\n ok: false,\n error: {\n tag: \"AttachmentLimitReached\",\n limit: maximumPullRequestsPerSession,\n message: \"A session can track at most 20 pull requests\",\n },\n }\n }\n\n const validation = await attachOptions.validate()\n if (!validation.ok) return validation\n }\n\n return withLock<\"added\" | \"already_attached\", AttachFailure>(sessionID, async () => {\n const current = await read(sessionID)\n if (!current.ok) return current\n if (current.value.some((attachment) => attachment.pullRequest.url === pullRequest.url)) {\n return { ok: true, value: \"already_attached\" } as const\n }\n if (current.value.length >= maximumPullRequestsPerSession) {\n return {\n ok: false,\n error: {\n tag: \"AttachmentLimitReached\",\n limit: maximumPullRequestsPerSession,\n message: \"A session can track at most 20 pull requests\",\n },\n } as const\n }\n\n const written = await write(sessionID, [...current.value, { pullRequest, attachedAt: now().toISOString() }])\n if (!written.ok) return written\n return { ok: true, value: \"added\" } as const\n })\n })\n }\n\n return {\n list: read,\n attach,\n async detach(sessionID, pullRequest) {\n return withLock<\"removed\" | \"absent\", StateFailure>(sessionID, async () => {\n const current = await read(sessionID)\n if (!current.ok) return current\n const next = current.value.filter((attachment) => attachment.pullRequest.url !== pullRequest.url)\n if (next.length === current.value.length) return { ok: true, value: \"absent\" } as const\n\n const written = await write(sessionID, next)\n if (!written.ok) return written\n return { ok: true, value: \"removed\" } as const\n })\n },\n async detachByNumber(sessionID, number) {\n return withLock<DetachByNumberOutcome, StateFailure>(sessionID, async () => {\n const current = await read(sessionID)\n if (!current.ok) return current\n const matches = current.value.filter((attachment) => attachment.pullRequest.number === number)\n if (matches.length === 0) return { ok: true, value: { tag: \"absent\" } } as const\n if (matches.length > 1) {\n return {\n ok: true,\n value: { tag: \"ambiguous\", pullRequests: matches.map((attachment) => attachment.pullRequest) },\n } as const\n }\n\n const match = matches[0]\n if (match === undefined) return { ok: true, value: { tag: \"absent\" } } as const\n const next = current.value.filter((attachment) => attachment.pullRequest.url !== match.pullRequest.url)\n const written = await write(sessionID, next)\n if (!written.ok) return written\n return { ok: true, value: { tag: \"removed\", pullRequest: match.pullRequest } } as const\n })\n },\n async removeSession(sessionID) {\n return withLock<\"removed\" | \"absent\", StateFailure>(sessionID, async () => {\n const current = await readExisting(sessionID)\n if (!current.ok) return current\n if (current.value === undefined) return { ok: true, value: \"absent\" } as const\n try {\n await rm(join(directory, fileName(sessionID)), { force: true })\n return { ok: true, value: \"removed\" } as const\n } catch (cause) {\n return {\n ok: false,\n error: stateUnavailable(\"write\", \"Unable to remove the session pull request state\", cause),\n } as const\n }\n })\n },\n }\n}\n"
|
|
5
|
+
"import { createComponent as _$createComponent } from \"@opentui/solid\";\n/** @jsxImportSource @opentui/solid */\nimport { Plugin } from \"@opencode/plugin/tui\";\nimport { Effect, Option } from \"effect\";\nimport { createSignal } from \"solid-js\";\nimport { layer as commandLayer } from \"./adapters/Command.ts\";\nimport { PullRequestTracker } from \"./rpc.ts\";\nimport { actions } from \"./tui/Actions.ts\";\nimport { background } from \"./tui/Background.ts\";\nimport { openUrl } from \"./tui/Browser.ts\";\nimport { makeClient } from \"./tui/Client.ts\";\nimport { Commands } from \"./tui/Commands.tsx\";\nimport { SessionSidebar } from \"./tui/SessionSidebar.tsx\";\nimport { hostTerminal } from \"./tui/Terminal.ts\";\nconst open = url => openUrl(url, process.platform).pipe(Effect.provide(commandLayer));\nconst locationOfSession = session => Option.fromNullishOr(session.location);\nfunction collapsedSessions() {\n const [collapsed, setCollapsed] = createSignal(new Set());\n return {\n has: sessionID => collapsed().has(sessionID),\n toggle: sessionID => {\n const next = new Set(collapsed());\n if (!next.delete(sessionID)) next.add(sessionID);\n setCollapsed(next);\n }\n };\n}\n\n/** The tracker client, routing each session's calls to the location it runs in. */\nfunction trackerFor(context) {\n return makeClient({\n locationOf: sessionID => Option.fromNullishOr(context.data.session.get(sessionID)).pipe(Option.flatMap(locationOfSession), Option.orElse(() => Option.fromNullishOr(context.location))),\n rpc: context.client.rpc(PullRequestTracker)\n });\n}\nexport default Plugin.define({\n id: \"opencode-pr-tracker\",\n setup(context) {\n const tracker = trackerFor(context);\n const {\n dismiss,\n terminal\n } = hostTerminal(context.ui);\n const commands = actions({\n open,\n terminal,\n tracker\n });\n const collapsed = collapsedSessions();\n const tasks = background();\n const disposers = [context.ui.slot({\n append: \"app\",\n render: () => _$createComponent(Commands, {\n actions: commands,\n get run() {\n return tasks.run;\n }\n })\n }), context.ui.slot({\n append: \"sidebar.content\",\n render: ({\n sessionID\n }) => _$createComponent(SessionSidebar, {\n collapsed: collapsed,\n onOpen: ref => {\n tasks.run(commands.openPullRequest(ref));\n },\n get run() {\n return tasks.run;\n },\n sessionID: sessionID,\n tracker: tracker\n })\n })];\n return async () => {\n for (const dispose of disposers) dispose();\n dismiss();\n await tasks.stop();\n };\n }\n});",
|
|
6
|
+
"import { Context, Effect, Layer, Schema, type Scope } from \"effect\"\n\nexport class CommandMissing extends Schema.TaggedError<CommandMissing>()(\"CommandMissing\", {\n command: Schema.String,\n}) {}\n\nexport class CommandFailed extends Schema.TaggedError<CommandFailed>()(\"CommandFailed\", {\n command: Schema.String,\n exitCode: Schema.Int,\n stderr: Schema.String,\n}) {}\n\nexport interface CommandRunnerApi {\n /** Runs `command` to completion and returns its standard output. Interruption kills it. */\n readonly run: (\n command: string,\n args: readonly string[],\n cwd: string,\n ) => Effect.Effect<string, CommandMissing | CommandFailed>\n}\n\nexport class CommandRunner extends Context.Service<CommandRunner, CommandRunnerApi>()(\n \"opencode-pr-tracker/CommandRunner\",\n) {}\n\n/** The parts of a running process this adapter uses. */\ninterface Child {\n readonly running: () => boolean\n readonly kill: () => void\n readonly completed: () => Promise<readonly [stdout: string, stderr: string, exitCode: number]>\n}\n\nconst isMissingExecutable = Schema.is(Schema.Struct({ code: Schema.Literal(\"ENOENT\") }))\n\nfunction spawn(command: string, args: readonly string[], cwd: string): Child {\n const process = Bun.spawn([command, ...args], {\n cwd,\n stderr: \"pipe\",\n stdin: \"ignore\",\n stdout: \"pipe\",\n })\n\n return {\n completed: async () => {\n const result = await Promise.all([\n new Response(process.stdout).text(),\n new Response(process.stderr).text(),\n process.exited,\n ])\n\n return result\n },\n kill: () => {\n process.kill()\n },\n running: () => process.exitCode === null,\n }\n}\n\n/** Starts the process; closing the scope, including on interruption, kills it if still running. */\nfunction start(\n command: string,\n args: readonly string[],\n cwd: string,\n): Effect.Effect<Child, CommandMissing | CommandFailed, Scope.Scope> {\n const started = Effect.try({\n catch: (cause) =>\n isMissingExecutable(cause)\n ? new CommandMissing({ command })\n : new CommandFailed({ command, exitCode: -1, stderr: String(cause) }),\n try: () => spawn(command, args, cwd),\n })\n\n return Effect.acquireRelease(started, (child: Child) =>\n Effect.sync(() => {\n if (child.running()) child.kill()\n }),\n )\n}\n\nfunction output(command: string, child: Child): Effect.Effect<string, CommandFailed> {\n return Effect.gen(function* () {\n const [stdout, stderr, exitCode] = yield* Effect.promise(child.completed)\n\n if (exitCode === 0) return stdout\n\n return yield* new CommandFailed({ command, exitCode, stderr })\n })\n}\n\nexport const layer = Layer.succeed(\n CommandRunner,\n CommandRunner.of({\n run: (command, args, cwd) =>\n Effect.scoped(\n Effect.flatMap(start(command, args, cwd), (child: Child) => output(command, child)),\n ),\n }),\n)\n",
|
|
7
|
+
"/**\n * The RPC contract between the server plugin and its clients, including the terminal plugin.\n * Schemas are Standard Schema so both Effect and Promise clients can use them.\n */\nimport { Rpc } from \"@opencode/plugin/rpc\"\nimport { Schema, type StandardSchema } from \"effect\"\n\nimport { PullRequestRef } from \"./domain/PullRequest.ts\"\nimport { Status } from \"./domain/Snapshot.ts\"\nimport { Membership } from \"./domain/StackLayout.ts\"\n\nexport const Layout = Schema.Literals([\"default\", \"compact\"])\n\nexport type Layout = typeof Layout.Type\n\nexport const EntryView = Schema.Struct({\n attachedAt: Schema.Int,\n membership: Schema.NullOr(Membership),\n ref: PullRequestRef,\n status: Status,\n})\n\nexport type EntryView = typeof EntryView.Type\n\n/** A session's attached pull requests, in display order, with the configured sidebar layout. */\nexport const View = Schema.Struct({\n entries: Schema.Array(EntryView),\n layout: Layout,\n sessionID: Schema.String,\n})\n\nexport type View = typeof View.Type\n\n/** A view as clients receive it: plain JSON data. */\nexport type ViewData = typeof View.Encoded\n\nconst Session = Schema.Struct({ sessionID: Schema.String })\n\n/** A pull request URL, with or without `https://`, or a number in the session's repository. */\nconst Target = Schema.Struct({ sessionID: Schema.String, target: Schema.String })\n\n/** The outcome of a change, with a message for the person who asked, and the session's new view. */\nexport const Changed = Schema.Struct({ message: Schema.String, view: View })\n\nexport type Changed = typeof Changed.Type\n\n/** A request that could not be carried out, with a message for the person who made it. */\nconst Rejected = Schema.Struct({ message: Schema.String })\n\n/**\n * The wire form of `schema`: plain JSON data, validated by the plugin's own copy of Effect.\n * OpenCode would handle an Effect schema with its own copy, which can reject values this one\n * accepts, and it sends only JSON, so decoded values such as class instances cannot cross.\n */\nfunction portable<S extends Schema.Top>(\n schema: S,\n): StandardSchema.StandardSchemaV1<S[\"Encoded\"], S[\"Encoded\"]> {\n return { \"~standard\": Schema.toStandardSchemaV1(Schema.toEncoded(schema))[\"~standard\"] }\n}\n\nexport const PullRequestTracker = Rpc.define({\n events: {\n updated: { schema: portable(View) },\n },\n id: \"opencode-pr-tracker\",\n methods: {\n attach: {\n errors: { rejected: portable(Rejected) },\n input: portable(Target),\n output: portable(Changed),\n },\n detach: {\n errors: { rejected: portable(Rejected) },\n input: portable(Target),\n output: portable(Changed),\n },\n list: {\n errors: { rejected: portable(Rejected) },\n input: portable(Session),\n output: portable(View),\n },\n refresh: {\n errors: { rejected: portable(Rejected) },\n input: portable(Session),\n output: portable(View),\n },\n },\n})\n\nexport type PullRequestTracker = typeof PullRequestTracker\n",
|
|
8
|
+
"import { Option, Result, Schema } from \"effect\"\n\nconst canonicalSegment = /^(?!\\.{1,2}$)[a-z0-9._-]+$/u\n\nconst pullRequestUrl =\n /^(?:https:\\/\\/)?github\\.com\\/(?<owner>[\\w.-]+)\\/(?<repository>[\\w.-]+)\\/pull\\/(?<number>\\d+)$/iu\n\nconst decimal = /^\\d+$/u\n\n/** Printable ASCII only. With the `u` and `i` flags, `\\w` also matches letters that fold to ASCII. */\nconst printableAscii = /^[\\u0021-\\u007E]*$/u\n\nconst Segment = Schema.String.check(Schema.isPattern(canonicalSegment))\n\nconst PullRequestNumber = Schema.Int.check(\n Schema.isBetween({ maximum: Number.MAX_SAFE_INTEGER, minimum: 1 }),\n)\n\n/** A canonical github.com pull request. Owner and repository are lowercase. */\nexport class PullRequestRef extends Schema.Class<PullRequestRef>(\"PullRequestRef\")({\n number: PullRequestNumber,\n owner: Segment,\n repository: Segment,\n}) {\n public get url(): string {\n return `https://github.com/${this.owner}/${this.repository}/pull/${String(this.number)}`\n }\n\n public get label(): string {\n return `${this.owner}/${this.repository}#${String(this.number)}`\n }\n}\n\nexport class InvalidPullRequestUrl extends Schema.TaggedError<InvalidPullRequestUrl>()(\n \"InvalidPullRequestUrl\",\n { input: Schema.String },\n) {}\n\nexport class InvalidPullRequestInput extends Schema.TaggedError<InvalidPullRequestInput>()(\n \"InvalidPullRequestInput\",\n { input: Schema.String },\n) {}\n\n/** A pull request named by URL, or by number within a repository resolved later. */\nexport type PullRequestInput =\n | { readonly _tag: \"Reference\"; readonly ref: PullRequestRef }\n | { readonly _tag: \"Number\"; readonly number: number }\n\nconst decodeRef = Schema.decodeUnknownOption(PullRequestRef)\n\nconst decodeNumber = Schema.decodeUnknownOption(PullRequestNumber)\n\nexport function samePullRequest(left: PullRequestRef, right: PullRequestRef): boolean {\n return left.url === right.url\n}\n\nexport function parsePullRequestUrl(\n input: string,\n): Result.Result<PullRequestRef, InvalidPullRequestUrl> {\n const match = printableAscii.test(input) ? pullRequestUrl.exec(input) : null\n const groups = match === null ? {} : (match.groups ?? {})\n\n const candidate = {\n number: Number(groups[\"number\"] ?? Number.NaN),\n owner: (groups[\"owner\"] ?? \"\").toLowerCase(),\n repository: (groups[\"repository\"] ?? \"\").toLowerCase(),\n }\n\n return Result.fromOption(decodeRef(candidate), () => new InvalidPullRequestUrl({ input }))\n}\n\nexport function parsePullRequestInput(\n input: string,\n): Result.Result<PullRequestInput, InvalidPullRequestInput> {\n const reference = parsePullRequestUrl(input)\n\n if (Result.isSuccess(reference))\n return Result.succeed({ _tag: \"Reference\", ref: reference.success })\n\n const number = decimal.test(input) ? decodeNumber(Number(input)) : Option.none()\n\n return Result.fromOption(number, () => new InvalidPullRequestInput({ input })).pipe(\n Result.map((value) => ({ _tag: \"Number\", number: value })),\n )\n}\n",
|
|
9
|
+
"import { Duration, Match, Schema } from \"effect\"\n\nimport { PullRequestRef } from \"./PullRequest.ts\"\n\nexport const Ci = Schema.Literals([\"passed\", \"pending\", \"failed\", \"none\"])\n\nexport type Ci = typeof Ci.Type\n\nexport const Mergeability = Schema.Literals([\"mergeable\", \"conflicting\", \"unknown\"])\n\nexport type Mergeability = typeof Mergeability.Type\n\nexport const PullRequestState = Schema.Union([\n Schema.TaggedStruct(\"Open\", {\n behind: Schema.Boolean,\n ci: Ci,\n draft: Schema.Boolean,\n mergeability: Mergeability,\n }),\n Schema.TaggedStruct(\"Merged\", {}),\n Schema.TaggedStruct(\"Closed\", {}),\n])\n\nexport type PullRequestState = typeof PullRequestState.Type\n\n/** What GitHub reported for one pull request at one refresh. */\nexport const Snapshot = Schema.Struct({\n ref: PullRequestRef,\n state: PullRequestState,\n title: Schema.String,\n})\n\nexport type Snapshot = typeof Snapshot.Type\n\n/** Why a refresh failed, as far as a user can act on it. */\nexport const Diagnostic = Schema.Literals([\n \"GitHubCliMissing\",\n \"AuthenticationRequired\",\n \"GitHubUnavailable\",\n \"NotFound\",\n \"InvalidResponse\",\n])\n\nexport type Diagnostic = typeof Diagnostic.Type\n\nexport const Status = Schema.Union([\n Schema.TaggedStruct(\"Pending\", {}),\n Schema.TaggedStruct(\"Fresh\", { snapshot: Snapshot }),\n Schema.TaggedStruct(\"Stale\", {\n diagnostic: Diagnostic,\n failingSince: Schema.Int,\n snapshot: Snapshot,\n }),\n Schema.TaggedStruct(\"Unavailable\", { diagnostic: Diagnostic }),\n])\n\nexport type Status = typeof Status.Type\n\n/** How long a pull request may keep failing before its last good snapshot is withdrawn. */\nexport const staleLimit = Duration.minutes(5)\n\nexport const pending: Status = { _tag: \"Pending\" }\n\nexport function succeeded(snapshot: Snapshot): Status {\n return { _tag: \"Fresh\", snapshot }\n}\n\n/** The status after a failed refresh at `now`, in epoch milliseconds. */\nexport function failed(status: Status, diagnostic: Diagnostic, now: number): Status {\n return Match.valueTags(status, {\n Fresh: ({ snapshot }): Status => ({ _tag: \"Stale\", diagnostic, failingSince: now, snapshot }),\n Pending: (): Status => ({ _tag: \"Unavailable\", diagnostic }),\n Stale: ({ failingSince, snapshot }): Status =>\n now - failingSince >= Duration.toMillis(staleLimit)\n ? { _tag: \"Unavailable\", diagnostic }\n : { _tag: \"Stale\", diagnostic, failingSince, snapshot },\n Unavailable: (): Status => ({ _tag: \"Unavailable\", diagnostic }),\n })\n}\n",
|
|
10
|
+
"import { Array as Arr, Option, Schema } from \"effect\"\n\nimport { PullRequestRef } from \"./PullRequest.ts\"\n\n/** GitHub Stack membership. Members are listed bottom to top. */\nexport const Membership = Schema.Union([\n Schema.TaggedStruct(\"Standalone\", {}),\n Schema.TaggedStruct(\"Stack\", {\n id: Schema.String,\n members: Schema.NonEmptyArray(PullRequestRef),\n }),\n])\n\nexport type Membership = typeof Membership.Type\n\ntype StackMembership = Extract<Membership, { readonly _tag: \"Stack\" }>\n\nexport interface Entry {\n readonly ref: PullRequestRef\n readonly membership: Option.Option<Membership>\n}\n\n/** `first`, `middle` and `last` draw a Stack's boundary; `bullet` is an ordinary pull request. */\nexport type Marker = \"bullet\" | \"first\" | \"middle\" | \"last\"\n\n/** How the line under a row continues: to the next attached member, to unattached members, or not. */\nexport type Connector = \"continues\" | \"open\" | \"none\"\n\nexport type Row<E extends Entry> =\n | {\n readonly _tag: \"PullRequest\"\n readonly entry: E\n readonly marker: Marker\n readonly connector: Connector\n }\n | { readonly _tag: \"Gap\"; readonly count: number }\n\ninterface Placed {\n readonly index: number\n readonly position: number\n readonly size: number\n}\n\n/** Where one entry sits within its Stack's attached members. */\ninterface Place {\n readonly current: Placed\n readonly previous: Option.Option<Placed>\n readonly first: boolean\n readonly last: boolean\n readonly attached: number\n}\n\ninterface Reported {\n readonly index: number\n readonly url: string\n readonly stack: StackMembership\n}\n\nconst stackOf = (entry: Entry): Option.Option<StackMembership> =>\n Option.filter(entry.membership, (membership) => membership._tag === \"Stack\")\n\nconst urlsOf = (stack: StackMembership): string[] => stack.members.map((member) => member.url)\n\nfunction reportsById(entries: readonly Entry[]): Map<string, Reported[]> {\n const byId = new Map<string, Reported[]>()\n\n for (const [index, entry] of entries.entries()) {\n for (const stack of Option.toArray(stackOf(entry))) {\n byId.set(stack.id, [...(byId.get(stack.id) ?? []), { index, stack, url: entry.ref.url }])\n }\n }\n\n return byId\n}\n\n/** Every Stack ID that lists each pull request, across all reported memberships. */\nfunction claims(byId: ReadonlyMap<string, readonly Reported[]>): Map<string, Set<string>> {\n const claimed = new Map<string, Set<string>>()\n\n for (const [id, reports] of byId) {\n for (const url of reports.flatMap((report) => urlsOf(report.stack))) {\n claimed.set(url, new Set([...(claimed.get(url) ?? []), id]))\n }\n }\n\n return claimed\n}\n\nfunction agrees(\n reports: readonly Reported[],\n entries: readonly Entry[],\n claimed: ReadonlyMap<string, ReadonlySet<string>>,\n): boolean {\n const members = Option.match(Arr.head(reports), {\n onNone: (): string[] => [],\n onSome: (report) => urlsOf(report.stack),\n })\n\n const listed = new Set(members)\n const attachedMembers = entries.filter((entry) => listed.has(entry.ref.url))\n\n return (\n listed.size === members.length &&\n reports.every((report) => urlsOf(report.stack).join(\"\\n\") === members.join(\"\\n\")) &&\n members.every((url) => (claimed.get(url) ?? new Set()).size === 1) &&\n attachedMembers.length === reports.length\n )\n}\n\nfunction placements(reports: readonly Reported[]): Option.Option<Placed[]> {\n const placed = reports.map((report) => ({\n index: report.index,\n position: urlsOf(report.stack).indexOf(report.url),\n size: report.stack.members.length,\n }))\n\n const adjacent = Arr.zipWith(\n placed,\n placed.slice(1),\n (before: Placed, after: Placed) =>\n after.index === before.index + 1 && after.position > before.position,\n )\n\n const ordered = placed.every((member: Placed) => member.position >= 0) && adjacent.every(Boolean)\n\n return ordered ? Option.some(placed) : Option.none()\n}\n\n/** Each entry that belongs to a consistent Stack, with its place among the attached members. */\nfunction consistentStacks(entries: readonly Entry[]): Map<number, Place> {\n const byId = reportsById(entries)\n const claimed = claims(byId)\n const places = new Map<number, Place>()\n\n for (const reports of byId.values()) {\n const placed = agrees(reports, entries, claimed) ? placements(reports) : Option.none()\n\n for (const group of Option.toArray(placed)) {\n for (const [step, current] of group.entries()) {\n places.set(current.index, {\n attached: group.length,\n current,\n first: step === 0,\n last: step === group.length - 1,\n previous: Arr.get(group, step - 1),\n })\n }\n }\n }\n\n return places\n}\n\nfunction marker(place: Place): Marker {\n const { current } = place\n\n if (place.attached === 1 && current.size > 1) return \"middle\"\n\n if (place.first && current.position === 0) return \"first\"\n\n if (place.last && current.position === current.size - 1) return \"last\"\n\n return \"middle\"\n}\n\nfunction connector(place: Place): Connector {\n if (!place.last) return \"continues\"\n\n return place.current.position < place.current.size - 1 ? \"open\" : \"none\"\n}\n\nfunction stackRows<E extends Entry>(entry: E, place: Place): Row<E>[] {\n const skipped = Option.match(place.previous, {\n onNone: () => 0,\n onSome: (before) => place.current.position - before.position - 1,\n })\n\n const row: Row<E> = {\n _tag: \"PullRequest\",\n connector: connector(place),\n entry,\n marker: marker(place),\n }\n\n return skipped > 0 ? [{ _tag: \"Gap\", count: skipped }, row] : [row]\n}\n\n/** Sidebar rows in attachment order, with Stack markers and gaps where membership is consistent. */\nexport function layout<E extends Entry>(entries: readonly E[]): Row<E>[] {\n const places = consistentStacks(entries)\n\n return entries.flatMap((entry, index) =>\n Option.match(Option.fromNullishOr(places.get(index)), {\n onNone: (): Row<E>[] => [{ _tag: \"PullRequest\", connector: \"none\", entry, marker: \"bullet\" }],\n onSome: (place) => stackRows(entry, place),\n }),\n )\n}\n",
|
|
11
|
+
"/** What the slash commands do, over a small port to the terminal and the tracker client. */\nimport { Effect, Option } from \"effect\"\n\nimport type { PullRequestRef } from \"../domain/PullRequest.ts\"\nimport type { View } from \"../rpc.ts\"\nimport type { OpenFailed } from \"./Browser.ts\"\nimport type { RequestFailed, TrackerClientApi } from \"./Client.ts\"\n\nexport type Variant = \"info\" | \"success\" | \"warning\" | \"error\"\n\nexport interface Choice<A> {\n readonly title: string\n readonly value: A\n}\n\n/** The terminal features the commands use. Dialogs succeed with `None` when dismissed. */\nexport interface Terminal {\n readonly session: () => Option.Option<string>\n readonly notify: (variant: Variant, message: string) => void\n readonly prompt: (title: string, placeholder: string) => Effect.Effect<Option.Option<string>>\n readonly choose: (\n title: string,\n choices: readonly Choice<PullRequestRef>[],\n ) => Effect.Effect<Option.Option<PullRequestRef>>\n}\n\nexport interface Services {\n readonly terminal: Terminal\n readonly tracker: TrackerClientApi\n readonly open: (url: string) => Effect.Effect<void, OpenFailed>\n}\n\nexport interface Actions {\n /** Attaches `input` when given, otherwise asks for a pull request. */\n readonly attach: (input: Option.Option<string>) => Effect.Effect<void>\n readonly open: Effect.Effect<void>\n readonly detach: Effect.Effect<void>\n readonly sync: Effect.Effect<void>\n /** Opens a pull request in the browser, reporting a failure. */\n readonly openPullRequest: (ref: PullRequestRef) => Effect.Effect<void>\n}\n\ntype Notice = readonly [Variant, string]\n\nconst placeholder = \"github.com/owner/repository/pull/123, or 123\"\n\n/** Runs `body` for the current session, or warns that there is none. */\nfunction inSession(\n terminal: Terminal,\n body: (sessionID: string) => Effect.Effect<void>,\n): Effect.Effect<void> {\n return Effect.suspend(() =>\n Option.match(terminal.session(), {\n onNone: () =>\n Effect.sync(() => {\n terminal.notify(\"warning\", \"Open a session first.\")\n }),\n onSome: body,\n }),\n )\n}\n\n/** Shows the outcome of `effect`: its failure's message as an error, or `notice` of its value. */\nfunction report<A>(\n terminal: Terminal,\n effect: Effect.Effect<A, RequestFailed | OpenFailed>,\n notice: (value: A) => Option.Option<Notice>,\n): Effect.Effect<void> {\n return Effect.map(Effect.result(effect), (result) => {\n if (result._tag === \"Failure\") {\n terminal.notify(\"error\", result.failure.message)\n\n return\n }\n\n for (const [variant, message] of Option.toArray(notice(result.success))) {\n terminal.notify(variant, message)\n }\n })\n}\n\n/** Asks which attached pull request to act on; `None` when none are attached or the dialog is dismissed. */\nfunction pick(\n { terminal, tracker }: Services,\n sessionID: string,\n title: string,\n): Effect.Effect<Option.Option<PullRequestRef>> {\n return Effect.result(tracker.list(sessionID)).pipe(\n Effect.flatMap((result) => {\n if (result._tag === \"Failure\") {\n terminal.notify(\"error\", result.failure.message)\n\n return Effect.succeedNone\n }\n\n const { entries } = result.success\n\n if (entries.length === 0) {\n terminal.notify(\"info\", \"No pull requests are attached.\")\n\n return Effect.succeedNone\n }\n\n return terminal.choose(\n title,\n entries.map((entry) => ({\n title: entry.ref.label,\n value: entry.ref,\n })),\n )\n }),\n )\n}\n\nconst changed = (outcome: { readonly message: string }): Option.Option<Notice> =>\n Option.some([\"success\", outcome.message])\n\nfunction syncedNotice(view: View): Option.Option<Notice> {\n const count = view.entries.length\n\n const failed = view.entries.filter(\n (entry) => entry.status._tag === \"Stale\" || entry.status._tag === \"Unavailable\",\n ).length\n\n if (count === 0) return Option.some([\"info\", \"No pull requests are attached.\"])\n\n const synced = `Synced ${String(count)} ${count === 1 ? \"pull request\" : \"pull requests\"}`\n\n return Option.some(\n failed === 0\n ? [\"success\", `${synced}.`]\n : [\"warning\", `${synced}; ${String(failed)} could not be refreshed.`],\n )\n}\n\n/** What was typed after the command or into the dialog, without surrounding whitespace. */\nconst typedTarget = (text: string): Option.Option<string> =>\n Option.filter(Option.some(text.trim()), (trimmed) => trimmed !== \"\")\n\nfunction attach(services: Services, input: Option.Option<string>): Effect.Effect<void> {\n const { terminal, tracker } = services\n\n return inSession(terminal, (sessionID) =>\n Option.match(Option.flatMap(input, typedTarget), {\n onNone: () =>\n Effect.map(\n terminal.prompt(\"Attach pull request\", placeholder),\n Option.flatMap(typedTarget),\n ),\n onSome: (text) => Effect.succeedSome(text),\n }).pipe(\n Effect.flatMap(\n Option.match({\n onNone: () => Effect.void,\n onSome: (target) => report(terminal, tracker.attach(sessionID, target), changed),\n }),\n ),\n ),\n )\n}\n\n/** A command that acts on one attached pull request, chosen in a dialog. */\ninterface PickedAction<A> {\n readonly title: string\n readonly act: (\n sessionID: string,\n ref: PullRequestRef,\n ) => Effect.Effect<A, RequestFailed | OpenFailed>\n readonly notice: (value: A) => Option.Option<Notice>\n}\n\nfunction withPicked<A>(services: Services, action: PickedAction<A>): Effect.Effect<void> {\n return inSession(services.terminal, (sessionID) =>\n pick(services, sessionID, action.title).pipe(\n Effect.flatMap(\n Option.match({\n onNone: () => Effect.void,\n onSome: (ref) => report(services.terminal, action.act(sessionID, ref), action.notice),\n }),\n ),\n ),\n )\n}\n\nexport function actions(services: Services): Actions {\n const { terminal, tracker } = services\n\n return {\n attach: (input) => attach(services, input),\n detach: withPicked(services, {\n act: (sessionID, ref) => tracker.detach(sessionID, ref.url),\n notice: changed,\n title: \"Detach pull request\",\n }),\n open: withPicked(services, {\n act: (_, ref) => services.open(ref.url),\n notice: Option.none,\n title: \"Open pull request\",\n }),\n openPullRequest: (ref) => report(terminal, services.open(ref.url), Option.none),\n sync: inSession(terminal, (sessionID) =>\n report(terminal, tracker.refresh(sessionID), syncedNotice),\n ),\n }\n}\n",
|
|
12
|
+
"import { Effect, Fiber } from \"effect\"\n\n/** Runs effects in the background, and stops those still running when the plugin unloads. */\nexport interface Background {\n readonly run: (effect: Effect.Effect<void>) => void\n /** Interrupts the running effects and resolves once they have stopped. */\n readonly stop: () => Promise<void>\n}\n\nexport function background(): Background {\n const running = new Set<Fiber.Fiber<void>>()\n\n return {\n run: (effect) => {\n const fiber = Effect.runFork(effect)\n\n running.add(fiber)\n fiber.addObserver(() => {\n running.delete(fiber)\n })\n },\n stop: async () => {\n await Effect.runPromise(Fiber.interruptAll(running))\n },\n }\n}\n",
|
|
13
|
+
"import { Effect, Option, Schema } from \"effect\"\n\nimport { CommandRunner } from \"../adapters/Command.ts\"\n\nexport class OpenFailed extends Schema.TaggedError<OpenFailed>()(\"OpenFailed\", {\n message: Schema.String,\n}) {}\n\nconst openers: Readonly<Partial<Record<NodeJS.Platform, string>>> = {\n darwin: \"open\",\n linux: \"xdg-open\",\n}\n\n/** Opens `url` in the default browser. */\nexport function openUrl(\n url: string,\n platform: NodeJS.Platform,\n): Effect.Effect<void, OpenFailed, CommandRunner> {\n return Option.match(Option.fromNullishOr(openers[platform]), {\n onNone: () =>\n Effect.fail(\n new OpenFailed({ message: `Opening pull requests is not supported on ${platform}.` }),\n ),\n onSome: (opener) =>\n CommandRunner.use((runner) => runner.run(opener, [url], \".\")).pipe(\n Effect.asVoid,\n Effect.mapError(\n () => new OpenFailed({ message: `Could not open ${url} with \\`${opener}\\`.` }),\n ),\n ),\n })\n}\n",
|
|
14
|
+
"/** The terminal's view of the tracker: RPC calls routed to each session's location, decoded on arrival. */\nimport { Effect, Option, Schema } from \"effect\"\n\nimport { Changed, View, type ViewData } from \"../rpc.ts\"\n\nexport class RequestFailed extends Schema.TaggedError<RequestFailed>()(\"RequestFailed\", {\n message: Schema.String,\n}) {}\n\nexport interface TrackerClientApi {\n readonly list: (sessionID: string) => Effect.Effect<View, RequestFailed>\n readonly refresh: (sessionID: string) => Effect.Effect<View, RequestFailed>\n readonly attach: (sessionID: string, target: string) => Effect.Effect<Changed, RequestFailed>\n readonly detach: (sessionID: string, target: string) => Effect.Effect<Changed, RequestFailed>\n /** Calls `handler` with each view the server publishes. Returns a function that stops the calls. */\n readonly onUpdate: (handler: (view: View) => void) => () => void\n}\n\n/** Where a session runs; RPC calls go to the plugin instance for that location. */\nexport interface Location {\n readonly directory: string\n readonly workspaceID?: string\n}\n\ninterface CallOptions {\n readonly location?: Location\n}\n\ninterface Session {\n readonly sessionID: string\n}\n\ninterface Target extends Session {\n readonly target: string\n}\n\ntype ChangedData = typeof Changed.Encoded\n\n/** The parts of the plugin's RPC client the terminal uses. */\nexport interface TrackerRpc {\n readonly list: (input: Session, options: CallOptions) => Promise<ViewData>\n readonly refresh: (input: Session, options: CallOptions) => Promise<ViewData>\n readonly attach: (input: Target, options: CallOptions) => Promise<ChangedData>\n readonly detach: (input: Target, options: CallOptions) => Promise<ChangedData>\n readonly events: {\n readonly on: (\n name: \"updated\",\n handler: (event: { readonly data: ViewData }) => void,\n ) => () => void\n }\n}\n\n/** What the client needs from the terminal: the RPC client and where each session runs. */\nexport interface Host {\n readonly rpc: TrackerRpc\n readonly locationOf: (sessionID: string) => Option.Option<Location>\n}\n\n/** What the RPC client throws: a failure the server declared, or one from OpenCode itself. */\nconst Thrown = Schema.Union([\n Schema.Struct({\n data: Schema.Struct({ message: Schema.String }),\n type: Schema.Literal(\"rejected\"),\n }),\n Schema.Struct({ message: Schema.String, type: Schema.String }),\n])\n\ntype Thrown = typeof Thrown.Type\n\nfunction failureOf(thrown: Option.Option<Thrown>): RequestFailed {\n const message = Option.match(thrown, {\n onNone: () => \"The pull request tracker failed.\",\n onSome: (failure) => {\n if (\"data\" in failure) return failure.data.message\n\n return failure.type === \"rpc.unavailable\"\n ? \"The pull request tracker is not running for this session's directory.\"\n : `The pull request tracker failed: ${failure.message}`\n },\n })\n\n return new RequestFailed({ message })\n}\n\nconst unreadable = new RequestFailed({\n message: \"The pull request tracker sent a response the terminal could not read.\",\n})\n\nfunction decoded<S extends Schema.Decoder<unknown>>(\n schema: S,\n call: () => Promise<S[\"Encoded\"]>,\n): Effect.Effect<S[\"Type\"], RequestFailed> {\n return Effect.tryPromise({\n catch: (error) => failureOf(Schema.decodeUnknownOption(Thrown)(error)),\n try: call,\n }).pipe(\n Effect.flatMap((output) =>\n Schema.decodeEffect(schema)(output).pipe(Effect.mapError(() => unreadable)),\n ),\n )\n}\n\nexport function makeClient(host: Host): TrackerClientApi {\n const { rpc } = host\n\n const options = (sessionID: string): CallOptions =>\n Option.match(host.locationOf(sessionID), {\n onNone: () => ({}),\n onSome: (location) => ({ location }),\n })\n\n return {\n attach: (sessionID, target) =>\n decoded(Changed, async () => {\n const output = await rpc.attach({ sessionID, target }, options(sessionID))\n\n return output\n }),\n detach: (sessionID, target) =>\n decoded(Changed, async () => {\n const output = await rpc.detach({ sessionID, target }, options(sessionID))\n\n return output\n }),\n list: (sessionID) =>\n decoded(View, async () => {\n const output = await rpc.list({ sessionID }, options(sessionID))\n\n return output\n }),\n onUpdate: (handler) =>\n rpc.events.on(\"updated\", ({ data }) => {\n Option.map(Schema.decodeUnknownOption(View)(data), handler)\n }),\n refresh: (sessionID) =>\n decoded(View, async () => {\n const output = await rpc.refresh({ sessionID }, options(sessionID))\n\n return output\n }),\n }\n}\n",
|
|
15
|
+
"/** @jsxImportSource @opentui/solid */\nimport { usePlugin } from \"@opencode/plugin/tui\";\nimport { Option } from \"effect\";\nconst definitions = actions => [{\n act: actions.attach,\n name: \"attach\",\n takesInput: true,\n title: \"Attach pull request\"\n}, {\n act: () => actions.open,\n name: \"open\",\n takesInput: false,\n title: \"Open pull request\"\n}, {\n act: () => actions.detach,\n name: \"detach\",\n takesInput: false,\n title: \"Detach pull request\"\n}, {\n act: () => actions.sync,\n name: \"sync\",\n takesInput: false,\n title: \"Sync pull request status\"\n}];\nfunction command(definition, run) {\n const slash = definition.takesInput ? {\n arguments: true,\n name: `pr-${definition.name}`\n } : {\n name: `pr-${definition.name}`\n };\n return {\n group: \"Pull requests\",\n id: `pr.${definition.name}`,\n palette: true,\n run: input => {\n run(definition.act(Option.fromNullishOr(input)));\n },\n slash,\n title: definition.title\n };\n}\n\n/** Registers the slash commands; OpenCode requires this from a rendered component. */\nexport function Commands(props) {\n const context = usePlugin();\n const commands = definitions(props.actions).map(definition => command(definition, props.run));\n context.keymap.layer(() => ({\n commands,\n mode: \"global\"\n }));\n return null;\n}",
|
|
16
|
+
"import { createComponent as _$createComponent } from \"@opentui/solid\";\n/** @jsxImportSource @opentui/solid */\nimport { usePlugin } from \"@opencode/plugin/tui\";\nimport { Effect } from \"effect\";\nimport { createEffect, createSignal, on, onCleanup } from \"solid-js\";\nimport { paletteOf } from \"../ui/Palette.ts\";\nimport { Sidebar } from \"../ui/Sidebar.tsx\";\n\n/** Which sessions' lists are collapsed, kept for the plugin's lifetime so it survives remounts. */\n\n/** Numbers requests; each listing and each published update supersedes the listings before it. */\n\nfunction newestFirst() {\n let latest = 0;\n return {\n isLatest: request => request === latest,\n next: () => {\n latest += 1;\n return latest;\n }\n };\n}\n\n/**\n * The session's view, owned by the server: listed when the sidebar is shown or switches session,\n * then replaced by each published update. Answers to superseded listings are ignored.\n */\nexport function sessionView(sessionID, tracker, run) {\n const [state, setState] = createSignal({\n _tag: \"Loading\"\n });\n const requests = newestFirst();\n onCleanup(tracker.onUpdate(view => {\n if (view.sessionID !== sessionID()) return;\n requests.next();\n setState({\n _tag: \"Ready\",\n view\n });\n }));\n createEffect(on(sessionID, current => {\n const request = requests.next();\n setState({\n _tag: \"Loading\"\n });\n run(Effect.map(Effect.result(tracker.list(current)), result => {\n if (!requests.isLatest(request)) return;\n setState(result._tag === \"Failure\" ? {\n _tag: \"Failed\",\n message: result.failure.message\n } : {\n _tag: \"Ready\",\n view: result.success\n });\n }));\n }));\n return state;\n}\nexport function SessionSidebar(props) {\n const context = usePlugin();\n const state = sessionView(() => props.sessionID, props.tracker, props.run);\n return _$createComponent(Sidebar, {\n get collapsed() {\n return props.collapsed.has(props.sessionID);\n },\n get onOpen() {\n return props.onOpen;\n },\n onToggle: () => {\n props.collapsed.toggle(props.sessionID);\n },\n get palette() {\n return paletteOf(context.theme, context.themeMode);\n },\n get state() {\n return state();\n }\n });\n}",
|
|
17
|
+
"import type { ResolvedTheme } from \"@opencode/theme/tui\"\nimport { RGBA } from \"@opentui/core\"\n\nimport type { Tone } from \"../domain/Appearance.ts\"\n\n/** The colors the sidebar uses, taken from the host theme. */\nexport interface Palette {\n readonly text: RGBA\n readonly muted: RGBA\n readonly tones: Readonly<Record<Tone, RGBA>>\n}\n\n/**\n * GitHub's color for merged pull requests. Themes have no purple of their own, and a theme's accent\n * can be any hue, so merged uses GitHub's purple for the theme's mode.\n */\nconst merged: Readonly<Record<\"dark\" | \"light\", RGBA>> = {\n dark: RGBA.fromHex(\"#a371f7\"),\n light: RGBA.fromHex(\"#8250df\"),\n}\n\nexport function paletteOf(theme: ResolvedTheme, mode: \"dark\" | \"light\"): Palette {\n return {\n muted: theme.text.muted,\n text: theme.text.base,\n tones: {\n gray: theme.text.muted,\n green: theme.text.feedback.success.base,\n purple: merged[mode],\n red: theme.text.feedback.error.base,\n yellow: theme.text.feedback.warning.base,\n },\n }\n}\n",
|
|
18
|
+
"import { createTextNode as _$createTextNode } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { memo as _$memo } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\n/** @jsxImportSource @opentui/solid */\n\nimport { Match, Option } from \"effect\";\nimport { For, Show } from \"solid-js\";\nimport { layout } from \"../domain/StackLayout.ts\";\nimport { SidebarRow } from \"./Row.tsx\";\n\n/** What the sidebar knows about its session. */\n\n/** Lists longer than this can be collapsed from the heading. */\nconst collapsibleAbove = 2;\nconst entriesOf = view => view.entries.map(entry => ({\n membership: Option.fromNullishOr(entry.membership),\n ref: entry.ref,\n status: entry.status\n}));\nfunction Heading(props) {\n return (() => {\n var _el$ = _$createElement(\"box\"),\n _el$3 = _$createElement(\"text\"),\n _el$4 = _$createElement(\"b\");\n _$insertNode(_el$, _el$3);\n _$setProp(_el$, \"flexDirection\", \"row\");\n _$setProp(_el$, \"gap\", 1);\n _$setProp(_el$, \"onMouseDown\", () => {\n if (props.collapsible) props.onToggle();\n });\n _$insert(_el$, _$createComponent(Show, {\n get when() {\n return props.collapsible;\n },\n get children() {\n var _el$2 = _$createElement(\"text\");\n _$insert(_el$2, () => props.collapsed ? \"▶\" : \"▼\");\n _$effect(_$p => _$setProp(_el$2, \"fg\", props.palette.text, _$p));\n return _el$2;\n }\n }), _el$3);\n _$insertNode(_el$3, _el$4);\n _$insertNode(_el$4, _$createTextNode(`Pull requests`));\n _$effect(_$p => _$setProp(_el$3, \"fg\", props.palette.text, _$p));\n return _el$;\n })();\n}\nfunction Rows(props) {\n return _$createComponent(Show, {\n get fallback() {\n return (() => {\n var _el$7 = _$createElement(\"text\");\n _$insertNode(_el$7, _$createTextNode(`No pull requests attached`));\n _$effect(_$p => _$setProp(_el$7, \"fg\", props.palette.muted, _$p));\n return _el$7;\n })();\n },\n get when() {\n return props.view.entries.length > 0;\n },\n get children() {\n var _el$6 = _$createElement(\"box\");\n _$setProp(_el$6, \"flexDirection\", \"column\");\n _$insert(_el$6, _$createComponent(For, {\n get each() {\n return layout(entriesOf(props.view));\n },\n children: row => _$createComponent(SidebarRow, {\n get compact() {\n return props.view.layout === \"compact\";\n },\n get onOpen() {\n return props.onOpen;\n },\n get palette() {\n return props.palette;\n },\n row: row\n })\n }));\n return _el$6;\n }\n });\n}\nexport function Sidebar(props) {\n const collapsible = () => props.state._tag === \"Ready\" && props.state.view.entries.length > collapsibleAbove;\n const body = () => Match.valueTags(props.state, {\n Failed: ({\n message\n }) => (() => {\n var _el$9 = _$createElement(\"text\");\n _$insert(_el$9, message);\n _$effect(_$p => _$setProp(_el$9, \"fg\", props.palette.tones.red, _$p));\n return _el$9;\n })(),\n Loading: () => (() => {\n var _el$0 = _$createElement(\"text\");\n _$insertNode(_el$0, _$createTextNode(`Loading`));\n _$effect(_$p => _$setProp(_el$0, \"fg\", props.palette.muted, _$p));\n return _el$0;\n })(),\n Ready: ({\n view\n }) => _$createComponent(Rows, {\n get onOpen() {\n return props.onOpen;\n },\n get palette() {\n return props.palette;\n },\n view: view\n })\n });\n return (() => {\n var _el$10 = _$createElement(\"box\");\n _$setProp(_el$10, \"flexDirection\", \"column\");\n _$setProp(_el$10, \"gap\", 1);\n _$insert(_el$10, _$createComponent(Heading, {\n get collapsed() {\n return props.collapsed;\n },\n get collapsible() {\n return collapsible();\n },\n get onToggle() {\n return props.onToggle;\n },\n get palette() {\n return props.palette;\n }\n }), null);\n _$insert(_el$10, _$createComponent(Show, {\n get when() {\n return !collapsible() || !props.collapsed;\n },\n get children() {\n return body();\n }\n }), null);\n return _el$10;\n })();\n}",
|
|
19
|
+
"import { createTextNode as _$createTextNode } from \"@opentui/solid\";\nimport { use as _$use } from \"@opentui/solid\";\nimport { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\n/** @jsxImportSource @opentui/solid */\n\nimport { Match, Option } from \"effect\";\nimport { createSignal, For, Show } from \"solid-js\";\nimport { appearance } from \"../domain/Appearance.ts\";\n\n/** A glyph drawn in the marker column: the Stack line in muted color, the status tick in `color`. */\n\nconst markers = {\n bullet: {\n line: \"\",\n tick: \"•\"\n },\n first: {\n line: \"┌\",\n tick: \"─\"\n },\n last: {\n line: \"└\",\n tick: \"─\"\n },\n middle: {\n line: \"├\",\n tick: \"─\"\n }\n};\n\n/** What continues the marker column under a row: the Stack line, a gap to unattached members, or space. */\nconst continuations = {\n continues: {\n line: \"│\",\n tick: \"\"\n },\n none: {\n line: \"\",\n tick: \"\"\n },\n open: {\n line: \"┊\",\n tick: \"\"\n }\n};\nconst markerWidth = 3;\n\n/** What `Marked` reads from its text renderable: how many lines the text wraps to. */\n\nfunction MarkerGlyph(props) {\n const padding = () => \" \".repeat(markerWidth - props.glyph.line.length - props.glyph.tick.length);\n return (() => {\n var _el$ = _$createElement(\"text\"),\n _el$2 = _$createElement(\"span\"),\n _el$3 = _$createElement(\"span\");\n _$insertNode(_el$, _el$2);\n _$insertNode(_el$, _el$3);\n _$insert(_el$2, () => props.glyph.line);\n _$insert(_el$3, () => props.glyph.tick);\n _$insert(_el$, padding, null);\n _$effect(_p$ => {\n var _v$ = {\n fg: props.palette.muted\n },\n _v$2 = {\n fg: props.color\n };\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$2, \"style\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$3, \"style\", _v$2, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$;\n })();\n}\n\n/** Text beside a marker column. Wrapped lines repeat `rest` so Stack lines stay unbroken. */\nfunction Marked(props) {\n const [lines, setLines] = createSignal(1);\n let content = Option.none();\n const measure = () => {\n const count = Option.match(content, {\n onNone: () => 1,\n onSome: text => text.virtualLineCount\n });\n setLines(Math.max(1, count));\n };\n return (() => {\n var _el$4 = _$createElement(\"box\"),\n _el$5 = _$createElement(\"box\"),\n _el$6 = _$createElement(\"text\");\n _$insertNode(_el$4, _el$5);\n _$insertNode(_el$4, _el$6);\n _$setProp(_el$4, \"flexDirection\", \"row\");\n _$setProp(_el$4, \"width\", \"100%\");\n _$setProp(_el$5, \"flexDirection\", \"column\");\n _$setProp(_el$5, \"width\", 3);\n _$insert(_el$5, _$createComponent(MarkerGlyph, {\n get color() {\n return props.color;\n },\n get glyph() {\n return props.first;\n },\n get palette() {\n return props.palette;\n }\n }), null);\n _$insert(_el$5, _$createComponent(For, {\n get each() {\n return Array.from({\n length: lines() - 1\n });\n },\n children: () => _$createComponent(MarkerGlyph, {\n get color() {\n return props.color;\n },\n get glyph() {\n return props.rest;\n },\n get palette() {\n return props.palette;\n }\n })\n }), null);\n _$use(text => {\n content = Option.some(text);\n measure();\n }, _el$6);\n _$setProp(_el$6, \"flexGrow\", 1);\n _$setProp(_el$6, \"on:line-info-change\", measure);\n _$insert(_el$6, () => props.children);\n return _el$4;\n })();\n}\nconst titleOf = status => Match.valueTags(status, {\n Fresh: ({\n snapshot\n }) => snapshot.title,\n Pending: () => \"Title unavailable\",\n Stale: ({\n snapshot\n }) => snapshot.title,\n Unavailable: () => \"Title unavailable\"\n});\nexport function PullRequestRow(props) {\n const shown = () => appearance(props.entry.status);\n const color = () => props.palette.tones[shown().tone];\n const below = () => continuations[props.connector];\n return (() => {\n var _el$7 = _$createElement(\"box\");\n _$setProp(_el$7, \"flexDirection\", \"column\");\n _$setProp(_el$7, \"onMouseUp\", () => {\n props.onOpen(props.entry.ref);\n });\n _$insert(_el$7, _$createComponent(Marked, {\n get color() {\n return color();\n },\n get first() {\n return markers[props.marker];\n },\n get palette() {\n return props.palette;\n },\n get rest() {\n return below();\n },\n get children() {\n return [(() => {\n var _el$8 = _$createElement(\"span\");\n _$insert(_el$8, () => props.entry.ref.label);\n _$effect(_$p => _$setProp(_el$8, \"style\", {\n bold: true,\n fg: color(),\n strikethrough: shown().strikethrough\n }, _$p));\n return _el$8;\n })(), (() => {\n var _el$9 = _$createElement(\"span\");\n _$insert(_el$9, () => ` ${shown().label}`);\n _$effect(_$p => _$setProp(_el$9, \"style\", {\n fg: color()\n }, _$p));\n return _el$9;\n })(), _$createComponent(Show, {\n get when() {\n return shown().stale;\n },\n get children() {\n var _el$0 = _$createElement(\"span\");\n _$insertNode(_el$0, _$createTextNode(` · stale`));\n _$effect(_$p => _$setProp(_el$0, \"style\", {\n fg: props.palette.muted,\n italic: true\n }, _$p));\n return _el$0;\n }\n })];\n }\n }), null);\n _$insert(_el$7, _$createComponent(Show, {\n get when() {\n return !props.compact;\n },\n get children() {\n return _$createComponent(Marked, {\n get color() {\n return color();\n },\n get first() {\n return below();\n },\n get palette() {\n return props.palette;\n },\n get rest() {\n return below();\n },\n get children() {\n var _el$10 = _$createElement(\"span\");\n _$insert(_el$10, () => titleOf(props.entry.status));\n _$effect(_$p => _$setProp(_el$10, \"style\", {\n fg: props.palette.muted,\n strikethrough: shown().strikethrough\n }, _$p));\n return _el$10;\n }\n });\n }\n }), null);\n return _el$7;\n })();\n}\nexport function GapRow(props) {\n const label = () => `${String(props.count)} ${props.count === 1 ? \"PR\" : \"PRs\"} not attached`;\n return (() => {\n var _el$11 = _$createElement(\"text\");\n _$insert(_el$11, () => `├┄ ${label()}`);\n _$effect(_$p => _$setProp(_el$11, \"fg\", props.palette.muted, _$p));\n return _el$11;\n })();\n}\nexport function SidebarRow(props) {\n return Match.valueTags(props.row, {\n Gap: ({\n count\n }) => _$createComponent(GapRow, {\n count: count,\n get palette() {\n return props.palette;\n }\n }),\n PullRequest: ({\n connector,\n entry,\n marker\n }) => _$createComponent(PullRequestRow, {\n get compact() {\n return props.compact;\n },\n connector: connector,\n entry: entry,\n marker: marker,\n get onOpen() {\n return props.onOpen;\n },\n get palette() {\n return props.palette;\n }\n })\n });\n}",
|
|
20
|
+
"import { Match } from \"effect\"\n\nimport type { Diagnostic, PullRequestState, Status } from \"./Snapshot.ts\"\n\nexport type Tone = \"green\" | \"yellow\" | \"red\" | \"purple\" | \"gray\"\n\nexport interface Appearance {\n readonly tone: Tone\n readonly label: string\n readonly strikethrough: boolean\n readonly stale: boolean\n}\n\ntype Open = Extract<PullRequestState, { readonly _tag: \"Open\" }>\n\nconst diagnosticLabels: Record<Diagnostic, string> = {\n AuthenticationRequired: \"authenticate\",\n GitHubCliMissing: \"install gh\",\n GitHubUnavailable: \"GitHub unavailable\",\n InvalidResponse: \"invalid response\",\n NotFound: \"inaccessible\",\n}\n\nconst shown = (tone: Tone, label: string, strikethrough = false): Appearance => ({\n label,\n stale: false,\n strikethrough,\n tone,\n})\n\n/** Precedence: conflict, failed CI, draft, pending CI, behind, then passed or no checks. */\nfunction openAppearance(open: Open): Appearance {\n if (open.mergeability === \"conflicting\") return shown(\"red\", \"conflict\")\n\n if (open.ci === \"failed\") return shown(\"red\", \"failed\")\n\n if (open.draft) return shown(\"gray\", \"draft\")\n\n if (open.ci === \"pending\") return shown(\"yellow\", \"pending\")\n\n if (open.behind) return shown(\"yellow\", \"behind\")\n\n return open.ci === \"passed\" ? shown(\"green\", \"passed\") : shown(\"gray\", \"no checks\")\n}\n\nfunction stateAppearance(state: PullRequestState): Appearance {\n return Match.valueTags(state, {\n Closed: () => shown(\"red\", \"closed\", true),\n Merged: () => shown(\"purple\", \"merged\", true),\n Open: openAppearance,\n })\n}\n\nfunction markStale(fresh: Appearance): Appearance {\n return { label: fresh.label, stale: true, strikethrough: fresh.strikethrough, tone: fresh.tone }\n}\n\nexport function appearance(status: Status): Appearance {\n return Match.valueTags(status, {\n Fresh: ({ snapshot }) => stateAppearance(snapshot.state),\n Pending: () => shown(\"gray\", \"unavailable\"),\n Stale: ({ snapshot }) => markStale(stateAppearance(snapshot.state)),\n Unavailable: ({ diagnostic }) => shown(\"gray\", diagnosticLabels[diagnostic]),\n })\n}\n",
|
|
21
|
+
"import type { UI } from \"@opencode/plugin/tui/context\"\nimport { Effect, Option } from \"effect\"\n\nimport type { Terminal } from \"./Actions.ts\"\n\n/** A terminal backed by OpenCode's UI; `dismiss` closes a dialog it still has open. */\nexport interface HostTerminal {\n readonly terminal: Terminal\n readonly dismiss: () => void\n}\n\n/** The session on screen, if any. */\nfunction currentSession(ui: UI): Option.Option<string> {\n const route = ui.router.current()\n\n return route.type === \"session\" ? Option.some(route.sessionID) : Option.none()\n}\n\nexport function hostTerminal(ui: UI): HostTerminal {\n let open = false\n\n /** Shows a dialog, remembering it is open until it answers. */\n const dialog = <A>(show: () => Promise<A | undefined>): Effect.Effect<Option.Option<A>> =>\n Effect.acquireUseRelease(\n Effect.sync(() => {\n open = true\n }),\n () => Effect.promise(show).pipe(Effect.map(Option.fromNullishOr)),\n () =>\n Effect.sync(() => {\n open = false\n }),\n )\n\n return {\n dismiss: () => {\n if (open) ui.dialog.clear()\n },\n terminal: {\n choose: (title, choices) =>\n dialog(async () => {\n const chosen = await ui.dialog.select({ options: choices, title })\n\n return chosen\n }),\n notify: (variant, message) => {\n ui.toast.show({ message, title: \"Pull requests\", variant })\n },\n prompt: (title, placeholder) =>\n dialog(async () => {\n const answer = await ui.dialog.prompt({ placeholder, title })\n\n return answer\n }),\n session: () => currentSession(ui),\n },\n }\n}\n"
|
|
30
22
|
],
|
|
31
|
-
"mappings": "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",
|
|
32
|
-
"debugId": "
|
|
23
|
+
"mappings": ";;AAAA,4BAAS;AAET;AACA,mBAAS,mBAAQ;AACjB,yBAAS;;;ACJT;AAAA;AAEO,MAAM,uBAAuB,OAAO,YAA4B,EAAE,kBAAkB;AAAA,EACzF,SAAS,OAAO;AAClB,CAAC,EAAE;AAAC;AAAA;AAEG,MAAM,sBAAsB,OAAO,YAA2B,EAAE,iBAAiB;AAAA,EACtF,SAAS,OAAO;AAAA,EAChB,UAAU,OAAO;AAAA,EACjB,QAAQ,OAAO;AACjB,CAAC,EAAE;AAAC;AAAA;AAWG,MAAM,sBAAsB,QAAQ,QAAyC,EAClF,mCACF,EAAE;AAAC;AASH,IAAM,sBAAsB,OAAO,GAAG,OAAO,OAAO,EAAE,MAAM,OAAO,QAAQ,QAAQ,EAAE,CAAC,CAAC;AAEvF,SAAS,KAAK,CAAC,SAAiB,MAAyB,KAAoB;AAAA,EAC3E,MAAM,WAAU,IAAI,MAAM,CAAC,SAAS,GAAG,IAAI,GAAG;AAAA,IAC5C;AAAA,IACA,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,EACV,CAAC;AAAA,EAED,OAAO;AAAA,IACL,WAAW,YAAY;AAAA,MACrB,MAAM,SAAS,MAAM,QAAQ,IAAI;AAAA,QAC/B,IAAI,SAAS,SAAQ,MAAM,EAAE,KAAK;AAAA,QAClC,IAAI,SAAS,SAAQ,MAAM,EAAE,KAAK;AAAA,QAClC,SAAQ;AAAA,MACV,CAAC;AAAA,MAED,OAAO;AAAA;AAAA,IAET,MAAM,MAAM;AAAA,MACV,SAAQ,KAAK;AAAA;AAAA,IAEf,SAAS,MAAM,SAAQ,aAAa;AAAA,EACtC;AAAA;AAIF,SAAS,KAAK,CACZ,SACA,MACA,KACmE;AAAA,EACnE,MAAM,UAAU,OAAO,IAAI;AAAA,IACzB,OAAO,CAAC,UACN,oBAAoB,KAAK,IACrB,IAAI,eAAe,EAAE,QAAQ,CAAC,IAC9B,IAAI,cAAc,EAAE,SAAS,UAAU,IAAI,QAAQ,OAAO,KAAK,EAAE,CAAC;AAAA,IACxE,KAAK,MAAM,MAAM,SAAS,MAAM,GAAG;AAAA,EACrC,CAAC;AAAA,EAED,OAAO,OAAO,eAAe,SAAS,CAAC,UACrC,OAAO,KAAK,MAAM;AAAA,IAChB,IAAI,MAAM,QAAQ;AAAA,MAAG,MAAM,KAAK;AAAA,GACjC,CACH;AAAA;AAGF,SAAS,MAAM,CAAC,SAAiB,OAAoD;AAAA,EACnF,OAAO,OAAO,IAAI,UAAU,GAAG;AAAA,IAC7B,OAAO,QAAQ,QAAQ,YAAY,OAAO,OAAO,QAAQ,MAAM,SAAS;AAAA,IAExE,IAAI,aAAa;AAAA,MAAG,OAAO;AAAA,IAE3B,OAAO,OAAO,IAAI,cAAc,EAAE,SAAS,UAAU,OAAO,CAAC;AAAA,GAC9D;AAAA;AAGI,IAAM,QAAQ,MAAM,QACzB,eACA,cAAc,GAAG;AAAA,EACf,KAAK,CAAC,SAAS,MAAM,QACnB,OAAO,OACL,OAAO,QAAQ,MAAM,SAAS,MAAM,GAAG,GAAG,CAAC,UAAiB,OAAO,SAAS,KAAK,CAAC,CACpF;AACJ,CAAC,CACH;;;AC9FA;AACA,mBAAS;;;ACLT,mCAAyB;AAEzB,IAAM,mBAAmB;AAEzB,IAAM,iBACJ;AAEF,IAAM,UAAU;AAGhB,IAAM,iBAAiB;AAEvB,IAAM,UAAU,QAAO,OAAO,MAAM,QAAO,UAAU,gBAAgB,CAAC;AAEtE,IAAM,oBAAoB,QAAO,IAAI,MACnC,QAAO,UAAU,EAAE,SAAS,OAAO,kBAAkB,SAAS,EAAE,CAAC,CACnE;AAAA;AAGO,MAAM,uBAAuB,QAAO,MAAsB,gBAAgB,EAAE;AAAA,EACjF,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,YAAY;AACd,CAAC,EAAE;AAAA,MACU,GAAG,GAAW;AAAA,IACvB,OAAO,sBAAsB,KAAK,SAAS,KAAK,mBAAmB,OAAO,KAAK,MAAM;AAAA;AAAA,MAG5E,KAAK,GAAW;AAAA,IACzB,OAAO,GAAG,KAAK,SAAS,KAAK,cAAc,OAAO,KAAK,MAAM;AAAA;AAEjE;AAAA;AAEO,MAAM,8BAA8B,QAAO,YAAmC,EACnF,yBACA,EAAE,OAAO,QAAO,OAAO,CACzB,EAAE;AAAC;AAAA;AAEI,MAAM,gCAAgC,QAAO,YAAqC,EACvF,2BACA,EAAE,OAAO,QAAO,OAAO,CACzB,EAAE;AAAC;AAOH,IAAM,YAAY,QAAO,oBAAoB,cAAc;AAE3D,IAAM,eAAe,QAAO,oBAAoB,iBAAiB;AAE1D,SAAS,eAAe,CAAC,MAAsB,OAAgC;AAAA,EACpF,OAAO,KAAK,QAAQ,MAAM;AAAA;AAGrB,SAAS,mBAAmB,CACjC,OACsD;AAAA,EACtD,MAAM,QAAQ,eAAe,KAAK,KAAK,IAAI,eAAe,KAAK,KAAK,IAAI;AAAA,EACxE,MAAM,SAAS,UAAU,OAAO,CAAC,IAAK,MAAM,UAAU,CAAC;AAAA,EAEvD,MAAM,YAAY;AAAA,IAChB,QAAQ,OAAO,OAAO,aAAa,OAAO,GAAG;AAAA,IAC7C,QAAQ,OAAO,YAAY,IAAI,YAAY;AAAA,IAC3C,aAAa,OAAO,iBAAiB,IAAI,YAAY;AAAA,EACvD;AAAA,EAEA,OAAO,OAAO,WAAW,UAAU,SAAS,GAAG,MAAM,IAAI,sBAAsB,EAAE,MAAM,CAAC,CAAC;AAAA;AAGpF,SAAS,qBAAqB,CACnC,OAC0D;AAAA,EAC1D,MAAM,YAAY,oBAAoB,KAAK;AAAA,EAE3C,IAAI,OAAO,UAAU,SAAS;AAAA,IAC5B,OAAO,OAAO,QAAQ,EAAE,MAAM,aAAa,KAAK,UAAU,QAAQ,CAAC;AAAA,EAErE,MAAM,SAAS,QAAQ,KAAK,KAAK,IAAI,aAAa,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK;AAAA,EAE/E,OAAO,OAAO,WAAW,QAAQ,MAAM,IAAI,wBAAwB,EAAE,MAAM,CAAC,CAAC,EAAE,KAC7E,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,UAAU,QAAQ,MAAM,EAAE,CAC3D;AAAA;;;ACnFF,oCAA0B;AAInB,IAAM,KAAK,QAAO,SAAS,CAAC,UAAU,WAAW,UAAU,MAAM,CAAC;AAIlE,IAAM,eAAe,QAAO,SAAS,CAAC,aAAa,eAAe,SAAS,CAAC;AAI5E,IAAM,mBAAmB,QAAO,MAAM;AAAA,EAC3C,QAAO,aAAa,QAAQ;AAAA,IAC1B,QAAQ,QAAO;AAAA,IACf,IAAI;AAAA,IACJ,OAAO,QAAO;AAAA,IACd,cAAc;AAAA,EAChB,CAAC;AAAA,EACD,QAAO,aAAa,UAAU,CAAC,CAAC;AAAA,EAChC,QAAO,aAAa,UAAU,CAAC,CAAC;AAClC,CAAC;AAKM,IAAM,WAAW,QAAO,OAAO;AAAA,EACpC,KAAK;AAAA,EACL,OAAO;AAAA,EACP,OAAO,QAAO;AAChB,CAAC;AAKM,IAAM,aAAa,QAAO,SAAS;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAIM,IAAM,SAAS,QAAO,MAAM;AAAA,EACjC,QAAO,aAAa,WAAW,CAAC,CAAC;AAAA,EACjC,QAAO,aAAa,SAAS,EAAE,UAAU,SAAS,CAAC;AAAA,EACnD,QAAO,aAAa,SAAS;AAAA,IAC3B,YAAY;AAAA,IACZ,cAAc,QAAO;AAAA,IACrB,UAAU;AAAA,EACZ,CAAC;AAAA,EACD,QAAO,aAAa,eAAe,EAAE,YAAY,WAAW,CAAC;AAC/D,CAAC;AAKM,IAAM,aAAa,SAAS,QAAQ,CAAC;AAErC,IAAM,UAAkB,EAAE,MAAM,UAAU;AAE1C,SAAS,SAAS,CAAC,UAA4B;AAAA,EACpD,OAAO,EAAE,MAAM,SAAS,SAAS;AAAA;AAI5B,SAAS,MAAM,CAAC,QAAgB,YAAwB,KAAqB;AAAA,EAClF,OAAO,MAAM,UAAU,QAAQ;AAAA,IAC7B,OAAO,GAAG,gBAAwB,EAAE,MAAM,SAAS,YAAY,cAAc,KAAK,SAAS;AAAA,IAC3F,SAAS,OAAe,EAAE,MAAM,eAAe,WAAW;AAAA,IAC1D,OAAO,GAAG,cAAc,eACtB,MAAM,gBAAgB,SAAS,SAAS,UAAU,IAC9C,EAAE,MAAM,eAAe,WAAW,IAClC,EAAE,MAAM,SAAS,YAAY,cAAc,SAAS;AAAA,IAC1D,aAAa,OAAe,EAAE,MAAM,eAAe,WAAW;AAAA,EAChE,CAAC;AAAA;;;AC7EH,kBAAS,eAAc,mBAAQ;AAKxB,IAAM,aAAa,QAAO,MAAM;AAAA,EACrC,QAAO,aAAa,cAAc,CAAC,CAAC;AAAA,EACpC,QAAO,aAAa,SAAS;AAAA,IAC3B,IAAI,QAAO;AAAA,IACX,SAAS,QAAO,cAAc,cAAc;AAAA,EAC9C,CAAC;AACH,CAAC;AA+CD,IAAM,UAAU,CAAC,UACf,QAAO,OAAO,MAAM,YAAY,CAAC,eAAe,WAAW,SAAS,OAAO;AAE7E,IAAM,SAAS,CAAC,UAAqC,MAAM,QAAQ,IAAI,CAAC,WAAW,OAAO,GAAG;AAE7F,SAAS,WAAW,CAAC,SAAoD;AAAA,EACvE,MAAM,OAAO,IAAI;AAAA,EAEjB,YAAY,OAAO,UAAU,QAAQ,QAAQ,GAAG;AAAA,IAC9C,WAAW,SAAS,QAAO,QAAQ,QAAQ,KAAK,CAAC,GAAG;AAAA,MAClD,KAAK,IAAI,MAAM,IAAI,CAAC,GAAI,KAAK,IAAI,MAAM,EAAE,KAAK,CAAC,GAAI,EAAE,OAAO,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC;AAAA,IAC1F;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAIT,SAAS,MAAM,CAAC,MAA0E;AAAA,EACxF,MAAM,UAAU,IAAI;AAAA,EAEpB,YAAY,IAAI,YAAY,MAAM;AAAA,IAChC,WAAW,OAAO,QAAQ,QAAQ,CAAC,WAAW,OAAO,OAAO,KAAK,CAAC,GAAG;AAAA,MACnE,QAAQ,IAAI,KAAK,IAAI,IAAI,CAAC,GAAI,QAAQ,IAAI,GAAG,KAAK,CAAC,GAAI,EAAE,CAAC,CAAC;AAAA,IAC7D;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,MAAM,CACb,SACA,SACA,SACS;AAAA,EACT,MAAM,UAAU,QAAO,MAAM,IAAI,KAAK,OAAO,GAAG;AAAA,IAC9C,QAAQ,MAAgB,CAAC;AAAA,IACzB,QAAQ,CAAC,WAAW,OAAO,OAAO,KAAK;AAAA,EACzC,CAAC;AAAA,EAED,MAAM,SAAS,IAAI,IAAI,OAAO;AAAA,EAC9B,MAAM,kBAAkB,QAAQ,OAAO,CAAC,UAAU,OAAO,IAAI,MAAM,IAAI,GAAG,CAAC;AAAA,EAE3E,OACE,OAAO,SAAS,QAAQ,UACxB,QAAQ,MAAM,CAAC,WAAW,OAAO,OAAO,KAAK,EAAE,KAAK;AAAA,CAAI,MAAM,QAAQ,KAAK;AAAA,CAAI,CAAC,KAChF,QAAQ,MAAM,CAAC,SAAS,QAAQ,IAAI,GAAG,KAAK,IAAI,KAAO,SAAS,CAAC,KACjE,gBAAgB,WAAW,QAAQ;AAAA;AAIvC,SAAS,UAAU,CAAC,SAAuD;AAAA,EACzE,MAAM,SAAS,QAAQ,IAAI,CAAC,YAAY;AAAA,IACtC,OAAO,OAAO;AAAA,IACd,UAAU,OAAO,OAAO,KAAK,EAAE,QAAQ,OAAO,GAAG;AAAA,IACjD,MAAM,OAAO,MAAM,QAAQ;AAAA,EAC7B,EAAE;AAAA,EAEF,MAAM,WAAW,IAAI,QACnB,QACA,OAAO,MAAM,CAAC,GACd,CAAC,QAAgB,UACf,MAAM,UAAU,OAAO,QAAQ,KAAK,MAAM,WAAW,OAAO,QAChE;AAAA,EAEA,MAAM,UAAU,OAAO,MAAM,CAAC,WAAmB,OAAO,YAAY,CAAC,KAAK,SAAS,MAAM,OAAO;AAAA,EAEhG,OAAO,UAAU,QAAO,KAAK,MAAM,IAAI,QAAO,KAAK;AAAA;AAIrD,SAAS,gBAAgB,CAAC,SAA+C;AAAA,EACvE,MAAM,OAAO,YAAY,OAAO;AAAA,EAChC,MAAM,UAAU,OAAO,IAAI;AAAA,EAC3B,MAAM,SAAS,IAAI;AAAA,EAEnB,WAAW,WAAW,KAAK,OAAO,GAAG;AAAA,IACnC,MAAM,SAAS,OAAO,SAAS,SAAS,OAAO,IAAI,WAAW,OAAO,IAAI,QAAO,KAAK;AAAA,IAErF,WAAW,SAAS,QAAO,QAAQ,MAAM,GAAG;AAAA,MAC1C,YAAY,MAAM,YAAY,MAAM,QAAQ,GAAG;AAAA,QAC7C,OAAO,IAAI,QAAQ,OAAO;AAAA,UACxB,UAAU,MAAM;AAAA,UAChB;AAAA,UACA,OAAO,SAAS;AAAA,UAChB,MAAM,SAAS,MAAM,SAAS;AAAA,UAC9B,UAAU,IAAI,IAAI,OAAO,OAAO,CAAC;AAAA,QACnC,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,MAAM,CAAC,OAAsB;AAAA,EACpC,QAAQ,YAAY;AAAA,EAEpB,IAAI,MAAM,aAAa,KAAK,QAAQ,OAAO;AAAA,IAAG,OAAO;AAAA,EAErD,IAAI,MAAM,SAAS,QAAQ,aAAa;AAAA,IAAG,OAAO;AAAA,EAElD,IAAI,MAAM,QAAQ,QAAQ,aAAa,QAAQ,OAAO;AAAA,IAAG,OAAO;AAAA,EAEhE,OAAO;AAAA;AAGT,SAAS,SAAS,CAAC,OAAyB;AAAA,EAC1C,IAAI,CAAC,MAAM;AAAA,IAAM,OAAO;AAAA,EAExB,OAAO,MAAM,QAAQ,WAAW,MAAM,QAAQ,OAAO,IAAI,SAAS;AAAA;AAGpE,SAAS,SAA0B,CAAC,OAAU,OAAwB;AAAA,EACpE,MAAM,UAAU,QAAO,MAAM,MAAM,UAAU;AAAA,IAC3C,QAAQ,MAAM;AAAA,IACd,QAAQ,CAAC,WAAW,MAAM,QAAQ,WAAW,OAAO,WAAW;AAAA,EACjE,CAAC;AAAA,EAED,MAAM,MAAc;AAAA,IAClB,MAAM;AAAA,IACN,WAAW,UAAU,KAAK;AAAA,IAC1B;AAAA,IACA,QAAQ,OAAO,KAAK;AAAA,EACtB;AAAA,EAEA,OAAO,UAAU,IAAI,CAAC,EAAE,MAAM,OAAO,OAAO,QAAQ,GAAG,GAAG,IAAI,CAAC,GAAG;AAAA;AAI7D,SAAS,MAAuB,CAAC,SAAiC;AAAA,EACvE,MAAM,SAAS,iBAAiB,OAAO;AAAA,EAEvC,OAAO,QAAQ,QAAQ,CAAC,OAAO,UAC7B,QAAO,MAAM,QAAO,cAAc,OAAO,IAAI,KAAK,CAAC,GAAG;AAAA,IACpD,QAAQ,MAAgB,CAAC,EAAE,MAAM,eAAe,WAAW,QAAQ,OAAO,QAAQ,SAAS,CAAC;AAAA,IAC5F,QAAQ,CAAC,UAAU,UAAU,OAAO,KAAK;AAAA,EAC3C,CAAC,CACH;AAAA;;;AHzLK,IAAM,SAAS,QAAO,SAAS,CAAC,WAAW,SAAS,CAAC;AAIrD,IAAM,YAAY,QAAO,OAAO;AAAA,EACrC,YAAY,QAAO;AAAA,EACnB,YAAY,QAAO,OAAO,UAAU;AAAA,EACpC,KAAK;AAAA,EACL,QAAQ;AACV,CAAC;AAKM,IAAM,OAAO,QAAO,OAAO;AAAA,EAChC,SAAS,QAAO,MAAM,SAAS;AAAA,EAC/B,QAAQ;AAAA,EACR,WAAW,QAAO;AACpB,CAAC;AAOD,IAAM,UAAU,QAAO,OAAO,EAAE,WAAW,QAAO,OAAO,CAAC;AAG1D,IAAM,SAAS,QAAO,OAAO,EAAE,WAAW,QAAO,QAAQ,QAAQ,QAAO,OAAO,CAAC;AAGzE,IAAM,UAAU,QAAO,OAAO,EAAE,SAAS,QAAO,QAAQ,MAAM,KAAK,CAAC;AAK3E,IAAM,WAAW,QAAO,OAAO,EAAE,SAAS,QAAO,OAAO,CAAC;AAOzD,SAAS,QAA8B,CACrC,QAC6D;AAAA,EAC7D,OAAO,EAAE,aAAa,QAAO,mBAAmB,QAAO,UAAU,MAAM,CAAC,EAAE,aAAa;AAAA;AAGlF,IAAM,qBAAqB,IAAI,OAAO;AAAA,EAC3C,QAAQ;AAAA,IACN,SAAS,EAAE,QAAQ,SAAS,IAAI,EAAE;AAAA,EACpC;AAAA,EACA,IAAI;AAAA,EACJ,SAAS;AAAA,IACP,QAAQ;AAAA,MACN,QAAQ,EAAE,UAAU,SAAS,QAAQ,EAAE;AAAA,MACvC,OAAO,SAAS,MAAM;AAAA,MACtB,QAAQ,SAAS,OAAO;AAAA,IAC1B;AAAA,IACA,QAAQ;AAAA,MACN,QAAQ,EAAE,UAAU,SAAS,QAAQ,EAAE;AAAA,MACvC,OAAO,SAAS,MAAM;AAAA,MACtB,QAAQ,SAAS,OAAO;AAAA,IAC1B;AAAA,IACA,MAAM;AAAA,MACJ,QAAQ,EAAE,UAAU,SAAS,QAAQ,EAAE;AAAA,MACvC,OAAO,SAAS,OAAO;AAAA,MACvB,QAAQ,SAAS,IAAI;AAAA,IACvB;AAAA,IACA,SAAS;AAAA,MACP,QAAQ,EAAE,UAAU,SAAS,QAAQ,EAAE;AAAA,MACvC,OAAO,SAAS,OAAO;AAAA,MACvB,QAAQ,SAAS,IAAI;AAAA,IACvB;AAAA,EACF;AACF,CAAC;;;AItFD,mBAAS,mBAAQ;AA2CjB,IAAM,cAAc;AAGpB,SAAS,SAAS,CAChB,UACA,MACqB;AAAA,EACrB,OAAO,QAAO,QAAQ,MACpB,QAAO,MAAM,SAAS,QAAQ,GAAG;AAAA,IAC/B,QAAQ,MACN,QAAO,KAAK,MAAM;AAAA,MAChB,SAAS,OAAO,WAAW,uBAAuB;AAAA,KACnD;AAAA,IACH,QAAQ;AAAA,EACV,CAAC,CACH;AAAA;AAIF,SAAS,MAAS,CAChB,UACA,QACA,QACqB;AAAA,EACrB,OAAO,QAAO,IAAI,QAAO,OAAO,MAAM,GAAG,CAAC,WAAW;AAAA,IACnD,IAAI,OAAO,SAAS,WAAW;AAAA,MAC7B,SAAS,OAAO,SAAS,OAAO,QAAQ,OAAO;AAAA,MAE/C;AAAA,IACF;AAAA,IAEA,YAAY,SAAS,YAAY,QAAO,QAAQ,OAAO,OAAO,OAAO,CAAC,GAAG;AAAA,MACvE,SAAS,OAAO,SAAS,OAAO;AAAA,IAClC;AAAA,GACD;AAAA;AAIH,SAAS,IAAI,GACT,UAAU,WACZ,WACA,OAC8C;AAAA,EAC9C,OAAO,QAAO,OAAO,QAAQ,KAAK,SAAS,CAAC,EAAE,KAC5C,QAAO,QAAQ,CAAC,WAAW;AAAA,IACzB,IAAI,OAAO,SAAS,WAAW;AAAA,MAC7B,SAAS,OAAO,SAAS,OAAO,QAAQ,OAAO;AAAA,MAE/C,OAAO,QAAO;AAAA,IAChB;AAAA,IAEA,QAAQ,YAAY,OAAO;AAAA,IAE3B,IAAI,QAAQ,WAAW,GAAG;AAAA,MACxB,SAAS,OAAO,QAAQ,gCAAgC;AAAA,MAExD,OAAO,QAAO;AAAA,IAChB;AAAA,IAEA,OAAO,SAAS,OACd,OACA,QAAQ,IAAI,CAAC,WAAW;AAAA,MACtB,OAAO,MAAM,IAAI;AAAA,MACjB,OAAO,MAAM;AAAA,IACf,EAAE,CACJ;AAAA,GACD,CACH;AAAA;AAGF,IAAM,UAAU,CAAC,YACf,QAAO,KAAK,CAAC,WAAW,QAAQ,OAAO,CAAC;AAE1C,SAAS,YAAY,CAAC,MAAmC;AAAA,EACvD,MAAM,QAAQ,KAAK,QAAQ;AAAA,EAE3B,MAAM,SAAS,KAAK,QAAQ,OAC1B,CAAC,UAAU,MAAM,OAAO,SAAS,WAAW,MAAM,OAAO,SAAS,aACpE,EAAE;AAAA,EAEF,IAAI,UAAU;AAAA,IAAG,OAAO,QAAO,KAAK,CAAC,QAAQ,gCAAgC,CAAC;AAAA,EAE9E,MAAM,SAAS,UAAU,OAAO,KAAK,KAAK,UAAU,IAAI,iBAAiB;AAAA,EAEzE,OAAO,QAAO,KACZ,WAAW,IACP,CAAC,WAAW,GAAG,SAAS,IACxB,CAAC,WAAW,GAAG,WAAW,OAAO,MAAM,2BAA2B,CACxE;AAAA;AAIF,IAAM,cAAc,CAAC,SACnB,QAAO,OAAO,QAAO,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,YAAY,YAAY,EAAE;AAErE,SAAS,MAAM,CAAC,UAAoB,OAAmD;AAAA,EACrF,QAAQ,UAAU,YAAY;AAAA,EAE9B,OAAO,UAAU,UAAU,CAAC,cAC1B,QAAO,MAAM,QAAO,QAAQ,OAAO,WAAW,GAAG;AAAA,IAC/C,QAAQ,MACN,QAAO,IACL,SAAS,OAAO,uBAAuB,WAAW,GAClD,QAAO,QAAQ,WAAW,CAC5B;AAAA,IACF,QAAQ,CAAC,SAAS,QAAO,YAAY,IAAI;AAAA,EAC3C,CAAC,EAAE,KACD,QAAO,QACL,QAAO,MAAM;AAAA,IACX,QAAQ,MAAM,QAAO;AAAA,IACrB,QAAQ,CAAC,WAAW,OAAO,UAAU,QAAQ,OAAO,WAAW,MAAM,GAAG,OAAO;AAAA,EACjF,CAAC,CACH,CACF,CACF;AAAA;AAaF,SAAS,UAAa,CAAC,UAAoB,QAA8C;AAAA,EACvF,OAAO,UAAU,SAAS,UAAU,CAAC,cACnC,KAAK,UAAU,WAAW,OAAO,KAAK,EAAE,KACtC,QAAO,QACL,QAAO,MAAM;AAAA,IACX,QAAQ,MAAM,QAAO;AAAA,IACrB,QAAQ,CAAC,QAAQ,OAAO,SAAS,UAAU,OAAO,IAAI,WAAW,GAAG,GAAG,OAAO,MAAM;AAAA,EACtF,CAAC,CACH,CACF,CACF;AAAA;AAGK,SAAS,OAAO,CAAC,UAA6B;AAAA,EACnD,QAAQ,UAAU,YAAY;AAAA,EAE9B,OAAO;AAAA,IACL,QAAQ,CAAC,UAAU,OAAO,UAAU,KAAK;AAAA,IACzC,QAAQ,WAAW,UAAU;AAAA,MAC3B,KAAK,CAAC,WAAW,QAAQ,QAAQ,OAAO,WAAW,IAAI,GAAG;AAAA,MAC1D,QAAQ;AAAA,MACR,OAAO;AAAA,IACT,CAAC;AAAA,IACD,MAAM,WAAW,UAAU;AAAA,MACzB,KAAK,CAAC,GAAG,QAAQ,SAAS,KAAK,IAAI,GAAG;AAAA,MACtC,QAAQ,QAAO;AAAA,MACf,OAAO;AAAA,IACT,CAAC;AAAA,IACD,iBAAiB,CAAC,QAAQ,OAAO,UAAU,SAAS,KAAK,IAAI,GAAG,GAAG,QAAO,IAAI;AAAA,IAC9E,MAAM,UAAU,UAAU,CAAC,cACzB,OAAO,UAAU,QAAQ,QAAQ,SAAS,GAAG,YAAY,CAC3D;AAAA,EACF;AAAA;;;AC3MF,mBAAS;AASF,SAAS,UAAU,GAAe;AAAA,EACvC,MAAM,UAAU,IAAI;AAAA,EAEpB,OAAO;AAAA,IACL,KAAK,CAAC,WAAW;AAAA,MACf,MAAM,QAAQ,QAAO,QAAQ,MAAM;AAAA,MAEnC,QAAQ,IAAI,KAAK;AAAA,MACjB,MAAM,YAAY,MAAM;AAAA,QACtB,QAAQ,OAAO,KAAK;AAAA,OACrB;AAAA;AAAA,IAEH,MAAM,YAAY;AAAA,MAChB,MAAM,QAAO,WAAW,MAAM,aAAa,OAAO,CAAC;AAAA;AAAA,EAEvD;AAAA;;;ACxBF,mBAAS,mBAAQ,mBAAQ;AAIlB,MAAM,mBAAmB,QAAO,YAAwB,EAAE,cAAc;AAAA,EAC7E,SAAS,QAAO;AAClB,CAAC,EAAE;AAAC;AAEJ,IAAM,UAA8D;AAAA,EAClE,QAAQ;AAAA,EACR,OAAO;AACT;AAGO,SAAS,OAAO,CACrB,KACA,UACgD;AAAA,EAChD,OAAO,QAAO,MAAM,QAAO,cAAc,QAAQ,SAAS,GAAG;AAAA,IAC3D,QAAQ,MACN,QAAO,KACL,IAAI,WAAW,EAAE,SAAS,6CAA6C,YAAY,CAAC,CACtF;AAAA,IACF,QAAQ,CAAC,WACP,cAAc,IAAI,CAAC,WAAW,OAAO,IAAI,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,KAC5D,QAAO,QACP,QAAO,SACL,MAAM,IAAI,WAAW,EAAE,SAAS,kBAAkB,cAAc,YAAY,CAAC,CAC/E,CACF;AAAA,EACJ,CAAC;AAAA;;;AC7BH,mBAAS,mBAAQ,mBAAQ;AAIlB,MAAM,sBAAsB,QAAO,YAA2B,EAAE,iBAAiB;AAAA,EACtF,SAAS,QAAO;AAClB,CAAC,EAAE;AAAC;AAoDJ,IAAM,SAAS,QAAO,MAAM;AAAA,EAC1B,QAAO,OAAO;AAAA,IACZ,MAAM,QAAO,OAAO,EAAE,SAAS,QAAO,OAAO,CAAC;AAAA,IAC9C,MAAM,QAAO,QAAQ,UAAU;AAAA,EACjC,CAAC;AAAA,EACD,QAAO,OAAO,EAAE,SAAS,QAAO,QAAQ,MAAM,QAAO,OAAO,CAAC;AAC/D,CAAC;AAID,SAAS,SAAS,CAAC,QAA8C;AAAA,EAC/D,MAAM,UAAU,QAAO,MAAM,QAAQ;AAAA,IACnC,QAAQ,MAAM;AAAA,IACd,QAAQ,CAAC,YAAY;AAAA,MACnB,IAAI,UAAU;AAAA,QAAS,OAAO,QAAQ,KAAK;AAAA,MAE3C,OAAO,QAAQ,SAAS,oBACpB,0EACA,oCAAoC,QAAQ;AAAA;AAAA,EAEpD,CAAC;AAAA,EAED,OAAO,IAAI,cAAc,EAAE,QAAQ,CAAC;AAAA;AAGtC,IAAM,aAAa,IAAI,cAAc;AAAA,EACnC,SAAS;AACX,CAAC;AAED,SAAS,OAA0C,CACjD,QACA,MACyC;AAAA,EACzC,OAAO,QAAO,WAAW;AAAA,IACvB,OAAO,CAAC,UAAU,UAAU,QAAO,oBAAoB,MAAM,EAAE,KAAK,CAAC;AAAA,IACrE,KAAK;AAAA,EACP,CAAC,EAAE,KACD,QAAO,QAAQ,CAAC,WACd,QAAO,aAAa,MAAM,EAAE,MAAM,EAAE,KAAK,QAAO,SAAS,MAAM,UAAU,CAAC,CAC5E,CACF;AAAA;AAGK,SAAS,UAAU,CAAC,MAA8B;AAAA,EACvD,QAAQ,QAAQ;AAAA,EAEhB,MAAM,UAAU,CAAC,cACf,QAAO,MAAM,KAAK,WAAW,SAAS,GAAG;AAAA,IACvC,QAAQ,OAAO,CAAC;AAAA,IAChB,QAAQ,CAAC,cAAc,EAAE,SAAS;AAAA,EACpC,CAAC;AAAA,EAEH,OAAO;AAAA,IACL,QAAQ,CAAC,WAAW,WAClB,QAAQ,SAAS,YAAY;AAAA,MAC3B,MAAM,SAAS,MAAM,IAAI,OAAO,EAAE,WAAW,OAAO,GAAG,QAAQ,SAAS,CAAC;AAAA,MAEzE,OAAO;AAAA,KACR;AAAA,IACH,QAAQ,CAAC,WAAW,WAClB,QAAQ,SAAS,YAAY;AAAA,MAC3B,MAAM,SAAS,MAAM,IAAI,OAAO,EAAE,WAAW,OAAO,GAAG,QAAQ,SAAS,CAAC;AAAA,MAEzE,OAAO;AAAA,KACR;AAAA,IACH,MAAM,CAAC,cACL,QAAQ,MAAM,YAAY;AAAA,MACxB,MAAM,SAAS,MAAM,IAAI,KAAK,EAAE,UAAU,GAAG,QAAQ,SAAS,CAAC;AAAA,MAE/D,OAAO;AAAA,KACR;AAAA,IACH,UAAU,CAAC,YACT,IAAI,OAAO,GAAG,WAAW,GAAG,WAAW;AAAA,MACrC,QAAO,IAAI,QAAO,oBAAoB,IAAI,EAAE,IAAI,GAAG,OAAO;AAAA,KAC3D;AAAA,IACH,SAAS,CAAC,cACR,QAAQ,MAAM,YAAY;AAAA,MACxB,MAAM,SAAS,MAAM,IAAI,QAAQ,EAAE,UAAU,GAAG,QAAQ,SAAS,CAAC;AAAA,MAElE,OAAO;AAAA,KACR;AAAA,EACL;AAAA;;;AC3IF;AACA,mBAAS;AACT,IAAM,cAAc,aAAW,CAAC;AAAA,EAC9B,KAAK,QAAQ;AAAA,EACb,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,OAAO;AACT,GAAG;AAAA,EACD,KAAK,MAAM,QAAQ;AAAA,EACnB,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,OAAO;AACT,GAAG;AAAA,EACD,KAAK,MAAM,QAAQ;AAAA,EACnB,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,OAAO;AACT,GAAG;AAAA,EACD,KAAK,MAAM,QAAQ;AAAA,EACnB,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,OAAO;AACT,CAAC;AACD,SAAS,OAAO,CAAC,YAAY,KAAK;AAAA,EAChC,MAAM,QAAQ,WAAW,aAAa;AAAA,IACpC,WAAW;AAAA,IACX,MAAM,MAAM,WAAW;AAAA,EACzB,IAAI;AAAA,IACF,MAAM,MAAM,WAAW;AAAA,EACzB;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,IACP,IAAI,MAAM,WAAW;AAAA,IACrB,SAAS;AAAA,IACT,KAAK,WAAS;AAAA,MACZ,IAAI,WAAW,IAAI,QAAO,cAAc,KAAK,CAAC,CAAC;AAAA;AAAA,IAEjD;AAAA,IACA,OAAO,WAAW;AAAA,EACpB;AAAA;AAIK,SAAS,QAAQ,CAAC,OAAO;AAAA,EAC9B,MAAM,UAAU,UAAU;AAAA,EAC1B,MAAM,WAAW,YAAY,MAAM,OAAO,EAAE,IAAI,gBAAc,QAAQ,YAAY,MAAM,GAAG,CAAC;AAAA,EAC5F,QAAQ,OAAO,MAAM,OAAO;AAAA,IAC1B;AAAA,IACA,MAAM;AAAA,EACR,EAAE;AAAA,EACF,OAAO;AAAA;;;ACnDT,4BAAS;AAET,sBAAS;AACT,mBAAS;AACT,uCAAuB;;;ACHvB;AAeA,IAAM,SAAmD;AAAA,EACvD,MAAM,KAAK,QAAQ,SAAS;AAAA,EAC5B,OAAO,KAAK,QAAQ,SAAS;AAC/B;AAEO,SAAS,SAAS,CAAC,OAAsB,MAAiC;AAAA,EAC/E,OAAO;AAAA,IACL,OAAO,MAAM,KAAK;AAAA,IAClB,MAAM,MAAM,KAAK;AAAA,IACjB,OAAO;AAAA,MACL,MAAM,MAAM,KAAK;AAAA,MACjB,OAAO,MAAM,KAAK,SAAS,QAAQ;AAAA,MACnC,QAAQ,OAAO;AAAA,MACf,KAAK,MAAM,KAAK,SAAS,MAAM;AAAA,MAC/B,QAAQ,MAAM,KAAK,SAAS,QAAQ;AAAA,IACtC;AAAA,EACF;AAAA;;;AChCF,2BAAS;AACT,uBAAS;AACT,4BAAS;AACT,mBAAS;AACT,mBAAS;AACT,iBAAS;AACT,oBAAS;AACT,0BAAS;AAGT,kBAAS,kBAAO;AAChB,gBAAS,cAAK;;;ACXd,2BAAS;AACT,gBAAS;AACT,4BAAS;AACT,oBAAS;AACT,mBAAS;AACT,uBAAS;AACT,mBAAS;AACT,0BAAS;AAGT,kBAAS,kBAAO;AAChB;;;ACXA,kBAAS;AAeT,IAAM,mBAA+C;AAAA,EACnD,wBAAwB;AAAA,EACxB,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,UAAU;AACZ;AAEA,IAAM,QAAQ,CAAC,MAAY,OAAe,gBAAgB,WAAuB;AAAA,EAC/E;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AACF;AAGA,SAAS,cAAc,CAAC,MAAwB;AAAA,EAC9C,IAAI,KAAK,iBAAiB;AAAA,IAAe,OAAO,MAAM,OAAO,UAAU;AAAA,EAEvE,IAAI,KAAK,OAAO;AAAA,IAAU,OAAO,MAAM,OAAO,QAAQ;AAAA,EAEtD,IAAI,KAAK;AAAA,IAAO,OAAO,MAAM,QAAQ,OAAO;AAAA,EAE5C,IAAI,KAAK,OAAO;AAAA,IAAW,OAAO,MAAM,UAAU,SAAS;AAAA,EAE3D,IAAI,KAAK;AAAA,IAAQ,OAAO,MAAM,UAAU,QAAQ;AAAA,EAEhD,OAAO,KAAK,OAAO,WAAW,MAAM,SAAS,QAAQ,IAAI,MAAM,QAAQ,WAAW;AAAA;AAGpF,SAAS,eAAe,CAAC,OAAqC;AAAA,EAC5D,OAAO,OAAM,UAAU,OAAO;AAAA,IAC5B,QAAQ,MAAM,MAAM,OAAO,UAAU,IAAI;AAAA,IACzC,QAAQ,MAAM,MAAM,UAAU,UAAU,IAAI;AAAA,IAC5C,MAAM;AAAA,EACR,CAAC;AAAA;AAGH,SAAS,SAAS,CAAC,OAA+B;AAAA,EAChD,OAAO,EAAE,OAAO,MAAM,OAAO,OAAO,MAAM,eAAe,MAAM,eAAe,MAAM,MAAM,KAAK;AAAA;AAG1F,SAAS,UAAU,CAAC,QAA4B;AAAA,EACrD,OAAO,OAAM,UAAU,QAAQ;AAAA,IAC7B,OAAO,GAAG,eAAe,gBAAgB,SAAS,KAAK;AAAA,IACvD,SAAS,MAAM,MAAM,QAAQ,aAAa;AAAA,IAC1C,OAAO,GAAG,eAAe,UAAU,gBAAgB,SAAS,KAAK,CAAC;AAAA,IAClE,aAAa,GAAG,iBAAiB,MAAM,QAAQ,iBAAiB,WAAW;AAAA,EAC7E,CAAC;AAAA;;;AD/CH,IAAM,UAAU;AAAA,EACd,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACF;AAGA,IAAM,gBAAgB;AAAA,EACpB,WAAW;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACF;AACA,IAAM,cAAc;AAIpB,SAAS,WAAW,CAAC,OAAO;AAAA,EAC1B,MAAM,UAAU,MAAM,IAAI,OAAO,cAAc,MAAM,MAAM,KAAK,SAAS,MAAM,MAAM,KAAK,MAAM;AAAA,EAChG,QAAQ,MAAM;AAAA,IACZ,IAAI,OAAO,gBAAgB,MAAM,GAC/B,QAAQ,gBAAgB,MAAM,GAC9B,QAAQ,gBAAgB,MAAM;AAAA,IAChC,aAAa,MAAM,KAAK;AAAA,IACxB,aAAa,MAAM,KAAK;AAAA,IACxB,SAAS,OAAO,MAAM,MAAM,MAAM,IAAI;AAAA,IACtC,SAAS,OAAO,MAAM,MAAM,MAAM,IAAI;AAAA,IACtC,SAAS,MAAM,SAAS,IAAI;AAAA,IAC5B,SAAS,SAAO;AAAA,MACd,IAAI,MAAM;AAAA,QACN,IAAI,MAAM,QAAQ;AAAA,MACpB,GACA,OAAO;AAAA,QACL,IAAI,MAAM;AAAA,MACZ;AAAA,MACF,QAAQ,IAAI,MAAM,IAAI,IAAI,UAAU,OAAO,SAAS,KAAK,IAAI,CAAC;AAAA,MAC9D,SAAS,IAAI,MAAM,IAAI,IAAI,UAAU,OAAO,SAAS,MAAM,IAAI,CAAC;AAAA,MAChE,OAAO;AAAA,OACN;AAAA,MACD,GAAG;AAAA,MACH,GAAG;AAAA,IACL,CAAC;AAAA,IACD,OAAO;AAAA,KACN;AAAA;AAIL,SAAS,MAAM,CAAC,OAAO;AAAA,EACrB,OAAO,OAAO,YAAY,aAAa,CAAC;AAAA,EACxC,IAAI,UAAU,QAAO,KAAK;AAAA,EAC1B,MAAM,UAAU,MAAM;AAAA,IACpB,MAAM,QAAQ,QAAO,MAAM,SAAS;AAAA,MAClC,QAAQ,MAAM;AAAA,MACd,QAAQ,UAAQ,KAAK;AAAA,IACvB,CAAC;AAAA,IACD,SAAS,KAAK,IAAI,GAAG,KAAK,CAAC;AAAA;AAAA,EAE7B,QAAQ,MAAM;AAAA,IACZ,IAAI,QAAQ,gBAAgB,KAAK,GAC/B,QAAQ,gBAAgB,KAAK,GAC7B,QAAQ,gBAAgB,MAAM;AAAA,IAChC,aAAa,OAAO,KAAK;AAAA,IACzB,aAAa,OAAO,KAAK;AAAA,IACzB,UAAU,OAAO,iBAAiB,KAAK;AAAA,IACvC,UAAU,OAAO,SAAS,MAAM;AAAA,IAChC,UAAU,OAAO,iBAAiB,QAAQ;AAAA,IAC1C,UAAU,OAAO,SAAS,CAAC;AAAA,IAC3B,SAAS,OAAO,kBAAkB,aAAa;AAAA,UACzC,KAAK,GAAG;AAAA,QACV,OAAO,MAAM;AAAA;AAAA,UAEX,KAAK,GAAG;AAAA,QACV,OAAO,MAAM;AAAA;AAAA,UAEX,OAAO,GAAG;AAAA,QACZ,OAAO,MAAM;AAAA;AAAA,IAEjB,CAAC,GAAG,IAAI;AAAA,IACR,SAAS,OAAO,kBAAkB,KAAK;AAAA,UACjC,IAAI,GAAG;AAAA,QACT,OAAO,MAAM,KAAK;AAAA,UAChB,QAAQ,MAAM,IAAI;AAAA,QACpB,CAAC;AAAA;AAAA,MAEH,UAAU,MAAM,kBAAkB,aAAa;AAAA,YACzC,KAAK,GAAG;AAAA,UACV,OAAO,MAAM;AAAA;AAAA,YAEX,KAAK,GAAG;AAAA,UACV,OAAO,MAAM;AAAA;AAAA,YAEX,OAAO,GAAG;AAAA,UACZ,OAAO,MAAM;AAAA;AAAA,MAEjB,CAAC;AAAA,IACH,CAAC,GAAG,IAAI;AAAA,IACR,MAAM,UAAQ;AAAA,MACZ,UAAU,QAAO,KAAK,IAAI;AAAA,MAC1B,QAAQ;AAAA,OACP,KAAK;AAAA,IACR,UAAU,OAAO,YAAY,CAAC;AAAA,IAC9B,UAAU,OAAO,uBAAuB,OAAO;AAAA,IAC/C,SAAS,OAAO,MAAM,MAAM,QAAQ;AAAA,IACpC,OAAO;AAAA,KACN;AAAA;AAEL,IAAM,UAAU,YAAU,OAAM,UAAU,QAAQ;AAAA,EAChD,OAAO;AAAA,IACL;AAAA,QACI,SAAS;AAAA,EACf,SAAS,MAAM;AAAA,EACf,OAAO;AAAA,IACL;AAAA,QACI,SAAS;AAAA,EACf,aAAa,MAAM;AACrB,CAAC;AACM,SAAS,cAAc,CAAC,OAAO;AAAA,EACpC,MAAM,QAAQ,MAAM,WAAW,MAAM,MAAM,MAAM;AAAA,EACjD,MAAM,QAAQ,MAAM,MAAM,QAAQ,MAAM,MAAM,EAAE;AAAA,EAChD,MAAM,QAAQ,MAAM,cAAc,MAAM;AAAA,EACxC,QAAQ,MAAM;AAAA,IACZ,IAAI,QAAQ,gBAAgB,KAAK;AAAA,IACjC,UAAU,OAAO,iBAAiB,QAAQ;AAAA,IAC1C,UAAU,OAAO,aAAa,MAAM;AAAA,MAClC,MAAM,OAAO,MAAM,MAAM,GAAG;AAAA,KAC7B;AAAA,IACD,SAAS,OAAO,kBAAkB,QAAQ;AAAA,UACpC,KAAK,GAAG;AAAA,QACV,OAAO,MAAM;AAAA;AAAA,UAEX,KAAK,GAAG;AAAA,QACV,OAAO,QAAQ,MAAM;AAAA;AAAA,UAEnB,OAAO,GAAG;AAAA,QACZ,OAAO,MAAM;AAAA;AAAA,UAEX,IAAI,GAAG;AAAA,QACT,OAAO,MAAM;AAAA;AAAA,UAEX,QAAQ,GAAG;AAAA,QACb,OAAO,EAAE,MAAM;AAAA,UACb,IAAI,QAAQ,gBAAgB,MAAM;AAAA,UAClC,SAAS,OAAO,MAAM,MAAM,MAAM,IAAI,KAAK;AAAA,UAC3C,SAAS,SAAO,UAAU,OAAO,SAAS;AAAA,YACxC,MAAM;AAAA,YACN,IAAI,MAAM;AAAA,YACV,eAAe,MAAM,EAAE;AAAA,UACzB,GAAG,GAAG,CAAC;AAAA,UACP,OAAO;AAAA,WACN,IAAI,MAAM;AAAA,UACX,IAAI,QAAQ,gBAAgB,MAAM;AAAA,UAClC,SAAS,OAAO,MAAM,IAAI,MAAM,EAAE,OAAO;AAAA,UACzC,SAAS,SAAO,UAAU,OAAO,SAAS;AAAA,YACxC,IAAI,MAAM;AAAA,UACZ,GAAG,GAAG,CAAC;AAAA,UACP,OAAO;AAAA,WACN,GAAG,kBAAkB,MAAM;AAAA,cACxB,IAAI,GAAG;AAAA,YACT,OAAO,MAAM,EAAE;AAAA;AAAA,cAEb,QAAQ,GAAG;AAAA,YACb,IAAI,QAAQ,gBAAgB,MAAM;AAAA,YAClC,aAAa,OAAO,iBAAiB,aAAU,CAAC;AAAA,YAChD,SAAS,SAAO,UAAU,OAAO,SAAS;AAAA,cACxC,IAAI,MAAM,QAAQ;AAAA,cAClB,QAAQ;AAAA,YACV,GAAG,GAAG,CAAC;AAAA,YACP,OAAO;AAAA;AAAA,QAEX,CAAC,CAAC;AAAA;AAAA,IAEN,CAAC,GAAG,IAAI;AAAA,IACR,SAAS,OAAO,kBAAkB,MAAM;AAAA,UAClC,IAAI,GAAG;AAAA,QACT,OAAO,CAAC,MAAM;AAAA;AAAA,UAEZ,QAAQ,GAAG;AAAA,QACb,OAAO,kBAAkB,QAAQ;AAAA,cAC3B,KAAK,GAAG;AAAA,YACV,OAAO,MAAM;AAAA;AAAA,cAEX,KAAK,GAAG;AAAA,YACV,OAAO,MAAM;AAAA;AAAA,cAEX,OAAO,GAAG;AAAA,YACZ,OAAO,MAAM;AAAA;AAAA,cAEX,IAAI,GAAG;AAAA,YACT,OAAO,MAAM;AAAA;AAAA,cAEX,QAAQ,GAAG;AAAA,YACb,IAAI,SAAS,gBAAgB,MAAM;AAAA,YACnC,SAAS,QAAQ,MAAM,QAAQ,MAAM,MAAM,MAAM,CAAC;AAAA,YAClD,SAAS,SAAO,UAAU,QAAQ,SAAS;AAAA,cACzC,IAAI,MAAM,QAAQ;AAAA,cAClB,eAAe,MAAM,EAAE;AAAA,YACzB,GAAG,GAAG,CAAC;AAAA,YACP,OAAO;AAAA;AAAA,QAEX,CAAC;AAAA;AAAA,IAEL,CAAC,GAAG,IAAI;AAAA,IACR,OAAO;AAAA,KACN;AAAA;AAEE,SAAS,MAAM,CAAC,OAAO;AAAA,EAC5B,MAAM,QAAQ,MAAM,GAAG,OAAO,MAAM,KAAK,KAAK,MAAM,UAAU,IAAI,OAAO;AAAA,EACzE,QAAQ,MAAM;AAAA,IACZ,IAAI,SAAS,gBAAgB,MAAM;AAAA,IACnC,SAAS,QAAQ,MAAM,gBAAM,MAAM,GAAG;AAAA,IACtC,SAAS,SAAO,UAAU,QAAQ,MAAM,MAAM,QAAQ,OAAO,GAAG,CAAC;AAAA,IACjE,OAAO;AAAA,KACN;AAAA;AAEE,SAAS,UAAU,CAAC,OAAO;AAAA,EAChC,OAAO,OAAM,UAAU,MAAM,KAAK;AAAA,IAChC,KAAK;AAAA,MACH;AAAA,UACI,kBAAkB,QAAQ;AAAA,MAC9B;AAAA,UACI,OAAO,GAAG;AAAA,QACZ,OAAO,MAAM;AAAA;AAAA,IAEjB,CAAC;AAAA,IACD,aAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,UACI,kBAAkB,gBAAgB;AAAA,UAClC,OAAO,GAAG;AAAA,QACZ,OAAO,MAAM;AAAA;AAAA,MAEf;AAAA,MACA;AAAA,MACA;AAAA,UACI,MAAM,GAAG;AAAA,QACX,OAAO,MAAM;AAAA;AAAA,UAEX,OAAO,GAAG;AAAA,QACZ,OAAO,MAAM;AAAA;AAAA,IAEjB,CAAC;AAAA,EACH,CAAC;AAAA;;;ADrQH,IAAM,mBAAmB;AACzB,IAAM,YAAY,UAAQ,KAAK,QAAQ,IAAI,YAAU;AAAA,EACnD,YAAY,QAAO,cAAc,MAAM,UAAU;AAAA,EACjD,KAAK,MAAM;AAAA,EACX,QAAQ,MAAM;AAChB,EAAE;AACF,SAAS,OAAO,CAAC,OAAO;AAAA,EACtB,QAAQ,MAAM;AAAA,IACZ,IAAI,OAAO,iBAAgB,KAAK,GAC9B,QAAQ,iBAAgB,MAAM,GAC9B,QAAQ,iBAAgB,GAAG;AAAA,IAC7B,cAAa,MAAM,KAAK;AAAA,IACxB,WAAU,MAAM,iBAAiB,KAAK;AAAA,IACtC,WAAU,MAAM,OAAO,CAAC;AAAA,IACxB,WAAU,MAAM,eAAe,MAAM;AAAA,MACnC,IAAI,MAAM;AAAA,QAAa,MAAM,SAAS;AAAA,KACvC;AAAA,IACD,UAAS,MAAM,mBAAkB,OAAM;AAAA,UACjC,IAAI,GAAG;AAAA,QACT,OAAO,MAAM;AAAA;AAAA,UAEX,QAAQ,GAAG;AAAA,QACb,IAAI,QAAQ,iBAAgB,MAAM;AAAA,QAClC,UAAS,OAAO,MAAM,MAAM,YAAY,WAAM,QAAG;AAAA,QACjD,UAAS,SAAO,WAAU,OAAO,MAAM,MAAM,QAAQ,MAAM,GAAG,CAAC;AAAA,QAC/D,OAAO;AAAA;AAAA,IAEX,CAAC,GAAG,KAAK;AAAA,IACT,cAAa,OAAO,KAAK;AAAA,IACzB,cAAa,OAAO,kBAAiB,eAAe,CAAC;AAAA,IACrD,UAAS,SAAO,WAAU,OAAO,MAAM,MAAM,QAAQ,MAAM,GAAG,CAAC;AAAA,IAC/D,OAAO;AAAA,KACN;AAAA;AAEL,SAAS,IAAI,CAAC,OAAO;AAAA,EACnB,OAAO,mBAAkB,OAAM;AAAA,QACzB,QAAQ,GAAG;AAAA,MACb,QAAQ,MAAM;AAAA,QACZ,IAAI,QAAQ,iBAAgB,MAAM;AAAA,QAClC,cAAa,OAAO,kBAAiB,2BAA2B,CAAC;AAAA,QACjE,UAAS,SAAO,WAAU,OAAO,MAAM,MAAM,QAAQ,OAAO,GAAG,CAAC;AAAA,QAChE,OAAO;AAAA,SACN;AAAA;AAAA,QAED,IAAI,GAAG;AAAA,MACT,OAAO,MAAM,KAAK,QAAQ,SAAS;AAAA;AAAA,QAEjC,QAAQ,GAAG;AAAA,MACb,IAAI,QAAQ,iBAAgB,KAAK;AAAA,MACjC,WAAU,OAAO,iBAAiB,QAAQ;AAAA,MAC1C,UAAS,OAAO,mBAAkB,MAAK;AAAA,YACjC,IAAI,GAAG;AAAA,UACT,OAAO,OAAO,UAAU,MAAM,IAAI,CAAC;AAAA;AAAA,QAErC,UAAU,SAAO,mBAAkB,YAAY;AAAA,cACzC,OAAO,GAAG;AAAA,YACZ,OAAO,MAAM,KAAK,WAAW;AAAA;AAAA,cAE3B,MAAM,GAAG;AAAA,YACX,OAAO,MAAM;AAAA;AAAA,cAEX,OAAO,GAAG;AAAA,YACZ,OAAO,MAAM;AAAA;AAAA,UAEf;AAAA,QACF,CAAC;AAAA,MACH,CAAC,CAAC;AAAA,MACF,OAAO;AAAA;AAAA,EAEX,CAAC;AAAA;AAEI,SAAS,OAAO,CAAC,OAAO;AAAA,EAC7B,MAAM,cAAc,MAAM,MAAM,MAAM,SAAS,WAAW,MAAM,MAAM,KAAK,QAAQ,SAAS;AAAA,EAC5F,MAAM,OAAO,MAAM,OAAM,UAAU,MAAM,OAAO;AAAA,IAC9C,QAAQ;AAAA,MACN;AAAA,WACK,MAAM;AAAA,MACX,IAAI,QAAQ,iBAAgB,MAAM;AAAA,MAClC,UAAS,OAAO,OAAO;AAAA,MACvB,UAAS,SAAO,WAAU,OAAO,MAAM,MAAM,QAAQ,MAAM,KAAK,GAAG,CAAC;AAAA,MACpE,OAAO;AAAA,OACN;AAAA,IACH,SAAS,OAAO,MAAM;AAAA,MACpB,IAAI,QAAQ,iBAAgB,MAAM;AAAA,MAClC,cAAa,OAAO,kBAAiB,SAAS,CAAC;AAAA,MAC/C,UAAS,SAAO,WAAU,OAAO,MAAM,MAAM,QAAQ,OAAO,GAAG,CAAC;AAAA,MAChE,OAAO;AAAA,OACN;AAAA,IACH,OAAO;AAAA,MACL;AAAA,UACI,mBAAkB,MAAM;AAAA,UACxB,MAAM,GAAG;AAAA,QACX,OAAO,MAAM;AAAA;AAAA,UAEX,OAAO,GAAG;AAAA,QACZ,OAAO,MAAM;AAAA;AAAA,MAEf;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAAA,EACD,QAAQ,MAAM;AAAA,IACZ,IAAI,SAAS,iBAAgB,KAAK;AAAA,IAClC,WAAU,QAAQ,iBAAiB,QAAQ;AAAA,IAC3C,WAAU,QAAQ,OAAO,CAAC;AAAA,IAC1B,UAAS,QAAQ,mBAAkB,SAAS;AAAA,UACtC,SAAS,GAAG;AAAA,QACd,OAAO,MAAM;AAAA;AAAA,UAEX,WAAW,GAAG;AAAA,QAChB,OAAO,YAAY;AAAA;AAAA,UAEjB,QAAQ,GAAG;AAAA,QACb,OAAO,MAAM;AAAA;AAAA,UAEX,OAAO,GAAG;AAAA,QACZ,OAAO,MAAM;AAAA;AAAA,IAEjB,CAAC,GAAG,IAAI;AAAA,IACR,UAAS,QAAQ,mBAAkB,OAAM;AAAA,UACnC,IAAI,GAAG;AAAA,QACT,OAAO,CAAC,YAAY,KAAK,CAAC,MAAM;AAAA;AAAA,UAE9B,QAAQ,GAAG;AAAA,QACb,OAAO,KAAK;AAAA;AAAA,IAEhB,CAAC,GAAG,IAAI;AAAA,IACR,OAAO;AAAA,KACN;AAAA;;;AFrIL,SAAS,WAAW,GAAG;AAAA,EACrB,IAAI,SAAS;AAAA,EACb,OAAO;AAAA,IACL,UAAU,aAAW,YAAY;AAAA,IACjC,MAAM,MAAM;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA;AAAA,EAEX;AAAA;AAOK,SAAS,WAAW,CAAC,WAAW,SAAS,KAAK;AAAA,EACnD,OAAO,OAAO,YAAY,cAAa;AAAA,IACrC,MAAM;AAAA,EACR,CAAC;AAAA,EACD,MAAM,WAAW,YAAY;AAAA,EAC7B,UAAU,QAAQ,SAAS,UAAQ;AAAA,IACjC,IAAI,KAAK,cAAc,UAAU;AAAA,MAAG;AAAA,IACpC,SAAS,KAAK;AAAA,IACd,SAAS;AAAA,MACP,MAAM;AAAA,MACN;AAAA,IACF,CAAC;AAAA,GACF,CAAC;AAAA,EACF,aAAa,GAAG,WAAW,aAAW;AAAA,IACpC,MAAM,UAAU,SAAS,KAAK;AAAA,IAC9B,SAAS;AAAA,MACP,MAAM;AAAA,IACR,CAAC;AAAA,IACD,IAAI,QAAO,IAAI,QAAO,OAAO,QAAQ,KAAK,OAAO,CAAC,GAAG,YAAU;AAAA,MAC7D,IAAI,CAAC,SAAS,SAAS,OAAO;AAAA,QAAG;AAAA,MACjC,SAAS,OAAO,SAAS,YAAY;AAAA,QACnC,MAAM;AAAA,QACN,SAAS,OAAO,QAAQ;AAAA,MAC1B,IAAI;AAAA,QACF,MAAM;AAAA,QACN,MAAM,OAAO;AAAA,MACf,CAAC;AAAA,KACF,CAAC;AAAA,GACH,CAAC;AAAA,EACF,OAAO;AAAA;AAEF,SAAS,cAAc,CAAC,OAAO;AAAA,EACpC,MAAM,UAAU,WAAU;AAAA,EAC1B,MAAM,QAAQ,YAAY,MAAM,MAAM,WAAW,MAAM,SAAS,MAAM,GAAG;AAAA,EACzE,OAAO,mBAAkB,SAAS;AAAA,QAC5B,SAAS,GAAG;AAAA,MACd,OAAO,MAAM,UAAU,IAAI,MAAM,SAAS;AAAA;AAAA,QAExC,MAAM,GAAG;AAAA,MACX,OAAO,MAAM;AAAA;AAAA,IAEf,UAAU,MAAM;AAAA,MACd,MAAM,UAAU,OAAO,MAAM,SAAS;AAAA;AAAA,QAEpC,OAAO,GAAG;AAAA,MACZ,OAAO,UAAU,QAAQ,OAAO,QAAQ,SAAS;AAAA;AAAA,QAE/C,KAAK,GAAG;AAAA,MACV,OAAO,MAAM;AAAA;AAAA,EAEjB,CAAC;AAAA;;;AK5EH,mBAAS,mBAAQ;AAWjB,SAAS,cAAc,CAAC,IAA+B;AAAA,EACrD,MAAM,QAAQ,GAAG,OAAO,QAAQ;AAAA,EAEhC,OAAO,MAAM,SAAS,YAAY,QAAO,KAAK,MAAM,SAAS,IAAI,QAAO,KAAK;AAAA;AAGxE,SAAS,YAAY,CAAC,IAAsB;AAAA,EACjD,IAAI,OAAO;AAAA,EAGX,MAAM,SAAS,CAAI,SACjB,QAAO,kBACL,QAAO,KAAK,MAAM;AAAA,IAChB,OAAO;AAAA,GACR,GACD,MAAM,QAAO,QAAQ,IAAI,EAAE,KAAK,QAAO,IAAI,QAAO,aAAa,CAAC,GAChE,MACE,QAAO,KAAK,MAAM;AAAA,IAChB,OAAO;AAAA,GACR,CACL;AAAA,EAEF,OAAO;AAAA,IACL,SAAS,MAAM;AAAA,MACb,IAAI;AAAA,QAAM,GAAG,OAAO,MAAM;AAAA;AAAA,IAE5B,UAAU;AAAA,MACR,QAAQ,CAAC,OAAO,YACd,OAAO,YAAY;AAAA,QACjB,MAAM,SAAS,MAAM,GAAG,OAAO,OAAO,EAAE,SAAS,SAAS,MAAM,CAAC;AAAA,QAEjE,OAAO;AAAA,OACR;AAAA,MACH,QAAQ,CAAC,SAAS,YAAY;AAAA,QAC5B,GAAG,MAAM,KAAK,EAAE,SAAS,OAAO,iBAAiB,QAAQ,CAAC;AAAA;AAAA,MAE5D,QAAQ,CAAC,OAAO,gBACd,OAAO,YAAY;AAAA,QACjB,MAAM,SAAS,MAAM,GAAG,OAAO,OAAO,EAAE,aAAa,MAAM,CAAC;AAAA,QAE5D,OAAO;AAAA,OACR;AAAA,MACH,SAAS,MAAM,eAAe,EAAE;AAAA,IAClC;AAAA,EACF;AAAA;;;AhB1CF,IAAM,OAAO,SAAO,QAAQ,KAAK,QAAQ,QAAQ,EAAE,KAAK,QAAO,QAAQ,KAAY,CAAC;AACpF,IAAM,oBAAoB,aAAW,SAAO,cAAc,QAAQ,QAAQ;AAC1E,SAAS,iBAAiB,GAAG;AAAA,EAC3B,OAAO,WAAW,gBAAgB,cAAa,IAAI,GAAK;AAAA,EACxD,OAAO;AAAA,IACL,KAAK,eAAa,UAAU,EAAE,IAAI,SAAS;AAAA,IAC3C,QAAQ,eAAa;AAAA,MACnB,MAAM,OAAO,IAAI,IAAI,UAAU,CAAC;AAAA,MAChC,IAAI,CAAC,KAAK,OAAO,SAAS;AAAA,QAAG,KAAK,IAAI,SAAS;AAAA,MAC/C,aAAa,IAAI;AAAA;AAAA,EAErB;AAAA;AAIF,SAAS,UAAU,CAAC,SAAS;AAAA,EAC3B,OAAO,WAAW;AAAA,IAChB,YAAY,eAAa,SAAO,cAAc,QAAQ,KAAK,QAAQ,IAAI,SAAS,CAAC,EAAE,KAAK,SAAO,QAAQ,iBAAiB,GAAG,SAAO,OAAO,MAAM,SAAO,cAAc,QAAQ,QAAQ,CAAC,CAAC;AAAA,IACtL,KAAK,QAAQ,OAAO,IAAI,kBAAkB;AAAA,EAC5C,CAAC;AAAA;AAEH,IAAe,qBAAO,OAAO;AAAA,EAC3B,IAAI;AAAA,EACJ,KAAK,CAAC,SAAS;AAAA,IACb,MAAM,UAAU,WAAW,OAAO;AAAA,IAClC;AAAA,MACE;AAAA,MACA;AAAA,QACE,aAAa,QAAQ,EAAE;AAAA,IAC3B,MAAM,WAAW,QAAQ;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,MAAM,YAAY,kBAAkB;AAAA,IACpC,MAAM,QAAQ,WAAW;AAAA,IACzB,MAAM,YAAY,CAAC,QAAQ,GAAG,KAAK;AAAA,MACjC,QAAQ;AAAA,MACR,QAAQ,MAAM,mBAAkB,UAAU;AAAA,QACxC,SAAS;AAAA,YACL,GAAG,GAAG;AAAA,UACR,OAAO,MAAM;AAAA;AAAA,MAEjB,CAAC;AAAA,IACH,CAAC,GAAG,QAAQ,GAAG,KAAK;AAAA,MAClB,QAAQ;AAAA,MACR,QAAQ;AAAA,QACN;AAAA,YACI,mBAAkB,gBAAgB;AAAA,QACtC;AAAA,QACA,QAAQ,SAAO;AAAA,UACb,MAAM,IAAI,SAAS,gBAAgB,GAAG,CAAC;AAAA;AAAA,YAErC,GAAG,GAAG;AAAA,UACR,OAAO,MAAM;AAAA;AAAA,QAEf;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,CAAC,CAAC;AAAA,IACF,OAAO,YAAY;AAAA,MACjB,WAAW,WAAW;AAAA,QAAW,QAAQ;AAAA,MACzC,QAAQ;AAAA,MACR,MAAM,MAAM,KAAK;AAAA;AAAA;AAGvB,CAAC;",
|
|
24
|
+
"debugId": "6F713F5E90CA6B2064756E2164756E21",
|
|
33
25
|
"names": []
|
|
34
26
|
}
|