@gobi-ai/cli 2.0.29 → 2.0.31
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 +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/dist/attachments.js +35 -11
- package/dist/client.js +3 -0
- package/dist/commands/global.js +49 -7
- package/dist/commands/init.js +10 -1
- package/dist/commands/personal.js +49 -7
- package/dist/commands/space.js +147 -8
- package/dist/commands/sync.js +20 -2
- package/dist/commands/utils.js +70 -0
- package/dist/commands/vault.js +15 -3
- package/package.json +1 -1
- package/skills/gobi-artifact/SKILL.md +2 -2
- package/skills/gobi-core/SKILL.md +2 -2
- package/skills/gobi-core/references/space.md +5 -5
- package/skills/gobi-homepage/SKILL.md +19 -6
- package/skills/gobi-media/SKILL.md +2 -2
- package/skills/gobi-sense/SKILL.md +2 -2
- package/skills/gobi-space/SKILL.md +27 -8
- package/skills/gobi-space/references/global.md +30 -5
- package/skills/gobi-space/references/personal.md +30 -5
- package/skills/gobi-space/references/space.md +91 -20
- package/skills/gobi-vault/SKILL.md +3 -3
package/dist/commands/sync.js
CHANGED
|
@@ -142,6 +142,22 @@ export function saveSyncState(gobiDir, state) {
|
|
|
142
142
|
}
|
|
143
143
|
}
|
|
144
144
|
// ─── Syncfiles ────────────────────────────────────────────────────────────────
|
|
145
|
+
/**
|
|
146
|
+
* Webdrive requires every sync/private pattern to be root-anchored — the server
|
|
147
|
+
* rejects anything not starting with "/" (HTTP 400: "Pattern must start with
|
|
148
|
+
* '/'"). Older syncfiles, hand-edits, and `--auto-attachments` appends can all
|
|
149
|
+
* produce slash-less entries that hard-fail the whole sync with a cryptic 400,
|
|
150
|
+
* so anchor them to the vault root here. Negation patterns ("!foo") keep their
|
|
151
|
+
* leading "!". Patterns already starting with "/" are returned unchanged, so
|
|
152
|
+
* anything the server currently accepts is untouched.
|
|
153
|
+
*/
|
|
154
|
+
export function normalizeSyncPattern(pattern) {
|
|
155
|
+
if (pattern.startsWith("!")) {
|
|
156
|
+
const rest = pattern.slice(1);
|
|
157
|
+
return rest.startsWith("/") ? pattern : `!/${rest}`;
|
|
158
|
+
}
|
|
159
|
+
return pattern.startsWith("/") ? pattern : `/${pattern}`;
|
|
160
|
+
}
|
|
145
161
|
export function readSyncfiles(gobiDir) {
|
|
146
162
|
const syncfilesPath = join(gobiDir, "syncfiles");
|
|
147
163
|
if (!existsSync(syncfilesPath)) {
|
|
@@ -151,7 +167,8 @@ export function readSyncfiles(gobiDir) {
|
|
|
151
167
|
const patterns = content
|
|
152
168
|
.split("\n")
|
|
153
169
|
.map((l) => l.trim())
|
|
154
|
-
.filter((l) => l.length > 0 && !l.startsWith("#"))
|
|
170
|
+
.filter((l) => l.length > 0 && !l.startsWith("#"))
|
|
171
|
+
.map(normalizeSyncPattern);
|
|
155
172
|
const contentHash = createHash("md5").update(content).digest("hex");
|
|
156
173
|
return { patterns, contentHash };
|
|
157
174
|
}
|
|
@@ -162,7 +179,8 @@ export function readPrivatefiles(gobiDir) {
|
|
|
162
179
|
return readFileSync(path, "utf-8")
|
|
163
180
|
.split("\n")
|
|
164
181
|
.map((l) => l.trim())
|
|
165
|
-
.filter((l) => l.length > 0 && !l.startsWith("#"))
|
|
182
|
+
.filter((l) => l.length > 0 && !l.startsWith("#"))
|
|
183
|
+
.map(normalizeSyncPattern);
|
|
166
184
|
}
|
|
167
185
|
export function buildWhitelistMatcher(patterns) {
|
|
168
186
|
if (patterns.length === 0)
|
package/dist/commands/utils.js
CHANGED
|
@@ -28,3 +28,73 @@ export function unwrapResp(resp) {
|
|
|
28
28
|
}
|
|
29
29
|
return resp;
|
|
30
30
|
}
|
|
31
|
+
// Compact reaction chips for single-line output: `👍2* 🎉1` — the trailing
|
|
32
|
+
// `*` marks emojis the caller has reacted with (remove via `unreact`).
|
|
33
|
+
export function formatReactionChips(m) {
|
|
34
|
+
const reactions = m.reactions || [];
|
|
35
|
+
if (!Array.isArray(reactions) || !reactions.length)
|
|
36
|
+
return "";
|
|
37
|
+
return reactions
|
|
38
|
+
.map((r) => `${r.emoji}${r.count}${r.reactedByMe ? "*" : ""}`)
|
|
39
|
+
.join(" ");
|
|
40
|
+
}
|
|
41
|
+
// Classify a wire attachment the way the clients do: declared mimeType first,
|
|
42
|
+
// then the media-url extension (covers rows that predate the mimeType field).
|
|
43
|
+
function attachmentKind(a) {
|
|
44
|
+
if (a.artifact)
|
|
45
|
+
return "artifact";
|
|
46
|
+
const mime = (a.mimeType || "").toLowerCase();
|
|
47
|
+
const url = (a.mediaUrl || "").toLowerCase().split("?")[0];
|
|
48
|
+
if (mime === "image/gif" || (!mime && url.endsWith(".gif")))
|
|
49
|
+
return "gif";
|
|
50
|
+
if (mime.startsWith("image/"))
|
|
51
|
+
return "photo";
|
|
52
|
+
if (mime.startsWith("video/"))
|
|
53
|
+
return "video";
|
|
54
|
+
if (mime)
|
|
55
|
+
return "file";
|
|
56
|
+
if (/\.(jpe?g|png|webp|heic|heif|avif|svg|bmp|tiff)$/.test(url))
|
|
57
|
+
return "photo";
|
|
58
|
+
if (/\.(mp4|mov|webm|m4v)$/.test(url))
|
|
59
|
+
return "video";
|
|
60
|
+
if (/\.(pdf|md|txt|csv)$/.test(url))
|
|
61
|
+
return "file";
|
|
62
|
+
return "media";
|
|
63
|
+
}
|
|
64
|
+
// Compact attachment marker for single-line output: `📎 2 photos, 1 file`.
|
|
65
|
+
// Counts per kind; full URLs are in `get-post` (or --json).
|
|
66
|
+
export function formatAttachmentSummary(m) {
|
|
67
|
+
const attachments = m.attachments || [];
|
|
68
|
+
if (!Array.isArray(attachments) || !attachments.length)
|
|
69
|
+
return "";
|
|
70
|
+
const counts = new Map();
|
|
71
|
+
for (const a of attachments) {
|
|
72
|
+
const kind = attachmentKind(a);
|
|
73
|
+
counts.set(kind, (counts.get(kind) ?? 0) + 1);
|
|
74
|
+
}
|
|
75
|
+
const parts = [];
|
|
76
|
+
for (const [kind, count] of counts) {
|
|
77
|
+
parts.push(count === 1 ? `1 ${kind}` : `${count} ${kind}s`);
|
|
78
|
+
}
|
|
79
|
+
return `📎 ${parts.join(", ")}`;
|
|
80
|
+
}
|
|
81
|
+
// One line per attachment with the fetchable URL — used by `get-post` so an
|
|
82
|
+
// agent can download/describe the media without re-querying in --json mode.
|
|
83
|
+
export function formatAttachmentLines(m, indent = " ") {
|
|
84
|
+
const attachments = m.attachments || [];
|
|
85
|
+
if (!Array.isArray(attachments) || !attachments.length)
|
|
86
|
+
return [];
|
|
87
|
+
return attachments.map((a) => {
|
|
88
|
+
const kind = attachmentKind(a);
|
|
89
|
+
if (kind === "artifact") {
|
|
90
|
+
const art = a.artifact;
|
|
91
|
+
const title = art.title ? ` "${art.title}"` : "";
|
|
92
|
+
const status = art.isPublished ? "published" : "unpublished";
|
|
93
|
+
return `${indent}- artifact [${art.kind}]${title} (${art.artifactId}, ${status})${art.mediaUrl ? ` — ${art.mediaUrl}` : ""}`;
|
|
94
|
+
}
|
|
95
|
+
const dims = a.width && a.height ? ` ${a.width}×${a.height}` : "";
|
|
96
|
+
const name = a.fileName ? ` "${a.fileName}"` : "";
|
|
97
|
+
const mime = a.mimeType ? ` (${a.mimeType})` : "";
|
|
98
|
+
return `${indent}- ${kind}${name}${dims}${mime} — ${a.mediaUrl}`;
|
|
99
|
+
});
|
|
100
|
+
}
|
package/dist/commands/vault.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from "fs";
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
2
2
|
import { join, resolve as pathResolve } from "path";
|
|
3
3
|
import { WEB_BASE_URL, WEBDRIVE_BASE_URL } from "../constants.js";
|
|
4
4
|
import { getValidToken } from "../auth/manager.js";
|
|
5
5
|
import { GobiError } from "../errors.js";
|
|
6
6
|
import { apiDelete, apiGet, apiPatch, apiPost } from "../client.js";
|
|
7
|
-
import { getVaultSlug, requireVault, runVaultInitFlow } from "./init.js";
|
|
7
|
+
import { defaultPublishMd, getVaultSlug, requireVault, runVaultInitFlow } from "./init.js";
|
|
8
8
|
import { isJsonMode, jsonOut, unwrapResp } from "./utils.js";
|
|
9
9
|
import { runSync } from "./sync.js";
|
|
10
10
|
export const PUBLISH_FILENAME = "PUBLISH.md";
|
|
@@ -156,7 +156,19 @@ export function registerVaultCommand(program) {
|
|
|
156
156
|
const vaultId = getVaultSlug();
|
|
157
157
|
const filePath = join(process.cwd(), PUBLISH_FILENAME);
|
|
158
158
|
if (!existsSync(filePath)) {
|
|
159
|
-
|
|
159
|
+
// Scaffold a starter profile locally instead of dead-ending, but do NOT
|
|
160
|
+
// push it — an empty profile shouldn't go live without the user's review.
|
|
161
|
+
// (Legacy vaults that predate PUBLISH.md, e.g. BRAIN.md-only, land here.)
|
|
162
|
+
writeFileSync(filePath, defaultPublishMd(vaultId), "utf-8");
|
|
163
|
+
const msg = `${PUBLISH_FILENAME} not found, so a starter one was created at ${filePath}. ` +
|
|
164
|
+
`Fill in at least "title" and "description" (add "homepage" too if you have a custom homepage), ` +
|
|
165
|
+
`then re-run "gobi vault publish".`;
|
|
166
|
+
if (isJsonMode(vault)) {
|
|
167
|
+
jsonOut({ vaultId, published: false, created: PUBLISH_FILENAME, message: msg });
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
console.log(msg);
|
|
171
|
+
return;
|
|
160
172
|
}
|
|
161
173
|
const content = readFileSync(filePath, "utf-8");
|
|
162
174
|
const token = await getValidToken();
|
package/package.json
CHANGED
|
@@ -9,12 +9,12 @@ description: >-
|
|
|
9
9
|
allowed-tools: Bash(gobi:*)
|
|
10
10
|
metadata:
|
|
11
11
|
author: gobi-ai
|
|
12
|
-
version: "2.0.
|
|
12
|
+
version: "2.0.31"
|
|
13
13
|
---
|
|
14
14
|
|
|
15
15
|
# gobi-artifact
|
|
16
16
|
|
|
17
|
-
Gobi artifact commands for versioned, post-attachable creations (v2.0.
|
|
17
|
+
Gobi artifact commands for versioned, post-attachable creations (v2.0.31).
|
|
18
18
|
|
|
19
19
|
Requires gobi-cli installed and authenticated. See gobi-core skill for setup.
|
|
20
20
|
|
|
@@ -8,12 +8,12 @@ description: >-
|
|
|
8
8
|
allowed-tools: Bash(gobi:*)
|
|
9
9
|
metadata:
|
|
10
10
|
author: gobi-ai
|
|
11
|
-
version: "2.0.
|
|
11
|
+
version: "2.0.31"
|
|
12
12
|
---
|
|
13
13
|
|
|
14
14
|
# gobi-core
|
|
15
15
|
|
|
16
|
-
Core CLI commands for the Gobi collaborative knowledge platform (v2.0.
|
|
16
|
+
Core CLI commands for the Gobi collaborative knowledge platform (v2.0.31).
|
|
17
17
|
|
|
18
18
|
## Prerequisites
|
|
19
19
|
|
|
@@ -6,13 +6,13 @@ Usage: gobi space [options] [command]
|
|
|
6
6
|
Space commands (posts, replies). Space and member admin is web-UI only.
|
|
7
7
|
|
|
8
8
|
Options:
|
|
9
|
-
--space-slug <spaceSlug>
|
|
10
|
-
-h, --help
|
|
9
|
+
--space-slug <spaceSlug> Space slug (overrides .gobi/settings.yaml)
|
|
10
|
+
-h, --help display help for command
|
|
11
11
|
|
|
12
12
|
Commands:
|
|
13
|
-
list
|
|
14
|
-
warp [spaceSlug]
|
|
15
|
-
help [command]
|
|
13
|
+
list List spaces you are a member of.
|
|
14
|
+
warp [spaceSlug] Select the active space. Pass a slug to warp directly, or omit for interactive selection.
|
|
15
|
+
help [command] display help for command
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
## list
|
|
@@ -7,7 +7,7 @@ description: >-
|
|
|
7
7
|
allowed-tools: Bash(gobi:*)
|
|
8
8
|
metadata:
|
|
9
9
|
author: gobi-ai
|
|
10
|
-
version: "2.0.
|
|
10
|
+
version: "2.0.31"
|
|
11
11
|
---
|
|
12
12
|
|
|
13
13
|
# Gobi Homepage Developer Guide
|
|
@@ -20,13 +20,26 @@ A **Gobi Homepage** is a custom HTML page hosted on a vault's webdrive and serve
|
|
|
20
20
|
|
|
21
21
|
## Setup
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
A homepage is registered only after `PUBLISH.md` references it **and** the vault is re-published. Uploading the HTML alone does **not** set the homepage — `gobi vault status` will keep reporting `homepagePath: null` until you publish.
|
|
24
|
+
|
|
25
|
+
1. **Create** the HTML file at a vault-root-relative path, e.g. `app/home.html` (not `_Gobi_/app/home.html` — paths are relative to the vault root).
|
|
26
|
+
2. **Reference it** in `PUBLISH.md` frontmatter via the `homepage` property:
|
|
27
|
+
- `homepage: "[[app/home.html]]"` — Gobi sidebar visible alongside the homepage
|
|
28
|
+
- `homepage: "[[app/home.html?nav=false]]"` — full-screen, no Gobi chrome
|
|
29
|
+
3. **Upload** the HTML to webdrive:
|
|
24
30
|
```bash
|
|
25
|
-
gobi vault sync
|
|
31
|
+
gobi vault sync --upload-only --path app/home.html
|
|
26
32
|
```
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
33
|
+
4. **Publish** so the updated frontmatter takes effect (this uploads `PUBLISH.md` and re-syncs vault metadata):
|
|
34
|
+
```bash
|
|
35
|
+
gobi vault publish
|
|
36
|
+
```
|
|
37
|
+
5. **Verify** the homepage is registered:
|
|
38
|
+
```bash
|
|
39
|
+
gobi --json vault status # expect "homepagePath": "app/home.html"
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
> Any time you change the `homepage` frontmatter, re-run `gobi vault publish` — the file upload alone won't update the profile. See the **gobi-vault** skill for the full publishing workflow.
|
|
30
43
|
|
|
31
44
|
---
|
|
32
45
|
|
|
@@ -10,12 +10,12 @@ description: >-
|
|
|
10
10
|
allowed-tools: Bash(gobi:*)
|
|
11
11
|
metadata:
|
|
12
12
|
author: gobi-ai
|
|
13
|
-
version: "2.0.
|
|
13
|
+
version: "2.0.31"
|
|
14
14
|
---
|
|
15
15
|
|
|
16
16
|
# gobi-media
|
|
17
17
|
|
|
18
|
-
Gobi media generation commands (v2.0.
|
|
18
|
+
Gobi media generation commands (v2.0.31).
|
|
19
19
|
|
|
20
20
|
Requires gobi-cli installed and authenticated. See gobi-core skill for setup.
|
|
21
21
|
|
|
@@ -7,12 +7,12 @@ description: >-
|
|
|
7
7
|
allowed-tools: Bash(gobi:*)
|
|
8
8
|
metadata:
|
|
9
9
|
author: gobi-ai
|
|
10
|
-
version: "2.0.
|
|
10
|
+
version: "2.0.31"
|
|
11
11
|
---
|
|
12
12
|
|
|
13
13
|
# gobi-sense
|
|
14
14
|
|
|
15
|
-
Gobi sense commands for activity and transcription data (v2.0.
|
|
15
|
+
Gobi sense commands for activity and transcription data (v2.0.31).
|
|
16
16
|
|
|
17
17
|
Requires gobi-cli installed and authenticated. See the **gobi-core** skill for setup.
|
|
18
18
|
|
|
@@ -11,12 +11,12 @@ description: >-
|
|
|
11
11
|
allowed-tools: Bash(gobi:*)
|
|
12
12
|
metadata:
|
|
13
13
|
author: gobi-ai
|
|
14
|
-
version: "2.0.
|
|
14
|
+
version: "2.0.31"
|
|
15
15
|
---
|
|
16
16
|
|
|
17
17
|
# gobi-space
|
|
18
18
|
|
|
19
|
-
Gobi space, global, and personal-space posts (v2.0.
|
|
19
|
+
Gobi space, global, and personal-space posts (v2.0.31).
|
|
20
20
|
|
|
21
21
|
Requires gobi-cli installed and authenticated. See the **gobi-core** skill for setup.
|
|
22
22
|
|
|
@@ -51,13 +51,15 @@ Posts have no vault attribution. Both `create-post` and `edit-post` across all t
|
|
|
51
51
|
|
|
52
52
|
> **Wiki-link uploads moved to artifacts.** The `--auto-attachments` flag that used to upload `[[wiki-linked files]]` from a post body now lives on `gobi artifact create` / `gobi artifact revise` (markdown kinds). To publish a markdown creation with resolvable wikilinks, create a markdown artifact with `--vault-slug` + `--auto-attachments` and attach it to the post (`--post-id`). See the **gobi-artifact** skill. Before relying on wikilink resolution, confirm the anchor vault is published: `gobi --json vault status --vault-slug <slug>` should report `isPublished: true`.
|
|
53
53
|
|
|
54
|
-
## Post media attachments (`--attach`)
|
|
54
|
+
## Post media + file attachments (`--attach`)
|
|
55
55
|
|
|
56
|
-
`create-post` and `create-reply` across all three scopes (`gobi space`, `gobi global`, `gobi personal`) accept `--attach <file>` (repeatable) for inline post
|
|
56
|
+
`create-post` and `create-reply` across all three scopes (`gobi space`, `gobi global`, `gobi personal`) accept `--attach <file>` (repeatable) for inline post attachments — photos/GIF/video that render in-feed alongside the post body, and document files (**pdf/md/txt/csv**) that render as Slack-style file cards. The CLI uploads each file to S3 via `POST /posts/upload-url`; document files additionally carry `fileName` + `mimeType` on the row (the S3 key is a UUID, so that's the only place the original name survives).
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
Mix rule (enforced client-side before upload): up to **4 photos + 4 document files** together, OR **1 GIF**, OR **1 video** — GIF and video are exclusive with everything. Size ceilings: 10MB photos, 15MB GIFs, 512MB video, 250MB document files.
|
|
59
59
|
|
|
60
|
-
Use `--attach` for media you want shown in the post itself; use a markdown **artifact** (`gobi artifact create`) for `[[wikilinks]]`-bearing creations attached to the post.
|
|
60
|
+
Use `--attach` for media/files you want shown in the post itself; use a markdown **artifact** (`gobi artifact create`) for `[[wikilinks]]`-bearing creations attached to the post.
|
|
61
|
+
|
|
62
|
+
**Reading attachments back:** feed and list lines show a compact marker like `📎 2 photos, 1 file`; `get-post` prints an `Attachments (N):` block with one line per attachment — kind, original fileName, dimensions/MIME, and the fetchable CDN URL (artifact attachments show kind/title/artifactId instead). In `--json` mode the full `attachments` array is on every post/reply object.
|
|
61
63
|
|
|
62
64
|
## Public link formats
|
|
63
65
|
|
|
@@ -106,7 +108,7 @@ gobi --json space list-posts
|
|
|
106
108
|
- `gobi space list-topic-posts` — List posts tagged with a topic in a space (cursor-paginated).
|
|
107
109
|
|
|
108
110
|
### Feed
|
|
109
|
-
- `gobi space feed` — List the unified feed (posts and replies, newest first).
|
|
111
|
+
- `gobi space feed` — List the unified feed (posts and replies, newest first). `--channel <channelId>` reads a channel's feed instead of the main feed.
|
|
110
112
|
|
|
111
113
|
### Space posts
|
|
112
114
|
- `gobi space list-posts` — List posts in a space (paginated).
|
|
@@ -120,6 +122,22 @@ gobi --json space list-posts
|
|
|
120
122
|
- `gobi space edit-reply <replyId>` — Edit a reply. You must be the author.
|
|
121
123
|
- `gobi space delete-reply <replyId>` — Delete a reply. You must be the author.
|
|
122
124
|
|
|
125
|
+
### Reactions
|
|
126
|
+
|
|
127
|
+
Emoji reactions on posts **and** replies, across all three scopes (`gobi space`, `gobi global`, `gobi personal`). The id is the bare number from the `[p:N]`/`[r:N]` ids in feed output. Feed and `get-post` lines render existing reactions as compact chips like `👍2* 🎉1` — the count follows each emoji, and a trailing `*` marks ones you reacted with.
|
|
128
|
+
|
|
129
|
+
- `gobi space react <postId> <emoji>` — Add a reaction (idempotent; re-reacting with the same emoji is a no-op).
|
|
130
|
+
- `gobi space unreact <postId> <emoji>` — Remove your reaction. Pass the emoji literally (`gobi space unreact 123 👍`).
|
|
131
|
+
|
|
132
|
+
### Channels (space scope only)
|
|
133
|
+
|
|
134
|
+
Channels are private, member-gated sub-feeds inside a space. The **main feed is not a channel** — `feed` / `list-posts` / `create-post` without `--channel` target it, as always. Members see their own channels; space owners/admins see all of them; the space agent sees only channels with agent access enabled. Posting into a channel requires being able to see it. Channel administration (create, rename, delete, add/remove members, leave) is web-UI only — like space and member admin, the CLI deliberately doesn't expose it.
|
|
135
|
+
|
|
136
|
+
- `gobi space list-channels` — List channels visible to you (shows member count, your membership, agent access).
|
|
137
|
+
- `gobi space get-channel <channelId>` — Get one channel's details.
|
|
138
|
+
- `gobi space list-channel-members <channelId>` — List a channel's members.
|
|
139
|
+
- `--channel <channelId>` on `feed`, `list-posts`, and `create-post` reads/writes that channel instead of the main feed.
|
|
140
|
+
|
|
123
141
|
### Personal posts (global feed)
|
|
124
142
|
|
|
125
143
|
`gobi global` is the same surface for Personal Posts — posts that live on the author's profile and surface in the public global feed.
|
|
@@ -157,8 +175,9 @@ Most posts and replies are publicly visible — in a community space (`gobi spac
|
|
|
157
175
|
- `create-post` / `create-reply` — content goes live on submission.
|
|
158
176
|
- `edit-post` / `edit-reply` — confirm the *new* content; people who already saw the original may re-see it.
|
|
159
177
|
- `delete-post` / `delete-reply` — irreversible. Flag that explicitly and confirm the target id before running.
|
|
178
|
+
- `react` / `unreact` are lightweight and reversible — when the user asked for the reaction, no extra confirmation needed.
|
|
160
179
|
|
|
161
|
-
Read-only commands (`list-posts`, `get-post`, `feed`, `list-topics`, `list-topic-posts`, `get`) run without confirmation.
|
|
180
|
+
Read-only commands (`list-posts`, `get-post`, `feed`, `list-topics`, `list-topic-posts`, `get`, `list-channels`, `get-channel`, `list-channel-members`) run without confirmation.
|
|
162
181
|
|
|
163
182
|
## Reference Documentation
|
|
164
183
|
|
|
@@ -18,6 +18,8 @@ Commands:
|
|
|
18
18
|
create-reply [options] <postId> Create a reply to a post in the global feed.
|
|
19
19
|
edit-reply [options] <replyId> Edit a reply you authored in the global feed.
|
|
20
20
|
delete-reply <replyId> Delete a reply you authored in the global feed.
|
|
21
|
+
react <postId> <emoji> Add an emoji reaction to a global-feed post or reply (idempotent). <postId> is the numeric id of a post OR a reply — the [p:N]/[r:N] ids shown in feed output.
|
|
22
|
+
unreact <postId> <emoji> Remove your emoji reaction from a global-feed post or reply. <postId> is the numeric id of a post OR a reply.
|
|
21
23
|
help [command] display help for command
|
|
22
24
|
```
|
|
23
25
|
|
|
@@ -75,7 +77,8 @@ Options:
|
|
|
75
77
|
--content <content> Post content (markdown supported, use "-" for stdin)
|
|
76
78
|
--rich-text <richText> Rich-text JSON array (mutually exclusive with --content)
|
|
77
79
|
--artifact <artifactId> Attach an existing artifact to the post (repeatable). Create artifacts with `gobi artifact create`. (default: [])
|
|
78
|
-
--attach <file> Local media file to attach. Repeatable.
|
|
80
|
+
--attach <file> Local media or document file to attach. Repeatable. Mix rule: up to 4 photos + up to 4 document files (pdf/md/txt/csv) OR 1 GIF OR 1 video. Size ceilings: 10MB photos /
|
|
81
|
+
15MB GIFs / 512MB video / 250MB files. (default: [])
|
|
79
82
|
--repost-post-id <postId> Wrap an existing top-level post as the embedded card on this new post. Composes with --content / --rich-text / --attach (the wrapping author's text + media render above
|
|
80
83
|
the embedded card). Reposts-of-reposts are collapsed to the transitive root server-side. The referenced post must exist, not be deleted, and not itself be a reply.
|
|
81
84
|
-h, --help display help for command
|
|
@@ -92,8 +95,8 @@ Options:
|
|
|
92
95
|
--title <title> New title
|
|
93
96
|
--content <content> New content (markdown supported, use "-" for stdin)
|
|
94
97
|
--rich-text <richText> Rich-text JSON array (mutually exclusive with --content)
|
|
95
|
-
--attach <file> Replace the post's media attachments with the given files (existing attachments are removed). Repeatable.
|
|
96
|
-
ceilings:
|
|
98
|
+
--attach <file> Replace the post's media attachments with the given files (existing attachments are removed). Repeatable. Mix rule: up to 4 photos + up to 4 document files (pdf/md/txt/csv)
|
|
99
|
+
OR 1 GIF OR 1 video. Size ceilings: 10MB photos / 15MB GIFs / 512MB video / 250MB files. Omit to leave attachments unchanged. (default: [])
|
|
97
100
|
--artifact <artifactId> Replace the post's artifact attachments with the given artifact(s) (existing artifact attachments are removed). Repeatable. Omit to leave them unchanged. Create artifacts
|
|
98
101
|
with `gobi artifact create`. (default: [])
|
|
99
102
|
-h, --help display help for command
|
|
@@ -120,8 +123,8 @@ Create a reply to a post in the global feed.
|
|
|
120
123
|
Options:
|
|
121
124
|
--content <content> Reply content (markdown supported, use "-" for stdin)
|
|
122
125
|
--rich-text <richText> Rich-text JSON array (mutually exclusive with --content)
|
|
123
|
-
--attach <file> Local media file to attach to this reply. Repeatable.
|
|
124
|
-
[])
|
|
126
|
+
--attach <file> Local media or document file to attach to this reply. Repeatable. Mix rule: up to 4 photos + up to 4 document files (pdf/md/txt/csv) OR 1 GIF OR 1 video. Size ceilings: 10MB
|
|
127
|
+
photos / 15MB GIFs / 512MB video / 250MB files. (default: [])
|
|
125
128
|
-h, --help display help for command
|
|
126
129
|
```
|
|
127
130
|
|
|
@@ -148,3 +151,25 @@ Delete a reply you authored in the global feed.
|
|
|
148
151
|
Options:
|
|
149
152
|
-h, --help display help for command
|
|
150
153
|
```
|
|
154
|
+
|
|
155
|
+
## react
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
Usage: gobi global react [options] <postId> <emoji>
|
|
159
|
+
|
|
160
|
+
Add an emoji reaction to a global-feed post or reply (idempotent). <postId> is the numeric id of a post OR a reply — the [p:N]/[r:N] ids shown in feed output.
|
|
161
|
+
|
|
162
|
+
Options:
|
|
163
|
+
-h, --help display help for command
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## unreact
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
Usage: gobi global unreact [options] <postId> <emoji>
|
|
170
|
+
|
|
171
|
+
Remove your emoji reaction from a global-feed post or reply. <postId> is the numeric id of a post OR a reply.
|
|
172
|
+
|
|
173
|
+
Options:
|
|
174
|
+
-h, --help display help for command
|
|
175
|
+
```
|
|
@@ -19,6 +19,8 @@ Commands:
|
|
|
19
19
|
create-reply [options] <postId> Reply to a personal-space post. The reply inherits the parent's private scope automatically.
|
|
20
20
|
edit-reply [options] <replyId> Edit a reply you authored in your personal space.
|
|
21
21
|
delete-reply <replyId> Delete a reply you authored in your personal space.
|
|
22
|
+
react <postId> <emoji> Add an emoji reaction to a personal-space post or reply (idempotent). <postId> is the numeric id of a post OR a reply.
|
|
23
|
+
unreact <postId> <emoji> Remove your emoji reaction from a personal-space post or reply. <postId> is the numeric id of a post OR a reply.
|
|
22
24
|
help [command] display help for command
|
|
23
25
|
```
|
|
24
26
|
|
|
@@ -74,7 +76,8 @@ Options:
|
|
|
74
76
|
--content <content> Post content (markdown supported, use "-" for stdin)
|
|
75
77
|
--rich-text <richText> Rich-text JSON array (mutually exclusive with --content)
|
|
76
78
|
--artifact <artifactId> Attach an existing artifact to the post (repeatable). Create artifacts with `gobi artifact create`. (default: [])
|
|
77
|
-
--attach <file> Local media file to attach. Repeatable.
|
|
79
|
+
--attach <file> Local media or document file to attach. Repeatable. Mix rule: up to 4 photos + up to 4 document files (pdf/md/txt/csv) OR 1 GIF OR 1 video. Size ceilings: 10MB photos /
|
|
80
|
+
15MB GIFs / 512MB video / 250MB files. (default: [])
|
|
78
81
|
--repost-post-id <postId> Wrap an existing top-level post as the embedded card on this new private post. The referenced post must be visible to you (your own personal-space post, a global-feed
|
|
79
82
|
post, or a post in a space you're a member of). Reposting someone else's personal-space post returns 404.
|
|
80
83
|
-h, --help display help for command
|
|
@@ -91,8 +94,8 @@ Options:
|
|
|
91
94
|
--title <title> New title
|
|
92
95
|
--content <content> New content (markdown supported, use "-" for stdin)
|
|
93
96
|
--rich-text <richText> Rich-text JSON array (mutually exclusive with --content)
|
|
94
|
-
--attach <file> Replace the post's media attachments with the given files (existing attachments are removed). Repeatable.
|
|
95
|
-
ceilings:
|
|
97
|
+
--attach <file> Replace the post's media attachments with the given files (existing attachments are removed). Repeatable. Mix rule: up to 4 photos + up to 4 document files (pdf/md/txt/csv)
|
|
98
|
+
OR 1 GIF OR 1 video. Size ceilings: 10MB photos / 15MB GIFs / 512MB video / 250MB files. Omit to leave attachments unchanged. (default: [])
|
|
96
99
|
--artifact <artifactId> Replace the post's artifact attachments with the given artifact(s) (existing artifact attachments are removed). Repeatable. Omit to leave them unchanged. Create artifacts
|
|
97
100
|
with `gobi artifact create`. (default: [])
|
|
98
101
|
-h, --help display help for command
|
|
@@ -119,8 +122,8 @@ Reply to a personal-space post. The reply inherits the parent's private scope au
|
|
|
119
122
|
Options:
|
|
120
123
|
--content <content> Reply content (markdown supported, use "-" for stdin)
|
|
121
124
|
--rich-text <richText> Rich-text JSON array (mutually exclusive with --content)
|
|
122
|
-
--attach <file> Local media file to attach to this reply. Repeatable.
|
|
123
|
-
[])
|
|
125
|
+
--attach <file> Local media or document file to attach to this reply. Repeatable. Mix rule: up to 4 photos + up to 4 document files (pdf/md/txt/csv) OR 1 GIF OR 1 video. Size ceilings: 10MB
|
|
126
|
+
photos / 15MB GIFs / 512MB video / 250MB files. (default: [])
|
|
124
127
|
-h, --help display help for command
|
|
125
128
|
```
|
|
126
129
|
|
|
@@ -147,3 +150,25 @@ Delete a reply you authored in your personal space.
|
|
|
147
150
|
Options:
|
|
148
151
|
-h, --help display help for command
|
|
149
152
|
```
|
|
153
|
+
|
|
154
|
+
## react
|
|
155
|
+
|
|
156
|
+
```
|
|
157
|
+
Usage: gobi personal react [options] <postId> <emoji>
|
|
158
|
+
|
|
159
|
+
Add an emoji reaction to a personal-space post or reply (idempotent). <postId> is the numeric id of a post OR a reply.
|
|
160
|
+
|
|
161
|
+
Options:
|
|
162
|
+
-h, --help display help for command
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## unreact
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
Usage: gobi personal unreact [options] <postId> <emoji>
|
|
169
|
+
|
|
170
|
+
Remove your emoji reaction from a personal-space post or reply. <postId> is the numeric id of a post OR a reply.
|
|
171
|
+
|
|
172
|
+
Options:
|
|
173
|
+
-h, --help display help for command
|
|
174
|
+
```
|