@hachej/boring-agent 0.1.89 → 0.1.91

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 (39) hide show
  1. package/dist/{chunk-GOM3VJOJ.js → chunk-2GBHYJVC.js} +31 -1
  2. package/dist/{chunk-I7UEASPG.js → chunk-BHH5NH7P.js} +5534 -8253
  3. package/dist/{chunk-M32FXCIN.js → chunk-CJ2BW2W2.js} +23 -8
  4. package/dist/{chunk-WZCTVT57.js → chunk-IWBC6SF7.js} +94 -112
  5. package/dist/chunk-NITBKFG6.js +1246 -0
  6. package/dist/{chunk-BDYXKHWY.js → chunk-PZC76CIA.js} +7 -1
  7. package/dist/core/index.d.ts +5 -5
  8. package/dist/core/index.js +2 -2
  9. package/dist/{createHarness-CCQLHKUF.js → createHarness-PMYRKDE4.js} +2 -2
  10. package/dist/errors-BEmw9HMp.d.ts +200 -0
  11. package/dist/front/index.d.ts +30 -5
  12. package/dist/front/index.js +230 -44
  13. package/dist/{harness-VvP0l5Mj.d.ts → harness-Bt_GMNYR.d.ts} +2 -2
  14. package/dist/{workspaceAgentDispatcher-CKEeNPjW.d.ts → lease-2aXepSBL.d.ts} +254 -59
  15. package/dist/{protocol-B_OQKfbI.d.ts → middleware-CzW8n7B7.d.ts} +20 -18
  16. package/dist/piChatEvent-DBO3M5lu.d.ts +367 -0
  17. package/dist/{piChatSessionService-DPjJ0g71.d.ts → piChatSessionService-BaaVWke7.d.ts} +5 -1
  18. package/dist/{sandbox-DthfJaOB.d.ts → sandbox-DAD8cWQR.d.ts} +14 -1
  19. package/dist/server/agent-host/testing/gatewayConformance.d.ts +41 -0
  20. package/dist/server/agent-host/testing/gatewayConformance.js +465 -0
  21. package/dist/server/index.d.ts +507 -708
  22. package/dist/server/index.js +53 -50
  23. package/dist/server/worker/index.d.ts +9 -7
  24. package/dist/server/worker/index.js +19 -28
  25. package/dist/shared/index.d.ts +119 -27
  26. package/dist/shared/index.js +65 -282
  27. package/dist/types-jcMapYr9.d.ts +759 -0
  28. package/docs/ACCESSIBILITY.md +4 -5
  29. package/docs/API.md +3 -0
  30. package/docs/AUTHORING.md +68 -0
  31. package/docs/ERROR_CODES.md +29 -0
  32. package/docs/README.md +1 -0
  33. package/docs/RISKS-MULTI-TAB.md +1 -1
  34. package/docs/runtime-provisioning.md +1 -1
  35. package/docs/runtime.md +9 -6
  36. package/package.json +18 -9
  37. package/dist/chunk-DGRKMMXO.js +0 -8
  38. package/dist/chunk-XPQEF32D.js +0 -385
  39. package/dist/piChatEvent-nmOBSNU9.d.ts +0 -367
