Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: tangle-network/agent-sdk
ref: e1f7458e2424f12a6f1e3b11e4c3d7c7568d31d5 # @tangle-network/agent-interface@1.4.0
ref: 57a073cf53bbdd44ddc97855a60aa78afb522f5c # @tangle-network/agent-interface@1.6.0
path: .cohort/agent-sdk
persist-credentials: false

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: tangle-network/agent-sdk
ref: e1f7458e2424f12a6f1e3b11e4c3d7c7568d31d5 # @tangle-network/agent-interface@1.4.0
ref: 57a073cf53bbdd44ddc97855a60aa78afb522f5c # @tangle-network/agent-interface@1.6.0
path: .cohort/agent-sdk
persist-credentials: false

Expand Down
32 changes: 32 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,37 @@
# Changelog

## 0.157.0

### The bridge reasoning check refused runs it should have admitted

`bridgeExecutor` compared the effort a cli-bridge materialization receipt reports as `applied` against a private copy of the bridge's own mapping, and the copy was stale. It expected codex to apply `minimal` for `none` and `high` for both `xhigh` and `ultracode`; cli-bridge 0.3.0 applies `none`, `xhigh` and `ultra`. A mismatch throws `ValidationError`, so **three of the seven rungs refused a legitimate codex run**. The same switch's default arm asserted the canonical rung for eleven further harnesses, none of which plumbs a thinking flag, so their receipts carried `applied: null` and those runs were refused too.

The map now has one owner: `nativeReasoningControl` in `@tangle-network/agent-interface` 1.6.0, which the cli-bridge argv builders read as well. Interface moves to `^1.6.0` — a consumer that pins it itself must move it with this package.

### An in-process worker is no longer recorded as a sandbox sibling

`LoopSandboxPlacement.kind` and `LoopIterationDispatchPayload.placement` now carry `'in-process'`, and `PlacementInfo` maps it to its existing `'local'` kind. A consumer that switches exhaustively over either union must add the arm. In exchange, a cost or latency breakdown split by placement stops counting every local worktree-CLI iteration in the sandbox bucket.

### One word for a failed projection row

`PursuitRunStatus` and `PursuitNodeStatus` are replaced by one `PursuitStatus = 'running' | 'done' | 'down'`. They disagreed on the word for a failure in the same file, so a consumer joining run rows to node rows on `status` reported two failure populations where there is one. Read `PursuitStatus` and expect `down` on both.

### `improve()` can no longer produce a surface a proposal cannot name

`ImproveSurface` is now `Exclude<AgentImprovementSurface, 'knowledge'>`, and Interface 1.6.0 adds `rollout-policy` to the proposal vocabulary. A rollout-policy improvement can now reach a review or a gate. A consumer switching exhaustively over `AgentImprovementSurface` must add that arm.

### Removed

`Restart` and `SpawnOpts.restart` are gone. The supervisor never read the option, and the retry story already has an owner: a keyed spawn is idempotent per key, and a key whose prior attempt settled `down` spawns fresh and says so. A caller passing `restart` should use `key`.

`restartCount` is gone from the `down` settlement and from `PursuitNodeProjection`. Nothing could increment it, and replay overwrote whatever a journal carried with `0`.

`CoderReview.recommendation` is gone. Selection reads `approved` and `readiness`; a reviewer that wants a caller to read something puts it in `notes`.

`UsageClass` is gone. `UsageSplit` carries the same idea as two named number fields.

`DeliveryBinding`'s `memory-store` arm narrows `provision` to `'sqlite'`. Nothing provisioned the other two, and the whole arm is still refused at resolve time until it clears the E3 admission bar.

## 0.156.0

