agentix-cli 0.116.0 → 0.118.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/README.md +5 -5
- package/dist/{App-7Z2PWARZ.js → App-XMSNIAU6.js} +2 -2
- package/dist/{ChatApp-GFAIRLGZ.js → ChatApp-BFYTIQF3.js} +2 -2
- package/dist/{agent-LXLZGVW3.js → agent-E6W5VBYH.js} +2 -2
- package/dist/{board-dashboard-CPCSSVZE.js → board-dashboard-D5FQZKO4.js} +215 -101
- package/dist/board-dashboard-D5FQZKO4.js.map +1 -0
- package/dist/chunk-23SQSUBI.js +3 -0
- package/dist/chunk-23SQSUBI.js.map +1 -0
- package/dist/{chunk-UUMNP47Q.js → chunk-2G227TF3.js} +2 -2
- package/dist/{chunk-JLCJVPRC.js → chunk-4PQREYBU.js} +2 -2
- package/dist/{chunk-4FU4BFCH.js → chunk-5NTWGUSJ.js} +3 -3
- package/dist/chunk-5NTWGUSJ.js.map +1 -0
- package/dist/{chunk-6LCP6SVR.js → chunk-5PR6DZYW.js} +3 -3
- package/dist/chunk-5PR6DZYW.js.map +1 -0
- package/dist/{chunk-HOY2GIKV.js → chunk-5UFIHT66.js} +2 -2
- package/dist/{chunk-AWQIUI7N.js → chunk-6PC4EZ4P.js} +2 -2
- package/dist/chunk-AD4QZZVN.js +8 -0
- package/dist/{failure-candidates-PBPF45GN.js.map → chunk-AD4QZZVN.js.map} +1 -1
- package/dist/chunk-B6OXEIOF.js +126 -0
- package/dist/chunk-B6OXEIOF.js.map +1 -0
- package/dist/chunk-BDJWN3PL.js +4 -0
- package/dist/chunk-BDJWN3PL.js.map +1 -0
- package/dist/{chunk-7IF3LXAU.js → chunk-FSXWNVGL.js} +2 -2
- package/dist/{chunk-YMNQYODO.js → chunk-FTZCNID3.js} +2 -2
- package/dist/{chunk-S56ZGAFM.js → chunk-GJKYOEDE.js} +2 -2
- package/dist/{chunk-KI4CIUVJ.js → chunk-HK7TU5NX.js} +2 -2
- package/dist/chunk-IMLLHT7U.js +54 -0
- package/dist/chunk-IMLLHT7U.js.map +1 -0
- package/dist/chunk-IOYRRGK7.js +2 -0
- package/dist/chunk-IOYRRGK7.js.map +1 -0
- package/dist/{chunk-R277UDDQ.js → chunk-IVCFXLAR.js} +2 -2
- package/dist/{chunk-WRICEAR6.js → chunk-NDPU6AX2.js} +2 -2
- package/dist/{chunk-ELWKTURG.js → chunk-NG677JHW.js} +8 -8
- package/dist/chunk-NG677JHW.js.map +1 -0
- package/dist/{chunk-CCL73Z2P.js → chunk-PVQPXZHE.js} +58 -58
- package/dist/{chunk-CCL73Z2P.js.map → chunk-PVQPXZHE.js.map} +1 -1
- package/dist/{chunk-B65YTB3T.js → chunk-RJBRYUKU.js} +2 -2
- package/dist/{chunk-QLWGLRT5.js → chunk-TJ7IUHC7.js} +2 -2
- package/dist/{chunk-HSYNOMM2.js → chunk-U46G24CD.js} +2 -2
- package/dist/{chunk-CKYSGX54.js → chunk-V4PVGEWI.js} +196 -197
- package/dist/chunk-V4PVGEWI.js.map +1 -0
- package/dist/chunk-WCXXXAHV.js +3 -0
- package/dist/{chunk-DMHQIACQ.js.map → chunk-WCXXXAHV.js.map} +1 -1
- package/dist/chunk-XGOBZCYC.js +2 -0
- package/dist/chunk-XGOBZCYC.js.map +1 -0
- package/dist/{chunk-IEZ6OYFJ.js → chunk-ZDWE47LM.js} +8 -8
- package/dist/chunk-ZDWE47LM.js.map +1 -0
- package/dist/cli.js +1 -1
- package/dist/{client-CU5GNTKR.js → client-TSYZXEH7.js} +2 -2
- package/dist/{config-ITVBNUWW.js → config-QAE3LNFQ.js} +2 -2
- package/dist/config-mutator-WRQ7MFQL.js +2 -0
- package/dist/{doctor-MLD3XCYE.js → doctor-PVLVKLRA.js} +2 -2
- package/dist/failure-candidates-JNGUVBDG.js +2 -0
- package/dist/{grants-BRAVOGBP.js → grants-V2ZNLWSJ.js} +2 -2
- package/dist/index.d.ts +107 -3
- package/dist/index.js +1 -1
- package/dist/program-ZYG3YPH2.js +721 -0
- package/dist/program-ZYG3YPH2.js.map +1 -0
- package/dist/{promote-JMJPWZI7.js → promote-IRBBEXGG.js} +2 -2
- package/dist/push-bridge-325SXDGN.js +2 -0
- package/dist/{query-QGPVKGYY.js → query-NAU7J34H.js} +2 -2
- package/dist/{registry-PZNC5XYT.js → registry-I5PXGCO6.js} +2 -2
- package/dist/{request-planner-M4IKDZBU.js → request-planner-CRG3OGGG.js} +2 -2
- package/dist/{review-candidates-6DNRBJZ6.js → review-candidates-HAP7P6SH.js} +2 -2
- package/dist/{routing-7NSB6O2S.js → routing-G33LLOTF.js} +2 -2
- package/dist/schedule-tool-IP7ZCQKI.js +2 -0
- package/dist/scheduler-QXLPYSNJ.js +2 -0
- package/dist/{seat-ZRCUQCUP.js → seat-IJN7NETF.js} +2 -2
- package/dist/{select-OLNLTEBR.js → select-D7AZ2XZF.js} +2 -2
- package/dist/{set-enabled-LG3ESZDC.js → set-enabled-5YSDIQXU.js} +2 -2
- package/dist/{surface-usage-HCJTUS6Z.js → surface-usage-WSY4SHHL.js} +2 -2
- package/dist/{tool-RBXRPIBV.js → tool-GQIQWHWB.js} +2 -2
- package/dist/{tool-S6U42ULD.js → tool-XADSW6NL.js} +2 -2
- package/dist/wiki-PPX3HYXW.js +2 -0
- package/dist/wiki-PPX3HYXW.js.map +1 -0
- package/package.json +1 -1
- package/dist/board-dashboard-CPCSSVZE.js.map +0 -1
- package/dist/chunk-4FU4BFCH.js.map +0 -1
- package/dist/chunk-6LCP6SVR.js.map +0 -1
- package/dist/chunk-BRL3UPFW.js +0 -2
- package/dist/chunk-BRL3UPFW.js.map +0 -1
- package/dist/chunk-CKYSGX54.js.map +0 -1
- package/dist/chunk-DMHQIACQ.js +0 -3
- package/dist/chunk-EKOVLUKH.js +0 -2
- package/dist/chunk-EKOVLUKH.js.map +0 -1
- package/dist/chunk-ELWKTURG.js.map +0 -1
- package/dist/chunk-FBEMUCBO.js +0 -54
- package/dist/chunk-FBEMUCBO.js.map +0 -1
- package/dist/chunk-IEZ6OYFJ.js.map +0 -1
- package/dist/chunk-J3SIOMDL.js +0 -126
- package/dist/chunk-J3SIOMDL.js.map +0 -1
- package/dist/chunk-JIT5GPTX.js +0 -4
- package/dist/chunk-JIT5GPTX.js.map +0 -1
- package/dist/chunk-Y3CZE54A.js +0 -2
- package/dist/chunk-Y3CZE54A.js.map +0 -1
- package/dist/config-mutator-5YRHHA2I.js +0 -2
- package/dist/failure-candidates-PBPF45GN.js +0 -8
- package/dist/program-IBOVOVZI.js +0 -703
- package/dist/program-IBOVOVZI.js.map +0 -1
- package/dist/push-bridge-IFUQLIMF.js +0 -2
- package/dist/schedule-tool-ZP7H55EL.js +0 -2
- package/dist/scheduler-XV5UQQYH.js +0 -2
- package/dist/wiki-XKQN5CWR.js +0 -2
- /package/dist/{App-7Z2PWARZ.js.map → App-XMSNIAU6.js.map} +0 -0
- /package/dist/{ChatApp-GFAIRLGZ.js.map → ChatApp-BFYTIQF3.js.map} +0 -0
- /package/dist/{agent-LXLZGVW3.js.map → agent-E6W5VBYH.js.map} +0 -0
- /package/dist/{chunk-UUMNP47Q.js.map → chunk-2G227TF3.js.map} +0 -0
- /package/dist/{chunk-JLCJVPRC.js.map → chunk-4PQREYBU.js.map} +0 -0
- /package/dist/{chunk-HOY2GIKV.js.map → chunk-5UFIHT66.js.map} +0 -0
- /package/dist/{chunk-AWQIUI7N.js.map → chunk-6PC4EZ4P.js.map} +0 -0
- /package/dist/{chunk-7IF3LXAU.js.map → chunk-FSXWNVGL.js.map} +0 -0
- /package/dist/{chunk-YMNQYODO.js.map → chunk-FTZCNID3.js.map} +0 -0
- /package/dist/{chunk-S56ZGAFM.js.map → chunk-GJKYOEDE.js.map} +0 -0
- /package/dist/{chunk-KI4CIUVJ.js.map → chunk-HK7TU5NX.js.map} +0 -0
- /package/dist/{chunk-R277UDDQ.js.map → chunk-IVCFXLAR.js.map} +0 -0
- /package/dist/{chunk-WRICEAR6.js.map → chunk-NDPU6AX2.js.map} +0 -0
- /package/dist/{chunk-B65YTB3T.js.map → chunk-RJBRYUKU.js.map} +0 -0
- /package/dist/{chunk-QLWGLRT5.js.map → chunk-TJ7IUHC7.js.map} +0 -0
- /package/dist/{chunk-HSYNOMM2.js.map → chunk-U46G24CD.js.map} +0 -0
- /package/dist/{client-CU5GNTKR.js.map → client-TSYZXEH7.js.map} +0 -0
- /package/dist/{config-ITVBNUWW.js.map → config-QAE3LNFQ.js.map} +0 -0
- /package/dist/{config-mutator-5YRHHA2I.js.map → config-mutator-WRQ7MFQL.js.map} +0 -0
- /package/dist/{doctor-MLD3XCYE.js.map → doctor-PVLVKLRA.js.map} +0 -0
- /package/dist/{grants-BRAVOGBP.js.map → failure-candidates-JNGUVBDG.js.map} +0 -0
- /package/dist/{promote-JMJPWZI7.js.map → grants-V2ZNLWSJ.js.map} +0 -0
- /package/dist/{push-bridge-IFUQLIMF.js.map → promote-IRBBEXGG.js.map} +0 -0
- /package/dist/{query-QGPVKGYY.js.map → push-bridge-325SXDGN.js.map} +0 -0
- /package/dist/{registry-PZNC5XYT.js.map → query-NAU7J34H.js.map} +0 -0
- /package/dist/{routing-7NSB6O2S.js.map → registry-I5PXGCO6.js.map} +0 -0
- /package/dist/{request-planner-M4IKDZBU.js.map → request-planner-CRG3OGGG.js.map} +0 -0
- /package/dist/{review-candidates-6DNRBJZ6.js.map → review-candidates-HAP7P6SH.js.map} +0 -0
- /package/dist/{schedule-tool-ZP7H55EL.js.map → routing-G33LLOTF.js.map} +0 -0
- /package/dist/{scheduler-XV5UQQYH.js.map → schedule-tool-IP7ZCQKI.js.map} +0 -0
- /package/dist/{seat-ZRCUQCUP.js.map → scheduler-QXLPYSNJ.js.map} +0 -0
- /package/dist/{surface-usage-HCJTUS6Z.js.map → seat-IJN7NETF.js.map} +0 -0
- /package/dist/{select-OLNLTEBR.js.map → select-D7AZ2XZF.js.map} +0 -0
- /package/dist/{set-enabled-LG3ESZDC.js.map → set-enabled-5YSDIQXU.js.map} +0 -0
- /package/dist/{wiki-XKQN5CWR.js.map → surface-usage-WSY4SHHL.js.map} +0 -0
- /package/dist/{tool-RBXRPIBV.js.map → tool-GQIQWHWB.js.map} +0 -0
- /package/dist/{tool-S6U42ULD.js.map → tool-XADSW6NL.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/observability/surface-usage.ts"],"sourcesContent":["import { existsSync } from \"fs\"\nimport { resolve } from \"path\"\nimport { openDb } from \"@/storage/sqlite\"\n\n// --- Which operator surfaces actually get used ---\n//\n// `task_history` answers \"which agents ran\". It says nothing about which of\n// the ~46 CLI commands or 16 dashboard pages anyone ever opens — and those are\n// the two biggest surfaces by count, so they are exactly what the\n// surface-reduction work needs evidence for.\n//\n// See docs/architecture/surface-reduction.md for the bar a surface has to\n// clear to survive. This module is the missing measurement.\n//\n// Three rules, all of them about being unobtrusive:\n//\n// 1. Names only. `agentx guard log --limit 5` records \"guard log\". A page\n// view records \"/live\". Never arguments, never query strings, never\n// payloads. This counts which door was opened, not what went through it.\n// 2. Never create state. If there is no `.agentx` here, we are being run\n// from someone's home directory or a random repo — recording would\n// litter a stray database. Do nothing instead.\n// 3. Never throw, never block. A telemetry bug must not break the CLI or a\n// dashboard request. Every failure is swallowed.\n\n/**\n * True while a test runner is driving us.\n *\n * Three suites (trace-cli, process-cli, intent-ledger-cli) shell out to the\n * real CLI, so a full `pnpm test` recorded dozens of invocations of exactly\n * the commands that happen to have CLI tests — `trace list` showed 72 uses\n * against a human total of zero. That is worse than no data: it inverts the\n * ranking, making well-tested commands look popular and untested ones look\n * dead, which is precisely backwards for deciding what to remove.\n */\nfunction underTest(): boolean {\n return Boolean(process.env.VITEST || process.env.NODE_ENV === \"test\" || process.env.AGENTX_NO_TELEMETRY)\n}\n\n/** Where the install lives, or null when we're not inside one. Never creates\n * anything — the check IS the guard against writing stray databases. */\nfunction installRoot(): string | null {\n let dir = process.cwd()\n for (let i = 0; i < 5; i++) {\n if (existsSync(resolve(dir, \".agentx\")) || existsSync(resolve(dir, \"agentx.json\"))) return dir\n const parent = resolve(dir, \"..\")\n if (parent === dir) break\n dir = parent\n }\n return null\n}\n\nfunction today(now = new Date()): string {\n return now.toISOString().slice(0, 10)\n}\n\nexport type SurfaceKind = \"cli\" | \"page\"\n\n/**\n * Record one use of a surface. Silent no-op when we're outside an install,\n * when SQLite is unavailable, or on any error.\n */\nexport function recordSurfaceUse(kind: SurfaceKind, name: string, now = new Date()): void {\n try {\n if (!name) return\n if (underTest()) return\n if (!installRoot()) return\n const db = openDb({ quiet: true })\n if (!db) return\n db.prepare(\n `INSERT INTO surface_usage (kind, name, day, count, last_at)\n VALUES (?, ?, ?, 1, ?)\n ON CONFLICT(kind, name, day)\n DO UPDATE SET count = count + 1, last_at = excluded.last_at`,\n ).run(kind, name, today(now), now.toISOString())\n } catch {\n /* telemetry must never break the thing it measures */\n }\n}\n\nexport interface SurfaceRow {\n kind: string\n name: string\n count: number\n days: number\n last_at: string | null\n}\n\n/** Usage totals over a window, busiest first. Powers `agentx usage surfaces`. */\nexport function listSurfaceUse(opts: { kind?: SurfaceKind; sinceDays?: number } = {}): SurfaceRow[] {\n try {\n const db = openDb({ quiet: true })\n if (!db) return []\n const since = new Date(Date.now() - (opts.sinceDays ?? 30) * 86_400_000)\n .toISOString()\n .slice(0, 10)\n const where = [\"day >= ?\"]\n const params: unknown[] = [since]\n if (opts.kind) {\n where.push(\"kind = ?\")\n params.push(opts.kind)\n }\n return db\n .prepare(\n `SELECT kind, name, SUM(count) AS count, COUNT(DISTINCT day) AS days, MAX(last_at) AS last_at\n FROM surface_usage\n WHERE ${where.join(\" AND \")}\n GROUP BY kind, name\n ORDER BY count DESC`,\n )\n .all(...params) as SurfaceRow[]\n } catch {\n return []\n }\n}\n\n/**\n * The command path a commander invocation resolved to — \"guard log\", not\n * \"guard log --limit 5\". Walks up from the deepest matched subcommand so\n * nesting is preserved without ever touching argv.\n */\nexport function commandPath(cmd: { name(): string; parent?: unknown } | null | undefined): string {\n const parts: string[] = []\n let node: any = cmd\n while (node && typeof node.name === \"function\") {\n const n = node.name()\n // The root program is \"agentx\" itself — not a surface worth counting.\n if (node.parent) parts.unshift(n)\n node = node.parent\n }\n return parts.join(\" \")\n}\n\n/** Hook entrypoints fire per tool call, not per human decision. Counting them\n * would swamp the table and tell us nothing about operator behaviour. */\nconst NOT_A_SURFACE = new Set([\"guard check\", \"completion\", \"serve\"])\n\nexport function shouldRecordCommand(path: string): boolean {\n return Boolean(path) && !NOT_A_SURFACE.has(path)\n}\n"],"mappings":"+CAEAA,IAFA,OAAS,cAAAC,MAAkB,KAC3B,OAAS,WAAAC,MAAe,OAkCxB,SAASC,GAAqB,CAC5B,MAAO,GAAQ,QAAQ,IAAI,QAAU,QAAQ,IAAI,WAAa,QAAU,QAAQ,IAAI,oBACtF,CAIA,SAASC,GAA6B,CACpC,IAAIC,EAAM,QAAQ,IAAI,EACtB,QAASC,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,GAAIL,EAAWC,EAAQG,EAAK,SAAS,CAAC,GAAKJ,EAAWC,EAAQG,EAAK,aAAa,CAAC,EAAG,OAAOA,EAC3F,IAAME,EAASL,EAAQG,EAAK,IAAI,EAChC,GAAIE,IAAWF,EAAK,MACpBA,EAAME,EAER,OAAO,IACT,CAEA,SAASC,EAAMC,EAAM,IAAI,KAAgB,CACvC,OAAOA,EAAI,YAAY,EAAE,MAAM,EAAG,EAAE,CACtC,CAQO,SAASC,EAAiBC,EAAmBC,EAAcH,EAAM,IAAI,KAAc,CACxF,GAAI,CAGF,GAFI,CAACG,GACDT,EAAU,GACV,CAACC,EAAY,EAAG,OACpB,IAAMS,EAAKC,EAAO,CAAE,MAAO,EAAK,CAAC,EACjC,GAAI,CAACD,EAAI,OACTA,EAAG,QACD;AAAA;AAAA;AAAA,mEAIF,EAAE,IAAIF,EAAMC,EAAMJ,EAAMC,CAAG,EAAGA,EAAI,YAAY,CAAC,CACjD,MAAE,CAEF,CACF,CAWO,SAASM,EAAeC,EAAmD,CAAC,EAAiB,CAClG,GAAI,CACF,IAAMH,EAAKC,EAAO,CAAE,MAAO,EAAK,CAAC,EACjC,GAAI,CAACD,EAAI,MAAO,CAAC,EACjB,IAAMI,EAAQ,IAAI,KAAK,KAAK,IAAI,GAAKD,EAAK,WAAa,IAAM,KAAU,EACpE,YAAY,EACZ,MAAM,EAAG,EAAE,EACRE,EAAQ,CAAC,UAAU,EACnBC,EAAoB,CAACF,CAAK,EAChC,OAAID,EAAK,OACPE,EAAM,KAAK,UAAU,EACrBC,EAAO,KAAKH,EAAK,IAAI,GAEhBH,EACJ,QACC;AAAA;AAAA,iBAESK,EAAM,KAAK,OAAO;AAAA;AAAA,6BAG7B,EACC,IAAI,GAAGC,CAAM,CAClB,MAAE,CACA,MAAO,CAAC,CACV,CACF,CAOO,SAASC,EAAYC,EAAsE,CAChG,IAAMC,EAAkB,CAAC,EACrBC,EAAYF,EAChB,KAAOE,GAAQ,OAAOA,EAAK,MAAS,YAAY,CAC9C,IAAMC,EAAID,EAAK,KAAK,EAEhBA,EAAK,QAAQD,EAAM,QAAQE,CAAC,EAChCD,EAAOA,EAAK,OAEd,OAAOD,EAAM,KAAK,GAAG,CACvB,CAIA,IAAMG,EAAgB,IAAI,IAAI,CAAC,cAAe,aAAc,OAAO,CAAC,EAE7D,SAASC,EAAoBC,EAAuB,CACzD,MAAO,EAAQA,GAAS,CAACF,EAAc,IAAIE,CAAI,CACjD","names":["init_sqlite","existsSync","resolve","underTest","installRoot","dir","i","parent","today","now","recordSurfaceUse","kind","name","db","openDb","listSurfaceUse","opts","since","where","params","commandPath","cmd","parts","node","n","NOT_A_SURFACE","shouldRecordCommand","path"]}
|