@studioindia/designx 1.1.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/designx.js +15 -0
- package/dist/assets/{AppPreviewPanel-dKEc87DX.js → AppPreviewPanel-Kzzw8_FK.js} +1 -1
- package/dist/assets/index-DB32CkYi.js +482 -0
- package/dist/assets/{index-BV7YFZ0k.js → index-YCdF8pEa.js} +1 -1
- package/dist/assets/{jszip.min-D8jHCuHH.js → jszip.min-BbKvkdq8.js} +1 -1
- package/dist/assets/{jszip.min-CMmTeOAB.js → jszip.min-DzuQM42A.js} +1 -1
- package/dist/index.html +1 -1
- package/package.json +1 -1
- package/server.cjs +145 -18
- package/dist/assets/index-BD0bOY-g.js +0 -482
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{g as Ss,d as Gt,e as Rs}from"./index-
|
|
1
|
+
import{g as Ss,d as Gt,e as Rs}from"./index-DB32CkYi.js";import{r as Ns}from"./jszip.min-BbKvkdq8.js";function Os(e,n){for(var i=0;i<n.length;i++){const t=n[i];if(typeof t!="string"&&!Array.isArray(t)){for(const r in t)if(r!=="default"&&!(r in e)){const a=Object.getOwnPropertyDescriptor(t,r);a&&Object.defineProperty(e,r,a.get?a:{enumerable:!0,get:()=>t[r]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}var Ge={},Rr="1.13.8",wa=typeof self=="object"&&self.self===self&&self||typeof global=="object"&&global.global===global&&global||Function("return this")()||{},Jt=Array.prototype,Nr=Object.prototype,Fa=typeof Symbol<"u"?Symbol.prototype:null,ks=Jt.push,ut=Jt.slice,tt=Nr.toString,Is=Nr.hasOwnProperty,zo=typeof ArrayBuffer<"u",Ls=typeof DataView<"u",qs=Array.isArray,Aa=Object.keys,Ca=Object.create,Wa=zo&&ArrayBuffer.isView,Ms=isNaN,Ps=isFinite,Go=!{toString:null}.propertyIsEnumerable("toString"),Ba=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],Xs=Math.pow(2,53)-1;function Pe(e,n){return n=n==null?e.length-1:+n,function(){for(var i=Math.max(arguments.length-n,0),t=Array(i),r=0;r<i;r++)t[r]=arguments[r+n];switch(n){case 0:return e.call(this,t);case 1:return e.call(this,arguments[0],t);case 2:return e.call(this,arguments[0],arguments[1],t)}var a=Array(n+1);for(r=0;r<n;r++)a[r]=arguments[r];return a[n]=t,e.apply(this,a)}}function pn(e){var n=typeof e;return n==="function"||n==="object"&&!!e}function $o(e){return e===null}function Or(e){return e===void 0}function kr(e){return e===!0||e===!1||tt.call(e)==="[object Boolean]"}function Qo(e){return!!(e&&e.nodeType===1)}function Me(e){var n="[object "+e+"]";return function(i){return tt.call(i)===n}}const ei=Me("String"),Ir=Me("Number"),Yo=Me("Date"),Zo=Me("RegExp"),Ko=Me("Error"),Lr=Me("Symbol"),qr=Me("ArrayBuffer");var Jo=Me("Function"),js=wa.document&&wa.document.childNodes;typeof/./!="function"&&typeof Int8Array!="object"&&typeof js!="function"&&(Jo=function(e){return typeof e=="function"||!1});const qe=Jo,eu=Me("Object");var nu=Ls&&(!/\[native code\]/.test(String(DataView))||eu(new DataView(new ArrayBuffer(8)))),Mr=typeof Map<"u"&&eu(new Map),Vs=Me("DataView");function Hs(e){return e!=null&&qe(e.getInt8)&&qr(e.buffer)}const it=nu?Hs:Vs,mn=qs||Me("Array");function bn(e,n){return e!=null&&Is.call(e,n)}var Br=Me("Arguments");(function(){Br(arguments)||(Br=function(e){return bn(e,"callee")})})();const ni=Br;function tu(e){return!Lr(e)&&Ps(e)&&!isNaN(parseFloat(e))}function Pr(e){return Ir(e)&&Ms(e)}function Xr(e){return function(){return e}}function iu(e){return function(n){var i=e(n);return typeof i=="number"&&i>=0&&i<=Xs}}function ru(e){return function(n){return n==null?void 0:n[e]}}const $t=ru("byteLength"),zs=iu($t);var Gs=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;function $s(e){return Wa?Wa(e)&&!it(e):zs(e)&&Gs.test(tt.call(e))}const jr=zo?$s:Xr(!1),Le=ru("length");function Qs(e){for(var n={},i=e.length,t=0;t<i;++t)n[e[t]]=!0;return{contains:function(r){return n[r]===!0},push:function(r){return n[r]=!0,e.push(r)}}}function au(e,n){n=Qs(n);var i=Ba.length,t=e.constructor,r=qe(t)&&t.prototype||Nr,a="constructor";for(bn(e,a)&&!n.contains(a)&&n.push(a);i--;)a=Ba[i],a in e&&e[a]!==r[a]&&!n.contains(a)&&n.push(a)}function Se(e){if(!pn(e))return[];if(Aa)return Aa(e);var n=[];for(var i in e)bn(e,i)&&n.push(i);return Go&&au(e,n),n}function cu(e){if(e==null)return!0;var n=Le(e);return typeof n=="number"&&(mn(e)||ei(e)||ni(e))?n===0:Le(Se(e))===0}function Vr(e,n){var i=Se(n),t=i.length;if(e==null)return!t;for(var r=Object(e),a=0;a<t;a++){var c=i[a];if(n[c]!==r[c]||!(c in r))return!1}return!0}function Te(e){if(e instanceof Te)return e;if(!(this instanceof Te))return new Te(e);this._wrapped=e}Te.VERSION=Rr;Te.prototype.value=function(){return this._wrapped};Te.prototype.valueOf=Te.prototype.toJSON=Te.prototype.value;Te.prototype.toString=function(){return String(this._wrapped)};function Sa(e){return new Uint8Array(e.buffer||e,e.byteOffset||0,$t(e))}var Ra="[object DataView]";function ou(e,n){for(var i=[{a:e,b:n}],t=[],r=[];i.length;){var a=i.pop();if(a===!0){t.pop(),r.pop();continue}if(e=a.a,n=a.b,e===n){if(e!==0||1/e===1/n)continue;return!1}if(e==null||n==null)return!1;if(e!==e){if(n!==n)continue;return!1}var c=typeof e;if(c!=="function"&&c!=="object"&&typeof n!="object")return!1;e instanceof Te&&(e=e._wrapped),n instanceof Te&&(n=n._wrapped);var o=tt.call(e);if(o!==tt.call(n))return!1;if(nu&&o=="[object Object]"&&it(e)){if(!it(n))return!1;o=Ra}switch(o){case"[object RegExp]":case"[object String]":if(""+e==""+n)continue;return!1;case"[object Number]":i.push({a:+e,b:+n});continue;case"[object Date]":case"[object Boolean]":if(+e==+n)continue;return!1;case"[object Symbol]":if(Fa.valueOf.call(e)===Fa.valueOf.call(n))continue;return!1;case"[object ArrayBuffer]":case Ra:i.push({a:Sa(e),b:Sa(n)});continue}var u=o==="[object Array]";if(!u&&jr(e)){var s=$t(e);if(s!==$t(n))return!1;if(e.buffer===n.buffer&&e.byteOffset===n.byteOffset)continue;u=!0}if(!u){if(typeof e!="object"||typeof n!="object")return!1;var h=e.constructor,g=n.constructor;if(h!==g&&!(qe(h)&&h instanceof h&&qe(g)&&g instanceof g)&&"constructor"in e&&"constructor"in n)return!1}for(var f=t.length;f--;)if(t[f]===e){if(r[f]===n)break;return!1}if(!(f>=0))if(t.push(e),r.push(n),i.push(!0),u){if(f=e.length,f!==n.length)return!1;for(;f--;)i.push({a:e[f],b:n[f]})}else{var m=Se(e),D;if(f=m.length,Se(n).length!==f)return!1;for(;f--;){if(D=m[f],!bn(n,D))return!1;i.push({a:e[D],b:n[D]})}}}return!0}function Pn(e){if(!pn(e))return[];var n=[];for(var i in e)n.push(i);return Go&&au(e,n),n}function Hr(e){var n=Le(e);return function(i){if(i==null)return!1;var t=Pn(i);if(Le(t))return!1;for(var r=0;r<n;r++)if(!qe(i[e[r]]))return!1;return e!==du||!qe(i[zr])}}var zr="forEach",uu="has",Gr=["clear","delete"],su=["get",uu,"set"],Ys=Gr.concat(zr,su),du=Gr.concat(su),Zs=["add"].concat(Gr,zr,uu);const lu=Mr?Hr(Ys):Me("Map"),fu=Mr?Hr(du):Me("WeakMap"),hu=Mr?Hr(Zs):Me("Set"),gu=Me("WeakSet");function Cn(e){for(var n=Se(e),i=n.length,t=Array(i),r=0;r<i;r++)t[r]=e[n[r]];return t}function pu(e){for(var n=Se(e),i=n.length,t=Array(i),r=0;r<i;r++)t[r]=[n[r],e[n[r]]];return t}function $r(e){for(var n={},i=Se(e),t=0,r=i.length;t<r;t++)n[e[i[t]]]=i[t];return n}function rt(e){var n=[];for(var i in e)qe(e[i])&&n.push(i);return n.sort()}function Qr(e,n){return function(i){var t=arguments.length;if(n&&(i=Object(i)),t<2||i==null)return i;for(var r=1;r<t;r++)for(var a=arguments[r],c=e(a),o=c.length,u=0;u<o;u++){var s=c[u];(!n||i[s]===void 0)&&(i[s]=a[s])}return i}}const Yr=Qr(Pn),qn=Qr(Se),Zr=Qr(Pn,!0);function Ks(){return function(){}}function mu(e){if(!pn(e))return{};if(Ca)return Ca(e);var n=Ks();n.prototype=e;var i=new n;return n.prototype=null,i}function bu(e,n){var i=mu(e);return n&&qn(i,n),i}function Du(e){return pn(e)?mn(e)?e.slice():Yr({},e):e}function yu(e,n){return n(e),e}function Kr(e){return mn(e)?e:[e]}Te.toPath=Kr;function st(e){return Te.toPath(e)}function Jr(e,n){for(var i=n.length,t=0;t<i;t++){if(e==null)return;e=e[n[t]]}return i?e:void 0}function ea(e,n,i){var t=Jr(e,st(n));return Or(t)?i:t}function vu(e,n){n=st(n);for(var i=n.length,t=0;t<i;t++){var r=n[t];if(!bn(e,r))return!1;e=e[r]}return!!i}function ti(e){return e}function An(e){return e=qn({},e),function(n){return Vr(n,e)}}function ii(e){return e=st(e),function(n){return Jr(n,e)}}function dt(e,n,i){if(n===void 0)return e;switch(i??3){case 1:return function(t){return e.call(n,t)};case 3:return function(t,r,a){return e.call(n,t,r,a)};case 4:return function(t,r,a,c){return e.call(n,t,r,a,c)}}return function(){return e.apply(n,arguments)}}function xu(e,n,i){return e==null?ti:qe(e)?dt(e,n,i):pn(e)&&!mn(e)?An(e):ii(e)}function ri(e,n){return xu(e,n,1/0)}Te.iteratee=ri;function Xe(e,n,i){return Te.iteratee!==ri?Te.iteratee(e,n):xu(e,n,i)}function Uu(e,n,i){n=Xe(n,i);for(var t=Se(e),r=t.length,a={},c=0;c<r;c++){var o=t[c];a[o]=n(e[o],o,e)}return a}function na(){}function Tu(e){return e==null?na:function(n){return ea(e,n)}}function _u(e,n,i){var t=Array(Math.max(0,e));n=dt(n,i,1);for(var r=0;r<e;r++)t[r]=n(r);return t}function Qt(e,n){return n==null&&(n=e,e=0),e+Math.floor(Math.random()*(n-e+1))}const Mn=Date.now||function(){return new Date().getTime()};function Eu(e){var n=function(a){return e[a]},i="(?:"+Se(e).join("|")+")",t=RegExp(i),r=RegExp(i,"g");return function(a){return a=a==null?"":""+a,t.test(a)?a.replace(r,n):a}}const wu={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},Fu=Eu(wu),Js=$r(wu),Au=Eu(Js),Cu=Te.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var wi=/(.)^/,ed={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},nd=/\\|'|\r|\n|\u2028|\u2029/g;function td(e){return"\\"+ed[e]}var id=/^\s*(\w|\$)+\s*$/;function Wu(e,n,i){!n&&i&&(n=i),n=Zr({},n,Te.templateSettings);var t=RegExp([(n.escape||wi).source,(n.interpolate||wi).source,(n.evaluate||wi).source].join("|")+"|$","g"),r=0,a="__p+='";e.replace(t,function(s,h,g,f,m){return a+=e.slice(r,m).replace(nd,td),r=m+s.length,h?a+=`'+
|
|
2
2
|
((__t=(`+h+`))==null?'':_.escape(__t))+
|
|
3
3
|
'`:g?a+=`'+
|
|
4
4
|
((__t=(`+g+`))==null?'':__t)+
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{d as bt}from"./index-
|
|
1
|
+
import{d as bt}from"./index-DB32CkYi.js";function vt(yt){throw new Error('Could not dynamically require "'+yt+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var kt={exports:{}};/*!
|
|
2
2
|
|
|
3
3
|
JSZip v3.10.1 - A JavaScript class for generating and reading zip files
|
|
4
4
|
<http://stuartk.com/jszip>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{e as p}from"./index-
|
|
1
|
+
import{e as p}from"./index-DB32CkYi.js";import{r as a}from"./jszip.min-BbKvkdq8.js";function f(t,n){for(var o=0;o<n.length;o++){const e=n[o];if(typeof e!="string"&&!Array.isArray(e)){for(const r in e)if(r!=="default"&&!(r in t)){const i=Object.getOwnPropertyDescriptor(e,r);i&&Object.defineProperty(t,r,i.get?i:{enumerable:!0,get:()=>e[r]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}var s=a();const c=p(s),l=f({__proto__:null,default:c},[s]);export{l as j};
|
package/dist/index.html
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>DesignX</title>
|
|
7
|
-
<script type="module" crossorigin src="/assets/index-
|
|
7
|
+
<script type="module" crossorigin src="/assets/index-DB32CkYi.js"></script>
|
|
8
8
|
<link rel="stylesheet" crossorigin href="/assets/index-C0vXud8_.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
package/package.json
CHANGED
package/server.cjs
CHANGED
|
@@ -42674,10 +42674,10 @@ var require_buffer_list = __commonJS({
|
|
|
42674
42674
|
}
|
|
42675
42675
|
return (hint === "string" ? String : Number)(input);
|
|
42676
42676
|
}
|
|
42677
|
-
var
|
|
42678
|
-
var Buffer2 =
|
|
42679
|
-
var
|
|
42680
|
-
var inspect =
|
|
42677
|
+
var _require2 = require("buffer");
|
|
42678
|
+
var Buffer2 = _require2.Buffer;
|
|
42679
|
+
var _require22 = require("util");
|
|
42680
|
+
var inspect = _require22.inspect;
|
|
42681
42681
|
var custom = inspect && inspect.custom || "inspect";
|
|
42682
42682
|
function copyBuffer(src, target, offset) {
|
|
42683
42683
|
Buffer2.prototype.copy.call(src, target, offset);
|
|
@@ -43098,8 +43098,8 @@ var require_stream_writable = __commonJS({
|
|
|
43098
43098
|
return Buffer2.isBuffer(obj) || obj instanceof OurUint8Array;
|
|
43099
43099
|
}
|
|
43100
43100
|
var destroyImpl = require_destroy();
|
|
43101
|
-
var
|
|
43102
|
-
var getHighWaterMark =
|
|
43101
|
+
var _require2 = require_state();
|
|
43102
|
+
var getHighWaterMark = _require2.getHighWaterMark;
|
|
43103
43103
|
var _require$codes = require_errors2().codes;
|
|
43104
43104
|
var ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE;
|
|
43105
43105
|
var ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED;
|
|
@@ -44352,8 +44352,8 @@ var require_stream_readable = __commonJS({
|
|
|
44352
44352
|
}
|
|
44353
44353
|
var BufferList = require_buffer_list();
|
|
44354
44354
|
var destroyImpl = require_destroy();
|
|
44355
|
-
var
|
|
44356
|
-
var getHighWaterMark =
|
|
44355
|
+
var _require2 = require_state();
|
|
44356
|
+
var getHighWaterMark = _require2.getHighWaterMark;
|
|
44357
44357
|
var _require$codes = require_errors2().codes;
|
|
44358
44358
|
var ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE;
|
|
44359
44359
|
var ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF;
|
|
@@ -46117,6 +46117,7 @@ var import_node_os = require("node:os");
|
|
|
46117
46117
|
var import_node_crypto = require("node:crypto");
|
|
46118
46118
|
var import_node_url = require("node:url");
|
|
46119
46119
|
var import_node_child_process = require("node:child_process");
|
|
46120
|
+
var import_node_module = require("node:module");
|
|
46120
46121
|
|
|
46121
46122
|
// src/lib/copilot/headers.ts
|
|
46122
46123
|
var import_meta = {};
|
|
@@ -46213,6 +46214,14 @@ var __filename = (() => {
|
|
|
46213
46214
|
return process.argv[1] ?? "";
|
|
46214
46215
|
})();
|
|
46215
46216
|
var __dirname = import_node_path.default.dirname(__filename);
|
|
46217
|
+
var _require = (0, import_node_module.createRequire)(import_meta2.url ?? `file://${__filename}`);
|
|
46218
|
+
var PKG_VERSION = (() => {
|
|
46219
|
+
try {
|
|
46220
|
+
return _require("../package.json").version;
|
|
46221
|
+
} catch {
|
|
46222
|
+
return "unknown";
|
|
46223
|
+
}
|
|
46224
|
+
})();
|
|
46216
46225
|
var app = (0, import_express.default)();
|
|
46217
46226
|
var IS_PROD = process.env.NODE_ENV === "production";
|
|
46218
46227
|
var PORT = parseInt(process.env.PORT ?? "3001", 10);
|
|
@@ -47467,7 +47476,7 @@ function writeJson(filePath, data) {
|
|
|
47467
47476
|
}
|
|
47468
47477
|
app.get("/api/config", (_req, res) => {
|
|
47469
47478
|
res.json({
|
|
47470
|
-
version:
|
|
47479
|
+
version: PKG_VERSION,
|
|
47471
47480
|
port: PORT,
|
|
47472
47481
|
dataDir: DESIGNX_DATA_DIR,
|
|
47473
47482
|
isProd: IS_PROD
|
|
@@ -47596,7 +47605,7 @@ makeProjectDataRoutes("session", "session.json", {});
|
|
|
47596
47605
|
var uploadStorage = import_multer.default.diskStorage({
|
|
47597
47606
|
destination: (req, _file, cb) => {
|
|
47598
47607
|
const { slug } = req.params;
|
|
47599
|
-
const uploadDir = import_node_path.default.join(projectDir(slug), "
|
|
47608
|
+
const uploadDir = import_node_path.default.join(projectDir(slug), "knowledge-base");
|
|
47600
47609
|
import_node_fs.default.mkdirSync(uploadDir, { recursive: true });
|
|
47601
47610
|
cb(null, uploadDir);
|
|
47602
47611
|
},
|
|
@@ -47610,6 +47619,64 @@ var uploadMiddleware = (0, import_multer.default)({
|
|
|
47610
47619
|
limits: { fileSize: 50 * 1024 * 1024 }
|
|
47611
47620
|
// 50 MB per file
|
|
47612
47621
|
}).array("files", 20);
|
|
47622
|
+
var WORKSPACE_ROOT = import_node_path.default.resolve(__dirname, "..", "..");
|
|
47623
|
+
function pythonBin() {
|
|
47624
|
+
const venv = import_node_path.default.join(WORKSPACE_ROOT, ".venv", "bin", "python3");
|
|
47625
|
+
return import_node_fs.default.existsSync(venv) ? venv : "python3";
|
|
47626
|
+
}
|
|
47627
|
+
function triggerKbPipeline(slug) {
|
|
47628
|
+
const kbDir = import_node_path.default.join(projectDir(slug), "knowledge-base");
|
|
47629
|
+
const outDir = import_node_path.default.join(projectDir(slug), "knowledge-base-md");
|
|
47630
|
+
const py = pythonBin();
|
|
47631
|
+
const convert = (0, import_node_child_process.spawn)(
|
|
47632
|
+
py,
|
|
47633
|
+
["scripts/kb_artefacts_to_md.py", "--kb-dir", kbDir, "--out-dir", outDir],
|
|
47634
|
+
{ cwd: WORKSPACE_ROOT, stdio: "pipe" }
|
|
47635
|
+
);
|
|
47636
|
+
convert.on("close", (code) => {
|
|
47637
|
+
if (code !== 0) {
|
|
47638
|
+
console.warn(`[kb-pipeline] convert exited ${code} for ${slug}`);
|
|
47639
|
+
return;
|
|
47640
|
+
}
|
|
47641
|
+
const graph = (0, import_node_child_process.spawn)(
|
|
47642
|
+
py,
|
|
47643
|
+
[
|
|
47644
|
+
"-m",
|
|
47645
|
+
"enigma.optimization.knowledge_graph.cli",
|
|
47646
|
+
"restructure",
|
|
47647
|
+
"--project",
|
|
47648
|
+
slug,
|
|
47649
|
+
"--root-dir",
|
|
47650
|
+
DESIGNX_DATA_DIR
|
|
47651
|
+
],
|
|
47652
|
+
{ cwd: WORKSPACE_ROOT, stdio: "pipe" }
|
|
47653
|
+
);
|
|
47654
|
+
graph.on("close", (gc) => {
|
|
47655
|
+
if (gc !== 0) {
|
|
47656
|
+
console.warn(`[kb-pipeline] graph build exited ${gc} for ${slug}`);
|
|
47657
|
+
return;
|
|
47658
|
+
}
|
|
47659
|
+
console.log(`[kb-pipeline] graph ready for ${slug}`);
|
|
47660
|
+
const embed = (0, import_node_child_process.spawn)(
|
|
47661
|
+
py,
|
|
47662
|
+
[
|
|
47663
|
+
"-m",
|
|
47664
|
+
"enigma.optimization.knowledge_graph.cli",
|
|
47665
|
+
"embed",
|
|
47666
|
+
"--project",
|
|
47667
|
+
slug,
|
|
47668
|
+
"--root-dir",
|
|
47669
|
+
DESIGNX_DATA_DIR
|
|
47670
|
+
],
|
|
47671
|
+
{ cwd: WORKSPACE_ROOT, stdio: "pipe" }
|
|
47672
|
+
);
|
|
47673
|
+
embed.on("close", (ec) => {
|
|
47674
|
+
if (ec !== 0) console.warn(`[kb-pipeline] embed exited ${ec} for ${slug}`);
|
|
47675
|
+
else console.log(`[kb-pipeline] embeddings ready for ${slug}`);
|
|
47676
|
+
});
|
|
47677
|
+
});
|
|
47678
|
+
});
|
|
47679
|
+
}
|
|
47613
47680
|
app.post("/api/data/projects/:slug/uploads", (req, res) => {
|
|
47614
47681
|
const { slug } = req.params;
|
|
47615
47682
|
if (!safeSlug(slug)) {
|
|
@@ -47631,6 +47698,7 @@ app.post("/api/data/projects/:slug/uploads", (req, res) => {
|
|
|
47631
47698
|
mimetype: f.mimetype
|
|
47632
47699
|
}))
|
|
47633
47700
|
});
|
|
47701
|
+
if (files.length > 0) triggerKbPipeline(slug);
|
|
47634
47702
|
});
|
|
47635
47703
|
});
|
|
47636
47704
|
app.get("/api/data/projects/:slug/uploads", (req, res) => {
|
|
@@ -47640,7 +47708,7 @@ app.get("/api/data/projects/:slug/uploads", (req, res) => {
|
|
|
47640
47708
|
return;
|
|
47641
47709
|
}
|
|
47642
47710
|
try {
|
|
47643
|
-
const uploadDir = import_node_path.default.join(projectDir(slug), "
|
|
47711
|
+
const uploadDir = import_node_path.default.join(projectDir(slug), "knowledge-base");
|
|
47644
47712
|
if (!import_node_fs.default.existsSync(uploadDir)) {
|
|
47645
47713
|
res.json([]);
|
|
47646
47714
|
return;
|
|
@@ -47665,7 +47733,7 @@ app.delete("/api/data/projects/:slug/uploads/:filename", (req, res) => {
|
|
|
47665
47733
|
return;
|
|
47666
47734
|
}
|
|
47667
47735
|
try {
|
|
47668
|
-
const filePath = import_node_path.default.join(projectDir(slug), "
|
|
47736
|
+
const filePath = import_node_path.default.join(projectDir(slug), "knowledge-base", filename);
|
|
47669
47737
|
if (import_node_fs.default.existsSync(filePath)) import_node_fs.default.unlinkSync(filePath);
|
|
47670
47738
|
res.json({ ok: true });
|
|
47671
47739
|
} catch (err) {
|
|
@@ -47779,6 +47847,63 @@ app.put("/api/data/token-stats", (req, res) => {
|
|
|
47779
47847
|
res.status(500).json({ error: String(err) });
|
|
47780
47848
|
}
|
|
47781
47849
|
});
|
|
47850
|
+
app.get("/api/kb/:slug/retrieve", (req, res) => {
|
|
47851
|
+
const { slug } = req.params;
|
|
47852
|
+
if (!safeSlug(slug)) {
|
|
47853
|
+
res.status(400).json({ error: "Invalid slug" });
|
|
47854
|
+
return;
|
|
47855
|
+
}
|
|
47856
|
+
const rawQuery = typeof req.query.query === "string" ? req.query.query : "";
|
|
47857
|
+
const query = rawQuery.slice(0, 500);
|
|
47858
|
+
if (!query) {
|
|
47859
|
+
res.status(400).json({ error: "query param required" });
|
|
47860
|
+
return;
|
|
47861
|
+
}
|
|
47862
|
+
const maxTokens = String(parseInt(String(req.query.max_tokens ?? "3000"), 10) || 3e3);
|
|
47863
|
+
const strategy = /^[a-z]+$/.test(String(req.query.strategy ?? "")) ? String(req.query.strategy) : "balanced";
|
|
47864
|
+
const py = pythonBin();
|
|
47865
|
+
const child = (0, import_node_child_process.spawn)(
|
|
47866
|
+
py,
|
|
47867
|
+
[
|
|
47868
|
+
"-m",
|
|
47869
|
+
"enigma.optimization.knowledge_graph.cli",
|
|
47870
|
+
"context",
|
|
47871
|
+
"--project",
|
|
47872
|
+
slug,
|
|
47873
|
+
"--query",
|
|
47874
|
+
query,
|
|
47875
|
+
"--max-tokens",
|
|
47876
|
+
maxTokens,
|
|
47877
|
+
"--strategy",
|
|
47878
|
+
strategy,
|
|
47879
|
+
"--root-dir",
|
|
47880
|
+
DESIGNX_DATA_DIR
|
|
47881
|
+
],
|
|
47882
|
+
{ cwd: WORKSPACE_ROOT, stdio: "pipe" }
|
|
47883
|
+
);
|
|
47884
|
+
let stdout = "";
|
|
47885
|
+
child.stdout?.on("data", (chunk) => {
|
|
47886
|
+
stdout += chunk.toString();
|
|
47887
|
+
});
|
|
47888
|
+
const timeout = setTimeout(() => {
|
|
47889
|
+
child.kill();
|
|
47890
|
+
res.status(504).json({ error: "KB retrieval timed out" });
|
|
47891
|
+
}, 15e3);
|
|
47892
|
+
child.on("close", (code) => {
|
|
47893
|
+
clearTimeout(timeout);
|
|
47894
|
+
if (res.headersSent) return;
|
|
47895
|
+
try {
|
|
47896
|
+
const data = JSON.parse(stdout);
|
|
47897
|
+
if (data.error && !data.context) {
|
|
47898
|
+
res.status(500).json({ error: data.error });
|
|
47899
|
+
return;
|
|
47900
|
+
}
|
|
47901
|
+
res.json({ context: data.context ?? "", source: data.source ?? "fallback", tokens: data.tokens ?? 0 });
|
|
47902
|
+
} catch {
|
|
47903
|
+
res.status(500).json({ error: `KB retrieval failed (exit ${code})` });
|
|
47904
|
+
}
|
|
47905
|
+
});
|
|
47906
|
+
});
|
|
47782
47907
|
app.get("/api/kb/:slug/context", (req, res) => {
|
|
47783
47908
|
const { slug } = req.params;
|
|
47784
47909
|
if (!safeSlug(slug)) {
|
|
@@ -47786,12 +47911,14 @@ app.get("/api/kb/:slug/context", (req, res) => {
|
|
|
47786
47911
|
return;
|
|
47787
47912
|
}
|
|
47788
47913
|
try {
|
|
47789
|
-
const
|
|
47790
|
-
|
|
47914
|
+
const mdDir = import_node_path.default.join(projectDir(slug), "knowledge-base-md");
|
|
47915
|
+
const rawDir = import_node_path.default.join(projectDir(slug), "knowledge-base");
|
|
47916
|
+
const sourceDir = import_node_fs.default.existsSync(mdDir) ? mdDir : rawDir;
|
|
47917
|
+
if (!import_node_fs.default.existsSync(sourceDir)) {
|
|
47791
47918
|
res.json({ entries: [], totalChars: 0 });
|
|
47792
47919
|
return;
|
|
47793
47920
|
}
|
|
47794
|
-
const
|
|
47921
|
+
const PLAIN_TEXT_EXTS = /* @__PURE__ */ new Set([
|
|
47795
47922
|
".txt",
|
|
47796
47923
|
".md",
|
|
47797
47924
|
".mdx",
|
|
@@ -47825,12 +47952,12 @@ app.get("/api/kb/:slug/context", (req, res) => {
|
|
|
47825
47952
|
const TOTAL_CAP = 2e5;
|
|
47826
47953
|
let totalChars = 0;
|
|
47827
47954
|
const entries = [];
|
|
47828
|
-
for (const name of import_node_fs.default.readdirSync(
|
|
47955
|
+
for (const name of import_node_fs.default.readdirSync(sourceDir)) {
|
|
47829
47956
|
if (totalChars >= TOTAL_CAP) break;
|
|
47830
|
-
const filePath = import_node_path.default.join(
|
|
47957
|
+
const filePath = import_node_path.default.join(sourceDir, name);
|
|
47831
47958
|
if (import_node_fs.default.statSync(filePath).isDirectory()) continue;
|
|
47832
47959
|
const ext = import_node_path.default.extname(name).toLowerCase();
|
|
47833
|
-
if (ext && !
|
|
47960
|
+
if (sourceDir === rawDir && ext && !PLAIN_TEXT_EXTS.has(ext)) continue;
|
|
47834
47961
|
try {
|
|
47835
47962
|
const raw = import_node_fs.default.readFileSync(filePath, "utf8");
|
|
47836
47963
|
const limit = Math.min(PER_FILE_CAP, TOTAL_CAP - totalChars);
|