@tangle-network/agent-runtime 0.51.0 → 0.53.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/agent.d.ts +2 -2
  2. package/dist/agent.js +2 -2
  3. package/dist/analyst-loop.d.ts +1 -1
  4. package/dist/{chunk-HAA4KZUD.js → chunk-5M2WDWBI.js} +3 -3
  5. package/dist/{chunk-HYG4ISNS.js → chunk-AYRQZRDV.js} +2 -2
  6. package/dist/{chunk-47SWANFA.js → chunk-FO4DCM7R.js} +2 -2
  7. package/dist/{chunk-7JITYN6T.js → chunk-JFIYKDXF.js} +17 -2
  8. package/dist/chunk-JFIYKDXF.js.map +1 -0
  9. package/dist/{chunk-XEI7AIHU.js → chunk-K5M3SHEU.js} +3 -3
  10. package/dist/{chunk-FQH33M5N.js → chunk-K6WP7PYW.js} +67 -61
  11. package/dist/chunk-K6WP7PYW.js.map +1 -0
  12. package/dist/{chunk-FKHNHUXP.js → chunk-P4QNEXFC.js} +2 -2
  13. package/dist/{coder-_YCf3BAK.d.ts → coder-LKm3Mczw.d.ts} +1 -1
  14. package/dist/{delegation-profile-1GbW5yA3.d.ts → delegation-profile-Bvfro2m1.d.ts} +28 -2
  15. package/dist/{driver-DLI1io57.d.ts → driver-B2RKkVJW.d.ts} +1 -1
  16. package/dist/index.d.ts +121 -11
  17. package/dist/index.js +143 -16
  18. package/dist/index.js.map +1 -1
  19. package/dist/intelligence.d.ts +475 -5
  20. package/dist/intelligence.js +547 -3
  21. package/dist/intelligence.js.map +1 -1
  22. package/dist/{kb-gate-CHAyt4aI.d.ts → kb-gate-CKfykcYQ.d.ts} +2 -2
  23. package/dist/{loop-runner-bin-DFUNgpeK.d.ts → loop-runner-bin-D4Ir7b00.d.ts} +4 -4
  24. package/dist/loop-runner-bin.d.ts +5 -5
  25. package/dist/loop-runner-bin.js +3 -3
  26. package/dist/loops.d.ts +7 -5
  27. package/dist/loops.js +3 -1
  28. package/dist/mcp/bin.js +4 -4
  29. package/dist/mcp/index.d.ts +7 -7
  30. package/dist/mcp/index.js +6 -6
  31. package/dist/{openai-tools-D4HLDWgw.d.ts → openai-tools-CKfR3EMh.d.ts} +1 -1
  32. package/dist/profiles.d.ts +2 -2
  33. package/dist/router-client-B0Qi1NiN.d.ts +120 -0
  34. package/dist/{run-loop-BIineL1T.d.ts → run-loop-DgVhucoR.d.ts} +1 -1
  35. package/dist/runtime.d.ts +62 -126
  36. package/dist/runtime.js +3 -1
  37. package/dist/{types-5MGt5KTY.d.ts → types-CNDJCL_0.d.ts} +1 -1
  38. package/dist/{types-BEQsBhOE.d.ts → types-CklkW4Eh.d.ts} +2 -1
  39. package/dist/workflow.d.ts +2 -2
  40. package/dist/workflow.js +1 -1
  41. package/package.json +1 -1
  42. package/skills/agent-runtime-adoption/SKILL.md +41 -26
  43. package/skills/build-with-agent-runtime/SKILL.md +143 -0
  44. package/skills/loop-writer/SKILL.md +6 -7
  45. package/dist/chunk-7JITYN6T.js.map +0 -1
  46. package/dist/chunk-FQH33M5N.js.map +0 -1
  47. /package/dist/{chunk-HAA4KZUD.js.map → chunk-5M2WDWBI.js.map} +0 -0
  48. /package/dist/{chunk-HYG4ISNS.js.map → chunk-AYRQZRDV.js.map} +0 -0
  49. /package/dist/{chunk-47SWANFA.js.map → chunk-FO4DCM7R.js.map} +0 -0
  50. /package/dist/{chunk-XEI7AIHU.js.map → chunk-K5M3SHEU.js.map} +0 -0
  51. /package/dist/{chunk-FKHNHUXP.js.map → chunk-P4QNEXFC.js.map} +0 -0
package/dist/mcp/index.js CHANGED
@@ -14,12 +14,12 @@ import {
14
14
  removeWorktree,
15
15
  traceContextToEnv,
16
16
  validateDelegateUiAuditArgs
17
- } from "../chunk-HAA4KZUD.js";
17
+ } from "../chunk-5M2WDWBI.js";
18
18
  import "../chunk-WIR4HOOJ.js";
19
19
  import {
20
20
  mcpToolsForRuntimeMcp,
21
21
  mcpToolsForRuntimeMcpSubset
22
- } from "../chunk-FKHNHUXP.js";
22
+ } from "../chunk-P4QNEXFC.js";
23
23
  import {
24
24
  DELEGATE_CODE_DESCRIPTION,
25
25
  DELEGATE_CODE_INPUT_SCHEMA,
@@ -54,7 +54,7 @@ import {
54
54
  validateDelegateResearchArgs,
55
55
  validateDelegationHistoryArgs,
56
56
  validateDelegationStatusArgs
57
- } from "../chunk-47SWANFA.js";
57
+ } from "../chunk-FO4DCM7R.js";
58
58
  import {
59
59
  createKbGate
60
60
  } from "../chunk-FNMGYYSS.js";
@@ -75,7 +75,7 @@ import {
75
75
  parseDetachedSessionRef,
76
76
  runDetachedTurn,
77
77
  settleDetachedCoderTurn
78
- } from "../chunk-HYG4ISNS.js";
78
+ } from "../chunk-AYRQZRDV.js";
79
79
  import "../chunk-KADIJAD4.js";
80
80
  import {
81
81
  runLocalHarness
@@ -84,11 +84,11 @@ import {
84
84
  DELEGATION_MCP_SERVER_KEY,
85
85
  buildDelegationMcpServer,
86
86
  composeProductionAgentProfile
87
- } from "../chunk-7JITYN6T.js";
87
+ } from "../chunk-JFIYKDXF.js";
88
88
  import "../chunk-G3RGMA7C.js";
