@botiverse/oar-cli 0.0.5 → 0.0.7

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 CHANGED
@@ -6,4 +6,72 @@ Command-line interface for `@botiverse/oar`. It installs the `oar` executable wi
6
6
  npx @botiverse/oar-cli list
7
7
  oar installation codex
8
8
  oar usage claude
9
+ oar run claude "What does this repo do?"
9
10
  ```
11
+
12
+ ## Commands
13
+
14
+ - `oar list` — registered runtimes and their capabilities.
15
+ - `oar installation [runtime]` — probe local installation and version, no
16
+ account or usage I/O.
17
+ - `oar usage [runtime]` — account usage for each available installation.
18
+ - `oar run <runtime> <prompt>` — run one turn in a fresh session and show
19
+ its progress; the exit code is 0 only when the turn completed.
20
+
21
+ ## `oar run` — the run-and-verify entrypoint
22
+
23
+ By default `run` prints readable progress: assistant text verbatim, and
24
+ everything else as a bracketed meta line —
25
+
26
+ ```
27
+ [thinking] The user wants...
28
+ [Running command] cat package.json
29
+ [Ran command] (0.4s)
30
+ The repo is a pnpm workspace...
31
+ [turn completed]
32
+ ```
33
+
34
+ Flags:
35
+
36
+ - `--model <model>` — runtime-native model identifier.
37
+ - `--json` — print the raw session events as JSON lines instead of
38
+ progress, plus a final `{"outcome": ...}` line.
39
+ - `--record <file>` — additionally write the run as an `oar-voyage/1` JSONL
40
+ log (works in both output modes; the log always carries the raw events).
41
+
42
+ A run without a record is an anecdote. When a run is meant to be evidence —
43
+ verifying a doc claim, reproducing a bug, checking a runtime's live
44
+ behavior — pass `--record` so the claim points at a log anyone can read:
45
+
46
+ 1. **Run live, don't infer.** A claim about runtime behavior is verified by
47
+ actually running it, not by reading code or remembering last time.
48
+ 2. **Record the evidence.** Keep the voyage log and reference it in the
49
+ conclusion, so "it works" is checkable later.
50
+ 3. **Triage what you see.** If reality differs from the docs, decide which
51
+ moved: the runtime changed → fix the doc; oar regressed → file the bug
52
+ and pin it with a test (`docs/development.md` has the test ladder).
53
+ 4. **Report honest outcomes.** A turn that failed or aborted is a finding,
54
+ not something to retry until it looks clean — the exit code and the
55
+ `turn_ended` outcome in the log say what actually happened.
56
+
57
+ ## The `oar-voyage/1` format
58
+
59
+ `--record` writes one JSON object per line, discriminated by `kind`. The
60
+ format is defined and owned by `@botiverse/oar`, which exports the line
61
+ builders and `openVoyage` recorder; other tools (such as the coxswain
62
+ cockpit) may write or read the same format as consumers.
63
+
64
+ - Line 1 is always the header:
65
+ `{"kind":"header","format":"oar-voyage/1","runtime","model?","cwd","sessionId","startedAt","recorder"}`
66
+ (`model` is omitted when none was requested; `recorder` names the writer,
67
+ e.g. `oar-cli/0.0.5`).
68
+ - `{"kind":"submission","at","via","text"}` — one per human input; `via` is
69
+ `"prompt"`, `"steer"`, or `"queue"` (the CLI only writes `"prompt"`).
70
+ - `{"kind":"event","event":{...}}` — one raw `SessionEvent` verbatim, no
71
+ filtering or re-timestamping.
72
+ - `{"kind":"end","at","reason"}` — always the last line; a log without it
73
+ is a truncated capture.
74
+
75
+ All timestamps are Unix epoch milliseconds on the same clock as each
76
+ event's `receivedAt`. Lines are written synchronously in arrival order, so
77
+ a crashed run still leaves a readable prefix.
package/dist/index.js CHANGED
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { readFileSync } from "node:fs";
3
3
  import { Command } from "commander";
4
- import { runtimes } from "@botiverse/oar";
4
+ import { aggregateDeltas, openVoyage, runtimes, } from "@botiverse/oar";
5
+ import { createProgressRenderer } from "./progress.js";
5
6
  // Read the version from this package's own manifest so `--version` can never
6
7
  // drift from package.json. `../package.json` resolves to the package root in
7
8
  // both src (packages/cli) and the published tarball (package/dist -> package).
@@ -59,10 +60,25 @@ program
59
60
  }));
60
61
  process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
61
62
  });
63
+ const jsonObserver = (event) => {
64
+ process.stdout.write(`${JSON.stringify(event)}\n`);
65
+ };
66
+ function progressObserver(runtimeId) {
67
+ const render = createProgressRenderer(runtimeId);
68
+ const renderTo = (event) => {
69
+ const line = render(event);
70
+ if (line !== null) {
71
+ process.stdout.write(`${line}\n`);
72
+ }
73
+ };
74
+ return aggregateDeltas(renderTo, { maxHoldMs: 250 });
75
+ }
62
76
  program
63
77
  .command("run <runtime> <prompt>")
64
- .description("Run one turn in a fresh session and stream its events")
78
+ .description("Run one turn in a fresh session and show its progress")
65
79
  .option("--model <model>", "runtime-native model identifier")
80
+ .option("--json", "print raw session events as JSON lines instead of progress")
81
+ .option("--record <file>", "write the run as an oar-voyage/1 JSONL log")
66
82
  .action(async (id, prompt, flags) => {
67
83
  const runtime = runtimes.require(id);
68
84
  if (runtime.installation === undefined) {
@@ -80,18 +96,36 @@ program
80
96
  cwd: process.cwd(),
81
97
  ...(flags.model === undefined ? {} : { model: flags.model }),
82
98
  });
99
+ const recorder = flags.record === undefined
100
+ ? undefined
101
+ : openVoyage(flags.record, {
102
+ runtime: id,
103
+ ...(flags.model === undefined ? {} : { model: flags.model }),
104
+ cwd: process.cwd(),
105
+ sessionId: session.id,
106
+ startedAt: Date.now(),
107
+ recorder: `oar-cli/${packageVersion()}`,
108
+ });
109
+ const print = flags.json === true ? jsonObserver : progressObserver(id);
83
110
  session.subscribe((event) => {
84
- process.stdout.write(`${JSON.stringify(event)}\n`);
111
+ recorder?.event(event);
112
+ print(event);
85
113
  });
114
+ recorder?.submission("prompt", prompt);
86
115
  const result = session.prompt(prompt);
87
116
  if (result.kind !== "turn") {
88
117
  process.stderr.write("session is busy\n");
118
+ await session.dispose();
119
+ recorder?.end("disposed");
89
120
  process.exitCode = 1;
90
121
  return;
91
122
  }
92
123
  const outcome = await result.turn.outcome;
93
124
  await session.dispose();
94
- process.stdout.write(`${JSON.stringify({ outcome })}\n`);
125
+ recorder?.end("disposed");
126
+ if (flags.json === true) {
127
+ process.stdout.write(`${JSON.stringify({ outcome })}\n`);
128
+ }
95
129
  process.exitCode = outcome.kind === "completed" ? 0 : 1;
96
130
  });
97
131
  await program.parseAsync();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type SessionEvent, type TurnOutcome } from "@botiverse/oar";
2
+ export declare function renderOutcome(outcome: TurnOutcome): string;
3
+ export declare function createProgressRenderer(runtimeId: string): (event: SessionEvent) => string | null;
4
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../src/progress.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EAEjB,KAAK,WAAW,EACjB,MAAM,gBAAgB,CAAC;AAYxB,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAQ1D;AAID,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,GAChB,CAAC,KAAK,EAAE,YAAY,KAAK,MAAM,GAAG,IAAI,CAgCxC"}
@@ -0,0 +1,46 @@
1
+ import { classifyTool, toolActionLabel, } from "@botiverse/oar";
2
+ export function renderOutcome(outcome) {
3
+ if (outcome.kind === "completed") {
4
+ return "[turn completed]";
5
+ }
6
+ if (outcome.kind === "aborted") {
7
+ return "[turn aborted]";
8
+ }
9
+ return `[turn failed: ${outcome.failure}] ${outcome.reason}`;
10
+ }
11
+ // Returns one printable line per event, or null when there is nothing worth
12
+ // showing (turn_started, redacted/empty reasoning, empty text).
13
+ export function createProgressRenderer(runtimeId) {
14
+ const started = new Map();
15
+ return (event) => {
16
+ switch (event.kind) {
17
+ case "turn_started":
18
+ return null;
19
+ case "text_delta":
20
+ return event.text === "" ? null : event.text;
21
+ case "reasoning":
22
+ return event.content.kind === "text" && event.content.text !== ""
23
+ ? `[thinking] ${event.content.text}`
24
+ : null;
25
+ case "tool_call_started": {
26
+ const action = classifyTool(runtimeId, event.tool, event.input);
27
+ started.set(event.callId, { kind: action.kind, receivedAt: event.receivedAt });
28
+ const label = toolActionLabel(action.kind, "running");
29
+ return action.detail === undefined ? `[${label}]` : `[${label}] ${action.detail}`;
30
+ }
31
+ case "tool_call_ended": {
32
+ const call = started.get(event.callId);
33
+ started.delete(event.callId);
34
+ if (call === undefined) {
35
+ return `[${toolActionLabel("other", "done")}]`;
36
+ }
37
+ const seconds = ((event.receivedAt - call.receivedAt) / 1000).toFixed(1);
38
+ return `[${toolActionLabel(call.kind, "done")}] (${seconds}s)`;
39
+ }
40
+ case "turn_ended":
41
+ return renderOutcome(event.outcome);
42
+ }
43
+ return null;
44
+ };
45
+ }
46
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../src/progress.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,eAAe,GAIhB,MAAM,gBAAgB,CAAC;AAYxB,MAAM,UAAU,aAAa,CAAC,OAAoB;IAChD,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACjC,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,OAAO,iBAAiB,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;AAC/D,CAAC;AAED,4EAA4E;AAC5E,gEAAgE;AAChE,MAAM,UAAU,sBAAsB,CACpC,SAAiB;IAEjB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC/C,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,cAAc;gBACjB,OAAO,IAAI,CAAC;YACd,KAAK,YAAY;gBACf,OAAO,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;YAC/C,KAAK,WAAW;gBACd,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,EAAE;oBAC/D,CAAC,CAAC,cAAc,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;oBACpC,CAAC,CAAC,IAAI,CAAC;YACX,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACzB,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC/E,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBACtD,OAAO,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;YACpF,CAAC;YACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC7B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvB,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC;gBACjD,CAAC;gBACD,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACzE,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,OAAO,IAAI,CAAC;YACjE,CAAC;YACD,KAAK,YAAY;gBACf,OAAO,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botiverse/oar-cli",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "description": "Command-line interface for observing agent runtimes with OAR",
5
5
  "type": "module",
6
6
  "bin": {
@@ -12,7 +12,7 @@
12
12
  ],
13
13
  "dependencies": {
14
14
  "commander": "^12.1.0",
15
- "@botiverse/oar": "0.0.5"
15
+ "@botiverse/oar": "0.0.7"
16
16
  },
17
17
  "publishConfig": {
18
18
  "access": "public"