@boardwalk-labs/cli 0.1.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.
Files changed (73) hide show
  1. package/LICENSE +18 -0
  2. package/README.md +110 -0
  3. package/bin/boardwalk.js +4 -0
  4. package/dist/artifact.d.ts +53 -0
  5. package/dist/artifact.js +267 -0
  6. package/dist/artifact.js.map +1 -0
  7. package/dist/auth/discovery.d.ts +8 -0
  8. package/dist/auth/discovery.js +43 -0
  9. package/dist/auth/discovery.js.map +1 -0
  10. package/dist/auth/login.d.ts +13 -0
  11. package/dist/auth/login.js +74 -0
  12. package/dist/auth/login.js.map +1 -0
  13. package/dist/auth/pkce.d.ts +63 -0
  14. package/dist/auth/pkce.js +197 -0
  15. package/dist/auth/pkce.js.map +1 -0
  16. package/dist/auth/resolve.d.ts +12 -0
  17. package/dist/auth/resolve.js +51 -0
  18. package/dist/auth/resolve.js.map +1 -0
  19. package/dist/bundle.d.ts +35 -0
  20. package/dist/bundle.js +176 -0
  21. package/dist/bundle.js.map +1 -0
  22. package/dist/client.d.ts +65 -0
  23. package/dist/client.js +193 -0
  24. package/dist/client.js.map +1 -0
  25. package/dist/commands/cancel.d.ts +14 -0
  26. package/dist/commands/cancel.js +53 -0
  27. package/dist/commands/cancel.js.map +1 -0
  28. package/dist/commands/check.d.ts +7 -0
  29. package/dist/commands/check.js +34 -0
  30. package/dist/commands/check.js.map +1 -0
  31. package/dist/commands/deploy.d.ts +15 -0
  32. package/dist/commands/deploy.js +56 -0
  33. package/dist/commands/deploy.js.map +1 -0
  34. package/dist/commands/dev.d.ts +14 -0
  35. package/dist/commands/dev.js +128 -0
  36. package/dist/commands/dev.js.map +1 -0
  37. package/dist/commands/init.d.ts +12 -0
  38. package/dist/commands/init.js +171 -0
  39. package/dist/commands/init.js.map +1 -0
  40. package/dist/commands/run.d.ts +32 -0
  41. package/dist/commands/run.js +105 -0
  42. package/dist/commands/run.js.map +1 -0
  43. package/dist/commands/session.d.ts +13 -0
  44. package/dist/commands/session.js +58 -0
  45. package/dist/commands/session.js.map +1 -0
  46. package/dist/config.d.ts +14 -0
  47. package/dist/config.js +64 -0
  48. package/dist/config.js.map +1 -0
  49. package/dist/credentials.d.ts +23 -0
  50. package/dist/credentials.js +69 -0
  51. package/dist/credentials.js.map +1 -0
  52. package/dist/deployment.d.ts +44 -0
  53. package/dist/deployment.js +100 -0
  54. package/dist/deployment.js.map +1 -0
  55. package/dist/dev/host.d.ts +16 -0
  56. package/dist/dev/host.js +76 -0
  57. package/dist/dev/host.js.map +1 -0
  58. package/dist/errors.d.ts +8 -0
  59. package/dist/errors.js +18 -0
  60. package/dist/errors.js.map +1 -0
  61. package/dist/index.d.ts +1 -0
  62. package/dist/index.js +147 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/manifest.d.ts +12 -0
  65. package/dist/manifest.js +64 -0
  66. package/dist/manifest.js.map +1 -0
  67. package/dist/project.d.ts +15 -0
  68. package/dist/project.js +79 -0
  69. package/dist/project.js.map +1 -0
  70. package/dist/render/renderer.d.ts +18 -0
  71. package/dist/render/renderer.js +108 -0
  72. package/dist/render/renderer.js.map +1 -0
  73. package/package.json +56 -0
