@everfir/az8-cli 0.3.0 → 0.4.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.
- package/CHANGELOG.md +35 -0
- package/README.md +68 -39
- package/RELEASE.md +2 -2
- package/dist/main.js +26060 -25172
- package/package.json +1 -1
- package/skills/az8-cli/SKILL.md +67 -26
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,41 @@ it does not inherit the Web application or monorepo root version.
|
|
|
5
5
|
|
|
6
6
|
## Unreleased
|
|
7
7
|
|
|
8
|
+
## 0.4.0 - 2026-07-24
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Browser-assisted local authentication through `az8 login`, account inspection through
|
|
13
|
+
`az8 whoami`, and local sign-out through `az8 logout`.
|
|
14
|
+
- Environment-isolated local credential storage with atomic writes, restrictive filesystem
|
|
15
|
+
permissions, authenticated account metadata, and automatic persistence of rotated tokens.
|
|
16
|
+
- A standalone Studio authorization page that requires an explicit approve or deny decision and
|
|
17
|
+
never exposes the delivered credential to browser JavaScript.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Capability discovery can select one exact Operation schema with `--operation-name`; Workflow
|
|
22
|
+
Definition discovery always uses compact target counts, target filtering, and opaque cursor
|
|
23
|
+
pagination.
|
|
24
|
+
- The built-in Skill uses focused capability detail and bounded Workflow catalog pages instead of
|
|
25
|
+
loading full catalogs into agent context.
|
|
26
|
+
- Persistent Canvas protocol `1.1` removes selector-free capability detail and full Workflow
|
|
27
|
+
catalog responses. Callers must select one Operation detail and page Workflow summaries.
|
|
28
|
+
- Credential resolution now prefers explicit process and env-file tokens before the local login
|
|
29
|
+
credential, while reporting which non-secret source is active.
|
|
30
|
+
- Daemon Session descriptors retain only the credential source and account identity so logout can
|
|
31
|
+
close affected local-token Sessions without recording a secret.
|
|
32
|
+
- Agent onboarding recommends browser login by default and explains the at-most-once exchange
|
|
33
|
+
failure boundary: an ambiguous exchange must begin a new authorization rather than retry.
|
|
34
|
+
|
|
35
|
+
### Safety and compatibility
|
|
36
|
+
|
|
37
|
+
- Browser authorization uses PKCE, a short-lived user code, explicit CSRF intent, and at-most-once
|
|
38
|
+
token delivery. A consumed exchange is never replayed after a lost response or local save
|
|
39
|
+
failure.
|
|
40
|
+
- `logout` clears only local CLI state; it does not promise server-side revocation. Existing
|
|
41
|
+
environment and env-file provisioning remains supported and is never rewritten by the CLI.
|
|
42
|
+
|
|
8
43
|
## 0.3.0 - 2026-07-23
|
|
9
44
|
|
|
10
45
|
### Added
|
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@ az8 guide
|
|
|
18
18
|
For a supplied release artifact, install the exact immutable tarball instead:
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
|
-
npm install --global ./everfir-az8-cli-0.
|
|
21
|
+
npm install --global ./everfir-az8-cli-0.4.0.tgz
|
|
22
22
|
az8 --version
|
|
23
23
|
```
|
|
24
24
|
|
|
@@ -40,15 +40,30 @@ az8 guide --format json
|
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
The guide teaches discovery; it does not freeze dynamic product schemas. After selecting a Project,
|
|
43
|
-
the agent must query `capabilities.summary
|
|
44
|
-
permissions, input schema, History, completion, and retry
|
|
45
|
-
current account. Workflow Definition queries and
|
|
46
|
-
generation inputs.
|
|
43
|
+
the agent must query `capabilities.summary`, then focused `capabilities.detail --operation-name`
|
|
44
|
+
responses for the effective Operations, permissions, input schema, History, completion, and retry
|
|
45
|
+
semantics of the installed version and current account. Workflow Definition queries and
|
|
46
|
+
`planGeneration` remain authoritative for current generation inputs.
|
|
47
47
|
|
|
48
48
|
## Credentials and environment
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
Use browser authorization for the default local account:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
az8 login --environment test
|
|
54
|
+
az8 whoami --environment test
|
|
55
|
+
az8 logout --environment test
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
`login` opens `studio.az8.studio` or `studio.az8.art`, waits for explicit approval, validates the
|
|
59
|
+
issued account, and stores the credential in the current operating-system user's private AZ8 CLI
|
|
60
|
+
state directory. `whoami` reports the active account and credential source without exposing the
|
|
61
|
+
token. `logout` closes daemon Sessions that depend on that local credential and removes it locally;
|
|
62
|
+
it does not revoke copies on other machines. Use `login --no-open` when the browser must be opened
|
|
63
|
+
manually; the verification URL is emitted as structured progress on stderr.
|
|
64
|
+
|
|
65
|
+
Externally provisioned credentials remain supported for automation. Use an ignored `.env.local`,
|
|
66
|
+
an explicit env-file path, or an inherited process environment:
|
|
52
67
|
|
|
53
68
|
```dotenv
|
|
54
69
|
AZ8_TOKEN=<operator-provisioned-secret>
|
|
@@ -58,9 +73,10 @@ AZ8_ENVIRONMENT=test
|
|
|
58
73
|
`AZ8_ENVIRONMENT` accepts `test` or `production`. Command-line `--environment` overrides the env
|
|
59
74
|
value. Without `--env-file`, the CLI searches from the working directory upward for `.env.local`.
|
|
60
75
|
An explicit file is selected by path, for example
|
|
61
|
-
`--environment test --env-file /secure/path/.env.local`.
|
|
62
|
-
|
|
63
|
-
|
|
76
|
+
`--environment test --env-file /secure/path/.env.local`. Process-environment credentials take
|
|
77
|
+
precedence over env files, which take precedence over the locally saved login. The CLI never
|
|
78
|
+
rewrites an env file or inherited environment. Agents must not read, print, edit, or ask users to
|
|
79
|
+
paste credential contents. Tokens must not be passed through argv or stdio protocol payloads.
|
|
64
80
|
|
|
65
81
|
## CLI architecture
|
|
66
82
|
|
|
@@ -69,7 +85,8 @@ validation boundary. CLI-specific code is organized by responsibility:
|
|
|
69
85
|
|
|
70
86
|
- `src/cli/` owns program assembly, runtime config, persistent stdio transport, output framing, and
|
|
71
87
|
package version resolution.
|
|
72
|
-
- `src/
|
|
88
|
+
- `src/auth/` owns browser authorization, account-service exchange, and private local credentials.
|
|
89
|
+
- `src/commands/` declares account, Project, Canvas, and guide commands.
|
|
73
90
|
- `src/agent-session/` owns isolated daemon lifecycles, local Session discovery, the private RPC
|
|
74
91
|
carrier, Watch delivery, and current-context selection.
|
|
75
92
|
- `src/canvas/` owns collaboration sessions, one-shot execution, awareness, and the NDJSON
|
|
@@ -100,10 +117,11 @@ indeterminate.
|
|
|
100
117
|
|
|
101
118
|
## First agent loop
|
|
102
119
|
|
|
103
|
-
A new agent needs only the installed package,
|
|
104
|
-
|
|
120
|
+
A new agent needs only the installed package, an authorized account, and this document. Confirm the
|
|
121
|
+
active identity, then create its own Project and open one daemon-backed Agent Collaboration Session:
|
|
105
122
|
|
|
106
123
|
```bash
|
|
124
|
+
az8 whoami --environment test
|
|
107
125
|
az8 projects create --name "Agent preview workspace"
|
|
108
126
|
az8 session open <project-id> --environment test
|
|
109
127
|
az8 session query capabilities.summary
|
|
@@ -294,7 +312,7 @@ az8 canvas open <project-id> --write --format ndjson [--client-name codex]
|
|
|
294
312
|
The process writes one `hello` frame, then waits for an `initialize` request on stdin:
|
|
295
313
|
|
|
296
314
|
```json
|
|
297
|
-
{"protocolVersion":"1.
|
|
315
|
+
{"protocolVersion":"1.1","requestId":"init-1","type":"initialize","payload":{"projectId":"<project-id>","client":{"name":"my-agent"},"observationPreset":"compact"}}
|
|
298
316
|
```
|
|
299
317
|
|
|
300
318
|
Before readiness the client hydrates the current authenticated account profile. Canvas Operations use
|
|
@@ -315,17 +333,25 @@ Node hierarchy operations, and the Stage 3 Core Node creative loop. Note operati
|
|
|
315
333
|
`createGenerationTarget`, the compatible non-text `createMediaTarget`, `planGeneration`,
|
|
316
334
|
`importExternalMedia`, `uploadMedia`, `editGenerationDraft`,
|
|
317
335
|
`addVisualReference`, `removeVisualReference`, `startGeneration`, `getWorkflowRun`, and
|
|
318
|
-
`waitWorkflowRun`. Capability detail is discoverable through
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
336
|
+
`waitWorkflowRun`. Capability detail is discoverable through
|
|
337
|
+
`capabilities.detail --operation-name <operation-name>`; callers should select only the Operation
|
|
338
|
+
they plan to invoke instead of loading every schema or hard-coding inputs. Workflow Definitions are
|
|
339
|
+
available through `workflowDefinitions.summary` and `workflowDefinition.detail` queries.
|
|
340
|
+
`workflowDefinitions.summary` always returns a compact paginated catalog with a default page size of
|
|
341
|
+
10, target counts, and an opaque next cursor; use `--workflow-target`, `--page-size`, and `--cursor`
|
|
342
|
+
to narrow or continue it. Summary discovery, default Drafts, planning, and generation start use only
|
|
343
|
+
Definitions available to the authenticated account. Detail may retain an unavailable historical
|
|
344
|
+
Definition for diagnosis with `availableForAccount: false` and an `accessReason`.
|
|
324
345
|
|
|
325
346
|
Workflow tags describe classification, compatibility, access, and rollout rather than price.
|
|
326
347
|
`available:free` means a free-tier account may select the Workflow; it does not mean zero-credit
|
|
327
348
|
generation. Credit claims must come from planning/start estimates or terminal usage records.
|
|
328
349
|
|
|
350
|
+
`getCoreNode` requires a non-empty unique `coreNodeIds` batch and returns `coreNodes` in the same
|
|
351
|
+
order. If any requested Core Node does not exist, the whole read fails instead of returning an
|
|
352
|
+
ambiguous partial result. The CLI adapter uses the backend's batch endpoint and transparently chunks
|
|
353
|
+
large requests.
|
|
354
|
+
|
|
329
355
|
Before editing a Draft, an agent can call the read-only `planGeneration` Operation for an existing
|
|
330
356
|
generation target. It recommends a Definition from the target and resolved generation-reference modalities,
|
|
331
357
|
constructs configuration defaults, validates required inputs, and returns compact alternatives plus
|
|
@@ -334,15 +360,18 @@ field metadata, including dynamic enum options. Planning never creates a Core No
|
|
|
334
360
|
Canvas; returned Operations still execute independently and stop at the first failure.
|
|
335
361
|
|
|
336
362
|
Generation references always identify visible Canvas placements. Public planning and
|
|
337
|
-
`addVisualReference` accept only
|
|
363
|
+
`addVisualReference` accept only View Node IDs. `addVisualReference` requires a non-empty unique
|
|
364
|
+
`referenceViewNodeIds` batch; `removeVisualReference` requires a non-empty unique `referenceIds`
|
|
365
|
+
batch. Both Operations validate the complete batch before one atomic Draft write, so a failure never
|
|
366
|
+
leaves a partial batch. If desired content exists only as a Core Node, call
|
|
338
367
|
`placeCoreNode` first, wait for its successful Receipt, and reference the returned View Node. This
|
|
339
368
|
preserves the same visible inferred connection as Web and avoids guessing when one Core Node has
|
|
340
369
|
multiple Canvas placements. Manual Text Resources are valid prompt references even though they do
|
|
341
370
|
not have a Core Node before generation starts. Their View Node binding remains in the launch history
|
|
342
371
|
for Web lineage and inferred-edge rendering; estimation uses the current text and materialization
|
|
343
372
|
creates the Text Core Node only after the estimate succeeds. The published operation names
|
|
344
|
-
`addVisualReference` and `removeVisualReference`
|
|
345
|
-
|
|
373
|
+
`addVisualReference` and `removeVisualReference` cover these planned Text bindings as well as image
|
|
374
|
+
and video bindings.
|
|
346
375
|
|
|
347
376
|
`insertPromptReference` additionally places the platform-owned At token at `start`, `end`, or
|
|
348
377
|
before/after an exact text anchor such as
|
|
@@ -351,7 +380,7 @@ only for a unique anchor. Missing or ambiguous anchors fail without writing. Cal
|
|
|
351
380
|
At syntax, binding IDs, or slot indexes.
|
|
352
381
|
|
|
353
382
|
```json
|
|
354
|
-
{"protocolVersion":"1.
|
|
383
|
+
{"protocolVersion":"1.1","requestId":"plan-1","type":"operation","payload":{"name":"planGeneration","input":{"targetViewNodeId":"<target-id>","prompt":"A quiet observatory","references":[{"viewNodeId":"<reference-id>"}],"detail":"detail"}}}
|
|
355
384
|
```
|
|
356
385
|
|
|
357
386
|
`editNoteContent`, `setNoteColor`, `editTextContent`, `renameViewNode`, and `resizeViewNodes` match
|
|
@@ -370,41 +399,41 @@ is scoped to siblings with the same parent. Decoration, Asset, and all World tar
|
|
|
370
399
|
Example write:
|
|
371
400
|
|
|
372
401
|
```json
|
|
373
|
-
{"protocolVersion":"1.
|
|
402
|
+
{"protocolVersion":"1.1","requestId":"create-1","type":"operation","payload":{"name":"createNote","input":{"text":"idea","position":{"x":160,"y":160}}}}
|
|
374
403
|
```
|
|
375
404
|
|
|
376
405
|
Example Stage 2 edits:
|
|
377
406
|
|
|
378
407
|
```json
|
|
379
|
-
{"protocolVersion":"1.
|
|
380
|
-
{"protocolVersion":"1.
|
|
381
|
-
{"protocolVersion":"1.
|
|
382
|
-
{"protocolVersion":"1.
|
|
383
|
-
{"protocolVersion":"1.
|
|
408
|
+
{"protocolVersion":"1.1","requestId":"edit-1","type":"operation","payload":{"name":"editNoteContent","input":{"viewNodeId":"view_node_1","text":"revised idea"}}}
|
|
409
|
+
{"protocolVersion":"1.1","requestId":"color-1","type":"operation","payload":{"name":"setNoteColor","input":{"viewNodeId":"view_node_1","color":"purple"}}}
|
|
410
|
+
{"protocolVersion":"1.1","requestId":"text-1","type":"operation","payload":{"name":"createTextNode","input":{"text":"A manual Text Resource","name":"Draft copy","position":{"x":520,"y":160}}}}}
|
|
411
|
+
{"protocolVersion":"1.1","requestId":"resize-1","type":"operation","payload":{"name":"resizeViewNodes","input":{"resizes":[{"viewNodeId":"view_node_1","size":{"width":420,"height":360}}]}}}
|
|
412
|
+
{"protocolVersion":"1.1","requestId":"duplicate-1","type":"operation","payload":{"name":"duplicateViewNodes","input":{"viewNodeIds":["view_node_1"]}}}
|
|
384
413
|
```
|
|
385
414
|
|
|
386
415
|
Example hierarchy sequence (each successful write is one independent undoable interaction):
|
|
387
416
|
|
|
388
417
|
```json
|
|
389
|
-
{"protocolVersion":"1.
|
|
390
|
-
{"protocolVersion":"1.
|
|
391
|
-
{"protocolVersion":"1.
|
|
392
|
-
{"protocolVersion":"1.
|
|
418
|
+
{"protocolVersion":"1.1","requestId":"group-1","type":"operation","payload":{"name":"groupViewNodes","input":{"viewNodeIds":["view_node_1","view_node_2"],"name":"References"}}}
|
|
419
|
+
{"protocolVersion":"1.1","requestId":"reparent-1","type":"operation","payload":{"name":"moveViewNodes","input":{"moves":[{"id":"view_node_3","position":{"x":640,"y":360},"targetParentId":"<group-id>"}]}}}
|
|
420
|
+
{"protocolVersion":"1.1","requestId":"front-1","type":"operation","payload":{"name":"updateViewNodeStacking","input":{"viewNodeId":"view_node_3","direction":"front"}}}
|
|
421
|
+
{"protocolVersion":"1.1","requestId":"ungroup-1","type":"operation","payload":{"name":"ungroupViewNode","input":{"groupViewNodeId":"<group-id>"}}}
|
|
393
422
|
```
|
|
394
423
|
|
|
395
424
|
Example Stage 3 generation sequence (each line is a separate ordered interaction):
|
|
396
425
|
|
|
397
426
|
```json
|
|
398
|
-
{"protocolVersion":"1.
|
|
399
|
-
{"protocolVersion":"1.
|
|
400
|
-
{"protocolVersion":"1.
|
|
401
|
-
{"protocolVersion":"1.
|
|
427
|
+
{"protocolVersion":"1.1","requestId":"target-1","type":"operation","payload":{"name":"createGenerationTarget","input":{"contentType":"image"}}}
|
|
428
|
+
{"protocolVersion":"1.1","requestId":"draft-1","type":"operation","payload":{"name":"editGenerationDraft","input":{"viewNodeId":"<target-id>","definitionId":"<definition-id>","prompt":"A quiet observatory","config":{"aspect_ratio":"16:9"}}}}
|
|
429
|
+
{"protocolVersion":"1.1","requestId":"start-1","type":"operation","payload":{"name":"startGeneration","input":{"viewNodeId":"<target-id>"}}}
|
|
430
|
+
{"protocolVersion":"1.1","requestId":"wait-1","type":"operation","payload":{"name":"waitWorkflowRun","input":{"workflowRunId":"<run-id>"},"timeoutMs":120000}}
|
|
402
431
|
```
|
|
403
432
|
|
|
404
433
|
Example public media URL import:
|
|
405
434
|
|
|
406
435
|
```json
|
|
407
|
-
{"protocolVersion":"1.
|
|
436
|
+
{"protocolVersion":"1.1","requestId":"import-1","type":"operation","payload":{"name":"importExternalMedia","input":{"contentType":"image","idempotencyKey":"reference-image-1","url":"https://example.com/reference.png","name":"Reference image","position":{"x":640,"y":160}}}}
|
|
408
437
|
```
|
|
409
438
|
|
|
410
439
|
`idempotencyKey` is required. Repeating the same normalized input returns the existing View Node and
|
package/RELEASE.md
CHANGED
|
@@ -57,11 +57,11 @@ Before publishing, also run the test-environment acceptance checklist in the pac
|
|
|
57
57
|
repository-wide `pnpm verify`. Publishing is an external action and requires explicit operator
|
|
58
58
|
authorization:
|
|
59
59
|
|
|
60
|
-
For the `0.
|
|
60
|
+
For the `0.4.0` stable candidate, publish the exact retained artifact to the stable channel only
|
|
61
61
|
after its test-environment acceptance succeeds:
|
|
62
62
|
|
|
63
63
|
```bash
|
|
64
|
-
npm publish ./tmp/az8-cli-release/everfir-az8-cli-0.
|
|
64
|
+
npm publish ./tmp/az8-cli-release/everfir-az8-cli-0.4.0.tgz --tag latest
|
|
65
65
|
npm view @everfir/az8-cli dist-tags versions --json
|
|
66
66
|
```
|
|
67
67
|
|