@@ -1,33 +1,74 @@
1
1
  import {
2
+ AGENT_GATEWAY_ERROR_CODES,
3
+ AGENT_TASK_SCHEMA_VERSION,
4
+ ARTIFACT_LOCATOR_KINDS,
5
+ AgentConsumptionValidationError,
2
6
  AgentDefinitionValidationError,
3
7
  AgentDeploymentValidationError,
8
+ AgentGatewayError,
9
+ AgentGatewayErrorCode,
10
+ AgentMessageSchema,
11
+ AgentRefSchema,
12
+ AgentTaskSchema,
13
+ ArtifactLocatorSchema,
14
+ ArtifactRefSchema,
15
+ CREDENTIAL_ERROR_CODES,
16
+ ConfigSchema,
17
+ ConsumptionGuardsSchema,
18
+ CredentialResolutionError,
19
+ DEFAULT_AGENT_RUNTIME_CAPABILITIES,
20
+ EnvSchema,
4
21
  InMemoryShareEntryStore,
5
22
  OpaqueRefSchema,
6
23
  OpaqueShareLocatorIdSchema,
7
- SchemaValidationError,
24
+ PI_AGENT_RUNTIME_CAPABILITIES,
25
+ PROVIDER_CREDENTIAL_REF_VERSION,
26
+ PartSchema,
27
+ PrincipalRefSchema,
28
+ RuntimeModeSchema,
29
+ SANDBOX_CREDENTIAL_MAX_FIELDS_V1,
30
+ SANDBOX_CREDENTIAL_MAX_METADATA_BYTES_V1,
31
+ SANDBOX_CREDENTIAL_MAX_TOTAL_BYTES_V1,
8
32
  Sha256DigestSchema,
9
33
  ShareEntryErrorCode,
10
34
  ShareEntryProvenanceSchema,
11
35
  ShareEntryV1Schema,
12
36
  ShareEntryValidationError,
37
+ TASK_STATES,
38
+ TaskStateSchema,
39
+ WorkspaceFileLocatorSchema,
40
+ agentRefEquals,
41
+ assertNoConsumptionCycle,
42
+ assertValidTransition,
43
+ assertWithinConsumptionDepth,
13
44
  createAgentAssetDigest,
14
45
  createAgentDefinitionDigest,
15
46
  createAgentDeploymentDigest,
16
- formatPath,
47
+ createCredentialConsumerBindingRegistryV1,
48
+ createNotImplementedSandboxCredentialPayloadResolverV1,
49
+ createProviderCredentialRefFactoryV1,
50
+ createProviderRegistryV1,
51
+ detectConsumptionCycle,
52
+ isValidTaskTransition,
53
+ isWithinConsumptionDepth,
54
+ parseAgentTaskEdgeCompat,
17
55
  resolveShareEntry,
18
56
  validateAgentDefinition,
19
57
  validateAgentDeployment,
58
+ validateAgentTask,
59
+ validateConfig,
60
+ validateConsumptionGuards,
20
61
  validateTool
21
- } from "../chunk-XPQEF32D.js";
62
+ } from "../chunk-NITBKFG6.js";
63
+ import {
64
+ noopTelemetry,
65
+ safeCapture
66
+ } from "../chunk-AQBXNPMD.js";
22
67
  import {
23
68
  AGENT_NOT_IMPLEMENTED_UNTIL_T1,
24
69
  AgentNotImplementedError,
25
70
  sessionStreamPath
26
71
  } from "../chunk-WSQ5QNIY.js";