### Two MCP tool vocabularies now match what the tools accept
Expand Down
25 changes: 11 additions & 14 deletions api-surface.json
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@
"ImproveRuntimeCodeGeneratorOptions": "type c26225cf7ca3",
"ImproveScenarioPartitions": "type 37a3508406b1",
"ImproveSkillsOptions": "type c1f5a69faefc",
"ImproveSurface": "type 3f2b092bf994",
"ImproveSurface": "type b711b683b151",
"ImprovementCandidate": "type 0c22a91c6396",
"ImprovementCodeCandidate": "type 588fa6d3b2f5",
"ImprovementMaterializedProfilePopulationCandidate": "type 4eee039de8cf",
Expand Down Expand Up @@ -305,7 +305,7 @@
"SanitizedKnowledgeRequirement": "type e4173a7b55fc",
"Scope": "type f0ce3d119b61",
"ServerSentEventOptions": "type c80818c13fcd",
"Settled": "type eb6156d23c49",
"Settled": "type 81db5667280b",
"Spend": "type 477830045ea7",
"SpendChannel": "type 978ffae337cd",
"SpendGap": "type d24924855c35",
Expand Down Expand Up @@ -696,14 +696,13 @@
"PursuitCostProvenance": "type fc5f37082627",
"PursuitNodeCost": "type 2ae084b090ba",
"PursuitNodePlacement": "type 744e7b45dc01",
"PursuitNodeProjection": "type 5de867d96865",
"PursuitNodeStatus": "type 8a9aa4ae39bb",
"PursuitNodeProjection": "type b65f68454746",
"PursuitNodeTiming": "type 8cb37b8dca25",
"PursuitNodeUsage": "type 951e957775ab",
"PursuitProjection": "type 8d4e8a08d707",
"PursuitRunProjection": "type f8a85518fe71",
"PursuitRunStatus": "type 348aeaec7737",
"PursuitRunProjection": "type 0e7976e29987",
"PursuitRunTotals": "type 87a99709fb0a",
"PursuitStatus": "type 8a9aa4ae39bb",
"RunChatTurnInput": "type 3aafc346a44b",
"SupervisePursuitError": "value aed1ebc9dee4",
"SupervisePursuitOptions": "type 924edac7d1c5",
Expand Down Expand Up @@ -822,7 +821,7 @@
"CreateExactProcessCandidateExperimentExecutorOptions": "type 6d390c45f62a",
"CreateProtectedExactProcessCandidateExperimentExecutorOptions": "type e3f99118627f",
"CredentialRef": "type bbeb8385d87f",
"DeliveryBinding": "type 18071122fdce",
"DeliveryBinding": "type fe13ba1a9eeb",
"DeliveryBindingKind": "type 6cac2248f99b",
"DiffProvenance": "type 59fdd1fa068b",
"DoctorReport": "value 4c7af8631629",
Expand Down Expand Up @@ -876,7 +875,6 @@
"TraceHandle": "value c8036504bae7",
"TraceMeta": "value 8b8e2b85391f",
"TraceOutcome": "value 7cdb1762b1ab",
"UsageClass": "value e0768cba5521",
"UsageSplit": "value 225059e1632c",
"VerifyCandidateExecutionEvidenceOptions": "type 2362ba397119",
"agentImprovementProfileDiffs": "value 87c549d6cba8",
Expand Down Expand Up @@ -1167,15 +1165,15 @@
"LoopDecisionPayload": "type ea64035c87e0",
"LoopDispatchOptions": "type 93bf5cd3e058",
"LoopEndedPayload": "type cec1d3954f09",
"LoopIterationDispatchPayload": "type f0dc44349879",
"LoopIterationDispatchPayload": "type efd3fa34642f",
"LoopIterationEndedPayload": "type 4735d9d988bd",
"LoopIterationStartedPayload": "type 36344ffaa2f1",
"LoopLineageOptions": "type 18651bcfeab9",
"LoopOptionsForDispatch": "type f04ec83b947a",
"LoopPlanDescription": "type 76b21ce0ef26",
"LoopPlanPayload": "type 43448c05358d",
"LoopResult": "type b7a972830ef0",
"LoopSandboxPlacement": "type 421626d96863",
"LoopSandboxPlacement": "type a99e4be1736f",
"LoopShape": "type 8925f5e259c9",
"LoopStartedPayload": "type a552ef7496eb",
"LoopTeardownFailedPayload": "type fb0d53e63ba3",
Expand Down Expand Up @@ -1280,7 +1278,6 @@
"ResolvedMcpServerLaunch": "type 38c483055998",
"ResolvedSupervisorProfile": "type a1c298f11bc0",
"ResourceRequest": "type 20dbb23e8101",
"Restart": "type a79f668a67a2",
"ResultBlobStore": "type 69e6e03b75ab",
"ResumedKeyState": "type 018905da27e4",
"ResumedWork": "type 57b7c709155a",
Expand Down Expand Up @@ -1350,7 +1347,7 @@
"SessionCapableBox": "type 9db08b40cab8",
"SessionMessageLike": "type 726215634de7",
"SessionTraceBox": "type b8d989093064",
"Settled": "type eb6156d23c49",
"Settled": "type 81db5667280b",
"ShapeBudget": "type a1cb1a8d0995",
"ShapeContext": "type a266c1b7e746",
"ShapeRegistry": "type b567a5be55ec",
Expand All @@ -1364,7 +1361,7 @@
"SpawnForestNode": "type f34c534f338c",
"SpawnForestTree": "type bdd3bb0899f1",
"SpawnJournal": "type c71410408358",
"SpawnOpts": "type 958db7343613",
"SpawnOpts": "type 903c3a01c5cb",
"SpawnPreflight": "type 8e8b479089d3",
"SpawnPreflightContext": "type 21972a19ec24",
"SpawnPrior": "type f5b562b41ed4",
Expand Down Expand Up @@ -1801,7 +1798,7 @@
"CappedDelegationTrace": "type fada988fa702",
"CoderDelegate": "type 7fdce199433b",
"CoderOutput": "type c88522397afb",
"CoderReview": "type e3287950fa5b",
"CoderReview": "type 99fca1bca0a7",
"CoderReviewer": "type b9d158a04c16",
"CodexExecutionDiagnosticError": "value fd413034adc8",
"CodexExecutionEvidence": "type f21dfe544a92",
Expand Down
8 changes: 8 additions & 0 deletions bench/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# Changelog

