tickmarkr 1.33.3 → 1.33.5
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 +1 -1
- package/dist/adapters/registry.js +6 -4
- package/dist/config/config.js +6 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -235,7 +235,7 @@ and first-attempt success rate. Cost reporting follows strict honesty rules and
|
|
|
235
235
|
- **Ranges, never single numbers**: quota multipliers and monthly-window variation make subscription costs a range, not a point estimate
|
|
236
236
|
- **"Not measurable" never becomes $0**: if a channel lacks pricing or metering data, the report explicitly states "not measurable"
|
|
237
237
|
- **Basis always shown**: every cost figure prints the token count, rate used, and date so estimates can be audited
|
|
238
|
-
- **No network calls**: pricing config is operator-maintained in `.drovr/config.yaml` (or `~/.config/
|
|
238
|
+
- **No network calls**: pricing config is operator-maintained in `.drovr/config.yaml` (or `~/.config/tickmarkr/config.yaml`; legacy `~/.config/drovr` still read), seeded with dated
|
|
239
239
|
comments and LiteLLM's JSON file named as the copy-from source; tickmarkr never calls home to fetch rates
|
|
240
240
|
- **Attribution from journal**: token counts come from tickmarkr's own telemetry spans in the audit trail, never from provider invoices or dashboards
|
|
241
241
|
|
|
@@ -54,12 +54,14 @@ export async function probeModels(cfg, repoRoot, adapters, health) {
|
|
|
54
54
|
if (process.env.VITEST && [claudeCode, codex, cursorAgent, opencode, pi, grok].includes(a))
|
|
55
55
|
return;
|
|
56
56
|
const verdicts = {};
|
|
57
|
-
|
|
57
|
+
// models probe concurrently too (v1.33.5) — sequential chains made init wall time Σ(models×60s)
|
|
58
|
+
// on the slowest adapter (measured 96s); each probe is one tiny prompt, safe to overlap
|
|
59
|
+
await Promise.all(Object.keys(cfg.tiers[a.id]?.models ?? {}).map(async (model) => {
|
|
58
60
|
const probedAt = new Date().toISOString();
|
|
59
61
|
try {
|
|
60
62
|
if (typeof a.headlessCommand !== "function") {
|
|
61
63
|
verdicts[model] = { authed: false, reason: "headless probe unavailable", probedAt };
|
|
62
|
-
|
|
64
|
+
return;
|
|
63
65
|
}
|
|
64
66
|
const promptFile = join(mkdtempSync(join(tmpdir(), "drovr-auth-")), "probe.md");
|
|
65
67
|
writeFileSync(promptFile, MODEL_PROBE_PROMPT);
|
|
@@ -68,7 +70,7 @@ export async function probeModels(cfg, repoRoot, adapters, health) {
|
|
|
68
70
|
r = await sh(a.headlessCommand(promptFile, model), repoRoot, MODEL_PROBE_TIMEOUT_MS);
|
|
69
71
|
if (r.timedOut) {
|
|
70
72
|
verdicts[model] = { authed: false, reason: `probe timed out twice (${MODEL_PROBE_TIMEOUT_MS}ms)`, probedAt };
|
|
71
|
-
|
|
73
|
+
return;
|
|
72
74
|
}
|
|
73
75
|
}
|
|
74
76
|
const reason = probeFailure(r.code, r.stdout, r.stderr, r.timedOut, MODEL_PROBE_TIMEOUT_MS);
|
|
@@ -77,7 +79,7 @@ export async function probeModels(cfg, repoRoot, adapters, health) {
|
|
|
77
79
|
catch (e) {
|
|
78
80
|
verdicts[model] = { authed: false, reason: String(e), probedAt };
|
|
79
81
|
}
|
|
80
|
-
}
|
|
82
|
+
}));
|
|
81
83
|
h.modelAuth = verdicts;
|
|
82
84
|
}));
|
|
83
85
|
}
|
package/dist/config/config.js
CHANGED
|
@@ -255,9 +255,12 @@ function readYaml(path) {
|
|
|
255
255
|
return parse(readFileSync(path, "utf8"));
|
|
256
256
|
}
|
|
257
257
|
export function globalConfigDir() {
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
258
|
+
// read-old/write-new (operator-ordered rename 2026-07-15): prefer ~/.config/tickmarkr; an
|
|
259
|
+
// existing ~/.config/drovr keeps working until the operator moves it. New scaffolds use tickmarkr.
|
|
260
|
+
const base = process.env.XDG_CONFIG_HOME ?? join(homedir(), ".config");
|
|
261
|
+
const next = join(base, "tickmarkr");
|
|
262
|
+
const legacy = join(base, "drovr");
|
|
263
|
+
return existsSync(join(next, "config.yaml")) || !existsSync(join(legacy, "config.yaml")) ? next : legacy;
|
|
261
264
|
}
|
|
262
265
|
export function loadConfig(repoRoot, opts = {}) {
|
|
263
266
|
const globalCfg = readYaml(join(opts.globalDir ?? globalConfigDir(), "config.yaml"));
|