@agentproto/runtime 5.8.0 → 5.10.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.
@@ -237,7 +237,8 @@ Context intake profile (for example full or lean).
237
237
  ## auth
238
238
 
239
239
  Deterministic billing-auth mode + EXPLICIT credential for adapters that
240
- declare it (today: claude-code). EXPLICIT credential selection, not
240
+ declare a subscription login and/or an API-key provider (any other adapter
241
+ fails with `unsupported_auth_mode`). EXPLICIT credential selection, not
241
242
  scrub-by-absence: `mode` picks 'subscription' (default) or 'api-key';
242
243
  `token`/`apiKey` (matching the resolved mode) is the secret VALUE, merged
243
244
  against `~/.agentproto/config.json`'s
@@ -265,6 +266,13 @@ child agent a host-chosen scoped toolset (e.g. the daemon's own
265
266
  orchestration gateway so it can spawn + supervise sub-agents). Adapters
266
267
  that don't model MCP mounting ignore it.
267
268
 
269
+ A `mcpServers` entry in the descriptor (or the daemon self-mount) only
270
+ means the mount was *requested*: it does not guarantee the child actually
271
+ loaded any tools. A client can connect yet end up with 0 tools if the
272
+ server's MCP handshake is not one it can use (e.g. a protocol-era mismatch
273
+ on `server/discover` / `tools/list`). Verify from inside the session (list
274
+ its tools) before relying on a mount.
275
+
268
276
  Each entry's `headers` are static HTTP headers sent with every request to
269
277
  an `http`/`sse` server (ignored for `stdio`). `credentialRef` resolves a