89
89
  import {
90
90
  assertTraceDerivedFindings
91
- } from "../chunk-FQH33M5N.js";
91
+ } from "../chunk-K6WP7PYW.js";
92
92
  import "../chunk-GSUO5QS6.js";
93
93
  import "../chunk-DGUM43GV.js";
94
94
 
@@ -1,4 +1,4 @@
1
- import { c as OpenAIChatTool } from './types-BEQsBhOE.js';
1
+ import { c as OpenAIChatTool } from './types-CklkW4Eh.js';
2
2
 
3
3
  /**
4
4
  * @experimental
@@ -1,5 +1,5 @@
1
- export { C as CoderOutput, a as CoderProfileOptions, b as CoderTask, M as MultiHarnessCoderFanoutOptions, c as coderProfile, d as createCoderValidator, m as multiHarnessCoderFanout } from './coder-_YCf3BAK.js';
2
- import { S as SandboxClient, O as OutputAdapter, V as Validator, A as AgentRunSpec } from './types-BEQsBhOE.js';
1
+ export { C as CoderOutput, a as CoderProfileOptions, b as CoderTask, M as MultiHarnessCoderFanoutOptions, c as coderProfile, d as createCoderValidator, m as multiHarnessCoderFanout } from './coder-LKm3Mczw.js';
2
+ import { S as SandboxClient, O as OutputAdapter, V as Validator, A as AgentRunSpec } from './types-CklkW4Eh.js';
3
3
  import { a as UiLens, U as UiFinding } from './substrate-CUgk7F7s.js';
4
4
  export { b as UI_FINDING_SEVERITIES, c as UI_LENSES, d as UiFindingScreenshot, e as UiFindingSeverity } from './substrate-CUgk7F7s.js';
5
5
  import { SandboxEvent, AgentProfile } from '@tangle-network/sandbox';
@@ -0,0 +1,120 @@
1
+ /**
2
+ * The one router chat client: direct OpenAI-compatible completions through the
3
+ * Tangle router — the cheapest dial, no sandbox. Three layers: `routerChatWithUsage`
4
+ * (chat-only), `routerChatWithTools` (one completion with function tools), and
5
+ * `routerToolLoop` (the off-box agentic loop over tool-calling). Shared by the
6
+ * built-in executors and the bench/lab harnesses.
7
+ *
8
+ * Reports REAL token usage so the backend-integrity guard sees a real backend.
9
+ * Returns `undefined` usage when the provider omitted it — never a fabricated 0
10
+ * (a phantom 0 reads as a free call downstream, which the gate would act on).
11
+ */
12
+ interface RouterConfig {
13
+ routerBaseUrl: string;
14
+ routerKey: string;
15
+ model: string;
16
+ }
17
+ interface RouterChatResult {
18
+ content: string;
19
+ /** REAL usage, or undefined when the provider reported none. */
20
+ usage?: {
21
+ input: number;
22
+ output: number;
23
+ };
24
+ /** Derived from usage via `estimateCost` when the model is priced; else undefined. */
25
+ costUsd?: number;
26
+ }
27
+ declare function routerChatWithUsage(cfg: RouterConfig, messages: Array<{
28
+ role: string;
29
+ content: string;
30
+ }>, opts?: {
31
+ temperature?: number;
32
+ signal?: AbortSignal;
33
+ maxTokens?: number;
34
+ }): Promise<RouterChatResult>;
35
+ /** A tool-call the model emitted (provider-neutral; mirrors the runtime's ToolCallRequest). */
36
+ interface RouterToolCall {
37
+ id: string;
38
+ name: string;
39
+ /** Raw JSON arguments string as emitted by the model. */
40
+ arguments: string;
41
+ }
42
+ interface RouterChatToolsResult {
43
+ content: string | null;
44
+ toolCalls: RouterToolCall[];
45
+ usage?: {
46
+ input: number;
47
+ output: number;
48
+ };
49
+ costUsd?: number;
50
+ }
51
+ /**
52
+ * A router completion WITH tool-calling — the operator driver's LLM seam. Passes OpenAI-shape
53
+ * `messages` (system/user/assistant-with-tool_calls/tool roles) + function `tools`, and returns the
54
+ * assistant text plus the tool calls the model wants run. Same fail-loud + real-usage discipline as
55
+ * `routerChatWithUsage`. `tool_choice: 'auto'` lets the model decide; the driver loops on the result.
56
+ */
57
+ declare function routerChatWithTools(cfg: RouterConfig, messages: ReadonlyArray<Record<string, unknown>>, tools: ReadonlyArray<{
58
+ type: 'function';
59
+ function: {
60
+ name: string;
61
+ description?: string;
62
+ parameters: unknown;
63
+ };
64
+ }>, opts?: {
65
+ temperature?: number;
66
+ signal?: AbortSignal;
67
+ toolChoice?: 'auto' | 'required' | 'none';
68
+ maxTokens?: number;
69
+ }): Promise<RouterChatToolsResult>;
70
+ interface ToolSpec {
71
+ type: 'function';
72
+ function: {
73
+ name: string;
74
+ description?: string;
75
+ parameters: unknown;
76
+ };
77
+ }
78
+ interface RouterToolLoopResult {
79
+ /** The model's final assistant text (the turn where it stopped calling tools, or the budget turn). */
80
+ final: string;
81
+ /** Inference turns spent (≤ maxTurns) — the equal-budget unit vs random@k. */
82
+ turns: number;
83
+ toolCalls: number;
84
+ /** The behavior trace: each tool call + its result, in order. What a trace-analyst
85
+ * steerer reads (behavior, never the verdict) to diagnose + redirect the next shot. */
86
+ toolTrace: Array<{
87
+ name: string;
88
+ args: string;
89
+ result: string;
90
+ }>;
91
+ usage: {
92
+ input: number;
93
+ output: number;
94
+ };
95
+ /** The full conversation after the loop (seed + every assistant/tool turn). Lets a caller
96
+ * CARRY the messages into the next shot (depth continuation) and read the trajectory. */
97
+ messages: Array<Record<string, unknown>>;
98
+ }
99
+ /**
100
+ * The tool-using router backend: a real agentic loop OVER the Tangle router (which
101
+ * supports tool-calling), off-box — no sandbox. Each turn is one router completion
102
+ * with `tools`; if the model emits tool_calls, `execute` runs them on the host and
103
+ * their results are folded back as `tool` messages; the loop repeats until the
104
+ * model answers without a tool call or the turn budget is hit. One turn = one
105
+ * inference call, so `maxTurns` is the equal-compute unit against random@k.
106
+ *
107
+ * This is the depth substrate for agentic gates (the worker ACTS, observes the real
108
+ * result, and continues) that the chat-only `routerChatWithUsage` cannot express.
109
+ */
110
+ declare function routerToolLoop(cfg: RouterConfig, system: string, user: string, tools: ReadonlyArray<ToolSpec>, execute: (name: string, args: Record<string, unknown>) => Promise<string>, opts?: {
111
+ maxTurns?: number;
112
+ temperature?: number;
113
+ signal?: AbortSignal;
114
+ maxTokens?: number;
115
+ /** Seed the loop with an existing conversation (depth continuation) instead of
116
+ * `[system, user]`. When set, `system`/`user` are ignored. The array is copied. */
117
+ initialMessages?: ReadonlyArray<Record<string, unknown>>;
118
+ }): Promise<RouterToolLoopResult>;
119
+
120
+ export { type RouterChatResult as R, type ToolSpec as T, type RouterChatToolsResult as a, type RouterConfig as b, type RouterToolCall as c, type RouterToolLoopResult as d, routerChatWithUsage as e, routerToolLoop as f, routerChatWithTools as r };
@@ -1,5 +1,5 @@
1
1
  import { SandboxInstance } from '@tangle-network/sandbox';
