agentix-cli 0.45.0 → 0.46.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/{agent-BCZRXLZ6.js → agent-LI3AZQBC.js} +2 -2
- package/dist/{board-dashboard-U5YP4HWE.js → board-dashboard-IE2P6QFU.js} +2 -2
- package/dist/{board-dashboard-U5YP4HWE.js.map → board-dashboard-IE2P6QFU.js.map} +1 -1
- package/dist/chunk-CTCOWVNL.js +241 -0
- package/dist/chunk-CTCOWVNL.js.map +1 -0
- package/dist/chunk-DP7RTNDM.js +24 -0
- package/dist/chunk-DP7RTNDM.js.map +1 -0
- package/dist/{chunk-SAFAI4AV.js → chunk-E6EW42EA.js} +2 -2
- package/dist/chunk-FRHSQVFN.js +3 -0
- package/dist/chunk-FRHSQVFN.js.map +1 -0
- package/dist/chunk-GAUQOIEE.js +160 -0
- package/dist/chunk-GAUQOIEE.js.map +1 -0
- package/dist/{chunk-CQRSSVWG.js → chunk-NVVXVUQU.js} +2 -2
- package/dist/{chunk-3RCFDI52.js → chunk-Q6EBTCEZ.js} +160 -399
- package/dist/chunk-Q6EBTCEZ.js.map +1 -0
- package/dist/chunk-RY2EULHS.js +2 -0
- package/dist/chunk-RY2EULHS.js.map +1 -0
- package/dist/chunk-SGFXE5FP.js +109 -0
- package/dist/chunk-SGFXE5FP.js.map +1 -0
- package/dist/{chunk-DYSVG6T3.js → chunk-Y3SVZ6VS.js} +124 -122
- package/dist/chunk-Y3SVZ6VS.js.map +1 -0
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/program-BIMB44HN.js +2 -0
- package/dist/promote-R6WVBMT7.js +2 -0
- package/dist/proposals-MWMEXRDW.js +2 -0
- package/dist/registry-STML35CV.js +2 -0
- package/dist/registry-STML35CV.js.map +1 -0
- package/dist/review-candidates-ROFQR6XE.js +4 -0
- package/dist/review-candidates-ROFQR6XE.js.map +1 -0
- package/dist/wiki-LGHX3WPI.js +2 -0
- package/dist/wiki-LGHX3WPI.js.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-3RCFDI52.js.map +0 -1
- package/dist/chunk-DYSVG6T3.js.map +0 -1
- package/dist/chunk-MTVRYTLL.js +0 -109
- package/dist/chunk-MTVRYTLL.js.map +0 -1
- package/dist/chunk-Z7LNSHG3.js +0 -182
- package/dist/chunk-Z7LNSHG3.js.map +0 -1
- package/dist/program-4RO4NCBU.js +0 -2
- package/dist/registry-OUJ6HT5D.js +0 -2
- package/dist/review-candidates-BFAWNDOR.js +0 -4
- package/dist/review-candidates-BFAWNDOR.js.map +0 -1
- package/dist/wiki-5JORBO4G.js +0 -2
- /package/dist/{agent-BCZRXLZ6.js.map → agent-LI3AZQBC.js.map} +0 -0
- /package/dist/{chunk-SAFAI4AV.js.map → chunk-E6EW42EA.js.map} +0 -0
- /package/dist/{chunk-CQRSSVWG.js.map → chunk-NVVXVUQU.js.map} +0 -0
- /package/dist/{program-4RO4NCBU.js.map → program-BIMB44HN.js.map} +0 -0
- /package/dist/{registry-OUJ6HT5D.js.map → promote-R6WVBMT7.js.map} +0 -0
- /package/dist/{wiki-5JORBO4G.js.map → proposals-MWMEXRDW.js.map} +0 -0
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{b as I}from"./chunk-V5FZJUK4.js";import"./chunk-VMDA2SX2.js";import"./chunk-2GIDVZ4H.js";import"./chunk-6HMZ5TTM.js";import"./chunk-F4HZTZHW.js";import"./chunk-AJONZWLT.js";import"./chunk-ZTEU5JVQ.js";import"./chunk-LCIREYTD.js";import"./chunk-L2WSPY6S.js";import"./chunk-QJANPP4C.js";import"./chunk-BH3GTCZ6.js";import"./chunk-FIOB3MEX.js";import{createHash as E}from"crypto";var v="review:",b={decisions:"project",warnings:"feedback",friction:"feedback",context:"reference"};function A(t,n,r){let s=E("sha1").update(r.trim().toLowerCase()).digest("hex").slice(0,10);return`${v}${t}/${n}@${s}`}function F(t){if(!t.startsWith(v))return null;let n=t.slice(v.length),r=n.lastIndexOf("@"),s=n.lastIndexOf("/",r===-1?void 0:r);return r===-1||s===-1?null:{reviewId:n.slice(0,s),kind:n.slice(s+1,r),digest:n.slice(r+1)}}var C=t=>t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,48)||"finding",L=5;function T(t,n){return`${t}|${I(n)}`}function K(t,n={}){let r=n.kinds??Object.keys(b),s=n.minLength??24,h=[],d=new Map,u=new Map,f=new Map,x=new Map;for(let e of t){let i;try{i=JSON.parse(e.result)}catch{continue}let o=e.updated_at?new Date(e.updated_at).toISOString():new Date().toISOString();for(let c of r){let l=b[c];if(!l)continue;let R=i[c];if(Array.isArray(R))for(let $ of R){let a=String($?.text??"").trim();if(a.length<s)continue;let g=A(e.id,c,a),_=g.slice(g.lastIndexOf("@")),w=`${c}${_}`,y=T(c,a),S=f.get(y)??new Set;if(S.add(e.session_id??e.id),f.set(y,S),d.has(w))continue;let O=String($?.evidence??"").trim(),k={occurrences:1,agentId:e.agent,key:`${e.agent}/${l}_${C(a)}`,stamp:g,memory:{name:C(a),type:l,description:a.slice(0,200),body:"",createdAt:o,updatedAt:o}};x.set(g,{text:a,evidence:O,agent:e.agent,source:e.source}),d.set(w,k),u.set(w,y),h.push(k)}}}for(let[e,i]of d){let o=f.get(u.get(e)??"");i.occurrences=o?.size??1,i.sessions=[...o??[]].slice(0,L);let c=x.get(i.stamp);i.memory.body=D(c,i.occurrences)}let m=new Map;for(let[e,i]of d){let o=u.get(e)??e,c=m.get(o)??[];c.push(i),m.set(o,c)}let M=[...m.values()].sort((e,i)=>i[0].occurrences-e[0].occurrences),p=[];for(let e=0;p.length<h.length;e++){let i=!1;for(let o of M)e<o.length&&(p.push(o[e]),i=!0);if(!i)break}return p}function D(t,n){let r=`${t.agent}${t.source?` via ${t.source}`:""}`,s=[];return n>1?(s.push(`Observed in ${n} separate sessions. Most recently stated as:`),s.push(`> ${t.text}`),s.push(`Recurring across ${n} sessions is what makes this worth recording \u2014 any single occurrence is session state, the repetition is the finding.`)):s.push(t.text),t.evidence&&s.push(`**Evidence:** ${t.evidence}`),s.push(`_From ${n>1?"session reviews":"a session review"} of ${r}._`),s.join(`
|
|
2
|
+
|
|
3
|
+
`)}export{L as MAX_EVIDENCE_SESSIONS,b as PROMOTABLE_KINDS,v as REVIEW_STAMP_PREFIX,F as parseReviewStamp,A as reviewStamp,K as reviewsToCandidates};
|
|
4
|
+
//# sourceMappingURL=review-candidates-ROFQR6XE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/wiki/review-candidates.ts"],"sourcesContent":["import { createHash } from \"crypto\"\nimport type { MemoryType } from \"../agents/agent-memory\"\nimport { commitmentKey } from \"@/daemon/session-monitor\"\nimport type { MemoryCandidate } from \"./promote\"\n\n// Monitor reviews → wiki promotion candidates.\n//\n// The session monitor has been producing structured findings all along\n// and none of them have ever reached the wiki. 574 parsed reviews hold\n// 1,543 decisions, 1,511 warnings, 1,278 pieces of context, 1,216\n// actions and 1,106 friction notes — 6,654 items against a wiki of 784\n// articles. The single richest seam of institutional knowledge on the\n// fleet has been sitting in SQLite because nothing was pointed at it.\n//\n// It never reached absorb for a structural reason rather than an\n// oversight: absorb reads raw *conversation* entries, and a review is\n// not a conversation. It is a judgement already extracted from one, with\n// its evidence attached. Pushing reviews through absorb would pay a\n// writing model to re-derive what the monitor already derived.\n//\n// So they go through `wiki promote` instead, which exists for exactly\n// this shape — a durable, already-formed claim that needs judging for\n// fleet relevance and writing into a shared article. Reviews become\n// MemoryCandidates carrying a `review:` stamp, and inherit the ledger,\n// the idempotency and the judge without any of it being rebuilt.\n//\n// Only the kinds that describe what IS or WAS are eligible. `actions`\n// are excluded: an action is a thing somebody should do, it goes stale\n// the moment it is done or abandoned, and a wiki full of last month's\n// to-dos is worse than one without them. Those belong on the questions\n// queue if anywhere.\n\nexport const REVIEW_STAMP_PREFIX = \"review:\"\n\n/** Review kinds worth keeping, mapped to the memory type they promote as. */\nexport const PROMOTABLE_KINDS: Record<string, MemoryType> = {\n decisions: \"project\",\n warnings: \"feedback\",\n friction: \"feedback\",\n context: \"reference\",\n}\n\nexport interface ReviewRow {\n id: string\n /** The run being reviewed. The monitor re-reviews a session as it\n * progresses, so several rows share one session_id. */\n session_id?: string\n agent: string\n source?: string\n updated_at?: number\n /** The parsed Review JSON as stored. */\n result: string\n}\n\nexport interface ReviewItem {\n text: string\n evidence?: string\n}\n\n/**\n * Stable identity for one item inside one review.\n *\n * Keyed on the item's TEXT, not its index. The monitor re-reviews a\n * session as it progresses, so the same finding reappears at a\n * different position in a later review of the same run; indexing by\n * position would promote it again as something new. Hashing the text\n * means a re-stated finding is recognised and a genuinely reworded one\n * is treated as new, which is the right way round.\n */\nexport function reviewStamp(reviewId: string, kind: string, text: string): string {\n const digest = createHash(\"sha1\").update(text.trim().toLowerCase()).digest(\"hex\").slice(0, 10)\n return `${REVIEW_STAMP_PREFIX}${reviewId}/${kind}@${digest}`\n}\n\nexport function parseReviewStamp(s: string): { reviewId: string; kind: string; digest: string } | null {\n if (!s.startsWith(REVIEW_STAMP_PREFIX)) return null\n const rest = s.slice(REVIEW_STAMP_PREFIX.length)\n const at = rest.lastIndexOf(\"@\")\n const slash = rest.lastIndexOf(\"/\", at === -1 ? undefined : at)\n if (at === -1 || slash === -1) return null\n return { reviewId: rest.slice(0, slash), kind: rest.slice(slash + 1, at), digest: rest.slice(at + 1) }\n}\n\nconst slug = (s: string) =>\n s.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\").slice(0, 48) || \"finding\"\n\n/**\n * Turn stored reviews into promotion candidates.\n *\n * The evidence travels with the claim. A warning without it is an\n * assertion a reader has to take on faith, and the monitor already went\n * to the trouble of collecting it — dropping it here would make the\n * resulting article exactly the kind of unfalsifiable prose the wiki is\n * meant not to accumulate.\n */\n/** Example sessions kept per finding; the count is in `occurrences`. */\nexport const MAX_EVIDENCE_SESSIONS = 5\n\nexport interface ReviewCandidate extends MemoryCandidate {\n /** Some of the sessions (ids) that produced this finding. */\n sessions?: string[]\n /** How many DISTINCT SESSIONS produced substantially this finding.\n *\n * Distinct sessions, not review rows, and the difference decides\n * whether the number means anything. The monitor re-reviews a run as\n * it progresses, so counting rows made a single miner run that\n * restated one observation 24 times look like the fleet's most\n * recurrent finding. It ranked top, and the promotion judge threw it\n * out as \"a snapshot of pending operator items from one miner run\" —\n * correctly. Recurrence across sessions is evidence of a pattern;\n * recurrence within one is evidence of a long session. */\n occurrences: number\n}\n\n/**\n * Two keys, deliberately, because dedupe and ranking want opposite errors.\n *\n * IDENTITY is the exact text hash in the stamp. It must never merge two\n * findings that differ, because a merge drops one permanently — so it\n * errs towards treating a rewording as new.\n *\n * SIMILARITY, for counting recurrence, wants the opposite: monitor\n * findings are free text re-derived from scratch every session, so exact\n * matching almost never fires. On this corpus it found 3 recurrences in\n * 5,435 findings, which is no signal at all. `commitmentKey` is the\n * monitor's own answer to this, written after one leaked token produced\n * 18 separate \"rotate it\" actions — verb plus the entity acted on. Over-\n * merging here only inflates a rank; it cannot lose a finding.\n */\nfunction similarityKey(kind: string, text: string): string {\n return `${kind}|${commitmentKey(text)}`\n}\n\nexport function reviewsToCandidates(\n rows: ReviewRow[],\n opts: { kinds?: string[]; minLength?: number } = {},\n): ReviewCandidate[] {\n const kinds = opts.kinds ?? Object.keys(PROMOTABLE_KINDS)\n const minLength = opts.minLength ?? 24\n\n const out: ReviewCandidate[] = []\n // Emit once per exact wording…\n const byExact = new Map<string, ReviewCandidate>()\n const familyOf = new Map<string, string>()\n // …but count per family. Keeping these separate is the point: sharing\n // one map would make an over-merge drop a distinct finding instead of\n // merely inflating a rank.\n const familySessions = new Map<string, Set<string>>()\n const provenance = new Map<string, { text: string; evidence: string; agent: string; source?: string }>()\n\n for (const row of rows) {\n let review: Record<string, unknown>\n try { review = JSON.parse(row.result) as Record<string, unknown> } catch { continue }\n\n const when = row.updated_at ? new Date(row.updated_at).toISOString() : new Date().toISOString()\n\n for (const kind of kinds) {\n const type = PROMOTABLE_KINDS[kind]\n if (!type) continue\n const items = review[kind]\n if (!Array.isArray(items)) continue\n\n for (const raw of items as ReviewItem[]) {\n const text = String(raw?.text ?? \"\").trim()\n // Very short findings are almost always a restated status line\n // (\"deploy succeeded\"), which carries nothing an article wants.\n if (text.length < minLength) continue\n\n const stamp = reviewStamp(row.id, kind, text)\n // The same finding recurs across reviews of one run and across\n // runs. Promote the first occurrence, but count the rest: a\n // finding stated once is usually about that session, while one\n // stated a dozen times is a property of the fleet. That count is\n // the only durability signal this source offers for free, and\n // without it 5,000 candidates arrive in arbitrary order.\n const dedupe = stamp.slice(stamp.lastIndexOf(\"@\"))\n const key = `${kind}${dedupe}`\n\n // Count every occurrence, including restatements of something\n // already emitted — a finding said five different ways is one\n // recurring finding, and that is what deserves promoting first.\n const family = similarityKey(kind, text)\n const sessions = familySessions.get(family) ?? new Set<string>()\n sessions.add(row.session_id ?? row.id)\n familySessions.set(family, sessions)\n if (byExact.has(key)) continue\n\n const evidence = String(raw?.evidence ?? \"\").trim()\n const candidate: ReviewCandidate = {\n occurrences: 1,\n agentId: row.agent,\n key: `${row.agent}/${type}_${slug(text)}`,\n stamp,\n memory: {\n name: slug(text),\n type,\n description: text.slice(0, 200),\n // Body is filled in after the counting pass, because how a\n // finding should be framed depends on how often it recurred.\n body: \"\",\n createdAt: when,\n updatedAt: when,\n },\n }\n provenance.set(stamp, { text, evidence, agent: row.agent, source: row.source })\n byExact.set(key, candidate)\n familyOf.set(key, family)\n out.push(candidate)\n }\n }\n }\n\n for (const [key, candidate] of byExact) {\n const sessions = familySessions.get(familyOf.get(key) ?? \"\")\n candidate.occurrences = sessions?.size ?? 1\n // A few of the sessions it came from, as evidence a reviewer can open.\n candidate.sessions = [...(sessions ?? [])].slice(0, MAX_EVIDENCE_SESSIONS)\n const p = provenance.get(candidate.stamp)!\n candidate.memory.body = renderBody(p, candidate.occurrences)\n }\n\n // Recurrence decides which finding matters; diversity decides what a\n // capped run gets to see. Sorting on count alone put five rewordings\n // of the same 24× observation in the top five, spending the whole\n // nightly budget on one idea. So: one representative per family\n // first, in count order, then second representatives, and so on.\n // Nothing is dropped — the rewordings are still in the list, just\n // behind a first look at everything else.\n const byFamily = new Map<string, ReviewCandidate[]>()\n for (const [key, candidate] of byExact) {\n const family = familyOf.get(key) ?? key\n const list = byFamily.get(family) ?? []\n list.push(candidate)\n byFamily.set(family, list)\n }\n const families = [...byFamily.values()].sort((a, b) => b[0].occurrences - a[0].occurrences)\n\n const ordered: ReviewCandidate[] = []\n for (let round = 0; ordered.length < out.length; round++) {\n let placed = false\n for (const list of families) {\n if (round < list.length) { ordered.push(list[round]); placed = true }\n }\n if (!placed) break\n }\n return ordered\n}\n\n/**\n * How a finding is written decides whether it survives the judge.\n *\n * The monitor writes point-in-time observations, and the promotion\n * judge — correctly — rejects those: \"a transient OAuth expiry that\n * stalled #38\", \"issue-thread state, not a wiki fact\". Twelve\n * candidates across two runs, all skipped, every reason sound.\n *\n * But a finding seen in seven separate sessions is no longer a status\n * report about one of them; it is evidence of something that keeps\n * happening, and that IS durable. The observation was never the\n * knowledge — the repetition is. Saying so explicitly, with the session\n * count as the evidence, is the difference between offering the judge a\n * stale fact and offering it a pattern.\n *\n * A one-off stays phrased as what it is. Dressing a single observation\n * up as a pattern would just launder session state past the judge,\n * which is the failure this is trying to avoid, not a way around it.\n */\nfunction renderBody(\n p: { text: string; evidence: string; agent: string; source?: string },\n occurrences: number,\n): string {\n const origin = `${p.agent}${p.source ? ` via ${p.source}` : \"\"}`\n const parts: string[] = []\n\n if (occurrences > 1) {\n parts.push(`Observed in ${occurrences} separate sessions. Most recently stated as:`)\n parts.push(`> ${p.text}`)\n parts.push(\n `Recurring across ${occurrences} sessions is what makes this worth recording — ` +\n `any single occurrence is session state, the repetition is the finding.`,\n )\n } else {\n parts.push(p.text)\n }\n\n if (p.evidence) parts.push(`**Evidence:** ${p.evidence}`)\n parts.push(`_From ${occurrences > 1 ? \"session reviews\" : \"a session review\"} of ${origin}._`)\n return parts.join(\"\\n\\n\")\n}\n"],"mappings":"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","names":["createHash","REVIEW_STAMP_PREFIX","PROMOTABLE_KINDS","reviewStamp","reviewId","kind","text","digest","createHash","parseReviewStamp","s","rest","at","slash","slug","MAX_EVIDENCE_SESSIONS","similarityKey","commitmentKey","reviewsToCandidates","rows","opts","kinds","minLength","out","byExact","familyOf","familySessions","provenance","row","review","when","type","items","raw","stamp","dedupe","key","family","sessions","evidence","candidate","p","renderBody","byFamily","list","families","a","b","ordered","round","placed","occurrences","origin","parts"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import"./chunk-VWTBHLMX.js";import{a as b}from"./chunk-RY2EULHS.js";import{e as a}from"./chunk-SGFXE5FP.js";import"./chunk-PNWNVOEZ.js";import"./chunk-64P4QHSZ.js";import{a as c}from"./chunk-TNFOGJWZ.js";import"./chunk-AJ5RMU7X.js";import"./chunk-2GIDVZ4H.js";import"./chunk-6HMZ5TTM.js";import"./chunk-F4HZTZHW.js";import"./chunk-AJONZWLT.js";import"./chunk-ZTEU5JVQ.js";import"./chunk-QOYAX2FT.js";import"./chunk-LCIREYTD.js";import"./chunk-L2WSPY6S.js";import"./chunk-QJANPP4C.js";import"./chunk-BH3GTCZ6.js";import"./chunk-FIOB3MEX.js";export{b as WikiHub,a as WikiStore,c as agenticQuery};
|
|
2
|
+
//# sourceMappingURL=wiki-LGHX3WPI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentix-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.46.0",
|
|
4
4
|
"description": "AI operations layer for small and medium businesses. Routes Telegram, WhatsApp, GitLab, GitHub, crons, webhooks, and mesh tasks to AI agents. Web wizard for operators, CLI for engineers. Self-hosted.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|