@glyphier/cli 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -14,7 +14,7 @@ entry after activation.
14
14
  It should pipe the short-lived installation grant directly to the CLI:
15
15
 
16
16
  ```sh
17
- npx -y @glyphier/cli@0.1.0 install --agent codex --onboarding-token-stdin
17
+ npx -y @glyphier/cli@0.1.1 install --agent codex --onboarding-token-stdin
18
18
  glyphier doctor --agent codex
19
19
  ```
20
20
 
@@ -26,7 +26,7 @@ Verified automatic adapters: Codex, Claude Code, Cursor, Gemini CLI, and
26
26
  Windsurf. Any MCP-compatible host can use a standards-compliant template:
27
27
 
28
28
  ```sh
29
- npx -y @glyphier/cli@0.1.0 config --universal
29
+ npx -y @glyphier/cli@0.1.1 config --universal
30
30
  ```
31
31
 
32
32
  Use `glyphier install --agent <host> --dry-run` before changing an existing
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{a as ke}from"../chunk-I6N5RRFT.js";import{a as Ee}from"../chunk-ZOFLEGRO.js";import{a as $e}from"../chunk-B6KCBY3J.js";import{a as Ae,c as Ie,j as De,k as Ne}from"../chunk-Z4N35S7K.js";import{d as Te}from"../chunk-WJT5SDKF.js";import{a as L,b as Ve,c as Je}from"../chunk-NZULHZGK.js";import{a as y,n as Ce}from"../chunk-MCPBJALB.js";import{a as Re,b as _e,c as Fe}from"../chunk-BJ2IE33Q.js";import{A as fe,B as ge,C as ue,D as he,F as ye,G as Se,H as ve,L as be,R as we,V as Pe,j as Q,k as ee,l as oe,m as te,n as _,o as re,p as ne,q as ie,r as G,s as V,t as se,u as ae,v as ce,w as le,x as pe,y as de,z as me}from"../chunk-VOGFZYFC.js";import{a as J,b as xe}from"../chunk-QYSMWA6Y.js";import{a as je,d as $}from"../chunk-PCRAPKFZ.js";import{e as F}from"../chunk-JJMQEAIJ.js";import{a as I}from"../chunk-H6T36TY5.js";import{c as Oe}from"../chunk-FOZKI4M3.js";import{b as h,g as Z,h as A}from"../chunk-NIXOREHQ.js";import{Command as lt}from"commander";import Ge from"path";async function Le(t,o={}){let e=Ge.resolve(o.root||t||process.cwd()),r=Ge.resolve(t||o.root||process.cwd()),n=o.depth?parseInt(o.depth,10):void 0,i=o.level?parseInt(o.level,10):0,a=o.ignore?[o.ignore]:void 0;if(o.budget){let c=parseInt(o.budget,10),s=await de({budget:c,rootPath:r});o.json?console.log(y(s.plan)):console.log(s.formattedOutput);return}if(i===0){let c=await Q(r,{depth:n,rootPath:e,ignore:a});o.json?console.log(y(c)):console.log(G(c))}else{let c=await _(r,{level:1,rootPath:e,depth:n,ignore:a,noCache:o.noCache});if(o.json)console.log(y({tree:c.tree,files:Object.fromEntries(c.files)}));else{console.log(G(c.tree)),console.log();let s=Array.from(c.files.entries()),p=15,m=s.slice(0,p);for(let[l,u]of m)console.log(`--- ${l} ---`),console.log(V(u,{level:1})),console.log();s.length>p&&console.log(`... (${s.length-p} more files omitted; use 'glyphier view <file>' or specify a subdirectory)`)}}}import H from"path";async function He(t,o={}){let e=o.root?H.resolve(o.root):process.cwd(),r=H.isAbsolute(t)?t:H.resolve(e,t),n=o.level?parseInt(o.level,10):2,i=await te(r,{level:n,rootPath:e,noCache:o.noCache});if(i||(console.error(`[glyphier] Error: could not parse file ${t}`),process.exit(1)),o.session){let a=he(o.session,r,i);if(a.status==="unchanged"){console.log(pe(a));return}}o.json?console.log(y(i)):console.log(V(i,{level:n}))}import M from"path";async function Me(t,o,e){let r=typeof o=="string"?o:void 0,n=(typeof o=="object"?o:e)||{},i=r?M.resolve(r):M.resolve(n.root||process.cwd()),a=n.root?M.resolve(n.root):i,c=n.ignore?[n.ignore]:void 0,s=await _(i,{level:2,rootPath:a,ignore:c,noCache:n.noCache}),p=Array.from(s.files.values()),m=ee(p,t,{kind:n.kind});n.json?console.log(y(m)):console.log(oe(t,m))}import Io from"path";function ze(t,o={}){let e=Io.resolve(t),r,n;if(o.lines){let a=o.lines.split("-").map(c=>parseInt(c.trim(),10));a.length===2&&!isNaN(a[0])&&!isNaN(a[1])?(r=a[0],n=a[1]):a.length===1&&!isNaN(a[0])&&(r=a[0])}let i=re(e,{startLine:r,endLine:n});i===null&&(console.error(`[glyphier] Error: file not found: ${t}`),process.exit(1)),console.log(i)}import Do from"path";async function Ue(t,o={}){let e=Do.resolve(o.root||process.cwd()),r=o.depth?parseInt(o.depth,10):2;try{let n=await ne(t,{rootPath:e,depth:r});o.json?console.log(y(n)):console.log(se(n))}catch(n){console.error(`Error analyzing impact: ${String(n)}`),process.exit(1)}}import No from"path";async function qe(t,o={}){let e=No.resolve(o.root||process.cwd()),r=o.since||"HEAD";try{let n=await ie(t,{since:r,rootPath:e});o.json?console.log(y(n)):console.log(ae(n))}catch(n){console.error(`Error diffing file: ${String(n)}`),process.exit(1)}}import z from"fs";import To from"path";async function Be(t,o={}){let e=To.resolve(o.root||process.cwd()),r=o.patch||"";!r&&!process.stdin.isTTY?r=z.readFileSync(0,"utf-8"):r&&z.existsSync(r)&&(r=z.readFileSync(r,"utf-8")),r||(console.error("Error: patch or code content is required via --patch <file|string> or stdin."),process.exit(1));try{let n=await me(t,r,{rootPath:e});o.json?console.log(y(n)):console.log(ce(n)),n.valid||process.exit(1)}catch(n){console.error(`Error checking patch: ${String(n)}`),process.exit(1)}}import Ye from"path";async function Ke(t,o={}){let e=Ye.resolve(o.root||process.cwd()),r=Ye.resolve(e,t);try{let n=await fe(r,{rootPath:e});o.json?console.log(y(n)):console.log(ge(n))}catch(n){console.error(`Error analyzing module graph: ${String(n)}`),process.exit(1)}}import _o from"path";async function We(t,o,e={}){let r=e.depth?parseInt(e.depth,10):2,n=_o.resolve(o||process.cwd());try{let i=await ue(n,t,{depth:r,targetSymbol:e.target});e.json?console.log(JSON.stringify(i,null,2)):console.log(le(i))}catch(i){console.error(`Error computing program slice: ${i.message}`),process.exit(1)}}import Vo from"path";async function Xe(t,o,e={}){let r=Vo.resolve(t);try{let n=await ye(r,o,{dryRun:e.dryRun});e.json?console.log(JSON.stringify(n,null,2)):n.success?console.log(`\u2713 Applied ${n.appliedOps} patch operation(s) to ${n.file}`):(console.error(`\u2717 Patch failed: ${n.error}`),process.exit(1))}catch(n){console.error(`Error applying patch: ${n.message}`),process.exit(1)}}function Ze(){console.log("Glyphier v3.0.0 \u2014 The Code Representation Engine for AI Agents"),console.log("https://glyphier.com"),console.log(),console.log("Supported Language Grammars (Tree-sitter WASM):");let t=Z();console.log(` ${t.join(", ")}`),console.log(),console.log("MCP Tools: glyphier_explore, glyphier_view, glyphier_search, glyphier_read_raw ")}import Jo from"path";async function Qe(t,o={}){let e=Jo.resolve(o.root||process.cwd()),r=t||".",n=o.top?parseInt(o.top,10):5;try{let i=await Se(r,{rootPath:e,topN:n});o.json?console.log(JSON.stringify(i,null,2)):console.log(ve(i))}catch(i){console.error(`Error computing stats: ${String(i)}`),process.exit(1)}}import j from"fs";import Fo from"os";import b from"path";var Go=["codex","claude-code","cursor","gemini-cli","windsurf"];function eo(){return process.env.GLYPHIER_CONFIG_HOME||Fo.homedir()}function q(t){let o=eo();return{codex:{host:t,path:b.join(o,".codex","config.toml"),format:"toml"},"claude-code":{host:t,path:b.join(o,".claude.json"),format:"json"},cursor:{host:t,path:b.join(o,".cursor","mcp.json"),format:"json"},"gemini-cli":{host:t,path:b.join(o,".gemini","settings.json"),format:"json"},windsurf:{host:t,path:b.join(o,".codeium","windsurf","mcp_config.json"),format:"json"},universal:{host:t,path:b.join(o,".config","glyphier","mcp.json"),format:"json"}}[t]}function B(t){let e={claude:"claude-code",claude_code:"claude-code",gemini:"gemini-cli",gemini_cli:"gemini-cli"}[t.toLowerCase()]??t.toLowerCase();if(![...Go,"universal"].includes(e))throw new Error(`Unsupported agent host: ${t}`);return e}function oo(t){let o=b.resolve(eo()),e=b.resolve(t),r=b.resolve(process.cwd());if(e!==o&&!e.startsWith(`${o}${b.sep}`))throw new Error("Glyphier configuration must be written in the user-level configuration directory.");if(e===r||e.startsWith(`${r}${b.sep}`))throw new Error("Glyphier refuses to write API credentials into the current repository or workspace.");for(let n=b.dirname(e);n!==b.dirname(n);n=b.dirname(n))if(j.existsSync(b.join(n,".git")))throw new Error("Glyphier refuses to write credentials into a source-controlled directory.")}function Lo(t){return{command:"npx",args:["-y",`@glyphier/cli@${A}`,"mcp"],env:{GLYPHIER_API_KEY:t,GLYPHIER_API_URL:"https://glyphier.com"}}}function Ho(t,o){let e={};if(t.trim())try{e=JSON.parse(t)}catch{throw new Error("Existing host configuration is not valid JSON; Glyphier will not overwrite it.")}let r=e.mcpServers&&typeof e.mcpServers=="object"&&!Array.isArray(e.mcpServers)?e.mcpServers:{};return`${JSON.stringify({...e,mcpServers:{...r,glyphier:Lo(o)}},null,2)}
2
+ import{a as ke}from"../chunk-I6N5RRFT.js";import{a as Ee}from"../chunk-ZOFLEGRO.js";import{a as $e}from"../chunk-B6KCBY3J.js";import{a as Ae,c as Ie,j as De,k as Ne}from"../chunk-Z4N35S7K.js";import{d as Te}from"../chunk-WJT5SDKF.js";import{a as L,b as Ve,c as Je}from"../chunk-NZULHZGK.js";import{a as y,n as Ce}from"../chunk-DSTHXYLQ.js";import{a as Re,b as _e,c as Fe}from"../chunk-4HETYC63.js";import{A as fe,B as ge,C as ue,D as he,F as ye,G as Se,H as ve,L as be,R as we,V as Pe,j as Q,k as ee,l as oe,m as te,n as _,o as re,p as ne,q as ie,r as G,s as V,t as se,u as ae,v as ce,w as le,x as pe,y as de,z as me}from"../chunk-ZOMI4NSK.js";import{a as J,b as xe}from"../chunk-QYSMWA6Y.js";import{a as je,d as $}from"../chunk-PCRAPKFZ.js";import{e as F}from"../chunk-JJMQEAIJ.js";import{a as I}from"../chunk-H6T36TY5.js";import{c as Oe}from"../chunk-Z5QGW2AB.js";import{b as h,g as Z,h as A}from"../chunk-XT5A5MM6.js";import{Command as lt}from"commander";import Ge from"path";async function Le(t,o={}){let e=Ge.resolve(o.root||t||process.cwd()),r=Ge.resolve(t||o.root||process.cwd()),n=o.depth?parseInt(o.depth,10):void 0,i=o.level?parseInt(o.level,10):0,a=o.ignore?[o.ignore]:void 0;if(o.budget){let c=parseInt(o.budget,10),s=await de({budget:c,rootPath:r});o.json?console.log(y(s.plan)):console.log(s.formattedOutput);return}if(i===0){let c=await Q(r,{depth:n,rootPath:e,ignore:a});o.json?console.log(y(c)):console.log(G(c))}else{let c=await _(r,{level:1,rootPath:e,depth:n,ignore:a,noCache:o.noCache});if(o.json)console.log(y({tree:c.tree,files:Object.fromEntries(c.files)}));else{console.log(G(c.tree)),console.log();let s=Array.from(c.files.entries()),p=15,m=s.slice(0,p);for(let[l,u]of m)console.log(`--- ${l} ---`),console.log(V(u,{level:1})),console.log();s.length>p&&console.log(`... (${s.length-p} more files omitted; use 'glyphier view <file>' or specify a subdirectory)`)}}}import H from"path";async function He(t,o={}){let e=o.root?H.resolve(o.root):process.cwd(),r=H.isAbsolute(t)?t:H.resolve(e,t),n=o.level?parseInt(o.level,10):2,i=await te(r,{level:n,rootPath:e,noCache:o.noCache});if(i||(console.error(`[glyphier] Error: could not parse file ${t}`),process.exit(1)),o.session){let a=he(o.session,r,i);if(a.status==="unchanged"){console.log(pe(a));return}}o.json?console.log(y(i)):console.log(V(i,{level:n}))}import M from"path";async function Me(t,o,e){let r=typeof o=="string"?o:void 0,n=(typeof o=="object"?o:e)||{},i=r?M.resolve(r):M.resolve(n.root||process.cwd()),a=n.root?M.resolve(n.root):i,c=n.ignore?[n.ignore]:void 0,s=await _(i,{level:2,rootPath:a,ignore:c,noCache:n.noCache}),p=Array.from(s.files.values()),m=ee(p,t,{kind:n.kind});n.json?console.log(y(m)):console.log(oe(t,m))}import Io from"path";function ze(t,o={}){let e=Io.resolve(t),r,n;if(o.lines){let a=o.lines.split("-").map(c=>parseInt(c.trim(),10));a.length===2&&!isNaN(a[0])&&!isNaN(a[1])?(r=a[0],n=a[1]):a.length===1&&!isNaN(a[0])&&(r=a[0])}let i=re(e,{startLine:r,endLine:n});i===null&&(console.error(`[glyphier] Error: file not found: ${t}`),process.exit(1)),console.log(i)}import Do from"path";async function Ue(t,o={}){let e=Do.resolve(o.root||process.cwd()),r=o.depth?parseInt(o.depth,10):2;try{let n=await ne(t,{rootPath:e,depth:r});o.json?console.log(y(n)):console.log(se(n))}catch(n){console.error(`Error analyzing impact: ${String(n)}`),process.exit(1)}}import No from"path";async function qe(t,o={}){let e=No.resolve(o.root||process.cwd()),r=o.since||"HEAD";try{let n=await ie(t,{since:r,rootPath:e});o.json?console.log(y(n)):console.log(ae(n))}catch(n){console.error(`Error diffing file: ${String(n)}`),process.exit(1)}}import z from"fs";import To from"path";async function Be(t,o={}){let e=To.resolve(o.root||process.cwd()),r=o.patch||"";!r&&!process.stdin.isTTY?r=z.readFileSync(0,"utf-8"):r&&z.existsSync(r)&&(r=z.readFileSync(r,"utf-8")),r||(console.error("Error: patch or code content is required via --patch <file|string> or stdin."),process.exit(1));try{let n=await me(t,r,{rootPath:e});o.json?console.log(y(n)):console.log(ce(n)),n.valid||process.exit(1)}catch(n){console.error(`Error checking patch: ${String(n)}`),process.exit(1)}}import Ye from"path";async function Ke(t,o={}){let e=Ye.resolve(o.root||process.cwd()),r=Ye.resolve(e,t);try{let n=await fe(r,{rootPath:e});o.json?console.log(y(n)):console.log(ge(n))}catch(n){console.error(`Error analyzing module graph: ${String(n)}`),process.exit(1)}}import _o from"path";async function We(t,o,e={}){let r=e.depth?parseInt(e.depth,10):2,n=_o.resolve(o||process.cwd());try{let i=await ue(n,t,{depth:r,targetSymbol:e.target});e.json?console.log(JSON.stringify(i,null,2)):console.log(le(i))}catch(i){console.error(`Error computing program slice: ${i.message}`),process.exit(1)}}import Vo from"path";async function Xe(t,o,e={}){let r=Vo.resolve(t);try{let n=await ye(r,o,{dryRun:e.dryRun});e.json?console.log(JSON.stringify(n,null,2)):n.success?console.log(`\u2713 Applied ${n.appliedOps} patch operation(s) to ${n.file}`):(console.error(`\u2717 Patch failed: ${n.error}`),process.exit(1))}catch(n){console.error(`Error applying patch: ${n.message}`),process.exit(1)}}function Ze(){console.log("Glyphier v3.0.0 \u2014 The Code Representation Engine for AI Agents"),console.log("https://glyphier.com"),console.log(),console.log("Supported Language Grammars (Tree-sitter WASM):");let t=Z();console.log(` ${t.join(", ")}`),console.log(),console.log("MCP Tools: glyphier_explore, glyphier_view, glyphier_search, glyphier_read_raw ")}import Jo from"path";async function Qe(t,o={}){let e=Jo.resolve(o.root||process.cwd()),r=t||".",n=o.top?parseInt(o.top,10):5;try{let i=await Se(r,{rootPath:e,topN:n});o.json?console.log(JSON.stringify(i,null,2)):console.log(ve(i))}catch(i){console.error(`Error computing stats: ${String(i)}`),process.exit(1)}}import j from"fs";import Fo from"os";import b from"path";var Go=["codex","claude-code","cursor","gemini-cli","windsurf"];function eo(){return process.env.GLYPHIER_CONFIG_HOME||Fo.homedir()}function q(t){let o=eo();return{codex:{host:t,path:b.join(o,".codex","config.toml"),format:"toml"},"claude-code":{host:t,path:b.join(o,".claude.json"),format:"json"},cursor:{host:t,path:b.join(o,".cursor","mcp.json"),format:"json"},"gemini-cli":{host:t,path:b.join(o,".gemini","settings.json"),format:"json"},windsurf:{host:t,path:b.join(o,".codeium","windsurf","mcp_config.json"),format:"json"},universal:{host:t,path:b.join(o,".config","glyphier","mcp.json"),format:"json"}}[t]}function B(t){let e={claude:"claude-code",claude_code:"claude-code",gemini:"gemini-cli",gemini_cli:"gemini-cli"}[t.toLowerCase()]??t.toLowerCase();if(![...Go,"universal"].includes(e))throw new Error(`Unsupported agent host: ${t}`);return e}function oo(t){let o=b.resolve(eo()),e=b.resolve(t),r=b.resolve(process.cwd());if(e!==o&&!e.startsWith(`${o}${b.sep}`))throw new Error("Glyphier configuration must be written in the user-level configuration directory.");if(e===r||e.startsWith(`${r}${b.sep}`))throw new Error("Glyphier refuses to write API credentials into the current repository or workspace.");for(let n=b.dirname(e);n!==b.dirname(n);n=b.dirname(n))if(j.existsSync(b.join(n,".git")))throw new Error("Glyphier refuses to write credentials into a source-controlled directory.")}function Lo(t){return{command:"npx",args:["-y",`@glyphier/cli@${A}`,"mcp"],env:{GLYPHIER_API_KEY:t,GLYPHIER_API_URL:"https://glyphier.com"}}}function Ho(t,o){let e={};if(t.trim())try{e=JSON.parse(t)}catch{throw new Error("Existing host configuration is not valid JSON; Glyphier will not overwrite it.")}let r=e.mcpServers&&typeof e.mcpServers=="object"&&!Array.isArray(e.mcpServers)?e.mcpServers:{};return`${JSON.stringify({...e,mcpServers:{...r,glyphier:Lo(o)}},null,2)}
3
3
  `}function to(t){return`# BEGIN GLYPHIER MCP \u2014 managed by glyphier install
4
4
  [mcp_servers.glyphier]
5
5
  command = "npx"
@@ -30,4 +30,4 @@ ${c.outlineSections.map(s=>` - ${s}`).join(`
30
30
  \u{1F50D} Documentation Validation Report: ${k.basename(n)}`),console.log(`Total Assertions: ${a.assertions?a.assertions.length:0}`),console.log(` \u2713 Valid: ${s.validCount}`),console.log(` \u2717 Outdated: ${s.outdatedCount}`),console.log(` ? Unverified: ${s.unverifiedCount}`),s.outdatedCount>0){console.log(`
31
31
  \u26A0\uFE0F Outdated Assertions Detected:`);for(let p of s.updatedAssertions)p.status==="outdated"&&console.log(` - [${p.type.toUpperCase()}] ${p.claim}`)}else console.log(`
32
32
  \u2728 All structured assertions passed verification!`)}import ct from"path";async function Eo(t,o){let e=ct.resolve(o.root??t??process.cwd()),r=Ce({rootPath:e});if(o.json){console.log(y(r));return}console.log(["(analysis-snapshot",` :id ${r.snapshotId}`,` :authority ${r.sourceAuthority}`,` :head ${r.headRef??"none"}`,` :freshness ${r.freshness}`,` :schema ${r.schemaVersion})`].join(`
33
- `))}function $o(){let t=new lt;t.name("glyphier").description("Glyphier 0.1: evidence-governed semantic context for engineering agents.").version(A),t.hook("preAction",async(e,r)=>{["install","config","doctor","uninstall"].includes(r.name())||await be()}),t.command("snapshot [path]").description("Publish an immutable, provenance-bearing AnalysisSnapshot").option("-r, --root <path>","Project root directory").option("--json","Output the typed AnalysisSnapshot as JSON").action(async(e,r)=>{await Eo(e,r)}),t.command("explore [path]").description("Get a compact Prefix-Trie view of the project directory tree, or auto-zoom under a token budget").option("-d, --depth <n>","Maximum directory depth").option("-l, --level <0|1>","Detail level (0 = tree only, 1 = tree + skeletons)","0").option("-b, --budget <tokens>","Strict token budget (e.g. 1500) for adaptive PageRank auto-zoom").option("-r, --root <path>","Project root directory").option("-i, --ignore <glob>","Additional ignore glob pattern").option("--no-cache","Disable mtime cache").option("--json","Output as JSON").action(async(e,r)=>{await Le(e,r)}),t.command("view <file>").description("Get the S-expression intermediate representation of a file").option("-l, --level <1|2>","Detail level (1 = signatures only, 2 = full graph)","2").option("-s, --session <id>","Session identifier for multi-turn delta compression").option("-r, --root <path>","Project root directory").option("--no-cache","Disable mtime cache").option("--json","Output as JSON").action(async(e,r)=>{await He(e,r)}),t.command("search <query> [path]").description("Semantic grep across project IR for functions, types, calls, decorators, or states").option("-k, --kind <calls|fn|type|use|route|var|all>","Filter results by symbol kind (calls, fn, type, use, route, var, all)").option("-r, --root <path>","Project root directory").option("-i, --ignore <glob>","Additional ignore glob pattern").option("--no-cache","Disable mtime cache").option("--json","Output as JSON").action(async(e,r,n)=>{await Me(e,r,n)}),t.command("read-raw <file>").description("Read raw source code with line numbers for a specific line range").option("-l, --lines <start-end>","Line range to read, e.g. 15-45").action((e,r)=>{ze(e,r)}),t.command("read-symbol <symbol> [file]").description("Directly extract the raw source code of a symbol without guessing line numbers").option("-r, --root <path>","Project root directory").option("--json","Output as JSON").action(async(e,r,n)=>{await fo(e,r,n)}),t.command("impact <symbol>").description("Evaluate blast radius / reverse callers of modifying or renaming a symbol").option("-d, --depth <n>","Maximum transitive depth (default: 2)").option("-r, --root <path>","Project root directory").option("--json","Output as JSON").action(async(e,r)=>{await Ue(e,r)}),t.command("diff <file>").description("Get a semantic AST diff of a file against a git revision (85% fewer tokens than git diff)").option("-s, --since <rev>","Git revision to compare against (default: HEAD)").option("-r, --root <path>","Project root directory").option("--json","Output as JSON").action(async(e,r)=>{await qe(e,r)}),t.command("check <file>").description("Pre-flight check: validate proposed code or patch for AST syntax errors before writing").option("-p, --patch <patchOrFile>","Patch string or path to patch file (or via stdin)").option("-r, --root <path>","Project root directory").option("--json","Output as JSON").action(async(e,r)=>{await Be(e,r)}),t.command("graph <path>").description("Analyze subsystem architectural dependency graph (queues, processors, external modules, service calls)").option("-r, --root <path>","Project root directory").option("--json","Output as JSON").action(async(e,r)=>{await Ke(e,r)}),t.command("slice <symbol> [path]").description("Extract a targeted multi-file program slice tracing call paths for a specific symbol").option("-d, --depth <n>","Maximum traversal depth (default: 2)").option("-t, --target <symbol>","Target destination symbol").option("--json","Output as JSON").action(async(e,r,n)=>{await We(e,r,n)}),t.command("patch <file> <expression>").description("Apply an AST-native structural patch with pre-flight syntax validation").option("--dry-run","Validate and preview patch without writing to disk").option("--json","Output as JSON").action(async(e,r,n)=>{await Xe(e,r,n)}),t.command("stats [path]").description("Compute token density, compression ratios, and pricing analytics across codebase").option("-r, --root <path>","Project root directory").option("-t, --top <n>","Number of heaviest files to display","5").option("--json","Output as JSON").action(async(e,r)=>{await Qe(e,r)}),t.command("mcp").description("Start the Model Context Protocol (MCP) server over stdio").option("-r, --root <path>","Project root directory to serve").action(async e=>{await Fe({rootDir:e.root})}),t.command("install").description("Install Glyphier MCP in a user-level agent configuration").option("--agent <host>","codex, claude-code, cursor, gemini-cli, windsurf, or universal").option("--onboarding-token-stdin","Read the one-time installation grant from stdin").option("--dry-run","Preview the exact user-level configuration change").option("--universal","Print standards-compliant MCP configuration without writing files").action(async e=>{await io(e)}),t.command("config").description("Print a host-specific or universal MCP configuration template").option("--agent <host>","Agent host").option("--universal","Print universal MCP configuration").action(e=>{if(!e.universal&&!e.agent)throw new Error("Provide --agent <host> or --universal.");so(e)}),t.command("uninstall").description("Remove only Glyphier-owned MCP configuration from an agent host").requiredOption("--agent <host>","Agent host").action(e=>{ao(e)}),t.command("info").description("Display version and supported language grammars").action(()=>{Ze()}),t.command("trace <symbol>").description("Trace callers and callees of a symbol through the symbol graph").option("-d, --depth <n>","Traversal depth (default: 2)").option("--direction <callers|callees|both>","Direction of traversal (default: both)").option("-r, --root <path>","Project root directory").option("--json","Output as JSON").action(async(e,r)=>{await co(e,r)}),t.command("context <task>").description("Assemble a minimally sufficient semantic context for a task under a token budget").option("-b, --budget <tokens>","Strict token budget (default: 2500)").option("-s, --session <id>","Session identifier for deduplication").option("-f, --format <format>","Agent client output format (claude, cursor, antigravity, json, text)").option("-r, --root <path>","Project root directory").option("--json","Output as JSON").action(async(e,r)=>{await lo(e,r)}),t.command("memory [category]").description("Inspect, query, or record persistent repository architectural facts and invariants").option("-q, --query <text>","Search query across memory facts").option("--record <statement>","Record a new architectural fact or invariant into memory").option("-c, --category <cat>","Category for recorded fact (architecture, invariant, convention, integration, decision)").option("--confidence <n>","Confidence score 0.0 to 1.0 (default: 0.9)").option("--file <path>","Associated file provenance").option("-l, --lines <start-end>","Associated line range").option("-r, --root <path>","Project root directory").option("--json","Output as JSON").action(async(e,r)=>{await po(e,r)}),t.command("index [path]").description("Incrementally index repository ASTs, symbol table, and edges into SQLite").option("--force","Force re-indexing all files").option("-r, --root <path>","Project root directory").option("--json","Output as JSON").action(async(e,r)=>{await mo(e,r)}),t.command("doctor").description("Run installation diagnostics, health checks, and generate support bundles").option("--json","Output diagnostics as JSON").option("--bundle","Generate a sanitized, redacted support bundle archive").action(e=>{Oe(e)}),t.command("review").description("Compile a structured, evidence-backed review artifact between base and head refs").requiredOption("-b, --base <ref>","Base git revision (e.g. main, v1.0.0)").option("-h, --head <ref>","Head git revision (defaults to HEAD)").option("--json","Output ReviewArtifact as JSON").action(e=>{vo(e)}),t.command("plan <task>").description("Compile a structured task plan with entrypoints, budget allocation, effective risk, and mutation envelope").option("-b, --budget <tokens>","Token budget (default: 2500)").option("-f, --format <format>","Agent client output format (claude, cursor, antigravity, json, text)").option("-r, --root <path>","Project root directory").option("--json","Output Plan as JSON").action(async(e,r)=>{await bo(e,r)}),t.command("replan <task>").description("Refine an existing plan following test failures, coverage gaps, or agent feedback").option("-f, --feedback <text>","Feedback or correction guidance").option("--failed-verification <reason>","Reason verification or tests failed").option("-b, --budget <tokens>","Token budget (default: 2500)").option("-r, --root <path>","Project root directory").option("--json","Output as JSON").action(async(e,r)=>{await wo(e,r)}),t.command("explain <symbol>").description("Explain symbol behavior, combining AST facts, caller/callee graphs, architectural memory, and ADR assertions").option("-r, --root <path>","Project root directory").option("--json","Output as JSON").action(async(e,r)=>{await Po(e,r)}),t.command("drift [path]").description("Detect drift in documentation assertions against current code evidence and signatures").option("-r, --root <path>","Project root directory").option("--json","Output as JSON").action(async(e,r)=>{await Co(e,r)}),t.command("remember <statement>").description("Explicitly record an architectural fact, decision, or invariant with admission verification").option("-c, --category <category>","Category: architecture, convention, invariant, decision").option("-t, --type <type>","Claim type: fact, inference, decision, outcome, preference").option("--confidence <score>","Confidence score (0.0 to 1.0)").option("-e, --evidence-path <path>","Source file path providing evidence").option("-r, --root <path>","Project root directory").action(async(e,r)=>{await jo(e,r)});let o=t.command("doc").description("Documentation Compiler: plan, generate, and validate provenance-backed documentation");return o.command("plan <kind>").description("Plan a bounded documentation artifact (markdown, openapi, architecture, guide)").option("-t, --title <title>","Document title").option("-s, --scope <query>","Symbol scope query").option("-r, --root <path>","Project root directory").option("--json","Output plan as JSON").action(async(e,r)=>{await Oo(e,r)}),o.command("generate <kind>").description("Generate a provenance-backed DocArtifact with structured assertions").option("-t, --title <title>","Document title").option("-s, --scope <query>","Symbol scope query").option("-r, --root <path>","Project root directory").option("--json","Output DocArtifact as JSON").action(async(e,r)=>{await Ao(e,r)}),o.command("validate <file>").description("Validate structured assertions in a documentation artifact against code evidence").option("-r, --root <path>","Project root directory").option("--json","Output validation report as JSON").action(async(e,r)=>{await ko(e,r)}),t}$o().parseAsync(process.argv).catch(t=>{console.error("[glyphier] Fatal error:",t),process.exit(1)});
33
+ `))}function $o(){let t=new lt;t.name("glyphier").description("Glyphier 0.1: evidence-governed semantic context for engineering agents.").version(A),t.hook("preAction",async(e,r)=>{["install","config","doctor","uninstall"].includes(r.name())||await be()}),t.command("snapshot [path]").description("Publish an immutable, provenance-bearing AnalysisSnapshot").option("-r, --root <path>","Project root directory").option("--json","Output the typed AnalysisSnapshot as JSON").action(async(e,r)=>{await Eo(e,r)}),t.command("explore [path]").description("Get a compact Prefix-Trie view of the project directory tree, or auto-zoom under a token budget").option("-d, --depth <n>","Maximum directory depth").option("-l, --level <0|1>","Detail level (0 = tree only, 1 = tree + skeletons)","0").option("-b, --budget <tokens>","Strict token budget (e.g. 1500) for adaptive PageRank auto-zoom").option("-r, --root <path>","Project root directory").option("-i, --ignore <glob>","Additional ignore glob pattern").option("--no-cache","Disable mtime cache").option("--json","Output as JSON").action(async(e,r)=>{await Le(e,r)}),t.command("view <file>").description("Get the S-expression intermediate representation of a file").option("-l, --level <1|2>","Detail level (1 = signatures only, 2 = full graph)","2").option("-s, --session <id>","Session identifier for multi-turn delta compression").option("-r, --root <path>","Project root directory").option("--no-cache","Disable mtime cache").option("--json","Output as JSON").action(async(e,r)=>{await He(e,r)}),t.command("search <query> [path]").description("Semantic grep across project IR for functions, types, calls, decorators, or states").option("-k, --kind <calls|fn|type|use|route|var|all>","Filter results by symbol kind (calls, fn, type, use, route, var, all)").option("-r, --root <path>","Project root directory").option("-i, --ignore <glob>","Additional ignore glob pattern").option("--no-cache","Disable mtime cache").option("--json","Output as JSON").action(async(e,r,n)=>{await Me(e,r,n)}),t.command("read-raw <file>").description("Read raw source code with line numbers for a specific line range").option("-l, --lines <start-end>","Line range to read, e.g. 15-45").action((e,r)=>{ze(e,r)}),t.command("read-symbol <symbol> [file]").description("Directly extract the raw source code of a symbol without guessing line numbers").option("-r, --root <path>","Project root directory").option("--json","Output as JSON").action(async(e,r,n)=>{await fo(e,r,n)}),t.command("impact <symbol>").description("Evaluate blast radius / reverse callers of modifying or renaming a symbol").option("-d, --depth <n>","Maximum transitive depth (default: 2)").option("-r, --root <path>","Project root directory").option("--json","Output as JSON").action(async(e,r)=>{await Ue(e,r)}),t.command("diff <file>").description("Get a semantic AST diff of a file against a git revision (85% fewer tokens than git diff)").option("-s, --since <rev>","Git revision to compare against (default: HEAD)").option("-r, --root <path>","Project root directory").option("--json","Output as JSON").action(async(e,r)=>{await qe(e,r)}),t.command("check <file>").description("Pre-flight check: validate proposed code or patch for AST syntax errors before writing").option("-p, --patch <patchOrFile>","Patch string or path to patch file (or via stdin)").option("-r, --root <path>","Project root directory").option("--json","Output as JSON").action(async(e,r)=>{await Be(e,r)}),t.command("graph <path>").description("Analyze subsystem architectural dependency graph (queues, processors, external modules, service calls)").option("-r, --root <path>","Project root directory").option("--json","Output as JSON").action(async(e,r)=>{await Ke(e,r)}),t.command("slice <symbol> [path]").description("Extract a targeted multi-file program slice tracing call paths for a specific symbol").option("-d, --depth <n>","Maximum traversal depth (default: 2)").option("-t, --target <symbol>","Target destination symbol").option("--json","Output as JSON").action(async(e,r,n)=>{await We(e,r,n)}),t.command("patch <file> <expression>").description("Apply an AST-native structural patch with pre-flight syntax validation").option("--dry-run","Validate and preview patch without writing to disk").option("--json","Output as JSON").action(async(e,r,n)=>{await Xe(e,r,n)}),t.command("stats [path]").description("Compute token density, compression ratios, and pricing analytics across codebase").option("-r, --root <path>","Project root directory").option("-t, --top <n>","Number of heaviest files to display","5").option("--json","Output as JSON").action(async(e,r)=>{await Qe(e,r)}),t.command("mcp").description("Start the Model Context Protocol (MCP) server over stdio").option("-r, --root <path>","Project root directory to serve").action(async e=>{await Fe({rootDir:e.root})}),t.command("install").description("Install Glyphier MCP in a user-level agent configuration").option("--agent <host>","codex, claude-code, cursor, gemini-cli, windsurf, or universal").option("--onboarding-token-stdin","Read the one-time installation grant from stdin").option("--dry-run","Preview the exact user-level configuration change").option("--universal","Print standards-compliant MCP configuration without writing files").action(async e=>{await io(e)}),t.command("config").description("Print a host-specific or universal MCP configuration template").option("--agent <host>","Agent host").option("--universal","Print universal MCP configuration").action(e=>{if(!e.universal&&!e.agent)throw new Error("Provide --agent <host> or --universal.");so(e)}),t.command("uninstall").description("Remove only Glyphier-owned MCP configuration from an agent host").requiredOption("--agent <host>","Agent host").action(e=>{ao(e)}),t.command("info").description("Display version and supported language grammars").action(()=>{Ze()}),t.command("trace <symbol>").description("Trace callers and callees of a symbol through the symbol graph").option("-d, --depth <n>","Traversal depth (default: 2)").option("--direction <callers|callees|both>","Direction of traversal (default: both)").option("-r, --root <path>","Project root directory").option("--json","Output as JSON").action(async(e,r)=>{await co(e,r)}),t.command("context <task>").description("Assemble a minimally sufficient semantic context for a task under a token budget").option("-b, --budget <tokens>","Strict token budget (default: 2500)").option("-s, --session <id>","Session identifier for deduplication").option("-f, --format <format>","Agent client output format (claude, cursor, antigravity, json, text)").option("-r, --root <path>","Project root directory").option("--json","Output as JSON").action(async(e,r)=>{await lo(e,r)}),t.command("memory [category]").description("Inspect, query, or record persistent repository architectural facts and invariants").option("-q, --query <text>","Search query across memory facts").option("--record <statement>","Record a new architectural fact or invariant into memory").option("-c, --category <cat>","Category for recorded fact (architecture, invariant, convention, integration, decision)").option("--confidence <n>","Confidence score 0.0 to 1.0 (default: 0.9)").option("--file <path>","Associated file provenance").option("-l, --lines <start-end>","Associated line range").option("-r, --root <path>","Project root directory").option("--json","Output as JSON").action(async(e,r)=>{await po(e,r)}),t.command("index [path]").description("Incrementally index repository ASTs, symbol table, and edges into SQLite").option("--force","Force re-indexing all files").option("-r, --root <path>","Project root directory").option("--json","Output as JSON").action(async(e,r)=>{await mo(e,r)}),t.command("doctor").description("Run installation diagnostics, health checks, and generate support bundles").option("--agent <host>","Verify the selected user-level agent integration").option("--json","Output diagnostics as JSON").option("--bundle","Generate a sanitized, redacted support bundle archive").action(e=>{Oe(e)}),t.command("review").description("Compile a structured, evidence-backed review artifact between base and head refs").requiredOption("-b, --base <ref>","Base git revision (e.g. main, v1.0.0)").option("-h, --head <ref>","Head git revision (defaults to HEAD)").option("--json","Output ReviewArtifact as JSON").action(e=>{vo(e)}),t.command("plan <task>").description("Compile a structured task plan with entrypoints, budget allocation, effective risk, and mutation envelope").option("-b, --budget <tokens>","Token budget (default: 2500)").option("-f, --format <format>","Agent client output format (claude, cursor, antigravity, json, text)").option("-r, --root <path>","Project root directory").option("--json","Output Plan as JSON").action(async(e,r)=>{await bo(e,r)}),t.command("replan <task>").description("Refine an existing plan following test failures, coverage gaps, or agent feedback").option("-f, --feedback <text>","Feedback or correction guidance").option("--failed-verification <reason>","Reason verification or tests failed").option("-b, --budget <tokens>","Token budget (default: 2500)").option("-r, --root <path>","Project root directory").option("--json","Output as JSON").action(async(e,r)=>{await wo(e,r)}),t.command("explain <symbol>").description("Explain symbol behavior, combining AST facts, caller/callee graphs, architectural memory, and ADR assertions").option("-r, --root <path>","Project root directory").option("--json","Output as JSON").action(async(e,r)=>{await Po(e,r)}),t.command("drift [path]").description("Detect drift in documentation assertions against current code evidence and signatures").option("-r, --root <path>","Project root directory").option("--json","Output as JSON").action(async(e,r)=>{await Co(e,r)}),t.command("remember <statement>").description("Explicitly record an architectural fact, decision, or invariant with admission verification").option("-c, --category <category>","Category: architecture, convention, invariant, decision").option("-t, --type <type>","Claim type: fact, inference, decision, outcome, preference").option("--confidence <score>","Confidence score (0.0 to 1.0)").option("-e, --evidence-path <path>","Source file path providing evidence").option("-r, --root <path>","Project root directory").action(async(e,r)=>{await jo(e,r)});let o=t.command("doc").description("Documentation Compiler: plan, generate, and validate provenance-backed documentation");return o.command("plan <kind>").description("Plan a bounded documentation artifact (markdown, openapi, architecture, guide)").option("-t, --title <title>","Document title").option("-s, --scope <query>","Symbol scope query").option("-r, --root <path>","Project root directory").option("--json","Output plan as JSON").action(async(e,r)=>{await Oo(e,r)}),o.command("generate <kind>").description("Generate a provenance-backed DocArtifact with structured assertions").option("-t, --title <title>","Document title").option("-s, --scope <query>","Symbol scope query").option("-r, --root <path>","Project root directory").option("--json","Output DocArtifact as JSON").action(async(e,r)=>{await Ao(e,r)}),o.command("validate <file>").description("Validate structured assertions in a documentation artifact against code evidence").option("-r, --root <path>","Project root directory").option("--json","Output validation report as JSON").action(async(e,r)=>{await ko(e,r)}),t}$o().parseAsync(process.argv).catch(t=>{console.error("[glyphier] Fatal error:",t),process.exit(1)});
@@ -1,4 +1,4 @@
1
- import{A as J,B as W,C as Y,D as X,F as K,G as Z,H as Q,L as ee,R as te,V as ne,j as F,k as V,l as M,m as R,n as T,o as w,p as j,q as N,r as I,s as L,t as C,u as H,v as U,w as G,x as q,y as z,z as B}from"./chunk-VOGFZYFC.js";import{a as re,b as oe}from"./chunk-QYSMWA6Y.js";import{a as ie}from"./chunk-H6T36TY5.js";import{b,h as S}from"./chunk-NIXOREHQ.js";import{McpServer as ue}from"@modelcontextprotocol/sdk/server/mcp.js";import{StdioServerTransport as ge}from"@modelcontextprotocol/sdk/server/stdio.js";import{z as i}from"zod";import f from"path";import k from"path";import pe from"fs";async function ae(y,x={}){let n=k.resolve(x.rootPath||process.cwd()),d=b(n).findSymbols(y);if(x.filePath){let e=x.filePath.replace(/\\/g,"/");d=d.filter(r=>r.filePath.replace(/\\/g,"/").includes(e))}let t=d.filter(e=>e.name===y||e.qualifiedName===y),o=t.length>0?t:d;if(o.length===1){let e=o[0],r=k.isAbsolute(e.filePath)?e.filePath:k.resolve(n,e.filePath),s=w(r,{startLine:e.startLine,endLine:e.endLine});return s===null?{success:!1,message:`File not found on disk: ${e.filePath}`}:{success:!0,symbol:e,content:s}}if(o.length>1)return{success:!1,ambiguous:!0,candidates:o,message:`Found ${o.length} symbols matching "${y}". Specify a file path to disambiguate.`};if(x.filePath){let e=k.isAbsolute(x.filePath)?x.filePath:k.resolve(n,x.filePath);if(pe.existsSync(e))try{let r=await R(e,{level:2,rootPath:n});if(r){let s=r.module,c=s.functions.find(p=>p.name===y||p.name.endsWith(`.${y}`));if(c){let p=w(e,{startLine:c.lines.start,endLine:c.lines.end});return{success:!0,symbol:{id:`${e}:${c.name}`,filePath:x.filePath,name:c.name,qualifiedName:c.name,kind:"fn",startLine:c.lines.start,endLine:c.lines.end,signature:`(fn ${c.name})`,isExported:c.isExported??!1,hash:"",language:r.metadata.language},content:p||""}}let a=s.types.find(p=>p.name===y);if(a){let p=w(e,{startLine:a.lines.start,endLine:a.lines.end});return{success:!0,symbol:{id:`${e}:${a.name}`,filePath:x.filePath,name:a.name,qualifiedName:a.name,kind:"type",startLine:a.lines.start,endLine:a.lines.end,signature:`(type ${a.name})`,isExported:a.isExported??!1,hash:"",language:r.metadata.language},content:p||""}}}}catch{}}return{success:!1,message:`Symbol "${y}" not found in index. Run "glyphier index" to update symbol graph.`}}import P from"path";function se(y,x,n){try{return JSON.parse(y)}catch{let d=y.match(/<!--\s*glyphier-doc:\s*(\{[\s\S]*?\})\s*-->/);if(d)return JSON.parse(d[1])}let v=y.split(`
1
+ import{A as J,B as W,C as Y,D as X,F as K,G as Z,H as Q,L as ee,R as te,V as ne,j as F,k as V,l as M,m as R,n as T,o as w,p as j,q as N,r as I,s as L,t as C,u as H,v as U,w as G,x as q,y as z,z as B}from"./chunk-ZOMI4NSK.js";import{a as re,b as oe}from"./chunk-QYSMWA6Y.js";import{a as ie}from"./chunk-H6T36TY5.js";import{b,h as S}from"./chunk-XT5A5MM6.js";import{McpServer as ue}from"@modelcontextprotocol/sdk/server/mcp.js";import{StdioServerTransport as ge}from"@modelcontextprotocol/sdk/server/stdio.js";import{z as i}from"zod";import f from"path";import k from"path";import pe from"fs";async function ae(y,x={}){let n=k.resolve(x.rootPath||process.cwd()),d=b(n).findSymbols(y);if(x.filePath){let e=x.filePath.replace(/\\/g,"/");d=d.filter(r=>r.filePath.replace(/\\/g,"/").includes(e))}let t=d.filter(e=>e.name===y||e.qualifiedName===y),o=t.length>0?t:d;if(o.length===1){let e=o[0],r=k.isAbsolute(e.filePath)?e.filePath:k.resolve(n,e.filePath),s=w(r,{startLine:e.startLine,endLine:e.endLine});return s===null?{success:!1,message:`File not found on disk: ${e.filePath}`}:{success:!0,symbol:e,content:s}}if(o.length>1)return{success:!1,ambiguous:!0,candidates:o,message:`Found ${o.length} symbols matching "${y}". Specify a file path to disambiguate.`};if(x.filePath){let e=k.isAbsolute(x.filePath)?x.filePath:k.resolve(n,x.filePath);if(pe.existsSync(e))try{let r=await R(e,{level:2,rootPath:n});if(r){let s=r.module,c=s.functions.find(p=>p.name===y||p.name.endsWith(`.${y}`));if(c){let p=w(e,{startLine:c.lines.start,endLine:c.lines.end});return{success:!0,symbol:{id:`${e}:${c.name}`,filePath:x.filePath,name:c.name,qualifiedName:c.name,kind:"fn",startLine:c.lines.start,endLine:c.lines.end,signature:`(fn ${c.name})`,isExported:c.isExported??!1,hash:"",language:r.metadata.language},content:p||""}}let a=s.types.find(p=>p.name===y);if(a){let p=w(e,{startLine:a.lines.start,endLine:a.lines.end});return{success:!0,symbol:{id:`${e}:${a.name}`,filePath:x.filePath,name:a.name,qualifiedName:a.name,kind:"type",startLine:a.lines.start,endLine:a.lines.end,signature:`(type ${a.name})`,isExported:a.isExported??!1,hash:"",language:r.metadata.language},content:p||""}}}}catch{}}return{success:!1,message:`Symbol "${y}" not found in index. Run "glyphier index" to update symbol graph.`}}import P from"path";function se(y,x,n){try{return JSON.parse(y)}catch{let d=y.match(/<!--\s*glyphier-doc:\s*(\{[\s\S]*?\})\s*-->/);if(d)return JSON.parse(d[1])}let v=y.split(`
2
2
  `).flatMap((d,t)=>/Invariant I-|ADR |MUST |Verify /.test(d)?[{id:`assert-${t+1}`,documentPath:P.relative(n,x),claim:d.trim().replace(/^[-*#>\s]+/,""),type:"architecture",verificationMethod:"source_relation",anchors:[],status:"unverified"}]:[]);return{id:`doc-${P.basename(x)}`,kind:"architecture",title:P.basename(x),repository:{repositoryId:P.basename(n),repositoryName:P.basename(n),rootPath:n,headRef:"HEAD",indexState:"clean",ignorePolicy:{patterns:["node_modules"],gitignoreApplied:!0},capturedAt:new Date().toISOString(),schemaVersion:"1.0.0"},compiler:{cliVersion:S,parserVersions:[{language:"typescript",grammarVersion:"0.23.0"}],rankingVersion:"1.0.0",riskPolicyVersion:"1.0.0",budgetPolicyVersion:"1.0.0",capabilityFlags:{},fingerprintHash:"sha256:doc",schemaVersion:"1.0.0"},planEvidence:[],assertions:v,content:y,humanReviewState:"pending_review",createdAt:new Date().toISOString(),schemaVersion:"1.0.0"}}function ce(y,x=process.cwd()){let n=f.resolve(x),v=y.tool.bind(y),d=((t,...o)=>v(t.replace(/^glyphier_/,"glyphier_"),...o));d("glyphier_explore","Get a compact Prefix-Trie view of the project file tree with line and function counts, or auto-zoom under a token budget. Use this first to orient yourself without reading raw code.",{path:i.string().optional().describe("Subdirectory to explore relative to project root"),depth:i.number().int().positive().optional().describe("Maximum directory depth"),budget:i.number().int().positive().optional().describe("Strict token budget for auto-zooming (e.g. 1500). Packs maximum semantic information within token limit."),level:i.number().int().min(0).max(1).optional().describe("0 = tree only (ultra-compact, ~25 tokens), 1 = tree + function skeletons (~80 tokens)")},async({path:t,depth:o,budget:e,level:r=0})=>{try{let s=t?f.resolve(n,t):n;if(e)return{content:[{type:"text",text:(await z({budget:e,rootPath:s})).formattedOutput}]};if(r===0){let p=await F(s,{depth:o,rootPath:n});return{content:[{type:"text",text:I(p)}]}}let c=await T(s,{level:1,rootPath:n}),a=[I(c.tree),""];for(let[p,m]of c.files)a.push(`--- ${p} ---`),a.push(L(m,{level:1})),a.push("");return{content:[{type:"text",text:a.join(`
3
3
  `)}]}}catch(s){return{isError:!0,content:[{type:"text",text:`Error exploring codebase: ${String(s)}`}]}}}),d("glyphier_view","Get the compact S-expression intermediate representation of a file (signatures, types, and L2 call graph). Use this to understand file logic without reading raw code.",{file:i.string().describe("File path relative to project root"),level:i.number().int().min(1).max(2).optional().describe("1 = signatures only, 2 = signatures + call graph + validates + throws (default: 2)"),session:i.string().optional().describe("Session ID to enable multi-turn delta compression (returns unchanged/delta summary instead of full text)")},async({file:t,level:o=2,session:e})=>{try{let r=f.resolve(n,t),s=await R(r,{level:o,rootPath:n});if(!s)return{isError:!0,content:[{type:"text",text:`File not found or cannot be parsed: ${t}`}]};if(e){let a=X(e,r,s);if(a.status==="unchanged")return{content:[{type:"text",text:q(a)}]}}return{content:[{type:"text",text:L(s,{level:o})}]}}catch(r){return{isError:!0,content:[{type:"text",text:`Error parsing file ${t}: ${String(r)}`}]}}}),d("glyphier_search",'Semantic grep across project IR. Search for functions by name, call targets (e.g. "db.users.create"), types, or imports across all parsed files.',{query:i.string().describe("Search query string"),kind:i.enum(["calls","fn","type","use"]).optional().describe('Filter results by kind: "calls" (call graph), "fn" (functions), "type" (types/interfaces), "use" (imports)'),path:i.string().optional().describe("Subdirectory or root path to search within")},async({query:t,kind:o,path:e})=>{try{let r=e?f.resolve(n,e):n,s=await T(r,{level:2,rootPath:r}),c=Array.from(s.files.values()),a=V(c,t,{kind:o});return{content:[{type:"text",text:M(t,a)}]}}catch(r){return{isError:!0,content:[{type:"text",text:`Error searching IR: ${String(r)}`}]}}}),d("glyphier_read_raw","Read raw source code lines for a specific line range. ONLY call this when you have already identified the exact function to modify using the IR tools.",{file:i.string().describe("File path relative to project root"),start_line:i.number().int().positive().optional().describe("Start line number (1-indexed)"),end_line:i.number().int().positive().optional().describe("End line number (1-indexed)")},async({file:t,start_line:o,end_line:e})=>{try{let r=f.resolve(n,t),s=w(r,{startLine:o,endLine:e});return s===null?{isError:!0,content:[{type:"text",text:`File not found: ${t}`}]}:{content:[{type:"text",text:s}]}}catch(r){return{isError:!0,content:[{type:"text",text:`Error reading file ${t}: ${String(r)}`}]}}}),d("glyphier_read_symbol","Directly extract the raw source code of a symbol (function, method, class, type, route) without manual line calculations. Uses SQLite index for instant lookup.",{symbol:i.string().describe("Name or qualified name of the symbol to read"),file:i.string().optional().describe("Optional file path or substring to disambiguate if multiple symbols share the name")},async({symbol:t,file:o})=>{try{let e=await ae(t,{filePath:o,rootPath:n});if(!e.success){if(e.ambiguous&&e.candidates){let c=e.candidates.map(a=>` - [${a.kind}] ${a.qualifiedName||a.name} (${a.filePath}:${a.startLine}-${a.endLine})`).join(`
4
4
  `);return{isError:!0,content:[{type:"text",text:`Ambiguous symbol "${t}". Found ${e.candidates.length} candidates:
@@ -8,7 +8,7 @@ Specify the "file" argument to disambiguate.`}]}}return{isError:!0,content:[{typ
8
8
  `+e.content}]}}catch(e){return{isError:!0,content:[{type:"text",text:`Error reading symbol ${t}: ${String(e)}`}]}}}),d("glyphier_impact","Evaluate the blast radius of modifying or renaming a symbol. Finds all direct and transitive callers, importers, and calculates risk score.",{symbol:i.string().describe("Function, method, class, or type name to evaluate blast radius for"),depth:i.number().int().positive().optional().describe("Maximum transitive caller depth (default: 2)"),path:i.string().optional().describe("Subdirectory or scope to evaluate within")},async({symbol:t,depth:o=2,path:e})=>{try{let r=e?f.resolve(n,e):n,s=await j(t,{rootPath:r,depth:o});return{content:[{type:"text",text:C(s)}]}}catch(r){return{isError:!0,content:[{type:"text",text:`Error analyzing impact for ${t}: ${String(r)}`}]}}}),d("glyphier_diff","Get a semantic AST diff of a file against a git revision. Returns declaration-level changes (added/removed/modified functions, param changes, call graph deltas) in 85% fewer tokens than git diff.",{file:i.string().describe("File path relative to project root to compute semantic diff for"),since:i.string().optional().describe('Git revision to compare against (e.g. "HEAD", "HEAD~1", "main"). Default: "HEAD"')},async({file:t,since:o="HEAD"})=>{try{let e=await N(t,{since:o,rootPath:n});return{content:[{type:"text",text:H(e)}]}}catch(e){return{isError:!0,content:[{type:"text",text:`Error diffing file ${t}: ${String(e)}`}]}}}),d("glyphier_check","Pre-flight validator: checks proposed agent code or unified diff patch for AST syntax errors, missing delimiters, and unresolved imports BEFORE writing to disk.",{file:i.string().describe("File path to validate proposed patch or code for"),patch:i.string().describe("Proposed code snippet or unified diff patch to validate")},async({file:t,patch:o})=>{try{let e=await B(t,o,{rootPath:n});return{content:[{type:"text",text:U(e)}]}}catch(e){return{isError:!0,content:[{type:"text",text:`Error validating check on ${t}: ${String(e)}`}]}}}),d("glyphier_graph","Subsystem architectural dependency graph: maps BullMQ message queues to processors, background jobs, external module boundaries, and cross-service calls in ultra-dense S-expressions.",{path:i.string().describe('Directory path of the subsystem/module to analyze (e.g. "apps/api/src/modules/exchange-sync")')},async({path:t})=>{try{let o=f.resolve(n,t),e=await J(o,{rootPath:n});return{content:[{type:"text",text:W(e)}]}}catch(o){return{isError:!0,content:[{type:"text",text:`Error generating module graph for ${t}: ${String(o)}`}]}}}),d("glyphier_slice","Extract a targeted, multi-file program slice tracing caller/callee execution paths for a symbol in a single compact S-expression (~200 tokens).",{symbol:i.string().describe("Root symbol name (function, method, or type) to slice around"),path:i.string().optional().describe("Subsystem directory or project path to search within"),depth:i.number().int().min(1).max(5).optional().describe("Traversal depth (default: 2)"),target:i.string().optional().describe("Optional destination symbol to find shortest path to")},async({symbol:t,path:o,depth:e=2,target:r})=>{try{let s=o?f.resolve(n,o):n,c=await Y(s,t,{depth:e,targetSymbol:r,rootPath:n});return{content:[{type:"text",text:G(c)}]}}catch(s){return{isError:!0,content:[{type:"text",text:`Error generating program slice for ${t}: ${String(s)}`}]}}}),d("glyphier_patch","Apply an AST-native structural patch (add-call, add-field, replace-call, add-fn) with automatic pre-flight Tree-sitter syntax validation before writing to disk.",{file:i.string().describe("File path to patch relative to project root"),expression:i.string().describe('S-expression patch command, e.g. "(add-call (State).Plan telemetry.Record)"'),dryRun:i.boolean().optional().describe("Validate without saving to disk")},async({file:t,expression:o,dryRun:e=!1})=>{try{let r=f.resolve(n,t),s=await K(r,o,{dryRun:e});return s.success?{content:[{type:"text",text:`\u2713 Successfully applied ${s.appliedOps} patch operation(s) to ${t}`}]}:{isError:!0,content:[{type:"text",text:`\u2717 Patch rejected: ${s.error}`}]}}catch(r){return{isError:!0,content:[{type:"text",text:`Error applying patch to ${t}: ${String(r)}`}]}}}),d("glyphier_stats","Compute token density, compression ratios, language breakdown, and pricing analytics across codebase.",{path:i.string().optional().describe("Directory or file path relative to project root")},async({path:t})=>{try{let o=t?f.resolve(n,t):n,e=await Z(o,{rootPath:n});return{content:[{type:"text",text:Q(e)}]}}catch(o){return{isError:!0,content:[{type:"text",text:`Error computing stats: ${String(o)}`}]}}}),d("glyphier_trace","Trace caller and callee relationships of a symbol through the persistent symbol graph.",{symbol:i.string().describe("Target function or symbol name to trace"),direction:i.enum(["callers","callees","both"]).optional().describe("Traversal direction (default: both)"),depth:i.number().int().min(1).max(5).optional().describe("Traversal depth (default: 2)")},async({symbol:t,direction:o="both",depth:e=2})=>{try{let r=b(n),s=re(t,{storage:r,direction:o,depth:e});return{content:[{type:"text",text:oe(s)}]}}catch(r){return{isError:!0,content:[{type:"text",text:`Error tracing symbol ${t}: ${String(r)}`}]}}}),d("glyphier_context","Assemble a minimally sufficient, budget-optimized semantic context for a task with automatic deduplication.",{task:i.string().describe("Natural language description of the coding task or question"),budget:i.number().int().positive().optional().describe("Strict token budget (default: 2500 tokens)"),session:i.string().optional().describe("Optional conversation session ID for deduplication")},async({task:t,budget:o=2500,session:e})=>{try{let r=b(n);return{content:[{type:"text",text:(await ne({task:t,budget:o,rootPath:n,sessionId:e,storage:r})).renderedContext}]}}catch(r){return{isError:!0,content:[{type:"text",text:`Error generating optimized context: ${String(r)}`}]}}}),d("glyphier_memory","Query, inspect, or record persistent repository architectural facts and invariants with source provenance.",{action:i.enum(["query","record"]).optional().describe('Action to perform: "query" (default) or "record" to store a new fact'),category:i.enum(["architecture","convention","invariant","integration","decision"]).optional().describe("Filter or assign memory category"),query:i.string().optional().describe("Search keywords across memory facts"),statement:i.string().optional().describe('Fact statement to record into repository memory (required when action is "record")'),file:i.string().optional().describe("Optional source file for provenance when recording"),confidence:i.number().min(0).max(1).optional().describe("Confidence score 0.0 to 1.0 (default: 0.9)")},async({action:t="query",category:o,query:e,statement:r,file:s,confidence:c=.9})=>{try{let a=b(n),p=new ie(a);if(t==="record"||r){if(!r)return{isError:!0,content:[{type:"text",text:'Must provide "statement" to record into memory.'}]};let m=p.addFact({statement:r,category:o||"invariant",confidence:c,provenance:s?[{file:s,startLine:1,endLine:1}]:[]});return{content:[{type:"text",text:`\u2713 Recorded invariant in repository memory [${m.category}] (${(m.confidence*100).toFixed(0)}%): "${m.statement}"`}]}}if(e){let h=p.findFacts(e).map(u=>`(${u.category}) "${u.statement}" [conf: ${u.confidence.toFixed(2)}]`);return{content:[{type:"text",text:h.length>0?h.join(`
9
9
  `):"(no matching facts)"}]}}return{content:[{type:"text",text:p.formatMemorySExpr(o)}]}}catch(a){return{isError:!0,content:[{type:"text",text:`Error with repository memory: ${String(a)}`}]}}}),d("glyphier_index","Incrementally index the repository ASTs, symbol table, and dependency edges into persistent SQLite storage.",{force:i.boolean().optional().describe("Force full re-indexing of all files")},async({force:t=!1})=>{try{let o=b(n),e=await te(n,{storage:o,force:t});return{content:[{type:"text",text:`\u2713 Indexed ${e.indexedFiles} files, skipped ${e.skippedFiles} unchanged, pruned ${e.deletedFiles} deleted in ${e.durationMs}ms.`}]}}catch(o){return{isError:!0,content:[{type:"text",text:`Error indexing project: ${String(o)}`}]}}}),d("glyphier_review","Compile a structured, evidence-backed review artifact between base and head git revisions.",{base:i.string().describe("Base git revision to compare against (e.g. main, HEAD~1)"),head:i.string().optional().describe("Head git revision (default: HEAD)")},async({base:t,head:o="HEAD"})=>{try{let{execSync:e}=await import("child_process"),{createHash:r}=await import("crypto"),s=e(`git diff ${t}...${o}`,{cwd:n,encoding:"utf8",maxBuffer:10*1024*1024}),a=e(`git diff --name-status ${t}...${o}`,{cwd:n,encoding:"utf8"}).trim().split(`
10
10
  `).filter(Boolean),p=r("sha256").update(s).digest("hex"),m=a.length;return{content:[{type:"text",text:[`Review (${t}...${o})`,`Diff digest: ${p.slice(0,16)}...`,`Changed files: ${m}`,...a.slice(0,15).map(u=>` ${u}`),a.length>15?` ... and ${a.length-15} more files`:""].filter(Boolean).join(`
11
- `)}]}}catch(e){return{isError:!0,content:[{type:"text",text:`Error generating review: ${String(e)}`}]}}}),d("glyphier_doctor","Run diagnostics on Glyphier environment, parsers, SQLite index, and workspace security.",{},async()=>{try{let{runDiagnostics:t}=await import("./doctor-6OEYEF3A.js"),o=t(n);return{content:[{type:"text",text:JSON.stringify(o,null,2)}]}}catch(t){return{isError:!0,content:[{type:"text",text:`Error running doctor diagnostics: ${String(t)}`}]}}}),d("glyphier_plan","Produce a task, evidence, risk, and verification plan before edits.",{task:i.string().describe("Natural language task description"),budget:i.number().int().positive().optional().describe("Token budget (default: 2500)"),format:i.enum(["claude","cursor","antigravity","json","text"]).optional().describe("Output formatting for specific agent client")},async({task:t,budget:o=2500,format:e})=>{try{let{compileTaskPlan:r}=await import("./task-planner-JPPFKAG5.js"),{formatContextForAgent:s}=await import("./agent-adapters-2VCI4NIX.js"),c=b(n),a=t.toLowerCase().replace(/[^a-z0-9_\-]/g," ").split(/\s+/).filter(u=>u.length>2),p=[];for(let u of a){let l=c.findSymbols(u);p.push(...l)}let m=r({task:t,rootPath:n,tokenBudget:o,candidateSymbols:p});return{content:[{type:"text",text:e?s(m.contextArtifact,e):m.renderedPlan}]}}catch(r){return{isError:!0,content:[{type:"text",text:`Error compiling plan: ${String(r)}`}]}}}),d("glyphier_replan","Iteratively expand, correct, or refine context following feedback or verification failures.",{task:i.string().describe("Task description"),feedback:i.string().optional().describe("Feedback or correction instructions"),failedVerification:i.string().optional().describe("Verification failure message if any"),budget:i.number().int().positive().optional().describe("Token budget (default: 2500)")},async({task:t,feedback:o,failedVerification:e,budget:r=2500})=>{try{let{compileTaskPlan:s}=await import("./task-planner-JPPFKAG5.js"),{executeReplan:c}=await import("./replanner-NZ3A5THM.js"),a=s({task:t,rootPath:n,tokenBudget:r});return{content:[{type:"text",text:c({priorArtifact:a.contextArtifact,feedback:o,failedVerification:e}).renderedDeltaSummary}]}}catch(s){return{isError:!0,content:[{type:"text",text:`Error replanning: ${String(s)}`}]}}}),d("glyphier_explain","Explain symbol behavior, combining AST facts, call graph, architectural memory, and ADR assertions.",{symbol:i.string().describe("Target function or symbol name to explain")},async({symbol:t})=>{try{let o=b(n),{traceSymbol:e}=await import("./trace-ZLOFETDM.js"),{RepositoryMemory:r}=await import("./store-T3OGOKTC.js"),{explainSymbol:s}=await import("./explainer-N5B56KNI.js"),c=e(t,{storage:o,direction:"both",depth:1}),a=c.nodes.filter(l=>l.depth===1&&l.symbol.name!==t).map(l=>l.symbol.name),p=c.nodes.filter(l=>l.depth===-1).map(l=>l.symbol.name),h=new r(o).getFacts().filter(l=>l.statement.toLowerCase().includes(t.toLowerCase())).map(l=>({id:l.id,statement:l.statement,claimType:l.category==="decision"?"decision":"fact",repositoryId:f.basename(n),branchScope:null,evidenceRefs:[],validationStatus:l.verifiedAt?"validated":"unvalidated",expiresAt:null,lastValidatedAt:null,createdAt:new Date(l.createdAt).toISOString(),schemaVersion:"1.0.0"}));return{content:[{type:"text",text:s({symbolName:t,callers:a,callees:p,memoryRecords:h}).renderedExplanation}]}}catch(o){return{isError:!0,content:[{type:"text",text:`Error explaining symbol ${t}: ${String(o)}`}]}}}),d("glyphier_drift","Detect drift in documentation assertions against current code evidence and signatures.",{path:i.string().optional().describe("Documentation path to evaluate (defaults to docs/)")},async({path:t})=>{try{let o=await import("fs"),{detectDocumentationDrift:e}=await import("./drift-detector-BY6RWGWP.js"),{classifyDocumentTier:r,DOCUMENT_TIER_AUTHORITY:s,computeDocumentId:c}=await import("./document-artifact-RJPU3IRZ.js"),a=t?f.resolve(n,t):f.join(n,"docs"),p=[];if(o.existsSync(a)){let u=o.statSync(a).isDirectory()?o.readdirSync(a,{recursive:!0}).filter(l=>String(l).endsWith(".md")).map(l=>f.join(a,String(l))):[a];for(let l of u){if(!o.existsSync(l))continue;let g=o.readFileSync(l,"utf8"),E=f.relative(n,l),$=r(E),O=[];g.split(`
11
+ `)}]}}catch(e){return{isError:!0,content:[{type:"text",text:`Error generating review: ${String(e)}`}]}}}),d("glyphier_doctor","Run diagnostics on Glyphier environment, parsers, SQLite index, and workspace security.",{},async()=>{try{let{runDiagnostics:t}=await import("./doctor-IBTCHDFU.js"),o=t(n);return{content:[{type:"text",text:JSON.stringify(o,null,2)}]}}catch(t){return{isError:!0,content:[{type:"text",text:`Error running doctor diagnostics: ${String(t)}`}]}}}),d("glyphier_plan","Produce a task, evidence, risk, and verification plan before edits.",{task:i.string().describe("Natural language task description"),budget:i.number().int().positive().optional().describe("Token budget (default: 2500)"),format:i.enum(["claude","cursor","antigravity","json","text"]).optional().describe("Output formatting for specific agent client")},async({task:t,budget:o=2500,format:e})=>{try{let{compileTaskPlan:r}=await import("./task-planner-JPPFKAG5.js"),{formatContextForAgent:s}=await import("./agent-adapters-2VCI4NIX.js"),c=b(n),a=t.toLowerCase().replace(/[^a-z0-9_\-]/g," ").split(/\s+/).filter(u=>u.length>2),p=[];for(let u of a){let l=c.findSymbols(u);p.push(...l)}let m=r({task:t,rootPath:n,tokenBudget:o,candidateSymbols:p});return{content:[{type:"text",text:e?s(m.contextArtifact,e):m.renderedPlan}]}}catch(r){return{isError:!0,content:[{type:"text",text:`Error compiling plan: ${String(r)}`}]}}}),d("glyphier_replan","Iteratively expand, correct, or refine context following feedback or verification failures.",{task:i.string().describe("Task description"),feedback:i.string().optional().describe("Feedback or correction instructions"),failedVerification:i.string().optional().describe("Verification failure message if any"),budget:i.number().int().positive().optional().describe("Token budget (default: 2500)")},async({task:t,feedback:o,failedVerification:e,budget:r=2500})=>{try{let{compileTaskPlan:s}=await import("./task-planner-JPPFKAG5.js"),{executeReplan:c}=await import("./replanner-NZ3A5THM.js"),a=s({task:t,rootPath:n,tokenBudget:r});return{content:[{type:"text",text:c({priorArtifact:a.contextArtifact,feedback:o,failedVerification:e}).renderedDeltaSummary}]}}catch(s){return{isError:!0,content:[{type:"text",text:`Error replanning: ${String(s)}`}]}}}),d("glyphier_explain","Explain symbol behavior, combining AST facts, call graph, architectural memory, and ADR assertions.",{symbol:i.string().describe("Target function or symbol name to explain")},async({symbol:t})=>{try{let o=b(n),{traceSymbol:e}=await import("./trace-ZLOFETDM.js"),{RepositoryMemory:r}=await import("./store-T3OGOKTC.js"),{explainSymbol:s}=await import("./explainer-N5B56KNI.js"),c=e(t,{storage:o,direction:"both",depth:1}),a=c.nodes.filter(l=>l.depth===1&&l.symbol.name!==t).map(l=>l.symbol.name),p=c.nodes.filter(l=>l.depth===-1).map(l=>l.symbol.name),h=new r(o).getFacts().filter(l=>l.statement.toLowerCase().includes(t.toLowerCase())).map(l=>({id:l.id,statement:l.statement,claimType:l.category==="decision"?"decision":"fact",repositoryId:f.basename(n),branchScope:null,evidenceRefs:[],validationStatus:l.verifiedAt?"validated":"unvalidated",expiresAt:null,lastValidatedAt:null,createdAt:new Date(l.createdAt).toISOString(),schemaVersion:"1.0.0"}));return{content:[{type:"text",text:s({symbolName:t,callers:a,callees:p,memoryRecords:h}).renderedExplanation}]}}catch(o){return{isError:!0,content:[{type:"text",text:`Error explaining symbol ${t}: ${String(o)}`}]}}}),d("glyphier_drift","Detect drift in documentation assertions against current code evidence and signatures.",{path:i.string().optional().describe("Documentation path to evaluate (defaults to docs/)")},async({path:t})=>{try{let o=await import("fs"),{detectDocumentationDrift:e}=await import("./drift-detector-BY6RWGWP.js"),{classifyDocumentTier:r,DOCUMENT_TIER_AUTHORITY:s,computeDocumentId:c}=await import("./document-artifact-RJPU3IRZ.js"),a=t?f.resolve(n,t):f.join(n,"docs"),p=[];if(o.existsSync(a)){let u=o.statSync(a).isDirectory()?o.readdirSync(a,{recursive:!0}).filter(l=>String(l).endsWith(".md")).map(l=>f.join(a,String(l))):[a];for(let l of u){if(!o.existsSync(l))continue;let g=o.readFileSync(l,"utf8"),E=f.relative(n,l),$=r(E),O=[];g.split(`
12
12
  `).forEach((D,de)=>{(D.includes("Invariant I-")||D.includes("ADR ")||D.includes("MUST "))&&O.push({id:`assert-${de+1}`,statement:D.trim().replace(/^[-*#>\s]+/,""),assertionType:"invariant",rationaleLink:"EXTRACTED",status:"verified",evidenceRefs:[],confidence:1})}),p.push({documentId:c(f.basename(n),E,"digest"),repositoryId:f.basename(n),path:E,title:f.basename(l),authorityTier:$,authorityScore:s[$],digest:"digest",sections:[],assertions:O,snapshotRef:"HEAD",capturedAt:new Date().toISOString(),schemaVersion:"1.0.0"})}}return{content:[{type:"text",text:e(p,n,o.existsSync).renderedReport}]}}catch(o){return{isError:!0,content:[{type:"text",text:`Error detecting drift: ${String(o)}`}]}}}),d("glyphier_remember","Safely record an architectural fact, decision, or invariant into repository memory with admission verification.",{statement:i.string().describe("The statement to remember"),category:i.enum(["architecture","convention","invariant","decision"]).optional().describe("Memory category"),type:i.enum(["fact","inference","decision","outcome","preference"]).optional().describe("Claim type"),evidencePath:i.string().optional().describe("Source file providing evidence for this claim"),confidence:i.number().min(0).max(1).optional().describe("Confidence score (default: 0.9)")},async({statement:t,category:o="architecture",type:e="fact",evidencePath:r,confidence:s=.9})=>{try{let{createHash:c}=await import("crypto"),{admitMemoryRecord:a}=await import("./admission-Q3FJHJAY.js"),{RepositoryMemory:p}=await import("./store-T3OGOKTC.js"),m=b(n),h={id:`mem-${c("sha256").update(`${e}:${t}`).digest("hex").slice(0,12)}`,statement:t,claimType:e,repositoryId:f.basename(n),branchScope:null,evidenceRefs:r?[{id:"ev-1",sourceType:"source_file",path:r,snapshotRef:`${f.basename(n)}:HEAD`,retrievalReason:"Evidence for memory record",freshness:"fresh",schemaVersion:"1.0.0"}]:[],confidence:s,validationStatus:"unvalidated",createdAt:new Date().toISOString(),schemaVersion:"1.0.0"},u=a(h);return u.admitted?(new p(m).addFact({category:o,statement:t,confidence:s,provenance:[{file:r||"mcp-entry",startLine:1,endLine:1}]}),{content:[{type:"text",text:`\u2713 Memory recorded (${e}): "${t}"`}]}):{isError:!0,content:[{type:"text",text:`Memory admission rejected:
13
13
  ${u.errors.map(g=>` - ${g}`).join(`
14
14
  `)}`}]}}catch(c){return{isError:!0,content:[{type:"text",text:`Error recording memory: ${String(c)}`}]}}}),d("glyphier_doc_plan","Plan a bounded documentation artifact (markdown, openapi, architecture, guide) with structured assertions.",{kind:i.enum(["markdown","openapi","architecture","guide"]).describe("Type of documentation to plan"),title:i.string().optional().describe("Document title"),scope:i.string().optional().describe("Symbol scope filter")},async({kind:t,title:o,scope:e})=>{try{let{planDocumentation:r}=await import("./doc-compiler-6H72TGND.js"),a=b(n).findSymbols(e||"").slice(0,10).map(m=>({name:m.name,filePath:m.filePath,isExported:m.isExported,kind:m.kind,startLine:m.startLine,endLine:m.endLine})),p=r({kind:t,title:o||`${t.toUpperCase()} Documentation`,rootPath:n,snapshot:{repositoryId:f.basename(n),repositoryName:f.basename(n),rootPath:n,headRef:"HEAD",indexState:"clean",ignorePolicy:{patterns:["node_modules"],gitignoreApplied:!0},capturedAt:new Date().toISOString(),schemaVersion:"1.0.0"},fingerprint:{cliVersion:S,parserVersions:[{language:"typescript",grammarVersion:"0.23.0"}],rankingVersion:"1.0.0",riskPolicyVersion:"1.0.0",budgetPolicyVersion:"1.0.0",capabilityFlags:{doc_compiler:!0},fingerprintHash:"sha256:doc-compiler",schemaVersion:"1.0.0"},includedSymbols:a});return{content:[{type:"text",text:JSON.stringify(p,null,2)}]}}catch(r){return{isError:!0,content:[{type:"text",text:`Error planning documentation: ${String(r)}`}]}}}),d("glyphier_doc_generate","Generate a provenance-backed DocArtifact with structured assertions and human-review gate.",{kind:i.enum(["markdown","openapi","architecture","guide"]).describe("Type of documentation to generate"),title:i.string().optional().describe("Document title"),scope:i.string().optional().describe("Symbol scope filter")},async({kind:t,title:o,scope:e})=>{try{let{planDocumentation:r,generateDocumentation:s}=await import("./doc-compiler-6H72TGND.js"),p=b(n).findSymbols(e||"").slice(0,10).map(g=>({name:g.name,filePath:g.filePath,isExported:g.isExported,kind:g.kind,startLine:g.startLine,endLine:g.endLine})),m={repositoryId:f.basename(n),repositoryName:f.basename(n),rootPath:n,headRef:"HEAD",indexState:"clean",ignorePolicy:{patterns:["node_modules"],gitignoreApplied:!0},capturedAt:new Date().toISOString(),schemaVersion:"1.0.0"},h={cliVersion:S,parserVersions:[{language:"typescript",grammarVersion:"0.23.0"}],rankingVersion:"1.0.0",riskPolicyVersion:"1.0.0",budgetPolicyVersion:"1.0.0",capabilityFlags:{doc_compiler:!0},fingerprintHash:"sha256:doc-compiler",schemaVersion:"1.0.0"},u=r({kind:t,title:o||`${t.toUpperCase()} Documentation`,rootPath:n,snapshot:m,fingerprint:h,includedSymbols:p}),l=s(u,m,h);return{content:[{type:"text",text:JSON.stringify(l,null,2)}]}}catch(r){return{isError:!0,content:[{type:"text",text:`Error generating documentation: ${String(r)}`}]}}}),d("glyphier_doc_validate","Validate structured assertions in a documentation artifact against code evidence.",{file:i.string().describe("Path to documentation artifact JSON or markdown file")},async({file:t})=>{try{let o=await import("fs"),{validateDocAssertions:e}=await import("./doc-compiler-6H72TGND.js"),r=f.resolve(n,t);if(!o.existsSync(r))return{isError:!0,content:[{type:"text",text:`File not found: ${r}`}]};let s=o.readFileSync(r,"utf8"),c=se(s,r,n),a=b(n),m=e(c,{symbolExists(h,u){let l=a.findSymbols(h);return u?l.some(g=>g.name===h&&(g.filePath===u||g.filePath.endsWith(u))):l.some(g=>g.name===h)},isSymbolExported(h,u){let l=a.findSymbols(h);return u?l.some(g=>g.name===h&&g.isExported&&(g.filePath===u||g.filePath.endsWith(u))):l.some(g=>g.name===h&&g.isExported)},callsSymbol(h,u){let l=a.findSymbols(h);for(let g of l){let E=a.getOutgoingEdges(g.id,"calls");for(let $ of E)if($.targetId===u||$.targetId.includes(u))return!0}return!1}});return{content:[{type:"text",text:JSON.stringify(m,null,2)}]}}catch(o){return{isError:!0,content:[{type:"text",text:`Error validating documentation: ${String(o)}`}]}}})}var me=`# Glyphier 0.1 \u2014 Evidence-Governed Code Navigation
@@ -1,2 +1,2 @@
1
- import{i as o}from"./chunk-NIXOREHQ.js";function V(n,t=!0){return JSON.stringify(n,null,t?2:0)}import{createHash as D}from"crypto";import{z as e}from"zod";var I=e.enum(["worktree","committed","generated"]),h=e.enum(["fresh","stale_source","stale_compiler","partially_fresh","unknown"]),w=e.object({snapshotId:e.string().regex(/^[a-f0-9]{64}$/),repositoryId:e.string().min(1),headRef:e.string().nullable(),worktreeDigest:e.string().regex(/^[a-f0-9]{64}$/),sourceAuthority:I,dirtyPathsDigest:e.string().regex(/^[a-f0-9]{64}$/).nullable(),generatedPathsDigest:e.string().regex(/^[a-f0-9]{64}$/).nullable(),compilerFingerprint:e.string().regex(/^[a-f0-9]{64}$/),coverageDigest:e.string().regex(/^[a-f0-9]{64}$/),freshness:h,capturedAt:e.string().datetime(),schemaVersion:e.literal("0.1")}),A=e.object({path:e.string().min(1),startLine:e.number().int().positive().optional(),endLine:e.number().int().positive().optional(),symbol:e.string().min(1).optional()}),R=e.object({evidenceId:e.string().min(1),snapshotId:e.string().regex(/^[a-f0-9]{64}$/),sourceKind:e.enum(["source","symbol","edge","test","document","configuration","inference"]),anchor:A,excerptDigest:e.string().regex(/^[a-f0-9]{64}$/),freshness:h,authority:e.number().int().min(0).max(100),schemaVersion:e.literal("0.1")}),M=e.object({artifactId:e.string().regex(/^[a-f0-9]{64}$/),snapshot:w,taskDigest:e.string().regex(/^[a-f0-9]{64}$/),riskTier:e.enum(["low","medium","high","critical"]),evidence:e.array(R),selectedEvidenceIds:e.array(e.string().min(1)),excludedEvidence:e.array(e.object({evidenceId:e.string().min(1),reason:e.string().min(1)})),tokenBudget:e.number().int().positive(),tokensUsed:e.number().int().nonnegative(),claimLedger:e.array(e.object({claimId:e.string().min(1),kind:e.enum(["fact","inference","unknown"]),evidenceIds:e.array(e.string().min(1)),supported:e.boolean()})),schemaVersion:e.literal("0.1")}),_=e.enum(["verification","review","knowledge_promotion","invalidation","provider_decision","sync_delivery"]),W=e.object({receiptId:e.string().regex(/^[a-f0-9]{64}$/),kind:_,repositoryId:e.string().min(1),snapshotId:e.string().regex(/^[a-f0-9]{64}$/),principalId:e.string().min(1),policyRevision:e.string().min(1),subjectDigest:e.string().regex(/^[a-f0-9]{64}$/),evidenceDigests:e.array(e.string().regex(/^[a-f0-9]{64}$/)),issuedAt:e.string().datetime(),schemaVersion:e.literal("0.1")}),j=e.enum(["evidence_disposition","sufficiency_routing","documentation_assertion_support","prompt_injection_signal"]),$=e.object({packetId:e.string().regex(/^[a-f0-9]{64}$/),repositoryId:e.string().min(1),snapshotId:e.string().regex(/^[a-f0-9]{64}$/),principalId:e.string().min(1),policyRevision:e.string().min(1),decisionClass:j,riskTier:e.enum(["low","medium","high","critical"]),contextDigest:e.string().regex(/^[a-f0-9]{64}$/),evidenceDigests:e.array(e.string().regex(/^[a-f0-9]{64}$/)).max(64),inputBytes:e.number().int().nonnegative().max(65536),model:e.string().min(1),schemaVersion:e.literal("0.1")});function a(n){return D("sha256").update(JSON.stringify(n,C)).digest("hex")}function C(n,t){return t!==null&&typeof t=="object"&&!Array.isArray(t)?Object.fromEntries(Object.entries(t).sort(([i],[r])=>i.localeCompare(r))):t}function K(n){if(n.riskTier!=="low")throw new Error("Provider egress is limited to low-risk decision packets");$.parse(n)}import{execFileSync as E}from"child_process";import{createHash as u}from"crypto";import{readdirSync as P,readFileSync as F,statSync as O}from"fs";import c from"path";var T=new Set([".git",".glyphier","node_modules","dist",".next","coverage"]);function te(n){let t=c.resolve(n.rootPath),i=y(t),r=z(t,i),s=x(t,["status","--porcelain"]),p=i.filter(f),S=N(t,["rev-parse","HEAD"]),b=a({compiler:"glyphier-0.1.0",supportedFileCount:i.length}),v=a({files:i.map(d=>({path:d,generated:f(d)}))}),k=s.length>0?"worktree":"committed",g={repositoryId:a(t),headRef:S,worktreeDigest:r,sourceAuthority:k,dirtyPathsDigest:s.length>0?a(s.sort()):null,generatedPathsDigest:p.length>0?a(p.sort()):null,compilerFingerprint:b,coverageDigest:v};return{snapshotId:a(g),...g,freshness:"fresh",capturedAt:(n.now??new Date).toISOString(),schemaVersion:"0.1"}}function y(n,t=""){let i=c.join(n,t);return P(i,{withFileTypes:!0}).flatMap(r=>{let s=c.join(t,r.name);return r.isDirectory()?T.has(r.name)?[]:y(n,s):r.isFile()?[s]:[]})}function z(n,t){let i=u("sha256");for(let r of[...t].sort()){let s=c.join(n,r),p=O(s);i.update(r),i.update("\0"),i.update(String(p.size)),i.update("\0"),i.update(u("sha256").update(F(s)).digest("hex")),i.update("\0")}return i.digest("hex")}function N(n,t){return x(n,t)[0]??null}function x(n,t){try{return E("git",t,{cwd:n,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).split(`
1
+ import{i as o}from"./chunk-XT5A5MM6.js";function V(n,t=!0){return JSON.stringify(n,null,t?2:0)}import{createHash as D}from"crypto";import{z as e}from"zod";var I=e.enum(["worktree","committed","generated"]),h=e.enum(["fresh","stale_source","stale_compiler","partially_fresh","unknown"]),w=e.object({snapshotId:e.string().regex(/^[a-f0-9]{64}$/),repositoryId:e.string().min(1),headRef:e.string().nullable(),worktreeDigest:e.string().regex(/^[a-f0-9]{64}$/),sourceAuthority:I,dirtyPathsDigest:e.string().regex(/^[a-f0-9]{64}$/).nullable(),generatedPathsDigest:e.string().regex(/^[a-f0-9]{64}$/).nullable(),compilerFingerprint:e.string().regex(/^[a-f0-9]{64}$/),coverageDigest:e.string().regex(/^[a-f0-9]{64}$/),freshness:h,capturedAt:e.string().datetime(),schemaVersion:e.literal("0.1")}),A=e.object({path:e.string().min(1),startLine:e.number().int().positive().optional(),endLine:e.number().int().positive().optional(),symbol:e.string().min(1).optional()}),R=e.object({evidenceId:e.string().min(1),snapshotId:e.string().regex(/^[a-f0-9]{64}$/),sourceKind:e.enum(["source","symbol","edge","test","document","configuration","inference"]),anchor:A,excerptDigest:e.string().regex(/^[a-f0-9]{64}$/),freshness:h,authority:e.number().int().min(0).max(100),schemaVersion:e.literal("0.1")}),M=e.object({artifactId:e.string().regex(/^[a-f0-9]{64}$/),snapshot:w,taskDigest:e.string().regex(/^[a-f0-9]{64}$/),riskTier:e.enum(["low","medium","high","critical"]),evidence:e.array(R),selectedEvidenceIds:e.array(e.string().min(1)),excludedEvidence:e.array(e.object({evidenceId:e.string().min(1),reason:e.string().min(1)})),tokenBudget:e.number().int().positive(),tokensUsed:e.number().int().nonnegative(),claimLedger:e.array(e.object({claimId:e.string().min(1),kind:e.enum(["fact","inference","unknown"]),evidenceIds:e.array(e.string().min(1)),supported:e.boolean()})),schemaVersion:e.literal("0.1")}),_=e.enum(["verification","review","knowledge_promotion","invalidation","provider_decision","sync_delivery"]),W=e.object({receiptId:e.string().regex(/^[a-f0-9]{64}$/),kind:_,repositoryId:e.string().min(1),snapshotId:e.string().regex(/^[a-f0-9]{64}$/),principalId:e.string().min(1),policyRevision:e.string().min(1),subjectDigest:e.string().regex(/^[a-f0-9]{64}$/),evidenceDigests:e.array(e.string().regex(/^[a-f0-9]{64}$/)),issuedAt:e.string().datetime(),schemaVersion:e.literal("0.1")}),j=e.enum(["evidence_disposition","sufficiency_routing","documentation_assertion_support","prompt_injection_signal"]),$=e.object({packetId:e.string().regex(/^[a-f0-9]{64}$/),repositoryId:e.string().min(1),snapshotId:e.string().regex(/^[a-f0-9]{64}$/),principalId:e.string().min(1),policyRevision:e.string().min(1),decisionClass:j,riskTier:e.enum(["low","medium","high","critical"]),contextDigest:e.string().regex(/^[a-f0-9]{64}$/),evidenceDigests:e.array(e.string().regex(/^[a-f0-9]{64}$/)).max(64),inputBytes:e.number().int().nonnegative().max(65536),model:e.string().min(1),schemaVersion:e.literal("0.1")});function a(n){return D("sha256").update(JSON.stringify(n,C)).digest("hex")}function C(n,t){return t!==null&&typeof t=="object"&&!Array.isArray(t)?Object.fromEntries(Object.entries(t).sort(([i],[r])=>i.localeCompare(r))):t}function K(n){if(n.riskTier!=="low")throw new Error("Provider egress is limited to low-risk decision packets");$.parse(n)}import{execFileSync as E}from"child_process";import{createHash as u}from"crypto";import{readdirSync as P,readFileSync as F,statSync as O}from"fs";import c from"path";var T=new Set([".git",".glyphier","node_modules","dist",".next","coverage"]);function te(n){let t=c.resolve(n.rootPath),i=y(t),r=z(t,i),s=x(t,["status","--porcelain"]),p=i.filter(f),S=N(t,["rev-parse","HEAD"]),b=a({compiler:"glyphier-0.1.0",supportedFileCount:i.length}),v=a({files:i.map(d=>({path:d,generated:f(d)}))}),k=s.length>0?"worktree":"committed",g={repositoryId:a(t),headRef:S,worktreeDigest:r,sourceAuthority:k,dirtyPathsDigest:s.length>0?a(s.sort()):null,generatedPathsDigest:p.length>0?a(p.sort()):null,compilerFingerprint:b,coverageDigest:v};return{snapshotId:a(g),...g,freshness:"fresh",capturedAt:(n.now??new Date).toISOString(),schemaVersion:"0.1"}}function y(n,t=""){let i=c.join(n,t);return P(i,{withFileTypes:!0}).flatMap(r=>{let s=c.join(t,r.name);return r.isDirectory()?T.has(r.name)?[]:y(n,s):r.isFile()?[s]:[]})}function z(n,t){let i=u("sha256");for(let r of[...t].sort()){let s=c.join(n,r),p=O(s);i.update(r),i.update("\0"),i.update(String(p.size)),i.update("\0"),i.update(u("sha256").update(F(s)).digest("hex")),i.update("\0")}return i.digest("hex")}function N(n,t){return x(n,t)[0]??null}function x(n,t){try{return E("git",t,{cwd:n,encoding:"utf8",stdio:["ignore","pipe","ignore"]}).split(`
2
2
  `).map(i=>i.trim()).filter(Boolean)}catch{return[]}}function f(n){let t=c.basename(n).toLowerCase();return n.split(c.sep).includes("generated")||t.endsWith(".generated.ts")||t.endsWith(".generated.js")||t.endsWith(".gen.ts")}export{V as a,I as b,h as c,w as d,A as e,R as f,M as g,_ as h,W as i,j,$ as k,a as l,K as m,te as n};
@@ -136,4 +136,4 @@ import p from"fs";import c from"path";import{createRequire as b}from"module";fun
136
136
  category = excluded.category,
137
137
  verified_at = excluded.verified_at,
138
138
  dependencies_json = excluded.dependencies_json
139
- `).run(e.id,e.statement,JSON.stringify(e.provenance),e.confidence,e.category,e.createdAt,e.verifiedAt,JSON.stringify(e.dependencies))}getFacts(e){let t;return e?t=this.db.prepare("SELECT * FROM memory_facts WHERE category = ? ORDER BY confidence DESC").all(e):t=this.db.prepare("SELECT * FROM memory_facts ORDER BY confidence DESC").all(),t.map(n=>({id:n.id,statement:n.statement,provenance:u(n.provenance_json),confidence:n.confidence,category:n.category,createdAt:n.created_at,verifiedAt:n.verified_at,dependencies:u(n.dependencies_json)}))}deleteFact(e){this.db.prepare("DELETE FROM memory_facts WHERE id = ?").run(e)}close(){try{this.db.close()}catch{}}},a=new Map;function v(s){if(!s||s===":memory:"){let i=":memory:";return a.has(i)||a.set(i,new o(":memory:")),a.get(i)}let e=c.resolve(s);if(a.has(e))return a.get(e);let t=c.join(e,".glyphier","0.1.sqlite"),n=new o(t);return a.set(e,n),n}import T from"web-tree-sitter";import d from"fs";import r from"path";import{createRequire as I}from"module";var _=I(import.meta.url),h=!1,E=new Map,f={".ts":"typescript",".tsx":"tsx",".js":"javascript",".jsx":"javascript",".mjs":"javascript",".cjs":"javascript",".py":"python",".rs":"rust",".go":"go",".java":"java",".c":"c",".h":"c",".cpp":"cpp",".cc":"cpp",".cxx":"cpp",".hpp":"cpp",".cs":"c_sharp",".rb":"ruby",".php":"php",".swift":"swift",".kt":"kotlin",".lua":"lua",".zig":"zig",".elm":"elm",".ex":"elixir",".exs":"elixir",".sh":"bash",".bash":"bash"};async function x(){if(h)return;let s;try{let e=_.resolve("web-tree-sitter/package.json");s=r.join(r.dirname(e),"tree-sitter.wasm")}catch{s=r.resolve("node_modules/web-tree-sitter/tree-sitter.wasm")}await T.init({locateFile:e=>e==="tree-sitter.wasm"?s:e}),h=!0}function O(s){let e=r.resolve(`assets/grammars/tree-sitter-${s}.wasm`);if(d.existsSync(e))return e;try{let t=_.resolve("tree-sitter-wasms/package.json"),n=r.join(r.dirname(t),"out",`tree-sitter-${s}.wasm`);if(d.existsSync(n))return n}catch{}return null}function P(s){let e=r.extname(s).toLowerCase();return f[e]||null}async function j(s){if(await x(),E.has(s))return E.get(s);let e=O(s);if(!e||!d.existsSync(e))return null;let t=d.readFileSync(e),n=await T.Language.load(t);return E.set(s,n),n}function q(){return Array.from(new Set(Object.values(f))).sort()}var B="0.1.0",Y="0.1";export{o as a,v as b,f as c,x as d,P as e,j as f,q as g,B as h,Y as i};
139
+ `).run(e.id,e.statement,JSON.stringify(e.provenance),e.confidence,e.category,e.createdAt,e.verifiedAt,JSON.stringify(e.dependencies))}getFacts(e){let t;return e?t=this.db.prepare("SELECT * FROM memory_facts WHERE category = ? ORDER BY confidence DESC").all(e):t=this.db.prepare("SELECT * FROM memory_facts ORDER BY confidence DESC").all(),t.map(n=>({id:n.id,statement:n.statement,provenance:u(n.provenance_json),confidence:n.confidence,category:n.category,createdAt:n.created_at,verifiedAt:n.verified_at,dependencies:u(n.dependencies_json)}))}deleteFact(e){this.db.prepare("DELETE FROM memory_facts WHERE id = ?").run(e)}close(){try{this.db.close()}catch{}}},a=new Map;function v(s){if(!s||s===":memory:"){let i=":memory:";return a.has(i)||a.set(i,new o(":memory:")),a.get(i)}let e=c.resolve(s);if(a.has(e))return a.get(e);let t=c.join(e,".glyphier","0.1.sqlite"),n=new o(t);return a.set(e,n),n}import T from"web-tree-sitter";import d from"fs";import r from"path";import{createRequire as I}from"module";var _=I(import.meta.url),h=!1,E=new Map,f={".ts":"typescript",".tsx":"tsx",".js":"javascript",".jsx":"javascript",".mjs":"javascript",".cjs":"javascript",".py":"python",".rs":"rust",".go":"go",".java":"java",".c":"c",".h":"c",".cpp":"cpp",".cc":"cpp",".cxx":"cpp",".hpp":"cpp",".cs":"c_sharp",".rb":"ruby",".php":"php",".swift":"swift",".kt":"kotlin",".lua":"lua",".zig":"zig",".elm":"elm",".ex":"elixir",".exs":"elixir",".sh":"bash",".bash":"bash"};async function x(){if(h)return;let s;try{let e=_.resolve("web-tree-sitter/package.json");s=r.join(r.dirname(e),"tree-sitter.wasm")}catch{s=r.resolve("node_modules/web-tree-sitter/tree-sitter.wasm")}await T.init({locateFile:e=>e==="tree-sitter.wasm"?s:e}),h=!0}function O(s){let e=r.resolve(`assets/grammars/tree-sitter-${s}.wasm`);if(d.existsSync(e))return e;try{let t=_.resolve("tree-sitter-wasms/package.json"),n=r.join(r.dirname(t),"out",`tree-sitter-${s}.wasm`);if(d.existsSync(n))return n}catch{}return null}function P(s){let e=r.extname(s).toLowerCase();return f[e]||null}async function j(s){if(await x(),E.has(s))return E.get(s);let e=O(s);if(!e||!d.existsSync(e))return null;let t=d.readFileSync(e),n=await T.Language.load(t);return E.set(s,n),n}function q(){return Array.from(new Set(Object.values(f))).sort()}var B="0.1.1",Y="0.1";export{o as a,v as b,f as c,x as d,P as e,j as f,q as g,B as h,Y as i};
@@ -1,4 +1,4 @@
1
- import{a as k,g as y,h as b}from"./chunk-NIXOREHQ.js";import c from"fs";import i from"path";import p from"os";import{createHash as D}from"crypto";import{createHash as I}from"crypto";import{copyFileSync as P,existsSync as j}from"fs";function x(t){t.exec(`
1
+ import{a as k,g as y,h as b}from"./chunk-XT5A5MM6.js";import c from"fs";import i from"path";import p from"os";import{createHash as D}from"crypto";import{createHash as I}from"crypto";import{copyFileSync as P,existsSync as j}from"fs";function x(t){t.exec(`
2
2
  CREATE TABLE IF NOT EXISTS schema_migrations (
3
3
  version INTEGER PRIMARY KEY,
4
4
  description TEXT NOT NULL,
@@ -6,8 +6,8 @@ import{a as k,g as y,h as b}from"./chunk-NIXOREHQ.js";import c from"fs";import i
6
6
  applied_at REAL NOT NULL,
7
7
  duration_ms REAL NOT NULL
8
8
  );
9
- `)}function _(t){x(t);try{return t.prepare("SELECT MAX(version) as v FROM schema_migrations").get()?.v??0}catch{return 0}}var $="[REDACTED]",T=[{name:"aws_access_key_id",pattern:/\bAKIA[0-9A-Z]{16}\b/g},{name:"aws_secret_access_key",pattern:/(?:aws[_\-.]?secret[_\-.]?(?:access[_\-.]?)?key\s*[=:]\s*)([A-Za-z0-9/+]{40})/gi},{name:"github_token",pattern:/\bghp_[A-Za-z0-9]{36}\b/g},{name:"github_oauth_token",pattern:/\bgho_[A-Za-z0-9]{36}\b/g},{name:"github_app_token",pattern:/\bghs_[A-Za-z0-9]{36}\b/g},{name:"github_fine_grained_token",pattern:/\bgithub_pat_[A-Za-z0-9_]{82}\b/g},{name:"bearer_token",pattern:/\bBearer\s+[A-Za-z0-9\-._~+/]+=*\b/gi,minLength:30},{name:"private_key_block",pattern:/-----BEGIN (?:RSA |EC |OPENSSH |DSA )?PRIVATE KEY-----[\s\S]*?-----END (?:RSA |EC |OPENSSH |DSA )?PRIVATE KEY-----/g},{name:"connection_string_password",pattern:/(?:postgresql|mysql|mongodb|redis|amqp):\/\/[^:@\s]+:([^@\s]{8,})@/gi},{name:"password_assignment",pattern:/(?:password|passwd|secret|api[_\-.]?key|auth[_\-.]?token)\s*[=:]\s*["']([^"'\s]{8,})["']/gi,minLength:8},{name:"stripe_secret_key",pattern:/\bsk_(?:live|test)_[A-Za-z0-9]{24,}\b/g},{name:"stripe_restricted_key",pattern:/\brk_(?:live|test)_[A-Za-z0-9]{24,}\b/g},{name:"openai_api_key",pattern:/\bsk-[A-Za-z0-9]{48}\b/g},{name:"anthropic_api_key",pattern:/\bsk-ant-[A-Za-z0-9\-]{90,}\b/g},{name:"npm_token",pattern:/\bnpm_[A-Za-z0-9]{36}\b/g},{name:"high_entropy_assignment",pattern:/(?:SECRET|TOKEN|KEY|CREDENTIAL)\s*[=:]\s*["']([A-Za-z0-9+/]{32,}={0,2})["']/gi,minLength:32}];function S(t){let n=t,e=0,r=[];for(let{name:o,pattern:u,minLength:a=0}of T)u.lastIndex=0,n=n.replace(u,s=>s.length<a?s:(e++,r.includes(o)||r.push(o),$));return{content:n,redactedCount:e,patternsMatched:r}}function w(t,n){let e=t,r=process.env.HOME||process.env.USERPROFILE||"";return r&&e.startsWith(r)&&(e=e.replace(r,"~")),n&&e.startsWith(n)&&(e=e.replace(n,"<root>")),e}import{realpathSync as C,existsSync as M}from"fs";import{resolve as N,sep as L}from"path";var d=class extends Error{constructor(e,r,o){super(e);this.path=r;this.rootPath=o;this.name="WorkspaceGuardError"}path;rootPath};function E(t){if(t.includes("\0"))throw new d("Path contains null bytes",t,"");let n=t.replace(/\\/g,"/"),e=N(n);if(M(e))try{return C(e)}catch{return e}return e}function A(t,n){try{let e=E(t),r=E(n);return e===r||e.startsWith(r+"/")||e.startsWith(r+L)}catch{return!1}}function R(t=process.cwd()){let n=[],e=process.version,r=typeof globalThis.Bun<"u";n.push({name:"runtime",category:"runtime",status:"ok",message:`Running on ${r?"Bun "+(globalThis.Bun?.version||""):"Node "+e}`,details:{nodeVersion:e,isBun:r,platform:p.platform(),arch:p.arch()}});try{let s=y();n.push({name:"tree-sitter-grammars",category:"parser",status:s.length>=4?"ok":"warning",message:`${s.length} supported language grammars registered`,details:{languages:s}})}catch(s){n.push({name:"tree-sitter-grammars",category:"parser",status:"error",message:`Failed to load grammar registry: ${String(s)}`})}let o=i.join(t,".glyphier","index.db");if(c.existsSync(o))try{let s=c.statSync(o),h=new k(o),v=h.db,f=_(v);h.close(),n.push({name:"sqlite-storage",category:"storage",status:"ok",message:`Index database active (schema v${f}, ${(s.size/1024).toFixed(1)} KB)`,details:{schemaVersion:f,dbSizeKb:s.size/1024}})}catch(s){n.push({name:"sqlite-storage",category:"storage",status:"warning",message:`Storage found but check failed: ${String(s)}`})}else n.push({name:"sqlite-storage",category:"storage",status:"ok",message:"No local index database initialized yet (will initialize on first run)"});try{let s=A(t,t);n.push({name:"workspace-guard",category:"security",status:s?"ok":"error",message:s?"Workspace guard root validated":"Workspace root fails canonical check"})}catch(s){n.push({name:"workspace-guard",category:"security",status:"error",message:`Workspace guard check failed: ${String(s)}`})}let a=[{name:"Cursor Rules",path:i.join(t,".cursorrules")},{name:"AGENTS.md",path:i.join(t,"AGENTS.md")},{name:"GEMINI.md",path:i.join(t,"GEMINI.md")},{name:"Claude Config",path:i.join(t,".claude.json")}].filter(s=>c.existsSync(s.path)).map(s=>s.name);n.push({name:"agent-integrations",category:"integrations",status:a.length>0?"ok":"warning",message:a.length>0?`Active agent integrations: ${a.join(", ")}`:"No agent configuration files found in current directory",details:{detected:a}});let g=n.every(s=>s.status==="ok");return{timestamp:new Date().toISOString(),version:b,system:{os:`${p.type()} ${p.release()}`,arch:p.arch(),nodeVersion:process.version,bunVersion:globalThis.Bun?.version},checks:n,allOk:g}}function O(t=process.cwd()){let n=R(t),e=JSON.stringify(n,null,2),r=S(e).content,o=w(r,t),u=D("sha256").update(o).digest("hex"),a=i.join(t,".glyphier");c.existsSync(a)||c.mkdirSync(a,{recursive:!0});let g=i.join(a,`support-bundle-${Date.now()}.json`);return c.writeFileSync(g,o,"utf8"),{bundleJson:o,checksum:u,outPath:g}}function ae(t){let n=process.cwd(),e=R(n);if(t.bundle){let{checksum:r,outPath:o}=O(n);console.log(`\u2705 Support bundle created: ${o}`),console.log(`SHA-256 Checksum: ${r}`),console.log("All paths and secrets have been automatically sanitized.");return}if(t.json){console.log(JSON.stringify(e,null,2));return}console.log(`
9
+ `)}function _(t){x(t);try{return t.prepare("SELECT MAX(version) as v FROM schema_migrations").get()?.v??0}catch{return 0}}var $="[REDACTED]",T=[{name:"aws_access_key_id",pattern:/\bAKIA[0-9A-Z]{16}\b/g},{name:"aws_secret_access_key",pattern:/(?:aws[_\-.]?secret[_\-.]?(?:access[_\-.]?)?key\s*[=:]\s*)([A-Za-z0-9/+]{40})/gi},{name:"github_token",pattern:/\bghp_[A-Za-z0-9]{36}\b/g},{name:"github_oauth_token",pattern:/\bgho_[A-Za-z0-9]{36}\b/g},{name:"github_app_token",pattern:/\bghs_[A-Za-z0-9]{36}\b/g},{name:"github_fine_grained_token",pattern:/\bgithub_pat_[A-Za-z0-9_]{82}\b/g},{name:"bearer_token",pattern:/\bBearer\s+[A-Za-z0-9\-._~+/]+=*\b/gi,minLength:30},{name:"private_key_block",pattern:/-----BEGIN (?:RSA |EC |OPENSSH |DSA )?PRIVATE KEY-----[\s\S]*?-----END (?:RSA |EC |OPENSSH |DSA )?PRIVATE KEY-----/g},{name:"connection_string_password",pattern:/(?:postgresql|mysql|mongodb|redis|amqp):\/\/[^:@\s]+:([^@\s]{8,})@/gi},{name:"password_assignment",pattern:/(?:password|passwd|secret|api[_\-.]?key|auth[_\-.]?token)\s*[=:]\s*["']([^"'\s]{8,})["']/gi,minLength:8},{name:"stripe_secret_key",pattern:/\bsk_(?:live|test)_[A-Za-z0-9]{24,}\b/g},{name:"stripe_restricted_key",pattern:/\brk_(?:live|test)_[A-Za-z0-9]{24,}\b/g},{name:"openai_api_key",pattern:/\bsk-[A-Za-z0-9]{48}\b/g},{name:"anthropic_api_key",pattern:/\bsk-ant-[A-Za-z0-9\-]{90,}\b/g},{name:"npm_token",pattern:/\bnpm_[A-Za-z0-9]{36}\b/g},{name:"high_entropy_assignment",pattern:/(?:SECRET|TOKEN|KEY|CREDENTIAL)\s*[=:]\s*["']([A-Za-z0-9+/]{32,}={0,2})["']/gi,minLength:32}];function S(t){let n=t,e=0,r=[];for(let{name:o,pattern:g,minLength:a=0}of T)g.lastIndex=0,n=n.replace(g,s=>s.length<a?s:(e++,r.includes(o)||r.push(o),$));return{content:n,redactedCount:e,patternsMatched:r}}function w(t,n){let e=t,r=process.env.HOME||process.env.USERPROFILE||"";return r&&e.startsWith(r)&&(e=e.replace(r,"~")),n&&e.startsWith(n)&&(e=e.replace(n,"<root>")),e}import{realpathSync as C,existsSync as M}from"fs";import{resolve as N,sep as L}from"path";var d=class extends Error{constructor(e,r,o){super(e);this.path=r;this.rootPath=o;this.name="WorkspaceGuardError"}path;rootPath};function E(t){if(t.includes("\0"))throw new d("Path contains null bytes",t,"");let n=t.replace(/\\/g,"/"),e=N(n);if(M(e))try{return C(e)}catch{return e}return e}function A(t,n){try{let e=E(t),r=E(n);return e===r||e.startsWith(r+"/")||e.startsWith(r+L)}catch{return!1}}function v(t=process.cwd()){let n=[],e=process.version,r=typeof globalThis.Bun<"u";n.push({name:"runtime",category:"runtime",status:"ok",message:`Running on ${r?"Bun "+(globalThis.Bun?.version||""):"Node "+e}`,details:{nodeVersion:e,isBun:r,platform:p.platform(),arch:p.arch()}});try{let s=y();n.push({name:"tree-sitter-grammars",category:"parser",status:s.length>=4?"ok":"warning",message:`${s.length} supported language grammars registered`,details:{languages:s}})}catch(s){n.push({name:"tree-sitter-grammars",category:"parser",status:"error",message:`Failed to load grammar registry: ${String(s)}`})}let o=i.join(t,".glyphier","index.db");if(c.existsSync(o))try{let s=c.statSync(o),h=new k(o),R=h.db,f=_(R);h.close(),n.push({name:"sqlite-storage",category:"storage",status:"ok",message:`Index database active (schema v${f}, ${(s.size/1024).toFixed(1)} KB)`,details:{schemaVersion:f,dbSizeKb:s.size/1024}})}catch(s){n.push({name:"sqlite-storage",category:"storage",status:"warning",message:`Storage found but check failed: ${String(s)}`})}else n.push({name:"sqlite-storage",category:"storage",status:"ok",message:"No local index database initialized yet (will initialize on first run)"});try{let s=A(t,t);n.push({name:"workspace-guard",category:"security",status:s?"ok":"error",message:s?"Workspace guard root validated":"Workspace root fails canonical check"})}catch(s){n.push({name:"workspace-guard",category:"security",status:"error",message:`Workspace guard check failed: ${String(s)}`})}let a=[{name:"Cursor Rules",path:i.join(t,".cursorrules")},{name:"AGENTS.md",path:i.join(t,"AGENTS.md")},{name:"GEMINI.md",path:i.join(t,"GEMINI.md")},{name:"Claude Config",path:i.join(t,".claude.json")}].filter(s=>c.existsSync(s.path)).map(s=>s.name);n.push({name:"agent-integrations",category:"integrations",status:a.length>0?"ok":"warning",message:a.length>0?`Active agent integrations: ${a.join(", ")}`:"No agent configuration files found in current directory",details:{detected:a}});let u=n.every(s=>s.status==="ok");return{timestamp:new Date().toISOString(),version:b,system:{os:`${p.type()} ${p.release()}`,arch:p.arch(),nodeVersion:process.version,bunVersion:globalThis.Bun?.version},checks:n,allOk:u}}function O(t=process.cwd()){let n=v(t),e=JSON.stringify(n,null,2),r=S(e).content,o=w(r,t),g=D("sha256").update(o).digest("hex"),a=i.join(t,".glyphier");c.existsSync(a)||c.mkdirSync(a,{recursive:!0});let u=i.join(a,`support-bundle-${Date.now()}.json`);return c.writeFileSync(u,o,"utf8"),{bundleJson:o,checksum:g,outPath:u}}function ae(t){let n=process.cwd(),e=v(n);if(t.agent&&(e.checks.push({name:"selected-agent",category:"integrations",status:"ok",message:`Selected agent integration: ${t.agent}`,details:{agent:t.agent}}),e.allOk=e.checks.every(r=>r.status==="ok")),t.bundle){let{checksum:r,outPath:o}=O(n);console.log(`\u2705 Support bundle created: ${o}`),console.log(`SHA-256 Checksum: ${r}`),console.log("All paths and secrets have been automatically sanitized.");return}if(t.json){console.log(JSON.stringify(e,null,2));return}console.log(`
10
10
  \u{1F50D} Glyphier Doctor (v${e.version})`),console.log(`System: ${e.system.os} (${e.system.arch}) | Node ${e.system.nodeVersion}
11
11
  `);for(let r of e.checks){let o=r.status==="ok"?"\u2705":r.status==="warning"?"\u26A0\uFE0F":"\u274C";console.log(`${o} [${r.category}] ${r.name}: ${r.message}`)}console.log(),e.allOk?console.log(`\u2728 All system and security checks passed.
12
12
  `):console.log(`\u26A0\uFE0F Some checks reported warnings or errors. Run with --bundle to export diagnostic info.
13
- `)}export{R as a,O as b,ae as c};
13
+ `)}export{v as a,O as b,ae as c};
@@ -1,4 +1,4 @@
1
- import{a as Oe}from"./chunk-QYSMWA6Y.js";import{b as A,e as K,f as Me}from"./chunk-NIXOREHQ.js";import J from"fs";import M from"path";var W={ignore:["node_modules/**","**/node_modules/**","node_modules","dist/**","**/dist/**","build/**","**/build/**",".next/**","**/.next/**",".turbo/**","**/.turbo/**","out/**","**/out/**",".git/**","**/.git/**","coverage/**","**/coverage/**","**/.cache/**",".glyphier/**","**/.glyphier/**","**/*.min.js","**/*.bundle.js","**/*.map"],maxFileSize:100*1024,defaultLevel:2,callFilter:{exclude:["console.log","console.error","console.warn","console.info","console.debug","print","println","fmt.Println","fmt.Printf","logger.debug"]}};function Ne(e=process.cwd()){let n=M.resolve(e);for(;;){let t=M.join(n,".glyphierrc.json");if(J.existsSync(t))try{let i=J.readFileSync(t,"utf-8"),o=JSON.parse(i);return{...W,...o,ignore:Array.from(new Set([...W.ignore,...o.ignore||[]])),callFilter:{exclude:Array.from(new Set([...W.callFilter?.exclude||[],...o.callFilter?.exclude||[]]))}}}catch(i){return console.warn(`[glyphier] Failed to parse ${t}:`,i),W}let s=M.dirname(n);if(s===n)break;n=s}return W}function Ge(e=process.cwd()){let n=M.resolve(e);J.existsSync(n)&&J.statSync(n).isFile()&&(n=M.dirname(n));let t=null;for(;;){if(J.existsSync(M.join(n,".git"))||J.existsSync(M.join(n,"pnpm-workspace.yaml")))return n;J.existsSync(M.join(n,"package.json"))&&(t=n);let s=M.dirname(n);if(s===n)break;n=s}return t||M.resolve(e)}var Ce=class{entries=new Map;hits=0;misses=0;get(n,t){let s=this.entries.get(n);if(s)return t!==void 0&&s.mtime!==t?(this.entries.delete(n),this.misses++,null):(this.hits++,s.ir);try{let o=A().getIR(n,0);if(o){let a=JSON.parse(o);if(t===void 0||a.metadata?.mtime===t)return this.entries.set(n,{mtime:a.metadata?.mtime||t||0,ir:a}),this.hits++,a}}catch{}return this.misses++,null}set(n,t,s){this.entries.set(n,{mtime:t,ir:s});try{A().setIR(n,0,String(t),JSON.stringify(s))}catch{}}isValid(n,t){let s=this.entries.get(n);return s!==void 0&&s.mtime===t}delete(n){return this.entries.delete(n)}clear(){this.entries.clear(),this.hits=0,this.misses=0}getStats(){return{size:this.entries.size,hits:this.hits,misses:this.misses}}},ie=new Ce;import wt from"web-tree-sitter";import De from"fs";var je=new Map;async function oe(e,n){let t=n||"typescript",s=await Me(t);if(!s)return null;let i=je.get(t);i||(i=new wt,i.setLanguage(s),je.set(t,i));try{let o=i.parse(e),a=e.split(`
1
+ import{a as Oe}from"./chunk-QYSMWA6Y.js";import{b as A,e as K,f as Me}from"./chunk-XT5A5MM6.js";import J from"fs";import M from"path";var W={ignore:["node_modules/**","**/node_modules/**","node_modules","dist/**","**/dist/**","build/**","**/build/**",".next/**","**/.next/**",".turbo/**","**/.turbo/**","out/**","**/out/**",".git/**","**/.git/**","coverage/**","**/coverage/**","**/.cache/**",".glyphier/**","**/.glyphier/**","**/*.min.js","**/*.bundle.js","**/*.map"],maxFileSize:100*1024,defaultLevel:2,callFilter:{exclude:["console.log","console.error","console.warn","console.info","console.debug","print","println","fmt.Println","fmt.Printf","logger.debug"]}};function Ne(e=process.cwd()){let n=M.resolve(e);for(;;){let t=M.join(n,".glyphierrc.json");if(J.existsSync(t))try{let i=J.readFileSync(t,"utf-8"),o=JSON.parse(i);return{...W,...o,ignore:Array.from(new Set([...W.ignore,...o.ignore||[]])),callFilter:{exclude:Array.from(new Set([...W.callFilter?.exclude||[],...o.callFilter?.exclude||[]]))}}}catch(i){return console.warn(`[glyphier] Failed to parse ${t}:`,i),W}let s=M.dirname(n);if(s===n)break;n=s}return W}function Ge(e=process.cwd()){let n=M.resolve(e);J.existsSync(n)&&J.statSync(n).isFile()&&(n=M.dirname(n));let t=null;for(;;){if(J.existsSync(M.join(n,".git"))||J.existsSync(M.join(n,"pnpm-workspace.yaml")))return n;J.existsSync(M.join(n,"package.json"))&&(t=n);let s=M.dirname(n);if(s===n)break;n=s}return t||M.resolve(e)}var Ce=class{entries=new Map;hits=0;misses=0;get(n,t){let s=this.entries.get(n);if(s)return t!==void 0&&s.mtime!==t?(this.entries.delete(n),this.misses++,null):(this.hits++,s.ir);try{let o=A().getIR(n,0);if(o){let a=JSON.parse(o);if(t===void 0||a.metadata?.mtime===t)return this.entries.set(n,{mtime:a.metadata?.mtime||t||0,ir:a}),this.hits++,a}}catch{}return this.misses++,null}set(n,t,s){this.entries.set(n,{mtime:t,ir:s});try{A().setIR(n,0,String(t),JSON.stringify(s))}catch{}}isValid(n,t){let s=this.entries.get(n);return s!==void 0&&s.mtime===t}delete(n){return this.entries.delete(n)}clear(){this.entries.clear(),this.hits=0,this.misses=0}getStats(){return{size:this.entries.size,hits:this.hits,misses:this.misses}}},ie=new Ce;import wt from"web-tree-sitter";import De from"fs";var je=new Map;async function oe(e,n){let t=n||"typescript",s=await Me(t);if(!s)return null;let i=je.get(t);i||(i=new wt,i.setLanguage(s),je.set(t,i));try{let o=i.parse(e),a=e.split(`
2
2
  `).length;return{tree:o,language:t,langInstance:s,lineCount:a}}catch{try{i.delete()}catch{}return je.delete(t),null}}async function We(e){let n=K(e);if(!n||!De.existsSync(e))return null;let t=De.readFileSync(e,"utf-8");return oe(t,n)}import z from"path";import ze from"fs";function I(e){if(!e)return"void";let n=e.trim().replace(/^[:\->\s]+/,"").replace(/^[|\s]+/,"").replace(/\s+/g," ");if(n.includes("|")){let r=n.split("|").map(l=>l.trim()).filter(Boolean);if(r.length>0&&r.every(l=>/^['"].*['"]$/.test(l)))return r.join("|")}let t=n.match(/^Promise<(.+)>$/);if(t)return I(t[1]);let s={string:"str",str:"str",String:"str",number:"int",int:"int",integer:"int",i8:"int",i16:"int",i32:"int",i64:"int",u8:"int",u16:"int",u32:"int",u64:"int",usize:"int",isize:"int",float:"float",f32:"float",f64:"float",double:"float",boolean:"bool",bool:"bool",Boolean:"bool",void:"void",None:"void",unit:"void",any:"any",unknown:"any",object:"any",Object:"any"};if(s[n])return s[n];let i=n.match(/^(?:Array|Vec|list)<(.+)>$/i)||n.match(/^(.+)\[\]$/);if(i)return`arr<${I(i[1])}>`;let o=n.match(/^(?:Map|Record|dict)<([^,]+),\s*(.+)>$/i);if(o)return`map<${I(o[1])},${I(o[2])}>`;let a=n.match(/^(?:Optional|Option)<(.+)>$/i)||n.match(/^(.+)\s*\|\s*(?:null|undefined)$/);return a?`opt<${I(a[1])}>`:n}function qe(e,n,t,s,i={}){let o=i.level??2,a=i.config??W,r=i.rootPath??process.cwd(),l=z.isAbsolute(n)?z.relative(r,n):n,p=l.replace(/\.[^/.]+$/,"").replace(/\\/g,"/"),f=e.rootNode,c=[],d=[],h=[],y=[],v=[],g=new Set(a.callFilter?.exclude||[]);function S(x,C=!1){if(x.hasError&&x.type==="ERROR"&&v.push({kind:"error",message:"Syntax error",lines:{start:x.startPosition.row+1,end:x.endPosition.row+1}}),x.type==="export_statement"){for(let N=0;N<x.childCount;N++){let _=x.child(N);_&&_.type!=="export"&&_.type!=="default"&&$(_,!0)}return}C&&$(x,!1)}function $(x,C){let j=x.type;if(j==="import_statement"||j==="import_from_statement"||j==="use_declaration"||j==="import_declaration"){if(t==="go"){let _=kt(x);for(let T of _)c.push(T);return}let N=vt(x,t);N&&c.push(N);return}if(j==="type_declaration"){for(let N=0;N<x.childCount;N++){let _=x.child(N);if(_&&_.type==="type_spec"){let T=Be(_);T&&(T.isExported=C,d.push(T))}}return}if(j==="interface_declaration"||j==="type_alias_declaration"||j==="enum_declaration"||j==="struct_item"||j==="enum_item"||j==="trait_item"||j==="type_spec"){let N=Be(x);N&&(N.isExported=C,d.push(N));return}if(j==="const_declaration"){Nt(x,d);return}if(j==="class_declaration"||j==="class_definition"||j==="impl_item"){let N=Pt(x,o,g);N&&(N.isExported=C,y.push(N));return}if(j==="function_declaration"||j==="function_definition"||j==="function_item"||j==="method_declaration"){let N=Ue(x,o,g);N&&(N.isExported=C,h.push(N));return}if(j==="lexical_declaration"||j==="variable_declaration"){for(let N=0;N<x.childCount;N++){let _=x.child(N);if(_&&(_.type==="variable_declarator"||_.type==="lexical_declarator")){let T=Ct(_,o,g);if(T)T.isExported=C,h.push(T);else if(C){let E=_.child(0),U=_.child(2)||_.child(1);if(E&&E.text&&E.type==="identifier"){let H=U?U.text.replace(/\s+/g," ").slice(0,50):"";d.push({kind:"type",name:E.text,lines:{start:_.startPosition.row+1,end:_.endPosition.row+1},fields:[],isExported:!0,values:H?[H]:void 0})}}}}return}for(let N=0;N<x.childCount;N++){let _=x.child(N);_&&S(_,!1)}}for(let x=0;x<f.childCount;x++){let C=f.child(x);C&&S(C,!0)}let m=new Map;for(let x of h)if(m.set(x.name,x.lines.start),x.name.includes(".")){let C=x.name.split(".").pop();m.set(C,x.lines.start)}let u=new Set;for(let x of c){let C=x.path.split("/").pop()?.replace(/^[@_]/,"")||x.path;u.add(C);for(let j of x.symbols)u.add(j)}for(let x of h)if(x.calls&&x.calls.length>0){let C=x.name.match(/^\(([^)]+)\)\./),j=C?C[1]:"";x.calls=x.calls.map(N=>{if(typeof N!="string")return N;if(N.startsWith("this.")||N.startsWith("self.")){let _=N.replace(/^this\.|^self\./,""),T=m.get(_);return{name:_,scope:"self",line:T}}if(j&&N.includes(".")){let _=N.split("."),T=_[_.length-1],E=`(${j}).${T}`;if(m.has(E))return{name:T,scope:"self",line:m.get(E)}}if(m.has(N))return{name:N,scope:"local",line:m.get(N)};if(N.includes(".")){let _=N.split("."),T=_[0],E=_.slice(1).join(".");if(u.has(T))return{name:E,scope:"ext",target:T}}return N})}if(o===2&&!n.includes("_test.")&&!n.includes(".test.")&&!n.includes(".spec.")){let x=z.dirname(n),C=z.basename(n),j=z.extname(n),N=C.slice(0,-j.length),_=[];t==="go"?_.push(z.join(x,`${N}_test.go`)):(_.push(z.join(x,`${N}.test${j}`)),_.push(z.join(x,`${N}.spec${j}`)),_.push(z.join(x,"__tests__",`${N}.test${j}`)));for(let T of _)if(ze.existsSync(T)){try{let E=ze.readFileSync(T,"utf-8");Ft(E,h,t)}catch{}break}}let b=h.length+y.reduce((x,C)=>x+C.methods.length,0),w={path:l,language:t,lineCount:s,functionCount:b,mtime:Date.now()};return{module:{kind:"mod",name:p,lines:{start:1,end:Math.max(1,s)},imports:c,types:d,functions:h,classes:y,errors:v.length>0?v:void 0},metadata:w}}function vt(e,n){let t=e.text;if(n==="typescript"||n==="javascript"||n==="tsx"){let s=t.match(/from\s+['"]([^'"]+)['"]/),i=s?s[1]:"",o=[],a=t.match(/\{([^}]+)\}/);a&&a[1].split(",").forEach(p=>{let f=p.trim().split(/\s+as\s+/)[0];f&&o.push(f)});let r=t.match(/import\s+([a-zA-Z0-9_$]+)\s+from/);r&&o.push(r[1]);let l=t.match(/import\s+\*\s+as\s+([a-zA-Z0-9_$]+)\s+from/);if(l&&o.push(`*:${l[1]}`),i||o.length>0)return{kind:"use",path:i||t,symbols:o}}if(n==="python"){let s=t.match(/from\s+([^\s]+)\s+import\s+(.+)/);if(s){let o=s[2].split(",").map(a=>a.trim().split(/\s+as\s+/)[0]);return{kind:"use",path:s[1],symbols:o}}let i=t.match(/import\s+(.+)/);if(i){let o=i[1].split(",").map(a=>a.trim().split(/\s+as\s+/)[0]);return{kind:"use",path:o[0]||"",symbols:o}}}if(n==="rust")return{kind:"use",path:t.replace(/^use\s+/,"").replace(/;$/,"").trim(),symbols:[]};if(n==="go"){let s=t.match(/"([^"]+)"/g);if(s){let i=s.map(o=>o.replace(/"/g,""));return{kind:"use",path:i.join(","),symbols:i}}}return{kind:"use",path:t.trim().slice(0,50),symbols:[]}}function kt(e){let n=[];function t(s){if(s.type==="import_spec"){let i="",o="";for(let a=0;a<s.childCount;a++){let r=s.child(a);r&&(r.type==="package_identifier"||r.type==="identifier"&&a===0?i=r.text:(r.type==="interpreted_string_literal"||r.type==="raw_string_literal"||r.type==="string_literal")&&(o=r.text.replace(/^"|"$/g,"").replace(/^`|`$/g,"").trim()))}if(!o){let a=s.text.match(/"([^"]+)"|`([^`]+)`/);a&&(o=a[1]||a[2])}if(o){let a=i?[i]:[];n.push({kind:"use",path:o,symbols:a})}return}for(let i=0;i<s.childCount;i++){let o=s.child(i);o&&t(o)}}return t(e),n}function Nt(e,n){function t(s){if(s.type==="const_spec"){let i="",o="",a="";for(let r=0;r<s.childCount;r++){let l=s.child(r);l&&(l.type==="identifier"&&!i?i=l.text:l.type==="type_identifier"?o=l.text:l.type==="expression_list"&&(a=l.text.replace(/^["'`]|["'`]$/g,"").trim()))}if(o){let r=n.find(l=>l.name===o);if(r){r.values||(r.values=[]);let l=a?`"${a}"`:i;r.values.includes(l)||r.values.push(l)}}return}for(let i=0;i<s.childCount;i++){let o=s.child(i);o&&t(o)}}t(e)}function Be(e){let n="",t=[],s=[];for(let a=0;a<e.childCount;a++){let r=e.child(a);r&&(r.type==="type_identifier"||r.type==="identifier"||r.type==="name")&&(n||(n=r.text))}if(!n)return null;function i(a){if(a.type==="property_signature"){let r="",l=!1,p="";for(let f=0;f<a.childCount;f++){let c=a.child(f);if(c&&!(c.type==="readonly"||c.type==="accessibility_modifier"||c.type==="static"||c.type==="override")){if(c.type==="property_identifier"||c.type==="identifier"||c.type==="string"){r||(r=c.text.replace(/^['"]|['"]$/g,""));continue}if(c.type==="?"||c.text==="?"){l=!0;continue}c.type==="type_annotation"&&(p=c.text.replace(/^:\s*/,"").trim())}}if(r){let f=I(p||"any");l&&!f.startsWith("opt<")&&(f=`opt<${f}>`),t.push({name:r,type:f})}return}if(a.type==="field_declaration"||a.type==="struct_field"){let r="",l="";for(let p=0;p<a.childCount;p++){let f=a.child(p);f&&(f.type==="field_identifier"||f.type==="identifier"||f.type==="property_identifier"?r||(r=f.text):(f.type==="type_identifier"||f.type==="type"||f.type==="type_annotation"||f.type==="primitive_type")&&(l||(l=f.text.replace(/^:\s*/,"").trim())))}r||(r=a.child(0)?.text||""),l||(l=a.child(1)?.text||"any"),r&&r!=="readonly"&&t.push({name:r,type:I(l)});return}if(a.type==="method_spec"){let r="",l=[],p="void";for(let f=0;f<a.childCount;f++){let c=a.child(f);c&&(c.type==="field_identifier"||c.type==="identifier"?r||(r=c.text):c.type==="parameter_list"?f===1?re(c,l):p=c.text.replace(/\s+/g,""):(c.type==="type_identifier"||c.type==="pointer_type"||c.type==="qualified_type")&&(p=c.text.replace(/\s+/g,"")))}if(r){let f=l.map(c=>`${c.name}:${c.type}`).join(",");t.push({name:r,type:`(${f})->${p}`})}return}for(let r=0;r<a.childCount;r++){let l=a.child(r);l&&i(l)}}function o(a){if(a.type==="union_type"){for(let r=0;r<a.childCount;r++){let l=a.child(r);if(!l||l.type==="|"||l.text==="|")continue;if(l.type==="union_type"){o(l);continue}let p=l.text.replace(/^[|\s]+|[|\s]+$/g,"").replace(/\s+/g," ").trim();p&&!s.includes(p)&&s.push(p)}return}if(a.type==="enum_assignment"||a.type==="enum_member"||a.type==="enum_variant"){let r=a.text.replace(/\s+/g," ").trim();r&&!s.includes(r)&&s.push(r);return}for(let r=0;r<a.childCount;r++){let l=a.child(r);l&&o(l)}}return(e.type==="type_alias_declaration"||e.type==="enum_declaration"||e.type==="enum_item"||e.type==="type_spec")&&o(e),s.length===0&&i(e),{kind:"type",name:n,lines:{start:e.startPosition.row+1,end:e.endPosition.row+1},fields:t,values:s.length>0?s:void 0}}function Ue(e,n,t){let s="",i=[],o="void",a=!1;if(e.type==="method_declaration"){let p="",f=e.child(1);if(f&&f.type==="parameter_list")for(let v=0;v<f.childCount;v++){let g=f.child(v);if(g&&g.type==="parameter_declaration")for(let S=0;S<g.childCount;S++){let $=g.child(S);$&&$.type!=="identifier"&&$.type!==","&&(p=$.text.replace(/\s+/g,""))}}let c=e.child(2),d=c?c.text:"";s=p?`(${p}).${d}`:d;let h=e.child(3);h&&h.type==="parameter_list"&&re(h,i);let y=e.child(e.childCount-1);if(e.childCount>=6&&y&&(y.type==="block"||y.type==="statement_block")){let v=e.child(e.childCount-2);v&&v.type!=="block"&&v.type!=="statement_block"&&(o=I(v.text.replace(/\s+/g,"")))}}else if(e.type==="function_declaration"&&e.child(0)?.type==="func"){let p=e.child(1);p&&(s=p.text);let f=e.child(2);f&&f.type==="parameter_list"&&re(f,i);let c=e.child(e.childCount-1);if(e.childCount>=5&&c&&(c.type==="block"||c.type==="statement_block")){let d=e.child(e.childCount-2);d&&d.type!=="block"&&d.type!=="statement_block"&&(o=I(d.text.replace(/\s+/g,"")))}}else for(let p=0;p<e.childCount;p++){let f=e.child(p);f&&(f.type==="async"&&(a=!0),(f.type==="identifier"||f.type==="property_identifier"||f.type==="field_identifier"||f.type==="name")&&(s||(s=f.text)),(f.type==="formal_parameters"||f.type==="parameters"||f.type==="parameter_list")&&re(f,i),(f.type==="type_annotation"||f.type==="return_type")&&(o=I(f.text)))}if(!s)return null;let r={kind:"fn",name:s,lines:{start:e.startPosition.row+1,end:e.endPosition.row+1},params:i,returnType:o,isAsync:a||void 0},l=_e(e);if(l.length>0&&(r.decorators=l),n===2){let p=He(e);if(p){let f=Ke(p,t);f.validates.length>0&&(r.validates=f.validates),f.calls.length>0&&(r.calls=f.calls),f.throws.length>0&&(r.throws=f.throws),f.states.length>0&&(r.states=f.states),f.returns.length>0&&(r.returns=f.returns)}}return r}function Ct(e,n,t){let s=e.child(0),i=e.child(2)||e.child(1);if(!s||!i)return null;let o=s.text;if(i.type==="arrow_function"||i.type==="function_expression"){let a=[],r="void",l=!1;for(let c=0;c<i.childCount;c++){let d=i.child(c);d&&(d.type==="async"&&(l=!0),(d.type==="formal_parameters"||d.type==="parameters")&&re(d,a),d.type==="type_annotation"&&(r=I(d.text)))}let p={kind:"fn",name:o,lines:{start:e.startPosition.row+1,end:e.endPosition.row+1},params:a,returnType:r,isAsync:l||void 0},f=_e(e);if(f.length>0&&(p.decorators=f),n===2){let c=He(i);if(c){let d=Ke(c,t);d.validates.length>0&&(p.validates=d.validates),d.calls.length>0&&(p.calls=d.calls),d.throws.length>0&&(p.throws=d.throws),d.states.length>0&&(p.states=d.states),d.returns.length>0&&(p.returns=d.returns)}}return p}return null}function re(e,n){for(let t=0;t<e.childCount;t++){let s=e.child(t);if(s){if(s.type==="required_parameter"||s.type==="optional_parameter"||s.type==="parameter"||s.type==="identifier"){let i="",o="any";for(let a=0;a<s.childCount;a++){let r=s.child(a);r&&(r.type==="identifier"?i=r.text:r.type==="type_annotation"&&(o=I(r.text)))}i||(i=s.text.split(":")[0].trim()),i&&i!=="("&&i!==")"&&i!==","&&n.push({name:i,type:o})}else if(s.type==="parameter_declaration"||s.type==="variadic_parameter_declaration"){let i=s.type==="variadic_parameter_declaration",o=[],a=null;for(let r=0;r<s.childCount;r++){let l=s.child(r);!l||l.type===","||l.type==="..."||(l.type==="identifier"?o.push(l.text):a=l)}if(a){let r=I((i?"...":"")+a.text.replace(/\s+/g,""));if(o.length===0)n.push({name:"_",type:r});else for(let l of o)n.push({name:l,type:r})}else if(o.length>1){let r=o.pop(),l=I((i?"...":"")+r);for(let p of o)n.push({name:p,type:l})}else o.length===1&&n.push({name:o[0],type:"any"})}}}}function He(e){for(let n=0;n<e.childCount;n++){let t=e.child(n);if(t&&(t.type==="statement_block"||t.type==="block"||t.type==="compound_statement"))return t}return null}function _e(e){let n=[];function t(i){let o="",a=[],r=i.child(1)||i.child(0);if(r){if(r.type==="identifier")o=r.text;else if(r.type==="call_expression"){let l=r.child(0);o=l?l.text:"";let p=r.child(1);if(p)for(let f=0;f<p.childCount;f++){let c=p.child(f);if(c){if(c.type==="string"||c.type==="string_fragment"||c.type==="number"||c.type==="identifier"){let d=c.text.replace(/^['"]|['"]$/g,"").trim();d&&d!=="("&&d!==")"&&d!==","&&a.push(d)}else if(c.type==="object"||c.type==="object_expression")for(let d=0;d<c.childCount;d++){let h=c.child(d);if(h&&(h.type==="pair"||h.type==="property_assignment")){let y=h.child(0),v=h.child(2)||h.child(1),g=y?.text||"";if(!g)continue;if(v?.type==="string"||v?.type==="number"||v?.type==="identifier"){let S=v.text.replace(/^['"]|['"]$/g,"").trim();a.push(`${g}:${S}`)}else if(v?.type==="array"||v?.type==="array_expression"){let S=[];for(let $=0;$<v.childCount;$++){let m=v.child($);if(m){if(m.type==="identifier")S.push(m.text);else if(m.type==="call_expression"){let u=m.child(0)?.text||"",w=(m.child(1)?.text||"").match(/name:\s*['"]([^'"]+)['"]/);w?S.push(`${u.split(".").pop()}(${w[1]})`):S.push(u.split(".").pop()||u)}}}S.length>0&&a.push(`${g}:[${S.slice(0,8).join(",")}${S.length>8?`+${S.length-8}`:""}]`)}}}}}}else{let p=i.text.replace(/^@/,"").trim().match(/^([a-zA-Z0-9_$]+)(?:\((.*)\))?/);p&&(o=p[1],p[2]&&p[2].split(",").map(f=>f.trim().replace(/^['"]|['"]$/g,"")).filter(Boolean).forEach(f=>a.push(f)))}o&&o!=="@"&&n.push({name:o,args:a.length>0?a:void 0})}}for(let i=0;i<e.childCount;i++){let o=e.child(i);o&&o.type==="decorator"&&t(o)}if(e.parent&&e.parent.type==="export_statement")for(let i=0;i<e.parent.childCount;i++){let o=e.parent.child(i);o&&o.type==="decorator"&&t(o)}let s=e.previousSibling;for(;s&&(s.type==="decorator"||s.type==="comment");)s.type==="decorator"&&t(s),s=s.previousSibling;for(let i=0;i<e.childCount;i++){let o=e.child(i);if(o&&(o.type==="formal_parameters"||o.type==="parameters"))for(let a=0;a<o.childCount;a++){let r=o.child(a);if(r)for(let l=0;l<r.childCount;l++){let p=r.child(l);p&&p.type==="decorator"&&t(p)}}}return n}function Ke(e,n){let t=new Set,s=new Set,i=new Set,o=new Set,a=new Set;function r(l){let p=l.type;if(p==="call_expression"||p==="call"){let f=jt(l);f&&!n.has(f)&&t.add(f);let c=l.child(1);if(c&&c.type==="arguments")for(let d=0;d<c.childCount;d++){let h=c.child(d);if(h&&(h.type==="string"||h.type==="string_fragment")){let y=h.text.replace(/^['"]|['"]$/g,"").trim();y&&y.length<=35&&/^[a-zA-Z0-9_\-:]+$/.test(y)&&o.size<12&&o.add(y)}}}if(p==="if_statement"){let f=l.child(1);f&&_t(f,s)}if(p==="string"||p==="string_fragment"){let f=l.text.replace(/^['"]|['"]$/g,"").trim();if(f&&f.length>=2&&f.length<=40){let c=l.parent;for(;c&&(c.type==="ternary_expression"||c.type==="conditional_expression"||c.type==="parenthesized_expression"||c.type==="string");)c=c.parent;if(c)if(c.type==="binary_expression")o.size<16&&o.add(f);else if(c.type==="pair"){let d=c.child(0)?.text;d&&/^(status|stage|state|code|category|mode|kind|type|reason|error|action|event|errorCode|syncStatus)$/i.test(d)&&o.size<16&&o.add(f)}else c.type==="switch_case"&&o.size<16&&o.add(f)}}if(p==="return_statement"){let f=l.child(1);if(f&&f.type==="object"){let c=f.text.replace(/\s+/g,"");c.length<=65&&a.size<4&&a.add(c)}}if(p==="throw_statement"||p==="raise_statement"){let f=Tt(l);f&&i.add(f)}for(let f=0;f<l.childCount;f++){let c=l.child(f);c&&r(c)}}return r(e),{validates:Array.from(s),calls:Array.from(t),throws:Array.from(i),states:Array.from(o),returns:Array.from(a)}}function jt(e){let n=e.child(0);if(!n)return null;if(n.type==="identifier")return n.text;if(n.type==="member_expression"||n.type==="selector_expression"||n.type==="attribute"||n.type==="field_expression"){let s=(n.childForFieldName("property")||n.child(n.childCount-1))?.text;if(!s||new Set(["where","andWhere","orWhere","set","orderBy","addOrderBy","limit","offset","select","addSelect","groupBy","addGroupBy","having","andHaving","then","catch","finally"]).has(s))return null;let o=n.childForFieldName("object")||n.child(0);for(;o&&o.type==="call_expression";){let r=o.child(0);if(r&&(r.type==="member_expression"||r.type==="selector_expression"))o=r.childForFieldName("object")||r.child(0);else break}let a=o?o.text.replace(/^this\./,"").replace(/\s+/g,""):"";return a&&!a.includes("(")&&!a.includes("[")?`${a}.${s}`:s}return null}function _t(e,n){let s=e.text.matchAll(/(?:!|not\s+)([a-zA-Z0-9_$]+)\s*\(/g);for(let i of s)n.add(i[1])}function Tt(e){let t=e.text.match(/(?:throw\s+(?:new\s+)?|raise\s+)([a-zA-Z0-9_$]+)/);return t?t[1]:null}function Pt(e,n,t){let s="",i,o=[],a=[];for(let l=0;l<e.childCount;l++){let p=e.child(l);if(p){if((p.type==="type_identifier"||p.type==="identifier"||p.type==="name")&&(s||(s=p.text)),p.type==="class_heritage"||p.type==="extends_clause"){let f=p.text.match(/extends\s+([a-zA-Z0-9_$]+)/);f&&(i=f[1]);let c=p.text.match(/implements\s+(.+)/);c&&c[1].split(",").forEach(d=>o.push(d.trim()))}if(p.type==="class_body"||p.type==="statement_block"||p.type==="declaration_list"||p.type==="block")for(let f=0;f<p.childCount;f++){let c=p.child(f);if(c&&(c.type==="method_definition"||c.type==="function_item"||c.type==="function_definition")){let d=Ue(c,n,t);d&&a.push(d)}}}}if(!s)return null;let r=_e(e);return{kind:"class",name:s,lines:{start:e.startPosition.row+1,end:e.endPosition.row+1},extends:i,implements:o.length>0?o:void 0,methods:a,decorators:r.length>0?r:void 0}}function Ft(e,n,t){if(t==="go"){let s=[...e.matchAll(/func\s+(Test[A-Za-z0-9_]+)\s*\(/g)].map(i=>i[1]);for(let i of s){let o=e.indexOf("func "+i);if(o===-1)continue;let a=e.indexOf(`
3
3
  func Test`,o+1),r=e.slice(o,a!==-1?a:void 0);for(let l of n){let p=l.name.split(".").pop();(r.includes(`.${p}(`)||r.includes(`${p}(`))&&(l.tests||(l.tests=[]),!l.tests.includes(i)&&l.tests.length<5&&l.tests.push(i))}}}else{let s=[...e.matchAll(/(?:it|test)\s*\(\s*['"]([^'"]+)['"]/g)].map(i=>i[1]);for(let i of s)for(let o of n){let a=o.name.split(".").pop();if(e.includes(a)){o.tests||(o.tests=[]);let r=i.slice(0,35);!o.tests.includes(r)&&o.tests.length<5&&o.tests.push(r)}}}}import Y from"fs";import O from"path";import Et from"ignore";var It=new Set(["node_modules",".git",".next","dist","build","out","coverage",".turbo",".cache",".glyphier"]);async function pe(e,n={}){let t=O.resolve(n.rootPath||e),s=n.depth??1/0,i=n.config||W,o=Et();o.add(i.ignore),n.ignore&&n.ignore.length>0&&o.add(n.ignore);let a=O.join(t,".gitignore");if(Y.existsSync(a))try{let l=Y.readFileSync(a,"utf-8");o.add(l)}catch{}async function r(l,p){let f=O.relative(t,l)||".",c=O.basename(l)||O.basename(t),d=Y.statSync(l);if(!d.isDirectory()){let y=Je(l,f,d);return{name:c,type:"file",metadata:y,extension:O.extname(c)}}let h=[];if(p<s){let y=[];try{y=Y.readdirSync(l)}catch{y=[]}y.sort();for(let v of y){if(It.has(v))continue;let g=O.join(l,v),S=O.relative(t,g).replace(/\\/g,"/");if(!(o.ignores(S)||o.ignores(`${S}/`)))try{let $=Y.statSync(g);if($.isDirectory())h.push(await r(g,p+1));else if($.size<=i.maxFileSize){let m=Je(g,S,$);h.push({name:v,type:"file",metadata:m,extension:O.extname(v)})}}catch{}}}return{name:c,type:"directory",children:h}}return r(O.resolve(e),0)}function Je(e,n,t){let s=ie.get(e,t.mtimeMs);if(s)return{...s.metadata,path:n};let i=0,o=0,a=K(e)||"unknown";try{let r=Y.readFileSync(e,"utf-8");i=r.split(`
4
4
  `).length;let p=r.match(/(?:function\s+[a-zA-Z0-9_$]+|def\s+[a-zA-Z0-9_$]+|fn\s+[a-zA-Z0-9_$]+|\b[a-zA-Z0-9_$]+\s*:\s*\([^)]*\)\s*=>)/g);o=p?p.length:0}catch{}return{path:n,language:a,lineCount:i,functionCount:o,mtime:t.mtimeMs,sizeBytes:t.size}}function Ze(e,n,t){let s={};typeof t=="string"?s={kind:t}:t&&(s=t);let i=[];Array.isArray(e)?i=e:e instanceof Map?i=Array.from(e.values()):"files"in e&&e.files instanceof Map&&(i=Array.from(e.files.values()));let o=n.toLowerCase(),a=s.kind,r=[];for(let l of i){let p=l.module,f=l.metadata.path;for(let c of p.functions){if((!a||a==="fn")&&c.name.toLowerCase().includes(o)&&r.push({file:f,symbol:c.name,kind:"fn",lines:c.lines,context:`(fn ${c.name} [...] -> ${c.returnType})`}),(!a||a==="calls")&&c.calls)for(let d of c.calls){let h=typeof d=="string"?d:d.name;h.toLowerCase().includes(o)&&r.push({file:f,symbol:`${c.name} -> ${h}`,kind:"calls",lines:c.lines,context:`calls ${h}`})}if(!a||a==="fn"||a==="calls"){if(c.decorators)for(let d of c.decorators)(d.name.toLowerCase().includes(o)||d.args?.some(h=>h.toLowerCase().includes(o)))&&r.push({file:f,symbol:`@${d.name} -> ${c.name}`,kind:"fn",lines:c.lines,context:`@${d.name}(${d.args?.join(",")||""})`});if(c.states)for(let d of c.states)d.toLowerCase().includes(o)&&r.push({file:f,symbol:`${c.name} :${d}`,kind:"fn",lines:c.lines,context:`(state :${d})`})}}for(let c of p.classes){if((!a||a==="type")&&(c.name.toLowerCase().includes(o)&&r.push({file:f,symbol:c.name,kind:"type",lines:c.lines,context:`class ${c.name}`}),c.decorators))for(let d of c.decorators)(d.name.toLowerCase().includes(o)||d.args?.some(h=>h.toLowerCase().includes(o)))&&r.push({file:f,symbol:`@${d.name} -> ${c.name}`,kind:"type",lines:c.lines,context:`@${d.name}(${d.args?.join(",")||""}) class ${c.name}`});for(let d of c.methods){if((!a||a==="fn")&&d.name.toLowerCase().includes(o)&&r.push({file:f,symbol:`${c.name}.${d.name}`,kind:"fn",lines:d.lines,context:`method ${c.name}.${d.name}`}),(!a||a==="calls")&&d.calls)for(let h of d.calls){let y=typeof h=="string"?h:h.name;y.toLowerCase().includes(o)&&r.push({file:f,symbol:`${c.name}.${d.name} -> ${y}`,kind:"calls",lines:d.lines,context:`calls ${y}`})}if(!a||a==="fn"||a==="calls"){if(d.decorators)for(let h of d.decorators)(h.name.toLowerCase().includes(o)||h.args?.some(y=>y.toLowerCase().includes(o)))&&r.push({file:f,symbol:`@${h.name} -> ${c.name}.${d.name}`,kind:"fn",lines:d.lines,context:`@${h.name}(${h.args?.join(",")||""})`});if(d.states)for(let h of d.states)h.toLowerCase().includes(o)&&r.push({file:f,symbol:`${c.name}.${d.name} :${h}`,kind:"fn",lines:d.lines,context:`(state :${h})`})}}}if(!a||a==="type"||a==="var"||a==="all")for(let c of p.types)c.name.toLowerCase().includes(o)&&r.push({file:f,symbol:c.name,kind:c.values?"var":"type",lines:c.lines,context:c.values?`var ${c.name} = ${c.values[0]}`:`type ${c.name}`});if(!a||a==="use"||a==="all")for(let c of p.imports)(c.path.toLowerCase().includes(o)||c.symbols.some(d=>d.toLowerCase().includes(o)))&&r.push({file:f,symbol:c.path,kind:"use",lines:{start:1,end:1},context:`(use ${c.path}:${c.symbols.join(",")})`});if(!a||a==="route"||a==="all"){let c=f.replace(/\\/g,"/"),d=c.lastIndexOf("app/");if(d!==-1&&(c.endsWith("/route.ts")||c.endsWith("/route.js")||c.endsWith("/page.tsx")||c.endsWith("/page.jsx"))){let h=c.slice(d+3).replace(/\/route\.(ts|js|mjs)$/,"").replace(/\/page\.(tsx|jsx|js|ts)$/,""),y=h.startsWith("/")?h:"/"+h;if(y.toLowerCase().includes(o)||c.toLowerCase().includes(o)||o.includes(y.toLowerCase())){let v=p.functions.map(g=>g.name).filter(g=>["GET","POST","PUT","DELETE","PATCH"].includes(g));r.push({file:f,symbol:y,kind:"route",lines:{start:1,end:l.metadata?.lineCount||1},context:`(route ${y} [${v.join(", ")||"GET"}])`})}}}}return r}function En(e,n){if(n.length===0)return`No matches found for "${e}".`;let t=[`Found ${n.length} matches for "${e}":`];for(let s of n)t.push(` ${s.file}:${s.symbol} :L${s.lines.start}-${s.lines.end}`);return t.join(`
@@ -1 +1 @@
1
- import{a,b,c}from"./chunk-FOZKI4M3.js";import"./chunk-NIXOREHQ.js";export{b as generateSanitizedSupportBundle,c as handleDoctor,a as runDiagnostics};
1
+ import{a,b,c}from"./chunk-Z5QGW2AB.js";import"./chunk-XT5A5MM6.js";export{b as generateSanitizedSupportBundle,c as handleDoctor,a as runDiagnostics};
package/dist/index.d.ts CHANGED
@@ -991,7 +991,7 @@ declare function buildKnowledgeGraph(storage: GlyphierStorage): KnowledgeGraph;
991
991
  * ARTIFACT_SCHEMA_VERSION changes only when durable artifacts cease to
992
992
  * round-trip with the prior release.
993
993
  */
994
- declare const PRODUCT_VERSION: "0.1.0";
994
+ declare const PRODUCT_VERSION: "0.1.1";
995
995
  declare const ARTIFACT_SCHEMA_VERSION: "0.1";
996
996
 
997
997
  declare const SourceAuthoritySchema: z.ZodEnum<{
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{a as Se,b as Ge,c as Me,d as Oe,e as ze,f as Ke,g as Be,h as qe,i as y,j as Ue,k as He,l as Qe,m as We,n as Je}from"./chunk-MCPBJALB.js";import{A as de,B as ge,C as fe,D as ue,E as xe,F as ye,G as be,H as he,I as Ee,J as ke,K as Ie,L as we,M as Ce,N as Ae,O as ve,P as Fe,Q as Re,R as _e,S as Le,T as Te,U as $e,V as Pe,a as L,b as T,c as $,d as G,e as M,f as U,g as H,h as Q,i as W,j as J,k as V,l as X,m as Y,n as Z,o as ee,p as te,q as re,r as ne,s as ie,t as se,u as oe,v as ae,w as le,x as pe,y as ce,z as me}from"./chunk-VOGFZYFC.js";import{a as je,b as Ne}from"./chunk-QYSMWA6Y.js";import{a as P,b as D,c as O,d as z,e as K,f as B,g as q,h as De,i as g}from"./chunk-NIXOREHQ.js";function Xe(e){switch(e){case"calls":return"called_by";case"called_by":return"calls";case"imports":return"imported_by";case"imported_by":return"imports";case"tests":return"tested_by";case"tested_by":return"tests";default:return null}}import w from"path";var f=class{name="nextjs";detect(r){return r.some(n=>{let t=n.replace(/\\/g,"/");return t.includes("next.config.")||t.includes("/app/")||t.startsWith("app/")||t.includes("/pages/")})}classifyFileRole(r){let n=r.replace(/\\/g,"/"),t=w.basename(n);return/^page\.(tsx|jsx|js)$/.test(t)?"page":/^layout\.(tsx|jsx|js)$/.test(t)?"layout":/^route\.(ts|js)$/.test(t)?"route":/^middleware\.(ts|js)$/.test(t)?"middleware":/^loading\.(tsx|jsx|js)$/.test(t)?"loading":/^error\.(tsx|jsx|js)$/.test(t)?"error":null}enrichSymbol(r){let n=this.classifyFileRole(r.filePath);if(!n)return null;if(n==="route"){let t=r.name.toUpperCase();if(["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS"].includes(t)){let i=r.filePath.replace(/\\/g,"/"),s=i.indexOf("app/"),o="/";return s!==-1&&(o="/"+i.slice(s+4).replace(/\/route\.[a-z]+$/,"")),{framework:"nextjs",role:"route",method:t,endpoint:o,description:`Next.js API route handler: ${t} ${o}`}}}return n==="page"?{framework:"nextjs",role:"page",description:`Next.js page component: ${r.name}`}:null}};var x=class{adapters=[];constructor(){this.register(new f)}register(r){this.adapters.push(r)}detectFrameworks(r){return this.adapters.filter(n=>n.detect(r))}getAdapter(r){return this.adapters.find(n=>n.name===r)}getAll(){return[...this.adapters]}},st=new x;import C from"path";function pt(e){let r=e.getAllFiles(),n=new Map;for(let t of r){if(t.classification==="TEST"||t.classification==="BUILD_OUTPUT"||t.classification==="VENDOR")continue;let i=t.path.replace(/\\/g,"/").split("/"),s="core";i.length>2&&(i[0]==="src"||i[0]==="packages"||i[0]==="pkg")?s=i[1]:i.length>1&&(s=i[0]);let o=n.get(s);o||(o={id:`domain-${s}`,kind:"domain",name:s.charAt(0).toUpperCase()+s.slice(1),description:`Domain subsystem: ${s}`,symbols:[],routes:[],dependencies:[],tests:[]},n.set(s,o));let u=e.getSymbolsByFile(t.path);for(let d of u)(d.kind==="fn"||d.kind==="method"||d.kind==="class")&&o.symbols.push(d.qualifiedName||d.name),(d.kind==="route"||d.name.startsWith("GET_")||d.name.startsWith("POST_"))&&o.routes?.push(`${d.name} (${t.path})`)}for(let t of r)if(t.classification==="TEST"){let i=C.basename(t.path).replace(/\.(test|spec)\.[^.]+$/,"");for(let[s,o]of n.entries())(t.path.includes(s)||o.symbols.some(u=>u.toLowerCase().includes(i.toLowerCase())))&&o.tests?.push(t.path)}return{entities:Array.from(n.values())}}import{createHash as A}from"crypto";import{z as a}from"zod";var b=a.string().regex(/^ssym_[a-f0-9]{64}$/),v=a.string().regex(/^lent_[a-f0-9]{64}$/),ut=a.object({claimId:a.string().regex(/^[a-f0-9]{64}$/),fromSnapshotId:a.string().regex(/^[a-f0-9]{64}$/),toSnapshotId:a.string().regex(/^[a-f0-9]{64}$/),fromSymbolId:b,toSymbolId:b,logicalEntityId:v,evidenceDigests:a.array(a.string().regex(/^[a-f0-9]{64}$/)).min(1),replayAlgorithm:a.string().min(1),replayInputDigest:a.string().regex(/^[a-f0-9]{64}$/),confidence:a.number().min(0).max(1),issuedAt:a.string().datetime(),schemaVersion:a.literal("0.1")});function xt(e,r=.9,n=.05){let t=[...e].filter(s=>s.evidenceDigests.length>0).sort((s,o)=>o.score-s.score),i=t[0];return i?i.score<r?{outcome:"abstained",reason:"insufficient_proof"}:t[1]&&i.score-t[1].score<n?{outcome:"abstained",reason:"ambiguous"}:{outcome:"mapped",winner:i}:{outcome:"abstained",reason:"no_candidate"}}function yt(e,r,n){return`ssym_${h([e,r,n])}`}function bt(e,r){return`lent_${h([e,r])}`}function h(e){return A("sha256").update(e.join("\0")).digest("hex")}import{z as p}from"zod";var S=p.enum(["bash","c","c_sharp","cpp","elixir","elm","go","java","javascript","kotlin","lua","php","python","ruby","rust","swift","tsx","typescript","zig"]),E=p.enum(["parse","symbols","imports_exports","call_edges","semantic_search","slice","impact","snapshot","diff","freshness","evidence","identity"]),F=p.enum(["unqualified","provisional","calibrated","high_risk_qualified"]),kt=p.object({language:S,framework:p.string().min(1).default("generic"),taskClass:p.enum(["bug_fix","refactor","feature","review","investigation"]),riskTier:p.enum(["low","medium","high","critical"]),compilerFingerprint:p.string().regex(/^[a-f0-9]{64}$/),supportedCapabilities:p.array(E).min(1),fixtures:p.number().int().nonnegative(),falseSufficiencyEvents:p.number().int().nonnegative(),calibration:F}),It=S.options,R=E.options;function _(e,r){return e===0?1:r===0?3/e:Math.min(1,(r+3)/e)}function wt(e){let r=new Set(e.supportedCapabilities);return R.some(n=>!r.has(n))||e.calibration==="unqualified"?!1:e.calibration==="provisional"?e.fixtures>=30:e.calibration==="calibrated"?e.fixtures>=100:e.fixtures>=150&&_(e.fixtures,e.falseSufficiencyEvents)<=.02}import{createHmac as k,timingSafeEqual as j}from"crypto";import{z as l}from"zod";var N=l.enum(["local","team","enterprise"]),_t=l.object({eventId:l.string().regex(/^[a-f0-9]{64}$/),tenantId:l.string().min(1),repositoryId:l.string().min(1),principalId:l.string().min(1),scope:N,sensitivity:l.enum(["public","internal","restricted"]),receipt:y,invalidatesReceiptIds:l.array(l.string().regex(/^[a-f0-9]{64}$/)),expiresAt:l.string().datetime().nullable(),signature:l.string().regex(/^[a-f0-9]{64}$/),schemaVersion:l.literal("0.1")});function jt(e,r){return{...e,signature:k("sha256",r).update(I(e)).digest("hex")}}function Nt(e,r,n){if(e.tenantId!==n||e.scope==="local")return!1;let{signature:t,...i}=e,s=k("sha256",r).update(I(i)).digest("hex");return j(Buffer.from(t,"hex"),Buffer.from(s,"hex"))}function I(e){return JSON.stringify(e,(r,n)=>n&&typeof n=="object"&&!Array.isArray(n)?Object.fromEntries(Object.entries(n).sort(([t],[i])=>t.localeCompare(i))):n)}export{g as ARTIFACT_SCHEMA_VERSION,Oe as AnalysisSnapshotSchema,F as CalibrationStateSchema,E as CapabilitySchema,Be as ContextArtifactSchema,Le as ContextLedger,L as DEFAULT_CONFIG,Ue as DecisionClassSchema,He as DecisionPacketSchema,O as EXTENSION_TO_LANGUAGE,ze as EvidenceAnchorSchema,Ke as EvidenceRefSchema,x as FrameworkRegistry,S as GlyphierLanguageSchema,P as GlyphierStorage,ut as IdentityMappingClaimSchema,kt as LanguageCapabilityProfileSchema,v as LogicalEntityIdSchema,G as MtimeCache,f as NextJsAdapter,De as PRODUCT_VERSION,It as REGISTERED_LANGUAGE_CATALOG,R as REQUIRED_CAPABILITIES,qe as ReceiptKindSchema,y as ReceiptSchema,Me as SnapshotFreshnessSchema,b as SnapshotSymbolIdSchema,Ge as SourceAuthoritySchema,_t as SyncEnvelopeSchema,N as SyncScopeSchema,Q as abbreviateType,te as analyzeImpact,de as analyzeModuleGraph,ye as applyAstPatch,We as assertJevEligible,we as assertPaidLicense,Je as buildAnalysisSnapshot,pt as buildKnowledgeGraph,J as buildTree,wt as canPromoteCalibration,Ae as classifyFile,xe as clearSession,fe as computeProgramSlice,ue as computeSessionDelta,be as computeStats,ve as computeSymbolId,bt as createLogicalEntityId,yt as createSnapshotSymbolId,K as detectLanguage,Qe as digestCanonical,Fe as extractSymbolsFromIR,$e as extractTaskKeywords,$ as findProjectRoot,ae as formatCheckSExpr,pe as formatDeltaSExpr,oe as formatDiffSExpr,ge as formatGraphSExpr,se as formatImpactSExpr,Se as formatJSON,ie as formatSExpr,X as formatSearchResults,le as formatSliceSExpr,he as formatStatsSExpr,Ne as formatTraceSExpr,ne as formatTrie,W as generateIR,ke as getApiKey,Te as getContextLedger,Xe as getInverseEdgeKind,Ee as getMachineFingerprint,D as getStorage,q as getSupportedLanguages,M as globalCache,st as globalFrameworkRegistry,_e as indexProject,z as initTreeSitter,T as loadConfig,B as loadLanguage,Pe as optimizeContext,Y as parseFile,H as parseFileTree,Z as parseProject,U as parseSource,me as preflightCheck,ce as projectBudget,ee as readRaw,Ce as reportTokenTelemetry,xt as resolveIdentity,Re as resolveModuleEdges,V as searchIR,re as semanticDiff,jt as signSyncEnvelope,je as traceSymbol,_ as upperFalseSufficiencyBound,Ie as verifyLicense,Nt as verifySyncEnvelope};
1
+ import{a as Se,b as Ge,c as Me,d as Oe,e as ze,f as Ke,g as Be,h as qe,i as y,j as Ue,k as He,l as Qe,m as We,n as Je}from"./chunk-DSTHXYLQ.js";import{A as de,B as ge,C as fe,D as ue,E as xe,F as ye,G as be,H as he,I as Ee,J as ke,K as Ie,L as we,M as Ce,N as Ae,O as ve,P as Fe,Q as Re,R as _e,S as Le,T as Te,U as $e,V as Pe,a as L,b as T,c as $,d as G,e as M,f as U,g as H,h as Q,i as W,j as J,k as V,l as X,m as Y,n as Z,o as ee,p as te,q as re,r as ne,s as ie,t as se,u as oe,v as ae,w as le,x as pe,y as ce,z as me}from"./chunk-ZOMI4NSK.js";import{a as je,b as Ne}from"./chunk-QYSMWA6Y.js";import{a as P,b as D,c as O,d as z,e as K,f as B,g as q,h as De,i as g}from"./chunk-XT5A5MM6.js";function Xe(e){switch(e){case"calls":return"called_by";case"called_by":return"calls";case"imports":return"imported_by";case"imported_by":return"imports";case"tests":return"tested_by";case"tested_by":return"tests";default:return null}}import w from"path";var f=class{name="nextjs";detect(r){return r.some(n=>{let t=n.replace(/\\/g,"/");return t.includes("next.config.")||t.includes("/app/")||t.startsWith("app/")||t.includes("/pages/")})}classifyFileRole(r){let n=r.replace(/\\/g,"/"),t=w.basename(n);return/^page\.(tsx|jsx|js)$/.test(t)?"page":/^layout\.(tsx|jsx|js)$/.test(t)?"layout":/^route\.(ts|js)$/.test(t)?"route":/^middleware\.(ts|js)$/.test(t)?"middleware":/^loading\.(tsx|jsx|js)$/.test(t)?"loading":/^error\.(tsx|jsx|js)$/.test(t)?"error":null}enrichSymbol(r){let n=this.classifyFileRole(r.filePath);if(!n)return null;if(n==="route"){let t=r.name.toUpperCase();if(["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS"].includes(t)){let i=r.filePath.replace(/\\/g,"/"),s=i.indexOf("app/"),o="/";return s!==-1&&(o="/"+i.slice(s+4).replace(/\/route\.[a-z]+$/,"")),{framework:"nextjs",role:"route",method:t,endpoint:o,description:`Next.js API route handler: ${t} ${o}`}}}return n==="page"?{framework:"nextjs",role:"page",description:`Next.js page component: ${r.name}`}:null}};var x=class{adapters=[];constructor(){this.register(new f)}register(r){this.adapters.push(r)}detectFrameworks(r){return this.adapters.filter(n=>n.detect(r))}getAdapter(r){return this.adapters.find(n=>n.name===r)}getAll(){return[...this.adapters]}},st=new x;import C from"path";function pt(e){let r=e.getAllFiles(),n=new Map;for(let t of r){if(t.classification==="TEST"||t.classification==="BUILD_OUTPUT"||t.classification==="VENDOR")continue;let i=t.path.replace(/\\/g,"/").split("/"),s="core";i.length>2&&(i[0]==="src"||i[0]==="packages"||i[0]==="pkg")?s=i[1]:i.length>1&&(s=i[0]);let o=n.get(s);o||(o={id:`domain-${s}`,kind:"domain",name:s.charAt(0).toUpperCase()+s.slice(1),description:`Domain subsystem: ${s}`,symbols:[],routes:[],dependencies:[],tests:[]},n.set(s,o));let u=e.getSymbolsByFile(t.path);for(let d of u)(d.kind==="fn"||d.kind==="method"||d.kind==="class")&&o.symbols.push(d.qualifiedName||d.name),(d.kind==="route"||d.name.startsWith("GET_")||d.name.startsWith("POST_"))&&o.routes?.push(`${d.name} (${t.path})`)}for(let t of r)if(t.classification==="TEST"){let i=C.basename(t.path).replace(/\.(test|spec)\.[^.]+$/,"");for(let[s,o]of n.entries())(t.path.includes(s)||o.symbols.some(u=>u.toLowerCase().includes(i.toLowerCase())))&&o.tests?.push(t.path)}return{entities:Array.from(n.values())}}import{createHash as A}from"crypto";import{z as a}from"zod";var b=a.string().regex(/^ssym_[a-f0-9]{64}$/),v=a.string().regex(/^lent_[a-f0-9]{64}$/),ut=a.object({claimId:a.string().regex(/^[a-f0-9]{64}$/),fromSnapshotId:a.string().regex(/^[a-f0-9]{64}$/),toSnapshotId:a.string().regex(/^[a-f0-9]{64}$/),fromSymbolId:b,toSymbolId:b,logicalEntityId:v,evidenceDigests:a.array(a.string().regex(/^[a-f0-9]{64}$/)).min(1),replayAlgorithm:a.string().min(1),replayInputDigest:a.string().regex(/^[a-f0-9]{64}$/),confidence:a.number().min(0).max(1),issuedAt:a.string().datetime(),schemaVersion:a.literal("0.1")});function xt(e,r=.9,n=.05){let t=[...e].filter(s=>s.evidenceDigests.length>0).sort((s,o)=>o.score-s.score),i=t[0];return i?i.score<r?{outcome:"abstained",reason:"insufficient_proof"}:t[1]&&i.score-t[1].score<n?{outcome:"abstained",reason:"ambiguous"}:{outcome:"mapped",winner:i}:{outcome:"abstained",reason:"no_candidate"}}function yt(e,r,n){return`ssym_${h([e,r,n])}`}function bt(e,r){return`lent_${h([e,r])}`}function h(e){return A("sha256").update(e.join("\0")).digest("hex")}import{z as p}from"zod";var S=p.enum(["bash","c","c_sharp","cpp","elixir","elm","go","java","javascript","kotlin","lua","php","python","ruby","rust","swift","tsx","typescript","zig"]),E=p.enum(["parse","symbols","imports_exports","call_edges","semantic_search","slice","impact","snapshot","diff","freshness","evidence","identity"]),F=p.enum(["unqualified","provisional","calibrated","high_risk_qualified"]),kt=p.object({language:S,framework:p.string().min(1).default("generic"),taskClass:p.enum(["bug_fix","refactor","feature","review","investigation"]),riskTier:p.enum(["low","medium","high","critical"]),compilerFingerprint:p.string().regex(/^[a-f0-9]{64}$/),supportedCapabilities:p.array(E).min(1),fixtures:p.number().int().nonnegative(),falseSufficiencyEvents:p.number().int().nonnegative(),calibration:F}),It=S.options,R=E.options;function _(e,r){return e===0?1:r===0?3/e:Math.min(1,(r+3)/e)}function wt(e){let r=new Set(e.supportedCapabilities);return R.some(n=>!r.has(n))||e.calibration==="unqualified"?!1:e.calibration==="provisional"?e.fixtures>=30:e.calibration==="calibrated"?e.fixtures>=100:e.fixtures>=150&&_(e.fixtures,e.falseSufficiencyEvents)<=.02}import{createHmac as k,timingSafeEqual as j}from"crypto";import{z as l}from"zod";var N=l.enum(["local","team","enterprise"]),_t=l.object({eventId:l.string().regex(/^[a-f0-9]{64}$/),tenantId:l.string().min(1),repositoryId:l.string().min(1),principalId:l.string().min(1),scope:N,sensitivity:l.enum(["public","internal","restricted"]),receipt:y,invalidatesReceiptIds:l.array(l.string().regex(/^[a-f0-9]{64}$/)),expiresAt:l.string().datetime().nullable(),signature:l.string().regex(/^[a-f0-9]{64}$/),schemaVersion:l.literal("0.1")});function jt(e,r){return{...e,signature:k("sha256",r).update(I(e)).digest("hex")}}function Nt(e,r,n){if(e.tenantId!==n||e.scope==="local")return!1;let{signature:t,...i}=e,s=k("sha256",r).update(I(i)).digest("hex");return j(Buffer.from(t,"hex"),Buffer.from(s,"hex"))}function I(e){return JSON.stringify(e,(r,n)=>n&&typeof n=="object"&&!Array.isArray(n)?Object.fromEntries(Object.entries(n).sort(([t],[i])=>t.localeCompare(i))):n)}export{g as ARTIFACT_SCHEMA_VERSION,Oe as AnalysisSnapshotSchema,F as CalibrationStateSchema,E as CapabilitySchema,Be as ContextArtifactSchema,Le as ContextLedger,L as DEFAULT_CONFIG,Ue as DecisionClassSchema,He as DecisionPacketSchema,O as EXTENSION_TO_LANGUAGE,ze as EvidenceAnchorSchema,Ke as EvidenceRefSchema,x as FrameworkRegistry,S as GlyphierLanguageSchema,P as GlyphierStorage,ut as IdentityMappingClaimSchema,kt as LanguageCapabilityProfileSchema,v as LogicalEntityIdSchema,G as MtimeCache,f as NextJsAdapter,De as PRODUCT_VERSION,It as REGISTERED_LANGUAGE_CATALOG,R as REQUIRED_CAPABILITIES,qe as ReceiptKindSchema,y as ReceiptSchema,Me as SnapshotFreshnessSchema,b as SnapshotSymbolIdSchema,Ge as SourceAuthoritySchema,_t as SyncEnvelopeSchema,N as SyncScopeSchema,Q as abbreviateType,te as analyzeImpact,de as analyzeModuleGraph,ye as applyAstPatch,We as assertJevEligible,we as assertPaidLicense,Je as buildAnalysisSnapshot,pt as buildKnowledgeGraph,J as buildTree,wt as canPromoteCalibration,Ae as classifyFile,xe as clearSession,fe as computeProgramSlice,ue as computeSessionDelta,be as computeStats,ve as computeSymbolId,bt as createLogicalEntityId,yt as createSnapshotSymbolId,K as detectLanguage,Qe as digestCanonical,Fe as extractSymbolsFromIR,$e as extractTaskKeywords,$ as findProjectRoot,ae as formatCheckSExpr,pe as formatDeltaSExpr,oe as formatDiffSExpr,ge as formatGraphSExpr,se as formatImpactSExpr,Se as formatJSON,ie as formatSExpr,X as formatSearchResults,le as formatSliceSExpr,he as formatStatsSExpr,Ne as formatTraceSExpr,ne as formatTrie,W as generateIR,ke as getApiKey,Te as getContextLedger,Xe as getInverseEdgeKind,Ee as getMachineFingerprint,D as getStorage,q as getSupportedLanguages,M as globalCache,st as globalFrameworkRegistry,_e as indexProject,z as initTreeSitter,T as loadConfig,B as loadLanguage,Pe as optimizeContext,Y as parseFile,H as parseFileTree,Z as parseProject,U as parseSource,me as preflightCheck,ce as projectBudget,ee as readRaw,Ce as reportTokenTelemetry,xt as resolveIdentity,Re as resolveModuleEdges,V as searchIR,re as semanticDiff,jt as signSyncEnvelope,je as traceSymbol,_ as upperFalseSufficiencyBound,Ie as verifyLicense,Nt as verifySyncEnvelope};
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{c as r}from"../chunk-BJ2IE33Q.js";import"../chunk-VOGFZYFC.js";import"../chunk-QYSMWA6Y.js";import"../chunk-H6T36TY5.js";import"../chunk-NIXOREHQ.js";r().catch(e=>{console.error("[glyphier-mcp] Fatal error:",e),process.exit(1)});
2
+ import{c as r}from"../chunk-4HETYC63.js";import"../chunk-ZOMI4NSK.js";import"../chunk-QYSMWA6Y.js";import"../chunk-H6T36TY5.js";import"../chunk-XT5A5MM6.js";r().catch(e=>{console.error("[glyphier-mcp] Fatal error:",e),process.exit(1)});
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@glyphier/cli",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Glyphier 0.1: evidence-governed semantic context for AI engineering agents.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
7
7
  "types": "dist/index.d.ts",
8
8
  "bin": {
9
9
  "glyphier": "dist/bin/glyphier.js",
10
+ "cli": "dist/bin/glyphier.js",
10
11
  "glyphier-mcp": "dist/mcp/glyphier-server.js"
11
12
  },
12
13
  "type": "module",