@starkscan/cli 0.2.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/README.md CHANGED
@@ -3,9 +3,11 @@
3
3
  Command-line Starkscan client for status checks, explorer reads, local exports,
4
4
  and agent setup.
5
5
 
6
- Status: public `0.2.0` stable release. The npm `latest` tag points to the real
7
- CLI package. Use the untagged install for normal setup and pin `0.2.0` for
8
- unattended agents or production services that need reproducible installs.
6
+ Release target: `0.4.0`. This release adds the public asynchronous exact
7
+ contract-verification workflow, including deterministic source preparation,
8
+ job control, and offline receipt validation. Use the untagged install only
9
+ after the live `latest` verifier passes; pin `0.4.0` for reproducible installs
10
+ after that promotion.
9
11
 
10
12
  ## Install
11
13
 
@@ -23,11 +25,11 @@ npx -y @starkscan/cli init --agent --output-format json
23
25
  Exact pin for unattended services:
24
26
 
25
27
  ```bash
26
- npx -y @starkscan/cli@0.2.0 init --agent --output-format json
28
+ npx -y @starkscan/cli@0.4.0 init --agent --output-format json
27
29
  ```
28
30
 
29
31
  Prerelease tags such as `@beta` are maintainer-directed test channels only.
30
- Normal users and agents should use the default package or the exact `0.2.0`
32
+ Normal users and agents should use the default package or the exact `0.4.0`
31
33
  pin above.
32
34
 
33
35
  ## First commands
@@ -44,13 +46,57 @@ starkscan tx 0x1234abcd
44
46
  starkscan search 0x1234abcd
45
47
  starkscan wallet-asset-discovery 0xWALLET --limit 25
46
48
  starkscan wallet-state 0xWALLET --mode require_complete --limit 25
49
+ starkscan token-holder-screening 0xTOKEN --limit 100 --output-format json
50
+ starkscan token-holders 0xTOKEN --limit 100 --output-format json
51
+ starkscan verify prepare --help
52
+ starkscan verify submit --help
53
+ starkscan verify status --help
54
+ starkscan verify receipt-check --help
47
55
  ```
48
56
 
57
+ `token-holder-screening` walks the address-keyed policy Top-N and never claims
58
+ population completeness, even when `nextCursor` is null. Historical source
59
+ corrections can invalidate an unexpired generation's proof without changing
60
+ its immutable rows. Recheck `populationComplete`, `exact`, and certification
61
+ on every JSON page; a previously certified page does not authorize later
62
+ pages. `token-holders`
63
+ requests holder pages; do not present an exact census unless its JSON has the
64
+ sealed finalized source with `freshness=finalized_generation`, valid immutable generation/block/hash/digest IDs, an
65
+ unexpired `expiresAt`, `populationComplete=true` with
66
+ `populationReasonCode=complete_canonical_transfer_coverage`, `exact=true`,
67
+ `truncated=false`, and `completeness.reasonCode=materialized_snapshot`; plus
68
+ `certification.status=certified`,
69
+ `validatedAgainst=starknet_rpc_balanceOf`,
70
+ `certification.reasonCode=materialized_snapshot`, and a valid `checkedAt` no
71
+ earlier than `updatedAt`. Pass each opaque `nextCursor` back with `--cursor`
72
+ unchanged.
73
+ An intentionally redacted holder `200`, including the address-keyed priority
74
+ case, contains `holderCount=0`, `holderBalanceTotalRaw=null`, no rows,
75
+ `nextCursor=null`, `populationComplete=false`, `exact=false`, and
76
+ `Cache-Control: no-store`; JSON automation must treat it as unavailable proof,
77
+ not an empty population or a cacheable zero.
78
+
79
+ If either holder command receives HTTP `422` with
80
+ `code=unqualified_token_policy`, the token has no current explicit
81
+ address-keyed holder policy. This is terminal, non-retryable eligibility state,
82
+ not an uncaptured generation: the CLI exits with the stable `usage` class and
83
+ JSON output includes `error.apiCode="unqualified_token_policy"`. A qualified
84
+ priority token without a current certificate still returns the redacted `200`
85
+ tuple above; an eligible token whose prepared data is temporarily unavailable
86
+ uses retryable `503` and `Retry-After` instead.
87
+
49
88
  The CLI defaults to `https://api.starkscan.co`, sends `X-Starkscan-Api-Key`,
50
89
  and uses the same REST API contract as the SDK. MCP uses a separate
51
90
  transport: `POST https://api.starkscan.co/mcp` on the API domain, or
52
91
  `POST {appBaseUrl}/api/mcp` on app-origin deployments.
53
92
 
