@dboio/cli 0.20.3 → 0.20.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -64,6 +64,204 @@ Once installed, use `/dbo` in Claude Code:
|
|
|
64
64
|
|
|
65
65
|
The plugin source lives in `plugins/claude/dbo/` at the repository root. Installed copies in `.claude/plugins/` are gitignored and managed by `dbo install`. Each plugin's installation scope (project or global) is stored in `~/.dbo/settings.json`.
|
|
66
66
|
|
|
67
|
+
### "Add / Create `<file>` **" — decision tree
|
|
68
|
+
|
|
69
|
+
When a user says **"add `<file>` "**, **"create `<file>`"**, **"push `<file>`"**, or **"upload `<file>`"**, use this decision tree to determine the correct command sequence. The words **add** and **create** are treated identically here — both refer to the CREATE step of CRUD.
|
|
70
|
+
|
|
71
|
+
#### Step 1 — Find the companion metadata file
|
|
72
|
+
|
|
73
|
+
Companion `.metadata.json` files are usually co-located with the content file, but there is one notable exception:
|
|
74
|
+
|
|
75
|
+
| Content file | Where to look for metadata |
|
|
76
|
+
|---|---|
|
|
77
|
+
| `lib/bins/**/*` | Same directory as the file |
|
|
78
|
+
| `lib/extension/**/*` | Same directory as the file |
|
|
79
|
+
| `docs/*.md` | `lib/extension/documentation/<filename>.metadata.json` (when `ExtensionDocumentationMDPlacement` = `"root"`) |
|
|
80
|
+
| Root-level files listed in `.app/config.json` `rootContentFiles` | Default bin directory (e.g., `lib/bins/app/<filename>.metadata.json`); the metadata's `@reference` uses `@/<filename>` to point back to the root |
|
|
81
|
+
| Any other file | Same directory first; if not found, search for `"@<filename>"` or `"@/<filename>"` across all `.metadata.json` files — a `@reference` entry pointing to the file identifies its companion |
|
|
82
|
+
|
|
83
|
+
> **Edge cases where metadata is not co-located with the file:**
|
|
84
|
+
> - `docs/Chat.md` → metadata in `lib/extension/documentation/Chat.metadata.json`
|
|
85
|
+
> - `CLAUDE.md` (root) → metadata in `lib/bins/app/CLAUDE.metadata.json` (or `CLAUDE.md.metadata.json` for newly-adopted files)
|
|
86
|
+
>
|
|
87
|
+
> When you can't find a `.metadata.json` beside a file, grep for `"@<filename>"` or `"@/<filename>"` across the project before concluding the file is untracked.
|
|
88
|
+
|
|
89
|
+
#### Step 2 — Check server presence
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
Does <file>.metadata.json exist?
|
|
93
|
+
│
|
|
94
|
+
├─ YES → Does it contain "_CreatedOn" or "_LastUpdated"?
|
|
95
|
+
│ │
|
|
96
|
+
│ ├─ YES → Record exists on server
|
|
97
|
+
│ │ → dbo push <file> [--ticket <id>]
|
|
98
|
+
│ │
|
|
99
|
+
│ └─ NO → Metadata was adopted locally but never pushed (no UID yet)
|
|
100
|
+
│ → dbo push <file> [--ticket <id>]
|
|
101
|
+
│ (push detects missing UID and routes to insert)
|
|
102
|
+
│
|
|
103
|
+
└─ NO → Does the local file exist?
|
|
104
|
+
│
|
|
105
|
+
├─ YES → File is untracked — create metadata first
|
|
106
|
+
│ → dbo adopt <file> -e <entity>
|
|
107
|
+
│ → dbo push <file> [--ticket <id>]
|
|
108
|
+
│
|
|
109
|
+
└─ NO → File doesn't exist locally — create it on the server first
|
|
110
|
+
→ POST /api/input/submit (create record via REST API)
|
|
111
|
+
→ dbo pull (sync new record to local)
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
**User says "add" or "create" with no file specified:**
|
|
115
|
+
→ Use REST API `/api/input/submit` to create the record on the server, then `dbo pull` to sync locally.
|
|
116
|
+
|
|
117
|
+
#### Ticket ID
|
|
118
|
+
|
|
119
|
+
Include `--ticket <id>` when the project has `RepositoryIntegrationID` configured (ticketing integration is active) and a ticket ID is known for the change. If omitted, the CLI will prompt interactively when the server requires one. A stored ticket in `.app/ticketing.local.json` is applied automatically — check there first if you're unsure whether one exists.
|
|
120
|
+
|
|
121
|
+
### "Read / view `<record>`" — decision tree
|
|
122
|
+
|
|
123
|
+
When a user says **"read"**, **"show"**, **"view"**, **"what's on the server for `<file>`"**, or **"get `<record>`"**, they are in the READ step of CRUD. There are two distinct layers:
|
|
124
|
+
|
|
125
|
+
#### Layer 1 — Query what's on the server (REST)
|
|
126
|
+
|
|
127
|
+
Use the raw REST output to inspect live server data without touching local files:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
# Output by entity
|
|
131
|
+
GET /api/o/e/<entityUid>
|
|
132
|
+
# Output direct
|
|
133
|
+
GET /api/o/<outputUid>
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Alternatively the CLI `output` command returns clean stylized JSON:
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
# Query records for an entity
|
|
140
|
+
dbo output -e <entity>
|
|
141
|
+
|
|
142
|
+
# Query a specific record by UID
|
|
143
|
+
dbo output -e <entity>/<uid>
|
|
144
|
+
|
|
145
|
+
# Run a named output query
|
|
146
|
+
dbo output <uid>
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Use this when you want to inspect current server state, compare values, or look up a UID before pulling.
|
|
150
|
+
|
|
151
|
+
#### Layer 2 — Sync server state to local files
|
|
152
|
+
|
|
153
|
+
The local `.metadata.json` file is a representation of the server record — it reflects what was on the server at the time of the last `dbo clone` or `dbo pull`. Use these commands to bring local files in sync with the server:
|
|
154
|
+
|
|
155
|
+
> **After any REST API add/insert/create** (`/api/input/submit`): always follow with `dbo pull` (or `dbo pull <uid>`) so the new record's `.metadata.json` and companion content files are written locally. The REST API only creates the record server-side — local files do not exist until a pull is performed.
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
Is this the first time cloning this app, or do you need a full reset?
|
|
159
|
+
│
|
|
160
|
+
├─ YES → dbo clone
|
|
161
|
+
│ Pulls all records for the app, writes .metadata.json + companion
|
|
162
|
+
│ content files, and moves any local records deleted server-side to trash/.
|
|
163
|
+
│
|
|
164
|
+
└─ NO → Already have local files, just want to refresh a specific record or entity?
|
|
165
|
+
│
|
|
166
|
+
├─ Specific file/UID → dbo pull <file> or dbo pull <uid>
|
|
167
|
+
│ (also use after REST API insert to create local files)
|
|
168
|
+
│
|
|
169
|
+
└─ All records for an entity → dbo pull -e <entity>
|
|
170
|
+
or just: dbo pull (entire app)
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
> **What `.metadata.json` represents**: each `.metadata.json` is a snapshot of the server record at last sync — column values, UIDs, `_CreatedOn`, `_LastUpdated`, and `@reference` pointers to companion content files. It is the local source of truth for push/diff operations, not an independent copy. If local metadata diverges from the server (another user edited the record), `dbo push` will detect the conflict via `_LastUpdated` comparison.
|
|
174
|
+
|
|
175
|
+
### "Update / Edit `<file>`" — decision tree
|
|
176
|
+
|
|
177
|
+
When a user says **"edit `<file>`"**, **"update `<file>`"**, **"change `<column>` on `<record>`"**, or **"modify `<file>`"**, they are in the UPDATE step of CRUD.
|
|
178
|
+
|
|
179
|
+
#### File given (local edit + push)
|
|
180
|
+
|
|
181
|
+
This is the standard path. Make changes locally, then push:
|
|
182
|
+
|
|
183
|
+
1. **Edit the companion content file** — modify the file itself (e.g. `docs/readme.md`, `lib/bins/app/app.js`)
|
|
184
|
+
2. **Edit the `.metadata.json`** — update any column values that should change (e.g. `Name`, `Status`, `Type`). Valid columns for each entity are listed in `.app/<appname>.metadata_schema.json`. Do not modify `_CreatedOn`, `_LastUpdated`, `UID`, or `ID` — these are server-managed.
|
|
185
|
+
3. **Push**:
|
|
186
|
+
```bash
|
|
187
|
+
dbo push <file> [--ticket <id>]
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
> Only modify the fields that need to change. Leave all other columns in `.metadata.json` as-is — push sends a diff, not a full replace.
|
|
191
|
+
|
|
192
|
+
> If you only need to update content (not column values), you can skip editing `.metadata.json` and push the content file directly. If you only need to update column values (not content), edit `.metadata.json` and use `--meta-only`:
|
|
193
|
+
> ```bash
|
|
194
|
+
> dbo push <file> --meta-only [--ticket <id>]
|
|
195
|
+
> ```
|
|
196
|
+
|
|
197
|
+
#### No file given (server-side edit via REST)
|
|
198
|
+
|
|
199
|
+
When editing column values only and no local file needs to change, use the REST API directly:
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
# Update a specific record
|
|
203
|
+
POST /api/input/submit
|
|
204
|
+
RowID:<rowId>;column:<entity>.<column>=<value>
|
|
205
|
+
RowID:<rowId>;column:<entity>.<column>=<value>
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Always follow with a pull to keep local files in sync:
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
dbo pull <uid> # sync a single record
|
|
212
|
+
# or
|
|
213
|
+
dbo pull # sync all (if multiple records changed)
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
> **Never** skip the `dbo pull` after a REST update — the local `.metadata.json` will be stale and the next `dbo push` may overwrite the server change with old values.
|
|
217
|
+
|
|
218
|
+
### "Remove / Delete `<file>`" — decision tree
|
|
219
|
+
|
|
220
|
+
When a user says **"delete `<file>`"**, **"remove `<record>`"**, **"rm `<file>`"**, or **"drop `<record>`"**, they are in the DELETE step of CRUD.
|
|
221
|
+
|
|
222
|
+
#### File given (local + server delete)
|
|
223
|
+
|
|
224
|
+
This is the standard path. The CLI stages the deletion and renames local files before the server is touched:
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
dbo rm <file> [--ticket <id>]
|
|
228
|
+
dbo push [--ticket <id>]
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
What `dbo rm` does:
|
|
232
|
+
1. Reads the companion `.metadata.json` to identify the entity and row ID
|
|
233
|
+
2. Stages the delete expression in `.dbo/synchronize.json`
|
|
234
|
+
3. Removes the record from `app.json`
|
|
235
|
+
4. Renames local files to `__WILL_DELETE__<filename>` (default) so they are excluded from future operations but not immediately gone
|
|
236
|
+
- `--hard` — immediately deletes local files instead of renaming
|
|
237
|
+
- `--keep-local` — only stages the server deletion; leaves local files untouched
|
|
238
|
+
|
|
239
|
+
`dbo push` then sends the staged delete to the server and removes the `__WILL_DELETE__` files.
|
|
240
|
+
|
|
241
|
+
#### No file given (server-side delete via REST)
|
|
242
|
+
|
|
243
|
+
When deleting a record that has no local representation, use the REST API:
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
POST /api/input/submit
|
|
247
|
+
RowID:del<rowId>;entity:<entity>=true
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
Follow with a pull to confirm local state is consistent — though if the record had local files, `dbo pull` will **not** remove them (see note below):
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
dbo pull -e <entity> # re-sync the entity (does not delete local orphans)
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
For local orphaned files after a server-side delete, run `dbo rm <file>` without the subsequent `dbo push` (the server record is already gone) — or use `--keep-local` to skip local file changes and only update `synchronize.json`.
|
|
257
|
+
|
|
258
|
+
> **Server-side deletions and local sync**: `dbo clone` and `dbo pull` handle server-side deletions in two ways:
|
|
259
|
+
>
|
|
260
|
+
> 1. **Explicit `deleted` list** — when the server response includes a `deleted` map (keyed by entity, each containing `UID`, `Name`, and `AssetLastUpdated`), matching local files are automatically moved to `trash/`. This is the authoritative path and works correctly in delta/pull mode.
|
|
261
|
+
> 2. **UID diff fallback** — after processing the deleted list, clone compares all remaining local UIDs against all server UIDs. Any local record whose UID is absent from the server (and not already staged in `synchronize.json`) is also moved to `trash/`.
|
|
262
|
+
>
|
|
263
|
+
> In both cases the files are moved to `trash/` — not permanently deleted. For records that have no local files at all, nothing happens. If you need to force-clean a local orphan that neither path caught, run `dbo rm <file>` manually.
|
|
264
|
+
|
|
67
265
|
---
|
|
68
266
|
|
|
69
267
|
## Upgrading
|
|
@@ -156,9 +354,7 @@ my-project/
|
|
|
156
354
|
├── test/ # Project-level tests
|
|
157
355
|
├── trash/ # Staged soft-deleted files from dbo rm
|
|
158
356
|
├── docs/ # Project documentation and docs entities
|
|
159
|
-
├── manifest.json # PWA web app manifest (
|
|
160
|
-
├── CLAUDE.md # Claude Code instructions (root content file — server-tracked)
|
|
161
|
-
├── README.md # Project readme (root content file — server-tracked)
|
|
357
|
+
├── manifest.json # PWA web app manifest (auto-generated from app metadata)
|
|
162
358
|
├── .gitignore # Tells Git to ignore files in the repo sync
|
|
163
359
|
├── .dboignore # Tells dbo cli to ignore files in commands
|
|
164
360
|
├── package.json # Metadata, scripts, and dependency list
|
|
@@ -247,7 +443,6 @@ Use `dbo status` to see how many pending migrations exist.
|
|
|
247
443
|
| `TicketSuggestionOutput` | string | Output UID for ticket suggestions (auto-set during init, default `ojaie9t3o0kfvliahnuuda`) |
|
|
248
444
|
| `cloneSource` | `"default"` \| file path \| URL | Where the last `dbo clone` fetched app JSON from. `"default"` = server fetch via `AppShortName`; any other value = the explicit local file path or URL used. Set automatically after each successful clone. |
|
|
249
445
|
| `ContentPlacement` | `bin` \| `path` | Where to place content files during clone (default: `bin`) |
|
|
250
|
-
| `UserMedia` | `true` \| `false` | Whether to download user media (`/media/<app>/user/...`) during clone. Set on first clone via prompt (or `false` in non-interactive mode). |
|
|
251
446
|
| `<Entity>FilenameCol` | column name | Filename column for entity-dir records (e.g., `ExtensionFilenameCol`) |
|
|
252
447
|
| `dependencies` | string[] | Array of app short-names to auto-clone as read-only local checkouts. Default: `["_system"]` |
|
|
253
448
|
| `dependencyLastUpdated` | object | Map of dependency short-name to last-cloned `_LastUpdated` ISO string |
|
|
@@ -290,49 +485,20 @@ Clone of the original app JSON from the server with entity entries replaced by `
|
|
|
290
485
|
|
|
291
486
|
The `_domain` field in the app metadata file stores the project's reference domain (set during `dbo clone`). This is committed to git and used for domain-change detection when running `dbo init --force` or `dbo clone --domain`. It provides a stable cross-user baseline — all collaborators share the same reference domain.
|
|
292
487
|
|
|
293
|
-
####
|
|
294
|
-
|
|
295
|
-
Certain files live at the **project root** (not inside `lib/`) but are still tracked and synced to the server as `content` entities. Their metadata companions live in `lib/bins/app/` with a root-relative `@/` reference (`Content: "@/manifest.json"`).
|
|
296
|
-
|
|
297
|
-
| File | Server entity | Public | Description |
|
|
298
|
-
|------|--------------|--------|-------------|
|
|
299
|
-
| `manifest.json` | content | Yes | [PWA web app manifest](https://developer.mozilla.org/en-US/docs/Web/Manifest) |
|
|
300
|
-
| `CLAUDE.md` | content | No | Claude Code project instructions |
|
|
301
|
-
| `README.md` | content | Yes | Project readme |
|
|
302
|
-
| `package.json` | content | No | Node.js package metadata and scripts |
|
|
303
|
-
| `.dboignore` | content | No | DBO CLI ignore patterns |
|
|
304
|
-
| `.gitignore` | content | No | Git ignore patterns |
|
|
305
|
-
|
|
306
|
-
**`dbo clone`** writes all six to the project root. If the server has no record for a file, a stub is generated automatically (`manifest.json` from app metadata, `CLAUDE.md` and `README.md` from app name/description, `package.json` as a minimal stub). Matching works regardless of the server record's `BinID`: records are matched by name, `@`-reference, or `Path`, then relocated to the root — whether they live in `lib/bins/app/`, another bin, or have `BinID=null`. Records with `BinID=null` that aren't in the configured list are also promoted to the project root automatically.
|
|
307
|
-
|
|
308
|
-
**`dbo push`** auto-creates the companion metadata in `lib/bins/app/` for any listed root file that exists locally but has no tracked metadata yet — no manual `dbo adopt` needed before the first push.
|
|
309
|
-
|
|
310
|
-
**`dbo adopt <filename>`** called from the project root also works for any root content file: it bypasses the `.dboignore` check and entity inference, and writes the metadata directly to `lib/bins/app/`.
|
|
488
|
+
#### `manifest.json`
|
|
311
489
|
|
|
312
|
-
|
|
490
|
+
A [PWA web app manifest](https://developer.mozilla.org/en-US/docs/Web/Manifest) auto-generated during scaffolding (`dbo init` or `dbo clone`). Values are derived from `app.json` when available:
|
|
313
491
|
|
|
314
492
|
| Field | Source |
|
|
315
493
|
|-------|--------|
|
|
316
|
-
| `name` |
|
|
494
|
+
| `name` | `<AppName> \| <domain>` |
|
|
317
495
|
| `short_name` | `AppShortName` |
|
|
318
496
|
| `description` | `App.Description` |
|
|
319
497
|
| `start_url` / `scope` | `/app/<ShortName>/ui/` |
|
|
320
|
-
| `background_color` | Extracted from the `widget` extension matching `ShortName` (field `String4`), defaults to `#ffffff` |
|
|
498
|
+
| `background_color` | Extracted from the `widget` extension matching the app's `ShortName` (field `String4`), defaults to `#ffffff` |
|
|
321
499
|
| `theme_color` | `#000000` |
|
|
322
500
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
The list of root content files is stored in `.app/config.json` under `rootContentFiles`:
|
|
326
|
-
|
|
327
|
-
```json
|
|
328
|
-
{
|
|
329
|
-
"rootContentFiles": ["CLAUDE.md", "README.md", "manifest.json", "package.json", ".dboignore", ".gitignore"]
|
|
330
|
-
}
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
- **Absent**: defaults are written on the first `dbo push` — `["CLAUDE.md", "README.md", "manifest.json", "package.json", ".dboignore", ".gitignore"]`
|
|
334
|
-
- **`[]`, `false`, or `null`**: feature disabled — no root content files are auto-managed
|
|
335
|
-
- **Custom list**: any filename can be added; metadata is derived from the file extension
|
|
501
|
+
The file is only created if absent — it is never overwritten by subsequent clones, so local edits (icons, screenshots, display overrides) are preserved. A companion `manifest.metadata.json` is auto-created by `dbo push` if missing, allowing the manifest to be pushed to the server as a content record.
|
|
336
502
|
|
|
337
503
|
### `.dboignore`
|
|
338
504
|
|
|
@@ -493,11 +659,11 @@ The project's reference domain is stored in `.app/<shortName>.metadata.json._dom
|
|
|
493
659
|
6. **Creates directories** — processes `children.bin` to build the directory hierarchy based on `ParentBinID` relationships
|
|
494
660
|
7. **Saves `.app/directories.json`** — maps BinIDs to directory paths for file placement
|
|
495
661
|
8. **Writes content files** — decodes base64 content, creates `*.metadata.json` + content files in the correct bin directory. Filename columns and companion file extraction preferences are auto-applied with sensible defaults on first clone (use `--configure` to re-prompt)
|
|
496
|
-
9. **Downloads media files** —
|
|
662
|
+
9. **Downloads media files** — fetches binary files (images, CSS, fonts) from the server using a fallback chain: `FullPath` directly (`/media/{app}/{path}`) → `/dir/` route → `/api/media/{uid}`, and saves with metadata. 404 errors create stale metadata to prevent re-prompting. Errors are logged to `.app/errors.log`
|
|
497
663
|
10. **Processes entity-dir records** — entities matching project directories (`extension`, `app_version`, `data_source`, `entity`, `site`, `group`, `integration`, `automation`) are saved as `.metadata.json` files in their corresponding directory. Note: `entity` (table definitions) shares `lib/data_source/` with `data_source` records rather than using a separate directory
|
|
498
664
|
11. **Processes other entities** — remaining entities with a `BinID` are placed in the corresponding bin directory
|
|
499
665
|
12. **Saves `.app/<shortName>.metadata.json`** — clone of the original JSON with processed entries replaced by `@path/to/*.metadata.json` references
|
|
500
|
-
13. **Orphan cleanup** —
|
|
666
|
+
13. **Orphan cleanup** — server-deleted records are moved to `trash/` in two passes: first via the explicit `deleted` map in the server response (authoritative; works in delta/pull mode), then via a full UID diff of all local `.metadata.json` files against the server response (fallback for anything not in the deleted list). Companion content and media files are moved alongside their metadata. Skipped during `--entity-filter` clones
|
|
501
667
|
|
|
502
668
|
#### Clone source tracking
|
|
503
669
|
|
|
@@ -559,24 +725,6 @@ This helps keep your app clean by removing database records for media files that
|
|
|
559
725
|
|
|
560
726
|
In non-interactive mode (`-y`), stale cleanup is skipped (conservative default).
|
|
561
727
|
|
|
562
|
-
#### Media scope filtering
|
|
563
|
-
|
|
564
|
-
During `dbo clone`, media records are classified by their `FullPath` relative to the app short name:
|
|
565
|
-
|
|
566
|
-
| Scope | Path pattern | Behavior |
|
|
567
|
-
|-------|-------------|----------|
|
|
568
|
-
| `app` | `/media/<app>/app/...` or no `FullPath` | Always downloaded |
|
|
569
|
-
| `user` | `/media/<app>/user/...` | Downloaded only if `UserMedia=true` in `.app/config.json` |
|
|
570
|
-
| `foreign` | `/media/<other_app>/...` | Never downloaded — stale metadata written to prevent re-prompts |
|
|
571
|
-
|
|
572
|
-
On the first clone with user media present, you'll be prompted once:
|
|
573
|
-
|
|
574
|
-
```
|
|
575
|
-
App has 14 user media file(s) (e.g. "avatar.jpg"). Download user media? (saves preference)
|
|
576
|
-
```
|
|
577
|
-
|
|
578
|
-
The answer is saved as `UserMedia` in `.app/config.json` and reused on subsequent clones. In non-interactive mode (`-y`), user media defaults to skipped (`UserMedia=false`).
|
|
579
|
-
|
|
580
728
|
#### Path resolution
|
|
581
729
|
|
|
582
730
|
When a content record has both `Path` and `BinID`, the CLI prompts:
|
|
@@ -1594,11 +1742,18 @@ Files matching `.dboignore` patterns are skipped — both in directory mode (`db
|
|
|
1594
1742
|
|
|
1595
1743
|
#### Single file
|
|
1596
1744
|
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1745
|
+
> **Always pass `-e <entity>`.**
|
|
1746
|
+
> Auto-inference via `resolveDirective()` only works when the file's directory path exactly matches a registered directive template. For files in `lib/bins/` (HTML, CSS, JS, SQL), inference commonly fails because `lib/bins/` maps to multiple entity types — the CLI cannot determine whether the file should be `content`, `media`, or another entity without an explicit flag. Omitting `-e` for these files will cause `adopt` to fail with an "entity cannot be inferred" error.
|
|
1747
|
+
>
|
|
1748
|
+
> | File type | Correct `-e` flag |
|
|
1749
|
+
> |-----------|-------------------|
|
|
1750
|
+
> | HTML, CSS, JS, SQL in `lib/bins/` | `-e content` |
|
|
1751
|
+
> | Images, fonts, binaries in `lib/bins/` | `-e media` |
|
|
1752
|
+
> | Files in `lib/extension/` | `-e extension` (or `-e extension.{Column}`) |
|
|
1753
|
+
> | Files in `docs/` | `-e content` |
|
|
1600
1754
|
|
|
1601
|
-
|
|
1755
|
+
```bash
|
|
1756
|
+
# Single file — explicit entity (recommended, always works)
|
|
1602
1757
|
dbo adopt lib/bins/app/assets/css/colors.css -e content
|
|
1603
1758
|
|
|
1604
1759
|
# Extension with explicit column
|
|
@@ -1606,9 +1761,10 @@ dbo adopt lib/extension/widget/button.html -e extension.String5
|
|
|
1606
1761
|
|
|
1607
1762
|
# Skip all confirmation prompts
|
|
1608
1763
|
dbo adopt lib/bins/app/assets/css/colors.css -e content -y
|
|
1609
|
-
```
|
|
1610
1764
|
|
|
1611
|
-
|
|
1765
|
+
# Single file — entity inferred from directory (only works for exact directive matches)
|
|
1766
|
+
dbo adopt lib/bins/app/assets/css/colors.css
|
|
1767
|
+
```
|
|
1612
1768
|
|
|
1613
1769
|
#### Attach to existing record (`--into`)
|
|
1614
1770
|
|
|
@@ -1791,6 +1947,20 @@ Stores ticket IDs for automatic application during submissions:
|
|
|
1791
1947
|
- `records` — Per-record tickets (auto-cleared after successful submission)
|
|
1792
1948
|
- `--ticket` flag always takes precedence over stored tickets
|
|
1793
1949
|
|
|
1950
|
+
#### Commands that accept `--ticket`
|
|
1951
|
+
|
|
1952
|
+
The `--ticket <id>` flag is available on all submission commands:
|
|
1953
|
+
|
|
1954
|
+
| Command | Flag effect |
|
|
1955
|
+
|---------|-------------|
|
|
1956
|
+
| `dbo push [path]` | Attaches ticket ID to all records pushed in this invocation |
|
|
1957
|
+
| `dbo add` | Attaches ticket ID to the new record being created |
|
|
1958
|
+
| `dbo content deploy <uid> <file>` | Attaches ticket ID to the content deploy submission |
|
|
1959
|
+
| `dbo deploy <target>` | Attaches ticket ID to the deploy submission |
|
|
1960
|
+
| `dbo input -d <expr>` | Passes `_OverrideTicketID` directly to `/api/input/submit` |
|
|
1961
|
+
|
|
1962
|
+
When `--ticket` is provided it bypasses both the stored ticket prompt and any interactive ticket prompt on server error.
|
|
1963
|
+
|
|
1794
1964
|
#### ModifyKey protection (locked/production apps)
|
|
1795
1965
|
|
|
1796
1966
|
When an app has a `ModifyKey` set (production/locked mode), the CLI guards all submission commands (`push`, `input`, `add`, `content deploy`, `deploy`) with an interactive prompt:
|