humanish 0.65.0 → 0.67.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.
@@ -0,0 +1,75 @@
1
+ export declare const STATS_SCHEMA = "humanish.stats.v1";
2
+ export interface StatsParticipants {
3
+ total: number;
4
+ reachedGoal: number;
5
+ reportedFriction: number;
6
+ }
7
+ export interface StatsLabRow {
8
+ lab: string;
9
+ runs: number;
10
+ live: number;
11
+ dryRun: number;
12
+ /** Runs whose bundle carries a verdict; the denominator for passRate. */
13
+ judged: number;
14
+ passed: number;
15
+ /** passed / judged, absent when judged is 0. */
16
+ passRate?: number;
17
+ /** Over live runs with both timestamps. */
18
+ medianDurationMs?: number;
19
+ durationSamples: number;
20
+ /** Over runs with a known estimate. */
21
+ medianCostUsd?: number;
22
+ costSamples: number;
23
+ /** Runs with no estimate: a subscription brain, an interrupted run, an old bundle. Never zero. */
24
+ unpricedRuns: number;
25
+ participants: StatsParticipants;
26
+ }
27
+ export interface StatsDayRow {
28
+ day: string;
29
+ runs: number;
30
+ live: number;
31
+ estimatedSpendUsd: number;
32
+ unpricedRuns: number;
33
+ }
34
+ export interface StatsResult {
35
+ schema: typeof STATS_SCHEMA;
36
+ ok: true;
37
+ cwd: string;
38
+ since?: string;
39
+ lab?: string;
40
+ totals: {
41
+ runs: number;
42
+ live: number;
43
+ dryRun: number;
44
+ running: number;
45
+ /** Sum over runs with a known estimate. */
46
+ estimatedSpendUsd: number;
47
+ unpricedRuns: number;
48
+ participants: StatsParticipants;
49
+ verdicts: Record<string, number>;
50
+ };
51
+ labs: StatsLabRow[];
52
+ days: StatsDayRow[];
53
+ /** Directories that could not be read, by name — surfaced, never silently dropped. */
54
+ unreadable: string[];
55
+ note: string;
56
+ }
57
+ export declare const STATS_NOTE: string;
58
+ export interface StatsOptions {
59
+ /** ISO date or datetime; runs that started before it are excluded. */
60
+ since?: string;
61
+ /** Lab id; runs from other labs are excluded. */
62
+ lab?: string;
63
+ nowMs?: number;
64
+ }
65
+ export interface StatsFailure {
66
+ schema: typeof STATS_SCHEMA;
67
+ ok: false;
68
+ cwd: string;
69
+ error: {
70
+ code: "HUMANISH_STATS_INVALID_SINCE";
71
+ message: string;
72
+ };
73
+ }
74
+ export declare function computeStats(cwdInput: string, options?: StatsOptions): Promise<StatsResult | StatsFailure>;
75
+ export declare function formatStatsHuman(result: StatsResult | StatsFailure): string;
package/dist/stats.js ADDED
@@ -0,0 +1,196 @@
1
+ // `humanish stats`: what a directory of studies cost and how they came out (#472).
2
+ //
3
+ // Every number here already exists per bundle. What did not exist was the roll-up, so "what has
4
+ // this month of studies cost" meant reading run.json files by hand. The rules the per-run numbers
5
+ // live by carry over unchanged: an estimate is labelled an estimate, a run whose cost is unknown
6
+ // counts as unknown and never as zero, and every rate has a denominator next to it.
7
+ import path from "node:path";
8
+ import { readRunIndex } from "./run-index.js";
9
+ export const STATS_SCHEMA = "humanish.stats.v1";
10
+ export const STATS_NOTE = "Every dollar figure is an estimate summed from per-run rate-table estimates, never a provider charge. "
11
+ + "A run with no estimate (a subscription brain, an interrupted run, an older bundle) is counted in unpricedRuns and adds nothing to the sum.";
12
+ function median(values) {
13
+ if (values.length === 0)
14
+ return undefined;
15
+ const sorted = [...values].sort((a, b) => a - b);
16
+ const mid = Math.floor(sorted.length / 2);
17
+ return sorted.length % 2 === 1 ? sorted[mid] : (sorted[mid - 1] + sorted[mid]) / 2;
18
+ }
19
+ function emptyParticipants() {
20
+ return { total: 0, reachedGoal: 0, reportedFriction: 0 };
21
+ }
22
+ function addParticipants(into, entry) {
23
+ if (entry.participants === undefined)
24
+ return;
25
+ into.total += entry.participants.total;
26
+ into.reachedGoal += entry.participants.reachedGoal;
27
+ into.reportedFriction += entry.participants.reportedFriction ?? 0;
28
+ }
29
+ function entryTime(entry) {
30
+ return entry.startedAt ?? entry.completedAt ?? entry.updatedAt;
31
+ }
32
+ function round(value) {
33
+ return Math.round(value * 1_000_000) / 1_000_000;
34
+ }
35
+ export async function computeStats(cwdInput, options = {}) {
36
+ const cwd = path.resolve(cwdInput);
37
+ let sinceMs;
38
+ if (options.since !== undefined) {
39
+ sinceMs = Date.parse(options.since);
40
+ if (Number.isNaN(sinceMs)) {
41
+ return {
42
+ schema: STATS_SCHEMA,
43
+ ok: false,
44
+ cwd,
45
+ error: { code: "HUMANISH_STATS_INVALID_SINCE", message: `--since must be an ISO date or datetime, got "${options.since}".` }
46
+ };
47
+ }
48
+ }
49
+ const index = await readRunIndex(cwd, options.nowMs === undefined ? {} : { nowMs: options.nowMs });
50
+ const selected = index.runs.filter((entry) => {
51
+ if (options.lab !== undefined && entry.lab?.id !== options.lab)
52
+ return false;
53
+ if (sinceMs !== undefined) {
54
+ const at = entryTime(entry);
55
+ if (at === undefined)
56
+ return false;
57
+ const atMs = Date.parse(at);
58
+ if (Number.isNaN(atMs) || atMs < sinceMs)
59
+ return false;
60
+ }
61
+ return true;
62
+ });
63
+ const totals = {
64
+ runs: 0,
65
+ live: 0,
66
+ dryRun: 0,
67
+ running: 0,
68
+ estimatedSpendUsd: 0,
69
+ unpricedRuns: 0,
70
+ participants: emptyParticipants(),
71
+ verdicts: {}
72
+ };
73
+ const labs = new Map();
74
+ const days = new Map();
75
+ for (const entry of selected) {
76
+ totals.runs += 1;
77
+ if (entry.mode === "live")
78
+ totals.live += 1;
79
+ if (entry.mode === "dry-run")
80
+ totals.dryRun += 1;
81
+ if (entry.liveness === "running")
82
+ totals.running += 1;
83
+ const priced = typeof entry.estimatedCostUsd === "number";
84
+ if (priced)
85
+ totals.estimatedSpendUsd += entry.estimatedCostUsd;
86
+ else
87
+ totals.unpricedRuns += 1;
88
+ addParticipants(totals.participants, entry);
89
+ if (entry.verdict !== undefined)
90
+ totals.verdicts[entry.verdict] = (totals.verdicts[entry.verdict] ?? 0) + 1;
91
+ const labId = entry.lab?.id ?? "(no lab)";
92
+ let row = labs.get(labId);
93
+ if (row === undefined) {
94
+ row = {
95
+ lab: labId, runs: 0, live: 0, dryRun: 0, judged: 0, passed: 0, durationSamples: 0, costSamples: 0,
96
+ unpricedRuns: 0, participants: emptyParticipants(), durations: [], costs: []
97
+ };
98
+ labs.set(labId, row);
99
+ }
100
+ row.runs += 1;
101
+ if (entry.mode === "live")
102
+ row.live += 1;
103
+ if (entry.mode === "dry-run")
104
+ row.dryRun += 1;
105
+ if (entry.verdict !== undefined) {
106
+ row.judged += 1;
107
+ if (entry.verdict === "pass")
108
+ row.passed += 1;
109
+ }
110
+ if (entry.mode === "live" && entry.durationMs !== undefined)
111
+ row.durations.push(entry.durationMs);
112
+ if (priced)
113
+ row.costs.push(entry.estimatedCostUsd);
114
+ else
115
+ row.unpricedRuns += 1;
116
+ addParticipants(row.participants, entry);
117
+ const at = entryTime(entry);
118
+ const day = at === undefined ? "(undated)" : at.slice(0, 10);
119
+ let dayRow = days.get(day);
120
+ if (dayRow === undefined) {
121
+ dayRow = { day, runs: 0, live: 0, estimatedSpendUsd: 0, unpricedRuns: 0 };
122
+ days.set(day, dayRow);
123
+ }
124
+ dayRow.runs += 1;
125
+ if (entry.mode === "live")
126
+ dayRow.live += 1;
127
+ if (priced)
128
+ dayRow.estimatedSpendUsd += entry.estimatedCostUsd;
129
+ else
130
+ dayRow.unpricedRuns += 1;
131
+ }
132
+ const labRows = [...labs.values()]
133
+ .map(({ durations, costs, ...row }) => ({
134
+ ...row,
135
+ ...(row.judged === 0 ? {} : { passRate: round(row.passed / row.judged) }),
136
+ ...(durations.length === 0 ? {} : { medianDurationMs: Math.round(median(durations)) }),
137
+ durationSamples: durations.length,
138
+ ...(costs.length === 0 ? {} : { medianCostUsd: round(median(costs)) }),
139
+ costSamples: costs.length
140
+ }))
141
+ .sort((a, b) => b.runs - a.runs || a.lab.localeCompare(b.lab));
142
+ return {
143
+ schema: STATS_SCHEMA,
144
+ ok: true,
145
+ cwd,
146
+ ...(options.since === undefined ? {} : { since: options.since }),
147
+ ...(options.lab === undefined ? {} : { lab: options.lab }),
148
+ totals: { ...totals, estimatedSpendUsd: round(totals.estimatedSpendUsd) },
149
+ labs: labRows,
150
+ days: [...days.values()].map((row) => ({ ...row, estimatedSpendUsd: round(row.estimatedSpendUsd) })).sort((a, b) => a.day.localeCompare(b.day)),
151
+ unreadable: index.unreadable,
152
+ note: STATS_NOTE
153
+ };
154
+ }
155
+ function money(value) {
156
+ return `$${value.toFixed(2)}`;
157
+ }
158
+ function minutes(ms) {
159
+ return `${(ms / 60_000).toFixed(1)}m`;
160
+ }
161
+ export function formatStatsHuman(result) {
162
+ if (!result.ok)
163
+ return `${result.error.code}: ${result.error.message}\n`;
164
+ const t = result.totals;
165
+ const scope = [
166
+ result.lab === undefined ? undefined : `lab ${result.lab}`,
167
+ result.since === undefined ? undefined : `since ${result.since}`
168
+ ].filter((part) => part !== undefined);
169
+ const lines = [
170
+ `humanish stats${scope.length === 0 ? "" : ` (${scope.join(", ")})`}`,
171
+ `runs: ${t.runs} (${t.live} live, ${t.dryRun} dry-run${t.running > 0 ? `, ${t.running} running` : ""})`,
172
+ `estimated spend: ${money(t.estimatedSpendUsd)} over ${t.runs - t.unpricedRuns} priced run(s); ${t.unpricedRuns} unpriced (counted, not $0)`,
173
+ `participants: ${t.participants.reachedGoal}/${t.participants.total} reached the goal, ${t.participants.reportedFriction} reported friction`,
174
+ `verdicts: ${Object.entries(t.verdicts).map(([verdict, count]) => `${verdict} ${count}`).join(", ") || "none recorded"}`
175
+ ];
176
+ if (result.labs.length > 0) {
177
+ lines.push("", "per lab:");
178
+ for (const row of result.labs) {
179
+ const rate = row.passRate === undefined ? "no verdicts" : `${row.passed}/${row.judged} pass`;
180
+ const duration = row.medianDurationMs === undefined ? "no timed live runs" : `median ${minutes(row.medianDurationMs)} over ${row.durationSamples}`;
181
+ const cost = row.medianCostUsd === undefined ? "no priced runs" : `median ${money(row.medianCostUsd)} over ${row.costSamples}`;
182
+ lines.push(`- ${row.lab}: ${row.runs} run(s), ${row.live} live; ${rate}; ${duration}; ${cost}; ${row.unpricedRuns} unpriced`);
183
+ }
184
+ }
185
+ if (result.days.length > 0) {
186
+ lines.push("", "by day:");
187
+ for (const row of result.days) {
188
+ lines.push(`- ${row.day}: ${row.runs} run(s), ${row.live} live, ${money(row.estimatedSpendUsd)} estimated${row.unpricedRuns > 0 ? `, ${row.unpricedRuns} unpriced` : ""}`);
189
+ }
190
+ }
191
+ if (result.unreadable.length > 0)
192
+ lines.push("", `unreadable run directories: ${result.unreadable.join(", ")}`);
193
+ lines.push("", result.note);
194
+ return `${lines.join("\n")}\n`;
195
+ }
196
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../src/stats.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,9 @@ export interface TelemetryProperties {
12
12
  brain?: "provider-key" | "local-agent" | "none";
13
13
  ok?: boolean;
14
14
  exitCode?: number;
15
+ /** One of humanish's OWN error codes (`HUMANISH_*`), never a message. Which failure ends a
16
+ * first run is the question the funnel exists to answer. */
17
+ errorCode?: string;
15
18
  }
