agentix-cli 0.135.1 → 0.136.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{App-4UVAI5C5.js → App-D6W6IV2L.js} +2 -2
- package/dist/{ChatApp-COO67WIR.js → ChatApp-X7TNCFGW.js} +2 -2
- package/dist/{absorb-eval-YT5TOTC7.js → absorb-eval-COPVH2M2.js} +2 -2
- package/dist/{agent-DRUIMWF5.js → agent-VCGAUBER.js} +2 -2
- package/dist/{board-dashboard-2524GN5N.js → board-dashboard-JZM3FQNV.js} +4 -4
- package/dist/{board-dashboard-2524GN5N.js.map → board-dashboard-JZM3FQNV.js.map} +1 -1
- package/dist/chunk-4ZWZ42YE.js +5 -0
- package/dist/{chunk-KXR6GVL7.js.map → chunk-4ZWZ42YE.js.map} +1 -1
- package/dist/{chunk-DYGQF3MI.js → chunk-54OORW5I.js} +2 -2
- package/dist/chunk-54OORW5I.js.map +1 -0
- package/dist/{chunk-TTG3ZW3W.js → chunk-5J5USW2O.js} +2 -2
- package/dist/{chunk-3XVST5XX.js → chunk-5X37CXJF.js} +2 -2
- package/dist/{chunk-4XMALK7X.js → chunk-66DPMVUC.js} +2 -2
- package/dist/{chunk-SSQMFHSM.js → chunk-AK3XOA5N.js} +2 -2
- package/dist/chunk-AKWBDCMU.js +4 -0
- package/dist/chunk-AKWBDCMU.js.map +1 -0
- package/dist/{chunk-SN7YH4E4.js → chunk-C43E3YFT.js} +2 -2
- package/dist/{chunk-ZEAT2B5B.js → chunk-EVTTAM7S.js} +2 -2
- package/dist/{chunk-K445URSN.js → chunk-FQLSV2C4.js} +2 -2
- package/dist/{chunk-FWDRBUMS.js → chunk-GL3H7XMI.js} +2 -2
- package/dist/{chunk-R6ECKZLE.js → chunk-H2N7DOPT.js} +2 -2
- package/dist/{chunk-XOUO4XNA.js → chunk-HEJTE7OC.js} +2 -2
- package/dist/{chunk-3F4GPRGQ.js → chunk-HH7OFAEM.js} +2 -2
- package/dist/{chunk-QDWEM4DG.js → chunk-HZZW35FY.js} +2 -2
- package/dist/{chunk-RRGITX5B.js → chunk-IPMXIPTS.js} +2 -2
- package/dist/{chunk-R6KLH34H.js → chunk-K75LFQE3.js} +2 -2
- package/dist/{chunk-UTW56K5I.js → chunk-KZXQD6ZK.js} +2 -2
- package/dist/{chunk-P3I7AATX.js → chunk-M5AHI2PZ.js} +2 -2
- package/dist/{chunk-3D5XUOBL.js → chunk-M5B4QG6J.js} +2 -2
- package/dist/chunk-OISCRNMW.js +105 -0
- package/dist/chunk-OISCRNMW.js.map +1 -0
- package/dist/{chunk-ERULJ2ZL.js → chunk-OW5EXDVY.js} +2 -2
- package/dist/chunk-OWNQ2FD4.js +3 -0
- package/dist/chunk-OWNQ2FD4.js.map +1 -0
- package/dist/chunk-PE5V2LI7.js +2 -0
- package/dist/chunk-PE5V2LI7.js.map +1 -0
- package/dist/{chunk-32LIPTHM.js → chunk-PV623BLN.js} +3 -3
- package/dist/{chunk-WYEWNN76.js → chunk-QCUJTAAZ.js} +6 -6
- package/dist/{chunk-NG72DYJR.js → chunk-QTDKNJXD.js} +210 -210
- package/dist/chunk-QTDKNJXD.js.map +1 -0
- package/dist/chunk-U6EJ53DA.js +16 -0
- package/dist/chunk-U6EJ53DA.js.map +1 -0
- package/dist/{chunk-WEPON4FP.js → chunk-UNIXYV3U.js} +2 -2
- package/dist/{chunk-SMAI7U6H.js → chunk-VA24JS2S.js} +2 -2
- package/dist/{chunk-LUYN6RAC.js → chunk-WRJFKA43.js} +2 -2
- package/dist/{chunk-UXOGNBGL.js → chunk-ZPJVDX2U.js} +2 -2
- package/dist/cli.js +1 -1
- package/dist/{client-NFPBE6L4.js → client-SMOWSRJY.js} +2 -2
- package/dist/{config-GHMRBRDL.js → config-OGUDWYAA.js} +2 -2
- package/dist/{config-mutate-2XV27EFV.js → config-mutate-BH27TMWK.js} +2 -2
- package/dist/config-mutator-Q62AS2TR.js +2 -0
- package/dist/{contributions-ZD6ZGTJR.js → contributions-H6T65TCY.js} +2 -2
- package/dist/{contributions-ZD6ZGTJR.js.map → contributions-H6T65TCY.js.map} +1 -1
- package/dist/{doctor-UBXVMGJG.js → doctor-ZOXHT7ZQ.js} +2 -2
- package/dist/enrich-R2LIDLPZ.js +2 -0
- package/dist/event-levels-WOYYEWSZ.js +3 -0
- package/dist/event-levels-WOYYEWSZ.js.map +1 -0
- package/dist/fact-proposals-X2O4W7VN.js +2 -0
- package/dist/{follow-up-tool-EARVITTS.js → follow-up-tool-GUBBXNEZ.js} +2 -2
- package/dist/{grants-HIFE6L5N.js → grants-CEUGZBQ4.js} +2 -2
- package/dist/hub-IIW2GBO5.js +2 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/ledger-P62U3FHT.js +2 -0
- package/dist/{program-WOQXOAYQ.js → program-WROQ55F5.js} +240 -238
- package/dist/program-WROQ55F5.js.map +1 -0
- package/dist/promote-HDLU44MX.js +2 -0
- package/dist/{query-RRHYPXOM.js → query-6G27CBZQ.js} +2 -2
- package/dist/query-runs-VXS572PQ.js +6 -0
- package/dist/query-runs-VXS572PQ.js.map +1 -0
- package/dist/{query-settings-WKVLQEVZ.js → query-settings-G4M75LVQ.js} +2 -2
- package/dist/registry-3RE5SG22.js +2 -0
- package/dist/{request-planner-MFAIVLUQ.js → request-planner-T3VCZVVQ.js} +2 -2
- package/dist/{review-candidates-6WMDVVIZ.js → review-candidates-C3O3CENL.js} +2 -2
- package/dist/rotation-memo-store-Z4D5KRA6.js +2 -0
- package/dist/{rotation-memo-store-A4YW6FSK.js.map → rotation-memo-store-Z4D5KRA6.js.map} +1 -1
- package/dist/{routing-OPCLHIYW.js → routing-LD35TJM5.js} +2 -2
- package/dist/rules-HUUFXQD6.js +24 -0
- package/dist/rules-HUUFXQD6.js.map +1 -0
- package/dist/schedule-tool-46TVGEYU.js +2 -0
- package/dist/{scheduler-G3WWYETY.js → scheduler-I3QB4GI3.js} +2 -2
- package/dist/{seat-3HM4J7IX.js → seat-4Y3EW3KU.js} +2 -2
- package/dist/{select-VEFE2ESF.js → select-LZKN3FER.js} +2 -2
- package/dist/{set-enabled-US5BYKFZ.js → set-enabled-WSTOHJDE.js} +2 -2
- package/dist/{tool-HUSCHORN.js → tool-AKXO2EJU.js} +2 -2
- package/dist/tool-NLMIUOHR.js +4 -0
- package/dist/tool-NLMIUOHR.js.map +1 -0
- package/dist/wiki-ZS6OHOWQ.js +2 -0
- package/dist/wiki-enrich-NGPFWTVA.js +2 -0
- package/dist/wiki-enrich-NGPFWTVA.js.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-AKLZ4YO2.js +0 -4
- package/dist/chunk-AKLZ4YO2.js.map +0 -1
- package/dist/chunk-DYGQF3MI.js.map +0 -1
- package/dist/chunk-KA2UIZXG.js +0 -3
- package/dist/chunk-KA2UIZXG.js.map +0 -1
- package/dist/chunk-KXR6GVL7.js +0 -5
- package/dist/chunk-MUVE3UAS.js +0 -105
- package/dist/chunk-MUVE3UAS.js.map +0 -1
- package/dist/chunk-NG72DYJR.js.map +0 -1
- package/dist/config-mutator-6ITNU5DT.js +0 -2
- package/dist/enrich-EFIPWA3P.js +0 -16
- package/dist/enrich-EFIPWA3P.js.map +0 -1
- package/dist/event-levels-7CY7AJLY.js +0 -3
- package/dist/event-levels-7CY7AJLY.js.map +0 -1
- package/dist/fact-proposals-LZWS5KFO.js +0 -2
- package/dist/hub-MVX3U6A2.js +0 -2
- package/dist/ledger-CH7R756S.js +0 -2
- package/dist/program-WOQXOAYQ.js.map +0 -1
- package/dist/promote-X2XQEEQP.js +0 -2
- package/dist/query-runs-WYRNBLLC.js +0 -6
- package/dist/query-runs-WYRNBLLC.js.map +0 -1
- package/dist/registry-VXK36CCL.js +0 -2
- package/dist/rotation-memo-store-A4YW6FSK.js +0 -2
- package/dist/schedule-tool-KPVTMYL3.js +0 -2
- package/dist/tool-XLWLXGB5.js +0 -4
- package/dist/tool-XLWLXGB5.js.map +0 -1
- package/dist/wiki-QZ7XNAMJ.js +0 -2
- package/dist/wiki-enrich-PMG4T6PP.js +0 -2
- /package/dist/{App-4UVAI5C5.js.map → App-D6W6IV2L.js.map} +0 -0
- /package/dist/{ChatApp-COO67WIR.js.map → ChatApp-X7TNCFGW.js.map} +0 -0
- /package/dist/{absorb-eval-YT5TOTC7.js.map → absorb-eval-COPVH2M2.js.map} +0 -0
- /package/dist/{agent-DRUIMWF5.js.map → agent-VCGAUBER.js.map} +0 -0
- /package/dist/{chunk-TTG3ZW3W.js.map → chunk-5J5USW2O.js.map} +0 -0
- /package/dist/{chunk-3XVST5XX.js.map → chunk-5X37CXJF.js.map} +0 -0
- /package/dist/{chunk-4XMALK7X.js.map → chunk-66DPMVUC.js.map} +0 -0
- /package/dist/{chunk-SSQMFHSM.js.map → chunk-AK3XOA5N.js.map} +0 -0
- /package/dist/{chunk-SN7YH4E4.js.map → chunk-C43E3YFT.js.map} +0 -0
- /package/dist/{chunk-ZEAT2B5B.js.map → chunk-EVTTAM7S.js.map} +0 -0
- /package/dist/{chunk-K445URSN.js.map → chunk-FQLSV2C4.js.map} +0 -0
- /package/dist/{chunk-FWDRBUMS.js.map → chunk-GL3H7XMI.js.map} +0 -0
- /package/dist/{chunk-R6ECKZLE.js.map → chunk-H2N7DOPT.js.map} +0 -0
- /package/dist/{chunk-XOUO4XNA.js.map → chunk-HEJTE7OC.js.map} +0 -0
- /package/dist/{chunk-3F4GPRGQ.js.map → chunk-HH7OFAEM.js.map} +0 -0
- /package/dist/{chunk-QDWEM4DG.js.map → chunk-HZZW35FY.js.map} +0 -0
- /package/dist/{chunk-RRGITX5B.js.map → chunk-IPMXIPTS.js.map} +0 -0
- /package/dist/{chunk-R6KLH34H.js.map → chunk-K75LFQE3.js.map} +0 -0
- /package/dist/{chunk-UTW56K5I.js.map → chunk-KZXQD6ZK.js.map} +0 -0
- /package/dist/{chunk-P3I7AATX.js.map → chunk-M5AHI2PZ.js.map} +0 -0
- /package/dist/{chunk-3D5XUOBL.js.map → chunk-M5B4QG6J.js.map} +0 -0
- /package/dist/{chunk-ERULJ2ZL.js.map → chunk-OW5EXDVY.js.map} +0 -0
- /package/dist/{chunk-32LIPTHM.js.map → chunk-PV623BLN.js.map} +0 -0
- /package/dist/{chunk-WYEWNN76.js.map → chunk-QCUJTAAZ.js.map} +0 -0
- /package/dist/{chunk-WEPON4FP.js.map → chunk-UNIXYV3U.js.map} +0 -0
- /package/dist/{chunk-SMAI7U6H.js.map → chunk-VA24JS2S.js.map} +0 -0
- /package/dist/{chunk-LUYN6RAC.js.map → chunk-WRJFKA43.js.map} +0 -0
- /package/dist/{chunk-UXOGNBGL.js.map → chunk-ZPJVDX2U.js.map} +0 -0
- /package/dist/{client-NFPBE6L4.js.map → client-SMOWSRJY.js.map} +0 -0
- /package/dist/{config-GHMRBRDL.js.map → config-OGUDWYAA.js.map} +0 -0
- /package/dist/{config-mutate-2XV27EFV.js.map → config-mutate-BH27TMWK.js.map} +0 -0
- /package/dist/{config-mutator-6ITNU5DT.js.map → config-mutator-Q62AS2TR.js.map} +0 -0
- /package/dist/{doctor-UBXVMGJG.js.map → doctor-ZOXHT7ZQ.js.map} +0 -0
- /package/dist/{fact-proposals-LZWS5KFO.js.map → enrich-R2LIDLPZ.js.map} +0 -0
- /package/dist/{grants-HIFE6L5N.js.map → fact-proposals-X2O4W7VN.js.map} +0 -0
- /package/dist/{follow-up-tool-EARVITTS.js.map → follow-up-tool-GUBBXNEZ.js.map} +0 -0
- /package/dist/{hub-MVX3U6A2.js.map → grants-CEUGZBQ4.js.map} +0 -0
- /package/dist/{ledger-CH7R756S.js.map → hub-IIW2GBO5.js.map} +0 -0
- /package/dist/{promote-X2XQEEQP.js.map → ledger-P62U3FHT.js.map} +0 -0
- /package/dist/{query-RRHYPXOM.js.map → promote-HDLU44MX.js.map} +0 -0
- /package/dist/{registry-VXK36CCL.js.map → query-6G27CBZQ.js.map} +0 -0
- /package/dist/{query-settings-WKVLQEVZ.js.map → query-settings-G4M75LVQ.js.map} +0 -0
- /package/dist/{routing-OPCLHIYW.js.map → registry-3RE5SG22.js.map} +0 -0
- /package/dist/{request-planner-MFAIVLUQ.js.map → request-planner-T3VCZVVQ.js.map} +0 -0
- /package/dist/{review-candidates-6WMDVVIZ.js.map → review-candidates-C3O3CENL.js.map} +0 -0
- /package/dist/{schedule-tool-KPVTMYL3.js.map → routing-LD35TJM5.js.map} +0 -0
- /package/dist/{scheduler-G3WWYETY.js.map → schedule-tool-46TVGEYU.js.map} +0 -0
- /package/dist/{seat-3HM4J7IX.js.map → scheduler-I3QB4GI3.js.map} +0 -0
- /package/dist/{wiki-QZ7XNAMJ.js.map → seat-4Y3EW3KU.js.map} +0 -0
- /package/dist/{select-VEFE2ESF.js.map → select-LZKN3FER.js.map} +0 -0
- /package/dist/{set-enabled-US5BYKFZ.js.map → set-enabled-WSTOHJDE.js.map} +0 -0
- /package/dist/{tool-HUSCHORN.js.map → tool-AKXO2EJU.js.map} +0 -0
- /package/dist/{wiki-enrich-PMG4T6PP.js.map → wiki-ZS6OHOWQ.js.map} +0 -0
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a,b,c,d,e}from"./chunk-LUYN6RAC.js";import"./chunk-DYGQF3MI.js";import"./chunk-BRK6M6LA.js";import"./chunk-UIBUZ2N3.js";import"./chunk-2QNT5JDS.js";import"./chunk-QIJLFPWE.js";export{b as applyConfigMutation,a as findConfigPath,d as getAtPath,c as setAtPath,e as unsetAtPath};
|
|
2
|
-
//# sourceMappingURL=config-mutator-6ITNU5DT.js.map
|
package/dist/enrich-EFIPWA3P.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import{a as Y,k as I,l as M,m as _}from"./chunk-H4NSB54D.js";import{f as G,g as N}from"./chunk-MTX4UPNB.js";import{f as y}from"./chunk-QAWKN2N4.js";import"./chunk-IMLAPB7G.js";import{b as C}from"./chunk-KEXBEUSU.js";import"./chunk-ROLSSYXE.js";import"./chunk-QIJLFPWE.js";import{createHash as L}from"crypto";import{existsSync as J,mkdirSync as V,readFileSync as B,writeFileSync as q}from"fs";import{resolve as P}from"path";var D="wiki-enrich",$e=["person","organization","project","place","device","server","app","domain","account"],K=new Set(["person","organization","project","place"]),F=3500,Q=700;function X(e,n){let i=e.ontology.types.find(r=>r.id===n)?.lens??[],t=new Map;for(let r of i)if(N(r)==="statements")for(let s of G(r)){if(s==="related"||t.has(s))continue;let l=e.ontology.properties.find(u=>u.id===s);l?.domain&&!l.domain.includes(n)||t.set(s,l?.label??s.replace(/_/g," "))}return t}function H(e,n,i){let t=y(n.title);return t.length<4?[]:[...e.entities.values()].filter(r=>r.type===i&&r.id!==n.id&&` ${y(r.title)} `.includes(` ${t} `))}function T(e){return e.access==="public"?null:new Set([e.owner,...e.access==="shared"?e.sharedWith??[]:[]])}function Z(e,n){let i=T(e);if(!i)return!0;let t=T(n);return!!t&&[...t].every(r=>i.has(r))}function ee(e,n,i,t){let r=a=>!t||Z(a.article.meta,t.article.meta),s=a=>a.pages.some(r),l=n.pages.filter(r),u=t?[...new Set(l.flatMap(a=>a.article.meta.sources??[]))]:n.sources,p=Y(e,n,null).filter(s),f=a=>[...new Map(a.map(g=>[g.id,g])).values()],w=f([...p.filter(a=>a.type==="event"),...H(e,n,"event").filter(s)]).sort((a,g)=>(g.date||"").localeCompare(a.date||"")).slice(0,30),o=f([...p.filter(a=>a.type==="project"),...H(e,n,"project").filter(s)]).slice(0,12),d=p.filter(a=>a.type!=="event"&&a.type!=="project").filter(s).filter(a=>n.type!=="person"||K.has(a.type)).slice(0,40),v=i(u).sort((a,g)=>g.date.localeCompare(a.date)).slice(0,14),c=X(e,n.type),m=new Map;for(let a of c.keys()){let g=e.ontology.properties.find(h=>h.id===a)?.range;g?.length&&m.set(a,g)}return{entity:n,pages:l,properties:c,ranges:m,neighbours:d,events:w,projects:o,entries:v,sources:u,mentions:te(e,n,12,r)}}function te(e,n,i=12,t=()=>!0){let r=[n.title,...n.pages.flatMap(p=>p.article.meta.aliases??[])].filter(p=>p.trim().length>=3);if(r.length===0)return[];let s=r.map(p=>p.trim().replace(/[.*+?^${}()|[\]\\]/g,"\\$&")),l=new RegExp(`(^|[^\\p{L}\\p{N}])(${s.join("|")})(?=$|[^\\p{L}\\p{N}])`,"iu"),u=[];for(let p of e.entities.values())if(!(p.id===n.id||p.type==="event"))for(let f of p.pages){if(!t(f))continue;let w=I(f.article.content),o=l.exec(w);if(!o)continue;let d=Math.max(0,o.index-250);u.push({page:f,excerpt:w.slice(d,o.index+450).replace(/\s+/g," ").trim(),at:f.article.meta.lastUpdated||""});break}return u.sort((p,f)=>f.at.localeCompare(p.at)).slice(0,i).map(({page:p,excerpt:f})=>({page:p,excerpt:f}))}function ne(e){let n=[...e.pages.map(i=>`${i.agentId}/${i.article.path}`),...e.sources,...e.events.map(i=>i.id),...e.projects.map(i=>i.id),...e.mentions.map(i=>`${i.page.agentId}/${i.page.article.path}`)].sort();return L("sha1").update(n.join(`
|
|
2
|
-
`)).digest("hex").slice(0,16)}var O=(e,n)=>e.length>n?`${e.slice(0,n)}\u2026`:e;function se(e,n,i){let t=e.entity,r=[`You are bringing one wiki page up to date. Today is ${i}.`,`Subject: "${t.title}" (${n}).`,"","## What the agents' pages say"];for(let s of e.pages)r.push(`### page ${s.agentId}/${s.article.path} (updated ${s.article.meta.lastUpdated||"?"})`,O(I(s.article.content),F),"");if(e.mentions.length){r.push("## Other pages that name the subject");for(let s of e.mentions)r.push(`### page ${s.page.agentId}/${s.page.article.path}: "${s.page.article.meta.title}"`,s.excerpt,"")}r.push("## Source entries (newest first)");for(let s of e.entries)r.push(`### entry ${s.id} (${s.date}, ${s.agentId}, ${s.source})`,O(s.content.trim(),Q),"");return r.push("## Event pages",...e.events.map(s=>`- ${s.date||"?"} \xB7 ${s.title}`),""),r.push("## Project pages",...e.projects.map(s=>`- ${s.title}`),""),r.push("## Other pages it may name",...e.neighbours.map(s=>`- ${s.title} (${s.type})`),""),r.push(`## Properties you may use (the subject is always ${t.title})`,...[...e.properties].map(([s,l])=>`- ${s}: "${t.title} ${l} <value>"${e.ranges.get(s)?`, value is a ${e.ranges.get(s).join(" or ")}`:""}`),""),r.push("## Task","Return one JSON object and nothing else:",'{"overview": "\u2026", "statements": [{"property": "\u2026", "value": "\u2026", "role": "\u2026", "since": "YYYY-MM-DD", "until": "YYYY-MM-DD", "source": "\u2026"}], "history": ["event page title"], "projects": ["project page title"]}',"","Rules:",`- overview: 3 to 6 full sentences telling the story of the relationship: who ${t.title} is to us, how it started, what changed, and where it stands now, with dates. Plain prose. Link pages as [[Exact Title]] only when the title is listed above. Never stop mid-sentence.`,"- statements: only facts the pages or entries state. Use only the listed properties. value is a listed page title when it names one, else a short literal. role, since and until only when stated.","- source: the entry id, the page (agent/path) or the event title the fact comes from. A statement without one of these is dropped.","- Do not list an AI agent or bot as a person's relation.","- history: titles of the listed event pages that are about the subject. projects: listed project titles it takes part in.","- Leave out anything you could not verify. Do not write 'unknown' or 'not captured' as a fact.","- Write in the language the pages are written in."),r.join(`
|
|
3
|
-
`)}function ie(e){let n=e.match(/```(?:json)?\s*\n([\s\S]*?)\n```/),i=n?n[1]:e.slice(e.indexOf("{"),e.lastIndexOf("}")+1);try{let t=JSON.parse(i);return t&&typeof t=="object"&&!Array.isArray(t)?t:null}catch{return null}}var z=/^\d{4}-\d{2}(-\d{2})?$/,E=e=>typeof e=="string"?e.trim():"";function re(e,n,i){let t=[],r=n.entity,s=E(e.overview);if(s&&!/[.!?؟)»"']$/.test(s)){let o=Math.max(s.lastIndexOf(". "),s.lastIndexOf("? "),s.lastIndexOf("! "));s=o>0?s.slice(0,o+1):"",t.push("overview: unfinished last sentence removed")}let l=[...n.entries.map(o=>o.id),...n.pages.map(o=>`${o.agentId}/${o.article.path}`),...n.pages.map(o=>o.article.path),...n.mentions.map(o=>`${o.page.agentId}/${o.page.article.path}`),...n.mentions.map(o=>o.page.article.path),...n.events.map(o=>o.title)],u=[],p=new Set;for(let o of Array.isArray(e.statements)?e.statements:[]){let d=o??{},v=E(d.property),c=E(d.value),m=E(d.source),a=`${v} ${c}`;if(!n.properties.has(v)){t.push(`${a}: property not allowed`);continue}if(!c||/^(unknown|not (given|known|captured|recorded))\b/i.test(c)){t.push(`${a}: no value`);continue}if(!m||!l.some(k=>m.includes(k))){t.push(`${a}: source not among those given`);continue}let g=i.names.get(y(c)),h=g?i.entities.get(g):void 0;if(h?.id===r.id){t.push(`${a}: points at itself`);continue}if(r.type==="person"&&h?.type==="agent"){t.push(`${a}: an agent is not a person's relation`);continue}let j=n.ranges.get(v);if(j&&h&&!j.includes(h.type)){t.push(`${a}: value is a ${h.type}, expected ${j.join(" or ")}`);continue}let A=`${v}
|
|
4
|
-
${y(c)}`;if(p.has(A))continue;p.add(A);let $={property:v,value:h?.title??c,source:O(m,200)},W=E(d.role);W&&($.role=O(W,80)),z.test(E(d.since))&&($.since=E(d.since)),z.test(E(d.until))&&($.until=E(d.until)),u.push($)}let f=new Map([...n.events,...n.projects].map(o=>[y(o.title),o.title])),w=[];for(let o of[...Array.isArray(e.history)?e.history:[],...Array.isArray(e.projects)?e.projects:[]]){let d=f.get(y(E(o).replace(/^\d{4}-\d{2}-\d{2}\s*·\s*/,"")));d&&!w.includes(d)?w.push(d):!d&&E(o)&&t.push(`link ${E(o)}: no such page`)}return{overview:s,statements:u,links:w,dropped:t}}function oe(e,n){let i=`## Overview
|
|
5
|
-
|
|
6
|
-
${n.trim()}
|
|
7
|
-
|
|
8
|
-
${M}
|
|
9
|
-
`,t=_(e);if(t){let r=e.slice(t.end,t.after)===M,s=/^#{1,2}[ \t]/m.test(e.slice(t.end,t.end+4)),u=(r||s&&I(e).length<=F?e.slice(t.after):e.slice(t.textStart)).trim();return`${e.slice(0,t.start)}${i}${u?`
|
|
10
|
-
${u}
|
|
11
|
-
`:""}`}return`${i}
|
|
12
|
-
${e.trim()}
|
|
13
|
-
`}function ae(e,n,i){let t=p=>`${p.property}
|
|
14
|
-
${y(p.value)}`,r=(e.statements??[]).filter(p=>p.by!==D),s=new Set(r.map(t)),l=[...r,...n.statements.filter(p=>!s.has(t(p))).map(p=>({...p,checked_at:i,by:D}))],u=[...new Set([...e.related??[],...n.links])];return{...e,statements:l.length?l:void 0,related:u.length?u:void 0,lastUpdated:i}}function ce(e,n){return n.pages.filter(i=>!e.syncedFrom(i.agentId)).sort((i,t)=>(t.article.meta.sources?.length??0)-(i.article.meta.sources?.length??0)||t.article.content.length-i.article.content.length)[0]}var pe={person:"people",organization:"organizations",project:"projects",place:"places"};function we(e,n,i,t,r){let s=n.replace(/\s+/g," ").trim(),l=e.getAgentWiki(t);if(l.listAllArticles().some(w=>y(w.meta.title)===y(s)))return null;let u=`${pe[i]??`${i}s`}/${y(s).replace(/ /g,"-").slice(0,80)||"page"}.md`,p=C(i)?i:void 0,f={title:s,type:p,class:i,tags:[],owner:t,access:"shared",created:r,lastUpdated:r,sources:[]};return l.writeArticle(u,f,`${s}.
|
|
15
|
-
`,t)?u:null}function ke(e){let n=P(e,"_enrich","state.json");if(!J(n))return{entities:{}};try{let i=JSON.parse(B(n,"utf-8"));return i&&typeof i.entities=="object"?i:{entities:{}}}catch{return{entities:{}}}}function Ee(e,n){V(P(e,"_enrich"),{recursive:!0}),q(P(e,"_enrich","state.json"),JSON.stringify(n,null,2))}async function be(e,n,i,t,r){let s=new Set(t.types),l=new Set(t.only.map(y)),u=c=>c.sources.length+c.pages.length,p=c=>r.entities[c.id]?.failures??0,f=[...n.entities.values()].filter(c=>s.has(c.type)).filter(c=>l.size===0||l.has(y(c.id))||l.has(y(c.title))).sort((c,m)=>p(c)-p(m)||u(m)-u(c)),w=c=>e.getSharedStore().readEntries(c),o={outcomes:[],costUsd:0,capped:!1},d=0,v=(c,m,a,g=!1)=>{if(t.dryRun)return;let h=r.entities[c];r.entities[c]=g?{fingerprint:h?.fingerprint??"",at:new Date().toISOString(),costUsd:a,failures:(h?.failures??0)+1}:{fingerprint:m,at:new Date().toISOString(),costUsd:a},t.save?.(r)};for(let c of f){if(d>=t.max)break;let m={entity:c.id,title:c.title,statements:0,links:0,overview:!1,costUsd:0,dropped:[]},a=ce(e,c);if(!a){o.outcomes.push({...m,status:"no-page"});continue}let g=ee(n,c,w,a),h=ne(g);if(!t.force&&r.entities[c.id]?.fingerprint===h){l.size&&o.outcomes.push({...m,status:"unchanged"});continue}if(o.costUsd>=t.maxCostUsd){o.capped=!0;break}d++;let j=n.ontology.types.find(S=>S.id===c.type)?.label??c.type,A=`${a.agentId}/${a.article.path}`,$;try{$=await i(se(g,j,t.today))}catch(S){o.outcomes.push({...m,page:A,status:"failed",dropped:[S.message.slice(0,200)]}),v(c.id,h,0,!0);continue}o.costUsd+=$.costUsd;let W=ie($.text),k={...m,page:A,status:"no-reply",costUsd:$.costUsd};if(!W){o.outcomes.push(k),v(c.id,h,$.costUsd);continue}let b=re(W,g,n);if(Object.assign(k,{statements:b.statements.length,links:b.links.length,overview:!!b.overview,dropped:b.dropped}),!b.overview&&b.statements.length===0&&b.links.length===0){k.status="nothing-new",o.outcomes.push(k),v(c.id,h,$.costUsd);continue}let U=S=>b.overview?oe(S.content,b.overview):S.content;if(t.dryRun){o.outcomes.push({...k,status:"dry-run",preview:U(a.article),facts:b.statements});continue}let x=e.getAgentWiki(a.agentId),R=x.readArticle(a.article.path);if(!(!!R&&x.writeArticle(a.article.path,ae(R.meta,b,t.today),U(R),R.meta.owner||a.agentId))){k.status="failed",k.dropped.push(R?"write refused":"the page was moved or removed during the run"),o.outcomes.push(k),v(c.id,h,$.costUsd,!0);continue}x.rebuildIndex(),v(c.id,h,$.costUsd),k.status="written",o.outcomes.push(k)}return o}export{D as ENRICH_BY,$e as ENRICH_TYPES,se as buildEnrichPrompt,re as checkEnrichment,we as createEntityPage,ee as enrichContext,ne as fingerprint,X as lensProperties,ke as loadEnrichState,te as mentionsOf,ae as mergedMeta,ie as parseEnrichReply,Z as readableAlongside,be as runEnrich,Ee as saveEnrichState,ce as targetPage,oe as withOverview};
|
|
16
|
-
//# sourceMappingURL=enrich-EFIPWA3P.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/wiki/enrich.ts"],"sourcesContent":["// --- Bring entity pages up to a full overview, typed facts and history (#820) ---\n//\n// For each person, organisation, project, place or asset in the typed\n// graph, one model call reads every agent's page about it, the event and\n// project pages linked to it, and the raw entries the pages came from.\n// It returns:\n// - an overview: who they are to us, how it started, what changed, where\n// it stands now;\n// - typed statements (role at, client of, owns…), each with a source;\n// - the event and project pages its History should link to.\n// Everything is checked against what the call was shown before one page\n// is written through the store, which keeps the old version. Only\n// entities whose sources or links changed since the last run are redone,\n// and a run stops before the next call once its spending cap is reached.\n\nimport { createHash } from \"crypto\"\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"fs\"\nimport { resolve } from \"path\"\nimport type { WikiHub } from \"./hub\"\nimport { isWikiArticleType, type WikiArticleMeta, type WikiEntry } from \"./types\"\nimport { normName, type Entity, type GraphPage, type WikiGraph } from \"./ontology/graph\"\nimport { linkedEntities } from \"./ontology/lens\"\nimport { panelFrom, panelSource } from \"./ontology/load\"\nimport type { WikiStatement } from \"./ontology/types\"\nimport { bodyOf, OVERVIEW_END, overviewSpan } from \"./ontology/view-entity\"\n\nexport const ENRICH_BY = \"wiki-enrich\"\n\nexport const ENRICH_TYPES =[\"person\", \"organization\", \"project\", \"place\", \"device\", \"server\", \"app\", \"domain\", \"account\"]\n\n/** Types a person's relation may point at; never an agent (#819). */\nconst PERSON_RELATION_TYPES = new Set([\"person\", \"organization\", \"project\", \"place\"])\n\nexport interface EnrichContext {\n entity: Entity\n pages: GraphPage[]\n /** Property id → label, the typed relations this type's lens shows. */\n properties: Map<string, string>\n /** Property id → the types its value may be, where the ontology says. */\n ranges: Map<string, string[]>\n /** Other entities the page may name, by title. */\n neighbours: Entity[]\n events: Entity[]\n projects: Entity[]\n entries: WikiEntry[]\n /** Raw entry ids behind the pages the call may read. */\n sources: string[]\n /** Other pages that name the subject in their text, with the passage. */\n mentions: Array<{ page: GraphPage; excerpt: string }>\n}\n\nexport interface EnrichResult {\n overview: string\n statements: WikiStatement[]\n /** Titles of event and project pages to link. */\n links: string[]\n /** What the checks removed, for the run log. */\n dropped: string[]\n}\n\nexport interface EnrichState {\n entities: Record<string, {\n fingerprint: string\n at: string\n costUsd?: number\n /** Calls that failed in a row; such entities go after the rest. */\n failures?: number\n }>\n}\n\nconst PAGE_CHARS = 3500\nconst ENTRY_CHARS = 700\n\n/** Typed properties the entity's lens shows, without plain links. */\nexport function lensProperties(g: WikiGraph, type: string): Map<string, string> {\n const lens = g.ontology.types.find(t => t.id === type)?.lens ?? []\n const out = new Map<string, string>()\n for (const panel of lens) {\n if (panelSource(panel) !== \"statements\") continue\n for (const id of panelFrom(panel)) {\n if (id === \"related\" || out.has(id)) continue\n const def = g.ontology.properties.find(p => p.id === id)\n // An organisation's \"people\" panel reads role_at from person pages.\n if (def?.domain && !def.domain.includes(type)) continue\n out.set(id, def?.label ?? id.replace(/_/g, \" \"))\n }\n }\n return out\n}\n\n/** Events whose title names the entity, for pages that never linked them. */\nfunction namedIn(g: WikiGraph, e: Entity, type: string): Entity[] {\n const name = normName(e.title)\n if (name.length < 4) return []\n return [...g.entities.values()].filter(x => x.type === type && x.id !== e.id && ` ${normName(x.title)} `.includes(` ${name} `))\n}\n\n/** Agents who can read a page; null means everyone. */\nfunction readers(m: WikiArticleMeta): Set<string> | null {\n if (m.access === \"public\") return null\n return new Set([m.owner, ...(m.access === \"shared\" ? m.sharedWith ?? [] : [])])\n}\n\n/** True when everyone who can read `target` can also read `source`, so\n * text from `source` may be written into `target` (#820). */\nexport function readableAlongside(source: WikiArticleMeta, target: WikiArticleMeta): boolean {\n const s = readers(source)\n if (!s) return true\n const t = readers(target)\n return !!t && [...t].every(a => s.has(a))\n}\n\n/**\n * What one call for `e` may read. With a target page, only pages its\n * readers can already read are included: an owner-only page is never\n * summarised into a shared or public one.\n */\nexport function enrichContext(g: WikiGraph, e: Entity, readEntries: (ids: string[]) => WikiEntry[], target?: GraphPage): EnrichContext {\n const readable = (p: GraphPage) => !target || readableAlongside(p.article.meta, target.article.meta)\n const visible = (x: Entity) => x.pages.some(readable)\n const pages = e.pages.filter(readable)\n const sources = target ? [...new Set(pages.flatMap(p => p.article.meta.sources ?? []))] : e.sources\n const linked = linkedEntities(g, e, null).filter(visible)\n const byId = (list: Entity[]) => [...new Map(list.map(x => [x.id, x])).values()]\n const events = byId([...linked.filter(x => x.type === \"event\"), ...namedIn(g, e, \"event\").filter(visible)])\n .sort((a, b) => (b.date || \"\").localeCompare(a.date || \"\")).slice(0, 30)\n const projects = byId([...linked.filter(x => x.type === \"project\"), ...namedIn(g, e, \"project\").filter(visible)]).slice(0, 12)\n const neighbours = linked\n .filter(x => x.type !== \"event\" && x.type !== \"project\")\n .filter(visible)\n .filter(x => e.type !== \"person\" || PERSON_RELATION_TYPES.has(x.type))\n .slice(0, 40)\n const entries = readEntries(sources).sort((a, b) => b.date.localeCompare(a.date)).slice(0, 14)\n const properties = lensProperties(g, e.type)\n const ranges = new Map<string, string[]>()\n for (const id of properties.keys()) {\n const range = g.ontology.properties.find(p => p.id === id)?.range\n if (range?.length) ranges.set(id, range)\n }\n return { entity: e, pages, properties, ranges, neighbours, events, projects, entries, sources, mentions: mentionsOf(g, e, 12, readable) }\n}\n\n/** Non-event pages whose text names the subject: what a new or thin page\n * can be written from. The newest first, a passage around the first hit. */\nexport function mentionsOf(g: WikiGraph, e: Entity, max = 12, readable: (p: GraphPage) => boolean = () => true): Array<{ page: GraphPage; excerpt: string }> {\n const names = [e.title, ...e.pages.flatMap(p => p.article.meta.aliases ?? [])].filter(n => n.trim().length >= 3)\n if (names.length === 0) return []\n const escaped = names.map(n => n.trim().replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"))\n const re = new RegExp(`(^|[^\\\\p{L}\\\\p{N}])(${escaped.join(\"|\")})(?=$|[^\\\\p{L}\\\\p{N}])`, \"iu\")\n const out: Array<{ page: GraphPage; excerpt: string; at: string }> = []\n for (const other of g.entities.values()) {\n if (other.id === e.id || other.type === \"event\") continue\n for (const page of other.pages) {\n if (!readable(page)) continue\n const body = bodyOf(page.article.content)\n const m = re.exec(body)\n if (!m) continue\n const start = Math.max(0, m.index - 250)\n out.push({ page, excerpt: body.slice(start, m.index + 450).replace(/\\s+/g, \" \").trim(), at: page.article.meta.lastUpdated || \"\" })\n break\n }\n }\n return out.sort((a, b) => b.at.localeCompare(a.at)).slice(0, max).map(({ page, excerpt }) => ({ page, excerpt }))\n}\n\n/** Changes when the entity gains a source, a page or a linked event. */\nexport function fingerprint(ctx: EnrichContext): string {\n const parts = [\n ...ctx.pages.map(p => `${p.agentId}/${p.article.path}`),\n ...ctx.sources,\n ...ctx.events.map(x => x.id),\n ...ctx.projects.map(x => x.id),\n ...ctx.mentions.map(m => `${m.page.agentId}/${m.page.article.path}`),\n ].sort()\n return createHash(\"sha1\").update(parts.join(\"\\n\")).digest(\"hex\").slice(0, 16)\n}\n\nconst clip = (s: string, n: number) => (s.length > n ? `${s.slice(0, n)}…` : s)\n\nexport function buildEnrichPrompt(ctx: EnrichContext, typeLabel: string, today: string): string {\n const e = ctx.entity\n const lines: string[] = [\n `You are bringing one wiki page up to date. Today is ${today}.`,\n `Subject: \"${e.title}\" (${typeLabel}).`,\n \"\",\n \"## What the agents' pages say\",\n ]\n for (const p of ctx.pages) {\n lines.push(`### page ${p.agentId}/${p.article.path} (updated ${p.article.meta.lastUpdated || \"?\"})`, clip(bodyOf(p.article.content), PAGE_CHARS), \"\")\n }\n if (ctx.mentions.length) {\n lines.push(\"## Other pages that name the subject\")\n for (const m of ctx.mentions) lines.push(`### page ${m.page.agentId}/${m.page.article.path}: \"${m.page.article.meta.title}\"`, m.excerpt, \"\")\n }\n lines.push(\"## Source entries (newest first)\")\n for (const en of ctx.entries) lines.push(`### entry ${en.id} (${en.date}, ${en.agentId}, ${en.source})`, clip(en.content.trim(), ENTRY_CHARS), \"\")\n lines.push(\"## Event pages\", ...ctx.events.map(x => `- ${x.date || \"?\"} · ${x.title}`), \"\")\n lines.push(\"## Project pages\", ...ctx.projects.map(x => `- ${x.title}`), \"\")\n lines.push(\"## Other pages it may name\", ...ctx.neighbours.map(x => `- ${x.title} (${x.type})`), \"\")\n lines.push(\n `## Properties you may use (the subject is always ${e.title})`,\n ...[...ctx.properties].map(([id, label]) => `- ${id}: \"${e.title} ${label} <value>\"${ctx.ranges.get(id) ? `, value is a ${ctx.ranges.get(id)!.join(\" or \")}` : \"\"}`),\n \"\",\n )\n lines.push(\n \"## Task\",\n \"Return one JSON object and nothing else:\",\n `{\"overview\": \"…\", \"statements\": [{\"property\": \"…\", \"value\": \"…\", \"role\": \"…\", \"since\": \"YYYY-MM-DD\", \"until\": \"YYYY-MM-DD\", \"source\": \"…\"}], \"history\": [\"event page title\"], \"projects\": [\"project page title\"]}`,\n \"\",\n \"Rules:\",\n `- overview: 3 to 6 full sentences telling the story of the relationship: who ${e.title} is to us, how it started, what changed, and where it stands now, with dates. Plain prose. Link pages as [[Exact Title]] only when the title is listed above. Never stop mid-sentence.`,\n \"- statements: only facts the pages or entries state. Use only the listed properties. value is a listed page title when it names one, else a short literal. role, since and until only when stated.\",\n \"- source: the entry id, the page (agent/path) or the event title the fact comes from. A statement without one of these is dropped.\",\n \"- Do not list an AI agent or bot as a person's relation.\",\n \"- history: titles of the listed event pages that are about the subject. projects: listed project titles it takes part in.\",\n \"- Leave out anything you could not verify. Do not write 'unknown' or 'not captured' as a fact.\",\n \"- Write in the language the pages are written in.\",\n )\n return lines.join(\"\\n\")\n}\n\n/** The JSON object in the reply, fenced or not. */\nexport function parseEnrichReply(text: string): Record<string, unknown> | null {\n const fenced = text.match(/```(?:json)?\\s*\\n([\\s\\S]*?)\\n```/)\n const raw = fenced ? fenced[1] : text.slice(text.indexOf(\"{\"), text.lastIndexOf(\"}\") + 1)\n try {\n const v = JSON.parse(raw)\n return v && typeof v === \"object\" && !Array.isArray(v) ? v as Record<string, unknown> : null\n } catch {\n return null\n }\n}\n\nconst DATE = /^\\d{4}-\\d{2}(-\\d{2})?$/\nconst str = (v: unknown): string => (typeof v === \"string\" ? v.trim() : \"\")\n\n/** Keep only what the call was shown and allowed to write. */\nexport function checkEnrichment(raw: Record<string, unknown>, ctx: EnrichContext, g: WikiGraph): EnrichResult {\n const dropped: string[] = []\n const e = ctx.entity\n let overview = str(raw.overview)\n if (overview && !/[.!?؟)»\"']$/.test(overview)) {\n // A cut-off last sentence is worse than a shorter overview.\n const end = Math.max(overview.lastIndexOf(\". \"), overview.lastIndexOf(\"? \"), overview.lastIndexOf(\"! \"))\n overview = end > 0 ? overview.slice(0, end + 1) : \"\"\n dropped.push(\"overview: unfinished last sentence removed\")\n }\n\n const sourceIds = [\n ...ctx.entries.map(x => x.id),\n ...ctx.pages.map(p => `${p.agentId}/${p.article.path}`),\n ...ctx.pages.map(p => p.article.path),\n ...ctx.mentions.map(m => `${m.page.agentId}/${m.page.article.path}`),\n ...ctx.mentions.map(m => m.page.article.path),\n ...ctx.events.map(x => x.title),\n ]\n const statements: WikiStatement[] = []\n const seen = new Set<string>()\n for (const item of Array.isArray(raw.statements) ? raw.statements : []) {\n const s = (item ?? {}) as Record<string, unknown>\n const property = str(s.property)\n const value = str(s.value)\n const source = str(s.source)\n const label = `${property} ${value}`\n if (!ctx.properties.has(property)) { dropped.push(`${label}: property not allowed`); continue }\n if (!value || /^(unknown|not (given|known|captured|recorded))\\b/i.test(value)) { dropped.push(`${label}: no value`); continue }\n if (!source || !sourceIds.some(id => source.includes(id))) { dropped.push(`${label}: source not among those given`); continue }\n const targetId = g.names.get(normName(value))\n const target = targetId ? g.entities.get(targetId) : undefined\n if (target?.id === e.id) { dropped.push(`${label}: points at itself`); continue }\n if (e.type === \"person\" && target?.type === \"agent\") { dropped.push(`${label}: an agent is not a person's relation`); continue }\n const range = ctx.ranges.get(property)\n if (range && target && !range.includes(target.type)) { dropped.push(`${label}: value is a ${target.type}, expected ${range.join(\" or \")}`); continue }\n const key = `${property}\\n${normName(value)}`\n if (seen.has(key)) continue\n seen.add(key)\n const st: WikiStatement = { property, value: target?.title ?? value, source: clip(source, 200) }\n const role = str(s.role)\n if (role) st.role = clip(role, 80)\n if (DATE.test(str(s.since))) st.since = str(s.since)\n if (DATE.test(str(s.until))) st.until = str(s.until)\n statements.push(st)\n }\n\n const allowed = new Map([...ctx.events, ...ctx.projects].map(x => [normName(x.title), x.title]))\n const links: string[] = []\n for (const t of [...(Array.isArray(raw.history) ? raw.history : []), ...(Array.isArray(raw.projects) ? raw.projects : [])]) {\n // The prompt lists events as \"date · title\"; a reply may copy the date.\n const title = allowed.get(normName(str(t).replace(/^\\d{4}-\\d{2}-\\d{2}\\s*·\\s*/, \"\")))\n if (title && !links.includes(title)) links.push(title)\n else if (!title && str(t)) dropped.push(`link ${str(t)}: no such page`)\n }\n return { overview, statements, links, dropped }\n}\n\n/** Put the overview at the top of the body, replacing an older one. */\nexport function withOverview(content: string, overview: string): string {\n const section = `## Overview\\n\\n${overview.trim()}\\n\\n${OVERVIEW_END}\\n`\n const span = overviewSpan(content)\n if (span) {\n const ours = content.slice(span.end, span.after) === OVERVIEW_END\n const followed = /^#{1,2}[ \\t]/m.test(content.slice(span.end, span.end + 4))\n // Replace the old text only when its end is certain (this job's marker,\n // or a heading) and, for someone else's, the call was shown all of it.\n // Otherwise keep it below, so nothing is lost.\n const replace = ours || (followed && bodyOf(content).length <= PAGE_CHARS)\n const rest = (replace ? content.slice(span.after) : content.slice(span.textStart)).trim()\n return `${content.slice(0, span.start)}${section}${rest ? `\\n${rest}\\n` : \"\"}`\n }\n return `${section}\\n${content.trim()}\\n`\n}\n\n/** Page meta with the new statements and links merged in. */\nexport function mergedMeta(meta: WikiArticleMeta, r: EnrichResult, today: string): WikiArticleMeta {\n const key = (s: WikiStatement) => `${s.property}\\n${normName(s.value)}`\n // This job's earlier facts are replaced as a whole; others' are kept.\n // A fact someone else already wrote stays theirs, with its status,\n // note and dates: tagging it as ours would drop it on a later run.\n const kept = (meta.statements ?? []).filter(s => s.by !== ENRICH_BY)\n const taken = new Set(kept.map(key))\n const statements = [\n ...kept,\n ...r.statements.filter(s => !taken.has(key(s))).map(s => ({ ...s, checked_at: today, by: ENRICH_BY })),\n ]\n const related = [...new Set([...(meta.related ?? []), ...r.links])]\n return { ...meta, statements: statements.length ? statements : undefined, related: related.length ? related : undefined, lastUpdated: today }\n}\n\n/** The page the result is written to: one this node owns, with the most sources. */\nexport function targetPage(hub: Pick<WikiHub, \"syncedFrom\">, e: Entity): GraphPage | undefined {\n return e.pages\n .filter(p => !hub.syncedFrom(p.agentId))\n .sort((a, b) => (b.article.meta.sources?.length ?? 0) - (a.article.meta.sources?.length ?? 0) || b.article.content.length - a.article.content.length)[0]\n}\n\nconst FOLDERS: Record<string, string> = { person: \"people\", organization: \"organizations\", project: \"projects\", place: \"places\" }\n\n/**\n * A new page for a thing the wiki only names in other pages, typed with\n * `class` so the graph does not have to guess. The enrichment that\n * follows writes its overview and facts from the pages that mention it.\n * Returns the page path, or null when the owner already has that title.\n */\nexport function createEntityPage(hub: WikiHub, name: string, type: string, owner: string, today: string): string | null {\n // Frontmatter is one line per key: a line break would end the title.\n const title = name.replace(/\\s+/g, \" \").trim()\n const store = hub.getAgentWiki(owner)\n if (store.listAllArticles().some(a => normName(a.meta.title) === normName(title))) return null\n const path = `${FOLDERS[type] ?? `${type}s`}/${normName(title).replace(/ /g, \"-\").slice(0, 80) || \"page\"}.md`\n const legacy = isWikiArticleType(type) ? type : undefined\n const meta: WikiArticleMeta = { title, type: legacy, class: type, tags: [], owner, access: \"shared\", created: today, lastUpdated: today, sources: [] }\n return store.writeArticle(path, meta, `${title}.\\n`, owner) ? path : null\n}\n\nexport function loadEnrichState(wikiDir: string): EnrichState {\n const file = resolve(wikiDir, \"_enrich\", \"state.json\")\n if (!existsSync(file)) return { entities: {} }\n try {\n const v = JSON.parse(readFileSync(file, \"utf-8\"))\n return v && typeof v.entities === \"object\" ? v : { entities: {} }\n } catch {\n return { entities: {} }\n }\n}\n\nexport function saveEnrichState(wikiDir: string, state: EnrichState): void {\n mkdirSync(resolve(wikiDir, \"_enrich\"), { recursive: true })\n writeFileSync(resolve(wikiDir, \"_enrich\", \"state.json\"), JSON.stringify(state, null, 2))\n}\n\nexport interface EnrichCall {\n (prompt: string): Promise<{ text: string; costUsd: number }>\n}\n\nexport interface EnrichOptions {\n types: string[]\n /** Entity ids or titles; empty means every entity of the types. */\n only: string[]\n max: number\n maxCostUsd: number\n dryRun: boolean\n /** Redo entities whose sources did not change. */\n force: boolean\n today: string\n /** Persists the state; called after every paid call. */\n save?: (state: EnrichState) => void\n}\n\nexport interface EnrichOutcome {\n entity: string\n title: string\n page?: string\n status: \"written\" | \"dry-run\" | \"unchanged\" | \"no-page\" | \"no-reply\" | \"nothing-new\" | \"failed\"\n statements: number\n links: number\n overview: boolean\n costUsd: number\n dropped: string[]\n /** Dry runs: the body that would be written, and the facts. */\n preview?: string\n facts?: WikiStatement[]\n}\n\nexport interface EnrichRun {\n outcomes: EnrichOutcome[]\n costUsd: number\n /** Set when the run stopped at its spending cap. */\n capped: boolean\n}\n\nexport async function runEnrich(hub: WikiHub, g: WikiGraph, call: EnrichCall, opts: EnrichOptions, state: EnrichState): Promise<EnrichRun> {\n const types = new Set(opts.types)\n const only = new Set(opts.only.map(normName))\n const size = (e: Entity) => e.sources.length + e.pages.length\n // Entities whose last calls failed go last, so they cannot starve the rest.\n const failures = (e: Entity) => state.entities[e.id]?.failures ?? 0\n const candidates = [...g.entities.values()]\n .filter(e => types.has(e.type))\n .filter(e => only.size === 0 || only.has(normName(e.id)) || only.has(normName(e.title)))\n .sort((a, b) => failures(a) - failures(b) || size(b) - size(a))\n const readEntries = (ids: string[]) => hub.getSharedStore().readEntries(ids)\n const run: EnrichRun = { outcomes: [], costUsd: 0, capped: false }\n let calls = 0\n // Saved after every paid call, so a run killed part-way (a job's\n // timeout, then its retry) does not pay for the same entities again.\n const remember = (id: string, fp: string, costUsd: number, failed = false) => {\n if (opts.dryRun) return\n const prev = state.entities[id]\n state.entities[id] = failed\n ? { fingerprint: prev?.fingerprint ?? \"\", at: new Date().toISOString(), costUsd, failures: (prev?.failures ?? 0) + 1 }\n : { fingerprint: fp, at: new Date().toISOString(), costUsd }\n opts.save?.(state)\n }\n\n for (const e of candidates) {\n if (calls >= opts.max) break\n const base = { entity: e.id, title: e.title, statements: 0, links: 0, overview: false, costUsd: 0, dropped: [] as string[] }\n const page = targetPage(hub, e)\n if (!page) { run.outcomes.push({ ...base, status: \"no-page\" }); continue }\n const ctx = enrichContext(g, e, readEntries, page)\n const fp = fingerprint(ctx)\n if (!opts.force && state.entities[e.id]?.fingerprint === fp) {\n if (only.size) run.outcomes.push({ ...base, status: \"unchanged\" })\n continue\n }\n if (run.costUsd >= opts.maxCostUsd) { run.capped = true; break }\n\n calls++\n const label = g.ontology.types.find(t => t.id === e.type)?.label ?? e.type\n const where = `${page.agentId}/${page.article.path}`\n let reply: { text: string; costUsd: number }\n try {\n reply = await call(buildEnrichPrompt(ctx, label, opts.today))\n } catch (err) {\n run.outcomes.push({ ...base, page: where, status: \"failed\", dropped: [(err as Error).message.slice(0, 200)] })\n remember(e.id, fp, 0, true)\n continue\n }\n run.costUsd += reply.costUsd\n const parsed = parseEnrichReply(reply.text)\n const outcome: EnrichOutcome = { ...base, page: where, status: \"no-reply\", costUsd: reply.costUsd }\n // A paid answer with nothing usable is remembered too: the same\n // sources would give the same answer.\n if (!parsed) { run.outcomes.push(outcome); remember(e.id, fp, reply.costUsd); continue }\n const r = checkEnrichment(parsed, ctx, g)\n Object.assign(outcome, { statements: r.statements.length, links: r.links.length, overview: !!r.overview, dropped: r.dropped })\n if (!r.overview && r.statements.length === 0 && r.links.length === 0) {\n outcome.status = \"nothing-new\"\n run.outcomes.push(outcome)\n remember(e.id, fp, reply.costUsd)\n continue\n }\n\n const withNew = (a: { content: string }) => (r.overview ? withOverview(a.content, r.overview) : a.content)\n if (opts.dryRun) {\n run.outcomes.push({ ...outcome, status: \"dry-run\", preview: withNew(page.article), facts: r.statements })\n continue\n }\n const store = hub.getAgentWiki(page.agentId)\n // Absorb may have changed the page while the run waited for the model:\n // merge onto what is on disk now, not the copy read at the start.\n const current = store.readArticle(page.article.path)\n const ok = !!current && store.writeArticle(page.article.path, mergedMeta(current.meta, r, opts.today), withNew(current), current.meta.owner || page.agentId)\n if (!ok) {\n outcome.status = \"failed\"\n outcome.dropped.push(current ? \"write refused\" : \"the page was moved or removed during the run\")\n run.outcomes.push(outcome)\n remember(e.id, fp, reply.costUsd, true)\n continue\n }\n store.rebuildIndex()\n remember(e.id, fp, reply.costUsd)\n outcome.status = \"written\"\n run.outcomes.push(outcome)\n }\n return run\n}\n"],"mappings":"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","names":["createHash","existsSync","mkdirSync","readFileSync","writeFileSync","resolve","ENRICH_BY","ENRICH_TYPES","PERSON_RELATION_TYPES","PAGE_CHARS","ENTRY_CHARS","lensProperties","g","type","lens","t","out","panel","panelSource","id","panelFrom","def","p","namedIn","e","name","normName","x","readers","m","readableAlongside","source","target","s","a","enrichContext","readEntries","readable","visible","pages","sources","linked","linkedEntities","byId","list","events","b","projects","neighbours","entries","properties","ranges","range","mentionsOf","max","names","n","escaped","re","other","page","body","bodyOf","start","excerpt","fingerprint","ctx","parts","createHash","clip","buildEnrichPrompt","typeLabel","today","lines","en","label","parseEnrichReply","text","fenced","raw","v","DATE","str","checkEnrichment","dropped","overview","end","sourceIds","statements","seen","item","property","value","targetId","key","st","role","allowed","links","title","withOverview","content","section","OVERVIEW_END","span","overviewSpan","ours","followed","rest","mergedMeta","meta","r","kept","taken","related","targetPage","hub","FOLDERS","createEntityPage","owner","store","path","legacy","isWikiArticleType","loadEnrichState","wikiDir","file","resolve","existsSync","readFileSync","saveEnrichState","state","mkdirSync","writeFileSync","runEnrich","call","opts","types","only","size","failures","candidates","ids","run","calls","remember","fp","costUsd","failed","prev","base","where","reply","err","parsed","outcome","withNew","current"]}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{a as E,k as A}from"./chunk-H4NSB54D.js";import"./chunk-MTX4UPNB.js";import{f as g}from"./chunk-QAWKN2N4.js";import"./chunk-IMLAPB7G.js";import{a as w}from"./chunk-ROLSSYXE.js";import"./chunk-QIJLFPWE.js";var b="wiki-events",k="importance_set",x=new Set(["event","due_date","topic"]),M=10,P=320;function j(n,e,c){let o=new Set(c.map(i=>i.toLowerCase()));for(let i of n??[])if(!(!w.includes(i.level)||!i.title&&!i.tags?.length)){if(i.title){let r;try{r=new RegExp(i.title,"i")}catch{continue}if(!r.test(e))continue}if(i.unless){let r;try{r=new RegExp(i.unless,"i")}catch{continue}if(r.test(e))continue}if(!(i.tags?.length&&!i.tags.some(r=>o.has(r.toLowerCase()))))return i.level}}function R(n,e){let c=` ${g(e)} `,o=[];for(let i of n.entities.values()){if(x.has(i.type))continue;let r=g(i.title);r.length>=4&&c.includes(` ${r} `)&&o.push(i)}return o}function L(n,e){let c=E(n,e,null).filter(i=>!x.has(i.type)),o=R(n,e.title);return[...new Map([...o,...c].map(i=>[i.id,i])).values()].slice(0,M)}function S(n,e){return e.pages.find(c=>!n.syncedFrom(c.agentId))}function O(n){return(n.statements??[]).some(e=>e.by===b&&e.property===k)}function _(n){return n.pages.some(e=>e.article.meta.importance&&!O(e.article.meta))}function C(n,e,c){let o=new Set;for(let p of c.about){let s=e.names.get(g(p))??(e.entities.has(p)?p:void 0);s&&o.add(s)}let i=[],r=[],a=[...e.entities.values()].filter(p=>p.type==="event").sort((p,s)=>(s.date||"").localeCompare(p.date||""));for(let p of a){if(p.pages.some(t=>t.article.meta.importance)&&(!c.force||_(p)))continue;let f=L(e,p);if(c.about.length&&!f.some(t=>o.has(t.id)))continue;let m=S(n,p);if(!m){r.push(p);continue}i.push({event:p,page:m,candidates:f})}return{items:i,noPage:r}}var W=(n,e)=>n.length>e?`${n.slice(0,e)}\u2026`:n;function G(n,e){let c=["You are sorting the event pages of a company wiki by importance, and saying what each event is about.","","Levels:","- minor: routine upkeep or a small incident with no lasting effect (a disk filled and was cleaned, a job was restarted, a reminder was sent).","- normal: something a person would want in the history of the thing it is about (a delivery, a payment, an outage that was noticed, a meeting with an outcome).","- major: a turning point (a client won or lost, a contract signed, a legal or financial deadline missed, data lost, a decision that changes how things are done).","When unsure between two levels, pick the lower one.","","## Events"];return n.forEach((o,i)=>{let r=W(A(o.page.article.content).replace(/\s+/g," ").trim(),P);c.push(`### ${i+1}. ${o.event.title} (${o.event.date||"no date"})`,r||"(no text)"),c.push(o.candidates.length?`May be about: ${o.candidates.map(a=>`"${a.title}" (${a.type})`).join(", ")}`:"May be about: nothing listed","")}),c.push("## Task","Return one JSON object and nothing else:",'{"events": [{"n": 1, "importance": "minor", "about": ["Exact Title"], "why": "one short reason"}]}',"","Rules:",`- One item per event, with its number. importance is one of ${w.join(", ")}.`,`- about: only titles from that event's own "May be about" list, copied exactly, and only the ones the event really concerns: the machine that failed, the client it was for, the person it happened to. Often one, at most three. Leave it empty when none fits.`,"- why: under 15 words, in English.",...e.importance.major_set_by==="owner"?["- major is only a suggestion here: the owner confirms it."]:[]),c.join(`
|
|
2
|
-
`)}function U(n){let e=n.match(/```(?:json)?\s*\n([\s\S]*?)\n```/),c=e?e[1]:n.slice(n.indexOf("{"),n.lastIndexOf("}")+1);try{let o=JSON.parse(c);return o&&typeof o=="object"&&!Array.isArray(o)?o:null}catch{return null}}function $(n,e){return n==="major"&&e.importance.major_set_by==="owner"?{importance:"normal",proposed:"major"}:{importance:n}}function V(n,e,c){let o=new Map,i=U(n);for(let r of Array.isArray(i?.events)?i.events:[]){let a=r??{},p=Number(a.n)-1,s=e[p];if(!Number.isInteger(p)||!s||o.has(p))continue;let f=String(a.importance??"").trim().toLowerCase();if(!w.includes(f))continue;let m=[],t=new Map(s.candidates.map(u=>[g(u.title),u.title])),l=[];for(let u of Array.isArray(a.about)?a.about:[]){let d=t.get(g(String(u??"")));d&&!l.includes(d)?l.push(d):!d&&String(u??"").trim()&&m.push(`about ${String(u).trim().slice(0,80)}: not in the list shown`)}l.length>3&&m.push(`about: kept the first 3 of ${l.length}`);let h=typeof a.why=="string"?W(a.why.trim(),160):void 0;o.set(p,{verdict:{...$(f,c),about:l.slice(0,3),why:h||void 0,by:"model"},dropped:m})}return o}function N(n,e,c){let o=(n.statements??[]).filter(a=>a.by!==b),i=new Set(o.filter(a=>a.property==="involves").map(a=>g(a.value))),r=e.about.filter(a=>!i.has(g(a))).map(a=>({property:"involves",value:a,checked_at:c,by:b}));return r.push({property:k,value:e.proposed??e.importance,checked_at:c,by:b,...e.why?{note:e.why}:{}}),{...n,importance:e.importance,importanceProposed:e.proposed,statements:[...o,...r]}}async function F(n,e,c,o){let i=e.ontology,{items:r,noPage:a}=C(n,e,o),p=r.slice(0,o.max),s={outcomes:[],costUsd:0,calls:0,capped:!1,left:r.length-p.length};for(let t of o.about.length?a:[])s.outcomes.push({event:t.id,title:t.title,date:t.date,status:"no-page",about:[],dropped:["its pages are copied from another node"]});let f=(t,l,h)=>{let u=`${t.page.agentId}/${t.page.article.path}`,d={event:t.event.id,title:t.event.title,date:t.event.date,page:u,status:"dry-run",importance:l.importance,proposed:l.proposed,about:l.about,by:l.by,why:l.why,dropped:h};if(o.dryRun){s.outcomes.push(d);return}let y=n.getAgentWiki(t.page.agentId),v=y.readArticle(t.page.article.path);if(!v){s.outcomes.push({...d,status:"failed",dropped:[...h,"the page was moved or removed during the run"]});return}if(v.meta.importance&&!O(v.meta)){s.outcomes.push({...d,status:"failed",dropped:[...h,"a level was set on the page during the run"]});return}let I=y.writeArticle(t.page.article.path,N(v.meta,l,o.today),v.content,v.meta.owner||t.page.agentId);s.outcomes.push({...d,status:I?"written":"failed",dropped:I?h:[...h,"write refused"]})},m=[];for(let t of p){let l=j(i.importance.rules,t.event.title,t.page.article.meta.tags??[]);if(!l){m.push(t);continue}let h=new Set(R(e,t.event.title).map(d=>d.id)),u=t.candidates.filter(d=>h.has(d.id)).slice(0,3).map(d=>d.title);f(t,{...$(l,i),about:u,why:"matched an importance rule",by:"rule"},[])}if(o.rulesOnly)return s.left+=m.length,s;for(let t=0;t<m.length;t+=o.batch){let l=m.slice(t,t+o.batch);if(s.costUsd>=o.maxCostUsd){s.capped=!0,s.left+=m.length-t;break}s.calls++;let h;try{let u=await c(G(l,i));s.costUsd+=u.costUsd,h=V(u.text,l,i)}catch(u){for(let d of l)s.outcomes.push({event:d.event.id,title:d.event.title,date:d.event.date,page:`${d.page.agentId}/${d.page.article.path}`,status:"failed",about:[],dropped:[u.message.slice(0,200)]});continue}l.forEach((u,d)=>{let y=h.get(d);y?f(u,y.verdict,y.dropped):s.outcomes.push({event:u.event.id,title:u.event.title,date:u.event.date,page:`${u.page.agentId}/${u.page.article.path}`,status:"no-answer",about:[],dropped:["the reply had no usable item for this event"]})})}if(!o.dryRun)for(let t of new Set(s.outcomes.filter(l=>l.status==="written").map(l=>l.page.split("/")[0])))n.getAgentWiki(t).rebuildIndex();return s}function Y(n,e,c,o){let i=e.names.get(g(c))??(e.entities.has(c)?c:void 0),r=i?e.entities.get(i):void 0;if(!r)return{ok:!1,reason:`no page is titled "${c}"`};if(r.type!=="event")return{ok:!1,title:r.title,reason:`"${r.title}" is a ${r.type}, not an event`};let a=S(n,r);if(!a)return{ok:!1,title:r.title,reason:"its pages are copied from another node; set the level there"};let p=n.getAgentWiki(a.agentId),s=p.readArticle(a.article.path)??a.article,f=(s.meta.statements??[]).filter(l=>!(l.by===b&&l.property===k)),m={...s.meta,importance:o,importanceProposed:void 0,statements:f.length?f:void 0},t=p.writeArticle(a.article.path,m,s.content,s.meta.owner||a.agentId);return t&&p.rebuildIndex(),{ok:t,title:r.title,page:`${a.agentId}/${a.article.path}`,reason:t?void 0:"write refused"}}function J(n,e,c){let o=[],i=new Map(e.outcomes.filter(r=>r.importance).map(r=>[r.event,r]));for(let r of c){let a=n.names.get(g(r))??(n.entities.has(r)?r:void 0),p=a?n.entities.get(a):void 0;if(!p)continue;let s=new Set(E(n,p,new Set(["event"])).map(t=>t.id)),f={minor:0,normal:0,major:0},m=new Set;for(let t of n.entities.values()){if(t.type!=="event")continue;let l=i.get(t.id);!(s.has(t.id)||l?.about.some(u=>g(u)===g(p.title)))||m.has(t.id)||(m.add(t.id),f[l?.importance??t.importance]++)}o.push({title:p.title,type:p.type,before:s.size,after:f})}return o}export{b as EVENTS_BY,G as buildEventsPrompt,V as checkEventsReply,L as eventCandidates,N as eventMeta,C as pickEvents,j as ruleLevel,F as runEvents,Y as setEventLevel,J as summariseAbout};
|
|
3
|
-
//# sourceMappingURL=event-levels-7CY7AJLY.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/wiki/event-levels.ts"],"sourcesContent":["// --- Give each event an importance level and the pages it is about (#811) ---\n//\n// Event pages are half the wiki, and until a level is set they all show\n// as `normal` beside decisions and client events. This pass reads the\n// event pages (never the raw entries) and writes, per event:\n// - `importance`: minor, normal or major;\n// - `involves` statements: the people, organisations, assets or\n// projects the event is about, so it shows in their History.\n// The ontology's `importance.rules` decide first, for free. What they\n// leave is sent to a model in batches. Each answer is checked against\n// what the call was shown before a page is written through the store,\n// which keeps the old version. Where only the owner may set `major`, a\n// suggested `major` is stored as a proposal and the event stays `normal`.\n\nimport type { WikiHub } from \"./hub\"\nimport type { WikiArticleMeta } from \"./types\"\nimport { normName, type Entity, type GraphPage, type WikiGraph } from \"./ontology/graph\"\nimport { linkedEntities } from \"./ontology/lens\"\nimport { IMPORTANCE_LEVELS, type Importance, type ImportanceRule, type Ontology, type WikiStatement } from \"./ontology/types\"\nimport { bodyOf } from \"./ontology/view-entity\"\n\nexport const EVENTS_BY = \"wiki-events\"\n/** Statement that records this job set the level; the owner's `set` removes it. */\nconst LEVEL_MARK = \"importance_set\"\n\n/** Types an event can be about. Events, due dates and topics are not. */\nconst ABOUT_SKIP = new Set([\"event\", \"due_date\", \"topic\"])\nconst MAX_CANDIDATES = 10\nconst BODY_CHARS = 320\n\nexport interface EventItem {\n event: Entity\n /** The page the result is written to: one this node owns. */\n page: GraphPage\n /** Entities the event may be about: linked to it, or named in its title. */\n candidates: Entity[]\n}\n\nexport interface EventVerdict {\n importance: Importance\n /** Set when `major` was suggested but only the owner may set it. */\n proposed?: Importance\n /** Titles of the candidates the event is about. */\n about: string[]\n why?: string\n by: \"rule\" | \"model\"\n}\n\nexport interface EventOutcome {\n event: string\n title: string\n date: string\n page?: string\n status: \"written\" | \"dry-run\" | \"no-page\" | \"no-answer\" | \"failed\"\n importance?: Importance\n proposed?: Importance\n about: string[]\n by?: \"rule\" | \"model\"\n why?: string\n dropped: string[]\n}\n\nexport interface EventsRun {\n outcomes: EventOutcome[]\n costUsd: number\n calls: number\n /** Set when the run stopped at its spending cap. */\n capped: boolean\n /** Events without a level that this run did not reach. */\n left: number\n}\n\nexport interface EventsCall {\n (prompt: string): Promise<{ text: string; costUsd: number }>\n}\n\nexport interface EventsOptions {\n /** Entity ids or titles: only events linked to or naming them. */\n about: string[]\n /** Most events per run. */\n max: number\n /** Events per model call. */\n batch: number\n maxCostUsd: number\n dryRun: boolean\n /** Redo events that already have a level set by this job. */\n force: boolean\n /** Skip the model: only the ontology's rules decide. */\n rulesOnly: boolean\n today: string\n}\n\n/** The first rule that matches the event, if any. */\nexport function ruleLevel(rules: ImportanceRule[] | undefined, title: string, tags: string[]): Importance | undefined {\n const have = new Set(tags.map(t => t.toLowerCase()))\n for (const r of rules ?? []) {\n if (!IMPORTANCE_LEVELS.includes(r.level) || (!r.title && !r.tags?.length)) continue\n if (r.title) {\n let re: RegExp\n try { re = new RegExp(r.title, \"i\") } catch { continue } // reported by checkOntology\n if (!re.test(title)) continue\n }\n if (r.unless) {\n let re: RegExp\n try { re = new RegExp(r.unless, \"i\") } catch { continue } // reported by checkOntology\n if (re.test(title)) continue\n }\n if (r.tags?.length && !r.tags.some(t => have.has(t.toLowerCase()))) continue\n return r.level\n }\n return undefined\n}\n\n/** Entities whose name appears as whole words in `text`. */\nfunction namedEntities(g: WikiGraph, text: string): Entity[] {\n const hay = ` ${normName(text)} `\n const out: Entity[] = []\n for (const e of g.entities.values()) {\n if (ABOUT_SKIP.has(e.type)) continue\n const name = normName(e.title)\n if (name.length >= 4 && hay.includes(` ${name} `)) out.push(e)\n }\n return out\n}\n\n/** What the event may be about: pages it links to or that link to it,\n * then pages its title names. Linked ones first. */\nexport function eventCandidates(g: WikiGraph, ev: Entity): Entity[] {\n const linked = linkedEntities(g, ev, null).filter(x => !ABOUT_SKIP.has(x.type))\n const named = namedEntities(g, ev.title)\n return [...new Map([...named, ...linked].map(x => [x.id, x])).values()].slice(0, MAX_CANDIDATES)\n}\n\nfunction localPage(hub: Pick<WikiHub, \"syncedFrom\">, e: Entity): GraphPage | undefined {\n return e.pages.find(p => !hub.syncedFrom(p.agentId))\n}\n\n/** True when this job set the page's level. */\nfunction ownLevel(meta: WikiArticleMeta): boolean {\n return (meta.statements ?? []).some(s => s.by === EVENTS_BY && s.property === LEVEL_MARK)\n}\n\n/** True when the level on the event was set by a person or another job. */\nfunction setByOthers(ev: Entity): boolean {\n return ev.pages.some(p => p.article.meta.importance && !ownLevel(p.article.meta))\n}\n\n/** Events this run should look at, newest first. */\nexport function pickEvents(hub: Pick<WikiHub, \"syncedFrom\">, g: WikiGraph, opts: Pick<EventsOptions, \"about\" | \"force\">): { items: EventItem[]; noPage: Entity[] } {\n const scope = new Set<string>()\n for (const name of opts.about) {\n const id = g.names.get(normName(name)) ?? (g.entities.has(name) ? name : undefined)\n if (id) scope.add(id)\n }\n const items: EventItem[] = []\n const noPage: Entity[] = []\n const events = [...g.entities.values()].filter(e => e.type === \"event\").sort((a, b) => (b.date || \"\").localeCompare(a.date || \"\"))\n for (const ev of events) {\n const hasLevel = ev.pages.some(p => p.article.meta.importance)\n // A level a person set is never redone; --force redoes only this job's.\n if (hasLevel && (!opts.force || setByOthers(ev))) continue\n const candidates = eventCandidates(g, ev)\n if (opts.about.length && !candidates.some(c => scope.has(c.id))) continue\n const page = localPage(hub, ev)\n if (!page) { noPage.push(ev); continue }\n items.push({ event: ev, page, candidates })\n }\n return { items, noPage }\n}\n\nconst clip = (s: string, n: number) => (s.length > n ? `${s.slice(0, n)}…` : s)\n\nexport function buildEventsPrompt(items: EventItem[], o: Ontology): string {\n const lines: string[] = [\n \"You are sorting the event pages of a company wiki by importance, and saying what each event is about.\",\n \"\",\n \"Levels:\",\n \"- minor: routine upkeep or a small incident with no lasting effect (a disk filled and was cleaned, a job was restarted, a reminder was sent).\",\n \"- normal: something a person would want in the history of the thing it is about (a delivery, a payment, an outage that was noticed, a meeting with an outcome).\",\n \"- major: a turning point (a client won or lost, a contract signed, a legal or financial deadline missed, data lost, a decision that changes how things are done).\",\n \"When unsure between two levels, pick the lower one.\",\n \"\",\n \"## Events\",\n ]\n items.forEach((it, i) => {\n const body = clip(bodyOf(it.page.article.content).replace(/\\s+/g, \" \").trim(), BODY_CHARS)\n lines.push(`### ${i + 1}. ${it.event.title} (${it.event.date || \"no date\"})`, body || \"(no text)\")\n lines.push(it.candidates.length ? `May be about: ${it.candidates.map(c => `\"${c.title}\" (${c.type})`).join(\", \")}` : \"May be about: nothing listed\", \"\")\n })\n lines.push(\n \"## Task\",\n \"Return one JSON object and nothing else:\",\n `{\"events\": [{\"n\": 1, \"importance\": \"minor\", \"about\": [\"Exact Title\"], \"why\": \"one short reason\"}]}`,\n \"\",\n \"Rules:\",\n `- One item per event, with its number. importance is one of ${IMPORTANCE_LEVELS.join(\", \")}.`,\n \"- about: only titles from that event's own \\\"May be about\\\" list, copied exactly, and only the ones the event really concerns: the machine that failed, the client it was for, the person it happened to. Often one, at most three. Leave it empty when none fits.\",\n \"- why: under 15 words, in English.\",\n ...(o.importance.major_set_by === \"owner\" ? [\"- major is only a suggestion here: the owner confirms it.\"] : []),\n )\n return lines.join(\"\\n\")\n}\n\n/** The JSON object in the reply, fenced or not. */\nfunction parseReply(text: string): Record<string, unknown> | null {\n const fenced = text.match(/```(?:json)?\\s*\\n([\\s\\S]*?)\\n```/)\n const raw = fenced ? fenced[1] : text.slice(text.indexOf(\"{\"), text.lastIndexOf(\"}\") + 1)\n try {\n const v = JSON.parse(raw)\n return v && typeof v === \"object\" && !Array.isArray(v) ? v as Record<string, unknown> : null\n } catch {\n return null\n }\n}\n\n/** Keep `major` for the owner where the ontology says so. */\nfunction withOwnerRule(level: Importance, o: Ontology): Pick<EventVerdict, \"importance\" | \"proposed\"> {\n if (level === \"major\" && o.importance.major_set_by === \"owner\") return { importance: \"normal\", proposed: \"major\" }\n return { importance: level }\n}\n\n/** Per-event verdicts from one reply, keeping only what the call was shown. */\nexport function checkEventsReply(text: string, items: EventItem[], o: Ontology): Map<number, { verdict: EventVerdict; dropped: string[] }> {\n const out = new Map<number, { verdict: EventVerdict; dropped: string[] }>()\n const parsed = parseReply(text)\n for (const raw of Array.isArray(parsed?.events) ? parsed!.events as unknown[] : []) {\n const r = (raw ?? {}) as Record<string, unknown>\n const at = Number(r.n) - 1\n const it = items[at]\n if (!Number.isInteger(at) || !it || out.has(at)) continue\n const level = String(r.importance ?? \"\").trim().toLowerCase() as Importance\n if (!IMPORTANCE_LEVELS.includes(level)) continue\n const dropped: string[] = []\n const allowed = new Map(it.candidates.map(c => [normName(c.title), c.title]))\n const about: string[] = []\n for (const t of Array.isArray(r.about) ? r.about : []) {\n const title = allowed.get(normName(String(t ?? \"\")))\n if (title && !about.includes(title)) about.push(title)\n else if (!title && String(t ?? \"\").trim()) dropped.push(`about ${String(t).trim().slice(0, 80)}: not in the list shown`)\n }\n if (about.length > 3) dropped.push(`about: kept the first 3 of ${about.length}`)\n const why = typeof r.why === \"string\" ? clip(r.why.trim(), 160) : undefined\n out.set(at, { verdict: { ...withOwnerRule(level, o), about: about.slice(0, 3), why: why || undefined, by: \"model\" }, dropped })\n }\n return out\n}\n\n/** Page meta with the level and this job's `involves` facts replaced. */\nexport function eventMeta(meta: WikiArticleMeta, v: EventVerdict, today: string): WikiArticleMeta {\n const kept = (meta.statements ?? []).filter(s => s.by !== EVENTS_BY)\n const taken = new Set(kept.filter(s => s.property === \"involves\").map(s => normName(s.value)))\n const added: WikiStatement[] = v.about\n .filter(t => !taken.has(normName(t)))\n .map(t => ({ property: \"involves\", value: t, checked_at: today, by: EVENTS_BY }))\n // The marker records that this job set the level, so --force may redo it.\n added.push({ property: LEVEL_MARK, value: v.proposed ?? v.importance, checked_at: today, by: EVENTS_BY, ...(v.why ? { note: v.why } : {}) })\n // `lastUpdated` stays: the level and links are not news about the event,\n // and the catalog sorts and labels pages by that date.\n return { ...meta, importance: v.importance, importanceProposed: v.proposed, statements: [...kept, ...added] }\n}\n\nexport async function runEvents(hub: WikiHub, g: WikiGraph, call: EventsCall, opts: EventsOptions): Promise<EventsRun> {\n const o = g.ontology\n const { items: all, noPage } = pickEvents(hub, g, opts)\n const items = all.slice(0, opts.max)\n const run: EventsRun = { outcomes: [], costUsd: 0, calls: 0, capped: false, left: all.length - items.length }\n for (const ev of opts.about.length ? noPage : []) {\n run.outcomes.push({ event: ev.id, title: ev.title, date: ev.date, status: \"no-page\", about: [], dropped: [\"its pages are copied from another node\"] })\n }\n\n const write = (it: EventItem, v: EventVerdict, dropped: string[]): void => {\n const where = `${it.page.agentId}/${it.page.article.path}`\n const base: EventOutcome = { event: it.event.id, title: it.event.title, date: it.event.date, page: where, status: \"dry-run\", importance: v.importance, proposed: v.proposed, about: v.about, by: v.by, why: v.why, dropped }\n if (opts.dryRun) { run.outcomes.push(base); return }\n const store = hub.getAgentWiki(it.page.agentId)\n // Absorb or a person may have changed the page while the run waited\n // for the model: write onto what is on disk now, not the copy read\n // at the start.\n const current = store.readArticle(it.page.article.path)\n if (!current) { run.outcomes.push({ ...base, status: \"failed\", dropped: [...dropped, \"the page was moved or removed during the run\"] }); return }\n if (current.meta.importance && !ownLevel(current.meta)) {\n run.outcomes.push({ ...base, status: \"failed\", dropped: [...dropped, \"a level was set on the page during the run\"] })\n return\n }\n const ok = store.writeArticle(it.page.article.path, eventMeta(current.meta, v, opts.today), current.content, current.meta.owner || it.page.agentId)\n run.outcomes.push({ ...base, status: ok ? \"written\" : \"failed\", dropped: ok ? dropped : [...dropped, \"write refused\"] })\n }\n\n // Rules first: free, and the same answer every run.\n const forModel: EventItem[] = []\n for (const it of items) {\n const level = ruleLevel(o.importance.rules, it.event.title, it.page.article.meta.tags ?? [])\n if (!level) { forModel.push(it); continue }\n // A rule gives the level only; what the title names is what it is about.\n const named = new Set(namedEntities(g, it.event.title).map(e => e.id))\n const about = it.candidates.filter(c => named.has(c.id)).slice(0, 3).map(c => c.title)\n write(it, { ...withOwnerRule(level, o), about, why: \"matched an importance rule\", by: \"rule\" }, [])\n }\n if (opts.rulesOnly) {\n run.left += forModel.length\n return run\n }\n\n for (let i = 0; i < forModel.length; i += opts.batch) {\n const batch = forModel.slice(i, i + opts.batch)\n if (run.costUsd >= opts.maxCostUsd) {\n run.capped = true\n run.left += forModel.length - i\n break\n }\n run.calls++\n let verdicts: ReturnType<typeof checkEventsReply>\n try {\n const reply = await call(buildEventsPrompt(batch, o))\n run.costUsd += reply.costUsd\n verdicts = checkEventsReply(reply.text, batch, o)\n } catch (err) {\n for (const it of batch) {\n run.outcomes.push({ event: it.event.id, title: it.event.title, date: it.event.date, page: `${it.page.agentId}/${it.page.article.path}`, status: \"failed\", about: [], dropped: [(err as Error).message.slice(0, 200)] })\n }\n continue\n }\n batch.forEach((it, at) => {\n const v = verdicts.get(at)\n if (v) write(it, v.verdict, v.dropped)\n else run.outcomes.push({ event: it.event.id, title: it.event.title, date: it.event.date, page: `${it.page.agentId}/${it.page.article.path}`, status: \"no-answer\", about: [], dropped: [\"the reply had no usable item for this event\"] })\n })\n }\n if (!opts.dryRun) {\n for (const agentId of new Set(run.outcomes.filter(x => x.status === \"written\").map(x => x.page!.split(\"/\")[0]))) {\n hub.getAgentWiki(agentId).rebuildIndex()\n }\n }\n return run\n}\n\n/** The owner's own word: set a level on an event and clear any proposal. */\nexport function setEventLevel(hub: WikiHub, g: WikiGraph, name: string, level: Importance): { ok: boolean; title?: string; page?: string; reason?: string } {\n const id = g.names.get(normName(name)) ?? (g.entities.has(name) ? name : undefined)\n const ev = id ? g.entities.get(id) : undefined\n if (!ev) return { ok: false, reason: `no page is titled \"${name}\"` }\n if (ev.type !== \"event\") return { ok: false, title: ev.title, reason: `\"${ev.title}\" is a ${ev.type}, not an event` }\n const page = localPage(hub, ev)\n if (!page) return { ok: false, title: ev.title, reason: \"its pages are copied from another node; set the level there\" }\n // Dropping this job's marker makes the level the owner's: no run redoes it.\n const store = hub.getAgentWiki(page.agentId)\n const current = store.readArticle(page.article.path) ?? page.article\n const statements = (current.meta.statements ?? []).filter(s => !(s.by === EVENTS_BY && s.property === LEVEL_MARK))\n const meta: WikiArticleMeta = { ...current.meta, importance: level, importanceProposed: undefined, statements: statements.length ? statements : undefined }\n const ok = store.writeArticle(page.article.path, meta, current.content, current.meta.owner || page.agentId)\n if (ok) store.rebuildIndex()\n return { ok, title: ev.title, page: `${page.agentId}/${page.article.path}`, reason: ok ? undefined : \"write refused\" }\n}\n\nexport interface AboutSummary {\n title: string\n type: string\n /** Events in its History before this run, and how they split after. */\n before: number\n after: Record<Importance, number>\n}\n\n/** For a pilot: what each named page's History looks like after the run. */\nexport function summariseAbout(g: WikiGraph, run: EventsRun, about: string[]): AboutSummary[] {\n const out: AboutSummary[] = []\n const byEvent = new Map(run.outcomes.filter(x => x.importance).map(x => [x.event, x]))\n for (const name of about) {\n const id = g.names.get(normName(name)) ?? (g.entities.has(name) ? name : undefined)\n const e = id ? g.entities.get(id) : undefined\n if (!e) continue\n const linkedBefore = new Set(linkedEntities(g, e, new Set([\"event\"])).map(x => x.id))\n const after: Record<Importance, number> = { minor: 0, normal: 0, major: 0 }\n const seen = new Set<string>()\n for (const ev of g.entities.values()) {\n if (ev.type !== \"event\") continue\n const o = byEvent.get(ev.id)\n const linkedAfter = linkedBefore.has(ev.id) || !!o?.about.some(t => normName(t) === normName(e.title))\n if (!linkedAfter || seen.has(ev.id)) continue\n seen.add(ev.id)\n after[o?.importance ?? ev.importance]++\n }\n out.push({ title: e.title, type: e.type, before: linkedBefore.size, after })\n }\n return out\n}\n"],"mappings":"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","names":["EVENTS_BY","LEVEL_MARK","ABOUT_SKIP","MAX_CANDIDATES","BODY_CHARS","ruleLevel","rules","title","tags","have","t","r","IMPORTANCE_LEVELS","re","namedEntities","g","text","hay","normName","out","e","name","eventCandidates","ev","linked","linkedEntities","x","named","localPage","hub","p","ownLevel","meta","s","setByOthers","pickEvents","opts","scope","id","items","noPage","events","a","b","candidates","c","page","clip","n","buildEventsPrompt","o","lines","it","body","bodyOf","parseReply","fenced","raw","v","withOwnerRule","level","checkEventsReply","parsed","at","dropped","allowed","about","why","eventMeta","today","kept","taken","added","runEvents","call","all","run","write","where","base","store","current","ok","forModel","i","batch","verdicts","reply","err","agentId","setEventLevel","statements","summariseAbout","byEvent","linkedBefore","after","seen"]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a,b,c,d,e,f}from"./chunk-KXR6GVL7.js";import"./chunk-KA2UIZXG.js";import"./chunk-GQ76J72O.js";import"./chunk-ILEC3IAV.js";import"./chunk-QIJLFPWE.js";export{d as approveFactProposal,c as listFactProposals,a as parseClaim,b as proposeFacts,e as rejectFactProposal,f as routeMemo};
|
|
2
|
-
//# sourceMappingURL=fact-proposals-LZWS5KFO.js.map
|
package/dist/hub-MVX3U6A2.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a}from"./chunk-SN7YH4E4.js";import"./chunk-MUVE3UAS.js";import"./chunk-KEXBEUSU.js";import"./chunk-ROLSSYXE.js";import"./chunk-ERULJ2ZL.js";import"./chunk-WPNRDEHW.js";import"./chunk-4XMALK7X.js";import"./chunk-72SZI2UW.js";import"./chunk-FCPTN6NF.js";import"./chunk-MCI3DIWW.js";import"./chunk-QOYAX2FT.js";import"./chunk-2PJKGZWP.js";import"./chunk-7I7IEX4S.js";import"./chunk-DYGQF3MI.js";import"./chunk-BRK6M6LA.js";import"./chunk-UIBUZ2N3.js";import"./chunk-2QNT5JDS.js";import"./chunk-RGDKHYY2.js";import"./chunk-QIJLFPWE.js";export{a as WikiHub};
|
|
2
|
-
//# sourceMappingURL=hub-MVX3U6A2.js.map
|
package/dist/ledger-CH7R756S.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{b,c,d,e,f}from"./chunk-KA2UIZXG.js";import"./chunk-GQ76J72O.js";import{a}from"./chunk-ILEC3IAV.js";import"./chunk-QIJLFPWE.js";export{c as FactLedger,a as assertPerson,d as factContradictions,b as factId,e as isStaleFact,f as matchFact};
|
|
2
|
-
//# sourceMappingURL=ledger-CH7R756S.js.map
|