@getorrery/protocol 0.2.3 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,29 +1,29 @@
1
- # `@getorrery/protocol`
2
-
3
- **Generated. Do not hand-edit anything in this directory except this file.**
4
-
5
- `protocol.schema.json` and `protocol.d.ts` are produced by:
6
-
7
- ```bash
8
- cargo xtask typegen
9
- ```
10
-
11
- which walks the `schemars` derives on every `orrery-proto` type, writes
12
- `protocol.schema.json`, and runs `json-schema-to-typescript` over it to produce
13
- `protocol.d.ts`. Both are committed, and CI runs `typegen` and fails on
14
- `git diff --exit-code` — so an edit here is reverted by the next run, silently, and
15
- a change to the wire format that was not made in Rust is a red build.
16
-
17
- The JSON Schema is needed anyway — for `ToolDef` input validation, for
18
- `ParamSchema<P>`, and for the promise that a third party can build against a
19
- published spec — so TypeScript is a by-product rather than a second generator.
20
- That is why this is not `ts-rs` or `specta`.
21
-
22
- **Source of truth:** [`harness/core/crates/orrery-proto`](../core/crates/orrery-proto).
23
- **Implementation plan:** [`harness/docs/plans/01-proto-shared-types.md`](../docs/plans/01-proto-shared-types.md).
24
-
25
- **Status.** Generated. `protocol.schema.json` is emitted by `schemars` from a
26
- root type that names `Request`, `Event`, `Surface`, `SurfacePatch`, `Grant`,
27
- `Budget`, `Usage`, `Message` and `LoadOutcome`; `protocol.d.ts` is
28
- `json-schema-to-typescript` over it, pinned to one version so the drift gate
29
- does not flap. `cargo test -p xtask` runs the gate.
1
+ # `@getorrery/protocol`
2
+
3
+ **Generated. Do not hand-edit anything in this directory except this file.**
4
+
5
+ `protocol.schema.json` and `protocol.d.ts` are produced by:
6
+
7
+ ```bash
8
+ cargo xtask typegen
9
+ ```
10
+
11
+ which walks the `schemars` derives on every `orrery-proto` type, writes
12
+ `protocol.schema.json`, and runs `json-schema-to-typescript` over it to produce
13
+ `protocol.d.ts`. Both are committed, and CI runs `typegen` and fails on
14
+ `git diff --exit-code` — so an edit here is reverted by the next run, silently, and
15
+ a change to the wire format that was not made in Rust is a red build.
16
+
17
+ The JSON Schema is needed anyway — for `ToolDef` input validation, for
18
+ `ParamSchema<P>`, and for the promise that a third party can build against a
19
+ published spec — so TypeScript is a by-product rather than a second generator.
20
+ That is why this is not `ts-rs` or `specta`.
21
+
22
+ **Source of truth:** [`harness/core/crates/orrery-proto`](../core/crates/orrery-proto).
23
+ **Implementation plan:** [`harness/docs/plans/01-proto-shared-types.md`](../docs/plans/01-proto-shared-types.md).
24
+
25
+ **Status.** Generated. `protocol.schema.json` is emitted by `schemars` from a
26
+ root type that names `Request`, `Event`, `Surface`, `SurfacePatch`, `Grant`,
27
+ `Budget`, `Usage`, `Message` and `LoadOutcome`; `protocol.d.ts` is
28
+ `json-schema-to-typescript` over it, pinned to one version so the drift gate
29
+ does not flap. `cargo test -p xtask` runs the gate.
package/context-api.json CHANGED
@@ -1,86 +1,86 @@
1
- {
2
- "$comment": "Decisions 0016 and 0073: every call between the host and an extension, under the same names in every runtime. `area.verb` here is the wire method `area/verb`. Each binding has a test that fails when it lacks one. `extension`: an extension asks (Rust native, Node over RPC). `client`: a renderer over the control wire asks (ratatui, Ink); a client never writes state. `host`: the host asks an extension to answer (a tool call, a hook) or notifies it.",
3
- "calls": [
4
- { "name": "state.get", "extension": true, "client": false, "host": false, "does": "read one of its own state keys" },
5
- { "name": "state.set", "extension": true, "client": false, "host": false, "does": "write one of its own state keys" },
6
- { "name": "state.watch", "extension": true, "client": true, "host": false, "does": "watch one key of one extension: its value now, then every change; answers an id and the value" },
7
- { "name": "state.unwatch", "extension": true, "client": true, "host": false, "does": "stop a watch" },
8
- { "name": "state.changed", "extension": false, "client": false, "host": true, "does": "notification: a watched key changed" },
9
- { "name": "events.subscribe", "extension": true, "client": false, "host": false, "does": "the run's event bus, by kind (decisions 0014, 0074): run, agent, message, wait, lock, state, session, turn, tool, context; answers an id, then each event or that it lagged" },
10
- { "name": "events.unsubscribe", "extension": true, "client": false, "host": false, "does": "stop a subscription" },
11
- { "name": "events.event", "extension": false, "client": false, "host": true, "does": "notification: one event of a subscription, or that it lagged" },
12
- { "name": "agents.children", "extension": true, "client": false, "host": false, "does": "the agents this extension spawned (decision 0032 §2): id, parent, depth, status" },
13
- { "name": "agents.inspect", "extension": true, "client": false, "host": false, "does": "look at one of its agents: state, current call, last steps, turns, cost, outcome; `thread` adds its thread" },
14
- { "name": "agents.message", "extension": true, "client": false, "host": false, "does": "send one of its agents a message through core's router and log: it steers a working agent and wakes an idle one" },
15
- { "name": "agents.stop", "extension": true, "client": false, "host": false, "does": "stop one of its agents and everything under it; its producer is told who stopped it" },
16
- { "name": "agents.spawn", "extension": true, "client": false, "host": false, "does": "spawn a child into core's tree, recorded as this extension's (decision 0014 §6), narrowed as any spawn; answers its id" },
17
- { "name": "agents.join", "extension": true, "client": false, "host": false, "does": "wait for one of its agents to end; answers its report" },
18
- { "name": "agents.list", "extension": true, "client": false, "host": false, "does": "the run's agents" },
19
- { "name": "agents.limit", "extension": true, "client": false, "host": false, "does": "notification: a request went past a configured cap and the run stops (decision 0010 §6)" },
20
- { "name": "person.ask", "extension": true, "client": false, "host": false, "does": "ask the person and wait (decisions 0023, 0083): free text, or a kind — choose, confirm, text, form; refused, saying why, when the run cannot ask" },
21
- { "name": "ui.surface", "extension": true, "client": false, "host": false, "does": "draw one surface during a tool call, through the host's sink for that call" },
22
- { "name": "ui.notify", "extension": true, "client": false, "host": false, "does": "show the host's own toast, labelled with the extension: info, warn, error (decision 0083)" },
23
- { "name": "ui.status", "extension": true, "client": false, "host": false, "does": "set one segment of the host's status line, labelled with the extension; no text clears it" },
24
- { "name": "ui.show", "extension": true, "client": false, "host": false, "does": "place a surface, a component it declared with its data, or an inline structure (exactly one) in one of the host's placements (band, pane.left, pane.right, footer, inline, hidden), labelled with the extension, any time after ext/load; the same id replaces it, a new placement moves it (decisions 0088, 0092)" },
25
- { "name": "ui.data", "extension": true, "client": false, "host": false, "does": "change the data of a component it showed, by id: `set` the whole object (the host diffs it) or `patch` with RFC 6902 operations, exactly one; checked against the component's schema, a refused update keeps the last good data (decision 0092)" },
26
- { "name": "ui.event", "extension": false, "client": false, "host": true, "does": "notification: a person pressed, submitted or chose in a component it showed: id, action, value (decision 0092)" },
27
- { "name": "ui.hide", "extension": true, "client": false, "host": false, "does": "remove a surface it placed, by id (decision 0088)" },
28
- { "name": "session.info", "extension": true, "client": false, "host": false, "does": "what session this is: session, branch, workspace, profile, model, its window, what the last pass used (decision 0074)" },
29
- { "name": "session.read", "extension": true, "client": false, "host": false, "does": "read this session's current branch, read-only and paged from the last compaction, or a graded case's transcript (decision 0079)" },
30
- { "name": "session.append", "extension": true, "client": false, "host": false, "does": "add an `ext.message` the model sees from the next pass, written by the kernel under `session.write` (decision 0079)" },
31
- { "name": "judge.complete", "extension": true, "client": false, "host": false, "does": "one completion from the judge the host bound for a grading in flight" },
32
- { "name": "model.complete", "extension": true, "client": false, "host": false, "does": "one completion through the host, no tools: the caller's model by default, or the session's, a setting's, a role's or a named one, falling back unless told to fail (decision 0075)" },
33
- { "name": "model.event", "extension": false, "client": false, "host": true, "does": "notification: one event of a streamed `model.complete`" },
34
- { "name": "model.list", "extension": true, "client": false, "host": false, "does": "the models this extension may name" },
35
- { "name": "config.get", "wire": false, "extension": true, "client": false, "host": false, "does": "one of its own settings, `[extensions.<id>].<key>`: what `ext.load` handed it, no round trip (decision 0075)" },
36
- { "name": "run.send", "extension": true, "client": false, "host": false, "does": "send input to the session's run as a client does: steer, queue or inject, to main or an agent it spawned, shown as its own (decision 0078)" },
37
- { "name": "run.status", "extension": true, "client": false, "host": false, "does": "the run's state and how much input waits" },
38
- { "name": "timer.set", "extension": true, "client": false, "host": false, "does": "a timer the host holds, optionally holding the run; answers its id" },
39
- { "name": "timer.cancel", "extension": true, "client": false, "host": false, "does": "drop one of its timers" },
40
- { "name": "timer.fired", "extension": false, "client": false, "host": true, "does": "notification: a timer fired, with its tag; starts a parked extension" },
41
- { "name": "tools.hide", "extension": true, "client": false, "host": false, "does": "hide tools from this session's visible set (decision 0082); answers the set now" },
42
- { "name": "tools.show", "extension": true, "client": false, "host": false, "does": "lift its own hides; never shows what the visible set excludes" },
43
- { "name": "broker.list", "extension": true, "client": false, "host": false, "does": "list what is under a directory, as its grant allows" },
44
- { "name": "broker.read", "extension": true, "client": false, "host": false, "does": "read a bounded slice of a file" },
45
- { "name": "broker.write", "extension": true, "client": false, "host": false, "does": "write a file" },
46
- { "name": "broker.spawn", "extension": true, "client": false, "host": false, "does": "run a program" },
47
- { "name": "broker.fetch", "extension": true, "client": false, "host": false, "does": "make one HTTP request" },
48
- { "name": "broker.fetchStream", "extension": true, "client": false, "host": false, "does": "make one HTTP request the host signs and stream its body as `net.chunk`, then `net.end`" },
49
- { "name": "broker.credential", "extension": true, "client": false, "host": false, "does": "read a named credential" },
50
- { "name": "broker.hasCredential", "extension": true, "client": false, "host": false, "does": "whether a named credential is held, never its value" },
51
- { "name": "net.chunk", "extension": false, "client": false, "host": true, "does": "notification: the next bytes of a `broker.fetchStream`" },
52
- { "name": "net.end", "extension": false, "client": false, "host": true, "does": "notification: a `broker.fetchStream` body ended, or broke off" },
53
- { "name": "ext.register", "extension": true, "client": false, "host": false, "does": "register more after load: tools and offers, living as long as its process (decision 0010 §2)" },
54
- { "name": "ext.unregister", "extension": true, "client": false, "host": false, "does": "dispose one registration" },
55
- { "name": "ext.call", "extension": true, "client": false, "host": false, "does": "call another extension's tool through the host, checked as any call by `ext:<id>`" },
56
- { "name": "workflow.step", "extension": true, "client": false, "host": false, "does": "run one step of a `workflow.run` in flight on the host's kernel" },
57
- { "name": "provider.event", "extension": true, "client": false, "host": false, "does": "notification: one event of a `provider.stream` in flight" },
58
- { "name": "ext.load", "extension": false, "client": false, "host": true, "does": "what it contributes: tools, offers, problems; given its config, data folder and whether it is declared" },
59
- { "name": "ext.shutdown", "extension": false, "client": false, "host": true, "does": "it is going away" },
60
- { "name": "config.changed", "extension": false, "client": false, "host": true, "does": "notification: its `[extensions.<id>]` configuration changed" },
61
- { "name": "tool.call", "extension": false, "client": false, "host": true, "does": "run one of its tools, with where it runs (decision 0074); answers an outcome" },
62
- { "name": "policy.check", "extension": false, "client": false, "host": true, "does": "one of its policy hooks: deny or allow a call; no answer in time is a denial (decision 0067)" },
63
- { "name": "router.route", "extension": false, "client": false, "host": true, "does": "one of its router hooks: deliver, queue, redirect or reject a message; no answer in time is the default route" },
64
- { "name": "driver.afterTask", "extension": false, "client": false, "host": true, "does": "one of its drivers after a completed task: the next input, or none and the run ends (decision 0078)" },
65
- { "name": "interceptor.run", "extension": false, "client": false, "host": true, "does": "one of its interceptors at tool.before, tool.after, context.build, memory.recall or provider.before: continue, rewrite, deny or handled (decision 0081)" },
66
- { "name": "context.build", "extension": false, "client": false, "host": true, "does": "its context builder, once per pass: edits by entry id, applied after the cache breakpoint and recorded (decision 0080)" },
67
- { "name": "context.section", "extension": false, "client": false, "host": true, "does": "one of its context sections: text for this pass, under a short deadline" },
68
- { "name": "memory.save", "extension": false, "client": false, "host": true, "does": "core's `memory.save` tool, answered by the memory extension chosen in config" },
69
- { "name": "memory.search", "extension": false, "client": false, "host": true, "does": "core's `memory.search` tool" },
70
- { "name": "memory.forget", "extension": false, "client": false, "host": true, "does": "core's `memory.forget` tool" },
71
- { "name": "memory.recall", "extension": false, "client": false, "host": true, "does": "optional recall at turn start, recorded as `Recalled` rows" },
72
- { "name": "compactor.compact", "extension": false, "client": false, "host": true, "does": "one compaction, at overflow or for core's `context.compact` tool" },
73
- { "name": "tools.select", "extension": false, "client": false, "host": true, "does": "its tool selector, once per turn: which visible tools are declared and which only searchable (decision 0082)" },
74
- { "name": "mcp.connect", "extension": false, "client": false, "host": true, "does": "its MCP connector connects a server (decision 0084); answers a link" },
75
- { "name": "mcp.tools", "extension": false, "client": false, "host": true, "does": "the tools a connected server lists" },
76
- { "name": "mcp.call", "extension": false, "client": false, "host": true, "does": "one call to a server's tool, already policy-checked by core" },
77
- { "name": "mcp.prompts", "extension": false, "client": false, "host": true, "does": "the prompts a server lists, which become commands" },
78
- { "name": "mcp.resources", "extension": false, "client": false, "host": true, "does": "the resources a server lists, which become readable" },
79
- { "name": "mcp.disconnect", "extension": false, "client": false, "host": true, "does": "drop a connection" },
80
- { "name": "workflow.check", "extension": false, "client": false, "host": true, "does": "typecheck a workflow file with its engine" },
81
- { "name": "workflow.run", "extension": false, "client": false, "host": true, "does": "run a workflow with its engine" },
82
- { "name": "grader.grade", "extension": false, "client": false, "host": true, "does": "score one finished case with one of its graders" },
83
- { "name": "provider.stream", "extension": false, "client": false, "host": true, "does": "one completion from a provider it serves, its events as `provider.event`" },
84
- { "name": "provider.models", "extension": false, "client": false, "host": true, "does": "the models a provider it serves lists" }
85
- ]
86
- }
1
+ {
2
+ "$comment": "Decisions 0016 and 0073: every call between the host and an extension, under the same names in every runtime. `area.verb` here is the wire method `area/verb`. Each binding has a test that fails when it lacks one. `extension`: an extension asks (Rust native, Node over RPC). `client`: a renderer over the control wire asks (ratatui, Ink); a client never writes state. `host`: the host asks an extension to answer (a tool call, a hook) or notifies it.",
3
+ "calls": [
4
+ { "name": "state.get", "extension": true, "client": false, "host": false, "does": "read one of its own state keys" },
5
+ { "name": "state.set", "extension": true, "client": false, "host": false, "does": "write one of its own state keys" },
6
+ { "name": "state.watch", "extension": true, "client": true, "host": false, "does": "watch one key of one extension: its value now, then every change; answers an id and the value" },
7
+ { "name": "state.unwatch", "extension": true, "client": true, "host": false, "does": "stop a watch" },
8
+ { "name": "state.changed", "extension": false, "client": false, "host": true, "does": "notification: a watched key changed" },
9
+ { "name": "events.subscribe", "extension": true, "client": false, "host": false, "does": "the run's event bus, by kind (decisions 0014, 0074): run, agent, message, wait, lock, state, session, turn, tool, context; answers an id, then each event or that it lagged" },
10
+ { "name": "events.unsubscribe", "extension": true, "client": false, "host": false, "does": "stop a subscription" },
11
+ { "name": "events.event", "extension": false, "client": false, "host": true, "does": "notification: one event of a subscription, or that it lagged" },
12
+ { "name": "agents.children", "extension": true, "client": false, "host": false, "does": "the agents this extension spawned (decision 0032 §2): id, parent, depth, status" },
13
+ { "name": "agents.inspect", "extension": true, "client": false, "host": false, "does": "look at one of its agents: state, current call, last steps, turns, cost, outcome; `thread` adds its thread" },
14
+ { "name": "agents.message", "extension": true, "client": false, "host": false, "does": "send one of its agents a message through core's router and log: it steers a working agent and wakes an idle one" },
15
+ { "name": "agents.stop", "extension": true, "client": false, "host": false, "does": "stop one of its agents and everything under it; its producer is told who stopped it" },
16
+ { "name": "agents.spawn", "extension": true, "client": false, "host": false, "does": "spawn a child into core's tree, recorded as this extension's (decision 0014 §6), narrowed as any spawn; answers its id" },
17
+ { "name": "agents.join", "extension": true, "client": false, "host": false, "does": "wait for one of its agents to end; answers its report" },
18
+ { "name": "agents.list", "extension": true, "client": false, "host": false, "does": "the run's agents" },
19
+ { "name": "agents.limit", "extension": true, "client": false, "host": false, "does": "notification: a request went past a configured cap and the run stops (decision 0010 §6)" },
20
+ { "name": "person.ask", "extension": true, "client": false, "host": false, "does": "ask the person and wait (decisions 0023, 0083): free text, or a kind — choose, confirm, text, form; refused, saying why, when the run cannot ask" },
21
+ { "name": "ui.surface", "extension": true, "client": false, "host": false, "does": "draw one surface during a tool call, through the host's sink for that call" },
22
+ { "name": "ui.notify", "extension": true, "client": false, "host": false, "does": "show the host's own toast, labelled with the extension: info, warn, error (decision 0083)" },
23
+ { "name": "ui.status", "extension": true, "client": false, "host": false, "does": "set one segment of the host's status line, labelled with the extension; no text clears it" },
24
+ { "name": "ui.show", "extension": true, "client": false, "host": false, "does": "place a surface, a component it declared with its data, or an inline structure (exactly one) in one of the host's placements (band, pane.left, pane.right, footer, inline, hidden), labelled with the extension, any time after ext/load; the same id replaces it, a new placement moves it (decisions 0088, 0092)" },
25
+ { "name": "ui.data", "extension": true, "client": false, "host": false, "does": "change the data of a component it showed, by id: `set` the whole object (the host diffs it) or `patch` with RFC 6902 operations, exactly one; checked against the component's schema, a refused update keeps the last good data (decision 0092)" },
26
+ { "name": "ui.event", "extension": false, "client": false, "host": true, "does": "notification: a person pressed, submitted or chose in a component it showed: id, action, value (decision 0092)" },
27
+ { "name": "ui.hide", "extension": true, "client": false, "host": false, "does": "remove a surface it placed, by id (decision 0088)" },
28
+ { "name": "session.info", "extension": true, "client": false, "host": false, "does": "what session this is: session, branch, workspace, profile, model, its window, what the last pass used (decision 0074)" },
29
+ { "name": "session.read", "extension": true, "client": false, "host": false, "does": "read this session's current branch, read-only and paged from the last compaction, or a graded case's transcript (decision 0079)" },
30
+ { "name": "session.append", "extension": true, "client": false, "host": false, "does": "add an `ext.message` the model sees from the next pass, written by the kernel under `session.write` (decision 0079)" },
31
+ { "name": "judge.complete", "extension": true, "client": false, "host": false, "does": "one completion from the judge the host bound for a grading in flight" },
32
+ { "name": "model.complete", "extension": true, "client": false, "host": false, "does": "one completion through the host, no tools: the caller's model by default, or the session's, a setting's, a role's or a named one, falling back unless told to fail (decision 0075)" },
33
+ { "name": "model.event", "extension": false, "client": false, "host": true, "does": "notification: one event of a streamed `model.complete`" },
34
+ { "name": "model.list", "extension": true, "client": false, "host": false, "does": "the models this extension may name" },
35
+ { "name": "config.get", "wire": false, "extension": true, "client": false, "host": false, "does": "one of its own settings, `[extensions.<id>].<key>`: what `ext.load` handed it, no round trip (decision 0075)" },
36
+ { "name": "run.send", "extension": true, "client": false, "host": false, "does": "send input to the session's run as a client does: steer, queue or inject, to main or an agent it spawned, shown as its own (decision 0078)" },
37
+ { "name": "run.status", "extension": true, "client": false, "host": false, "does": "the run's state and how much input waits" },
38
+ { "name": "timer.set", "extension": true, "client": false, "host": false, "does": "a timer the host holds, optionally holding the run; answers its id" },
39
+ { "name": "timer.cancel", "extension": true, "client": false, "host": false, "does": "drop one of its timers" },
40
+ { "name": "timer.fired", "extension": false, "client": false, "host": true, "does": "notification: a timer fired, with its tag; starts a parked extension" },
41
+ { "name": "tools.hide", "extension": true, "client": false, "host": false, "does": "hide tools from this session's visible set (decision 0082); answers the set now" },
42
+ { "name": "tools.show", "extension": true, "client": false, "host": false, "does": "lift its own hides; never shows what the visible set excludes" },
43
+ { "name": "broker.list", "extension": true, "client": false, "host": false, "does": "list what is under a directory, as its grant allows" },
44
+ { "name": "broker.read", "extension": true, "client": false, "host": false, "does": "read a bounded slice of a file" },
45
+ { "name": "broker.write", "extension": true, "client": false, "host": false, "does": "write a file" },
46
+ { "name": "broker.spawn", "extension": true, "client": false, "host": false, "does": "run a program" },
47
+ { "name": "broker.fetch", "extension": true, "client": false, "host": false, "does": "make one HTTP request" },
48
+ { "name": "broker.fetchStream", "extension": true, "client": false, "host": false, "does": "make one HTTP request the host signs and stream its body as `net.chunk`, then `net.end`" },
49
+ { "name": "broker.credential", "extension": true, "client": false, "host": false, "does": "read a named credential" },
50
+ { "name": "broker.hasCredential", "extension": true, "client": false, "host": false, "does": "whether a named credential is held, never its value" },
51
+ { "name": "net.chunk", "extension": false, "client": false, "host": true, "does": "notification: the next bytes of a `broker.fetchStream`" },
52
+ { "name": "net.end", "extension": false, "client": false, "host": true, "does": "notification: a `broker.fetchStream` body ended, or broke off" },
53
+ { "name": "ext.register", "extension": true, "client": false, "host": false, "does": "register more after load: tools and offers, living as long as its process (decision 0010 §2)" },
54
+ { "name": "ext.unregister", "extension": true, "client": false, "host": false, "does": "dispose one registration" },
55
+ { "name": "ext.call", "extension": true, "client": false, "host": false, "does": "call another extension's tool through the host, checked as any call by `ext:<id>`" },
56
+ { "name": "workflow.step", "extension": true, "client": false, "host": false, "does": "run one step of a `workflow.run` in flight on the host's kernel" },
57
+ { "name": "provider.event", "extension": true, "client": false, "host": false, "does": "notification: one event of a `provider.stream` in flight" },
58
+ { "name": "ext.load", "extension": false, "client": false, "host": true, "does": "what it contributes: tools, offers, problems; given its config, data folder and whether it is declared" },
59
+ { "name": "ext.shutdown", "extension": false, "client": false, "host": true, "does": "it is going away" },
60
+ { "name": "config.changed", "extension": false, "client": false, "host": true, "does": "notification: its `[extensions.<id>]` configuration changed" },
61
+ { "name": "tool.call", "extension": false, "client": false, "host": true, "does": "run one of its tools, with where it runs (decision 0074); answers an outcome" },
62
+ { "name": "policy.check", "extension": false, "client": false, "host": true, "does": "one of its policy hooks: deny or allow a call; no answer in time is a denial (decision 0067)" },
63
+ { "name": "router.route", "extension": false, "client": false, "host": true, "does": "one of its router hooks: deliver, queue, redirect or reject a message; no answer in time is the default route" },
64
+ { "name": "driver.afterTask", "extension": false, "client": false, "host": true, "does": "one of its drivers after a completed task: the next input, or none and the run ends (decision 0078)" },
65
+ { "name": "interceptor.run", "extension": false, "client": false, "host": true, "does": "one of its interceptors at tool.before, tool.after, context.build, memory.recall or provider.before: continue, rewrite, deny or handled (decision 0081)" },
66
+ { "name": "context.build", "extension": false, "client": false, "host": true, "does": "its context builder, once per pass: edits by entry id, applied after the cache breakpoint and recorded (decision 0080)" },
67
+ { "name": "context.section", "extension": false, "client": false, "host": true, "does": "one of its context sections: text for this pass, under a short deadline" },
68
+ { "name": "memory.save", "extension": false, "client": false, "host": true, "does": "core's `memory.save` tool, answered by the memory extension chosen in config" },
69
+ { "name": "memory.search", "extension": false, "client": false, "host": true, "does": "core's `memory.search` tool" },
70
+ { "name": "memory.forget", "extension": false, "client": false, "host": true, "does": "core's `memory.forget` tool" },
71
+ { "name": "memory.recall", "extension": false, "client": false, "host": true, "does": "optional recall at turn start, recorded as `Recalled` rows" },
72
+ { "name": "compactor.compact", "extension": false, "client": false, "host": true, "does": "one compaction, at overflow or for core's `context.compact` tool" },
73
+ { "name": "tools.select", "extension": false, "client": false, "host": true, "does": "its tool selector, once per turn: which visible tools are declared and which only searchable (decision 0082)" },
74
+ { "name": "mcp.connect", "extension": false, "client": false, "host": true, "does": "its MCP connector connects a server (decision 0084); answers a link" },
75
+ { "name": "mcp.tools", "extension": false, "client": false, "host": true, "does": "the tools a connected server lists" },
76
+ { "name": "mcp.call", "extension": false, "client": false, "host": true, "does": "one call to a server's tool, already policy-checked by core" },
77
+ { "name": "mcp.prompts", "extension": false, "client": false, "host": true, "does": "the prompts a server lists, which become commands" },
78
+ { "name": "mcp.resources", "extension": false, "client": false, "host": true, "does": "the resources a server lists, which become readable" },
79
+ { "name": "mcp.disconnect", "extension": false, "client": false, "host": true, "does": "drop a connection" },
80
+ { "name": "workflow.check", "extension": false, "client": false, "host": true, "does": "typecheck a workflow file with its engine" },
81
+ { "name": "workflow.run", "extension": false, "client": false, "host": true, "does": "run a workflow with its engine" },
82
+ { "name": "grader.grade", "extension": false, "client": false, "host": true, "does": "score one finished case with one of its graders" },
83
+ { "name": "provider.stream", "extension": false, "client": false, "host": true, "does": "one completion from a provider it serves, its events as `provider.event`" },
84
+ { "name": "provider.models", "extension": false, "client": false, "host": true, "does": "the models a provider it serves lists" }
85
+ ]
86
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getorrery/protocol",
3
- "version": "0.2.3",
3
+ "version": "0.3.2",
4
4
  "description": "Generated Orrery wire types. Produced by `cargo xtask typegen`; never hand-edited.",
5
5
  "type": "module",
6
6
  "types": "protocol.d.ts",