@@ -0,0 +1,108 @@
1
+ // The run-event renderer — one renderer for `boardwalk dev` (and, later, `run --wait` streaming),
2
+ // driven entirely by the SDK's channel mapping so `--stream phase,output` means the same thing
3
+ // everywhere.
4
+ //
5
+ // Line-oriented and pipe-friendly: agent text/reasoning deltas stream raw (no per-delta prefix);
6
+ // everything else renders as one prefixed line. When the subscription is EXACTLY the `output`
7
+ // channel, the output value prints bare (no decoration) so `boardwalk dev --stream output | jq`
8
+ // just works.
9
+ import { CHANNELS, DEFAULT_CHANNELS, matchesChannels, } from "@boardwalk-labs/workflow";
10
+ import { CliError } from "../errors.js";
11
+ /** Resolve `--verbose` / `--stream` to a channel subscription (default: lifecycle+phase+output). */
12
+ export function parseChannels(flags) {
13
+ if (flags.verbose && flags.stream !== undefined) {
14
+ throw new CliError("Use either --verbose or --stream <channels>, not both.");
15
+ }
16
+ if (flags.verbose)
17
+ return CHANNELS;
18
+ if (flags.stream === undefined)
19
+ return DEFAULT_CHANNELS;
20
+ const names = flags.stream
21
+ .split(",")
22
+ .map((s) => s.trim())
23
+ .filter((s) => s.length > 0);
24
+ if (names.length === 0) {
25
+ throw new CliError(`--stream needs at least one channel (${CHANNELS.join(", ")}).`);
26
+ }
27
+ const out = [];
28
+ for (const name of names) {
29
+ if (!CHANNELS.includes(name)) {
30
+ throw new CliError(`Unknown channel "${name}".`, `Valid channels: ${CHANNELS.join(", ")} (or --verbose for all).`);
31
+ }
32
+ if (!out.includes(name))
33
+ out.push(name);
34
+ }
35
+ return out;
36
+ }
37
+ /**
38
+ * Build the renderer. `write` receives raw text (newlines included where intended) — pass
39
+ * `process.stdout.write` in the CLI, an accumulator in tests.
40
+ */
41
+ export function createRenderer(channels, write) {
42
+ const outputOnly = channels.length === 1 && channels[0] === "output";
43
+ return {
44
+ render(event) {
45
+ if (!matchesChannels(event, channels))
46
+ return;
47
+ const text = formatEvent(event, outputOnly);
48
+ if (text !== null)
49
+ write(text);
50
+ },
51
+ };
52
+ }
53
+ function formatEvent(event, outputOnly) {
54
+ switch (event.kind) {
55
+ case "run_status": {
56
+ const line = `● workflow ${event.status}`;
57
+ if (event.error !== undefined) {
58
+ return `${line}\n ${event.error.code}: ${event.error.message}\n`;
59
+ }
60
+ return `${line}\n`;
61
+ }
62
+ case "phase":
63
+ return `▸ ${event.name}\n`;
64
+ case "output": {
65
+ const value = formatOutputValue(event.value);
66
+ return outputOnly ? `${value}\n` : `── output ──\n${value}\n`;
67
+ }
68
+ case "program_output":
69
+ // Captured stdout/stderr passes through verbatim (it carries its own newlines).
70
+ return event.text;
71
+ case "turn_started":
72
+ return "· agent turn started\n";
73
+ case "turn_ended": {
74
+ const usage = event.usage;
75
+ const tokens = usage?.totalTokens !== undefined ? ` (${String(usage.totalTokens)} tokens)` : "";
76
+ const error = event.error !== undefined ? ` — ${event.error.message}` : "";
77
+ return `· agent turn ${event.reason}${tokens}${error}\n`;
78
+ }
79
+ case "text_delta":
80
+ case "reasoning_delta":
81
+ return event.text; // stream raw — the model's words ARE the output here
82
+ case "text_end":
83
+ return "\n";
84
+ case "tool_call_start":
85
+ return `· tool ${event.toolName} …\n`;
86
+ case "tool_call_result": {
87
+ const summary = event.result.humanSummary ?? event.result.kind ?? "done";
88
+ return `· tool result: ${summary}\n`;
89
+ }
90
+ case "tool_call_error":
91
+ return `· tool error: ${event.error.message}\n`;
92
+ // Structural agent frames with nothing human-readable to print:
93
+ case "text_start":
94
+ case "tool_call_input_delta":
95
+ case "tool_call_input_complete":
96
+ case "tool_call_executing":
97
+ return null;
98
+ }
99
+ }
100
+ function formatOutputValue(value) {
101
+ if (typeof value === "string")
102
+ return value;
103
+ // JSON.stringify returns undefined at runtime for undefined/functions (its types lie).
104
+ if (value === undefined)
105
+ return "null";
106
+ return JSON.stringify(value, null, 2);
107
+ }
108
+ //# sourceMappingURL=renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/render/renderer.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "@boardwalk-labs/cli",
3
+ "version": "0.1.0",
4
+ "description": "The boardwalk CLI: author, validate, run, and deploy Boardwalk workflows.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "engines": {
8
+ "node": ">=24.0.0"
9
+ },
10
+ "packageManager": "pnpm@10.23.0",
11
+ "bin": {
12
+ "boardwalk": "./bin/boardwalk.js"
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "bin",
17
+ "README.md",
18
+ "LICENSE"
19
+ ],
20
+ "scripts": {
21
+ "build": "tsc -p tsconfig.build.json",
22
+ "typecheck": "tsc -p tsconfig.json --noEmit",
23
+ "lint": "eslint . --max-warnings 0",
24
+ "lint:fix": "eslint . --fix --max-warnings 0",
25
+ "format": "prettier --write .",
26
+ "format:check": "prettier --check .",
27
+ "test": "vitest run",
28
+ "test:watch": "vitest",
29
+ "coverage": "vitest run --coverage",
30
+ "boardwalk": "tsx src/index.ts"
31
+ },
32
+ "dependencies": {
33
+ "@boardwalk-labs/workflow": "^0.1.0",
34
+ "commander": "^13.1.0",
35
+ "env-paths": "^3.0.0",
36
+ "esbuild": "^0.25.0",
37
+ "open": "^10.1.0",
38
+ "tar": "^7.4.3"
39
+ },
40
+ "pnpm": {
41
+ "onlyBuiltDependencies": [
42
+ "esbuild"
43
+ ]
44
+ },
45
+ "devDependencies": {
46
+ "@types/node": "^24.0.0",
47
+ "@vitest/coverage-v8": "^3.0.0",
48
+ "eslint": "^9.18.0",
49
+ "eslint-config-prettier": "^10.1.8",
50
+ "prettier": "^3.4.0",
51
+ "tsx": "^4.20.0",
52
+ "typescript": "^5.6.0",
53
+ "typescript-eslint": "^8.20.0",
54
+ "vitest": "^3.0.0"
55
+ }
56
+ }