Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
2266d19
fix(runtime): harden durable interaction adapters
drewstone Aug 16, 2026
d851f1f
fix(runtime): enforce deadlines and owned turn identity
drewstone Aug 16, 2026
0c6166e
fix(bench): adapt calls to canonical turn input
drewstone Aug 16, 2026
d424eea
fix(runtime): harden retained interactive controls
drewstone Aug 16, 2026
7af4eb4
fix(runtime): admit interactive intent before create
drewstone Aug 16, 2026
2ce7bed
feat(runtime): adopt interface 0.56 interactive controls
drewstone Aug 16, 2026
ea5d6e5
Merge remote-tracking branch 'origin/main' into fix/durable-interacti…
drewstone Aug 16, 2026
516423c
chore(release): 0.137.0
drewstone Aug 16, 2026
2ac3bda
chore(release): bump agent-bench to 0.8.12
drewstone Aug 16, 2026
04f2288
fix(release): pin the interface 0.56 cohort
drewstone Aug 16, 2026
eafea07
fix(release): pin the interface 0.56 cohort
drewstone Aug 16, 2026
410155f
fix(runtime): harden retained interactive recovery
drewstone Aug 16, 2026
bfeb007
Merge remote-tracking branch 'origin/fix/durable-interaction-path-202…
drewstone Aug 16, 2026
fe9db44
fix(runtime): admit retained runs before create
drewstone Aug 16, 2026
b493c81
fix(runtime): keep retained secret bindings public
drewstone Aug 16, 2026
044801a
fix(runtime): redact opaque retained material
drewstone Aug 16, 2026
f5855e8
chore(deps): migrate agent package cohort
drewstone Aug 16, 2026
5035dec
Merge remote-tracking branch 'origin/main' into pr876
drewstone Aug 17, 2026
91ab0eb
test(runtime): express interactive claim expiry relative to now
drewstone Aug 17, 2026
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 bench/src/agent-graphs-improve.mts
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,7 @@ export async function callAuthor(
const turn = await collectAgentTurn(
streamAgentTurn(
{ kind: 'executor', factory, profile, agentRunName: profile.name ?? 'agent-graphs-author' },
prompt,
{ prompt },
timeoutMs === undefined ? {} : { timeoutMs },
),
)
Expand Down
2 changes: 1 addition & 1 deletion bench/src/atom-mcp-e2e.mts
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ async function bridgeChat(opts: {
const turn = await collectAgentTurn(
streamAgentTurn(
{ kind: 'executor', factory, profile },
opts.messages.map((message) => message.content).join('\n\n'),
{ prompt: opts.messages.map((message) => message.content).join('\n\n') },
),
)
if (turn.status !== 'completed') {
Expand Down
2 changes: 1 addition & 1 deletion bench/src/benchmarks/appworld.ts
Original file line number Diff line number Diff line change
Expand Up @@ -440,7 +440,7 @@ export function appworldToolLoopClient(cfg: {
const loop = await collectAgentTurn(
streamAgentTurn(
{ kind: 'executor', factory, profile },
`Task: ${instruction}`,
{ prompt: `Task: ${instruction}` },
{ signal },
),
)
Expand Down
2 changes: 1 addition & 1 deletion bench/src/commit0-gate.mts
Original file line number Diff line number Diff line change
Expand Up @@ -330,7 +330,7 @@ async function runShotLocal(task: BenchTask, attempt: number, cfg: ShotCfg, stee
const turn = await collectAgentTurn(
streamAgentTurn(
{ kind: 'executor', factory, profile: workerProfile(cfg, `commit0-local-${attempt}`) },
prompt,
{ prompt },
cfg.timeoutMs > 0 ? { timeoutMs: cfg.timeoutMs } : {},
),
)
Expand Down
2 changes: 1 addition & 1 deletion bench/src/humaneval-repair-gate.mts
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ async function repairAttempt(cfg: BenchRouterTarget, task: HumanEvalTask, k: num
},
})
const r = await collectAgentTurn(
streamAgentTurn({ kind: 'executor', factory, profile }, basePrompt(task)),
streamAgentTurn({ kind: 'executor', factory, profile }, { prompt: basePrompt(task) }),
)
if (r.status !== 'completed') {
throw new Error(r.error?.message ?? `repair turn ended with status ${r.status}`)
Expand Down
2 changes: 1 addition & 1 deletion bench/src/mcp-mount-probe.mts
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ async function bridgeChat(messages: Array<{ role: string; content: string }>, mc
const turn = await collectAgentTurn(
streamAgentTurn(
{ kind: 'executor', factory, profile },
messages.map((message) => message.content).join('\n\n'),
{ prompt: messages.map((message) => message.content).join('\n\n') },
),
)
if (turn.status !== 'completed') {
Expand Down
2 changes: 1 addition & 1 deletion bench/src/quant-arena/quant-loop.mts
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ async function profileShot(opts: {
const turn = await collectAgentTurn(
streamAgentTurn(
{ kind: 'executor', factory, profile: opts.profile },
opts.prompt,
{ prompt: opts.prompt },
{ timeoutMs: opts.timeoutMs },
),
)
Expand Down
11 changes: 10 additions & 1 deletion bench/src/router-turn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
collectAgentTurn,
createExecutor,
streamAgentTurn,
type AgentTurnInput,
type CollectedAgentTurn,
type ToolSpec,
} from '@tangle-network/agent-runtime/kernel'
Expand Down Expand Up @@ -118,10 +119,18 @@ export async function runBenchRouterTurn(
routerKey: config.routerKey,
...(config.tools ? { tools: config.tools } : {}),
})
const turnInput: AgentTurnInput =
typeof input === 'string'
? { prompt: input }
: {
providerOptions: {
messages: input.messages.map((message) => ({ ...message })),
},
}
const turn = await collectAgentTurn(
streamAgentTurn(
{ kind: 'executor', factory, profile: config.profile },
input,
turnInput,
{
...(config.timeoutMs === undefined ? {} : { timeoutMs: config.timeoutMs }),
...(config.signal ? { signal: config.signal } : {}),
Expand Down
2 changes: 1 addition & 1 deletion bench/src/swe-arena/arms.ts
Original file line number Diff line number Diff line change
Expand Up @@ -525,7 +525,7 @@ export async function runSoloArm(spec: SoloArmSpec, ctx: ArmRunContext): Promise
const turn = await collectAgentTurn(
streamAgentTurn(
{ kind: 'executor', factory, profile: spec.profile },
prompt,
{ prompt },
{ timeoutMs, ...(ctx.signal ? { signal: ctx.signal } : {}) },
),
)
Expand Down
9 changes: 5 additions & 4 deletions docs/agent-managed-compute/roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,11 @@ The work is ordered to prove the two-agent atom before adding scale.
- Extend the existing run record with revisions, ownership generation, commands, provider references, and coordination events.
- Add durable adapters with conditional writes.
- Persist dispatch intent before provider creation.
Partially done: `startRetainedRun` persists admission after creation and dispatch.
`startRetainedRunInEnvironment` applies the same boundary to a fresh session in an existing environment.
`recoverRetainedRun` rebuilds a run from the pre-dispatch record.
The pre-creation intent record remains open.
`startRetainedRun` persists a digest-only intent before creation, then exact
environment and dispatch admissions.
`startRetainedRunInEnvironment` uses the same retained admissions for a fresh session in an existing environment.
`recoverRetainedRun` rebuilds a run from either a pre-create intent or a
pre-dispatch environment record.
- Add a durable provider-command outbox with coordinator generation and command sequence.
- Rebuild budget reservations and interaction state on restart.
- Adapt `SpawnJournal`, `ConversationJournal`, and delegation status onto the shared internal record.
Expand Down
2 changes: 1 addition & 1 deletion docs/api/agent.md
Original file line number Diff line number Diff line change
Expand Up @@ -591,7 +591,7 @@ substantive prompt rewrites, etc.) via this callback.

##### allowCreateForKinds?

> `optional` **allowCreateForKinds?**: readonly (`"code"` \| `"mcp"` \| `"memory"` \| `"agent-profile"` \| `"rollout-policy"` \| `"knowledge.wiki"` \| `"knowledge.claim"` \| `"knowledge.raw"` \| `"knowledge.stale"` \| `"system-prompt"` \| `"skill"` \| `"tool-doc"` \| `"new-tool"` \| `"hook"` \| `"subagent"` \| `"workflow"` \| `"rag"` \| `"scaffolding"` \| `"output-schema"` \| `"websearch.outdated"` \| `"prior-run-summary"` \| `"cluster"`)[]
> `optional` **allowCreateForKinds?**: readonly (`"mcp"` \| `"code"` \| `"memory"` \| `"agent-profile"` \| `"rollout-policy"` \| `"knowledge.wiki"` \| `"knowledge.claim"` \| `"knowledge.raw"` \| `"knowledge.stale"` \| `"system-prompt"` \| `"skill"` \| `"tool-doc"` \| `"new-tool"` \| `"hook"` \| `"subagent"` \| `"workflow"` \| `"rag"` \| `"scaffolding"` \| `"output-schema"` \| `"websearch.outdated"` \| `"prior-run-summary"` \| `"cluster"`)[]

When the resolved target doesn't exist, allow the substrate to
CREATE the file (for `knowledge.wiki`, `new-tool` subjects). Default
Expand Down
Loading