diff --git a/ACECore/build/release/ACECore.zip b/ACECore/build/release/ACECore.zip index 3843bcd..3404b66 100644 Binary files a/ACECore/build/release/ACECore.zip and b/ACECore/build/release/ACECore.zip differ diff --git a/About/build/release/About.zip b/About/build/release/About.zip index 5fe8c91..3e18c49 100644 Binary files a/About/build/release/About.zip and b/About/build/release/About.zip differ diff --git a/AceDiff/build/release/AceDiff.zip b/AceDiff/build/release/AceDiff.zip index b254d48..960fff3 100644 Binary files a/AceDiff/build/release/AceDiff.zip and b/AceDiff/build/release/AceDiff.zip differ diff --git a/ActivityMonitor/build/release/ActivityMonitor.zip b/ActivityMonitor/build/release/ActivityMonitor.zip index 5eaf880..78b0510 100644 Binary files a/ActivityMonitor/build/release/ActivityMonitor.zip and b/ActivityMonitor/build/release/ActivityMonitor.zip differ diff --git a/Antedit/build/release/Antedit.zip b/Antedit/build/release/Antedit.zip index 7066f4f..f13f8bc 100644 Binary files a/Antedit/build/release/Antedit.zip and b/Antedit/build/release/Antedit.zip differ diff --git a/Antunnel/build/release/Antunnel.zip b/Antunnel/build/release/Antunnel.zip index 591b6e6..f8bd053 100644 Binary files a/Antunnel/build/release/Antunnel.zip and b/Antunnel/build/release/Antunnel.zip differ diff --git a/AntunnelPlugins/build/release/AntunnelPlugins.zip b/AntunnelPlugins/build/release/AntunnelPlugins.zip index fd71d63..a7e2e29 100644 Binary files a/AntunnelPlugins/build/release/AntunnelPlugins.zip and b/AntunnelPlugins/build/release/AntunnelPlugins.zip differ diff --git a/Archive/build/release/Archive.zip b/Archive/build/release/Archive.zip index 480a4ac..0f0d439 100644 Binary files a/Archive/build/release/Archive.zip and b/Archive/build/release/Archive.zip differ diff --git a/Blogger/README.md b/Blogger/README.md index f956a63..a0f637b 100644 --- a/Blogger/README.md +++ b/Blogger/README.md @@ -6,6 +6,7 @@ Blackend for my blog at https://blog.iohub.dev ## Change logs ### v0.2.x-a +* Patch 12: support send mail via SSL * Patch 11: Add TFIDF analyse functionality * Patch 10: Migrate code to typescript, use SQLiteDB lib for database access * Patch 9: Update to use the new MDE library diff --git a/Blogger/api/sendmail.lua b/Blogger/api/sendmail.lua index 8d98a3a..6158150 100644 --- a/Blogger/api/sendmail.lua +++ b/Blogger/api/sendmail.lua @@ -1,37 +1,65 @@ local data = ... --- load the smtp support -local smtp = require("socket.smtp") -local from = string.format("<%s@iohub.dev>", data.user); -local mesgt = { - headers = { - from = string.format("Dany <%s@iohub.dev>", data.user), - to = "", - subject = data.title - }, - body = data.content -} +-- Michal Kottman, 2011, public domain +local socket = require 'socket' +local smtp = require 'socket.smtp' +local ssl = require 'ssl' +local https = require 'ssl.https' +local ltn12 = require 'ltn12' + +function sslCreate() + local sock = socket.tcp() + return setmetatable({ + connect = function(_, host, port) + local r, e = sock:connect(host, port) + if not r then return r, e end + sock = ssl.wrap(sock, {mode='client', protocol='tlsv1_2'}) + return sock:dohandshake() + end + }, { + __index = function(t,n) + return function(_, ...) + return sock[n](sock, ...) + end + end + }) +end + +function sendMail(user, password, to,subject, body) + local msg = { + headers = { + from = string.format("%s <%s@iohub.dev>", user, user), + to = string.format("%s <%s>",to.text, to.email), + subject = subject + }, + body = body + } + + local ok, err = smtp.send { + from = string.format('<%s@iohub.dev>', user), + rcpt = string.format('<%s>', to.email), + source = smtp.message(msg), + user = string.format('%s@iohub.dev', user), + password = password, + server = 'iohub.dev', + port = 465, + create = sslCreate + } + if not ok then + return false, error + else + return true + end +end local error_msg = {} local iserror = false for k,v in pairs(data.to) do LOG_DEBUG("Send email to:"..v.email) - local rcpt = string.format("<%s>",v.email) - mesgt.headers.to = string.format("%s <%s>",v.text, v.email) - local r, e = smtp.send{ - from = from, - rcpt = rcpt, - server = "iohub.dev", - domain = "iohub.dev", - user = data.user, - password = data.password, - source = smtp.message(mesgt) - } - - local r = os.execute(cmd) + local r,e = sendMail(data.user, data.password, v, data.title, data.content) if not r then iserror = true table.insert(error_msg, v.email) diff --git a/Blogger/build/debug/README.md b/Blogger/build/debug/README.md index f956a63..a0f637b 100644 --- a/Blogger/build/debug/README.md +++ b/Blogger/build/debug/README.md @@ -6,6 +6,7 @@ Blackend for my blog at https://blog.iohub.dev ## Change logs ### v0.2.x-a +* Patch 12: support send mail via SSL * Patch 11: Add TFIDF analyse functionality * Patch 10: Migrate code to typescript, use SQLiteDB lib for database access * Patch 9: Update to use the new MDE library diff --git a/Blogger/build/debug/api/sendmail.lua b/Blogger/build/debug/api/sendmail.lua index 8d98a3a..6158150 100644 --- a/Blogger/build/debug/api/sendmail.lua +++ b/Blogger/build/debug/api/sendmail.lua @@ -1,37 +1,65 @@ local data = ... --- load the smtp support -local smtp = require("socket.smtp") -local from = string.format("<%s@iohub.dev>", data.user); -local mesgt = { - headers = { - from = string.format("Dany <%s@iohub.dev>", data.user), - to = "", - subject = data.title - }, - body = data.content -} +-- Michal Kottman, 2011, public domain +local socket = require 'socket' +local smtp = require 'socket.smtp' +local ssl = require 'ssl' +local https = require 'ssl.https' +local ltn12 = require 'ltn12' + +function sslCreate() + local sock = socket.tcp() + return setmetatable({ + connect = function(_, host, port) + local r, e = sock:connect(host, port) + if not r then return r, e end + sock = ssl.wrap(sock, {mode='client', protocol='tlsv1_2'}) + return sock:dohandshake() + end + }, { + __index = function(t,n) + return function(_, ...) + return sock[n](sock, ...) + end + end + }) +end + +function sendMail(user, password, to,subject, body) + local msg = { + headers = { + from = string.format("%s <%s@iohub.dev>", user, user), + to = string.format("%s <%s>",to.text, to.email), + subject = subject + }, + body = body + } + + local ok, err = smtp.send { + from = string.format('<%s@iohub.dev>', user), + rcpt = string.format('<%s>', to.email), + source = smtp.message(msg), + user = string.format('%s@iohub.dev', user), + password = password, + server = 'iohub.dev', + port = 465, + create = sslCreate + } + if not ok then + return false, error + else + return true + end +end local error_msg = {} local iserror = false for k,v in pairs(data.to) do LOG_DEBUG("Send email to:"..v.email) - local rcpt = string.format("<%s>",v.email) - mesgt.headers.to = string.format("%s <%s>",v.text, v.email) - local r, e = smtp.send{ - from = from, - rcpt = rcpt, - server = "iohub.dev", - domain = "iohub.dev", - user = data.user, - password = data.password, - source = smtp.message(mesgt) - } - - local r = os.execute(cmd) + local r,e = sendMail(data.user, data.password, v, data.title, data.content) if not r then iserror = true table.insert(error_msg, v.email) diff --git a/Blogger/build/debug/package.json b/Blogger/build/debug/package.json index 5e1ed75..bd0f367 100644 --- a/Blogger/build/debug/package.json +++ b/Blogger/build/debug/package.json @@ -6,7 +6,7 @@ "author": "Xuan Sang LE", "email": "xsang.le@gmail.com" }, - "version": "0.2.11-a", + "version": "0.2.12-a", "category": "Internet", "iconclass": "fa fa-book", "dependencies": [ diff --git a/Blogger/build/release/Blogger.zip b/Blogger/build/release/Blogger.zip index 2ef74ff..ff1f359 100644 Binary files a/Blogger/build/release/Blogger.zip and b/Blogger/build/release/Blogger.zip differ diff --git a/Blogger/package.json b/Blogger/package.json index 5e1ed75..bd0f367 100644 --- a/Blogger/package.json +++ b/Blogger/package.json @@ -6,7 +6,7 @@ "author": "Xuan Sang LE", "email": "xsang.le@gmail.com" }, - "version": "0.2.11-a", + "version": "0.2.12-a", "category": "Internet", "iconclass": "fa fa-book", "dependencies": [ diff --git a/Booklet/build/release/Booklet.zip b/Booklet/build/release/Booklet.zip index d8b2167..5e5b1ea 100644 Binary files a/Booklet/build/release/Booklet.zip and b/Booklet/build/release/Booklet.zip differ diff --git a/Clipper/build/release/Clipper.zip b/Clipper/build/release/Clipper.zip index 9581225..69c874b 100644 Binary files a/Clipper/build/release/Clipper.zip and b/Clipper/build/release/Clipper.zip differ diff --git a/CodePad/build/release/CodePad.zip b/CodePad/build/release/CodePad.zip index 0cc163f..6a51109 100644 Binary files a/CodePad/build/release/CodePad.zip and b/CodePad/build/release/CodePad.zip differ diff --git a/DiffEditor/build/release/DiffEditor.zip b/DiffEditor/build/release/DiffEditor.zip index 34c6fba..0fad392 100644 Binary files a/DiffEditor/build/release/DiffEditor.zip and b/DiffEditor/build/release/DiffEditor.zip differ diff --git a/Docify/build/release/Docify.zip b/Docify/build/release/Docify.zip index a4f3e2b..0a74a3b 100644 Binary files a/Docify/build/release/Docify.zip and b/Docify/build/release/Docify.zip differ diff --git a/GPClient/build/release/GPClient.zip b/GPClient/build/release/GPClient.zip index f1bcd7b..2265d22 100644 Binary files a/GPClient/build/release/GPClient.zip and b/GPClient/build/release/GPClient.zip differ diff --git a/GitGraph/build/release/GitGraph.zip b/GitGraph/build/release/GitGraph.zip index f4444a3..2aa2c1f 100644 Binary files a/GitGraph/build/release/GitGraph.zip and b/GitGraph/build/release/GitGraph.zip differ diff --git a/GraphEditor/build/release/GraphEditor.zip b/GraphEditor/build/release/GraphEditor.zip index baf6ac6..74c196a 100644 Binary files a/GraphEditor/build/release/GraphEditor.zip and b/GraphEditor/build/release/GraphEditor.zip differ diff --git a/ImageEditor/build/release/ImageEditor.zip b/ImageEditor/build/release/ImageEditor.zip index 62eda4f..1e1a008 100644 Binary files a/ImageEditor/build/release/ImageEditor.zip and b/ImageEditor/build/release/ImageEditor.zip differ diff --git a/LibreOffice/build/release/LibreOffice.zip b/LibreOffice/build/release/LibreOffice.zip index 6bd439d..49c9e60 100644 Binary files a/LibreOffice/build/release/LibreOffice.zip and b/LibreOffice/build/release/LibreOffice.zip differ diff --git a/LuaPlayground/build/release/LuaPlayground.zip b/LuaPlayground/build/release/LuaPlayground.zip index 7539cbc..7562e47 100644 Binary files a/LuaPlayground/build/release/LuaPlayground.zip and b/LuaPlayground/build/release/LuaPlayground.zip differ diff --git a/MarkOn/build/release/MarkOn.zip b/MarkOn/build/release/MarkOn.zip index 6778dce..ebd4f2e 100644 Binary files a/MarkOn/build/release/MarkOn.zip and b/MarkOn/build/release/MarkOn.zip differ diff --git a/MonacoCore/build/release/MonacoCore.zip b/MonacoCore/build/release/MonacoCore.zip index aa0e1ca..b54a568 100644 Binary files a/MonacoCore/build/release/MonacoCore.zip and b/MonacoCore/build/release/MonacoCore.zip differ diff --git a/OnlyOffice/build/release/OnlyOffice.zip b/OnlyOffice/build/release/OnlyOffice.zip index cf3cbdd..23f8401 100644 Binary files a/OnlyOffice/build/release/OnlyOffice.zip and b/OnlyOffice/build/release/OnlyOffice.zip differ diff --git a/Preview/build/release/Preview.zip b/Preview/build/release/Preview.zip index f77a82f..4246acc 100644 Binary files a/Preview/build/release/Preview.zip and b/Preview/build/release/Preview.zip differ diff --git a/RemoteCamera/build/release/RemoteCamera.zip b/RemoteCamera/build/release/RemoteCamera.zip index 88781ff..3af8f33 100644 Binary files a/RemoteCamera/build/release/RemoteCamera.zip and b/RemoteCamera/build/release/RemoteCamera.zip differ diff --git a/RemoteDesktop/build/release/RemoteDesktop.zip b/RemoteDesktop/build/release/RemoteDesktop.zip index 1d053a7..a2787d6 100644 Binary files a/RemoteDesktop/build/release/RemoteDesktop.zip and b/RemoteDesktop/build/release/RemoteDesktop.zip differ diff --git a/SQLiteDB/build/release/SQLiteDB.zip b/SQLiteDB/build/release/SQLiteDB.zip index 7ea3e89..9814e94 100644 Binary files a/SQLiteDB/build/release/SQLiteDB.zip and b/SQLiteDB/build/release/SQLiteDB.zip differ diff --git a/ServerLogClient/build/release/ServerLogClient.zip b/ServerLogClient/build/release/ServerLogClient.zip index 3bf15a3..b30672a 100644 Binary files a/ServerLogClient/build/release/ServerLogClient.zip and b/ServerLogClient/build/release/ServerLogClient.zip differ diff --git a/ShaderPlayground/build/release/ShaderPlayground.zip b/ShaderPlayground/build/release/ShaderPlayground.zip index 0d37a63..214050c 100644 Binary files a/ShaderPlayground/build/release/ShaderPlayground.zip and b/ShaderPlayground/build/release/ShaderPlayground.zip differ diff --git a/ShowCase/build/release/ShowCase.zip b/ShowCase/build/release/ShowCase.zip index 45c8016..c1466c0 100644 Binary files a/ShowCase/build/release/ShowCase.zip and b/ShowCase/build/release/ShowCase.zip differ diff --git a/SimpleMDE/build/release/SimpleMDE.zip b/SimpleMDE/build/release/SimpleMDE.zip index f2006ac..7b7d0c4 100644 Binary files a/SimpleMDE/build/release/SimpleMDE.zip and b/SimpleMDE/build/release/SimpleMDE.zip differ diff --git a/SystemControl/build/release/SystemControl.zip b/SystemControl/build/release/SystemControl.zip index a43bea6..3400a64 100644 Binary files a/SystemControl/build/release/SystemControl.zip and b/SystemControl/build/release/SystemControl.zip differ diff --git a/TinyEditor/build/release/TinyEditor.zip b/TinyEditor/build/release/TinyEditor.zip index 1cb3a3f..ae885d7 100644 Binary files a/TinyEditor/build/release/TinyEditor.zip and b/TinyEditor/build/release/TinyEditor.zip differ diff --git a/VizApp/build/release/VizApp.zip b/VizApp/build/release/VizApp.zip index 52c1a46..4690d51 100644 Binary files a/VizApp/build/release/VizApp.zip and b/VizApp/build/release/VizApp.zip differ diff --git a/build.json b/build.json index c89cb84..0e9d4a2 100644 --- a/build.json +++ b/build.json @@ -1,5 +1,16 @@ { "targets" : { + "Build single package" :{ + "jobs": [ + { + "name": "batch", + "data": { + "target": "release", + "modules": ["About"] + } + } + ] + }, "Build all" :{ "jobs": [ { diff --git a/libantosdk/build/debug/main.js b/libantosdk/build/debug/main.js index 27c7d27..c8ab2d6 100644 --- a/libantosdk/build/debug/main.js +++ b/libantosdk/build/debug/main.js @@ -1,417 +1 @@ - -var OS; -(function (OS) { - let API; - (function (API) { - ; - class AntOSDKWorker { - constructor(path) { - this.worker = new Worker(path.asFileHandle().getlink()); - this.jobs = {}; - this.worker.onmessage = (e) => { - let ret = e.data; - let job = this.jobs[ret.id]; - if (job) { - if (ret.type === "log") { - if (job.logger) { - if (ret.error) - job.logger.error(ret.result); - else { - if (ret.show_time === false && job.logger.print) - job.logger.print(ret.result); - else - job.logger.info(ret.result); - } - } - } - else { - job.callback(ret); - delete this.jobs[ret.id]; - } - } - else { - console.log("Unable to identify result of job", ret.id, ret); - } - }; - const pkgs = {}; - for (const k in OS.setting.system.packages) { - const pkg = OS.setting.system.packages[k]; - pkgs[k] = { - path: pkg.path, - name: pkg.pkgname - }; - } - this.submit("sdk-setup", { - REST: OS.API.REST, - pkgs: pkgs - }); - } - newJobID() { - return `job_${Math.random().toString(36).replace(".", "")}`; - } - exectue_job(cmd, data, root, callback, logger) { - const id = this.newJobID(); - const job = { - id: id, - cmd: cmd, - data: data, - root: root - }; - this.jobs[id] = { - callback: callback, - logger: logger - }; - this.worker.postMessage(job); - } - submit(cmd, data, root, logger) { - return new Promise((resolve, reject) => { - this.exectue_job(cmd, data, root, (ret) => { - if (ret.error) { - return reject(ret.error); - } - resolve(ret.result); - }, logger); - }); - } - terminate() { - this.worker.terminate(); - } - } - class AntOSDKBuilder { - constructor(logger, root) { - this.root = root; - this.logger = logger; - if (!AntOSDKBuilder.worker) { - AntOSDKBuilder.worker = new AntOSDKWorker("pkg://libantosdk/core/worker.js"); - } - } - require(mods) { - return this.run("sdk-import", mods.map(m => `${m}.worker.js`)); - } - compile(type, opts) { - return new Promise(async (resolve, reject) => { - try { - await this.require([type]); - const ret = await this.run(`${type}-compile`, opts); - resolve(ret); - } - catch (e) { - reject(__e(e)); - } - }); - } - run(job, data) { - if (job === "sdk-run-app") { - return new Promise(async (resolve, reject) => { - try { - let app_root = data; - if (app_root.split("://").length == 1) { - app_root = `${this.root}/${data}`; - } - const v = await `${app_root}/package.json`.asFileHandle().read("json"); - v.text = v.name; - v.path = app_root; - v.filename = v.pkgname; - v.type = "app"; - v.mime = "antos/app"; - if (v.icon) { - v.icon = `${v.path}/${v.icon}`; - } - if (!v.iconclass && !v.icon) { - v.iconclass = "fa fa-adn"; - } - this.logger.info(__("Installing...")); - OS.setting.system.packages[v.pkgname] = v; - if (v.app) { - this.logger.info(__("Running {0}...", v.app)); - OS.GUI.forceLaunch(v.app, []); - } - else { - this.logger.error(__("{0} is not an application", v.pkgname)); - } - return resolve(undefined); - } - catch (error) { - reject(error); - } - }); - } - else if (job === "batch") { - return new Promise(async (resolve, reject) => { - try { - if (!data || !data.target) { - const err = __("No target provided for job: batch"); - this.logger.error(err); - throw new Error(err.__()); - } - let pwd = data.pwd; - if (!pwd) { - pwd = this.root; - } - const ret = await pwd.asFileHandle().read(); - if (ret.error) { - this.logger.error(ret.error); - throw new Error(ret.error); - } - let dirs = ret.result.filter(e => e.type === "dir"); - if (data.modules) { - dirs = dirs.filter(e => data.modules.includes(e.filename)); - } - for (let entry of dirs) { - const build_file = `${entry.path}/build.json`.asFileHandle(); - try { - await build_file.onready(); - } - catch (e) { - this.logger.info(__("No build.json file found in {0}, ignore this file", entry.path)); - continue; - } - this.logger.info(__("########### BUILDING: {0} ###########", entry.path)); - const sdk = new AntOSDKBuilder(this.logger, entry.path); - const options = await build_file.read("json"); - if (!options.root) { - options.root = entry.path; - } - await sdk.batch([data.target], options); - } - this.logger.info(__("########### Batch building done ###########")); - return resolve(undefined); - } - catch (error) { - reject(error); - } - }); - } - return AntOSDKBuilder.worker.submit(job, data, this.root, this.logger); - } - batch(targets, options) { - if (options.root) { - this.root = options.root; - } - return new Promise(async (resolve, reject) => { - try { - if (!options.targets) { - reject("No target found"); - } - for (const name of targets) { - const target = options.targets[name]; - if (!target) - return reject(__("No target: {0}", name)); - if (target.depend) { - await this.batch(target.depend, options); - } - if (target.require) { - await this.require(target.require); - } - if (this.logger) - this.logger.info(__("### RUNNING STAGE: {0}###", name).__()); - if (target.jobs) - for (const job of target.jobs) { - await this.run(job.name, job.data); - } - } - resolve(undefined); - } - catch (e) { - reject(e); - } - }); - } - } - API.AntOSDKBuilder = AntOSDKBuilder; - let VFS; - (function (VFS) { - class SDKFileHandle extends VFS.RemoteFileHandle { - /** - *Creates an instance of SDKFileHandle. - * @param {string} pkg_path package path in string - * @memberof SDKFileHandle - */ - constructor(pkg_path) { - super(pkg_path); - const path = `pkg://libantosdk/${this.genealogy.join("/")}`; - this.setPath(path.asFileHandle().path); - } - } - VFS.SDKFileHandle = SDKFileHandle; - VFS.register("^sdk$", SDKFileHandle); - })(VFS = API.VFS || (API.VFS = {})); - })(API = OS.API || (OS.API = {})); -})(OS || (OS = {})); - -var OS; -(function (OS) { - let application; - (function (application) { - class Logger { - /** - * Creates an instance of Logger. - * @param {HTMLElement} el target container - * @memberof Logger - */ - constructor(el) { - this.target = el; - } - /** - * Log level info - * - * @param {string|FormattedString} s - * @memberof Logger - */ - info(s) { - this.log("info", s, true); - } - /** - * Log level warning - * - * @param {string|FormattedString} s - * @memberof Logger - */ - warn(s) { - this.log("warn", s, true); - } - /** - * Log level error - * - * @param {string|FormattedString} s - * @memberof Logger - */ - error(s) { - this.log("error", s, true); - } - /** - * Log a string to target container - * - * @private - * @param {string} c class name of the appended log element - * @param {string|FormattedString} s log string - * @param {boolean} showtime define whether the logger should insert datetime prefix - * in the log string - * @memberof Logger - */ - log(c, s, showtime) { - let el = $("
")
-                    .attr("class", `sdk-log-${c}`);
-                if (showtime) {
-                    let date = new Date();
-                    let prefix = date.getDate() + "/"
-                        + (date.getMonth() + 1) + "/"
-                        + date.getFullYear() + " "
-                        + date.getHours() + ":"
-                        + date.getMinutes() + ":"
-                        + date.getSeconds();
-                    el.text(`[${prefix}]: ${s.__()}`);
-                }
-                else {
-                    el.text(s.__());
-                }
-                $(this.target).append(el);
-                $(this.target).scrollTop($(this.target)[0].scrollHeight);
-            }
-            /**
-             * Print a log message without prefix
-             *
-             * @param {string|FormattedString} s text to print
-             * @memberof Logger
-             */
-            print(s) {
-                if (s.match(/warn/i)) {
-                    this.log("warn", s, false);
-                }
-                else if (s.match(/error/i)) {
-                    this.log("error", s, false);
-                }
-                else {
-                    this.log("info", s, false);
-                }
-            }
-            /**
-             * Empty the log container
-             *
-             * @memberof Logger
-             */
-            clear() {
-                $(this.target).empty();
-            }
-        }
-        /**
-         *
-         * @class SDKBuilder
-         * @extends {BaseApplication}
-         */
-        class SDKBuilder extends application.BaseApplication {
-            constructor(args) {
-                super("SDKBuilder", args);
-            }
-            main() {
-                this.logger = new Logger(this.find("container"));
-                this.sdk = new OS.API.AntOSDKBuilder(this.logger, "");
-                this.filehandle = undefined;
-                this.options = undefined;
-                this.targets = this.find("target-list");
-                if (this.args && this.args.length > 0)
-                    this.filehandle = this.args[0].path.asFileHandle();
-                this.find("btnbuild").onbtclick = (e) => {
-                    const selected = this.targets.selectedItem;
-                    if (!selected)
-                        return;
-                    this.load(this.compile([selected.data.text])).catch((e) => this.logger.error(__(e.stack)));
-                };
-                this.find("btnclear").onbtclick = (e) => {
-                    this.logger.clear();
-                };
-                this.find("btnrefresh").onbtclick = (e) => {
-                    this.open();
-                };
-                this.find("btnopen").onbtclick = async (e) => {
-                    try {
-                        const d = await this.openDialog("FileDialog", {
-                            title: __("Select build file"),
-                            mimes: this.meta().mimes
-                        });
-                        this.filehandle = d.file.path.asFileHandle();
-                        this.open();
-                    }
-                    catch (error) {
-                        this.logger.error(error.toString());
-                    }
-                };
-                this.open();
-            }
-            open() {
-                if (this.filehandle === undefined) {
-                    return;
-                }
-                this.filehandle
-                    .read("json")
-                    .then((data) => {
-                    if (!data.targets) {
-                        return this.logger.error(__("Invalid build file: {0}", this.filehandle.path));
-                    }
-                    const targets = Object.keys(data.targets).map(e => {
-                        return { text: e };
-                    });
-                    this.scheme.apptitle = this.filehandle.path;
-                    this.options = data;
-                    this.options.root = this.filehandle.parent().path;
-                    this.targets.data = targets;
-                    this.logger.info(__("Loaded: {0}", this.filehandle.path));
-                })
-                    .catch((e) => this.logger.error(__("Unable to load build file: {0}: {1}", this.filehandle.path, e.toString())));
-            }
-            compile(stages) {
-                return new Promise(async (resolve, reject) => {
-                    try {
-                        this.logger.clear();
-                        await this.sdk.batch(stages, this.options);
-                        resolve("OK");
-                    }
-                    catch (e) {
-                        reject(__e(e));
-                    }
-                });
-            }
-        }
-        application.SDKBuilder = SDKBuilder;
-    })(application = OS.application || (OS.application = {}));
-})(OS || (OS = {}));
+var OS;!function(t){let e;!function(e){class i{constructor(e){this.worker=new Worker(e.asFileHandle().getlink()),this.jobs={},this.worker.onmessage=t=>{let e=t.data,i=this.jobs[e.id];i?"log"===e.type?i.logger&&(e.error?i.logger.error(e.result):!1===e.show_time&&i.logger.print?i.logger.print(e.result):i.logger.info(e.result)):(i.callback(e),delete this.jobs[e.id]):console.log("Unable to identify result of job",e.id,e)};const i={};for(const e in t.setting.system.packages){const r=t.setting.system.packages[e];i[e]={path:r.path,name:r.pkgname}}this.submit("sdk-setup",{REST:t.API.REST,pkgs:i})}newJobID(){return"job_"+Math.random().toString(36).replace(".","")}exectue_job(t,e,i,r,o){const s=this.newJobID(),a={id:s,cmd:t,data:e,root:i};this.jobs[s]={callback:r,logger:o},this.worker.postMessage(a)}submit(t,e,i,r){return new Promise((o,s)=>{this.exectue_job(t,e,i,t=>{if(t.error)return s(t.error);o(t.result)},r)})}terminate(){this.worker.terminate()}}class r{constructor(t,e){this.root=e,this.logger=t,r.worker||(r.worker=new i("pkg://libantosdk/core/worker.js"))}require(t){return this.run("sdk-import",t.map(t=>t+".worker.js"))}compile(t,e){return new Promise(async(i,r)=>{try{await this.require([t]),i(await this.run(t+"-compile",e))}catch(t){r(__e(t))}})}run(e,i){return"sdk-run-app"===e?new Promise(async(e,r)=>{try{let r=i;1==r.split("://").length&&(r=`${this.root}/${i}`);const o=await(r+"/package.json").asFileHandle().read("json");return o.text=o.name,o.path=r,o.filename=o.pkgname,o.type="app",o.mime="antos/app",o.icon&&(o.icon=`${o.path}/${o.icon}`),o.iconclass||o.icon||(o.iconclass="fa fa-adn"),this.logger.info(__("Installing...")),t.setting.system.packages[o.pkgname]=o,o.app?(this.logger.info(__("Running {0}...",o.app)),t.GUI.forceLaunch(o.app,[])):this.logger.error(__("{0} is not an application",o.pkgname)),e(void 0)}catch(t){r(t)}}):"batch"===e?new Promise(async(t,e)=>{try{if(!i||!i.target){const t=__("No target provided for job: batch");throw this.logger.error(t),new Error(t.__())}let e=i.pwd;e||(e=this.root);const o=await e.asFileHandle().read();if(o.error)throw this.logger.error(o.error),new Error(o.error);let s=o.result.filter(t=>"dir"===t.type);i.modules&&(s=s.filter(t=>i.modules.includes(t.filename)));for(let t of s){const e=(t.path+"/build.json").asFileHandle();try{await e.onready()}catch(e){this.logger.info(__("No build.json file found in {0}, ignore this file",t.path));continue}this.logger.info(__("########### BUILDING: {0} ###########",t.path));const o=new r(this.logger,t.path),s=await e.read("json");s.root||(s.root=t.path),await o.batch([i.target],s)}return this.logger.info(__("########### Batch building done ###########")),t(void 0)}catch(t){e(t)}}):r.worker.submit(e,i,this.root,this.logger)}batch(t,e){return e.root&&(this.root=e.root),new Promise(async(i,r)=>{try{e.targets||r("No target found");for(const i of t){const t=e.targets[i];if(!t)return r(__("No target: {0}",i));if(t.depend&&await this.batch(t.depend,e),t.require&&await this.require(t.require),this.logger&&this.logger.info(__("### RUNNING STAGE: {0}###",i).__()),t.jobs)for(const e of t.jobs)await this.run(e.name,e.data)}i(void 0)}catch(t){r(t)}})}}let o;e.AntOSDKBuilder=r,function(t){class e extends t.RemoteFileHandle{constructor(t){super(t);const e="pkg://libantosdk/"+this.genealogy.join("/");this.setPath(e.asFileHandle().path)}}t.SDKFileHandle=e,t.register("^sdk$",e)}(o=e.VFS||(e.VFS={}))}(e=t.API||(t.API={}))}(OS||(OS={})),function(t){let e;!function(e){class i{constructor(t){this.target=t}info(t){this.log("info",t,!0)}warn(t){this.log("warn",t,!0)}error(t){this.log("error",t,!0)}log(t,e,i){let r=$("
").attr("class","sdk-log-"+t);if(i){let t=new Date,i=t.getDate()+"/"+(t.getMonth()+1)+"/"+t.getFullYear()+" "+t.getHours()+":"+t.getMinutes()+":"+t.getSeconds();r.text(`[${i}]: ${e.__()}`)}else r.text(e.__());$(this.target).append(r),$(this.target).scrollTop($(this.target)[0].scrollHeight)}print(t){t.match(/warn/i)?this.log("warn",t,!1):t.match(/error/i)?this.log("error",t,!1):this.log("info",t,!1)}clear(){$(this.target).empty()}}class r extends e.BaseApplication{constructor(t){super("SDKBuilder",t)}main(){this.logger=new i(this.find("container")),this.sdk=new t.API.AntOSDKBuilder(this.logger,""),this.filehandle=void 0,this.options=void 0,this.targets=this.find("target-list"),this.args&&this.args.length>0&&(this.filehandle=this.args[0].path.asFileHandle()),this.find("btnbuild").onbtclick=t=>{const e=this.targets.selectedItem;e&&this.load(this.compile([e.data.text])).catch(t=>this.logger.error(__(t.stack)))},this.find("btnclear").onbtclick=t=>{this.logger.clear()},this.find("btnrefresh").onbtclick=t=>{this.open()},this.find("btnopen").onbtclick=async t=>{try{const t=await this.openDialog("FileDialog",{title:__("Select build file"),mimes:this.meta().mimes});this.filehandle=t.file.path.asFileHandle(),this.open()}catch(t){this.logger.error(t.toString())}},this.open()}open(){void 0!==this.filehandle&&this.filehandle.read("json").then(t=>{if(!t.targets)return this.logger.error(__("Invalid build file: {0}",this.filehandle.path));const e=Object.keys(t.targets).map(t=>({text:t}));this.scheme.apptitle=this.filehandle.path,this.options=t,this.options.root=this.filehandle.parent().path,this.targets.data=e,this.logger.info(__("Loaded: {0}",this.filehandle.path))}).catch(t=>this.logger.error(__("Unable to load build file: {0}: {1}",this.filehandle.path,t.toString())))}compile(t){return new Promise(async(e,i)=>{try{this.logger.clear(),await this.sdk.batch(t,this.options),e("OK")}catch(t){i(__e(t))}})}}e.SDKBuilder=r}(e=t.application||(t.application={}))}(OS||(OS={}));
\ No newline at end of file
diff --git a/libantosdk/build/release/libantosdk.zip b/libantosdk/build/release/libantosdk.zip
index b307325..90dc146 100644
Binary files a/libantosdk/build/release/libantosdk.zip and b/libantosdk/build/release/libantosdk.zip differ
diff --git a/libplotly/build/release/libplotly.zip b/libplotly/build/release/libplotly.zip
index 7029f9f..5bdb3ca 100644
Binary files a/libplotly/build/release/libplotly.zip and b/libplotly/build/release/libplotly.zip differ
diff --git a/libthreejs/build/release/libthreejs.zip b/libthreejs/build/release/libthreejs.zip
index 2e2848b..cf82d4d 100644
Binary files a/libthreejs/build/release/libthreejs.zip and b/libthreejs/build/release/libthreejs.zip differ
diff --git a/release/ACECore.zip b/release/ACECore.zip
index 3843bcd..3404b66 100644
Binary files a/release/ACECore.zip and b/release/ACECore.zip differ
diff --git a/release/About.zip b/release/About.zip
index 5fe8c91..3e18c49 100644
Binary files a/release/About.zip and b/release/About.zip differ
diff --git a/release/AceDiff.zip b/release/AceDiff.zip
index b254d48..960fff3 100644
Binary files a/release/AceDiff.zip and b/release/AceDiff.zip differ
diff --git a/release/ActivityMonitor.zip b/release/ActivityMonitor.zip
index 5eaf880..78b0510 100644
Binary files a/release/ActivityMonitor.zip and b/release/ActivityMonitor.zip differ
diff --git a/release/Antedit.zip b/release/Antedit.zip
index 7066f4f..f13f8bc 100644
Binary files a/release/Antedit.zip and b/release/Antedit.zip differ
diff --git a/release/Antunnel.zip b/release/Antunnel.zip
index 591b6e6..f8bd053 100644
Binary files a/release/Antunnel.zip and b/release/Antunnel.zip differ
diff --git a/release/AntunnelPlugins.zip b/release/AntunnelPlugins.zip
index fd71d63..a7e2e29 100644
Binary files a/release/AntunnelPlugins.zip and b/release/AntunnelPlugins.zip differ
diff --git a/release/Archive.zip b/release/Archive.zip
index 480a4ac..0f0d439 100644
Binary files a/release/Archive.zip and b/release/Archive.zip differ
diff --git a/release/Blogger.md b/release/Blogger.md
index f956a63..a0f637b 100644
--- a/release/Blogger.md
+++ b/release/Blogger.md
@@ -6,6 +6,7 @@ Blackend for my blog at https://blog.iohub.dev
 ## Change logs
 
 ### v0.2.x-a
+* Patch 12: support send mail via SSL
 * Patch 11: Add TFIDF analyse functionality
 * Patch 10: Migrate code to typescript, use SQLiteDB lib for database access
 * Patch 9: Update to use the new MDE library
diff --git a/release/Blogger.zip b/release/Blogger.zip
index 2ef74ff..ff1f359 100644
Binary files a/release/Blogger.zip and b/release/Blogger.zip differ
diff --git a/release/Booklet.zip b/release/Booklet.zip
index d8b2167..5e5b1ea 100644
Binary files a/release/Booklet.zip and b/release/Booklet.zip differ
diff --git a/release/Clipper.zip b/release/Clipper.zip
index 9581225..69c874b 100644
Binary files a/release/Clipper.zip and b/release/Clipper.zip differ
diff --git a/release/CodePad.zip b/release/CodePad.zip
index 0cc163f..6a51109 100644
Binary files a/release/CodePad.zip and b/release/CodePad.zip differ
diff --git a/release/DiffEditor.zip b/release/DiffEditor.zip
index 34c6fba..0fad392 100644
Binary files a/release/DiffEditor.zip and b/release/DiffEditor.zip differ
diff --git a/release/Docify.zip b/release/Docify.zip
index a4f3e2b..0a74a3b 100644
Binary files a/release/Docify.zip and b/release/Docify.zip differ
diff --git a/release/GPClient.zip b/release/GPClient.zip
index f1bcd7b..2265d22 100644
Binary files a/release/GPClient.zip and b/release/GPClient.zip differ
diff --git a/release/GitGraph.zip b/release/GitGraph.zip
index f4444a3..2aa2c1f 100644
Binary files a/release/GitGraph.zip and b/release/GitGraph.zip differ
diff --git a/release/GraphEditor.zip b/release/GraphEditor.zip
index baf6ac6..74c196a 100644
Binary files a/release/GraphEditor.zip and b/release/GraphEditor.zip differ
diff --git a/release/ImageEditor.zip b/release/ImageEditor.zip
index 62eda4f..1e1a008 100644
Binary files a/release/ImageEditor.zip and b/release/ImageEditor.zip differ
diff --git a/release/LibreOffice.zip b/release/LibreOffice.zip
index 6bd439d..49c9e60 100644
Binary files a/release/LibreOffice.zip and b/release/LibreOffice.zip differ
diff --git a/release/LuaPlayground.zip b/release/LuaPlayground.zip
index 7539cbc..7562e47 100644
Binary files a/release/LuaPlayground.zip and b/release/LuaPlayground.zip differ
diff --git a/release/MarkOn.zip b/release/MarkOn.zip
index 6778dce..ebd4f2e 100644
Binary files a/release/MarkOn.zip and b/release/MarkOn.zip differ
diff --git a/release/MonacoCore.zip b/release/MonacoCore.zip
index aa0e1ca..b54a568 100644
Binary files a/release/MonacoCore.zip and b/release/MonacoCore.zip differ
diff --git a/release/OnlyOffice.zip b/release/OnlyOffice.zip
index cf3cbdd..23f8401 100644
Binary files a/release/OnlyOffice.zip and b/release/OnlyOffice.zip differ
diff --git a/release/Preview.zip b/release/Preview.zip
index f77a82f..4246acc 100644
Binary files a/release/Preview.zip and b/release/Preview.zip differ
diff --git a/release/RemoteCamera.zip b/release/RemoteCamera.zip
index 88781ff..3af8f33 100644
Binary files a/release/RemoteCamera.zip and b/release/RemoteCamera.zip differ
diff --git a/release/RemoteDesktop.zip b/release/RemoteDesktop.zip
index 1d053a7..a2787d6 100644
Binary files a/release/RemoteDesktop.zip and b/release/RemoteDesktop.zip differ
diff --git a/release/SQLiteDB.zip b/release/SQLiteDB.zip
index 7ea3e89..9814e94 100644
Binary files a/release/SQLiteDB.zip and b/release/SQLiteDB.zip differ
diff --git a/release/ServerLogClient.zip b/release/ServerLogClient.zip
index 3bf15a3..b30672a 100644
Binary files a/release/ServerLogClient.zip and b/release/ServerLogClient.zip differ
diff --git a/release/ShaderPlayground.zip b/release/ShaderPlayground.zip
index 0d37a63..214050c 100644
Binary files a/release/ShaderPlayground.zip and b/release/ShaderPlayground.zip differ
diff --git a/release/ShowCase.zip b/release/ShowCase.zip
index 45c8016..c1466c0 100644
Binary files a/release/ShowCase.zip and b/release/ShowCase.zip differ
diff --git a/release/SimpleMDE.zip b/release/SimpleMDE.zip
index f2006ac..7b7d0c4 100644
Binary files a/release/SimpleMDE.zip and b/release/SimpleMDE.zip differ
diff --git a/release/SystemControl.zip b/release/SystemControl.zip
index a43bea6..3400a64 100644
Binary files a/release/SystemControl.zip and b/release/SystemControl.zip differ
diff --git a/release/TinyEditor.zip b/release/TinyEditor.zip
index 1cb3a3f..ae885d7 100644
Binary files a/release/TinyEditor.zip and b/release/TinyEditor.zip differ
diff --git a/release/VizApp.zip b/release/VizApp.zip
index 52c1a46..4690d51 100644
Binary files a/release/VizApp.zip and b/release/VizApp.zip differ
diff --git a/release/libantosdk.zip b/release/libantosdk.zip
index b307325..90dc146 100644
Binary files a/release/libantosdk.zip and b/release/libantosdk.zip differ
diff --git a/release/libplotly.zip b/release/libplotly.zip
index 7029f9f..5bdb3ca 100644
Binary files a/release/libplotly.zip and b/release/libplotly.zip differ
diff --git a/release/libthreejs.zip b/release/libthreejs.zip
index 2e2848b..cf82d4d 100644
Binary files a/release/libthreejs.zip and b/release/libthreejs.zip differ
diff --git a/release/packages.json b/release/packages.json
index 1c0060a..de28a73 100644
--- a/release/packages.json
+++ b/release/packages.json
@@ -1 +1 @@
-[{"version":"2.6.347-r","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libpdfjs.zip","dependencies":[],"category":"Library","author":"Xuan Sang LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libpdfjs.md","pkgname":"libpdfjs","name":"PDF JS library"},{"version":"0.1.2-a","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/AntunnelPlugins.zip","dependencies":["Antunnel@0.2.0-b"],"category":"Library","author":"Dany LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/AntunnelPlugins.md","pkgname":"AntunnelPlugins","name":"Antunnel Plugins"},{"version":"5.1.0-r","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/xTerm.zip","dependencies":[],"category":"Library","author":"","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/xTerm.md","pkgname":"xTerm","name":"xTerm Library"},{"version":"0.1.3-b","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ServerLogClient.zip","dependencies":["Antunnel@0.2.1-b"],"category":"System","author":"","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ServerLogClient.md","pkgname":"ServerLogClient","name":"Server log monitor"},{"version":"0.1.0-a","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/VizApp.zip","dependencies":["ACECore@1.4.12-r"],"category":"Graphics","author":"Xuan Sang LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/VizApp.md","pkgname":"VizApp","name":"Viz editor"},{"version":"0.1.1-a","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/LuaPlayground.zip","dependencies":["ACECore@1.4.12-r"],"category":"Development","author":"Xuan Sang LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/LuaPlayground.md","pkgname":"LuaPlayground","name":"LuaPlayground"},{"version":"0.1.4-a","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Clipper.zip","dependencies":[],"category":"Utility","author":"Xuan Sang LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Clipper.md","pkgname":"Clipper","name":"Clipper"},{"version":"4.4.0-r","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libfabric.zip","dependencies":[],"category":"Library","author":"","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libfabric.md","pkgname":"libfabric","name":"Fabric.js library"},{"version":"0.1.0-a","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ImageEditor.zip","dependencies":["libfabric@4.4.0-r"],"category":"Graphics","author":"Xuan Sang LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ImageEditor.md","pkgname":"ImageEditor","name":"Image editor"},{"version":"0.2.4-b","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Antedit.zip","dependencies":["MonacoCore@0.33.0-r"],"category":"Development","author":"Xuan Sang LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Antedit.md","pkgname":"Antedit","name":"Antos Editor"},{"version":"0.33.0-r","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/MonacoCore.zip","dependencies":[],"category":"Library","author":"","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/MonacoCore.md","pkgname":"MonacoCore","name":"Monaco editor core"},{"version":"0.1.8-a","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/OnlyOffice.zip","dependencies":[],"category":"Office","author":"Xuan Sang LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/OnlyOffice.md","pkgname":"OnlyOffice","name":"Office Suite"},{"version":"3.0.3-r","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/AceDiff.zip","dependencies":["ACECore@1.4.12-r"],"category":"Library","author":"","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/AceDiff.md","pkgname":"AceDiff","name":"AceDiff addon library"},{"version":"0.0.4-a","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/TinyEditor.zip","dependencies":[],"category":"Other","author":"Xuan Sang LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/TinyEditor.md","pkgname":"TinyEditor","name":"Tiny editor"},{"version":"0.1.16-b","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/RemoteDesktop.zip","dependencies":[],"category":"Internet","author":"Dany LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/RemoteDesktop.md","pkgname":"RemoteDesktop","name":"WVNC remote desktop"},{"version":"1.4.12-r","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ACECore.zip","dependencies":[],"category":"Library","author":"","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ACECore.md","pkgname":"ACECore","name":"ACE Editor core"},{"version":"0.1.4-a","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/GPClient.zip","dependencies":[],"category":"Internet","author":"Xuan Sang LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/GPClient.md","pkgname":"GPClient","name":"Generic Purpose client"},{"version":"0.1.3-a","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Preview.zip","dependencies":["libpdfjs@2.6.347-r"],"category":"Graphics","author":"Xuan Sang LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Preview.md","pkgname":"Preview","name":"Preview"},{"version":"0.2.11-a","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Blogger.zip","dependencies":["SimpleMDE@2.18.0-r","Katex@0.11.1-r","SQLiteDB@0.1.0-a"],"category":"Internet","author":"Xuan Sang LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Blogger.md","pkgname":"Blogger","name":"Blogging application"},{"version":"0.1.5-a","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/RemoteCamera.zip","dependencies":["libjpeg@0.1.1-a","Antunnel@0.1.8-a"],"category":"Graphics","author":"","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/RemoteCamera.md","pkgname":"RemoteCamera","name":"Remote Camera"},{"version":"0.1.0-b","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Docify.zip","dependencies":["SQLiteDB@0.1.0-a"],"category":"Office","author":"Dany LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Docify.md","pkgname":"Docify","name":"Docify"},{"version":"0.1.4-a","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/LibreOffice.zip","dependencies":[],"category":"Office","author":"Dany LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/LibreOffice.md","pkgname":"LibreOffice","name":"Libre Office Online"},{"version":"0.0.8-b","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ActivityMonitor.zip","dependencies":[],"category":"System","author":"Xuan Sang LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ActivityMonitor.md","pkgname":"ActivityMonitor","name":"Activity monitor"},{"version":"0.1.20-a","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/vTerm.zip","dependencies":["Antunnel@0.2.1-b","xTerm@5.1.0-r"],"category":"System","author":"Xuan Sang LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/vTerm.md","pkgname":"vTerm","name":"Virtual Terminal"},{"version":"0.1.0-b","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/vfsx.zip","dependencies":[],"category":"Library","author":"Dany LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/vfsx.md","pkgname":"vfsx","name":"AntOS VFS handles"},{"version":"0.1.2-b","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/About.zip","dependencies":[],"category":"Utility","author":"Xuan Sang LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/About.md","pkgname":"About","name":"About AntOS"},{"version":"0.1.2-a","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libwvnc.zip","dependencies":["libjpeg@0.1.1-a"],"category":"Library","author":"","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libwvnc.md","pkgname":"libwvnc","name":"libwvnc"},{"version":"0.1.6-b","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/CodePad.zip","dependencies":["ACECore@1.4.12-r"],"category":"Development","author":"Xuan Sang LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/CodePad.md","pkgname":"CodePad","name":"Code"},{"version":"0.2.5-a","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Booklet.zip","dependencies":["SimpleMDE@2.18.0-r","Katex@0.11.1-r"],"category":"Office","author":"Xuan Sang LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Booklet.md","pkgname":"Booklet","name":"Booklet"},{"version":"0.2.1-b","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Antunnel.zip","dependencies":[],"category":"Library","author":"Xuan Sang LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Antunnel.md","pkgname":"Antunnel","name":"Antunnel"},{"version":"0.0.4-a","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Archive.zip","dependencies":[],"category":"Utility","author":"Xuan Sang LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Archive.md","pkgname":"Archive","name":"Archive"},{"version":"0.0.7-a","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ShowCase.zip","dependencies":[],"category":"Utility","author":"Xuan Sang LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ShowCase.md","pkgname":"ShowCase","name":"ShowCase"},{"version":"0.0.129-r","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libthreejs.zip","dependencies":[],"category":"Library","author":"","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libthreejs.md","pkgname":"libthreejs","name":"libthreejs"},{"version":"0.1.2-a","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/GraphEditor.zip","dependencies":["ACECore@1.4.12-r"],"category":"Graphics","author":"Xuan Sang LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/GraphEditor.md","pkgname":"GraphEditor","name":"Graph Editor"},{"version":"0.1.12-a","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/SystemControl.zip","dependencies":["Antunnel@0.2.1-b"],"category":"System","author":"","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/SystemControl.md","pkgname":"SystemControl","name":"System monitoring"},{"version":"0.0.4-a","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ShaderPlayground.zip","dependencies":["libthreejs@0.0.129-r"],"category":"Development","author":"Xuan Sang LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ShaderPlayground.md","pkgname":"ShaderPlayground","name":"OpenGL Shader Playground"},{"version":"0.11.1-r","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Katex.zip","dependencies":[],"category":"Library","author":"","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Katex.md","pkgname":"Katex","name":"Katex"},{"version":"2.6.2-r","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libplotly.zip","dependencies":[],"category":"Library","author":"Dany LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libplotly.md","pkgname":"libplotly","name":"Plotly"},{"version":"0.0.2-a","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/DBDecoder.zip","dependencies":[],"category":"Other","author":"","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/DBDecoder.md","pkgname":"DBDecoder","name":"DBDecoder"},{"version":"2.18.0-r","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/SimpleMDE.zip","dependencies":[],"category":"Library","author":"","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/SimpleMDE.md","pkgname":"SimpleMDE","name":"EasyMDE"},{"version":"0.1.2-b","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libantosdk.zip","dependencies":[],"category":"Development","author":"Xuan Sang LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libantosdk.md","pkgname":"libantosdk","name":"AntOS SDK builder"},{"version":"0.1.5-b","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/GitGraph.zip","dependencies":[],"category":"Development","author":"Dany LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/GitGraph.md","pkgname":"GitGraph","name":"GIT Visualization"},{"version":"0.1.6-a","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/DiffEditor.zip","dependencies":["AceDiff@3.0.3-r"],"category":"Development","author":"","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/DiffEditor.md","pkgname":"DiffEditor","name":"Diff Editor"},{"version":"0.1.0-a","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/SQLiteDB.zip","dependencies":[],"category":"Library","author":"Dany LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/SQLiteDB.md","pkgname":"SQLiteDB","name":"SQLite3 Browser"},{"version":"0.1.1-a","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/MarkOn.zip","dependencies":["SimpleMDE@2.18.0-r"],"category":"Office","author":"Xuan Sang LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/MarkOn.md","pkgname":"MarkOn","name":"Markdown editor"},{"version":"0.1.1-b","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Dockman.zip","dependencies":[],"category":"Development","author":"Xuan Sang LE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Dockman.md","pkgname":"Dockman","name":"Remote Docker Manager"}]
\ No newline at end of file
+[{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libpdfjs.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libpdfjs.zip","category":"Library","dependencies":[],"author":"Xuan Sang LE","version":"2.6.347-r","pkgname":"libpdfjs","name":"PDF JS library"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/AntunnelPlugins.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/AntunnelPlugins.zip","category":"Library","dependencies":["Antunnel@0.2.0-b"],"author":"Dany LE","version":"0.1.2-a","pkgname":"AntunnelPlugins","name":"Antunnel Plugins"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/xTerm.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/xTerm.zip","category":"Library","dependencies":[],"author":"","version":"5.1.0-r","pkgname":"xTerm","name":"xTerm Library"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ServerLogClient.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ServerLogClient.zip","category":"System","dependencies":["Antunnel@0.2.1-b"],"author":"","version":"0.1.3-b","pkgname":"ServerLogClient","name":"Server log monitor"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/VizApp.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/VizApp.zip","category":"Graphics","dependencies":["ACECore@1.4.12-r"],"author":"Xuan Sang LE","version":"0.1.0-a","pkgname":"VizApp","name":"Viz editor"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/LuaPlayground.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/LuaPlayground.zip","category":"Development","dependencies":["ACECore@1.4.12-r"],"author":"Xuan Sang LE","version":"0.1.1-a","pkgname":"LuaPlayground","name":"LuaPlayground"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Clipper.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Clipper.zip","category":"Utility","dependencies":[],"author":"Xuan Sang LE","version":"0.1.4-a","pkgname":"Clipper","name":"Clipper"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libfabric.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libfabric.zip","category":"Library","dependencies":[],"author":"","version":"4.4.0-r","pkgname":"libfabric","name":"Fabric.js library"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ImageEditor.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ImageEditor.zip","category":"Graphics","dependencies":["libfabric@4.4.0-r"],"author":"Xuan Sang LE","version":"0.1.0-a","pkgname":"ImageEditor","name":"Image editor"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Antedit.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Antedit.zip","category":"Development","dependencies":["MonacoCore@0.33.0-r"],"author":"Xuan Sang LE","version":"0.2.4-b","pkgname":"Antedit","name":"Antos Editor"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/MonacoCore.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/MonacoCore.zip","category":"Library","dependencies":[],"author":"","version":"0.33.0-r","pkgname":"MonacoCore","name":"Monaco editor core"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/OnlyOffice.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/OnlyOffice.zip","category":"Office","dependencies":[],"author":"Xuan Sang LE","version":"0.1.8-a","pkgname":"OnlyOffice","name":"Office Suite"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/AceDiff.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/AceDiff.zip","category":"Library","dependencies":["ACECore@1.4.12-r"],"author":"","version":"3.0.3-r","pkgname":"AceDiff","name":"AceDiff addon library"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/TinyEditor.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/TinyEditor.zip","category":"Other","dependencies":[],"author":"Xuan Sang LE","version":"0.0.4-a","pkgname":"TinyEditor","name":"Tiny editor"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/RemoteDesktop.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/RemoteDesktop.zip","category":"Internet","dependencies":[],"author":"Dany LE","version":"0.1.16-b","pkgname":"RemoteDesktop","name":"WVNC remote desktop"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ACECore.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ACECore.zip","category":"Library","dependencies":[],"author":"","version":"1.4.12-r","pkgname":"ACECore","name":"ACE Editor core"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/GPClient.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/GPClient.zip","category":"Internet","dependencies":[],"author":"Xuan Sang LE","version":"0.1.4-a","pkgname":"GPClient","name":"Generic Purpose client"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Preview.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Preview.zip","category":"Graphics","dependencies":["libpdfjs@2.6.347-r"],"author":"Xuan Sang LE","version":"0.1.3-a","pkgname":"Preview","name":"Preview"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Blogger.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Blogger.zip","category":"Internet","dependencies":["SimpleMDE@2.18.0-r","Katex@0.11.1-r","SQLiteDB@0.1.0-a"],"author":"Xuan Sang LE","version":"0.2.12-a","pkgname":"Blogger","name":"Blogging application"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/RemoteCamera.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/RemoteCamera.zip","category":"Graphics","dependencies":["libjpeg@0.1.1-a","Antunnel@0.1.8-a"],"author":"","version":"0.1.5-a","pkgname":"RemoteCamera","name":"Remote Camera"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Docify.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Docify.zip","category":"Office","dependencies":["SQLiteDB@0.1.0-a"],"author":"Dany LE","version":"0.1.0-b","pkgname":"Docify","name":"Docify"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/LibreOffice.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/LibreOffice.zip","category":"Office","dependencies":[],"author":"Dany LE","version":"0.1.4-a","pkgname":"LibreOffice","name":"Libre Office Online"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ActivityMonitor.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ActivityMonitor.zip","category":"System","dependencies":[],"author":"Xuan Sang LE","version":"0.0.8-b","pkgname":"ActivityMonitor","name":"Activity monitor"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/vTerm.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/vTerm.zip","category":"System","dependencies":["Antunnel@0.2.1-b","xTerm@5.1.0-r"],"author":"Xuan Sang LE","version":"0.1.20-a","pkgname":"vTerm","name":"Virtual Terminal"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/vfsx.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/vfsx.zip","category":"Library","dependencies":[],"author":"Dany LE","version":"0.1.0-b","pkgname":"vfsx","name":"AntOS VFS handles"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/About.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/About.zip","category":"Utility","dependencies":[],"author":"Xuan Sang LE","version":"0.1.2-b","pkgname":"About","name":"About AntOS"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libwvnc.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libwvnc.zip","category":"Library","dependencies":["libjpeg@0.1.1-a"],"author":"","version":"0.1.2-a","pkgname":"libwvnc","name":"libwvnc"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/CodePad.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/CodePad.zip","category":"Development","dependencies":["ACECore@1.4.12-r"],"author":"Xuan Sang LE","version":"0.1.6-b","pkgname":"CodePad","name":"Code"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Booklet.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Booklet.zip","category":"Office","dependencies":["SimpleMDE@2.18.0-r","Katex@0.11.1-r"],"author":"Xuan Sang LE","version":"0.2.5-a","pkgname":"Booklet","name":"Booklet"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Antunnel.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Antunnel.zip","category":"Library","dependencies":[],"author":"Xuan Sang LE","version":"0.2.1-b","pkgname":"Antunnel","name":"Antunnel"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Archive.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Archive.zip","category":"Utility","dependencies":[],"author":"Xuan Sang LE","version":"0.0.4-a","pkgname":"Archive","name":"Archive"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ShowCase.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ShowCase.zip","category":"Utility","dependencies":[],"author":"Xuan Sang LE","version":"0.0.7-a","pkgname":"ShowCase","name":"ShowCase"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libthreejs.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libthreejs.zip","category":"Library","dependencies":[],"author":"","version":"0.0.129-r","pkgname":"libthreejs","name":"libthreejs"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/GraphEditor.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/GraphEditor.zip","category":"Graphics","dependencies":["ACECore@1.4.12-r"],"author":"Xuan Sang LE","version":"0.1.2-a","pkgname":"GraphEditor","name":"Graph Editor"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/SystemControl.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/SystemControl.zip","category":"System","dependencies":["Antunnel@0.2.1-b"],"author":"","version":"0.1.12-a","pkgname":"SystemControl","name":"System monitoring"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ShaderPlayground.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ShaderPlayground.zip","category":"Development","dependencies":["libthreejs@0.0.129-r"],"author":"Xuan Sang LE","version":"0.0.4-a","pkgname":"ShaderPlayground","name":"OpenGL Shader Playground"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Katex.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Katex.zip","category":"Library","dependencies":[],"author":"","version":"0.11.1-r","pkgname":"Katex","name":"Katex"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libplotly.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libplotly.zip","category":"Library","dependencies":[],"author":"Dany LE","version":"2.6.2-r","pkgname":"libplotly","name":"Plotly"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/DBDecoder.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/DBDecoder.zip","category":"Other","dependencies":[],"author":"","version":"0.0.2-a","pkgname":"DBDecoder","name":"DBDecoder"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/SimpleMDE.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/SimpleMDE.zip","category":"Library","dependencies":[],"author":"","version":"2.18.0-r","pkgname":"SimpleMDE","name":"EasyMDE"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libantosdk.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libantosdk.zip","category":"Development","dependencies":[],"author":"Xuan Sang LE","version":"0.1.2-b","pkgname":"libantosdk","name":"AntOS SDK builder"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/GitGraph.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/GitGraph.zip","category":"Development","dependencies":[],"author":"Dany LE","version":"0.1.5-b","pkgname":"GitGraph","name":"GIT Visualization"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/DiffEditor.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/DiffEditor.zip","category":"Development","dependencies":["AceDiff@3.0.3-r"],"author":"","version":"0.1.6-a","pkgname":"DiffEditor","name":"Diff Editor"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/SQLiteDB.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/SQLiteDB.zip","category":"Library","dependencies":[],"author":"Dany LE","version":"0.1.0-a","pkgname":"SQLiteDB","name":"SQLite3 Browser"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/MarkOn.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/MarkOn.zip","category":"Office","dependencies":["SimpleMDE@2.18.0-r"],"author":"Xuan Sang LE","version":"0.1.1-a","pkgname":"MarkOn","name":"Markdown editor"},{"description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Dockman.md","download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Dockman.zip","category":"Development","dependencies":[],"author":"Xuan Sang LE","version":"0.1.1-b","pkgname":"Dockman","name":"Remote Docker Manager"}]
\ No newline at end of file
diff --git a/release/vTerm.zip b/release/vTerm.zip
index f77be8a..003c43d 100644
Binary files a/release/vTerm.zip and b/release/vTerm.zip differ
diff --git a/release/vfsx.zip b/release/vfsx.zip
index 871737a..e1fb21f 100644
Binary files a/release/vfsx.zip and b/release/vfsx.zip differ
diff --git a/release/xTerm.zip b/release/xTerm.zip
index 66f50c1..18bae41 100644
Binary files a/release/xTerm.zip and b/release/xTerm.zip differ
diff --git a/vTerm/build/release/vTerm.zip b/vTerm/build/release/vTerm.zip
index f77be8a..003c43d 100644
Binary files a/vTerm/build/release/vTerm.zip and b/vTerm/build/release/vTerm.zip differ
diff --git a/vfsx/build/release/vfsx.zip b/vfsx/build/release/vfsx.zip
index 871737a..e1fb21f 100644
Binary files a/vfsx/build/release/vfsx.zip and b/vfsx/build/release/vfsx.zip differ
diff --git a/xTerm/build/release/xTerm.zip b/xTerm/build/release/xTerm.zip
index 66f50c1..18bae41 100644
Binary files a/xTerm/build/release/xTerm.zip and b/xTerm/build/release/xTerm.zip differ