@uru-intelligence/cli 0.3.60 → 0.4.11

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.
Files changed (5) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +61 -16
  3. package/dist/library.mjs +4361 -1678
  4. package/dist/uru.mjs +6428 -2372
  5. package/package.json +63 -60
package/CHANGELOG.md ADDED
@@ -0,0 +1,31 @@
1
+ # Uru CLI changelog
2
+
3
+ > Generated from `changes/cli/*.json`. Do not edit release rows by hand.
4
+
5
+ ## Unreleased
6
+
7
+ ### Security
8
+
9
+ - Bind npm publication to an attested candidate tarball and require the published cli_pin matrix before release success. — surfaces: cli, release; reference: docs/plans/cli-sdk-native-release-modernization/PLAN.md
10
+ - Action: Release operators must supply the exact candidate run, attempt, release-evidence artifact ID, and MCP commit to the protected publish workflow.
11
+
12
+ ### Added
13
+
14
+ - Add a side-effect-free internal CLI library entrypoint with a typed whoami foundation. _(internal)_ — surfaces: cli, sdk; reference: docs/plans/cli-sdk-native-release-modernization/DECISION_RECORDS.md
15
+ - Action: Programmatic callers must pass an explicit token and workspace; no public SDK compatibility promise is introduced.
16
+ - Add direct CLI access to Home pins and Focus rules from the shared operation registry. — surfaces: cli, docs; reference: content/docs/home.mdx
17
+ - Action: Use uru home <operation> --params-json '{...}' or the matching home.* operation ID.
18
+
19
+ ### Fixed
20
+
21
+ - Report a non-JSON API response as what it is. A proxy or firewall that answers with an HTML page now produces the HTTP status and content type instead of `Unexpected token '<', "<!DOCTYPE "... is not valid JSON`. — surfaces: cli; reference: apps/cli/src/client.ts
22
+ - Action: No action is required. Failures of this class now carry the `non_json_response` error code, keep the auth exit code on a 401, and print a tip naming the likely cause.
23
+ - Report what a rejected credential actually means: `uru doctor` now runs a read-only data call instead of trusting `uru whoami`, API error envelopes are read in full, and auth advice follows where the token came from. — surfaces: cli; reference: apps/cli/src/doctor.ts
24
+ - Action: No action is required. `uru doctor` gains a `data access` check and fails when a credential validates but cannot execute tools; a token supplied through `--token` or `URU_TOKEN` is no longer told to run `uru login`.
25
+ - Use the shared SemVer contract when deciding whether to show a CLI update notice. — surfaces: cli, release; reference: docs/plans/cli-sdk-native-release-modernization/PLAN.md
26
+ - Action: No action is required; prerelease and malformed registry versions now follow the same validation and ordering rules as release publication.
27
+
28
+ ### Internal
29
+
30
+ - Retain an executable compatibility probe for the paused Stricli migration decision. _(internal)_ — surfaces: cli; reference: docs/plans/cli-sdk-native-release-modernization/DECISION_RECORDS.md
31
+ - Action: Do not adopt Stricli until a pinned upstream release passes this probe and the required seven-slice hard-cut proof.
package/README.md CHANGED
@@ -46,7 +46,7 @@ bun src/index.ts gems versions diff 'library/Golden Gems/My Gem.gem' 13 14
46
46
  bun src/index.ts gems versions restore 'library/Golden Gems/My Gem.gem' 12
47
47
  bun src/index.ts gems releases create 'library/Golden Gems/My Gem.gem' 14
48
48
  bun src/index.ts gems releases list 'library/Golden Gems/My Gem.gem'
49
- bun src/index.ts gems links create 'library/Golden Gems/My Gem.gem' --name Client --version 14
49
+ bun src/index.ts gems links create 'library/Golden Gems/My Gem.gem' --name Client --pin --version 14
50
50
  bun src/index.ts gems links set-version 'library/Golden Gems/My Gem.gem' <link-id> 14
51
51
  bun src/index.ts gems runs list 'library/Golden Gems/My Gem.gem'
