@hachej/boring-agent 0.1.95 → 0.1.96
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/dist/DebugDrawer-2TO5SE2D.js +7 -0
- package/dist/{chunk-NITBKFG6.js → chunk-3OEDBRKY.js} +93 -58
- package/dist/{chunk-BOIV2I3N.js → chunk-46HJK2ES.js} +31 -16
- package/dist/{chunk-AQBXNPMD.js → chunk-4IQ4HHBG.js} +4 -0
- package/dist/{chunk-OFQ7J6SI.js → chunk-LSO2AO6Q.js} +57 -1
- package/dist/{chunk-2EMAKBVR.js → chunk-NSE2RHU3.js} +8967 -7740
- package/dist/{chunk-2GBHYJVC.js → chunk-VXF5DWS6.js} +34 -0
- package/dist/{chunk-2TMS2RU2.js → chunk-WC5KBGP2.js} +518 -165
- package/dist/chunk-YGRQ4Q5P.js +20 -0
- package/dist/core/index.d.ts +5 -5
- package/dist/core/index.js +604 -7
- package/dist/{createHarness-UCD74XXK.js → createHarness-PW3A2MRB.js} +3 -3
- package/dist/{errors-G6T6S7PQ.d.ts → errors-cNC4HMpV.d.ts} +14 -7
- package/dist/eval/index.d.ts +5 -3
- package/dist/eval/index.js +31 -23
- package/dist/file-search-QxnanNjO.d.ts +87 -0
- package/dist/front/index.d.ts +84 -16
- package/dist/front/index.js +832 -339
- package/dist/front/styles.css +1171 -2129
- package/dist/{harness-Cc48o6uS.d.ts → harness-DS8jLKIx.d.ts} +4 -2
- package/dist/{lease-CusB-uLg.d.ts → lease-D8WC6pQl.d.ts} +10 -89
- package/dist/{middleware-CzW8n7B7.d.ts → middleware-Cq_cYHjJ.d.ts} +1 -1
- package/dist/piChatEvent-B3ehh9V0.d.ts +384 -0
- package/dist/{piChatSessionService-C0KbcGw9.d.ts → piChatSessionService-xnv8rcdh.d.ts} +1 -1
- package/dist/{sandbox-DAD8cWQR.d.ts → sandbox-KQiEdz4W.d.ts} +12 -1
- package/dist/server/agent-host/testing/compositionRouteProof.d.ts +8 -0
- package/dist/server/agent-host/testing/compositionRouteProof.js +78 -0
- package/dist/server/agent-host/testing/gatewayConformance.d.ts +6 -6
- package/dist/server/agent-host/testing/gatewayConformance.js +17 -9
- package/dist/server/index.d.ts +569 -370
- package/dist/server/index.js +69 -17
- package/dist/server/worker/index.d.ts +2 -2
- package/dist/server/worker/index.js +9 -9
- package/dist/shared/index.d.ts +212 -56
- package/dist/shared/index.js +43 -7
- package/dist/{types-C-Eroi__.d.ts → types-D_SD-7_l.d.ts} +304 -87
- package/docs/AGENT_GATEWAY_V0.md +6 -3
- package/docs/AGENT_PACKAGES.md +80 -0
- package/docs/ERROR_CODES.md +58 -0
- package/docs/README.md +1 -0
- package/docs/runtime.md +19 -2
- package/package.json +34 -29
- package/dist/DebugDrawer-RYEBQ6CO.js +0 -6
- package/dist/chunk-EOMY2HDT.js +0 -619
- package/dist/piChatEvent-BsMp3MSo.d.ts +0 -368
|
@@ -1,13 +1,47 @@
|
|
|
1
|
+
import {
|
|
2
|
+
safeRandomUUID
|
|
3
|
+
} from "./chunk-YGRQ4Q5P.js";
|
|
1
4
|
import {
|
|
2
5
|
AgentConsumptionErrorCode,
|
|
3
6
|
AgentDefinitionErrorCode,
|
|
4
7
|
AgentDeploymentErrorCode,
|
|
5
8
|
ErrorCode
|
|
6
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-VXF5DWS6.js";
|
|
10
|
+
|
|
11
|
+
// src/shared/skill-resource.ts
|
|
12
|
+
var AGENT_RESOURCES_FILESYSTEM_ID = "agent_resources";
|
|
13
|
+
var AGENT_KNOWLEDGE_FILESYSTEM_ID = "agent_knowledge";
|
|
14
|
+
|
|
15
|
+
// src/shared/workspace.ts
|
|
16
|
+
var READONLY_FILESYSTEM_MUTATION_CODE = "readonly";
|
|
17
|
+
var RUNTIME_FILESYSTEM_CAPABILITIES = Object.freeze([
|
|
18
|
+
"read",
|
|
19
|
+
"write",
|
|
20
|
+
"create-child",
|
|
21
|
+
"delete",
|
|
22
|
+
"move-from"
|
|
23
|
+
]);
|
|
24
|
+
var ReadonlyFilesystemMutationError = class extends Error {
|
|
25
|
+
code = READONLY_FILESYSTEM_MUTATION_CODE;
|
|
26
|
+
statusCode = 403;
|
|
27
|
+
filesystem;
|
|
28
|
+
operation;
|
|
29
|
+
constructor(filesystem, operation) {
|
|
30
|
+
super(`${filesystem} binding is readonly`);
|
|
31
|
+
this.name = "ReadonlyFilesystemMutationError";
|
|
32
|
+
this.filesystem = filesystem;
|
|
33
|
+
this.operation = operation;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
function isReadonlyFilesystemMutationError(value) {
|
|
37
|
+
if (!value || typeof value !== "object") return false;
|
|
38
|
+
const candidate = value;
|
|
39
|
+
return candidate.code === READONLY_FILESYSTEM_MUTATION_CODE && candidate.statusCode === 403 && typeof candidate.filesystem === "string" && RUNTIME_FILESYSTEM_CAPABILITIES.includes(candidate.operation);
|
|
40
|
+
}
|
|
7
41
|
|
|
8
42
|
// src/shared/config-schema.ts
|
|
9
43
|
import { z } from "zod";
|
|
10
|
-
var RuntimeModeSchema = z.enum(["direct", "local", "vercel-sandbox"]);
|
|
44
|
+
var RuntimeModeSchema = z.enum(["direct", "local", "blaxel", "vercel-sandbox"]);
|
|
11
45
|
var ConfigSchema = z.object({
|
|
12
46
|
workspaceRoot: z.string(),
|
|
13
47
|
workspaceId: z.string(),
|
|
@@ -53,7 +87,16 @@ var EnvSchema = z.object({
|
|
|
53
87
|
VERCEL_TOKEN: z.string().optional(),
|
|
54
88
|
VERCEL_TEAM_ID: z.string().optional(),
|
|
55
89
|
VERCEL_PROJECT_ID: z.string().optional(),
|
|
56
|
-
BORING_AGENT_VERCEL_SANDBOX_TIMEOUT_MS: z.coerce.number().int().positive().optional()
|
|
90
|
+
BORING_AGENT_VERCEL_SANDBOX_TIMEOUT_MS: z.coerce.number().int().positive().optional(),
|
|
91
|
+
BL_WORKSPACE: z.string().optional(),
|
|
92
|
+
BL_API_KEY: z.string().optional(),
|
|
93
|
+
BORING_BLAXEL_IMAGE: z.string().optional(),
|
|
94
|
+
BORING_BLAXEL_MEMORY_MB: z.coerce.number().int().positive().optional(),
|
|
95
|
+
BORING_BLAXEL_REGION: z.string().optional(),
|
|
96
|
+
BORING_BLAXEL_VOLUME_SIZE_MB: z.coerce.number().int().positive().optional(),
|
|
97
|
+
BORING_BLAXEL_TTL: z.string().optional(),
|
|
98
|
+
BORING_BLAXEL_IDLE_TTL: z.string().optional(),
|
|
99
|
+
BORING_BLAXEL_TERMINATED_RETENTION: z.string().optional()
|
|
57
100
|
});
|
|
58
101
|
function validateConfig(config) {
|
|
59
102
|
return ConfigSchema.parse(config);
|
|
@@ -569,55 +612,6 @@ function assertWithinConsumptionDepth(chain, guards) {
|
|
|
569
612
|
}
|
|
570
613
|
}
|
|
571
614
|
|
|
572
|
-
// src/shared/gateway/errors.ts
|
|
573
|
-
var AgentGatewayErrorCode = {
|
|
574
|
-
AGENT_TYPE_UNKNOWN: "AGENT_TYPE_UNKNOWN",
|
|
575
|
-
AGENT_SESSION_NOT_FOUND: "AGENT_SESSION_NOT_FOUND",
|
|
576
|
-
AGENT_SCOPE_DENIED: "AGENT_SCOPE_DENIED",
|
|
577
|
-
AGENT_SESSION_REPLAY_GAP: "AGENT_SESSION_REPLAY_GAP",
|
|
578
|
-
AGENT_SESSION_CURSOR_AHEAD: "AGENT_SESSION_CURSOR_AHEAD",
|
|
579
|
-
AGENT_SESSION_CURSOR_EXPIRED: "AGENT_SESSION_CURSOR_EXPIRED",
|
|
580
|
-
AGENT_SESSION_CURSOR_INVALID: "AGENT_SESSION_CURSOR_INVALID",
|
|
581
|
-
AGENT_REQUEST_CONFLICT: "AGENT_REQUEST_CONFLICT",
|
|
582
|
-
AGENT_REQUEST_OUTCOME_UNKNOWN: "AGENT_REQUEST_OUTCOME_UNKNOWN",
|
|
583
|
-
AGENT_COMMAND_INVALID_STATE: "AGENT_COMMAND_INVALID_STATE",
|
|
584
|
-
AGENT_SESSION_RUNTIME_SCOPE_MISMATCH: "AGENT_SESSION_RUNTIME_SCOPE_MISMATCH",
|
|
585
|
-
AGENT_SHARED_ENVIRONMENT_UNAVAILABLE: "AGENT_SHARED_ENVIRONMENT_UNAVAILABLE",
|
|
586
|
-
AGENT_GATEWAY_CLOSED: "AGENT_GATEWAY_CLOSED"
|
|
587
|
-
};
|
|
588
|
-
var AGENT_GATEWAY_ERROR_CODES = [
|
|
589
|
-
AgentGatewayErrorCode.AGENT_TYPE_UNKNOWN,
|
|
590
|
-
AgentGatewayErrorCode.AGENT_SESSION_NOT_FOUND,
|
|
591
|
-
AgentGatewayErrorCode.AGENT_SCOPE_DENIED,
|
|
592
|
-
AgentGatewayErrorCode.AGENT_SESSION_REPLAY_GAP,
|
|
593
|
-
AgentGatewayErrorCode.AGENT_SESSION_CURSOR_AHEAD,
|
|
594
|
-
AgentGatewayErrorCode.AGENT_SESSION_CURSOR_EXPIRED,
|
|
595
|
-
AgentGatewayErrorCode.AGENT_SESSION_CURSOR_INVALID,
|
|
596
|
-
AgentGatewayErrorCode.AGENT_REQUEST_CONFLICT,
|
|
597
|
-
AgentGatewayErrorCode.AGENT_REQUEST_OUTCOME_UNKNOWN,
|
|
598
|
-
AgentGatewayErrorCode.AGENT_COMMAND_INVALID_STATE,
|
|
599
|
-
AgentGatewayErrorCode.AGENT_SESSION_RUNTIME_SCOPE_MISMATCH,
|
|
600
|
-
AgentGatewayErrorCode.AGENT_SHARED_ENVIRONMENT_UNAVAILABLE,
|
|
601
|
-
AgentGatewayErrorCode.AGENT_GATEWAY_CLOSED
|
|
602
|
-
];
|
|
603
|
-
var AgentGatewayError = class extends Error {
|
|
604
|
-
code;
|
|
605
|
-
details;
|
|
606
|
-
constructor(code, message, details) {
|
|
607
|
-
super(message);
|
|
608
|
-
this.name = "AgentGatewayError";
|
|
609
|
-
this.code = code;
|
|
610
|
-
this.details = details;
|
|
611
|
-
}
|
|
612
|
-
toJSON() {
|
|
613
|
-
return {
|
|
614
|
-
code: this.code,
|
|
615
|
-
message: this.message,
|
|
616
|
-
...this.details === void 0 ? {} : { details: this.details }
|
|
617
|
-
};
|
|
618
|
-
}
|
|
619
|
-
};
|
|
620
|
-
|
|
621
615
|
// src/shared/share-entry.ts
|
|
622
616
|
import { z as z5 } from "zod";
|
|
623
617
|
var nonEmptyString2 = z5.string().min(1);
|
|
@@ -626,7 +620,7 @@ function isOpaqueLocatorId2(value) {
|
|
|
626
620
|
}
|
|
627
621
|
var OpaqueShareLocatorIdSchema = z5.string().min(1, "must be a non-empty opaque id").max(256, "must be at most 256 characters").refine(isOpaqueLocatorId2, "must be an opaque platform-owned id (no path separators, no scheme, no traversal)");
|
|
628
622
|
function mintShareEntryId() {
|
|
629
|
-
return
|
|
623
|
+
return safeRandomUUID();
|
|
630
624
|
}
|
|
631
625
|
var ShareEntryProvenanceSchema = z5.object({
|
|
632
626
|
producerPrincipalRef: nonEmptyString2,
|
|
@@ -731,6 +725,7 @@ var CREDENTIAL_ERROR_CODES = {
|
|
|
731
725
|
SCHEMA_MISMATCH: "CREDENTIAL_SCHEMA_MISMATCH",
|
|
732
726
|
UNREADABLE: "CREDENTIAL_UNREADABLE",
|
|
733
727
|
BACKEND_UNAVAILABLE: "CREDENTIAL_BACKEND_UNAVAILABLE",
|
|
728
|
+
KEK_UNAVAILABLE: "CREDENTIAL_KEK_UNAVAILABLE",
|
|
734
729
|
LEASE_EXPIRED: "CREDENTIAL_LEASE_EXPIRED",
|
|
735
730
|
OAUTH_STATE_INVALID: "CREDENTIAL_OAUTH_STATE_INVALID",
|
|
736
731
|
OAUTH_REFRESH_FAILED: "CREDENTIAL_OAUTH_REFRESH_FAILED"
|
|
@@ -786,7 +781,7 @@ function validateHttpsOrigin(value) {
|
|
|
786
781
|
schemaMismatch("Invalid sandbox egress origin");
|
|
787
782
|
}
|
|
788
783
|
}
|
|
789
|
-
function
|
|
784
|
+
function providerCredentialFieldsV1(provider) {
|
|
790
785
|
if (provider.credential.type === "api-key") return provider.credential.fields;
|
|
791
786
|
if (provider.credential.type === "oauth2-authorization-code" && provider.credential.tokenCustody === "local-vault") {
|
|
792
787
|
return [
|
|
@@ -827,7 +822,9 @@ function validateBinding(binding, providerRegistry) {
|
|
|
827
822
|
if (!provider.consumerBindingIds.includes(binding.id)) {
|
|
828
823
|
schemaMismatch("Provider does not declare consumer binding");
|
|
829
824
|
}
|
|
830
|
-
const availableFieldIds = new Set(
|
|
825
|
+
const availableFieldIds = new Set(
|
|
826
|
+
providerCredentialFieldsV1(provider).map((field) => field.id)
|
|
827
|
+
);
|
|
831
828
|
const allowedFieldIds = /* @__PURE__ */ new Set();
|
|
832
829
|
for (const fieldId of binding.allowedFieldIds) {
|
|
833
830
|
validateCredentialId(fieldId, "allowed credential field id");
|
|
@@ -889,6 +886,15 @@ function createCredentialConsumerBindingRegistryV1(bindings, providerRegistry) {
|
|
|
889
886
|
});
|
|
890
887
|
}
|
|
891
888
|
|
|
889
|
+
// src/shared/credentials/kmsBackend.ts
|
|
890
|
+
var WORKSPACE_KEK_PROVIDER_VERSION = "boring.workspace-kek-provider.v1";
|
|
891
|
+
var CREDENTIAL_ENVELOPE_VERSION = "boring.credential-envelope.v1";
|
|
892
|
+
var CREDENTIAL_AAD_ENCODING_VERSION = "boring.credential-aad.v1";
|
|
893
|
+
var CREDENTIAL_DEK_BYTE_LENGTH_V1 = 32;
|
|
894
|
+
var CREDENTIAL_KEK_BYTE_LENGTH_V1 = 32;
|
|
895
|
+
var CREDENTIAL_NONCE_BYTE_LENGTH_V1 = 12;
|
|
896
|
+
var CREDENTIAL_AUTH_TAG_BYTE_LENGTH_V1 = 16;
|
|
897
|
+
|
|
892
898
|
// src/shared/credentials/ref.ts
|
|
893
899
|
var PROVIDER_CREDENTIAL_REF_VERSION = "boring.provider-credential-ref.v1";
|
|
894
900
|
var MAX_EXECUTION_ID_LENGTH_V1 = 256;
|
|
@@ -1168,6 +1174,22 @@ function createProviderRegistryV1(defs) {
|
|
|
1168
1174
|
var SANDBOX_CREDENTIAL_MAX_FIELDS_V1 = 16;
|
|
1169
1175
|
var SANDBOX_CREDENTIAL_MAX_METADATA_BYTES_V1 = 16384;
|
|
1170
1176
|
var SANDBOX_CREDENTIAL_MAX_TOTAL_BYTES_V1 = 65536;
|
|
1177
|
+
function sandboxCredentialPayloadMetadataBytesV1(payload) {
|
|
1178
|
+
return new TextEncoder().encode(JSON.stringify({
|
|
1179
|
+
contractVersion: payload.contractVersion,
|
|
1180
|
+
workspaceId: payload.workspaceId,
|
|
1181
|
+
sandboxId: payload.sandboxId,
|
|
1182
|
+
executionId: payload.executionId,
|
|
1183
|
+
deliveryAttemptId: payload.deliveryAttemptId,
|
|
1184
|
+
bindingId: payload.bindingId,
|
|
1185
|
+
credentialVersion: payload.credentialVersion,
|
|
1186
|
+
expiresAt: payload.expiresAt,
|
|
1187
|
+
fields: payload.fields.map((field) => ({
|
|
1188
|
+
fieldId: field.fieldId,
|
|
1189
|
+
byteLength: field.value.byteLength
|
|
1190
|
+
}))
|
|
1191
|
+
})).byteLength;
|
|
1192
|
+
}
|
|
1171
1193
|
function createNotImplementedSandboxCredentialPayloadResolverV1() {
|
|
1172
1194
|
return Object.freeze({
|
|
1173
1195
|
contractVersion: "boring.sandbox-credential-payload-resolver.v1",
|
|
@@ -1181,12 +1203,19 @@ function createNotImplementedSandboxCredentialPayloadResolverV1() {
|
|
|
1181
1203
|
}
|
|
1182
1204
|
|
|
1183
1205
|
export {
|
|
1206
|
+
AGENT_RESOURCES_FILESYSTEM_ID,
|
|
1207
|
+
AGENT_KNOWLEDGE_FILESYSTEM_ID,
|
|
1208
|
+
READONLY_FILESYSTEM_MUTATION_CODE,
|
|
1209
|
+
RUNTIME_FILESYSTEM_CAPABILITIES,
|
|
1210
|
+
ReadonlyFilesystemMutationError,
|
|
1211
|
+
isReadonlyFilesystemMutationError,
|
|
1184
1212
|
RuntimeModeSchema,
|
|
1185
1213
|
ConfigSchema,
|
|
1186
1214
|
EnvSchema,
|
|
1187
1215
|
validateConfig,
|
|
1188
1216
|
DEFAULT_AGENT_RUNTIME_CAPABILITIES,
|
|
1189
1217
|
PI_AGENT_RUNTIME_CAPABILITIES,
|
|
1218
|
+
sha256,
|
|
1190
1219
|
sha256Bytes,
|
|
1191
1220
|
canonicalStringify,
|
|
1192
1221
|
OpaqueRefSchema,
|
|
@@ -1223,9 +1252,6 @@ export {
|
|
|
1223
1252
|
assertNoConsumptionCycle,
|
|
1224
1253
|
isWithinConsumptionDepth,
|
|
1225
1254
|
assertWithinConsumptionDepth,
|
|
1226
|
-
AgentGatewayErrorCode,
|
|
1227
|
-
AGENT_GATEWAY_ERROR_CODES,
|
|
1228
|
-
AgentGatewayError,
|
|
1229
1255
|
OpaqueShareLocatorIdSchema,
|
|
1230
1256
|
ShareEntryProvenanceSchema,
|
|
1231
1257
|
ShareEntryV1Schema,
|
|
@@ -1235,12 +1261,21 @@ export {
|
|
|
1235
1261
|
resolveShareEntry,
|
|
1236
1262
|
CREDENTIAL_ERROR_CODES,
|
|
1237
1263
|
CredentialResolutionError,
|
|
1264
|
+
providerCredentialFieldsV1,
|
|
1238
1265
|
createCredentialConsumerBindingRegistryV1,
|
|
1266
|
+
WORKSPACE_KEK_PROVIDER_VERSION,
|
|
1267
|
+
CREDENTIAL_ENVELOPE_VERSION,
|
|
1268
|
+
CREDENTIAL_AAD_ENCODING_VERSION,
|
|
1269
|
+
CREDENTIAL_DEK_BYTE_LENGTH_V1,
|
|
1270
|
+
CREDENTIAL_KEK_BYTE_LENGTH_V1,
|
|
1271
|
+
CREDENTIAL_NONCE_BYTE_LENGTH_V1,
|
|
1272
|
+
CREDENTIAL_AUTH_TAG_BYTE_LENGTH_V1,
|
|
1239
1273
|
PROVIDER_CREDENTIAL_REF_VERSION,
|
|
1240
1274
|
createProviderCredentialRefFactoryV1,
|
|
1241
1275
|
createProviderRegistryV1,
|
|
1242
1276
|
SANDBOX_CREDENTIAL_MAX_FIELDS_V1,
|
|
1243
1277
|
SANDBOX_CREDENTIAL_MAX_METADATA_BYTES_V1,
|
|
1244
1278
|
SANDBOX_CREDENTIAL_MAX_TOTAL_BYTES_V1,
|
|
1279
|
+
sandboxCredentialPayloadMetadataBytesV1,
|
|
1245
1280
|
createNotImplementedSandboxCredentialPayloadResolverV1
|
|
1246
1281
|
};
|
|
@@ -1,6 +1,28 @@
|
|
|
1
|
+
import {
|
|
2
|
+
safeRandomUUID
|
|
3
|
+
} from "./chunk-YGRQ4Q5P.js";
|
|
4
|
+
|
|
1
5
|
// src/front/DebugDrawer.tsx
|
|
2
6
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
3
7
|
|
|
8
|
+
// src/front/agentHttp.ts
|
|
9
|
+
function agentResourceUrl(apiBaseUrl, path) {
|
|
10
|
+
const base = apiBaseUrl?.replace(/\/$/, "") ?? "";
|
|
11
|
+
return `${base}${path}`;
|
|
12
|
+
}
|
|
13
|
+
function withStorageScope(requestHeaders, storageScope) {
|
|
14
|
+
const headers = {};
|
|
15
|
+
for (const [key, value] of Object.entries(requestHeaders ?? {})) {
|
|
16
|
+
if (value !== void 0) headers[key] = value;
|
|
17
|
+
}
|
|
18
|
+
const hasStorageScope = Object.keys(headers).some((key) => key.toLowerCase() === "x-boring-storage-scope");
|
|
19
|
+
if (storageScope && !hasStorageScope) headers["x-boring-storage-scope"] = storageScope;
|
|
20
|
+
return Object.keys(headers).length > 0 ? headers : void 0;
|
|
21
|
+
}
|
|
22
|
+
function createRequestId(operation) {
|
|
23
|
+
return `${operation}:${safeRandomUUID()}`;
|
|
24
|
+
}
|
|
25
|
+
|
|
4
26
|
// src/front/clipboard.ts
|
|
5
27
|
async function copyTextToClipboard(text) {
|
|
6
28
|
if (typeof navigator !== "undefined" && navigator.clipboard?.writeText) {
|
|
@@ -89,6 +111,7 @@ function SessionTab({ sessionId }) {
|
|
|
89
111
|
var RETRY_DELAY_MS = 2500;
|
|
90
112
|
var MAX_RETRIES = 20;
|
|
91
113
|
function SystemPromptTab({
|
|
114
|
+
agentTypeId,
|
|
92
115
|
apiBaseUrl,
|
|
93
116
|
fetch: fetchImpl,
|
|
94
117
|
sessionId,
|
|
@@ -107,8 +130,8 @@ function SystemPromptTab({
|
|
|
107
130
|
let retryTimer = null;
|
|
108
131
|
setState({ kind: "loading" });
|
|
109
132
|
const nextFetch = fetchImpl ?? globalThis.fetch.bind(globalThis);
|
|
110
|
-
nextFetch(agentResourceUrl(apiBaseUrl, `/api/v1/
|
|
111
|
-
headers:
|
|
133
|
+
nextFetch(agentResourceUrl(apiBaseUrl, `/api/v1/agents/${encodeURIComponent(agentTypeId)}/sessions/${encodeURIComponent(sessionId)}/system-prompt`), {
|
|
134
|
+
headers: withStorageScope(requestHeaders, storageScope)
|
|
112
135
|
}).then(async (res) => {
|
|
113
136
|
if (aborted) return;
|
|
114
137
|
if (res.ok) {
|
|
@@ -139,7 +162,7 @@ function SystemPromptTab({
|
|
|
139
162
|
aborted = true;
|
|
140
163
|
if (retryTimer) clearTimeout(retryTimer);
|
|
141
164
|
};
|
|
142
|
-
}, [apiBaseUrl, fetchImpl, sessionId, requestHeaders, retryKey, storageScope]);
|
|
165
|
+
}, [agentTypeId, apiBaseUrl, fetchImpl, sessionId, requestHeaders, retryKey, storageScope]);
|
|
143
166
|
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col h-full min-h-0", children: [
|
|
144
167
|
/* @__PURE__ */ jsxs("div", { className: "shrink-0 flex items-center justify-between px-3 pt-2 pb-1 border-b border-border/40", children: [
|
|
145
168
|
/* @__PURE__ */ jsx("span", { className: "text-[10px] text-muted-foreground/80 font-mono", children: state.kind === "ok" ? `${state.text.length.toLocaleString()} chars` : state.kind === "loading" ? "loading\u2026" : state.kind === "empty" ? `waiting for session \xB7 retry ${retryCount.current}/${MAX_RETRIES}` : "error" }),
|
|
@@ -262,7 +285,7 @@ var TABS = [
|
|
|
262
285
|
];
|
|
263
286
|
var MIN_WIDTH = 280;
|
|
264
287
|
var MAX_WIDTH = 800;
|
|
265
|
-
function DebugDrawer({ apiBaseUrl, fetch, sessionId, messages, requestHeaders, storageScope, width, onWidthChange }) {
|
|
288
|
+
function DebugDrawer({ agentTypeId, apiBaseUrl, fetch, sessionId, messages, requestHeaders, storageScope, width, onWidthChange }) {
|
|
266
289
|
const [tab, setTab] = useState("session");
|
|
267
290
|
const onDragStart = useCallback((e) => {
|
|
268
291
|
e.preventDefault();
|
|
@@ -307,27 +330,19 @@ function DebugDrawer({ apiBaseUrl, fetch, sessionId, messages, requestHeaders, s
|
|
|
307
330
|
id
|
|
308
331
|
)) }) }),
|
|
309
332
|
/* @__PURE__ */ jsx(TabsContent, { value: "session", forceMount: true, className: "flex flex-col flex-1 min-h-0 overflow-hidden data-[state=inactive]:hidden", children: /* @__PURE__ */ jsx(SessionTab, { sessionId }) }),
|
|
310
|
-
/* @__PURE__ */ jsx(TabsContent, { value: "prompt", forceMount: true, className: "flex flex-col flex-1 min-h-0 overflow-hidden data-[state=inactive]:hidden", children: /* @__PURE__ */ jsx(SystemPromptTab, { apiBaseUrl, fetch, sessionId, requestHeaders, storageScope }) }),
|
|
333
|
+
/* @__PURE__ */ jsx(TabsContent, { value: "prompt", forceMount: true, className: "flex flex-col flex-1 min-h-0 overflow-hidden data-[state=inactive]:hidden", children: /* @__PURE__ */ jsx(SystemPromptTab, { agentTypeId, apiBaseUrl, fetch, sessionId, requestHeaders, storageScope }) }),
|
|
311
334
|
/* @__PURE__ */ jsx(TabsContent, { value: "messages", forceMount: true, className: "flex flex-col flex-1 min-h-0 overflow-hidden data-[state=inactive]:hidden", children: /* @__PURE__ */ jsx(MessagesTab, { messages }) })
|
|
312
335
|
] })
|
|
313
336
|
}
|
|
314
337
|
)
|
|
315
338
|
] });
|
|
316
339
|
}
|
|
317
|
-
function agentResourceUrl(apiBaseUrl, path) {
|
|
318
|
-
const base = apiBaseUrl?.replace(/\/$/, "") ?? "";
|
|
319
|
-
return `${base}${path}`;
|
|
320
|
-
}
|
|
321
|
-
function scopedHeaders(headers, storageScope) {
|
|
322
|
-
if (!headers && !storageScope) return void 0;
|
|
323
|
-
const result = { ...headers ?? {} };
|
|
324
|
-
const hasStorageScope = Object.keys(result).some((key) => key.toLowerCase() === "x-boring-storage-scope");
|
|
325
|
-
if (storageScope && !hasStorageScope) result["x-boring-storage-scope"] = storageScope;
|
|
326
|
-
return result;
|
|
327
|
-
}
|
|
328
340
|
|
|
329
341
|
export {
|
|
330
342
|
cn,
|
|
331
343
|
copyTextToClipboard,
|
|
344
|
+
agentResourceUrl,
|
|
345
|
+
withStorageScope,
|
|
346
|
+
createRequestId,
|
|
332
347
|
DebugDrawer
|
|
333
348
|
};
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// src/shared/session.ts
|
|
2
|
+
var SAFE_NATIVE_SESSION_ID = /^[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)*$/;
|
|
3
|
+
|
|
1
4
|
// src/shared/telemetry.ts
|
|
2
5
|
var noopTelemetry = {
|
|
3
6
|
capture() {
|
|
@@ -12,6 +15,7 @@ function safeCapture(telemetry, event) {
|
|
|
12
15
|
}
|
|
13
16
|
|
|
14
17
|
export {
|
|
18
|
+
SAFE_NATIVE_SESSION_ID,
|
|
15
19
|
noopTelemetry,
|
|
16
20
|
safeCapture
|
|
17
21
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ErrorCode
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-VXF5DWS6.js";
|
|
4
4
|
|
|
5
5
|
// src/shared/tool-ui.ts
|
|
6
6
|
function isRecord(value) {
|
|
@@ -33,6 +33,59 @@ function extractToolUiMetadata(output) {
|
|
|
33
33
|
var WORKSPACE_AGENT_PLUGINS_RELOADED_EVENT = "boring-ui:agent-plugins-reloaded";
|
|
34
34
|
var WORKSPACE_COMMAND_NOTIFY_EVENT = "boring-ui:command-notify";
|
|
35
35
|
|
|
36
|
+
// src/shared/gateway/errors.ts
|
|
37
|
+
var AgentGatewayErrorCode = {
|
|
38
|
+
AGENT_TYPE_UNKNOWN: "AGENT_TYPE_UNKNOWN",
|
|
39
|
+
AGENT_SESSION_NOT_FOUND: "AGENT_SESSION_NOT_FOUND",
|
|
40
|
+
AGENT_SCOPE_DENIED: "AGENT_SCOPE_DENIED",
|
|
41
|
+
AGENT_SESSION_REPLAY_GAP: "AGENT_SESSION_REPLAY_GAP",
|
|
42
|
+
AGENT_SESSION_CURSOR_AHEAD: "AGENT_SESSION_CURSOR_AHEAD",
|
|
43
|
+
AGENT_SESSION_CURSOR_EXPIRED: "AGENT_SESSION_CURSOR_EXPIRED",
|
|
44
|
+
AGENT_SESSION_CURSOR_INVALID: "AGENT_SESSION_CURSOR_INVALID",
|
|
45
|
+
AGENT_REQUEST_CONFLICT: "AGENT_REQUEST_CONFLICT",
|
|
46
|
+
AGENT_REQUEST_IN_PROGRESS: "AGENT_REQUEST_IN_PROGRESS",
|
|
47
|
+
AGENT_REQUEST_OUTCOME_UNKNOWN: "AGENT_REQUEST_OUTCOME_UNKNOWN",
|
|
48
|
+
AGENT_RUNTIME_RESTART_REQUIRED: "AGENT_RUNTIME_RESTART_REQUIRED",
|
|
49
|
+
AGENT_COMMAND_INVALID_STATE: "AGENT_COMMAND_INVALID_STATE",
|
|
50
|
+
AGENT_SESSION_RUNTIME_SCOPE_MISMATCH: "AGENT_SESSION_RUNTIME_SCOPE_MISMATCH",
|
|
51
|
+
AGENT_SHARED_ENVIRONMENT_UNAVAILABLE: "AGENT_SHARED_ENVIRONMENT_UNAVAILABLE",
|
|
52
|
+
AGENT_GATEWAY_CLOSED: "AGENT_GATEWAY_CLOSED"
|
|
53
|
+
};
|
|
54
|
+
var AGENT_GATEWAY_ERROR_CODES = [
|
|
55
|
+
AgentGatewayErrorCode.AGENT_TYPE_UNKNOWN,
|
|
56
|
+
AgentGatewayErrorCode.AGENT_SESSION_NOT_FOUND,
|
|
57
|
+
AgentGatewayErrorCode.AGENT_SCOPE_DENIED,
|
|
58
|
+
AgentGatewayErrorCode.AGENT_SESSION_REPLAY_GAP,
|
|
59
|
+
AgentGatewayErrorCode.AGENT_SESSION_CURSOR_AHEAD,
|
|
60
|
+
AgentGatewayErrorCode.AGENT_SESSION_CURSOR_EXPIRED,
|
|
61
|
+
AgentGatewayErrorCode.AGENT_SESSION_CURSOR_INVALID,
|
|
62
|
+
AgentGatewayErrorCode.AGENT_REQUEST_CONFLICT,
|
|
63
|
+
AgentGatewayErrorCode.AGENT_REQUEST_IN_PROGRESS,
|
|
64
|
+
AgentGatewayErrorCode.AGENT_REQUEST_OUTCOME_UNKNOWN,
|
|
65
|
+
AgentGatewayErrorCode.AGENT_RUNTIME_RESTART_REQUIRED,
|
|
66
|
+
AgentGatewayErrorCode.AGENT_COMMAND_INVALID_STATE,
|
|
67
|
+
AgentGatewayErrorCode.AGENT_SESSION_RUNTIME_SCOPE_MISMATCH,
|
|
68
|
+
AgentGatewayErrorCode.AGENT_SHARED_ENVIRONMENT_UNAVAILABLE,
|
|
69
|
+
AgentGatewayErrorCode.AGENT_GATEWAY_CLOSED
|
|
70
|
+
];
|
|
71
|
+
var AgentGatewayError = class extends Error {
|
|
72
|
+
code;
|
|
73
|
+
details;
|
|
74
|
+
constructor(code, message, details) {
|
|
75
|
+
super(message);
|
|
76
|
+
this.name = "AgentGatewayError";
|
|
77
|
+
this.code = code;
|
|
78
|
+
this.details = details;
|
|
79
|
+
}
|
|
80
|
+
toJSON() {
|
|
81
|
+
return {
|
|
82
|
+
code: this.code,
|
|
83
|
+
message: this.message,
|
|
84
|
+
...this.details === void 0 ? {} : { details: this.details }
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
|
|
36
89
|
// src/shared/chat/piChatSchemas.ts
|
|
37
90
|
import { z } from "zod";
|
|
38
91
|
var nonEmptyString = z.string().min(1);
|
|
@@ -269,6 +322,9 @@ export {
|
|
|
269
322
|
extractToolUiMetadata,
|
|
270
323
|
WORKSPACE_AGENT_PLUGINS_RELOADED_EVENT,
|
|
271
324
|
WORKSPACE_COMMAND_NOTIFY_EVENT,
|
|
325
|
+
AgentGatewayErrorCode,
|
|
326
|
+
AGENT_GATEWAY_ERROR_CODES,
|
|
327
|
+
AgentGatewayError,
|
|
272
328
|
ToolUiMetadataSchema,
|
|
273
329
|
sanitizeToolUiMetadata2,
|
|
274
330
|
ChatErrorSchema,
|