@gobi-ai/cli 2.0.22 → 2.0.24
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/LICENSE +1 -1
- package/README.md +39 -13
- package/dist/commands/global.js +11 -4
- package/dist/commands/media.js +3 -3
- package/dist/commands/personal.js +10 -3
- package/dist/commands/space.js +11 -4
- package/dist/commands/sync.js +65 -15
- package/dist/commands/vault.js +1 -1
- package/package.json +1 -1
- package/skills/gobi-core/SKILL.md +7 -3
- package/skills/gobi-core/references/space.md +0 -12
- package/skills/gobi-draft/SKILL.md +5 -4
- package/skills/gobi-homepage/SKILL.md +5 -1
- package/skills/gobi-media/SKILL.md +3 -3
- package/skills/gobi-sense/SKILL.md +2 -2
- package/skills/gobi-space/SKILL.md +35 -16
- package/skills/gobi-space/references/global.md +7 -3
- package/skills/gobi-space/references/personal.md +156 -0
- package/skills/gobi-space/references/space.md +4 -4
- package/skills/gobi-vault/SKILL.md +12 -7
- package/skills/gobi-vault/references/vault.md +2 -2
|
@@ -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": "2.0.
|
|
7
|
+
"version": "2.0.24",
|
|
8
8
|
"plugins": [
|
|
9
9
|
{
|
|
10
10
|
"name": "gobi",
|
|
11
11
|
"description": "Manage the Gobi collaborative knowledge platform from the command line. Publish vault profiles, create posts and replies, generate images and videos.",
|
|
12
|
-
"version": "2.0.
|
|
12
|
+
"version": "2.0.24",
|
|
13
13
|
"author": {
|
|
14
14
|
"name": "gobi-ai"
|
|
15
15
|
},
|
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
[](https://www.npmjs.com/package/@gobi-ai/cli)
|
|
5
5
|
[](LICENSE)
|
|
6
6
|
|
|
7
|
-
The programmatic interface to [Gobi](https://gobispace.com) — the agent-facing surface of the ecosystem. The same capabilities the desktop and web clients use (auth, vault sync and publishing, personal posts and replies, drafts, media generation, activity reads) exposed as composable shell commands so AI agents and developer scripts can
|
|
7
|
+
The programmatic interface to [Gobi](https://gobispace.com) — the agent-facing surface of the ecosystem. The same capabilities the desktop and web clients use (auth, vault sync and publishing, personal posts and replies, drafts, media generation, activity reads) exposed as composable shell commands so AI agents and developer scripts can act on a user's behalf in Gobi.
|
|
8
8
|
|
|
9
9
|
## Why a CLI?
|
|
10
10
|
|
|
11
|
-
Most Gobi capabilities are interactive surfaces (Desktop, Web, Mobile). The CLI flips that: every command is scriptable, returns structured JSON when asked, and uses headless device-code auth so an agent can run it on any host. If you're building an agent that needs to
|
|
11
|
+
Most Gobi capabilities are interactive surfaces (Desktop, Web, Mobile). The CLI flips that: every command is scriptable, returns structured JSON when asked, and uses headless device-code auth so an agent can run it on any host. If you're building an agent that needs to work in a user's Gobi — capture notes, post to a community space, draft a suggestion, generate an image — this is the surface.
|
|
12
12
|
|
|
13
13
|
## Installation
|
|
14
14
|
|
|
@@ -63,7 +63,7 @@ Each setup step unlocks a different family of commands — run only the ones the
|
|
|
63
63
|
| Step | Unlocks |
|
|
64
64
|
|------|---------|
|
|
65
65
|
| `gobi auth login` | All authenticated commands |
|
|
66
|
-
| `gobi vault init` | Every `gobi vault …` command (`publish`, `unpublish`, `sync`)
|
|
66
|
+
| `gobi vault init` | Every `gobi vault …` command (`publish`, `unpublish`, `sync`); also lets `global create-post --auto-attachments` resolve that vault automatically |
|
|
67
67
|
| `gobi space warp` | Every `gobi space …` command without needing `--space-slug` |
|
|
68
68
|
|
|
69
69
|
---
|
|
@@ -142,6 +142,10 @@ When the runtime exports `GOBI_SESSION_ID`, `gobi draft add` picks it up automat
|
|
|
142
142
|
|
|
143
143
|
| Command | Description |
|
|
144
144
|
|---------|-------------|
|
|
145
|
+
| `gobi vault create <slug> --name <n>` | Create a new vault. Does not change the configured vault — run `gobi vault init` or `gobi vault set-primary` afterwards if you want to anchor to it. |
|
|
146
|
+
| `gobi vault rename <newName> [--vault-slug <slug>]` | Rename a vault. Defaults to the configured vault. Local display name only — does not affect `PUBLISH.md` frontmatter. |
|
|
147
|
+
| `gobi vault delete <slug>` | Delete a vault. Irreversible. The API rejects if the vault still owns content; clean up posts, members, and files first. |
|
|
148
|
+
| `gobi vault set-primary <slug>` | Mark a vault as your primary. Unsets primary on the others. |
|
|
145
149
|
| `gobi vault publish` | Upload `PUBLISH.md` to your vault. Triggers profile/metadata refresh. |
|
|
146
150
|
| `gobi vault unpublish` | Remove `PUBLISH.md` from your vault. |
|
|
147
151
|
| `gobi vault status [--vault-slug <slug>]` | Show the configured vault's publish state (`isPublished`), profile fields, file count, and public profile URL. Useful as a pre-flight check before posting with `--auto-attachments`. |
|
|
@@ -178,31 +182,49 @@ A *Space* is a community knowledge area. A *Space Post* lives in one space. The
|
|
|
178
182
|
| `gobi space list-topic-posts <topicSlug>` | List posts tagged with a topic |
|
|
179
183
|
| `gobi space list-posts` | List posts in the space |
|
|
180
184
|
| `gobi space get-post <postId> [--full]` | Get a post with its ancestors and replies. `--full` shows reply content without truncation. |
|
|
181
|
-
| `gobi space create-post --title <t> --content <c> [--vault-slug <slug>] [--auto-attachments] [--
|
|
185
|
+
| `gobi space create-post [--title <t>] (--content <c> \| --rich-text <json> \| --draft-id <id>) [--vault-slug <slug>] [--auto-attachments] [--repost-post-id <id>] [--attach <file>]…` | Create a space post. Must provide content via one of `--content`, `--rich-text`, or `--draft-id`. `--vault-slug` attributes it to a vault you own; `--auto-attachments` uploads `[[wikilinks]]` to that vault and uses it as `authorVaultSlug`. `--draft-id` links the post back to a draft (records `postId`/`spaceSlug` on `draft.metadata` so the client can render an "Open post" button). `--repost-post-id` reposts an existing post (sets `repostPostId` on the new post). `--attach` uploads local media to render inline in-feed (repeatable; X-style mix rule — up to 4 photos OR 1 GIF OR 1 video). |
|
|
182
186
|
| `gobi space edit-post <postId> [--title <t>] [--content <c>] [--vault-slug <slug>] [--auto-attachments]` | Edit a space post. `--vault-slug ""` detaches the vault. |
|
|
183
187
|
| `gobi space delete-post <postId>` | Delete a space post |
|
|
184
|
-
| `gobi space create-reply <postId> (--content <c> \| --rich-text <json>) [--vault-slug <slug>] [--auto-attachments]
|
|
188
|
+
| `gobi space create-reply <postId> (--content <c> \| --rich-text <json>) [--vault-slug <slug>] [--auto-attachments] [--attach <file>]…` | Create a reply to a space post. `--attach` works the same as on `create-post`. |
|
|
185
189
|
| `gobi space edit-reply <replyId> [--content <c>] [--rich-text <json>] [--vault-slug <slug>] [--auto-attachments]` | Edit a reply you authored. `--vault-slug ""` detaches attribution. |
|
|
186
190
|
| `gobi space delete-reply <replyId>` | Delete a reply you authored |
|
|
187
191
|
|
|
188
192
|
### Global feed (personal posts)
|
|
189
193
|
|
|
190
|
-
A *Personal Post*
|
|
194
|
+
A *Personal Post* surfaces in the public global feed. Pass `--vault-slug` to attribute it to a vault you own (it'll then surface on that vault's profile too); with no `--vault-slug` and no `--auto-attachments` the post has no `authorVaultSlug` and lives only on the global feed. Same `Post` model as a Space Post, scoped to the user instead of a space.
|
|
191
195
|
|
|
192
196
|
| Command | Description |
|
|
193
197
|
|---------|-------------|
|
|
194
198
|
| `gobi global feed [--following]` | List the global public feed (posts + replies, newest first). `--following` limits to authors you follow. |
|
|
195
199
|
| `gobi global list-posts [--mine] [--vault-slug <slug>]` | List personal posts; filter to your own or by author vault |
|
|
196
200
|
| `gobi global get-post <postId> [--full]` | Get a personal post with its ancestors and replies. `--full` shows reply content without truncation. |
|
|
197
|
-
| `gobi global create-post [--title <t>] (--content <c> \| --rich-text <json>) [--vault-slug <slug>] [--auto-attachments] [--draft-id <id>]
|
|
201
|
+
| `gobi global create-post [--title <t>] (--content <c> \| --rich-text <json>) [--vault-slug <slug>] [--auto-attachments] [--draft-id <id>] [--repost-post-id <id>] [--attach <file>]…` | Create a personal post. `--draft-id` links the post back to a draft (records `postId` on `draft.metadata`). `--repost-post-id` reposts an existing post. `--attach` uploads local media for inline rendering (see `gobi space create-post` above for the mix rule). |
|
|
198
202
|
| `gobi global edit-post <postId> [--title <t>] [--content <c>] [--vault-slug <slug>]` | Edit a personal post you authored. `--vault-slug ""` detaches the vault. |
|
|
199
203
|
| `gobi global delete-post <postId>` | Delete a personal post you authored |
|
|
200
|
-
| `gobi global create-reply <postId> (--content <c> \| --rich-text <json>) [--vault-slug <slug>] [--auto-attachments]
|
|
204
|
+
| `gobi global create-reply <postId> (--content <c> \| --rich-text <json>) [--vault-slug <slug>] [--auto-attachments] [--attach <file>]…` | Create a reply to a personal post |
|
|
201
205
|
| `gobi global edit-reply <replyId> [--content <c>] [--rich-text <json>] [--vault-slug <slug>] [--auto-attachments]` | Edit a reply you authored. `--vault-slug ""` detaches attribution. |
|
|
202
206
|
| `gobi global delete-reply <replyId>` | Delete a reply you authored |
|
|
203
207
|
|
|
204
208
|
`--vault-slug` requires that the caller hold `role: 'owner'` on the target vault. When set, it becomes the post's `authorVaultSlug`. When `--auto-attachments` is set, the same vault is used both as the upload destination for `[[wikilinks]]` and as `authorVaultSlug`.
|
|
205
209
|
|
|
210
|
+
### Personal space (private posts)
|
|
211
|
+
|
|
212
|
+
> Naming note: a **Personal Post** (under `gobi global`, above) is the public-feed kind — it lives on your vault profile and surfaces on the global feed. A **personal-space post** (this section, under `gobi personal`) is the private kind — same `Post` data model, but scoped via `personalSpaceUserId` so only you can see it.
|
|
213
|
+
|
|
214
|
+
Private posts and replies visible only to you. Same `Post` data model and subcommand shape as `gobi global`, but scoped to a personal space — they never appear on the public global feed.
|
|
215
|
+
|
|
216
|
+
| Command | Description |
|
|
217
|
+
|---------|-------------|
|
|
218
|
+
| `gobi personal feed` | Your personal-space feed (posts + replies, newest first) |
|
|
219
|
+
| `gobi personal list-posts` | List personal-space posts |
|
|
220
|
+
| `gobi personal get-post <postId> [--full]` | Get a personal-space post with its ancestors and replies |
|
|
221
|
+
| `gobi personal create-post [--title <t>] (--content <c> \| --rich-text <json>) [--vault-slug <slug>] [--auto-attachments] [--draft-id <id>] [--repost-post-id <id>] [--attach <file>]…` | Create a private post in your personal space. `--vault-slug` attributes it to a vault you own. `--attach` works the same as on `gobi global create-post`. |
|
|
222
|
+
| `gobi personal edit-post <postId> [--title <t>] [--content <c>] [--vault-slug <slug>] [--auto-attachments]` | Edit a personal-space post you authored |
|
|
223
|
+
| `gobi personal delete-post <postId>` | Delete a personal-space post you authored |
|
|
224
|
+
| `gobi personal create-reply <postId> (--content <c> \| --rich-text <json>) [--vault-slug <slug>] [--auto-attachments] [--attach <file>]…` | Reply to a personal-space post (inherits the parent's private scope) |
|
|
225
|
+
| `gobi personal edit-reply <replyId> [--content <c>] [--rich-text <json>] [--vault-slug <slug>] [--auto-attachments]` | Edit a reply you authored |
|
|
226
|
+
| `gobi personal delete-reply <replyId>` | Delete a reply you authored |
|
|
227
|
+
|
|
206
228
|
### Sense
|
|
207
229
|
|
|
208
230
|
Activity and transcription data captured by Gobi Sense (or the mobile app).
|
|
@@ -226,11 +248,11 @@ Each action is `{ label, message? }`: `label` is the short button text (1–80 c
|
|
|
226
248
|
|---------|-------------|
|
|
227
249
|
| `gobi draft list [--limit N]` | List drafts (priority ASC, then newest first) |
|
|
228
250
|
| `gobi draft get <id>` | Get one draft with its history and suggested actions |
|
|
229
|
-
| `gobi draft add <title> <content> [--session <id>] [--priority N] [--action <label[::message]>]…` | Add a draft. Pass `--action` up to 3 times; each action is `Label` or `Label::Message`. `--session` falls back to `$GOBI_SESSION_ID`. Use `-` for content to read from stdin. |
|
|
251
|
+
| `gobi draft add <title> <content> [--session <id>] [--vault-slug <slug>] [--priority N] [--action <label[::message]>]…` | Add a draft. Pass `--action` up to 3 times; each action is `Label` or `Label::Message`. `--session` falls back to `$GOBI_SESSION_ID`. `--vault-slug` anchors the draft to a specific vault (must be one you own). Use `-` for content to read from stdin. |
|
|
230
252
|
| `gobi draft delete <id>` | Delete a draft |
|
|
231
253
|
| `gobi draft prioritize <id> <priority>` | Set priority (lower = higher) |
|
|
232
254
|
| `gobi draft action <id> <index>` | Take one of the draft's suggested actions by 0-based index. Marks `actioned` and posts the action's `message` (or `label`, if no message) into the originating session. |
|
|
233
|
-
| `gobi draft revise <id> <comment> [--title <t>] [--content <c>] [--action <label[::message]>]…` | Bump revision with a comment; optionally replace title / content / actions in the same call |
|
|
255
|
+
| `gobi draft revise <id> <comment> [--title <t>] [--content <c>] [--vault-slug <slug>] [--action <label[::message]>]…` | Bump revision with a comment; optionally replace title / content / vault-slug / actions in the same call |
|
|
234
256
|
|
|
235
257
|
### Media generation
|
|
236
258
|
|
|
@@ -241,9 +263,12 @@ Image, video, and avatar generation. See the `gobi-media` skill for full workflo
|
|
|
241
263
|
| `gobi media generate-image --prompt <p> [--aspect-ratio <r>] [-o <file>]` | Generate an image (use `-o` to wait + download) |
|
|
242
264
|
| `gobi media edit-image --image <f> --prompt <p>` | Edit an image with a prompt |
|
|
243
265
|
| `gobi media inpaint-image --image <f> --mask <m> --prompt <p>` | Inpaint a masked region |
|
|
266
|
+
| `gobi media get-image-status <jobId>` / `download-image <jobId>` | Poll an image job or download the result |
|
|
244
267
|
| `gobi media create-video --avatar-id <a> --voice-id <v> --script <s>` | Avatar video with voice narration |
|
|
245
268
|
| `gobi media create-cinematic --prompt <p>` | Cinematic video from a text prompt |
|
|
246
|
-
| `gobi media
|
|
269
|
+
| `gobi media get-video-status <videoId>` / `download-video <videoId>` | Poll a video job or download the result |
|
|
270
|
+
| `gobi media design-avatar / design-avatar-from-selfie / confirm-avatar` | Custom avatars from prompts or selfies; confirm a variant after design |
|
|
271
|
+
| `gobi media get-avatar-job-status <jobId>` | Poll an avatar design job |
|
|
247
272
|
| `gobi media list-avatars` / `gobi media list-voices` | List available avatars and voices |
|
|
248
273
|
| `gobi media list-videos` / `gobi media get-video <id>` | List or get videos |
|
|
249
274
|
| `gobi media upload <file>` | Upload a local file and get a media id |
|
|
@@ -252,7 +277,7 @@ Image, video, and avatar generation. See the `gobi-media` skill for full workflo
|
|
|
252
277
|
|
|
253
278
|
| Option | Scope | Description |
|
|
254
279
|
|--------|-------|-------------|
|
|
255
|
-
| `--json` | All commands | Output structured JSON (`{success, data}` / `{success, error}`) |
|
|
280
|
+
| `--json` | All non-interactive commands | Output structured JSON (`{success, data}` / `{success, error}`). Interactive commands (`gobi auth login`, `gobi vault init`, `gobi update`, `gobi space warp` without a slug) prompt, poll, or stream subprocess output and ignore `--json`. |
|
|
256
281
|
| `--space-slug <slug>` | `space` commands | Override the default space (from `.gobi/settings.yaml`) |
|
|
257
282
|
| `--vault-slug <slug>` | Per-command | Override the default vault — see each command's docs |
|
|
258
283
|
|
|
@@ -264,6 +289,7 @@ Image, video, and avatar generation. See the `gobi-media` skill for full workflo
|
|
|
264
289
|
|----------|---------|-------------|
|
|
265
290
|
| `GOBI_BASE_URL` | `https://api.joingobi.com` | API server URL |
|
|
266
291
|
| `GOBI_WEBDRIVE_BASE_URL` | `https://webdrive.joingobi.com` | File storage URL |
|
|
292
|
+
| `GOBI_WEB_BASE_URL` | `https://gobispace.com` | Public web URL (used when assembling shareable links) |
|
|
267
293
|
| `GOBI_SESSION_ID` | — | Default `--session` for `gobi draft add` (set automatically inside agent runs) |
|
|
268
294
|
|
|
269
295
|
### Files
|
|
@@ -284,7 +310,7 @@ The CLI ships a `.claude-plugin/` manifest with skills that wrap the command gro
|
|
|
284
310
|
|-------|--------|
|
|
285
311
|
| `gobi-core` | Auth, update, space list/warp |
|
|
286
312
|
| `gobi-vault` | `gobi vault init/list/publish/unpublish/sync` |
|
|
287
|
-
| `gobi-space` | `gobi space
|
|
313
|
+
| `gobi-space` | `gobi space …`, `gobi global …`, and `gobi personal …` |
|
|
288
314
|
| `gobi-draft` | `gobi draft …` |
|
|
289
315
|
| `gobi-media` | `gobi media …` |
|
|
290
316
|
| `gobi-sense` | `gobi sense list-activities/list-transcriptions` |
|
package/dist/commands/global.js
CHANGED
|
@@ -188,11 +188,11 @@ export function registerGlobalCommand(program) {
|
|
|
188
188
|
// ── Create post ──
|
|
189
189
|
global
|
|
190
190
|
.command("create-post")
|
|
191
|
-
.description("Create a post in the global feed. --vault-slug attributes it to a vault you own
|
|
191
|
+
.description("Create a post in the global feed. --vault-slug attributes it to a vault you own. With no --vault-slug and no --auto-attachments, the post is created without an authorVaultSlug (vault-less personal post).")
|
|
192
192
|
.option("--title <title>", "Title of the post")
|
|
193
193
|
.option("--content <content>", "Post content (markdown supported, use \"-\" for stdin)")
|
|
194
194
|
.option("--rich-text <richText>", "Rich-text JSON array (mutually exclusive with --content)")
|
|
195
|
-
.option("--vault-slug <vaultSlug>", "Attribute the post to this vault (sets authorVaultSlug).
|
|
195
|
+
.option("--vault-slug <vaultSlug>", "Attribute the post to this vault (sets authorVaultSlug). Caller must own the vault.")
|
|
196
196
|
.option("--auto-attachments", "Upload wiki-linked [[files]] to webdrive before posting (also sets authorVaultSlug to that vault)")
|
|
197
197
|
.option("--draft-id <draftId>", "Use this draft as the source of title and content (mutually exclusive with --title/--content/--rich-text). On success, links the post back by recording postId on draft.metadata so the client can render an 'Open post' button. The draft's vaultSlug seeds --vault-slug when not given explicitly.")
|
|
198
198
|
.option("--attach <file>", "Local media file to attach. Repeatable. X-style mix rule: up to 4 photos OR 1 GIF OR 1 video. Size ceilings: 5MB photos / 15MB GIFs / 512MB video.", (value, prev = []) => [...prev, value], [])
|
|
@@ -290,13 +290,16 @@ export function registerGlobalCommand(program) {
|
|
|
290
290
|
.option("--rich-text <richText>", "Rich-text JSON array (mutually exclusive with --content)")
|
|
291
291
|
.option("--vault-slug <vaultSlug>", "Attribute the post to this vault (sets authorVaultSlug).")
|
|
292
292
|
.option("--auto-attachments", "Upload wiki-linked [[files]] to webdrive before editing (uses --vault-slug or .gobi vault)")
|
|
293
|
+
.option("--attach <file>", "Replace the post's media attachments with the given files (existing attachments are removed). Repeatable. X-style mix rule: up to 4 photos OR 1 GIF OR 1 video. Size ceilings: 5MB photos / 15MB GIFs / 512MB video. Omit to leave attachments unchanged.", (value, prev = []) => [...prev, value], [])
|
|
293
294
|
.action(async (postId, opts) => {
|
|
294
295
|
const wantsVaultChange = !!(opts.vaultSlug || opts.autoAttachments);
|
|
296
|
+
const wantsAttachChange = !!(opts.attach && opts.attach.length > 0);
|
|
295
297
|
if (opts.title == null &&
|
|
296
298
|
opts.content == null &&
|
|
297
299
|
opts.richText == null &&
|
|
298
|
-
!wantsVaultChange
|
|
299
|
-
|
|
300
|
+
!wantsVaultChange &&
|
|
301
|
+
!wantsAttachChange) {
|
|
302
|
+
throw new Error("Provide at least --title, --content, --rich-text, --vault-slug, or --attach to update.");
|
|
300
303
|
}
|
|
301
304
|
if (opts.content && opts.richText) {
|
|
302
305
|
throw new Error("--content and --rich-text are mutually exclusive.");
|
|
@@ -329,6 +332,10 @@ export function registerGlobalCommand(program) {
|
|
|
329
332
|
}
|
|
330
333
|
if (authorVaultSlug !== undefined)
|
|
331
334
|
body.authorVaultSlug = authorVaultSlug;
|
|
335
|
+
if (opts.attach && opts.attach.length > 0) {
|
|
336
|
+
assertPostAttachmentMix(opts.attach);
|
|
337
|
+
body.attachments = await uploadPostAttachments(opts.attach);
|
|
338
|
+
}
|
|
332
339
|
const resp = (await apiPatch(`/posts/${postId}`, body));
|
|
333
340
|
const post = unwrapResp(resp);
|
|
334
341
|
if (isJsonMode(global)) {
|
package/dist/commands/media.js
CHANGED
|
@@ -216,7 +216,7 @@ export function registerMediaCommand(program) {
|
|
|
216
216
|
` ID: ${downloadId}\n` +
|
|
217
217
|
` Status: ${status}`);
|
|
218
218
|
if (status === "inference_complete") {
|
|
219
|
-
console.log(` Download: gobi media video
|
|
219
|
+
console.log(` Download: gobi media download-video ${downloadId}`);
|
|
220
220
|
}
|
|
221
221
|
});
|
|
222
222
|
media
|
|
@@ -418,7 +418,7 @@ export function registerMediaCommand(program) {
|
|
|
418
418
|
` ID: ${downloadId}\n` +
|
|
419
419
|
` Status: ${status}`);
|
|
420
420
|
if (status === "inference_complete") {
|
|
421
|
-
console.log(` Download: gobi media video
|
|
421
|
+
console.log(` Download: gobi media download-video ${downloadId}`);
|
|
422
422
|
}
|
|
423
423
|
});
|
|
424
424
|
// ════════════════════════════════════════════════════════════════════
|
|
@@ -632,7 +632,7 @@ export function registerMediaCommand(program) {
|
|
|
632
632
|
console.log(` Download URL: ${imgUrl}`);
|
|
633
633
|
}
|
|
634
634
|
else if (status === "queued" || status === "inference_started" || status === "inference_working") {
|
|
635
|
-
console.log(` Check: gobi media image-status ${jobId}`);
|
|
635
|
+
console.log(` Check: gobi media get-image-status ${jobId}`);
|
|
636
636
|
}
|
|
637
637
|
});
|
|
638
638
|
media
|
|
@@ -190,7 +190,7 @@ export function registerPersonalCommand(program) {
|
|
|
190
190
|
.option("--title <title>", "Title of the post")
|
|
191
191
|
.option("--content <content>", "Post content (markdown supported, use \"-\" for stdin)")
|
|
192
192
|
.option("--rich-text <richText>", "Rich-text JSON array (mutually exclusive with --content)")
|
|
193
|
-
.option("--vault-slug <vaultSlug>", "Attribute the post to this vault (sets authorVaultSlug).
|
|
193
|
+
.option("--vault-slug <vaultSlug>", "Attribute the post to this vault (sets authorVaultSlug). Caller must own the vault.")
|
|
194
194
|
.option("--auto-attachments", "Upload wiki-linked [[files]] to webdrive before posting (also sets authorVaultSlug to that vault)")
|
|
195
195
|
.option("--draft-id <draftId>", "Use this draft as the source of title and content (mutually exclusive with --title/--content/--rich-text). On success, links the post back via draft.metadata. The draft's vaultSlug seeds --vault-slug when not given explicitly.")
|
|
196
196
|
.option("--attach <file>", "Local media file to attach. Repeatable. X-style mix rule: up to 4 photos OR 1 GIF OR 1 video. Size ceilings: 5MB photos / 15MB GIFs / 512MB video.", (value, prev = []) => [...prev, value], [])
|
|
@@ -289,13 +289,16 @@ export function registerPersonalCommand(program) {
|
|
|
289
289
|
.option("--rich-text <richText>", "Rich-text JSON array (mutually exclusive with --content)")
|
|
290
290
|
.option("--vault-slug <vaultSlug>", "Attribute the post to this vault (sets authorVaultSlug).")
|
|
291
291
|
.option("--auto-attachments", "Upload wiki-linked [[files]] to webdrive before editing (uses --vault-slug or .gobi vault)")
|
|
292
|
+
.option("--attach <file>", "Replace the post's media attachments with the given files (existing attachments are removed). Repeatable. X-style mix rule: up to 4 photos OR 1 GIF OR 1 video. Size ceilings: 5MB photos / 15MB GIFs / 512MB video. Omit to leave attachments unchanged.", (value, prev = []) => [...prev, value], [])
|
|
292
293
|
.action(async (postId, opts) => {
|
|
293
294
|
const wantsVaultChange = !!(opts.vaultSlug || opts.autoAttachments);
|
|
295
|
+
const wantsAttachChange = !!(opts.attach && opts.attach.length > 0);
|
|
294
296
|
if (opts.title == null &&
|
|
295
297
|
opts.content == null &&
|
|
296
298
|
opts.richText == null &&
|
|
297
|
-
!wantsVaultChange
|
|
298
|
-
|
|
299
|
+
!wantsVaultChange &&
|
|
300
|
+
!wantsAttachChange) {
|
|
301
|
+
throw new Error("Provide at least --title, --content, --rich-text, --vault-slug, or --attach to update.");
|
|
299
302
|
}
|
|
300
303
|
if (opts.content && opts.richText) {
|
|
301
304
|
throw new Error("--content and --rich-text are mutually exclusive.");
|
|
@@ -328,6 +331,10 @@ export function registerPersonalCommand(program) {
|
|
|
328
331
|
}
|
|
329
332
|
if (authorVaultSlug !== undefined)
|
|
330
333
|
body.authorVaultSlug = authorVaultSlug;
|
|
334
|
+
if (opts.attach && opts.attach.length > 0) {
|
|
335
|
+
assertPostAttachmentMix(opts.attach);
|
|
336
|
+
body.attachments = await uploadPostAttachments(opts.attach);
|
|
337
|
+
}
|
|
331
338
|
const resp = (await apiPatch(`/posts/${postId}`, body));
|
|
332
339
|
const post = unwrapResp(resp);
|
|
333
340
|
if (isJsonMode(personal)) {
|
package/dist/commands/space.js
CHANGED
|
@@ -317,7 +317,7 @@ export function registerSpaceCommand(program) {
|
|
|
317
317
|
.option("--content <content>", "Post content (markdown supported, use \"-\" for stdin)")
|
|
318
318
|
.option("--rich-text <richText>", "Rich-text JSON array (mutually exclusive with --content)")
|
|
319
319
|
.option("--auto-attachments", "Upload wiki-linked [[files]] to webdrive before posting (also attributes the post to that vault)")
|
|
320
|
-
.option("--vault-slug <vaultSlug>", "Attribute the post to this vault (sets
|
|
320
|
+
.option("--vault-slug <vaultSlug>", "Attribute the post to this vault (sets authorVaultSlug). Also used as upload destination for --auto-attachments.")
|
|
321
321
|
.option("--space-slug <spaceSlug>", "Space slug (overrides .gobi/settings.yaml)")
|
|
322
322
|
.option("--draft-id <draftId>", "Use this draft as the source of title and content (mutually exclusive with --title/--content/--rich-text). On success, links the post back by recording postId/spaceSlug on draft.metadata so the client can render an 'Open post' button. The draft's vaultSlug seeds --vault-slug when not given explicitly.")
|
|
323
323
|
.option("--attach <file>", "Local media file to attach. Repeatable. X-style mix rule: up to 4 photos OR 1 GIF OR 1 video. Size ceilings: 5MB photos / 15MB GIFs / 512MB video.", (value, prev = []) => [...prev, value], [])
|
|
@@ -414,15 +414,18 @@ export function registerSpaceCommand(program) {
|
|
|
414
414
|
.option("--content <content>", "New content for the post (markdown supported, use \"-\" for stdin)")
|
|
415
415
|
.option("--rich-text <richText>", "Rich-text JSON array (mutually exclusive with --content)")
|
|
416
416
|
.option("--auto-attachments", "Upload wiki-linked [[files]] to webdrive before editing (also attributes the post to that vault)")
|
|
417
|
-
.option("--vault-slug <vaultSlug>", "Attribute the post to this vault (sets
|
|
417
|
+
.option("--vault-slug <vaultSlug>", "Attribute the post to this vault (sets authorVaultSlug). Also used as upload destination for --auto-attachments.")
|
|
418
418
|
.option("--space-slug <spaceSlug>", "Space slug (overrides .gobi/settings.yaml)")
|
|
419
|
+
.option("--attach <file>", "Replace the post's media attachments with the given files (existing attachments are removed). Repeatable. X-style mix rule: up to 4 photos OR 1 GIF OR 1 video. Size ceilings: 5MB photos / 15MB GIFs / 512MB video. Omit to leave attachments unchanged.", (value, prev = []) => [...prev, value], [])
|
|
419
420
|
.action(async (postId, opts) => {
|
|
420
421
|
const wantsVaultChange = !!(opts.vaultSlug || opts.autoAttachments);
|
|
422
|
+
const wantsAttachChange = !!(opts.attach && opts.attach.length > 0);
|
|
421
423
|
if (opts.title == null &&
|
|
422
424
|
opts.content == null &&
|
|
423
425
|
opts.richText == null &&
|
|
424
|
-
!wantsVaultChange
|
|
425
|
-
|
|
426
|
+
!wantsVaultChange &&
|
|
427
|
+
!wantsAttachChange) {
|
|
428
|
+
throw new Error("Provide at least --title, --content, --rich-text, --vault-slug, or --attach to update.");
|
|
426
429
|
}
|
|
427
430
|
if (opts.content && opts.richText) {
|
|
428
431
|
throw new Error("--content and --rich-text are mutually exclusive.");
|
|
@@ -456,6 +459,10 @@ export function registerSpaceCommand(program) {
|
|
|
456
459
|
}
|
|
457
460
|
if (authorVaultSlug !== undefined)
|
|
458
461
|
body.authorVaultSlug = authorVaultSlug;
|
|
462
|
+
if (opts.attach && opts.attach.length > 0) {
|
|
463
|
+
assertPostAttachmentMix(opts.attach);
|
|
464
|
+
body.attachments = await uploadPostAttachments(opts.attach);
|
|
465
|
+
}
|
|
459
466
|
const resp = (await apiPatch(`/spaces/${spaceSlug}/posts/${postId}`, body));
|
|
460
467
|
const post = unwrapResp(resp);
|
|
461
468
|
if (isJsonMode(space)) {
|
package/dist/commands/sync.js
CHANGED
|
@@ -409,13 +409,26 @@ export async function runSync(opts) {
|
|
|
409
409
|
basePrivatePatterns = [...currPrivatePatterns];
|
|
410
410
|
}
|
|
411
411
|
const privatefilesChanges = computeSyncfilesChanges(basePrivatePatterns, currPrivatePatterns);
|
|
412
|
-
// Walk local files (only whitelisted, non-ignored)
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
412
|
+
// Walk local files (only whitelisted, non-ignored).
|
|
413
|
+
// Optimization: in download-only mode, skip the full walk + hash. The server
|
|
414
|
+
// will return its own file list via the cursor; we then hash only the files
|
|
415
|
+
// the server tells us about that also exist locally, avoiding work for files
|
|
416
|
+
// that are local-only and irrelevant to a download.
|
|
417
|
+
let localFiles = [];
|
|
418
|
+
let localPathSet = new Set();
|
|
419
|
+
const tWalk = Date.now();
|
|
420
|
+
if (opts.downloadOnly) {
|
|
421
|
+
process.stderr.write(`[gobi-sync] timing walkLocalFiles: skipped (download-only)\n`);
|
|
422
|
+
}
|
|
423
|
+
else {
|
|
424
|
+
if (!jsonMode)
|
|
425
|
+
process.stdout.write("Scanning local files...");
|
|
426
|
+
localFiles = walkLocalFiles(vaultDir, state.hashCache, isWhitelisted);
|
|
427
|
+
if (!jsonMode)
|
|
428
|
+
console.log(` ${localFiles.length} file(s) found.`);
|
|
429
|
+
localPathSet = new Set(localFiles.map((f) => f.path));
|
|
430
|
+
process.stderr.write(`[gobi-sync] timing walkLocalFiles: ${localFiles.length} files in ${Date.now() - tWalk}ms\n`);
|
|
431
|
+
}
|
|
419
432
|
// Detect and send offline deletions
|
|
420
433
|
let maxMutationCursor = null;
|
|
421
434
|
for (const cachedPath of Object.keys(state.hashCache)) {
|
|
@@ -444,17 +457,22 @@ export async function runSync(opts) {
|
|
|
444
457
|
}
|
|
445
458
|
// In dry-run mode, include cached-but-locally-deleted files in clientFiles so the
|
|
446
459
|
// server does not propagate the deletion (the whole point of dry-run is no changes).
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
460
|
+
// In download-only mode, send no clientFiles — the lazy-hash filter below decides
|
|
461
|
+
// per-file whether we already have the server's version.
|
|
462
|
+
const clientFilesForSync = opts.downloadOnly
|
|
463
|
+
? []
|
|
464
|
+
: opts.dryRun
|
|
465
|
+
? [
|
|
466
|
+
...localFiles,
|
|
467
|
+
...Object.entries(state.hashCache)
|
|
468
|
+
.filter(([p]) => !localPathSet.has(p) && !existsSync(join(vaultDir, p)))
|
|
469
|
+
.map(([path, entry]) => ({ path, hash: entry.hash, mtime: entry.mtime })),
|
|
470
|
+
]
|
|
471
|
+
: localFiles;
|
|
455
472
|
// POST sync request
|
|
456
473
|
if (!jsonMode)
|
|
457
474
|
process.stdout.write("Syncing with server...");
|
|
475
|
+
const tSync = Date.now();
|
|
458
476
|
let syncResp;
|
|
459
477
|
try {
|
|
460
478
|
syncResp = await performSync(baseUrl, vaultSlug, state, syncfilesChanges, privatefilesChanges, clientFilesForSync, opts, token);
|
|
@@ -480,6 +498,38 @@ export async function runSync(opts) {
|
|
|
480
498
|
}
|
|
481
499
|
if (!jsonMode)
|
|
482
500
|
console.log(` ${syncResp.files.length} action(s).`);
|
|
501
|
+
process.stderr.write(`[gobi-sync] timing performSync: ${syncResp.files.length} actions in ${Date.now() - tSync}ms\n`);
|
|
502
|
+
// Lazy hash filter for download-only: the server returned its file list, but
|
|
503
|
+
// some of those files may already exist locally with the same hash (the common
|
|
504
|
+
// case for a re-activation of an already-synced vault). Drop those actions so
|
|
505
|
+
// we don't redownload identical bytes. hashFile short-circuits via mtime+size
|
|
506
|
+
// when state.hashCache has a matching entry, so warm caches stay cheap.
|
|
507
|
+
if (opts.downloadOnly) {
|
|
508
|
+
const tFilter = Date.now();
|
|
509
|
+
let hashed = 0;
|
|
510
|
+
let alreadyHave = 0;
|
|
511
|
+
syncResp.files = syncResp.files.filter((f) => {
|
|
512
|
+
if (f.action !== "download" || !f.hash)
|
|
513
|
+
return true;
|
|
514
|
+
const absPath = join(vaultDir, f.path);
|
|
515
|
+
if (!existsSync(absPath))
|
|
516
|
+
return true;
|
|
517
|
+
try {
|
|
518
|
+
const entry = hashFile(absPath, f.path, state.hashCache);
|
|
519
|
+
hashed++;
|
|
520
|
+
state.hashCache[f.path] = entry;
|
|
521
|
+
if (entry.hash === f.hash) {
|
|
522
|
+
alreadyHave++;
|
|
523
|
+
return false;
|
|
524
|
+
}
|
|
525
|
+
return true;
|
|
526
|
+
}
|
|
527
|
+
catch {
|
|
528
|
+
return true;
|
|
529
|
+
}
|
|
530
|
+
});
|
|
531
|
+
process.stderr.write(`[gobi-sync] timing downloadFilter: hashed ${hashed}, dropped ${alreadyHave} already-matching, ${syncResp.files.length} remain in ${Date.now() - tFilter}ms\n`);
|
|
532
|
+
}
|
|
483
533
|
// Write plan file if requested (dry-run + --plan-file)
|
|
484
534
|
if (opts.dryRun && opts.planFile) {
|
|
485
535
|
const offlineDeletions = Object.keys(state.hashCache).filter((p) => !localPathSet.has(p) && !existsSync(join(vaultDir, p)));
|
package/dist/commands/vault.js
CHANGED
|
@@ -167,7 +167,7 @@ export function registerVaultCommand(program) {
|
|
|
167
167
|
requireVault(statusCmd);
|
|
168
168
|
const publishCmd = vault
|
|
169
169
|
.command("publish")
|
|
170
|
-
.description(`Upload ${PUBLISH_FILENAME} to the vault root on webdrive. Triggers post-processing (vault sync, metadata update
|
|
170
|
+
.description(`Upload ${PUBLISH_FILENAME} to the vault root on webdrive. Triggers post-processing (vault sync, metadata update).`)
|
|
171
171
|
.action(async () => {
|
|
172
172
|
const vaultId = getVaultSlug();
|
|
173
173
|
const filePath = join(process.cwd(), PUBLISH_FILENAME);
|
package/package.json
CHANGED
|
@@ -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.24"
|
|
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.24).
|
|
17
17
|
|
|
18
18
|
## Prerequisites
|
|
19
19
|
|
|
@@ -50,7 +50,7 @@ There is **no `gobi init`** command — each setup step is its own command, and
|
|
|
50
50
|
| Step | Command | Unlocks |
|
|
51
51
|
|------|---------|---------|
|
|
52
52
|
| 1. Log in | `gobi auth login` | All authenticated commands |
|
|
53
|
-
| 2. Configure a vault for this directory | `gobi vault init` | Every `gobi vault …` command
|
|
53
|
+
| 2. Configure a vault for this directory | `gobi vault init` | Every `gobi vault …` command; also lets `global create-post --auto-attachments` resolve that vault automatically |
|
|
54
54
|
| 3. Pick an active space for this directory | `gobi space warp` | Every `gobi space …` post/reply/feed command without needing `--space-slug` |
|
|
55
55
|
|
|
56
56
|
After step 2 + step 3, `.gobi/settings.yaml` looks like:
|
|
@@ -80,6 +80,9 @@ gobi auth status
|
|
|
80
80
|
| `global feed` / `list-posts` / `get-post` / `delete-post` / `create-reply` / `edit-reply` / `delete-reply` | no | no | – |
|
|
81
81
|
| `global create-post` | optional¹ | no | command-level `--vault-slug <slug>` |
|
|
82
82
|
| `global edit-post` | optional² | no | command-level `--vault-slug <slug>` |
|
|
83
|
+
| `personal feed` / `list-posts` / `get-post` / `delete-post` / `create-reply` / `edit-reply` / `delete-reply` | no | no | – |
|
|
84
|
+
| `personal create-post` | optional¹ | no | command-level `--vault-slug <slug>` |
|
|
85
|
+
| `personal edit-post` | optional² | no | command-level `--vault-slug <slug>` |
|
|
83
86
|
|
|
84
87
|
¹ `global create-post` accepts `--vault-slug` and `--auto-attachments`, both optional. With neither flag and no `vaultSlug` in `.gobi`, the post is created with no `authorVaultSlug` (vault-less personal post) — same as a Space post that isn't attributed to any vault. Set `--vault-slug` (or have `vaultSlug` in `.gobi` plus pass `--auto-attachments`) to attribute it.
|
|
85
88
|
|
|
@@ -135,4 +138,5 @@ Read-only commands (`auth status`, `space list`) run without confirmation.
|
|
|
135
138
|
|----------|---------|-------------|
|
|
136
139
|
| `GOBI_BASE_URL` | `https://api.joingobi.com` | API server URL |
|
|
137
140
|
| `GOBI_WEBDRIVE_BASE_URL` | `https://webdrive.joingobi.com` | File storage URL |
|
|
141
|
+
| `GOBI_WEB_BASE_URL` | `https://gobispace.com` | Public web URL (used when assembling shareable links) |
|
|
138
142
|
| `GOBI_SESSION_ID` | — | Default `--session` for `gobi draft add` (set automatically inside agent runs) |
|
|
@@ -11,19 +11,7 @@ Options:
|
|
|
11
11
|
|
|
12
12
|
Commands:
|
|
13
13
|
list List spaces you are a member of.
|
|
14
|
-
get [options] [spaceSlug] Get details for a space. Pass a slug or omit to use the current space (from .gobi/settings.yaml or --space-slug).
|
|
15
14
|
warp [spaceSlug] Select the active space. Pass a slug to warp directly, or omit for interactive selection.
|
|
16
|
-
list-topics [options] List topics in a space, ordered by most recent content linkage.
|
|
17
|
-
list-topic-posts [options] <topicSlug> List posts tagged with a topic in a space (cursor-paginated).
|
|
18
|
-
feed [options] List the unified feed (posts and replies, newest first) in a space.
|
|
19
|
-
get-post [options] <postId> Get a post with its ancestors and replies (paginated).
|
|
20
|
-
list-posts [options] List posts in a space (paginated).
|
|
21
|
-
create-post [options] Create a post in a space.
|
|
22
|
-
edit-post [options] <postId> Edit a post you authored in a space.
|
|
23
|
-
delete-post [options] <postId> Delete a post you authored in a space.
|
|
24
|
-
create-reply [options] <postId> Create a reply to a post in a space.
|
|
25
|
-
edit-reply [options] <replyId> Edit a reply you authored in a space.
|
|
26
|
-
delete-reply [options] <replyId> Delete a reply you authored in a space.
|
|
27
15
|
help [command] display help for command
|
|
28
16
|
```
|
|
29
17
|
|
|
@@ -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.24"
|
|
14
14
|
---
|
|
15
15
|
|
|
16
16
|
# gobi-draft
|
|
17
17
|
|
|
18
|
-
Gobi draft commands for managing agent-authored drafts (v2.0.
|
|
18
|
+
Gobi draft commands for managing agent-authored drafts (v2.0.24).
|
|
19
19
|
|
|
20
20
|
Requires gobi-cli installed and authenticated. See gobi-core skill for setup.
|
|
21
21
|
|
|
@@ -77,13 +77,14 @@ When the user picks an action via `gobi draft action <id> <index>`, the response
|
|
|
77
77
|
|
|
78
78
|
## Linking a created post back to its draft
|
|
79
79
|
|
|
80
|
-
When the user picks an action like "Post to Global Feed" / "Post to <space>" / "Save
|
|
80
|
+
When the user picks an action like "Post to Global Feed" / "Post to <space>" / "Save to Personal Space" and your next turn creates the post, pass `--draft-id <draftId>` to the relevant create command. `--draft-id` is the **sole** source of `title` and `content` — the CLI fetches the draft and uses its title and content directly, so `--title` / `--content` / `--rich-text` are not allowed alongside it on `create-post`. If you want to change the wording, `gobi draft revise` first, then create.
|
|
81
81
|
|
|
82
|
-
- `gobi space create-post --draft-id` / `gobi global create-post --draft-id` — uses draft's title and content as the post's `title` and `content`. The draft's `vaultSlug` (when set) seeds `--vault-slug` if not given explicitly. `--auto-attachments`, `--space-slug`, and an explicit `--vault-slug` override remain allowed. Records `{ postId, spaceSlug? }` on `draft.metadata` for an "Open post" button.
|
|
82
|
+
- `gobi space create-post --draft-id` / `gobi global create-post --draft-id` / `gobi personal create-post --draft-id` — uses draft's title and content as the post's `title` and `content`. The draft's `vaultSlug` (when set) seeds `--vault-slug` if not given explicitly. `--auto-attachments`, `--space-slug`, and an explicit `--vault-slug` override remain allowed. Records `{ postId, spaceSlug? }` on `draft.metadata` for an "Open post" button.
|
|
83
83
|
|
|
84
84
|
```bash
|
|
85
85
|
gobi --json global create-post --draft-id <draftId>
|
|
86
86
|
gobi --json space create-post --space-slug <slug> --draft-id <draftId>
|
|
87
|
+
gobi --json personal create-post --draft-id <draftId>
|
|
87
88
|
gobi --json global create-post --draft-id <draftId> --auto-attachments
|
|
88
89
|
```
|
|
89
90
|
|
|
@@ -4,6 +4,10 @@ description: >-
|
|
|
4
4
|
Developer reference for building Gobi Homepages — custom HTML pages hosted on
|
|
5
5
|
webdrive and served as a vault's public homepage at gobispace.com/@{vaultSlug}.
|
|
6
6
|
Use when a developer wants to build or modify a vault homepage.
|
|
7
|
+
allowed-tools: Bash(gobi:*)
|
|
8
|
+
metadata:
|
|
9
|
+
author: gobi-ai
|
|
10
|
+
version: "2.0.24"
|
|
7
11
|
---
|
|
8
12
|
|
|
9
13
|
# Gobi Homepage Developer Guide
|
|
@@ -307,7 +311,7 @@ Link back to the vault's public page with `?og=1` so the link preview uses the v
|
|
|
307
311
|
|
|
308
312
|
```html
|
|
309
313
|
<footer>
|
|
310
|
-
<a href="https://
|
|
314
|
+
<a href="https://gobispace.com/@${gobi.vault.vaultId}?og=1" target="_blank" rel="noopener">
|
|
311
315
|
POWERED BY GOBI
|
|
312
316
|
</a>
|
|
313
317
|
</footer>
|
|
@@ -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.24"
|
|
14
14
|
---
|
|
15
15
|
|
|
16
16
|
# gobi-media
|
|
17
17
|
|
|
18
|
-
Gobi media generation commands (v2.0.
|
|
18
|
+
Gobi media generation commands (v2.0.24).
|
|
19
19
|
|
|
20
20
|
Requires gobi-cli installed and authenticated. See gobi-core skill for setup.
|
|
21
21
|
|
|
@@ -57,7 +57,7 @@ The `-o` flag implies `--wait` and downloads the image when done.
|
|
|
57
57
|
### Key rules
|
|
58
58
|
- Replace `<NAME>` with a descriptive slug — NEVER use example names like `sunset.png` literally.
|
|
59
59
|
- `--name` is **optional** — auto-derived from prompt if omitted.
|
|
60
|
-
- Do NOT use the `downloadUrl` from the response — it is
|
|
60
|
+
- Do NOT use the `downloadUrl` from the response — it is an internal backend path, not a public link. Always download with `-o` then either wiki-link (chat/vault), `--attach` (CLI-authored post/reply), or nothing (post-mention auto-post — the runtime attaches).
|
|
61
61
|
- `download-image` takes a **positional** jobId (NOT `--job-id`): `gobi media download-image <jobId>`
|
|
62
62
|
- The `jobId` (or `id`) field is what you pass to `download-image` / `get-image-status` — NOT `mediaId`.
|
|
63
63
|
|
|
@@ -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.24"
|
|
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.24).
|
|
16
16
|
|
|
17
17
|
Requires gobi-cli installed and authenticated. See the **gobi-core** skill for setup.
|
|
18
18
|
|
|
@@ -1,32 +1,34 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gobi-space
|
|
3
3
|
description: >-
|
|
4
|
-
Gobi space and
|
|
5
|
-
unified feed and topic feeds — in a community space
|
|
6
|
-
public global feed of personal posts (`gobi global`)
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
Gobi space, global, and personal-space commands: read and write posts and
|
|
5
|
+
replies, browse the unified feed and topic feeds — in a community space
|
|
6
|
+
(`gobi space`), in the public global feed of personal posts (`gobi global`),
|
|
7
|
+
or in your private personal-space feed visible only to you (`gobi personal`).
|
|
8
|
+
All three share the same `Post` data model; only the scope differs. Use when
|
|
9
|
+
the user wants to read or write posts and replies. Space and member admin is
|
|
9
10
|
web-UI only.
|
|
10
11
|
allowed-tools: Bash(gobi:*)
|
|
11
12
|
metadata:
|
|
12
13
|
author: gobi-ai
|
|
13
|
-
version: "2.0.
|
|
14
|
+
version: "2.0.24"
|
|
14
15
|
---
|
|
15
16
|
|
|
16
17
|
# gobi-space
|
|
17
18
|
|
|
18
|
-
Gobi space and
|
|
19
|
+
Gobi space, global, and personal-space posts (v2.0.24).
|
|
19
20
|
|
|
20
21
|
Requires gobi-cli installed and authenticated. See the **gobi-core** skill for setup.
|
|
21
22
|
|
|
22
|
-
##
|
|
23
|
+
## Three scopes, one data model
|
|
23
24
|
|
|
24
|
-
The same `Post` data type drives
|
|
25
|
+
The same `Post` data type drives all three surfaces — the difference is **scope**:
|
|
25
26
|
|
|
26
27
|
- **Space Post** — `gobi space …` — lives in a community space's feed.
|
|
27
|
-
- **Personal Post** — `gobi global …` —
|
|
28
|
+
- **Personal Post** — `gobi global …` — surfaces in the public global feed. When attributed via `--vault-slug` it also surfaces on that vault's profile; with no vault attribution it lives only on the global feed.
|
|
29
|
+
- **Personal-space Post** — `gobi personal …` — private posts and replies visible only to the author. Same shape as `gobi global`, scoped via `personalSpaceUserId` so they never surface on the public feed.
|
|
28
30
|
|
|
29
|
-
Anything you can do to a Space Post (reply, edit, delete, attribute to a vault) you can do to a Personal Post.
|
|
31
|
+
Anything you can do to a Space Post (reply, edit, delete, attribute to a vault) you can do to a Personal Post or a Personal-space Post.
|
|
30
32
|
|
|
31
33
|
- When the user wants to explore or catch up on what's happening in their space, invoke `/gobi:space-explore`.
|
|
32
34
|
- When the user wants to share or post learnings from the current session, invoke `/gobi:space-share`.
|
|
@@ -34,7 +36,7 @@ Anything you can do to a Space Post (reply, edit, delete, attribute to a vault)
|
|
|
34
36
|
|
|
35
37
|
## Authoring posts: title vs. content
|
|
36
38
|
|
|
37
|
-
`create-post` (and `edit-post`) on
|
|
39
|
+
`create-post` (and `edit-post`) on `gobi space`, `gobi global`, and `gobi personal` all take `--title` and `--content` as **separate** fields. The title is rendered as the post heading by the UI, so it must not also appear inside `--content`:
|
|
38
40
|
|
|
39
41
|
- Do **not** repeat the title as a heading (`# My title`) or as the first line of `--content`. The reader will see it twice.
|
|
40
42
|
- Start `--content` with the body itself.
|
|
@@ -45,15 +47,15 @@ The same applies to replies: a reply has only `--content` (no title), so do not
|
|
|
45
47
|
|
|
46
48
|
## Author vault attribution (`--vault-slug`)
|
|
47
49
|
|
|
48
|
-
|
|
50
|
+
`create-post` / `edit-post` across all three scopes (`gobi space`, `gobi global`, `gobi personal`) accept `--vault-slug <slug>`. When set, the slug becomes the post's `authorVaultSlug` — the vault the user is posting on behalf of. The caller must hold `role: 'owner'` on that vault. Pass `--vault-slug ""` on edit to detach.
|
|
49
51
|
|
|
50
52
|
`--auto-attachments` resolves a vault for upload and **also** uses it as `authorVaultSlug` automatically — one flag, two effects.
|
|
51
53
|
|
|
52
|
-
> **Before using `--auto-attachments`, check that the target vault is published.** Run `gobi --json vault status` (or `gobi vault status --vault-slug <slug>`) and verify `isPublished: true`. Files uploaded to a non-public vault are stored on webdrive but are not reachable at `gobispace.com/@{vaultSlug}` — readers will see broken `[[wikilinks]]`. If the status reports unpublished, ask the user to run `gobi vault publish` first (
|
|
54
|
+
> **Before using `--auto-attachments`, check that the target vault is published.** Run `gobi --json vault status` (or `gobi vault status --vault-slug <slug>`) and verify `isPublished: true`. Files uploaded to a non-public vault are stored on webdrive but are not reachable at `gobispace.com/@{vaultSlug}` — readers will see broken `[[wikilinks]]`. If the status reports unpublished, ask the user to run `gobi vault publish` first (the server rejects the publish if `title` and `description` are missing from `PUBLISH.md` frontmatter). See the **gobi-vault** skill.
|
|
53
55
|
|
|
54
56
|
## Post media attachments (`--attach`)
|
|
55
57
|
|
|
56
|
-
Separate from `--auto-attachments`, `
|
|
58
|
+
Separate from `--auto-attachments`, `create-post` and `create-reply` across all three scopes (`gobi space`, `gobi global`, `gobi personal`) accept `--attach <file>` (repeatable) for inline post media — the photos/GIF/video that render in-feed alongside the post body. The CLI uploads each file to S3 via `POST /posts/upload-url` and passes the resulting `{ mediaUrl, mediaKey }` array as the post's `attachments`.
|
|
57
59
|
|
|
58
60
|
X-style mix rule (enforced client-side before upload): up to **4 photos** OR **1 GIF** OR **1 video** — they don't combine. Server-side ceilings: 5MB photos, 15MB GIFs, 512MB video.
|
|
59
61
|
|
|
@@ -135,9 +137,25 @@ gobi --json space list-posts
|
|
|
135
137
|
- `gobi global edit-reply <replyId>` — Edit a reply you authored. Accepts `--auto-attachments` and `--vault-slug` for attachment uploads (mirrors `space edit-reply`).
|
|
136
138
|
- `gobi global delete-reply <replyId>` — Delete a reply you authored.
|
|
137
139
|
|
|
140
|
+
### Personal-space posts (private)
|
|
141
|
+
|
|
142
|
+
`gobi personal` mirrors `gobi global`'s subcommand and write-flag shape, but every row is scoped to a private personal space (`personalSpaceUserId`). Nothing here surfaces on the public global feed — these posts are visible only to you. Use for private notes-as-posts, scratch drafts, or any post you want to author against your vault without making it public.
|
|
143
|
+
|
|
144
|
+
A couple of read-side flags don't mirror — `personal feed` has no `--following` (there's no follow graph in a private space), and `personal list-posts` has no `--mine` / `--vault-slug` (everything in the personal space is already yours).
|
|
145
|
+
|
|
146
|
+
- `gobi personal feed` — Your personal-space feed (posts and replies, newest first).
|
|
147
|
+
- `gobi personal list-posts` — List your personal-space posts.
|
|
148
|
+
- `gobi personal get-post <postId>` — Get a personal-space post with its ancestors and replies.
|
|
149
|
+
- `gobi personal create-post` — Create a private personal-space post. Same flags as `gobi global create-post` (`--vault-slug`, `--auto-attachments`, `--draft-id`, `--repost-post-id`, `--attach`).
|
|
150
|
+
- `gobi personal edit-post <postId>` — Edit a personal-space post you authored.
|
|
151
|
+
- `gobi personal delete-post <postId>` — Delete a personal-space post you authored.
|
|
152
|
+
- `gobi personal create-reply <postId>` — Reply to a personal-space post (inherits the parent's private scope).
|
|
153
|
+
- `gobi personal edit-reply <replyId>` — Edit a reply you authored.
|
|
154
|
+
- `gobi personal delete-reply <replyId>` — Delete a reply you authored.
|
|
155
|
+
|
|
138
156
|
## Confirm before mutating
|
|
139
157
|
|
|
140
|
-
|
|
158
|
+
Most posts and replies are publicly visible — in a community space (`gobi space …`) or in the global feed (`gobi global …`). `gobi personal …` is the exception: those rows are private to the author. Either way, before running any write, confirm with the user — show the exact command and the resolved title, content (or a short preview), and `authorVaultSlug` if `--vault-slug` / `--auto-attachments` is set. This applies even when running autonomously.
|
|
141
159
|
|
|
142
160
|
- `create-post` / `create-reply` — content goes live on submission.
|
|
143
161
|
|
|
@@ -153,3 +171,4 @@ Read-only commands (`list-posts`, `get-post`, `feed`, `list-topics`, `list-topic
|
|
|
153
171
|
|
|
154
172
|
- [gobi space](references/space.md)
|
|
155
173
|
- [gobi global](references/global.md)
|
|
174
|
+
- [gobi personal](references/personal.md)
|
|
@@ -12,7 +12,8 @@ Commands:
|
|
|
12
12
|
feed [options] List the unified feed (posts and replies, newest first) in the global public feed.
|
|
13
13
|
list-posts [options] List posts in the global feed (paginated). Pass --mine to limit to your own posts.
|
|
14
14
|
get-post [options] <postId> Get a global post with its ancestors and replies (paginated).
|
|
15
|
-
create-post [options] Create a post in the global feed. --vault-slug attributes it to a vault you own
|
|
15
|
+
create-post [options] Create a post in the global feed. --vault-slug attributes it to a vault you own. With no --vault-slug and no --auto-attachments, the post is created without an
|
|
16
|
+
authorVaultSlug (vault-less personal post).
|
|
16
17
|
edit-post [options] <postId> Edit a post you authored in the global feed.
|
|
17
18
|
delete-post <postId> Delete a post you authored in the global feed.
|
|
18
19
|
create-reply [options] <postId> Create a reply to a post in the global feed.
|
|
@@ -69,13 +70,14 @@ Options:
|
|
|
69
70
|
```
|
|
70
71
|
Usage: gobi global create-post [options]
|
|
71
72
|
|
|
72
|
-
Create a post in the global feed. --vault-slug attributes it to a vault you own
|
|
73
|
+
Create a post in the global feed. --vault-slug attributes it to a vault you own. With no --vault-slug and no --auto-attachments, the post is created without an authorVaultSlug (vault-less personal
|
|
74
|
+
post).
|
|
73
75
|
|
|
74
76
|
Options:
|
|
75
77
|
--title <title> Title of the post
|
|
76
78
|
--content <content> Post content (markdown supported, use "-" for stdin)
|
|
77
79
|
--rich-text <richText> Rich-text JSON array (mutually exclusive with --content)
|
|
78
|
-
--vault-slug <vaultSlug> Attribute the post to this vault (sets authorVaultSlug).
|
|
80
|
+
--vault-slug <vaultSlug> Attribute the post to this vault (sets authorVaultSlug). Caller must own the vault.
|
|
79
81
|
--auto-attachments Upload wiki-linked [[files]] to webdrive before posting (also sets authorVaultSlug to that vault)
|
|
80
82
|
--draft-id <draftId> Use this draft as the source of title and content (mutually exclusive with --title/--content/--rich-text). On success, links the post back by recording postId on
|
|
81
83
|
draft.metadata so the client can render an 'Open post' button. The draft's vaultSlug seeds --vault-slug when not given explicitly.
|
|
@@ -98,6 +100,8 @@ Options:
|
|
|
98
100
|
--rich-text <richText> Rich-text JSON array (mutually exclusive with --content)
|
|
99
101
|
--vault-slug <vaultSlug> Attribute the post to this vault (sets authorVaultSlug).
|
|
100
102
|
--auto-attachments Upload wiki-linked [[files]] to webdrive before editing (uses --vault-slug or .gobi vault)
|
|
103
|
+
--attach <file> Replace the post's media attachments with the given files (existing attachments are removed). Repeatable. X-style mix rule: up to 4 photos OR 1 GIF OR 1 video. Size
|
|
104
|
+
ceilings: 5MB photos / 15MB GIFs / 512MB video. Omit to leave attachments unchanged. (default: [])
|
|
101
105
|
-h, --help display help for command
|
|
102
106
|
```
|
|
103
107
|
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# gobi personal
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
Usage: gobi personal [options] [command]
|
|
5
|
+
|
|
6
|
+
Personal-space commands (private posts and replies visible only to you). Mirrors the `global` subcommand shape — posts/replies live in the same data model, scoped via personalSpaceUserId so they
|
|
7
|
+
never surface on the public feed.
|
|
8
|
+
|
|
9
|
+
Options:
|
|
10
|
+
-h, --help display help for command
|
|
11
|
+
|
|
12
|
+
Commands:
|
|
13
|
+
feed [options] List your personal-space feed (posts and replies, newest first). Only you can see these rows.
|
|
14
|
+
list-posts [options] List root posts (no replies) in your personal space. Filters the personal feed client-side; pagination cursor advances through the underlying feed page.
|
|
15
|
+
get-post [options] <postId> Get a personal-space post with its ancestors and replies (paginated). Same endpoint as `gobi global get-post`; only the owner can resolve a private id.
|
|
16
|
+
create-post [options] Create a private post in your personal space. --vault-slug attributes it to a vault you own. Visible only to you.
|
|
17
|
+
edit-post [options] <postId> Edit a post you authored in your personal space.
|
|
18
|
+
delete-post <postId> Delete a post you authored in your personal space.
|
|
19
|
+
create-reply [options] <postId> Reply to a personal-space post. The reply inherits the parent's private scope automatically.
|
|
20
|
+
edit-reply [options] <replyId> Edit a reply you authored in your personal space.
|
|
21
|
+
delete-reply <replyId> Delete a reply you authored in your personal space.
|
|
22
|
+
help [command] display help for command
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## feed
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
Usage: gobi personal feed [options]
|
|
29
|
+
|
|
30
|
+
List your personal-space feed (posts and replies, newest first). Only you can see these rows.
|
|
31
|
+
|
|
32
|
+
Options:
|
|
33
|
+
--limit <number> Items per page (default: "20")
|
|
34
|
+
--cursor <string> Pagination cursor from previous response
|
|
35
|
+
-h, --help display help for command
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## list-posts
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
Usage: gobi personal list-posts [options]
|
|
42
|
+
|
|
43
|
+
List root posts (no replies) in your personal space. Filters the personal feed client-side; pagination cursor advances through the underlying feed page.
|
|
44
|
+
|
|
45
|
+
Options:
|
|
46
|
+
--limit <number> Items per page (applied to the underlying feed page) (default: "20")
|
|
47
|
+
--cursor <string> Pagination cursor from previous response
|
|
48
|
+
-h, --help display help for command
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## get-post
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
Usage: gobi personal get-post [options] <postId>
|
|
55
|
+
|
|
56
|
+
Get a personal-space post with its ancestors and replies (paginated). Same endpoint as `gobi global get-post`; only the owner can resolve a private id.
|
|
57
|
+
|
|
58
|
+
Options:
|
|
59
|
+
--limit <number> Items per page (default: "20")
|
|
60
|
+
--cursor <string> Pagination cursor from previous response
|
|
61
|
+
--full Show full reply content without truncation
|
|
62
|
+
-h, --help display help for command
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## create-post
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
Usage: gobi personal create-post [options]
|
|
69
|
+
|
|
70
|
+
Create a private post in your personal space. --vault-slug attributes it to a vault you own. Visible only to you.
|
|
71
|
+
|
|
72
|
+
Options:
|
|
73
|
+
--title <title> Title of the post
|
|
74
|
+
--content <content> Post content (markdown supported, use "-" for stdin)
|
|
75
|
+
--rich-text <richText> Rich-text JSON array (mutually exclusive with --content)
|
|
76
|
+
--vault-slug <vaultSlug> Attribute the post to this vault (sets authorVaultSlug). Caller must own the vault.
|
|
77
|
+
--auto-attachments Upload wiki-linked [[files]] to webdrive before posting (also sets authorVaultSlug to that vault)
|
|
78
|
+
--draft-id <draftId> Use this draft as the source of title and content (mutually exclusive with --title/--content/--rich-text). On success, links the post back via draft.metadata. The draft's
|
|
79
|
+
vaultSlug seeds --vault-slug when not given explicitly.
|
|
80
|
+
--attach <file> Local media file to attach. Repeatable. X-style mix rule: up to 4 photos OR 1 GIF OR 1 video. Size ceilings: 5MB photos / 15MB GIFs / 512MB video. (default: [])
|
|
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
|
|
82
|
+
post, or a post in a space you're a member of). Reposting someone else's personal-space post returns 404.
|
|
83
|
+
-h, --help display help for command
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## edit-post
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
Usage: gobi personal edit-post [options] <postId>
|
|
90
|
+
|
|
91
|
+
Edit a post you authored in your personal space.
|
|
92
|
+
|
|
93
|
+
Options:
|
|
94
|
+
--title <title> New title
|
|
95
|
+
--content <content> New content (markdown supported, use "-" for stdin)
|
|
96
|
+
--rich-text <richText> Rich-text JSON array (mutually exclusive with --content)
|
|
97
|
+
--vault-slug <vaultSlug> Attribute the post to this vault (sets authorVaultSlug).
|
|
98
|
+
--auto-attachments Upload wiki-linked [[files]] to webdrive before editing (uses --vault-slug or .gobi vault)
|
|
99
|
+
--attach <file> Replace the post's media attachments with the given files (existing attachments are removed). Repeatable. X-style mix rule: up to 4 photos OR 1 GIF OR 1 video. Size
|
|
100
|
+
ceilings: 5MB photos / 15MB GIFs / 512MB video. Omit to leave attachments unchanged. (default: [])
|
|
101
|
+
-h, --help display help for command
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## delete-post
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
Usage: gobi personal delete-post [options] <postId>
|
|
108
|
+
|
|
109
|
+
Delete a post you authored in your personal space.
|
|
110
|
+
|
|
111
|
+
Options:
|
|
112
|
+
-h, --help display help for command
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## create-reply
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
Usage: gobi personal create-reply [options] <postId>
|
|
119
|
+
|
|
120
|
+
Reply to a personal-space post. The reply inherits the parent's private scope automatically.
|
|
121
|
+
|
|
122
|
+
Options:
|
|
123
|
+
--content <content> Reply content (markdown supported, use "-" for stdin)
|
|
124
|
+
--rich-text <richText> Rich-text JSON array (mutually exclusive with --content)
|
|
125
|
+
--vault-slug <vaultSlug> Attribute the reply to this vault (sets authorVaultSlug). Also used as upload destination for --auto-attachments.
|
|
126
|
+
--auto-attachments Upload wiki-linked [[files]] to webdrive before posting (also attributes the reply to that vault)
|
|
127
|
+
--attach <file> Local media file to attach to this reply. Repeatable. X-style mix rule: up to 4 photos OR 1 GIF OR 1 video. Size ceilings: 5MB photos / 15MB GIFs / 512MB video. (default:
|
|
128
|
+
[])
|
|
129
|
+
-h, --help display help for command
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## edit-reply
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
Usage: gobi personal edit-reply [options] <replyId>
|
|
136
|
+
|
|
137
|
+
Edit a reply you authored in your personal space.
|
|
138
|
+
|
|
139
|
+
Options:
|
|
140
|
+
--content <content> New reply content (markdown supported, use "-" for stdin)
|
|
141
|
+
--rich-text <richText> Rich-text JSON array (mutually exclusive with --content)
|
|
142
|
+
--vault-slug <vaultSlug> Attribute the reply to this vault (sets authorVaultSlug). Also used as upload destination for --auto-attachments.
|
|
143
|
+
--auto-attachments Upload wiki-linked [[files]] to webdrive before editing (also attributes the reply to that vault)
|
|
144
|
+
-h, --help display help for command
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## delete-reply
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
Usage: gobi personal delete-reply [options] <replyId>
|
|
151
|
+
|
|
152
|
+
Delete a reply you authored in your personal space.
|
|
153
|
+
|
|
154
|
+
Options:
|
|
155
|
+
-h, --help display help for command
|
|
156
|
+
```
|
|
@@ -10,9 +10,7 @@ Options:
|
|
|
10
10
|
-h, --help display help for command
|
|
11
11
|
|
|
12
12
|
Commands:
|
|
13
|
-
list List spaces you are a member of.
|
|
14
13
|
get [options] [spaceSlug] Get details for a space. Pass a slug or omit to use the current space (from .gobi/settings.yaml or --space-slug).
|
|
15
|
-
warp [spaceSlug] Select the active space. Pass a slug to warp directly, or omit for interactive selection.
|
|
16
14
|
list-topics [options] List topics in a space, ordered by most recent content linkage.
|
|
17
15
|
list-topic-posts [options] <topicSlug> List posts tagged with a topic in a space (cursor-paginated).
|
|
18
16
|
feed [options] List the unified feed (posts and replies, newest first) in a space.
|
|
@@ -121,7 +119,7 @@ Options:
|
|
|
121
119
|
--content <content> Post content (markdown supported, use "-" for stdin)
|
|
122
120
|
--rich-text <richText> Rich-text JSON array (mutually exclusive with --content)
|
|
123
121
|
--auto-attachments Upload wiki-linked [[files]] to webdrive before posting (also attributes the post to that vault)
|
|
124
|
-
--vault-slug <vaultSlug> Attribute the post to this vault (sets
|
|
122
|
+
--vault-slug <vaultSlug> Attribute the post to this vault (sets authorVaultSlug). Also used as upload destination for --auto-attachments.
|
|
125
123
|
--space-slug <spaceSlug> Space slug (overrides .gobi/settings.yaml)
|
|
126
124
|
--draft-id <draftId> Use this draft as the source of title and content (mutually exclusive with --title/--content/--rich-text). On success, links the post back by recording postId/spaceSlug
|
|
127
125
|
on draft.metadata so the client can render an 'Open post' button. The draft's vaultSlug seeds --vault-slug when not given explicitly.
|
|
@@ -143,8 +141,10 @@ Options:
|
|
|
143
141
|
--content <content> New content for the post (markdown supported, use "-" for stdin)
|
|
144
142
|
--rich-text <richText> Rich-text JSON array (mutually exclusive with --content)
|
|
145
143
|
--auto-attachments Upload wiki-linked [[files]] to webdrive before editing (also attributes the post to that vault)
|
|
146
|
-
--vault-slug <vaultSlug> Attribute the post to this vault (sets
|
|
144
|
+
--vault-slug <vaultSlug> Attribute the post to this vault (sets authorVaultSlug). Also used as upload destination for --auto-attachments.
|
|
147
145
|
--space-slug <spaceSlug> Space slug (overrides .gobi/settings.yaml)
|
|
146
|
+
--attach <file> Replace the post's media attachments with the given files (existing attachments are removed). Repeatable. X-style mix rule: up to 4 photos OR 1 GIF OR 1 video. Size
|
|
147
|
+
ceilings: 5MB photos / 15MB GIFs / 512MB video. Omit to leave attachments unchanged. (default: [])
|
|
148
148
|
-h, --help display help for command
|
|
149
149
|
```
|
|
150
150
|
|
|
@@ -8,18 +8,23 @@ description: >-
|
|
|
8
8
|
allowed-tools: Bash(gobi:*)
|
|
9
9
|
metadata:
|
|
10
10
|
author: gobi-ai
|
|
11
|
-
version: "2.0.
|
|
11
|
+
version: "2.0.24"
|
|
12
12
|
---
|
|
13
13
|
|
|
14
14
|
# gobi-vault
|
|
15
15
|
|
|
16
|
-
Gobi vault commands for publishing your vault profile and syncing files (v2.0.
|
|
16
|
+
Gobi vault commands for publishing your vault profile and syncing files (v2.0.24).
|
|
17
17
|
|
|
18
18
|
Requires gobi-cli installed and authenticated. See gobi-core skill for setup.
|
|
19
19
|
|
|
20
20
|
## Prerequisites
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
Most `gobi vault …` commands resolve the target vault from the current directory's `.gobi/settings.yaml` (specifically the `vaultSlug` entry); run `gobi vault init` first if it's missing.
|
|
23
|
+
|
|
24
|
+
Exceptions:
|
|
25
|
+
- `vault init`, `vault list`, `vault create <slug>` — no `.gobi` required.
|
|
26
|
+
- `vault delete <slug>`, `vault set-primary <slug>` — slug is a positional, no `.gobi` fallback.
|
|
27
|
+
- `vault rename <newName>`, `vault status` — accept an optional `--vault-slug <slug>` to target a vault other than the one in `.gobi`.
|
|
23
28
|
|
|
24
29
|
## Gobi Vault
|
|
25
30
|
|
|
@@ -42,7 +47,7 @@ gobi --json vault publish
|
|
|
42
47
|
- `gobi vault rename <newName>` — Rename the configured vault's display name. Pass `--vault-slug <slug>` to target another vault. Local handle only — the public profile title comes from `PUBLISH.md` frontmatter and is unaffected.
|
|
43
48
|
- `gobi vault set-primary <slug>` — Mark a vault as your primary. Unsets primary on the others. Required arg, no `.gobi` fallback (avoids accidental promotion).
|
|
44
49
|
- `gobi vault delete <slug>` — Delete a vault. Irreversible. Required arg, no `.gobi` fallback. The API will reject if the vault still owns content; clean up posts, members, and files first.
|
|
45
|
-
- `gobi vault publish` — Upload `PUBLISH.md` to the vault root on webdrive. Triggers post-processing (vault profile sync, metadata update
|
|
50
|
+
- `gobi vault publish` — Upload `PUBLISH.md` to the vault root on webdrive. Triggers post-processing (vault profile sync, metadata update).
|
|
46
51
|
- `gobi vault unpublish` — Delete `PUBLISH.md` from the vault on webdrive.
|
|
47
52
|
- `gobi vault sync` — Sync local vault files with Gobi Webdrive. Supports `--upload-only`, `--download-only`, `--conflict <ask|server|client|skip>`, `--dry-run`, `--full`, `--path <p>`, `--plan-file`, `--execute`.
|
|
48
53
|
|
|
@@ -59,9 +64,9 @@ When linking back to your own posts or files, assemble the URL from concrete fie
|
|
|
59
64
|
|
|
60
65
|
## Confirm before mutating
|
|
61
66
|
|
|
62
|
-
Every command in this skill writes external state — webdrive files
|
|
67
|
+
Every command in this skill writes external state — webdrive files and the public vault profile. Before running any of them, confirm with the user — show the exact command and the key changes (which `PUBLISH.md` fields, which paths will sync, which conflict policy). This applies even when running autonomously.
|
|
63
68
|
|
|
64
|
-
- `vault publish` — public profile change
|
|
69
|
+
- `vault publish` — public profile change. Always confirm.
|
|
65
70
|
- `vault unpublish` — removes the live profile. Always confirm.
|
|
66
71
|
- `vault sync` — can overwrite remote or local files. Run `--dry-run` first and show the user the plan before re-running without `--dry-run`. With `--conflict server` or `--conflict client`, name which side is going to be overwritten.
|
|
67
72
|
- `vault delete <slug>` — irreversible; cannot undo. Confirm the slug and that the user actually means to delete *that* vault before running.
|
|
@@ -120,7 +125,7 @@ After editing `PUBLISH.md` frontmatter, follow these steps to make your changes
|
|
|
120
125
|
```bash
|
|
121
126
|
gobi vault publish
|
|
122
127
|
```
|
|
123
|
-
This uploads `PUBLISH.md` to webdrive, triggers post-processing that extracts metadata (title, description, tags, thumbnail, homepage path), updates the vault's public profile
|
|
128
|
+
This uploads `PUBLISH.md` to webdrive, triggers post-processing that extracts metadata (title, description, tags, thumbnail, homepage path), and updates the vault's public profile.
|
|
124
129
|
4. The vault is now live at `https://gobispace.com/@{vaultSlug}`.
|
|
125
130
|
|
|
126
131
|
> **Important:** Any time you change `PUBLISH.md` frontmatter (e.g. adding or updating `homepage`), you must re-run `gobi vault publish` for the changes to take effect.
|
|
@@ -19,7 +19,7 @@ Commands:
|
|
|
19
19
|
set-primary <slug> Mark a vault as your primary. Unsets primary on the other vaults you own. Slug must be passed explicitly.
|
|
20
20
|
list List vaults you own.
|
|
21
21
|
status [options] Show the configured vault's publish state and metadata (use before posting with --auto-attachments to confirm the vault is public).
|
|
22
|
-
publish Upload PUBLISH.md to the vault root on webdrive. Triggers post-processing (vault sync, metadata update
|
|
22
|
+
publish Upload PUBLISH.md to the vault root on webdrive. Triggers post-processing (vault sync, metadata update).
|
|
23
23
|
unpublish Delete PUBLISH.md from the vault on webdrive.
|
|
24
24
|
sync [options] Sync local vault files with Gobi Webdrive.
|
|
25
25
|
help [command] display help for command
|
|
@@ -112,7 +112,7 @@ Options:
|
|
|
112
112
|
```
|
|
113
113
|
Usage: gobi vault publish [options]
|
|
114
114
|
|
|
115
|
-
Upload PUBLISH.md to the vault root on webdrive. Triggers post-processing (vault sync, metadata update
|
|
115
|
+
Upload PUBLISH.md to the vault root on webdrive. Triggers post-processing (vault sync, metadata update).
|
|
116
116
|
|
|
117
117
|
Options:
|
|
118
118
|
-h, --help display help for command
|