Review docs/api.md and docs/llm_posting_helper.md for accuracy and completeness

Same pass as the SKILL.md review. Fixed factually-wrong content and filled
gaps against the current code.

docs/api.md:
- Capabilities example response was stale: artifact_kinds missing json/csv,
  raw_supported_for missing json/csv. Corrected to match live output, with
  a note that the endpoint is the authoritative source.
- "Office document conversion is not implemented" is now false - replaced
  with the accurate scope (.xlsx -> csv only; .docx/.pptx/.xls not).
- Source Fields overview table omitted source_prompt entirely; added it,
  plus a note that source_name/source_id/source_prompt must be strings
  (400, not coerced) and metadata must be an object.
- Kinds table: noted tables now render styled in markdown/html_fragment,
  and made explicit that html_full is served verbatim with no styling.
- MVP constraints: noted the public-share-link exception to "feeds private
  per user" and clarified PATCH edits metadata only.

docs/llm_posting_helper.md:
- Added .xlsx upload, --upload-image image embedding, a Source & Theme
  Flags table (all six source-*/theme flags were undocumented here), and a
  note that --meta/--meta-json merge and are distinct from tags.
- Added a scope note that the helper only creates - update/delete need the
  API, sharing is feed-UI-only.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
peter 2026-09-02 16:49:19 +01:00
parent d2d970f33d
commit c9edac62cf
2 changed files with 54 additions and 8 deletions

View file

