@gobi-ai/cli 1.3.2 → 1.3.4
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/.claude-plugin/marketplace.json +3 -2
- package/.claude-plugin/plugin.json +2 -1
- package/README.md +16 -0
- package/dist/commands/proposal.js +178 -0
- package/dist/main.js +2 -0
- package/package.json +1 -1
- package/skills/gobi-proposal/SKILL.md +63 -0
- package/skills/gobi-proposal/references/proposal.md +124 -0
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
"name": "gobi-ai"
|
|
5
5
|
},
|
|
6
6
|
"description": "Claude Code plugin for the Gobi collaborative knowledge platform CLI",
|
|
7
|
-
"version": "1.3.
|
|
7
|
+
"version": "1.3.4",
|
|
8
8
|
"plugins": [
|
|
9
9
|
{
|
|
10
10
|
"name": "gobi",
|
|
11
11
|
"description": "Manage the Gobi collaborative knowledge platform from the command line. Search and ask brains, publish brain documents, create threads, manage sessions, generate images and videos.",
|
|
12
|
-
"version": "1.3.
|
|
12
|
+
"version": "1.3.4",
|
|
13
13
|
"author": {
|
|
14
14
|
"name": "gobi-ai"
|
|
15
15
|
},
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
"./skills/gobi-brain",
|
|
22
22
|
"./skills/gobi-feed",
|
|
23
23
|
"./skills/gobi-notes",
|
|
24
|
+
"./skills/gobi-proposal",
|
|
24
25
|
"./skills/gobi-media",
|
|
25
26
|
"./skills/gobi-sense",
|
|
26
27
|
"./skills/gobi-homepage"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gobi",
|
|
3
3
|
"description": "Manage the Gobi collaborative knowledge platform from the command line",
|
|
4
|
-
"version": "1.3.
|
|
4
|
+
"version": "1.3.4",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "gobi-ai"
|
|
7
7
|
},
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"./skills/gobi-brain",
|
|
13
13
|
"./skills/gobi-feed",
|
|
14
14
|
"./skills/gobi-notes",
|
|
15
|
+
"./skills/gobi-proposal",
|
|
15
16
|
"./skills/gobi-media",
|
|
16
17
|
"./skills/gobi-sense",
|
|
17
18
|
"./skills/gobi-homepage"
|
package/README.md
CHANGED
|
@@ -150,6 +150,22 @@ Times are ISO 8601 UTC (e.g. `2026-03-20T00:00:00Z`).
|
|
|
150
150
|
`notes list` and `notes create` accept `--timezone <iana>` (default: system timezone) for day boundaries.
|
|
151
151
|
`notes list` also accepts `--limit`/`--cursor` for pagination.
|
|
152
152
|
|
|
153
|
+
### Proposals
|
|
154
|
+
|
|
155
|
+
Proposals are authored by your agent during chat (or by external agents using `gobi proposal add` as their tool layer). The top 5 pending proposals (lowest priority first) feed the agent's system prompt every turn.
|
|
156
|
+
|
|
157
|
+
| Command | Description |
|
|
158
|
+
|---------|-------------|
|
|
159
|
+
| `gobi proposal list [--limit N]` | List proposals (priority ASC, then newest first) |
|
|
160
|
+
| `gobi proposal get <id>` | Show one proposal with its history |
|
|
161
|
+
| `gobi proposal add <content> [--session <id>] [--priority N]` | Add a proposal (use `-` for stdin) |
|
|
162
|
+
| `gobi proposal edit <id> <content>` | Replace content; bumps revision |
|
|
163
|
+
| `gobi proposal delete <id>` | Delete a proposal |
|
|
164
|
+
| `gobi proposal prioritize <id> <priority>` | Set priority (lower = higher) |
|
|
165
|
+
| `gobi proposal accept <id>` | Accept; posts "Accept your proposal X" into the originating session |
|
|
166
|
+
| `gobi proposal reject <id>` | Reject; posts "Reject your proposal X" into the originating session |
|
|
167
|
+
| `gobi proposal revise <id> <comment>` | Ask the agent to revise; posts the comment into the session |
|
|
168
|
+
|
|
153
169
|
### Sync
|
|
154
170
|
|
|
155
171
|
| Command | Description |
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { readFileSync } from "fs";
|
|
2
|
+
import { apiDelete, apiGet, apiPatch, apiPost } from "../client.js";
|
|
3
|
+
import { isJsonMode, jsonOut, unwrapResp } from "./utils.js";
|
|
4
|
+
function readContent(value) {
|
|
5
|
+
if (value === "-")
|
|
6
|
+
return readFileSync("/dev/stdin", "utf8");
|
|
7
|
+
return value;
|
|
8
|
+
}
|
|
9
|
+
function snippet(content, max = 80) {
|
|
10
|
+
const single = content.replace(/\s+/g, " ");
|
|
11
|
+
return single.length > max ? `${single.slice(0, max)}…` : single;
|
|
12
|
+
}
|
|
13
|
+
function formatProposalLine(p) {
|
|
14
|
+
const status = p.status === "pending" ? "·" : p.status === "accepted" ? "✓" : "✗";
|
|
15
|
+
return `- [${status}] p${p.priority} rev${p.revision} ${p.proposalId.slice(0, 8)} ${snippet(p.content)}`;
|
|
16
|
+
}
|
|
17
|
+
export function registerProposalCommand(program) {
|
|
18
|
+
const proposal = program
|
|
19
|
+
.command("proposal")
|
|
20
|
+
.description("Proposals authored by your agent during chat. Top-5 feed the system prompt; accept/reject/revise post into the originating chat session.");
|
|
21
|
+
// ── List ──
|
|
22
|
+
proposal
|
|
23
|
+
.command("list")
|
|
24
|
+
.description("List proposals (priority ASC, then newest first).")
|
|
25
|
+
.option("--limit <number>", "Max proposals to return (1-200)", "50")
|
|
26
|
+
.action(async (opts) => {
|
|
27
|
+
const params = { limit: parseInt(opts.limit, 10) };
|
|
28
|
+
const resp = (await apiGet("/app/proposals", params));
|
|
29
|
+
const items = (resp.data || []);
|
|
30
|
+
if (isJsonMode(proposal)) {
|
|
31
|
+
jsonOut(items);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (!items.length) {
|
|
35
|
+
console.log("No proposals.");
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
console.log(`Proposals (${items.length}):`);
|
|
39
|
+
for (const p of items)
|
|
40
|
+
console.log(formatProposalLine(p));
|
|
41
|
+
});
|
|
42
|
+
// ── Get ──
|
|
43
|
+
proposal
|
|
44
|
+
.command("get <proposalId>")
|
|
45
|
+
.description("Show one proposal with its history.")
|
|
46
|
+
.action(async (proposalId) => {
|
|
47
|
+
const resp = (await apiGet(`/app/proposals/${proposalId}`));
|
|
48
|
+
const p = unwrapResp(resp);
|
|
49
|
+
if (isJsonMode(proposal)) {
|
|
50
|
+
jsonOut(p);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
console.log(`Proposal ${p.proposalId}`);
|
|
54
|
+
console.log(` status: ${p.status}`);
|
|
55
|
+
console.log(` priority: ${p.priority}`);
|
|
56
|
+
console.log(` revision: ${p.revision}`);
|
|
57
|
+
console.log(` session: ${p.sessionId ?? "(none)"}`);
|
|
58
|
+
console.log(` created: ${p.createdAt}`);
|
|
59
|
+
console.log("");
|
|
60
|
+
console.log("Content:");
|
|
61
|
+
console.log(p.content);
|
|
62
|
+
if (p.history.length) {
|
|
63
|
+
console.log("");
|
|
64
|
+
console.log("History:");
|
|
65
|
+
for (const h of p.history) {
|
|
66
|
+
const detail = h.type === "revise_requested"
|
|
67
|
+
? `: ${h.comment}`
|
|
68
|
+
: h.type === "prioritized"
|
|
69
|
+
? `: priority=${h.priority}`
|
|
70
|
+
: "";
|
|
71
|
+
console.log(` ${h.createdAt} rev${h.revision} ${h.type}${detail}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
// ── Add ──
|
|
76
|
+
proposal
|
|
77
|
+
.command("add <content>")
|
|
78
|
+
.description("Add a proposal directly. Pass '-' to read from stdin.")
|
|
79
|
+
.option("--session <sessionId>", "Originate from a chat session (UUID)")
|
|
80
|
+
.option("--priority <number>", "Priority (lower = higher), default 100")
|
|
81
|
+
.action(async (content, opts) => {
|
|
82
|
+
const body = { content: readContent(content) };
|
|
83
|
+
if (opts.session)
|
|
84
|
+
body.sessionId = opts.session;
|
|
85
|
+
if (opts.priority)
|
|
86
|
+
body.priority = parseInt(opts.priority, 10);
|
|
87
|
+
const resp = (await apiPost("/app/proposals", body));
|
|
88
|
+
const p = unwrapResp(resp);
|
|
89
|
+
if (isJsonMode(proposal)) {
|
|
90
|
+
jsonOut(p);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
console.log(`Created ${p.proposalId} (priority ${p.priority}).`);
|
|
94
|
+
});
|
|
95
|
+
// ── Edit content ──
|
|
96
|
+
proposal
|
|
97
|
+
.command("edit <proposalId> <content>")
|
|
98
|
+
.description("Replace proposal content (bumps revision). Pass '-' for stdin.")
|
|
99
|
+
.action(async (proposalId, content) => {
|
|
100
|
+
const resp = (await apiPatch(`/app/proposals/${proposalId}`, {
|
|
101
|
+
content: readContent(content),
|
|
102
|
+
}));
|
|
103
|
+
const p = unwrapResp(resp);
|
|
104
|
+
if (isJsonMode(proposal)) {
|
|
105
|
+
jsonOut(p);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
console.log(`Updated ${p.proposalId} → rev${p.revision}.`);
|
|
109
|
+
});
|
|
110
|
+
// ── Delete ──
|
|
111
|
+
proposal
|
|
112
|
+
.command("delete <proposalId>")
|
|
113
|
+
.description("Delete a proposal.")
|
|
114
|
+
.action(async (proposalId) => {
|
|
115
|
+
await apiDelete(`/app/proposals/${proposalId}`);
|
|
116
|
+
if (isJsonMode(proposal)) {
|
|
117
|
+
jsonOut({ deleted: proposalId });
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
console.log(`Deleted ${proposalId}.`);
|
|
121
|
+
});
|
|
122
|
+
// ── Prioritize ──
|
|
123
|
+
proposal
|
|
124
|
+
.command("prioritize <proposalId> <priority>")
|
|
125
|
+
.description("Set priority (lower = higher). Top 5 feed the system prompt.")
|
|
126
|
+
.action(async (proposalId, priority) => {
|
|
127
|
+
const resp = (await apiPatch(`/app/proposals/${proposalId}/priority`, {
|
|
128
|
+
priority: parseInt(priority, 10),
|
|
129
|
+
}));
|
|
130
|
+
const p = unwrapResp(resp);
|
|
131
|
+
if (isJsonMode(proposal)) {
|
|
132
|
+
jsonOut(p);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
console.log(`Set ${p.proposalId} priority to ${p.priority}.`);
|
|
136
|
+
});
|
|
137
|
+
// ── Accept ──
|
|
138
|
+
proposal
|
|
139
|
+
.command("accept <proposalId>")
|
|
140
|
+
.description('Accept — posts "Accept your proposal X" into the originating chat session.')
|
|
141
|
+
.action(async (proposalId) => {
|
|
142
|
+
const resp = (await apiPost(`/app/proposals/${proposalId}/accept`));
|
|
143
|
+
const p = unwrapResp(resp);
|
|
144
|
+
if (isJsonMode(proposal)) {
|
|
145
|
+
jsonOut(p);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
console.log(`Accepted ${p.proposalId}.`);
|
|
149
|
+
});
|
|
150
|
+
// ── Reject ──
|
|
151
|
+
proposal
|
|
152
|
+
.command("reject <proposalId>")
|
|
153
|
+
.description('Reject — posts "Reject your proposal X" into the originating chat session.')
|
|
154
|
+
.action(async (proposalId) => {
|
|
155
|
+
const resp = (await apiPost(`/app/proposals/${proposalId}/reject`));
|
|
156
|
+
const p = unwrapResp(resp);
|
|
157
|
+
if (isJsonMode(proposal)) {
|
|
158
|
+
jsonOut(p);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
console.log(`Rejected ${p.proposalId}.`);
|
|
162
|
+
});
|
|
163
|
+
// ── Revise ──
|
|
164
|
+
proposal
|
|
165
|
+
.command("revise <proposalId> <comment>")
|
|
166
|
+
.description('Ask the agent to revise — posts "Update your proposal X. Here\'s my comment. {comment}" into the chat session.')
|
|
167
|
+
.action(async (proposalId, comment) => {
|
|
168
|
+
const resp = (await apiPost(`/app/proposals/${proposalId}/revise`, {
|
|
169
|
+
comment: readContent(comment),
|
|
170
|
+
}));
|
|
171
|
+
const p = unwrapResp(resp);
|
|
172
|
+
if (isJsonMode(proposal)) {
|
|
173
|
+
jsonOut(p);
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
console.log(`Revision requested on ${p.proposalId}.`);
|
|
177
|
+
});
|
|
178
|
+
}
|
package/dist/main.js
CHANGED
|
@@ -13,6 +13,7 @@ import { registerSenseCommand } from "./commands/sense.js";
|
|
|
13
13
|
import { registerSyncCommand } from "./commands/sync.js";
|
|
14
14
|
import { registerUpdateCommand } from "./commands/update.js";
|
|
15
15
|
import { registerMediaCommand } from "./commands/media.js";
|
|
16
|
+
import { registerProposalCommand } from "./commands/proposal.js";
|
|
16
17
|
const require = createRequire(import.meta.url);
|
|
17
18
|
const { version } = require("../package.json");
|
|
18
19
|
const SKIP_BANNER_COMMANDS = new Set(["auth", "init", "update"]);
|
|
@@ -42,6 +43,7 @@ export async function cli() {
|
|
|
42
43
|
registerSyncCommand(program);
|
|
43
44
|
registerUpdateCommand(program);
|
|
44
45
|
registerMediaCommand(program);
|
|
46
|
+
registerProposalCommand(program);
|
|
45
47
|
// Propagate helpWidth to all subcommands
|
|
46
48
|
const helpWidth = process.stdout.columns || 200;
|
|
47
49
|
for (const cmd of program.commands) {
|
package/package.json
CHANGED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gobi-proposal
|
|
3
|
+
description: >-
|
|
4
|
+
Gobi proposal commands for managing agent-authored proposals: list, get, add,
|
|
5
|
+
edit, delete, prioritize, accept, reject, or revise. The top-priority pending
|
|
6
|
+
proposals feed into the agent's system prompt every turn. Use when the user
|
|
7
|
+
wants to review, organize, or respond to proposals — or when an agent (using
|
|
8
|
+
gobi-cli as its tool layer) wants to record a proposal it just composed.
|
|
9
|
+
allowed-tools: Bash(gobi:*)
|
|
10
|
+
metadata:
|
|
11
|
+
author: gobi-ai
|
|
12
|
+
version: "1.3.4"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# gobi-proposal
|
|
16
|
+
|
|
17
|
+
Gobi proposal commands for managing agent-authored proposals (v1.3.4).
|
|
18
|
+
|
|
19
|
+
Requires gobi-cli installed and authenticated. See gobi-core skill for setup.
|
|
20
|
+
|
|
21
|
+
## What is a proposal?
|
|
22
|
+
|
|
23
|
+
A proposal is a unit of standing guidance authored by an agent (in-process during chat, or via `gobi proposal add` when the agent uses gobi-cli as its tool layer). Each proposal has:
|
|
24
|
+
|
|
25
|
+
- **content** — the proposal text (markdown, up to 8000 chars)
|
|
26
|
+
- **priority** — lower number = higher priority; default `100`
|
|
27
|
+
- **status** — `pending`, `accepted`, or `rejected`
|
|
28
|
+
- **revision** — bumped each time the content is edited
|
|
29
|
+
- **sessionId** — optional; the chat session the proposal originated from
|
|
30
|
+
- **history** — append-only log of `created`, `edited`, `prioritized`, `accepted`, `rejected`, and `revise_requested` events
|
|
31
|
+
|
|
32
|
+
The top 5 pending proposals (lowest priority first) are injected into the agent's system prompt every turn — that's how proposals turn into standing instructions.
|
|
33
|
+
|
|
34
|
+
## Lifecycle
|
|
35
|
+
|
|
36
|
+
`accept` and `reject` are terminal: they post a synthesized user message into the originating chat session ("Accept your proposal X" / "Reject your proposal X") so the agent can react. `revise` keeps the proposal pending and posts the user's comment into the session, asking the agent to revise. Only pending proposals can be revised.
|
|
37
|
+
|
|
38
|
+
## Important: JSON Mode
|
|
39
|
+
|
|
40
|
+
For programmatic/agent usage, always pass `--json` as a **global** option (before the subcommand):
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
gobi --json proposal list --limit 20
|
|
44
|
+
gobi --json proposal add "Prefer concise titles" --priority 50
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
JSON mode wraps the response as `{"success": true, "data": <proposal>}` (or `{"success": false, "error": "..."}`).
|
|
48
|
+
|
|
49
|
+
## Available Commands
|
|
50
|
+
|
|
51
|
+
- `gobi proposal` — Proposals authored by your agent during chat. Top-5 feed the system prompt; accept/reject/revise post into the originating chat session.
|
|
52
|
+
- `gobi proposal list` — List proposals (priority ASC, then newest first).
|
|
53
|
+
- `gobi proposal get` — Show one proposal with its history.
|
|
54
|
+
- `gobi proposal edit` — Replace proposal content (bumps revision). Pass '-' for stdin.
|
|
55
|
+
- `gobi proposal delete` — Delete a proposal.
|
|
56
|
+
- `gobi proposal prioritize` — Set priority (lower = higher). Top 5 feed the system prompt.
|
|
57
|
+
- `gobi proposal accept` — Accept — posts "Accept your proposal X" into the originating chat session.
|
|
58
|
+
- `gobi proposal reject` — Reject — posts "Reject your proposal X" into the originating chat session.
|
|
59
|
+
- `gobi proposal revise` — Ask the agent to revise — posts "Update your proposal X. Here's my comment. {comment}" into the chat session.
|
|
60
|
+
|
|
61
|
+
## Reference Documentation
|
|
62
|
+
|
|
63
|
+
- [gobi proposal](references/proposal.md)
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# gobi proposal
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
Usage: gobi proposal [options] [command]
|
|
5
|
+
|
|
6
|
+
Proposals authored by your agent during chat. Top-5 feed the system prompt; accept/reject/revise post into the originating chat session.
|
|
7
|
+
|
|
8
|
+
Options:
|
|
9
|
+
-h, --help display help for command
|
|
10
|
+
|
|
11
|
+
Commands:
|
|
12
|
+
list [options] List proposals (priority ASC, then newest first).
|
|
13
|
+
get <proposalId> Show one proposal with its history.
|
|
14
|
+
add [options] <content> Add a proposal directly. Pass '-' to read from stdin.
|
|
15
|
+
edit <proposalId> <content> Replace proposal content (bumps revision). Pass '-' for stdin.
|
|
16
|
+
delete <proposalId> Delete a proposal.
|
|
17
|
+
prioritize <proposalId> <priority> Set priority (lower = higher). Top 5 feed the system prompt.
|
|
18
|
+
accept <proposalId> Accept — posts "Accept your proposal X" into the originating chat session.
|
|
19
|
+
reject <proposalId> Reject — posts "Reject your proposal X" into the originating chat session.
|
|
20
|
+
revise <proposalId> <comment> Ask the agent to revise — posts "Update your proposal X. Here's my comment. {comment}" into the chat session.
|
|
21
|
+
help [command] display help for command
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## list
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
Usage: gobi proposal list [options]
|
|
28
|
+
|
|
29
|
+
List proposals (priority ASC, then newest first).
|
|
30
|
+
|
|
31
|
+
Options:
|
|
32
|
+
--limit <number> Max proposals to return (1-200) (default: "50")
|
|
33
|
+
-h, --help display help for command
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## get
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
Usage: gobi proposal get [options] <proposalId>
|
|
40
|
+
|
|
41
|
+
Show one proposal with its history.
|
|
42
|
+
|
|
43
|
+
Options:
|
|
44
|
+
-h, --help display help for command
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## add
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
Usage: gobi proposal add [options] <content>
|
|
51
|
+
|
|
52
|
+
Add a proposal directly. Pass '-' to read from stdin.
|
|
53
|
+
|
|
54
|
+
Options:
|
|
55
|
+
--session <sessionId> Originate from a chat session (UUID)
|
|
56
|
+
--priority <number> Priority (lower = higher), default 100
|
|
57
|
+
-h, --help display help for command
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## edit
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
Usage: gobi proposal edit [options] <proposalId> <content>
|
|
64
|
+
|
|
65
|
+
Replace proposal content (bumps revision). Pass '-' for stdin.
|
|
66
|
+
|
|
67
|
+
Options:
|
|
68
|
+
-h, --help display help for command
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## delete
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
Usage: gobi proposal delete [options] <proposalId>
|
|
75
|
+
|
|
76
|
+
Delete a proposal.
|
|
77
|
+
|
|
78
|
+
Options:
|
|
79
|
+
-h, --help display help for command
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## prioritize
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
Usage: gobi proposal prioritize [options] <proposalId> <priority>
|
|
86
|
+
|
|
87
|
+
Set priority (lower = higher). Top 5 feed the system prompt.
|
|
88
|
+
|
|
89
|
+
Options:
|
|
90
|
+
-h, --help display help for command
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## accept
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
Usage: gobi proposal accept [options] <proposalId>
|
|
97
|
+
|
|
98
|
+
Accept — posts "Accept your proposal X" into the originating chat session.
|
|
99
|
+
|
|
100
|
+
Options:
|
|
101
|
+
-h, --help display help for command
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## reject
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
Usage: gobi proposal reject [options] <proposalId>
|
|
108
|
+
|
|
109
|
+
Reject — posts "Reject your proposal X" into the originating chat session.
|
|
110
|
+
|
|
111
|
+
Options:
|
|
112
|
+
-h, --help display help for command
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## revise
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
Usage: gobi proposal revise [options] <proposalId> <comment>
|
|
119
|
+
|
|
120
|
+
Ask the agent to revise — posts "Update your proposal X. Here's my comment. {comment}" into the chat session.
|
|
121
|
+
|
|
122
|
+
Options:
|
|
123
|
+
-h, --help display help for command
|
|
124
|
+
```
|