270
278
  brokered credential at spawn time into additional headers (typically
@@ -299,6 +307,14 @@ Optional per-session webhook URL. POSTed (fire-and-forget) on this
299
307
  session's turn-end / awaiting-input / exited events, in addition to any
300
308
  global notify URL.
301
309
 
310
+ ## notifySecret
311
+
312
+ Optional Standard Webhooks secret (`whsec_...`) for `notifyUrl`. When set,
313
+ each POST carries `webhook-id` / `webhook-timestamp` / `webhook-signature`
314
+ headers (HMAC-SHA256 over `id.timestamp.body`); the receiver verifies them
315
+ to confirm the daemon sent it. Omit for the unauthenticated (legacy)
316
+ behavior — ignored without `notifyUrl`.
317
+
302
318
  ## wait
303
319
 
304
320
  Block until the spawned session's first turn completes and include the
@@ -379,10 +395,15 @@ anyway' via this field still has no delegation tools).
379
395
  Override deferred/lazy MCP tool loading for this spawn's daemon self-mount:
380
396
  `true` hides every tool outside a small always-on set from `tools/list`
381
397
  (still fully callable — use `tool_search` to look up a hidden tool's schema
382
- by keyword before calling it), `false` keeps the full eager surface. Omit
383
- to use the resolved role's own default ('executor' defaults ON, since it
384
- can't delegate anyway and rarely needs the full ~190-tool surface); omit
385
- AND spawn a role with no opinion to fall through to the daemon's own
398
+ by keyword before calling it), `false` keeps the full eager surface. Only the
399
+ loading strategy changes; no tool is removed.
400
+
401
+ Resolution order (first with an opinion wins): this field > the mount's own
402
+ `?deferred=1|0` (caller-supplied `mcpServers` entries) > a harness that
403
+ defers MCP tools natively (manifest `capabilities.nativeToolSearch`, today
404
+ claude-code ⇒ eager, so the daemon doesn't stack a second deferral layer on
405
+ top of the harness's own `ToolSearch`) > the resolved role's default
406
+ ('executor' defaults ON, 'supervisor' has no opinion) > the daemon's
386
407
  boot-time `defaults.mcp.deferredTools` config.
387
408
 
388
409
  ## browser
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentproto/runtime",
3
- "version": "5.8.0",
3
+ "version": "5.10.0",
4
4
  "description": "@agentproto/runtime — long-running gateway that turns an agentproto workspace into a live runtime. Composes @agentproto/mcp-server (CRUD verbs) with HTTP transport, HEARTBEAT.md autonomy loop, and append-only conversation persistence. Drop a workspace dir, point your MCP client at it, and the agent ticks on its own.",
5
5
  "keywords": [
6
6
  "agentproto",
@@ -58,6 +58,7 @@
58
58
  "default": "./dist/workspace-fs.mjs"
59
59
  },
60
60
  "./package.json": "./package.json",
61
+ "./schemas/checkpoint.v1.json": "./schemas/checkpoint.v1.json",
61
62
  "./pr-provenance": {
62
63
  "types": "./dist/pr-provenance.d.ts",
63
64
  "import": "./dist/pr-provenance.mjs",
@@ -147,6 +148,7 @@
147
148
  "files": [
148
149
  "dist",
149
150
  "docs",
151
+ "schemas",
150
152
  "README.md",
151
153
  "LICENSE"
152
154
  ],
@@ -162,16 +164,16 @@
162
164
  "ws": "^8.21.3",
163
165
  "zod": "^4.6.5",
164
166
  "@agentproto/a2a": "0.1.0",
165
- "@agentproto/acp": "0.9.2",
167
+ "@agentproto/acp": "0.10.0",
166
168
  "@agentproto/adapter-browser": "0.3.0",
167
169
  "@agentproto/agent": "0.2.5",
168
170
  "@agentproto/app-client": "0.4.1",
169
- "@agentproto/app-kit": "1.5.0",
170
- "@agentproto/apps": "0.18.0",
171
+ "@agentproto/app-kit": "1.6.0",
172
+ "@agentproto/apps": "0.19.0",
171
173
  "@agentproto/auth": "1.1.2",
172
174
  "@agentproto/command-sandbox": "0.3.0",
173
175
  "@agentproto/driver": "0.3.0",
174
- "@agentproto/driver-agent-cli": "2.7.0",
176
+ "@agentproto/driver-agent-cli": "2.8.0",
175
177
  "@agentproto/driver-browser": "0.2.0",
176
178
  "@agentproto/driver-http": "0.1.10",
177
179
  "@agentproto/eval-reporters": "0.2.20",
@@ -179,18 +181,18 @@
179
181
  "@agentproto/governance-engine": "0.1.10",
180
182
  "@agentproto/llm-endpoint": "0.11.3",
181
183
  "@agentproto/manifest": "0.2.3",
182
- "@agentproto/mcp-server": "0.5.0",
184
+ "@agentproto/mcp-server": "0.6.1",
183
185
  "@agentproto/model-catalog": "0.11.3",
184
- "@agentproto/pairing-host": "0.2.2",
186
+ "@agentproto/pairing-host": "0.2.4",
185
187
  "@agentproto/plugin-local-browser": "0.3.2",
186
188
  "@agentproto/provider-kit": "0.4.6",
187
189
  "@agentproto/provider-presets": "0.7.0",
188
190
  "@agentproto/providers-store": "0.3.21",
189
191
  "@agentproto/redaction": "0.2.3",
190
- "@agentproto/review": "0.4.0",
192
+ "@agentproto/review": "0.5.0",
191
193
  "@agentproto/routine": "0.3.1",
192
- "@agentproto/sandbox": "0.8.1",
193
- "@agentproto/secrets": "1.2.1",
194
+ "@agentproto/sandbox": "0.8.2",
195
+ "@agentproto/secrets": "1.3.0",
194
196
  "@agentproto/telemetry-langfuse": "0.2.18",
195
197
  "@agentproto/tool": "0.4.0",
196
198
  "@agentproto/workflow": "0.7.1",
@@ -199,11 +201,12 @@
199
201
  "@agentproto/workspace-brain": "0.4.10"
200
202
  },
201
203
  "optionalDependencies": {
202
- "@agentproto/sandbox-e2b": "0.5.13"
204
+ "@agentproto/sandbox-e2b": "0.5.14"
203
205
  },
204
206
  "devDependencies": {
205
207
  "@types/node": "^25.9.5",
206
208
  "@types/ws": "^8.18.1",
209
+ "ajv": "^8.20.0",
207
210
  "tsup": "^8.5.1",
208
211
  "typescript": "^5.9.3",
209
212
  "vite-node": "^3.2.4",
@@ -219,6 +222,7 @@
219
222
  "check-types": "tsc --noEmit",
220
223
  "test": "vitest run --passWithNoTests",
221
224
  "test:watch": "vitest",
225
+ "gen:checkpoint-schema": "vite-node scripts/gen-checkpoint-schema.mjs",
222
226
  "sim:inbound": "vite-node scripts/simulate-inbound.mjs",
223
227
  "telegram:proxy": "vite-node scripts/telegram-proxy.mjs",
224
228
  "bench:review-ledger": "vite-node scripts/bench-review-ledger.mjs"
@@ -0,0 +1,204 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "schemaVersion": {
6
+ "type": "number",
7
+ "const": 1
8
+ },
9
+ "checkpointId": {
10
+ "type": "string"
11
+ },
12
+ "sourceSessionId": {
13
+ "type": "string"
14
+ },
15
+ "createdAt": {
16
+ "type": "string",
17
+ "description": "ISO 8601 creation timestamp."
18
+ },
19
+ "contextPct": {
20
+ "type": "number",
21
+ "description": "Context percentage that triggered the checkpoint."
22
+ },
23
+ "policy": {
24
+ "type": "object",
25
+ "properties": {
26
+ "mode": {
27
+ "type": "string",
28
+ "enum": [
29
+ "manual",
30
+ "ask",
31
+ "auto"
32
+ ]
33
+ },
34
+ "warnAtPct": {
35
+ "type": "number",
36
+ "minimum": 0,
37
+ "maximum": 100
38
+ },
39
+ "compactAtPct": {
40
+ "type": "number",
41
+ "minimum": 0,
42
+ "maximum": 100
43
+ },
44
+ "continueFreshAtPct": {
45
+ "type": "number",
46
+ "minimum": 0,
47
+ "maximum": 100
48
+ },
49
+ "hardStopAtPct": {
50
+ "type": "number",
51
+ "minimum": 0,
52
+ "maximum": 100
53
+ },
54
+ "goal": {
55
+ "type": "boolean"
56
+ },
57
+ "plan": {
58
+ "type": "boolean"
59
+ },
60
+ "decisions": {
61
+ "type": "boolean"
62
+ },
63
+ "changedFiles": {
64
+ "type": "boolean"
65
+ },
66
+ "gitStatus": {
67
+ "type": "boolean"
68
+ },
69
+ "tests": {
70
+ "type": "boolean"
71
+ },
72
+ "errors": {
73
+ "type": "boolean"
74
+ },
75
+ "risks": {
76
+ "type": "boolean"
77
+ },
78
+ "nextStep": {
79
+ "type": "boolean"
80
+ },
81
+ "config": {
82
+ "type": "boolean"
83
+ },
84
+ "label": {
85
+ "type": "string"
86
+ }
87
+ },
88
+ "required": [
89
+ "mode",
90
+ "warnAtPct",
91
+ "compactAtPct",
92
+ "continueFreshAtPct",
93
+ "hardStopAtPct",
94
+ "goal",
95
+ "plan",
96
+ "decisions",
97
+ "changedFiles",
98
+ "gitStatus",
99
+ "tests",
100
+ "errors",
101
+ "risks",
102
+ "nextStep",
103
+ "config",
104
+ "label"
105
+ ],
106
+ "additionalProperties": {}
107
+ },
108
+ "sections": {
109
+ "type": "object",
110
+ "properties": {
111
+ "goal": {
112
+ "type": "string"
113
+ },
114
+ "plan": {
115
+ "type": "string"
116
+ },
117
+ "decisions": {
118
+ "type": "string"
119
+ },
120
+ "changedFiles": {
121
+ "type": "string"
122
+ },
123
+ "gitStatus": {
124
+ "type": "string"
125
+ },
126
+ "tests": {
127
+ "type": "string"
128
+ },
129
+ "errors": {
130
+ "type": "string"
131
+ },
132
+ "risks": {
133
+ "type": "string"
134
+ },
135
+ "nextStep": {
136
+ "type": "string"
137
+ },
138
+ "config": {
139
+ "type": "string"
140
+ },
141
+ "notes": {
142
+ "description": "Free-text notes the operator attached to the handoff.",
143
+ "type": "string"
144
+ }
145
+ },
146
+ "additionalProperties": {},
147
+ "description": "Sections requested and present. A section with nothing real to say is omitted, never a placeholder."
148
+ },
149
+ "handoffTurn": {
150
+ "type": "object",
151
+ "properties": {
152
+ "status": {
153
+ "type": "string",
154
+ "enum": [
155
+ "answered",
156
+ "skipped",
157
+ "failed"
158
+ ],
159
+ "description": "answered: the source session replied with a valid summary; skipped: not requested or no live idle session; failed: asked but timed out / unusable reply."
160
+ },
161
+ "reason": {
162
+ "type": "string"
163
+ }
164
+ },
165
+ "required": [
166
+ "status"
167
+ ],
168
+ "additionalProperties": {}
169
+ },
170
+ "recentDigest": {
171
+ "type": "string"
172
+ },
173
+ "originalTranscriptPath": {
174
+ "type": "string"
175
+ },
176
+ "checkpointPath": {
177
+ "type": "string"
178
+ },
179
+ "nextAction": {
180
+ "type": "string",
181
+ "enum": [
182
+ "continue",
183
+ "compact_then_continue",
184
+ "ask"
185
+ ]
186
+ }
187
+ },
188
+ "required": [
189
+ "schemaVersion",
190
+ "checkpointId",
191
+ "sourceSessionId",
192
+ "createdAt",
193
+ "contextPct",
194
+ "policy",
195
+ "sections",
196
+ "recentDigest",
197
+ "originalTranscriptPath",
198
+ "checkpointPath",
199
+ "nextAction"
200
+ ],
201
+ "additionalProperties": {},
202
+ "title": "AgentProto context checkpoint",
203
+ "description": "Structured handoff document persisted next to a session's events.jsonl and used to seed a fresh continuation session."
204
+ }