93
+ `starkscan verify` is the public asynchronous contract-verification workflow.
94
+ It deterministically packages a locked Cairo source tree, streams the bounded
95
+ archive to Starkscan's isolated networkless verifier, reports typed job state,
96
+ and authenticates a portable Ed25519 receipt offline. See the complete
97
+ [contract-verification guide](https://starkscan.co/docs/api/contract-verification)
98
+ before submitting private or publishable source.
99
+
54
100
  ## Why use it
55
101
 
56
102
  - No Rust toolchain or private repository access required.
@@ -60,15 +106,19 @@ transport: `POST https://api.starkscan.co/mcp` on the API domain, or
60
106
  - `--output-format json` keeps stdout parseable for agents and CI.
61
107
  - Stable exit classes make automation predictable: success, usage, auth,
62
108
  rate-limit, timeout, and not-found errors are distinct.
109
+ - The remote MCP proxy preserves holder errors in `structuredContent`: terminal
110
+ policy review is `errorCode="unqualified_token_policy"` with
111
+ `retryable=false`, while eligible-token lifecycle `503` is
112
+ `errorCode="temporary_unavailable"` with `retryable=true`.
63
113
  - MCP helpers print ready-to-paste Codex, Claude Code, Cursor, Claude Desktop,
64
114
  and Cline configs with environment placeholders, not secret values.
65
115
 
66
116
  ## Agent setup
67
117
 
68
118
  ```bash
69
- npx -y @starkscan/cli@0.2.0 init --agent --output-format json
70
- npx -y @starkscan/cli@0.2.0 mcp print-config --transport remote
71
- npx -y @starkscan/cli@0.2.0 mcp start --transport remote
119
+ npx -y @starkscan/cli@0.4.0 init --agent --output-format json
120
+ npx -y @starkscan/cli@0.4.0 mcp print-config --transport remote
121
+ npx -y @starkscan/cli@0.4.0 mcp start --transport remote
72
122
  ```
73
123
 
74
124
  `print-config` emits machine-readable snippets. Keep `STARKSCAN_API_KEY` in the
@@ -79,7 +129,7 @@ host shell, CI secret store, or MCP client secret store.
79
129
  Agents can inspect the launcher decision without executing the native binary:
80
130
 
81
131
  ```bash
82
- npx -y @starkscan/cli@0.2.0 --launcher-json
132
+ npx -y @starkscan/cli@0.4.0 --launcher-json
83
133
  ```
84
134
 
85
135
  The JSON includes the package version, resolved binary path, release tag,
@@ -1,34 +1,34 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "generatedAt": "2026-08-19T06:51:05Z",
3
+ "generatedAt": "2026-09-24T05:05:09Z",
4
4
  "artifacts": [
5
5
  {
6
6
  "name": "starkscan-darwin-aarch64.tar.gz",
7
7
  "platform": "darwin-aarch64",
8
8
  "target": "darwin-aarch64",
9
9
  "archive": "starkscan-darwin-aarch64.tar.gz",
10
- "sha256": "e12e2f38f46eecadb6b1a19bc8bf7cbd028b051fd46f87c52eeede752da4b844"
10
+ "sha256": "7e36da90db80cc546f65000bce4241fe09d196278c6d322a9c5b0479800cfd6a"
11
11
  },
12
12
  {
13
13
  "name": "starkscan-darwin-x86_64.tar.gz",
14
14
  "platform": "darwin-x86_64",
15
15
  "target": "darwin-x86_64",
16
16
  "archive": "starkscan-darwin-x86_64.tar.gz",
17
- "sha256": "7bba139654743ed8a3c2247296207a217dbbfad52ca42fd5b04f84ef615f9378"
17
+ "sha256": "092f80c43b0e0f952c8727682873c5ee028ba7476dcedfe1a4883c8387a1f963"
18
18
  },
19
19
  {
20
20
  "name": "starkscan-linux-aarch64.tar.gz",
21
21
  "platform": "linux-aarch64",
22
22
  "target": "linux-aarch64",
23
23
  "archive": "starkscan-linux-aarch64.tar.gz",
24
- "sha256": "3168a88eee1c97bd626e1100fe027a469a20ba9078ef75bc011c49198103e379"
24
+ "sha256": "300b5966af0dc68b01f5dc7f402c866b0d18221ab94a112eeaa67cf58eb9a6b5"
25
25
  },
26
26
  {
27
27
  "name": "starkscan-linux-x86_64.tar.gz",
28
28
  "platform": "linux-x86_64",
29
29
  "target": "linux-x86_64",
30
30
  "archive": "starkscan-linux-x86_64.tar.gz",
31
- "sha256": "2bcb0f83fa9dca13bc4448085f054261ff0ab421414c6e5812aba361424ce88e"
31
+ "sha256": "f566a84cd3f5bb8cbfe7317e2e788ec8849daa17ae7638a263273ae5296e083a"
32
32
  }
33
33
  ]
34
34
  }
@@ -0,0 +1 @@
1
+ 7e36da90db80cc546f65000bce4241fe09d196278c6d322a9c5b0479800cfd6a starkscan-darwin-aarch64.tar.gz
@@ -0,0 +1 @@
1
+ 092f80c43b0e0f952c8727682873c5ee028ba7476dcedfe1a4883c8387a1f963 starkscan-darwin-x86_64.tar.gz
@@ -0,0 +1 @@
1
+ 300b5966af0dc68b01f5dc7f402c866b0d18221ab94a112eeaa67cf58eb9a6b5 starkscan-linux-aarch64.tar.gz
@@ -0,0 +1 @@
1
+ f566a84cd3f5bb8cbfe7317e2e788ec8849daa17ae7638a263273ae5296e083a starkscan-linux-x86_64.tar.gz
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@starkscan/cli",
3
3
  "private": false,
4
- "version": "0.2.0",
4
+ "version": "0.4.0",
5
5
  "description": "Command-line launcher for Starkscan API, export, and agent workflows.",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -1 +0,0 @@
1
- e12e2f38f46eecadb6b1a19bc8bf7cbd028b051fd46f87c52eeede752da4b844 starkscan-darwin-aarch64.tar.gz
@@ -1 +0,0 @@
1
- 7bba139654743ed8a3c2247296207a217dbbfad52ca42fd5b04f84ef615f9378 starkscan-darwin-x86_64.tar.gz
@@ -1 +0,0 @@
1
- 3168a88eee1c97bd626e1100fe027a469a20ba9078ef75bc011c49198103e379 starkscan-linux-aarch64.tar.gz
@@ -1 +0,0 @@
1
- 2bcb0f83fa9dca13bc4448085f054261ff0ab421414c6e5812aba361424ce88e starkscan-linux-x86_64.tar.gz