techtree 0.1.0__py3-none-any.whl
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.
- techtree/__init__.py +35 -0
- techtree/__main__.py +14 -0
- techtree/canonical.py +239 -0
- techtree/catalog/__init__.py +25 -0
- techtree/catalog/repository.py +400 -0
- techtree/catalog/service.py +419 -0
- techtree/cli/__init__.py +1 -0
- techtree/cli/app.py +416 -0
- techtree/cli/commands/__init__.py +1 -0
- techtree/cli/commands/climb.py +1223 -0
- techtree/cli/commands/doctor.py +147 -0
- techtree/cli/commands/engine.py +207 -0
- techtree/cli/commands/proof.py +556 -0
- techtree/cli/commands/publish.py +447 -0
- techtree/cli/commands/release.py +303 -0
- techtree/cli/commands/run.py +1067 -0
- techtree/cli/commands/setup.py +181 -0
- techtree/cli/commands/skill.py +221 -0
- techtree/cli/commands/uplift.py +698 -0
- techtree/cli/commands/withdraw.py +212 -0
- techtree/cli/confirm.py +47 -0
- techtree/cli/context.py +96 -0
- techtree/cli/invoke.py +220 -0
- techtree/cli/output.py +280 -0
- techtree/constants.py +138 -0
- techtree/crypto.py +128 -0
- techtree/doctor/__init__.py +1 -0
- techtree/doctor/checks.py +675 -0
- techtree/doctor/execution_checks.py +435 -0
- techtree/doctor/service.py +326 -0
- techtree/drafts/__init__.py +32 -0
- techtree/drafts/source.py +146 -0
- techtree/drafts/store.py +992 -0
- techtree/engines/__init__.py +1 -0
- techtree/engines/bundle.py +251 -0
- techtree/engines/installer.py +679 -0
- techtree/engines/registry.py +235 -0
- techtree/engines/runner.py +170 -0
- techtree/errors.py +262 -0
- techtree/fs.py +234 -0
- techtree/harness.py +108 -0
- techtree/identity/__init__.py +41 -0
- techtree/identity/models.py +113 -0
- techtree/identity/service.py +199 -0
- techtree/identity/store.py +263 -0
- techtree/ids.py +85 -0
- techtree/manifests/__init__.py +39 -0
- techtree/manifests/builder.py +433 -0
- techtree/manifests/compare.py +376 -0
- techtree/models/__init__.py +282 -0
- techtree/models/base.py +201 -0
- techtree/models/campaign.py +484 -0
- techtree/models/catalog.py +227 -0
- techtree/models/cli.py +151 -0
- techtree/models/climb.py +254 -0
- techtree/models/data_policy.py +130 -0
- techtree/models/engine.py +156 -0
- techtree/models/episode_receipt.py +130 -0
- techtree/models/evaluation_backend.py +113 -0
- techtree/models/experiment.py +154 -0
- techtree/models/run.py +214 -0
- techtree/models/skill.py +156 -0
- techtree/models/uplift_report.py +158 -0
- techtree/models/validation.py +299 -0
- techtree/paths.py +116 -0
- techtree/presentation/__init__.py +31 -0
- techtree/presentation/build.py +1242 -0
- techtree/presentation/compact.py +246 -0
- techtree/presentation/evidence.py +169 -0
- techtree/presentation/models.py +358 -0
- techtree/presentation/rich.py +312 -0
- techtree/presentation/sanitize.py +156 -0
- techtree/publication/__init__.py +44 -0
- techtree/publication/address.py +180 -0
- techtree/publication/coordinates.py +26 -0
- techtree/publication/journal.py +212 -0
- techtree/publication/keccak.py +183 -0
- techtree/publication/models.py +209 -0
- techtree/publication/offer.py +35 -0
- techtree/publication/service.py +618 -0
- techtree/publication/transport.py +296 -0
- techtree/publication/verify.py +242 -0
- techtree/publication/withdraw.py +156 -0
- techtree/py.typed +0 -0
- techtree/receipts/__init__.py +52 -0
- techtree/receipts/bundle.py +578 -0
- techtree/receipts/compare.py +1065 -0
- techtree/receipts/episode.py +672 -0
- techtree/receipts/execution.py +630 -0
- techtree/receipts/observed.py +474 -0
- techtree/receipts/set.py +336 -0
- techtree/receipts/uplift.py +655 -0
- techtree/receipts/verify.py +1055 -0
- techtree/release/__init__.py +9 -0
- techtree/release/bootstrap.py +509 -0
- techtree/release/checks.py +376 -0
- techtree/release/document.py +125 -0
- techtree/release/generate.py +221 -0
- techtree/release/models.py +293 -0
- techtree/release/provenance.py +109 -0
- techtree/resources/catalog/campaigns/hello-world-climb.json +1 -0
- techtree/resources/catalog/catalog.json +32 -0
- techtree/resources/catalog/climbs/hello-world-climb.json +1 -0
- techtree/resources/catalog/data-policies/hello-world-climb.json +1 -0
- techtree/resources/catalog/taskset-validations/hello-world-climb.json +1 -0
- techtree/resources/catalog/validation-evidence/hello-world-climb.json +1 -0
- techtree/resources/engines/default/engine.json +20 -0
- techtree/resources/engines/default/packages/procedure-transfer-v1/procedure_transfer_v1/__init__.py +7 -0
- techtree/resources/engines/default/packages/procedure-transfer-v1/procedure_transfer_v1/algorithm.py +136 -0
- techtree/resources/engines/default/packages/procedure-transfer-v1/procedure_transfer_v1/dataset.py +156 -0
- techtree/resources/engines/default/packages/procedure-transfer-v1/procedure_transfer_v1/env.py +48 -0
- techtree/resources/engines/default/packages/procedure-transfer-v1/procedure_transfer_v1/taskset.py +163 -0
- techtree/resources/engines/default/packages/procedure-transfer-v1/pyproject.toml +13 -0
- techtree/resources/engines/default/pyproject.toml +23 -0
- techtree/resources/engines/default/tools/inspect_taskset.py +124 -0
- techtree/resources/engines/default/tools/normalize_eval_output.py +470 -0
- techtree/resources/engines/default/tools/normalize_validation.py +222 -0
- techtree/resources/engines/default/uv.lock +1758 -0
- techtree/resources/harness/hermes-agent-0.19.0.json +69 -0
- techtree/resources/release/build-provenance.json +4 -0
- techtree/resources/release/release-core.json +24 -0
- techtree/runs/__init__.py +31 -0
- techtree/runs/artifacts.py +750 -0
- techtree/runs/child_registry.py +228 -0
- techtree/runs/events.py +478 -0
- techtree/runs/executor.py +140 -0
- techtree/runs/fake.py +741 -0
- techtree/runs/launcher.py +253 -0
- techtree/runs/machine.py +489 -0
- techtree/runs/real.py +789 -0
- techtree/runs/service.py +616 -0
- techtree/runs/store.py +555 -0
- techtree/runs/validation.py +259 -0
- techtree/runs/variants.py +684 -0
- techtree/settings.py +143 -0
- techtree/skills/__init__.py +14 -0
- techtree/skills/archive.py +282 -0
- techtree/skills/policy.py +62 -0
- techtree/skills/scanner.py +394 -0
- techtree/skills/service.py +752 -0
- techtree/skills/starter.py +434 -0
- techtree/tasksets/__init__.py +1 -0
- techtree/tasksets/membership.py +269 -0
- techtree/tasksets/provider.py +207 -0
- techtree/tasksets/resolver.py +311 -0
- techtree/tasksets/service.py +484 -0
- techtree/tasksets/verifiers_cli.py +538 -0
- techtree/uplift/__init__.py +20 -0
- techtree/uplift/context.py +544 -0
- techtree/uplift/derive.py +203 -0
- techtree/uplift/public_tasks.py +151 -0
- techtree/uplift/service.py +719 -0
- techtree/uplift/source.py +160 -0
- techtree/verifiers/__init__.py +31 -0
- techtree/verifiers/budget.py +219 -0
- techtree/verifiers/child.py +633 -0
- techtree/verifiers/compiler.py +432 -0
- techtree/verifiers/config.py +365 -0
- techtree/verifiers/credentials.py +321 -0
- techtree/verifiers/image.py +126 -0
- techtree/verifiers/models.py +527 -0
- techtree/verifiers/outputs.py +368 -0
- techtree/verifiers/progress.py +192 -0
- techtree/verifiers/supervisor.py +341 -0
- techtree/verifiers/verify.py +782 -0
- techtree/version.py +39 -0
- techtree/worker/__init__.py +18 -0
- techtree/worker/execute.py +487 -0
- techtree/worker/main.py +57 -0
- techtree-0.1.0.dist-info/METADATA +344 -0
- techtree-0.1.0.dist-info/RECORD +174 -0
- techtree-0.1.0.dist-info/WHEEL +4 -0
- techtree-0.1.0.dist-info/entry_points.txt +3 -0
- techtree-0.1.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: techtree
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Techtree Climb CLI, detached worker, managed Verifiers engine, and Campaign protocol kernel.
|
|
5
|
+
Author: Techtree
|
|
6
|
+
License-File: LICENSE
|
|
7
|
+
Keywords: campaign,climb,evaluation,techtree,verifiers
|
|
8
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
9
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
10
|
+
Requires-Python: <3.14,>=3.12
|
|
11
|
+
Requires-Dist: cryptography<47,>=45
|
|
12
|
+
Requires-Dist: filelock<4,>=3.18
|
|
13
|
+
Requires-Dist: platformdirs<5,>=4
|
|
14
|
+
Requires-Dist: pydantic<3,>=2.12
|
|
15
|
+
Requires-Dist: rfc8785<1,>=0.1
|
|
16
|
+
Requires-Dist: rich<15,>=14
|
|
17
|
+
Requires-Dist: tomli-w<2,>=1.2
|
|
18
|
+
Requires-Dist: typer<1,>=0.16
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
|
|
21
|
+
# Techtree
|
|
22
|
+
|
|
23
|
+
[](LICENSE) [](https://www.python.org/downloads/) [](https://docs.astral.sh/uv/)
|
|
24
|
+
|
|
25
|
+

|
|
26
|
+
|
|
27
|
+
*`techtree proof verify` reading a finished run’s proof bundle from the bytes
|
|
28
|
+
that run stored.*
|
|
29
|
+
|
|
30
|
+
Techtree is the open improvement and proof network for agent systems. Agents
|
|
31
|
+
compete on executable environments, Skills and harnesses climb through
|
|
32
|
+
controlled trials, and every improvement produces reproducible evidence.
|
|
33
|
+
|
|
34
|
+
This repository contains the Techtree CLI, detached worker, managed Verifiers
|
|
35
|
+
engine, and Campaign protocol kernel.
|
|
36
|
+
|
|
37
|
+
## Climb v0.1
|
|
38
|
+
|
|
39
|
+
> [!IMPORTANT]
|
|
40
|
+
> Techtree Climb v0.1 is a proof of concept for a stack of three independent
|
|
41
|
+
> parts: Prime Intellect’s Verifiers as the evaluation engine,
|
|
42
|
+
> Nous Research’s Hermes as the agent host, and
|
|
43
|
+
> Techtree as the campaign kernel and evidence layer.
|
|
44
|
+
> What it demonstrates is that the three pin together tightly enough for a
|
|
45
|
+
> controlled comparison to run end to end and leave a receipt that verifies
|
|
46
|
+
> offline. It is a development release, and nothing here is a measurement
|
|
47
|
+
> anyone should cite.
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
you
|
|
51
|
+
│ one pasted prompt
|
|
52
|
+
▼
|
|
53
|
+
Hermes (operator) ······ techtree-hermes
|
|
54
|
+
│ fixed argv · one JSON envelope
|
|
55
|
+
▼
|
|
56
|
+
Techtree CLI ··········· techtree-python ◀ this repository
|
|
57
|
+
│ pinned engine, detached runs
|
|
58
|
+
▼
|
|
59
|
+
Verifiers evaluation ··· (Prime Intellect, pinned to an exact commit)
|
|
60
|
+
│ model calls, paid by the participant
|
|
61
|
+
▼
|
|
62
|
+
subject: hermes-agent + pinned model, in a pinned container
|
|
63
|
+
│
|
|
64
|
+
▼
|
|
65
|
+
signed report · proof that verifies offline
|
|
66
|
+
|
|
67
|
+
techtree-ash ─ the site: pinned guide, catalog, published objects, run log
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## The other two repositories
|
|
71
|
+
|
|
72
|
+
- **[techtree-hermes](https://github.com/regents-ai/techtree-hermes)** — the
|
|
73
|
+
Hermes plugin that gives this CLI a conversational operator: it explains,
|
|
74
|
+
prepares, asks for approval, and relays results. It invokes fixed command
|
|
75
|
+
arrays and reads one machine-readable envelope back — evaluation logic never
|
|
76
|
+
lives in the plugin.
|
|
77
|
+
- **[techtree-ash](https://github.com/regents-ai/techtree-ash)** — the website
|
|
78
|
+
at techtree.sh: the pinned installation guide, the campaign catalog, the
|
|
79
|
+
published protocol objects, the public run log, and the docs. Everything it
|
|
80
|
+
shows is served over GET. It has one address that accepts anything, and what
|
|
81
|
+
that address accepts is a signed run somebody chose to publish.
|
|
82
|
+
|
|
83
|
+
The evaluation engine, the agent host, and the container the subject runs in
|
|
84
|
+
are each pinned to an exact version, and the release is only as reproducible as
|
|
85
|
+
those pins. Those are the seams of the stack, and they are worth knowing about
|
|
86
|
+
before anyone leans on a result.
|
|
87
|
+
|
|
88
|
+
| Layer | What | Pin |
|
|
89
|
+
| --- | --- | --- |
|
|
90
|
+
| Evaluation engine | Prime Intellect’s Verifiers | pinned to an exact commit |
|
|
91
|
+
| Agent host | Nous Research’s Hermes, the operator | host Hermes 0.20.1 or newer |
|
|
92
|
+
| Evaluated subject | hermes-agent, in a pinned container | 0.19.0 |
|
|
93
|
+
| Subject model | qwen/qwen3.7-flash, reached through prime | named by the Campaign |
|
|
94
|
+
| Campaign kernel and evidence | the Techtree CLI | Python 3.12, managed with uv |
|
|
95
|
+
|
|
96
|
+
Techtree Climb v0.1 (“Techtree Hello World”) is a toy, synthetic demonstration
|
|
97
|
+
of Skill uplift. It runs the same pinned agent on the same tasks twice, changes
|
|
98
|
+
only the declared Skill, shows the measured difference, and creates a signed
|
|
99
|
+
local receipt with an offline proof check.
|
|
100
|
+
|
|
101
|
+
The repository contains the real evaluation path: managed engine installation,
|
|
102
|
+
containerized subject runs, append-only run records, signed receipts and
|
|
103
|
+
reports, local proof verification, and one guided single-`SKILL.md` revision
|
|
104
|
+
flow. The release candidate remains inactive until the release gates in
|
|
105
|
+
`docs/v0.1-remaining-tickets.md` are complete and the founder gives the exact
|
|
106
|
+
final approval phrase.
|
|
107
|
+
|
|
108
|
+
> [!NOTE]
|
|
109
|
+
> No Techtree account is required. A model-provider account and an active Prime
|
|
110
|
+
> CLI configuration are required for the introductory comparisons, which spend
|
|
111
|
+
> model tokens.
|
|
112
|
+
> Techtree uploads nothing unless you publish a run yourself, and what travels
|
|
113
|
+
> then is the receipt, never the episodes.
|
|
114
|
+
> Model inference is sent to the selected provider under that provider’s policies.
|
|
115
|
+
> The resulting evidence is participant-attested and has not been independently reproduced.
|
|
116
|
+
|
|
117
|
+
## Campaign kernel
|
|
118
|
+
|
|
119
|
+
Climb is a public wrapper around a reusable CampaignSpec. Execution artifacts
|
|
120
|
+
reference the CampaignSpec, not the public Climb directly.
|
|
121
|
+
|
|
122
|
+
A Climb owns public identity: slug, version, title, status, schedule, and the
|
|
123
|
+
candidate, publication, and leaderboard policies. A CampaignSpec owns the
|
|
124
|
+
science: taskset reference, selection and membership commitment, environment,
|
|
125
|
+
named agents, evaluation backend, scoring, evidence requirements, and budgets.
|
|
126
|
+
Every campaign points at a DataPolicy, and every artifact a run produces
|
|
127
|
+
carries that policy’s digest, so the rights attached to a submission cannot
|
|
128
|
+
change quietly between preparation and publication.
|
|
129
|
+
|
|
130
|
+
## Source installation
|
|
131
|
+
|
|
132
|
+
Techtree supports Python 3.12 and 3.13. Release acceptance journeys use a
|
|
133
|
+
pinned Python 3.12 interpreter. Use [uv](https://docs.astral.sh/uv/) for every
|
|
134
|
+
workflow.
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
uv sync --python 3.12
|
|
138
|
+
uv run techtree --version
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
That creates the project environment and installs the `techtree` and
|
|
142
|
+
`techtree-worker` executables into it. It is a source-development install, not
|
|
143
|
+
the public-coordinate release journey.
|
|
144
|
+
|
|
145
|
+
## The evaluation credential
|
|
146
|
+
|
|
147
|
+
> [!WARNING]
|
|
148
|
+
> Starting a comparison spends model tokens against your own provider credit.
|
|
149
|
+
> Nothing causing LLM token spend starts on its own: `techtree climb start` and
|
|
150
|
+
> `techtree uplift start` put the prepared comparison in front of you first and
|
|
151
|
+
> begin only once you have approved it.
|
|
152
|
+
|
|
153
|
+
Running a comparison pays for the evaluated agent’s model calls, and that
|
|
154
|
+
credential is yours. Techtree never stores it, never logs it, and never puts it
|
|
155
|
+
in a run’s files. It is also separate from whatever host agent you are talking
|
|
156
|
+
to.
|
|
157
|
+
|
|
158
|
+
**Exporting it in your terminal is not enough.** A comparison does not run
|
|
159
|
+
inside the command you typed: `techtree climb start` and `techtree uplift start`
|
|
160
|
+
hand the work to a separate background process, and that process is given a
|
|
161
|
+
deliberately small environment so that unrelated local state cannot lean into
|
|
162
|
+
an experiment. Variables exported in the shell are not passed to it. A run
|
|
163
|
+
that cannot find the credential stops before model inference begins and says
|
|
164
|
+
so.
|
|
165
|
+
|
|
166
|
+
The supported path is an active Prime CLI configuration:
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
prime login
|
|
170
|
+
techtree doctor --climb hello-world-climb@1
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Naming the Climb is what asks about the credential. `--for-evaluation` checks
|
|
174
|
+
the machine — that anything could run here — and `--climb` checks the subject
|
|
175
|
+
this Climb would run: its model credential and its container image. It implies
|
|
176
|
+
`--for-evaluation`, so the command above is the complete check.
|
|
177
|
+
|
|
178
|
+
The credential line answers for the detached run rather than for the terminal
|
|
179
|
+
that invoked Doctor. It never prints the credential itself. A present but
|
|
180
|
+
revoked credential can still fail at the provider’s first model call.
|
|
181
|
+
|
|
182
|
+
## Local development
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
make install # uv sync
|
|
186
|
+
make format # rewrite formatting and apply safe lint fixes
|
|
187
|
+
make check # format-check, lint, typecheck, test, generated-check
|
|
188
|
+
make test-integration
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
`make check` and `make test-integration` are the repository gates. The
|
|
192
|
+
scientific environment is separate: the managed engine under
|
|
193
|
+
`src/techtree/resources/engines/default/` has its own pinned dependencies and
|
|
194
|
+
lock file, and the ordinary package never depends on Verifiers, Hermes, or
|
|
195
|
+
NeMo Relay.
|
|
196
|
+
|
|
197
|
+
## Command overview
|
|
198
|
+
|
|
199
|
+
| Group | Commands | What it does |
|
|
200
|
+
| --- | --- | --- |
|
|
201
|
+
| Getting ready | `techtree setup`<br>`techtree doctor --climb <climb-slug>` | Prepares this machine to run a Climb, and checks that it is ready. Naming a Climb also checks the subject that Climb would run: its model credential and its container image. |
|
|
202
|
+
| Climbs | `techtree climb list`<br>`techtree climb show <climb-slug>`<br>`techtree climb prepare <climb-slug> --skill <path>`<br>`techtree climb start <draft-id>` | Shows the Climbs available in this build; shows what one measures, the data rights it carries, and whether this machine can run it; prepares a Skill for submission; and starts a prepared submission running. |
|
|
203
|
+
| Runs | `techtree run status <run-id> --watch`<br>`techtree run logs <run-id> --tail 200`<br>`techtree run result <run-id>` | Shows how a run is progressing, shows its log output, and shows the finished report for a run. |
|
|
204
|
+
| Proof | `techtree proof verify <run-id>` | Checks a local proof offline, from the bytes the run stored. |
|
|
205
|
+
| Improving a Skill | `techtree uplift context <run-id>`<br>`techtree uplift prepare --from-run <run-id> --candidate-skill <path>`<br>`techtree uplift start <draft-id>` | Exports the sanitized improvement context for a finished run, prepares a comparison between that run’s Skill and a revision of it, and starts the prepared comparison. |
|
|
206
|
+
|
|
207
|
+
The detached worker is started by the CLI and is not a user-facing command.
|
|
208
|
+
Every command has rendered output for a person and, with `--json`, exactly one
|
|
209
|
+
JSON object on standard output for another program. Logs go to standard error.
|
|
210
|
+
|
|
211
|
+
## Configuration
|
|
212
|
+
|
|
213
|
+
| Setting | What it does |
|
|
214
|
+
| --- | --- |
|
|
215
|
+
| `--home <path>` | The directory Techtree keeps its local state in. |
|
|
216
|
+
| `TECHTREE_OUTPUT_MODE` | `json` emits one JSON envelope instead of human output; `human` otherwise. |
|
|
217
|
+
| `TECHTREE_LOG_LEVEL` | The level of the operational detail written to standard error; `INFO` unless set. |
|
|
218
|
+
| `TECHTREE_ACTIVE_ENGINE_DIGEST` | The digest of the managed evaluation engine to use. |
|
|
219
|
+
|
|
220
|
+
An unrecognized `TECHTREE_*` variable is ignored rather than guessed at.
|
|
221
|
+
|
|
222
|
+
## Local proof
|
|
223
|
+
|
|
224
|
+
A finished run signs its receipts and report with an Ed25519 key this machine
|
|
225
|
+
made and keeps. The signed documents travel together in a proof bundle inside
|
|
226
|
+
the run directory, and `techtree proof verify` checks that bundle from its
|
|
227
|
+
stored bytes. The proof check needs no network, no Techtree account, and no
|
|
228
|
+
Techtree service state, so a copied bundle can be checked on another machine.
|
|
229
|
+
|
|
230
|
+
A verified proof makes a bounded claim: the participant’s key vouches for
|
|
231
|
+
bytes that verify against one another. Nobody else witnessed the computation,
|
|
232
|
+
and the comparison has not been independently reproduced. Running the
|
|
233
|
+
comparison is different from checking its proof: model inference is sent to
|
|
234
|
+
the model provider whose credentials the run uses.
|
|
235
|
+
|
|
236
|
+
## Improving a Skill
|
|
237
|
+
|
|
238
|
+
A finished run can be continued. `techtree uplift context` writes a sanitized
|
|
239
|
+
account of what the run showed—the objective, headline numbers, and tasks worth
|
|
240
|
+
looking at—for a host agent to read before proposing a revision. It carries no
|
|
241
|
+
hidden expected answer, grader material, credential, local path, or transcript
|
|
242
|
+
of what the evaluated agent replied.
|
|
243
|
+
|
|
244
|
+
`techtree uplift prepare` sets up the second comparison: the Skill measured in
|
|
245
|
+
the first run versus the revision, with everything else held fixed. The
|
|
246
|
+
baseline is pinned to the archived Skill rather than to a mutable directory.
|
|
247
|
+
The revision goes through the same scanner and controlled-comparison checks,
|
|
248
|
+
and the data policy is shown and accepted again before the second run starts.
|
|
249
|
+
The second comparison produces its own signed report and local proof.
|
|
250
|
+
|
|
251
|
+
The CLI does not write the revision and does not call a model to propose one.
|
|
252
|
+
That one proposal belongs to the host-agent layer and is separately
|
|
253
|
+
approval-gated.
|
|
254
|
+
|
|
255
|
+
## Repository architecture
|
|
256
|
+
|
|
257
|
+
```text
|
|
258
|
+
src/techtree/ CLI package
|
|
259
|
+
models/ protocol objects
|
|
260
|
+
cli/ Typer commands and rendering
|
|
261
|
+
catalog/ embedded campaign and Climb catalog
|
|
262
|
+
skills/ Skill scanning and archiving
|
|
263
|
+
manifests/ drafts/ experiment manifests and prepared submissions
|
|
264
|
+
runs/ worker/ run state, events, and detached execution
|
|
265
|
+
engines/ managed engine registry, installer, and runner
|
|
266
|
+
tasksets/ taskset resolution, membership, and validation
|
|
267
|
+
resources/ embedded catalog, release contract, and engine bundle
|
|
268
|
+
docs/ architecture, protocol, decisions, and release contracts
|
|
269
|
+
release/ release inputs, generated contract, and audit records
|
|
270
|
+
schemas/v1alpha1/ exported JSON Schemas
|
|
271
|
+
tools/ generators and unpackaged release verification tools
|
|
272
|
+
plugin/ tooling for the Hermes plugin in the sibling checkout
|
|
273
|
+
tests/ unit, contract, integration, preflight, and fixtures
|
|
274
|
+
plugin/ the Hermes plugin's own suite (`make test-plugin`)
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
Dependencies point inward: commands depend on services, services depend on
|
|
278
|
+
protocol models, and protocol models depend on nothing in the package.
|
|
279
|
+
|
|
280
|
+
## Testing
|
|
281
|
+
|
|
282
|
+
```bash
|
|
283
|
+
make test
|
|
284
|
+
make test-unit
|
|
285
|
+
make test-contract
|
|
286
|
+
make test-integration
|
|
287
|
+
make verifiers-preflight
|
|
288
|
+
make test-plugin
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
Integration and preflight tests are excluded from the default pytest selection
|
|
292
|
+
because they are slower and, for preflight, require the pinned Verifiers build.
|
|
293
|
+
No test reads or writes a real user home; suites work inside a temporary
|
|
294
|
+
Techtree home.
|
|
295
|
+
|
|
296
|
+
`make test-plugin` runs the Hermes plugin's own battery, which lives here
|
|
297
|
+
rather than in the plugin checkout: it carries fixtures written to look exactly
|
|
298
|
+
like the attacks the plugin's guards refuse, and the plugin checkout is what an
|
|
299
|
+
install-time scanner reads before a host will install it. The suite reads the
|
|
300
|
+
plugin out of the `techtree-plugin` checkout beside this one, and says so if it
|
|
301
|
+
is not there. `make typecheck-plugin` type-checks it.
|
|
302
|
+
|
|
303
|
+
## Security boundaries
|
|
304
|
+
|
|
305
|
+
- Skills are untrusted input. The CLI scans and archives them; it does not
|
|
306
|
+
execute submitted Skill files.
|
|
307
|
+
- Completed evidence is append-only. The product never rewrites a finished
|
|
308
|
+
run’s stored bytes.
|
|
309
|
+
- Receipts and reports use Ed25519 signatures, and proof verification reads the
|
|
310
|
+
stored bundle rather than a Techtree service.
|
|
311
|
+
- Provider credentials are not stored in Techtree settings, logs, arguments,
|
|
312
|
+
drafts, runs, receipts, reports, or proof bundles.
|
|
313
|
+
- Detached workers receive a deliberately scrubbed environment. Do not loosen
|
|
314
|
+
the allow-list in `src/techtree/runs/launcher.py`.
|
|
315
|
+
- Displayed commands are argument vectors for a person or host to review. The
|
|
316
|
+
CLI does not execute a model-authored shell string.
|
|
317
|
+
- Local state is created under private Techtree directories. The website's
|
|
318
|
+
release surface is read-only; its one write address takes a signed
|
|
319
|
+
publication or withdrawal and nothing else.
|
|
320
|
+
|
|
321
|
+
## Generated files
|
|
322
|
+
|
|
323
|
+
Some committed files are generated and must never be hand-edited: the JSON
|
|
324
|
+
Schemas under `schemas/`, protocol goldens under `tests/golden/`, the embedded
|
|
325
|
+
catalog under `src/techtree/resources/catalog/`, the managed engine bundle
|
|
326
|
+
under `src/techtree/resources/engines/`, and generated release-contract copies.
|
|
327
|
+
|
|
328
|
+
```bash
|
|
329
|
+
make regenerate
|
|
330
|
+
make generated-check
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
`make generated-check` regenerates into a temporary tree and does not write to
|
|
334
|
+
the working tree.
|
|
335
|
+
|
|
336
|
+
## Protocol and release documentation
|
|
337
|
+
|
|
338
|
+
- `docs/protocol-v1alpha1.md` — normative protocol definition
|
|
339
|
+
- `docs/architecture.md` — system architecture
|
|
340
|
+
- `docs/cli-json-contract.md` — machine-mode CLI contract
|
|
341
|
+
- `docs/run-state-machine.md` — internal lifecycle and public projection
|
|
342
|
+
- `docs/agent-handoff.md` — current three-repository handoff
|
|
343
|
+
- `docs/v0.1-remaining-tickets.md` — remaining release work and contracts
|
|
344
|
+
- `docs/decisions/` — binding decisions
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
techtree/__init__.py,sha256=dAAknsyf6O7zTggmdZzPOCfY4zum36qBmFKS-0TJ7gc,1247
|
|
2
|
+
techtree/__main__.py,sha256=3ztj_jACAcwa522hzIhMzXbgBR2_4MMLMAKbiH4-qxQ,264
|
|
3
|
+
techtree/canonical.py,sha256=aUD3ibMgytLX_j2MrB25QKAaaCq0pxPpwFmCxX46CgQ,8759
|
|
4
|
+
techtree/constants.py,sha256=bk8kBHdj3_zCBBrp-ZJ9qhth0HB2GyXX4OY_v-OoF6Y,6626
|
|
5
|
+
techtree/crypto.py,sha256=D9srgvpIT6ZHMdcDBw3_31tRCyZyjZQ_ncirMiwVWQo,4241
|
|
6
|
+
techtree/errors.py,sha256=elOOrr2ouEeHXzhsOVOtbXEUs32QMgeNIb7NNe2wuNc,9079
|
|
7
|
+
techtree/fs.py,sha256=uhnhe8aCyDumFdmjhyH7po0HIQoY2ZnIDU50-k8KU6s,8211
|
|
8
|
+
techtree/harness.py,sha256=goPWwZW77fi_KDRTnR0IgExPavcI_liLAZL9ej_OZPI,4220
|
|
9
|
+
techtree/ids.py,sha256=jMUXR4V9mPXgll5HnoGip_QrUCiSJPXgxsWvrFf_tNg,2470
|
|
10
|
+
techtree/paths.py,sha256=1RKsHRSLRaFuwlUtHqU8hYQIWjwVLG31E2ArlwWHX28,3940
|
|
11
|
+
techtree/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
|
+
techtree/settings.py,sha256=_9E0-NYnNhEptX229IAeRKOp3eFVNP09zd3U2VkjVKE,5079
|
|
13
|
+
techtree/version.py,sha256=2LvJNOjEji0BvHEwgv3ok1sbhm8Fu4j8gi03lrPdjgQ,1156
|
|
14
|
+
techtree/catalog/__init__.py,sha256=wdSZ37YuqUUzqhFCZpU8UylN-VlrqzG-778Pp0UZxEQ,1008
|
|
15
|
+
techtree/catalog/repository.py,sha256=NlBsN-JV4PzTj_EZsnFxKeerdSFbaHkI3OU0GO9Mzxs,16008
|
|
16
|
+
techtree/catalog/service.py,sha256=L_o-Hdou0tTiFtTUQ9xX_RWGmrWTTVugFmRqyFaK1kQ,17591
|
|
17
|
+
techtree/cli/__init__.py,sha256=A0k0cron7ApRQli4IZNSmiJXRbW9Y7tC-U-6E_eVz7k,39
|
|
18
|
+
techtree/cli/app.py,sha256=k-NvEu1HnnzV4_urx9ejrEu54ro4iNPDf5xLU1G8Ldw,13985
|
|
19
|
+
techtree/cli/confirm.py,sha256=mh9prDJ2ThKGkg6mnoqxEqFAF8vQzmMdAds5PSnKReM,2204
|
|
20
|
+
techtree/cli/context.py,sha256=w1MxZT4xU2kgwvrI4llu8HBDaXU_H0MFhOKV4KwQLTo,2902
|
|
21
|
+
techtree/cli/invoke.py,sha256=8gSW2had29qxJwbMNP96c1kkdZxIikRL0iym_3gOghc,7135
|
|
22
|
+
techtree/cli/output.py,sha256=5Uiu2u2spKcGbjFytmgd0Tz8e0VlTWudoiAz5AuTleY,10043
|
|
23
|
+
techtree/cli/commands/__init__.py,sha256=CuYTl1hsALQq2sSqovv8ou5NjfmOBSiUxYNSD8MiduY,76
|
|
24
|
+
techtree/cli/commands/climb.py,sha256=02HsgonKovd8cU6KYFbj5QCpAV_2GHiyLxmndXI0-_w,46714
|
|
25
|
+
techtree/cli/commands/doctor.py,sha256=YBNaGqlguX2_gNjgVmyQBky5FWCwZhISnih0dgbu0zI,5358
|
|
26
|
+
techtree/cli/commands/engine.py,sha256=Rxo3a64MvkXELVRgeTooj92gHrzj8r1h-avJf39w9VU,7559
|
|
27
|
+
techtree/cli/commands/proof.py,sha256=IspgIBnpx_A6GLbDp8uOI-FOq6nTleBGq3S_37YeXFQ,20230
|
|
28
|
+
techtree/cli/commands/publish.py,sha256=syHZ_9EpbrPzo4y-ymvTQrGRrGatfu9cloEqStXEx1Q,17582
|
|
29
|
+
techtree/cli/commands/release.py,sha256=QGxBeX0GZRWmFwgdZGlx93V3QXBkMgIouqp1Zp_rNdU,10441
|
|
30
|
+
techtree/cli/commands/run.py,sha256=FfWiP9FSgVRAkC-e7evxmdJE7SdhnKC_CNdqtjiWyt0,39217
|
|
31
|
+
techtree/cli/commands/setup.py,sha256=dEVXvSPK37LVvgX5TDwYtYdj-8rEwHHjjf19frsDTG8,6836
|
|
32
|
+
techtree/cli/commands/skill.py,sha256=PfXvSniedEX_sdroNN5a9FDXP6oZFdsdASq-TY4-wnU,8886
|
|
33
|
+
techtree/cli/commands/uplift.py,sha256=W8XSsyR6u5Q0oWreCldlaJyi2cbm8RNy7Y4jlnWKwGY,25423
|
|
34
|
+
techtree/cli/commands/withdraw.py,sha256=P_L0X6_ol6CWhUoh1nTf1vyyD00bX9rGubkoohjWrfk,7885
|
|
35
|
+
techtree/doctor/__init__.py,sha256=ANMirRJTHkluqHcnrBstPLhNAzCvr6YK96ersAKSm5Q,81
|
|
36
|
+
techtree/doctor/checks.py,sha256=XTZRRbblyQH0xQbf8tGdD7WSK7py3jdAHzVL9f2PQ2M,23505
|
|
37
|
+
techtree/doctor/execution_checks.py,sha256=s-4oKr97ijqVGZHPqPkBE2eBOSE_3gmZ_g6IRtVNqus,16342
|
|
38
|
+
techtree/doctor/service.py,sha256=3xQRbaGu5JRV-UtqyyqWZmHxB5EkbNy6o0DFRYUelok,12265
|
|
39
|
+
techtree/drafts/__init__.py,sha256=YYgsjZZQak965IyN32b3PLiimLQMC4hJOEoAIn-2ITA,1389
|
|
40
|
+
techtree/drafts/source.py,sha256=PWaLMqnUx5YDdPkNbTWG3d1lJzyQiVf5FW0ICpI1frw,6045
|
|
41
|
+
techtree/drafts/store.py,sha256=UQdBat-xBUEnzMrnbrzaNJlA8LJdZdB03a44fGxLH5U,38727
|
|
42
|
+
techtree/engines/__init__.py,sha256=JwBGKo1t4fCypvLMazCoGiRnt37_-uY4Lm9zj1q7zgw,73
|
|
43
|
+
techtree/engines/bundle.py,sha256=DCsROQKWywFRxQJ3BVJ9_pUh9PXr-O3AMOPYaC9N-0Y,9394
|
|
44
|
+
techtree/engines/installer.py,sha256=fYl80_eYT10yDgu746zypmxitR6OYAc-yaP2reM8Ghs,26259
|
|
45
|
+
techtree/engines/registry.py,sha256=mbI6litfjYGAZEy_DUsXMmOzXFxemjdSDJBEpv-QrGA,9008
|
|
46
|
+
techtree/engines/runner.py,sha256=UqyYwQVaUF5nySvh19apzKg5ClTS38sVfqaspaA1dho,6076
|
|
47
|
+
techtree/identity/__init__.py,sha256=wDjmhZRe2tSPvsJBIiJqaMevdNKHxJg3oh4I-h0tpR0,1814
|
|
48
|
+
techtree/identity/models.py,sha256=KmShqLRGPqIF2_OYVscH5UPk1iTxQ1g6wuCHjEJJ8nE,4092
|
|
49
|
+
techtree/identity/service.py,sha256=0bO19rudyHpxAbE7X4NhF2hlfQL9UUPQK2-KpgGi4zA,7611
|
|
50
|
+
techtree/identity/store.py,sha256=jxH-uKhBreAuV5eI0Tr0-B1YnL4UZc6lHLFP6D8AEQU,10235
|
|
51
|
+
techtree/manifests/__init__.py,sha256=Ucisa2VgsSZe2_DD1hLSRODswsS4fri5YvG7O5Ye43s,1436
|
|
52
|
+
techtree/manifests/builder.py,sha256=U6LkpFIPsNYKDDesf9d6lR6E4VonUPo1L7yw3F8zmZg,17058
|
|
53
|
+
techtree/manifests/compare.py,sha256=V-i3CGTS-Mr_aFwp6QDHnJDzANJTJbZTMq1eNV6PFvo,14293
|
|
54
|
+
techtree/models/__init__.py,sha256=YE6DScusS5SysLmonTIY6rZsyqMFsk0oHkqq2IS6CSw,6486
|
|
55
|
+
techtree/models/base.py,sha256=lUIw8AlJZktkX77yjo-c7t10uOTkYYq35NmPzYyBPH4,6202
|
|
56
|
+
techtree/models/campaign.py,sha256=xUNaZ0QX0m0_x6sM0W1SMOQl2KMF-NHh_2dFDadjOkQ,16966
|
|
57
|
+
techtree/models/catalog.py,sha256=8e04FOZo2JN88AXLyJoNMWMKtPUPDewdQJuZW6gqhjw,8329
|
|
58
|
+
techtree/models/cli.py,sha256=tl75LsgKDs8FcdmMOAorvxspun2JYc7nNeH20R96K9k,4937
|
|
59
|
+
techtree/models/climb.py,sha256=MsoM8QgSuDDfmKpOBbp1jLf8wRcGywsESvW2zIWcSC0,9137
|
|
60
|
+
techtree/models/data_policy.py,sha256=DQCtP1WTEjKsTNPyGInpU-1LsIJZ4wnBZz1zaZjh0cU,4583
|
|
61
|
+
techtree/models/engine.py,sha256=v3RAzUb-uAbwyZCkG1u-SAGR2PIUWxvB2Jq4bQOlgjs,5369
|
|
62
|
+
techtree/models/episode_receipt.py,sha256=yXJC9Fb72ms-duNP2W_XblffrulQwuVIr_16WsSxY8M,4291
|
|
63
|
+
techtree/models/evaluation_backend.py,sha256=OsFV_ZBeTDF9kdgmSPBrlBN9LfErwOngtoEArgBC6Rk,4246
|
|
64
|
+
techtree/models/experiment.py,sha256=dvQVSr-d9DiqEHKXMskb5HwKHhC9SY6g9NpOtFHF4c4,5397
|
|
65
|
+
techtree/models/run.py,sha256=oQtijzVqJSN2ocovFJkqMMfviRD3mkqcTN7ovGmmdKs,7885
|
|
66
|
+
techtree/models/skill.py,sha256=0HomLyuNbEi9SeyevXwCYtaPgIqvVWBHjvC99H6hs80,5920
|
|
67
|
+
techtree/models/uplift_report.py,sha256=VWWUWHMeymC9Ilmd5kT2-uLeBcHIzbbSb4DakY4FMUw,5100
|
|
68
|
+
techtree/models/validation.py,sha256=ZeJyJqa5BqN1ARAlrVlcxdpB_PFiCUsRGP5wJRGVUp4,11115
|
|
69
|
+
techtree/presentation/__init__.py,sha256=yC881EXVJLuBkBQqC1uJD2KufMhdunYCFs6MWEm-iLo,1233
|
|
70
|
+
techtree/presentation/build.py,sha256=tfK_n12qpxM1rtIGUwoOptE1Nd40AqXl-XZdDO-inm4,50380
|
|
71
|
+
techtree/presentation/compact.py,sha256=u_z1vjkcpidIh0uMKxNgVRiM_hx4MfJVRVay-foV8P8,9602
|
|
72
|
+
techtree/presentation/evidence.py,sha256=xA3Gj34Zpcm9cURxwLVChsK4AkmnEh6tWhQhVqjkeuM,6246
|
|
73
|
+
techtree/presentation/models.py,sha256=RuX3kvwFRJWYr-0XME4vWZfj_Ln6Coh4RWovUahgMP8,14184
|
|
74
|
+
techtree/presentation/rich.py,sha256=9ASumHkNOHMvyzOWpBY3YhQsOnB9UtHFjwjXAbMwNt8,11864
|
|
75
|
+
techtree/presentation/sanitize.py,sha256=lu-KEkXcQUMeXZBSYIA-Y-tri6nBA1E0Dx1fXJWeGBo,6507
|
|
76
|
+
techtree/publication/__init__.py,sha256=dEfnb9UozV6GdBVJYlmxcAikz0IHJAt5XvgxoU_xm70,1817
|
|
77
|
+
techtree/publication/address.py,sha256=lXUp4pbFGgxK-tghbFeGOC9VPqC-APcMOzg62WOBp9w,7169
|
|
78
|
+
techtree/publication/coordinates.py,sha256=K_ZCHR_S_vdWZ1yatbNSNNl21-aEQyGBnEmtZewrTrU,1154
|
|
79
|
+
techtree/publication/journal.py,sha256=TX-uydq1lAn-X9C5fsTimnsVORGenM0fnBycxuwn93s,8905
|
|
80
|
+
techtree/publication/keccak.py,sha256=wLNFq4yeJqWeQpLo0tQI0snVlGq2VOrhOai8ADOFJMM,5844
|
|
81
|
+
techtree/publication/models.py,sha256=L3vkjAxoMvdgtScVnYpZa3TDGQfJiDV0YkjxXHs9nWU,9704
|
|
82
|
+
techtree/publication/offer.py,sha256=y60VN1MjYaXfoEZANwdWnzzSQxmQQuEJ5lLOsUMbqj8,1372
|
|
83
|
+
techtree/publication/service.py,sha256=uGY1_A9EoBtTGoD24WDPs6rqLoo07Q8SLOpCsiPhl0c,26341
|
|
84
|
+
techtree/publication/transport.py,sha256=ahlnx1nQT4CfKmhqSvyNhAIHYzRflosHoXoMpZczNi4,12510
|
|
85
|
+
techtree/publication/verify.py,sha256=C5JYWnSm7uwIoBRmueQcoYkMQ9WGdsM8JlEt8CQAn8o,9383
|
|
86
|
+
techtree/publication/withdraw.py,sha256=wmNw9zOZMQk4dm7_t60Dq04ZNe8BAEBK9tK61XdLQEk,6188
|
|
87
|
+
techtree/receipts/__init__.py,sha256=Vbyum8eNxDgdOvctcrSedb0EdqFsWhhwX0dEhtSwTMQ,2432
|
|
88
|
+
techtree/receipts/bundle.py,sha256=hJD38M-tn_wtkmuTmkkyEjjqSD_Nk4qgLGqukMQJthw,21992
|
|
89
|
+
techtree/receipts/compare.py,sha256=uxUe0k_KJh-oibRi3UipIXjpaVt9dRKqWYEtJ4UVprg,41101
|
|
90
|
+
techtree/receipts/episode.py,sha256=j-z1tKBnKLecOOp3eDq3lKpPMTY6ZvlBH1A9R_abGvA,26525
|
|
91
|
+
techtree/receipts/execution.py,sha256=By_uabummUJYONdX9Lk-0IRL7KgpGRqgwmpV6pJSNXM,24719
|
|
92
|
+
techtree/receipts/observed.py,sha256=5G_XW6umbB-jhsPTRgGU7Dh4uyVLJPkObKgTvgY_vAQ,19881
|
|
93
|
+
techtree/receipts/set.py,sha256=hlivQ0dWO9nMwXFElw_hoBpU5VL0HtvTYxDuTsfP_T8,12522
|
|
94
|
+
techtree/receipts/uplift.py,sha256=HfmKvtjhsmbRUmjD6LFrHoR-rHiVsGYBYOQjUwhscCs,26179
|
|
95
|
+
techtree/receipts/verify.py,sha256=DIOkc7srN0VkBKYzxtdKoTJKC338Rcj0qQXj02jMGp8,38406
|
|
96
|
+
techtree/release/__init__.py,sha256=PR9YYD-i3WB8t5yfY6MJP5jgli7n1pvOuttM91HZdaM,418
|
|
97
|
+
techtree/release/bootstrap.py,sha256=PdXw3x1FpgcMBAYq63TaVlbhmbJvRYAheio5qEKjmmo,20178
|
|
98
|
+
techtree/release/checks.py,sha256=GW4XQj3r0XFj9l4Y9jHD5mUDYpSrb2u3CztQDbjPdaU,13388
|
|
99
|
+
techtree/release/document.py,sha256=MOqeNmxX01J36VKGICLj7T7VR30GUVH_jKlusFbGN0E,4623
|
|
100
|
+
techtree/release/generate.py,sha256=QNZgeJhDnG5ZZEgmYkoP_it8JG4kmPN-_0yV8Z2ZEZs,9438
|
|
101
|
+
techtree/release/models.py,sha256=mvjxcFnt3SeuZ09C68UG5kA7OcVjqsG10XJ7t39uiEk,12859
|
|
102
|
+
techtree/release/provenance.py,sha256=G-k0FleEGJxKsP8_oIQJVxMiNRexnO9olzX-hsbfqK0,4003
|
|
103
|
+
techtree/resources/catalog/catalog.json,sha256=EKf8xd4ZUcFFCZR8BRKk7rJHpwPN8BzD8mhYCXmn0Sw,1141
|
|
104
|
+
techtree/resources/catalog/campaigns/hello-world-climb.json,sha256=6_Apq7JmynTC3vUOsjAwURurDpKca_SmhpH5ta_VVLE,5086
|
|
105
|
+
techtree/resources/catalog/climbs/hello-world-climb.json,sha256=o6Xpxfm0DU8I-tVIUjd-IB_Q1t1Kz6TFZaDt-sMkojY,1016
|
|
106
|
+
techtree/resources/catalog/data-policies/hello-world-climb.json,sha256=bFMqQ9WVKGoIJgSBiQu7_6FtG03YlGXRzIOVCZ2evPk,681
|
|
107
|
+
techtree/resources/catalog/taskset-validations/hello-world-climb.json,sha256=SUS9ccqhopXgMyWxinr3U9DY_PeHGJyJJEIJFxzaEwI,1294
|
|
108
|
+
techtree/resources/catalog/validation-evidence/hello-world-climb.json,sha256=mRvl5CrL1Ixr2ar44fWlokeMCg5L8ErU8r6EtwKt7kM,6889
|
|
109
|
+
techtree/resources/engines/default/engine.json,sha256=bhRL-lkbYUadpwSYG5jVGKRet4UgqnYyUEt46qRnjp0,500
|
|
110
|
+
techtree/resources/engines/default/pyproject.toml,sha256=4-QjeuS1XzM_85NZ4lJ9tBr-Yh7Gzq6ASRSsJ11Pj3I,819
|
|
111
|
+
techtree/resources/engines/default/uv.lock,sha256=gSC6QigGfeWVyW4FLQ6jMcocH0SlTpF9jNFCy3Ei69s,225604
|
|
112
|
+
techtree/resources/engines/default/packages/procedure-transfer-v1/pyproject.toml,sha256=HHcvBp7mvKWOpaAGEJd9m_o2pzjfOvGO2GDkH47P0lA,318
|
|
113
|
+
techtree/resources/engines/default/packages/procedure-transfer-v1/procedure_transfer_v1/__init__.py,sha256=kN7FO_Ev8dn8UUhwiTxjRYkkmyNtWi60VJLTs2rq0WA,201
|
|
114
|
+
techtree/resources/engines/default/packages/procedure-transfer-v1/procedure_transfer_v1/algorithm.py,sha256=C05uIDVN6vhN6aH9QP_Wwr3rS7UAOBzLYQ2tBxijJus,3804
|
|
115
|
+
techtree/resources/engines/default/packages/procedure-transfer-v1/procedure_transfer_v1/dataset.py,sha256=AcYXY4ElAj08rDymbvffXr90BD_1DxnW__0FH0hQlmI,4841
|
|
116
|
+
techtree/resources/engines/default/packages/procedure-transfer-v1/procedure_transfer_v1/env.py,sha256=lWlI8qv-cosxEc3RTqbZvhxlME0oHF4koX10Ki6gp_M,2064
|
|
117
|
+
techtree/resources/engines/default/packages/procedure-transfer-v1/procedure_transfer_v1/taskset.py,sha256=YTgz1Z_TUYWQLPERvEuOngh1Mt44xqid4vmmgHOLp-o,5243
|
|
118
|
+
techtree/resources/engines/default/tools/inspect_taskset.py,sha256=vTQwDyXWFgJJ5OYjH8nw8dHAl_SoFv5k3Rh3t5kQNhY,4475
|
|
119
|
+
techtree/resources/engines/default/tools/normalize_eval_output.py,sha256=2vEGW6kU3fqZXq_06Ga6BYfAnkjxjORCQbyOm1bV17A,18453
|
|
120
|
+
techtree/resources/engines/default/tools/normalize_validation.py,sha256=cR54ACFAb-yFq893oiuo3saXXMlI05XsjUgIpFSchNM,8256
|
|
121
|
+
techtree/resources/harness/hermes-agent-0.19.0.json,sha256=5kiax5n2g8siWSnJcIr5fNO9DTBQdAXNEQkHR0ZpGnU,2437
|
|
122
|
+
techtree/resources/release/build-provenance.json,sha256=T1yn7kvwka76WfEaohBSPQW8sce0162CWT4AkIsVLdE,118
|
|
123
|
+
techtree/resources/release/release-core.json,sha256=yStgLoCXpkmMSfUlh6SG9G8s_Qp63-XLCCxemFJ-QKE,1215
|
|
124
|
+
techtree/runs/__init__.py,sha256=TlQ5gjKRL3JO8YYaZvEv3dHZk7jZDbG2glD_0kN2BX0,1132
|
|
125
|
+
techtree/runs/artifacts.py,sha256=ZBU_g_9ON4P0OkA7B8gK-RToTV7Uf8_icruNIUCsY8Y,29899
|
|
126
|
+
techtree/runs/child_registry.py,sha256=TOgvC8EPvgZ2IPbiRaJV_dM3K_g29eVHju8n9mEH96Q,8281
|
|
127
|
+
techtree/runs/events.py,sha256=UVKK0xrRIn_ZQZcLPUhjbRvxao4B8784Wp7drnSaFfA,17985
|
|
128
|
+
techtree/runs/executor.py,sha256=l-8Fmw1LMUPyPj-tz1xhhs7I33sFn8U41r0cvwTftKQ,5019
|
|
129
|
+
techtree/runs/fake.py,sha256=c4kIS6bOxvzG0owyeqrfDcMk19d9n-rCNRIq5iGgML8,28033
|
|
130
|
+
techtree/runs/launcher.py,sha256=GfOIrwFPsKfXzo6-Z_oM-DsmCsrOrpEWMoI4JMc9ULg,9707
|
|
131
|
+
techtree/runs/machine.py,sha256=kqnVi_EXTOo0nZ9bElh1zQxt9DdAf9QrAncIGuiuMbk,17623
|
|
132
|
+
techtree/runs/real.py,sha256=DpUpRJ3QNq-lAFrVZ_emmJPZga-oJ08XjCgg2RS-8Os,32271
|
|
133
|
+
techtree/runs/service.py,sha256=y7GOFIQow4uj6FL7Qpx1XV_3UAr6Yxc14Th2LWslUIg,24132
|
|
134
|
+
techtree/runs/store.py,sha256=qp984Cs7nWChBnXwMnzyTrdwcGSJWKc4OwBNUH6EtDg,21993
|
|
135
|
+
techtree/runs/validation.py,sha256=_3ydf_L78obWIpIbS7kcqnlUyQT_L6ULiiq3-h3kqaA,9599
|
|
136
|
+
techtree/runs/variants.py,sha256=Gw55DbaeUZ5H6Di8-7rA34vXwGEZiWJ1J5Wt2EZu5Qs,26149
|
|
137
|
+
techtree/skills/__init__.py,sha256=qdN3lydQ64Z_hfiFWXZgY1JihmP5AukshCNqqz7KEBQ,488
|
|
138
|
+
techtree/skills/archive.py,sha256=540QzCObg1BTTKdKv8XrdwV_sJzYMWY-HGadJas1vm0,10046
|
|
139
|
+
techtree/skills/policy.py,sha256=tOPu49zPf_8UOHs-6fYudVU5a_bjkmSmzq5C4LXDR7g,2238
|
|
140
|
+
techtree/skills/scanner.py,sha256=Sq2zoEWw9Fx8ykIxPyGHFAphgfBgy9fIZ9tsQFrh6sI,13438
|
|
141
|
+
techtree/skills/service.py,sha256=DKmC3P8npl1DMbuvvXL18rM6OVyv-K1CXRH7nA9eVOU,30829
|
|
142
|
+
techtree/skills/starter.py,sha256=miv-u-_XlskEPuS21Z5myznAm08jZzskl78yfvwm8LQ,17002
|
|
143
|
+
techtree/tasksets/__init__.py,sha256=T9aDszSjLoKOtdg-uNIDoKmQ5cJvc9Xvzg5uUPacKVY,75
|
|
144
|
+
techtree/tasksets/membership.py,sha256=bPGQcBV3SOLYr66j-fsI_IeDjOUBYc5gp11VO6nEQX8,10316
|
|
145
|
+
techtree/tasksets/provider.py,sha256=2lwrUj3xgKMKj9bnSxgXKpM2d_OBH-QX86QTvgv1gGE,8412
|
|
146
|
+
techtree/tasksets/resolver.py,sha256=emHwjbjFeTnNDZhThbGPHSi7BViIoB_QsKLegiPF0FE,12669
|
|
147
|
+
techtree/tasksets/service.py,sha256=HYjVSNpJIlCJqxlPFfIhmNAEYQsZhhrxGiPDnGtaFaA,17965
|
|
148
|
+
techtree/tasksets/verifiers_cli.py,sha256=_wZYRbJ9XZYBIEoSgiKRvG5zsEzXl5IzF-7kz1R8SlA,21554
|
|
149
|
+
techtree/uplift/__init__.py,sha256=dPknJrCZjvYtg3n0-IqKhQfHk7RYuscUTlWBUmXSUuU,844
|
|
150
|
+
techtree/uplift/context.py,sha256=FwbilYaFseqLKLTX4Aw-6hk9LTzqhd4nJkNxz0_HPYY,22162
|
|
151
|
+
techtree/uplift/derive.py,sha256=-71sTAH-ad4dMDOW2Ba2cwKzLfZ8wddSaBBLSghiaaY,8397
|
|
152
|
+
techtree/uplift/public_tasks.py,sha256=gtSdJtQ8fL2VjYZCqT1McPihLbn3duQqeFygE_buBSU,6474
|
|
153
|
+
techtree/uplift/service.py,sha256=dC1MxhNhtymXELyKdimRSv8LyhL7Pwj_AAN7fzBE8oc,29589
|
|
154
|
+
techtree/uplift/source.py,sha256=ZAuCBddX3IcJxnN-AscoqbNyT55VosSN-GGDWVKRpVs,6056
|
|
155
|
+
techtree/verifiers/__init__.py,sha256=nkzudaJRb7u6SfUz1jl9HjLB4KPzpmImaDsQc5jR_5w,1272
|
|
156
|
+
techtree/verifiers/budget.py,sha256=LQgmW83kkrwy9wdxk-qJJJu15VIfBtHa6Qm7YRQvHM0,9261
|
|
157
|
+
techtree/verifiers/child.py,sha256=25_jQKD83KiRm1GqDD4EVt5w5lKYmmvNXHmyaPsok_o,25103
|
|
158
|
+
techtree/verifiers/compiler.py,sha256=1cS8qwaZAeNoXz-paXWzb5Sb4VpG1GFNEJ1rUDyvCGI,16791
|
|
159
|
+
techtree/verifiers/config.py,sha256=4mQ520LZZ_fSHV487ewdxHtDWCimjn0QKkub7wDLXtQ,15078
|
|
160
|
+
techtree/verifiers/credentials.py,sha256=CGYT9-wGuTOCsAfl6JOkYEwVN5w_NM120GEj9pdOWrE,12463
|
|
161
|
+
techtree/verifiers/image.py,sha256=AiKWRu0XUScRIh03j2t5FMI9BqmE2q_KsF30rtaUOg4,5077
|
|
162
|
+
techtree/verifiers/models.py,sha256=DIBTFssxLvZNe7DRNEgyvVVDd0VNaiLs6gZSM2mSmII,20271
|
|
163
|
+
techtree/verifiers/outputs.py,sha256=IErfziVoZJyWeULlhFf__T-BXS1YVY2D-2_-_IFRtcA,14384
|
|
164
|
+
techtree/verifiers/progress.py,sha256=2ITxW7VUvQv99herIexuYq4sncFcitpeqFgGDp_V6-Q,6929
|
|
165
|
+
techtree/verifiers/supervisor.py,sha256=qmyDGB-hniihwDyBzF_l5jjuJ5aERvdu5euP-wRsQ0Y,13719
|
|
166
|
+
techtree/verifiers/verify.py,sha256=XIoquZpGdqZGHgOfGyehQrj5ObpoF9difFA6UUtcVKo,30669
|
|
167
|
+
techtree/worker/__init__.py,sha256=Kp3YbxrRYlsAz3lYIrBFROyCW9GtgZuGFmN6U9lsmBM,812
|
|
168
|
+
techtree/worker/execute.py,sha256=aETk7Wm5kNE_BdMnBSFP7noOPrK7mSbmdLkep_tifmE,18539
|
|
169
|
+
techtree/worker/main.py,sha256=o-assLf19M1YmXlFnglVbwkjmruuanku2tWrE3Lurjw,1801
|
|
170
|
+
techtree-0.1.0.dist-info/METADATA,sha256=kwAZOjNmhirx3WkNJDlf52vo2qJrJBSnh3gwdbeYOJw,16536
|
|
171
|
+
techtree-0.1.0.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
|
|
172
|
+
techtree-0.1.0.dist-info/entry_points.txt,sha256=IfcuuTVg-T4pO3FJnBMWq252cFv6JluXeMD_hfBc6N4,95
|
|
173
|
+
techtree-0.1.0.dist-info/licenses/LICENSE,sha256=--yhONQpHE1-laUyaT0ZDkDkYhfNZVs2O9fY3liJAPU,1069
|
|
174
|
+
techtree-0.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Sean Brennan
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|