octwin-cli 0.8.13 → 0.8.15

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/CHANGELOG.md CHANGED
@@ -7,6 +7,58 @@ repo root [`CHANGELOG.md`](../../CHANGELOG.md); this file is the CLI-only cut th
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.8.15] - 2026-10-06
11
+
12
+ ### Fixed
13
+ - **`octwin records` said nothing useful for a pack with no record types of its own.** Its message read
14
+ `has_xrm`, which the platform never sent, so it could not show. The platform sends it now; the CLI
15
+ says the pack declares no record types and that platform records still read by name
16
+ (`octwin records order | product | case`). `records create` and `records tasks` read `has_data` —
17
+ "no AI Agent is loaded in this project" — instead of the same unsent field.
18
+
19
+ ## [0.8.14] - 2026-10-06
20
+
21
+ ### Added
22
+ - **`octwin seed --reset`** — archive every row the pack's demo loaded, then load it again. Needed
23
+ once for demo rows seeded before 2026-10-05 (the seed says so), and a clean slate on demand; records
24
+ a customer made are never touched.
25
+ - **`octwin records <entity> --search "<words>"`** — the entity's ranked search (fuzzy, plus semantic
26
+ when the entity declares it), best match first, each row printed with its score. The platform has
27
+ served it to the console for months; the CLI never asked. `--json` returns the rows with their scores.
28
+ - **`press:<label>` in `octwin chat --script`, and `--press <label>`.** Taps the button of the reply just
29
+ received by its label — exactly, or the same words without emoji or case, or the one label containing
30
+ them. A form or checkout button's tap id carries its run id (`t:resume:…:run_id=…`), which exists only
31
+ once the reply arrives, so a script could not get past the first form step: `tap:` needs an id nobody
32
+ can write in advance. No match, or several buttons, stops the script and lists the buttons. A lone
33
+ `--press` picks from the reply the conversation is waiting on. The rules are the AI Author's `press`,
34
+ byte for byte (`src/lib/press.ts`). An older CLI sends a `press:` line as a typed message.
35
+
36
+ ### Fixed
37
+ - **`octwin chat` prints a card's link buttons and its forms.** A button that opens a link prints as
38
+ `[link] title → url` (a card may now carry links beside its reply buttons), and a form prints as
39
+ `[flow form] …` — it compared the hint type `'flow'`, which the wire never sends (`form_flow`).
40
+ - **`--json` output always parses.** `records --json` and `projects create --json` printed a
41
+ `→ Reading …` line in front of their JSON, and `logs --json` with no conversations printed a sentence
42
+ and no JSON at all (reported 2026-10-01). Under `--json`, stdout now carries the result and nothing
43
+ else — progress, tables and hints go to stderr — and every write verb of a JSON command (`records
44
+ create`, `work note`, `agents set`, `catalog stock`, `scheduling rule add`, `projects rm --yes`, …)
45
+ returns what the platform answered. A test runs every JSON command and parses its stdout.
46
+ - **`octwin chat` prints the pictures, files, voice notes and map pins a reply carries.** Only a reply's
47
+ text and buttons were printed, so a reply that sent a picture read as a caption with nothing under it.
48
+ Now `[image] <path>` (without the signed query), `[file] <name> → <url>`, `[voice note] 12s → <url>`,
49
+ `[location] <name> (lat, long)`, and `(image)` on a carousel card that has a picture
50
+ (`src/lib/media-lines.ts`).
51
+
52
+ ### Changed
53
+ - **`--json` on a command that has no JSON output is refused by name** (`whoami`, `deploy`, `validate`,
54
+ …), with the list of commands that have it. It used to print the prose to stderr and leave stdout
55
+ empty. `chat --json` and `login --json` print one JSON object per line, as before.
56
+ - **Under `--json`, the progress lines move from stdout to stderr.** A script that read them from stdout
57
+ reads them from stderr now; human output (no `--json`) is unchanged.
58
+ - **`octwin pull` can pull an Octwin (first-party) pack.** The platform now lets a workspace read the
59
+ source of its own packs and of Octwin's — never another workspace's — and the 403 hint says so. A
60
+ platform change: an older CLI pulls first-party packs too, it only prints the older hint.
61
+
10
62
  ## [0.8.13] - 2026-09-27
11
63
 
12
64
  ### Added
package/README.md CHANGED
@@ -62,6 +62,11 @@ octwin status # "✓ live and current" once it's warm
62
62
 
63
63
  ## Commands
64
64
 
65
+ **`--json` puts the result on stdout and nothing else.** Progress lines, tables and hints go to stderr,
66
+ so `octwin records lead --json | jq` always parses. A command that prints a stream (`chat`, `login`)
67
+ writes one JSON object per line. `--json` on a command with no JSON output (`deploy`, `whoami`, …) is
68
+ refused by name rather than leaving stdout empty.
69
+
65
70
  | Command | What it does |
66
71
  | --- | --- |
67
72
  | `octwin init <dir>` | Scaffold a new pure-YAML pack into `<dir>` (writes a starter `manifest.yaml`, flow, prompt, `.gitignore` and `README.md` — pack content only). Options: `--id`, `--description`, `--display-name`. |
@@ -73,7 +78,7 @@ octwin status # "✓ live and current" once it's warm
73
78
  | `octwin pull <packId>` | Write a **deployed** pack's source back to disk — the inverse of `deploy`, and how a pack pushed from one machine is recovered. Defaults to the version installed on the target project; `--version` overrides, `--dir` defaults to `./<packId>`, a non-empty dir needs `--force`. You may pull a pack your tenant **owns**. |
74
79
  | `octwin chat "msg"` | Drive a turn through the dev web channel and print **every render with its tap ids**. `--as <handle>` picks the test user; `--tap "<tap-id>"` presses a rendered button/list row; `--json` dumps the raw envelopes. Each reply line says who sent it: plain `← …` is the AI Agent, `← [notify] …` a reminder or notification (never taken for the turn's reply), `← [operator: Name] …` a person in Live chat, `← [platform] …` a handoff line. |
75
80
  | `octwin logs` | List recent conversations (handle, status, last activity; `--as` filters), or show one conversation's full event timeline — including what each turn rendered. `--json` for raw payloads. |
76
- | `octwin records` | Inspect the pack's XRM data (needs a `records:read` token). No args = list entities. Writes (`records:write`): `create`, `patch`, `stage`, `note`, and `archive <id>` / `restore <id>` — there is no delete; archive takes a record (test data too) out of every list and count, and restore brings it back. |
81
+ | `octwin records` | Inspect the pack's XRM data (needs a `records:read` token). No args = list entities. `<entity> --search "<words>"` runs the entity's ranked search (it must declare `search:`) and prints each match's score. Writes (`records:write`): `create`, `patch`, `stage`, `note`, and `archive <id>` / `restore <id>` — there is no delete; archive takes a record (test data too) out of every list and count, and restore brings it back. |
77
82
  | `octwin work` | The work inbox: worked records across queues, one item + its timeline and decisions, or `--queues` for queue keys + open counts. Casework is one shape of it — the command spans every entity a pack works. |
78
83
  | `octwin projects` | The `--project <slug>` values this token can name, with the plan's project cap. `--archived` includes archived ones. A `pack:deploy` token reaches it — it names a project in every other command, so this turns "guess the slug" into "read the list". |
79
84
  | `octwin agents` | The agent roster with each agent's **effective** model / history window and **which layer set it** (project override → platform default → pack manifest) — an operator platform default can override what your manifest declares. `--prompt` prints the exact system prompt the LLM sees. Needs `agents:read`. |