2
- import { D as Driver, A as AgentRunSpec, O as OutputAdapter, V as Validator, E as ExecCtx, I as Iteration, L as LoopWinner, a as LoopLineageOptions, S as SandboxClient, b as LoopResult } from './types-BEQsBhOE.js';
2
+ import { D as Driver, A as AgentRunSpec, O as OutputAdapter, V as Validator, E as ExecCtx, I as Iteration, L as LoopWinner, a as LoopLineageOptions, S as SandboxClient, b as LoopResult } from './types-CklkW4Eh.js';
3
3
 
4
4
  /**
5
5
  * @experimental
package/dist/runtime.d.ts CHANGED
@@ -1,16 +1,19 @@
1
1
  import { AgentProfile, BackendType, CreateSandboxOptions, SandboxInstance, SandboxEvent } from '@tangle-network/sandbox';
2
2
  export { AgentProfile, CreateSandboxOptions, SandboxEvent, SandboxInstance } from '@tangle-network/sandbox';
3
- import { R as ResultBlobStore, a as SpawnJournal, N as NodeId, b as SpawnEvent, T as TreeView, c as Settled, d as AgentSpec, E as ExecutorRegistry, B as Budget, A as Agent, e as RootHandle, f as SupervisedResult, g as Spend, S as Scope, h as ExecutorFactory, U as UsageEvent, i as Supervisor } from './types-5MGt5KTY.js';
4
- export { j as Executor, k as ExecutorContext, l as ExecutorResult, H as Handle, m as NodeSnapshot, n as NodeStatus, o as Restart, p as RootSignal, q as Runtime, r as SpawnOpts, s as SupervisorOpts, W as WidenGate } from './types-5MGt5KTY.js';
3
+ import { R as ResultBlobStore, a as SpawnJournal, N as NodeId, b as SpawnEvent, T as TreeView, c as Settled, d as AgentSpec, E as ExecutorRegistry, B as Budget, A as Agent, e as RootHandle, f as SupervisedResult, g as Spend, S as Scope, h as ExecutorFactory, U as UsageEvent, i as Supervisor } from './types-CNDJCL_0.js';
4
+ export { j as Executor, k as ExecutorContext, l as ExecutorResult, H as Handle, m as NodeSnapshot, n as NodeStatus, o as Restart, p as RootSignal, q as Runtime, r as SpawnOpts, s as SupervisorOpts, W as WidenGate } from './types-CNDJCL_0.js';
5
5
  import { R as RuntimeHooks } from './runtime-hooks-C7JwKb9E.js';
6
- import { ChatClient, AnalystFinding, DefaultVerdict, AgentProfile as AgentProfile$1 } from '@tangle-network/agent-eval';
6
+ import { ChatClient, AnalystFinding, DefaultVerdict, AgentProfile as AgentProfile$1, AnalystRunInputs } from '@tangle-network/agent-eval';
7
7
  export { DefaultVerdict } from '@tangle-network/agent-eval';
8
- export { A as AnalyzeInput, a as CompletionAnalyst, b as CompletionEvidence, c as CompletionPolicy, d as CompletionVerdict, C as CreateDriverOptions, D as DriverDecision, P as PlannerContext, e as TopologyMove, T as TopologyPlanner, f as completionAuthorizes, g as createDriver, h as deterministicCompletion, r as renderAnalyses, s as sentinelCompletion, i as stopSentinel } from './driver-DLI1io57.js';
9
- import { S as SandboxClient, b as LoopResult, d as LoopTokenUsage, R as RuntimeStreamEvent, A as AgentRunSpec, E as ExecCtx, I as Iteration } from './types-BEQsBhOE.js';
10
- export { D as Driver, F as LoopDecisionPayload, G as LoopEndedPayload, H as LoopIterationDispatchPayload, J as LoopIterationEndedPayload, M as LoopIterationStartedPayload, a as LoopLineageOptions, N as LoopPlanDescription, P as LoopPlanPayload, e as LoopSandboxPlacement, Q as LoopStartedPayload, T as LoopTeardownFailedPayload, f as LoopTraceEmitter, g as LoopTraceEvent, L as LoopWinner, O as OutputAdapter, U as ValidationCtx, V as Validator } from './types-BEQsBhOE.js';
8
+ export { A as AnalyzeInput, a as CompletionAnalyst, b as CompletionEvidence, c as CompletionPolicy, d as CompletionVerdict, C as CreateDriverOptions, D as DriverDecision, P as PlannerContext, e as TopologyMove, T as TopologyPlanner, f as completionAuthorizes, g as createDriver, h as deterministicCompletion, r as renderAnalyses, s as sentinelCompletion, i as stopSentinel } from './driver-B2RKkVJW.js';
9
+ import { S as SandboxClient, b as LoopResult, d as LoopTokenUsage, R as RuntimeStreamEvent, A as AgentRunSpec, E as ExecCtx, I as Iteration } from './types-CklkW4Eh.js';
10
+ export { D as Driver, F as LoopDecisionPayload, G as LoopEndedPayload, H as LoopIterationDispatchPayload, J as LoopIterationEndedPayload, M as LoopIterationStartedPayload, a as LoopLineageOptions, N as LoopPlanDescription, P as LoopPlanPayload, f as LoopSandboxPlacement, Q as LoopStartedPayload, T as LoopTeardownFailedPayload, g as LoopTraceEmitter, e as LoopTraceEvent, L as LoopWinner, O as OutputAdapter, U as ValidationCtx, V as Validator } from './types-CklkW4Eh.js';
11
11
  import { Scenario, ProfileDispatchFn } from '@tangle-network/agent-eval/campaign';
12
- import { R as RunLoopOptions } from './run-loop-BIineL1T.js';
13
- export { c as createSandboxForSpec, d as defaultSelectWinner, r as runLoop } from './run-loop-BIineL1T.js';
12
+ import { R as RunLoopOptions } from './run-loop-DgVhucoR.js';
13
+ export { c as createSandboxForSpec, d as defaultSelectWinner, r as runLoop } from './run-loop-DgVhucoR.js';
14
+ import { b as AnalystRegistryLike } from './types-p8dWBIXL.js';
15
+ import { T as ToolSpec } from './router-client-B0Qi1NiN.js';
16
+ export { R as RouterChatResult, a as RouterChatToolsResult, b as RouterConfig, c as RouterToolCall, d as RouterToolLoopResult, r as routerChatWithTools, e as routerChatWithUsage, f as routerToolLoop } from './router-client-B0Qi1NiN.js';
14
17
 
15
18
  /**
16
19
  * @experimental
@@ -464,6 +467,9 @@ interface ShapeContext<D = unknown> {
464
467
  /** Derive a child `AgentSpec` from the persona's root spec with an overridden profile —
465
468
  * the seam a shape uses to give a worker a narrower role/prompt than the root persona. */
