@duvoai/cli 0.9.0 → 1.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.
package/README.md CHANGED
@@ -32,8 +32,8 @@ duvo agents create
32
32
  # ...or create one non-interactively with flags
33
33
  duvo agents create --name "My agent" --input "What this agent should do"
34
34
 
35
- # 4. Kick off a run
36
- duvo runs start --agent <agent-id>
35
+ # 4. Kick off a run and watch it complete
36
+ duvo runs start --agent <agent-id> --follow
37
37
  ```
38
38
 
39
39
  Grab an API key from your team settings: <https://app.duvo.ai/settings/api-keys>.
@@ -51,6 +51,97 @@ duvo profiles use acme # set the default profile
51
51
  duvo --profile team-2 whoami # one-off override for a single command
52
52
  ```
53
53
 
54
+ ## Workflows
55
+
56
+ ### Start a run and stream messages
57
+
58
+ ```bash
59
+ # Start a run and tail messages until it completes
60
+ duvo runs start --agent <agent-id> --message "Process this week's reports" --follow
61
+
62
+ # Tail messages on a run that's already in progress
63
+ duvo runs messages <run-id> --follow
64
+ ```
65
+
66
+ `--follow` polls for new messages every 2 s and exits when the run reaches a
67
+ terminal state (`completed`, `failed`, `stopped`, or `error`). The final line
68
+ always shows the run's status, e.g. `Run completed.`
69
+
70
+ To consume the stream programmatically, combine `--follow --json`: each new
71
+ message is printed as a JSON object on its own line (NDJSON).
72
+
73
+ ```bash
74
+ duvo runs messages <run-id> --follow --json | while IFS= read -r line; do
75
+ echo "$line" | jq -r '.text_content // empty'
76
+ done
77
+ ```
78
+
79
+ ### Scripting with --json
80
+
81
+ Every command accepts `--json` to emit the raw API response instead of a
82
+ table or key/value view — useful for piping to `jq`.
83
+
84
+ ```bash
85
+ # Start a run and capture the ID
86
+ RUN_ID=$(duvo runs start --agent "$AGENT_ID" --message "Go" --json | jq -r '.run.id')
87
+
88
+ # Follow messages on that run
89
+ duvo runs messages "$RUN_ID" --follow
90
+ ```
91
+
92
+ ### Set up connections for an agent revision
93
+
94
+ Integrations represent slots in a revision that need live credentials (a
95
+ connection). Use `revision-integrations` to see the slots and
96
+ `revision-integrations connections` to pin your connections to them.
97
+
98
+ ```bash
99
+ # 1. See the integration slots on a revision
100
+ duvo revision-integrations list --agent <agent-id> --revision <revision-id>
101
+ # INTEGRATION ID TYPE NAME SLOT ID CREATED
102
+ # 22222222-... gmail Gmail slot-1 2026-04-15…
103
+
104
+ # 2. List your available connections
105
+ duvo connections list --type gmail
106
+
107
+ # 3. Pin a connection to the slot (use SLOT ID or INTEGRATION ID from step 1)
108
+ duvo revision-integrations connections pin <connection-id> \
109
+ --agent <agent-id> --revision <revision-id> --integration slot-1
110
+
111
+ # 4. Verify
112
+ duvo revision-integrations connections list \
113
+ --agent <agent-id> --revision <revision-id> --integration slot-1
114
+ ```
115
+
116
+ > **Note:** The `--integration` flag accepts either the **SLOT ID** or the
117
+ > **INTEGRATION ID** column from `revision-integrations list`.
118
+
119
+ ### Work with case queues
120
+
121
+ ```bash
122
+ # Create a queue
123
+ duvo queues create --name "support-tickets"
124
+
125
+ # Create cases in bulk from a JSON file (up to 100)
126
+ duvo cases create --queue <queue-id> --from-file cases.json
127
+
128
+ # List pending cases
129
+ duvo cases list --queue <queue-id> --status pending
130
+
131
+ # Bulk delegate pending cases to an agent
132
+ duvo cases bulk-delegate --queue <queue-id> --agent <agent-id> \
133
+ --ids <id1>,<id2>,<id3>
134
+ ```
135
+
136
+ ### Human-in-the-loop responses
137
+
138
+ When a run pauses and asks a question, respond directly from the CLI:
139
+
140
+ ```bash
141
+ duvo runs get <run-id> # shows pending_human_request details
142
+ duvo runs respond <run-id> # defaults to the current pending request
143
+ ```
144
+
54
145
  ## Commands
55
146
 
56
147
  Clarity commands auto-detect process version where possible. The legacy v1 format uses a single analysis payload, while v2 is snapshot-based with current-process and transformation-proposal versions. Use v2-specific commands such as `versions`, `current`, `proposal`, `compare`, `gaps`, `evidence`, and `readiness` only for v2 processes.
@@ -154,7 +245,7 @@ Default output is summary-first and compact. JSON output also includes a compact
154
245
  | `duvo oauth mcp probe <url>` | Probe an MCP server URL and list tools it exposes (`--header KEY=VALUE` repeatable). |
155
246
  | `duvo oauth mcp authorize --url <url> --name <n>` | Start an OAuth-based connection with a remote MCP server (DCR). Prints the auth URL. |
156
247
  | `duvo oauth mcp check --url <url>` | Probe an MCP server URL for OAuth Dynamic Client Registration support. |
157
- | `duvo revision-integrations list` | List integrations attached to a revision |
248
+ | `duvo revision-integrations list` | List integrations attached to a revision (shows SLOT ID and INTEGRATION ID columns) |
158
249
  | `duvo revision-integrations attach` | Attach one or more integrations to a revision |
159
250
  | `duvo revision-integrations remove <integration-id>` | Remove an integration slot from a revision |
160
251
  | `duvo revision-integrations connections list` | List your pinned connections for a revision's integration slot |
@@ -202,6 +293,35 @@ Run `duvo <command> --help` for full flags on any command.
202
293
 
203
294
  ## Details
204
295
 
296
+ ### `runs messages --follow` / `runs start --follow`
297
+
298
+ Both commands accept `--follow` to poll for new messages until the run
299
+ reaches a terminal state:
300
+
301
+ | State | Meaning |
302
+ | ----------- | -------------------------------------- |
303
+ | `completed` | Run finished successfully |
304
+ | `failed` | Run encountered an unrecoverable error |
305
+ | `stopped` | Run was stopped manually |
306
+ | `error` | Run terminated with a system error |
307
+
308
+ The default poll interval is 2 s. The `--offset <n>` flag lets you resume
309
+ from a specific message position in `runs messages --follow`.
310
+
311
+ ### `revision-integrations connections` and `--integration`
312
+
313
+ The `--integration <id>` flag on `connections list`, `connections pin`, and
314
+ `connections unpin` accepts either identifier from `revision-integrations
315
+ list` — the **SLOT ID** (`id` field of the integration slot record) or the
316
+ **INTEGRATION ID** (catalog ID) in the same table.
317
+
318
+ ```text
319
+ INTEGRATION ID TYPE NAME SLOT ID CREATED
320
+ 22222222-2222-2222-2222-222222222222 gmail Gmail slot-1 2026-04-15…
321
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^
322
+ either one works
323
+ ```
324
+
205
325
  ### `cases create --from-file`
206
326
 
207
327
  Pass a JSON file containing a single case object or an array of up to 100 case objects.