agentix-cli 0.135.0 → 0.135.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/dist/{absorb-eval-WY3YMLS4.js → absorb-eval-YT5TOTC7.js} +2 -2
- package/dist/{agent-3R5NY7I3.js → agent-DRUIMWF5.js} +2 -2
- package/dist/{board-dashboard-U3ZSCO62.js → board-dashboard-2524GN5N.js} +2 -2
- package/dist/chunk-32LIPTHM.js +55 -0
- package/dist/chunk-32LIPTHM.js.map +1 -0
- package/dist/{chunk-5NT44FKL.js → chunk-3D5XUOBL.js} +2 -2
- package/dist/{chunk-EEBK4F6E.js → chunk-3F4GPRGQ.js} +2 -2
- package/dist/{chunk-BQIWMQNU.js → chunk-H4NSB54D.js} +2 -2
- package/dist/chunk-MTX4UPNB.js +3 -0
- package/dist/chunk-MTX4UPNB.js.map +1 -0
- package/dist/{chunk-NY7NHGVT.js → chunk-MUVE3UAS.js} +2 -2
- package/dist/chunk-MWNCS57L.js +2 -0
- package/dist/chunk-MWNCS57L.js.map +1 -0
- package/dist/{chunk-GSKJ57XY.js → chunk-NG72DYJR.js} +80 -80
- package/dist/chunk-NG72DYJR.js.map +1 -0
- package/dist/{chunk-ZGVVYJIK.js → chunk-R6ECKZLE.js} +2 -2
- package/dist/{chunk-MI7WOGH6.js → chunk-R6KLH34H.js} +2 -2
- package/dist/{chunk-RGZARSHV.js → chunk-ROLSSYXE.js} +1 -1
- package/dist/{chunk-RGZARSHV.js.map → chunk-ROLSSYXE.js.map} +1 -1
- package/dist/{chunk-YA3P77LV.js → chunk-SKSYII3K.js} +2 -2
- package/dist/{chunk-6WF56ME6.js → chunk-SN7YH4E4.js} +2 -2
- package/dist/{chunk-RVEMX5MJ.js → chunk-TTG3ZW3W.js} +2 -2
- package/dist/{chunk-ZFRXFUP7.js → chunk-UTW56K5I.js} +2 -2
- package/dist/{chunk-H6VWU2HN.js → chunk-UXOGNBGL.js} +2 -2
- package/dist/{chunk-L5UGH4T4.js → chunk-WYEWNN76.js} +3 -3
- package/dist/{chunk-LU7GDHGD.js → chunk-ZEAT2B5B.js} +2 -2
- package/dist/cli.js +1 -1
- package/dist/{contributions-KLRJ4ZXV.js → contributions-ZD6ZGTJR.js} +2 -2
- package/dist/enrich-EFIPWA3P.js +16 -0
- package/dist/{enrich-ZB5I7KHN.js.map → enrich-EFIPWA3P.js.map} +1 -1
- package/dist/event-levels-7CY7AJLY.js +3 -0
- package/dist/event-levels-7CY7AJLY.js.map +1 -0
- package/dist/{hub-TILTOOSS.js → hub-MVX3U6A2.js} +2 -2
- package/dist/index.js +1 -1
- package/dist/load-LQ2I2PQI.js +2 -0
- package/dist/model-call-J7JATTMW.js +2 -0
- package/dist/{program-U3HJY7E5.js → program-WOQXOAYQ.js} +194 -194
- package/dist/program-WOQXOAYQ.js.map +1 -0
- package/dist/{promote-RHVZB2QZ.js → promote-X2XQEEQP.js} +2 -2
- package/dist/push-bridge-325SXDGN.js +1 -1
- package/dist/query-RRHYPXOM.js +2 -0
- package/dist/query-runs-WYRNBLLC.js +6 -0
- package/dist/query-runs-WYRNBLLC.js.map +1 -0
- package/dist/{query-settings-2MGUS6AY.js → query-settings-WKVLQEVZ.js} +2 -2
- package/dist/{registry-LZLIPP7N.js → registry-VXK36CCL.js} +2 -2
- package/dist/score-LNJ46A67.js +3 -0
- package/dist/score-LNJ46A67.js.map +1 -0
- package/dist/types-YZX46RES.js +2 -0
- package/dist/{wiki-GCRRINW3.js → wiki-QZ7XNAMJ.js} +2 -2
- package/dist/wiki-enrich-PMG4T6PP.js +2 -0
- package/package.json +1 -1
- package/dist/chunk-GSKJ57XY.js.map +0 -1
- package/dist/chunk-JRS5QRZG.js +0 -2
- package/dist/chunk-JRS5QRZG.js.map +0 -1
- package/dist/chunk-JTDUTCUE.js +0 -3
- package/dist/chunk-JTDUTCUE.js.map +0 -1
- package/dist/chunk-WWDYDLY2.js +0 -55
- package/dist/chunk-WWDYDLY2.js.map +0 -1
- package/dist/enrich-ZB5I7KHN.js +0 -16
- package/dist/event-levels-CQWHSLMT.js +0 -3
- package/dist/event-levels-CQWHSLMT.js.map +0 -1
- package/dist/load-EOZUZK7U.js +0 -2
- package/dist/model-call-PKV5UAQ7.js +0 -2
- package/dist/program-U3HJY7E5.js.map +0 -1
- package/dist/query-OZXZVLO7.js +0 -2
- package/dist/query-runs-7VX3YAC3.js +0 -4
- package/dist/query-runs-7VX3YAC3.js.map +0 -1
- package/dist/score-DZGPLHCL.js +0 -3
- package/dist/score-DZGPLHCL.js.map +0 -1
- package/dist/types-LJZ2YY5W.js +0 -2
- package/dist/wiki-enrich-P5TNWACZ.js +0 -2
- /package/dist/{absorb-eval-WY3YMLS4.js.map → absorb-eval-YT5TOTC7.js.map} +0 -0
- /package/dist/{agent-3R5NY7I3.js.map → agent-DRUIMWF5.js.map} +0 -0
- /package/dist/{board-dashboard-U3ZSCO62.js.map → board-dashboard-2524GN5N.js.map} +0 -0
- /package/dist/{chunk-5NT44FKL.js.map → chunk-3D5XUOBL.js.map} +0 -0
- /package/dist/{chunk-EEBK4F6E.js.map → chunk-3F4GPRGQ.js.map} +0 -0
- /package/dist/{chunk-BQIWMQNU.js.map → chunk-H4NSB54D.js.map} +0 -0
- /package/dist/{chunk-NY7NHGVT.js.map → chunk-MUVE3UAS.js.map} +0 -0
- /package/dist/{chunk-ZGVVYJIK.js.map → chunk-R6ECKZLE.js.map} +0 -0
- /package/dist/{chunk-MI7WOGH6.js.map → chunk-R6KLH34H.js.map} +0 -0
- /package/dist/{chunk-YA3P77LV.js.map → chunk-SKSYII3K.js.map} +0 -0
- /package/dist/{chunk-6WF56ME6.js.map → chunk-SN7YH4E4.js.map} +0 -0
- /package/dist/{chunk-RVEMX5MJ.js.map → chunk-TTG3ZW3W.js.map} +0 -0
- /package/dist/{chunk-ZFRXFUP7.js.map → chunk-UTW56K5I.js.map} +0 -0
- /package/dist/{chunk-H6VWU2HN.js.map → chunk-UXOGNBGL.js.map} +0 -0
- /package/dist/{chunk-L5UGH4T4.js.map → chunk-WYEWNN76.js.map} +0 -0
- /package/dist/{chunk-LU7GDHGD.js.map → chunk-ZEAT2B5B.js.map} +0 -0
- /package/dist/{contributions-KLRJ4ZXV.js.map → contributions-ZD6ZGTJR.js.map} +0 -0
- /package/dist/{hub-TILTOOSS.js.map → hub-MVX3U6A2.js.map} +0 -0
- /package/dist/{load-EOZUZK7U.js.map → load-LQ2I2PQI.js.map} +0 -0
- /package/dist/{model-call-PKV5UAQ7.js.map → model-call-J7JATTMW.js.map} +0 -0
- /package/dist/{promote-RHVZB2QZ.js.map → promote-X2XQEEQP.js.map} +0 -0
- /package/dist/{query-OZXZVLO7.js.map → query-RRHYPXOM.js.map} +0 -0
- /package/dist/{query-settings-2MGUS6AY.js.map → query-settings-WKVLQEVZ.js.map} +0 -0
- /package/dist/{registry-LZLIPP7N.js.map → registry-VXK36CCL.js.map} +0 -0
- /package/dist/{types-LJZ2YY5W.js.map → types-YZX46RES.js.map} +0 -0
- /package/dist/{wiki-GCRRINW3.js.map → wiki-QZ7XNAMJ.js.map} +0 -0
- /package/dist/{wiki-enrich-P5TNWACZ.js.map → wiki-enrich-PMG4T6PP.js.map} +0 -0
package/dist/query-OZXZVLO7.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a,b,c,d,e,f,g,h}from"./chunk-WWDYDLY2.js";import"./chunk-YA3P77LV.js";import"./chunk-ERULJ2ZL.js";import"./chunk-WPNRDEHW.js";import"./chunk-JRS5QRZG.js";import"./chunk-4LWFJ4MZ.js";import"./chunk-BIJHMWXK.js";import"./chunk-4XMALK7X.js";import"./chunk-72SZI2UW.js";import"./chunk-FCPTN6NF.js";import"./chunk-MCI3DIWW.js";import"./chunk-6TURWSMN.js";import"./chunk-QD6IICK7.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 AUTO_SUMMARY_COVERAGE,f as DEFAULT_GRAPH_WEIGHT,e as SHARED_CATALOG_LINES,b as agenticQuery,d as catalogPool,g as rankCatalogPool,c as retrieveArticles,h as sharedQueryEnabled};
|
|
2
|
-
//# sourceMappingURL=query-OZXZVLO7.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import"./chunk-QIJLFPWE.js";import{appendFileSync as l}from"fs";var y="_query-runs.jsonl";function i(r){return r==="error"||r==="no-catalog"}function m(r,n){try{l(r,`${JSON.stringify(n)}
|
|
2
|
-
`)}catch{}}function g(r,n){let u=r.split(`
|
|
3
|
-
`).filter(Boolean).flatMap(t=>{try{let e=JSON.parse(t);return e&&typeof e.status=="string"&&typeof e.at=="string"?[e]:[]}catch{return[]}}).filter(t=>!n||t.at>=n),o={};for(let t of u)o[t.status]=(o[t.status]??0)+1;let s=u.map(t=>Number(t.wallMs)||0).sort((t,e)=>t-e),a=t=>s.length?s[Math.min(s.length-1,Math.floor(t*s.length))]:0;return{total:u.length,failed:u.filter(t=>i(t.status)).length,byStatus:o,wallMsP50:a(.5),wallMsP95:a(.95)}}export{y as QUERY_RUNS_FILE,i as queryFailed,m as recordQueryRun,g as summariseQueryRuns};
|
|
4
|
-
//# sourceMappingURL=query-runs-7VX3YAC3.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/wiki/query-runs.ts"],"sourcesContent":["/**\n * `wiki query` outcomes, one line per query in `_query-runs.jsonl` (#603).\n *\n * A failed query used to print plain text and exit 0, so nothing counted\n * it. Each query now appends its status and timing here, and\n * `wiki query-runs` counts them. No question, answer or error text goes\n * in the file.\n */\nimport { appendFileSync } from \"fs\"\nimport type { AgenticQueryResult } from \"./query\"\n\nexport const QUERY_RUNS_FILE = \"_query-runs.jsonl\"\n\nexport type QueryStatus = AgenticQueryResult[\"status\"]\n\nexport interface QueryRunRecord {\n at: string\n agent: string\n status: QueryStatus\n method?: string\n wallMs: number\n}\n\n/** Statuses that mean the query could not run, not that the wiki had no answer. */\nexport function queryFailed(status: QueryStatus): boolean {\n return status === \"error\" || status === \"no-catalog\"\n}\n\n/** Append one record. Never throws: logging must not fail a query. */\nexport function recordQueryRun(file: string, record: QueryRunRecord): void {\n try {\n appendFileSync(file, `${JSON.stringify(record)}\\n`)\n } catch {\n // best-effort\n }\n}\n\nexport interface QueryRunSummary {\n total: number\n failed: number\n byStatus: Record<string, number>\n wallMsP50: number\n wallMsP95: number\n}\n\n/** Count queries by status, on or after `since` (an ISO date or time) when given. */\nexport function summariseQueryRuns(text: string, since?: string): QueryRunSummary {\n const records: QueryRunRecord[] = text.split(\"\\n\").filter(Boolean).flatMap((l) => {\n try {\n const r = JSON.parse(l)\n return r && typeof r.status === \"string\" && typeof r.at === \"string\" ? [r] : []\n } catch { return [] }\n }).filter((r) => !since || r.at >= since)\n const byStatus: Record<string, number> = {}\n for (const r of records) byStatus[r.status] = (byStatus[r.status] ?? 0) + 1\n const ms = records.map((r) => Number(r.wallMs) || 0).sort((a, b) => a - b)\n const pick = (q: number) => (ms.length ? ms[Math.min(ms.length - 1, Math.floor(q * ms.length))] : 0)\n return {\n total: records.length,\n failed: records.filter((r) => queryFailed(r.status)).length,\n byStatus,\n wallMsP50: pick(0.5),\n wallMsP95: pick(0.95),\n }\n}\n"],"mappings":"4BAQA,OAAS,kBAAAA,MAAsB,KAGxB,IAAMC,EAAkB,oBAaxB,SAASC,EAAYC,EAA8B,CACxD,OAAOA,IAAW,SAAWA,IAAW,YAC1C,CAGO,SAASC,EAAeC,EAAcC,EAA8B,CACzE,GAAI,CACFN,EAAeK,EAAM,GAAG,KAAK,UAAUC,CAAM;AAAA,CAAK,CACpD,MAAE,CAEF,CACF,CAWO,SAASC,EAAmBC,EAAcC,EAAiC,CAChF,IAAMC,EAA4BF,EAAK,MAAM;AAAA,CAAI,EAAE,OAAO,OAAO,EAAE,QAASG,GAAM,CAChF,GAAI,CACF,IAAMC,EAAI,KAAK,MAAMD,CAAC,EACtB,OAAOC,GAAK,OAAOA,EAAE,QAAW,UAAY,OAAOA,EAAE,IAAO,SAAW,CAACA,CAAC,EAAI,CAAC,CAChF,MAAE,CAAQ,MAAO,CAAC,CAAE,CACtB,CAAC,EAAE,OAAQA,GAAM,CAACH,GAASG,EAAE,IAAMH,CAAK,EAClCI,EAAmC,CAAC,EAC1C,QAAWD,KAAKF,EAASG,EAASD,EAAE,MAAM,GAAKC,EAASD,EAAE,MAAM,GAAK,GAAK,EAC1E,IAAME,EAAKJ,EAAQ,IAAKE,GAAM,OAAOA,EAAE,MAAM,GAAK,CAAC,EAAE,KAAK,CAACG,EAAGC,IAAMD,EAAIC,CAAC,EACnEC,EAAQC,GAAeJ,EAAG,OAASA,EAAG,KAAK,IAAIA,EAAG,OAAS,EAAG,KAAK,MAAMI,EAAIJ,EAAG,MAAM,CAAC,CAAC,EAAI,EAClG,MAAO,CACL,MAAOJ,EAAQ,OACf,OAAQA,EAAQ,OAAQE,GAAMV,EAAYU,EAAE,MAAM,CAAC,EAAE,OACrD,SAAAC,EACA,UAAWI,EAAK,EAAG,EACnB,UAAWA,EAAK,GAAI,CACtB,CACF","names":["appendFileSync","QUERY_RUNS_FILE","queryFailed","status","recordQueryRun","file","record","summariseQueryRuns","text","since","records","l","r","byStatus","ms","a","b","pick","q"]}
|
package/dist/score-DZGPLHCL.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import"./chunk-QIJLFPWE.js";function S(n){let s=n.trim();return(s.startsWith("[")?JSON.parse(s):s.split(`
|
|
2
|
-
`).filter(r=>r.trim()).map(r=>JSON.parse(r))).map((r,t)=>{let e=r??{},o=typeof e.question=="string"?e.question.trim():"",u=Array.isArray(e.expect)?e.expect.filter(c=>typeof c=="string"&&!!c.trim()):[];if(!o||u.length===0)throw new Error(`question ${t+1} needs a "question" and a non-empty "expect" list`);return{id:typeof e.id=="string"&&e.id?e.id:`q${t+1}`,question:o,expect:u}})}var l=n=>n.toLowerCase().replace(/[\s ]+/g," ").trim(),m=n=>n.replace(/\D+/g,"");function h(n,s){let i=l(n),r=m(n),t=[],e=[];for(let o of s)(o.split("|").some(c=>{let g=m(c);return!!c.trim()&&i.includes(l(c))||g.length>=5&&r.includes(g)})?t:e).push(o);return{found:t,missing:e}}function x(n,s){let i=s.map(({q:t,answer:e,status:o,citations:u,method:c,ms:g,costUsd:d})=>{let{found:a,missing:f}=h(e,t.expect);return{id:t.id,question:t.question,expect:t.expect,found:a,missing:f,score:a.length/t.expect.length,status:o,answer:e,citations:u,...c?{method:c}:{},...g!==void 0?{ms:g}:{},...d!==void 0?{costUsd:d}:{}}}),r=i.length?i.reduce((t,e)=>t+e.score,0)/i.length:0;return{at:n.at??new Date().toISOString(),questions:n.questions,agent:n.agent,shared:n.shared,...n.settings?{settings:n.settings}:{},score:r,full:i.filter(t=>t.missing.length===0).length,results:i}}function p(n){let s=t=>t.length?t.reduce((e,o)=>e+o,0)/t.length:void 0,i=n.results.flatMap(t=>t.ms===void 0?[]:[t.ms]),r=n.results.flatMap(t=>t.costUsd===void 0?[]:[t.costUsd]);return{meanMs:s(i),meanCostUsd:s(r),unpriced:n.results.length-r.length}}function R(n,s){let i=new Map(n.results.map(e=>[e.id,e])),r=s.results.map(e=>{let o=i.get(e.id);return{id:e.id,question:e.question,before:o?.score??0,after:e.score,gained:e.found.filter(u=>!o?.found.includes(u)),lost:(o?.found??[]).filter(u=>!e.found.includes(u)),...o?.ms!==void 0||e.ms!==void 0?{ms:{before:o?.ms,after:e.ms}}:{},...o?.costUsd!==void 0||e.costUsd!==void 0?{costUsd:{before:o?.costUsd,after:e.costUsd}}:{}}}),t=new Set(s.results.map(e=>e.id));return{before:n.score,after:s.score,deltas:r,changed:b(n,s),onlyBefore:n.results.filter(e=>!t.has(e.id)).map(e=>e.id),onlyAfter:s.results.filter(e=>!i.has(e.id)).map(e=>e.id),cost:{before:p(n),after:p(s)}}}function b(n,s){if(!n.settings||!s.settings)return"unknown";let i={...n.settings,agent:n.agent,shared:n.shared},r={...s.settings,agent:s.agent,shared:s.shared};return[...new Set([...Object.keys(i),...Object.keys(r)])].filter(t=>i[t]!==r[t]).map(t=>`${t}: ${String(i[t])} \u2192 ${String(r[t])}`)}export{x as buildReport,R as compareReports,h as matchFacts,S as parseQuestionSet,p as runCost};
|
|
3
|
-
//# sourceMappingURL=score-DZGPLHCL.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/wiki/score.ts"],"sourcesContent":["// --- Score the wiki against a question set (#824) ---\n//\n// The fleet test behind #824 scored the wiki by hand: each agent took 10\n// to 12 real questions from its own past work and checked whether the\n// wiki answered them (47% and 75%). This makes that repeatable, so the\n// same set can be run before and after a week of daily contributions.\n//\n// A question set is JSON (an array) or JSON lines, one question each:\n//\n// {\"id\": \"q1\", \"question\": \"What is the vendor's billing contact's phone?\", \"expect\": [\"+1 555 0100\"]}\n//\n// An answer scores the share of its expected facts it contains. Matching\n// ignores case and spacing; a fact with five or more digits (a phone,\n// an invoice number) also matches on its digits alone. \"a|b\" accepts\n// either spelling (a date or an amount written two ways). Question sets\n// hold real facts, so they belong outside the repository.\n\nexport interface ScoreQuestion {\n id: string\n question: string\n /** Facts a correct answer contains, copied as they should appear. */\n expect: string[]\n}\n\nexport interface ScoreResult {\n id: string\n question: string\n expect: string[]\n found: string[]\n missing: string[]\n /** found / expected, 0–1. */\n score: number\n status: string\n answer: string\n citations: string[]\n /** How the pages were picked for this question. */\n method?: string\n /** Wall time of the question, in milliseconds. */\n ms?: number\n /** Model spend of the question, in dollars. Unset when it is not known\n * (the catalog method, or a call that reported no cost). */\n costUsd?: number\n}\n\n/** What a run was asked with, so two reports show what changed between them. */\nexport interface ScoreSettings {\n method: string\n linkedPages: number\n linkedChars: number\n live: boolean\n notes: boolean\n navigatorModel: string\n answerModel: string\n}\n\nexport interface ScoreReport {\n at: string\n questions: string\n agent: string\n /** Whether the shared wiki was searched too. */\n shared: boolean\n /** Unset in reports written before #863. */\n settings?: ScoreSettings\n /** Mean of the question scores, 0–1. */\n score: number\n /** Questions every expected fact was found for. */\n full: number\n results: ScoreResult[]\n}\n\nexport function parseQuestionSet(text: string): ScoreQuestion[] {\n const trimmed = text.trim()\n const raw: unknown[] = trimmed.startsWith(\"[\")\n ? JSON.parse(trimmed)\n : trimmed.split(\"\\n\").filter((l) => l.trim()).map((l) => JSON.parse(l))\n return raw.map((x, i) => {\n const r = (x ?? {}) as Record<string, unknown>\n const question = typeof r.question === \"string\" ? r.question.trim() : \"\"\n const expect = Array.isArray(r.expect) ? r.expect.filter((e): e is string => typeof e === \"string\" && !!e.trim()) : []\n if (!question || expect.length === 0) throw new Error(`question ${i + 1} needs a \"question\" and a non-empty \"expect\" list`)\n return { id: typeof r.id === \"string\" && r.id ? r.id : `q${i + 1}`, question, expect }\n })\n}\n\nconst norm = (s: string) => s.toLowerCase().replace(/[\\s ]+/g, \" \").trim()\nconst digits = (s: string) => s.replace(/\\D+/g, \"\")\n\n/** Which expected facts the answer contains. */\nexport function matchFacts(answer: string, expect: string[]): { found: string[]; missing: string[] } {\n const text = norm(answer)\n const textDigits = digits(answer)\n const found: string[] = []\n const missing: string[] = []\n for (const fact of expect) {\n // \"2027-03-31|31/03/2027\": any one spelling counts.\n const hit = fact.split(\"|\").some((alt) => {\n const d = digits(alt)\n return (!!alt.trim() && text.includes(norm(alt))) || (d.length >= 5 && textDigits.includes(d))\n })\n ;(hit ? found : missing).push(fact)\n }\n return { found, missing }\n}\n\nexport function buildReport(\n meta: { questions: string; agent: string; shared: boolean; at?: string; settings?: ScoreSettings },\n answers: Array<{ q: ScoreQuestion; answer: string; status: string; citations: string[]; method?: string; ms?: number; costUsd?: number }>,\n): ScoreReport {\n const results = answers.map(({ q, answer, status, citations, method, ms, costUsd }) => {\n const { found, missing } = matchFacts(answer, q.expect)\n return {\n id: q.id, question: q.question, expect: q.expect, found, missing, score: found.length / q.expect.length, status, answer, citations,\n ...(method ? { method } : {}), ...(ms !== undefined ? { ms } : {}), ...(costUsd !== undefined ? { costUsd } : {}),\n }\n })\n const score = results.length ? results.reduce((s, r) => s + r.score, 0) / results.length : 0\n return {\n at: meta.at ?? new Date().toISOString(),\n questions: meta.questions, agent: meta.agent, shared: meta.shared,\n ...(meta.settings ? { settings: meta.settings } : {}),\n score, full: results.filter((r) => r.missing.length === 0).length, results,\n }\n}\n\nexport interface ScoreDelta {\n id: string\n question: string\n before: number\n after: number\n /** Facts the later run found that the earlier one missed. */\n gained: string[]\n lost: string[]\n /** Wall time and spend of the question in each run, when recorded. */\n ms?: { before?: number; after?: number }\n costUsd?: { before?: number; after?: number }\n}\n\n/** Mean time and spend per question of one report, over the questions\n * that recorded them. Unset when none did. */\nexport interface RunCost {\n meanMs?: number\n meanCostUsd?: number\n /** Questions with no recorded spend: the mean leaves them out. */\n unpriced: number\n}\n\nexport function runCost(report: ScoreReport): RunCost {\n const mean = (xs: number[]) => (xs.length ? xs.reduce((a, b) => a + b, 0) / xs.length : undefined)\n const ms = report.results.flatMap((r) => (r.ms === undefined ? [] : [r.ms]))\n const usd = report.results.flatMap((r) => (r.costUsd === undefined ? [] : [r.costUsd]))\n return { meanMs: mean(ms), meanCostUsd: mean(usd), unpriced: report.results.length - usd.length }\n}\n\nexport interface ReportComparison {\n before: number\n after: number\n deltas: ScoreDelta[]\n /** Settings that differ, as \"key: before → after\". Unknown when either\n * report predates recorded settings. A fair test changes one. */\n changed: string[] | \"unknown\"\n /** Question ids only one of the two reports holds. */\n onlyBefore: string[]\n onlyAfter: string[]\n cost: { before: RunCost; after: RunCost }\n}\n\n/** Per-question change between two reports on the same set. */\nexport function compareReports(before: ScoreReport, after: ScoreReport): ReportComparison {\n const prior = new Map(before.results.map((r) => [r.id, r]))\n const deltas = after.results.map((r) => {\n const b = prior.get(r.id)\n return {\n id: r.id, question: r.question,\n before: b?.score ?? 0, after: r.score,\n gained: r.found.filter((f) => !b?.found.includes(f)),\n lost: (b?.found ?? []).filter((f) => !r.found.includes(f)),\n ...(b?.ms !== undefined || r.ms !== undefined ? { ms: { before: b?.ms, after: r.ms } } : {}),\n ...(b?.costUsd !== undefined || r.costUsd !== undefined ? { costUsd: { before: b?.costUsd, after: r.costUsd } } : {}),\n }\n })\n const afterIds = new Set(after.results.map((r) => r.id))\n return {\n before: before.score, after: after.score, deltas,\n changed: settingsChanged(before, after),\n onlyBefore: before.results.filter((r) => !afterIds.has(r.id)).map((r) => r.id),\n onlyAfter: after.results.filter((r) => !prior.has(r.id)).map((r) => r.id),\n cost: { before: runCost(before), after: runCost(after) },\n }\n}\n\nfunction settingsChanged(before: ScoreReport, after: ScoreReport): string[] | \"unknown\" {\n if (!before.settings || !after.settings) return \"unknown\"\n const a: Record<string, unknown> = { ...before.settings, agent: before.agent, shared: before.shared }\n const b: Record<string, unknown> = { ...after.settings, agent: after.agent, shared: after.shared }\n return [...new Set([...Object.keys(a), ...Object.keys(b)])]\n .filter((k) => a[k] !== b[k])\n .map((k) => `${k}: ${String(a[k])} → ${String(b[k])}`)\n}\n"],"mappings":"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","names":["parseQuestionSet","text","trimmed","l","x","i","r","question","expect","e","norm","s","digits","matchFacts","answer","textDigits","found","missing","fact","alt","d","buildReport","meta","answers","results","q","status","citations","method","ms","costUsd","score","runCost","report","mean","xs","a","b","usd","compareReports","before","after","prior","deltas","f","afterIds","settingsChanged","k"]}
|
package/dist/types-LJZ2YY5W.js
DELETED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|