agentix-cli 0.45.1 → 0.46.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/apps/mac-voice/Sources/AgentXVoice/Speech.swift +7 -5
- package/apps/mac-voice/Sources/AgentXVoice/main.swift +9 -2
- package/dist/{agent-YC3VJVPK.js → agent-LI3AZQBC.js} +2 -2
- package/dist/{board-dashboard-U5YP4HWE.js → board-dashboard-5JTHHIFU.js} +3 -3
- package/dist/{board-dashboard-U5YP4HWE.js.map → board-dashboard-5JTHHIFU.js.map} +1 -1
- package/dist/chunk-7L6M3P2N.js +13 -0
- package/dist/chunk-7L6M3P2N.js.map +1 -0
- package/dist/chunk-CTCOWVNL.js +241 -0
- package/dist/chunk-CTCOWVNL.js.map +1 -0
- package/dist/chunk-DP7RTNDM.js +24 -0
- package/dist/chunk-DP7RTNDM.js.map +1 -0
- package/dist/{chunk-SAFAI4AV.js → chunk-E6EW42EA.js} +2 -2
- package/dist/chunk-FRHSQVFN.js +3 -0
- package/dist/chunk-FRHSQVFN.js.map +1 -0
- package/dist/chunk-GAUQOIEE.js +160 -0
- package/dist/chunk-GAUQOIEE.js.map +1 -0
- package/dist/{chunk-MDAC3PKR.js → chunk-IMAAMJ74.js} +160 -399
- package/dist/chunk-IMAAMJ74.js.map +1 -0
- package/dist/{chunk-KZYNQRQQ.js → chunk-JTOKOQHQ.js} +130 -128
- package/dist/chunk-JTOKOQHQ.js.map +1 -0
- package/dist/chunk-LGBBKLUO.js +7 -0
- package/dist/chunk-LGBBKLUO.js.map +1 -0
- package/dist/chunk-LUSFRS7R.js +25 -0
- package/dist/chunk-LUSFRS7R.js.map +1 -0
- package/dist/{chunk-3FIS6JD3.js → chunk-NVVXVUQU.js} +2 -2
- package/dist/chunk-RY2EULHS.js +2 -0
- package/dist/chunk-RY2EULHS.js.map +1 -0
- package/dist/chunk-SGFXE5FP.js +109 -0
- package/dist/chunk-SGFXE5FP.js.map +1 -0
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/doctor-7Z4VLXC4.js +2 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/program-X26USJYH.js +2 -0
- package/dist/promote-R6WVBMT7.js +2 -0
- package/dist/proposals-MWMEXRDW.js +2 -0
- package/dist/registry-STML35CV.js +2 -0
- package/dist/registry-STML35CV.js.map +1 -0
- package/dist/review-candidates-ROFQR6XE.js +4 -0
- package/dist/review-candidates-ROFQR6XE.js.map +1 -0
- package/dist/wiki-LGHX3WPI.js +2 -0
- package/dist/wiki-LGHX3WPI.js.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-3RKIBJG6.js +0 -182
- package/dist/chunk-3RKIBJG6.js.map +0 -1
- package/dist/chunk-KZYNQRQQ.js.map +0 -1
- package/dist/chunk-MDAC3PKR.js.map +0 -1
- package/dist/chunk-MTVRYTLL.js +0 -109
- package/dist/chunk-MTVRYTLL.js.map +0 -1
- package/dist/chunk-MX5GCR7Y.js +0 -36
- package/dist/chunk-MX5GCR7Y.js.map +0 -1
- package/dist/chunk-YQVR2HQS.js +0 -7
- package/dist/chunk-YQVR2HQS.js.map +0 -1
- package/dist/doctor-5HDW5F66.js +0 -2
- package/dist/program-WLPVWTAT.js +0 -2
- package/dist/registry-EESWAPMR.js +0 -2
- package/dist/review-candidates-BFAWNDOR.js +0 -4
- package/dist/review-candidates-BFAWNDOR.js.map +0 -1
- package/dist/wiki-5JORBO4G.js +0 -2
- /package/dist/{agent-YC3VJVPK.js.map → agent-LI3AZQBC.js.map} +0 -0
- /package/dist/{chunk-SAFAI4AV.js.map → chunk-E6EW42EA.js.map} +0 -0
- /package/dist/{chunk-3FIS6JD3.js.map → chunk-NVVXVUQU.js.map} +0 -0
- /package/dist/{doctor-5HDW5F66.js.map → doctor-7Z4VLXC4.js.map} +0 -0
- /package/dist/{program-WLPVWTAT.js.map → program-X26USJYH.js.map} +0 -0
- /package/dist/{registry-EESWAPMR.js.map → promote-R6WVBMT7.js.map} +0 -0
- /package/dist/{wiki-5JORBO4G.js.map → proposals-MWMEXRDW.js.map} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{b as Y,c as X,d as G,e as D,f as I,g as M,h as W}from"./chunk-7CVJ4JOE.js";import{
|
|
1
|
+
import{b as Y,c as X,d as G,e as D,f as I,g as M,h as W}from"./chunk-7CVJ4JOE.js";import{a as K}from"./chunk-RY2EULHS.js";import{l as B,o as q}from"./chunk-QJANPP4C.js";import{existsSync as _,readFileSync as re,writeFileSync as oe,appendFileSync as be,mkdirSync as ye}from"fs";import{dirname as ke,resolve as R}from"path";import{fileURLToPath as we}from"url";import{hostname as $e}from"os";import{spawn as Ae}from"child_process";q();import{existsSync as Q,readFileSync as V,writeFileSync as F,copyFileSync as he}from"fs";import{resolve as Z}from"path";function ee(t,e={}){let n=e.configPath||Z(process.cwd(),"agentx.json");if(!Q(n))throw new Error(`agentx.json not found at ${n}`);let a=JSON.parse(V(n,"utf-8")),r=t(a),o=typeof r=="string"?{summary:r}:r,c=JSON.stringify(a,null,2)+`
|
|
2
2
|
`,p=n+".tmp";F(p,c,"utf-8");try{JSON.parse(V(p,"utf-8"))}catch(d){throw new Error(`config did not round-trip cleanly: ${d.message}`)}let i;return e.skipBackup||(i=`${n}.bak.${Date.now()}`,he(n,i)),F(n,c,"utf-8"),e.skipReload||fe().catch(()=>{}),{summary:o.summary,payload:o.payload,backupPath:i}}function te(t,e={}){let n=e.configPath||Z(process.cwd(),"agentx.json");if(Q(n)&&!e.overwrite)throw new Error(`agentx.json already exists at ${n}. Pass overwrite=true to replace it.`);return F(n,JSON.stringify(t,null,2)+`
|
|
3
3
|
`,"utf-8"),{file:n}}async function fe(){try{let e=B().dashboard.daemonUrl?.replace(/\/+$/,"")||"http://127.0.0.1:18800";await fetch(`${e}/reload`,{method:"POST"}).catch(()=>null)}catch{}}function ne(t,e){let n=t.configExists?t.agentCount===0?"Add your first agent":"Add another agent":"Set up your team",a=`<header class="ax-topbar">
|
|
4
4
|
<div class="ax-topbar__left">
|
|
@@ -737,4 +737,4 @@ tr:hover td { background: var(--bg-hover); }
|
|
|
737
737
|
<div class="meta-line">${U((d.meta.tags||[]).slice(0,6),e)}</div>
|
|
738
738
|
<h3><a href="${p}/article/${encodeURIComponent(d.path)}">${s(d.meta.title)}</a></h3>
|
|
739
739
|
</div>`;return $(`${e} \xB7 ${n}`,C(r),i)}function P(t,e,n){let a=t.rebuildIndex(),r=L(a.articles.map(c=>({title:c.title,path:c.path,tags:c.tags}))),o='<div class="nav-section">';o+=`<div class="nav-section-title">${s(e)}</div>`,o+=`<a class="nav-item${n?"":" active"}" href="/">Home</a>`,o+='<a class="nav-item" href="/lint">Health check</a>',o+="</div>";for(let[c,p]of r){o+='<div class="nav-section">',o+=`<div class="nav-section-title">${J(c)}</div>`;for(let i of p){let d=i.path===n;o+=`<a class="nav-item${d?" active":""}" href="/article/${encodeURIComponent(i.path)}">${s(i.title)}</a>`}o+="</div>"}return o}function Ge(t){let{wikiDir:e,agentFilter:n,peerUrls:a=[],mode:r="graph",pathPrefix:o=""}=t,c=o.replace(/\/+$/,""),p=new K(e,void 0,r),i=a.length>0?new H(a):null;return async(d,g)=>{let x=new URL(d.url||"/","http://localhost"),l=decodeURIComponent(x.pathname),h=c&&l.startsWith(c)?l.slice(c.length)||"/":l,f=null,E=200;try{if(h.startsWith("/remote/")&&i){let y=h.slice(8).split("/article/");if(y.length===2){let[b,v]=y,m=b.indexOf("/"),k=decodeURIComponent(b.slice(0,m)),u=b.slice(m+1),w=await i.getRemoteArticle(k,u,v);if(w){let z=await i.getRemoteAgents(),N=[...p.summary(),...z.map(S=>({...S,agentId:`${S.agentId} @${S.nodeId}`}))],A=`<div class="breadcrumb"><a href="/">Hub</a> / <span class="tag">remote</span> ${s(u)} @ ${s(k)}</div>`;A+=`<h1>${s(w.meta.title)}</h1>`,A+='<dl class="meta">',A+=`<dt>Tags</dt><dd>${(w.meta.tags||[]).map(S=>`<span class="tag">${S}</span>`).join(" ")}</dd>`,A+=`<dt>Owner</dt><dd>${s(w.meta.owner)}</dd>`,A+=`<dt>Source</dt><dd><span class="tag">remote</span> ${s(k)}</dd>`,A+=`<dt>Updated</dt><dd>${w.meta.lastUpdated}</dd>`,A+="</dl>";let T=new Map;A+=O(w.content,T),f=$(w.meta.title,C(N),A)}}}if(!f&&n){let y=p.getAgentWiki(n);if(h==="/"||h===""){let b=y.rebuildIndex(),v=p.getAgentEntries(n),m=`<h1>${s(n)}</h1>`;if(m+='<div class="stats">',m+=`<div class="stat-card"><div class="number">${b.articles.length}</div><div class="label">Articles</div></div>`,m+=`<div class="stat-card"><div class="number">${v.length}</div><div class="label">Entries</div></div>`,m+="</div>",b.articles.length>0){m+="<h2>Articles</h2><table><tr><th>Title</th><th>Type</th><th>Updated</th></tr>";for(let k of b.articles)m+=`<tr><td><a href="/article/${encodeURIComponent(k.path)}">${s(k.title)}</a></td><td><span class="tag">${(k.tags||[]).slice(0,3).join(", ")}</span></td><td>${k.lastUpdated||""}</td></tr>`;m+="</table>"}f=$(n,P(y,n),m)}else if(h.startsWith("/article/")){let b=h.slice(9),v=y.readArticle(b);if(v){let m=y.rebuildIndex(),k=new Map;for(let w of m.articles)k.set(w.title,w.path);let u=`<h1>${s(v.meta.title)}</h1>`;u+='<dl class="meta">',u+=`<dt>Tags</dt><dd>${(v.meta.tags||[]).map(w=>`<span class="tag">${w}</span>`).join(" ")}</dd>`,u+=`<dt>Updated</dt><dd>${v.meta.lastUpdated}</dd>`,v.meta.sources?.length&&(u+=`<dt>Sources</dt><dd>${v.meta.sources.length} entries</dd>`),u+="</dl>",u+=O(v.content,k),f=$(v.meta.title,P(y,n,b),u)}}else if(h==="/lint"){let b=y.lint(),v="<h1>Health Check</h1>";if(b.length===0)v+='<p style="color:green;">No issues.</p>';else{v+="<table><tr><th>Type</th><th>Article</th><th>Issue</th></tr>";for(let m of b)v+=`<tr><td><span class="tag">${m.type}</span></td><td>${s(m.article)}</td><td>${s(m.message)}</td></tr>`;v+="</table>"}f=$("Health Check",P(y,n),v)}else if(h==="/search"){let b=x.searchParams.get("q")||"",v=await y.findRelevantReranked(b,void 0,20),m=`<h1>Search: "${s(b)}"</h1>`;for(let k of v)m+=`<div class="entry-card"><h3><a href="/article/${encodeURIComponent(k.path)}">${s(k.meta.title)}</a></h3><p>${s(k.content.slice(0,200))}...</p></div>`;v.length===0&&(m+="<p>No results.</p>"),f=$(`Search: ${b}`,P(y,n),m)}else if(h.startsWith("/tag/")){let b=decodeURIComponent(h.slice(5)),v=y.findByTags([b],void 0,100),m=`<h1>Tag: <a class="tag" href="#">${s(b)}</a></h1>`;m+=`<p>${v.length} article${v.length===1?"":"s"} tagged <code>${s(b)}</code></p>`;for(let k of v)m+=`<div class="entry-card"><h3><a href="/article/${encodeURIComponent(k.path)}">${s(k.meta.title)}</a></h3><div class="meta-line">${U((k.meta.tags||[]).slice(0,6))}</div></div>`;v.length===0&&(m+="<p>No articles with this tag.</p>"),f=$(`Tag: ${b}`,P(y,n),m)}}else{let y=i?await i.getRemoteAgents():[],b=p.summary(),v=new Map(b.map(u=>[u.agentId,u])),m=[],k=new Set;for(let u of b){let w=y.find(z=>z.agentId===u.agentId);w&&w.totalArticles>u.totalArticles?m.push({...w,totalEntries:Math.max(u.totalEntries,w.totalEntries),unabsorbed:Math.max(u.unabsorbed,w.unabsorbed)}):m.push(u),k.add(u.agentId)}for(let u of y)k.has(u.agentId)||(m.push(u),k.add(u.agentId));if(h==="/"||h==="")f=je(p,m,y);else if(h==="/entries")f=qe(p,m);else if(h==="/search")f=Ke(p,x.searchParams.get("q")||"",m);else if(h.startsWith("/tag/"))f=Ye(p,decodeURIComponent(h.slice(5)),m);else if(h.match(/^\/agent\/[^/]+\/tag\/.+/)){let u=h.match(/^\/agent\/([^/]+)\/tag\/(.+)$/);f=Xe(p,decodeURIComponent(u[1]),decodeURIComponent(u[2]),m)}else if(h.startsWith("/agent/")){let u=h.slice(7),w=u.indexOf("/article/");if(w===-1)f=Le(p,u,m);else{let z=u.slice(0,w),N=u.slice(w+9);if(f=Je(p,z,N,m),!f&&i){let A=y.find(T=>T.agentId===z);if(A){let T=await i.getRemoteArticle(A.peerUrl,z,N);if(T){let S=`<div class="breadcrumb"><a href="/">Hub</a> / <span class="tag">remote @ ${s(A.nodeId)}</span> / ${s(z)}</div>`;S+=`<h1>${s(T.meta.title)}</h1>`,S+='<dl class="meta">',S+=`<dt>Tags</dt><dd>${(T.meta.tags||[]).map(ue=>`<span class="tag">${ue}</span>`).join(" ")}</dd>`,S+=`<dt>Source</dt><dd><span class="tag">remote</span> ${s(A.nodeId)}</dd>`,S+=`<dt>Updated</dt><dd>${T.meta.lastUpdated}</dd>`,S+="</dl>",S+=O(T.content,new Map),f=$(T.meta.title,C(m),S)}}}}}}if(!f){E=404;let y=n?P(p.getAgentWiki(n),n):C(p.summary());f=$("Not Found",y,"<h1>Page not found</h1>")}}catch(y){E=500,f=$("Error","",`<h1>Error</h1><pre>${s(y.message)}</pre>`)}g.writeHead(E,{"Content-Type":"text/html; charset=utf-8"}),g.end(c?Ve(f,c):f)}}function Ve(t,e){t=t.replace(/(\s(?:href|action)=")\/(?!\/)/g,`$1${e}/`),t=t.replace(new RegExp(`(${e})${e}/`,"g"),`${e}/`);let n=`<a href="/admin" style="position:fixed;top:10px;right:14px;z-index:9999;padding:5px 11px;background:rgba(0,0,0,0.55);color:#fff;font:12px/1.2 'IBM Plex Sans',system-ui,sans-serif;text-decoration:none;border-radius:6px;border:1px solid rgba(255,255,255,0.18);backdrop-filter:blur(6px)">\u2190 Dashboard</a>`;return t=t.replace(/<body([^>]*)>/,`<body$1>${n}`),t}function Tt(t,e=4200,n,a=[],r="graph"){let o=Ge({wikiDir:t,agentFilter:n,peerUrls:a,mode:r});He((p,i)=>{o(p,i)}).listen(e)}var Qe="https://ntfy.sh";function zt(t){return{enabled:!!t?.enabled,server:t?.server||Qe,topicSet:!!t?.topic,tokenSet:!!t?.token}}function Rt(t,e){let n={...t??{}};if("enabled"in e&&(n.enabled=!!e.enabled),"server"in e){let a=String(e.server).trim().replace(/\/+$/,"");if(!/^https?:\/\/\S+$/.test(a))throw new Error("ntfy server must be an http(s) URL");n.server=a}if("topic"in e){let a=String(e.topic).trim();if(!a)throw new Error("ntfy topic cannot be empty");n.topic=a}if("token"in e){let a=String(e.token??"").trim();a?n.token=a:delete n.token}if(n.enabled&&!n.topic)throw new Error("set a topic before enabling ntfy");return n}export{ee as a,ie as b,mt as c,ut as d,ht as e,pe as f,yt as g,kt as h,zt as i,Rt as j,Ge as k,Tt as l};
|
|
740
|
-
//# sourceMappingURL=chunk-
|
|
740
|
+
//# sourceMappingURL=chunk-E6EW42EA.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{existsSync as c,mkdirSync as l,readdirSync as g,readFileSync as d,renameSync as u,writeFileSync as m}from"fs";import{resolve as i}from"path";function s(r){return i(r,"_proposals")}function a(r,t){if(!/^[a-z0-9-]+$/.test(t))throw new Error(`invalid proposal id: ${t}`);return i(s(r),`${t}.json`)}function y(r,t){let o=new Date(r).toISOString().slice(0,10),e=t.replace(/\.md$/,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48);return`${o}-${e||"article"}-${Math.random().toString(36).slice(2,6)}`}function x(r,t){l(s(r),{recursive:!0});let o=a(r,t.id),e=`${o}.${process.pid}.tmp`;m(e,JSON.stringify(t,null,2)+`
|
|
2
|
+
`),u(e,o)}function P(r,t){try{return JSON.parse(d(a(r,t),"utf-8"))}catch{return null}}function v(r,t){let o=s(r);if(!c(o))return[];let e=[];for(let p of g(o).filter(n=>n.endsWith(".json")).sort()){let n=P(r,p.slice(0,-5));n&&(!t||n.status===t)&&e.push(n)}return e}export{s as a,y as b,x as c,P as d,v as e};
|
|
3
|
+
//# sourceMappingURL=chunk-FRHSQVFN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/wiki/proposals.ts"],"sourcesContent":["import { existsSync, mkdirSync, readdirSync, readFileSync, renameSync, writeFileSync } from \"fs\"\nimport { resolve } from \"path\"\n\n// --- Promotion proposals: lessons wait for a human before the wiki ---\n//\n// `wiki promote` used to write public, org-wide articles straight into the\n// shared wiki from a nightly job. A wrong lesson, or one planted through a\n// poisoned memory, reached every agent the next morning. Now the judge's\n// output becomes a proposal here, with the evidence that produced it, and\n// only an operator's approval writes the article (promote.ts).\n//\n// Storage only: one JSON file per proposal under `<wiki>/_proposals/`.\n// The wiki index skips `_`-prefixed folders, so pending proposals are\n// invisible to agents.\n\nexport type ProposalStatus = \"pending\" | \"approved\" | \"rejected\"\n\n/** The article the judge wants to write. Same shape as PromotedArticle. */\nexport interface ProposedArticle {\n path: string\n title: string\n type?: string\n related?: string[]\n tags: string[]\n content: string\n promotedFrom: string[]\n}\n\n/** One memory or review finding behind the proposal. */\nexport interface ProposalSource {\n stamp: string\n kind: \"memory\" | \"review\"\n agentId: string\n type: string\n name: string\n description: string\n /** Distinct sessions a review finding appeared in. */\n occurrences?: number\n /** Some of those sessions, for a reviewer to open. */\n sessions?: string[]\n /** Who wrote the memory, and in which task (agent-memory provenance). */\n author?: string\n taskId?: string\n updatedAt: string\n /** Start of the memory body. */\n excerpt: string\n}\n\nexport interface ProposalEvidence {\n /** Agents whose memories or reviews back it. */\n agents: string[]\n /** Highest recurrence among its sources (1 for plain memories). */\n occurrences: number\n sources: ProposalSource[]\n}\n\nexport interface PromotionProposal {\n id: string\n createdAt: string\n status: ProposalStatus\n article: ProposedArticle\n evidence: ProposalEvidence\n /** Set when the article already existed: approval refuses if it has\n * changed since, so a proposal can't silently revert someone's edit. */\n replaces?: { lastUpdated: string; contentHash: string }\n decidedBy?: string\n decidedAt?: string\n reason?: string\n}\n\nexport function proposalsDir(wikiDir: string): string {\n return resolve(wikiDir, \"_proposals\")\n}\n\nfunction fileFor(wikiDir: string, id: string): string {\n if (!/^[a-z0-9-]+$/.test(id)) throw new Error(`invalid proposal id: ${id}`)\n return resolve(proposalsDir(wikiDir), `${id}.json`)\n}\n\nexport function newProposalId(now: number, path: string): string {\n const day = new Date(now).toISOString().slice(0, 10)\n const slug = path.replace(/\\.md$/, \"\").toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-+|-+$/g, \"\").slice(0, 48)\n return `${day}-${slug || \"article\"}-${Math.random().toString(36).slice(2, 6)}`\n}\n\nexport function saveProposal(wikiDir: string, p: PromotionProposal): void {\n mkdirSync(proposalsDir(wikiDir), { recursive: true })\n const path = fileFor(wikiDir, p.id)\n const tmp = `${path}.${process.pid}.tmp`\n writeFileSync(tmp, JSON.stringify(p, null, 2) + \"\\n\")\n renameSync(tmp, path)\n}\n\nexport function readProposal(wikiDir: string, id: string): PromotionProposal | null {\n try {\n return JSON.parse(readFileSync(fileFor(wikiDir, id), \"utf-8\")) as PromotionProposal\n } catch {\n return null\n }\n}\n\n/** Proposals, oldest first; only `status` ones when given. */\nexport function listProposals(wikiDir: string, status?: ProposalStatus): PromotionProposal[] {\n const dir = proposalsDir(wikiDir)\n if (!existsSync(dir)) return []\n const out: PromotionProposal[] = []\n for (const f of readdirSync(dir).filter((f) => f.endsWith(\".json\")).sort()) {\n const p = readProposal(wikiDir, f.slice(0, -5))\n if (p && (!status || p.status === status)) out.push(p)\n }\n return out\n}\n"],"mappings":"AAAA,OAAS,cAAAA,EAAY,aAAAC,EAAW,eAAAC,EAAa,gBAAAC,EAAc,cAAAC,EAAY,iBAAAC,MAAqB,KAC5F,OAAS,WAAAC,MAAe,OAqEjB,SAASC,EAAaC,EAAyB,CACpD,OAAOF,EAAQE,EAAS,YAAY,CACtC,CAEA,SAASC,EAAQD,EAAiBE,EAAoB,CACpD,GAAI,CAAC,eAAe,KAAKA,CAAE,EAAG,MAAM,IAAI,MAAM,wBAAwBA,GAAI,EAC1E,OAAOJ,EAAQC,EAAaC,CAAO,EAAG,GAAGE,QAAS,CACpD,CAEO,SAASC,EAAcC,EAAaC,EAAsB,CAC/D,IAAMC,EAAM,IAAI,KAAKF,CAAG,EAAE,YAAY,EAAE,MAAM,EAAG,EAAE,EAC7CG,EAAOF,EAAK,QAAQ,QAAS,EAAE,EAAE,YAAY,EAAE,QAAQ,cAAe,GAAG,EAAE,QAAQ,WAAY,EAAE,EAAE,MAAM,EAAG,EAAE,EACpH,MAAO,GAAGC,KAAOC,GAAQ,aAAa,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,EAAG,CAAC,GAC7E,CAEO,SAASC,EAAaR,EAAiBS,EAA4B,CACxEhB,EAAUM,EAAaC,CAAO,EAAG,CAAE,UAAW,EAAK,CAAC,EACpD,IAAMK,EAAOJ,EAAQD,EAASS,EAAE,EAAE,EAC5BC,EAAM,GAAGL,KAAQ,QAAQ,UAC/BR,EAAca,EAAK,KAAK,UAAUD,EAAG,KAAM,CAAC,EAAI;AAAA,CAAI,EACpDb,EAAWc,EAAKL,CAAI,CACtB,CAEO,SAASM,EAAaX,EAAiBE,EAAsC,CAClF,GAAI,CACF,OAAO,KAAK,MAAMP,EAAaM,EAAQD,EAASE,CAAE,EAAG,OAAO,CAAC,CAC/D,MAAE,CACA,OAAO,IACT,CACF,CAGO,SAASU,EAAcZ,EAAiBa,EAA8C,CAC3F,IAAMC,EAAMf,EAAaC,CAAO,EAChC,GAAI,CAACR,EAAWsB,CAAG,EAAG,MAAO,CAAC,EAC9B,IAAMC,EAA2B,CAAC,EAClC,QAAWC,KAAKtB,EAAYoB,CAAG,EAAE,OAAQE,GAAMA,EAAE,SAAS,OAAO,CAAC,EAAE,KAAK,EAAG,CAC1E,IAAMP,EAAIE,EAAaX,EAASgB,EAAE,MAAM,EAAG,EAAE,CAAC,EAC1CP,IAAM,CAACI,GAAUJ,EAAE,SAAWI,IAASE,EAAI,KAAKN,CAAC,EAEvD,OAAOM,CACT","names":["existsSync","mkdirSync","readdirSync","readFileSync","renameSync","writeFileSync","resolve","proposalsDir","wikiDir","fileFor","id","newProposalId","now","path","day","slug","saveProposal","p","tmp","readProposal","listProposals","status","dir","out","f"]}
|