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 +52 -0
- package/README.md +6 -1
- package/dist/cli.js +6012 -0
- package/dist/index.js +4 -5919
- package/dist/lib/media-lines.js +36 -0
- package/dist/lib/output.js +99 -0
- package/dist/lib/page.js +1 -1
- package/dist/lib/press.js +72 -0
- package/package.json +1 -1
- package/templates/starter/flows/tools/browse.flow.yaml +31 -31
- package/templates/starter/flows/tools/browse.locale.ar.yaml +6 -6
- package/templates/starter/manifest.yaml +65 -65
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`. |
|