@ -28,9 +28,9 @@ Currently supported kinds:
| Kind | Upload type | Rendered behavior | Raw support | | Kind | Upload type | Rendered behavior | Raw support |
|---|---|---|---| |---|---|---|---|
| `html_fragment` | JSON text | Wrapped with a Daybook theme | No | | `html_fragment` | JSON text | Wrapped with a Daybook theme; tables styled automatically | No |
| `html_full` | JSON text | Stored as complete HTML | Yes | | `html_full` | JSON text | Stored as complete HTML, verbatim — no theme or styling injected | Yes |
| `markdown` | JSON text | Rendered to HTML (fenced code blocks get syntax highlighting) and original `.md` is preserved | Yes | | `markdown` | JSON text | Rendered to HTML (code blocks syntax-highlighted, tables styled) and original `.md` preserved | Yes |
| `deck` | JSON text | Wrapped as a simple HTML slide/deck page | No | | `deck` | JSON text | Wrapped as a simple HTML slide/deck page | No |
| `image` | Multipart file | Browser image preview | No | | `image` | Multipart file | Browser image preview | No |
| `pdf` | Multipart file | Browser PDF preview | No | | `pdf` | Multipart file | Browser PDF preview | No |
@ -57,8 +57,13 @@ as coloured chips next to the title. The API exposes both separately, plus a com
| `source_type` | No | `agent` | One of `agent`, `person`, `system`. | | `source_type` | No | `agent` | One of `agent`, `person`, `system`. |
| `source_name` | No | `source` | Human-readable source name. | | `source_name` | No | `source` | Human-readable source name. |
| `source_id` | No | Empty string | Stable external agent/person/system ID. | | `source_id` | No | Empty string | Stable external agent/person/system ID. |
| `source_prompt` | No | Empty string | The prompt/instruction that produced the artifact. |
| `metadata` | No | `{}` | Free-form object for model/run/tool metadata. | | `metadata` | No | `{}` | Free-form object for model/run/tool metadata. |
`source_name`, `source_id`, and `source_prompt` must be strings if provided
— sending an object, array, or number returns `400` (they are not coerced).
`metadata` must be an object. See "Create Text Artifact" for length limits.
Example source metadata: Example source metadata:
```json ```json
@ -498,10 +503,10 @@ Example response:
```json ```json
{ {
"artifact_kinds": ["html_fragment", "html_full", "markdown", "deck", "image", "pdf", "binary"], "artifact_kinds": ["html_fragment", "html_full", "markdown", "deck", "image", "pdf", "binary", "json", "csv"],
"filters": ["source", "label", "day", "kind", "q"], "filters": ["source", "label", "day", "kind", "q"],
"views": ["rendered", "raw"], "views": ["rendered", "raw"],
"raw_supported_for": ["markdown", "html_full"], "raw_supported_for": ["markdown", "html_full", "json", "csv"],
"source_types": ["agent", "person", "system"], "source_types": ["agent", "person", "system"],
"auth": "bearer_token", "auth": "bearer_token",
"methods": { "methods": {
@ -512,6 +517,9 @@ Example response:
} }
``` ```
This is generated from the server's actual configuration, so it's the
authoritative source if this document and a running instance ever disagree.
Agents should call this endpoint if they need to adapt to the current Daybook instance, or Agents should call this endpoint if they need to adapt to the current Daybook instance, or
simply to check the instance is reachable and their token is valid. Unlike the other read simply to check the instance is reachable and their token is valid. Unlike the other read
endpoints, it accepts a bearer token as well as a browser session: endpoints, it accepts a bearer token as well as a browser session:
@ -523,8 +531,11 @@ curl -H "Authorization: Bearer <your-personal-token>" http://127.0.0.1:8001/api/
## Current MVP Constraints ## Current MVP Constraints
- Each user has a personal ingest API token; there is no shared token. - Each user has a personal ingest API token; there is no shared token.
- Reader/browser access requires login; feeds are private per user. - Reader/browser access requires login; feeds are private per user (except
- Content modification/revisions are deferred. per-artifact public share links — see Sharing above).
- Office document conversion is not implemented. - Content modification/revisions are deferred (`PATCH` edits metadata only,
never `content`).
- Spreadsheet conversion covers `.xlsx` → `csv` only; other Office formats
(`.docx`, `.pptx`, legacy `.xls`) are not converted.
- Manual browser upload/drag-and-drop is deferred. - Manual browser upload/drag-and-drop is deferred.
- Pagination/cursors are not implemented yet. - Pagination/cursors are not implemented yet.

View file

@ -6,6 +6,11 @@ The project also keeps `scripts/daybook_post.py` as a compatibility wrapper.
The helper is intentionally zero-dependency and uses only Python's standard library. It works on Windows and Linux. The helper is intentionally zero-dependency and uses only Python's standard library. It works on Windows and Linux.
It only **creates** artifacts. Updating (title/tags/metadata) and deleting
require the raw API (`PATCH`/`DELETE /api/artifacts/{id}`, see `docs/api.md`);
enabling a public share link is done from the feed UI and has no API or CLI
path yet.
## Configuration ## Configuration
Set these as real process/shell environment variables — the helper reads Set these as real process/shell environment variables — the helper reads
@ -64,6 +69,13 @@ python skills/daybook-posting/scripts/daybook_post.py results.csv
python skills/daybook-posting/scripts/daybook_post.py --kind json --title "Run Summary" --content-file summary.json python skills/daybook-posting/scripts/daybook_post.py --kind json --title "Run Summary" --content-file summary.json
``` ```
Post an `.xlsx` spreadsheet (converted server-side to a `csv` artifact —
active sheet only, saved formula results only, no formatting preserved):
```bash
python skills/daybook-posting/scripts/daybook_post.py balance_sheet.xlsx
```
Render other code as a Markdown fenced block instead (no dedicated `code` Render other code as a Markdown fenced block instead (no dedicated `code`
kind yet): kind yet):
@ -71,6 +83,14 @@ kind yet):
python skills/daybook-posting/scripts/daybook_post.py --file script.py --as-markdown --title "Generated Script" python skills/daybook-posting/scripts/daybook_post.py --file script.py --as-markdown --title "Generated Script"
``` ```
Embed an image inside a markdown/HTML artifact (upload first, then
reference the printed URL in your content):
```bash
python skills/daybook-posting/scripts/daybook_post.py --upload-image chart.png
# -> prints .../assets/<id>; put that in your markdown, then post normally
```
Dry run: Dry run:
```bash ```bash
@ -112,6 +132,21 @@ Or pass a JSON object:
python skills/daybook-posting/scripts/daybook_post.py --kind markdown --title "Run Summary" --content-file summary.md --meta-json '{"run_id":"run-001"}' python skills/daybook-posting/scripts/daybook_post.py --kind markdown --title "Run Summary" --content-file summary.md --meta-json '{"run_id":"run-001"}'
``` ```
`--meta` and `--meta-json` are merged if both are given. Metadata lives in
the artifact's `metadata` field, separate from `--tags` (which are for
filtering).
## Source & Theme Flags
| Flag | Default | Notes |
|---|---|---|
| `--source` | `DAYBOOK_SOURCE` env, else `agent` | What produced this — an agent-profile, script, or person name. |
| `--source-type` | `agent` | One of `agent`, `person`, `system`. |
| `--source-name` | The effective `--source` | Human-readable name, e.g. "Hermes Agent". |
| `--source-id` | Empty | A stable external ID, if one exists. |
| `--source-prompt` | Empty | The prompt/instruction behind the artifact. |
| `--theme` | Kind default | `markdown`/`html_fragment` only: `report` (default), `tasks`, or `base`. Other kinds ignore it. |
## Skill Wrapper ## Skill Wrapper
A thin LLM-facing wrapper lives at: A thin LLM-facing wrapper lives at: