@openscout/protocol 0.2.63 → 0.2.82

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 (216) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +103 -52
  3. package/dist/a2a.d.ts +224 -0
  4. package/dist/a2a.d.ts.map +1 -0
  5. package/dist/a2a.js +225 -0
  6. package/dist/activity.d.ts +70 -0
  7. package/dist/activity.d.ts.map +1 -0
  8. package/dist/activity.js +1 -0
  9. package/dist/actors.d.ts +7 -3
  10. package/dist/actors.d.ts.map +1 -0
  11. package/dist/actors.js +15 -1
  12. package/dist/agent-broker-feed.d.ts +84 -0
  13. package/dist/agent-broker-feed.d.ts.map +1 -0
  14. package/dist/agent-broker-feed.js +1 -0
  15. package/dist/agent-identity.d.ts +23 -0
  16. package/dist/agent-identity.d.ts.map +1 -0
  17. package/dist/agent-identity.js +122 -8
  18. package/dist/agent-runs.d.ts +191 -0
  19. package/dist/agent-runs.d.ts.map +1 -0
  20. package/dist/agent-runs.js +365 -0
  21. package/dist/assigned-roles.d.ts +205 -0
  22. package/dist/assigned-roles.d.ts.map +1 -0
  23. package/dist/assigned-roles.js +228 -0
  24. package/dist/broker-routes.d.ts +40 -0
  25. package/dist/broker-routes.d.ts.map +1 -0
  26. package/dist/broker-routes.js +56 -0
  27. package/dist/budget.d.ts +65 -0
  28. package/dist/budget.d.ts.map +1 -0
  29. package/dist/budget.js +19 -0
  30. package/dist/capability-matrix.d.ts +230 -0
  31. package/dist/capability-matrix.d.ts.map +1 -0
  32. package/dist/capability-matrix.js +304 -0
  33. package/dist/channel-identity.d.ts +40 -0
  34. package/dist/channel-identity.d.ts.map +1 -0
  35. package/dist/channel-identity.js +108 -0
  36. package/dist/collaboration.d.ts +45 -16
  37. package/dist/collaboration.d.ts.map +1 -0
  38. package/dist/collaboration.js +39 -23
  39. package/dist/common.d.ts +4 -3
  40. package/dist/common.d.ts.map +1 -0
  41. package/dist/conversations.d.ts +1 -0
  42. package/dist/conversations.d.ts.map +1 -0
  43. package/dist/cursor-transport.d.ts +22 -0
  44. package/dist/cursor-transport.d.ts.map +1 -0
  45. package/dist/cursor-transport.js +10 -0
  46. package/dist/debug-attach.d.ts +29 -0
  47. package/dist/debug-attach.d.ts.map +1 -0
  48. package/dist/debug-attach.js +6 -0
  49. package/dist/deliveries.d.ts +16 -2
  50. package/dist/deliveries.d.ts.map +1 -0
  51. package/dist/durable-actions.d.ts +94 -0
  52. package/dist/durable-actions.d.ts.map +1 -0
  53. package/dist/durable-actions.js +1 -0
  54. package/dist/events.d.ts +27 -1
  55. package/dist/events.d.ts.map +1 -0
  56. package/dist/events.js +14 -1
  57. package/dist/harness-feature-support.d.ts +76 -0
  58. package/dist/harness-feature-support.d.ts.map +1 -0
  59. package/dist/harness-feature-support.js +29 -0
  60. package/dist/host-integrations.d.ts +22 -0
  61. package/dist/host-integrations.d.ts.map +1 -0
  62. package/dist/host-integrations.js +64 -0
  63. package/dist/inbox.d.ts +50 -0
  64. package/dist/inbox.d.ts.map +1 -0
  65. package/dist/inbox.js +9 -0
  66. package/dist/index.d.ts +36 -2
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +35 -2
  69. package/dist/invocations.d.ts +121 -0
  70. package/dist/invocations.d.ts.map +1 -0
  71. package/dist/invocations.js +201 -1
  72. package/dist/mesh.d.ts +98 -0
  73. package/dist/mesh.d.ts.map +1 -0
  74. package/dist/mesh.js +18 -1
  75. package/dist/messages.d.ts +3 -0
  76. package/dist/messages.d.ts.map +1 -0
  77. package/dist/native-interactions.d.ts +30 -0
  78. package/dist/native-interactions.d.ts.map +1 -0
  79. package/dist/native-interactions.js +51 -0
  80. package/dist/observed-status.d.ts +33 -0
  81. package/dist/observed-status.d.ts.map +1 -0
  82. package/dist/observed-status.js +6 -0
  83. package/dist/orchestrator-prompt.d.ts +10 -0
  84. package/dist/orchestrator-prompt.d.ts.map +1 -0
  85. package/dist/orchestrator-prompt.js +36 -0
  86. package/dist/permission-policy.d.ts +5 -0
  87. package/dist/permission-policy.d.ts.map +1 -0
  88. package/dist/permission-policy.js +15 -0
  89. package/dist/provisional-agent-names.d.ts +30 -0
  90. package/dist/provisional-agent-names.d.ts.map +1 -0
  91. package/dist/provisional-agent-names.js +224 -0
  92. package/dist/read-receipts.d.ts +12 -0
  93. package/dist/read-receipts.d.ts.map +1 -0
  94. package/dist/read-receipts.js +1 -0
  95. package/dist/relay-agent-card.d.ts +10 -0
  96. package/dist/relay-agent-card.d.ts.map +1 -0
  97. package/dist/rendezvous.d.ts +97 -0
  98. package/dist/rendezvous.d.ts.map +1 -0
  99. package/dist/rendezvous.js +35 -0
  100. package/dist/reserved-vocabulary.d.ts +21 -0
  101. package/dist/reserved-vocabulary.d.ts.map +1 -0
  102. package/dist/reserved-vocabulary.js +101 -0
  103. package/dist/route-aliases.d.ts +112 -0
  104. package/dist/route-aliases.d.ts.map +1 -0
  105. package/dist/route-aliases.js +1 -0
  106. package/dist/runtime-catalog-contract.d.ts +39 -0
  107. package/dist/runtime-catalog-contract.d.ts.map +1 -0
  108. package/dist/runtime-catalog-contract.js +17 -0
  109. package/dist/runtime-catalog.d.ts +11 -0
  110. package/dist/runtime-catalog.d.ts.map +1 -0
  111. package/dist/runtime-catalog.generated.d.ts +230 -0
  112. package/dist/runtime-catalog.generated.d.ts.map +1 -0
  113. package/dist/runtime-catalog.generated.js +299 -0
  114. package/dist/runtime-catalog.js +192 -0
  115. package/dist/runtime-execution.d.ts +161 -0
  116. package/dist/runtime-execution.d.ts.map +1 -0
  117. package/dist/runtime-execution.js +327 -0
  118. package/dist/runtime-profiles.d.ts +12 -0
  119. package/dist/runtime-profiles.d.ts.map +1 -0
  120. package/dist/runtime-profiles.js +20 -0
  121. package/dist/scout-agent-card.d.ts +10 -0
  122. package/dist/scout-agent-card.d.ts.map +1 -0
  123. package/dist/scout-composer.d.ts +27 -0
  124. package/dist/scout-composer.d.ts.map +1 -0
  125. package/dist/scout-composer.js +192 -0
  126. package/dist/scout-delivery.d.ts +101 -4
  127. package/dist/scout-delivery.d.ts.map +1 -0
  128. package/dist/scout-dispatch.d.ts +44 -3
  129. package/dist/scout-dispatch.d.ts.map +1 -0
  130. package/dist/scout-reply-context.d.ts +14 -0
  131. package/dist/scout-reply-context.d.ts.map +1 -0
  132. package/dist/scout-reply-context.js +1 -0
  133. package/dist/session-display-state.d.ts +132 -0
  134. package/dist/session-display-state.d.ts.map +1 -0
  135. package/dist/session-display-state.js +94 -0
  136. package/dist/terminal-host-topology.d.ts +119 -0
  137. package/dist/terminal-host-topology.d.ts.map +1 -0
  138. package/dist/terminal-host-topology.js +21 -0
  139. package/dist/terminal-sessions.d.ts +142 -0
  140. package/dist/terminal-sessions.d.ts.map +1 -0
  141. package/dist/terminal-sessions.js +81 -0
  142. package/dist/terminal-surface-id.d.ts +73 -0
  143. package/dist/terminal-surface-id.d.ts.map +1 -0
  144. package/dist/terminal-surface-id.js +162 -0
  145. package/dist/terminal-workspaces.d.ts +199 -0
  146. package/dist/terminal-workspaces.d.ts.map +1 -0
  147. package/dist/terminal-workspaces.js +287 -0
  148. package/dist/thread-events.d.ts +1 -0
  149. package/dist/thread-events.d.ts.map +1 -0
  150. package/dist/time.d.ts +16 -0
  151. package/dist/time.d.ts.map +1 -0
  152. package/dist/time.js +33 -0
  153. package/dist/transports.d.ts +1 -0
  154. package/dist/transports.d.ts.map +1 -0
  155. package/package.json +37 -9
  156. package/src/a2a.ts +471 -0
  157. package/src/activity.ts +113 -0
  158. package/src/actors.ts +42 -8
  159. package/src/agent-broker-feed.ts +102 -0
  160. package/src/agent-identity.ts +143 -8
  161. package/src/agent-runs.ts +675 -0
  162. package/src/assigned-roles.ts +437 -0
  163. package/src/broker-routes.ts +62 -0
  164. package/src/budget.ts +88 -0
  165. package/src/capability-matrix.ts +648 -0
  166. package/src/channel-identity.ts +147 -0
  167. package/src/collaboration.ts +78 -48
  168. package/src/common.ts +24 -5
  169. package/src/cursor-transport.ts +34 -0
  170. package/src/debug-attach.ts +38 -0
  171. package/src/deliveries.ts +16 -1
  172. package/src/durable-actions.ts +125 -0
  173. package/src/events.ts +31 -0
  174. package/src/harness-feature-support.ts +116 -0
  175. package/src/host-integrations.ts +104 -0
  176. package/src/inbox.ts +68 -0
  177. package/src/index.ts +35 -2
  178. package/src/invocations.ts +353 -0
  179. package/src/mesh.ts +130 -0
  180. package/src/messages.ts +2 -0
  181. package/src/native-interactions.ts +100 -0
  182. package/src/observed-status.ts +90 -0
  183. package/src/orchestrator-prompt.ts +47 -0
  184. package/src/permission-policy.ts +21 -0
  185. package/src/provisional-agent-names.ts +272 -0
  186. package/src/read-receipts.ts +12 -0
  187. package/src/relay-agent-card.ts +73 -63
  188. package/src/rendezvous.ts +154 -0
  189. package/src/reserved-vocabulary.ts +135 -0
  190. package/src/route-aliases.ts +130 -0
  191. package/src/runtime-catalog-contract.ts +60 -0
  192. package/src/runtime-catalog.generated.ts +300 -0
  193. package/src/runtime-catalog.md +21 -0
  194. package/src/runtime-catalog.ts +193 -0
  195. package/src/runtime-catalog.v1.json +81 -0
  196. package/src/runtime-execution.ts +545 -0
  197. package/src/runtime-profiles.ts +37 -0
  198. package/src/scout-agent-card.ts +10 -0
  199. package/src/scout-composer.ts +249 -0
  200. package/src/scout-delivery.ts +117 -4
  201. package/src/scout-dispatch.ts +34 -2
  202. package/src/scout-reply-context.ts +15 -0
  203. package/src/session-display-state.ts +202 -0
  204. package/src/terminal-host-topology.ts +132 -0
  205. package/src/terminal-sessions.ts +187 -0
  206. package/src/terminal-surface-id.ts +189 -0
  207. package/src/terminal-workspaces.ts +455 -0
  208. package/src/time.ts +49 -0
  209. package/dist/agent-address.d.ts +0 -1
  210. package/dist/agent-address.js +0 -1
  211. package/dist/agent-selectors.d.ts +0 -1
  212. package/dist/agent-selectors.js +0 -1
  213. package/src/agent-address.ts +0 -1
  214. package/src/agent-identity.test.ts +0 -435
  215. package/src/agent-selectors.ts +0 -1
  216. package/src/scout-agent-card.test.ts +0 -54
@@ -0,0 +1,299 @@
1
+ // Generated automatically from runtime-catalog.v1.json. Do not edit.
2
+ export const SCOUT_RUNTIME_CATALOG_DATA = {
3
+ "schemaVersion": "openscout.runtime-catalog.v1",
4
+ "revision": "2026-08-18.1",
5
+ "harnesses": [
6
+ {
7
+ "id": "claude",
8
+ "label": "Claude Code",
9
+ "enabled": true,
10
+ "default": true,
11
+ "reasoningEfforts": [
12
+ "low",
13
+ "medium",
14
+ "high",
15
+ "xhigh",
16
+ "max"
17
+ ],
18
+ "defaultReasoningEffort": "medium",
19
+ "models": [
20
+ {
21
+ "id": "claude-opus-5",
22
+ "label": "Opus 5",
23
+ "enabled": true,
24
+ "default": true,
25
+ "family": "Opus",
26
+ "version": "5"
27
+ },
28
+ {
29
+ "id": "claude-sonnet-4-6",
30
+ "label": "Sonnet 4.6",
31
+ "enabled": true,
32
+ "family": "Sonnet",
33
+ "version": "4.6"
34
+ },
35
+ {
36
+ "id": "claude-haiku-4-5",
37
+ "label": "Haiku 4.5",
38
+ "enabled": true,
39
+ "family": "Haiku",
40
+ "version": "4.5"
41
+ },
42
+ {
43
+ "id": "claude-opus-4-8",
44
+ "label": "Opus 4.8",
45
+ "enabled": true,
46
+ "family": "Opus",
47
+ "version": "4.8"
48
+ },
49
+ {
50
+ "id": "claude-opus-4-7",
51
+ "label": "Opus 4.7",
52
+ "enabled": true,
53
+ "family": "Opus",
54
+ "version": "4.7"
55
+ },
56
+ {
57
+ "id": "claude-sonnet-4-5",
58
+ "label": "Sonnet 4.5",
59
+ "enabled": true,
60
+ "family": "Sonnet",
61
+ "version": "4.5"
62
+ }
63
+ ]
64
+ },
65
+ {
66
+ "id": "codex",
67
+ "label": "Codex",
68
+ "enabled": true,
69
+ "reasoningEfforts": [
70
+ "low",
71
+ "medium",
72
+ "high",
73
+ "xhigh"
74
+ ],
75
+ "defaultReasoningEffort": "medium",
76
+ "models": [
77
+ {
78
+ "id": "gpt-5.6-sol",
79
+ "label": "5.6 Sol",
80
+ "enabled": true,
81
+ "default": true,
82
+ "family": "GPT",
83
+ "version": "5.6 Sol",
84
+ "reasoningEfforts": [
85
+ "low",
86
+ "medium",
87
+ "high",
88
+ "xhigh",
89
+ "ultra"
90
+ ]
91
+ },
92
+ {
93
+ "id": "gpt-5.6-terra",
94
+ "label": "5.6 Terra",
95
+ "enabled": true,
96
+ "family": "GPT",
97
+ "version": "5.6 Terra",
98
+ "reasoningEfforts": [
99
+ "low",
100
+ "medium",
101
+ "high",
102
+ "xhigh",
103
+ "ultra"
104
+ ]
105
+ },
106
+ {
107
+ "id": "gpt-5.6-luna",
108
+ "label": "5.6 Luna",
109
+ "enabled": true,
110
+ "family": "GPT",
111
+ "version": "5.6 Luna"
112
+ },
113
+ {
114
+ "id": "gpt-5.5",
115
+ "label": "5.5",
116
+ "enabled": true,
117
+ "family": "GPT",
118
+ "version": "5.5"
119
+ },
120
+ {
121
+ "id": "gpt-5.5-mini",
122
+ "label": "5.5 mini",
123
+ "enabled": true,
124
+ "family": "GPT",
125
+ "version": "5.5 mini"
126
+ }
127
+ ]
128
+ },
129
+ {
130
+ "id": "grok",
131
+ "label": "Grok CLI",
132
+ "enabled": true,
133
+ "listed": false,
134
+ "reasoningEfforts": [
135
+ "low",
136
+ "medium",
137
+ "high",
138
+ "xhigh"
139
+ ],
140
+ "defaultReasoningEffort": "medium",
141
+ "models": [
142
+ {
143
+ "id": "grok-4.6",
144
+ "label": "Grok 4.6",
145
+ "enabled": true,
146
+ "default": true,
147
+ "family": "Grok",
148
+ "version": "4.6",
149
+ "contextWindowTokens": 500000
150
+ },
151
+ {
152
+ "id": "grok-4.5",
153
+ "label": "Grok 4.5",
154
+ "enabled": true,
155
+ "family": "Grok",
156
+ "version": "4.5"
157
+ },
158
+ {
159
+ "id": "grok-4.3",
160
+ "label": "Grok 4.3",
161
+ "enabled": true,
162
+ "family": "Grok",
163
+ "version": "4.3"
164
+ }
165
+ ]
166
+ },
167
+ {
168
+ "id": "grok-acp",
169
+ "label": "Grok",
170
+ "enabled": true,
171
+ "reasoningEfforts": null,
172
+ "models": [
173
+ {
174
+ "id": "grok-4.6",
175
+ "label": "Grok 4.6",
176
+ "enabled": true,
177
+ "default": true,
178
+ "family": "Grok",
179
+ "version": "4.6",
180
+ "contextWindowTokens": 500000
181
+ },
182
+ {
183
+ "id": "grok-4.5",
184
+ "label": "Grok 4.5",
185
+ "enabled": true,
186
+ "family": "Grok",
187
+ "version": "4.5"
188
+ },
189
+ {
190
+ "id": "grok-4.3",
191
+ "label": "Grok 4.3",
192
+ "enabled": true,
193
+ "family": "Grok",
194
+ "version": "4.3"
195
+ }
196
+ ]
197
+ },
198
+ {
199
+ "id": "kimi",
200
+ "label": "Kimi Code",
201
+ "enabled": true,
202
+ "reasoningEfforts": null,
203
+ "models": []
204
+ },
205
+ {
206
+ "id": "flue",
207
+ "label": "Flue",
208
+ "enabled": true,
209
+ "reasoningEfforts": null,
210
+ "models": []
211
+ },
212
+ {
213
+ "id": "cursor",
214
+ "label": "Cursor CLI",
215
+ "enabled": true,
216
+ "reasoningEfforts": null,
217
+ "models": []
218
+ },
219
+ {
220
+ "id": "opencode",
221
+ "label": "OpenCode",
222
+ "enabled": true,
223
+ "reasoningEfforts": null,
224
+ "models": [
225
+ {
226
+ "id": "opencode-go/glm-5.2",
227
+ "label": "GLM-5.2",
228
+ "enabled": true,
229
+ "default": true,
230
+ "family": "GLM",
231
+ "version": "5.2"
232
+ },
233
+ {
234
+ "id": "opencode-go/glm-5.1",
235
+ "label": "GLM-5.1",
236
+ "enabled": true,
237
+ "family": "GLM",
238
+ "version": "5.1"
239
+ },
240
+ {
241
+ "id": "opencode-go/kimi-k3",
242
+ "label": "Kimi K3",
243
+ "enabled": true,
244
+ "family": "Kimi",
245
+ "version": "K3"
246
+ },
247
+ {
248
+ "id": "opencode-go/qwen3.8-max",
249
+ "label": "Qwen3.8 Max",
250
+ "enabled": true,
251
+ "family": "Qwen",
252
+ "version": "3.8 Max"
253
+ },
254
+ {
255
+ "id": "opencode-go/minimax-m3",
256
+ "label": "MiniMax M3",
257
+ "enabled": true,
258
+ "family": "MiniMax",
259
+ "version": "M3"
260
+ },
261
+ {
262
+ "id": "opencode-go/deepseek-v4-pro",
263
+ "label": "DeepSeek V4 Pro",
264
+ "enabled": true,
265
+ "family": "DeepSeek",
266
+ "version": "V4 Pro"
267
+ },
268
+ {
269
+ "id": "opencode-go/grok-4.5",
270
+ "label": "Grok 4.5",
271
+ "enabled": true,
272
+ "family": "Grok",
273
+ "version": "4.5"
274
+ },
275
+ {
276
+ "id": "opencode/nemotron-3-ultra-free",
277
+ "label": "Nemotron 3 Ultra (free)",
278
+ "enabled": true,
279
+ "family": "Nemotron",
280
+ "version": "3 Ultra Free"
281
+ },
282
+ {
283
+ "id": "opencode/laguna-s-2.1-free",
284
+ "label": "Laguna S 2.1 (free)",
285
+ "enabled": true,
286
+ "family": "Laguna",
287
+ "version": "S 2.1 Free"
288
+ }
289
+ ]
290
+ },
291
+ {
292
+ "id": "pi",
293
+ "label": "Pi",
294
+ "enabled": true,
295
+ "reasoningEfforts": null,
296
+ "models": []
297
+ }
298
+ ]
299
+ };
@@ -0,0 +1,192 @@
1
+ import { SCOUT_LAUNCHABLE_HARNESSES, SCOUT_REASONING_EFFORTS, } from "./runtime-catalog-contract.js";
2
+ const launchableHarnesses = new Set(SCOUT_LAUNCHABLE_HARNESSES);
3
+ const reasoningEfforts = new Set(SCOUT_REASONING_EFFORTS);
4
+ export const MAX_RUNTIME_MODELS_PER_HARNESS = 256;
5
+ function record(value) {
6
+ return value && typeof value === "object" && !Array.isArray(value)
7
+ ? value
8
+ : null;
9
+ }
10
+ function text(value) {
11
+ return typeof value === "string" && value.trim() === value && value.length > 0
12
+ ? value
13
+ : null;
14
+ }
15
+ function effortList(value, path, errors) {
16
+ if (value === null)
17
+ return null;
18
+ if (!Array.isArray(value)) {
19
+ errors.push(`${path} must be an array or null`);
20
+ return undefined;
21
+ }
22
+ const result = [];
23
+ const seen = new Set();
24
+ for (const candidate of value) {
25
+ if (typeof candidate !== "string" || !reasoningEfforts.has(candidate)) {
26
+ errors.push(`${path} contains unknown effort ${String(candidate)}`);
27
+ continue;
28
+ }
29
+ if (seen.add(candidate))
30
+ result.push(candidate);
31
+ else
32
+ errors.push(`${path} contains duplicate effort ${candidate}`);
33
+ }
34
+ return result;
35
+ }
36
+ function model(value, path, errors) {
37
+ const input = record(value);
38
+ if (!input) {
39
+ errors.push(`${path} must be an object`);
40
+ return null;
41
+ }
42
+ const id = text(input.id);
43
+ const label = text(input.label);
44
+ if (!id || !/^[A-Za-z0-9][A-Za-z0-9._/-]*$/u.test(id)) {
45
+ errors.push(`${path}.id must use provider-safe letters, numbers, dot, slash, underscore, or hyphen`);
46
+ }
47
+ if (!label)
48
+ errors.push(`${path}.label is required`);
49
+ if (typeof input.enabled !== "boolean")
50
+ errors.push(`${path}.enabled must be boolean`);
51
+ if (input.default === true && input.enabled !== true)
52
+ errors.push(`${path} cannot be default while disabled`);
53
+ if (!id || !label || typeof input.enabled !== "boolean")
54
+ return null;
55
+ const efforts = input.reasoningEfforts === undefined
56
+ ? undefined
57
+ : effortList(input.reasoningEfforts, `${path}.reasoningEfforts`, errors);
58
+ const defaultEffort = input.defaultReasoningEffort == null ? null : text(input.defaultReasoningEffort);
59
+ const contextWindowTokens = input.contextWindowTokens;
60
+ if (contextWindowTokens !== undefined && (!Number.isInteger(contextWindowTokens) || Number(contextWindowTokens) <= 0)) {
61
+ errors.push(`${path}.contextWindowTokens must be a positive integer`);
62
+ }
63
+ if (input.defaultReasoningEffort != null && (!defaultEffort || !reasoningEfforts.has(defaultEffort))) {
64
+ errors.push(`${path}.defaultReasoningEffort is unknown`);
65
+ }
66
+ return {
67
+ id,
68
+ label,
69
+ enabled: input.enabled,
70
+ ...(input.default === true ? { default: true } : {}),
71
+ ...(text(input.description) ? { description: text(input.description) } : {}),
72
+ ...(text(input.family) ? { family: text(input.family) } : {}),
73
+ ...(text(input.version) ? { version: text(input.version) } : {}),
74
+ ...(Number.isInteger(contextWindowTokens) && Number(contextWindowTokens) > 0
75
+ ? { contextWindowTokens: Number(contextWindowTokens) }
76
+ : {}),
77
+ ...(input.reasoningEfforts !== undefined ? { reasoningEfforts: efforts ?? null } : {}),
78
+ ...(defaultEffort && reasoningEfforts.has(defaultEffort)
79
+ ? { defaultReasoningEffort: defaultEffort }
80
+ : {}),
81
+ };
82
+ }
83
+ function harness(value, path, errors) {
84
+ const input = record(value);
85
+ if (!input) {
86
+ errors.push(`${path} must be an object`);
87
+ return null;
88
+ }
89
+ const id = text(input.id);
90
+ const label = text(input.label);
91
+ if (!id || !launchableHarnesses.has(id))
92
+ errors.push(`${path}.id is not a launchable harness`);
93
+ if (!label)
94
+ errors.push(`${path}.label is required`);
95
+ if (typeof input.enabled !== "boolean")
96
+ errors.push(`${path}.enabled must be boolean`);
97
+ if (input.listed !== undefined && typeof input.listed !== "boolean") {
98
+ errors.push(`${path}.listed must be boolean when provided`);
99
+ }
100
+ if (input.default === true && input.enabled !== true)
101
+ errors.push(`${path} cannot be default while disabled`);
102
+ const efforts = effortList(input.reasoningEfforts, `${path}.reasoningEfforts`, errors);
103
+ if (!id || !launchableHarnesses.has(id) || !label || typeof input.enabled !== "boolean" || efforts === undefined) {
104
+ return null;
105
+ }
106
+ if (!Array.isArray(input.models)) {
107
+ errors.push(`${path}.models must be an array`);
108
+ return null;
109
+ }
110
+ if (input.models.length > MAX_RUNTIME_MODELS_PER_HARNESS) {
111
+ errors.push(`${path}.models exceeds the ${MAX_RUNTIME_MODELS_PER_HARNESS}-model limit`);
112
+ return null;
113
+ }
114
+ const models = input.models
115
+ .map((entry, index) => model(entry, `${path}.models[${index}]`, errors))
116
+ .filter((entry) => Boolean(entry));
117
+ const ids = new Set();
118
+ for (const entry of models) {
119
+ if (!ids.add(entry.id))
120
+ errors.push(`${path} contains duplicate model ${entry.id}`);
121
+ const effective = entry.reasoningEfforts === undefined ? efforts : entry.reasoningEfforts;
122
+ if (entry.defaultReasoningEffort && !effective?.includes(entry.defaultReasoningEffort)) {
123
+ errors.push(`${path} model ${entry.id} has an unsupported default effort`);
124
+ }
125
+ }
126
+ if (models.filter((entry) => entry.default).length > 1)
127
+ errors.push(`${path} has more than one default model`);
128
+ for (const entry of models) {
129
+ if (entry.default && !entry.enabled)
130
+ errors.push(`${path} model ${entry.id} cannot be default while disabled`);
131
+ }
132
+ const defaultEffort = input.defaultReasoningEffort == null ? null : text(input.defaultReasoningEffort);
133
+ if (defaultEffort && !efforts?.includes(defaultEffort)) {
134
+ errors.push(`${path}.defaultReasoningEffort is not supported`);
135
+ }
136
+ return {
137
+ id: id,
138
+ label,
139
+ enabled: input.enabled,
140
+ ...(typeof input.listed === "boolean" ? { listed: input.listed } : {}),
141
+ ...(input.default === true ? { default: true } : {}),
142
+ reasoningEfforts: efforts,
143
+ ...(defaultEffort && reasoningEfforts.has(defaultEffort)
144
+ ? { defaultReasoningEffort: defaultEffort }
145
+ : {}),
146
+ models,
147
+ };
148
+ }
149
+ export function parseScoutRuntimeCatalog(value) {
150
+ const input = record(value);
151
+ if (!input)
152
+ return { ok: false, errors: ["catalog must be a JSON object"] };
153
+ const errors = [];
154
+ if (input.schemaVersion !== "openscout.runtime-catalog.v1")
155
+ errors.push("unexpected schemaVersion");
156
+ const revision = text(input.revision);
157
+ if (!revision || !/^\d{4}-\d{2}-\d{2}\.\d+$/u.test(revision)) {
158
+ errors.push("revision must use YYYY-MM-DD.N format");
159
+ }
160
+ if (!Array.isArray(input.harnesses) || input.harnesses.length === 0) {
161
+ errors.push("harnesses must be a non-empty array");
162
+ return { ok: false, errors };
163
+ }
164
+ const harnesses = input.harnesses
165
+ .map((entry, index) => harness(entry, `harnesses[${index}]`, errors))
166
+ .filter((entry) => Boolean(entry));
167
+ const ids = new Set();
168
+ const sharedModels = new Map();
169
+ for (const entry of harnesses) {
170
+ if (!ids.add(entry.id))
171
+ errors.push(`duplicate harness ${entry.id}`);
172
+ for (const model of entry.models) {
173
+ const signature = JSON.stringify([
174
+ model.label,
175
+ model.description ?? null,
176
+ model.family ?? null,
177
+ model.version ?? null,
178
+ model.contextWindowTokens ?? null,
179
+ ]);
180
+ const prior = sharedModels.get(model.id);
181
+ if (prior && prior !== signature)
182
+ errors.push(`shared model ${model.id} has inconsistent metadata`);
183
+ sharedModels.set(model.id, signature);
184
+ }
185
+ }
186
+ if (harnesses.filter((entry) => entry.enabled && entry.default).length !== 1) {
187
+ errors.push("catalog must contain exactly one enabled default harness");
188
+ }
189
+ return errors.length || !revision
190
+ ? { ok: false, errors }
191
+ : { ok: true, catalog: { schemaVersion: "openscout.runtime-catalog.v1", revision, harnesses } };
192
+ }
@@ -0,0 +1,161 @@
1
+ import { type ScoutLaunchableHarness, type ScoutOwnedRuntimeCatalog, type ScoutOwnedRuntimeHarness, type ScoutReasoningEffort } from "./runtime-catalog-contract.js";
2
+ export * from "./runtime-catalog-contract.js";
3
+ export interface ScoutRuntimeHarnessDefaults {
4
+ model: string | null;
5
+ reasoningEffort: ScoutReasoningEffort | null;
6
+ }
7
+ /**
8
+ * Scout's versioned product catalog. Harness vendors are execution adapters,
9
+ * not catalog authorities: availability, ordering, labels, defaults, and the
10
+ * per-model effort ladder come from runtime-catalog.v1.json. Running brokers
11
+ * may replace this bundled last-known-good seed with a newer valid revision.
12
+ */
13
+ export declare const SCOUT_RUNTIME_CATALOG: ScoutOwnedRuntimeCatalog;
14
+ export declare function scoutRuntimeHarness(harness: string, catalog?: ScoutOwnedRuntimeCatalog): ScoutOwnedRuntimeHarness | undefined;
15
+ export declare function isScoutRuntimeHarnessEnabled(harness: string, catalog?: ScoutOwnedRuntimeCatalog): harness is ScoutLaunchableHarness;
16
+ /** Enabled and offered as its own picker row. Hidden transports remain legal. */
17
+ export declare function isScoutRuntimeHarnessListed(harness: string, catalog?: ScoutOwnedRuntimeCatalog): boolean;
18
+ export declare function scoutRuntimeDefaultHarness(catalog?: ScoutOwnedRuntimeCatalog): ScoutLaunchableHarness | null;
19
+ export declare function scoutRuntimeDefaultModel(harness: string, catalog?: ScoutOwnedRuntimeCatalog): string | null;
20
+ export declare function scoutRuntimeReasoningEfforts(harness: string, model?: string | null, catalog?: ScoutOwnedRuntimeCatalog): readonly ScoutReasoningEffort[] | null;
21
+ export declare function scoutRuntimeDefaultReasoningEffort(harness: string, model?: string | null, catalog?: ScoutOwnedRuntimeCatalog): ScoutReasoningEffort | null;
22
+ export declare function scoutRuntimeDefaultsByHarness(catalog?: ScoutOwnedRuntimeCatalog): Readonly<Partial<Record<ScoutLaunchableHarness, ScoutRuntimeHarnessDefaults>>>;
23
+ export declare const SCOUT_RUNTIME_DEFAULTS_BY_HARNESS: Readonly<Partial<Record<"codex" | "claude" | "grok" | "grok-acp" | "kimi" | "flue" | "cursor" | "opencode" | "pi", ScoutRuntimeHarnessDefaults>>>;
24
+ export declare const SCOUT_REASONING_EFFORTS_BY_HARNESS: Readonly<Partial<Record<ScoutLaunchableHarness, readonly ScoutReasoningEffort[]>>>;
25
+ export type ScoutRuntimeResolutionSource = "flag" | "literal" | "profile" | "endpoint" | "config" | "default";
26
+ export type ScoutRuntimeDriftState = "unknown" | "match" | "mismatch";
27
+ export interface ScoutRuntimeDimensionResolution {
28
+ requested?: string;
29
+ resolved?: string;
30
+ source?: ScoutRuntimeResolutionSource;
31
+ observed?: string;
32
+ observedAt?: number;
33
+ drift: ScoutRuntimeDriftState;
34
+ }
35
+ /**
36
+ * Durable execution truth for one concrete session. `requested` is caller
37
+ * intent, `resolved` is the spawn value after the launch ladder, and
38
+ * `observed` is populated only from harness-owned evidence.
39
+ */
40
+ export interface ScoutExecutionResolution {
41
+ schemaVersion: "openscout.execution-resolution.v1";
42
+ harness: ScoutRuntimeDimensionResolution;
43
+ model: ScoutRuntimeDimensionResolution;
44
+ reasoningEffort: ScoutRuntimeDimensionResolution;
45
+ sessionId?: string;
46
+ resolvedAt?: number;
47
+ observedAt?: number;
48
+ }
49
+ export interface ScoutRuntimeModelOption {
50
+ id: string;
51
+ label: string;
52
+ description?: string;
53
+ harnesses: ScoutLaunchableHarness[];
54
+ source: "catalog" | "observed" | "configured" | "default";
55
+ family?: string;
56
+ version?: string;
57
+ }
58
+ export interface ScoutRuntimeEffortOption {
59
+ id: ScoutReasoningEffort;
60
+ label: string;
61
+ description?: string;
62
+ harnesses: ScoutLaunchableHarness[];
63
+ /**
64
+ * Model-scoped restriction, interpreted per harness: the rung is withheld
65
+ * only from catalog models of a harness that has at least one model named
66
+ * here. `max` naming `gpt-5.6-*` ids restricts Codex models but leaves
67
+ * Claude's ladder untouched. Empty/absent means every model of every listed
68
+ * harness supports the rung.
69
+ */
70
+ models?: string[];
71
+ }
72
+ export interface ScoutRuntimeHarnessOption {
73
+ id: ScoutLaunchableHarness;
74
+ name?: string;
75
+ label: string;
76
+ description?: string | null;
77
+ state?: "ready" | "configured" | "installed" | "missing" | null;
78
+ ready?: boolean | null;
79
+ detail?: string | null;
80
+ }
81
+ export interface ScoutRuntimeCapabilityCatalog {
82
+ schemaVersion: "openscout.runtime-capabilities.v1";
83
+ catalogVersion?: ScoutOwnedRuntimeCatalog["schemaVersion"];
84
+ catalogRevision?: string;
85
+ generatedAt: number;
86
+ scope: "global" | "project" | "global+project";
87
+ projectRoot?: string;
88
+ harnesses: ScoutRuntimeHarnessOption[];
89
+ models: ScoutRuntimeModelOption[];
90
+ efforts: ScoutRuntimeEffortOption[];
91
+ defaults?: {
92
+ harness?: ScoutLaunchableHarness;
93
+ model?: string | null;
94
+ reasoningEffort?: ScoutReasoningEffort | null;
95
+ };
96
+ defaultsByHarness?: Partial<Record<ScoutLaunchableHarness, ScoutRuntimeHarnessDefaults>>;
97
+ warnings?: string[];
98
+ }
99
+ /** Project one nested catalog into the flat API model list. */
100
+ export declare function scoutRuntimeModelCatalog(catalog?: ScoutOwnedRuntimeCatalog): ScoutRuntimeModelOption[];
101
+ /** Projections retained for API compatibility; SCOUT_RUNTIME_CATALOG owns them. */
102
+ export declare const SCOUT_RUNTIME_MODEL_CATALOG: readonly ScoutRuntimeModelOption[];
103
+ export declare function scoutRuntimeEffortCatalog(catalog?: ScoutOwnedRuntimeCatalog): ScoutRuntimeEffortOption[];
104
+ export declare const SCOUT_RUNTIME_EFFORT_CATALOG: readonly ScoutRuntimeEffortOption[];
105
+ export type ScoutRuntimeTuple = {
106
+ harness?: string | null;
107
+ model?: string | null;
108
+ reasoningEffort?: string | null;
109
+ };
110
+ export interface ScoutRuntimeSpec {
111
+ harness: ScoutLaunchableHarness;
112
+ model?: string;
113
+ reasoningEffort?: ScoutReasoningEffort;
114
+ }
115
+ export type ScoutRuntimeSpecParseResult = {
116
+ ok: true;
117
+ value: ScoutRuntimeSpec;
118
+ } | {
119
+ ok: false;
120
+ error: string;
121
+ };
122
+ export type ScoutRuntimeModelNormalization = {
123
+ ok: true;
124
+ requested: string;
125
+ resolved: string;
126
+ } | {
127
+ ok: false;
128
+ requested: string;
129
+ error: string;
130
+ candidates?: string[];
131
+ };
132
+ /** Canonical model aliases shared by every request boundary and spawn path. */
133
+ export declare function normalizeScoutRuntimeModel(harness: string, input: string): ScoutRuntimeModelNormalization;
134
+ /** Parse the shell-safe `<harness>[/<model>[/<effort>]]` production. */
135
+ export declare function parseScoutRuntimeSpec(input: string): ScoutRuntimeSpecParseResult;
136
+ export declare function formatScoutRuntimeSpec(spec: ScoutRuntimeSpec): string;
137
+ export type ScoutRuntimeTupleIssue = {
138
+ code: "unsupported_harness" | "unsupported_reasoning_effort" | "reasoning_effort_harness_mismatch" | "unsupported_model_dimension" | "model_harness_mismatch";
139
+ dimension: "harness" | "model" | "reasoningEffort";
140
+ message: string;
141
+ };
142
+ export declare function isScoutLaunchableHarness(value: string | null | undefined): value is ScoutLaunchableHarness;
143
+ export declare function normalizeScoutReasoningEffort(value: string | null | undefined): ScoutReasoningEffort | null;
144
+ export declare function runtimeDimensionResolution(input: {
145
+ requested?: string | null;
146
+ resolved?: string | null;
147
+ source?: ScoutRuntimeResolutionSource;
148
+ observed?: string | null;
149
+ observedAt?: number;
150
+ }): ScoutRuntimeDimensionResolution;
151
+ export declare function createScoutExecutionResolution(input: {
152
+ requested?: ScoutRuntimeTuple;
153
+ resolved?: ScoutRuntimeTuple;
154
+ source?: Partial<Record<"harness" | "model" | "reasoningEffort", ScoutRuntimeResolutionSource>>;
155
+ observed?: ScoutRuntimeTuple;
156
+ sessionId?: string;
157
+ resolvedAt?: number;
158
+ observedAt?: number;
159
+ }): ScoutExecutionResolution;
160
+ export declare function validateScoutRuntimeTuple(input: ScoutRuntimeTuple, catalog?: Pick<ScoutRuntimeCapabilityCatalog, "models" | "efforts">): ScoutRuntimeTupleIssue[];
161
+ //# sourceMappingURL=runtime-execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-execution.d.ts","sourceRoot":"","sources":["../src/runtime-execution.ts"],"names":[],"mappings":"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"}