27
- import {
28
- WORKSPACE_AGENT_PLUGINS_RELOADED_EVENT,
29
- WORKSPACE_COMMAND_NOTIFY_EVENT
30
- } from "../chunk-DGRKMMXO.js";
31
72
  import {
32
73
  BoringChatMessageSchema,
33
74
  BoringChatPartSchema,
@@ -52,14 +93,12 @@ import {
52
93
  StopReceiptSchema,
53
94
  ThinkingLevelSchema,
54
95
  ToolUiMetadataSchema,
96
+ WORKSPACE_AGENT_PLUGINS_RELOADED_EVENT,
97
+ WORKSPACE_COMMAND_NOTIFY_EVENT,
55
98
  extractToolUiMetadata,
56
99
  isToolUiMetadata,
57
100
  sanitizeToolUiMetadata2 as sanitizeToolUiMetadata
58
- } from "../chunk-BDYXKHWY.js";
59
- import {
60
- noopTelemetry,
61
- safeCapture
62
- } from "../chunk-AQBXNPMD.js";
101
+ } from "../chunk-PZC76CIA.js";
63
102
  import {
64
103
  AgentConsumptionErrorCode,
65
104
  AgentDefinitionErrorCode,
@@ -69,277 +108,9 @@ import {
69
108
  ERROR_CODES,
70
109
  ErrorCode,
71
110
  ErrorLogFieldsSchema
72
- } from "../chunk-GOM3VJOJ.js";
73
-
74
- // src/shared/config-schema.ts
75
- import { z } from "zod";
76
- var RuntimeModeSchema = z.enum(["direct", "local", "vercel-sandbox"]);
77
- var ConfigSchema = z.object({
78
- workspaceRoot: z.string(),
79
- workspaceId: z.string(),
80
- port: z.number().int().positive(),
81
- mode: RuntimeModeSchema,
82
- model: z.string().optional(),
83
- noOpen: z.boolean(),
84
- noGitignore: z.boolean(),
85
- dev: z.boolean(),
86
- verbose: z.boolean()
87
- });
88
- var EnvSchema = z.object({
89
- BORING_AGENT_MODE: RuntimeModeSchema.optional(),
90
- BORING_AGENT_WORKSPACE_ROOT: z.string().optional(),
91
- BORING_AGENT_PORT: z.coerce.number().int().positive().optional(),
92
- BORING_AGENT_TEMPLATE_PATH: z.string().optional(),
93
- BORING_AGENT_VERBOSE: z.enum(["0", "1"]).optional(),
94
- BORING_AGENT_MODEL: z.string().optional(),
95
- BORING_AGENT_DEFAULT_MODEL: z.string().optional(),
96
- BORING_AGENT_DEFAULT_MODEL_PROVIDER: z.string().optional(),
97
- BORING_AGENT_DEFAULT_MODEL_ID: z.string().optional(),
98
- BORING_AGENT_INFOMANIAK_PROVIDER: z.string().optional(),
99
- BORING_AGENT_INFOMANIAK_PRODUCT_ID: z.string().optional(),
100
- BORING_AGENT_INFOMANIAK_BASE_URL: z.string().url().optional(),
101
- BORING_AGENT_INFOMANIAK_MODEL: z.string().optional(),
102
- BORING_AGENT_INFOMANIAK_MODEL_NAME: z.string().optional(),
103
- BORING_AGENT_INFOMANIAK_API_KEY_ENV: z.string().optional(),
104
- BORING_AGENT_INFOMANIAK_API_KEY: z.string().optional(),
105
- BORING_AGENT_CUSTOM_MODEL_PROVIDER: z.string().optional(),
106
- BORING_AGENT_CUSTOM_MODEL_ID: z.string().optional(),
107
- BORING_AGENT_CUSTOM_MODEL_NAME: z.string().optional(),
108
- BORING_AGENT_CUSTOM_MODEL_BASE_URL: z.string().url().optional(),
109
- BORING_AGENT_CUSTOM_MODEL_API_KEY_ENV: z.string().optional(),
110
- BORING_AGENT_CUSTOM_MODEL_API_KEY: z.string().optional(),
111
- BORING_AGENT_CONFIG: z.string().optional(),
112
- BORING_AGENT_DEV: z.enum(["0", "1"]).optional(),
113
- BORING_AGENT_NO_OPEN: z.enum(["0", "1"]).optional(),
114
- BORING_AGENT_NO_GITIGNORE: z.enum(["0", "1"]).optional(),
115
- BORING_AGENT_SNAPSHOT_KEEP: z.coerce.number().int().nonnegative().optional(),
116
- BORING_AGENT_PYTHON_PACKAGES: z.string().optional(),
117
- VERCEL_OIDC_TOKEN: z.string().optional(),
118
- VERCEL_ACCESS_TOKEN: z.string().optional(),
119
- VERCEL_TOKEN: z.string().optional(),
120
- VERCEL_TEAM_ID: z.string().optional(),
121
- VERCEL_PROJECT_ID: z.string().optional(),
122
- BORING_AGENT_VERCEL_SANDBOX_TIMEOUT_MS: z.coerce.number().int().positive().optional()
123
- });
124
- function validateConfig(config) {
125
- return ConfigSchema.parse(config);
126
- }
127
-
128
- // src/shared/capabilities.ts
129
- var DEFAULT_AGENT_RUNTIME_CAPABILITIES = {
130
- nativeFollowUp: false,
131
- aiSdkOwnsHistory: true
132
- };
133
- var PI_AGENT_RUNTIME_CAPABILITIES = {
134
- nativeFollowUp: true,
135
- aiSdkOwnsHistory: false
136
- };
137
-
138
- // src/shared/agent-consumption.ts
139
- import { z as z2 } from "zod";
140
- var nonEmptyString = z2.string().min(1);
141
- function isOpaqueLocatorId(value) {
142
- return value.trim() === value && !/[\0-\x1f\x7f]/.test(value) && !value.includes("/") && !value.includes("\\") && !value.includes(":") && value !== "." && value !== "..";
143
- }
144
- var OpaqueLocatorIdSchema = z2.string().min(1, "must be a non-empty opaque id").max(256, "must be at most 256 characters").refine(isOpaqueLocatorId, 'must be an opaque platform-owned id (no path separators, scheme, or "..")');
145
- var TASK_STATES = [
146
- "submitted",
147
- "working",
148
- "input-required",
149
- "completed",
150
- "failed",
151
- "canceled",
152
- "rejected"
153
- ];
154
- var TaskStateSchema = z2.enum(TASK_STATES);
155
- var TASK_TRANSITIONS = {
156
- submitted: ["working", "rejected", "canceled"],
157
- working: ["input-required", "completed", "failed", "canceled", "rejected"],
158
- "input-required": ["working", "canceled"],
159
- completed: [],
160
- failed: [],
161
- canceled: [],
162
- rejected: []
163
- };
164
- function isValidTaskTransition(from, to) {
165
- return TASK_TRANSITIONS[from].includes(to);
166
- }
167
- function assertValidTransition(from, to) {
168
- if (!isValidTaskTransition(from, to)) {
169
- throw new AgentConsumptionValidationError({
170
- code: AgentConsumptionErrorCode.enum.AGENT_CONSUMPTION_INVALID_TRANSITION,
171
- field: "state",
172
- message: `invalid task state transition: '${from}' -> '${to}'`
173
- });
174
- }
175
- }
176
- var PrincipalRefSchema = z2.object({
177
- userId: nonEmptyString,
178
- workspaceId: nonEmptyString
179
- }).strict();
180
- var AgentRefSchema = z2.object({
181
- agentId: nonEmptyString,
182
- deploymentId: nonEmptyString.optional()
183
- }).strict();
184
- function agentRefEquals(a, b) {
185
- return a.agentId === b.agentId && (a.deploymentId ?? null) === (b.deploymentId ?? null);
186
- }
187
- var ARTIFACT_LOCATOR_KINDS = ["workspace-file"];
188
- var WorkspaceFileLocatorSchema = z2.object({
189
- kind: z2.literal("workspace-file"),
190
- workspaceId: OpaqueLocatorIdSchema,
191
- fileId: OpaqueLocatorIdSchema,
192
- digest: Sha256DigestSchema
193
- }).strict();
194
- var ArtifactLocatorSchema = z2.discriminatedUnion("kind", [WorkspaceFileLocatorSchema]);
195
- var ArtifactRefSchema = z2.object({
196
- artifactId: nonEmptyString,
197
- name: z2.string().optional(),
198
- mimeType: nonEmptyString,
199
- locator: ArtifactLocatorSchema
200
- }).strict();
201
- var PartSchema = z2.discriminatedUnion("type", [
202
- z2.object({ type: z2.literal("text"), text: z2.string() }).strict(),
203
- z2.object({ type: z2.literal("file"), file: ArtifactRefSchema }).strict(),
204
- z2.object({ type: z2.literal("data"), mimeType: nonEmptyString, data: z2.unknown() }).strict()
205
- ]);
206
- var AgentMessageSchema = z2.object({
207
- role: z2.enum(["consumer", "agent"]),
208
- parts: z2.array(PartSchema),
209
- ts: nonEmptyString
210
- }).strict();
211
- var AGENT_TASK_SCHEMA_VERSION = "2";
212
- var AgentTaskSchema = z2.object({
213
- id: nonEmptyString,
214
- contextId: nonEmptyString,
215
- state: TaskStateSchema,
216
- messages: z2.array(AgentMessageSchema),
217
- artifacts: z2.array(ArtifactRefSchema),
218
- principal: PrincipalRefSchema,
219
- actor: AgentRefSchema.optional(),
220
- schemaVersion: z2.literal(AGENT_TASK_SCHEMA_VERSION),
221
- createdAt: nonEmptyString,
222
- updatedAt: nonEmptyString
223
- }).strict();
224
- function schemaMismatchIssues(issues) {
225
- return issues.map((issue) => {
226
- const field = formatPath(issue.path);
227
- return {
228
- code: AgentConsumptionErrorCode.enum.AGENT_CONSUMPTION_SCHEMA_MISMATCH,
229
- field,
230
- message: field === "<root>" ? issue.message : `${field} ${issue.message}`
231
- };
232
- });
233
- }
234
- function validateAgentTask(raw) {
235
- const result = AgentTaskSchema.safeParse(raw);
236
- if (!result.success) {
237
- return { valid: false, issues: schemaMismatchIssues(result.error.issues) };
238
- }
239
- return { valid: true, value: result.data };
240
- }
241
- var AgentConsumptionValidationError = class extends SchemaValidationError {
242
- constructor(issue) {
243
- super(issue);
244
- this.name = "AgentConsumptionValidationError";
245
- }
246
- };
247
- var LegacyArtifactRefSchema = z2.object({
248
- artifactId: nonEmptyString,
249
- name: z2.string().optional(),
250
- mimeType: nonEmptyString,
251
- uri: nonEmptyString
252
- }).strict();
253
- var LegacyPartSchema = z2.discriminatedUnion("type", [
254
- z2.object({ type: z2.literal("text"), text: z2.string() }).strict(),
255
- z2.object({ type: z2.literal("file"), file: LegacyArtifactRefSchema }).strict(),
256
- z2.object({ type: z2.literal("data"), mimeType: nonEmptyString, data: z2.unknown() }).strict()
257
- ]);
258
- var LegacyAgentMessageSchema = z2.object({
259
- role: z2.enum(["consumer", "agent"]),
260
- parts: z2.array(LegacyPartSchema),
261
- ts: nonEmptyString
262
- }).strict();
263
- var LegacyAgentTaskSchema = z2.object({
264
- id: nonEmptyString,
265
- contextId: nonEmptyString,
266
- state: TaskStateSchema,
267
- messages: z2.array(LegacyAgentMessageSchema),
268
- artifacts: z2.array(LegacyArtifactRefSchema),
269
- principal: PrincipalRefSchema,
270
- actor: AgentRefSchema.optional(),
271
- schemaVersion: z2.literal("1"),
272
- createdAt: nonEmptyString,
273
- updatedAt: nonEmptyString
274
- }).strict();
275
- function collectLegacyArtifactUris(raw) {
276
- const uris = [];
277
- for (const artifact of raw.artifacts) uris.push(artifact.uri);
278
- for (const message of raw.messages) {
279
- for (const part of message.parts) {
280
- if (part.type === "file") uris.push(part.file.uri);
281
- }
282
- }
283
- return uris;
284
- }
285
- function parseAgentTaskEdgeCompat(raw) {
286
- const v2 = AgentTaskSchema.safeParse(raw);
287
- if (v2.success) return { valid: true, value: v2.data };
288
- const legacy = LegacyAgentTaskSchema.safeParse(raw);
289
- if (legacy.success) {
290
- const uris = collectLegacyArtifactUris(legacy.data);
291
- const issues = uris.length > 0 ? uris.map((uri, index) => ({
292
- code: AgentConsumptionErrorCode.enum.AGENT_CONSUMPTION_LEGACY_ARTIFACT_REJECTED,
293
- field: `artifacts[${index}].uri`,
294
- message: `schemaVersion '1' artifact uri '${uri}' has no typed ArtifactLocator translation and is refused before any storage/network effect`
295
- })) : [
296
- {
297
- code: AgentConsumptionErrorCode.enum.AGENT_CONSUMPTION_LEGACY_ARTIFACT_REJECTED,
298
- field: "schemaVersion",
299
- message: "schemaVersion '1' is no longer accepted; publish schemaVersion '2' with a typed ArtifactLocator"
300
- }
301
- ];
302
- return { valid: false, issues };
303
- }
304
- return { valid: false, issues: schemaMismatchIssues(v2.error.issues) };
305
- }
306
- var ConsumptionGuardsSchema = z2.object({
307
- maxDepth: z2.number().int().positive(),
308
- inputRequiredTimeoutMs: z2.number().int().positive()
309
- }).strict();
310
- function validateConsumptionGuards(raw) {
311
- const result = ConsumptionGuardsSchema.safeParse(raw);
312
- if (!result.success) {
313
- return { valid: false, issues: schemaMismatchIssues(result.error.issues) };
314
- }
315
- return { valid: true, value: result.data };
316
- }
317
- function detectConsumptionCycle(chain, next) {
318
- return chain.some((ref) => agentRefEquals(ref, next));
319
- }
320
- function assertNoConsumptionCycle(chain, next) {
321
- if (detectConsumptionCycle(chain, next)) {
322
- const label = next.deploymentId ? `${next.agentId}@${next.deploymentId}` : next.agentId;
323
- throw new AgentConsumptionValidationError({
324
- code: AgentConsumptionErrorCode.enum.AGENT_CONSUMPTION_CYCLE_DETECTED,
325
- field: "actor",
326
- message: `consumption cycle detected: agent '${label}' already present in the delegation chain`
327
- });
328
- }
329
- }
330
- function isWithinConsumptionDepth(chain, guards) {
331
- return chain.length < guards.maxDepth;
332
- }
333
- function assertWithinConsumptionDepth(chain, guards) {
334
- if (!isWithinConsumptionDepth(chain, guards)) {
335
- throw new AgentConsumptionValidationError({
336
- code: AgentConsumptionErrorCode.enum.AGENT_CONSUMPTION_DEPTH_EXCEEDED,
337
- field: "depth",
338
- message: `consumption depth exceeded: chain length ${chain.length} >= max depth ${guards.maxDepth}`
339
- });
340
- }
341
- }
111
+ } from "../chunk-2GBHYJVC.js";
342
112
  export {
113
+ AGENT_GATEWAY_ERROR_CODES,
343
114
  AGENT_NOT_IMPLEMENTED_UNTIL_T1,
344
115
  AGENT_TASK_SCHEMA_VERSION,
345
116
  ARTIFACT_LOCATOR_KINDS,
@@ -349,6 +120,8 @@ export {
349
120
  AgentDefinitionValidationError,
350
121
  AgentDeploymentErrorCode,
351
122
  AgentDeploymentValidationError,
123
+ AgentGatewayError,
124
+ AgentGatewayErrorCode,
352
125
  AgentMessageSchema,
353
126
  AgentNotImplementedError,
354
127
  AgentRefSchema,
@@ -359,12 +132,14 @@ export {
359
132
  ArtifactRefSchema,
360
133
  BoringChatMessageSchema,
361
134
  BoringChatPartSchema,
135
+ CREDENTIAL_ERROR_CODES,
362
136
  ChatAttachmentPayloadSchema,
363
137
  ChatErrorSchema,
364
138
  ChatModelSelectionSchema,
365
139
  CommandReceiptSchema,
366
140
  ConfigSchema,
367
141
  ConsumptionGuardsSchema,
142
+ CredentialResolutionError,
368
143
  DEFAULT_AGENT_RUNTIME_CAPABILITIES,
369
144
  ERROR_CODES,
370
145
  EnvSchema,
@@ -377,6 +152,7 @@ export {
377
152
  OpaqueRefSchema,
378
153
  OpaqueShareLocatorIdSchema,
379
154
  PI_AGENT_RUNTIME_CAPABILITIES,
155
+ PROVIDER_CREDENTIAL_REF_VERSION,
380
156
  PartSchema,
381
157
  PiChatEventSchema,
382
158
  PiChatHeartbeatFrameSchema,
@@ -390,6 +166,9 @@ export {
390
166
  QueueClearReceiptSchema,
391
167
  QueuedUserMessageSchema,
392
168
  RuntimeModeSchema,
169
+ SANDBOX_CREDENTIAL_MAX_FIELDS_V1,
170
+ SANDBOX_CREDENTIAL_MAX_METADATA_BYTES_V1,
171
+ SANDBOX_CREDENTIAL_MAX_TOTAL_BYTES_V1,
393
172
  Sha256DigestSchema,
394
173
  ShareEntryErrorCode,
395
174
  ShareEntryProvenanceSchema,
@@ -411,6 +190,10 @@ export {
411
190
  createAgentAssetDigest,
412
191
  createAgentDefinitionDigest,
413
192
  createAgentDeploymentDigest,
193
+ createCredentialConsumerBindingRegistryV1,
194
+ createNotImplementedSandboxCredentialPayloadResolverV1,
195
+ createProviderCredentialRefFactoryV1,
196
+ createProviderRegistryV1,
414
197
  detectConsumptionCycle,
415
198
  extractToolUiMetadata,
416
199
  isToolUiMetadata,