wiki-graph 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -271
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +2983 -4
- package/dist/cli.js.map +1 -0
- package/{data → dist/data}/editor/text_compressor.jinja +17 -13
- package/{data → dist/data}/help/commands/archive/next.jinja +7 -2
- package/{data → dist/data}/help/commands/gc.jinja +2 -1
- package/{data → dist/data}/help/commands/legacy/migrate.jinja +6 -1
- package/{data → dist/data}/help/commands/legacy.jinja +3 -2
- package/dist/data/help/commands/library-predicate.jinja +296 -0
- package/dist/data/help/commands/library.jinja +235 -0
- package/{data → dist/data}/help/commands/maintenance/chapter/add.jinja +3 -3
- package/{data → dist/data}/help/commands/maintenance/chapter/list.jinja +4 -4
- package/{data → dist/data}/help/commands/maintenance/chapter/move.jinja +4 -4
- package/{data → dist/data}/help/commands/maintenance/chapter/remove.jinja +1 -1
- package/{data → dist/data}/help/commands/maintenance/chapter/reset.jinja +1 -1
- package/{data → dist/data}/help/commands/maintenance/chapter/set-source.jinja +2 -2
- package/{data → dist/data}/help/commands/maintenance/chapter/set-summary.jinja +1 -1
- package/{data → dist/data}/help/commands/maintenance/chapter/set-title.jinja +3 -3
- package/{data → dist/data}/help/commands/maintenance/chapter/tree.jinja +6 -6
- package/{data → dist/data}/help/commands/maintenance/chapter.jinja +10 -10
- package/{data → dist/data}/help/commands/maintenance/meta.jinja +7 -7
- package/dist/data/help/commands/maintenance/upgrade.jinja +35 -0
- package/dist/data/help/commands/maintenance.jinja +23 -0
- package/{data → dist/data}/help/commands/predicate.jinja +204 -28
- package/{data → dist/data}/help/commands/root.jinja +10 -3
- package/{data → dist/data}/help/commands/uri.jinja +165 -6
- package/{data → dist/data}/help/topics/config.jinja +10 -3
- package/dist/data/help/topics/library.jinja +87 -0
- package/{data → dist/data}/help/topics/readiness.jinja +32 -2
- package/{data → dist/data}/help/topics/recipe.jinja +42 -17
- package/{data → dist/data}/help/topics/runtime.jinja +20 -3
- package/{data → dist/data}/help/topics/uri.jinja +51 -25
- package/dist/gc-worker.d.ts +1 -0
- package/dist/gc-worker.js +548 -0
- package/dist/gc-worker.js.map +1 -0
- package/dist/index.cjs +12463 -19690
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +36 -842
- package/dist/index.d.ts +36 -842
- package/dist/index.js +13871 -9
- package/dist/index.js.map +1 -0
- package/dist/queue-worker.d.ts +1 -0
- package/dist/queue-worker.js +2110 -0
- package/dist/queue-worker.js.map +1 -0
- package/package.json +18 -45
- package/dist/cli.cjs +0 -41734
- package/dist/cli.cjs.map +0 -1
- package/docs/images/flowchart.excalidraw +0 -3293
- package/docs/images/flowchart.svg +0 -4
- package/docs/images/terminal-cn.png +0 -0
- package/docs/images/terminal-en.png +0 -0
- package/docs/wikispine-runtime.md +0 -143
- /package/{data → dist/data}/editor/clue_reviewer.jinja +0 -0
- /package/{data → dist/data}/editor/clue_reviewer_generator.jinja +0 -0
- /package/{data → dist/data}/editor/revision_feedback.jinja +0 -0
- /package/{data → dist/data}/guaranteed/response_intent_classifier.jinja +0 -0
- /package/{data → dist/data}/help/commands/maintenance/cover.jinja +0 -0
- /package/{data → dist/data}/help/commands/transform.jinja +0 -0
- /package/{data → dist/data}/help/topics/format.jinja +0 -0
- /package/{data → dist/data}/output/epub/cover.xhtml.jinja +0 -0
- /package/{data → dist/data}/output/epub/nav.xhtml.jinja +0 -0
- /package/{data → dist/data}/output/epub/package.opf.xml.jinja +0 -0
- /package/{data → dist/data}/output/epub/section.xhtml.jinja +0 -0
- /package/{data → dist/data}/topologization/book_coherence_extraction.jinja +0 -0
- /package/{data → dist/data}/topologization/chunk_extraction.jinja +0 -0
- /package/{data → dist/data}/topologization/evidence_choice.jinja +0 -0
- /package/{data → dist/data}/topologization/translate_chunks.jinja +0 -0
- /package/{data → dist/data}/topologization/user_focused_extraction.jinja +0 -0
|
@@ -0,0 +1,2110 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { fileURLToPath as __WIKIGRAPH_FILE_URL_TO_PATH__ } from "url";
|
|
3
|
+
import { resolve as __WIKIGRAPH_RESOLVE__ } from "path";
|
|
4
|
+
globalThis.__WIKIGRAPH_CLI_DIST_DIR__ ??= __WIKIGRAPH_RESOLVE__(__WIKIGRAPH_FILE_URL_TO_PATH__(new URL(".", import.meta.url)));
|
|
5
|
+
globalThis.__WIKIGRAPH_DATA_DIR__ ??= __WIKIGRAPH_RESOLVE__(__WIKIGRAPH_FILE_URL_TO_PATH__(new URL("./data", import.meta.url)));
|
|
6
|
+
var p_=Object.defineProperty;var d=(t,e)=>()=>(t&&(e=t(t=0)),e);var Yh=(t,e)=>{for(var r in e)p_(t,r,{get:e[r],enumerable:!0})};function Ad(t){return h_[t]}function Lr(t){let e=t?.trim().toLowerCase().replaceAll("_","-");if(!(e===void 0||e===""))return f_.get(e)}var h_,f_,Ve=d(()=>{"use strict";h_={Arabic:"ar",Danish:"da",Dutch:"nl",English:"en",Finnish:"fi",French:"fr",German:"de",Hindi:"hi",Indonesian:"id",Italian:"it",Japanese:"ja",Korean:"ko",Norwegian:"no",Polish:"pl",Portuguese:"pt",Russian:"ru","Simplified Chinese":"zh",Spanish:"es",Swedish:"sv",Thai:"th","Traditional Chinese":"zh",Turkish:"tr",Vietnamese:"vi"},f_=new Map([["ar","ar"],["ara","ar"],["arabic","ar"],["da","da"],["danish","da"],["de","de"],["deu","de"],["dut","nl"],["dutch","nl"],["en","en"],["eng","en"],["english","en"],["fi","fi"],["fin","fi"],["finnish","fi"],["fr","fr"],["fra","fr"],["fre","fr"],["french","fr"],["ger","de"],["german","de"],["hi","hi"],["hin","hi"],["hindi","hi"],["id","id"],["ind","id"],["indonesian","id"],["it","it"],["ita","it"],["italian","it"],["ja","ja"],["japanese","ja"],["jpn","ja"],["ko","ko"],["kor","ko"],["korean","ko"],["nl","nl"],["no","no"],["nor","no"],["norwegian","no"],["pl","pl"],["pol","pl"],["polish","pl"],["por","pt"],["portuguese","pt"],["pt","pt"],["ru","ru"],["rus","ru"],["russian","ru"],["spa","es"],["spanish","es"],["es","es"],["sv","sv"],["swe","sv"],["swedish","sv"],["th","th"],["tha","th"],["thai","th"],["tr","tr"],["tur","tr"],["turkish","tr"],["vi","vi"],["vie","vi"],["vietnamese","vi"],["zh","zh"],["zh-cn","zh"],["zh-hans","zh"],["zh-sg","zh"],["zh-tw","zh"],["zh-hant","zh"],["zh-hk","zh"],["cn","zh"],["chi","zh"],["chinese","zh"],["simplified chinese","zh"],["traditional chinese","zh"],["zho","zh"]])});import{createHash as y_}from"crypto";function Yn(t){return new Od().run(t)}function g_(t){return"toJSON"in t&&typeof t.toJSON=="function"}var wo,Od,Eo=d(()=>{"use strict";wo=Symbol("UNSERIALIZABLE");Od=class{#e=new Set;#t=y_("sha512");#r=new Set;run(e){if(!this.#n(e,""))throw new TypeError("Hash input must be JSON-serializable");return this.#t.digest("hex")}#n(e,r){let n=this.#s(e,r);return n===wo?!1:(this.#i(n),!0)}#i(e){if(e===null){this.#t.update("null","utf8");return}if(typeof e=="string"){this.#t.update(JSON.stringify(e),"utf8");return}if(typeof e=="number"){this.#t.update(Number.isFinite(e)?String(e):"null","utf8");return}if(typeof e=="boolean"){this.#t.update(e?"true":"false","utf8");return}if(this.#e.has(e))throw new TypeError("Hash input must be JSON-serializable");this.#e.add(e);try{if(Array.isArray(e)){this.#a(e);return}this.#o(e)}finally{this.#e.delete(e)}}#a(e){this.#t.update("[","utf8");for(let[r,n]of e.entries()){r>0&&this.#t.update(",","utf8");let i=this.#s(n,String(r));if(i===wo){this.#t.update("null","utf8");continue}this.#i(i)}this.#t.update("]","utf8")}#o(e){this.#t.update("{","utf8");let r=!1;for(let n of Object.keys(e)){let i=e[n],a=this.#s(i,n);a!==wo&&(r&&this.#t.update(",","utf8"),this.#t.update(JSON.stringify(n),"utf8"),this.#t.update(":","utf8"),this.#i(a),r=!0)}this.#t.update("}","utf8")}#s(e,r){if(e===null)return null;if(typeof e=="string"||typeof e=="boolean")return e;if(typeof e=="number")return Number.isFinite(e)?e:null;if(e===void 0||typeof e=="function"||typeof e=="symbol")return wo;if(typeof e=="bigint")throw new TypeError("Hash input must be JSON-serializable");if(e instanceof String||e instanceof Number||e instanceof Boolean)return this.#s(e.valueOf(),r);if(!g_(e))return e;if(this.#r.has(e))throw new TypeError("Hash input must be JSON-serializable");this.#r.add(e);try{return this.#s(e.toJSON(r),r)}finally{this.#r.delete(e)}}}});function w(t){return t instanceof Error}function ae(t){let e=[],r=new Set,n=t;for(;n!==void 0&&!r.has(n);){if(r.add(n),n instanceof Error){Zh(e,b_(n)),n=n.cause;continue}Zh(e,String(n));break}return e.join(": ")}function b_(t){let e=t,r=t.message.trim(),n=typeof e.code=="string"&&e.code!==""?e.code:void 0,i=typeof e.path=="string"&&e.path!==""?e.path:void 0;return n==="ENOENT"?i===void 0?"File not found (ENOENT)":`File not found: ${i} (ENOENT)`:n==="EACCES"||n==="EPERM"?i===void 0?`Permission denied (${n})`:`Permission denied: ${i} (${n})`:r===""?n===void 0?t.name:`${t.name} (${n})`:n===void 0?r:`${r} (${n})`}function Zh(t,e){let r=e.trim();if(r==="")return;let n=t.at(-1);if(n===void 0){t.push(r);return}if(!(n===r||n.includes(r))){if(r.includes(n)){t[t.length-1]=r;return}t.push(r)}}var T=d(()=>{"use strict"});import{mkdir as Tq,readFile as _q,rm as Cq,writeFile as Pq}from"fs/promises";import{join as Aq,resolve as Oq}from"path";import{z as Zn}from"zod";var S_,Wq,ef=d(()=>{"use strict";Eo();T();S_=1,Wq=Zn.object({completedAt:Zn.string().optional(),startedAt:Zn.string(),status:Zn.enum(["running","succeeded"]),version:Zn.literal(S_)})});var tf=d(()=>{"use strict";ef()});import{readFile as x_,writeFile as R_}from"fs/promises";import{join as v_}from"path";var ko,rf=d(()=>{"use strict";T();ko=class{#e;constructor(e){this.#e=e}createEntry(e,r){return{cacheKey:e,response:r}}async read(e){try{return await x_(this.#t(e),"utf8")}catch(r){if(w(r)&&r.code==="ENOENT")return;throw r}}async write(e){await R_(this.#t(e.cacheKey),e.response,"utf8")}#t(e){return v_(this.#e,`${e}.txt`)}}});import{existsSync as T_,mkdirSync as __,statSync as C_}from"fs";import{resolve as P_}from"path";function Nd(t){if(t===void 0)return;let e=P_(t);if(!T_(e))return __(e,{recursive:!0}),e;if(C_(e).isDirectory())return e}function nf(t){let e=Nd(t);if(e!==void 0)return new ko(e)}var af=d(()=>{"use strict";rf()});function of(t){let e=[],r=0;for(;r<t.messages.length;){let n=t.messages[r];if(n===void 0||n.role!=="system")break;e.push(n),r+=1}if(e.length===0)return t;if(e.length===1){let[n]=e;return n===void 0?t:{...t,messages:t.messages.slice(r),system:n}}return{...t,messages:t.messages.slice(r),system:e}}var sf=d(()=>{"use strict"});function cf(t){return t.some(e=>e.role!=="system"&&(typeof e.content!="string"||e.content.trim()!==""))}function df(t){let e=["[[Parameters]]:",` model=${t.modelIdentity}`,` temperature=${String(t.resolvedTemperature)}`,` top_p=${String(t.resolvedTopP)}`];return t.modelProvider!==void 0&&e.push(` provider=${t.modelProvider}`),e.push(` model_id=${t.modelId}`),t.scope!==void 0&&e.push(` scope=${t.scope}`),Array.isArray(t.temperature)&&e.push(` temperature_schedule=${JSON.stringify(t.temperature)}`),Array.isArray(t.topP)&&e.push(` top_p_schedule=${JSON.stringify(t.topP)}`),t.retryIndex!==void 0&&t.retryMax!==void 0&&e.push(` retry_progress=${t.retryIndex}/${t.retryMax}`),t.cacheKey!==void 0&&e.push(` cache_key=${t.cacheKey}`),t.sessionId!==void 0&&e.push(` session_id=${t.sessionId}`),`${e.join(`
|
|
7
|
+
`)}
|
|
8
|
+
|
|
9
|
+
`}function uf(t){return`[[Request]]:
|
|
10
|
+
${t.map(r=>`${D_(r.role)}:
|
|
11
|
+
${N_(r.content)}`).join(`
|
|
12
|
+
|
|
13
|
+
`)}
|
|
14
|
+
|
|
15
|
+
`}function Ar(t,e){return[L_(t),...e===void 0?[]:[A_(e)]].join("")}function L_(t){return t==="cache-hit"?`[[Usage]]:
|
|
16
|
+
cache-hit
|
|
17
|
+
|
|
18
|
+
`:["[[Usage]]:",`input: ${Dd(t?.inputTokens)}`,`cache: ${Dd(t?.inputTokenDetails.cacheReadTokens)}`,`output: ${Dd(t?.outputTokens)}`,"",""].join(`
|
|
19
|
+
`)}function Dd(t){return t===void 0?"unavailable":String(t)}function A_(t){return`[[Error Stack]]:
|
|
20
|
+
${O_(t)}
|
|
21
|
+
|
|
22
|
+
`}function O_(t){return t instanceof Error?t.stack??ae(t):ae(t)}function N_(t){if(typeof t=="string")return t;let e=JSON.stringify(t,null,2);return typeof e=="string"?e:""}function D_(t){return t.length===0?t:`${t[0]?.toUpperCase()??""}${t.slice(1)}`}var lf=d(()=>{"use strict";T()});function mf(t){return typeof t=="string"?{identity:t,modelId:t}:M_(t)?{identity:t.provider===void 0?t.modelId:`${t.provider}:${t.modelId}`,modelId:t.modelId,...t.provider===void 0?{}:{provider:t.provider}}:{identity:"unknown-model",modelId:"unknown-model"}}function M_(t){return typeof t=="object"&&t!==null&&"modelId"in t&&typeof t.modelId=="string"&&(!("provider"in t)||typeof t.provider=="string")}var pf=d(()=>{"use strict"});import{APICallError as hf}from"ai";function ff(t){return hf.isInstance(t)?Md(t)?!1:t.isRetryable?!0:B_(t.statusCode):!U_(t)&&H_(t)}function Md(t){return hf.isInstance(t)&&t.statusCode===402}function B_(t){return typeof t=="number"&&F_.has(t)}function U_(t){return yf(t,e=>W_.has(e.name))}function H_(t){return yf(t,e=>{let r=e,n=typeof r.code=="string"?r.code.toUpperCase():void 0;if(n!==void 0&&j_.has(n))return!0;let i=e.message.toLowerCase();return G_.some(a=>i.includes(a))})}function yf(t,e){let r=new Set,n=t;for(;n instanceof Error&&!r.has(n);){if(e(n))return!0;r.add(n),n=n.cause}return!1}var W_,F_,j_,G_,gf=d(()=>{"use strict";W_=new Set(["AbortError","ResponseAborted","TimeoutError"]),F_=new Set([408,409,425,429,500,502,503,504,520,522,524,529]),j_=new Set(["ECONNRESET","ECONNREFUSED","EAI_AGAIN","ETIMEDOUT","EPIPE","UND_ERR_CONNECT_TIMEOUT","UND_ERR_HEADERS_TIMEOUT","UND_ERR_SOCKET"]),G_=["connection","terminated","timeout","network","rate limit"]});import{AsyncLocalStorage as q_}from"async_hooks";import{randomUUID as $_}from"crypto";import{existsSync as K_,mkdirSync as Io}from"fs";import{dirname as J_,join as Or,resolve as Wd}from"path";import wf,{multistream as z_}from"pino";import bf from"pino-pretty";async function Ro(t,e){let r=t.logDirPath===void 0?void 0:Wd(t.logDirPath),n=V_(),i=r===void 0?void 0:Or(r,n),a=i===void 0?void 0:Or(i,"artifacts");i!==void 0&&Io(i,{recursive:!0});let o=X_({operation:t.operation,runId:n,verbose:t.verbose??!1,...i===void 0?{}:{eventLogPath:Or(i,"run.log")}});return await xo.run({artifactCounters:new Map,logger:o,runId:n,...a===void 0?{}:{artifactRootDirPath:a},...r===void 0?{}:{rootLogDirPath:r}},e)}function Te(t){let e=xo.getStore()?.logger??Ef;return t===void 0?e:e.child(t)}function Fd(t){if(t.logDirPath===void 0)return;let e=Wd(t.logDirPath),r=xo.getStore();if(r?.rootLogDirPath===e&&r.artifactRootDirPath!==void 0){let n=Or(r.artifactRootDirPath,t.category);return Io(n,{recursive:!0}),Or(n,t.fileName)}return Io(e,{recursive:!0}),Or(e,t.fileName)}function vo(t){if(t.logDirPath===void 0)return;let e=Wd(t.logDirPath),r=xo.getStore(),n=t.extension??".log",i=r?.artifactCounters??Q_,a=`${e}:${t.category}:${t.prefix}:${n}`,o=i.get(a),s=o===void 0?1:o+1;for(let c=s;;c+=1){let u=t.alwaysNumbered===!0?`${t.prefix}-${c}${n}`:c===1?`${t.prefix}${n}`:`${t.prefix}-${c}${n}`,l=Fd({category:t.category,fileName:u,logDirPath:t.logDirPath});if(l===void 0)return;if(!K_(l))return i.set(a,c),l}}function X_(t){let e=[];return t.eventLogPath!==void 0&&(Io(J_(t.eventLogPath),{recursive:!0}),e.push({level:"info",stream:bf(Sf(t.eventLogPath))})),t.verbose&&e.push({level:"info",stream:bf(Sf(process.stderr))}),e.length===0?Ef:wf({base:null,level:"info"},z_(e)).child({operation:t.operation,runId:t.runId})}function Sf(t){return{colorize:!1,destination:t,ignore:"pid,hostname,operation,runId,component,scope,sessionId",mkdir:typeof t=="string",singleLine:!0,sync:!0,translateTime:"SYS:yyyy-mm-dd HH:MM:ss"}}function V_(){let t=new Date,e=String(t.getUTCFullYear()),r=ei(t.getUTCMonth()+1),n=ei(t.getUTCDate()),i=ei(t.getUTCHours()),a=ei(t.getUTCMinutes()),o=ei(t.getUTCSeconds());return`${e}${r}${n}-${i}${a}${o}-${$_().slice(0,8)}`}function ei(t){return String(t).padStart(2,"0")}var xo,Q_,Ef,_e=d(()=>{"use strict";xo=new q_,Q_=new Map,Ef=wf({enabled:!1})});import{readFileSync as Y_,statSync as kf}from"fs";import{resolve as xf,sep as If}from"path";import{Environment as Z_,Loader as eC}from"nunjucks";function ti(t,e={}){return new Z_(new jd(xf(t)),{autoescape:e.autoescape??!0,trimBlocks:e.trimBlocks??!0})}function iC(t){if(rC.test(t))throw new Error(`invalid path ${t}`);return`${t.replace(nC,"").replace(tC,"")}.jinja`}function aC(t,e,r){let n=t.endsWith(If)?t:`${t}${If}`;if(!(e===t||e.startsWith(n)))throw new Error(`cannot find ${r}`)}var tC,rC,nC,jd,To=d(()=>{"use strict";tC=/\.jinja$/i,rC=/^\.+\//,nC=/^\/+/;jd=class extends eC{#e;constructor(e){super(),this.#e=e}getSource(e){let r=iC(e),n=xf(this.#e,r);aC(this.#e,n,r);let i=Y_(n,"utf8"),a=kf(n).mtimeMs;return{noCache:!1,path:n,src:i,upToDate:()=>kf(n).mtimeMs===a}}}});var Ce,ri=d(()=>{"use strict";Ce=class{#e=0;#t;#r=[];constructor(e){if(!Number.isInteger(e)||e<1)throw new RangeError("concurrency must be a positive integer");this.#t=e}async use(e){await this.#n();try{return await e()}finally{this.#i()}}async#n(){if(this.#e<this.#t){this.#e+=1;return}await new Promise(e=>{this.#r.push(()=>{this.#e+=1,e()})})}#i(){this.#e-=1,this.#r.shift()?.()}}});var ni,Gd=d(()=>{"use strict";_e();ni=class{#e;#t=new Map;#r;#n=[];#i=!1;sessionId;constructor(e,r,n){this.sessionId=e,this.#e=n,this.#r=r}async request(e,r={}){return this.#a(),await this.#r({logFiles:this.#n,messages:e,options:r,pendingCacheEntries:this.#t})}async commit(){if(!this.#i){for(let e of this.#t.values())this.#e!==void 0&&await this.#e.write(e);this.#t.clear(),this.#i=!0}}rollback(){return this.#i||(this.#t.clear(),this.#i=!0),Promise.resolve()}async run(e){try{let r=await e(this);return await this.commit(),r}catch(r){throw await this.rollback(),this.#o(),r}}#a(){if(this.#i)throw new Error("LLMContext is already finalized")}#o(){if(this.#n.length===0)return;let e=Te({component:"llm-context",sessionId:this.sessionId});e.warn(`
|
|
23
|
+
[LLMContext] Failed with ${this.#n.length} log file(s):`);for(let[r,n]of this.#n.entries())e.warn(` ${r+1}. ${n}`)}}});var Nr,Bd=d(()=>{"use strict";Nr=class extends Error{isRetryable=!1;statusCode=402;constructor(e="LLM payment required.",r){super(e,r),this.name="LLMPaymentRequiredError"}}});import{appendFile as oC}from"fs/promises";function Rf(t){return t===void 0?new _o:new _o(vo({alwaysNumbered:!0,category:"llm",logDirPath:t,prefix:"request"}))}var _o,vf=d(()=>{"use strict";_e();_o=class{#e;constructor(e){this.#e=e}get filePath(){return this.#e}async append(e){this.#e!==void 0&&await oC(this.#e,e,"utf8")}}});function Co(t,e,r,n){if(t===void 0)return;if(typeof t=="number")return t;if(t.length===1)return t[0];if(t.length!==2)throw new RangeError(`${e} must be a number or a 2-item range like [0.6, 0.98]`);let[i,a]=t;if(i===void 0||a===void 0)throw new RangeError(`${e} must be a number or a 2-item range like [0.6, 0.98]`);if(r===void 0||n===void 0||n<=0)return i;let s=Math.min(Math.max(r,0),n)/n;return i+(a-i)*s}function Ud(t,e,r,n){if(t===void 0)return{temperature:r,topP:n};if(e===void 0)return{temperature:r,topP:n};let i=e[t];return i===void 0?{temperature:r,topP:n}:{temperature:i.temperature??r,topP:i.topP??n}}var Hd=d(()=>{"use strict"});import{setTimeout as sC}from"timers/promises";import{generateText as cC,streamText as dC}from"ai";var uC,lC,Tf,St,_f=d(()=>{"use strict";af();sf();lf();pf();gf();_e();To();ri();Eo();T();Gd();Bd();vf();Hd();uC=36e4,lC=6,Tf=0,St=class{#e;#t;#r;#n;#i;#a;#o;#s;#c;#l;#u;#d;#p;#m;#h;#f;#b;#y;config;constructor(e){let r=e.concurrent??lC,n=e.timeout??uC,i=e.temperature??.6,a=e.topP??.6,o=e.sampling,s=e.stream??!1,c=mf(e.model);this.config=Object.freeze({concurrent:r,modelId:c.modelId,temperature:i,stream:s,timeout:n,topP:a,...c.provider===void 0?{}:{provider:c.provider},...o===void 0?{}:{sampling:o}}),this.#e=nf(e.cacheDirPath),this.#t=new Ce(r),this.#r=Nd(e.logDirPath),this.#n=e.model,this.#i=c.provider,this.#a=c.modelId,this.#o=c.identity,this.#s=e.onStreamProgress,this.#c=e.onTokenUsage,this.#l=new Ce(r),this.#u=e.retryIntervalSeconds??6,this.#d=e.retryTimes??5,this.#p=o,this.#m=s,this.#h=ti(e.dataDirPath),this.#f=i,this.#b=n,this.#y=a}context(){Tf+=1;let e=Tf;return new ni(e,async r=>await this.#S({...r.options,messages:r.messages,sessionId:e,...r.logFiles===void 0?{}:{logFiles:r.logFiles},...r.pendingCacheEntries===void 0?{}:{pendingCacheEntries:r.pendingCacheEntries}}),this.#e)}async withContext(e){return await this.context().run(e)}async request(e,r={}){return typeof e=="function"?await this.#t.use(async()=>await e(this.#g)):await this.#g(e,r)}#g=async(e,r={})=>await this.#S({messages:e,...r});loadSystemPrompt(e,r={}){return this.#h.render(e,r)}async#S(e){let r=Ud(e.scope,this.#p,this.#f,this.#y),n=e.temperature??r.temperature,i=e.topP??r.topP,a=Co(n,"temperature",e.retryIndex,e.retryMax),o=Co(i,"top_p",e.retryIndex,e.retryMax),s=(e.useCache??!0)&&cf(e.messages),c=this.#e!==void 0&&s?Yn({messages:e.messages.map(h=>({content:h.content,role:h.role})),modelId:this.#a,provider:this.#i??null,temperature:a??null,topP:o??null}):void 0,u=Rf(this.#r);if(u.filePath!==void 0&&e.logFiles!==void 0&&e.logFiles.push(u.filePath),await u.append(df({cacheKey:c,modelId:this.#a,modelIdentity:this.#o,modelProvider:this.#i,resolvedTemperature:a,resolvedTopP:o,retryIndex:e.retryIndex,retryMax:e.retryMax,scope:e.scope,sessionId:e.sessionId,temperature:n,topP:i})),await u.append(uf(e.messages)),c!==void 0&&this.#e!==void 0&&s){let h=await this.#e.read(c);if(h!==void 0)return Te({component:"llm",scope:e.scope,sessionId:e.sessionId}).info(`[Cache Hit] Using cached response (key: ${c.slice(0,12)}...)`),await u.append(`[[Response]] (from cache):
|
|
24
|
+
${h}
|
|
25
|
+
|
|
26
|
+
`),await u.append(Ar("cache-hit")),h}let l,m,p;for(let h=0;h<=this.#d;h+=1)try{l=await this.#l.use(async()=>{let g=of({maxRetries:0,messages:[...e.messages],model:this.#n,timeout:this.#b});if(e.signal!==void 0&&(g.abortSignal=e.signal),a!==void 0&&(g.temperature=a),o!==void 0&&(g.topP=o),this.#m){let f=[],E=dC(g);for await(let v of E.textStream)f.push(v),await this.#w(v.length);return m=await E.totalUsage,await this.#E(m),f.join("")}else{let f=await cC(g);return m=f.usage,await this.#w(f.text.length),await this.#E(m),f.text}}),await u.append(`[[Response]]:
|
|
27
|
+
${l}
|
|
28
|
+
|
|
29
|
+
`);break}catch(g){if(p=g,Md(g)){let f=new Nr(void 0,{cause:g});throw await u.append(`[[Error]]:
|
|
30
|
+
${ae(f)}
|
|
31
|
+
|
|
32
|
+
`),await u.append(Ar(m,g)),f}if(!ff(g))throw await u.append(`[[Error]]:
|
|
33
|
+
${ae(g)}
|
|
34
|
+
|
|
35
|
+
`),await u.append(Ar(m,g)),g;await u.append(`[[Warning]]:
|
|
36
|
+
Request failed with connection error, retrying... (${h+1} times)
|
|
37
|
+
|
|
38
|
+
`),h<this.#d&&this.#u>0&&await sC(this.#u*1e3,void 0,{signal:e.signal})}if(l===void 0){let h=p===void 0?`LLM request failed after ${this.#d+1} attempts`:`LLM request failed after ${this.#d+1} attempts: ${ae(p)}`;throw await u.append(`[[Error]]:
|
|
39
|
+
${h}
|
|
40
|
+
|
|
41
|
+
`),await u.append(Ar(m,p)),new Error(h,{...p===void 0?{}:{cause:p}})}if(c!==void 0&&this.#e!==void 0&&s){let h=this.#e.createEntry(c,l);e.sessionId!==void 0&&e.pendingCacheEntries!==void 0?e.pendingCacheEntries.set(h.cacheKey,h):await this.#e.write(h)}return await u.append(Ar(m)),l}async#w(e){if(this.#s!==void 0)try{await this.#s({outputCharacters:e})}catch{return}}async#E(e){if(!(this.#c===void 0||e===void 0))try{await this.#c({...e.inputTokenDetails.cacheReadTokens===void 0?{}:{cacheReadTokens:e.inputTokenDetails.cacheReadTokens},...e.inputTokens===void 0?{}:{inputTokens:e.inputTokens},...e.outputTokens===void 0?{}:{outputTokens:e.outputTokens}})}catch{return}}}});var Cf=d(()=>{"use strict";_f()});var qd=d(()=>{"use strict";Cf();Gd();Bd();Hd()});var mC,ii,$d,ai=d(()=>{"use strict";mC=Object.freeze(["serial-generation/editor-compress","serial-generation/editor-review","serial-generation/editor-review-guide","serial-generation/reader-choice","serial-generation/reader-extraction"]),ii=Object.freeze({compress:"serial-generation/editor-compress",review:"serial-generation/editor-review",reviewGuide:"serial-generation/editor-review-guide"}),$d=Object.freeze({choice:"serial-generation/reader-choice",extraction:"serial-generation/reader-extraction"})});var Pf=d(()=>{"use strict"});import{existsSync as Af,statSync as Of}from"fs";import{fileURLToPath as pC}from"url";import{dirname as Nf,join as Lf,parse as hC,resolve as Kd}from"path";function Kt(){let t=globalThis.__WIKIGRAPH_DATA_DIR__;if(typeof t=="string"&&t!=="")return t;let e=fC();return e!==void 0?e:yC()}function fC(){let t=Nf(pC(import.meta.url));for(let e of[Kd(t,"../../../data"),Kd(t,"../../data"),Kd(t,"../data")])if(Af(e)&&Of(e).isDirectory())return e}function yC(){let t=process.cwd(),e=hC(t).root;for(;;){for(let r of[Lf(t,"data"),Lf(t,"packages","core","data")])if(Af(r)&&Of(r).isDirectory())return r;if(t===e)throw new Error("Could not locate data directory");t=Nf(t)}}var Po=d(()=>{"use strict"});import{AsyncLocalStorage as gC}from"async_hooks";import{stat as bC}from"fs/promises";import{resolve as SC}from"path";async function EC(t){let e=await bC(t).catch(r=>{if(!(typeof r=="object"&&r!==null&&"code"in r&&r.code==="ENOENT"))throw r});return e===void 0||e.size===0}function y(t,e){let r=t[e];if(typeof r!="number")throw new TypeError(`Expected ${e} to be a number`);return r}function k(t,e){let r=t[e];if(typeof r!="string")throw new TypeError(`Expected ${e} to be a string`);return r}function fe(t,e){let r=t[e];if(r!=null){if(typeof r!="string")throw new TypeError(`Expected ${e} to be a string`);return r}}async function kC(t,e={}){let r=await IC(),n=(e.readonly===!0?r.OPEN_READONLY:r.OPEN_READWRITE|r.OPEN_CREATE)|r.OPEN_FULLMUTEX;return await new Promise((i,a)=>{let o=new r.Database(t,n,s=>{if(s!==null){a(s);return}i(o)})})}async function IC(){let t=await import("sqlite3");return xC(t)}function xC(t){if(typeof t=="object"&&t!==null&&"default"in t&&typeof t.default=="object"&&t.default!==null&&"Database"in t.default)return t.default;if(typeof t=="object"&&t!==null&&"Database"in t)return t;throw new TypeError("Could not load sqlite3")}function Jd(t){return t??[]}var wC,P,x=d(()=>{"use strict";wC=900*1e3;P=class t{#e;#t;#r=new gC;#n;#i=!1;#a=Promise.resolve();#o=0;constructor(e,r={}){this.#e=e,this.#t=r.onWrite}static async open(e,r="",n={}){let i=SC(e),a=n.readonly!==!0&&r.trim()!==""&&await EC(i),o=await kC(i,n),s=new t(o,n);return await s.#d(`PRAGMA busy_timeout = ${wC}`),n.readonly!==!0&&r.trim()!==""&&(await s.#d(r),a&&s.#l()),s}static async initialize(e,r){let n=await t.open(e);try{r.trim()!==""&&await n.#d(r)}finally{await n.close()}}async queryAll(e,r,n){return await this.#c(async()=>(this.#s(),(await this.#p(e,r)).map(n)))}async queryOne(e,r,n){return await this.#c(async()=>{this.#s();let i=await this.#m(e,r);return i===void 0?void 0:n(i)})}async run(e,r){await this.#c(async()=>{this.#s(),await this.#h(e,r),this.#l()})}async transaction(e){return await this.#c(async()=>{this.#s();let r=this.#o===0,n=this.#n??Symbol("database transaction scope");r&&(await this.#d("BEGIN IMMEDIATE"),this.#n=n),this.#o+=1;try{let i=await this.#r.run(n,e);return r&&await this.#d("COMMIT"),i}catch(i){throw r&&await this.#d("ROLLBACK"),i}finally{this.#o-=1,r&&(this.#n=void 0)}})}async flush(){await this.#c(()=>{this.#s()})}async close(){await this.#c(async()=>{this.#i||(await this.#u(),this.#i=!0)})}async getLastInsertRowId(){let e=await this.queryOne("SELECT last_insert_rowid() AS row_id",void 0,r=>y(r,"row_id"));if(e===void 0)throw new Error("Could not read last_insert_rowid()");return e}#s(){if(this.#i)throw new Error("Database is already closed")}async#c(e){let r=this.#r.getStore();if(r!==void 0&&r===this.#n)return await e();let n=this.#a.then(e);return this.#a=n.then(()=>{},()=>{}),await n}#l(){this.#t?.()}async#u(){await new Promise((e,r)=>{this.#e.close(n=>{if(n!==null){r(n);return}e()})})}async#d(e){await new Promise((r,n)=>{this.#e.exec(e,i=>{if(i!==null){n(i);return}r()})})}async#p(e,r){return await new Promise((n,i)=>{this.#e.all(e,Jd(r),(a,o)=>{if(a!==null){i(a);return}n(o)})})}async#m(e,r){return await new Promise((n,i)=>{this.#e.get(e,Jd(r),(a,o)=>{if(a!==null){i(a);return}n(o)})})}async#h(e,r){await new Promise((n,i)=>{this.#e.run(e,Jd(r),a=>{if(a!==null){i(a);return}n()})})}}});import{AsyncLocalStorage as Mf}from"async_hooks";import{homedir as RC}from"os";import{join as Jt,resolve as Df}from"path";function Ye(){let t=vC.getStore()?.path;if(t!==void 0&&t.trim()!=="")return Df(t);let e=Wf.getStore()?.path;return e!==void 0&&e.trim()!==""?Df(e):Jt(RC(),".wikigraph")}async function zd(t,e){return await Wf.run({path:t},e)}function oe(){return Jt(Ye(),"core.sqlite")}function zt(){return Jt(Ye(),"cache")}function Dr(){return Jt(zt(),"cache.sqlite")}function Mr(){return Jt(Ye(),"jobs")}function Pe(){return Jt(Ye(),"staging")}function Wr(){return Jt(Ye(),"tmp")}var vC,Wf,se=d(()=>{"use strict";vC=new Mf,Wf=new Mf});import{mkdir as TC,rm as _C,stat as Gf}from"fs/promises";import{dirname as CC,join as K,resolve as Xd}from"path";async function ke(){let t=oe(),e=Xd(t),r=await Ao(t);if(Qd(e,r))return;if(Qt!==void 0){await Qt;let i=await Ao(t);if(Qd(e,i))return}let n=await Ao(t);if(Qt!==void 0)return await Qt,ke();if(!Qd(e,n)){Qt=(async()=>{if(!await Ze(t)){await jf(t,Lo),await Ff(e);return}let i=await No(t);if(i>Lo)throw new Error(`Unsupported Wiki Graph home schema version: ${i}.`);i<Lo&&(await DC(),await NC(),await jC(),await jf(t,Lo)),await Ff(e)})();try{await Qt;return}finally{Qt=void 0}}}async function Ff(t){let e=await Ao(t);if(e===void 0){oi=void 0;return}oi={fingerprint:e,path:t}}async function Ao(t){try{let e=await Gf(t);return{dev:e.dev,ino:e.ino,mtimeMs:e.mtimeMs,size:e.size}}catch(e){if(w(e)&&e.code==="ENOENT")return;throw e}}function Qd(t,e){return e===void 0||oi===void 0?!1:oi.path===t&&AC(oi.fingerprint,e)}function AC(t,e){return t.dev===e.dev&&t.ino===e.ino&&t.mtimeMs===e.mtimeMs&&t.size===e.size}async function No(t=oe()){if(!await Ze(t))return 0;let e=await P.open(t,"",{readonly:!0});try{return await je(e,"schema_versions")?await e.queryOne("SELECT version FROM schema_versions WHERE scope = ?",["home"],n=>Number(n.version))??1:1}finally{await e.close()}}function Bf(t){let e=Xd(t);return OC().some(r=>e===Xd(r))}function OC(){let t=zt();return[oe(),K(t,"search-sessions.sqlite"),K(t,"continuation-cursors.sqlite"),Dr(),K(Mr(),"job.sqlite"),K(Wr(),"gc.sqlite"),K(Pe(),"staging.sqlite")]}async function jf(t,e){await TC(CC(t),{recursive:!0});let r=await P.open(t);try{await r.run(LC),await r.run(`
|
|
42
|
+
INSERT INTO schema_versions (scope, version, updated_at)
|
|
43
|
+
VALUES (?, ?, ?)
|
|
44
|
+
ON CONFLICT(scope) DO UPDATE SET
|
|
45
|
+
version = excluded.version,
|
|
46
|
+
updated_at = excluded.updated_at
|
|
47
|
+
`,["home",e,new Date().toISOString()])}finally{await r.close()}}async function NC(){let t=zt(),e=Pe(),r=Mr(),n=Wr();await Fe(K(t,"search-sessions.sqlite")),await Fe(K(t,"continuation-cursors.sqlite")),await Fe(Dr()),await Fe(K(e,"library")),await Fe(K(n,"gc.sqlite")),await Fe(K(n,"gc.last-run")),await Fe(K(r,"cache")),await Fe(K(r,"job.sqlite"));let i=K(e,"staging.sqlite");await Ze(i)&&(await BC(i),await UC(i))}async function DC(){await MC(),await WC(),await FC(),await GC()}async function MC(){let t=oe();if(!await Ze(t))return;let e=await P.open(t,"",{readonly:!0});try{if(await je(e,"library_locks")&&(await e.queryAll(`
|
|
48
|
+
SELECT owner_pid, heartbeat_at
|
|
49
|
+
FROM library_locks
|
|
50
|
+
`,void 0,i=>({heartbeatAt:Number(i.heartbeat_at),ownerPid:Number(i.owner_pid)}))).some(i=>si(i.ownerPid,i.heartbeatAt)))throw new Error("Cannot upgrade home with active library locks.");if(!await je(e,"state_locks"))return;if((await e.queryAll(`
|
|
51
|
+
SELECT owner_pid, heartbeat_at
|
|
52
|
+
FROM state_locks
|
|
53
|
+
WHERE scope = 'library'
|
|
54
|
+
`,void 0,n=>({heartbeatAt:Number(n.heartbeat_at),ownerPid:Number(n.owner_pid)}))).some(n=>si(n.ownerPid,n.heartbeatAt)))throw new Error("Cannot upgrade home with active library locks.")}finally{await e.close()}}async function WC(){let t=K(Wr(),"gc.sqlite");if(!await Ze(t))return;let e=await P.open(t,"",{readonly:!0});try{if(!await je(e,"gc_locks"))return;if((await e.queryAll("SELECT owner_pid, heartbeat_at FROM gc_locks",void 0,n=>({heartbeatAt:Number(n.heartbeat_at),ownerPid:Number(n.owner_pid)}))).some(n=>si(n.ownerPid,n.heartbeatAt)))throw new Error("Cannot upgrade home with an active GC lock.")}finally{await e.close()}}async function FC(){let t=K(Pe(),"staging.sqlite");if(!await Ze(t))return;let e=await P.open(t,"",{readonly:!0});try{for(let r of["archive_owners","entry_locks","entry_sqlite_leases","archive_commit_locks"]){if(!await je(e,r))continue;if((await e.queryAll(`
|
|
55
|
+
SELECT owner_pid, heartbeat_at
|
|
56
|
+
FROM ${r}
|
|
57
|
+
`,void 0,i=>({heartbeatAt:Number(i.heartbeat_at),ownerPid:Number(i.owner_pid)}))).some(i=>si(i.ownerPid,i.heartbeatAt)))throw new Error(`Cannot upgrade home with active coordinator state: ${r}.`)}}finally{await e.close()}}async function jC(){let t=K(Pe(),"staging.sqlite");if(!await Ze(t))return;let e=await P.open(t,"",{readonly:!0});try{if(!await je(e,"entry_overlays"))return;if((await e.queryAll(`
|
|
58
|
+
SELECT entry_path
|
|
59
|
+
FROM entry_overlays
|
|
60
|
+
`,void 0,i=>String(i.entry_path))).find(i=>i!==Oo)!==void 0)throw new Error("Cannot upgrade home with non-derived coordinator overlays.")}finally{await e.close()}}async function GC(){let t=K(Mr(),"job.sqlite");if(!await Ze(t))return;let e=await P.open(t,"",{readonly:!0});try{if(await je(e,"build_jobs")&&(await e.queryAll(`
|
|
61
|
+
SELECT job_id
|
|
62
|
+
FROM build_jobs
|
|
63
|
+
WHERE state IN ('queued', 'running', 'canceling', 'paused')
|
|
64
|
+
`,void 0,n=>String(n.job_id))).length>0)throw new Error("Cannot upgrade home with active build jobs.");if(await je(e,"build_worker_lease")){let r=await e.queryOne(`
|
|
65
|
+
SELECT owner_pid, heartbeat_at
|
|
66
|
+
FROM build_worker_lease
|
|
67
|
+
WHERE id = 1
|
|
68
|
+
`,void 0,n=>({heartbeatAt:n.heartbeat_at===null?void 0:Number(n.heartbeat_at),ownerPid:n.owner_pid===null?void 0:Number(n.owner_pid)}));if(r?.ownerPid!==void 0&&r.heartbeatAt!==void 0&&si(r.ownerPid,r.heartbeatAt))throw new Error("Cannot upgrade home with an active build worker lease.")}}finally{await e.close()}}async function BC(t,e){let r=await P.open(t);try{if(!await je(r,"entry_overlays"))return;let n=e===void 0?"WHERE entry_path = ?":"WHERE archive_key = ? AND entry_path = ?",i=e===void 0?[Oo]:[e,Oo],a=await r.queryAll(`
|
|
69
|
+
SELECT archive_key, workspace_path
|
|
70
|
+
FROM entry_overlays
|
|
71
|
+
${n}
|
|
72
|
+
`,i,o=>({archiveKey:String(o.archive_key),workspacePath:o.workspace_path===null?void 0:String(o.workspace_path)}));for(let o of a)o.workspacePath!==void 0&&await Fe(o.workspacePath);await r.run(`
|
|
73
|
+
DELETE FROM entry_overlays
|
|
74
|
+
${n}
|
|
75
|
+
`,i)}finally{await r.close()}}async function UC(t){let e=await P.open(t);try{if(!await je(e,"entry_overlays"))return;let r=await e.queryAll(`
|
|
76
|
+
SELECT archive_key, archive_path, entry_path, workspace_path
|
|
77
|
+
FROM entry_overlays
|
|
78
|
+
WHERE entry_path IN (?, ?)
|
|
79
|
+
`,["database.db",Oo],n=>({archiveKey:String(n.archive_key),archivePath:String(n.archive_path),entryPath:String(n.entry_path),workspacePath:n.workspace_path===null?void 0:String(n.workspace_path)}));for(let n of r)await Ze(n.archivePath)||(n.workspacePath!==void 0&&await Fe(n.workspacePath),await e.run(`
|
|
80
|
+
DELETE FROM entry_overlays
|
|
81
|
+
WHERE archive_key = ? AND entry_path = ?
|
|
82
|
+
`,[n.archiveKey,n.entryPath]))}finally{await e.close()}}async function je(t,e){return await t.queryOne(`
|
|
83
|
+
SELECT 1 AS present
|
|
84
|
+
FROM sqlite_master
|
|
85
|
+
WHERE type = 'table' AND name = ?
|
|
86
|
+
`,[e],()=>!0)===!0}function si(t,e){return Date.now()-e<=PC&&HC(t)}function HC(t){try{return process.kill(t,0),!0}catch{return!1}}async function Fe(t){await _C(t,{force:!0,recursive:!0})}async function Ze(t){try{return await Gf(t),!0}catch{return!1}}var Lo,PC,Oo,Qt,oi,LC,Xt=d(()=>{"use strict";se();T();x();Lo=2,PC=300*1e3,Oo="fts.db",LC=`
|
|
87
|
+
CREATE TABLE IF NOT EXISTS schema_versions (
|
|
88
|
+
scope TEXT PRIMARY KEY,
|
|
89
|
+
version INTEGER NOT NULL,
|
|
90
|
+
updated_at TEXT NOT NULL
|
|
91
|
+
);
|
|
92
|
+
`});import{createHash as qC}from"crypto";import{chmod as $C,mkdir as qf,readFile as $f,rename as KC,rm as Kf,stat as Jf,writeFile as zf}from"fs/promises";import{dirname as JC,resolve as zC}from"path";import{setTimeout as QC}from"timers/promises";async function A(t,e,r={}){return await YC(t),await Qf(t,e),await P.open(t,"",r)}function YC(t){return Bf(t)?ke():Promise.resolve()}async function Qf(t,e){let r=zC(t),n=oP(r),i=cP(e);if(await Hf(r,n,i)){await wt(r),await wt(n);return}await qf(JC(r),{recursive:!0}),await eP(r,async()=>{if(await Hf(r,n,i)){await wt(r),await wt(n);return}await P.initialize(r,e),await wt(r),await ZC(n,i)}),await wt(r),await wt(n)}async function ZC(t,e){let r=`${t}.${process.pid}.tmp`;await zf(r,`${e}
|
|
93
|
+
`,{encoding:"utf8",mode:384}),await KC(r,t),await wt(t)}async function eP(t,e){let r=`${t}.init.lock`;for(;;)try{await qf(r,{mode:448});break}catch(n){if(!w(n)||n.code!=="EEXIST")throw n;await tP(r),await QC(XC)}try{await Uf(r);let n=setInterval(()=>{Uf(r).catch(()=>{})},VC);try{return await e()}finally{clearInterval(n)}}finally{await Kf(r,{force:!0,recursive:!0})}}async function Uf(t){await zf(`${t}/owner.json`,`${JSON.stringify({at:Date.now(),pid:process.pid},null,2)}
|
|
94
|
+
`,{encoding:"utf8",mode:384})}async function tP(t){try{let e=await rP(t);if(e!==void 0){if(aP(e.pid)||Date.now()-e.at<Vd)return}else if(!await iP(t,Vd))return;await Kf(t,{force:!0,recursive:!0})}catch(e){if(w(e)&&e.code==="ENOENT")return;throw e}}async function rP(t){try{let e=JSON.parse(await $f(`${t}/owner.json`,"utf8"));return nP(e)?e:void 0}catch(e){if(w(e)&&e.code==="ENOENT"||e instanceof SyntaxError)return;throw e}}function nP(t){if(typeof t!="object"||t===null)return!1;let e=t;return typeof e.pid=="number"&&Number.isInteger(e.pid)&&e.pid>0&&typeof e.at=="number"}async function iP(t,e){let r=await Jf(t);return Date.now()-r.mtimeMs>=e}function aP(t){try{return process.kill(t,0),!0}catch(e){return!(w(e)&&e.code==="ESRCH")}}async function Hf(t,e,r){if(!await sP(t))return!1;try{return(await $f(e,"utf8")).trim()===r}catch(n){if(w(n)&&n.code==="ENOENT")return!1;throw n}}function oP(t){return`${t}.initialized`}async function sP(t){try{return(await Jf(t)).isFile()}catch(e){if(w(e)&&e.code==="ENOENT")return!1;throw e}}async function wt(t){try{await $C(t,384)}catch(e){if(w(e)&&e.code==="ENOENT")return;throw e}}function cP(t){return qC("sha256").update(t).digest("hex")}var XC,Vd,VC,Xf=d(()=>{"use strict";T();Xt();x();XC=50,Vd=300*1e3,VC=Math.floor(Vd/2)});import{mkdir as dP,readFile as uP,readdir as lP,rm as mP,writeFile as pP}from"fs/promises";var Vf,Yf=d(()=>{"use strict";T();Vf={deleteTree:async t=>{await mP(t,{force:!0,recursive:!0})},ensureDirectory:async t=>{await dP(t,{recursive:!0})},listFiles:async t=>(await lP(t,{withFileTypes:!0})).filter(e=>e.isFile()).map(e=>e.name),readFile:async t=>{try{return await uP(t)}catch(e){if(w(e)&&e.code==="ENOENT")return;throw e}},writeFile:async(t,e,r)=>{await pP(t,e,{...typeof e=="string"?{encoding:"utf8"}:{},flag:r.overwrite===!0?"w":"wx"})}}});function Fr(t){let e=new Set(Object.values(t));return r=>e.has(r)}function ci(t,e){let r=Fr(t);return n=>{if(r(n))return n;throw new Error(`Unknown ${e}: ${n}`)}}var Yd=d(()=>{"use strict"});function hP(t){return t.replace(/\s+/gu," ").trim()}var Le,Zd,eu,Ge,tu,jr,et,tt=d(()=>{"use strict";Yd();Le=(i=>(i.Verbatim="verbatim",i.Detailed="detailed",i.Focused="focused",i.Relevant="relevant",i))(Le||{}),Zd=Fr(Le),eu=ci(Le,"chunk retention"),Ge=(n=>(n.Critical="critical",n.Important="important",n.Helpful="helpful",n))(Ge||{}),tu=Fr(Ge),jr=ci(Ge,"chunk importance"),et=class{#e;rawText;wordsCount;constructor(e,r){this.rawText=e,this.wordsCount=r}get text(){return this.#e??=hP(this.rawText),this.#e}toJSON(){return{text:this.text,wordsCount:this.wordsCount}}}});var Do,ru=d(()=>{"use strict";tt();Do=class{#e=!1;#t;#r;#n=[];#i;#a;#o="";constructor(e,r,n){this.#t=n.discard,this.#r=n.finalize,this.#i=e,this.#a=r}addSentence(e,r,n){this.#s();let i=this.#a+this.#n.length,a=new et(e,r);return n!==void 0&&Object.assign(a,{byteLength:n.byteLength,byteOffset:n.byteOffset}),this.#n.push(a),[this.#i,i]}async commit(){return this.#s(),this.#e=!0,await this.#r(this.#a,this.#o,this.#n)}async commitWithText(e){return this.#s(),this.#e=!0,await this.#r(this.#a,e,this.#n)}discard(){this.#s(),this.#e=!0,this.#t()}setSummary(e){this.#s(),this.#o=e}get fragmentId(){return this.#a}#s(){if(this.#e)throw new Error("Text stream draft is already finalized")}}});async function ey(t,e){if(e!==void 0)return await fP(t,e);let r=[];for(let n of yP().segment(t)){let i=n.segment;if(i.trim()==="")continue;let a=new et(i,gP(i));Object.assign(a,{byteLength:Buffer.byteLength(i,"utf8"),byteOffset:Buffer.byteLength(t.slice(0,n.index),"utf8")}),r.push(a)}return r}async function fP(t,e){let r=[];for await(let n of e.pipe([t])){let i=t.slice(n.offset,n.offset+n.text.length);if(i.trim()==="")continue;let a=new et(i,n.wordsCount);Object.assign(a,{byteLength:Buffer.byteLength(i,"utf8"),byteOffset:Buffer.byteLength(t.slice(0,n.offset),"utf8")}),r.push(a)}return r}function yP(){return Zf??=new Intl.Segmenter(void 0,{granularity:"sentence"}),Zf}function gP(t){let e=t.trim();return e===""?0:e.split(/\s+/u).length}function ty(t){let e=t.byteOffset;return typeof e=="number"?e:0}function ry(t){return typeof t.byteOffset=="number"}function ny(t){let e=t.byteLength;return typeof e=="number"?e:Buffer.byteLength(nu(t),"utf8")}function nu(t){let e=t.rawText;return typeof e=="string"?e:t.text}var Zf,iy=d(()=>{"use strict";tt()});var Et,iu=d(()=>{"use strict";Et={source:1,summary:2}});import{join as ay,resolve as SP}from"path";function Mo(t){return{byteLength:Number(t.byte_length),byteOffset:Number(t.byte_offset),sentenceIndex:Number(t.sentence_index),wordsCount:Number(t.words_count)}}var Gr,au=d(()=>{"use strict";tt();ru();iy();iu();Gr=class t{static#e=new Map;#t;#r;#n;#i;#a;constructor(e,r,n,i,a){this.#t=r,this.#r=SP(e),this.#n=n,this.#i=i,this.#a=a}async createDraft(){let e=this.#f();if(e.draftOpen)throw new Error("Only one text stream draft can be open at a time");return await this.#n.ensureDirectory(this.#m()),e.draftOpen=!0,new Do(this.#a,await this.#d(),{discard:()=>{e.draftOpen=!1},finalize:async(r,n,i)=>await this.#l(r,n,i)})}async getFragment(e){let n=(await this.#u()).find(i=>i.fragmentId===e);if(n===void 0)throw new Error(`Fragment ${e} does not exist`);return n}async getSentence(e){let r=await this.#o(e);if(r===void 0)throw new RangeError(`Sentence ${e} does not exist`);return this.#c(r,await this.#p())}async listFragmentIds(){return(await this.#u()).map(e=>e.fragmentId)}async listSentences(){let e=await this.#s(),r=await this.#p();return e.map(n=>this.#c(n,r))}async listSentencesInRange(e,r){if(r<e)return[];let n=await this.#t.queryAll(`
|
|
95
|
+
SELECT sentence_index, byte_offset, byte_length, words_count
|
|
96
|
+
FROM text_sentence_records
|
|
97
|
+
WHERE kind = ? AND chapter_id = ?
|
|
98
|
+
AND sentence_index BETWEEN ? AND ?
|
|
99
|
+
ORDER BY sentence_index
|
|
100
|
+
`,[Et[this.#i],this.#a,e,r],Mo),i=await this.#p();return n.map(a=>this.#c(a,i))}async readTextInRange(e,r){if(r<e)return"";let n=await this.#t.queryAll(`
|
|
101
|
+
SELECT sentence_index, byte_offset, byte_length, words_count
|
|
102
|
+
FROM text_sentence_records
|
|
103
|
+
WHERE kind = ? AND chapter_id = ?
|
|
104
|
+
AND sentence_index BETWEEN ? AND ?
|
|
105
|
+
ORDER BY sentence_index
|
|
106
|
+
`,[Et[this.#i],this.#a,e,r],Mo),i=n[0],a=n[n.length-1];return i===void 0||a===void 0?void 0:(await this.#p()).subarray(i.byteOffset,a.byteOffset+a.byteLength).toString("utf8")}async#o(e){return await this.#t.queryOne(`
|
|
107
|
+
SELECT sentence_index, byte_offset, byte_length, words_count
|
|
108
|
+
FROM text_sentence_records
|
|
109
|
+
WHERE kind = ? AND chapter_id = ? AND sentence_index = ?
|
|
110
|
+
`,[Et[this.#i],this.#a,e],Mo)}async#s(){return await this.#t.queryAll(`
|
|
111
|
+
SELECT sentence_index, byte_offset, byte_length, words_count
|
|
112
|
+
FROM text_sentence_records
|
|
113
|
+
WHERE kind = ? AND chapter_id = ?
|
|
114
|
+
ORDER BY sentence_index
|
|
115
|
+
`,[Et[this.#i],this.#a],Mo)}#c(e,r){return new et(r.subarray(e.byteOffset,e.byteOffset+e.byteLength).toString("utf8"),e.wordsCount)}async readText(){let e=await this.#n.readFile(this.#h());return e===void 0?void 0:Buffer.from(e).toString("utf8")}async writeTextStream(e,r={}){await this.delete();let n=await ey(e,r.segmenter),i=await this.createDraft();for(let a of n)i.addSentence(a.text,a.wordsCount,{byteOffset:a.byteOffset,byteLength:a.byteLength});await i.commitWithText(e)}async delete(){await this.#n.deleteTree(this.#h()),await this.#t.run(`
|
|
116
|
+
DELETE FROM text_sentence_records
|
|
117
|
+
WHERE kind = ? AND chapter_id = ?
|
|
118
|
+
`,[Et[this.#i],this.#a]),delete this.#f().nextSentenceIndex}get path(){return this.#h()}get serialId(){return this.#a}async#l(e,r,n){let i=this.#f();i.draftOpen=!1;let a=await this.#n.readFile(this.#h()),o=a===void 0?Buffer.alloc(0):Buffer.from(a),s=r===""?n.map(nu).join(""):r,c=Buffer.from(s,"utf8"),u=o.length;if(await this.#n.ensureDirectory(this.#m()),await this.#n.writeFile(this.#h(),Buffer.concat([o,c]),{overwrite:!0}),n.length!==0){for(let l=0;l<n.length;l+=1){let m=n[l];if(m===void 0)continue;let p=ny(m),h=ty(m),g=u+h;await this.#t.run(`
|
|
119
|
+
INSERT OR REPLACE INTO text_sentence_records (
|
|
120
|
+
kind,
|
|
121
|
+
chapter_id,
|
|
122
|
+
sentence_index,
|
|
123
|
+
words_count,
|
|
124
|
+
byte_offset,
|
|
125
|
+
byte_length
|
|
126
|
+
)
|
|
127
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
128
|
+
`,[Et[this.#i],this.#a,e+l,m.wordsCount,g,p]),ry(m)||(u+=p)}return i.nextSentenceIndex=e+n.length,{fragmentId:e,sentences:n,serialId:this.#a,summary:""}}}async#u(){let e=await this.listSentences(),r=[],n=[],i=0,a=0;for(let o=0;o<e.length;o+=1){let s=e[o];s!==void 0&&(n.length>0&&i+s.wordsCount>600&&(r.push({fragmentId:a,sentences:n,serialId:this.#a,summary:""}),a=o,n=[],i=0),n.push(s),i+=s.wordsCount)}return n.length>0&&r.push({fragmentId:a,sentences:n,serialId:this.#a,summary:""}),r}async#d(){let e=this.#f();return e.nextSentenceIndex!==void 0||(e.nextSentenceIndex=await this.#t.queryOne(`
|
|
129
|
+
SELECT COALESCE(MAX(sentence_index), -1) + 1 AS next_index
|
|
130
|
+
FROM text_sentence_records
|
|
131
|
+
WHERE kind = ? AND chapter_id = ?
|
|
132
|
+
`,[Et[this.#i],this.#a],r=>Number(r.next_index))??0),e.nextSentenceIndex}async#p(){let e=await this.#n.readFile(this.#h());return Buffer.from(e??new Uint8Array)}#m(){return ay(this.#r,"texts",this.#i)}#h(){return ay(this.#m(),`${this.#a}.txt`)}#f(){let e=`${this.#r}\0${this.#i}\0${this.#a}`,r=t.#e.get(e);return r===void 0&&(r={draftOpen:!1},t.#e.set(e,r)),r}}});import{join as wP,resolve as EP}from"path";var di,oy=d(()=>{"use strict";Yf();au();di=class{#e;#t;#r;constructor(e,r,n=Vf){this.#e=r,this.#t=EP(e),this.#r=n}async ensureCreated(){await this.#r.ensureDirectory(this.#n("source")),await this.#r.ensureDirectory(this.#n("summary"))}async getSentence(e){return(await this.getSerial(e[0]).getSentence(e[1])).text}getSerial(e){return new Gr(this.#t,this.#e,this.#r,"source",e)}getSummarySerial(e){return new Gr(this.#t,this.#e,this.#r,"summary",e)}#n(e){return wP(this.#t,"texts",e)}}});var ou=d(()=>{"use strict";oy();ru();au();iu()});import{mkdir as kP,readFile as IP,readdir as xP,writeFile as RP}from"fs/promises";var Wo,Br,Fo=d(()=>{"use strict";T();Wo={write:async(t,e)=>{await RP(t,e,"utf8")}},Br={ensureDirectory:async t=>{await kP(t,{recursive:!0})},listFiles:async t=>(await xP(t,{withFileTypes:!0})).filter(e=>e.isFile()).map(e=>e.name),readFile:async t=>{try{return await IP(t)}catch(e){if(w(e)&&e.code==="ENOENT")return;throw e}}}});var ui,su=d(()=>{"use strict";ui=class{#e=!1;#t;#r;#n;#i;#a=[];#o="";#s;constructor(e,r,n,i){this.#t=e,this.#r=i.discard,this.#n=i.finalize,this.#i=r,this.#s=n}addSentence(e,r){this.#c();let n=this.#s+this.#a.length;return this.#a.push({text:e,wordsCount:r}),[this.#t,n]}async commit(){return this.#c(),this.#e=!0,await this.#n(this.#i,this.#s,this.#o,this.#a)}discard(){this.#c(),this.#e=!0,this.#r()}setSummary(e){this.#c(),this.#o=e}get fragmentId(){return this.#i}#c(){if(this.#e)throw new Error("Fragment draft is already finalized")}}});import{join as vP,resolve as TP}from"path";async function sy(t,e=Br){return cu(t,await _P(t,e))}function cu(t,e){if(e===void 0)throw new Error(`Fragment file does not exist: ${t}`);let r=JSON.parse(Buffer.from(e).toString("utf8"));if(typeof r!="object"||r===null)throw new TypeError("Fragment file must be an object");if(!("summary"in r)||typeof r.summary!="string")throw new TypeError("Fragment file summary must be a string");if(!("sentences"in r)||!Array.isArray(r.sentences))throw new TypeError("Fragment file sentences must be an array");return{sentences:r.sentences.map(CP),summary:r.summary}}async function _P(t,e){if(e.listFileContents===void 0)return await e.readFile(t);let r=TP(vP(t,"..")),n=t.slice(r.length+1);return(await e.listFileContents(r)).get(n)}function CP(t){if(typeof t!="object"||t===null)throw new TypeError("Sentence entry must be an object");let{text:e,wordsCount:r}=t;if(typeof e!="string"||typeof r!="number")throw new TypeError("Sentence entry is invalid");return{text:e,wordsCount:r}}var cy=d(()=>{"use strict";Fo()});function dy(t){return t.split(/\n+/u).map(e=>e.trim()).filter(e=>e!=="").map(e=>({text:e,wordsCount:PP(e)}))}function PP(t){let e=t.trim();return e===""?0:e.split(/\s+/u).length}var uy=d(()=>{"use strict"});var ly,my,du=d(()=>{"use strict";ly="serial-",my=/^fragment_(\d+)\.json$/});import{join as py,resolve as AP}from"path";var Ur,uu=d(()=>{"use strict";T();su();Fo();cy();uy();du();Ur=class{#e;#t=!1;#r;#n;#i;#a;#o;#s;#c;constructor(e,r,n="fragments",i,a){this.#r=AP(e),this.#e=r,this.#n=a??Br,this.#a=n,this.#c=i??Wo}async createDraft(){if(this.#t)throw new Error("Only one fragment draft can be open at a time");return await this.#n.ensureDirectory(this.path),this.#t=!0,new ui(this.#e,await this.#d(),await this.#p(),{discard:()=>{this.#u()},finalize:async(e,r,n,i)=>await this.#l(e,r,n,i)})}async getFragment(e){let r=this.#n.listFileContents===void 0?await sy(this.#m(e),this.#n):cu(this.#m(e),(await this.#h()).get(`fragment_${e}.json`));return{serialId:this.#e,fragmentId:e,summary:r.summary,sentences:r.sentences}}async listFragmentIds(){try{return(this.#n.listFileContents===void 0?await this.#n.listFiles(this.path):[...(await this.#h()).keys()]).map(r=>my.exec(r)).filter(r=>r!==null).map(r=>Number(r[1])).sort((r,n)=>r-n)}catch(e){if(w(e)&&e.code==="ENOENT")return[];throw e}}async writeTextStream(e,r={}){await this.#n.ensureDirectory(this.path);let n=dy(e);if(n.length===0){let s=await this.#d();await this.#c.write(this.#m(s),JSON.stringify({sentences:[],summary:""},void 0,2)),this.#o=s+1;return}let i=r.maxWordsCount??600,a=await this.createDraft(),o=0;for(let s of n)o>0&&o+s.wordsCount>i&&(await a.commit(),a=await this.createDraft(),o=0),a.addSentence(s.text,s.wordsCount),o+=s.wordsCount;await a.commit()}get serialId(){return this.#e}get path(){return py(this.#r,this.#a,`${ly}${this.#e}`)}async#l(e,r,n,i){if(this.#t=!1,i.length!==0)return await this.#n.ensureDirectory(this.path),await this.#c.write(this.#m(e),JSON.stringify({sentences:i,summary:n},void 0,2)),this.#o=e+1,this.#s=r+i.length,{serialId:this.#e,fragmentId:e,summary:n,sentences:i}}#u(){this.#t=!1}async#d(){if(this.#o!==void 0)return this.#o;let e=await this.listFragmentIds(),r=e[e.length-1];return this.#o=r===void 0?0:r+1,this.#o}async#p(){if(this.#s!==void 0)return this.#s;let e=0;for(let r of await this.listFragmentIds())e+=(await this.getFragment(r)).sentences.length;return this.#s=e,this.#s}#m(e){return py(this.path,`fragment_${e}.json`)}async#h(){if(this.#n.listFileContents===void 0)throw new Error("Fragment file access does not support batch reads.");return this.#i??=this.#n.listFileContents(this.path),await this.#i}}});import{join as OP,resolve as NP}from"path";var Vt,hy=d(()=>{"use strict";Fo();uu();Vt=class{#e;#t;#r;constructor(e,r,n){this.#e=NP(e),this.#t=n??Br,this.#r=r??Wo}async ensureCreated(){await this.#t.ensureDirectory(this.path)}getSerial(e){return new Ur(this.#e,e,"fragments",this.#r,this.#t)}getSummarySerial(e){return new Ur(this.#e,e,"summaries",this.#r,this.#t)}async getSentence(e){let[r,n]=e,i=await this.getSerial(r).listFragmentIds(),a=n;for(let o of i){let s=await this.getSerial(r).getFragment(o),c=s.sentences[a];if(c!==void 0)return c.text;a-=s.sentences.length}throw new RangeError(`Sentence ${n} does not exist`)}async getSummary(e,r){return(await this.getSerial(e).getFragment(r)).summary}async getWordsCount(e,r){return(await this.getSerial(e).getFragment(r)).sentences.reduce((i,a)=>i+a.wordsCount,0)}get path(){return OP(this.#e,"fragments")}}});var lu=d(()=>{"use strict";hy();su();uu();du()});import{z as Ae}from"zod";var fy,kt,yy,mu,li=d(()=>{"use strict";fy=["epub","pdf","txt","markdown"],kt=1,yy=Ae.enum(fy),mu=Ae.object({version:Ae.literal(kt),sourceFormat:yy,title:Ae.string().min(1).nullable(),authors:Ae.array(Ae.string().min(1)),language:Ae.string().min(1).nullable(),identifier:Ae.string().min(1).nullable(),publisher:Ae.string().min(1).nullable(),publishedAt:Ae.string().min(1).nullable(),description:Ae.string().min(1).nullable()})});import{randomBytes as DP}from"crypto";function mi(t){return`wikg://chapter/${t}`}function by(t,e="chapter path"){let r=t.trim();if(r==="")throw new Error(`Invalid ${e}: expected an absolute chapter path.`);if(/^\d+$/u.test(r))throw new Error(`Invalid ${e}: numeric chapter ids are internal and are not accepted.`);if(r.startsWith("/")||r.endsWith("/"))throw new Error(`Invalid ${e}: use <key>[/<key>]* without leading or trailing slash.`);let n=r.split("/");for(let i of n)jo(i,e);return n.join("/")}function jo(t,e="chapter key"){if(t===""||t==="."||t===".."||t.includes("/"))throw new Error(`Invalid ${e}: chapter paths do not support empty, '.', '..', or relative segments.`);if(!/^[a-z0-9][a-z0-9-]*$/u.test(t))throw new Error(`Invalid ${e}: ${t}. Use lowercase letters, numbers, and hyphens.`);if(/^\d+$/u.test(t))throw new Error(`Invalid ${e}: numeric chapter keys are not accepted.`);if(MP.has(t))throw new Error(`Invalid ${e}: ${t} is reserved.`);return t}function pi(t){for(let e=0;e<gy;e+=1){let r=DP(WP).toString("hex");try{jo(r)}catch{continue}if(!t.has(r))return r}throw new Error(`Unable to create a unique chapter key after ${gy} attempts.`)}function Sy(t,e){let r=by(e).split("/"),n=t,i;for(let a of r){if(i=n.find(o=>o.key===a),i===void 0)return;n=i.children}return i?.serialId}var MP,WP,gy,rt=d(()=>{"use strict";MP=new Set(["tree","source","summary","title","state","chunk","entity","triple","cover","meta","job","help"]),WP=6,gy=100});import{z as nt}from"zod";var it,pu,Go,Bo=d(()=>{"use strict";rt();it=1,pu=nt.object({key:nt.string().min(1).transform(t=>jo(t)).optional(),title:nt.string().min(1).nullable().optional(),serialId:nt.number().int().nonnegative().optional(),children:nt.lazy(()=>nt.array(pu))}),Go=nt.object({version:nt.literal(it),items:nt.array(pu)})});import{createHash as FP}from"crypto";import{posix as hu}from"path";import{PassThrough as jP}from"stream";import{open as GP}from"yauzl";function at(t){let e=t.replaceAll("\\","/").trim(),r=e.startsWith("/")?e.slice(1):e;return hu.normalize(r).replace(/^(\.\/)+/,"").replace(/^\/+/,"")}function BP(t){let[e]=t.split("#",1);return at(e??"")}function fu(t){if(t===void 0)return;let e=t.startsWith("#")?t.slice(1):t;return e===""?void 0:e}function hi(t){let[e,r]=t.split("#",2);return{path:at(e??""),fragment:fu(r)}}async function UP(t){return await new Promise((e,r)=>{GP(t,{autoClose:!1,lazyEntries:!0},(n,i)=>{if(n!==null||i===void 0){r(n??new Error(`Cannot open EPUB archive: ${t}`));return}e(i)})})}async function HP(t){return await new Promise((e,r)=>{let n=new Map;t.on("entry",i=>{if(i.fileName.endsWith("/")){t.readEntry();return}n.set(at(i.fileName),i),t.readEntry()}),t.once("end",()=>{e(n)}),t.once("error",i=>{r(i)}),t.readEntry()})}function qP(t){if(Buffer.isBuffer(t))return t;if(typeof t=="string")return Buffer.from(t,"utf8");throw new Error("Unexpected ZIP stream chunk type")}async function wy(t){return await new Promise((e,r)=>{let n=[];t.on("data",i=>{n.push(qP(i))}),t.once("end",()=>{e(Buffer.concat(n))}),t.once("error",i=>{r(i)}),t.resume()})}async function $P(t,e){return await new Promise((r,n)=>{t.openReadStream(e,(i,a)=>{if(i!==null||a===void 0){n(i??new Error(`Cannot open EPUB entry: ${e.fileName}`));return}r(KP(a))})})}function KP(t){let e=new jP;return t.once("error",r=>{e.destroy(r)}),e.once("close",()=>{t.unpipe(e),t.destroyed||t.destroy()}),t.pipe(e),e}var Uo,fi=d(()=>{"use strict";Uo=class t{#e;#t;#r;#n=!1;constructor(e,r,n){this.#e=e,this.#t=r,this.#r=n}static async open(e){let r=await UP(e),n=await HP(r);return new t(e,r,n)}close(){return this.#n||(this.#n=!0,this.#t.close()),Promise.resolve()}hasEntry(e){return this.#r.has(at(e))}listEntries(){return[...this.#r.keys()]}async openReadStream(e){let r=this.#i(e);return await $P(this.#t,r)}async readText(e){let r=await this.openReadStream(e);return(await wy(r)).toString("utf8")}async readBuffer(e){let r=await this.openReadStream(e);return await wy(r)}resolveRelativePath(e,r){let n=BP(r);if(n==="")throw new Error(`Invalid EPUB href: ${r}`);return at(hu.join(hu.dirname(at(e)),n))}createSectionId(e,r){let n=at(e);return r===void 0||r===""?n:`${n}#${r}`}createSyntheticSectionId(e,r){let n=at(e);return`toc:${FP("sha1").update(`${n}:${r??""}`).digest("hex").slice(0,10)}`}get path(){return this.#e}#i(e){let r=at(e),n=this.#r.get(r);if(n===void 0)throw new Error(`EPUB entry does not exist: ${r}`);return n}}});import{Parser as JP}from"htmlparser2";async function ky(t,e){let r=new Map;for(let[n,i]of e.entries()){let a=await t.openReadStream(n);a.setEncoding("utf8");let o=await Iy(a,i);for(let s of i){let c=o.get(s.id)??"";r.set(s.id,{hasContent:c.trim()!=="",wordsCount:ZP(c)})}}return r}function QP(t){let e=new Map;for(let[r,n]of t.entries())for(let i of n)e.set(i.id,{path:r,targets:n});return e}async function XP(t,e){return await Iy(t,e)}async function Iy(t,e){let r=new Map,n=new Map,i=[...e],a=i.map(()=>""),s=i[0]?.fragment===void 0&&i[0]!==void 0?0:-1,c=0;i.forEach((l,m)=>{n.set(l.id,""),l.fragment!==void 0&&!r.has(l.fragment)&&r.set(l.fragment,m)});let u=new JP({onopentag(l,m){let p=l.toLowerCase();if(Ey.has(p)){c+=1;return}let h=m.id??m["xml:id"];if(h!==void 0){let g=r.get(h);g!==void 0&&g>s&&(s=g)}p==="br"&&yu(a,s,`
|
|
133
|
+
`)},ontext(l){c>0||yu(a,s,l)},onclosetag(l){let m=l.toLowerCase();if(Ey.has(m)){c=Math.max(0,c-1);return}zP.has(m)&&yu(a,s,`
|
|
134
|
+
|
|
135
|
+
`)}},{decodeEntities:!0});for await(let l of t)u.write(YP(l));return u.end(),i.forEach((l,m)=>{n.set(l.id,VP(a[m]??""))}),n}function yu(t,e,r){e<0||e>=t.length||(t[e]+=r)}function VP(t){return t.replace(/\r\n/gu,`
|
|
136
|
+
`).replace(/\n{3,}/gu,`
|
|
137
|
+
|
|
138
|
+
`).trim()}function YP(t){if(typeof t=="string")return t;if(Buffer.isBuffer(t))return t.toString("utf8");throw new Error("Unexpected HTML stream chunk type")}function ZP(t){return[...eL().segment(t)].filter(e=>e.isWordLike).length}function eL(){return gu===void 0&&(gu=new Intl.Segmenter(void 0,{granularity:"word"})),gu}var zP,Ey,Ho,gu,xy=d(()=>{"use strict";zP=new Set(["address","article","aside","blockquote","br","dd","div","dl","dt","figcaption","figure","footer","h1","h2","h3","h4","h5","h6","header","hr","li","main","nav","ol","p","pre","section","table","td","th","tr","ul"]),Ey=new Set(["script","style"]),Ho=class{#e;#t;constructor(e,r){this.#e=e,this.#t=QP(r)}async openSection(e){let r=this.#t.get(e);return r===void 0?[]:[(await this.#r(r.path,r.targets)).get(e)??""]}async#r(e,r){let n=await this.#e.openReadStream(e);return n.setEncoding("utf8"),await XP(n,r)}}});import{SaxesParser as tL}from"saxes";function yi(t){let e=new tL({xmlns:!1}),r=[],n;if(e.on("opentag",i=>{let a={name:i.name,attributes:Object.fromEntries(Object.entries(i.attributes).map(([s,c])=>[s,String(c)])),children:[],text:""},o=r[r.length-1];o===void 0?n=a:o.children.push(a),r.push(a)}),e.on("text",i=>{let a=r[r.length-1];a!==void 0&&(a.text+=i)}),e.on("cdata",i=>{let a=r[r.length-1];a!==void 0&&(a.text+=i)}),e.on("closetag",()=>{r.pop()}),e.write(t).close(),n===void 0)throw new Error("XML document is empty");return Ry(n)}function Oe(t,e){return t.children.find(r=>bi(r.name)===e)}function It(t,e){return t.children.filter(r=>bi(r.name)===e)}function ce(t,e){return t.attributes[e]}function gi(t){let e=t.text;for(let r of t.children)e+=gi(r);return e}function bi(t){let e=t.indexOf(":");return e===-1?t:t.slice(e+1)}function Ry(t){return{name:t.name,attributes:Object.freeze({...t.attributes}),children:Object.freeze(t.children.map(Ry)),text:t.text}}var bu=d(()=>{"use strict"});import{posix as rL}from"path";async function Ty(t){let e=await aL(t),r=yi(await t.readText(e)),n=oL(ce(r,"version")),i=Oe(r,"metadata"),a=Oe(r,"manifest"),o=Oe(r,"spine"),s=Oe(r,"guide"),c=cL(t,e,a),u=new Map([...c.values()].map(E=>[E.path,E])),l=dL(o,c),m=uL(t,e,s),p=sL(i),h=lL(c),g=mL(c,o),f=pL(c,i);return{version:n,opfPath:e,metadata:{...p,version:kt,sourceFormat:"epub"},manifest:c,manifestByPath:u,spine:l,navPath:h,ncxPath:g,coverPath:f?.path,coverMediaType:f?.mediaType,guideNonContentPaths:m}}async function aL(t){let e=yi(await t.readText("META-INF/container.xml")),n=Oe(e,"rootfiles")?.children.find(a=>bi(a.name)==="rootfile"),i=n===void 0?void 0:ce(n,"full-path");if(i===void 0||i.trim()==="")throw new Error("EPUB container.xml does not contain an OPF rootfile");return i}function oL(t){return t?.trim().startsWith("3")===!0?3:2}function sL(t){if(t===void 0)return vy();let e=Yt(t,"title"),r=Yt(t,"creator"),n=Yt(t,"language"),i=Yt(t,"identifier"),a=Yt(t,"publisher"),o=Yt(t,"date"),s=Yt(t,"description");return{...vy(),title:e[0]??null,authors:[...r],language:n[0]??null,identifier:i[0]??null,publisher:a[0]??null,publishedAt:o[0]??null,description:s[0]??null}}function vy(){return{version:kt,sourceFormat:"epub",title:null,authors:[],language:null,identifier:null,publisher:null,publishedAt:null,description:null}}function Yt(t,e){return t.children.filter(r=>bi(r.name)===e).map(r=>fL(gi(r))).filter(r=>r!==void 0)}function cL(t,e,r){let n=new Map;if(r===void 0)return n;for(let i of It(r,"item")){let a=ce(i,"id"),o=ce(i,"href"),s=ce(i,"media-type")??"";a===void 0||o===void 0||n.set(a,{id:a,path:t.resolveRelativePath(e,o),mediaType:s,properties:new Set((ce(i,"properties")??"").split(/\s+/u).map(c=>c.trim().toLowerCase()).filter(c=>c!==""))})}return n}function dL(t,e){return t===void 0?[]:It(t,"itemref").map(r=>ce(r,"idref")).filter(r=>r!==void 0).map(r=>{let n=e.get(r);if(!(n===void 0||n.mediaType!=="application/xhtml+xml"&&n.mediaType!=="text/html"))return{idref:r,path:n.path,mediaType:n.mediaType}}).filter(r=>r!==void 0)}function uL(t,e,r){let n=new Set;if(r===void 0)return n;for(let i of It(r,"reference")){let a=(ce(i,"type")??"").trim().toLowerCase();if(!iL.has(a))continue;let o=ce(i,"href");o===void 0||o.trim()===""||n.add(t.resolveRelativePath(e,hi(o).path))}return n}function lL(t){for(let e of t.values())if(e.properties.has("nav"))return e.path}function mL(t,e){let r=e===void 0?void 0:ce(e,"toc");if(r!==void 0)return t.get(r)?.path;for(let n of t.values())if(n.mediaType==="application/x-dtbncx+xml")return n.path}function pL(t,e){for(let n of t.values())if(n.properties.has("cover-image")&&n.mediaType.startsWith("image/"))return n;let r=hL(e);if(r!==void 0){let n=t.get(r);if(n?.mediaType.startsWith("image/")===!0)return n}for(let n of nL){let i=t.get(n);if(i?.mediaType.startsWith("image/")===!0)return i}for(let n of t.values())if(n.mediaType.startsWith("image/")&&rL.basename(n.path).toLowerCase().includes("cover"))return n}function hL(t){if(t!==void 0)for(let e of It(t,"meta")){if((ce(e,"name")??"").trim().toLowerCase()!=="cover")continue;let n=ce(e,"content");if(n!==void 0&&n.trim()!=="")return n.trim()}}function fL(t){let e=t.replace(/\s+/gu," ").trim();return e===""?void 0:e}var nL,iL,Su=d(()=>{"use strict";li();fi();bu();nL=["cover-image","coverimg","cover-img","cover"],iL=new Set(["cover","titlepage","other.titlepage"])});import{basename as yL,extname as gL,posix as bL}from"path";import{parseDocument as SL}from"htmlparser2";async function Cy(t,e){let r=await EL(t,e)??await kL(t,e)??[];if(r.length===0)return _y(e,new Set);let n=Ay(r),i=_y(e,n);return i.length===0?r:[...r,...i]}async function EL(t,e){if(e.navPath===void 0)return;let r=SL(await t.readText(e.navPath),{decodeEntities:!0}),n=wu(r,o=>xt(o)!=="nav"?!1:(o.attribs?.["epub:type"]??o.attribs?.type??"").split(/\s+/u).map(c=>c.trim().toLowerCase()).includes("toc"));if(n===void 0)return;let i=wu(n,o=>xt(o)==="ol");if(i===void 0)return;let a=Si(i).filter(o=>xt(o)==="li").map(o=>Py(t,e.navPath,o)).filter(o=>o!==void 0);return a.length===0?void 0:a}async function kL(t,e){if(e.ncxPath===void 0)return;let r=yi(await t.readText(e.ncxPath)),n=Oe(r,"navMap");if(n===void 0)return;let i=It(n,"navPoint").map(a=>Ly(t,e.ncxPath,a)).filter(a=>a!==void 0);return i.length===0?void 0:i}function Py(t,e,r){let n=Oy(r),i=n===void 0?void 0:My(Ny(n)),a=n!==void 0&&xt(n)==="a"?n.attribs?.href:void 0,o=xL(t,e,a),s=Si(r).filter(c=>xt(c)==="ol").flatMap(c=>Si(c)).filter(c=>xt(c)==="li").map(c=>Py(t,e,c)).filter(c=>c!==void 0);if(!(i===void 0&&o.path===void 0&&s.length===0))return{title:i,path:o.path,fragment:o.fragment,children:s}}function Ly(t,e,r){let n=Oe(r,"navLabel"),i=n===void 0?void 0:Oe(n,"text"),a=i===void 0?void 0:My(gi(i)),o=Oe(r,"content"),s=RL(t,e,ce(o??r,"src")),c=It(r,"navPoint").map(u=>Ly(t,e,u)).filter(u=>u!==void 0);if(!(a===void 0&&s.path===void 0&&c.length===0))return{title:a,path:s.path,fragment:s.fragment,children:c}}function _y(t,e){return t.spine.filter(r=>!IL(t,r.path,e)).filter(r=>!e.has(r.path)).map(r=>({title:vL(r.path),path:r.path,fragment:void 0,children:[]}))}function IL(t,e,r){if(t.guideNonContentPaths.has(e))return!0;let n=bL.basename(e).toLowerCase();return t.navPath===e?!0:wL.has(n)&&!r.has(e)}function Ay(t){let e=new Set;for(let r of t){r.path!==void 0&&e.add(r.path);for(let n of Ay(r.children))e.add(n)}return e}function xL(t,e,r){if(r===void 0||r.trim()==="")return{path:void 0,fragment:void 0};let{path:n,fragment:i}=hi(r);return{path:n===""?void 0:t.resolveRelativePath(e,n),fragment:i}}function RL(t,e,r){if(r===void 0||r.trim()==="")return{path:void 0,fragment:void 0};let{path:n,fragment:i}=hi(r);return{path:n===""?void 0:t.resolveRelativePath(e,n),fragment:i}}function wu(t,e){if(Dy(t)&&e(t))return t;for(let r of t.children??[]){let n=wu(r,e);if(n!==void 0)return n}}function Oy(t){for(let e of Si(t)){let r=xt(e);if(r==="a"||r==="span")return e}for(let e of Si(t)){if(xt(e)==="ol")continue;let r=Oy(e);if(r!==void 0)return r}}function Ny(t){return t.type==="text"?t.data??"":(t.children??[]).map(Ny).join("")}function Si(t){return(t.children??[]).filter(Dy)}function Dy(t){return t.type==="tag"||t.type==="script"||t.type==="style"}function xt(t){return t.name?.toLowerCase()}function vL(t){let e=yL(t,gL(t)).trim();return e===""?void 0:e}function My(t){let e=t.replace(/\s+/gu," ").trim();return e===""?void 0:e}var wL,Wy=d(()=>{"use strict";fi();Su();bu();wL=new Set(["toc.xhtml","nav.xhtml","contents.xhtml","tableofcontents.xhtml","cover.xhtml","titlepage.xhtml"])});function TL(t){if(t.hasEntry("META-INF/encryption.xml"))throw new Error("Encrypted EPUB is not supported: found META-INF/encryption.xml.")}async function _L(t,e){if(!(e.coverPath===void 0||e.coverMediaType===void 0))return{path:e.coverPath,mediaType:e.coverMediaType,data:await t.readBuffer(e.coverPath)}}function CL(t,e){let r=new Map;return e.map((n,i)=>Fy(t,n,[i],r))}function Fy(t,e,r,n){let i=fu(e.fragment),a=e.path===void 0?`toc:${r.join(".")}`:t.createSectionId(e.path,i),o=PL(a,n);return{hasContent:e.path!==void 0,id:o,title:e.title,path:e.path,fragment:i,wordsCount:0,children:e.children.map((s,c)=>Fy(t,s,[...r,c],n))}}function jy(t,e){return t.map(r=>{let n=e.get(r.id);return{...r,hasContent:n?.hasContent??!1,wordsCount:n?.wordsCount??0,children:jy(r.children,e)}})}function PL(t,e){let r=e.get(t)??0;return e.set(t,r+1),r===0?t:`${t}~${r+1}`}function LL(t){let e=new Map;for(let r of Gy(t)){if(r.path===void 0)continue;let n=e.get(r.path)??[];n.push({id:r.id,path:r.path,fragment:r.fragment}),e.set(r.path,n)}return e}function Gy(t){let e=[];for(let r of t)e.push(r),e.push(...Gy(r.children));return e}var Eu,ku,wi,Iu,By=d(()=>{"use strict";fi();fi();xy();Wy();Su();Eu=class t{#e;#t;constructor(e,r){this.#e=e,this.#t=r}get id(){return this.#t.id}get hasContent(){return this.#t.hasContent}get title(){return this.#t.title}get wordsCount(){return this.#t.wordsCount}get children(){return this.#t.children.map(e=>new t(this.#e,e))}async open(){return await this.#e.openSection(this.#t.id)}},ku=class t{#e;#t;#r;#n;constructor(e,r,n,i){this.#e=e,this.#t=r,this.#r=n,this.#n=i}static async open(e){TL(e);let r=await Ty(e),n=await Cy(e,r),i=CL(e,n),a=LL(i),o=await ky(e,a),s=jy(i,o),c=await _L(e,r);return new t(r,c,s,new Ho(e,a))}readMeta(){return Promise.resolve(this.#e.metadata)}readCover(){return Promise.resolve(this.#t)}readSections(){return Promise.resolve(this.#r.map(e=>new Eu(this,e)))}async openSection(e){return await this.#n.openSection(e)}},wi=class{get format(){return"epub"}async openSession(e,r){let n=await Uo.open(e);try{let i=await ku.open(n);return await r(i)}finally{await n.close()}}},Iu=new wi});var Uy=d(()=>{"use strict";By()});import{createReadStream as AL}from"fs";import{stat as OL}from"fs/promises";import{basename as NL,extname as DL,resolve as vu}from"path";function WL(t){let e=NL(t,DL(t)).trim();return e===""?null:e}var ML,xu,Ru,Ei,Hy,qy,$y=d(()=>{"use strict";li();ML="root",xu=class{#e;#t;constructor(e,r=ML){this.#e=vu(e),this.#t=r}get id(){return this.#t}get hasContent(){return!0}get title(){}get children(){return[]}open(){return Promise.resolve(AL(this.#e,{encoding:"utf8"}))}},Ru=class{#e;#t;#r;constructor(e,r){this.#e=vu(e),this.#t=r,this.#r=new xu(this.#e)}readMeta(){return Promise.resolve({version:kt,sourceFormat:this.#t,title:WL(this.#e),authors:[],language:null,identifier:null,publisher:null,publishedAt:null,description:null})}readCover(){return Promise.resolve(void 0)}readSections(){return Promise.resolve([this.#r])}},Ei=class{#e;constructor(e){this.#e=e}get format(){return this.#e}async openSession(e,r){let n=vu(e);if(!(await OL(n)).isFile())throw new Error(`Source file is not a regular file: ${n}`);return await r(new Ru(n,this.#e))}},Hy=new Ei("txt"),qy=new Ei("markdown")});var Zt=d(()=>{"use strict";li();Uy();$y();Bo()});function Tu(t){return{children:t.children.map(Tu),...t.key===void 0?{}:{key:t.key},...t.serialId===void 0?{}:{serialId:t.serialId},title:t.title}}function _u(t){let e=t?.trim();return e===void 0||e===""?void 0:e}var Cu=d(()=>{"use strict"});async function Pu(t){let e=await t.readToc(),r=e?.items.map(Tu)??[];return FL(r),e===void 0?{items:[],version:it}:{items:r,version:e.version}}function FL(t){let e=new Set,r=n=>{for(let i of n){if(i.key===void 0)throw new Error("Missing chapter key in TOC. Run a writable chapter operation or `wg maintenance upgrade` before using read-only chapter paths.");if(e.has(i.key))throw new Error(`Duplicate chapter key: ${i.key}.`);e.add(i.key),r(i.children)}};r(t)}function $o(t){let e=new Set,r=!1,n=a=>{for(let o of a){if(o.key!==void 0){if(e.has(o.key))throw new Error(`Duplicate chapter key: ${o.key}.`);e.add(o.key)}n(o.children)}},i=a=>{for(let o of a)o.key===void 0&&(o.key=pi(e),e.add(o.key),r=!0),i(o.children)};return n(t),i(t),r}async function Lu(t,e,r,n=[],i=[],a=0){for(let o of e){let s=_u(o.title)??null,c=o.key??`chapter-${o.serialId??"group"}`,u=o.serialId===void 0?[...n,...s===null?[]:[s]]:[...n,s??`Chapter ${o.serialId}`],l=[...i,c];if(o.serialId===r)return await Ky(t,o,o.serialId,{chapterPath:l,depth:a,title:s,tocPath:u});let m=await Lu(t,o.children,r,u,l,a+1);if(m!==void 0)return m}}async function qo(t,e,r=[],n=[],i=0){let a=[];for(let o of e){let s=_u(o.title)??null,c=o.key??`chapter-${o.serialId??"group"}`,u=o.serialId===void 0?[...r,...s===null?[]:[s]]:[...r,s??`Chapter ${o.serialId}`],l=[...n,c];if(o.serialId===void 0){a.push(...await qo(t,o.children,u,l,i+1));continue}a.push(await Ky(t,o,o.serialId,{chapterPath:l,depth:i,title:s,tocPath:u})),a.push(...await qo(t,o.children,u,l,i+1))}return a}async function Ky(t,e,r,n){let[i,a]=await Promise.all([t.serials.getById(r),jL(t,r)]);return{chapterId:r,childCount:e.children.length,depth:n.depth,documentOrder:i?.documentOrder??r,fragmentCount:a.fragmentCount,key:n.chapterPath.at(-1)??`chapter-${r}`,path:n.chapterPath.join("/"),stage:await GL(t,r,a.fragmentCount),title:n.title,tocPath:n.tocPath,uri:mi(n.chapterPath.join("/")),words:a.words}}async function jL(t,e){let r=await t.readDatabase(async o=>await o.queryAll(`
|
|
139
|
+
SELECT words_count
|
|
140
|
+
FROM text_sentence_records
|
|
141
|
+
WHERE kind = 1 AND chapter_id = ?
|
|
142
|
+
ORDER BY sentence_index
|
|
143
|
+
`,[e],s=>Number(s.words_count))),n=0,i=0,a=0;for(let o of r)i>0&&i+o>600&&(n+=1,i=0),i+=o,a+=o;return i>0&&(n+=1),{fragmentCount:n,words:a}}async function GL(t,e,r){return await t.readDatabase(async a=>await a.queryOne(`
|
|
144
|
+
SELECT COUNT(*) AS count
|
|
145
|
+
FROM text_sentence_records
|
|
146
|
+
WHERE kind = 2 AND chapter_id = ?
|
|
147
|
+
`,[e],o=>Number(o.count))??0)>0?"summarized":(await t.serials.getById(e))?.topologyReady===!0?"graphed":r>0?"sourced":"planned"}var ki=d(()=>{"use strict";Zt();rt();Cu()});async function Jy(t){await BL(t),await qL(t),await HL(t),await KL(t),await JL(t),await UL(t),await $L(t)}async function BL(t){(await Rt(t,"serials")).has("document_order")||await t.transaction(async()=>{(await Rt(t,"serials")).has("document_order")||await t.run(`
|
|
148
|
+
ALTER TABLE serials
|
|
149
|
+
ADD COLUMN document_order INTEGER NOT NULL DEFAULT 0
|
|
150
|
+
`)})}async function UL(t){await t.run(`
|
|
151
|
+
CREATE INDEX IF NOT EXISTS idx_serials_document_order
|
|
152
|
+
ON serials(document_order, id)
|
|
153
|
+
`)}async function HL(t){(await Rt(t,"serial_states")).has("revision")||await t.transaction(async()=>{(await Rt(t,"serial_states")).has("revision")||await t.run(`
|
|
154
|
+
ALTER TABLE serial_states
|
|
155
|
+
ADD COLUMN revision INTEGER NOT NULL DEFAULT 0
|
|
156
|
+
`)})}async function qL(t){await t.run(`
|
|
157
|
+
CREATE TABLE IF NOT EXISTS graph_build_parameters (
|
|
158
|
+
hash TEXT PRIMARY KEY,
|
|
159
|
+
prompt TEXT NOT NULL,
|
|
160
|
+
language TEXT,
|
|
161
|
+
created_at TEXT NOT NULL
|
|
162
|
+
)
|
|
163
|
+
`)}async function $L(t){await t.run(`
|
|
164
|
+
CREATE INDEX IF NOT EXISTS idx_serial_states_topology_parameter_hash
|
|
165
|
+
ON serial_states(topology_parameter_hash)
|
|
166
|
+
`),await t.run(`
|
|
167
|
+
CREATE INDEX IF NOT EXISTS idx_serial_states_knowledge_graph_parameter_hash
|
|
168
|
+
ON serial_states(knowledge_graph_parameter_hash)
|
|
169
|
+
`)}async function KL(t){(await Rt(t,"serial_states")).has("knowledge_graph_ready")||await t.transaction(async()=>{(await Rt(t,"serial_states")).has("knowledge_graph_ready")||await t.run(`
|
|
170
|
+
ALTER TABLE serial_states
|
|
171
|
+
ADD COLUMN knowledge_graph_ready INTEGER NOT NULL DEFAULT 0
|
|
172
|
+
`)})}async function JL(t){let e=await Rt(t,"serial_states"),r=[["topology_parameter_hash","TEXT"],["knowledge_graph_parameter_hash","TEXT"]],n=[];for(let i of r)e.has(i[0])||n.push(i);n.length!==0&&await t.transaction(async()=>{let i=await Rt(t,"serial_states");for(let[a,o]of n)i.has(a)||await t.run(`
|
|
173
|
+
ALTER TABLE serial_states
|
|
174
|
+
ADD COLUMN ${a} ${o}
|
|
175
|
+
`)})}async function Rt(t,e){let r=await t.queryAll(`PRAGMA table_info(${e})`,void 0,n=>String(n.name));return new Set(r)}var Au,Ou,Nu,Ii=d(()=>{"use strict";Au=`
|
|
176
|
+
CREATE TABLE IF NOT EXISTS serials (
|
|
177
|
+
id INTEGER PRIMARY KEY,
|
|
178
|
+
document_order INTEGER NOT NULL DEFAULT 0
|
|
179
|
+
);
|
|
180
|
+
|
|
181
|
+
CREATE TABLE IF NOT EXISTS serial_states (
|
|
182
|
+
serial_id INTEGER PRIMARY KEY,
|
|
183
|
+
revision INTEGER NOT NULL DEFAULT 0,
|
|
184
|
+
topology_ready INTEGER NOT NULL DEFAULT 0,
|
|
185
|
+
topology_parameter_hash TEXT,
|
|
186
|
+
knowledge_graph_ready INTEGER NOT NULL DEFAULT 0,
|
|
187
|
+
knowledge_graph_parameter_hash TEXT,
|
|
188
|
+
FOREIGN KEY (serial_id) REFERENCES serials(id)
|
|
189
|
+
);
|
|
190
|
+
|
|
191
|
+
CREATE TABLE IF NOT EXISTS archive_revisions (
|
|
192
|
+
key TEXT PRIMARY KEY,
|
|
193
|
+
value INTEGER NOT NULL
|
|
194
|
+
);
|
|
195
|
+
|
|
196
|
+
CREATE TABLE IF NOT EXISTS archive_index_settings (
|
|
197
|
+
id INTEGER PRIMARY KEY CHECK (id = 1),
|
|
198
|
+
fts_embedded INTEGER NOT NULL DEFAULT 0
|
|
199
|
+
);
|
|
200
|
+
|
|
201
|
+
CREATE TABLE IF NOT EXISTS graph_build_parameters (
|
|
202
|
+
hash TEXT PRIMARY KEY,
|
|
203
|
+
prompt TEXT NOT NULL,
|
|
204
|
+
language TEXT,
|
|
205
|
+
created_at TEXT NOT NULL
|
|
206
|
+
);
|
|
207
|
+
|
|
208
|
+
CREATE TABLE IF NOT EXISTS chunks (
|
|
209
|
+
id INTEGER PRIMARY KEY,
|
|
210
|
+
generation INTEGER NOT NULL,
|
|
211
|
+
serial_id INTEGER NOT NULL,
|
|
212
|
+
sentence_index INTEGER NOT NULL,
|
|
213
|
+
label TEXT NOT NULL,
|
|
214
|
+
content TEXT NOT NULL,
|
|
215
|
+
retention TEXT,
|
|
216
|
+
importance TEXT,
|
|
217
|
+
wordsCount INTEGER NOT NULL DEFAULT 0,
|
|
218
|
+
weight REAL NOT NULL DEFAULT 0.0
|
|
219
|
+
);
|
|
220
|
+
|
|
221
|
+
CREATE INDEX IF NOT EXISTS idx_chunks_sentence
|
|
222
|
+
ON chunks(serial_id, sentence_index);
|
|
223
|
+
|
|
224
|
+
CREATE INDEX IF NOT EXISTS idx_chunks_serial_id
|
|
225
|
+
ON chunks(serial_id, id);
|
|
226
|
+
|
|
227
|
+
CREATE TABLE IF NOT EXISTS chunk_sentences (
|
|
228
|
+
chunk_id INTEGER NOT NULL,
|
|
229
|
+
serial_id INTEGER NOT NULL,
|
|
230
|
+
sentence_index INTEGER NOT NULL,
|
|
231
|
+
FOREIGN KEY (chunk_id) REFERENCES chunks(id),
|
|
232
|
+
PRIMARY KEY (chunk_id, serial_id, sentence_index)
|
|
233
|
+
);
|
|
234
|
+
|
|
235
|
+
CREATE TABLE IF NOT EXISTS reading_edges (
|
|
236
|
+
from_id INTEGER NOT NULL,
|
|
237
|
+
to_id INTEGER NOT NULL,
|
|
238
|
+
strength TEXT,
|
|
239
|
+
weight REAL NOT NULL DEFAULT 0.1,
|
|
240
|
+
PRIMARY KEY (from_id, to_id),
|
|
241
|
+
FOREIGN KEY (from_id) REFERENCES chunks(id),
|
|
242
|
+
FOREIGN KEY (to_id) REFERENCES chunks(id)
|
|
243
|
+
);
|
|
244
|
+
|
|
245
|
+
CREATE TABLE IF NOT EXISTS snakes (
|
|
246
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
247
|
+
serial_id INTEGER NOT NULL,
|
|
248
|
+
group_id INTEGER NOT NULL,
|
|
249
|
+
local_snake_id INTEGER NOT NULL,
|
|
250
|
+
size INTEGER NOT NULL,
|
|
251
|
+
first_label TEXT NOT NULL,
|
|
252
|
+
last_label TEXT NOT NULL,
|
|
253
|
+
wordsCount INTEGER NOT NULL DEFAULT 0,
|
|
254
|
+
weight REAL NOT NULL DEFAULT 0.0,
|
|
255
|
+
UNIQUE(serial_id, group_id, local_snake_id)
|
|
256
|
+
);
|
|
257
|
+
|
|
258
|
+
CREATE TABLE IF NOT EXISTS snake_chunks (
|
|
259
|
+
snake_id INTEGER NOT NULL,
|
|
260
|
+
chunk_id INTEGER NOT NULL,
|
|
261
|
+
position INTEGER NOT NULL,
|
|
262
|
+
FOREIGN KEY (snake_id) REFERENCES snakes(id),
|
|
263
|
+
FOREIGN KEY (chunk_id) REFERENCES chunks(id),
|
|
264
|
+
PRIMARY KEY (snake_id, chunk_id)
|
|
265
|
+
);
|
|
266
|
+
|
|
267
|
+
CREATE TABLE IF NOT EXISTS snake_edges (
|
|
268
|
+
from_snake_id INTEGER NOT NULL,
|
|
269
|
+
to_snake_id INTEGER NOT NULL,
|
|
270
|
+
weight REAL NOT NULL DEFAULT 0.1,
|
|
271
|
+
PRIMARY KEY (from_snake_id, to_snake_id),
|
|
272
|
+
FOREIGN KEY (from_snake_id) REFERENCES snakes(id),
|
|
273
|
+
FOREIGN KEY (to_snake_id) REFERENCES snakes(id)
|
|
274
|
+
);
|
|
275
|
+
|
|
276
|
+
CREATE TABLE IF NOT EXISTS sentence_groups (
|
|
277
|
+
serial_id INTEGER NOT NULL,
|
|
278
|
+
group_id INTEGER NOT NULL,
|
|
279
|
+
start_sentence_index INTEGER NOT NULL,
|
|
280
|
+
end_sentence_index INTEGER NOT NULL,
|
|
281
|
+
PRIMARY KEY (serial_id, group_id, start_sentence_index, end_sentence_index)
|
|
282
|
+
);
|
|
283
|
+
|
|
284
|
+
CREATE TABLE IF NOT EXISTS mentions (
|
|
285
|
+
id TEXT PRIMARY KEY,
|
|
286
|
+
chapter_id INTEGER NOT NULL,
|
|
287
|
+
sentence_index INTEGER,
|
|
288
|
+
range_start INTEGER NOT NULL,
|
|
289
|
+
range_end INTEGER NOT NULL,
|
|
290
|
+
surface TEXT NOT NULL,
|
|
291
|
+
qid TEXT NOT NULL,
|
|
292
|
+
confidence REAL,
|
|
293
|
+
note TEXT,
|
|
294
|
+
FOREIGN KEY (chapter_id) REFERENCES serials(id)
|
|
295
|
+
);
|
|
296
|
+
|
|
297
|
+
CREATE INDEX IF NOT EXISTS idx_mentions_chapter
|
|
298
|
+
ON mentions(chapter_id);
|
|
299
|
+
|
|
300
|
+
CREATE INDEX IF NOT EXISTS idx_mentions_chapter_position
|
|
301
|
+
ON mentions(chapter_id, sentence_index, range_start, range_end, id);
|
|
302
|
+
|
|
303
|
+
CREATE INDEX IF NOT EXISTS idx_mentions_chapter_qid
|
|
304
|
+
ON mentions(chapter_id, qid);
|
|
305
|
+
|
|
306
|
+
CREATE INDEX IF NOT EXISTS idx_mentions_qid
|
|
307
|
+
ON mentions(qid);
|
|
308
|
+
|
|
309
|
+
CREATE INDEX IF NOT EXISTS idx_mentions_qid_position
|
|
310
|
+
ON mentions(qid, chapter_id, sentence_index, range_start, range_end, id);
|
|
311
|
+
|
|
312
|
+
CREATE INDEX IF NOT EXISTS idx_mentions_surface
|
|
313
|
+
ON mentions(surface);
|
|
314
|
+
|
|
315
|
+
CREATE INDEX IF NOT EXISTS idx_mentions_surface_position
|
|
316
|
+
ON mentions(surface, chapter_id, sentence_index, range_start, range_end, id);
|
|
317
|
+
|
|
318
|
+
CREATE INDEX IF NOT EXISTS idx_mentions_sentence
|
|
319
|
+
ON mentions(chapter_id, sentence_index);
|
|
320
|
+
|
|
321
|
+
CREATE TABLE IF NOT EXISTS mention_links (
|
|
322
|
+
id TEXT PRIMARY KEY,
|
|
323
|
+
source_mention_id TEXT NOT NULL,
|
|
324
|
+
target_mention_id TEXT NOT NULL,
|
|
325
|
+
predicate TEXT NOT NULL,
|
|
326
|
+
confidence REAL,
|
|
327
|
+
note TEXT,
|
|
328
|
+
FOREIGN KEY (source_mention_id) REFERENCES mentions(id),
|
|
329
|
+
FOREIGN KEY (target_mention_id) REFERENCES mentions(id)
|
|
330
|
+
);
|
|
331
|
+
|
|
332
|
+
CREATE TABLE IF NOT EXISTS mention_link_evidence_sentences (
|
|
333
|
+
link_id TEXT NOT NULL,
|
|
334
|
+
chapter_id INTEGER NOT NULL,
|
|
335
|
+
sentence_index INTEGER NOT NULL,
|
|
336
|
+
FOREIGN KEY (link_id) REFERENCES mention_links(id),
|
|
337
|
+
PRIMARY KEY (link_id, chapter_id, sentence_index)
|
|
338
|
+
);
|
|
339
|
+
|
|
340
|
+
CREATE INDEX IF NOT EXISTS idx_mention_link_evidence_sentences_sentence
|
|
341
|
+
ON mention_link_evidence_sentences(chapter_id, sentence_index);
|
|
342
|
+
|
|
343
|
+
CREATE INDEX IF NOT EXISTS idx_mention_links_source
|
|
344
|
+
ON mention_links(source_mention_id);
|
|
345
|
+
|
|
346
|
+
CREATE INDEX IF NOT EXISTS idx_mention_links_target
|
|
347
|
+
ON mention_links(target_mention_id);
|
|
348
|
+
|
|
349
|
+
CREATE INDEX IF NOT EXISTS idx_mention_links_predicate
|
|
350
|
+
ON mention_links(predicate);
|
|
351
|
+
|
|
352
|
+
CREATE INDEX IF NOT EXISTS idx_mention_links_predicate_source_target
|
|
353
|
+
ON mention_links(predicate, source_mention_id, target_mention_id);
|
|
354
|
+
|
|
355
|
+
CREATE INDEX IF NOT EXISTS idx_mention_links_predicate_target_source
|
|
356
|
+
ON mention_links(predicate, target_mention_id, source_mention_id);
|
|
357
|
+
|
|
358
|
+
CREATE INDEX IF NOT EXISTS idx_mention_links_source_predicate_target
|
|
359
|
+
ON mention_links(source_mention_id, predicate, target_mention_id);
|
|
360
|
+
|
|
361
|
+
CREATE INDEX IF NOT EXISTS idx_mention_links_target_predicate_source
|
|
362
|
+
ON mention_links(target_mention_id, predicate, source_mention_id);
|
|
363
|
+
|
|
364
|
+
CREATE INDEX IF NOT EXISTS idx_mention_links_source_target_predicate
|
|
365
|
+
ON mention_links(source_mention_id, target_mention_id, predicate);
|
|
366
|
+
|
|
367
|
+
CREATE INDEX IF NOT EXISTS idx_reading_edges_target
|
|
368
|
+
ON reading_edges(to_id, from_id);
|
|
369
|
+
|
|
370
|
+
CREATE INDEX IF NOT EXISTS idx_snake_edges_target
|
|
371
|
+
ON snake_edges(to_snake_id, from_snake_id);
|
|
372
|
+
|
|
373
|
+
CREATE VIEW IF NOT EXISTS chapter_entities AS
|
|
374
|
+
SELECT
|
|
375
|
+
chapter_id,
|
|
376
|
+
qid,
|
|
377
|
+
COUNT(*) AS mention_count
|
|
378
|
+
FROM mentions
|
|
379
|
+
GROUP BY chapter_id, qid;
|
|
380
|
+
|
|
381
|
+
CREATE VIEW IF NOT EXISTS book_entities AS
|
|
382
|
+
SELECT
|
|
383
|
+
qid,
|
|
384
|
+
SUM(mention_count) AS mention_count
|
|
385
|
+
FROM chapter_entities
|
|
386
|
+
GROUP BY qid;
|
|
387
|
+
|
|
388
|
+
CREATE VIEW IF NOT EXISTS chapter_entity_relations AS
|
|
389
|
+
SELECT
|
|
390
|
+
source_mentions.chapter_id AS chapter_id,
|
|
391
|
+
source_mentions.qid AS subject_qid,
|
|
392
|
+
mention_links.predicate AS predicate,
|
|
393
|
+
target_mentions.qid AS object_qid,
|
|
394
|
+
COUNT(*) AS evidence_count
|
|
395
|
+
FROM mention_links
|
|
396
|
+
JOIN mentions AS source_mentions
|
|
397
|
+
ON source_mentions.id = mention_links.source_mention_id
|
|
398
|
+
JOIN mentions AS target_mentions
|
|
399
|
+
ON target_mentions.id = mention_links.target_mention_id
|
|
400
|
+
WHERE source_mentions.chapter_id = target_mentions.chapter_id
|
|
401
|
+
GROUP BY
|
|
402
|
+
source_mentions.chapter_id,
|
|
403
|
+
source_mentions.qid,
|
|
404
|
+
mention_links.predicate,
|
|
405
|
+
target_mentions.qid;
|
|
406
|
+
|
|
407
|
+
CREATE VIEW IF NOT EXISTS book_entity_relations AS
|
|
408
|
+
SELECT
|
|
409
|
+
subject_qid,
|
|
410
|
+
predicate,
|
|
411
|
+
object_qid,
|
|
412
|
+
SUM(evidence_count) AS evidence_count
|
|
413
|
+
FROM chapter_entity_relations
|
|
414
|
+
GROUP BY subject_qid, predicate, object_qid;
|
|
415
|
+
|
|
416
|
+
CREATE TABLE IF NOT EXISTS text_sentence_records (
|
|
417
|
+
id INTEGER PRIMARY KEY,
|
|
418
|
+
kind INTEGER NOT NULL,
|
|
419
|
+
chapter_id INTEGER NOT NULL,
|
|
420
|
+
sentence_index INTEGER NOT NULL,
|
|
421
|
+
words_count INTEGER NOT NULL DEFAULT 0,
|
|
422
|
+
byte_offset INTEGER NOT NULL DEFAULT 0,
|
|
423
|
+
byte_length INTEGER NOT NULL DEFAULT 0,
|
|
424
|
+
UNIQUE(kind, chapter_id, sentence_index)
|
|
425
|
+
);
|
|
426
|
+
|
|
427
|
+
CREATE INDEX IF NOT EXISTS idx_text_sentence_records_chapter
|
|
428
|
+
ON text_sentence_records(kind, chapter_id, sentence_index);
|
|
429
|
+
|
|
430
|
+
CREATE TABLE IF NOT EXISTS object_metadata (
|
|
431
|
+
id INTEGER PRIMARY KEY,
|
|
432
|
+
object_kind INTEGER NOT NULL,
|
|
433
|
+
object_path TEXT NOT NULL,
|
|
434
|
+
key TEXT NOT NULL,
|
|
435
|
+
value_json TEXT NOT NULL,
|
|
436
|
+
updated_at TEXT NOT NULL,
|
|
437
|
+
chapter_id INTEGER,
|
|
438
|
+
chunk_id INTEGER,
|
|
439
|
+
entity_qid TEXT,
|
|
440
|
+
triple_subject_qid TEXT,
|
|
441
|
+
triple_predicate TEXT,
|
|
442
|
+
triple_object_qid TEXT,
|
|
443
|
+
UNIQUE(object_path, key)
|
|
444
|
+
);
|
|
445
|
+
|
|
446
|
+
CREATE INDEX IF NOT EXISTS idx_object_metadata_object
|
|
447
|
+
ON object_metadata(object_path);
|
|
448
|
+
|
|
449
|
+
CREATE INDEX IF NOT EXISTS idx_object_metadata_chapter
|
|
450
|
+
ON object_metadata(chapter_id);
|
|
451
|
+
|
|
452
|
+
CREATE INDEX IF NOT EXISTS idx_object_metadata_chunk
|
|
453
|
+
ON object_metadata(chunk_id);
|
|
454
|
+
|
|
455
|
+
CREATE INDEX IF NOT EXISTS idx_object_metadata_entity
|
|
456
|
+
ON object_metadata(entity_qid);
|
|
457
|
+
|
|
458
|
+
CREATE INDEX IF NOT EXISTS idx_object_metadata_triple
|
|
459
|
+
ON object_metadata(
|
|
460
|
+
triple_subject_qid,
|
|
461
|
+
triple_predicate,
|
|
462
|
+
triple_object_qid
|
|
463
|
+
);
|
|
464
|
+
`,Ou=`
|
|
465
|
+
id INTEGER PRIMARY KEY,
|
|
466
|
+
archive_id INTEGER NOT NULL,
|
|
467
|
+
kind INTEGER NOT NULL,
|
|
468
|
+
chapter_id INTEGER NOT NULL,
|
|
469
|
+
sentence_index INTEGER NOT NULL,
|
|
470
|
+
words_count INTEGER NOT NULL DEFAULT 0,
|
|
471
|
+
byte_offset INTEGER NOT NULL DEFAULT 0,
|
|
472
|
+
byte_length INTEGER NOT NULL DEFAULT 0,
|
|
473
|
+
UNIQUE(archive_id, kind, chapter_id, sentence_index)
|
|
474
|
+
`,Nu=`
|
|
475
|
+
CREATE TABLE IF NOT EXISTS search_index_state (
|
|
476
|
+
key TEXT PRIMARY KEY,
|
|
477
|
+
value TEXT NOT NULL
|
|
478
|
+
);
|
|
479
|
+
|
|
480
|
+
CREATE TABLE IF NOT EXISTS text_sentence_records (
|
|
481
|
+
${Ou}
|
|
482
|
+
);
|
|
483
|
+
|
|
484
|
+
CREATE INDEX IF NOT EXISTS idx_text_sentence_records_chapter
|
|
485
|
+
ON text_sentence_records(archive_id, kind, chapter_id, sentence_index);
|
|
486
|
+
|
|
487
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS text_sentence_fts USING fts5(
|
|
488
|
+
tier1,
|
|
489
|
+
tier2,
|
|
490
|
+
tier3,
|
|
491
|
+
tokenize='ascii'
|
|
492
|
+
);
|
|
493
|
+
|
|
494
|
+
CREATE TABLE IF NOT EXISTS search_object_properties_records (
|
|
495
|
+
id INTEGER PRIMARY KEY,
|
|
496
|
+
archive_id INTEGER NOT NULL,
|
|
497
|
+
owner_kind INTEGER NOT NULL,
|
|
498
|
+
owner_id TEXT NOT NULL,
|
|
499
|
+
property_kind INTEGER NOT NULL,
|
|
500
|
+
chapter_id INTEGER
|
|
501
|
+
);
|
|
502
|
+
|
|
503
|
+
CREATE INDEX IF NOT EXISTS idx_search_object_properties_records_owner
|
|
504
|
+
ON search_object_properties_records(archive_id, owner_kind, owner_id);
|
|
505
|
+
|
|
506
|
+
CREATE INDEX IF NOT EXISTS idx_search_object_properties_records_chapter
|
|
507
|
+
ON search_object_properties_records(archive_id, chapter_id, owner_kind, owner_id);
|
|
508
|
+
|
|
509
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS search_object_properties_fts USING fts5(
|
|
510
|
+
tier1,
|
|
511
|
+
tier2,
|
|
512
|
+
tier3,
|
|
513
|
+
tokenize='ascii'
|
|
514
|
+
);
|
|
515
|
+
|
|
516
|
+
CREATE TABLE IF NOT EXISTS index_dirty_chapters (
|
|
517
|
+
archive_id INTEGER NOT NULL,
|
|
518
|
+
chapter_id INTEGER NOT NULL,
|
|
519
|
+
updated_at INTEGER NOT NULL,
|
|
520
|
+
PRIMARY KEY (archive_id, chapter_id)
|
|
521
|
+
);
|
|
522
|
+
`});function Qy(t,e){return t-e}function Xy(t){return typeof t=="object"&&t!==null&&"code"in t&&typeof t.code=="string"&&t.code.startsWith("SQLITE_CONSTRAINT")}function Vy(t,e){let r=[];for(let n=0;n<t.length;n+=e)r.push(t.slice(n,n+e));return r}function Ko(t){let e=fe(t,"strength");return{fromId:y(t,"from_id"),toId:y(t,"to_id"),weight:y(t,"weight"),...e===void 0?{}:{strength:e}}}function er(t){let e=Du(t,"sentence_index"),r=Du(t,"confidence"),n=fe(t,"note");return{chapterId:y(t,"chapter_id"),...r===void 0?{}:{confidence:r},id:k(t,"id"),...n===void 0?{}:{note:n},qid:k(t,"qid"),rangeEnd:y(t,"range_end"),rangeStart:y(t,"range_start"),...e===void 0?{}:{sentenceIndex:e},surface:k(t,"surface")}}function Yy(t){let e=new Set,r=[];for(let n of t)e.has(n.id)||(e.add(n.id),r.push(n));return r}function xi(t){let e=Du(t,"confidence"),r=fe(t,"note");return{...e===void 0?{}:{confidence:e},evidenceSentenceIds:[],id:k(t,"id"),...r===void 0?{}:{note:r},predicate:k(t,"predicate"),sourceMentionId:k(t,"source_mention_id"),targetMentionId:k(t,"target_mention_id")}}function Zy(t){try{return JSON.parse(t)}catch(e){throw new Error(`Invalid object metadata JSON: ${zL(e)}`)}}function Du(t,e){let r=t[e];if(r!=null){if(typeof r!="number")throw new TypeError(`Expected ${e} to be a number`);return r}}function zL(t){return t instanceof Error?t.message:String(t)}function eg(t){return t.replace(/[\\%_]/gu,e=>`\\${e}`)}function tg(t){return t!==void 0&&tu(t)?t:void 0}function rg(t){return t!==void 0&&Zd(t)?t:void 0}var zy,tr=d(()=>{"use strict";x();tt();zy=900});var Hr,ng=d(()=>{"use strict";x();tr();Hr=class{#e;constructor(e){this.#e=e}async countAll(){return await this.#e.queryOne(`
|
|
523
|
+
SELECT COUNT(*) AS count
|
|
524
|
+
FROM chunks
|
|
525
|
+
`,void 0,e=>y(e,"count"))??0}async create(e){return await this.#e.transaction(async()=>{await this.#e.run(`
|
|
526
|
+
INSERT INTO chunks (
|
|
527
|
+
generation,
|
|
528
|
+
serial_id,
|
|
529
|
+
sentence_index,
|
|
530
|
+
label,
|
|
531
|
+
content,
|
|
532
|
+
retention,
|
|
533
|
+
importance,
|
|
534
|
+
wordsCount,
|
|
535
|
+
weight
|
|
536
|
+
)
|
|
537
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
538
|
+
`,[e.generation,e.sentenceId[0],e.sentenceId[1],e.label,e.content,e.retention??null,e.importance??null,e.wordsCount,e.weight]);let r=await this.#e.getLastInsertRowId(),n={...e,id:r};return await this.#r(n),n})}async save(e){await this.#e.transaction(async()=>{await this.#e.run(`
|
|
539
|
+
INSERT OR REPLACE INTO chunks (
|
|
540
|
+
id,
|
|
541
|
+
generation,
|
|
542
|
+
serial_id,
|
|
543
|
+
sentence_index,
|
|
544
|
+
label,
|
|
545
|
+
content,
|
|
546
|
+
retention,
|
|
547
|
+
importance,
|
|
548
|
+
wordsCount,
|
|
549
|
+
weight
|
|
550
|
+
)
|
|
551
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
552
|
+
`,[e.id,e.generation,e.sentenceId[0],e.sentenceId[1],e.label,e.content,e.retention??null,e.importance??null,e.wordsCount,e.weight]),await this.#r(e)})}async getById(e){let r=await this.#e.queryOne(`
|
|
553
|
+
SELECT
|
|
554
|
+
id,
|
|
555
|
+
generation,
|
|
556
|
+
serial_id,
|
|
557
|
+
sentence_index,
|
|
558
|
+
label,
|
|
559
|
+
content,
|
|
560
|
+
retention,
|
|
561
|
+
importance,
|
|
562
|
+
wordsCount,
|
|
563
|
+
weight
|
|
564
|
+
FROM chunks
|
|
565
|
+
WHERE id = ?
|
|
566
|
+
`,[e],n=>n);if(r!==void 0)return await this.#n(r)}async listAll(){let e=await this.#e.queryAll(`
|
|
567
|
+
SELECT
|
|
568
|
+
id,
|
|
569
|
+
generation,
|
|
570
|
+
serial_id,
|
|
571
|
+
sentence_index,
|
|
572
|
+
label,
|
|
573
|
+
content,
|
|
574
|
+
retention,
|
|
575
|
+
importance,
|
|
576
|
+
wordsCount,
|
|
577
|
+
weight
|
|
578
|
+
FROM chunks
|
|
579
|
+
ORDER BY id
|
|
580
|
+
`,void 0,r=>r);return await Promise.all(e.map(async r=>await this.#n(r)))}async listBySentenceStartIndexes(e,r){if(r.length===0)return[];let n=await Promise.all(r.map(async i=>await this.listBySentenceRange(e,i,i)));return Yy(n.flat())}async listBySentenceRange(e,r,n){let i=await this.#e.queryAll(`
|
|
581
|
+
SELECT
|
|
582
|
+
id,
|
|
583
|
+
generation,
|
|
584
|
+
serial_id,
|
|
585
|
+
sentence_index,
|
|
586
|
+
label,
|
|
587
|
+
content,
|
|
588
|
+
retention,
|
|
589
|
+
importance,
|
|
590
|
+
wordsCount,
|
|
591
|
+
weight
|
|
592
|
+
FROM chunks
|
|
593
|
+
WHERE serial_id = ?
|
|
594
|
+
AND sentence_index BETWEEN ? AND ?
|
|
595
|
+
ORDER BY id
|
|
596
|
+
`,[e,r,n],a=>a);return await Promise.all(i.map(async a=>await this.#n(a)))}async listBySerial(e){let r=await this.#e.queryAll(`
|
|
597
|
+
SELECT
|
|
598
|
+
id,
|
|
599
|
+
generation,
|
|
600
|
+
serial_id,
|
|
601
|
+
sentence_index,
|
|
602
|
+
label,
|
|
603
|
+
content,
|
|
604
|
+
retention,
|
|
605
|
+
importance,
|
|
606
|
+
wordsCount,
|
|
607
|
+
weight
|
|
608
|
+
FROM chunks
|
|
609
|
+
WHERE serial_id = ?
|
|
610
|
+
ORDER BY id
|
|
611
|
+
`,[e],n=>n);return await Promise.all(r.map(async n=>await this.#n(n)))}async getMaxId(){return await this.#e.queryOne(`
|
|
612
|
+
SELECT MAX(id) AS id
|
|
613
|
+
FROM chunks
|
|
614
|
+
`,void 0,e=>{let r=e.id;return typeof r=="number"?r:0})??0}async listFragmentPairs(){return await this.#e.queryAll(`
|
|
615
|
+
SELECT DISTINCT serial_id, sentence_index
|
|
616
|
+
FROM chunks
|
|
617
|
+
ORDER BY serial_id, sentence_index
|
|
618
|
+
`,void 0,e=>[y(e,"serial_id"),y(e,"sentence_index")])}async#t(e){return await this.#e.queryAll(`
|
|
619
|
+
SELECT serial_id, sentence_index
|
|
620
|
+
FROM chunk_sentences
|
|
621
|
+
WHERE chunk_id = ?
|
|
622
|
+
ORDER BY serial_id, sentence_index
|
|
623
|
+
`,[e],r=>[y(r,"serial_id"),y(r,"sentence_index")])}async#r(e){await this.#e.run(`
|
|
624
|
+
DELETE FROM chunk_sentences
|
|
625
|
+
WHERE chunk_id = ?
|
|
626
|
+
`,[e.id]);for(let r of e.sentenceIds)await this.#e.run(`
|
|
627
|
+
INSERT INTO chunk_sentences (
|
|
628
|
+
chunk_id,
|
|
629
|
+
serial_id,
|
|
630
|
+
sentence_index
|
|
631
|
+
)
|
|
632
|
+
VALUES (?, ?, ?)
|
|
633
|
+
`,[e.id,r[0],r[1]])}async#n(e){let r=y(e,"id"),n=tg(fe(e,"importance")),i=rg(fe(e,"retention"));return{content:k(e,"content"),generation:y(e,"generation"),id:r,label:k(e,"label"),sentenceId:[y(e,"serial_id"),y(e,"sentence_index")],sentenceIds:await this.#t(r),wordsCount:y(e,"wordsCount"),weight:y(e,"weight"),...n===void 0?{}:{importance:n},...i===void 0?{}:{retention:i}}}}});var qr,ig=d(()=>{"use strict";x();qr=class{#e;constructor(e){this.#e=e}async save(e){await this.#e.run(`
|
|
634
|
+
INSERT OR REPLACE INTO sentence_groups (
|
|
635
|
+
serial_id,
|
|
636
|
+
group_id,
|
|
637
|
+
start_sentence_index,
|
|
638
|
+
end_sentence_index
|
|
639
|
+
)
|
|
640
|
+
VALUES (?, ?, ?, ?)
|
|
641
|
+
`,[e.serialId,e.groupId,e.startSentenceIndex,e.endSentenceIndex])}async saveMany(e){await this.#e.transaction(async()=>{for(let r of e)await this.save(r)})}async listBySerial(e){return await this.#e.queryAll(`
|
|
642
|
+
SELECT serial_id, group_id, start_sentence_index, end_sentence_index
|
|
643
|
+
FROM sentence_groups
|
|
644
|
+
WHERE serial_id = ?
|
|
645
|
+
ORDER BY group_id, start_sentence_index
|
|
646
|
+
`,[e],r=>({serialId:y(r,"serial_id"),groupId:y(r,"group_id"),startSentenceIndex:y(r,"start_sentence_index"),endSentenceIndex:y(r,"end_sentence_index")}))}async listSerialIds(){return await this.#e.queryAll(`
|
|
647
|
+
SELECT DISTINCT serial_id
|
|
648
|
+
FROM sentence_groups
|
|
649
|
+
ORDER BY serial_id
|
|
650
|
+
`,void 0,e=>y(e,"serial_id"))}async listGroupIdsForSerial(e){return await this.#e.queryAll(`
|
|
651
|
+
SELECT DISTINCT group_id
|
|
652
|
+
FROM sentence_groups
|
|
653
|
+
WHERE serial_id = ?
|
|
654
|
+
ORDER BY group_id
|
|
655
|
+
`,[e],r=>y(r,"group_id"))}}});var $r,ag=d(()=>{"use strict";x();Eo();$r=class{#e;constructor(e){this.#e=e}async save(e){let r=Yn({language:e.language??null,prompt:e.prompt}),n=new Date().toISOString();return await this.#e.run(`
|
|
656
|
+
INSERT OR IGNORE INTO graph_build_parameters (
|
|
657
|
+
hash, prompt, language, created_at
|
|
658
|
+
)
|
|
659
|
+
VALUES (?, ?, ?, ?)
|
|
660
|
+
`,[r,e.prompt,e.language??null,n]),await this.getByHash(r)}async getByHash(e){return await this.#e.queryOne(`
|
|
661
|
+
SELECT hash, prompt, language, created_at
|
|
662
|
+
FROM graph_build_parameters
|
|
663
|
+
WHERE hash = ?
|
|
664
|
+
`,[e],r=>{let n=fe(r,"language");return{createdAt:k(r,"created_at"),hash:k(r,"hash"),...n===void 0?{}:{language:n},prompt:k(r,"prompt")}})}async deleteUnreferenced(){await this.#e.run(`
|
|
665
|
+
DELETE FROM graph_build_parameters
|
|
666
|
+
WHERE hash NOT IN (
|
|
667
|
+
SELECT topology_parameter_hash
|
|
668
|
+
FROM serial_states
|
|
669
|
+
WHERE topology_parameter_hash IS NOT NULL
|
|
670
|
+
UNION
|
|
671
|
+
SELECT knowledge_graph_parameter_hash
|
|
672
|
+
FROM serial_states
|
|
673
|
+
WHERE knowledge_graph_parameter_hash IS NOT NULL
|
|
674
|
+
)
|
|
675
|
+
`)}}});var Kr,og=d(()=>{"use strict";x();tr();Kr=class{#e;constructor(e){this.#e=e}async save(e){await this.#e.transaction(async()=>{await this.#t(e)})}async#t(e){await this.#e.run(`
|
|
676
|
+
INSERT OR REPLACE INTO mention_links (
|
|
677
|
+
id,
|
|
678
|
+
source_mention_id,
|
|
679
|
+
target_mention_id,
|
|
680
|
+
predicate,
|
|
681
|
+
confidence,
|
|
682
|
+
note
|
|
683
|
+
)
|
|
684
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
685
|
+
`,[e.id,e.sourceMentionId,e.targetMentionId,e.predicate,e.confidence??null,e.note??null]),await this.#e.run(`
|
|
686
|
+
DELETE FROM mention_link_evidence_sentences
|
|
687
|
+
WHERE link_id = ?
|
|
688
|
+
`,[e.id]);for(let[r,n]of e.evidenceSentenceIds)await this.#e.run(`
|
|
689
|
+
INSERT INTO mention_link_evidence_sentences (
|
|
690
|
+
link_id,
|
|
691
|
+
chapter_id,
|
|
692
|
+
sentence_index
|
|
693
|
+
)
|
|
694
|
+
VALUES (?, ?, ?)
|
|
695
|
+
`,[e.id,r,n])}async saveMany(e){await this.#e.transaction(async()=>{for(let r of e)await this.#t(r)})}async getById(e){let r=await this.#e.queryOne(`
|
|
696
|
+
SELECT
|
|
697
|
+
id,
|
|
698
|
+
source_mention_id,
|
|
699
|
+
target_mention_id,
|
|
700
|
+
predicate,
|
|
701
|
+
confidence,
|
|
702
|
+
note
|
|
703
|
+
FROM mention_links
|
|
704
|
+
WHERE id = ?
|
|
705
|
+
`,[e],xi);return r===void 0?void 0:await this.#n(r)}async listAll(){let e=await this.#e.queryAll(`
|
|
706
|
+
SELECT
|
|
707
|
+
id,
|
|
708
|
+
source_mention_id,
|
|
709
|
+
target_mention_id,
|
|
710
|
+
predicate,
|
|
711
|
+
confidence,
|
|
712
|
+
note
|
|
713
|
+
FROM mention_links
|
|
714
|
+
ORDER BY id
|
|
715
|
+
`,[],xi);return await this.#r(e)}async countByTriple(e){return await this.#e.queryOne(`
|
|
716
|
+
SELECT count(*) AS count
|
|
717
|
+
FROM mention_links
|
|
718
|
+
INNER JOIN mentions AS source_mentions
|
|
719
|
+
ON source_mentions.id = mention_links.source_mention_id
|
|
720
|
+
INNER JOIN mentions AS target_mentions
|
|
721
|
+
ON target_mentions.id = mention_links.target_mention_id
|
|
722
|
+
WHERE source_mentions.qid = ?
|
|
723
|
+
AND mention_links.predicate = ?
|
|
724
|
+
AND target_mentions.qid = ?
|
|
725
|
+
${e.chapterId===void 0?"":"AND source_mentions.chapter_id = ?"}
|
|
726
|
+
`,[e.subjectQid,e.predicate,e.objectQid,...e.chapterId===void 0?[]:[e.chapterId]],r=>y(r,"count"))??0}async listByTriple(e){let r=e.order==="desc"?"DESC":"ASC",n=e.limit===void 0?e.offset===void 0?"":"LIMIT -1":"LIMIT ?",i=await this.#e.queryAll(`
|
|
727
|
+
SELECT
|
|
728
|
+
mention_links.id AS id,
|
|
729
|
+
mention_links.source_mention_id AS source_mention_id,
|
|
730
|
+
mention_links.target_mention_id AS target_mention_id,
|
|
731
|
+
mention_links.predicate AS predicate,
|
|
732
|
+
mention_links.confidence AS confidence,
|
|
733
|
+
mention_links.note AS note
|
|
734
|
+
FROM mention_links
|
|
735
|
+
INNER JOIN mentions AS source_mentions
|
|
736
|
+
ON source_mentions.id = mention_links.source_mention_id
|
|
737
|
+
INNER JOIN mentions AS target_mentions
|
|
738
|
+
ON target_mentions.id = mention_links.target_mention_id
|
|
739
|
+
INNER JOIN serials AS source_serials
|
|
740
|
+
ON source_serials.id = source_mentions.chapter_id
|
|
741
|
+
WHERE source_mentions.qid = ?
|
|
742
|
+
AND mention_links.predicate = ?
|
|
743
|
+
AND target_mentions.qid = ?
|
|
744
|
+
${e.chapterId===void 0?"":"AND source_mentions.chapter_id = ?"}
|
|
745
|
+
ORDER BY
|
|
746
|
+
source_serials.document_order ${r},
|
|
747
|
+
source_mentions.chapter_id ${r},
|
|
748
|
+
source_mentions.sentence_index ${r},
|
|
749
|
+
mention_links.id ${r}
|
|
750
|
+
${n}
|
|
751
|
+
${e.offset===void 0?"":"OFFSET ?"}
|
|
752
|
+
`,[e.subjectQid,e.predicate,e.objectQid,...e.chapterId===void 0?[]:[e.chapterId],...e.limit===void 0?[]:[e.limit],...e.offset===void 0?[]:[e.offset]],xi);return await this.#r(i)}async listByChapter(e){let r=await this.#e.queryAll(`
|
|
753
|
+
SELECT
|
|
754
|
+
mention_links.id AS id,
|
|
755
|
+
mention_links.source_mention_id AS source_mention_id,
|
|
756
|
+
mention_links.target_mention_id AS target_mention_id,
|
|
757
|
+
mention_links.predicate AS predicate,
|
|
758
|
+
mention_links.confidence AS confidence,
|
|
759
|
+
mention_links.note AS note
|
|
760
|
+
FROM mention_links
|
|
761
|
+
INNER JOIN mentions AS source_mentions
|
|
762
|
+
ON source_mentions.id = mention_links.source_mention_id
|
|
763
|
+
INNER JOIN mentions AS target_mentions
|
|
764
|
+
ON target_mentions.id = mention_links.target_mention_id
|
|
765
|
+
WHERE source_mentions.chapter_id = ?
|
|
766
|
+
OR target_mentions.chapter_id = ?
|
|
767
|
+
ORDER BY mention_links.id
|
|
768
|
+
`,[e,e],xi);return await this.#r(r)}async deleteByChapter(e){await this.#e.transaction(async()=>{await this.#e.run(`
|
|
769
|
+
DELETE FROM mention_link_evidence_sentences
|
|
770
|
+
WHERE link_id IN (
|
|
771
|
+
SELECT mention_links.id
|
|
772
|
+
FROM mention_links
|
|
773
|
+
INNER JOIN mentions AS source_mentions
|
|
774
|
+
ON source_mentions.id = mention_links.source_mention_id
|
|
775
|
+
INNER JOIN mentions AS target_mentions
|
|
776
|
+
ON target_mentions.id = mention_links.target_mention_id
|
|
777
|
+
WHERE source_mentions.chapter_id = ?
|
|
778
|
+
OR target_mentions.chapter_id = ?
|
|
779
|
+
)
|
|
780
|
+
`,[e,e]),await this.#e.run(`
|
|
781
|
+
DELETE FROM mention_links
|
|
782
|
+
WHERE source_mention_id IN (
|
|
783
|
+
SELECT id
|
|
784
|
+
FROM mentions
|
|
785
|
+
WHERE chapter_id = ?
|
|
786
|
+
)
|
|
787
|
+
OR target_mention_id IN (
|
|
788
|
+
SELECT id
|
|
789
|
+
FROM mentions
|
|
790
|
+
WHERE chapter_id = ?
|
|
791
|
+
)
|
|
792
|
+
`,[e,e])})}async#r(e){if(e.length===0)return[];let r=new Map,n=[...new Set(e.map(i=>i.id))];for(let i of Vy(n,zy)){let a=i.map(()=>"?").join(", "),o=await this.#e.queryAll(`
|
|
793
|
+
SELECT link_id, chapter_id, sentence_index
|
|
794
|
+
FROM mention_link_evidence_sentences
|
|
795
|
+
WHERE link_id IN (${a})
|
|
796
|
+
ORDER BY link_id, chapter_id, sentence_index
|
|
797
|
+
`,i,s=>({linkId:k(s,"link_id"),sentenceId:[y(s,"chapter_id"),y(s,"sentence_index")]}));for(let s of o){let c=r.get(s.linkId)??[];c.push(s.sentenceId),r.set(s.linkId,c)}}return e.map(i=>({...i,evidenceSentenceIds:r.get(i.id)??[]}))}async#n(e){let r=await this.#e.queryAll(`
|
|
798
|
+
SELECT chapter_id, sentence_index
|
|
799
|
+
FROM mention_link_evidence_sentences
|
|
800
|
+
WHERE link_id = ?
|
|
801
|
+
ORDER BY chapter_id, sentence_index
|
|
802
|
+
`,[e.id],n=>[y(n,"chapter_id"),y(n,"sentence_index")]);return{...e,evidenceSentenceIds:r}}}});var Jr,sg=d(()=>{"use strict";x();tr();Jr=class{#e;constructor(e){this.#e=e}async save(e){await this.#e.run(`
|
|
803
|
+
INSERT OR REPLACE INTO mentions (
|
|
804
|
+
id,
|
|
805
|
+
chapter_id,
|
|
806
|
+
sentence_index,
|
|
807
|
+
range_start,
|
|
808
|
+
range_end,
|
|
809
|
+
surface,
|
|
810
|
+
qid,
|
|
811
|
+
confidence,
|
|
812
|
+
note
|
|
813
|
+
)
|
|
814
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
815
|
+
`,[e.id,e.chapterId,e.sentenceIndex??null,e.rangeStart,e.rangeEnd,e.surface,e.qid,e.confidence??null,e.note??null])}async saveMany(e){await this.#e.transaction(async()=>{for(let r of e)await this.save(r)})}async getById(e){return await this.#e.queryOne(`
|
|
816
|
+
SELECT
|
|
817
|
+
id,
|
|
818
|
+
chapter_id,
|
|
819
|
+
sentence_index,
|
|
820
|
+
range_start,
|
|
821
|
+
range_end,
|
|
822
|
+
surface,
|
|
823
|
+
qid,
|
|
824
|
+
confidence,
|
|
825
|
+
note
|
|
826
|
+
FROM mentions
|
|
827
|
+
WHERE id = ?
|
|
828
|
+
`,[e],er)}async listAll(){return await this.#e.queryAll(`
|
|
829
|
+
SELECT
|
|
830
|
+
id,
|
|
831
|
+
chapter_id,
|
|
832
|
+
sentence_index,
|
|
833
|
+
range_start,
|
|
834
|
+
range_end,
|
|
835
|
+
surface,
|
|
836
|
+
qid,
|
|
837
|
+
confidence,
|
|
838
|
+
note
|
|
839
|
+
FROM mentions
|
|
840
|
+
ORDER BY chapter_id, sentence_index, range_start, range_end, id
|
|
841
|
+
`,void 0,er)}async countByQid(e,r={}){return await this.#e.queryOne(`
|
|
842
|
+
SELECT count(*) AS count
|
|
843
|
+
FROM mentions
|
|
844
|
+
WHERE qid = ?
|
|
845
|
+
${r.chapterId===void 0?"":"AND chapter_id = ?"}
|
|
846
|
+
`,r.chapterId===void 0?[e]:[e,r.chapterId],n=>y(n,"count"))??0}async listByQid(e,r={}){let n=r.order==="desc"?"DESC":"ASC",i=r.limit===void 0?r.offset===void 0?"":"LIMIT -1":"LIMIT ?";return await this.#e.queryAll(`
|
|
847
|
+
SELECT
|
|
848
|
+
mentions.id AS id,
|
|
849
|
+
mentions.chapter_id AS chapter_id,
|
|
850
|
+
mentions.sentence_index AS sentence_index,
|
|
851
|
+
mentions.range_start AS range_start,
|
|
852
|
+
mentions.range_end AS range_end,
|
|
853
|
+
mentions.surface AS surface,
|
|
854
|
+
mentions.qid AS qid,
|
|
855
|
+
mentions.confidence AS confidence,
|
|
856
|
+
mentions.note AS note
|
|
857
|
+
FROM mentions
|
|
858
|
+
INNER JOIN serials
|
|
859
|
+
ON serials.id = mentions.chapter_id
|
|
860
|
+
WHERE mentions.qid = ?
|
|
861
|
+
${r.chapterId===void 0?"":"AND mentions.chapter_id = ?"}
|
|
862
|
+
ORDER BY
|
|
863
|
+
serials.document_order ${n},
|
|
864
|
+
mentions.chapter_id ${n},
|
|
865
|
+
mentions.sentence_index ${n},
|
|
866
|
+
mentions.range_start ${n},
|
|
867
|
+
mentions.range_end ${n},
|
|
868
|
+
mentions.id ${n}
|
|
869
|
+
${i}
|
|
870
|
+
${r.offset===void 0?"":"OFFSET ?"}
|
|
871
|
+
`,[e,...r.chapterId===void 0?[]:[r.chapterId],...r.limit===void 0?[]:[r.limit],...r.offset===void 0?[]:[r.offset]],er)}async listLabelsByQid(e,r={}){return await this.#e.queryAll(`
|
|
872
|
+
SELECT surface
|
|
873
|
+
FROM mentions
|
|
874
|
+
WHERE qid = ?
|
|
875
|
+
${r.chapterId===void 0?"":"AND chapter_id = ?"}
|
|
876
|
+
GROUP BY surface
|
|
877
|
+
ORDER BY count(*) DESC, surface
|
|
878
|
+
`,r.chapterId===void 0?[e]:[e,r.chapterId],n=>k(n,"surface"))}async listBySurfaces(e){let r=[...new Set(e.map(n=>n.trim()))].filter(n=>n!=="");return r.length===0?[]:await this.#e.queryAll(`
|
|
879
|
+
SELECT
|
|
880
|
+
id,
|
|
881
|
+
chapter_id,
|
|
882
|
+
sentence_index,
|
|
883
|
+
range_start,
|
|
884
|
+
range_end,
|
|
885
|
+
surface,
|
|
886
|
+
qid,
|
|
887
|
+
confidence,
|
|
888
|
+
note
|
|
889
|
+
FROM mentions
|
|
890
|
+
WHERE surface IN (${r.map(()=>"?").join(", ")})
|
|
891
|
+
ORDER BY chapter_id, sentence_index, range_start, range_end, id
|
|
892
|
+
`,r,er)}async listBySurfaceTerms(e){let r=[...new Set(e.map(i=>i.trim().toLowerCase()))].filter(i=>i!=="");if(r.length===0)return[];let n=r.map(()=>"lower(surface) LIKE ? ESCAPE '\\'").join(" OR ");return await this.#e.queryAll(`
|
|
893
|
+
SELECT
|
|
894
|
+
id,
|
|
895
|
+
chapter_id,
|
|
896
|
+
sentence_index,
|
|
897
|
+
range_start,
|
|
898
|
+
range_end,
|
|
899
|
+
surface,
|
|
900
|
+
qid,
|
|
901
|
+
confidence,
|
|
902
|
+
note
|
|
903
|
+
FROM mentions
|
|
904
|
+
WHERE ${n}
|
|
905
|
+
ORDER BY chapter_id, sentence_index, range_start, range_end, id
|
|
906
|
+
`,r.map(i=>`%${eg(i)}%`),er)}async listByChapter(e){return await this.#e.queryAll(`
|
|
907
|
+
SELECT
|
|
908
|
+
id,
|
|
909
|
+
chapter_id,
|
|
910
|
+
sentence_index,
|
|
911
|
+
range_start,
|
|
912
|
+
range_end,
|
|
913
|
+
surface,
|
|
914
|
+
qid,
|
|
915
|
+
confidence,
|
|
916
|
+
note
|
|
917
|
+
FROM mentions
|
|
918
|
+
WHERE chapter_id = ?
|
|
919
|
+
ORDER BY sentence_index, range_start, range_end, id
|
|
920
|
+
`,[e],er)}async deleteByChapter(e){await this.#e.run(`
|
|
921
|
+
DELETE FROM mentions
|
|
922
|
+
WHERE chapter_id = ?
|
|
923
|
+
`,[e])}}});var zr,cg=d(()=>{"use strict";x();tr();zr=class{#e;constructor(e){this.#e=e}async getMap(e){let r=await this.#e.queryAll(`
|
|
924
|
+
SELECT key, value_json
|
|
925
|
+
FROM object_metadata
|
|
926
|
+
WHERE object_path = ?
|
|
927
|
+
ORDER BY key
|
|
928
|
+
`,[e],i=>({key:k(i,"key"),value:Zy(k(i,"value_json"))})),n={};for(let i of r)n[i.key]=i.value;return n}async replaceMap(e,r){await this.#e.transaction(async()=>{await this.clear(e.objectPath);for(let[n,i]of Object.entries(r))await this.put(e,n,i)})}async put(e,r,n){await this.#e.run(`
|
|
929
|
+
INSERT INTO object_metadata (
|
|
930
|
+
object_kind,
|
|
931
|
+
object_path,
|
|
932
|
+
key,
|
|
933
|
+
value_json,
|
|
934
|
+
updated_at,
|
|
935
|
+
chapter_id,
|
|
936
|
+
chunk_id,
|
|
937
|
+
entity_qid,
|
|
938
|
+
triple_subject_qid,
|
|
939
|
+
triple_predicate,
|
|
940
|
+
triple_object_qid
|
|
941
|
+
)
|
|
942
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
943
|
+
ON CONFLICT(object_path, key) DO UPDATE SET
|
|
944
|
+
object_kind = excluded.object_kind,
|
|
945
|
+
value_json = excluded.value_json,
|
|
946
|
+
updated_at = excluded.updated_at,
|
|
947
|
+
chapter_id = excluded.chapter_id,
|
|
948
|
+
chunk_id = excluded.chunk_id,
|
|
949
|
+
entity_qid = excluded.entity_qid,
|
|
950
|
+
triple_subject_qid = excluded.triple_subject_qid,
|
|
951
|
+
triple_predicate = excluded.triple_predicate,
|
|
952
|
+
triple_object_qid = excluded.triple_object_qid
|
|
953
|
+
`,[e.kind,e.objectPath,r,JSON.stringify(n),new Date().toISOString(),e.chapterId??null,e.chunkId??null,e.entityQid??null,e.tripleSubjectQid??null,e.triplePredicate??null,e.tripleObjectQid??null])}async deleteKey(e,r){await this.#e.run(`
|
|
954
|
+
DELETE FROM object_metadata
|
|
955
|
+
WHERE object_path = ?
|
|
956
|
+
AND key = ?
|
|
957
|
+
`,[e,r])}async clear(e){await this.#e.run(`
|
|
958
|
+
DELETE FROM object_metadata
|
|
959
|
+
WHERE object_path = ?
|
|
960
|
+
`,[e])}async deleteChapterSubtree(e){await this.#e.run(`
|
|
961
|
+
DELETE FROM object_metadata
|
|
962
|
+
WHERE chapter_id = ?
|
|
963
|
+
`,[e])}async deleteDeletedChunks(){await this.#e.run(`
|
|
964
|
+
DELETE FROM object_metadata
|
|
965
|
+
WHERE chunk_id IS NOT NULL
|
|
966
|
+
AND NOT EXISTS (
|
|
967
|
+
SELECT 1
|
|
968
|
+
FROM chunks
|
|
969
|
+
WHERE chunks.id = object_metadata.chunk_id
|
|
970
|
+
)
|
|
971
|
+
`)}async deleteDeletedEntitiesAndTriples(){await this.#e.run(`
|
|
972
|
+
DELETE FROM object_metadata
|
|
973
|
+
WHERE entity_qid IS NOT NULL
|
|
974
|
+
AND NOT EXISTS (
|
|
975
|
+
SELECT 1
|
|
976
|
+
FROM mentions
|
|
977
|
+
WHERE mentions.qid = object_metadata.entity_qid
|
|
978
|
+
)
|
|
979
|
+
`),await this.#e.run(`
|
|
980
|
+
DELETE FROM object_metadata
|
|
981
|
+
WHERE triple_subject_qid IS NOT NULL
|
|
982
|
+
AND NOT EXISTS (
|
|
983
|
+
SELECT 1
|
|
984
|
+
FROM mention_links
|
|
985
|
+
JOIN mentions AS source_mentions
|
|
986
|
+
ON source_mentions.id = mention_links.source_mention_id
|
|
987
|
+
JOIN mentions AS target_mentions
|
|
988
|
+
ON target_mentions.id = mention_links.target_mention_id
|
|
989
|
+
WHERE source_mentions.qid = object_metadata.triple_subject_qid
|
|
990
|
+
AND mention_links.predicate = object_metadata.triple_predicate
|
|
991
|
+
AND target_mentions.qid = object_metadata.triple_object_qid
|
|
992
|
+
)
|
|
993
|
+
`)}}});var Qr,dg=d(()=>{"use strict";x();tr();Qr=class{#e;constructor(e){this.#e=e}async countAll(){return await this.#e.queryOne(`
|
|
994
|
+
SELECT COUNT(*) AS count
|
|
995
|
+
FROM reading_edges
|
|
996
|
+
`,void 0,e=>y(e,"count"))??0}async save(e){await this.#e.run(`
|
|
997
|
+
INSERT OR REPLACE INTO reading_edges (from_id, to_id, strength, weight)
|
|
998
|
+
VALUES (?, ?, ?, ?)
|
|
999
|
+
`,[e.fromId,e.toId,e.strength??null,e.weight])}async listAll(){return await this.#e.queryAll(`
|
|
1000
|
+
SELECT from_id, to_id, strength, weight
|
|
1001
|
+
FROM reading_edges
|
|
1002
|
+
ORDER BY from_id, to_id
|
|
1003
|
+
`,void 0,e=>Ko(e))}async listBySerial(e){return await this.#e.queryAll(`
|
|
1004
|
+
SELECT
|
|
1005
|
+
reading_edges.from_id AS from_id,
|
|
1006
|
+
reading_edges.to_id AS to_id,
|
|
1007
|
+
reading_edges.strength AS strength,
|
|
1008
|
+
reading_edges.weight AS weight
|
|
1009
|
+
FROM reading_edges
|
|
1010
|
+
INNER JOIN chunks AS from_chunks
|
|
1011
|
+
ON from_chunks.id = reading_edges.from_id
|
|
1012
|
+
INNER JOIN chunks AS to_chunks
|
|
1013
|
+
ON to_chunks.id = reading_edges.to_id
|
|
1014
|
+
WHERE from_chunks.serial_id = ? AND to_chunks.serial_id = ?
|
|
1015
|
+
ORDER BY reading_edges.from_id, reading_edges.to_id
|
|
1016
|
+
`,[e,e],r=>Ko(r))}async listIncoming(e){return await this.#t("to_id",e)}async listOutgoing(e){return await this.#t("from_id",e)}async#t(e,r){return await this.#e.queryAll(`
|
|
1017
|
+
SELECT from_id, to_id, strength, weight
|
|
1018
|
+
FROM reading_edges
|
|
1019
|
+
WHERE ${e} = ?
|
|
1020
|
+
ORDER BY from_id, to_id
|
|
1021
|
+
`,[r],n=>Ko(n))}}});function QL(t){let e=fe(t,"topology_parameter_hash"),r=fe(t,"knowledge_graph_parameter_hash");return{documentOrder:y(t,"document_order"),id:y(t,"id"),knowledgeGraphReady:y(t,"knowledge_graph_ready")!==0,...r===void 0?{}:{knowledgeGraphParameterHash:r},revision:y(t,"revision"),topologyReady:y(t,"topology_ready")!==0,...e===void 0?{}:{topologyParameterHash:e}}}var Xr,ug=d(()=>{"use strict";x();tr();Xr=class{#e;constructor(e){this.#e=e}async create(){return await this.#e.transaction(async()=>{await this.#e.run(`
|
|
1022
|
+
INSERT INTO serials DEFAULT VALUES
|
|
1023
|
+
`);let e=await this.#e.getLastInsertRowId();return await this.#e.run(`
|
|
1024
|
+
INSERT INTO serial_states (
|
|
1025
|
+
serial_id, revision, topology_ready, knowledge_graph_ready
|
|
1026
|
+
)
|
|
1027
|
+
VALUES (?, ?, ?, ?)
|
|
1028
|
+
`,[e,0,0,0]),e})}async createWithId(e){try{await this.#e.transaction(async()=>{await this.#e.run(`
|
|
1029
|
+
INSERT INTO serials (id)
|
|
1030
|
+
VALUES (?)
|
|
1031
|
+
`,[e]),await this.#e.run(`
|
|
1032
|
+
INSERT INTO serial_states (
|
|
1033
|
+
serial_id, revision, topology_ready, knowledge_graph_ready
|
|
1034
|
+
)
|
|
1035
|
+
VALUES (?, ?, ?, ?)
|
|
1036
|
+
`,[e,0,0,0])})}catch(r){throw Xy(r)?new Error(`Serial ${e} already exists`):r}}async ensure(e){await this.#e.transaction(async()=>{await this.#e.run(`
|
|
1037
|
+
INSERT OR IGNORE INTO serials (id)
|
|
1038
|
+
VALUES (?)
|
|
1039
|
+
`,[e]),await this.#e.run(`
|
|
1040
|
+
INSERT OR IGNORE INTO serial_states (
|
|
1041
|
+
serial_id, revision, topology_ready, knowledge_graph_ready
|
|
1042
|
+
)
|
|
1043
|
+
VALUES (?, ?, ?, ?)
|
|
1044
|
+
`,[e,0,0,0])})}async getById(e){return await this.#e.queryOne(`
|
|
1045
|
+
SELECT
|
|
1046
|
+
serials.id AS id,
|
|
1047
|
+
serials.document_order AS document_order,
|
|
1048
|
+
COALESCE(serial_states.revision, 0) AS revision,
|
|
1049
|
+
COALESCE(serial_states.topology_ready, 0) AS topology_ready,
|
|
1050
|
+
serial_states.topology_parameter_hash AS topology_parameter_hash,
|
|
1051
|
+
COALESCE(serial_states.knowledge_graph_ready, 0) AS knowledge_graph_ready,
|
|
1052
|
+
serial_states.knowledge_graph_parameter_hash AS knowledge_graph_parameter_hash
|
|
1053
|
+
FROM serials
|
|
1054
|
+
LEFT JOIN serial_states
|
|
1055
|
+
ON serial_states.serial_id = serials.id
|
|
1056
|
+
WHERE serials.id = ?
|
|
1057
|
+
`,[e],QL)}async getRevision(e){return await this.#e.queryOne(`
|
|
1058
|
+
SELECT COALESCE(revision, 0) AS revision
|
|
1059
|
+
FROM serial_states
|
|
1060
|
+
WHERE serial_id = ?
|
|
1061
|
+
`,[e],r=>y(r,"revision"))??0}async getRevisions(e){let r=[...new Set(e)].sort(Qy);if(r.length===0)return new Map;let n=await this.#e.queryAll(`
|
|
1062
|
+
SELECT serial_id, COALESCE(revision, 0) AS revision
|
|
1063
|
+
FROM serial_states
|
|
1064
|
+
WHERE serial_id IN (${r.map(()=>"?").join(", ")})
|
|
1065
|
+
ORDER BY serial_id
|
|
1066
|
+
`,r,i=>[y(i,"serial_id"),y(i,"revision")]);return new Map(n)}async bumpRevision(e){await this.ensure(e),await this.#e.transaction(async()=>{await this.#e.run(`
|
|
1067
|
+
UPDATE serial_states
|
|
1068
|
+
SET revision = revision + 1
|
|
1069
|
+
WHERE serial_id = ?
|
|
1070
|
+
`,[e]),await this.bumpChaptersRevision()})}async bumpChaptersRevision(){await this.#e.run(`
|
|
1071
|
+
INSERT INTO archive_revisions (key, value)
|
|
1072
|
+
VALUES ('chapters', 1)
|
|
1073
|
+
ON CONFLICT(key) DO UPDATE SET value = value + 1
|
|
1074
|
+
`)}async getChaptersRevision(){return await this.#e.queryOne(`
|
|
1075
|
+
SELECT value
|
|
1076
|
+
FROM archive_revisions
|
|
1077
|
+
WHERE key = 'chapters'
|
|
1078
|
+
`,void 0,e=>y(e,"value"))??0}async getMaxId(){return await this.#e.queryOne(`
|
|
1079
|
+
SELECT COALESCE(MAX(id), 0) AS max_id
|
|
1080
|
+
FROM serials
|
|
1081
|
+
`,void 0,r=>y(r,"max_id"))??0}async setTopologyReady(e,r=!0,n){if(await this.ensure(e),r){await this.#e.run(`
|
|
1082
|
+
UPDATE serial_states
|
|
1083
|
+
SET
|
|
1084
|
+
topology_ready = ?,
|
|
1085
|
+
topology_parameter_hash = COALESCE(?, topology_parameter_hash)
|
|
1086
|
+
WHERE serial_id = ?
|
|
1087
|
+
`,[1,n??null,e]);return}await this.#e.run(`
|
|
1088
|
+
UPDATE serial_states
|
|
1089
|
+
SET
|
|
1090
|
+
topology_ready = ?,
|
|
1091
|
+
topology_parameter_hash = NULL
|
|
1092
|
+
WHERE serial_id = ?
|
|
1093
|
+
`,[0,e])}async setKnowledgeGraphReady(e,r=!0,n){if(await this.ensure(e),r){await this.#e.run(`
|
|
1094
|
+
UPDATE serial_states
|
|
1095
|
+
SET
|
|
1096
|
+
knowledge_graph_ready = ?,
|
|
1097
|
+
knowledge_graph_parameter_hash = COALESCE(?, knowledge_graph_parameter_hash)
|
|
1098
|
+
WHERE serial_id = ?
|
|
1099
|
+
`,[1,n??null,e]);return}await this.#e.run(`
|
|
1100
|
+
UPDATE serial_states
|
|
1101
|
+
SET
|
|
1102
|
+
knowledge_graph_ready = ?,
|
|
1103
|
+
knowledge_graph_parameter_hash = NULL
|
|
1104
|
+
WHERE serial_id = ?
|
|
1105
|
+
`,[0,e])}async listIds(){return await this.#e.queryAll(`
|
|
1106
|
+
SELECT id
|
|
1107
|
+
FROM serials
|
|
1108
|
+
ORDER BY id
|
|
1109
|
+
`,void 0,e=>y(e,"id"))}async listDocumentOrders(){let e=await this.#e.queryAll(`
|
|
1110
|
+
SELECT id, document_order
|
|
1111
|
+
FROM serials
|
|
1112
|
+
ORDER BY id
|
|
1113
|
+
`,void 0,r=>[y(r,"id"),y(r,"document_order")]);return new Map(e)}async setDocumentOrders(e){await this.#e.transaction(async()=>{for(let r of e)await this.#e.run(`
|
|
1114
|
+
INSERT OR IGNORE INTO serials (id)
|
|
1115
|
+
VALUES (?)
|
|
1116
|
+
`,[r.serialId]),await this.#e.run(`
|
|
1117
|
+
INSERT OR IGNORE INTO serial_states (
|
|
1118
|
+
serial_id, revision, topology_ready, knowledge_graph_ready
|
|
1119
|
+
)
|
|
1120
|
+
VALUES (?, ?, ?, ?)
|
|
1121
|
+
`,[r.serialId,0,0,0]),await this.#e.run(`
|
|
1122
|
+
UPDATE serials
|
|
1123
|
+
SET document_order = ?
|
|
1124
|
+
WHERE id = ?
|
|
1125
|
+
`,[r.documentOrder,r.serialId])})}}});var Vr,lg=d(()=>{"use strict";x();Vr=class{#e;constructor(e){this.#e=e}async save(e){await this.#e.run(`
|
|
1126
|
+
INSERT OR REPLACE INTO snake_chunks (snake_id, chunk_id, position)
|
|
1127
|
+
VALUES (?, ?, ?)
|
|
1128
|
+
`,[e.snakeId,e.chunkId,e.position])}async listChunkIds(e){return await this.#e.queryAll(`
|
|
1129
|
+
SELECT chunk_id
|
|
1130
|
+
FROM snake_chunks
|
|
1131
|
+
WHERE snake_id = ?
|
|
1132
|
+
ORDER BY position
|
|
1133
|
+
`,[e],r=>y(r,"chunk_id"))}async listBySnake(e){return await this.#e.queryAll(`
|
|
1134
|
+
SELECT snake_id, chunk_id, position
|
|
1135
|
+
FROM snake_chunks
|
|
1136
|
+
WHERE snake_id = ?
|
|
1137
|
+
ORDER BY position
|
|
1138
|
+
`,[e],r=>({chunkId:y(r,"chunk_id"),position:y(r,"position"),snakeId:y(r,"snake_id")}))}}});var Yr,mg=d(()=>{"use strict";x();Yr=class{#e;constructor(e){this.#e=e}async create(e){return await this.#e.run(`
|
|
1139
|
+
INSERT INTO snakes (
|
|
1140
|
+
serial_id,
|
|
1141
|
+
group_id,
|
|
1142
|
+
local_snake_id,
|
|
1143
|
+
size,
|
|
1144
|
+
first_label,
|
|
1145
|
+
last_label,
|
|
1146
|
+
wordsCount,
|
|
1147
|
+
weight
|
|
1148
|
+
)
|
|
1149
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
1150
|
+
`,[e.serialId,e.groupId,e.localSnakeId,e.size,e.firstLabel,e.lastLabel,e.wordsCount??0,e.weight??0]),await this.#e.getLastInsertRowId()}async getById(e){return await this.#e.queryOne(`
|
|
1151
|
+
SELECT
|
|
1152
|
+
id,
|
|
1153
|
+
serial_id,
|
|
1154
|
+
group_id,
|
|
1155
|
+
local_snake_id,
|
|
1156
|
+
size,
|
|
1157
|
+
first_label,
|
|
1158
|
+
last_label,
|
|
1159
|
+
wordsCount,
|
|
1160
|
+
weight
|
|
1161
|
+
FROM snakes
|
|
1162
|
+
WHERE id = ?
|
|
1163
|
+
`,[e],r=>({serialId:y(r,"serial_id"),firstLabel:k(r,"first_label"),groupId:y(r,"group_id"),id:y(r,"id"),lastLabel:k(r,"last_label"),localSnakeId:y(r,"local_snake_id"),size:y(r,"size"),wordsCount:y(r,"wordsCount"),weight:y(r,"weight")}))}async listIdsByGroup(e,r){return await this.#e.queryAll(`
|
|
1164
|
+
SELECT id
|
|
1165
|
+
FROM snakes
|
|
1166
|
+
WHERE serial_id = ? AND group_id = ?
|
|
1167
|
+
ORDER BY id
|
|
1168
|
+
`,[e,r],n=>y(n,"id"))}async listBySerial(e){return await this.#e.queryAll(`
|
|
1169
|
+
SELECT
|
|
1170
|
+
id,
|
|
1171
|
+
serial_id,
|
|
1172
|
+
group_id,
|
|
1173
|
+
local_snake_id,
|
|
1174
|
+
size,
|
|
1175
|
+
first_label,
|
|
1176
|
+
last_label,
|
|
1177
|
+
wordsCount,
|
|
1178
|
+
weight
|
|
1179
|
+
FROM snakes
|
|
1180
|
+
WHERE serial_id = ?
|
|
1181
|
+
ORDER BY group_id, id
|
|
1182
|
+
`,[e],r=>({serialId:y(r,"serial_id"),firstLabel:k(r,"first_label"),groupId:y(r,"group_id"),id:y(r,"id"),lastLabel:k(r,"last_label"),localSnakeId:y(r,"local_snake_id"),size:y(r,"size"),wordsCount:y(r,"wordsCount"),weight:y(r,"weight")}))}}});var Zr,pg=d(()=>{"use strict";x();Zr=class{#e;constructor(e){this.#e=e}async save(e){await this.#e.run(`
|
|
1183
|
+
INSERT OR REPLACE INTO snake_edges (from_snake_id, to_snake_id, weight)
|
|
1184
|
+
VALUES (?, ?, ?)
|
|
1185
|
+
`,[e.fromSnakeId,e.toSnakeId,e.weight])}async listIncoming(e){return await this.#t("to_snake_id",e)}async listOutgoing(e){return await this.#t("from_snake_id",e)}async listWithin(e){if(e.length===0)return[];let r=e.map(()=>"?").join(", ");return await this.#e.queryAll(`
|
|
1186
|
+
SELECT from_snake_id, to_snake_id, weight
|
|
1187
|
+
FROM snake_edges
|
|
1188
|
+
WHERE from_snake_id IN (${r})
|
|
1189
|
+
AND to_snake_id IN (${r})
|
|
1190
|
+
ORDER BY from_snake_id, to_snake_id
|
|
1191
|
+
`,[...e,...e],n=>({fromSnakeId:y(n,"from_snake_id"),toSnakeId:y(n,"to_snake_id"),weight:y(n,"weight")}))}async listBySerial(e){return await this.#e.queryAll(`
|
|
1192
|
+
SELECT
|
|
1193
|
+
snake_edges.from_snake_id AS from_snake_id,
|
|
1194
|
+
snake_edges.to_snake_id AS to_snake_id,
|
|
1195
|
+
snake_edges.weight AS weight
|
|
1196
|
+
FROM snake_edges
|
|
1197
|
+
INNER JOIN snakes AS from_snakes
|
|
1198
|
+
ON from_snakes.id = snake_edges.from_snake_id
|
|
1199
|
+
INNER JOIN snakes AS to_snakes
|
|
1200
|
+
ON to_snakes.id = snake_edges.to_snake_id
|
|
1201
|
+
WHERE from_snakes.serial_id = ? AND to_snakes.serial_id = ?
|
|
1202
|
+
ORDER BY snake_edges.from_snake_id, snake_edges.to_snake_id
|
|
1203
|
+
`,[e,e],r=>({fromSnakeId:y(r,"from_snake_id"),toSnakeId:y(r,"to_snake_id"),weight:y(r,"weight")}))}async#t(e,r){return await this.#e.queryAll(`
|
|
1204
|
+
SELECT from_snake_id, to_snake_id, weight
|
|
1205
|
+
FROM snake_edges
|
|
1206
|
+
WHERE ${e} = ?
|
|
1207
|
+
ORDER BY from_snake_id, to_snake_id
|
|
1208
|
+
`,[r],n=>({fromSnakeId:y(n,"from_snake_id"),toSnakeId:y(n,"to_snake_id"),weight:y(n,"weight")}))}}});var hg=d(()=>{"use strict";lg();mg();pg()});var Mu=d(()=>{"use strict";ng();ig();ag();og();sg();cg();dg();ug();hg()});function fg(t,e){return e-t}var Ri,Wu=d(()=>{"use strict";Ri=class{#e=[];#t;#r=new Set;#n=!1;#i=!1;constructor(e){this.#t=e}complete(){this.#a(),this.#n=!0}async dispose(){this.#i||(this.#i=!0,!this.#n&&await this.#t.rollbackContext(this))}ownSerial(e){this.#a(),this.#r.add(e)}async run(e){return this.#a(),await this.#t.runWithContext(this,e)}listCreatedFilePaths(){return[...this.#e]}listOwnedSerialIds(){return[...this.#r]}registerCreatedFile(e){this.#e.push(e)}#a(){if(this.#i)throw new Error("DocumentContext is already disposed")}}});import{mkdir as XL,readFile as VL,readdir as YL,rm as ZL,unlink as eA,writeFile as yg}from"fs/promises";import{join as gg}from"path";var Fu,ju=d(()=>{"use strict";T();Fu={close:()=>Promise.resolve(),deleteFile:async t=>{await eA(t)},deleteTree:async t=>{await ZL(t,{force:!0,recursive:!0})},ensureDirectory:async t=>{await XL(t,{recursive:!0})},initializeDatabaseSchema:()=>!0,markDatabaseDirty:()=>{},markSearchIndexDatabaseDirty:()=>{},openDatabaseReadonly:()=>!1,listFiles:async t=>(await YL(t,{withFileTypes:!0})).filter(e=>e.isFile()).map(e=>e.name),readFile:async t=>{try{return await VL(t)}catch(e){if(w(e)&&e.code==="ENOENT")return;throw e}},resolveDatabasePath:t=>Promise.resolve(gg(t,"database.db")),resolveSearchIndexDatabasePath:t=>Promise.resolve(gg(t,"fts.db")),writeFile:async(t,e,r)=>{typeof e=="string"?await yg(t,e,{encoding:"utf8",flag:r.overwrite===!0?"w":"wx"}):await yg(t,e,{flag:r.overwrite===!0?"w":"wx"})}}});import{join as Jo}from"path";async function Gu(t){let e=await tA(t.fileStore,t.path);if(e!==void 0)return t.parse(JSON.parse(e))}async function bg(t,e){return await t.readFile(e)}async function zo(t){await wg({context:t.context,content:`${JSON.stringify(t.value,null,2)}
|
|
1209
|
+
`,fileStore:t.fileStore,options:t.options??{},path:t.path})}async function Sg(t){await wg({context:t.context,content:t.content,fileStore:t.fileStore,options:{overwrite:!1},path:t.path})}function Bu(t){return Jo(Qo(t),"data.bin")}function Qo(t){return Jo(t,"cover")}function Uu(t){return Jo(Qo(t),"info.json")}function Xo(t){return Jo(t,"toc.json")}async function tA(t,e){let r=await t.readFile(e);return r===void 0?void 0:Buffer.from(r).toString("utf8")}async function wg(t){try{await t.fileStore.writeFile(t.path,t.content,t.options)}catch(e){throw w(e)&&e.code==="EEXIST"?new Error(`File already exists: ${t.path}`):e}t.options.overwrite!==!0&&t.context?.registerCreatedFile(t.path)}var Eg=d(()=>{"use strict";T()});import{stat as rA}from"fs/promises";import{join as nA}from"path";async function Hu(t){let e=t.fileStore.resolveSearchIndexDatabasePath===void 0?nA(t.documentPath,"fts.db"):await t.fileStore.resolveSearchIndexDatabasePath(t.documentPath),r=!t.readonly&&await iA(e),n=await P.open(e,r?Nu:"",{onWrite:()=>{t.fileStore.markSearchIndexDatabaseDirty?.()},readonly:t.readonly});t.readonly||await aA(n);try{return await t.operation(n)}finally{await n.close()}}async function iA(t){let e=await rA(t).catch(r=>{if(!(w(r)&&r.code==="ENOENT"))throw r});return e===void 0||e.size===0}async function aA(t){await kg(t,"text_sentence_records","archive_id","INTEGER NOT NULL DEFAULT 0"),await sA(t,"text_sentence_records",["archive_id","kind","chapter_id","sentence_index"])||await oA(t),await kg(t,"search_object_properties_records","archive_id","INTEGER NOT NULL DEFAULT 0"),await t.run(`
|
|
1210
|
+
CREATE TABLE IF NOT EXISTS index_dirty_chapters (
|
|
1211
|
+
archive_id INTEGER NOT NULL,
|
|
1212
|
+
chapter_id INTEGER NOT NULL,
|
|
1213
|
+
updated_at INTEGER NOT NULL,
|
|
1214
|
+
PRIMARY KEY (archive_id, chapter_id)
|
|
1215
|
+
)
|
|
1216
|
+
`)}async function oA(t){await t.transaction(async()=>{await t.run(`
|
|
1217
|
+
CREATE TABLE text_sentence_records_next (
|
|
1218
|
+
${Ou}
|
|
1219
|
+
)
|
|
1220
|
+
`),await t.run(`
|
|
1221
|
+
INSERT INTO text_sentence_records_next (
|
|
1222
|
+
id,
|
|
1223
|
+
archive_id,
|
|
1224
|
+
kind,
|
|
1225
|
+
chapter_id,
|
|
1226
|
+
sentence_index,
|
|
1227
|
+
words_count,
|
|
1228
|
+
byte_offset,
|
|
1229
|
+
byte_length
|
|
1230
|
+
)
|
|
1231
|
+
SELECT
|
|
1232
|
+
id,
|
|
1233
|
+
archive_id,
|
|
1234
|
+
kind,
|
|
1235
|
+
chapter_id,
|
|
1236
|
+
sentence_index,
|
|
1237
|
+
words_count,
|
|
1238
|
+
byte_offset,
|
|
1239
|
+
byte_length
|
|
1240
|
+
FROM text_sentence_records
|
|
1241
|
+
`),await t.run("DROP TABLE text_sentence_records"),await t.run(`
|
|
1242
|
+
ALTER TABLE text_sentence_records_next
|
|
1243
|
+
RENAME TO text_sentence_records
|
|
1244
|
+
`),await t.run(`
|
|
1245
|
+
CREATE INDEX IF NOT EXISTS idx_text_sentence_records_chapter
|
|
1246
|
+
ON text_sentence_records(archive_id, kind, chapter_id, sentence_index)
|
|
1247
|
+
`)})}async function sA(t,e,r){let n=await t.queryAll(`PRAGMA index_list(${e})`,void 0,i=>({name:String(i.name),unique:Number(i.unique)===1}));for(let i of n){if(!i.unique)continue;let o=(await t.queryAll(`PRAGMA index_info(${i.name})`,void 0,s=>({name:String(s.name),seqno:Number(s.seqno)}))).sort((s,c)=>s.seqno-c.seqno).map(s=>s.name);if(o.length===r.length&&o.every((s,c)=>s===r[c]))return!0}return!1}async function kg(t,e,r,n){(await t.queryAll(`PRAGMA table_info(${e})`,void 0,a=>String(a.name))).includes(r)||await t.run(`ALTER TABLE ${e} ADD COLUMN ${r} ${n}`)}var Ig=d(()=>{"use strict";T();x();Ii()});async function xg(t){await dA(t.context.listOwnedSerialIds(),t.deleteSerialResources),await cA(t.fileStore,t.context.listCreatedFilePaths())}async function Rg(t){await t.metadata.deleteChapterSubtree(t.serialId),await qu({database:t.database,metadata:t.metadata,serialId:t.serialId}),await t.database.transaction(async()=>{await t.database.run(`
|
|
1248
|
+
DELETE FROM serial_states
|
|
1249
|
+
WHERE serial_id = ?
|
|
1250
|
+
`,[t.serialId]),await t.database.run(`
|
|
1251
|
+
DELETE FROM serials
|
|
1252
|
+
WHERE id = ?
|
|
1253
|
+
`,[t.serialId])}),await t.textStreams.getSerial(t.serialId).delete(),await t.deleteSummary(t.serialId),await t.serials.bumpChaptersRevision(),await t.graphBuildParameters.deleteUnreferenced()}async function qu(t){await t.database.transaction(async()=>{await t.database.run(`
|
|
1254
|
+
DELETE FROM mention_link_evidence_sentences
|
|
1255
|
+
WHERE link_id IN (
|
|
1256
|
+
SELECT mention_links.id
|
|
1257
|
+
FROM mention_links
|
|
1258
|
+
INNER JOIN mentions AS source_mentions
|
|
1259
|
+
ON source_mentions.id = mention_links.source_mention_id
|
|
1260
|
+
INNER JOIN mentions AS target_mentions
|
|
1261
|
+
ON target_mentions.id = mention_links.target_mention_id
|
|
1262
|
+
WHERE source_mentions.chapter_id = ?
|
|
1263
|
+
OR target_mentions.chapter_id = ?
|
|
1264
|
+
)
|
|
1265
|
+
`,[t.serialId,t.serialId]),await t.database.run(`
|
|
1266
|
+
DELETE FROM mention_links
|
|
1267
|
+
WHERE source_mention_id IN (
|
|
1268
|
+
SELECT id
|
|
1269
|
+
FROM mentions
|
|
1270
|
+
WHERE chapter_id = ?
|
|
1271
|
+
) OR target_mention_id IN (
|
|
1272
|
+
SELECT id
|
|
1273
|
+
FROM mentions
|
|
1274
|
+
WHERE chapter_id = ?
|
|
1275
|
+
)
|
|
1276
|
+
`,[t.serialId,t.serialId]),await t.database.run(`
|
|
1277
|
+
DELETE FROM mentions
|
|
1278
|
+
WHERE chapter_id = ?
|
|
1279
|
+
`,[t.serialId]),await t.database.run(`
|
|
1280
|
+
DELETE FROM snake_edges
|
|
1281
|
+
WHERE from_snake_id IN (
|
|
1282
|
+
SELECT id
|
|
1283
|
+
FROM snakes
|
|
1284
|
+
WHERE serial_id = ?
|
|
1285
|
+
) OR to_snake_id IN (
|
|
1286
|
+
SELECT id
|
|
1287
|
+
FROM snakes
|
|
1288
|
+
WHERE serial_id = ?
|
|
1289
|
+
)
|
|
1290
|
+
`,[t.serialId,t.serialId]),await t.database.run(`
|
|
1291
|
+
DELETE FROM snake_chunks
|
|
1292
|
+
WHERE snake_id IN (
|
|
1293
|
+
SELECT id
|
|
1294
|
+
FROM snakes
|
|
1295
|
+
WHERE serial_id = ?
|
|
1296
|
+
)
|
|
1297
|
+
`,[t.serialId]),await t.database.run(`
|
|
1298
|
+
DELETE FROM snakes
|
|
1299
|
+
WHERE serial_id = ?
|
|
1300
|
+
`,[t.serialId]),await t.database.run(`
|
|
1301
|
+
DELETE FROM sentence_groups
|
|
1302
|
+
WHERE serial_id = ?
|
|
1303
|
+
`,[t.serialId]),await t.database.run(`
|
|
1304
|
+
DELETE FROM reading_edges
|
|
1305
|
+
WHERE from_id IN (
|
|
1306
|
+
SELECT id
|
|
1307
|
+
FROM chunks
|
|
1308
|
+
WHERE serial_id = ?
|
|
1309
|
+
) OR to_id IN (
|
|
1310
|
+
SELECT id
|
|
1311
|
+
FROM chunks
|
|
1312
|
+
WHERE serial_id = ?
|
|
1313
|
+
)
|
|
1314
|
+
`,[t.serialId,t.serialId]),await t.database.run(`
|
|
1315
|
+
DELETE FROM chunk_sentences
|
|
1316
|
+
WHERE serial_id = ?
|
|
1317
|
+
`,[t.serialId]),await t.database.run(`
|
|
1318
|
+
DELETE FROM chunks
|
|
1319
|
+
WHERE serial_id = ?
|
|
1320
|
+
`,[t.serialId]),await t.metadata.deleteDeletedChunks(),await t.metadata.deleteDeletedEntitiesAndTriples()})}async function cA(t,e){for(let r of[...e].reverse())try{await t.deleteFile(r)}catch(n){if(w(n)&&n.code==="ENOENT")continue;throw n}}async function dA(t,e){for(let r of[...t].sort(fg))await e(r)}var vg=d(()=>{"use strict";T();Wu()});function $u(t){let e=[];for(let r of t)r.serialId!==void 0&&e.push(r.serialId),e.push(...$u(r.children));return e}var Tg=d(()=>{"use strict"});import{AsyncLocalStorage as uA}from"async_hooks";import{join as lA,resolve as mA}from"path";import{z as Ku}from"zod";function _g(t){let e={items:t.items.map(Pg),version:t.version};return $o(e.items),e}function Pg(t){return{children:t.children.map(Pg),...t.key===void 0?{}:{key:t.key},...t.serialId===void 0?{}:{serialId:t.serialId},...t.title===void 0?{}:{title:t.title}}}var pA,ye,Lg=d(()=>{"use strict";li();Bo();ki();x();ou();Ii();Mu();tt();Wu();ju();Eg();Ig();vg();Tg();pA=Ku.object({mediaType:Ku.string().min(1),path:Ku.string()}),ye=class t{chunks;fragmentGroups;graphBuildParameters;readingEdges;mentionLinks;mentions;metadata;path;serials;snakeChunks;snakeEdges;snakes;#e;#t;#r;#n=new uA;constructor(e,r,n,i=Fu){this.#e=e,this.#t=i,this.#r=r,this.chunks=new Hr(e),this.fragmentGroups=new qr(e),this.graphBuildParameters=new $r(e),this.readingEdges=new Qr(e),this.mentionLinks=new Kr(e),this.mentions=new Jr(e),this.metadata=new zr(e),this.path=n,this.serials=new Xr(e),this.snakeChunks=new Vr(e),this.snakeEdges=new Zr(e),this.snakes=new Yr(e)}static async open(e,r={}){let n=mA(e),i=r.fileStore??Fu;try{let a=await i.resolveDatabasePath(n);await i.ensureDirectory(n);let o=i.initializeDatabaseSchema(),s=await P.open(a,o?Au:"",{onWrite:()=>{i.markDatabaseDirty?.()},readonly:i.openDatabaseReadonly()});o&&await Jy(s);let c=new di(n,s,{deleteTree:async l=>{await i.deleteTree(l)},ensureDirectory:async l=>{await i.ensureDirectory(l)},listFiles:async l=>await i.listFiles(l),readFile:async l=>await i.readFile(l),writeFile:async(l,m,p)=>{await i.writeFile(l,m,p)}});return await c.ensureCreated(),new t(s,c,n,i)}catch(a){throw await i.close(),a}}static async openSession(e,r){let n=await t.open(e);try{return await n.openSession(async()=>await r(n))}finally{await n.release()}}getSerialFragments(e){return this.#r.getSerial(e)}getSummaryFragments(e){return this.#r.getSummarySerial(e)}createContext(){return new Ri(this)}async createSerial(){let e=await this.serials.create();return this.#n.getStore()?.ownSerial(e),e}async clearSerialGraph(e){await this.deleteSummary(e),await qu({database:this.#e,metadata:this.metadata,serialId:e}),await this.serials.setTopologyReady(e,!1),await this.serials.setKnowledgeGraphReady(e,!1),await this.serials.bumpRevision(e),await this.graphBuildParameters.deleteUnreferenced()}async clearSerialSource(e){await this.clearSerialGraph(e),await this.#r.getSerial(e).delete(),await this.serials.bumpRevision(e)}async deleteSerial(e){await this.#a(e)}async deleteSummary(e){await this.#r.getSummarySerial(e).delete()}async getSentence(e){return await this.#r.getSentence(e)}async openSession(e){if(this.#n.getStore()!==void 0)return await e(this);let n=new Ri(this);try{let i=await this.#e.transaction(async()=>await n.run(async()=>await e(this)));return n.complete(),i}finally{await n.dispose()}}async readDatabase(e){return await e(this.#e)}async readSearchIndexDatabase(e){return await Hu({documentPath:this.path,fileStore:this.#t,operation:e,readonly:!0})}async writeSearchIndexDatabase(e){return await Hu({documentPath:this.path,fileStore:this.#t,operation:e,readonly:!1})}async deleteSearchIndexDatabase(){await this.#t.deleteFile(lA(this.path,"fts.db"))}async peekNextSerialId(){return await this.serials.getMaxId()+1}async readBookMeta(){let e=await this.metadata.getMap("");return Object.keys(e).length===0?void 0:mu.parse(e)}async readCover(){let e=await Gu({fileStore:this.#t,parse:n=>pA.parse(n),path:Uu(this.path)});if(e===void 0)return;let r=await bg(this.#t,Bu(this.path));if(r===void 0)throw new Error("Cover data is missing");return{data:r,mediaType:e.mediaType,path:e.path}}async readSummary(e){return await this.#r.getSummarySerial(e).readText()}async readToc(){return await Gu({fileStore:this.#t,parse:e=>Go.parse(e),path:Xo(this.path)})}async writeBookMeta(e){if(Object.keys(await this.metadata.getMap("")).length>0)throw new Error("Archive metadata already exists.");await this.replaceBookMeta(e)}async replaceBookMeta(e){await this.metadata.replaceMap({kind:1,objectPath:""},{...e})}async writeCover(e){await this.#t.ensureDirectory(Qo(this.path)),await zo({context:this.#n.getStore(),fileStore:this.#t,path:Uu(this.path),value:{mediaType:e.mediaType,path:e.path}}),await Sg({content:e.data,context:this.#n.getStore(),fileStore:this.#t,path:Bu(this.path)})}async writeSummary(e,r){await this.deleteSummary(e),await this.#r.getSummarySerial(e).writeTextStream(r),await this.serials.bumpRevision(e)}async writeToc(e){let r=_g(e);await zo({context:this.#n.getStore(),fileStore:this.#t,path:Xo(this.path),value:r}),await this.#i(r),await this.serials.bumpChaptersRevision()}async replaceToc(e){let r=_g(e);await zo({context:this.#n.getStore(),fileStore:this.#t,options:{overwrite:!0},path:Xo(this.path),value:r}),await this.#i(r),await this.serials.bumpChaptersRevision()}async flush(){await this.#e.flush()}async release(){try{await this.flush(),await this.#e.close()}finally{await this.#t.close()}}async close(){await this.release()}async runWithContext(e,r){return await this.#n.run(e,r)}async rollbackContext(e){await xg({context:e,deleteSerialResources:async r=>{await this.#a(r)},fileStore:this.#t})}async#i(e){await this.serials.setDocumentOrders($u(e.items).map((r,n)=>({documentOrder:n,serialId:r})))}async#a(e){await Rg({database:this.#e,deleteSummary:async r=>{await this.deleteSummary(r)},graphBuildParameters:this.graphBuildParameters,metadata:this.metadata,serialId:e,serials:this.serials,textStreams:this.#r})}}});var Ag=d(()=>{"use strict"});var Ju=d(()=>{"use strict";Lg();ju();Ag()});function vi(t,e){let r=new Vt(e);return new Proxy(t,{get(n,i,a){if(i==="getSerialFragments")return s=>r.getSerial(s);if(i==="getSummaryFragments")return s=>r.getSummarySerial(s);if(i==="getSentence")return async s=>await r.getSentence(s);let o=Reflect.get(n,i,a);return typeof o!="function"?o:o.bind(n)}})}var Og=d(()=>{"use strict";lu()});var L=d(()=>{"use strict";x();Xf();ou();lu();Ju();Og();Ii();Mu();tt()});var zu,Qu=d(()=>{"use strict";zu=new Set(["registry","arc","path","tree","meta","index","chapter","chunk","entity","triple"])});import{isAbsolute as oQ,relative as sQ,resolve as Ng}from"path";import{homedir as hA}from"os";function Ti(t){let e=nr(t);if(e.protocol!=="wikg")throw new Error(Vo(t));let r=gA(e.path,e.fragment);if(r!==void 0)return r;let n=e.path,i=n.findIndex(s=>s.endsWith(rr));if(i<0)return{objectUri:en(n.join("/"),Xu(e.fragment))};let a=bA(n.slice(0,i+1)),o=n.slice(i+1).join("/");if(a==="")throw new Error(`Invalid Wiki Graph archive URI: ${t}`);return{archivePath:wA(a),...o===""?{}:{objectUri:en(o,Xu(e.fragment))}}}function nr(t){let e=t.indexOf("://");if(e<=0)throw new Error(Vo(t));let r=t.slice(0,e),n=t.slice(e+3),i=n.indexOf("#"),a=i<0?n:n.slice(0,i),o=i<0?void 0:n.slice(i+1);if(o?.includes("#")===!0)throw new Error(`Invalid Wiki Graph URI fragment: ${t}`);return{protocol:r,path:fA(a,t),...yA(o,t)}}function fA(t,e){let r=t.replace(/\/+$/u,"");if(r==="")return[];if(r.startsWith("/")){let i=r.slice(1);if(i==="")return["/"];let a=i.split("/");return Dg(a,e),["/",...a]}let n=r.split("/");return Dg(n,e),n}function Dg(t,e){if(t.includes(""))throw new Error(`Invalid Wiki Graph URI path: empty path segment in ${e}`)}function yA(t,e){if(t===void 0)return{};if(t==="")throw new Error(`Invalid Wiki Graph URI fragment: ${e}`);let r=/^(?<begin>[0-9]+)\.\.(?<end>[0-9]+)$/u.exec(t);if(r?.groups!==void 0){let n=Number(r.groups.begin),i=Number(r.groups.end);return{fragment:{begin:n,end:i}}}if(/^[0-9]+$/u.test(t))return{fragment:Number(t)};throw new Error(`Invalid Wiki Graph URI fragment: ${e}`)}function gA(t,e){if(t[0]!=="lib")return;let r=t[1]==="arc"?1:t[2]==="arc"?2:-1;if(r<0)return;let n=r===2?t[1]:void 0,i=t[r+1];if(i===void 0||i.endsWith(rr)||SA(i))return;let a=`${ge}lib/${n===void 0?"":`${n}/`}arc/${i}`,o=t.slice(r+2).join("/");return{archivePath:a,...o===""?{}:{objectUri:en(o,Xu(e))}}}function bA(t){return t[0]==="/"?`/${t.slice(1).join("/")}`:t.join("/")}function Xu(t){if(t!==void 0)return typeof t=="number"?String(t):`${t.begin}..${t.end}`}function SA(t){return zu.has(t)}function wA(t){return t.startsWith("~/")?Ng(hA(),t.slice(2)):Ng(t)}function tn(t,e){let r=t.replace(/\\/gu,"/");return e===void 0||e===ge?`${ge}${r}`:`${ge}${r}/${EA(e)}`}function _i(t,e){return tn(t,en(`chapter/${e}`))}function en(t,e){let r=t.replace(/^\/+/u,"").replace(/\/+$/u,"");return`${ge}${r}${e===void 0?"":`#${e}`}`}function Vo(t){let e=t.endsWith(rr)&&t.startsWith("/")?`${ge}${t}`:"wikg:///absolute/path/book.wikg";return[`Expected a Wiki Graph URI with a .wikg archive locator: ${t}`,`Example: ${e}`,"See: wg help uri"].join(`
|
|
1321
|
+
`)}function EA(t){let e=kA(t);if(e===void 0)throw new Error(`Expected a Wiki Graph object URI: ${t}`);return t.slice(e.length).replace(/^\/+/u,"")}function kA(t){if(t.startsWith(ge))return ge}var ge,rr,vt=d(()=>{"use strict";Qu();ge="wikg://",rr=".wikg"});import{randomUUID as mQ}from"crypto";async function Mg(t){let e=await vA(t.databasePath);try{return await RA(e,t),await e.queryOne(`
|
|
1322
|
+
SELECT 1 AS active
|
|
1323
|
+
FROM state_locks
|
|
1324
|
+
WHERE scope = ? AND resource_key = ?
|
|
1325
|
+
LIMIT 1
|
|
1326
|
+
`,[t.scope,t.resourceKey],()=>!0)===!0}finally{await e.close()}}async function RA(t,e){let r=[],n=[];e.scope!==void 0&&(r.push("scope = ?"),n.push(e.scope)),e.resourceKey!==void 0&&(r.push("resource_key = ?"),n.push(e.resourceKey));let i=await t.queryAll(`
|
|
1327
|
+
SELECT scope, resource_key, mode, owner_id, owner_pid, heartbeat_at
|
|
1328
|
+
FROM state_locks
|
|
1329
|
+
${r.length===0?"":`WHERE ${r.join(" AND ")}`}
|
|
1330
|
+
`,n,a=>({lock:TA(a),resourceKey:k(a,"resource_key"),scope:k(a,"scope")}));for(let{lock:a,resourceKey:o,scope:s}of i)CA(a,e.staleMs)&&await t.run(`
|
|
1331
|
+
DELETE FROM state_locks
|
|
1332
|
+
WHERE scope = ?
|
|
1333
|
+
AND resource_key = ?
|
|
1334
|
+
AND owner_id = ?
|
|
1335
|
+
AND heartbeat_at = ?
|
|
1336
|
+
`,[s,o,a.ownerId,a.heartbeatAt])}async function vA(t){return await A(t,IA)}function TA(t){return{heartbeatAt:y(t,"heartbeat_at"),mode:_A(k(t,"mode")),ownerId:k(t,"owner_id"),ownerPid:y(t,"owner_pid")}}function _A(t){return t==="read"||t==="write"?t:"write"}function CA(t,e=xA){return Date.now()-t.heartbeatAt>e&&!PA(t.ownerPid)}function PA(t){try{return process.kill(t,0),!0}catch(e){return!(w(e)&&e.code==="ESRCH")}}var IA,xA,Wg=d(()=>{"use strict";x();L();T();IA=`
|
|
1337
|
+
CREATE TABLE IF NOT EXISTS state_locks (
|
|
1338
|
+
scope TEXT NOT NULL,
|
|
1339
|
+
resource_key TEXT NOT NULL,
|
|
1340
|
+
mode TEXT NOT NULL,
|
|
1341
|
+
owner_id TEXT NOT NULL,
|
|
1342
|
+
owner_pid INTEGER NOT NULL,
|
|
1343
|
+
heartbeat_at INTEGER NOT NULL,
|
|
1344
|
+
created_at INTEGER NOT NULL,
|
|
1345
|
+
PRIMARY KEY (scope, resource_key, owner_id)
|
|
1346
|
+
);
|
|
1347
|
+
|
|
1348
|
+
CREATE INDEX IF NOT EXISTS idx_state_locks_resource
|
|
1349
|
+
ON state_locks(scope, resource_key);
|
|
1350
|
+
`,xA=300*1e3});async function jg(t){return await Mg({databasePath:oe(),resourceKey:OA(t),scope:AA,staleMs:Fg})||await NA(t)}function OA(t){return String(t)}async function NA(t){let e=await DA();try{let r=await e.queryOne("SELECT owner_pid, heartbeat_at FROM library_locks WHERE library_id = ?",[t],n=>({heartbeatAt:y(n,"heartbeat_at"),ownerPid:y(n,"owner_pid")}));return r!==void 0&&WA(r)}finally{await e.close()}}async function DA(){let t=await A(oe(),LA);return await MA(t),t}async function MA(t){new Set(await t.queryAll("PRAGMA table_info(library_locks)",void 0,r=>k(r,"name"))).has("heartbeat_at")||await t.run("ALTER TABLE library_locks ADD COLUMN heartbeat_at INTEGER NOT NULL DEFAULT 0")}function WA(t){return Date.now()-t.heartbeatAt<=Fg&&FA(t.ownerPid)}function FA(t){try{return process.kill(t,0),!0}catch(e){return!(w(e)&&e.code==="ESRCH")}}var LA,AA,Fg,Ci=d(()=>{"use strict";x();L();se();Wg();T();LA=`
|
|
1351
|
+
CREATE TABLE IF NOT EXISTS library_locks (
|
|
1352
|
+
library_id INTEGER PRIMARY KEY,
|
|
1353
|
+
mode TEXT NOT NULL,
|
|
1354
|
+
owner_id TEXT NOT NULL,
|
|
1355
|
+
owner_pid INTEGER NOT NULL,
|
|
1356
|
+
heartbeat_at INTEGER NOT NULL,
|
|
1357
|
+
created_at INTEGER NOT NULL
|
|
1358
|
+
);
|
|
1359
|
+
`,AA="library",Fg=300*1e3});import{randomBytes as vQ}from"crypto";import{constants as _Q}from"fs";import{access as PQ,mkdir as LQ,stat as AQ}from"fs/promises";import{join as NQ,resolve as DQ}from"path";var rn=d(()=>{"use strict";x();L();se();vt();T();Ci();Qu()});var Q,de,Yu,Gg,Tt=d(()=>{"use strict";Q=".wikg-mutation-token",de="manifest.json",Yu="fts.db",Gg=[/^\.wikg-mutation-token$/u,/^manifest\.json$/u,/^database\.db$/u,/^fts\.db$/u,/^toc\.json$/u,/^cover\/(?:data\.bin|info\.json)$/u,/^texts\/(?:source|summary)\/\d+\.txt$/u]});import{posix as jA,resolve as GA,sep as Bg}from"path";function X(t){let e=t.replaceAll("\\","/").trim(),r=e.startsWith("/")?e.slice(1):e;return jA.normalize(r).replace(/^(\.\/)+/u,"").replace(/^\/+/u,"")}function ot(t){return Gg.some(e=>e.test(t))}function Ug(t,e,r){let n=GA(t),i=n.endsWith(Bg)?n:`${n}${Bg}`;if(!(e===n||e.startsWith(i)))throw new Error(`Invalid archive entry path: ${r}`)}function Hg(t){return[...t].sort((e,r)=>$g(e.archivePath,r.archivePath))}function qg(t){return[...t].sort($g)}function $g(t,e){return t===Q?e===Q?0:-1:e===Q?1:t.localeCompare(e)}var ir=d(()=>{"use strict";Tt()});import{randomBytes as BA}from"crypto";import{z as Zu}from"zod";function nn(t){let e;try{e=JSON.parse(t)}catch{throw new Error(`Invalid WIKG manifest: ${de}.`)}let r=HA.safeParse(e);if(!r.success)throw new Error(`Unsupported WIKG format version in ${de}.`);return{formatVersion:r.data.formatVersion,schemaVersion:r.data.schemaVersion??1}}function rl(){let t=BA(32).toString("base64url");return Buffer.from(`${Kg}
|
|
1360
|
+
${t}
|
|
1361
|
+
`,"utf8")}function Zo(t){let e=t.split(/\r?\n/u),r=e[0],n=e[1];if(r!==Kg||n===void 0||!UA.test(n))throw new Error(`Invalid WIKG mutation token: ${Q}.`);return n}var Yo,el,tl,Kg,UA,HA,an=d(()=>{"use strict";Tt();Yo=1,el=2,tl=`${JSON.stringify({formatVersion:Yo,schemaVersion:el})}
|
|
1362
|
+
`,Kg="wikg-mutation-token:v1",UA=/^[A-Za-z0-9_-]{43}$/u,HA=Zu.object({formatVersion:Zu.literal(Yo),schemaVersion:Zu.number().int().positive().optional()})});import{open as qA}from"fs/promises";import{inflateRaw as $A}from"zlib";import{open as KA}from"yauzl";async function _t(t){let e=await QA(t);try{let r=await JA(e);return await XA(t,r),{entries:r,zipFile:e}}catch(r){throw e.close(),r}}async function JA(t){return await new Promise((e,r)=>{let n=[];t.on("entry",i=>{if(i.fileName.endsWith("/")){t.readEntry();return}n.push(i),t.readEntry()}),t.once("end",()=>{e(n)}),t.once("error",i=>{r(i)}),t.readEntry()})}async function es(t,e){return(await zA(t,e)).toString("utf8")}async function zA(t,e){let r=await qA(t,"r");try{return await Ct(r,e)}finally{await r.close()}}async function Ct(t,e){let r=await YA(t,e);if(e.compressionMethod===0)return r;if(e.compressionMethod===8)return await ZA(r);throw new Error(`Unsupported ZIP compression method: ${e.fileName}`)}async function QA(t){return await new Promise((e,r)=>{KA(t,{autoClose:!1,lazyEntries:!0},(n,i)=>{if(n!==null||i===void 0){r(n??new Error(`Cannot open archive: ${t}`));return}e(i)})})}async function XA(t,e){await VA(t,e);let r=e.find(n=>X(n.fileName)===de);if(r===void 0)throw new Error(`Missing WIKG manifest: ${de}.`);nn(await es(t,r))}async function VA(t,e){if(X(e[0]?.fileName??"")!==Q)throw new Error(`Missing WIKG mutation token: ${Q}.`);Zo(await es(t,e[0]))}async function YA(t,e){let r=Buffer.alloc(30);if(await t.read(r,0,r.length,e.relativeOffsetOfLocalHeader),r.readUInt32LE(0)!==67324752)throw new Error(`Invalid ZIP local file header: ${e.fileName}`);let n=r.readUInt16LE(26),i=r.readUInt16LE(28),a=e.relativeOffsetOfLocalHeader+30+n+i,o=Buffer.alloc(e.compressedSize);return await t.read(o,0,o.length,a),o}async function ZA(t){return await new Promise((e,r)=>{$A(t,(n,i)=>{if(n!==null){r(n);return}e(i)})})}var Pi=d(()=>{"use strict";Tt();an();ir()});import{mkdir as eO,open as tO,writeFile as rO}from"fs/promises";import{dirname as nO,resolve as iO}from"path";async function Li(t,e){let{entries:r,zipFile:n}=await _t(t),i=await tO(t,"r");try{for(let a of r){let o=X(a.fileName);if(o==="")throw new Error(`Invalid archive entry path: ${a.fileName}`);if(!ot(o))continue;let s=iO(e,o);Ug(e,s,o),await eO(nO(s),{recursive:!0}),await rO(s,await Ct(i,a))}}finally{await i.close(),n.close()}}var Jg=d(()=>{"use strict";ir();Pi()});import{readdir as aO}from"fs/promises";import{join as zg,posix as oO,relative as sO,sep as cO}from"path";async function nl(t,e=t){let r=await aO(e,{withFileTypes:!0}),n=[];for(let i of[...r].sort(dO)){let a=zg(e,i.name);if(i.isDirectory()){n.push(...await nl(t,a));continue}i.isFile()&&n.push({absolutePath:a,archivePath:sO(t,a).split(cO).join(oO.sep)})}return n.filter(i=>ot(i.archivePath))}async function Qg(t){let e=await P.open(zg(t,"database.db"),"",{readonly:!0}).catch(()=>{});if(e===void 0)return!1;try{return await e.queryOne(`
|
|
1363
|
+
SELECT fts_embedded
|
|
1364
|
+
FROM archive_index_settings
|
|
1365
|
+
WHERE id = 1
|
|
1366
|
+
`,void 0,n=>Number(n.fts_embedded)!==0)??!1}catch{return!1}finally{await e.close()}}function Xg(t){return t.archivePath==="manifest.json"||t.archivePath===".wikg-mutation-token"?!1:t.archivePath!==Yu||t.includeSearchIndex}function dO(t,e){return t.name.localeCompare(e.name)}var Vg=d(()=>{"use strict";x();Tt();ir()});import{createWriteStream as uO}from"fs";import{mkdir as Zg,open as lO}from"fs/promises";import{dirname as eb}from"path";import{finished as Yg}from"stream/promises";import{ZipFile as tb}from"yazl";async function on(t,e){await Zg(eb(e),{recursive:!0});let r=new tb,n=await nl(t),i=await Qg(t),a=Hg([{archivePath:Q,content:rl()},{archivePath:de,content:Buffer.from(tl,"utf8")},...n.filter(o=>Xg({archivePath:o.archivePath,includeSearchIndex:i}))]);for(let o of a)"content"in o?r.addBuffer(o.content,o.archivePath,{compress:!1}):r.addFile(o.absolutePath,o.archivePath,{compress:!1});r.end(),await rb(r,e)}async function Ai(t,e,r,n={}){await Zg(eb(e),{recursive:!0});let{entries:i,zipFile:a}=await _t(t),o=new Map(r.map(l=>[X(l.entryPath),l])),s=new Set;for(let l of i){let m=X(l.fileName);m!==""&&ot(m)&&s.add(m)}for(let l of o.values()){let m=X(l.entryPath);m!==""&&ot(m)&&s.add(m)}s.add(Q),s.add(de);let c=new tb,u=await lO(t,"r");try{for(let l of qg(s)){let m=o.get(l);if(l===Q){if(n.preserveMutationToken===!0){let h=i.find(g=>X(g.fileName)===l);if(h!==void 0){c.addBuffer(await Ct(u,h),l,{compress:!1});continue}}c.addBuffer(rl(),l,{compress:!1});continue}if(l===de){c.addBuffer(Buffer.from(tl,"utf8"),l,{compress:!1});continue}if(m?.kind==="deleted")continue;if(m?.kind==="file"){c.addFile(m.workspacePath,l,{compress:!1});continue}let p=i.find(h=>X(h.fileName)===l);p!==void 0&&c.addBuffer(await Ct(u,p),l,{compress:!1})}}finally{await u.close(),a.close()}c.end(),await rb(c,e)}async function rb(t,e){let r=uO(e),n=Yg(r),i=Yg(t.outputStream);t.outputStream.pipe(r),await Promise.all([n,i])}var il=d(()=>{"use strict";Tt();Vg();an();ir();Pi()});import{createHash as mO,randomUUID as pO}from"crypto";import{stat as nb}from"fs/promises";import{resolve as hO}from"path";function sn(t){return mO("sha256").update(hO(t)).digest("hex")}async function ar(t){let e=await nb(t);return`${e.size}:${e.mtimeMs}`}function or(){return`${process.pid}-${pO()}`}async function ts(t){await new Promise(e=>{setTimeout(e,t)})}async function Pt(t){try{return await nb(t),!0}catch(e){if(w(e)&&e.code==="ENOENT")return!1;throw e}}var st=d(()=>{"use strict";T()});import{randomUUID as OX}from"crypto";import{mkdtemp as DX,rename as MX,rm as WX,stat as FX,writeFile as jX}from"fs/promises";import{tmpdir as BX}from"os";import{dirname as HX,join as qX,resolve as ib}from"path";async function ol(t){let e=await sl(t);if(e>al)throw new Error(`Unsupported Wiki Graph archive schema version: ${e}.`);if(e<al)throw new Error(`This Wiki Graph archive uses schema v${e} and must be upgraded before use.
|
|
1367
|
+
Run: wg maintenance upgrade ${t}`)}async function sl(t){let{entries:e,zipFile:r}=await _t(ib(t));try{let n=e.find(i=>X(i.fileName)===de);if(n===void 0)throw new Error(`Missing WIKG manifest: ${de}.`);return nn(await es(ib(t),n)).schemaVersion}finally{r.close()}}var al,rV,rs=d(()=>{"use strict";x();ki();Xt();se();Tt();an();ir();Pi();il();st();Bo();Xt();al=2,rV=300*1e3});import{open as fO,readFile as yO}from"fs/promises";import{join as gO}from"path";async function ns(t){let e=await ct.open(t);try{return e.listEntries()}finally{e.close()}}async function Oi(t,e){let r=await ct.open(t);try{return await r.readEntry(e)}finally{r.close()}}async function sr(t){let e=await ct.open(t);try{let r=await e.readEntry(Q);if(r===void 0)throw new Error(`Missing WIKG mutation token: ${Q}.`);return Zo(r.toString("utf8"))}finally{e.close()}}async function Ni(t){return nn(await yO(gO(t,de),"utf8")).formatVersion}var ct,ab=d(()=>{"use strict";Tt();an();ir();Pi();rs();ct=class t{#e;#t;#r;#n;#i;constructor(e,r,n){this.#n=e,this.#i=r,this.#e=new Map(n.map(i=>[X(i.fileName),i]).filter(([i])=>i!=="").filter(([i])=>ot(i))),this.#t=[...this.#e.keys()].sort((i,a)=>i.localeCompare(a))}static async open(e){await ol(e);let{entries:r,zipFile:n}=await _t(e);return new t(e,n,r)}close(){this.#i.close(),this.#r!==void 0&&(this.#r.then(async e=>{await e.close()}),this.#r=void 0)}listEntries(){return this.#t}async readEntry(e){let r=this.#e.get(X(e));if(r!==void 0)return await Ct(await this.#a(),r)}async#a(){return this.#r??=fO(this.#n,"r"),await this.#r}}});var Lt=d(()=>{"use strict";Jg();ab();an();il()});var hb=d(()=>{"use strict";vt()});import{mkdir as SO,mkdtemp as wO}from"fs/promises";import{join as fb}from"path";function cn(){return Wr()}function dl(t){let e=cn();return t===void 0?e:fb(e,t)}async function dt(t){let e=dl(t);return await SO(e,{recursive:!0}),await wO(fb(e,`${t}-`))}var ut=d(()=>{"use strict";se()});var lt,N,ul,Be=d(()=>{"use strict";lt="database.db",N="fts.db",ul=Symbol("WikgArchiveSession constructor token")});import{join as EO}from"path";async function V(t){let e=Date.now(),r=new Set;for(let n of["archive_owners","entry_locks","entry_sqlite_leases","archive_commit_locks"]){let i=await t.queryAll(`
|
|
1368
|
+
SELECT DISTINCT owner_pid
|
|
1369
|
+
FROM ${n}
|
|
1370
|
+
WHERE owner_pid IS NOT NULL
|
|
1371
|
+
AND heartbeat_at <= ?
|
|
1372
|
+
`,[e-6e4],a=>Ue(a,"owner_pid"));for(let a of i)xO(a)||r.add(a)}r.size!==0&&(await t.run(`
|
|
1373
|
+
DELETE FROM archive_owners
|
|
1374
|
+
WHERE owner_pid IN (${cr(r.size)})
|
|
1375
|
+
`,[...r]),await t.run(`
|
|
1376
|
+
DELETE FROM entry_locks
|
|
1377
|
+
WHERE owner_pid IN (${cr(r.size)})
|
|
1378
|
+
`,[...r]),await t.run(`
|
|
1379
|
+
DELETE FROM entry_sqlite_leases
|
|
1380
|
+
WHERE owner_pid IN (${cr(r.size)})
|
|
1381
|
+
`,[...r]),await t.run(`
|
|
1382
|
+
DELETE FROM archive_commit_locks
|
|
1383
|
+
WHERE owner_pid IN (${cr(r.size)})
|
|
1384
|
+
`,[...r]))}function cr(t){return Array.from({length:t},()=>"?").join(", ")}function xO(t){try{return process.kill(t,0),!0}catch(e){return!(e instanceof Error&&"code"in e&&e.code==="ESRCH")}}async function C(t){return await IO.use(async()=>{let e=await RO();try{return await t(e)}finally{await e.close()}})}async function RO(){let t=await A(EO(ml(),"staging.sqlite"),kO);return await vO(t),t}async function vO(t){let e=await t.queryAll("PRAGMA table_info(entry_overlays)",void 0,n=>ue(n,"name"));e.includes("archive_signature")||await t.run(`
|
|
1385
|
+
ALTER TABLE entry_overlays
|
|
1386
|
+
ADD COLUMN archive_signature TEXT
|
|
1387
|
+
`),e.includes("mutation_token")||await t.run(`
|
|
1388
|
+
ALTER TABLE entry_overlays
|
|
1389
|
+
ADD COLUMN mutation_token TEXT
|
|
1390
|
+
`),(await t.queryAll("PRAGMA table_info(entry_sqlite_leases)",void 0,n=>ue(n,"name"))).includes("mode")||await t.run(`
|
|
1391
|
+
ALTER TABLE entry_sqlite_leases
|
|
1392
|
+
ADD COLUMN mode TEXT NOT NULL DEFAULT 'read'
|
|
1393
|
+
`)}function ml(){return Pe()}function At(t){let e=ll(t,"workspace_path"),r=ll(t,"archive_signature"),n=ll(t,"mutation_token");return{archiveKey:ue(t,"archive_key"),archivePath:ue(t,"archive_path"),...r===void 0?{}:{archiveSignature:r},entryPath:ue(t,"entry_path"),kind:_O(t),...n===void 0?{}:{mutationToken:n},updatedAt:Ue(t,"updated_at"),...e===void 0?{}:{workspacePath:e}}}function yb(t){return{entryPath:ue(t,"entry_path"),mode:TO(t),ownerId:ue(t,"owner_id")}}function gb(t){return{ownerId:ue(t,"owner_id")}}function TO(t){let e=ue(t,"mode");if(e==="read"||e==="state"||e==="write")return e;throw new Error(`Unsupported entry lock mode: ${e}.`)}function _O(t){let e=ue(t,"kind");if(e==="deleted"||e==="file")return e;throw new Error(`Unsupported entry overlay kind: ${e}.`)}function ue(t,e){let r=t[e];if(typeof r!="string")throw new TypeError(`Expected ${e} to be a string`);return r}function Ue(t,e){let r=t[e];if(typeof r!="number")throw new TypeError(`Expected ${e} to be a number`);return r}function ll(t,e){let r=t[e];if(r!=null){if(typeof r!="string")throw new TypeError(`Expected ${e} to be a string`);return r}}var kO,IO,mt=d(()=>{"use strict";se();L();ri();Be();kO=`
|
|
1394
|
+
CREATE TABLE IF NOT EXISTS entry_overlays (
|
|
1395
|
+
archive_key TEXT NOT NULL,
|
|
1396
|
+
archive_path TEXT NOT NULL,
|
|
1397
|
+
entry_path TEXT NOT NULL,
|
|
1398
|
+
kind TEXT NOT NULL,
|
|
1399
|
+
workspace_path TEXT,
|
|
1400
|
+
archive_signature TEXT,
|
|
1401
|
+
mutation_token TEXT,
|
|
1402
|
+
updated_at INTEGER NOT NULL,
|
|
1403
|
+
PRIMARY KEY (archive_key, entry_path)
|
|
1404
|
+
);
|
|
1405
|
+
|
|
1406
|
+
CREATE TABLE IF NOT EXISTS entry_locks (
|
|
1407
|
+
archive_key TEXT NOT NULL,
|
|
1408
|
+
entry_path TEXT NOT NULL,
|
|
1409
|
+
mode TEXT NOT NULL,
|
|
1410
|
+
owner_id TEXT NOT NULL,
|
|
1411
|
+
owner_pid INTEGER NOT NULL,
|
|
1412
|
+
heartbeat_at INTEGER NOT NULL,
|
|
1413
|
+
created_at INTEGER NOT NULL,
|
|
1414
|
+
PRIMARY KEY (archive_key, entry_path, owner_id)
|
|
1415
|
+
);
|
|
1416
|
+
|
|
1417
|
+
CREATE TABLE IF NOT EXISTS archive_owners (
|
|
1418
|
+
archive_key TEXT NOT NULL,
|
|
1419
|
+
owner_id TEXT NOT NULL,
|
|
1420
|
+
owner_pid INTEGER NOT NULL,
|
|
1421
|
+
heartbeat_at INTEGER NOT NULL,
|
|
1422
|
+
created_at INTEGER NOT NULL,
|
|
1423
|
+
PRIMARY KEY (archive_key, owner_id)
|
|
1424
|
+
);
|
|
1425
|
+
|
|
1426
|
+
CREATE TABLE IF NOT EXISTS entry_sqlite_leases (
|
|
1427
|
+
archive_key TEXT NOT NULL,
|
|
1428
|
+
entry_path TEXT NOT NULL,
|
|
1429
|
+
mode TEXT NOT NULL DEFAULT 'read',
|
|
1430
|
+
owner_id TEXT NOT NULL,
|
|
1431
|
+
owner_pid INTEGER NOT NULL,
|
|
1432
|
+
heartbeat_at INTEGER NOT NULL,
|
|
1433
|
+
created_at INTEGER NOT NULL,
|
|
1434
|
+
PRIMARY KEY (archive_key, entry_path, owner_id)
|
|
1435
|
+
);
|
|
1436
|
+
|
|
1437
|
+
CREATE TABLE IF NOT EXISTS archive_commit_locks (
|
|
1438
|
+
archive_key TEXT PRIMARY KEY,
|
|
1439
|
+
owner_id TEXT NOT NULL,
|
|
1440
|
+
owner_pid INTEGER NOT NULL,
|
|
1441
|
+
heartbeat_at INTEGER NOT NULL,
|
|
1442
|
+
created_at INTEGER NOT NULL
|
|
1443
|
+
);
|
|
1444
|
+
`,IO=new Ce(1)});async function Sb(t){let e=or();for(;;){if(await C(async n=>(await V(n),await n.transaction(async()=>await n.queryOne("SELECT * FROM archive_commit_locks WHERE archive_key = ?",[t],gb)!==void 0?!1:(await n.run(`
|
|
1445
|
+
INSERT INTO archive_commit_locks (
|
|
1446
|
+
archive_key, owner_id, owner_pid, heartbeat_at, created_at
|
|
1447
|
+
) VALUES (?, ?, ?, ?, ?)
|
|
1448
|
+
`,[t,e,process.pid,Date.now(),Date.now()]),!0)))))return async()=>{await C(async n=>{await n.run("DELETE FROM archive_commit_locks WHERE archive_key = ? AND owner_id = ?",[t,e])})};await ts(100)}}async function He(t,e,r){let n=or();for(;;){if(await C(async a=>(await V(a),await a.transaction(async()=>(await a.queryAll(`
|
|
1449
|
+
SELECT *
|
|
1450
|
+
FROM entry_locks
|
|
1451
|
+
WHERE archive_key = ?
|
|
1452
|
+
`,[t],yb)).some(s=>s.ownerId!==n&&PO(e,s.entryPath)&&CO(r,s.mode))?!1:(await a.run(`
|
|
1453
|
+
INSERT INTO entry_locks (
|
|
1454
|
+
archive_key, entry_path, mode, owner_id, owner_pid, heartbeat_at, created_at
|
|
1455
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
1456
|
+
`,[t,e,r,n,process.pid,Date.now(),Date.now()]),!0)))))return async()=>{await C(async a=>{await a.run(`
|
|
1457
|
+
DELETE FROM entry_locks
|
|
1458
|
+
WHERE archive_key = ? AND entry_path = ? AND owner_id = ?
|
|
1459
|
+
`,[t,e,n])})};await ts(100)}}async function qe(t,e,r,n){let i=await He(t,e,r);try{return await n()}finally{await i()}}function CO(t,e){return t==="state"||e==="state"?t==="state"&&e==="state":!(t==="read"&&e==="read")}function PO(t,e){return t===e||bb(t,e)||bb(e,t)}function bb(t,e){return t.endsWith("/")&&e.startsWith(t)}async function wb(t){await C(async e=>{await V(e),await e.run(`
|
|
1460
|
+
INSERT OR REPLACE INTO entry_sqlite_leases (
|
|
1461
|
+
archive_key, entry_path, mode, owner_id, owner_pid, heartbeat_at, created_at
|
|
1462
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
1463
|
+
`,[t.archiveKey,t.entryPath,t.mode,t.ownerId,process.pid,Date.now(),Date.now()])})}async function hl(t){await C(async e=>{await e.run(`
|
|
1464
|
+
DELETE FROM entry_sqlite_leases
|
|
1465
|
+
WHERE archive_key = ? AND entry_path = ? AND owner_id = ?
|
|
1466
|
+
`,[t.archiveKey,t.entryPath,t.ownerId])})}async function fl(t,e){for(;;){if(await C(async n=>(await V(n),await n.queryOne(`
|
|
1467
|
+
SELECT COUNT(*) AS count
|
|
1468
|
+
FROM entry_sqlite_leases AS lease
|
|
1469
|
+
LEFT JOIN archive_owners AS owner
|
|
1470
|
+
ON owner.archive_key = lease.archive_key
|
|
1471
|
+
AND owner.owner_id = lease.owner_id
|
|
1472
|
+
WHERE lease.archive_key = ?
|
|
1473
|
+
AND lease.entry_path = ?
|
|
1474
|
+
AND (
|
|
1475
|
+
owner.owner_id IS NULL
|
|
1476
|
+
OR owner.heartbeat_at > ?
|
|
1477
|
+
)
|
|
1478
|
+
`,[t,e,Date.now()-6e4],i=>Ue(i,"count"))))===0)return;await ts(100)}}var Mi=d(()=>{"use strict";st();Be();mt()});async function is(t,e){let r=t.filter(a=>a.startsWith(e.prefix)),n=await C(async a=>await a.queryAll(`
|
|
1479
|
+
SELECT *
|
|
1480
|
+
FROM entry_overlays
|
|
1481
|
+
WHERE archive_key = ?
|
|
1482
|
+
`,[e.archiveKey],At)),i=new Set(r);for(let a of n)a.entryPath.startsWith(e.prefix)&&(a.kind==="deleted"?i.delete(a.entryPath):i.add(a.entryPath));return[...i].sort((a,o)=>a.localeCompare(o))}async function yl(t){let e=await Ot(t.archiveKey,t.entryPath);return e?.kind==="deleted"?{kind:"deleted"}:e?.workspacePath!==void 0?{kind:"workspace",path:e.workspacePath}:{kind:"archive"}}async function Ot(t,e){return await C(async r=>await r.queryOne("SELECT * FROM entry_overlays WHERE archive_key = ? AND entry_path = ?",[t,e],At))}async function dr(t){return await C(async e=>await e.queryAll(`
|
|
1483
|
+
SELECT *
|
|
1484
|
+
FROM entry_overlays
|
|
1485
|
+
WHERE archive_key = ?
|
|
1486
|
+
ORDER BY entry_path ASC
|
|
1487
|
+
`,[t],At))}async function as(t){let e=t.entryPath===N?await sr(t.archivePath):void 0;await C(async r=>{await r.run(`
|
|
1488
|
+
INSERT INTO entry_overlays (
|
|
1489
|
+
archive_key, archive_path, entry_path, kind, workspace_path,
|
|
1490
|
+
archive_signature, mutation_token, updated_at
|
|
1491
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
1492
|
+
ON CONFLICT(archive_key, entry_path)
|
|
1493
|
+
DO UPDATE SET kind = excluded.kind,
|
|
1494
|
+
archive_path = excluded.archive_path,
|
|
1495
|
+
workspace_path = excluded.workspace_path,
|
|
1496
|
+
archive_signature = excluded.archive_signature,
|
|
1497
|
+
mutation_token = excluded.mutation_token,
|
|
1498
|
+
updated_at = excluded.updated_at
|
|
1499
|
+
`,[t.archiveKey,t.archivePath,t.entryPath,t.kind,t.workspacePath??null,await ar(t.archivePath),e??null,Date.now()])})}async function dn(t,e){await C(async r=>{await r.run("DELETE FROM entry_overlays WHERE archive_key = ? AND entry_path = ?",[t,e])})}async function Eb(t){return await C(async e=>await e.queryOne("SELECT archive_path FROM entry_overlays WHERE archive_key = ? LIMIT 1",[t],r=>ue(r,"archive_path")))}function kb(t){if(t.kind==="deleted")return{entryPath:t.entryPath,kind:"deleted"};if(t.workspacePath===void 0)throw new Error(`Missing workspace path for ${t.entryPath}.`);return{entryPath:t.entryPath,kind:"file",workspacePath:t.workspacePath}}var un=d(()=>{"use strict";Lt();st();Be();mt()});import{createHash as BV}from"crypto";var UV,HV,Wi=d(()=>{"use strict";UV=new RegExp("\\p{Script=Han}+","gu"),HV=new RegExp("^\\p{Script=Han}+$","u")});import{createHash as KV}from"crypto";async function ln(t){return await t.queryOne(`
|
|
1500
|
+
SELECT value
|
|
1501
|
+
FROM search_index_state
|
|
1502
|
+
WHERE key = 'fingerprint'
|
|
1503
|
+
`,void 0,e=>String(e.value))}var os=d(()=>{"use strict"});var mn=d(()=>{"use strict"});var gl=d(()=>{"use strict";mn()});var Ib=d(()=>{"use strict";x();gl()});var Rb=d(()=>{"use strict";Wi();os();Ib();mn()});var Tb=d(()=>{"use strict";mn()});var _b=d(()=>{"use strict";Wi()});var Cb=d(()=>{"use strict"});var Sl=d(()=>{"use strict";x();Cb();os()});var Pb=d(()=>{"use strict";x();Wi();_b();gl();mn();Sl()});var Lb=d(()=>{"use strict";x()});var Ab=d(()=>{"use strict";Rb();Tb();os();Pb();Lb();Sl();mn()});var Dt=d(()=>{"use strict";Ab();Wi()});var hn=d(()=>{"use strict";Dt()});async function cs(t,e){return await C(async r=>{await V(r);let n=await r.queryOne("SELECT COUNT(*) AS count FROM archive_owners WHERE archive_key = ?",[t],a=>Ue(a,"count")),i=await r.queryOne(`
|
|
1504
|
+
SELECT COUNT(*) AS count
|
|
1505
|
+
FROM entry_sqlite_leases
|
|
1506
|
+
WHERE archive_key = ?
|
|
1507
|
+
AND entry_path = ?
|
|
1508
|
+
`,[t,e],a=>Ue(a,"count"));return(n??0)>0||(i??0)>0})}async function ds(t){return await C(async e=>{await V(e);let r=await e.queryOne("SELECT COUNT(*) AS count FROM archive_owners WHERE archive_key = ?",[t],a=>Ue(a,"count")),n=await e.queryOne("SELECT COUNT(*) AS count FROM entry_sqlite_leases WHERE archive_key = ?",[t],a=>Ue(a,"count")),i=await e.queryOne("SELECT COUNT(*) AS count FROM entry_locks WHERE archive_key = ?",[t],a=>Ue(a,"count"));return(r??0)>0||(n??0)>0||(i??0)>0})}var El=d(()=>{"use strict";mt()});import{mkdir as Db,readdir as Mb}from"fs/promises";import{basename as FO,dirname as jO,join as us}from"path";async function Fi(t,e){let r=us(ls(),t,jO(e));return await Db(r,{recursive:!0}),us(r,FO(e))}function ls(){return us(ml(),"work")}async function Wb(t){if(await Db(t,{recursive:!0}),(await Mb(t)).length>0)throw new Error(`Read workspace directory is not empty: ${t}`)}async function kl(t){let e;try{e=await Mb(t,{withFileTypes:!0})}catch(n){if(w(n)&&n.code==="ENOENT")return[];throw n}let r=[];for(let n of e){let i=us(t,n.name);n.isDirectory()?r.push(...await kl(i)):n.isFile()&&r.push(i)}return r}function ms(t){return t.replaceAll("\\","/").replace(/^\/+/u,"")}function Fb(t){let e=ms(t);return e===""||e.endsWith("/")?e:`${e}/`}var ji=d(()=>{"use strict";T();mt()});import{mkdir as GO,rename as BO,rm as UO}from"fs/promises";import{dirname as HO}from"path";async function jb(t){if(t.workspacePath===void 0||!await Pt(t.workspacePath))return"missing";if(!await Pt(t.archivePath))return"dirty";try{let e=await qO(t.workspacePath),r=await ar(t.archivePath);return e===void 0?"dirty":t.archiveSignature===r?"current":"dirty"}catch{return"dirty"}}async function qO(t){await ke();let e=await P.open(t,"",{readonly:!0});try{return await ln(e)}finally{await e.close()}}async function Gb(t){let e=await sr(t.targetArchivePath),r=await $O({mutationToken:e,targetArchiveKey:t.targetArchiveKey}),n=[];for(let o of r)o.workspacePath===void 0||await Pt(o.archivePath)||await ds(o.archiveKey)||n.push(o);if(n.length!==1)return;let i=n[0],a=await He(i.archiveKey,N,"write");try{let o=await He(i.archiveKey,N,"state");try{let s=await Ot(i.archiveKey,N),c=await Ot(t.targetArchiveKey,N);if(s?.workspacePath===void 0||s.workspacePath!==i.workspacePath||s.mutationToken!==e||c!==void 0||await Pt(i.archivePath)||await cs(i.archiveKey,N))return;let u=await Fi(t.targetArchiveKey,N);await UO(u,{force:!0}).catch(()=>{}),await GO(HO(u),{recursive:!0}),await BO(s.workspacePath,u),await C(async l=>{await l.run(`
|
|
1509
|
+
UPDATE entry_overlays
|
|
1510
|
+
SET archive_key = ?,
|
|
1511
|
+
archive_path = ?,
|
|
1512
|
+
workspace_path = ?,
|
|
1513
|
+
archive_signature = ?,
|
|
1514
|
+
updated_at = ?
|
|
1515
|
+
WHERE archive_key = ?
|
|
1516
|
+
AND entry_path = ?
|
|
1517
|
+
`,[t.targetArchiveKey,t.targetArchivePath,u,await ar(t.targetArchivePath),Date.now(),i.archiveKey,N])})}finally{await o()}}finally{await a()}}async function $O(t){return await C(async e=>(await V(e),await e.queryAll(`
|
|
1518
|
+
SELECT *
|
|
1519
|
+
FROM entry_overlays
|
|
1520
|
+
WHERE entry_path = ?
|
|
1521
|
+
AND kind = 'file'
|
|
1522
|
+
AND workspace_path IS NOT NULL
|
|
1523
|
+
AND mutation_token = ?
|
|
1524
|
+
AND archive_key <> ?
|
|
1525
|
+
ORDER BY updated_at ASC
|
|
1526
|
+
`,[N,t.mutationToken,t.targetArchiveKey],At)))}var Il=d(()=>{"use strict";L();Xt();hn();Lt();st();El();Be();Mi();un();mt();ji()});import{mkdir as Bb,readFile as Ub,rename as KO,rm as ps,writeFile as Hb}from"fs/promises";import{dirname as qb,posix as JO,resolve as $b}from"path";var fn,xl=d(()=>{"use strict";Xt();Lt();st();Be();Mi();un();Il();ji();fn=class{#e;#t;#r;#n;#i;#a;#o=or();constructor(e,r){this.#t=$b(e),this.#e=sn(this.#t),this.#i=r.readonlyDatabase===!0,this.#a=r.searchIndexWritebackPolicy??"archive",this.#c=r.session}async#s(e){let r=await Ot(this.#e,e);if(r===void 0)return;let n=await ar(this.#t);if(r.archiveSignature===n)return r;await dn(this.#e,e),r.workspacePath!==void 0&&await ps(r.workspacePath,{force:!0}).catch(()=>{}),this.#n?.delete(e)}#c;async close(){this.#r!==void 0&&((await this.#r).close(),this.#r=void 0),await hl({archiveKey:this.#e,entryPath:lt,ownerId:this.#o}),await hl({archiveKey:this.#e,entryPath:N,ownerId:this.#o})}async deleteFile(e){let r=this.#u(e);await qe(this.#e,r,"write",async()=>{await qe(this.#e,r,"state",async()=>{let n=await this.#s(r);await as({archiveKey:this.#e,archivePath:this.#t,entryPath:r,kind:"deleted"}),n?.workspacePath!==void 0&&await ps(n.workspacePath,{force:!0}).catch(()=>{}),this.#n?.set(r,{kind:"deleted"}),this.#c?.modifyEntry(r)})})}async deleteTree(e){let r=this.#u(e),n=await is(await this.#d(),{archiveKey:this.#e,prefix:`${r}/`});for(let i of n)await this.deleteFile(i)}ensureDirectory(){return Promise.resolve()}initializeDatabaseSchema(){return!1}markDatabaseDirty(){this.#i||this.#c?.observeDirtyEntry(lt)}markSearchIndexDatabaseDirty(){!this.#i&&this.#a==="archive"&&this.#c?.observeDirtyEntry(N)}openDatabaseReadonly(){return this.#i}async listFiles(e){let r=this.#u(e),n=r===""?"":`${r}/`;return(await this.#f(n)).map(([a])=>a).map(a=>a.slice(n.length)).filter(a=>!a.includes("/")).map(a=>JO.basename(a)).sort((a,o)=>a.localeCompare(o))}async listFileContents(e){let r=this.#u(e),n=r===""?"":`${r}/`;return await qe(this.#e,Fb(n),"read",async()=>{let i=new Map;for(let[a,o]of await this.#f(n)){let s=a.slice(n.length);if(s.includes("/"))continue;if(o.kind==="workspace"){i.set(s,await Ub(o.path));continue}let c=await this.#p(a);c!==void 0&&i.set(s,c)}return i})}async readFile(e){let r=this.#u(e);return await qe(this.#e,r,"read",async()=>{let n=(await this.#h()).get(r)??await qe(this.#e,r,"state",async()=>await yl({archiveKey:this.#e,entryPath:r}));if(n.kind==="deleted"){this.#c?.observeDirtyEntry(r);return}return n.kind==="workspace"?(this.#c?.observeDirtyEntry(r),await Ub(n.path)):await this.#p(r)})}async resolveDatabasePath(){return await this.#l(lt,{createIfMissing:!0,readonly:this.#i})}async resolveSearchIndexDatabasePath(){return await this.#l(N,{createIfMissing:!this.#i,readonly:this.#i})}async#l(e,r){return e===N&&await ke(),await qe(this.#e,e,"state",async()=>{let n=await this.#s(e);if(e===N&&n?.kind!=="file"&&(await Gb({targetArchiveKey:this.#e,targetArchivePath:this.#t}),n=await this.#s(e)),n?.kind!=="file"){let i=await Oi(this.#t,e);if(i===void 0&&!r.createIfMissing)throw new Error(`Archive SQLite entry is missing: ${e}`);let a=await Fi(this.#e,e);await Bb(qb(a),{recursive:!0}),await Hb(a,i??new Uint8Array),await as({archiveKey:this.#e,archivePath:this.#t,entryPath:e,kind:"file",workspacePath:a}),n=await this.#s(e)}if(n?.workspacePath===void 0)throw new Error("Could not materialize SQLite database.");return await wb({archiveKey:this.#e,entryPath:e,mode:r.readonly?"read":"write",ownerId:this.#o}),n.workspacePath})}async writeFile(e,r,n){let i=this.#u(e);await qe(this.#e,i,"write",async()=>{let a=await qe(this.#e,i,"state",async()=>await yl({archiveKey:this.#e,entryPath:i})),o=a.kind==="archive"&&await this.#p(i)!==void 0;if(n.overwrite!==!0&&(a.kind==="workspace"||o))throw new Error(`File already exists: ${e}`);await qe(this.#e,i,"state",async()=>{let s=await Fi(this.#e,i);await Bb(qb(s),{recursive:!0});let c=`${s}.${process.pid}.${Date.now()}.tmp`;try{await Hb(c,r),await KO(c,s)}finally{await ps(c,{force:!0}).catch(()=>{})}await as({archiveKey:this.#e,archivePath:this.#t,entryPath:i,kind:"file",workspacePath:s}),this.#n?.set(i,{kind:"workspace",path:s}),a.kind==="workspace"&&a.path!==s&&await ps(a.path,{force:!0}).catch(()=>{}),this.#c?.modifyEntry(i)})})}#u(e){let r=$b(e),n=this.#t.endsWith("/")?this.#t:`${this.#t}/`;return r.startsWith(n)?ms(r.slice(n.length)):ms(e)}async#d(){return(await this.#m()).listEntries()}async#p(e){return await(await this.#m()).readEntry(e)}async#m(){return this.#r??=ct.open(this.#t),await this.#r}async#h(){if(this.#n!==void 0)return this.#n;let e=new Map;for(let r of await this.#d())e.set(r,{kind:"archive"});for(let r of await dr(this.#e))r.kind==="deleted"?e.set(r.entryPath,{kind:"deleted"}):r.workspacePath!==void 0&&e.set(r.entryPath,{kind:"workspace",path:r.workspacePath});return this.#n=e,e}async#f(e){let r=[];for(let[n,i]of await this.#h())i.kind==="deleted"||!n.startsWith(e)||r.push([n,i]);return r.sort(([n],[i])=>n.localeCompare(i))}}});import{mkdir as zO,mkdtemp as QO,rename as XO,rm as Kb}from"fs/promises";import{tmpdir as VO}from"os";import{basename as YO,dirname as ZO,join as Jb,resolve as H2}from"path";async function hs(t,e){let r=(await dr(t)).filter(s=>e===void 0||e.has(s.entryPath)),n=await Eb(t);if(r.length===0||n===void 0)return;let i=r.map(s=>s.entryPath).sort((s,c)=>s.localeCompare(c)),a=new Set(i),o=[];try{for(let u of i)o.push(await He(t,u,"write"));for(let u of i)o.push(await He(t,u,"state"));i.includes(lt)&&await fl(t,lt),i.includes(N)&&await fl(t,N);let s=(await dr(t)).filter(u=>a.has(u.entryPath));if(s.length===0)return;let c=await Sb(t);try{let u=await QO(Jb(VO(),"wikigraph-flush-")),l=Jb(u,YO(n));try{await Ai(n,l,s.map(kb)),await zO(ZO(n),{recursive:!0}),await XO(l,n)}finally{await Kb(u,{force:!0,recursive:!0})}}finally{await c()}for(let u of s)await dn(t,u.entryPath),u.workspacePath!==void 0&&await Kb(u.workspacePath,{force:!0})}finally{for(let s of o.reverse())await s()}}var fs=d(()=>{"use strict";Lt();st();Be();Mi();un();mt()});async function zb(t){await C(async e=>{await V(e),await e.run(`
|
|
1527
|
+
INSERT OR REPLACE INTO archive_owners (
|
|
1528
|
+
archive_key, owner_id, owner_pid, heartbeat_at, created_at
|
|
1529
|
+
) VALUES (?, ?, ?, ?, ?)
|
|
1530
|
+
`,[t.archiveKey,t.ownerId,process.pid,Date.now(),Date.now()])})}async function Qb(t){await C(async e=>{await e.run(`
|
|
1531
|
+
UPDATE archive_owners
|
|
1532
|
+
SET heartbeat_at = ?, owner_pid = ?
|
|
1533
|
+
WHERE archive_key = ? AND owner_id = ?
|
|
1534
|
+
`,[Date.now(),process.pid,t.archiveKey,t.ownerId])})}async function Xb(t){await C(async e=>{await e.transaction(async()=>{await e.run("DELETE FROM entry_sqlite_leases WHERE archive_key = ? AND owner_id = ?",[t.archiveKey,t.ownerId]),await e.run("DELETE FROM archive_owners WHERE archive_key = ? AND owner_id = ?",[t.archiveKey,t.ownerId])})})}async function Vb(t){await C(async r=>{await V(r)});let e=await C(async r=>await r.queryAll(`
|
|
1535
|
+
SELECT owner_id
|
|
1536
|
+
FROM archive_owners
|
|
1537
|
+
WHERE archive_key = ?
|
|
1538
|
+
AND heartbeat_at <= ?
|
|
1539
|
+
`,[t,Date.now()-6e4],n=>ue(n,"owner_id")));e.length!==0&&(await C(async r=>{await r.transaction(async()=>{await r.run(`
|
|
1540
|
+
DELETE FROM entry_sqlite_leases
|
|
1541
|
+
WHERE archive_key = ?
|
|
1542
|
+
AND owner_id IN (${cr(e.length)})
|
|
1543
|
+
`,[t,...e]),await r.run(`
|
|
1544
|
+
DELETE FROM archive_owners
|
|
1545
|
+
WHERE archive_key = ?
|
|
1546
|
+
AND owner_id IN (${cr(e.length)})
|
|
1547
|
+
`,[t,...e])})}),await hs(t))}var Yb=d(()=>{"use strict";Be();fs();mt()});var t8,Gi=d(()=>{"use strict";t8=new RegExp("\\p{Script=Han}","u")});var Rl=d(()=>{"use strict"});var vl,ur=d(()=>{"use strict";vl=`
|
|
1548
|
+
CREATE TABLE IF NOT EXISTS search_sessions (
|
|
1549
|
+
session_id TEXT PRIMARY KEY,
|
|
1550
|
+
archive_key TEXT NOT NULL,
|
|
1551
|
+
query TEXT NOT NULL,
|
|
1552
|
+
options_json TEXT NOT NULL,
|
|
1553
|
+
terms_json TEXT NOT NULL,
|
|
1554
|
+
lens TEXT NOT NULL,
|
|
1555
|
+
match TEXT NOT NULL,
|
|
1556
|
+
object_caches_populated INTEGER NOT NULL DEFAULT 0,
|
|
1557
|
+
created_at INTEGER NOT NULL,
|
|
1558
|
+
expires_at INTEGER NOT NULL,
|
|
1559
|
+
accessed_at INTEGER NOT NULL
|
|
1560
|
+
);
|
|
1561
|
+
|
|
1562
|
+
CREATE TABLE IF NOT EXISTS search_results (
|
|
1563
|
+
session_id TEXT NOT NULL,
|
|
1564
|
+
rank INTEGER NOT NULL,
|
|
1565
|
+
item_json TEXT NOT NULL,
|
|
1566
|
+
PRIMARY KEY (session_id, rank)
|
|
1567
|
+
);
|
|
1568
|
+
|
|
1569
|
+
CREATE TABLE IF NOT EXISTS predicate_dictionary (
|
|
1570
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
1571
|
+
value TEXT NOT NULL UNIQUE
|
|
1572
|
+
);
|
|
1573
|
+
|
|
1574
|
+
CREATE TABLE IF NOT EXISTS search_evidence_hit_events (
|
|
1575
|
+
session_id TEXT NOT NULL,
|
|
1576
|
+
archive_id INTEGER NOT NULL,
|
|
1577
|
+
evidence_kind INTEGER NOT NULL,
|
|
1578
|
+
evidence_id TEXT NOT NULL,
|
|
1579
|
+
chapter_id INTEGER NOT NULL,
|
|
1580
|
+
sentence_index INTEGER NOT NULL,
|
|
1581
|
+
score REAL NOT NULL,
|
|
1582
|
+
PRIMARY KEY (
|
|
1583
|
+
session_id,
|
|
1584
|
+
archive_id,
|
|
1585
|
+
evidence_kind,
|
|
1586
|
+
evidence_id,
|
|
1587
|
+
chapter_id,
|
|
1588
|
+
sentence_index
|
|
1589
|
+
)
|
|
1590
|
+
);
|
|
1591
|
+
|
|
1592
|
+
CREATE INDEX IF NOT EXISTS idx_search_evidence_hit_events_evidence_rank
|
|
1593
|
+
ON search_evidence_hit_events(session_id, archive_id, evidence_kind, evidence_id, score DESC, chapter_id, sentence_index);
|
|
1594
|
+
|
|
1595
|
+
CREATE INDEX IF NOT EXISTS idx_search_evidence_hit_events_sentence
|
|
1596
|
+
ON search_evidence_hit_events(session_id, archive_id, chapter_id, sentence_index, evidence_kind, evidence_id);
|
|
1597
|
+
|
|
1598
|
+
CREATE TABLE IF NOT EXISTS search_entity_hits (
|
|
1599
|
+
session_id TEXT NOT NULL,
|
|
1600
|
+
archive_id INTEGER NOT NULL,
|
|
1601
|
+
qid TEXT NOT NULL,
|
|
1602
|
+
property_top_scores_json TEXT NOT NULL DEFAULT '[]',
|
|
1603
|
+
evidence_top_scores_json TEXT NOT NULL DEFAULT '[]',
|
|
1604
|
+
property_score REAL NOT NULL DEFAULT 0,
|
|
1605
|
+
evidence_score REAL NOT NULL DEFAULT 0,
|
|
1606
|
+
result_score REAL NOT NULL DEFAULT 0,
|
|
1607
|
+
PRIMARY KEY (session_id, archive_id, qid)
|
|
1608
|
+
);
|
|
1609
|
+
|
|
1610
|
+
CREATE INDEX IF NOT EXISTS idx_search_entity_hits_rank
|
|
1611
|
+
ON search_entity_hits(session_id, result_score DESC, archive_id, qid);
|
|
1612
|
+
|
|
1613
|
+
CREATE TABLE IF NOT EXISTS search_triple_hits (
|
|
1614
|
+
session_id TEXT NOT NULL,
|
|
1615
|
+
archive_id INTEGER NOT NULL,
|
|
1616
|
+
subject_qid TEXT NOT NULL,
|
|
1617
|
+
predicate_id INTEGER NOT NULL,
|
|
1618
|
+
object_qid TEXT NOT NULL,
|
|
1619
|
+
evidence_top_scores_json TEXT NOT NULL DEFAULT '[]',
|
|
1620
|
+
result_score REAL NOT NULL DEFAULT 0,
|
|
1621
|
+
PRIMARY KEY (session_id, archive_id, subject_qid, predicate_id, object_qid),
|
|
1622
|
+
FOREIGN KEY (predicate_id) REFERENCES predicate_dictionary(id)
|
|
1623
|
+
);
|
|
1624
|
+
|
|
1625
|
+
CREATE INDEX IF NOT EXISTS idx_search_triple_hits_rank
|
|
1626
|
+
ON search_triple_hits(session_id, result_score DESC, archive_id, subject_qid, predicate_id, object_qid);
|
|
1627
|
+
|
|
1628
|
+
CREATE TABLE IF NOT EXISTS search_chunk_hits (
|
|
1629
|
+
session_id TEXT NOT NULL,
|
|
1630
|
+
archive_id INTEGER NOT NULL,
|
|
1631
|
+
chunk_id INTEGER NOT NULL,
|
|
1632
|
+
property_top_scores_json TEXT NOT NULL DEFAULT '[]',
|
|
1633
|
+
evidence_top_scores_json TEXT NOT NULL DEFAULT '[]',
|
|
1634
|
+
property_score REAL NOT NULL DEFAULT 0,
|
|
1635
|
+
evidence_score REAL NOT NULL DEFAULT 0,
|
|
1636
|
+
result_score REAL NOT NULL DEFAULT 0,
|
|
1637
|
+
PRIMARY KEY (session_id, archive_id, chunk_id)
|
|
1638
|
+
);
|
|
1639
|
+
|
|
1640
|
+
CREATE INDEX IF NOT EXISTS idx_search_chunk_hits_rank
|
|
1641
|
+
ON search_chunk_hits(session_id, result_score DESC, archive_id, chunk_id);
|
|
1642
|
+
|
|
1643
|
+
CREATE INDEX IF NOT EXISTS idx_search_sessions_archive
|
|
1644
|
+
ON search_sessions(archive_key, session_id);
|
|
1645
|
+
|
|
1646
|
+
CREATE INDEX IF NOT EXISTS idx_search_sessions_expires
|
|
1647
|
+
ON search_sessions(expires_at);
|
|
1648
|
+
|
|
1649
|
+
CREATE INDEX IF NOT EXISTS idx_search_sessions_prune
|
|
1650
|
+
ON search_sessions(accessed_at DESC, created_at DESC, session_id);
|
|
1651
|
+
`});import{join as eN}from"path";import{rm as Zb}from"fs/promises";async function lr(){let t=_l(),e=await A(t,vl);return Tl===t?e:await rN(e)?(Tl=t,e):(await e.close(),await Zb(t,{force:!0}),await Zb(`${t}.initialized`,{force:!0}),Tl=t,await A(t,vl))}function _l(){return eN(tN(),"search-sessions.sqlite")}function tN(){return zt()}async function rN(t){return await ys(t,"search_entity_hits","archive_id")&&await ys(t,"search_chunk_hits","archive_id")&&await ys(t,"search_triple_hits","archive_id")&&await ys(t,"search_evidence_hit_events","archive_id")}async function ys(t,e,r){return(await t.queryAll(`PRAGMA table_info(${e})`,void 0,i=>String(i.name))).includes(r)}var Tl,yn=d(()=>{"use strict";se();L();ur()});var gs=d(()=>{"use strict"});async function bs(t,e){await t.run("DELETE FROM search_results WHERE session_id = ?",[e]),await t.run("DELETE FROM search_evidence_hit_events WHERE session_id = ?",[e]),await t.run("DELETE FROM search_entity_hits WHERE session_id = ?",[e]),await t.run("DELETE FROM search_triple_hits WHERE session_id = ?",[e]),await t.run("DELETE FROM search_chunk_hits WHERE session_id = ?",[e]),await t.run("DELETE FROM search_sessions WHERE session_id = ?",[e])}async function Cl(t){await t.run(`
|
|
1652
|
+
DELETE FROM predicate_dictionary
|
|
1653
|
+
WHERE NOT EXISTS (
|
|
1654
|
+
SELECT 1
|
|
1655
|
+
FROM search_triple_hits
|
|
1656
|
+
WHERE search_triple_hits.predicate_id = predicate_dictionary.id
|
|
1657
|
+
)
|
|
1658
|
+
`)}var Pl=d(()=>{"use strict";x();yn();gs();ur()});import{stat as aN}from"fs/promises";async function gn(t){let e=await lr();try{let r=await e.queryAll(`
|
|
1659
|
+
SELECT session_id
|
|
1660
|
+
FROM search_sessions
|
|
1661
|
+
WHERE archive_key = ?
|
|
1662
|
+
`,[t],n=>k(n,"session_id"));await e.transaction(async()=>{for(let n of r)await bs(e,n);await Cl(e)})}finally{await e.close()}}async function Ss(t){let e=_l(),r=await eS(e),n=await lr();try{let i=await n.queryOne("SELECT COUNT(*) AS count FROM search_sessions",void 0,u=>y(u,"count")),a=t.force?await sN(n):await oN(n,t.now),o=t.force?[]:await cN(n),s=[...new Set([...a,...o])].sort();!t.dryRun&&s.length>0&&(await n.transaction(async()=>{for(let u of s)await bs(n,u);await Cl(n)}),await n.run("VACUUM"));let c=await eS(e);return{freedBytes:Math.max(0,r-c),removed:s.length,scanned:i??0}}finally{await n.close()}}async function oN(t,e){return await t.queryAll(`
|
|
1663
|
+
SELECT session_id
|
|
1664
|
+
FROM search_sessions
|
|
1665
|
+
WHERE expires_at < ?
|
|
1666
|
+
`,[e],r=>k(r,"session_id"))}async function sN(t){return await t.queryAll("SELECT session_id FROM search_sessions",void 0,e=>k(e,"session_id"))}async function cN(t){return await t.queryAll(`
|
|
1667
|
+
SELECT session_id
|
|
1668
|
+
FROM search_sessions
|
|
1669
|
+
ORDER BY accessed_at DESC, created_at DESC, session_id
|
|
1670
|
+
LIMIT -1 OFFSET ?
|
|
1671
|
+
`,[500],e=>k(e,"session_id"))}async function eS(t){try{return(await aN(t)).size}catch(e){if(w(e)&&e.code==="ENOENT")return 0;throw e}}var tS=d(()=>{"use strict";x();T();yn();ur();Pl()});var rS=d(()=>{"use strict";ur()});var Ll=d(()=>{"use strict"});var ws=d(()=>{"use strict";x();yn();gs();rS();Ll()});import{createHash as B8}from"crypto";var iS=d(()=>{"use strict";ur()});var aS=d(()=>{"use strict";x();Rl();yn();ws();iS();gs();ur();Pl()});var oS=d(()=>{"use strict";x();yn();ws()});var mr=d(()=>{"use strict";Rl();tS();ws();aS();oS();Ll()});var Es=d(()=>{"use strict"});var hS=d(()=>{"use strict"});var Ol=d(()=>{"use strict"});var ks=d(()=>{"use strict"});var Nl=d(()=>{"use strict";ks()});var Dl=d(()=>{"use strict";ks()});var xs=d(()=>{"use strict";Es();Ol();Nl();Dl()});var wS=d(()=>{"use strict";vt()});var ES=d(()=>{"use strict";Es();hS();Ol();ks();xs();Nl();Dl();wS()});var j=d(()=>{"use strict";ES()});var Wl=d(()=>{"use strict"});async function Y(t,e){let r=await Pu(t),n=await Lu(t,r.items,e);if(n===void 0)throw new Error(`Chapter ${e} does not exist. Use \`wg <archive-uri>/chapter list\` to discover chapter ids.`);let i=await t.serials.getById(e),a=await t.readSummary(e);return{...n,graphReady:i?.topologyReady===!0,hasSummary:a!==void 0}}async function J(t){let e=await Pu(t);return await qo(t,e.items)}var Fl=d(()=>{"use strict";ki();Cu();Wl()});async function bn(t,e,r){let n=await Y(t,e);if(n.stage!==r)throw new Error(`Chapter ${e} is ${n.stage}. Expected ${r} before committing build output.`)}var kS=d(()=>{"use strict";Fl()});var be=d(()=>{"use strict";Fl();kS();Wl()});var Hi=d(()=>{"use strict";be();Dt()});var Z=d(()=>{"use strict";vt();j()});var Ne=d(()=>{"use strict";vt();j()});var $e=d(()=>{"use strict";j();Z()});var De=d(()=>{"use strict";be();Dt();j();Z();Ne();$e();j();Hi()});var Ji=d(()=>{"use strict";mr();Dt();De();Ne()});var Ul=d(()=>{"use strict";be();Gi();j();Z();$e();Ne()});var zi=d(()=>{"use strict"});var Je=d(()=>{"use strict";be();zi();j();Z();$e()});var Qi=d(()=>{"use strict";$e()});var Xi=d(()=>{"use strict";Z();$e();Je()});var Hl=d(()=>{"use strict";j();Je();Qi();Xi()});var OS=d(()=>{"use strict";Dt();j();De();Je();Qi();Hl();Xi();Xi();Qi()});var NS=d(()=>{"use strict";OS();Hl();Qi();Xi()});var Yi=d(()=>{"use strict";NS()});var MS=d(()=>{"use strict";mr();j();Z();$e();Je();Ne();Yi()});var ea=d(()=>{"use strict";Z();Je();j();Ne();Yi();MS()});var Kl=d(()=>{"use strict";be();j();Z();$e();Je();ea();ta();Ne()});var ta=d(()=>{"use strict";j();Z();$e();Ne();Kl()});var Ls=d(()=>{"use strict";j();De();Ne()});var As=d(()=>{"use strict";j();De()});var Os=d(()=>{"use strict";be();Gi();mr();Dt();j();Ji();Ul();ea();ta();De();Ls();As()});var BS=d(()=>{"use strict";Gi();mr();j();Hi();Ji();Ul();ea();ta();Os();De()});var US=d(()=>{"use strict";BS();Ls();As();Os();Ji();De()});var Ns=d(()=>{"use strict";Je();Yi();Z()});var ra=d(()=>{"use strict";j()});var Ds=d(()=>{"use strict";j();Z();De();Ji();Dt();ra()});var zl=d(()=>{"use strict";j();Ne();Ns();Ds();ra()});import{stat as eD}from"fs/promises";async function Ql(t){let e=Dr(),r=await HS(e);if(r===void 0)return{freedBytes:0,removed:0,scanned:0};let n=await A(e,KS);try{await JS(n);let i=await aD(n),a=new Date(t.now-tD).toISOString(),o=await oD(n,a);!t.dryRun&&o>0&&(await n.transaction(async()=>{await n.run("DELETE FROM qid_cache WHERE checked_at < ?",[a]),await n.run("DELETE FROM disambiguation_cache WHERE checked_at < ?",[a])}),await n.run("VACUUM"));let s=await HS(e);return{freedBytes:t.dryRun?rD(r,i,o):Math.max(0,r-(s??0)),removed:o,scanned:i}}finally{await n.close()}}function rD(t,e,r){return e===0||r===0?0:Math.round(t*(r/e))}async function JS(t){await nD(t),await iD(t)}async function nD(t){(await na(t,"qid_cache")).has("language")||await t.transaction(async()=>{(await na(t,"qid_cache")).has("language")||(await t.run("ALTER TABLE qid_cache RENAME TO qid_cache_legacy"),await t.run(qS),await t.run(`
|
|
1672
|
+
INSERT OR IGNORE INTO qid_cache (
|
|
1673
|
+
qid, language, label, description, pages_json, checked_at, updated_at
|
|
1674
|
+
)
|
|
1675
|
+
SELECT qid, 'en', label, description, pages_json, checked_at, updated_at
|
|
1676
|
+
FROM qid_cache_legacy
|
|
1677
|
+
`),await t.run("DROP TABLE qid_cache_legacy"))})}async function iD(t){(await na(t,"disambiguation_cache")).has("wiki")||await t.transaction(async()=>{(await na(t,"disambiguation_cache")).has("wiki")||(await t.run("ALTER TABLE disambiguation_cache RENAME TO disambiguation_cache_legacy"),await t.run($S),await t.run(`
|
|
1678
|
+
INSERT OR IGNORE INTO disambiguation_cache (
|
|
1679
|
+
qid, wiki, pages_json, profile_json, checked_at
|
|
1680
|
+
)
|
|
1681
|
+
SELECT qid, 'enwiki', pages_json, profile_json, checked_at
|
|
1682
|
+
FROM disambiguation_cache_legacy
|
|
1683
|
+
`),await t.run("DROP TABLE disambiguation_cache_legacy"))}),(await na(t,"disambiguation_cache")).has("profile_error_json")||await t.run("ALTER TABLE disambiguation_cache ADD COLUMN profile_error_json TEXT")}async function na(t,e){let r=await t.queryAll(`PRAGMA table_info(${e})`,void 0,n=>Mt(n.name,"name"));return new Set(r)}async function aD(t){let e=await Ms(t,"qid_cache"),r=await Ms(t,"disambiguation_cache");return e+r}async function oD(t,e){let r=await Ms(t,"qid_cache",e),n=await Ms(t,"disambiguation_cache",e);return r+n}async function Ms(t,e,r){return await t.queryOne(`
|
|
1684
|
+
SELECT COUNT(*) AS count
|
|
1685
|
+
FROM ${e}
|
|
1686
|
+
${r===void 0?"":"WHERE checked_at < ?"}
|
|
1687
|
+
`,r===void 0?void 0:[r],n=>y(n,"count"))??0}async function HS(t){try{return(await eD(t)).size}catch(e){if(w(e)&&e.code==="ENOENT")return;throw e}}function sD(t){let e=ia(t.description),r=ia(t.label);return{checkedAt:Mt(t.checked_at,"checked_at"),...e===void 0?{}:{description:e},...r===void 0?{}:{label:r},qid:Mt(t.qid,"qid"),sitelinks:uD(Mt(t.pages_json,"pages_json")),updatedAt:Mt(t.updated_at,"updated_at")}}function cD(t){let e=ia(t.profile_error_json),r=e===void 0?void 0:fD(e);return{checkedAt:Mt(t.checked_at,"checked_at"),disambiguationQid:Mt(t.qid,"qid"),pages:lD(Mt(t.pages_json,"pages_json")),...r===void 0?{}:{profileError:r},...ia(t.profile_json)===void 0?{}:{profile:hD(ia(t.profile_json))}}}function dD(t){if(t===void 0)return!1;let e=Date.parse(t.retryAfter);return Number.isFinite(e)&&e<=Date.now()}function uD(t){let e=JSON.parse(t);return Array.isArray(e)?e.filter(mD):[]}function lD(t){let e=JSON.parse(t);return Array.isArray(e)?e.filter(pD):[]}function mD(t){if(typeof t!="object"||t===null)return!1;let e=t;return typeof e.isDisambiguation=="boolean"&&typeof e.title=="string"&&e.title!==""&&zS(e.wiki)}function pD(t){if(typeof t!="object"||t===null)return!1;let e=t;return Array.isArray(e.linkedQids)&&e.linkedQids.every(SD)&&typeof e.text=="string"&&e.text!==""&&typeof e.title=="string"&&e.title!==""&&zS(e.wiki)}function hD(t){let e=JSON.parse(t);if(!yD(e))throw new Error("Expected profile_json to contain a disambiguation profile.");return e}function fD(t){let e=JSON.parse(t);if(bD(e))return e}function yD(t){if(typeof t!="object"||t===null)return!1;let e=t;return Array.isArray(e.meanings)&&e.meanings.every(gD)&&typeof e.sourceQid=="string"&&/^Q[1-9]\d*$/u.test(e.sourceQid)&&(!("surface"in e)||typeof e.surface=="string")}function gD(t){if(typeof t!="object"||t===null)return!1;let e=t;return(!("category"in e)||typeof e.category=="string")&&typeof e.information=="string"&&typeof e.name=="string"&&e.name!==""&&(e.priority==="primary"||e.priority==="secondary"||e.priority==="other")&&typeof e.qid=="string"&&/^Q[1-9]\d*$/u.test(e.qid)}function bD(t){if(typeof t!="object"||t===null)return!1;let e=t;return typeof e.failedAt=="string"&&typeof e.message=="string"&&typeof e.retryAfter=="string"}function SD(t){if(typeof t!="object"||t===null)return!1;let e=t;return typeof e.qid=="string"&&/^Q[1-9]\d*$/u.test(e.qid)&&typeof e.title=="string"&&e.title!==""}function zS(t){return t==="enwiki"||t==="zhwiki"}function Mt(t,e){if(typeof t!="string")throw new Error(`Expected ${e} to be a string.`);return t}function ia(t){return typeof t=="string"&&t!==""?t:void 0}var qS,$S,KS,tD,wn,Xl=d(()=>{"use strict";se();x();L();T();qS=`
|
|
1688
|
+
CREATE TABLE IF NOT EXISTS qid_cache (
|
|
1689
|
+
qid TEXT NOT NULL,
|
|
1690
|
+
language TEXT NOT NULL,
|
|
1691
|
+
label TEXT,
|
|
1692
|
+
description TEXT,
|
|
1693
|
+
pages_json TEXT NOT NULL,
|
|
1694
|
+
checked_at TEXT NOT NULL,
|
|
1695
|
+
updated_at TEXT NOT NULL,
|
|
1696
|
+
PRIMARY KEY (qid, language)
|
|
1697
|
+
);
|
|
1698
|
+
`,$S=`
|
|
1699
|
+
CREATE TABLE IF NOT EXISTS disambiguation_cache (
|
|
1700
|
+
qid TEXT NOT NULL,
|
|
1701
|
+
wiki TEXT NOT NULL,
|
|
1702
|
+
pages_json TEXT NOT NULL,
|
|
1703
|
+
profile_json TEXT,
|
|
1704
|
+
profile_error_json TEXT,
|
|
1705
|
+
checked_at TEXT NOT NULL,
|
|
1706
|
+
PRIMARY KEY (qid, wiki)
|
|
1707
|
+
);
|
|
1708
|
+
`,KS=`
|
|
1709
|
+
${qS}
|
|
1710
|
+
|
|
1711
|
+
CREATE INDEX IF NOT EXISTS idx_qid_cache_checked_at
|
|
1712
|
+
ON qid_cache(checked_at);
|
|
1713
|
+
|
|
1714
|
+
${$S}
|
|
1715
|
+
|
|
1716
|
+
CREATE INDEX IF NOT EXISTS idx_disambiguation_cache_checked_at
|
|
1717
|
+
ON disambiguation_cache(checked_at);
|
|
1718
|
+
`,tD=720*60*60*1e3,wn=class t{#e;constructor(e){this.#e=e}static async open(e){let r=e??Dr(),n=await A(r,KS);try{await JS(n)}catch(i){throw await n.close().catch(()=>{}),i}return new t(n)}async close(){await this.#e.close()}async getQids(e,r){if(e.length===0)return new Map;let n=new Map;for(let i of e){let a=await this.#e.queryOne(`
|
|
1719
|
+
SELECT *
|
|
1720
|
+
FROM qid_cache
|
|
1721
|
+
WHERE qid = ? AND language = ?
|
|
1722
|
+
`,[i,r],sD);a!==void 0&&n.set(i,a)}return n}async putQids(e,r){e.length!==0&&await this.#e.transaction(async()=>{for(let n of e)await this.#e.run(`
|
|
1723
|
+
INSERT INTO qid_cache (
|
|
1724
|
+
qid, language, label, description, pages_json, checked_at, updated_at
|
|
1725
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
1726
|
+
ON CONFLICT(qid, language) DO UPDATE SET
|
|
1727
|
+
label = excluded.label,
|
|
1728
|
+
description = excluded.description,
|
|
1729
|
+
pages_json = excluded.pages_json,
|
|
1730
|
+
checked_at = excluded.checked_at,
|
|
1731
|
+
updated_at = excluded.updated_at
|
|
1732
|
+
`,[n.qid,r,n.label??null,n.description??null,JSON.stringify(n.sitelinks),n.checkedAt,n.updatedAt])})}async getDisambiguations(e,r){if(e.length===0)return new Map;let n=new Map;for(let i of e){let a=await this.#e.queryOne(`
|
|
1733
|
+
SELECT *
|
|
1734
|
+
FROM disambiguation_cache
|
|
1735
|
+
WHERE qid = ? AND wiki = ?
|
|
1736
|
+
`,[i,r],cD);if(a!==void 0){if(dD(a.profileError))continue;n.set(i,a)}}return n}async putDisambiguations(e,r){e.length!==0&&await this.#e.transaction(async()=>{for(let n of e)await this.#e.run(`
|
|
1737
|
+
INSERT INTO disambiguation_cache (
|
|
1738
|
+
qid, wiki, pages_json, profile_json, profile_error_json, checked_at
|
|
1739
|
+
) VALUES (?, ?, ?, ?, ?, ?)
|
|
1740
|
+
ON CONFLICT(qid, wiki) DO UPDATE SET
|
|
1741
|
+
pages_json = excluded.pages_json,
|
|
1742
|
+
profile_json = excluded.profile_json,
|
|
1743
|
+
profile_error_json = excluded.profile_error_json,
|
|
1744
|
+
checked_at = excluded.checked_at
|
|
1745
|
+
`,[n.disambiguationQid,r,JSON.stringify(n.pages),n.profile===void 0?null:JSON.stringify(n.profile),n.profileError===void 0?null:JSON.stringify(n.profileError),n.checkedAt])})}}});var O,we,aa,En,oa,pt,Vl=d(()=>{"use strict";O=class extends Error{issues;constructor(e){super(`Parse failed with ${e.length} issue(s)`),this.name="ParsedJsonError",this.issues=[...e]}},we=class extends Error{attempts;maxRetries;constructor(e,r,n){super(e),this.name="GuaranteedRequestFailureError",this.attempts=r,this.maxRetries=n}},aa=class extends we{constructor(e,r){super("LLM returned empty response after all retries",e,r),this.name="GuaranteedEmptyResponseError"}},En=class extends we{response;reason;constructor(e,r,n){super(`Suspected model refusal after ${e} JSON syntax error attempt(s): ${n.reason}. Last response: ${JSON.stringify(n.response)}`,e,r),this.name="SuspectedModelRefusalError",this.response=n.response,this.reason=n.reason}},oa=class extends we{issues;response;constructor(e,r,n,i){super("Schema validation failed after all retries",e,r),this.name="GuaranteedSchemaValidationError",this.issues=[...n.issues],this.response=n.response,this.cause=i}},pt=class extends we{issues;response;constructor(e,r,n,i){super("Parse validation failed after all retries",e,r),this.name="GuaranteedParseValidationError",this.issues=[...n.issues],this.response=n.response,this.cause=i}}});function QS(t,e){return[{role:"system",content:t},{role:"user",content:e}]}function XS(t){let e=t.trim();return e===""?"ambiguous":ED(e)?"malformed_json":xD(e)?"natural_language":Yl(e)?"ambiguous":YS(e)?"natural_language":"ambiguous"}function VS(t){let e=t.trim().toLowerCase();return e.includes("malformed_json")?"malformed_json":e.includes("natural_language")?"natural_language":(e.includes("ambiguous"),"ambiguous")}function ED(t){return/^(?:```json\b|```|{|\[)/i.test(t)||/"[^"\r\n]+"\s*:/.test(t)||Yl(t)&&ID(t)}function Yl(t){let e=(t.match(/[{}[\]:,]/g)??[]).length+(t.match(/"/g)??[]).length;return/:\s/.test(t)||e>=3||kD(t)||/[:,]\s*$/.test(t)}function kD(t){return Ws(t,"{")!==Ws(t,"}")||Ws(t,"[")!==Ws(t,"]")}function ID(t){return/[:, "{[]\s*$/.test(t)}function xD(t){return wD.some(e=>e.test(t))?!0:!Yl(t)&&YS(t)}function YS(t){return/[\p{Script=Han}A-Za-z]/u.test(t)&&!/^[{[]/.test(t)&&!/"[^"\r\n]+"\s*:/.test(t)}function Ws(t,e){return t.split(e).length-1}var ee,wD,Zl=d(()=>{"use strict";ee="guaranteed/response_intent_classifier",wD=[/\b(?:sorry|apologies)\b/i,/\b(?:i\s+can(?:not|'t)|unable\s+to|do\s+not\s+understand)\b/i,/\b(?:cannot\s+answer|can't\s+answer|can't\s+help)\b/i,/\bno\s+relevant\s+result/i,/抱歉/,/无法回答/,/无法识别/,/无法给到/,/没有找到相关的结果/]});import{jsonrepair as RD}from"jsonrepair";function ZS(t){let e=t.replace(/```(?:json)?\s*\n(.*?)\n```/gs,"$1"),r=e.match(/\[[\s\S]*\]/),n=e.match(/\{[\s\S]*\}/);return r?.index!==void 0&&r[0]!==void 0&&(n?.index===void 0||r.index<n.index)?r[0]:n?.[0]!==void 0?n[0]:e.trim()}function ew(t){try{return RD(t)}catch{return t}}function tw(t){return["Your JSON has a syntax error.",`Error: ${t.message}`,"","Common issues:","- Trailing commas in arrays or objects",'- Unescaped quotes in strings, for example: "He said \\"hi\\""','- Single quotes instead of double quotes, for example: {"key": "value"}',"- Missing commas between items","","Regenerate the complete and valid JSON directly. Do not add explanations or markdown fences."].join(`
|
|
1746
|
+
`)}function rw(t){return["Your previous reply looked like malformed JSON.",`Error: ${t.message}`,"","Return complete and valid JSON directly.","Do not answer conversationally.","Do not add explanations or markdown fences."].join(`
|
|
1747
|
+
`)}function em(){return["Your previous reply was plain natural language, not a JSON object or array.","","Do not apologize or explain.","Do not answer conversationally.","Return complete and valid JSON directly."].join(`
|
|
1748
|
+
`)}function nw(t){return["Your JSON has structural issues.","",...t.issues.map(ow),"","Regenerate the complete and valid JSON directly. Do not add explanations."].join(`
|
|
1749
|
+
`)}function iw(t){return t.issues.map(ow)}function aw(t){return["Your JSON has the following issues.","",...t.map(r=>`- ${r}`),"","Regenerate the complete and valid JSON directly. Do not add explanations."].join(`
|
|
1750
|
+
`)}function ow(t){return`- **${t.path.length===0?"<root>":t.path.join(".")}**: ${t.message}`}var sw=d(()=>{"use strict"});async function z(t){let e=[...t.messages],r=[...t.messages],n=0,i=0,a=t.maxRetries??uw;for(let o=0;o<=a;o+=1){let s=await t.request(r,o,a);if(s===void 0||s.trim()===""){if(o>=a)throw new aa(o+1,a);continue}let c;try{let l=ZS(s),m=ew(l);c=JSON.parse(m)}catch(l){let m=await dw(t,s,o);if(m==="natural_language"){if(n+=1,i=0,n>=2||o>=a){let p=o>=a?"last retry still returned natural-language content":"two consecutive retries returned natural-language content";throw new En(o+1,a,{response:s,reason:p})}r=sa(e,s,em(),!1);continue}n=0,i+=1,r=sa(e,s,m==="malformed_json"?rw(cw(l)):tw(cw(l)),i<vD);continue}n=0,i=0;let u=await t.schema.safeParseAsync(c);if(!u.success){if(TD(u.error,c)&&await dw(t,s,o)==="natural_language"){if(n+=1,i=0,n>=2||o>=a){let p=o>=a?"last retry still returned natural-language content":"two consecutive retries returned natural-language content";throw new En(o+1,a,{response:s,reason:p})}r=sa(e,s,em(),!1);continue}n=0;let l=nw(u.error);if(o>=a)throw new oa(o+1,a,{issues:iw(u.error),response:s},u.error);r=sa(e,s,l,!0);continue}try{return await t.parse(u.data,o,a)}catch(l){if(!(l instanceof O))throw l;let m=aw(l.issues);if(o>=a)throw new pt(o+1,a,{issues:l.issues,response:s},l);r=sa(e,s,m,!0)}}throw new Error("requestGuaranteedJson failed unexpectedly")}function sa(t,e,r,n){return[...t,...n?[{role:"assistant",content:e}]:[],{role:"user",content:r}]}function cw(t){return t instanceof SyntaxError?t:new SyntaxError(String(t))}async function dw(t,e,r){let n=XS(e);if(n!=="ambiguous")return n;try{let i=await t.request(QS(t.responseIntentClassifierPrompt,e),r,t.maxRetries??uw);if(i===void 0||i.trim()==="")return"natural_language";let a=VS(i);return a==="ambiguous"?"natural_language":a}catch{return"natural_language"}}function TD(t,e){return _D(e)?t.issues.some(r=>r.code==="invalid_type"&&r.path.length===0&&(r.expected==="object"||r.expected==="array")):!1}function _D(t){return t===null||typeof t!="object"&&typeof t!="function"}var uw,vD,lw=d(()=>{"use strict";Zl();Vl();sw();uw=12,vD=3});var Ie=d(()=>{"use strict";Vl();Zl();lw()});import{z as xe}from"zod";function Fs(t){return async e=>await z({messages:OD(e,t.maxMeanings??24),parse:r=>AD(e,LD(r)),request:t.request,responseIntentClassifierPrompt:ee,schema:PD,...t.maxRetries===void 0?{}:{maxRetries:t.maxRetries}})}function LD(t){return{meanings:t.meanings.map(e=>({...e.category===void 0?{}:{category:e.category},information:e.information,name:e.name,priority:e.priority,qid:e.qid})),sourceQid:t.sourceQid,...t.surface===void 0?{}:{surface:t.surface}}}function AD(t,e){let r=new Set(t.pageQidLinks.map(o=>o.qid)),n=[],i=new Set,a=[];e.sourceQid!==t.sourceQid&&n.push(`sourceQid must be ${t.sourceQid}, but got ${e.sourceQid}.`);for(let o of e.meanings)if(!(o.qid===null||o.qid==="")){if(!r.has(o.qid)){n.push(`Meaning "${o.name}" selected qid ${o.qid}, but it is not present in the input disambiguation page links.`);continue}if(i.has(o.qid)){n.push(`Duplicate meaning qid ${o.qid}. Return each QID once.`);continue}i.add(o.qid),a.push({...o.category===void 0?{}:{category:o.category},information:o.information,name:o.name,priority:o.priority,qid:o.qid})}if(a.length===0&&n.push("Return at least one meaning from the pageQidLinks list."),n.length>0)throw new O(n);return{meanings:a,sourceQid:t.sourceQid,...e.surface===void 0?{}:{surface:e.surface}}}function OD(t,e){return[{role:"system",content:["You normalize Wikipedia disambiguation pages for entity grounding.","Return JSON only.","Do not invent QIDs, pages, people, places, works, or meanings.","Only use QIDs from the pageQidLinks list.","Only include meanings whose target has a QID in pageQidLinks.","Omit disambiguation bullets or page items that have no QID link.","Never use null, empty strings, placeholder QIDs, or made-up QIDs.","The information field must only copy or summarize text present on the disambiguation page itself.","Do not use Wikidata descriptions or external knowledge to fill information.","When a bullet contains multiple links, treat administrative divisions, parent locations, categories, and locator/explanatory links as context only.","Do not include context-only links as meanings unless the link itself is the disambiguated target.","Prefer common and context-independent meanings over exhaustive long-tail lists."].join(`
|
|
1751
|
+
`)},{role:"user",content:[`Source QID: ${t.sourceQid}`,t.surface===void 0?"":`Surface: ${t.surface}`,`Maximum meanings: ${e}`,"","Page QID links:",JSON.stringify(t.pageQidLinks.map(ND),null,2),"","Structured disambiguation pages:",JSON.stringify(t.pages.map(DD),null,2),"","Disambiguation page text:",t.pages.map(r=>`--- ${r.wiki}:${r.title} ---
|
|
1752
|
+
${jD(r.text)}`).join(`
|
|
1753
|
+
|
|
1754
|
+
`),"","Return this JSON shape:",JSON.stringify({meanings:[{category:"person | place | organization | work | concept | event | other",information:"short information copied or summarized from the disambiguation page; empty string if no information is present",name:"display name",priority:"primary | secondary | other",qid:"QID from pageQidLinks"}],sourceQid:t.sourceQid,...t.surface===void 0?{}:{surface:t.surface}},null,2)].filter(r=>r!=="").join(`
|
|
1755
|
+
`)}]}function ND(t){return{qid:t.qid,title:t.title}}function DD(t){return{...t.pageId===void 0?{}:{pageid:t.pageId},items:MD(t.text),title:t.title,wiki:t.wiki}}function MD(t){return t.split(`
|
|
1756
|
+
`).map(e=>e.trim()).filter(e=>e.startsWith("* ")).map(e=>({links:WD(e),text:FD(e.slice(2).trim())}))}function WD(t){return[...t.matchAll(mw)].map(e=>({label:e[1],qid:e[2]}))}function FD(t){return t.replace(mw,"$1")}function jD(t){return t.length<=16e3?t:`${t.slice(0,16e3)}
|
|
1757
|
+
|
|
1758
|
+
[truncated]`}var CD,PD,mw,pw=d(()=>{"use strict";Ie();CD=xe.object({category:xe.string().min(1).optional(),information:xe.string(),name:xe.string().min(1),priority:xe.enum(["primary","secondary","other"]),qid:xe.union([xe.string(),xe.null()])}).strict(),PD=xe.object({meanings:xe.array(CD),sourceQid:xe.string().regex(/^Q[1-9]\d*$/u),surface:xe.string().min(1).optional()}).strict();mw=/\[\[([^\]|]+)\|wikg:\/\/qid=(Q[1-9]\d*)\]\]/gu});async function GD(t){await new Promise(e=>{setTimeout(e,t)})}function js(t){if(t===null||t.trim()==="")return;let e=Number(t);if(Number.isFinite(e))return Math.max(0,e*1e3);let r=Date.parse(t);if(!Number.isNaN(r))return Math.max(0,r-Date.now())}var kn,tm=d(()=>{"use strict";kn=class{#e;#t;#r=0;#n=0;#i=0;#a=[];constructor(e){this.#e=Math.max(1,Math.floor(e.concurrency)),this.#t=Math.max(0,Math.floor(e.minRequestIntervalMs))}async use(e){await this.#o();try{return await e()}finally{this.#r-=1,this.#c()}}blockFor(e){!Number.isFinite(e)||e<=0||(this.#n=Math.max(this.#n,Date.now()+e))}async#o(){await new Promise(e=>{this.#a.push(e),this.#c()}),await this.#s(),this.#r+=1,this.#i=Date.now()}async#s(){let e=Math.max(0,this.#n-Date.now()),r=Math.max(0,this.#i+this.#t-Date.now()),n=Math.max(e,r);n>0&&await GD(n)}#c(){if(this.#r>=this.#e)return;let e=this.#a.shift();e!==void 0&&e()}}});import{createHash as BD}from"crypto";import{appendFile as UD}from"fs/promises";function hw(t){if(t===void 0)return new Gs;let e=Fd({category:"wikipage",fileName:"wikipage-fetch.jsonl",logDirPath:t});return e===void 0?new Gs:new im(e)}function HD(t){return{action:t.url.searchParams.get("action")??null,attempt:t.attempt,batch:qD(t.url),durationMs:t.durationMs,endpoint:`${t.url.origin}${t.url.pathname}`,host:t.url.host,ok:t.response?.ok??!1,startedAt:new Date(t.startedAt).toISOString(),...t.response===void 0?{}:{retryAfter:t.response.headers.get("retry-after"),status:t.response.status},...t.error===void 0?{}:{error:$D(t.error)},...t.responseText===void 0?{}:{responseText:QD(t.responseText)}}}function qD(t){let e=t.searchParams.get("ids");if(e!==null)return nm("qid",e.split("|"));let r=t.searchParams.get("titles");if(r!==null)return nm("title",r.split("|"));let n=t.searchParams.get("page");if(n!==null)return nm("page",[n])}function nm(t,e){let r=e.join("|");return{count:e.length,hash:BD("sha256").update(r).digest("hex").slice(0,16),kind:t,sample:e.slice(0,5)}}function $D(t){return{message:ae(t),name:t instanceof Error?t.name:typeof t,...KD(t)}}function KD(t){if(!(t instanceof Error)||t.cause===void 0)return{};let e=t.cause;return{cause:e instanceof Error?{message:ae(e),name:e.name,...zD(e)}:JD(e)}}function JD(t){if(typeof t=="string")return t;if(typeof t=="number"||typeof t=="boolean"||typeof t=="bigint"||typeof t=="symbol")return t.toString();try{return JSON.stringify(t)}catch{return"unserializable error cause"}}function zD(t){let e=t.code;return typeof e=="string"?{code:e}:{}}function QD(t){return t.length<=rm?t:`${t.slice(0,rm)}
|
|
1759
|
+
[truncated ${t.length-rm} chars]`}var rm,Gs,im,fw=d(()=>{"use strict";_e();T();rm=16384,Gs=class{filePath=void 0;append(){return Promise.resolve()}warnFailed(){}},im=class{#e;#t=!1;constructor(e){this.#e=e}get filePath(){return this.#e}async append(e){await UD(this.#e,`${JSON.stringify(HD(e))}
|
|
1760
|
+
`,"utf8")}warnFailed(){this.#t||(this.#t=!0,Te({component:"wikipage"}).warn(`
|
|
1761
|
+
[Wikipage] Failed with fetch log: ${this.#e}`))}}});function te(t){return typeof t=="object"&&t!==null?t:{}}function yw(t){return Array.isArray(t)?t:[]}function ht(t){return typeof t=="string"&&t!==""?t:void 0}function ca(t){return typeof t=="number"&&Number.isFinite(t)?t:void 0}function da(t,e){let r=t;for(let n of e)r=te(r)[n];return ht(r)}var Bs=d(()=>{"use strict"});import{DomUtils as XD,parseDocument as VD}from"htmlparser2";function gw(t,e){return t.replace(/\[\[([^\]|]+)\|wikigraph-title:\/\/([^\]\s]+)\]\]/gu,(r,n,i)=>{let a=decodeURIComponent(i),o=e.get(a);return o===void 0?n:`[[${n}|wikg://qid=${o}]]`})}function bw(t){if(t===void 0||t.trim()==="")return{linkedTitles:[],text:""};let e=new Set,r=VD(t),n=hr(XD.getChildren(r),{linkedTitles:e,listDepth:0}).replace(/[ \t]+\n/gu,`
|
|
1762
|
+
`).replace(/\n{3,}/gu,`
|
|
1763
|
+
|
|
1764
|
+
`).trim();return{linkedTitles:[...e],text:n}}function hr(t,e){return t.map(r=>ZD(r,e)).join("")}function ZD(t,e){let r=te(t),n=ht(r.type);if(n==="text")return iM(ht(r.data)??"");if(n!=="tag"&&n!=="script"&&n!=="style")return"";let i=t;if(rM(i))return"";let a=i.name.toLowerCase();if(a==="a")return eM(i,e);if(/^h[1-6]$/u.test(a)){let o=Math.min(6,Math.max(1,Number(a.slice(1)))),s="=".repeat(o),c=hr(i.children??[],e).trim();return c===""?"":`
|
|
1765
|
+
${s} ${c} ${s}
|
|
1766
|
+
`}if(a==="li"){let o=" ".repeat(Math.max(0,e.listDepth-1)),s=hr(i.children??[],{...e,listDepth:e.listDepth+1}).trim();return s===""?"":`
|
|
1767
|
+
${o}* ${s}`}if(a==="ul"||a==="ol")return`${hr(i.children??[],e)}
|
|
1768
|
+
`;if(nM(a)){let o=hr(i.children??[],e).trim();return o===""?"":`
|
|
1769
|
+
${o}
|
|
1770
|
+
`}return hr(i.children??[],e)}function eM(t,e){let r=hr(t.children??[],e).trim(),n=tM(t);return n===void 0?r:(e.linkedTitles.add(n),`[[${r===""?n:r}|${YD}${encodeURIComponent(n)}]]`)}function tM(t){let e=t.attribs.title,r=t.attribs.href;if(e!==void 0&&e!==""&&!e.includes(":"))return e;if(r===void 0||!r.startsWith("/wiki/"))return;let n=decodeURIComponent(r.slice(6)).replaceAll("_"," ");return n===""||n.includes(":")?void 0:n}function rM(t){let e=t.name.toLowerCase();if(["script","style","table","sup"].includes(e))return!0;let r=t.attribs.class??"";return["catlinks","metadata","mw-editsection","mw-empty-elt","navbox","noprint","reference","reflist","shortdescription","toc"].some(n=>r.split(/\s+/u).includes(n))}function nM(t){return["blockquote","br","dd","div","dl","dt","p","section"].includes(t)}function iM(t){return t.replace(/\s+/gu," ")}var YD,am=d(()=>{"use strict";Bs();YD="wikigraph-title://"});function Sw(t){let e=t.headers.get("content-type");return e===null?!1:/(?:json|text|xml|javascript|html)/iu.test(e)}function ww(t){return t instanceof In?t.status===429||t.status===500||t.status===502||t.status===503||t.status===504:t instanceof TypeError}function Ew(t,e,r){if(t instanceof In&&t.retryAfterMs!==void 0)return t.retryAfterMs;if(r<=0)return 0;let n=r*2**e,i=Math.floor(Math.random()*Math.min(r,250));return n+i}async function kw(t){t<=0||await new Promise(e=>{setTimeout(e,t)})}var In,Iw=d(()=>{"use strict";In=class extends Error{retryAfterMs;status;url;constructor(e,r,n){super(`Wikimedia request failed with ${r}: ${e.toString()}`),this.retryAfterMs=n,this.status=r,this.url=e}}});function xw(t){return[...new Set([t,"zh","en"])].join("|")}function ua(t,e){for(let r of[e,"zh","en"]){let n=da(t,[r,"value"]);if(n!==void 0)return n}}function sm(t){return t==="zhwiki"?"https://zh.wikipedia.org/":"https://en.wikipedia.org/"}function Rw(t){return t==="zhwiki"||t==="enwiki"?t:void 0}var om,cm=d(()=>{"use strict";Bs();om=["zhwiki","enwiki"]});var xn,vw=d(()=>{"use strict";_e();T();tm();am();Bs();Iw();cm();xn=class{#e;#t;#r;#n;#i;#a;#o;#s;constructor(e){this.#e=e.fetch??fetch,this.#t=e.language,this.#n=e.requestLog,this.#s=e.wiki,this.#o=e.userAgent,this.#i=Math.max(0,Math.floor(e.retryBaseDelayMs)),this.#a=Math.max(0,Math.floor(e.retryTimes)),this.#r=new kn({concurrency:e.concurrency,minRequestIntervalMs:e.minRequestIntervalMs})}async getEntities(e){if(e.length===0)return new Map;let r=new URL("https://www.wikidata.org/w/api.php");r.searchParams.set("action","wbgetentities"),r.searchParams.set("ids",e.join("|")),r.searchParams.set("props","labels|descriptions|sitelinks"),r.searchParams.set("languages",xw(this.#t)),r.searchParams.set("sitefilter",om.join("|")),r.searchParams.set("format","json"),r.searchParams.set("formatversion","2");let n=await this.#c(r),i=te(n.entities),a=new Map;for(let o of e){let s=te(i[o]),c=te(s.labels),u=te(s.descriptions);a.set(o,{...ua(c,this.#t)===void 0?{}:{label:ua(c,this.#t)},...ua(u,this.#t)===void 0?{}:{description:ua(u,this.#t)},qid:o,sitelinks:om.flatMap(l=>{let m=da(s,["sitelinks",l,"title"]);return m===void 0?[]:[{title:m,wiki:l}]})})}return a}async getPagesByTitles(e,r=Rw(this.#s)??"enwiki"){if(e.length===0)return new Map;let n=new URL(`${sm(r)}w/api.php`);n.searchParams.set("action","query"),n.searchParams.set("titles",e.join("|")),n.searchParams.set("prop","pageprops"),n.searchParams.set("ppprop","disambiguation|wikibase_item"),n.searchParams.set("format","json"),n.searchParams.set("formatversion","2");let i=await this.#c(n),a=yw(te(te(i.query).pages)),o=new Map;for(let s of a){let c=te(s),u=ht(c.title);u!==void 0&&o.set(u,{isDisambiguation:te(c.pageprops).disambiguation!==void 0,...ca(c.pageid)===void 0?{}:{pageId:ca(c.pageid)},title:u,wiki:r,...ht(te(c.pageprops).wikibase_item)===void 0?{}:{wikibaseItem:ht(te(c.pageprops).wikibase_item)}})}return o}async parseDisambiguationPage(e,r){let n=new URL(`${sm(r)}w/api.php`);n.searchParams.set("action","parse"),n.searchParams.set("page",e),n.searchParams.set("prop","text|properties"),n.searchParams.set("format","json"),n.searchParams.set("formatversion","2");let i=await this.#c(n),a=te(i.parse),o=bw(da(a,["text"]));return{linkedTitles:o.linkedTitles,...ca(a.pageid)===void 0?{}:{pageId:ca(a.pageid)},text:o.text,title:ht(a.title)??e,wiki:r}}async#c(e){let r;for(let n=0;n<=this.#a;n+=1)try{return await this.#r.use(async()=>await this.#l(e,n+1))}catch(i){if(r=i,!ww(i)||n>=this.#a)throw this.#n.warnFailed(),i;await kw(Ew(i,n,this.#i))}throw r instanceof Error?r:new Error(String(r))}async#l(e,r){let n=Date.now(),i;try{i=await this.#e(e,this.#o===void 0?void 0:{headers:{"User-Agent":this.#o}})}catch(o){throw await this.#u({attempt:r,durationMs:Date.now()-n,error:o,startedAt:n,url:e}),o}let a=js(i.headers.get("retry-after"));if(a!==void 0&&this.#r.blockFor(a),!i.ok){let o=Sw(i)?await i.text():void 0;throw await this.#u({attempt:r,durationMs:Date.now()-n,response:i,...o===void 0?{}:{responseText:o},startedAt:n,url:e}),new In(e,i.status,a)}return await this.#u({attempt:r,durationMs:Date.now()-n,response:i,startedAt:n,url:e}),te(await i.json())}async#u(e){try{await this.#n.append(e)}catch(r){Te({component:"wikipage"}).warn(`Failed to write wikipage fetch log entry: ${ae(r)}`)}}}});var dm=d(()=>{"use strict";vw();am();cm()});function pM(t,e,r,n){return{checkedAt:n,...e?.description===void 0?{}:{description:e.description},...e?.label===void 0?{}:{label:e.label},qid:t,sitelinks:e?.sitelinks.flatMap(i=>{let a=r.get(Cw(i.wiki,i.title));return a===void 0?[]:[{isDisambiguation:a.isDisambiguation,...a.pageId===void 0?{}:{pageId:a.pageId},title:a.title,wiki:a.wiki}]})??[],updatedAt:n}}function hM(t){return{checkedAt:t.checkedAt,disambiguationQid:t.disambiguationQid,linkedQids:Tw(t.pages),pages:t.pages,...t.profile===void 0?{}:{profile:t.profile}}}function Tw(t){let e=new Map;for(let r of t)for(let n of r.linkedQids)e.set(n.qid,n);return[...e.values()]}function fM(t){let e=0;for(let r of t.values())e+=r.size;return e}function yM(t){return t.sitelinks.some(e=>e.isDisambiguation)}function gM(t,e){let r=t.find(n=>n.wiki===e)??t[0];return r===void 0?void 0:_w(r)}function _w(t){return{title:t.title,wiki:t.wiki}}function bM(t){return"close"in t&&typeof t.close=="function"}function Cw(t,e){return`${t}:${e}`}function SM(t){return[...new Set(t.map(e=>e.trim().toUpperCase()).filter(e=>/^Q[1-9]\d*$/u.test(e)))]}function wM(t){let e=t?.trim().toLowerCase();return e==="en"||e==="zh"?e:oM}function EM(t){return t===void 0||!Number.isFinite(t)?sM:Math.max(1,Math.floor(t))}function um(t,e){let r=[];for(let n=0;n<t.length;n+=e)r.push(t.slice(n,n+e));return r}var aM,oM,sM,cM,dM,uM,lM,mM,fr,Pw=d(()=>{"use strict";Xl();fw();Ie();dm();aM=3,oM="zh",sM=50,cM=100,dM=1e3,uM=3,lM="WikiGraph/0.3 (https://github.com/oomol-lab/wiki-graph)",mM=360*60*1e3,fr=class t{#e;#t;#r;#n;#i;#a;#o;#s;constructor(e){this.#e=e.client,this.#r=e.language,this.#t=e.maxBatchSize,this.#n=e.normalizer,this.#i=e.ownsStore??!1,this.#a=e.progress,this.#o=e.store,this.#s=e.wiki}static async open(e={}){let r=wM(e.language),n=e.wiki??`${r}wiki`,i=await wn.open(e.cacheDatabasePath);return new t({client:new xn({concurrency:e.concurrency??aM,language:r,requestLog:hw(e.logDirPath),minRequestIntervalMs:e.minRequestIntervalMs??cM,retryBaseDelayMs:e.retryBaseDelayMs??dM,retryTimes:e.retryTimes??uM,userAgent:e.userAgent??lM,wiki:n,...e.fetch===void 0?{}:{fetch:e.fetch}}),language:r,maxBatchSize:EM(e.maxBatchSize),normalizer:e.normalizer,ownsStore:!0,progress:e.progress,store:i,wiki:n})}async close(){this.#i&&bM(this.#o)&&await this.#o.close()}async resolveQids(e){let r=SM(e),n=await this.#c(r),i=await this.#u([...n.values()].filter(yM));return r.map(a=>{let o=n.get(a);if(o===void 0)return{isDisambiguation:!1,qid:a};let s=i.get(a),c=s?.pages??[],u=gM(o.sitelinks,this.#s);return{...o.description===void 0?{}:{description:o.description},...s===void 0?{}:{disambiguation:hM(s)},...c.length===0?{}:{disambiguationPages:c},isDisambiguation:c.length>0,...o.label===void 0?{}:{label:o.label},qid:a,...u===void 0?{}:{sitelink:u},...o.sitelinks.length===0?{}:{sitelinks:o.sitelinks.map(_w)}}})}async#c(e){let r=new Map(await this.#o.getQids(e,this.#r)),n=e.filter(o=>!r.has(o)),i=r.size,a=0;await this.#m("qid",i,e.length);for(let o of um(n,this.#t)){let s=await this.#e.getEntities(o);a+=o.length,await this.#m("entity",a,n.length);let c=await this.#l(s),u=new Date().toISOString(),l=o.map(m=>pM(m,s.get(m),c,u));await this.#o.putQids(l,this.#r);for(let m of l)r.set(m.qid,m);i+=o.length,await this.#m("qid",i,e.length)}return r}async#l(e){let r=new Map,n=new Map;for(let i of e.values())for(let a of i.sitelinks){let o=n.get(a.wiki)??new Set;o.add(a.title),n.set(a.wiki,o)}for(let[i,a]of n)for(let o of um([...a],this.#t)){for(let[s,c]of await this.#e.getPagesByTitles(o,i))r.set(Cw(i,s),c);await this.#m("page",r.size,fM(n))}return r}async#u(e){let r=e.map(o=>o.qid),n=new Map(await this.#o.getDisambiguations(r,this.#s)),i=e.filter(o=>!n.has(o.qid)),a=n.size;await this.#m("disambiguation-page",a,r.length);for(let o of i){let s=await this.#d(o);await this.#o.putDisambiguations([s],this.#s),n.set(o.qid,s),a+=1,await this.#m("disambiguation-page",a,r.length)}return n}async#d(e){let r=[];for(let a of e.sitelinks.filter(o=>o.isDisambiguation)){let o=await this.#e.parseDisambiguationPage(a.title,a.wiki),s=new Map;for(let l of um(o.linkedTitles,this.#t)){for(let[m,p]of await this.#e.getPagesByTitles(l,a.wiki))s.set(m,p);await this.#m("linked-page",s.size,o.linkedTitles.length)}let c=new Map,u=[];for(let l of o.linkedTitles){let m=s.get(l)?.wikibaseItem;m!==void 0&&(c.set(l,m),u.push({qid:m,title:l}))}r.push({linkedQids:u,...o.pageId===void 0?{}:{pageId:o.pageId},text:gw(o.text,c),title:o.title,wiki:o.wiki})}let n=Tw(r),i=await this.#p(e,r,n);return{checkedAt:new Date().toISOString(),disambiguationQid:e.qid,pages:r,...i}}async#p(e,r,n){if(this.#n===void 0||n.length===0)return{};try{return{profile:await this.#n({pageQidLinks:n,pages:r,sourceQid:e.qid,...e.label===void 0?{}:{surface:e.label}})}}catch(i){if(!(i instanceof we))throw i;let a=new Date,o=new Date(a.getTime()+mM);return{profileError:{failedAt:a.toISOString(),message:i.message,retryAfter:o.toISOString()}}}}async#m(e,r,n){await this.#a?.({detail:e,done:Math.min(Math.max(0,r),Math.max(0,n)),total:Math.max(0,n)})}}});var la=d(()=>{"use strict";Xl();pw();tm();Pw();dm()});var lm=d(()=>{"use strict";la()});var Aw=d(()=>{"use strict";zi();j();Je();Ns();zl();Ds();ra();lm();Z()});var Us=d(()=>{"use strict";Aw();zl();Ns();Ds();ra();lm()});var mm=d(()=>{"use strict";vt();be();zi();j();Je();Yi();ta();Ne();Us();Z();$e()});var Ow=d(()=>{"use strict";mm();Us();Z()});var km=d(()=>{"use strict";US();mm();Us();Hi();Z();Kl();ea();Ow()});var Nw=d(()=>{"use strict";km()});import{randomBytes as pee}from"crypto";import{join as fee}from"path";var vM,Dw=d(()=>{"use strict";se();x();L();vM=10080*60*1e3});var Mw=d(()=>{"use strict"});var Ww=d(()=>{"use strict";x();Dw();Mw()});var Fw=d(()=>{"use strict"});var jw=d(()=>{"use strict";Ww();Fw()});var Rn=d(()=>{"use strict";Nw();jw();mr()});var Im=d(()=>{"use strict";_e()});var Uw=d(()=>{"use strict";Im()});var Hw=d(()=>{"use strict";Uw();Im()});function qw(t,e){return t-e}function $w(t){let e=ha();for(let r of t)e[String(r)]=!0;return e}function xm(t,e){return Object.hasOwn(t,String(e))}function CM(t){return Object.keys(t).length}function ha(){return Object.create(null)}var Ks,Kw=d(()=>{"use strict";Ks=class{#e;constructor(e){this.#e=e}selectTopChunks(e){if(e.allChunks.length===0)return[];if(e.latestChunkIds.length===0)return[...e.allChunks].slice(0,e.capacity);let r=$w(e.latestChunkIds),n=e.allChunks.filter(o=>!xm(r,o.id));if(n.length===0)return[];let i=this.#t({getSuccessorChunkIds:e.getSuccessorChunkIds,latestChunkIds:e.latestChunkIds});if(CM(i)===0)return[...n].sort((o,s)=>s.generation-o.generation).slice(0,e.capacity);let a=this.#r({allChunkIds:e.allChunks.map(o=>o.id),forwardScores:i,getSuccessorChunkIds:e.getSuccessorChunkIds});return n.map(o=>({chunk:o,decayedScore:(a[String(o.id)]??0)*this.#e**o.generation})).sort((o,s)=>o.decayedScore!==s.decayedScore?s.decayedScore-o.decayedScore:o.chunk.id-s.chunk.id).slice(0,e.capacity).map(o=>o.chunk)}#t(e){let r=e.latestChunkIds.length;if(r===0)return ha();let n=1/r,i=ha(),a=ha(),o=[...e.latestChunkIds],s=0;for(let c of e.latestChunkIds)i[String(c)]=n,a[String(c)]=!0;for(;s<o.length;){let c=o[s];if(s+=1,c===void 0)continue;let u=i[String(c)];if(u===void 0)continue;let l=[...e.getSuccessorChunkIds(c)].sort(qw);if(l.length===0)continue;let m=u/l.length;for(let p of l){let h=String(p);i[h]=(i[h]??0)+m,!xm(a,p)&&(a[h]=!0,o.push(p))}}return i}#r(e){let r=ha();for(let s of e.allChunkIds)for(let c of e.getSuccessorChunkIds(s)){let u=String(c),l=r[u]??[];r[u]=[...l,s]}let n={...e.forwardScores},i=Object.keys(e.forwardScores).map(Number),a=$w(i),o=0;for(;o<i.length;){let s=i[o];if(o+=1,s===void 0)continue;let c=n[String(s)];if(c===void 0)continue;let u=[...r[String(s)]??[]].sort(qw);if(u.length===0)continue;let l=c/u.length;for(let m of u){let p=String(m);n[p]=(n[p]??0)+l,!xm(a,m)&&(a[p]=!0,i.push(m))}}return n}}});var Js,Jw=d(()=>{"use strict";Js=class{#e;#t=[];#r=[];#n=[];#i=0;constructor(e){this.#e=e}get capacity(){return this.#e}get generation(){return this.#i}addChunks(e){this.#t.push(...e)}setRetainedChunks(e){this.#r.splice(0,this.#r.length,...e.previousFragmentChunks),this.#n.splice(0,this.#n.length,...e.extraChunks)}finalizeFragment(){let e=[...this.#t];return this.#t.splice(0,this.#t.length),this.#i+=1,e}getChunks(){return[...this.#t,...this.#r,...this.#n]}getAllChunksForSaving(){return[...this.#t]}getChunksForPrompt(e=!0){return e?this.getChunks():[...this.#r,...this.#n]}formatForPrompt(e=!0){let r=this.getChunksForPrompt(e);return r.length===0?"(empty)":r.map(n=>`${n.id}. [${n.label}] - ${n.content}`).join(`
|
|
1771
|
+
`)}clear(){this.#t.splice(0,this.#t.length),this.#r.splice(0,this.#r.length),this.#n.splice(0,this.#n.length)}}});async function PM(t){let e=Object.create(null);for(let[i,a]of t.chunkBatch.chunks.entries()){a.id=await t.idGenerator(),a.generation=t.generation;let o=t.chunkBatch.tempIds[i];o===void 0||o===""||(e[o]=a)}let r=[...t.visibleChunks,...t.chunkBatch.chunks],n=[];for(let i of t.chunkBatch.links){let a=zw(i.from,e,r),o=zw(i.to,e,r);if(a===void 0||o===void 0)continue;let[s,c]=a.id>o.id?[a.id,o.id]:[o.id,a.id];if(LM(r,c,s),i.strength===void 0){n.push({fromId:s,toId:c});continue}n.push({fromId:s,strength:i.strength,toId:c})}return{chunks:t.chunkBatch.chunks,edges:n,...t.chunkBatch.importanceAnnotations===void 0?{}:{importanceAnnotations:t.chunkBatch.importanceAnnotations}}}function zw(t,e,r){return typeof t=="string"?e[t]:r.find(n=>n.id===t)}function LM(t,e,r){for(let n of t)if(n.id===e){n.links.includes(r)||n.links.push(r);return}}var zs,Qw=d(()=>{"use strict";Kw();Jw();zs=class{#e;#t;#r;constructor(e,r,n){this.#e=n,this.#t=new Ks(r),this.#r=new Js(e)}get capacity(){return this.#r.capacity}createChunkBatchContext(e){return{visibleChunkIds:this.#r.getChunksForPrompt(e?.includeCurrentFragment??!0).map(n=>n.id),workingMemoryPrompt:this.#r.formatForPrompt(e?.includeCurrentFragment??!0)}}async acceptChunkBatch(e){let r=await PM({chunkBatch:e,generation:this.#r.generation,idGenerator:this.#e,visibleChunks:this.#r.getChunks()});return this.#r.addChunks(r.chunks),r}completeFragment(e){let r=this.#r.getAllChunksForSaving(),n=r.map(a=>a.id),i=this.#t.selectTopChunks({allChunks:e.allChunks,capacity:this.#r.capacity,getSuccessorChunkIds:e.getSuccessorChunkIds,latestChunkIds:n});this.#r.setRetainedChunks({extraChunks:i,previousFragmentChunks:r}),this.#r.finalizeFragment()}clear(){this.#r.clear()}}});function ya(t){let e=t.trim();return e===""?[]:Array.from(OM.segment(e)).map(r=>r.segment.trim()).filter(r=>r!=="")}function Me(t){let e=t.replace(/\s+/gu," ").trim(),r=NM(e),n="";for(let i of r)if(!DM(i)){if(!fa(i)){n+=i;continue}n+=i.toLowerCase().normalize("NFD").replace(new RegExp("\\p{M}","gu"),"")}return n}function NM(t){let e=[],r=0;for(;r<t.length;){let n=t[r];if(n===void 0)break;if(n!==" "){e.push(n),r+=1;continue}if(e.length>=2&&AM.has(e[e.length-1]??"")&&fa(e[e.length-2]??"")&&r<t.length-1&&fa(t[r+1]??"")){e.pop(),r+=1;continue}let i=e[e.length-1]??"",a=t[r+1]??"";i!==""&&a!==""&&fa(i)&&fa(a)&&e.push(n),r+=1}return e}function fa(t){return t!==""&&new RegExp("\\p{Script=Latin}","u").test(t)&&new RegExp("\\p{L}","u").test(t)}function DM(t){return/[\p{P}\p{S}]/u.test(t)}var AM,OM,ga=d(()=>{"use strict";AM=new Set(["\u2010","\u2011","\u2012","\u2013","\u2014","\u2015"]),OM=new Intl.Segmenter(void 0,{granularity:"sentence"})});function vm(){return{exactNormalized:!1,exactRaw:!1,exactSubstring:!1,matchEnd:-1,matchStart:-1,score:0}}function Vw(t,e){let r=Qs(t,2),n=Qs(e,2),i=Qs(t,3),a=Qs(e,3);return(Xw(r,n)+Xw(i,a))/2}function Qs(t,e){if(t.length<=e)return t===""?new Set:new Set([t]);let r=new Set;for(let n=0;n<=t.length-e;n+=1)r.add(t.slice(n,n+e));return r}function Xw(t,e){if(t.size===0||e.size===0)return 0;let r=0;for(let n of t)e.has(n)&&(r+=1);return 2*r/(t.size+e.size)}function Yw(t,e){if(t===e)return 1;if(t===""||e==="")return 0;let r=Array.from({length:e.length+1},(a,o)=>o),n=new Array(e.length+1).fill(0);for(let[a,o]of[...t].entries()){n[0]=a+1;for(let[s,c]of[...e].entries()){let u=(n[s]??0)+1,l=(r[s+1]??0)+1,m=(r[s]??0)+(o===c?0:1);n[s+1]=Math.min(u,l,m)}[r,n]=[n,r]}return 1-(r[e.length]??Math.max(t.length,e.length))/Math.max(t.length,e.length)}function Zw(t,e){return 1-Math.abs(t.length-e.length)/Math.max(t.length,e.length)}function eE(t,e){if(t===e)return 1;let r=t.length,n=e.length;if(r===0||n===0)return 0;let i=Array.from({length:r+1},()=>new Array(n+1).fill(0)),a=0;for(let o=1;o<=r;o+=1)for(let s=1;s<=n;s+=1){if(t[o-1]!==e[s-1])continue;let c=i[o];c!==void 0&&(c[s]=(i[o-1]?.[s-1]??0)+1,a=Math.max(a,c[s]??0))}return 2*a/(r+n)}function tE(t){return` - ${t.occurrenceId} score=${t.score.toFixed(3)}
|
|
1772
|
+
prev: ${Rm(t.prevText)}
|
|
1773
|
+
text: ${Rm(t.text,120)}
|
|
1774
|
+
next: ${Rm(t.nextText)}`}function Rm(t,e=80){let r=t.replace(/\s+/gu," ").trim();return r===""?"(none)":r.length<=e?r:`${r.slice(0,e-3)}...`}var Tm=d(()=>{"use strict"});var _m=d(()=>{"use strict"});function nE(t,e,r){return t.mode==="head_tail"?FM(t,e):Cm(t.text??"",e,r)}function FM(t,e){let r=t.head??"",n=t.tail??"",i=Me(e),a=Me(r),o=Me(n);if(a===""||o==="")return vm();let s=i.indexOf(a),c=i.lastIndexOf(o);if(s!==-1&&c!==-1&&s<=c){let p=a.length+o.length,h=Math.min(1,p/Math.max(1,i.length));return{exactNormalized:!1,exactRaw:!1,exactSubstring:!0,matchEnd:c+o.length,matchStart:s,score:.82+.18*h}}let u=Cm(r,e,"start_anchor"),l=Cm(n,e,"end_anchor"),m=u.matchStart<=l.matchStart?1:.85;return{exactNormalized:!1,exactRaw:!1,exactSubstring:!1,matchEnd:Math.max(u.matchEnd,l.matchEnd),matchStart:Math.min(u.matchStart,l.matchStart),score:(u.score+l.score)/2*m}}function Cm(t,e,r){let n=t.trim(),i=e.trim(),a=Me(n),o=Me(i);if(a===""||o==="")return vm();if(n===i)return{exactNormalized:!0,exactRaw:!0,exactSubstring:!0,matchEnd:o.length,matchStart:0,score:1};if(a===o)return{exactNormalized:!0,exactRaw:!1,exactSubstring:!1,matchEnd:o.length,matchStart:0,score:.995};if(o.includes(a)){let h=o.indexOf(a),g=a.length/Math.max(1,o.length),f=rE({candidateNormalized:o,label:r,matchEnd:h+a.length,matchStart:h,queryNormalized:a});return{exactNormalized:!1,exactRaw:!1,exactSubstring:!0,matchEnd:h+a.length,matchStart:h,score:Math.min(1,.75+.25*g+f)}}if(a.includes(o)){let h=o.length/Math.max(1,a.length);return{exactNormalized:!1,exactRaw:!1,exactSubstring:!1,matchEnd:o.length,matchStart:0,score:Math.min(.92,.78+.14*h)}}let s=0,c=-1,u=-1,l=Math.min(o.length,Math.max(a.length,Math.floor(a.length*1.2))),m=Math.min(l,Math.max(1,Math.floor(a.length*.8))),p=new Set(a);for(let h=m;h<=l;h+=1)for(let g=0;g<=o.length-h;g+=1){let f=o.slice(g,g+h),E=new Set(f),v=new Set([...p,...E]).size,I=[...p].filter(_=>E.has(_)).length;if((v===0?0:I/v)<.35)continue;let F=.35*Vw(a,f)+.35*eE(a,f)+.2*Yw(a,f)+.1*Zw(a,f)+rE({candidateNormalized:o,label:r,matchEnd:g+h,matchStart:g,queryNormalized:a});F>s&&(s=Math.min(1,F),c=g,u=g+h)}return{exactNormalized:!1,exactRaw:!1,exactSubstring:!1,matchEnd:u,matchStart:c,score:s}}function rE(t){if(t.matchStart<0||t.matchEnd<0||t.queryNormalized.length<12||t.label==="start_anchor"&&t.matchStart!==0||t.label==="end_anchor"&&t.matchEnd!==t.candidateNormalized.length)return 0;let e=t.queryNormalized.length/Math.max(1,t.candidateNormalized.length);return .08*(.5+.5*Math.min(1,e))}var iE=d(()=>{"use strict";ga();Tm();_m()});function aE(t){if(t==null)return[void 0,"anchor is required"];if(typeof t=="string"){let a=t.trim();if(a==="")return[void 0,"anchor string is empty"];if(a.includes("...")){let o=a.split("...").map(s=>s.trim()).filter(s=>s!=="");if(o.length>=2){let s=o[0],c=o[o.length-1];return s===void 0||c===void 0?[void 0,"anchor string is empty"]:[{head:s,mode:"head_tail",tail:c},void 0]}}return[{mode:"full",text:a},void 0]}if(typeof t!="object")return[void 0,`expected string or object, got ${typeof t}`];let e=t;if((e.mode==="head_tail"||e.head!==void 0?"head_tail":"full")==="full"){let a=typeof e.text=="string"?e.text.trim():"";return a===""?[void 0,"full anchor requires non-empty 'text'"]:[{mode:"full",text:a},void 0]}let n=typeof e.head=="string"?e.head.trim():"",i=typeof e.tail=="string"?e.tail.trim():"";return n!==""&&i===""?[{mode:"full",text:n},void 0]:n===""&&i!==""?[{mode:"full",text:i},void 0]:n===""||i===""?[void 0,"head_tail anchor requires non-empty 'head' and 'tail'"]:[{head:n,mode:"head_tail",tail:i},void 0]}function oE(t,e){if(t===void 0)return;if(t.mode==="head_tail"){let n=e==="end_anchor"?Pm(t.tail??"","end_anchor"):Pm(t.head??"","start_anchor");return n===""?void 0:{mode:"full",text:n}}return{mode:"full",text:Pm(t.text??"",e)}}function Lm(t){return t.mode==="head_tail"?Me(t.head??"").length+Me(t.tail??"").length:Me(t.text??"").length}function Pm(t,e){let r=ya(t);return r.length<=1?t.trim():e==="end_anchor"?r[r.length-1]??t.trim():r[0]??t.trim()}var sE=d(()=>{"use strict";ga()});var Wt,lE=d(()=>{"use strict";iE();sE();Tm();_m();Wt=class{resolve(e,r,n){let i=e.start_anchor??e.start,a=e.end_anchor??e.end,[o,s]=this.parseAnchor(i,"start_anchor");if(s!==void 0)return[void 0,s];let c;if(a!==void 0){let[f,E]=this.parseAnchor(a,"end_anchor");if(E!==void 0)return[void 0,E];c=f}let[u,l,m]=this.resolveAnchor({anchor:o,candidateSentenceIds:r,candidateTexts:n,label:"start_anchor"});if(m!==void 0)return[void 0,m];if(u===void 0)return[void 0,{candidates:[],code:"none",fieldName:"start_anchor",message:"start_anchor could not be matched: no candidate selected"}];if(c===void 0)return[{confidence:u.score,sentenceIds:[u.sentenceId],strategy:l},void 0];let[p,h,g]=this.resolveAnchor({anchor:c,candidateSentenceIds:r,candidateTexts:n,label:"end_anchor",minIndex:u.index});return g!==void 0?[void 0,g]:p===void 0?[void 0,{candidates:[],code:"none",fieldName:"end_anchor",message:"end_anchor could not be matched: no candidate selected"}]:p.index<u.index?[void 0,{candidates:[],code:"invalid_range",fieldName:"end_anchor",message:`Invalid evidence range: end_anchor resolved before start_anchor (${u.occurrenceId} -> ${p.occurrenceId}).`}]:[{confidence:Math.min(u.score,p.score),sentenceIds:r.slice(u.index,p.index+1),strategy:`${l}+${h}`},void 0]}resolveWithOverrides(e){let r=e.evidence.start_anchor??e.evidence.start,n=e.evidence.end_anchor??e.evidence.end,[i,a]=this.parseAnchor(r,"start_anchor");if(a!==void 0)return[void 0,a];let o=e.overrides.start_anchor,[s,c,u]=o===void 0?this.resolveAnchor({anchor:i,candidateSentenceIds:e.candidateSentenceIds,candidateTexts:e.candidateTexts,label:"start_anchor"}):[o,"choice_final",void 0];if(u!==void 0)return[void 0,u];if(s===void 0)return[void 0,{candidates:[],code:"none",fieldName:"start_anchor",message:"start_anchor could not be matched: no candidate selected"}];if(n===void 0)return[{confidence:s.score,sentenceIds:[s.sentenceId],strategy:c},void 0];let[l,m]=this.parseAnchor(n,"end_anchor");if(m!==void 0)return[void 0,m];let p=e.overrides.end_anchor,[h,g,f]=p===void 0?this.resolveAnchor({anchor:l,candidateSentenceIds:e.candidateSentenceIds,candidateTexts:e.candidateTexts,label:"end_anchor",minIndex:s.index}):[p,"choice_final",void 0];return f!==void 0?[void 0,f]:h===void 0?[void 0,{candidates:[],code:"none",fieldName:"end_anchor",message:"end_anchor could not be matched: no candidate selected"}]:h.index<s.index?[void 0,{candidates:[],code:"invalid_range",fieldName:"end_anchor",message:`Invalid evidence range: end_anchor resolved before start_anchor (${s.occurrenceId} -> ${h.occurrenceId}).`}]:[{confidence:Math.min(s.score,h.score),sentenceIds:e.candidateSentenceIds.slice(s.index,h.index+1),strategy:`${c}+${g}`},void 0]}parseAnchor(e,r){let[n,i]=aE(e);return i!==void 0?[void 0,{candidates:[],code:"invalid_anchor",fieldName:r,message:`Invalid evidence.${r}: ${i}`}]:[oE(n,r),void 0]}resolveAnchor(e){if(e.anchor===void 0)return[void 0,"invalid",{candidates:[],code:"invalid",fieldName:e.label,message:`${e.label} is missing`}];let r=this.rankAnchor(e.anchor,e.candidateSentenceIds,e.candidateTexts,e.label),n=e.minIndex;if(n!==void 0&&(r=r.filter(l=>l.index>=n)),r.length===0)return[void 0,"none",{candidates:[],code:"none",fieldName:e.label,message:`${e.label} could not be matched: no candidates available`}];let i=r.filter(l=>l.exactRaw);if(i.length===1)return[i[0],"exact_raw",void 0];if(i.length>1)return[void 0,"ambiguous_exact_raw",this.#t(e.label,"ambiguous_exact_raw",i)];let a=r.filter(l=>l.exactSubstring);if(a.length===1&&Lm(e.anchor)>=8)return[a[0],"exact_substring",void 0];if(a.length>1&&Lm(e.anchor)>=8){let l=this.#e(a);return l!==void 0?[l,"exact_substring_scored",void 0]:[void 0,"ambiguous_exact_substring",this.#t(e.label,"ambiguous_exact_substring",a)]}let o=r.filter(l=>l.exactNormalized);if(o.length===1)return[o[0],"exact_normalized",void 0];if(o.length>1){let l=this.#e(o);return l!==void 0?[l,"exact_normalized_scored",void 0]:[void 0,"ambiguous_exact_normalized",this.#t(e.label,"ambiguous_exact_normalized",o)]}let s=r[0];if(s===void 0)return[void 0,"none",{candidates:[],code:"none",fieldName:e.label,message:`${e.label} could not be matched: no candidates available`}];let c=r[1]?.score??0,u=s.score-c;return s.score<.55?[void 0,"low_confidence",{candidates:r.slice(0,3),code:"low_confidence",fieldName:e.label,message:`${e.label} could not be matched confidently. Best candidate score=${s.score.toFixed(3)}.`}]:r.length===1?[s,"auto_top1_single_candidate",void 0]:s.score>=.97?[s,"auto_top1_very_high",void 0]:s.score>=.9&&u>=.07?[s,"auto_top1",void 0]:[void 0,"ambiguous_ranked",this.#t(e.label,"ambiguous_ranked",r)]}rankAnchor(e,r,n,i){let a=[];for(let[o,s]of r.entries()){let c=n[o]??"",u=o>0?n[o-1]??"":"",l=o<n.length-1?n[o+1]??"":"",m=nE(e,c,i);a.push({exactNormalized:m.exactNormalized,exactRaw:m.exactRaw,exactSubstring:m.exactSubstring,index:o,nextText:l,occurrenceId:`S${o+1}`,prevText:u,score:m.score,sentenceId:s,text:c})}return a.sort((o,s)=>o.score!==s.score?s.score-o.score:o.exactRaw!==s.exactRaw?o.exactRaw?-1:1:o.exactSubstring!==s.exactSubstring?o.exactSubstring?-1:1:o.exactNormalized!==s.exactNormalized?o.exactNormalized?-1:1:o.index-s.index),a}#e(e){if(e.length===0)return;if(e.length===1)return e[0];let r=e[0];if(r===void 0)return;let n=e[1]?.score??0;if(r.score>=.9&&r.score-n>=.07)return r}#t(e,r,n){let i=n.slice(0,3),a=i.map(o=>tE(o)).join(`
|
|
1775
|
+
`);return{candidates:i,code:r,fieldName:e,message:`${e} is ambiguous. Top candidates:
|
|
1776
|
+
${a}
|
|
1777
|
+
Please provide a more specific anchor or surrounding context.`}}}});var mE=d(()=>{"use strict"});var pE=d(()=>{"use strict";lE();mE()});var yr,Xs,hE=d(()=>{"use strict";yr=["Evidence selection:",'- Return evidence as [{"sentence_id":"S1","quote":"exact short source quote"}].',"- evidence.quote is a locator for the source sentence, not a proof excerpt.","- Choose the shortest exact quote that still uniquely identifies the intended sentence.","- If the quote is too short, it may match multiple sentences; if it is too long, it may include unnecessary text or cross sentence boundaries.","- Do not use a whole sentence by default.","- evidence is an array. Use multiple items when the claim needs multiple source sentences.","- A source sentence means exactly one displayed source line labeled S1, S2, S3, etc.","- Each evidence item must point to exactly one source sentence.","- Each evidence item must quote one continuous span from exactly one labeled source line, for example only from S2.","- Never merge text from two labeled source lines into one evidence quote.","- sentence_id must be one of the sentence IDs shown in the source context.","- quote must be copied from the untagged original source sentence.","- If the source context contains XML-like tags, do not copy the tags into quote; copy only the visible text."].join(`
|
|
1778
|
+
`),Xs=[{quote:"exact short source quote copied from the selected sentence",sentence_id:"sentence id from the source context, such as S1"}]});function Ft(t){return t.replace(new RegExp("\\p{Default_Ignorable_Code_Point}","gu"),"").normalize("NFKC").replace(/\s+/gu," ").trim()}function Ys(t){let n=fE(t).replace(new RegExp("\\p{Default_Ignorable_Code_Point}","gu"),"").normalize("NFKC"),a=$M(n).normalize("NFD").replace(new RegExp("\\p{M}","gu"),"");return fE(a).replace(/ +/gu," ").trim()}function bE(t){let e=SE(t).trim();return{normalizedQuote:Ys(e),quoteRaw:e}}function Am(t){let{normalizedQuote:e,quoteRaw:r}=t.preparedQuote,n=SE(t.sentence).trim(),i=Ys(n);if(e===""||i==="")return wE(e,i);if(r===n)return{exactNormalized:!0,exactRaw:!0,exactSubstring:!0,matchEnd:i.length,matchStart:0,normalizedQuote:e,normalizedSentence:i,score:1,strategy:"exact"};if(e===i)return{exactNormalized:!0,exactRaw:!1,exactSubstring:!0,matchEnd:i.length,matchStart:0,normalizedQuote:e,normalizedSentence:i,score:.995,strategy:"normalized_exact"};let a=i.indexOf(e);if(a!==-1){let o=e.length/Math.max(1,i.length);return{exactNormalized:!1,exactRaw:!1,exactSubstring:!0,matchEnd:a+e.length,matchStart:a,normalizedQuote:e,normalizedSentence:i,score:Math.min(.99,.95+.04*o),strategy:"normalized_substring"}}return UM(e,i)}function UM(t,e){let r=Math.max(1,Math.floor(t.length*.72)),n=Math.min(e.length,Math.max(r,Math.ceil(t.length*2.25))),i=wE(t,e);for(let a=r;a<=n;a+=1)for(let o=0;o<=e.length-a;o+=1){let s=e.slice(o,o+a),c=HM(t,s);c<=i.score||(i={exactNormalized:!1,exactRaw:!1,exactSubstring:!1,matchEnd:o+a,matchStart:o,normalizedQuote:t,normalizedSentence:e,score:c,strategy:"fuzzy_window"})}return i}function HM(t,e){let r=XM(t,e),n=VM(t,e),i=YM(t,e),a=ZM(t,e),o=zM(t,e),s=QM(t,e),c=eW(t,e),u=Math.max(r,n,i,a),l=.2*r+.18*n+.24*i+.2*a+.08*o+.05*s+.05*c;return c>=.75&&u<.45&&(l*=.65),Math.max(0,Math.min(1,l))}function qM(t){return BM.get(t)??t.toLocaleLowerCase("und")}function $M(t){let e="";for(let r of t)e+=qM(r);return e}function fE(t){let e="";for(let r of t)e+=KM(r)||!JM(r)?r:" ";return e}function KM(t){return t==="+"||t==="#"||t==="&"}function JM(t){return/\s/u.test(t)||new RegExp("\\p{Separator}","u").test(t)||/[\p{Dash_Punctuation}\p{Connector_Punctuation}\p{Initial_Punctuation}\p{Final_Punctuation}\p{Open_Punctuation}\p{Close_Punctuation}\p{Other_Punctuation}]/u.test(t)||/[\\/.。.。、,,::;;!!??·・•|]/u.test(t)}function SE(t){return t.replace(/<\/?(?:mention|quote)\b[^>]*>/giu,"")}function wE(t,e){return{exactNormalized:!1,exactRaw:!1,exactSubstring:!1,matchEnd:-1,matchStart:-1,normalizedQuote:t,normalizedSentence:e,score:0,strategy:"empty"}}function zM(t,e){let r=yE(Vs(t,2),Vs(e,2)),n=yE(Vs(t,3),Vs(e,3));return(r+n)/2}function Vs(t,e){if(t.length<=e)return t===""?new Set:new Set([t]);let r=new Set;for(let n=0;n<=t.length-e;n+=1)r.add(t.slice(n,n+e));return r}function yE(t,e){if(t.size===0||e.size===0)return 0;let r=0;for(let n of t)e.has(n)&&(r+=1);return 2*r/(t.size+e.size)}function QM(t,e){return 1-Math.abs(t.length-e.length)/Math.max(t.length,e.length)}function XM(t,e){if(t===e)return 1;if(t===""||e==="")return 0;let r=Array.from({length:e.length+1},(s,c)=>c),n=new Array(e.length+1).fill(0),i=[...t],a=[...e];for(let[s,c]of i.entries()){n[0]=s+1;for(let[u,l]of a.entries()){let m=(n[u]??0)+1,p=(r[u+1]??0)+1,h=(r[u]??0)+(c===l?0:1);n[u+1]=Math.min(m,p,h)}[r,n]=[n,r]}return 1-(r[a.length]??Math.max(t.length,e.length))/Math.max(t.length,e.length)}function VM(t,e){if(t===""||e==="")return 0;let r=[...t],n=[...e],i=new Array(n.length+1).fill(0),a=new Array(n.length+1).fill(0),o=0;for(let s=1;s<=r.length;s+=1){for(let c=1;c<=n.length;c+=1)a[c]=r[s-1]===n[c-1]?(i[c-1]??0)+1:0,o=Math.max(o,a[c]??0);[i,a]=[a,i],a.fill(0)}return 2*o/(r.length+n.length)}function YM(t,e){if(t===""||e==="")return 0;let r=[...t],n=[...e],i=new Array(n.length+1).fill(0),a=new Array(n.length+1).fill(0);for(let s=1;s<=r.length;s+=1){for(let c=1;c<=n.length;c+=1)a[c]=r[s-1]===n[c-1]?(i[c-1]??0)+1:Math.max(i[c]??0,a[c-1]??0);[i,a]=[a,i],a.fill(0)}return 2*(i[n.length]??0)/(r.length+n.length)}function ZM(t,e){if(t===""||e==="")return 0;let r=[...t],n=[...e],i=new Array(n.length+1).fill(0),a=new Array(n.length+1).fill(0);for(let o=1;o<=r.length;o+=1){for(let s=1;s<=n.length;s+=1)a[s]=r[o-1]===n[s-1]?(i[s-1]??0)+1:Math.max(i[s]??0,a[s-1]??0);[i,a]=[a,i],a.fill(0)}return(i[n.length]??0)/r.length}function eW(t,e){let r=gE(t),n=gE(e),i=0,a=0;for(let[o,s]of r){let c=n.get(o)??0;i+=Math.min(s,c),a+=s}return a===0?0:i/a}function gE(t){let e=new Map;for(let r of t)e.set(r,(e.get(r)??0)+1);return e}var BM,Om=d(()=>{"use strict";BM=new Map([["\xDF","ss"],["\u1E9E","ss"],["\u03C2","\u03C3"]])});function Dm(t){let e=mW(t.evidence.quote),r=pW(t.evidence.sentence_id),n;if(e==="")return[void 0,{candidates:[],code:"invalid",message:"Evidence quote is missing or empty."}];let i=bE(e);if(r!==void 0){let l=t.sentences.findIndex(p=>p.id===r),m=t.sentences[l];if(m!==void 0){let p=IE({index:l,scored:Am({preparedQuote:i,sentence:m.text}),sentence:m,sentences:t.sentences});if(n=p,lW(p))return[{candidate:p,confidence:p.score,sentenceIds:[p.sentence.sentenceId],strategy:`sentence_id+${p.strategy}`},void 0]}}let a=sW(i,t.sentences,Nm);if(r!==void 0){let l=a.find(p=>p.occurrenceId===r)??n,m=a[0];if(l!==void 0&&m!==void 0&&uW(l,m))return[{candidate:l,confidence:l.score,sentenceIds:[l.sentence.sentenceId],strategy:`sentence_id+${l.strategy}`},void 0]}let o=a[0];if(o===void 0)return[void 0,{candidates:[],code:"none",message:"Evidence quote could not be matched: no candidates available."}];let s=a[1]?.score??0,c=o.score-s,u=iW(e);return o.score<nW?[void 0,{candidates:a.slice(0,Nm),code:"low_confidence",message:`Evidence quote could not be matched confidently. Best candidate score=${o.score.toFixed(3)}.`+u}]:o.score>=rW&&c>=kE?[{candidate:o,confidence:o.score,sentenceIds:[o.sentence.sentenceId],strategy:`quote_auto_top1:${o.strategy}`},void 0]:[void 0,{candidates:a.slice(0,Nm),code:"ambiguous",message:"Evidence quote is ambiguous. Choose one candidate occurrence ID."+u}]}function iW(t){return ya(t).length<=1?"":" Evidence quote appears to contain more than one sentence. Each evidence item must stay within one source sentence. Recheck whether this evidence should be shortened, split into multiple evidence items, or removed."}function vn(t){let e=aW(t.evidence);if(e.length===0)return[void 0,{candidates:[],code:"invalid",message:"Evidence selection list is empty."}];let r=[],n=[],i=1,a;for(let o of e){let[s,c]=Dm({evidence:o,sentences:t.sentences});if(c!==void 0)return[void 0,c];if(s===void 0)return[void 0,{candidates:[],code:"none",message:"Evidence selection could not be resolved."}];a??=s.candidate,i=Math.min(i,s.confidence),r.push(...s.sentenceIds),n.push(s.strategy)}return a===void 0?[void 0,{candidates:[],code:"none",message:"Evidence selection could not be resolved."}]:[{candidate:a,confidence:i,sentenceIds:hW(r),strategy:`list:${n.join(",")}`},void 0]}function aW(t){return oW(t)?t:[t]}function oW(t){return Array.isArray(t)}function sW(t,e,r){let n=[];for(let[i,a]of e.entries()){let o=Am({preparedQuote:t,sentence:a.text}),s=IE({index:i,scored:o,sentence:a,sentences:e});cW(n,s,r)}return n}function cW(t,e,r){let n=t.findIndex(i=>dW(e,i)<0);if(n===-1){t.length<r&&t.push(e);return}t.splice(n,0,e),t.length>r&&t.pop()}function IE(t){return{exactNormalized:t.scored.exactNormalized,exactRaw:t.scored.exactRaw,exactSubstring:t.scored.exactSubstring,index:t.index,nextText:t.sentences[t.index+1]?.text??"",occurrenceId:t.sentence.id,prevText:t.sentences[t.index-1]?.text??"",score:t.scored.score,sentence:t.sentence,strategy:t.scored.strategy}}function dW(t,e){return t.score!==e.score?e.score-t.score:t.exactRaw!==e.exactRaw?t.exactRaw?-1:1:t.exactSubstring!==e.exactSubstring?t.exactSubstring?-1:1:t.exactNormalized!==e.exactNormalized?t.exactNormalized?-1:1:t.index-e.index}function uW(t,e){return(t.score>=tW||t.exactSubstring&&t.score>=EE)&&(t.occurrenceId===e.occurrenceId||e.score-t.score<kE)}function lW(t){return t.score>=EE&&t.exactSubstring}function mW(t){return Ft(t??"")}function pW(t){let e=t?.trim();return e===""?void 0:e}function hW(t){let e=new Set,r=[];for(let n of t){let i=n.join(":");e.has(i)||(e.add(i),r.push(n))}return r}var tW,EE,rW,kE,nW,Nm,xE=d(()=>{"use strict";Om();ga();tW=.72,EE=.95,rW=.72,kE=.15,nW=.45,Nm=5});var Tn=d(()=>{"use strict";pE();hE();Om();xE();ga()});function RE(t){let e=Wm();for(let r of t){let n=ba(r.sentenceId);e[n]=r.wordsCount}return e}function vE(t){let e=Wm();for(let r of t.sentences)e[ba(r.sentenceId)]=r.rawText;return e}function TE(t){return t.map(e=>e.strength===void 0?{from:e.from,to:e.to}:{from:e.from,strength:e.strength,to:e.to})}function _E(t){return[t.occurrenceId,`prev: ${Mm(t.prevText)}`,`text: ${Mm(t.text)}`,`next: ${Mm(t.nextText)}`].join(`
|
|
1779
|
+
`)}function Mm(t){let e=t.replace(/\s+/gu," ").trim();return e===""?"(none)":e}function CE(t){return t==="evidence"||t==="start_anchor"||t==="end_anchor"?t:void 0}function PE(t){return typeof t=="object"&&t!==null}function LE(t){return t instanceof Error?t.message:String(t)}function AE(t){return t instanceof pt&&t.cause instanceof O}function ba(t){return t.join(":")}function Sa(t){let e=Wm();for(let r of t)e[String(r)]=!0;return e}function wa(t,e){return bW(t,String(e))}function bW(t,e){return Object.hasOwn(t,e)}function Wm(){return Object.create(null)}function Fm(t){return t.length===1?t[0]:void 0}var Ea=d(()=>{"use strict";Ie()});function OE(t){let{annotations:e,issues:r,validImportanceChunkIds:n}=t;if(e.length===0)return[];if(n===void 0)return e.map(a=>({chunkId:a.chunk_id,importance:jr(a.importance)}));let i=[];for(let a of e){if(!wa(n,a.chunk_id)){r.push(`importance_annotations references unknown chunk_id ${a.chunk_id}`);continue}i.push({chunkId:a.chunk_id,importance:jr(a.importance)})}return i}var NE=d(()=>{"use strict";L();Ea()});function ME(t){let e=Sa(t.tempIds),r=Sa(t.visibleChunkIds),n=[];for(let[i,a]of t.links.entries()){let o=DE({fieldName:"from",index:i+1,issues:t.issues,reference:a.from,validChunkIds:r,validTempIds:e}),s=DE({fieldName:"to",index:i+1,issues:t.issues,reference:a.to,validChunkIds:r,validTempIds:e});o&&s&&n.push(a)}return n}function DE(t){return typeof t.reference=="string"?wa(t.validTempIds,t.reference):wa(t.validChunkIds,t.reference)?!0:(t.issues.push(`Link #${t.index}: "${t.fieldName}" chunk_id ${t.reference} does not exist in visible chunks`),!1)}var WE=d(()=>{"use strict";Ea()});function jE(t){return Array.isArray(t)?t.map(FE):typeof t.quote=="string"||typeof t.sentence_id=="string"?FE(t):void 0}function FE(t){return{...typeof t.quote=="string"?{quote:t.quote}:{},...typeof t.sentence_id=="string"?{sentence_id:t.sentence_id}:{}}}function GE(t,e){return{candidates:t.candidates.map(SW),code:t.code,fieldName:e,message:t.message}}function SW(t){return{exactNormalized:t.exactNormalized,exactRaw:t.exactRaw,exactSubstring:t.exactSubstring,index:t.index,nextText:t.nextText,occurrenceId:t.occurrenceId,prevText:t.prevText,score:t.score,sentenceId:t.sentence.sentenceId,text:t.sentence.text}}var BE=d(()=>{"use strict"});import{z as R}from"zod";var UE,wW,HE,EW,qE,kW,IW,$E,KE,Zs=d(()=>{"use strict";L();UE=R.object({from:R.union([R.number().int(),R.string()]),strength:R.string().optional(),to:R.union([R.number().int(),R.string()])}),wW=R.object({quote:R.string().optional(),sentence_id:R.string().optional()}).passthrough(),HE=R.union([R.record(R.string(),R.unknown()),R.array(wW)]),EW=R.object({content:R.string(),evidence:HE.nullish(),label:R.string(),retention:R.enum(["verbatim","detailed","focused","relevant"]),temp_id:R.string()}).passthrough(),qE=R.object({chunks:R.array(EW),fragment_summary:R.string(),links:R.array(UE)}),kW=R.object({content:R.string(),evidence:HE.nullish(),importance:R.enum(["critical","important","helpful"]),label:R.string(),temp_id:R.string()}).passthrough(),IW=R.object({chunk_id:R.number().int(),importance:R.enum(["critical","important","helpful"])}),$E=R.object({chunks:R.array(kW),importance_annotations:R.array(IW),links:R.array(UE)}),KE=R.object({choice:R.string()})});var xW,ec,JE=d(()=>{"use strict";Ie();Tn();BE();Ea();Zs();xW=3,ec=class{#e;#t=new Wt;#r;#n;#i;constructor(e){this.#e=e.choiceSystemPrompt,this.#r=e.projection,this.#n=e.responseIntentClassifierPrompt,this.#i=e.requestChoice}async resolve(e){let r=e.data.evidence;if(r==null)return[[],void 0];if(!PE(r)&&!Array.isArray(r))return[[],{candidates:[],code:"invalid_evidence",fieldName:"evidence",message:`Chunk #${e.chunkIndex} ("${e.chunkLabel}"): evidence must be an object or array`}];let n=this.#r.sentences,i=n.map(_=>_.sentenceId),a=n.map((_,bt)=>({id:`S${bt+1}`,sentenceId:_.sentenceId,text:_.projectedText})),o=jE(r),[s,c]=o===void 0?[void 0,void 0]:vn({evidence:o,sentences:a});if(s!==void 0)return[s.sentenceIds,void 0];let u=Array.isArray(r)?[]:this.#a(r);if(u.length>0)return[u,void 0];let l=n.map(_=>_.projectedText),[m,p]=Array.isArray(r)?[void 0,void 0]:this.#t.resolve(r,i,l);if(m!==void 0)return[m.sentenceIds,void 0];let h=c===void 0?p:GE(c,"evidence");if(h===void 0)return[[],void 0];if(!(h.code.startsWith("ambiguous")||h.code==="low_confidence"&&e.isLastGenerationAttempt&&h.candidates.length>0))return[[],h];let f=CE(h.fieldName);if(f===void 0)return[[],h];let[E,v]=await this.#o({candidates:h.candidates,chunkData:e.data,chunkIndex:e.chunkIndex,chunkLabel:e.chunkLabel,fieldName:f});if(v!==void 0)return v.code==="choice_parse_failed_full_fragment"?[i,void 0]:[[],v];if(E===void 0)return[[],{candidates:h.candidates,code:"choice_failed",fieldName:h.fieldName,message:`Second-stage choice failed for ${h.fieldName}: no candidate returned.`}];if(f==="evidence")return[[E.sentenceId],void 0];if(Array.isArray(r))return[[],h];if(e.isLastGenerationAttempt){let[_,bt]=this.#t.resolveWithOverrides({candidateSentenceIds:i,candidateTexts:l,evidence:r,overrides:{[f]:E}});return _!==void 0?[_.sentenceIds,void 0]:[[],bt]}let I={...r,[f]:{mode:"full",text:E.text}},[q,F]=this.#t.resolve(I,i,l);return q!==void 0?[q.sentenceIds,void 0]:[[],F]}#a(e){let r=e.start_anchor??e.start,[n,i]=this.#t.parseAnchor(r,"start_anchor");if(i!==void 0||n?.text===void 0)return[];let a=Fm(this.#r.findExactMatches(n.text));if(a===void 0)return[];let o=e.end_anchor??e.end;if(o===void 0)return this.#r.resolveSentenceIds(a);let[s,c]=this.#t.parseAnchor(o,"end_anchor");if(c!==void 0||s?.text===void 0)return[];let u=Fm(this.#r.findExactMatches(s.text));return u===void 0||u.offset<a.offset?[]:this.#r.resolveSentenceIds({length:u.offset+u.length-a.offset,offset:a.offset})}async#o(e){let r=this.#s(e),n=e.candidates.map(i=>i.occurrenceId);try{return[await z({maxRetries:xW,messages:r,parse:a=>{let o=e.candidates.find(s=>s.occurrenceId===a.choice);if(o===void 0)throw new O([`Invalid choice "${a.choice}". Expected one of: ${n.join(", ")}`]);return o},responseIntentClassifierPrompt:this.#n,request:this.#i,schema:KE}),void 0]}catch(i){return AE(i)?[void 0,{candidates:e.candidates,code:"choice_parse_failed_full_fragment",fieldName:e.fieldName,message:`Second-stage choice parse validation failed for ${e.fieldName}; falling back to the full fragment span.`}]:[void 0,{candidates:e.candidates,code:"choice_failed",fieldName:e.fieldName,message:`Second-stage choice failed for ${e.fieldName}: ${LE(i)}`}]}}#s(e){return[{content:this.#e,role:"system"},{content:`Previously generated chunk (do NOT rewrite it):
|
|
1780
|
+
\`\`\`json
|
|
1781
|
+
${JSON.stringify(e.chunkData,null,2)}
|
|
1782
|
+
\`\`\`
|
|
1783
|
+
|
|
1784
|
+
Resolve only this field: "${e.fieldName}" for chunk #${e.chunkIndex} [${e.chunkLabel}].
|
|
1785
|
+
Choose exactly one candidate occurrence ID from the list below.
|
|
1786
|
+
|
|
1787
|
+
`+e.candidates.map(_E).join(`
|
|
1788
|
+
`),role:"user"}]}}});var tc,zE=d(()=>{"use strict";Ie();L();NE();Ea();WE();JE();Zs();tc=class{#e;#t;#r;#n;#i;#a;#o;constructor(e){this.#e=new ec({choiceSystemPrompt:e.choiceSystemPrompt,projection:e.projection,requestChoice:e.requestChoice,responseIntentClassifierPrompt:e.responseIntentClassifierPrompt}),this.#t=e.metadataField,this.#n=e.sentenceTextSource,this.#o=e.visibleChunkIds,this.#i=RE(e.projection.sentences.map(r=>({sentenceId:r.sentenceId,wordsCount:r.wordsCount}))),this.#r=vE(e.projection),this.#a=e.validImportanceChunkIds===void 0?void 0:Sa(e.validImportanceChunkIds)}async parse(e,r){let n=[],i=[],a=[],o="importance_annotations"in e?OE({annotations:e.importance_annotations,issues:n,validImportanceChunkIds:this.#a}):void 0,s="fragment_summary"in e?e.fragment_summary:void 0,c=TE(e.links);for(let[l,m]of e.chunks.entries()){let p=l+1,h=[],g=m.label.trim(),f=m.content.trim();g===""&&h.push(`Chunk #${p}: Missing or empty "label" field`),f===""&&h.push(`Chunk #${p}: Missing or empty "content" field`);let[E,v]=await this.#e.resolve({chunkIndex:p,chunkLabel:g,data:m,isLastGenerationAttempt:r.isLastGenerationAttempt});if(E.length===0&&(v!==void 0?h.push(`Chunk #${p} ("${g}"): ${v.message}`):h.push(`Chunk #${p} ("${g}"): Missing evidence`)),h.length>0){n.push(...h);continue}let I=E[0];if(I===void 0){n.push(`Chunk #${p} ("${g}"): Unable to resolve any sentence IDs`);continue}let q=E.reduce((F,_)=>F+(this.#i[ba(_)]??0),0);if(this.#t==="retention"){let F=m;i.push({content:f,generation:0,id:0,label:g,links:[],retention:eu(F.retention),sentenceId:I,sentenceIds:[...E],wordsCount:q})}else{let F=m;i.push({content:f,generation:0,id:0,importance:jr(F.importance),label:g,links:[],sentenceId:I,sentenceIds:[...E],wordsCount:q})}a.push(m.temp_id)}let u=ME({issues:n,links:c,tempIds:a,visibleChunkIds:this.#o});if(n.length>0)throw new O(n);return{chunkBatch:{chunks:i,links:u,orderCorrect:!0,tempIds:a,...o===void 0?{}:{importanceAnnotations:o}},...s===void 0?{}:{fragmentSummary:s}}}async getChunkSourceSentences(e){let r=[];for(let n of e.sentenceIds){let i=ba(n),a=this.#r[i];if(a!==void 0){r.push(a);continue}r.push(await this.#n.getSentence(n))}return r}}});var QE=d(()=>{"use strict";zE();Zs()});function ka(t){let e="";for(let r of t)e+=vW[r]??r;return e}var vW,jt,rc=d(()=>{"use strict";vW={'"':"\uFF02","\\":"\uFF3C"},jt=class{#e;#t;#r;constructor(e){let r=[],n="",i="",a=0;for(let[o,s]of e.entries()){o>0&&(n+=" ",i+=" ",a+=1);let c=ka(s.text),u=a,l=u+c.length;n+=s.text,i+=c,r.push({endOffset:l,projectedText:c,rawText:s.text,sentenceId:s.sentenceId,startOffset:u,wordsCount:s.wordsCount}),a=l}this.#t=n,this.#e=i,this.#r=r}get projectedText(){return this.#e}get rawText(){return this.#t}get sentences(){return this.#r}findExactMatches(e){let r=ka(e).trim();if(r==="")return[];let n=[],i=0;for(;i<=this.#e.length-r.length;){let a=this.#e.indexOf(r,i);if(a===-1)break;n.push({length:r.length,offset:a}),i=a+1}return n}projectText(e){return ka(e)}resolveSentenceIds(e){if(e.length<=0)return[];let r=e.offset,n=e.offset+e.length;return this.#r.filter(i=>i.endOffset>r&&i.startOffset<n).map(i=>i.sentenceId)}}});import{detect as TW,validateISO2 as XE}from"tinyld";function nc(t){let e=t.trim();if(e!=="")try{return _W(TW(e))}catch{return}}function ic(t){return Ad(t)}function _W(t){let e=t.trim().toLowerCase(),r=XE(e);if(r!=="")return r;let n=e.split("-")[0];if(n===void 0)return;let i=XE(n);return i===""?void 0:i}var jm=d(()=>{"use strict";Ve()});function YE(t){let e=ic(t.targetLanguage);return VE(t.label,e)||VE(t.content,e)}function VE(t,e){if(t.trim()==="")return!1;let r=nc(t);return r===void 0?!0:r!==e}var ZE=d(()=>{"use strict";jm();Ve()});var ek,tk,rk,nk,ik=d(()=>{"use strict";ek="topologization/user_focused_extraction",tk="topologization/book_coherence_extraction",rk="topologization/evidence_choice",nk="topologization/translate_chunks"});import{z as Ia}from"zod";function ak(t){return t.sentences.map((e,r)=>`S${r+1}: ${ka(Ft(e.rawText))}`).join(`
|
|
1789
|
+
`)}function OW(t){return t instanceof pt&&t.cause instanceof O}function NW(t){return OW(t)||t instanceof we}function DW(t){let e=Object.create(null);for(let r of t)e[String(r.id)]=r;return e}function MW(t,e){let r=[];e.length!==t.length&&r.push(`Expected ${t.length} translated chunk(s), got ${e.length}`);for(let[n,i]of t.entries()){let a=e[n];if(a===void 0){r.push(`Missing translated chunk at position ${n}`);continue}a.id!==i.id&&r.push(`Translated chunk at position ${n} must keep id ${i.id}, got ${a.id}`)}if(r.length>0)throw new O(r)}var CW,PW,LW,AW,xa,ok=d(()=>{"use strict";Ie();Tn();QE();rc();rc();ZE();ik();CW=7,PW=Ia.object({content:Ia.string(),id:Ia.number(),label:Ia.string()}),LW=Ia.array(PW),AW=3,xa=class{#e;#t;#r;#n;#i;constructor(e){this.#e=e.extractionGuidance,this.#t=e.llm,this.#r=e.scopes,this.#n=e.sentenceTextSource,this.#i=e.userLanguage}async extractUserFocused(e){let r=new jt(e.sentences),n=this.#a({promptTemplateName:ek,templateContext:{extraction_guidance:this.#e,evidence_selection_prompt:yr,user_language:this.#i,working_memory:e.workingMemoryPrompt},text:ak(r)}),i=await this.#o({emptyChunkBatch:{chunks:[],links:[],orderCorrect:!0,tempIds:[]},messages:n,metadataField:"retention",projection:r,schema:qE,sentences:e.sentences,visibleChunkIds:e.visibleChunkIds});return{chunkBatch:await this.#s(i.result.chunkBatch,i.parser),fragmentSummary:i.result.fragmentSummary??""}}async extractBookCoherence(e){let r=new jt(e.sentences),n=this.#a({promptTemplateName:tk,templateContext:{user_focused_chunks:e.userFocusedChunks.map(a=>({content:a.content,id:a.id,label:a.label})),evidence_selection_prompt:yr,user_language:this.#i,working_memory:e.workingMemoryPrompt},text:ak(r)}),i=await this.#o({emptyChunkBatch:{chunks:[],importanceAnnotations:[],links:[],orderCorrect:!0,tempIds:[]},messages:n,metadataField:"importance",projection:r,schema:$E,sentences:e.sentences,validImportanceChunkIds:e.userFocusedChunks.map(a=>a.id),visibleChunkIds:e.visibleChunkIds});return await this.#s(i.result.chunkBatch,i.parser)}#a(e){return[{content:this.#t.loadSystemPrompt(e.promptTemplateName,e.templateContext),role:"system"},{content:e.text,role:"user"}]}async#o(e){return await this.#t.withContext(async r=>{let n=new tc({metadataField:e.metadataField,projection:e.projection,responseIntentClassifierPrompt:this.#t.loadSystemPrompt(ee),sentenceTextSource:this.#n,sentences:e.sentences,visibleChunkIds:e.visibleChunkIds,choiceSystemPrompt:this.#t.loadSystemPrompt(rk,{extraction_guidance:this.#e,metadata_field:e.metadataField,user_language:this.#i}),requestChoice:async(i,a,o)=>await r.request(i,{retryIndex:a,retryMax:o,scope:this.#r.choice,useCache:!1}),...e.validImportanceChunkIds===void 0?{}:{validImportanceChunkIds:e.validImportanceChunkIds}});try{let i=await z({messages:e.messages,schema:e.schema,maxRetries:CW,parse:async(a,o,s)=>await n.parse(a,{isLastGenerationAttempt:o>=s}),responseIntentClassifierPrompt:this.#t.loadSystemPrompt(ee),request:async(a,o,s)=>await r.request(a,{retryIndex:o,retryMax:s,scope:this.#r.extraction})});return{parser:n,result:i}}catch(i){if(NW(i))return{parser:n,result:{chunkBatch:e.emptyChunkBatch}};throw i}})}async#s(e,r){if(this.#i===void 0||e.chunks.length===0)return e;let n=[];for(let[i,a]of e.chunks.entries())YE({content:a.content,label:a.label,targetLanguage:this.#i})&&n.push({content:a.content,id:i,label:a.label,sourceSentences:await r.getChunkSourceSentences(a)});if(n.length===0)return e;try{let i=await this.#c(n,this.#i),a=DW(i);return{...e,chunks:e.chunks.map((o,s)=>{let c=a[String(s)];return c===void 0?o:{...o,content:c.content,label:c.label}})}}catch{return e}}async#c(e,r){return await z({messages:[{content:this.#t.loadSystemPrompt(nk,{user_language:r}),role:"system"},{content:JSON.stringify(e,void 0,2),role:"user"}],schema:LW,maxRetries:AW,parse:n=>(MW(e,n),n),responseIntentClassifierPrompt:this.#t.loadSystemPrompt(ee),request:async(n,i,a)=>await this.#t.request(n,{retryIndex:i,retryMax:a,scope:this.#r.extraction})})}}});async function Gm(t,e){return await new xa(t).extractUserFocused(e)}async function Bm(t,e){return await new xa(t).extractBookCoherence(e)}var Um=d(()=>{"use strict";ok()});function sk(){return new Hm}var WW,Hm,ck=d(()=>{"use strict";WW=/(?:[.!?。!?…]+|(?:\r?\n)\s*(?:\r?\n)?|[.!?。!?…]+["'”’」』】)》〉〕〗]*)$/u,Hm=class{#e=new Intl.Segmenter(void 0,{granularity:"grapheme"});#t=new Intl.Segmenter(void 0,{granularity:"sentence"});#r=new Intl.Segmenter(void 0,{granularity:"word"});async*pipe(e){let r="",n=0;for await(let a of e){if(a==="")continue;r+=a;let{remainder:o,sentences:s}=this.#n(r,!1);r=o;for(let c of s)yield{offset:n,text:c,wordsCount:this.#i(c)},n+=c.length}let{sentences:i}=this.#n(r,!0);for(let a of i)yield{offset:n,text:a,wordsCount:this.#i(a)},n+=a.length}#n(e,r){if(e.trim()==="")return{remainder:"",sentences:[]};let n=Array.from(this.#t.segment(e));if(n.length===0)return{remainder:e,sentences:[]};if(r||this.#o(e))return{remainder:"",sentences:n.map(a=>a.segment.trim()).filter(a=>a!=="")};let i=n[n.length-1];return i===void 0?{remainder:e,sentences:[]}:{remainder:e.slice(i.index),sentences:n.slice(0,-1).map(a=>a.segment.trim()).filter(a=>a!=="")}}#i(e){let r=0;for(let n of this.#r.segment(e))"isWordLike"in n&&n.isWordLike&&(r+=1);return r>0?r:this.#a(e)}#a(e){let r=0;for(let n of this.#e.segment(e))r+=1;return r}#o(e){return WW.test(e.trimEnd())}}});function gr(t,e){return(e?.adapter??sk()).pipe(t)}var qm=d(()=>{"use strict";ck()});var Ra,dk=d(()=>{"use strict";Qw();Um();qm();Ra=class{#e;#t;#r;constructor(e){this.#e=new zs(e.attention.capacity,e.attention.generationDecayFactor,e.attention.idGenerator),this.#t={extractionGuidance:e.extractionGuidance,llm:e.llm,scopes:e.scopes,sentenceTextSource:e.sentenceTextSource,...e.userLanguage===void 0?{}:{userLanguage:e.userLanguage}},this.#r=e.segmenter}get capacity(){return this.#e.capacity}segment(e){return this.#r===void 0?gr(e):gr(e,{adapter:this.#r})}async extractUserFocused(e){let r=this.#e.createChunkBatchContext(),n=await Gm(this.#t,{sentences:e.sentences,text:e.text,visibleChunkIds:r.visibleChunkIds,workingMemoryPrompt:r.workingMemoryPrompt});return{delta:await this.#e.acceptChunkBatch(n.chunkBatch),fragmentSummary:n.fragmentSummary}}async extractBookCoherence(e){let r=this.#e.createChunkBatchContext({includeCurrentFragment:!1}),n=[...r.visibleChunkIds,...e.userFocusedChunks.map(a=>a.id)],i=await Bm(this.#t,{sentences:e.sentences,text:e.text,userFocusedChunks:e.userFocusedChunks,visibleChunkIds:n,workingMemoryPrompt:r.workingMemoryPrompt});return await this.#e.acceptChunkBatch(i)}completeFragment(e){this.#e.completeFragment(e)}clear(){this.#e.clear()}}});var ac=d(()=>{"use strict";dk();qm()});var oc=d(()=>{"use strict"});async function lk(t,e){let r=t.listSentences===void 0?await FW(t):await t.listSentences(),n=[],i=[],a=0,o=0;for(let s=0;s<r.length;s+=1){let c=r[s];c===void 0||c.text.trim()===""||(i.length>0&&o+c.wordsCount>e&&(n.push({startSentenceIndex:a,sentences:i}),i=[],o=0),i.length===0&&(a=s),i.push(c),o+=c.wordsCount)}return i.length>0&&n.push({startSentenceIndex:a,sentences:i}),n}async function mk(t){let e=[];for await(let r of t)e.push(r);return e.join("")}function pk(t){return t.reduce((e,r)=>e+r.wordsCount,0)}async function hk(t,e){return e.length===0?"":(await Promise.all(e.map(async n=>await t.getFragment(n)))).flatMap(n=>n.sentences.map(i=>i.text)).join(" ").trim()}async function FW(t){return(await Promise.all((await t.listFragmentIds()).map(async r=>await t.getFragment(r)))).sort((r,n)=>r.fragmentId-n.fragmentId).flatMap(r=>r.sentences)}var sc=d(()=>{"use strict";ac();oc()});var fk=d(()=>{"use strict";sc()});async function bk(t){let e=await t.document.snakes.listIdsByGroup(t.serialId,t.groupId),r=await Promise.all(e.map(async o=>await t.document.snakes.getById(o))),n=await Promise.all(r.filter(o=>o!==void 0).map(async o=>await HW(o,t.document)));if(n.length<=t.maxClues)return gk(n);let i=[...n],a=-1;for(;i.length>t.maxClues;){i.sort(Sk);let o=Math.floor(t.maxClues*.75),s=i.slice(o);if(s.length<2)break;let c=qW(s),[u,l]=c??[...i].sort(BW).slice(0,2);if(u===void 0||l===void 0)break;i=i.filter(m=>m!==u&&m!==l),i.push($W(u,l,a)),a-=1}return gk(i)}function GW(t,e){let r=yk(t.chunks),n=yk(e.chunks),i=Object.create(null),a=0;for(let o of r)i[String(o)]=!0,a+=1;for(let o of n){let s=String(o);i[s]!==!0&&(i[s]=!0,a+=1)}return r.length+n.length-a}function yk(t){let e=Object.create(null),r=[];for(let n of t)for(let i of n.sentenceIds){let a=i[1],o=String(a);e[o]!==!0&&(e[o]=!0,r.push(a))}return r.sort(wk),r}function BW(t,e){return t.weight-e.weight}function Sk(t,e){return e.weight-t.weight}function UW(t,e){let[r,n]=t.sentenceId,[i,a]=e.sentenceId;return r!==i?r-i:n-a}function wk(t,e){return t-e}async function HW(t,e){let r=await e.snakeChunks.listChunkIds(t.id),n=(await Promise.all(r.map(async i=>await e.chunks.getById(i)))).filter(i=>i!==void 0);return{clueId:t.id,chunks:n,isMerged:!1,label:`${t.firstLabel} -> ${t.lastLabel}`,sourceSnakeIds:[t.id],weight:t.weight}}function qW(t){let e,r=-1;for(let n=0;n<t.length;n+=1){let i=t[n];if(i!==void 0)for(let a=n+1;a<t.length;a+=1){let o=t[a];if(o===void 0)continue;let s=GW(i,o);s<=r||(r=s,e=[i,o])}}return e}function $W(t,e,r){let n=[...t.sourceSnakeIds,...e.sourceSnakeIds].sort(wk),i=[...t.chunks,...e.chunks].sort(UW);return{clueId:r,chunks:i,isMerged:!0,label:`Merged minor clues (${n.length})`,sourceSnakeIds:n,weight:t.weight+e.weight}}function gk(t){let e=t.reduce((n,i)=>n+i.weight,0),r=t.map(n=>({...n,weight:e===0?0:n.weight/e}));return r.sort(Sk),r}var Ek=d(()=>{"use strict"});var kk,Ik,xk,Rk,cc=d(()=>{"use strict";kk="editor/clue_reviewer",Ik="editor/clue_reviewer_generator",xk="editor/revision_feedback",Rk="editor/text_compressor"});function KW(t,e,r){let n=[{content:t.systemPrompt,role:"system"},{content:t.markedText,role:"user"}];return e!==void 0&&r!==void 0&&n.push({content:`<final>${e}</final>`,role:"assistant"},{content:r,role:"user"}),n}function JW(t){let e=t.trim(),r=/^<final>([\s\S]*)<\/final>$/.exec(e);if(r===null)throw new Error("Compression response must be exactly one <final>...</final> block.");let n=r[1]?.trim();if(n===void 0||n==="")throw new Error("Compression response contained an empty <final> block.");if(/<\/?[A-Za-z][^>]*>/.test(n))throw new Error("Compressed text must not contain XML or HTML tags.");return n}function zW(t){return["Your previous response was invalid.",t instanceof Error?t.message:String(t),"Return exactly one <final>...</final> block and nothing else.","The content inside <final> must be plain text only, with no tags, headings, fences, or explanatory text."].join(" ")}var $m,dc,vk=d(()=>{"use strict";cc();$m=2,dc=class{#e;#t;#r;#n;constructor(e,r,n,i){this.#e=n,this.#t=e,this.#r=r,this.#n=i}async request(e){let r=Math.floor(e.targetLength*.85),n=Math.floor(e.targetLength*1.15),i=this.#t.loadSystemPrompt(Rk,{acceptable_max:n,acceptable_min:r,compression_ratio:Math.floor(this.#e*100),original_length:e.markedText.length,target_length:e.targetLength,user_language:this.#n}),a=KW({markedText:e.markedText,systemPrompt:i},e.previousCompressedText,e.revisionFeedback);return await this.#t.request(async o=>{let s=a;for(let c=0;c<=$m;c+=1){let u=await o(s,{retryIndex:c,retryMax:$m,scope:this.#r,...c===0?{}:{useCache:!1}});try{return JW(u)}catch(l){if(c>=$m)throw l;s=[...s,{content:u,role:"assistant"},{content:zW(l),role:"user"}]}}throw new Error("Compression request failed unexpectedly")})}}});var _n,Bre,Tk,uc=d(()=>{"use strict";Yd();_n=(n=>(n.Critical="critical",n.Major="major",n.Minor="minor",n))(_n||{}),Bre=Fr(_n),Tk=ci(_n,"review severity")});function _k(t){let e=0;for(let r of t)for(let n of r.issues)e+=Km[n.severity]*r.weight;return e}function Ck(t){let e=Ak(t.reviews),r=e.slice(0,9),n=e.length-r.length,i=[];for(let a=0;a<r.length;a+=1){let o=r[a];o!==void 0&&(i.push(`${a+1}. [${o.severity.toUpperCase()}]`,` Problem: ${o.problem}`),o.suggestion!==""&&i.push(` Suggestion: ${o.suggestion}`),i.push(""))}return n>0&&i.push(`... and ${n} more issues hidden (lower priority)`),t.llm.loadSystemPrompt(xk,{issues_description:i.join(`
|
|
1790
|
+
`)})}function Pk(t){let e=Ak(t);if(e.length===0)return`No issues found - all reviewers are satisfied.
|
|
1791
|
+
`;let r=[];for(let n=0;n<e.length;n+=1){let i=e[n];i!==void 0&&(r.push(`${n+1}. [${i.severity.toUpperCase()}]`,` Problem: ${i.problem}`),i.suggestion!==""&&r.push(` Suggestion: ${i.suggestion}`),r.push(""))}return r.join(`
|
|
1792
|
+
`)}function Lk(t){let e=t.reduce((r,n)=>r===void 0||n.score<r.score?n:r,void 0);if(e===void 0)throw new Error("Compression failed: no versions generated");return e}function Ak(t){let e=t.flatMap(r=>r.issues.map(n=>({...n,weight:r.weight})));return e.sort((r,n)=>{let i=Km[n.severity]-Km[r.severity];return i!==0?i:n.weight-r.weight}),e}var Km,Jm=d(()=>{"use strict";cc();uc();Km=Object.freeze({critical:9,major:3,minor:1})});function Ok(t){if(t.userLanguage===void 0)return;let e=ic(t.userLanguage),r=nc(t.compressedText);if(!(r===void 0||r===e))return{detectedLanguageCode:r,review:{clueId:-1,issues:[{problem:`Output language error: detected ${r}, but ${e} (${t.userLanguage}) is required.`,severity:"critical",suggestion:`Please translate the entire compressed text to ${t.userLanguage}. Maintain all information integrity and ensure the translation sounds natural and native, not machine-translated.`}],weight:1},targetLanguageCode:e}}var Nk=d(()=>{"use strict";jm();Ve();uc()});import{appendFile as lc,writeFile as QW}from"fs/promises";function XW(t,e,r){let n=["=".repeat(80),`CHUNK HIERARCHY - Serial ${r}, Group ${e}`,"=".repeat(80),""];for(let i=0;i<t.length;i+=1){let a=t[i];if(a!==void 0){n.push(`Clue #${i+1} (ID: ${a.clueId})`,`|- Weight: ${a.weight.toFixed(4)}`,`|- Label: ${a.label}`,`|- Source snakes: ${a.sourceSnakeIds.join(", ")}`,`|- Merged: ${a.isMerged?"yes":"no"}`,`\\- Chunks: ${a.chunks.length}`,"");for(let o=0;o<a.chunks.length;o+=1){let s=a.chunks[o];if(s===void 0)continue;let c=s.content.length>60?`${s.content.slice(0,60)}...`:s.content;n.push(` - Chunk ${o+1}/${a.chunks.length} (ID: ${s.id})`,` Label: ${s.label}`,` Retention: ${s.retention??"N/A"}`,` Importance: ${s.importance??"N/A"}`,` Content: ${c}`,"")}}}return n.push("=".repeat(80),""),n.join(`
|
|
1793
|
+
`)}function VW(t){let e=t.getFullYear(),r=String(t.getMonth()+1).padStart(2,"0"),n=String(t.getDate()).padStart(2,"0"),i=String(t.getHours()).padStart(2,"0"),a=String(t.getMinutes()).padStart(2,"0"),o=String(t.getSeconds()).padStart(2,"0");return`${e}-${r}-${n} ${i}-${a}-${o}`}var mc,Dk=d(()=>{"use strict";_e();Jm();mc=class{#e;#t;#r;#n;#i;#a;constructor(e,r,n){this.#e=n.compressionRatio,this.#t=r,this.#r=n.logDirPath,this.#n=n.maxIterations,this.#i=e}async appendCompressionResult(e){if(this.#a===void 0)return;let r=[];e.thinkingText!==""&&r.push("Thinking:","-".repeat(80),e.thinkingText,"-".repeat(80),""),r.push(`Compressed Text (${e.compressedText.length} characters):`,"-".repeat(80),e.compressedText,"-".repeat(80),"",""),await lc(this.#a,`${r.join(`
|
|
1794
|
+
`)}
|
|
1795
|
+
`,"utf8")}async appendFinalSelection(e,r){if(this.#a===void 0)return;let n=["","=".repeat(80),"FINAL SELECTION","=".repeat(80),"",`Selected: Iteration ${e.iteration}/${this.#n}`,`Score: ${e.score.toFixed(2)}`,`Length: ${e.text.length} characters`,`Compression ratio: ${(e.text.length/r).toFixed(1)}%`,"","=".repeat(80),""];e.score>0&&n.push("REMAINING UNRESOLVED ISSUES","=".repeat(80),"",Pk(e.reviews),"=".repeat(80),""),await lc(this.#a,`${n.join(`
|
|
1796
|
+
`)}
|
|
1797
|
+
`,"utf8")}async appendIterationHeader(e,r){if(this.#a===void 0)return;let n=["","=".repeat(80),`ITERATION ${e}/${this.#n}`,"=".repeat(80),""];r!==void 0&&r.trim()!==""&&n.push("Revision Feedback:","-".repeat(80),r,"-".repeat(80),""),await lc(this.#a,`${n.join(`
|
|
1798
|
+
`)}
|
|
1799
|
+
`,"utf8")}async appendLanguageMismatch(e){if(this.#a===void 0)return;let r=e.review.issues[0];if(r===void 0)return;let n=["","!".repeat(80),"LANGUAGE MISMATCH DETECTED","!".repeat(80),`Expected: ${e.targetLanguageCode} (${e.userLanguage??"unknown"})`,`Detected: ${e.detectedLanguageCode}`,`Issue: ${r.problem}`,`Suggestion: ${r.suggestion}`,"!".repeat(80),""];await lc(this.#a,`${n.join(`
|
|
1800
|
+
`)}
|
|
1801
|
+
`,"utf8")}async initialize(e){if(this.#r===void 0)return;let r=VW(new Date);this.#a=vo({category:"editor",logDirPath:this.#r,prefix:`compression-serial-${this.#i}-group-${this.#t}`}),this.#a!==void 0&&await QW(this.#a,["=== Text Compression Log ===",`Serial: ${this.#i}, Group: ${this.#t}`,`Started at: ${r}`,`Compression ratio target: ${Math.round(this.#e*100)}%`,`Max iterations: ${this.#n}`,"","",XW(e,this.#t,this.#i),""].join(`
|
|
1802
|
+
`),"utf8")}}});async function Fk(t){return await Qm({chunks:t.chunks,segmentStartIndexes:await rF(t.chunks,t.serialFragments),serialFragments:t.serialFragments,...t.fullMarkup===void 0?{}:{fullMarkup:t.fullMarkup},...t.wrapHighRetention===void 0?{}:{wrapHighRetention:t.wrapHighRetention}})}async function Qm(t){if(t.segmentStartIndexes.length===0)return"";let e=eF(t.chunks),r=[...t.segmentStartIndexes].sort(va),n=[...await t.serialFragments.listFragmentIds()].sort(va),i=await iF(tF(r,n),t.serialFragments),a=[];for(let o=0;o<r.length;o+=1){let s=r[o];if(s===void 0)continue;let c=i[String(s)];if(c!==void 0){if(o>0){let u=r[o-1];if(u!==void 0&&s>u){let l=ZW({fragments:i,skippedStartIndexes:jk(n,u,s)});l!==""&&a.push(l)}}a.push(YW({chunkCoverage:e,fragment:c,fullMarkup:t.fullMarkup??!1,wrapHighRetention:t.wrapHighRetention??!1}))}}return a.join(`
|
|
1803
|
+
|
|
1804
|
+
`)}function YW(t){let e=[],{fragment:r}=t,n=0;for(;n<r.sentences.length;){if(r.sentences[n]===void 0){n+=1;continue}let o=zm(r.serialId,r.fragmentId+n),s=t.chunkCoverage[o];if(s===void 0){e.push({endIndex:n+1,startIndex:n}),n+=1;continue}let c=Mk(s),u=n+1;for(;u<r.sentences.length;){let l=zm(r.serialId,r.fragmentId+u),m=t.chunkCoverage[l];if(m===void 0||Mk(m).label!==c.label)break;u+=1}e.push({chunkAttributes:c,endIndex:u,startIndex:n}),n=u}return e.map(a=>aF({fragment:r,fullMarkup:t.fullMarkup,range:a,wrapHighRetention:t.wrapHighRetention})).join(" ")}function ZW(t){let e=[];for(let r of t.skippedStartIndexes){let n=t.fragments[String(r)]?.summary?.trim()??"";n!==""&&e.push(n)}return e.join(" ")}function eF(t){let e=Object.create(null);for(let r of t)for(let n of r.sentenceIds){let i=zm(...n),a=e[i];e[i]=a===void 0?[r]:[...a,r]}return e}function zm(t,e){return`${t}:${e}`}function tF(t,e){let r=new Set(t);for(let n=1;n<t.length;n+=1){let i=t[n-1],a=t[n];if(!(i===void 0||a===void 0))for(let o of jk(e,i,a))r.add(o)}return[...r].sort(va)}function jk(t,e,r){return t.filter(n=>n>e&&n<r)}async function rF(t,e){let r=[...await e.listFragmentIds()].sort(va),n=Object.create(null),i=[];for(let a of t)for(let o of a.sentenceIds){let s=nF(r,o[1]);if(s===void 0)continue;let c=String(s);n[c]!==!0&&(n[c]=!0,i.push(s))}return i.sort(va),i}function nF(t,e){let r;for(let n of t){if(n>e)break;r=n}return r}async function iF(t,e){let r=Object.create(null);return await Promise.all(t.map(async n=>{r[String(n)]=await e.getFragment(n)})),r}function va(t,e){return t-e}function Mk(t){let e=Wk({detailed:3,focused:2,relevant:1,verbatim:4}),r=Wk({critical:3,helpful:1,important:2}),n=t[0],i=t[0];for(let o of t)Cn(o.retention,e)>Cn(n?.retention,e)&&(n=o),Cn(o.importance,r)>Cn(i?.importance,r)&&(i=o);return{label:(Cn(n?.retention,e)>=Cn(i?.importance,r)?n:i)?.label??"",...i?.importance===void 0?{}:{importance:i.importance},...n?.retention===void 0?{}:{retention:n.retention}}}function Wk(t){return Object.freeze(t)}function Cn(t,e){return t===void 0?0:e[t]??0}function aF(t){let e=t.fragment.sentences.slice(t.range.startIndex,t.range.endIndex).map(n=>n.text).join(" "),r=t.range.chunkAttributes;if(r===void 0)return e;if(t.fullMarkup){let n=[`label="${r.label}"`];return r.retention!==void 0&&n.push(`retention="${r.retention}"`),r.importance!==void 0&&n.push(`importance="${r.importance}"`),`<chunk ${n.join(" ")}>${e}</chunk>`}return t.wrapHighRetention&&(r.retention==="verbatim"||r.retention==="detailed")?`<chunk retention="${r.retention}">${e}</chunk>`:e}var Xm=d(()=>{"use strict";L()});function Bk(t){return t.replace(/<chunk(?:\s+[^>]*)?>/g,"").replace(/<\/chunk>/g,"")}function Uk(t){let e=t.match(/##\s*(?:Compressed\s+Text|压缩文本)\s*\n+(.*?)(?:\n+---|\*\*CRITICAL\*\*|$)/is);return e?.[1]!==void 0?Gk(e[1].trim()):Gk(t.trim())}function Hk(t){let e=t.match(/##\s*(?:Compressed\s+Text|压缩文本)\s*/i);return e?.index===void 0?"":t.slice(0,e.index).trim()}function Gk(t){return t.match(/^```(?:\w+)?\s*\n([\s\S]*?)\n```$/)?.[1]?.trim()??t}var qk=d(()=>{"use strict"});import{z as Pn}from"zod";function dF(t,e){return e===void 0?[{content:t.systemPrompt,role:"system"},{content:t.compressedText,role:"user"}]:[{content:t.systemPrompt,role:"system"},{content:e[0],role:"user"},{content:e[1],role:"assistant"},{content:t.compressedText,role:"user"}]}var oF,sF,cF,pc,$k=d(()=>{"use strict";_e();Ie();cc();Xm();uc();oF=["critical","major","minor"],sF=Pn.object({problem:Pn.string(),severity:Pn.enum(oF),suggestion:Pn.string().default("")}),cF=Pn.object({issues:Pn.array(sF)}),pc=class{#e;#t;#r;#n;#i;constructor(e,r,n,i){this.#e=e,this.#t=n.reviewGuide,this.#r=n.review,this.#n=r,this.#i=i}async generateClueReviewers(e){return await Promise.all(e.map(async r=>await this.#e.request(async n=>{let i=await Fk({chunks:r.chunks,fullMarkup:!0,serialFragments:this.#n}),a=[{content:this.#e.loadSystemPrompt(Ik),role:"system"},{content:i,role:"user"}],o=await n(a,{scope:this.#t});return{clueId:r.clueId,label:r.label,reviewerInfo:o.trim(),weight:r.weight}})))}async reviewCompression(e,r,n){let i=await Promise.all(r.map(async o=>await this.#e.request(async s=>{let c=this.#e.loadSystemPrompt(kk,{thread_info:o.reviewerInfo,user_language:this.#i}),u=n[String(o.clueId)],l=dF({compressedText:e,systemPrompt:c},u);try{return await z({messages:l,parse:m=>({rawResponse:JSON.stringify(m),review:{clueId:o.clueId,issues:m.issues.map(p=>({...p,severity:Tk(p.severity)})),weight:o.weight}}),responseIntentClassifierPrompt:this.#e.loadSystemPrompt(ee),request:async(m,p,h)=>await s(m,{retryIndex:p,retryMax:h,scope:this.#r,useCache:!1}),schema:cF})}catch(m){if(!(m instanceof we))throw m;return Te({clueId:o.clueId,component:"editor-review"}).warn({error:m},"Compression reviewer failed to produce valid JSON; treating it as no issues."),{rawResponse:void 0,review:{clueId:o.clueId,issues:[],weight:o.weight}}}}))),a=Object.create(null);for(let o of i)a[String(o.review.clueId)]=o.rawResponse;return{rawResponses:a,reviews:i.map(o=>o.review)}}}});async function Ta(t){return await new Ym(t).run()}function Vm(t,e){return t-e}function uF(t){return t.flatMap(e=>e.chunks)}function lF(t){let e=t.document??t.workspace;if(e===void 0)throw new Error("Editor requires a document");return e}var Ym,Kk=d(()=>{"use strict";Ek();vk();Jm();Nk();Dk();Xm();qk();$k();Ym=class{#e;#t;#r;#n;#i;#a;#o;#s;#c;#l;#u;#d;#p;constructor(e){let r=lF(e);this.#e=e.compressionRatio??.2,this.#t=e.groupId,this.#r=e.llm,this.#i=e.maxClues??10,this.#a=e.maxIterations??5,this.#c=e.scopes,this.#l=r.getSerialFragments(e.serialId),this.#u=e.serialId,this.#d=e.userLanguage,this.#p=r,this.#o=new dc(this.#r,e.scopes.compress,this.#e,this.#d),this.#n=new mc(this.#u,this.#t,{compressionRatio:this.#e,maxIterations:this.#a,...e.logDirPath===void 0?{}:{logDirPath:e.logDirPath}}),this.#s=new pc(this.#r,this.#l,{review:this.#c.review,reviewGuide:this.#c.reviewGuide},this.#d)}async run(){let e=await this.#m(),r=await this.#h(e);if(r.length===0)return"";let n=await bk({document:this.#p,groupId:this.#t,maxClues:this.#i,serialId:this.#u}),i=await this.#f(e);if(i.trim()==="")return"";await this.#n.initialize(n);let a=await Qm({chunks:uF(n),segmentStartIndexes:r,serialFragments:this.#l,wrapHighRetention:!0}),o=await this.#s.generateClueReviewers(n),s=Math.floor(i.length*this.#e),c=[],u=Object.create(null),l,m;for(let h=1;h<=this.#a;h+=1){await this.#n.appendIterationHeader(h,m);let g=await this.#o.request({markedText:a,targetLength:s,...l===void 0?{}:{previousCompressedText:l},...m===void 0?{}:{revisionFeedback:m}}),f=Bk(Uk(g)),E=Hk(g);await this.#n.appendCompressionResult({compressedText:f,thinkingText:E});let v=await this.#s.reviewCompression(f,o,u),I=[...v.reviews],q=Ok({compressedText:f,...this.#d===void 0?{}:{userLanguage:this.#d}});q!==void 0&&(I.push(q.review),await this.#n.appendLanguageMismatch({detectedLanguageCode:q.detectedLanguageCode,review:q.review,targetLanguageCode:q.targetLanguageCode,userLanguage:this.#d}));let F=_k(I);if(c.push({iteration:h,reviews:I,score:F,text:f}),F===0)break;if(!(h>=this.#a)){m=Ck({llm:this.#r,reviews:I}),l=f;for(let _ of Object.keys(v.rawResponses)){let bt=v.rawResponses[_];bt!==void 0&&(u[_]=[f,bt])}}}let p=Lk(c);return await this.#n.appendFinalSelection(p,i.length),p.text}async#m(){return(await this.#p.fragmentGroups.listBySerial(this.#u)).filter(e=>e.groupId===this.#t).map(e=>({endSentenceIndex:e.endSentenceIndex,startSentenceIndex:e.startSentenceIndex}))}async#h(e){let r=[...await this.#l.listFragmentIds()].sort(Vm),n=new Set;for(let i of e)for(let a=0;a<r.length;a+=1){let o=r[a];if(o===void 0)continue;let s=r[a+1],c=s===void 0?1/0:s-1;o<=i.endSentenceIndex&&c>=i.startSentenceIndex&&n.add(o)}return[...n].sort(Vm)}async#f(e){return(await Promise.all(e.map(async n=>({sentences:await this.#b(n.startSentenceIndex,n.endSentenceIndex)})))).flatMap(n=>n.sentences.map(i=>i.text)).join(" ")}async#b(e,r){if(this.#l.listSentencesInRange!==void 0)return await this.#l.listSentencesInRange(e,r);let n=[...await this.#l.listFragmentIds()].sort(Vm);return(await Promise.all(n.filter((a,o)=>{let s=n[o+1],c=s===void 0?1/0:s-1;return a<=r&&c>=e}).map(async a=>await this.#l.getFragment(a)))).flatMap(a=>a.sentences.filter((o,s)=>{let c=a.fragmentId+s;return c>=e&&c<=r}))}}});var Zm=d(()=>{"use strict";Kk()});async function Qk(t){let e=await mF(t.fragments);return hF(pF({chunks:t.chunks,edges:t.edges,segmentWordsCounts:e}))}async function mF(t){let e=Vk(),r=await t.listFragmentIds();for(let n of r){let i=await t.getFragment(n);e[String(n)]=i.sentences.reduce((a,o)=>a+o.wordsCount,0)}return e}function pF(t){let e=Object.keys(t.segmentWordsCounts).map(Number).sort(Xk),r=gF(),n=Vk(),i=yF();for(let o of t.chunks){let s=Jk(e,o.sentenceId[1]);if(s===void 0)continue;let c=String(s);n[String(o.id)]=o.weight,r[c]===void 0&&(r[c]=[]),r[c]?.push(o.id)}for(let o of t.edges){let s=String(o.fromId),c=String(o.toId);i[s]===void 0&&(i[s]=[]),i[c]===void 0&&(i[c]=[]),i[s]?.push(o),i[c]?.push(o)}let a=fF();for(let o of t.chunks)a[String(o.id)]=o;return e.filter(o=>r[String(o)]!==void 0).map(o=>{let s=r[String(o)]??[],c=0,u=0;for(let l of s){let m=n[String(l)]??0,h=(i[String(l)]??[]).map(f=>({otherChunkId:f.fromId===l?f.toId:f.fromId,weight:f.weight})).map(f=>{let E=a[String(f.otherChunkId)];if(E!==void 0)return{otherSegmentStartIndex:Jk(e,E.sentenceId[1]),weight:f.weight}}).filter(f=>f!==void 0&&f.otherSegmentStartIndex!==void 0&&f.otherSegmentStartIndex!==o);if(h.length===0)continue;let g=h.reduce((f,E)=>f+E.weight,0);if(g!==0)for(let f of h){let E=m/g*f.weight;if(f.otherSegmentStartIndex<o){u+=E;continue}c+=E}}return{endIncision:c,startSentenceIndex:o,startIncision:u,wordsCount:t.segmentWordsCounts[String(o)]??0}})}function Jk(t,e){let r;for(let n of t){if(n>e)break;r=n}return r}function hF(t){let e=t.flatMap(l=>[l.startIncision,l.endIncision]).filter(l=>l>0).sort(Xk);if(e.length===0)return[...t];let r=Math.min(Math.floor(e.length*.98),e.length-1),n=e[r]??0,i=e.filter(l=>l<n);if(i.length===0)return t.map(l=>({...l,endIncision:l.endIncision>0?10:0,startIncision:l.startIncision>0?10:0}));let a=Math.min(...i),o=Math.max(...i),s=a>0?Math.log(a):0,c=o>0?Math.log(o):0,u=c-s===0?1:c-s;return t.map(l=>({...l,endIncision:zk(l.endIncision,{logRange:u,minLog:s,threshold:n}),startIncision:zk(l.startIncision,{logRange:u,minLog:s,threshold:n})}))}function zk(t,e){if(t===0)return 0;if(t>=e.threshold)return 10;let r=t>0?Math.log(t):e.minLog;return Math.max(1,Math.min(10,Math.round(1+(r-e.minLog)/e.logRange*9)))}function Xk(t,e){return t-e}function fF(){return Object.create(null)}function yF(){return Object.create(null)}function gF(){return Object.create(null)}function Vk(){return Object.create(null)}var Yk=d(()=>{"use strict"});function eI(t){if(t.segmentInfos.length===0)return[];let e=t.segmentInfos.map(n=>({count:n.wordsCount,endIncision:n.endIncision,startSentenceIndex:n.startSentenceIndex,startIncision:n.startIncision}));return bF(e,t.groupWordsCount).map((n,i)=>({endSentenceIndex:Math.max(...n),groupId:i,serialId:t.serialId,startSentenceIndex:Math.min(...n)}))}function bF(t,e){return ep(t,e).map(r=>r.map(n=>n.startSentenceIndex))}function ep(t,e){if(t.length===0)return[];if(e<=0)return t.map(o=>[o]);let r=t.reduce((o,s)=>o+s.count,0);if(t.length===1||r<=e)return[[...t]];let n=SF(t,e);if(n===void 0)return Zk(t,e);let i=t.slice(0,n+1),a=t.slice(n+1);return i.length===0||a.length===0||i.length===t.length||a.length===t.length?Zk(t,e):[...ep(i,e),...ep(a,e)]}function SF(t,e){let r=t.reduce((c,u)=>c+u.count,0),n=0,i,a=0,o=Number.POSITIVE_INFINITY,s=Number.POSITIVE_INFINITY;for(let c=0;c<t.length-1;c+=1){let u=t[c],l=t[c+1];if(u===void 0||l===void 0)continue;n+=u.count;let m=r-n,p=u.endIncision+l.startIncision;if(p<=0)continue;let h=+(n>e)+ +(m>e),g=Math.max(0,n-e)+Math.max(0,m-e);(h<o||h===o&&p>a||h===o&&p===a&&g<s)&&(a=p,i=c,o=h,s=g)}return i}function Zk(t,e){let r=[],n=[],i=0;for(let a of t)n.length>0&&i+a.count>e&&(r.push(n),n=[],i=0),n.push(a),i+=a.count,i>=e&&(r.push(n),n=[],i=0);return n.length>0&&r.push(n),r}var tI=d(()=>{"use strict"});async function rI(t){let e=await Qk({chunks:t.chunks,edges:t.edges,fragments:t.fragments});return eI({segmentInfos:e,groupWordsCount:t.groupWordsCount,serialId:t.serialId})}var nI=d(()=>{"use strict";Yk();tI()});function tp(t,e){let[r,n]=t.sentenceId,[i,a]=e.sentenceId;return r!==i?r-i:n!==a?n-a:t.id-e.id}function iI(t,e){return t.value!==e.value?e.value-t.value:t.leftClusterId!==e.leftClusterId?t.leftClusterId-e.leftClusterId:t.rightClusterId-e.rightClusterId}function _a(t,e){return t-e}var Ca=d(()=>{"use strict"});function oI(t){let e=rp();for(let r of t)e[String(r.id)]=xF(r);return e}function sI(t){let e=rp();for(let n of t.edges){let i=aI(n.strength);e[String(n.fromId)]=(e[String(n.fromId)]??0)+i,e[String(n.toId)]=(e[String(n.toId)]??0)+i}let r=rp();for(let n of t.edges){let i=aI(n.strength),a=t.chunkWeights[String(n.fromId)]??0,o=t.chunkWeights[String(n.toId)]??0,s=e[String(n.fromId)]??0,c=e[String(n.toId)]??0,u=s===0?0:a*(i/s),l=c===0?0:o*(i/c);r[D(n.fromId,n.toId)]=Math.max(u+l,wF)}return r}function D(t,e){return`${t}:${e}`}function xF(t){return vF(t.retention)+RF(t.importance)}function RF(t){return t===void 0?0:EF[t]??0}function aI(t){return t===void 0?1:kF[t]??1}function vF(t){return t===void 0?0:IF[t]??0}function rp(){return Object.create(null)}var wF,EF,kF,IF,Ln=d(()=>{"use strict";L();wF=.1,EF={critical:9,helpful:1,important:3},kF={critical:9,helpful:1,important:3},IF={detailed:9,focused:3,relevant:1,verbatim:27}});var An=d(()=>{"use strict"});function Gt(){return Object.create(null)}function cI(){return Object.create(null)}function dI(){return Object.create(null)}function hc(){return Object.create(null)}function uI(){return Object.create(null)}function On(){return Object.create(null)}function lI(){return Object.create(null)}function np(){return Object.create(null)}var Pa=d(()=>{"use strict"});function La(t){switch(t){case"critical":return 9;case"important":return 3;case"helpful":return 1;default:return 1}}var ip=d(()=>{"use strict";An()});function Aa(t,e,r){let n=t[String(e)]??[];n.includes(r)||(t[String(e)]=[...n,r])}function mI(t,e){let r=cI(),n=dI(),i=np(),a=np(),o=[...t].map(c=>c.id).sort(_a),s=hc();for(let c of t)r[String(c.id)]=c;for(let c of e){if(r[String(c.fromId)]===void 0||r[String(c.toId)]===void 0)continue;let u=D(c.fromId,c.toId);n[u]=c,i[String(c.toId)]===void 0&&(i[String(c.toId)]=[]),a[String(c.fromId)]===void 0&&(a[String(c.fromId)]=[]),i[String(c.toId)]?.push(c),a[String(c.fromId)]?.push(c),Aa(s,c.fromId,c.toId),Aa(s,c.toId,c.fromId)}return{chunksById:r,edgeByKey:n,fingerprintEdgeWeightsByKey:_F(r,e),incomingEdgesByChunkId:i,outgoingEdgesByChunkId:a,sortedChunkIds:o,undirectedAdjacentChunkIdsByChunkId:s}}function _F(t,e){let r=On();for(let i of e){if(t[String(i.fromId)]===void 0||t[String(i.toId)]===void 0)continue;let a=La(i.strength);r[String(i.fromId)]=(r[String(i.fromId)]??0)+a,r[String(i.toId)]=(r[String(i.toId)]??0)+a}let n=On();for(let i of e){let a=t[String(i.fromId)],o=t[String(i.toId)];if(a===void 0||o===void 0)continue;let s=La(i.strength),c=r[String(i.fromId)]??0,u=r[String(i.toId)]??0,l=c===0?0:a.weight*(s/c),m=u===0?0:o.weight*(s/u),p=Math.max(l+m,.1);n[D(i.fromId,i.toId)]=p,n[D(i.toId,i.fromId)]=p}return n}var ap=d(()=>{"use strict";Ln();An();Ca();Pa();ip()});function op(t){let e=[...t.chunkIds].sort(_a),r=Gt(),n=hc(),i=Gt(),a=[];for(let o of e)r[String(o)]=!0;for(let o of t.edges)r[String(o.fromId)]!==!0||r[String(o.toId)]!==!0||(Aa(n,o.fromId,o.toId),Aa(n,o.toId,o.fromId));for(let o of e){if(i[String(o)]===!0)continue;let s=[o],c=[];for(i[String(o)]=!0;s.length>0;){let u=s.pop();if(u!==void 0){c.push(u);for(let l of n[String(u)]??[])i[String(l)]!==!0&&(i[String(l)]=!0,s.push(l))}}c.sort(_a),a.push(c)}return a.sort((o,s)=>{let c=o[0]??Number.POSITIVE_INFINITY,u=s[0]??Number.POSITIVE_INFINITY;return c-u}),a}function pI(t){let e=t.sortedChunkIds[0];if(e===void 0)return!0;let r=Gt(),n=[e];for(r[String(e)]=!0;n.length>0;){let i=n.pop();if(i!==void 0)for(let a of t.undirectedAdjacentChunkIdsByChunkId[String(i)]??[])r[String(a)]!==!0&&(r[String(a)]=!0,n.push(a))}return t.sortedChunkIds.every(i=>r[String(i)]===!0)}var sp=d(()=>{"use strict";Ca();ap();Pa()});function hI(t){let e=uI();for(let r of t.sortedChunkIds){let n=On(),i=[r],a=Gt();for(n[String(r)]=1,a[String(r)]=!0;i.length>0;){let s=On();for(let c of i){let u=n[String(c)]??0,l=0,m=[];for(let p of t.incomingEdgesByChunkId[String(c)]??[]){if(a[String(p.fromId)]===!0)continue;let h=t.fingerprintEdgeWeightsByKey[D(p.fromId,c)]??t.fingerprintEdgeWeightsByKey[D(c,p.fromId)]??1;m.push([p.fromId,h]),l+=h}for(let p of t.outgoingEdgesByChunkId[String(c)]??[]){if(a[String(p.toId)]===!0)continue;let h=t.fingerprintEdgeWeightsByKey[D(c,p.toId)]??t.fingerprintEdgeWeightsByKey[D(p.toId,c)]??1;m.push([p.toId,h]),l+=h}if(!(l<=0))for(let[p,h]of m){let g=u*(h/l)*.75;s[String(p)]=(s[String(p)]??0)+g}}i=Object.keys(s).map(Number);for(let c of i)n[String(c)]=s[String(c)]??0,a[String(c)]=!0}let o=Object.values(n).reduce((s,c)=>s+c,0);if(o>0)for(let s of Object.keys(n))n[s]=(n[s]??0)/o;e[String(r)]=n}return e}function fI(t){let e=Object.keys(t)[0];if(e===void 0)return;let r=Object.keys(t[e]??{}).sort();for(let[n,i]of Object.entries(t)){let a=Object.keys(i).sort();if(a.length!==r.length||a.some((o,s)=>o!==r[s]))throw new Error(`Fingerprint structure mismatch for chunk ${n}`)}}var yI=d(()=>{"use strict";Ln();An();Pa()});function cp(t,e,r,n){let i=n===void 0?new Map(t.sortedChunkIds.map(c=>[c,[c]])):new Map([...n.entries()].map(([c,u])=>[c,[...u]])),a=lI(),o=[],s=Gt();for(let[c,u]of i.entries())for(let l of u)a[String(l)]=c;for(let c of i.keys())for(let u of i.keys()){if(c>=u)continue;let l=i.get(c),m=i.get(u);l===void 0||m===void 0||bI(t,l,m)&&(o.push(EI(c,u,wI(t,l,m,e))),s[kI(c,u)]=!0)}for(;o.length>0;){o.sort(iI);let c=o.shift();if(c===void 0)continue;let u=a[String(c.leftClusterId)],l=a[String(c.rightClusterId)];if(u===void 0||l===void 0||u===l)continue;let m=i.get(u),p=i.get(l);if(m===void 0||p===void 0||!bI(t,m,p)||r.enableBonus&&m.length>=2&&p.length>=2||SI(t,m)+SI(t,p)>r.snakeWordsCount)continue;m.push(...p),i.delete(l);for(let g of p)a[String(g)]=u;let h=new Set;for(let g of m)for(let f of t.undirectedAdjacentChunkIdsByChunkId[String(g)]??[])h.add(f);for(let g of h){let f=a[String(g)];if(f===void 0||f===u)continue;let E=i.get(f);if(E===void 0)continue;let v=kI(u,f);s[v]!==!0&&(o.push(EI(Math.min(u,f),Math.max(u,f),wI(t,m,E,e))),s[v]=!0)}}return i}function bI(t,e,r){for(let n of e)for(let i of r)if(t.edgeByKey[D(n,i)]!==void 0||t.edgeByKey[D(i,n)]!==void 0)return!0;return!1}function SI(t,e){return e.reduce((r,n)=>r+(t.chunksById[String(n)]?.wordsCount??0),0)}function wI(t,e,r,n){let i=0,a=Number.POSITIVE_INFINITY;for(let o of e)for(let s of r){let c=t.edgeByKey[D(o,s)]??t.edgeByKey[D(s,o)];if(c===void 0)continue;i+=1;let u=n[String(o)]??{},l=n[String(s)]??{},m=0;for(let v of Object.keys(u)){let I=(u[v]??0)-(l[v]??0);m+=I*I}let p=La(c.strength),h=t.chunksById[String(o)],g=t.chunksById[String(s)];h?.retention!==void 0&&g?.retention!==void 0&&(p+=3),h?.importance!==void 0&&g?.importance!==void 0&&(p+=3);let E=(1-Math.sqrt(m)/2)*p;a=Math.min(a,E)}return i===0?Number.NEGATIVE_INFINITY:a}function EI(t,e,r){return{leftClusterId:t,rightClusterId:e,value:r}}function kI(t,e){return t<e?D(t,e):D(e,t)}var II=d(()=>{"use strict";Ln();An();Ca();Pa();ip()});function dp(t){if(t.chunks.length===0)return[];let e=mI(t.chunks,t.edges);if(!pI(e))throw new Error("Snake detector requires a weakly connected component input");let r=t.snakeWordsCount??280;if(t.chunks.reduce((s,c)=>s+c.wordsCount,0)<=r)return[[...t.chunks].sort(tp).map(s=>s.id)];let i=hI(e);fI(i);let a=cp(e,i,{enableBonus:!0,snakeWordsCount:r},void 0);return[...cp(e,i,{enableBonus:!1,snakeWordsCount:r},a).values()].map(s=>[...s].sort((c,u)=>{let l=e.chunksById[String(c)],m=e.chunksById[String(u)];return l===void 0||m===void 0?c-u:tp(l,m)}))}var xI=d(()=>{"use strict";sp();An();Ca();yI();ap();II()});var RI=d(()=>{"use strict";xI();sp()});function TI(t){let e=OF(),r=vI();for(let[i,a]of t.snakes.entries())for(let o of a)e[String(o)]=i;for(let i of t.edges){let a=e[String(i.fromId)],o=e[String(i.toId)];if(a===void 0||o===void 0||a===o)continue;let s=D(a,o);r[s]=(r[s]??0)+i.weight}let n=vI();for(let[i,a]of Object.entries(r)){let[o="",s=""]=i.split(":"),c=Number(o),u=Number(s),l=t.snakes[c]?.[0],m=t.snakes[u]?.[0];if(l===void 0||m===void 0)continue;let p=t.chunksById[String(l)],h=t.chunksById[String(m)];if(p===void 0||h===void 0)continue;let g=LF(p,h)<0?D(c,u):D(u,c);n[g]=(n[g]??0)+a}return Object.keys(n).sort(AF).map(i=>{let[a="",o=""]=i.split(":");return{fromSnakeIndex:Number(a),toSnakeIndex:Number(o),weight:n[i]??0}})}function LF(t,e){let[r,n]=t.sentenceId,[i,a]=e.sentenceId;return r!==i?r-i:n!==a?n-a:t.id-e.id}function AF(t,e){let[r="",n=""]=t.split(":"),[i="",a=""]=e.split(":"),o=Number(r),s=Number(i);return o!==s?o-s:Number(n)-Number(a)}function vI(){return Object.create(null)}function OF(){return Object.create(null)}var _I=d(()=>{"use strict";Ln()});var CI=d(()=>{"use strict";RI();_I()});function DF(t,e){let[r="",n=""]=t.split(":"),[i="",a=""]=e.split(":"),o=Number(r),s=Number(i);return o!==s?o-s:Number(n)-Number(a)}function lp(t,e){return t-e}function PI(){return Object.create(null)}function MF(){return Object.create(null)}function WF(t){let e=PI(),r=jF(),n=GF(),i=[];for(let c of t.sentenceGroups)c.serialId===t.serialId&&i.push(c);for(let c of t.chunks){let u=up(i,c.sentenceId[1]);e[String(c.id)]=c,u!==void 0&&(r[String(u)]===void 0&&(r[String(u)]=[]),r[String(u)]?.push(c.id))}for(let c of t.edges){let u=e[String(c.fromId)],l=e[String(c.toId)];if(u===void 0||l===void 0)continue;let m=up(i,u.sentenceId[1]),p=up(i,l.sentenceId[1]);m===void 0||p===void 0||m===p&&(n[String(m)]===void 0&&(n[String(m)]=[]),n[String(m)]?.push(c))}let a=[],o=[],s=[];for(let c of BF(r)){let u=[...r[String(c)]??[]].sort(lp),l=n[String(c)]??[],m=[];for(let h of op({chunkIds:u,edges:l})){let g=FF();for(let f of h)g[String(f)]=!0;m.push(...dp({chunks:h.map(f=>e[String(f)]).filter(f=>f!==void 0),edges:l.filter(f=>g[String(f.fromId)]===!0&&g[String(f.toId)]===!0),snakeWordsCount:NF}))}let p=a.length;for(let[h,g]of m.entries()){let f=g[0],E=g[g.length-1],v=f===void 0?void 0:e[String(f)],I=E===void 0?void 0:e[String(E)];if(v===void 0||I===void 0)continue;let q=p+h;a.push({firstLabel:v.label,groupId:c,lastLabel:I.label,localSnakeId:h,size:g.length,weight:g.reduce((F,_)=>F+(e[String(_)]?.weight??0),0),wordsCount:g.reduce((F,_)=>F+(e[String(_)]?.wordsCount??0),0)});for(let[F,_]of g.entries())o.push({chunkId:_,position:F,snakeIndex:q})}s.push(...TI({chunksById:e,edges:l,snakes:m}).map(h=>({fromSnakeIndex:p+h.fromSnakeIndex,toSnakeIndex:p+h.toSnakeIndex,weight:h.weight})))}return{snakeChunks:o,snakeEdges:s,snakes:a}}function up(t,e){return t.find(r=>e>=r.startSentenceIndex&&e<=r.endSentenceIndex)?.groupId}function FF(){return Object.create(null)}function jF(){return Object.create(null)}function GF(){return Object.create(null)}function BF(t){return Object.keys(t).map(Number).sort(lp)}var NF,Oa,LI=d(()=>{"use strict";nI();CI();Ln();NF=280,Oa=class{#e=[];#t=PI();#r;#n=[];#i=MF();#a;#o;constructor(e,r,n){this.#r=e,this.#a=n,this.#o=r}accept(e){for(let r of e.chunks)this.#l(r);if(e.importanceAnnotations!==void 0)for(let r of e.importanceAnnotations){let n=this.#t[String(r.chunkId)];n!==void 0&&(this.#t[String(r.chunkId)]={...n,importance:r.importance})}for(let r of e.edges)this.#u(r)}async finalize(){let e=this.#s(),r=this.#c(),n=oI(e),i=sI({chunkWeights:n,edges:r}),a=e.map(m=>({...m,weight:n[String(m.id)]??0})),o=r.map(m=>({...m,weight:i[D(m.fromId,m.toId)]??0})),s=await rI({chunks:a,edges:o,fragments:this.#r.getSerialFragments(this.#o),groupWordsCount:this.#a,serialId:this.#o}),c=WF({chunks:a,edges:o,sentenceGroups:s,serialId:this.#o});await this.#r.serials.ensure(this.#o);let u=new Map;for(let m of a){let p=await this.#r.chunks.create({content:m.content,generation:m.generation,label:m.label,sentenceId:m.sentenceId,sentenceIds:m.sentenceIds,weight:m.weight,wordsCount:m.wordsCount,...m.importance===void 0?{}:{importance:m.importance},...m.retention===void 0?{}:{retention:m.retention}});u.set(m.id,p.id)}for(let m of o){let p=u.get(m.fromId),h=u.get(m.toId);p===void 0||h===void 0||await this.#r.readingEdges.save({...m,fromId:p,toId:h})}await this.#r.fragmentGroups.saveMany(s);let l=[];for(let m of c.snakes)l.push(await this.#r.snakes.create({firstLabel:m.firstLabel,groupId:m.groupId,lastLabel:m.lastLabel,localSnakeId:m.localSnakeId,serialId:this.#o,size:m.size,weight:m.weight,wordsCount:m.wordsCount}));for(let m of c.snakeChunks){let p=l[m.snakeIndex];p!==void 0&&await this.#r.snakeChunks.save({chunkId:u.get(m.chunkId)??m.chunkId,position:m.position,snakeId:p})}for(let m of c.snakeEdges){let p=l[m.fromSnakeIndex],h=l[m.toSnakeIndex];p===void 0||h===void 0||await this.#r.snakeEdges.save({fromSnakeId:p,toSnakeId:h,weight:m.weight})}}#s(){return[...this.#e].sort(lp).map(e=>this.#t[String(e)]).filter(e=>e!==void 0)}#c(){return[...this.#n].sort(DF).map(e=>this.#i[e]).filter(e=>e!==void 0)}#l(e){let r=String(e.id);this.#t[r]===void 0&&this.#e.push(e.id);let n=e.importance,i=e.retention;this.#t[r]={content:e.content,generation:e.generation,id:e.id,label:e.label,sentenceId:e.sentenceId,sentenceIds:[...e.sentenceIds],wordsCount:e.wordsCount,weight:0,...n===void 0?{}:{importance:n},...i===void 0?{}:{retention:i}}}#u(e){let r=D(e.fromId,e.toId);this.#i[r]===void 0&&this.#n.push(r);let n=e.strength;this.#i[r]={fromId:e.fromId,toId:e.toId,weight:0,...n===void 0?{}:{strength:n}}}}});var AI=d(()=>{"use strict";LI()});function OI(t){let e=t.document??t.workspace;if(e===void 0)throw new Error("SerialGeneration requires a document");return e}async function mp(t,e){let r=await t.serials.getById(e);if(r===void 0)throw new Error(`Chapter ${e} does not exist. Use \`wg <archive-uri>/chapter list\` to discover chapter ids.`);return r}var pp=d(()=>{"use strict"});function NI(){return Object.create(null)}function hp(t,e,r,n){r.accept(n),t.push(...n.chunks);for(let i of n.edges)UF(e,i.fromId,i.toId)}function UF(t,e,r){let n=t[String(e)]??[];n.includes(r)||(t[String(e)]=[...n,r].sort(HF))}function HF(t,e){return t-e}var DI=d(()=>{"use strict"});async function Nn(t,e,r,n={}){await t.getSerialFragments(e).writeTextStream(await mk(r),{...n.segmenter===void 0?{}:{segmenter:n.segmenter}}),await t.serials.bumpRevision(e)}var fp=d(()=>{"use strict";sc()});var Dn,yp,yc=d(()=>{"use strict";Dn=class{#e;#t;#r;constructor(e,r,n){this.#e=r,this.#t=n,this.#r=new yp(e,r)}get id(){return this.#e}getSummary(){return this.#t}getTopology(){return this.#r}},yp=class{#e;#t;#r;#n;#i;#a;#o;constructor(e,r){this.#e=e.chunks,this.#t=e.fragmentGroups,this.#r=e.readingEdges,this.#n=r,this.#i=e.snakeChunks,this.#a=e.snakeEdges,this.#o=e.snakes}async listChunks(){return await this.#e.listBySerial(this.#n)}async listEdges(){return await this.#r.listBySerial(this.#n)}async listGroups(){return await this.#t.listBySerial(this.#n)}async listSnakeChunks(e){let r=await this.#o.getById(e);if(r===void 0||r.serialId!==this.#n)throw new Error(`Snake ${e} does not belong to this serial`);return await this.#i.listBySnake(e)}async listSnakeEdges(){return await this.#a.listBySerial(this.#n)}async listSnakes(){return await this.#o.listBySerial(this.#n)}}});var br,MI=d(()=>{"use strict";ri();ai();Zm();ac();AI();sc();oc();pp();DI();fp();yc();br=class{#e=320;#t;#r=new Ce(1);#n;#i;#a;#o=new Ce(1);#s;#c;#l=1;constructor(e){let r=OI(e);this.#t=r.fragmentGroups,this.#s=e.llm,this.#n=e.logDirPath,this.#i=r.serials,this.#c=e.segmenter,this.#a=r}async generate(e,r,n){let i=await this.#f();return await Nn(this.#a,i,e,{...this.#c===void 0?{}:{segmenter:this.#c}}),await this.#u(i,r,n)}async create(e,r){return await this.generate(e,r)}async generateInto(e,r,n,i){return await this.#b(e),await Nn(this.#a,e,r,{...this.#c===void 0?{}:{segmenter:this.#c}}),await this.#u(e,n,i)}async buildTopologyInto(e,r,n){await this.#m(e,r.extractionPrompt,r.userLanguage,n)}async buildSummary(e,r={}){let n=await this.#p(e,r.userLanguage);return new Dn(this.#a,e,n)}async#u(e,r,n){await this.#m(e,r.extractionPrompt,r.userLanguage,n);let i=await this.#p(e,r.userLanguage);return await n?.complete(),new Dn(this.#a,e,i)}async#d(){return await this.#r.use(()=>{let e=this.#l;return this.#l+=1,e})}async#p(e,r){if(!(await mp(this.#a,e)).topologyReady)throw new Error(`Serial ${e} is not ready for summary`);let i=await this.#a.readSummary(e);if(i!==void 0)return i;let a=this.#y(e),o=await a.listFragmentIds();if(o.length<=1){let l=await hk(a,o);return await this.#o.use(async()=>await this.#a.writeSummary(e,l)),l}let s=await this.#t.listGroupIdsForSerial(e),c=[];for(let l of s){let m=await Ta({...this.#g({groupId:l,serialId:e,userLanguage:r})});m.trim()!==""&&c.push(m)}let u=c.join(`
|
|
1805
|
+
|
|
1806
|
+
`);return await this.#o.use(async()=>await this.#a.writeSummary(e,u)),u}async#m(e,r,n,i){let a=new Ra({attention:{capacity:7,generationDecayFactor:.5,idGenerator:async()=>await this.#d()},extractionGuidance:r,llm:this.#s,scopes:$d,sentenceTextSource:this.#a,...this.#c===void 0?{}:{segmenter:this.#c},...n===void 0?{}:{userLanguage:n}}),o=new Oa(this.#a,e,3840),s=[],c=NI(),u=this.#a.getSerialFragments(e);for(let l of await lk(u,this.#e)){let m=pk(l.sentences);await this.#h({allChunks:s,fragment:{startSentenceIndex:l.startSentenceIndex,sentences:l.sentences},reader:a,serialId:e,successorIdsByChunkId:c,topology:o}),await i?.advance(m)}await this.#o.use(async()=>{await o.finalize(),await this.#i.setTopologyReady(e),await this.#i.bumpRevision(e)})}async#h(e){let r=e.fragment.sentences.map((o,s)=>({sentenceId:[e.serialId,e.fragment.startSentenceIndex+s],text:o.text,wordsCount:o.wordsCount})),n=r.map(o=>o.text).join(" "),i=await e.reader.extractUserFocused({sentences:r,text:n}),a=await e.reader.extractBookCoherence({sentences:r,text:n,userFocusedChunks:i.delta.chunks});hp(e.allChunks,e.successorIdsByChunkId,e.topology,i.delta),hp(e.allChunks,e.successorIdsByChunkId,e.topology,a),e.reader.completeFragment({allChunks:e.allChunks,getSuccessorChunkIds:o=>e.successorIdsByChunkId[String(o)]??[]})}async#f(){return await this.#r.use(async()=>await this.#i.create())}async#b(e){await this.#r.use(async()=>await this.#i.createWithId(e))}#y(e){return this.#a.getSerialFragments(e)}#g(e){return{compressionRatio:.2,groupId:e.groupId,llm:this.#s,maxClues:10,maxIterations:5,scopes:ii,serialId:e.serialId,document:this.#a,...this.#n===void 0?{}:{logDirPath:this.#n},...e.userLanguage===void 0?{}:{userLanguage:e.userLanguage}}}}});var WI=d(()=>{"use strict";pp();yc()});var FI=d(()=>{"use strict";fk();MI();oc();WI();fp();yc()});var Mn=d(()=>{"use strict";FI()});var jI=d(()=>{"use strict";rt();ri();Mn();Zt()});import{mkdir as XF,writeFile as VF}from"fs/promises";import{dirname as YF}from"path";async function gp(t){let e=await t.document.openSession(async r=>await ZF(r));await XF(YF(t.path),{recursive:!0}),await VF(t.path,e,"utf8")}async function ZF(t){let e=await t.readToc();if(e===void 0)throw new Error("Document TOC is missing");let r=await GI(t,e.items);return r.length===0?"":`${r.join(`
|
|
1807
|
+
|
|
1808
|
+
`)}
|
|
1809
|
+
`}async function GI(t,e){let r=[];for(let n of e){let i=await ej(t,n);i!==void 0&&r.push(i)}return r}async function ej(t,e){let r=[e.title?.trim()].filter(i=>i!==void 0&&i!=="");if(e.serialId!==void 0){let i=await t.readSummary(e.serialId);if(i===void 0)throw new Error(`Chapter ${e.serialId} summary is missing. Run \`wg wikg://local/job add --input <chapter-uri> --task reading-summary --accept-cost\` before export, or inspect the archive with \`wg <archive-uri>/chapter/tree get\`.`);i.trim()!==""&&r.push(i.trim())}let n=await GI(t,e.children);if(!(r.length===0&&n.length===0))return[...r,...n].join(`
|
|
1810
|
+
|
|
1811
|
+
`)}var BI=d(()=>{"use strict"});function gc(t){return t.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function bc(t){let e=t?.trim();return e===void 0||e===""?"und":e}var Sc=d(()=>{"use strict"});function wc(){return UI??=ti(Kt()),UI}function HI(t){return wc().render("output/epub/cover.xhtml",t)}function qI(t){return wc().render("output/epub/nav.xhtml",t)}function $I(t){return wc().render("output/epub/package.opf.xml",t)}function bp(t){return wc().render("output/epub/section.xhtml",t)}var UI,Na=d(()=>{"use strict";Po();To()});import{createWriteStream as tj}from"fs";import{dirname as rj,extname as nj}from"path";import{finished as KI}from"stream/promises";import{mkdir as ij}from"fs/promises";import{ZipFile as aj}from"yazl";async function JI(t,e){await ij(rj(t),{recursive:!0});let r=new aj;r.addBuffer(Buffer.from("application/epub+zip"),"mimetype",{compress:!1}),r.addBuffer(Buffer.from(oj,"utf8"),"META-INF/container.xml"),r.addBuffer(Buffer.from(e.packageOpf,"utf8"),"OEBPS/package.opf"),r.addBuffer(Buffer.from(e.navXhtml,"utf8"),"OEBPS/nav.xhtml");for(let o of e.sections)r.addBuffer(Buffer.from(o.xhtml,"utf8"),`OEBPS/${o.href}`);if(e.cover!==void 0){let o=Sp(e.cover),s=bc(e.meta.language);r.addBuffer(Buffer.from(e.cover.data),`OEBPS/${o}`),r.addBuffer(Buffer.from(sj(e.meta,o,s),"utf8"),"OEBPS/text/cover.xhtml")}r.end();let n=tj(t),i=KI(n),a=KI(r.outputStream);r.outputStream.pipe(n),await Promise.all([i,a])}function Sp(t){return`images/cover${cj(t)}`}function sj(t,e,r){let n=t.title?.trim()||"Untitled";return HI({coverImageHref:e,language:r,title:n})}function cj(t){let e=nj(t.path).toLowerCase();if(e!=="")return e;switch(t.mediaType){case"image/gif":return".gif";case"image/jpeg":return".jpg";case"image/png":return".png";case"image/svg+xml":return".svg";case"image/webp":return".webp";default:return".bin"}}var oj,wp=d(()=>{"use strict";Sc();Na();oj=`<?xml version="1.0" encoding="UTF-8"?>
|
|
1812
|
+
<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
|
|
1813
|
+
<rootfiles>
|
|
1814
|
+
<rootfile full-path="OEBPS/package.opf" media-type="application/oebps-package+xml"/>
|
|
1815
|
+
</rootfiles>
|
|
1816
|
+
</container>
|
|
1817
|
+
`});function zI(t,e){let r=t.title?.trim()||"Untitled";return{href:"text/section-1.xhtml",id:"section-1",title:r,xhtml:bp({language:e,paragraphs:[],title:r})}}function QI(t,e,r,n){let i=r?.trim()||`Section ${t}`;return{href:`text/serial-${t}.xhtml`,id:`serial-${t}`,title:i,xhtml:bp({language:e,paragraphs:dj(n.trim()),title:i})}}function dj(t){return t.split(/\n\s*\n/gu).map(e=>e.replace(/\s*\n\s*/gu," ").trim()).filter(e=>e!=="")}var XI=d(()=>{"use strict";Na()});function Ep(t,e){return t.map(r=>({children:Ep(r.children,e),href:r.serialId===void 0?void 0:e.get(r.serialId)?.href,title:r.title?.trim()||`Section ${r.serialId??1}`}))}function VI(t,e,r){let n=t.title?.trim()||"Untitled";return qI({itemsMarkup:uj(r),language:e,title:n})}function uj(t){return t.length===0?"<ol></ol>":`<ol>
|
|
1818
|
+
${t.map(e=>YI(e,1)).join(`
|
|
1819
|
+
`)}
|
|
1820
|
+
</ol>`}function YI(t,e){let r=" ".repeat(e),n=t.href===void 0?`<span>${gc(t.title)}</span>`:`<a href="${gc(t.href)}">${gc(t.title)}</a>`,i=t.children.length===0?"":`
|
|
1821
|
+
${r} <ol>
|
|
1822
|
+
${t.children.map(a=>YI(a,e+2)).join(`
|
|
1823
|
+
`)}
|
|
1824
|
+
${r} </ol>`;return`${r}<li>${n}${i}</li>`}var ZI=d(()=>{"use strict";Sc();Na()});function ex(t){let e=t.meta.identifier?.trim()||`urn:uuid:${crypto.randomUUID()}`,r=t.meta.title?.trim()||"Untitled";return $I({authors:t.meta.authors,coverImageHref:t.coverImageHref,coverMediaType:t.coverMediaType,coverPageHref:t.coverPageHref,description:t.meta.description,identifier:e,language:t.language,modifiedAt:t.modifiedAt,publishedAt:t.meta.publishedAt,publisher:t.meta.publisher,sections:t.sections.map(n=>({href:n.href,id:n.id})),title:r,version:kp})}var kp,Ip=d(()=>{"use strict";Na();kp="3.0"});async function tx(t){let[e,r,n]=await Promise.all([t.readBookMeta(),t.readToc(),t.readCover()]);if(e===void 0)throw new Error("Archive metadata is missing");if(r===void 0)throw new Error("Document TOC is missing");let i=new Map,a=bc(e.language),o=await rx(t,a,r.items,i),s=Ep(r.items,i);o.length===0&&o.push(zI(e,a));let c=n===void 0?void 0:Sp(n),u=n===void 0?void 0:"text/cover.xhtml";return{cover:n,meta:e,navXhtml:VI(e,a,s),packageOpf:ex({coverImageHref:c,coverMediaType:n?.mediaType,coverPageHref:u,language:a,meta:e,modifiedAt:new Date().toISOString().replace(/\.\d{3}Z$/u,"Z"),sections:o}),sections:o}}async function rx(t,e,r,n){let i=[];for(let a of r){if(a.serialId!==void 0){let o=await t.readSummary(a.serialId);if(o===void 0)throw new Error(`Chapter ${a.serialId} summary is missing. Run \`wg wikg://local/job add --input <chapter-uri> --task reading-summary --accept-cost\` before export, or inspect the archive with \`wg <archive-uri>/chapter/tree get\`.`);let s=QI(a.serialId,e,a.title,o);n.set(a.serialId,s),i.push(s)}i.push(...await rx(t,e,a.children,n))}return i}var nx=d(()=>{"use strict";wp();XI();ZI();Ip();Sc()});async function xp(t){let e=await t.document.openSession(async r=>await tx(r));await JI(t.path,e)}var ix=d(()=>{"use strict";wp();nx();Ip()});var ax=d(()=>{"use strict";BI();ix()});function ox(t,e){return t.serialId===e||t.children.some(r=>ox(r,e))}async function lj(t){mj(t)&&await t.flush()}function mj(t){return"flush"in t&&typeof t.flush=="function"}async function sx(t,e,r=[]){let n=[];for(let i of e){let a=i.title?.trim()||`Chapter ${i.serialId??"group"}`,o=[...r,a];i.serialId!==void 0&&await t.readSummary(i.serialId)!==void 0&&n.push({fragmentCount:(await t.getSerialFragments(i.serialId).listFragmentIds()).length,serialId:i.serialId,title:a,tocPath:o}),n.push(...await sx(t,i.children,o))}return n}var Sr,Ec=d(()=>{"use strict";ax();ze();Sr=class{#e;#t;constructor(e,r){this.#e=e,this.#t=r}async exportEpub(e){await xp({document:this.#e,path:e})}async exportText(e){await gp({document:this.#e,path:e})}async readCover(){return await this.#e.readCover()}async readMeta(){return await this.#e.readBookMeta()}async readToc(){return await this.#e.readToc()}async readArchiveFormatVersion(){return await Ni(this.#t)}async readChapterStage(e){return await this.#e.openSession(async r=>{let n=await r.readToc();if(n===void 0)throw new Error("Document TOC is missing");if(!n.items.some(o=>ox(o,e)))throw new Error(`Chapter ${e} does not exist. Use \`wg <archive-uri>/chapter list\` to discover chapter ids.`);return await r.readSummary(e)!==void 0?"summarized":(await r.serials.getById(e))?.topologyReady===!0?"graphed":(await r.getSerialFragments(e).listFragmentIds()).length>0?"sourced":"planned"})}async listSerials(){return await this.#e.openSession(async e=>{let r=await e.readToc();if(r===void 0)throw new Error("Document TOC is missing");return await sx(e,r.items)})}async readSerialSummary(e){return await this.#e.openSession(async r=>{if(await r.serials.getById(e)===void 0)throw new Error(`No completed summary exists for id ${e}. Use \`wg wikg://<archive.wikg>/chapter list\` to discover chapter ids, then \`wg wikg://<archive.wikg>/chapter/${e}/summary get\` after summary is ready.`);let i=await r.readSummary(e);if(i===void 0)throw new Error(`Chapter ${e} summary is missing. Run \`wg wikg://local/job add --input <chapter-uri> --task reading-summary --accept-cost\` before export, or inspect the archive with \`wg <archive-uri>/chapter/tree get\`.`);return i})}async saveAs(e){await lj(this.#e),await on(this.#t,e)}}});import{rm as Gae}from"fs/promises";import{resolve as Uae}from"path";var cx=d(()=>{"use strict";ut();Zt();Zt();L();rt();Hw();Mn();jI();Ec()});function kc(t={}){return Object.freeze({"serial-generation/editor-compress":Ma(Da["serial-generation/editor-compress"],t),"serial-generation/editor-review":Ma(Da["serial-generation/editor-review"],t),"serial-generation/editor-review-guide":Ma(Da["serial-generation/editor-review-guide"],t),"serial-generation/reader-choice":Ma(Da["serial-generation/reader-choice"],t),"serial-generation/reader-extraction":Ma(Da["serial-generation/reader-extraction"],t)})}function Ma(t,e){return Object.freeze({...t,...e.temperature===void 0?{}:{temperature:e.temperature},...e.topP===void 0?{}:{topP:e.topP}})}var Da,Rp=d(()=>{"use strict";ai();Da=Object.freeze({"serial-generation/editor-compress":Object.freeze({temperature:.7,topP:.9}),"serial-generation/editor-review":Object.freeze({temperature:[.3,.95],topP:[.4,.8]}),"serial-generation/editor-review-guide":Object.freeze({temperature:.4,topP:.6}),"serial-generation/reader-choice":Object.freeze({temperature:[.3,.95],topP:[.4,.8]}),"serial-generation/reader-extraction":Object.freeze({temperature:[.3,.95],topP:[.4,.8]})})});function Re(t){let e=t?.trim();return e===void 0||e===""?Ic:e}function wr(t){let e=t?.trim();return e===void 0||e===""?xc:e}var Ic,xc,Bt=d(()=>{"use strict";Ic="Focus on the main storyline and key character developments. Preserve important dialogues and critical plot points. Background descriptions and minor details can be compressed significantly.",xc=["Recall only source mentions that should become stable searchable knowledge graph objects.","Prefer named entities: historical persons, places, organizations, dynasties, political entities, named works, named events, battles, titles, and explicitly named domain concepts.","Recall a non-named common concept only when it is a central recurring topic of the chapter and would be useful as an entity search result across multiple evidence passages.","Do not recall a surface merely because it is useful for summarizing the story or explaining a detail.","Do not recall pure numbers, standalone dates without a named event role, units of measurement, dimensions, ordinal labels, chapter numbers, punctuation fragments, common function words, generic verbs, generic adjectives, generic roles, generic objects, or incidental attributes.","Measurements, quantities, dimensions, tactical details, and descriptive attributes should remain evidence text, not entity mentions.","When uncertain, skip the mention rather than creating a noisy knowledge graph object."].join(" ")});var vp=d(()=>{"use strict";Bt()});var foe,ux=d(()=>{"use strict";Po();_e();qd();cx();Rp();ze();vp();foe=Kt()});var Tp,_p=d(()=>{"use strict";Tp=["queued","running","canceling","paused","succeeded","failed","canceled"]});import{mkdir as Rc}from"fs/promises";import{join as ft}from"path";function lx(){return ft(Wa(),"job.sqlite")}async function mx(t){let e=ft(Cp(),t);return await Rc(e,{recursive:!0}),e}function Cp(){return ft(Wa(),"work")}async function px(t){let e=ft(pj(),t);return await Rc(e,{recursive:!0}),e}function pj(){return ft(Wa(),"cache")}async function hx(t){let e=ft(hj(),t);return await Rc(e,{recursive:!0}),e}function hj(){return ft(Wa(),"logs")}async function fx(t){let e=ft(Wa(),"events");return await Rc(e,{recursive:!0}),ft(e,`${t}.ndjson`)}function Wa(){return Mr()}var vc=d(()=>{"use strict";se()});import{createHash as fj}from"crypto";import{resolve as yj}from"path";function Tc(t){return fj("sha256").update(yj(t)).digest("hex")}function Fa(t){try{return process.kill(t,0),!0}catch{return!1}}function yx(t){return t instanceof Error?{message:t.message,name:t.name,stack:t.stack}:t}async function gx(t){await new Promise(e=>{setTimeout(e,t)})}var Wn=d(()=>{"use strict"});function Pp(t,e){return e===void 0?{}:{[t]:e}}function Lp(t,e){if(!(t===void 0&&e===void 0))return(t??0)+(e??0)}function gj(t){return t.phaseDetail??t.unit}function bj(t){if(t.phaseDetail!==void 0)return t.phaseDetail;switch(t.unit){case"candidate":return"candidates";case"char":return"chars";case"item":return"items";case"page":return"page";case"qid":return"qids";case"record":return"records";case"sentence":return"sentences";case"window":return"windows"}}function Ap(t,e){return e<=0?Math.max(0,t):Math.min(e,Math.max(0,t))}var _c,Ut,Op=d(()=>{"use strict";_c=class{#e;#t;#r;#n=4;#i=5e3;#a=0;#o=0;#s=0;#c;#l=new Map;#u;#d={};#p=0;#m=Promise.resolve();#h=0;#f=0;#b=Promise.resolve();constructor(e,r,n){this.#e=e,this.#t=r,this.#r=n}async addOutputCharacters(e){await this.#y(async()=>{await this.throwIfStopped(),this.#s+=e,await this.#g()})}async addTokenUsage(e){await this.#y(async()=>{await this.throwIfStopped(),this.#d={...Pp("cacheReadTokens",Lp(this.#d.cacheReadTokens,e.cacheReadTokens)),...Pp("inputTokens",Lp(this.#d.inputTokens,e.inputTokens)),...Pp("outputTokens",Lp(this.#d.outputTokens,e.outputTokens))},await this.#g(!0)})}async setTotals(e){await this.#y(async()=>{await this.throwIfStopped(),this.#h=e.totalGraphWords??this.#h,this.#f=e.totalReadingSummaryWords??this.#f,await this.#g(!0)})}async stepStarted(e){await this.#y(async()=>{await this.throwIfStopped(),this.#u=e,this.#c=void 0,this.#l.clear(),await this.#r.markBuildJobStep(this.#e.jobId,e),await this.#r.appendBuildJobEvent(this.#e,{at:Date.now(),jobId:this.#e.jobId,seq:0,step:e,type:"step_started"}),await this.#g(!0)})}async stepCompleted(e){await this.#y(async()=>{await this.throwIfStopped(),this.#u=e,this.#c=void 0,this.#l.clear(),await this.#r.appendBuildJobEvent(this.#e,{at:Date.now(),jobId:this.#e.jobId,seq:0,step:e,type:"step_completed"}),await this.#g(!0)})}async updateWords(e){await this.#y(async()=>{await this.throwIfStopped(),this.#a=e.graphWords===void 0?this.#a:Ap(e.graphWords,this.#h),this.#p=e.readingSummaryWords===void 0?this.#p:Ap(e.readingSummaryWords,this.#f),await this.#g()})}async updatePhase(e){await this.#y(async()=>{await this.throwIfStopped(),this.#c!==e.phase&&this.#l.clear(),this.#c=e.phase,this.#l.set(gj(e),{done:Ap(e.done,e.total),name:bj(e),total:Math.max(0,e.total),unit:e.unit}),await this.#g(e.force??!0)})}async throwIfStopped(){let e=this.#m.then(async()=>{let r=await this.#r.readBuildJobForStopCheck(this.#e.jobId);if(!(r.state==="running"&&r.ownerId===this.#t))throw new Ut(`Job ${this.#e.jobId} is ${r.state}. Stop current worker execution.`)});this.#m=e.catch(()=>{}),await e}async#y(e){let r=this.#b.then(e,e);this.#b=r.catch(()=>{}),await r}async#g(e=!1){let r=Date.now();if(!e&&r-this.#o<this.#i)return;this.#o=r;let n=this.#E();await this.#r.appendBuildJobEvent(this.#e,{at:r,counters:this.#S(),jobId:this.#e.jobId,...this.#c===void 0?{}:{phase:this.#c},seq:0,...this.#u===void 0?{}:{step:this.#u},...n===void 0?{}:{tokens:n},type:"status_snapshot"})}#S(){let e=this.#w();return[...e===void 0?[]:[e],...this.#l.values()]}#w(){switch(this.#u){case"reading-graph":return this.#h<=0?void 0:{done:this.#a,name:"words",total:this.#h,unit:"word"};case"reading-summary":return this.#f<=0?void 0:{done:this.#p,name:"words",total:this.#f,unit:"word"};case void 0:return}}#E(){let e=this.#d.outputTokens??(this.#s===0?void 0:Math.floor(this.#s/this.#n)),r={...this.#d.cacheReadTokens===void 0?{}:{cacheReadTokens:this.#d.cacheReadTokens},...this.#d.inputTokens===void 0?{}:{inputTokens:this.#d.inputTokens},...e===void 0?{}:{outputTokens:e}};return Object.keys(r).length===0?void 0:r}};Ut=class extends Error{constructor(e){super(e),this.name="BuildJobStoppedError"}}});import{appendFile as Sj,readFile as wj}from"fs/promises";async function Er(t){let e;try{e=await wj(t.eventsPath,"utf8")}catch{return[]}return e.split(`
|
|
1825
|
+
`).filter(r=>r.trim()!=="").map(r=>JSON.parse(r))}async function le(t,e){let r=await Ej(t)+1,n={...e,jobId:t.jobId,seq:r};await Sj(t.eventsPath,`${JSON.stringify(n)}
|
|
1826
|
+
`,"utf8")}async function Ej(t){return(await Er(t)).at(-1)?.seq??0}var ja=d(()=>{"use strict"});var bx,Sx=d(()=>{"use strict";bx=`
|
|
1827
|
+
CREATE TABLE IF NOT EXISTS build_jobs (
|
|
1828
|
+
job_id TEXT PRIMARY KEY,
|
|
1829
|
+
archive_key TEXT NOT NULL,
|
|
1830
|
+
archive_path TEXT NOT NULL,
|
|
1831
|
+
chapter_id INTEGER NOT NULL,
|
|
1832
|
+
target TEXT NOT NULL,
|
|
1833
|
+
current_step TEXT,
|
|
1834
|
+
state TEXT NOT NULL,
|
|
1835
|
+
queue_rank INTEGER NOT NULL,
|
|
1836
|
+
workspace_path TEXT NOT NULL,
|
|
1837
|
+
cache_path TEXT NOT NULL,
|
|
1838
|
+
log_path TEXT NOT NULL,
|
|
1839
|
+
events_path TEXT NOT NULL,
|
|
1840
|
+
input_revision INTEGER,
|
|
1841
|
+
llm_json TEXT,
|
|
1842
|
+
prompt TEXT,
|
|
1843
|
+
owner_id TEXT,
|
|
1844
|
+
owner_pid INTEGER,
|
|
1845
|
+
reading_summary_started_at INTEGER,
|
|
1846
|
+
created_at INTEGER NOT NULL,
|
|
1847
|
+
updated_at INTEGER NOT NULL,
|
|
1848
|
+
finished_at INTEGER,
|
|
1849
|
+
error_json TEXT
|
|
1850
|
+
);
|
|
1851
|
+
|
|
1852
|
+
DROP INDEX IF EXISTS idx_build_jobs_active_chapter;
|
|
1853
|
+
|
|
1854
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_build_jobs_active_knowledge_chapter
|
|
1855
|
+
ON build_jobs(archive_key, chapter_id)
|
|
1856
|
+
WHERE target = 'knowledge-graph'
|
|
1857
|
+
AND state IN ('queued', 'running', 'canceling', 'paused');
|
|
1858
|
+
|
|
1859
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_build_jobs_active_reading_chapter
|
|
1860
|
+
ON build_jobs(archive_key, chapter_id)
|
|
1861
|
+
WHERE target IN ('reading-graph', 'reading-summary')
|
|
1862
|
+
AND state IN ('queued', 'running', 'canceling', 'paused');
|
|
1863
|
+
|
|
1864
|
+
CREATE INDEX IF NOT EXISTS idx_build_jobs_queue
|
|
1865
|
+
ON build_jobs(state, queue_rank, updated_at);
|
|
1866
|
+
|
|
1867
|
+
CREATE TABLE IF NOT EXISTS build_worker_lease (
|
|
1868
|
+
id INTEGER PRIMARY KEY CHECK (id = 1),
|
|
1869
|
+
owner_id TEXT,
|
|
1870
|
+
owner_pid INTEGER,
|
|
1871
|
+
heartbeat_at INTEGER
|
|
1872
|
+
);
|
|
1873
|
+
|
|
1874
|
+
INSERT OR IGNORE INTO build_worker_lease (id)
|
|
1875
|
+
VALUES (1);
|
|
1876
|
+
`});function Ee(t){let e=Ij(kr(t,"current_step"),"current_step"),r=kr(t,"owner_id"),n=t.owner_pid===null?void 0:re(t,"owner_pid"),i=t.reading_summary_started_at===null?void 0:re(t,"reading_summary_started_at"),a=t.finished_at===null?void 0:re(t,"finished_at"),o=kr(t,"error_json"),s=t.input_revision===null?void 0:re(t,"input_revision"),c=kr(t,"llm_json"),u=kr(t,"prompt");return{archiveKey:We(t,"archive_key"),archivePath:We(t,"archive_path"),cachePath:We(t,"cache_path"),chapterId:re(t,"chapter_id"),createdAt:re(t,"created_at"),...e===void 0?{}:{currentStep:e},...o===void 0?{}:{errorJSON:o},eventsPath:We(t,"events_path"),...a===void 0?{}:{finishedAt:a},jobId:We(t,"job_id"),...s===void 0?{}:{inputRevision:s},logPath:We(t,"log_path"),...c===void 0?{}:{llmJSON:c},...r===void 0?{}:{ownerId:r},...n===void 0?{}:{ownerPid:n},...u===void 0?{}:{prompt:u},queueRank:re(t,"queue_rank"),state:kj(We(t,"state")),...i===void 0?{}:{readingSummaryStartedAt:i},target:wx(We(t,"target"),"target"),updatedAt:re(t,"updated_at"),workspacePath:We(t,"workspace_path")}}function kj(t){if(Tp.includes(t))return t;throw new Error(`Invalid build job state: ${t}`)}function wx(t,e){if(t==="reading-graph"||t==="knowledge-graph"||t==="reading-summary")return t;throw new Error(`Invalid ${e}: ${t}`)}function Ij(t,e){return t===void 0?void 0:wx(t,e)}function Ex(t){return t==="knowledge-graph"?"knowledge-graph":"reading"}function We(t,e){let r=t[e];if(typeof r!="string")throw new TypeError(`Expected ${e} to be a string`);return r}function re(t,e){let r=t[e];if(typeof r!="number")throw new TypeError(`Expected ${e} to be a number`);return r}function kr(t,e){let r=t[e];if(r!=null){if(typeof r!="string")throw new TypeError(`Expected ${e} to be a string`);return r}}var Ir=d(()=>{"use strict";_p()});async function B(t,e){let r=await t.queryOne("SELECT * FROM build_jobs WHERE job_id = ?",[e],Ee);if(r===void 0)throw new Error(`Build job not found: ${e}`);return r}async function kx(t,e){let r=e.trim();if(r==="")throw new Error("Build job id is empty.");let n=await t.queryAll(`
|
|
1877
|
+
SELECT job_id
|
|
1878
|
+
FROM build_jobs
|
|
1879
|
+
WHERE substr(job_id, 1, ?) = ?
|
|
1880
|
+
ORDER BY created_at DESC
|
|
1881
|
+
`,[r.length,r],i=>We(i,"job_id"));if(n.length===0)throw new Error(`Build job not found: ${e}`);if(n.length>1)throw new Error(`Build job id prefix is ambiguous: ${e}. Matches: ${n.join(", ")}`);return n[0]}async function Ix(t){return await t.queryOne("SELECT COALESCE(MAX(queue_rank), 0) AS rank FROM build_jobs",void 0,e=>re(e,"rank"))??0}async function Cc(t){return await t.queryOne("SELECT COALESCE(MIN(queue_rank), 0) AS rank FROM build_jobs",void 0,e=>re(e,"rank"))??0}async function G(){return await A(lx(),bx)}async function xx(){return await G()}var Fn=d(()=>{"use strict";L();Sx();vc();Ir()});import{rm as xj}from"fs/promises";async function Rx(t,e){let r=Date.now();await t.run(`
|
|
1882
|
+
UPDATE build_jobs
|
|
1883
|
+
SET state = 'canceling', updated_at = ?
|
|
1884
|
+
WHERE job_id = ? AND state = 'running'
|
|
1885
|
+
`,[r,e.jobId]);let n=await B(t,e.jobId);return await le(n,{at:r,jobId:e.jobId,seq:0,state:"canceling",type:"canceling"}),n}async function Ga(t,e){let r=Date.now();await t.run(`
|
|
1886
|
+
UPDATE build_jobs
|
|
1887
|
+
SET state = 'canceled', owner_id = NULL, owner_pid = NULL,
|
|
1888
|
+
current_step = NULL, finished_at = ?, updated_at = ?
|
|
1889
|
+
WHERE job_id = ?
|
|
1890
|
+
`,[r,r,e.jobId]);let n=await B(t,e.jobId);return await le(n,{at:r,jobId:e.jobId,seq:0,state:"canceled",type:"canceled"}),n}async function Np(t,e,r){let n=Date.now(),i=yx(r),a=JSON.stringify(i);await t.run(`
|
|
1891
|
+
UPDATE build_jobs
|
|
1892
|
+
SET state = 'failed', owner_id = NULL, owner_pid = NULL,
|
|
1893
|
+
current_step = NULL, finished_at = ?, updated_at = ?, error_json = ?
|
|
1894
|
+
WHERE job_id = ?
|
|
1895
|
+
`,[n,n,a,e.jobId]),await le(e,{at:n,error:i,jobId:e.jobId,seq:0,state:"failed",type:"failed"})}async function vx(t,e){let r=await G();try{await r.transaction(async()=>{let n=await B(r,t);if(n.ownerId!==e||n.state!=="running")return;let i=Date.now();await r.run(`
|
|
1896
|
+
UPDATE build_jobs
|
|
1897
|
+
SET state = 'succeeded', owner_id = NULL, owner_pid = NULL,
|
|
1898
|
+
current_step = NULL, finished_at = ?, updated_at = ?
|
|
1899
|
+
WHERE job_id = ?
|
|
1900
|
+
`,[i,i,t]),await le(n,{at:i,jobId:t,seq:0,state:"succeeded",type:"succeeded"}),await xj(n.workspacePath,{force:!0,recursive:!0})})}finally{await r.close()}}async function Tx(t,e,r){let n=await G();try{await n.transaction(async()=>{let i=await B(n,t);i.ownerId!==e||i.state!=="running"||await Np(n,i,r)})}finally{await n.close()}}async function _x(t,e){let r=await G();try{await r.transaction(async()=>{let n=await B(r,t);n.ownerId!==e||n.state!=="canceling"||await Ga(r,n)})}finally{await r.close()}}async function Cx(t,e){let r=await G();try{await r.run(`
|
|
1901
|
+
UPDATE build_jobs
|
|
1902
|
+
SET current_step = ?,
|
|
1903
|
+
reading_summary_started_at = CASE
|
|
1904
|
+
WHEN ? = 'reading-summary' AND reading_summary_started_at IS NULL THEN ?
|
|
1905
|
+
ELSE reading_summary_started_at
|
|
1906
|
+
END,
|
|
1907
|
+
updated_at = ?
|
|
1908
|
+
WHERE job_id = ?
|
|
1909
|
+
`,[e,e,Date.now(),Date.now(),t])}finally{await r.close()}}var Pc=d(()=>{"use strict";Wn();ja();Fn()});import{rm as Rj}from"fs/promises";async function ve(t){let e=[];await t.transaction(async()=>{let r=await t.queryAll(`
|
|
1910
|
+
SELECT *
|
|
1911
|
+
FROM build_jobs
|
|
1912
|
+
WHERE state IN ('running', 'canceling')
|
|
1913
|
+
AND owner_pid IS NOT NULL
|
|
1914
|
+
`,void 0,Ee);for(let n of r)if(!(n.ownerPid!==void 0&&Fa(n.ownerPid))){if(n.state==="canceling"){await Ga(t,n);continue}await Np(t,n,{message:"Build worker process disappeared before finishing the job.",name:"BuildJobWorkerLost"}),e.push(n.workspacePath)}});for(let r of e)await Rj(r,{force:!0,recursive:!0})}var Lc=d(()=>{"use strict";Wn();Ir();Pc()});import{randomUUID as vj}from"crypto";import{resolve as Px}from"path";async function Ba(t){let e=await G();try{return await ve(e),await e.transaction(async()=>{let r=Px(t.archivePath),n=Tc(r),i=Date.now(),a=await Lx(e,{archiveKey:n,chapterId:t.chapterId,target:t.target});if(a!==void 0)return await _j(e,a,t,i);let o=t.jobId??vj(),s=await mx(o),c=await px(o),u=await hx(o),l=await fx(o),m=t.boost===!0?await Cc(e)-1:await Ix(e)+1;await e.run(`
|
|
1915
|
+
INSERT INTO build_jobs (
|
|
1916
|
+
job_id, archive_key, archive_path, chapter_id, target, state, queue_rank,
|
|
1917
|
+
workspace_path, cache_path, log_path, events_path, llm_json, prompt,
|
|
1918
|
+
created_at, updated_at
|
|
1919
|
+
) VALUES (?, ?, ?, ?, ?, 'queued', ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
1920
|
+
`,[o,n,r,t.chapterId,t.target,m,s,c,u,l,t.llmJSON??null,t.prompt??null,i,i]);let p=await B(e,o);return await le(p,{at:i,jobId:o,seq:0,state:"queued",type:"created"}),p})}finally{await e.close()}}async function jn(t){let e=await G();try{return await e.transaction(async()=>{await e.run(`
|
|
1921
|
+
UPDATE build_jobs
|
|
1922
|
+
SET input_revision = ?,
|
|
1923
|
+
updated_at = ?
|
|
1924
|
+
WHERE job_id = ?
|
|
1925
|
+
AND owner_id = ?
|
|
1926
|
+
AND state = 'running'
|
|
1927
|
+
`,[t.currentRevision,Date.now(),t.jobId,t.ownerId])}),await B(e,t.jobId)}finally{await e.close()}}async function Ua(t){let e=await ne(t.jobId);if(e.state!=="running"||e.ownerId!==t.ownerId)throw new Ut(`Job ${t.jobId} is ${e.state}. Stop current worker execution.`);if(e.inputRevision===void 0)throw new Error(`Job ${t.jobId} has no recorded chapter input revision. Requeue the job before committing build output.`);if(e.inputRevision!==t.currentRevision)throw new Error(`Chapter ${e.chapterId} changed while job ${e.jobId} was running. Requeue the job before committing build output.`)}async function Ha(t={}){let e=await G();try{await ve(e);let r=[],n=[];return t.archivePath!==void 0&&(r.push(Tc(Px(t.archivePath))),n.push("archive_key = ?")),(t.activeOnly===!0||t.all!==!0)&&n.push("state IN ('queued', 'running', 'canceling', 'paused')"),await e.queryAll(`
|
|
1928
|
+
SELECT *
|
|
1929
|
+
FROM build_jobs
|
|
1930
|
+
${n.length===0?"":`WHERE ${n.join(" AND ")}`}
|
|
1931
|
+
ORDER BY
|
|
1932
|
+
CASE state
|
|
1933
|
+
WHEN 'running' THEN 0
|
|
1934
|
+
WHEN 'canceling' THEN 1
|
|
1935
|
+
WHEN 'queued' THEN 2
|
|
1936
|
+
WHEN 'paused' THEN 3
|
|
1937
|
+
ELSE 4
|
|
1938
|
+
END,
|
|
1939
|
+
queue_rank ASC,
|
|
1940
|
+
updated_at DESC
|
|
1941
|
+
`,r,Ee)}finally{await e.close()}}async function Lx(t,e){let r=e.target==="knowledge-graph"?"target = 'knowledge-graph'":"target IN ('reading-graph', 'reading-summary')";return await t.queryOne(`
|
|
1942
|
+
SELECT *
|
|
1943
|
+
FROM build_jobs
|
|
1944
|
+
WHERE archive_key = ?
|
|
1945
|
+
AND chapter_id = ?
|
|
1946
|
+
AND state IN ('queued', 'running', 'canceling', 'paused')
|
|
1947
|
+
AND ${r}
|
|
1948
|
+
ORDER BY updated_at DESC
|
|
1949
|
+
LIMIT 1
|
|
1950
|
+
`,[e.archiveKey,e.chapterId],Ee)}async function _j(t,e,r,n){let i=e.target==="reading-graph"&&r.target==="reading-summary"?"reading-summary":e.target,a=r.boost===!0&&e.state==="queued"?await Cc(t)-1:e.queueRank;if(i===e.target&&a===e.queueRank)return e;await t.run(`
|
|
1951
|
+
UPDATE build_jobs
|
|
1952
|
+
SET target = ?, queue_rank = ?, updated_at = ?
|
|
1953
|
+
WHERE job_id = ?
|
|
1954
|
+
`,[i,a,n,e.jobId]);let o=await B(t,e.jobId);return i!==e.target&&await le(o,{at:n,from:e.target,jobId:e.jobId,seq:0,to:i,type:"target_changed"}),a!==e.queueRank&&await le(o,{at:n,jobId:e.jobId,seq:0,state:o.state,type:"boosted"}),o}async function ne(t){let e=await G();try{return await ve(e),await B(e,t)}finally{await e.close()}}async function Dp(t){let e=await xx();try{return await B(e,t)}finally{await e.close()}}async function qa(t){let e=await G();try{return await ve(e),await kx(e,t)}finally{await e.close()}}async function $a(t){return await Ax(t,"paused","paused",{allowedStates:["queued","running"]})}async function Ka(t){return await Ax(t,"queued","resumed",{allowedStates:["paused"],clearOwner:!0})}async function Ja(t){let e=await G();try{return await ve(e),await e.transaction(async()=>{let r=await B(e,t);if(r.state==="running")return await Rx(e,r);if(r.state==="queued"||r.state==="paused")return await Ga(e,r);throw new Error(`Cannot cancel ${r.state} job ${t}.`)})}finally{await e.close()}}async function za(t){let e=await G();try{return await ve(e),await e.transaction(async()=>{let r=await B(e,t);if(r.state!=="queued")throw new Error(`Only queued jobs can be boosted. Job ${t} is ${r.state}.`);let n=Date.now();await e.run(`
|
|
1955
|
+
UPDATE build_jobs
|
|
1956
|
+
SET queue_rank = ?, updated_at = ?
|
|
1957
|
+
WHERE job_id = ?
|
|
1958
|
+
`,[await Cc(e)-1,n,t]);let i=await B(e,t);return await le(i,{at:n,jobId:t,seq:0,state:"queued",type:"boosted"}),i})}finally{await e.close()}}async function Qa(t,e){let r=await G();try{return await ve(r),await r.transaction(async()=>{let n=await B(r,t);if(!Tj.has(n.state))throw new Error(`Cannot change target for ${n.state} job ${t}.`);if(n.target===e)return n;let i=await Lx(r,{archiveKey:n.archiveKey,chapterId:n.chapterId,target:e});if(i!==void 0&&i.jobId!==n.jobId)throw new Error(`Chapter ${n.chapterId} already has active ${Ex(e)} job ${i.jobId}.`);if(n.target==="reading-summary"&&e==="reading-graph"&&(n.readingSummaryStartedAt!==void 0||n.currentStep==="reading-summary"))throw new Error(`Cannot downgrade job ${t} after summary has started. Cancel it explicitly instead.`);let a=Date.now();await r.run(`
|
|
1959
|
+
UPDATE build_jobs
|
|
1960
|
+
SET target = ?, updated_at = ?
|
|
1961
|
+
WHERE job_id = ?
|
|
1962
|
+
`,[e,a,t]);let o=await B(r,t);return await le(o,{at:a,from:n.target,jobId:t,seq:0,to:e,type:"target_changed"}),o})}finally{await r.close()}}async function Ax(t,e,r,n){let i=await G();try{return await ve(i),await i.transaction(async()=>{let a=await B(i,t);if(!n.allowedStates.includes(a.state))throw new Error(`Cannot ${r} ${a.state} job ${t}.`);let o=Date.now();await i.run(`
|
|
1963
|
+
UPDATE build_jobs
|
|
1964
|
+
SET state = ?, updated_at = ?, finished_at = ?,
|
|
1965
|
+
owner_id = CASE WHEN ? = 1 THEN NULL ELSE owner_id END,
|
|
1966
|
+
owner_pid = CASE WHEN ? = 1 THEN NULL ELSE owner_pid END
|
|
1967
|
+
WHERE job_id = ?
|
|
1968
|
+
`,[e,o,n.finished===!0?o:null,n.clearOwner===!0||n.finished===!0?1:0,n.clearOwner===!0||n.finished===!0?1:0,t]);let s=await B(i,t);return await le(s,{at:o,jobId:t,seq:0,state:e,type:r}),s})}finally{await i.close()}}var Tj,Mp=d(()=>{"use strict";vc();Wn();Op();ja();Fn();Lc();Pc();Ir();Tj=new Set(["queued","running","canceling","paused"])});import{resolve as ise}from"path";var Ox=d(()=>{"use strict";Wn();Fn();Lc();Ir()});import{randomUUID as Cj}from"crypto";async function Xa(t){let e=await G(),r=`${process.pid}-${Cj()}`,n=Math.max(1,t.concurrency),i=t.idleTimeoutMs??1e4,a=!1,o=0,s=Date.now(),c=l=>{a=!0};process.once("SIGINT",c),process.once("SIGTERM",c);let u=setInterval(()=>{Nx(r).catch(()=>{})},Pj);try{if(!await Nj(e,r))return;let m=async()=>{for(;!a;){await Nx(r,e),await ve(e),o+=1;let p;try{p=await Oj(e,r)}finally{p===void 0&&(o-=1)}if(p===void 0){if(o===0&&Date.now()-s>=i)break;await gx(500);continue}s=Date.now();try{await Lj(p,r,t)}finally{o-=1,o===0&&(s=Date.now())}}};await Promise.all(Array.from({length:n},async()=>await m()))}finally{clearInterval(u),process.removeListener("SIGINT",c),process.removeListener("SIGTERM",c),await Dj(e,r),await e.close()}}async function Lj(t,e,r){let n=new _c(t,e,{appendBuildJobEvent:le,markBuildJobStep:Cx,readBuildJobForStopCheck:Dp}),i=new AbortController,a=setInterval(()=>{Aj(t,e,i).catch(()=>{})},500);try{await le(t,{at:Date.now(),jobId:t.jobId,seq:0,state:"running",type:"started"}),await r.executeJob(t,n,{signal:i.signal}),await n.throwIfStopped(),await vx(t.jobId,e)}catch(o){if(o instanceof Ut||i.signal.aborted){await _x(t.jobId,e);return}await Tx(t.jobId,e,o)}finally{clearInterval(a)}}async function Aj(t,e,r){if(r.signal.aborted)return;let n=await Dp(t.jobId);n.state==="running"&&n.ownerId===e||r.abort(new Ut(`Job ${t.jobId} is ${n.state}. Stop current worker execution.`))}async function Oj(t,e){return await t.transaction(async()=>{let r=await t.queryOne(`
|
|
1969
|
+
SELECT *
|
|
1970
|
+
FROM build_jobs
|
|
1971
|
+
WHERE state = 'queued'
|
|
1972
|
+
ORDER BY queue_rank ASC, created_at ASC
|
|
1973
|
+
LIMIT 1
|
|
1974
|
+
`,void 0,Ee);if(r===void 0)return;let n=Date.now();return await t.run(`
|
|
1975
|
+
UPDATE build_jobs
|
|
1976
|
+
SET state = 'running', owner_id = ?, owner_pid = ?, updated_at = ?
|
|
1977
|
+
WHERE job_id = ? AND state = 'queued'
|
|
1978
|
+
`,[e,process.pid,n,r.jobId]),await B(t,r.jobId)})}async function Nj(t,e){return await Mj(t),await t.transaction(async()=>{let r=await t.queryOne(`
|
|
1979
|
+
SELECT owner_pid
|
|
1980
|
+
FROM build_worker_lease
|
|
1981
|
+
WHERE id = 1
|
|
1982
|
+
`,void 0,n=>({ownerPid:n.owner_pid===null?void 0:re(n,"owner_pid")}));return r?.ownerPid!==void 0&&Fa(r.ownerPid)?!1:(await t.run(`
|
|
1983
|
+
UPDATE build_worker_lease
|
|
1984
|
+
SET owner_id = ?, owner_pid = ?, heartbeat_at = ?
|
|
1985
|
+
WHERE id = 1
|
|
1986
|
+
`,[e,process.pid,Date.now()]),!0)})}async function Nx(t,e){let r=e??await G();try{await r.run(`
|
|
1987
|
+
UPDATE build_worker_lease
|
|
1988
|
+
SET heartbeat_at = ?
|
|
1989
|
+
WHERE id = 1 AND owner_id = ?
|
|
1990
|
+
`,[Date.now(),t])}finally{e===void 0&&await r.close()}}async function Dj(t,e){await t.run(`
|
|
1991
|
+
UPDATE build_worker_lease
|
|
1992
|
+
SET owner_id = NULL, owner_pid = NULL, heartbeat_at = NULL
|
|
1993
|
+
WHERE id = 1 AND owner_id = ?
|
|
1994
|
+
`,[e])}async function Mj(t){let e=await t.queryOne(`
|
|
1995
|
+
SELECT owner_id, owner_pid
|
|
1996
|
+
FROM build_worker_lease
|
|
1997
|
+
WHERE id = 1
|
|
1998
|
+
`,void 0,r=>({ownerId:kr(r,"owner_id"),ownerPid:r.owner_pid===null?void 0:re(r,"owner_pid")}));e?.ownerPid===void 0||Fa(e.ownerPid)||await t.run(`
|
|
1999
|
+
UPDATE build_worker_lease
|
|
2000
|
+
SET owner_id = NULL, owner_pid = NULL, heartbeat_at = NULL
|
|
2001
|
+
WHERE id = 1
|
|
2002
|
+
`)}var Pj,Dx=d(()=>{"use strict";Wn();Op();ja();Fn();Lc();Pc();Mp();Ir();Pj=5e3});import{readdir as Ac,rm as Wj,rmdir as Fj,stat as Wp}from"fs/promises";import{join as Oc}from"path";function Fp(t){return jj.has(t)}async function Nc(t){let e=await Ac(t).catch(n=>{if(!(w(n)&&n.code==="ENOENT"))throw n});if(e===void 0||e.some(n=>!Fp(n)))return 0;let r=0;for(let n of e){let i=Oc(t,n);r+=await Se(i),await Wj(i,{force:!0,recursive:!0})}return await Fj(t).catch(n=>{if(!(w(n)&&n.code==="ENOENT"))throw n}),r}async function Dc(t){let e=await Ac(t,{withFileTypes:!0}).catch(a=>{if(w(a)&&a.code==="ENOENT")return[];throw a}),r=0,n=0,i=0;for(let a of e){if(!a.isDirectory())continue;i+=1;let o=Oc(t,a.name),s=await Wp(o).catch(u=>{if(!(w(u)&&u.code==="ENOENT"))throw u});if(s===void 0||Date.now()-s.mtimeMs<Gj)continue;let c=await Nc(o);if(await Mx(o)){r+=c;continue}r+=c,n+=1}return{freedBytes:r,removed:n,scanned:i}}async function jp(t){let e=await Ac(t,{withFileTypes:!0}).catch(a=>{if(w(a)&&a.code==="ENOENT")return[];throw a}),r=0,n=0,i=0;for(let a of e){if(!a.isDirectory())continue;let o=Oc(t,a.name),s=await jp(o);r+=s.freedBytes,n+=s.removed,i+=s.scanned+1;let c=await Nc(o);if(await Mx(o)){r+=c;continue}r+=c,n+=1}return{freedBytes:r,removed:n,scanned:i}}async function Se(t){try{let e=await Wp(t);if(e.isDirectory()){let r=await Ac(t),n=0;for(let i of r)n+=await Se(Oc(t,i));return n}return e.size}catch(e){if(w(e)&&e.code==="ENOENT")return 0;throw e}}async function Mx(t){try{return await Wp(t),!0}catch(e){if(w(e)&&e.code==="ENOENT")return!1;throw e}}var jj,Gj,Va=d(()=>{"use strict";T();jj=new Set([".DS_Store"]),Gj=6e4});import{rm as Ht}from"fs/promises";async function Ya(t={}){let e=await G(),r=Date.now()-(t.olderThanMs??10080*60*1e3),n=t.states??["succeeded","failed","canceled"];try{let i=n.map(()=>"?").join(", "),a=await e.queryAll(`
|
|
2003
|
+
SELECT *
|
|
2004
|
+
FROM build_jobs
|
|
2005
|
+
WHERE state IN (${i})
|
|
2006
|
+
AND updated_at <= ?
|
|
2007
|
+
`,[...n,r],Ee);for(let o of a)await Ht(o.workspacePath,{force:!0,recursive:!0}),await Ht(o.cachePath,{force:!0,recursive:!0}),await Ht(o.logPath,{force:!0,recursive:!0}),await Ht(o.eventsPath,{force:!0}),await e.run("DELETE FROM build_jobs WHERE job_id = ?",[o.jobId]);return a.length}finally{await e.close()}}async function Mc(t){let e=await G(),r=t.force?t.now:t.now-10080*60*1e3;try{let n=await e.queryOne("SELECT COUNT(*) AS count FROM build_jobs",void 0,s=>re(s,"count")),i=await e.queryAll(`
|
|
2008
|
+
SELECT *
|
|
2009
|
+
FROM build_jobs
|
|
2010
|
+
WHERE state IN ('succeeded', 'failed', 'canceled')
|
|
2011
|
+
AND updated_at <= ?
|
|
2012
|
+
`,[r],Ee),a=t.dryRun?{freedBytes:0,removed:0,scanned:0}:await Dc(Cp()),o=0;for(let s of i)o+=await Se(s.workspacePath),o+=await Se(s.cachePath),o+=await Se(s.logPath),o+=await Se(s.eventsPath),t.dryRun||(await Ht(s.workspacePath,{force:!0,recursive:!0}),await Ht(s.cachePath,{force:!0,recursive:!0}),await Ht(s.logPath,{force:!0,recursive:!0}),await Ht(s.eventsPath,{force:!0}),await e.run("DELETE FROM build_jobs WHERE job_id = ?",[s.jobId]));return{freedBytes:o+a.freedBytes,removed:i.length+a.removed,scanned:(n??0)+a.scanned}}finally{await e.close()}}var Wx=d(()=>{"use strict";Va();vc();Fn();Ir()});var Gx=d(()=>{"use strict";_p();Mp();Ox();Dx();ja();Wx()});async function Wc(t,e){let r=t.getSerialFragments(e);return await Promise.all((await r.listFragmentIds()).map(async n=>await r.getFragment(n)))}async function*Bx(t,e){let r=t.getSerialFragments(e);for(let n of await r.listFragmentIds()){let i=await r.getFragment(n);for(let a of i.sentences)yield a.text}}async function Ux(t){let e=[];for await(let r of t)e.push(r);return e}var Fc=d(()=>{"use strict"});import{createReadStream as Bj,createWriteStream as Uj}from"fs";import{createInterface as Hj}from"readline";import{z as b}from"zod";function Gp(t){return oG.parse(t)}async function xr(t,e){let r=Uj(t,{encoding:"utf8",flags:"wx"});try{for await(let n of e)await bG(r,`${JSON.stringify(Gp(n))}
|
|
2013
|
+
`)}finally{await SG(r)}}async function*Bn(t){let e=Hj({crlfDelay:1/0,input:Bj(t,{encoding:"utf8"})}),r=0;for await(let n of e)if(r+=1,n.trim()!=="")try{yield Gp(JSON.parse(n))}catch(i){throw new Error(`Invalid WikgObject JSONL record at ${t}:${r}`,{cause:i})}}async function*Bp(t){yield{chapterId:t.chapterId,schemaVersion:jc,stream:"knowledge-graph",type:"meta"},t.parameter!==void 0&&(yield{...t.parameter.language===void 0?{}:{language:t.parameter.language},prompt:t.parameter.prompt,scope:"knowledge-graph",type:"parameter"});for await(let e of t.mentions){if(e.chapterId!==t.chapterId)throw new Error(`Mention ${e.id} belongs to chapter ${e.chapterId}, expected chapter ${t.chapterId}.`);yield sG(e)}for await(let e of t.mentionLinks)yield dG(t.chapterId,e);yield{type:"end"}}async function Up(t,e){let r=[],n=[],i,a=!1,o=!1;for await(let s of e)switch(s.type){case"meta":if(s.chapterId!==t)throw new Error(`WikgObject stream belongs to chapter ${s.chapterId}, expected chapter ${t}.`);if(s.stream!=="knowledge-graph")throw new Error(`Expected knowledge-graph stream, received ${s.stream}.`);a=!0;break;case"parameter":s.scope==="knowledge-graph"&&(i=s);break;case"mention":r.push(cG(t,s));break;case"mention-link":n.push(uG(t,s));break;case"end":o=!0;break;default:throw new Error(`Unexpected ${s.type} record in knowledge graph stream.`)}if(!a)throw new Error("WikgObject stream is missing a meta record.");if(!o)throw new Error("WikgObject stream is missing an end record.");return{mentionLinks:n,mentions:r,...i===void 0?{}:{parameter:i}}}async function*Za(t){yield{chapterId:t.chapterId,schemaVersion:jc,stream:"reading-graph",type:"meta"},t.parameter!==void 0&&(yield{...t.parameter.language===void 0?{}:{language:t.parameter.language},prompt:t.parameter.prompt,scope:"reading-graph",type:"parameter"});for(let o of await Wc(t.document,t.chapterId))yield lG(o);let e=new Map,r=0;for(let o of await t.document.chunks.listBySerial(t.chapterId)){let s=`chunk-${r}`;r+=1,e.set(o.id,s),yield pG(t.chapterId,s,o)}for(let o of await t.document.readingEdges.listBySerial(t.chapterId)){let s=e.get(o.fromId),c=e.get(o.toId);s===void 0||c===void 0||(yield hG(s,c,o))}for(let o of await t.document.fragmentGroups.listBySerial(t.chapterId))yield fG(o);let n=new Map,i=0,a=await t.document.snakes.listBySerial(t.chapterId);for(let o of a){let s=`snake-${i}`;i+=1,n.set(o.id,s),yield yG(s,o);for(let c of await t.document.snakeChunks.listBySnake(o.id)){let u=e.get(c.chunkId);u!==void 0&&(yield{chunkId:u,position:c.position,snakeId:s,type:"snake-chunk"})}}for(let o of await t.document.snakeEdges.listBySerial(t.chapterId)){let s=n.get(o.fromSnakeId),c=n.get(o.toSnakeId);s===void 0||c===void 0||(yield{fromSnakeId:s,toSnakeId:c,type:"snake-edge",weight:o.weight})}yield{type:"end"}}async function Hp(t,e){let r=[],n=[],i=[],a=[],o=[],s=[],c=[],u,l=!1,m=!1;for await(let p of e)switch(p.type){case"meta":if(p.chapterId!==t)throw new Error(`WikgObject stream belongs to chapter ${p.chapterId}, expected chapter ${t}.`);if(p.stream!=="reading-graph")throw new Error(`Expected reading-graph stream, received ${p.stream}.`);l=!0;break;case"parameter":p.scope==="reading-graph"&&(u=p);break;case"source-fragment":i.push(mG(t,p));break;case"reading-chunk":r.push(p);break;case"reading-edge":a.push(p);break;case"fragment-group":n.push(p);break;case"snake":c.push(p);break;case"snake-chunk":o.push(p);break;case"snake-edge":s.push(p);break;case"end":m=!0;break;default:throw new Error(`Unexpected ${p.type} record in reading graph stream.`)}if(!l)throw new Error("WikgObject stream is missing a meta record.");if(!m)throw new Error("WikgObject stream is missing an end record.");return gG({chunks:r,readingEdges:a,snakeChunks:o,snakeEdges:s,snakes:c}),{chunks:r,fragmentGroups:n,fragments:i,...u===void 0?{}:{parameter:u},readingEdges:a,snakeChunks:o,snakeEdges:s,snakes:c}}function sG(t){return{...t.confidence===void 0?{}:{confidence:t.confidence},...t.fragmentId===void 0?{}:{fragmentId:t.fragmentId},id:t.id,...t.note===void 0?{}:{note:t.note},qid:t.qid,rangeEnd:t.rangeEnd,rangeStart:t.rangeStart,...t.sentenceIndex===void 0?{}:{sentenceIndex:t.sentenceIndex},surface:t.surface,type:"mention"}}function cG(t,e){return{chapterId:t,...e.confidence===void 0?{}:{confidence:e.confidence},...e.fragmentId===void 0?{}:{fragmentId:e.fragmentId},id:e.id,...e.note===void 0?{}:{note:e.note},qid:e.qid,rangeEnd:e.rangeEnd,rangeStart:e.rangeStart,...e.sentenceIndex===void 0?{}:{sentenceIndex:e.sentenceIndex},surface:e.surface}}function dG(t,e){return{...e.confidence===void 0?{}:{confidence:e.confidence},evidenceSentenceIndexes:e.evidenceSentenceIds.map(r=>{if(r[0]!==t)throw new Error(`Mention link ${e.id} evidence sentence ${$x(r)} is outside chapter ${t}.`);return r[1]}),id:e.id,...e.note===void 0?{}:{note:e.note},predicate:e.predicate,sourceMentionId:e.sourceMentionId,targetMentionId:e.targetMentionId,type:"mention-link"}}function uG(t,e){return{...e.confidence===void 0?{}:{confidence:e.confidence},evidenceSentenceIds:e.evidenceSentenceIndexes.map(r=>[t,r]),id:e.id,...e.note===void 0?{}:{note:e.note},predicate:e.predicate,sourceMentionId:e.sourceMentionId,targetMentionId:e.targetMentionId}}function lG(t){return{fragmentId:t.fragmentId,sentences:t.sentences.map(e=>({text:e.text,wordsCount:e.wordsCount})),summary:t.summary,type:"source-fragment"}}function mG(t,e){return{fragmentId:e.fragmentId,sentences:e.sentences,serialId:t,summary:e.summary}}function pG(t,e,r){return{content:r.content,generation:r.generation,id:e,...r.importance===void 0?{}:{importance:r.importance},label:r.label,...r.retention===void 0?{}:{retention:r.retention},sentenceIndex:Hx(t,r.sentenceId),sentenceIndexes:r.sentenceIds.map(n=>Hx(t,n)),type:"reading-chunk",weight:r.weight,wordsCount:r.wordsCount}}function hG(t,e,r){return{fromChunkId:t,...r.strength===void 0?{}:{strength:r.strength},toChunkId:e,type:"reading-edge",weight:r.weight}}function fG(t){return{endSentenceIndex:t.endSentenceIndex,groupId:t.groupId,startSentenceIndex:t.startSentenceIndex,type:"fragment-group"}}function yG(t,e){return{firstLabel:e.firstLabel,groupId:e.groupId,id:t,lastLabel:e.lastLabel,localSnakeId:e.localSnakeId,size:e.size,type:"snake",weight:e.weight,wordsCount:e.wordsCount}}function gG(t){let e=new Set;for(let n of t.chunks){if(e.has(n.id))throw new Error(`Duplicate reading chunk id ${n.id}.`);e.add(n.id)}let r=new Set;for(let n of t.snakes){if(r.has(n.id))throw new Error(`Duplicate snake id ${n.id}.`);r.add(n.id)}for(let n of t.readingEdges)Gn(e,n.fromChunkId,"chunk"),Gn(e,n.toChunkId,"chunk");for(let n of t.snakeChunks)Gn(r,n.snakeId,"snake"),Gn(e,n.chunkId,"chunk");for(let n of t.snakeEdges)Gn(r,n.fromSnakeId,"snake"),Gn(r,n.toSnakeId,"snake")}function Gn(t,e,r){if(!t.has(e))throw new Error(`Unknown ${r} id ${e}.`)}function Hx(t,e){if(e[0]!==t)throw new Error(`Sentence ${$x(e)} is outside chapter ${t}.`);return e[1]}function $x(t){return t.join(":")}async function bG(t,e){await new Promise((r,n)=>{t.write(e,i=>{if(i!=null){n(i);return}r()})})}async function SG(t){await new Promise((e,r)=>{t.end(n=>{if(n!=null){r(n);return}e()})})}var jc,$,qj,$j,qx,Kj,Jj,zj,Qj,Xj,Vj,Yj,Zj,eG,tG,rG,nG,iG,aG,oG,Un=d(()=>{"use strict";tt();Fc();jc=1,$=b.number().int().nonnegative(),qj=b.literal(jc),$j=b.string().regex(/^Q[1-9][0-9]*$/u),qx=b.number().min(0).max(1).optional(),Kj=b.object({text:b.string(),wordsCount:$}).strict(),Jj=b.object({type:b.literal("meta"),schemaVersion:qj,chapterId:b.number().int(),stream:b.enum(["knowledge-graph","reading-graph","summary"])}).strict(),zj=b.object({type:b.literal("parameter"),scope:b.enum(["knowledge-graph","reading-graph","summary"]),language:b.string().optional(),prompt:b.string()}).strict(),Qj=b.object({type:b.literal("source-fragment"),fragmentId:$,summary:b.string(),sentences:b.array(Kj)}).strict(),Xj=b.object({type:b.literal("reading-chunk"),id:b.string().min(1),generation:b.number().int(),sentenceIndex:$,label:b.string(),content:b.string(),sentenceIndexes:b.array($).min(1),retention:b.enum(Le).optional(),importance:b.enum(Ge).optional(),wordsCount:$,weight:b.number()}).strict(),Vj=b.object({type:b.literal("reading-edge"),fromChunkId:b.string().min(1),toChunkId:b.string().min(1),strength:b.string().optional(),weight:b.number()}).strict(),Yj=b.object({type:b.literal("fragment-group"),groupId:$,startSentenceIndex:$,endSentenceIndex:$}).strict(),Zj=b.object({type:b.literal("snake"),id:b.string().min(1),groupId:$,localSnakeId:$,size:$,firstLabel:b.string(),lastLabel:b.string(),wordsCount:$,weight:b.number()}).strict(),eG=b.object({type:b.literal("snake-chunk"),snakeId:b.string().min(1),chunkId:b.string().min(1),position:$}).strict(),tG=b.object({type:b.literal("snake-edge"),fromSnakeId:b.string().min(1),toSnakeId:b.string().min(1),weight:b.number()}).strict(),rG=b.object({type:b.literal("summary"),text:b.string()}).strict(),nG=b.object({type:b.literal("mention"),id:b.string().min(1),fragmentId:$.optional(),sentenceIndex:$.optional(),rangeStart:$,rangeEnd:$,surface:b.string().min(1),qid:$j,confidence:qx,note:b.string().optional()}).strict(),iG=b.object({type:b.literal("mention-link"),id:b.string().min(1),sourceMentionId:b.string().min(1),targetMentionId:b.string().min(1),predicate:b.string().min(1),evidenceSentenceIndexes:b.array($).min(1),confidence:qx,note:b.string().optional()}).strict(),aG=b.object({type:b.literal("end")}).strict(),oG=b.discriminatedUnion("type",[Jj,zj,Qj,Xj,Vj,Yj,Zj,eG,tG,rG,nG,iG,aG])});function Kx(t){return{extractionPrompt:Re(t.extractionPrompt),...t.userLanguage===void 0?{}:{userLanguage:t.userLanguage}}}function Jx(t){let e=Lr(t.userLanguage);return{...e===void 0?{}:{language:e},prompt:Re(t.extractionPrompt)}}var zx=d(()=>{"use strict";Ve();Bt()});async function Qx(t,e,r){let n=new Vt(t),i=n.getSerial(e),a=await i.createDraft(),o=0,s=!1;await n.ensureCreated();for await(let c of gr(r)){let u=c.text.trim();u!==""&&(o>0&&o+c.wordsCount>wG&&(await a.commit(),a=await i.createDraft(),o=0),a.addSentence(u,c.wordsCount),o+=c.wordsCount,s=!0)}s?await a.commit():a.discard()}var wG,Xx=d(()=>{"use strict";L();ac();wG=320});import{mkdir as EG,rm as kG}from"fs/promises";import{join as Vx}from"path";async function Gc(t,e){let r=Vx(e.workspacePath,"graph-document"),n=Vx(e.workspacePath,"reading-graph.jsonl"),i=Jx(e);await kG(r,{force:!0,recursive:!0}),await EG(e.workspacePath,{recursive:!0});let a=await ye.open(r);try{await a.openSession(async o=>{await o.serials.createWithId(t),await Qx(r,t,e.sourceText);let s=vi(o,r);await new br({document:s,llm:e.llm,...e.logDirPath===void 0?{}:{logDirPath:e.logDirPath}}).buildTopologyInto(t,Kx(e),e.progressTracker)}),await xr(n,Za({chapterId:t,document:vi(a,r),parameter:i}))}finally{await a.release()}return{chapterId:t,documentPath:r,objectsPath:n,parameter:i}}async function Bc(t,e){let r=await Hp(e.chapterId,Bn(e.objectsPath));return await t.openSession(async n=>{await bn(n,e.chapterId,"sourced"),await n.clearSerialGraph(e.chapterId),await n.serials.ensure(e.chapterId);let i=new Map;for(let s of r.chunks){let c=await n.chunks.create({content:s.content,generation:s.generation,label:s.label,sentenceId:[e.chapterId,s.sentenceIndex],sentenceIds:s.sentenceIndexes.map(u=>[e.chapterId,u]),weight:s.weight,wordsCount:s.wordsCount,...s.importance===void 0?{}:{importance:s.importance},...s.retention===void 0?{}:{retention:s.retention}});i.set(s.id,c.id)}for(let s of r.readingEdges)await n.readingEdges.save({fromId:Hn(i,s.fromChunkId,"chunk"),...s.strength===void 0?{}:{strength:s.strength},toId:Hn(i,s.toChunkId,"chunk"),weight:s.weight});await n.fragmentGroups.saveMany(r.fragmentGroups.map(s=>({endSentenceIndex:s.endSentenceIndex,groupId:s.groupId,serialId:e.chapterId,startSentenceIndex:s.startSentenceIndex})));let a=new Map;for(let s of r.snakes){let c=await n.snakes.create({firstLabel:s.firstLabel,groupId:s.groupId,lastLabel:s.lastLabel,localSnakeId:s.localSnakeId,serialId:e.chapterId,size:s.size,weight:s.weight,wordsCount:s.wordsCount});a.set(s.id,c)}for(let s of r.snakeChunks)await n.snakeChunks.save({chunkId:Hn(i,s.chunkId,"chunk"),position:s.position,snakeId:Hn(a,s.snakeId,"snake")});for(let s of r.snakeEdges)await n.snakeEdges.save({fromSnakeId:Hn(a,s.fromSnakeId,"snake"),toSnakeId:Hn(a,s.toSnakeId,"snake"),weight:s.weight});let o=await n.graphBuildParameters.save(r.parameter??e.parameter);await n.serials.setTopologyReady(e.chapterId,!0,o.hash)}),await Y(t,e.chapterId)}function Hn(t,e,r){let n=t.get(e);if(n===void 0)throw new Error(`Unknown ${r} id ${e}.`);return n}var Yx=d(()=>{"use strict";L();be();Mn();Un();zx();Xx()});function Rr(t,e){return t-e}function Zx(t){let e=new Map;for(let r of t){let n=e.get(r.serialId)??[];n.push(r.fragmentId),e.set(r.serialId,n)}return new Map([...e.entries()].map(([r,n])=>[r,n.sort(Rr)]))}function eR(t,e){let r=new Set(e);return t.flatMap((n,i)=>{if(!r.has(n))return[];let a=t[i+1];return[{endSentenceIndex:a===void 0?1/0:a-1,startSentenceIndex:n}]})}function tR(t,e){return t.id-e.id}function rR(t,e){return t.serialId-e.serialId||t.groupId-e.groupId||t.startSentenceIndex-e.startSentenceIndex||t.endSentenceIndex-e.endSentenceIndex}function nR(t,e){return t.fromId-e.fromId||t.toId-e.toId}function iR(t,e){return t[0]-e[0]||t[1]-e[1]}function aR(t,e){return t.groupId-e.groupId||t.id-e.id}function oR(t,e){return t.snakeId-e.snakeId||t.position-e.position}function sR(t,e){return t.fromSnakeId-e.fromSnakeId||t.toSnakeId-e.toSnakeId}var Uc=d(()=>{"use strict"});var Hc,cR=d(()=>{"use strict";Uc();Hc=class{#e;#t;#r;constructor(e,r){this.#e=[...e].sort(tR),this.#t=new Map(e.map(n=>[n.id,n])),this.#r=Zx(r)}getById(e){return Promise.resolve(this.#t.get(e))}countAll(){return Promise.resolve(this.#e.length)}listAll(){return Promise.resolve([...this.#e])}listBySentenceStartIndexes(e,r){let n=eR(this.#r.get(e)??[],r);return Promise.resolve(this.#e.filter(i=>i.sentenceId[0]===e&&n.some(a=>i.sentenceId[1]>=a.startSentenceIndex&&i.sentenceId[1]<=a.endSentenceIndex)))}listBySentenceRange(e,r,n){return Promise.resolve(this.#e.filter(i=>i.sentenceId[0]===e&&i.sentenceId[1]>=r&&i.sentenceId[1]<=n))}listBySerial(e){return Promise.resolve(this.#e.filter(r=>r.sentenceId[0]===e))}getMaxId(){return Promise.resolve(this.#e.reduce((e,r)=>Math.max(e,r.id),0))}listFragmentPairs(){let e=new Set;for(let r of this.#e)e.add(`${r.sentenceId[0]}:${r.sentenceId[1]}`);return Promise.resolve([...e].map(r=>r.split(":").map(Number)).sort(iR).map(([r,n])=>[r,n]))}}});var qc,$c,Kc,Jc,dR=d(()=>{"use strict";qc=class{countByQid(e,r){return Promise.resolve(0)}getById(e){return Promise.resolve(void 0)}listAll(){return Promise.resolve([])}listByQid(e,r){return Promise.resolve([])}listLabelsByQid(e,r){return Promise.resolve([])}listBySurfaceTerms(e){return Promise.resolve([])}listBySurfaces(e){return Promise.resolve([])}listByChapter(e){return Promise.resolve([])}},$c=class{countByTriple(e){return Promise.resolve(0)}getById(e){return Promise.resolve(void 0)}listAll(){return Promise.resolve([])}listByTriple(e){return Promise.resolve([])}listByChapter(e){return Promise.resolve([])}},Kc=class{getMap(e){return Promise.resolve({})}},Jc=class{getByHash(e){return Promise.resolve(void 0)}}});var zc,Qc,Xc,Vc,Yc,uR=d(()=>{"use strict";Uc();zc=class{#e;#t;constructor(e,r){this.#e=[...e].sort(nR),this.#t=new Map(r.map(n=>[n.id,n.sentenceId[0]]))}listAll(){return Promise.resolve([...this.#e])}countAll(){return Promise.resolve(this.#e.length)}listBySerial(e){return Promise.resolve(this.#e.filter(r=>this.#t.get(r.fromId)===e&&this.#t.get(r.toId)===e))}listIncoming(e){return Promise.resolve(this.#e.filter(r=>r.toId===e))}listOutgoing(e){return Promise.resolve(this.#e.filter(r=>r.fromId===e))}},Qc=class{#e;#t;constructor(e){this.#e=[...e].sort(aR),this.#t=new Map(e.map(r=>[r.id,r]))}getById(e){return Promise.resolve(this.#t.get(e))}listIdsByGroup(e,r){return Promise.resolve(this.#e.filter(n=>n.serialId===e&&n.groupId===r).map(n=>n.id).sort(Rr))}listBySerial(e){return Promise.resolve(this.#e.filter(r=>r.serialId===e))}},Xc=class{#e;constructor(e){this.#e=[...e].sort(oR)}listChunkIds(e){return Promise.resolve(this.#e.filter(r=>r.snakeId===e).map(r=>r.chunkId))}listBySnake(e){return Promise.resolve(this.#e.filter(r=>r.snakeId===e))}},Vc=class{#e;#t;constructor(e,r){this.#e=[...e].sort(sR),this.#t=new Map(r.map(n=>[n.id,n.serialId]))}listIncoming(e){return Promise.resolve(this.#e.filter(r=>r.toSnakeId===e))}listOutgoing(e){return Promise.resolve(this.#e.filter(r=>r.fromSnakeId===e))}listWithin(e){let r=new Set(e);return Promise.resolve(this.#e.filter(n=>r.has(n.fromSnakeId)&&r.has(n.toSnakeId)))}listBySerial(e){return Promise.resolve(this.#e.filter(r=>this.#t.get(r.fromSnakeId)===e&&this.#t.get(r.toSnakeId)===e))}},Yc=class{#e;constructor(e){this.#e=[...e].sort(rR)}listBySerial(e){return Promise.resolve(this.#e.filter(r=>r.serialId===e))}listSerialIds(){return Promise.resolve([...new Set(this.#e.map(e=>e.serialId))].sort(Rr))}listGroupIdsForSerial(e){return Promise.resolve([...new Set(this.#e.filter(r=>r.serialId===e).map(r=>r.groupId))].sort(Rr))}}});var Zc,qn,lR=d(()=>{"use strict";Uc();Zc=class{#e;constructor(e){this.#e=e}getById(e){return Promise.resolve(e===this.#e.id?this.#e:void 0)}getRevision(e){return Promise.resolve(e===this.#e.id?this.#e.revision:0)}getRevisions(e){return Promise.resolve(new Map(e.filter(r=>r===this.#e.id).map(r=>[r,this.#e.revision])))}getChaptersRevision(){return Promise.resolve(this.#e.revision)}getMaxId(){return Promise.resolve(this.#e.id)}listIds(){return Promise.resolve([this.#e.id])}listDocumentOrders(){return Promise.resolve(new Map([[this.#e.id,this.#e.documentOrder]]))}},qn=class{path="";serialId;#e;constructor(e,r){this.serialId=e,this.#e=new Map(r.filter(n=>n.serialId===e).map(n=>[n.fragmentId,n]))}getFragment(e){let r=this.#e.get(e);if(r===void 0)throw new Error(`Fragment ${e} does not exist`);return Promise.resolve(r)}listFragmentIds(){return Promise.resolve([...this.#e.keys()].sort(Rr))}async getSentence(e){let r=(await this.listSentences())[e];if(r===void 0)throw new RangeError(`Sentence ${e} does not exist`);return r}async listSentencesInRange(e,r){return(await this.listSentences()).slice(e,r+1)}async listSentences(){return(await Promise.all((await this.listFragmentIds()).map(async r=>await this.getFragment(r)))).flatMap(r=>r.sentences)}async readText(){let e=await this.listSentences();if(e.length!==0)return e.map(r=>r.text).join("")}}});var ed,mR=d(()=>{"use strict";cR();dR();uR();lR();ed=class{chunks;fragmentGroups;graphBuildParameters;readingEdges;mentionLinks;mentions;metadata;serials;snakeChunks;snakeEdges;snakes;#e;constructor(e){let r=e.serial.id;this.chunks=new Hc(e.chunks,e.fragments),this.fragmentGroups=new Yc(e.fragmentGroups),this.graphBuildParameters=new Jc,this.readingEdges=new zc(e.readingEdges,e.chunks),this.mentionLinks=new $c,this.mentions=new qc,this.metadata=new Kc,this.serials=new Zc(e.serial),this.snakeChunks=new Xc(e.snakeChunks),this.snakeEdges=new Vc(e.snakeEdges,e.snakes),this.snakes=new Qc(e.snakes),this.#e=new qn(r,e.fragments)}async getSentence(e){let[r,n]=e,i=(await this.getSerialFragments(r).listSentences())[n];if(i===void 0)throw new RangeError(`Sentence ${n} does not exist`);return i.text}getSerialFragments(e){return e!==this.#e.serialId?new qn(e,[]):this.#e}getSummaryFragments(e){return new qn(e,[])}async openSession(e){return await e(this)}readDatabase(){return Promise.reject(new Error("Summary input snapshots do not expose a SQLite database."))}readSearchIndexDatabase(){return Promise.reject(new Error("Summary input snapshots do not expose a search index database."))}readBookMeta(){return Promise.resolve(void 0)}readCover(){return Promise.resolve(void 0)}readSummary(e){return Promise.resolve(void 0)}readToc(){return Promise.resolve(void 0)}release(){return Promise.resolve()}}});import{z as S}from"zod";function fR(t){return{id:t.id,generation:t.generation,sentenceId:t.sentenceId,label:t.label,content:t.content,sentenceIds:t.sentenceIds,...t.retention===void 0?{}:{retention:t.retention},...t.importance===void 0?{}:{importance:t.importance},wordsCount:t.wordsCount,weight:t.weight}}function yR(t){return{fromId:t.fromId,toId:t.toId,...t.strength===void 0?{}:{strength:t.strength},weight:t.weight}}var pR,IG,xG,RG,vG,TG,_G,CG,PG,LG,hR,gR=d(()=>{"use strict";tt();pR=S.tuple([S.number(),S.number()]),IG=S.object({text:S.string(),wordsCount:S.number()}),xG=S.object({serialId:S.number(),fragmentId:S.number(),summary:S.string(),sentences:S.array(IG)}),RG=S.object({documentOrder:S.number().optional(),id:S.number(),knowledgeGraphReady:S.boolean(),knowledgeGraphParameterHash:S.string().optional(),revision:S.number().optional(),topologyParameterHash:S.string().optional(),topologyReady:S.boolean()}).transform(t=>({documentOrder:t.documentOrder??t.id,id:t.id,knowledgeGraphReady:t.knowledgeGraphReady,...t.knowledgeGraphParameterHash===void 0?{}:{knowledgeGraphParameterHash:t.knowledgeGraphParameterHash},revision:t.revision??0,topologyReady:t.topologyReady,...t.topologyParameterHash===void 0?{}:{topologyParameterHash:t.topologyParameterHash}})),vG=S.object({id:S.number(),generation:S.number(),sentenceId:pR,label:S.string(),content:S.string(),sentenceIds:S.array(pR),retention:S.enum(Le).optional(),importance:S.enum(Ge).optional(),wordsCount:S.number(),weight:S.number()}),TG=S.object({fromId:S.number(),toId:S.number(),strength:S.string().optional(),weight:S.number()}),_G=S.object({id:S.number(),serialId:S.number(),groupId:S.number(),localSnakeId:S.number(),size:S.number(),firstLabel:S.string(),lastLabel:S.string(),wordsCount:S.number(),weight:S.number()}),CG=S.object({snakeId:S.number(),chunkId:S.number(),position:S.number()}),PG=S.object({fromSnakeId:S.number(),toSnakeId:S.number(),weight:S.number()}),LG=S.object({serialId:S.number(),groupId:S.number(),startSentenceIndex:S.number(),endSentenceIndex:S.number()}),hR=S.object({chunks:S.array(vG),fragmentGroups:S.array(LG),fragments:S.array(xG),readingEdges:S.array(TG),serial:RG,snakeChunks:S.array(CG),snakeEdges:S.array(PG),snakes:S.array(_G)})});import{readFile as AG,writeFile as OG}from"fs/promises";async function bR(t){let e=hR.parse(JSON.parse(await AG(t,"utf8")));return{...e,chunks:e.chunks.map(fR),readingEdges:e.readingEdges.map(yR)}}async function SR(t,e){await OG(t,`${JSON.stringify(e)}
|
|
2014
|
+
`,"utf8")}var wR=d(()=>{"use strict";gR()});async function ER(t,e,r){let n=t.getSerialFragments(e),i=await n.listFragmentIds();if(i.length<=1)return await NG(n,i);let a=[];for(let o of await t.fragmentGroups.listGroupIdsForSerial(e)){let s=await Ta({compressionRatio:.2,document:t,groupId:o,llm:r.llm,maxClues:10,maxIterations:5,scopes:ii,serialId:e,...r.logDirPath===void 0?{}:{logDirPath:r.logDirPath},...r.userLanguage===void 0?{}:{userLanguage:r.userLanguage}});s.trim()!==""&&a.push(s)}return a.join(`
|
|
2015
|
+
|
|
2016
|
+
`)}async function NG(t,e){return e.length===0?"":(await Promise.all(e.map(async n=>await t.getFragment(n)))).flatMap(n=>n.sentences.map(i=>i.text)).join(" ").trim()}var kR=d(()=>{"use strict";ai();Zm()});import{mkdir as MG}from"fs/promises";import{join as IR}from"path";async function td(t,e){let r=await bR(e.snapshotPath);return await WG(r,t,e)}async function rd(t,e,r){return await t.openSession(async n=>{await bn(n,e,"graphed"),await n.writeSummary(e,r)}),await Y(t,e)}async function nd(t,e,r){let n=IR(r,"summary-input.json"),i=IR(r,"reading-graph.jsonl");await MG(r,{recursive:!0}),await bn(t,e,"graphed");let a=await Wc(t,e),o=await t.snakes.listBySerial(e),s=(await Promise.all(o.map(async c=>await t.snakeChunks.listBySnake(c.id)))).flat();return await SR(n,{chunks:await t.chunks.listBySerial(e),fragmentGroups:await t.fragmentGroups.listBySerial(e),fragments:a,readingEdges:await t.readingEdges.listBySerial(e),serial:{documentOrder:e,id:e,knowledgeGraphReady:!1,revision:0,topologyReady:!0},snakeChunks:s,snakeEdges:await t.snakeEdges.listBySerial(e),snakes:o}),await xr(i,Za({chapterId:e,document:t})),{filePath:n,objectsPath:i}}async function WG(t,e,r){if(t.serial.id!==e)throw new Error(`Summary snapshot belongs to chapter ${t.serial.id}, not chapter ${e}.`);if(!t.serial.topologyReady)throw new Error(`Chapter ${e} is not ready for summary.`);return await ER(new ed(t),e,r)}var xR=d(()=>{"use strict";L();be();mR();wR();Fc();kR();Un()});var RR=d(()=>{"use strict"});var qp=d(()=>{"use strict";xR();Fc();RR()});async function $n(t,e){return{details:await Y(t,e),revision:await t.serials.getRevision(e),sourceText:await Ux(Bx(t,e))}}var vR=d(()=>{"use strict";be();qp()});var TR=d(()=>{"use strict"});var _R=d(()=>{"use strict";Yx();vR();TR()});var CR=d(()=>{"use strict";_R();qp()});import{createReadStream as Zce,createWriteStream as FG}from"fs";import{createInterface as tde}from"readline";import{z as U}from"zod";function PR(t,e){let r=new Set;for(let i of e.mentions){if(i.chapterId!==t)throw new Error(`Mention ${i.id} belongs to chapter ${i.chapterId}, expected chapter ${t}.`);if(i.rangeEnd<=i.rangeStart)throw new Error(`Mention ${i.id} has invalid range [${i.rangeStart}, ${i.rangeEnd}).`);if(r.has(i.id))throw new Error(`Duplicate mention id ${i.id}.`);r.add(i.id)}let n=new Set;for(let i of e.mentionLinks){if(n.has(i.id))throw new Error(`Duplicate mention link id ${i.id}.`);if(!r.has(i.sourceMentionId))throw new Error(`Mention link ${i.id} references unknown source mention ${i.sourceMentionId}.`);if(!r.has(i.targetMentionId))throw new Error(`Mention link ${i.id} references unknown target mention ${i.targetMentionId}.`);if(i.evidenceSentenceIds.length===0)throw new Error(`Mention link ${i.id} has no evidence sentences.`);for(let a of i.evidenceSentenceIds)if(a[0]!==t)throw new Error(`Mention link ${i.id} evidence sentence ${UG(a)} is outside chapter ${t}.`);n.add(i.id)}}function UG(t){return t.join(":")}async function $p(t,e,r){let n=FG(t,{encoding:"utf8",flags:"wx"});try{for await(let i of e)n.write(`${JSON.stringify(r(i))}
|
|
2017
|
+
`)}finally{await HG(n)}}function Kp(t){let e=jG.parse(t);return{chapterId:e.chapterId,...e.confidence===void 0?{}:{confidence:e.confidence},id:e.id,...e.note===void 0?{}:{note:e.note},qid:e.qid,rangeEnd:e.rangeEnd,rangeStart:e.rangeStart,...e.sentenceIndex===void 0?{}:{sentenceIndex:e.sentenceIndex},surface:e.surface}}function Jp(t){let e=BG.parse(t);return{...e.confidence===void 0?{}:{confidence:e.confidence},evidenceSentenceIds:e.evidenceSentenceIds,id:e.id,...e.note===void 0?{}:{note:e.note},predicate:e.predicate,sourceMentionId:e.sourceMentionId,targetMentionId:e.targetMentionId}}async function HG(t){await new Promise((e,r)=>{t.end(n=>{if(n!=null){r(n);return}e()})})}var jG,GG,BG,zp=d(()=>{"use strict";jG=U.object({id:U.string().min(1),chapterId:U.number().int(),sentenceIndex:U.number().int().nonnegative().optional(),rangeStart:U.number().int().nonnegative(),rangeEnd:U.number().int().nonnegative(),surface:U.string().min(1),qid:U.string().regex(/^Q[1-9][0-9]*$/),confidence:U.number().min(0).max(1).optional(),note:U.string().optional()}),GG=U.tuple([U.number().int().nonnegative(),U.number().int().nonnegative()]).readonly(),BG=U.object({id:U.string().min(1),sourceMentionId:U.string().min(1),targetMentionId:U.string().min(1),predicate:U.string().min(1),evidenceSentenceIds:U.array(GG).min(1),confidence:U.number().min(0).max(1).optional(),note:U.string().optional()})});import{mkdir as qG,rm as $G}from"fs/promises";import{join as id}from"path";async function ad(t,e){let r=id(e.workspacePath,"knowledge-graph",`chapter-${t}`),n=id(r,"mentions.jsonl"),i=id(r,"mention-links.jsonl"),a=id(r,"wikg-objects.jsonl"),o=e.parameter??{language:"zh",prompt:""};await $G(r,{force:!0,recursive:!0}),await qG(r,{recursive:!0});let s=await LR(e.mentions,Kp),c=await LR(e.mentionLinks,Jp);return await xr(a,Bp({chapterId:t,mentionLinks:c,mentions:s,parameter:o})),await $p(n,s,Kp),await $p(i,c,Jp),{chapterId:t,mentionLinksPath:i,mentionsPath:n,objectsPath:a,parameter:o,workspacePath:r}}async function LR(t,e){let r=[];for await(let n of t)r.push(e(n));return r}var Qp=d(()=>{"use strict";Ve();Un();zp()});async function od(t,e){let r=await Up(e.chapterId,Bn(e.objectsPath)),n=r.mentions,i=r.mentionLinks,a=r.parameter??e.parameter;PR(e.chapterId,{mentionLinks:i,mentions:n}),await t.openSession(async o=>{if(await o.serials.ensure(e.chapterId),(await o.mentionLinks.listByChapter(e.chapterId)).length>0&&i.length===0)throw new Error(`Refusing to replace chapter ${e.chapterId} knowledge graph with an artifact that contains no mention links.`);await o.mentionLinks.deleteByChapter(e.chapterId),await o.mentions.deleteByChapter(e.chapterId),await o.mentions.saveMany(n),await o.mentionLinks.saveMany(i);let c=await o.graphBuildParameters.save(a);await o.serials.setKnowledgeGraphReady(e.chapterId,!0,c.hash)})}var OR=d(()=>{"use strict";Un();zp()});function Xp(t){return t.qidOptions.reduce((e,r)=>e+NR(r),0)}function NR(t){return t.disambiguation===void 0?1:DR(t).length}function Kn(t){return[...new Set(t.qidOptions.flatMap(e=>DR(e)))]}function sd(t,e){return{...t,qidOptions:t.qidOptions.flatMap(r=>{let n=KG(r,e);return n===void 0?[]:[n]})}}function KG(t,e){if(t.disambiguation===void 0)return e.has(t.qid)?t:void 0;let n=(t.disambiguation.profile?.meanings??[]).length>0,i=n?t.disambiguation.linkedQids:t.disambiguation.linkedQids.filter(s=>e.has(s.qid)),a=JG(t.disambiguation.profile,e),o=(a?.meanings.length??0)>0;if(!(n&&!o)&&!(i.length===0&&!o))return{...t,disambiguation:{...t.disambiguation,linkedQids:i,...a===void 0?{}:{profile:a}}}}function JG(t,e){if(t!==void 0)return{...t,meanings:t.meanings.filter(r=>e.has(r.qid))}}function DR(t){if(t.disambiguation===void 0)return[t.qid];let e=t.disambiguation.profile?.meanings.map(r=>r.qid)??[];return e.length>0?[...new Set(e)]:[...new Set(t.disambiguation.linkedQids.map(r=>r.qid))]}var eo=d(()=>{"use strict"});import{z as yt}from"zod";async function cd(t){try{return await z({messages:a0(t),parse:e=>Vp(t.candidates,VG(e),t.window.groups),request:t.request,responseIntentClassifierPrompt:ee,schema:XG,...t.maxRetries===void 0?{}:{maxRetries:t.maxRetries}})}catch(e){return{continuations:[],fallback:{issues:[p0(e)],reason:"guaranteed_json_failed"},mentions:[],policyUpdates:[]}}}function VG(t){return{groups:t.groups.map(e=>({decisions:e.decisions.map(r=>({candidateId:r.candidateId,decision:r.decision,...YG(r.qid)})),groupId:e.groupId}))}}function YG(t){let e=t?.trim();return e===void 0||e===""?{}:{qid:e}}function Vp(t,e,r=WR(t)){let n=Yp(t,e,r);if(n.length>0)throw new O(n);let i=Zp(t),a=[],o=[],s=[];for(let c of e.groups){let u=[];for(let l of c.decisions){let m=i.get(l.candidateId);if(l.decision==="continue"){if(m.hasMoreOptions!==!0){s.push({candidateId:m.id,decision:"skip_this_time",surface:m.surface});continue}u.push(m.id);continue}if(l.decision==="recall"){o.push({candidateId:m.id,qid:l.qid,range:m.range,surface:m.surface});continue}s.push({candidateId:m.id,decision:l.decision,...l.qid===void 0?{}:{qid:l.qid},surface:m.surface})}u.length>0&&a.push({candidateIds:u,groupId:c.groupId})}return{continuations:a,mentions:o,policyUpdates:s}}function Yp(t,e,r=WR(t)){let n=[],i=Zp(t),a=i0(r),o=new Set,s=new Set,c=[];for(let u of e.groups){let l=a.get(u.groupId);if(l===void 0){n.push(`Unknown groupId "${u.groupId}". Use exactly these group IDs: ${[...a.keys()].join(", ")}.`);continue}if(o.has(u.groupId)){n.push(`Duplicate group result for ${u.groupId}.`);continue}o.add(u.groupId);for(let m of u.decisions){let p=i.get(m.candidateId);if(p===void 0){n.push(`Unknown candidateId "${m.candidateId}". Use only one of: ${[...i.keys()].join(", ")}.`);continue}if(!l.has(m.candidateId)){n.push(`Candidate ${m.candidateId} does not belong to group ${u.groupId}. Use only candidates from that group: ${[...l].join(", ")}.`);continue}if(s.has(m.candidateId)){n.push(`Duplicate decision for candidate ${m.candidateId}. Return exactly one decision per candidate at most.`);continue}if(s.add(m.candidateId),m.decision==="recall"){ZG(n,p,m),c.push({candidate:p,decision:m});continue}if(m.decision==="continue"){m.qid!==void 0&&n.push(`Candidate ${p.id} uses decision "continue" but includes qid. Continue means this candidate page has no final choice yet.`);continue}m.qid!==void 0&&n.push(`Candidate ${p.id} uses decision "${m.decision}" but includes qid. Include qid only when decision is "recall".`)}}for(let u of a.keys())o.has(u)||n.push(`Missing group result for ${u}. Return exactly one result for every input group; use decisions: [] when nothing should be recalled.`);for(let u=0;u<c.length;u+=1)for(let l=u+1;l<c.length;l+=1){let m=c[u],p=c[l];n0(m.candidate.range,p.candidate.range)&&n.push(`Decision conflict: candidates ${m.candidate.id} and ${p.candidate.id} both use decision "recall", but their ranges overlap.
|
|
2018
|
+
- ${m.candidate.id}: "${m.candidate.surface}" [${m.candidate.range.start}, ${m.candidate.range.end})
|
|
2019
|
+
- ${p.candidate.id}: "${p.candidate.surface}" [${p.candidate.range.start}, ${p.candidate.range.end})
|
|
2020
|
+
Only one recalled mention may occupy an overlapping text range. Choose the most specific valid mention, or mark the others as skip_this_time / never_recall.`)}return n}function ZG(t,e,r){if(r.qid===void 0){t.push(`Candidate ${e.id} uses decision "recall" but does not provide qid. A recalled mention must choose one concrete QID from the candidate options.`);return}if(t0(e,r.qid)){t.push(`Candidate ${e.id} selected source disambiguation QID ${r.qid}. Source disambiguation QIDs are hidden behind DIS references and cannot be final mention groundings. Choose a QID from entityOptions or disambiguationOptions.meanings instead.`);return}e0(e,r.qid)||t.push(r0(e,r.qid))}function e0(t,e){return MR(t).includes(e)}function t0(t,e){return t.qidOptions.some(r=>r.disambiguation!==void 0&&r.qid===e)}function MR(t){return Kn(t)}function r0(t,e){return`Candidate ${t.id} selected qid ${e}, but that QID is not available for this candidate. Allowed QIDs for "${t.surface}" are: ${MR(t).join(", ")}.`}function n0(t,e){return t.start<e.end&&e.start<t.end}function Zp(t){return new Map(t.map(e=>[e.id,e]))}function i0(t){return new Map(t.map(e=>[e.id,new Set(e.candidateIds)]))}function WR(t){return t.length===0?[]:[{candidateIds:t.map(e=>e.id),id:"g1",range:{end:Math.max(...t.map(e=>e.range.end)),start:Math.min(...t.map(e=>e.range.start))}}]}function a0(t){return[{role:"system",content:o0(t)},{role:"user",content:s0(t)}]}function o0(t){return["You judge which precomputed Wikidata mention candidates should be recalled.","","Recall policy:",t.policyPrompt,"","Rules:","- Return JSON only.","- Return exactly one group result for every input group.","- Use decisions: [] only when this group has no selected mention and no policy update.","- First judge whether each candidate mention is worth recalling in this exact tagged context, before choosing among QID candidates.",'- If the mention is not worth recalling in context, use "never_recall" immediately; do not inspect later pages just because more QIDs might exist.','- Use "never_recall" when this exact candidate span is not a standalone knowledge graph object in context.',"- Candidate lists may be incomplete when a candidate has more pages.",'- Use decision "continue" only after the mention has passed the context-worthiness test and the current candidate page has no good QID but more pages are available.','- "continue" is not a rejection. It asks to inspect the next candidate page for that candidate.','- If a surface should be recalled but the current incomplete page lacks a suitable QID, use "continue" instead of skip_this_time.','- Do not use "continue" for single-character surnames, abbreviations, side labels, generic words, fragments, roles, quantities, attributes, or discourse words that are not useful standalone knowledge graph objects in context.',"- Do not invent candidates, ranges, surfaces, or QIDs.","- A recalled mention must choose a QID from entityOptions or disambiguationOptions.meanings.",'- Include qid only when decision is "recall"; do not include qid for continue, skip_this_time, or never_recall.',"- Never return DIS identifiers as qid values; DIS identifiers are only disambiguation references.","- Overlapping recalled ranges are illegal; choose the most specific valid mention."].join(`
|
|
2021
|
+
`)}function s0(t){return["Tagged context:",c0(t),"","Candidate groups:",d0(t).map(e=>JSON.stringify(e)).join(`
|
|
2022
|
+
`),"","Return this JSON shape:",JSON.stringify({groups:[{decisions:[{candidateId:"candidate id from this group",decision:"recall | continue | skip_this_time | never_recall",qid:"required only when decision is recall"}],groupId:"group id from the input"}]})].join(`
|
|
2023
|
+
`)}function c0(t){let e=[...t.window.groups].sort((i,a)=>i.range.start-a.range.start),r=[],n=t.window.baseOffset;for(let i of e)r.push(t.window.text.slice(n-t.window.baseOffset,i.range.start-t.window.baseOffset)),r.push(`<group id="${m0(i.id)}">${FR(t.window.text.slice(i.range.start-t.window.baseOffset,i.range.end-t.window.baseOffset))}</group>`),n=i.range.end;return r.push(t.window.text.slice(n-t.window.baseOffset)),r.join("")}function d0(t){let e=Zp(t.window.candidates);return t.window.groups.map(r=>({candidates:r.candidateIds.flatMap(n=>{let i=e.get(n);return i===void 0?[]:[eh(i)]}),groupId:r.id}))}function eh(t,e){let r=u0(t.qidOptions);return{candidateId:t.id,...t.hasMoreOptions===!0?{hasMoreOptions:!0}:{},...r.disambiguationOptions.length===0?{}:{disambiguationOptions:r.disambiguationOptions},...r.entityOptions.length===0?{}:{entityOptions:r.entityOptions}}}function u0(t){let e=[],r=[];for(let n of t){if(n.disambiguation!==void 0){let i=n.disambiguation.profile?.meanings??[];e.push({...n.label===void 0?{}:{label:n.label},meanings:i.length>0?i.map(l0):n.disambiguation.linkedQids.map(a=>({name:a.title,qid:a.qid}))});continue}r.push({...n.description===void 0?{}:{description:n.description},...n.label===void 0?{}:{label:n.label},qid:n.qid})}return{disambiguationOptions:e,entityOptions:r}}function l0(t){return{...t.information===""?{}:{information:t.information},name:t.name,qid:t.qid}}function m0(t){return FR(t).replaceAll('"',""")}function FR(t){return t.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">")}function p0(t){if(t instanceof O)return t.issues.join(`
|
|
2024
|
+
`);if(t instanceof Error){let e=t.issues;return Array.isArray(e)&&e.every(r=>typeof r=="string")?e.join(`
|
|
2025
|
+
`):t.message}return String(t)}var zG,QG,XG,th=d(()=>{"use strict";Ie();eo();zG=yt.object({candidateId:yt.string().min(1),decision:yt.enum(["continue","recall","skip_this_time","never_recall"]),qid:yt.string().nullable().optional()}).strict(),QG=yt.object({decisions:yt.array(zG),groupId:yt.string().min(1)}).strict(),XG=yt.object({groups:yt.array(QG)}).strict()});import{z as to}from"zod";var f0,kde,jR=d(()=>{"use strict";Ie();eo();th();f0=to.object({decision:to.enum(["keep","reject"]),qid:to.string().regex(/^Q[1-9][0-9]*$/)}).strict(),kde=to.object({qids:to.array(f0)}).strict()});async function nh(t,e={}){if(t.length===0)return[];if(e.resolver!==void 0)return rh(t,await e.resolver.resolveQids(GR(t)));let r=await fr.open({...e.resolverOptions??{},...e.progress===void 0?{}:{progress:e.progress}});try{return rh(t,await r.resolveQids(GR(t)))}finally{await r.close()}}function rh(t,e){let r=new Map(e.map(n=>[n.qid,n]));return t.map(n=>({...n,qidOptions:n.qidOptions.map(i=>y0(i,r.get(i.qid)))}))}function y0(t,e){return e===void 0?t:{...t,...e.description===void 0?{}:{description:e.description},...e.disambiguation===void 0?{}:{disambiguation:e.disambiguation},isDisambiguation:e.isDisambiguation,...e.label===void 0?{}:{label:e.label}}}function GR(t){return[...new Set(t.flatMap(e=>e.qidOptions.map(r=>r.qid)))]}var BR=d(()=>{"use strict";la()});import{z as ro}from"zod";async function ih(t){if(t.suspiciousSurfaces.length===0)return{protectedSurfaces:[]};try{return await z({messages:w0(t),parse:e=>UR(t.suspiciousSurfaces,S0(e)),request:t.request,responseIntentClassifierPrompt:ee,schema:b0,...t.maxRetries===void 0?{}:{maxRetries:t.maxRetries}})}catch(e){return{fallback:{issues:[I0(e)],reason:"guaranteed_json_failed"},protectedSurfaces:[]}}}function S0(t){return{protectedSurfaces:t.protectedSurfaces.map(e=>({...e.note===void 0?{}:{note:e.note},surfaceId:e.surfaceId}))}}function UR(t,e){let r=HR(t,e);if(r.length>0)throw new O(r);let n=qR(t),i=[];for(let a of e.protectedSurfaces){let o=n.get(a.surfaceId);i.push({...a.note===void 0?{}:{note:a.note},surfaceId:a.surfaceId,text:o.text})}return{protectedSurfaces:i}}function HR(t,e){let r=[],n=qR(t),i=new Set;for(let a of e.protectedSurfaces){if(!n.has(a.surfaceId)){r.push(`Unknown surfaceId "${a.surfaceId}". Use only these surface IDs: ${[...n.keys()].join(", ")}.`);continue}if(i.has(a.surfaceId)){r.push(`Duplicate protected surface ${a.surfaceId}.`);continue}i.add(a.surfaceId)}return r}function w0(t){return[{role:"system",content:E0(t)},{role:"user",content:k0(t)}]}function E0(t){return["You protect useful high-frequency surface strings before Wikidata grounding.","","The input surfaces are suspicious only because they are frequent after range suppression.","Most high-frequency function words, fragments, punctuation, generic words, and discourse words should NOT be protected.","A surface that is not protected will be removed before grounding.","","User recall policy:",t.policyPrompt,"","Protect a surface only when it is likely to be a meaningful entity, named concept, named event, place, person, organization, work, or domain term under the policy.","","Rules:","- Return JSON only.","- Return only protected surface IDs.","- Do not return a result for every input surface.","- Do not protect generic grammar words merely because they appear often.","- Do not infer or choose Wikidata QIDs in this stage."].join(`
|
|
2026
|
+
`)}function k0(t){return["Suspicious high-frequency surfaces:",JSON.stringify(t.suspiciousSurfaces.map(e=>({count:e.count,surfaceId:e.id,text:e.text})),null,2),"","Return this JSON shape:",JSON.stringify({protectedSurfaces:[{note:"optional, <= 12 Chinese chars or 6 English words",surfaceId:"surface id from the input"}]},null,2)].join(`
|
|
2027
|
+
`)}function qR(t){return new Map(t.map(e=>[e.id,e]))}function I0(t){if(t instanceof O)return t.issues.join(`
|
|
2028
|
+
`);if(t instanceof Error){let e=t.issues;return Array.isArray(e)&&e.every(r=>typeof r=="string")?e.join(`
|
|
2029
|
+
`):t.message}return String(t)}var g0,b0,$R=d(()=>{"use strict";Ie();g0=ro.object({note:ro.string().max(24).optional(),surfaceId:ro.string().min(1)}).strict(),b0=ro.object({protectedSurfaces:ro.array(g0)}).strict()});function ah(t){let e=[...t].filter(n=>n.range.start<n.range.end).sort(x0),r=[];for(let n of e)r.some(i=>v0(i,n))||r.push(n);return r.sort(R0)}function x0(t,e){return t.range.start-e.range.start||e.range.end-t.range.end||Jn(e)-Jn(t)}function R0(t,e){return t.range.start-e.range.start||t.range.end-e.range.end||Jn(t)-Jn(e)}function v0(t,e){return t.range.start<=e.range.start&&e.range.end<=t.range.end&&Jn(t)>Jn(e)}function Jn(t){return t.range.end-t.range.start}var oh=d(()=>{"use strict"});function sh(t){let e=ah(t.candidates),r=T0(e,t.text),n=_0(r,t.percentile),i=new Set(n.map(a=>a.text));return{candidates:e.filter(a=>!i.has(t.text.slice(a.range.start,a.range.end))),suppressedCandidates:e,suspiciousSurfaces:n}}function T0(t,e){let r=new Map;for(let n of t){let i=e.slice(n.range.start,n.range.end);r.set(i,(r.get(i)??0)+1)}return[...r.entries()].map(([n,i],a)=>({count:i,id:`s${a+1}`,text:n})).sort(C0)}function _0(t,e){if(t.length===0||e<=0)return[];let r=Math.ceil(t.length*Math.min(1,e));return t.slice(0,r)}function C0(t,e){return e.count-t.count||t.text.localeCompare(e.text)||t.id.localeCompare(e.id)}var KR=d(()=>{"use strict";oh()});import{spawn as P0}from"child_process";async function uh(t){let e=[],r=1;for(let n of t.sentences){for(let i of await A0(n,t)){let a=n.text.slice(i.start,i.end);e.push({id:`c${r}`,qidOptions:i.qids.map(j0),range:{end:n.range.start+i.end,start:n.range.start+i.start},surface:a}),r+=1}await t.onProgress?.({coveredRangeEnd:n.range.end})}return e}async function A0(t,e){return G0(e)==="fetch"?await D0(e,t):await O0(e.command??"wikispine",N0(e),t,e)}async function O0(t,e,r,n){return await new Promise((i,a)=>{let o=P0(t,e,{stdio:["pipe","pipe","pipe"]}),s=JR(n.onProgress,{onFailure:l=>{a(l),o.kill()}}),c=zR({onMatch:l=>{s.report({coveredRangeEnd:r.range.start+l.end})}}),u=[];o.stdout.setEncoding("utf8"),o.stdout.on("data",l=>{try{c.push(l)}catch(m){a(ch(m)),o.kill()}}),o.stderr.on("data",l=>{u.push(l)}),o.on("error",l=>{a(new Error(no(`Failed to start wikispine command: ${l.message}`)))}),o.on("close",l=>{if(l!==0){a(new Error(no(`wikispine match failed with exit code ${l}: ${Buffer.concat(u).toString("utf8")}`)));return}(async()=>{try{let m=c.finish();await s.wait(),i(m)}catch(m){a(ch(m))}})()}),o.stdin.end(r.text)})}function N0(t){let e=["match"];return t.dataDir!==void 0&&e.push("--data-dir",t.dataDir),t.includeDisambiguation===!1&&e.push("--exclude-disambiguation"),t.maxCandidatesPerSurface!==void 0&&e.push("--max-candidates-per-surface",String(t.maxCandidatesPerSurface)),e}async function D0(t,e){let r=B0(t.endpoint),n=await(t.fetch??fetch)(`${r}/match`,{body:JSON.stringify({options:{...t.includeDisambiguation===void 0?{}:{include_disambiguation:t.includeDisambiguation},...t.maxCandidatesPerSurface===void 0?{}:{max_candidates_per_surface:t.maxCandidatesPerSurface}},text:e.text}),headers:{accept:"application/x-ndjson","content-type":"application/json"},method:"POST"});if(!n.ok)throw new Error(no(`WikiSpine fetch provider failed with HTTP ${n.status}: ${await n.text()}`));let i=JR(t.onProgress),a=zR({onMatch:u=>{i.report({coveredRangeEnd:e.range.start+u.end})}});if(n.body===null){a.push(await n.text());let u=a.finish();return await i.wait(),u}let o=n.body.getReader(),s=new TextDecoder;for(;;){let{done:u,value:l}=await o.read();if(u)break;a.push(s.decode(l,{stream:!0})),i.throwIfFailed()}a.push(s.decode());let c=a.finish();return await i.wait(),c}function JR(t,e){let r=[],n;function i(a){n===void 0&&(n=ch(a),e?.onFailure?.(n))}return{report:a=>{if(!(t===void 0||n!==void 0))try{r.push(Promise.resolve(t(a)).catch(i))}catch(o){i(o)}},throwIfFailed:()=>{if(n!==void 0)throw n},wait:async()=>{if(await Promise.all(r),n!==void 0)throw n}}}function zR(t){let e=[],r="";function n(a){if(a.trim()==="")return;let o=M0(JSON.parse(a));o.type==="match"&&(e.push(o.match),t?.onMatch?.(o.match))}function i(a){return new Error(no(`Invalid WikiSpine match response: ${a instanceof Error?a.message:String(a)}`))}return{finish:()=>{try{return n(r),r="",e}catch(a){throw i(a)}},push:a=>{try{r+=a;let o=r.split(/\r?\n/u);r=o.pop()??"";for(let s of o)n(s)}catch(o){throw i(o)}}}}function M0(t){if(typeof t!="object"||t===null)throw new Error("Expected wikispine event to be an object.");let e=t;if(e.type==="done")return{type:"done"};if(e.type==="match"&&W0(e.match))return{match:e.match,type:"match"};throw new Error(`Unexpected wikispine event: ${JSON.stringify(t)}`)}function ch(t){return t instanceof Error?t:new Error(String(t))}function W0(t){if(typeof t!="object"||t===null)return!1;let e=t;return typeof e.end=="number"&&Array.isArray(e.qids)&&e.qids.every(F0)&&typeof e.start=="number"&&typeof e.surface_id=="number"}function F0(t){if(typeof t!="object"||t===null)return!1;let e=t;return(!("disambiguation"in e)||typeof e.disambiguation=="boolean")&&typeof e.qid=="string"&&/^Q[1-9]\d*$/u.test(e.qid)}function j0(t){return{isDisambiguation:t.disambiguation===!0,qid:t.qid}}function G0(t){return t.provider??"cli"}function B0(t){let e=(t??dh).trim().replace(/\/+$/u,"");if(e==="")throw new Error(no("WikiSpine fetch provider has no default endpoint."));return e}function no(t){return`${t}
|
|
2030
|
+
WikiSpine setup guide: ${L0}`}var L0,dh,QR=d(()=>{"use strict";L0="https://raw.githubusercontent.com/oomol-lab/wiki-graph/refs/heads/main/docs/wikispine-runtime.md",dh="https://wikispi-service-cxbfjlteab.cn-hangzhou.fcapp.run"});function XR(t){let e=new Intl.Segmenter(void 0,{granularity:"word"}),r=new Intl.Segmenter(void 0,{granularity:"grapheme"}),n=[];for(let i of e.segment(t))"isWordLike"in i&&i.isWordLike&&n.push({end:i.index+i.segment.length,start:i.index});return n.length>0?n:[...r.segment(t)].filter(i=>i.segment.trim()!=="").map(i=>({end:i.index+i.segment.length,start:i.index}))}function lh(t){let e=XR(t.text);if(e.length===0)return{end:t.text.length,start:0};let r=U0(e,t.rangeStart),n=H0(e,t.rangeEnd),i=Math.max(0,Math.floor(t.words/2)),a=Math.max(0,r-i),o=Math.min(e.length-1,n+i);return{end:e[o]?.end??t.text.length,start:e[a]?.start??0}}function U0(t,e){let r=t.findIndex(n=>n.end>e);return r===-1?t.length-1:r}function H0(t,e){for(let r=t.length-1;r>=0;r-=1){let n=t[r];if(n!==void 0&&n.start<e)return r}return 0}var mh=d(()=>{"use strict"});function dd(t){let e=$0(K0(t.candidates??[])),r=[],n=[],i=0;for(let a of e){let o=q0(a);n.length>0&&i+o>t.optionBudget&&(r.push(VR(t.text,n,t)),n=[],i=0),n.push(a),i+=o}return n.length>0&&r.push(VR(t.text,n,t)),r}function q0(t){return t.candidates.reduce((e,r)=>e+Xp(r),0)}function VR(t,e,r){let n=Math.min(...e.map(o=>o.range.start)),i=Math.max(...e.map(o=>o.range.end)),a=lh({rangeEnd:i,rangeStart:n,text:t,words:r.contextWords});return{baseOffset:a.start,candidates:e.flatMap(o=>o.candidates),groups:e.map((o,s)=>({candidateIds:o.candidates.map(c=>c.id),id:`g${s+1}`,range:o.range})),text:t.slice(a.start,a.end)}}function $0(t){let e=[],r;for(let n of t){if(r===void 0||n.range.start>=r.range.end){r={candidates:[n],range:n.range},e.push(r);continue}r={candidates:[...r.candidates,n],range:{end:Math.max(r.range.end,n.range.end),start:Math.min(r.range.start,n.range.start)}},e[e.length-1]=r}return e}function K0(t){return t.filter(e=>e.range.start<e.range.end).sort(J0)}function J0(t,e){return t.range.start-e.range.start||e.range.end-t.range.end||t.id.localeCompare(e.id)}var YR=d(()=>{"use strict";mh();eo()});var vr=d(()=>{"use strict";th();jR();eo();BR();$R();KR();oh();QR();YR();mh()});var ud=d(()=>{"use strict"});async function ev(t){if(t.candidates.length===0)return[];let e=sh({candidates:t.candidates,percentile:.1,text:t.text});await t.progressTracker?.updatePhase({done:0,phase:"screening",phaseDetail:`${e.suspiciousSurfaces.length} high-frequency surfaces`,total:1,unit:"window"}),await t.progressTracker?.throwIfStopped();let r=await ih({policyPrompt:t.policyPrompt,request:t.request,suspiciousSurfaces:e.suspiciousSurfaces});await t.progressTracker?.throwIfStopped();let n=new Set(r.protectedSurfaces.map(a=>a.text)),i=new Set(e.candidates.map(ZR));return await t.progressTracker?.updatePhase({done:1,phase:"screening",phaseDetail:`${n.size} protected surfaces`,total:1,unit:"window"}),e.suppressedCandidates.filter(a=>i.has(ZR(a))||n.has(a.surface))}function tv(t){return new Set(t.flatMap(e=>e.qidOptions.map(r=>r.qid))).size}function ZR(t){return`${t.range.start}\0${t.range.end}\0${t.surface}`}var rv=d(()=>{"use strict";vr();ud()});async function nv(t,e){let r=t.getSerialFragments(e);return await Promise.all((await r.listFragmentIds()).map(async n=>await r.getFragment(n)))}function iv(t){return t.flatMap(e=>e.sentences.map(r=>r.text)).join(" ")}function av(t){let e=[],r=0;for(let n of t)for(let i=0;i<n.sentences.length;i+=1){let a=n.sentences[i];e.push({id:`${n.serialId}:${n.fragmentId+i}`,range:{end:r+a.text.length,start:r},text:a.text}),r+=a.text.length+1}return e}var ph=d(()=>{"use strict"});function cv(t){let e=new Map(t.map(c=>[c.id,c])),r=new Map(t.map(c=>[c.id,new Set])),n=new Map(t.map(c=>[c.id,0])),i=new Set,a=new Map,o=new Map,s={candidatePageCount:0,qidAppearanceCount:0};return{accept(c){i.add(c.candidateId),io(o,c.surface).recallCount+=1,a.set(ao(c.surface,c.qid),(a.get(ao(c.surface,c.qid))??0)+1)},close(c,u){i.add(c);let l=e.get(c);l!==void 0&&(u==="skip_this_time"||u==="never_recall")&&(io(o,l.surface).rejectCount+=1)},continue(c){let u=e.get(c);u!==void 0&&(io(o,u.surface).continueCount+=1)},getStats(){return{...s}},nextPage(c){let u=[],l=c===void 0?t.map(m=>m.id):[...c];for(let m of l){if(i.has(m))continue;let p=e.get(m),h=r.get(m);if(p===void 0||h===void 0)continue;let g=eB(p,a),f=Kn(g),E=n.get(m)??0,v=Y0(io(o,p.surface),E),I=f.filter(_=>!h.has(_)).slice(0,v);if(I.length===0){i.add(m);continue}for(let _ of I)h.add(_);let q=f.some(_=>!h.has(_)),F=sd(g,new Set(I));q||i.add(m),io(o,p.surface).seenCount+=1,n.set(m,E+1),s.candidatePageCount+=1,s.qidAppearanceCount+=I.length,u.push({...F,...q?{hasMoreOptions:!0}:{}})}return u}}}function io(t,e){let r=t.get(e);if(r!==void 0)return r;let n={continueCount:0,recallCount:0,rejectCount:0,seenCount:0};return t.set(e,n),n}function Y0(t,e){let r=Z0(t)?V0:X0;return r[Math.min(e,r.length-1)]}function Z0(t){return t.seenCount<ov?!1:t.recallCount>=2&&t.continueCount===0||t.rejectCount>=2&&t.recallCount===0||t.continueCount>=ov}function dv(t,e){return`efficiency qid/mention=${e===0?"n/a":(t.qidAppearanceCount/e).toFixed(1)} qids=${t.qidAppearanceCount} mentions=${e} pages=${t.candidatePageCount}`}function eB(t,e){return{...t,qidOptions:[...t.qidOptions].sort((r,n)=>sv(t.surface,n,e)-sv(t.surface,r,e))}}function sv(t,e,r){let n=r.get(ao(t,e.qid))??0,i=e.disambiguation?.linkedQids.reduce((o,s)=>o+(r.get(ao(t,s.qid))??0),0)??0,a=e.disambiguation?.profile?.meanings.reduce((o,s)=>o+(r.get(ao(t,s.qid))??0),0)??0;return n+i+a}function ao(t,e){return`${t}\0${e}`}var X0,V0,ov,uv=d(()=>{"use strict";vr();X0=[5,10,20,35],V0=[3,5,10,20,35],ov=3});async function ld(t,e,r){let n=t.lazy;if(n!==void 0)return await Promise.all(e.map(async a=>await n(async o=>await r(a,o))));let i=[];for(let a of e)i.push(await r(a,t));return i}var hh=d(()=>{"use strict"});async function md(t){let e=[],r=cv(t.candidates),n=0,i=0,a=r.nextPage();for(;a.length>0;){let o=dd({candidates:a,contextWords:220,optionBudget:50,text:t.text});if(i+=o.length,o.length===0)break;await t.progressTracker?.updatePhase({done:n,phase:"grounding",total:i,unit:"window"});let s=await ld(t.request,o,async(u,l)=>{try{return await t.progressTracker?.throwIfStopped(),await cd({candidates:u.candidates,policyPrompt:t.policyPrompt,request:l,window:u})}finally{n+=1,await t.progressTracker?.updatePhase({done:n,phase:"grounding",total:i,unit:"window"})}}),c=new Set;for(let u of s){for(let l of u.mentions)e.push(l),r.accept(l);for(let l of u.policyUpdates)r.close(l.candidateId,l.decision);for(let l of u.continuations)for(let m of l.candidateIds)c.add(m),r.continue(m)}a=r.nextPage(c)}return await t.progressTracker?.updatePhase({done:n,phase:"grounding",phaseDetail:dv(r.getStats(),e.length),total:i,unit:"window"}),e}var fh=d(()=>{"use strict";vr();ud();uv();hh()});async function lv(t){let e=[],r=nB(t.fragments),n=await md({candidates:t.candidates,policyPrompt:t.policyPrompt,...t.progressTracker===void 0?{}:{progressTracker:t.progressTracker},request:t.request,text:t.text}),i=1;for(let a of n){let o=iB(r,a.range.start);e.push(rB(t.chapterId,a,o,i)),i+=1}return e}function rB(t,e,r,n){return{chapterId:t,...e.confidence===void 0?{}:{confidence:e.confidence},id:`m${t}-${n}`,...e.note===void 0?{}:{note:e.note},qid:e.qid,rangeEnd:r.rangeStart+e.surface.length,rangeStart:r.rangeStart,sentenceIndex:r.sentenceIndex,surface:e.surface}}function nB(t){let e=[],r=0;for(let n of t)for(let i=0;i<n.sentences.length;i+=1){let a=n.sentences[i].text.length;e.push({absoluteStart:r,length:a,sentenceIndex:n.fragmentId+i}),r+=a+1}return e}function iB(t,e){for(let r of t){let n=r.absoluteStart+r.length;if(e>=r.absoluteStart&&e<n)return{rangeStart:e-r.absoluteStart,sentenceIndex:r.sentenceIndex}}throw new Error(`Mention offset ${e} is outside chapter text.`)}var mv=d(()=>{"use strict";fh()});function pv(t){return{language:Lr(t.resolverOptions?.language)??"zh",prompt:t.policyPrompt}}var hv=d(()=>{"use strict";Ve()});function pd(t){return async e=>{await t.throwIfStopped();let r=aB(e);await t.updatePhase({done:e.done,...r.detail===void 0?{}:{phaseDetail:r.detail},phase:"enrichment",total:e.total,unit:r.unit})}}function aB(t){switch(t.detail){case"disambiguation-page":return{detail:"disambiguation",unit:"page"};case"entity":return{detail:"entity",unit:"record"};case"linked-page":return{detail:"linked",unit:"page"};case"page":return{detail:"page",unit:"page"};case"qid":return{unit:"qid"}}}var yh=d(()=>{"use strict"});var fv=d(()=>{"use strict";Um();Tn();rc()});import{z as W}from"zod";async function gh(t){if(t.window.mentions.length<2)return[];try{return await z({messages:hB(t),parse:e=>mB(t,e),request:t.request,responseIntentClassifierPrompt:ee,schema:dB,...t.maxRetries===void 0?{}:{maxRetries:t.maxRetries}})}catch{return[]}}function mB(t,e){let r=new Map(t.window.mentions.map(m=>[m.id,m])),n=new jt(t.sentences.map((m,p)=>({sentenceId:[t.chapterId,(t.fragmentId??0)+p],text:m.text,wordsCount:m.wordsCount}))),i=Sv(t.sentences),a=n.sentences.flatMap((m,p)=>{let h=i[p];return h===void 0||!bv(h,t.window.range)?[]:[{id:`S${p+1}`,sentenceId:m.sentenceId,text:m.projectedText}]}),o=[],s=[],c=new Set,u=a.map(m=>m.sentenceId),l=a.map(m=>m.text);for(let[m,p]of e.relations.entries()){let h=`relations[${m}]`,g=r.get(p.sourceMentionId),f=r.get(p.targetMentionId);if(g===void 0){o.push(`${h}.sourceMentionId references an unknown mention.`);continue}if(f===void 0){o.push(`${h}.targetMentionId references an unknown mention.`);continue}if(g.id===f.id){o.push(`${h} links a mention to itself. Use two different tagged mention IDs, or remove the relation if the other endpoint is not tagged.`);continue}let E=IB(p.predicate);if(E===""){o.push(`${h}.predicate normalizes to an empty label.`);continue}if(E==="mentions"){o.push(`${h}.predicate must be semantic; "mentions" is not a relation predicate.`);continue}let[v,I]=SB({evidence:wB(p.evidence),sentences:a}),[q,F]=!Array.isArray(p.evidence)&&v===void 0&&I===void 0?lB.resolve(p.evidence,u,l):[void 0,void 0],_=v??q,bt=I===void 0?F:EB(I);if(_===void 0){o.push(`${h}.evidence could not be resolved: ${bt?.message??"unknown failure"}`);continue}let So=pB(_.sentenceIds);if(So.length===0){o.push(`${h}.evidence resolved to no sentences.`);continue}if(So.some(([Ld,m_])=>Ld!==t.chapterId||i[m_-(t.fragmentId??0)]===void 0)){o.push(`${h}.evidence resolved outside this fragment.`);continue}let Vh=`${g.id}\0${f.id}\0${E}\0${So.map(Ld=>Ld.join(":")).join(",")}`;c.has(Vh)||(c.add(Vh),s.push({...p.confidence===void 0?{}:{confidence:p.confidence},evidenceSentenceIds:So,predicate:E,sourceMentionId:g.id,targetMentionId:f.id}))}if(o.length>0)throw new O(o);return s}function pB(t){let e=new Set,r=[];for(let n of t){let i=n.join(":");e.has(i)||(e.add(i),r.push(n))}return r.sort(([n,i],[a,o])=>n-a||i-o)}function hB(t){return[{content:fB(),role:"system"},{content:yB(t),role:"user"}]}function fB(){return["You discover semantic relations between grounded entity mentions in source text.","","Rules:","- Return JSON only.","- Return only relations that are directly supported by the source text.",'- Every relation must connect two mention IDs from the <mention id="..." qid="..."> tags.',"- A relation is valid only when both endpoints are explicitly tagged mentions in the source context.","- If a supported relation would require a subject or object that is not tagged with a mention ID, skip that relation.","- Do not invent mention IDs, and do not reuse another mention as a placeholder for an untagged endpoint.","- sourceMentionId and targetMentionId must be different mention IDs; never link a mention to itself.","- Do not create a relation just because two mentions are nearby.","- If the text explicitly states both a positive relation and a negated/distinction relation between mentions, return both relations when both are directly supported.","- Prefer the suggested predicates when one fits.","- If none fits, create one short snake_case predicate.","- Never use mentions as a predicate.",yr,"- Source sentences may contain XML-like mention tags. Use those tags for mention IDs, but ignore the tags when copying evidence quote text.","- Do not use offsets or invented paraphrases as evidence.","","Suggested predicates:",uB.join(", ")].join(`
|
|
2031
|
+
`)}function yB(t){return["Source sentences with mention tags:",gB(t),"","Return this JSON shape:",JSON.stringify({relations:[{confidence:.86,evidence:Xs,predicate:"predicate_name",sourceMentionId:"source mention id",targetMentionId:"target mention id"}]},null,2),"","If the source text does not support any semantic relation, return:",JSON.stringify({relations:[]})].join(`
|
|
2032
|
+
`)}function gB(t){let e=Sv(t.sentences),r=t.sentences.flatMap((n,i)=>{let a=e[i];return a===void 0||!bv(a,t.window.range)?[]:[`S${i+1}: ${Ft(bB({mentions:t.window.mentions,sentence:n,sentenceOffset:a}))}`]});return r.length===0?kB(t.window):r.join(`
|
|
2033
|
+
`)}function bB(t){let e=t.mentions.filter(i=>i.range.start>=t.sentenceOffset.start&&i.range.end<=t.sentenceOffset.end).sort((i,a)=>i.range.start-a.range.start),r=[],n=t.sentenceOffset.start;for(let i of e)r.push(Tr(t.sentence.text.slice(n-t.sentenceOffset.start,i.range.start-t.sentenceOffset.start))),r.push(`<mention id="${hd(i.id)}" qid="${hd(i.qid??"")}">${Tr(t.sentence.text.slice(i.range.start-t.sentenceOffset.start,i.range.end-t.sentenceOffset.start))}</mention>`),n=i.range.end;return r.push(Tr(t.sentence.text.slice(n-t.sentenceOffset.start))),r.join("")}function bv(t,e){return t.start<e.end&&e.start<t.end}function SB(t){return t.evidence===void 0?[void 0,void 0]:vn({evidence:t.evidence,sentences:t.sentences})}function wB(t){return Array.isArray(t)?t.map(gv):typeof t.quote=="string"||typeof t.sentence_id=="string"?gv(t):void 0}function gv(t){return{...typeof t.quote=="string"?{quote:t.quote}:{},...typeof t.sentence_id=="string"?{sentence_id:t.sentence_id}:{}}}function EB(t){return{candidates:t.candidates.map(e=>({exactNormalized:e.exactNormalized,exactRaw:e.exactRaw,exactSubstring:e.exactSubstring,index:e.index,nextText:e.nextText,occurrenceId:e.occurrenceId,prevText:e.prevText,score:e.score,sentenceId:e.sentence.sentenceId,text:e.sentence.text})),code:t.code,fieldName:"evidence",message:t.message}}function kB(t){let e=[...t.mentions].sort((i,a)=>i.range.start-a.range.start),r=[],n=t.range.start;for(let i of e)r.push(Tr(t.text.slice(n-t.range.start,i.range.start-t.range.start))),r.push(`<mention id="${hd(i.id)}" qid="${hd(i.qid??"")}">${Tr(t.text.slice(i.range.start-t.range.start,i.range.end-t.range.start))}</mention>`),n=i.range.end;return r.push(Tr(t.text.slice(n-t.range.start))),r.join("")}function Sv(t){let e=[],r=0;for(let n of t){let i=r,a=i+n.text.length;e.push({end:a,start:i}),r=a+1}return e}function IB(t){return t.trim().replace(/[\s-]+/gu,"_").replace(/_+/gu,"_").replace(/^_+|_+$/gu,"").toLowerCase()}function hd(t){return Tr(t).replaceAll('"',""")}function Tr(t){return t.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">")}var yv,oB,sB,cB,dB,uB,lB,wv=d(()=>{"use strict";Ie();Tn();fv();yv=W.object({head:W.string().optional(),mode:W.enum(["full","head_tail"]).optional(),tail:W.string().optional(),text:W.string().optional()}).strict(),oB=W.object({quote:W.string().optional(),sentence_id:W.string().optional()}).strict(),sB=W.union([W.object({end_anchor:W.union([W.string(),yv]).optional(),quote:W.string().optional(),sentence_id:W.string().optional(),start_anchor:W.union([W.string(),yv]).optional()}).strict(),W.array(oB)]),cB=W.object({confidence:W.number().min(0).max(1).optional(),evidence:sB,predicate:W.string().min(1).max(64),sourceMentionId:W.string().min(1),targetMentionId:W.string().min(1)}).strict(),dB=W.object({relations:W.array(cB)}).strict(),uB=["instance_of","subclass_of","part_of","has_part","located_in","contains","member_of","owned_by","creator","author","developer","founded_by","leader","position_held","employer","educated_at","student_of","parent","child","spouse","sibling","relative","replaces","replaced_by","precedes","follows","influenced_by","influences","participant_in","participant","conflict","opposes","allied_with","supports","causes","caused_by","results_in","has_effect","uses","used_by","applies_to","based_on","derived_from","depicts","named_after","has_characteristic","related_to","associated_with","connected_to","corresponds_to","main_subject","about","context_for","described_as","refers_to","concerns","discusses","compares_with","overlaps_with","coexists_with","parallel_to","analogous_to","mentioned_with","points_to","interpreted_as","seen_as","different_from","distinct_from","not_same_as","not_to_be_confused_with","contrasts_with","opposite_of","conflicts_with","contradicts","excludes","incompatible_with","rejects","criticizes","denies","not_reducible_to"],lB=new Wt});function bh(t){RB(t);let e=vB(t.mentions);if(e.length===0||t.text.length===0)return[];let r=t.windowLength-t.maxEvidenceDistance,n=[];for(let i=0;i<t.text.length;i=xB(i,r,t.text.length)){let a=Math.min(i+t.windowLength,t.text.length),o=e.filter(s=>s.range.start>=i&&s.range.end<=a);if(o.length>=2&&n.push({baseOffset:i,mentions:o,range:{end:a,start:i},text:t.text.slice(i,a)}),a>=t.text.length)break}return n}function xB(t,e,r){return Math.min(t+e,r)}function RB(t){if(!Number.isInteger(t.windowLength)||t.windowLength<=0)throw new Error("windowLength must be a positive integer.");if(!Number.isInteger(t.maxEvidenceDistance)||t.maxEvidenceDistance<=0)throw new Error("maxEvidenceDistance must be a positive integer.");if(t.windowLength<=t.maxEvidenceDistance)throw new Error("windowLength must be greater than maxEvidenceDistance so eligible mention pairs are guaranteed to share at least one evidence window.")}function vB(t){return t.filter(e=>e.range.start<e.range.end).sort(TB)}function TB(t,e){return t.range.start-e.range.start||t.range.end-e.range.end||t.id.localeCompare(e.id)}var Ev=d(()=>{"use strict"});var kv=d(()=>{"use strict";wv();Ev()});async function Iv(t){let e=PB(t.fragments,t.mentions),r=0;return await t.progressTracker?.updatePhase({done:0,phase:"relation-discovery",total:e.length,unit:"window"}),(await ld(t.request,e,async(i,a)=>{try{return await t.progressTracker?.throwIfStopped(),await gh({chapterId:i.fragment.serialId,fragmentId:i.fragment.fragmentId,request:a,sentences:i.fragment.sentences,window:i.window})}finally{r+=1,await t.progressTracker?.updatePhase({done:r,phase:"relation-discovery",total:e.length,unit:"window"})}})).flat().map((i,a)=>({...i.confidence===void 0?{}:{confidence:i.confidence},evidenceSentenceIds:i.evidenceSentenceIds,id:`l${t.fragments[0]?.serialId??0}-${a+1}`,predicate:i.predicate,sourceMentionId:i.sourceMentionId,targetMentionId:i.targetMentionId}))}function PB(t,e){return t.flatMap(r=>{let n=r.fragmentId,i=n+r.sentences.length-1,a=LB(r.sentences,e.filter(s=>s.sentenceIndex!==void 0&&s.sentenceIndex>=n&&s.sentenceIndex<=i),n);return bh({maxEvidenceDistance:700,mentions:a,text:OB(r.sentences),windowLength:1800}).map(s=>({fragment:r,window:s}))})}function LB(t,e,r){let n=AB(t);return e.flatMap(i=>{if(i.sentenceIndex===void 0)return[];let a=n[i.sentenceIndex-r];return a===void 0?[]:[{id:i.id,qid:i.qid,range:{end:a.start+i.rangeEnd,start:a.start+i.rangeStart},surface:i.surface}]})}function AB(t){let e=[],r=0;for(let n of t){let i=r,a=i+n.text.length;e.push({end:a,start:i}),r=a+1}return e}function OB(t){return t.map(e=>e.text).join(" ")}var xv=d(()=>{"use strict";kv();ud();hh()});async function oo(t,e){let r=await Y(t,e);if(r.stage==="planned")throw new Error(`Chapter ${e} is planned. Set source before generating Knowledge Graph.`);return{details:r,fragments:await nv(t,e)}}var Sh=d(()=>{"use strict";be();ph()});async function fd(t,e,r){if(e.details.chapterId!==t)throw new Error(`Knowledge Graph snapshot belongs to chapter ${e.details.chapterId}, not chapter ${t}.`);if(e.details.stage==="planned")throw new Error(`Chapter ${t} is planned. Set source before generating Knowledge Graph.`);let n=e.fragments,i=iv(n),a=av(n),o=wr(r.policyPrompt);await r.progressTracker?.updatePhase({done:0,phase:"matching",phaseDetail:"text",total:i.length,unit:"char"});let s=await uh({includeDisambiguation:!0,onProgress:async h=>{await r.progressTracker?.updatePhase({done:h.coveredRangeEnd,force:!1,phase:"matching",phaseDetail:"text",total:i.length,unit:"char"})},...r.wikispine??{},sentences:a});await r.progressTracker?.throwIfStopped(),await r.progressTracker?.updatePhase({done:i.length,phase:"matching",phaseDetail:"text",total:i.length,unit:"char"});let c=await ev({candidates:s,policyPrompt:o,...r.progressTracker===void 0?{}:{progressTracker:r.progressTracker},request:r.request,text:i});await r.progressTracker?.throwIfStopped();let u=tv(c);await r.progressTracker?.updatePhase({done:0,phase:"enrichment",total:u,unit:"qid"});let l=await nh(c,{...r.progressTracker===void 0?{}:{progress:pd(r.progressTracker)},...r.resolverOptions===void 0?{}:{resolverOptions:r.resolverOptions}});await r.progressTracker?.throwIfStopped(),await r.progressTracker?.updatePhase({done:u,phase:"enrichment",total:u,unit:"qid"});let m=await lv({candidates:l,chapterId:t,fragments:n,policyPrompt:o,...r.progressTracker===void 0?{}:{progressTracker:r.progressTracker},request:r.request,text:i});await r.progressTracker?.throwIfStopped();let p=await Iv({fragments:n,mentions:m,...r.progressTracker===void 0?{}:{progressTracker:r.progressTracker},request:r.request});return await r.progressTracker?.throwIfStopped(),await ad(t,{mentionLinks:p,mentions:m,parameter:pv({policyPrompt:o,...r.resolverOptions===void 0?{}:{resolverOptions:r.resolverOptions}}),workspacePath:r.workspacePath})}var Rv=d(()=>{"use strict";vr();Bt();Qp();rv();ph();mv();hv();yh();xv();Sh()});var vv=d(()=>{"use strict"});var Tv=d(()=>{"use strict";Qp();OR();Rv();fh();yh();Sh();vv()});var _v=d(()=>{"use strict";Tv()});var so=d(()=>{"use strict";be()});var wh=d(()=>{"use strict";Bt()});var Eh=d(()=>{"use strict";Ve();Bt();Mn();so();wh()});var Lv=d(()=>{"use strict";Bt();so();Eh()});function yd(t){return{children:t.children.map(yd),...t.key===void 0?{}:{key:t.key},...t.serialId===void 0?{}:{serialId:t.serialId},title:t.title}}var kh=d(()=>{"use strict";rt()});async function Av(t){let e=await t.readToc(),r=e?.items.map(yd)??[];return MB(r),e===void 0?{items:[],version:it}:{items:r,version:e.version}}function MB(t){let e=new Set,r=n=>{for(let i of n){if(i.key===void 0)throw new Error("Missing chapter key in TOC. Run a writable chapter operation or `wg maintenance upgrade` before using read-only chapter paths.");if(e.has(i.key))throw new Error(`Duplicate chapter key: ${i.key}.`);e.add(i.key),r(i.children)}};r(t)}var Ov=d(()=>{"use strict";rt();ki();Zt();kh()});async function zn(t,e){let r=await Av(t),n=Sy(r.items,e);if(n===void 0)throw new Error(`Chapter path ${e} does not exist.`);return n}var Nv=d(()=>{"use strict";Mn();rt();so();Ov();kh()});import{z as _r}from"zod";var Dv,Kle,Mv=d(()=>{"use strict";Dv=_r.object({children:_r.lazy(()=>_r.array(Dv)),uri:_r.string().min(1),title:_r.string().nullable().optional()}).strict(),Kle=_r.object({chapters:_r.array(Dv)}).strict()});var Wv=d(()=>{"use strict";be()});var Fv=d(()=>{"use strict";Lv();so();Eh();Nv();wh();Mv();Wv()});var jv=d(()=>{"use strict";zi()});var qt=d(()=>{"use strict";ux();Rn();Gx();CR();_v();Rn();vp();Fv();jv();Ec()});import{randomUUID as ZB}from"crypto";import{join as eU}from"path";async function Gv(t="global"){let e=await Ih(),r=`${process.pid}-${ZB()}`,n=Date.now(),i=!1;try{await e.transaction(async()=>{await aU(e),await e.run(`
|
|
2034
|
+
INSERT OR IGNORE INTO gc_locks (
|
|
2035
|
+
scope, owner_id, owner_pid, heartbeat_at, created_at
|
|
2036
|
+
) VALUES (?, ?, ?, ?, ?)
|
|
2037
|
+
`,[t,r,process.pid,n,n]),i=await e.queryOne("SELECT owner_id FROM gc_locks WHERE scope = ?",[t],o=>k(o,"owner_id"))===r})}finally{await e.close()}if(!i)return;let a=setInterval(()=>{iU(t,r).catch(()=>{})},nU);return async()=>{clearInterval(a);let o=await Ih();try{await o.run("DELETE FROM gc_locks WHERE scope = ? AND owner_id = ?",[t,r])}finally{await o.close()}}}async function iU(t,e){let r=await Ih();try{await r.run(`
|
|
2038
|
+
UPDATE gc_locks
|
|
2039
|
+
SET heartbeat_at = ?, owner_pid = ?
|
|
2040
|
+
WHERE scope = ? AND owner_id = ?
|
|
2041
|
+
`,[Date.now(),process.pid,t,e])}finally{await r.close()}}async function aU(t){let e=await t.queryAll("SELECT * FROM gc_locks",void 0,cU);for(let{lock:r,scope:n}of e.filter(({lock:i})=>oU(i)))await t.run(`
|
|
2042
|
+
DELETE FROM gc_locks
|
|
2043
|
+
WHERE scope = ?
|
|
2044
|
+
AND owner_id = ?
|
|
2045
|
+
AND heartbeat_at = ?
|
|
2046
|
+
`,[n,r.ownerId,r.heartbeatAt])}function oU(t){return Date.now()-t.heartbeatAt<rU?!1:!dU(t.ownerPid)}async function Ih(){return await A(eU(cn(),"gc.sqlite"),tU)}function sU(t){return{createdAt:y(t,"created_at"),heartbeatAt:y(t,"heartbeat_at"),ownerId:k(t,"owner_id"),ownerPid:y(t,"owner_pid")}}function cU(t){return{lock:sU(t),scope:k(t,"scope")}}function dU(t){try{return process.kill(t,0),!0}catch(e){return!(w(e)&&e.code==="ESRCH")}}var tU,rU,nU,Bv=d(()=>{"use strict";ut();x();L();T();tU=`
|
|
2047
|
+
CREATE TABLE IF NOT EXISTS gc_locks (
|
|
2048
|
+
scope TEXT PRIMARY KEY,
|
|
2049
|
+
owner_id TEXT NOT NULL,
|
|
2050
|
+
owner_pid INTEGER NOT NULL,
|
|
2051
|
+
heartbeat_at INTEGER NOT NULL,
|
|
2052
|
+
created_at INTEGER NOT NULL
|
|
2053
|
+
);
|
|
2054
|
+
`,rU=6e4,nU=2e4});import{readdir as Uv,rm as uU,stat as lU}from"fs/promises";import{join as Hv}from"path";async function qv(t){let e=dl(),r=0,n=0,i=0;for(let a of await pU(e)){r+=1;let o=await lU(a).catch(c=>{if(!(w(c)&&c.code==="ENOENT"))throw c});if(o===void 0||!t.force&&t.now-o.mtimeMs<mU)continue;let s=await Se(a);t.dryRun||await uU(a,{force:!0,recursive:!0}),n+=1,i+=s}return{freedBytes:i,removed:n,scanned:r}}async function pU(t){try{let e=await Uv(t,{withFileTypes:!0}),r=[];for(let n of e){if(!n.isDirectory())continue;let i=Hv(t,n.name),a=await Uv(i,{withFileTypes:!0});for(let o of a)r.push(Hv(i,o.name))}return r}catch(e){if(w(e)&&e.code==="ENOENT")return[];throw e}}var mU,$v=d(()=>{"use strict";ut();T();Va();mU=3600*1e3});import{mkdir as hU,readFile as fU,writeFile as yU}from"fs/promises";import{join as gU}from"path";async function Kv(t={}){let e=Date.now(),r=cn(),n=await Gv();if(n===void 0)return{finishedAt:Date.now(),freedBytes:0,jobs:[],removed:0,scanned:0,skipped:!0,startedAt:e};try{if(t.opportunistic===!0&&!await EU(r,e))return{finishedAt:Date.now(),freedBytes:0,jobs:[],removed:0,scanned:0,skipped:!0,startedAt:e};let i={dryRun:t.dryRun===!0,force:t.force===!0,now:e,stateDirectoryPath:r},a=[];for(let s of bU)a.push(await wU(s,i));let o={finishedAt:Date.now(),freedBytes:xh(a,"freedBytes"),jobs:a,removed:xh(a,"removed"),scanned:xh(a,"scanned"),skipped:!1,startedAt:e};return await kU(r,o.finishedAt).catch(()=>{}),o}finally{await n()}}async function wU(t,e){try{return{name:t.name,...await t.run(e)}}catch(r){return{error:ae(r),freedBytes:0,name:t.name,removed:0,scanned:0}}}function xh(t,e){return t.reduce((r,n)=>{let i=n[e];return r+(typeof i=="number"?i:0)},0)}async function EU(t,e){let r=Number((await fU(Jv(t),"utf8").catch(()=>"")).trim());return!Number.isFinite(r)||e-r>=SU}async function kU(t,e){await hU(t,{recursive:!0}),await yU(Jv(t),`${e}
|
|
2055
|
+
`,"utf8")}function Jv(t){return gU(t,"gc.last-run")}var bU,SU,zv=d(()=>{"use strict";ut();Rn();qt();ze();la();bd();T();Bv();$v();bU=[{name:"wikg-coordinator",run:gd},{name:"search-cache",run:Ss},{name:"library-index",run:Qv},{name:"wikipage-cache",run:Ql},{name:"build-queue",run:Mc},{name:"tmp",run:qv}],SU=600*1e3});var Xv={};Yh(Xv,{tryRunWikiGraphGc:()=>Kv});var Vv=d(()=>{"use strict";zv()});import{mkdir as xU,rm as RU,writeFile as vU}from"fs/promises";import{dirname as TU,isAbsolute as _U,relative as CU,resolve as Rh}from"path";var co,vh=d(()=>{"use strict";ut();Lt();st();Be();xl();fs();Yb();un();ji();co=class t{#e;#t;#r=or();#n;#i=new Set;#a=new Set;#o=!1;constructor(e,r){if(r!==ul)throw new Error("Use WikgCoordinator.withArchiveSession().");this.#t=Rh(e),this.#e=sn(this.#t),this.#n=setInterval(()=>{Qb({archiveKey:this.#e,ownerId:this.#r}).catch(()=>{})},2e4)}static async open(e){let r=new t(e,ul);try{return await zb({archiveKey:r.#e,ownerId:r.#r}),r}catch(n){throw clearInterval(r.#n),n}}get archiveKey(){return this.#e}get archivePath(){return this.#t}get ownerId(){return this.#r}observeDirtyEntry(e){this.#i.add(e)}modifyEntry(e){this.#a.add(e)}createFileStore(e={}){return new fn(this.#t,{...e,session:this})}async materializeReadWorkspace(e,r){let n=e===void 0,i=n?await dt("archive-open"):Rh(e);n||await Wb(i);let a=this.createFileStore({readonlyDatabase:!0}),o=await is(await ns(this.#t),{archiveKey:this.#e,prefix:""});try{for(let s of o){let c=await a.readFile(s);if(c===void 0)continue;let u=Rh(i,s),l=CU(i,u);if(l.startsWith("..")||_U(l))throw new Error(`Archive entry escapes read workspace: ${s}`);await xU(TU(u),{recursive:!0}),await vU(u,c)}return await r(i)}finally{await a.close(),n&&await RU(i,{force:!0,recursive:!0})}}async close(){if(!this.#o){this.#o=!0,clearInterval(this.#n);try{await this.#s(),await Vb(this.#e)}finally{await Xb({archiveKey:this.#e,ownerId:this.#r})}await Promise.resolve().then(()=>(Vv(),Xv)).then(async({tryRunWikiGraphGc:e})=>{await e({opportunistic:!0})}).catch(()=>{})}}async#s(){let e=new Set([...this.#i,...this.#a]);e.size!==0&&await hs(this.#e,e)}}});import{rm as Yv}from"fs/promises";import{resolve as uo}from"path";var Qn,Zv=d(()=>{"use strict";ut();Lt();xl();vh();Qn=class{createFileStore(e,r={}){return new fn(uo(e),r)}async withArchiveSession(e,r){let n=await co.open(uo(e));try{return await r(n)}finally{await n.close()}}async withReadWorkspace(e,r,n={}){let i=n.documentDirPath===void 0?await dt("archive-open"):uo(n.documentDirPath);try{return await Li(uo(e),i),await r(i)}finally{n.documentDirPath===void 0&&await Yv(i,{force:!0,recursive:!0})}}async withWriteWorkspace(e,r){let n=await dt("archive-write");try{return await Li(uo(e),n),await r(n)}finally{await Yv(n,{force:!0,recursive:!0})}}}});import{readdir as LU,rm as tT}from"fs/promises";import{basename as AU,dirname as OU,join as eT}from"path";async function gd(t){let e=await NU(),r=0,n=0;for(let o of e){let s=await DU(o,t);s.removed&&(r+=1,n+=s.freedBytes)}let i=await FU(t),a=t.dryRun?{freedBytes:0,removed:0,scanned:0}:await Dc(ls());return{freedBytes:n+i.freedBytes+a.freedBytes,removed:r+i.removed+a.removed,scanned:e.length+i.scanned+a.scanned}}async function NU(){return await C(async t=>(await V(t),await t.queryAll(`
|
|
2056
|
+
SELECT overlay.*
|
|
2057
|
+
FROM entry_overlays AS overlay
|
|
2058
|
+
WHERE overlay.entry_path IN (?, ?)
|
|
2059
|
+
AND overlay.kind = 'file'
|
|
2060
|
+
AND overlay.workspace_path IS NOT NULL
|
|
2061
|
+
ORDER BY overlay.updated_at ASC
|
|
2062
|
+
`,[lt,N],At)))}async function DU(t,e){let r=await He(t.archiveKey,t.entryPath,"write");try{let n=await He(t.archiveKey,t.entryPath,"state");try{let i=await Ot(t.archiveKey,t.entryPath);if(i?.workspacePath===void 0||i.workspacePath!==t.workspacePath||!await MU(i,e))return{freedBytes:0,removed:!1};let a=await Se(i.workspacePath);return e.dryRun||(await dn(i.archiveKey,i.entryPath),await tT(i.workspacePath,{force:!0}),a+=await Nc(OU(i.workspacePath))),{freedBytes:a,removed:!0}}finally{await n()}}finally{await r()}}async function MU(t,e){return await cs(t.archiveKey,t.entryPath)||t.workspacePath===void 0?!1:await WU(t)?!0:!(!e.force&&e.now-t.updatedAt<36e5||t.entryPath===N&&!e.force)}async function WU(t){return t.workspacePath===void 0||!await Pt(t.workspacePath)||!await Pt(t.archivePath)?!0:t.entryPath!==N?!1:await jb(t)!=="current"}async function FU(t){let e=ls(),r;try{r=await LU(e,{withFileTypes:!0})}catch(o){if(w(o)&&o.code==="ENOENT")return{freedBytes:0,removed:0,scanned:0};throw o}let n=0,i=0,a=0;for(let o of r){if(!o.isDirectory())continue;let s=o.name;if(await ds(s))continue;let c=new Set((await dr(s)).map(u=>u.workspacePath).filter(u=>u!==void 0));for(let u of await kl(eT(e,s))){if(a+=1,Fp(AU(u))||c.has(u))continue;let l=await Se(u);t.dryRun||await tT(u,{force:!0}),n+=l,i+=1}if(!t.dryRun){let u=await jp(eT(e,s));n+=u.freedBytes,i+=u.removed,a+=u.scanned}}return{freedBytes:n,removed:i,scanned:a}}var rT=d(()=>{"use strict";Va();T();El();st();Be();Mi();un();Il();mt();ji()});var nT=d(()=>{"use strict";Zv();vh();fs();rT()});var Th=d(()=>{"use strict";nT()});import{resolve as jU}from"path";var M,iT=d(()=>{"use strict";L();Th();Rn();Ec();M=class{#e;#t=new Qn;constructor(e){this.#e=jU(e)}async read(e,r={}){return await this.readDocument(async(n,i)=>await e(new Sr(n,i)),r)}async readDocument(e,r={}){return await this.#t.withArchiveSession(this.#e,async n=>{if(r.documentDirPath!==void 0)return await n.materializeReadWorkspace(r.documentDirPath,async a=>{let o=await ye.open(a);try{return await e(o,a)}finally{await o.release()}});let i=await ye.open(this.#e,{fileStore:n.createFileStore({readonlyDatabase:!0,...r.searchIndexWritebackPolicy===void 0?{}:{searchIndexWritebackPolicy:r.searchIndexWritebackPolicy}})});try{return await e(i,this.#e)}finally{await i.release()}})}async write(e,r={}){return await this.#t.withArchiveSession(this.#e,async n=>{let i=await ye.open(this.#e,{fileStore:n.createFileStore({...r.searchIndexWritebackPolicy===void 0?{}:{searchIndexWritebackPolicy:r.searchIndexWritebackPolicy}})});try{return await e(i)}finally{try{await i.release()}finally{await gn(this.#e)}}})}}});var ze=d(()=>{"use strict";Lt();hb();iT();Th()});import{createHash as Jpe}from"crypto";import{mkdir as Qpe,readdir as GU,rm as BU,stat as Xpe,writeFile as Vpe}from"fs/promises";import{join as aT}from"path";async function Qv(t){let e=aT(Pe(),"library"),r=await UU();if(r===void 0)return{freedBytes:0,removed:0,scanned:0};let n=new Set(r.map(c=>String(c))),i=await GU(e,{withFileTypes:!0}).catch(c=>{if(w(c)&&c.code==="ENOENT")return[];throw c}),a=0,o=0,s=0;for(let c of i){if(!c.isDirectory()||(a+=1,n.has(c.name)))continue;let u=Number(c.name);if(Number.isInteger(u)&&await jg(u))continue;let l=aT(e,c.name),m=await Se(l);t.dryRun||await BU(l,{force:!0,recursive:!0}),o+=1,s+=m}return{freedBytes:s,removed:o,scanned:a}}async function UU(){let t=await A(oe(),"");try{return await t.queryAll("SELECT id FROM libraries",void 0,e=>y(e,"id"))}catch{return}finally{await t.close()}}var mo=d(()=>{"use strict";x();Xt();Ii();L();ze();Hi();hn();Va();se();T();po();rn();Ci()});import{randomBytes as fhe}from"crypto";import{constants as ghe,copyFile as bhe,mkdir as She,opendir as whe,realpath as Ehe,rename as khe,rm as Ihe,stat as xhe}from"fs/promises";import{dirname as vhe,isAbsolute as The,join as _he,relative as Che,resolve as Phe}from"path";var qU,Ghe,po=d(()=>{"use strict";x();L();se();vt();ze();T();rn();mo();Ci();qU=`
|
|
2063
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
2064
|
+
library_id INTEGER NOT NULL,
|
|
2065
|
+
public_id TEXT NOT NULL,
|
|
2066
|
+
relative_path TEXT NOT NULL,
|
|
2067
|
+
status TEXT NOT NULL DEFAULT 'present',
|
|
2068
|
+
last_seen_mutation_token TEXT,
|
|
2069
|
+
last_seen_size INTEGER,
|
|
2070
|
+
last_seen_mtime_ms INTEGER,
|
|
2071
|
+
last_scanned_at TEXT,
|
|
2072
|
+
created_at TEXT NOT NULL,
|
|
2073
|
+
updated_at TEXT NOT NULL,
|
|
2074
|
+
UNIQUE(library_id, public_id)
|
|
2075
|
+
`,Ghe=`
|
|
2076
|
+
CREATE TABLE IF NOT EXISTS library_archives (
|
|
2077
|
+
${qU}
|
|
2078
|
+
);
|
|
2079
|
+
|
|
2080
|
+
CREATE INDEX IF NOT EXISTS idx_library_archives_library
|
|
2081
|
+
ON library_archives(library_id);
|
|
2082
|
+
|
|
2083
|
+
CREATE INDEX IF NOT EXISTS idx_library_archives_library_path
|
|
2084
|
+
ON library_archives(library_id, relative_path);
|
|
2085
|
+
`});var Ph=d(()=>{"use strict";ze();po();rn()});var cT=d(()=>{"use strict";Es();xs();Gi();As();Ls();De();Os();mr();hn();mo();Ph()});var dT=d(()=>{"use strict";km();xs();cT();De();po();Ph();rn();mo()});var bd=d(()=>{"use strict";rn();po();dT();mo();Ci()});import{posix as xfe,resolve as Rfe,sep as vfe}from"path";import{open as _fe}from"yauzl";var uT=d(()=>{"use strict"});import{createWriteStream as Ffe}from"fs";import{mkdir as Gfe}from"fs/promises";import{dirname as Ufe,resolve as Hfe}from"path";import{pipeline as $fe}from"stream/promises";var lT=d(()=>{"use strict";uT()});var Lh=d(()=>{"use strict"});var mT=d(()=>{"use strict";x();Lh()});import{readFile as eye,readdir as tye}from"fs/promises";import{join as nye}from"path";var pT=d(()=>{"use strict";T()});import{join as sye}from"path";var hT=d(()=>{"use strict";x();Lh()});import{readFile as mye,readdir as pye}from"fs/promises";import{join as fye}from"path";var fT=d(()=>{"use strict";Ju();T()});import{mkdir as wye,writeFile as Eye}from"fs/promises";import{join as Iye}from"path";var yT=d(()=>{"use strict"});import{rm as Aye}from"fs/promises";import{join as Nye}from"path";var gT=d(()=>{"use strict";x();pT();hT();fT();yT()});var bT=d(()=>{"use strict";gT()});import{rm as Jye}from"fs/promises";import{join as Qye,resolve as Xye}from"path";var Ah=d(()=>{"use strict";ut();L();ze();lT();mT();bT()});import{rm as age}from"fs/promises";import{homedir as sge}from"os";import{resolve as dge}from"path";var ST=d(()=>{"use strict";bd();se();Ah();ze();rs()});var H=d(()=>{"use strict";Ve();tf();qd();ai();_e();Pf();Po();To();bd();se();ut();Tn();la();vr();Rp();qt();rt();ze();L();Zt();Rn();rs();ST();hn();Ah();T();qt();hn();qt();qt();qt();qt();Bt();vr();L();Un()});function pe(t,e){return`${t}
|
|
2086
|
+
See: ${e}`}var me,Oh=d(()=>{"use strict";H();me={command:`${"wg"} --help`,config:`${"wg"} help config`,format:`${"wg"} help format`,readiness:`${"wg"} help readiness`,root:`${"wg"} --help`,runtime:`${"wg"} help runtime`,uri:`${"wg"} help uri`}});import{extname as Hbe}from"path";var wT=d(()=>{"use strict";Oh()});import{AsyncLocalStorage as rH}from"async_hooks";function Sd(){return $t.getStore()?.cwd??process.cwd()}function ET(){return $t.getStore()?.env??process.env}function kT(){return $t.getStore()?.devProjectRoot}function IT(){return $t.getStore()?.stateDir}function xT(){return nH??$t.getStore()?.queueAutostart??!0}function Nh(){return $t.getStore()?.stdout??process.stdout}function RT(){return $t.getStore()?.stdoutIsTTY??Nh().isTTY}function vT(t){let e=$t.getStore();if(e===void 0){process.exitCode=t;return}e.exitCode=t}var $t,nH,Xn=d(()=>{"use strict";$t=new rH});import{createReadStream as Vbe}from"fs";import{rm as Zbe}from"fs/promises";import{join as tSe}from"path";async function ie(t){await iH(t)}async function iH(t){await new Promise((e,r)=>{Nh().write(t,n=>{if(n==null){e();return}if(aH(n)){vT(0),e();return}r(n)})})}function aH(t){return t.code==="EPIPE"}var TT=d(()=>{"use strict";H();Xn()});function ho(t){return`${JSON.stringify(wd(t),null,2)}
|
|
2087
|
+
`}function _T(t){return`${JSON.stringify(wd(t))}
|
|
2088
|
+
`}function wd(t){if(t===null||typeof t=="boolean"||typeof t=="number"||typeof t=="string")return t;if(Array.isArray(t))return t.map(e=>wd(e)??null);if(typeof t=="object")return sH(t)}function sH(t){let e=Object.entries(t).map(([n,i],a)=>({index:a,key:n,priority:oH.get(n)??Number.MAX_SAFE_INTEGER,value:i})),r={};for(let n of e.sort((i,a)=>i.priority-a.priority||i.index-a.index)){let i=wd(n.value);i!==void 0&&(r[n.key]=i)}return r}var oH,CT=d(()=>{"use strict";oH=new Map(["at","seq","uri","id","jobId","type","target","label","labels","title","state","name","qid","predicate","subjectLabel","objectLabel","subjectQid","objectQid","score","queueRank","chapter","chapterId","fragment","fragmentId","position","range","start","end","shown","total","count","mentionCount","nodeCount","edgeCount","summaryCount","limit","order","match","lens","terms","types","chapters","query","objects","items","nextCursor","archiveKey","archivePath","workspacePath","eventsPath","createdAt","updatedAt","finishedAt","currentStep","step","phase","phaseDetail","phaseDone","phaseTotal","phaseUnit","words","totalWords","outputTokens","authors","language","identifier","publisher","publishedAt","sourceFormat","snippet","summary","description","recommendation","risk","error","message","children","nodes","links","neighbors","incoming","outgoing","nodeGroups","sourceFragments","sources","tree","meta","evidence","content","source","text","prompt","llmJSON","errorJSON"].map((t,e)=>[t,e]))});function dH(t){return t!==""&&cH.test(t)?t:`'${t.replaceAll("'","'\\''")}'`}function uH(t){return t.map(dH).join(" ")}function Dh(t){return uH(["wg",...t])}var cH,PT=d(()=>{"use strict";H();cH=/^[A-Za-z0-9_@%+=:,./-]+$/u});var LT=d(()=>{"use strict"});import{existsSync as uSe,readFileSync as lSe}from"fs";import{dirname as pSe,join as hSe,parse as fSe,resolve as ySe}from"path";var AT=d(()=>{"use strict";Xn()});var gt=d(()=>{"use strict";Oh();wT();TT();CT();PT();LT();AT()});async function Ed(t){return await pH(async e=>await hH(e,t))}function mH(t,e){switch(t){case"llm":return yH(e);case"concurrent":return gH(e);case"wikispine":return bH(e)}}async function pH(t){let e=await A(oe(),lH);try{return await t(e)}finally{await e.close()}}async function hH(t,e){let r=await t.queryOne("SELECT value_json FROM config_sections WHERE section = ?",[e],n=>String(n.value_json));return r===void 0?{}:fH(e,r)}function fH(t,e){let r;try{r=JSON.parse(e)}catch(n){throw new Error(`Invalid local config JSON for ${t}: ${SH(n)}`)}if(r===null||typeof r!="object"||Array.isArray(r))throw new Error(`Invalid local config section ${t}: expected object.`);return mH(t,r)}function yH(t){let e=new Set(["apiKey","baseURL","model","name","provider"]),r=new Set(["anthropic","google","openai","openai-compatible"]),n={};for(let[i,a]of Object.entries(t)){if(!e.has(i))throw new Error(`Unknown llm config key: ${i}`);if(typeof a!="string"||a.trim()==="")throw new Error(`llm.${i} must be a non-empty string.`);let o=a.trim();if(i==="provider"&&!r.has(o))throw new Error(`Unknown llm.provider: ${o}`);n[i]=o}return n}function gH(t){let e=new Set(["job","request"]),r={};for(let[n,i]of Object.entries(t)){if(!e.has(n))throw new Error(`Unknown concurrent config key: ${n}`);let a=typeof i=="number"?i:typeof i=="string"?Number(i):NaN;if(!Number.isInteger(a)||a<=0)throw new Error(`concurrent.${n} must be a positive integer.`);r[n]=a}return r}function bH(t){let e=new Set(["provider"]),r=new Set(["cli","fetch"]),n={};for(let[i,a]of Object.entries(t)){if(!e.has(i))throw new Error(`Unknown wikispine config key: ${i}`);if(typeof a!="string"||a.trim()==="")throw new Error(`wikispine.${i} must be a non-empty string.`);let o=a.trim();if(i==="provider"&&!r.has(o))throw new Error(`Unknown wikispine.provider: ${o}`);n[i]=o}return n}function SH(t){return t instanceof Error?t.message:String(t)}var lH,Mh=d(()=>{"use strict";H();H();lH=`
|
|
2089
|
+
CREATE TABLE IF NOT EXISTS config_sections (
|
|
2090
|
+
section TEXT PRIMARY KEY,
|
|
2091
|
+
value_json TEXT NOT NULL,
|
|
2092
|
+
updated_at INTEGER NOT NULL
|
|
2093
|
+
);
|
|
2094
|
+
`});import{z as he}from"zod";async function Id(t){let[e,r,n]=await Promise.all([Ed("llm"),Ed("concurrent"),Ed("wikispine")]),i=t?.llmJSON===void 0?void 0:kH(t.llmJSON),a=NT({apiKey:fo(i?.apiKey,kd(e.apiKey)),baseURL:fo(i?.baseURL,kd(e.baseURL)),model:fo(i?.model,kd(e.model)),name:fo(i?.name,kd(e.name)),provider:fo(i?.provider,vH(e.provider))}),o=OT(r.request),s=OT(r.job),c=TH(n);return{...s===void 0&&o===void 0?{}:{concurrent:{...s===void 0?{}:{job:s},...o===void 0?{}:{request:o}}},...a===void 0?{}:{llm:a},...c===void 0?{}:{wikispine:c}}}function kH(t){let e=CH(t);if(e===void 0)throw new Error(pe("--llm must be a non-empty JSON object.",me.config));let r;try{r=JSON.parse(e)}catch(c){throw new Error(pe(`Invalid --llm JSON: ${PH(c)}`,me.config))}let n=EH.safeParse(r);if(!n.success)throw new Error(pe(`Invalid --llm config: ${n.error.issues.map(c=>`${c.path.join(".")||"<root>"}: ${c.message}`).join("; ")}`,me.config));let i=n.data.llm??n.data,a=i.provider??IH(i),o=RH(i),s=NT({apiKey:i.apiKey,baseURL:o,model:i.model,name:i.name,provider:a});if(s===void 0)throw new Error(pe("--llm must contain at least one supported LLM field.",me.config));return s}function IH(t){return t.provider===void 0&&(t.baseURL!==void 0||t.baseUrl!==void 0||t.chatCompletionsUrl!==void 0)?"openai-compatible":t.provider}function xH(t){if(t.chatCompletionsUrl===void 0)return;let e="/chat/completions";if(!t.chatCompletionsUrl.endsWith(e))throw new Error(pe("--llm chatCompletionsUrl must end with /chat/completions when baseURL is not provided.",me.config));return t.chatCompletionsUrl.slice(0,-e.length)}function RH(t){return t.baseURL!==void 0?t.baseURL:t.baseUrl!==void 0?t.baseUrl:xH(t)}function NT(t){if(!(t.apiKey===void 0&&t.baseURL===void 0&&t.model===void 0&&t.name===void 0&&t.provider===void 0))return{...t.apiKey===void 0?{}:{apiKey:t.apiKey},...t.baseURL===void 0?{}:{baseURL:t.baseURL},...t.model===void 0?{}:{model:t.model},...t.name===void 0?{}:{name:t.name},...t.provider===void 0?{}:{provider:t.provider}}}function vH(t){if(typeof t!="string")return;let e=Wh.safeParse(t);return e.success?e.data:void 0}function TH(t){let e=_H(t.provider);if(e!==void 0)return{provider:e}}function _H(t){return t==="cli"||t==="fetch"?t:void 0}function kd(t){return typeof t=="string"?t:void 0}function OT(t){return typeof t=="number"&&Number.isInteger(t)&&t>0?t:void 0}function fo(t,e){return t??e}function CH(t){let e=t?.trim();return e===void 0||e===""?void 0:e}function PH(t){return t instanceof Error?t.message:String(t)}var wH,Wh,EH,xd=d(()=>{"use strict";gt();Mh();wH=["anthropic","google","openai","openai-compatible"],Wh=he.enum(wH),EH=he.object({apiKey:he.string().min(1).optional(),baseURL:he.string().min(1).optional(),baseUrl:he.string().min(1).optional(),chatCompletionsUrl:he.string().min(1).optional(),llm:he.object({apiKey:he.string().min(1).optional(),baseURL:he.string().min(1).optional(),baseUrl:he.string().min(1).optional(),chatCompletionsUrl:he.string().min(1).optional(),model:he.string().min(1).optional(),name:he.string().min(1).optional(),provider:Wh.optional()}).optional(),model:he.string().min(1).optional(),name:he.string().min(1).optional(),provider:Wh.optional()})});import{createAnthropic as LH}from"@ai-sdk/anthropic";import{createGoogleGenerativeAI as AH}from"@ai-sdk/google";import{createOpenAI as OH}from"@ai-sdk/openai";import{createOpenAICompatible as NH}from"@ai-sdk/openai-compatible";function DT(t){let e=t.llm;if(e?.provider===void 0||e.model===void 0)throw new Error(pe("Missing LLM configuration. Set --llm for one run, or configure `wikg://local/config/llm` with provider and model.",me.config));return{model:DH(e.provider,e.model,{apiKey:e.apiKey,baseURL:e.baseURL,name:e.name}),...t.concurrent?.request===void 0?{}:{concurrent:t.concurrent.request}}}function DH(t,e,r){switch(t){case"anthropic":return LH({...r.apiKey===void 0?{}:{apiKey:r.apiKey},...r.name===void 0?{}:{name:r.name}})(e);case"google":return AH({...r.apiKey===void 0?{}:{apiKey:r.apiKey},...r.name===void 0?{}:{name:r.name}})(e);case"openai":{if(r.baseURL!==void 0)throw new Error(pe("openai does not accept llm.baseURL or baseURL in --llm JSON. Use openai-compatible for third-party OpenAI-style APIs.",me.config));return OH({...r.apiKey===void 0?{}:{apiKey:r.apiKey},...r.name===void 0?{}:{name:r.name}})(e)}case"openai-compatible":{if(r.baseURL===void 0)throw new Error(pe("openai-compatible requires llm.baseURL or baseURL in --llm JSON.",me.config));return NH({baseURL:r.baseURL,name:r.name??MH(r.baseURL),...r.apiKey===void 0?{}:{apiKey:r.apiKey}})(e)}}}function MH(t){try{return new URL(t).hostname}catch{return"openai-compatible"}}var Fh=d(()=>{"use strict";gt()});function MT(t,e,r,n,i){let a=WH(t),o=Math.max(r,Math.ceil(e/a.wordsPerCall)),s=Math.max(1,t==="reading-graph"?1:n.request),c=Math.ceil(o/s),u=e*a.secondsPerWord;return{model:i,timeSeconds:{max:Math.ceil(c*a.maxSecondsPerCall+u),min:Math.ceil(c*a.minSecondsPerCall+u)},tokens:{cacheableInput:Math.ceil(e*a.cacheableInputTokenPerWord),input:Math.ceil(e*a.inputTokenPerWord),output:Math.ceil(e*a.outputTokenPerWord)}}}function WT(t){if(!t.hasGenerationWork)return[];let e=[],r=t.concurrent.request<4?6:t.concurrent.request<8?8:void 0;return r!==void 0&&e.push({command:`wg wikg://local/config/concurrent put request ${r}`,current:t.concurrent.request,kind:"request",message:"LLM request concurrency can often be higher. Use at least 4; 6-8 is usually faster when the provider allows it.",recommended:r}),t.concurrent.job<4&&t.chapters>1&&e.push({command:"wg wikg://local/config/concurrent put job 4",current:t.concurrent.job,kind:"job",message:"Multiple chapters need generation and job concurrency is below 4. Raising it lets chapter jobs run in parallel.",recommended:4}),e}function FT(t){return t?.model===void 0?"not configured":t.provider===void 0?t.model:`${t.provider}/${t.model}`}function jh(t){if(t<60)return`${t}s`;let e=Math.round(t/60);return e<60?`${e}m`:`${Math.round(e/60)}h`}function WH(t){switch(t){case"knowledge-graph":return{cacheableInputTokenPerWord:60,inputTokenPerWord:80,maxSecondsPerCall:35,minSecondsPerCall:15,outputTokenPerWord:25,secondsPerWord:.02,wordsPerCall:35};case"reading-graph":return{cacheableInputTokenPerWord:20,inputTokenPerWord:25,maxSecondsPerCall:45,minSecondsPerCall:15,outputTokenPerWord:4,secondsPerWord:.01,wordsPerCall:160};case"reading-summary":return{cacheableInputTokenPerWord:45,inputTokenPerWord:55,maxSecondsPerCall:25,minSecondsPerCall:10,outputTokenPerWord:4,secondsPerWord:.01,wordsPerCall:110}}}var jT=d(()=>{"use strict"});import{clearLine as USe,cursorTo as HSe,moveCursor as qSe}from"readline";var GT=d(()=>{"use strict"});function FH(t){let e=t.counters??[],r=e.length===0?"":` ${e.map(jH).join(" | ")}`,n=GH(t.metricGroups);return`${t.phase}${r}${n===""?"":` ${n}`}`}function jH(t){return t.name===t.unit?`${t.name} ${t.done}/${t.total}`:`${t.name} ${t.done}/${t.total} ${t.unit}`}function GH(t){return t===void 0?"":t.flatMap(r=>{let n=r.metrics.map(i=>`${i.name}: ${i.value}`);return n.length===0?[]:[`[${r.name} ${n.join(" / ")}]`]}).join(" ")}function BH(t){let e=t.counters??[];return e.length>0&&e.every(r=>r.total>0&&r.done>=r.total)}var Rd,BT=d(()=>{"use strict";gt();gt();Xn();Rd=class{#e;#t;#r;#n;#i;#a=!1;constructor(e){this.#e=e.jsonl,this.#t=e.throttleMs,this.#r=e.tty??RT()===!0}async write(e){if(!(e.kind==="status"&&!this.#l(e))){if(this.#e){await this.#s(_T(e.json));return}if(e.kind==="status"){await this.#c(FH(e));return}await this.#o(e.text)}}async#o(e){this.#r&&this.#a&&(await ie(`
|
|
2095
|
+
`),this.#a=!1),await this.#s(`${e}
|
|
2096
|
+
`)}async#s(e){await ie(e)}async#c(e){if(this.#r){await ie(`\r\x1B[2K${e}`),this.#a=!0;return}await this.#s(`${e}
|
|
2097
|
+
`)}#l(e){let r=e.phase,n=BH(e),i=Date.now(),a=this.#n===void 0?Number.POSITIVE_INFINITY:i-this.#n;return r!==this.#i||n||this.#n===void 0||a>=this.#t?(this.#n=i,this.#i=r,!0):!1}}});function UT(t,e){let r=DT(t);return new St({dataDirPath:Kt(),sampling:kc({...r.temperature===void 0?{}:{temperature:r.temperature},...r.topP===void 0?{}:{topP:r.topP}}),...r,...e?.cacheDirPath===void 0?{}:{cacheDirPath:e.cacheDirPath},...e?.logDirPath===void 0?{}:{logDirPath:e.logDirPath},...e?.onStreamProgress===void 0?{}:{onStreamProgress:e.onStreamProgress},...e?.onTokenUsage===void 0?{}:{onTokenUsage:e.onTokenUsage}})}async function vd(t){let e=await Id({...t.llmJSON===void 0?{}:{llmJSON:t.llmJSON}});if(e.llm?.provider===void 0||e.llm.model===void 0)throw new Error(pe("Missing LLM configuration. Set --llm for one run, or configure `wikg://local/config/llm` with provider and model.",me.config));return e}var HT=d(()=>{"use strict";H();H();H();H();xd();gt();Fh()});var yo=d(()=>{"use strict";xd();Fh();Mh();jT();GT();BT();HT()});import{spawn as UH}from"child_process";import{existsSync as HH}from"fs";import{join as Gh,resolve as qH}from"path";function qT(t,e={}){let r=$H(t,e.args??[]);return UH(r.command,r.args,{cwd:Sd(),detached:e.detached===!0,env:ET(),stdio:e.detached===!0?"ignore":["ignore","pipe","pipe"]})}function $H(t,e){let r=kT(),n=IT();return r!==void 0&&n!==void 0?{args:[Gh(r,"node_modules","tsx","dist","cli.mjs"),Gh(r,"packages","cli","src","bin",`${t}.ts`),"--wikigraph-internal-child",t,"--wikigraph-state-dir",n,...e],command:process.execPath}:{args:[KH(t),"--wikigraph-internal-child",t,...n===void 0?[]:["--wikigraph-state-dir",n],...e],command:process.execPath}}function KH(t){let e=`${t}.js`,r=globalThis.__WIKIGRAPH_CLI_DIST_DIR__??qH(Sd(),"packages","cli","dist"),n=Gh(r,e);return HH(n),n}var $T=d(()=>{"use strict";Xn()});function _d(t){let e={job:t.config.concurrent?.job??3,request:t.config.concurrent?.request??6},r=t.chapters.reduce((o,s)=>o+s.words,0),n=FT(t.config.llm),i=zH({chapters:t.chapters,concurrent:e,model:n,target:t.target}),a=Math.max(0,...i.map(o=>o.chapters));return{chapters:t.chapters.length,concurrent:e,includesPrerequisites:i.some(o=>o.prerequisite),performanceHints:WT({chapters:a,concurrent:e,hasGenerationWork:i.length>0}),planning:QH(n,i),steps:i,target:t.target,words:r}}function zH(t){switch(t.target){case"knowledge-graph":return[Td({chapters:t.chapters,concurrent:t.concurrent,model:t.model,prerequisite:!1,task:"knowledge-graph"})].filter(e=>e.chapters>0);case"reading-graph":return[Td({chapters:t.chapters.filter(e=>e.stage==="sourced"),concurrent:t.concurrent,model:t.model,prerequisite:!1,task:"reading-graph"})].filter(e=>e.chapters>0);case"reading-summary":{let e=t.chapters.filter(n=>n.stage==="sourced"),r=t.chapters.filter(n=>n.stage==="sourced"||n.stage==="graphed");return[Td({chapters:e,concurrent:t.concurrent,model:t.model,prerequisite:!0,task:"reading-graph"}),Td({chapters:r,concurrent:t.concurrent,model:t.model,prerequisite:!1,task:"reading-summary"})].filter(n=>n.chapters>0)}}}function Td(t){let e=t.chapters.reduce((r,n)=>r+n.words,0);return{chapters:t.chapters.length,planning:MT(t.task,e,t.chapters.length,t.concurrent,t.model),prerequisite:t.prerequisite,task:t.task,words:e}}function QH(t,e){return{model:t,timeSeconds:{max:e.reduce((r,n)=>r+n.planning.timeSeconds.max,0),min:e.reduce((r,n)=>r+n.planning.timeSeconds.min,0)},tokens:{cacheableInput:e.reduce((r,n)=>r+n.planning.tokens.cacheableInput,0),input:e.reduce((r,n)=>r+n.planning.tokens.input,0),output:e.reduce((r,n)=>r+n.planning.tokens.output,0)}}}function Uh(t){return{chapters:t.chapters,concurrent:t.concurrent,includesPrerequisites:t.includesPrerequisites,performanceHints:t.performanceHints,steps:t.steps.map(e=>({chapters:e.chapters,prerequisite:e.prerequisite,task:e.task,tokens:e.planning.tokens,waitSeconds:e.planning.timeSeconds,words:e.words})),target:t.target,tokens:t.planning.tokens,waitSeconds:t.planning.timeSeconds,words:t.words,model:t.planning.model}}function Hh(t){return["Estimate:",` Work: ${t.target} over ${t.chapters} chapter${t.chapters===1?"":"s"} / ${t.words} words`,...t.includesPrerequisites?[" Includes prerequisite Reading Graph work where missing."]:[],` Model: ${t.planning.model}`,` Tokens: ${t.planning.tokens.input} input / ${t.planning.tokens.cacheableInput} cacheable input / ${t.planning.tokens.output} output`,` Wait: ${jh(t.planning.timeSeconds.min)}-${jh(t.planning.timeSeconds.max)}`,` Current concurrency: job=${t.concurrent.job} request=${t.concurrent.request}`,...XH(t.performanceHints)]}function XH(t){return t.length===0?[]:["Performance hints:",...t.flatMap(e=>[` ${e.message}`,` Command: ${e.command}`])]}var Cd=d(()=>{"use strict";yo()});async function JT(t,e){if(e.json){await ie(ho({items:t.map(Pd)}));return}if(t.length===0){await ie(`No jobs.
|
|
2098
|
+
`);return}await ie(`${VH()}
|
|
2099
|
+
${t.map(r=>`${r.jobId.slice(0,8).padEnd(8)} ${r.state.padEnd(9)} ${(r.currentStep??"-").padEnd(7)} ${r.target.padEnd(7)} ${r.chapterId.toString().padStart(7)} ${eq(r.archivePath)}`).join(`
|
|
2100
|
+
`)}
|
|
2101
|
+
`)}function VH(){return`${"JOB".padEnd(8)} ${"STATE".padEnd(9)} ${"STEP".padEnd(7)} ${"TARGET".padEnd(7)} ${"CHAPTER".padStart(7)} ARCHIVE`}async function zT(t,e){if(e.json){await ie(ho(Pd(t)));return}await ie([`Job: ${t.jobId}`,`State: ${t.state}`,`Archive: ${t.archivePath}`,`Chapter: ${t.chapterId}`,`Target: ${t.target}`,`Step: ${t.currentStep??"-"}`,`Workspace: ${t.workspacePath}`,`Cache: ${t.cachePath}`,`Logs: ${t.logPath}`,...t.errorJSON===void 0?[]:[`Error: ${t.errorJSON}`]].join(`
|
|
2102
|
+
`)+`
|
|
2103
|
+
`)}function Pd(t){return{archiveKey:t.archiveKey,archivePath:t.archivePath,cachePath:t.cachePath,chapterId:t.chapterId,createdAt:t.createdAt,...t.currentStep===void 0?{}:{currentStep:t.currentStep},...t.errorJSON===void 0?{}:{errorJSON:t.errorJSON},eventsPath:t.eventsPath,...t.finishedAt===void 0?{}:{finishedAt:t.finishedAt},jobId:t.jobId,logPath:t.logPath,...t.llmJSON===void 0?{}:{llm:YH(t.llmJSON)},...t.ownerId===void 0?{}:{ownerId:t.ownerId},...t.ownerPid===void 0?{}:{ownerPid:t.ownerPid},...t.prompt===void 0?{}:{prompt:t.prompt},queueRank:t.queueRank,state:t.state,...t.readingSummaryStartedAt===void 0?{}:{readingSummaryStartedAt:t.readingSummaryStartedAt},target:t.target,updatedAt:t.updatedAt,workspacePath:t.workspacePath}}function YH(t){let e;try{e=JSON.parse(t)}catch{return{configured:!0,invalid:!0}}let r=ZH(e);return{configured:!0,...Xe(r,"provider")===void 0?{}:{provider:Xe(r,"provider")},...Xe(r,"model")===void 0?{}:{model:Xe(r,"model")},...Xe(r,"name")===void 0?{}:{name:Xe(r,"name")},hasApiKey:Xe(r,"apiKey")!==void 0,hasBaseURL:Xe(r,"baseURL")!==void 0||Xe(r,"baseUrl")!==void 0||Xe(r,"chatCompletionsUrl")!==void 0}}function ZH(t){if(!KT(t))return{};let e=t.llm;return KT(e)?e:t}function Xe(t,e){let r=t[e];return typeof r=="string"&&r!==""?r:void 0}function KT(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}async function Cr(t,e={json:!1}){if(e.json){await ie(ho({...Pd(t),...e.estimate===void 0?{}:{estimate:Uh(e.estimate)},...e.watch===!0?{watchCommand:Dh([`wikg://local/job/${t.jobId}`,"watch"])}:{}}));return}await ie([`Job ${t.jobId} ${t.state} ${t.target} chapter ${t.chapterId} ${t.archivePath}`,...e.watch===!0?[`Watch: ${Dh([`wikg://local/job/${t.jobId}`,"watch"])}`]:[],...e.estimate===void 0?[]:["",...Hh(e.estimate)],""].join(`
|
|
2104
|
+
`))}async function QT(t){if(t.json){await ie(ho({created:t.created.map(r=>Pd(r.job)),...t.estimate===void 0?{}:{estimate:Uh(t.estimate)},skipped:t.skipped}));return}let e=[`Created: ${t.created.length}`,`Skipped: ${t.skipped.length}`];for(let r of t.created)e.push(`Job ${r.job.jobId} ${r.job.state} ${r.job.target} chapter ${r.job.chapterId}`);for(let r of t.skipped)e.push(`Skipped chapter ${r.chapterId}: ${r.reason}`);t.estimate!==void 0&&e.push("",...Hh(t.estimate)),await ie(`${e.join(`
|
|
2105
|
+
`)}
|
|
2106
|
+
`)}function eq(t){return t.split(/[\\/]/u).at(-1)??t}var qh=d(()=>{"use strict";gt();Cd()});async function $h(t,e){return await Ba({archivePath:t.archivePath,boost:t.boost??!1,chapterId:e,...t.llmJSON===void 0?{}:{llmJSON:t.llmJSON},...t.prompt===void 0?{}:{prompt:t.prompt},target:t.target??"reading-summary"})}async function Kh(t,e){let r=[],n=[];await new M(t.archivePath).readDocument(async i=>{let a=t.chapterIds===void 0?void 0:new Set(t.chapterIds);for(let o of await J(i))if(!(a!==void 0&&!a.has(o.chapterId))){if(o.stage==="planned"){n.push({chapterId:o.chapterId,reason:"planned"});continue}try{r.push({chapter:o,job:await $h(t,o.chapterId)})}catch(s){n.push({chapterId:o.chapterId,reason:s instanceof Error?s.message:String(s)})}}}),await QT({created:r,...r.length===0?{}:{estimate:_d({chapters:r.map(i=>i.chapter),config:e,target:t.target??"reading-summary"})},json:t.json??!1,skipped:n})}async function XT(t,e){let r;if(await new M(t.archivePath).readDocument(async i=>{r=(await J(i)).find(a=>a.chapterId===e)}),r===void 0)throw new Error("Chapter does not exist.");let n=r.uri;await new M(t.archivePath).read(async i=>{if(await i.readChapterStage(e)==="planned")throw new Error(`Chapter ${n} is planned. Set source before queueing a build job.`)})}async function VT(t,e){let r;if(await new M(t.archivePath).readDocument(async n=>{r=(await J(n)).find(i=>i.chapterId===e)}),r===void 0)throw new Error(`Chapter ${e} does not exist.`);return r}function YT(t){if(t.acceptCost!==!0)throw new Error("Generation tasks can call an LLM, consume tokens, incur provider charges, and run for minutes to hours on large archives. Run `wg <archive-uri> inspect`, then rerun `wg wikg://local/job add` with --accept-cost if the cost and wait time are acceptable.")}function go(){if(!xT())return;qT("queue-worker",{detached:!0}).unref()}var ZT=d(()=>{"use strict";H();H();Xn();$T();Cd();qh()});async function e_(t,e){let r=0,n=new Rd({jsonl:e.jsonl,throttleMs:rq});if(e.from==="now"){let i=await ne(t);r=(await Er(i)).at(-1)?.seq??0}for(;;){let i=await ne(t),a=(await Er(i)).filter(o=>o.seq>r);for(let o of a)r=Math.max(r,o.seq),await n.write(nq(o));if(tq.has(i.state))return;await dq(1e3)}}function nq(t){switch(t.type){case"status_snapshot":{let e=cq(t.tokens);return{counters:t.counters.map(oq),json:t,kind:"status",...e===void 0?{}:{metricGroups:[e]},phase:t.phase??iq(t.step)}}case"target_changed":return{json:t,kind:"lifecycle",text:`target ${t.from} -> ${t.to}`};case"step_started":return{json:t,kind:"lifecycle",text:`${t.step} started
|
|
2107
|
+
steps: ${aq(t.step)}`};case"step_completed":return{json:t,kind:"lifecycle",text:`${t.step} completed`};case"created":return{json:t,kind:"lifecycle",text:"created"};default:return{json:t,kind:"lifecycle",text:t.type}}}function iq(t){switch(t){case"reading-graph":return"extracting";case"reading-summary":return"summarizing";case"knowledge-graph":return"knowledge-graph";case void 0:return"status";default:return"status"}}function aq(t){switch(t){case"knowledge-graph":return"matching -> screening -> enrichment -> grounding -> relation-discovery -> committing";case"reading-summary":return"reading-graph -> summarizing -> committing";case"reading-graph":return"extracting -> committing";default:return t}}function oq(t){return{done:t.done,name:t.name,total:t.total,unit:sq(t.unit)}}function sq(t){switch(t){case"candidate":return"candidates";case"char":return"chars";case"item":return"items";case"page":return"pages";case"qid":return"qids";case"record":return"records";case"sentence":return"sentences";case"word":return"words";case"window":return"windows";default:return t}}function cq(t){if(t===void 0)return;let e=[...t.inputTokens===void 0?[]:[{name:"input",value:t.inputTokens}],...t.cacheReadTokens===void 0?[]:[{name:"cache",value:t.cacheReadTokens}],...t.outputTokens===void 0?[]:[{name:"output",value:t.outputTokens}]];return e.length===0?void 0:{metrics:e,name:"tokens"}}async function dq(t){await new Promise(e=>{setTimeout(e,t)})}var tq,rq,t_=d(()=>{"use strict";H();yo();tq=new Set(["succeeded","failed","canceled"]),rq=6e3});async function r_(){let t=await Id();await Xa({concurrency:t.concurrent?.job??3,executeJob:async(e,r,n)=>{await uq(e,r,n)}})}async function uq(t,e,r){await Ro({logDirPath:t.logPath,operation:"build-job"},async()=>{await lq(t,e,r)})}async function lq(t,e,r){let n=await vd({...t.llmJSON===void 0?{}:{llmJSON:t.llmJSON}}),i=UT(n,{cacheDirPath:t.cachePath,logDirPath:t.logPath,onStreamProgress:async f=>{await e.addOutputCharacters(f.outputCharacters)},onTokenUsage:async f=>{await e.addTokenUsage({...f.cacheReadTokens===void 0?{}:{cacheReadTokens:f.cacheReadTokens},...f.inputTokens===void 0?{}:{inputTokens:f.inputTokens},...f.outputTokens===void 0?{}:{outputTokens:f.outputTokens}})}}),a=t.prompt??n.prompt,o=Re(a),s=wr(a),c=async(f,E,v)=>await i.request(f,{retryIndex:E,retryMax:v,scope:"serial-generation/reader-extraction",signal:r.signal});c.lazy=async f=>await i.request(async()=>await f(c));let u=await new M(t.archivePath).readDocument(async f=>await $n(f,t.chapterId)),{details:l}=u,{sourceText:m}=u;if(await jn({currentRevision:u.revision,jobId:t.jobId,ownerId:Jh(t)}),await e.setTotals({totalGraphWords:l.stage==="sourced"?l.words:0,totalReadingSummaryWords:l.stage==="sourced"||l.stage==="graphed"?l.words:0}),l.stage==="planned")throw new Error(`Chapter ${t.chapterId} is planned. Set source before queueing a build job.`);if(t.target==="knowledge-graph"){let f=zh(n);await e.stepStarted("knowledge-graph");let E=await new M(t.archivePath).readDocument(async I=>(await bo(t,I),await oo(I,t.chapterId))),v=await fd(t.chapterId,E,{policyPrompt:s,progressTracker:e,request:c,resolverOptions:{logDirPath:t.logPath,normalizer:Fs({request:c})},wikispine:f,workspacePath:t.workspacePath});await e.updatePhase({done:0,phase:"committing",total:1,unit:"item"}),await new M(t.archivePath).write(async I=>{Vn(await ne(t.jobId)),await bo(t,I),await od(I,v)}),await e.updatePhase({done:1,phase:"committing",total:1,unit:"item"}),await e.stepCompleted("knowledge-graph"),Vn(await ne(t.jobId));return}if(l.stage==="sourced"){let f=0;await e.stepStarted("reading-graph");let E=await Gc(t.chapterId,{extractionPrompt:o,llm:i,sourceText:m,workspacePath:t.workspacePath,progressTracker:{async advance(I){f+=I,await e.updateWords({graphWords:f})},async complete(I){await e.updateWords({graphWords:I??l.words})}}});await e.updatePhase({done:0,phase:"committing",total:1,unit:"item"}),l=await new M(t.archivePath).write(async I=>(Vn(await ne(t.jobId)),await bo(t,I),await Bc(I,E))),await e.updatePhase({done:1,phase:"committing",total:1,unit:"item"});let v=await new M(t.archivePath).readDocument(async I=>await $n(I,t.chapterId));l=v.details,await jn({currentRevision:v.revision,jobId:t.jobId,ownerId:Jh(t)}),await e.updateWords({graphWords:l.words}),await e.stepCompleted("reading-graph")}let p=await ne(t.jobId);if(Vn(p),p.target==="reading-graph"||l.stage==="summarized")return;if(l.stage!=="graphed"&&({details:l}=await new M(t.archivePath).readDocument(async f=>await $n(f,t.chapterId))),l.stage!=="graphed")throw new Error(`Chapter ${t.chapterId} is ${l.stage}. Cannot generate summary.`);await e.stepStarted("reading-summary");let h=await new M(t.archivePath).readDocument(async f=>(await bo(t,f),await nd(f,t.chapterId,t.workspacePath))),g=await td(t.chapterId,{llm:i,snapshotPath:h.filePath,workspacePath:t.workspacePath});await e.updatePhase({done:0,phase:"committing",total:1,unit:"item"}),l=await new M(t.archivePath).write(async f=>(Vn(await ne(t.jobId)),await bo(t,f),await rd(f,t.chapterId,g))),await e.updatePhase({done:1,phase:"committing",total:1,unit:"item"}),await e.updateWords({readingSummaryWords:l.words}),await e.stepCompleted("reading-summary"),Vn(await ne(t.jobId))}function zh(t){if(t.wikispine?.provider!==void 0)return t.wikispine;throw new Error(pe(["Knowledge Graph requires WikiSpine.","Configure `wikg://local/config/wikispine` with provider `cli` or `fetch`, then run `wg wikg://local/config/wikispine test`."].join(" "),me.config))}function Vn(t){if(t.state!=="running")throw new Error(`Job ${t.jobId} is ${t.state}. Stop before flushing.`)}async function bo(t,e){await Ua({currentRevision:await e.serials.getRevision(t.chapterId),jobId:t.jobId,ownerId:Jh(t)})}function Jh(t){if(t.ownerId===void 0)throw new Error(`Job ${t.jobId} is not owned by this worker.`);return t.ownerId}var Qh=d(()=>{"use strict";H();H();H();H();xd();yo();gt()});async function Xh(t,e){let r=Ti(e.archivePath).objectUri;if(r===void 0)return;let n=mq(r);if(n===void 0||n.kind==="collection"&&e.depth===void 0)return;let i=await J(t),a=n.kind==="collection"?pq(i,e.depth):hq(i,await zn(t,n.chapterPath),e.depth);return{chapterIds:a.map(o=>o.chapterId),entries:a}}function mq(t){if(t==="wikg://chapter"||t==="wikg://chapter/")return{kind:"collection"};let e=/^wikg:\/\/chapter\/([^/].*?)(?:\/)?$/u.exec(t);if(e?.[1]!==void 0)return{chapterPath:decodeURIComponent(e[1]),kind:"chapter"}}function pq(t,e){return e===void 0?t:t.filter(r=>r.depth<=e)}function hq(t,e,r){let n=t.find(a=>a.chapterId===e);if(n===void 0)throw new Error(`Chapter ${e} does not exist.`);let i=`${n.path}/`;return t.filter(a=>a.chapterId===n.chapterId?!0:a.path.startsWith(i)?r===void 0||a.depth-n.depth<=r:!1)}var n_=d(()=>{"use strict";H()});var i_={};Yh(i_,{runQueueCommand:()=>fq,runQueueWorker:()=>r_});async function fq(t){switch(t.action){case"add":{let e=await yq(t),r=e?.length===1?e[0]:void 0;r!==void 0&&await XT(t,r),YT(t);let n=await vd({...t.llmJSON===void 0?{}:{llmJSON:t.llmJSON}});if(t.target==="knowledge-graph"&&zh(n),e===void 0)await Kh(t,n);else if(e.length===1){let i=e[0],a=await VT(t,i),o=_d({chapters:[a],config:n,target:t.target??"reading-summary"});await Cr(await $h(t,i),{estimate:o,json:t.json??!1,watch:!0})}else await Kh({...t,chapterIds:e},n);go();return}case"list":await JT(await Ha({...t.activeOnly===void 0?{}:{activeOnly:t.activeOnly},...t.all===void 0?{}:{all:t.all},...t.archivePath===void 0?{}:{archivePath:t.archivePath}}),{json:t.json??!1});return;case"status":await zT(await ne(await Pr(t)),{json:t.json??!1});return;case"watch":await e_(await Pr(t),{from:t.from??"beginning",jsonl:t.jsonl??!process.stdout.isTTY});return;case"pause":await Cr(await $a(await Pr(t)));return;case"resume":await Cr(await Ka(await Pr(t))),go();return;case"cancel":await Cr(await Ja(await Pr(t)));return;case"boost":await Cr(await za(await Pr(t))),go();return;case"target":await Cr(await Qa(await Pr(t),t.target??"reading-summary")),go();return;case"clean":await ie(`Cleaned ${await Ya()} jobs.
|
|
2108
|
+
`);return}}async function Pr(t){return await qa(t.jobId)}async function yq(t){if(t.chapterId!==void 0)return[t.chapterId];if(t.chapterPath===void 0&&t.depth===void 0)return;let e;return await new M(t.archivePath).readDocument(async r=>{if(t.chapterPath===void 0){e=(await Xh(r,{archivePath:tn(t.archivePath,"wikg://chapter"),...t.depth===void 0?{}:{depth:t.depth}}))?.chapterIds;return}e=(await Xh(r,{archivePath:_i(t.archivePath,t.chapterPath),...t.depth===void 0?{}:{depth:t.depth}}))?.chapterIds??[await zn(r,t.chapterPath)]}),e}var a_=d(()=>{"use strict";H();yo();gt();ZT();Cd();qh();t_();Qh();n_();Qh()});async function o_(){return(await Promise.resolve().then(()=>(a_(),i_))).runQueueWorker()}H();var gq=["WIKIGRAPH_DEV","WIKIGRAPH_ENV_POLICY","WIKIGRAPH_QUEUE_DISABLE_AUTOSTART","WIKIGRAPH_STATE_DIR"];function c_(t){let e=bq(t.env);if(t.envPolicy==="production"){let a=gq.filter(o=>e[o]!==void 0);if(a.length>0)throw new Error(`Wiki Graph production entries do not support runtime env overrides: ${a.join(", ")}. Use the development entry or explicit SDK options instead.`);return{env:e,envPolicy:t.envPolicy,stateDir:t.stateDir}}let r=e.WIKIGRAPH_DEV??e.WIKIGRAPH_STATE_DIR,n=s_(t.stateDir??r);if(n===void 0)throw new Error("Wiki Graph development entries require an explicit runtime state directory.");let i=s_(t.devProjectRoot);if(i===void 0)throw new Error("Wiki Graph development entries require an explicit project root.");return{devProjectRoot:i,env:e,envPolicy:t.envPolicy,stateDir:n}}function bq(t){return t===void 0?{...process.env}:{...process.env,...t}}function s_(t){if(!(t===void 0||t.trim()===""))return t}var d_="--wikigraph-internal-child",u_="--wikigraph-state-dir";async function l_(t,e){let r=Sq(process.argv.slice(2));if(r.internalChild!==t)throw new Error("This Wiki Graph worker entry is internal.");let n=c_({argv:r.argv,envPolicy:"production",stateDir:r.stateDir});return await zd(n.stateDir,()=>e(r))}function Sq(t){let e=[],r,n;for(let i=0;i<t.length;i+=1){let a=t[i];if(a===d_){if(i+1>=t.length)throw new Error(`${d_} requires a value.`);r=t[i+1],i+=1;continue}if(a!==u_){e.push(a);continue}if(i+1>=t.length)throw new Error(`${u_} requires a value.`);n=t[i+1],i+=1}return{argv:e,internalChild:r??"",stateDir:n}}async function wq(){await l_("queue-worker",async()=>await o_())}wq().catch(t=>{process.stderr.write(`${t instanceof Error?t.stack??t.message:String(t)}
|
|
2109
|
+
`),process.exitCode=1});
|
|
2110
|
+
//# sourceMappingURL=queue-worker.js.map
|