@bjoernrochel/sevro 0.1.0-rc.2 → 0.1.0-rc.21
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/CONTRIBUTING.md +170 -0
- package/LICENSE +63 -136
- package/README.md +83 -66
- package/docs/README.md +44 -0
- package/docs/acknowledgements.md +14 -0
- package/docs/architecture.md +146 -0
- package/docs/assets/README.md +27 -0
- package/docs/assets/sevro-logo.png +0 -0
- package/docs/assets/sevro-symbol.svg +1 -0
- package/docs/assets/sevro-wordmark.svg +1 -0
- package/docs/builtin-graders-v1.md +41 -13
- package/docs/codex-host.md +184 -52
- package/docs/contracts.md +19 -0
- package/docs/creating-cases.md +139 -0
- package/docs/development-cli.md +190 -30
- package/docs/documentation-quality.md +61 -0
- package/docs/evaluation-workflow.md +110 -0
- package/docs/evidence/code-mode-controls-71.md +64 -0
- package/docs/evidence/code-mode-programs-85.md +64 -0
- package/docs/evidence/codex-state-73/README.md +204 -0
- package/docs/evidence/codex-state-73/darrow-migration.patch +182 -0
- package/docs/evidence/codex-state-73/results.json +661 -0
- package/docs/evidence/local-http-74.md +104 -0
- package/docs/evidence/runtime-startup-30/README.md +185 -0
- package/docs/evidence/runtime-startup-30/after.json +319 -0
- package/docs/evidence/runtime-startup-30/baseline-timeout.jsonl +2 -0
- package/docs/evidence/runtime-startup-30/before.json +403 -0
- package/docs/evidence/runtime-startup-30/consumer-smoke.json +63 -0
- package/docs/evidence/runtime-startup-30/full-policy-diagnostic.jsonl +3 -0
- package/docs/evidence/runtime-startup-30/minimal-policy-diagnostic.jsonl +3 -0
- package/docs/evidence/runtime-startup-30/plugin-template-assessment.json +20 -0
- package/docs/evidence/runtime-startup-30/seedless-timeout.jsonl +2 -0
- package/docs/evidence/skill-reads-70/results.json +823 -0
- package/docs/evidence.md +21 -0
- package/docs/extension-protocol-v1.md +50 -16
- package/docs/fixture-cleanup-validation.md +3 -0
- package/docs/getting-started.md +102 -0
- package/docs/guide-evaluation.md +89 -0
- package/docs/guide-verification.json +239 -0
- package/docs/identity-v1.md +35 -1
- package/docs/installing.md +88 -0
- package/docs/licenses/BUSL-1.1-0.1.0-rc.2.txt +159 -0
- package/docs/licensing.md +42 -0
- package/docs/native-controls.md +76 -5
- package/docs/native-hosts.md +228 -0
- package/docs/reading-results.md +141 -0
- package/docs/recipes.md +489 -0
- package/docs/releases.md +81 -40
- package/docs/report-v1.md +29 -1
- package/docs/results-v1.md +180 -0
- package/docs/run-settings-v1.md +147 -0
- package/docs/running-evaluations.md +31 -0
- package/docs/runtime-v1.md +614 -0
- package/docs/specs/repository-guide.md +58 -0
- package/docs/troubleshooting.md +30 -0
- package/docs/typescript-quality.md +234 -0
- package/docs/usability-study.md +114 -0
- package/examples/basic/host.ts +2 -2
- package/examples/recipes/candidate.ts +26 -0
- package/examples/recipes/cases/coding-change.json +21 -0
- package/examples/recipes/cases/host-tools.json +21 -0
- package/examples/recipes/cases/mise.json +21 -0
- package/examples/recipes/cases/node.json +21 -0
- package/examples/recipes/cases/python-uv.json +21 -0
- package/examples/recipes/cases/semantic.json +17 -0
- package/examples/recipes/coding-change/check.ts +23 -0
- package/examples/recipes/extension-artifacts.ts +65 -0
- package/examples/recipes/extension-methods.ts +174 -0
- package/examples/recipes/extension.ts +37 -0
- package/examples/recipes/repository-skill/.agents/skills/startup-guide/SKILL.md +7 -0
- package/examples/recipes/repository-skill/.claude/skills/startup-guide/SKILL.md +7 -0
- package/examples/recipes/repository-skill/README.md +3 -0
- package/examples/recipes/run-inputs.ts +188 -0
- package/examples/recipes/run-options.ts +131 -0
- package/examples/recipes/run.ts +63 -0
- package/examples/recipes/runtime/empty.json +1 -0
- package/examples/recipes/runtime/goals.json +1 -0
- package/examples/recipes/runtime/mise.json +6 -0
- package/examples/recipes/runtime/path.json +1 -0
- package/examples/recipes/runtime/plugins.json +4 -0
- package/examples/recipes/runtime/python-uv.json +10 -0
- package/examples/recipes/semantic-judge.ts +29 -0
- package/examples/templates/coding/adapter.ts +17 -0
- package/examples/templates/coding/case.json +15 -0
- package/examples/templates/repository-skill/.agents/skills/startup-guide/SKILL.md +6 -0
- package/examples/templates/repository-skill/extension-data.ts +64 -0
- package/examples/templates/repository-skill/extension.ts +31 -0
- package/examples/templates/response/adapter.ts +12 -0
- package/examples/templates/response/case.json +13 -0
- package/package.json +39 -6
- package/schemas/report-v1.schema.json +9 -0
- package/schemas/run-evidence-v1.schema.json +2 -1
- package/schemas/runtime-v1.schema.json +193 -0
- package/src/advisory.ts +10 -5
- package/src/candidate-artifacts.ts +208 -0
- package/src/candidate-codex-state.ts +185 -0
- package/src/case-validation.ts +105 -0
- package/src/cli/cancellation.ts +20 -0
- package/src/cli/command.ts +81 -0
- package/src/cli/completion.ts +15 -0
- package/src/cli/demo.ts +59 -0
- package/src/cli/evaluation.ts +55 -0
- package/src/cli/extension.ts +79 -0
- package/src/cli/help.ts +222 -0
- package/src/cli/hosts.ts +59 -0
- package/src/cli/init-settings.ts +30 -0
- package/src/cli/init.ts +111 -0
- package/src/cli/invocation.ts +627 -0
- package/src/cli/loading.ts +151 -0
- package/src/cli/preparation.ts +163 -0
- package/src/cli/presentation.ts +91 -0
- package/src/cli/progress.ts +6 -0
- package/src/cli/run-manifest.ts +133 -0
- package/src/cli/run-options.ts +101 -0
- package/src/cli/run-overrides.ts +83 -0
- package/src/cli/settings.ts +160 -0
- package/src/cli/summary.ts +43 -0
- package/src/cli.ts +13 -843
- package/src/contract-types.ts +94 -0
- package/src/engine.ts +19 -2373
- package/src/evaluation/advisory.ts +150 -0
- package/src/evaluation/check-plan.ts +510 -0
- package/src/evaluation/collection.ts +88 -0
- package/src/evaluation/context.ts +10 -0
- package/src/evaluation/grading-host.ts +39 -0
- package/src/evaluation/grading.ts +258 -0
- package/src/evaluation/invocation-plan.ts +548 -0
- package/src/evaluation/plan.ts +736 -0
- package/src/evaluation/progress.ts +19 -0
- package/src/evaluation/resources.ts +241 -0
- package/src/evaluation/run.ts +206 -0
- package/src/{trial-scheduler.ts → evaluation/scheduler.ts} +3 -1
- package/src/evaluation/semantic.ts +312 -0
- package/src/evaluation/trial.ts +866 -0
- package/src/evaluation/types.ts +207 -0
- package/src/evidence/host-results.ts +92 -0
- package/src/evidence/retained-artifacts.ts +18 -0
- package/src/evidence/trial-writer.ts +203 -0
- package/src/evidence/usage.ts +17 -0
- package/src/extension-client.ts +228 -148
- package/src/extension-session.ts +326 -195
- package/src/fixtures/advisory.ts +338 -0
- package/src/fixtures/bin.ts +57 -0
- package/src/{fixture-cleanup.ts → fixtures/cleanup.ts} +13 -7
- package/src/fixtures/create.ts +187 -0
- package/src/fixtures/generated.ts +300 -0
- package/src/fixtures/git-hooks.ts +24 -0
- package/src/fixtures/preparation.ts +270 -0
- package/src/{repository-fixture.ts → fixtures/repository.ts} +207 -85
- package/src/fixtures/setup.ts +224 -0
- package/src/fixtures/tools.ts +88 -0
- package/src/fixtures/workspace-state.ts +212 -0
- package/src/generated/cli-result.cjs +2 -0
- package/src/generated/cli-result.d.cts +3 -0
- package/src/generated/extension.cjs +2 -0
- package/src/generated/extension.d.cts +3 -0
- package/src/generated/report.cjs +2 -0
- package/src/generated/report.d.cts +3 -0
- package/src/generated/run-evidence.cjs +2 -0
- package/src/generated/run-evidence.d.cts +3 -0
- package/src/generated/runtime.cjs +2 -0
- package/src/generated/runtime.d.cts +3 -0
- package/src/graders/artifact.ts +56 -23
- package/src/graders/git-head.ts +79 -75
- package/src/graders/output.ts +222 -140
- package/src/graders/semantic.ts +102 -43
- package/src/graders/shell.ts +379 -207
- package/src/host-diagnostic-redaction.ts +52 -0
- package/src/host-diagnostics.ts +319 -0
- package/src/hosts/claude-continuation.ts +63 -18
- package/src/hosts/claude-credential.ts +43 -62
- package/src/hosts/claude-events.ts +86 -51
- package/src/hosts/claude-keychain.ts +59 -0
- package/src/hosts/claude-native-goal.ts +57 -33
- package/src/hosts/claude-process.ts +111 -0
- package/src/hosts/claude-repository-invocation.ts +208 -117
- package/src/hosts/claude-settings.ts +240 -21
- package/src/hosts/claude-skill-activations.ts +166 -0
- package/src/hosts/claude-state.ts +403 -0
- package/src/hosts/claude-tool-calls.ts +171 -106
- package/src/hosts/claude.ts +561 -451
- package/src/hosts/codex-app-server.ts +326 -178
- package/src/hosts/codex-configuration.ts +44 -18
- package/src/hosts/codex-events.ts +97 -60
- package/src/hosts/codex-exec-controls.ts +516 -0
- package/src/hosts/codex-invocation.ts +70 -0
- package/src/hosts/codex-marketplace.ts +283 -0
- package/src/hosts/codex-native-calls.ts +546 -500
- package/src/hosts/codex-process.ts +202 -0
- package/src/hosts/codex-profile.ts +257 -28
- package/src/hosts/codex-session-files.ts +106 -0
- package/src/hosts/codex-state.ts +492 -0
- package/src/hosts/codex.ts +783 -832
- package/src/hosts/isolation-common.ts +94 -0
- package/src/hosts/isolation-roots.ts +54 -27
- package/src/hosts/isolation.ts +10 -0
- package/src/hosts/linux-sandbox.ts +159 -0
- package/src/hosts/mac-sandbox.ts +187 -61
- package/src/hosts/native-controls.ts +152 -62
- package/src/hosts/process-lifecycle.ts +37 -0
- package/src/hosts/protected-worktrees.ts +51 -19
- package/src/hosts/skill-hook-catalog.ts +131 -0
- package/src/hosts/skill-hook-handler.ts +374 -0
- package/src/hosts/skill-hooks.ts +580 -0
- package/src/hosts/workspace-fingerprint.ts +55 -35
- package/src/identity.ts +102 -48
- package/src/instrumentation.ts +109 -48
- package/src/native-transcript-state.ts +131 -0
- package/src/native-transcript-view.ts +90 -0
- package/src/native-transcripts.ts +286 -0
- package/src/process-lifecycle.ts +150 -0
- package/src/provenance.ts +161 -81
- package/src/prune.ts +215 -0
- package/src/report.ts +172 -140
- package/src/resolved-case.ts +33 -0
- package/src/results-lock.ts +29 -0
- package/src/results.ts +133 -86
- package/src/run-owner.ts +154 -63
- package/src/runtime/config.ts +456 -0
- package/src/runtime/discovery-apple.ts +90 -0
- package/src/runtime/discovery-providers.ts +63 -0
- package/src/runtime/discovery.ts +70 -0
- package/src/runtime/hook-processes.ts +97 -0
- package/src/runtime/hooks.ts +476 -0
- package/src/runtime/paths.ts +313 -0
- package/src/runtime/query.ts +85 -0
- package/src/runtime/seeds.ts +134 -0
- package/src/runtime/shared-cache.ts +143 -0
- package/src/runtime/state.ts +143 -0
- package/src/schema-types.ts +198 -0
- package/src/schema.ts +15 -19
- package/src/transcript-retention.ts +146 -0
- package/src/value-guards.ts +20 -0
- package/src/advisory-fixture.ts +0 -282
- package/src/fixture-bin.ts +0 -87
- package/src/fixture-setup.ts +0 -163
- package/src/generated-fixture.ts +0 -220
- package/src/git-hooks.ts +0 -63
- package/src/hosts/claude-nested-skills.ts +0 -218
- package/src/hosts/codex-command-output.ts +0 -399
- package/src/hosts/codex-executor-command.ts +0 -195
- package/src/hosts/codex-skill-reads.ts +0 -391
- package/src/preparation.ts +0 -211
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Install, update, or remove Sevro
|
|
2
|
+
|
|
3
|
+
Use Bun 1.3.13 for this TypeScript/Bun CLI. Installation does not make it a
|
|
4
|
+
Node-only executable. Full validation and native isolation target macOS and
|
|
5
|
+
Ubuntu 24.04 x64. See the [bounded platform evidence](native-hosts.md#validated-platform-scope);
|
|
6
|
+
Windows remains unverified.
|
|
7
|
+
|
|
8
|
+
## Install locally
|
|
9
|
+
|
|
10
|
+
```sh
|
|
11
|
+
mkdir sevro-demo
|
|
12
|
+
cd sevro-demo
|
|
13
|
+
bun init -y
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Then install the [current release](#current-release) in that directory.
|
|
17
|
+
|
|
18
|
+
Run the [packaged deterministic example](getting-started.md#from-an-installed-package)
|
|
19
|
+
to verify installation. It needs neither model credentials nor Darrow.
|
|
20
|
+
Local installation records the selected version in the project lockfile.
|
|
21
|
+
|
|
22
|
+
<!-- sevro-current-release:start -->
|
|
23
|
+
|
|
24
|
+
## Current release
|
|
25
|
+
|
|
26
|
+
The current release is `0.1.0-rc.21`. Install this exact version:
|
|
27
|
+
|
|
28
|
+
```sh
|
|
29
|
+
bun add --exact @bjoernrochel/sevro@0.1.0-rc.21
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
<!-- sevro-current-release:end -->
|
|
33
|
+
|
|
34
|
+
## Make the command available
|
|
35
|
+
|
|
36
|
+
The examples call `sevro` from `PATH`. For a local installation, run this from
|
|
37
|
+
the directory containing its `node_modules`:
|
|
38
|
+
|
|
39
|
+
```sh
|
|
40
|
+
export PATH="$PWD/node_modules/.bin:$PATH"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
This selects the locally installed version for the current shell, including
|
|
44
|
+
after changing directories. If your installed `sevro` is already on `PATH`,
|
|
45
|
+
no adjustment is needed. Bun must also be on `PATH`: the executable uses
|
|
46
|
+
`#!/usr/bin/env bun`.
|
|
47
|
+
|
|
48
|
+
## Published package and checkout
|
|
49
|
+
|
|
50
|
+
See [licensing](licensing.md) for Sevro's source-available terms and historical
|
|
51
|
+
licensing transitions.
|
|
52
|
+
|
|
53
|
+
The npm package contains sources, schemas, examples, documentation,
|
|
54
|
+
LICENSE, and contribution guidance. It excludes tests, developer scripts, Git
|
|
55
|
+
metadata, and repository guide mounts. Use a source checkout for the guide.
|
|
56
|
+
|
|
57
|
+
Source checkouts can include changes beyond their package version; compare the
|
|
58
|
+
exact release tag when establishing provenance.
|
|
59
|
+
|
|
60
|
+
## Work from source
|
|
61
|
+
|
|
62
|
+
```sh
|
|
63
|
+
git clone https://github.com/BjRo/sevro.git
|
|
64
|
+
cd sevro
|
|
65
|
+
bun install --frozen-lockfile
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Run the [checkout tutorial](getting-started.md#from-a-contributor-checkout).
|
|
69
|
+
`bun run test:package-install` packs and installs a local tarball in temporary
|
|
70
|
+
directories; it does not publish. [Contributing](../CONTRIBUTING.md) lists checks.
|
|
71
|
+
|
|
72
|
+
## Update
|
|
73
|
+
|
|
74
|
+
Review a release's license and compatibility, then use the exact installation
|
|
75
|
+
command for the [current release](#current-release) from your existing project.
|
|
76
|
+
To select a different published version, substitute that exact version in the
|
|
77
|
+
command, then rerun the [packaged example](getting-started.md#from-an-installed-package).
|
|
78
|
+
Rollback uses the prior exact version and another verification run.
|
|
79
|
+
[Releases](releases.md) explains artifact provenance.
|
|
80
|
+
|
|
81
|
+
## Remove
|
|
82
|
+
|
|
83
|
+
```sh
|
|
84
|
+
bun remove @bjoernrochel/sevro
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
This updates the dependency and lockfile, not saved cases, results, or model
|
|
88
|
+
logins. Remove those separately only when wanted.
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
Business Source License 1.1
|
|
2
|
+
|
|
3
|
+
License text copyright (c) 2017 MariaDB Corporation Ab, All Rights Reserved.
|
|
4
|
+
"Business Source License" is a trademark of MariaDB Corporation Ab.
|
|
5
|
+
|
|
6
|
+
-----------------------------------------------------------------------------
|
|
7
|
+
|
|
8
|
+
Parameters
|
|
9
|
+
|
|
10
|
+
Licensor: Björn Rochel <bjoern@bjro.de>
|
|
11
|
+
|
|
12
|
+
Licensed Work: Sevro — a standalone evaluation runner for coding agents.
|
|
13
|
+
The Licensed Work is (c) 2026 Björn Rochel.
|
|
14
|
+
|
|
15
|
+
Additional Use Grant: You may make production use of the Licensed Work only
|
|
16
|
+
as follows:
|
|
17
|
+
|
|
18
|
+
(a) use within your own organization, for any
|
|
19
|
+
purpose, commercial or non-commercial, provided
|
|
20
|
+
that such use is not Commercial Educational
|
|
21
|
+
Production Use;
|
|
22
|
+
|
|
23
|
+
(b) use while performing professional, consulting,
|
|
24
|
+
or contract services for your own clients,
|
|
25
|
+
provided that those services do not include
|
|
26
|
+
Commercial Educational Production Use;
|
|
27
|
+
|
|
28
|
+
(c) use in preparing or delivering training,
|
|
29
|
+
workshops, courses, talks, presentations, or
|
|
30
|
+
other educational offerings, or in creating or
|
|
31
|
+
publishing blog posts, articles, or other
|
|
32
|
+
educational content, provided that such
|
|
33
|
+
production use is not Commercial Educational
|
|
34
|
+
Production Use;
|
|
35
|
+
|
|
36
|
+
(d) use in research, evaluation, and personal
|
|
37
|
+
projects, provided that such use is not
|
|
38
|
+
Commercial Educational Production Use;
|
|
39
|
+
|
|
40
|
+
provided that such production use does not include
|
|
41
|
+
distributing, selling, sublicensing, hosting, or
|
|
42
|
+
otherwise offering the Licensed Work, or a derivative
|
|
43
|
+
work of the Licensed Work, to third parties as a
|
|
44
|
+
product or service whose principal value is the
|
|
45
|
+
functionality of the Licensed Work.
|
|
46
|
+
|
|
47
|
+
For purposes of this Additional Use Grant,
|
|
48
|
+
"Commercial Educational Production Use" means
|
|
49
|
+
production use of the Licensed Work in preparing,
|
|
50
|
+
delivering, or publishing any educational offering or
|
|
51
|
+
content where you or anyone acting on your behalf:
|
|
52
|
+
|
|
53
|
+
(i) receives or expects to receive, directly or
|
|
54
|
+
indirectly, a fee, compensation, sponsorship, or
|
|
55
|
+
other consideration in connection with it;
|
|
56
|
+
|
|
57
|
+
(ii) supplies it as part of, or uses it to advertise
|
|
58
|
+
or promote, a paid product, service, membership,
|
|
59
|
+
or engagement; or
|
|
60
|
+
|
|
61
|
+
(iii) uses it to generate leads or obtain any other
|
|
62
|
+
direct or indirect commercial benefit.
|
|
63
|
+
|
|
64
|
+
Reasonable reimbursement of expenses alone does not
|
|
65
|
+
constitute Commercial Educational Production Use.
|
|
66
|
+
Commercial Educational Production Use is not included
|
|
67
|
+
in this Additional Use Grant.
|
|
68
|
+
|
|
69
|
+
For clarity, nothing in this Additional Use Grant
|
|
70
|
+
limits the non-production rights granted under the
|
|
71
|
+
Terms below.
|
|
72
|
+
|
|
73
|
+
For clarity, contributing modifications back to the
|
|
74
|
+
Licensed Work, and publishing forks that are
|
|
75
|
+
themselves offered free of charge under this License,
|
|
76
|
+
are permitted.
|
|
77
|
+
|
|
78
|
+
Change Date: Two years from the date on which the applicable
|
|
79
|
+
version of the Licensed Work is first made publicly
|
|
80
|
+
available. The Change Date is determined separately
|
|
81
|
+
for each released version.
|
|
82
|
+
|
|
83
|
+
Change License: Mozilla Public License, version 2.0
|
|
84
|
+
|
|
85
|
+
For information about alternative licensing arrangements for the Licensed Work,
|
|
86
|
+
please contact: bjoern@bjro.de
|
|
87
|
+
|
|
88
|
+
-----------------------------------------------------------------------------
|
|
89
|
+
|
|
90
|
+
Notice
|
|
91
|
+
|
|
92
|
+
Business Source License 1.1
|
|
93
|
+
|
|
94
|
+
Terms
|
|
95
|
+
|
|
96
|
+
The Licensor hereby grants you the right to copy, modify, create derivative
|
|
97
|
+
works, redistribute, and make non-production use of the Licensed Work. The
|
|
98
|
+
Licensor may make an Additional Use Grant, above, permitting limited
|
|
99
|
+
production use.
|
|
100
|
+
|
|
101
|
+
Effective on the Change Date, or the fourth anniversary of the first publicly
|
|
102
|
+
available distribution of a specific version of the Licensed Work under this
|
|
103
|
+
License, whichever comes first, the Licensor hereby grants you rights under
|
|
104
|
+
the terms of the Change License, and the rights granted in the paragraph
|
|
105
|
+
above terminate.
|
|
106
|
+
|
|
107
|
+
If your use of the Licensed Work does not comply with the requirements
|
|
108
|
+
currently in effect as described in this License, you must purchase a
|
|
109
|
+
commercial license from the Licensor, its affiliated entities, or authorized
|
|
110
|
+
resellers, or you must refrain from using the Licensed Work.
|
|
111
|
+
|
|
112
|
+
All copies of the original and modified Licensed Work, and derivative works
|
|
113
|
+
of the Licensed Work, are subject to this License. This License applies
|
|
114
|
+
separately for each version of the Licensed Work and the Change Date may vary
|
|
115
|
+
for each version of the Licensed Work released by Licensor.
|
|
116
|
+
|
|
117
|
+
You must conspicuously display this License on each original or modified copy
|
|
118
|
+
of the Licensed Work. If you receive the Licensed Work in original or
|
|
119
|
+
modified form from a third party, the terms and conditions set forth in this
|
|
120
|
+
License apply to your use of that work.
|
|
121
|
+
|
|
122
|
+
Any use of the Licensed Work in violation of this License will automatically
|
|
123
|
+
terminate your rights under this License for the current and all other
|
|
124
|
+
versions of the Licensed Work.
|
|
125
|
+
|
|
126
|
+
This License does not grant you any right in any trademark or logo of
|
|
127
|
+
Licensor or its affiliates (provided that you may use a trademark or logo of
|
|
128
|
+
Licensor as expressly required by this License).
|
|
129
|
+
|
|
130
|
+
TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
|
|
131
|
+
AN "AS IS" BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
|
|
132
|
+
EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
|
|
133
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
|
|
134
|
+
TITLE.
|
|
135
|
+
|
|
136
|
+
MariaDB hereby grants you permission to use this License's text to license
|
|
137
|
+
your works, and to refer to it using the trademark "Business Source License",
|
|
138
|
+
as long as you comply with the Covenants of Licensor below.
|
|
139
|
+
|
|
140
|
+
Covenants of Licensor
|
|
141
|
+
|
|
142
|
+
In consideration of the right to use this License's text and the "Business
|
|
143
|
+
Source License" name and trademark, Licensor covenants to MariaDB, and to all
|
|
144
|
+
other recipients of the licensed work to be provided by Licensor:
|
|
145
|
+
|
|
146
|
+
1. To specify as the Change License the GPL Version 2.0 or any later version,
|
|
147
|
+
or a license that is compatible with GPL Version 2.0 or a later version,
|
|
148
|
+
where "compatible" means that software provided under the Change License
|
|
149
|
+
can be included in a program with software provided under GPL Version 2.0
|
|
150
|
+
or a later version. Licensor may specify additional Change Licenses
|
|
151
|
+
without limitation.
|
|
152
|
+
|
|
153
|
+
2. To either: (a) specify an additional grant of rights to use that does not
|
|
154
|
+
impose any additional restriction on the right granted in this License, as
|
|
155
|
+
the Additional Use Grant; or (b) insert the text "None".
|
|
156
|
+
|
|
157
|
+
3. To specify a Change Date.
|
|
158
|
+
|
|
159
|
+
4. Not to modify this License in any other way.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Sevro licensing
|
|
2
|
+
|
|
3
|
+
[LICENSE](../LICENSE) is authoritative for this checkout. Sevro Source Available
|
|
4
|
+
License 1.0 allows free use in all contexts, modification, and free redistribution
|
|
5
|
+
under the same terms. Commercial work, paid education, research, CI, and
|
|
6
|
+
consulting are permitted.
|
|
7
|
+
|
|
8
|
+
Charging for copies, licensing, or hosted access to Sevro's functionality,
|
|
9
|
+
including modified/rebranded versions, requires a separate license. Charging
|
|
10
|
+
for independent work performed using Sevro is allowed. A hosting label cannot
|
|
11
|
+
disguise a charge for the runner. Retain copyright, license, origin, and
|
|
12
|
+
modification notices. This is source-available, not an OSI open-source license.
|
|
13
|
+
|
|
14
|
+
## Contributions and alternative terms
|
|
15
|
+
|
|
16
|
+
[Contribution terms](../CONTRIBUTING.md#contribution-licensing) give recipients
|
|
17
|
+
the public license and grant Björn Rochel additional copyright relicensing
|
|
18
|
+
rights. Contributors keep copyright. Other recipients do not automatically
|
|
19
|
+
receive those broader rights. The project describes its current free terms;
|
|
20
|
+
it does not promise that alternative licenses will never be offered.
|
|
21
|
+
|
|
22
|
+
## Earlier releases
|
|
23
|
+
|
|
24
|
+
Published `0.1.0-rc.1` and `0.1.0-rc.2` retain BUSL-1.1, their original
|
|
25
|
+
production grant, and their per-version change date. Each changes to MPL-2.0
|
|
26
|
+
two years after its first public availability. This checkout does not revoke
|
|
27
|
+
or rewrite earlier grants. The [retained rc.2 license](licenses/BUSL-1.1-0.1.0-rc.2.txt)
|
|
28
|
+
records those terms.
|
|
29
|
+
|
|
30
|
+
Package metadata from `0.1.0-rc.3` uses `SEE LICENSE IN LICENSE`: the new license
|
|
31
|
+
has no SPDX identifier. The matching LICENSE travels in the tarball. These
|
|
32
|
+
terms do not alter the already published `rc.1` or `rc.2` artifacts.
|
|
33
|
+
|
|
34
|
+
## Branding and independently authored material
|
|
35
|
+
|
|
36
|
+
[Brand permissions](assets/README.md) are separate. Björn Rochel created the
|
|
37
|
+
logo; Pierce Brown's _Red Rising_ inspired the name. [Acknowledgements](acknowledgements.md)
|
|
38
|
+
credit that inspiration without implying affiliation or ownership.
|
|
39
|
+
|
|
40
|
+
The runner license does not automatically govern independently authored cases,
|
|
41
|
+
datasets, extensions, prompts, or outputs. Their authors/input licenses
|
|
42
|
+
determine those rights. Copies of covered Sevro code remain covered.
|
package/docs/native-controls.md
CHANGED
|
@@ -5,7 +5,8 @@ retain an observation with that ID. It exposes host facts for extension policy:
|
|
|
5
5
|
|
|
6
6
|
- `method: native_control_calls`;
|
|
7
7
|
- ordered `calls` containing only `ordinal`, `namespace`, and `name`;
|
|
8
|
-
- `acceptedAgentCount`, a verified Codex acceptance count
|
|
8
|
+
- `acceptedAgentCount`, a verified direct native Codex acceptance count when
|
|
9
|
+
overall coverage is complete, otherwise `null` (also `null` on Claude);
|
|
9
10
|
- `submittedExecCalls`, the Codex submitted-code count or `null` on Claude; and
|
|
10
11
|
- `truncated`, which is `false` for a complete record and may be unknown (`null`)
|
|
11
12
|
for an incomplete Codex record.
|
|
@@ -15,9 +16,71 @@ tool arguments, task messages, command bodies, or results. Call labels prove an
|
|
|
15
16
|
invocation attempt, not success. Extensions decide which calls are prohibited.
|
|
16
17
|
An unknown acceptance count cannot establish agent acceptance.
|
|
17
18
|
|
|
18
|
-
Codex projects labels and counts from its bound native-session observation
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
Codex projects labels and counts from its bound native-session observation.
|
|
20
|
+
It additionally retains `directAcceptedAgentCount`, the number of positively
|
|
21
|
+
correlated direct native spawn acceptances in that source, independently of exec
|
|
22
|
+
inspection. This is an observed count, not a total across unknown launch paths.
|
|
23
|
+
`coverage.nativeCalls` records native-session completeness;
|
|
24
|
+
`coverage.execInspection` records whether all submitted exec sources were
|
|
25
|
+
understood and matched to the direct submission inventory;
|
|
26
|
+
`coverage.acceptedAgents: direct_native_calls` names the scope of both acceptance
|
|
27
|
+
counts. Accepted launches through exec are not included in these direct counts.
|
|
28
|
+
When native capture is incomplete, even a zero observed count cannot establish
|
|
29
|
+
absence. Native labels remain usable as positive attempt evidence regardless
|
|
30
|
+
of an unrelated exec inspection gap. A rejected attempt is never an acceptance.
|
|
31
|
+
|
|
32
|
+
When submitted code is present, both observations also retain `execCalls`:
|
|
33
|
+
one receipt per native `exec` submission, with its native `ordinal`, inspection
|
|
34
|
+
`completeness`, and ordered `calls` containing `index`, `namespace`, and `name`.
|
|
35
|
+
The index is local to that submission; native ordinals are not synthesized.
|
|
36
|
+
The original direct-call list and total `submittedExecCalls` stay unchanged.
|
|
37
|
+
|
|
38
|
+
Sevro statically inspects bounded straight-line Code Mode
|
|
39
|
+
programs without executing them. It accepts literal tool calls, constant result
|
|
40
|
+
bindings, template interpolation and `+` composition of inspected expressions,
|
|
41
|
+
direct `text`/`store` output, and literal `Promise.all`/`allSettled` batches.
|
|
42
|
+
Batch results may use flat constant array bindings or result-only
|
|
43
|
+
`forEach(text)` or `for ... of` output, including blocks and conditional
|
|
44
|
+
result-field selection. `JSON.stringify`, `String`, object spread/shorthand,
|
|
45
|
+
and nested result fields are supported. Numeric output loops must use the
|
|
46
|
+
bounded shape `for (let i = 0; i < results.length; i++)`, indexing the known
|
|
47
|
+
batch with that loop variable. Output loops and conditional expressions cannot
|
|
48
|
+
invoke tools. Destructuring defaults, rest elements,
|
|
49
|
+
holes, nested bindings, duplicate names, and shadowed globals remain unsupported.
|
|
50
|
+
Tool argument strings, comments and printed tool-looking text
|
|
51
|
+
do not become call labels. A rejected tool request returned by a completed
|
|
52
|
+
script still appears in its submitted-call inventory. This inventory proves
|
|
53
|
+
submission of those requests, not successful effects or acceptance; the existing
|
|
54
|
+
acceptance count describes independently correlated direct native spawns.
|
|
55
|
+
|
|
56
|
+
Dynamic lookup, aliases, shadowed globals, callbacks that invoke tools,
|
|
57
|
+
conditional tool execution, and nested executors keep source inspection partial.
|
|
58
|
+
Each receipt's `inspectionReason` is `null` on success, or `unsupported_source`,
|
|
59
|
+
`malformed_source`, `source_limit`, or `foreign_namespace`. Unsupported syntax
|
|
60
|
+
and expression/call-budget exhaustion use `unsupported_source`.
|
|
61
|
+
Source is bounded at
|
|
62
|
+
64 KiB, traversed expressions at 2,048, and calls at 128 per submission; tool
|
|
63
|
+
labels are bounded at 64 characters. Private source and output bytes are discarded.
|
|
64
|
+
The portable observation becomes partial if any submission is uninspected or
|
|
65
|
+
receipt counts/ordinals disagree with the native list. `acceptedAgentCount`
|
|
66
|
+
remains `null` in that case, while native coverage, direct acceptance facts and
|
|
67
|
+
the native `submittedExecCalls` count remain independently available.
|
|
68
|
+
`submittedExecCalls` and `truncated` depend on native capture, not exec output.
|
|
69
|
+
|
|
70
|
+
Receipt `completeness` describes source inspection, independently of execution
|
|
71
|
+
or displayed output. `execution` is `completed`, `failed`, or `incomplete`;
|
|
72
|
+
`output` is `complete`, `truncated`, or `unavailable`. Output evidence requires
|
|
73
|
+
a unique later output bound to the same native call ID, with recognized text
|
|
74
|
+
blocks. `complete` describes the displayed receipt, not the whole program's
|
|
75
|
+
execution. Execution status additionally requires a successful or failed script
|
|
76
|
+
header. Missing, ambiguous or
|
|
77
|
+
malformed output yields `incomplete`/`unavailable`; a yielded or unrecognized
|
|
78
|
+
header stays `incomplete`. Displayed truncation does not change source coverage.
|
|
79
|
+
A fully inspected source with no launch call proves that absence even if its
|
|
80
|
+
shell output was truncated or the exec cell failed. Source inspection cannot
|
|
81
|
+
prove execution or success. Missing fields in historical receipts are unknown;
|
|
82
|
+
historical artifacts retain their original results and meanings.
|
|
83
|
+
|
|
21
84
|
Claude records every tool-use label from the bounded stream, with namespace
|
|
22
85
|
`claude`, without filtering to Skill or Agent. It requires a completed successful
|
|
23
86
|
turn, valid unique tool-use IDs and names, and a non-truncated list of at most
|
|
@@ -26,4 +89,12 @@ Tool-looking text in arguments or output does not become a native call.
|
|
|
26
89
|
|
|
27
90
|
Consumers must verify the source, completeness, shape, ordering, and counts
|
|
28
91
|
before using an empty call list to establish absence. Missing or partial
|
|
29
|
-
|
|
92
|
+
source coverage cannot establish a negative assertion. For Codex, consumers must
|
|
93
|
+
inspect every `execCalls` receipt in addition to the direct `calls` list,
|
|
94
|
+
validate receipt ordinals against the direct `exec` submissions, and require
|
|
95
|
+
all receipts to be complete with counts matching `submittedExecCalls`.
|
|
96
|
+
They can use positively observed native attempt labels before requiring complete
|
|
97
|
+
coverage for an absence pass. They must examine submitted labels for prohibited controls even when
|
|
98
|
+
`acceptedAgentCount` is zero. Older consumers that require
|
|
99
|
+
`submittedExecCalls === 0` remain conservative but cannot use this new evidence
|
|
100
|
+
until they adopt receipt validation.
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
# Run native model hosts
|
|
2
|
+
|
|
3
|
+
The basic tutorial needs none of this setup. Bundled model routes and isolated
|
|
4
|
+
shell checks require macOS `sandbox-exec` or Linux `bubblewrap` (and `socat` for
|
|
5
|
+
Claude Code), a supported native CLI, and model
|
|
6
|
+
authentication. Complete commands/rules live in the [CLI reference](development-cli.md)
|
|
7
|
+
and [Codex host reference](codex-host.md).
|
|
8
|
+
|
|
9
|
+
## Validated platform scope
|
|
10
|
+
|
|
11
|
+
The full source quality gate has passed on macOS arm64 and Ubuntu 24.04 x64.
|
|
12
|
+
Ubuntu evidence includes [the successful source CI run for `cd7542bf`](https://github.com/BjRo/sevro/actions/runs/38692971517).
|
|
13
|
+
That run exercises deterministic native-host protocols and real filesystem,
|
|
14
|
+
process, network and shell isolation with the pinned prerequisites in
|
|
15
|
+
[the quality contract](typescript-quality.md#environment-and-ci). It does not
|
|
16
|
+
establish authenticated model success for every host/model combination.
|
|
17
|
+
This is prior source evidence; changed candidates still need their own green CI.
|
|
18
|
+
Other Linux distributions and Windows are unverified.
|
|
19
|
+
|
|
20
|
+
On Ubuntu, install `bubblewrap`, `ripgrep`, and `socat`. Unprivileged user
|
|
21
|
+
namespaces must work; Ubuntu's AppArmor policy may need a `bwrap` profile.
|
|
22
|
+
[CI's setup script](../scripts/setup-ci-linux.sh) supplies and probes the
|
|
23
|
+
supported runner setup. Use it as an explicit development setup step where
|
|
24
|
+
appropriate; do not assume all Linux hosts have that configuration.
|
|
25
|
+
|
|
26
|
+
## Codex
|
|
27
|
+
|
|
28
|
+
Select `--host codex`, absolute `--codex-bin` and `--codex-auth-file` paths,
|
|
29
|
+
and the desired model/effort. Sevro prepares an isolated host environment.
|
|
30
|
+
Keep authentication private and outside candidate/evaluator-visible inputs.
|
|
31
|
+
The default entrypoint is `exec`; app-server selection and native-goal
|
|
32
|
+
observations require `rc.2` or later. Unsupported instrumentation is refused.
|
|
33
|
+
|
|
34
|
+
## Claude Code
|
|
35
|
+
|
|
36
|
+
Select `--host claude`, an absolute `--claude-bin`, and the desired model/effort.
|
|
37
|
+
The route supports passive candidate turns. Explicit `--claude-credential-file`
|
|
38
|
+
takes precedence. Otherwise this checkout forwards inherited API/OAuth
|
|
39
|
+
credentials, then tries a saved credential file and macOS Keychain.
|
|
40
|
+
These improvements require `rc.3` or later; check the exact installed
|
|
41
|
+
release before relying on them.
|
|
42
|
+
|
|
43
|
+
Repository skill mounts under `.claude/skills` require explicit
|
|
44
|
+
`--claude-project-settings`; otherwise repository dispatch is refused before
|
|
45
|
+
launch. The bundled route disables hooks by default and omits candidate Write
|
|
46
|
+
access. [Runtime configuration](runtime-v1.md) enables native goals and selected
|
|
47
|
+
plugin hooks and reuses declared host tools with private or explicitly shared caches. These changes
|
|
48
|
+
require `rc.3` or later. The CLI reference covers credential scrubbing
|
|
49
|
+
and follow-ups.
|
|
50
|
+
|
|
51
|
+
## Skill activation evidence
|
|
52
|
+
|
|
53
|
+
Both bundled adapters advertise `sevro.host.skill-activations`. Its observation
|
|
54
|
+
retains qualified `observedSkills`, bounded call identities, and explicit
|
|
55
|
+
`complete` or `partial` collection status. This is the sole activation collector
|
|
56
|
+
for each host. It replaces Codex's command-pattern and native output-recovery
|
|
57
|
+
detectors and Claude's separate nested-skill collector. Consumers must require
|
|
58
|
+
this observation; the retired observation IDs are no longer emitted.
|
|
59
|
+
|
|
60
|
+
Codex installs passive runner-owned hooks in its private home for each request.
|
|
61
|
+
The `tool_result_body_match` method compares returned tool content against a
|
|
62
|
+
snapshot of prepared repository, plugin and private user skill bodies. It does
|
|
63
|
+
not parse shell commands, so variables, pipelines, Python and nested Code Mode
|
|
64
|
+
calls use the same collector. Pre/post call pairs and session start/stop markers
|
|
65
|
+
establish collection health. Unselected plugin handlers are removed before
|
|
66
|
+
hooks are enabled, and fixture-local Codex configuration remains untrusted.
|
|
67
|
+
No global hook installation or root privileges are required.
|
|
68
|
+
|
|
69
|
+
This Codex receipt proves exact body exposure to the tool caller. Code Mode can
|
|
70
|
+
discard that output before returning to the model. An identical ordinary
|
|
71
|
+
document also matches; the receipt does not prove its source file was opened.
|
|
72
|
+
Identical bodies registered under different names are reported as
|
|
73
|
+
`ambiguousSkills`, with partial evidence. Exact pages can establish a body match
|
|
74
|
+
across tool results from the same session and turn. Coverage is tied to the
|
|
75
|
+
prepared body digest; overlapping or repeated pages cannot fill a missing range.
|
|
76
|
+
The call that completes coverage receives the activation receipt. Fragments
|
|
77
|
+
from different sessions or turns never combine.
|
|
78
|
+
|
|
79
|
+
Page matching uses complete nonblank lines as anchors and exact fragments of
|
|
80
|
+
at least 32 string code units. Fragments with multiple possible positions in a
|
|
81
|
+
body cannot establish coverage. Recognizable unfinished fragments appear in
|
|
82
|
+
`partialSkills` and keep the observation partial; a later complete match resolves
|
|
83
|
+
them. Within each tool result, text covered by unambiguous complete-body matches
|
|
84
|
+
does not also imply partial reads of skills sharing that text. Fragments returned
|
|
85
|
+
outside those complete-body spans or in other tool results remain independent
|
|
86
|
+
partial-read evidence. Comparison and anchor budgets also fail closed. Private receipts retain
|
|
87
|
+
body offsets rather than tool text; the public observation omits those offsets.
|
|
88
|
+
Shorter, transformed or unanchored fragments remain outside this matching scope.
|
|
89
|
+
Newly created or changed skill bodies are outside the prepared snapshot. A
|
|
90
|
+
complete empty observation is limited to this scope and the supported local
|
|
91
|
+
tool hook paths.
|
|
92
|
+
|
|
93
|
+
Codex separates per-skill exposure from collection health in the same
|
|
94
|
+
observation. `skillExposures` contains one `{ skill, status }` entry per prepared
|
|
95
|
+
catalog entry, in catalog order, with qualified skill names:
|
|
96
|
+
|
|
97
|
+
| Status | Meaning |
|
|
98
|
+
| ----------- | ----------------------------------------------------------------------- |
|
|
99
|
+
| `full` | The complete prepared body was exposed, in one result or exact pages. |
|
|
100
|
+
| `partial` | Recognizable fragments were exposed without establishing the full body. |
|
|
101
|
+
| `none` | No exposure was detected within a complete collection's matching scope. |
|
|
102
|
+
| `unknown` | No exposure was detected, but collection gaps prevent an absence claim. |
|
|
103
|
+
| `ambiguous` | Body exposure could not distinguish identically registered bodies. |
|
|
104
|
+
|
|
105
|
+
`collectionStatus` is `complete`, `partial`, or `unavailable`. No parsed hook
|
|
106
|
+
receipts means `unavailable`; otherwise collection gaps mean `partial`.
|
|
107
|
+
Recognized partial bodies and ambiguous identities alone do not indicate a
|
|
108
|
+
collection failure. Their existing `incompleteReasons` still keep the aggregate
|
|
109
|
+
activation observation partial for compatibility. Other reason codes, including
|
|
110
|
+
truncated call diagnostics, keep collection partial. Older observations without
|
|
111
|
+
these new fields have unknown exposure and collection status; do not infer them
|
|
112
|
+
from an empty `observedSkills` list.
|
|
113
|
+
|
|
114
|
+
Exposure statuses use all parsed receipts before the diagnostic `calls` list is
|
|
115
|
+
bounded. A proven `full` or `partial` exposure survives collection gaps, including
|
|
116
|
+
an earlier pending call, missing lifecycle hooks or an invalid receipt tail.
|
|
117
|
+
Full exposure takes precedence over fragments; ambiguous identities cannot
|
|
118
|
+
establish exposure of a particular named skill. `none` does not establish that
|
|
119
|
+
the skill was never used outside the prepared catalog and matching scope.
|
|
120
|
+
Recognizable fragments may be shared by several skill bodies. These statuses
|
|
121
|
+
describe content exposure to a tool caller, not instruction compliance, model
|
|
122
|
+
visibility or selection order.
|
|
123
|
+
|
|
124
|
+
The Codex adapter also advertises `sevro.host.skill-exposure-claims`. When at
|
|
125
|
+
least one skill has `full` or `partial` exposure, it emits that observation with
|
|
126
|
+
`completeness: complete`, `method: tool_result_body_match`,
|
|
127
|
+
`scope: positive_exposure`, the original `collectionStatus`, and `skillExposures`
|
|
128
|
+
containing only those positive entries. It is absent when no unambiguous
|
|
129
|
+
positive exposure is available. Extensions can require this evidence for a
|
|
130
|
+
specific positive assertion: accept only `full` for complete body exposure,
|
|
131
|
+
or explicitly accept `partial` when recognizable exposure suffices. A `partial`
|
|
132
|
+
entry is not a full activation. This receipt cannot establish absence, first
|
|
133
|
+
selection, a complete sequence or successful execution; collection remains
|
|
134
|
+
independently qualified. Existing activation and primary-selection requirements
|
|
135
|
+
are unchanged. Claude's native `Skill` seam does not emit body-exposure statuses
|
|
136
|
+
or these positive body-exposure claims.
|
|
137
|
+
|
|
138
|
+
Codex observations include `incompleteReasons`: an empty array for a complete
|
|
139
|
+
aggregate activation observation, or all applicable reason codes for a partial
|
|
140
|
+
aggregate observation. The separate `collectionStatus` isolates collection
|
|
141
|
+
health from partial bodies and body ambiguity. Older
|
|
142
|
+
observations without this field have unknown reasons; their missing details
|
|
143
|
+
cannot be reconstructed from balanced native call/return counts.
|
|
144
|
+
|
|
145
|
+
| Reason | Meaning |
|
|
146
|
+
| ------------------------------------------------ | -------------------------------------------------------------------------------------------------- |
|
|
147
|
+
| `host_incomplete` | Host execution did not complete. |
|
|
148
|
+
| `catalog_incomplete` | The prepared catalog could not be collected completely. |
|
|
149
|
+
| `receipts_unavailable` | The receipt file is missing or unreadable. |
|
|
150
|
+
| `invalid_receipts` | A malformed receipt stopped processing; earlier valid receipts remain available. |
|
|
151
|
+
| `receipt_limit` | The receipt file exceeds the collection byte limit. |
|
|
152
|
+
| `observer_failure` | The hook recorded a failure or writer limit, including input, nesting or matching-budget failures. |
|
|
153
|
+
| `session_identity_missing` | No root session identity was available. |
|
|
154
|
+
| `session_start_missing` / `session_stop_missing` | The root session lacks the corresponding lifecycle hook. |
|
|
155
|
+
| `pending_tool_calls` | Pre-tool hooks remain without matching post-tool hooks. |
|
|
156
|
+
| `unmatched_post_tool_use` | Post-tool hooks were received without pending pre-tool hooks. |
|
|
157
|
+
| `duplicate_tool_calls` | A pre-tool identity was already pending or finished. |
|
|
158
|
+
| `partial_hook_events` | A hook receipt is partial independently of body ambiguity. |
|
|
159
|
+
| `ambiguous_skill_bodies` | Complete body exposure could not distinguish skill names. |
|
|
160
|
+
| `partial_skill_bodies` | Recognized fragments remain without complete body exposure. |
|
|
161
|
+
| `calls_truncated` | Relevant call evidence exceeded its public count or byte budget. |
|
|
162
|
+
|
|
163
|
+
The `collection` summary reports `eventCount`, `preToolUseCount`,
|
|
164
|
+
`postToolUseCount`, `pendingToolCallCount`, `unmatchedPostToolUseCount`,
|
|
165
|
+
`duplicateToolCallCount` and `partialEventCount`, plus `sessionIdentified`,
|
|
166
|
+
`sessionStarted` and `sessionStopped` for the root session. Counts cover all
|
|
167
|
+
successfully parsed receipts, including receipts omitted from `calls`; an
|
|
168
|
+
unreadable or invalid tail remains unknown. Tool pairing spans the observed
|
|
169
|
+
sessions and uses session and tool-use identities. A later balanced pair is
|
|
170
|
+
still counted after an earlier anomaly.
|
|
171
|
+
|
|
172
|
+
`calls` is a bounded selection of complete matches, fragment-only matches,
|
|
173
|
+
ambiguous or partial receipts, and receipts associated with pending, orphaned
|
|
174
|
+
or duplicate tool identities. Each entry's `fragmentSkills` names recognizable
|
|
175
|
+
fragments without exposing their body offsets or digests. A fragment entry can
|
|
176
|
+
remain in `calls` after later complete exposure resolves `partialSkills`.
|
|
177
|
+
Neither `partial: false` on an individual receipt nor an empty `partialSkills`
|
|
178
|
+
array proves aggregate completeness. `truncated` describes this selected call
|
|
179
|
+
list, which is never the complete observer event ledger. A pending tool hook
|
|
180
|
+
can follow a rejected launch or a missing hook; it does not establish either
|
|
181
|
+
cause, and a tool error with a balanced hook pair does not itself imply an
|
|
182
|
+
observer gap. These diagnostics preserve unknown activation verdicts and do
|
|
183
|
+
not recover activation from native transcripts.
|
|
184
|
+
|
|
185
|
+
Codex also reports `primarySkill` and `primarySkillCompleteness` separately
|
|
186
|
+
from whole-collection completeness. A complete collection establishes its first
|
|
187
|
+
observed skill when the first matching receipt credits exactly one skill, or
|
|
188
|
+
`null` when none was observed. Multiple bodies credited by the first receipt
|
|
189
|
+
leave primary selection unknown even with complete collection; their catalog
|
|
190
|
+
order does not prove selection order. A partial collection can still
|
|
191
|
+
establish the primary skill when its only gap is pending tool calls, exactly one
|
|
192
|
+
skill was credited by the first matching receipt, and every call started through
|
|
193
|
+
that receipt has a matching post hook. A later pending call cannot change that
|
|
194
|
+
established first selection. An earlier or overlapping pending call leaves the
|
|
195
|
+
primary unknown (`null` with `primarySkillCompleteness: partial`). Other
|
|
196
|
+
collection gaps remain conservative. Consumers may use the established primary
|
|
197
|
+
for first-selection assertions while retaining the partial collection status;
|
|
198
|
+
this claim does not establish exclusions or a complete supporting sequence.
|
|
199
|
+
When a partial collection establishes the primary, the same collector emits
|
|
200
|
+
`sevro.host.skill-activation-claims` as complete evidence with scope
|
|
201
|
+
`primary_and_positive_presence`, the qualified `primarySkill`, and `presentSkills`.
|
|
202
|
+
It retains `collectionCompleteness: partial`. Consumers cite this receipt for
|
|
203
|
+
those specific claims, preserving the protocol's requirement that passing
|
|
204
|
+
results cite complete evidence. It cannot establish an exclusion or an
|
|
205
|
+
unobserved supporting read and is absent when the primary is unknown.
|
|
206
|
+
|
|
207
|
+
Claude's `skill_tool_result` method observes its existing structured `Skill`
|
|
208
|
+
stream without enabling additional command hooks. It pairs each call with a
|
|
209
|
+
successful result under the same session, parent actor and tool-use ID.
|
|
210
|
+
Failed calls remain failed; unmatched attempts and malformed or conflicting
|
|
211
|
+
records remain partial. Native explicit command expansion can load a skill
|
|
212
|
+
without a `Skill` call. Explicit-dispatch receipts describe dispatch only;
|
|
213
|
+
they do not add entries to the activation observation. A direct Claude `Read`
|
|
214
|
+
also falls outside the `Skill` seam and is not inferred from its file path.
|
|
215
|
+
|
|
216
|
+
The collectors retain no tool arguments, outputs or skill bodies in the new
|
|
217
|
+
observation. Codex catalogs at most 128 skills, each at most 1 MiB, with an
|
|
218
|
+
8 MiB total body budget. Call receipts are bounded; missing collection,
|
|
219
|
+
unfinished calls, catalog or receipt limits, and failed execution remain
|
|
220
|
+
partial. Required evidence must not interpret these states as proof that a
|
|
221
|
+
skill was unused.
|
|
222
|
+
|
|
223
|
+
## Keep sources and credentials separate
|
|
224
|
+
|
|
225
|
+
Declare source/private roots as documented. Never put credentials in prompts,
|
|
226
|
+
argv, redacted configuration, or public evidence. Injected adapters are trusted
|
|
227
|
+
code and must implement their execution contract. A synthetic native packaging
|
|
228
|
+
fixture proves packaging behavior, not a successful authenticated model trial.
|