@starkscan/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/README.md CHANGED
@@ -3,10 +3,11 @@
3
3
  Command-line Starkscan client for status checks, explorer reads, local exports,
4
4
  and agent setup.
5
5
 
6
- Release target: `0.3.0`. This release carries the address-activity truth
7
- contract and its typed nullable output through the native CLI. Use the untagged
8
- install only after the live `latest` verifier passes; pin `0.3.0` for
9
- reproducible installs after that promotion.
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.
10
11
 
11
12
  ## Install
12
13
 
@@ -24,11 +25,11 @@ npx -y @starkscan/cli init --agent --output-format json
24
25
  Exact pin for unattended services:
25
26
 
26
27
  ```bash
27
- npx -y @starkscan/cli@0.3.0 init --agent --output-format json
28
+ npx -y @starkscan/cli@0.4.0 init --agent --output-format json
28
29
  ```
29
30
 
30
31
  Prerelease tags such as `@beta` are maintainer-directed test channels only.
31
- Normal users and agents should use the default package or the exact `0.3.0`
32
+ Normal users and agents should use the default package or the exact `0.4.0`
32
33
  pin above.
33
34
 
34
35
  ## First commands
@@ -45,13 +46,57 @@ starkscan tx 0x1234abcd
45
46
  starkscan search 0x1234abcd
46
47
  starkscan wallet-asset-discovery 0xWALLET --limit 25
47
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
48
55
  ```
49
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
+
50
88
  The CLI defaults to `https://api.starkscan.co`, sends `X-Starkscan-Api-Key`,
51
89
  and uses the same REST API contract as the SDK. MCP uses a separate
52
90
  transport: `POST https://api.starkscan.co/mcp` on the API domain, or
53
91
  `POST {appBaseUrl}/api/mcp` on app-origin deployments.
54
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
+
55
100
  ## Why use it
56
101
 
57
102
  - No Rust toolchain or private repository access required.
@@ -61,15 +106,19 @@ transport: `POST https://api.starkscan.co/mcp` on the API domain, or
61
106
  - `--output-format json` keeps stdout parseable for agents and CI.
62
107
  - Stable exit classes make automation predictable: success, usage, auth,
63
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`.
64
113
  - MCP helpers print ready-to-paste Codex, Claude Code, Cursor, Claude Desktop,
65
114
  and Cline configs with environment placeholders, not secret values.
66
115
 
67
116
  ## Agent setup
68
117
 
69
118
  ```bash
70
- npx -y @starkscan/cli@0.3.0 init --agent --output-format json
71
- npx -y @starkscan/cli@0.3.0 mcp print-config --transport remote
72
- npx -y @starkscan/cli@0.3.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
73
122
  ```
74
123
 
75
124
  `print-config` emits machine-readable snippets. Keep `STARKSCAN_API_KEY` in the
@@ -80,7 +129,7 @@ host shell, CI secret store, or MCP client secret store.
80
129
  Agents can inspect the launcher decision without executing the native binary:
81
130
 
82
131
  ```bash
83
- npx -y @starkscan/cli@0.3.0 --launcher-json
132
+ npx -y @starkscan/cli@0.4.0 --launcher-json
84
133
  ```
85
134
 
86
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-23T10:59:46Z",
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": "64bca370039c26deb950e0f3aaabb5854dda2e2605e66c98eb5e21ef0aa7eada"
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": "e8f870c07168ce0150565121f3ce2e8bee7ae4fbf333c0f7dcd7d4c5f271fc79"
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": "73dd78b4adb56aa38e0e0ed5154d5e6f9866ae9d749967ebad64df8154984cdd"
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": "c7378ba211aedaf57c46a1fc73d6113c7dc3a407f2a7b230edd06d30f4a2b4b9"
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.3.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
- 64bca370039c26deb950e0f3aaabb5854dda2e2605e66c98eb5e21ef0aa7eada starkscan-darwin-aarch64.tar.gz
@@ -1 +0,0 @@
1
- e8f870c07168ce0150565121f3ce2e8bee7ae4fbf333c0f7dcd7d4c5f271fc79 starkscan-darwin-x86_64.tar.gz
@@ -1 +0,0 @@
1
- 73dd78b4adb56aa38e0e0ed5154d5e6f9866ae9d749967ebad64df8154984cdd starkscan-linux-aarch64.tar.gz
@@ -1 +0,0 @@
1
- c7378ba211aedaf57c46a1fc73d6113c7dc3a407f2a7b230edd06d30f4a2b4b9 starkscan-linux-x86_64.tar.gz