humanish 0.96.1 → 0.98.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/AGENTS.md +86 -79
- package/CONTRIBUTING.md +7 -2
- package/README.md +11 -2
- package/dist/actor-contract.d.ts +35 -1
- package/dist/actor-contract.js +38 -0
- package/dist/actor-contract.js.map +1 -1
- package/dist/adapter-extension.js +1 -0
- package/dist/adapter-extension.js.map +1 -1
- package/dist/automatic-analysis-config.d.ts +15 -5
- package/dist/automatic-analysis-config.js +25 -4
- package/dist/automatic-analysis-config.js.map +1 -1
- package/dist/automatic-study-analysis.js +4 -2
- package/dist/automatic-study-analysis.js.map +1 -1
- package/dist/browser-control-client.d.ts +14 -0
- package/dist/browser-control-client.js +134 -0
- package/dist/browser-control-client.js.map +1 -0
- package/dist/browser-control-dispatcher.d.ts +14 -0
- package/dist/browser-control-dispatcher.js +109 -0
- package/dist/browser-control-dispatcher.js.map +1 -0
- package/dist/browser-control-protocol.d.ts +371 -0
- package/dist/browser-control-protocol.js +155 -0
- package/dist/browser-control-protocol.js.map +1 -0
- package/dist/browser-control-transport.d.ts +24 -0
- package/dist/browser-control-transport.js +156 -0
- package/dist/browser-control-transport.js.map +1 -0
- package/dist/comms-lease-store.d.ts +1 -0
- package/dist/comms-lease-store.js +9 -3
- package/dist/comms-lease-store.js.map +1 -1
- package/dist/computer-use-actor.d.ts +2 -2
- package/dist/computer-use-actor.js +6 -1
- package/dist/computer-use-actor.js.map +1 -1
- package/dist/computer-use.d.ts +23 -1
- package/dist/computer-use.js +253 -70
- package/dist/computer-use.js.map +1 -1
- package/dist/cua-actor-lab.d.ts +24 -289
- package/dist/cua-actor-lab.js +203 -1983
- package/dist/cua-actor-lab.js.map +1 -1
- package/dist/cua-desktop-lane.d.ts +35 -0
- package/dist/cua-desktop-lane.js +13 -0
- package/dist/cua-desktop-lane.js.map +1 -0
- package/dist/cua-executor-error.d.ts +31 -0
- package/dist/cua-executor-error.js +48 -0
- package/dist/cua-executor-error.js.map +1 -0
- package/dist/cua-provider-error.d.ts +12 -0
- package/dist/cua-provider-error.js +28 -0
- package/dist/cua-provider-error.js.map +1 -0
- package/dist/desktop-session.d.ts +41 -0
- package/dist/desktop-session.js +46 -0
- package/dist/desktop-session.js.map +1 -0
- package/dist/doctor-lab.d.ts +8 -1
- package/dist/doctor-lab.js +40 -8
- package/dist/doctor-lab.js.map +1 -1
- package/dist/e2b-cua-desktop.d.ts +3 -0
- package/dist/e2b-cua-desktop.js +675 -0
- package/dist/e2b-cua-desktop.js.map +1 -0
- package/dist/e2b-cua-provisioning.d.ts +311 -0
- package/dist/e2b-cua-provisioning.js +1213 -0
- package/dist/e2b-cua-provisioning.js.map +1 -0
- package/dist/e2b-desktop-executor.d.ts +1 -24
- package/dist/e2b-desktop-executor.js +2 -127
- package/dist/e2b-desktop-executor.js.map +1 -1
- package/dist/e2b-desktop-session.d.ts +7 -0
- package/dist/e2b-desktop-session.js +29 -0
- package/dist/e2b-desktop-session.js.map +1 -0
- package/dist/e2b-terminal-lab.js +1 -0
- package/dist/e2b-terminal-lab.js.map +1 -1
- package/dist/frame-signature.d.ts +24 -0
- package/dist/frame-signature.js +128 -0
- package/dist/frame-signature.js.map +1 -0
- package/dist/guest-bootstrap.d.ts +43 -0
- package/dist/guest-bootstrap.js +240 -0
- package/dist/guest-bootstrap.js.map +1 -0
- package/dist/guest-browser-tools.d.ts +8 -0
- package/dist/guest-browser-tools.js +66 -0
- package/dist/guest-browser-tools.js.map +1 -0
- package/dist/guest-chromium-text.d.ts +27 -0
- package/dist/guest-chromium-text.js +281 -0
- package/dist/guest-chromium-text.js.map +1 -0
- package/dist/guest-desktop-executor.d.ts +22 -0
- package/dist/guest-desktop-executor.js +177 -0
- package/dist/guest-desktop-executor.js.map +1 -0
- package/dist/guest-desktop-native.d.ts +14 -0
- package/dist/guest-desktop-native.js +131 -0
- package/dist/guest-desktop-native.js.map +1 -0
- package/dist/guest-runtime-desktop.d.ts +35 -0
- package/dist/guest-runtime-desktop.js +231 -0
- package/dist/guest-runtime-desktop.js.map +1 -0
- package/dist/guest-runtime-main.d.ts +1 -0
- package/dist/guest-runtime-main.js +31 -0
- package/dist/guest-runtime-main.js.map +1 -0
- package/dist/guest-runtime-revision.d.ts +1 -0
- package/dist/guest-runtime-revision.js +3 -0
- package/dist/guest-runtime-revision.js.map +1 -0
- package/dist/guest-runtime.d.ts +25 -0
- package/dist/guest-runtime.js +96 -0
- package/dist/guest-runtime.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/lab-config.js +10 -3
- package/dist/lab-config.js.map +1 -1
- package/dist/lab-engine.js +6 -0
- package/dist/lab-engine.js.map +1 -1
- package/dist/lab-summary.d.ts +5 -1
- package/dist/lab-summary.js +5 -0
- package/dist/lab-summary.js.map +1 -1
- package/dist/local-agent-cli.js +1 -1
- package/dist/local-agent-cli.js.map +1 -1
- package/dist/local-firecracker-desktop.d.ts +13 -0
- package/dist/local-firecracker-desktop.js +150 -0
- package/dist/local-firecracker-desktop.js.map +1 -0
- package/dist/local-firecracker-study.d.ts +9 -0
- package/dist/local-firecracker-study.js +93 -0
- package/dist/local-firecracker-study.js.map +1 -0
- package/dist/local-runtime-config.d.ts +6 -0
- package/dist/local-runtime-config.js +56 -0
- package/dist/local-runtime-config.js.map +1 -0
- package/dist/local-runtime-release.d.ts +3 -0
- package/dist/local-runtime-release.js +8 -0
- package/dist/local-runtime-release.js.map +1 -0
- package/dist/local-runtime.d.ts +25 -0
- package/dist/local-runtime.js +113 -0
- package/dist/local-runtime.js.map +1 -0
- package/dist/observer-app.html +4 -4
- package/dist/pricing.d.ts +22 -1
- package/dist/pricing.js +22 -0
- package/dist/pricing.js.map +1 -1
- package/dist/program.js +50 -9
- package/dist/program.js.map +1 -1
- package/dist/restricted-codex-analysis.d.ts +15 -0
- package/dist/restricted-codex-analysis.js +13 -0
- package/dist/restricted-codex-analysis.js.map +1 -0
- package/dist/restricted-codex-participant-policy.d.ts +39 -0
- package/dist/restricted-codex-participant-policy.js +69 -0
- package/dist/restricted-codex-participant-policy.js.map +1 -0
- package/dist/restricted-codex-participant-run.d.ts +20 -0
- package/dist/restricted-codex-participant-run.js +78 -0
- package/dist/restricted-codex-participant-run.js.map +1 -0
- package/dist/restricted-codex-participant.d.ts +14 -0
- package/dist/restricted-codex-participant.js +178 -0
- package/dist/restricted-codex-participant.js.map +1 -0
- package/dist/restricted-codex-policy.d.ts +56 -0
- package/dist/restricted-codex-policy.js +151 -0
- package/dist/restricted-codex-policy.js.map +1 -0
- package/dist/restricted-codex-session.d.ts +19 -0
- package/dist/restricted-codex-session.js +413 -0
- package/dist/restricted-codex-session.js.map +1 -0
- package/dist/restricted-codex-transport.d.ts +58 -0
- package/dist/restricted-codex-transport.js +233 -0
- package/dist/restricted-codex-transport.js.map +1 -0
- package/dist/run-detail.js +4 -2
- package/dist/run-detail.js.map +1 -1
- package/dist/run.d.ts +12 -5
- package/dist/run.js +17 -1
- package/dist/run.js.map +1 -1
- package/dist/shared-world-lab.js +2 -2
- package/dist/shared-world-lab.js.map +1 -1
- package/dist/study-analysis-codex-config.d.ts +11 -0
- package/dist/study-analysis-codex-config.js +34 -0
- package/dist/study-analysis-codex-config.js.map +1 -0
- package/dist/study-analysis-engine.d.ts +6 -3
- package/dist/study-analysis-engine.js +19 -10
- package/dist/study-analysis-engine.js.map +1 -1
- package/dist/study-analysis-job.d.ts +3 -2
- package/dist/study-analysis-job.js +1 -1
- package/dist/study-analysis-job.js.map +1 -1
- package/dist/study-analysis-provider.d.ts +4 -2
- package/dist/study-analysis-provider.js +1 -1
- package/dist/study-analysis-provider.js.map +1 -1
- package/dist/study-analysis-service.d.ts +3 -0
- package/dist/study-analysis-service.js +24 -6
- package/dist/study-analysis-service.js.map +1 -1
- package/dist/study-analysis-validation.d.ts +43 -19
- package/dist/study-analysis-validation.js +23 -10
- package/dist/study-analysis-validation.js.map +1 -1
- package/dist/study-analysis.d.ts +27 -2
- package/dist/study-costs.js +6 -0
- package/dist/study-costs.js.map +1 -1
- package/dist/tui-app.js +102 -102
- package/docs/architecture/browser-control.md +117 -0
- package/docs/architecture/desktop-sessions.md +80 -0
- package/docs/architecture/guest-desktop.md +87 -0
- package/docs/architecture/local-browser-runtime.md +100 -0
- package/docs/architecture/restricted-codex-analysis.md +91 -0
- package/docs/architecture/runtime-broker-core.md +30 -0
- package/docs/contracts/schemas.md +1 -1
- package/docs/contracts/study-analysis.md +44 -2
- package/docs/goals/current.md +25 -9
- package/docs/product/automatic-analysis.md +24 -3
- package/docs/product/open-source-install-experience.md +7 -0
- package/docs/ramp/README.md +30 -13
- package/docs/release/0.97.0-codex-account-analysis.md +45 -0
- package/docs/release/0.98.0-local-browser-studies.md +31 -0
- package/package.json +4 -2
- package/skills/humanish/SKILL.md +39 -0
package/dist/pricing.d.ts
CHANGED
|
@@ -1,6 +1,24 @@
|
|
|
1
1
|
import type { ActorTokenUsage } from "./actor-contract.js";
|
|
2
2
|
export declare const PRICING_SCHEMA = "humanish.pricing.v1";
|
|
3
3
|
export declare const ACTOR_ESTIMATED_COST_SCHEMA = "humanish.actor-estimated-cost.v1";
|
|
4
|
+
/** Account lanes must never acquire a price through an aggregate or ambiguous model line. */
|
|
5
|
+
export declare function contradictsAccountBilling(streams: readonly {
|
|
6
|
+
id?: string;
|
|
7
|
+
laneId?: string;
|
|
8
|
+
actor?: {
|
|
9
|
+
executionProfile?: {
|
|
10
|
+
billing?: unknown;
|
|
11
|
+
} | undefined;
|
|
12
|
+
};
|
|
13
|
+
liveActor?: {
|
|
14
|
+
executionProfile?: {
|
|
15
|
+
billing?: unknown;
|
|
16
|
+
} | undefined;
|
|
17
|
+
};
|
|
18
|
+
}[], cost: {
|
|
19
|
+
fullyEstimated?: unknown;
|
|
20
|
+
breakdown?: unknown;
|
|
21
|
+
} | undefined): boolean;
|
|
4
22
|
export interface ModelRate {
|
|
5
23
|
/** USD per input token (the per-1M equivalent is noted in the comment beside each entry). */
|
|
6
24
|
inputUsdPerToken: number;
|
|
@@ -63,7 +81,7 @@ export interface ActorEstimatedCost {
|
|
|
63
81
|
schema: typeof ACTOR_ESTIMATED_COST_SCHEMA;
|
|
64
82
|
/** null = declared absent (no rate for the model / no token usage). */
|
|
65
83
|
estimatedCostUsd: number | null;
|
|
66
|
-
reason?: "no_rate_for_model" | "no_token_usage";
|
|
84
|
+
reason?: "no_rate_for_model" | "no_token_usage" | "account_billing_unknown";
|
|
67
85
|
/** Pricing provenance date; null iff estimatedCostUsd is null. */
|
|
68
86
|
ratesAsOf: string | null;
|
|
69
87
|
/** The pricing-page URL/comment that produced the rate. */
|
|
@@ -115,6 +133,9 @@ export declare function round6(n: number): number;
|
|
|
115
133
|
* the rate table is injectable (tests pass a fake sheet). Returns a DECLARED-ABSENT estimate
|
|
116
134
|
* (estimatedCostUsd: null + a reason) for a missing rate or missing usage — never a guessed cost.
|
|
117
135
|
*/
|
|
136
|
+
export declare function estimateActorCostForExecution(usage: ActorTokenUsage | undefined, modelId: string | undefined, profile?: {
|
|
137
|
+
billing?: unknown;
|
|
138
|
+
}): ActorEstimatedCost;
|
|
118
139
|
export declare function estimateActorCost(tokenUsage: ActorTokenUsage | undefined, modelId: string | undefined, rates?: Record<string, ModelRate>): ActorEstimatedCost;
|
|
119
140
|
/**
|
|
120
141
|
* Estimate the E2B desktop-minute cost from a host-side create->teardown span (minutes). The rate
|
package/dist/pricing.js
CHANGED
|
@@ -12,6 +12,22 @@
|
|
|
12
12
|
// so a reader can never confuse an estimate for an authoritative charge (invariant 6).
|
|
13
13
|
export const PRICING_SCHEMA = "humanish.pricing.v1";
|
|
14
14
|
export const ACTOR_ESTIMATED_COST_SCHEMA = "humanish.actor-estimated-cost.v1";
|
|
15
|
+
/** Account lanes must never acquire a price through an aggregate or ambiguous model line. */
|
|
16
|
+
export function contradictsAccountBilling(streams, cost) {
|
|
17
|
+
const account = (stream) => (stream.liveActor?.executionProfile ?? stream.actor?.executionProfile)?.billing === "account-unknown";
|
|
18
|
+
if (!cost || !streams.some(account))
|
|
19
|
+
return false;
|
|
20
|
+
if (cost.fullyEstimated === true)
|
|
21
|
+
return true;
|
|
22
|
+
if (!Array.isArray(cost.breakdown))
|
|
23
|
+
return true;
|
|
24
|
+
return cost.breakdown.some((line) => {
|
|
25
|
+
if (line?.kind !== "model-tokens" || typeof line.estimatedCostUsd !== "number")
|
|
26
|
+
return false;
|
|
27
|
+
const owners = typeof line.laneId === "string" ? streams.filter(s => s.id === line.laneId || s.laneId === line.laneId) : streams;
|
|
28
|
+
return owners.length !== 1 || account(owners[0]);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
15
31
|
// The gpt-5.6 long-context tier: >272K input tokens re-prices the FULL request at 2x
|
|
16
32
|
// input-side / 1.5x output (developers.openai.com/api/docs/models/gpt-5.6-sol, 2026-08-18).
|
|
17
33
|
const GPT56_LONG_CONTEXT = {
|
|
@@ -137,6 +153,12 @@ export function round6(n) {
|
|
|
137
153
|
* the rate table is injectable (tests pass a fake sheet). Returns a DECLARED-ABSENT estimate
|
|
138
154
|
* (estimatedCostUsd: null + a reason) for a missing rate or missing usage — never a guessed cost.
|
|
139
155
|
*/
|
|
156
|
+
export function estimateActorCostForExecution(usage, modelId, profile) {
|
|
157
|
+
return profile?.billing === "account-unknown"
|
|
158
|
+
? { schema: ACTOR_ESTIMATED_COST_SCHEMA, estimatedCostUsd: null, ratesAsOf: null, reason: "account_billing_unknown",
|
|
159
|
+
...(modelId === undefined ? {} : { modelId }) }
|
|
160
|
+
: estimateActorCost(usage, modelId);
|
|
161
|
+
}
|
|
140
162
|
export function estimateActorCost(tokenUsage, modelId, rates = MODEL_RATES) {
|
|
141
163
|
if (!tokenUsage || (tokenUsage.input === undefined && tokenUsage.output === undefined)) {
|
|
142
164
|
return { schema: ACTOR_ESTIMATED_COST_SCHEMA, estimatedCostUsd: null, reason: "no_token_usage", ratesAsOf: null };
|
package/dist/pricing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,0FAA0F;AAC1F,6FAA6F;AAC7F,uFAAuF;AACvF,EAAE;AACF,yFAAyF;AACzF,4FAA4F;AAC5F,2FAA2F;AAC3F,+FAA+F;AAC/F,2FAA2F;AAC3F,4FAA4F;AAC5F,uFAAuF;AAMvF,MAAM,CAAC,MAAM,cAAc,GAAG,qBAAqB,CAAC;AACpD,MAAM,CAAC,MAAM,2BAA2B,GAAG,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"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"}
|
package/dist/program.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { automaticAnalysisBudget, formatAutomaticAnalysisBudget, DEFAULT_ANALYSIS_TIMEOUT_MS
|
|
1
|
+
import { resolveAutomaticAnalysis, automaticAnalysisBudget, formatAutomaticAnalysisBudget, DEFAULT_ANALYSIS_TIMEOUT_MS } from "./automatic-analysis-config.js";
|
|
2
2
|
import { automaticAnalysisSucceeded } from "./automatic-analysis-completion.js";
|
|
3
3
|
import { formatCuaDiagnostics, formatCuaStopCause } from "./cua-diagnostics.js";
|
|
4
4
|
import { existsSync, readFileSync } from "node:fs";
|
|
@@ -410,6 +410,7 @@ export function createProgram(io = {}) {
|
|
|
410
410
|
registerStatsCommand(program, cliIo);
|
|
411
411
|
registerExportCommand(program, cliIo);
|
|
412
412
|
registerCommsCommands(program, cliIo);
|
|
413
|
+
registerRuntimeCommands(program, cliIo);
|
|
413
414
|
registerReclaimCommand(program, cliIo);
|
|
414
415
|
registerWatchCommand(program, cliIo);
|
|
415
416
|
registerObserveCommand(program, cliIo);
|
|
@@ -1018,31 +1019,46 @@ function analysisSelection(options, command) {
|
|
|
1018
1019
|
function registerAnalyzeCommand(parent, io) {
|
|
1019
1020
|
const analyze = parent.command("analyze")
|
|
1020
1021
|
.enablePositionalOptions()
|
|
1021
|
-
.description("Analyze retained participant evidence into versioned findings.
|
|
1022
|
+
.description("Analyze retained participant evidence into versioned findings. Selected text and captures go to the chosen remote analyst. Opening Observer never starts analysis.")
|
|
1022
1023
|
.summary("Generate evidence-linked study findings.")
|
|
1023
1024
|
.option("--run <id>", "Completed run id or latest pointer.", "latest")
|
|
1024
1025
|
.option("--cwd <path>", "Target project directory.", ".")
|
|
1025
|
-
.option("--
|
|
1026
|
-
.option("--
|
|
1026
|
+
.option("--provider <name>", "Analyst: openai (default) or restricted codex account. No provider fallback.")
|
|
1027
|
+
.option("--max-cost <usd>", "Required for OpenAI, including dry-run: USD admission estimate ceiling, not a billing cap. Unsupported for Codex.")
|
|
1028
|
+
.option("--model <id>", "Supported vision model. OpenAI uses high effort; qualified Codex account analysis uses low effort.", "gpt-6-astra")
|
|
1027
1029
|
.option("--question <text>", "Additional reviewer question; does not change participant instructions.")
|
|
1028
1030
|
.option("--timeout-ms <ms>", "Request timeout, at most 600000 ms.", String(DEFAULT_ANALYSIS_TIMEOUT_MS))
|
|
1029
|
-
.option("--max-output-tokens <n>", "
|
|
1031
|
+
.option("--max-output-tokens <n>", "OpenAI response-token limit including reasoning, 256–32768. Omit for admission-based sizing. Unsupported for Codex.")
|
|
1030
1032
|
.option("--dry-run", "Capture and validate local input and estimate admission; no request or analysis artifact.")
|
|
1031
1033
|
.option("--rerun", "Create a new immutable version even when the same input and configuration were analyzed.")
|
|
1032
1034
|
.option("--json", JSON_OPTION_DESCRIPTION)
|
|
1033
1035
|
.action(async (options, command) => {
|
|
1036
|
+
const selected = resolveAutomaticAnalysis({
|
|
1037
|
+
...(options.provider === undefined ? {} : { provider: options.provider }), model: options.model,
|
|
1038
|
+
...(options.question === undefined ? {} : { question: options.question }), timeoutMs: Number(options.timeoutMs),
|
|
1039
|
+
...(options.provider === "codex" && options.maxCost === undefined ? {} : { maxCostUsd: Number(options.maxCost) }),
|
|
1040
|
+
...(options.maxOutputTokens === undefined ? {} : { maxOutputTokens: Number(options.maxOutputTokens) })
|
|
1041
|
+
});
|
|
1042
|
+
if (!selected.ok || !selected.config) {
|
|
1043
|
+
const result = { schema: "humanish.analyze-result.v1", ok: false, run: options.run, dryRun: options.dryRun === true,
|
|
1044
|
+
reused: false, warnings: [], error: { code: "ANALYSIS_CONFIG_INVALID", message: selected.ok ? "Analysis is disabled." : selected.message } };
|
|
1045
|
+
writeResult(command, io, result, value => `${value.error.message}\n`);
|
|
1046
|
+
io.setExitCode(2);
|
|
1047
|
+
return;
|
|
1048
|
+
}
|
|
1034
1049
|
const controller = new AbortController();
|
|
1035
1050
|
const cancel = () => controller.abort();
|
|
1036
1051
|
process.once("SIGINT", cancel);
|
|
1037
1052
|
try {
|
|
1038
1053
|
const result = await analyzeStudy(options.cwd, options.run, {
|
|
1039
|
-
config:
|
|
1040
|
-
|
|
1041
|
-
preferLargerOutput: options.maxOutputTokens === undefined,
|
|
1054
|
+
config: selected.config,
|
|
1055
|
+
preferLargerOutput: selected.preferLargerOutput === true,
|
|
1042
1056
|
...(options.dryRun === undefined ? {} : { dryRun: options.dryRun }),
|
|
1043
1057
|
...(options.rerun === undefined ? {} : { rerun: options.rerun })
|
|
1044
1058
|
}, { signal: controller.signal, onProgress: (progress) => io.writeErr(`Analysis ${progress.phase}: ${progress.evidenceCount} evidence items, ${progress.captureCount} captures.\n`) });
|
|
1045
1059
|
writeResult(command, io, result, (value) => {
|
|
1060
|
+
if (value.ok && value.dryRun && selected.config?.provider === "codex")
|
|
1061
|
+
return "Local evidence and configuration passed admission. Codex CLI, login and model access were not checked. Dollar cost and output-token ceiling are unknown. No provider request sent.\n";
|
|
1046
1062
|
if (value.ok && value.dryRun)
|
|
1047
1063
|
return `Admission estimate: $${value.admission?.estimatedCostUsd ?? "unknown"}; output allowance: ${value.admission?.outputTokenAllowance ?? "unknown"} tokens including reasoning. No request sent.\n`;
|
|
1048
1064
|
const lines = [];
|
|
@@ -1053,7 +1069,7 @@ function registerAnalyzeCommand(parent, io) {
|
|
|
1053
1069
|
if (value.executionReceiptPath)
|
|
1054
1070
|
lines.push(`Execution receipt: ${value.executionReceiptPath}`);
|
|
1055
1071
|
if (value.usage) {
|
|
1056
|
-
lines.push(`Recorded attempt usage: ${value.usage.inputTokens ?? "unknown"} input tokens, ${value.usage.outputTokens ?? "unknown"} output tokens.`);
|
|
1072
|
+
lines.push(`Recorded attempt usage${value.usage.usageComplete ? "" : " (incomplete)"}: ${value.usage.inputTokens ?? "unknown"} input tokens, ${value.usage.outputTokens ?? "unknown"} output tokens.`);
|
|
1057
1073
|
lines.push(`Estimated attempt cost: ${value.usage.estimatedCostUsd === null ? "unknown" : `$${value.usage.estimatedCostUsd}`}.`);
|
|
1058
1074
|
}
|
|
1059
1075
|
if (value.reused)
|
|
@@ -1184,6 +1200,31 @@ function registerRunsCommand(parent, io) {
|
|
|
1184
1200
|
io.setExitCode(result.ok ? 0 : 2);
|
|
1185
1201
|
});
|
|
1186
1202
|
}
|
|
1203
|
+
function registerRuntimeCommands(parent, io) {
|
|
1204
|
+
const runtime = parent.command("runtime").description("Prepare or inspect the local browser runtime.");
|
|
1205
|
+
for (const action of ["status", "setup"]) {
|
|
1206
|
+
runtime.command(action)
|
|
1207
|
+
.description(action === "status" ? "Check local Docker, virtualization and the cached browser image without downloads." : "Download and install the local browser image. Does not start a study or use model quota.")
|
|
1208
|
+
.option("--json", JSON_OPTION_DESCRIPTION)
|
|
1209
|
+
.action(async (_options, command) => {
|
|
1210
|
+
const { localRuntimeStatus, prepareLocalRuntime } = await import("./local-runtime.js");
|
|
1211
|
+
try {
|
|
1212
|
+
if (action === "setup")
|
|
1213
|
+
await prepareLocalRuntime({ progress: message => io.writeErr(`${message}\n`) });
|
|
1214
|
+
const status = await localRuntimeStatus();
|
|
1215
|
+
const result = { schema: "humanish.runtime-result.v1", ...status };
|
|
1216
|
+
writeResult(command, io, result, () => `${status.message}\n`);
|
|
1217
|
+
io.setExitCode(status.ok ? 0 : 2);
|
|
1218
|
+
}
|
|
1219
|
+
catch (error) {
|
|
1220
|
+
const message = error instanceof Error ? error.message : "Local runtime setup failed. Run humanish runtime setup to retry.";
|
|
1221
|
+
const result = { schema: "humanish.runtime-result.v1", ok: false, error: { code: "HUMANISH_LOCAL_RUNTIME_SETUP_FAILED", message } };
|
|
1222
|
+
writeResult(command, io, result, () => `${message}\n`);
|
|
1223
|
+
io.setExitCode(2);
|
|
1224
|
+
}
|
|
1225
|
+
});
|
|
1226
|
+
}
|
|
1227
|
+
}
|
|
1187
1228
|
function registerCommsCommands(parent, io) {
|
|
1188
1229
|
const comms = parent
|
|
1189
1230
|
.command("comms")
|