pi-forge 1.2.4 → 1.3.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 +1 -1
- package/dist/client/assets/{CodeMirrorEditor-M7HIAKX2.js → CodeMirrorEditor-BuLFJjB1.js} +13 -13
- package/dist/client/assets/CodeMirrorEditor-BuLFJjB1.js.map +1 -0
- package/dist/client/assets/index-CEqSkIuy.css +1 -0
- package/dist/client/assets/index-GubcPYw6.js +375 -0
- package/dist/client/assets/index-GubcPYw6.js.map +1 -0
- package/dist/client/assets/{workbox-window.prod.es5-Cch4wiA5.js → workbox-window.prod.es5-Bd17z0YL.js} +2 -2
- package/dist/client/assets/{workbox-window.prod.es5-Cch4wiA5.js.map → workbox-window.prod.es5-Bd17z0YL.js.map} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/client/sw.js +1 -1
- package/dist/client/sw.js.map +1 -1
- package/dist/server/agent-extensions/compaction-continuation.js +65 -0
- package/dist/server/agent-extensions/compaction-continuation.js.map +1 -0
- package/dist/server/agent-resource-loader.js +10 -0
- package/dist/server/agent-resource-loader.js.map +1 -1
- package/dist/server/git-clone.js +364 -0
- package/dist/server/git-clone.js.map +1 -0
- package/dist/server/index.js +26 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/mcp/tool-bridge.js +14 -8
- package/dist/server/mcp/tool-bridge.js.map +1 -1
- package/dist/server/orchestration/config.js +61 -0
- package/dist/server/orchestration/config.js.map +1 -0
- package/dist/server/orchestration/event-bridge.js +93 -0
- package/dist/server/orchestration/event-bridge.js.map +1 -0
- package/dist/server/orchestration/inbox.js +199 -0
- package/dist/server/orchestration/inbox.js.map +1 -0
- package/dist/server/orchestration/init.js +39 -0
- package/dist/server/orchestration/init.js.map +1 -0
- package/dist/server/orchestration/store.js +352 -0
- package/dist/server/orchestration/store.js.map +1 -0
- package/dist/server/orchestration/tools.js +769 -0
- package/dist/server/orchestration/tools.js.map +1 -0
- package/dist/server/orchestration/types.js +57 -0
- package/dist/server/orchestration/types.js.map +1 -0
- package/dist/server/processes/envelope.js +60 -0
- package/dist/server/processes/envelope.js.map +1 -0
- package/dist/server/processes/log-store.js +132 -0
- package/dist/server/processes/log-store.js.map +1 -0
- package/dist/server/processes/manager.js +370 -0
- package/dist/server/processes/manager.js.map +1 -0
- package/dist/server/processes/prompt-strings.js +43 -0
- package/dist/server/processes/prompt-strings.js.map +1 -0
- package/dist/server/processes/tool.js +273 -0
- package/dist/server/processes/tool.js.map +1 -0
- package/dist/server/processes/types.js +21 -0
- package/dist/server/processes/types.js.map +1 -0
- package/dist/server/processes/watches.js +59 -0
- package/dist/server/processes/watches.js.map +1 -0
- package/dist/server/project-manager.js +46 -32
- package/dist/server/project-manager.js.map +1 -1
- package/dist/server/routes/config.js +5 -0
- package/dist/server/routes/config.js.map +1 -1
- package/dist/server/routes/control.js +9 -0
- package/dist/server/routes/control.js.map +1 -1
- package/dist/server/routes/health.js +14 -1
- package/dist/server/routes/health.js.map +1 -1
- package/dist/server/routes/orchestration.js +464 -0
- package/dist/server/routes/orchestration.js.map +1 -0
- package/dist/server/routes/processes.js +228 -0
- package/dist/server/routes/processes.js.map +1 -0
- package/dist/server/routes/projects.js +239 -14
- package/dist/server/routes/projects.js.map +1 -1
- package/dist/server/routes/sessions.js +53 -34
- package/dist/server/routes/sessions.js.map +1 -1
- package/dist/server/routes/webhooks.js +362 -0
- package/dist/server/routes/webhooks.js.map +1 -0
- package/dist/server/session-registry.js +246 -3
- package/dist/server/session-registry.js.map +1 -1
- package/dist/server/sse-bridge.js +226 -18
- package/dist/server/sse-bridge.js.map +1 -1
- package/dist/server/webhooks/dispatcher.js +254 -0
- package/dist/server/webhooks/dispatcher.js.map +1 -0
- package/dist/server/webhooks/event-bridge.js +185 -0
- package/dist/server/webhooks/event-bridge.js.map +1 -0
- package/dist/server/webhooks/init.js +55 -0
- package/dist/server/webhooks/init.js.map +1 -0
- package/dist/server/webhooks/store.js +394 -0
- package/dist/server/webhooks/store.js.map +1 -0
- package/dist/server/webhooks/types.js +32 -0
- package/dist/server/webhooks/types.js.map +1 -0
- package/package.json +4 -4
- package/dist/client/assets/CodeMirrorEditor-M7HIAKX2.js.map +0 -1
- package/dist/client/assets/index-DFDpaYie.css +0 -1
- package/dist/client/assets/index-DjYKKZRm.js +0 -363
- package/dist/client/assets/index-DjYKKZRm.js.map +0 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
try{self[`workbox:window:7.4.0`]&&_()}catch{}function e(e,t){return new Promise((function(n){var r=new MessageChannel;r.port1.onmessage=function(e){n(e.data)},e.postMessage(t,[r.port2])}))}function t(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function n(e,t,n){return t&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,`value`in r&&(r.writable=!0),Object.defineProperty(e,a(r.key),r)}}(e.prototype,t),Object.defineProperty(e
|
|
1
|
+
try{self[`workbox:window:7.4.0`]&&_()}catch{}function e(e,t){return new Promise((function(n){var r=new MessageChannel;r.port1.onmessage=function(e){n(e.data)},e.postMessage(t,[r.port2])}))}function t(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function n(e,t,n){return t&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,`value`in r&&(r.writable=!0),Object.defineProperty(e,a(r.key),r)}}(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function r(e,n){var r=typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(r)return(r=r.call(e)).next.bind(r);if(Array.isArray(e)||(r=function(e,n){if(e){if(typeof e==`string`)return t(e,n);var r={}.toString.call(e).slice(8,-1);return r===`Object`&&e.constructor&&(r=e.constructor.name),r===`Map`||r===`Set`?Array.from(e):r===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?t(e,n):void 0}}(e))||n){r&&(e=r);var i=0;return function(){return i>=e.length?{done:!0}:{done:!1,value:e[i++]}}}throw TypeError(`Invalid attempt to iterate non-iterable instance.
|
|
2
2
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function i(e,t){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},i(e,t)}function a(e){var t=function(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return String(e)}(e,`string`);return typeof t==`symbol`?t:t+``}try{self[`workbox:core:7.4.0`]&&_()}catch{}var o=function(){var e=this;this.promise=new Promise((function(t,n){e.resolve=t,e.reject=n}))};function s(e,t){var n=location.href;return new URL(e,n).href===new URL(t,n).href}var c=function(e,t){this.type=e,Object.assign(this,t)};function l(e,t,n){return e&&e.then||(e=Promise.resolve(e)),t?e.then(t):e}function u(){}var d={type:`SKIP_WAITING`};function f(e,t){return e&&e.then?e.then(u):Promise.resolve()}var p=function(t){function r(e,n){var r,i;return n===void 0&&(n={}),(r=t.call(this)||this).nn={},r.tn=0,r.rn=new o,r.en=new o,r.on=new o,r.un=0,r.an=new Set,r.cn=function(){var e=r.fn,t=e.installing;r.tn>0||!s(t.scriptURL,r.sn.toString())||performance.now()>r.un+6e4?(r.vn=t,e.removeEventListener(`updatefound`,r.cn)):(r.hn=t,r.an.add(t),r.rn.resolve(t)),++r.tn,t.addEventListener(`statechange`,r.ln)},r.ln=function(e){var t=r.fn,n=e.target,i=n.state,a=n===r.vn,o={sw:n,isExternal:a,originalEvent:e};!a&&r.mn&&(o.isUpdate=!0),r.dispatchEvent(new c(i,o)),i===`installed`?r.wn=self.setTimeout((function(){i===`installed`&&t.waiting===n&&r.dispatchEvent(new c(`waiting`,o))}),200):i===`activating`&&(clearTimeout(r.wn),a||r.en.resolve(n))},r.yn=function(e){var t=r.hn,n=t!==navigator.serviceWorker.controller;r.dispatchEvent(new c(`controlling`,{isExternal:n,originalEvent:e,sw:t,isUpdate:r.mn})),n||r.on.resolve(t)},r.gn=(i=function(e){var t=e.data,n=e.ports,i=e.source;return l(r.getSW(),(function(){r.an.has(i)&&r.dispatchEvent(new c(`message`,{data:t,originalEvent:e,ports:n,sw:i}))}))},function(){var e=[...arguments];try{return Promise.resolve(i.apply(this,e))}catch(e){return Promise.reject(e)}}),r.sn=e,r.nn=n,navigator.serviceWorker.addEventListener(`message`,r.gn),r}var a,u=t;(a=r).prototype=Object.create(u.prototype),a.prototype.constructor=a,i(a,u);var p=r.prototype;return p.register=function(e){var t=(e===void 0?{}:e).immediate,n=t!==void 0&&t;try{var r=this;return l(function(e,t){var n=e();return n&&n.then?n.then(t):t(n)}((function(){if(!n&&document.readyState!==`complete`)return f(new Promise((function(e){return window.addEventListener(`load`,e)})))}),(function(){return r.mn=!!navigator.serviceWorker.controller,r.dn=r.pn(),l(r.bn(),(function(e){r.fn=e,r.dn&&(r.hn=r.dn,r.en.resolve(r.dn),r.on.resolve(r.dn),r.dn.addEventListener(`statechange`,r.ln,{once:!0}));var t=r.fn.waiting;return t&&s(t.scriptURL,r.sn.toString())&&(r.hn=t,Promise.resolve().then((function(){r.dispatchEvent(new c(`waiting`,{sw:t,wasWaitingBeforeRegister:!0}))})).then((function(){}))),r.hn&&(r.rn.resolve(r.hn),r.an.add(r.hn)),r.fn.addEventListener(`updatefound`,r.cn),navigator.serviceWorker.addEventListener(`controllerchange`,r.yn),r.fn}))})))}catch(e){return Promise.reject(e)}},p.update=function(){try{return this.fn?l(f(this.fn.update())):l()}catch(e){return Promise.reject(e)}},p.getSW=function(){return this.hn===void 0?this.rn.promise:Promise.resolve(this.hn)},p.messageSW=function(t){try{return l(this.getSW(),(function(n){return e(n,t)}))}catch(e){return Promise.reject(e)}},p.messageSkipWaiting=function(){this.fn&&this.fn.waiting&&e(this.fn.waiting,d)},p.pn=function(){var e=navigator.serviceWorker.controller;return e&&s(e.scriptURL,this.sn.toString())?e:void 0},p.bn=function(){try{var e=this;return l(function(e,t){try{var n=e()}catch(e){return t(e)}return n&&n.then?n.then(void 0,t):n}((function(){return l(navigator.serviceWorker.register(e.sn,e.nn),(function(t){return e.un=performance.now(),t}))}),(function(e){throw e})))}catch(e){return Promise.reject(e)}},n(r,[{key:`active`,get:function(){return this.en.promise}},{key:`controlling`,get:function(){return this.on.promise}}])}(function(){function e(){this.Pn=new Map}var t=e.prototype;return t.addEventListener=function(e,t){this.jn(e).add(t)},t.removeEventListener=function(e,t){this.jn(e).delete(t)},t.dispatchEvent=function(e){e.target=this;for(var t,n=r(this.jn(e.type));!(t=n()).done;)(0,t.value)(e)},t.jn=function(e){return this.Pn.has(e)||this.Pn.set(e,new Set),this.Pn.get(e)},e}());export{p as Workbox};
|
|
3
|
-
//# sourceMappingURL=workbox-window.prod.es5-
|
|
3
|
+
//# sourceMappingURL=workbox-window.prod.es5-Bd17z0YL.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workbox-window.prod.es5-Cch4wiA5.js","names":[],"sources":["../../../../node_modules/workbox-window/build/workbox-window.prod.es5.mjs"],"sourcesContent":["try{self[\"workbox:window:7.4.0\"]&&_()}catch(n){}function n(n,t){return new Promise((function(r){var e=new MessageChannel;e.port1.onmessage=function(n){r(n.data)},n.postMessage(t,[e.port2])}))}function t(n,t){(null==t||t>n.length)&&(t=n.length);for(var r=0,e=Array(t);r<t;r++)e[r]=n[r];return e}function r(n,t,r){return t&&function(n,t){for(var r=0;r<t.length;r++){var e=t[r];e.enumerable=e.enumerable||!1,e.configurable=!0,\"value\"in e&&(e.writable=!0),Object.defineProperty(n,o(e.key),e)}}(n.prototype,t),Object.defineProperty(n,\"prototype\",{writable:!1}),n}function e(n,r){var e=\"undefined\"!=typeof Symbol&&n[Symbol.iterator]||n[\"@@iterator\"];if(e)return(e=e.call(n)).next.bind(e);if(Array.isArray(n)||(e=function(n,r){if(n){if(\"string\"==typeof n)return t(n,r);var e={}.toString.call(n).slice(8,-1);return\"Object\"===e&&n.constructor&&(e=n.constructor.name),\"Map\"===e||\"Set\"===e?Array.from(n):\"Arguments\"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?t(n,r):void 0}}(n))||r){e&&(n=e);var i=0;return function(){return i>=n.length?{done:!0}:{done:!1,value:n[i++]}}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}function i(n,t){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(n,t){return n.__proto__=t,n},i(n,t)}function o(n){var t=function(n,t){if(\"object\"!=typeof n||!n)return n;var r=n[Symbol.toPrimitive];if(void 0!==r){var e=r.call(n,t);if(\"object\"!=typeof e)return e;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(n)}(n,\"string\");return\"symbol\"==typeof t?t:t+\"\"}try{self[\"workbox:core:7.4.0\"]&&_()}catch(n){}var u=function(){var n=this;this.promise=new Promise((function(t,r){n.resolve=t,n.reject=r}))};function a(n,t){var r=location.href;return new URL(n,r).href===new URL(t,r).href}var c=function(n,t){this.type=n,Object.assign(this,t)};function f(n,t,r){return n&&n.then||(n=Promise.resolve(n)),t?n.then(t):n}function s(){}var v={type:\"SKIP_WAITING\"};function h(n,t){return n&&n.then?n.then(s):Promise.resolve()}var l=function(t){function e(n,r){var e,i;return void 0===r&&(r={}),(e=t.call(this)||this).nn={},e.tn=0,e.rn=new u,e.en=new u,e.on=new u,e.un=0,e.an=new Set,e.cn=function(){var n=e.fn,t=n.installing;e.tn>0||!a(t.scriptURL,e.sn.toString())||performance.now()>e.un+6e4?(e.vn=t,n.removeEventListener(\"updatefound\",e.cn)):(e.hn=t,e.an.add(t),e.rn.resolve(t)),++e.tn,t.addEventListener(\"statechange\",e.ln)},e.ln=function(n){var t=e.fn,r=n.target,i=r.state,o=r===e.vn,u={sw:r,isExternal:o,originalEvent:n};!o&&e.mn&&(u.isUpdate=!0),e.dispatchEvent(new c(i,u)),\"installed\"===i?e.wn=self.setTimeout((function(){\"installed\"===i&&t.waiting===r&&e.dispatchEvent(new c(\"waiting\",u))}),200):\"activating\"===i&&(clearTimeout(e.wn),o||e.en.resolve(r))},e.yn=function(n){var t=e.hn,r=t!==navigator.serviceWorker.controller;e.dispatchEvent(new c(\"controlling\",{isExternal:r,originalEvent:n,sw:t,isUpdate:e.mn})),r||e.on.resolve(t)},e.gn=(i=function(n){var t=n.data,r=n.ports,i=n.source;return f(e.getSW(),(function(){e.an.has(i)&&e.dispatchEvent(new c(\"message\",{data:t,originalEvent:n,ports:r,sw:i}))}))},function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];try{return Promise.resolve(i.apply(this,n))}catch(n){return Promise.reject(n)}}),e.sn=n,e.nn=r,navigator.serviceWorker.addEventListener(\"message\",e.gn),e}var o,s;s=t,(o=e).prototype=Object.create(s.prototype),o.prototype.constructor=o,i(o,s);var l=e.prototype;return l.register=function(n){var t=(void 0===n?{}:n).immediate,r=void 0!==t&&t;try{var e=this;return f(function(n,t){var r=n();if(r&&r.then)return r.then(t);return t(r)}((function(){if(!r&&\"complete\"!==document.readyState)return h(new Promise((function(n){return window.addEventListener(\"load\",n)})))}),(function(){return e.mn=Boolean(navigator.serviceWorker.controller),e.dn=e.pn(),f(e.bn(),(function(n){e.fn=n,e.dn&&(e.hn=e.dn,e.en.resolve(e.dn),e.on.resolve(e.dn),e.dn.addEventListener(\"statechange\",e.ln,{once:!0}));var t=e.fn.waiting;return t&&a(t.scriptURL,e.sn.toString())&&(e.hn=t,Promise.resolve().then((function(){e.dispatchEvent(new c(\"waiting\",{sw:t,wasWaitingBeforeRegister:!0}))})).then((function(){}))),e.hn&&(e.rn.resolve(e.hn),e.an.add(e.hn)),e.fn.addEventListener(\"updatefound\",e.cn),navigator.serviceWorker.addEventListener(\"controllerchange\",e.yn),e.fn}))})))}catch(n){return Promise.reject(n)}},l.update=function(){try{return this.fn?f(h(this.fn.update())):f()}catch(n){return Promise.reject(n)}},l.getSW=function(){return void 0!==this.hn?Promise.resolve(this.hn):this.rn.promise},l.messageSW=function(t){try{return f(this.getSW(),(function(r){return n(r,t)}))}catch(n){return Promise.reject(n)}},l.messageSkipWaiting=function(){this.fn&&this.fn.waiting&&n(this.fn.waiting,v)},l.pn=function(){var n=navigator.serviceWorker.controller;return n&&a(n.scriptURL,this.sn.toString())?n:void 0},l.bn=function(){try{var n=this;return f(function(n,t){try{var r=n()}catch(n){return t(n)}if(r&&r.then)return r.then(void 0,t);return r}((function(){return f(navigator.serviceWorker.register(n.sn,n.nn),(function(t){return n.un=performance.now(),t}))}),(function(n){throw n})))}catch(n){return Promise.reject(n)}},r(e,[{key:\"active\",get:function(){return this.en.promise}},{key:\"controlling\",get:function(){return this.on.promise}}])}(function(){function n(){this.Pn=new Map}var t=n.prototype;return t.addEventListener=function(n,t){this.jn(n).add(t)},t.removeEventListener=function(n,t){this.jn(n).delete(t)},t.dispatchEvent=function(n){n.target=this;for(var t,r=e(this.jn(n.type));!(t=r()).done;){(0,t.value)(n)}},t.jn=function(n){return this.Pn.has(n)||this.Pn.set(n,new Set),this.Pn.get(n)},n}());export{l as Workbox,c as WorkboxEvent,n as messageSW};\n//# sourceMappingURL=workbox-window.prod.es5.mjs.map\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"workbox-window.prod.es5-Bd17z0YL.js","names":[],"sources":["../../../../node_modules/workbox-window/build/workbox-window.prod.es5.mjs"],"sourcesContent":["try{self[\"workbox:window:7.4.0\"]&&_()}catch(n){}function n(n,t){return new Promise((function(r){var e=new MessageChannel;e.port1.onmessage=function(n){r(n.data)},n.postMessage(t,[e.port2])}))}function t(n,t){(null==t||t>n.length)&&(t=n.length);for(var r=0,e=Array(t);r<t;r++)e[r]=n[r];return e}function r(n,t,r){return t&&function(n,t){for(var r=0;r<t.length;r++){var e=t[r];e.enumerable=e.enumerable||!1,e.configurable=!0,\"value\"in e&&(e.writable=!0),Object.defineProperty(n,o(e.key),e)}}(n.prototype,t),Object.defineProperty(n,\"prototype\",{writable:!1}),n}function e(n,r){var e=\"undefined\"!=typeof Symbol&&n[Symbol.iterator]||n[\"@@iterator\"];if(e)return(e=e.call(n)).next.bind(e);if(Array.isArray(n)||(e=function(n,r){if(n){if(\"string\"==typeof n)return t(n,r);var e={}.toString.call(n).slice(8,-1);return\"Object\"===e&&n.constructor&&(e=n.constructor.name),\"Map\"===e||\"Set\"===e?Array.from(n):\"Arguments\"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?t(n,r):void 0}}(n))||r){e&&(n=e);var i=0;return function(){return i>=n.length?{done:!0}:{done:!1,value:n[i++]}}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}function i(n,t){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(n,t){return n.__proto__=t,n},i(n,t)}function o(n){var t=function(n,t){if(\"object\"!=typeof n||!n)return n;var r=n[Symbol.toPrimitive];if(void 0!==r){var e=r.call(n,t);if(\"object\"!=typeof e)return e;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(n)}(n,\"string\");return\"symbol\"==typeof t?t:t+\"\"}try{self[\"workbox:core:7.4.0\"]&&_()}catch(n){}var u=function(){var n=this;this.promise=new Promise((function(t,r){n.resolve=t,n.reject=r}))};function a(n,t){var r=location.href;return new URL(n,r).href===new URL(t,r).href}var c=function(n,t){this.type=n,Object.assign(this,t)};function f(n,t,r){return n&&n.then||(n=Promise.resolve(n)),t?n.then(t):n}function s(){}var v={type:\"SKIP_WAITING\"};function h(n,t){return n&&n.then?n.then(s):Promise.resolve()}var l=function(t){function e(n,r){var e,i;return void 0===r&&(r={}),(e=t.call(this)||this).nn={},e.tn=0,e.rn=new u,e.en=new u,e.on=new u,e.un=0,e.an=new Set,e.cn=function(){var n=e.fn,t=n.installing;e.tn>0||!a(t.scriptURL,e.sn.toString())||performance.now()>e.un+6e4?(e.vn=t,n.removeEventListener(\"updatefound\",e.cn)):(e.hn=t,e.an.add(t),e.rn.resolve(t)),++e.tn,t.addEventListener(\"statechange\",e.ln)},e.ln=function(n){var t=e.fn,r=n.target,i=r.state,o=r===e.vn,u={sw:r,isExternal:o,originalEvent:n};!o&&e.mn&&(u.isUpdate=!0),e.dispatchEvent(new c(i,u)),\"installed\"===i?e.wn=self.setTimeout((function(){\"installed\"===i&&t.waiting===r&&e.dispatchEvent(new c(\"waiting\",u))}),200):\"activating\"===i&&(clearTimeout(e.wn),o||e.en.resolve(r))},e.yn=function(n){var t=e.hn,r=t!==navigator.serviceWorker.controller;e.dispatchEvent(new c(\"controlling\",{isExternal:r,originalEvent:n,sw:t,isUpdate:e.mn})),r||e.on.resolve(t)},e.gn=(i=function(n){var t=n.data,r=n.ports,i=n.source;return f(e.getSW(),(function(){e.an.has(i)&&e.dispatchEvent(new c(\"message\",{data:t,originalEvent:n,ports:r,sw:i}))}))},function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];try{return Promise.resolve(i.apply(this,n))}catch(n){return Promise.reject(n)}}),e.sn=n,e.nn=r,navigator.serviceWorker.addEventListener(\"message\",e.gn),e}var o,s;s=t,(o=e).prototype=Object.create(s.prototype),o.prototype.constructor=o,i(o,s);var l=e.prototype;return l.register=function(n){var t=(void 0===n?{}:n).immediate,r=void 0!==t&&t;try{var e=this;return f(function(n,t){var r=n();if(r&&r.then)return r.then(t);return t(r)}((function(){if(!r&&\"complete\"!==document.readyState)return h(new Promise((function(n){return window.addEventListener(\"load\",n)})))}),(function(){return e.mn=Boolean(navigator.serviceWorker.controller),e.dn=e.pn(),f(e.bn(),(function(n){e.fn=n,e.dn&&(e.hn=e.dn,e.en.resolve(e.dn),e.on.resolve(e.dn),e.dn.addEventListener(\"statechange\",e.ln,{once:!0}));var t=e.fn.waiting;return t&&a(t.scriptURL,e.sn.toString())&&(e.hn=t,Promise.resolve().then((function(){e.dispatchEvent(new c(\"waiting\",{sw:t,wasWaitingBeforeRegister:!0}))})).then((function(){}))),e.hn&&(e.rn.resolve(e.hn),e.an.add(e.hn)),e.fn.addEventListener(\"updatefound\",e.cn),navigator.serviceWorker.addEventListener(\"controllerchange\",e.yn),e.fn}))})))}catch(n){return Promise.reject(n)}},l.update=function(){try{return this.fn?f(h(this.fn.update())):f()}catch(n){return Promise.reject(n)}},l.getSW=function(){return void 0!==this.hn?Promise.resolve(this.hn):this.rn.promise},l.messageSW=function(t){try{return f(this.getSW(),(function(r){return n(r,t)}))}catch(n){return Promise.reject(n)}},l.messageSkipWaiting=function(){this.fn&&this.fn.waiting&&n(this.fn.waiting,v)},l.pn=function(){var n=navigator.serviceWorker.controller;return n&&a(n.scriptURL,this.sn.toString())?n:void 0},l.bn=function(){try{var n=this;return f(function(n,t){try{var r=n()}catch(n){return t(n)}if(r&&r.then)return r.then(void 0,t);return r}((function(){return f(navigator.serviceWorker.register(n.sn,n.nn),(function(t){return n.un=performance.now(),t}))}),(function(n){throw n})))}catch(n){return Promise.reject(n)}},r(e,[{key:\"active\",get:function(){return this.en.promise}},{key:\"controlling\",get:function(){return this.on.promise}}])}(function(){function n(){this.Pn=new Map}var t=n.prototype;return t.addEventListener=function(n,t){this.jn(n).add(t)},t.removeEventListener=function(n,t){this.jn(n).delete(t)},t.dispatchEvent=function(n){n.target=this;for(var t,r=e(this.jn(n.type));!(t=r()).done;){(0,t.value)(n)}},t.jn=function(n){return this.Pn.has(n)||this.Pn.set(n,new Set),this.Pn.get(n)},n}());export{l as Workbox,c as WorkboxEvent,n as messageSW};\n//# sourceMappingURL=workbox-window.prod.es5.mjs.map\n"],"x_google_ignoreList":[0],"mappings":"AAAA,GAAG,CAAC,KAAK,yBAAyB,EAAE,CAAC,MAAS,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,OAAO,IAAI,SAAS,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,eAAe,EAAE,MAAM,UAAU,SAAS,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,EAAQ,GAAN,MAAS,EAAE,EAAE,UAAU,EAAE,EAAE,QAAQ,IAAI,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,OAAO,GAAG,SAAS,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,EAAE,aAAa,CAAC,EAAE,UAAU,IAAI,EAAE,SAAS,CAAC,GAAG,OAAO,eAAe,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,OAAO,eAAe,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,IAAI,EAAe,OAAO,OAApB,KAA4B,EAAE,OAAO,WAAW,EAAE,cAAc,GAAG,EAAE,OAAO,EAAE,EAAE,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,GAAa,OAAO,GAAjB,SAAmB,OAAO,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAiB,IAAX,UAAc,EAAE,cAAc,EAAE,EAAE,YAAY,MAAc,IAAR,OAAmB,IAAR,MAAU,MAAM,KAAK,CAAC,EAAgB,IAAd,aAAiB,2CAA2C,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAK,EAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,OAAO,UAAU,CAAC,OAAO,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,MAAU,UAAU;mFAAuI,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,MAAO,GAAE,OAAO,eAAe,OAAO,eAAe,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,MAAO,GAAE,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,GAAa,OAAO,GAAjB,UAAoB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,OAAO,aAAa,GAAY,IAAT,IAAK,GAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAa,OAAO,GAAjB,SAAmB,OAAO,EAAE,MAAU,UAAU,8CAA8C,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAgB,OAAO,GAAjB,SAAmB,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,uBAAuB,EAAE,CAAC,MAAS,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,KAAK,QAAQ,IAAI,SAAS,SAAS,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,IAAI,IAAI,EAAE,CAAC,EAAE,OAAO,IAAI,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,OAAO,OAAO,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,OAAO,GAAG,EAAE,OAAO,EAAE,QAAQ,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,cAAc,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,QAAQ,QAAQ,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,OAAgB,IAAT,IAAK,KAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,IAAI,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,IAAI,IAAI,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC,GAAG,YAAY,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE,oBAAoB,cAAc,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,iBAAiB,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,EAAE,cAAc,IAAI,EAAE,EAAE,CAAC,CAAC,EAAgB,IAAd,YAAgB,EAAE,GAAG,KAAK,YAAY,UAAU,CAAe,IAAd,aAAiB,EAAE,UAAU,GAAG,EAAE,cAAc,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,EAAiB,IAAf,eAAmB,aAAa,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,UAAU,cAAc,WAAW,EAAE,cAAc,IAAI,EAAE,cAAc,CAAC,WAAW,EAAE,cAAc,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,OAAO,EAAE,EAAE,MAAM,GAAG,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAK,IAAI,MAAqC,WAAa,GAAG,CAAC,OAAO,QAAQ,QAAQ,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,QAAQ,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,UAAU,cAAc,iBAAiB,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAI,EAAF,CAAK,EAAE,GAAG,UAAU,OAAO,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,UAAU,MAAO,GAAE,SAAS,SAAS,EAAE,CAAC,IAAI,GAAY,IAAT,IAAK,GAAM,CAAC,EAAE,GAAG,UAAU,EAAW,IAAT,IAAK,IAAO,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,EAAgC,OAA3B,GAAG,EAAE,KAAY,EAAE,KAAK,CAAC,EAAS,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,GAAgB,SAAS,aAAtB,WAAiC,OAAO,EAAE,IAAI,SAAS,SAAS,EAAE,CAAC,OAAO,OAAO,iBAAiB,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,UAAU,CAAC,MAAO,GAAE,GAAG,EAAQ,UAAU,cAAc,WAAY,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,EAAE,GAAG,iBAAiB,cAAc,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,QAAQ,OAAO,GAAG,EAAE,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,QAAQ,EAAE,MAAM,UAAU,CAAC,EAAE,cAAc,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,UAAU,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,iBAAiB,cAAc,EAAE,EAAE,EAAE,UAAU,cAAc,iBAAiB,mBAAmB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,QAAQ,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,UAAU,CAAC,GAAG,CAAC,OAAO,KAAK,GAAG,EAAE,EAAE,KAAK,GAAG,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,QAAQ,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,UAAU,CAAC,OAAgB,KAAK,KAAd,IAAK,GAAqC,KAAK,GAAG,QAAjC,QAAQ,QAAQ,KAAK,EAAE,CAAiB,EAAE,EAAE,UAAU,SAAS,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,MAAM,GAAG,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,QAAQ,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,mBAAmB,UAAU,CAAC,KAAK,IAAI,KAAK,GAAG,SAAS,EAAE,KAAK,GAAG,QAAQ,CAAC,CAAC,EAAE,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,UAAU,cAAc,WAAW,OAAO,GAAG,EAAE,EAAE,UAAU,KAAK,GAAG,SAAS,CAAC,EAAE,EAAE,IAAK,EAAC,EAAE,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAsC,OAAlC,GAAG,EAAE,KAAY,EAAE,KAAK,IAAK,GAAE,CAAC,EAAS,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,UAAU,cAAc,SAAS,EAAE,GAAG,EAAE,EAAE,GAAG,SAAS,EAAE,CAAC,MAAO,GAAE,GAAG,YAAY,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,QAAQ,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,SAAS,IAAI,UAAU,CAAC,OAAO,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC,IAAI,cAAc,IAAI,UAAU,CAAC,OAAO,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,SAAS,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,UAAU,MAAO,GAAE,iBAAiB,SAAS,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,oBAAoB,SAAS,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,cAAc,SAAS,EAAE,CAAC,EAAE,OAAO,KAAK,IAAI,IAAI,EAAE,EAAE,EAAE,KAAK,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,OAAQ,EAAE,EAAE,OAAO,CAAC,CAAE,EAAE,EAAE,GAAG,SAAS,EAAE,CAAC,OAAO,KAAK,GAAG,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,EAAE,IAAI,GAAG,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC"}
|
package/dist/client/index.html
CHANGED
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
<link rel="apple-touch-icon" sizes="192x192" href="/icons/icon-192.png" />
|
|
27
27
|
<link rel="apple-touch-icon" sizes="512x512" href="/icons/icon-512.png" />
|
|
28
28
|
<title>pi-forge</title>
|
|
29
|
-
<script type="module" crossorigin src="/assets/index-
|
|
30
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
29
|
+
<script type="module" crossorigin src="/assets/index-GubcPYw6.js"></script>
|
|
30
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CEqSkIuy.css">
|
|
31
31
|
<link rel="manifest" href="/manifest.webmanifest"></head>
|
|
32
32
|
<body class="bg-neutral-950 text-neutral-100 antialiased">
|
|
33
33
|
<div id="root"></div>
|
package/dist/client/sw.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
if(!self.define){let e,i={};const n=(n,s)=>(n=new URL(n+".js",s).href,i[n]||new Promise(i=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=i,document.head.appendChild(e)}else e=n,importScripts(n),i()}).then(()=>{let e=i[n];if(!e)throw new Error(`Module ${n} didn’t register its module`);return e}));self.define=(s,o)=>{const c=e||("document"in self?document.currentScript.src:"")||location.href;if(i[c])return;let r={};const
|
|
1
|
+
if(!self.define){let e,i={};const n=(n,s)=>(n=new URL(n+".js",s).href,i[n]||new Promise(i=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=i,document.head.appendChild(e)}else e=n,importScripts(n),i()}).then(()=>{let e=i[n];if(!e)throw new Error(`Module ${n} didn’t register its module`);return e}));self.define=(s,o)=>{const c=e||("document"in self?document.currentScript.src:"")||location.href;if(i[c])return;let r={};const l=e=>n(e,c),f={module:{uri:c},exports:r,require:l};i[c]=Promise.all(s.map(e=>f[e]||l(e))).then(e=>(o(...e),r))}}define(["./workbox-6d7155ed"],function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"offline.html",revision:"e4f087b40040ff045a6fd572b5fed726"},{url:"manifest.webmanifest",revision:"aef9cb4935c3fba2754da10580256c9e"},{url:"index.html",revision:"11e266c60ce3765d6e5249c0248e6a8a"},{url:"icons/icon.svg",revision:"549b462207e763a57c9dfbae214afc31"},{url:"icons/icon-maskable-512.png",revision:"734c73b2ee3cc3856c67bed196e7557f"},{url:"icons/icon-512.png",revision:"c1b37dbf870c852577dbb4733f45c9c2"},{url:"icons/icon-192.png",revision:"54082a8d4e49f4e5c2ad5646b7fb7551"},{url:"assets/workbox-window.prod.es5-Bd17z0YL.js",revision:null},{url:"assets/index-GubcPYw6.js",revision:null},{url:"assets/index-CEqSkIuy.css",revision:null},{url:"assets/CodeMirrorEditor-BuLFJjB1.js",revision:null},{url:"offline.html",revision:"e4f087b40040ff045a6fd572b5fed726"},{url:"icons/icon-192.png",revision:"54082a8d4e49f4e5c2ad5646b7fb7551"},{url:"icons/icon-512.png",revision:"c1b37dbf870c852577dbb4733f45c9c2"},{url:"icons/icon-maskable-512.png",revision:"734c73b2ee3cc3856c67bed196e7557f"},{url:"icons/icon.svg",revision:"549b462207e763a57c9dfbae214afc31"},{url:"manifest.webmanifest",revision:"aef9cb4935c3fba2754da10580256c9e"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("/index.html"),{denylist:[/^\/api\//]})),e.registerRoute(({url:e})=>e.pathname.startsWith("/api/v1/"),new e.NetworkOnly,"GET"),e.registerRoute(({request:e})=>"navigate"===e.mode,new e.NetworkFirst({cacheName:"pi-navigation",networkTimeoutSeconds:3,plugins:[new e.PrecacheFallbackPlugin({fallbackURL:"/offline.html"})]}),"GET")});
|
|
2
2
|
//# sourceMappingURL=sw.js.map
|
|
3
3
|
//# sourceMappingURL=sw.js.map
|
package/dist/client/sw.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sw.js","sources":["../../../../../../../tmp/
|
|
1
|
+
{"version":3,"file":"sw.js","sources":["../../../../../../../tmp/566d9a830e0f3c11da0f6595200a6a38/sw.js"],"sourcesContent":["import {registerRoute as workbox_routing_registerRoute} from '/home/runner/work/pi-forge/pi-forge/node_modules/workbox-routing/registerRoute.mjs';\nimport {NetworkOnly as workbox_strategies_NetworkOnly} from '/home/runner/work/pi-forge/pi-forge/node_modules/workbox-strategies/NetworkOnly.mjs';\nimport {PrecacheFallbackPlugin as workbox_precaching_PrecacheFallbackPlugin} from '/home/runner/work/pi-forge/pi-forge/node_modules/workbox-precaching/PrecacheFallbackPlugin.mjs';\nimport {NetworkFirst as workbox_strategies_NetworkFirst} from '/home/runner/work/pi-forge/pi-forge/node_modules/workbox-strategies/NetworkFirst.mjs';\nimport {clientsClaim as workbox_core_clientsClaim} from '/home/runner/work/pi-forge/pi-forge/node_modules/workbox-core/clientsClaim.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/runner/work/pi-forge/pi-forge/node_modules/workbox-precaching/precacheAndRoute.mjs';\nimport {cleanupOutdatedCaches as workbox_precaching_cleanupOutdatedCaches} from '/home/runner/work/pi-forge/pi-forge/node_modules/workbox-precaching/cleanupOutdatedCaches.mjs';\nimport {NavigationRoute as workbox_routing_NavigationRoute} from '/home/runner/work/pi-forge/pi-forge/node_modules/workbox-routing/NavigationRoute.mjs';\nimport {createHandlerBoundToURL as workbox_precaching_createHandlerBoundToURL} from '/home/runner/work/pi-forge/pi-forge/node_modules/workbox-precaching/createHandlerBoundToURL.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\nself.skipWaiting();\nworkbox_core_clientsClaim();\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"offline.html\",\n \"revision\": \"e4f087b40040ff045a6fd572b5fed726\"\n },\n {\n \"url\": \"manifest.webmanifest\",\n \"revision\": \"aef9cb4935c3fba2754da10580256c9e\"\n },\n {\n \"url\": \"index.html\",\n \"revision\": \"11e266c60ce3765d6e5249c0248e6a8a\"\n },\n {\n \"url\": \"icons/icon.svg\",\n \"revision\": \"549b462207e763a57c9dfbae214afc31\"\n },\n {\n \"url\": \"icons/icon-maskable-512.png\",\n \"revision\": \"734c73b2ee3cc3856c67bed196e7557f\"\n },\n {\n \"url\": \"icons/icon-512.png\",\n \"revision\": \"c1b37dbf870c852577dbb4733f45c9c2\"\n },\n {\n \"url\": \"icons/icon-192.png\",\n \"revision\": \"54082a8d4e49f4e5c2ad5646b7fb7551\"\n },\n {\n \"url\": \"assets/workbox-window.prod.es5-Bd17z0YL.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/index-GubcPYw6.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/index-CEqSkIuy.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/CodeMirrorEditor-BuLFJjB1.js\",\n \"revision\": null\n },\n {\n \"url\": \"offline.html\",\n \"revision\": \"e4f087b40040ff045a6fd572b5fed726\"\n },\n {\n \"url\": \"icons/icon-192.png\",\n \"revision\": \"54082a8d4e49f4e5c2ad5646b7fb7551\"\n },\n {\n \"url\": \"icons/icon-512.png\",\n \"revision\": \"c1b37dbf870c852577dbb4733f45c9c2\"\n },\n {\n \"url\": \"icons/icon-maskable-512.png\",\n \"revision\": \"734c73b2ee3cc3856c67bed196e7557f\"\n },\n {\n \"url\": \"icons/icon.svg\",\n \"revision\": \"549b462207e763a57c9dfbae214afc31\"\n },\n {\n \"url\": \"manifest.webmanifest\",\n \"revision\": \"aef9cb4935c3fba2754da10580256c9e\"\n }\n], {});\nworkbox_precaching_cleanupOutdatedCaches();workbox_routing_registerRoute(new workbox_routing_NavigationRoute(workbox_precaching_createHandlerBoundToURL(\"/index.html\"), {\n denylist: [/^\\/api\\//],}));\nworkbox_routing_registerRoute(({ url }) => url.pathname.startsWith(\"/api/v1/\"), new workbox_strategies_NetworkOnly(), 'GET');\nworkbox_routing_registerRoute(({ request }) => request.mode === \"navigate\", new workbox_strategies_NetworkFirst({ \"cacheName\":\"pi-navigation\",\"networkTimeoutSeconds\":3, plugins: [new workbox_precaching_PrecacheFallbackPlugin({ fallbackURL: '/offline.html' })] }), 'GET');\n\n\n"],"names":["self","skipWaiting","workbox_core_clientsClaim","workbox_precaching_precacheAndRoute","url","revision","workbox_precaching_cleanupOutdatedCaches","workbox_routing_registerRoute","workbox_routing_NavigationRoute","workbox_precaching_createHandlerBoundToURL","denylist","pathname","startsWith","workbox_strategies_NetworkOnly","request","mode","workbox_strategies_NetworkFirst","cacheName","networkTimeoutSeconds","plugins","workbox_precaching_PrecacheFallbackPlugin","fallbackURL"],"mappings":"inBAuBAA,KAAKC,cACLC,EAAAA,eAMAC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,eACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,oCAEd,CACED,IAAO,aACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,qBACPC,SAAY,oCAEd,CACED,IAAO,qBACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,MAEd,CACED,IAAO,2BACPC,SAAY,MAEd,CACED,IAAO,4BACPC,SAAY,MAEd,CACED,IAAO,sCACPC,SAAY,MAEd,CACED,IAAO,eACPC,SAAY,oCAEd,CACED,IAAO,qBACPC,SAAY,oCAEd,CACED,IAAO,qBACPC,SAAY,oCAEd,CACED,IAAO,8BACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,qCAEb,CAAA,GACHC,EAAAA,wBAA2CC,EAAAA,cAA8B,IAAIC,EAAAA,gBAAgCC,0BAA2C,eAAgB,CACpKC,SAAU,CAAC,eACfH,EAAAA,cAA8B,EAAGH,SAAUA,EAAIO,SAASC,WAAW,YAAa,IAAIC,EAAAA,YAAkC,OACtHN,EAAAA,cAA8B,EAAGO,aAA+B,aAAjBA,EAAQC,KAAqB,IAAIC,EAAAA,aAAgC,CAAEC,UAAY,gBAAgBC,sBAAwB,EAAGC,QAAS,CAAC,IAAIC,yBAA0C,CAAEC,YAAa,qBAAwB"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The text the LLM sees as a synthetic user message after an
|
|
3
|
+
* overflow-driven auto-compaction. Tuned to be imperative and brief:
|
|
4
|
+
*
|
|
5
|
+
* - "Continue the task in progress" — open-ended about what the
|
|
6
|
+
* next step is. The agent may need to call a tool, write a
|
|
7
|
+
* final answer, ask a follow-up question, or anything else the
|
|
8
|
+
* task requires. We don't prescribe the shape; we just say
|
|
9
|
+
* keep going.
|
|
10
|
+
* - "Do not write a summary of what you were doing" — names the
|
|
11
|
+
* observed failure mode (model paraphrases the summary's
|
|
12
|
+
* "Next Steps" instead of acting).
|
|
13
|
+
* - "Pick up from where you left off" — frames the summary as
|
|
14
|
+
* reference material, not as a fresh prompt addressed to the
|
|
15
|
+
* model.
|
|
16
|
+
*
|
|
17
|
+
* Kept under 250 characters so the addition to LLM input is
|
|
18
|
+
* negligible (~50 tokens).
|
|
19
|
+
*/
|
|
20
|
+
export const NUDGE_MESSAGE = "[continuation] Continue the task in progress — pick up from where you left off " +
|
|
21
|
+
"based on the summary above. Do not write a status update or summary of what you " +
|
|
22
|
+
"were doing; just proceed with the next action the task requires.";
|
|
23
|
+
/**
|
|
24
|
+
* Inspect a messages array and decide whether the post-compaction
|
|
25
|
+
* nudge should be appended. Exported separately so the unit test can
|
|
26
|
+
* exercise the boundary cases (empty, only summary, summary then user
|
|
27
|
+
* prompt, summary then assistant turn) without booting a full SDK
|
|
28
|
+
* session.
|
|
29
|
+
*/
|
|
30
|
+
export function shouldNudgeAfterCompaction(messages) {
|
|
31
|
+
const last = messages[messages.length - 1];
|
|
32
|
+
if (last === undefined)
|
|
33
|
+
return false;
|
|
34
|
+
return last.role === "compactionSummary";
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Build the synthetic user message used as the nudge. Timestamp is
|
|
38
|
+
* `Date.now()` so the message sorts after any prior content if a
|
|
39
|
+
* downstream consumer ever inspects timestamps; in practice the SDK
|
|
40
|
+
* doesn't reorder by timestamp at LLM-call time, but it costs nothing
|
|
41
|
+
* to keep monotonic ordering.
|
|
42
|
+
*/
|
|
43
|
+
function buildNudgeMessage() {
|
|
44
|
+
return {
|
|
45
|
+
role: "user",
|
|
46
|
+
content: [{ type: "text", text: NUDGE_MESSAGE }],
|
|
47
|
+
timestamp: Date.now(),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Pi extension factory. Registered via `DefaultResourceLoader`'s
|
|
52
|
+
* `extensionFactories` option in `agent-resource-loader.ts`. No I/O,
|
|
53
|
+
* no async setup — just registers the handler and returns.
|
|
54
|
+
*/
|
|
55
|
+
export const compactionContinuationExtension = (pi) => {
|
|
56
|
+
pi.on("context", (event) => {
|
|
57
|
+
if (!shouldNudgeAfterCompaction(event.messages)) {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
messages: [...event.messages, buildNudgeMessage()],
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=compaction-continuation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction-continuation.js","sourceRoot":"","sources":["../../src/agent-extensions/compaction-continuation.ts"],"names":[],"mappings":"AA4EA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,aAAa,GACxB,iFAAiF;IACjF,kFAAkF;IAClF,kEAAkE,CAAC;AAErE;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CAAC,QAAiC;IAC1E,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3C,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACrC,OAAO,IAAI,CAAC,IAAI,KAAK,mBAAmB,CAAC;AAC3C,CAAC;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB;IACxB,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;QAChD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAqB,CAAC,EAAE,EAAE,EAAE;IACtE,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;QACzB,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO;YACL,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;SACnD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -45,6 +45,7 @@ import { config } from "./config.js";
|
|
|
45
45
|
import { getProjectDisabledSkillNames } from "./skill-overrides.js";
|
|
46
46
|
import { getProjectDisabledPromptNames } from "./prompt-overrides.js";
|
|
47
47
|
import { getProjectSystemPromptAddendum } from "./system-prompt-overrides.js";
|
|
48
|
+
import { compactionContinuationExtension } from "./agent-extensions/compaction-continuation.js";
|
|
48
49
|
/**
|
|
49
50
|
* Plain string (not a backtick template) so what's stored is exactly
|
|
50
51
|
* what's documented — no surprises from template-literal escape rules
|
|
@@ -105,6 +106,15 @@ export async function buildForgeResourceLoader(cwd, agentDir, settingsManager, p
|
|
|
105
106
|
agentDir,
|
|
106
107
|
settingsManager,
|
|
107
108
|
appendSystemPrompt,
|
|
109
|
+
// In-process pi extensions pi-forge always registers. The
|
|
110
|
+
// `compactionContinuationExtension` hooks the `context` event and
|
|
111
|
+
// appends a one-line imperative nudge to LLM input when the last
|
|
112
|
+
// message is a `compactionSummary` — fixes the bug where weaker
|
|
113
|
+
// models (Gemma-class on local vLLM) read the post-compaction
|
|
114
|
+
// summary as a status report and respond with prose instead of
|
|
115
|
+
// executing the next tool call. See the file's doc-comment for
|
|
116
|
+
// the full rationale.
|
|
117
|
+
extensionFactories: [compactionContinuationExtension],
|
|
108
118
|
};
|
|
109
119
|
// Both override hooks are installed conditionally on whether the
|
|
110
120
|
// active project has any explicit disables. Pi's pattern system
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-resource-loader.js","sourceRoot":"","sources":["../src/agent-resource-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,OAAO,EACL,qBAAqB,GAGtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-resource-loader.js","sourceRoot":"","sources":["../src/agent-resource-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `git clone` runner for the "Clone repository" project-setup flow.
|
|
3
|
+
*
|
|
4
|
+
* Why this exists separately from `git-runner.ts`: git-runner.ts wraps
|
|
5
|
+
* the agent-/UI-facing `git status`/`diff`/`commit`/`push` surface for
|
|
6
|
+
* an already-cloned repo. Clone is a one-shot, multi-second operation
|
|
7
|
+
* that needs progress streaming and optional auth — different shape of
|
|
8
|
+
* problem, so it gets its own module.
|
|
9
|
+
*
|
|
10
|
+
* Auth model: a user-supplied token (PAT, fine-grained PAT, GitHub
|
|
11
|
+
* App installation token, etc.) is embedded into the clone URL as
|
|
12
|
+
* `https://x-access-token:<TOKEN>@<host>/<path>`. The
|
|
13
|
+
* `x-access-token:<TOKEN>` convention is GitHub's official
|
|
14
|
+
* recommendation and works for GitHub.com, GitHub Enterprise, GitLab
|
|
15
|
+
* (PAT-as-password), Bitbucket app passwords, and Gitea PATs. After
|
|
16
|
+
* the clone completes, we rewrite `origin` to the original
|
|
17
|
+
* token-free URL so the token doesn't persist in
|
|
18
|
+
* `.git/config`. The token is never logged and never appears in
|
|
19
|
+
* command args (it's part of the cloned URL, not a flag).
|
|
20
|
+
*
|
|
21
|
+
* Security notes for the threat model:
|
|
22
|
+
* - Single-tenant deploys only — the URL is visible to anyone with
|
|
23
|
+
* access to the spawned process (`ps`). Multi-tenant deploys would
|
|
24
|
+
* need to use `GIT_ASKPASS` or `credential.helper` instead.
|
|
25
|
+
* - The token is held in process memory for the lifetime of one
|
|
26
|
+
* clone. We don't log it. We don't write it to any pi-forge
|
|
27
|
+
* file.
|
|
28
|
+
* - If the clone fails partway, the URL with the embedded token may
|
|
29
|
+
* be in git's internal state (e.g. a partial `.git/config` if
|
|
30
|
+
* anything wrote a remote before the failure). We rm-rf the
|
|
31
|
+
* target directory on failure to make sure no leftover token
|
|
32
|
+
* bytes survive.
|
|
33
|
+
*/
|
|
34
|
+
import { spawn } from "node:child_process";
|
|
35
|
+
import { rm, stat } from "node:fs/promises";
|
|
36
|
+
import { dirname, join, resolve } from "node:path";
|
|
37
|
+
import { scrubbedEnv } from "./pty-manager.js";
|
|
38
|
+
const MAX_PROGRESS_BUFFER_BYTES = 64 * 1024;
|
|
39
|
+
const CLONE_TIMEOUT_MS = 30 * 60 * 1000;
|
|
40
|
+
export class GitCloneError extends Error {
|
|
41
|
+
code;
|
|
42
|
+
constructor(code, message) {
|
|
43
|
+
super(message);
|
|
44
|
+
this.name = "GitCloneError";
|
|
45
|
+
this.code = code;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Validate a URL is suitable for `git clone`. Returns the parsed URL
|
|
50
|
+
* on success. Accepts:
|
|
51
|
+
* - `https://` — the primary case. Token injection works.
|
|
52
|
+
* - `file://` — local-repo clone (useful for testing and for
|
|
53
|
+
* forking from a local mirror). No token, no auth.
|
|
54
|
+
*
|
|
55
|
+
* Rejects everything else (ssh:, http:, git:, ftp:, ...). Plain http
|
|
56
|
+
* is explicitly out because we don't want to embed a token in a
|
|
57
|
+
* cleartext URL even on private networks — operators expecting that
|
|
58
|
+
* almost certainly want HTTPS.
|
|
59
|
+
*/
|
|
60
|
+
export function validateCloneUrl(raw) {
|
|
61
|
+
let parsed;
|
|
62
|
+
try {
|
|
63
|
+
parsed = new URL(raw);
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
throw new GitCloneError("invalid_url", `Not a valid URL: ${raw}`);
|
|
67
|
+
}
|
|
68
|
+
if (parsed.protocol !== "https:" && parsed.protocol !== "file:") {
|
|
69
|
+
throw new GitCloneError("unsupported_protocol", `Only HTTPS and file:// clone URLs are supported (got ${parsed.protocol}).`);
|
|
70
|
+
}
|
|
71
|
+
// HTTPS requires a host. file:// uses `parsed.pathname` and may
|
|
72
|
+
// have an empty hostname ("file:///path/to/repo") — that's the
|
|
73
|
+
// correct shape, not an error.
|
|
74
|
+
if (parsed.protocol === "https:" && parsed.hostname.length === 0) {
|
|
75
|
+
throw new GitCloneError("invalid_url", "URL is missing a host.");
|
|
76
|
+
}
|
|
77
|
+
return parsed;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Inject `x-access-token:<token>` into the URL's userinfo. URL
|
|
81
|
+
* encoding is handled by the URL API — tokens containing `:` / `@` /
|
|
82
|
+
* `/` etc. are encoded correctly.
|
|
83
|
+
*/
|
|
84
|
+
function injectToken(url, token) {
|
|
85
|
+
const withAuth = new URL(url.toString());
|
|
86
|
+
withAuth.username = "x-access-token";
|
|
87
|
+
withAuth.password = token;
|
|
88
|
+
return withAuth.toString();
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Parse a git progress line. Git writes progress to stderr in lines
|
|
92
|
+
* like "Receiving objects: 45% (450/1000), 1.23 MiB | 200 KiB/s" or
|
|
93
|
+
* "Resolving deltas: 100% (123/123), done.". We pull out the phase
|
|
94
|
+
* name ("Receiving objects") and the percent (45 or 100). Returns
|
|
95
|
+
* undefined for non-progress lines (which are still surfaced via
|
|
96
|
+
* `type: "stderr"` events).
|
|
97
|
+
*/
|
|
98
|
+
export function parseProgressLine(line) {
|
|
99
|
+
// Format: `<Phase>: <pct>% (...)` with the percent optional in some
|
|
100
|
+
// phases (e.g. "Counting objects: 1234, done.").
|
|
101
|
+
const match = /^([A-Z][A-Za-z ]+):\s+(\d+)%/.exec(line.trim());
|
|
102
|
+
if (match !== null) {
|
|
103
|
+
return { phase: match[1] ?? "", percent: Number(match[2]) };
|
|
104
|
+
}
|
|
105
|
+
// Some phases don't report percent (e.g. "Counting objects: 1234"
|
|
106
|
+
// or "Cloning into '...'"). Surface them with percent=null so the
|
|
107
|
+
// UI can still show the phase change.
|
|
108
|
+
const phaseOnly = /^([A-Z][A-Za-z ]+):/.exec(line.trim());
|
|
109
|
+
if (phaseOnly !== null) {
|
|
110
|
+
return { phase: phaseOnly[1] ?? "", percent: null };
|
|
111
|
+
}
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Run `git clone` with progress streaming. Yields CloneEvents in
|
|
116
|
+
* real time. Resolves when the spawn settles (success or failure);
|
|
117
|
+
* the caller iterates `events` to render progress as it happens.
|
|
118
|
+
*
|
|
119
|
+
* On error, the target directory is rm -rf'd to avoid leaving a
|
|
120
|
+
* half-cloned tree (and any leftover token bytes in
|
|
121
|
+
* `.git/config`).
|
|
122
|
+
*/
|
|
123
|
+
export function cloneRepository(opts) {
|
|
124
|
+
const url = validateCloneUrl(opts.url);
|
|
125
|
+
const target = resolve(opts.target);
|
|
126
|
+
const cloneUrl = opts.token !== undefined ? injectToken(url, opts.token) : url.toString();
|
|
127
|
+
const displayUrl = url.toString();
|
|
128
|
+
// Build args. `--progress` forces git to emit progress to stderr
|
|
129
|
+
// even when stdout isn't a tty (which it never is for us — we're
|
|
130
|
+
// a child process). Without it, the operator sees no progress
|
|
131
|
+
// until the clone completes.
|
|
132
|
+
const args = ["clone", "--progress"];
|
|
133
|
+
if (opts.branch !== undefined && opts.branch.length > 0) {
|
|
134
|
+
args.push("--branch", opts.branch);
|
|
135
|
+
}
|
|
136
|
+
args.push(cloneUrl, target);
|
|
137
|
+
// Bounded queue so a slow consumer can't drive memory to the moon.
|
|
138
|
+
// 1024 events / 8s of typical progress lines is the cap; backpressure
|
|
139
|
+
// is "drop oldest" since the user can survive missing a few
|
|
140
|
+
// intermediate progress lines and the `done`/`error` event is
|
|
141
|
+
// generated locally (not from the queue).
|
|
142
|
+
const queue = [];
|
|
143
|
+
let pendingResolve;
|
|
144
|
+
let finished = false;
|
|
145
|
+
let finishedReason = null;
|
|
146
|
+
const push = (e) => {
|
|
147
|
+
if (pendingResolve !== undefined) {
|
|
148
|
+
const resolve = pendingResolve;
|
|
149
|
+
pendingResolve = undefined;
|
|
150
|
+
resolve({ value: e, done: false });
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
queue.push(e);
|
|
154
|
+
while (queue.length > 1024)
|
|
155
|
+
queue.shift();
|
|
156
|
+
};
|
|
157
|
+
const finish = (reason) => {
|
|
158
|
+
if (finished)
|
|
159
|
+
return;
|
|
160
|
+
finished = true;
|
|
161
|
+
finishedReason = reason;
|
|
162
|
+
push({ ...reason });
|
|
163
|
+
if (pendingResolve !== undefined) {
|
|
164
|
+
const resolve = pendingResolve;
|
|
165
|
+
pendingResolve = undefined;
|
|
166
|
+
resolve({ value: undefined, done: true });
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
const events = {
|
|
170
|
+
[Symbol.asyncIterator]() {
|
|
171
|
+
return {
|
|
172
|
+
next() {
|
|
173
|
+
if (queue.length > 0) {
|
|
174
|
+
const e = queue.shift();
|
|
175
|
+
return Promise.resolve({ value: e, done: false });
|
|
176
|
+
}
|
|
177
|
+
if (finished && finishedReason !== null && queue.length === 0) {
|
|
178
|
+
// We already pushed the terminal event in finish(); subsequent
|
|
179
|
+
// calls should report done.
|
|
180
|
+
return Promise.resolve({ value: undefined, done: true });
|
|
181
|
+
}
|
|
182
|
+
return new Promise((resolve) => {
|
|
183
|
+
pendingResolve = resolve;
|
|
184
|
+
});
|
|
185
|
+
},
|
|
186
|
+
};
|
|
187
|
+
},
|
|
188
|
+
};
|
|
189
|
+
push({ type: "started", cloneUrlForDisplay: displayUrl });
|
|
190
|
+
const env = {
|
|
191
|
+
...scrubbedEnv(),
|
|
192
|
+
// Prevent git from prompting on stdin when credentials are
|
|
193
|
+
// wrong / missing — without this, git can hang indefinitely
|
|
194
|
+
// waiting for a username/password.
|
|
195
|
+
GIT_TERMINAL_PROMPT: "0",
|
|
196
|
+
};
|
|
197
|
+
if (opts.insecureTls === true) {
|
|
198
|
+
// git's standard "skip cert validation" knob. Equivalent to
|
|
199
|
+
// `-c http.sslVerify=false` on the command line, but as an env
|
|
200
|
+
// var so the post-clone `remote set-url` step inherits it too.
|
|
201
|
+
env.GIT_SSL_NO_VERIFY = "true";
|
|
202
|
+
// Operator-visible log so the relaxed posture is recorded in
|
|
203
|
+
// docker logs. Bypasses pino (same rationale as the
|
|
204
|
+
// webhook-insecure-tls log) so a LOG_LEVEL=warn deploy still
|
|
205
|
+
// surfaces it.
|
|
206
|
+
process.stderr.write(JSON.stringify({
|
|
207
|
+
level: "warn",
|
|
208
|
+
time: new Date().toISOString(),
|
|
209
|
+
msg: "git-clone-insecure-tls",
|
|
210
|
+
url: displayUrl,
|
|
211
|
+
target,
|
|
212
|
+
}) + "\n");
|
|
213
|
+
}
|
|
214
|
+
const child = spawn("git", args, {
|
|
215
|
+
cwd: dirname(target),
|
|
216
|
+
env,
|
|
217
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
218
|
+
});
|
|
219
|
+
let stderrBuffer = "";
|
|
220
|
+
let stderrBytes = 0;
|
|
221
|
+
child.stderr.setEncoding("utf8");
|
|
222
|
+
child.stderr.on("data", (chunk) => {
|
|
223
|
+
stderrBytes += Buffer.byteLength(chunk, "utf8");
|
|
224
|
+
// Cap the in-memory buffer — git progress lines come with `\r`
|
|
225
|
+
// overwrites and can fill memory if something runs amok.
|
|
226
|
+
if (stderrBytes > MAX_PROGRESS_BUFFER_BYTES) {
|
|
227
|
+
stderrBuffer = stderrBuffer.slice(-MAX_PROGRESS_BUFFER_BYTES);
|
|
228
|
+
stderrBytes = MAX_PROGRESS_BUFFER_BYTES;
|
|
229
|
+
}
|
|
230
|
+
// Git uses `\r` to overwrite progress lines in-place. Split on
|
|
231
|
+
// both `\r` and `\n` so we surface each "frame" as its own
|
|
232
|
+
// progress line.
|
|
233
|
+
stderrBuffer += chunk;
|
|
234
|
+
const lines = stderrBuffer.split(/[\r\n]/);
|
|
235
|
+
stderrBuffer = lines.pop() ?? "";
|
|
236
|
+
for (const line of lines) {
|
|
237
|
+
const trimmed = line.trim();
|
|
238
|
+
if (trimmed.length === 0)
|
|
239
|
+
continue;
|
|
240
|
+
const parsed = parseProgressLine(trimmed);
|
|
241
|
+
if (parsed !== undefined) {
|
|
242
|
+
push({ type: "progress", phase: parsed.phase, percent: parsed.percent, raw: trimmed });
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
push({ type: "stderr", line: trimmed });
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
// Abort plumbing — caller's AbortSignal kills the child.
|
|
250
|
+
if (opts.signal !== undefined) {
|
|
251
|
+
const onAbort = () => {
|
|
252
|
+
child.kill("SIGTERM");
|
|
253
|
+
setTimeout(() => child.kill("SIGKILL"), 5_000).unref();
|
|
254
|
+
};
|
|
255
|
+
if (opts.signal.aborted)
|
|
256
|
+
onAbort();
|
|
257
|
+
else
|
|
258
|
+
opts.signal.addEventListener("abort", onAbort, { once: true });
|
|
259
|
+
}
|
|
260
|
+
// Hard timeout — runaway clones don't sit forever.
|
|
261
|
+
const timeoutTimer = setTimeout(() => {
|
|
262
|
+
child.kill("SIGTERM");
|
|
263
|
+
setTimeout(() => child.kill("SIGKILL"), 5_000).unref();
|
|
264
|
+
}, CLONE_TIMEOUT_MS);
|
|
265
|
+
timeoutTimer.unref();
|
|
266
|
+
const promise = new Promise((resolveOuter) => {
|
|
267
|
+
let settled = false;
|
|
268
|
+
child.on("error", (err) => {
|
|
269
|
+
if (settled)
|
|
270
|
+
return;
|
|
271
|
+
settled = true;
|
|
272
|
+
clearTimeout(timeoutTimer);
|
|
273
|
+
finish({
|
|
274
|
+
type: "error",
|
|
275
|
+
message: `Failed to spawn git clone: ${err instanceof Error ? err.message : String(err)}`,
|
|
276
|
+
});
|
|
277
|
+
resolveOuter();
|
|
278
|
+
});
|
|
279
|
+
child.on("close", (code, signal) => {
|
|
280
|
+
if (settled)
|
|
281
|
+
return;
|
|
282
|
+
settled = true;
|
|
283
|
+
clearTimeout(timeoutTimer);
|
|
284
|
+
void (async () => {
|
|
285
|
+
if (code === 0) {
|
|
286
|
+
// Success — strip the token from `origin` if we injected
|
|
287
|
+
// one. Best-effort; if it fails we still report success
|
|
288
|
+
// (the clone IS done) but warn-log it.
|
|
289
|
+
if (opts.token !== undefined) {
|
|
290
|
+
await stripTokenFromOrigin(target, displayUrl).catch(() => undefined);
|
|
291
|
+
}
|
|
292
|
+
finish({ type: "done", target });
|
|
293
|
+
resolveOuter();
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
// Non-zero exit (or killed). Clean up the half-cloned dir
|
|
297
|
+
// so a retry doesn't trip "destination already exists" and
|
|
298
|
+
// no leftover token bytes survive in `.git/config`.
|
|
299
|
+
await rm(target, { recursive: true, force: true }).catch(() => undefined);
|
|
300
|
+
const sigMsg = signal !== null ? ` (signal ${signal})` : "";
|
|
301
|
+
finish({
|
|
302
|
+
type: "error",
|
|
303
|
+
message: `git clone exited with code ${code}${sigMsg}`,
|
|
304
|
+
});
|
|
305
|
+
resolveOuter();
|
|
306
|
+
})();
|
|
307
|
+
});
|
|
308
|
+
});
|
|
309
|
+
return { promise, events };
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* After a successful clone, rewrite `origin` to the token-free URL
|
|
313
|
+
* so the token doesn't persist in `.git/config`. Best-effort —
|
|
314
|
+
* any failure is swallowed by the caller.
|
|
315
|
+
*/
|
|
316
|
+
async function stripTokenFromOrigin(target, cleanUrl) {
|
|
317
|
+
await new Promise((resolve, reject) => {
|
|
318
|
+
const child = spawn("git", ["-C", target, "remote", "set-url", "origin", cleanUrl], {
|
|
319
|
+
env: scrubbedEnv(),
|
|
320
|
+
stdio: "ignore",
|
|
321
|
+
});
|
|
322
|
+
child.on("error", reject);
|
|
323
|
+
child.on("close", (code) => {
|
|
324
|
+
if (code === 0)
|
|
325
|
+
resolve();
|
|
326
|
+
else
|
|
327
|
+
reject(new Error(`set-url exited ${code}`));
|
|
328
|
+
});
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Verify the target directory is suitable for a clone: either
|
|
333
|
+
* doesn't exist, or exists and is empty. Returns the resolved path
|
|
334
|
+
* on success. Used by the route before spawning `git clone` so we
|
|
335
|
+
* surface "directory not empty" as a 409 rather than letting the
|
|
336
|
+
* spawn fail with a less friendly error.
|
|
337
|
+
*/
|
|
338
|
+
export async function assertTargetClonable(target) {
|
|
339
|
+
const resolved = resolve(target);
|
|
340
|
+
try {
|
|
341
|
+
const st = await stat(resolved);
|
|
342
|
+
if (!st.isDirectory()) {
|
|
343
|
+
throw new GitCloneError("target_not_a_directory", `Target exists but is not a directory: ${resolved}`);
|
|
344
|
+
}
|
|
345
|
+
// Exists and is a directory — only OK if empty. git clone will
|
|
346
|
+
// refuse to clone into a non-empty dir; we catch it here to give
|
|
347
|
+
// a better error.
|
|
348
|
+
const { readdir } = await import("node:fs/promises");
|
|
349
|
+
const entries = await readdir(resolved);
|
|
350
|
+
if (entries.length > 0) {
|
|
351
|
+
throw new GitCloneError("target_not_empty", `Target directory is not empty: ${resolved}`);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
catch (err) {
|
|
355
|
+
if (err instanceof GitCloneError)
|
|
356
|
+
throw err;
|
|
357
|
+
const code = err.code;
|
|
358
|
+
if (code === "ENOENT")
|
|
359
|
+
return; // doesn't exist — fine
|
|
360
|
+
throw err;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
export { join as joinTargetPath };
|
|
364
|
+
//# sourceMappingURL=git-clone.js.map
|