@odla-ai/cli 0.7.1 → 0.8.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
@@ -29,8 +29,8 @@ For a project you keep working in, install it as a dev dependency so the
29
29
  shorter `npx odla-ai` form works and the version is pinned by your lockfile:
30
30
 
31
31
  ```bash
32
- npm view @odla-ai/cli@0.7.1 version
33
- npm i -D --save-exact @odla-ai/cli@0.7.1
32
+ npm view @odla-ai/cli@0.8.0 version
33
+ npm i -D --save-exact @odla-ai/cli@0.8.0
34
34
  ```
35
35
 
36
36
  ## Prerequisites
@@ -60,6 +60,12 @@ npx odla-ai provision --write-dev-vars --push-secrets
60
60
  npx odla-ai smoke --env dev
61
61
  npx odla-ai secrets push --env dev
62
62
  npx odla-ai security run . --env dev --ack-redacted-source
63
+ npx odla-ai security github connect --env dev # infers owner/name from git origin
64
+ npx odla-ai security plan --env dev
65
+ npx odla-ai security sources --env dev
66
+ npx odla-ai security run --source <source-id> --ref main --env dev --plan-digest <digest-from-security-plan> --ack-redacted-source
67
+ npx odla-ai security status <job-id>
68
+ npx odla-ai security report <job-id>
63
69
  npx odla-ai admin ai show
64
70
  npx odla-ai admin ai models
65
71
  npx odla-ai admin ai set security --discovery-provider anthropic --discovery-model claude-opus-4-8 --validation-provider openai --validation-model gpt-5.5 --enabled
@@ -127,7 +133,7 @@ when provisioning has not written `.odla/credentials.local.json`.
127
133
 
128
134
  The bundled build/migration skills add a passive pre-ship gate with
129
135
  `@odla-ai/security`: after the exact-version availability check, run
130
- `npm i -D --save-exact @odla-ai/security@0.2.1`, then
136
+ `npm i -D --save-exact @odla-ai/security@0.2.2`, then
131
137
  `npx odla-security scan . --profile odla --out .odla/security/pre-ship --fail-on high --fail-on-candidates critical`.
132
138
  The passive scan remains a separate binary: it makes no model calls and does
133
139
  not execute target code. After explicit redacted-source approval,
@@ -152,12 +158,74 @@ carries a bounded `Retry-After` only when the upstream supplied one. The CLI
152
158
  does not echo arbitrary response text or silently change the admin-selected
153
159
  model.
154
160
  Before installing the exact release, require
155
- `npm view @odla-ai/security@0.2.1 version` to succeed before installation. An
161
+ `npm view @odla-ai/security@0.2.2 version` to succeed before installation. An
156
162
  exact-version `E404` means the release is unavailable, not that the security
157
163
  preflight passed, and does not prove the package name is absent. odla's own
158
164
  engineering environment uses an equivalent internal gate; customer projects
159
165
  should use the published `odla-security` command above.
160
166
 
167
+ For a server-side, commit-pinned review, connect one repository through the
168
+ source-read-only odla GitHub App. The CLI infers `owner/name` from a safe GitHub HTTPS
169
+ or SSH `origin`; pass `--repo owner/name` when it cannot. It opens GitHub's
170
+ installation/authorization page and polls that exact odla attempt:
171
+
172
+ ```bash
173
+ npx odla-ai security github connect --env dev
174
+ npx odla-ai security plan --env dev
175
+ npx odla-ai security sources --env dev
176
+ npx odla-ai security run --source <source-id> --ref main --env dev --plan-digest <digest-from-security-plan> --ack-redacted-source
177
+ ```
178
+
179
+ `security plan` is the owner-readable disclosure preflight. It shows the exact
180
+ admin-selected discovery and validation provider/model, immutable policy
181
+ versions, per-route call/input/output bounds, prompt bundle,
182
+ redaction/report contracts, credential readiness, provider independence,
183
+ report retention, the no-target-execution boundary, and a digest covering that
184
+ complete processing contract.
185
+ `security sources` includes the same plan (and returns `{ plan, sources }` with
186
+ `--json`). A source run fetches it again and refuses to enqueue while either
187
+ route is disabled, lacks a usable platform credential, or is not independently
188
+ routed. Copy the displayed digest into `--plan-digest`; the CLI requires it in
189
+ addition to `--ack-redacted-source` and refuses to let a generic acknowledgement
190
+ silently approve a refetched plan. The enqueue request carries the plan digest
191
+ and both expected policy versions. After verifying the user-supplied plan
192
+ digest, the CLI fetches and prints odla.ai's exact source/ref/profile execution
193
+ intent. A second server-computed digest binds that selection, the redacted
194
+ disclosure, and the plan digest; the CLI sends it as
195
+ `expectedExecutionDigest`. A concurrent selection or admin change returns
196
+ `intent_conflict`, `plan_conflict`, `policy_conflict`, or `security_ai_not_ready` instead of
197
+ silently switching providers or models. Fetch and review a fresh `security
198
+ plan`, then explicitly acknowledge its new digest.
199
+ An omitted `--ref` is previewed as the source's explicit current default-branch
200
+ name. If that default changes before enqueue, odla.ai rejects the stale intent;
201
+ it never defers the choice to GitHub HEAD at Workflow execution time.
202
+
203
+ The source job defaults to follow, renders the normalized report, and applies
204
+ the same `--fail-on high`, `--fail-on-candidates critical`, and incomplete
205
+ coverage gate; use `--no-follow` only to enqueue. `security status <job-id>` and
206
+ `security report <job-id>` recover or inspect a prior job. `security github
207
+ disconnect --source <source-id> --env dev --yes` revokes odla's saved source
208
+ without requiring a GitHub-side uninstall.
209
+
210
+ The client sends only the opaque odla `sourceId`, ref, profile, and explicit
211
+ `sourceDisclosure: "redacted"`; it has no PAT, GitHub installation id, provider
212
+ key, provider, or model flag. odla.ai verifies repository access, resolves the
213
+ ref to an immutable commit SHA, fetches the bounded snapshot server-side, and
214
+ routes bounded best-effort credential-pattern-redacted snippets through the admin-selected System AI discovery
215
+ and independent-validation models. GitHub read authorization is **not** source
216
+ disclosure consent, which is why `--ack-redacted-source` remains required.
217
+ The retained schema has no archive, file-body, explicit source-excerpt, context
218
+ packet, raw provider-response, execution-trace, or reproduction-output field.
219
+ The private normalized report does retain bounded best-effort credential-pattern-redacted
220
+ model-derived prose and repository-relative paths for up to 90 days, so treat
221
+ it as sensitive because that prose can reveal source semantics or an
222
+ unrecognized secret. GitHub and
223
+ provider retention/residency terms remain separate. GitHub
224
+ Checks contain counts/coverage and link to the authenticated Studio report.
225
+ Target code is not executed, and even complete coverage is not proof of
226
+ security; unscheduled, shallow, blocked, budget-exhausted, and projection-
227
+ truncated work stays visible.
228
+
161
229
  `admin ai show|models|set|credentials|credential set|usage|audit` manages platform-funded System
162
230
  AI (`o11y.triage`, `security.discovery`, `security.validation`). It uses a
163
231
  separate, mode-`0600` `.odla/admin-token.local.json` cache. Studio displays the