## 0.8.23

### Interface 1.6.0 cohort

The Interface catalog range becomes `^1.6.0`, matching the Runtime cohort. Bench resolves Interface through the catalog, so its published manifest states the new range. Nothing in bench changes behavior.

A consumer that pins Interface itself must move it with this package.

## 0.8.22

### Eval 0.163.2 and Knowledge 10.7.0 cohort
Expand Down
2 changes: 1 addition & 1 deletion bench/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@tangle-network/agent-bench",
"version": "0.8.22",
"version": "0.8.23",
"type": "module",
"description": "Benchmark adapters and execution for agent-runtime across coding, tool-use, RAG, memory, browser, and terminal tasks.",
"repository": {
Expand Down
22 changes: 8 additions & 14 deletions docs/api/durable.md
Original file line number Diff line number Diff line change
Expand Up @@ -650,7 +650,7 @@ entries sum to `inclusive` by construction.

##### status

> `readonly` **status**: [`PursuitRunStatus`](#pursuitrunstatus)
> `readonly` **status**: [`PursuitStatus`](#pursuitstatus)

##### settledAt?

Expand Down Expand Up @@ -750,7 +750,7 @@ The runner that executed this node — the executor's own name, not a harness gu

##### status

> `readonly` **status**: [`PursuitNodeStatus`](#pursuitnodestatus)
> `readonly` **status**: [`PursuitStatus`](#pursuitstatus)

##### settledAt?

Expand Down Expand Up @@ -866,10 +866,6 @@ Content-addressed pointer to this node's persisted tool trace, or why there is n

> `readonly` `optional` **infra?**: `boolean`

##### restartCount?

> `readonly` `optional` **restartCount?**: `number`

##### wait?

> `readonly` `optional` **wait?**: `unknown`
Expand Down Expand Up @@ -1807,9 +1803,13 @@ already knowing the root node or coordination run id stored inside it.

***

### PursuitRunStatus
### PursuitStatus

> **PursuitRunStatus** = `"running"` \| `"done"` \| `"failed"`
> **PursuitStatus** = `"running"` \| `"done"` \| `"down"`

One settled projection status, shared by runs and nodes. `down` is the journal's own word for a
failure (a settlement is journaled as `kind: 'down'`, cancellation included), so a consumer can
join run rows to node rows on `status` and read one failure population instead of two.

***

Expand All @@ -1829,12 +1829,6 @@ rest; `unknown` = nothing priced it, so `usd` is a floor and never the cost.

Where and how a node's execution was placed, read off its execution-binding receipt.

***

### PursuitNodeStatus

> **PursuitNodeStatus** = `"running"` \| `"done"` \| `"down"`

## Functions

### handleChatTurn()
Expand Down
23 changes: 11 additions & 12 deletions docs/api/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -11324,13 +11324,16 @@ git worktree through a pluggable `CandidateGenerator`.

### ImproveSurface

> **ImproveSurface** = `"prompt"` \| `"skills"` \| `"tools"` \| `"mcp"` \| `"hooks"` \| `"subagents"` \| `"agent-profile"` \| `"memory"` \| `"code"` \| `"rollout-policy"`
> **ImproveSurface** = `Exclude`\<`AgentImprovementSurface`, `"knowledge"`\>

The executable agent lever `improve` optimizes. Profile fields remain
portable AgentProfile coordinates; implementation and orchestration files
use the code surface so a winner can be sealed into an exact candidate.
`rollout-policy` is the inference-time structuralRollout dials
(`profile.extensions['structural-rollout']`).
The executable agent lever `improve` optimizes — every surface a proposal can name
(`AgentImprovementSurface`) except `knowledge`, which the corpus lane owns and `improve`
does not produce. Deriving it means every surface `improve` produces can also be reported, which
is the property that lets a result reach a review or a gate.

Profile fields remain portable AgentProfile coordinates; implementation and orchestration files
use the code surface so a winner can be sealed into an exact candidate. `rollout-policy` is the
inference-time structuralRollout dials (`profile.extensions['structural-rollout']`).

***

Expand Down Expand Up @@ -12046,7 +12049,7 @@ Content-addressed pointer to a persisted `WorkerToolTraceArtifact`.

### Settled

> **Settled**\<`Out`\> = \{ `kind`: `"done"`; `handle`: [`Handle`](runtime.md#handle-3)\<`Out`\>; `out`: `Out`; `outRef`: `string`; `verdict?`: `DefaultVerdict`; `spent`: [`Spend`](#spend); `providerModel?`: [`ProviderModelExecutionEvidence`](#providermodelexecutionevidence); `trace`: [`WorkerTraceEvidence`](#workertraceevidence); `settledAt?`: `number`; `seq`: `number`; \} \| \{ `kind`: `"down"`; `handle`: [`Handle`](runtime.md#handle-3)\<`Out`\>; `reason`: `string`; `infra`: `boolean`; `restartCount`: `number`; `trace`: [`WorkerTraceEvidence`](#workertraceevidence); `providerModel?`: [`ProviderModelExecutionEvidence`](#providermodelexecutionevidence); `settledAt?`: `number`; `seq`: `number`; \}
> **Settled**\<`Out`\> = \{ `kind`: `"done"`; `handle`: [`Handle`](runtime.md#handle-3)\<`Out`\>; `out`: `Out`; `outRef`: `string`; `verdict?`: `DefaultVerdict`; `spent`: [`Spend`](#spend); `providerModel?`: [`ProviderModelExecutionEvidence`](#providermodelexecutionevidence); `trace`: [`WorkerTraceEvidence`](#workertraceevidence); `settledAt?`: `number`; `seq`: `number`; \} \| \{ `kind`: `"down"`; `handle`: [`Handle`](runtime.md#handle-3)\<`Out`\>; `reason`: `string`; `infra`: `boolean`; `trace`: [`WorkerTraceEvidence`](#workertraceevidence); `providerModel?`: [`ProviderModelExecutionEvidence`](#providermodelexecutionevidence); `settledAt?`: `number`; `seq`: `number`; \}

A settled child, delivered by `scope.next()`. `seq` is the monotonic cursor order
`next()` yielded this settlement (B2) — NOT wall-clock — and replay delivers strictly
Expand Down Expand Up @@ -12114,7 +12117,7 @@ Epoch ms parsed from the durable settlement record when available.

##### Type Literal

\{ `kind`: `"down"`; `handle`: [`Handle`](runtime.md#handle-3)\<`Out`\>; `reason`: `string`; `infra`: `boolean`; `restartCount`: `number`; `trace`: [`WorkerTraceEvidence`](#workertraceevidence); `providerModel?`: [`ProviderModelExecutionEvidence`](#providermodelexecutionevidence); `settledAt?`: `number`; `seq`: `number`; \}
\{ `kind`: `"down"`; `handle`: [`Handle`](runtime.md#handle-3)\<`Out`\>; `reason`: `string`; `infra`: `boolean`; `trace`: [`WorkerTraceEvidence`](#workertraceevidence); `providerModel?`: [`ProviderModelExecutionEvidence`](#providermodelexecutionevidence); `settledAt?`: `number`; `seq`: `number`; \}

###### kind

Expand All @@ -12134,10 +12137,6 @@ Epoch ms parsed from the durable settlement record when available.

True = infrastructure failure (excluded from merge `n` / equal-k), not a bad result.

###### restartCount

> **restartCount**: `number`

###### trace

> **trace**: [`WorkerTraceEvidence`](#workertraceevidence)
Expand Down
16 changes: 3 additions & 13 deletions docs/api/intelligence.md
Original file line number Diff line number Diff line change
Expand Up @@ -3889,7 +3889,7 @@ never inlined here.

### DeliveryBinding

> **DeliveryBinding** = \{ `kind`: `"inline"`; `content`: [`ContentRef`](#contentref); \} \| \{ `kind`: `"file"`; `path`: `string`; `content`: [`ContentRef`](#contentref); `executable?`: `boolean`; \} \| \{ `kind`: `"http"`; `url`: `string`; `method?`: `string`; `auth?`: [`CapabilityAuth`](#capabilityauth); \} \| \{ `kind`: `"sandbox-code"`; `entry`: `string`; `code`: [`ContentRef`](#contentref); `runtime?`: `string`; `harness?`: `string`; \} \| \{ `kind`: `"mcp-stdio"`; `command`: `string`; `args?`: `string`[]; `env?`: `Record`\<`string`, `string`\>; `cwd?`: `string`; \} \| \{ `kind`: `"mcp-remote"`; `url`: `string`; `transport`: `"http"` \| `"sse"`; `headers?`: `Record`\<`string`, `string`\>; \} \| \{ `kind`: `"process-on-infra"`; `host`: [`HostSpec`](#hostspec); `inner`: [`DeliveryBinding`](#deliverybinding); \} \| \{ `kind`: `"rag-index"`; `index`: [`ContentRef`](#contentref); `embedModel`: `string`; `topK?`: `number`; \} \| \{ `kind`: `"memory-store"`; `provision`: `"sqlite"` \| `"neo4j"` \| `"vector"`; `seed?`: [`ContentRef`](#contentref); \} \| \{ `kind`: `"wasm"`; `module`: [`ContentRef`](#contentref); `exports`: `string`[]; \} \| \{ `kind`: `"a2a"`; `endpoint`: `string`; `card`: [`ContentRef`](#contentref); `auth?`: [`CapabilityAuth`](#capabilityauth); \}
> **DeliveryBinding** = \{ `kind`: `"inline"`; `content`: [`ContentRef`](#contentref); \} \| \{ `kind`: `"file"`; `path`: `string`; `content`: [`ContentRef`](#contentref); `executable?`: `boolean`; \} \| \{ `kind`: `"http"`; `url`: `string`; `method?`: `string`; `auth?`: [`CapabilityAuth`](#capabilityauth); \} \| \{ `kind`: `"sandbox-code"`; `entry`: `string`; `code`: [`ContentRef`](#contentref); `runtime?`: `string`; `harness?`: `string`; \} \| \{ `kind`: `"mcp-stdio"`; `command`: `string`; `args?`: `string`[]; `env?`: `Record`\<`string`, `string`\>; `cwd?`: `string`; \} \| \{ `kind`: `"mcp-remote"`; `url`: `string`; `transport`: `"http"` \| `"sse"`; `headers?`: `Record`\<`string`, `string`\>; \} \| \{ `kind`: `"process-on-infra"`; `host`: [`HostSpec`](#hostspec); `inner`: [`DeliveryBinding`](#deliverybinding); \} \| \{ `kind`: `"rag-index"`; `index`: [`ContentRef`](#contentref); `embedModel`: `string`; `topK?`: `number`; \} \| \{ `kind`: `"memory-store"`; `provision`: `"sqlite"`; `seed?`: [`ContentRef`](#contentref); \} \| \{ `kind`: `"wasm"`; `module`: [`ContentRef`](#contentref); `exports`: `string`[]; \} \| \{ `kind`: `"a2a"`; `endpoint`: `string`; `card`: [`ContentRef`](#contentref); `auth?`: [`CapabilityAuth`](#capabilityauth); \}

How a capability is backed. OPEN tagged union — THE extension point. All arms
are typed even when the resolver does not yet admit them; an un-admitted arm
Expand Down Expand Up @@ -4042,16 +4042,6 @@ The portable profile changes that the measured-profile contract permits.

***

### UsageClass

> **UsageClass** = `"inference"` \| `"intelligence"`

Usage class for billing. Base-stream tokens bill `'inference'`; every
intelligence spawn (analyst, corpus, loop) bills `'intelligence'`. The
billing line falls on the spawn line.

***

### AgentImprovementProfileActivationTarget

> **AgentImprovementProfileActivationTarget** = `Omit`\<[`AgentImprovementActivationTargetPlan`](#agentimprovementactivationtargetplan), `"surface"`\> & `object`
Expand Down Expand Up @@ -4931,7 +4921,7 @@ Bind caller-owned target identities to the exact source state Runtime measured.

##### surfaces

readonly `AgentImprovementSurface`[]
readonly (`"knowledge"` \| `"prompt"` \| `"tools"` \| `"mcp"` \| `"subagents"` \| `"hooks"` \| `"skills"` \| `"code"` \| `"memory"` \| `"agent-profile"` \| `"rollout-policy"`)[]

##### experiment

Expand Down Expand Up @@ -4961,7 +4951,7 @@ Return whether a measured surface can be delivered through an agent profile.

##### surface

`AgentImprovementSurface`
`"knowledge"` \| `"prompt"` \| `"tools"` \| `"mcp"` \| `"subagents"` \| `"hooks"` \| `"skills"` \| `"code"` \| `"memory"` \| `"agent-profile"` \| `"rollout-policy"`

#### Returns

Expand Down
Loading
Loading