466
469
  childSpec(profile: AgentProfile, harness?: BackendType | null): AgentSpec;
470
+ /** The scope analyst (selector≠judge firewall) the combinator steers from. Absent ⇒ the
471
+ * dormant default (empty findings → gates read deliverables/state only). */
472
+ readonly analyst?: ScopeAnalyst<D>;
467
473
  }
468
474
  /**
469
475
  * A reusable act-body factory. Given the persona's content + seams (`ShapeContext`), it
@@ -521,6 +527,15 @@ interface RunPersonifiedOptions<Task, D> {
521
527
  readonly handle?: RootHandle<Outcome<D>>;
522
528
  readonly now?: () => number;
523
529
  readonly signal?: AbortSignal;
530
+ /** Optional scope analyst threaded into the shape's ShapeContext so loopUntil/widen steer
531
+ * on trace-derived findings instead of the dormant empty default. */
532
+ readonly analyst?: ScopeAnalyst<D>;
533
+ /**
534
+ * Lifecycle stream sink, forwarded to `SupervisorOpts.hooks` so the root `Scope`'s
535
+ * `agent.spawn`/`agent.child` events flow to an observer (e.g. the Intelligence SDK's
536
+ * trace export). Absent ⇒ no stream (the run is silent, as today).
537
+ */
538
+ readonly hooks?: RuntimeHooks;
524
539
  }
525
540
  /** The composed run signature. */
526
541
  type RunPersonified = <Task, D>(options: RunPersonifiedOptions<Task, D>) => Promise<SupervisedResult<Outcome<D>>>;
