docuvia 1.6.2 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{c,d as a,e as y,f as _,h as T}from"./chunk-TBMA2SBX.js";import{ca as P,d as L,fa as E}from"./chunk-MFE4UY5Z.js";import"./chunk-KVOCOCYJ.js";import{parentPort as N}from"worker_threads";import{Parser as w,Language as U}from"web-tree-sitter";import*as O from"path";import*as D from"fs";import{createHash as H}from"crypto";function h(e){return H(P).update(e.text).digest("hex")}var x=new L(e=>N?.postMessage(e));process.on("uncaughtException",e=>{x.error(a.WORKER_UNCAUGHT_EXCEPTION,{error:e instanceof Error?e.message:String(e)})});process.on("unhandledRejection",e=>{x.error(a.WORKER_UNHANDLED_REJECTION,{error:e instanceof Error?e.message:String(e)})});var S=!1,b=null;function G(){return b??=_(),b}var C=new Map;function K(e){let t=C.get(e);return t||(t=U.load(e),C.set(e,t)),t}function Y(e){let t=[],n=e.matchAll(/import\s+{([^}]+)}\s+from\s+['"]([^'"]+)['"]/g);for(let r of n)t.push({localName:r[1].trim(),originalName:r[1].trim(),modulePath:r[2]});return t}function F(e){return e.childForFieldName("name")?.text||e.descendantsOfType("identifier")[0]?.text||a.ANONYMOUS_NAME}function Q(e){let t=e.childForFieldName("declarator")?.childForFieldName("declarator");if(t)return t.type===c.QUALIFIED_IDENTIFIER?t.childForFieldName("name")?.text??a.ANONYMOUS_NAME:t.text}function V(e){let t=e.childForFieldName("name");if(t)return t.text;let n=Q(e);if(n)return n;let r=new Set([c.VARIABLE_DECLARATOR,c.ASSIGNMENT_EXPRESSION,c.PAIR,c.PUBLIC_FIELD_DEFINITION]),o=e.parent;for(;o&&o.type!==c.ARGUMENTS;){if(r.has(o.type)){let s=o.childForFieldName("name")||o.childForFieldName("key")||o.childForFieldName("left");if(s)return s.text}o=o.parent}return a.ANONYMOUS_NAME}function W(e){return e.childForFieldName("function")||e.childForFieldName("expression")||e.childForFieldName("type")||e.childForFieldName("name")||e.childForFieldName("method")||e}function J(e){let t=W(e),n=t.namedChildren,r=n[n.length-1],o=n.length>=2?n[n.length-2]:void 0;if(!r||!o)return{targetFunction:f(t.text),calleeName:t.text,calleeKind:"bare"};if(!j.has(r.type))return{targetFunction:f(t.text),calleeKind:"computed"};let s=r.text,i=o.text;return i.includes("(")?{targetFunction:f(t.text),calleeName:s,receiverText:i,calleeKind:"arg-chain"}:{targetFunction:f(t.text),calleeName:s,receiverText:i,calleeKind:i==="this"||i==="super"?"this":"member"}}function f(e){return e.replace(/\s+/g,"")}var j=new Set(["identifier","property_identifier","field_identifier","shorthand_property_identifier","attribute"]);function B(e){return((e.childForFieldName("property")||e.childForFieldName("field")||e.childForFieldName("attribute")||e.childForFieldName("name")||e.childForFieldName("method"))??e).startPosition}function g(e,t){let n=e.parent;for(;n;){if(t.has(n.id))return F(n);n=n.parent}return a.ANONYMOUS_NAME}function v(e){return e.type===c.TYPE_IDENTIFIER?e.text:e.descendantsOfType(c.TYPE_IDENTIFIER)[0]?.text}function X(e){let t=e.parent;for(;t;){if(t.type===c.IMPL_ITEM){let n=t.childForFieldName("type");return n?v(n):void 0}t=t.parent}}function z(e){let n=e.childForFieldName("receiver")?.namedChild(0)?.childForFieldName("type");return n?v(n):void 0}function Z(e){let n=e.childForFieldName("declarator")?.childForFieldName("declarator");if(n?.type!==c.QUALIFIED_IDENTIFIER)return;let r=n.childForFieldName("scope");if(r)return r.type===c.QUALIFIED_IDENTIFIER?r.childForFieldName("name")?.text:r.text}function $(e){return X(e)??z(e)??Z(e)}function q(e,t,n){let r=t.extractClasses(e.rootNode);for(let o of r)n.push({name:F(o),startLine:o.startPosition.row,endLine:o.endPosition.row,methods:[],contentHash:h(o)});return r}var ee=new Set(["arrow_function","function_expression"]);function te(e,t,n){let r=t.extractVariables?.(e.rootNode)??[];for(let o of r){let s=o.childForFieldName("value");s&&ee.has(s.type)||n.push({name:F(o),startLine:o.startPosition.row,endLine:o.endPosition.row,contentHash:h(o)})}return r}function ne(e,t,n,r){let o=new Set(r.map(i=>i.id)),s=t.extractFunctions(e.rootNode);for(let i of s){let d=g(i,o),l=d===a.ANONYMOUS_NAME?$(i):d;n.push({name:V(i),startLine:i.startPosition.row,endLine:i.endPosition.row,contentHash:h(i),containerName:l})}return s}function re(e,t,n,r){let o=new Set(n.map(i=>i.id)),s=t.extractCalls(e.rootNode);for(let i of s){if(r.length>=1e3)break;let d=B(i),l=J(i);r.push({sourceFunction:g(i,o),targetFunction:l.targetFunction,startLine:d.row,startColumn:d.column,calleeName:l.calleeName,receiverText:l.receiverText,calleeKind:l.calleeKind})}}function oe(e,t,n,r){if(!t.extractImplements)return;let o=new Set(n.map(s=>s.id));for(let s of t.extractImplements(e.rootNode))r.push({sourceClass:g(s,o),targetInterface:s.text})}function se(e,t,n,r){if(!t.extractExtends)return;let o=new Set(n.map(s=>s.id));for(let s of t.extractExtends(e.rootNode))r.push({sourceClass:g(s,o),targetClass:s.text})}var ie=new Set([E.TYPESCRIPT,E.JAVASCRIPT]),ae="Worker",ce="path",le="resolve",de="join",ue="__dirname";function me(e){if(e.type!=="call_expression")return!1;let t=e.childForFieldName("function");if(!t||t.type!=="member_expression")return!1;let n=t.childForFieldName("object")?.text,r=t.childForFieldName("property")?.text;return n===ce&&(r===le||r===de)}function ge(e){let t=e.childForFieldName("arguments");return!t||!t.namedChildren.some(o=>o?.type==="identifier"&&o.text===ue)?void 0:t.descendantsOfType("string")[0]?.text.replace(/['"]/g,"")}function pe(e,t){for(let n of e.rootNode.descendantsOfType(c.ASSIGNMENT_EXPRESSION)){if(!n)continue;let r=n.childForFieldName("left"),o=n.childForFieldName("right");if(r?.text!==t||!o||!me(o))continue;let s=ge(o);if(s)return s}}function fe(e,t){if(t.type==="string")return t.text.replace(/['"]/g,"");if(t.type==="identifier"||t.type==="member_expression")return pe(e,t.text)}function Ne(e,t,n,r){if(!ie.has(t))return;let o=new Set(n.map(s=>s.id));for(let s of e.rootNode.descendantsOfType("new_expression")){if(!s||s.childForFieldName("constructor")?.text!==ae)continue;let l=s.childForFieldName("arguments")?.namedChildren.find(p=>p!==null);if(!l)continue;let m=fe(e,l);m&&r.push({sourceFunction:g(s,o),targetPath:m})}}function Ee(e,t,n){let r=[],o=[],s=[],i=[],d=[],l=[],m=[],p=[],A=[],I=[];if(e){r.push(a.parsedViaTreeSitter(e.rootNode.childCount));try{let u=q(e,t,d),R=ne(e,t,i,u),M=t.extractImports(e.rootNode);o.push(...y(M)),te(e,t,l),re(e,t,R,m),oe(e,t,u,p),se(e,t,u,A),Ne(e,n,R,I),r.push(a.QUERIED_VIA_LANGUAGE_PROVIDER)}catch(u){r.push(a.providerQueryFailed(u instanceof Error?u.message:String(u)))}}return{imports:o,exports:s,functions:i,classes:d,variables:l,calls:m,implements:p,extends:A,workerSpawns:I,decisions:r}}function he(e,t){for(let n of e.drainQueryCompileFailures?.()??[])x.error(a.QUERY_COMPILE_FAILED,{language:t,kind:n.kind,pattern:n.pattern,message:n.message})}function xe(e,t,n,r){let o=new w;o.setLanguage(n),t.initQueries?.(n),he(t,r);let s=o.parse(e),i=Ee(s,t,r);return s&&s.delete(),o.delete(),i}async function Fe(e){S||(await w.init(),S=!0);let t=await G(),n=O.extname(e.filePath),r=t.getProviderForExtension(n);if(!r)return{taskId:e.taskId,success:!0,data:{imports:[],exports:[],functions:[],classes:[],calls:[],decisions:[a.noLanguageProviderForExtension(n)]}};let{wasmPath:o,attemptedPaths:s}=T(r.wasm_file);if(!D.existsSync(o))return{taskId:e.taskId,success:!0,data:{imports:Y(e.code),exports:[],functions:[],classes:[],calls:[],decisions:[a.wasmNotFound(e.language,s.join(", "))]}};let i=await K(o),d=xe(e.code,r,i,e.language);return{taskId:e.taskId,success:!0,data:d}}N?.on("message",async e=>{try{let t=await Fe(e);N?.postMessage(t)}catch(t){N?.postMessage({taskId:e.taskId,success:!1,error:t.stack||String(t)})}});export{Fe as buildParseResponse,ne as collectFunctionNodes,Ne as collectWorkerSpawns,J as getCalleeEvidence,he as reportQueryCompileFailures,V as resolveCallableName,T as resolveWasmPath};
2
+ import{c,d as a,e as y,f as _,h as T}from"./chunk-37SEBYD7.js";import{ca as P,d as L,fa as E}from"./chunk-RYKA3JKY.js";import"./chunk-KVOCOCYJ.js";import{parentPort as N}from"worker_threads";import{Parser as w,Language as U}from"web-tree-sitter";import*as O from"path";import*as D from"fs";import{createHash as H}from"crypto";function h(e){return H(P).update(e.text).digest("hex")}var x=new L(e=>N?.postMessage(e));process.on("uncaughtException",e=>{x.error(a.WORKER_UNCAUGHT_EXCEPTION,{error:e instanceof Error?e.message:String(e)})});process.on("unhandledRejection",e=>{x.error(a.WORKER_UNHANDLED_REJECTION,{error:e instanceof Error?e.message:String(e)})});var S=!1,b=null;function G(){return b??=_(),b}var C=new Map;function K(e){let t=C.get(e);return t||(t=U.load(e),C.set(e,t)),t}function Y(e){let t=[],n=e.matchAll(/import\s+{([^}]+)}\s+from\s+['"]([^'"]+)['"]/g);for(let r of n)t.push({localName:r[1].trim(),originalName:r[1].trim(),modulePath:r[2]});return t}function F(e){return e.childForFieldName("name")?.text||e.descendantsOfType("identifier")[0]?.text||a.ANONYMOUS_NAME}function Q(e){let t=e.childForFieldName("declarator")?.childForFieldName("declarator");if(t)return t.type===c.QUALIFIED_IDENTIFIER?t.childForFieldName("name")?.text??a.ANONYMOUS_NAME:t.text}function V(e){let t=e.childForFieldName("name");if(t)return t.text;let n=Q(e);if(n)return n;let r=new Set([c.VARIABLE_DECLARATOR,c.ASSIGNMENT_EXPRESSION,c.PAIR,c.PUBLIC_FIELD_DEFINITION]),o=e.parent;for(;o&&o.type!==c.ARGUMENTS;){if(r.has(o.type)){let s=o.childForFieldName("name")||o.childForFieldName("key")||o.childForFieldName("left");if(s)return s.text}o=o.parent}return a.ANONYMOUS_NAME}function W(e){return e.childForFieldName("function")||e.childForFieldName("expression")||e.childForFieldName("type")||e.childForFieldName("name")||e.childForFieldName("method")||e}function J(e){let t=W(e),n=t.namedChildren,r=n[n.length-1],o=n.length>=2?n[n.length-2]:void 0;if(!r||!o)return{targetFunction:f(t.text),calleeName:t.text,calleeKind:"bare"};if(!j.has(r.type))return{targetFunction:f(t.text),calleeKind:"computed"};let s=r.text,i=o.text;return i.includes("(")?{targetFunction:f(t.text),calleeName:s,receiverText:i,calleeKind:"arg-chain"}:{targetFunction:f(t.text),calleeName:s,receiverText:i,calleeKind:i==="this"||i==="super"?"this":"member"}}function f(e){return e.replace(/\s+/g,"")}var j=new Set(["identifier","property_identifier","field_identifier","shorthand_property_identifier","attribute"]);function B(e){return((e.childForFieldName("property")||e.childForFieldName("field")||e.childForFieldName("attribute")||e.childForFieldName("name")||e.childForFieldName("method"))??e).startPosition}function g(e,t){let n=e.parent;for(;n;){if(t.has(n.id))return F(n);n=n.parent}return a.ANONYMOUS_NAME}function v(e){return e.type===c.TYPE_IDENTIFIER?e.text:e.descendantsOfType(c.TYPE_IDENTIFIER)[0]?.text}function X(e){let t=e.parent;for(;t;){if(t.type===c.IMPL_ITEM){let n=t.childForFieldName("type");return n?v(n):void 0}t=t.parent}}function z(e){let n=e.childForFieldName("receiver")?.namedChild(0)?.childForFieldName("type");return n?v(n):void 0}function Z(e){let n=e.childForFieldName("declarator")?.childForFieldName("declarator");if(n?.type!==c.QUALIFIED_IDENTIFIER)return;let r=n.childForFieldName("scope");if(r)return r.type===c.QUALIFIED_IDENTIFIER?r.childForFieldName("name")?.text:r.text}function $(e){return X(e)??z(e)??Z(e)}function q(e,t,n){let r=t.extractClasses(e.rootNode);for(let o of r)n.push({name:F(o),startLine:o.startPosition.row,endLine:o.endPosition.row,methods:[],contentHash:h(o)});return r}var ee=new Set(["arrow_function","function_expression"]);function te(e,t,n){let r=t.extractVariables?.(e.rootNode)??[];for(let o of r){let s=o.childForFieldName("value");s&&ee.has(s.type)||n.push({name:F(o),startLine:o.startPosition.row,endLine:o.endPosition.row,contentHash:h(o)})}return r}function ne(e,t,n,r){let o=new Set(r.map(i=>i.id)),s=t.extractFunctions(e.rootNode);for(let i of s){let d=g(i,o),l=d===a.ANONYMOUS_NAME?$(i):d;n.push({name:V(i),startLine:i.startPosition.row,endLine:i.endPosition.row,contentHash:h(i),containerName:l})}return s}function re(e,t,n,r){let o=new Set(n.map(i=>i.id)),s=t.extractCalls(e.rootNode);for(let i of s){if(r.length>=1e3)break;let d=B(i),l=J(i);r.push({sourceFunction:g(i,o),targetFunction:l.targetFunction,startLine:d.row,startColumn:d.column,calleeName:l.calleeName,receiverText:l.receiverText,calleeKind:l.calleeKind})}}function oe(e,t,n,r){if(!t.extractImplements)return;let o=new Set(n.map(s=>s.id));for(let s of t.extractImplements(e.rootNode))r.push({sourceClass:g(s,o),targetInterface:s.text})}function se(e,t,n,r){if(!t.extractExtends)return;let o=new Set(n.map(s=>s.id));for(let s of t.extractExtends(e.rootNode))r.push({sourceClass:g(s,o),targetClass:s.text})}var ie=new Set([E.TYPESCRIPT,E.JAVASCRIPT]),ae="Worker",ce="path",le="resolve",de="join",ue="__dirname";function me(e){if(e.type!=="call_expression")return!1;let t=e.childForFieldName("function");if(!t||t.type!=="member_expression")return!1;let n=t.childForFieldName("object")?.text,r=t.childForFieldName("property")?.text;return n===ce&&(r===le||r===de)}function ge(e){let t=e.childForFieldName("arguments");return!t||!t.namedChildren.some(o=>o?.type==="identifier"&&o.text===ue)?void 0:t.descendantsOfType("string")[0]?.text.replace(/['"]/g,"")}function pe(e,t){for(let n of e.rootNode.descendantsOfType(c.ASSIGNMENT_EXPRESSION)){if(!n)continue;let r=n.childForFieldName("left"),o=n.childForFieldName("right");if(r?.text!==t||!o||!me(o))continue;let s=ge(o);if(s)return s}}function fe(e,t){if(t.type==="string")return t.text.replace(/['"]/g,"");if(t.type==="identifier"||t.type==="member_expression")return pe(e,t.text)}function Ne(e,t,n,r){if(!ie.has(t))return;let o=new Set(n.map(s=>s.id));for(let s of e.rootNode.descendantsOfType("new_expression")){if(!s||s.childForFieldName("constructor")?.text!==ae)continue;let l=s.childForFieldName("arguments")?.namedChildren.find(p=>p!==null);if(!l)continue;let m=fe(e,l);m&&r.push({sourceFunction:g(s,o),targetPath:m})}}function Ee(e,t,n){let r=[],o=[],s=[],i=[],d=[],l=[],m=[],p=[],A=[],I=[];if(e){r.push(a.parsedViaTreeSitter(e.rootNode.childCount));try{let u=q(e,t,d),R=ne(e,t,i,u),M=t.extractImports(e.rootNode);o.push(...y(M)),te(e,t,l),re(e,t,R,m),oe(e,t,u,p),se(e,t,u,A),Ne(e,n,R,I),r.push(a.QUERIED_VIA_LANGUAGE_PROVIDER)}catch(u){r.push(a.providerQueryFailed(u instanceof Error?u.message:String(u)))}}return{imports:o,exports:s,functions:i,classes:d,variables:l,calls:m,implements:p,extends:A,workerSpawns:I,decisions:r}}function he(e,t){for(let n of e.drainQueryCompileFailures?.()??[])x.error(a.QUERY_COMPILE_FAILED,{language:t,kind:n.kind,pattern:n.pattern,message:n.message})}function xe(e,t,n,r){let o=new w;o.setLanguage(n),t.initQueries?.(n),he(t,r);let s=o.parse(e),i=Ee(s,t,r);return s&&s.delete(),o.delete(),i}async function Fe(e){S||(await w.init(),S=!0);let t=await G(),n=O.extname(e.filePath),r=t.getProviderForExtension(n);if(!r)return{taskId:e.taskId,success:!0,data:{imports:[],exports:[],functions:[],classes:[],calls:[],decisions:[a.noLanguageProviderForExtension(n)]}};let{wasmPath:o,attemptedPaths:s}=T(r.wasm_file);if(!D.existsSync(o))return{taskId:e.taskId,success:!0,data:{imports:Y(e.code),exports:[],functions:[],classes:[],calls:[],decisions:[a.wasmNotFound(e.language,s.join(", "))]}};let i=await K(o),d=xe(e.code,r,i,e.language);return{taskId:e.taskId,success:!0,data:d}}N?.on("message",async e=>{try{let t=await Fe(e);N?.postMessage(t)}catch(t){N?.postMessage({taskId:e.taskId,success:!1,error:t.stack||String(t)})}});export{Fe as buildParseResponse,ne as collectFunctionNodes,Ne as collectWorkerSpawns,J as getCalleeEvidence,he as reportQueryCompileFailures,V as resolveCallableName,T as resolveWasmPath};
3
3
  //# sourceMappingURL=ast-worker.js.map
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{ba as F,fa as u,ga as v,ha as k,ia as Y,ja as B,ka as G,la as H,ma as Q,na as V,oa as j,pa as W,qa as q}from"./chunk-MFE4UY5Z.js";var J="anonymous";var Pt="AstWorkerCrashError",Ft={ARGUMENTS:"arguments",VARIABLE_DECLARATOR:"variable_declarator",ASSIGNMENT_EXPRESSION:"assignment_expression",PAIR:"pair",PUBLIC_FIELD_DEFINITION:"public_field_definition",IMPL_ITEM:"impl_item",TYPE_IDENTIFIER:"type_identifier",POINTER_TYPE:"pointer_type",QUALIFIED_IDENTIFIER:"qualified_identifier"},gt={PARSE_FAILURE_NO_DETAIL:"parse returned success=false with no error detail",PARSE_FAILURE_RESULT:"AST parse returned failure result",PARSE_THREW:"AST parse threw (worker crash or rejection)",WORKER_UNCAUGHT_EXCEPTION:"AST worker uncaughtException",QUERY_COMPILE_FAILED:"AST language query failed to compile; using fallback",WORKER_UNHANDLED_REJECTION:"AST worker unhandledRejection",WORKER_EXITED_DURING_SHUTDOWN:"AST worker exited during pool shutdown (expected)",WORKER_CRASHED_EXITED:"AST worker crashed/exited",WORKER_EXITED_UNEXPECTEDLY:"Worker exited unexpectedly",UNKNOWN_FILE:"(unknown file)",PARSE_CACHE_HIT:"AST parse cache hit",CACHE_METRICS_AND_QUEUE_PERFORMANCE:"AST cache metrics and queue performance",TASK_TIMED_OUT_TERMINATING:"AST worker task timed out \u2014 terminating stuck worker",WORKER_TERMINATE_FAILED:"AST worker terminate() rejected \u2014 forced termination did not complete",QUERIED_VIA_LANGUAGE_PROVIDER:"Queried nodes using @workspace/ast-core LanguageProvider",ANONYMOUS_NAME:J,workerCrashWhileParsing:n=>`AST worker crashed while parsing ${n}: `,taskTimedOutAfterMs:(n,e)=>`AST worker task ${n} timed out after ${e}ms`,workerExitedWithCode:n=>`Worker exited with code ${n}`,noLanguageProviderForExtension:n=>`No language provider registered for extension ${n}`,wasmNotFound:(n,e)=>`WASM not found for ${n}, AST parsing skipped (Regex fallback used). Tried paths: ${e}`,parsedViaTreeSitter:n=>`Parsed via web-tree-sitter (nodes: ${n})`,providerQueryFailed:n=>`ast-core provider query failed: ${n}`};var p={FILE:"file",CLASS:"class",FUNCTION:"function",CALL:"call",METHOD_CALL:"method_call",IMPORT:"import",API_CONTRACT:"api_contract"};var N={IDENTIFIER:"identifier",SCOPED_IDENTIFIER:"scoped_identifier",QUALIFIED_IDENTIFIER:"qualified_identifier",DOTTED_NAME:"dotted_name",ALIASED_IMPORT:"aliased_import",USE_AS_CLAUSE:"use_as_clause",USE_WILDCARD:"use_wildcard",SCOPED_USE_LIST:"scoped_use_list",USE_LIST:"use_list",DOT:"dot",BLANK_IDENTIFIER:"blank_identifier",NAMESPACE_USE_DECLARATION:"namespace_use_declaration",INCLUDE_EXPRESSION:"include_expression",INCLUDE_ONCE_EXPRESSION:"include_once_expression",REQUIRE_EXPRESSION:"require_expression",REQUIRE_ONCE_EXPRESSION:"require_once_expression",IMPORT_STATEMENT:"import_statement",IMPORT_FROM_STATEMENT:"import_from_statement",USE_DECLARATION:"use_declaration",IMPORT_DECLARATION:"import_declaration",PREPROC_INCLUDE:"preproc_include",USING_DECLARATION:"using_declaration",CALL:"call",USING_DIRECTIVE:"using_directive",CALL_EXPRESSION:"call_expression",METHOD_INVOCATION:"method_invocation",EXPLICIT_CONSTRUCTOR_INVOCATION:"explicit_constructor_invocation",COMMAND_CALL:"command_call",FUNCTION_CALL_EXPRESSION:"function_call_expression",MEMBER_CALL_EXPRESSION:"member_call_expression",SCOPED_CALL_EXPRESSION:"scoped_call_expression",INVOCATION_EXPRESSION:"invocation_expression",OBJECT_CREATION_EXPRESSION:"object_creation_expression",MEMBER_EXPRESSION:"member_expression",ATTRIBUTE:"attribute",MEMBER_ACCESS_EXPRESSION:"member_access_expression",VARIABLE_DECLARATION:"variable_declaration",LEXICAL_DECLARATION:"lexical_declaration",VARIABLE_DECLARATOR:"variable_declarator",ARROW_FUNCTION:"arrow_function",FUNCTION_DECLARATION:"function_declaration",METHOD_DEFINITION:"method_definition",CLASS_DECLARATION:"class_declaration",INTERFACE_DECLARATION:"interface_declaration",TYPE_ALIAS_DECLARATION:"type_alias_declaration",EXPORT_STATEMENT:"export_statement"};var d="*",_e=["require","require_relative","load"],K="this",Ae="new";function wt(n){let e=[];for(let o of n){let r=o.type,i=pe[r];if(i){i(o,e);continue}if(be(r)){ke(o,r,e);continue}Be(o,e)}return e}var pe={[N.IMPORT_STATEMENT]:Ce,[N.EXPORT_STATEMENT]:Oe,[N.IMPORT_FROM_STATEMENT]:Se,[N.USE_DECLARATION]:$e,[N.IMPORT_DECLARATION]:Ue,[N.PREPROC_INCLUDE]:Me,[N.USING_DECLARATION]:ye,[N.CALL]:we,[N.USING_DIRECTIVE]:Ye};function Ce(n,e){let o=n.descendantsOfType("string").pop();if(!o)return;let r=o.text.replace(/['"]/g,""),i=n.descendantsOfType("namespace_import")[0];if(i){let l=i.descendantsOfType("identifier")[0];l&&e.push({localName:l.text,originalName:d,modulePath:r});return}let s=n.descendantsOfType("named_imports")[0];if(s){let l=s.descendantsOfType("import_specifier");for(let I of l){if(!I)continue;let E=I.childForFieldName("name"),f=I.childForFieldName("alias");if(E){let S=E.text,C=f?f.text:S;e.push({localName:C,originalName:S,modulePath:r})}}return}let a=n.descendantsOfType("identifier")[0];a&&e.push({localName:a.text,originalName:d,modulePath:r})}function Oe(n,e){let o=n.childForFieldName("source");if(!o)return;let r=o.text.replace(/['"]/g,""),i=n.descendantsOfType("export_clause")[0];if(i)for(let s of i.descendantsOfType("export_specifier")){if(!s)continue;let a=s.childForFieldName("name");if(!a)continue;let l=s.childForFieldName("alias");e.push({localName:l?l.text:a.text,originalName:a.text,modulePath:r,viaReexport:!0})}}function Se(n,e){let o=n.childForFieldName("module_name");if(!o)return;let r=o.text;if(n.descendantsOfType("wildcard_import")[0])return;n.childForFieldName("name")&&Ge(n,r,e)}function Re(n,e){let o=n.childForFieldName("path"),r=n.childForFieldName("alias");o&&r&&e.push({localName:r.text,originalName:d,modulePath:o.text})}function Le(n,e,o){let r=n.childForFieldName("path"),i=n.childForFieldName("alias");r&&i&&o.push({localName:i.text,originalName:d,modulePath:`${e}::${r.text}`})}function he(n,e,o){let r=n.descendantsOfType("identifier").pop();r&&o.push({localName:r.text,originalName:d,modulePath:`${e}::${n.text}`})}function De(n,e,o){if(n.type===N.USE_AS_CLAUSE){Le(n,e,o);return}if(n.type===N.IDENTIFIER){o.push({localName:n.text,originalName:d,modulePath:`${e}::${n.text}`});return}n.type===N.SCOPED_IDENTIFIER&&he(n,e,o)}function Pe(n,e){let o=n.childForFieldName("path"),r=n.childForFieldName("list");if(!o||!r)return;let i=o.text;for(let s of r.namedChildren)s&&De(s,i,e)}function Fe(n,e){let o=n.descendantsOfType("identifier"),r=o[o.length-1];r&&e.push({localName:r.text,originalName:d,modulePath:n.text})}function ge(n,e){for(let o of n.namedChildren)o&&o.type===N.IDENTIFIER&&e.push({localName:o.text,originalName:d,modulePath:o.text})}function $e(n,e){let o=n.childForFieldName("argument");if(o){if(o.type===N.USE_AS_CLAUSE){Re(o,e);return}if(o.type!==N.USE_WILDCARD){if(o.type===N.SCOPED_USE_LIST){Pe(o,e);return}if(o.type===N.SCOPED_IDENTIFIER||o.type===N.IDENTIFIER){Fe(o,e);return}o.type===N.USE_LIST&&ge(o,e)}}}function xe(n,e){let o=n.childForFieldName("path");if(!o)return;let r=o.text.replace(/['"]/g,""),i=n.childForFieldName("name");if(i){if(i.type===N.DOT||i.type===N.BLANK_IDENTIFIER)return;e.push({localName:i.text,originalName:d,modulePath:r})}else{let s=r.split("/"),a=s[s.length-1];e.push({localName:a,originalName:d,modulePath:r})}}function Ue(n,e){let o=n.descendantsOfType("import_spec_list")[0];if(!o)return;let r=o.descendantsOfType("import_spec");for(let i of r)i&&xe(i,e)}function Me(n,e){let o=n.childForFieldName("path");if(o){let r=o.text.replace(/[<>"']/g,"");e.push({localName:r,originalName:d,modulePath:r})}}function ye(n,e){let o=n.namedChildren;for(let r of o)if(r)if(r.type===N.QUALIFIED_IDENTIFIER){let i=r.descendantsOfType("identifier"),s=i[i.length-1];s&&e.push({localName:s.text,originalName:d,modulePath:r.text})}else r.type===N.IDENTIFIER&&e.push({localName:r.text,originalName:d,modulePath:r.text})}function we(n,e){let o=n.childForFieldName("method");if(!o)return;let r=o.text;if(!_e.includes(r))return;let i=n.childForFieldName("arguments");if(!i)return;let s=i.descendantsOfType("string_content")[0]||i.descendantsOfType("string")[0];if(!s)return;let a=s.text.replace(/['"]/g,""),l=a.replace(/\.rb$/,"");e.push({localName:l,originalName:d,modulePath:a})}function be(n){return n===N.NAMESPACE_USE_DECLARATION||n===N.INCLUDE_EXPRESSION||n===N.INCLUDE_ONCE_EXPRESSION||n===N.REQUIRE_EXPRESSION||n===N.REQUIRE_ONCE_EXPRESSION}function Xe(n,e){let o=n.descendantsOfType("qualified_name")[0]||n.descendantsOfType("name")[0];if(o){let r=o.text,i=r.split("\\"),s=i[i.length-1];e.push({localName:s,originalName:d,modulePath:r})}}function ve(n,e){let o=n.descendantsOfType("string")[0]||n.descendantsOfType("string_content")[0];if(o){let r=o.text.replace(/['"]/g,"");e.push({localName:r,originalName:d,modulePath:r})}}function ke(n,e,o){e===N.NAMESPACE_USE_DECLARATION?Xe(n,o):ve(n,o)}function Ye(n,e){let o=n.descendantsOfType("qualified_name")[0]||n.descendantsOfType("identifier")[0];if(o){let r=o.text,i=r.split("."),s=i[i.length-1];e.push({localName:s,originalName:d,modulePath:r})}}function Be(n,e){let o=n.descendantsOfType("string").pop();if(!o)return;let r=o.text.replace(/['"]/g,""),i=n.descendantsOfType("identifier");for(let s of i)s&&(e.some(a=>a.localName===s.text)||e.push({localName:s.text,originalName:s.text,modulePath:r}))}function Ge(n,e,o){if(n.childForFieldName("name")){for(let i of n.namedChildren)if(i)if(i.type===N.ALIASED_IMPORT){let s=i.childForFieldName("name"),a=i.childForFieldName("alias");s&&a&&o.push({localName:a.text,originalName:s.text,modulePath:e})}else if(i.type===N.DOTTED_NAME){let s=i.descendantsOfType("identifier"),a=s[s.length-1];a&&o.push({localName:a.text,originalName:i.text,modulePath:e})}else i.type===N.IDENTIFIER&&o.push({localName:i.text,originalName:i.text,modulePath:e})}}function He(n){let e=n.childForFieldName("function");if(!e)return{isMethodCall:!1,methodName:""};if(e.type===N.MEMBER_EXPRESSION){let o=e.childForFieldName("property"),r=e.childForFieldName("object");if(o)return{isMethodCall:!0,methodName:o.text,objectName:r?.text}}return{isMethodCall:!1,methodName:e.text}}function Qe(n){let e=n.childForFieldName("function");if(!e)return{isMethodCall:!1,methodName:""};if(e.type===N.ATTRIBUTE){let o=e.childForFieldName("attribute"),r=e.childForFieldName("object");if(o)return{isMethodCall:!0,methodName:o.text,objectName:r?.text}}return{isMethodCall:!1,methodName:e.text}}function Ve(n){let e=n.childForFieldName("name"),o=n.childForFieldName("object");if(e)return{isMethodCall:!0,methodName:e.text,objectName:o?.text}}function je(n){return{isMethodCall:!0,methodName:n.childForFieldName("constructor")?.text||K,objectName:K}}function We(n){let e=n.childForFieldName("method");if(!e)return;let o=n.childForFieldName("receiver");return o?{isMethodCall:!0,methodName:e.text,objectName:o.text}:{isMethodCall:!1,methodName:e.text}}function M(n){let e=n.type,r=n.childForFieldName("name")?.text||"";if(e===N.MEMBER_CALL_EXPRESSION){let i=n.childForFieldName("object");return{isMethodCall:!0,methodName:r,objectName:i?.text}}if(e===N.SCOPED_CALL_EXPRESSION){let i=n.childForFieldName("scope");return{isMethodCall:!0,methodName:r,objectName:i?.text}}return{isMethodCall:!1,methodName:r}}function qe(n){let e=n.childForFieldName("function")||n.namedChildren[0];if(e&&e.type===N.MEMBER_ACCESS_EXPRESSION){let o=e.childForFieldName("name"),r=e.childForFieldName("expression");if(o)return{isMethodCall:!0,methodName:o.text,objectName:r?.text}}if(e)return{isMethodCall:!1,methodName:e.text}}function Je(n){let e=n.childForFieldName("type");return{isMethodCall:!0,methodName:Ae,objectName:e?.text}}var bt={[N.CALL_EXPRESSION]:He,[N.CALL]:Qe,[N.METHOD_INVOCATION]:Ve,[N.EXPLICIT_CONSTRUCTOR_INVOCATION]:je,[N.COMMAND_CALL]:We,[N.FUNCTION_CALL_EXPRESSION]:M,[N.MEMBER_CALL_EXPRESSION]:M,[N.SCOPED_CALL_EXPRESSION]:M,[N.INVOCATION_EXPRESSION]:qe,[N.OBJECT_CREATION_EXPRESSION]:Je};var Ke=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i,L=class n extends Date{#t=!1;#n=!1;#e=null;constructor(e){let o=!0,r=!0,i="Z";if(typeof e=="string"){let s=e.match(Ke);s?(s[1]||(o=!1,e=`0000-01-01T${e}`),r=!!s[2],r&&e[10]===" "&&(e=e.replace(" ","T")),s[2]&&+s[2]>23?e="":(i=s[3]||null,e=e.toUpperCase(),!i&&r&&(e+="Z"))):e=""}super(e),isNaN(this.getTime())||(this.#t=o,this.#n=r,this.#e=i)}isDateTime(){return this.#t&&this.#n}isLocal(){return!this.#t||!this.#n||!this.#e}isDate(){return this.#t&&!this.#n}isTime(){return this.#n&&!this.#t}isValid(){return this.#t||this.#n}toISOString(){let e=super.toISOString();if(this.isDate())return e.slice(0,10);if(this.isTime())return e.slice(11,23);if(this.#e===null)return e.slice(0,-1);if(this.#e==="Z")return e;let o=+this.#e.slice(1,3)*60+ +this.#e.slice(4,6);return o=this.#e[0]==="-"?o:-o,new Date(this.getTime()-o*6e4).toISOString().slice(0,-1)+this.#e}static wrapAsOffsetDateTime(e,o="Z"){let r=new n(e);return r.#e=o,r}static wrapAsLocalDateTime(e){let o=new n(e);return o.#e=null,o}static wrapAsLocalDate(e){let o=new n(e);return o.#n=!1,o.#e=null,o}static wrapAsLocalTime(e){let o=new n(e);return o.#t=!1,o.#e=null,o}};function ze(n,e){let o=n.slice(0,e).split(/\r\n|\n|\r/g);return[o.length,o.pop().length+1]}function Ze(n,e,o){let r=n.split(/\r\n|\n|\r/g),i="",s=(Math.log10(e+1)|0)+1;for(let a=e-1;a<=e+1;a++){let l=r[a-1];l&&(i+=a.toString().padEnd(s," "),i+=": ",i+=l,i+=`
2
+ import{ba as F,fa as u,ga as v,ha as k,ia as Y,ja as B,ka as G,la as H,ma as Q,na as V,oa as j,pa as W,qa as q}from"./chunk-RYKA3JKY.js";var J="anonymous";var Pt="AstWorkerCrashError",Ft={ARGUMENTS:"arguments",VARIABLE_DECLARATOR:"variable_declarator",ASSIGNMENT_EXPRESSION:"assignment_expression",PAIR:"pair",PUBLIC_FIELD_DEFINITION:"public_field_definition",IMPL_ITEM:"impl_item",TYPE_IDENTIFIER:"type_identifier",POINTER_TYPE:"pointer_type",QUALIFIED_IDENTIFIER:"qualified_identifier"},gt={PARSE_FAILURE_NO_DETAIL:"parse returned success=false with no error detail",PARSE_FAILURE_RESULT:"AST parse returned failure result",PARSE_THREW:"AST parse threw (worker crash or rejection)",WORKER_UNCAUGHT_EXCEPTION:"AST worker uncaughtException",QUERY_COMPILE_FAILED:"AST language query failed to compile; using fallback",WORKER_UNHANDLED_REJECTION:"AST worker unhandledRejection",WORKER_EXITED_DURING_SHUTDOWN:"AST worker exited during pool shutdown (expected)",WORKER_CRASHED_EXITED:"AST worker crashed/exited",WORKER_EXITED_UNEXPECTEDLY:"Worker exited unexpectedly",UNKNOWN_FILE:"(unknown file)",PARSE_CACHE_HIT:"AST parse cache hit",CACHE_METRICS_AND_QUEUE_PERFORMANCE:"AST cache metrics and queue performance",TASK_TIMED_OUT_TERMINATING:"AST worker task timed out \u2014 terminating stuck worker",WORKER_TERMINATE_FAILED:"AST worker terminate() rejected \u2014 forced termination did not complete",QUERIED_VIA_LANGUAGE_PROVIDER:"Queried nodes using @workspace/ast-core LanguageProvider",ANONYMOUS_NAME:J,workerCrashWhileParsing:n=>`AST worker crashed while parsing ${n}: `,taskTimedOutAfterMs:(n,e)=>`AST worker task ${n} timed out after ${e}ms`,workerExitedWithCode:n=>`Worker exited with code ${n}`,noLanguageProviderForExtension:n=>`No language provider registered for extension ${n}`,wasmNotFound:(n,e)=>`WASM not found for ${n}, AST parsing skipped (Regex fallback used). Tried paths: ${e}`,parsedViaTreeSitter:n=>`Parsed via web-tree-sitter (nodes: ${n})`,providerQueryFailed:n=>`ast-core provider query failed: ${n}`};var p={FILE:"file",CLASS:"class",FUNCTION:"function",CALL:"call",METHOD_CALL:"method_call",IMPORT:"import",API_CONTRACT:"api_contract"};var N={IDENTIFIER:"identifier",SCOPED_IDENTIFIER:"scoped_identifier",QUALIFIED_IDENTIFIER:"qualified_identifier",DOTTED_NAME:"dotted_name",ALIASED_IMPORT:"aliased_import",USE_AS_CLAUSE:"use_as_clause",USE_WILDCARD:"use_wildcard",SCOPED_USE_LIST:"scoped_use_list",USE_LIST:"use_list",DOT:"dot",BLANK_IDENTIFIER:"blank_identifier",NAMESPACE_USE_DECLARATION:"namespace_use_declaration",INCLUDE_EXPRESSION:"include_expression",INCLUDE_ONCE_EXPRESSION:"include_once_expression",REQUIRE_EXPRESSION:"require_expression",REQUIRE_ONCE_EXPRESSION:"require_once_expression",IMPORT_STATEMENT:"import_statement",IMPORT_FROM_STATEMENT:"import_from_statement",USE_DECLARATION:"use_declaration",IMPORT_DECLARATION:"import_declaration",PREPROC_INCLUDE:"preproc_include",USING_DECLARATION:"using_declaration",CALL:"call",USING_DIRECTIVE:"using_directive",CALL_EXPRESSION:"call_expression",METHOD_INVOCATION:"method_invocation",EXPLICIT_CONSTRUCTOR_INVOCATION:"explicit_constructor_invocation",COMMAND_CALL:"command_call",FUNCTION_CALL_EXPRESSION:"function_call_expression",MEMBER_CALL_EXPRESSION:"member_call_expression",SCOPED_CALL_EXPRESSION:"scoped_call_expression",INVOCATION_EXPRESSION:"invocation_expression",OBJECT_CREATION_EXPRESSION:"object_creation_expression",MEMBER_EXPRESSION:"member_expression",ATTRIBUTE:"attribute",MEMBER_ACCESS_EXPRESSION:"member_access_expression",VARIABLE_DECLARATION:"variable_declaration",LEXICAL_DECLARATION:"lexical_declaration",VARIABLE_DECLARATOR:"variable_declarator",ARROW_FUNCTION:"arrow_function",FUNCTION_DECLARATION:"function_declaration",METHOD_DEFINITION:"method_definition",CLASS_DECLARATION:"class_declaration",INTERFACE_DECLARATION:"interface_declaration",TYPE_ALIAS_DECLARATION:"type_alias_declaration",EXPORT_STATEMENT:"export_statement"};var d="*",_e=["require","require_relative","load"],K="this",Ae="new";function wt(n){let e=[];for(let o of n){let r=o.type,i=pe[r];if(i){i(o,e);continue}if(be(r)){ke(o,r,e);continue}Be(o,e)}return e}var pe={[N.IMPORT_STATEMENT]:Ce,[N.EXPORT_STATEMENT]:Oe,[N.IMPORT_FROM_STATEMENT]:Se,[N.USE_DECLARATION]:$e,[N.IMPORT_DECLARATION]:Ue,[N.PREPROC_INCLUDE]:Me,[N.USING_DECLARATION]:ye,[N.CALL]:we,[N.USING_DIRECTIVE]:Ye};function Ce(n,e){let o=n.descendantsOfType("string").pop();if(!o)return;let r=o.text.replace(/['"]/g,""),i=n.descendantsOfType("namespace_import")[0];if(i){let l=i.descendantsOfType("identifier")[0];l&&e.push({localName:l.text,originalName:d,modulePath:r});return}let s=n.descendantsOfType("named_imports")[0];if(s){let l=s.descendantsOfType("import_specifier");for(let I of l){if(!I)continue;let E=I.childForFieldName("name"),f=I.childForFieldName("alias");if(E){let S=E.text,C=f?f.text:S;e.push({localName:C,originalName:S,modulePath:r})}}return}let a=n.descendantsOfType("identifier")[0];a&&e.push({localName:a.text,originalName:d,modulePath:r})}function Oe(n,e){let o=n.childForFieldName("source");if(!o)return;let r=o.text.replace(/['"]/g,""),i=n.descendantsOfType("export_clause")[0];if(i)for(let s of i.descendantsOfType("export_specifier")){if(!s)continue;let a=s.childForFieldName("name");if(!a)continue;let l=s.childForFieldName("alias");e.push({localName:l?l.text:a.text,originalName:a.text,modulePath:r,viaReexport:!0})}}function Se(n,e){let o=n.childForFieldName("module_name");if(!o)return;let r=o.text;if(n.descendantsOfType("wildcard_import")[0])return;n.childForFieldName("name")&&Ge(n,r,e)}function Re(n,e){let o=n.childForFieldName("path"),r=n.childForFieldName("alias");o&&r&&e.push({localName:r.text,originalName:d,modulePath:o.text})}function Le(n,e,o){let r=n.childForFieldName("path"),i=n.childForFieldName("alias");r&&i&&o.push({localName:i.text,originalName:d,modulePath:`${e}::${r.text}`})}function he(n,e,o){let r=n.descendantsOfType("identifier").pop();r&&o.push({localName:r.text,originalName:d,modulePath:`${e}::${n.text}`})}function De(n,e,o){if(n.type===N.USE_AS_CLAUSE){Le(n,e,o);return}if(n.type===N.IDENTIFIER){o.push({localName:n.text,originalName:d,modulePath:`${e}::${n.text}`});return}n.type===N.SCOPED_IDENTIFIER&&he(n,e,o)}function Pe(n,e){let o=n.childForFieldName("path"),r=n.childForFieldName("list");if(!o||!r)return;let i=o.text;for(let s of r.namedChildren)s&&De(s,i,e)}function Fe(n,e){let o=n.descendantsOfType("identifier"),r=o[o.length-1];r&&e.push({localName:r.text,originalName:d,modulePath:n.text})}function ge(n,e){for(let o of n.namedChildren)o&&o.type===N.IDENTIFIER&&e.push({localName:o.text,originalName:d,modulePath:o.text})}function $e(n,e){let o=n.childForFieldName("argument");if(o){if(o.type===N.USE_AS_CLAUSE){Re(o,e);return}if(o.type!==N.USE_WILDCARD){if(o.type===N.SCOPED_USE_LIST){Pe(o,e);return}if(o.type===N.SCOPED_IDENTIFIER||o.type===N.IDENTIFIER){Fe(o,e);return}o.type===N.USE_LIST&&ge(o,e)}}}function xe(n,e){let o=n.childForFieldName("path");if(!o)return;let r=o.text.replace(/['"]/g,""),i=n.childForFieldName("name");if(i){if(i.type===N.DOT||i.type===N.BLANK_IDENTIFIER)return;e.push({localName:i.text,originalName:d,modulePath:r})}else{let s=r.split("/"),a=s[s.length-1];e.push({localName:a,originalName:d,modulePath:r})}}function Ue(n,e){let o=n.descendantsOfType("import_spec_list")[0];if(!o)return;let r=o.descendantsOfType("import_spec");for(let i of r)i&&xe(i,e)}function Me(n,e){let o=n.childForFieldName("path");if(o){let r=o.text.replace(/[<>"']/g,"");e.push({localName:r,originalName:d,modulePath:r})}}function ye(n,e){let o=n.namedChildren;for(let r of o)if(r)if(r.type===N.QUALIFIED_IDENTIFIER){let i=r.descendantsOfType("identifier"),s=i[i.length-1];s&&e.push({localName:s.text,originalName:d,modulePath:r.text})}else r.type===N.IDENTIFIER&&e.push({localName:r.text,originalName:d,modulePath:r.text})}function we(n,e){let o=n.childForFieldName("method");if(!o)return;let r=o.text;if(!_e.includes(r))return;let i=n.childForFieldName("arguments");if(!i)return;let s=i.descendantsOfType("string_content")[0]||i.descendantsOfType("string")[0];if(!s)return;let a=s.text.replace(/['"]/g,""),l=a.replace(/\.rb$/,"");e.push({localName:l,originalName:d,modulePath:a})}function be(n){return n===N.NAMESPACE_USE_DECLARATION||n===N.INCLUDE_EXPRESSION||n===N.INCLUDE_ONCE_EXPRESSION||n===N.REQUIRE_EXPRESSION||n===N.REQUIRE_ONCE_EXPRESSION}function Xe(n,e){let o=n.descendantsOfType("qualified_name")[0]||n.descendantsOfType("name")[0];if(o){let r=o.text,i=r.split("\\"),s=i[i.length-1];e.push({localName:s,originalName:d,modulePath:r})}}function ve(n,e){let o=n.descendantsOfType("string")[0]||n.descendantsOfType("string_content")[0];if(o){let r=o.text.replace(/['"]/g,"");e.push({localName:r,originalName:d,modulePath:r})}}function ke(n,e,o){e===N.NAMESPACE_USE_DECLARATION?Xe(n,o):ve(n,o)}function Ye(n,e){let o=n.descendantsOfType("qualified_name")[0]||n.descendantsOfType("identifier")[0];if(o){let r=o.text,i=r.split("."),s=i[i.length-1];e.push({localName:s,originalName:d,modulePath:r})}}function Be(n,e){let o=n.descendantsOfType("string").pop();if(!o)return;let r=o.text.replace(/['"]/g,""),i=n.descendantsOfType("identifier");for(let s of i)s&&(e.some(a=>a.localName===s.text)||e.push({localName:s.text,originalName:s.text,modulePath:r}))}function Ge(n,e,o){if(n.childForFieldName("name")){for(let i of n.namedChildren)if(i)if(i.type===N.ALIASED_IMPORT){let s=i.childForFieldName("name"),a=i.childForFieldName("alias");s&&a&&o.push({localName:a.text,originalName:s.text,modulePath:e})}else if(i.type===N.DOTTED_NAME){let s=i.descendantsOfType("identifier"),a=s[s.length-1];a&&o.push({localName:a.text,originalName:i.text,modulePath:e})}else i.type===N.IDENTIFIER&&o.push({localName:i.text,originalName:i.text,modulePath:e})}}function He(n){let e=n.childForFieldName("function");if(!e)return{isMethodCall:!1,methodName:""};if(e.type===N.MEMBER_EXPRESSION){let o=e.childForFieldName("property"),r=e.childForFieldName("object");if(o)return{isMethodCall:!0,methodName:o.text,objectName:r?.text}}return{isMethodCall:!1,methodName:e.text}}function Qe(n){let e=n.childForFieldName("function");if(!e)return{isMethodCall:!1,methodName:""};if(e.type===N.ATTRIBUTE){let o=e.childForFieldName("attribute"),r=e.childForFieldName("object");if(o)return{isMethodCall:!0,methodName:o.text,objectName:r?.text}}return{isMethodCall:!1,methodName:e.text}}function Ve(n){let e=n.childForFieldName("name"),o=n.childForFieldName("object");if(e)return{isMethodCall:!0,methodName:e.text,objectName:o?.text}}function je(n){return{isMethodCall:!0,methodName:n.childForFieldName("constructor")?.text||K,objectName:K}}function We(n){let e=n.childForFieldName("method");if(!e)return;let o=n.childForFieldName("receiver");return o?{isMethodCall:!0,methodName:e.text,objectName:o.text}:{isMethodCall:!1,methodName:e.text}}function M(n){let e=n.type,r=n.childForFieldName("name")?.text||"";if(e===N.MEMBER_CALL_EXPRESSION){let i=n.childForFieldName("object");return{isMethodCall:!0,methodName:r,objectName:i?.text}}if(e===N.SCOPED_CALL_EXPRESSION){let i=n.childForFieldName("scope");return{isMethodCall:!0,methodName:r,objectName:i?.text}}return{isMethodCall:!1,methodName:r}}function qe(n){let e=n.childForFieldName("function")||n.namedChildren[0];if(e&&e.type===N.MEMBER_ACCESS_EXPRESSION){let o=e.childForFieldName("name"),r=e.childForFieldName("expression");if(o)return{isMethodCall:!0,methodName:o.text,objectName:r?.text}}if(e)return{isMethodCall:!1,methodName:e.text}}function Je(n){let e=n.childForFieldName("type");return{isMethodCall:!0,methodName:Ae,objectName:e?.text}}var bt={[N.CALL_EXPRESSION]:He,[N.CALL]:Qe,[N.METHOD_INVOCATION]:Ve,[N.EXPLICIT_CONSTRUCTOR_INVOCATION]:je,[N.COMMAND_CALL]:We,[N.FUNCTION_CALL_EXPRESSION]:M,[N.MEMBER_CALL_EXPRESSION]:M,[N.SCOPED_CALL_EXPRESSION]:M,[N.INVOCATION_EXPRESSION]:qe,[N.OBJECT_CREATION_EXPRESSION]:Je};var Ke=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i,L=class n extends Date{#t=!1;#n=!1;#e=null;constructor(e){let o=!0,r=!0,i="Z";if(typeof e=="string"){let s=e.match(Ke);s?(s[1]||(o=!1,e=`0000-01-01T${e}`),r=!!s[2],r&&e[10]===" "&&(e=e.replace(" ","T")),s[2]&&+s[2]>23?e="":(i=s[3]||null,e=e.toUpperCase(),!i&&r&&(e+="Z"))):e=""}super(e),isNaN(this.getTime())||(this.#t=o,this.#n=r,this.#e=i)}isDateTime(){return this.#t&&this.#n}isLocal(){return!this.#t||!this.#n||!this.#e}isDate(){return this.#t&&!this.#n}isTime(){return this.#n&&!this.#t}isValid(){return this.#t||this.#n}toISOString(){let e=super.toISOString();if(this.isDate())return e.slice(0,10);if(this.isTime())return e.slice(11,23);if(this.#e===null)return e.slice(0,-1);if(this.#e==="Z")return e;let o=+this.#e.slice(1,3)*60+ +this.#e.slice(4,6);return o=this.#e[0]==="-"?o:-o,new Date(this.getTime()-o*6e4).toISOString().slice(0,-1)+this.#e}static wrapAsOffsetDateTime(e,o="Z"){let r=new n(e);return r.#e=o,r}static wrapAsLocalDateTime(e){let o=new n(e);return o.#e=null,o}static wrapAsLocalDate(e){let o=new n(e);return o.#n=!1,o.#e=null,o}static wrapAsLocalTime(e){let o=new n(e);return o.#t=!1,o.#e=null,o}};function ze(n,e){let o=n.slice(0,e).split(/\r\n|\n|\r/g);return[o.length,o.pop().length+1]}function Ze(n,e,o){let r=n.split(/\r\n|\n|\r/g),i="",s=(Math.log10(e+1)|0)+1;for(let a=e-1;a<=e+1;a++){let l=r[a-1];l&&(i+=a.toString().padEnd(s," "),i+=": ",i+=l,i+=`
3
3
  `,a===e&&(i+=" ".repeat(s+o+2),i+=`^
4
4
  `))}return i}var T=class extends Error{line;column;codeblock;constructor(e,o){let[r,i]=ze(o.toml,o.ptr),s=Ze(o.toml,r,i);super(`Invalid TOML document: ${e}
5
5
 
@@ -59,4 +59,4 @@ smol-toml/dist/index.js:
59
59
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
60
60
  *)
61
61
  */
62
- //# sourceMappingURL=chunk-TBMA2SBX.js.map
62
+ //# sourceMappingURL=chunk-37SEBYD7.js.map
@@ -1,6 +1,6 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{ba as c}from"./chunk-MFE4UY5Z.js";import*as _ from"fs/promises";import*as g from"path";import{select as f,confirm as P,input as b,checkbox as H}from"@inquirer/prompts";import Y from"picocolors";import F from"ora";var r={TOP_LEFT:"\u250C",TOP_RIGHT:"\u2510",BOTTOM_LEFT:"\u2514",BOTTOM_RIGHT:"\u2518",HORIZONTAL:"\u2500",VERTICAL:"\u2502",T_DOWN:"\u252C",T_UP:"\u2534",T_RIGHT:"\u251C",T_LEFT:"\u2524",CROSS:"\u253C"},w={PASS:"\u2713",FAIL:"\u2717"},N="\u25C6";var E={SPACE:" ",EMPTY:""};function u(e){return e.replace(/\s+/g,E.SPACE).trim()}function m(e,n){if(e.length<=n)return[e];let t=e.split(E.SPACE),i=[],o=E.EMPTY;for(let s of t){let A=o?`${o}${E.SPACE}${s}`:s;A.length>n&&o?(i.push(o),o=s):o=A}return o&&i.push(o),i}function h(e,n){return e+E.SPACE.repeat(Math.max(0,n-e.length))}function R(e,n,t,i){return n+e.map(o=>r.HORIZONTAL.repeat(o+2)).join(t)+i}function L(e,n){let t=e.map((i,o)=>h(i??E.EMPTY,n[o]));return`${r.VERTICAL} ${t.join(` ${r.VERTICAL} `)} ${r.VERTICAL}`}function U(e,n){return e.map((t,i)=>{let o=Math.max(t.header.length,...n.map(s=>(s[i]??E.EMPTY).length));return t.maxWidth?Math.min(o,t.maxWidth):o})}function C(e,n){let t=e.map(a=>u(a.header)),i=n.map(a=>a.map(d=>u(d??E.EMPTY))),o=U(e.map((a,d)=>({...a,header:t[d]})),i),s=i.map(a=>e.map((d,T)=>m(a[T]??E.EMPTY,o[T]))),A=[R(o,r.TOP_LEFT,r.T_DOWN,r.TOP_RIGHT),L(t,o),R(o,r.T_RIGHT,r.CROSS,r.T_LEFT)];for(let a of s){let d=Math.max(...a.map(T=>T.length));for(let T=0;T<d;T++)A.push(L(a.map(p=>p[T]??E.EMPTY),o))}return A.push(R(o,r.BOTTOM_LEFT,r.T_UP,r.BOTTOM_RIGHT)),A}function D(e){let n=r.HORIZONTAL.repeat(e.length+2);return[`${r.TOP_LEFT}${n}${r.TOP_RIGHT}`,`${r.VERTICAL} ${e} ${r.VERTICAL}`,`${r.BOTTOM_LEFT}${n}${r.BOTTOM_RIGHT}`]}var M="cyan",O={INFO:"\u2139",SUCCESS:"\u2714",WARN:"\u26A0",ERROR:"\u2716"},S=Y.createColors(!!process.stdout.isTTY&&!process.env.NO_COLOR),I={spinner:e=>F({text:e,color:M}),info:e=>console.log(S.cyan(`${O.INFO} ${e}`)),success:e=>console.log(S.green(`${O.SUCCESS} ${e}`)),warn:e=>console.warn(S.yellow(`${O.WARN} ${e}`)),error:e=>console.error(S.red(`${O.ERROR} ${e}`)),log:e=>console.log(e??""),header:e=>{console.log();for(let n of D(e))console.log(S.cyan(n));console.log()},section:e=>{console.log(),console.log(S.bold(S.cyan(`${N} ${e}`)))},table:(e,n)=>{for(let t of C(e,n))console.log(t)},askConfirm:async(e,n=!0)=>await P({message:e,default:n}),askSelect:async(e,n)=>await f({message:e,choices:n}),askCheckbox:async(e,n)=>await H({message:e,choices:n}),askInput:async(e,n)=>await b({message:e,default:n})};var l={CLI_HEADER:"Docuvia Knowledge Graph",CLI_PROMPT_ACTION:"What would you like to do?",CLI_UNKNOWN_COMMAND:"Unknown command: ",CLI_FATAL_ERROR:"Fatal error: ",CLI_INTERACTIVE_NO_TTY:"--interactive requires a real terminal and is disabled under CI -- cannot launch the wizard menu.",CLI_INTERACTIVE_UNAVAILABLE:"--interactive was requested, but this session has no usable TTY (or is running under CI) -- continuing non-interactively.",INIT_HEADER:"Initialize Docuvia",INIT_CONFIRM:"Initialize Docuvia in this workspace?",INIT_ABORTED:"Initialization aborted.",INIT_START:"Starting initialization...",INIT_FAILED:"Initialization failed: ",INIT_AGENT_HOOKS:"Initializing AI Agent integrations for Docuvia...",INIT_LOCK_WAITING:"Another `docuvia init` is already running in this workspace; waiting for it to finish...",INIT_HOOKS_CONFIG_MCP:"Configuring MCP Servers...",INIT_HOOKS_REGISTERED_MCP:"Registered MCP server in: ",INIT_HOOKS_FAIL_CURSOR_MCP:"Could not configure Cursor MCP: ",INIT_HOOKS_SUCCESS:"Docuvia Agent Integrations successfully installed!",INIT_HOOKS_SUPPORTED:"Supported platforms: Claude Code, Cursor, GitHub Copilot, Codex, Continue, Hermes Agent.",INIT_HOOKS_FAIL:"Failed to initialize agent integrations: ",INIT_HOOKS_SELECT:"Which AI Agent integrations would you like to install?",INIT_HOOKS_NONE_SELECTED:"No platforms selected. Skipping agent integrations.",INIT_CLAUDE_MCP_MANUAL_SNIPPET:"To use Docuvia from Claude Desktop, add this to your global MCP config",FS_APPENDED:"Appended instructions to: ",FS_ALREADY_EXISTS:"Instructions already exist in: ",FS_CREATED:"Created: ",FS_READ_ERROR:"Could not read ",FS_READ_ERROR_UNKNOWN_CODE:"unknown error",FS_BLOCK_REMOVED_PREFIX:"Removed block from ",FS_BLOCK_REMOVED_SUFFIX:" (backup created)",FS_UNEXPECTED_SHAPE:(e,n)=>`Unexpected shape for "${e}" in ${n} (expected an array); leaving it untouched`,CLEAN_HEADER:"Clean Docuvia Database",CLEAN_CONFIRM:"This will permanently delete the local Docuvia database. Continue?",CLEAN_ABORTED:"Clean aborted.",CLEAN_START:"Cleaning database...",CLEAN_SUCCESS:"Clean complete. ",CLEAN_FAIL:"Clean failed: ",STATUS_START:"Getting status...",STATUS_SUCCESS:"Status retrieved.",STATUS_FAIL:"Failed to get status: ",STATUS_HEADER:"Docuvia Status",STATUS_COL_METRIC:"Metric",STATUS_COL_VALUE:"Value",STATUS_METRIC_PROJECTS:"Projects",STATUS_METRIC_L2_NODES:"L2 Nodes",STATUS_METRIC_L3_DECISIONS:"L3 Decisions",STATUS_METRIC_TIER_B_COVERAGE:"Tier B Coverage",STATUS_METRIC_TIER_C_QUEUE:"Tier C Queue",PUBLISH_HEADER:"Publish to Docuvia",PUBLISH_MISSING_PROJECT_ID:"Project ID is required when not running interactively.",PUBLISH_NO_PROJECT_ID_PROVIDED:"No project ID provided.",PUBLISH_PROMPT_PROJECT_ID:"Enter the project ID to publish to: ",PUBLISH_PROJECT_ID_REQUIRED:"Project ID is required.",PUBLISH_MISSING_ENV:"DOCUVIA_API_URL and/or MCP_PAT are not set.",PUBLISH_SKIP:"Skipping publish.",PUBLISH_START:"Starting publish for project ",PUBLISH_SUCCESS:"Publish complete.",PUBLISH_FAIL:"Publish failed: ",ANALYZE_HEADER:"Analyze Project",ANALYZE_START:"Analyzing project...",ANALYZE_SUCCESS:"Analysis complete.",ANALYZE_FAIL:"Analysis failed: ",ANALYZE_PROJECT_TYPE:"Project Type: ",ANALYZE_SUGGESTED_TAGS:"Suggested Tags: ",ANALYZE_NONE:"none",ANALYZE_AUTO_FULL_SUCCESS:"Full ingestion complete.",ANALYZE_AUTO_FULL_SUMMARY:(e,n,t)=>`Parsed ${e}/${n} file(s) (${t} failed).`,ANALYZE_AUTO_DELTA_SUCCESS:"Delta ingestion complete.",ANALYZE_AUTO_DELTA_SUMMARY:(e,n,t)=>`Re-parsed ${e} file(s), dropped ${n} deleted file(s)`+(t>0?`, queued ${t} file(s) for Tier B.`:"."),ANALYZE_AUTO_NOOP_SUCCESS:"Already up to date.",ANALYZE_AUTO_NOOP_DIRTY_WORKTREE_SUCCESS:"Already up to date with HEAD -- uncommitted changes in the working tree were not analyzed (commit them, then re-run).",ANALYZE_LLM_MISSING_ENV:"AI_DOCUVIA_INTEGRATIONS_OPENAI_BASE_URL and a model (AI_DOCUVIA_MODEL or AI_DOCUVIA_FAST_MODEL) must be set to analyze a specific path.",ANALYZE_FOCUSED_HEADER:"Analyze Path",ANALYZE_FOCUSED_START:"Extracting decisions from ",ANALYZE_FOCUSED_SUCCESS:"Decision extraction complete.",ANALYZE_FOCUSED_FAIL:"Decision extraction failed: ",ANALYZE_FOCUSED_NONE:"No decision-worthy content found.",ANALYZE_FOCUSED_PERSISTED:(e,n)=>`${e} persisted, ${n} deduplicated`,ANALYZE_DECISION_LINE:(e,n,t)=>`${n} (${e}, confidence: ${t})`,ANALYZE_DECISION_CONTENT_PREFIX:" ",ANALYZE_TIER_B_HEADER:"Analyze -- Tier B (LSP escalation)",ANALYZE_TIER_B_START:"Running the Tier B LSP escalation batch...",ANALYZE_TIER_B_SUCCESS:"Tier B batch complete.",ANALYZE_TIER_B_FAIL:"Tier B batch failed: ",ANALYZE_TIER_B_SUMMARY:(e,n,t,i,o)=>`${e} file(s) processed, ${n} corrected edge(s) applied`+(t>0?`, ${t} file(s) left queued for the next batch`:"")+(i>0?`, ${i} file(s) permanently failed (not re-queued)`:"")+(o?", zero-progress watchdog tripped: no next-batch re-queue remains":"")+".",ANALYZE_TIER_B_DEGRADED:e=>`LSP unavailable -- AST-level edges left untouched (${e})`,ANALYZE_TIER_B_GATE_NOT_READY:e=>`LSP prerequisites are not ready: ${e}`,ANALYZE_TIER_B_GATE_PROMPT:"Continue with AST-only precision (skip the LSP-corrected cross-file edges this batch)?",ANALYZE_TIER_B_GATE_DECLINED:"Aborted -- install typescript-language-server as a project devDependency (or pass --fallback-ast) and try again.",ANALYZE_TIER_B_GATE_FAILED:e=>`LSP prerequisites are not ready: ${e}
3
- Build/compile the target project (Docuvia's Tier B relies on a working language server), then run 'docuvia doctor' to confirm. Pass --fallback-ast to proceed with AST-only precision instead.`,ANALYZE_TIER_C_SUMMARY:(e,n,t)=>`Tier C: ${e} candidate(s) processed, ${n} decision(s) persisted`+(t>0?`, ${t} left queued for the next run.`:"."),ANALYZE_TIER_C_SKIPPED:e=>`Tier C: drain skipped this run (${e}).`,ANALYZE_AGENT_AUTHORED_MISSING_TARGET:"--agent-authored requires a target path, e.g. docuvia analyze <path> --agent-authored",ANALYZE_AGENT_AUTHORED_MISSING_PAYLOAD:"No decisions payload found -- pipe JSON via stdin or pass --decisions-file=<path>",ANALYZE_AGENT_AUTHORED_INVALID_JSON:e=>`--agent-authored payload is not valid JSON: ${e}`,ANALYZE_AGENT_AUTHORED_INVALID_SHAPE:e=>`--agent-authored payload does not match the expected shape: ${e}`,ANALYZE_LSP_ARGS_INVALID_JSON:e=>`DOCUVIA_LSP_ARGS starts with '[' but is not valid JSON -- use a JSON array of strings, or plain space-separated args: ${e}`,ANALYZE_LSP_ARGS_INVALID_SHAPE:"DOCUVIA_LSP_ARGS JSON array must contain only strings",ANALYZE_STAGE_HEADER:"Stage Decisions",ANALYZE_STAGE_START:"Staging decisions from ",ANALYZE_STAGE_SUCCESS:"Staged.",ANALYZE_STAGE_SUMMARY:e=>`${e} decision(s) staged -- flushed automatically on the next commit that touches this file.`,ANALYZE_FLUSH_STAGED_L3_HEADER:"Flush Staged L3 Decisions",ANALYZE_FLUSH_STAGED_L3_START:"Flushing staged L3 decisions...",ANALYZE_FLUSH_STAGED_L3_SUCCESS:"Flush complete.",ANALYZE_FLUSH_STAGED_L3_DISABLED_SUCCESS:"commit-l3-write is disabled -- nothing flushed.",ANALYZE_FLUSH_STAGED_L3_SUMMARY:(e,n,t)=>`${e} flushed, ${n} deduplicated`+(t>0?`, ${t} left staged for a future commit.`:"."),ANALYZE_FLUSH_STAGED_L3_NO_GRAPH_ADVICE:"Some staged decisions could not be attached: the knowledge graph is empty (or hasn't ingested this file yet). Run `docuvia init` first -- decisions need a graph to attach to. They stay staged and retry on the next flush.",REVIEW_HEADER:"Review Changes",REVIEW_START:"Analyzing changes...",REVIEW_SUCCESS:"Analysis complete.",REVIEW_AGAINST:" against ",REVIEW_FAIL:"Review failed: ",REVIEW_FILES_CHANGED:"Files changed: ",REVIEW_RISK_PREFIX:"Risk level: ",REVIEW_WHY_HEADER:"Why (L3 decisions/context)",REVIEW_WHY_PREFIX:"Decision: ",IMPACT_HEADER:"Impact Analysis",IMPACT_MISSING_TARGET:"A target symbol/module name is required.",IMPACT_START:"Resolving blast radius for ",IMPACT_SUCCESS:"Resolved blast radius for ",IMPACT_FAIL:"Impact analysis failed: ",IMPACT_NOT_FOUND:"No matching node found for ",IMPACT_BLAST_RADIUS_HEADER:"Blast Radius",IMPACT_NO_DEPENDENTS:"No dependents found.",IMPACT_RISK_PREFIX:"Risk level: ",IMPACT_WHY_PREFIX:"Decision: ",IMPACT_COL_NAME:"Name",IMPACT_COL_TYPE:"Type",IMPACT_COL_SOURCE:"Source",IMPACT_EDGE_SOURCE_STATIC:"static",IMPACT_ENTRY_WHY_LABEL:e=>`${e}:`,IMPACT_TIER_B_INCOMPLETE:(e,n)=>`${e} of ${n} tracked file(s) have never been Tier B-processed -- this may be incomplete, not confirmed zero. Run \`docuvia analyze --escalate-to-lsp --full\` to resync.`,IMPACT_RISK_NOTE_PREFIX:"Note: ",UNINSTALL_HEADER:"Uninstall Docuvia2 Integrations",UNINSTALL_START:"Uninstalling Docuvia2 integrations...",UNINSTALL_SUCCESS_CLEAN:"Cleaned Docuvia: ",UNINSTALL_FAIL_CLEAN:"Failed to clean Docuvia directory: ",UNINSTALL_SUCCESS:"Docuvia2 uninstalled successfully. Backup files (.bak) were created for modified Markdown files.",UNINSTALL_FAIL:"Uninstall failed: ",UNINSTALL_HOOKS_SELECT:"Which AI Agent integrations would you like to uninstall?",UNINSTALL_KEEP_DB:"Skipping local database cleanup (--keep-db).",UNINSTALL_INVALID_WORKSPACE_ROOT:"Workspace root must not be empty.",UNINSTALL_PLATFORM_FAIL:"Failed to uninstall hooks for ",UNINSTALL_PLATFORM_FAIL_MID:": ",UNINSTALL_PARTIAL:"Uninstall completed with failures: ",UNINSTALL_DB_CLEANUP_FAILURE_NAME:"local database cleanup",UNINSTALL_HOOKS_FAIL_LOG:"uninstallHooks failed for platform ",UNINSTALL_DB_CLEANUP_FAIL_LOG:"uninstall's database cleanup failed",UNINSTALL_FAIL_LOG:"uninstall failed",UNINSTALL_REMOVED_FILE_PREFIX:"Removed ",UNINSTALL_REMOVED_MCP_SERVER_PREFIX:"Removed MCP server from ",UNINSTALL_REMOVED_HOOK_FROM_SETTINGS_PREFIX:"Removed the Docuvia hook entry from ",UNINSTALL_CLAUDE_MCP_MANUAL_REMINDER:"To finish uninstalling, manually remove the Docuvia MCP server entry from your global MCP config",UNINSTALL_GIT_HOOKS_SUCCESS:(e,n)=>`Removed git hooks (post-commit: ${e?"removed":"not present"}, pre-push: ${n?"removed":"not present"}).`,UNINSTALL_GIT_HOOKS_FAIL:"Failed to remove git hooks: ",UNINSTALL_GIT_HOOKS_FAIL_LOG:"uninstall's git hooks removal failed",UNINSTALL_GIT_HOOKS_FAILURE_NAME:"git hooks removal",UNINSTALL_KNOWLEDGE_BRANCH_DELETED:"Deleted the hidden docuvia-knowledge git branch.",UNINSTALL_DOCUVIA_DIR_REMOVED:"Removed the .docuvia/ directory.",UNINSTALL_DOCUVIA_DIR_FAIL:"Failed to remove the .docuvia/ directory: ",UNINSTALL_DOCUVIA_DIR_FAIL_LOG:"uninstall's .docuvia/ directory removal failed",UNINSTALL_DOCUVIA_DIR_FAILURE_NAME:".docuvia/ directory removal",DOCTOR_HEADER:"Docuvia Doctor Diagnostics",DOCTOR_START:"Running diagnostics...",DOCTOR_FAIL:"Doctor failed: ",DOCTOR_SUMMARY_PASSED:(e,n)=>`Summary: ${e}/${n} checks passed.`,DOCTOR_FIX_HINT:"Tip: run `docuvia doctor --fix` to attempt automatic repair.",DOCTOR_COL_CHECK:"Check",DOCTOR_COL_STATUS:"Status",DOCTOR_COL_MESSAGE:"Message",DOCTOR_COL_FIX:"Suggested Fix",DOCTOR_STATUS_PASS:"PASS",DOCTOR_STATUS_FAIL:"FAIL",DOCTOR_CATEGORY_DATABASE:"Database",DOCTOR_CATEGORY_GIT:"Git",DOCTOR_CATEGORY_GIT_HOOKS:"Git Hooks",DOCTOR_CATEGORY_LOGS:"Logs",DOCTOR_CATEGORY_TIER_B:"Tier B Batch",DOCTOR_CATEGORY_TIER_B_COVERAGE:"Tier B Coverage",DOCTOR_CATEGORY_LLM:"LLM Integration",DOCTOR_CATEGORY_LSP:"LSP Providers",DOCTOR_CATEGORY_AGENT_HOOKS:"AI Agent Hooks",DOCTOR_CATEGORY_AGENT_ADOPTION:"Docuvia-First Workflow",DOCTOR_CATEGORY_OTHER:"Other",QUERY_HEADER:"Query Knowledge Graph",QUERY_PROMPT_TARGET:"What would you like to query? ",QUERY_MISSING_TARGET:"A query target is required (pass it as an argument).",QUERY_MISSING_TARGET_NON_TTY:"A query target is required.",QUERY_START:"Querying local knowledge graph for ",QUERY_FOUND:"Query resolved for ",QUERY_FAIL:"Query failed: ",QUERY_CONTEXT_HEADER:"Query Results",QUERY_L2_PREFIX:"Module: ",QUERY_NO_L2:"No matching module found.",QUERY_L3_PREFIX:"Decision: ",QUERY_L3_PROVENANCE:e=>` (${e.join(", ")})`,QUERY_UNKNOWN_STATUS:"unknown",QUERY_INCOMING_HEADER:"Incoming (callers/dependents)",QUERY_OUTGOING_HEADER:"Outgoing (dependencies)",QUERY_COL_NAME:"Name",QUERY_COL_RELATION:"Relation",QUERY_INVALID_LIMIT:"Ignoring invalid --limit value (must be a positive integer): ",QUERY_TIER_B_INCOMING_UNPROCESSED:(e,n)=>`No callers found, but ${e} of ${n} tracked file(s) have never been Tier B-processed -- this may be incomplete, not confirmed zero. Run \`docuvia analyze --escalate-to-lsp --full\` to resync.`,QUERY_TIER_B_OUTGOING_UNPROCESSED:"No callees found, but this symbol's own file has never been Tier B-processed -- this may be incomplete, not confirmed zero. Run `docuvia analyze --escalate-to-lsp --full` to resync.",QUERY_MATCH_TYPE_EXACT:" (exact match)",QUERY_MATCH_TYPE_KEYWORD:" (keyword match -- verify with Grep/Glob if unsure)",QUERY_MATCH_TYPE_NEIGHBOR:" (neighbor match)",EXPORT_HEADER:"Export Topology",EXPORT_START:"Exporting topology...",EXPORT_SUCCESS:"Exported topology to ",EXPORT_FAIL:"Export failed: ",EXPORT_STATS_LINE:(e,n,t)=>`Nodes: ${e}, Links: ${n}, Groups: ${t}`,EXPORT_COLLAPSED_LINE:"Collapsed: yes (fewer nodes than the raw graph).",EXPORT_FOLDED_LINE:e=>`Folded links: ${e} more relationship(s) folded within files at this granularity; pass --collapse=symbol for the full symbol-level view.`,EXPORT_HTML_PATH_LINE:e=>`HTML viewer: ${e}`,SNAPSHOT_HEADER:"Snapshot Knowledge Graph",SNAPSHOT_START:"Packing knowledge graph snapshot...",SNAPSHOT_SUCCESS:"Snapshot packed onto the knowledge branch.",SNAPSHOT_FAIL:"Snapshot failed: ",SNAPSHOT_NODES_WRITTEN_LINE:e=>`Nodes written: ${e}`,SNAPSHOT_EDGES_WRITTEN_LINE:e=>`Edges written: ${e}`,SNAPSHOT_MARKDOWN_WRITTEN_LINE:e=>`Markdown files written: ${e}`,HYDRATE_HEADER:"Hydrate Local Database",HYDRATE_START:"Hydrating local database from the knowledge branch...",HYDRATE_SUCCESS:"Hydrated local database.",HYDRATE_NOTHING:'Nothing to hydrate from yet \u2014 run "docuvia init" first.',HYDRATE_FAIL:"Hydrate failed: ",HYDRATE_NODES_LOADED_LINE:e=>`Nodes loaded: ${e}`,HYDRATE_EDGES_LOADED_LINE:e=>`Edges loaded: ${e}`,HYDRATE_EDGES_DROPPED_LINE:e=>`Dangling edges dropped: ${e}`,HYDRATE_REFUSED:e=>`Refused to hydrate: ${e==="pending-local-write"?"a knowledge-branch write from this workspace hasn't been confirmed yet":"this would replace local.db's graph with a drastically smaller one"}. Local data was left untouched. Re-run with --force if you're sure.`,SYNC_KNOWLEDGE_HEADER:"Sync Knowledge Branch",SYNC_KNOWLEDGE_START:"Reconciling the knowledge branch with the remote...",SYNC_KNOWLEDGE_NO_REMOTE:"No remote reachable \u2014 nothing to reconcile (offline or no origin configured).",SYNC_KNOWLEDGE_UP_TO_DATE:"Knowledge branch is already up to date with the remote.",SYNC_KNOWLEDGE_FAST_FORWARDED:"Fast-forwarded the local knowledge branch to the remote.",SYNC_KNOWLEDGE_PUSHED:"Pushed the local knowledge branch to the remote.",SYNC_KNOWLEDGE_MERGED:"Merged the diverged knowledge branch and pushed the result.",SYNC_KNOWLEDGE_FAIL:"Knowledge branch sync failed: ",HOOKS_HEADER:"Docuvia Hooks",HOOKS_COL_NAME:"Hook",HOOKS_COL_STATUS:"Status",HOOKS_STATUS_ENABLED:"enabled",HOOKS_STATUS_DISABLED:"disabled",HOOKS_LIST_FAIL:"Failed to list hooks: ",HOOKS_SET_FAIL:"Failed to update hook: ",HOOKS_ENABLED:e=>`Enabled hook: ${e}`,HOOKS_DISABLED:e=>`Disabled hook: ${e}`,HOOKS_INVALID_NAME:(e,n)=>`Unknown hook '${e??""}' -- valid names: ${n.join(", ")}`,HOOKS_UNKNOWN_SUBCOMMAND:e=>`Unknown 'docuvia hooks' subcommand '${e??""}' -- expected list, enable, disable, or check`};var y="ENOENT";async function j(e,n,t){let i;try{i=await _.readFile(e,c)}catch(o){o.code!==y&&I.warn(`${l.FS_READ_ERROR}${e} (${o.code??l.FS_READ_ERROR_UNKNOWN_CODE}); creating a new file instead of appending`)}if(i===void 0){await _.mkdir(g.dirname(e),{recursive:!0}),await _.writeFile(e,n),I.success(l.FS_CREATED+e);return}i.includes(t)?I.info(l.FS_ALREADY_EXISTS+e):(await _.appendFile(e,`
4
- ${n}`),I.success(l.FS_APPENDED+e))}async function G(e){try{let n=await _.readFile(e,c),t=`${e}.bak`;return await _.writeFile(t,n,c),t}catch{return null}}async function J(e,n,t){try{let i=await _.readFile(e,c),o=i.indexOf(n);if(o===-1)return!1;let s=i.indexOf(t,o);if(s===-1)return!1;await G(e);let A=i.slice(0,o),a=i.slice(s+t.length);return await _.writeFile(e,(A+a).trim()+`
5
- `,c),I.success(`${l.FS_BLOCK_REMOVED_PREFIX}${e}${l.FS_BLOCK_REMOVED_SUFFIX}`),!0}catch{return!1}}export{r as a,w as b,I as c,l as d,j as e,G as f,J as g};
6
- //# sourceMappingURL=chunk-2NAWCL5Z.js.map
2
+ import{ba as c}from"./chunk-RYKA3JKY.js";import*as a from"fs/promises";import*as g from"path";import{select as f,confirm as P,input as b,checkbox as H}from"@inquirer/prompts";import F from"picocolors";import Y from"ora";var i={TOP_LEFT:"\u250C",TOP_RIGHT:"\u2510",BOTTOM_LEFT:"\u2514",BOTTOM_RIGHT:"\u2518",HORIZONTAL:"\u2500",VERTICAL:"\u2502",T_DOWN:"\u252C",T_UP:"\u2534",T_RIGHT:"\u251C",T_LEFT:"\u2524",CROSS:"\u253C"},v={PASS:"\u2713",FAIL:"\u2717"},N="\u25C6";var E={SPACE:" ",EMPTY:""};function u(e){return e.replace(/\s+/g,E.SPACE).trim()}function m(e,n){if(e.length<=n)return[e];let t=e.split(E.SPACE),r=[],o=E.EMPTY;for(let s of t){let A=o?`${o}${E.SPACE}${s}`:s;A.length>n&&o?(r.push(o),o=s):o=A}return o&&r.push(o),r}function h(e,n){return e+E.SPACE.repeat(Math.max(0,n-e.length))}function O(e,n,t,r){return n+e.map(o=>i.HORIZONTAL.repeat(o+2)).join(t)+r}function L(e,n){let t=e.map((r,o)=>h(r??E.EMPTY,n[o]));return`${i.VERTICAL} ${t.join(` ${i.VERTICAL} `)} ${i.VERTICAL}`}function U(e,n){return e.map((t,r)=>{let o=Math.max(t.header.length,...n.map(s=>(s[r]??E.EMPTY).length));return t.maxWidth?Math.min(o,t.maxWidth):o})}function C(e,n){let t=e.map(_=>u(_.header)),r=n.map(_=>_.map(d=>u(d??E.EMPTY))),o=U(e.map((_,d)=>({..._,header:t[d]})),r),s=r.map(_=>e.map((d,T)=>m(_[T]??E.EMPTY,o[T]))),A=[O(o,i.TOP_LEFT,i.T_DOWN,i.TOP_RIGHT),L(t,o),O(o,i.T_RIGHT,i.CROSS,i.T_LEFT)];for(let _ of s){let d=Math.max(..._.map(T=>T.length));for(let T=0;T<d;T++)A.push(L(_.map(p=>p[T]??E.EMPTY),o))}return A.push(O(o,i.BOTTOM_LEFT,i.T_UP,i.BOTTOM_RIGHT)),A}function D(e){let n=i.HORIZONTAL.repeat(e.length+2);return[`${i.TOP_LEFT}${n}${i.TOP_RIGHT}`,`${i.VERTICAL} ${e} ${i.VERTICAL}`,`${i.BOTTOM_LEFT}${n}${i.BOTTOM_RIGHT}`]}var M="cyan",R={INFO:"\u2139",SUCCESS:"\u2714",WARN:"\u26A0",ERROR:"\u2716"},l=F.createColors(!!process.stdout.isTTY&&!process.env.NO_COLOR),I={spinner:e=>Y({text:e,color:M}),info:e=>console.log(l.cyan(`${R.INFO} ${e}`)),success:e=>console.log(l.green(`${R.SUCCESS} ${e}`)),warn:e=>console.warn(l.yellow(`${R.WARN} ${e}`)),error:e=>console.error(l.red(`${R.ERROR} ${e}`)),log:e=>console.log(e??""),header:e=>{console.log();for(let n of D(e))console.log(l.cyan(n));console.log()},section:e=>{console.log(),console.log(l.bold(l.cyan(`${N} ${e}`)))},table:(e,n)=>{for(let t of C(e,n))console.log(t)},askConfirm:async(e,n=!0)=>await P({message:e,default:n}),askSelect:async(e,n)=>await f({message:e,choices:n}),askCheckbox:async(e,n)=>await H({message:e,choices:n}),askInput:async(e,n)=>await b({message:e,default:n})};var S={CLI_HEADER:"Docuvia Knowledge Graph",CLI_PROMPT_ACTION:"What would you like to do?",CLI_UNKNOWN_COMMAND:"Unknown command: ",CLI_FATAL_ERROR:"Fatal error: ",CLI_INTERACTIVE_NO_TTY:"--interactive requires a real terminal and is disabled under CI -- cannot launch the wizard menu.",CLI_INTERACTIVE_UNAVAILABLE:"--interactive was requested, but this session has no usable TTY (or is running under CI) -- continuing non-interactively.",INIT_HEADER:"Initialize Docuvia",INIT_CONFIRM:"Initialize Docuvia in this workspace?",INIT_ABORTED:"Initialization aborted.",INIT_START:"Starting initialization...",INIT_FAILED:"Initialization failed: ",INIT_AGENT_HOOKS:"Initializing AI Agent integrations for Docuvia...",INIT_LOCK_WAITING:"Another `docuvia init` is already running in this workspace; waiting for it to finish...",INIT_HOOKS_CONFIG_MCP:"Configuring MCP Servers...",INIT_HOOKS_REGISTERED_MCP:"Registered MCP server in: ",INIT_HOOKS_FAIL_CURSOR_MCP:"Could not configure Cursor MCP: ",INIT_HOOKS_SUCCESS:"Docuvia Agent Integrations successfully installed!",INIT_HOOKS_SUPPORTED:"Supported platforms: Claude Code, Cursor, GitHub Copilot, Codex, Continue, Hermes Agent.",INIT_HOOKS_FAIL:"Failed to initialize agent integrations: ",INIT_HOOKS_SELECT:"Which AI Agent integrations would you like to install?",INIT_HOOKS_NONE_SELECTED:"No platforms selected. Skipping agent integrations.",INIT_CLAUDE_MCP_MANUAL_SNIPPET:"To use Docuvia from Claude Desktop, add this to your global MCP config",FS_APPENDED:"Appended instructions to: ",FS_ALREADY_EXISTS:"Instructions already exist in: ",FS_CREATED:"Created: ",FS_READ_ERROR:"Could not read ",FS_READ_ERROR_UNKNOWN_CODE:"unknown error",FS_BLOCK_REMOVED_PREFIX:"Removed block from ",FS_BLOCK_REMOVED_SUFFIX:" (backup created)",FS_UNEXPECTED_SHAPE:(e,n)=>`Unexpected shape for "${e}" in ${n} (expected an array); leaving it untouched`,CLEAN_HEADER:"Clean Docuvia Database",CLEAN_CONFIRM:"This will permanently delete the local Docuvia database. Continue?",CLEAN_ABORTED:"Clean aborted.",CLEAN_START:"Cleaning database...",CLEAN_SUCCESS:"Clean complete. ",CLEAN_FAIL:"Clean failed: ",STATUS_START:"Getting status...",STATUS_SUCCESS:"Status retrieved.",STATUS_FAIL:"Failed to get status: ",STATUS_HEADER:"Docuvia Status",STATUS_COL_METRIC:"Metric",STATUS_COL_VALUE:"Value",STATUS_METRIC_PROJECTS:"Projects",STATUS_METRIC_L2_NODES:"L2 Nodes",STATUS_METRIC_L3_DECISIONS:"L3 Decisions",STATUS_METRIC_TIER_B_COVERAGE:"Tier B Coverage",STATUS_METRIC_TIER_C_QUEUE:"Tier C Queue",STATUS_METRIC_GRAPH_FRESHNESS:"Graph Freshness",STATUS_FRESHNESS_FRESH:"\u2713 fresh",STATUS_FRESHNESS_STALE:"\u26A0 stale (run 'docuvia analyze' or see 'docuvia doctor')",STATUS_FRESHNESS_UNKNOWN:"? unknown",PUBLISH_HEADER:"Publish to Docuvia",PUBLISH_MISSING_PROJECT_ID:"Project ID is required when not running interactively.",PUBLISH_NO_PROJECT_ID_PROVIDED:"No project ID provided.",PUBLISH_PROMPT_PROJECT_ID:"Enter the project ID to publish to: ",PUBLISH_PROJECT_ID_REQUIRED:"Project ID is required.",PUBLISH_MISSING_ENV:"DOCUVIA_API_URL and/or MCP_PAT are not set.",PUBLISH_SKIP:"Skipping publish.",PUBLISH_START:"Starting publish for project ",PUBLISH_SUCCESS:"Publish complete.",PUBLISH_FAIL:"Publish failed: ",ANALYZE_HEADER:"Analyze Project",ANALYZE_START:"Analyzing project...",ANALYZE_SUCCESS:"Analysis complete.",ANALYZE_FAIL:"Analysis failed: ",ANALYZE_PROJECT_TYPE:"Project Type: ",ANALYZE_SUGGESTED_TAGS:"Suggested Tags: ",ANALYZE_NONE:"none",ANALYZE_AUTO_FULL_SUCCESS:"Full ingestion complete.",ANALYZE_AUTO_FULL_SUMMARY:(e,n,t)=>`Parsed ${e}/${n} file(s) (${t} failed).`,ANALYZE_AUTO_DELTA_SUCCESS:"Delta ingestion complete.",ANALYZE_AUTO_DELTA_SUMMARY:(e,n,t)=>`Re-parsed ${e} file(s), dropped ${n} deleted file(s)`+(t>0?`, queued ${t} file(s) for Tier B.`:"."),ANALYZE_AUTO_NOOP_SUCCESS:"Already up to date.",ANALYZE_AUTO_NOOP_DIRTY_WORKTREE_SUCCESS:"Already up to date with HEAD -- uncommitted changes in the working tree were not analyzed (commit them, then re-run).",ANALYZE_LLM_MISSING_ENV:"AI_DOCUVIA_INTEGRATIONS_OPENAI_BASE_URL and a model (AI_DOCUVIA_MODEL or AI_DOCUVIA_FAST_MODEL) must be set to analyze a specific path.",ANALYZE_FOCUSED_HEADER:"Analyze Path",ANALYZE_FOCUSED_START:"Extracting decisions from ",ANALYZE_FOCUSED_SUCCESS:"Decision extraction complete.",ANALYZE_FOCUSED_FAIL:"Decision extraction failed: ",ANALYZE_FOCUSED_NONE:"No decision-worthy content found.",ANALYZE_FOCUSED_PERSISTED:(e,n)=>`${e} persisted, ${n} deduplicated`,ANALYZE_DECISION_LINE:(e,n,t)=>`${n} (${e}, confidence: ${t})`,ANALYZE_DECISION_CONTENT_PREFIX:" ",ANALYZE_TIER_B_HEADER:"Analyze -- Tier B (LSP escalation)",ANALYZE_TIER_B_START:"Running the Tier B LSP escalation batch...",ANALYZE_TIER_B_SUCCESS:"Tier B batch complete.",ANALYZE_TIER_B_FAIL:"Tier B batch failed: ",ANALYZE_TIER_B_SUMMARY:(e,n,t,r,o)=>`${e} file(s) processed, ${n} corrected edge(s) applied`+(t>0?`, ${t} file(s) left queued for the next batch`:"")+(r>0?`, ${r} file(s) permanently failed (not re-queued)`:"")+(o?", zero-progress watchdog tripped: no next-batch re-queue remains":"")+".",ANALYZE_TIER_B_DEGRADED:e=>`LSP unavailable -- AST-level edges left untouched (${e})`,ANALYZE_TIER_B_GATE_NOT_READY:e=>`LSP prerequisites are not ready: ${e}`,ANALYZE_TIER_B_GATE_PROMPT:"Continue with AST-only precision (skip the LSP-corrected cross-file edges this batch)?",ANALYZE_TIER_B_GATE_DECLINED:"Aborted -- install typescript-language-server as a project devDependency (or pass --fallback-ast) and try again.",ANALYZE_TIER_B_GATE_FAILED:e=>`LSP prerequisites are not ready: ${e}
3
+ Build/compile the target project (Docuvia's Tier B relies on a working language server), then run 'docuvia doctor' to confirm. Pass --fallback-ast to proceed with AST-only precision instead.`,ANALYZE_TIER_C_SUMMARY:(e,n,t)=>`Tier C: ${e} candidate(s) processed, ${n} decision(s) persisted`+(t>0?`, ${t} left queued for the next run.`:"."),ANALYZE_TIER_C_SKIPPED:e=>`Tier C: drain skipped this run (${e}).`,ANALYZE_AGENT_AUTHORED_MISSING_TARGET:"--agent-authored requires a target path, e.g. docuvia analyze <path> --agent-authored",ANALYZE_AGENT_AUTHORED_MISSING_PAYLOAD:"No decisions payload found -- pipe JSON via stdin or pass --decisions-file=<path>",ANALYZE_AGENT_AUTHORED_INVALID_JSON:e=>`--agent-authored payload is not valid JSON: ${e}`,ANALYZE_AGENT_AUTHORED_INVALID_SHAPE:e=>`--agent-authored payload does not match the expected shape: ${e}`,ANALYZE_LSP_ARGS_INVALID_JSON:e=>`DOCUVIA_LSP_ARGS starts with '[' but is not valid JSON -- use a JSON array of strings, or plain space-separated args: ${e}`,ANALYZE_LSP_ARGS_INVALID_SHAPE:"DOCUVIA_LSP_ARGS JSON array must contain only strings",ANALYZE_STAGE_HEADER:"Stage Decisions",ANALYZE_STAGE_START:"Staging decisions from ",ANALYZE_STAGE_SUCCESS:"Staged.",ANALYZE_STAGE_SUMMARY:e=>`${e} decision(s) staged -- flushed automatically on the next commit that touches this file.`,ANALYZE_FLUSH_STAGED_L3_HEADER:"Flush Staged L3 Decisions",ANALYZE_FLUSH_STAGED_L3_START:"Flushing staged L3 decisions...",ANALYZE_FLUSH_STAGED_L3_SUCCESS:"Flush complete.",ANALYZE_FLUSH_STAGED_L3_DISABLED_SUCCESS:"commit-l3-write is disabled -- nothing flushed.",ANALYZE_FLUSH_STAGED_L3_SUMMARY:(e,n,t)=>`${e} flushed, ${n} deduplicated`+(t>0?`, ${t} left staged for a future commit.`:"."),ANALYZE_FLUSH_STAGED_L3_NO_GRAPH_ADVICE:"Some staged decisions could not be attached: the knowledge graph is empty (or hasn't ingested this file yet). Run `docuvia init` first -- decisions need a graph to attach to. They stay staged and retry on the next flush.",REVIEW_HEADER:"Review Changes",REVIEW_START:"Analyzing changes...",REVIEW_SUCCESS:"Analysis complete.",REVIEW_AGAINST:" against ",REVIEW_FAIL:"Review failed: ",REVIEW_FILES_CHANGED:"Files changed: ",REVIEW_RISK_PREFIX:"Risk level: ",REVIEW_WHY_HEADER:"Why (L3 decisions/context)",REVIEW_WHY_PREFIX:"Decision: ",IMPACT_HEADER:"Impact Analysis",IMPACT_MISSING_TARGET:"A target symbol/module name is required.",IMPACT_START:"Resolving blast radius for ",IMPACT_SUCCESS:"Resolved blast radius for ",IMPACT_FAIL:"Impact analysis failed: ",IMPACT_NOT_FOUND:"No matching node found for ",IMPACT_BLAST_RADIUS_HEADER:"Blast Radius",IMPACT_NO_DEPENDENTS:"No dependents found.",IMPACT_RISK_PREFIX:"Risk level: ",IMPACT_WHY_PREFIX:"Decision: ",IMPACT_COL_NAME:"Name",IMPACT_COL_TYPE:"Type",IMPACT_COL_SOURCE:"Source",IMPACT_EDGE_SOURCE_STATIC:"static",IMPACT_ENTRY_WHY_LABEL:e=>`${e}:`,IMPACT_TIER_B_INCOMPLETE:(e,n)=>`${e} of ${n} tracked file(s) have never been Tier B-processed -- this may be incomplete, not confirmed zero. Run \`docuvia analyze --escalate-to-lsp --full\` to resync.`,IMPACT_RISK_NOTE_PREFIX:"Note: ",UNINSTALL_HEADER:"Uninstall Docuvia2 Integrations",UNINSTALL_START:"Uninstalling Docuvia2 integrations...",UNINSTALL_SUCCESS_CLEAN:"Cleaned Docuvia: ",UNINSTALL_FAIL_CLEAN:"Failed to clean Docuvia directory: ",UNINSTALL_SUCCESS:"Docuvia2 uninstalled successfully. Backup files (.bak) were created for modified Markdown files.",UNINSTALL_FAIL:"Uninstall failed: ",UNINSTALL_HOOKS_SELECT:"Which AI Agent integrations would you like to uninstall?",UNINSTALL_KEEP_DB:"Skipping local database cleanup (--keep-db).",UNINSTALL_INVALID_WORKSPACE_ROOT:"Workspace root must not be empty.",UNINSTALL_PLATFORM_FAIL:"Failed to uninstall hooks for ",UNINSTALL_PLATFORM_FAIL_MID:": ",UNINSTALL_PARTIAL:"Uninstall completed with failures: ",UNINSTALL_DB_CLEANUP_FAILURE_NAME:"local database cleanup",UNINSTALL_HOOKS_FAIL_LOG:"uninstallHooks failed for platform ",UNINSTALL_DB_CLEANUP_FAIL_LOG:"uninstall's database cleanup failed",UNINSTALL_FAIL_LOG:"uninstall failed",UNINSTALL_REMOVED_FILE_PREFIX:"Removed ",UNINSTALL_REMOVED_MCP_SERVER_PREFIX:"Removed MCP server from ",UNINSTALL_REMOVED_HOOK_FROM_SETTINGS_PREFIX:"Removed the Docuvia hook entry from ",UNINSTALL_CLAUDE_MCP_MANUAL_REMINDER:"To finish uninstalling, manually remove the Docuvia MCP server entry from your global MCP config",UNINSTALL_GIT_HOOKS_SUCCESS:(e,n)=>`Removed git hooks (post-commit: ${e?"removed":"not present"}, pre-push: ${n?"removed":"not present"}).`,UNINSTALL_GIT_HOOKS_FAIL:"Failed to remove git hooks: ",UNINSTALL_GIT_HOOKS_FAIL_LOG:"uninstall's git hooks removal failed",UNINSTALL_GIT_HOOKS_FAILURE_NAME:"git hooks removal",UNINSTALL_KNOWLEDGE_BRANCH_DELETED:"Deleted the hidden docuvia-knowledge git branch.",UNINSTALL_DOCUVIA_DIR_REMOVED:"Removed the .docuvia/ directory.",UNINSTALL_DOCUVIA_DIR_FAIL:"Failed to remove the .docuvia/ directory: ",UNINSTALL_DOCUVIA_DIR_FAIL_LOG:"uninstall's .docuvia/ directory removal failed",UNINSTALL_DOCUVIA_DIR_FAILURE_NAME:".docuvia/ directory removal",DOCTOR_HEADER:"Docuvia Doctor Diagnostics",DOCTOR_START:"Running diagnostics...",DOCTOR_FAIL:"Doctor failed: ",DOCTOR_SUMMARY_PASSED:(e,n)=>`Summary: ${e}/${n} checks passed.`,DOCTOR_FIX_HINT:"Tip: run `docuvia doctor --fix` to attempt automatic repair.",DOCTOR_COL_CHECK:"Check",DOCTOR_COL_STATUS:"Status",DOCTOR_COL_MESSAGE:"Message",DOCTOR_COL_FIX:"Suggested Fix",DOCTOR_STATUS_PASS:"PASS",DOCTOR_STATUS_FAIL:"FAIL",DOCTOR_CATEGORY_DATABASE:"Database",DOCTOR_CATEGORY_GIT:"Git",DOCTOR_CATEGORY_GIT_HOOKS:"Git Hooks",DOCTOR_CATEGORY_LOGS:"Logs",DOCTOR_CATEGORY_TIER_B:"Tier B Batch",DOCTOR_CATEGORY_TIER_B_COVERAGE:"Tier B Coverage",DOCTOR_CATEGORY_LLM:"LLM Integration",DOCTOR_CATEGORY_LSP:"LSP Providers",DOCTOR_CATEGORY_AGENT_HOOKS:"AI Agent Hooks",DOCTOR_CATEGORY_AGENT_ADOPTION:"Docuvia-First Workflow",DOCTOR_CATEGORY_OTHER:"Other",QUERY_HEADER:"Query Knowledge Graph",QUERY_PROMPT_TARGET:"What would you like to query? ",QUERY_MISSING_TARGET:"A query target is required (pass it as an argument).",QUERY_MISSING_TARGET_NON_TTY:"A query target is required.",QUERY_START:"Querying local knowledge graph for ",QUERY_FOUND:"Query resolved for ",QUERY_FAIL:"Query failed: ",QUERY_CONTEXT_HEADER:"Query Results",QUERY_L2_PREFIX:"Module: ",QUERY_NO_L2:"No matching module found.",QUERY_L3_PREFIX:"Decision: ",QUERY_L3_PROVENANCE:e=>` (${e.join(", ")})`,QUERY_UNKNOWN_STATUS:"unknown",QUERY_INCOMING_HEADER:"Incoming (callers/dependents)",QUERY_OUTGOING_HEADER:"Outgoing (dependencies)",QUERY_COL_NAME:"Name",QUERY_COL_RELATION:"Relation",QUERY_INVALID_LIMIT:"Ignoring invalid --limit value (must be a positive integer): ",QUERY_TIER_B_INCOMING_UNPROCESSED:(e,n)=>`No callers found, but ${e} of ${n} tracked file(s) have never been Tier B-processed -- this may be incomplete, not confirmed zero. Run \`docuvia analyze --escalate-to-lsp --full\` to resync.`,QUERY_TIER_B_OUTGOING_UNPROCESSED:"No callees found, but this symbol's own file has never been Tier B-processed -- this may be incomplete, not confirmed zero. Run `docuvia analyze --escalate-to-lsp --full` to resync.",QUERY_MATCH_TYPE_EXACT:" (exact match)",QUERY_MATCH_TYPE_KEYWORD:" (keyword match -- verify with Grep/Glob if unsure)",QUERY_MATCH_TYPE_NEIGHBOR:" (neighbor match)",EXPORT_HEADER:"Export Topology",EXPORT_START:"Exporting topology...",EXPORT_SUCCESS:"Exported topology to ",EXPORT_FAIL:"Export failed: ",EXPORT_STATS_LINE:(e,n,t)=>`Nodes: ${e}, Links: ${n}, Groups: ${t}`,EXPORT_COLLAPSED_LINE:"Collapsed: yes (fewer nodes than the raw graph).",EXPORT_FOLDED_LINE:e=>`Folded links: ${e} more relationship(s) folded within files at this granularity; pass --collapse=symbol for the full symbol-level view.`,EXPORT_HTML_PATH_LINE:e=>`HTML viewer: ${e}`,SNAPSHOT_HEADER:"Snapshot Knowledge Graph",SNAPSHOT_START:"Packing knowledge graph snapshot...",SNAPSHOT_SUCCESS:"Snapshot packed onto the knowledge branch.",SNAPSHOT_FAIL:"Snapshot failed: ",SNAPSHOT_NODES_WRITTEN_LINE:e=>`Nodes written: ${e}`,SNAPSHOT_EDGES_WRITTEN_LINE:e=>`Edges written: ${e}`,SNAPSHOT_MARKDOWN_WRITTEN_LINE:e=>`Markdown files written: ${e}`,HYDRATE_HEADER:"Hydrate Local Database",HYDRATE_START:"Hydrating local database from the knowledge branch...",HYDRATE_SUCCESS:"Hydrated local database.",HYDRATE_NOTHING:'Nothing to hydrate from yet \u2014 run "docuvia init" first.',HYDRATE_FAIL:"Hydrate failed: ",HYDRATE_NODES_LOADED_LINE:e=>`Nodes loaded: ${e}`,HYDRATE_EDGES_LOADED_LINE:e=>`Edges loaded: ${e}`,HYDRATE_EDGES_DROPPED_LINE:e=>`Dangling edges dropped: ${e}`,HYDRATE_REFUSED:e=>`Refused to hydrate: ${e==="pending-local-write"?"a knowledge-branch write from this workspace hasn't been confirmed yet":"this would replace local.db's graph with a drastically smaller one"}. Local data was left untouched. Re-run with --force if you're sure.`,SYNC_KNOWLEDGE_HEADER:"Sync Knowledge Branch",SYNC_KNOWLEDGE_START:"Reconciling the knowledge branch with the remote...",SYNC_KNOWLEDGE_NO_REMOTE:"No remote reachable \u2014 nothing to reconcile (offline or no origin configured).",SYNC_KNOWLEDGE_UP_TO_DATE:"Knowledge branch is already up to date with the remote.",SYNC_KNOWLEDGE_FAST_FORWARDED:"Fast-forwarded the local knowledge branch to the remote.",SYNC_KNOWLEDGE_PUSHED:"Pushed the local knowledge branch to the remote.",SYNC_KNOWLEDGE_MERGED:"Merged the diverged knowledge branch and pushed the result.",SYNC_KNOWLEDGE_FAIL:"Knowledge branch sync failed: ",HOOKS_HEADER:"Docuvia Hooks",HOOKS_COL_NAME:"Hook",HOOKS_COL_STATUS:"Status",HOOKS_STATUS_ENABLED:"enabled",HOOKS_STATUS_DISABLED:"disabled",HOOKS_LIST_FAIL:"Failed to list hooks: ",HOOKS_SET_FAIL:"Failed to update hook: ",HOOKS_ENABLED:e=>`Enabled hook: ${e}`,HOOKS_DISABLED:e=>`Disabled hook: ${e}`,HOOKS_INVALID_NAME:(e,n)=>`Unknown hook '${e??""}' -- valid names: ${n.join(", ")}`,HOOKS_UNKNOWN_SUBCOMMAND:e=>`Unknown 'docuvia hooks' subcommand '${e??""}' -- expected list, enable, disable, or check`};var y="ENOENT";async function j(e,n,t){let r;try{r=await a.readFile(e,c)}catch(o){o.code!==y&&I.warn(`${S.FS_READ_ERROR}${e} (${o.code??S.FS_READ_ERROR_UNKNOWN_CODE}); creating a new file instead of appending`)}if(r===void 0){await a.mkdir(g.dirname(e),{recursive:!0}),await a.writeFile(e,n),I.success(S.FS_CREATED+e);return}r.includes(t)?I.info(S.FS_ALREADY_EXISTS+e):(await a.appendFile(e,`
4
+ ${n}`),I.success(S.FS_APPENDED+e))}async function G(e){try{let n=await a.readFile(e,c),t=`${e}.bak`;return await a.writeFile(t,n,c),t}catch{return null}}async function J(e,n,t){try{let r=await a.readFile(e,c),o=r.indexOf(n);if(o===-1)return!1;let s=r.indexOf(t,o);if(s===-1)return!1;await G(e);let A=r.slice(0,o),_=r.slice(s+t.length);return await a.writeFile(e,(A+_).trim()+`
5
+ `,c),I.success(`${S.FS_BLOCK_REMOVED_PREFIX}${e}${S.FS_BLOCK_REMOVED_SUFFIX}`),!0}catch{return!1}}export{i as a,v as b,I as c,S as d,j as e,G as f,J as g};
6
+ //# sourceMappingURL=chunk-GUQGOUGL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/fs-utils.ts","../src/ui/wizard.ts","../src/constants/box-drawing.ts","../src/ui/table.ts","../src/constants/ui-messages.ts"],"sourcesContent":["import * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport { UTF8_ENCODING } from \"@workspace/contracts\";\nimport { ui } from \"../ui/wizard.js\";\nimport { UI_MESSAGES } from \"../constants/ui-messages.js\";\n\nconst ERRNO_ENOENT = \"ENOENT\";\n\nexport async function writeOrAppend(\n filePath: string,\n content: string,\n marker: string,\n) {\n let existing: string | undefined;\n try {\n existing = await fs.readFile(filePath, UTF8_ENCODING);\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== ERRNO_ENOENT) {\n ui.warn(\n `${UI_MESSAGES.FS_READ_ERROR}${filePath} (${(err as NodeJS.ErrnoException).code ?? UI_MESSAGES.FS_READ_ERROR_UNKNOWN_CODE}); creating a new file instead of appending`,\n );\n }\n }\n\n if (existing === undefined) {\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n await fs.writeFile(filePath, content);\n ui.success(UI_MESSAGES.FS_CREATED + filePath);\n return;\n }\n\n if (!existing.includes(marker)) {\n await fs.appendFile(filePath, `\\n${content}`);\n ui.success(UI_MESSAGES.FS_APPENDED + filePath);\n } else {\n ui.info(UI_MESSAGES.FS_ALREADY_EXISTS + filePath);\n }\n}\n\nexport async function createBackup(filePath: string): Promise<string | null> {\n try {\n const existing = await fs.readFile(filePath, UTF8_ENCODING);\n const backupPath = `${filePath}.bak`;\n await fs.writeFile(backupPath, existing, UTF8_ENCODING);\n return backupPath;\n } catch {\n return null;\n }\n}\n\nexport async function removeBlock(\n filePath: string,\n startMarker: string,\n endMarker: string,\n): Promise<boolean> {\n try {\n const existing = await fs.readFile(filePath, UTF8_ENCODING);\n const startIndex = existing.indexOf(startMarker);\n if (startIndex === -1) return false;\n\n const endIndex = existing.indexOf(endMarker, startIndex);\n if (endIndex === -1) return false;\n\n await createBackup(filePath);\n\n const before = existing.slice(0, startIndex);\n const after = existing.slice(endIndex + endMarker.length);\n await fs.writeFile(filePath, (before + after).trim() + \"\\n\", UTF8_ENCODING);\n ui.success(\n `${UI_MESSAGES.FS_BLOCK_REMOVED_PREFIX}${filePath}${UI_MESSAGES.FS_BLOCK_REMOVED_SUFFIX}`,\n );\n return true;\n } catch {\n return false;\n }\n}\n","import { select, confirm, input, checkbox } from \"@inquirer/prompts\";\nimport pc from \"picocolors\";\nimport ora from \"ora\";\nimport { renderBanner, renderTable, type TableColumn } from \"./table.js\";\nimport { SECTION_ICON } from \"../constants/box-drawing.js\";\n\nconst SPINNER_COLOR = \"cyan\";\nconst UI_ICONS = {\n INFO: \"ℹ\",\n SUCCESS: \"✔\",\n WARN: \"⚠\",\n ERROR: \"✖\",\n} as const;\n\n/** picocolors' default export forces color on unconditionally on win32 and honors ambient\n * `FORCE_COLOR`, regardless of whether stdout is actually a terminal -- both wrong for this\n * CLI's \"stays plain-text/parseable when piped to a non-TTY reader\" contract (box-drawing.ts,\n * table.ts). Gate on a real TTY so redirected/piped output (tests, log files, AI agents) never\n * carries ANSI escape codes. */\nconst color = pc.createColors(\n Boolean(process.stdout.isTTY) && !process.env.NO_COLOR,\n);\n\nexport const ui = {\n spinner: (text: string) => {\n return ora({\n text,\n color: SPINNER_COLOR,\n });\n },\n\n info: (msg: string) => console.log(color.cyan(`${UI_ICONS.INFO} ${msg}`)),\n success: (msg: string) =>\n console.log(color.green(`${UI_ICONS.SUCCESS} ${msg}`)),\n warn: (msg: string) => console.warn(color.yellow(`${UI_ICONS.WARN} ${msg}`)),\n error: (msg: string) => console.error(color.red(`${UI_ICONS.ERROR} ${msg}`)),\n log: (msg?: string) => console.log(msg ?? \"\"),\n\n /** Every command's top-of-run banner -- one shared box-drawn style (IFCE CLI output-style\n * pass) so the terminal output looks the same regardless of which command produced it, and\n * stays plain-text/parseable when piped to a non-TTY reader (an AI agent, a log file). */\n header: (title: string) => {\n console.log();\n for (const line of renderBanner(title)) console.log(color.cyan(line));\n console.log();\n },\n\n /** A labeled sub-section within a command's output, e.g. grouping `doctor`'s diagnostics by\n * category ahead of each `ui.table()` call. */\n section: (title: string) => {\n console.log();\n console.log(color.bold(color.cyan(`${SECTION_ICON} ${title}`)));\n },\n\n /** Renders a bordered table -- see `renderTable` (`./table.js`) for the layout/wrapping rules. */\n table: (columns: TableColumn[], rows: string[][]) => {\n for (const line of renderTable(columns, rows)) console.log(line);\n },\n\n askConfirm: async (message: string, defaultAnswer = true) => {\n return await confirm({ message, default: defaultAnswer });\n },\n\n askSelect: async (\n message: string,\n choices: { name: string; value: string; description?: string }[],\n ) => {\n return await select({\n message,\n choices,\n });\n },\n\n askCheckbox: async (\n message: string,\n choices: { name: string; value: string; checked?: boolean }[],\n ) => {\n return await checkbox({\n message,\n choices,\n });\n },\n\n askInput: async (message: string, defaultAnswer?: string) => {\n return await input({ message, default: defaultAnswer });\n },\n};\n","/**\n * Box-drawing characters and status icons shared by `ui.header`/`ui.section`/`ui.table`\n * (`../ui/table.js`, `../ui/wizard.js`). One glyph set for every command's banners, section\n * headers, and tables so terminal output stays visually consistent (IFCE CLI output-style pass)\n * and stays plain-text/parseable for a piped AI-agent reader (no ANSI, stable characters).\n */\nexport const BOX_CHARS = {\n TOP_LEFT: \"┌\",\n TOP_RIGHT: \"┐\",\n BOTTOM_LEFT: \"└\",\n BOTTOM_RIGHT: \"┘\",\n HORIZONTAL: \"─\",\n VERTICAL: \"│\",\n T_DOWN: \"┬\",\n T_UP: \"┴\",\n T_RIGHT: \"├\",\n T_LEFT: \"┤\",\n CROSS: \"┼\",\n} as const;\n\n/** Status glyphs for table `Status` cells -- shape-coded (not color-coded) so meaning survives\n * both a non-TTY/piped agent reader and a colorblind human reader. */\nexport const STATUS_ICONS = {\n PASS: \"✓\",\n FAIL: \"✗\",\n} as const;\n\n/** Marker prefixed to `ui.section()` titles. */\nexport const SECTION_ICON = \"◆\";\n","import { BOX_CHARS } from \"../constants/box-drawing.js\";\n\nconst LAYOUT = {\n SPACE: \" \",\n EMPTY: \"\",\n} as const;\n\nexport interface TableColumn {\n header: string;\n /** Wrap cell text past this width instead of growing the column further. Omit for\n * columns whose content is always short (ids, status labels). */\n maxWidth?: number;\n}\n\n/** Collapses embedded newlines/tabs/runs of spaces into single spaces. Cell content often comes\n * from raw error text (e.g. a multi-line `git` stderr dump folded into a `DiagnosticResult`\n * message) -- left as-is, an embedded `\\n` would print mid-cell and break every border below it,\n * not just wrap unusually. */\nfunction normalizeCellText(text: string): string {\n return text.replace(/\\s+/g, LAYOUT.SPACE).trim();\n}\n\n/** Greedy word-wrap into lines no longer than `width` (an unbreakable word may still exceed it --\n * matches standard terminal word-wrap: overflow, not mid-word mangling). Assumes `text` has\n * already been through `normalizeCellText`. */\nfunction wrapCell(text: string, width: number): string[] {\n if (text.length <= width) return [text];\n\n const words = text.split(LAYOUT.SPACE);\n const lines: string[] = [];\n let current: string = LAYOUT.EMPTY;\n for (const word of words) {\n const candidate = current ? `${current}${LAYOUT.SPACE}${word}` : word;\n if (candidate.length > width && current) {\n lines.push(current);\n current = word;\n } else {\n current = candidate;\n }\n }\n if (current) lines.push(current);\n return lines;\n}\n\nfunction padCell(text: string, width: number): string {\n return text + LAYOUT.SPACE.repeat(Math.max(0, width - text.length));\n}\n\nfunction buildBorder(\n widths: number[],\n left: string,\n mid: string,\n right: string,\n): string {\n return (\n left +\n widths.map((w) => BOX_CHARS.HORIZONTAL.repeat(w + 2)).join(mid) +\n right\n );\n}\n\nfunction buildLine(cells: string[], widths: number[]): string {\n const padded = cells.map((cell, i) =>\n padCell(cell ?? LAYOUT.EMPTY, widths[i]),\n );\n return `${BOX_CHARS.VERTICAL} ${padded.join(` ${BOX_CHARS.VERTICAL} `)} ${BOX_CHARS.VERTICAL}`;\n}\n\nfunction computeColumnWidths(\n columns: TableColumn[],\n rows: string[][],\n): number[] {\n return columns.map((col, i) => {\n const natural = Math.max(\n col.header.length,\n ...rows.map((row) => (row[i] ?? LAYOUT.EMPTY).length),\n );\n return col.maxWidth ? Math.min(natural, col.maxWidth) : natural;\n });\n}\n\n/**\n * Renders a bordered, human-scannable table that is equally easy for a piped/AI-agent reader to\n * parse: fixed column count, `│`-delimited cells, no ANSI color inside the grid (status is\n * shape-coded via `STATUS_ICONS`, not color-coded).\n */\nexport function renderTable(\n columns: TableColumn[],\n rows: string[][],\n): string[] {\n const headers = columns.map((c) => normalizeCellText(c.header));\n const normalizedRows = rows.map((row) =>\n row.map((cell) => normalizeCellText(cell ?? LAYOUT.EMPTY)),\n );\n\n const widths = computeColumnWidths(\n columns.map((c, i) => ({ ...c, header: headers[i] })),\n normalizedRows,\n );\n const wrappedRows = normalizedRows.map((row) =>\n columns.map((_col, i) => wrapCell(row[i] ?? LAYOUT.EMPTY, widths[i])),\n );\n\n const lines: string[] = [\n buildBorder(\n widths,\n BOX_CHARS.TOP_LEFT,\n BOX_CHARS.T_DOWN,\n BOX_CHARS.TOP_RIGHT,\n ),\n buildLine(headers, widths),\n buildBorder(widths, BOX_CHARS.T_RIGHT, BOX_CHARS.CROSS, BOX_CHARS.T_LEFT),\n ];\n\n for (const wrapped of wrappedRows) {\n const height = Math.max(...wrapped.map((cellLines) => cellLines.length));\n for (let lineIndex = 0; lineIndex < height; lineIndex++) {\n lines.push(\n buildLine(\n wrapped.map((cellLines) => cellLines[lineIndex] ?? LAYOUT.EMPTY),\n widths,\n ),\n );\n }\n }\n\n lines.push(\n buildBorder(\n widths,\n BOX_CHARS.BOTTOM_LEFT,\n BOX_CHARS.T_UP,\n BOX_CHARS.BOTTOM_RIGHT,\n ),\n );\n return lines;\n}\n\n/** Renders an auto-sized single-line-title banner, e.g. for `ui.header()`. */\nexport function renderBanner(title: string): string[] {\n const horizontal = BOX_CHARS.HORIZONTAL.repeat(title.length + 2);\n return [\n `${BOX_CHARS.TOP_LEFT}${horizontal}${BOX_CHARS.TOP_RIGHT}`,\n `${BOX_CHARS.VERTICAL} ${title} ${BOX_CHARS.VERTICAL}`,\n `${BOX_CHARS.BOTTOM_LEFT}${horizontal}${BOX_CHARS.BOTTOM_RIGHT}`,\n ];\n}\n","/**\n * `INIT_*`/general-CLI/filesystem-helper messages, plus `CLEAN_*`/`STATUS_*`/`PUBLISH_*`/`ANALYZE_*`\n * for the commands rebuilt so far — old Docuvia's ~100+ message file also carried `QUERY_*`/\n * `IMPACT_*`/`REVIEW_*`/`SNAPSHOT_*`/`EXPORT_*` for commands that don't exist in this milestone.\n * Port the rest in alongside each command as it's rebuilt.\n */\nexport const UI_MESSAGES = {\n // General CLI\n CLI_HEADER: \"Docuvia Knowledge Graph\",\n CLI_PROMPT_ACTION: \"What would you like to do?\",\n CLI_UNKNOWN_COMMAND: \"Unknown command: \",\n CLI_FATAL_ERROR: \"Fatal error: \",\n // IFCE-004: interactive prompts are opt-in (--interactive/-i) only.\n CLI_INTERACTIVE_NO_TTY:\n \"--interactive requires a real terminal and is disabled under CI -- cannot launch the wizard menu.\",\n CLI_INTERACTIVE_UNAVAILABLE:\n \"--interactive was requested, but this session has no usable TTY (or is running under CI) -- continuing non-interactively.\",\n\n // Init Command\n INIT_HEADER: \"Initialize Docuvia\",\n INIT_CONFIRM: \"Initialize Docuvia in this workspace?\",\n INIT_ABORTED: \"Initialization aborted.\",\n INIT_START: \"Starting initialization...\",\n INIT_FAILED: \"Initialization failed: \",\n INIT_AGENT_HOOKS: \"Initializing AI Agent integrations for Docuvia...\",\n INIT_LOCK_WAITING:\n \"Another `docuvia init` is already running in this workspace; waiting for it to finish...\",\n\n // Init Agent Hooks\n INIT_HOOKS_CONFIG_MCP: \"Configuring MCP Servers...\",\n INIT_HOOKS_REGISTERED_MCP: \"Registered MCP server in: \",\n INIT_HOOKS_FAIL_CURSOR_MCP: \"Could not configure Cursor MCP: \",\n INIT_HOOKS_SUCCESS: \"Docuvia Agent Integrations successfully installed!\",\n INIT_HOOKS_SUPPORTED:\n \"Supported platforms: Claude Code, Cursor, GitHub Copilot, Codex, Continue, Hermes Agent.\",\n INIT_HOOKS_FAIL: \"Failed to initialize agent integrations: \",\n INIT_HOOKS_SELECT: \"Which AI Agent integrations would you like to install?\",\n INIT_HOOKS_NONE_SELECTED:\n \"No platforms selected. Skipping agent integrations.\",\n // IFCE-002: Docuvia never writes machine-global state — print the snippet, let the user paste it.\n INIT_CLAUDE_MCP_MANUAL_SNIPPET:\n \"To use Docuvia from Claude Desktop, add this to your global MCP config\",\n\n // Filesystem write helper (writeOrAppend)\n FS_APPENDED: \"Appended instructions to: \",\n FS_ALREADY_EXISTS: \"Instructions already exist in: \",\n FS_CREATED: \"Created: \",\n FS_READ_ERROR: \"Could not read \",\n FS_READ_ERROR_UNKNOWN_CODE: \"unknown error\",\n FS_BLOCK_REMOVED_PREFIX: \"Removed block from \",\n FS_BLOCK_REMOVED_SUFFIX: \" (backup created)\",\n /** Guards a write path (e.g. mergeDocuviaHookIntoProjectSettings) that finds a key already\n * present with an unexpected (non-array) shape it can't safely merge into -- never coerce or\n * overwrite a shape it can't trust, just warn and leave the file untouched. */\n FS_UNEXPECTED_SHAPE: (key: string, settingsPath: string) =>\n `Unexpected shape for \"${key}\" in ${settingsPath} (expected an array); leaving it untouched`,\n\n // Clean Command\n CLEAN_HEADER: \"Clean Docuvia Database\",\n CLEAN_CONFIRM:\n \"This will permanently delete the local Docuvia database. Continue?\",\n CLEAN_ABORTED: \"Clean aborted.\",\n CLEAN_START: \"Cleaning database...\",\n CLEAN_SUCCESS: \"Clean complete. \",\n CLEAN_FAIL: \"Clean failed: \",\n\n // Status Command\n STATUS_START: \"Getting status...\",\n STATUS_SUCCESS: \"Status retrieved.\",\n STATUS_FAIL: \"Failed to get status: \",\n STATUS_HEADER: \"Docuvia Status\",\n STATUS_COL_METRIC: \"Metric\",\n STATUS_COL_VALUE: \"Value\",\n STATUS_METRIC_PROJECTS: \"Projects\",\n STATUS_METRIC_L2_NODES: \"L2 Nodes\",\n STATUS_METRIC_L3_DECISIONS: \"L3 Decisions\",\n STATUS_METRIC_TIER_B_COVERAGE: \"Tier B Coverage\",\n // Issue #58: pending Tier C (LLM-inferred L3) candidates -- surfaced so a permanently-empty\n // queue is visible rather than silent.\n STATUS_METRIC_TIER_C_QUEUE: \"Tier C Queue\",\n // Issue #193: HEAD-vs-last-ingested freshness for agent/hook quick checks.\n STATUS_METRIC_GRAPH_FRESHNESS: \"Graph Freshness\",\n STATUS_FRESHNESS_FRESH: \"✓ fresh\",\n STATUS_FRESHNESS_STALE:\n \"⚠ stale (run 'docuvia analyze' or see 'docuvia doctor')\",\n STATUS_FRESHNESS_UNKNOWN: \"? unknown\",\n\n // Publish Command (IFCE-005: renamed from `sync`)\n PUBLISH_HEADER: \"Publish to Docuvia\",\n PUBLISH_MISSING_PROJECT_ID:\n \"Project ID is required when not running interactively.\",\n PUBLISH_NO_PROJECT_ID_PROVIDED: \"No project ID provided.\",\n PUBLISH_PROMPT_PROJECT_ID: \"Enter the project ID to publish to: \",\n PUBLISH_PROJECT_ID_REQUIRED: \"Project ID is required.\",\n PUBLISH_MISSING_ENV: \"DOCUVIA_API_URL and/or MCP_PAT are not set.\",\n PUBLISH_SKIP: \"Skipping publish.\",\n PUBLISH_START: \"Starting publish for project \",\n PUBLISH_SUCCESS: \"Publish complete.\",\n PUBLISH_FAIL: \"Publish failed: \",\n\n // Analyze Command\n ANALYZE_HEADER: \"Analyze Project\",\n ANALYZE_START: \"Analyzing project...\",\n ANALYZE_SUCCESS: \"Analysis complete.\",\n ANALYZE_FAIL: \"Analysis failed: \",\n ANALYZE_PROJECT_TYPE: \"Project Type: \",\n ANALYZE_SUGGESTED_TAGS: \"Suggested Tags: \",\n ANALYZE_NONE: \"none\",\n // Auto mode (PLAT-007 Tier A) — no-arg `analyze`'s three outcomes.\n ANALYZE_AUTO_FULL_SUCCESS: \"Full ingestion complete.\",\n ANALYZE_AUTO_FULL_SUMMARY: (\n filesParsed: number,\n filesRequested: number,\n filesFailed: number,\n ) =>\n `Parsed ${filesParsed}/${filesRequested} file(s) (${filesFailed} failed).`,\n ANALYZE_AUTO_DELTA_SUCCESS: \"Delta ingestion complete.\",\n ANALYZE_AUTO_DELTA_SUMMARY: (\n filesReparsed: number,\n filesDeleted: number,\n tierBQueued: number,\n ) =>\n `Re-parsed ${filesReparsed} file(s), dropped ${filesDeleted} deleted file(s)` +\n (tierBQueued > 0 ? `, queued ${tierBQueued} file(s) for Tier B.` : \".\"),\n ANALYZE_AUTO_NOOP_SUCCESS: \"Already up to date.\",\n /** 2026-07-24 C# benchmark follow-up: the fast-path is HEAD-sha-based and can't see uncommitted\n * edits by design (PLAT-007) -- this variant tells an interactive human that explicitly instead\n * of reporting the same \"up to date\" as a clean tree. */\n ANALYZE_AUTO_NOOP_DIRTY_WORKTREE_SUCCESS:\n \"Already up to date with HEAD -- uncommitted changes in the working tree were not analyzed (commit them, then re-run).\",\n ANALYZE_LLM_MISSING_ENV:\n \"AI_DOCUVIA_INTEGRATIONS_OPENAI_BASE_URL and a model (AI_DOCUVIA_MODEL or AI_DOCUVIA_FAST_MODEL) must be set to analyze a specific path.\",\n ANALYZE_FOCUSED_HEADER: \"Analyze Path\",\n ANALYZE_FOCUSED_START: \"Extracting decisions from \",\n ANALYZE_FOCUSED_SUCCESS: \"Decision extraction complete.\",\n ANALYZE_FOCUSED_FAIL: \"Decision extraction failed: \",\n ANALYZE_FOCUSED_NONE: \"No decision-worthy content found.\",\n ANALYZE_FOCUSED_PERSISTED: (persisted: number, deduped: number) =>\n `${persisted} persisted, ${deduped} deduplicated`,\n /** One decision line, e.g. \"Use exitCode not exit() (rule, confidence: 0.85)\" -- matches the\n * \"primary fact (parenthetical detail)\" convention used by doctor/impact's table+prose output. */\n ANALYZE_DECISION_LINE: (\n nodeType: string,\n title: string,\n confidence: number,\n ) => `${title} (${nodeType}, confidence: ${confidence})`,\n ANALYZE_DECISION_CONTENT_PREFIX: \" \",\n\n // --escalate-to-lsp (PLAT-007 Tier B; phase1-decision-integration.md §8)\n ANALYZE_TIER_B_HEADER: \"Analyze -- Tier B (LSP escalation)\",\n ANALYZE_TIER_B_START: \"Running the Tier B LSP escalation batch...\",\n ANALYZE_TIER_B_SUCCESS: \"Tier B batch complete.\",\n ANALYZE_TIER_B_FAIL: \"Tier B batch failed: \",\n ANALYZE_TIER_B_SUMMARY: (\n filesProcessed: number,\n edgesApplied: number,\n filesFailed: number,\n filesFailedPermanent: number,\n zeroProgressWatchdogTripped: boolean,\n ) =>\n `${filesProcessed} file(s) processed, ${edgesApplied} corrected edge(s) applied` +\n (filesFailed > 0\n ? `, ${filesFailed} file(s) left queued for the next batch`\n : \"\") +\n (filesFailedPermanent > 0\n ? `, ${filesFailedPermanent} file(s) permanently failed (not re-queued)`\n : \"\") +\n (zeroProgressWatchdogTripped\n ? \", zero-progress watchdog tripped: no next-batch re-queue remains\"\n : \"\") +\n \".\",\n ANALYZE_TIER_B_DEGRADED: (reason: string) =>\n `LSP unavailable -- AST-level edges left untouched (${reason})`,\n /** D2's mandatory pre-flight gate (phase1-decision-integration.md §8c). Shown only on an\n * interactive terminal (`-i`/`--interactive`); a non-interactive invocation gets\n * `ANALYZE_TIER_B_GATE_FAILED` instead (hard failure, no prompt). */\n ANALYZE_TIER_B_GATE_NOT_READY: (reason: string) =>\n `LSP prerequisites are not ready: ${reason}`,\n ANALYZE_TIER_B_GATE_PROMPT:\n \"Continue with AST-only precision (skip the LSP-corrected cross-file edges this batch)?\",\n ANALYZE_TIER_B_GATE_DECLINED:\n \"Aborted -- install typescript-language-server as a project devDependency (or pass --fallback-ast) and try again.\",\n /** Non-interactive equivalent of `ANALYZE_TIER_B_GATE_NOT_READY` -- a bare `analyze\n * --escalate-to-lsp` (no `-i`, no `--fallback-ast`) with an unready environment now fails\n * outright rather than silently degrading and reporting success (2026-07 C#/TS benchmark\n * finding: a target project that was never built produced wasted, inaccurate runs because\n * nothing surfaced this before the batch ran). The pre-push hook opts out via\n * `--fallback-ast` and never reaches this message. */\n ANALYZE_TIER_B_GATE_FAILED: (reason: string) =>\n `LSP prerequisites are not ready: ${reason}\\n` +\n `Build/compile the target project (Docuvia's Tier B relies on a working language server), ` +\n `then run 'docuvia doctor' to confirm. Pass --fallback-ast to proceed with AST-only ` +\n `precision instead.`,\n\n // Tier C's budgeted async LLM decision-extraction drain, folded into --escalate-to-lsp\n // (phase1-decision-integration.md §9) -- no separate header/spinner; its summary is appended\n // after Tier B's own.\n ANALYZE_TIER_C_SUMMARY: (\n processed: number,\n persisted: number,\n failed: number,\n ) =>\n `Tier C: ${processed} candidate(s) processed, ${persisted} decision(s) persisted` +\n (failed > 0 ? `, ${failed} left queued for the next run.` : \".\"),\n ANALYZE_TIER_C_SKIPPED: (reason: string) =>\n `Tier C: drain skipped this run (${reason}).`,\n\n // --agent-authored (issue #42, roadmap items 32-34): a pure data write of an AI coding agent's\n // own already-produced decisions, no LLM call. Reuses ANALYZE_FOCUSED_* for the spinner\n // header/start/success text and printFocusedResult() as-is -- the printed result shape is\n // identical to the LLM path's (analyze-result.ts's DECISION_EXTRACTION kind).\n ANALYZE_AGENT_AUTHORED_MISSING_TARGET:\n \"--agent-authored requires a target path, e.g. docuvia analyze <path> --agent-authored\",\n ANALYZE_AGENT_AUTHORED_MISSING_PAYLOAD:\n \"No decisions payload found -- pipe JSON via stdin or pass --decisions-file=<path>\",\n ANALYZE_AGENT_AUTHORED_INVALID_JSON: (err: string) =>\n `--agent-authored payload is not valid JSON: ${err}`,\n ANALYZE_AGENT_AUTHORED_INVALID_SHAPE: (err: string) =>\n `--agent-authored payload does not match the expected shape: ${err}`,\n\n // Issue #74: DOCUVIA_LSP_ARGS config errors. A leading '[' opts into the JSON-array form, so a\n // malformed JSON array there is a loud operator error, not something to silently re-parse.\n ANALYZE_LSP_ARGS_INVALID_JSON: (err: string) =>\n `DOCUVIA_LSP_ARGS starts with '[' but is not valid JSON -- use a JSON array of strings, or plain space-separated args: ${err}`,\n ANALYZE_LSP_ARGS_INVALID_SHAPE:\n \"DOCUVIA_LSP_ARGS JSON array must contain only strings\",\n\n // --stage (issue #42, Decision 2's two-stage stage-and-flush design §8.1) -- a variant of the\n // --agent-authored dispatch above: appends to .docuvia/pending-l3-decisions.json instead of\n // writing straight to l3_nodes.\n ANALYZE_STAGE_HEADER: \"Stage Decisions\",\n ANALYZE_STAGE_START: \"Staging decisions from \",\n ANALYZE_STAGE_SUCCESS: \"Staged.\",\n ANALYZE_STAGE_SUMMARY: (staged: number) =>\n `${staged} decision(s) staged -- flushed automatically on the next commit that touches this file.`,\n\n // --flush-staged-l3 (issue #42 §8.2) -- the post-commit hook's drain of\n // .docuvia/pending-l3-decisions.json.\n ANALYZE_FLUSH_STAGED_L3_HEADER: \"Flush Staged L3 Decisions\",\n ANALYZE_FLUSH_STAGED_L3_START: \"Flushing staged L3 decisions...\",\n ANALYZE_FLUSH_STAGED_L3_SUCCESS: \"Flush complete.\",\n ANALYZE_FLUSH_STAGED_L3_DISABLED_SUCCESS:\n \"commit-l3-write is disabled -- nothing flushed.\",\n ANALYZE_FLUSH_STAGED_L3_SUMMARY: (\n flushed: number,\n deduped: number,\n stillPending: number,\n ) =>\n `${flushed} flushed, ${deduped} deduplicated` +\n (stillPending > 0\n ? `, ${stillPending} left staged for a future commit.`\n : \".\"),\n /** Issue #57: printed (as a warn) after the flush summary when at least one persist attempt hit\n * the no-graph-to-attach path -- the actionable guidance `ANALYZE_MESSAGES.NO_GRAPH_TO_ATTACH`\n * previously existed only in the JSONL log, leaving a manual `--flush-staged-l3` on a\n * never-ingested graph with an unexplained \"0 flushed, N left staged\". */\n ANALYZE_FLUSH_STAGED_L3_NO_GRAPH_ADVICE:\n \"Some staged decisions could not be attached: the knowledge graph is empty (or hasn't ingested this file yet). Run `docuvia init` first -- decisions need a graph to attach to. They stay staged and retry on the next flush.\",\n\n // Review Command\n REVIEW_HEADER: \"Review Changes\",\n REVIEW_START: \"Analyzing changes...\",\n REVIEW_SUCCESS: \"Analysis complete.\",\n REVIEW_AGAINST: \" against \",\n REVIEW_FAIL: \"Review failed: \",\n REVIEW_FILES_CHANGED: \"Files changed: \",\n REVIEW_RISK_PREFIX: \"Risk level: \",\n REVIEW_WHY_HEADER: \"Why (L3 decisions/context)\",\n REVIEW_WHY_PREFIX: \"Decision: \",\n\n // Impact Command\n IMPACT_HEADER: \"Impact Analysis\",\n IMPACT_MISSING_TARGET: \"A target symbol/module name is required.\",\n IMPACT_START: \"Resolving blast radius for \",\n IMPACT_SUCCESS: \"Resolved blast radius for \",\n IMPACT_FAIL: \"Impact analysis failed: \",\n IMPACT_NOT_FOUND: \"No matching node found for \",\n IMPACT_BLAST_RADIUS_HEADER: \"Blast Radius\",\n IMPACT_NO_DEPENDENTS: \"No dependents found.\",\n IMPACT_RISK_PREFIX: \"Risk level: \",\n IMPACT_WHY_PREFIX: \"Decision: \",\n IMPACT_COL_NAME: \"Name\",\n IMPACT_COL_TYPE: \"Type\",\n /** Issue #217 -- third table column, present only when at least one entry came from the\n * ast_call_sites fallback; static rows read \"static\", fallback rows \"lsp-fallback\". */\n IMPACT_COL_SOURCE: \"Source\",\n IMPACT_EDGE_SOURCE_STATIC: \"static\",\n /** Labels the \"why\" block for one blast-radius entry -- printed below the Name/Type table\n * (`ui.table`), since a table row can't hold prose-length L3 decision content. */\n IMPACT_ENTRY_WHY_LABEL: (name: string) => `${name}:`,\n /** typescript-cli-benchmark.md §5.3/§5.7 item 2 -- printed alongside `IMPACT_NO_DEPENDENTS` when\n * an empty blast radius might mean \"never looked at\" rather than \"confirmed zero\" (some\n * tracked file hasn't been Tier B-processed yet). */\n IMPACT_TIER_B_INCOMPLETE: (unprocessed: number, total: number) =>\n `${unprocessed} of ${total} tracked file(s) have never been Tier B-processed -- this may be incomplete, not confirmed zero. Run \\`docuvia analyze --escalate-to-lsp --full\\` to resync.`,\n /** Issue #192 -- printed under an empty blast radius (or a lower-bound non-empty one) to\n * explain which coverage gap applies; verbatim from the workflow's `riskNote` field. */\n IMPACT_RISK_NOTE_PREFIX: \"Note: \",\n\n // Uninstall Command\n UNINSTALL_HEADER: \"Uninstall Docuvia2 Integrations\",\n UNINSTALL_START: \"Uninstalling Docuvia2 integrations...\",\n UNINSTALL_SUCCESS_CLEAN: \"Cleaned Docuvia: \",\n UNINSTALL_FAIL_CLEAN: \"Failed to clean Docuvia directory: \",\n UNINSTALL_SUCCESS:\n \"Docuvia2 uninstalled successfully. Backup files (.bak) were created for modified Markdown files.\",\n UNINSTALL_FAIL: \"Uninstall failed: \",\n UNINSTALL_HOOKS_SELECT:\n \"Which AI Agent integrations would you like to uninstall?\",\n UNINSTALL_KEEP_DB: \"Skipping local database cleanup (--keep-db).\",\n UNINSTALL_INVALID_WORKSPACE_ROOT: \"Workspace root must not be empty.\",\n UNINSTALL_PLATFORM_FAIL: \"Failed to uninstall hooks for \",\n UNINSTALL_PLATFORM_FAIL_MID: \": \",\n UNINSTALL_PARTIAL: \"Uninstall completed with failures: \",\n UNINSTALL_DB_CLEANUP_FAILURE_NAME: \"local database cleanup\",\n UNINSTALL_HOOKS_FAIL_LOG: \"uninstallHooks failed for platform \",\n UNINSTALL_DB_CLEANUP_FAIL_LOG: \"uninstall's database cleanup failed\",\n UNINSTALL_FAIL_LOG: \"uninstall failed\",\n UNINSTALL_REMOVED_FILE_PREFIX: \"Removed \",\n UNINSTALL_REMOVED_MCP_SERVER_PREFIX: \"Removed MCP server from \",\n UNINSTALL_REMOVED_HOOK_FROM_SETTINGS_PREFIX:\n \"Removed the Docuvia hook entry from \",\n // IFCE-002: Docuvia never writes machine-global state — print a reminder instead of editing\n // Claude Desktop's own (machine-global) config file.\n UNINSTALL_CLAUDE_MCP_MANUAL_REMINDER:\n \"To finish uninstalling, manually remove the Docuvia MCP server entry from your global MCP config\",\n\n // Uninstall Command -- git hooks removal (phase1-decision-integration.md §10a)\n UNINSTALL_GIT_HOOKS_SUCCESS: (\n postCommitRemoved: boolean,\n prePushRemoved: boolean,\n ) =>\n `Removed git hooks (post-commit: ${postCommitRemoved ? \"removed\" : \"not present\"}, pre-push: ${prePushRemoved ? \"removed\" : \"not present\"}).`,\n UNINSTALL_GIT_HOOKS_FAIL: \"Failed to remove git hooks: \",\n UNINSTALL_GIT_HOOKS_FAIL_LOG: \"uninstall's git hooks removal failed\",\n UNINSTALL_GIT_HOOKS_FAILURE_NAME: \"git hooks removal\",\n UNINSTALL_KNOWLEDGE_BRANCH_DELETED:\n \"Deleted the hidden docuvia-knowledge git branch.\",\n\n // Uninstall Command -- full .docuvia/ directory removal\n UNINSTALL_DOCUVIA_DIR_REMOVED: \"Removed the .docuvia/ directory.\",\n UNINSTALL_DOCUVIA_DIR_FAIL: \"Failed to remove the .docuvia/ directory: \",\n UNINSTALL_DOCUVIA_DIR_FAIL_LOG:\n \"uninstall's .docuvia/ directory removal failed\",\n UNINSTALL_DOCUVIA_DIR_FAILURE_NAME: \".docuvia/ directory removal\",\n\n // Doctor Command\n DOCTOR_HEADER: \"Docuvia Doctor Diagnostics\",\n DOCTOR_START: \"Running diagnostics...\",\n DOCTOR_FAIL: \"Doctor failed: \",\n DOCTOR_SUMMARY_PASSED: (passed: number, total: number) =>\n `Summary: ${passed}/${total} checks passed.`,\n DOCTOR_FIX_HINT:\n \"Tip: run `docuvia doctor --fix` to attempt automatic repair.\",\n\n // Doctor Report -- table column headers (`ui.table`, `doctor-report.ts`)\n DOCTOR_COL_CHECK: \"Check\",\n DOCTOR_COL_STATUS: \"Status\",\n DOCTOR_COL_MESSAGE: \"Message\",\n DOCTOR_COL_FIX: \"Suggested Fix\",\n\n // Doctor Report -- Status column cell labels\n DOCTOR_STATUS_PASS: \"PASS\",\n DOCTOR_STATUS_FAIL: \"FAIL\",\n\n // Doctor Report -- diagnostic category section headers (`ui.section`)\n DOCTOR_CATEGORY_DATABASE: \"Database\",\n DOCTOR_CATEGORY_GIT: \"Git\",\n DOCTOR_CATEGORY_GIT_HOOKS: \"Git Hooks\",\n DOCTOR_CATEGORY_LOGS: \"Logs\",\n DOCTOR_CATEGORY_TIER_B: \"Tier B Batch\",\n DOCTOR_CATEGORY_TIER_B_COVERAGE: \"Tier B Coverage\",\n DOCTOR_CATEGORY_LLM: \"LLM Integration\",\n DOCTOR_CATEGORY_LSP: \"LSP Providers\",\n DOCTOR_CATEGORY_AGENT_HOOKS: \"AI Agent Hooks\",\n DOCTOR_CATEGORY_AGENT_ADOPTION: \"Docuvia-First Workflow\",\n DOCTOR_CATEGORY_OTHER: \"Other\",\n\n // Query Command\n QUERY_HEADER: \"Query Knowledge Graph\",\n QUERY_PROMPT_TARGET: \"What would you like to query? \",\n QUERY_MISSING_TARGET: \"A query target is required (pass it as an argument).\",\n QUERY_MISSING_TARGET_NON_TTY: \"A query target is required.\",\n QUERY_START: \"Querying local knowledge graph for \",\n QUERY_FOUND: \"Query resolved for \",\n QUERY_FAIL: \"Query failed: \",\n QUERY_CONTEXT_HEADER: \"Query Results\",\n QUERY_L2_PREFIX: \"Module: \",\n QUERY_NO_L2: \"No matching module found.\",\n QUERY_L3_PREFIX: \"Decision: \",\n /** Human-readable mirror of the prompt-format `<l3_decision>` provenance attributes\n * (issue #68, provenance axis) — tells a human reading the default output who authored a\n * decision and whether it is still considered valid. Rendered only when the entry carries\n * provenance; omitted entirely otherwise. */\n QUERY_L3_PROVENANCE: (parts: string[]) => ` (${parts.join(\", \")})`,\n QUERY_UNKNOWN_STATUS: \"unknown\",\n QUERY_INCOMING_HEADER: \"Incoming (callers/dependents)\",\n QUERY_OUTGOING_HEADER: \"Outgoing (dependencies)\",\n QUERY_COL_NAME: \"Name\",\n QUERY_COL_RELATION: \"Relation\",\n QUERY_INVALID_LIMIT:\n \"Ignoring invalid --limit value (must be a positive integer): \",\n /** typescript-cli-benchmark.md §5.3/§5.7 item 2 -- printed under the Incoming/Outgoing section\n * header when the corresponding edge list is empty but might mean \"never looked at\" rather\n * than \"confirmed zero\" (human-readable mirror of `formatPromptOutput`'s `tier_b_status`\n * attribute). */\n QUERY_TIER_B_INCOMING_UNPROCESSED: (unprocessed: number, total: number) =>\n `No callers found, but ${unprocessed} of ${total} tracked file(s) have never been Tier B-processed -- this may be incomplete, not confirmed zero. Run \\`docuvia analyze --escalate-to-lsp --full\\` to resync.`,\n QUERY_TIER_B_OUTGOING_UNPROCESSED:\n \"No callees found, but this symbol's own file has never been Tier B-processed -- this may be incomplete, not confirmed zero. Run `docuvia analyze --escalate-to-lsp --full` to resync.\",\n /** Human-readable mirror of the prompt-format `match_type` attribute -- tells an agent/human\n * reading the CLI output directly whether the returned module is a confident exact match or a\n * lower-confidence keyword/neighbor guess that should be cross-checked with Grep/Glob. */\n QUERY_MATCH_TYPE_EXACT: \" (exact match)\",\n QUERY_MATCH_TYPE_KEYWORD:\n \" (keyword match -- verify with Grep/Glob if unsure)\",\n QUERY_MATCH_TYPE_NEIGHBOR: \" (neighbor match)\",\n\n // Export Topology Command\n EXPORT_HEADER: \"Export Topology\",\n EXPORT_START: \"Exporting topology...\",\n EXPORT_SUCCESS: \"Exported topology to \",\n EXPORT_FAIL: \"Export failed: \",\n EXPORT_STATS_LINE: (nodes: number, links: number, groups: number) =>\n `Nodes: ${nodes}, Links: ${links}, Groups: ${groups}`,\n EXPORT_COLLAPSED_LINE: \"Collapsed: yes (fewer nodes than the raw graph).\",\n EXPORT_FOLDED_LINE: (foldedLinkCount: number) =>\n `Folded links: ${foldedLinkCount} more relationship(s) folded within files at this ` +\n \"granularity; pass --collapse=symbol for the full symbol-level view.\",\n EXPORT_HTML_PATH_LINE: (htmlPath: string) => `HTML viewer: ${htmlPath}`,\n\n // Snapshot Command\n SNAPSHOT_HEADER: \"Snapshot Knowledge Graph\",\n SNAPSHOT_START: \"Packing knowledge graph snapshot...\",\n SNAPSHOT_SUCCESS: \"Snapshot packed onto the knowledge branch.\",\n SNAPSHOT_FAIL: \"Snapshot failed: \",\n SNAPSHOT_NODES_WRITTEN_LINE: (n: number) => `Nodes written: ${n}`,\n SNAPSHOT_EDGES_WRITTEN_LINE: (n: number) => `Edges written: ${n}`,\n SNAPSHOT_MARKDOWN_WRITTEN_LINE: (n: number) => `Markdown files written: ${n}`,\n\n // Hydrate Command\n HYDRATE_HEADER: \"Hydrate Local Database\",\n HYDRATE_START: \"Hydrating local database from the knowledge branch...\",\n HYDRATE_SUCCESS: \"Hydrated local database.\",\n HYDRATE_NOTHING: 'Nothing to hydrate from yet — run \"docuvia init\" first.',\n HYDRATE_FAIL: \"Hydrate failed: \",\n HYDRATE_NODES_LOADED_LINE: (n: number) => `Nodes loaded: ${n}`,\n HYDRATE_EDGES_LOADED_LINE: (n: number) => `Edges loaded: ${n}`,\n HYDRATE_EDGES_DROPPED_LINE: (n: number) => `Dangling edges dropped: ${n}`,\n HYDRATE_REFUSED: (reason?: string) =>\n `Refused to hydrate: ${\n reason === \"pending-local-write\"\n ? \"a knowledge-branch write from this workspace hasn't been confirmed yet\"\n : \"this would replace local.db's graph with a drastically smaller one\"\n }. Local data was left untouched. Re-run with --force if you're sure.`,\n\n // Sync Knowledge Command\n SYNC_KNOWLEDGE_HEADER: \"Sync Knowledge Branch\",\n SYNC_KNOWLEDGE_START: \"Reconciling the knowledge branch with the remote...\",\n SYNC_KNOWLEDGE_NO_REMOTE:\n \"No remote reachable — nothing to reconcile (offline or no origin configured).\",\n SYNC_KNOWLEDGE_UP_TO_DATE:\n \"Knowledge branch is already up to date with the remote.\",\n SYNC_KNOWLEDGE_FAST_FORWARDED:\n \"Fast-forwarded the local knowledge branch to the remote.\",\n SYNC_KNOWLEDGE_PUSHED: \"Pushed the local knowledge branch to the remote.\",\n SYNC_KNOWLEDGE_MERGED:\n \"Merged the diverged knowledge branch and pushed the result.\",\n SYNC_KNOWLEDGE_FAIL: \"Knowledge branch sync failed: \",\n\n // Hooks Command (issue #42 §7.4) -- docuvia hooks list/enable/disable/check\n HOOKS_HEADER: \"Docuvia Hooks\",\n HOOKS_COL_NAME: \"Hook\",\n HOOKS_COL_STATUS: \"Status\",\n HOOKS_STATUS_ENABLED: \"enabled\",\n HOOKS_STATUS_DISABLED: \"disabled\",\n HOOKS_LIST_FAIL: \"Failed to list hooks: \",\n HOOKS_SET_FAIL: \"Failed to update hook: \",\n HOOKS_ENABLED: (hookName: string) => `Enabled hook: ${hookName}`,\n HOOKS_DISABLED: (hookName: string) => `Disabled hook: ${hookName}`,\n HOOKS_INVALID_NAME: (hookName: string | undefined, validNames: string[]) =>\n `Unknown hook '${hookName ?? \"\"}' -- valid names: ${validNames.join(\", \")}`,\n HOOKS_UNKNOWN_SUBCOMMAND: (subcommand: string | undefined) =>\n `Unknown 'docuvia hooks' subcommand '${subcommand ?? \"\"}' -- expected list, enable, disable, or check`,\n};\n"],"mappings":"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","names":["fs","path","select","confirm","input","checkbox","pc","ora","BOX_CHARS","STATUS_ICONS","SECTION_ICON","LAYOUT","normalizeCellText","text","wrapCell","width","words","lines","current","word","candidate","padCell","buildBorder","widths","left","mid","right","w","BOX_CHARS","buildLine","cells","padded","cell","i","computeColumnWidths","columns","rows","col","natural","row","renderTable","headers","c","normalizedRows","wrappedRows","_col","wrapped","height","cellLines","lineIndex","renderBanner","title","horizontal","SPINNER_COLOR","UI_ICONS","color","pc","ui","text","ora","msg","title","line","renderBanner","SECTION_ICON","columns","rows","renderTable","message","defaultAnswer","confirm","choices","select","checkbox","input","UI_MESSAGES","key","settingsPath","filesParsed","filesRequested","filesFailed","filesReparsed","filesDeleted","tierBQueued","persisted","deduped","nodeType","title","confidence","filesProcessed","edgesApplied","filesFailedPermanent","zeroProgressWatchdogTripped","reason","processed","failed","err","staged","flushed","stillPending","name","unprocessed","total","postCommitRemoved","prePushRemoved","passed","parts","nodes","links","groups","foldedLinkCount","htmlPath","n","hookName","validNames","subcommand","ERRNO_ENOENT","writeOrAppend","filePath","content","marker","existing","UTF8_ENCODING","err","ui","UI_MESSAGES","createBackup","backupPath","removeBlock","startMarker","endMarker","startIndex","endIndex","before","after"]}
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- var a={DEBUG:"debug",INFO:"info",WARN:"warn",ERROR:"error"};var u="ipc-log";function R(t){return typeof t=="object"&&t!==null&&t.type===u}var S=class{constructor(e){this.postMessageFn=e}postMessageFn;debug(e,o){this.send(a.DEBUG,e,o)}info(e,o){this.send(a.INFO,e,o)}warn(e,o){this.send(a.WARN,e,o)}error(e,o){this.send(a.ERROR,e,o)}onLog(){return()=>{}}send(e,o,r){let s=r?{type:u,level:e,message:o,context:r}:{type:u,level:e,message:o};this.postMessageFn(s)}};var _={CONTEXT_INJECTION:"context-injection",COMMIT_L3_WRITE:"commit-l3-write",TIER_B_C_PREPUSH:"tier-b-c-prepush"},z={[_.CONTEXT_INJECTION]:!0,[_.COMMIT_L3_WRITE]:!0,[_.TIER_B_C_PREPUSH]:!0};var I=".docuvia",Z="logs",$="init.log",ee="clean.log",te="status.log",oe="sync.log",re="analyze.log",ne="review.log",se="impact.log",ie="query.log",ae="export-topology.log",ce="snapshot.log",le="hydrate.log",pe="sync-knowledge.log",A="node_modules",ge="local.db",de="init.lock",ue="tierC.lock",me="sync-state.json",Ee="hooks-config.json",_e="pending-l3-decisions.json";var h="utf8";var fe="sha256";var i={TYPESCRIPT:"typescript",JAVASCRIPT:"javascript",PYTHON:"python",RUST:"rust",GO:"go",JAVA:"java",C:"c",CPP:"cpp",RUBY:"ruby",PHP:"php",CSHARP:"csharp"};var Te=".claude/hooks",ye=".cursor/hooks",Le="docuvia-hook.js",Re="docuvia-hook.cjs";var m=class{listeners=new Set;debug(e,o){this.emit(a.DEBUG,e,o)}info(e,o){this.emit(a.INFO,e,o)}warn(e,o){this.emit(a.WARN,e,o)}error(e,o){this.emit(a.ERROR,e,o)}onLog(e){return this.listeners.add(e),()=>this.listeners.delete(e)}emit(e,o,r){let s=r?{level:e,message:o,context:r}:{level:e,message:o};for(let l of this.listeners)l(s)}};function Se(){return new m}var C=class{constructor(e){this.logger=e}logger;handleMessage(e){return R(e)?(this.logger[e.level](e.message,e.context),!0):!1}};var g={GIT_COMMAND_FAILED:"GIT_COMMAND_FAILED",GIT_NETWORK_TIMEOUT:"GIT_NETWORK_TIMEOUT",GIT_NOT_A_REPOSITORY:"GIT_NOT_A_REPOSITORY",GIT_BRANCH_CREATE_FAILED:"GIT_BRANCH_CREATE_FAILED",GIT_HOOK_INSTALL_FAILED:"GIT_HOOK_INSTALL_FAILED",GIT_FAST_IMPORT_FAILED:"GIT_FAST_IMPORT_FAILED",DB_OPEN_FAILED:"DB_OPEN_FAILED",DB_NOT_FOUND:"DB_NOT_FOUND",DB_MIGRATION_FAILED:"DB_MIGRATION_FAILED",DB_QUERY_FAILED:"DB_QUERY_FAILED",DB_LOCKED:"DB_LOCKED",AST_WORKER_CRASHED:"AST_WORKER_CRASHED",AST_PARSE_FAILED:"AST_PARSE_FAILED",FS_READ_FAILED:"FS_READ_FAILED",FS_PATH_TRAVERSAL:"FS_PATH_TRAVERSAL",FACTORY_TOKEN_NOT_REGISTERED:"FACTORY_TOKEN_NOT_REGISTERED",FACTORY_LOCKED:"FACTORY_LOCKED",MEMORY_SCOPE_NOT_FOUND:"MEMORY_SCOPE_NOT_FOUND",SYNC_FETCH_FAILED:"SYNC_FETCH_FAILED",SYNC_PUSH_FAILED:"SYNC_PUSH_FAILED",LLM_NOT_INITIALIZED:"LLM_NOT_INITIALIZED",LLM_CHAT_COMPLETION_FAILED:"LLM_CHAT_COMPLETION_FAILED",LLM_STREAM_FAILED:"LLM_STREAM_FAILED",LLM_INVALID_RESPONSE:"LLM_INVALID_RESPONSE",INIT_WORKFLOW_FAILED:"INIT_WORKFLOW_FAILED",CLEAN_WORKFLOW_FAILED:"CLEAN_WORKFLOW_FAILED",INVALID_INPUT:"INVALID_INPUT"};var Ie="DocuviaError",c=class t extends Error{code;cause;constructor(e,o,r){super(o),this.name=Ie,this.code=e,this.cause=r}static wrap(e,o,r){if(r instanceof t)return r;let s=r instanceof Error?r.message:String(r);return new t(e,`${o}: ${s}`,r)}};var Ae={WORKSPACE_ROOT:"workspaceRoot",API_URL:"apiUrl",PROJECT_ID:"projectId",COMMIT_SHA:"commitSha",TARGET_PATH:"targetPath",LLM_BASE_URL:"llmBaseUrl",LLM_MODEL:"llmModel",BASE_REF:"baseRef",TARGET:"target",ESCALATE_TO_LSP:"escalateToLsp",TIER_B_FULL_RESYNC:"tierBFullResync",LIMIT:"limit",COLLAPSE:"collapse",KEEP_DB:"keepDb",LSP_BINARY_OVERRIDE:"lspBinaryOverride",LSP_ARGS_OVERRIDE:"lspArgsOverride",LSP_TIMEOUT_MS:"lspTimeoutMs",LSP_MAX_PROCESSES:"lspMaxProcesses",TIER_B_COMMIT_CAP:"tierBCommitCap",TIER_C_DAILY_CALL_CAP:"tierCDailyCallCap",TIER_C_DAILY_TOKEN_CAP:"tierCDailyTokenCap",TIER_C_WALL_CLOCK_MS:"tierCWallClockMs",TIER_C_ITEM_CAP:"tierCItemCap",TIER_C_LOAD_THRESHOLD:"tierCLoadThreshold",GIT_NETWORK_TIMEOUT_MS:"gitNetworkTimeoutMs",FORCE:"force",TIER_C_DRAIN_ALL:"tierCDrainAll",AGENT_AUTHORED_DECISIONS:"agentAuthoredDecisions",HOOK_NAME:"hookName",HOOK_ENABLED:"hookEnabled",FLUSH_STAGED_L3:"flushStagedL3"},he={SCOPE_NOT_FOUND:(t,e)=>`Cannot set "${t}": memory scope "${e}" was never created`},f=class{scopes=new Map;createScope(e){this.scopes.has(e)||this.scopes.set(e,new Map)}set(e,o,r){let s=this.scopes.get(e);if(!s)throw new c(g.MEMORY_SCOPE_NOT_FOUND,he.SCOPE_NOT_FOUND(o,e));s.set(o,r)}get(e,o){return this.scopes.get(e)?.get(o)}deleteScope(e){this.scopes.delete(e)}hasScope(e){return this.scopes.has(e)}},Ce=new f;var b={REGISTER_LOCKED:t=>`Cannot register "${t}": factory is locked (test isolation)`,PROVIDER_NOT_REGISTERED:t=>`No provider registered for "${t}" \u2014 the implementation library that owns it was never imported for its registration side effect`},T=class{providers=new Map;locked=!1;register(e,o){if(this.locked)throw new c(g.FACTORY_LOCKED,b.REGISTER_LOCKED(String(e.description)));this.providers.set(e,o)}resolve(e,o){let r=this.providers.get(e);if(!r)throw new c(g.FACTORY_TOKEN_NOT_REGISTERED,b.PROVIDER_NOT_REGISTERED(String(e.description)));return r(this,o)}has(e){return this.providers.has(e)}lock(){this.locked=!0}unlock(){this.locked=!1}reset(){this.providers.clear(),this.locked=!1}},M=new T;function n(t){return Symbol(t)}var Ne={GitProvider:n("IGitProvider"),LineBlameProvider:n("ILineBlameProvider"),KnowledgeGitService:n("IKnowledgeGitService"),FileDiscovery:n("IFileDiscovery"),ConfigScanner:n("IConfigScanner"),VcsScanner:n("IVcsScanner"),AstProcessor:n("IAstProcessor"),GraphPersister:n("IGraphPersister"),TempFileManager:n("TempFileManager"),GraphStoreOpener:n("GraphStoreOpener"),RemoteSyncClient:n("RemoteSyncClient"),LlmClient:n("LlmClient"),QueryService:n("IQueryService"),TierBCoverageHintProvider:n("ITierBCoverageHintProvider"),ImpactService:n("IImpactService"),ChangeDetectionService:n("IChangeDetectionService"),TopologyBuilder:n("ITopologyBuilder"),SnapshotRenderer:n("ISnapshotRenderer"),HydrationService:n("IHydrationService"),DiagnosticRunnerDb:n("DiagnosticRunnerDb"),DiagnosticRunnerGit:n("DiagnosticRunnerGit"),SemanticDiffAnalyzer:n("ISemanticDiffAnalyzer"),EdgeResolutionProviders:n("EdgeResolutionProviders")};var Oe={ADDED:"added",MODIFIED:"modified",DELETED:"deleted",RENAMED:"renamed"};var Pe={LSP:"lsp",LLM_INFERRED:"llm-inferred"},ve={TYPESCRIPT:"typescript",PYTHON:"python",GO:"go",RUST:"rust",JAVA:"java",CPP:"cpp",CSHARP:"csharp",PHP:"php",RUBY:"ruby"};var xe={NO_REMOTE:"no-remote",UP_TO_DATE:"up-to-date",FAST_FORWARDED_LOCAL:"fast-forwarded-local",PUSHED_LOCAL:"pushed-local",MERGED:"merged"};var De={MODULE:"module",PACKAGE:"package",PCD:"pcd"},be={CONTAINS:"contains",CALLS:"calls",IMPLEMENTS:"implements",EXTENDS:"extends",IMPORTS:"imports",DEPENDS_ON:"depends_on",DECISION:"decision"};var Me={PENDING:"pending",ACTIVE:"active",DRAFT:"draft",GARBAGE:"garbage"},ke={ANALYZE:"analyze",AGENT_AUTHORED:"agent-authored"};var Fe={CREATE_L3:"CREATE_L3"};var we={SYSTEM:"system",USER:"user",ASSISTANT:"assistant",TOOL:"tool"};var Ge={LOW:"LOW",MEDIUM:"MEDIUM",HIGH:"HIGH",CRITICAL:"CRITICAL",UNKNOWN:"UNKNOWN"},He={EXACT:"exact",LOWER_BOUND:"lower-bound"},Be={LSP_FALLBACK:"lsp-fallback"};var Ke={L2:"l2",L3:"l3"};var Ue={FILE:"file",SYMBOL:"symbol",DECISION:"decision"},je={AUTO:"auto",FILE:"file",SYMBOL:"symbol"},Ye={L1_TAG:"l1_tag",DIRECTORY:"directory"};var Ve={TYPESCRIPT:"typescript",REACT:"react",EXPRESS:"express",VUE:"vue"},We={UNKNOWN:"unknown",JAVASCRIPT:"javascript",GENERIC:"generic",RUST:"rust",PYTHON:"python",GO:"go"},Xe="general",Qe={FRONTEND:"frontend",BACKEND:"backend",NEXTJS:"nextjs",SSR:"ssr",DRIZZLE:"drizzle",DATABASE:"database",TAILWINDCSS:"tailwindcss",CSS:"css",JEST:"jest",TESTING:"testing",VITEST:"vitest",POSTGRES:"postgres",MONOREPO:"monorepo",TOKIO:"tokio",ASYNC:"async",ACTIX:"actix",SERDE:"serde",TAURI:"tauri",DESKTOP:"desktop",DJANGO:"django",FASTAPI:"fastapi",PANDAS:"pandas",DATA:"data",GIN:"gin",STRICT_TS:"strict-ts",VITE:"vite",BUILD_TOOL:"build-tool"};var k="origin",N={KNOWLEDGE_ROOT:"docuvia-knowledge",KNOWLEDGE_LOG_SCAN_LIMIT:5e3,KNOWLEDGE_DIR_NAME:"knowledge",GRAPH_DIR_NAME:"graph",L3_DIR_NAME:"_l3",NODES_JSONL_NAME:"nodes.jsonl",EDGES_JSONL_NAME:"edges.jsonl",SOURCE_COMMIT_TRAILER_KEY:"Docuvia-Source",POST_COMMIT_HOOK_NAME:"post-commit",POST_COMMIT_HOOK_MARKER:"docuvia analyze",POST_COMMIT_FLUSH_L3_MARKER:"docuvia analyze --flush-staged-l3",POST_COMMIT_NOHUP_MARKER:"nohup npx --no-install docuvia analyze",DOCUVIA_HOOK_HEADER_COMMENT:"# Docuvia Knowledge Graph Evolver Hook",POST_COMMIT_HOOK_CONTENT:`#!/bin/bash
2
+ var a={DEBUG:"debug",INFO:"info",WARN:"warn",ERROR:"error"};var u="ipc-log";function R(t){return typeof t=="object"&&t!==null&&t.type===u}var I=class{constructor(e){this.postMessageFn=e}postMessageFn;debug(e,o){this.send(a.DEBUG,e,o)}info(e,o){this.send(a.INFO,e,o)}warn(e,o){this.send(a.WARN,e,o)}error(e,o){this.send(a.ERROR,e,o)}onLog(){return()=>{}}send(e,o,r){let s=r?{type:u,level:e,message:o,context:r}:{type:u,level:e,message:o};this.postMessageFn(s)}};var _={CONTEXT_INJECTION:"context-injection",COMMIT_L3_WRITE:"commit-l3-write",TIER_B_C_PREPUSH:"tier-b-c-prepush"},z={[_.CONTEXT_INJECTION]:!0,[_.COMMIT_L3_WRITE]:!0,[_.TIER_B_C_PREPUSH]:!0};var S=".docuvia",Z="logs",$="init.log",ee="clean.log",te="status.log",oe="sync.log",re="analyze.log",ne="review.log",se="impact.log",ie="query.log",ae="export-topology.log",ce="snapshot.log",le="hydrate.log",pe="sync-knowledge.log",h="node_modules",ge="local.db",de="init.lock",ue="tierC.lock",me="sync-state.json",Ee="hooks-config.json",_e="pending-l3-decisions.json";var A="utf8";var fe="sha256";var i={TYPESCRIPT:"typescript",JAVASCRIPT:"javascript",PYTHON:"python",RUST:"rust",GO:"go",JAVA:"java",C:"c",CPP:"cpp",RUBY:"ruby",PHP:"php",CSHARP:"csharp"};var Te=".claude/hooks",ye=".cursor/hooks",Le="docuvia-hook.js",Re="docuvia-hook.cjs";var m=class{listeners=new Set;debug(e,o){this.emit(a.DEBUG,e,o)}info(e,o){this.emit(a.INFO,e,o)}warn(e,o){this.emit(a.WARN,e,o)}error(e,o){this.emit(a.ERROR,e,o)}onLog(e){return this.listeners.add(e),()=>this.listeners.delete(e)}emit(e,o,r){let s=r?{level:e,message:o,context:r}:{level:e,message:o};for(let l of this.listeners)l(s)}};function Ie(){return new m}var C=class{constructor(e){this.logger=e}logger;handleMessage(e){return R(e)?(this.logger[e.level](e.message,e.context),!0):!1}};var g={GIT_COMMAND_FAILED:"GIT_COMMAND_FAILED",GIT_NETWORK_TIMEOUT:"GIT_NETWORK_TIMEOUT",GIT_NOT_A_REPOSITORY:"GIT_NOT_A_REPOSITORY",GIT_BRANCH_CREATE_FAILED:"GIT_BRANCH_CREATE_FAILED",GIT_HOOK_INSTALL_FAILED:"GIT_HOOK_INSTALL_FAILED",GIT_FAST_IMPORT_FAILED:"GIT_FAST_IMPORT_FAILED",DB_OPEN_FAILED:"DB_OPEN_FAILED",DB_NOT_FOUND:"DB_NOT_FOUND",DB_MIGRATION_FAILED:"DB_MIGRATION_FAILED",DB_QUERY_FAILED:"DB_QUERY_FAILED",DB_LOCKED:"DB_LOCKED",AST_WORKER_CRASHED:"AST_WORKER_CRASHED",AST_PARSE_FAILED:"AST_PARSE_FAILED",FS_READ_FAILED:"FS_READ_FAILED",FS_PATH_TRAVERSAL:"FS_PATH_TRAVERSAL",FACTORY_TOKEN_NOT_REGISTERED:"FACTORY_TOKEN_NOT_REGISTERED",FACTORY_LOCKED:"FACTORY_LOCKED",MEMORY_SCOPE_NOT_FOUND:"MEMORY_SCOPE_NOT_FOUND",SYNC_FETCH_FAILED:"SYNC_FETCH_FAILED",SYNC_PUSH_FAILED:"SYNC_PUSH_FAILED",LLM_NOT_INITIALIZED:"LLM_NOT_INITIALIZED",LLM_CHAT_COMPLETION_FAILED:"LLM_CHAT_COMPLETION_FAILED",LLM_HTTP_FAILED:"LLM_HTTP_FAILED",LLM_RATE_LIMITED:"LLM_RATE_LIMITED",LLM_AUTH_FAILED:"LLM_AUTH_FAILED",LLM_STREAM_FAILED:"LLM_STREAM_FAILED",LLM_INVALID_RESPONSE:"LLM_INVALID_RESPONSE",INIT_WORKFLOW_FAILED:"INIT_WORKFLOW_FAILED",CLEAN_WORKFLOW_FAILED:"CLEAN_WORKFLOW_FAILED",UNINSTALL_WORKFLOW_FAILED:"UNINSTALL_WORKFLOW_FAILED",INVALID_INPUT:"INVALID_INPUT"};var Se="DocuviaError",c=class t extends Error{code;cause;constructor(e,o,r){super(o),this.name=Se,this.code=e,this.cause=r}static wrap(e,o,r){if(r instanceof t)return r;let s=r instanceof Error?r.message:String(r);return new t(e,`${o}: ${s}`,r)}};var he={WORKSPACE_ROOT:"workspaceRoot",API_URL:"apiUrl",PROJECT_ID:"projectId",COMMIT_SHA:"commitSha",TARGET_PATH:"targetPath",LLM_BASE_URL:"llmBaseUrl",LLM_MODEL:"llmModel",BASE_REF:"baseRef",TARGET:"target",ESCALATE_TO_LSP:"escalateToLsp",TIER_B_FULL_RESYNC:"tierBFullResync",LIMIT:"limit",COLLAPSE:"collapse",KEEP_DB:"keepDb",LSP_BINARY_OVERRIDE:"lspBinaryOverride",LSP_ARGS_OVERRIDE:"lspArgsOverride",LSP_TIMEOUT_MS:"lspTimeoutMs",LSP_MAX_PROCESSES:"lspMaxProcesses",TIER_B_COMMIT_CAP:"tierBCommitCap",TIER_C_DAILY_CALL_CAP:"tierCDailyCallCap",TIER_C_DAILY_TOKEN_CAP:"tierCDailyTokenCap",TIER_C_WALL_CLOCK_MS:"tierCWallClockMs",TIER_C_ITEM_CAP:"tierCItemCap",TIER_C_LOAD_THRESHOLD:"tierCLoadThreshold",GIT_NETWORK_TIMEOUT_MS:"gitNetworkTimeoutMs",FORCE:"force",TIER_C_DRAIN_ALL:"tierCDrainAll",AGENT_AUTHORED_DECISIONS:"agentAuthoredDecisions",HOOK_NAME:"hookName",HOOK_ENABLED:"hookEnabled",FLUSH_STAGED_L3:"flushStagedL3"},Ae={SCOPE_NOT_FOUND:(t,e)=>`Cannot set "${t}": memory scope "${e}" was never created`},f=class{scopes=new Map;createScope(e){this.scopes.has(e)||this.scopes.set(e,new Map)}set(e,o,r){let s=this.scopes.get(e);if(!s)throw new c(g.MEMORY_SCOPE_NOT_FOUND,Ae.SCOPE_NOT_FOUND(o,e));s.set(o,r)}get(e,o){return this.scopes.get(e)?.get(o)}deleteScope(e){this.scopes.delete(e)}hasScope(e){return this.scopes.has(e)}},Ce=new f;var b={REGISTER_LOCKED:t=>`Cannot register "${t}": factory is locked (test isolation)`,PROVIDER_NOT_REGISTERED:t=>`No provider registered for "${t}" \u2014 the implementation library that owns it was never imported for its registration side effect`},T=class{providers=new Map;locked=!1;register(e,o){if(this.locked)throw new c(g.FACTORY_LOCKED,b.REGISTER_LOCKED(String(e.description)));this.providers.set(e,o)}resolve(e,o){let r=this.providers.get(e);if(!r)throw new c(g.FACTORY_TOKEN_NOT_REGISTERED,b.PROVIDER_NOT_REGISTERED(String(e.description)));return r(this,o)}has(e){return this.providers.has(e)}lock(){this.locked=!0}unlock(){this.locked=!1}reset(){this.providers.clear(),this.locked=!1}},M=new T;function n(t){return Symbol(t)}var Ne={GitProvider:n("IGitProvider"),LineBlameProvider:n("ILineBlameProvider"),KnowledgeGitService:n("IKnowledgeGitService"),FileDiscovery:n("IFileDiscovery"),ConfigScanner:n("IConfigScanner"),VcsScanner:n("IVcsScanner"),AstProcessor:n("IAstProcessor"),GraphPersister:n("IGraphPersister"),TempFileManager:n("TempFileManager"),GraphStoreOpener:n("GraphStoreOpener"),RemoteSyncClient:n("RemoteSyncClient"),LlmClient:n("LlmClient"),QueryService:n("IQueryService"),TierBCoverageHintProvider:n("ITierBCoverageHintProvider"),ImpactService:n("IImpactService"),ChangeDetectionService:n("IChangeDetectionService"),TopologyBuilder:n("ITopologyBuilder"),SnapshotRenderer:n("ISnapshotRenderer"),HydrationService:n("IHydrationService"),DiagnosticRunnerDb:n("DiagnosticRunnerDb"),DiagnosticRunnerGit:n("DiagnosticRunnerGit"),SemanticDiffAnalyzer:n("ISemanticDiffAnalyzer"),EdgeResolutionProviders:n("EdgeResolutionProviders")};var Oe={ADDED:"added",MODIFIED:"modified",DELETED:"deleted",RENAMED:"renamed"};var Pe={LSP:"lsp",LLM_INFERRED:"llm-inferred"},ve={TYPESCRIPT:"typescript",PYTHON:"python",GO:"go",RUST:"rust",JAVA:"java",CPP:"cpp",CSHARP:"csharp",PHP:"php",RUBY:"ruby"};var xe={NO_REMOTE:"no-remote",UP_TO_DATE:"up-to-date",FAST_FORWARDED_LOCAL:"fast-forwarded-local",PUSHED_LOCAL:"pushed-local",MERGED:"merged"};var De={MODULE:"module",PACKAGE:"package",PCD:"pcd"},be={CONTAINS:"contains",CALLS:"calls",IMPLEMENTS:"implements",EXTENDS:"extends",IMPORTS:"imports",DEPENDS_ON:"depends_on",DECISION:"decision"};var Me={PENDING:"pending",ACTIVE:"active",DRAFT:"draft",GARBAGE:"garbage"},ke={ANALYZE:"analyze",AGENT_AUTHORED:"agent-authored"};var Fe={CREATE_L3:"CREATE_L3"};var we={SYSTEM:"system",USER:"user",ASSISTANT:"assistant",TOOL:"tool"};var Ge={LOW:"LOW",MEDIUM:"MEDIUM",HIGH:"HIGH",CRITICAL:"CRITICAL",UNKNOWN:"UNKNOWN"},He={EXACT:"exact",LOWER_BOUND:"lower-bound"},Be={LSP_FALLBACK:"lsp-fallback"};var Ke={L2:"l2",L3:"l3"};var Ue={FILE:"file",SYMBOL:"symbol",DECISION:"decision"},je={AUTO:"auto",FILE:"file",SYMBOL:"symbol"},Ye={L1_TAG:"l1_tag",DIRECTORY:"directory"};var Ve={TYPESCRIPT:"typescript",REACT:"react",EXPRESS:"express",VUE:"vue"},We={UNKNOWN:"unknown",JAVASCRIPT:"javascript",GENERIC:"generic",RUST:"rust",PYTHON:"python",GO:"go"},Xe="general",Qe={FRONTEND:"frontend",BACKEND:"backend",NEXTJS:"nextjs",SSR:"ssr",DRIZZLE:"drizzle",DATABASE:"database",TAILWINDCSS:"tailwindcss",CSS:"css",JEST:"jest",TESTING:"testing",VITEST:"vitest",POSTGRES:"postgres",MONOREPO:"monorepo",TOKIO:"tokio",ASYNC:"async",ACTIX:"actix",SERDE:"serde",TAURI:"tauri",DESKTOP:"desktop",DJANGO:"django",FASTAPI:"fastapi",PANDAS:"pandas",DATA:"data",GIN:"gin",STRICT_TS:"strict-ts",VITE:"vite",BUILD_TOOL:"build-tool"};var k="origin",N={KNOWLEDGE_ROOT:"docuvia-knowledge",KNOWLEDGE_LOG_SCAN_LIMIT:5e3,KNOWLEDGE_DIR_NAME:"knowledge",GRAPH_DIR_NAME:"graph",L3_DIR_NAME:"_l3",NODES_JSONL_NAME:"nodes.jsonl",EDGES_JSONL_NAME:"edges.jsonl",SOURCE_COMMIT_TRAILER_KEY:"Docuvia-Source",POST_COMMIT_HOOK_NAME:"post-commit",POST_COMMIT_HOOK_MARKER:"docuvia analyze",POST_COMMIT_FLUSH_L3_MARKER:"docuvia analyze --flush-staged-l3",POST_COMMIT_NOHUP_MARKER:"nohup npx --no-install docuvia analyze",DOCUVIA_HOOK_HEADER_COMMENT:"# Docuvia Knowledge Graph Evolver Hook",POST_COMMIT_HOOK_CONTENT:`#!/bin/bash
3
3
  # Docuvia Knowledge Graph Evolver Hook
4
4
  # Non-intrusively extracts AST deltas in the background
5
5
  if command -v npx > /dev/null 2>&1; then
@@ -35,7 +35,19 @@ if command -v npx &> /dev/null; then
35
35
  # Fire and forget (do not block commit)
36
36
  npx --no-install docuvia snapshot > /dev/null 2>&1 &
37
37
  fi
38
- `,LOCAL_REMOTE_URL_SCHEME:"file://",DEFAULT_REMOTE_NAME:k,REMOTE_REF_PREFIX:"refs/remotes/",HEAD_REF:"HEAD",DEFAULT_LOCAL_PROJECT_ID:1,META_KEY_KNOWLEDGE_TIP_SHA:"hydratedKnowledgeSha",META_KEY_LAST_INGESTED_SOURCE_SHA:"lastIngestedSourceSha",META_KEY_NODE_KEY_FORMAT_VERSION:"nodeKeyFormatVersion",META_KEY_TIER_B_QUEUE:"tierBQueue",EMPTY_KNOWLEDGE_TEMP_DIR_PREFIX:"docuvia-empty-knowledge-",META_KEY_LAST_TIER_B_BATCH_SHA:"lastTierBBatchSha",META_KEY_TIER_B_BATCH_PENDING:"tierBBatchPending",META_KEY_KNOWLEDGE_PACK_PENDING:"knowledgePackPending",META_KEY_TIER_B_CHANGED_BYTES:"tierBChangedBytes",DEFAULT_TIER_B_COMMIT_CAP_BYTES:512e3,DEFAULT_TIER_B_COVERAGE_FAIL_THRESHOLD:.5,DEFAULT_L2_SEMANTIC_COVERAGE_FAIL_THRESHOLD:.1,DEFAULT_STAGED_L3_STRANDED_AFTER_MS:864e5,META_KEY_TIER_B_ZERO_PROGRESS_BATCHES:"tierBZeroProgressBatches",DEFAULT_TIER_B_ZERO_PROGRESS_MAX_BATCHES:3,DEFAULT_POST_COMMIT_INGESTION_GRACE_MS:6e5,META_KEY_CALL_RESOLUTION_STATS:"callResolutionStats",DEFAULT_CALL_RESOLUTION_NOTE_THRESHOLD:.5,DEFAULT_CALL_RESOLUTION_MIN_SAMPLE:5,DEFAULT_CANARY_SAMPLE_SIZE:20,PRE_PUSH_HOOK_NAME:"pre-push",PRE_PUSH_HOOK_MARKER:"docuvia analyze --escalate-to-lsp",PRE_PUSH_SYNC_KNOWLEDGE_MARKER:"docuvia sync-knowledge",PRE_PUSH_ENV_GATE_MARKER:"--fallback-ast",PRE_PUSH_HOOKS_CHECK_MARKER:"docuvia hooks check",PRE_PUSH_HOOK_CONTENT:`#!/bin/bash
38
+ `,LOCAL_REMOTE_URL_SCHEME:"file://",DEFAULT_REMOTE_NAME:k,REMOTE_REF_PREFIX:"refs/remotes/",HEAD_REF:"HEAD",DEFAULT_LOCAL_PROJECT_ID:1,META_KEY_KNOWLEDGE_TIP_SHA:"hydratedKnowledgeSha",META_KEY_LAST_INGESTED_SOURCE_SHA:"lastIngestedSourceSha",META_KEY_NODE_KEY_FORMAT_VERSION:"nodeKeyFormatVersion",META_KEY_TIER_B_QUEUE:"tierBQueue",EMPTY_KNOWLEDGE_TEMP_DIR_PREFIX:"docuvia-empty-knowledge-",META_KEY_LAST_TIER_B_BATCH_SHA:"lastTierBBatchSha",META_KEY_TIER_B_BATCH_PENDING:"tierBBatchPending",META_KEY_KNOWLEDGE_PACK_PENDING:"knowledgePackPending",META_KEY_TIER_B_CHANGED_BYTES:"tierBChangedBytes",DEFAULT_TIER_B_COMMIT_CAP_BYTES:512e3,DEFAULT_TIER_B_COVERAGE_FAIL_THRESHOLD:.5,DEFAULT_L2_SEMANTIC_COVERAGE_FAIL_THRESHOLD:.1,DEFAULT_STAGED_L3_STRANDED_AFTER_MS:864e5,META_KEY_TIER_B_ZERO_PROGRESS_BATCHES:"tierBZeroProgressBatches",DEFAULT_TIER_B_ZERO_PROGRESS_MAX_BATCHES:3,DEFAULT_POST_COMMIT_INGESTION_GRACE_MS:6e5,META_KEY_CALL_RESOLUTION_STATS:"callResolutionStats",DEFAULT_CALL_RESOLUTION_NOTE_THRESHOLD:.5,DEFAULT_CALL_RESOLUTION_MIN_SAMPLE:5,DEFAULT_CANARY_SAMPLE_SIZE:20,PRE_PUSH_HOOK_NAME:"pre-push",PRE_PUSH_HOOK_MARKER:"docuvia analyze --escalate-to-lsp",PRE_PUSH_SYNC_KNOWLEDGE_MARKER:"docuvia sync-knowledge",PRE_PUSH_ENV_GATE_MARKER:"--fallback-ast",PRE_PUSH_HOOKS_CHECK_MARKER:"docuvia hooks check",PRE_PUSH_FAILURE_HINT_MARKER:"tier-b/sync failed",PRE_PUSH_HOOK_CONTENT:`#!/bin/bash
39
+ # Docuvia Tier B Batch Hook (LSP escalation + snapshot + knowledge sync)
40
+ # Runs synchronously (generous timeout) so pushed code carries corrected knowledge -- see
41
+ # docs/gitbook/analysis/phase1-decision-integration.md \xA78h and
42
+ # docs/gitbook/analysis/phase2-sync-knowledge-scheduling.md.
43
+ if command -v npx > /dev/null 2>&1; then
44
+ npx --no-install docuvia hooks check tier-b-c-prepush && { npx --no-install docuvia analyze --escalate-to-lsp --fallback-ast && npx --no-install docuvia snapshot && npx --no-install docuvia sync-knowledge || echo "docuvia: tier-b/sync failed for this push -- run 'docuvia doctor' for details"; }
45
+ fi
46
+ # Never blocks the push on a Tier B/sync-knowledge failure -- PLAT-007's reliability
47
+ # requirement (failures surface as a one-line push-time hint plus JSONL logs / doctor,
48
+ # never as a blocked push).
49
+ exit 0
50
+ `,HOOKS_CHECK_PRE_PUSH_HOOK_CONTENT:`#!/bin/bash
39
51
  # Docuvia Tier B Batch Hook (LSP escalation + snapshot + knowledge sync)
40
52
  # Runs synchronously (generous timeout) so pushed code carries corrected knowledge -- see
41
53
  # docs/gitbook/analysis/phase1-decision-integration.md \xA78h and
@@ -82,6 +94,6 @@ fi
82
94
  # Never blocks the push on a Tier B failure -- PLAT-007's reliability requirement (failures
83
95
  # only ever surface via JSONL logs / doctor, never to the pushing developer).
84
96
  exit 0
85
- `,META_KEY_TIER_C_QUEUE:"tierCQueue",META_KEY_TIER_C_BUDGET:"tierCBudget",DEFAULT_TIER_C_DAILY_CALL_CAP:50,DEFAULT_TIER_C_DAILY_TOKEN_CAP:1e5,DEFAULT_TIER_C_WALL_CLOCK_MS:12e3,DEFAULT_TIER_C_ITEM_CAP:20,DEFAULT_TIER_C_LOAD_THRESHOLD:.8,DEFAULT_TIER_C_MAX_ITEM_FAILURES:3};import y from"path";var F=[".ts",".tsx",".mts",".cts"],w=[".js",".jsx",".mjs",".cjs"],G=[".py"],H=[".rs"],B=[".go"],K=[".java"],U=[".c",".h"],j=[".cpp",".cxx",".cc",".hpp",".hxx",".hh",".cu",".cuh"],Y=[".rb",".rake",".gemspec"],V=[".php",".phtml",".php3",".php4",".php5",".phps"],W=[".cs"],O=new Set(["Rakefile","Gemfile","Guardfile","Vagrantfile","Brewfile"]),P=(()=>{let t=new Map,e=[[i.TYPESCRIPT,F],[i.JAVASCRIPT,w],[i.PYTHON,G],[i.RUST,H],[i.GO,B],[i.JAVA,K],[i.C,U],[i.CPP,j],[i.RUBY,Y],[i.PHP,V],[i.CSHARP,W]];for(let[o,r]of e)for(let s of r)t.set(s,o);return t})();function Je(t){let e=P.get(y.extname(t).toLowerCase());return e||(O.has(y.basename(t))?i.RUBY:void 0)}function X(t){return P.has(y.extname(t).toLowerCase())?!0:O.has(y.basename(t))}function qe(){return Array.from(P.keys()).map(t=>t.replace(/^\./,""))}function ze(t){return X(t)&&!t.includes(`${A}/`)&&!t.includes(`${I}/`)}var v="EEXIST",L="EPERM",x="EACCES",D="EBUSY";import d from"fs/promises";var Ze={TIMED_OUT_WAITING:t=>`Timed out waiting for the lock at ${t} \u2014 another process may be stuck`},$e={maxWaitMs:1e4,retryIntervalMs:100,heartbeatIntervalMs:1e4,staleAfterMs:3e4};function et(t){return new Promise(e=>setTimeout(e,t))}function tt(t){try{return process.kill(t,0),!0}catch(e){return e.code===L}}async function ot(t){try{let e=Number.parseInt(await d.readFile(t,h),10);return Number.isFinite(e)?e:void 0}catch{return}}async function rt(t,e){let o=await d.stat(t).catch(()=>{});if(!o||Date.now()-o.mtimeMs<=e)return!1;let r=await ot(t);return r!==void 0&&tt(r)?!1:(await d.rm(t,{force:!0}).catch(()=>{}),!0)}function nt(t){let e=t.code;return e===v||e===L||e===x||e===D}async function st(t){try{let e=await d.open(t,"wx");return await e.writeFile(String(process.pid)),await e.close(),!0}catch(e){if(!nt(e))throw e;return!1}}async function it(t,e={}){let o={...$e,...e},r=Date.now()+o.maxWaitMs,s=!1;for(;!await st(t);)if(s||(s=!0,e.onWaiting?.()),!await rt(t,o.staleAfterMs)){if(Date.now()>r)throw new Error(Ze.TIMED_OUT_WAITING(t));await et(o.retryIntervalMs)}let l=setInterval(()=>{let p=new Date;d.utimes(t,p,p).catch(()=>{})},o.heartbeatIntervalMs);l.unref?.();let E=!1;return{async release(){E||(E=!0,clearInterval(l),await d.rm(t,{force:!0}).catch(()=>{}))}}}var J=`${N.SOURCE_COMMIT_TRAILER_KEY}: `;function at(t){for(let e of t.split(`
86
- `)){let o=e.trim();if(o.startsWith(J))return o.slice(J.length).trim()}}function ct(t,e,o,r){if(!o&&!r)return;let l=(e?t.files.getTierBFileStatus(e):void 0)?.lastProcessedAt??null,E=r&&l===null,p=t.files.getTierBCoverage(),q=o&&p.processedFiles<p.totalFiles;if(!(!E&&!q))return{ownFileLastProcessedAt:l,workspaceFilesProcessed:p.processedFiles,workspaceFilesTotal:p.totalFiles}}function lt(t){let e={total:0,resolved:0,selfDiscarded:0,unresolved:0,unresolvable:0,external:0,unknownReceiver:0};for(let o of Object.values(t))e.total+=o.total,e.resolved+=o.resolved,e.selfDiscarded+=o.selfDiscarded,e.unresolvable=(e.unresolvable??0)+(o.unresolvable??0),e.external=(e.external??0)+(o.external??0),e.unknownReceiver=(e.unknownReceiver??0)+(o.unknownReceiver??0),e.unresolved+=o.unresolved;return e}function pt(t){return t.total-t.selfDiscarded-(t.unresolvable??0)-(t.external??0)-(t.unknownReceiver??0)}var gt={PASS:"pass",FAIL:"fail"};export{a,m as b,Se as c,S as d,C as e,g as f,c as g,Ae as h,Ce as i,M as j,Ne as k,Oe as l,Pe as m,ve as n,xe as o,De as p,be as q,Me as r,ke as s,Fe as t,we as u,Ge as v,He as w,Be as x,Ke as y,Ue as z,je as A,Ye as B,_ as C,z as D,I as E,Z as F,$ as G,ee as H,te as I,oe as J,re as K,ne as L,se as M,ie as N,ae as O,ce as P,le as Q,pe as R,A as S,ge as T,de as U,ue as V,me as W,Ee as X,_e as Y,Ve as Z,We as _,Xe as $,Qe as aa,h as ba,fe as ca,k as da,N as ea,i as fa,F as ga,w as ha,G as ia,H as ja,B as ka,K as la,U as ma,j as na,Y as oa,V as pa,W as qa,O as ra,Je as sa,X as ta,qe as ua,ze as va,v as wa,L as xa,x as ya,D as za,it as Aa,at as Ba,ct as Ca,lt as Da,pt as Ea,gt as Fa,Te as Ga,ye as Ha,Le as Ia,Re as Ja};
87
- //# sourceMappingURL=chunk-MFE4UY5Z.js.map
97
+ `,META_KEY_TIER_C_QUEUE:"tierCQueue",META_KEY_TIER_C_BUDGET:"tierCBudget",DEFAULT_TIER_C_DAILY_CALL_CAP:50,DEFAULT_TIER_C_DAILY_TOKEN_CAP:1e5,DEFAULT_TIER_C_WALL_CLOCK_MS:12e3,DEFAULT_TIER_C_ITEM_CAP:20,DEFAULT_TIER_C_LOAD_THRESHOLD:.8,DEFAULT_TIER_C_MAX_ITEM_FAILURES:3};import y from"path";var F=[".ts",".tsx",".mts",".cts"],w=[".js",".jsx",".mjs",".cjs"],G=[".py"],H=[".rs"],B=[".go"],K=[".java"],U=[".c",".h"],j=[".cpp",".cxx",".cc",".hpp",".hxx",".hh",".cu",".cuh"],Y=[".rb",".rake",".gemspec"],V=[".php",".phtml",".php3",".php4",".php5",".phps"],W=[".cs"],O=new Set(["Rakefile","Gemfile","Guardfile","Vagrantfile","Brewfile"]),P=(()=>{let t=new Map,e=[[i.TYPESCRIPT,F],[i.JAVASCRIPT,w],[i.PYTHON,G],[i.RUST,H],[i.GO,B],[i.JAVA,K],[i.C,U],[i.CPP,j],[i.RUBY,Y],[i.PHP,V],[i.CSHARP,W]];for(let[o,r]of e)for(let s of r)t.set(s,o);return t})();function Je(t){let e=P.get(y.extname(t).toLowerCase());return e||(O.has(y.basename(t))?i.RUBY:void 0)}function X(t){return P.has(y.extname(t).toLowerCase())?!0:O.has(y.basename(t))}function qe(){return Array.from(P.keys()).map(t=>t.replace(/^\./,""))}function ze(t){return X(t)&&!t.includes(`${h}/`)&&!t.includes(`${S}/`)}var v="EEXIST",L="EPERM",x="EACCES",D="EBUSY";import d from"fs/promises";var Ze={TIMED_OUT_WAITING:t=>`Timed out waiting for the lock at ${t} \u2014 another process may be stuck`},$e={maxWaitMs:1e4,retryIntervalMs:100,heartbeatIntervalMs:1e4,staleAfterMs:3e4};function et(t){return new Promise(e=>setTimeout(e,t))}function tt(t){try{return process.kill(t,0),!0}catch(e){return e.code===L}}async function ot(t){try{let e=Number.parseInt(await d.readFile(t,A),10);return Number.isFinite(e)?e:void 0}catch{return}}async function rt(t,e){let o=await d.stat(t).catch(()=>{});if(!o||Date.now()-o.mtimeMs<=e)return!1;let r=await ot(t);return r!==void 0&&tt(r)?!1:(await d.rm(t,{force:!0}).catch(()=>{}),!0)}function nt(t){let e=t.code;return e===v||e===L||e===x||e===D}async function st(t){try{let e=await d.open(t,"wx");return await e.writeFile(String(process.pid)),await e.close(),!0}catch(e){if(!nt(e))throw e;return!1}}async function it(t,e={}){let o={...$e,...e},r=Date.now()+o.maxWaitMs,s=!1;for(;!await st(t);)if(s||(s=!0,e.onWaiting?.()),!await rt(t,o.staleAfterMs)){if(Date.now()>r)throw new Error(Ze.TIMED_OUT_WAITING(t));await et(o.retryIntervalMs)}let l=setInterval(()=>{let p=new Date;d.utimes(t,p,p).catch(()=>{})},o.heartbeatIntervalMs);l.unref?.();let E=!1;return{async release(){E||(E=!0,clearInterval(l),await d.rm(t,{force:!0}).catch(()=>{}))}}}var J=`${N.SOURCE_COMMIT_TRAILER_KEY}: `;function at(t){for(let e of t.split(`
98
+ `)){let o=e.trim();if(o.startsWith(J))return o.slice(J.length).trim()}}function ct(t,e,o,r){if(!o&&!r)return;let l=(e?t.files.getTierBFileStatus(e):void 0)?.lastProcessedAt??null,E=r&&l===null,p=t.files.getTierBCoverage(),q=o&&p.processedFiles<p.totalFiles;if(!(!E&&!q))return{ownFileLastProcessedAt:l,workspaceFilesProcessed:p.processedFiles,workspaceFilesTotal:p.totalFiles}}function lt(t){let e={total:0,resolved:0,selfDiscarded:0,unresolved:0,unresolvable:0,external:0,unknownReceiver:0};for(let o of Object.values(t))e.total+=o.total,e.resolved+=o.resolved,e.selfDiscarded+=o.selfDiscarded,e.unresolvable=(e.unresolvable??0)+(o.unresolvable??0),e.external=(e.external??0)+(o.external??0),e.unknownReceiver=(e.unknownReceiver??0)+(o.unknownReceiver??0),e.unresolved+=o.unresolved;return e}function pt(t){return t.total-t.selfDiscarded-(t.unresolvable??0)-(t.external??0)-(t.unknownReceiver??0)}var gt={PASS:"pass",FAIL:"fail"};export{a,m as b,Ie as c,I as d,C as e,g as f,c as g,he as h,Ce as i,M as j,Ne as k,Oe as l,Pe as m,ve as n,xe as o,De as p,be as q,Me as r,ke as s,Fe as t,we as u,Ge as v,He as w,Be as x,Ke as y,Ue as z,je as A,Ye as B,_ as C,z as D,S as E,Z as F,$ as G,ee as H,te as I,oe as J,re as K,ne as L,se as M,ie as N,ae as O,ce as P,le as Q,pe as R,h as S,ge as T,de as U,ue as V,me as W,Ee as X,_e as Y,Ve as Z,We as _,Xe as $,Qe as aa,A as ba,fe as ca,k as da,N as ea,i as fa,F as ga,w as ha,G as ia,H as ja,B as ka,K as la,U as ma,j as na,Y as oa,V as pa,W as qa,O as ra,Je as sa,X as ta,qe as ua,ze as va,v as wa,L as xa,x as ya,D as za,it as Aa,at as Ba,ct as Ca,lt as Da,pt as Ea,gt as Fa,Te as Ga,ye as Ha,Le as Ia,Re as Ja};
99
+ //# sourceMappingURL=chunk-RYKA3JKY.js.map