@duvoai/cli 0.9.0 → 0.9.1
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 +123 -3
- package/dist/bin/duvo.js +7 -2
- package/dist/bin/duvo.js.map +3 -3
- package/package.json +1 -1
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.
|
package/dist/bin/duvo.js
CHANGED
|
@@ -4210,6 +4210,11 @@ var logoUrlResponseSchema = z25.object({
|
|
|
4210
4210
|
var successSchema = z26.object({
|
|
4211
4211
|
success: z26.boolean()
|
|
4212
4212
|
});
|
|
4213
|
+
function normalizeUserMessageContent(content) {
|
|
4214
|
+
return content.trim();
|
|
4215
|
+
}
|
|
4216
|
+
__name(normalizeUserMessageContent, "normalizeUserMessageContent");
|
|
4217
|
+
__name2(normalizeUserMessageContent, "normalizeUserMessageContent");
|
|
4213
4218
|
function stripHtml(input, options = {}) {
|
|
4214
4219
|
const withNewlines = input.replace(/<br\s*\/?>/gi, "\n");
|
|
4215
4220
|
const noTags = withNewlines.replace(/<[^>]+>/g, "");
|
|
@@ -21563,7 +21568,7 @@ __name(fetchProfileSummary, "fetchProfileSummary");
|
|
|
21563
21568
|
var version = resolveVersion();
|
|
21564
21569
|
function resolveVersion() {
|
|
21565
21570
|
if (true) {
|
|
21566
|
-
return "0.9.
|
|
21571
|
+
return "0.9.1";
|
|
21567
21572
|
}
|
|
21568
21573
|
const packageJsonPath = join2(
|
|
21569
21574
|
dirname2(fileURLToPath(import.meta.url)),
|
|
@@ -21628,7 +21633,7 @@ function checkForUpdate() {
|
|
|
21628
21633
|
__name(checkForUpdate, "checkForUpdate");
|
|
21629
21634
|
function loadPackageMeta() {
|
|
21630
21635
|
if (true) {
|
|
21631
|
-
return { name: "@duvoai/cli", version: "0.9.
|
|
21636
|
+
return { name: "@duvoai/cli", version: "0.9.1" };
|
|
21632
21637
|
}
|
|
21633
21638
|
const require2 = createRequire(import.meta.url);
|
|
21634
21639
|
const raw = require2("../package.json");
|