@@ -1635,6 +1650,32 @@ interface CreateScopeAnalystOptions<D> {
1635
1650
  * - any finding cites judge-derived metric evidence → `PlannerError` via the firewall
1636
1651
  */
1637
1652
  declare function createScopeAnalyst<D>(scope: Scope<Outcome<D>>, options: CreateScopeAnalystOptions<D>): ScopeAnalyst<D>;
1653
+ /**
1654
+ * Project a `ScopeAnalyzeInput` into the `AnalystRegistry.run` arguments. The registry runs over a
1655
+ * `runId` + `AnalystRunInputs` (a trace store / run record / artifact dir), NOT in-memory scope
1656
+ * settlements — so the CALLER owns the projection from the combinator's drained children to the
1657
+ * registry's inputs (e.g. the trace store the run already wrote). This adapter never invents that
1658
+ * bridge; it only runs the projected inputs and firewalls the merged findings.
1659
+ */
1660
+ interface RegistryAnalyzeProjection {
1661
+ readonly runId: string;
1662
+ readonly inputs: AnalystRunInputs;
1663
+ /** Optional `run` opts (e.g. `priorFindings`) forwarded verbatim to the registry. */
1664
+ readonly opts?: Parameters<AnalystRegistryLike['run']>[2];
1665
+ }
1666
+ /**
1667
+ * A `ScopeAnalyst` backed by an `AnalystRegistry` — the panel-of-analysts seam. The registry merges
1668
+ * N analyst KINDS into one `AnalystRunResult.findings`; `analyze` runs it over the caller-projected
1669
+ * `{ runId, inputs }` and pipes the merged findings through the SAME `assertTraceDerivedFindings`
1670
+ * firewall `createScopeAnalyst` uses (single-sourced selector≠judge). Distinct from `panel()`
1671
+ * (judges-vs-one-artifact) — this is analysts-over-a-trace, the diagnosis side of the wire.
1672
+ *
1673
+ * Fail loud: a registry that throws propagates; a judge-derived finding aborts via the firewall.
1674
+ * The projection is the caller's (`buildInputs`) — if the scope settlements do not cleanly map to
1675
+ * the registry's `AnalystRunInputs`, that is a caller-side contract gap, surfaced there, not papered
1676
+ * over with a fabricated input here.
1677
+ */
1678
+ declare function registryScopeAnalyst<D>(registry: AnalystRegistryLike, buildInputs: (input: ScopeAnalyzeInput<D>) => RegistryAnalyzeProjection): ScopeAnalyst<D>;
1638
1679
  /**
1639
1680
  * Build the `SteerContext` a combinator reads to steer (its `loopUntil.until`, `widen` gate, any
1640
1681
  * future steer). One place enforces the firewall: `findings` is asserted trace-derived before it is
@@ -1693,9 +1734,10 @@ declare function fanout<Task, Item, D>(items: ReadonlyArray<Item>, opts: FanoutO
1693
1734
  * the deployable stop. The conserved pool IS the loop bound: once `spawn` fails closed the loop
1694
1735
  * stops. A loop that exhausted the pool without `until` ever satisfying is a concrete blocker.
1695
1736
  *
1696
- * Findings are threaded through the `SteerContext` firewall in the analyst seam (`analyst.ts`);
1697
- * absent a wired analyst on this surface the firewall stays dormant and `until` is consulted with
1698
- * an empty findings array never a fabricated finding (fail-loud honesty over a silent default).
1737
+ * When `ctx.analyst` is set, each round runs it over the children settled so far and steers
1738
+ * `until` on the resulting trace-derived findings (the analyst spawns into THIS scope, so its
1739
+ * compute is conserved-pooledequal-k holds by construction). Absent an analyst the findings
1740
+ * argument is the empty array — never a fabricated finding (fail-loud honesty over a silent default).
1699
1741
  */
1700
1742
  declare function loopUntil<Task, State, D>(seed: State, spec: LoopUntilSpec<Task, State, D>): CombinatorShape<Task, D>;
1701
1743
  /**
@@ -1721,9 +1763,14 @@ declare function verify<Task, Candidate, D>(spec: VerifySpec<Task, Candidate, D>
1721
1763
  * never a child's raw `verdict` — and the default gate (`flatWidenGate`) never widens, so the R2
1722
1764
  * firewall stays dormant. Terminal selection is `spec.synthesize` over every settled lineage.
1723
1765
  *
1724
- * No analyst is wired on this frozen surface, so `decide` is consulted with an empty findings
1725
- * array; a flat gate ignores it. A non-flat gate that wants findings reads them through the
1726
- * `SteerContext` firewall the analyst seam owns never fabricated here.
1766
+ * When `ctx.analyst` is set, `decide` is consulted with that round's trace-derived findings;
1767
+ * absent an analyst the findings argument is the empty array a flat gate ignores. The analyst
1768
+ * spawns into THIS scope (conserved-pooled, so equal-k holds). Streaming caveat: a wired analyst
1769
+ * drains its own child off the SHARED cursor by id-match, so on a NON-flat gate (which spawns
1770
+ * widen children that are live concurrently) the analyst can consume a sibling's settlement before
1771
+ * the widen loop sees it. The shipped default (`flatWidenGate`) never widens, so no widen child is
1772
+ * ever live when the analyst runs and the wire is exact; a non-flat gate must drive the analyst on
1773
+ * a scope whose siblings are quiesced, or read findings without the shared-cursor drain.
1727
1774
  */
1728
1775
  declare function widen<Task, Seed, D>(spec: WidenSpec<Seed, D>): CombinatorShape<Task, D>;
1729
1776
  /**
@@ -1996,117 +2043,6 @@ interface UsageSink {
1996
2043
  */
1997
2044
  declare function reportLoopUsage<Task, Output, Decision>(cost: UsageSink, result: Pick<LoopResult<Task, Output, Decision>, 'costUsd' | 'tokenUsage'>, source?: string): void;
1998
2045
 
1999
- /**
2000
- * The one router chat client: direct OpenAI-compatible completions through the
2001
- * Tangle router — the cheapest dial, no sandbox. Three layers: `routerChatWithUsage`
2002
- * (chat-only), `routerChatWithTools` (one completion with function tools), and
2003
- * `routerToolLoop` (the off-box agentic loop over tool-calling). Shared by the
2004
- * built-in executors and the bench/lab harnesses.
2005
- *
2006
- * Reports REAL token usage so the backend-integrity guard sees a real backend.
2007
- * Returns `undefined` usage when the provider omitted it — never a fabricated 0
2008
- * (a phantom 0 reads as a free call downstream, which the gate would act on).
2009
- */
2010
- interface RouterConfig {
2011
- routerBaseUrl: string;
2012
- routerKey: string;
2013
- model: string;
2014
- }
2015
- interface RouterChatResult {
2016
- content: string;
2017
- /** REAL usage, or undefined when the provider reported none. */
2018
- usage?: {
2019
- input: number;
2020
- output: number;
2021
- };
2022
- /** Derived from usage via `estimateCost` when the model is priced; else undefined. */
2023
- costUsd?: number;
2024
- }
2025
- declare function routerChatWithUsage(cfg: RouterConfig, messages: Array<{
2026
- role: string;
2027
- content: string;
2028
- }>, opts?: {
2029
- temperature?: number;
2030
- signal?: AbortSignal;
2031
- maxTokens?: number;
2032
- }): Promise<RouterChatResult>;
2033
- /** A tool-call the model emitted (provider-neutral; mirrors the runtime's ToolCallRequest). */
2034
- interface RouterToolCall {
2035
- id: string;
2036
- name: string;
2037
- /** Raw JSON arguments string as emitted by the model. */
2038
- arguments: string;
2039
- }
2040
- interface RouterChatToolsResult {
2041
- content: string | null;
2042
- toolCalls: RouterToolCall[];
2043
- usage?: {
2044
- input: number;
2045
- output: number;
2046
- };
2047
- costUsd?: number;
2048
- }
2049
- /**
2050
- * A router completion WITH tool-calling — the operator driver's LLM seam. Passes OpenAI-shape
2051
- * `messages` (system/user/assistant-with-tool_calls/tool roles) + function `tools`, and returns the
2052
- * assistant text plus the tool calls the model wants run. Same fail-loud + real-usage discipline as
2053
- * `routerChatWithUsage`. `tool_choice: 'auto'` lets the model decide; the driver loops on the result.
2054
- */
2055
- declare function routerChatWithTools(cfg: RouterConfig, messages: ReadonlyArray<Record<string, unknown>>, tools: ReadonlyArray<{
2056
- type: 'function';
2057
- function: {
2058
- name: string;
2059
- description?: string;
2060
- parameters: unknown;
2061
- };
2062
- }>, opts?: {
2063
- temperature?: number;
2064
- signal?: AbortSignal;
2065
- toolChoice?: 'auto' | 'required' | 'none';
2066
- }): Promise<RouterChatToolsResult>;
2067
- interface ToolSpec {
2068
- type: 'function';
2069
- function: {
2070
- name: string;
2071
- description?: string;
2072
- parameters: unknown;
2073
- };
2074
- }
2075
- interface RouterToolLoopResult {
2076
- /** The model's final assistant text (the turn where it stopped calling tools, or the budget turn). */
2077
- final: string;
2078
- /** Inference turns spent (≤ maxTurns) — the equal-budget unit vs random@k. */
2079
- turns: number;
2080
- toolCalls: number;
2081
- /** The behavior trace: each tool call + its result, in order. What a trace-analyst
2082
- * steerer reads (behavior, never the verdict) to diagnose + redirect the next shot. */
2083
- toolTrace: Array<{
2084
- name: string;
2085
- args: string;
2086
- result: string;
2087
- }>;
2088
- usage: {
2089
- input: number;
2090
- output: number;
2091
- };
2092
- }
2093
- /**
2094
- * The tool-using router backend: a real agentic loop OVER the Tangle router (which
2095
- * supports tool-calling), off-box — no sandbox. Each turn is one router completion
2096
- * with `tools`; if the model emits tool_calls, `execute` runs them on the host and
2097
- * their results are folded back as `tool` messages; the loop repeats until the
2098
- * model answers without a tool call or the turn budget is hit. One turn = one
2099
- * inference call, so `maxTurns` is the equal-compute unit against random@k.
2100
- *
2101
- * This is the depth substrate for agentic gates (the worker ACTS, observes the real
2102
- * result, and continues) that the chat-only `routerChatWithUsage` cannot express.
2103
- */
2104
- declare function routerToolLoop(cfg: RouterConfig, system: string, user: string, tools: ReadonlyArray<ToolSpec>, execute: (name: string, args: Record<string, unknown>) => Promise<string>, opts?: {
2105
- maxTurns?: number;
2106
- temperature?: number;
2107
- signal?: AbortSignal;
2108
- }): Promise<RouterToolLoopResult>;
2109
-
2110
2046
  /**
2111
2047
  * @experimental
2112
2048
  *
@@ -3184,4 +3120,4 @@ declare function gitWorkspace(opts: GitWorkspaceOptions): Workspace;
3184
3120
  * requires `jj` on the `Shell`'s host. */
3185
3121
  declare function jjWorkspace(opts: GitWorkspaceOptions): Workspace;
3186
3122
 
3187
- export { Agent, AgentRunSpec, AgentSpec, type AgenticOptions, type AgenticRunResult, type AgenticSurface, type AgenticTask, type AgenticTool, type AnytimeReport, type AnytimeStrategySummary, type AnytimeTaskCurve, type ArtifactHandle, type AssertTraceDerivedFindings, type AuditIntentInput, type AuditIntentOptions, type AuthorStrategyOptions, type AuthoredStrategy, type BenchmarkCell, type BenchmarkConfig, type BenchmarkLift, type BenchmarkReport, type BenchmarkStrategySummary, type BenchmarkTaskRow, type BridgeSeam, Budget, type BudgetPool, type BudgetReadout, type ChampionPick, type ChampionPolicy, type CheckpointCapableBox, type CliSeam, type CombinatorShape, type Corpus, type CorpusFilter, type CorpusRecord, type CreateScopeAnalystOptions, type CriuCapableClient, type DefinePersona, type DefinePersonaInput, type Deliverable, type Environment, type EqualKArm, type EqualKOnCost, type EqualKOnCostOptions, type EqualKVerdict, type EvolutionArchiveNode, type EvolutionAuthor, type EvolutionBandInfo, type EvolutionCandidate, type EvolutionGeneration, type EvolutionReport, ExecCtx, type ExecutorConfig, ExecutorFactory, ExecutorRegistry, type Fanout, type FanoutOptions, type FanoutSynthesis, FileCorpus, FileResultBlobStore, FileSpawnJournal, type FlatWidenGate, type ForkCapableBox, type GitWorkspaceOptions, type HarvestCorpusOptions, type HarvestFailure, type HarvestReport, InMemoryCorpus, InMemoryResultBlobStore, InMemorySpawnJournal, type IntentAudit, Iteration, type LoopDispatchOptions, type LoopOptionsForDispatch, LoopResult, type LoopShape, LoopTokenUsage, type LoopUntil, type LoopUntilSpec, type LoopUntilState, type McpEndpoint, type McpEnvironmentOptions, NodeId, type Observation, type ObserveInput, type ObserveOptions, type OpenSandboxRunOptions, type Outcome, type Panel, type PanelJudge, type PanelSpec, type PanelVerdict, type Persona, type PersonaContext, type PersonaExecutors, type Pipeline, type PipelineStage, type PromotionGateOptions, type PromotionVerdict, type RenderCorpusToInstructions, type RenderCorpusToInstructionsOptions, type ReservationTicket, ResultBlobStore, RootHandle, type RouterChatResult, type RouterChatToolsResult, type RouterConfig, type RouterSeam, type RouterToolCall, type RouterToolLoopResult, type RouterToolsSeam, type RunAgenticOptions, RunLoopOptions, type RunPersonified, type RunPersonifiedOptions, type SandboxCapabilities, SandboxClient, type SandboxLineage, type SandboxLineageHandle, type SandboxRun, type SandboxSeam, Scope, type ScopeAnalyst, type ScopeAnalyzeInput, type ScopeWidenGate, type SessionCapableBox, Settled, type ShapeBudget, type ShapeContext, type ShapeRegistry, type Shell, type ShotPersona, type ShotSpec, SpawnEvent, SpawnJournal, Spend, type SteerContext, type Strategy, type StrategyCtx, type StrategyEvolutionConfig, type StrategyResult, SupervisedResult, Supervisor, type SurfaceScore, type ToolSpec, type TrajectoryNode, type TrajectoryReport, type TrajectoryReportFn, type TrajectoryReportOptions, TreeView, type TurnResult, UsageEvent, type UsageSink, type VerifierEnvironmentOptions, type Verify, type VerifySpec, type WaterfallCollector, type WaterfallReport, type WaterfallSpan, type Widen, type WidenDecision, type WidenLineage, type WidenSpec, type Workspace, type WorkspaceCommit, acquireSandbox, adaptiveRefine, anytimeReport, assertStrategyContract, assertTraceDerivedFindings, auditIntent, authorStrategy, breadthDriver, buildSteerContext, builtinShapes, contentAddress, createBudgetPool, createExecutor, createExecutorRegistry, createMcpEnvironment, createRootHandle, createSandboxLineage, createScope, createScopeAnalyst, createShapeRegistry, createSupervisor, createVerifierEnvironment, createWaterfallCollector, defaultAnalystInstruction, defaultAuditorInstruction, definePersona, defineStrategy, depthDriver, discriminatingMeans, equalKOnCost, extractLlmCallEvent, fanout, flatWidenGate, gitWorkspace, harvestCorpus, inlineSandboxClient, jjWorkspace, localShell, loopDispatch, loopUntil, mapSandboxEvent, materializeTreeView, observe, openSandboxRun, panel, pickChampion, pipeline, printBenchmarkReport, probeSandboxCapabilities, promotionGate, refine, registerShape, renderAnytimeTable, renderCorpusToInstructions, renderReport, replaySpawnTree, reportLoopUsage, routerChatWithTools, routerChatWithUsage, routerToolLoop, runAgentic, runBenchmark, runPersonified, runStrategyEvolution, sample, sampleThenRefine, selectChampion, settledToIteration, spendFromUsageEvents, strategyAuthorContract, trajectoryReport, verify, widen };
3123
+ export { Agent, AgentRunSpec, AgentSpec, type AgenticOptions, type AgenticRunResult, type AgenticSurface, type AgenticTask, type AgenticTool, type AnytimeReport, type AnytimeStrategySummary, type AnytimeTaskCurve, type ArtifactHandle, type AssertTraceDerivedFindings, type AuditIntentInput, type AuditIntentOptions, type AuthorStrategyOptions, type AuthoredStrategy, type BenchmarkCell, type BenchmarkConfig, type BenchmarkLift, type BenchmarkReport, type BenchmarkStrategySummary, type BenchmarkTaskRow, type BridgeSeam, Budget, type BudgetPool, type BudgetReadout, type ChampionPick, type ChampionPolicy, type CheckpointCapableBox, type CliSeam, type CombinatorShape, type Corpus, type CorpusFilter, type CorpusRecord, type CreateScopeAnalystOptions, type CriuCapableClient, type DefinePersona, type DefinePersonaInput, type Deliverable, type Environment, type EqualKArm, type EqualKOnCost, type EqualKOnCostOptions, type EqualKVerdict, type EvolutionArchiveNode, type EvolutionAuthor, type EvolutionBandInfo, type EvolutionCandidate, type EvolutionGeneration, type EvolutionReport, ExecCtx, type ExecutorConfig, ExecutorFactory, ExecutorRegistry, type Fanout, type FanoutOptions, type FanoutSynthesis, FileCorpus, FileResultBlobStore, FileSpawnJournal, type FlatWidenGate, type ForkCapableBox, type GitWorkspaceOptions, type HarvestCorpusOptions, type HarvestFailure, type HarvestReport, InMemoryCorpus, InMemoryResultBlobStore, InMemorySpawnJournal, type IntentAudit, Iteration, type LoopDispatchOptions, type LoopOptionsForDispatch, LoopResult, type LoopShape, LoopTokenUsage, type LoopUntil, type LoopUntilSpec, type LoopUntilState, type McpEndpoint, type McpEnvironmentOptions, NodeId, type Observation, type ObserveInput, type ObserveOptions, type OpenSandboxRunOptions, type Outcome, type Panel, type PanelJudge, type PanelSpec, type PanelVerdict, type Persona, type PersonaContext, type PersonaExecutors, type Pipeline, type PipelineStage, type PromotionGateOptions, type PromotionVerdict, type RegistryAnalyzeProjection, type RenderCorpusToInstructions, type RenderCorpusToInstructionsOptions, type ReservationTicket, ResultBlobStore, RootHandle, type RouterSeam, type RouterToolsSeam, type RunAgenticOptions, RunLoopOptions, type RunPersonified, type RunPersonifiedOptions, type SandboxCapabilities, SandboxClient, type SandboxLineage, type SandboxLineageHandle, type SandboxRun, type SandboxSeam, Scope, type ScopeAnalyst, type ScopeAnalyzeInput, type ScopeWidenGate, type SessionCapableBox, Settled, type ShapeBudget, type ShapeContext, type ShapeRegistry, type Shell, type ShotPersona, type ShotSpec, SpawnEvent, SpawnJournal, Spend, type SteerContext, type Strategy, type StrategyCtx, type StrategyEvolutionConfig, type StrategyResult, SupervisedResult, Supervisor, type SurfaceScore, ToolSpec, type TrajectoryNode, type TrajectoryReport, type TrajectoryReportFn, type TrajectoryReportOptions, TreeView, type TurnResult, UsageEvent, type UsageSink, type VerifierEnvironmentOptions, type Verify, type VerifySpec, type WaterfallCollector, type WaterfallReport, type WaterfallSpan, type Widen, type WidenDecision, type WidenLineage, type WidenSpec, type Workspace, type WorkspaceCommit, acquireSandbox, adaptiveRefine, anytimeReport, assertStrategyContract, assertTraceDerivedFindings, auditIntent, authorStrategy, breadthDriver, buildSteerContext, builtinShapes, contentAddress, createBudgetPool, createExecutor, createExecutorRegistry, createMcpEnvironment, createRootHandle, createSandboxLineage, createScope, createScopeAnalyst, createShapeRegistry, createSupervisor, createVerifierEnvironment, createWaterfallCollector, defaultAnalystInstruction, defaultAuditorInstruction, definePersona, defineStrategy, depthDriver, discriminatingMeans, equalKOnCost, extractLlmCallEvent, fanout, flatWidenGate, gitWorkspace, harvestCorpus, inlineSandboxClient, jjWorkspace, localShell, loopDispatch, loopUntil, mapSandboxEvent, materializeTreeView, observe, openSandboxRun, panel, pickChampion, pipeline, printBenchmarkReport, probeSandboxCapabilities, promotionGate, refine, registerShape, registryScopeAnalyst, renderAnytimeTable, renderCorpusToInstructions, renderReport, replaySpawnTree, reportLoopUsage, runAgentic, runBenchmark, runPersonified, runStrategyEvolution, sample, sampleThenRefine, selectChampion, settledToIteration, spendFromUsageEvents, strategyAuthorContract, trajectoryReport, verify, widen };
package/dist/runtime.js CHANGED
@@ -60,6 +60,7 @@ import {
60
60
  promotionGate,
61
61
  refine,
62
62
  registerShape,
63
+ registryScopeAnalyst,
63
64
  renderAnalyses,
64
65
  renderAnytimeTable,
65
66
  renderCorpusToInstructions,
@@ -85,7 +86,7 @@ import {
85
86
  trajectoryReport,
86
87
  verify,
87
88
  widen
88
- } from "./chunk-FQH33M5N.js";
89
+ } from "./chunk-K6WP7PYW.js";
89
90
  import {
90
91
  extractLlmCallEvent,
91
92
  mapSandboxEvent
@@ -155,6 +156,7 @@ export {
155
156
  promotionGate,
156
157
  refine,
157
158
  registerShape,
159
+ registryScopeAnalyst,
158
160
  renderAnalyses,
159
161
  renderAnytimeTable,
160
162
  renderCorpusToInstructions,
@@ -1,7 +1,7 @@
1
1
  import { DefaultVerdict } from '@tangle-network/agent-eval';
2
2
  import { AgentProfile, BackendType } from '@tangle-network/sandbox';
3
3
  import { R as RuntimeHooks } from './runtime-hooks-C7JwKb9E.js';
4
- import { d as LoopTokenUsage } from './types-BEQsBhOE.js';
4
+ import { d as LoopTokenUsage } from './types-CklkW4Eh.js';
5
5
 
6
6
  /**
7
7
  * @experimental
@@ -319,6 +319,7 @@ type RuntimeStreamEvent = {
319
319
  proposalId: string;
320
320
  title: string;
321
321
  status?: 'pending' | 'approved' | 'rejected';
322
+ content?: string;
322
323
  timestamp?: string;
323
324
  } | {
324
325
  type: 'backend_error';
@@ -1096,4 +1097,4 @@ interface ExecCtx {
1096
1097
  parentSpanId?: string;
1097
1098
  }
1098
1099
 
1099
- export { type AgentRunSpec as A, type BackendErrorDetail as B, startRuntimeRun as C, type Driver as D, type ExecCtx as E, type LoopDecisionPayload as F, type LoopEndedPayload as G, type LoopIterationDispatchPayload as H, type Iteration as I, type LoopIterationEndedPayload as J, type KnowledgeReadinessDecision as K, type LoopWinner as L, type LoopIterationStartedPayload as M, type LoopPlanDescription as N, type OutputAdapter as O, type LoopPlanPayload as P, type LoopStartedPayload as Q, type RuntimeStreamEvent as R, type SandboxClient as S, type LoopTeardownFailedPayload as T, type ValidationCtx as U, type Validator as V, type LoopLineageOptions as a, type LoopResult as b, type OpenAIChatTool as c, type LoopTokenUsage as d, type LoopSandboxPlacement as e, type LoopTraceEmitter as f, type LoopTraceEvent as g, type AgentBackendInput as h, type AgentExecutionBackend as i, type OpenAIChatToolChoice as j, type AgentBackendContext as k, type RunAgentTaskOptions as l, type AgentTaskRunResult as m, type RunAgentTaskStreamOptions as n, type AgentRuntimeEvent as o, type AgentTaskStatus as p, type RuntimeSessionStore as q, type RuntimeSession as r, type AgentAdapter as s, type AgentKnowledgeProvider as t, type AgentRuntimeEventSink as u, type AgentTaskContext as v, type AgentTaskSpec as w, type RuntimeRunHandle as x, type RuntimeRunPersistenceAdapter as y, type RuntimeRunRow as z };
1100
+ export { type AgentRunSpec as A, type BackendErrorDetail as B, startRuntimeRun as C, type Driver as D, type ExecCtx as E, type LoopDecisionPayload as F, type LoopEndedPayload as G, type LoopIterationDispatchPayload as H, type Iteration as I, type LoopIterationEndedPayload as J, type KnowledgeReadinessDecision as K, type LoopWinner as L, type LoopIterationStartedPayload as M, type LoopPlanDescription as N, type OutputAdapter as O, type LoopPlanPayload as P, type LoopStartedPayload as Q, type RuntimeStreamEvent as R, type SandboxClient as S, type LoopTeardownFailedPayload as T, type ValidationCtx as U, type Validator as V, type LoopLineageOptions as a, type LoopResult as b, type OpenAIChatTool as c, type LoopTokenUsage as d, type LoopTraceEvent as e, type LoopSandboxPlacement as f, type LoopTraceEmitter as g, type AgentBackendInput as h, type AgentExecutionBackend as i, type OpenAIChatToolChoice as j, type AgentBackendContext as k, type RunAgentTaskOptions as l, type AgentTaskRunResult as m, type RunAgentTaskStreamOptions as n, type AgentRuntimeEvent as o, type AgentTaskStatus as p, type RuntimeSessionStore as q, type RuntimeSession as r, type AgentAdapter as s, type AgentKnowledgeProvider as t, type AgentRuntimeEventSink as u, type AgentTaskContext as v, type AgentTaskSpec as w, type RuntimeRunHandle as x, type RuntimeRunPersistenceAdapter as y, type RuntimeRunRow as z };
@@ -1,6 +1,6 @@
1
1
  import { AgentProfile, CreateSandboxOptions, PromptOptions, TaskOptions, SandboxEvent } from '@tangle-network/sandbox';
2
- import { S as SandboxClient, O as OutputAdapter, e as LoopSandboxPlacement, b as LoopResult } from './types-BEQsBhOE.js';
3
- import { R as RunLoopOptions } from './run-loop-BIineL1T.js';
2
+ import { S as SandboxClient, O as OutputAdapter, f as LoopSandboxPlacement, b as LoopResult } from './types-CklkW4Eh.js';
3
+ import { R as RunLoopOptions } from './run-loop-DgVhucoR.js';
4
4
  import '@tangle-network/agent-eval';
5
5
  import './runtime-hooks-C7JwKb9E.js';
6
6
 
package/dist/workflow.js CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  createSandboxForSpec,
3
3
  describeSandboxPlacement,
4
4
  runLoop
5
- } from "./chunk-FQH33M5N.js";
5
+ } from "./chunk-K6WP7PYW.js";
6
6
  import {
7
7
  ValidationError,
8
8
  extractLlmCallEvent
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/agent-runtime",
3
- "version": "0.51.0",
3
+ "version": "0.53.0",
4
4
  "description": "Shared task-lifecycle skeleton for agents: a recursive loop kernel for chat turns, one-shot tasks, and multi-attempt loops, with trace capture and eval-gated self-improvement. Domain behavior lives in adapters; scoring and ship-gates in @tangle-network/agent-eval.",
5
5
  "homepage": "https://github.com/tangle-network/agent-runtime#readme",
6
6
  "repository": {