52
52
  bun src/index.ts gems runs show 'library/Golden Gems/My Gem.gem' <run-id>
@@ -68,14 +68,14 @@ bun src/index.ts library mv 'library/Notes/Draft.md' 'library/Notes/Final.md'
68
68
  bun src/index.ts library rm 'library/Notes/Old.md'
69
69
  bun src/index.ts library restore 'library/Notes/Old.md'
70
70
  bun src/index.ts datasets query revenue_rows --limit 50 --response-format concise --json
71
- bun src/index.ts library ls --params-json '{"path":"library","resource_type":"dataset"}'
72
- # Copy the exact resourceSlug from Library discovery; never infer it from name.
73
- bun src/index.ts datasets get --params-json '{"dataset_id":"revenue-rows"}'
74
- bun src/index.ts datasets rows-upsert --params-json '{"dataset_id":"revenue-rows","rows":[{"name":"Acme"}]}'
75
- bun src/index.ts datasets manage-create --params-json '{"title":"Revenue Rows","data_schema":{"properties":[]}}'
71
+ # Registry-family commands accept canonical camelCase fields and adapt them at
72
+ # the tool-protocol boundary.
73
+ bun src/index.ts datasets get revenue-rows
74
+ bun src/index.ts datasets rows --params-json '{"op":"upsert","datasetId":"revenue-rows","rows":[{"name":"Acme"}]}'
75
+ bun src/index.ts datasets create --params-json '{"title":"Revenue Rows","properties":[{"clientKey":"name","name":"Name","type":"title","required":true,"nullable":false,"position":0,"config":{}}]}'
76
76
 
77
77
  # Automation helpers over the platform tool surface.
78
- bun src/index.ts automations ls --status active --view summary
78
+ bun src/index.ts automations ls --limit 100
79
79
  bun src/index.ts automations get <automation-id>
80
80
  bun src/index.ts automations create "Daily revenue digest" --status draft
81
81
  bun src/index.ts automations enable <automation-id>
@@ -84,7 +84,7 @@ bun src/index.ts automations runs ls <automation-id> --scope workspace --limit 2
84
84
  bun src/index.ts automations runs tail <run-id> --level warn
85
85
  bun src/index.ts automations runs cancel <run-id> --yes
86
86
 
87
- # Raw platform-tool escape hatch for diagnostics and parity.
87
+ # Raw platform-tool escape hatch for diagnostics and low-level operations.
88
88
  bun src/index.ts tools ls
89
89
  bun src/index.ts tools schema gem_control_plane --json
90
90
  bun src/index.ts tools run gem_control_plane --params-json '{"op":"inspect","path":"library/Golden Gems/My Gem.gem"}'
@@ -105,6 +105,7 @@ bun src/index.ts mcp install --path ~/.config/claude-code/mcp.json --api-key "$U
105
105
  bun src/index.ts complete bash
106
106
  bun src/index.ts complete zsh
107
107
  bun src/index.ts complete fish
108
+ bun src/index.ts complete powershell
108
109
  ```
109
110
 
110
111
  Generated MCP configs use non-interactive `npx -y` and pin
@@ -178,6 +179,17 @@ For one-off usage:
178
179
  printf '%s' "$URU_TOKEN" | npx @uru-intelligence/cli whoami --token-stdin --json
179
180
  ```
180
181
 
182
+ The package root is a side-effect-free library entry. It does not execute a
183
+ command, read local CLI configuration, install signal handlers, write output,
184
+ or start network activity on import. The package currently exposes only the
185
+ fail-closed internal `createUruClient` foundation: callers must supply a token
186
+ and an explicit workspace, every call accepts cancellation, and it validates
187
+ the authenticated workspace before returning a typed result. DG-1 has not
188
+ accepted a public high-level SDK compatibility promise, so no broader SDK or
189
+ raw API surface is implied by this export. The executable remains the `uru`
190
+ binary; `@uru-intelligence/cli/cli` is an explicit executable subpath for
191
+ packaging tools, not an SDK API.
192
+
181
193
  ## Release validation
182
194
 