16
19
  export interface TelemetryState {
17
20
  enabled: boolean;
@@ -61,6 +64,17 @@ export declare function buildPayload(args: {
61
64
  platform?: string;
62
65
  nodeVersion?: string;
63
66
  }): TelemetryPayload;
67
+ /**
68
+ * Read the study facts off a command's result document: mode, outcome, starter lab, brain route,
69
+ * and our own error code. Duck-typed over every result shape the CLI writes, because the point is
70
+ * ONE derivation at the one seam every command already passes through (writeResult), so that a
71
+ * backend added later cannot forget to report. Returns {} for results that carry no study.
72
+ *
73
+ * The first two days of 0.62.0 data had 1,359 `run`/`lab run` events and not one carried a mode
74
+ * or an outcome — the vocabulary existed, nothing populated it — so the one question telemetry
75
+ * was added to answer ("does anyone get to a working LIVE first run") had no answer in the data.
76
+ */
77
+ export declare function deriveStudyFacts(result: unknown): TelemetryProperties;
64
78
  /** The notice, shown once, before anything is sent. */
65
79
  export declare const TELEMETRY_NOTICE: string;
66
80
  export interface SendDeps {
package/dist/telemetry.js CHANGED
@@ -126,10 +126,29 @@ export function safeLabId(lab) {
126
126
  export function buildPayload(args) {
127
127
  const env = args.env ?? process.env;
128
128
  const properties = {
129
+ // Ask the receiver not to derive a location from the request. "Anonymous" and "tied to
130
+ // nothing" are only true if the collector honours them too: PostHog enriches every event
131
+ // with GeoIP city/coordinates from the source address unless told not to, and the project
132
+ // is additionally set to discard the client IP at ingestion (`anonymize_ips`). Both, so that
133
+ // neither a default nor a console setting decides what the doc promised.
134
+ $geoip_disable: true,
135
+ // No person profile. PostHog builds one per distinct_id by default and attaches $set /
136
+ // $set_once properties to it (before 2026-09-01 those carried a city and coordinates). An
137
+ // anonymous machine id has nothing to profile, and PostHog's own docs name this flag as the
138
+ // way to say so.
139
+ $process_person_profile: false,
129
140
  version: args.version,
130
141
  os: args.platform ?? process.platform,
131
142
  node: (args.nodeVersion ?? process.version).split(".")[0].replace("v", ""),
132
- ci: env.CI !== undefined && env.CI !== "" && env.CI !== "0"
143
+ ci: env.CI !== undefined && env.CI !== "" && env.CI !== "0",
144
+ // A humanish study participant is a real cold install on a machine we do not own, so it emits
145
+ // like any other new adopter and is indistinguishable from one. It is also the exact
146
+ // population we are trying to count, so a busy self-study day reads as an adoption spike.
147
+ // Stamped rather than suppressed, the same shape as `ci`: participant runs stay visible and
148
+ // stay separable, and we keep a genuine measurement of what a cold install does (#546).
149
+ studyParticipant: env.HUMANISH_STUDY_PARTICIPANT !== undefined
150
+ && env.HUMANISH_STUDY_PARTICIPANT !== ""
151
+ && env.HUMANISH_STUDY_PARTICIPANT !== "0"
133
152
  };
134
153
  const given = args.properties ?? {};
135
154
  if (given.command !== undefined)
@@ -148,8 +167,97 @@ export function buildPayload(args) {
148
167
  properties.ok = given.ok;
149
168
  if (given.exitCode !== undefined)
150
169
  properties.exit_code = given.exitCode;
170
+ if (given.errorCode !== undefined && OWN_ERROR_CODE.test(given.errorCode))
171
+ properties.error_code = given.errorCode;
151
172
  return { event: args.event, distinct_id: args.anonymousId, properties };
152
173
  }
174
+ /** Our own codes only. A provider's or the OS's message is free text and never travels. */
175
+ const OWN_ERROR_CODE = /^HUMANISH_[A-Z0-9_]{1,80}$/;
176
+ /**
177
+ * The closed vocabulary an outcome may take. Actor statuses (src/actor-contract.ts), the two
178
+ * shared-world extras, a fan-out roll-up, and the two shapes a non-study command has. Anything
179
+ * else — a provider's reason string, a scorer's verdict text — is dropped, never forwarded.
180
+ */
181
+ const OUTCOMES = new Set([
182
+ "passed", "abandoned", "incomplete", "blocked", "timed_out", "failed",
183
+ "contract_proof_only",
184
+ "all_passed", "some_passed", "none_passed",
185
+ "ok", "error"
186
+ ]);
187
+ const BRAINS_BY_ACTOR = {
188
+ "local-agent": "local-agent",
189
+ "openai-computer-use": "provider-key",
190
+ "codex-exec": "provider-key",
191
+ "codex-tui": "provider-key",
192
+ "codex-app-server": "provider-key",
193
+ "scripted-browser": "none"
194
+ };
195
+ function asRecord(value) {
196
+ return typeof value === "object" && value !== null ? value : undefined;
197
+ }
198
+ /**
199
+ * Read the study facts off a command's result document: mode, outcome, starter lab, brain route,
200
+ * and our own error code. Duck-typed over every result shape the CLI writes, because the point is
201
+ * ONE derivation at the one seam every command already passes through (writeResult), so that a
202
+ * backend added later cannot forget to report. Returns {} for results that carry no study.
203
+ *
204
+ * The first two days of 0.62.0 data had 1,359 `run`/`lab run` events and not one carried a mode
205
+ * or an outcome — the vocabulary existed, nothing populated it — so the one question telemetry
206
+ * was added to answer ("does anyone get to a working LIVE first run") had no answer in the data.
207
+ */
208
+ export function deriveStudyFacts(result) {
209
+ const r = asRecord(result);
210
+ if (!r)
211
+ return {};
212
+ const facts = {};
213
+ if (r.dryRun === true)
214
+ facts.mode = "dry-run";
215
+ else if (r.dryRun === false)
216
+ facts.mode = "live";
217
+ else if (r.mode === "dry-run" || r.mode === "live")
218
+ facts.mode = r.mode;
219
+ const labRecord = asRecord(r.lab);
220
+ const labId = typeof r.labId === "string" ? r.labId
221
+ : typeof labRecord?.id === "string" ? labRecord.id
222
+ : typeof r.lab === "string" ? r.lab
223
+ : undefined;
224
+ const lab = safeLabId(labId);
225
+ if (lab !== undefined)
226
+ facts.lab = lab;
227
+ const error = asRecord(r.error);
228
+ if (typeof error?.code === "string" && OWN_ERROR_CODE.test(error.code))
229
+ facts.errorCode = error.code;
230
+ const session = asRecord(r.session);
231
+ const laneSummary = asRecord(r.laneSummary);
232
+ let outcome;
233
+ if (laneSummary && typeof laneSummary.total === "number" && typeof laneSummary.passed === "number" && laneSummary.total > 1) {
234
+ outcome = laneSummary.passed === laneSummary.total ? "all_passed"
235
+ : laneSummary.passed === 0 ? "none_passed"
236
+ : "some_passed";
237
+ }
238
+ else if (typeof session?.status === "string") {
239
+ outcome = session.status;
240
+ }
241
+ else if (typeof r.status === "string") {
242
+ outcome = r.status;
243
+ }
244
+ else if (r.error !== undefined && r.error !== null) {
245
+ outcome = "error";
246
+ }
247
+ else if (r.ok === true && facts.mode !== undefined) {
248
+ outcome = "ok";
249
+ }
250
+ if (outcome !== undefined && OUTCOMES.has(outcome))
251
+ facts.outcome = outcome;
252
+ else if (outcome !== undefined && facts.errorCode !== undefined)
253
+ facts.outcome = "error";
254
+ if (typeof r.actor === "string") {
255
+ const brain = facts.mode === "dry-run" ? "none" : BRAINS_BY_ACTOR[r.actor];
256
+ if (brain !== undefined)
257
+ facts.brain = brain;
258
+ }
259
+ return facts;
260
+ }
153
261
  /** The notice, shown once, before anything is sent. */
154
262
  export const TELEMETRY_NOTICE = [
155
263
  "humanish collects anonymous usage data (which command ran, whether it worked, how long it took).",
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  Date: 2026-06-02 (current-state note updated 2026-07-14)
4
4
 
5
5
  Status: reference map for the major contracts shipped through source version
6
- `0.65.0`; it is not an exhaustive inventory of command/result envelopes. Exported types,
6
+ `0.67.0`; it is not an exhaustive inventory of command/result envelopes. Exported types,
7
7
  schema constants, parsers, and validators in `src/` are authoritative. Rows
8
8
  marked "reserved" name layering intent only — no code emits or validates them
9
9
  yet. Do not emit a reserved schema.
@@ -29,7 +29,7 @@ study completed, reproduced, and produced a real accessibility finding via a
29
29
  keyboard-first participant
30
30
  ([docs/goals/email-gated-signup/receipts/](email-gated-signup/receipts/)).
31
31
 
32
- ## Current Program Truth (source `0.65.0`)
32
+ ## Current Program Truth (source `0.67.0`)
33
33
 
34
34
  The package source and repository implementation in this tree agree on these
35
35
  points:
@@ -2,7 +2,7 @@
2
2
 
3
3
  Status: public-safe contributor and agent ramp.
4
4
 
5
- Package/source version in this tree: `0.65.0` (2026-09-01). The Observer is phone-usable as a stated requirement (observer/AGENTS.md); interactive primitives start from Base UI. The Observer renderer is the observer/ workspace artifact only; the legacy string-concat renderer was deleted at cutover (#426), and rollback is a version pin to 0.42.0. The containment boundary introduced in
5
+ Package/source version in this tree: `0.67.0` (2026-09-01). The Observer is phone-usable as a stated requirement (observer/AGENTS.md); interactive primitives start from Base UI. The Observer renderer is the observer/ workspace artifact only; the legacy string-concat renderer was deleted at cutover (#426), and rollback is a version pin to 0.42.0. The containment boundary introduced in
6
6
  `0.15.1` remains in force: managed run and output paths bind to validated
7
7
  physical filesystem identities, and stored provider IDs are evidence, not
8
8
  cleanup authority. The bundled OSS meta-lab is dry-run only until
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "humanish",
3
- "version": "0.65.0",
3
+ "version": "0.67.0",
4
4
  "description": "Open-source-safe CLI for persona simulation, observer review, and public-safe feedback drafts.",
5
5
  "author": "Daniel G Wilson <daniel@danielgwilson.com>",
6
6
  "keywords": [