@bentoai/cli 0.0.0-stage → 1.1.0

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.
@@ -0,0 +1,25 @@
1
+ # Third-party notice: Syncthing
2
+
3
+ `bento sync` runs **Syncthing**, the file-transfer engine, as an unmodified,
4
+ stock, official binary. Syncthing is not forked, patched, or statically linked
5
+ into bento — the pinned per-arch binaries ship in separate npm
6
+ `optionalDependencies` platform packages and are executed as a child process.
7
+
8
+ - Project: Syncthing — https://syncthing.net
9
+ - Source: https://github.com/syncthing/syncthing
10
+ - Pinned release: **v2.1.2** (must match the VM image pin in
11
+ `packages/vm-image`; see `src/sync/binary.ts` `SYNCTHING_PIN`)
12
+ - License: **Mozilla Public License 2.0 (MPL-2.0)** —
13
+ https://github.com/syncthing/syncthing/blob/main/LICENSE
14
+
15
+ The macOS binaries bento bundles are the upstream Developer-ID signed and
16
+ notarized releases, sha256-verified on resolve against the values recorded from
17
+ the official signed `sha256sum.txt.asc` for v2.1.2:
18
+
19
+ | Platform | Archive sha256 | Binary sha256 |
20
+ | ----------- | ------------------------------------------------------------------ | ------------------------------------------------------------------ |
21
+ | macOS arm64 | `fa2002f320170b64f226ff65831ccec516b59d7bba365acb51731dd079e52d1a` | `0325655f864024e0eecd78df07bdedbad46cefc91f480503ff615b6211081869` |
22
+ | macOS x64 | `f04b3d7f1492457e929119b91561f0ddc6bada070f46b68bd2464cda04983424` | `24cd4219041087bf67a2773fe0aa8ad976b8e579b4768c31df365a58058f1743` |
23
+
24
+ Under MPL-2.0, the corresponding source is available at the URL above. This
25
+ notice is distributed with the bento package.
package/README.md CHANGED
@@ -1,3 +1,111 @@
1
- # Temporary Holding Version
1
+ # Bento CLI
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ This workspace composes the bento command: local agent work, terminal UI, and
4
+ workspace/file/sync operations under one login. The npm
5
+ identity remains @bentoai/cli.
6
+
7
+ Copyright (c) 2026 dzhng, LLC. Licensed under
8
+ [AGPL-3.0-only](LICENSE); bundled dependencies retain their licenses and notices.
9
+
10
+ External agents use the [consumer skill](../../skills/bento/SKILL.md) to
11
+ install and operate the released command from their own computer. The root
12
+ [agent setup](../../README.md#agent-setup) owns skill installation.
13
+
14
+ Install Bun 1.3.14 and Node 22 or newer before installing the public command:
15
+
16
+ ```sh
17
+ npm install -g @bentoai/cli
18
+ bento login
19
+ ```
20
+
21
+ The command runs on Bun; npm supplies the external package. `bento login` saves
22
+ one human credential for workspace commands and Mac sync. Use `bento workspace
23
+ use <slug>` to choose a default workspace and `bento --help` for the command surface.
24
+
25
+ Harness runtime and protocol ownership belong to the private
26
+ [agent workspace](../agent/README.md). The CLI consumes that owner directly;
27
+ it owns dispatch and user configuration. Local memory and training remain
28
+ local unless --workspace explicitly selects a remote operation. A saved default
29
+ selects remote operation targets and model billing; it never changes execution
30
+ mode. Explicit file addresses and workspace flags must agree.
31
+
32
+ The [HTML tool factory](src/cli/html-render-tools.ts) is a hosted composition
33
+ boundary: it consumes gateway/session context and the contract's shared schema,
34
+ while the gateway owns rendering and publication. It adds no terminal command.
35
+
36
+ Named API operations consume the shared [customer bindings](../contract/src/endpoints/customer-bindings.ts).
37
+ Their help derives from those bindings. Complete body input comes from a file
38
+ or stdin; query and declared header inputs stay separate. JSON results retain
39
+ API fields on stdout, while HTTP status and headers are NDJSON metadata on stderr.
40
+ Named binary writes stream a local file with `--in`, or stdin with `--in -`.
41
+ CLI JSON body files also accept the shared
42
+ [binary request representations](../contract/README.md#customer-adapter-representations)
43
+ for arbitrary bytes. Declared content type and conditional headers are retained.
44
+ Empty conditional/optional reads preserve HTTP metadata without replacing a
45
+ local destination. Binary reads use the existing `src/file-transfers.ts` streaming owner for stdout
46
+ or a local destination. With `--json`, failures retain the complete upstream body
47
+ inside `apiError`; a non-scope refusal keeps its own code. Local file handling and process exit codes remain CLI-owned.
48
+
49
+ [Service calls](src/commands/services.ts) use named vendor operations rather than
50
+ an arbitrary Bento REST caller. The API retains route admission, vendor
51
+ credentials, funding and accounting. Calls preserve repeated query/form values,
52
+ complete JSON and raw bytes; HTTP status and all returned headers go to stderr.
53
+ An output file can contain a vendor refusal, so callers must retain the exit
54
+ status and metadata. Installed help owns the input flags.
55
+
56
+ Named `model` operations use the gateway's separate origin and existing billing
57
+ workspace. Their complete native bodies, protocol choices and headers are
58
+ advertised by command help; the gateway owns admission and exact model IDs.
59
+ Native streams require a protocol ending. Media bytes use ordinary local files,
60
+ and machine results retain surrounding native metadata. A delivery failure keeps
61
+ that result and any successfully saved files on stdout, and exits nonzero.
62
+ With `--json`, stderr includes indexed delivery errors. Generation is never
63
+ repeated for recovery.
64
+ Detached video receipts and raw status outcomes remain resumable without another
65
+ client job system.
66
+ The prompt convenience and native commands share SDK media and output owners.
67
+
68
+ Remote conversations use durable input outcomes from the shared
69
+ [session contract](../contract/README.md). Submission writes its recovery request
70
+ identity to stderr before HTTP, then returns a terminal result or resumable handle.
71
+ A pending result does not cancel work; result/wait only observe that input.
72
+ Exit 0 means successful completion, 1 means failed/cancelled, and 2 requires
73
+ inspecting the body. Re-wait only on `status: "pending"`. A terminal `ask` needs
74
+ an answer with a new input handle; other terminal outcomes, including `sleep`
75
+ and `interrupted`, remain final for their handle. Transport closure cannot
76
+ establish completion.
77
+
78
+ `bento app credentials` manages external runtime keys for an already registered
79
+ app using the same saved human login or process-provided VM key. Workspace and
80
+ app selections are explicit. Export returns the complete API response on stdout, including the one-time
81
+ plaintext key and deployment URLs; HTTP metadata goes to stderr. Capture the
82
+ key in memory and pass it through stdin to the host's server-side secret store.
83
+ The command never saves exported keys or retries an ambiguous mint. Inspect the
84
+ live inventory and revoke unwanted entries before explicitly exporting again.
85
+ Rotation uses a second export, host deployment and verification, then revocation
86
+ of the prior credential. `bento app credentials --help` owns the command surface.
87
+
88
+ The local `.duet` directory remains the persisted state boundary for existing logins, memory, training, sync identities, and VM compatibility. Bento reads those bytes in place so an upgrade does not migrate or rewrite established state.
89
+
90
+ The saved human login and default API/workspace live in config.json. Other
91
+ provider keys remain in provider env files, and connected subscriptions keep
92
+ their own store. Login approval identifies the person; access follows current
93
+ workspace memberships. Mac mirroring has its own non-secret machine identity,
94
+ so removing a Mac does not revoke the login.
95
+
96
+ Both repository and public builds keep native packages external through
97
+ `scripts/native-packages.ts`, preserving their import-relative assets. Public
98
+ packaging also inlines private workspace code and preserves the Pi patch. npm is an external distribution channel. VM commands use the
99
+ managed runtime release, including interactive shell invocation.
100
+
101
+ Use the package scripts for builds, checks and focused disposable-container
102
+ tests. This CLI remains Bun-native. The root lockfile owns dependencies, and
103
+ the root repository owns publication and VM release delivery. Actual publication
104
+ refuses until every pinned optional native package exists in the registry.
105
+ Stage those payloads with `scripts/stage-syncthing-packages.ts` and publish the
106
+ platform packages before the CLI. After a verified CLI release, the publication
107
+ workflow deprecates the old npm package with the new installation instructions;
108
+ existing `.duet` state stays in place.
109
+
110
+ [Mac sync](src/sync/README.md) keeps one computer identity across separate
111
+ workspace transfer instances, with account removal independent of user login.