183
195
  Before publishing, run the full local CLI gate and the staging CLI/MCP smoke with a staging-scoped token. The smoke reads credentials from env or macOS Keychain and never prints the token. To avoid putting a token in shell history, store it as `uru_staging_smoke_token` with `security add-generic-password -a "$USER" -s uru_staging_smoke_token -w '<token>' -U`.
@@ -191,14 +203,47 @@ URU_CLI_MCP_STAGING_SMOKE_TARGET=staging \
191
203
  ```
192
204
 
193
205
  Publish the scoped CLI only through the **Publish Uru CLI to npm** workflow on
194
- `main`. It first verifies that the exact pinned `uru-mcp` release exists, runs
195
- release validation, publishes through npm trusted publishing from a
196
- GitHub-hosted runner in the protected `production` environment, and then
197
- requires a separate live-registry job to verify the exact published version.
198
- The registry smoke intentionally runs `npm exec` from a clean OS temporary
199
- directory so the monorepo workspace cannot shadow the published package. The
200
- source repository is private, so npm OIDC authenticates the publish without a
201
- long-lived token but cannot emit a public provenance attestation.
206
+ `main`. A release request must identify the candidate certification workflow
207
+ run ID, attempt, and exact retained bundle artifact ID; the publisher never
208
+ selects `latest` evidence. Before it reads the release record, it verifies the
209
+ candidate's GitHub DSSE/in-toto artifact attestations for both the canonical
210
+ release record and the exact `uru_cli.tgz`, pins the builder repository,
211
+ candidate workflow path, development ref policy, run/attempt, predicate type,
212
+ and source-bundle identity, then recomputes the build-input inventory at
213
+ `main`.
214
+
215
+ The workflow publishes that retained tarball from a sterile private temporary
216
+ directory with `npm publish --ignore-scripts`; it never rebuilds, repacks, or
217
+ rewrites it. npm trusted publishing runs only from the protected `production`
218
+ environment. The registry smoke compares npm `dist.integrity` to the certified
219
+ SRI and runs `npm exec` from a clean OS temporary directory so the monorepo
220
+ workspace cannot shadow the published package. It then invokes the complete
221
+ published `cli_pin` certification matrix for both staging and production. A
222
+ value-free publication-state artifact records the observed npm SRI even when a
223
+ publish response or a later gate fails. Re-dispatching the same immutable
224
+ candidate selector resumes only when npm already serves that exact certified
225
+ SRI; it then repeats the registry and published-matrix proof before evidence,
226
+ tag, or GitHub release creation. A different SRI fails closed. A changed source
227
+ or failed certification needs a higher-version forward fix; no npm version is
228
+ ever rewritten.
229
+
230
+ The workflow requires the immutable, no-bypass CLI tag policy before npm
231
+ publication and revalidates it before tag creation. GitHub hides a ruleset's
232
+ bypass actors from an ordinary workflow token, so the two policy-check steps
233
+ mint a short-lived, repository-scoped GitHub App token solely to inspect that
234
+ property. The App's client ID is the `production` environment variable
235
+ `CLI_RULESET_AUDIT_APP_CLIENT_ID`; its private key is the matching
236
+ `CLI_RULESET_AUDIT_APP_PRIVATE_KEY` environment secret. Its administration
237
+ write grant is required for visibility only and is never available to the npm
238
+ publication step or the tag/release creation step. Only after published evidence
239
+ is retained does the workflow create the annotated
240
+ `uru-cli-vX.Y.Z` tag at the exact dispatched `main` commit and a GitHub release
241
+ with generated notes. The final job verifies an existing tag is annotated and
242
+ points to that same commit before it can resume an interrupted GitHub-release
243
+ request; it never changes the npm package, repoints a tag, or treats a draft or
244
+ prerelease as success. Before the first use, repository policy must contain an
245
+ active, no-bypass `refs/tags/uru-cli-v*` rule that blocks both updates and
246
+ deletions; the workflow queries and requires it before creating the tag.
202
247
 
203
248
  ```bash
204
249
  bun --filter=@uru-intelligence/cli run smoke:registry