summaryrefslogtreecommitdiffhomepage
path: root/packages/cli/src/render.ts
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-06-05 21:20:34 +0900
committerAdam Malczewski <[email protected]>2026-06-05 21:20:34 +0900
commit552c22d74e5df915088d9e9ff4a286c96c2a54d6 (patch)
tree7d9db1052bab91ef994446d80efc3bfc38026cad /packages/cli/src/render.ts
parent7fb3269c698ae583ea7997ce206c4ae252fd3218 (diff)
downloaddispatch-552c22d74e5df915088d9e9ff4a286c96c2a54d6.tar.gz
dispatch-552c22d74e5df915088d9e9ff4a286c96c2a54d6.zip
feat(cli): one-shot terminal client (models, chat, --text/--file/--cwd/--conversation)
HTTP client of transport-contract; pure-core arg/render/ndjson + injected fetch/fs shell. Docs: GLOSSARY (credential/key/model name/model catalog), tasks.md milestone, ORCHESTRATOR geography.
Diffstat (limited to 'packages/cli/src/render.ts')
-rw-r--r--packages/cli/src/render.ts45
1 files changed, 45 insertions, 0 deletions
diff --git a/packages/cli/src/render.ts b/packages/cli/src/render.ts
new file mode 100644
index 0000000..1853963
--- /dev/null
+++ b/packages/cli/src/render.ts
@@ -0,0 +1,45 @@
+/**
+ * Pure event renderer — zero I/O.
+ *
+ * Maps an AgentEvent to optional stdout/stderr strings.
+ * Consumers write these to process.stdout / process.stderr.
+ */
+
+import type { AgentEvent } from "@dispatch/transport-contract";
+
+interface RenderOpts {
+ readonly showReasoning: boolean;
+}
+
+interface RenderOutput {
+ readonly stdout?: string;
+ readonly stderr?: string;
+}
+
+export function renderEvent(e: AgentEvent, opts: RenderOpts): RenderOutput | undefined {
+ switch (e.type) {
+ case "text-delta":
+ return { stdout: e.delta };
+ case "reasoning-delta":
+ return opts.showReasoning ? { stdout: e.delta } : undefined;
+ case "tool-call":
+ return { stdout: `\n[tool] ${e.toolName} ${JSON.stringify(e.input)}\n` };
+ case "tool-output":
+ return { stdout: e.data };
+ case "tool-result":
+ return {
+ stdout: `[tool:${e.toolName}]${e.isError ? " ERROR" : ""} ${e.content}\n`,
+ };
+ case "usage":
+ return {
+ stdout: `\n[usage] in=${e.usage.inputTokens} out=${e.usage.outputTokens}\n`,
+ };
+ case "error":
+ return { stderr: `[error] ${e.message}\n` };
+ case "status":
+ case "turn-start":
+ case "turn-sealed":
+ case "done":
+ return undefined;
+ }
+}