@reviewsensei/cli-win32-x64 0.1.0 → 0.6.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/bin/_internal/base_library.zip +0 -0
- package/bin/_internal/certifi/cacert.pem +3959 -0
- package/bin/_internal/jsonschema-4.26.0.dist-info/RECORD +1 -1
- package/bin/_internal/review_sensei/default_stages/01-default-review.json +1 -1
- package/bin/_internal/review_sensei/schemas/blocker-admission.schema.json +97 -0
- package/bin/_internal/review_sensei/schemas/canary-binding.schema.json +22 -0
- package/bin/_internal/review_sensei/schemas/candidate-finding.schema.json +59 -0
- package/bin/_internal/review_sensei/schemas/channel-promotion.schema.json +30 -0
- package/bin/_internal/review_sensei/schemas/compatibility-manifest.schema.json +44 -0
- package/bin/_internal/review_sensei/schemas/convergence-sequence-report.schema.json +72 -0
- package/bin/_internal/review_sensei/schemas/conversation-reply.schema.json +6 -1
- package/bin/_internal/review_sensei/schemas/coverage-manifest.schema.json +99 -0
- package/bin/_internal/review_sensei/schemas/evaluation-report.schema.json +17 -0
- package/bin/_internal/review_sensei/schemas/later-finding-classification.schema.json +81 -0
- package/bin/_internal/review_sensei/schemas/learning-entry.schema.json +11 -1
- package/bin/_internal/review_sensei/schemas/learning-feedback.schema.json +56 -0
- package/bin/_internal/review_sensei/schemas/openrouter-qualification.schema.json +108 -0
- package/bin/_internal/review_sensei/schemas/promotion-record.schema.json +39 -0
- package/bin/_internal/review_sensei/schemas/recovery-artifact.schema.json +26 -0
- package/bin/_internal/review_sensei/schemas/review-comment.schema.json +22 -3
- package/bin/_internal/review_sensei/schemas/review-convergence-policy.schema.json +49 -0
- package/bin/_internal/review_sensei/schemas/review-result.schema.json +109 -3
- package/bin/_internal/review_sensei/schemas/review-round-decision.schema.json +58 -0
- package/bin/_internal/review_sensei/schemas/review-stage.schema.json +13 -0
- package/bin/_internal/review_sensei/schemas/review-transaction.schema.json +71 -0
- package/bin/_internal/review_sensei/schemas/run-outcome.schema.json +29 -0
- package/bin/_internal/review_sensei/schemas/session-record.schema.json +312 -0
- package/bin/_internal/review_sensei/schemas/stage.schema.json +6 -0
- package/bin/_internal/review_sensei/schemas/verification-result.schema.json +14 -0
- package/bin/_internal/review_sensei/schemas/verification-scope.schema.json +80 -0
- package/bin/_internal/{review_sensei-0.1.0.dist-info → review_sensei-0.6.0.dist-info}/METADATA +209 -56
- package/bin/_internal/review_sensei-0.6.0.dist-info/RECORD +169 -0
- package/bin/_internal/review_sensei-0.6.0.dist-info/REQUESTED +0 -0
- package/bin/review-sensei.exe +0 -0
- package/package.json +1 -1
- package/bin/_internal/review_sensei-0.1.0.dist-info/RECORD +0 -103
- /package/bin/_internal/{review_sensei-0.1.0.dist-info/REQUESTED → certifi/py.typed} +0 -0
- /package/bin/_internal/{review_sensei-0.1.0.dist-info → review_sensei-0.6.0.dist-info}/INSTALLER +0 -0
- /package/bin/_internal/{review_sensei-0.1.0.dist-info → review_sensei-0.6.0.dist-info}/WHEEL +0 -0
- /package/bin/_internal/{review_sensei-0.1.0.dist-info → review_sensei-0.6.0.dist-info}/direct_url.json +0 -0
- /package/bin/_internal/{review_sensei-0.1.0.dist-info → review_sensei-0.6.0.dist-info}/entry_points.txt +0 -0
- /package/bin/_internal/{review_sensei-0.1.0.dist-info → review_sensei-0.6.0.dist-info}/licenses/LICENSE +0 -0
- /package/bin/_internal/{review_sensei-0.1.0.dist-info → review_sensei-0.6.0.dist-info}/top_level.txt +0 -0
package/bin/_internal/{review_sensei-0.1.0.dist-info → review_sensei-0.6.0.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: review-sensei
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.0
|
|
4
4
|
Summary: Provider-neutral AI code review engine with an Ollama adapter.
|
|
5
5
|
Author: Mohamad Alsabbagh
|
|
6
6
|
License-Expression: MIT
|
|
@@ -22,6 +22,7 @@ Classifier: Topic :: Software Development :: Quality Assurance
|
|
|
22
22
|
Requires-Python: >=3.11
|
|
23
23
|
Description-Content-Type: text/markdown
|
|
24
24
|
License-File: LICENSE
|
|
25
|
+
Requires-Dist: certifi>=2024.8.30
|
|
25
26
|
Requires-Dist: cryptography<51,>=44
|
|
26
27
|
Requires-Dist: jsonschema<5,>=4.18
|
|
27
28
|
Dynamic: license-file
|
|
@@ -35,11 +36,14 @@ providers later.
|
|
|
35
36
|
|
|
36
37
|
> Alpha: this repository provides an open-source review engine and CLI. The
|
|
37
38
|
> primary usage path is running ReviewSensei in your own GitHub Actions
|
|
38
|
-
> workflow. Setup-v4 callers follow the operator-managed public `
|
|
39
|
+
> workflow. Setup-v4 callers follow the operator-managed public `v5` tag; the
|
|
39
40
|
> Worker validates that tag before creating the setup PR and the broker resolves
|
|
40
|
-
> it again when issuing a capability. The
|
|
41
|
+
> it again when issuing a capability. The broker still accepts `v4` during
|
|
42
|
+
> migration. The example workflow installs the
|
|
41
43
|
> requested exact package from PyPI first and falls back to its executing commit
|
|
42
|
-
> only when the distribution is unavailable.
|
|
44
|
+
> only when the distribution is unavailable. Both paths prove the intended
|
|
45
|
+
> release identity against a compatibility manifest; live canary and `v5`
|
|
46
|
+
> movement remain operator-only. It
|
|
43
47
|
> defaults to a local Ollama endpoint and does not require a hosted backend.
|
|
44
48
|
|
|
45
49
|
## What it does
|
|
@@ -47,7 +51,10 @@ providers later.
|
|
|
47
51
|
- Keeps review business logic independent of GitHub and model vendors.
|
|
48
52
|
- Sends a structured prompt to a replaceable provider adapter.
|
|
49
53
|
- Requires provider output to be valid JSON.
|
|
50
|
-
-
|
|
54
|
+
- Filters inline comments that target files or lines outside the supplied diff
|
|
55
|
+
while preserving independently valid findings, including deletions and
|
|
56
|
+
file-level concerns, and reports an explicit coverage outcome for every
|
|
57
|
+
changed file.
|
|
51
58
|
- Supports local Ollama servers and Ollama Cloud through the same adapter.
|
|
52
59
|
- Loads approved repository-local learnings and returns validated learning proposals.
|
|
53
60
|
- Supports ordered review stages with structured categories and explicit focus
|
|
@@ -58,9 +65,13 @@ providers later.
|
|
|
58
65
|
runs and one provider slot per pull request.
|
|
59
66
|
- Publishes versioned JSON Schemas for review results, learnings, categories,
|
|
60
67
|
stages, and concurrency plans.
|
|
68
|
+
- Adds optional blocking, severity, fix-effort, and lens labels with
|
|
69
|
+
deterministic summary counts and visual cues for fast triage.
|
|
61
70
|
- Provides a narrow GitHub App JWT and installation-token auth adapter for
|
|
62
71
|
optional App-identity comments or reviews.
|
|
63
72
|
- Avoids retaining raw prompts and provider responses in the engine.
|
|
73
|
+
- Provides `review-sensei doctor` and a zero-write `review-sensei plan`
|
|
74
|
+
preview so skipped or failed setup is diagnosable without forking workflows.
|
|
64
75
|
|
|
65
76
|
## Quick start
|
|
66
77
|
|
|
@@ -87,7 +98,7 @@ Ollama Cloud is explicit opt-in:
|
|
|
87
98
|
```bash
|
|
88
99
|
export OLLAMA_API_KEY="your-key"
|
|
89
100
|
export REVIEWSENSEI_PROVIDER_MODE="cloud"
|
|
90
|
-
export REVIEWSENSEI_CLOUD_MODEL="deepseek-v4-flash:cloud"
|
|
101
|
+
export REVIEWSENSEI_CLOUD_MODEL="deepseek-v4.1-flash:cloud"
|
|
91
102
|
unset OLLAMA_BASE_URL OLLAMA_MODEL
|
|
92
103
|
```
|
|
93
104
|
|
|
@@ -97,8 +108,8 @@ Node.js 22 or newer can invoke the same Python review engine through the
|
|
|
97
108
|
provider-neutral `@reviewsensei/cli` launcher:
|
|
98
109
|
|
|
99
110
|
```bash
|
|
100
|
-
npx --yes @reviewsensei/cli@0.
|
|
101
|
-
npx --yes @reviewsensei/cli@0.
|
|
111
|
+
npx --yes @reviewsensei/cli@0.6.0 --version
|
|
112
|
+
npx --yes @reviewsensei/cli@0.6.0 --help
|
|
102
113
|
```
|
|
103
114
|
|
|
104
115
|
The launcher selects one of the five native packages (macOS arm64/x64,
|
|
@@ -112,7 +123,7 @@ The package version is intentionally identical to the Python project and
|
|
|
112
123
|
release tag. See [`docs/installation.md`](docs/installation.md),
|
|
113
124
|
[`docs/releasing.md`](docs/releasing.md), and [ADR 0031](docs/adr/0031-npm-launcher-and-standalone-platform-packages.md)
|
|
114
125
|
for prerequisites, release ordering, provenance, and version-forward rollback
|
|
115
|
-
guidance
|
|
126
|
+
guidance.
|
|
116
127
|
|
|
117
128
|
Generate a bounded diff and run a review:
|
|
118
129
|
|
|
@@ -122,6 +133,8 @@ review-sensei prepare-diff \
|
|
|
122
133
|
--base-ref main \
|
|
123
134
|
--head-ref feature \
|
|
124
135
|
--output pr.patch
|
|
136
|
+
review-sensei doctor
|
|
137
|
+
review-sensei plan --diff pr.patch --repository owner/repository --pull-request 42
|
|
125
138
|
review-sensei \
|
|
126
139
|
--diff pr.patch \
|
|
127
140
|
--repository owner/repository \
|
|
@@ -158,27 +171,45 @@ is not a hosted review service, webhook receiver, or durable delivery store.
|
|
|
158
171
|
### GitHub App setup-v4 integration
|
|
159
172
|
|
|
160
173
|
The optional setup-v4 integration adds a reviewable, generated caller by using
|
|
161
|
-
the operator-managed `
|
|
162
|
-
`malsabbagh/review-sensei/.github/workflows/review-sensei-run.yml@
|
|
174
|
+
the operator-managed `v5` git tag as the only update channel:
|
|
175
|
+
`malsabbagh/review-sensei/.github/workflows/review-sensei-run.yml@v5`.
|
|
163
176
|
The Worker validates the tag before writing the caller, and the Cloudflare
|
|
164
177
|
broker resolves the same tag at capability exchange time and checks the
|
|
165
|
-
executing workflow SHA. Moving `
|
|
178
|
+
executing workflow SHA. Moving `v5` is therefore the public cutoff action.
|
|
166
179
|
The selected provider mode applies consistently to automatic pull-request
|
|
167
180
|
reviews, manual reviews, learning proposals, artifacts, and authorized
|
|
168
181
|
`@sensei` conversations. Cloud runs use GitHub-hosted compute; local runs use
|
|
169
182
|
the operator-controlled labeled self-hosted runner. Every generated write
|
|
170
|
-
switch defaults to `false
|
|
183
|
+
switch except automatic approval defaults to `false`; automatic approval
|
|
184
|
+
defaults to `true` and requires automatic review and GitHub writes as separate
|
|
185
|
+
gates.
|
|
171
186
|
|
|
172
187
|
Cloud mode may pass the existing customer-owned `OLLAMA_API_KEY` secret by
|
|
173
188
|
name (`secrets.OLLAMA_API_KEY`) to the public reusable workflow. The App
|
|
174
189
|
does not create, read, persist, log, or reveal that secret value. The Worker
|
|
175
|
-
broker
|
|
176
|
-
|
|
190
|
+
broker issues a short-lived, capability-scoped installation token for each
|
|
191
|
+
authorized exchange after verifying
|
|
192
|
+
the signed Actions OIDC identity, exact `v5` workflow ref and runtime SHA,
|
|
177
193
|
repository identity, fork status, installation, replay state, and rate limit.
|
|
194
|
+
For each write operation, the workflow obtains a separate short-lived token for
|
|
195
|
+
the requested capability: `review_publish` for review publication,
|
|
196
|
+
`inline_reply` or `issue_reply` for replies, and `learning_write` for learning
|
|
197
|
+
pull requests. The broker-issued token grants the workflow the capability to
|
|
198
|
+
make the corresponding GitHub API write; Cloudflare does not perform that
|
|
199
|
+
write. Review and reply capabilities grant `pull_requests: write`;
|
|
200
|
+
`learning_write` additionally grants `contents: write`. A review-publication
|
|
201
|
+
token cannot write repository contents.
|
|
202
|
+
Cloudflare does not run the review engine or send prompts to the model provider;
|
|
203
|
+
the GitHub Actions job performs those operations in the configured provider
|
|
204
|
+
environment.
|
|
205
|
+
|
|
206
|
+
During installation or migration, the Worker separately uses GitHub App
|
|
207
|
+
authentication to obtain a repository-scoped installation token for the setup
|
|
208
|
+
branch, pull request, and default variables.
|
|
178
209
|
|
|
179
210
|
Installation, reinstall, permission-acceptance, and repository-added events
|
|
180
211
|
reconcile absent or older generated clients through at most one setup-v4 PR.
|
|
181
|
-
Current v4 is a no-op; managed v3 and older generated clients are migrated
|
|
212
|
+
Current tag-following setup-v4 is a no-op; managed v3 and older generated clients are migrated
|
|
182
213
|
through a setup PR, while custom, malformed, and future setup files are no-write
|
|
183
214
|
cases. See [`docs/installation.md`](docs/installation.md),
|
|
184
215
|
[`docs/github-app-registration.md`](docs/github-app-registration.md), and the
|
|
@@ -188,8 +219,8 @@ that never distributes the App private key.
|
|
|
188
219
|
|
|
189
220
|
## Offline evaluation
|
|
190
221
|
|
|
191
|
-
|
|
192
|
-
or provider credentials:
|
|
222
|
+
The repository includes a synthetic, CC0-1.0 corpus that runs without network
|
|
223
|
+
access or provider credentials:
|
|
193
224
|
|
|
194
225
|
```bash
|
|
195
226
|
python scripts/validate_evaluation_corpus.py
|
|
@@ -232,6 +263,15 @@ bytes for the compact UTF-8 serialization of the complete proposal array
|
|
|
232
263
|
result; and line numbers up to 2,147,483,647. These are byte limits unless a
|
|
233
264
|
unit is stated otherwise.
|
|
234
265
|
|
|
266
|
+
Every changed file in a review result receives an explicit coverage outcome
|
|
267
|
+
(`reviewed`, `partially-reviewed`, `excluded-by-policy`, `unsupported`, or
|
|
268
|
+
`budget-exhausted`). Incomplete enumeration is never reported as fully
|
|
269
|
+
reviewed. Finding locations may bind to a right-side added line (the legacy
|
|
270
|
+
default), a left-side deleted line, or a file-level concern. Per-request
|
|
271
|
+
limits stay in place; opt-in `--orchestrate-large-changes` adds a separate
|
|
272
|
+
total-work budget so larger diffs can be chunked without silent truncation or
|
|
273
|
+
unbounded provider calls.
|
|
274
|
+
|
|
235
275
|
Repository paths are strict canonical NFC UTF-8, `/`-separated, relative paths:
|
|
236
276
|
no empty, dot, parent, absolute, drive/UNC, backslash, surrounding whitespace,
|
|
237
277
|
control/format/surrogate, or silently normalized forms are accepted. Glob
|
|
@@ -239,7 +279,10 @@ tokens are allowed only in pattern fields; real Git paths may contain literal
|
|
|
239
279
|
glob characters and are preserved without being interpreted. Git C-quoted
|
|
240
280
|
paths are decoded as strict bytes before the same path checks. Exact duplicate
|
|
241
281
|
comments identified by `(path, line, body)` use stable first-wins ordering;
|
|
242
|
-
comments that differ in body remain distinct.
|
|
282
|
+
comments that differ in body remain distinct. Across heads, findings also carry
|
|
283
|
+
a stable fingerprint from path, symbol, defect kind, and optional evidence id
|
|
284
|
+
so a moved or rephrased concern does not open a duplicate ReviewSensei thread,
|
|
285
|
+
and a later pass that omits a finding is not treated as a fix. Expected failures are sanitized
|
|
243
286
|
and never include a prompt, diff, provider body, credential, or supplied secret
|
|
244
287
|
marker. Invalid structured provider output receives one fresh, sanitized
|
|
245
288
|
correction attempt per stage; the rejected attempt is discarded completely and
|
|
@@ -305,17 +348,21 @@ category to a comment, it must use one of the active stage ids; classification
|
|
|
305
348
|
is optional for compatibility. If multiple stages reuse an id, the entire lens
|
|
306
349
|
definition must be identical.
|
|
307
350
|
|
|
308
|
-
Inline findings may also carry independent `
|
|
309
|
-
`medium`, or `low`) and `fix_effort` (`trivial`, `small`,
|
|
310
|
-
or `unknown`) labels.
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
351
|
+
Inline findings may also carry independent `blocking`, `severity`
|
|
352
|
+
(`critical`, `high`, `medium`, or `low`), and `fix_effort` (`trivial`, `small`,
|
|
353
|
+
`moderate`, `large`, or `unknown`) labels. `blocking` controls whether the
|
|
354
|
+
finding prevents approval; `false` identifies an optional follow-up.
|
|
355
|
+
If it is omitted, only case-insensitive canonical `critical` and `high`
|
|
356
|
+
severity values block approval. Missing, lower-severity, and legacy free-form
|
|
357
|
+
severity values are non-blocking.
|
|
358
|
+
Severity describes likely impact, while fix effort describes remediation scope
|
|
359
|
+
rather than a time estimate. The existing `category` id is the lens source and
|
|
360
|
+
is shown as a human-readable lens label; no composite priority score or second
|
|
361
|
+
`lens` field is emitted. When present, the same labels appear on inline GitHub
|
|
362
|
+
comments and deterministic blocking/severity/lens/quick-win counts appear in
|
|
363
|
+
the review summary. Labels are validated as printable, bounded provider text
|
|
364
|
+
and Markdown-escaped before publication so untrusted output cannot inject
|
|
365
|
+
structure or exceed the configured comment-body limit.
|
|
319
366
|
The formatted summary is checked against `max_summary_bytes`, and the complete
|
|
320
367
|
framed GitHub review body is bounded to 65,536 bytes before publication.
|
|
321
368
|
|
|
@@ -377,6 +424,47 @@ packaged default pipeline includes an architecture lens whose optional sources
|
|
|
377
424
|
are `AGENTS.md`, `docs/architecture.md`, `docs/architecture/**/*.md`, and
|
|
378
425
|
`docs/adr/**/*.md`.
|
|
379
426
|
|
|
427
|
+
### Opt-in symbol-aware source context
|
|
428
|
+
|
|
429
|
+
By default, reviews do **not** load related source files. That keeps the
|
|
430
|
+
trusted context boundary at configured documents and approved learnings.
|
|
431
|
+
Operators may opt in to bounded Python symbol-aware context from the same
|
|
432
|
+
trusted base checkout:
|
|
433
|
+
|
|
434
|
+
```bash
|
|
435
|
+
review-sensei --diff pr.patch \
|
|
436
|
+
--context-root /path/to/target-branch-checkout \
|
|
437
|
+
--enable-symbol-context \
|
|
438
|
+
--base-sha <trusted-base-commit-sha>
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
`--enable-symbol-context` can also be set with
|
|
442
|
+
`REVIEWSENSEI_ENABLE_SYMBOL_CONTEXT=true`. `--base-sha` is required when the
|
|
443
|
+
selector is enabled and identifies the immutable trusted-base snapshot. Optional
|
|
444
|
+
`--head-sha` is recorded only as untrusted coverage metadata; head trees, build
|
|
445
|
+
scripts, hooks, tests, and package installers are never checked out or
|
|
446
|
+
executed for this context.
|
|
447
|
+
|
|
448
|
+
The documented language set is Python. The selector uses static AST parsing
|
|
449
|
+
for enclosing functions/classes, local imports, Protocol/ABC interfaces,
|
|
450
|
+
same-directory callers, and conventional associated tests. JavaScript and
|
|
451
|
+
TypeScript files may be included as a whole-file fallback and are reported as
|
|
452
|
+
`unsupported-language`. Canonical path, traversal, symlink, file-type, and
|
|
453
|
+
secret-sensitive-file protections apply. Identical snapshot and policy inputs
|
|
454
|
+
produce identical excerpts and outcome ordering.
|
|
455
|
+
|
|
456
|
+
Each excerpt records path, base commit SHA, Git blob object id, line range,
|
|
457
|
+
selection reason, and SHA-256 digest. Ambiguous parses, excluded paths,
|
|
458
|
+
unsupported languages, and exhausted budgets appear in result
|
|
459
|
+
`source_context` coverage; they are not presented as complete understanding.
|
|
460
|
+
Bounded relationship expansion names the bound it reached, using
|
|
461
|
+
`directory-truncated` for a capped caller-directory listing and
|
|
462
|
+
`relations-truncated` for a capped import or caller candidate set.
|
|
463
|
+
When the opt-in policy is enabled, exhausting the configured file or byte
|
|
464
|
+
budget fails closed. Evaluation under
|
|
465
|
+
[#33](https://github.com/malsabbagh/review-sensei/issues/33) is required
|
|
466
|
+
before this selector can become the default.
|
|
467
|
+
|
|
380
468
|
## Repository-local learnings
|
|
381
469
|
|
|
382
470
|
Durable repository knowledge lives in the reviewed repository under
|
|
@@ -402,6 +490,33 @@ must be a checkout of the target branch or target commit, not the untrusted
|
|
|
402
490
|
head checkout. This prevents a pull request from changing its own review
|
|
403
491
|
context before it is merged.
|
|
404
492
|
|
|
493
|
+
Existing files may omit lifecycle metadata. Optional bounded fields include
|
|
494
|
+
`owner`, `provenance`, `reviewed_at`, `expires_at`, `supersedes`, and
|
|
495
|
+
`superseded_by`. Status may be `active`, `retired`, or `superseded`.
|
|
496
|
+
Superseded and retired entries stay on disk for provenance and Git rollback,
|
|
497
|
+
but they are not selected for later prompts. Diagnostics for stale,
|
|
498
|
+
conflicting, missing-superseder, or cyclic entries are advisory; ReviewSensei
|
|
499
|
+
never deletes or rewrites approved knowledge automatically.
|
|
500
|
+
|
|
501
|
+
```bash
|
|
502
|
+
review-sensei learnings diagnose --learning-root /path/to/target-branch --json
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
Opt-in finding feedback is a separate `learning-feedback` document with
|
|
506
|
+
outcomes `useful`, `incorrect`, `obsolete`, and `unverified`. Absence of
|
|
507
|
+
feedback is not approval, and feedback never becomes trusted review context.
|
|
508
|
+
|
|
509
|
+
Fixture evaluation can compare the same cases with and without selected
|
|
510
|
+
approved learnings. The report records precision/recall/false-positive deltas
|
|
511
|
+
as estimates, not causal proof:
|
|
512
|
+
|
|
513
|
+
```bash
|
|
514
|
+
review-sensei evaluate --mode fixture --corpus evaluation/v1/corpus.json \
|
|
515
|
+
--compare-learnings --learning-root /path/to/target-branch
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
See [ADR 0036](docs/adr/0036-learning-lifecycle-diagnostics-and-feedback.md).
|
|
519
|
+
|
|
405
520
|
## Local Ollama
|
|
406
521
|
|
|
407
522
|
```bash
|
|
@@ -413,6 +528,12 @@ review-sensei --diff pr.patch
|
|
|
413
528
|
|
|
414
529
|
## Providers
|
|
415
530
|
|
|
531
|
+
The shipped registry keys are `ollama`, `openai-compatible`, and `openrouter`.
|
|
532
|
+
Operator defaults, workflow modes, named profiles, credentials, and hosted
|
|
533
|
+
OpenRouter allowlists are documented in [`docs/installation.md`](docs/installation.md).
|
|
534
|
+
The release-aware public matrix lives at
|
|
535
|
+
[reviewsensei.dev/providers/](https://reviewsensei.dev/providers/).
|
|
536
|
+
|
|
416
537
|
The core depends on this small interface:
|
|
417
538
|
|
|
418
539
|
```python
|
|
@@ -428,19 +549,28 @@ provider's API and returning `ProviderResponse`. The review service, diff
|
|
|
428
549
|
validation, output schema, and GitHub-independent behavior remain unchanged.
|
|
429
550
|
See [the architecture guide](docs/architecture.md).
|
|
430
551
|
|
|
552
|
+
The OpenAI-compatible adapter is restricted to `https://api.openai.com` by
|
|
553
|
+
default and rejects redirects so its bearer token cannot be silently forwarded
|
|
554
|
+
to another host. An explicitly trusted private or compatible service may be
|
|
555
|
+
selected from Python with `allow_custom_endpoint=True`; this is an operator
|
|
556
|
+
acknowledgement of data egress and still requires a non-empty API key. Custom
|
|
557
|
+
openers own their transport and redirect policy, while the built-in opener uses
|
|
558
|
+
the system CA store (or an explicitly configured, regular `SSL_CERT_FILE`) and
|
|
559
|
+
reuses one verified TLS context for the provider lifetime. Local Ollama and
|
|
560
|
+
Ollama Cloud remain separate provider profiles; selecting Cloud is the explicit
|
|
561
|
+
network egress path for Ollama deployments.
|
|
562
|
+
|
|
431
563
|
## GitHub integration
|
|
432
564
|
|
|
433
|
-
The GitHub App opens a setup-v4 PR containing a thin caller
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
only when that package/version is unavailable
|
|
437
|
-
|
|
438
|
-
failures remain fatal. All nine
|
|
565
|
+
The GitHub App opens a setup-v4 PR containing a thin caller that follows the
|
|
566
|
+
operator-managed `v5` public git tag. The reusable workflow prefers the
|
|
567
|
+
requested exact package from PyPI and falls back to its executing workflow
|
|
568
|
+
commit only when that package/version is unavailable. Unrelated PyPI
|
|
569
|
+
installation failures remain fatal. All nine
|
|
439
570
|
`REVIEWSENSEI_*` repository variables are created with safe defaults: automatic
|
|
440
571
|
review, GitHub writes, learning PRs, mention replies, and artifact upload are
|
|
441
|
-
off
|
|
442
|
-
`OLLAMA_API_KEY` secret.
|
|
443
|
-
The five feature switches are all disabled by default.
|
|
572
|
+
off, while automatic approval is `true` when those review and write gates are
|
|
573
|
+
enabled. The App never creates the customer-owned `OLLAMA_API_KEY` secret.
|
|
444
574
|
|
|
445
575
|
When explicitly enabled, same-repository pull requests can run automatic review
|
|
446
576
|
with either provider mode: cloud on a GitHub-hosted runner or local Ollama on
|
|
@@ -454,19 +584,27 @@ item only when the transport reports an oversized response. The 512 KiB
|
|
|
454
584
|
transport ceiling remains unchanged. Fork pull requests fail closed before
|
|
455
585
|
provider or broker access.
|
|
456
586
|
|
|
457
|
-
When automatic review and GitHub writes are enabled,
|
|
458
|
-
`
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
587
|
+
When automatic review and GitHub writes are enabled, automatic approval is on by
|
|
588
|
+
default; set `REVIEWSENSEI_AUTO_APPROVE=false` for an explicit opt-out.
|
|
589
|
+
ReviewSensei publishes blocking findings as `REQUEST_CHANGES` and non-blocking
|
|
590
|
+
findings as `COMMENT`, then invokes one shared, idempotent approval finalizer.
|
|
591
|
+
It emits `APPROVE` for an eligible exact head when no unresolved ReviewSensei
|
|
592
|
+
root is classified blocking. A later execution on the same commit still
|
|
593
|
+
requests changes if blocking comments appear after an approval, and it
|
|
594
|
+
approves after an earlier change request only once those blocking roots are
|
|
595
|
+
resolved. Unresolved non-blocking ReviewSensei findings and human threads do
|
|
596
|
+
not withhold approval. An unclassified ReviewSensei root, malformed or
|
|
597
|
+
incomplete thread data, or a draft/closed/fork/stale/App-authored PR fails
|
|
598
|
+
closed. The finalizer runs after review publication and after the AI resolves a
|
|
599
|
+
blocking ReviewSensei thread; `@sensei` replies themselves remain ordinary
|
|
600
|
+
comments. Existing approval markers prevent duplicate approvals.
|
|
601
|
+
|
|
602
|
+
The approval policy is deliberately conservative: explicit blocking metadata,
|
|
603
|
+
or an unclassified canonical `critical`/`high` severity, blocks approval.
|
|
604
|
+
Resolving a thread manually does not start GitHub Actions, so rerun the review
|
|
605
|
+
workflow (or push a new head) if a manually resolved blocking root was the last
|
|
606
|
+
blocker. See
|
|
607
|
+
[ADR 0032](docs/adr/0032-blocking-finding-classification-for-approvals.md)
|
|
470
608
|
for the criteria and rollback path.
|
|
471
609
|
|
|
472
610
|
Manual review and authorized `@sensei` replies use the same selected provider
|
|
@@ -489,11 +627,14 @@ Hosts that run more than one review worker can reuse the same deterministic
|
|
|
489
627
|
policy:
|
|
490
628
|
|
|
491
629
|
```python
|
|
492
|
-
from review_sensei import ReviewConcurrencyPlan, ReviewService
|
|
630
|
+
from review_sensei import ProviderAdmission, ReviewConcurrencyPlan, ReviewService
|
|
493
631
|
|
|
494
632
|
plan = ReviewService(provider).concurrency_plan(request)
|
|
495
633
|
# Enforce plan.workflow in the run scheduler.
|
|
496
634
|
# Enforce plan.provider in the provider-stage scheduler.
|
|
635
|
+
admission = ProviderAdmission(plan.provider)
|
|
636
|
+
with admission.acquire():
|
|
637
|
+
result = ReviewService(provider).review(request)
|
|
497
638
|
```
|
|
498
639
|
|
|
499
640
|
The workflow group is keyed by repository and pull request and is latest-wins.
|
|
@@ -501,8 +642,14 @@ The provider group uses the same pull-request identity, admits one active
|
|
|
501
642
|
provider stage, and does not cancel the active stage. Different pull requests
|
|
502
643
|
therefore remain independent. `ReviewConcurrencyPlan.for_non_review_trigger()`
|
|
503
644
|
creates an isolated workflow group with no provider slot for triggers that do
|
|
504
|
-
not request a review.
|
|
505
|
-
|
|
645
|
+
not request a review.
|
|
646
|
+
|
|
647
|
+
GitHub-hosted runs enforce this with native workflow `concurrency` groups
|
|
648
|
+
(`max_active=1`, cancel-in-progress for reviews). Local hosts and tests can
|
|
649
|
+
use `ProviderAdmission` to enforce the same bound in-process, including lease
|
|
650
|
+
release after cancellation or failure and a hard cap on waiters. ReviewSensei
|
|
651
|
+
does not own durable queue state, a global cross-repository lock, or
|
|
652
|
+
cross-process cancellation.
|
|
506
653
|
|
|
507
654
|
## Data handling
|
|
508
655
|
|
|
@@ -539,4 +686,10 @@ See [CONTRIBUTING.md](CONTRIBUTING.md), [SECURITY.md](SECURITY.md), and
|
|
|
539
686
|
|
|
540
687
|
## License
|
|
541
688
|
|
|
542
|
-
ReviewSensei is released under the [MIT License](LICENSE).
|
|
689
|
+
ReviewSensei is released under the [MIT License](LICENSE). The synthetic
|
|
690
|
+
evaluation corpus under `evaluation/v1/` is CC0-1.0. For the ownership
|
|
691
|
+
inventory, trademark usage, contribution licensing (DCO; no CLA), and
|
|
692
|
+
Community / Managed / Enterprise boundary, see
|
|
693
|
+
[`docs/ownership-and-licensing.md`](docs/ownership-and-licensing.md),
|
|
694
|
+
[`TRADEMARKS.md`](TRADEMARKS.md), [`CONTRIBUTING.md`](CONTRIBUTING.md), and
|
|
695
|
+
[ADR 0040](docs/adr/0040-community-managed-enterprise-boundary.md).
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
../../Scripts/review-sensei.exe,sha256=Vu07lgOqDcav2JxkLuzbCNlDQ7GW57Jj8yUsvh9EAc4,108355
|
|
2
|
+
review_sensei-0.6.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
|
3
|
+
review_sensei-0.6.0.dist-info/METADATA,sha256=wh71gsskPMGnBkITbit01j1gQFoGj7F2UtNwfyn8fBs,33971
|
|
4
|
+
review_sensei-0.6.0.dist-info/RECORD,,
|
|
5
|
+
review_sensei-0.6.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
review_sensei-0.6.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
|
|
7
|
+
review_sensei-0.6.0.dist-info/direct_url.json,sha256=EDhpXdSFq1qZfl2FCT07Hg2gleInjGFaAwkFy0selqU,67
|
|
8
|
+
review_sensei-0.6.0.dist-info/entry_points.txt,sha256=Eki1ToC6hiOv8PMEAd2Cnbh5WWstVzzzf0XmHBHzpMQ,57
|
|
9
|
+
review_sensei-0.6.0.dist-info/licenses/LICENSE,sha256=-eVBqOV92YK1K76UIcK5MrgUh0EiQMe8xNhSysQE68s,1095
|
|
10
|
+
review_sensei-0.6.0.dist-info/top_level.txt,sha256=VCF4gJIJPP3MPJntoITDjMhJ8MUZfVLj-z3-VUQ9XDY,14
|
|
11
|
+
review_sensei/__init__.py,sha256=1oGDUJRXx_j7NABg72nM0m6KyZz01k0mMaPFBy9ZHfI,10218
|
|
12
|
+
review_sensei/__main__.py,sha256=0iDYjdmiXNBinFF23WUyotsdpA6wFKjoB5aw3esTSRg,83
|
|
13
|
+
review_sensei/__pycache__/__init__.cpython-311.pyc,,
|
|
14
|
+
review_sensei/__pycache__/__main__.cpython-311.pyc,,
|
|
15
|
+
review_sensei/__pycache__/baseline.cpython-311.pyc,,
|
|
16
|
+
review_sensei/__pycache__/cli.cpython-311.pyc,,
|
|
17
|
+
review_sensei/__pycache__/concurrency.cpython-311.pyc,,
|
|
18
|
+
review_sensei/__pycache__/context.cpython-311.pyc,,
|
|
19
|
+
review_sensei/__pycache__/convergence.cpython-311.pyc,,
|
|
20
|
+
review_sensei/__pycache__/conversation.cpython-311.pyc,,
|
|
21
|
+
review_sensei/__pycache__/coverage.cpython-311.pyc,,
|
|
22
|
+
review_sensei/__pycache__/diagnostics.cpython-311.pyc,,
|
|
23
|
+
review_sensei/__pycache__/diff.cpython-311.pyc,,
|
|
24
|
+
review_sensei/__pycache__/disposition.cpython-311.pyc,,
|
|
25
|
+
review_sensei/__pycache__/errors.cpython-311.pyc,,
|
|
26
|
+
review_sensei/__pycache__/evaluation.cpython-311.pyc,,
|
|
27
|
+
review_sensei/__pycache__/learnings.cpython-311.pyc,,
|
|
28
|
+
review_sensei/__pycache__/models.cpython-311.pyc,,
|
|
29
|
+
review_sensei/__pycache__/openrouter_qualification.cpython-311.pyc,,
|
|
30
|
+
review_sensei/__pycache__/outcomes.cpython-311.pyc,,
|
|
31
|
+
review_sensei/__pycache__/patches.cpython-311.pyc,,
|
|
32
|
+
review_sensei/__pycache__/planning.cpython-311.pyc,,
|
|
33
|
+
review_sensei/__pycache__/presentation.cpython-311.pyc,,
|
|
34
|
+
review_sensei/__pycache__/provider_config.cpython-311.pyc,,
|
|
35
|
+
review_sensei/__pycache__/release_manifest.cpython-311.pyc,,
|
|
36
|
+
review_sensei/__pycache__/schemas.cpython-311.pyc,,
|
|
37
|
+
review_sensei/__pycache__/sequence.cpython-311.pyc,,
|
|
38
|
+
review_sensei/__pycache__/service.cpython-311.pyc,,
|
|
39
|
+
review_sensei/__pycache__/session.cpython-311.pyc,,
|
|
40
|
+
review_sensei/__pycache__/stages.cpython-311.pyc,,
|
|
41
|
+
review_sensei/__pycache__/validation.cpython-311.pyc,,
|
|
42
|
+
review_sensei/__pycache__/verifier.cpython-311.pyc,,
|
|
43
|
+
review_sensei/__pycache__/workflow.cpython-311.pyc,,
|
|
44
|
+
review_sensei/baseline.py,sha256=np9Q4Mef5jQO48TP0Tys22_KfmcsW7RYakQt2nSC6u4,51935
|
|
45
|
+
review_sensei/cli.py,sha256=U51Jidt5G94lUW-m823HHa2bXQX1n51RP8pGHFqcLck,118611
|
|
46
|
+
review_sensei/concurrency.py,sha256=7nqMDNaIl7YoKafkAF1ctXu6D5SFxXosm-1407OKimQ,20097
|
|
47
|
+
review_sensei/context.py,sha256=ejDs0EBaUVTbAkrs-wACGXbgQcEwClX0Tultn2Mo_R0,96255
|
|
48
|
+
review_sensei/convergence.py,sha256=_-Wqk7QCqo9cXIgrn8psj1CS7ab_v9XUfKSu7f5a4bY,53279
|
|
49
|
+
review_sensei/conversation.py,sha256=KRWtF8JnmOrOQsvAX4q-d0UzzXjNp2XeePSbyIm4_pw,7467
|
|
50
|
+
review_sensei/coverage.py,sha256=8fVsO4x2swqaa9QI5fcqeqB_FB6m0JfKrlRCg7_KA6E,12951
|
|
51
|
+
review_sensei/default_categories/01-correctness.json,sha256=ZeTTvEavHU6_ih7JKhv8a6gH-4wRJGv0abckRWNWTfs,211
|
|
52
|
+
review_sensei/default_categories/02-security.json,sha256=6mz8Hlteb9q1PouLDmDoR-1wxrN31XR2X5I9yoYiG-E,231
|
|
53
|
+
review_sensei/default_categories/03-architecture.json,sha256=Fg3VsUCzl9trCpSnoOgwTqfNHbB7a4znEfrw2apqjXA,806
|
|
54
|
+
review_sensei/default_categories/03-maintainability.json,sha256=eyF9_slQ50LwEqSSet63jthfNp9ZOTnwiDVtVYjVv1A,229
|
|
55
|
+
review_sensei/default_categories/04-tests.json,sha256=UHhvH79bae9FmLJT_MYNvki4Y9xhJDLpDuLdgp2npe0,208
|
|
56
|
+
review_sensei/default_stages/01-default-review.json,sha256=-y9LP_8XNqEPpRN2K8z_qMHRqXyP6ZsiydzZFHozZwY,3463
|
|
57
|
+
review_sensei/diagnostics.py,sha256=CAYZPlOBlJ8ZNyPUrbzX-bcnbigxhA593_aaGqNj5hY,44971
|
|
58
|
+
review_sensei/diff.py,sha256=na5MWhYcnRimFwGElNBiSp27Su_oufHhWiGtm1W38oY,32057
|
|
59
|
+
review_sensei/disposition.py,sha256=jENlqe7JU3kPCBo-0_jxpfEkb_rltcEvXoRihstmo7s,24908
|
|
60
|
+
review_sensei/errors.py,sha256=soaPVSCgMCguGB3er1HqTIaVpIaYo7sQWz3gvn6wSIY,2609
|
|
61
|
+
review_sensei/evaluation.py,sha256=kKhbcF3XpHhDYLW8e_dxGjcS0sXJpz8nXYsPpUuXnBE,59450
|
|
62
|
+
review_sensei/hosting/__init__.py,sha256=zqIukHwfUzai3x7dJS2nFNlVhP7EQWQ47-4pGCi2Sz0,84
|
|
63
|
+
review_sensei/hosting/__pycache__/__init__.cpython-311.pyc,,
|
|
64
|
+
review_sensei/hosting/__pycache__/openrouter_workflow.cpython-311.pyc,,
|
|
65
|
+
review_sensei/hosting/github/__init__.py,sha256=x-mVioarkGsUF8Uwh4SfpEMOu51lP9p6tA4N0G6pB8o,5452
|
|
66
|
+
review_sensei/hosting/github/__pycache__/__init__.cpython-311.pyc,,
|
|
67
|
+
review_sensei/hosting/github/__pycache__/application.cpython-311.pyc,,
|
|
68
|
+
review_sensei/hosting/github/__pycache__/approval.cpython-311.pyc,,
|
|
69
|
+
review_sensei/hosting/github/__pycache__/auth.cpython-311.pyc,,
|
|
70
|
+
review_sensei/hosting/github/__pycache__/broker.cpython-311.pyc,,
|
|
71
|
+
review_sensei/hosting/github/__pycache__/broker_client.cpython-311.pyc,,
|
|
72
|
+
review_sensei/hosting/github/__pycache__/conversation.cpython-311.pyc,,
|
|
73
|
+
review_sensei/hosting/github/__pycache__/errors.cpython-311.pyc,,
|
|
74
|
+
review_sensei/hosting/github/__pycache__/http.cpython-311.pyc,,
|
|
75
|
+
review_sensei/hosting/github/__pycache__/jwt.cpython-311.pyc,,
|
|
76
|
+
review_sensei/hosting/github/__pycache__/learning_pr.cpython-311.pyc,,
|
|
77
|
+
review_sensei/hosting/github/__pycache__/oidc.cpython-311.pyc,,
|
|
78
|
+
review_sensei/hosting/github/__pycache__/publication.cpython-311.pyc,,
|
|
79
|
+
review_sensei/hosting/github/__pycache__/session_ledger.cpython-311.pyc,,
|
|
80
|
+
review_sensei/hosting/github/__pycache__/setup.cpython-311.pyc,,
|
|
81
|
+
review_sensei/hosting/github/__pycache__/trigger.cpython-311.pyc,,
|
|
82
|
+
review_sensei/hosting/github/__pycache__/webhooks.cpython-311.pyc,,
|
|
83
|
+
review_sensei/hosting/github/application.py,sha256=jvL3ExLqnb8e4O1BnVgXJEePxTJd7z14NbYSfr5jpsg,68048
|
|
84
|
+
review_sensei/hosting/github/approval.py,sha256=nx8h8oDvljrdrXkNahMXrvk3kMVkMy6owztXZPRwsqA,4189
|
|
85
|
+
review_sensei/hosting/github/auth.py,sha256=koITagUX9piVboGJ_smEhPsCf4rOQkOqqSKeLKvFRbc,19055
|
|
86
|
+
review_sensei/hosting/github/broker.py,sha256=FFC7DsFhzy1tENXTCmLNuYzX2cHaYsgMkDGwXEcJaTU,18014
|
|
87
|
+
review_sensei/hosting/github/broker_client.py,sha256=v8_PQe7yF0kXtZOEbXxWcw2xW-Z7COQt9Zi8CTsQkHM,16573
|
|
88
|
+
review_sensei/hosting/github/conversation.py,sha256=j0WNXWEcLLjaAHhYkk0WTbLHUXyikDKjhppCaEgImLY,62918
|
|
89
|
+
review_sensei/hosting/github/errors.py,sha256=K5Lfsh4uzuAW6tER2l7pcEM4Lz6FwGEmMPxvF1vNc4E,5352
|
|
90
|
+
review_sensei/hosting/github/fixtures/__init__.py,sha256=2sBygkvppFJ6F8KV1_MDmbBNl7Yd0oPvYOFG6R_NOpA,82
|
|
91
|
+
review_sensei/hosting/github/fixtures/__pycache__/__init__.cpython-311.pyc,,
|
|
92
|
+
review_sensei/hosting/github/fixtures/released-v4-resolve-trigger-runner-switch.yml,sha256=09um6w5QmIodLMrbR10z4gdZ3f5AaVj7eqjhQzOfkV8,16194
|
|
93
|
+
review_sensei/hosting/github/http.py,sha256=6Dz9S-U4M07KehE7FhjNyrBt_XKKz4Dnp6zULMFKHk0,8943
|
|
94
|
+
review_sensei/hosting/github/jwt.py,sha256=mTakXBxU-GR-hBnIZE-FryfFXwpS9hJ7qb3X7P0FBMo,4582
|
|
95
|
+
review_sensei/hosting/github/learning_pr.py,sha256=hT7FmmpWCnUO5WCQEmP9XioQiceNALxuJCtcZXAQxSU,112424
|
|
96
|
+
review_sensei/hosting/github/oidc.py,sha256=h3UVcBYQIKy-xQS7Ixv3_fy670mmuBoNKSYurPZWZ60,13310
|
|
97
|
+
review_sensei/hosting/github/publication.py,sha256=zXlds29-lmjSeBmHDaK1ucf4xLbSeQ0JHylLpSeDc2E,84806
|
|
98
|
+
review_sensei/hosting/github/session_ledger.py,sha256=bqalhVAz6AolacYn-paxdddofl7uyeR_kZE7s750iqo,31057
|
|
99
|
+
review_sensei/hosting/github/setup.py,sha256=L6ZTQuOADDVeJyZ6ZMG65zOLaDmYgYUj1Nm-qyhZPlI,92925
|
|
100
|
+
review_sensei/hosting/github/trigger.py,sha256=VzKSKQwbQPsDsbeGRoFE0Na4GNfC4jMoMFjVxzNJlnE,11003
|
|
101
|
+
review_sensei/hosting/github/webhooks.py,sha256=7hh_YlF7riV6wov7A_27aOb5g6-Ivob1PBWR4m5bF3I,13662
|
|
102
|
+
review_sensei/hosting/openrouter_workflow.py,sha256=qepVpa12sL6mTaBqTGhcWEaYI8zawcgAYK6sOCRnKtE,1330
|
|
103
|
+
review_sensei/learnings.py,sha256=AF9Dqyreb9WQLWLZiciuyRXNviSso6sYVTe2xzx1ZfY,21434
|
|
104
|
+
review_sensei/models.py,sha256=8zHJE5yyvL8Bg3RVuu4xcFgNHgQpb3B9N7GHTnb8qTw,91496
|
|
105
|
+
review_sensei/openrouter_qualification.py,sha256=UKUL8oK8oexX1P_othR3y_QAAW0PG2EdAYnWXA-ACZI,30296
|
|
106
|
+
review_sensei/outcomes.py,sha256=uFpb5-n3mvuQ71ljGQp7KHAmjtCHx13YbiXnTkmCiuk,32183
|
|
107
|
+
review_sensei/patches.py,sha256=P9plsU7-5Z-Jxy8EJBFQX5hX3bcmxBoRJxTnEqA_tbA,15981
|
|
108
|
+
review_sensei/planning.py,sha256=6rb6w-tNhXCBOl6-_N6A2fQox6cGjL88kOAhn4oGTpA,23289
|
|
109
|
+
review_sensei/presentation.py,sha256=JlbvtcFV_Kok_21ATtDNj-kHfcmCpk5v7N15RulAAVQ,6587
|
|
110
|
+
review_sensei/provider_config.py,sha256=Hgs0oNI6sNYJxuMi38dZ8YyF-Nu1i5CF7mi0K_2Kr0Q,16385
|
|
111
|
+
review_sensei/providers/__init__.py,sha256=gmfB6gm0QN_FfN3lJJ0kN8QgTtJom4ayzaqUkLmwQwc,779
|
|
112
|
+
review_sensei/providers/__pycache__/__init__.cpython-311.pyc,,
|
|
113
|
+
review_sensei/providers/__pycache__/base.cpython-311.pyc,,
|
|
114
|
+
review_sensei/providers/__pycache__/fixture.cpython-311.pyc,,
|
|
115
|
+
review_sensei/providers/__pycache__/ollama.cpython-311.pyc,,
|
|
116
|
+
review_sensei/providers/__pycache__/openai_compatible.cpython-311.pyc,,
|
|
117
|
+
review_sensei/providers/__pycache__/openrouter.cpython-311.pyc,,
|
|
118
|
+
review_sensei/providers/__pycache__/profiles.cpython-311.pyc,,
|
|
119
|
+
review_sensei/providers/__pycache__/registry.cpython-311.pyc,,
|
|
120
|
+
review_sensei/providers/__pycache__/routing.cpython-311.pyc,,
|
|
121
|
+
review_sensei/providers/__pycache__/transport.cpython-311.pyc,,
|
|
122
|
+
review_sensei/providers/base.py,sha256=u-z9bQNi3sjPudoDb52czjOmM2YwBX_Kwniopz_LfWI,2009
|
|
123
|
+
review_sensei/providers/fixture.py,sha256=-HXetG6cXpWd5NlF1-RMA3aqyr88YHwYpiyz0Bc6BO8,1554
|
|
124
|
+
review_sensei/providers/ollama.py,sha256=50u86LU-FYulbBxJP_vShGw-9t2sGCVfceGE8vjZdFY,10739
|
|
125
|
+
review_sensei/providers/openai_compatible.py,sha256=fJFCUz_tyhBG7STItvfNybOq7V620k47_VgSbizRDWU,19441
|
|
126
|
+
review_sensei/providers/openrouter.py,sha256=8gFslaz82oOtDxG58o1-wdn9IH2T_bKjeJE738gphJ8,23224
|
|
127
|
+
review_sensei/providers/profiles.py,sha256=_vhQPNMBT2x-6AU-xVqM0lqTlT2cTiXMv5xwb5-C2EM,9352
|
|
128
|
+
review_sensei/providers/registry.py,sha256=_YifbpFtgsARRF5l1VJsyQgovJgjrgvB_VLT-SUAE9k,12088
|
|
129
|
+
review_sensei/providers/routing.py,sha256=-EttO963m9Gh3E5hlF72EvyFDN9qMabPmm05b3m5QH0,7064
|
|
130
|
+
review_sensei/providers/transport.py,sha256=9QhvHM33gYE7DbmXNxhfBoVDsa7Hx3audaxzRd_7pS4,2937
|
|
131
|
+
review_sensei/release_manifest.py,sha256=a7pPhr0YVBCrzC6Q8JC4HiqTD3aBUyTYV4Y0827U5TA,37775
|
|
132
|
+
review_sensei/schemas.py,sha256=DG0Z2VsZUKRaoLNquemWSsGT8XFavUy1ot-W3ADowWw,2736
|
|
133
|
+
review_sensei/schemas/blocker-admission.schema.json,sha256=M3nBzti7M5yAWKFDcsfdJ3TsPbiJrEEn2Zj4yYUDBPQ,2800
|
|
134
|
+
review_sensei/schemas/canary-binding.schema.json,sha256=065T5GIYG16P9S22HEKrHeRg6unHu8WXedbJxwUYBgk,794
|
|
135
|
+
review_sensei/schemas/candidate-finding.schema.json,sha256=P_FM6pbwdOZGZPAiI_E_ZSmxDfScu2u_2RPzpkdIdmk,1982
|
|
136
|
+
review_sensei/schemas/channel-promotion.schema.json,sha256=LNQgvm6IxntfXrpEnoVz4aL_7_ALo8syiVYEFrfxHYw,1085
|
|
137
|
+
review_sensei/schemas/compatibility-manifest.schema.json,sha256=RIsEo5Os6obelQ078cySd3BHJxGgAySCQg0f0KHRpzY,1858
|
|
138
|
+
review_sensei/schemas/concurrency-plan.schema.json,sha256=YtHPlfShzFPLE4sQMEn7TogW3souwiKC6d4yd-kgFRY,830
|
|
139
|
+
review_sensei/schemas/convergence-sequence-report.schema.json,sha256=FWNUHgdlqlu9SOazQsEVxhBqFY4P_uLynb4OsI8VE1E,2323
|
|
140
|
+
review_sensei/schemas/conversation-reply.schema.json,sha256=bKHxO1CX_g_VrWDb1e0GKPGIUzMPORchHqrT805yPXA,682
|
|
141
|
+
review_sensei/schemas/coverage-manifest.schema.json,sha256=rrbvq1YYNt-c4YPLmdmrzWo_Au-rDu-e35eg3NdZzQQ,2765
|
|
142
|
+
review_sensei/schemas/evaluation-corpus.schema.json,sha256=0W3-zgmVFa5AjDSs385szKNt4DX_D_ZdrE9ur3Nrnz0,7905
|
|
143
|
+
review_sensei/schemas/evaluation-report.schema.json,sha256=kPLXcJv3XeRFNW__VnQzrnovXHaKfS4-ZevfLDgV1xY,10012
|
|
144
|
+
review_sensei/schemas/later-finding-classification.schema.json,sha256=YxsogG9aN4Kbm7__lJpvhOMBbuRe8NbDKS4GnJf4Kl4,2092
|
|
145
|
+
review_sensei/schemas/learning-entry.schema.json,sha256=QtbNYK_eIPmXos4TlYbCFL8EvYAqOx-dxUXDM5wBGQ4,1782
|
|
146
|
+
review_sensei/schemas/learning-feedback.schema.json,sha256=SbNqRSdA82pV5a8Zbzbnjm7U7sj4s9epqRPlJ7-lgAg,1925
|
|
147
|
+
review_sensei/schemas/learning-proposal.schema.json,sha256=FVYG4sFWGil_66-6NlliFCk2LpiCfJn-yTrY4dN-b0E,644
|
|
148
|
+
review_sensei/schemas/openrouter-qualification.schema.json,sha256=wIgsZxwvAsKuptmjfsD_8UitPcl-DLAzxjlCD-pZyx8,4203
|
|
149
|
+
review_sensei/schemas/promotion-record.schema.json,sha256=CHJ99AjwioPthygjTimPjXNuG2rriW4DFZw54fa1rfs,2402
|
|
150
|
+
review_sensei/schemas/recovery-artifact.schema.json,sha256=ZP-C_E_nQlFsuObxFn2O0iJLMbDMgNWAF7h4BpPyM3g,1254
|
|
151
|
+
review_sensei/schemas/review-category.schema.json,sha256=Rni93qGN2LyJSrHRF-GcgVdAjqXGnDU5yjIjG2wn7pI,2189
|
|
152
|
+
review_sensei/schemas/review-comment.schema.json,sha256=0A9J_vzYnMUpKsv9wZUGGnCd1ryP-8uksPEbSJWj8Xo,1140
|
|
153
|
+
review_sensei/schemas/review-convergence-policy.schema.json,sha256=E4pGr4CNMzvBUdJ7hTFJy4tzm7iolitG0vClqsj1rcU,1348
|
|
154
|
+
review_sensei/schemas/review-result.schema.json,sha256=jzQMoZIMw2HVC4EhUPfcSuScCd48URPfq6DGX9KnHZM,4899
|
|
155
|
+
review_sensei/schemas/review-round-decision.schema.json,sha256=4Nd306X6_pU4co4papD0nv6D0K5-n3LefGbUYC9M1Ow,1594
|
|
156
|
+
review_sensei/schemas/review-stage.schema.json,sha256=H5CDiC-ngQXJpVomEvd8YPP1tgyPgwo_k3atK4Vjev0,4707
|
|
157
|
+
review_sensei/schemas/review-transaction.schema.json,sha256=KWtsfa0p0CmPx--cB91XpDizF2Z6N2Ehg5YMlRqJwN8,2215
|
|
158
|
+
review_sensei/schemas/run-outcome.schema.json,sha256=pyByHFmQ8yNFPsLD7wccR5lxsWBwzoxNyD77bjNqeU8,1744
|
|
159
|
+
review_sensei/schemas/session-record.schema.json,sha256=2ig37m8WuaxOd34iKmTwdAwgGkK_VV9XSDdPZK2vs30,11949
|
|
160
|
+
review_sensei/schemas/stage.schema.json,sha256=WsxbwZFGpRNCyZ6xzWsAQHf8f7YpJLAh9FKRXN_vlao,2900
|
|
161
|
+
review_sensei/schemas/verification-result.schema.json,sha256=Hf765S-aC1Tk4c7KMWaaSf5DMsg6ogmjnHXcjcHE01k,625
|
|
162
|
+
review_sensei/schemas/verification-scope.schema.json,sha256=402Q7OiLHnb41lwb5JkVoKUpCe19fMV9hVhTjsenLFo,2141
|
|
163
|
+
review_sensei/sequence.py,sha256=Q3HUDyyy1w20DVztLGDHydGcKiOfa4HTZ_pmUjKfKQM,7849
|
|
164
|
+
review_sensei/service.py,sha256=RGKiXOn_BV-doCSS4CsrpITmpktvsznAEH5f4XFIbrQ,70775
|
|
165
|
+
review_sensei/session.py,sha256=hdt_2J1IMcqers42na0pVXf9WZdZpoD9z93WV6aYE7c,129937
|
|
166
|
+
review_sensei/stages.py,sha256=rMomi3dvKrEl3yiuy2VbX09_bLu8dWD2rblFH8aJ6yI,24256
|
|
167
|
+
review_sensei/validation.py,sha256=euLaI7cxwTCxcpNRh-F8zGz0BQu8GMG3cA3_1_wtdkU,12390
|
|
168
|
+
review_sensei/verifier.py,sha256=_6cbaoXj8R9hatM7fZav-BgfkSPRyJ4ASmQlZbxF5HA,34913
|
|
169
|
+
review_sensei/workflow.py,sha256=b20eeP9ekbNYGibNCYCcvKSLK7cO3bpCsXiA7y9y33Y,23572
|
|
File without changes
|
package/bin/review-sensei.exe
CHANGED
|
Binary file
|